<?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>51001</bug_id>
          
          <creation_ts>2010-12-13 18:57:02 -0800</creation_ts>
          <short_desc>Moving or selecting backwards by words jumps to start of contenteditable region if contenteditable=false span is encountered</short_desc>
          <delta_ts>2011-02-23 02:10:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>52610</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin (Ben) Kalman">kalman</reporter>
          <assigned_to name="Benjamin (Ben) Kalman">kalman</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>321614</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-13 18:57:02 -0800</bug_when>
    <thetext>Repro attached.

1. place cursor on right of the &quot;here&quot; span
2. move back by word granularity a few times (ctrl + left/backspace on linux, option + left/backspace on osx)
3. when cursor would cross &quot;here&quot; it actually jumps back to the start of the region

I believe this is caused by http://trac.webkit.org/changeset/64974, namely the addition of TextIteratorEndsAtEditingBoundary in visible_units.cpp (lines 115 and 150).  Reverting the change results in the failure of editing/selection/doubleclick-inline-first-last-contenteditable.html, however.

Please assign this bug to me, I will fix it :-)

P.S. there is also a bug going /forwards/ over the &quot;here&quot; span, but I haven&apos;t looked at what is causing it.  Could be related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321615</commentid>
    <comment_count>1</comment_count>
      <attachid>76483</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-13 18:57:51 -0800</bug_when>
    <thetext>Created attachment 76483
Repro</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321707</commentid>
    <comment_count>2</comment_count>
      <attachid>76506</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-13 23:09:45 -0800</bug_when>
    <thetext>Created attachment 76506
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321709</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-13 23:22:02 -0800</bug_when>
    <thetext>I&apos;ve looked at the failing test, and it&apos;s caused by the following behaviour: given a dom like 

&lt;div&gt;
Foo
&lt;span contenteditable=false&gt;Bar|&lt;/span&gt; Baz
&lt;/div&gt;

(Cursor indicated with a | vertical bar), moving backwards by a word results in

&lt;div&gt;
Foo|
&lt;span contenteditable&gt;Bar&lt;/span&gt; Baz
&lt;/div&gt;

(causing the selection to be cancelled altogether, it seems), rather than

&lt;div contenteditable&gt;
Foo
&lt;span contenteditable=false&gt;|Bar&lt;/span&gt; Baz
&lt;/div&gt;

http://trac.webkit.org/changeset/64974 fixed this problem by stopping iteration when a contenteditable boundary is crossed, a side-effect being the problem described in this bug.

I&apos;ve upload a potential fix (with a test case) which makes the editability-crossing check more specific*.  However, I think a nicer approach would be to remove the check altogether and address the actual cause of the issue, which I think is a quirk in VisiblePosition::canonicalPosition.  I haven&apos;t looked into it much further than that, however (it&apos;s a slightly mindbending method at first glance).

* and renames accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321710</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-13 23:22:52 -0800</bug_when>
    <thetext>Oops, those 3 html snippets need sed run over them.

sed s/contenteditable=false/contenteditable/g</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321712</commentid>
    <comment_count>5</comment_count>
      <attachid>76506</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-13 23:36:12 -0800</bug_when>
    <thetext>Comment on attachment 76506
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=76506&amp;action=review

Are we sure we want to make this change?  I feel like previousBoundary can now cross editing boundaries and potentially return a position inside non-content editable area even when c is in content editable area.  e.g. if we had something like &lt;div contenteditable&gt;hello wo&lt;span contenteditable=&quot;false&quot;&gt;rld W&lt;/span&gt;ebkit&lt;/div&gt;, do we still do the right thing?  i.e. do not enter inside span when moving forward from hello by word.

&gt; LayoutTests/ChangeLog:7
&gt; +

Could you add a description as to what kind of test you&apos;re adding here?

&gt; LayoutTests/editing/selection/extend-backward-by-word-over-non-editable-expected.txt:6
&gt; +Tests that extending backwards over a non-contenteditable word only extends over that word
&gt; +| &quot;foo bar &lt;#selection-focus&gt;&quot;
&gt; +| &lt;span&gt;
&gt; +|   contenteditable=&quot;false&quot;
&gt; +|   &quot;baz&quot;
&gt; +| &quot;&lt;#selection-anchor&gt; qux quux&quot;

Could you output PASS/FAIl based on the final selection?  I&apos;m concerned that people wrongfully rebaseline this test when this regresses or they&apos;ll have a hard time figuring out what is the right behavior.  Printing PASS/FAIL makes it much easier to know what&apos;s correct and what&apos;s not.

&gt; WebCore/ChangeLog:8
&gt; +
&gt; +        Test: editing/selection/extend-backward-by-word-over-non-editable.html

You need to describe what you&apos;re change is doing.  I usually try to explain what caused the bug and how I fixed it.

&gt; WebCore/editing/TextIterator.h:44
&gt; -    TextIteratorEndsAtEditingBoundary = 1 &lt;&lt; 3,
&gt; +    TextIteratorEndsWhenAscendsAcrossEditingBoundary = 1 &lt;&lt; 3,

I&apos;m not sure &quot;when ascends across&quot; is descriptive but I can&apos;t think of a better name now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321721</commentid>
    <comment_count>6</comment_count>
      <attachid>76506</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-13 23:50:09 -0800</bug_when>
    <thetext>Comment on attachment 76506
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=76506&amp;action=review

In response to your overall comment: yes it&apos;s fine, and doesn&apos;t break the case you describe.  I also thought it might, checked it, and it must have always worked; I haven&apos;t looked into it too much, but there must be code elsewhere that prevents this from occurring.  I think the only reason the weirdness happens here is due to something in VisiblePosition::canonicalPosition, as I mentioned.

(Also note that the change which introduced TextIteratorEndsAtEditingBoundary was only committed a few months ago.)

I&apos;ll fix up the other parts of this patch tonight or tomorrow morning.

&gt;&gt; WebCore/editing/TextIterator.h:44
&gt;&gt; +    TextIteratorEndsWhenAscendsAcrossEditingBoundary = 1 &lt;&lt; 3,
&gt; 
&gt; I&apos;m not sure &quot;when ascends across&quot; is descriptive but I can&apos;t think of a better name now.

I agree it sounds weird, but likewise couldn&apos;t think of a better name at the time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322024</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-14 10:01:42 -0800</bug_when>
    <thetext>I’d like to hear Enrica’s thoughts on this change. She added the editable boundary machinery relatively recently.

I’m concerned that this is a bit inflexible because only editable boundary changes that are immediate children are considered. Could there be cases where there is one additional level of nesting but are otherwise correct to handle in this manner?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322041</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-14 10:31:44 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 76506 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=76506&amp;action=review
&gt; 
&gt; In response to your overall comment: yes it&apos;s fine, and doesn&apos;t break the case you describe.  I also thought it might, checked it, and it must have always worked; I haven&apos;t looked into it too much, but there must be code elsewhere that prevents this from occurring.  I think the only reason the weirdness happens here is due to something in VisiblePosition::canonicalPosition, as I mentioned.

You&apos;re right.  In the case of selection, we do fix that in respondToSelectionChange.  However, previousWordPosition is also called by removeSpellAndCorrectionMarkersFromWordsToBeEdited also calls previousWordPosition.  I don&apos;t see how it can be taking care of this problem. Also, I&apos;m quite surprised that this fix only applies to previousBoundary and not to nextBoundary.

Also I&apos;d like to see some comment or better yet an encapsulation to prevent us from calling nextWordPosition &amp; previousWordPosition wrongfully at places where crossing editing boundary is not okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322323</commentid>
    <comment_count>9</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-14 16:08:57 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; I’d like to hear Enrica’s thoughts on this change. She added the editable boundary machinery relatively recently.

I was under the impression these were added by morrita?  http://trac.webkit.org/changeset/64974 (this is the changeset linked to elsewhere in this bug report).  The bug itself is https://bugs.webkit.org/show_bug.cgi?id=36359.

&gt; 
&gt; I’m concerned that this is a bit inflexible because only editable boundary changes that are immediate children are considered. Could there be cases where there is one additional level of nesting but are otherwise correct to handle in this manner?

Yes, there probably do exist corner cases.  That said, this bug is caused by a regression from ~4 months ago, and as a tradeoff imo this bug is more important to fix.  Not that I&apos;m suggesting this is the right thing to do -- I will into VisiblePosition::canonicalPosition and its handling of contenteditable boundaries, and hopefully fix it there (and then remove the TextIteratorEndsAtEditingBoundary thing altogether).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322326</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-14 16:14:28 -0800</bug_when>
    <thetext>&gt; You&apos;re right.  In the case of selection, we do fix that in respondToSelectionChange.  However, previousWordPosition is also called by removeSpellAndCorrectionMarkersFromWordsToBeEdited also calls previousWordPosition.  I don&apos;t see how it can be taking care of this problem.

What problem to you mean?

&gt; Also, I&apos;m quite surprised that this fix only applies to previousBoundary and not to nextBoundary.

Only previousBoundary uses the TextIteratorEndsAtEditingBoundary, because the patch which caused the regression only changed previousBoundary.

As I mentioned, there is indeed a bug with moving forward by words but I haven&apos;t looked into whether it&apos;s caused by nextBoundary.

&gt; 
&gt; Also I&apos;d like to see some comment or better yet an encapsulation to prevent us from calling nextWordPosition &amp; previousWordPosition wrongfully at places where crossing editing boundary is not okay.

I think that it was always fine, and the patch which caused this regression introduced the editing boundary crossing check purely to fix the bug addressed by the patch (https://bugs.webkit.org/show_bug.cgi?id=36359) i.e. cannot select a word in a contenteditable span at the start of a line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323619</commentid>
    <comment_count>11</comment_count>
      <attachid>76850</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-16 23:40:27 -0800</bug_when>
    <thetext>Created attachment 76850
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323621</commentid>
    <comment_count>12</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-16 23:54:08 -0800</bug_when>
    <thetext>After staring at the code for a while and playing with the debugger, the original patch doesn&apos;t make much sense.  Instead, I&apos;ve reverted the change[1] which caused this regression and fixed the problem in a different way[2].

[1] Adding editability boundary checks to TextIterator.h/cpp wasn&apos;t necessary; this is done elsewhere (rniwa: I can&apos;t find the respondToSelectionChange you mention, but anyway...).

[2] This is the use-rightmost-Position stuff.  Honestly I&apos;m not entirely sure how legitimate that is, but it&apos;s a pretty clean way of fixing the bug imo.  Otherwise I&apos;d say, just revert the editability boundary check stuff and leave it at that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323645</commentid>
    <comment_count>13</comment_count>
      <attachid>76850</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-17 01:08:57 -0800</bug_when>
    <thetext>Comment on attachment 76850
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=76850&amp;action=review

&gt; LayoutTests/editing/selection/extend-backward-by-word-over-non-editable-expected.txt:11
&gt; +Dump of markup 2:
&gt; +| &quot;PASS&quot;

This doesn&apos;t look right.  I don&apos;t think this is a good usage of dump-as-markup.

&gt; LayoutTests/editing/selection/extend-backward-by-word-over-non-editable.html:19
&gt; +    Markup.description(&quot;Tests that extending backwards over a non-contenteditable word only extends over that word&quot;);
&gt; +    Markup.dump(textContainer);
&gt; +    Markup.dump(result);

Is there any point in using dump-as-markup.js here?  Doesn&apos;t printing PASS/FAIL suffice?  I think we should just call dumpAsText() and print PASS/FAIL.

&gt; WebCore/editing/visible_units.cpp:129
&gt; +        pos = it.range().get()-&gt;startPosition();

No need to call get().  We have overloaded operator-&gt;().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323647</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-17 01:12:17 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; After staring at the code for a while and playing with the debugger, the original patch doesn&apos;t make much sense.  Instead, I&apos;ve reverted the change[1] which caused this regression and fixed the problem in a different way[2].

You&apos;re probably referring to the changeset http://trac.webkit.org/changeset/64974 but this change set moved some of editing boundary checks from visible_units into TextIterator.  Your patch seems to revert the changes in TextIterator but does not introduce new checks into visible_units.  How is this correct?

&gt; [1] Adding editability boundary checks to TextIterator.h/cpp wasn&apos;t necessary; this is done elsewhere (rniwa: I can&apos;t find the respondToSelectionChange you mention, but anyway...).

I meant VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323648</commentid>
    <comment_count>15</comment_count>
      <attachid>76850</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-17 01:22:46 -0800</bug_when>
    <thetext>Comment on attachment 76850
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=76850&amp;action=review

&gt;&gt; LayoutTests/editing/selection/extend-backward-by-word-over-non-editable.html:19
&gt;&gt; +    Markup.dump(result);
&gt; 
&gt; Is there any point in using dump-as-markup.js here?  Doesn&apos;t printing PASS/FAIL suffice?  I think we should just call dumpAsText() and print PASS/FAIL.

Yes I suppose.  otoh it might be nice to see if it fails what the failure is, and when running the test by hand at least this way it also says pass/fail in the dom.

&gt;&gt; WebCore/editing/visible_units.cpp:129
&gt;&gt; +        pos = it.range().get()-&gt;startPosition();
&gt; 
&gt; No need to call get().  We have overloaded operator-&gt;().

oops, remnant of gdb reshuffling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323657</commentid>
    <comment_count>16</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-17 01:29:10 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; &gt; After staring at the code for a while and playing with the debugger, the original patch doesn&apos;t make much sense.  Instead, I&apos;ve reverted the change[1] which caused this regression and fixed the problem in a different way[2].
&gt; 
&gt; You&apos;re probably referring to the changeset http://trac.webkit.org/changeset/64974 but this change set moved some of editing boundary checks from visible_units into TextIterator.  Your patch seems to revert the changes in TextIterator but does not introduce new checks into visible_units.  How is this correct?

Yep I&apos;m referring to that changeset.  It seems to me like the significant editability checks were moved to Position::parentEditingBoundary() as opposed to the text iterator changes that I reverted.  The patch did multiple things, and has a non-trivial test, which still passes (and no other editing tests fail either).

&gt; 
&gt; &gt; [1] Adding editability boundary checks to TextIterator.h/cpp wasn&apos;t necessary; this is done elsewhere (rniwa: I can&apos;t find the respondToSelectionChange you mention, but anyway...).
&gt; 
&gt; I meant VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries.

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323660</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-17 01:44:32 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 76850 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=76850&amp;action=review
&gt; 
&gt; &gt;&gt; LayoutTests/editing/selection/extend-backward-by-word-over-non-editable.html:19
&gt; &gt;&gt; +    Markup.dump(result);
&gt; &gt; 
&gt; &gt; Is there any point in using dump-as-markup.js here?  Doesn&apos;t printing PASS/FAIL suffice?  I think we should just call dumpAsText() and print PASS/FAIL.
&gt; 
&gt; Yes I suppose.  otoh it might be nice to see if it fails what the failure is, and when running the test by hand at least this way it also says pass/fail in the dom.

I think we should just be informative in FAIL case.  You could print information like &quot;wrong offset&quot; or &quot;wrong container&quot;

&gt; Yep I&apos;m referring to that changeset.  It seems to me like the significant editability checks were moved to Position::parentEditingBoundary() as opposed to the text iterator changes that I reverted.  The patch did multiple things, and has a non-trivial test, which still passes (and no other editing tests fail either).

Ah, now I see it.  We should have Morrita-san &amp; Ojan take a look at this patch regardless.  I&apos;m very scared of removing editing boundary checks because 1. I feel we don&apos;t have adequate test coverage and 2. we hit assertions if we try to modify non-editable nodes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327750</commentid>
    <comment_count>18</comment_count>
      <attachid>76850</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-29 16:52:53 -0800</bug_when>
    <thetext>Comment on attachment 76850
Patch

I don’t understand the status here. Ryosuke made a couple comments, but did not say review- or review+. I think the change is fine, but I think Ryosuke’s comments should be dealt with. Setting review+ and commit-queue- for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327762</commentid>
    <comment_count>19</comment_count>
      <attachid>77653</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-29 17:27:50 -0800</bug_when>
    <thetext>Created attachment 77653
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327763</commentid>
    <comment_count>20</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-29 17:31:21 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 76850 [details])
&gt; I don’t understand the status here. Ryosuke made a couple comments, but did not say review- or review+. I think the change is fine, but I think Ryosuke’s comments should be dealt with. Setting review+ and commit-queue- for now.

Coincidentally I was just (finally, after weeks) updating the patch when you replied to this.  Thanks for looking at it.

I&apos;ve rewritten the test and fixed that typo as Ryosuke requested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327764</commentid>
    <comment_count>21</comment_count>
      <attachid>77653</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-29 17:32:55 -0800</bug_when>
    <thetext>Comment on attachment 77653
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=77653&amp;action=review

For now I’m setting commit-queue- because you might want to make changes based on my comments.

&gt; WebCore/editing/TextIterator.cpp:1239
&gt; +bool SimplifiedBackwardsTextIterator::setNodeIfNotNull(Node* node)

All this function does is an assignment statement and a null check. I think both call sites would be clearer if this was written there instead of using a function.

&gt; WebCore/editing/visible_units.cpp:52
&gt; +static Position rightmostEquivalent(Position p)

In WebKit code normally don’t use letters for names. The word “position” would be better than “p” given our usual style. Although there are quite a few counterexamples in this source file. For new code it would be better to use words.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327769</commentid>
    <comment_count>22</comment_count>
      <attachid>77655</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-29 17:47:56 -0800</bug_when>
    <thetext>Created attachment 77655
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327770</commentid>
    <comment_count>23</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-29 17:49:22 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 77653 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77653&amp;action=review
&gt; 
&gt; For now I’m setting commit-queue- because you might want to make changes based on my comments.
&gt; 
&gt; &gt; WebCore/editing/TextIterator.cpp:1239
&gt; &gt; +bool SimplifiedBackwardsTextIterator::setNodeIfNotNull(Node* node)
&gt; 
&gt; All this function does is an assignment statement and a null check. I think both call sites would be clearer if this was written there instead of using a function.
&gt; 
&gt; &gt; WebCore/editing/visible_units.cpp:52
&gt; &gt; +static Position rightmostEquivalent(Position p)
&gt; 
&gt; In WebKit code normally don’t use letters for names. The word “position” would be better than “p” given our usual style. Although there are quite a few counterexamples in this source file. For new code it would be better to use words.

Thanks again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327773</commentid>
    <comment_count>24</comment_count>
      <attachid>77655</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-29 17:54:25 -0800</bug_when>
    <thetext>Comment on attachment 77655
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=77655&amp;action=review

&gt; WebCore/editing/TextIterator.cpp:1143
&gt; +                if (!m_node-&gt;parentOrHostNode())
&gt;                      break;
&gt; +                m_node = m_node-&gt;parentOrHostNode();

I would have used a local variable here, but it’s probably fine not to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327795</commentid>
    <comment_count>25</comment_count>
      <attachid>77655</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-29 18:45:34 -0800</bug_when>
    <thetext>Comment on attachment 77655
Patch

Rejecting attachment 77655 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-4&apos;, &apos;build-and-test&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--test&apos;, &apos;--non-interactive&apos;]&quot; exit_code: 2
Last 500 characters of output:
....................................................................................................................................................................................................................................
editing/spelling .........
editing/spelling/spelling-hasspellingmarker.html -&gt; failed

Exiting early after 1 failures. 5409 tests run.
112.57s total testing time

5408 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
3 test cases (&lt;1%) had stderr output

Full output: http://queues.webkit.org/results/7219245</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327964</commentid>
    <comment_count>26</comment_count>
      <attachid>77655</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-30 10:59:38 -0800</bug_when>
    <thetext>Comment on attachment 77655
Patch

Lets try the commit queue again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327974</commentid>
    <comment_count>27</comment_count>
      <attachid>77655</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-30 11:32:43 -0800</bug_when>
    <thetext>Comment on attachment 77655
Patch

Rejecting attachment 77655 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-3&apos;, &apos;build-and-test&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--test&apos;, &apos;--non-interactive&apos;]&quot; exit_code: 2
Last 500 characters of output:
....................................................................................................................................................................................................................................
editing/spelling .........
editing/spelling/spelling-hasspellingmarker.html -&gt; failed

Exiting early after 1 failures. 5409 tests run.
112.54s total testing time

5408 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
3 test cases (&lt;1%) had stderr output

Full output: http://queues.webkit.org/results/7284223</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327987</commentid>
    <comment_count>28</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-30 11:59:28 -0800</bug_when>
    <thetext>It appears this patch causes that test to regress. Sorry the cq isn&apos;t smart enough to upload failure diffs yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327998</commentid>
    <comment_count>29</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-30 12:22:15 -0800</bug_when>
    <thetext>As I noted in #c8, previousWordPosition is also called by removeSpellAndCorrectionMarkersFromWordsToBeEdited, and this patch seems to let spell-check code cross editing boundary, which is obviously not what we want.  I wouldn&apos;t land this patch unless we investigated the failure and figured out what&apos;s the right thing to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328005</commentid>
    <comment_count>30</comment_count>
      <attachid>77655</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-30 12:44:09 -0800</bug_when>
    <thetext>Comment on attachment 77655
Patch

Changing to review- beacuse of the regression test failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328044</commentid>
    <comment_count>31</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2010-12-30 14:35:50 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 77655 [details])
&gt; Changing to review- beacuse of the regression test failure.

Thanks Darin and Ryosuke, I&apos;ll have a look at it when work starts up again next year.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329979</commentid>
    <comment_count>32</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-05 19:22:11 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; As I noted in #c8, previousWordPosition is also called by removeSpellAndCorrectionMarkersFromWordsToBeEdited, and this patch seems to let spell-check code cross editing boundary, which is obviously not what we want.  I wouldn&apos;t land this patch unless we investigated the failure and figured out what&apos;s the right thing to do.

Remember that the editing boundary check removal here is just fixing a regression from a few months ago.  I highly doubt that this patch will let spell check code cross editing boundaries.

Anyway, I&apos;ve looked into this some more.  The test diff is

-PASS hasMarked(&quot;&lt;textarea id=&apos;test&apos; cols=&apos;80&apos; rows=&apos;10&apos;&gt;&lt;/textarea&gt;&quot;); is true
-PASS hasMarked(&quot;&lt;input id=&apos;test&apos; type=&apos;text&apos;&gt;&quot;); is true
+FAIL hasMarked(&quot;&lt;textarea id=&apos;test&apos; cols=&apos;80&apos; rows=&apos;10&apos;&gt;&lt;/textarea&gt;&quot;); should be true. Was false.
+FAIL hasMarked(&quot;&lt;input id=&apos;test&apos; type=&apos;text&apos;&gt;&quot;); should be true. Was false.
 PASS hasMarked(&quot;&lt;div id=&apos;test&apos; contenteditable=&apos;true&apos;&gt;&lt;/div&gt;&quot;); is true
 PASS hasMarked(&quot;&lt;div id=&apos;test&apos; contentEditable=&apos;true&apos; spellcheck=&apos;false&apos;&gt;&lt;/div&gt;&quot;); is false
 PASS successfullyParsed is true

Which is interesting because the spelling markers still work for
&lt;div&gt;&lt;div contenteditable&gt;zz&lt;/div&gt;&lt;/div&gt;
but not
&lt;div&gt;&lt;textarea&gt;zz&lt;/textarea&gt;&lt;/div&gt;
nor
&lt;div&gt;&lt;input type=&quot;text&quot; value=&quot;zz&quot;&gt;&lt;/div&gt;

Which makes me think that this is actually a bug caused by the editing boundary being in a shadow dom, most probably triggered by the rightmostEquivalent change from previousBoundary.  Perhaps an incorrect use of parentNode() rather than parentOrHostNode()?  Or something more subtle?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329989</commentid>
    <comment_count>33</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-05 19:52:23 -0800</bug_when>
    <thetext>Actually, I&apos;m wrong, it isn&apos;t rightmostEquivalent causing the problem but rather the removal of the editing check, causing the text iterator to apparently exit the shadow node but not reenter it as rightmostEquivalent would do in the &lt;div&gt; case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332799</commentid>
    <comment_count>34</comment_count>
      <attachid>78624</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-11 16:46:43 -0800</bug_when>
    <thetext>Created attachment 78624
Patch with parentOrHostNode changed to parentNode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332806</commentid>
    <comment_count>35</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-11 16:55:23 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; Created an attachment (id=78624) [details]
&gt; Patch with parentOrHostNode changed to parentNode

I&apos;ve uploaded a patch which fixes the test case by not allowing SimplifiedBackwardsTextIterator::advance to advance out of the shadow dom.  It&apos;s not a nice solution, and probably incorrect so not submittable (though the layout tests all still pass).

This means I&apos;ll probably have to look at an alternative solution to the rightmostEquivalent thing which makes the iterator always stay at the rightmost equivalent rather than not-doing-it-then-correcting-it-afterwards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335633</commentid>
    <comment_count>36</comment_count>
      <attachid>79237</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-17 19:17:30 -0800</bug_when>
    <thetext>Created attachment 79237
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335635</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-17 19:19:18 -0800</bug_when>
    <thetext>Attachment 79237 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/edit...&quot; exit_code: 1

Source/WebCore/editing/TextIterator.cpp:1131:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 8 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>335636</commentid>
    <comment_count>38</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-17 19:20:19 -0800</bug_when>
    <thetext>Ugh.  After far too much time trying to figure this out, finally done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335638</commentid>
    <comment_count>39</comment_count>
      <attachid>79238</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-17 19:24:19 -0800</bug_when>
    <thetext>Created attachment 79238
Ugh. check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335645</commentid>
    <comment_count>40</comment_count>
      <attachid>79238</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-17 19:45:00 -0800</bug_when>
    <thetext>Comment on attachment 79238
Ugh. check-webkit-style.

View in context: https://bugs.webkit.org/attachment.cgi?id=79238&amp;action=review

&gt; Source/WebCore/editing/visible_units.cpp:130
&gt; -    if (it.atEnd() &amp;&amp; next == 0) {
&gt; +    if (it.atEnd() &amp;&amp; !next)
&gt;          pos = it.range()-&gt;startPosition();
&gt; -    } else if (next != 0) {
&gt; +    else if (next) {

I think it would have been cleaner if you did:
if (!next) {
    if (it.atEnd())
        pos = it.range()-&gt;startPosition();
    return VisiblePosition(pos, DOWNSTREAM);
}
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335647</commentid>
    <comment_count>41</comment_count>
      <attachid>79238</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-17 19:48:59 -0800</bug_when>
    <thetext>Comment on attachment 79238
Ugh. check-webkit-style.

View in context: https://bugs.webkit.org/attachment.cgi?id=79238&amp;action=review

Btw I&apos;ve found that this is actually failing the test again.  Very mysterious since all I did, I think, is sync.  Maybe I changed something else too.  Looking into it now.

&gt;&gt; Source/WebCore/editing/visible_units.cpp:130
&gt;&gt; +    else if (next) {
&gt; 
&gt; I think it would have been cleaner if you did:
&gt; if (!next) {
&gt;     if (it.atEnd())
&gt;         pos = it.range()-&gt;startPosition();
&gt;     return VisiblePosition(pos, DOWNSTREAM);
&gt; }
&gt; ...

This particular change is just surrendering to check-webkit-style and its demanding ways.  I can change it if you really want though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335649</commentid>
    <comment_count>42</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-17 19:54:20 -0800</bug_when>
    <thetext>(In reply to comment #41)
&gt; &gt;&gt; Source/WebCore/editing/visible_units.cpp:130
&gt; &gt;&gt; +    else if (next) {
&gt; &gt; 
&gt; &gt; I think it would have been cleaner if you did:
&gt; &gt; if (!next) {
&gt; &gt;     if (it.atEnd())
&gt; &gt;         pos = it.range()-&gt;startPosition();
&gt; &gt;     return VisiblePosition(pos, DOWNSTREAM);
&gt; &gt; }
&gt; &gt; ...
&gt; 
&gt; This particular change is just surrendering to check-webkit-style and its demanding ways.  I can change it if you really want though.

You can fix the style first in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336176</commentid>
    <comment_count>43</comment_count>
      <attachid>79349</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-18 16:02:08 -0800</bug_when>
    <thetext>Created attachment 79349
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336853</commentid>
    <comment_count>44</comment_count>
      <attachid>79349</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-19 15:06:09 -0800</bug_when>
    <thetext>Comment on attachment 79349
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=79349&amp;action=review

&gt; Source/WebCore/editing/Editor.cpp:2091
&gt; -    VisibleSelection adjacentWords = VisibleSelection(startOfWord(wordStart, LeftWordIfOnBoundary), endOfWord(wordStart, RightWordIfOnBoundary));
&gt; +    VisibleSelection adjacentWords = VisibleSelection(wordStart, endOfWord(wordStart, RightWordIfOnBoundary));

I&apos;m scared of touching this code because it was added by http://trac.webkit.org/changeset/41496 and I can&apos;t tell whether automated tests have been added or not.  Could you manually verify that spellchecking works with your patch?

Having said that, the only caller of this function seems to be TypingCommand::markMisspellingsAfterTyping and it calls startOfWord so this is probably correct change.

&gt; Source/WebCore/editing/visible_units.cpp:59
&gt; +    Position next = position.next();
&gt; +    while (position.node() != next.node()) {
&gt; +        position = next;
&gt; +        next = position.next();
&gt; +    }
&gt; +    return position;

Could you explain what &quot;rightmost equivalent&quot; mean?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336898</commentid>
    <comment_count>45</comment_count>
      <attachid>79349</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-19 16:05:50 -0800</bug_when>
    <thetext>Comment on attachment 79349
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=79349&amp;action=review

&gt;&gt; Source/WebCore/editing/Editor.cpp:2091
&gt;&gt; +    VisibleSelection adjacentWords = VisibleSelection(wordStart, endOfWord(wordStart, RightWordIfOnBoundary));
&gt; 
&gt; I&apos;m scared of touching this code because it was added by http://trac.webkit.org/changeset/41496 and I can&apos;t tell whether automated tests have been added or not.  Could you manually verify that spellchecking works with your patch?
&gt; 
&gt; Having said that, the only caller of this function seems to be TypingCommand::markMisspellingsAfterTyping and it calls startOfWord so this is probably correct change.

Exactly.  Not only is the extra startOfWord redundant (based on that single caller*), but it actually results in a bug since apparently startOfWord isn&apos;t idempotent if it&apos;s on an element boundary.  That would be a nice thing to fix actually (unit tests!).

There is a test, editing/spelling/spelling-hasspellingmarker.  This isn&apos;t particularly rigorous (only checks &quot;zz &quot;), perhaps it would be a good idea to augment it with more than just a single word. zzzzzzzz 

* the fact that the variable is called wordStart implies that there should a precondition (i.e. ASSERT) that wordStart is actually the start of the word.  Again -- this would be a good idea, if we had a way of checking that a position is actually the start of a word without &quot;wordStart == startOfWord(wordStart)&quot; which as I said isn&apos;t necessarily true due to non-idempotent nature of the function.

&gt;&gt; Source/WebCore/editing/visible_units.cpp:59
&gt;&gt; +    return position;
&gt; 
&gt; Could you explain what &quot;rightmost equivalent&quot; mean?

would rightmostVisuallyEquivalent be a more self-explanatory name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336899</commentid>
    <comment_count>46</comment_count>
      <attachid>79349</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-19 16:09:54 -0800</bug_when>
    <thetext>Comment on attachment 79349
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=79349&amp;action=review

&gt;&gt;&gt; Source/WebCore/editing/Editor.cpp:2091
&gt;&gt;&gt; +    VisibleSelection adjacentWords = VisibleSelection(wordStart, endOfWord(wordStart, RightWordIfOnBoundary));
&gt;&gt; 
&gt;&gt; I&apos;m scared of touching this code because it was added by http://trac.webkit.org/changeset/41496 and I can&apos;t tell whether automated tests have been added or not.  Could you manually verify that spellchecking works with your patch?
&gt;&gt; 
&gt;&gt; Having said that, the only caller of this function seems to be TypingCommand::markMisspellingsAfterTyping and it calls startOfWord so this is probably correct change.
&gt; 
&gt; Exactly.  Not only is the extra startOfWord redundant (based on that single caller*), but it actually results in a bug since apparently startOfWord isn&apos;t idempotent if it&apos;s on an element boundary.  That would be a nice thing to fix actually (unit tests!).
&gt; 
&gt; There is a test, editing/spelling/spelling-hasspellingmarker.  This isn&apos;t particularly rigorous (only checks &quot;zz &quot;), perhaps it would be a good idea to augment it with more than just a single word. zzzzzzzz 
&gt; 
&gt; * the fact that the variable is called wordStart implies that there should a precondition (i.e. ASSERT) that wordStart is actually the start of the word.  Again -- this would be a good idea, if we had a way of checking that a position is actually the start of a word without &quot;wordStart == startOfWord(wordStart)&quot; which as I said isn&apos;t necessarily true due to non-idempotent nature of the function.

Can we assert that ASSERT(wordStart == startOfWord(endOfWord(wordStart)) ?  But I&apos;m fine without this assertion because the argument name makes it pretty obvious.

&gt;&gt;&gt; Source/WebCore/editing/visible_units.cpp:59
&gt;&gt;&gt; +    return position;
&gt;&gt; 
&gt;&gt; Could you explain what &quot;rightmost equivalent&quot; mean?
&gt; 
&gt; would rightmostVisuallyEquivalent be a more self-explanatory name?

What do you mean by &quot;rightmost&quot;?  We could be either traversing the tree upwards or downwards. What kind of behavior are you expecting here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336927</commentid>
    <comment_count>47</comment_count>
      <attachid>79349</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-19 16:28:14 -0800</bug_when>
    <thetext>Comment on attachment 79349
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=79349&amp;action=review

&gt;&gt;&gt;&gt; Source/WebCore/editing/Editor.cpp:2091
&gt;&gt;&gt;&gt; +    VisibleSelection adjacentWords = VisibleSelection(wordStart, endOfWord(wordStart, RightWordIfOnBoundary));
&gt;&gt;&gt; 
&gt;&gt;&gt; I&apos;m scared of touching this code because it was added by http://trac.webkit.org/changeset/41496 and I can&apos;t tell whether automated tests have been added or not.  Could you manually verify that spellchecking works with your patch?
&gt;&gt;&gt; 
&gt;&gt;&gt; Having said that, the only caller of this function seems to be TypingCommand::markMisspellingsAfterTyping and it calls startOfWord so this is probably correct change.
&gt;&gt; 
&gt;&gt; Exactly.  Not only is the extra startOfWord redundant (based on that single caller*), but it actually results in a bug since apparently startOfWord isn&apos;t idempotent if it&apos;s on an element boundary.  That would be a nice thing to fix actually (unit tests!).
&gt;&gt; 
&gt;&gt; There is a test, editing/spelling/spelling-hasspellingmarker.  This isn&apos;t particularly rigorous (only checks &quot;zz &quot;), perhaps it would be a good idea to augment it with more than just a single word. zzzzzzzz 
&gt;&gt; 
&gt;&gt; * the fact that the variable is called wordStart implies that there should a precondition (i.e. ASSERT) that wordStart is actually the start of the word.  Again -- this would be a good idea, if we had a way of checking that a position is actually the start of a word without &quot;wordStart == startOfWord(wordStart)&quot; which as I said isn&apos;t necessarily true due to non-idempotent nature of the function.
&gt; 
&gt; Can we assert that ASSERT(wordStart == startOfWord(endOfWord(wordStart)) ?  But I&apos;m fine without this assertion because the argument name makes it pretty obvious.

Yeah this is a pretty confusing assertion.

&gt;&gt;&gt;&gt; Source/WebCore/editing/visible_units.cpp:59
&gt;&gt;&gt;&gt; +    return position;
&gt;&gt;&gt; 
&gt;&gt;&gt; Could you explain what &quot;rightmost equivalent&quot; mean?
&gt;&gt; 
&gt;&gt; would rightmostVisuallyEquivalent be a more self-explanatory name?
&gt; 
&gt; What do you mean by &quot;rightmost&quot;?  We could be either traversing the tree upwards or downwards. What kind of behavior are you expecting here?

Well, it should be agnostic to whether the next() position is upwards or downwards.  In the sense that
foo &lt;span&gt;&lt;span&gt;bar |&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt; baz
is visually equivalent to, and the rightmost visually equivalent position to,
foo &lt;span&gt;&lt;span&gt;bar &lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;| baz
but it traverses up and down.

is the correct terminology for this &quot;upstream&quot;?

actually this function is possibly incorrect, in that i don&apos;t think
|&lt;div&gt;&lt;/div&gt;
is visually equivalent to
&lt;div&gt;&lt;/div&gt;|

sigh.  the purpose is to normalise the position as in the former example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336950</commentid>
    <comment_count>48</comment_count>
      <attachid>79349</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-19 17:01:47 -0800</bug_when>
    <thetext>Comment on attachment 79349
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=79349&amp;action=review

&gt; Source/WebCore/editing/visible_units.cpp:140
&gt; -    return VisiblePosition(charIt.range()-&gt;endPosition(), DOWNSTREAM);
&gt; +    // Take the rightmost equivalent position so that the correct containing editable region is used if a boundary is reached.
&gt; +    return VisiblePosition(rightmostEquivalent(charIt.range()-&gt;endPosition()), DOWNSTREAM);

Note that a downstream VisiblePosition can be instantiated from a Position implicitly so this can be written as:
return rightmostEquivalent(charIt.range()-&gt;endPosition());

But per IRC discussion, Kalman is going to experiment with adding a flag to canonicalPosition to ignore editing boundary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337166</commentid>
    <comment_count>49</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-19 23:54:13 -0800</bug_when>
    <thetext>Gah.  Why is this so difficult, it&apos;s such a trivial concept but I pull one way and somewhere else in the editing code, it pulls the other.  Though at least the entire experience is very enlightening.

Allowing editing boundaries to be optionally crossed from VisiblePosition&apos;s constructor did fix the problem from previousBoundary, but not nextBoundary; the latter causes a number of tests to fail, some due to a trivial difference in the render tree but others less trivial (about 3 tests like this).  I think these are due to now-broken assumptions, so easy to fix, but overall this makes me nervous about the change.

So in conclusion, to actually fix this bug...
option 1:
 - submit the main part of the patch (reverting that boundary crossing stuff),
 - change that startOfWord(wordStart) to just wordStart to keep the incremental spell checking working,
and then either
 - go back to the rightmostEquivalent thing, or something similar (i.e. making sure the Position passed to canonicalPosition is sane), or
 - keep pulling at the code

option 2:
 - go back to something similar to the first patch I uploaded i.e. don&apos;t revert editing boundary stuff, but tweak it to be correct (adding code = sad)

I might go with option 2 tomorrow since this is taking way too long.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337892</commentid>
    <comment_count>50</comment_count>
      <attachid>79699</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-20 22:50:21 -0800</bug_when>
    <thetext>Created attachment 79699
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337893</commentid>
    <comment_count>51</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-20 22:52:09 -0800</bug_when>
    <thetext>(In reply to comment #50)
&gt; Created an attachment (id=79699) [details]
&gt; Patch

Ok, much nicer.  Looks like there was a subtle bug in SimplifiedBackwardsTextIterator&apos;s range checking after all that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337894</commentid>
    <comment_count>52</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-20 22:52:30 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; Gah.  Why is this so difficult, it&apos;s such a trivial concept but I pull one way and somewhere else in the editing code, it pulls the other.  Though at least the entire experience is very enlightening.
&gt; 
&gt; Allowing editing boundaries to be optionally crossed from VisiblePosition&apos;s constructor did fix the problem from previousBoundary, but not nextBoundary; the latter causes a number of tests to fail, some due to a trivial difference in the render tree but others less trivial (about 3 tests like this).  I think these are due to now-broken assumptions, so easy to fix, but overall this makes me nervous about the change.
&gt; 
&gt; So in conclusion, to actually fix this bug...
&gt; option 1:
&gt;  - submit the main part of the patch (reverting that boundary crossing stuff),
&gt;  - change that startOfWord(wordStart) to just wordStart to keep the incremental spell checking working,
&gt; and then either
&gt;  - go back to the rightmostEquivalent thing, or something similar (i.e. making sure the Position passed to canonicalPosition is sane), or
&gt;  - keep pulling at the code
&gt; 
&gt; option 2:
&gt;  - go back to something similar to the first patch I uploaded i.e. don&apos;t revert editing boundary stuff, but tweak it to be correct (adding code = sad)
&gt; 
&gt; I might go with option 2 tomorrow since this is taking way too long.

(ignore this)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337903</commentid>
    <comment_count>53</comment_count>
      <attachid>79699</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-20 23:24:08 -0800</bug_when>
    <thetext>Comment on attachment 79699
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=79699&amp;action=review

The change looks good but I don&apos;t know enough about these classes to r+ this patch.

&gt; Source/WebCore/editing/TextIterator.cpp:1225
&gt; -bool SimplifiedBackwardsTextIterator::crossesEditingBoundary(Node* node) const
&gt; +bool SimplifiedBackwardsTextIterator::advanceToIfNonNullAndWithinRange(Node* next)

I&apos;m not sure if advanceToIfNonNullAndWithinRange is the best name here.  Maybe moveToNode?  moveToNodeWithinRange?  setNodeRespectingRange?  setNodeIfPossible?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338031</commentid>
    <comment_count>54</comment_count>
      <attachid>79699</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-21 06:40:39 -0800</bug_when>
    <thetext>Comment on attachment 79699
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=79699&amp;action=review

&gt;&gt; Source/WebCore/editing/TextIterator.cpp:1225
&gt;&gt; +bool SimplifiedBackwardsTextIterator::advanceToIfNonNullAndWithinRange(Node* next)
&gt; 
&gt; I&apos;m not sure if advanceToIfNonNullAndWithinRange is the best name here.  Maybe moveToNode?  moveToNodeWithinRange?  setNodeRespectingRange?  setNodeIfPossible?

The notnull part is probably unnecessary, but I used &quot;advance&quot; to mirror the method that called it, and it has more meaning than just &quot;set&quot;. Don&apos;t feel strongly though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338793</commentid>
    <comment_count>55</comment_count>
      <attachid>79884</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-23 16:51:55 -0800</bug_when>
    <thetext>Created attachment 79884
Change to advanceRespectingRange</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339504</commentid>
    <comment_count>56</comment_count>
      <attachid>80023</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-24 22:28:08 -0800</bug_when>
    <thetext>Created attachment 80023
nicer factored test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339507</commentid>
    <comment_count>57</comment_count>
      <attachid>80024</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-24 22:57:37 -0800</bug_when>
    <thetext>Created attachment 80024
nicer factored test (2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340612</commentid>
    <comment_count>58</comment_count>
      <attachid>80273</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-01-26 17:16:08 -0800</bug_when>
    <thetext>Created attachment 80273
rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344323</commentid>
    <comment_count>59</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-02-02 15:45:43 -0800</bug_when>
    <thetext>(In reply to comment #58)
&gt; Created an attachment (id=80273) [details]
&gt; rebase

Could somebody review this please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351083</commentid>
    <comment_count>60</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-02-14 21:20:53 -0800</bug_when>
    <thetext>(In reply to comment #59)
&gt; (In reply to comment #58)
&gt; &gt; Created an attachment (id=80273) [details] [details]
&gt; &gt; rebase
&gt; 
&gt; Could somebody review this please?

*polite re-ping*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354389</commentid>
    <comment_count>61</comment_count>
      <attachid>83122</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-02-20 20:04:28 -0800</bug_when>
    <thetext>Created attachment 83122
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355866</commentid>
    <comment_count>62</comment_count>
      <attachid>83444</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-02-22 22:00:48 -0800</bug_when>
    <thetext>Created attachment 83444
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355873</commentid>
    <comment_count>63</comment_count>
      <attachid>83444</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-02-22 22:25:52 -0800</bug_when>
    <thetext>Comment on attachment 83444
Patch

&gt;Subversion Revision: 79367
&gt;diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
&gt;index 1f8ef2638cda9a52ecc045b3edc46763f5fd0770..db908ebb1f123f34ceded9b27cf23c657a238f0c 100644
&gt;--- a/LayoutTests/ChangeLog
&gt;+++ b/LayoutTests/ChangeLog
&gt;@@ -1,3 +1,15 @@
&gt;+2011-02-23  Benjamin Kalman  &lt;kalman@chromium.org&gt;
&gt;+
&gt;+        Reviewed by NOBODY (OOPS!).
&gt;+
&gt;+        Moving or selecting backwards by words jumps to start of contenteditable region if contenteditable=false span is encountered
&gt;+        https://bugs.webkit.org/show_bug.cgi?id=51001
&gt;+
&gt;+        Add regression test.
&gt;+
&gt;+        * editing/selection/extend-backward-by-word-over-non-editable-expected.txt: Added.
&gt;+        * editing/selection/extend-backward-by-word-over-non-editable.html: Added.
&gt;+
&gt; 2011-02-22  Jer Noble  &lt;jer.noble@apple.com&gt;
&gt; 
&gt;         Unreviewed; neglected to update an expected result after changing some
&gt;diff --git a/LayoutTests/editing/selection/extend-backward-by-word-over-non-editable-expected.txt b/LayoutTests/editing/selection/extend-backward-by-word-over-non-editable-expected.txt
&gt;new file mode 100644
&gt;index 0000000000000000000000000000000000000000..b52b0a9e799b23ea8d96a171fa59e247a983fe79
&gt;--- /dev/null
&gt;+++ b/LayoutTests/editing/selection/extend-backward-by-word-over-non-editable-expected.txt
&gt;@@ -0,0 +1,4 @@
&gt;+PASS for LTR
&gt;+PASS for RTL
&gt;+foo bar baz qux quux
&gt;+×©×Ö¼×¨× ×©×Ö¼×¨× ×©×Ö¼×¨× ×©×Ö¼×¨× ×©×Ö¼×¨×
&gt;diff --git a/LayoutTests/editing/selection/extend-backward-by-word-over-non-editable.html b/LayoutTests/editing/selection/extend-backward-by-word-over-non-editable.html
&gt;new file mode 100644
&gt;index 0000000000000000000000000000000000000000..6135db74fae40f62a34f59d39f29e7a665630d10
&gt;--- /dev/null
&gt;+++ b/LayoutTests/editing/selection/extend-backward-by-word-over-non-editable.html
&gt;@@ -0,0 +1,39 @@
&gt;+&lt;!DOCTYPE html&gt;
&gt;+&lt;pre id=&quot;log&quot;&gt;&lt;/pre&gt;
&gt;+
&gt;+&lt;div id=&quot;ltrTextContainer&quot; contenteditable&gt;foo bar &lt;span contenteditable=false&gt;baz&lt;/span&gt; qux quux&lt;/div&gt;
&gt;+&lt;div id=&quot;rtlTextContainer&quot; contenteditable dir=&quot;rtl&quot;&gt;&amp;#x05E9;&amp;#x05D5;&amp;#x05BC;&amp;#x05E8;&amp;#x05D4; &amp;#x05E9;&amp;#x05D5;&amp;#x05BC;&amp;#x05E8;&amp;#x05D4;
&gt;+&lt;span contenteditable=false&gt;&amp;#x05E9;&amp;#x05D5;&amp;#x05BC;&amp;#x05E8;&amp;#x05D4;&lt;/span&gt;
&gt;+&amp;#x05E9;&amp;#x05D5;&amp;#x05BC;&amp;#x05E8;&amp;#x05D4; &amp;#x05E9;&amp;#x05D5;&amp;#x05BC;&amp;#x05E8;&amp;#x05D4;&lt;/div&gt;
&gt;+
&gt;+&lt;script&gt;
&gt;+function log(s) {
&gt;+  document.getElementById(&quot;log&quot;).appendChild(document.createTextNode(s + &quot;\n&quot;));
&gt;+}
&gt;+
&gt;+function placeCursorAfterFirstNoneditableChild(container) {
&gt;+  for (var i = 0; i &lt; container.childNodes.length; i++) {
&gt;+    var node = container.childNodes[i];
&gt;+    if (node.isContentEditable !== undefined &amp;&amp; !node.isContentEditable) {
&gt;+      getSelection().setPosition(node.nextSibling, 0);
&gt;+      return node;
&gt;+    }
&gt;+  }
&gt;+  throw &quot;Couldn&apos;t find noneditable child of &quot; + container.textContent;
&gt;+}
&gt;+
&gt;+function extendBackwardByWord(container, bidiName) {
&gt;+  noneditableChild = placeCursorAfterFirstNoneditableChild(container);
&gt;+  getSelection().modify(&quot;extend&quot;, &quot;backward&quot;, &quot;word&quot;);
&gt;+  if (getSelection().toString() === noneditableChild.textContent)
&gt;+    log(&quot;PASS for &quot; + bidiName);
&gt;+  else
&gt;+    log(&quot;FAIL for &quot; + bidiName + &quot;, selection is \&quot;&quot; + getSelection() + &quot;\&quot; but should be \&quot;&quot; + noneditableChild.textContent + &quot;\&quot;&quot;);
&gt;+}
&gt;+
&gt;+extendBackwardByWord(document.getElementById(&quot;ltrTextContainer&quot;), &quot;LTR&quot;);
&gt;+extendBackwardByWord(document.getElementById(&quot;rtlTextContainer&quot;), &quot;RTL&quot;);
&gt;+
&gt;+if (window.layoutTestController)
&gt;+    layoutTestController.dumpAsText();
&gt;+&lt;/script&gt;
&gt;diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
&gt;index af6dc60037807c36724ce6df9520f6f847a3de26..7b3ff2e8dbd982a4ef76a540cdc7e43bd03111a4 100644
&gt;--- a/Source/WebCore/ChangeLog
&gt;+++ b/Source/WebCore/ChangeLog
&gt;@@ -1,3 +1,36 @@
&gt;+2011-02-23  Benjamin Kalman  &lt;kalman@chromium.org&gt;
&gt;+
&gt;+        Reviewed by NOBODY (OOPS!).
&gt;+
&gt;+        Moving or selecting backwards by words jumps to start of contenteditable region if contenteditable=false span is encountered
&gt;+        https://bugs.webkit.org/show_bug.cgi?id=51001
&gt;+
&gt;+        Test: editing/selection/extend-backward-by-word-over-non-editable.html
&gt;+
&gt;+        Revert some previous changes (the TextIteratorEndsAtEditingBoundary text iteration behaviour) which caused this
&gt;+        bug in the first place, and fix SimplifiedBackwardsTextIterator&apos;s iteration range check as an alternative fix.
&gt;+
&gt;+        The original bug was that double-clicking on an inline editable span at the start of a paragraph would clear the
&gt;+        selection (webkit.org/b/36360).  This was caused by upstream/downstream VisbiblePosition complications.  To fix,
&gt;+        refuse to iterate beyond the start node (rather than refusing to iterate across editable boundaries, which
&gt;+        causes this bug).
&gt;+
&gt;+        To see why this is correct, and to make it clearer that is indeed what is happening, the text iterator code has
&gt;+        been slightly restructured to express the invariant that the iterator will never advance past the start node.
&gt;+
&gt;+        * editing/TextIterator.cpp:
&gt;+        (WebCore::TextIterator::TextIterator): Remove references to TextIterationEndsAtEditing boundary.
&gt;+        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator): Remove m_pastStartNode as the
&gt;+        mechanism for iteration range checking, and use a flag m_havePassedStartNode instead.
&gt;+        (WebCore::SimplifiedBackwardsTextIterator::advance): Clean up, use advanceRespectingRange and
&gt;+        m_havePassedStartNode for iteration range checking rather than m_pastStartNode.
&gt;+        (WebCore::SimplifiedBackwardsTextIterator::advanceRespectingRange): The new way of modifying m_node
&gt;+        which updates m_havePassedStartNode and refuses to continue when it becomes true.
&gt;+        * editing/TextIterator.h: Remove TextIteratorEndsAtEditingBoundary, update for new/removed prototypes and
&gt;+        member variables.
&gt;+        * editing/visible_units.cpp:
&gt;+        (WebCore::previousBoundary): Remove references to TextIteratorEndsAtEditingBoundary.
&gt;+
&gt; 2011-02-22  Geoffrey Garen  &lt;ggaren@apple.com&gt;
&gt; 
&gt;         Reviewed by Oliver Hunt.
&gt;diff --git a/Source/WebCore/editing/TextIterator.cpp b/Source/WebCore/editing/TextIterator.cpp
&gt;index d3a65964f7e07286ecb273764324d56f1a5c8125..3b18127552af33b6358e150dc660f3412f8b0dc2 100644
&gt;--- a/Source/WebCore/editing/TextIterator.cpp
&gt;+++ b/Source/WebCore/editing/TextIterator.cpp
&gt;@@ -194,21 +194,6 @@ static Node* nextInPreOrderCrossingShadowBoundaries(Node* rangeEndContainer, int
&gt;     return 0;
&gt; }
&gt; 
&gt;-static Node* previousInPostOrderCrossingShadowBoundaries(Node* rangeStartContainer, int rangeStartOffset)
&gt;-{
&gt;-    if (!rangeStartContainer)
&gt;-        return 0;
&gt;-    if (rangeStartOffset &gt; 0 &amp;&amp; !rangeStartContainer-&gt;offsetInCharacters()) {
&gt;-        if (Node* previous = rangeStartContainer-&gt;childNode(rangeStartOffset - 1))
&gt;-            return previous;
&gt;-    }
&gt;-    for (Node* node = rangeStartContainer; node; node = node-&gt;parentOrHostNode()) {
&gt;-        if (Node* previous = node-&gt;previousSibling())
&gt;-            return previous;
&gt;-    }
&gt;-    return 0;
&gt;-}
&gt;-
&gt; // --------
&gt; 
&gt; static inline bool fullyClipsContents(Node* node)
&gt;@@ -290,9 +275,6 @@ TextIterator::TextIterator(const Range* r, TextIteratorBehavior behavior)
&gt;     , m_handledFirstLetter(false)
&gt;     , m_ignoresStyleVisibility(behavior &amp; TextIteratorIgnoresStyleVisibility)
&gt; {
&gt;-    // FIXME: should support TextIteratorEndsAtEditingBoundary http://webkit.org/b/43609
&gt;-    ASSERT(behavior != TextIteratorEndsAtEditingBoundary);
&gt;-
&gt;     if (!r)
&gt;         return;
&gt; 
&gt;@@ -1052,7 +1034,7 @@ SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator(const Range* r,
&gt;     , m_node(0)
&gt;     , m_positionNode(0)
&gt; {
&gt;-    ASSERT(m_behavior == TextIteratorDefaultBehavior || m_behavior == TextIteratorEndsAtEditingBoundary);
&gt;+    ASSERT(m_behavior == TextIteratorDefaultBehavior);
&gt; 
&gt;     if (!r)
&gt;         return;
&gt;@@ -1077,7 +1059,7 @@ SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator(const Range* r,
&gt;         }
&gt;     }
&gt; 
&gt;-    setCurrentNode(endNode);
&gt;+    m_node = endNode;
&gt;     setUpFullyClippedStack(m_fullyClippedStack, m_node);    
&gt;     m_offset = endOffset;
&gt;     m_handledNode = false;
&gt;@@ -1096,7 +1078,7 @@ SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator(const Range* r,
&gt;     m_lastTextNode = 0;
&gt;     m_lastCharacter = &apos;\n&apos;;
&gt; 
&gt;-    m_pastStartNode = previousInPostOrderCrossingShadowBoundaries(startNode, startOffset);
&gt;+    m_havePassedStartNode = false;
&gt; 
&gt;     advance();
&gt; }
&gt;@@ -1108,7 +1090,7 @@ void SimplifiedBackwardsTextIterator::advance()
&gt;     m_positionNode = 0;
&gt;     m_textLength = 0;
&gt; 
&gt;-    while (m_node &amp;&amp; m_node != m_pastStartNode) {
&gt;+    while (m_node &amp;&amp; !m_havePassedStartNode) {
&gt;         // Don&apos;t handle node if we start iterating at [node, 0].
&gt;         if (!m_handledNode &amp;&amp; !(m_node == m_endNode &amp;&amp; m_endOffset == 0)) {
&gt;             RenderObject* renderer = m_node-&gt;renderer();
&gt;@@ -1125,8 +1107,10 @@ void SimplifiedBackwardsTextIterator::advance()
&gt;                 return;
&gt;         }
&gt; 
&gt;-        Node* next = m_handledChildren ? 0 : m_node-&gt;lastChild();
&gt;-        if (!next) {
&gt;+        if (!m_handledChildren &amp;&amp; m_node-&gt;hasChildNodes()) {
&gt;+            m_node = m_node-&gt;lastChild();
&gt;+            pushFullyClippedState(m_fullyClippedStack, m_node);
&gt;+        } else {
&gt;             // Exit empty containers as we pass over them or containers
&gt;             // where [container, 0] is where we started iterating.
&gt;             if (!m_handledNode
&gt;@@ -1138,11 +1122,12 @@ void SimplifiedBackwardsTextIterator::advance()
&gt;                     m_handledNode = true;
&gt;                     m_handledChildren = true;
&gt;                     return;
&gt;-                }            
&gt;+                }
&gt;             }
&gt;+
&gt;             // Exit all other containers.
&gt;             while (!m_node-&gt;previousSibling()) {
&gt;-                if (!setCurrentNode(m_node-&gt;parentOrHostNode()))
&gt;+                if (!advanceRespectingRange(m_node-&gt;parentOrHostNode()))
&gt;                     break;
&gt;                 m_fullyClippedStack.pop();
&gt;                 exitNode();
&gt;@@ -1153,14 +1138,12 @@ void SimplifiedBackwardsTextIterator::advance()
&gt;                 }
&gt;             }
&gt; 
&gt;-            next = m_node-&gt;previousSibling();
&gt;             m_fullyClippedStack.pop();
&gt;+            if (advanceRespectingRange(m_node-&gt;previousSibling()))
&gt;+                pushFullyClippedState(m_fullyClippedStack, m_node);
&gt;+            else
&gt;+                m_node = 0;
&gt;         }
&gt;-        
&gt;-        if (m_node &amp;&amp; setCurrentNode(next))
&gt;-            pushFullyClippedState(m_fullyClippedStack, m_node);
&gt;-        else
&gt;-            clearCurrentNode();
&gt; 
&gt;         // For the purpose of word boundary detection,
&gt;         // we should iterate all visible text and trailing (collapsed) whitespaces. 
&gt;@@ -1240,26 +1223,17 @@ void SimplifiedBackwardsTextIterator::emitCharacter(UChar c, Node* node, int sta
&gt;     m_lastCharacter = c;
&gt; }
&gt; 
&gt;-bool SimplifiedBackwardsTextIterator::crossesEditingBoundary(Node* node) const
&gt;+bool SimplifiedBackwardsTextIterator::advanceRespectingRange(Node* next)
&gt; {
&gt;-    return m_node &amp;&amp; m_node-&gt;isContentEditable() != node-&gt;isContentEditable();
&gt;-}
&gt;-
&gt;-bool SimplifiedBackwardsTextIterator::setCurrentNode(Node* node)
&gt;-{
&gt;-    if (!node)
&gt;+    if (!next)
&gt;         return false;
&gt;-    if (m_behavior == TextIteratorEndsAtEditingBoundary &amp;&amp; crossesEditingBoundary(node))
&gt;+    m_havePassedStartNode |= m_node == m_startNode;
&gt;+    if (m_havePassedStartNode)
&gt;         return false;
&gt;-    m_node = node;
&gt;+    m_node = next;
&gt;     return true;
&gt; }
&gt; 
&gt;-void SimplifiedBackwardsTextIterator::clearCurrentNode()
&gt;-{
&gt;-    m_node = 0;
&gt;-}
&gt;-
&gt; PassRefPtr&lt;Range&gt; SimplifiedBackwardsTextIterator::range() const
&gt; {
&gt;     if (m_positionNode)
&gt;diff --git a/Source/WebCore/editing/TextIterator.h b/Source/WebCore/editing/TextIterator.h
&gt;index 8b61afe211b4d37b74f9f4a58237e1d28f2dcfb4..b0c310a6fc7e8011b4a44c2afc1cda02dd4249d3 100644
&gt;--- a/Source/WebCore/editing/TextIterator.h
&gt;+++ b/Source/WebCore/editing/TextIterator.h
&gt;@@ -41,8 +41,7 @@ enum TextIteratorBehavior {
&gt;     TextIteratorEmitsCharactersBetweenAllVisiblePositions = 1 &lt;&lt; 0,
&gt;     TextIteratorEntersTextControls = 1 &lt;&lt; 1,
&gt;     TextIteratorEmitsTextsWithoutTranscoding = 1 &lt;&lt; 2,
&gt;-    TextIteratorEndsAtEditingBoundary = 1 &lt;&lt; 3,
&gt;-    TextIteratorIgnoresStyleVisibility = 1 &lt;&lt; 4
&gt;+    TextIteratorIgnoresStyleVisibility = 1 &lt;&lt; 3
&gt; };
&gt;     
&gt; // FIXME: Can&apos;t really answer this question correctly without knowing the white-space mode.
&gt;@@ -205,9 +204,7 @@ private:
&gt;     bool handleReplacedElement();
&gt;     bool handleNonTextNode();
&gt;     void emitCharacter(UChar, Node*, int startOffset, int endOffset);
&gt;-    bool crossesEditingBoundary(Node*) const;
&gt;-    bool setCurrentNode(Node*);
&gt;-    void clearCurrentNode();
&gt;+    bool advanceRespectingRange(Node*);
&gt; 
&gt;     TextIteratorBehavior m_behavior;
&gt;     // Current position, not necessarily of the text being returned, but position
&gt;@@ -238,9 +235,9 @@ private:
&gt;     
&gt;     // Used for whitespace characters that aren&apos;t in the DOM, so we can point at them.
&gt;     UChar m_singleCharacterBuffer;
&gt;-    
&gt;-    // The node after the last node this iterator should process.
&gt;-    Node* m_pastStartNode;
&gt;+
&gt;+    // Whether m_node has advanced beyond the iteration range (i.e. m_startNode).
&gt;+    bool m_havePassedStartNode;
&gt; };
&gt; 
&gt; // Builds on the text iterator, adding a character position so we can walk one
&gt;diff --git a/Source/WebCore/editing/visible_units.cpp b/Source/WebCore/editing/visible_units.cpp
&gt;index 281bc41c4b7b6383261418a4ac9393bd10a42da5..9cb4d6d0516b4ee24d60e12b41560f7266a938e8 100644
&gt;--- a/Source/WebCore/editing/visible_units.cpp
&gt;+++ b/Source/WebCore/editing/visible_units.cpp
&gt;@@ -89,7 +89,7 @@ static VisiblePosition previousBoundary(const VisiblePosition&amp; c, BoundarySearch
&gt;     if (ec)
&gt;         return VisiblePosition();
&gt; 
&gt;-    SimplifiedBackwardsTextIterator it(searchRange.get(), TextIteratorEndsAtEditingBoundary);
&gt;+    SimplifiedBackwardsTextIterator it(searchRange.get());
&gt;     unsigned next = 0;
&gt;     bool inTextSecurityMode = start.deprecatedNode() &amp;&amp; start.deprecatedNode()-&gt;renderer() &amp;&amp; start.deprecatedNode()-&gt;renderer()-&gt;style()-&gt;textSecurity() != TSNONE;
&gt;     bool needMoreContext = false;
&gt;@@ -124,7 +124,7 @@ static VisiblePosition previousBoundary(const VisiblePosition&amp; c, BoundarySearch
&gt;         return VisiblePosition(Position(node, next), DOWNSTREAM);
&gt; 
&gt;     // Use the character iterator to translate the next value into a DOM position.
&gt;-    BackwardsCharacterIterator charIt(searchRange.get(), TextIteratorEndsAtEditingBoundary);
&gt;+    BackwardsCharacterIterator charIt(searchRange.get());
&gt;     charIt.advance(string.size() - suffixLength - next);
&gt;     return VisiblePosition(charIt.range()-&gt;endPosition(), DOWNSTREAM);
&gt; }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355874</commentid>
    <comment_count>64</comment_count>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-02-22 22:26:31 -0800</bug_when>
    <thetext>oops</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355875</commentid>
    <comment_count>65</comment_count>
      <attachid>83447</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-02-22 22:28:56 -0800</bug_when>
    <thetext>Created attachment 83447
Patch with correct svn version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355892</commentid>
    <comment_count>66</comment_count>
      <attachid>83450</attachid>
    <who name="Benjamin (Ben) Kalman">kalman</who>
    <bug_when>2011-02-22 23:00:18 -0800</bug_when>
    <thetext>Created attachment 83450
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355949</commentid>
    <comment_count>67</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-23 02:08:44 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 83450:

fast/css/font-face-download-error.html bug 51757 (author: yuzo@google.com)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355950</commentid>
    <comment_count>68</comment_count>
      <attachid>83450</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-23 02:10:29 -0800</bug_when>
    <thetext>Comment on attachment 83450
Patch for landing

Clearing flags on attachment: 83450

Committed r79429: &lt;http://trac.webkit.org/changeset/79429&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355951</commentid>
    <comment_count>69</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-23 02:10:39 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>76483</attachid>
            <date>2010-12-13 18:57:51 -0800</date>
            <delta_ts>2010-12-13 18:57:51 -0800</delta_ts>
            <desc>Repro</desc>
            <filename>17.html</filename>
            <type>text/html</type>
            <size>101</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">PGRpdiBjb250ZW50ZWRpdGFibGU+Zm9vIGJhciA8c3BhbiBjb250ZW50ZWRpdGFibGU9ZmFsc2Ug
c3R5bGU9ImNvbG9yOnJlZCI+YmF6PC9zcGFuPiBxdXggcXV1eDwvZGl2Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76506</attachid>
            <date>2010-12-13 23:09:45 -0800</date>
            <delta_ts>2010-12-16 23:40:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51001-20101214180942.patch</filename>
            <type>text/plain</type>
            <size>8455</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4MjBiMDY0OTY1Mzk4ZDg1OTk5NmM0ZGYxODZlN2UzNWM0ZGU1YjgxLi5lMDUyY2Qy
MzcyYmUxN2VjNThkOTYwNWZhNGFhOGRmYjdjZWI1NjY2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTAtMTItMTMgIEJlbmphbWluIEthbG1hbiAgPGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIG9yIHNl
bGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVtcHMgdG8gc3RhcnQgb2YgY29udGVudGVkaXRh
YmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9ZmFsc2Ugc3BhbiBpcyBlbmNvdW50ZXJlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEwMDEKKwor
ICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXIt
bm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9zZWxl
Y3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUuaHRtbDogQWRk
ZWQuCisKIDIwMTAtMTItMTMgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBVcGRhdGVkIExlb3BhcmQtc3BlY2lmaWMgcmVzdWx0cyBhZnRlciByNzM5OTMuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnkt
d29yZC1vdmVyLW5vbi1lZGl0YWJsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzgwODY5MmZkMzc2ZTQ1ZmU3NDliYzVmMjBiZjRkZmQ2YzAx
MWMyMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4
dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDYgQEAKK1Rlc3RzIHRoYXQgZXh0ZW5kaW5nIGJhY2t3YXJkcyBvdmVyIGEgbm9uLWNv
bnRlbnRlZGl0YWJsZSB3b3JkIG9ubHkgZXh0ZW5kcyBvdmVyIHRoYXQgd29yZAorfCAiZm9vIGJh
ciA8I3NlbGVjdGlvbi1mb2N1cz4iCit8IDxzcGFuPgorfCAgIGNvbnRlbnRlZGl0YWJsZT0iZmFs
c2UiCit8ICAgImJheiIKK3wgIjwjc2VsZWN0aW9uLWFuY2hvcj4gcXV4IHF1dXgiCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29y
ZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24v
ZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kNGExZGQ0NjliOGQ1ZTQ1NDM4MzRkYzY3NmNhYWM4NzVjZmNkOTI0Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdv
cmQtb3Zlci1ub24tZWRpdGFibGUuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxkaXYgY29udGVudGVkaXRhYmxlPmZvbyBiYXIgPHNwYW4gY29udGVudGVkaXRhYmxlPWZh
bHNlPmJhejwvc3Bhbj4gcXV4IHF1dXg8L2Rpdj4KKworPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9kdW1wLWFzLW1hcmt1cC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgIHRleHRDb250
YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2IilbMF07CisKKyAgICAv
LyBQbGFjZSBjdXJzb3IgYWZ0ZXIgImJheiIuCisgICAgZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFu
ZEV4dGVudCh0ZXh0Q29udGFpbmVyLmNoaWxkTm9kZXNbMl0sIDApOworICAgIC8vIEV4dGVuZCBz
ZWxlY3Rpb24gYmFja3dhcmRzIGJ5IGEgd29yZDsgImJheiIgc2hvdWxkIGJlIHNlbGVjdGVkLgor
ICAgIGdldFNlbGVjdGlvbigpLm1vZGlmeSgiZXh0ZW5kIiwgImJhY2t3YXJkIiwgIndvcmQiKTsK
KworICAgIE1hcmt1cC5kZXNjcmlwdGlvbigiVGVzdHMgdGhhdCBleHRlbmRpbmcgYmFja3dhcmRz
IG92ZXIgYSBub24tY29udGVudGVkaXRhYmxlIHdvcmQgb25seSBleHRlbmRzIG92ZXIgdGhhdCB3
b3JkIik7CisgICAgTWFya3VwLmR1bXAodGV4dENvbnRhaW5lcik7Cis8L3NjcmlwdD4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzgxOGUy
YmZmMGVmMDI2Yzg4NDVkMGI0NjBiMTFiNWVlZWU5MzMzYS4uZGU2MjNkYzQzZDIwYjYwNDY2NjE2
ZDQwNzllMTQzMjBmM2RjNjdkZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMC0xMi0xMyAgQmVuamFtaW4g
S2FsbWFuICA8a2FsbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zpbmcgb3Igc2VsZWN0aW5nIGJhY2t3YXJkcyBieSB3
b3JkcyBqdW1wcyB0byBzdGFydCBvZiBjb250ZW50ZWRpdGFibGUgcmVnaW9uIGlmIGNvbnRlbnRl
ZGl0YWJsZT1mYWxzZSBzcGFuIGlzIGVuY291bnRlcmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTAwMQorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcv
c2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0bWwK
KworICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDogRm9yIFRleHRJdGVyYXRvckVu
ZHNBdEVkaXRpbmdCb3VuZGFyeSAobm93CisgICAgICAgIFRleHRJdGVyYXRvckVuZHNXaGVuQXNj
ZW5kc0Fjcm9zc0VkaXRpbmdCb3VuZGFyeSksIG9ubHkgc3RvcCB0ZXh0IGl0ZXJhdGlvbiBpZiB0
aGUgZWRpdGluZworICAgICAgICBib3VuZGFyeSBjaGFuZ2Ugb2NjdXJzIHdoZW4gYXNjZW5kaW5n
IGluIHRoZSBkb20uCisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRv
cik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpT
aW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
aWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFzY2VuZHNBY3Jvc3NFZGl0aW5nQm91bmRhcnkp
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6c2V0
Q3VycmVudE5vZGUpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmg6IFJlbmFtZSBU
ZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkgdG8KKyAgICAgICAgVGV4dEl0ZXJhdG9y
RW5kc1doZW5Bc2NlbmRzQWNyb3NzRWRpdGluZ0JvdW5kYXJ5IHRvIHJlZmxlY3Qgd2hhdCBpdCBk
b2VzIG5vdy4KKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6cHJldmlvdXNCb3VuZGFyeSk6CisKIDIwMTAtMTItMTMgIE1pa2UgTGF3dGhlciAg
PG1pa2VsYXd0aGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW5pZWwg
QmF0ZXMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDdlNDE0MjBkZGY0YzY1ZmI1OGUy
YmE0OGRiNTBiNjQ3ZWY3YThjOWQuLjk3YWUwMjdjZmNmM2Q0N2I5ZTkwOGI3OTc2NzJmZGNiODE0
MGY1OTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBi
L1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC0yOTAsNyArMjkwLDcgQEAgVGV4
dEl0ZXJhdG9yOjpUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2UqIHIsIFRleHRJdGVyYXRvckJlaGF2
aW9yIGJlaGF2aW9yKQogICAgICwgbV9pZ25vcmVzU3R5bGVWaXNpYmlsaXR5KGJlaGF2aW9yICYg
VGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSkKIHsKICAgICAvLyBGSVhNRTogc2hv
dWxkIHN1cHBvcnQgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5IGh0dHA6Ly93ZWJr
aXQub3JnL2IvNDM2MDkKLSAgICBBU1NFUlQoYmVoYXZpb3IgIT0gVGV4dEl0ZXJhdG9yRW5kc0F0
RWRpdGluZ0JvdW5kYXJ5KTsKKyAgICBBU1NFUlQoYmVoYXZpb3IgIT0gVGV4dEl0ZXJhdG9yRW5k
c1doZW5Bc2NlbmRzQWNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKIAogICAgIGlmICghcikKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTA1MSw3ICsxMDUxLDcgQEAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJ
dGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwK
ICAgICAsIG1fbm9kZSgwKQogICAgICwgbV9wb3NpdGlvbk5vZGUoMCkKIHsKLSAgICBBU1NFUlQo
bV9iZWhhdmlvciA9PSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IgfHwgbV9iZWhhdmlvciA9
PSBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkpOworICAgIEFTU0VSVChtX2JlaGF2
aW9yID09IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciB8fCBtX2JlaGF2aW9yID09IFRleHRJ
dGVyYXRvckVuZHNXaGVuQXNjZW5kc0Fjcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAKICAgICBpZiAo
IXIpCiAgICAgICAgIHJldHVybjsKQEAgLTEyMzksMTYgKzEyMzksMTYgQEAgdm9pZCBTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjplbWl0Q2hhcmFjdGVyKFVDaGFyIGMsIE5vZGUqIG5v
ZGUsIGludCBzdGEKICAgICBtX2xhc3RDaGFyYWN0ZXIgPSBjOwogfQogCi1ib29sIFNpbXBsaWZp
ZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmNyb3NzZXNFZGl0aW5nQm91bmRhcnkoTm9kZSogbm9k
ZSkgY29uc3QKK2Jvb2wgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YXNjZW5kc0Fj
cm9zc0VkaXRpbmdCb3VuZGFyeShOb2RlKiBub2RlKSBjb25zdAogewotICAgIHJldHVybiBtX25v
ZGUgJiYgbV9ub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpICE9IG5vZGUtPmlzQ29udGVudEVkaXRh
YmxlKCk7CisgICAgcmV0dXJuIG1fbm9kZSAmJiBtX25vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkg
IT0gbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiBtX25vZGUtPnBhcmVudEVsZW1lbnQoKSA9
PSBub2RlOwogfQogCiBib29sIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OnNldEN1
cnJlbnROb2RlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKG1fYmVoYXZpb3IgPT0gVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0Jv
dW5kYXJ5ICYmIGNyb3NzZXNFZGl0aW5nQm91bmRhcnkobm9kZSkpCisgICAgaWYgKG1fYmVoYXZp
b3IgPT0gVGV4dEl0ZXJhdG9yRW5kc1doZW5Bc2NlbmRzQWNyb3NzRWRpdGluZ0JvdW5kYXJ5ICYm
IGFzY2VuZHNBY3Jvc3NFZGl0aW5nQm91bmRhcnkobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBtX25vZGUgPSBub2RlOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oIGIvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5oCmluZGV4IDhiNjFhZmUyMTFiNGQzN2I3NGY5ZjRhNTgyMzdlMWQyOGYyZGNmYjQuLmEyMjZl
ZWM1M2IyOWQ0ZDg4MzFiMDZkNmFmZGEyNWI2ZDk4NGU3ZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZWRpdGluZy9UZXh0SXRlcmF0b3IuaAorKysgYi9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9y
LmgKQEAgLTQxLDEwICs0MSwxMCBAQCBlbnVtIFRleHRJdGVyYXRvckJlaGF2aW9yIHsKICAgICBU
ZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyA9IDEg
PDwgMCwKICAgICBUZXh0SXRlcmF0b3JFbnRlcnNUZXh0Q29udHJvbHMgPSAxIDw8IDEsCiAgICAg
VGV4dEl0ZXJhdG9yRW1pdHNUZXh0c1dpdGhvdXRUcmFuc2NvZGluZyA9IDEgPDwgMiwKLSAgICBU
ZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkgPSAxIDw8IDMsCisgICAgVGV4dEl0ZXJh
dG9yRW5kc1doZW5Bc2NlbmRzQWNyb3NzRWRpdGluZ0JvdW5kYXJ5ID0gMSA8PCAzLAogICAgIFRl
eHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHkgPSAxIDw8IDQKIH07Ci0gICAgCisKIC8v
IEZJWE1FOiBDYW4ndCByZWFsbHkgYW5zd2VyIHRoaXMgcXVlc3Rpb24gY29ycmVjdGx5IHdpdGhv
dXQga25vd2luZyB0aGUgd2hpdGUtc3BhY2UgbW9kZS4KIC8vIEZJWE1FOiBNb3ZlIHRoaXMgc29t
ZXdoZXJlIGVsc2UgaW4gdGhlIGVkaXRpbmcgZGlyZWN0b3J5LiBJdCBkb2Vzbid0IGJlbG9uZyBo
ZXJlLgogaW5saW5lIGJvb2wgaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UoVUNoYXIgYykKQEAgLTIw
NSw3ICsyMDUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlUmVwbGFjZWRFbGVtZW50KCk7
CiAgICAgYm9vbCBoYW5kbGVOb25UZXh0Tm9kZSgpOwogICAgIHZvaWQgZW1pdENoYXJhY3RlcihV
Q2hhciwgTm9kZSosIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCk7Ci0gICAgYm9vbCBj
cm9zc2VzRWRpdGluZ0JvdW5kYXJ5KE5vZGUqKSBjb25zdDsKKyAgICBib29sIGFzY2VuZHNBY3Jv
c3NFZGl0aW5nQm91bmRhcnkoTm9kZSopIGNvbnN0OwogICAgIGJvb2wgc2V0Q3VycmVudE5vZGUo
Tm9kZSopOwogICAgIHZvaWQgY2xlYXJDdXJyZW50Tm9kZSgpOwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91
bml0cy5jcHAKaW5kZXggZDczNDNiZjE4NWI2MGZmNTY4MjU1NTdmNjBlMTU5ZDg2ZTYyMmE0Zi4u
ZWJmYWM0OWU4M2M0MjFiNjI4MzU4NjE5N2QxY2Q3NmUzMzU4YjQ5ZCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy92aXNp
YmxlX3VuaXRzLmNwcApAQCAtODksNyArODksNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHBy
ZXZpb3VzQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJjaAog
ICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCi0gICAgU2lt
cGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSwgVGV4dEl0
ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5KTsKKyAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4
dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdldCgpLCBUZXh0SXRlcmF0b3JFbmRzV2hlbkFzY2Vu
ZHNBY3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogICAgIHVuc2lnbmVkIG5leHQgPSAwOwogICAgIGJv
b2wgaW5UZXh0U2VjdXJpdHlNb2RlID0gc3RhcnQubm9kZSgpICYmIHN0YXJ0Lm5vZGUoKS0+cmVu
ZGVyZXIoKSAmJiBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnRleHRTZWN1cml0
eSgpICE9IFRTTk9ORTsKICAgICBib29sIG5lZWRNb3JlQ29udGV4dCA9IGZhbHNlOwpAQCAtMTI0
LDcgKzEyNCw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25z
dCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoCiAgICAgICAgICAgICBwb3MgPSBQ
b3NpdGlvbihub2RlLCBuZXh0KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBVc2Ug
dGhlIGNoYXJhY3RlciBpdGVyYXRvciB0byB0cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBh
IERPTSBwb3NpdGlvbi4KLSAgICAgICAgICAgIEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yIGNo
YXJJdChzZWFyY2hSYW5nZS5nZXQoKSwgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5
KTsKKyAgICAgICAgICAgIEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yIGNoYXJJdChzZWFyY2hS
YW5nZS5nZXQoKSwgVGV4dEl0ZXJhdG9yRW5kc1doZW5Bc2NlbmRzQWNyb3NzRWRpdGluZ0JvdW5k
YXJ5KTsKICAgICAgICAgICAgIGNoYXJJdC5hZHZhbmNlKHN0cmluZy5zaXplKCkgLSBzdWZmaXhM
ZW5ndGggLSBuZXh0KTsKICAgICAgICAgICAgIHBvcyA9IGNoYXJJdC5yYW5nZSgpLT5lbmRQb3Np
dGlvbigpOwogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76850</attachid>
            <date>2010-12-16 23:40:27 -0800</date>
            <delta_ts>2010-12-29 17:27:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51001-20101217184023.patch</filename>
            <type>text/plain</type>
            <size>11097</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkNDMwNDdiYTkyZWYyYTAwNDc5NDBmNThmODlkYmNiMTNlNWRkY2JjLi5lMzI3ZWI2
ZGI3N2MxOTQ2ZWRiZjZlZTRmNDg4NGY5NGI1YjQxNWZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMTItMTYgIEJlbmphbWluIEthbG1hbiAgPGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIG9yIHNl
bGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVtcHMgdG8gc3RhcnQgb2YgY29udGVudGVkaXRh
YmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9ZmFsc2Ugc3BhbiBpcyBlbmNvdW50ZXJlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEwMDEKKwor
ICAgICAgICBUZXN0IHRoYXQgbW92aW5nIHRoZSBzZWxlY3Rpb24gYmFjayBieSBhIHdvcmQgb3Zl
ciBhIG5vbi1jb250ZW50ZWRpdGFibGUgc3BhbiBvbmx5IG1vdmVzCisgICAgICAgIGJhY2sgYSB3
b3JkIChhcyBvcHBvc2VkIHRvIGN1cnJlbnRseSB3aGVyZSB0aGUgc2VsZWN0aW9uIG1vdmVzIHRv
IHRoZSBzdGFydCBvZiB0aGUgcGFyZW50CisgICAgICAgIGNvbnRlbnRlZGl0YWJsZSBkaXYpLgor
CisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zl
ci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3Nl
bGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sOiBB
ZGRlZC4KKwogMjAxMC0xMi0xNCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXIt
bm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9u
L2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45ZWI3NTk3N2Y2ZTFjOGIzYWFlNTZlMjllZWI5ZTZlYzNkNzhiMDcxCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3
YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEg
QEAKK1Rlc3RzIHRoYXQgZXh0ZW5kaW5nIGJhY2t3YXJkcyBvdmVyIGEgbm9uLWNvbnRlbnRlZGl0
YWJsZSB3b3JkIG9ubHkgZXh0ZW5kcyBvdmVyIHRoYXQgd29yZAorCitEdW1wIG9mIG1hcmt1cCAx
OgorfCAiZm9vIGJhciA8I3NlbGVjdGlvbi1mb2N1cz4iCit8IDxzcGFuPgorfCAgIGNvbnRlbnRl
ZGl0YWJsZT0iZmFsc2UiCit8ICAgImJheiIKK3wgIjwjc2VsZWN0aW9uLWFuY2hvcj4gcXV4IHF1
dXgiCisKK0R1bXAgb2YgbWFya3VwIDI6Cit8ICJQQVNTIgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRp
dGFibGUuaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2Fy
ZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI0NzgwZWZhNTY3
OTM1ODFkNTQ1ZWE5NDVhNmMxODJmYjlmZWZkYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVk
aXRhYmxlLmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8ZGl2IGlkPSJ0
ZXh0Q29udGFpbmVyIiBjb250ZW50ZWRpdGFibGU+Zm9vIGJhciA8c3BhbiBjb250ZW50ZWRpdGFi
bGU9ZmFsc2U+YmF6PC9zcGFuPiBxdXggcXV1eDwvZGl2PgorPGRpdiBpZD0icmVzdWx0Ij5GQUlM
PC9kaXY+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvZHVtcC1hcy1tYXJrdXAuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdD4KKyAgICB0ZXh0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInRleHRDb250YWluZXIiKTsKKyAgICByZXN1bHQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgicmVzdWx0Iik7CisKKyAgICAvLyBQbGFjZSBjdXJzb3IgYWZ0ZXIgImJheiIuCisg
ICAgZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudCh0ZXh0Q29udGFpbmVyLmNoaWxkTm9k
ZXNbMl0sIDApOworICAgIC8vIEV4dGVuZCBzZWxlY3Rpb24gYmFja3dhcmRzIGJ5IGEgd29yZDsg
ImJheiIgc2hvdWxkIGJlIHNlbGVjdGVkLgorICAgIGdldFNlbGVjdGlvbigpLm1vZGlmeSgiZXh0
ZW5kIiwgImJhY2t3YXJkIiwgIndvcmQiKTsKKyAgICBpZiAoZ2V0U2VsZWN0aW9uKCkudG9TdHJp
bmcoKSA9PT0gImJheiIpCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQi
KS5pbm5lckhUTUwgPSAiUEFTUyI7CisKKyAgICBNYXJrdXAuZGVzY3JpcHRpb24oIlRlc3RzIHRo
YXQgZXh0ZW5kaW5nIGJhY2t3YXJkcyBvdmVyIGEgbm9uLWNvbnRlbnRlZGl0YWJsZSB3b3JkIG9u
bHkgZXh0ZW5kcyBvdmVyIHRoYXQgd29yZCIpOworICAgIE1hcmt1cC5kdW1wKHRleHRDb250YWlu
ZXIpOworICAgIE1hcmt1cC5kdW1wKHJlc3VsdCk7Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDI2NGU2ZTM3MmIwMmVl
MDZjNDc4NjBiNmE1NjFjNGZlYmU5Y2FhNC4uOTkyNDRmYjJmNjAxZDU1ZDI0OTg5YjJhOWVhNmUw
NDhkNWY2NmZhOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0xMi0xNiAgQmVuamFtaW4gS2FsbWFuICA8
a2FsbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNb3Zpbmcgb3Igc2VsZWN0aW5nIGJhY2t3YXJkcyBieSB3b3JkcyBqdW1w
cyB0byBzdGFydCBvZiBjb250ZW50ZWRpdGFibGUgcmVnaW9uIGlmIGNvbnRlbnRlZGl0YWJsZT1m
YWxzZSBzcGFuIGlzIGVuY291bnRlcmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01MTAwMQorCisgICAgICAgIFJldmVydCBwYXJ0IG9mIGNoYW5nZXNl
dCA2NDk3NCAoYnVncy53ZWJraXQub3JnL2IvMzYzNTkpIHdoaWNoIGNhdXNlZCB0aGlzIHJlZ3Jl
c3Npb24gYnkKKyAgICAgICAgcmVtb3ZpbmcgcmVmZXJlbmNlcyB0byBUZXh0SXRlcmF0b3JFbmRz
QXRFZGl0aW5nQm91bmRhcnkuCisgICAgICAgIEFkZCBhbiBhbHRlcm5hdGl2ZSBmaXggd2hpY2gg
ZW5zdXJlcyB0aGF0IHRoZSByaWdodG1vc3QgZXF1aXZhbGVudCBQb3NpdGlvbiBpcyB1c2VkIHRv
CisgICAgICAgIGNyZWF0ZSB0aGUgVmlzaWJsZVBvc2l0aW9uIHJldHVybmVkIGZyb20gcHJldmlv
dXNCb3VuZGFyeS4KKworICAgICAgICBUZXN0OiBlZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFj
a3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sCisKKyAgICAgICAgKiBlZGl0aW5n
L1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OlRleHRJ
dGVyYXRvcik6IFJlbW92ZSByZWZlcmVuY2VzIHRvIFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdC
b3VuZGFyeQorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRv
cjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OnNldE5vZGVJZk5vdE51bGwpOgor
ICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmg6IFJlbW92ZSBUZXh0SXRlcmF0b3JFbmRz
QXRFZGl0aW5nQm91bmRhcnkKKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOiAK
KyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0bW9zdEVxdWl2YWxlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6cHJldmlvdXNCb3VuZGFyeSk6IFVzZSB0aGUgcmlnaHRtb3N0IGVxdWl2YWxlbnQgUG9zaXRp
b24gZm9yIHRoZSByZXR1cm5lZCBWaXNpYmxlUG9zaXRpb24KKwogMjAxMC0xMi0xNCAgQnJhZHkg
RWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5
IFByb3NrdXJ5YWtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwIGIvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggN2U0MTQyMGRkZjRj
NjVmYjU4ZTJiYTQ4ZGI1MGI2NDdlZjdhOGM5ZC4uM2I2ODU3MzUzMzlkYmMwYzlkZTc5ZTdmMzU5
ZTIwYjc2ODQzMTc1YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5j
cHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTI4OSw5ICsyODks
NiBAQCBUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwgVGV4dEl0ZXJh
dG9yQmVoYXZpb3IgYmVoYXZpb3IpCiAgICAgLCBtX2hhbmRsZWRGaXJzdExldHRlcihmYWxzZSkK
ICAgICAsIG1faWdub3Jlc1N0eWxlVmlzaWJpbGl0eShiZWhhdmlvciAmIFRleHRJdGVyYXRvckln
bm9yZXNTdHlsZVZpc2liaWxpdHkpCiB7Ci0gICAgLy8gRklYTUU6IHNob3VsZCBzdXBwb3J0IFRl
eHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSBodHRwOi8vd2Via2l0Lm9yZy9iLzQzNjA5
Ci0gICAgQVNTRVJUKGJlaGF2aW9yICE9IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFy
eSk7Ci0KICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTA1MSw3ICsxMDQ4LDcg
QEAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1Rl
eHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwKICAgICAsIG1fbm9kZSgwKQogICAgICwgbV9wb3Np
dGlvbk5vZGUoMCkKIHsKLSAgICBBU1NFUlQobV9iZWhhdmlvciA9PSBUZXh0SXRlcmF0b3JEZWZh
dWx0QmVoYXZpb3IgfHwgbV9iZWhhdmlvciA9PSBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91
bmRhcnkpOworICAgIEFTU0VSVChtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckRlZmF1bHRCZWhh
dmlvcik7CiAKICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNzYsNyArMTA3Myw3
IEBAIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2UqIHIsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzZXRD
dXJyZW50Tm9kZShlbmROb2RlKTsKKyAgICBtX25vZGUgPSBlbmROb2RlOwogICAgIHNldFVwRnVs
bHlDbGlwcGVkU3RhY2sobV9mdWxseUNsaXBwZWRTdGFjaywgbV9ub2RlKTsgICAgCiAgICAgbV9v
ZmZzZXQgPSBlbmRPZmZzZXQ7CiAgICAgbV9oYW5kbGVkTm9kZSA9IGZhbHNlOwpAQCAtMTE0MSw3
ICsxMTM4LDcgQEAgdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNl
KCkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEV4aXQgYWxsIG90aGVyIGNvbnRhaW5l
cnMuCiAgICAgICAgICAgICB3aGlsZSAoIW1fbm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIXNldEN1cnJlbnROb2RlKG1fbm9kZS0+cGFyZW50T3JIb3N0Tm9k
ZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIXNldE5vZGVJZk5vdE51bGwobV9ub2RlLT5wYXJl
bnRPckhvc3ROb2RlKCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBtX2Z1bGx5Q2xpcHBlZFN0YWNrLnBvcCgpOwogICAgICAgICAgICAgICAgIGV4aXROb2Rl
KCk7CkBAIC0xMTU2LDcgKzExNTMsNyBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRl
cmF0b3I6OmFkdmFuY2UoKQogICAgICAgICAgICAgbV9mdWxseUNsaXBwZWRTdGFjay5wb3AoKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZSAmJiBzZXRDdXJyZW50Tm9k
ZShuZXh0KSkKKyAgICAgICAgaWYgKG1fbm9kZSAmJiBzZXROb2RlSWZOb3ROdWxsKG5leHQpKQog
ICAgICAgICAgICAgcHVzaEZ1bGx5Q2xpcHBlZFN0YXRlKG1fZnVsbHlDbGlwcGVkU3RhY2ssIG1f
bm9kZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNsZWFyQ3VycmVudE5vZGUoKTsKQEAg
LTEyMzksMTcgKzEyMzYsMTAgQEAgdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9y
OjplbWl0Q2hhcmFjdGVyKFVDaGFyIGMsIE5vZGUqIG5vZGUsIGludCBzdGEKICAgICBtX2xhc3RD
aGFyYWN0ZXIgPSBjOwogfQogCi1ib29sIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6
OmNyb3NzZXNFZGl0aW5nQm91bmRhcnkoTm9kZSogbm9kZSkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9ub2RlICYmIG1fbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAhPSBub2RlLT5pc0NvbnRlbnRF
ZGl0YWJsZSgpOwotfQotCi1ib29sIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OnNl
dEN1cnJlbnROb2RlKE5vZGUqIG5vZGUpCitib29sIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRl
cmF0b3I6OnNldE5vZGVJZk5vdE51bGwoTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9iZWhhdmlvciA9PSBUZXh0SXRlcmF0b3JF
bmRzQXRFZGl0aW5nQm91bmRhcnkgJiYgY3Jvc3Nlc0VkaXRpbmdCb3VuZGFyeShub2RlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIG1fbm9kZSA9IG5vZGU7CiAgICAgcmV0dXJuIHRydWU7
CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmggYi9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKaW5kZXggOGI2MWFmZTIxMWI0ZDM3Yjc0ZjlmNGE1ODIz
N2UxZDI4ZjJkY2ZiNC4uNGI0YzdlODU1YmMwMzI2MWQ5OWVlMzdmOGM2YmY4ZjFmMTBlZTgxMyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCisrKyBiL1dlYkNvcmUv
ZWRpdGluZy9UZXh0SXRlcmF0b3IuaApAQCAtNDEsMTAgKzQxLDkgQEAgZW51bSBUZXh0SXRlcmF0
b3JCZWhhdmlvciB7CiAgICAgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZp
c2libGVQb3NpdGlvbnMgPSAxIDw8IDAsCiAgICAgVGV4dEl0ZXJhdG9yRW50ZXJzVGV4dENvbnRy
b2xzID0gMSA8PCAxLAogICAgIFRleHRJdGVyYXRvckVtaXRzVGV4dHNXaXRob3V0VHJhbnNjb2Rp
bmcgPSAxIDw8IDIsCi0gICAgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5ID0gMSA8
PCAzLAotICAgIFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHkgPSAxIDw8IDQKKyAg
ICBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5ID0gMSA8PCAzCiB9OwotICAgIAor
CiAvLyBGSVhNRTogQ2FuJ3QgcmVhbGx5IGFuc3dlciB0aGlzIHF1ZXN0aW9uIGNvcnJlY3RseSB3
aXRob3V0IGtub3dpbmcgdGhlIHdoaXRlLXNwYWNlIG1vZGUuCiAvLyBGSVhNRTogTW92ZSB0aGlz
IHNvbWV3aGVyZSBlbHNlIGluIHRoZSBlZGl0aW5nIGRpcmVjdG9yeS4gSXQgZG9lc24ndCBiZWxv
bmcgaGVyZS4KIGlubGluZSBib29sIGlzQ29sbGFwc2libGVXaGl0ZXNwYWNlKFVDaGFyIGMpCkBA
IC0yMDUsOCArMjA0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZVJlcGxhY2VkRWxlbWVu
dCgpOwogICAgIGJvb2wgaGFuZGxlTm9uVGV4dE5vZGUoKTsKICAgICB2b2lkIGVtaXRDaGFyYWN0
ZXIoVUNoYXIsIE5vZGUqLCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQpOwotICAgIGJv
b2wgY3Jvc3Nlc0VkaXRpbmdCb3VuZGFyeShOb2RlKikgY29uc3Q7Ci0gICAgYm9vbCBzZXRDdXJy
ZW50Tm9kZShOb2RlKik7CisgICAgYm9vbCBzZXROb2RlSWZOb3ROdWxsKE5vZGUqKTsKICAgICB2
b2lkIGNsZWFyQ3VycmVudE5vZGUoKTsKIAogICAgIFRleHRJdGVyYXRvckJlaGF2aW9yIG1fYmVo
YXZpb3I7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAgYi9X
ZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKaW5kZXggZDczNDNiZjE4NWI2MGZmNTY4
MjU1NTdmNjBlMTU5ZDg2ZTYyMmE0Zi4uYjQxMGI5Y2QyODk3NTViNDI0OTdkYTZkZTc0ZTVhNjky
MjhkNDdlNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCisr
KyBiL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcApAQCAtNDksNiArNDksMTYgQEAg
ZW51bSBCb3VuZGFyeVNlYXJjaENvbnRleHRBdmFpbGFiaWxpdHkgeyBEb250SGF2ZU1vcmVDb250
ZXh0LCBNYXlIYXZlTW9yZUNvbnRleHQKIAogdHlwZWRlZiB1bnNpZ25lZCAoKkJvdW5kYXJ5U2Vh
cmNoRnVuY3Rpb24pKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBvZmZz
ZXQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSwgYm9vbCYgbmVlZE1vcmVDb250
ZXh0KTsKIAorc3RhdGljIFBvc2l0aW9uIHJpZ2h0bW9zdEVxdWl2YWxlbnQoUG9zaXRpb24gcCkK
K3sKKyAgICBQb3NpdGlvbiBuZXh0ID0gcC5uZXh0KCk7CisgICAgd2hpbGUgKHAubm9kZSgpICE9
IG5leHQubm9kZSgpKSB7CisgICAgICAgIHAgPSBuZXh0OworICAgICAgICBuZXh0ID0gcC5uZXh0
KCk7CisgICAgfQorICAgIHJldHVybiBwOworfQorCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHBy
ZXZpb3VzQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJjaEZ1
bmN0aW9uIHNlYXJjaEZ1bmN0aW9uKQogewogICAgIFBvc2l0aW9uIHBvcyA9IGMuZGVlcEVxdWl2
YWxlbnQoKTsKQEAgLTg5LDcgKzk5LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91
c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gKICAgICBp
ZiAoZWMpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAotICAgIFNpbXBsaWZp
ZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UuZ2V0KCksIFRleHRJdGVyYXRv
ckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVy
YXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSk7CiAgICAgdW5zaWduZWQgbmV4dCA9IDA7CiAgICAg
Ym9vbCBpblRleHRTZWN1cml0eU1vZGUgPSBzdGFydC5ub2RlKCkgJiYgc3RhcnQubm9kZSgpLT5y
ZW5kZXJlcigpICYmIHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dGV4dFNlY3Vy
aXR5KCkgIT0gVFNOT05FOwogICAgIGJvb2wgbmVlZE1vcmVDb250ZXh0ID0gZmFsc2U7CkBAIC0x
MTUsMTggKzEyNSwxOSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnko
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJjaAogICAgICAgICBBU1NFUlQo
IW5lZWRNb3JlQ29udGV4dCk7CiAgICAgfQogCi0gICAgaWYgKGl0LmF0RW5kKCkgJiYgbmV4dCA9
PSAwKSB7Ci0gICAgICAgIHBvcyA9IGl0LnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKTsKLSAgICB9
IGVsc2UgaWYgKG5leHQgIT0gMCkgeworICAgIGlmIChpdC5hdEVuZCgpICYmICFuZXh0KQorICAg
ICAgICBwb3MgPSBpdC5yYW5nZSgpLmdldCgpLT5zdGFydFBvc2l0aW9uKCk7CisgICAgZWxzZSBp
ZiAobmV4dCkgewogICAgICAgICBOb2RlICpub2RlID0gaXQucmFuZ2UoKS0+c3RhcnRDb250YWlu
ZXIoZWMpOwogICAgICAgICBpZiAoKG5vZGUtPmlzVGV4dE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxp
bnQ+KG5leHQpIDw9IG5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgpKSB8fCAobm9kZS0+cmVuZGVy
ZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc0JSKCkgJiYgIW5leHQpKQogICAgICAgICAgICAg
Ly8gVGhlIG5leHQgdmFyaWFibGUgY29udGFpbnMgYSB1c2FibGUgaW5kZXggaW50byBhIHRleHQg
bm9kZQogICAgICAgICAgICAgcG9zID0gUG9zaXRpb24obm9kZSwgbmV4dCk7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgLy8gVXNlIHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gdHJhbnNs
YXRlIHRoZSBuZXh0IHZhbHVlIGludG8gYSBET00gcG9zaXRpb24uCi0gICAgICAgICAgICBCYWNr
d2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UuZ2V0KCksIFRleHRJdGVy
YXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAgICAgICAgICBCYWNrd2FyZHNDaGFyYWN0
ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UuZ2V0KCkpOwogICAgICAgICAgICAgY2hhckl0
LmFkdmFuY2Uoc3RyaW5nLnNpemUoKSAtIHN1ZmZpeExlbmd0aCAtIG5leHQpOwotICAgICAgICAg
ICAgcG9zID0gY2hhckl0LnJhbmdlKCktPmVuZFBvc2l0aW9uKCk7CisgICAgICAgICAgICAvLyBU
YWtlIHRoZSByaWdodG1vc3QgZXF1aXZhbGVudCBwb3NpdGlvbiBzbyB0aGF0IHRoZSBjb3JyZWN0
IGNvbnRhaW5pbmcgZWRpdGFibGUgcmVnaW9uIGlzIHVzZWQgaWYgYSBib3VuZGFyeSBpcyByZWFj
aGVkLgorICAgICAgICAgICAgcG9zID0gcmlnaHRtb3N0RXF1aXZhbGVudChjaGFySXQucmFuZ2Uo
KS0+ZW5kUG9zaXRpb24oKSk7CiAgICAgICAgIH0KICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77653</attachid>
            <date>2010-12-29 17:27:50 -0800</date>
            <delta_ts>2010-12-29 17:47:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51001-20101230122747.patch</filename>
            <type>text/plain</type>
            <size>11745</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBhMjVmMTBlN2Q5MzdmNDc4ZjJlNDBmMWRmMTA2NGFjMzlkZGU3ZDM3Li5mN2RhMWRl
NGVmMjg0NTdkNmU1NmEzNDNhMDIxYzUyNDg4NjE3MDhkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTAtMTItMjkgIEJlbmphbWluIEthbG1hbiAgPGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIG9yIHNl
bGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVtcHMgdG8gc3RhcnQgb2YgY29udGVudGVkaXRh
YmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9ZmFsc2Ugc3BhbiBpcyBlbmNvdW50ZXJlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEwMDEKKwor
ICAgICAgICBBZGQgcmVncmVzc2lvbiB0ZXN0LgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rp
b24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnkt
d29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sOiBBZGRlZC4KKwogMjAxMC0xMi0yOSAgTWloYWkg
UGFycGFyaXRhICA8bWloYWlwQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIENo
cm9taXVtIGV4cGVjdGF0aW9ucyB1cGRhdGUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0
aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dh
cmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmM0
ZmIwMzc5ZDM3MGJlOThkYTcxMWJkMmJlYjVlODA3YjRjNjBlMwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92
ZXItbm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgZm9yIExU
UgorUEFTUyBmb3IgUlRMCisKK2ZvbyBiYXIgYmF6IHF1eCBxdXV4CivXqdeV1rzXqNeUINep15XW
vNeo15Qg16nXlda816jXlCDXqdeV1rzXqNeUINep15XWvNeo15QKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9u
LWVkaXRhYmxlLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFj
a3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5MjQ5MzE5
ZmIwNGVlOTgzYTdiMWUxYzgwZTNiYmEwYmE5Mjc0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5v
bi1lZGl0YWJsZS5odG1sCkBAIC0wLDAgKzEsNDcgQEAKKzwhRE9DVFlQRSBodG1sPgorPHByZSBp
ZD0ibG9nIj48L3ByZT4KKworPGRpdiBpZD0ibHRyVGV4dENvbnRhaW5lciIgY29udGVudGVkaXRh
YmxlPmZvbyBiYXIgPHNwYW4gY29udGVudGVkaXRhYmxlPWZhbHNlPmJhejwvc3Bhbj4gcXV4IHF1
dXg8L2Rpdj4KKzxkaXYgaWQ9InJ0bFRleHRDb250YWluZXIiIGNvbnRlbnRlZGl0YWJsZSBkaXI9
InJ0bCI+JiN4MDVFOTsmI3gwNUQ1OyYjeDA1QkM7JiN4MDVFODsmI3gwNUQ0OyAmI3gwNUU5OyYj
eDA1RDU7JiN4MDVCQzsmI3gwNUU4OyYjeDA1RDQ7Cis8c3BhbiBjb250ZW50ZWRpdGFibGU9ZmFs
c2U+JiN4MDVFOTsmI3gwNUQ1OyYjeDA1QkM7JiN4MDVFODsmI3gwNUQ0Ozwvc3Bhbj4KKyYjeDA1
RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1RTg7JiN4MDVENDsgJiN4MDVFOTsmI3gwNUQ1OyYjeDA1
QkM7JiN4MDVFODsmI3gwNUQ0OzwvZGl2PgorCis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKHMpIHsK
KyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZyIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKHMgKyAiXG4iKSk7Cit9CisKK2Z1bmN0aW9uIHBsYWNlQ3Vyc29yQWZ0ZXJG
aXJzdE5vbmVkaXRhYmxlQ2hpbGQoY29udGFpbmVyKSB7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
Y29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgbm9kZSA9IGNvbnRh
aW5lci5jaGlsZE5vZGVzW2ldOworICAgIGlmIChub2RlLmlzQ29udGVudEVkaXRhYmxlICE9PSB1
bmRlZmluZWQgJiYgIW5vZGUuaXNDb250ZW50RWRpdGFibGUpIHsKKyAgICAgIGdldFNlbGVjdGlv
bigpLnNldFBvc2l0aW9uKG5vZGUubmV4dFNpYmxpbmcsIDApOworICAgICAgcmV0dXJuIG5vZGU7
CisgICAgfQorICB9CisgIHRocm93ICJDb3VsZG4ndCBmaW5kIG5vbmVkaXRhYmxlIGNoaWxkIG9m
ICIgKyBjb250YWluZXIudGV4dENvbnRlbnQ7Cit9CisKK2x0clRleHRDb250YWluZXIgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgibHRyVGV4dENvbnRhaW5lciIpOworbm9uZWRpdGFibGVDaGls
ZCA9IHBsYWNlQ3Vyc29yQWZ0ZXJGaXJzdE5vbmVkaXRhYmxlQ2hpbGQobHRyVGV4dENvbnRhaW5l
cik7CitnZXRTZWxlY3Rpb24oKS5tb2RpZnkoImV4dGVuZCIsICJiYWNrd2FyZCIsICJ3b3JkIik7
CisKK2lmIChnZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBub25lZGl0YWJsZUNoaWxkLnRl
eHRDb250ZW50KQorICBsb2coIlBBU1MgZm9yIExUUiIpOworZWxzZQorICBsb2coIkZBSUwgZm9y
IExUUiwgc2VsZWN0aW9uIGlzIFwiIiArIGdldFNlbGVjdGlvbigpICsgIlwiIGJ1dCBzaG91bGQg
YmUgXCIiICsgbm9uZWRpdGFibGVDaGlsZC50ZXh0Q29udGVudCArICJcIiIpOworCitydGxUZXh0
Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJ0bFRleHRDb250YWluZXIiKTsK
K25vbmVkaXRhYmxlQ2hpbGQgPSBwbGFjZUN1cnNvckFmdGVyRmlyc3ROb25lZGl0YWJsZUNoaWxk
KHJ0bFRleHRDb250YWluZXIpOworZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCJleHRlbmQiLCAiYmFj
a3dhcmQiLCAid29yZCIpOworCitpZiAoZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gbm9u
ZWRpdGFibGVDaGlsZC50ZXh0Q29udGVudCkKKyAgbG9nKCJQQVNTIGZvciBSVEwiKTsKK2Vsc2UK
KyAgbG9nKCJGQUlMIGZvciBSVEwsIHNlbGVjdGlvbiBpcyBcIiIgKyBnZXRTZWxlY3Rpb24oKSAr
ICJcIiBidXQgc2hvdWxkIGJlIFwiIiArIG5vbmVkaXRhYmxlQ2hpbGQudGV4dENvbnRlbnQgKyAi
XCIiKTsKKworbG9nKCIiKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cis8L3NjcmlwdD4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzZhYWExN2Rl
NWMxOWE5YWM2YWMxMzJmYjAyNGFhZTk4YzNmZTdlNy4uNTM2ZGJiMmU0MTMyNzI1MDVkNDFhNjc0
MGMxNTIxZmE4YzZiYmE1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMC0xMi0yOSAgQmVuamFtaW4gS2Fs
bWFuICA8a2FsbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNb3Zpbmcgb3Igc2VsZWN0aW5nIGJhY2t3YXJkcyBieSB3b3Jk
cyBqdW1wcyB0byBzdGFydCBvZiBjb250ZW50ZWRpdGFibGUgcmVnaW9uIGlmIGNvbnRlbnRlZGl0
YWJsZT1mYWxzZSBzcGFuIGlzIGVuY291bnRlcmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTAwMQorCisgICAgICAgIFJldmVydCBzb21lIHByZXZp
b3VzIGNoYW5nZXMgKHRoZSBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkgdGV4dCBp
dGVyYXRpb24KKyAgICAgICAgYmVoYXZpb3VyKSB3aGljaCBjYXVzZWQgdGhpcyBidWcgaW4gdGhl
IGZpcnN0IHBsYWNlLCBhbmQgYWRkIGFsdGVybmF0aXZlIGZpeCBmb3IgdGhlIHByb2JsZW0KKyAg
ICAgICAgdGhhdCBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkgc29sdmVkLgorCisg
ICAgICAgIFRlc3Q6IGVkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92
ZXItbm9uLWVkaXRhYmxlLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cDogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpUZXh0SXRlcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJh
Y2t3YXJkc1RleHRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dh
cmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZpZWRC
YWNrd2FyZHNUZXh0SXRlcmF0b3I6OnNldE5vZGVJZk5vdE51bGwpOgorICAgICAgICAqIGVkaXRp
bmcvVGV4dEl0ZXJhdG9yLmg6IFJlbW92ZSBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRh
cnksIHJlbmFtZSBzZXRDdXJyZW50Tm9kZSB0bworICAgICAgICBzZXROb2RlSWZOb3ROdWxsLgor
ICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpy
aWdodG1vc3RFcXVpdmFsZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzQm91bmRhcnkp
OiBVc2UgdGhlIHJpZ2h0bW9zdCBlcXVpdmFsZW50IHBvc2l0aXRpb24gd2hlbiByZXR1cm5pbmcg
dGhlCisgICAgICAgIGVuZFBvc2l0aW9uIG9mIHRoZSByYW5nZS4KKwogMjAxMC0xMi0yOSAgUGF2
ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3
ZWQ6IHJldmVydCByNzQ3NTUgYW5kIDc0NzU3LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5n
L1RleHRJdGVyYXRvci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRl
eCA3ZTQxNDIwZGRmNGM2NWZiNThlMmJhNDhkYjUwYjY0N2VmN2E4YzlkLi4zYjY4NTczNTMzOWRi
YzBjOWRlNzllN2YzNTllMjBiNzY4NDMxNzVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEl0ZXJhdG9yLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApA
QCAtMjg5LDkgKzI4OSw2IEBAIFRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdl
KiByLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKICAgICAsIG1faGFuZGxlZEZpcnN0
TGV0dGVyKGZhbHNlKQogICAgICwgbV9pZ25vcmVzU3R5bGVWaXNpYmlsaXR5KGJlaGF2aW9yICYg
VGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSkKIHsKLSAgICAvLyBGSVhNRTogc2hv
dWxkIHN1cHBvcnQgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5IGh0dHA6Ly93ZWJr
aXQub3JnL2IvNDM2MDkKLSAgICBBU1NFUlQoYmVoYXZpb3IgIT0gVGV4dEl0ZXJhdG9yRW5kc0F0
RWRpdGluZ0JvdW5kYXJ5KTsKLQogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0x
MDUxLDcgKzEwNDgsNyBAQCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLAogICAgICwgbV9ub2RlKDAp
CiAgICAgLCBtX3Bvc2l0aW9uTm9kZSgwKQogewotICAgIEFTU0VSVChtX2JlaGF2aW9yID09IFRl
eHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciB8fCBtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckVu
ZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAgQVNTRVJUKG1fYmVoYXZpb3IgPT0gVGV4dEl0ZXJh
dG9yRGVmYXVsdEJlaGF2aW9yKTsKIAogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwpAQCAt
MTA3Niw3ICsxMDczLDcgQEAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxp
ZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwKICAgICAgICAgfQogICAg
IH0KIAotICAgIHNldEN1cnJlbnROb2RlKGVuZE5vZGUpOworICAgIG1fbm9kZSA9IGVuZE5vZGU7
CiAgICAgc2V0VXBGdWxseUNsaXBwZWRTdGFjayhtX2Z1bGx5Q2xpcHBlZFN0YWNrLCBtX25vZGUp
OyAgICAKICAgICBtX29mZnNldCA9IGVuZE9mZnNldDsKICAgICBtX2hhbmRsZWROb2RlID0gZmFs
c2U7CkBAIC0xMTQxLDcgKzExMzgsNyBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRl
cmF0b3I6OmFkdmFuY2UoKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gRXhpdCBhbGwg
b3RoZXIgY29udGFpbmVycy4KICAgICAgICAgICAgIHdoaWxlICghbV9ub2RlLT5wcmV2aW91c1Np
YmxpbmcoKSkgewotICAgICAgICAgICAgICAgIGlmICghc2V0Q3VycmVudE5vZGUobV9ub2RlLT5w
YXJlbnRPckhvc3ROb2RlKCkpKQorICAgICAgICAgICAgICAgIGlmICghc2V0Tm9kZUlmTm90TnVs
bChtX25vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIG1fZnVsbHlDbGlwcGVkU3RhY2sucG9wKCk7CiAgICAgICAgICAg
ICAgICAgZXhpdE5vZGUoKTsKQEAgLTExNTYsNyArMTE1Myw3IEBAIHZvaWQgU2ltcGxpZmllZEJh
Y2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiAgICAgICAgICAgICBtX2Z1bGx5Q2xpcHBl
ZFN0YWNrLnBvcCgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9ub2RlICYm
IHNldEN1cnJlbnROb2RlKG5leHQpKQorICAgICAgICBpZiAobV9ub2RlICYmIHNldE5vZGVJZk5v
dE51bGwobmV4dCkpCiAgICAgICAgICAgICBwdXNoRnVsbHlDbGlwcGVkU3RhdGUobV9mdWxseUNs
aXBwZWRTdGFjaywgbV9ub2RlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2xlYXJDdXJy
ZW50Tm9kZSgpOwpAQCAtMTIzOSwxNyArMTIzNiwxMCBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2Fy
ZHNUZXh0SXRlcmF0b3I6OmVtaXRDaGFyYWN0ZXIoVUNoYXIgYywgTm9kZSogbm9kZSwgaW50IHN0
YQogICAgIG1fbGFzdENoYXJhY3RlciA9IGM7CiB9CiAKLWJvb2wgU2ltcGxpZmllZEJhY2t3YXJk
c1RleHRJdGVyYXRvcjo6Y3Jvc3Nlc0VkaXRpbmdCb3VuZGFyeShOb2RlKiBub2RlKSBjb25zdAot
ewotICAgIHJldHVybiBtX25vZGUgJiYgbV9ub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpICE9IG5v
ZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7Ci19Ci0KLWJvb2wgU2ltcGxpZmllZEJhY2t3YXJkc1Rl
eHRJdGVyYXRvcjo6c2V0Q3VycmVudE5vZGUoTm9kZSogbm9kZSkKK2Jvb2wgU2ltcGxpZmllZEJh
Y2t3YXJkc1RleHRJdGVyYXRvcjo6c2V0Tm9kZUlmTm90TnVsbChOb2RlKiBub2RlKQogewogICAg
IGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2JlaGF2aW9yID09
IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSAmJiBjcm9zc2VzRWRpdGluZ0JvdW5k
YXJ5KG5vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV9ub2RlID0gbm9kZTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0
b3IuaCBiL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAppbmRleCA4YjYxYWZlMjExYjRk
MzdiNzRmOWY0YTU4MjM3ZTFkMjhmMmRjZmI0Li40YjRjN2U4NTViYzAzMjYxZDk5ZWUzN2Y4YzZi
ZjhmMWYxMGVlODEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgK
KysrIGIvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCkBAIC00MSwxMCArNDEsOSBAQCBl
bnVtIFRleHRJdGVyYXRvckJlaGF2aW9yIHsKICAgICBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3Rl
cnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyA9IDEgPDwgMCwKICAgICBUZXh0SXRlcmF0b3JF
bnRlcnNUZXh0Q29udHJvbHMgPSAxIDw8IDEsCiAgICAgVGV4dEl0ZXJhdG9yRW1pdHNUZXh0c1dp
dGhvdXRUcmFuc2NvZGluZyA9IDEgPDwgMiwKLSAgICBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5n
Qm91bmRhcnkgPSAxIDw8IDMsCi0gICAgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0
eSA9IDEgPDwgNAorICAgIFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHkgPSAxIDw8
IDMKIH07Ci0gICAgCisKIC8vIEZJWE1FOiBDYW4ndCByZWFsbHkgYW5zd2VyIHRoaXMgcXVlc3Rp
b24gY29ycmVjdGx5IHdpdGhvdXQga25vd2luZyB0aGUgd2hpdGUtc3BhY2UgbW9kZS4KIC8vIEZJ
WE1FOiBNb3ZlIHRoaXMgc29tZXdoZXJlIGVsc2UgaW4gdGhlIGVkaXRpbmcgZGlyZWN0b3J5LiBJ
dCBkb2Vzbid0IGJlbG9uZyBoZXJlLgogaW5saW5lIGJvb2wgaXNDb2xsYXBzaWJsZVdoaXRlc3Bh
Y2UoVUNoYXIgYykKQEAgLTIwNSw4ICsyMDQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxl
UmVwbGFjZWRFbGVtZW50KCk7CiAgICAgYm9vbCBoYW5kbGVOb25UZXh0Tm9kZSgpOwogICAgIHZv
aWQgZW1pdENoYXJhY3RlcihVQ2hhciwgTm9kZSosIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9m
ZnNldCk7Ci0gICAgYm9vbCBjcm9zc2VzRWRpdGluZ0JvdW5kYXJ5KE5vZGUqKSBjb25zdDsKLSAg
ICBib29sIHNldEN1cnJlbnROb2RlKE5vZGUqKTsKKyAgICBib29sIHNldE5vZGVJZk5vdE51bGwo
Tm9kZSopOwogICAgIHZvaWQgY2xlYXJDdXJyZW50Tm9kZSgpOwogCiAgICAgVGV4dEl0ZXJhdG9y
QmVoYXZpb3IgbV9iZWhhdmlvcjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy92aXNpYmxl
X3VuaXRzLmNwcCBiL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAppbmRleCBkNzM0
M2JmMTg1YjYwZmY1NjgyNTU1N2Y2MGUxNTlkODZlNjIyYTRmLi41YmNhODg3Y2M5ZDAxMWI3OTc1
NTkxMjIyZTI1NzEwMzVhNDlkZjMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJs
ZV91bml0cy5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCkBAIC00
OSw2ICs0OSwxNiBAQCBlbnVtIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSB7IERv
bnRIYXZlTW9yZUNvbnRleHQsIE1heUhhdmVNb3JlQ29udGV4dAogCiB0eXBlZGVmIHVuc2lnbmVk
ICgqQm91bmRhcnlTZWFyY2hGdW5jdGlvbikoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgs
IHVuc2lnbmVkIG9mZnNldCwgQm91bmRhcnlTZWFyY2hDb250ZXh0QXZhaWxhYmlsaXR5LCBib29s
JiBuZWVkTW9yZUNvbnRleHQpOwogCitzdGF0aWMgUG9zaXRpb24gcmlnaHRtb3N0RXF1aXZhbGVu
dChQb3NpdGlvbiBwKQoreworICAgIFBvc2l0aW9uIG5leHQgPSBwLm5leHQoKTsKKyAgICB3aGls
ZSAocC5ub2RlKCkgIT0gbmV4dC5ub2RlKCkpIHsKKyAgICAgICAgcCA9IG5leHQ7CisgICAgICAg
IG5leHQgPSBwLm5leHQoKTsKKyAgICB9CisgICAgcmV0dXJuIHA7Cit9CisKIHN0YXRpYyBWaXNp
YmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJv
dW5kYXJ5U2VhcmNoRnVuY3Rpb24gc2VhcmNoRnVuY3Rpb24pCiB7CiAgICAgUG9zaXRpb24gcG9z
ID0gYy5kZWVwRXF1aXZhbGVudCgpOwpAQCAtODksNyArOTksNyBAQCBzdGF0aWMgVmlzaWJsZVBv
c2l0aW9uIHByZXZpb3VzQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFy
eVNlYXJjaAogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwog
Ci0gICAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQo
KSwgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5KTsKKyAgICBTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdldCgpKTsKICAgICB1bnNpZ25lZCBu
ZXh0ID0gMDsKICAgICBib29sIGluVGV4dFNlY3VyaXR5TW9kZSA9IHN0YXJ0Lm5vZGUoKSAmJiBz
dGFydC5ub2RlKCktPnJlbmRlcmVyKCkgJiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpLT5zdHls
ZSgpLT50ZXh0U2VjdXJpdHkoKSAhPSBUU05PTkU7CiAgICAgYm9vbCBuZWVkTW9yZUNvbnRleHQg
PSBmYWxzZTsKQEAgLTExNSwxOCArMTI1LDE5IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJl
dmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoCiAg
ICAgICAgIEFTU0VSVCghbmVlZE1vcmVDb250ZXh0KTsKICAgICB9CiAKLSAgICBpZiAoaXQuYXRF
bmQoKSAmJiBuZXh0ID09IDApIHsKKyAgICBpZiAoaXQuYXRFbmQoKSAmJiAhbmV4dCkKICAgICAg
ICAgcG9zID0gaXQucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpOwotICAgIH0gZWxzZSBpZiAobmV4
dCAhPSAwKSB7CisgICAgZWxzZSBpZiAobmV4dCkgewogICAgICAgICBOb2RlICpub2RlID0gaXQu
cmFuZ2UoKS0+c3RhcnRDb250YWluZXIoZWMpOwogICAgICAgICBpZiAoKG5vZGUtPmlzVGV4dE5v
ZGUoKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG5leHQpIDw9IG5vZGUtPm1heENoYXJhY3Rlck9mZnNl
dCgpKSB8fCAobm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc0JSKCkgJiYg
IW5leHQpKQogICAgICAgICAgICAgLy8gVGhlIG5leHQgdmFyaWFibGUgY29udGFpbnMgYSB1c2Fi
bGUgaW5kZXggaW50byBhIHRleHQgbm9kZQogICAgICAgICAgICAgcG9zID0gUG9zaXRpb24obm9k
ZSwgbmV4dCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gVXNlIHRoZSBjaGFyYWN0
ZXIgaXRlcmF0b3IgdG8gdHJhbnNsYXRlIHRoZSBuZXh0IHZhbHVlIGludG8gYSBET00gcG9zaXRp
b24uCi0gICAgICAgICAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNo
UmFuZ2UuZ2V0KCksIFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAgICAg
ICAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UuZ2V0KCkp
OwogICAgICAgICAgICAgY2hhckl0LmFkdmFuY2Uoc3RyaW5nLnNpemUoKSAtIHN1ZmZpeExlbmd0
aCAtIG5leHQpOwotICAgICAgICAgICAgcG9zID0gY2hhckl0LnJhbmdlKCktPmVuZFBvc2l0aW9u
KCk7CisgICAgICAgICAgICAvLyBUYWtlIHRoZSByaWdodG1vc3QgZXF1aXZhbGVudCBwb3NpdGlv
biBzbyB0aGF0IHRoZSBjb3JyZWN0IGNvbnRhaW5pbmcgZWRpdGFibGUgcmVnaW9uIGlzIHVzZWQg
aWYgYSBib3VuZGFyeSBpcyByZWFjaGVkLgorICAgICAgICAgICAgcG9zID0gcmlnaHRtb3N0RXF1
aXZhbGVudChjaGFySXQucmFuZ2UoKS0+ZW5kUG9zaXRpb24oKSk7CiAgICAgICAgIH0KICAgICB9
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77655</attachid>
            <date>2010-12-29 17:47:56 -0800</date>
            <delta_ts>2011-01-11 16:46:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51001-20101230124752.patch</filename>
            <type>text/plain</type>
            <size>11802</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBhMjVmMTBlN2Q5MzdmNDc4ZjJlNDBmMWRmMTA2NGFjMzlkZGU3ZDM3Li5mN2RhMWRl
NGVmMjg0NTdkNmU1NmEzNDNhMDIxYzUyNDg4NjE3MDhkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTAtMTItMjkgIEJlbmphbWluIEthbG1hbiAgPGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIG9yIHNl
bGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVtcHMgdG8gc3RhcnQgb2YgY29udGVudGVkaXRh
YmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9ZmFsc2Ugc3BhbiBpcyBlbmNvdW50ZXJlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEwMDEKKwor
ICAgICAgICBBZGQgcmVncmVzc2lvbiB0ZXN0LgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rp
b24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnkt
d29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sOiBBZGRlZC4KKwogMjAxMC0xMi0yOSAgTWloYWkg
UGFycGFyaXRhICA8bWloYWlwQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIENo
cm9taXVtIGV4cGVjdGF0aW9ucyB1cGRhdGUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0
aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dh
cmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmM0
ZmIwMzc5ZDM3MGJlOThkYTcxMWJkMmJlYjVlODA3YjRjNjBlMwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92
ZXItbm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgZm9yIExU
UgorUEFTUyBmb3IgUlRMCisKK2ZvbyBiYXIgYmF6IHF1eCBxdXV4CivXqdeV1rzXqNeUINep15XW
vNeo15Qg16nXlda816jXlCDXqdeV1rzXqNeUINep15XWvNeo15QKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9u
LWVkaXRhYmxlLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFj
a3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5MjQ5MzE5
ZmIwNGVlOTgzYTdiMWUxYzgwZTNiYmEwYmE5Mjc0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5v
bi1lZGl0YWJsZS5odG1sCkBAIC0wLDAgKzEsNDcgQEAKKzwhRE9DVFlQRSBodG1sPgorPHByZSBp
ZD0ibG9nIj48L3ByZT4KKworPGRpdiBpZD0ibHRyVGV4dENvbnRhaW5lciIgY29udGVudGVkaXRh
YmxlPmZvbyBiYXIgPHNwYW4gY29udGVudGVkaXRhYmxlPWZhbHNlPmJhejwvc3Bhbj4gcXV4IHF1
dXg8L2Rpdj4KKzxkaXYgaWQ9InJ0bFRleHRDb250YWluZXIiIGNvbnRlbnRlZGl0YWJsZSBkaXI9
InJ0bCI+JiN4MDVFOTsmI3gwNUQ1OyYjeDA1QkM7JiN4MDVFODsmI3gwNUQ0OyAmI3gwNUU5OyYj
eDA1RDU7JiN4MDVCQzsmI3gwNUU4OyYjeDA1RDQ7Cis8c3BhbiBjb250ZW50ZWRpdGFibGU9ZmFs
c2U+JiN4MDVFOTsmI3gwNUQ1OyYjeDA1QkM7JiN4MDVFODsmI3gwNUQ0Ozwvc3Bhbj4KKyYjeDA1
RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1RTg7JiN4MDVENDsgJiN4MDVFOTsmI3gwNUQ1OyYjeDA1
QkM7JiN4MDVFODsmI3gwNUQ0OzwvZGl2PgorCis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKHMpIHsK
KyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZyIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKHMgKyAiXG4iKSk7Cit9CisKK2Z1bmN0aW9uIHBsYWNlQ3Vyc29yQWZ0ZXJG
aXJzdE5vbmVkaXRhYmxlQ2hpbGQoY29udGFpbmVyKSB7CisgIGZvciAodmFyIGkgPSAwOyBpIDwg
Y29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgbm9kZSA9IGNvbnRh
aW5lci5jaGlsZE5vZGVzW2ldOworICAgIGlmIChub2RlLmlzQ29udGVudEVkaXRhYmxlICE9PSB1
bmRlZmluZWQgJiYgIW5vZGUuaXNDb250ZW50RWRpdGFibGUpIHsKKyAgICAgIGdldFNlbGVjdGlv
bigpLnNldFBvc2l0aW9uKG5vZGUubmV4dFNpYmxpbmcsIDApOworICAgICAgcmV0dXJuIG5vZGU7
CisgICAgfQorICB9CisgIHRocm93ICJDb3VsZG4ndCBmaW5kIG5vbmVkaXRhYmxlIGNoaWxkIG9m
ICIgKyBjb250YWluZXIudGV4dENvbnRlbnQ7Cit9CisKK2x0clRleHRDb250YWluZXIgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgibHRyVGV4dENvbnRhaW5lciIpOworbm9uZWRpdGFibGVDaGls
ZCA9IHBsYWNlQ3Vyc29yQWZ0ZXJGaXJzdE5vbmVkaXRhYmxlQ2hpbGQobHRyVGV4dENvbnRhaW5l
cik7CitnZXRTZWxlY3Rpb24oKS5tb2RpZnkoImV4dGVuZCIsICJiYWNrd2FyZCIsICJ3b3JkIik7
CisKK2lmIChnZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBub25lZGl0YWJsZUNoaWxkLnRl
eHRDb250ZW50KQorICBsb2coIlBBU1MgZm9yIExUUiIpOworZWxzZQorICBsb2coIkZBSUwgZm9y
IExUUiwgc2VsZWN0aW9uIGlzIFwiIiArIGdldFNlbGVjdGlvbigpICsgIlwiIGJ1dCBzaG91bGQg
YmUgXCIiICsgbm9uZWRpdGFibGVDaGlsZC50ZXh0Q29udGVudCArICJcIiIpOworCitydGxUZXh0
Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJ0bFRleHRDb250YWluZXIiKTsK
K25vbmVkaXRhYmxlQ2hpbGQgPSBwbGFjZUN1cnNvckFmdGVyRmlyc3ROb25lZGl0YWJsZUNoaWxk
KHJ0bFRleHRDb250YWluZXIpOworZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCJleHRlbmQiLCAiYmFj
a3dhcmQiLCAid29yZCIpOworCitpZiAoZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gbm9u
ZWRpdGFibGVDaGlsZC50ZXh0Q29udGVudCkKKyAgbG9nKCJQQVNTIGZvciBSVEwiKTsKK2Vsc2UK
KyAgbG9nKCJGQUlMIGZvciBSVEwsIHNlbGVjdGlvbiBpcyBcIiIgKyBnZXRTZWxlY3Rpb24oKSAr
ICJcIiBidXQgc2hvdWxkIGJlIFwiIiArIG5vbmVkaXRhYmxlQ2hpbGQudGV4dENvbnRlbnQgKyAi
XCIiKTsKKworbG9nKCIiKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cis8L3NjcmlwdD4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzZhYWExN2Rl
NWMxOWE5YWM2YWMxMzJmYjAyNGFhZTk4YzNmZTdlNy4uN2Q0YmVhMDQ1NDE2Y2Q2MmU5YmY0NTEz
ZWQ1MmU3MjlkZTgwOWQ3ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0xMi0yOSAgQmVuamFtaW4gS2Fs
bWFuICA8a2FsbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNb3Zpbmcgb3Igc2VsZWN0aW5nIGJhY2t3YXJkcyBieSB3b3Jk
cyBqdW1wcyB0byBzdGFydCBvZiBjb250ZW50ZWRpdGFibGUgcmVnaW9uIGlmIGNvbnRlbnRlZGl0
YWJsZT1mYWxzZSBzcGFuIGlzIGVuY291bnRlcmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTAwMQorCisgICAgICAgIFJldmVydCBzb21lIHByZXZp
b3VzIGNoYW5nZXMgKHRoZSBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkgdGV4dCBp
dGVyYXRpb24KKyAgICAgICAgYmVoYXZpb3VyKSB3aGljaCBjYXVzZWQgdGhpcyBidWcgaW4gdGhl
IGZpcnN0IHBsYWNlLCBhbmQgYWRkIGFsdGVybmF0aXZlIGZpeCBmb3IgdGhlIHByb2JsZW0KKyAg
ICAgICAgdGhhdCBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkgc29sdmVkLgorCisg
ICAgICAgIFRlc3Q6IGVkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92
ZXItbm9uLWVkaXRhYmxlLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cDogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpUZXh0SXRlcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJh
Y2t3YXJkc1RleHRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dh
cmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKTogUmVtb3ZlIFRleHRJdGVyYXRvckVuZHNBdEVkaXRp
bmdCb3VuZGFyeS4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5oOgorICAgICAgICAq
IGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyaWdodG1vc3RF
cXVpdmFsZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzQm91bmRhcnkpOiBVc2UgdGhl
IHJpZ2h0bW9zdCBlcXVpdmFsZW50IHBvc2l0aXRpb24gd2hlbiByZXR1cm5pbmcgdGhlCisgICAg
ICAgIGVuZFBvc2l0aW9uIG9mIHRoZSByYW5nZS4KKwogMjAxMC0xMi0yOSAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQ6IHJldmVy
dCByNzQ3NTUgYW5kIDc0NzU3LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVy
YXRvci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCA3ZTQxNDIw
ZGRmNGM2NWZiNThlMmJhNDhkYjUwYjY0N2VmN2E4YzlkLi5kNjM3OGY0NjJhZWMzMDM5ODA3YTY4
Yzg1MzNmOWJiNjM2MDhmZjM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJh
dG9yLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMjg5LDkg
KzI4OSw2IEBAIFRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLCBUZXh0
SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKICAgICAsIG1faGFuZGxlZEZpcnN0TGV0dGVyKGZh
bHNlKQogICAgICwgbV9pZ25vcmVzU3R5bGVWaXNpYmlsaXR5KGJlaGF2aW9yICYgVGV4dEl0ZXJh
dG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSkKIHsKLSAgICAvLyBGSVhNRTogc2hvdWxkIHN1cHBv
cnQgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5IGh0dHA6Ly93ZWJraXQub3JnL2Iv
NDM2MDkKLSAgICBBU1NFUlQoYmVoYXZpb3IgIT0gVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0Jv
dW5kYXJ5KTsKLQogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDUxLDcgKzEw
NDgsNyBAQCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFja3dh
cmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLAogICAgICwgbV9ub2RlKDApCiAgICAgLCBt
X3Bvc2l0aW9uTm9kZSgwKQogewotICAgIEFTU0VSVChtX2JlaGF2aW9yID09IFRleHRJdGVyYXRv
ckRlZmF1bHRCZWhhdmlvciB8fCBtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckVuZHNBdEVkaXRp
bmdCb3VuZGFyeSk7CisgICAgQVNTRVJUKG1fYmVoYXZpb3IgPT0gVGV4dEl0ZXJhdG9yRGVmYXVs
dEJlaGF2aW9yKTsKIAogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwpAQCAtMTA3Niw3ICsx
MDczLDcgQEAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3
YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwKICAgICAgICAgfQogICAgIH0KIAotICAg
IHNldEN1cnJlbnROb2RlKGVuZE5vZGUpOworICAgIG1fbm9kZSA9IGVuZE5vZGU7CiAgICAgc2V0
VXBGdWxseUNsaXBwZWRTdGFjayhtX2Z1bGx5Q2xpcHBlZFN0YWNrLCBtX25vZGUpOyAgICAKICAg
ICBtX29mZnNldCA9IGVuZE9mZnNldDsKICAgICBtX2hhbmRsZWROb2RlID0gZmFsc2U7CkBAIC0x
MTQxLDggKzExMzgsOSBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFk
dmFuY2UoKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gRXhpdCBhbGwgb3RoZXIgY29u
dGFpbmVycy4KICAgICAgICAgICAgIHdoaWxlICghbV9ub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkg
ewotICAgICAgICAgICAgICAgIGlmICghc2V0Q3VycmVudE5vZGUobV9ub2RlLT5wYXJlbnRPckhv
c3ROb2RlKCkpKQorICAgICAgICAgICAgICAgIGlmICghbV9ub2RlLT5wYXJlbnRPckhvc3ROb2Rl
KCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIG1fbm9kZSA9
IG1fbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpOwogICAgICAgICAgICAgICAgIG1fZnVsbHlDbGlw
cGVkU3RhY2sucG9wKCk7CiAgICAgICAgICAgICAgICAgZXhpdE5vZGUoKTsKICAgICAgICAgICAg
ICAgICBpZiAobV9wb3NpdGlvbk5vZGUpIHsKQEAgLTExNTYsOSArMTE1NCwxMCBAQCB2b2lkIFNp
bXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2UoKQogICAgICAgICAgICAgbV9m
dWxseUNsaXBwZWRTdGFjay5wb3AoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KG1fbm9kZSAmJiBzZXRDdXJyZW50Tm9kZShuZXh0KSkKKyAgICAgICAgaWYgKG1fbm9kZSAmJiBu
ZXh0KSB7CisgICAgICAgICAgICBtX25vZGUgPSBuZXh0OwogICAgICAgICAgICAgcHVzaEZ1bGx5
Q2xpcHBlZFN0YXRlKG1fZnVsbHlDbGlwcGVkU3RhY2ssIG1fbm9kZSk7Ci0gICAgICAgIGVsc2UK
KyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBjbGVhckN1cnJlbnROb2RlKCk7CiAKICAgICAg
ICAgLy8gRm9yIHRoZSBwdXJwb3NlIG9mIHdvcmQgYm91bmRhcnkgZGV0ZWN0aW9uLApAQCAtMTIz
OSwyMSArMTIzOCw2IEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6ZW1p
dENoYXJhY3RlcihVQ2hhciBjLCBOb2RlKiBub2RlLCBpbnQgc3RhCiAgICAgbV9sYXN0Q2hhcmFj
dGVyID0gYzsKIH0KIAotYm9vbCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpjcm9z
c2VzRWRpdGluZ0JvdW5kYXJ5KE5vZGUqIG5vZGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbm9k
ZSAmJiBtX25vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgIT0gbm9kZS0+aXNDb250ZW50RWRpdGFi
bGUoKTsKLX0KLQotYm9vbCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpzZXRDdXJy
ZW50Tm9kZShOb2RlKiBub2RlKQotewotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3Vu
ZGFyeSAmJiBjcm9zc2VzRWRpdGluZ0JvdW5kYXJ5KG5vZGUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgbV9ub2RlID0gbm9kZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBTaW1w
bGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpjbGVhckN1cnJlbnROb2RlKCkKIHsKICAgICBt
X25vZGUgPSAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oIGIv
V2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCmluZGV4IDhiNjFhZmUyMTFiNGQzN2I3NGY5
ZjRhNTgyMzdlMWQyOGYyZGNmYjQuLjU5ZmUyYWQ4MWRmZmYxOTYxYzYxODM5ZTljZmU5MjcyODA3
MzVhYmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAorKysgYi9X
ZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKQEAgLTQxLDEwICs0MSw5IEBAIGVudW0gVGV4
dEl0ZXJhdG9yQmVoYXZpb3IgewogICAgIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdl
ZW5BbGxWaXNpYmxlUG9zaXRpb25zID0gMSA8PCAwLAogICAgIFRleHRJdGVyYXRvckVudGVyc1Rl
eHRDb250cm9scyA9IDEgPDwgMSwKICAgICBUZXh0SXRlcmF0b3JFbWl0c1RleHRzV2l0aG91dFRy
YW5zY29kaW5nID0gMSA8PCAyLAotICAgIFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFy
eSA9IDEgPDwgMywKLSAgICBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5ID0gMSA8
PCA0CisgICAgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSA9IDEgPDwgMwogfTsK
LSAgICAKKwogLy8gRklYTUU6IENhbid0IHJlYWxseSBhbnN3ZXIgdGhpcyBxdWVzdGlvbiBjb3Jy
ZWN0bHkgd2l0aG91dCBrbm93aW5nIHRoZSB3aGl0ZS1zcGFjZSBtb2RlLgogLy8gRklYTUU6IE1v
dmUgdGhpcyBzb21ld2hlcmUgZWxzZSBpbiB0aGUgZWRpdGluZyBkaXJlY3RvcnkuIEl0IGRvZXNu
J3QgYmVsb25nIGhlcmUuCiBpbmxpbmUgYm9vbCBpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZShVQ2hh
ciBjKQpAQCAtMjA1LDggKzIwNCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVSZXBsYWNl
ZEVsZW1lbnQoKTsKICAgICBib29sIGhhbmRsZU5vblRleHROb2RlKCk7CiAgICAgdm9pZCBlbWl0
Q2hhcmFjdGVyKFVDaGFyLCBOb2RlKiwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KTsK
LSAgICBib29sIGNyb3NzZXNFZGl0aW5nQm91bmRhcnkoTm9kZSopIGNvbnN0OwotICAgIGJvb2wg
c2V0Q3VycmVudE5vZGUoTm9kZSopOwogICAgIHZvaWQgY2xlYXJDdXJyZW50Tm9kZSgpOwogCiAg
ICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgbV9iZWhhdmlvcjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcCBiL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRz
LmNwcAppbmRleCBkNzM0M2JmMTg1YjYwZmY1NjgyNTU1N2Y2MGUxNTlkODZlNjIyYTRmLi4zZjI3
NTNhYWIzYmUxNTRiNTkyOThhY2RjMzJkMDJmMmY4NDRmMmM5IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVf
dW5pdHMuY3BwCkBAIC00OSw2ICs0OSwxNiBAQCBlbnVtIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2
YWlsYWJpbGl0eSB7IERvbnRIYXZlTW9yZUNvbnRleHQsIE1heUhhdmVNb3JlQ29udGV4dAogCiB0
eXBlZGVmIHVuc2lnbmVkICgqQm91bmRhcnlTZWFyY2hGdW5jdGlvbikoY29uc3QgVUNoYXIqLCB1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG9mZnNldCwgQm91bmRhcnlTZWFyY2hDb250ZXh0QXZh
aWxhYmlsaXR5LCBib29sJiBuZWVkTW9yZUNvbnRleHQpOwogCitzdGF0aWMgUG9zaXRpb24gcmln
aHRtb3N0RXF1aXZhbGVudChQb3NpdGlvbiBwb3NpdGlvbikKK3sKKyAgICBQb3NpdGlvbiBuZXh0
ID0gcG9zaXRpb24ubmV4dCgpOworICAgIHdoaWxlIChwb3NpdGlvbi5ub2RlKCkgIT0gbmV4dC5u
b2RlKCkpIHsKKyAgICAgICAgcG9zaXRpb24gPSBuZXh0OworICAgICAgICBuZXh0ID0gcG9zaXRp
b24ubmV4dCgpOworICAgIH0KKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKIHN0YXRpYyBWaXNp
YmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJv
dW5kYXJ5U2VhcmNoRnVuY3Rpb24gc2VhcmNoRnVuY3Rpb24pCiB7CiAgICAgUG9zaXRpb24gcG9z
ID0gYy5kZWVwRXF1aXZhbGVudCgpOwpAQCAtODksNyArOTksNyBAQCBzdGF0aWMgVmlzaWJsZVBv
c2l0aW9uIHByZXZpb3VzQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFy
eVNlYXJjaAogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwog
Ci0gICAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQo
KSwgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5KTsKKyAgICBTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdldCgpKTsKICAgICB1bnNpZ25lZCBu
ZXh0ID0gMDsKICAgICBib29sIGluVGV4dFNlY3VyaXR5TW9kZSA9IHN0YXJ0Lm5vZGUoKSAmJiBz
dGFydC5ub2RlKCktPnJlbmRlcmVyKCkgJiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpLT5zdHls
ZSgpLT50ZXh0U2VjdXJpdHkoKSAhPSBUU05PTkU7CiAgICAgYm9vbCBuZWVkTW9yZUNvbnRleHQg
PSBmYWxzZTsKQEAgLTExNSwxOCArMTI1LDE5IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJl
dmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoCiAg
ICAgICAgIEFTU0VSVCghbmVlZE1vcmVDb250ZXh0KTsKICAgICB9CiAKLSAgICBpZiAoaXQuYXRF
bmQoKSAmJiBuZXh0ID09IDApIHsKKyAgICBpZiAoaXQuYXRFbmQoKSAmJiAhbmV4dCkKICAgICAg
ICAgcG9zID0gaXQucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpOwotICAgIH0gZWxzZSBpZiAobmV4
dCAhPSAwKSB7CisgICAgZWxzZSBpZiAobmV4dCkgewogICAgICAgICBOb2RlICpub2RlID0gaXQu
cmFuZ2UoKS0+c3RhcnRDb250YWluZXIoZWMpOwogICAgICAgICBpZiAoKG5vZGUtPmlzVGV4dE5v
ZGUoKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG5leHQpIDw9IG5vZGUtPm1heENoYXJhY3Rlck9mZnNl
dCgpKSB8fCAobm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc0JSKCkgJiYg
IW5leHQpKQogICAgICAgICAgICAgLy8gVGhlIG5leHQgdmFyaWFibGUgY29udGFpbnMgYSB1c2Fi
bGUgaW5kZXggaW50byBhIHRleHQgbm9kZQogICAgICAgICAgICAgcG9zID0gUG9zaXRpb24obm9k
ZSwgbmV4dCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gVXNlIHRoZSBjaGFyYWN0
ZXIgaXRlcmF0b3IgdG8gdHJhbnNsYXRlIHRoZSBuZXh0IHZhbHVlIGludG8gYSBET00gcG9zaXRp
b24uCi0gICAgICAgICAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNo
UmFuZ2UuZ2V0KCksIFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAgICAg
ICAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UuZ2V0KCkp
OwogICAgICAgICAgICAgY2hhckl0LmFkdmFuY2Uoc3RyaW5nLnNpemUoKSAtIHN1ZmZpeExlbmd0
aCAtIG5leHQpOwotICAgICAgICAgICAgcG9zID0gY2hhckl0LnJhbmdlKCktPmVuZFBvc2l0aW9u
KCk7CisgICAgICAgICAgICAvLyBUYWtlIHRoZSByaWdodG1vc3QgZXF1aXZhbGVudCBwb3NpdGlv
biBzbyB0aGF0IHRoZSBjb3JyZWN0IGNvbnRhaW5pbmcgZWRpdGFibGUgcmVnaW9uIGlzIHVzZWQg
aWYgYSBib3VuZGFyeSBpcyByZWFjaGVkLgorICAgICAgICAgICAgcG9zID0gcmlnaHRtb3N0RXF1
aXZhbGVudChjaGFySXQucmFuZ2UoKS0+ZW5kUG9zaXRpb24oKSk7CiAgICAgICAgIH0KICAgICB9
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78624</attachid>
            <date>2011-01-11 16:46:43 -0800</date>
            <delta_ts>2011-01-17 19:17:22 -0800</delta_ts>
            <desc>Patch with parentOrHostNode changed to parentNode</desc>
            <filename>bug-51001-20110112114640.patch</filename>
            <type>text/plain</type>
            <size>11939</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmOThmNDY5MTJlMDkwZGJiNTYwMTNiNzRkZTY4YzRhZjc5MGMyN2RmLi4wZGVhMDli
NWY0M2M3MDY3YThhY2E1YTAzZTQ4YWEyNjhiYTE1NDc5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDEtMTEgIEJlbmphbWluIEthbG1hbiAgPGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIG9yIHNl
bGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVtcHMgdG8gc3RhcnQgb2YgY29udGVudGVkaXRh
YmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9ZmFsc2Ugc3BhbiBpcyBlbmNvdW50ZXJlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEwMDEKKwor
CUFkZCByZWdyZXNzaW9uIHRlc3QuCisKKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9leHRl
bmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92
ZXItbm9uLWVkaXRhYmxlLmh0bWw6IEFkZGVkLgorCiAyMDExLTAxLTExICBKdXN0aW4gU2NodWgg
IDxqc2NodWhAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHRlc3QgZXhwZWN0
YXRpb25zIHVwZGF0ZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9u
L2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92
ZXItbm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzRmYjAzNzlkMzcwYmU5
OGRhNzExYmQyYmViNWU4MDdiNGM2MGUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFi
bGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyBmb3IgTFRSCitQQVNTIGZvciBS
VEwKKworZm9vIGJhciBiYXogcXV4IHF1dXgKK9ep15XWvNeo15Qg16nXlda816jXlCDXqdeV1rzX
qNeUINep15XWvNeo15Qg16nXlda816jXlApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGlu
Zy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUuaHRt
bCBiL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3Jk
LW92ZXItbm9uLWVkaXRhYmxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTkyNDkzMTlmYjA0ZWU5ODNhN2Ix
ZTFjODBlM2JiYTBiYTkyNzRhMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRp
bmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0
bWwKQEAgLTAsMCArMSw0NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8cHJlIGlkPSJsb2ciPjwvcHJl
PgorCis8ZGl2IGlkPSJsdHJUZXh0Q29udGFpbmVyIiBjb250ZW50ZWRpdGFibGU+Zm9vIGJhciA8
c3BhbiBjb250ZW50ZWRpdGFibGU9ZmFsc2U+YmF6PC9zcGFuPiBxdXggcXV1eDwvZGl2PgorPGRp
diBpZD0icnRsVGV4dENvbnRhaW5lciIgY29udGVudGVkaXRhYmxlIGRpcj0icnRsIj4mI3gwNUU5
OyYjeDA1RDU7JiN4MDVCQzsmI3gwNUU4OyYjeDA1RDQ7ICYjeDA1RTk7JiN4MDVENTsmI3gwNUJD
OyYjeDA1RTg7JiN4MDVENDsKKzxzcGFuIGNvbnRlbnRlZGl0YWJsZT1mYWxzZT4mI3gwNUU5OyYj
eDA1RDU7JiN4MDVCQzsmI3gwNUU4OyYjeDA1RDQ7PC9zcGFuPgorJiN4MDVFOTsmI3gwNUQ1OyYj
eDA1QkM7JiN4MDVFODsmI3gwNUQ0OyAmI3gwNUU5OyYjeDA1RDU7JiN4MDVCQzsmI3gwNUU4OyYj
eDA1RDQ7PC9kaXY+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cocykgeworICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgibG9nIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
cyArICJcbiIpKTsKK30KKworZnVuY3Rpb24gcGxhY2VDdXJzb3JBZnRlckZpcnN0Tm9uZWRpdGFi
bGVDaGlsZChjb250YWluZXIpIHsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250YWluZXIuY2hp
bGROb2Rlcy5sZW5ndGg7IGkrKykgeworICAgIHZhciBub2RlID0gY29udGFpbmVyLmNoaWxkTm9k
ZXNbaV07CisgICAgaWYgKG5vZGUuaXNDb250ZW50RWRpdGFibGUgIT09IHVuZGVmaW5lZCAmJiAh
bm9kZS5pc0NvbnRlbnRFZGl0YWJsZSkgeworICAgICAgZ2V0U2VsZWN0aW9uKCkuc2V0UG9zaXRp
b24obm9kZS5uZXh0U2libGluZywgMCk7CisgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisgIH0K
KyAgdGhyb3cgIkNvdWxkbid0IGZpbmQgbm9uZWRpdGFibGUgY2hpbGQgb2YgIiArIGNvbnRhaW5l
ci50ZXh0Q29udGVudDsKK30KKworbHRyVGV4dENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJsdHJUZXh0Q29udGFpbmVyIik7Citub25lZGl0YWJsZUNoaWxkID0gcGxhY2VDdXJz
b3JBZnRlckZpcnN0Tm9uZWRpdGFibGVDaGlsZChsdHJUZXh0Q29udGFpbmVyKTsKK2dldFNlbGVj
dGlvbigpLm1vZGlmeSgiZXh0ZW5kIiwgImJhY2t3YXJkIiwgIndvcmQiKTsKKworaWYgKGdldFNl
bGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IG5vbmVkaXRhYmxlQ2hpbGQudGV4dENvbnRlbnQpCisg
IGxvZygiUEFTUyBmb3IgTFRSIik7CitlbHNlCisgIGxvZygiRkFJTCBmb3IgTFRSLCBzZWxlY3Rp
b24gaXMgXCIiICsgZ2V0U2VsZWN0aW9uKCkgKyAiXCIgYnV0IHNob3VsZCBiZSBcIiIgKyBub25l
ZGl0YWJsZUNoaWxkLnRleHRDb250ZW50ICsgIlwiIik7CisKK3J0bFRleHRDb250YWluZXIgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicnRsVGV4dENvbnRhaW5lciIpOworbm9uZWRpdGFibGVD
aGlsZCA9IHBsYWNlQ3Vyc29yQWZ0ZXJGaXJzdE5vbmVkaXRhYmxlQ2hpbGQocnRsVGV4dENvbnRh
aW5lcik7CitnZXRTZWxlY3Rpb24oKS5tb2RpZnkoImV4dGVuZCIsICJiYWNrd2FyZCIsICJ3b3Jk
Iik7CisKK2lmIChnZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBub25lZGl0YWJsZUNoaWxk
LnRleHRDb250ZW50KQorICBsb2coIlBBU1MgZm9yIFJUTCIpOworZWxzZQorICBsb2coIkZBSUwg
Zm9yIFJUTCwgc2VsZWN0aW9uIGlzIFwiIiArIGdldFNlbGVjdGlvbigpICsgIlwiIGJ1dCBzaG91
bGQgYmUgXCIiICsgbm9uZWRpdGFibGVDaGlsZC50ZXh0Q29udGVudCArICJcIiIpOworCitsb2co
IiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDgwM2U1ZjEy
YzE3MWQ3NTA5NmMwYTAyNGM1YzYyY2JhOTQ3ODEyMzcuLmMwYjQyNTc4YzljNDZmNzQyN2Q2NjJm
YzhiYzE5MDVmNWIwZjJkYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMS0wMS0x
MSAgQmVuamFtaW4gS2FsbWFuICA8a2FsbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zpbmcgb3Igc2VsZWN0aW5nIGJh
Y2t3YXJkcyBieSB3b3JkcyBqdW1wcyB0byBzdGFydCBvZiBjb250ZW50ZWRpdGFibGUgcmVnaW9u
IGlmIGNvbnRlbnRlZGl0YWJsZT1mYWxzZSBzcGFuIGlzIGVuY291bnRlcmVkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTAwMQorCisgICAgICAgIFRl
c3Q6IGVkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVk
aXRhYmxlLmh0bWwKKworICAgICAgICBSZXZlcnQgc29tZSBwcmV2aW91cyBjaGFuZ2VzICh0aGUg
VGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5IHRleHQgaXRlcmF0aW9uCisgICAgICAg
IGJlaGF2aW91cikgd2hpY2ggY2F1c2VkIHRoaXMgYnVnIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5k
IGFkZCBhbHRlcm5hdGl2ZSBmaXggZm9yIHRoZSBwcm9ibGVtCisgICAgICAgIHRoYXQgVGV4dEl0
ZXJhdGlvbkVuZHNBdEVkaXRpbmdCb3VuZGFyeSBzb2x2ZWQuCisKKyAgICAgICAgKiBlZGl0aW5n
L1RleHRJdGVyYXRvci5jcHA6IFJlbW92ZSByZWZlcmVuY2VzIHRvIFRleHRJdGVyYXRvckVuZHNB
dEVkaXRpbmdCb3VuZGFyeS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6VGV4dEl0
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0
b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSk6IERvbid0IGFkdmFuY2Ug
b3V0IG9mIHRoZSBzaGFkb3cgZG9tLgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmg6
IFJlbW92ZSBSZW1vdmVUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkuCisgICAgICAg
ICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0bW9z
dEVxdWl2YWxlbnQpOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNCb3VuZGFyeSk6IFVzZSB0
aGUgcmlnaHRtb3N0IGVxdWl2YWxlbnQgcG9zaXRpb24gd2hlbiByZXR1cm5pbmcgdGhlCisgICAg
ICAgIGVuZFBvc2l0aW9uIG9mIHRoZSByYW5nZS4KKwogMjAxMS0wMS0xMSAgSmFtZXMgU2ltb25z
ZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggN2U0MTQy
MGRkZjRjNjVmYjU4ZTJiYTQ4ZGI1MGI2NDdlZjdhOGM5ZC4uOTY4NzUzMDFiNjJmODk1ZDg1Y2Q0
OTg2N2RjYzFmNzNkMWFmY2ZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9y
LmNwcApAQCAtMjg5LDkgKzI4OSw2IEBAIFRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKGNvbnN0
IFJhbmdlKiByLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKICAgICAsIG1faGFuZGxl
ZEZpcnN0TGV0dGVyKGZhbHNlKQogICAgICwgbV9pZ25vcmVzU3R5bGVWaXNpYmlsaXR5KGJlaGF2
aW9yICYgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSkKIHsKLSAgICAvLyBGSVhN
RTogc2hvdWxkIHN1cHBvcnQgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5IGh0dHA6
Ly93ZWJraXQub3JnL2IvNDM2MDkKLSAgICBBU1NFUlQoYmVoYXZpb3IgIT0gVGV4dEl0ZXJhdG9y
RW5kc0F0RWRpdGluZ0JvdW5kYXJ5KTsKLQogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwog
CkBAIC0xMDUxLDcgKzEwNDgsNyBAQCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpT
aW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLAogICAgICwgbV9u
b2RlKDApCiAgICAgLCBtX3Bvc2l0aW9uTm9kZSgwKQogewotICAgIEFTU0VSVChtX2JlaGF2aW9y
ID09IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciB8fCBtX2JlaGF2aW9yID09IFRleHRJdGVy
YXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAgQVNTRVJUKG1fYmVoYXZpb3IgPT0gVGV4
dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKIAogICAgIGlmICghcikKICAgICAgICAgcmV0dXJu
OwpAQCAtMTA3Niw3ICsxMDczLDcgQEAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6
U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwKICAgICAgICAg
fQogICAgIH0KIAotICAgIHNldEN1cnJlbnROb2RlKGVuZE5vZGUpOworICAgIG1fbm9kZSA9IGVu
ZE5vZGU7CiAgICAgc2V0VXBGdWxseUNsaXBwZWRTdGFjayhtX2Z1bGx5Q2xpcHBlZFN0YWNrLCBt
X25vZGUpOyAgICAKICAgICBtX29mZnNldCA9IGVuZE9mZnNldDsKICAgICBtX2hhbmRsZWROb2Rl
ID0gZmFsc2U7CkBAIC0xMTQxLDggKzExMzgsMTAgQEAgdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRz
VGV4dEl0ZXJhdG9yOjphZHZhbmNlKCkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEV4
aXQgYWxsIG90aGVyIGNvbnRhaW5lcnMuCiAgICAgICAgICAgICB3aGlsZSAoIW1fbm9kZS0+cHJl
dmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXNldEN1cnJlbnROb2RlKG1f
bm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSkKKyAgICAgICAgICAgICAgICBOb2RlKiBuZXh0ID0g
bV9ub2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFuZXh0KQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBtX25vZGUgPSBuZXh0OwogICAg
ICAgICAgICAgICAgIG1fZnVsbHlDbGlwcGVkU3RhY2sucG9wKCk7CiAgICAgICAgICAgICAgICAg
ZXhpdE5vZGUoKTsKICAgICAgICAgICAgICAgICBpZiAobV9wb3NpdGlvbk5vZGUpIHsKQEAgLTEx
NTYsOSArMTE1NSwxMCBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFk
dmFuY2UoKQogICAgICAgICAgICAgbV9mdWxseUNsaXBwZWRTdGFjay5wb3AoKTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZSAmJiBzZXRDdXJyZW50Tm9kZShuZXh0KSkK
KyAgICAgICAgaWYgKG1fbm9kZSAmJiBuZXh0KSB7CisgICAgICAgICAgICBtX25vZGUgPSBuZXh0
OwogICAgICAgICAgICAgcHVzaEZ1bGx5Q2xpcHBlZFN0YXRlKG1fZnVsbHlDbGlwcGVkU3RhY2ss
IG1fbm9kZSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBjbGVh
ckN1cnJlbnROb2RlKCk7CiAKICAgICAgICAgLy8gRm9yIHRoZSBwdXJwb3NlIG9mIHdvcmQgYm91
bmRhcnkgZGV0ZWN0aW9uLApAQCAtMTIzOSwyMSArMTIzOSw2IEBAIHZvaWQgU2ltcGxpZmllZEJh
Y2t3YXJkc1RleHRJdGVyYXRvcjo6ZW1pdENoYXJhY3RlcihVQ2hhciBjLCBOb2RlKiBub2RlLCBp
bnQgc3RhCiAgICAgbV9sYXN0Q2hhcmFjdGVyID0gYzsKIH0KIAotYm9vbCBTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yOjpjcm9zc2VzRWRpdGluZ0JvdW5kYXJ5KE5vZGUqIG5vZGUpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fbm9kZSAmJiBtX25vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkg
IT0gbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKLX0KLQotYm9vbCBTaW1wbGlmaWVkQmFja3dh
cmRzVGV4dEl0ZXJhdG9yOjpzZXRDdXJyZW50Tm9kZShOb2RlKiBub2RlKQotewotICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2JlaGF2aW9yID09IFRleHRJ
dGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSAmJiBjcm9zc2VzRWRpdGluZ0JvdW5kYXJ5KG5v
ZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9ub2RlID0gbm9kZTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQogdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpjbGVh
ckN1cnJlbnROb2RlKCkKIHsKICAgICBtX25vZGUgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmgKaW5kZXggOGI2MWFmZTIxMWI0ZDM3Yjc0ZjlmNGE1ODIzN2UxZDI4ZjJkY2Zi
NC4uNTlmZTJhZDgxZGZmZjE5NjFjNjE4MzllOWNmZTkyNzI4MDczNWFiYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCkBAIC00MSwxMCArNDEsOSBAQCBlbnVtIFRleHRJdGVy
YXRvckJlaGF2aW9yIHsKICAgICBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxs
VmlzaWJsZVBvc2l0aW9ucyA9IDEgPDwgMCwKICAgICBUZXh0SXRlcmF0b3JFbnRlcnNUZXh0Q29u
dHJvbHMgPSAxIDw8IDEsCiAgICAgVGV4dEl0ZXJhdG9yRW1pdHNUZXh0c1dpdGhvdXRUcmFuc2Nv
ZGluZyA9IDEgPDwgMiwKLSAgICBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkgPSAx
IDw8IDMsCi0gICAgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSA9IDEgPDwgNAor
ICAgIFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHkgPSAxIDw8IDMKIH07Ci0gICAg
CisKIC8vIEZJWE1FOiBDYW4ndCByZWFsbHkgYW5zd2VyIHRoaXMgcXVlc3Rpb24gY29ycmVjdGx5
IHdpdGhvdXQga25vd2luZyB0aGUgd2hpdGUtc3BhY2UgbW9kZS4KIC8vIEZJWE1FOiBNb3ZlIHRo
aXMgc29tZXdoZXJlIGVsc2UgaW4gdGhlIGVkaXRpbmcgZGlyZWN0b3J5LiBJdCBkb2Vzbid0IGJl
bG9uZyBoZXJlLgogaW5saW5lIGJvb2wgaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UoVUNoYXIgYykK
QEAgLTIwNSw4ICsyMDQsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlUmVwbGFjZWRFbGVt
ZW50KCk7CiAgICAgYm9vbCBoYW5kbGVOb25UZXh0Tm9kZSgpOwogICAgIHZvaWQgZW1pdENoYXJh
Y3RlcihVQ2hhciwgTm9kZSosIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCk7Ci0gICAg
Ym9vbCBjcm9zc2VzRWRpdGluZ0JvdW5kYXJ5KE5vZGUqKSBjb25zdDsKLSAgICBib29sIHNldEN1
cnJlbnROb2RlKE5vZGUqKTsKICAgICB2b2lkIGNsZWFyQ3VycmVudE5vZGUoKTsKIAogICAgIFRl
eHRJdGVyYXRvckJlaGF2aW9yIG1fYmVoYXZpb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNp
YmxlX3VuaXRzLmNwcAppbmRleCA3YmIxNTE1NzM2ZmRjZjNlMWUzMDUwZTdiZjdiM2YzNDZiZDcz
NzJiLi5iNTIzYTY5MWJlODA1MzAyMDZiNmVhMzJiNTM0OWYxZjQyYjUyNzM1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKQEAgLTQ5LDYgKzQ5LDE2IEBAIGVudW0g
Qm91bmRhcnlTZWFyY2hDb250ZXh0QXZhaWxhYmlsaXR5IHsgRG9udEhhdmVNb3JlQ29udGV4dCwg
TWF5SGF2ZU1vcmVDb250ZXh0CiAKIHR5cGVkZWYgdW5zaWduZWQgKCpCb3VuZGFyeVNlYXJjaEZ1
bmN0aW9uKShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgb2Zmc2V0LCBC
b3VuZGFyeVNlYXJjaENvbnRleHRBdmFpbGFiaWxpdHksIGJvb2wmIG5lZWRNb3JlQ29udGV4dCk7
CiAKK3N0YXRpYyBQb3NpdGlvbiByaWdodG1vc3RFcXVpdmFsZW50KFBvc2l0aW9uIHBvc2l0aW9u
KQoreworICAgIFBvc2l0aW9uIG5leHQgPSBwb3NpdGlvbi5uZXh0KCk7CisgICAgd2hpbGUgKHBv
c2l0aW9uLm5vZGUoKSAhPSBuZXh0Lm5vZGUoKSkgeworICAgICAgICBwb3NpdGlvbiA9IG5leHQ7
CisgICAgICAgIG5leHQgPSBwb3NpdGlvbi5uZXh0KCk7CisgICAgfQorICAgIHJldHVybiBwb3Np
dGlvbjsKK30KKwogc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2hGdW5jdGlvbiBzZWFyY2hGdW5jdGlv
bikKIHsKICAgICBQb3NpdGlvbiBwb3MgPSBjLmRlZXBFcXVpdmFsZW50KCk7CkBAIC04OSw3ICs5
OSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNp
YmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoCiAgICAgaWYgKGVjKQogICAgICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJh
dG9yIGl0KHNlYXJjaFJhbmdlLmdldCgpLCBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRh
cnkpOworICAgIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2Uu
Z2V0KCkpOwogICAgIHVuc2lnbmVkIG5leHQgPSAwOwogICAgIGJvb2wgaW5UZXh0U2VjdXJpdHlN
b2RlID0gc3RhcnQubm9kZSgpICYmIHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBzdGFydC5u
b2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnRleHRTZWN1cml0eSgpICE9IFRTTk9ORTsKICAg
ICBib29sIG5lZWRNb3JlQ29udGV4dCA9IGZhbHNlOwpAQCAtMTE1LDE4ICsxMjUsMTkgQEAgc3Rh
dGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlv
biYgYywgQm91bmRhcnlTZWFyY2gKICAgICAgICAgQVNTRVJUKCFuZWVkTW9yZUNvbnRleHQpOwog
ICAgIH0KIAotICAgIGlmIChpdC5hdEVuZCgpICYmIG5leHQgPT0gMCkgeworICAgIGlmIChpdC5h
dEVuZCgpICYmICFuZXh0KQogICAgICAgICBwb3MgPSBpdC5yYW5nZSgpLT5zdGFydFBvc2l0aW9u
KCk7Ci0gICAgfSBlbHNlIGlmIChuZXh0ICE9IDApIHsKKyAgICBlbHNlIGlmIChuZXh0KSB7CiAg
ICAgICAgIE5vZGUgKm5vZGUgPSBpdC5yYW5nZSgpLT5zdGFydENvbnRhaW5lcihlYyk7CiAgICAg
ICAgIGlmICgobm9kZS0+aXNUZXh0Tm9kZSgpICYmIHN0YXRpY19jYXN0PGludD4obmV4dCkgPD0g
bm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpIHx8IChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUt
PnJlbmRlcmVyKCktPmlzQlIoKSAmJiAhbmV4dCkpCiAgICAgICAgICAgICAvLyBUaGUgbmV4dCB2
YXJpYWJsZSBjb250YWlucyBhIHVzYWJsZSBpbmRleCBpbnRvIGEgdGV4dCBub2RlCiAgICAgICAg
ICAgICBwb3MgPSBQb3NpdGlvbihub2RlLCBuZXh0KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAvLyBVc2UgdGhlIGNoYXJhY3RlciBpdGVyYXRvciB0byB0cmFuc2xhdGUgdGhlIG5leHQg
dmFsdWUgaW50byBhIERPTSBwb3NpdGlvbi4KLSAgICAgICAgICAgIEJhY2t3YXJkc0NoYXJhY3Rl
ckl0ZXJhdG9yIGNoYXJJdChzZWFyY2hSYW5nZS5nZXQoKSwgVGV4dEl0ZXJhdG9yRW5kc0F0RWRp
dGluZ0JvdW5kYXJ5KTsKKyAgICAgICAgICAgIEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yIGNo
YXJJdChzZWFyY2hSYW5nZS5nZXQoKSk7CiAgICAgICAgICAgICBjaGFySXQuYWR2YW5jZShzdHJp
bmcuc2l6ZSgpIC0gc3VmZml4TGVuZ3RoIC0gbmV4dCk7Ci0gICAgICAgICAgICBwb3MgPSBjaGFy
SXQucmFuZ2UoKS0+ZW5kUG9zaXRpb24oKTsKKyAgICAgICAgICAgIC8vIFRha2UgdGhlIHJpZ2h0
bW9zdCBlcXVpdmFsZW50IHBvc2l0aW9uIHNvIHRoYXQgdGhlIGNvcnJlY3QgY29udGFpbmluZyBl
ZGl0YWJsZSByZWdpb24gaXMgdXNlZCBpZiBhIGJvdW5kYXJ5IGlzIHJlYWNoZWQuCisgICAgICAg
ICAgICBwb3MgPSByaWdodG1vc3RFcXVpdmFsZW50KGNoYXJJdC5yYW5nZSgpLT5lbmRQb3NpdGlv
bigpKTsKICAgICAgICAgfQogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79237</attachid>
            <date>2011-01-17 19:17:30 -0800</date>
            <delta_ts>2011-01-17 19:24:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51001-20110118141727.patch</filename>
            <type>text/plain</type>
            <size>14936</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3YWMxZTJlMmRkZDMyOGE5MzM3MmFmMTY0ZTliYzhmZWRkMDNkNTdmLi4yMDFjNDY5
NjY0ZGNjM2I1NTExYzk0YjEwMjU2ODVkMTliMDhjNzAxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDEtMTcgIEJlbmphbWluIEthbG1hbiAgPGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIG9yIHNl
bGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVtcHMgdG8gc3RhcnQgb2YgY29udGVudGVkaXRh
YmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9ZmFsc2Ugc3BhbiBpcyBlbmNvdW50ZXJlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEwMDEKKwor
ICAgICAgICBBZGQgcmVncmVzc2lvbiB0ZXN0LgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rp
b24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnkt
d29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMS0xNyAgRGFuIEJl
cm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJh
Y2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRp
dGFibGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjNGZiMDM3OWQzNzBiZTk4ZGE3MTFiZDJi
ZWI1ZTgwN2I0YzYwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Nl
bGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIGZvciBMVFIKK1BBU1MgZm9yIFJUTAorCitmb28g
YmFyIGJheiBxdXggcXV1eAor16nXlda816jXlCDXqdeV1rzXqNeUINep15XWvNeo15Qg16nXlda8
16jXlCDXqdeV1rzXqNeUCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlv
bi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sIGIvTGF5b3V0
VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24t
ZWRpdGFibGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTI0OTMxOWZiMDRlZTk4M2E3YjFlMWM4MGUzYmJh
MGJhOTI3NGEwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rp
b24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUuaHRtbApAQCAtMCww
ICsxLDQ3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxwcmUgaWQ9ImxvZyI+PC9wcmU+CisKKzxkaXYg
aWQ9Imx0clRleHRDb250YWluZXIiIGNvbnRlbnRlZGl0YWJsZT5mb28gYmFyIDxzcGFuIGNvbnRl
bnRlZGl0YWJsZT1mYWxzZT5iYXo8L3NwYW4+IHF1eCBxdXV4PC9kaXY+Cis8ZGl2IGlkPSJydGxU
ZXh0Q29udGFpbmVyIiBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiPiYjeDA1RTk7JiN4MDVENTsm
I3gwNUJDOyYjeDA1RTg7JiN4MDVENDsgJiN4MDVFOTsmI3gwNUQ1OyYjeDA1QkM7JiN4MDVFODsm
I3gwNUQ0OworPHNwYW4gY29udGVudGVkaXRhYmxlPWZhbHNlPiYjeDA1RTk7JiN4MDVENTsmI3gw
NUJDOyYjeDA1RTg7JiN4MDVENDs8L3NwYW4+CismI3gwNUU5OyYjeDA1RDU7JiN4MDVCQzsmI3gw
NUU4OyYjeDA1RDQ7ICYjeDA1RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1RTg7JiN4MDVENDs8L2Rp
dj4KKworPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhzKSB7CisgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJsb2ciKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzICsgIlxuIikp
OworfQorCitmdW5jdGlvbiBwbGFjZUN1cnNvckFmdGVyRmlyc3ROb25lZGl0YWJsZUNoaWxkKGNv
bnRhaW5lcikgeworICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRhaW5lci5jaGlsZE5vZGVzLmxl
bmd0aDsgaSsrKSB7CisgICAgdmFyIG5vZGUgPSBjb250YWluZXIuY2hpbGROb2Rlc1tpXTsKKyAg
ICBpZiAobm9kZS5pc0NvbnRlbnRFZGl0YWJsZSAhPT0gdW5kZWZpbmVkICYmICFub2RlLmlzQ29u
dGVudEVkaXRhYmxlKSB7CisgICAgICBnZXRTZWxlY3Rpb24oKS5zZXRQb3NpdGlvbihub2RlLm5l
eHRTaWJsaW5nLCAwKTsKKyAgICAgIHJldHVybiBub2RlOworICAgIH0KKyAgfQorICB0aHJvdyAi
Q291bGRuJ3QgZmluZCBub25lZGl0YWJsZSBjaGlsZCBvZiAiICsgY29udGFpbmVyLnRleHRDb250
ZW50OworfQorCitsdHJUZXh0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImx0
clRleHRDb250YWluZXIiKTsKK25vbmVkaXRhYmxlQ2hpbGQgPSBwbGFjZUN1cnNvckFmdGVyRmly
c3ROb25lZGl0YWJsZUNoaWxkKGx0clRleHRDb250YWluZXIpOworZ2V0U2VsZWN0aW9uKCkubW9k
aWZ5KCJleHRlbmQiLCAiYmFja3dhcmQiLCAid29yZCIpOworCitpZiAoZ2V0U2VsZWN0aW9uKCku
dG9TdHJpbmcoKSA9PT0gbm9uZWRpdGFibGVDaGlsZC50ZXh0Q29udGVudCkKKyAgbG9nKCJQQVNT
IGZvciBMVFIiKTsKK2Vsc2UKKyAgbG9nKCJGQUlMIGZvciBMVFIsIHNlbGVjdGlvbiBpcyBcIiIg
KyBnZXRTZWxlY3Rpb24oKSArICJcIiBidXQgc2hvdWxkIGJlIFwiIiArIG5vbmVkaXRhYmxlQ2hp
bGQudGV4dENvbnRlbnQgKyAiXCIiKTsKKworcnRsVGV4dENvbnRhaW5lciA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJydGxUZXh0Q29udGFpbmVyIik7Citub25lZGl0YWJsZUNoaWxkID0gcGxh
Y2VDdXJzb3JBZnRlckZpcnN0Tm9uZWRpdGFibGVDaGlsZChydGxUZXh0Q29udGFpbmVyKTsKK2dl
dFNlbGVjdGlvbigpLm1vZGlmeSgiZXh0ZW5kIiwgImJhY2t3YXJkIiwgIndvcmQiKTsKKworaWYg
KGdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IG5vbmVkaXRhYmxlQ2hpbGQudGV4dENvbnRl
bnQpCisgIGxvZygiUEFTUyBmb3IgUlRMIik7CitlbHNlCisgIGxvZygiRkFJTCBmb3IgUlRMLCBz
ZWxlY3Rpb24gaXMgXCIiICsgZ2V0U2VsZWN0aW9uKCkgKyAiXCIgYnV0IHNob3VsZCBiZSBcIiIg
KyBub25lZGl0YWJsZUNoaWxkLnRleHRDb250ZW50ICsgIlwiIik7CisKK2xvZygiIik7CisKK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzMwMjkwNWQ3N2U5YTU3NmQw
NTFiZmYxMDE4MThmYjhkYzkwZGUxYi4uYWViZmIyZDFlNmYwY2UzZDkyNzNhNDY1YTIzNjYxOGVj
NTMxZWFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDExLTAxLTE3ICBCZW5qYW1p
biBLYWxtYW4gIDxrYWxtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmluZyBvciBzZWxlY3RpbmcgYmFja3dhcmRzIGJ5
IHdvcmRzIGp1bXBzIHRvIHN0YXJ0IG9mIGNvbnRlbnRlZGl0YWJsZSByZWdpb24gaWYgY29udGVu
dGVkaXRhYmxlPWZhbHNlIHNwYW4gaXMgZW5jb3VudGVyZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxMDAxCisKKyAgICAgICAgVGVzdDogZWRpdGlu
Zy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUuaHRt
bAorCisgICAgICAgIFJldmVydCBzb21lIHByZXZpb3VzIGNoYW5nZXMgKHRoZSBUZXh0SXRlcmF0
b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkgdGV4dCBpdGVyYXRpb24KKyAgICAgICAgYmVoYXZpb3Vy
KSB3aGljaCBjYXVzZWQgdGhpcyBidWcgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgYWRkIGFsdGVy
bmF0aXZlIGZpeCBmb3IgdGhlIHByb2JsZW0KKyAgICAgICAgdGhhdCBUZXh0SXRlcmF0aW9uRW5k
c0F0RWRpdGluZ0JvdW5kYXJ5IHNvbHZlZC4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5n
VG9Xb3JkKTogVXNlIHdvcmRTdGFydCBhcmd1bWVudCBhcy1pcywgZG9uJ3QKKyAgICAgICAgcmVk
dW5kYW50bHkgY2FsbCBzdGFydE9mV29yZCBvbiBpdCBhZ2Fpbi4KKyAgICAgICAgKiBlZGl0aW5n
L1RleHRJdGVyYXRvci5jcHA6IFJlbW92ZSByZWZlcmVuY2VzIHRvIFRleHRJdGVyYXRvckVuZHNB
dEVkaXRpbmdCb3VuZGFyeSwgYWRkCisgICAgICAgIGFsdGVybmF0aXZlIGZpeCBmb3IgdGhlIHBy
b2JsZW0gd2hpY2ggaXQgc29sdmVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpU
ZXh0SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJ
dGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKTogQ2FsbCBleGl0
Tm9kZSgpIHVudGlsIGFsbCBjb250YWluZXJzCisgICAgICAgIGhhdmUgYmVlbiBleGl0ZWQsIHJh
dGhlciB0aGFuIHN0b3BwaW5nIGFmdGVyIHRoZSBmaXJzdC4gIFRoaXMgZml4ZXMgdGhlIHByb2Js
ZW0gd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgXG4gY2hhcmFjdGVycyB3ZXJlIGJlaW5nIGVtaXR0
ZWQgZnJvbSB0aGUgaXRlcmF0b3IgaW4gY2FzZXMgd2hlcmUgdGhlcmUgc2hvdWxkIG9ubHkKKyAg
ICAgICAgaGF2ZSBiZWVuIG9uZSwgc3VjaCBhcyBuZXN0ZWQgZGl2cy4KKyAgICAgICAgKiBlZGl0
aW5nL1RleHRJdGVyYXRvci5oOiBSZW1vdmUgUmVtb3ZlVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGlu
Z0JvdW5kYXJ5LgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpyaWdodG1vc3RFcXVpdmFsZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnByZXZp
b3VzQm91bmRhcnkpOiBVc2UgdGhlIHJpZ2h0bW9zdCBlcXVpdmFsZW50IHBvc2l0aW9uIHdoZW4g
cmV0dXJuaW5nIHRoZQorICAgICAgICBlbmRQb3NpdGlvbiBvZiB0aGUgcmFuZ2UuCisKIDIwMTEt
MDEtMTcgIE5hb2tpIFRha2FubyAgPHRha2Fuby5uYW9raUBnbWFpbC5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCkBAIC0yNjI5LDcgKzI2NTksNiBAQAogCiAgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKIAotPj4+Pj4+PiAucjc1
NzQwCiAyMDExLTAxLTEzICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCmluZGV4IGJlYTc0ZDk2MTIwZDFhMzhmZDY4ODRhNjIyNzFmY2NhZWVhNmRjZTIuLjUyNTMx
YTU4ZTllZDZkNWFiZDVlNDZjZmIwYzJjZjdlYjlhMzk3NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKQEAgLTIwODgsNyArMjA4OCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxp
bmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAg
ICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICB0ZXh0Q2hlY2tpbmdP
cHRpb25zIHw9IE1hcmtHcmFtbWFyOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdv
cmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZP
bkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7
CisgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbih3
b3JkU3RhcnQsIGVuZE9mV29yZCh3b3JkU3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwog
ICAgIGlmICh0ZXh0Q2hlY2tpbmdPcHRpb25zICYgTWFya0dyYW1tYXIpIHsKICAgICAgICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3RlZFNlbnRlbmNlID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9m
U2VudGVuY2Uod29yZFN0YXJ0KSwgZW5kT2ZTZW50ZW5jZSh3b3JkU3RhcnQpKTsKICAgICAgICAg
bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRp
b25zLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHNlbGVjdGVkU2Vu
dGVuY2UudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5jcHAKaW5kZXggN2U0MTQyMGRkZjRjNjVmYjU4ZTJiYTQ4ZGI1MGI2NDdlZjdh
OGM5ZC4uYWIwZTEzZmJmMTJmODQwZmRiOTExMWY5ODRhNmYzNzMxODg3NGUwZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMjg5LDkgKzI4OSw2IEBAIFRleHRJ
dGVyYXRvcjo6VGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLCBUZXh0SXRlcmF0b3JCZWhhdmlv
ciBiZWhhdmlvcikKICAgICAsIG1faGFuZGxlZEZpcnN0TGV0dGVyKGZhbHNlKQogICAgICwgbV9p
Z25vcmVzU3R5bGVWaXNpYmlsaXR5KGJlaGF2aW9yICYgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxl
VmlzaWJpbGl0eSkKIHsKLSAgICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgVGV4dEl0ZXJhdG9y
RW5kc0F0RWRpdGluZ0JvdW5kYXJ5IGh0dHA6Ly93ZWJraXQub3JnL2IvNDM2MDkKLSAgICBBU1NF
UlQoYmVoYXZpb3IgIT0gVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5KTsKLQogICAg
IGlmICghcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDUxLDcgKzEwNDgsNyBAQCBTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9y
KGNvbnN0IFJhbmdlKiByLAogICAgICwgbV9ub2RlKDApCiAgICAgLCBtX3Bvc2l0aW9uTm9kZSgw
KQogewotICAgIEFTU0VSVChtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlv
ciB8fCBtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7Cisg
ICAgQVNTRVJUKG1fYmVoYXZpb3IgPT0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKIAog
ICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwpAQCAtMTA3Niw3ICsxMDczLDcgQEAgU2ltcGxp
ZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRv
cihjb25zdCBSYW5nZSogciwKICAgICAgICAgfQogICAgIH0KIAotICAgIHNldEN1cnJlbnROb2Rl
KGVuZE5vZGUpOworICAgIG1fbm9kZSA9IGVuZE5vZGU7CiAgICAgc2V0VXBGdWxseUNsaXBwZWRT
dGFjayhtX2Z1bGx5Q2xpcHBlZFN0YWNrLCBtX25vZGUpOyAgICAKICAgICBtX29mZnNldCA9IGVu
ZE9mZnNldDsKICAgICBtX2hhbmRsZWROb2RlID0gZmFsc2U7CkBAIC0xMTI4LDM3ICsxMTI1LDQx
IEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiAgICAg
ICAgIGlmICghbmV4dCkgewogICAgICAgICAgICAgLy8gRXhpdCBlbXB0eSBjb250YWluZXJzIGFz
IHdlIHBhc3Mgb3ZlciB0aGVtIG9yIGNvbnRhaW5lcnMKICAgICAgICAgICAgIC8vIHdoZXJlIFtj
b250YWluZXIsIDBdIGlzIHdoZXJlIHdlIHN0YXJ0ZWQgaXRlcmF0aW5nLgotICAgICAgICAgICAg
aWYgKCFtX2hhbmRsZWROb2RlICYmCi0gICAgICAgICAgICAgICAgY2FuSGF2ZUNoaWxkcmVuRm9y
RWRpdGluZyhtX25vZGUpICYmIAotICAgICAgICAgICAgICAgIG1fbm9kZS0+cGFyZW50Tm9kZSgp
ICYmIAotICAgICAgICAgICAgICAgICghbV9ub2RlLT5sYXN0Q2hpbGQoKSB8fCAobV9ub2RlID09
IG1fZW5kTm9kZSAmJiBtX2VuZE9mZnNldCA9PSAwKSkpIHsKKyAgICAgICAgICAgIGlmICghbV9o
YW5kbGVkTm9kZQorICAgICAgICAgICAgICAgICAgICAmJiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0
aW5nKG1fbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9ub2RlLT5wYXJlbnROb2RlKCkK
KyAgICAgICAgICAgICAgICAgICAgJiYgKCFtX25vZGUtPmxhc3RDaGlsZCgpIHx8IChtX25vZGUg
PT0gbV9lbmROb2RlICYmIG1fZW5kT2Zmc2V0ID09IDApKSkgewogICAgICAgICAgICAgICAgIGV4
aXROb2RlKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fcG9zaXRpb25Ob2RlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIG1faGFuZGxlZE5vZGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBt
X2hhbmRsZWRDaGlsZHJlbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICAvLyBFeGl0IGFsbCBvdGhlciBjb250YWluZXJzLgogICAgICAg
ICAgICAgd2hpbGUgKCFtX25vZGUtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFzZXRDdXJyZW50Tm9kZShtX25vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkpCisgICAg
ICAgICAgICAgICAgTm9kZSogcGFyZW50ID0gbV9ub2RlLT5wYXJlbnRPckhvc3ROb2RlKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIG1fbm9kZSA9IHBhcmVudDsKICAgICAgICAgICAgICAgICBtX2Z1bGx5
Q2xpcHBlZFN0YWNrLnBvcCgpOwogICAgICAgICAgICAgICAgIGV4aXROb2RlKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fcG9zaXRpb25Ob2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faGFu
ZGxlZE5vZGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtX2hhbmRsZWRDaGlsZHJlbiA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9wb3NpdGlvbk5vZGUpIHsKKyAgICAgICAg
ICAgICAgICBtX2hhbmRsZWROb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2hhbmRsZWRD
aGlsZHJlbiA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBuZXh0ID0gbV9ub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAgICAg
ICAgIG1fZnVsbHlDbGlwcGVkU3RhY2sucG9wKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGlmIChtX25vZGUgJiYgc2V0Q3VycmVudE5vZGUobmV4dCkpCisgICAgICAgIGlmIChuZXh0
KSB7CisgICAgICAgICAgICBtX25vZGUgPSBuZXh0OwogICAgICAgICAgICAgcHVzaEZ1bGx5Q2xp
cHBlZFN0YXRlKG1fZnVsbHlDbGlwcGVkU3RhY2ssIG1fbm9kZSk7Ci0gICAgICAgIGVsc2UKKyAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBjbGVhckN1cnJlbnROb2RlKCk7CiAKICAgICAgICAg
Ly8gRm9yIHRoZSBwdXJwb3NlIG9mIHdvcmQgYm91bmRhcnkgZGV0ZWN0aW9uLApAQCAtMTIzOSwy
MSArMTI0MCw2IEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6ZW1pdENo
YXJhY3RlcihVQ2hhciBjLCBOb2RlKiBub2RlLCBpbnQgc3RhCiAgICAgbV9sYXN0Q2hhcmFjdGVy
ID0gYzsKIH0KIAotYm9vbCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpjcm9zc2Vz
RWRpdGluZ0JvdW5kYXJ5KE5vZGUqIG5vZGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbm9kZSAm
JiBtX25vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgIT0gbm9kZS0+aXNDb250ZW50RWRpdGFibGUo
KTsKLX0KLQotYm9vbCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpzZXRDdXJyZW50
Tm9kZShOb2RlKiBub2RlKQotewotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFy
eSAmJiBjcm9zc2VzRWRpdGluZ0JvdW5kYXJ5KG5vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgbV9ub2RlID0gbm9kZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpjbGVhckN1cnJlbnROb2RlKCkKIHsKICAgICBtX25v
ZGUgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKaW5kZXggOGI2MWFmZTIx
MWI0ZDM3Yjc0ZjlmNGE1ODIzN2UxZDI4ZjJkY2ZiNC4uNTlmZTJhZDgxZGZmZjE5NjFjNjE4Mzll
OWNmZTkyNzI4MDczNWFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCkBA
IC00MSwxMCArNDEsOSBAQCBlbnVtIFRleHRJdGVyYXRvckJlaGF2aW9yIHsKICAgICBUZXh0SXRl
cmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyA9IDEgPDwgMCwK
ICAgICBUZXh0SXRlcmF0b3JFbnRlcnNUZXh0Q29udHJvbHMgPSAxIDw8IDEsCiAgICAgVGV4dEl0
ZXJhdG9yRW1pdHNUZXh0c1dpdGhvdXRUcmFuc2NvZGluZyA9IDEgPDwgMiwKLSAgICBUZXh0SXRl
cmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkgPSAxIDw8IDMsCi0gICAgVGV4dEl0ZXJhdG9ySWdu
b3Jlc1N0eWxlVmlzaWJpbGl0eSA9IDEgPDwgNAorICAgIFRleHRJdGVyYXRvcklnbm9yZXNTdHls
ZVZpc2liaWxpdHkgPSAxIDw8IDMKIH07Ci0gICAgCisKIC8vIEZJWE1FOiBDYW4ndCByZWFsbHkg
YW5zd2VyIHRoaXMgcXVlc3Rpb24gY29ycmVjdGx5IHdpdGhvdXQga25vd2luZyB0aGUgd2hpdGUt
c3BhY2UgbW9kZS4KIC8vIEZJWE1FOiBNb3ZlIHRoaXMgc29tZXdoZXJlIGVsc2UgaW4gdGhlIGVk
aXRpbmcgZGlyZWN0b3J5LiBJdCBkb2Vzbid0IGJlbG9uZyBoZXJlLgogaW5saW5lIGJvb2wgaXND
b2xsYXBzaWJsZVdoaXRlc3BhY2UoVUNoYXIgYykKQEAgLTIwNSw4ICsyMDQsNiBAQCBwcml2YXRl
OgogICAgIGJvb2wgaGFuZGxlUmVwbGFjZWRFbGVtZW50KCk7CiAgICAgYm9vbCBoYW5kbGVOb25U
ZXh0Tm9kZSgpOwogICAgIHZvaWQgZW1pdENoYXJhY3RlcihVQ2hhciwgTm9kZSosIGludCBzdGFy
dE9mZnNldCwgaW50IGVuZE9mZnNldCk7Ci0gICAgYm9vbCBjcm9zc2VzRWRpdGluZ0JvdW5kYXJ5
KE5vZGUqKSBjb25zdDsKLSAgICBib29sIHNldEN1cnJlbnROb2RlKE5vZGUqKTsKICAgICB2b2lk
IGNsZWFyQ3VycmVudE5vZGUoKTsKIAogICAgIFRleHRJdGVyYXRvckJlaGF2aW9yIG1fYmVoYXZp
b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAppbmRleCA3YmIxNTE1
NzM2ZmRjZjNlMWUzMDUwZTdiZjdiM2YzNDZiZDczNzJiLi43MzZlNjQwNGQ1OWRhZjg4ZDVkZjI1
M2U5OTM4MmIyZDg5ZWE0Yjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zp
c2libGVfdW5pdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0
cy5jcHAKQEAgLTQ5LDYgKzQ5LDE2IEBAIGVudW0gQm91bmRhcnlTZWFyY2hDb250ZXh0QXZhaWxh
YmlsaXR5IHsgRG9udEhhdmVNb3JlQ29udGV4dCwgTWF5SGF2ZU1vcmVDb250ZXh0CiAKIHR5cGVk
ZWYgdW5zaWduZWQgKCpCb3VuZGFyeVNlYXJjaEZ1bmN0aW9uKShjb25zdCBVQ2hhciosIHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQgb2Zmc2V0LCBCb3VuZGFyeVNlYXJjaENvbnRleHRBdmFpbGFi
aWxpdHksIGJvb2wmIG5lZWRNb3JlQ29udGV4dCk7CiAKK3N0YXRpYyBQb3NpdGlvbiByaWdodG1v
c3RFcXVpdmFsZW50KFBvc2l0aW9uIHBvc2l0aW9uKQoreworICAgIFBvc2l0aW9uIG5leHQgPSBw
b3NpdGlvbi5uZXh0KCk7CisgICAgd2hpbGUgKHBvc2l0aW9uLm5vZGUoKSAhPSBuZXh0Lm5vZGUo
KSkgeworICAgICAgICBwb3NpdGlvbiA9IG5leHQ7CisgICAgICAgIG5leHQgPSBwb3NpdGlvbi5u
ZXh0KCk7CisgICAgfQorICAgIHJldHVybiBwb3NpdGlvbjsKK30KKwogc3RhdGljIFZpc2libGVQ
b3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRh
cnlTZWFyY2hGdW5jdGlvbiBzZWFyY2hGdW5jdGlvbikKIHsKICAgICBQb3NpdGlvbiBwb3MgPSBj
LmRlZXBFcXVpdmFsZW50KCk7CkBAIC04OSw3ICs5OSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRp
b24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2Vh
cmNoCiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAg
ICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdldCgpLCBU
ZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkpOworICAgIFNpbXBsaWZpZWRCYWNrd2Fy
ZHNUZXh0SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UuZ2V0KCkpOwogICAgIHVuc2lnbmVkIG5leHQg
PSAwOwogICAgIGJvb2wgaW5UZXh0U2VjdXJpdHlNb2RlID0gc3RhcnQubm9kZSgpICYmIHN0YXJ0
Lm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCkt
PnRleHRTZWN1cml0eSgpICE9IFRTTk9ORTsKICAgICBib29sIG5lZWRNb3JlQ29udGV4dCA9IGZh
bHNlOwpAQCAtMTE1LDE4ICsxMjUsMTkgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91
c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gKICAgICAg
ICAgQVNTRVJUKCFuZWVkTW9yZUNvbnRleHQpOwogICAgIH0KIAotICAgIGlmIChpdC5hdEVuZCgp
ICYmIG5leHQgPT0gMCkgeworICAgIGlmIChpdC5hdEVuZCgpICYmICFuZXh0KQogICAgICAgICBw
b3MgPSBpdC5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgfSBlbHNlIGlmIChuZXh0ICE9
IDApIHsKKyAgICBlbHNlIGlmIChuZXh0KSB7CiAgICAgICAgIE5vZGUgKm5vZGUgPSBpdC5yYW5n
ZSgpLT5zdGFydENvbnRhaW5lcihlYyk7Ci0gICAgICAgIGlmICgobm9kZS0+aXNUZXh0Tm9kZSgp
ICYmIHN0YXRpY19jYXN0PGludD4obmV4dCkgPD0gbm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkp
IHx8IChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzQlIoKSAmJiAhbmV4
dCkpCisgICAgICAgIGlmICgobm9kZS0+aXNUZXh0Tm9kZSgpICYmIHN0YXRpY19jYXN0PGludD4o
bmV4dCkgPD0gbm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpIHx8IChub2RlLT5yZW5kZXJlcigp
ICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzQlIoKSAmJiAhbmV4dCkpIHsKICAgICAgICAgICAgIC8v
IFRoZSBuZXh0IHZhcmlhYmxlIGNvbnRhaW5zIGEgdXNhYmxlIGluZGV4IGludG8gYSB0ZXh0IG5v
ZGUKICAgICAgICAgICAgIHBvcyA9IFBvc2l0aW9uKG5vZGUsIG5leHQpOwotICAgICAgICBlbHNl
IHsKKyAgICAgICAgfSBlbHNlIHsgICAgCiAgICAgICAgICAgICAvLyBVc2UgdGhlIGNoYXJhY3Rl
ciBpdGVyYXRvciB0byB0cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlv
bi4KLSAgICAgICAgICAgIEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yIGNoYXJJdChzZWFyY2hS
YW5nZS5nZXQoKSwgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5KTsKKyAgICAgICAg
ICAgIEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yIGNoYXJJdChzZWFyY2hSYW5nZS5nZXQoKSk7
CiAgICAgICAgICAgICBjaGFySXQuYWR2YW5jZShzdHJpbmcuc2l6ZSgpIC0gc3VmZml4TGVuZ3Ro
IC0gbmV4dCk7Ci0gICAgICAgICAgICBwb3MgPSBjaGFySXQucmFuZ2UoKS0+ZW5kUG9zaXRpb24o
KTsKKyAgICAgICAgICAgIC8vIFRha2UgdGhlIHJpZ2h0bW9zdCBlcXVpdmFsZW50IHBvc2l0aW9u
IHNvIHRoYXQgdGhlIGNvcnJlY3QgY29udGFpbmluZyBlZGl0YWJsZSByZWdpb24gaXMgdXNlZCBp
ZiBhIGJvdW5kYXJ5IGlzIHJlYWNoZWQuCisgICAgICAgICAgICBwb3MgPSByaWdodG1vc3RFcXVp
dmFsZW50KGNoYXJJdC5yYW5nZSgpLT5lbmRQb3NpdGlvbigpKTsKICAgICAgICAgfQogICAgIH0K
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79238</attachid>
            <date>2011-01-17 19:24:19 -0800</date>
            <delta_ts>2011-01-18 16:02:00 -0800</delta_ts>
            <desc>Ugh. check-webkit-style.</desc>
            <filename>bug-51001-20110118142416.patch</filename>
            <type>text/plain</type>
            <size>14932</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3YWMxZTJlMmRkZDMyOGE5MzM3MmFmMTY0ZTliYzhmZWRkMDNkNTdmLi4yMDFjNDY5
NjY0ZGNjM2I1NTExYzk0YjEwMjU2ODVkMTliMDhjNzAxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDEtMTcgIEJlbmphbWluIEthbG1hbiAgPGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIG9yIHNl
bGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVtcHMgdG8gc3RhcnQgb2YgY29udGVudGVkaXRh
YmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9ZmFsc2Ugc3BhbiBpcyBlbmNvdW50ZXJlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEwMDEKKwor
ICAgICAgICBBZGQgcmVncmVzc2lvbiB0ZXN0LgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rp
b24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnkt
d29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMS0xNyAgRGFuIEJl
cm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJh
Y2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRp
dGFibGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjNGZiMDM3OWQzNzBiZTk4ZGE3MTFiZDJi
ZWI1ZTgwN2I0YzYwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Nl
bGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIGZvciBMVFIKK1BBU1MgZm9yIFJUTAorCitmb28g
YmFyIGJheiBxdXggcXV1eAor16nXlda816jXlCDXqdeV1rzXqNeUINep15XWvNeo15Qg16nXlda8
16jXlCDXqdeV1rzXqNeUCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlv
bi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sIGIvTGF5b3V0
VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24t
ZWRpdGFibGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTI0OTMxOWZiMDRlZTk4M2E3YjFlMWM4MGUzYmJh
MGJhOTI3NGEwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rp
b24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUuaHRtbApAQCAtMCww
ICsxLDQ3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxwcmUgaWQ9ImxvZyI+PC9wcmU+CisKKzxkaXYg
aWQ9Imx0clRleHRDb250YWluZXIiIGNvbnRlbnRlZGl0YWJsZT5mb28gYmFyIDxzcGFuIGNvbnRl
bnRlZGl0YWJsZT1mYWxzZT5iYXo8L3NwYW4+IHF1eCBxdXV4PC9kaXY+Cis8ZGl2IGlkPSJydGxU
ZXh0Q29udGFpbmVyIiBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiPiYjeDA1RTk7JiN4MDVENTsm
I3gwNUJDOyYjeDA1RTg7JiN4MDVENDsgJiN4MDVFOTsmI3gwNUQ1OyYjeDA1QkM7JiN4MDVFODsm
I3gwNUQ0OworPHNwYW4gY29udGVudGVkaXRhYmxlPWZhbHNlPiYjeDA1RTk7JiN4MDVENTsmI3gw
NUJDOyYjeDA1RTg7JiN4MDVENDs8L3NwYW4+CismI3gwNUU5OyYjeDA1RDU7JiN4MDVCQzsmI3gw
NUU4OyYjeDA1RDQ7ICYjeDA1RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1RTg7JiN4MDVENDs8L2Rp
dj4KKworPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhzKSB7CisgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJsb2ciKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzICsgIlxuIikp
OworfQorCitmdW5jdGlvbiBwbGFjZUN1cnNvckFmdGVyRmlyc3ROb25lZGl0YWJsZUNoaWxkKGNv
bnRhaW5lcikgeworICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRhaW5lci5jaGlsZE5vZGVzLmxl
bmd0aDsgaSsrKSB7CisgICAgdmFyIG5vZGUgPSBjb250YWluZXIuY2hpbGROb2Rlc1tpXTsKKyAg
ICBpZiAobm9kZS5pc0NvbnRlbnRFZGl0YWJsZSAhPT0gdW5kZWZpbmVkICYmICFub2RlLmlzQ29u
dGVudEVkaXRhYmxlKSB7CisgICAgICBnZXRTZWxlY3Rpb24oKS5zZXRQb3NpdGlvbihub2RlLm5l
eHRTaWJsaW5nLCAwKTsKKyAgICAgIHJldHVybiBub2RlOworICAgIH0KKyAgfQorICB0aHJvdyAi
Q291bGRuJ3QgZmluZCBub25lZGl0YWJsZSBjaGlsZCBvZiAiICsgY29udGFpbmVyLnRleHRDb250
ZW50OworfQorCitsdHJUZXh0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImx0
clRleHRDb250YWluZXIiKTsKK25vbmVkaXRhYmxlQ2hpbGQgPSBwbGFjZUN1cnNvckFmdGVyRmly
c3ROb25lZGl0YWJsZUNoaWxkKGx0clRleHRDb250YWluZXIpOworZ2V0U2VsZWN0aW9uKCkubW9k
aWZ5KCJleHRlbmQiLCAiYmFja3dhcmQiLCAid29yZCIpOworCitpZiAoZ2V0U2VsZWN0aW9uKCku
dG9TdHJpbmcoKSA9PT0gbm9uZWRpdGFibGVDaGlsZC50ZXh0Q29udGVudCkKKyAgbG9nKCJQQVNT
IGZvciBMVFIiKTsKK2Vsc2UKKyAgbG9nKCJGQUlMIGZvciBMVFIsIHNlbGVjdGlvbiBpcyBcIiIg
KyBnZXRTZWxlY3Rpb24oKSArICJcIiBidXQgc2hvdWxkIGJlIFwiIiArIG5vbmVkaXRhYmxlQ2hp
bGQudGV4dENvbnRlbnQgKyAiXCIiKTsKKworcnRsVGV4dENvbnRhaW5lciA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJydGxUZXh0Q29udGFpbmVyIik7Citub25lZGl0YWJsZUNoaWxkID0gcGxh
Y2VDdXJzb3JBZnRlckZpcnN0Tm9uZWRpdGFibGVDaGlsZChydGxUZXh0Q29udGFpbmVyKTsKK2dl
dFNlbGVjdGlvbigpLm1vZGlmeSgiZXh0ZW5kIiwgImJhY2t3YXJkIiwgIndvcmQiKTsKKworaWYg
KGdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IG5vbmVkaXRhYmxlQ2hpbGQudGV4dENvbnRl
bnQpCisgIGxvZygiUEFTUyBmb3IgUlRMIik7CitlbHNlCisgIGxvZygiRkFJTCBmb3IgUlRMLCBz
ZWxlY3Rpb24gaXMgXCIiICsgZ2V0U2VsZWN0aW9uKCkgKyAiXCIgYnV0IHNob3VsZCBiZSBcIiIg
KyBub25lZGl0YWJsZUNoaWxkLnRleHRDb250ZW50ICsgIlwiIik7CisKK2xvZygiIik7CisKK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzMwMjkwNWQ3N2U5YTU3NmQw
NTFiZmYxMDE4MThmYjhkYzkwZGUxYi4uYWViZmIyZDFlNmYwY2UzZDkyNzNhNDY1YTIzNjYxOGVj
NTMxZWFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDExLTAxLTE3ICBCZW5qYW1p
biBLYWxtYW4gIDxrYWxtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmluZyBvciBzZWxlY3RpbmcgYmFja3dhcmRzIGJ5
IHdvcmRzIGp1bXBzIHRvIHN0YXJ0IG9mIGNvbnRlbnRlZGl0YWJsZSByZWdpb24gaWYgY29udGVu
dGVkaXRhYmxlPWZhbHNlIHNwYW4gaXMgZW5jb3VudGVyZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxMDAxCisKKyAgICAgICAgVGVzdDogZWRpdGlu
Zy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUuaHRt
bAorCisgICAgICAgIFJldmVydCBzb21lIHByZXZpb3VzIGNoYW5nZXMgKHRoZSBUZXh0SXRlcmF0
b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkgdGV4dCBpdGVyYXRpb24KKyAgICAgICAgYmVoYXZpb3Vy
KSB3aGljaCBjYXVzZWQgdGhpcyBidWcgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgYWRkIGFsdGVy
bmF0aXZlIGZpeCBmb3IgdGhlIHByb2JsZW0KKyAgICAgICAgdGhhdCBUZXh0SXRlcmF0aW9uRW5k
c0F0RWRpdGluZ0JvdW5kYXJ5IHNvbHZlZC4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5n
VG9Xb3JkKTogVXNlIHdvcmRTdGFydCBhcmd1bWVudCBhcy1pcywgZG9uJ3QKKyAgICAgICAgcmVk
dW5kYW50bHkgY2FsbCBzdGFydE9mV29yZCBvbiBpdCBhZ2Fpbi4KKyAgICAgICAgKiBlZGl0aW5n
L1RleHRJdGVyYXRvci5jcHA6IFJlbW92ZSByZWZlcmVuY2VzIHRvIFRleHRJdGVyYXRvckVuZHNB
dEVkaXRpbmdCb3VuZGFyeSwgYWRkCisgICAgICAgIGFsdGVybmF0aXZlIGZpeCBmb3IgdGhlIHBy
b2JsZW0gd2hpY2ggaXQgc29sdmVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpU
ZXh0SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJ
dGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKTogQ2FsbCBleGl0
Tm9kZSgpIHVudGlsIGFsbCBjb250YWluZXJzCisgICAgICAgIGhhdmUgYmVlbiBleGl0ZWQsIHJh
dGhlciB0aGFuIHN0b3BwaW5nIGFmdGVyIHRoZSBmaXJzdC4gIFRoaXMgZml4ZXMgdGhlIHByb2Js
ZW0gd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgXG4gY2hhcmFjdGVycyB3ZXJlIGJlaW5nIGVtaXR0
ZWQgZnJvbSB0aGUgaXRlcmF0b3IgaW4gY2FzZXMgd2hlcmUgdGhlcmUgc2hvdWxkIG9ubHkKKyAg
ICAgICAgaGF2ZSBiZWVuIG9uZSwgc3VjaCBhcyBuZXN0ZWQgZGl2cy4KKyAgICAgICAgKiBlZGl0
aW5nL1RleHRJdGVyYXRvci5oOiBSZW1vdmUgUmVtb3ZlVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGlu
Z0JvdW5kYXJ5LgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpyaWdodG1vc3RFcXVpdmFsZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnByZXZp
b3VzQm91bmRhcnkpOiBVc2UgdGhlIHJpZ2h0bW9zdCBlcXVpdmFsZW50IHBvc2l0aW9uIHdoZW4g
cmV0dXJuaW5nIHRoZQorICAgICAgICBlbmRQb3NpdGlvbiBvZiB0aGUgcmFuZ2UuCisKIDIwMTEt
MDEtMTcgIE5hb2tpIFRha2FubyAgPHRha2Fuby5uYW9raUBnbWFpbC5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCkBAIC0yNjI5LDcgKzI2NTksNiBAQAogCiAgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKIAotPj4+Pj4+PiAucjc1
NzQwCiAyMDExLTAxLTEzICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCmluZGV4IGJlYTc0ZDk2MTIwZDFhMzhmZDY4ODRhNjIyNzFmY2NhZWVhNmRjZTIuLjUyNTMx
YTU4ZTllZDZkNWFiZDVlNDZjZmIwYzJjZjdlYjlhMzk3NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKQEAgLTIwODgsNyArMjA4OCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxp
bmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAg
ICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICB0ZXh0Q2hlY2tpbmdP
cHRpb25zIHw9IE1hcmtHcmFtbWFyOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdv
cmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZP
bkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7
CisgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbih3
b3JkU3RhcnQsIGVuZE9mV29yZCh3b3JkU3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwog
ICAgIGlmICh0ZXh0Q2hlY2tpbmdPcHRpb25zICYgTWFya0dyYW1tYXIpIHsKICAgICAgICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3RlZFNlbnRlbmNlID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9m
U2VudGVuY2Uod29yZFN0YXJ0KSwgZW5kT2ZTZW50ZW5jZSh3b3JkU3RhcnQpKTsKICAgICAgICAg
bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRp
b25zLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHNlbGVjdGVkU2Vu
dGVuY2UudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5jcHAKaW5kZXggN2U0MTQyMGRkZjRjNjVmYjU4ZTJiYTQ4ZGI1MGI2NDdlZjdh
OGM5ZC4uMjIwMDY1MmYxMWFiZjk5OWVjYTA3YjNkYzRkMjRmYTBhNWI0NjYxYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMjg5LDkgKzI4OSw2IEBAIFRleHRJ
dGVyYXRvcjo6VGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLCBUZXh0SXRlcmF0b3JCZWhhdmlv
ciBiZWhhdmlvcikKICAgICAsIG1faGFuZGxlZEZpcnN0TGV0dGVyKGZhbHNlKQogICAgICwgbV9p
Z25vcmVzU3R5bGVWaXNpYmlsaXR5KGJlaGF2aW9yICYgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxl
VmlzaWJpbGl0eSkKIHsKLSAgICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgVGV4dEl0ZXJhdG9y
RW5kc0F0RWRpdGluZ0JvdW5kYXJ5IGh0dHA6Ly93ZWJraXQub3JnL2IvNDM2MDkKLSAgICBBU1NF
UlQoYmVoYXZpb3IgIT0gVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5KTsKLQogICAg
IGlmICghcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDUxLDcgKzEwNDgsNyBAQCBTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9y
KGNvbnN0IFJhbmdlKiByLAogICAgICwgbV9ub2RlKDApCiAgICAgLCBtX3Bvc2l0aW9uTm9kZSgw
KQogewotICAgIEFTU0VSVChtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlv
ciB8fCBtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7Cisg
ICAgQVNTRVJUKG1fYmVoYXZpb3IgPT0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKIAog
ICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwpAQCAtMTA3Niw3ICsxMDczLDcgQEAgU2ltcGxp
ZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRv
cihjb25zdCBSYW5nZSogciwKICAgICAgICAgfQogICAgIH0KIAotICAgIHNldEN1cnJlbnROb2Rl
KGVuZE5vZGUpOworICAgIG1fbm9kZSA9IGVuZE5vZGU7CiAgICAgc2V0VXBGdWxseUNsaXBwZWRT
dGFjayhtX2Z1bGx5Q2xpcHBlZFN0YWNrLCBtX25vZGUpOyAgICAKICAgICBtX29mZnNldCA9IGVu
ZE9mZnNldDsKICAgICBtX2hhbmRsZWROb2RlID0gZmFsc2U7CkBAIC0xMTI4LDM3ICsxMTI1LDQx
IEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiAgICAg
ICAgIGlmICghbmV4dCkgewogICAgICAgICAgICAgLy8gRXhpdCBlbXB0eSBjb250YWluZXJzIGFz
IHdlIHBhc3Mgb3ZlciB0aGVtIG9yIGNvbnRhaW5lcnMKICAgICAgICAgICAgIC8vIHdoZXJlIFtj
b250YWluZXIsIDBdIGlzIHdoZXJlIHdlIHN0YXJ0ZWQgaXRlcmF0aW5nLgotICAgICAgICAgICAg
aWYgKCFtX2hhbmRsZWROb2RlICYmCi0gICAgICAgICAgICAgICAgY2FuSGF2ZUNoaWxkcmVuRm9y
RWRpdGluZyhtX25vZGUpICYmIAotICAgICAgICAgICAgICAgIG1fbm9kZS0+cGFyZW50Tm9kZSgp
ICYmIAotICAgICAgICAgICAgICAgICghbV9ub2RlLT5sYXN0Q2hpbGQoKSB8fCAobV9ub2RlID09
IG1fZW5kTm9kZSAmJiBtX2VuZE9mZnNldCA9PSAwKSkpIHsKKyAgICAgICAgICAgIGlmICghbV9o
YW5kbGVkTm9kZQorICAgICAgICAgICAgICAgICAgICAmJiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0
aW5nKG1fbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9ub2RlLT5wYXJlbnROb2RlKCkK
KyAgICAgICAgICAgICAgICAgICAgJiYgKCFtX25vZGUtPmxhc3RDaGlsZCgpIHx8IChtX25vZGUg
PT0gbV9lbmROb2RlICYmICFtX2VuZE9mZnNldCkpKSB7CiAgICAgICAgICAgICAgICAgZXhpdE5v
ZGUoKTsKICAgICAgICAgICAgICAgICBpZiAobV9wb3NpdGlvbk5vZGUpIHsKICAgICAgICAgICAg
ICAgICAgICAgbV9oYW5kbGVkTm9kZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIG1faGFu
ZGxlZENoaWxkcmVuID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CisKICAgICAgICAgICAgIC8vIEV4aXQgYWxsIG90aGVyIGNvbnRhaW5lcnMuCiAgICAgICAgICAg
ICB3aGlsZSAoIW1fbm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIXNldEN1cnJlbnROb2RlKG1fbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSkKKyAgICAgICAg
ICAgICAgICBOb2RlKiBwYXJlbnQgPSBtX25vZGUtPnBhcmVudE9ySG9zdE5vZGUoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgbV9ub2RlID0gcGFyZW50OwogICAgICAgICAgICAgICAgIG1fZnVsbHlDbGlw
cGVkU3RhY2sucG9wKCk7CiAgICAgICAgICAgICAgICAgZXhpdE5vZGUoKTsKLSAgICAgICAgICAg
ICAgICBpZiAobV9wb3NpdGlvbk5vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9oYW5kbGVk
Tm9kZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1faGFuZGxlZENoaWxkcmVuID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX3Bvc2l0aW9uTm9kZSkgeworICAgICAgICAgICAg
ICAgIG1faGFuZGxlZE5vZGUgPSB0cnVlOworICAgICAgICAgICAgICAgIG1faGFuZGxlZENoaWxk
cmVuID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIG5leHQgPSBtX25vZGUtPnByZXZpb3VzU2libGluZygpOwogICAgICAgICAgICAg
bV9mdWxseUNsaXBwZWRTdGFjay5wb3AoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
aWYgKG1fbm9kZSAmJiBzZXRDdXJyZW50Tm9kZShuZXh0KSkKKyAgICAgICAgaWYgKG5leHQpIHsK
KyAgICAgICAgICAgIG1fbm9kZSA9IG5leHQ7CiAgICAgICAgICAgICBwdXNoRnVsbHlDbGlwcGVk
U3RhdGUobV9mdWxseUNsaXBwZWRTdGFjaywgbV9ub2RlKTsKLSAgICAgICAgZWxzZQorICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgIGNsZWFyQ3VycmVudE5vZGUoKTsKIAogICAgICAgICAvLyBG
b3IgdGhlIHB1cnBvc2Ugb2Ygd29yZCBib3VuZGFyeSBkZXRlY3Rpb24sCkBAIC0xMjM5LDIxICsx
MjQwLDYgQEAgdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjplbWl0Q2hhcmFj
dGVyKFVDaGFyIGMsIE5vZGUqIG5vZGUsIGludCBzdGEKICAgICBtX2xhc3RDaGFyYWN0ZXIgPSBj
OwogfQogCi1ib29sIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmNyb3NzZXNFZGl0
aW5nQm91bmRhcnkoTm9kZSogbm9kZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ub2RlICYmIG1f
bm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAhPSBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwot
fQotCi1ib29sIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OnNldEN1cnJlbnROb2Rl
KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKG1fYmVoYXZpb3IgPT0gVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5ICYm
IGNyb3NzZXNFZGl0aW5nQm91bmRhcnkobm9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBtX25vZGUgPSBub2RlOwotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIFNpbXBsaWZpZWRC
YWNrd2FyZHNUZXh0SXRlcmF0b3I6OmNsZWFyQ3VycmVudE5vZGUoKQogewogICAgIG1fbm9kZSA9
IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAppbmRleCA4YjYxYWZlMjExYjRk
MzdiNzRmOWY0YTU4MjM3ZTFkMjhmMmRjZmI0Li41OWZlMmFkODFkZmZmMTk2MWM2MTgzOWU5Y2Zl
OTI3MjgwNzM1YWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVy
YXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKQEAgLTQx
LDEwICs0MSw5IEBAIGVudW0gVGV4dEl0ZXJhdG9yQmVoYXZpb3IgewogICAgIFRleHRJdGVyYXRv
ckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zID0gMSA8PCAwLAogICAg
IFRleHRJdGVyYXRvckVudGVyc1RleHRDb250cm9scyA9IDEgPDwgMSwKICAgICBUZXh0SXRlcmF0
b3JFbWl0c1RleHRzV2l0aG91dFRyYW5zY29kaW5nID0gMSA8PCAyLAotICAgIFRleHRJdGVyYXRv
ckVuZHNBdEVkaXRpbmdCb3VuZGFyeSA9IDEgPDwgMywKLSAgICBUZXh0SXRlcmF0b3JJZ25vcmVz
U3R5bGVWaXNpYmlsaXR5ID0gMSA8PCA0CisgICAgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlz
aWJpbGl0eSA9IDEgPDwgMwogfTsKLSAgICAKKwogLy8gRklYTUU6IENhbid0IHJlYWxseSBhbnN3
ZXIgdGhpcyBxdWVzdGlvbiBjb3JyZWN0bHkgd2l0aG91dCBrbm93aW5nIHRoZSB3aGl0ZS1zcGFj
ZSBtb2RlLgogLy8gRklYTUU6IE1vdmUgdGhpcyBzb21ld2hlcmUgZWxzZSBpbiB0aGUgZWRpdGlu
ZyBkaXJlY3RvcnkuIEl0IGRvZXNuJ3QgYmVsb25nIGhlcmUuCiBpbmxpbmUgYm9vbCBpc0NvbGxh
cHNpYmxlV2hpdGVzcGFjZShVQ2hhciBjKQpAQCAtMjA1LDggKzIwNCw2IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBoYW5kbGVSZXBsYWNlZEVsZW1lbnQoKTsKICAgICBib29sIGhhbmRsZU5vblRleHRO
b2RlKCk7CiAgICAgdm9pZCBlbWl0Q2hhcmFjdGVyKFVDaGFyLCBOb2RlKiwgaW50IHN0YXJ0T2Zm
c2V0LCBpbnQgZW5kT2Zmc2V0KTsKLSAgICBib29sIGNyb3NzZXNFZGl0aW5nQm91bmRhcnkoTm9k
ZSopIGNvbnN0OwotICAgIGJvb2wgc2V0Q3VycmVudE5vZGUoTm9kZSopOwogICAgIHZvaWQgY2xl
YXJDdXJyZW50Tm9kZSgpOwogCiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgbV9iZWhhdmlvcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCmluZGV4IDdiYjE1MTU3MzZm
ZGNmM2UxZTMwNTBlN2JmN2IzZjM0NmJkNzM3MmIuLjczNmU2NDA0ZDU5ZGFmODhkNWRmMjUzZTk5
MzgyYjJkODllYTRiOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJs
ZV91bml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNw
cApAQCAtNDksNiArNDksMTYgQEAgZW51bSBCb3VuZGFyeVNlYXJjaENvbnRleHRBdmFpbGFiaWxp
dHkgeyBEb250SGF2ZU1vcmVDb250ZXh0LCBNYXlIYXZlTW9yZUNvbnRleHQKIAogdHlwZWRlZiB1
bnNpZ25lZCAoKkJvdW5kYXJ5U2VhcmNoRnVuY3Rpb24pKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQg
bGVuZ3RoLCB1bnNpZ25lZCBvZmZzZXQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0
eSwgYm9vbCYgbmVlZE1vcmVDb250ZXh0KTsKIAorc3RhdGljIFBvc2l0aW9uIHJpZ2h0bW9zdEVx
dWl2YWxlbnQoUG9zaXRpb24gcG9zaXRpb24pCit7CisgICAgUG9zaXRpb24gbmV4dCA9IHBvc2l0
aW9uLm5leHQoKTsKKyAgICB3aGlsZSAocG9zaXRpb24ubm9kZSgpICE9IG5leHQubm9kZSgpKSB7
CisgICAgICAgIHBvc2l0aW9uID0gbmV4dDsKKyAgICAgICAgbmV4dCA9IHBvc2l0aW9uLm5leHQo
KTsKKyAgICB9CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCiBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIHByZXZpb3VzQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNl
YXJjaEZ1bmN0aW9uIHNlYXJjaEZ1bmN0aW9uKQogewogICAgIFBvc2l0aW9uIHBvcyA9IGMuZGVl
cEVxdWl2YWxlbnQoKTsKQEAgLTg5LDcgKzk5LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBw
cmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gK
ICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAotICAgIFNp
bXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UuZ2V0KCksIFRleHRJ
dGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAgU2ltcGxpZmllZEJhY2t3YXJkc1Rl
eHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSk7CiAgICAgdW5zaWduZWQgbmV4dCA9IDA7
CiAgICAgYm9vbCBpblRleHRTZWN1cml0eU1vZGUgPSBzdGFydC5ub2RlKCkgJiYgc3RhcnQubm9k
ZSgpLT5yZW5kZXJlcigpICYmIHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dGV4
dFNlY3VyaXR5KCkgIT0gVFNOT05FOwogICAgIGJvb2wgbmVlZE1vcmVDb250ZXh0ID0gZmFsc2U7
CkBAIC0xMTUsMTggKzEyNSwxOSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91
bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJjaAogICAgICAgICBB
U1NFUlQoIW5lZWRNb3JlQ29udGV4dCk7CiAgICAgfQogCi0gICAgaWYgKGl0LmF0RW5kKCkgJiYg
bmV4dCA9PSAwKSB7CisgICAgaWYgKGl0LmF0RW5kKCkgJiYgIW5leHQpCiAgICAgICAgIHBvcyA9
IGl0LnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKTsKLSAgICB9IGVsc2UgaWYgKG5leHQgIT0gMCkg
eworICAgIGVsc2UgaWYgKG5leHQpIHsKICAgICAgICAgTm9kZSAqbm9kZSA9IGl0LnJhbmdlKCkt
PnN0YXJ0Q29udGFpbmVyKGVjKTsKLSAgICAgICAgaWYgKChub2RlLT5pc1RleHROb2RlKCkgJiYg
c3RhdGljX2Nhc3Q8aW50PihuZXh0KSA8PSBub2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgfHwg
KG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNCUigpICYmICFuZXh0KSkK
KyAgICAgICAgaWYgKChub2RlLT5pc1RleHROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8aW50PihuZXh0
KSA8PSBub2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgfHwgKG5vZGUtPnJlbmRlcmVyKCkgJiYg
bm9kZS0+cmVuZGVyZXIoKS0+aXNCUigpICYmICFuZXh0KSkgewogICAgICAgICAgICAgLy8gVGhl
IG5leHQgdmFyaWFibGUgY29udGFpbnMgYSB1c2FibGUgaW5kZXggaW50byBhIHRleHQgbm9kZQog
ICAgICAgICAgICAgcG9zID0gUG9zaXRpb24obm9kZSwgbmV4dCk7Ci0gICAgICAgIGVsc2Ugewor
ICAgICAgICB9IGVsc2UgeyAgICAKICAgICAgICAgICAgIC8vIFVzZSB0aGUgY2hhcmFjdGVyIGl0
ZXJhdG9yIHRvIHRyYW5zbGF0ZSB0aGUgbmV4dCB2YWx1ZSBpbnRvIGEgRE9NIHBvc2l0aW9uLgot
ICAgICAgICAgICAgQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KHNlYXJjaFJhbmdl
LmdldCgpLCBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkpOworICAgICAgICAgICAg
QmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KHNlYXJjaFJhbmdlLmdldCgpKTsKICAg
ICAgICAgICAgIGNoYXJJdC5hZHZhbmNlKHN0cmluZy5zaXplKCkgLSBzdWZmaXhMZW5ndGggLSBu
ZXh0KTsKLSAgICAgICAgICAgIHBvcyA9IGNoYXJJdC5yYW5nZSgpLT5lbmRQb3NpdGlvbigpOwor
ICAgICAgICAgICAgLy8gVGFrZSB0aGUgcmlnaHRtb3N0IGVxdWl2YWxlbnQgcG9zaXRpb24gc28g
dGhhdCB0aGUgY29ycmVjdCBjb250YWluaW5nIGVkaXRhYmxlIHJlZ2lvbiBpcyB1c2VkIGlmIGEg
Ym91bmRhcnkgaXMgcmVhY2hlZC4KKyAgICAgICAgICAgIHBvcyA9IHJpZ2h0bW9zdEVxdWl2YWxl
bnQoY2hhckl0LnJhbmdlKCktPmVuZFBvc2l0aW9uKCkpOwogICAgICAgICB9CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79349</attachid>
            <date>2011-01-18 16:02:08 -0800</date>
            <delta_ts>2011-01-20 22:50:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51001-20110119110205.patch</filename>
            <type>text/plain</type>
            <size>13231</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2NGY3NTFlODAzZjI5NGNlYzY3YmMwMDQ0ZWJkZGFiMjlhYTEwOTVmLi5iZThmMGMw
NjY4YmI2ZTdhNTg4Mzc0ZWM1YTE5NGMwZDg1OGUyYjk4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDEtMTggIEJlbmphbWluIEthbG1hbiAgPGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIG9yIHNl
bGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVtcHMgdG8gc3RhcnQgb2YgY29udGVudGVkaXRh
YmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9ZmFsc2Ugc3BhbiBpcyBlbmNvdW50ZXJlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEwMDEKKwor
ICAgICAgICBBZGQgcmVncmVzc2lvbiB0ZXN0LgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rp
b24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnkt
d29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMS0xOCAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5z
dGVpbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1i
YWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVk
aXRhYmxlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzRmYjAzNzlkMzcwYmU5OGRhNzExYmQy
YmViNWU4MDdiNGM2MGUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyBmb3IgTFRSCitQQVNTIGZvciBSVEwKKworZm9v
IGJhciBiYXogcXV4IHF1dXgKK9ep15XWvNeo15Qg16nXlda816jXlCDXqdeV1rzXqNeUINep15XW
vNeo15Qg16nXlda816jXlApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rp
b24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUuaHRtbCBiL0xheW91
dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9u
LWVkaXRhYmxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTkyNDkzMTlmYjA0ZWU5ODNhN2IxZTFjODBlM2Ji
YTBiYTkyNzRhMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0
aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0bWwKQEAgLTAs
MCArMSw0NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8cHJlIGlkPSJsb2ciPjwvcHJlPgorCis8ZGl2
IGlkPSJsdHJUZXh0Q29udGFpbmVyIiBjb250ZW50ZWRpdGFibGU+Zm9vIGJhciA8c3BhbiBjb250
ZW50ZWRpdGFibGU9ZmFsc2U+YmF6PC9zcGFuPiBxdXggcXV1eDwvZGl2PgorPGRpdiBpZD0icnRs
VGV4dENvbnRhaW5lciIgY29udGVudGVkaXRhYmxlIGRpcj0icnRsIj4mI3gwNUU5OyYjeDA1RDU7
JiN4MDVCQzsmI3gwNUU4OyYjeDA1RDQ7ICYjeDA1RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1RTg7
JiN4MDVENDsKKzxzcGFuIGNvbnRlbnRlZGl0YWJsZT1mYWxzZT4mI3gwNUU5OyYjeDA1RDU7JiN4
MDVCQzsmI3gwNUU4OyYjeDA1RDQ7PC9zcGFuPgorJiN4MDVFOTsmI3gwNUQ1OyYjeDA1QkM7JiN4
MDVFODsmI3gwNUQ0OyAmI3gwNUU5OyYjeDA1RDU7JiN4MDVCQzsmI3gwNUU4OyYjeDA1RDQ7PC9k
aXY+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cocykgeworICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgibG9nIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocyArICJcbiIp
KTsKK30KKworZnVuY3Rpb24gcGxhY2VDdXJzb3JBZnRlckZpcnN0Tm9uZWRpdGFibGVDaGlsZChj
b250YWluZXIpIHsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250YWluZXIuY2hpbGROb2Rlcy5s
ZW5ndGg7IGkrKykgeworICAgIHZhciBub2RlID0gY29udGFpbmVyLmNoaWxkTm9kZXNbaV07Cisg
ICAgaWYgKG5vZGUuaXNDb250ZW50RWRpdGFibGUgIT09IHVuZGVmaW5lZCAmJiAhbm9kZS5pc0Nv
bnRlbnRFZGl0YWJsZSkgeworICAgICAgZ2V0U2VsZWN0aW9uKCkuc2V0UG9zaXRpb24obm9kZS5u
ZXh0U2libGluZywgMCk7CisgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisgIH0KKyAgdGhyb3cg
IkNvdWxkbid0IGZpbmQgbm9uZWRpdGFibGUgY2hpbGQgb2YgIiArIGNvbnRhaW5lci50ZXh0Q29u
dGVudDsKK30KKworbHRyVGV4dENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJs
dHJUZXh0Q29udGFpbmVyIik7Citub25lZGl0YWJsZUNoaWxkID0gcGxhY2VDdXJzb3JBZnRlckZp
cnN0Tm9uZWRpdGFibGVDaGlsZChsdHJUZXh0Q29udGFpbmVyKTsKK2dldFNlbGVjdGlvbigpLm1v
ZGlmeSgiZXh0ZW5kIiwgImJhY2t3YXJkIiwgIndvcmQiKTsKKworaWYgKGdldFNlbGVjdGlvbigp
LnRvU3RyaW5nKCkgPT09IG5vbmVkaXRhYmxlQ2hpbGQudGV4dENvbnRlbnQpCisgIGxvZygiUEFT
UyBmb3IgTFRSIik7CitlbHNlCisgIGxvZygiRkFJTCBmb3IgTFRSLCBzZWxlY3Rpb24gaXMgXCIi
ICsgZ2V0U2VsZWN0aW9uKCkgKyAiXCIgYnV0IHNob3VsZCBiZSBcIiIgKyBub25lZGl0YWJsZUNo
aWxkLnRleHRDb250ZW50ICsgIlwiIik7CisKK3J0bFRleHRDb250YWluZXIgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicnRsVGV4dENvbnRhaW5lciIpOworbm9uZWRpdGFibGVDaGlsZCA9IHBs
YWNlQ3Vyc29yQWZ0ZXJGaXJzdE5vbmVkaXRhYmxlQ2hpbGQocnRsVGV4dENvbnRhaW5lcik7Citn
ZXRTZWxlY3Rpb24oKS5tb2RpZnkoImV4dGVuZCIsICJiYWNrd2FyZCIsICJ3b3JkIik7CisKK2lm
IChnZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBub25lZGl0YWJsZUNoaWxkLnRleHRDb250
ZW50KQorICBsb2coIlBBU1MgZm9yIFJUTCIpOworZWxzZQorICBsb2coIkZBSUwgZm9yIFJUTCwg
c2VsZWN0aW9uIGlzIFwiIiArIGdldFNlbGVjdGlvbigpICsgIlwiIGJ1dCBzaG91bGQgYmUgXCIi
ICsgbm9uZWRpdGFibGVDaGlsZC50ZXh0Q29udGVudCArICJcIiIpOworCitsb2coIiIpOworCitp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDgxNTk2OWRhMjExYWZiZmIy
ZTA3ZmRiNDNhMjA0NTgyZDRhYmY0MjIuLjdjZWI5NmVkZTBkODcyNmVhNzQxN2E2ZjdkMzEwMTIx
NTNiZTE3MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMS0wMS0xOCAgQmVuamFt
aW4gS2FsbWFuICA8a2FsbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zpbmcgb3Igc2VsZWN0aW5nIGJhY2t3YXJkcyBi
eSB3b3JkcyBqdW1wcyB0byBzdGFydCBvZiBjb250ZW50ZWRpdGFibGUgcmVnaW9uIGlmIGNvbnRl
bnRlZGl0YWJsZT1mYWxzZSBzcGFuIGlzIGVuY291bnRlcmVkCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTAwMQorCisgICAgICAgIFRlc3Q6IGVkaXRp
bmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0
bWwKKworICAgICAgICBSZXZlcnQgc29tZSBwcmV2aW91cyBjaGFuZ2VzICh0aGUgVGV4dEl0ZXJh
dG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5IHRleHQgaXRlcmF0aW9uCisgICAgICAgIGJlaGF2aW91
cikgd2hpY2ggY2F1c2VkIHRoaXMgYnVnIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIGFkZCBhbHRl
cm5hdGl2ZSBmaXggZm9yIHRoZSBwcm9ibGVtCisgICAgICAgIHRoYXQgVGV4dEl0ZXJhdGlvbkVu
ZHNBdEVkaXRpbmdCb3VuZGFyeSBzb2x2ZWQuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGlu
Z1RvV29yZCk6IFVzZSB3b3JkU3RhcnQgYXJndW1lbnQgYXMtaXMsIGRvbid0CisgICAgICAgIHJl
ZHVuZGFudGx5IGNhbGwgc3RhcnRPZldvcmQgb24gaXQgYWdhaW4uCisgICAgICAgICogZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuY3BwOiBSZW1vdmUgcmVmZXJlbmNlcyB0byBUZXh0SXRlcmF0b3JFbmRz
QXRFZGl0aW5nQm91bmRhcnksIGFkZAorICAgICAgICBhbHRlcm5hdGl2ZSBmaXggZm9yIHRoZSBw
cm9ibGVtIHdoaWNoIGl0IHNvbHZlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6
VGV4dEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0
SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSk6IENhbGwgZXhp
dE5vZGUoKSB1bnRpbCBhbGwgY29udGFpbmVycworICAgICAgICBoYXZlIGJlZW4gZXhpdGVkLCBy
YXRoZXIgdGhhbiBzdG9wcGluZyBhZnRlciB0aGUgZmlyc3QuICBUaGlzIGZpeGVzIHRoZSBwcm9i
bGVtIHdoZXJlCisgICAgICAgIG11bHRpcGxlIFxuIGNoYXJhY3RlcnMgd2VyZSBiZWluZyBlbWl0
dGVkIGZyb20gdGhlIGl0ZXJhdG9yIGluIGNhc2VzIHdoZXJlIHRoZXJlIHNob3VsZCBvbmx5Cisg
ICAgICAgIGhhdmUgYmVlbiBvbmUsIHN1Y2ggYXMgbmVzdGVkIGRpdnMuCisgICAgICAgICogZWRp
dGluZy9UZXh0SXRlcmF0b3IuaDogUmVtb3ZlIFJlbW92ZVRleHRJdGVyYXRvckVuZHNBdEVkaXRp
bmdCb3VuZGFyeS4KKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cmlnaHRtb3N0RXF1aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjpwcmV2
aW91c0JvdW5kYXJ5KTogVXNlIHRoZSByaWdodG1vc3QgZXF1aXZhbGVudCBwb3NpdGlvbiB3aGVu
IHJldHVybmluZyB0aGUKKyAgICAgICAgZW5kUG9zaXRpb24gb2YgdGhlIHJhbmdlLgorCiAyMDEx
LTAxLTE4ICBWaWN0b3JpYSBLaXJzdCAgPHZya0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4
IGJlYTc0ZDk2MTIwZDFhMzhmZDY4ODRhNjIyNzFmY2NhZWVhNmRjZTIuLjUyNTMxYTU4ZTllZDZk
NWFiZDVlNDZjZmIwYzJjZjdlYjlhMzk3NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
QEAgLTIwODgsNyArMjA4OCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJU
eXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAgICAgaWYgKGlz
R3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9
IE1hcmtHcmFtbWFyOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlz
aWJsZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5
KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CisgICAgVmlz
aWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbih3b3JkU3RhcnQs
IGVuZE9mV29yZCh3b3JkU3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwogICAgIGlmICh0
ZXh0Q2hlY2tpbmdPcHRpb25zICYgTWFya0dyYW1tYXIpIHsKICAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3RlZFNlbnRlbmNlID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VudGVuY2Uo
d29yZFN0YXJ0KSwgZW5kT2ZTZW50ZW5jZSh3b3JkU3RhcnQpKTsKICAgICAgICAgbWFya0FsbE1p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBhZGph
Y2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHNlbGVjdGVkU2VudGVuY2UudG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAKaW5kZXggYzI0YmNiMjQyNjE1ZTE0ZWE5YWU0ZjgwNGJlZjQxZjI1NGE2YTYxMS4uOTFj
Yzk0OTRmZTM1MjcyZmRiMDE2YTk3MGFiM2VmY2UwNDUxYmNjMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMjg5LDkgKzI4OSw2IEBAIFRleHRJdGVyYXRvcjo6
VGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlv
cikKICAgICAsIG1faGFuZGxlZEZpcnN0TGV0dGVyKGZhbHNlKQogICAgICwgbV9pZ25vcmVzU3R5
bGVWaXNpYmlsaXR5KGJlaGF2aW9yICYgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0
eSkKIHsKLSAgICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgVGV4dEl0ZXJhdG9yRW5kc0F0RWRp
dGluZ0JvdW5kYXJ5IGh0dHA6Ly93ZWJraXQub3JnL2IvNDM2MDkKLSAgICBBU1NFUlQoYmVoYXZp
b3IgIT0gVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5KTsKLQogICAgIGlmICghcikK
ICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDUxLDcgKzEwNDgsNyBAQCBTaW1wbGlmaWVkQmFja3dh
cmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFJh
bmdlKiByLAogICAgICwgbV9ub2RlKDApCiAgICAgLCBtX3Bvc2l0aW9uTm9kZSgwKQogewotICAg
IEFTU0VSVChtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciB8fCBtX2Jl
aGF2aW9yID09IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAgQVNTRVJU
KG1fYmVoYXZpb3IgPT0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKIAogICAgIGlmICgh
cikKICAgICAgICAgcmV0dXJuOwpAQCAtMTA3Niw3ICsxMDczLDcgQEAgU2ltcGxpZmllZEJhY2t3
YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBS
YW5nZSogciwKICAgICAgICAgfQogICAgIH0KIAotICAgIHNldEN1cnJlbnROb2RlKGVuZE5vZGUp
OworICAgIG1fbm9kZSA9IGVuZE5vZGU7CiAgICAgc2V0VXBGdWxseUNsaXBwZWRTdGFjayhtX2Z1
bGx5Q2xpcHBlZFN0YWNrLCBtX25vZGUpOyAgICAKICAgICBtX29mZnNldCA9IGVuZE9mZnNldDsK
ICAgICBtX2hhbmRsZWROb2RlID0gZmFsc2U7CkBAIC0xMTM3LDEyICsxMTM0LDE1IEBAIHZvaWQg
U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiAgICAgICAgICAgICAg
ICAgICAgIG1faGFuZGxlZE5vZGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBtX2hhbmRs
ZWRDaGlsZHJlbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICAvLyBFeGl0IGFsbCBvdGhlciBjb250YWluZXJzLgogICAgICAgICAgICAg
d2hpbGUgKCFtX25vZGUtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFzZXRDdXJyZW50Tm9kZShtX25vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkpCisgICAgICAgICAg
ICAgICAgTm9kZSogcGFyZW50ID0gbV9ub2RlLT5wYXJlbnRPckhvc3ROb2RlKCk7CisgICAgICAg
ICAgICAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIG1fbm9kZSA9IHBhcmVudDsKICAgICAgICAgICAgICAgICBtX2Z1bGx5Q2xpcHBl
ZFN0YWNrLnBvcCgpOwogICAgICAgICAgICAgICAgIGV4aXROb2RlKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKG1fcG9zaXRpb25Ob2RlKSB7CkBAIC0xMTU2LDkgKzExNTYsMTAgQEAgdm9pZCBTaW1w
bGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKCkKICAgICAgICAgICAgIG1fZnVs
bHlDbGlwcGVkU3RhY2sucG9wKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICht
X25vZGUgJiYgc2V0Q3VycmVudE5vZGUobmV4dCkpCisgICAgICAgIGlmIChuZXh0KSB7CisgICAg
ICAgICAgICBtX25vZGUgPSBuZXh0OwogICAgICAgICAgICAgcHVzaEZ1bGx5Q2xpcHBlZFN0YXRl
KG1fZnVsbHlDbGlwcGVkU3RhY2ssIG1fbm9kZSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBjbGVhckN1cnJlbnROb2RlKCk7CiAKICAgICAgICAgLy8gRm9yIHRo
ZSBwdXJwb3NlIG9mIHdvcmQgYm91bmRhcnkgZGV0ZWN0aW9uLApAQCAtMTIzOSwyMSArMTI0MCw2
IEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6ZW1pdENoYXJhY3RlcihV
Q2hhciBjLCBOb2RlKiBub2RlLCBpbnQgc3RhCiAgICAgbV9sYXN0Q2hhcmFjdGVyID0gYzsKIH0K
IAotYm9vbCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpjcm9zc2VzRWRpdGluZ0Jv
dW5kYXJ5KE5vZGUqIG5vZGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbm9kZSAmJiBtX25vZGUt
PmlzQ29udGVudEVkaXRhYmxlKCkgIT0gbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKLX0KLQot
Ym9vbCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpzZXRDdXJyZW50Tm9kZShOb2Rl
KiBub2RlKQotewotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSAmJiBjcm9z
c2VzRWRpdGluZ0JvdW5kYXJ5KG5vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9u
b2RlID0gbm9kZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBTaW1wbGlmaWVkQmFja3dh
cmRzVGV4dEl0ZXJhdG9yOjpjbGVhckN1cnJlbnROb2RlKCkKIHsKICAgICBtX25vZGUgPSAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKaW5kZXggOGI2MWFmZTIxMWI0ZDM3Yjc0
ZjlmNGE1ODIzN2UxZDI4ZjJkY2ZiNC4uNTlmZTJhZDgxZGZmZjE5NjFjNjE4MzllOWNmZTkyNzI4
MDczNWFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCkBAIC00MSwxMCAr
NDEsOSBAQCBlbnVtIFRleHRJdGVyYXRvckJlaGF2aW9yIHsKICAgICBUZXh0SXRlcmF0b3JFbWl0
c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyA9IDEgPDwgMCwKICAgICBUZXh0
SXRlcmF0b3JFbnRlcnNUZXh0Q29udHJvbHMgPSAxIDw8IDEsCiAgICAgVGV4dEl0ZXJhdG9yRW1p
dHNUZXh0c1dpdGhvdXRUcmFuc2NvZGluZyA9IDEgPDwgMiwKLSAgICBUZXh0SXRlcmF0b3JFbmRz
QXRFZGl0aW5nQm91bmRhcnkgPSAxIDw8IDMsCi0gICAgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxl
VmlzaWJpbGl0eSA9IDEgPDwgNAorICAgIFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxp
dHkgPSAxIDw8IDMKIH07Ci0gICAgCisKIC8vIEZJWE1FOiBDYW4ndCByZWFsbHkgYW5zd2VyIHRo
aXMgcXVlc3Rpb24gY29ycmVjdGx5IHdpdGhvdXQga25vd2luZyB0aGUgd2hpdGUtc3BhY2UgbW9k
ZS4KIC8vIEZJWE1FOiBNb3ZlIHRoaXMgc29tZXdoZXJlIGVsc2UgaW4gdGhlIGVkaXRpbmcgZGly
ZWN0b3J5LiBJdCBkb2Vzbid0IGJlbG9uZyBoZXJlLgogaW5saW5lIGJvb2wgaXNDb2xsYXBzaWJs
ZVdoaXRlc3BhY2UoVUNoYXIgYykKQEAgLTIwNSw4ICsyMDQsNiBAQCBwcml2YXRlOgogICAgIGJv
b2wgaGFuZGxlUmVwbGFjZWRFbGVtZW50KCk7CiAgICAgYm9vbCBoYW5kbGVOb25UZXh0Tm9kZSgp
OwogICAgIHZvaWQgZW1pdENoYXJhY3RlcihVQ2hhciwgTm9kZSosIGludCBzdGFydE9mZnNldCwg
aW50IGVuZE9mZnNldCk7Ci0gICAgYm9vbCBjcm9zc2VzRWRpdGluZ0JvdW5kYXJ5KE5vZGUqKSBj
b25zdDsKLSAgICBib29sIHNldEN1cnJlbnROb2RlKE5vZGUqKTsKICAgICB2b2lkIGNsZWFyQ3Vy
cmVudE5vZGUoKTsKIAogICAgIFRleHRJdGVyYXRvckJlaGF2aW9yIG1fYmVoYXZpb3I7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAppbmRleCAxYTU1NGI3N2M0OWQzMzdj
NDM3YjZmOGE4MzRlOTQ2MjFkMTA0ZGI3Li41ZjViNjJjOGJhOTdjZDIxMTlmMWZjNjhjZjhmM2Uy
NGI2ZTUxOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5p
dHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKQEAg
LTQ5LDYgKzQ5LDE2IEBAIGVudW0gQm91bmRhcnlTZWFyY2hDb250ZXh0QXZhaWxhYmlsaXR5IHsg
RG9udEhhdmVNb3JlQ29udGV4dCwgTWF5SGF2ZU1vcmVDb250ZXh0CiAKIHR5cGVkZWYgdW5zaWdu
ZWQgKCpCb3VuZGFyeVNlYXJjaEZ1bmN0aW9uKShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0
aCwgdW5zaWduZWQgb2Zmc2V0LCBCb3VuZGFyeVNlYXJjaENvbnRleHRBdmFpbGFiaWxpdHksIGJv
b2wmIG5lZWRNb3JlQ29udGV4dCk7CiAKK3N0YXRpYyBQb3NpdGlvbiByaWdodG1vc3RFcXVpdmFs
ZW50KFBvc2l0aW9uIHBvc2l0aW9uKQoreworICAgIFBvc2l0aW9uIG5leHQgPSBwb3NpdGlvbi5u
ZXh0KCk7CisgICAgd2hpbGUgKHBvc2l0aW9uLm5vZGUoKSAhPSBuZXh0Lm5vZGUoKSkgeworICAg
ICAgICBwb3NpdGlvbiA9IG5leHQ7CisgICAgICAgIG5leHQgPSBwb3NpdGlvbi5uZXh0KCk7Cisg
ICAgfQorICAgIHJldHVybiBwb3NpdGlvbjsKK30KKwogc3RhdGljIFZpc2libGVQb3NpdGlvbiBw
cmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2hG
dW5jdGlvbiBzZWFyY2hGdW5jdGlvbikKIHsKICAgICBQb3NpdGlvbiBwb3MgPSBjLmRlZXBFcXVp
dmFsZW50KCk7CkBAIC04OSw3ICs5OSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlv
dXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoCiAgICAg
aWYgKGVjKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAgICBTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdldCgpLCBUZXh0SXRlcmF0
b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkpOworICAgIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRl
cmF0b3IgaXQoc2VhcmNoUmFuZ2UuZ2V0KCkpOwogICAgIHVuc2lnbmVkIG5leHQgPSAwOwogICAg
IGJvb2wgaW5UZXh0U2VjdXJpdHlNb2RlID0gc3RhcnQubm9kZSgpICYmIHN0YXJ0Lm5vZGUoKS0+
cmVuZGVyZXIoKSAmJiBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnRleHRTZWN1
cml0eSgpICE9IFRTTk9ORTsKICAgICBib29sIG5lZWRNb3JlQ29udGV4dCA9IGZhbHNlOwpAQCAt
MTI0LDkgKzEzNCwxMCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnko
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJjaAogICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIG5leHQpLCBET1dOU1RSRUFNKTsKIAogICAg
IC8vIFVzZSB0aGUgY2hhcmFjdGVyIGl0ZXJhdG9yIHRvIHRyYW5zbGF0ZSB0aGUgbmV4dCB2YWx1
ZSBpbnRvIGEgRE9NIHBvc2l0aW9uLgotICAgIEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yIGNo
YXJJdChzZWFyY2hSYW5nZS5nZXQoKSwgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5
KTsKKyAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UuZ2V0
KCkpOwogICAgIGNoYXJJdC5hZHZhbmNlKHN0cmluZy5zaXplKCkgLSBzdWZmaXhMZW5ndGggLSBu
ZXh0KTsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNoYXJJdC5yYW5nZSgpLT5lbmRQb3Np
dGlvbigpLCBET1dOU1RSRUFNKTsKKyAgICAvLyBUYWtlIHRoZSByaWdodG1vc3QgZXF1aXZhbGVu
dCBwb3NpdGlvbiBzbyB0aGF0IHRoZSBjb3JyZWN0IGNvbnRhaW5pbmcgZWRpdGFibGUgcmVnaW9u
IGlzIHVzZWQgaWYgYSBib3VuZGFyeSBpcyByZWFjaGVkLgorICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24ocmlnaHRtb3N0RXF1aXZhbGVudChjaGFySXQucmFuZ2UoKS0+ZW5kUG9zaXRpb24oKSks
IERPV05TVFJFQU0pOwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeShj
b25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoRnVuY3Rpb24gc2VhcmNoRnVu
Y3Rpb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79699</attachid>
            <date>2011-01-20 22:50:21 -0800</date>
            <delta_ts>2011-01-23 16:51:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51001-20110121175018.patch</filename>
            <type>text/plain</type>
            <size>14242</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2NGY3NTFlODAzZjI5NGNlYzY3YmMwMDQ0ZWJkZGFiMjlhYTEwOTVmLi41YWE3NzA1
NmFhMTRiYjQ0MWVlZmM0ZmI4YTFiMWI2ZGVkNzMwNmY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDEtMjAgIEJlbmphbWluIEthbG1hbiAgPGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIG9yIHNl
bGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVtcHMgdG8gc3RhcnQgb2YgY29udGVudGVkaXRh
YmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9ZmFsc2Ugc3BhbiBpcyBlbmNvdW50ZXJlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEwMDEKKwor
ICAgICAgICBBZGQgcmVncmVzc2lvbiB0ZXN0LgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rp
b24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnkt
d29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMS0xOCAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5z
dGVpbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1i
YWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVk
aXRhYmxlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzRmYjAzNzlkMzcwYmU5OGRhNzExYmQy
YmViNWU4MDdiNGM2MGUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyBmb3IgTFRSCitQQVNTIGZvciBSVEwKKworZm9v
IGJhciBiYXogcXV4IHF1dXgKK9ep15XWvNeo15Qg16nXlda816jXlCDXqdeV1rzXqNeUINep15XW
vNeo15Qg16nXlda816jXlApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rp
b24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUuaHRtbCBiL0xheW91
dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9u
LWVkaXRhYmxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTkyNDkzMTlmYjA0ZWU5ODNhN2IxZTFjODBlM2Ji
YTBiYTkyNzRhMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0
aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0bWwKQEAgLTAs
MCArMSw0NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8cHJlIGlkPSJsb2ciPjwvcHJlPgorCis8ZGl2
IGlkPSJsdHJUZXh0Q29udGFpbmVyIiBjb250ZW50ZWRpdGFibGU+Zm9vIGJhciA8c3BhbiBjb250
ZW50ZWRpdGFibGU9ZmFsc2U+YmF6PC9zcGFuPiBxdXggcXV1eDwvZGl2PgorPGRpdiBpZD0icnRs
VGV4dENvbnRhaW5lciIgY29udGVudGVkaXRhYmxlIGRpcj0icnRsIj4mI3gwNUU5OyYjeDA1RDU7
JiN4MDVCQzsmI3gwNUU4OyYjeDA1RDQ7ICYjeDA1RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1RTg7
JiN4MDVENDsKKzxzcGFuIGNvbnRlbnRlZGl0YWJsZT1mYWxzZT4mI3gwNUU5OyYjeDA1RDU7JiN4
MDVCQzsmI3gwNUU4OyYjeDA1RDQ7PC9zcGFuPgorJiN4MDVFOTsmI3gwNUQ1OyYjeDA1QkM7JiN4
MDVFODsmI3gwNUQ0OyAmI3gwNUU5OyYjeDA1RDU7JiN4MDVCQzsmI3gwNUU4OyYjeDA1RDQ7PC9k
aXY+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cocykgeworICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgibG9nIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocyArICJcbiIp
KTsKK30KKworZnVuY3Rpb24gcGxhY2VDdXJzb3JBZnRlckZpcnN0Tm9uZWRpdGFibGVDaGlsZChj
b250YWluZXIpIHsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250YWluZXIuY2hpbGROb2Rlcy5s
ZW5ndGg7IGkrKykgeworICAgIHZhciBub2RlID0gY29udGFpbmVyLmNoaWxkTm9kZXNbaV07Cisg
ICAgaWYgKG5vZGUuaXNDb250ZW50RWRpdGFibGUgIT09IHVuZGVmaW5lZCAmJiAhbm9kZS5pc0Nv
bnRlbnRFZGl0YWJsZSkgeworICAgICAgZ2V0U2VsZWN0aW9uKCkuc2V0UG9zaXRpb24obm9kZS5u
ZXh0U2libGluZywgMCk7CisgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisgIH0KKyAgdGhyb3cg
IkNvdWxkbid0IGZpbmQgbm9uZWRpdGFibGUgY2hpbGQgb2YgIiArIGNvbnRhaW5lci50ZXh0Q29u
dGVudDsKK30KKworbHRyVGV4dENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJs
dHJUZXh0Q29udGFpbmVyIik7Citub25lZGl0YWJsZUNoaWxkID0gcGxhY2VDdXJzb3JBZnRlckZp
cnN0Tm9uZWRpdGFibGVDaGlsZChsdHJUZXh0Q29udGFpbmVyKTsKK2dldFNlbGVjdGlvbigpLm1v
ZGlmeSgiZXh0ZW5kIiwgImJhY2t3YXJkIiwgIndvcmQiKTsKKworaWYgKGdldFNlbGVjdGlvbigp
LnRvU3RyaW5nKCkgPT09IG5vbmVkaXRhYmxlQ2hpbGQudGV4dENvbnRlbnQpCisgIGxvZygiUEFT
UyBmb3IgTFRSIik7CitlbHNlCisgIGxvZygiRkFJTCBmb3IgTFRSLCBzZWxlY3Rpb24gaXMgXCIi
ICsgZ2V0U2VsZWN0aW9uKCkgKyAiXCIgYnV0IHNob3VsZCBiZSBcIiIgKyBub25lZGl0YWJsZUNo
aWxkLnRleHRDb250ZW50ICsgIlwiIik7CisKK3J0bFRleHRDb250YWluZXIgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicnRsVGV4dENvbnRhaW5lciIpOworbm9uZWRpdGFibGVDaGlsZCA9IHBs
YWNlQ3Vyc29yQWZ0ZXJGaXJzdE5vbmVkaXRhYmxlQ2hpbGQocnRsVGV4dENvbnRhaW5lcik7Citn
ZXRTZWxlY3Rpb24oKS5tb2RpZnkoImV4dGVuZCIsICJiYWNrd2FyZCIsICJ3b3JkIik7CisKK2lm
IChnZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBub25lZGl0YWJsZUNoaWxkLnRleHRDb250
ZW50KQorICBsb2coIlBBU1MgZm9yIFJUTCIpOworZWxzZQorICBsb2coIkZBSUwgZm9yIFJUTCwg
c2VsZWN0aW9uIGlzIFwiIiArIGdldFNlbGVjdGlvbigpICsgIlwiIGJ1dCBzaG91bGQgYmUgXCIi
ICsgbm9uZWRpdGFibGVDaGlsZC50ZXh0Q29udGVudCArICJcIiIpOworCitsb2coIiIpOworCitp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDgxNTk2OWRhMjExYWZiZmIy
ZTA3ZmRiNDNhMjA0NTgyZDRhYmY0MjIuLmMxZjBmMDg1NmE3MTUyZGI0ZWIwYzA4ZWYxYzFhMGQ2
ZmI3ZWY3MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMS0wMS0yMCAgQmVuamFt
aW4gS2FsbWFuICA8a2FsbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zpbmcgb3Igc2VsZWN0aW5nIGJhY2t3YXJkcyBi
eSB3b3JkcyBqdW1wcyB0byBzdGFydCBvZiBjb250ZW50ZWRpdGFibGUgcmVnaW9uIGlmIGNvbnRl
bnRlZGl0YWJsZT1mYWxzZSBzcGFuIGlzIGVuY291bnRlcmVkCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTAwMQorCisgICAgICAgIFRlc3Q6IGVkaXRp
bmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0
bWwKKworICAgICAgICBSZXZlcnQgc29tZSBwcmV2aW91cyBjaGFuZ2VzICh0aGUgVGV4dEl0ZXJh
dG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5IHRleHQgaXRlcmF0aW9uIGJlaGF2aW91cikgd2hpY2gg
Y2F1c2VkIHRoaXMKKyAgICAgICAgYnVnIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIGZpeCBTaW1w
bGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yJ3MgaXRlcmF0aW9uIHJhbmdlIGNoZWNrIGFzIGFu
IGFsdGVybmF0aXZlIHdheSB0bworICAgICAgICBmaXggdGhlIGJ1ZyB0aGF0IGl0IG9yaWdpbmFs
bHkgc29sdmVkLgorCisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpUZXh0SXRlcmF0b3IpOiBSZW1vdmUgcmVmZXJlbmNl
cyB0byBUZXh0SXRlcmF0aW9uRW5kc0F0RWRpdGluZyBib3VuZGFyeS4KKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3IpOiBSZW1vdmUgbV9wYXN0U3RhcnROb2RlIGFzIHRoZQorICAgICAgICBtZWNo
YW5pc20gZm9yIGl0ZXJhdGlvbiByYW5nZSBjaGVja2luZywgYW5kIHVzZSBhIGZsYWcgbV9oYXZl
UGFzc2VkU3RhcnROb2RlIGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKTogQ2xlYW4gdXAsIHVzZSBhZHZhbmNlVG9JZk5v
bk51bGxBbmRXaXRoaW4gcmFuZ2UgYW5kCisgICAgICAgIG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZSBm
b3IgaXRlcmF0aW9uIHJhbmdlIGNoZWNraW5nIHJhdGhlciB0aGFuIG1fcGFzdFN0YXJ0Tm9kZS4K
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFu
Y2VUb0lmTm9uTnVsbEFuZFdpdGhpblJhbmdlKTogVGhlIG5ldyB3YXkgb2YgbW9kaWZ5aW5nIG1f
bm9kZQorICAgICAgICB3aGljaCB1cGRhdGVzIG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZSBhbmQgcmVm
dXNlcyB0byBjb250aW51ZSB3aGVuIGl0IGJlY29tZXMgdHJ1ZS4KKyAgICAgICAgKiBlZGl0aW5n
L1RleHRJdGVyYXRvci5oOiBSZW1vdmUgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5
LCB1cGRhdGUgZm9yIG5ldyBhbmQgcmVtb3ZlZCBwcm90b3R5cGVzIGFuZAorICAgICAgICBtZW1i
ZXIgdmFyaWFibGVzLgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwcmV2aW91c0JvdW5kYXJ5KTogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gVGV4
dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5LgorCiAyMDExLTAxLTE4ICBWaWN0b3JpYSBL
aXJzdCAgPHZya0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBS
dXNzZWxsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IGMyNGJj
YjI0MjYxNWUxNGVhOWFlNGY4MDRiZWY0MWYyNTRhNmE2MTEuLjNiNjQyMzYyM2FhNzU1YzdhOGNh
NjNlZGE0YzU5MmJmZDg1MzcyZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAKQEAgLTE5MywyMSArMTkzLDYgQEAgc3RhdGljIE5vZGUqIG5leHRJblByZU9yZGVyQ3Jv
c3NpbmdTaGFkb3dCb3VuZGFyaWVzKE5vZGUqIHJhbmdlRW5kQ29udGFpbmVyLCBpbnQKICAgICBy
ZXR1cm4gMDsKIH0KIAotc3RhdGljIE5vZGUqIHByZXZpb3VzSW5Qb3N0T3JkZXJDcm9zc2luZ1No
YWRvd0JvdW5kYXJpZXMoTm9kZSogcmFuZ2VTdGFydENvbnRhaW5lciwgaW50IHJhbmdlU3RhcnRP
ZmZzZXQpCi17Ci0gICAgaWYgKCFyYW5nZVN0YXJ0Q29udGFpbmVyKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBpZiAocmFuZ2VTdGFydE9mZnNldCA+IDAgJiYgIXJhbmdlU3RhcnRDb250YWluZXIt
Pm9mZnNldEluQ2hhcmFjdGVycygpKSB7Ci0gICAgICAgIGlmIChOb2RlKiBwcmV2aW91cyA9IHJh
bmdlU3RhcnRDb250YWluZXItPmNoaWxkTm9kZShyYW5nZVN0YXJ0T2Zmc2V0IC0gMSkpCi0gICAg
ICAgICAgICByZXR1cm4gcHJldmlvdXM7Ci0gICAgfQotICAgIGZvciAoTm9kZSogbm9kZSA9IHJh
bmdlU3RhcnRDb250YWluZXI7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkp
IHsKLSAgICAgICAgaWYgKE5vZGUqIHByZXZpb3VzID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCkp
Ci0gICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQot
CiAvLyAtLS0tLS0tLQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZnVsbHlDbGlwc0NvbnRlbnRzKE5v
ZGUqIG5vZGUpCkBAIC0yODksOSArMjc0LDYgQEAgVGV4dEl0ZXJhdG9yOjpUZXh0SXRlcmF0b3Io
Y29uc3QgUmFuZ2UqIHIsIFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yKQogICAgICwgbV9o
YW5kbGVkRmlyc3RMZXR0ZXIoZmFsc2UpCiAgICAgLCBtX2lnbm9yZXNTdHlsZVZpc2liaWxpdHko
YmVoYXZpb3IgJiBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5KQogewotICAgIC8v
IEZJWE1FOiBzaG91bGQgc3VwcG9ydCBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkg
aHR0cDovL3dlYmtpdC5vcmcvYi80MzYwOQotICAgIEFTU0VSVChiZWhhdmlvciAhPSBUZXh0SXRl
cmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkpOwotCiAgICAgaWYgKCFyKQogICAgICAgICByZXR1
cm47CiAKQEAgLTEwNTEsNyArMTAzMyw3IEBAIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0
b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2UqIHIsCiAgICAg
LCBtX25vZGUoMCkKICAgICAsIG1fcG9zaXRpb25Ob2RlKDApCiB7Ci0gICAgQVNTRVJUKG1fYmVo
YXZpb3IgPT0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yIHx8IG1fYmVoYXZpb3IgPT0gVGV4
dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5KTsKKyAgICBBU1NFUlQobV9iZWhhdmlvciA9
PSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwogCiAgICAgaWYgKCFyKQogICAgICAgICBy
ZXR1cm47CkBAIC0xMDc2LDcgKzEwNTgsNyBAQCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJh
dG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLAogICAg
ICAgICB9CiAgICAgfQogCi0gICAgc2V0Q3VycmVudE5vZGUoZW5kTm9kZSk7CisgICAgbV9ub2Rl
ID0gZW5kTm9kZTsKICAgICBzZXRVcEZ1bGx5Q2xpcHBlZFN0YWNrKG1fZnVsbHlDbGlwcGVkU3Rh
Y2ssIG1fbm9kZSk7ICAgIAogICAgIG1fb2Zmc2V0ID0gZW5kT2Zmc2V0OwogICAgIG1faGFuZGxl
ZE5vZGUgPSBmYWxzZTsKQEAgLTEwOTUsNyArMTA3Nyw3IEBAIFNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2Uq
IHIsCiAgICAgbV9sYXN0VGV4dE5vZGUgPSAwOwogICAgIG1fbGFzdENoYXJhY3RlciA9ICdcbic7
CiAKLSAgICBtX3Bhc3RTdGFydE5vZGUgPSBwcmV2aW91c0luUG9zdE9yZGVyQ3Jvc3NpbmdTaGFk
b3dCb3VuZGFyaWVzKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpOworICAgIG1faGF2ZVBhc3NlZFN0
YXJ0Tm9kZSA9IGZhbHNlOwogCiAgICAgYWR2YW5jZSgpOwogfQpAQCAtMTEwNyw3ICsxMDg5LDcg
QEAgdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKCkKICAgICBt
X3Bvc2l0aW9uTm9kZSA9IDA7CiAgICAgbV90ZXh0TGVuZ3RoID0gMDsKIAotICAgIHdoaWxlICht
X25vZGUgJiYgbV9ub2RlICE9IG1fcGFzdFN0YXJ0Tm9kZSkgeworICAgIHdoaWxlIChtX25vZGUg
JiYgIW1faGF2ZVBhc3NlZFN0YXJ0Tm9kZSkgewogICAgICAgICAvLyBEb24ndCBoYW5kbGUgbm9k
ZSBpZiB3ZSBzdGFydCBpdGVyYXRpbmcgYXQgW25vZGUsIDBdLgogICAgICAgICBpZiAoIW1faGFu
ZGxlZE5vZGUgJiYgIShtX25vZGUgPT0gbV9lbmROb2RlICYmIG1fZW5kT2Zmc2V0ID09IDApKSB7
CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9ub2RlLT5yZW5kZXJlcigp
OwpAQCAtMTEyNCw4ICsxMTA2LDEwIEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVy
YXRvcjo6YWR2YW5jZSgpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAg
ICAgICAgTm9kZSogbmV4dCA9IG1faGFuZGxlZENoaWxkcmVuID8gMCA6IG1fbm9kZS0+bGFzdENo
aWxkKCk7Ci0gICAgICAgIGlmICghbmV4dCkgeworICAgICAgICBpZiAoIW1faGFuZGxlZENoaWxk
cmVuICYmIG1fbm9kZS0+aGFzQ2hpbGROb2RlcygpKSB7CisgICAgICAgICAgICBtX25vZGUgPSBt
X25vZGUtPmxhc3RDaGlsZCgpOworICAgICAgICAgICAgcHVzaEZ1bGx5Q2xpcHBlZFN0YXRlKG1f
ZnVsbHlDbGlwcGVkU3RhY2ssIG1fbm9kZSk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAvLyBFeGl0IGVtcHR5IGNvbnRhaW5lcnMgYXMgd2UgcGFzcyBvdmVyIHRoZW0gb3IgY29udGFp
bmVycwogICAgICAgICAgICAgLy8gd2hlcmUgW2NvbnRhaW5lciwgMF0gaXMgd2hlcmUgd2Ugc3Rh
cnRlZCBpdGVyYXRpbmcuCiAgICAgICAgICAgICBpZiAoIW1faGFuZGxlZE5vZGUKQEAgLTExMzcs
MTEgKzExMjEsMTIgQEAgdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZh
bmNlKCkKICAgICAgICAgICAgICAgICAgICAgbV9oYW5kbGVkTm9kZSA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIG1faGFuZGxlZENoaWxkcmVuID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIEV4aXQgYWxsIG90aGVyIGNvbnRh
aW5lcnMuCiAgICAgICAgICAgICB3aGlsZSAoIW1fbm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoIXNldEN1cnJlbnROb2RlKG1fbm9kZS0+cGFyZW50T3JIb3N0
Tm9kZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWFkdmFuY2VUb0lmTm9uTnVsbEFuZFdpdGhp
blJhbmdlKG1fbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgbV9mdWxseUNsaXBwZWRTdGFjay5wb3AoKTsKICAgICAg
ICAgICAgICAgICBleGl0Tm9kZSgpOwpAQCAtMTE1MiwxNCArMTEzNywxMiBAQCB2b2lkIFNpbXBs
aWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2UoKQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbmV4dCA9IG1fbm9kZS0+cHJldmlvdXNTaWJs
aW5nKCk7CiAgICAgICAgICAgICBtX2Z1bGx5Q2xpcHBlZFN0YWNrLnBvcCgpOworICAgICAgICAg
ICAgaWYgKGFkdmFuY2VUb0lmTm9uTnVsbEFuZFdpdGhpblJhbmdlKG1fbm9kZS0+cHJldmlvdXNT
aWJsaW5nKCkpKQorICAgICAgICAgICAgICAgIHB1c2hGdWxseUNsaXBwZWRTdGF0ZShtX2Z1bGx5
Q2xpcHBlZFN0YWNrLCBtX25vZGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG1fbm9kZSA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUgJiYg
c2V0Q3VycmVudE5vZGUobmV4dCkpCi0gICAgICAgICAgICBwdXNoRnVsbHlDbGlwcGVkU3RhdGUo
bV9mdWxseUNsaXBwZWRTdGFjaywgbV9ub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y2xlYXJDdXJyZW50Tm9kZSgpOwogCiAgICAgICAgIC8vIEZvciB0aGUgcHVycG9zZSBvZiB3b3Jk
IGJvdW5kYXJ5IGRldGVjdGlvbiwKICAgICAgICAgLy8gd2Ugc2hvdWxkIGl0ZXJhdGUgYWxsIHZp
c2libGUgdGV4dCBhbmQgdHJhaWxpbmcgKGNvbGxhcHNlZCkgd2hpdGVzcGFjZXMuIApAQCAtMTIz
OSwyNiArMTIyMiwxNyBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmVt
aXRDaGFyYWN0ZXIoVUNoYXIgYywgTm9kZSogbm9kZSwgaW50IHN0YQogICAgIG1fbGFzdENoYXJh
Y3RlciA9IGM7CiB9CiAKLWJvb2wgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6Y3Jv
c3Nlc0VkaXRpbmdCb3VuZGFyeShOb2RlKiBub2RlKSBjb25zdAorYm9vbCBTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlVG9JZk5vbk51bGxBbmRXaXRoaW5SYW5nZShOb2Rl
KiBuZXh0KQogewotICAgIHJldHVybiBtX25vZGUgJiYgbV9ub2RlLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpICE9IG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7Ci19Ci0KLWJvb2wgU2ltcGxpZmllZEJh
Y2t3YXJkc1RleHRJdGVyYXRvcjo6c2V0Q3VycmVudE5vZGUoTm9kZSogbm9kZSkKLXsKLSAgICBp
ZiAoIW5vZGUpCisgICAgaWYgKCFuZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KG1fYmVoYXZpb3IgPT0gVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5ICYmIGNyb3Nz
ZXNFZGl0aW5nQm91bmRhcnkobm9kZSkpCisgICAgbV9oYXZlUGFzc2VkU3RhcnROb2RlIHw9IG1f
bm9kZSA9PSBtX3N0YXJ0Tm9kZTsKKyAgICBpZiAobV9oYXZlUGFzc2VkU3RhcnROb2RlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9ub2RlID0gbm9kZTsKKyAgICBtX25vZGUgPSBuZXh0
OwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRl
cmF0b3I6OmNsZWFyQ3VycmVudE5vZGUoKQotewotICAgIG1fbm9kZSA9IDA7Ci19Ci0KIFBhc3NS
ZWZQdHI8UmFuZ2U+IFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OnJhbmdlKCkgY29u
c3QKIHsKICAgICBpZiAobV9wb3NpdGlvbk5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRl
cmF0b3IuaAppbmRleCA4YjYxYWZlMjExYjRkMzdiNzRmOWY0YTU4MjM3ZTFkMjhmMmRjZmI0Li43
ZGIwYzRkMDE1NDI4YzdhZTU5ZWY5YmI4OTZhNjgwZTViZjhiYWQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dEl0ZXJhdG9yLmgKQEAgLTQxLDggKzQxLDcgQEAgZW51bSBUZXh0SXRlcmF0b3JC
ZWhhdmlvciB7CiAgICAgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2li
bGVQb3NpdGlvbnMgPSAxIDw8IDAsCiAgICAgVGV4dEl0ZXJhdG9yRW50ZXJzVGV4dENvbnRyb2xz
ID0gMSA8PCAxLAogICAgIFRleHRJdGVyYXRvckVtaXRzVGV4dHNXaXRob3V0VHJhbnNjb2Rpbmcg
PSAxIDw8IDIsCi0gICAgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5ID0gMSA8PCAz
LAotICAgIFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHkgPSAxIDw8IDQKKyAgICBU
ZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5ID0gMSA8PCAzCiB9OwogICAgIAogLy8g
RklYTUU6IENhbid0IHJlYWxseSBhbnN3ZXIgdGhpcyBxdWVzdGlvbiBjb3JyZWN0bHkgd2l0aG91
dCBrbm93aW5nIHRoZSB3aGl0ZS1zcGFjZSBtb2RlLgpAQCAtMjA1LDkgKzIwNCw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBoYW5kbGVSZXBsYWNlZEVsZW1lbnQoKTsKICAgICBib29sIGhhbmRsZU5v
blRleHROb2RlKCk7CiAgICAgdm9pZCBlbWl0Q2hhcmFjdGVyKFVDaGFyLCBOb2RlKiwgaW50IHN0
YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KTsKLSAgICBib29sIGNyb3NzZXNFZGl0aW5nQm91bmRh
cnkoTm9kZSopIGNvbnN0OwotICAgIGJvb2wgc2V0Q3VycmVudE5vZGUoTm9kZSopOwotICAgIHZv
aWQgY2xlYXJDdXJyZW50Tm9kZSgpOworICAgIGJvb2wgYWR2YW5jZVRvSWZOb25OdWxsQW5kV2l0
aGluUmFuZ2UoTm9kZSopOwogCiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgbV9iZWhhdmlvcjsK
ICAgICAvLyBDdXJyZW50IHBvc2l0aW9uLCBub3QgbmVjZXNzYXJpbHkgb2YgdGhlIHRleHQgYmVp
bmcgcmV0dXJuZWQsIGJ1dCBwb3NpdGlvbgpAQCAtMjM4LDkgKzIzNSw5IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgLy8gVXNlZCBmb3Igd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHRoYXQgYXJlbid0IGlu
IHRoZSBET00sIHNvIHdlIGNhbiBwb2ludCBhdCB0aGVtLgogICAgIFVDaGFyIG1fc2luZ2xlQ2hh
cmFjdGVyQnVmZmVyOwotICAgIAotICAgIC8vIFRoZSBub2RlIGFmdGVyIHRoZSBsYXN0IG5vZGUg
dGhpcyBpdGVyYXRvciBzaG91bGQgcHJvY2Vzcy4KLSAgICBOb2RlKiBtX3Bhc3RTdGFydE5vZGU7
CisKKyAgICAvLyBXaGV0aGVyIG1fbm9kZSBoYXMgYWR2YW5jZWQgYmV5b25kIHRoZSBpdGVyYXRp
b24gcmFuZ2UgKGkuZS4gbV9zdGFydE5vZGUpLgorICAgIGJvb2wgbV9oYXZlUGFzc2VkU3RhcnRO
b2RlOwogfTsKIAogLy8gQnVpbGRzIG9uIHRoZSB0ZXh0IGl0ZXJhdG9yLCBhZGRpbmcgYSBjaGFy
YWN0ZXIgcG9zaXRpb24gc28gd2UgY2FuIHdhbGsgb25lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy92
aXNpYmxlX3VuaXRzLmNwcAppbmRleCAxYTU1NGI3N2M0OWQzMzdjNDM3YjZmOGE4MzRlOTQ2MjFk
MTA0ZGI3Li5kZDJhMWUwMzQ2YjQ3MGY2OGJiNjc3MTIzNDk2MWFmNWE4YzY4NjFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgc3Rh
dGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlv
biYgYywgQm91bmRhcnlTZWFyY2gKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oKTsKIAotICAgIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgaXQoc2Vh
cmNoUmFuZ2UuZ2V0KCksIFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAg
U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSk7CiAg
ICAgdW5zaWduZWQgbmV4dCA9IDA7CiAgICAgYm9vbCBpblRleHRTZWN1cml0eU1vZGUgPSBzdGFy
dC5ub2RlKCkgJiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpICYmIHN0YXJ0Lm5vZGUoKS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkgIT0gVFNOT05FOwogICAgIGJvb2wgbmVl
ZE1vcmVDb250ZXh0ID0gZmFsc2U7CkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIFZpc2libGVQ
b3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRh
cnlTZWFyY2gKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBu
ZXh0KSwgRE9XTlNUUkVBTSk7CiAKICAgICAvLyBVc2UgdGhlIGNoYXJhY3RlciBpdGVyYXRvciB0
byB0cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlvbi4KLSAgICBCYWNr
d2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UuZ2V0KCksIFRleHRJdGVy
YXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAgQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0
b3IgY2hhckl0KHNlYXJjaFJhbmdlLmdldCgpKTsKICAgICBjaGFySXQuYWR2YW5jZShzdHJpbmcu
c2l6ZSgpIC0gc3VmZml4TGVuZ3RoIC0gbmV4dCk7CiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihjaGFySXQucmFuZ2UoKS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79884</attachid>
            <date>2011-01-23 16:51:55 -0800</date>
            <delta_ts>2011-01-24 22:27:59 -0800</delta_ts>
            <desc>Change to advanceRespectingRange</desc>
            <filename>bug-51001-20110124115152.patch</filename>
            <type>text/plain</type>
            <size>14192</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2NGY3NTFlODAzZjI5NGNlYzY3YmMwMDQ0ZWJkZGFiMjlhYTEwOTVmLi41YWE3NzA1
NmFhMTRiYjQ0MWVlZmM0ZmI4YTFiMWI2ZGVkNzMwNmY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDEtMjAgIEJlbmphbWluIEthbG1hbiAgPGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIG9yIHNl
bGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVtcHMgdG8gc3RhcnQgb2YgY29udGVudGVkaXRh
YmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9ZmFsc2Ugc3BhbiBpcyBlbmNvdW50ZXJlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEwMDEKKwor
ICAgICAgICBBZGQgcmVncmVzc2lvbiB0ZXN0LgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rp
b24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnkt
d29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMS0xOCAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5z
dGVpbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1i
YWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVk
aXRhYmxlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzRmYjAzNzlkMzcwYmU5OGRhNzExYmQy
YmViNWU4MDdiNGM2MGUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyBmb3IgTFRSCitQQVNTIGZvciBSVEwKKworZm9v
IGJhciBiYXogcXV4IHF1dXgKK9ep15XWvNeo15Qg16nXlda816jXlCDXqdeV1rzXqNeUINep15XW
vNeo15Qg16nXlda816jXlApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rp
b24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUuaHRtbCBiL0xheW91
dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9u
LWVkaXRhYmxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTkyNDkzMTlmYjA0ZWU5ODNhN2IxZTFjODBlM2Ji
YTBiYTkyNzRhMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0
aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0bWwKQEAgLTAs
MCArMSw0NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8cHJlIGlkPSJsb2ciPjwvcHJlPgorCis8ZGl2
IGlkPSJsdHJUZXh0Q29udGFpbmVyIiBjb250ZW50ZWRpdGFibGU+Zm9vIGJhciA8c3BhbiBjb250
ZW50ZWRpdGFibGU9ZmFsc2U+YmF6PC9zcGFuPiBxdXggcXV1eDwvZGl2PgorPGRpdiBpZD0icnRs
VGV4dENvbnRhaW5lciIgY29udGVudGVkaXRhYmxlIGRpcj0icnRsIj4mI3gwNUU5OyYjeDA1RDU7
JiN4MDVCQzsmI3gwNUU4OyYjeDA1RDQ7ICYjeDA1RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1RTg7
JiN4MDVENDsKKzxzcGFuIGNvbnRlbnRlZGl0YWJsZT1mYWxzZT4mI3gwNUU5OyYjeDA1RDU7JiN4
MDVCQzsmI3gwNUU4OyYjeDA1RDQ7PC9zcGFuPgorJiN4MDVFOTsmI3gwNUQ1OyYjeDA1QkM7JiN4
MDVFODsmI3gwNUQ0OyAmI3gwNUU5OyYjeDA1RDU7JiN4MDVCQzsmI3gwNUU4OyYjeDA1RDQ7PC9k
aXY+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cocykgeworICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgibG9nIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocyArICJcbiIp
KTsKK30KKworZnVuY3Rpb24gcGxhY2VDdXJzb3JBZnRlckZpcnN0Tm9uZWRpdGFibGVDaGlsZChj
b250YWluZXIpIHsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250YWluZXIuY2hpbGROb2Rlcy5s
ZW5ndGg7IGkrKykgeworICAgIHZhciBub2RlID0gY29udGFpbmVyLmNoaWxkTm9kZXNbaV07Cisg
ICAgaWYgKG5vZGUuaXNDb250ZW50RWRpdGFibGUgIT09IHVuZGVmaW5lZCAmJiAhbm9kZS5pc0Nv
bnRlbnRFZGl0YWJsZSkgeworICAgICAgZ2V0U2VsZWN0aW9uKCkuc2V0UG9zaXRpb24obm9kZS5u
ZXh0U2libGluZywgMCk7CisgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisgIH0KKyAgdGhyb3cg
IkNvdWxkbid0IGZpbmQgbm9uZWRpdGFibGUgY2hpbGQgb2YgIiArIGNvbnRhaW5lci50ZXh0Q29u
dGVudDsKK30KKworbHRyVGV4dENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJs
dHJUZXh0Q29udGFpbmVyIik7Citub25lZGl0YWJsZUNoaWxkID0gcGxhY2VDdXJzb3JBZnRlckZp
cnN0Tm9uZWRpdGFibGVDaGlsZChsdHJUZXh0Q29udGFpbmVyKTsKK2dldFNlbGVjdGlvbigpLm1v
ZGlmeSgiZXh0ZW5kIiwgImJhY2t3YXJkIiwgIndvcmQiKTsKKworaWYgKGdldFNlbGVjdGlvbigp
LnRvU3RyaW5nKCkgPT09IG5vbmVkaXRhYmxlQ2hpbGQudGV4dENvbnRlbnQpCisgIGxvZygiUEFT
UyBmb3IgTFRSIik7CitlbHNlCisgIGxvZygiRkFJTCBmb3IgTFRSLCBzZWxlY3Rpb24gaXMgXCIi
ICsgZ2V0U2VsZWN0aW9uKCkgKyAiXCIgYnV0IHNob3VsZCBiZSBcIiIgKyBub25lZGl0YWJsZUNo
aWxkLnRleHRDb250ZW50ICsgIlwiIik7CisKK3J0bFRleHRDb250YWluZXIgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicnRsVGV4dENvbnRhaW5lciIpOworbm9uZWRpdGFibGVDaGlsZCA9IHBs
YWNlQ3Vyc29yQWZ0ZXJGaXJzdE5vbmVkaXRhYmxlQ2hpbGQocnRsVGV4dENvbnRhaW5lcik7Citn
ZXRTZWxlY3Rpb24oKS5tb2RpZnkoImV4dGVuZCIsICJiYWNrd2FyZCIsICJ3b3JkIik7CisKK2lm
IChnZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBub25lZGl0YWJsZUNoaWxkLnRleHRDb250
ZW50KQorICBsb2coIlBBU1MgZm9yIFJUTCIpOworZWxzZQorICBsb2coIkZBSUwgZm9yIFJUTCwg
c2VsZWN0aW9uIGlzIFwiIiArIGdldFNlbGVjdGlvbigpICsgIlwiIGJ1dCBzaG91bGQgYmUgXCIi
ICsgbm9uZWRpdGFibGVDaGlsZC50ZXh0Q29udGVudCArICJcIiIpOworCitsb2coIiIpOworCitp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDgxNTk2OWRhMjExYWZiZmIy
ZTA3ZmRiNDNhMjA0NTgyZDRhYmY0MjIuLmQ4ZDg4ZGNkODBkYTY2ZDliZjIzZjMyNGUwYzExOWJh
YzJiODkyMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMS0wMS0yMCAgQmVuamFt
aW4gS2FsbWFuICA8a2FsbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zpbmcgb3Igc2VsZWN0aW5nIGJhY2t3YXJkcyBi
eSB3b3JkcyBqdW1wcyB0byBzdGFydCBvZiBjb250ZW50ZWRpdGFibGUgcmVnaW9uIGlmIGNvbnRl
bnRlZGl0YWJsZT1mYWxzZSBzcGFuIGlzIGVuY291bnRlcmVkCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTAwMQorCisgICAgICAgIFRlc3Q6IGVkaXRp
bmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0
bWwKKworICAgICAgICBSZXZlcnQgc29tZSBwcmV2aW91cyBjaGFuZ2VzICh0aGUgVGV4dEl0ZXJh
dG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5IHRleHQgaXRlcmF0aW9uIGJlaGF2aW91cikgd2hpY2gg
Y2F1c2VkIHRoaXMKKyAgICAgICAgYnVnIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIGZpeCBTaW1w
bGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yJ3MgaXRlcmF0aW9uIHJhbmdlIGNoZWNrIGFzIGFu
IGFsdGVybmF0aXZlIHdheSB0bworICAgICAgICBmaXggdGhlIGJ1ZyB0aGF0IGl0IG9yaWdpbmFs
bHkgc29sdmVkLgorCisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpUZXh0SXRlcmF0b3IpOiBSZW1vdmUgcmVmZXJlbmNl
cyB0byBUZXh0SXRlcmF0aW9uRW5kc0F0RWRpdGluZyBib3VuZGFyeS4KKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3IpOiBSZW1vdmUgbV9wYXN0U3RhcnROb2RlIGFzIHRoZQorICAgICAgICBtZWNo
YW5pc20gZm9yIGl0ZXJhdGlvbiByYW5nZSBjaGVja2luZywgYW5kIHVzZSBhIGZsYWcgbV9oYXZl
UGFzc2VkU3RhcnROb2RlIGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKTogQ2xlYW4gdXAsIHVzZSBhZHZhbmNlVG9JZk5v
bk51bGxBbmRXaXRoaW4gcmFuZ2UgYW5kCisgICAgICAgIG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZSBm
b3IgaXRlcmF0aW9uIHJhbmdlIGNoZWNraW5nIHJhdGhlciB0aGFuIG1fcGFzdFN0YXJ0Tm9kZS4K
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFu
Y2VSZXNwZWN0aW5nUmFuZ2UpOiBUaGUgbmV3IHdheSBvZiBtb2RpZnlpbmcgbV9ub2RlCisgICAg
ICAgIHdoaWNoIHVwZGF0ZXMgbV9oYXZlUGFzc2VkU3RhcnROb2RlIGFuZCByZWZ1c2VzIHRvIGNv
bnRpbnVlIHdoZW4gaXQgYmVjb21lcyB0cnVlLgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJh
dG9yLmg6IFJlbW92ZSBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnksIHVwZGF0ZSBm
b3IgbmV3IGFuZCByZW1vdmVkIHByb3RvdHlwZXMgYW5kCisgICAgICAgIG1lbWJlciB2YXJpYWJs
ZXMuCisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnByZXZpb3VzQm91bmRhcnkpOiBSZW1vdmUgcmVmZXJlbmNlcyB0byBUZXh0SXRlcmF0b3JF
bmRzQXRFZGl0aW5nQm91bmRhcnkuCisKIDIwMTEtMDEtMTggIFZpY3RvcmlhIEtpcnN0ICA8dnJr
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggYzI0YmNiMjQyNjE1ZTE0
ZWE5YWU0ZjgwNGJlZjQxZjI1NGE2YTYxMS4uNWEzYjMxNTE4YWRmNDgzMWVjYzUxYTdkZWVmNWRm
NzBkMDIxODNlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAt
MTkzLDIxICsxOTMsNiBAQCBzdGF0aWMgTm9kZSogbmV4dEluUHJlT3JkZXJDcm9zc2luZ1NoYWRv
d0JvdW5kYXJpZXMoTm9kZSogcmFuZ2VFbmRDb250YWluZXIsIGludAogICAgIHJldHVybiAwOwog
fQogCi1zdGF0aWMgTm9kZSogcHJldmlvdXNJblBvc3RPcmRlckNyb3NzaW5nU2hhZG93Qm91bmRh
cmllcyhOb2RlKiByYW5nZVN0YXJ0Q29udGFpbmVyLCBpbnQgcmFuZ2VTdGFydE9mZnNldCkKLXsK
LSAgICBpZiAoIXJhbmdlU3RhcnRDb250YWluZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlm
IChyYW5nZVN0YXJ0T2Zmc2V0ID4gMCAmJiAhcmFuZ2VTdGFydENvbnRhaW5lci0+b2Zmc2V0SW5D
aGFyYWN0ZXJzKCkpIHsKLSAgICAgICAgaWYgKE5vZGUqIHByZXZpb3VzID0gcmFuZ2VTdGFydENv
bnRhaW5lci0+Y2hpbGROb2RlKHJhbmdlU3RhcnRPZmZzZXQgLSAxKSkKLSAgICAgICAgICAgIHJl
dHVybiBwcmV2aW91czsKLSAgICB9Ci0gICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2VTdGFydENv
bnRhaW5lcjsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkgewotICAgICAg
ICBpZiAoTm9kZSogcHJldmlvdXMgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkKLSAgICAgICAg
ICAgIHJldHVybiBwcmV2aW91czsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIC8vIC0tLS0t
LS0tCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBmdWxseUNsaXBzQ29udGVudHMoTm9kZSogbm9kZSkK
QEAgLTI4OSw5ICsyNzQsNiBAQCBUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcihjb25zdCBSYW5n
ZSogciwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpCiAgICAgLCBtX2hhbmRsZWRGaXJz
dExldHRlcihmYWxzZSkKICAgICAsIG1faWdub3Jlc1N0eWxlVmlzaWJpbGl0eShiZWhhdmlvciAm
IFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHkpCiB7Ci0gICAgLy8gRklYTUU6IHNo
b3VsZCBzdXBwb3J0IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzQzNjA5Ci0gICAgQVNTRVJUKGJlaGF2aW9yICE9IFRleHRJdGVyYXRvckVuZHNB
dEVkaXRpbmdCb3VuZGFyeSk7Ci0KICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybjsKIApAQCAt
MTA1MSw3ICsxMDMzLDcgQEAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxp
ZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwKICAgICAsIG1fbm9kZSgw
KQogICAgICwgbV9wb3NpdGlvbk5vZGUoMCkKIHsKLSAgICBBU1NFUlQobV9iZWhhdmlvciA9PSBU
ZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IgfHwgbV9iZWhhdmlvciA9PSBUZXh0SXRlcmF0b3JF
bmRzQXRFZGl0aW5nQm91bmRhcnkpOworICAgIEFTU0VSVChtX2JlaGF2aW9yID09IFRleHRJdGVy
YXRvckRlZmF1bHRCZWhhdmlvcik7CiAKICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybjsKQEAg
LTEwNzYsNyArMTA1OCw3IEBAIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBs
aWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2UqIHIsCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBzZXRDdXJyZW50Tm9kZShlbmROb2RlKTsKKyAgICBtX25vZGUgPSBlbmROb2Rl
OwogICAgIHNldFVwRnVsbHlDbGlwcGVkU3RhY2sobV9mdWxseUNsaXBwZWRTdGFjaywgbV9ub2Rl
KTsgICAgCiAgICAgbV9vZmZzZXQgPSBlbmRPZmZzZXQ7CiAgICAgbV9oYW5kbGVkTm9kZSA9IGZh
bHNlOwpAQCAtMTA5NSw3ICsxMDc3LDcgQEAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRv
cjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwKICAgICBt
X2xhc3RUZXh0Tm9kZSA9IDA7CiAgICAgbV9sYXN0Q2hhcmFjdGVyID0gJ1xuJzsKIAotICAgIG1f
cGFzdFN0YXJ0Tm9kZSA9IHByZXZpb3VzSW5Qb3N0T3JkZXJDcm9zc2luZ1NoYWRvd0JvdW5kYXJp
ZXMoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7CisgICAgbV9oYXZlUGFzc2VkU3RhcnROb2RlID0g
ZmFsc2U7CiAKICAgICBhZHZhbmNlKCk7CiB9CkBAIC0xMTA3LDcgKzEwODksNyBAQCB2b2lkIFNp
bXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2UoKQogICAgIG1fcG9zaXRpb25O
b2RlID0gMDsKICAgICBtX3RleHRMZW5ndGggPSAwOwogCi0gICAgd2hpbGUgKG1fbm9kZSAmJiBt
X25vZGUgIT0gbV9wYXN0U3RhcnROb2RlKSB7CisgICAgd2hpbGUgKG1fbm9kZSAmJiAhbV9oYXZl
UGFzc2VkU3RhcnROb2RlKSB7CiAgICAgICAgIC8vIERvbid0IGhhbmRsZSBub2RlIGlmIHdlIHN0
YXJ0IGl0ZXJhdGluZyBhdCBbbm9kZSwgMF0uCiAgICAgICAgIGlmICghbV9oYW5kbGVkTm9kZSAm
JiAhKG1fbm9kZSA9PSBtX2VuZE5vZGUgJiYgbV9lbmRPZmZzZXQgPT0gMCkpIHsKICAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX25vZGUtPnJlbmRlcmVyKCk7CkBAIC0xMTI0
LDggKzExMDYsMTAgQEAgdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZh
bmNlKCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBOb2Rl
KiBuZXh0ID0gbV9oYW5kbGVkQ2hpbGRyZW4gPyAwIDogbV9ub2RlLT5sYXN0Q2hpbGQoKTsKLSAg
ICAgICAgaWYgKCFuZXh0KSB7CisgICAgICAgIGlmICghbV9oYW5kbGVkQ2hpbGRyZW4gJiYgbV9u
b2RlLT5oYXNDaGlsZE5vZGVzKCkpIHsKKyAgICAgICAgICAgIG1fbm9kZSA9IG1fbm9kZS0+bGFz
dENoaWxkKCk7CisgICAgICAgICAgICBwdXNoRnVsbHlDbGlwcGVkU3RhdGUobV9mdWxseUNsaXBw
ZWRTdGFjaywgbV9ub2RlKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEV4aXQg
ZW1wdHkgY29udGFpbmVycyBhcyB3ZSBwYXNzIG92ZXIgdGhlbSBvciBjb250YWluZXJzCiAgICAg
ICAgICAgICAvLyB3aGVyZSBbY29udGFpbmVyLCAwXSBpcyB3aGVyZSB3ZSBzdGFydGVkIGl0ZXJh
dGluZy4KICAgICAgICAgICAgIGlmICghbV9oYW5kbGVkTm9kZQpAQCAtMTEzNywxMSArMTEyMSwx
MiBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2UoKQogICAg
ICAgICAgICAgICAgICAgICBtX2hhbmRsZWROb2RlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgbV9oYW5kbGVkQ2hpbGRyZW4gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgLy8gRXhpdCBhbGwgb3RoZXIgY29udGFpbmVycy4KICAg
ICAgICAgICAgIHdoaWxlICghbV9ub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICAg
ICAgICAgIGlmICghc2V0Q3VycmVudE5vZGUobV9ub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpKQor
ICAgICAgICAgICAgICAgIGlmICghYWR2YW5jZVJlc3BlY3RpbmdSYW5nZShtX25vZGUtPnBhcmVu
dE9ySG9zdE5vZGUoKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIG1fZnVsbHlDbGlwcGVkU3RhY2sucG9wKCk7CiAgICAgICAgICAgICAgICAgZXhpdE5vZGUo
KTsKQEAgLTExNTIsMTQgKzExMzcsMTIgQEAgdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0
ZXJhdG9yOjphZHZhbmNlKCkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIG5leHQgPSBtX25vZGUtPnByZXZpb3VzU2libGluZygpOwogICAgICAgICAgICAg
bV9mdWxseUNsaXBwZWRTdGFjay5wb3AoKTsKKyAgICAgICAgICAgIGlmIChhZHZhbmNlUmVzcGVj
dGluZ1JhbmdlKG1fbm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpKQorICAgICAgICAgICAgICAgIHB1
c2hGdWxseUNsaXBwZWRTdGF0ZShtX2Z1bGx5Q2xpcHBlZFN0YWNrLCBtX25vZGUpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fbm9kZSA9IDA7CiAgICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGlmIChtX25vZGUgJiYgc2V0Q3VycmVudE5vZGUobmV4dCkpCi0gICAgICAg
ICAgICBwdXNoRnVsbHlDbGlwcGVkU3RhdGUobV9mdWxseUNsaXBwZWRTdGFjaywgbV9ub2RlKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2xlYXJDdXJyZW50Tm9kZSgpOwogCiAgICAgICAg
IC8vIEZvciB0aGUgcHVycG9zZSBvZiB3b3JkIGJvdW5kYXJ5IGRldGVjdGlvbiwKICAgICAgICAg
Ly8gd2Ugc2hvdWxkIGl0ZXJhdGUgYWxsIHZpc2libGUgdGV4dCBhbmQgdHJhaWxpbmcgKGNvbGxh
cHNlZCkgd2hpdGVzcGFjZXMuIApAQCAtMTIzOSwyNiArMTIyMiwxNyBAQCB2b2lkIFNpbXBsaWZp
ZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmVtaXRDaGFyYWN0ZXIoVUNoYXIgYywgTm9kZSogbm9k
ZSwgaW50IHN0YQogICAgIG1fbGFzdENoYXJhY3RlciA9IGM7CiB9CiAKLWJvb2wgU2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6Y3Jvc3Nlc0VkaXRpbmdCb3VuZGFyeShOb2RlKiBub2Rl
KSBjb25zdAorYm9vbCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlUmVz
cGVjdGluZ1JhbmdlKE5vZGUqIG5leHQpCiB7Ci0gICAgcmV0dXJuIG1fbm9kZSAmJiBtX25vZGUt
PmlzQ29udGVudEVkaXRhYmxlKCkgIT0gbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKLX0KLQot
Ym9vbCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpzZXRDdXJyZW50Tm9kZShOb2Rl
KiBub2RlKQotewotICAgIGlmICghbm9kZSkKKyAgICBpZiAoIW5leHQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAobV9iZWhhdmlvciA9PSBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5n
Qm91bmRhcnkgJiYgY3Jvc3Nlc0VkaXRpbmdCb3VuZGFyeShub2RlKSkKKyAgICBtX2hhdmVQYXNz
ZWRTdGFydE5vZGUgfD0gbV9ub2RlID09IG1fc3RhcnROb2RlOworICAgIGlmIChtX2hhdmVQYXNz
ZWRTdGFydE5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX25vZGUgPSBub2RlOwor
ICAgIG1fbm9kZSA9IG5leHQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6Y2xlYXJDdXJyZW50Tm9kZSgpCi17Ci0gICAgbV9ub2Rl
ID0gMDsKLX0KLQogUGFzc1JlZlB0cjxSYW5nZT4gU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVy
YXRvcjo6cmFuZ2UoKSBjb25zdAogewogICAgIGlmIChtX3Bvc2l0aW9uTm9kZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCmluZGV4IDhiNjFhZmUyMTFiNGQzN2I3NGY5ZjRhNTgy
MzdlMWQyOGYyZGNmYjQuLmIwYzMxMGE2ZmM3ZTgwMTFiNGE0NGMyYWZjMWNkYTAyZGQ0MjQ5ZDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaApAQCAtNDEsOCArNDEsNyBAQCBl
bnVtIFRleHRJdGVyYXRvckJlaGF2aW9yIHsKICAgICBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3Rl
cnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyA9IDEgPDwgMCwKICAgICBUZXh0SXRlcmF0b3JF
bnRlcnNUZXh0Q29udHJvbHMgPSAxIDw8IDEsCiAgICAgVGV4dEl0ZXJhdG9yRW1pdHNUZXh0c1dp
dGhvdXRUcmFuc2NvZGluZyA9IDEgPDwgMiwKLSAgICBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5n
Qm91bmRhcnkgPSAxIDw8IDMsCi0gICAgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0
eSA9IDEgPDwgNAorICAgIFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHkgPSAxIDw8
IDMKIH07CiAgICAgCiAvLyBGSVhNRTogQ2FuJ3QgcmVhbGx5IGFuc3dlciB0aGlzIHF1ZXN0aW9u
IGNvcnJlY3RseSB3aXRob3V0IGtub3dpbmcgdGhlIHdoaXRlLXNwYWNlIG1vZGUuCkBAIC0yMDUs
OSArMjA0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZVJlcGxhY2VkRWxlbWVudCgpOwog
ICAgIGJvb2wgaGFuZGxlTm9uVGV4dE5vZGUoKTsKICAgICB2b2lkIGVtaXRDaGFyYWN0ZXIoVUNo
YXIsIE5vZGUqLCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQpOwotICAgIGJvb2wgY3Jv
c3Nlc0VkaXRpbmdCb3VuZGFyeShOb2RlKikgY29uc3Q7Ci0gICAgYm9vbCBzZXRDdXJyZW50Tm9k
ZShOb2RlKik7Ci0gICAgdm9pZCBjbGVhckN1cnJlbnROb2RlKCk7CisgICAgYm9vbCBhZHZhbmNl
UmVzcGVjdGluZ1JhbmdlKE5vZGUqKTsKIAogICAgIFRleHRJdGVyYXRvckJlaGF2aW9yIG1fYmVo
YXZpb3I7CiAgICAgLy8gQ3VycmVudCBwb3NpdGlvbiwgbm90IG5lY2Vzc2FyaWx5IG9mIHRoZSB0
ZXh0IGJlaW5nIHJldHVybmVkLCBidXQgcG9zaXRpb24KQEAgLTIzOCw5ICsyMzUsOSBAQCBwcml2
YXRlOgogICAgIAogICAgIC8vIFVzZWQgZm9yIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB0aGF0IGFy
ZW4ndCBpbiB0aGUgRE9NLCBzbyB3ZSBjYW4gcG9pbnQgYXQgdGhlbS4KICAgICBVQ2hhciBtX3Np
bmdsZUNoYXJhY3RlckJ1ZmZlcjsKLSAgICAKLSAgICAvLyBUaGUgbm9kZSBhZnRlciB0aGUgbGFz
dCBub2RlIHRoaXMgaXRlcmF0b3Igc2hvdWxkIHByb2Nlc3MuCi0gICAgTm9kZSogbV9wYXN0U3Rh
cnROb2RlOworCisgICAgLy8gV2hldGhlciBtX25vZGUgaGFzIGFkdmFuY2VkIGJleW9uZCB0aGUg
aXRlcmF0aW9uIHJhbmdlIChpLmUuIG1fc3RhcnROb2RlKS4KKyAgICBib29sIG1faGF2ZVBhc3Nl
ZFN0YXJ0Tm9kZTsKIH07CiAKIC8vIEJ1aWxkcyBvbiB0aGUgdGV4dCBpdGVyYXRvciwgYWRkaW5n
IGEgY2hhcmFjdGVyIHBvc2l0aW9uIHNvIHdlIGNhbiB3YWxrIG9uZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvdmlzaWJsZV91bml0cy5jcHAKaW5kZXggMWE1NTRiNzdjNDlkMzM3YzQzN2I2ZjhhODM0
ZTk0NjIxZDEwNGRiNy4uZGQyYTFlMDM0NmI0NzBmNjhiYjY3NzEyMzQ5NjFhZjVhOGM2ODYxZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCkBAIC04OSw3ICs4OSw3
IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoCiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9y
IGl0KHNlYXJjaFJhbmdlLmdldCgpLCBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkp
OworICAgIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UuZ2V0
KCkpOwogICAgIHVuc2lnbmVkIG5leHQgPSAwOwogICAgIGJvb2wgaW5UZXh0U2VjdXJpdHlNb2Rl
ID0gc3RhcnQubm9kZSgpICYmIHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBzdGFydC5ub2Rl
KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnRleHRTZWN1cml0eSgpICE9IFRTTk9ORTsKICAgICBi
b29sIG5lZWRNb3JlQ29udGV4dCA9IGZhbHNlOwpAQCAtMTI0LDcgKzEyNCw3IEBAIHN0YXRpYyBW
aXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMs
IEJvdW5kYXJ5U2VhcmNoCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24o
bm9kZSwgbmV4dCksIERPV05TVFJFQU0pOwogCiAgICAgLy8gVXNlIHRoZSBjaGFyYWN0ZXIgaXRl
cmF0b3IgdG8gdHJhbnNsYXRlIHRoZSBuZXh0IHZhbHVlIGludG8gYSBET00gcG9zaXRpb24uCi0g
ICAgQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KHNlYXJjaFJhbmdlLmdldCgpLCBU
ZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkpOworICAgIEJhY2t3YXJkc0NoYXJhY3Rl
ckl0ZXJhdG9yIGNoYXJJdChzZWFyY2hSYW5nZS5nZXQoKSk7CiAgICAgY2hhckl0LmFkdmFuY2Uo
c3RyaW5nLnNpemUoKSAtIHN1ZmZpeExlbmd0aCAtIG5leHQpOwogICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oY2hhckl0LnJhbmdlKCktPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80023</attachid>
            <date>2011-01-24 22:28:08 -0800</date>
            <delta_ts>2011-01-24 22:57:28 -0800</delta_ts>
            <desc>nicer factored test</desc>
            <filename>bug-51001-20110125172805.patch</filename>
            <type>text/plain</type>
            <size>16018</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2NGY3NTFlODAzZjI5NGNlYzY3YmMwMDQ0ZWJkZGFiMjlhYTEwOTVmLi41YWE3NzA1
NmFhMTRiYjQ0MWVlZmM0ZmI4YTFiMWI2ZGVkNzMwNmY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDEtMjAgIEJlbmphbWluIEthbG1hbiAgPGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIG9yIHNl
bGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVtcHMgdG8gc3RhcnQgb2YgY29udGVudGVkaXRh
YmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9ZmFsc2Ugc3BhbiBpcyBlbmNvdW50ZXJlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEwMDEKKwor
ICAgICAgICBBZGQgcmVncmVzc2lvbiB0ZXN0LgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rp
b24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnkt
d29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMS0xOCAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5z
dGVpbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1i
YWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVk
aXRhYmxlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTJiMGE5ZTc5OWIyM2VhOGQ5NmExNzFm
YTU5ZTI0N2E5ODNmZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorUEFTUyBmb3IgTFRSCitQQVNTIGZvciBSVEwKK2ZvbyBi
YXIgYmF6IHF1eCBxdXV4CivXqdeV1rzXqNeUINep15XWvNeo15Qg16nXlda816jXlCDXqdeV1rzX
qNeUINep15XWvNeo15QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9u
L2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0bWwgYi9MYXlvdXRU
ZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1l
ZGl0YWJsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxMzVkYjc0ZmFlNDBmNjJhMzRmNTlkMzlmMjllN2E2
NjU2MzBkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlv
bi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sCkBAIC0wLDAg
KzEsMzkgQEAKKzwhRE9DVFlQRSBodG1sPgorPHByZSBpZD0ibG9nIj48L3ByZT4KKworPGRpdiBp
ZD0ibHRyVGV4dENvbnRhaW5lciIgY29udGVudGVkaXRhYmxlPmZvbyBiYXIgPHNwYW4gY29udGVu
dGVkaXRhYmxlPWZhbHNlPmJhejwvc3Bhbj4gcXV4IHF1dXg8L2Rpdj4KKzxkaXYgaWQ9InJ0bFRl
eHRDb250YWluZXIiIGNvbnRlbnRlZGl0YWJsZSBkaXI9InJ0bCI+JiN4MDVFOTsmI3gwNUQ1OyYj
eDA1QkM7JiN4MDVFODsmI3gwNUQ0OyAmI3gwNUU5OyYjeDA1RDU7JiN4MDVCQzsmI3gwNUU4OyYj
eDA1RDQ7Cis8c3BhbiBjb250ZW50ZWRpdGFibGU9ZmFsc2U+JiN4MDVFOTsmI3gwNUQ1OyYjeDA1
QkM7JiN4MDVFODsmI3gwNUQ0Ozwvc3Bhbj4KKyYjeDA1RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1
RTg7JiN4MDVENDsgJiN4MDVFOTsmI3gwNUQ1OyYjeDA1QkM7JiN4MDVFODsmI3gwNUQ0OzwvZGl2
PgorCis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKHMpIHsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImxvZyIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMgKyAiXG4iKSk7
Cit9CisKK2Z1bmN0aW9uIHBsYWNlQ3Vyc29yQWZ0ZXJGaXJzdE5vbmVkaXRhYmxlQ2hpbGQoY29u
dGFpbmVyKSB7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udGFpbmVyLmNoaWxkTm9kZXMubGVu
Z3RoOyBpKyspIHsKKyAgICB2YXIgbm9kZSA9IGNvbnRhaW5lci5jaGlsZE5vZGVzW2ldOworICAg
IGlmIChub2RlLmlzQ29udGVudEVkaXRhYmxlICE9PSB1bmRlZmluZWQgJiYgIW5vZGUuaXNDb250
ZW50RWRpdGFibGUpIHsKKyAgICAgIGdldFNlbGVjdGlvbigpLnNldFBvc2l0aW9uKG5vZGUubmV4
dFNpYmxpbmcsIDApOworICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorICB9CisgIHRocm93ICJD
b3VsZG4ndCBmaW5kIG5vbmVkaXRhYmxlIGNoaWxkIG9mICIgKyBjb250YWluZXIudGV4dENvbnRl
bnQ7Cit9CisKK2Z1bmN0aW9uIGV4dGVuZEJhY2t3YXJkQnlXb3JkKGNvbnRhaW5lciwgYmlkaU5h
bWUpIHsKKyAgbm9uZWRpdGFibGVDaGlsZCA9IHBsYWNlQ3Vyc29yQWZ0ZXJGaXJzdE5vbmVkaXRh
YmxlQ2hpbGQoY29udGFpbmVyKTsKKyAgZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCJleHRlbmQiLCAi
YmFja3dhcmQiLCAid29yZCIpOworICBpZiAoZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0g
bm9uZWRpdGFibGVDaGlsZC50ZXh0Q29udGVudCkKKyAgICBsb2coIlBBU1MgZm9yICIgKyBiaWRp
TmFtZSk7CisgIGVsc2UKKyAgICBsb2coIkZBSUwgZm9yICIgKyBiaWRpTmFtZSArICIsIHNlbGVj
dGlvbiBpcyBcIiIgKyBnZXRTZWxlY3Rpb24oKSArICJcIiBidXQgc2hvdWxkIGJlIFwiIiArIG5v
bmVkaXRhYmxlQ2hpbGQudGV4dENvbnRlbnQgKyAiXCIiKTsKK30KKworZXh0ZW5kQmFja3dhcmRC
eVdvcmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImx0clRleHRDb250YWluZXIiKSwgIkxUUiIp
OworZXh0ZW5kQmFja3dhcmRCeVdvcmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJ0bFRleHRD
b250YWluZXIiKSwgIlJUTCIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0PgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWZvcndhcmQtYnktd29y
ZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24v
ZXh0ZW5kLWZvcndhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQyODZkNDhkNzA5NTg5Mjg5NTgzMTY4NTIxNDAzNmYzOGNjMDY5ZmUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtZm9yd2FyZC1ieS13b3Jk
LW92ZXItbm9uLWVkaXRhYmxlLmh0bWwKQEAgLTAsMCArMSw0MCBAQAorPCFET0NUWVBFIGh0bWw+
Cis8cHJlIGlkPSJsb2ciPjwvcHJlPgorCis8ZGl2IGlkPSJsdHJUZXh0Q29udGFpbmVyIiBjb250
ZW50ZWRpdGFibGU+Zm9vIGJhciA8c3BhbiBjb250ZW50ZWRpdGFibGU9ZmFsc2U+YmF6PC9zcGFu
PiBxdXggcXV1eDwvZGl2PgorPGRpdiBpZD0icnRsVGV4dENvbnRhaW5lciIgY29udGVudGVkaXRh
YmxlIGRpcj0icnRsIj4mI3gwNUU5OyYjeDA1RDU7JiN4MDVCQzsmI3gwNUU4OyYjeDA1RDQ7ICYj
eDA1RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1RTg7JiN4MDVENDsKKzxzcGFuIGNvbnRlbnRlZGl0
YWJsZT1mYWxzZT4mI3gwNUU5OyYjeDA1RDU7JiN4MDVCQzsmI3gwNUU4OyYjeDA1RDQ7PC9zcGFu
PgorJiN4MDVFOTsmI3gwNUQ1OyYjeDA1QkM7JiN4MDVFODsmI3gwNUQ0OyAmI3gwNUU5OyYjeDA1
RDU7JiN4MDVCQzsmI3gwNUU4OyYjeDA1RDQ7PC9kaXY+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBs
b2cocykgeworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nIikuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUocyArICJcbiIpKTsKK30KKworZnVuY3Rpb24gcGxhY2VDdXJz
b3JCZWZvcmVGaXJzdE5vbmVkaXRhYmxlQ2hpbGQoY29udGFpbmVyKSB7CisgIGZvciAodmFyIGkg
PSAwOyBpIDwgY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgbm9k
ZSA9IGNvbnRhaW5lci5jaGlsZE5vZGVzW2ldOworICAgIGlmIChub2RlLmlzQ29udGVudEVkaXRh
YmxlICE9PSB1bmRlZmluZWQgJiYgIW5vZGUuaXNDb250ZW50RWRpdGFibGUpIHsKKyAgICAgIHZh
ciBwcmV2aW91cyA9IG5vZGUucHJldmlvdXNTaWJsaW5nOworICAgICAgZ2V0U2VsZWN0aW9uKCku
c2V0UG9zaXRpb24ocHJldmlvdXMsIHByZXZpb3VzLnRleHRDb250ZW50Lmxlbmd0aCk7CisgICAg
ICByZXR1cm4gbm9kZTsKKyAgICB9CisgIH0KKyAgdGhyb3cgIkNvdWxkbid0IGZpbmQgbm9uZWRp
dGFibGUgY2hpbGQgb2YgIiArIGNvbnRhaW5lci50ZXh0Q29udGVudDsKK30KKworZnVuY3Rpb24g
ZXh0ZW5kRm9yd2FyZEJ5V29yZChjb250YWluZXIsIGJpZGlOYW1lKSB7CisgIG5vbmVkaXRhYmxl
Q2hpbGQgPSBwbGFjZUN1cnNvckJlZm9yZUZpcnN0Tm9uZWRpdGFibGVDaGlsZChjb250YWluZXIp
OworICBnZXRTZWxlY3Rpb24oKS5tb2RpZnkoImV4dGVuZCIsICJmb3J3YXJkIiwgIndvcmQiKTsK
KyAgaWYgKGdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IG5vbmVkaXRhYmxlQ2hpbGQudGV4
dENvbnRlbnQpCisgICAgbG9nKCJQQVNTIGZvciAiICsgYmlkaU5hbWUpOworICBlbHNlCisgICAg
bG9nKCJGQUlMIGZvciAiICsgYmlkaU5hbWUgKyAiLCBzZWxlY3Rpb24gaXMgXCIiICsgZ2V0U2Vs
ZWN0aW9uKCkgKyAiXCIgYnV0IHNob3VsZCBiZSBcIiIgKyBub25lZGl0YWJsZUNoaWxkLnRleHRD
b250ZW50ICsgIlwiIik7Cit9CisKK2V4dGVuZEZvcndhcmRCeVdvcmQoZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImx0clRleHRDb250YWluZXIiKSwgIkxUUiIpOworZXh0ZW5kRm9yd2FyZEJ5V29y
ZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicnRsVGV4dENvbnRhaW5lciIpLCAiUlRMIik7CisK
K2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODE1OTY5ZGEyMTFhZmJm
YjJlMDdmZGI0M2EyMDQ1ODJkNGFiZjQyMi4uZDhkODhkY2Q4MGRhNjZkOWJmMjNmMzI0ZTBjMTE5
YmFjMmI4OTIyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTAxLTIwICBCZW5q
YW1pbiBLYWxtYW4gIDxrYWxtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmluZyBvciBzZWxlY3RpbmcgYmFja3dhcmRz
IGJ5IHdvcmRzIGp1bXBzIHRvIHN0YXJ0IG9mIGNvbnRlbnRlZGl0YWJsZSByZWdpb24gaWYgY29u
dGVudGVkaXRhYmxlPWZhbHNlIHNwYW4gaXMgZW5jb3VudGVyZWQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxMDAxCisKKyAgICAgICAgVGVzdDogZWRp
dGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUu
aHRtbAorCisgICAgICAgIFJldmVydCBzb21lIHByZXZpb3VzIGNoYW5nZXMgKHRoZSBUZXh0SXRl
cmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkgdGV4dCBpdGVyYXRpb24gYmVoYXZpb3VyKSB3aGlj
aCBjYXVzZWQgdGhpcworICAgICAgICBidWcgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgZml4IFNp
bXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IncyBpdGVyYXRpb24gcmFuZ2UgY2hlY2sgYXMg
YW4gYWx0ZXJuYXRpdmUgd2F5IHRvCisgICAgICAgIGZpeCB0aGUgYnVnIHRoYXQgaXQgb3JpZ2lu
YWxseSBzb2x2ZWQuCisKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcik6IFJlbW92ZSByZWZlcmVu
Y2VzIHRvIFRleHRJdGVyYXRpb25FbmRzQXRFZGl0aW5nIGJvdW5kYXJ5LgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJk
c1RleHRJdGVyYXRvcik6IFJlbW92ZSBtX3Bhc3RTdGFydE5vZGUgYXMgdGhlCisgICAgICAgIG1l
Y2hhbmlzbSBmb3IgaXRlcmF0aW9uIHJhbmdlIGNoZWNraW5nLCBhbmQgdXNlIGEgZmxhZyBtX2hh
dmVQYXNzZWRTdGFydE5vZGUgaW5zdGVhZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZpZWRC
YWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2UpOiBDbGVhbiB1cCwgdXNlIGFkdmFuY2VUb0lm
Tm9uTnVsbEFuZFdpdGhpbiByYW5nZSBhbmQKKyAgICAgICAgbV9oYXZlUGFzc2VkU3RhcnROb2Rl
IGZvciBpdGVyYXRpb24gcmFuZ2UgY2hlY2tpbmcgcmF0aGVyIHRoYW4gbV9wYXN0U3RhcnROb2Rl
LgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2
YW5jZVJlc3BlY3RpbmdSYW5nZSk6IFRoZSBuZXcgd2F5IG9mIG1vZGlmeWluZyBtX25vZGUKKyAg
ICAgICAgd2hpY2ggdXBkYXRlcyBtX2hhdmVQYXNzZWRTdGFydE5vZGUgYW5kIHJlZnVzZXMgdG8g
Y29udGludWUgd2hlbiBpdCBiZWNvbWVzIHRydWUuCisgICAgICAgICogZWRpdGluZy9UZXh0SXRl
cmF0b3IuaDogUmVtb3ZlIFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSwgdXBkYXRl
IGZvciBuZXcgYW5kIHJlbW92ZWQgcHJvdG90eXBlcyBhbmQKKyAgICAgICAgbWVtYmVyIHZhcmlh
Ymxlcy4KKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cHJldmlvdXNCb3VuZGFyeSk6IFJlbW92ZSByZWZlcmVuY2VzIHRvIFRleHRJdGVyYXRv
ckVuZHNBdEVkaXRpbmdCb3VuZGFyeS4KKwogMjAxMS0wMS0xOCAgVmljdG9yaWEgS2lyc3QgIDx2
cmtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUnVzc2VsbC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCBjMjRiY2IyNDI2MTVl
MTRlYTlhZTRmODA0YmVmNDFmMjU0YTZhNjExLi41YTNiMzE1MThhZGY0ODMxZWNjNTFhN2RlZWY1
ZGY3MGQwMjE4M2UyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVy
YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBA
IC0xOTMsMjEgKzE5Myw2IEBAIHN0YXRpYyBOb2RlKiBuZXh0SW5QcmVPcmRlckNyb3NzaW5nU2hh
ZG93Qm91bmRhcmllcyhOb2RlKiByYW5nZUVuZENvbnRhaW5lciwgaW50CiAgICAgcmV0dXJuIDA7
CiB9CiAKLXN0YXRpYyBOb2RlKiBwcmV2aW91c0luUG9zdE9yZGVyQ3Jvc3NpbmdTaGFkb3dCb3Vu
ZGFyaWVzKE5vZGUqIHJhbmdlU3RhcnRDb250YWluZXIsIGludCByYW5nZVN0YXJ0T2Zmc2V0KQot
ewotICAgIGlmICghcmFuZ2VTdGFydENvbnRhaW5lcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
aWYgKHJhbmdlU3RhcnRPZmZzZXQgPiAwICYmICFyYW5nZVN0YXJ0Q29udGFpbmVyLT5vZmZzZXRJ
bkNoYXJhY3RlcnMoKSkgewotICAgICAgICBpZiAoTm9kZSogcHJldmlvdXMgPSByYW5nZVN0YXJ0
Q29udGFpbmVyLT5jaGlsZE5vZGUocmFuZ2VTdGFydE9mZnNldCAtIDEpKQotICAgICAgICAgICAg
cmV0dXJuIHByZXZpb3VzOwotICAgIH0KLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZVN0YXJ0
Q29udGFpbmVyOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7Ci0gICAg
ICAgIGlmIChOb2RlKiBwcmV2aW91cyA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKQotICAgICAg
ICAgICAgcmV0dXJuIHByZXZpb3VzOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQogLy8gLS0t
LS0tLS0KIAogc3RhdGljIGlubGluZSBib29sIGZ1bGx5Q2xpcHNDb250ZW50cyhOb2RlKiBub2Rl
KQpAQCAtMjg5LDkgKzI3NCw2IEBAIFRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKGNvbnN0IFJh
bmdlKiByLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKICAgICAsIG1faGFuZGxlZEZp
cnN0TGV0dGVyKGZhbHNlKQogICAgICwgbV9pZ25vcmVzU3R5bGVWaXNpYmlsaXR5KGJlaGF2aW9y
ICYgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSkKIHsKLSAgICAvLyBGSVhNRTog
c2hvdWxkIHN1cHBvcnQgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5IGh0dHA6Ly93
ZWJraXQub3JnL2IvNDM2MDkKLSAgICBBU1NFUlQoYmVoYXZpb3IgIT0gVGV4dEl0ZXJhdG9yRW5k
c0F0RWRpdGluZ0JvdW5kYXJ5KTsKLQogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwogCkBA
IC0xMDUxLDcgKzEwMzMsNyBAQCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1w
bGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLAogICAgICwgbV9ub2Rl
KDApCiAgICAgLCBtX3Bvc2l0aW9uTm9kZSgwKQogewotICAgIEFTU0VSVChtX2JlaGF2aW9yID09
IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciB8fCBtX2JlaGF2aW9yID09IFRleHRJdGVyYXRv
ckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAgQVNTRVJUKG1fYmVoYXZpb3IgPT0gVGV4dEl0
ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKIAogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwpA
QCAtMTA3Niw3ICsxMDU4LDcgQEAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2lt
cGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHNldEN1cnJlbnROb2RlKGVuZE5vZGUpOworICAgIG1fbm9kZSA9IGVuZE5v
ZGU7CiAgICAgc2V0VXBGdWxseUNsaXBwZWRTdGFjayhtX2Z1bGx5Q2xpcHBlZFN0YWNrLCBtX25v
ZGUpOyAgICAKICAgICBtX29mZnNldCA9IGVuZE9mZnNldDsKICAgICBtX2hhbmRsZWROb2RlID0g
ZmFsc2U7CkBAIC0xMDk1LDcgKzEwNzcsNyBAQCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJh
dG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLAogICAg
IG1fbGFzdFRleHROb2RlID0gMDsKICAgICBtX2xhc3RDaGFyYWN0ZXIgPSAnXG4nOwogCi0gICAg
bV9wYXN0U3RhcnROb2RlID0gcHJldmlvdXNJblBvc3RPcmRlckNyb3NzaW5nU2hhZG93Qm91bmRh
cmllcyhzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTsKKyAgICBtX2hhdmVQYXNzZWRTdGFydE5vZGUg
PSBmYWxzZTsKIAogICAgIGFkdmFuY2UoKTsKIH0KQEAgLTExMDcsNyArMTA4OSw3IEBAIHZvaWQg
U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiAgICAgbV9wb3NpdGlv
bk5vZGUgPSAwOwogICAgIG1fdGV4dExlbmd0aCA9IDA7CiAKLSAgICB3aGlsZSAobV9ub2RlICYm
IG1fbm9kZSAhPSBtX3Bhc3RTdGFydE5vZGUpIHsKKyAgICB3aGlsZSAobV9ub2RlICYmICFtX2hh
dmVQYXNzZWRTdGFydE5vZGUpIHsKICAgICAgICAgLy8gRG9uJ3QgaGFuZGxlIG5vZGUgaWYgd2Ug
c3RhcnQgaXRlcmF0aW5nIGF0IFtub2RlLCAwXS4KICAgICAgICAgaWYgKCFtX2hhbmRsZWROb2Rl
ICYmICEobV9ub2RlID09IG1fZW5kTm9kZSAmJiBtX2VuZE9mZnNldCA9PSAwKSkgewogICAgICAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fbm9kZS0+cmVuZGVyZXIoKTsKQEAgLTEx
MjQsOCArMTEwNiwxMCBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFk
dmFuY2UoKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIE5v
ZGUqIG5leHQgPSBtX2hhbmRsZWRDaGlsZHJlbiA/IDAgOiBtX25vZGUtPmxhc3RDaGlsZCgpOwot
ICAgICAgICBpZiAoIW5leHQpIHsKKyAgICAgICAgaWYgKCFtX2hhbmRsZWRDaGlsZHJlbiAmJiBt
X25vZGUtPmhhc0NoaWxkTm9kZXMoKSkgeworICAgICAgICAgICAgbV9ub2RlID0gbV9ub2RlLT5s
YXN0Q2hpbGQoKTsKKyAgICAgICAgICAgIHB1c2hGdWxseUNsaXBwZWRTdGF0ZShtX2Z1bGx5Q2xp
cHBlZFN0YWNrLCBtX25vZGUpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRXhp
dCBlbXB0eSBjb250YWluZXJzIGFzIHdlIHBhc3Mgb3ZlciB0aGVtIG9yIGNvbnRhaW5lcnMKICAg
ICAgICAgICAgIC8vIHdoZXJlIFtjb250YWluZXIsIDBdIGlzIHdoZXJlIHdlIHN0YXJ0ZWQgaXRl
cmF0aW5nLgogICAgICAgICAgICAgaWYgKCFtX2hhbmRsZWROb2RlCkBAIC0xMTM3LDExICsxMTIx
LDEyIEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiAg
ICAgICAgICAgICAgICAgICAgIG1faGFuZGxlZE5vZGUgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICBtX2hhbmRsZWRDaGlsZHJlbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBFeGl0IGFsbCBvdGhlciBjb250YWluZXJzLgog
ICAgICAgICAgICAgd2hpbGUgKCFtX25vZGUtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFzZXRDdXJyZW50Tm9kZShtX25vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkp
CisgICAgICAgICAgICAgICAgaWYgKCFhZHZhbmNlUmVzcGVjdGluZ1JhbmdlKG1fbm9kZS0+cGFy
ZW50T3JIb3N0Tm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgbV9mdWxseUNsaXBwZWRTdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgICBleGl0Tm9k
ZSgpOwpAQCAtMTE1MiwxNCArMTEzNywxMiBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0
SXRlcmF0b3I6OmFkdmFuY2UoKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgbmV4dCA9IG1fbm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgICAg
ICBtX2Z1bGx5Q2xpcHBlZFN0YWNrLnBvcCgpOworICAgICAgICAgICAgaWYgKGFkdmFuY2VSZXNw
ZWN0aW5nUmFuZ2UobV9ub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkpCisgICAgICAgICAgICAgICAg
cHVzaEZ1bGx5Q2xpcHBlZFN0YXRlKG1fZnVsbHlDbGlwcGVkU3RhY2ssIG1fbm9kZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9ub2RlID0gMDsKICAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaWYgKG1fbm9kZSAmJiBzZXRDdXJyZW50Tm9kZShuZXh0KSkKLSAgICAg
ICAgICAgIHB1c2hGdWxseUNsaXBwZWRTdGF0ZShtX2Z1bGx5Q2xpcHBlZFN0YWNrLCBtX25vZGUp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjbGVhckN1cnJlbnROb2RlKCk7CiAKICAgICAg
ICAgLy8gRm9yIHRoZSBwdXJwb3NlIG9mIHdvcmQgYm91bmRhcnkgZGV0ZWN0aW9uLAogICAgICAg
ICAvLyB3ZSBzaG91bGQgaXRlcmF0ZSBhbGwgdmlzaWJsZSB0ZXh0IGFuZCB0cmFpbGluZyAoY29s
bGFwc2VkKSB3aGl0ZXNwYWNlcy4gCkBAIC0xMjM5LDI2ICsxMjIyLDE3IEBAIHZvaWQgU2ltcGxp
ZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6ZW1pdENoYXJhY3RlcihVQ2hhciBjLCBOb2RlKiBu
b2RlLCBpbnQgc3RhCiAgICAgbV9sYXN0Q2hhcmFjdGVyID0gYzsKIH0KIAotYm9vbCBTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpjcm9zc2VzRWRpdGluZ0JvdW5kYXJ5KE5vZGUqIG5v
ZGUpIGNvbnN0Citib29sIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2VS
ZXNwZWN0aW5nUmFuZ2UoTm9kZSogbmV4dCkKIHsKLSAgICByZXR1cm4gbV9ub2RlICYmIG1fbm9k
ZS0+aXNDb250ZW50RWRpdGFibGUoKSAhPSBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwotfQot
Ci1ib29sIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OnNldEN1cnJlbnROb2RlKE5v
ZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlKQorICAgIGlmICghbmV4dCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmIChtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckVuZHNBdEVkaXRp
bmdCb3VuZGFyeSAmJiBjcm9zc2VzRWRpdGluZ0JvdW5kYXJ5KG5vZGUpKQorICAgIG1faGF2ZVBh
c3NlZFN0YXJ0Tm9kZSB8PSBtX25vZGUgPT0gbV9zdGFydE5vZGU7CisgICAgaWYgKG1faGF2ZVBh
c3NlZFN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbm9kZSA9IG5vZGU7
CisgICAgbV9ub2RlID0gbmV4dDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpjbGVhckN1cnJlbnROb2RlKCkKLXsKLSAgICBtX25v
ZGUgPSAwOwotfQotCiBQYXNzUmVmUHRyPFJhbmdlPiBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0
ZXJhdG9yOjpyYW5nZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcG9zaXRpb25Ob2RlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKaW5kZXggOGI2MWFmZTIxMWI0ZDM3Yjc0ZjlmNGE1
ODIzN2UxZDI4ZjJkY2ZiNC4uYjBjMzEwYTZmYzdlODAxMWI0YTQ0YzJhZmMxY2RhMDJkZDQyNDlk
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCkBAIC00MSw4ICs0MSw3IEBA
IGVudW0gVGV4dEl0ZXJhdG9yQmVoYXZpb3IgewogICAgIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFj
dGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zID0gMSA8PCAwLAogICAgIFRleHRJdGVyYXRv
ckVudGVyc1RleHRDb250cm9scyA9IDEgPDwgMSwKICAgICBUZXh0SXRlcmF0b3JFbWl0c1RleHRz
V2l0aG91dFRyYW5zY29kaW5nID0gMSA8PCAyLAotICAgIFRleHRJdGVyYXRvckVuZHNBdEVkaXRp
bmdCb3VuZGFyeSA9IDEgPDwgMywKLSAgICBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmls
aXR5ID0gMSA8PCA0CisgICAgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSA9IDEg
PDwgMwogfTsKICAgICAKIC8vIEZJWE1FOiBDYW4ndCByZWFsbHkgYW5zd2VyIHRoaXMgcXVlc3Rp
b24gY29ycmVjdGx5IHdpdGhvdXQga25vd2luZyB0aGUgd2hpdGUtc3BhY2UgbW9kZS4KQEAgLTIw
NSw5ICsyMDQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlUmVwbGFjZWRFbGVtZW50KCk7
CiAgICAgYm9vbCBoYW5kbGVOb25UZXh0Tm9kZSgpOwogICAgIHZvaWQgZW1pdENoYXJhY3RlcihV
Q2hhciwgTm9kZSosIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCk7Ci0gICAgYm9vbCBj
cm9zc2VzRWRpdGluZ0JvdW5kYXJ5KE5vZGUqKSBjb25zdDsKLSAgICBib29sIHNldEN1cnJlbnRO
b2RlKE5vZGUqKTsKLSAgICB2b2lkIGNsZWFyQ3VycmVudE5vZGUoKTsKKyAgICBib29sIGFkdmFu
Y2VSZXNwZWN0aW5nUmFuZ2UoTm9kZSopOwogCiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgbV9i
ZWhhdmlvcjsKICAgICAvLyBDdXJyZW50IHBvc2l0aW9uLCBub3QgbmVjZXNzYXJpbHkgb2YgdGhl
IHRleHQgYmVpbmcgcmV0dXJuZWQsIGJ1dCBwb3NpdGlvbgpAQCAtMjM4LDkgKzIzNSw5IEBAIHBy
aXZhdGU6CiAgICAgCiAgICAgLy8gVXNlZCBmb3Igd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHRoYXQg
YXJlbid0IGluIHRoZSBET00sIHNvIHdlIGNhbiBwb2ludCBhdCB0aGVtLgogICAgIFVDaGFyIG1f
c2luZ2xlQ2hhcmFjdGVyQnVmZmVyOwotICAgIAotICAgIC8vIFRoZSBub2RlIGFmdGVyIHRoZSBs
YXN0IG5vZGUgdGhpcyBpdGVyYXRvciBzaG91bGQgcHJvY2Vzcy4KLSAgICBOb2RlKiBtX3Bhc3RT
dGFydE5vZGU7CisKKyAgICAvLyBXaGV0aGVyIG1fbm9kZSBoYXMgYWR2YW5jZWQgYmV5b25kIHRo
ZSBpdGVyYXRpb24gcmFuZ2UgKGkuZS4gbV9zdGFydE5vZGUpLgorICAgIGJvb2wgbV9oYXZlUGFz
c2VkU3RhcnROb2RlOwogfTsKIAogLy8gQnVpbGRzIG9uIHRoZSB0ZXh0IGl0ZXJhdG9yLCBhZGRp
bmcgYSBjaGFyYWN0ZXIgcG9zaXRpb24gc28gd2UgY2FuIHdhbGsgb25lCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAppbmRleCAxYTU1NGI3N2M0OWQzMzdjNDM3YjZmOGE4
MzRlOTQ2MjFkMTA0ZGI3Li5kZDJhMWUwMzQ2YjQ3MGY2OGJiNjc3MTIzNDk2MWFmNWE4YzY4NjFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKQEAgLTg5LDcgKzg5
LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oKTsKIAotICAgIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0
b3IgaXQoc2VhcmNoUmFuZ2UuZ2V0KCksIFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFy
eSk7CisgICAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5n
ZXQoKSk7CiAgICAgdW5zaWduZWQgbmV4dCA9IDA7CiAgICAgYm9vbCBpblRleHRTZWN1cml0eU1v
ZGUgPSBzdGFydC5ub2RlKCkgJiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpICYmIHN0YXJ0Lm5v
ZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkgIT0gVFNOT05FOwogICAg
IGJvb2wgbmVlZE1vcmVDb250ZXh0ID0gZmFsc2U7CkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGlj
IFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
YywgQm91bmRhcnlTZWFyY2gKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlv
bihub2RlLCBuZXh0KSwgRE9XTlNUUkVBTSk7CiAKICAgICAvLyBVc2UgdGhlIGNoYXJhY3RlciBp
dGVyYXRvciB0byB0cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlvbi4K
LSAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UuZ2V0KCks
IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAgQmFja3dhcmRzQ2hhcmFj
dGVySXRlcmF0b3IgY2hhckl0KHNlYXJjaFJhbmdlLmdldCgpKTsKICAgICBjaGFySXQuYWR2YW5j
ZShzdHJpbmcuc2l6ZSgpIC0gc3VmZml4TGVuZ3RoIC0gbmV4dCk7CiAgICAgcmV0dXJuIFZpc2li
bGVQb3NpdGlvbihjaGFySXQucmFuZ2UoKS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7CiB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80024</attachid>
            <date>2011-01-24 22:57:37 -0800</date>
            <delta_ts>2011-01-26 17:15:58 -0800</delta_ts>
            <desc>nicer factored test (2)</desc>
            <filename>bug-51001-20110125175734.patch</filename>
            <type>text/plain</type>
            <size>13931</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2NGY3NTFlODAzZjI5NGNlYzY3YmMwMDQ0ZWJkZGFiMjlhYTEwOTVmLi41YWE3NzA1
NmFhMTRiYjQ0MWVlZmM0ZmI4YTFiMWI2ZGVkNzMwNmY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDEtMjAgIEJlbmphbWluIEthbG1hbiAgPGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIG9yIHNl
bGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVtcHMgdG8gc3RhcnQgb2YgY29udGVudGVkaXRh
YmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9ZmFsc2Ugc3BhbiBpcyBlbmNvdW50ZXJlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEwMDEKKwor
ICAgICAgICBBZGQgcmVncmVzc2lvbiB0ZXN0LgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rp
b24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnkt
d29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMS0xOCAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5z
dGVpbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1i
YWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVk
aXRhYmxlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTJiMGE5ZTc5OWIyM2VhOGQ5NmExNzFm
YTU5ZTI0N2E5ODNmZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorUEFTUyBmb3IgTFRSCitQQVNTIGZvciBSVEwKK2ZvbyBi
YXIgYmF6IHF1eCBxdXV4CivXqdeV1rzXqNeUINep15XWvNeo15Qg16nXlda816jXlCDXqdeV1rzX
qNeUINep15XWvNeo15QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9u
L2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0bWwgYi9MYXlvdXRU
ZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1l
ZGl0YWJsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxMzVkYjc0ZmFlNDBmNjJhMzRmNTlkMzlmMjllN2E2
NjU2MzBkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlv
bi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sCkBAIC0wLDAg
KzEsMzkgQEAKKzwhRE9DVFlQRSBodG1sPgorPHByZSBpZD0ibG9nIj48L3ByZT4KKworPGRpdiBp
ZD0ibHRyVGV4dENvbnRhaW5lciIgY29udGVudGVkaXRhYmxlPmZvbyBiYXIgPHNwYW4gY29udGVu
dGVkaXRhYmxlPWZhbHNlPmJhejwvc3Bhbj4gcXV4IHF1dXg8L2Rpdj4KKzxkaXYgaWQ9InJ0bFRl
eHRDb250YWluZXIiIGNvbnRlbnRlZGl0YWJsZSBkaXI9InJ0bCI+JiN4MDVFOTsmI3gwNUQ1OyYj
eDA1QkM7JiN4MDVFODsmI3gwNUQ0OyAmI3gwNUU5OyYjeDA1RDU7JiN4MDVCQzsmI3gwNUU4OyYj
eDA1RDQ7Cis8c3BhbiBjb250ZW50ZWRpdGFibGU9ZmFsc2U+JiN4MDVFOTsmI3gwNUQ1OyYjeDA1
QkM7JiN4MDVFODsmI3gwNUQ0Ozwvc3Bhbj4KKyYjeDA1RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1
RTg7JiN4MDVENDsgJiN4MDVFOTsmI3gwNUQ1OyYjeDA1QkM7JiN4MDVFODsmI3gwNUQ0OzwvZGl2
PgorCis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKHMpIHsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImxvZyIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMgKyAiXG4iKSk7
Cit9CisKK2Z1bmN0aW9uIHBsYWNlQ3Vyc29yQWZ0ZXJGaXJzdE5vbmVkaXRhYmxlQ2hpbGQoY29u
dGFpbmVyKSB7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udGFpbmVyLmNoaWxkTm9kZXMubGVu
Z3RoOyBpKyspIHsKKyAgICB2YXIgbm9kZSA9IGNvbnRhaW5lci5jaGlsZE5vZGVzW2ldOworICAg
IGlmIChub2RlLmlzQ29udGVudEVkaXRhYmxlICE9PSB1bmRlZmluZWQgJiYgIW5vZGUuaXNDb250
ZW50RWRpdGFibGUpIHsKKyAgICAgIGdldFNlbGVjdGlvbigpLnNldFBvc2l0aW9uKG5vZGUubmV4
dFNpYmxpbmcsIDApOworICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorICB9CisgIHRocm93ICJD
b3VsZG4ndCBmaW5kIG5vbmVkaXRhYmxlIGNoaWxkIG9mICIgKyBjb250YWluZXIudGV4dENvbnRl
bnQ7Cit9CisKK2Z1bmN0aW9uIGV4dGVuZEJhY2t3YXJkQnlXb3JkKGNvbnRhaW5lciwgYmlkaU5h
bWUpIHsKKyAgbm9uZWRpdGFibGVDaGlsZCA9IHBsYWNlQ3Vyc29yQWZ0ZXJGaXJzdE5vbmVkaXRh
YmxlQ2hpbGQoY29udGFpbmVyKTsKKyAgZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCJleHRlbmQiLCAi
YmFja3dhcmQiLCAid29yZCIpOworICBpZiAoZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0g
bm9uZWRpdGFibGVDaGlsZC50ZXh0Q29udGVudCkKKyAgICBsb2coIlBBU1MgZm9yICIgKyBiaWRp
TmFtZSk7CisgIGVsc2UKKyAgICBsb2coIkZBSUwgZm9yICIgKyBiaWRpTmFtZSArICIsIHNlbGVj
dGlvbiBpcyBcIiIgKyBnZXRTZWxlY3Rpb24oKSArICJcIiBidXQgc2hvdWxkIGJlIFwiIiArIG5v
bmVkaXRhYmxlQ2hpbGQudGV4dENvbnRlbnQgKyAiXCIiKTsKK30KKworZXh0ZW5kQmFja3dhcmRC
eVdvcmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImx0clRleHRDb250YWluZXIiKSwgIkxUUiIp
OworZXh0ZW5kQmFja3dhcmRCeVdvcmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJ0bFRleHRD
b250YWluZXIiKSwgIlJUTCIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0PgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDgxNTk2OWRhMjExYWZiZmIyZTA3ZmRiNDNhMjA0NTgyZDRhYmY0MjIuLmQ4ZDg4ZGNk
ODBkYTY2ZDliZjIzZjMyNGUwYzExOWJhYzJiODkyMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
OSBAQAorMjAxMS0wMS0yMCAgQmVuamFtaW4gS2FsbWFuICA8a2FsbWFuQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zpbmcg
b3Igc2VsZWN0aW5nIGJhY2t3YXJkcyBieSB3b3JkcyBqdW1wcyB0byBzdGFydCBvZiBjb250ZW50
ZWRpdGFibGUgcmVnaW9uIGlmIGNvbnRlbnRlZGl0YWJsZT1mYWxzZSBzcGFuIGlzIGVuY291bnRl
cmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTAw
MQorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13
b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0bWwKKworICAgICAgICBSZXZlcnQgc29tZSBwcmV2aW91
cyBjaGFuZ2VzICh0aGUgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5IHRleHQgaXRl
cmF0aW9uIGJlaGF2aW91cikgd2hpY2ggY2F1c2VkIHRoaXMKKyAgICAgICAgYnVnIGluIHRoZSBm
aXJzdCBwbGFjZSwgYW5kIGZpeCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yJ3MgaXRl
cmF0aW9uIHJhbmdlIGNoZWNrIGFzIGFuIGFsdGVybmF0aXZlIHdheSB0bworICAgICAgICBmaXgg
dGhlIGJ1ZyB0aGF0IGl0IG9yaWdpbmFsbHkgc29sdmVkLgorCisgICAgICAgICogZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpUZXh0SXRl
cmF0b3IpOiBSZW1vdmUgcmVmZXJlbmNlcyB0byBUZXh0SXRlcmF0aW9uRW5kc0F0RWRpdGluZyBi
b3VuZGFyeS4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0
b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IpOiBSZW1vdmUgbV9wYXN0U3RhcnRO
b2RlIGFzIHRoZQorICAgICAgICBtZWNoYW5pc20gZm9yIGl0ZXJhdGlvbiByYW5nZSBjaGVja2lu
ZywgYW5kIHVzZSBhIGZsYWcgbV9oYXZlUGFzc2VkU3RhcnROb2RlIGluc3RlYWQuCisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKTogQ2xl
YW4gdXAsIHVzZSBhZHZhbmNlVG9JZk5vbk51bGxBbmRXaXRoaW4gcmFuZ2UgYW5kCisgICAgICAg
IG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZSBmb3IgaXRlcmF0aW9uIHJhbmdlIGNoZWNraW5nIHJhdGhl
ciB0aGFuIG1fcGFzdFN0YXJ0Tm9kZS4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZpZWRCYWNr
d2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2VSZXNwZWN0aW5nUmFuZ2UpOiBUaGUgbmV3IHdheSBv
ZiBtb2RpZnlpbmcgbV9ub2RlCisgICAgICAgIHdoaWNoIHVwZGF0ZXMgbV9oYXZlUGFzc2VkU3Rh
cnROb2RlIGFuZCByZWZ1c2VzIHRvIGNvbnRpbnVlIHdoZW4gaXQgYmVjb21lcyB0cnVlLgorICAg
ICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmg6IFJlbW92ZSBUZXh0SXRlcmF0b3JFbmRzQXRF
ZGl0aW5nQm91bmRhcnksIHVwZGF0ZSBmb3IgbmV3IGFuZCByZW1vdmVkIHByb3RvdHlwZXMgYW5k
CisgICAgICAgIG1lbWJlciB2YXJpYWJsZXMuCisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3Vu
aXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzQm91bmRhcnkpOiBSZW1vdmUgcmVm
ZXJlbmNlcyB0byBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkuCisKIDIwMTEtMDEt
MTggIFZpY3RvcmlhIEtpcnN0ICA8dnJrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5j
cHAKaW5kZXggYzI0YmNiMjQyNjE1ZTE0ZWE5YWU0ZjgwNGJlZjQxZjI1NGE2YTYxMS4uNWEzYjMx
NTE4YWRmNDgzMWVjYzUxYTdkZWVmNWRmNzBkMDIxODNlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMTkzLDIxICsxOTMsNiBAQCBzdGF0aWMgTm9kZSogbmV4
dEluUHJlT3JkZXJDcm9zc2luZ1NoYWRvd0JvdW5kYXJpZXMoTm9kZSogcmFuZ2VFbmRDb250YWlu
ZXIsIGludAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgTm9kZSogcHJldmlvdXNJblBvc3RP
cmRlckNyb3NzaW5nU2hhZG93Qm91bmRhcmllcyhOb2RlKiByYW5nZVN0YXJ0Q29udGFpbmVyLCBp
bnQgcmFuZ2VTdGFydE9mZnNldCkKLXsKLSAgICBpZiAoIXJhbmdlU3RhcnRDb250YWluZXIpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIGlmIChyYW5nZVN0YXJ0T2Zmc2V0ID4gMCAmJiAhcmFuZ2VT
dGFydENvbnRhaW5lci0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpIHsKLSAgICAgICAgaWYgKE5vZGUq
IHByZXZpb3VzID0gcmFuZ2VTdGFydENvbnRhaW5lci0+Y2hpbGROb2RlKHJhbmdlU3RhcnRPZmZz
ZXQgLSAxKSkKLSAgICAgICAgICAgIHJldHVybiBwcmV2aW91czsKLSAgICB9Ci0gICAgZm9yIChO
b2RlKiBub2RlID0gcmFuZ2VTdGFydENvbnRhaW5lcjsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVu
dE9ySG9zdE5vZGUoKSkgewotICAgICAgICBpZiAoTm9kZSogcHJldmlvdXMgPSBub2RlLT5wcmV2
aW91c1NpYmxpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBwcmV2aW91czsKLSAgICB9Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KIC8vIC0tLS0tLS0tCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBmdWxseUNs
aXBzQ29udGVudHMoTm9kZSogbm9kZSkKQEAgLTI4OSw5ICsyNzQsNiBAQCBUZXh0SXRlcmF0b3I6
OlRleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZp
b3IpCiAgICAgLCBtX2hhbmRsZWRGaXJzdExldHRlcihmYWxzZSkKICAgICAsIG1faWdub3Jlc1N0
eWxlVmlzaWJpbGl0eShiZWhhdmlvciAmIFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxp
dHkpCiB7Ci0gICAgLy8gRklYTUU6IHNob3VsZCBzdXBwb3J0IFRleHRJdGVyYXRvckVuZHNBdEVk
aXRpbmdCb3VuZGFyeSBodHRwOi8vd2Via2l0Lm9yZy9iLzQzNjA5Ci0gICAgQVNTRVJUKGJlaGF2
aW9yICE9IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7Ci0KICAgICBpZiAoIXIp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMTA1MSw3ICsxMDMzLDcgQEAgU2ltcGxpZmllZEJhY2t3
YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBS
YW5nZSogciwKICAgICAsIG1fbm9kZSgwKQogICAgICwgbV9wb3NpdGlvbk5vZGUoMCkKIHsKLSAg
ICBBU1NFUlQobV9iZWhhdmlvciA9PSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IgfHwgbV9i
ZWhhdmlvciA9PSBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkpOworICAgIEFTU0VS
VChtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7CiAKICAgICBpZiAo
IXIpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNzYsNyArMTA1OCw3IEBAIFNpbXBsaWZpZWRCYWNr
d2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29uc3Qg
UmFuZ2UqIHIsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzZXRDdXJyZW50Tm9kZShlbmROb2Rl
KTsKKyAgICBtX25vZGUgPSBlbmROb2RlOwogICAgIHNldFVwRnVsbHlDbGlwcGVkU3RhY2sobV9m
dWxseUNsaXBwZWRTdGFjaywgbV9ub2RlKTsgICAgCiAgICAgbV9vZmZzZXQgPSBlbmRPZmZzZXQ7
CiAgICAgbV9oYW5kbGVkTm9kZSA9IGZhbHNlOwpAQCAtMTA5NSw3ICsxMDc3LDcgQEAgU2ltcGxp
ZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRv
cihjb25zdCBSYW5nZSogciwKICAgICBtX2xhc3RUZXh0Tm9kZSA9IDA7CiAgICAgbV9sYXN0Q2hh
cmFjdGVyID0gJ1xuJzsKIAotICAgIG1fcGFzdFN0YXJ0Tm9kZSA9IHByZXZpb3VzSW5Qb3N0T3Jk
ZXJDcm9zc2luZ1NoYWRvd0JvdW5kYXJpZXMoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7CisgICAg
bV9oYXZlUGFzc2VkU3RhcnROb2RlID0gZmFsc2U7CiAKICAgICBhZHZhbmNlKCk7CiB9CkBAIC0x
MTA3LDcgKzEwODksNyBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFk
dmFuY2UoKQogICAgIG1fcG9zaXRpb25Ob2RlID0gMDsKICAgICBtX3RleHRMZW5ndGggPSAwOwog
Ci0gICAgd2hpbGUgKG1fbm9kZSAmJiBtX25vZGUgIT0gbV9wYXN0U3RhcnROb2RlKSB7CisgICAg
d2hpbGUgKG1fbm9kZSAmJiAhbV9oYXZlUGFzc2VkU3RhcnROb2RlKSB7CiAgICAgICAgIC8vIERv
bid0IGhhbmRsZSBub2RlIGlmIHdlIHN0YXJ0IGl0ZXJhdGluZyBhdCBbbm9kZSwgMF0uCiAgICAg
ICAgIGlmICghbV9oYW5kbGVkTm9kZSAmJiAhKG1fbm9kZSA9PSBtX2VuZE5vZGUgJiYgbV9lbmRP
ZmZzZXQgPT0gMCkpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX25v
ZGUtPnJlbmRlcmVyKCk7CkBAIC0xMTI0LDggKzExMDYsMTAgQEAgdm9pZCBTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBOb2RlKiBuZXh0ID0gbV9oYW5kbGVkQ2hpbGRyZW4gPyAwIDog
bV9ub2RlLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgaWYgKCFuZXh0KSB7CisgICAgICAgIGlmICgh
bV9oYW5kbGVkQ2hpbGRyZW4gJiYgbV9ub2RlLT5oYXNDaGlsZE5vZGVzKCkpIHsKKyAgICAgICAg
ICAgIG1fbm9kZSA9IG1fbm9kZS0+bGFzdENoaWxkKCk7CisgICAgICAgICAgICBwdXNoRnVsbHlD
bGlwcGVkU3RhdGUobV9mdWxseUNsaXBwZWRTdGFjaywgbV9ub2RlKTsKKyAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIC8vIEV4aXQgZW1wdHkgY29udGFpbmVycyBhcyB3ZSBwYXNzIG92ZXIg
dGhlbSBvciBjb250YWluZXJzCiAgICAgICAgICAgICAvLyB3aGVyZSBbY29udGFpbmVyLCAwXSBp
cyB3aGVyZSB3ZSBzdGFydGVkIGl0ZXJhdGluZy4KICAgICAgICAgICAgIGlmICghbV9oYW5kbGVk
Tm9kZQpAQCAtMTEzNywxMSArMTEyMSwxMiBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0
SXRlcmF0b3I6OmFkdmFuY2UoKQogICAgICAgICAgICAgICAgICAgICBtX2hhbmRsZWROb2RlID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgbV9oYW5kbGVkQ2hpbGRyZW4gPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gRXhpdCBh
bGwgb3RoZXIgY29udGFpbmVycy4KICAgICAgICAgICAgIHdoaWxlICghbV9ub2RlLT5wcmV2aW91
c1NpYmxpbmcoKSkgewotICAgICAgICAgICAgICAgIGlmICghc2V0Q3VycmVudE5vZGUobV9ub2Rl
LT5wYXJlbnRPckhvc3ROb2RlKCkpKQorICAgICAgICAgICAgICAgIGlmICghYWR2YW5jZVJlc3Bl
Y3RpbmdSYW5nZShtX25vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIG1fZnVsbHlDbGlwcGVkU3RhY2sucG9wKCk7CiAg
ICAgICAgICAgICAgICAgZXhpdE5vZGUoKTsKQEAgLTExNTIsMTQgKzExMzcsMTIgQEAgdm9pZCBT
aW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKCkKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG5leHQgPSBtX25vZGUtPnByZXZpb3Vz
U2libGluZygpOwogICAgICAgICAgICAgbV9mdWxseUNsaXBwZWRTdGFjay5wb3AoKTsKKyAgICAg
ICAgICAgIGlmIChhZHZhbmNlUmVzcGVjdGluZ1JhbmdlKG1fbm9kZS0+cHJldmlvdXNTaWJsaW5n
KCkpKQorICAgICAgICAgICAgICAgIHB1c2hGdWxseUNsaXBwZWRTdGF0ZShtX2Z1bGx5Q2xpcHBl
ZFN0YWNrLCBtX25vZGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fbm9k
ZSA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUgJiYgc2V0Q3Vy
cmVudE5vZGUobmV4dCkpCi0gICAgICAgICAgICBwdXNoRnVsbHlDbGlwcGVkU3RhdGUobV9mdWxs
eUNsaXBwZWRTdGFjaywgbV9ub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2xlYXJD
dXJyZW50Tm9kZSgpOwogCiAgICAgICAgIC8vIEZvciB0aGUgcHVycG9zZSBvZiB3b3JkIGJvdW5k
YXJ5IGRldGVjdGlvbiwKICAgICAgICAgLy8gd2Ugc2hvdWxkIGl0ZXJhdGUgYWxsIHZpc2libGUg
dGV4dCBhbmQgdHJhaWxpbmcgKGNvbGxhcHNlZCkgd2hpdGVzcGFjZXMuIApAQCAtMTIzOSwyNiAr
MTIyMiwxNyBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmVtaXRDaGFy
YWN0ZXIoVUNoYXIgYywgTm9kZSogbm9kZSwgaW50IHN0YQogICAgIG1fbGFzdENoYXJhY3RlciA9
IGM7CiB9CiAKLWJvb2wgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6Y3Jvc3Nlc0Vk
aXRpbmdCb3VuZGFyeShOb2RlKiBub2RlKSBjb25zdAorYm9vbCBTaW1wbGlmaWVkQmFja3dhcmRz
VGV4dEl0ZXJhdG9yOjphZHZhbmNlUmVzcGVjdGluZ1JhbmdlKE5vZGUqIG5leHQpCiB7Ci0gICAg
cmV0dXJuIG1fbm9kZSAmJiBtX25vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgIT0gbm9kZS0+aXND
b250ZW50RWRpdGFibGUoKTsKLX0KLQotYm9vbCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJh
dG9yOjpzZXRDdXJyZW50Tm9kZShOb2RlKiBub2RlKQotewotICAgIGlmICghbm9kZSkKKyAgICBp
ZiAoIW5leHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9iZWhhdmlvciA9PSBU
ZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkgJiYgY3Jvc3Nlc0VkaXRpbmdCb3VuZGFy
eShub2RlKSkKKyAgICBtX2hhdmVQYXNzZWRTdGFydE5vZGUgfD0gbV9ub2RlID09IG1fc3RhcnRO
b2RlOworICAgIGlmIChtX2hhdmVQYXNzZWRTdGFydE5vZGUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBtX25vZGUgPSBub2RlOworICAgIG1fbm9kZSA9IG5leHQ7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6Y2xlYXJDdXJy
ZW50Tm9kZSgpCi17Ci0gICAgbV9ub2RlID0gMDsKLX0KLQogUGFzc1JlZlB0cjxSYW5nZT4gU2lt
cGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6cmFuZ2UoKSBjb25zdAogewogICAgIGlmICht
X3Bvc2l0aW9uTm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCmluZGV4IDhi
NjFhZmUyMTFiNGQzN2I3NGY5ZjRhNTgyMzdlMWQyOGYyZGNmYjQuLmIwYzMxMGE2ZmM3ZTgwMTFi
NGE0NGMyYWZjMWNkYTAyZGQ0MjQ5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0
b3IuaApAQCAtNDEsOCArNDEsNyBAQCBlbnVtIFRleHRJdGVyYXRvckJlaGF2aW9yIHsKICAgICBU
ZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyA9IDEg
PDwgMCwKICAgICBUZXh0SXRlcmF0b3JFbnRlcnNUZXh0Q29udHJvbHMgPSAxIDw8IDEsCiAgICAg
VGV4dEl0ZXJhdG9yRW1pdHNUZXh0c1dpdGhvdXRUcmFuc2NvZGluZyA9IDEgPDwgMiwKLSAgICBU
ZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkgPSAxIDw8IDMsCi0gICAgVGV4dEl0ZXJh
dG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSA9IDEgPDwgNAorICAgIFRleHRJdGVyYXRvcklnbm9y
ZXNTdHlsZVZpc2liaWxpdHkgPSAxIDw8IDMKIH07CiAgICAgCiAvLyBGSVhNRTogQ2FuJ3QgcmVh
bGx5IGFuc3dlciB0aGlzIHF1ZXN0aW9uIGNvcnJlY3RseSB3aXRob3V0IGtub3dpbmcgdGhlIHdo
aXRlLXNwYWNlIG1vZGUuCkBAIC0yMDUsOSArMjA0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGhh
bmRsZVJlcGxhY2VkRWxlbWVudCgpOwogICAgIGJvb2wgaGFuZGxlTm9uVGV4dE5vZGUoKTsKICAg
ICB2b2lkIGVtaXRDaGFyYWN0ZXIoVUNoYXIsIE5vZGUqLCBpbnQgc3RhcnRPZmZzZXQsIGludCBl
bmRPZmZzZXQpOwotICAgIGJvb2wgY3Jvc3Nlc0VkaXRpbmdCb3VuZGFyeShOb2RlKikgY29uc3Q7
Ci0gICAgYm9vbCBzZXRDdXJyZW50Tm9kZShOb2RlKik7Ci0gICAgdm9pZCBjbGVhckN1cnJlbnRO
b2RlKCk7CisgICAgYm9vbCBhZHZhbmNlUmVzcGVjdGluZ1JhbmdlKE5vZGUqKTsKIAogICAgIFRl
eHRJdGVyYXRvckJlaGF2aW9yIG1fYmVoYXZpb3I7CiAgICAgLy8gQ3VycmVudCBwb3NpdGlvbiwg
bm90IG5lY2Vzc2FyaWx5IG9mIHRoZSB0ZXh0IGJlaW5nIHJldHVybmVkLCBidXQgcG9zaXRpb24K
QEAgLTIzOCw5ICsyMzUsOSBAQCBwcml2YXRlOgogICAgIAogICAgIC8vIFVzZWQgZm9yIHdoaXRl
c3BhY2UgY2hhcmFjdGVycyB0aGF0IGFyZW4ndCBpbiB0aGUgRE9NLCBzbyB3ZSBjYW4gcG9pbnQg
YXQgdGhlbS4KICAgICBVQ2hhciBtX3NpbmdsZUNoYXJhY3RlckJ1ZmZlcjsKLSAgICAKLSAgICAv
LyBUaGUgbm9kZSBhZnRlciB0aGUgbGFzdCBub2RlIHRoaXMgaXRlcmF0b3Igc2hvdWxkIHByb2Nl
c3MuCi0gICAgTm9kZSogbV9wYXN0U3RhcnROb2RlOworCisgICAgLy8gV2hldGhlciBtX25vZGUg
aGFzIGFkdmFuY2VkIGJleW9uZCB0aGUgaXRlcmF0aW9uIHJhbmdlIChpLmUuIG1fc3RhcnROb2Rl
KS4KKyAgICBib29sIG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZTsKIH07CiAKIC8vIEJ1aWxkcyBvbiB0
aGUgdGV4dCBpdGVyYXRvciwgYWRkaW5nIGEgY2hhcmFjdGVyIHBvc2l0aW9uIHNvIHdlIGNhbiB3
YWxrIG9uZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKaW5kZXggMWE1
NTRiNzdjNDlkMzM3YzQzN2I2ZjhhODM0ZTk0NjIxZDEwNGRiNy4uZGQyYTFlMDM0NmI0NzBmNjhi
YjY3NzEyMzQ5NjFhZjVhOGM2ODYxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy92aXNpYmxlX3VuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVf
dW5pdHMuY3BwCkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlv
dXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoCiAgICAg
aWYgKGVjKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAgICBTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdldCgpLCBUZXh0SXRlcmF0
b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkpOworICAgIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRl
cmF0b3IgaXQoc2VhcmNoUmFuZ2UuZ2V0KCkpOwogICAgIHVuc2lnbmVkIG5leHQgPSAwOwogICAg
IGJvb2wgaW5UZXh0U2VjdXJpdHlNb2RlID0gc3RhcnQubm9kZSgpICYmIHN0YXJ0Lm5vZGUoKS0+
cmVuZGVyZXIoKSAmJiBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnRleHRTZWN1
cml0eSgpICE9IFRTTk9ORTsKICAgICBib29sIG5lZWRNb3JlQ29udGV4dCA9IGZhbHNlOwpAQCAt
MTI0LDcgKzEyNCw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeShj
b25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoCiAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgbmV4dCksIERPV05TVFJFQU0pOwogCiAgICAg
Ly8gVXNlIHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gdHJhbnNsYXRlIHRoZSBuZXh0IHZhbHVl
IGludG8gYSBET00gcG9zaXRpb24uCi0gICAgQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0b3IgY2hh
ckl0KHNlYXJjaFJhbmdlLmdldCgpLCBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkp
OworICAgIEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yIGNoYXJJdChzZWFyY2hSYW5nZS5nZXQo
KSk7CiAgICAgY2hhckl0LmFkdmFuY2Uoc3RyaW5nLnNpemUoKSAtIHN1ZmZpeExlbmd0aCAtIG5l
eHQpOwogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY2hhckl0LnJhbmdlKCktPmVuZFBvc2l0
aW9uKCksIERPV05TVFJFQU0pOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80273</attachid>
            <date>2011-01-26 17:16:08 -0800</date>
            <delta_ts>2011-02-20 20:04:20 -0800</delta_ts>
            <desc>rebase</desc>
            <filename>bug-51001-20110127121604.patch</filename>
            <type>text/plain</type>
            <size>13943</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBhYTE2ZjgzZGRkZDg5MWQ3ZjhjMWE1MWI1M2Y0MmJiZGM5Y2Y0NGQ5Li40OGVjN2Q1
M2VjYjg2MGJiZmVlNDU0NTVlNTY5ZjU2ZDhmYWU0YTYzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDEtMjcgIEJlbmphbWluIEthbG1hbiAgPGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIG9yIHNl
bGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVtcHMgdG8gc3RhcnQgb2YgY29udGVudGVkaXRh
YmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9ZmFsc2Ugc3BhbiBpcyBlbmNvdW50ZXJlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEwMDEKKwor
ICAgICAgICBBZGQgcmVncmVzc2lvbiB0ZXN0LgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rp
b24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnkt
d29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMS0yNiAgRW1pbCBB
IEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5
IFByb3NrdXJ5YWtvdi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9u
L2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92
ZXItbm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTJiMGE5ZTc5OWIyM2Vh
OGQ5NmExNzFmYTU5ZTI0N2E5ODNmZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFi
bGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorUEFTUyBmb3IgTFRSCitQQVNTIGZvciBS
VEwKK2ZvbyBiYXIgYmF6IHF1eCBxdXV4CivXqdeV1rzXqNeUINep15XWvNeo15Qg16nXlda816jX
lCDXqdeV1rzXqNeUINep15XWvNeo15QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcv
c2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1v
dmVyLW5vbi1lZGl0YWJsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxMzVkYjc0ZmFlNDBmNjJhMzRmNTlk
MzlmMjllN2E2NjU2MzBkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1s
CkBAIC0wLDAgKzEsMzkgQEAKKzwhRE9DVFlQRSBodG1sPgorPHByZSBpZD0ibG9nIj48L3ByZT4K
KworPGRpdiBpZD0ibHRyVGV4dENvbnRhaW5lciIgY29udGVudGVkaXRhYmxlPmZvbyBiYXIgPHNw
YW4gY29udGVudGVkaXRhYmxlPWZhbHNlPmJhejwvc3Bhbj4gcXV4IHF1dXg8L2Rpdj4KKzxkaXYg
aWQ9InJ0bFRleHRDb250YWluZXIiIGNvbnRlbnRlZGl0YWJsZSBkaXI9InJ0bCI+JiN4MDVFOTsm
I3gwNUQ1OyYjeDA1QkM7JiN4MDVFODsmI3gwNUQ0OyAmI3gwNUU5OyYjeDA1RDU7JiN4MDVCQzsm
I3gwNUU4OyYjeDA1RDQ7Cis8c3BhbiBjb250ZW50ZWRpdGFibGU9ZmFsc2U+JiN4MDVFOTsmI3gw
NUQ1OyYjeDA1QkM7JiN4MDVFODsmI3gwNUQ0Ozwvc3Bhbj4KKyYjeDA1RTk7JiN4MDVENTsmI3gw
NUJDOyYjeDA1RTg7JiN4MDVENDsgJiN4MDVFOTsmI3gwNUQ1OyYjeDA1QkM7JiN4MDVFODsmI3gw
NUQ0OzwvZGl2PgorCis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKHMpIHsKKyAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImxvZyIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMg
KyAiXG4iKSk7Cit9CisKK2Z1bmN0aW9uIHBsYWNlQ3Vyc29yQWZ0ZXJGaXJzdE5vbmVkaXRhYmxl
Q2hpbGQoY29udGFpbmVyKSB7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udGFpbmVyLmNoaWxk
Tm9kZXMubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgbm9kZSA9IGNvbnRhaW5lci5jaGlsZE5vZGVz
W2ldOworICAgIGlmIChub2RlLmlzQ29udGVudEVkaXRhYmxlICE9PSB1bmRlZmluZWQgJiYgIW5v
ZGUuaXNDb250ZW50RWRpdGFibGUpIHsKKyAgICAgIGdldFNlbGVjdGlvbigpLnNldFBvc2l0aW9u
KG5vZGUubmV4dFNpYmxpbmcsIDApOworICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorICB9Cisg
IHRocm93ICJDb3VsZG4ndCBmaW5kIG5vbmVkaXRhYmxlIGNoaWxkIG9mICIgKyBjb250YWluZXIu
dGV4dENvbnRlbnQ7Cit9CisKK2Z1bmN0aW9uIGV4dGVuZEJhY2t3YXJkQnlXb3JkKGNvbnRhaW5l
ciwgYmlkaU5hbWUpIHsKKyAgbm9uZWRpdGFibGVDaGlsZCA9IHBsYWNlQ3Vyc29yQWZ0ZXJGaXJz
dE5vbmVkaXRhYmxlQ2hpbGQoY29udGFpbmVyKTsKKyAgZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCJl
eHRlbmQiLCAiYmFja3dhcmQiLCAid29yZCIpOworICBpZiAoZ2V0U2VsZWN0aW9uKCkudG9TdHJp
bmcoKSA9PT0gbm9uZWRpdGFibGVDaGlsZC50ZXh0Q29udGVudCkKKyAgICBsb2coIlBBU1MgZm9y
ICIgKyBiaWRpTmFtZSk7CisgIGVsc2UKKyAgICBsb2coIkZBSUwgZm9yICIgKyBiaWRpTmFtZSAr
ICIsIHNlbGVjdGlvbiBpcyBcIiIgKyBnZXRTZWxlY3Rpb24oKSArICJcIiBidXQgc2hvdWxkIGJl
IFwiIiArIG5vbmVkaXRhYmxlQ2hpbGQudGV4dENvbnRlbnQgKyAiXCIiKTsKK30KKworZXh0ZW5k
QmFja3dhcmRCeVdvcmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImx0clRleHRDb250YWluZXIi
KSwgIkxUUiIpOworZXh0ZW5kQmFja3dhcmRCeVdvcmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InJ0bFRleHRDb250YWluZXIiKSwgIlJUTCIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGIyY2U0ZmYzMTFjNGFlMDEyMGVkNmFmZTk2YzQyYThiZDUyZDc2YTMu
Ljk4NTgwYzQ4MmRjNjA2OGQ4NjJiN2ZhYTQxYWZjZWViZWI0Yzc0NjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyOSBAQAorMjAxMS0wMS0yNyAgQmVuamFtaW4gS2FsbWFuICA8a2FsbWFuQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3Zpbmcgb3Igc2VsZWN0aW5nIGJhY2t3YXJkcyBieSB3b3JkcyBqdW1wcyB0byBzdGFydCBv
ZiBjb250ZW50ZWRpdGFibGUgcmVnaW9uIGlmIGNvbnRlbnRlZGl0YWJsZT1mYWxzZSBzcGFuIGlz
IGVuY291bnRlcmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MTAwMQorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNr
d2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0bWwKKworICAgICAgICBSZXZlcnQgc29t
ZSBwcmV2aW91cyBjaGFuZ2VzICh0aGUgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5
IHRleHQgaXRlcmF0aW9uIGJlaGF2aW91cikgd2hpY2ggY2F1c2VkIHRoaXMKKyAgICAgICAgYnVn
IGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIGZpeCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJh
dG9yJ3MgaXRlcmF0aW9uIHJhbmdlIGNoZWNrIGFzIGFuIGFsdGVybmF0aXZlIHdheSB0bworICAg
ICAgICBmaXggdGhlIGJ1ZyB0aGF0IGl0IG9yaWdpbmFsbHkgc29sdmVkLgorCisgICAgICAgICog
ZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9y
OjpUZXh0SXRlcmF0b3IpOiBSZW1vdmUgcmVmZXJlbmNlcyB0byBUZXh0SXRlcmF0aW9uRW5kc0F0
RWRpdGluZyBib3VuZGFyeS4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IpOiBSZW1vdmUgbV9w
YXN0U3RhcnROb2RlIGFzIHRoZQorICAgICAgICBtZWNoYW5pc20gZm9yIGl0ZXJhdGlvbiByYW5n
ZSBjaGVja2luZywgYW5kIHVzZSBhIGZsYWcgbV9oYXZlUGFzc2VkU3RhcnROb2RlIGluc3RlYWQu
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZh
bmNlKTogQ2xlYW4gdXAsIHVzZSBhZHZhbmNlVG9JZk5vbk51bGxBbmRXaXRoaW4gcmFuZ2UgYW5k
CisgICAgICAgIG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZSBmb3IgaXRlcmF0aW9uIHJhbmdlIGNoZWNr
aW5nIHJhdGhlciB0aGFuIG1fcGFzdFN0YXJ0Tm9kZS4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
aWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2VSZXNwZWN0aW5nUmFuZ2UpOiBUaGUg
bmV3IHdheSBvZiBtb2RpZnlpbmcgbV9ub2RlCisgICAgICAgIHdoaWNoIHVwZGF0ZXMgbV9oYXZl
UGFzc2VkU3RhcnROb2RlIGFuZCByZWZ1c2VzIHRvIGNvbnRpbnVlIHdoZW4gaXQgYmVjb21lcyB0
cnVlLgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmg6IFJlbW92ZSBUZXh0SXRlcmF0
b3JFbmRzQXRFZGl0aW5nQm91bmRhcnksIHVwZGF0ZSBmb3IgbmV3IGFuZCByZW1vdmVkIHByb3Rv
dHlwZXMgYW5kCisgICAgICAgIG1lbWJlciB2YXJpYWJsZXMuCisgICAgICAgICogZWRpdGluZy92
aXNpYmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzQm91bmRhcnkpOiBS
ZW1vdmUgcmVmZXJlbmNlcyB0byBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkuCisK
IDIwMTEtMDEtMjYgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5jcHAKaW5kZXggMWZjNzYwNjA3OWFhNTIzZWEyYWY0ZGJiNWZkNDY3NTBkY2Y5
YTQ5MC4uODAzZjYwYmZhYjJlNjVmMGVmZjQ1NWQwN2RkNjg1Nzg4ZGY3MzBmZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMTk0LDIxICsxOTQsNiBAQCBzdGF0
aWMgTm9kZSogbmV4dEluUHJlT3JkZXJDcm9zc2luZ1NoYWRvd0JvdW5kYXJpZXMoTm9kZSogcmFu
Z2VFbmRDb250YWluZXIsIGludAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgTm9kZSogcHJl
dmlvdXNJblBvc3RPcmRlckNyb3NzaW5nU2hhZG93Qm91bmRhcmllcyhOb2RlKiByYW5nZVN0YXJ0
Q29udGFpbmVyLCBpbnQgcmFuZ2VTdGFydE9mZnNldCkKLXsKLSAgICBpZiAoIXJhbmdlU3RhcnRD
b250YWluZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChyYW5nZVN0YXJ0T2Zmc2V0ID4g
MCAmJiAhcmFuZ2VTdGFydENvbnRhaW5lci0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpIHsKLSAgICAg
ICAgaWYgKE5vZGUqIHByZXZpb3VzID0gcmFuZ2VTdGFydENvbnRhaW5lci0+Y2hpbGROb2RlKHJh
bmdlU3RhcnRPZmZzZXQgLSAxKSkKLSAgICAgICAgICAgIHJldHVybiBwcmV2aW91czsKLSAgICB9
Ci0gICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2VTdGFydENvbnRhaW5lcjsgbm9kZTsgbm9kZSA9
IG5vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkgewotICAgICAgICBpZiAoTm9kZSogcHJldmlvdXMg
PSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBwcmV2aW91czsK
LSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIC8vIC0tLS0tLS0tCiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBmdWxseUNsaXBzQ29udGVudHMoTm9kZSogbm9kZSkKQEAgLTI5MCw5ICsyNzUsNiBAQCBU
ZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwgVGV4dEl0ZXJhdG9yQmVo
YXZpb3IgYmVoYXZpb3IpCiAgICAgLCBtX2hhbmRsZWRGaXJzdExldHRlcihmYWxzZSkKICAgICAs
IG1faWdub3Jlc1N0eWxlVmlzaWJpbGl0eShiZWhhdmlvciAmIFRleHRJdGVyYXRvcklnbm9yZXNT
dHlsZVZpc2liaWxpdHkpCiB7Ci0gICAgLy8gRklYTUU6IHNob3VsZCBzdXBwb3J0IFRleHRJdGVy
YXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSBodHRwOi8vd2Via2l0Lm9yZy9iLzQzNjA5Ci0gICAg
QVNTRVJUKGJlaGF2aW9yICE9IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7Ci0K
ICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTA1Miw3ICsxMDM0LDcgQEAgU2lt
cGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVy
YXRvcihjb25zdCBSYW5nZSogciwKICAgICAsIG1fbm9kZSgwKQogICAgICwgbV9wb3NpdGlvbk5v
ZGUoMCkKIHsKLSAgICBBU1NFUlQobV9iZWhhdmlvciA9PSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVo
YXZpb3IgfHwgbV9iZWhhdmlvciA9PSBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkp
OworICAgIEFTU0VSVChtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7
CiAKICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNzcsNyArMTA1OSw3IEBAIFNp
bXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRl
cmF0b3IoY29uc3QgUmFuZ2UqIHIsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzZXRDdXJyZW50
Tm9kZShlbmROb2RlKTsKKyAgICBtX25vZGUgPSBlbmROb2RlOwogICAgIHNldFVwRnVsbHlDbGlw
cGVkU3RhY2sobV9mdWxseUNsaXBwZWRTdGFjaywgbV9ub2RlKTsgICAgCiAgICAgbV9vZmZzZXQg
PSBlbmRPZmZzZXQ7CiAgICAgbV9oYW5kbGVkTm9kZSA9IGZhbHNlOwpAQCAtMTA5Niw3ICsxMDc4
LDcgQEAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJk
c1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwKICAgICBtX2xhc3RUZXh0Tm9kZSA9IDA7CiAg
ICAgbV9sYXN0Q2hhcmFjdGVyID0gJ1xuJzsKIAotICAgIG1fcGFzdFN0YXJ0Tm9kZSA9IHByZXZp
b3VzSW5Qb3N0T3JkZXJDcm9zc2luZ1NoYWRvd0JvdW5kYXJpZXMoc3RhcnROb2RlLCBzdGFydE9m
ZnNldCk7CisgICAgbV9oYXZlUGFzc2VkU3RhcnROb2RlID0gZmFsc2U7CiAKICAgICBhZHZhbmNl
KCk7CiB9CkBAIC0xMTA4LDcgKzEwOTAsNyBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0
SXRlcmF0b3I6OmFkdmFuY2UoKQogICAgIG1fcG9zaXRpb25Ob2RlID0gMDsKICAgICBtX3RleHRM
ZW5ndGggPSAwOwogCi0gICAgd2hpbGUgKG1fbm9kZSAmJiBtX25vZGUgIT0gbV9wYXN0U3RhcnRO
b2RlKSB7CisgICAgd2hpbGUgKG1fbm9kZSAmJiAhbV9oYXZlUGFzc2VkU3RhcnROb2RlKSB7CiAg
ICAgICAgIC8vIERvbid0IGhhbmRsZSBub2RlIGlmIHdlIHN0YXJ0IGl0ZXJhdGluZyBhdCBbbm9k
ZSwgMF0uCiAgICAgICAgIGlmICghbV9oYW5kbGVkTm9kZSAmJiAhKG1fbm9kZSA9PSBtX2VuZE5v
ZGUgJiYgbV9lbmRPZmZzZXQgPT0gMCkpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBtX25vZGUtPnJlbmRlcmVyKCk7CkBAIC0xMTI1LDggKzExMDcsMTAgQEAgdm9pZCBT
aW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKCkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBOb2RlKiBuZXh0ID0gbV9oYW5kbGVkQ2hp
bGRyZW4gPyAwIDogbV9ub2RlLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgaWYgKCFuZXh0KSB7Cisg
ICAgICAgIGlmICghbV9oYW5kbGVkQ2hpbGRyZW4gJiYgbV9ub2RlLT5oYXNDaGlsZE5vZGVzKCkp
IHsKKyAgICAgICAgICAgIG1fbm9kZSA9IG1fbm9kZS0+bGFzdENoaWxkKCk7CisgICAgICAgICAg
ICBwdXNoRnVsbHlDbGlwcGVkU3RhdGUobV9mdWxseUNsaXBwZWRTdGFjaywgbV9ub2RlKTsKKyAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEV4aXQgZW1wdHkgY29udGFpbmVycyBhcyB3
ZSBwYXNzIG92ZXIgdGhlbSBvciBjb250YWluZXJzCiAgICAgICAgICAgICAvLyB3aGVyZSBbY29u
dGFpbmVyLCAwXSBpcyB3aGVyZSB3ZSBzdGFydGVkIGl0ZXJhdGluZy4KICAgICAgICAgICAgIGlm
ICghbV9oYW5kbGVkTm9kZQpAQCAtMTEzOCwxMSArMTEyMiwxMiBAQCB2b2lkIFNpbXBsaWZpZWRC
YWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2UoKQogICAgICAgICAgICAgICAgICAgICBtX2hh
bmRsZWROb2RlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgbV9oYW5kbGVkQ2hpbGRyZW4g
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfSAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgLy8gRXhpdCBhbGwgb3RoZXIgY29udGFpbmVycy4KICAgICAgICAgICAgIHdoaWxlICghbV9u
b2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICAgICAgICAgIGlmICghc2V0Q3VycmVu
dE5vZGUobV9ub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpKQorICAgICAgICAgICAgICAgIGlmICgh
YWR2YW5jZVJlc3BlY3RpbmdSYW5nZShtX25vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIG1fZnVsbHlDbGlwcGVkU3Rh
Y2sucG9wKCk7CiAgICAgICAgICAgICAgICAgZXhpdE5vZGUoKTsKQEAgLTExNTMsMTQgKzExMzgs
MTIgQEAgdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKCkKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG5leHQgPSBtX25v
ZGUtPnByZXZpb3VzU2libGluZygpOwogICAgICAgICAgICAgbV9mdWxseUNsaXBwZWRTdGFjay5w
b3AoKTsKKyAgICAgICAgICAgIGlmIChhZHZhbmNlUmVzcGVjdGluZ1JhbmdlKG1fbm9kZS0+cHJl
dmlvdXNTaWJsaW5nKCkpKQorICAgICAgICAgICAgICAgIHB1c2hGdWxseUNsaXBwZWRTdGF0ZSht
X2Z1bGx5Q2xpcHBlZFN0YWNrLCBtX25vZGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG1fbm9kZSA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX25v
ZGUgJiYgc2V0Q3VycmVudE5vZGUobmV4dCkpCi0gICAgICAgICAgICBwdXNoRnVsbHlDbGlwcGVk
U3RhdGUobV9mdWxseUNsaXBwZWRTdGFjaywgbV9ub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY2xlYXJDdXJyZW50Tm9kZSgpOwogCiAgICAgICAgIC8vIEZvciB0aGUgcHVycG9zZSBv
ZiB3b3JkIGJvdW5kYXJ5IGRldGVjdGlvbiwKICAgICAgICAgLy8gd2Ugc2hvdWxkIGl0ZXJhdGUg
YWxsIHZpc2libGUgdGV4dCBhbmQgdHJhaWxpbmcgKGNvbGxhcHNlZCkgd2hpdGVzcGFjZXMuIApA
QCAtMTI0MCwyNiArMTIyMywxNyBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0
b3I6OmVtaXRDaGFyYWN0ZXIoVUNoYXIgYywgTm9kZSogbm9kZSwgaW50IHN0YQogICAgIG1fbGFz
dENoYXJhY3RlciA9IGM7CiB9CiAKLWJvb2wgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRv
cjo6Y3Jvc3Nlc0VkaXRpbmdCb3VuZGFyeShOb2RlKiBub2RlKSBjb25zdAorYm9vbCBTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlUmVzcGVjdGluZ1JhbmdlKE5vZGUqIG5l
eHQpCiB7Ci0gICAgcmV0dXJuIG1fbm9kZSAmJiBtX25vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkg
IT0gbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKLX0KLQotYm9vbCBTaW1wbGlmaWVkQmFja3dh
cmRzVGV4dEl0ZXJhdG9yOjpzZXRDdXJyZW50Tm9kZShOb2RlKiBub2RlKQotewotICAgIGlmICgh
bm9kZSkKKyAgICBpZiAoIW5leHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9i
ZWhhdmlvciA9PSBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkgJiYgY3Jvc3Nlc0Vk
aXRpbmdCb3VuZGFyeShub2RlKSkKKyAgICBtX2hhdmVQYXNzZWRTdGFydE5vZGUgfD0gbV9ub2Rl
ID09IG1fc3RhcnROb2RlOworICAgIGlmIChtX2hhdmVQYXNzZWRTdGFydE5vZGUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX25vZGUgPSBub2RlOworICAgIG1fbm9kZSA9IG5leHQ7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRv
cjo6Y2xlYXJDdXJyZW50Tm9kZSgpCi17Ci0gICAgbV9ub2RlID0gMDsKLX0KLQogUGFzc1JlZlB0
cjxSYW5nZT4gU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6cmFuZ2UoKSBjb25zdAog
ewogICAgIGlmIChtX3Bvc2l0aW9uTm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5oCmluZGV4IDhiNjFhZmUyMTFiNGQzN2I3NGY5ZjRhNTgyMzdlMWQyOGYyZGNmYjQuLmIwYzMx
MGE2ZmM3ZTgwMTFiNGE0NGMyYWZjMWNkYTAyZGQ0MjQ5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuaApAQCAtNDEsOCArNDEsNyBAQCBlbnVtIFRleHRJdGVyYXRvckJlaGF2
aW9yIHsKICAgICBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBv
c2l0aW9ucyA9IDEgPDwgMCwKICAgICBUZXh0SXRlcmF0b3JFbnRlcnNUZXh0Q29udHJvbHMgPSAx
IDw8IDEsCiAgICAgVGV4dEl0ZXJhdG9yRW1pdHNUZXh0c1dpdGhvdXRUcmFuc2NvZGluZyA9IDEg
PDwgMiwKLSAgICBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkgPSAxIDw8IDMsCi0g
ICAgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSA9IDEgPDwgNAorICAgIFRleHRJ
dGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHkgPSAxIDw8IDMKIH07CiAgICAgCiAvLyBGSVhN
RTogQ2FuJ3QgcmVhbGx5IGFuc3dlciB0aGlzIHF1ZXN0aW9uIGNvcnJlY3RseSB3aXRob3V0IGtu
b3dpbmcgdGhlIHdoaXRlLXNwYWNlIG1vZGUuCkBAIC0yMDUsOSArMjA0LDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIGhhbmRsZVJlcGxhY2VkRWxlbWVudCgpOwogICAgIGJvb2wgaGFuZGxlTm9uVGV4
dE5vZGUoKTsKICAgICB2b2lkIGVtaXRDaGFyYWN0ZXIoVUNoYXIsIE5vZGUqLCBpbnQgc3RhcnRP
ZmZzZXQsIGludCBlbmRPZmZzZXQpOwotICAgIGJvb2wgY3Jvc3Nlc0VkaXRpbmdCb3VuZGFyeShO
b2RlKikgY29uc3Q7Ci0gICAgYm9vbCBzZXRDdXJyZW50Tm9kZShOb2RlKik7Ci0gICAgdm9pZCBj
bGVhckN1cnJlbnROb2RlKCk7CisgICAgYm9vbCBhZHZhbmNlUmVzcGVjdGluZ1JhbmdlKE5vZGUq
KTsKIAogICAgIFRleHRJdGVyYXRvckJlaGF2aW9yIG1fYmVoYXZpb3I7CiAgICAgLy8gQ3VycmVu
dCBwb3NpdGlvbiwgbm90IG5lY2Vzc2FyaWx5IG9mIHRoZSB0ZXh0IGJlaW5nIHJldHVybmVkLCBi
dXQgcG9zaXRpb24KQEAgLTIzOCw5ICsyMzUsOSBAQCBwcml2YXRlOgogICAgIAogICAgIC8vIFVz
ZWQgZm9yIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB0aGF0IGFyZW4ndCBpbiB0aGUgRE9NLCBzbyB3
ZSBjYW4gcG9pbnQgYXQgdGhlbS4KICAgICBVQ2hhciBtX3NpbmdsZUNoYXJhY3RlckJ1ZmZlcjsK
LSAgICAKLSAgICAvLyBUaGUgbm9kZSBhZnRlciB0aGUgbGFzdCBub2RlIHRoaXMgaXRlcmF0b3Ig
c2hvdWxkIHByb2Nlc3MuCi0gICAgTm9kZSogbV9wYXN0U3RhcnROb2RlOworCisgICAgLy8gV2hl
dGhlciBtX25vZGUgaGFzIGFkdmFuY2VkIGJleW9uZCB0aGUgaXRlcmF0aW9uIHJhbmdlIChpLmUu
IG1fc3RhcnROb2RlKS4KKyAgICBib29sIG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZTsKIH07CiAKIC8v
IEJ1aWxkcyBvbiB0aGUgdGV4dCBpdGVyYXRvciwgYWRkaW5nIGEgY2hhcmFjdGVyIHBvc2l0aW9u
IHNvIHdlIGNhbiB3YWxrIG9uZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy92
aXNpYmxlX3VuaXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5j
cHAKaW5kZXggMzNkNzZlY2RlZjg2ODIwYTRkOTY4M2Q1ZjVmZjI2ZmQ4MTBhNjcwYS4uZjQ1NDVj
OGRlYzU4NWI0OTY0NDA4OTJlMDUxNTg1ZDZjYjBjMjkwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL3Zpc2libGVfdW5pdHMuY3BwCkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9z
aXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5
U2VhcmNoCiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAK
LSAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdldCgp
LCBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkpOworICAgIFNpbXBsaWZpZWRCYWNr
d2FyZHNUZXh0SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UuZ2V0KCkpOwogICAgIHVuc2lnbmVkIG5l
eHQgPSAwOwogICAgIGJvb2wgaW5UZXh0U2VjdXJpdHlNb2RlID0gc3RhcnQubm9kZSgpICYmIHN0
YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCktPnN0eWxl
KCktPnRleHRTZWN1cml0eSgpICE9IFRTTk9ORTsKICAgICBib29sIG5lZWRNb3JlQ29udGV4dCA9
IGZhbHNlOwpAQCAtMTI0LDcgKzEyNCw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlv
dXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoCiAgICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgbmV4dCksIERPV05TVFJF
QU0pOwogCiAgICAgLy8gVXNlIHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gdHJhbnNsYXRlIHRo
ZSBuZXh0IHZhbHVlIGludG8gYSBET00gcG9zaXRpb24uCi0gICAgQmFja3dhcmRzQ2hhcmFjdGVy
SXRlcmF0b3IgY2hhckl0KHNlYXJjaFJhbmdlLmdldCgpLCBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0
aW5nQm91bmRhcnkpOworICAgIEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yIGNoYXJJdChzZWFy
Y2hSYW5nZS5nZXQoKSk7CiAgICAgY2hhckl0LmFkdmFuY2Uoc3RyaW5nLnNpemUoKSAtIHN1ZmZp
eExlbmd0aCAtIG5leHQpOwogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY2hhckl0LnJhbmdl
KCktPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83122</attachid>
            <date>2011-02-20 20:04:28 -0800</date>
            <delta_ts>2011-02-22 22:00:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51001-20110221150425.patch</filename>
            <type>text/plain</type>
            <size>14527</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzYwNzUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhYTMwZTM5ZmZiODUzNjA3MmNhOTY3
ZGYxMDg3ZjdkOWFmOTI4NDJlLi4xZmMwOGUyNzQ0N2QwZjk2NzMwZmMxMTQ4M2FmNmVmMTlmMTYw
MTU5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDItMjAgIEJlbmphbWluIEthbG1hbiAg
PGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTW92aW5nIG9yIHNlbGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVt
cHMgdG8gc3RhcnQgb2YgY29udGVudGVkaXRhYmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9
ZmFsc2Ugc3BhbiBpcyBlbmNvdW50ZXJlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTEwMDEKKworICAgICAgICBBZGQgcmVncmVzc2lvbiB0ZXN0Lgor
CisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zl
ci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3Nl
bGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sOiBB
ZGRlZC4KKwogMjAxMS0wMi0yMSBCZW5qYW1pbiBLYWxtYW4gIDxrYWxtYW5AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9u
LWVkaXRhYmxlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4
dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iNTJiMGE5ZTc5OWIyM2VhOGQ5NmExNzFmYTU5ZTI0N2E5ODNmZTc5Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJk
LWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAor
UEFTUyBmb3IgTFRSCitQQVNTIGZvciBSVEwKK2ZvbyBiYXIgYmF6IHF1eCBxdXV4CivXqdeV1rzX
qNeUINep15XWvNeo15Qg16nXlda816jXlCDXqdeV1rzXqNeUINep15XWvNeo15QKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3Jk
LW92ZXItbm9uLWVkaXRhYmxlLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9l
eHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjYxMzVkYjc0ZmFlNDBmNjJhMzRmNTlkMzlmMjllN2E2NjU2MzBkMTAKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29y
ZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sCkBAIC0wLDAgKzEsMzkgQEAKKzwhRE9DVFlQRSBodG1s
PgorPHByZSBpZD0ibG9nIj48L3ByZT4KKworPGRpdiBpZD0ibHRyVGV4dENvbnRhaW5lciIgY29u
dGVudGVkaXRhYmxlPmZvbyBiYXIgPHNwYW4gY29udGVudGVkaXRhYmxlPWZhbHNlPmJhejwvc3Bh
bj4gcXV4IHF1dXg8L2Rpdj4KKzxkaXYgaWQ9InJ0bFRleHRDb250YWluZXIiIGNvbnRlbnRlZGl0
YWJsZSBkaXI9InJ0bCI+JiN4MDVFOTsmI3gwNUQ1OyYjeDA1QkM7JiN4MDVFODsmI3gwNUQ0OyAm
I3gwNUU5OyYjeDA1RDU7JiN4MDVCQzsmI3gwNUU4OyYjeDA1RDQ7Cis8c3BhbiBjb250ZW50ZWRp
dGFibGU9ZmFsc2U+JiN4MDVFOTsmI3gwNUQ1OyYjeDA1QkM7JiN4MDVFODsmI3gwNUQ0Ozwvc3Bh
bj4KKyYjeDA1RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1RTg7JiN4MDVENDsgJiN4MDVFOTsmI3gw
NUQ1OyYjeDA1QkM7JiN4MDVFODsmI3gwNUQ0OzwvZGl2PgorCis8c2NyaXB0PgorZnVuY3Rpb24g
bG9nKHMpIHsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZyIpLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKHMgKyAiXG4iKSk7Cit9CisKK2Z1bmN0aW9uIHBsYWNlQ3Vy
c29yQWZ0ZXJGaXJzdE5vbmVkaXRhYmxlQ2hpbGQoY29udGFpbmVyKSB7CisgIGZvciAodmFyIGkg
PSAwOyBpIDwgY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgbm9k
ZSA9IGNvbnRhaW5lci5jaGlsZE5vZGVzW2ldOworICAgIGlmIChub2RlLmlzQ29udGVudEVkaXRh
YmxlICE9PSB1bmRlZmluZWQgJiYgIW5vZGUuaXNDb250ZW50RWRpdGFibGUpIHsKKyAgICAgIGdl
dFNlbGVjdGlvbigpLnNldFBvc2l0aW9uKG5vZGUubmV4dFNpYmxpbmcsIDApOworICAgICAgcmV0
dXJuIG5vZGU7CisgICAgfQorICB9CisgIHRocm93ICJDb3VsZG4ndCBmaW5kIG5vbmVkaXRhYmxl
IGNoaWxkIG9mICIgKyBjb250YWluZXIudGV4dENvbnRlbnQ7Cit9CisKK2Z1bmN0aW9uIGV4dGVu
ZEJhY2t3YXJkQnlXb3JkKGNvbnRhaW5lciwgYmlkaU5hbWUpIHsKKyAgbm9uZWRpdGFibGVDaGls
ZCA9IHBsYWNlQ3Vyc29yQWZ0ZXJGaXJzdE5vbmVkaXRhYmxlQ2hpbGQoY29udGFpbmVyKTsKKyAg
Z2V0U2VsZWN0aW9uKCkubW9kaWZ5KCJleHRlbmQiLCAiYmFja3dhcmQiLCAid29yZCIpOworICBp
ZiAoZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gbm9uZWRpdGFibGVDaGlsZC50ZXh0Q29u
dGVudCkKKyAgICBsb2coIlBBU1MgZm9yICIgKyBiaWRpTmFtZSk7CisgIGVsc2UKKyAgICBsb2co
IkZBSUwgZm9yICIgKyBiaWRpTmFtZSArICIsIHNlbGVjdGlvbiBpcyBcIiIgKyBnZXRTZWxlY3Rp
b24oKSArICJcIiBidXQgc2hvdWxkIGJlIFwiIiArIG5vbmVkaXRhYmxlQ2hpbGQudGV4dENvbnRl
bnQgKyAiXCIiKTsKK30KKworZXh0ZW5kQmFja3dhcmRCeVdvcmQoZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImx0clRleHRDb250YWluZXIiKSwgIkxUUiIpOworZXh0ZW5kQmFja3dhcmRCeVdvcmQo
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJ0bFRleHRDb250YWluZXIiKSwgIlJUTCIpOworCitp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDZhZDMyZDRlOGEzMjMxODRm
NTlmNDE4YzM5ZTA4YmZmOWZhZDJlM2YuLjEwMTIwZWM5ZjI0NDBhMGVkOTU0NzEzY2FmMzBlZDE0
ZmJlNTdhMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMS0wMi0yMCAgQmVuamFt
aW4gS2FsbWFuICA8a2FsbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zpbmcgb3Igc2VsZWN0aW5nIGJhY2t3YXJkcyBi
eSB3b3JkcyBqdW1wcyB0byBzdGFydCBvZiBjb250ZW50ZWRpdGFibGUgcmVnaW9uIGlmIGNvbnRl
bnRlZGl0YWJsZT1mYWxzZSBzcGFuIGlzIGVuY291bnRlcmVkCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTAwMQorCisgICAgICAgIFRlc3Q6IGVkaXRp
bmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0
bWwKKworICAgICAgICBSZXZlcnQgc29tZSBwcmV2aW91cyBjaGFuZ2VzICh0aGUgVGV4dEl0ZXJh
dG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5IHRleHQgaXRlcmF0aW9uIGJlaGF2aW91cikgd2hpY2gg
Y2F1c2VkIHRoaXMKKyAgICAgICAgYnVnIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIGZpeCBTaW1w
bGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yJ3MgaXRlcmF0aW9uIHJhbmdlIGNoZWNrIGFzIGFu
IGFsdGVybmF0aXZlIGZpeC4KKworICAgICAgICBUaGUgb3JpZ2luYWwgYnVnIHdhcyB0aGF0IGRv
dWJsZS1jbGlja2luZyBvbiBhbiBpbmxpbmUgZWRpdGFibGUgc3BhbiBhdCB0aGUgc3RhcnQgb2Yg
YSBwYXJhZ3JhcGggd291bGQgY2xlYXIgdGhlCisgICAgICAgIHNlbGVjdGlvbiAod2Via2l0Lm9y
Zy9iLzM2MzYwKS4gIFRoaXMgd2FzIGNhdXNlZCBieSB1cHN0cmVhbS9kb3duc3RyZWFtIFZpc2Jp
YmxlUG9zaXRpb24gY29tcGxpY2F0aW9ucy4gIFRvIGZpeCwKKyAgICAgICAgcmVmdXNlIHRvIGl0
ZXJhdGUgYmV5b25kIHRoZSBzdGFydCBub2RlIChyYXRoZXIgdGhhbiByZWZ1c2luZyB0byBpdGVy
YXRlIGFjcm9zcyBlZGl0YWJsZSBib3VuZGFyaWVzLCB3aGljaAorICAgICAgICBjYXVzZXMgdGhp
cyBidWcpLgorCisgICAgICAgIFRvIHNlZSB3aHkgdGhpcyBpcyBjb3JyZWN0LCBhbmQgdG8gbWFr
ZSBpdCBjbGVhcmVyIHRoYXQgaXMgaW5kZWVkIHdoYXQgaXMgaGFwcGVuaW5nLCB0aGUgdGV4dCBp
dGVyYXRvciBjb2RlIGhhcworICAgICAgICBiZWVuIHNsaWdodGx5IHJlc3RydWN0dXJlZCB0byBl
eHByZXNzIHRoZSBpbnZhcmlhbnQgdGhhdCB0aGUgaXRlcmF0b3Igd2lsbCBuZXZlciBhZHZhbmNl
IHBhc3QgdGhlIHN0YXJ0IG5vZGUuCisKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcik6IFJlbW92
ZSByZWZlcmVuY2VzIHRvIFRleHRJdGVyYXRpb25FbmRzQXRFZGl0aW5nIGJvdW5kYXJ5LgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvcik6IFJlbW92ZSBtX3Bhc3RTdGFydE5vZGUgYXMgdGhlCisg
ICAgICAgIG1lY2hhbmlzbSBmb3IgaXRlcmF0aW9uIHJhbmdlIGNoZWNraW5nLCBhbmQgdXNlIGEg
ZmxhZyBtX2hhdmVQYXNzZWRTdGFydE5vZGUgaW5zdGVhZC4KKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2UpOiBDbGVhbiB1cCwgdXNlIGFk
dmFuY2VSZXNwZWN0aW5nUmFuZ2UgYW5kCisgICAgICAgIG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZSBm
b3IgaXRlcmF0aW9uIHJhbmdlIGNoZWNraW5nIHJhdGhlciB0aGFuIG1fcGFzdFN0YXJ0Tm9kZS4K
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFu
Y2VSZXNwZWN0aW5nUmFuZ2UpOiBUaGUgbmV3IHdheSBvZiBtb2RpZnlpbmcgbV9ub2RlCisgICAg
ICAgIHdoaWNoIHVwZGF0ZXMgbV9oYXZlUGFzc2VkU3RhcnROb2RlIGFuZCByZWZ1c2VzIHRvIGNv
bnRpbnVlIHdoZW4gaXQgYmVjb21lcyB0cnVlLgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJh
dG9yLmg6IFJlbW92ZSBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnksIHVwZGF0ZSBm
b3IgbmV3L3JlbW92ZWQgcHJvdG90eXBlcyBhbmQKKyAgICAgICAgbWVtYmVyIHZhcmlhYmxlcy4K
KyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cHJldmlvdXNCb3VuZGFyeSk6IFJlbW92ZSByZWZlcmVuY2VzIHRvIFRleHRJdGVyYXRvckVuZHNB
dEVkaXRpbmdCb3VuZGFyeS4KKwogMjAxMS0wMi0yMCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFw
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCBiNjIxZGMyY2ZmY2ViODUyZTZlOWEx
M2M2ZDVkOWU5OGI0NmQxNDQwLi4yMTM5NjZjNGQ5ZWY1MTA1MTRlNDkxYmY2Y2FhM2NlMjFmYTVh
NTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC0xOTQsMjEg
KzE5NCw2IEBAIHN0YXRpYyBOb2RlKiBuZXh0SW5QcmVPcmRlckNyb3NzaW5nU2hhZG93Qm91bmRh
cmllcyhOb2RlKiByYW5nZUVuZENvbnRhaW5lciwgaW50CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0
YXRpYyBOb2RlKiBwcmV2aW91c0luUG9zdE9yZGVyQ3Jvc3NpbmdTaGFkb3dCb3VuZGFyaWVzKE5v
ZGUqIHJhbmdlU3RhcnRDb250YWluZXIsIGludCByYW5nZVN0YXJ0T2Zmc2V0KQotewotICAgIGlm
ICghcmFuZ2VTdGFydENvbnRhaW5lcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHJhbmdl
U3RhcnRPZmZzZXQgPiAwICYmICFyYW5nZVN0YXJ0Q29udGFpbmVyLT5vZmZzZXRJbkNoYXJhY3Rl
cnMoKSkgewotICAgICAgICBpZiAoTm9kZSogcHJldmlvdXMgPSByYW5nZVN0YXJ0Q29udGFpbmVy
LT5jaGlsZE5vZGUocmFuZ2VTdGFydE9mZnNldCAtIDEpKQotICAgICAgICAgICAgcmV0dXJuIHBy
ZXZpb3VzOwotICAgIH0KLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZVN0YXJ0Q29udGFpbmVy
OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChO
b2RlKiBwcmV2aW91cyA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKQotICAgICAgICAgICAgcmV0
dXJuIHByZXZpb3VzOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQogLy8gLS0tLS0tLS0KIAog
c3RhdGljIGlubGluZSBib29sIGZ1bGx5Q2xpcHNDb250ZW50cyhOb2RlKiBub2RlKQpAQCAtMjkw
LDkgKzI3NSw2IEBAIFRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLCBU
ZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKICAgICAsIG1faGFuZGxlZEZpcnN0TGV0dGVy
KGZhbHNlKQogICAgICwgbV9pZ25vcmVzU3R5bGVWaXNpYmlsaXR5KGJlaGF2aW9yICYgVGV4dEl0
ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSkKIHsKLSAgICAvLyBGSVhNRTogc2hvdWxkIHN1
cHBvcnQgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5IGh0dHA6Ly93ZWJraXQub3Jn
L2IvNDM2MDkKLSAgICBBU1NFUlQoYmVoYXZpb3IgIT0gVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGlu
Z0JvdW5kYXJ5KTsKLQogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDUyLDcg
KzEwMzQsNyBAQCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLAogICAgICwgbV9ub2RlKDApCiAgICAg
LCBtX3Bvc2l0aW9uTm9kZSgwKQogewotICAgIEFTU0VSVChtX2JlaGF2aW9yID09IFRleHRJdGVy
YXRvckRlZmF1bHRCZWhhdmlvciB8fCBtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckVuZHNBdEVk
aXRpbmdCb3VuZGFyeSk7CisgICAgQVNTRVJUKG1fYmVoYXZpb3IgPT0gVGV4dEl0ZXJhdG9yRGVm
YXVsdEJlaGF2aW9yKTsKIAogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwpAQCAtMTA3Nyw3
ICsxMDU5LDcgQEAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJh
Y2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHNldEN1cnJlbnROb2RlKGVuZE5vZGUpOworICAgIG1fbm9kZSA9IGVuZE5vZGU7CiAgICAg
c2V0VXBGdWxseUNsaXBwZWRTdGFjayhtX2Z1bGx5Q2xpcHBlZFN0YWNrLCBtX25vZGUpOyAgICAK
ICAgICBtX29mZnNldCA9IGVuZE9mZnNldDsKICAgICBtX2hhbmRsZWROb2RlID0gZmFsc2U7CkBA
IC0xMDk2LDcgKzEwNzgsNyBAQCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1w
bGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLAogICAgIG1fbGFzdFRl
eHROb2RlID0gMDsKICAgICBtX2xhc3RDaGFyYWN0ZXIgPSAnXG4nOwogCi0gICAgbV9wYXN0U3Rh
cnROb2RlID0gcHJldmlvdXNJblBvc3RPcmRlckNyb3NzaW5nU2hhZG93Qm91bmRhcmllcyhzdGFy
dE5vZGUsIHN0YXJ0T2Zmc2V0KTsKKyAgICBtX2hhdmVQYXNzZWRTdGFydE5vZGUgPSBmYWxzZTsK
IAogICAgIGFkdmFuY2UoKTsKIH0KQEAgLTExMDgsNyArMTA5MCw3IEBAIHZvaWQgU2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiAgICAgbV9wb3NpdGlvbk5vZGUgPSAw
OwogICAgIG1fdGV4dExlbmd0aCA9IDA7CiAKLSAgICB3aGlsZSAobV9ub2RlICYmIG1fbm9kZSAh
PSBtX3Bhc3RTdGFydE5vZGUpIHsKKyAgICB3aGlsZSAobV9ub2RlICYmICFtX2hhdmVQYXNzZWRT
dGFydE5vZGUpIHsKICAgICAgICAgLy8gRG9uJ3QgaGFuZGxlIG5vZGUgaWYgd2Ugc3RhcnQgaXRl
cmF0aW5nIGF0IFtub2RlLCAwXS4KICAgICAgICAgaWYgKCFtX2hhbmRsZWROb2RlICYmICEobV9u
b2RlID09IG1fZW5kTm9kZSAmJiBtX2VuZE9mZnNldCA9PSAwKSkgewogICAgICAgICAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fbm9kZS0+cmVuZGVyZXIoKTsKQEAgLTExMjUsOCArMTEw
NywxMCBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2UoKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIE5vZGUqIG5leHQg
PSBtX2hhbmRsZWRDaGlsZHJlbiA/IDAgOiBtX25vZGUtPmxhc3RDaGlsZCgpOwotICAgICAgICBp
ZiAoIW5leHQpIHsKKyAgICAgICAgaWYgKCFtX2hhbmRsZWRDaGlsZHJlbiAmJiBtX25vZGUtPmhh
c0NoaWxkTm9kZXMoKSkgeworICAgICAgICAgICAgbV9ub2RlID0gbV9ub2RlLT5sYXN0Q2hpbGQo
KTsKKyAgICAgICAgICAgIHB1c2hGdWxseUNsaXBwZWRTdGF0ZShtX2Z1bGx5Q2xpcHBlZFN0YWNr
LCBtX25vZGUpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRXhpdCBlbXB0eSBj
b250YWluZXJzIGFzIHdlIHBhc3Mgb3ZlciB0aGVtIG9yIGNvbnRhaW5lcnMKICAgICAgICAgICAg
IC8vIHdoZXJlIFtjb250YWluZXIsIDBdIGlzIHdoZXJlIHdlIHN0YXJ0ZWQgaXRlcmF0aW5nLgog
ICAgICAgICAgICAgaWYgKCFtX2hhbmRsZWROb2RlCkBAIC0xMTM4LDExICsxMTIyLDEyIEBAIHZv
aWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiAgICAgICAgICAg
ICAgICAgICAgIG1faGFuZGxlZE5vZGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBtX2hh
bmRsZWRDaGlsZHJlbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICAvLyBFeGl0IGFsbCBvdGhlciBjb250YWluZXJzLgogICAgICAgICAg
ICAgd2hpbGUgKCFtX25vZGUtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFzZXRDdXJyZW50Tm9kZShtX25vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkpCisgICAgICAg
ICAgICAgICAgaWYgKCFhZHZhbmNlUmVzcGVjdGluZ1JhbmdlKG1fbm9kZS0+cGFyZW50T3JIb3N0
Tm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgbV9m
dWxseUNsaXBwZWRTdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgICBleGl0Tm9kZSgpOwpAQCAt
MTE1MywxNCArMTEzOCwxMiBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6
OmFkdmFuY2UoKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgbmV4dCA9IG1fbm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgICAgICBtX2Z1bGx5
Q2xpcHBlZFN0YWNrLnBvcCgpOworICAgICAgICAgICAgaWYgKGFkdmFuY2VSZXNwZWN0aW5nUmFu
Z2UobV9ub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkpCisgICAgICAgICAgICAgICAgcHVzaEZ1bGx5
Q2xpcHBlZFN0YXRlKG1fZnVsbHlDbGlwcGVkU3RhY2ssIG1fbm9kZSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV9ub2RlID0gMDsKICAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKG1fbm9kZSAmJiBzZXRDdXJyZW50Tm9kZShuZXh0KSkKLSAgICAgICAgICAgIHB1
c2hGdWxseUNsaXBwZWRTdGF0ZShtX2Z1bGx5Q2xpcHBlZFN0YWNrLCBtX25vZGUpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBjbGVhckN1cnJlbnROb2RlKCk7CiAKICAgICAgICAgLy8gRm9y
IHRoZSBwdXJwb3NlIG9mIHdvcmQgYm91bmRhcnkgZGV0ZWN0aW9uLAogICAgICAgICAvLyB3ZSBz
aG91bGQgaXRlcmF0ZSBhbGwgdmlzaWJsZSB0ZXh0IGFuZCB0cmFpbGluZyAoY29sbGFwc2VkKSB3
aGl0ZXNwYWNlcy4gCkBAIC0xMjQwLDI2ICsxMjIzLDE3IEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3
YXJkc1RleHRJdGVyYXRvcjo6ZW1pdENoYXJhY3RlcihVQ2hhciBjLCBOb2RlKiBub2RlLCBpbnQg
c3RhCiAgICAgbV9sYXN0Q2hhcmFjdGVyID0gYzsKIH0KIAotYm9vbCBTaW1wbGlmaWVkQmFja3dh
cmRzVGV4dEl0ZXJhdG9yOjpjcm9zc2VzRWRpdGluZ0JvdW5kYXJ5KE5vZGUqIG5vZGUpIGNvbnN0
Citib29sIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2VSZXNwZWN0aW5n
UmFuZ2UoTm9kZSogbmV4dCkKIHsKLSAgICByZXR1cm4gbV9ub2RlICYmIG1fbm9kZS0+aXNDb250
ZW50RWRpdGFibGUoKSAhPSBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwotfQotCi1ib29sIFNp
bXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OnNldEN1cnJlbnROb2RlKE5vZGUqIG5vZGUp
Ci17Ci0gICAgaWYgKCFub2RlKQorICAgIGlmICghbmV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFy
eSAmJiBjcm9zc2VzRWRpdGluZ0JvdW5kYXJ5KG5vZGUpKQorICAgIG1faGF2ZVBhc3NlZFN0YXJ0
Tm9kZSB8PSBtX25vZGUgPT0gbV9zdGFydE5vZGU7CisgICAgaWYgKG1faGF2ZVBhc3NlZFN0YXJ0
Tm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbm9kZSA9IG5vZGU7CisgICAgbV9u
b2RlID0gbmV4dDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTaW1wbGlmaWVkQmFja3dh
cmRzVGV4dEl0ZXJhdG9yOjpjbGVhckN1cnJlbnROb2RlKCkKLXsKLSAgICBtX25vZGUgPSAwOwot
fQotCiBQYXNzUmVmUHRyPFJhbmdlPiBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpy
YW5nZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcG9zaXRpb25Ob2RlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmgKaW5kZXggOGI2MWFmZTIxMWI0ZDM3Yjc0ZjlmNGE1ODIzN2UxZDI4
ZjJkY2ZiNC4uYjBjMzEwYTZmYzdlODAxMWI0YTQ0YzJhZmMxY2RhMDJkZDQyNDlkMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCkBAIC00MSw4ICs0MSw3IEBAIGVudW0gVGV4
dEl0ZXJhdG9yQmVoYXZpb3IgewogICAgIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdl
ZW5BbGxWaXNpYmxlUG9zaXRpb25zID0gMSA8PCAwLAogICAgIFRleHRJdGVyYXRvckVudGVyc1Rl
eHRDb250cm9scyA9IDEgPDwgMSwKICAgICBUZXh0SXRlcmF0b3JFbWl0c1RleHRzV2l0aG91dFRy
YW5zY29kaW5nID0gMSA8PCAyLAotICAgIFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFy
eSA9IDEgPDwgMywKLSAgICBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5ID0gMSA8
PCA0CisgICAgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSA9IDEgPDwgMwogfTsK
ICAgICAKIC8vIEZJWE1FOiBDYW4ndCByZWFsbHkgYW5zd2VyIHRoaXMgcXVlc3Rpb24gY29ycmVj
dGx5IHdpdGhvdXQga25vd2luZyB0aGUgd2hpdGUtc3BhY2UgbW9kZS4KQEAgLTIwNSw5ICsyMDQs
NyBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlUmVwbGFjZWRFbGVtZW50KCk7CiAgICAgYm9v
bCBoYW5kbGVOb25UZXh0Tm9kZSgpOwogICAgIHZvaWQgZW1pdENoYXJhY3RlcihVQ2hhciwgTm9k
ZSosIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCk7Ci0gICAgYm9vbCBjcm9zc2VzRWRp
dGluZ0JvdW5kYXJ5KE5vZGUqKSBjb25zdDsKLSAgICBib29sIHNldEN1cnJlbnROb2RlKE5vZGUq
KTsKLSAgICB2b2lkIGNsZWFyQ3VycmVudE5vZGUoKTsKKyAgICBib29sIGFkdmFuY2VSZXNwZWN0
aW5nUmFuZ2UoTm9kZSopOwogCiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgbV9iZWhhdmlvcjsK
ICAgICAvLyBDdXJyZW50IHBvc2l0aW9uLCBub3QgbmVjZXNzYXJpbHkgb2YgdGhlIHRleHQgYmVp
bmcgcmV0dXJuZWQsIGJ1dCBwb3NpdGlvbgpAQCAtMjM4LDkgKzIzNSw5IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgLy8gVXNlZCBmb3Igd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHRoYXQgYXJlbid0IGlu
IHRoZSBET00sIHNvIHdlIGNhbiBwb2ludCBhdCB0aGVtLgogICAgIFVDaGFyIG1fc2luZ2xlQ2hh
cmFjdGVyQnVmZmVyOwotICAgIAotICAgIC8vIFRoZSBub2RlIGFmdGVyIHRoZSBsYXN0IG5vZGUg
dGhpcyBpdGVyYXRvciBzaG91bGQgcHJvY2Vzcy4KLSAgICBOb2RlKiBtX3Bhc3RTdGFydE5vZGU7
CisKKyAgICAvLyBXaGV0aGVyIG1fbm9kZSBoYXMgYWR2YW5jZWQgYmV5b25kIHRoZSBpdGVyYXRp
b24gcmFuZ2UgKGkuZS4gbV9zdGFydE5vZGUpLgorICAgIGJvb2wgbV9oYXZlUGFzc2VkU3RhcnRO
b2RlOwogfTsKIAogLy8gQnVpbGRzIG9uIHRoZSB0ZXh0IGl0ZXJhdG9yLCBhZGRpbmcgYSBjaGFy
YWN0ZXIgcG9zaXRpb24gc28gd2UgY2FuIHdhbGsgb25lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy92
aXNpYmxlX3VuaXRzLmNwcAppbmRleCAzOTFkNmU2YTQ2YWEwYjNjODRhNGIwMzBmMjZhNWVkMTZl
MGMyOTY4Li5kOGQyYTEwMTdiN2I3MWQ4YTJkNmViNWI4NGUwMTYyMjk4MjI0YTczIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgc3Rh
dGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlv
biYgYywgQm91bmRhcnlTZWFyY2gKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oKTsKIAotICAgIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgaXQoc2Vh
cmNoUmFuZ2UuZ2V0KCksIFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAg
U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSk7CiAg
ICAgdW5zaWduZWQgbmV4dCA9IDA7CiAgICAgYm9vbCBpblRleHRTZWN1cml0eU1vZGUgPSBzdGFy
dC5ub2RlKCkgJiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpICYmIHN0YXJ0Lm5vZGUoKS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkgIT0gVFNOT05FOwogICAgIGJvb2wgbmVl
ZE1vcmVDb250ZXh0ID0gZmFsc2U7CkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIFZpc2libGVQ
b3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRh
cnlTZWFyY2gKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBu
ZXh0KSwgRE9XTlNUUkVBTSk7CiAKICAgICAvLyBVc2UgdGhlIGNoYXJhY3RlciBpdGVyYXRvciB0
byB0cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlvbi4KLSAgICBCYWNr
d2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UuZ2V0KCksIFRleHRJdGVy
YXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAgQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0
b3IgY2hhckl0KHNlYXJjaFJhbmdlLmdldCgpKTsKICAgICBjaGFySXQuYWR2YW5jZShzdHJpbmcu
c2l6ZSgpIC0gc3VmZml4TGVuZ3RoIC0gbmV4dCk7CiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihjaGFySXQucmFuZ2UoKS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83444</attachid>
            <date>2011-02-22 22:00:48 -0800</date>
            <delta_ts>2011-02-22 22:28:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51001-20110223170045.patch</filename>
            <type>text/plain</type>
            <size>14596</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzYwNzUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxZjhlZjI2MzhjZGE5YTUyZWNjMDQ1
YjNlZGM0Njc2M2Y1ZmQwNzcwLi5kYjkwOGViYjFmMTIzZjM0Y2VkZWQ5YjI3Y2YyM2M2NTdhMjM4
ZjBjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDItMjMgIEJlbmphbWluIEthbG1hbiAg
PGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTW92aW5nIG9yIHNlbGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVt
cHMgdG8gc3RhcnQgb2YgY29udGVudGVkaXRhYmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9
ZmFsc2Ugc3BhbiBpcyBlbmNvdW50ZXJlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTEwMDEKKworICAgICAgICBBZGQgcmVncmVzc2lvbiB0ZXN0Lgor
CisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zl
ci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3Nl
bGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sOiBB
ZGRlZC4KKwogMjAxMS0wMi0yMiAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkOyBuZWdsZWN0ZWQgdG8gdXBkYXRlIGFuIGV4cGVjdGVkIHJlc3Vs
dCBhZnRlciBjaGFuZ2luZyBzb21lCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3Nl
bGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnkt
d29yZC1vdmVyLW5vbi1lZGl0YWJsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjUyYjBhOWU3
OTliMjNlYThkOTZhMTcxZmE1OWUyNDdhOTgzZmU3OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9u
LWVkaXRhYmxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKK1BBU1MgZm9yIExUUgorUEFT
UyBmb3IgUlRMCitmb28gYmFyIGJheiBxdXggcXV1eAor16nXlda816jXlCDXqdeV1rzXqNeUINep
15XWvNeo15Qg16nXlda816jXlCDXqdeV1rzXqNeUCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9l
ZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJs
ZS5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5
LXdvcmQtb3Zlci1ub24tZWRpdGFibGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTM1ZGI3NGZhZTQwZjYy
YTM0ZjU5ZDM5ZjI5ZTdhNjY1NjMwZDEwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFi
bGUuaHRtbApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxwcmUgaWQ9ImxvZyI+
PC9wcmU+CisKKzxkaXYgaWQ9Imx0clRleHRDb250YWluZXIiIGNvbnRlbnRlZGl0YWJsZT5mb28g
YmFyIDxzcGFuIGNvbnRlbnRlZGl0YWJsZT1mYWxzZT5iYXo8L3NwYW4+IHF1eCBxdXV4PC9kaXY+
Cis8ZGl2IGlkPSJydGxUZXh0Q29udGFpbmVyIiBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiPiYj
eDA1RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1RTg7JiN4MDVENDsgJiN4MDVFOTsmI3gwNUQ1OyYj
eDA1QkM7JiN4MDVFODsmI3gwNUQ0OworPHNwYW4gY29udGVudGVkaXRhYmxlPWZhbHNlPiYjeDA1
RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1RTg7JiN4MDVENDs8L3NwYW4+CismI3gwNUU5OyYjeDA1
RDU7JiN4MDVCQzsmI3gwNUU4OyYjeDA1RDQ7ICYjeDA1RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1
RTg7JiN4MDVENDs8L2Rpdj4KKworPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhzKSB7CisgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZShzICsgIlxuIikpOworfQorCitmdW5jdGlvbiBwbGFjZUN1cnNvckFmdGVyRmlyc3ROb25l
ZGl0YWJsZUNoaWxkKGNvbnRhaW5lcikgeworICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRhaW5l
ci5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CisgICAgdmFyIG5vZGUgPSBjb250YWluZXIuY2hp
bGROb2Rlc1tpXTsKKyAgICBpZiAobm9kZS5pc0NvbnRlbnRFZGl0YWJsZSAhPT0gdW5kZWZpbmVk
ICYmICFub2RlLmlzQ29udGVudEVkaXRhYmxlKSB7CisgICAgICBnZXRTZWxlY3Rpb24oKS5zZXRQ
b3NpdGlvbihub2RlLm5leHRTaWJsaW5nLCAwKTsKKyAgICAgIHJldHVybiBub2RlOworICAgIH0K
KyAgfQorICB0aHJvdyAiQ291bGRuJ3QgZmluZCBub25lZGl0YWJsZSBjaGlsZCBvZiAiICsgY29u
dGFpbmVyLnRleHRDb250ZW50OworfQorCitmdW5jdGlvbiBleHRlbmRCYWNrd2FyZEJ5V29yZChj
b250YWluZXIsIGJpZGlOYW1lKSB7CisgIG5vbmVkaXRhYmxlQ2hpbGQgPSBwbGFjZUN1cnNvckFm
dGVyRmlyc3ROb25lZGl0YWJsZUNoaWxkKGNvbnRhaW5lcik7CisgIGdldFNlbGVjdGlvbigpLm1v
ZGlmeSgiZXh0ZW5kIiwgImJhY2t3YXJkIiwgIndvcmQiKTsKKyAgaWYgKGdldFNlbGVjdGlvbigp
LnRvU3RyaW5nKCkgPT09IG5vbmVkaXRhYmxlQ2hpbGQudGV4dENvbnRlbnQpCisgICAgbG9nKCJQ
QVNTIGZvciAiICsgYmlkaU5hbWUpOworICBlbHNlCisgICAgbG9nKCJGQUlMIGZvciAiICsgYmlk
aU5hbWUgKyAiLCBzZWxlY3Rpb24gaXMgXCIiICsgZ2V0U2VsZWN0aW9uKCkgKyAiXCIgYnV0IHNo
b3VsZCBiZSBcIiIgKyBub25lZGl0YWJsZUNoaWxkLnRleHRDb250ZW50ICsgIlwiIik7Cit9CisK
K2V4dGVuZEJhY2t3YXJkQnlXb3JkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsdHJUZXh0Q29u
dGFpbmVyIiksICJMVFIiKTsKK2V4dGVuZEJhY2t3YXJkQnlXb3JkKGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJydGxUZXh0Q29udGFpbmVyIiksICJSVEwiKTsKKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cis8
L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhZjZkYzYwMDM3ODA3YzM2NzI0Y2U2ZGY5NTIwZjZmODQ3
YTNkZTI2Li43YjNmZjJlOGRiZDk4MmE0ZWY3NmE1NDBjZGM3ZTQzYmQwMzExMWE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMDItMjMgIEJlbmphbWluIEthbG1hbiAgPGthbG1h
bkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTW92aW5nIG9yIHNlbGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVtcHMgdG8g
c3RhcnQgb2YgY29udGVudGVkaXRhYmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9ZmFsc2Ug
c3BhbiBpcyBlbmNvdW50ZXJlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTEwMDEKKworICAgICAgICBUZXN0OiBlZGl0aW5nL3NlbGVjdGlvbi9leHRl
bmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sCisKKyAgICAgICAgUmV2
ZXJ0IHNvbWUgcHJldmlvdXMgY2hhbmdlcyAodGhlIFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdC
b3VuZGFyeSB0ZXh0IGl0ZXJhdGlvbiBiZWhhdmlvdXIpIHdoaWNoIGNhdXNlZCB0aGlzCisgICAg
ICAgIGJ1ZyBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCBmaXggU2ltcGxpZmllZEJhY2t3YXJkc1Rl
eHRJdGVyYXRvcidzIGl0ZXJhdGlvbiByYW5nZSBjaGVjayBhcyBhbiBhbHRlcm5hdGl2ZSBmaXgu
CisKKyAgICAgICAgVGhlIG9yaWdpbmFsIGJ1ZyB3YXMgdGhhdCBkb3VibGUtY2xpY2tpbmcgb24g
YW4gaW5saW5lIGVkaXRhYmxlIHNwYW4gYXQgdGhlIHN0YXJ0IG9mIGEgcGFyYWdyYXBoIHdvdWxk
IGNsZWFyIHRoZQorICAgICAgICBzZWxlY3Rpb24gKHdlYmtpdC5vcmcvYi8zNjM2MCkuICBUaGlz
IHdhcyBjYXVzZWQgYnkgdXBzdHJlYW0vZG93bnN0cmVhbSBWaXNiaWJsZVBvc2l0aW9uIGNvbXBs
aWNhdGlvbnMuICBUbyBmaXgsCisgICAgICAgIHJlZnVzZSB0byBpdGVyYXRlIGJleW9uZCB0aGUg
c3RhcnQgbm9kZSAocmF0aGVyIHRoYW4gcmVmdXNpbmcgdG8gaXRlcmF0ZSBhY3Jvc3MgZWRpdGFi
bGUgYm91bmRhcmllcywgd2hpY2gKKyAgICAgICAgY2F1c2VzIHRoaXMgYnVnKS4KKworICAgICAg
ICBUbyBzZWUgd2h5IHRoaXMgaXMgY29ycmVjdCwgYW5kIHRvIG1ha2UgaXQgY2xlYXJlciB0aGF0
IGlzIGluZGVlZCB3aGF0IGlzIGhhcHBlbmluZywgdGhlIHRleHQgaXRlcmF0b3IgY29kZSBoYXMK
KyAgICAgICAgYmVlbiBzbGlnaHRseSByZXN0cnVjdHVyZWQgdG8gZXhwcmVzcyB0aGUgaW52YXJp
YW50IHRoYXQgdGhlIGl0ZXJhdG9yIHdpbGwgbmV2ZXIgYWR2YW5jZSBwYXN0IHRoZSBzdGFydCBu
b2RlLgorCisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEl0ZXJhdG9yOjpUZXh0SXRlcmF0b3IpOiBSZW1vdmUgcmVmZXJlbmNlcyB0byBU
ZXh0SXRlcmF0aW9uRW5kc0F0RWRpdGluZyBib3VuZGFyeS4KKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRl
cmF0b3IpOiBSZW1vdmUgbV9wYXN0U3RhcnROb2RlIGFzIHRoZQorICAgICAgICBtZWNoYW5pc20g
Zm9yIGl0ZXJhdGlvbiByYW5nZSBjaGVja2luZywgYW5kIHVzZSBhIGZsYWcgbV9oYXZlUGFzc2Vk
U3RhcnROb2RlIGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dhcmRz
VGV4dEl0ZXJhdG9yOjphZHZhbmNlKTogQ2xlYW4gdXAsIHVzZSBhZHZhbmNlUmVzcGVjdGluZ1Jh
bmdlIGFuZAorICAgICAgICBtX2hhdmVQYXNzZWRTdGFydE5vZGUgZm9yIGl0ZXJhdGlvbiByYW5n
ZSBjaGVja2luZyByYXRoZXIgdGhhbiBtX3Bhc3RTdGFydE5vZGUuCisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlUmVzcGVjdGluZ1Jhbmdl
KTogVGhlIG5ldyB3YXkgb2YgbW9kaWZ5aW5nIG1fbm9kZQorICAgICAgICB3aGljaCB1cGRhdGVz
IG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZSBhbmQgcmVmdXNlcyB0byBjb250aW51ZSB3aGVuIGl0IGJl
Y29tZXMgdHJ1ZS4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5oOiBSZW1vdmUgVGV4
dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5LCB1cGRhdGUgZm9yIG5ldy9yZW1vdmVkIHBy
b3RvdHlwZXMgYW5kCisgICAgICAgIG1lbWJlciB2YXJpYWJsZXMuCisgICAgICAgICogZWRpdGlu
Zy92aXNpYmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzQm91bmRhcnkp
OiBSZW1vdmUgcmVmZXJlbmNlcyB0byBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnku
CisKIDIwMTEtMDItMjIgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmNwcAppbmRleCBkM2E2NTk2NGY3ZTA3Mjg2ZWNiMjczNzY0MzI0ZDU2ZjFhNWM4MTI1
Li4zYjE4MTI3NTUyYWYzM2I2MzU4ZTE1MGRjNjYwZjM0MTJmOGIwZGMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC0xOTQsMjEgKzE5NCw2IEBAIHN0YXRpYyBO
b2RlKiBuZXh0SW5QcmVPcmRlckNyb3NzaW5nU2hhZG93Qm91bmRhcmllcyhOb2RlKiByYW5nZUVu
ZENvbnRhaW5lciwgaW50CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBOb2RlKiBwcmV2aW91
c0luUG9zdE9yZGVyQ3Jvc3NpbmdTaGFkb3dCb3VuZGFyaWVzKE5vZGUqIHJhbmdlU3RhcnRDb250
YWluZXIsIGludCByYW5nZVN0YXJ0T2Zmc2V0KQotewotICAgIGlmICghcmFuZ2VTdGFydENvbnRh
aW5lcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHJhbmdlU3RhcnRPZmZzZXQgPiAwICYm
ICFyYW5nZVN0YXJ0Q29udGFpbmVyLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkgewotICAgICAgICBp
ZiAoTm9kZSogcHJldmlvdXMgPSByYW5nZVN0YXJ0Q29udGFpbmVyLT5jaGlsZE5vZGUocmFuZ2VT
dGFydE9mZnNldCAtIDEpKQotICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzOwotICAgIH0KLSAg
ICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZVN0YXJ0Q29udGFpbmVyOyBub2RlOyBub2RlID0gbm9k
ZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChOb2RlKiBwcmV2aW91cyA9IG5v
ZGUtPnByZXZpb3VzU2libGluZygpKQotICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzOwotICAg
IH0KLSAgICByZXR1cm4gMDsKLX0KLQogLy8gLS0tLS0tLS0KIAogc3RhdGljIGlubGluZSBib29s
IGZ1bGx5Q2xpcHNDb250ZW50cyhOb2RlKiBub2RlKQpAQCAtMjkwLDkgKzI3NSw2IEBAIFRleHRJ
dGVyYXRvcjo6VGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLCBUZXh0SXRlcmF0b3JCZWhhdmlv
ciBiZWhhdmlvcikKICAgICAsIG1faGFuZGxlZEZpcnN0TGV0dGVyKGZhbHNlKQogICAgICwgbV9p
Z25vcmVzU3R5bGVWaXNpYmlsaXR5KGJlaGF2aW9yICYgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxl
VmlzaWJpbGl0eSkKIHsKLSAgICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgVGV4dEl0ZXJhdG9y
RW5kc0F0RWRpdGluZ0JvdW5kYXJ5IGh0dHA6Ly93ZWJraXQub3JnL2IvNDM2MDkKLSAgICBBU1NF
UlQoYmVoYXZpb3IgIT0gVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5KTsKLQogICAg
IGlmICghcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDUyLDcgKzEwMzQsNyBAQCBTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9y
KGNvbnN0IFJhbmdlKiByLAogICAgICwgbV9ub2RlKDApCiAgICAgLCBtX3Bvc2l0aW9uTm9kZSgw
KQogewotICAgIEFTU0VSVChtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlv
ciB8fCBtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7Cisg
ICAgQVNTRVJUKG1fYmVoYXZpb3IgPT0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKIAog
ICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwpAQCAtMTA3Nyw3ICsxMDU5LDcgQEAgU2ltcGxp
ZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRv
cihjb25zdCBSYW5nZSogciwKICAgICAgICAgfQogICAgIH0KIAotICAgIHNldEN1cnJlbnROb2Rl
KGVuZE5vZGUpOworICAgIG1fbm9kZSA9IGVuZE5vZGU7CiAgICAgc2V0VXBGdWxseUNsaXBwZWRT
dGFjayhtX2Z1bGx5Q2xpcHBlZFN0YWNrLCBtX25vZGUpOyAgICAKICAgICBtX29mZnNldCA9IGVu
ZE9mZnNldDsKICAgICBtX2hhbmRsZWROb2RlID0gZmFsc2U7CkBAIC0xMDk2LDcgKzEwNzgsNyBA
QCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4
dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLAogICAgIG1fbGFzdFRleHROb2RlID0gMDsKICAgICBt
X2xhc3RDaGFyYWN0ZXIgPSAnXG4nOwogCi0gICAgbV9wYXN0U3RhcnROb2RlID0gcHJldmlvdXNJ
blBvc3RPcmRlckNyb3NzaW5nU2hhZG93Qm91bmRhcmllcyhzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0
KTsKKyAgICBtX2hhdmVQYXNzZWRTdGFydE5vZGUgPSBmYWxzZTsKIAogICAgIGFkdmFuY2UoKTsK
IH0KQEAgLTExMDgsNyArMTA5MCw3IEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVy
YXRvcjo6YWR2YW5jZSgpCiAgICAgbV9wb3NpdGlvbk5vZGUgPSAwOwogICAgIG1fdGV4dExlbmd0
aCA9IDA7CiAKLSAgICB3aGlsZSAobV9ub2RlICYmIG1fbm9kZSAhPSBtX3Bhc3RTdGFydE5vZGUp
IHsKKyAgICB3aGlsZSAobV9ub2RlICYmICFtX2hhdmVQYXNzZWRTdGFydE5vZGUpIHsKICAgICAg
ICAgLy8gRG9uJ3QgaGFuZGxlIG5vZGUgaWYgd2Ugc3RhcnQgaXRlcmF0aW5nIGF0IFtub2RlLCAw
XS4KICAgICAgICAgaWYgKCFtX2hhbmRsZWROb2RlICYmICEobV9ub2RlID09IG1fZW5kTm9kZSAm
JiBtX2VuZE9mZnNldCA9PSAwKSkgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IG1fbm9kZS0+cmVuZGVyZXIoKTsKQEAgLTExMjUsOCArMTEwNywxMCBAQCB2b2lkIFNpbXBs
aWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2UoKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIE5vZGUqIG5leHQgPSBtX2hhbmRsZWRDaGlsZHJl
biA/IDAgOiBtX25vZGUtPmxhc3RDaGlsZCgpOwotICAgICAgICBpZiAoIW5leHQpIHsKKyAgICAg
ICAgaWYgKCFtX2hhbmRsZWRDaGlsZHJlbiAmJiBtX25vZGUtPmhhc0NoaWxkTm9kZXMoKSkgewor
ICAgICAgICAgICAgbV9ub2RlID0gbV9ub2RlLT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgICAgIHB1
c2hGdWxseUNsaXBwZWRTdGF0ZShtX2Z1bGx5Q2xpcHBlZFN0YWNrLCBtX25vZGUpOworICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRXhpdCBlbXB0eSBjb250YWluZXJzIGFzIHdlIHBh
c3Mgb3ZlciB0aGVtIG9yIGNvbnRhaW5lcnMKICAgICAgICAgICAgIC8vIHdoZXJlIFtjb250YWlu
ZXIsIDBdIGlzIHdoZXJlIHdlIHN0YXJ0ZWQgaXRlcmF0aW5nLgogICAgICAgICAgICAgaWYgKCFt
X2hhbmRsZWROb2RlCkBAIC0xMTM4LDExICsxMTIyLDEyIEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3
YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiAgICAgICAgICAgICAgICAgICAgIG1faGFuZGxl
ZE5vZGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBtX2hhbmRsZWRDaGlsZHJlbiA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9ICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAv
LyBFeGl0IGFsbCBvdGhlciBjb250YWluZXJzLgogICAgICAgICAgICAgd2hpbGUgKCFtX25vZGUt
PnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXRDdXJyZW50Tm9k
ZShtX25vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkpCisgICAgICAgICAgICAgICAgaWYgKCFhZHZh
bmNlUmVzcGVjdGluZ1JhbmdlKG1fbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgbV9mdWxseUNsaXBwZWRTdGFjay5w
b3AoKTsKICAgICAgICAgICAgICAgICBleGl0Tm9kZSgpOwpAQCAtMTE1MywxNCArMTEzOCwxMiBA
QCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2UoKQogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbmV4dCA9IG1fbm9kZS0+
cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgICAgICBtX2Z1bGx5Q2xpcHBlZFN0YWNrLnBvcCgp
OworICAgICAgICAgICAgaWYgKGFkdmFuY2VSZXNwZWN0aW5nUmFuZ2UobV9ub2RlLT5wcmV2aW91
c1NpYmxpbmcoKSkpCisgICAgICAgICAgICAgICAgcHVzaEZ1bGx5Q2xpcHBlZFN0YXRlKG1fZnVs
bHlDbGlwcGVkU3RhY2ssIG1fbm9kZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9ub2RlID0gMDsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZSAm
JiBzZXRDdXJyZW50Tm9kZShuZXh0KSkKLSAgICAgICAgICAgIHB1c2hGdWxseUNsaXBwZWRTdGF0
ZShtX2Z1bGx5Q2xpcHBlZFN0YWNrLCBtX25vZGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjbGVhckN1cnJlbnROb2RlKCk7CiAKICAgICAgICAgLy8gRm9yIHRoZSBwdXJwb3NlIG9mIHdv
cmQgYm91bmRhcnkgZGV0ZWN0aW9uLAogICAgICAgICAvLyB3ZSBzaG91bGQgaXRlcmF0ZSBhbGwg
dmlzaWJsZSB0ZXh0IGFuZCB0cmFpbGluZyAoY29sbGFwc2VkKSB3aGl0ZXNwYWNlcy4gCkBAIC0x
MjQwLDI2ICsxMjIzLDE3IEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6
ZW1pdENoYXJhY3RlcihVQ2hhciBjLCBOb2RlKiBub2RlLCBpbnQgc3RhCiAgICAgbV9sYXN0Q2hh
cmFjdGVyID0gYzsKIH0KIAotYm9vbCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpj
cm9zc2VzRWRpdGluZ0JvdW5kYXJ5KE5vZGUqIG5vZGUpIGNvbnN0Citib29sIFNpbXBsaWZpZWRC
YWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2VSZXNwZWN0aW5nUmFuZ2UoTm9kZSogbmV4dCkK
IHsKLSAgICByZXR1cm4gbV9ub2RlICYmIG1fbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAhPSBu
b2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwotfQotCi1ib29sIFNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3I6OnNldEN1cnJlbnROb2RlKE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2Rl
KQorICAgIGlmICghbmV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2JlaGF2
aW9yID09IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSAmJiBjcm9zc2VzRWRpdGlu
Z0JvdW5kYXJ5KG5vZGUpKQorICAgIG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZSB8PSBtX25vZGUgPT0g
bV9zdGFydE5vZGU7CisgICAgaWYgKG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fbm9kZSA9IG5vZGU7CisgICAgbV9ub2RlID0gbmV4dDsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpj
bGVhckN1cnJlbnROb2RlKCkKLXsKLSAgICBtX25vZGUgPSAwOwotfQotCiBQYXNzUmVmUHRyPFJh
bmdlPiBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpyYW5nZSgpIGNvbnN0CiB7CiAg
ICAgaWYgKG1fcG9zaXRpb25Ob2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgK
aW5kZXggOGI2MWFmZTIxMWI0ZDM3Yjc0ZjlmNGE1ODIzN2UxZDI4ZjJkY2ZiNC4uYjBjMzEwYTZm
YzdlODAxMWI0YTQ0YzJhZmMxY2RhMDJkZDQyNDlkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5oCkBAIC00MSw4ICs0MSw3IEBAIGVudW0gVGV4dEl0ZXJhdG9yQmVoYXZpb3Ig
ewogICAgIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRp
b25zID0gMSA8PCAwLAogICAgIFRleHRJdGVyYXRvckVudGVyc1RleHRDb250cm9scyA9IDEgPDwg
MSwKICAgICBUZXh0SXRlcmF0b3JFbWl0c1RleHRzV2l0aG91dFRyYW5zY29kaW5nID0gMSA8PCAy
LAotICAgIFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSA9IDEgPDwgMywKLSAgICBU
ZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5ID0gMSA8PCA0CisgICAgVGV4dEl0ZXJh
dG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSA9IDEgPDwgMwogfTsKICAgICAKIC8vIEZJWE1FOiBD
YW4ndCByZWFsbHkgYW5zd2VyIHRoaXMgcXVlc3Rpb24gY29ycmVjdGx5IHdpdGhvdXQga25vd2lu
ZyB0aGUgd2hpdGUtc3BhY2UgbW9kZS4KQEAgLTIwNSw5ICsyMDQsNyBAQCBwcml2YXRlOgogICAg
IGJvb2wgaGFuZGxlUmVwbGFjZWRFbGVtZW50KCk7CiAgICAgYm9vbCBoYW5kbGVOb25UZXh0Tm9k
ZSgpOwogICAgIHZvaWQgZW1pdENoYXJhY3RlcihVQ2hhciwgTm9kZSosIGludCBzdGFydE9mZnNl
dCwgaW50IGVuZE9mZnNldCk7Ci0gICAgYm9vbCBjcm9zc2VzRWRpdGluZ0JvdW5kYXJ5KE5vZGUq
KSBjb25zdDsKLSAgICBib29sIHNldEN1cnJlbnROb2RlKE5vZGUqKTsKLSAgICB2b2lkIGNsZWFy
Q3VycmVudE5vZGUoKTsKKyAgICBib29sIGFkdmFuY2VSZXNwZWN0aW5nUmFuZ2UoTm9kZSopOwog
CiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgbV9iZWhhdmlvcjsKICAgICAvLyBDdXJyZW50IHBv
c2l0aW9uLCBub3QgbmVjZXNzYXJpbHkgb2YgdGhlIHRleHQgYmVpbmcgcmV0dXJuZWQsIGJ1dCBw
b3NpdGlvbgpAQCAtMjM4LDkgKzIzNSw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gVXNlZCBm
b3Igd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHRoYXQgYXJlbid0IGluIHRoZSBET00sIHNvIHdlIGNh
biBwb2ludCBhdCB0aGVtLgogICAgIFVDaGFyIG1fc2luZ2xlQ2hhcmFjdGVyQnVmZmVyOwotICAg
IAotICAgIC8vIFRoZSBub2RlIGFmdGVyIHRoZSBsYXN0IG5vZGUgdGhpcyBpdGVyYXRvciBzaG91
bGQgcHJvY2Vzcy4KLSAgICBOb2RlKiBtX3Bhc3RTdGFydE5vZGU7CisKKyAgICAvLyBXaGV0aGVy
IG1fbm9kZSBoYXMgYWR2YW5jZWQgYmV5b25kIHRoZSBpdGVyYXRpb24gcmFuZ2UgKGkuZS4gbV9z
dGFydE5vZGUpLgorICAgIGJvb2wgbV9oYXZlUGFzc2VkU3RhcnROb2RlOwogfTsKIAogLy8gQnVp
bGRzIG9uIHRoZSB0ZXh0IGl0ZXJhdG9yLCBhZGRpbmcgYSBjaGFyYWN0ZXIgcG9zaXRpb24gc28g
d2UgY2FuIHdhbGsgb25lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2li
bGVfdW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcApp
bmRleCAyODFiYzQxYzRiN2I2MzgzMjYxNDE4YTRhYzkzOTNiZDEwYTQyZGE1Li45Y2I0ZDZkMDUx
NmI0ZWUyNGQ2MGUxMmI0MTU2MGY3MjY2YTkzOGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
dmlzaWJsZV91bml0cy5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlv
biBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFy
Y2gKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAotICAg
IFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UuZ2V0KCksIFRl
eHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAgU2ltcGxpZmllZEJhY2t3YXJk
c1RleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSk7CiAgICAgdW5zaWduZWQgbmV4dCA9
IDA7CiAgICAgYm9vbCBpblRleHRTZWN1cml0eU1vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgp
ICYmIHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYgc3RhcnQuZGVwcmVjYXRl
ZE5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkgIT0gVFNOT05FOwog
ICAgIGJvb2wgbmVlZE1vcmVDb250ZXh0ID0gZmFsc2U7CkBAIC0xMjQsNyArMTI0LDcgQEAgc3Rh
dGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlv
biYgYywgQm91bmRhcnlTZWFyY2gKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3Np
dGlvbihub2RlLCBuZXh0KSwgRE9XTlNUUkVBTSk7CiAKICAgICAvLyBVc2UgdGhlIGNoYXJhY3Rl
ciBpdGVyYXRvciB0byB0cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlv
bi4KLSAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UuZ2V0
KCksIFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAgQmFja3dhcmRzQ2hh
cmFjdGVySXRlcmF0b3IgY2hhckl0KHNlYXJjaFJhbmdlLmdldCgpKTsKICAgICBjaGFySXQuYWR2
YW5jZShzdHJpbmcuc2l6ZSgpIC0gc3VmZml4TGVuZ3RoIC0gbmV4dCk7CiAgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbihjaGFySXQucmFuZ2UoKS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7
CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83447</attachid>
            <date>2011-02-22 22:28:56 -0800</date>
            <delta_ts>2011-02-22 23:00:10 -0800</delta_ts>
            <desc>Patch with correct svn version</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>14596</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzkzNjcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxZjhlZjI2MzhjZGE5YTUyZWNjMDQ1
YjNlZGM0Njc2M2Y1ZmQwNzcwLi5kYjkwOGViYjFmMTIzZjM0Y2VkZWQ5YjI3Y2YyM2M2NTdhMjM4
ZjBjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDItMjMgIEJlbmphbWluIEthbG1hbiAg
PGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTW92aW5nIG9yIHNlbGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVt
cHMgdG8gc3RhcnQgb2YgY29udGVudGVkaXRhYmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9
ZmFsc2Ugc3BhbiBpcyBlbmNvdW50ZXJlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTEwMDEKKworICAgICAgICBBZGQgcmVncmVzc2lvbiB0ZXN0Lgor
CisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zl
ci1ub24tZWRpdGFibGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3Nl
bGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sOiBB
ZGRlZC4KKwogMjAxMS0wMi0yMiAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkOyBuZWdsZWN0ZWQgdG8gdXBkYXRlIGFuIGV4cGVjdGVkIHJlc3Vs
dCBhZnRlciBjaGFuZ2luZyBzb21lCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3Nl
bGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnkt
d29yZC1vdmVyLW5vbi1lZGl0YWJsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjUyYjBhOWU3
OTliMjNlYThkOTZhMTcxZmE1OWUyNDdhOTgzZmU3OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9u
LWVkaXRhYmxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKK1BBU1MgZm9yIExUUgorUEFT
UyBmb3IgUlRMCitmb28gYmFyIGJheiBxdXggcXV1eAor16nXlda816jXlCDXqdeV1rzXqNeUINep
15XWvNeo15Qg16nXlda816jXlCDXqdeV1rzXqNeUCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9l
ZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJs
ZS5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5
LXdvcmQtb3Zlci1ub24tZWRpdGFibGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTM1ZGI3NGZhZTQwZjYy
YTM0ZjU5ZDM5ZjI5ZTdhNjY1NjMwZDEwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFi
bGUuaHRtbApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxwcmUgaWQ9ImxvZyI+
PC9wcmU+CisKKzxkaXYgaWQ9Imx0clRleHRDb250YWluZXIiIGNvbnRlbnRlZGl0YWJsZT5mb28g
YmFyIDxzcGFuIGNvbnRlbnRlZGl0YWJsZT1mYWxzZT5iYXo8L3NwYW4+IHF1eCBxdXV4PC9kaXY+
Cis8ZGl2IGlkPSJydGxUZXh0Q29udGFpbmVyIiBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiPiYj
eDA1RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1RTg7JiN4MDVENDsgJiN4MDVFOTsmI3gwNUQ1OyYj
eDA1QkM7JiN4MDVFODsmI3gwNUQ0OworPHNwYW4gY29udGVudGVkaXRhYmxlPWZhbHNlPiYjeDA1
RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1RTg7JiN4MDVENDs8L3NwYW4+CismI3gwNUU5OyYjeDA1
RDU7JiN4MDVCQzsmI3gwNUU4OyYjeDA1RDQ7ICYjeDA1RTk7JiN4MDVENTsmI3gwNUJDOyYjeDA1
RTg7JiN4MDVENDs8L2Rpdj4KKworPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhzKSB7CisgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZShzICsgIlxuIikpOworfQorCitmdW5jdGlvbiBwbGFjZUN1cnNvckFmdGVyRmlyc3ROb25l
ZGl0YWJsZUNoaWxkKGNvbnRhaW5lcikgeworICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRhaW5l
ci5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CisgICAgdmFyIG5vZGUgPSBjb250YWluZXIuY2hp
bGROb2Rlc1tpXTsKKyAgICBpZiAobm9kZS5pc0NvbnRlbnRFZGl0YWJsZSAhPT0gdW5kZWZpbmVk
ICYmICFub2RlLmlzQ29udGVudEVkaXRhYmxlKSB7CisgICAgICBnZXRTZWxlY3Rpb24oKS5zZXRQ
b3NpdGlvbihub2RlLm5leHRTaWJsaW5nLCAwKTsKKyAgICAgIHJldHVybiBub2RlOworICAgIH0K
KyAgfQorICB0aHJvdyAiQ291bGRuJ3QgZmluZCBub25lZGl0YWJsZSBjaGlsZCBvZiAiICsgY29u
dGFpbmVyLnRleHRDb250ZW50OworfQorCitmdW5jdGlvbiBleHRlbmRCYWNrd2FyZEJ5V29yZChj
b250YWluZXIsIGJpZGlOYW1lKSB7CisgIG5vbmVkaXRhYmxlQ2hpbGQgPSBwbGFjZUN1cnNvckFm
dGVyRmlyc3ROb25lZGl0YWJsZUNoaWxkKGNvbnRhaW5lcik7CisgIGdldFNlbGVjdGlvbigpLm1v
ZGlmeSgiZXh0ZW5kIiwgImJhY2t3YXJkIiwgIndvcmQiKTsKKyAgaWYgKGdldFNlbGVjdGlvbigp
LnRvU3RyaW5nKCkgPT09IG5vbmVkaXRhYmxlQ2hpbGQudGV4dENvbnRlbnQpCisgICAgbG9nKCJQ
QVNTIGZvciAiICsgYmlkaU5hbWUpOworICBlbHNlCisgICAgbG9nKCJGQUlMIGZvciAiICsgYmlk
aU5hbWUgKyAiLCBzZWxlY3Rpb24gaXMgXCIiICsgZ2V0U2VsZWN0aW9uKCkgKyAiXCIgYnV0IHNo
b3VsZCBiZSBcIiIgKyBub25lZGl0YWJsZUNoaWxkLnRleHRDb250ZW50ICsgIlwiIik7Cit9CisK
K2V4dGVuZEJhY2t3YXJkQnlXb3JkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsdHJUZXh0Q29u
dGFpbmVyIiksICJMVFIiKTsKK2V4dGVuZEJhY2t3YXJkQnlXb3JkKGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJydGxUZXh0Q29udGFpbmVyIiksICJSVEwiKTsKKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cis8
L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhZjZkYzYwMDM3ODA3YzM2NzI0Y2U2ZGY5NTIwZjZmODQ3
YTNkZTI2Li43YjNmZjJlOGRiZDk4MmE0ZWY3NmE1NDBjZGM3ZTQzYmQwMzExMWE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMDItMjMgIEJlbmphbWluIEthbG1hbiAgPGthbG1h
bkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTW92aW5nIG9yIHNlbGVjdGluZyBiYWNrd2FyZHMgYnkgd29yZHMganVtcHMgdG8g
c3RhcnQgb2YgY29udGVudGVkaXRhYmxlIHJlZ2lvbiBpZiBjb250ZW50ZWRpdGFibGU9ZmFsc2Ug
c3BhbiBpcyBlbmNvdW50ZXJlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTEwMDEKKworICAgICAgICBUZXN0OiBlZGl0aW5nL3NlbGVjdGlvbi9leHRl
bmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sCisKKyAgICAgICAgUmV2
ZXJ0IHNvbWUgcHJldmlvdXMgY2hhbmdlcyAodGhlIFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdC
b3VuZGFyeSB0ZXh0IGl0ZXJhdGlvbiBiZWhhdmlvdXIpIHdoaWNoIGNhdXNlZCB0aGlzCisgICAg
ICAgIGJ1ZyBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCBmaXggU2ltcGxpZmllZEJhY2t3YXJkc1Rl
eHRJdGVyYXRvcidzIGl0ZXJhdGlvbiByYW5nZSBjaGVjayBhcyBhbiBhbHRlcm5hdGl2ZSBmaXgu
CisKKyAgICAgICAgVGhlIG9yaWdpbmFsIGJ1ZyB3YXMgdGhhdCBkb3VibGUtY2xpY2tpbmcgb24g
YW4gaW5saW5lIGVkaXRhYmxlIHNwYW4gYXQgdGhlIHN0YXJ0IG9mIGEgcGFyYWdyYXBoIHdvdWxk
IGNsZWFyIHRoZQorICAgICAgICBzZWxlY3Rpb24gKHdlYmtpdC5vcmcvYi8zNjM2MCkuICBUaGlz
IHdhcyBjYXVzZWQgYnkgdXBzdHJlYW0vZG93bnN0cmVhbSBWaXNiaWJsZVBvc2l0aW9uIGNvbXBs
aWNhdGlvbnMuICBUbyBmaXgsCisgICAgICAgIHJlZnVzZSB0byBpdGVyYXRlIGJleW9uZCB0aGUg
c3RhcnQgbm9kZSAocmF0aGVyIHRoYW4gcmVmdXNpbmcgdG8gaXRlcmF0ZSBhY3Jvc3MgZWRpdGFi
bGUgYm91bmRhcmllcywgd2hpY2gKKyAgICAgICAgY2F1c2VzIHRoaXMgYnVnKS4KKworICAgICAg
ICBUbyBzZWUgd2h5IHRoaXMgaXMgY29ycmVjdCwgYW5kIHRvIG1ha2UgaXQgY2xlYXJlciB0aGF0
IGlzIGluZGVlZCB3aGF0IGlzIGhhcHBlbmluZywgdGhlIHRleHQgaXRlcmF0b3IgY29kZSBoYXMK
KyAgICAgICAgYmVlbiBzbGlnaHRseSByZXN0cnVjdHVyZWQgdG8gZXhwcmVzcyB0aGUgaW52YXJp
YW50IHRoYXQgdGhlIGl0ZXJhdG9yIHdpbGwgbmV2ZXIgYWR2YW5jZSBwYXN0IHRoZSBzdGFydCBu
b2RlLgorCisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEl0ZXJhdG9yOjpUZXh0SXRlcmF0b3IpOiBSZW1vdmUgcmVmZXJlbmNlcyB0byBU
ZXh0SXRlcmF0aW9uRW5kc0F0RWRpdGluZyBib3VuZGFyeS4KKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRl
cmF0b3IpOiBSZW1vdmUgbV9wYXN0U3RhcnROb2RlIGFzIHRoZQorICAgICAgICBtZWNoYW5pc20g
Zm9yIGl0ZXJhdGlvbiByYW5nZSBjaGVja2luZywgYW5kIHVzZSBhIGZsYWcgbV9oYXZlUGFzc2Vk
U3RhcnROb2RlIGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dhcmRz
VGV4dEl0ZXJhdG9yOjphZHZhbmNlKTogQ2xlYW4gdXAsIHVzZSBhZHZhbmNlUmVzcGVjdGluZ1Jh
bmdlIGFuZAorICAgICAgICBtX2hhdmVQYXNzZWRTdGFydE5vZGUgZm9yIGl0ZXJhdGlvbiByYW5n
ZSBjaGVja2luZyByYXRoZXIgdGhhbiBtX3Bhc3RTdGFydE5vZGUuCisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlUmVzcGVjdGluZ1Jhbmdl
KTogVGhlIG5ldyB3YXkgb2YgbW9kaWZ5aW5nIG1fbm9kZQorICAgICAgICB3aGljaCB1cGRhdGVz
IG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZSBhbmQgcmVmdXNlcyB0byBjb250aW51ZSB3aGVuIGl0IGJl
Y29tZXMgdHJ1ZS4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5oOiBSZW1vdmUgVGV4
dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5LCB1cGRhdGUgZm9yIG5ldy9yZW1vdmVkIHBy
b3RvdHlwZXMgYW5kCisgICAgICAgIG1lbWJlciB2YXJpYWJsZXMuCisgICAgICAgICogZWRpdGlu
Zy92aXNpYmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzQm91bmRhcnkp
OiBSZW1vdmUgcmVmZXJlbmNlcyB0byBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnku
CisKIDIwMTEtMDItMjIgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmNwcAppbmRleCBkM2E2NTk2NGY3ZTA3Mjg2ZWNiMjczNzY0MzI0ZDU2ZjFhNWM4MTI1
Li4zYjE4MTI3NTUyYWYzM2I2MzU4ZTE1MGRjNjYwZjM0MTJmOGIwZGMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC0xOTQsMjEgKzE5NCw2IEBAIHN0YXRpYyBO
b2RlKiBuZXh0SW5QcmVPcmRlckNyb3NzaW5nU2hhZG93Qm91bmRhcmllcyhOb2RlKiByYW5nZUVu
ZENvbnRhaW5lciwgaW50CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBOb2RlKiBwcmV2aW91
c0luUG9zdE9yZGVyQ3Jvc3NpbmdTaGFkb3dCb3VuZGFyaWVzKE5vZGUqIHJhbmdlU3RhcnRDb250
YWluZXIsIGludCByYW5nZVN0YXJ0T2Zmc2V0KQotewotICAgIGlmICghcmFuZ2VTdGFydENvbnRh
aW5lcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHJhbmdlU3RhcnRPZmZzZXQgPiAwICYm
ICFyYW5nZVN0YXJ0Q29udGFpbmVyLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkgewotICAgICAgICBp
ZiAoTm9kZSogcHJldmlvdXMgPSByYW5nZVN0YXJ0Q29udGFpbmVyLT5jaGlsZE5vZGUocmFuZ2VT
dGFydE9mZnNldCAtIDEpKQotICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzOwotICAgIH0KLSAg
ICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZVN0YXJ0Q29udGFpbmVyOyBub2RlOyBub2RlID0gbm9k
ZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChOb2RlKiBwcmV2aW91cyA9IG5v
ZGUtPnByZXZpb3VzU2libGluZygpKQotICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzOwotICAg
IH0KLSAgICByZXR1cm4gMDsKLX0KLQogLy8gLS0tLS0tLS0KIAogc3RhdGljIGlubGluZSBib29s
IGZ1bGx5Q2xpcHNDb250ZW50cyhOb2RlKiBub2RlKQpAQCAtMjkwLDkgKzI3NSw2IEBAIFRleHRJ
dGVyYXRvcjo6VGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLCBUZXh0SXRlcmF0b3JCZWhhdmlv
ciBiZWhhdmlvcikKICAgICAsIG1faGFuZGxlZEZpcnN0TGV0dGVyKGZhbHNlKQogICAgICwgbV9p
Z25vcmVzU3R5bGVWaXNpYmlsaXR5KGJlaGF2aW9yICYgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxl
VmlzaWJpbGl0eSkKIHsKLSAgICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgVGV4dEl0ZXJhdG9y
RW5kc0F0RWRpdGluZ0JvdW5kYXJ5IGh0dHA6Ly93ZWJraXQub3JnL2IvNDM2MDkKLSAgICBBU1NF
UlQoYmVoYXZpb3IgIT0gVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5KTsKLQogICAg
IGlmICghcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDUyLDcgKzEwMzQsNyBAQCBTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9y
KGNvbnN0IFJhbmdlKiByLAogICAgICwgbV9ub2RlKDApCiAgICAgLCBtX3Bvc2l0aW9uTm9kZSgw
KQogewotICAgIEFTU0VSVChtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlv
ciB8fCBtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7Cisg
ICAgQVNTRVJUKG1fYmVoYXZpb3IgPT0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKIAog
ICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwpAQCAtMTA3Nyw3ICsxMDU5LDcgQEAgU2ltcGxp
ZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRv
cihjb25zdCBSYW5nZSogciwKICAgICAgICAgfQogICAgIH0KIAotICAgIHNldEN1cnJlbnROb2Rl
KGVuZE5vZGUpOworICAgIG1fbm9kZSA9IGVuZE5vZGU7CiAgICAgc2V0VXBGdWxseUNsaXBwZWRT
dGFjayhtX2Z1bGx5Q2xpcHBlZFN0YWNrLCBtX25vZGUpOyAgICAKICAgICBtX29mZnNldCA9IGVu
ZE9mZnNldDsKICAgICBtX2hhbmRsZWROb2RlID0gZmFsc2U7CkBAIC0xMDk2LDcgKzEwNzgsNyBA
QCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4
dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLAogICAgIG1fbGFzdFRleHROb2RlID0gMDsKICAgICBt
X2xhc3RDaGFyYWN0ZXIgPSAnXG4nOwogCi0gICAgbV9wYXN0U3RhcnROb2RlID0gcHJldmlvdXNJ
blBvc3RPcmRlckNyb3NzaW5nU2hhZG93Qm91bmRhcmllcyhzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0
KTsKKyAgICBtX2hhdmVQYXNzZWRTdGFydE5vZGUgPSBmYWxzZTsKIAogICAgIGFkdmFuY2UoKTsK
IH0KQEAgLTExMDgsNyArMTA5MCw3IEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVy
YXRvcjo6YWR2YW5jZSgpCiAgICAgbV9wb3NpdGlvbk5vZGUgPSAwOwogICAgIG1fdGV4dExlbmd0
aCA9IDA7CiAKLSAgICB3aGlsZSAobV9ub2RlICYmIG1fbm9kZSAhPSBtX3Bhc3RTdGFydE5vZGUp
IHsKKyAgICB3aGlsZSAobV9ub2RlICYmICFtX2hhdmVQYXNzZWRTdGFydE5vZGUpIHsKICAgICAg
ICAgLy8gRG9uJ3QgaGFuZGxlIG5vZGUgaWYgd2Ugc3RhcnQgaXRlcmF0aW5nIGF0IFtub2RlLCAw
XS4KICAgICAgICAgaWYgKCFtX2hhbmRsZWROb2RlICYmICEobV9ub2RlID09IG1fZW5kTm9kZSAm
JiBtX2VuZE9mZnNldCA9PSAwKSkgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IG1fbm9kZS0+cmVuZGVyZXIoKTsKQEAgLTExMjUsOCArMTEwNywxMCBAQCB2b2lkIFNpbXBs
aWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2UoKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIE5vZGUqIG5leHQgPSBtX2hhbmRsZWRDaGlsZHJl
biA/IDAgOiBtX25vZGUtPmxhc3RDaGlsZCgpOwotICAgICAgICBpZiAoIW5leHQpIHsKKyAgICAg
ICAgaWYgKCFtX2hhbmRsZWRDaGlsZHJlbiAmJiBtX25vZGUtPmhhc0NoaWxkTm9kZXMoKSkgewor
ICAgICAgICAgICAgbV9ub2RlID0gbV9ub2RlLT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgICAgIHB1
c2hGdWxseUNsaXBwZWRTdGF0ZShtX2Z1bGx5Q2xpcHBlZFN0YWNrLCBtX25vZGUpOworICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRXhpdCBlbXB0eSBjb250YWluZXJzIGFzIHdlIHBh
c3Mgb3ZlciB0aGVtIG9yIGNvbnRhaW5lcnMKICAgICAgICAgICAgIC8vIHdoZXJlIFtjb250YWlu
ZXIsIDBdIGlzIHdoZXJlIHdlIHN0YXJ0ZWQgaXRlcmF0aW5nLgogICAgICAgICAgICAgaWYgKCFt
X2hhbmRsZWROb2RlCkBAIC0xMTM4LDExICsxMTIyLDEyIEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3
YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiAgICAgICAgICAgICAgICAgICAgIG1faGFuZGxl
ZE5vZGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBtX2hhbmRsZWRDaGlsZHJlbiA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9ICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAv
LyBFeGl0IGFsbCBvdGhlciBjb250YWluZXJzLgogICAgICAgICAgICAgd2hpbGUgKCFtX25vZGUt
PnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXRDdXJyZW50Tm9k
ZShtX25vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkpCisgICAgICAgICAgICAgICAgaWYgKCFhZHZh
bmNlUmVzcGVjdGluZ1JhbmdlKG1fbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgbV9mdWxseUNsaXBwZWRTdGFjay5w
b3AoKTsKICAgICAgICAgICAgICAgICBleGl0Tm9kZSgpOwpAQCAtMTE1MywxNCArMTEzOCwxMiBA
QCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2UoKQogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbmV4dCA9IG1fbm9kZS0+
cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgICAgICBtX2Z1bGx5Q2xpcHBlZFN0YWNrLnBvcCgp
OworICAgICAgICAgICAgaWYgKGFkdmFuY2VSZXNwZWN0aW5nUmFuZ2UobV9ub2RlLT5wcmV2aW91
c1NpYmxpbmcoKSkpCisgICAgICAgICAgICAgICAgcHVzaEZ1bGx5Q2xpcHBlZFN0YXRlKG1fZnVs
bHlDbGlwcGVkU3RhY2ssIG1fbm9kZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9ub2RlID0gMDsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZSAm
JiBzZXRDdXJyZW50Tm9kZShuZXh0KSkKLSAgICAgICAgICAgIHB1c2hGdWxseUNsaXBwZWRTdGF0
ZShtX2Z1bGx5Q2xpcHBlZFN0YWNrLCBtX25vZGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjbGVhckN1cnJlbnROb2RlKCk7CiAKICAgICAgICAgLy8gRm9yIHRoZSBwdXJwb3NlIG9mIHdv
cmQgYm91bmRhcnkgZGV0ZWN0aW9uLAogICAgICAgICAvLyB3ZSBzaG91bGQgaXRlcmF0ZSBhbGwg
dmlzaWJsZSB0ZXh0IGFuZCB0cmFpbGluZyAoY29sbGFwc2VkKSB3aGl0ZXNwYWNlcy4gCkBAIC0x
MjQwLDI2ICsxMjIzLDE3IEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6
ZW1pdENoYXJhY3RlcihVQ2hhciBjLCBOb2RlKiBub2RlLCBpbnQgc3RhCiAgICAgbV9sYXN0Q2hh
cmFjdGVyID0gYzsKIH0KIAotYm9vbCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpj
cm9zc2VzRWRpdGluZ0JvdW5kYXJ5KE5vZGUqIG5vZGUpIGNvbnN0Citib29sIFNpbXBsaWZpZWRC
YWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2VSZXNwZWN0aW5nUmFuZ2UoTm9kZSogbmV4dCkK
IHsKLSAgICByZXR1cm4gbV9ub2RlICYmIG1fbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAhPSBu
b2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwotfQotCi1ib29sIFNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3I6OnNldEN1cnJlbnROb2RlKE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2Rl
KQorICAgIGlmICghbmV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2JlaGF2
aW9yID09IFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSAmJiBjcm9zc2VzRWRpdGlu
Z0JvdW5kYXJ5KG5vZGUpKQorICAgIG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZSB8PSBtX25vZGUgPT0g
bV9zdGFydE5vZGU7CisgICAgaWYgKG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fbm9kZSA9IG5vZGU7CisgICAgbV9ub2RlID0gbmV4dDsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpj
bGVhckN1cnJlbnROb2RlKCkKLXsKLSAgICBtX25vZGUgPSAwOwotfQotCiBQYXNzUmVmUHRyPFJh
bmdlPiBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpyYW5nZSgpIGNvbnN0CiB7CiAg
ICAgaWYgKG1fcG9zaXRpb25Ob2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgK
aW5kZXggOGI2MWFmZTIxMWI0ZDM3Yjc0ZjlmNGE1ODIzN2UxZDI4ZjJkY2ZiNC4uYjBjMzEwYTZm
YzdlODAxMWI0YTQ0YzJhZmMxY2RhMDJkZDQyNDlkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5oCkBAIC00MSw4ICs0MSw3IEBAIGVudW0gVGV4dEl0ZXJhdG9yQmVoYXZpb3Ig
ewogICAgIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRp
b25zID0gMSA8PCAwLAogICAgIFRleHRJdGVyYXRvckVudGVyc1RleHRDb250cm9scyA9IDEgPDwg
MSwKICAgICBUZXh0SXRlcmF0b3JFbWl0c1RleHRzV2l0aG91dFRyYW5zY29kaW5nID0gMSA8PCAy
LAotICAgIFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSA9IDEgPDwgMywKLSAgICBU
ZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5ID0gMSA8PCA0CisgICAgVGV4dEl0ZXJh
dG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSA9IDEgPDwgMwogfTsKICAgICAKIC8vIEZJWE1FOiBD
YW4ndCByZWFsbHkgYW5zd2VyIHRoaXMgcXVlc3Rpb24gY29ycmVjdGx5IHdpdGhvdXQga25vd2lu
ZyB0aGUgd2hpdGUtc3BhY2UgbW9kZS4KQEAgLTIwNSw5ICsyMDQsNyBAQCBwcml2YXRlOgogICAg
IGJvb2wgaGFuZGxlUmVwbGFjZWRFbGVtZW50KCk7CiAgICAgYm9vbCBoYW5kbGVOb25UZXh0Tm9k
ZSgpOwogICAgIHZvaWQgZW1pdENoYXJhY3RlcihVQ2hhciwgTm9kZSosIGludCBzdGFydE9mZnNl
dCwgaW50IGVuZE9mZnNldCk7Ci0gICAgYm9vbCBjcm9zc2VzRWRpdGluZ0JvdW5kYXJ5KE5vZGUq
KSBjb25zdDsKLSAgICBib29sIHNldEN1cnJlbnROb2RlKE5vZGUqKTsKLSAgICB2b2lkIGNsZWFy
Q3VycmVudE5vZGUoKTsKKyAgICBib29sIGFkdmFuY2VSZXNwZWN0aW5nUmFuZ2UoTm9kZSopOwog
CiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgbV9iZWhhdmlvcjsKICAgICAvLyBDdXJyZW50IHBv
c2l0aW9uLCBub3QgbmVjZXNzYXJpbHkgb2YgdGhlIHRleHQgYmVpbmcgcmV0dXJuZWQsIGJ1dCBw
b3NpdGlvbgpAQCAtMjM4LDkgKzIzNSw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gVXNlZCBm
b3Igd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHRoYXQgYXJlbid0IGluIHRoZSBET00sIHNvIHdlIGNh
biBwb2ludCBhdCB0aGVtLgogICAgIFVDaGFyIG1fc2luZ2xlQ2hhcmFjdGVyQnVmZmVyOwotICAg
IAotICAgIC8vIFRoZSBub2RlIGFmdGVyIHRoZSBsYXN0IG5vZGUgdGhpcyBpdGVyYXRvciBzaG91
bGQgcHJvY2Vzcy4KLSAgICBOb2RlKiBtX3Bhc3RTdGFydE5vZGU7CisKKyAgICAvLyBXaGV0aGVy
IG1fbm9kZSBoYXMgYWR2YW5jZWQgYmV5b25kIHRoZSBpdGVyYXRpb24gcmFuZ2UgKGkuZS4gbV9z
dGFydE5vZGUpLgorICAgIGJvb2wgbV9oYXZlUGFzc2VkU3RhcnROb2RlOwogfTsKIAogLy8gQnVp
bGRzIG9uIHRoZSB0ZXh0IGl0ZXJhdG9yLCBhZGRpbmcgYSBjaGFyYWN0ZXIgcG9zaXRpb24gc28g
d2UgY2FuIHdhbGsgb25lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2li
bGVfdW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcApp
bmRleCAyODFiYzQxYzRiN2I2MzgzMjYxNDE4YTRhYzkzOTNiZDEwYTQyZGE1Li45Y2I0ZDZkMDUx
NmI0ZWUyNGQ2MGUxMmI0MTU2MGY3MjY2YTkzOGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
dmlzaWJsZV91bml0cy5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlv
biBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFy
Y2gKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAotICAg
IFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UuZ2V0KCksIFRl
eHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAgU2ltcGxpZmllZEJhY2t3YXJk
c1RleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSk7CiAgICAgdW5zaWduZWQgbmV4dCA9
IDA7CiAgICAgYm9vbCBpblRleHRTZWN1cml0eU1vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgp
ICYmIHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYgc3RhcnQuZGVwcmVjYXRl
ZE5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkgIT0gVFNOT05FOwog
ICAgIGJvb2wgbmVlZE1vcmVDb250ZXh0ID0gZmFsc2U7CkBAIC0xMjQsNyArMTI0LDcgQEAgc3Rh
dGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlv
biYgYywgQm91bmRhcnlTZWFyY2gKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3Np
dGlvbihub2RlLCBuZXh0KSwgRE9XTlNUUkVBTSk7CiAKICAgICAvLyBVc2UgdGhlIGNoYXJhY3Rl
ciBpdGVyYXRvciB0byB0cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlv
bi4KLSAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UuZ2V0
KCksIFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3VuZGFyeSk7CisgICAgQmFja3dhcmRzQ2hh
cmFjdGVySXRlcmF0b3IgY2hhckl0KHNlYXJjaFJhbmdlLmdldCgpKTsKICAgICBjaGFySXQuYWR2
YW5jZShzdHJpbmcuc2l6ZSgpIC0gc3VmZml4TGVuZ3RoIC0gbmV4dCk7CiAgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbihjaGFySXQucmFuZ2UoKS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7
CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83450</attachid>
            <date>2011-02-22 23:00:18 -0800</date>
            <delta_ts>2011-02-23 02:10:29 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-51001-20110223180015.patch</filename>
            <type>text/plain</type>
            <size>14583</size>
            <attacher name="Benjamin (Ben) Kalman">kalman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzYwNzUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmNzZkOWEzMDU4MTc5MmVhODRmZjNh
ZjQ1MTQ2MTdlOGM3OGI3OTQwLi43MmIzZDE0MzM2MGFkYmY4OTBhNTFkMzQ1ODVhMDJlYzkwYzBj
OWFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDItMjMgIEJlbmphbWluIEthbG1hbiAg
PGthbG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4K
KworICAgICAgICBNb3Zpbmcgb3Igc2VsZWN0aW5nIGJhY2t3YXJkcyBieSB3b3JkcyBqdW1wcyB0
byBzdGFydCBvZiBjb250ZW50ZWRpdGFibGUgcmVnaW9uIGlmIGNvbnRlbnRlZGl0YWJsZT1mYWxz
ZSBzcGFuIGlzIGVuY291bnRlcmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MTAwMQorCisgICAgICAgIEFkZCByZWdyZXNzaW9uIHRlc3QuCisKKyAg
ICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5v
bi1lZGl0YWJsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0
aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0bWw6IEFkZGVk
LgorCiAyMDExLTAyLTIyICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIGFkZGVkIExlb3BhcmQtc3BlY2lmaWMgZXhwZWN0YXRpb25zIGZv
ciBDaHJvbWl1bS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4
dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXIt
bm9uLWVkaXRhYmxlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTJiMGE5ZTc5OWIyM2VhOGQ5
NmExNzFmYTU5ZTI0N2E5ODNmZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRp
dGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5LXdvcmQtb3Zlci1ub24tZWRpdGFibGUt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorUEFTUyBmb3IgTFRSCitQQVNTIGZvciBSVEwK
K2ZvbyBiYXIgYmF6IHF1eCBxdXV4CivXqdeV1rzXqNeUINep15XWvNeo15Qg16nXlda816jXlCDX
qdeV1rzXqNeUINep15XWvNeo15QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2Vs
ZWN0aW9uL2V4dGVuZC1iYWNrd2FyZC1ieS13b3JkLW92ZXItbm9uLWVkaXRhYmxlLmh0bWwgYi9M
YXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVy
LW5vbi1lZGl0YWJsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxMzVkYjc0ZmFlNDBmNjJhMzRmNTlkMzlm
MjllN2E2NjU2MzBkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Nl
bGVjdGlvbi9leHRlbmQtYmFja3dhcmQtYnktd29yZC1vdmVyLW5vbi1lZGl0YWJsZS5odG1sCkBA
IC0wLDAgKzEsMzkgQEAKKzwhRE9DVFlQRSBodG1sPgorPHByZSBpZD0ibG9nIj48L3ByZT4KKwor
PGRpdiBpZD0ibHRyVGV4dENvbnRhaW5lciIgY29udGVudGVkaXRhYmxlPmZvbyBiYXIgPHNwYW4g
Y29udGVudGVkaXRhYmxlPWZhbHNlPmJhejwvc3Bhbj4gcXV4IHF1dXg8L2Rpdj4KKzxkaXYgaWQ9
InJ0bFRleHRDb250YWluZXIiIGNvbnRlbnRlZGl0YWJsZSBkaXI9InJ0bCI+JiN4MDVFOTsmI3gw
NUQ1OyYjeDA1QkM7JiN4MDVFODsmI3gwNUQ0OyAmI3gwNUU5OyYjeDA1RDU7JiN4MDVCQzsmI3gw
NUU4OyYjeDA1RDQ7Cis8c3BhbiBjb250ZW50ZWRpdGFibGU9ZmFsc2U+JiN4MDVFOTsmI3gwNUQ1
OyYjeDA1QkM7JiN4MDVFODsmI3gwNUQ0Ozwvc3Bhbj4KKyYjeDA1RTk7JiN4MDVENTsmI3gwNUJD
OyYjeDA1RTg7JiN4MDVENDsgJiN4MDVFOTsmI3gwNUQ1OyYjeDA1QkM7JiN4MDVFODsmI3gwNUQ0
OzwvZGl2PgorCis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKHMpIHsKKyAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImxvZyIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMgKyAi
XG4iKSk7Cit9CisKK2Z1bmN0aW9uIHBsYWNlQ3Vyc29yQWZ0ZXJGaXJzdE5vbmVkaXRhYmxlQ2hp
bGQoY29udGFpbmVyKSB7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udGFpbmVyLmNoaWxkTm9k
ZXMubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgbm9kZSA9IGNvbnRhaW5lci5jaGlsZE5vZGVzW2ld
OworICAgIGlmIChub2RlLmlzQ29udGVudEVkaXRhYmxlICE9PSB1bmRlZmluZWQgJiYgIW5vZGUu
aXNDb250ZW50RWRpdGFibGUpIHsKKyAgICAgIGdldFNlbGVjdGlvbigpLnNldFBvc2l0aW9uKG5v
ZGUubmV4dFNpYmxpbmcsIDApOworICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorICB9CisgIHRo
cm93ICJDb3VsZG4ndCBmaW5kIG5vbmVkaXRhYmxlIGNoaWxkIG9mICIgKyBjb250YWluZXIudGV4
dENvbnRlbnQ7Cit9CisKK2Z1bmN0aW9uIGV4dGVuZEJhY2t3YXJkQnlXb3JkKGNvbnRhaW5lciwg
YmlkaU5hbWUpIHsKKyAgbm9uZWRpdGFibGVDaGlsZCA9IHBsYWNlQ3Vyc29yQWZ0ZXJGaXJzdE5v
bmVkaXRhYmxlQ2hpbGQoY29udGFpbmVyKTsKKyAgZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCJleHRl
bmQiLCAiYmFja3dhcmQiLCAid29yZCIpOworICBpZiAoZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmco
KSA9PT0gbm9uZWRpdGFibGVDaGlsZC50ZXh0Q29udGVudCkKKyAgICBsb2coIlBBU1MgZm9yICIg
KyBiaWRpTmFtZSk7CisgIGVsc2UKKyAgICBsb2coIkZBSUwgZm9yICIgKyBiaWRpTmFtZSArICIs
IHNlbGVjdGlvbiBpcyBcIiIgKyBnZXRTZWxlY3Rpb24oKSArICJcIiBidXQgc2hvdWxkIGJlIFwi
IiArIG5vbmVkaXRhYmxlQ2hpbGQudGV4dENvbnRlbnQgKyAiXCIiKTsKK30KKworZXh0ZW5kQmFj
a3dhcmRCeVdvcmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImx0clRleHRDb250YWluZXIiKSwg
IkxUUiIpOworZXh0ZW5kQmFja3dhcmRCeVdvcmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJ0
bFRleHRDb250YWluZXIiKSwgIlJUTCIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0Pgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDM0ODQ2ZmE5OWE3YjQ0OTZlODVlMzIyNDhmMjIxMmFlOWEwZTM5ZTQuLjk3
ZTJiMjllZjFjZGE2YmQ0MDNlYzlkZjBmMmJmODUzNTNlYjM1MmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxMS0wMi0yMyAgQmVuamFtaW4gS2FsbWFuICA8a2FsbWFuQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgorCisgICAgICAgIE1vdmlu
ZyBvciBzZWxlY3RpbmcgYmFja3dhcmRzIGJ5IHdvcmRzIGp1bXBzIHRvIHN0YXJ0IG9mIGNvbnRl
bnRlZGl0YWJsZSByZWdpb24gaWYgY29udGVudGVkaXRhYmxlPWZhbHNlIHNwYW4gaXMgZW5jb3Vu
dGVyZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUx
MDAxCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5kLWJhY2t3YXJkLWJ5
LXdvcmQtb3Zlci1ub24tZWRpdGFibGUuaHRtbAorCisgICAgICAgIFJldmVydCBzb21lIHByZXZp
b3VzIGNoYW5nZXMgKHRoZSBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkgdGV4dCBp
dGVyYXRpb24gYmVoYXZpb3VyKSB3aGljaCBjYXVzZWQgdGhpcworICAgICAgICBidWcgaW4gdGhl
IGZpcnN0IHBsYWNlLCBhbmQgZml4IFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IncyBp
dGVyYXRpb24gcmFuZ2UgY2hlY2sgYXMgYW4gYWx0ZXJuYXRpdmUgZml4LgorCisgICAgICAgIFRo
ZSBvcmlnaW5hbCBidWcgd2FzIHRoYXQgZG91YmxlLWNsaWNraW5nIG9uIGFuIGlubGluZSBlZGl0
YWJsZSBzcGFuIGF0IHRoZSBzdGFydCBvZiBhIHBhcmFncmFwaCB3b3VsZCBjbGVhciB0aGUKKyAg
ICAgICAgc2VsZWN0aW9uICh3ZWJraXQub3JnL2IvMzYzNjApLiAgVGhpcyB3YXMgY2F1c2VkIGJ5
IHVwc3RyZWFtL2Rvd25zdHJlYW0gVmlzYmlibGVQb3NpdGlvbiBjb21wbGljYXRpb25zLiAgVG8g
Zml4LAorICAgICAgICByZWZ1c2UgdG8gaXRlcmF0ZSBiZXlvbmQgdGhlIHN0YXJ0IG5vZGUgKHJh
dGhlciB0aGFuIHJlZnVzaW5nIHRvIGl0ZXJhdGUgYWNyb3NzIGVkaXRhYmxlIGJvdW5kYXJpZXMs
IHdoaWNoCisgICAgICAgIGNhdXNlcyB0aGlzIGJ1ZykuCisKKyAgICAgICAgVG8gc2VlIHdoeSB0
aGlzIGlzIGNvcnJlY3QsIGFuZCB0byBtYWtlIGl0IGNsZWFyZXIgdGhhdCBpcyBpbmRlZWQgd2hh
dCBpcyBoYXBwZW5pbmcsIHRoZSB0ZXh0IGl0ZXJhdG9yIGNvZGUgaGFzCisgICAgICAgIGJlZW4g
c2xpZ2h0bHkgcmVzdHJ1Y3R1cmVkIHRvIGV4cHJlc3MgdGhlIGludmFyaWFudCB0aGF0IHRoZSBp
dGVyYXRvciB3aWxsIG5ldmVyIGFkdmFuY2UgcGFzdCB0aGUgc3RhcnQgbm9kZS4KKworICAgICAg
ICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVy
YXRvcjo6VGV4dEl0ZXJhdG9yKTogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gVGV4dEl0ZXJhdGlvbkVu
ZHNBdEVkaXRpbmcgYm91bmRhcnkuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dh
cmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKTogUmVtb3Zl
IG1fcGFzdFN0YXJ0Tm9kZSBhcyB0aGUKKyAgICAgICAgbWVjaGFuaXNtIGZvciBpdGVyYXRpb24g
cmFuZ2UgY2hlY2tpbmcsIGFuZCB1c2UgYSBmbGFnIG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZSBpbnN0
ZWFkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6
YWR2YW5jZSk6IENsZWFuIHVwLCB1c2UgYWR2YW5jZVJlc3BlY3RpbmdSYW5nZSBhbmQKKyAgICAg
ICAgbV9oYXZlUGFzc2VkU3RhcnROb2RlIGZvciBpdGVyYXRpb24gcmFuZ2UgY2hlY2tpbmcgcmF0
aGVyIHRoYW4gbV9wYXN0U3RhcnROb2RlLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZmllZEJh
Y2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZVJlc3BlY3RpbmdSYW5nZSk6IFRoZSBuZXcgd2F5
IG9mIG1vZGlmeWluZyBtX25vZGUKKyAgICAgICAgd2hpY2ggdXBkYXRlcyBtX2hhdmVQYXNzZWRT
dGFydE5vZGUgYW5kIHJlZnVzZXMgdG8gY29udGludWUgd2hlbiBpdCBiZWNvbWVzIHRydWUuCisg
ICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuaDogUmVtb3ZlIFRleHRJdGVyYXRvckVuZHNB
dEVkaXRpbmdCb3VuZGFyeSwgdXBkYXRlIGZvciBuZXcvcmVtb3ZlZCBwcm90b3R5cGVzIGFuZAor
ICAgICAgICBtZW1iZXIgdmFyaWFibGVzLgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0JvdW5kYXJ5KTogUmVtb3ZlIHJlZmVy
ZW5jZXMgdG8gVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5LgorCiAyMDExLTAyLTIy
ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYW4gQmVybnN0ZWluLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmlu
ZGV4IGQzYTY1OTY0ZjdlMDcyODZlY2IyNzM3NjQzMjRkNTZmMWE1YzgxMjUuLjNiMTgxMjc1NTJh
ZjMzYjYzNThlMTUwZGM2NjBmMzQxMmY4YjBkYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5jcHAKQEAgLTE5NCwyMSArMTk0LDYgQEAgc3RhdGljIE5vZGUqIG5leHRJblBy
ZU9yZGVyQ3Jvc3NpbmdTaGFkb3dCb3VuZGFyaWVzKE5vZGUqIHJhbmdlRW5kQ29udGFpbmVyLCBp
bnQKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIE5vZGUqIHByZXZpb3VzSW5Qb3N0T3JkZXJD
cm9zc2luZ1NoYWRvd0JvdW5kYXJpZXMoTm9kZSogcmFuZ2VTdGFydENvbnRhaW5lciwgaW50IHJh
bmdlU3RhcnRPZmZzZXQpCi17Ci0gICAgaWYgKCFyYW5nZVN0YXJ0Q29udGFpbmVyKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBpZiAocmFuZ2VTdGFydE9mZnNldCA+IDAgJiYgIXJhbmdlU3RhcnRD
b250YWluZXItPm9mZnNldEluQ2hhcmFjdGVycygpKSB7Ci0gICAgICAgIGlmIChOb2RlKiBwcmV2
aW91cyA9IHJhbmdlU3RhcnRDb250YWluZXItPmNoaWxkTm9kZShyYW5nZVN0YXJ0T2Zmc2V0IC0g
MSkpCi0gICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7Ci0gICAgfQotICAgIGZvciAoTm9kZSog
bm9kZSA9IHJhbmdlU3RhcnRDb250YWluZXI7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhv
c3ROb2RlKCkpIHsKLSAgICAgICAgaWYgKE5vZGUqIHByZXZpb3VzID0gbm9kZS0+cHJldmlvdXNT
aWJsaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7Ci0gICAgfQotICAgIHJldHVy
biAwOwotfQotCiAvLyAtLS0tLS0tLQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZnVsbHlDbGlwc0Nv
bnRlbnRzKE5vZGUqIG5vZGUpCkBAIC0yOTAsOSArMjc1LDYgQEAgVGV4dEl0ZXJhdG9yOjpUZXh0
SXRlcmF0b3IoY29uc3QgUmFuZ2UqIHIsIFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yKQog
ICAgICwgbV9oYW5kbGVkRmlyc3RMZXR0ZXIoZmFsc2UpCiAgICAgLCBtX2lnbm9yZXNTdHlsZVZp
c2liaWxpdHkoYmVoYXZpb3IgJiBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5KQog
ewotICAgIC8vIEZJWE1FOiBzaG91bGQgc3VwcG9ydCBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5n
Qm91bmRhcnkgaHR0cDovL3dlYmtpdC5vcmcvYi80MzYwOQotICAgIEFTU0VSVChiZWhhdmlvciAh
PSBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkpOwotCiAgICAgaWYgKCFyKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTEwNTIsNyArMTAzNCw3IEBAIFNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2Uq
IHIsCiAgICAgLCBtX25vZGUoMCkKICAgICAsIG1fcG9zaXRpb25Ob2RlKDApCiB7Ci0gICAgQVNT
RVJUKG1fYmVoYXZpb3IgPT0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yIHx8IG1fYmVoYXZp
b3IgPT0gVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5KTsKKyAgICBBU1NFUlQobV9i
ZWhhdmlvciA9PSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwogCiAgICAgaWYgKCFyKQog
ICAgICAgICByZXR1cm47CkBAIC0xMDc3LDcgKzEwNTksNyBAQCBTaW1wbGlmaWVkQmFja3dhcmRz
VGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdl
KiByLAogICAgICAgICB9CiAgICAgfQogCi0gICAgc2V0Q3VycmVudE5vZGUoZW5kTm9kZSk7Cisg
ICAgbV9ub2RlID0gZW5kTm9kZTsKICAgICBzZXRVcEZ1bGx5Q2xpcHBlZFN0YWNrKG1fZnVsbHlD
bGlwcGVkU3RhY2ssIG1fbm9kZSk7ICAgIAogICAgIG1fb2Zmc2V0ID0gZW5kT2Zmc2V0OwogICAg
IG1faGFuZGxlZE5vZGUgPSBmYWxzZTsKQEAgLTEwOTYsNyArMTA3OCw3IEBAIFNpbXBsaWZpZWRC
YWNrd2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29u
c3QgUmFuZ2UqIHIsCiAgICAgbV9sYXN0VGV4dE5vZGUgPSAwOwogICAgIG1fbGFzdENoYXJhY3Rl
ciA9ICdcbic7CiAKLSAgICBtX3Bhc3RTdGFydE5vZGUgPSBwcmV2aW91c0luUG9zdE9yZGVyQ3Jv
c3NpbmdTaGFkb3dCb3VuZGFyaWVzKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpOworICAgIG1faGF2
ZVBhc3NlZFN0YXJ0Tm9kZSA9IGZhbHNlOwogCiAgICAgYWR2YW5jZSgpOwogfQpAQCAtMTEwOCw3
ICsxMDkwLDcgQEAgdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNl
KCkKICAgICBtX3Bvc2l0aW9uTm9kZSA9IDA7CiAgICAgbV90ZXh0TGVuZ3RoID0gMDsKIAotICAg
IHdoaWxlIChtX25vZGUgJiYgbV9ub2RlICE9IG1fcGFzdFN0YXJ0Tm9kZSkgeworICAgIHdoaWxl
IChtX25vZGUgJiYgIW1faGF2ZVBhc3NlZFN0YXJ0Tm9kZSkgewogICAgICAgICAvLyBEb24ndCBo
YW5kbGUgbm9kZSBpZiB3ZSBzdGFydCBpdGVyYXRpbmcgYXQgW25vZGUsIDBdLgogICAgICAgICBp
ZiAoIW1faGFuZGxlZE5vZGUgJiYgIShtX25vZGUgPT0gbV9lbmROb2RlICYmIG1fZW5kT2Zmc2V0
ID09IDApKSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9ub2RlLT5y
ZW5kZXJlcigpOwpAQCAtMTEyNSw4ICsxMTA3LDEwIEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3YXJk
c1RleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgTm9kZSogbmV4dCA9IG1faGFuZGxlZENoaWxkcmVuID8gMCA6IG1fbm9k
ZS0+bGFzdENoaWxkKCk7Ci0gICAgICAgIGlmICghbmV4dCkgeworICAgICAgICBpZiAoIW1faGFu
ZGxlZENoaWxkcmVuICYmIG1fbm9kZS0+aGFzQ2hpbGROb2RlcygpKSB7CisgICAgICAgICAgICBt
X25vZGUgPSBtX25vZGUtPmxhc3RDaGlsZCgpOworICAgICAgICAgICAgcHVzaEZ1bGx5Q2xpcHBl
ZFN0YXRlKG1fZnVsbHlDbGlwcGVkU3RhY2ssIG1fbm9kZSk7CisgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAvLyBFeGl0IGVtcHR5IGNvbnRhaW5lcnMgYXMgd2UgcGFzcyBvdmVyIHRoZW0g
b3IgY29udGFpbmVycwogICAgICAgICAgICAgLy8gd2hlcmUgW2NvbnRhaW5lciwgMF0gaXMgd2hl
cmUgd2Ugc3RhcnRlZCBpdGVyYXRpbmcuCiAgICAgICAgICAgICBpZiAoIW1faGFuZGxlZE5vZGUK
QEAgLTExMzgsMTEgKzExMjIsMTIgQEAgdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJh
dG9yOjphZHZhbmNlKCkKICAgICAgICAgICAgICAgICAgICAgbV9oYW5kbGVkTm9kZSA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIG1faGFuZGxlZENoaWxkcmVuID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIEV4aXQgYWxsIG90
aGVyIGNvbnRhaW5lcnMuCiAgICAgICAgICAgICB3aGlsZSAoIW1fbm9kZS0+cHJldmlvdXNTaWJs
aW5nKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXNldEN1cnJlbnROb2RlKG1fbm9kZS0+cGFy
ZW50T3JIb3N0Tm9kZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWFkdmFuY2VSZXNwZWN0aW5n
UmFuZ2UobV9ub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICBtX2Z1bGx5Q2xpcHBlZFN0YWNrLnBvcCgpOwogICAgICAg
ICAgICAgICAgIGV4aXROb2RlKCk7CkBAIC0xMTUzLDE0ICsxMTM4LDEyIEBAIHZvaWQgU2ltcGxp
ZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBuZXh0ID0gbV9ub2RlLT5wcmV2aW91c1NpYmxp
bmcoKTsKICAgICAgICAgICAgIG1fZnVsbHlDbGlwcGVkU3RhY2sucG9wKCk7CisgICAgICAgICAg
ICBpZiAoYWR2YW5jZVJlc3BlY3RpbmdSYW5nZShtX25vZGUtPnByZXZpb3VzU2libGluZygpKSkK
KyAgICAgICAgICAgICAgICBwdXNoRnVsbHlDbGlwcGVkU3RhdGUobV9mdWxseUNsaXBwZWRTdGFj
aywgbV9ub2RlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX25vZGUgPSAw
OwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ub2RlICYmIHNldEN1cnJlbnRO
b2RlKG5leHQpKQotICAgICAgICAgICAgcHVzaEZ1bGx5Q2xpcHBlZFN0YXRlKG1fZnVsbHlDbGlw
cGVkU3RhY2ssIG1fbm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNsZWFyQ3VycmVu
dE5vZGUoKTsKIAogICAgICAgICAvLyBGb3IgdGhlIHB1cnBvc2Ugb2Ygd29yZCBib3VuZGFyeSBk
ZXRlY3Rpb24sCiAgICAgICAgIC8vIHdlIHNob3VsZCBpdGVyYXRlIGFsbCB2aXNpYmxlIHRleHQg
YW5kIHRyYWlsaW5nIChjb2xsYXBzZWQpIHdoaXRlc3BhY2VzLiAKQEAgLTEyNDAsMjYgKzEyMjMs
MTcgQEAgdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjplbWl0Q2hhcmFjdGVy
KFVDaGFyIGMsIE5vZGUqIG5vZGUsIGludCBzdGEKICAgICBtX2xhc3RDaGFyYWN0ZXIgPSBjOwog
fQogCi1ib29sIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmNyb3NzZXNFZGl0aW5n
Qm91bmRhcnkoTm9kZSogbm9kZSkgY29uc3QKK2Jvb2wgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJ
dGVyYXRvcjo6YWR2YW5jZVJlc3BlY3RpbmdSYW5nZShOb2RlKiBuZXh0KQogewotICAgIHJldHVy
biBtX25vZGUgJiYgbV9ub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpICE9IG5vZGUtPmlzQ29udGVu
dEVkaXRhYmxlKCk7Ci19Ci0KLWJvb2wgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6
c2V0Q3VycmVudE5vZGUoTm9kZSogbm9kZSkKLXsKLSAgICBpZiAoIW5vZGUpCisgICAgaWYgKCFu
ZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fYmVoYXZpb3IgPT0gVGV4dEl0
ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5ICYmIGNyb3NzZXNFZGl0aW5nQm91bmRhcnkobm9k
ZSkpCisgICAgbV9oYXZlUGFzc2VkU3RhcnROb2RlIHw9IG1fbm9kZSA9PSBtX3N0YXJ0Tm9kZTsK
KyAgICBpZiAobV9oYXZlUGFzc2VkU3RhcnROb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV9ub2RlID0gbm9kZTsKKyAgICBtX25vZGUgPSBuZXh0OwogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmNsZWFyQ3VycmVudE5v
ZGUoKQotewotICAgIG1fbm9kZSA9IDA7Ci19Ci0KIFBhc3NSZWZQdHI8UmFuZ2U+IFNpbXBsaWZp
ZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OnJhbmdlKCkgY29uc3QKIHsKICAgICBpZiAobV9wb3Np
dGlvbk5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAppbmRleCA4YjYxYWZl
MjExYjRkMzdiNzRmOWY0YTU4MjM3ZTFkMjhmMmRjZmI0Li5iMGMzMTBhNmZjN2U4MDExYjRhNDRj
MmFmYzFjZGEwMmRkNDI0OWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgK
QEAgLTQxLDggKzQxLDcgQEAgZW51bSBUZXh0SXRlcmF0b3JCZWhhdmlvciB7CiAgICAgVGV4dEl0
ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMgPSAxIDw8IDAs
CiAgICAgVGV4dEl0ZXJhdG9yRW50ZXJzVGV4dENvbnRyb2xzID0gMSA8PCAxLAogICAgIFRleHRJ
dGVyYXRvckVtaXRzVGV4dHNXaXRob3V0VHJhbnNjb2RpbmcgPSAxIDw8IDIsCi0gICAgVGV4dEl0
ZXJhdG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5ID0gMSA8PCAzLAotICAgIFRleHRJdGVyYXRvckln
bm9yZXNTdHlsZVZpc2liaWxpdHkgPSAxIDw8IDQKKyAgICBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5
bGVWaXNpYmlsaXR5ID0gMSA8PCAzCiB9OwogICAgIAogLy8gRklYTUU6IENhbid0IHJlYWxseSBh
bnN3ZXIgdGhpcyBxdWVzdGlvbiBjb3JyZWN0bHkgd2l0aG91dCBrbm93aW5nIHRoZSB3aGl0ZS1z
cGFjZSBtb2RlLgpAQCAtMjA1LDkgKzIwNCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVS
ZXBsYWNlZEVsZW1lbnQoKTsKICAgICBib29sIGhhbmRsZU5vblRleHROb2RlKCk7CiAgICAgdm9p
ZCBlbWl0Q2hhcmFjdGVyKFVDaGFyLCBOb2RlKiwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zm
c2V0KTsKLSAgICBib29sIGNyb3NzZXNFZGl0aW5nQm91bmRhcnkoTm9kZSopIGNvbnN0OwotICAg
IGJvb2wgc2V0Q3VycmVudE5vZGUoTm9kZSopOwotICAgIHZvaWQgY2xlYXJDdXJyZW50Tm9kZSgp
OworICAgIGJvb2wgYWR2YW5jZVJlc3BlY3RpbmdSYW5nZShOb2RlKik7CiAKICAgICBUZXh0SXRl
cmF0b3JCZWhhdmlvciBtX2JlaGF2aW9yOwogICAgIC8vIEN1cnJlbnQgcG9zaXRpb24sIG5vdCBu
ZWNlc3NhcmlseSBvZiB0aGUgdGV4dCBiZWluZyByZXR1cm5lZCwgYnV0IHBvc2l0aW9uCkBAIC0y
MzgsOSArMjM1LDkgQEAgcHJpdmF0ZToKICAgICAKICAgICAvLyBVc2VkIGZvciB3aGl0ZXNwYWNl
IGNoYXJhY3RlcnMgdGhhdCBhcmVuJ3QgaW4gdGhlIERPTSwgc28gd2UgY2FuIHBvaW50IGF0IHRo
ZW0uCiAgICAgVUNoYXIgbV9zaW5nbGVDaGFyYWN0ZXJCdWZmZXI7Ci0gICAgCi0gICAgLy8gVGhl
IG5vZGUgYWZ0ZXIgdGhlIGxhc3Qgbm9kZSB0aGlzIGl0ZXJhdG9yIHNob3VsZCBwcm9jZXNzLgot
ICAgIE5vZGUqIG1fcGFzdFN0YXJ0Tm9kZTsKKworICAgIC8vIFdoZXRoZXIgbV9ub2RlIGhhcyBh
ZHZhbmNlZCBiZXlvbmQgdGhlIGl0ZXJhdGlvbiByYW5nZSAoaS5lLiBtX3N0YXJ0Tm9kZSkuCisg
ICAgYm9vbCBtX2hhdmVQYXNzZWRTdGFydE5vZGU7CiB9OwogCiAvLyBCdWlsZHMgb24gdGhlIHRl
eHQgaXRlcmF0b3IsIGFkZGluZyBhIGNoYXJhY3RlciBwb3NpdGlvbiBzbyB3ZSBjYW4gd2FsayBv
bmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCmluZGV4IDI4MWJjNDFj
NGI3YjYzODMyNjE0MThhNGFjOTM5M2JkMTBhNDJkYTUuLjljYjRkNmQwNTE2YjRlZTI0ZDYwZTEy
YjQxNTYwZjcyNjZhOTM4ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlz
aWJsZV91bml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRz
LmNwcApAQCAtODksNyArODksNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91
bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJjaAogICAgIGlmIChl
YykKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCi0gICAgU2ltcGxpZmllZEJh
Y2t3YXJkc1RleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSwgVGV4dEl0ZXJhdG9yRW5k
c0F0RWRpdGluZ0JvdW5kYXJ5KTsKKyAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9y
IGl0KHNlYXJjaFJhbmdlLmdldCgpKTsKICAgICB1bnNpZ25lZCBuZXh0ID0gMDsKICAgICBib29s
IGluVGV4dFNlY3VyaXR5TW9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgJiYgc3RhcnQuZGVw
cmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSAmJiBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5yZW5k
ZXJlcigpLT5zdHlsZSgpLT50ZXh0U2VjdXJpdHkoKSAhPSBUU05PTkU7CiAgICAgYm9vbCBuZWVk
TW9yZUNvbnRleHQgPSBmYWxzZTsKQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgVmlzaWJsZVBv
c2l0aW9uIHByZXZpb3VzQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFy
eVNlYXJjaAogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIG5l
eHQpLCBET1dOU1RSRUFNKTsKIAogICAgIC8vIFVzZSB0aGUgY2hhcmFjdGVyIGl0ZXJhdG9yIHRv
IHRyYW5zbGF0ZSB0aGUgbmV4dCB2YWx1ZSBpbnRvIGEgRE9NIHBvc2l0aW9uLgotICAgIEJhY2t3
YXJkc0NoYXJhY3Rlckl0ZXJhdG9yIGNoYXJJdChzZWFyY2hSYW5nZS5nZXQoKSwgVGV4dEl0ZXJh
dG9yRW5kc0F0RWRpdGluZ0JvdW5kYXJ5KTsKKyAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRv
ciBjaGFySXQoc2VhcmNoUmFuZ2UuZ2V0KCkpOwogICAgIGNoYXJJdC5hZHZhbmNlKHN0cmluZy5z
aXplKCkgLSBzdWZmaXhMZW5ndGggLSBuZXh0KTsKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KGNoYXJJdC5yYW5nZSgpLT5lbmRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>