<?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>37153</bug_id>
          
          <creation_ts>2010-04-06 09:04:20 -0700</creation_ts>
          <short_desc>Spatial Navigation: add support to &lt;input type=text&gt; and &lt;textarea&gt;</short_desc>
          <delta_ts>2010-11-05 08:14:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</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>
          
          <blocked>46905</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antonio Gomes">tonikitoo</reporter>
          <assigned_to name="Chang Shu">cshu</assigned_to>
          <cc>ademar</cc>
    
    <cc>cshu</cc>
    
    <cc>darin</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mjs</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tony</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>209068</commentid>
    <comment_count>0</comment_count>
      <attachid>52643</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-04-06 09:04:20 -0700</bug_when>
    <thetext>Created attachment 52643
WIP - it works but is not to be reviewed or landed

Currently if Spatial Navigation gets stuck in input enabled forms, e.g. &lt;input type=text&gt; or &lt;textarea&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281831</commentid>
    <comment_count>1</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2010-09-20 14:51:12 -0700</bug_when>
    <thetext>take over the unfinished work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285077</commentid>
    <comment_count>2</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-09-25 21:00:59 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; take over the unfinished work.

As discussed by email, patch is funcional as it (probably needs rebase against tot now), but we are lacking tests for it.

bug 45375 has a bunch of re-usable stuff for this testing. There are also currently 16 spatial nav tests in fast/events/spatial-navigation for reference.

What the patch does not do is properly handle cases when the input field has Javascript handles attached to it, handling arrow keys, but it can come later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287054</commentid>
    <comment_count>3</comment_count>
      <attachid>69239</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2010-09-29 12:14:13 -0700</bug_when>
    <thetext>Created attachment 69239
fix patch

I rebaselined Antonio&apos;s original patch and added layout tests for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289104</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-04 13:35:21 -0700</bug_when>
    <thetext>Mn... it seems like this bug can also be reproduced if the entire table was in a content editable area.  Copy &amp; paste the following HTML in the HTML source mode at http://www.mozilla.org/editor/midasdemo/

    &lt;table style=&quot;text-align: left; width: 100%; margin-left: auto; margin-right: auto;&quot; border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;1&quot;&gt;      &lt;tbody&gt;        &lt;tr&gt;          &lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;/td&gt;          &lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;a id=&quot;2&quot; href=&quot;a&quot;&gt;2&lt;/a&gt;&lt;/td&gt;          &lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;a id=&quot;4&quot; href=&quot;a&quot;&gt;4&lt;/a&gt;&lt;/td&gt;          &lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;textarea id=&quot;start&quot; rows=&quot;5&quot; cols=&quot;5&quot;&gt;line1 line2 line3&lt;/textarea&gt;          &lt;/td&gt;&lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;a id=&quot;6&quot; href=&quot;a&quot;&gt;6&lt;/a&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;/td&gt;          &lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;a id=&quot;8&quot; href=&quot;a&quot;&gt;8&lt;/a&gt;&lt;/td&gt;          &lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;/td&gt;        &lt;/tr&gt;      &lt;/tbody&gt;    &lt;/table&gt;

You can move the carets around textarea but you can&apos;t move it inside the textarea.  And once you move the caret inside the textarea by clicking it, you can&apos;t move it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289116</commentid>
    <comment_count>5</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-10-04 13:48:29 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Mn... it seems like this bug can also be reproduced if the entire table was in a content editable area.  Copy &amp; paste the following HTML in the HTML source mode at http://www.mozilla.org/editor/midasdemo/
&gt; 
&gt;     &lt;table style=&quot;text-align: left; width: 100%; margin-left: auto; margin-right: auto;&quot; border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;1&quot;&gt;      &lt;tbody&gt;        &lt;tr&gt;          &lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;/td&gt;          &lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;a id=&quot;2&quot; href=&quot;a&quot;&gt;2&lt;/a&gt;&lt;/td&gt;          &lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;a id=&quot;4&quot; href=&quot;a&quot;&gt;4&lt;/a&gt;&lt;/td&gt;          &lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;textarea id=&quot;start&quot; rows=&quot;5&quot; cols=&quot;5&quot;&gt;line1 line2 line3&lt;/textarea&gt;          &lt;/td&gt;&lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;a id=&quot;6&quot; href=&quot;a&quot;&gt;6&lt;/a&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;/td&gt;          &lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;a id=&quot;8&quot; href=&quot;a&quot;&gt;8&lt;/a&gt;&lt;/td&gt;          &lt;td style=&quot;vertical-align: top; text-align: center;&quot;&gt;&lt;/td&gt;        &lt;/tr&gt;      &lt;/tbody&gt;    &lt;/table&gt;
&gt; 
&gt; You can move the carets around textarea but you can&apos;t move it inside the textarea.  And once you move the caret inside the textarea by clicking it, you can&apos;t move it out.

I will not work as the code is today. Basically we are ignoring contentEditable elements, but it is in the TODO list. Would be great to see how Opera&apos;s Spatial Navigation handles this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289137</commentid>
    <comment_count>6</comment_count>
      <attachid>69239</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-04 14:20:18 -0700</bug_when>
    <thetext>Comment on attachment 69239
fix patch

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

I feel that this patch has many fixes at wrong layers / levels.  In the future, I also want to better isolate some of spatial navigation related code.

&gt; WebCore/editing/EditorCommand.cpp:100
&gt; +// For some execute_XXCommandXX routines below, &apos;true&apos; is returned regardless if the
&gt; +// &apos;command&apos; in case results in visual update for the user or not. For most of the caller

I don&apos;t really understand this comment.

&gt; WebCore/editing/EditorCommand.cpp:101
&gt; +// methods, this returned value is used as the criterio for either marking the originating

typo: criteria or criterion

&gt; WebCore/editing/EditorCommand.cpp:623
&gt; -    frame-&gt;selection()-&gt;modify(SelectionController::AlterationMove, SelectionController::DirectionBackward, CharacterGranularity, true);
&gt; -    return true;
&gt; +    bool retVal = frame-&gt;selection()-&gt;modify(SelectionController::AlterationMove, SelectionController::DirectionBackward, CharacterGranularity, true);
&gt; +    return (spatialNavigationEnabled(frame)) ? retVal : true;

I don&apos;t think it&apos;s right to change the return value based on preference here.  We should do that inside modify but I do feel that fixes to modify is wrong too because we expose so much low-level details about events there.

&gt; WebCore/editing/SelectionController.cpp:656
&gt; +        } else
&gt;              position = modifyExtendingRight(granularity);

It seems weird to me that we don&apos;t update posBeforeModifying when alter != AlternationMove.  It&apos;ll be very confusing if we started using this variable for other purposes later.  I&apos;d suggest to either always update posBeforeModifying or rename posBeforeModifying to something else like originalCaretPosition.

&gt; WebKit/qt/WebCoreSupport/EditorClientQt.cpp:379
&gt; -            m_page-&gt;triggerAction(action);
&gt; +            const char* command = QWebPagePrivate::editorCommandForWebActions(action);
&gt; +            if (command) {
&gt; +                if (frame-&gt;editor()-&gt;command(command).execute())
&gt; +                    event-&gt;setDefaultHandled();
&gt; +                return;
&gt; +            }

It looks strange to me that we set the default handled here without checking the value of isSpatialNavigationEnabled.  Do we assume that spatial navigation is always enabled?  Please correct me since I&apos;m new to the whole spatial navigation code but doesn&apos;t making such an assumption break DRT on Qt?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290261</commentid>
    <comment_count>7</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2010-10-06 06:48:20 -0700</bug_when>
    <thetext>Antonio, can you follow up Niwa&apos;s review? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295492</commentid>
    <comment_count>8</comment_count>
      <attachid>71034</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2010-10-18 07:41:05 -0700</bug_when>
    <thetext>Created attachment 71034
fix patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295495</commentid>
    <comment_count>9</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2010-10-18 07:53:02 -0700</bug_when>
    <thetext>Hi, Niwa,

Thanks much for your review. I submitted another patch based on your comments.
Here are some highlights:
1. I tried to make less impact on the code. So I moved the logic inside SelectionController to EditorCommand. I agree that avoiding making lower level code change is preferred.
2. The return value in EditorCommand functions is still partially based on the spatialnavigation flag.  I think this is ok because the editor wants to absorb the key events when spatial navigation is disabled, and not absorb them vice versa.
3. In EditorClientQt.cpp, I fixed the original patch so that it will handle both cases where QT_NO_SHORTCUT is defined or not. It also checks the flag. Btw, the flag is not always enabled and is indeed disabled by default.

Thanks,

Chang

&gt; I feel that this patch has many fixes at wrong layers / levels.  In the future, I also want to better isolate some of spatial navigation related code.
&gt; 
&gt; &gt; WebCore/editing/EditorCommand.cpp:100
&gt; &gt; +// For some execute_XXCommandXX routines below, &apos;true&apos; is returned regardless if the
&gt; &gt; +// &apos;command&apos; in case results in visual update for the user or not. For most of the caller
&gt; 
&gt; I don&apos;t really understand this comment.
&gt; 
&gt; &gt; WebCore/editing/EditorCommand.cpp:101
&gt; &gt; +// methods, this returned value is used as the criterio for either marking the originating
&gt; 
&gt; typo: criteria or criterion
&gt; 
&gt; &gt; WebCore/editing/EditorCommand.cpp:623
&gt; &gt; -    frame-&gt;selection()-&gt;modify(SelectionController::AlterationMove, SelectionController::DirectionBackward, CharacterGranularity, true);
&gt; &gt; -    return true;
&gt; &gt; +    bool retVal = frame-&gt;selection()-&gt;modify(SelectionController::AlterationMove, SelectionController::DirectionBackward, CharacterGranularity, true);
&gt; &gt; +    return (spatialNavigationEnabled(frame)) ? retVal : true;
&gt; 
&gt; I don&apos;t think it&apos;s right to change the return value based on preference here.  We should do that inside modify but I do feel that fixes to modify is wrong too because we expose so much low-level details about events there.
&gt; 
&gt; &gt; WebCore/editing/SelectionController.cpp:656
&gt; &gt; +        } else
&gt; &gt;              position = modifyExtendingRight(granularity);
&gt; 
&gt; It seems weird to me that we don&apos;t update posBeforeModifying when alter != AlternationMove.  It&apos;ll be very confusing if we started using this variable for other purposes later.  I&apos;d suggest to either always update posBeforeModifying or rename posBeforeModifying to something else like originalCaretPosition.
&gt; 
&gt; &gt; WebKit/qt/WebCoreSupport/EditorClientQt.cpp:379
&gt; &gt; -            m_page-&gt;triggerAction(action);
&gt; &gt; +            const char* command = QWebPagePrivate::editorCommandForWebActions(action);
&gt; &gt; +            if (command) {
&gt; &gt; +                if (frame-&gt;editor()-&gt;command(command).execute())
&gt; &gt; +                    event-&gt;setDefaultHandled();
&gt; &gt; +                return;
&gt; &gt; +            }
&gt; 
&gt; It looks strange to me that we set the default handled here without checking the value of isSpatialNavigationEnabled.  Do we assume that spatial navigation is always enabled?  Please correct me since I&apos;m new to the whole spatial navigation code but doesn&apos;t making such an assumption break DRT on Qt?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295647</commentid>
    <comment_count>10</comment_count>
      <attachid>71034</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-18 11:30:28 -0700</bug_when>
    <thetext>Comment on attachment 71034
fix patch 2

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

&gt; WebCore/editing/EditorCommand.cpp:627
&gt; +    Position endPosBeforeMove = frame-&gt;selection()-&gt;end();
&gt;      frame-&gt;selection()-&gt;modify(SelectionController::AlterationMove, SelectionController::DirectionForward, LineGranularity, true);
&gt; +    if (doSpatialNavigation &amp;&amp; endPosBeforeMove == frame-&gt;selection()-&gt;end())
&gt; +        return false;

You probably need to make a helper function for doSpatialNavigation.  But I still don&apos;t like the idea of modifying executeMove* functions.  I don&apos;t think that&apos;s a correct place to implement these kind of changes.  If I were you, I&apos;d modify executeMoveDown to return the value returned by selection()-&gt;modify(), and then go change modify() to return the desired value.  What I meant in my previous comment was it&apos;s odd to change the return value in executeMove*, not that you should move the code out to executeMove*.  You should, in fact, change the return value and obtain the reference position inside modify.  IMO, this function should look like:

static bool executeMoveDown(Frame* frame, Event*, EditorCommandSource, const String&amp;)
{
    return frame-&gt;selection()-&gt;modify(SelectionController::AlterationMove, SelectionController::DirectionForward, LineGranularity, true);
}

Sorry, I should have been more clear about this.

&gt; LayoutTests/fast/events/spatial-navigation/snav-textarea.html:1
&gt; +&lt;html&gt;

you probably want to add &lt;!DOCTYPE html&gt;

&gt; LayoutTests/fast/events/spatial-navigation/snav-textarea.html:34
&gt; +    if (window.layoutTestController) {
&gt; +      layoutTestController.dumpAsText();
&gt; +      layoutTestController.setSpatialNavigationEnabled(true);
&gt; +      layoutTestController.overridePreference(&quot;WebKitTabToLinksPreferenceKey&quot;, 1);
&gt; +      layoutTestController.waitUntilDone();
&gt; +    }

Doesn&apos;t this test fail on non-Qt platforms since you didn&apos;t make changes to editing delegates in other platforms?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295658</commentid>
    <comment_count>11</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2010-10-18 11:41:13 -0700</bug_when>
    <thetext>&gt; You probably need to make a helper function for doSpatialNavigation.  But I still don&apos;t like the idea of modifying executeMove* functions.  I don&apos;t think that&apos;s a correct place to implement these kind of changes.  If I were you, I&apos;d modify executeMoveDown to return the value returned by selection()-&gt;modify(), and then go change modify() to return the desired value.  What I meant in my previous comment was it&apos;s odd to change the return value in executeMove*, not that you should move the code out to executeMove*.  You should, in fact, change the return value and obtain the reference position inside modify.  IMO, this function should look like:
&gt; 
&gt; static bool executeMoveDown(Frame* frame, Event*, EditorCommandSource, const String&amp;)
&gt; {
&gt;     return frame-&gt;selection()-&gt;modify(SelectionController::AlterationMove, SelectionController::DirectionForward, LineGranularity, true);
&gt; }
&gt; 
&gt; Sorry, I should have been more clear about this.

Great, I thought about that(just return the modify function), too.

&gt; 
&gt; &gt; LayoutTests/fast/events/spatial-navigation/snav-textarea.html:1
&gt; &gt; +&lt;html&gt;
&gt; 
&gt; you probably want to add &lt;!DOCTYPE html&gt;

Sure.

&gt; 
&gt; Doesn&apos;t this test fail on non-Qt platforms since you didn&apos;t make changes to editing delegates in other platforms?

It looks to me the other platforms, aka EditorClientXX.cpp, sets event-&gt;defaulthandled() based on the execute function. So it should automatically work. However, I don&apos;t have all the setup to verify this. I will make sure it works on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296414</commentid>
    <comment_count>12</comment_count>
      <attachid>71203</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2010-10-19 14:33:31 -0700</bug_when>
    <thetext>Created attachment 71203
fix patch 3

Hi, Niwa,
A new patch is attached. Can you comment? Thanks!
Chang</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296426</commentid>
    <comment_count>13</comment_count>
      <attachid>71203</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-19 14:50:06 -0700</bug_when>
    <thetext>Comment on attachment 71203
fix patch 3

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

This patch is getting better and better.  Few comments about the tests.

&gt; WebCore/editing/EditorCommand.cpp:623
&gt; -    frame-&gt;selection()-&gt;modify(SelectionController::AlterationMove, SelectionController::DirectionForward, LineGranularity, true);
&gt; -    return true;
&gt; +    return frame-&gt;selection()-&gt;modify(SelectionController::AlterationMove, SelectionController::DirectionForward, LineGranularity, true);

Nice changes!

&gt; WebCore/editing/SelectionController.cpp:646
&gt; +    bool wasRange = m_selection.isRange();
&gt; +    Position originalStartPosition = m_selection.start();

I like this change much better than adding a whole bunch of changes inside the switch.

&gt; WebKit/qt/WebCoreSupport/EditorClientQt.cpp:405
&gt; +            else {
&gt; +                if (!frame-&gt;editor()-&gt;command(&quot;MoveLeft&quot;).execute())
&gt; +                    return;
&gt; +            }

You can do:
else if (!frame-&gt;editor()-&gt;command(&quot;MoveLeft&quot;).execute())
   return;
instead.

&gt; LayoutTests/fast/events/spatial-navigation/snav-input.html:10
&gt; +    This test ensures the correctness of Spatial Navigation (SNav) algorithm over input box.
&gt; +
&gt; +    * Pre-conditions:
&gt; +    1) DRT support for SNav enable/disable.
&gt; +
&gt; +    * Navigation steps:
&gt; +    1) Loads this page, focus goes to &quot;start&quot; automatically.
&gt; +    2) Focus moves away from input box in 4 different directions to neighbor nodes and back.

It&apos;s nice to put this in the body so that we can see the description when we open the test on the browser unless doing so sabotages the test.

&gt; LayoutTests/fast/events/spatial-navigation/snav-input.html:14
&gt; +    &lt;script src=&quot;../../js/resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
&gt; +    &lt;script src=&quot;resources/spatial-navigation-utils.js&quot;&gt;&lt;/script&gt;

It&apos;s quite unusual to include js-test-pre.js like this.  We typically use that file for script-tests.  Why are you including this?

&gt; LayoutTests/fast/events/spatial-navigation/snav-input.html:53
&gt; +    &lt;script src=&quot;../js/resources/js-test-post.js&quot;&gt;&lt;/script&gt;

Ditto.

&gt; LayoutTests/fast/events/spatial-navigation/snav-textarea.html:10
&gt; +    This test ensures the correctness of Spatial Navigation (SNav) algorithm over input box.
&gt; +
&gt; +    * Pre-conditions:
&gt; +    1) DRT support for SNav enable/disable.
&gt; +
&gt; +    * Navigation steps:
&gt; +    1) Loads this page, focus goes to &quot;start&quot; automatically.
&gt; +    2) Focus moves away from textarea in 4 different directions to neighbor nodes and back.

Same comment about including this in body instead.

&gt; LayoutTests/fast/events/spatial-navigation/snav-textarea.html:13
&gt; +    &lt;script src=&quot;../../js/resources/js-test-pre.js&quot;&gt;&lt;/script&gt;

Same comment about including this js.

&gt; LayoutTests/fast/events/spatial-navigation/snav-textarea.html:53
&gt; +    &lt;script src=&quot;../js/resources/js-test-post.js&quot;&gt;&lt;/script&gt;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296753</commentid>
    <comment_count>14</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2010-10-20 06:10:06 -0700</bug_when>
    <thetext>Thanks for the review!
Just one comment about js-test-pre.js. Some functions defined there are used in spatial-navigation-utils.js. Removing it will hang the test. Any other way to write the html?

&gt; &gt; LayoutTests/fast/events/spatial-navigation/snav-input.html:14
&gt; &gt; +    &lt;script src=&quot;../../js/resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
&gt; &gt; +    &lt;script src=&quot;resources/spatial-navigation-utils.js&quot;&gt;&lt;/script&gt;
&gt; 
&gt; It&apos;s quite unusual to include js-test-pre.js like this.  We typically use that file for script-tests.  Why are you including this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296761</commentid>
    <comment_count>15</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-10-20 06:26:48 -0700</bug_when>
    <thetext>I do not see any problem in including them. they are included in all other spatial nav tests  and many others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296784</commentid>
    <comment_count>16</comment_count>
      <attachid>71292</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2010-10-20 07:20:14 -0700</bug_when>
    <thetext>Created attachment 71292
(committed r71388, r=smfr) fix patch 4

Niwa, I updated patch to display descriptions in the tests. It seems we have to include the js-pre.js in order to use some functions there. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297585</commentid>
    <comment_count>17</comment_count>
      <attachid>71292</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-21 12:55:02 -0700</bug_when>
    <thetext>Comment on attachment 71292
(committed r71388, r=smfr) fix patch 4

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

&gt; LayoutTests/fast/events/spatial-navigation/snav-input.html:35
&gt; +    description(&apos;This test ensures the correctness of Spatial Navigation (SNav) algorithm over input box.&lt;br&gt;\
&gt; +                * Pre-conditions:&lt;br&gt;\
&gt; +                1) DRT support for SNav enable/disable.&lt;br&gt;\
&gt; +                * Navigation steps:&lt;br&gt;\
&gt; +                1) Loads this page, focus goes to &quot;start&quot; automatically.&lt;br&gt;\
&gt; +                2) Focus moves away from input box in 4 different directions to neighbor nodes and back.&lt;br&gt;&apos;);

You could just put this in &lt;p&gt;.

&gt; LayoutTests/fast/events/spatial-navigation/snav-input.html:70
&gt; +    window.onload = runTest;

I don&apos;t understand why we need to wait for onload event.  Maybe this is a quirk with js-test / spatial-navigation ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297614</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-21 13:44:02 -0700</bug_when>
    <thetext>Otherwise the patch LGTM.  Antonio &amp; Csaba: could you do the formal review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297616</commentid>
    <comment_count>19</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-10-21 13:52:15 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Otherwise the patch LGTM.  Antonio &amp; Csaba: could you do the formal review?

Thanks rniwa. I am the original author, so I can not review it. I will test them o Mac and gtk tonight.

Maybe Darin could you have a look (please :)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297627</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-21 14:10:08 -0700</bug_when>
    <thetext>I haven’t been reviewing spatial navigation patches before this one, and I don’t have as much time for patch review lately as I’d like.

But I may be able to get to this later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304192</commentid>
    <comment_count>21</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-11-03 12:17:12 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; I haven’t been reviewing spatial navigation patches before this one, and I don’t have as much time for patch review lately as I’d like.
&gt; 
&gt; But I may be able to get to this later.

Ping review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304230</commentid>
    <comment_count>22</comment_count>
      <attachid>71292</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-11-03 13:10:58 -0700</bug_when>
    <thetext>Comment on attachment 71292
(committed r71388, r=smfr) fix patch 4

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

&gt; WebCore/ChangeLog:8
&gt; +        [Qt] Makes &lt;input type=text&gt; and &lt;textarea&gt; functional with

These WebCore changes could potentially affect behavior on all platforms, so the Qt prefix here is not applicable.

&gt; WebCore/editing/EditorCommand.cpp:622
&gt; -    frame-&gt;selection()-&gt;modify(SelectionController::AlterationMove, SelectionController::DirectionForward, LineGranularity, true);
&gt; -    return true;
&gt; +    return frame-&gt;selection()-&gt;modify(SelectionController::AlterationMove, SelectionController::DirectionForward, LineGranularity, true);
&gt;  }

Did you run LayoutTests on Mac or Window with these changes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304232</commentid>
    <comment_count>23</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2010-11-03 13:16:57 -0700</bug_when>
    <thetext>&gt; &gt; WebCore/ChangeLog:8
&gt; &gt; +        [Qt] Makes &lt;input type=text&gt; and &lt;textarea&gt; functional with
&gt; 
&gt; These WebCore changes could potentially affect behavior on all platforms, so the Qt prefix here is not applicable.

I will remove [Qt].

&gt; &gt; WebCore/editing/EditorCommand.cpp:622
&gt; &gt; -    frame-&gt;selection()-&gt;modify(SelectionController::AlterationMove, SelectionController::DirectionForward, LineGranularity, true);
&gt; &gt; -    return true;
&gt; &gt; +    return frame-&gt;selection()-&gt;modify(SelectionController::AlterationMove, SelectionController::DirectionForward, LineGranularity, true);
&gt; &gt;  }
&gt; 
&gt; Did you run LayoutTests on Mac or Window with these changes?

The code change should have changed some behavior but yes, the laytout tests didn&apos;t seem to break on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304243</commentid>
    <comment_count>24</comment_count>
    <who name="Chang Shu">cshu</who>
    <bug_when>2010-11-03 13:30:01 -0700</bug_when>
    <thetext>Thanks so much for the review, Simon. This patch needs a rebaseline and I will submit a new patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304248</commentid>
    <comment_count>25</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-11-03 13:37:06 -0700</bug_when>
    <thetext> 
&gt; The code change should have changed some behavior but yes, the laytout tests didn&apos;t seem to break on Mac.

No port makes use of the return value of this method, but Qt now.

Also, I will land it manually to watch the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305132</commentid>
    <comment_count>26</comment_count>
      <attachid>71292</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-11-04 21:32:22 -0700</bug_when>
    <thetext>Comment on attachment 71292
(committed r71388, r=smfr) fix patch 4

Clearing flags on attachment: 71292

Committed r71388: &lt;http://trac.webkit.org/changeset/71388&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305133</commentid>
    <comment_count>27</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-11-04 21:32:53 -0700</bug_when>
    <thetext>Tests skipped in Gtk, and bug 49056 filed about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305263</commentid>
    <comment_count>28</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-11-05 07:16:25 -0700</bug_when>
    <thetext>+        This patch does not support yet cases where the focused &lt;input&gt;
+        has a JS handler for the arrow keys.


File bug 49068 about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305281</commentid>
    <comment_count>29</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2010-11-05 08:14:22 -0700</bug_when>
    <thetext>Revision r71388 cherry-picked into qtwebkit-2.1 with commit 6ddf322 &lt;http://gitorious.org/webkit/qtwebkit/commit/6ddf322&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52643</attachid>
            <date>2010-04-06 09:04:20 -0700</date>
            <delta_ts>2010-06-11 10:44:01 -0700</delta_ts>
            <desc>WIP - it works but is not to be reviewed or landed</desc>
            <filename>0001-Snav-support-for-input-and-textarea.patch</filename>
            <type>text/plain</type>
            <size>9076</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSA2MTk3YTZiYTRkMTFhODJlYjgzZWM1M2U2MDVkOWNjMzAzYTIxOTdjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4K
RGF0ZTogV2VkLCAxMCBGZWIgMjAxMCAxNDozOTo1MiAtMDQwMApTdWJqZWN0OiBbUEFUQ0hdIFNu
YXYgc3VwcG9ydCBmb3IgPGlucHV0PiBhbmQgPHRleHRhcmVhPi4KCi0tLQogV2ViQ29yZS9lZGl0
aW5nL0VkaXRvckNvbW1hbmQuY3BwICAgICAgICAgICB8ICAgNDMgKysrKysrKysrKysrKysrKysr
Ky0tLS0tLS0KIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcCAgICAgfCAg
IDMzICsrKysrKysrKysrKysrKysrLS0tLQogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRv
ckNsaWVudFF0LmNwcCB8ICAgIDcgKysrKy0KIDMgZmlsZXMgY2hhbmdlZCwgNjQgaW5zZXJ0aW9u
cygrKSwgMTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ckNvbW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IDM0
ZmE0NmQuLmI1ZTRiMDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5k
LmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTkzLDYgKzkz
LDI1IEBAIHN0YXRpYyBGcmFtZSogdGFyZ2V0RnJhbWUoRnJhbWUqIGZyYW1lLCBFdmVudCogZXZl
bnQpCiAgICAgcmV0dXJuIG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CiB9CiAKKy8vIFJlbGF0
ZWQgdG8gdGhlIFNwYXRpYWxOYXZpZ2F0aW9uIGZlYXR1cmUuCisvLyBGb3Igc29tZSBleGVjdXRl
X1hYQ29tbWFuZFhYIHJvdXRpbmVzIGJlbG93LCAndHJ1ZScgaXMgcmV0dXJuZWQgcmVnYXJkbGVz
cyBpZiB0aGUKKy8vICdjb21tYW5kJyBpbiBjYXNlIHJlc3VsdHMgaW4gdmlzdWFsIHVwZGF0ZSBm
b3IgdGhlIHVzZXIgb3Igbm90LiBGb3IgbW9zdCBvZiB0aGUgY2FsbGVyCisvLyBtZXRob2RzLCB0
aGlzIHJldHVybmVkIHZhbHVlIGlzIHVzZWQgYXMgdGhlIGNyaXRlcmlvIGZvciBlaXRoZXIgbWFy
a2luZyB0aGUgb3JpZ2luYXRpbmcKKy8vIEtleWJvYXJkRXZlbnQgYXMgRGVmYXVsdEhhbmRsZWQg
b3Igbm90LgorLy8gSG93ZXZlciwgd2hlbiBTcGF0aWFsTmF2aWdhdGlvbiBpcyBlbmFibGVkLCBp
dCBpcyBpbXBvcnRhbnQgdG8gZGlmZmVyZW50aWF0ZSBhICdjb21tYW5kJworLy8gdGhhdCBhbHRl
cnMgdGhlIGN1cnNvciBwb3NpdGlvbiBvciBub3QgYWZ0ZXIgaXRzIGV4ZWN1dGlvbi4gRm9yIGV4
YW1wbGUsIHNlZSB0aGUgdGhlCisvLyBmb2xsb3dpbmcgc2NlbmFyaW86CisvLworLy8gKiBDYXJl
dCBpcyBvbiB0aGUgcmlnaHQgZWRnZSBwb3NpdGlvbiBvZiBzaW5nbGUgbGluZWQgZWRpdG9yIChl
LmcuIDxpbnB1dD4pIGFuZAorLy8gdXNlciBwcmVzc2VzIHRoZSBSaWdodCBhcnJvdyBrZXkuCisv
LworLy8gSW4gdGhpcyBjYXNlLCBjdXJzb3IgcG9zaXRpb24gaXMgbm90IGNoYW5nZWQsIGFuZCBT
cGF0aWFsTmF2aWdhdGlvbiBjYW4gdGFrZSBwbGFjZSwKKy8vIG1hcmtpbmcgdGhlIG9yaWdpbmF0
aW5nIGV2ZW50IGFzIERlZmF1bHRIYW5kbGVkIGxhdGVyIG9uLgorc3RhdGljIGJvb2wgc3BhdGlh
bE5hdmlnYXRpb25FbmFibGVkKEZyYW1lKiBmcmFtZSkKK3sKKyAgICByZXR1cm4gZnJhbWUtPnNl
dHRpbmdzKCkgJiYgZnJhbWUtPnNldHRpbmdzKCktPmlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVk
KCk7Cit9CisKIHN0YXRpYyBib29sIGFwcGx5Q29tbWFuZFRvRnJhbWUoRnJhbWUqIGZyYW1lLCBF
ZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgY2FsbCBz
aG91bGRBcHBseVN0eWxlIHdoZW4gdGhlIHNvdXJjZSBpcyBET007IGlzIHRoZXJlIGEgZ29vZCBy
ZWFzb24gZm9yIHRoYXQ/CkBAIC01OTUsOCArNjE0LDggQEAgc3RhdGljIGJvb2wgZXhlY3V0ZU1h
a2VUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBF
ZGkKIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVCYWNrd2FyZChGcmFtZSogZnJhbWUsIEV2ZW50
KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2Vs
ZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLCBTZWxlY3Rpb25Db250
cm9sbGVyOjpCQUNLV0FSRCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOwotICAgIHJldHVy
biB0cnVlOworICAgIGJvb2wgcmV0VmFsID0gZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6QkFDS1dBUkQsIENo
YXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKKyAgICByZXR1cm4gKHNwYXRpYWxOYXZpZ2F0aW9u
RW5hYmxlZChmcmFtZSkpID8gcmV0VmFsIDogdHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0
ZU1vdmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRp
dG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKQEAgLTYwNyw4ICs2MjYsOCBAQCBzdGF0
aWMgYm9vbCBleGVjdXRlTW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFt
ZSwgRXZlbnQqLCBFZGl0b3JDbwogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZURvd24oRnJhbWUq
IGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0g
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwg
U2VsZWN0aW9uQ29udHJvbGxlcjo6Rk9SV0FSRCwgTGluZUdyYW51bGFyaXR5LCB0cnVlKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBib29sIHJldFZhbCA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9k
aWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkZPUldB
UkQsIExpbmVHcmFudWxhcml0eSwgdHJ1ZSk7CisgICAgcmV0dXJuIChzcGF0aWFsTmF2aWdhdGlv
bkVuYWJsZWQoZnJhbWUpKSA/IHJldFZhbCA6IHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1
dGVNb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9y
Q29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKQEAgLTYxOSw4ICs2MzgsOCBAQCBzdGF0aWMg
Ym9vbCBleGVjdXRlTW92ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVu
dCosIEVkaXRvckNvbW1hbgogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZUZvcndhcmQoRnJhbWUq
IGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0g
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwg
U2VsZWN0aW9uQ29udHJvbGxlcjo6Rk9SV0FSRCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUp
OwotICAgIHJldHVybiB0cnVlOworICAgIGJvb2wgcmV0VmFsID0gZnJhbWUtPnNlbGVjdGlvbigp
LT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6
Rk9SV0FSRCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOworICAgIHJldHVybiAoc3BhdGlh
bE5hdmlnYXRpb25FbmFibGVkKGZyYW1lKSkgPyByZXRWYWwgOiB0cnVlOwogfQogCiBzdGF0aWMg
Ym9vbCBleGVjdXRlTW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCkBAIC02MzEsOCArNjUw
LDggQEAgc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKEZy
YW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb20KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVM
ZWZ0KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJp
bmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xs
ZXI6Ok1PVkUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkxFRlQsIENoYXJhY3RlckdyYW51bGFyaXR5
LCB0cnVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBib29sIHJldFZhbCA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OkxFRlQsIENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKKyAgICByZXR1cm4gKHNw
YXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChmcmFtZSkpID8gcmV0VmFsIDogdHJ1ZTsKIH0KIAogc3Rh
dGljIGJvb2wgZXhlY3V0ZU1vdmVMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwg
RXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQpAQCAtNjc1LDggKzY5
NCw4IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlUGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uKEZy
YW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3Zl
UmlnaHQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJv
bGxlcjo6TU9WRSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6UklHSFQsIENoYXJhY3RlckdyYW51bGFy
aXR5LCB0cnVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBib29sIHJldFZhbCA9IGZyYW1lLT5z
ZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OlJJR0hULCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgdHJ1ZSk7CisgICAgcmV0dXJu
IChzcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZnJhbWUpKSA/IHJldFZhbCA6IHRydWU7CiB9CiAK
IHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCkBAIC03OTUs
OCArODE0LDggQEAgc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVQYXJhZ3JhcGhGb3J3YXJkQW5kTW9k
aWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLAogCiBzdGF0aWMgYm9vbCBleGVjdXRl
TW92ZVVwKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBT
dHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRy
b2xsZXI6Ok1PVkUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkJBQ0tXQVJELCBMaW5lR3JhbnVsYXJp
dHksIHRydWUpOwotICAgIHJldHVybiB0cnVlOworICAgIGJvb2wgcmV0VmFsID0gZnJhbWUtPnNl
bGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6QkFDS1dBUkQsIExpbmVHcmFudWxhcml0eSwgdHJ1ZSk7CisgICAgcmV0dXJuIChz
cGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZnJhbWUpKSA/IHJldFZhbCA6IHRydWU7CiB9CiAKIHN0
YXRpYyBib29sIGV4ZWN1dGVNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcv
U2VsZWN0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggYzZhZWQ1NS4uNDBkMDQ4ZiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUv
ZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcApAQCAtNjM2LDM0ICs2MzYsNTUgQEAgYm9v
bCBTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIEVEaXJlY3Rp
b24gZGlyZWN0aW9uLCBUZXh0R3IKIAogICAgIHdpbGxCZU1vZGlmaWVkKGFsdGVyLCBkaXJlY3Rp
b24pOwogCisgICAgLy8gRm9yIFNwYXRpYWwgTmF2aWdhdGlvbiBtYXR0ZXJzLgorICAgIFZpc2li
bGVQb3NpdGlvbiBwb3NCZWZvcmVNb2RpZnlpbmc7CisgICAgYm9vbCB3YXNSYW5nZSA9IG1fc2Vs
ZWN0aW9uLmlzUmFuZ2UoKTsKKwogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbjsKICAgICBz
d2l0Y2ggKGRpcmVjdGlvbikgewogICAgICAgICBjYXNlIFJJR0hUOgotICAgICAgICAgICAgaWYg
KGFsdGVyID09IE1PVkUpCisgICAgICAgICAgICBpZiAoYWx0ZXIgPT0gTU9WRSkgeworICAgICAg
ICAgICAgICAgIHBvc0JlZm9yZU1vZGlmeWluZyA9IG1fc2VsZWN0aW9uLmVuZCgpOwogICAgICAg
ICAgICAgICAgIHBvc2l0aW9uID0gbW9kaWZ5TW92aW5nUmlnaHQoZ3JhbnVsYXJpdHkpOwotICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcG9zaXRp
b24gPSBtb2RpZnlFeHRlbmRpbmdSaWdodChncmFudWxhcml0eSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBGT1JXQVJEOgogICAgICAgICAgICAgaWYgKGFsdGVyID09IEVYVEVO
RCkKICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQoZ3Jh
bnVsYXJpdHkpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZWxzZSB7IC8vIE1PVkUK
KyAgICAgICAgICAgICAgICBwb3NCZWZvcmVNb2RpZnlpbmcgPSBtX3NlbGVjdGlvbi5lbmQoKTsK
ICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IG1vZGlmeU1vdmluZ0ZvcndhcmQoZ3JhbnVsYXJp
dHkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTEVG
VDoKLSAgICAgICAgICAgIGlmIChhbHRlciA9PSBNT1ZFKQorICAgICAgICAgICAgaWYgKGFsdGVy
ID09IE1PVkUpIHsKKyAgICAgICAgICAgICAgICBwb3NCZWZvcmVNb2RpZnlpbmcgPSBtX3NlbGVj
dGlvbi5zdGFydCgpOwogICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gbW9kaWZ5TW92aW5nTGVm
dChncmFudWxhcml0eSk7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICBwb3NpdGlvbiA9IG1vZGlmeUV4dGVuZGluZ0xlZnQoZ3JhbnVsYXJpdHkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQkFDS1dBUkQ6CiAgICAgICAgICAg
ICBpZiAoYWx0ZXIgPT0gRVhURU5EKQogICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gbW9kaWZ5
RXh0ZW5kaW5nQmFja3dhcmQoZ3JhbnVsYXJpdHkpOwotICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZWxzZSB7IC8vIE1PVkUKKyAgICAgICAgICAgICAgICBwb3NCZWZvcmVNb2RpZnlpbmcg
PSBtX3NlbGVjdGlvbi5zdGFydCgpOwogICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gbW9kaWZ5
TW92aW5nQmFja3dhcmQoZ3JhbnVsYXJpdHkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgfQogCisgICAgLy8gRklYTUU6IEFmdGVyIHByb2Nlc3NpbmcgVXAgb3IgRG93
biBNT1ZFIG9wZXJhdGlvbnMgaW4gPGlucHV0IHR5cGU9dGV4dD4KKyAgICAvLyBhbmQgPHRleHRh
cmVhPiBlZGl0b3JzLCAncG9zJyBpcyBub3QgbnVsbGVkIGV2ZW4gaWYgY2FyZXQgaXMgb24gYW4g
ZWRnZQorICAgIC8vIHBvc2l0aW9uIChlLmcuIHVwL2xlZnQgb3IgYm90dG9uL3JpZ2h0IGNvcm5l
cnMpLgorICAgIC8vIEZyYW1lICpmcmFtZSA9IHBvcy5ub2RlKCktPmRvY3VtZW50KCktPmZyYW1l
KCk7CisgICAgaWYgKHVzZXJUcmlnZ2VyZWQpIHsKKyAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdz
ID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKKyAgICAgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdz
LT5pc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgaWYgKCF3YXNSYW5n
ZSAmJiBhbHRlciA9PSBNT1ZFICYmIHBvc2l0aW9uID09IHBvc0JlZm9yZU1vZGlmeWluZykKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBpZiAocG9zaXRpb24uaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRRdC5jcHAKaW5kZXggNWVjM2ExOC4uNzI1ZTJhNyAxMDA2NDQKLS0tIGEvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcAorKysgYi9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwCkBAIC0zODAsNyArMzgwLDEyIEBAIHZv
aWQgRWRpdG9yQ2xpZW50UXQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZl
bnQpCiAgICAgICAgICAgICAgICAgJiYga2V2ZW50LT50eXBlKCkgPT0gUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpSYXdLZXlEb3duKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAg
ICAgbV9wYWdlLT50cmlnZ2VyQWN0aW9uKGFjdGlvbik7CisgICAgICAgICAgICBjb25zdCBjaGFy
KiBjb21tYW5kID0gUVdlYlBhZ2VQcml2YXRlOjplZGl0b3JDb21tYW5kRm9yV2ViQWN0aW9ucyhh
Y3Rpb24pOworICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGNvbW1hbmQpLmV4ZWN1dGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICNlbmRpZiAvLyBRVF9OT19TSE9S
VENVVAogICAgICAgICBzd2l0Y2ggKGtldmVudC0+d2luZG93c1ZpcnR1YWxLZXlDb2RlKCkpIHsK
LS0gCjEuNi4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69239</attachid>
            <date>2010-09-29 12:14:13 -0700</date>
            <delta_ts>2010-10-18 07:41:05 -0700</delta_ts>
            <desc>fix patch</desc>
            <filename>37153_1.patch</filename>
            <type>text/plain</type>
            <size>20032</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODY3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDktMjkgIENoYW5nIFNodSAgPGNoYW5nLnNodUBub2tpYS5j
b20+CisKKyAgICAgICAgUGF0Y2ggYnkgQW50b25pbyBHb21lcyA8YW50b25pby5nb21lc0BvcGVu
Ym9zc2Eub3JnPiBvbiAyMDA5LTA0LTA2LAorICAgICAgICBhbmQgQ2hhbmcgU2h1IDxjaGFuZy5z
aHVAbm9raWEuY29tPi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbUXRdIE1ha2VzIDxpbnB1dCB0eXBlPXRleHQ+IGFuZCA8dGV4dGFyZWE+IGZ1bmN0
aW9uYWwgd2l0aAorICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb24gZW5hYmxlZC4gQmVmb3JlIHRo
aXMgcGF0Y2gsIHRoZSBmb2N1cyBjYW5ub3QKKyAgICAgICAgbW92ZSBhd2F5IGZyb20gaW5wdXQg
Ym94IG9uY2UgaXQgaXMgaW4uIFRoaXMgcGF0Y2ggYWxsb3dzIGZvY3VzCisgICAgICAgIG1vdmUg
dG8gbmVpZ2hib3Igbm9kZXMgd2hlbiB0aGUgY2FyZXQgcmVhY2hlcyB0aGUgZWRnZSBvZiB0aGUg
dGV4dHMuCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBub3Qgc3VwcG9ydCB5ZXQgY2FzZXMgd2hl
cmUgdGhlIGZvY3VzZWQgPGlucHV0PgorICAgICAgICBoYXMgYSBKUyBoYW5kbGVyIGZvciB0aGUg
YXJyb3cga2V5cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM3MTUzCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlv
bi9zbmF2LWlucHV0Lmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZXZlbnRzL3NwYXRpYWwtbmF2
aWdhdGlvbi9zbmF2LXRleHRhcmVhLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVCYWNrd2FyZCk6CisgICAgICAgIChXZWJDb3Jl
OjpleGVjdXRlTW92ZURvd24pOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVGb3J3YXJk
KToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlTGVmdCk6CisgICAgICAgIChXZWJDb3Jl
OjpleGVjdXRlTW92ZVJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVXApOgor
ICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnkpOgorCiAyMDEwLTA5LTI5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudG9uaW8g
R29tZXMuCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiA2ODY3MSkK
KysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTUsNiArOTUsMjUgQEAgc3RhdGljIEZyYW1lKiB0YXJnZXRGcmFtZShGcmFtZSogZnJhbWUsIAog
ICAgIHJldHVybiBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOwogfQogCisvLyBSZWxhdGVkIHRv
IHRoZSBTcGF0aWFsTmF2aWdhdGlvbiBmZWF0dXJlLgorLy8gRm9yIHNvbWUgZXhlY3V0ZV9YWENv
bW1hbmRYWCByb3V0aW5lcyBiZWxvdywgJ3RydWUnIGlzIHJldHVybmVkIHJlZ2FyZGxlc3MgaWYg
dGhlCisvLyAnY29tbWFuZCcgaW4gY2FzZSByZXN1bHRzIGluIHZpc3VhbCB1cGRhdGUgZm9yIHRo
ZSB1c2VyIG9yIG5vdC4gRm9yIG1vc3Qgb2YgdGhlIGNhbGxlcgorLy8gbWV0aG9kcywgdGhpcyBy
ZXR1cm5lZCB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBjcml0ZXJpbyBmb3IgZWl0aGVyIG1hcmtpbmcg
dGhlIG9yaWdpbmF0aW5nCisvLyBLZXlib2FyZEV2ZW50IGFzIERlZmF1bHRIYW5kbGVkIG9yIG5v
dC4KKy8vIEhvd2V2ZXIsIHdoZW4gU3BhdGlhbE5hdmlnYXRpb24gaXMgZW5hYmxlZCwgaXQgaXMg
aW1wb3J0YW50IHRvIGRpZmZlcmVudGlhdGUgYSAnY29tbWFuZCcKKy8vIHRoYXQgYWx0ZXJzIHRo
ZSBjdXJzb3IgcG9zaXRpb24gb3Igbm90IGFmdGVyIGl0cyBleGVjdXRpb24uIEZvciBleGFtcGxl
LCBzZWUgdGhlIHRoZQorLy8gZm9sbG93aW5nIHNjZW5hcmlvOgorLy8KKy8vICogQ2FyZXQgaXMg
b24gdGhlIHJpZ2h0IGVkZ2UgcG9zaXRpb24gb2Ygc2luZ2xlIGxpbmVkIGVkaXRvciAoZS5nLiA8
aW5wdXQ+KSBhbmQKKy8vIHVzZXIgcHJlc3NlcyB0aGUgUmlnaHQgYXJyb3cga2V5LgorLy8KKy8v
IEluIHRoaXMgY2FzZSwgY3Vyc29yIHBvc2l0aW9uIGlzIG5vdCBjaGFuZ2VkLCBhbmQgU3BhdGlh
bE5hdmlnYXRpb24gY2FuIHRha2UgcGxhY2UsCisvLyBtYXJraW5nIHRoZSBvcmlnaW5hdGluZyBl
dmVudCBhcyBEZWZhdWx0SGFuZGxlZCBsYXRlciBvbi4KK3N0YXRpYyBib29sIHNwYXRpYWxOYXZp
Z2F0aW9uRW5hYmxlZChGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIGZyYW1lLT5zZXR0aW5n
cygpICYmIGZyYW1lLT5zZXR0aW5ncygpLT5pc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCgpOwor
fQorCiBzdGF0aWMgYm9vbCBhcHBseUNvbW1hbmRUb0ZyYW1lKEZyYW1lKiBmcmFtZSwgRWRpdG9y
Q29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUpCiB7CiAgICAgLy8gRklYTUU6IFdlIGRvbid0IGNhbGwgc2hvdWxk
QXBwbHlTdHlsZSB3aGVuIHRoZSBzb3VyY2UgaXMgRE9NOyBpcyB0aGVyZSBhIGdvb2QgcmVhc29u
IGZvciB0aGF0PwpAQCAtNjAwLDggKzYxOSw4IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVNYWtlVGV4
dFdyaXRpbmdEaXJlY3QKIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVCYWNrd2FyZChGcmFtZSog
ZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAg
ICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0
aW9uTW92ZSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6RGlyZWN0aW9uQmFja3dhcmQsIENoYXJhY3Rl
ckdyYW51bGFyaXR5LCB0cnVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBib29sIHJldFZhbCA9
IGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRp
b25Nb3ZlLCBTZWxlY3Rpb25Db250cm9sbGVyOjpEaXJlY3Rpb25CYWNrd2FyZCwgQ2hhcmFjdGVy
R3JhbnVsYXJpdHksIHRydWUpOworICAgIHJldHVybiAoc3BhdGlhbE5hdmlnYXRpb25FbmFibGVk
KGZyYW1lKSkgPyByZXRWYWwgOiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZUJh
Y2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21t
YW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQpAQCAtNjEyLDggKzYzMSw4IEBAIHN0YXRpYyBib29s
IGV4ZWN1dGVNb3ZlQmFja3dhcmRBbmRNb2RpZnkKIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVE
b3duKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJp
bmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkFsdGVyYXRpb25Nb3ZlLCBTZWxlY3Rpb25Db250cm9sbGVyOjpEaXJlY3Rpb25Gb3J3YXJk
LCBMaW5lR3JhbnVsYXJpdHksIHRydWUpOwotICAgIHJldHVybiB0cnVlOworICAgIGJvb2wgcmV0
VmFsID0gZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0
ZXJhdGlvbk1vdmUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkRpcmVjdGlvbkZvcndhcmQsIExpbmVH
cmFudWxhcml0eSwgdHJ1ZSk7CisgICAgcmV0dXJuIChzcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQo
ZnJhbWUpKSA/IHJldFZhbCA6IHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlRG93
bkFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSwgY29uc3QgU3RyaW5nJikKQEAgLTYyNCw4ICs2NDMsOCBAQCBzdGF0aWMgYm9vbCBleGVj
dXRlTW92ZURvd25BbmRNb2RpZnlTZWxlCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlRm9yd2Fy
ZChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5n
JikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVy
OjpBbHRlcmF0aW9uTW92ZSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6RGlyZWN0aW9uRm9yd2FyZCwg
Q2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOwotICAgIHJldHVybiB0cnVlOworICAgIGJvb2wg
cmV0VmFsID0gZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6
QWx0ZXJhdGlvbk1vdmUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkRpcmVjdGlvbkZvcndhcmQsIENo
YXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKKyAgICByZXR1cm4gKHNwYXRpYWxOYXZpZ2F0aW9u
RW5hYmxlZChmcmFtZSkpID8gcmV0VmFsIDogdHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0
ZU1vdmVGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQpAQCAtNjM2LDggKzY1NSw4IEBAIHN0YXRp
YyBib29sIGV4ZWN1dGVNb3ZlRm9yd2FyZEFuZE1vZGlmeVMKIAogc3RhdGljIGJvb2wgZXhlY3V0
ZU1vdmVMZWZ0KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25z
dCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBTZWxlY3Rpb25Db250cm9sbGVyOjpEaXJlY3Rpb25M
ZWZ0LCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
Ym9vbCByZXRWYWwgPSBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9s
bGVyOjpBbHRlcmF0aW9uTW92ZSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6RGlyZWN0aW9uTGVmdCwg
Q2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOworICAgIHJldHVybiAoc3BhdGlhbE5hdmlnYXRp
b25FbmFibGVkKGZyYW1lKSkgPyByZXRWYWwgOiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVj
dXRlTW92ZUxlZnRBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRv
ckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCkBAIC02ODAsOCArNjk5LDggQEAgc3RhdGlj
IGJvb2wgZXhlY3V0ZU1vdmVQYWdlVXBBbmRNb2RpZnlTZQogCiBzdGF0aWMgYm9vbCBleGVjdXRl
TW92ZVJpZ2h0KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25z
dCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBTZWxlY3Rpb25Db250cm9sbGVyOjpEaXJlY3Rpb25S
aWdodCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOwotICAgIHJldHVybiB0cnVlOworICAg
IGJvb2wgcmV0VmFsID0gZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJv
bGxlcjo6QWx0ZXJhdGlvbk1vdmUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkRpcmVjdGlvblJpZ2h0
LCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgdHJ1ZSk7CisgICAgcmV0dXJuIChzcGF0aWFsTmF2aWdh
dGlvbkVuYWJsZWQoZnJhbWUpKSA/IHJldFZhbCA6IHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGV4
ZWN1dGVNb3ZlUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCkBAIC04MDAsOCArODE5LDggQEAgc3Rh
dGljIGJvb2wgZXhlY3V0ZU1vdmVQYXJhZ3JhcGhGb3J3YXJkQQogCiBzdGF0aWMgYm9vbCBleGVj
dXRlTW92ZVVwKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25z
dCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBTZWxlY3Rpb25Db250cm9sbGVyOjpEaXJlY3Rpb25C
YWNrd2FyZCwgTGluZUdyYW51bGFyaXR5LCB0cnVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBi
b29sIHJldFZhbCA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkFsdGVyYXRpb25Nb3ZlLCBTZWxlY3Rpb25Db250cm9sbGVyOjpEaXJlY3Rpb25CYWNrd2Fy
ZCwgTGluZUdyYW51bGFyaXR5LCB0cnVlKTsKKyAgICByZXR1cm4gKHNwYXRpYWxOYXZpZ2F0aW9u
RW5hYmxlZChmcmFtZSkpID8gcmV0VmFsIDogdHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0
ZU1vdmVVcEFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29t
bWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rp
b25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9u
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDY4NjcxKQorKysgV2ViQ29yZS9lZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDIsMzQgKzY0Miw1NSBAQCBi
b29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeShFQWx0ZXJhCiAKICAgICB3aWxsQmVNb2Rp
ZmllZChhbHRlciwgZGlyZWN0aW9uKTsKIAorICAgIC8vIEZvciBTcGF0aWFsIE5hdmlnYXRpb24g
bWF0dGVycy4KKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zQmVmb3JlTW9kaWZ5aW5nOworICAgIGJv
b2wgd2FzUmFuZ2UgPSBtX3NlbGVjdGlvbi5pc1JhbmdlKCk7CisKICAgICBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb247CiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKICAgICBjYXNlIERpcmVjdGlv
blJpZ2h0OgotICAgICAgICBpZiAoYWx0ZXIgPT0gQWx0ZXJhdGlvbk1vdmUpCisgICAgICAgIGlm
IChhbHRlciA9PSBBbHRlcmF0aW9uTW92ZSkgeworICAgICAgICAgICAgcG9zQmVmb3JlTW9kaWZ5
aW5nID0gbV9zZWxlY3Rpb24uZW5kKCk7CiAgICAgICAgICAgICBwb3NpdGlvbiA9IG1vZGlmeU1v
dmluZ1JpZ2h0KGdyYW51bGFyaXR5KTsKLSAgICAgICAgZWxzZQorICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIHBvc2l0aW9uID0gbW9kaWZ5RXh0ZW5kaW5nUmlnaHQoZ3JhbnVsYXJpdHkpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIERpcmVjdGlvbkZvcndhcmQ6CiAgICAgICAgIGlmIChh
bHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKQogICAgICAgICAgICAgcG9zaXRpb24gPSBtb2RpZnlF
eHRlbmRpbmdGb3J3YXJkKGdyYW51bGFyaXR5KTsKLSAgICAgICAgZWxzZQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHBvc0JlZm9yZU1vZGlmeWluZyA9IG1fc2VsZWN0aW9uLmVuZCgpOwog
ICAgICAgICAgICAgcG9zaXRpb24gPSBtb2RpZnlNb3ZpbmdGb3J3YXJkKGdyYW51bGFyaXR5KTsK
KyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIERpcmVjdGlvbkxlZnQ6Ci0gICAg
ICAgIGlmIChhbHRlciA9PSBBbHRlcmF0aW9uTW92ZSkKKyAgICAgICAgaWYgKGFsdGVyID09IEFs
dGVyYXRpb25Nb3ZlKSB7CisgICAgICAgICAgICBwb3NCZWZvcmVNb2RpZnlpbmcgPSBtX3NlbGVj
dGlvbi5zdGFydCgpOwogICAgICAgICAgICAgcG9zaXRpb24gPSBtb2RpZnlNb3ZpbmdMZWZ0KGdy
YW51bGFyaXR5KTsKLSAgICAgICAgZWxzZQorICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHBv
c2l0aW9uID0gbW9kaWZ5RXh0ZW5kaW5nTGVmdChncmFudWxhcml0eSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRGlyZWN0aW9uQmFja3dhcmQ6CiAgICAgICAgIGlmIChhbHRlciA9PSBBbHRl
cmF0aW9uRXh0ZW5kKQogICAgICAgICAgICAgcG9zaXRpb24gPSBtb2RpZnlFeHRlbmRpbmdCYWNr
d2FyZChncmFudWxhcml0eSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBwb3NCZWZvcmVNb2RpZnlpbmcgPSBtX3NlbGVjdGlvbi5zdGFydCgpOwogICAgICAgICAg
ICAgcG9zaXRpb24gPSBtb2RpZnlNb3ZpbmdCYWNrd2FyZChncmFudWxhcml0eSk7CisgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgLy8gRklYTUU6IEFmdGVyIHByb2Nlc3Np
bmcgVXAgb3IgRG93biBNT1ZFIG9wZXJhdGlvbnMgaW4gPGlucHV0IHR5cGU9dGV4dD4KKyAgICAv
LyBhbmQgPHRleHRhcmVhPiBlZGl0b3JzLCAncG9zJyBpcyBub3QgbnVsbGVkIGV2ZW4gaWYgY2Fy
ZXQgaXMgb24gYW4gZWRnZQorICAgIC8vIHBvc2l0aW9uIChlLmcuIHVwL2xlZnQgb3IgYm90dG9u
L3JpZ2h0IGNvcm5lcnMpLgorICAgIC8vIEZyYW1lICpmcmFtZSA9IHBvcy5ub2RlKCktPmRvY3Vt
ZW50KCktPmZyYW1lKCk7CisgICAgaWYgKHVzZXJUcmlnZ2VyZWQpIHsKKyAgICAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKKyAgICAgICAgaWYgKHNldHRpbmdz
ICYmIHNldHRpbmdzLT5pc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAg
aWYgKCF3YXNSYW5nZSAmJiBhbHRlciA9PSBBbHRlcmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9PSBw
b3NCZWZvcmVNb2RpZnlpbmcpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAg
ICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6
IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwko
cmV2aXNpb24gNjg2NzEpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTAtMDktMjkgIENoYW5nIFNodSAgPGNoYW5nLnNodUBub2tpYS5j
b20+CisKKyAgICAgICAgUGF0Y2ggYnkgQW50b25pbyBHb21lcyA8YW50b25pby5nb21lc0BvcGVu
Ym9zc2Eub3JnPiBvbiAyMDA5LTA0LTA2LAorICAgICAgICBhbmQgQ2hhbmcgU2h1IDxjaGFuZy5z
aHVAbm9raWEuY29tPi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbUXRdIE1ha2VzIDxpbnB1dCB0eXBlPXRleHQ+IGFuZCA8dGV4dGFyZWE+IGZ1bmN0
aW9uYWwgd2l0aAorICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb24gZW5hYmxlZC4gQmVmb3JlIHRo
aXMgcGF0Y2gsIHRoZSBmb2N1cyBjYW5ub3QKKyAgICAgICAgbW92ZSBhd2F5IGZyb20gaW5wdXQg
Ym94IG9uY2UgaXQgaXMgaW4uIFRoaXMgcGF0Y2ggYWxsb3dzIGZvY3VzCisgICAgICAgIG1vdmUg
dG8gbmVpZ2hib3Igbm9kZXMgd2hlbiB0aGUgY2FyZXQgcmVhY2hlcyB0aGUgZWRnZSBvZiB0aGUg
dGV4dHMuCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBub3Qgc3VwcG9ydCB5ZXQgY2FzZXMgd2hl
cmUgdGhlIGZvY3VzZWQgPGlucHV0PgorICAgICAgICBoYXMgYSBKUyBoYW5kbGVyIGZvciB0aGUg
YXJyb3cga2V5cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM3MTUzCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6
CisKIDIwMTAtMDktMjkgIEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBcml5YSBIaWRheWF0LgpJbmRleDogV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA2ODY3MSkKKysrIFdl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3MSw3ICszNzEsMTIgQEAgdm9pZCBFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRF
dmVudAogICAgICAgICAgICAgICAgICYmIGtldmVudC0+dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9h
cmRFdmVudDo6UmF3S2V5RG93bikKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAg
ICAgIG1fcGFnZS0+dHJpZ2dlckFjdGlvbihhY3Rpb24pOworICAgICAgICAgICAgY29uc3QgY2hh
ciogY29tbWFuZCA9IFFXZWJQYWdlUHJpdmF0ZTo6ZWRpdG9yQ29tbWFuZEZvcldlYkFjdGlvbnMo
YWN0aW9uKTsKKyAgICAgICAgICAgIGlmIChjb21tYW5kKSB7CisgICAgICAgICAgICAgICAgaWYg
KGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kKS5leGVjdXRlKCkpCisgICAgICAgICAg
ICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAjZW5kaWYgLy8gUVRfTk9fU0hP
UlRDVVQKICAgICAgICAgc3dpdGNoIChrZXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA2ODY3MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDEwLTA5LTI5ICBDaGFuZyBTaHUgIDxjaGFu
Zy5zaHVAbm9raWEuY29tPgorCisgICAgICAgIFBhdGNoIGJ5IEFudG9uaW8gR29tZXMgPGFudG9u
aW8uZ29tZXNAb3BlbmJvc3NhLm9yZz4gb24gMjAwOS0wNC0wNiwKKyAgICAgICAgYW5kIENoYW5n
IFNodSA8Y2hhbmcuc2h1QG5va2lhLmNvbT4uCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW1F0XSBNYWtlcyA8aW5wdXQgdHlwZT10ZXh0PiBhbmQgPHRl
eHRhcmVhPiBmdW5jdGlvbmFsIHdpdGgKKyAgICAgICAgU3BhdGlhbCBOYXZpZ2F0aW9uIGVuYWJs
ZWQuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgZm9jdXMgY2Fubm90CisgICAgICAgIG1vdmUgYXdh
eSBmcm9tIGlucHV0IGJveCBvbmNlIGl0IGlzIGluLiBUaGlzIHBhdGNoIGFsbG93cyBmb2N1cwor
ICAgICAgICBtb3ZlIHRvIG5laWdoYm9yIG5vZGVzIHdoZW4gdGhlIGNhcmV0IHJlYWNoZXMgdGhl
IGVkZ2Ugb2YgdGhlIHRleHRzLgorICAgICAgICBUaGlzIHBhdGNoIGRvZXMgbm90IHN1cHBvcnQg
eWV0IGNhc2VzIHdoZXJlIHRoZSBmb2N1c2VkIDxpbnB1dD4KKyAgICAgICAgaGFzIGEgSlMgaGFu
ZGxlciBmb3IgdGhlIGFycm93IGtleXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNzE1MworCisgICAgICAgICogZmFzdC9ldmVudHMvc3BhdGlhbC1u
YXZpZ2F0aW9uL3NuYXYtaW5wdXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pbnB1dC5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi10ZXh0YXJlYS1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9z
bmF2LXRleHRhcmVhLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA5LTI5ICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudG9uaW8gR29tZXMuCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pbnB1
dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3Bh
dGlhbC1uYXZpZ2F0aW9uL3NuYXYtaW5wdXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaW5wdXQtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACisyCQorNAkJNgorOAkKK1BB
U1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAi
OCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQi
KSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRy
aWJ1dGUoImlkIikgaXMgIjIiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5n
ZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2
ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICI2IgorUEFTUyBnRm9jdXNlZERvY3VtZW50
LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3Vz
ZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiNCIKK1BBU1Mg
Z0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3Rh
cnQiCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9z
bmF2LWlucHV0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3Bh
dGlhbC1uYXZpZ2F0aW9uL3NuYXYtaW5wdXQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlucHV0Lmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKKzxodG1sPgorICA8IS0tCisgICAgVGhpcyB0ZXN0IGVu
c3VyZXMgdGhlIGNvcnJlY3RuZXNzIG9mIFNwYXRpYWwgTmF2aWdhdGlvbiAoU05hdikgYWxnb3Jp
dGhtIG92ZXIgaW5wdXQgYm94LgorCisgICAgKiBQcmUtY29uZGl0aW9uczoKKyAgICAxKSBEUlQg
c3VwcG9ydCBmb3IgU05hdiBlbmFibGUvZGlzYWJsZS4KKworICAgICogTmF2aWdhdGlvbiBzdGVw
czoKKyAgICAxKSBMb2FkcyB0aGlzIHBhZ2UsIGZvY3VzIGdvZXMgdG8gInN0YXJ0IiBhdXRvbWF0
aWNhbGx5LgorICAgIDIpIEZvY3VzIG1vdmVzIGF3YXkgZnJvbSBpbnB1dCBib3ggaW4gNCBkaWZm
ZXJlbnQgZGlyZWN0aW9ucyB0byBuZWlnaGJvciBub2RlcyBhbmQgYmFjay4KKyAgLS0+CisgIDxo
ZWFkPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc3BhdGlhbC1uYXZpZ2F0aW9u
LXV0aWxzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFz
Y3JpcHQiPgorCisgICAgdmFyIHJlc3VsdE1hcCA9IFsKKyAgICAgIFsiRG93biIsICI4Il0sCisg
ICAgICBbIlVwIiwgInN0YXJ0Il0sCisgICAgICBbIlVwIiwgIjIiXSwKKyAgICAgIFsiRG93biIs
ICJzdGFydCJdLAorICAgICAgWyJSaWdodCIsICI2Il0sCisgICAgICBbIkxlZnQiLCAic3RhcnQi
XSwKKyAgICAgIFsiTGVmdCIsICI0Il0sCisgICAgICBbIlJpZ2h0IiwgInN0YXJ0Il0sCisgICAg
ICBbIkRPTkUiLCAiRE9ORSJdCisgICAgXTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCh0cnVl
KTsKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0
VGFiVG9MaW5rc1ByZWZlcmVuY2VLZXkiLCAxKTsKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICB7
CisgICAgICAvLyBzdGFydGluZyB0aGUgdGVzdCBpdHNlbGY6IGdldCB0byBhIGtub3duIHBsYWNl
LgorICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJ0IikuZm9jdXMoKTsKKworICAg
ICAgaW5pdFRlc3QocmVzdWx0TWFwLCB0ZXN0Q29tcGxldGVkKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiB0ZXN0Q29tcGxldGVkKCkKKyAgICB7CisgICAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cisg
ICAgfQorCisgICAgd2luZG93Lm9ubG9hZCA9IHJ1blRlc3Q7CisKKyAgICA8L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
CisgIDwvaGVhZD4KKyAgPGJvZHkgaWQ9InNvbWUtY29udGVudCIgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzE5OTkveGh0bWwiPgorICAgIDx0YWJsZSBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsg
d2lkdGg6IDEwMCU7IG1hcmdpbi1sZWZ0OiBhdXRvOyBtYXJnaW4tcmlnaHQ6IGF1dG87IiBib3Jk
ZXI9IjEiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMSI+CisgICAgICA8dGJvZHk+Cisg
ICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHRl
eHQtYWxpZ246IGNlbnRlcjsiPjwvdGQ+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1h
bGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48YSBpZD0iMiIgaHJlZj0iYSI+MjwvYT48
L3RkPgorICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1hbGln
bjogY2VudGVyOyI+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAg
IDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGEg
aWQ9IjQiIGhyZWY9ImEiPjQ8L2E+PC90ZD4KKyAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2Fs
LWFsaWduOiB0b3A7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxpbnB1dCBpZD0ic3RhcnQiIHR5cGU9
InRleHQiIHZhbHVlPSJ0ZXh0Ij48L3RkPgorICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwt
YWxpZ246IHRvcDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGEgaWQ9IjYiIGhyZWY9ImEiPjY8L2E+
PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBzdHlsZT0i
dmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PC90ZD4KKyAgICAgICAg
ICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxh
IGlkPSI4IiBocmVmPSJhIj44PC9hPjwvdGQ+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNh
bC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3RkPgorICAgICAgICA8L3RyPgor
ICAgICAgPC90Ym9keT4KKyAgICA8L3RhYmxlPgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorICA8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0
aWFsLW5hdmlnYXRpb24vc25hdi10ZXh0YXJlYS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtdGV4dGFyZWEt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3Bh
dGlhbC1uYXZpZ2F0aW9uL3NuYXYtdGV4dGFyZWEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEyIEBACisyCQorNAkJNgorOAkKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3Rp
dmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiOCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVu
dC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1
c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIiCitQQVNT
IGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0
YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJp
ZCIpIGlzICI2IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmli
dXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50
LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiNCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVF
bGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCisKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LXRleHRhcmVhLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYt
dGV4dGFyZWEuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Nw
YXRpYWwtbmF2aWdhdGlvbi9zbmF2LXRleHRhcmVhLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzcgQEAKKzxodG1sPgorICA8IS0tCisgICAgVGhpcyB0ZXN0IGVuc3VyZXMgdGhlIGNvcnJl
Y3RuZXNzIG9mIFNwYXRpYWwgTmF2aWdhdGlvbiAoU05hdikgYWxnb3JpdGhtIG92ZXIgaW5wdXQg
Ym94LgorCisgICAgKiBQcmUtY29uZGl0aW9uczoKKyAgICAxKSBEUlQgc3VwcG9ydCBmb3IgU05h
diBlbmFibGUvZGlzYWJsZS4KKworICAgICogTmF2aWdhdGlvbiBzdGVwczoKKyAgICAxKSBMb2Fk
cyB0aGlzIHBhZ2UsIGZvY3VzIGdvZXMgdG8gInN0YXJ0IiBhdXRvbWF0aWNhbGx5LgorICAgIDIp
IEZvY3VzIG1vdmVzIGF3YXkgZnJvbSB0ZXh0YXJlYSBpbiA0IGRpZmZlcmVudCBkaXJlY3Rpb25z
IHRvIG5laWdoYm9yIG5vZGVzIGFuZCBiYWNrLgorICAtLT4KKyAgPGhlYWQ+CisgICAgPHNjcmlw
dCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9InJlc291cmNlcy9zcGF0aWFsLW5hdmlnYXRpb24tdXRpbHMuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+CisKKyAgICB2
YXIgcmVzdWx0TWFwID0gWworICAgICAgWyJEb3duIiwgIjgiXSwKKyAgICAgIFsiVXAiLCAic3Rh
cnQiXSwKKyAgICAgIFsiVXAiLCAiMiJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAg
ICBbIlJpZ2h0IiwgIjYiXSwKKyAgICAgIFsiTGVmdCIsICJzdGFydCJdLAorICAgICAgWyJMZWZ0
IiwgIjQiXSwKKyAgICAgIFsiUmlnaHQiLCAic3RhcnQiXSwKKyAgICAgIFsiRE9ORSIsICJET05F
Il0KKyAgICBdOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuc2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKHRydWUpOworICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRUYWJUb0xpbmtzUHJlZmVy
ZW5jZUtleSIsIDEpOworICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3QoKQorICAgIHsKKyAgICAgIC8vIHN0YXJ0
aW5nIHRoZSB0ZXN0IGl0c2VsZjogZ2V0IHRvIGEga25vd24gcGxhY2UuCisgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgic3RhcnQiKS5mb2N1cygpOworCisgICAgICBpbml0VGVzdChyZXN1
bHRNYXAsIHRlc3RDb21wbGV0ZWQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RDb21wbGV0
ZWQoKQorICAgIHsKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9CisKKyAgICB3aW5k
b3cub25sb2FkID0gcnVuVGVzdDsKKworICAgIDwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIu
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgPC9oZWFkPgorICA8
Ym9keSBpZD0ic29tZS1jb250ZW50IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCI+CisgICAgPHRhYmxlIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyB3aWR0aDogMTAwJTsgbWFy
Z2luLWxlZnQ6IGF1dG87IG1hcmdpbi1yaWdodDogYXV0bzsiIGJvcmRlcj0iMSIgY2VsbHBhZGRp
bmc9IjIiIGNlbGxzcGFjaW5nPSIxIj4KKyAgICAgIDx0Ym9keT4KKyAgICAgICAgPHRyPgorICAg
ICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1hbGlnbjogY2VudGVy
OyI+PC90ZD4KKyAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQt
YWxpZ246IGNlbnRlcjsiPjxhIGlkPSIyIiBocmVmPSJhIj4yPC9hPjwvdGQ+CisgICAgICAgICAg
PHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3Rk
PgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0
aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48YSBpZD0iNCIgaHJlZj0iYSI+
NDwvYT48L3RkPgorICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgdGV4
dC1hbGlnbjogY2VudGVyOyI+PHRleHRhcmVhIGlkPSJzdGFydCIgcm93cz0iNSIgY29scz0iNSI+
bGluZTEgbGluZTIgbGluZTM8L3RleHRhcmVhPgorICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGlj
YWwtYWxpZ246IHRvcDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGEgaWQ9IjYiIGhyZWY9ImEiPjY8
L2E+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBzdHls
ZT0idmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PC90ZD4KKyAgICAg
ICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQtYWxpZ246IGNlbnRlcjsi
PjxhIGlkPSI4IiBocmVmPSJhIj44PC9hPjwvdGQ+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0
aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3RkPgorICAgICAgICA8L3Ry
PgorICAgICAgPC90Ym9keT4KKyAgICA8L3RhYmxlPgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorICA8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71034</attachid>
            <date>2010-10-18 07:41:05 -0700</date>
            <delta_ts>2010-10-19 14:33:31 -0700</delta_ts>
            <desc>fix patch 2</desc>
            <filename>37153_2.patch</filename>
            <type>text/plain</type>
            <size>17460</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTk1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMTAtMTggIENoYW5nIFNodSAgPGNoYW5nLnNodUBub2tpYS5j
b20+CisKKyAgICAgICAgUGF0Y2ggYnkgQ2hhbmcgU2h1IDxjaGFuZy5zaHVAbm9raWEuY29tPiBi
YXNlZCBvbiB0aGUgd29yaworICAgICAgICBmcm9tIEFudG9uaW8gR29tZXMgPGFudG9uaW8uZ29t
ZXNAb3BlbmJvc3NhLm9yZz4gb24gMjAwOS0wNC0wNi4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIE1ha2VzIDxpbnB1dCB0eXBlPXRleHQ+IGFu
ZCA8dGV4dGFyZWE+IGZ1bmN0aW9uYWwgd2l0aAorICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb24g
ZW5hYmxlZC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBmb2N1cyBjYW5ub3QKKyAgICAgICAgbW92
ZSBhd2F5IGZyb20gaW5wdXQgYm94IG9uY2UgaXQgaXMgaW4uIFRoaXMgcGF0Y2ggYWxsb3dzIGZv
Y3VzCisgICAgICAgIG1vdmUgdG8gbmVpZ2hib3Igbm9kZXMgd2hlbiB0aGUgY2FyZXQgcmVhY2hl
cyB0aGUgZWRnZSBvZiB0aGUgdGV4dHMuCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBub3Qgc3Vw
cG9ydCB5ZXQgY2FzZXMgd2hlcmUgdGhlIGZvY3VzZWQgPGlucHV0PgorICAgICAgICBoYXMgYSBK
UyBoYW5kbGVyIGZvciB0aGUgYXJyb3cga2V5cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MTUzCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZXZlbnRz
L3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlucHV0Lmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qv
ZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LXRleHRhcmVhLmh0bWwKKworICAgICAgICAq
IGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlTW92
ZURvd24pOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVMZWZ0KToKKyAgICAgICAgKFdl
YkNvcmU6OmV4ZWN1dGVNb3ZlUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVV
cCk6CisKIDIwMTAtMTAtMTggIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4OiBXZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5n
L0VkaXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiA2OTg1MCkKKysrIFdlYkNvcmUvZWRpdGluZy9F
ZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIwLDcgKzYyMCwxMSBAQCBzdGF0
aWMgYm9vbCBleGVjdXRlTW92ZUJhY2t3YXJkQW5kTW9kaWZ5CiAKIHN0YXRpYyBib29sIGV4ZWN1
dGVNb3ZlRG93bihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29u
c3QgU3RyaW5nJikKIHsKKyAgICBib29sIGRvU3BhdGlhbE5hdmlnYXRpb24gPSBmcmFtZS0+c2V0
dGluZ3MoKSAmJiBmcmFtZS0+c2V0dGluZ3MoKS0+aXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQo
KSAmJiAhZnJhbWUtPnNlbGVjdGlvbigpLT5pc1JhbmdlKCk7CisgICAgUG9zaXRpb24gZW5kUG9z
QmVmb3JlTW92ZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+ZW5kKCk7CiAgICAgZnJhbWUtPnNlbGVj
dGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OkRpcmVjdGlvbkZvcndhcmQsIExpbmVHcmFudWxhcml0eSwgdHJ1ZSk7
CisgICAgaWYgKGRvU3BhdGlhbE5hdmlnYXRpb24gJiYgZW5kUG9zQmVmb3JlTW92ZSA9PSBmcmFt
ZS0+c2VsZWN0aW9uKCktPmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTY0NCw3ICs2NDgsMTEgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVG
b3J3YXJkQW5kTW9kaWZ5UwogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZUxlZnQoRnJhbWUqIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CisgICAg
Ym9vbCBkb1NwYXRpYWxOYXZpZ2F0aW9uID0gZnJhbWUtPnNldHRpbmdzKCkgJiYgZnJhbWUtPnNl
dHRpbmdzKCktPmlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKCkgJiYgIWZyYW1lLT5zZWxlY3Rp
b24oKS0+aXNSYW5nZSgpOworICAgIFBvc2l0aW9uIHN0YXJ0UG9zQmVmb3JlTW92ZSA9IGZyYW1l
LT5zZWxlY3Rpb24oKS0+c3RhcnQoKTsKICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShT
ZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6
RGlyZWN0aW9uTGVmdCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOworICAgIGlmIChkb1Nw
YXRpYWxOYXZpZ2F0aW9uICYmIHN0YXJ0UG9zQmVmb3JlTW92ZSA9PSBmcmFtZS0+c2VsZWN0aW9u
KCktPnN0YXJ0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtNjg4LDcgKzY5NiwxMSBAQCBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVBhZ2VVcEFuZE1v
ZGlmeVNlCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlUmlnaHQoRnJhbWUqIGZyYW1lLCBFdmVu
dCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7CisgICAgYm9vbCBkb1Nw
YXRpYWxOYXZpZ2F0aW9uID0gZnJhbWUtPnNldHRpbmdzKCkgJiYgZnJhbWUtPnNldHRpbmdzKCkt
PmlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKCkgJiYgIWZyYW1lLT5zZWxlY3Rpb24oKS0+aXNS
YW5nZSgpOworICAgIFBvc2l0aW9uIGVuZFBvc0JlZm9yZU1vdmUgPSBmcmFtZS0+c2VsZWN0aW9u
KCktPmVuZCgpOwogICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRy
b2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBTZWxlY3Rpb25Db250cm9sbGVyOjpEaXJlY3Rpb25SaWdo
dCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOworICAgIGlmIChkb1NwYXRpYWxOYXZpZ2F0
aW9uICYmIGVuZFBvc0JlZm9yZU1vdmUgPT0gZnJhbWUtPnNlbGVjdGlvbigpLT5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC04MDgsNyArODIw
LDExIEBAIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlUGFyYWdyYXBoRm9yd2FyZEEKIAogc3RhdGlj
IGJvb2wgZXhlY3V0ZU1vdmVVcChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSwgY29uc3QgU3RyaW5nJikKIHsKKyAgICBib29sIGRvU3BhdGlhbE5hdmlnYXRpb24gPSBm
cmFtZS0+c2V0dGluZ3MoKSAmJiBmcmFtZS0+c2V0dGluZ3MoKS0+aXNTcGF0aWFsTmF2aWdhdGlv
bkVuYWJsZWQoKSAmJiAhZnJhbWUtPnNlbGVjdGlvbigpLT5pc1JhbmdlKCk7CisgICAgUG9zaXRp
b24gc3RhcnRQb3NCZWZvcmVNb3ZlID0gZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpOwogICAg
IGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRp
b25Nb3ZlLCBTZWxlY3Rpb25Db250cm9sbGVyOjpEaXJlY3Rpb25CYWNrd2FyZCwgTGluZUdyYW51
bGFyaXR5LCB0cnVlKTsKKyAgICBpZiAoZG9TcGF0aWFsTmF2aWdhdGlvbiAmJiBzdGFydFBvc0Jl
Zm9yZU1vdmUgPT0gZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNjk5NTgpCisrKyBX
ZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAt
MTAtMTggIENoYW5nIFNodSAgPGNoYW5nLnNodUBub2tpYS5jb20+CisKKyAgICAgICAgUGF0Y2gg
YnkgQ2hhbmcgU2h1IDxjaGFuZy5zaHVAbm9raWEuY29tPiBiYXNlZCBvbiB0aGUgd29yaworICAg
ICAgICBmcm9tIEFudG9uaW8gR29tZXMgPGFudG9uaW8uZ29tZXNAb3BlbmJvc3NhLm9yZz4gb24g
MjAwOS0wNC0wNi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbUXRdIE1ha2VzIDxpbnB1dCB0eXBlPXRleHQ+IGFuZCA8dGV4dGFyZWE+IGZ1bmN0aW9u
YWwgd2l0aAorICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb24gZW5hYmxlZC4gQmVmb3JlIHRoaXMg
cGF0Y2gsIHRoZSBmb2N1cyBjYW5ub3QKKyAgICAgICAgbW92ZSBhd2F5IGZyb20gaW5wdXQgYm94
IG9uY2UgaXQgaXMgaW4uIFRoaXMgcGF0Y2ggYWxsb3dzIGZvY3VzCisgICAgICAgIG1vdmUgdG8g
bmVpZ2hib3Igbm9kZXMgd2hlbiB0aGUgY2FyZXQgcmVhY2hlcyB0aGUgZWRnZSBvZiB0aGUgdGV4
dHMuCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBub3Qgc3VwcG9ydCB5ZXQgY2FzZXMgd2hlcmUg
dGhlIGZvY3VzZWQgPGlucHV0PgorICAgICAgICBoYXMgYSBKUyBoYW5kbGVyIGZvciB0aGUgYXJy
b3cga2V5cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM3MTUzCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisK
IDIwMTAtMTAtMTUgIFFpIFpoYW5nICA8cWkuMi56aGFuZ0Bub2tpYS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudFF0LmNwcAkocmV2aXNpb24gNjk4NTApCisrKyBXZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0
Niw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUVdl
YlBhZ2VDbGllbnQuaCIKICNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiV2luZG93c0tleWJvYXJkQ29kZXMuaCIKICNpbmNsdWRlICJxd2VicGFnZS5o
IgogI2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIKQEAgLTM2MCw5ICszNjEsMjIgQEAgdm9pZCBFZGl0
b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVudAogCiAgICAgLy8gRklYTUU6IHJlZmFjdG9y
IGFsbCBvZiB0aGlzIHRvIHVzZSBBY3Rpb25zIG9yIHNvbWV0aGluZyBsaWtlIHRoZW0KICAgICBp
ZiAoc3RhcnQtPmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgYm9vbCBkb1NwYXRpYWxO
YXZpZ2F0aW9uID0gZmFsc2U7CisgICAgICAgIGlmIChmcmFtZS0+c2V0dGluZ3MoKSAmJiBmcmFt
ZS0+c2V0dGluZ3MoKS0+aXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAg
ICAgaWYgKCFrZXZlbnQtPm1vZGlmaWVycygpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChr
ZXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBW
S19MRUZUOgorICAgICAgICAgICAgICAgIGNhc2UgVktfUklHSFQ6CisgICAgICAgICAgICAgICAg
Y2FzZSBWS19VUDoKKyAgICAgICAgICAgICAgICBjYXNlIFZLX0RPV046CisgICAgICAgICAgICAg
ICAgICAgIGRvU3BhdGlhbE5hdmlnYXRpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogI2lmbmRl
ZiBRVF9OT19TSE9SVENVVAogICAgICAgICBRV2ViUGFnZTo6V2ViQWN0aW9uIGFjdGlvbiA9IFFX
ZWJQYWdlUHJpdmF0ZTo6ZWRpdG9yQWN0aW9uRm9yS2V5RXZlbnQoa2V2ZW50LT5xdEV2ZW50KCkp
OwotICAgICAgICBpZiAoYWN0aW9uICE9IFFXZWJQYWdlOjpOb1dlYkFjdGlvbikgeworICAgICAg
ICBpZiAoYWN0aW9uICE9IFFXZWJQYWdlOjpOb1dlYkFjdGlvbiAmJiAhZG9TcGF0aWFsTmF2aWdh
dGlvbikgewogICAgICAgICAgICAgY29uc3QgY2hhciogY21kID0gUVdlYlBhZ2VQcml2YXRlOjpl
ZGl0b3JDb21tYW5kRm9yV2ViQWN0aW9ucyhhY3Rpb24pOwogICAgICAgICAgICAgLy8gV2ViS2l0
IGRvZXNuJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgbW9kZSB0byBkZWNpZGUgaG93
IGNvbW1hbmRzIHRoYXQganVzdCBpbnNlcnQgdGV4dCBpZiBleGVjdXRlZCB2aWEgRWRpdG9yIHNo
b3VsZCBiZSB0cmVhdGVkLAogICAgICAgICAgICAgLy8gc28gd2UgbGVhdmUgaXQgdXBvbiBXZWJD
b3JlIHRvIGVpdGhlciBoYW5kbGUgdGhlbSBpbW1lZGlhdGVseSAoZS5nLiBUYWIgdGhhdCBjaGFu
Z2VzIGZvY3VzKSBvciBsZXQgYSBrZXlwcmVzcyBldmVudCBiZSBnZW5lcmF0ZWQKQEAgLTM4Niwy
NiArNDAwLDM0IEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OmhhbmRsZUtleWJvYXJkRXZlbnQKICAg
ICAgICAgY2FzZSBWS19MRUZUOgogICAgICAgICAgICAgaWYgKGtldmVudC0+c2hpZnRLZXkoKSkK
ICAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1vdmVMZWZ0QW5kTW9k
aWZ5U2VsZWN0aW9uIikuZXhlY3V0ZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92ZUxlZnQiKS5leGVjdXRlKCk7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS0+Y29t
bWFuZCgiTW92ZUxlZnQiKS5leGVjdXRlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZLX1JJR0hU
OgogICAgICAgICAgICAgaWYgKGtldmVudC0+c2hpZnRLZXkoKSkKICAgICAgICAgICAgICAgICBm
cmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1vdmVSaWdodEFuZE1vZGlmeVNlbGVjdGlvbiIpLmV4
ZWN1dGUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9y
KCktPmNvbW1hbmQoIk1vdmVSaWdodCIpLmV4ZWN1dGUoKTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIGlmICghZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNb3ZlUmlnaHQi
KS5leGVjdXRlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZLX1VQOgogICAgICAgICAgICAgaWYg
KGtldmVudC0+c2hpZnRLZXkoKSkKICAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNv
bW1hbmQoIk1vdmVVcEFuZE1vZGlmeVNlbGVjdGlvbiIpLmV4ZWN1dGUoKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1vdmVVcCIp
LmV4ZWN1dGUoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghZnJh
bWUtPmVkaXRvcigpLT5jb21tYW5kKCJNb3ZlVXAiKS5leGVjdXRlKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFZLX0RPV046CiAgICAgICAgICAgICBpZiAoa2V2ZW50LT5zaGlmdEtleSgpKQogICAg
ICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92ZURvd25BbmRNb2RpZnlT
ZWxlY3Rpb24iKS5leGVjdXRlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNb3ZlRG93biIpLmV4ZWN1dGUoKTsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghZnJhbWUtPmVkaXRvcigpLT5jb21tYW5k
KCJNb3ZlRG93biIpLmV4ZWN1dGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVktfUFJJT1I6IC8v
IFBhZ2VVcAogICAgICAgICAgICAgaWYgKGtldmVudC0+c2hpZnRLZXkoKSkKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDY5OTU4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTAtMTAtMTggIENoYW5nIFNodSAgPGNoYW5nLnNodUBub2tpYS5j
b20+CisKKyAgICAgICAgUGF0Y2ggYnkgQ2hhbmcgU2h1IDxjaGFuZy5zaHVAbm9raWEuY29tPiBi
YXNlZCBvbiB0aGUgd29yaworICAgICAgICBmcm9tIEFudG9uaW8gR29tZXMgPGFudG9uaW8uZ29t
ZXNAb3BlbmJvc3NhLm9yZz4gb24gMjAwOS0wNC0wNi4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIE1ha2VzIDxpbnB1dCB0eXBlPXRleHQ+IGFu
ZCA8dGV4dGFyZWE+IGZ1bmN0aW9uYWwgd2l0aAorICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb24g
ZW5hYmxlZC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBmb2N1cyBjYW5ub3QKKyAgICAgICAgbW92
ZSBhd2F5IGZyb20gaW5wdXQgYm94IG9uY2UgaXQgaXMgaW4uIFRoaXMgcGF0Y2ggYWxsb3dzIGZv
Y3VzCisgICAgICAgIG1vdmUgdG8gbmVpZ2hib3Igbm9kZXMgd2hlbiB0aGUgY2FyZXQgcmVhY2hl
cyB0aGUgZWRnZSBvZiB0aGUgdGV4dHMuCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBub3Qgc3Vw
cG9ydCB5ZXQgY2FzZXMgd2hlcmUgdGhlIGZvY3VzZWQgPGlucHV0PgorICAgICAgICBoYXMgYSBK
UyBoYW5kbGVyIGZvciB0aGUgYXJyb3cga2V5cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MTUzCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zcGF0
aWFsLW5hdmlnYXRpb24vc25hdi1pbnB1dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlucHV0Lmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LXRleHRhcmVhLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0
aW9uL3NuYXYtdGV4dGFyZWEuaHRtbDogQWRkZWQuCisKIDIwMTAtMTAtMTggIENzYWJhIE9zenRy
b2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdIEFkZCBwbGF0Zm9ybSBz
cGVjaWZpYyBleHBlY3RlZCByZXN1bHRzIGZvciBuZXcgcGFzc2luZyB0ZXN0cy4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlucHV0LWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5h
dmlnYXRpb24vc25hdi1pbnB1dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pbnB1dC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzIJCis0CQk2Cis4CQorUEFTUyBnRm9j
dXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICI4IgorUEFT
UyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJz
dGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgi
aWQiKSBpcyAiMiIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJp
YnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVu
dC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjYiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZl
RWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICI0IgorUEFTUyBnRm9jdXNl
ZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKKwpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaW5w
dXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5h
dmlnYXRpb24vc25hdi1pbnB1dC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaW5wdXQuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3NyBAQAorPGh0bWw+CisgIDwhLS0KKyAgICBUaGlzIHRlc3QgZW5zdXJlcyB0
aGUgY29ycmVjdG5lc3Mgb2YgU3BhdGlhbCBOYXZpZ2F0aW9uIChTTmF2KSBhbGdvcml0aG0gb3Zl
ciBpbnB1dCBib3guCisKKyAgICAqIFByZS1jb25kaXRpb25zOgorICAgIDEpIERSVCBzdXBwb3J0
IGZvciBTTmF2IGVuYWJsZS9kaXNhYmxlLgorCisgICAgKiBOYXZpZ2F0aW9uIHN0ZXBzOgorICAg
IDEpIExvYWRzIHRoaXMgcGFnZSwgZm9jdXMgZ29lcyB0byAic3RhcnQiIGF1dG9tYXRpY2FsbHku
CisgICAgMikgRm9jdXMgbW92ZXMgYXdheSBmcm9tIGlucHV0IGJveCBpbiA0IGRpZmZlcmVudCBk
aXJlY3Rpb25zIHRvIG5laWdoYm9yIG5vZGVzIGFuZCBiYWNrLgorICAtLT4KKyAgPGhlYWQ+Cisg
ICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9zcGF0aWFsLW5hdmlnYXRpb24tdXRpbHMu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+
CisKKyAgICB2YXIgcmVzdWx0TWFwID0gWworICAgICAgWyJEb3duIiwgIjgiXSwKKyAgICAgIFsi
VXAiLCAic3RhcnQiXSwKKyAgICAgIFsiVXAiLCAiMiJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0
Il0sCisgICAgICBbIlJpZ2h0IiwgIjYiXSwKKyAgICAgIFsiTGVmdCIsICJzdGFydCJdLAorICAg
ICAgWyJMZWZ0IiwgIjQiXSwKKyAgICAgIFsiUmlnaHQiLCAic3RhcnQiXSwKKyAgICAgIFsiRE9O
RSIsICJET05FIl0KKyAgICBdOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuc2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKHRydWUpOworICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRUYWJUb0xp
bmtzUHJlZmVyZW5jZUtleSIsIDEpOworICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3QoKQorICAgIHsKKyAgICAg
IC8vIHN0YXJ0aW5nIHRoZSB0ZXN0IGl0c2VsZjogZ2V0IHRvIGEga25vd24gcGxhY2UuCisgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RhcnQiKS5mb2N1cygpOworCisgICAgICBpbml0
VGVzdChyZXN1bHRNYXAsIHRlc3RDb21wbGV0ZWQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRl
c3RDb21wbGV0ZWQoKQorICAgIHsKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9CisK
KyAgICB3aW5kb3cub25sb2FkID0gcnVuVGVzdDsKKworICAgIDwvc2NyaXB0PgorICAgIDxzY3Jp
cHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgPC9o
ZWFkPgorICA8Ym9keSBpZD0ic29tZS1jb250ZW50IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MTk5OS94aHRtbCI+CisgICAgPHRhYmxlIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyB3aWR0aDog
MTAwJTsgbWFyZ2luLWxlZnQ6IGF1dG87IG1hcmdpbi1yaWdodDogYXV0bzsiIGJvcmRlcj0iMSIg
Y2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIxIj4KKyAgICAgIDx0Ym9keT4KKyAgICAgICAg
PHRyPgorICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1hbGln
bjogY2VudGVyOyI+PC90ZD4KKyAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0
b3A7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxhIGlkPSIyIiBocmVmPSJhIj4yPC9hPjwvdGQ+Cisg
ICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50
ZXI7Ij48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIHN0
eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48YSBpZD0iNCIg
aHJlZj0iYSI+NDwvYT48L3RkPgorICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246
IHRvcDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGlucHV0IGlkPSJzdGFydCIgdHlwZT0idGV4dCIg
dmFsdWU9InRleHQiPjwvdGQ+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjog
dG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48YSBpZD0iNiIgaHJlZj0iYSI+NjwvYT48L3RkPgor
ICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNh
bC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3RkPgorICAgICAgICAgIDx0ZCBz
dHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGEgaWQ9Ijgi
IGhyZWY9ImEiPjg8L2E+PC90ZD4KKyAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWdu
OiB0b3A7IHRleHQtYWxpZ246IGNlbnRlcjsiPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8
L3Rib2R5PgorICAgIDwvdGFibGU+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgIDwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2
aWdhdGlvbi9zbmF2LXRleHRhcmVhLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi10ZXh0YXJlYS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5h
dmlnYXRpb24vc25hdi10ZXh0YXJlYS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTIgQEAKKzIJCis0CQk2Cis4CQorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1l
bnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICI4IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2
ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1
bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKK1BBU1MgZ0ZvY3Vz
ZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQ
QVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMg
IjYiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlk
IikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0
cmlidXRlKCJpZCIpIGlzICI0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQu
Z2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtdGV4dGFyZWEuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi10ZXh0YXJl
YS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1u
YXZpZ2F0aW9uL3NuYXYtdGV4dGFyZWEuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBA
QAorPGh0bWw+CisgIDwhLS0KKyAgICBUaGlzIHRlc3QgZW5zdXJlcyB0aGUgY29ycmVjdG5lc3Mg
b2YgU3BhdGlhbCBOYXZpZ2F0aW9uIChTTmF2KSBhbGdvcml0aG0gb3ZlciBpbnB1dCBib3guCisK
KyAgICAqIFByZS1jb25kaXRpb25zOgorICAgIDEpIERSVCBzdXBwb3J0IGZvciBTTmF2IGVuYWJs
ZS9kaXNhYmxlLgorCisgICAgKiBOYXZpZ2F0aW9uIHN0ZXBzOgorICAgIDEpIExvYWRzIHRoaXMg
cGFnZSwgZm9jdXMgZ29lcyB0byAic3RhcnQiIGF1dG9tYXRpY2FsbHkuCisgICAgMikgRm9jdXMg
bW92ZXMgYXdheSBmcm9tIHRleHRhcmVhIGluIDQgZGlmZmVyZW50IGRpcmVjdGlvbnMgdG8gbmVp
Z2hib3Igbm9kZXMgYW5kIGJhY2suCisgIC0tPgorICA8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL3NwYXRpYWwtbmF2aWdhdGlvbi11dGlscy5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KKworICAgIHZhciByZXN1
bHRNYXAgPSBbCisgICAgICBbIkRvd24iLCAiOCJdLAorICAgICAgWyJVcCIsICJzdGFydCJdLAor
ICAgICAgWyJVcCIsICIyIl0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiUmln
aHQiLCAiNiJdLAorICAgICAgWyJMZWZ0IiwgInN0YXJ0Il0sCisgICAgICBbIkxlZnQiLCAiNCJd
LAorICAgICAgWyJSaWdodCIsICJzdGFydCJdLAorICAgICAgWyJET05FIiwgIkRPTkUiXQorICAg
IF07CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5zZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQodHJ1ZSk7CisgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFRhYlRvTGlua3NQcmVmZXJlbmNlS2V5
IiwgMSk7CisgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAgeworICAgICAgLy8gc3RhcnRpbmcgdGhl
IHRlc3QgaXRzZWxmOiBnZXQgdG8gYSBrbm93biBwbGFjZS4KKyAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJzdGFydCIpLmZvY3VzKCk7CisKKyAgICAgIGluaXRUZXN0KHJlc3VsdE1hcCwg
dGVzdENvbXBsZXRlZCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdENvbXBsZXRlZCgpCisg
ICAgeworICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KKworICAgIHdpbmRvdy5vbmxv
YWQgPSBydW5UZXN0OworCisgICAgPC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2hlYWQ+CisgIDxib2R5IGlk
PSJzb21lLWNvbnRlbnQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKyAg
ICA8dGFibGUgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7IHdpZHRoOiAxMDAlOyBtYXJnaW4tbGVm
dDogYXV0bzsgbWFyZ2luLXJpZ2h0OiBhdXRvOyIgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMiIg
Y2VsbHNwYWNpbmc9IjEiPgorICAgICAgPHRib2R5PgorICAgICAgICA8dHI+CisgICAgICAgICAg
PHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3Rk
PgorICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1hbGlnbjog
Y2VudGVyOyI+PGEgaWQ9IjIiIGhyZWY9ImEiPjI8L2E+PC90ZD4KKyAgICAgICAgICA8dGQgc3R5
bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQtYWxpZ246IGNlbnRlcjsiPjwvdGQ+CisgICAg
ICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFs
aWduOiB0b3A7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxhIGlkPSI0IiBocmVmPSJhIj40PC9hPjwv
dGQ+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWFsaWdu
OiBjZW50ZXI7Ij48dGV4dGFyZWEgaWQ9InN0YXJ0IiByb3dzPSI1IiBjb2xzPSI1Ij5saW5lMSBs
aW5lMiBsaW5lMzwvdGV4dGFyZWE+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGln
bjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48YSBpZD0iNiIgaHJlZj0iYSI+NjwvYT48L3Rk
PgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0
aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3RkPgorICAgICAgICAgIDx0
ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGEgaWQ9
IjgiIGhyZWY9ImEiPjg8L2E+PC90ZD4KKyAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFs
aWduOiB0b3A7IHRleHQtYWxpZ246IGNlbnRlcjsiPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAg
ICA8L3Rib2R5PgorICAgIDwvdGFibGU+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cisg
IDwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71203</attachid>
            <date>2010-10-19 14:33:31 -0700</date>
            <delta_ts>2010-10-20 07:20:14 -0700</delta_ts>
            <desc>fix patch 3</desc>
            <filename>37153_3.patch</filename>
            <type>text/plain</type>
            <size>18312</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTk4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMTAtMTggIENoYW5nIFNodSAgPGNoYW5nLnNodUBub2tpYS5j
b20+CisKKyAgICAgICAgUGF0Y2ggYnkgQ2hhbmcgU2h1IDxjaGFuZy5zaHVAbm9raWEuY29tPiBh
bmQKKyAgICAgICAgQW50b25pbyBHb21lcyA8dG9uaWtpdG9vQHdlYmtpdC5vcmc+IG9uIDIwMDkt
MDQtMDYuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W1F0XSBNYWtlcyA8aW5wdXQgdHlwZT10ZXh0PiBhbmQgPHRleHRhcmVhPiBmdW5jdGlvbmFsIHdp
dGgKKyAgICAgICAgU3BhdGlhbCBOYXZpZ2F0aW9uIGVuYWJsZWQuIEJlZm9yZSB0aGlzIHBhdGNo
LCB0aGUgZm9jdXMgY2Fubm90CisgICAgICAgIG1vdmUgYXdheSBmcm9tIGlucHV0IGJveCBvbmNl
IGl0IGlzIGluLiBUaGlzIHBhdGNoIGFsbG93cyBmb2N1cworICAgICAgICBtb3ZlIHRvIG5laWdo
Ym9yIG5vZGVzIHdoZW4gdGhlIGNhcmV0IHJlYWNoZXMgdGhlIGVkZ2Ugb2YgdGhlIHRleHRzLgor
ICAgICAgICBUaGlzIHBhdGNoIGRvZXMgbm90IHN1cHBvcnQgeWV0IGNhc2VzIHdoZXJlIHRoZSBm
b2N1c2VkIDxpbnB1dD4KKyAgICAgICAgaGFzIGEgSlMgaGFuZGxlciBmb3IgdGhlIGFycm93IGtl
eXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzE1
MworCisgICAgICAgIFRlc3RzOiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1p
bnB1dC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24v
c25hdi10ZXh0YXJlYS5odG1sCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVEb3duKToKKyAgICAgICAgKFdlYkNvcmU6
OmV4ZWN1dGVNb3ZlTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlTW92ZVJpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVXApOgorICAgICAgICAqIGVkaXRpbmcvU2Vs
ZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9s
bGVyOjptb2RpZnkpOgorCiAyMDEwLTEwLTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KIAogICAgICAgICAqIGRvbS9Ob2RlLmg6IEZpeCBhbmNpZW50IHR5cG8gaW4ganVzdC1tb2Rp
ZmllZCBjb21tZW50LgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2aXNpb24g
Njk4NTApCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYyMCw4ICs2MjAsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZUJhY2t3YXJkQW5k
TW9kaWZ5CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlRG93bihGcmFtZSogZnJhbWUsIEV2ZW50
KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2Vs
ZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6RGlyZWN0aW9uRm9yd2FyZCwgTGluZUdyYW51bGFyaXR5LCB0cnVl
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLT5tb2Rp
ZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkRpcmVjdGlvbkZvcndhcmQsIExpbmVHcmFudWxhcml0eSwgdHJ1ZSk7CiB9CiAKIHN0YXRp
YyBib29sIGV4ZWN1dGVNb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSogZnJhbWUsIEV2
ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKQEAgLTY0NCw4ICs2NDMs
NyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZUZvcndhcmRBbmRNb2RpZnlTCiAKIHN0YXRpYyBi
b29sIGV4ZWN1dGVNb3ZlTGVmdChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShT
ZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6
RGlyZWN0aW9uTGVmdCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOwotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250
cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6RGlyZWN0aW9uTGVm
dCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRl
TW92ZUxlZnRBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNv
bW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCkBAIC02ODgsOCArNjg2LDcgQEAgc3RhdGljIGJv
b2wgZXhlY3V0ZU1vdmVQYWdlVXBBbmRNb2RpZnlTZQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92
ZVJpZ2h0KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBT
dHJpbmcmKQogewotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRy
b2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBTZWxlY3Rpb25Db250cm9sbGVyOjpEaXJlY3Rpb25SaWdo
dCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOwotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRl
cmF0aW9uTW92ZSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6RGlyZWN0aW9uUmlnaHQsIENoYXJhY3Rl
ckdyYW51bGFyaXR5LCB0cnVlKTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVSaWdodEFu
ZE1vZGlmeVNlbGVjdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJj
ZSwgY29uc3QgU3RyaW5nJikKQEAgLTgwOCw4ICs4MDUsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRl
TW92ZVBhcmFncmFwaEZvcndhcmRBCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVXAoRnJhbWUq
IGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0g
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJh
dGlvbk1vdmUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkRpcmVjdGlvbkJhY2t3YXJkLCBMaW5lR3Jh
bnVsYXJpdHksIHRydWUpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmcmFtZS0+c2Vs
ZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6RGlyZWN0aW9uQmFja3dhcmQsIExpbmVHcmFudWxhcml0eSwgdHJ1
ZSk7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24oRnJh
bWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2OTg1
MCkKKysrIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjQyLDYgKzY0Miw4IEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5
KEVBbHRlcmEKIAogICAgIHdpbGxCZU1vZGlmaWVkKGFsdGVyLCBkaXJlY3Rpb24pOwogCisgICAg
Ym9vbCB3YXNSYW5nZSA9IG1fc2VsZWN0aW9uLmlzUmFuZ2UoKTsKKyAgICBQb3NpdGlvbiBvcmln
aW5hbFN0YXJ0UG9zaXRpb24gPSBtX3NlbGVjdGlvbi5zdGFydCgpOwogICAgIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbjsKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRGlyZWN0
aW9uUmlnaHQ6CkBAIC02NzMsNiArNjc1LDEwIEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6
bW9kaWZ5KEVBbHRlcmEKICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAorICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPnNldHRpbmdzKCkgJiYgbV9m
cmFtZS0+c2V0dGluZ3MoKS0+aXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAg
aWYgKCF3YXNSYW5nZSAmJiBhbHRlciA9PSBBbHRlcmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9PSBv
cmlnaW5hbFN0YXJ0UG9zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICAv
LyBTb21lIG9mIHRoZSBhYm92ZSBvcGVyYXRpb25zIHNldCBhbiB4UG9zRm9yVmVydGljYWxBcnJv
d05hdmlnYXRpb24uCiAgICAgLy8gU2V0dGluZyBhIHNlbGVjdGlvbiB3aWxsIGNsZWFyIGl0LCBz
byBzYXZlIGl0IHRvIHBvc3NpYmx5IHJlc3RvcmUgbGF0ZXIuCiAgICAgLy8gTm90ZTogdGhlIFNU
QVJUIHBvc2l0aW9uIHR5cGUgaXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQgaXMgdW51c2VkLCBpdCB3
b3VsZCBiZQpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
cXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2OTk4OCkKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0xMC0xOCAgQ2hhbmcgU2h1ICA8Y2hh
bmcuc2h1QG5va2lhLmNvbT4KKworICAgICAgICBQYXRjaCBieSBDaGFuZyBTaHUgPGNoYW5nLnNo
dUBub2tpYS5jb20+IGFuZAorICAgICAgICBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0
Lm9yZz4gb24gMjAwOS0wNC0wNi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbUXRdIE1ha2VzIDxpbnB1dCB0eXBlPXRleHQ+IGFuZCA8dGV4dGFyZWE+
IGZ1bmN0aW9uYWwgd2l0aAorICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb24gZW5hYmxlZC4gQmVm
b3JlIHRoaXMgcGF0Y2gsIHRoZSBmb2N1cyBjYW5ub3QKKyAgICAgICAgbW92ZSBhd2F5IGZyb20g
aW5wdXQgYm94IG9uY2UgaXQgaXMgaW4uIFRoaXMgcGF0Y2ggYWxsb3dzIGZvY3VzCisgICAgICAg
IG1vdmUgdG8gbmVpZ2hib3Igbm9kZXMgd2hlbiB0aGUgY2FyZXQgcmVhY2hlcyB0aGUgZWRnZSBv
ZiB0aGUgdGV4dHMuCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBub3Qgc3VwcG9ydCB5ZXQgY2Fz
ZXMgd2hlcmUgdGhlIGZvY3VzZWQgPGlucHV0PgorICAgICAgICBoYXMgYSBKUyBoYW5kbGVyIGZv
ciB0aGUgYXJyb3cga2V5cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM3MTUzCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRF
dmVudCk6CisKIDIwMTAtMTAtMTggIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJbmRleDogV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA2OTg1MCkKKysr
IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIK
ICNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgogI2luY2x1
ZGUgInF3ZWJwYWdlLmgiCiAjaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgpAQCAtMzYwLDkgKzM2MSwy
MSBAQCB2b2lkIEVkaXRvckNsaWVudFF0OjpoYW5kbGVLZXlib2FyZEV2ZW50CiAKICAgICAvLyBG
SVhNRTogcmVmYWN0b3IgYWxsIG9mIHRoaXMgdG8gdXNlIEFjdGlvbnMgb3Igc29tZXRoaW5nIGxp
a2UgdGhlbQogICAgIGlmIChzdGFydC0+aXNDb250ZW50RWRpdGFibGUoKSkgeworICAgICAgICBi
b29sIGRvU3BhdGlhbE5hdmlnYXRpb24gPSBmYWxzZTsKKyAgICAgICAgaWYgKGZyYW1lLT5zZXR0
aW5ncygpICYmIGZyYW1lLT5zZXR0aW5ncygpLT5pc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCgp
KSB7CisgICAgICAgICAgICBpZiAoIWtldmVudC0+bW9kaWZpZXJzKCkpIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGtldmVudC0+d2luZG93c1ZpcnR1YWxLZXlDb2RlKCkpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIFZLX0xFRlQ6CisgICAgICAgICAgICAgICAgY2FzZSBWS19SSUdIVDoKKyAg
ICAgICAgICAgICAgICBjYXNlIFZLX1VQOgorICAgICAgICAgICAgICAgIGNhc2UgVktfRE9XTjoK
KyAgICAgICAgICAgICAgICAgICAgZG9TcGF0aWFsTmF2aWdhdGlvbiA9IHRydWU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAjaWZuZGVmIFFUX05PX1NIT1JU
Q1VUCiAgICAgICAgIFFXZWJQYWdlOjpXZWJBY3Rpb24gYWN0aW9uID0gUVdlYlBhZ2VQcml2YXRl
OjplZGl0b3JBY3Rpb25Gb3JLZXlFdmVudChrZXZlbnQtPnF0RXZlbnQoKSk7Ci0gICAgICAgIGlm
IChhY3Rpb24gIT0gUVdlYlBhZ2U6Ok5vV2ViQWN0aW9uKSB7CisgICAgICAgIGlmIChhY3Rpb24g
IT0gUVdlYlBhZ2U6Ok5vV2ViQWN0aW9uICYmICFkb1NwYXRpYWxOYXZpZ2F0aW9uKSB7CiAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBjbWQgPSBRV2ViUGFnZVByaXZhdGU6OmVkaXRvckNvbW1hbmRG
b3JXZWJBY3Rpb25zKGFjdGlvbik7CiAgICAgICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBoYXZl
IGVub3VnaCBpbmZvcm1hdGlvbiBhYm91dCBtb2RlIHRvIGRlY2lkZSBob3cgY29tbWFuZHMgdGhh
dCBqdXN0IGluc2VydCB0ZXh0IGlmIGV4ZWN1dGVkIHZpYSBFZGl0b3Igc2hvdWxkIGJlIHRyZWF0
ZWQsCiAgICAgICAgICAgICAvLyBzbyB3ZSBsZWF2ZSBpdCB1cG9uIFdlYkNvcmUgdG8gZWl0aGVy
IGhhbmRsZSB0aGVtIGltbWVkaWF0ZWx5IChlLmcuIFRhYiB0aGF0IGNoYW5nZXMgZm9jdXMpIG9y
IGxldCBhIGtleXByZXNzIGV2ZW50IGJlIGdlbmVyYXRlZApAQCAtMzg2LDI2ICszOTksMzQgQEAg
dm9pZCBFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVudAogICAgICAgICBjYXNlIFZL
X0xFRlQ6CiAgICAgICAgICAgICBpZiAoa2V2ZW50LT5zaGlmdEtleSgpKQogICAgICAgICAgICAg
ICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92ZUxlZnRBbmRNb2RpZnlTZWxlY3Rpb24i
KS5leGVjdXRlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnJhbWUtPmVk
aXRvcigpLT5jb21tYW5kKCJNb3ZlTGVmdCIpLmV4ZWN1dGUoKTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIGlmICghZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNb3ZlTGVm
dCIpLmV4ZWN1dGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVktfUklHSFQ6CiAgICAgICAgICAg
ICBpZiAoa2V2ZW50LT5zaGlmdEtleSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3Io
KS0+Y29tbWFuZCgiTW92ZVJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uIikuZXhlY3V0ZSgpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgi
TW92ZVJpZ2h0IikuZXhlY3V0ZSgpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1vdmVSaWdodCIpLmV4ZWN1dGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgVktfVVA6CiAgICAgICAgICAgICBpZiAoa2V2ZW50LT5zaGlm
dEtleSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92ZVVw
QW5kTW9kaWZ5U2VsZWN0aW9uIikuZXhlY3V0ZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92ZVVwIikuZXhlY3V0ZSgpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFmcmFtZS0+ZWRpdG9yKCkt
PmNvbW1hbmQoIk1vdmVVcCIpLmV4ZWN1dGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVktfRE9X
TjoKICAgICAgICAgICAgIGlmIChrZXZlbnQtPnNoaWZ0S2V5KCkpCiAgICAgICAgICAgICAgICAg
ZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIpLmV4
ZWN1dGUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9y
KCktPmNvbW1hbmQoIk1vdmVEb3duIikuZXhlY3V0ZSgpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1vdmVEb3duIiku
ZXhlY3V0ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWS19QUklPUjogLy8gUGFnZVVwCiAgICAg
ICAgICAgICBpZiAoa2V2ZW50LT5zaGlmdEtleSgpKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjk5ODgp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBA
QAorMjAxMC0xMC0xOCAgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KKworICAgICAg
ICBQYXRjaCBieSBDaGFuZyBTaHUgPGNoYW5nLnNodUBub2tpYS5jb20+IGFuZAorICAgICAgICBB
bnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4gb24gMjAwOS0wNC0wNi4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIE1ha2VzIDxp
bnB1dCB0eXBlPXRleHQ+IGFuZCA8dGV4dGFyZWE+IGZ1bmN0aW9uYWwgd2l0aAorICAgICAgICBT
cGF0aWFsIE5hdmlnYXRpb24gZW5hYmxlZC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBmb2N1cyBj
YW5ub3QKKyAgICAgICAgbW92ZSBhd2F5IGZyb20gaW5wdXQgYm94IG9uY2UgaXQgaXMgaW4uIFRo
aXMgcGF0Y2ggYWxsb3dzIGZvY3VzCisgICAgICAgIG1vdmUgdG8gbmVpZ2hib3Igbm9kZXMgd2hl
biB0aGUgY2FyZXQgcmVhY2hlcyB0aGUgZWRnZSBvZiB0aGUgdGV4dHMuCisgICAgICAgIFRoaXMg
cGF0Y2ggZG9lcyBub3Qgc3VwcG9ydCB5ZXQgY2FzZXMgd2hlcmUgdGhlIGZvY3VzZWQgPGlucHV0
PgorICAgICAgICBoYXMgYSBKUyBoYW5kbGVyIGZvciB0aGUgYXJyb3cga2V5cy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MTUzCisKKyAgICAgICAg
KiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pbnB1dC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlu
cHV0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlv
bi9zbmF2LXRleHRhcmVhLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVu
dHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtdGV4dGFyZWEuaHRtbDogQWRkZWQuCisKIDIwMTAt
MTAtMTggIFlvbmdqdW4gWmhhbmcgIDx5b25nanVuX3poYW5nQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlucHV0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pbnB1dC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0
aWFsLW5hdmlnYXRpb24vc25hdi1pbnB1dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTIgQEAKKzIJCis0CQk2Cis4CQorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICI4IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFj
dGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWRE
b2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKK1BBU1MgZ0Zv
Y3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQi
CitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikg
aXMgIjYiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUo
ImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0
QXR0cmlidXRlKCJpZCIpIGlzICI0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1l
bnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaW5wdXQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pbnB1dC5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZp
Z2F0aW9uL3NuYXYtaW5wdXQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorPCFE
T0NUWVBFIGh0bWw+CisgIDwhLS0KKyAgICBUaGlzIHRlc3QgZW5zdXJlcyB0aGUgY29ycmVjdG5l
c3Mgb2YgU3BhdGlhbCBOYXZpZ2F0aW9uIChTTmF2KSBhbGdvcml0aG0gb3ZlciBpbnB1dCBib3gu
CisKKyAgICAqIFByZS1jb25kaXRpb25zOgorICAgIDEpIERSVCBzdXBwb3J0IGZvciBTTmF2IGVu
YWJsZS9kaXNhYmxlLgorCisgICAgKiBOYXZpZ2F0aW9uIHN0ZXBzOgorICAgIDEpIExvYWRzIHRo
aXMgcGFnZSwgZm9jdXMgZ29lcyB0byAic3RhcnQiIGF1dG9tYXRpY2FsbHkuCisgICAgMikgRm9j
dXMgbW92ZXMgYXdheSBmcm9tIGlucHV0IGJveCBpbiA0IGRpZmZlcmVudCBkaXJlY3Rpb25zIHRv
IG5laWdoYm9yIG5vZGVzIGFuZCBiYWNrLgorICAtLT4KKyAgPGhlYWQ+CisgICAgPHNjcmlwdCBz
cmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9InJlc291cmNlcy9zcGF0aWFsLW5hdmlnYXRpb24tdXRpbHMuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+CisKKyAgICB2YXIg
cmVzdWx0TWFwID0gWworICAgICAgWyJEb3duIiwgIjgiXSwKKyAgICAgIFsiVXAiLCAic3RhcnQi
XSwKKyAgICAgIFsiVXAiLCAiMiJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBb
IlJpZ2h0IiwgIjYiXSwKKyAgICAgIFsiTGVmdCIsICJzdGFydCJdLAorICAgICAgWyJMZWZ0Iiwg
IjQiXSwKKyAgICAgIFsiUmlnaHQiLCAic3RhcnQiXSwKKyAgICAgIFsiRE9ORSIsICJET05FIl0K
KyAgICBdOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuc2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKHRydWUpOworICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRUYWJUb0xpbmtzUHJlZmVyZW5j
ZUtleSIsIDEpOworICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3QoKQorICAgIHsKKyAgICAgIC8vIHN0YXJ0aW5n
IHRoZSB0ZXN0IGl0c2VsZjogZ2V0IHRvIGEga25vd24gcGxhY2UuCisgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgic3RhcnQiKS5mb2N1cygpOworCisgICAgICBpbml0VGVzdChyZXN1bHRN
YXAsIHRlc3RDb21wbGV0ZWQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RDb21wbGV0ZWQo
KQorICAgIHsKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9CisKKyAgICB3aW5kb3cu
b25sb2FkID0gcnVuVGVzdDsKKworICAgIDwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgPC9oZWFkPgorICA8Ym9k
eSBpZD0ic29tZS1jb250ZW50IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+
CisgICAgPHRhYmxlIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyB3aWR0aDogMTAwJTsgbWFyZ2lu
LWxlZnQ6IGF1dG87IG1hcmdpbi1yaWdodDogYXV0bzsiIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9
IjIiIGNlbGxzcGFjaW5nPSIxIj4KKyAgICAgIDx0Ym9keT4KKyAgICAgICAgPHRyPgorICAgICAg
ICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1hbGlnbjogY2VudGVyOyI+
PC90ZD4KKyAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQtYWxp
Z246IGNlbnRlcjsiPjxhIGlkPSIyIiBocmVmPSJhIj4yPC9hPjwvdGQ+CisgICAgICAgICAgPHRk
IHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3RkPgor
ICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNh
bC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48YSBpZD0iNCIgaHJlZj0iYSI+NDwv
YT48L3RkPgorICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1h
bGlnbjogY2VudGVyOyI+PGlucHV0IGlkPSJzdGFydCIgdHlwZT0idGV4dCIgdmFsdWU9InRleHQi
PjwvdGQ+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWFs
aWduOiBjZW50ZXI7Ij48YSBpZD0iNiIgaHJlZj0iYSI+NjwvYT48L3RkPgorICAgICAgICA8L3Ry
PgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9w
OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3RkPgorICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGlj
YWwtYWxpZ246IHRvcDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGEgaWQ9IjgiIGhyZWY9ImEiPjg8
L2E+PC90ZD4KKyAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQt
YWxpZ246IGNlbnRlcjsiPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3Rib2R5PgorICAg
IDwvdGFibGU+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgIDwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2
LXRleHRhcmVhLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi10ZXh0YXJlYS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25h
di10ZXh0YXJlYS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzIJ
Cis0CQk2Cis4CQorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmli
dXRlKCJpZCIpIGlzICI4IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0
QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVF
bGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5h
Y3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2Vk
RG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjYiCitQQVNTIGdG
b2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0
IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIp
IGlzICI0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRl
KCJpZCIpIGlzICJzdGFydCIKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlh
bC1uYXZpZ2F0aW9uL3NuYXYtdGV4dGFyZWEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi10ZXh0YXJlYS5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3Nu
YXYtdGV4dGFyZWEuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorPCFET0NUWVBF
IGh0bWw+CisgIDwhLS0KKyAgICBUaGlzIHRlc3QgZW5zdXJlcyB0aGUgY29ycmVjdG5lc3Mgb2Yg
U3BhdGlhbCBOYXZpZ2F0aW9uIChTTmF2KSBhbGdvcml0aG0gb3ZlciBpbnB1dCBib3guCisKKyAg
ICAqIFByZS1jb25kaXRpb25zOgorICAgIDEpIERSVCBzdXBwb3J0IGZvciBTTmF2IGVuYWJsZS9k
aXNhYmxlLgorCisgICAgKiBOYXZpZ2F0aW9uIHN0ZXBzOgorICAgIDEpIExvYWRzIHRoaXMgcGFn
ZSwgZm9jdXMgZ29lcyB0byAic3RhcnQiIGF1dG9tYXRpY2FsbHkuCisgICAgMikgRm9jdXMgbW92
ZXMgYXdheSBmcm9tIHRleHRhcmVhIGluIDQgZGlmZmVyZW50IGRpcmVjdGlvbnMgdG8gbmVpZ2hi
b3Igbm9kZXMgYW5kIGJhY2suCisgIC0tPgorICA8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL3NwYXRpYWwtbmF2aWdhdGlvbi11dGlscy5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KKworICAgIHZhciByZXN1bHRN
YXAgPSBbCisgICAgICBbIkRvd24iLCAiOCJdLAorICAgICAgWyJVcCIsICJzdGFydCJdLAorICAg
ICAgWyJVcCIsICIyIl0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiUmlnaHQi
LCAiNiJdLAorICAgICAgWyJMZWZ0IiwgInN0YXJ0Il0sCisgICAgICBbIkxlZnQiLCAiNCJdLAor
ICAgICAgWyJSaWdodCIsICJzdGFydCJdLAorICAgICAgWyJET05FIiwgIkRPTkUiXQorICAgIF07
CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5z
ZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQodHJ1ZSk7CisgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFRhYlRvTGlua3NQcmVmZXJlbmNlS2V5Iiwg
MSk7CisgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAgeworICAgICAgLy8gc3RhcnRpbmcgdGhlIHRl
c3QgaXRzZWxmOiBnZXQgdG8gYSBrbm93biBwbGFjZS4KKyAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJzdGFydCIpLmZvY3VzKCk7CisKKyAgICAgIGluaXRUZXN0KHJlc3VsdE1hcCwgdGVz
dENvbXBsZXRlZCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdENvbXBsZXRlZCgpCisgICAg
eworICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KKworICAgIHdpbmRvdy5vbmxvYWQg
PSBydW5UZXN0OworCisgICAgPC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2hlYWQ+CisgIDxib2R5IGlkPSJz
b21lLWNvbnRlbnQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKyAgICA8
dGFibGUgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7IHdpZHRoOiAxMDAlOyBtYXJnaW4tbGVmdDog
YXV0bzsgbWFyZ2luLXJpZ2h0OiBhdXRvOyIgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMiIgY2Vs
bHNwYWNpbmc9IjEiPgorICAgICAgPHRib2R5PgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRk
IHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3RkPgor
ICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1hbGlnbjogY2Vu
dGVyOyI+PGEgaWQ9IjIiIGhyZWY9ImEiPjI8L2E+PC90ZD4KKyAgICAgICAgICA8dGQgc3R5bGU9
InZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQtYWxpZ246IGNlbnRlcjsiPjwvdGQ+CisgICAgICAg
IDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWdu
OiB0b3A7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxhIGlkPSI0IiBocmVmPSJhIj40PC9hPjwvdGQ+
CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBj
ZW50ZXI7Ij48dGV4dGFyZWEgaWQ9InN0YXJ0IiByb3dzPSI1IiBjb2xzPSI1Ij5saW5lMSBsaW5l
MiBsaW5lMzwvdGV4dGFyZWE+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjog
dG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48YSBpZD0iNiIgaHJlZj0iYSI+NjwvYT48L3RkPgor
ICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNh
bC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3RkPgorICAgICAgICAgIDx0ZCBz
dHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGEgaWQ9Ijgi
IGhyZWY9ImEiPjg8L2E+PC90ZD4KKyAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWdu
OiB0b3A7IHRleHQtYWxpZ246IGNlbnRlcjsiPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8
L3Rib2R5PgorICAgIDwvdGFibGU+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgIDwv
Ym9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71292</attachid>
            <date>2010-10-20 07:20:14 -0700</date>
            <delta_ts>2010-11-04 21:32:22 -0700</delta_ts>
            <desc>(committed r71388, r=smfr) fix patch 4</desc>
            <filename>37153_4.patch</filename>
            <type>text/plain</type>
            <size>19217</size>
            <attacher name="Chang Shu">cshu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDE0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMTAtMjAgIENoYW5nIFNodSAgPGNoYW5nLnNodUBub2tpYS5j
b20+CisKKyAgICAgICAgUGF0Y2ggYnkgQ2hhbmcgU2h1IDxjaGFuZy5zaHVAbm9raWEuY29tPiBh
bmQKKyAgICAgICAgQW50b25pbyBHb21lcyA8dG9uaWtpdG9vQHdlYmtpdC5vcmc+IG9uIDIwMDkt
MDQtMDYuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W1F0XSBNYWtlcyA8aW5wdXQgdHlwZT10ZXh0PiBhbmQgPHRleHRhcmVhPiBmdW5jdGlvbmFsIHdp
dGgKKyAgICAgICAgU3BhdGlhbCBOYXZpZ2F0aW9uIGVuYWJsZWQuIEJlZm9yZSB0aGlzIHBhdGNo
LCB0aGUgZm9jdXMgY2Fubm90CisgICAgICAgIG1vdmUgYXdheSBmcm9tIGlucHV0IGJveCBvbmNl
IGl0IGlzIGluLiBUaGlzIHBhdGNoIGFsbG93cyBmb2N1cworICAgICAgICBtb3ZlIHRvIG5laWdo
Ym9yIG5vZGVzIHdoZW4gdGhlIGNhcmV0IHJlYWNoZXMgdGhlIGVkZ2Ugb2YgdGhlIHRleHRzLgor
ICAgICAgICBUaGlzIHBhdGNoIGRvZXMgbm90IHN1cHBvcnQgeWV0IGNhc2VzIHdoZXJlIHRoZSBm
b2N1c2VkIDxpbnB1dD4KKyAgICAgICAgaGFzIGEgSlMgaGFuZGxlciBmb3IgdGhlIGFycm93IGtl
eXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzE1
MworCisgICAgICAgIFRlc3RzOiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1p
bnB1dC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24v
c25hdi10ZXh0YXJlYS5odG1sCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZU1vdmVEb3duKToKKyAgICAgICAgKFdlYkNvcmU6
OmV4ZWN1dGVNb3ZlTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlTW92ZVJpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVNb3ZlVXApOgorICAgICAgICAqIGVkaXRpbmcvU2Vs
ZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9s
bGVyOjptb2RpZnkpOgorCiAyMDEwLTEwLTIwICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmlrb2xhcyBaaW1tZXJtYW5uLgpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2aXNpb24gNzAxNDUpCisrKyBXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxOCw4ICs2MTgsNyBAQCBz
dGF0aWMgYm9vbCBleGVjdXRlTW92ZUJhY2t3YXJkQW5kTW9kaWZ5CiAKIHN0YXRpYyBib29sIGV4
ZWN1dGVNb3ZlRG93bihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwg
Y29uc3QgU3RyaW5nJikKIHsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rp
b25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6RGlyZWN0
aW9uRm9yd2FyZCwgTGluZUdyYW51bGFyaXR5LCB0cnVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6
QWx0ZXJhdGlvbk1vdmUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkRpcmVjdGlvbkZvcndhcmQsIExp
bmVHcmFudWxhcml0eSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlRG93bkFu
ZE1vZGlmeVNlbGVjdGlvbihGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJj
ZSwgY29uc3QgU3RyaW5nJikKQEAgLTY0Miw4ICs2NDEsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRl
TW92ZUZvcndhcmRBbmRNb2RpZnlTCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlTGVmdChGcmFt
ZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsK
LSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRl
cmF0aW9uTW92ZSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6RGlyZWN0aW9uTGVmdCwgQ2hhcmFjdGVy
R3JhbnVsYXJpdHksIHRydWUpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmcmFtZS0+
c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwg
U2VsZWN0aW9uQ29udHJvbGxlcjo6RGlyZWN0aW9uTGVmdCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHks
IHRydWUpOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZUxlZnRBbmRNb2RpZnlTZWxlY3Rp
b24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmlu
ZyYpCkBAIC02ODYsOCArNjg0LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVQYWdlVXBBbmRN
b2RpZnlTZQogCiBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVJpZ2h0KEZyYW1lKiBmcmFtZSwgRXZl
bnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5z
ZWxlY3Rpb24oKS0+bW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBT
ZWxlY3Rpb25Db250cm9sbGVyOjpEaXJlY3Rpb25SaWdodCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHks
IHRydWUpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkt
Pm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6RGlyZWN0aW9uUmlnaHQsIENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKIH0K
IAogc3RhdGljIGJvb2wgZXhlY3V0ZU1vdmVSaWdodEFuZE1vZGlmeVNlbGVjdGlvbihGcmFtZSog
ZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKQEAgLTgw
Niw4ICs4MDMsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlTW92ZVBhcmFncmFwaEZvcndhcmRBCiAK
IHN0YXRpYyBib29sIGV4ZWN1dGVNb3ZlVXAoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNv
bW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5t
b2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OkRpcmVjdGlvbkJhY2t3YXJkLCBMaW5lR3JhbnVsYXJpdHksIHRydWUpOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rp
b25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6RGlyZWN0
aW9uQmFja3dhcmQsIExpbmVHcmFudWxhcml0eSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBib29sIGV4
ZWN1dGVNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRv
ckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU2Vs
ZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3MDE0NSkKKysrIFdlYkNvcmUvZWRpdGluZy9T
ZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQyLDYgKzY0Miw4IEBA
IGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5KEVBbHRlcmEKIAogICAgIHdpbGxCZU1v
ZGlmaWVkKGFsdGVyLCBkaXJlY3Rpb24pOwogCisgICAgYm9vbCB3YXNSYW5nZSA9IG1fc2VsZWN0
aW9uLmlzUmFuZ2UoKTsKKyAgICBQb3NpdGlvbiBvcmlnaW5hbFN0YXJ0UG9zaXRpb24gPSBtX3Nl
bGVjdGlvbi5zdGFydCgpOwogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbjsKICAgICBzd2l0
Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRGlyZWN0aW9uUmlnaHQ6CkBAIC02NzMsNiArNjc1
LDEwIEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5KEVBbHRlcmEKICAgICBpZiAo
cG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChtX2Zy
YW1lICYmIG1fZnJhbWUtPnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+c2V0dGluZ3MoKS0+aXNTcGF0
aWFsTmF2aWdhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgaWYgKCF3YXNSYW5nZSAmJiBhbHRlciA9
PSBBbHRlcmF0aW9uTW92ZSAmJiBwb3NpdGlvbiA9PSBvcmlnaW5hbFN0YXJ0UG9zaXRpb24pCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICAvLyBTb21lIG9mIHRoZSBhYm92ZSBvcGVy
YXRpb25zIHNldCBhbiB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24uCiAgICAgLy8gU2V0
dGluZyBhIHNlbGVjdGlvbiB3aWxsIGNsZWFyIGl0LCBzbyBzYXZlIGl0IHRvIHBvc3NpYmx5IHJl
c3RvcmUgbGF0ZXIuCiAgICAgLy8gTm90ZTogdGhlIFNUQVJUIHBvc2l0aW9uIHR5cGUgaXMgYXJi
aXRyYXJ5IGJlY2F1c2UgaXQgaXMgdW51c2VkLCBpdCB3b3VsZCBiZQpJbmRleDogV2ViS2l0L3F0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA3
MDE0NSkKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MSBAQAorMjAxMC0xMC0yMCAgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KKworICAg
ICAgICBQYXRjaCBieSBDaGFuZyBTaHUgPGNoYW5nLnNodUBub2tpYS5jb20+IGFuZAorICAgICAg
ICBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4gb24gMjAwOS0wNC0wNi4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIE1ha2Vz
IDxpbnB1dCB0eXBlPXRleHQ+IGFuZCA8dGV4dGFyZWE+IGZ1bmN0aW9uYWwgd2l0aAorICAgICAg
ICBTcGF0aWFsIE5hdmlnYXRpb24gZW5hYmxlZC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBmb2N1
cyBjYW5ub3QKKyAgICAgICAgbW92ZSBhd2F5IGZyb20gaW5wdXQgYm94IG9uY2UgaXQgaXMgaW4u
IFRoaXMgcGF0Y2ggYWxsb3dzIGZvY3VzCisgICAgICAgIG1vdmUgdG8gbmVpZ2hib3Igbm9kZXMg
d2hlbiB0aGUgY2FyZXQgcmVhY2hlcyB0aGUgZWRnZSBvZiB0aGUgdGV4dHMuCisgICAgICAgIFRo
aXMgcGF0Y2ggZG9lcyBub3Qgc3VwcG9ydCB5ZXQgY2FzZXMgd2hlcmUgdGhlIGZvY3VzZWQgPGlu
cHV0PgorICAgICAgICBoYXMgYSBKUyBoYW5kbGVyIGZvciB0aGUgYXJyb3cga2V5cy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MTUzCisKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisKIDIwMTAtMTAtMjAgIEx1
aXogQWdvc3RpbmkgIDxsdWl6LmFnb3N0aW5pQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQW50b25pbyBHb21lcy4KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0VkaXRvckNsaWVudFF0LmNwcAkocmV2aXNpb24gNzAxNDUpCisrKyBXZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3
IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUVdlYlBh
Z2VDbGllbnQuaCIKICNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAj
aW5jbHVkZSAiV2luZG93c0tleWJvYXJkQ29kZXMuaCIKICNpbmNsdWRlICJxd2VicGFnZS5oIgog
I2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIKQEAgLTM2MCw5ICszNjEsMjEgQEAgdm9pZCBFZGl0b3JD
bGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVudAogCiAgICAgLy8gRklYTUU6IHJlZmFjdG9yIGFs
bCBvZiB0aGlzIHRvIHVzZSBBY3Rpb25zIG9yIHNvbWV0aGluZyBsaWtlIHRoZW0KICAgICBpZiAo
c3RhcnQtPmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgYm9vbCBkb1NwYXRpYWxOYXZp
Z2F0aW9uID0gZmFsc2U7CisgICAgICAgIGlmIChmcmFtZS0+c2V0dGluZ3MoKSAmJiBmcmFtZS0+
c2V0dGluZ3MoKS0+aXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAg
aWYgKCFrZXZlbnQtPm1vZGlmaWVycygpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChrZXZl
bnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBWS19M
RUZUOgorICAgICAgICAgICAgICAgIGNhc2UgVktfUklHSFQ6CisgICAgICAgICAgICAgICAgY2Fz
ZSBWS19VUDoKKyAgICAgICAgICAgICAgICBjYXNlIFZLX0RPV046CisgICAgICAgICAgICAgICAg
ICAgIGRvU3BhdGlhbE5hdmlnYXRpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQogI2lmbmRlZiBRVF9OT19TSE9SVENVVAogICAgICAgICBRV2Vi
UGFnZTo6V2ViQWN0aW9uIGFjdGlvbiA9IFFXZWJQYWdlUHJpdmF0ZTo6ZWRpdG9yQWN0aW9uRm9y
S2V5RXZlbnQoa2V2ZW50LT5xdEV2ZW50KCkpOwotICAgICAgICBpZiAoYWN0aW9uICE9IFFXZWJQ
YWdlOjpOb1dlYkFjdGlvbikgeworICAgICAgICBpZiAoYWN0aW9uICE9IFFXZWJQYWdlOjpOb1dl
YkFjdGlvbiAmJiAhZG9TcGF0aWFsTmF2aWdhdGlvbikgewogICAgICAgICAgICAgY29uc3QgY2hh
ciogY21kID0gUVdlYlBhZ2VQcml2YXRlOjplZGl0b3JDb21tYW5kRm9yV2ViQWN0aW9ucyhhY3Rp
b24pOwogICAgICAgICAgICAgLy8gV2ViS2l0IGRvZXNuJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRp
b24gYWJvdXQgbW9kZSB0byBkZWNpZGUgaG93IGNvbW1hbmRzIHRoYXQganVzdCBpbnNlcnQgdGV4
dCBpZiBleGVjdXRlZCB2aWEgRWRpdG9yIHNob3VsZCBiZSB0cmVhdGVkLAogICAgICAgICAgICAg
Ly8gc28gd2UgbGVhdmUgaXQgdXBvbiBXZWJDb3JlIHRvIGVpdGhlciBoYW5kbGUgdGhlbSBpbW1l
ZGlhdGVseSAoZS5nLiBUYWIgdGhhdCBjaGFuZ2VzIGZvY3VzKSBvciBsZXQgYSBrZXlwcmVzcyBl
dmVudCBiZSBnZW5lcmF0ZWQKQEAgLTM4NiwyNiArMzk5LDI2IEBAIHZvaWQgRWRpdG9yQ2xpZW50
UXQ6OmhhbmRsZUtleWJvYXJkRXZlbnQKICAgICAgICAgY2FzZSBWS19MRUZUOgogICAgICAgICAg
ICAgaWYgKGtldmVudC0+c2hpZnRLZXkoKSkKICAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9y
KCktPmNvbW1hbmQoIk1vdmVMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uIikuZXhlY3V0ZSgpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgi
TW92ZUxlZnQiKS5leGVjdXRlKCk7CisgICAgICAgICAgICBlbHNlIGlmICghZnJhbWUtPmVkaXRv
cigpLT5jb21tYW5kKCJNb3ZlTGVmdCIpLmV4ZWN1dGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWS19SSUdIVDoKICAgICAgICAg
ICAgIGlmIChrZXZlbnQtPnNoaWZ0S2V5KCkpCiAgICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRv
cigpLT5jb21tYW5kKCJNb3ZlUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24iKS5leGVjdXRlKCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5k
KCJNb3ZlUmlnaHQiKS5leGVjdXRlKCk7CisgICAgICAgICAgICBlbHNlIGlmICghZnJhbWUtPmVk
aXRvcigpLT5jb21tYW5kKCJNb3ZlUmlnaHQiKS5leGVjdXRlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVktfVVA6CiAgICAgICAg
ICAgICBpZiAoa2V2ZW50LT5zaGlmdEtleSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0
b3IoKS0+Y29tbWFuZCgiTW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIikuZXhlY3V0ZSgpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgi
TW92ZVVwIikuZXhlY3V0ZSgpOworICAgICAgICAgICAgZWxzZSBpZiAoIWZyYW1lLT5lZGl0b3Io
KS0+Y29tbWFuZCgiTW92ZVVwIikuZXhlY3V0ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZLX0RPV046CiAgICAgICAgICAgICBp
ZiAoa2V2ZW50LT5zaGlmdEtleSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+
Y29tbWFuZCgiTW92ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iKS5leGVjdXRlKCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNb3Zl
RG93biIpLmV4ZWN1dGUoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFmcmFtZS0+ZWRpdG9yKCkt
PmNvbW1hbmQoIk1vdmVEb3duIikuZXhlY3V0ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZLX1BSSU9SOiAvLyBQYWdlVXAKICAg
ICAgICAgICAgIGlmIChrZXZlbnQtPnNoaWZ0S2V5KCkpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MDE0
NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIz
IEBACisyMDEwLTEwLTIwICBDaGFuZyBTaHUgIDxjaGFuZy5zaHVAbm9raWEuY29tPgorCisgICAg
ICAgIFBhdGNoIGJ5IENoYW5nIFNodSA8Y2hhbmcuc2h1QG5va2lhLmNvbT4gYW5kCisgICAgICAg
IEFudG9uaW8gR29tZXMgPHRvbmlraXRvb0B3ZWJraXQub3JnPiBvbiAyMDA5LTA0LTA2LgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gTWFrZXMg
PGlucHV0IHR5cGU9dGV4dD4gYW5kIDx0ZXh0YXJlYT4gZnVuY3Rpb25hbCB3aXRoCisgICAgICAg
IFNwYXRpYWwgTmF2aWdhdGlvbiBlbmFibGVkLiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGZvY3Vz
IGNhbm5vdAorICAgICAgICBtb3ZlIGF3YXkgZnJvbSBpbnB1dCBib3ggb25jZSBpdCBpcyBpbi4g
VGhpcyBwYXRjaCBhbGxvd3MgZm9jdXMKKyAgICAgICAgbW92ZSB0byBuZWlnaGJvciBub2RlcyB3
aGVuIHRoZSBjYXJldCByZWFjaGVzIHRoZSBlZGdlIG9mIHRoZSB0ZXh0cy4KKyAgICAgICAgVGhp
cyBwYXRjaCBkb2VzIG5vdCBzdXBwb3J0IHlldCBjYXNlcyB3aGVyZSB0aGUgZm9jdXNlZCA8aW5w
dXQ+CisgICAgICAgIGhhcyBhIEpTIGhhbmRsZXIgZm9yIHRoZSBhcnJvdyBrZXlzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcxNTMKKworICAgICAg
ICAqIGZhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlucHV0LWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYt
aW5wdXQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0
aW9uL3NuYXYtdGV4dGFyZWEtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2
ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi10ZXh0YXJlYS5odG1sOiBBZGRlZC4KKwogMjAx
MC0xMC0yMCAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQgcmViYXNlbGluZSBvZiBTTCBwaXhlbCB0ZXN0cyBhZnRlciBjb21taXQgcjY5OTI4LgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaW5w
dXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Nw
YXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlucHV0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlucHV0LWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMiBAQAorVGhpcyB0ZXN0IGVuc3Vy
ZXMgdGhlIGNvcnJlY3RuZXNzIG9mIFNwYXRpYWwgTmF2aWdhdGlvbiAoU05hdikgYWxnb3JpdGht
IG92ZXIgaW5wdXQgYm94LgorKiBQcmUtY29uZGl0aW9uczoKKzEpIERSVCBzdXBwb3J0IGZvciBT
TmF2IGVuYWJsZS9kaXNhYmxlLgorKiBOYXZpZ2F0aW9uIHN0ZXBzOgorMSkgTG9hZHMgdGhpcyBw
YWdlLCBmb2N1cyBnb2VzIHRvICJzdGFydCIgYXV0b21hdGljYWxseS4KKzIpIEZvY3VzIG1vdmVz
IGF3YXkgZnJvbSBpbnB1dCBib3ggaW4gNCBkaWZmZXJlbnQgZGlyZWN0aW9ucyB0byBuZWlnaGJv
ciBub2RlcyBhbmQgYmFjay4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKzIJCis0
CQk2Cis4CQorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRl
KCJpZCIpIGlzICI4IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0
cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVt
ZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3Rp
dmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9j
dW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjYiCitQQVNTIGdGb2N1
c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0Igor
UEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlz
ICI0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJp
ZCIpIGlzICJzdGFydCIKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1u
YXZpZ2F0aW9uL3NuYXYtaW5wdXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pbnB1dC5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaW5wdXQu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPCFET0NUWVBFIGh0bWw+CisgIDxo
ZWFkPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc3BhdGlhbC1uYXZpZ2F0aW9u
LXV0aWxzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisgIDwvaGVhZD4KKyAgPGJvZHkgaWQ9InNvbWUtY29u
dGVudCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorICAgIDxwIGlkPSJk
ZXNjcmlwdGlvbiI+PC9wPgorICAgIDx0YWJsZSBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsgd2lk
dGg6IDEwMCU7IG1hcmdpbi1sZWZ0OiBhdXRvOyBtYXJnaW4tcmlnaHQ6IGF1dG87IiBib3JkZXI9
IjEiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMSI+CisgICAgICA8dGJvZHk+CisgICAg
ICAgIDx0cj4KKyAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQt
YWxpZ246IGNlbnRlcjsiPjwvdGQ+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGln
bjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48YSBpZD0iMiIgaHJlZj0iYSI+MjwvYT48L3Rk
PgorICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1hbGlnbjog
Y2VudGVyOyI+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0
ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGEgaWQ9
IjQiIGhyZWY9ImEiPjQ8L2E+PC90ZD4KKyAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFs
aWduOiB0b3A7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxpbnB1dCBpZD0ic3RhcnQiIHR5cGU9InRl
eHQiIHZhbHVlPSJ0ZXh0Ij48L3RkPgorICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxp
Z246IHRvcDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGEgaWQ9IjYiIGhyZWY9ImEiPjY8L2E+PC90
ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBzdHlsZT0idmVy
dGljYWwtYWxpZ246IHRvcDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PC90ZD4KKyAgICAgICAgICA8
dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxhIGlk
PSI4IiBocmVmPSJhIj44PC9hPjwvdGQ+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1h
bGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3RkPgorICAgICAgICA8L3RyPgorICAg
ICAgPC90Ym9keT4KKyAgICA8L3RhYmxlPgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgor
ICAgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+CisgICAgZGVzY3JpcHRp
b24oJ1RoaXMgdGVzdCBlbnN1cmVzIHRoZSBjb3JyZWN0bmVzcyBvZiBTcGF0aWFsIE5hdmlnYXRp
b24gKFNOYXYpIGFsZ29yaXRobSBvdmVyIGlucHV0IGJveC48YnI+XAorICAgICAgICAgICAgICAg
ICogUHJlLWNvbmRpdGlvbnM6PGJyPlwKKyAgICAgICAgICAgICAgICAxKSBEUlQgc3VwcG9ydCBm
b3IgU05hdiBlbmFibGUvZGlzYWJsZS48YnI+XAorICAgICAgICAgICAgICAgICogTmF2aWdhdGlv
biBzdGVwczo8YnI+XAorICAgICAgICAgICAgICAgIDEpIExvYWRzIHRoaXMgcGFnZSwgZm9jdXMg
Z29lcyB0byAic3RhcnQiIGF1dG9tYXRpY2FsbHkuPGJyPlwKKyAgICAgICAgICAgICAgICAyKSBG
b2N1cyBtb3ZlcyBhd2F5IGZyb20gaW5wdXQgYm94IGluIDQgZGlmZmVyZW50IGRpcmVjdGlvbnMg
dG8gbmVpZ2hib3Igbm9kZXMgYW5kIGJhY2suPGJyPicpOworCisgICAgdmFyIHJlc3VsdE1hcCA9
IFsKKyAgICAgIFsiRG93biIsICI4Il0sCisgICAgICBbIlVwIiwgInN0YXJ0Il0sCisgICAgICBb
IlVwIiwgIjIiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAorICAgICAgWyJSaWdodCIsICI2
Il0sCisgICAgICBbIkxlZnQiLCAic3RhcnQiXSwKKyAgICAgIFsiTGVmdCIsICI0Il0sCisgICAg
ICBbIlJpZ2h0IiwgInN0YXJ0Il0sCisgICAgICBbIkRPTkUiLCAiRE9ORSJdCisgICAgXTsKKwor
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFNw
YXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCh0cnVlKTsKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0VGFiVG9MaW5rc1ByZWZlcmVuY2VLZXkiLCAxKTsK
KyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICB7CisgICAgICAvLyBzdGFydGluZyB0aGUgdGVzdCBp
dHNlbGY6IGdldCB0byBhIGtub3duIHBsYWNlLgorICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInN0YXJ0IikuZm9jdXMoKTsKKworICAgICAgaW5pdFRlc3QocmVzdWx0TWFwLCB0ZXN0Q29t
cGxldGVkKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0Q29tcGxldGVkKCkKKyAgICB7Cisg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorCisgICAgd2luZG93Lm9ubG9hZCA9IHJ1
blRlc3Q7CisKKyAgICA8L3NjcmlwdD4KKyAgPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtdGV4dGFyZWEtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2
aWdhdGlvbi9zbmF2LXRleHRhcmVhLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LXRleHRhcmVhLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMiBAQAorVGhpcyB0ZXN0IGVuc3VyZXMg
dGhlIGNvcnJlY3RuZXNzIG9mIFNwYXRpYWwgTmF2aWdhdGlvbiAoU05hdikgYWxnb3JpdGhtIG92
ZXIgdGV4dGFyZWEuCisqIFByZS1jb25kaXRpb25zOgorMSkgRFJUIHN1cHBvcnQgZm9yIFNOYXYg
ZW5hYmxlL2Rpc2FibGUuCisqIE5hdmlnYXRpb24gc3RlcHM6CisxKSBMb2FkcyB0aGlzIHBhZ2Us
IGZvY3VzIGdvZXMgdG8gInN0YXJ0IiBhdXRvbWF0aWNhbGx5LgorMikgRm9jdXMgbW92ZXMgYXdh
eSBmcm9tIHRleHRhcmVhIGluIDQgZGlmZmVyZW50IGRpcmVjdGlvbnMgdG8gbmVpZ2hib3Igbm9k
ZXMgYW5kIGJhY2suCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisyCQorNAkJNgor
OAkKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQi
KSBpcyAiOCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0
ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5n
ZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxl
bWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50
LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICI2IgorUEFTUyBnRm9jdXNlZERv
Y3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1Mg
Z0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiNCIK
K1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBp
cyAic3RhcnQiCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdh
dGlvbi9zbmF2LXRleHRhcmVhLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtdGV4dGFyZWEuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LXRleHRh
cmVhLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKzwhRE9DVFlQRSBodG1sPgor
ICA8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NwYXRpYWwtbmF2aWdh
dGlvbi11dGlscy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2hlYWQ+CisgIDxib2R5IGlkPSJzb21l
LWNvbnRlbnQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKyAgICA8cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4KKyAgICA8dGFibGUgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7
IHdpZHRoOiAxMDAlOyBtYXJnaW4tbGVmdDogYXV0bzsgbWFyZ2luLXJpZ2h0OiBhdXRvOyIgYm9y
ZGVyPSIxIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjEiPgorICAgICAgPHRib2R5Pgor
ICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0
ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3RkPgorICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwt
YWxpZ246IHRvcDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PGEgaWQ9IjIiIGhyZWY9ImEiPjI8L2E+
PC90ZD4KKyAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQtYWxp
Z246IGNlbnRlcjsiPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAg
ICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxh
IGlkPSI0IiBocmVmPSJhIj40PC9hPjwvdGQ+CisgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNh
bC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48dGV4dGFyZWEgaWQ9InN0YXJ0IiBy
b3dzPSI1IiBjb2xzPSI1Ij5saW5lMSBsaW5lMiBsaW5lMzwvdGV4dGFyZWE+CisgICAgICAgICAg
PHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48YSBp
ZD0iNiIgaHJlZj0iYSI+NjwvYT48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+Cisg
ICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWFsaWduOiBjZW50
ZXI7Ij48L3RkPgorICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgdGV4
dC1hbGlnbjogY2VudGVyOyI+PGEgaWQ9IjgiIGhyZWY9ImEiPjg8L2E+PC90ZD4KKyAgICAgICAg
ICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQtYWxpZ246IGNlbnRlcjsiPjwv
dGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3Rib2R5PgorICAgIDwvdGFibGU+CisgICAgPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+CisgICAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZh
c2NyaXB0Ij4KKyAgICBkZXNjcmlwdGlvbignVGhpcyB0ZXN0IGVuc3VyZXMgdGhlIGNvcnJlY3Ru
ZXNzIG9mIFNwYXRpYWwgTmF2aWdhdGlvbiAoU05hdikgYWxnb3JpdGhtIG92ZXIgdGV4dGFyZWEu
PGJyPlwKKyAgICAgICAgICAgICAgICAqIFByZS1jb25kaXRpb25zOjxicj5cCisgICAgICAgICAg
ICAgICAgMSkgRFJUIHN1cHBvcnQgZm9yIFNOYXYgZW5hYmxlL2Rpc2FibGUuPGJyPlwKKyAgICAg
ICAgICAgICAgICAqIE5hdmlnYXRpb24gc3RlcHM6PGJyPlwKKyAgICAgICAgICAgICAgICAxKSBM
b2FkcyB0aGlzIHBhZ2UsIGZvY3VzIGdvZXMgdG8gInN0YXJ0IiBhdXRvbWF0aWNhbGx5Ljxicj5c
CisgICAgICAgICAgICAgICAgMikgRm9jdXMgbW92ZXMgYXdheSBmcm9tIHRleHRhcmVhIGluIDQg
ZGlmZmVyZW50IGRpcmVjdGlvbnMgdG8gbmVpZ2hib3Igbm9kZXMgYW5kIGJhY2suPGJyPicpOwor
CisgICAgdmFyIHJlc3VsdE1hcCA9IFsKKyAgICAgIFsiRG93biIsICI4Il0sCisgICAgICBbIlVw
IiwgInN0YXJ0Il0sCisgICAgICBbIlVwIiwgIjIiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJd
LAorICAgICAgWyJSaWdodCIsICI2Il0sCisgICAgICBbIkxlZnQiLCAic3RhcnQiXSwKKyAgICAg
IFsiTGVmdCIsICI0Il0sCisgICAgICBbIlJpZ2h0IiwgInN0YXJ0Il0sCisgICAgICBbIkRPTkUi
LCAiRE9ORSJdCisgICAgXTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCh0cnVlKTsKKyAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0VGFiVG9MaW5r
c1ByZWZlcmVuY2VLZXkiLCAxKTsKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICB7CisgICAgICAv
LyBzdGFydGluZyB0aGUgdGVzdCBpdHNlbGY6IGdldCB0byBhIGtub3duIHBsYWNlLgorICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJ0IikuZm9jdXMoKTsKKworICAgICAgaW5pdFRl
c3QocmVzdWx0TWFwLCB0ZXN0Q29tcGxldGVkKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0
Q29tcGxldGVkKCkKKyAgICB7CisgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorCisg
ICAgd2luZG93Lm9ubG9hZCA9IHJ1blRlc3Q7CisKKyAgICA8L3NjcmlwdD4KKyAgPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>