<?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>38696</bug_id>
          
          <creation_ts>2010-05-06 14:49:32 -0700</creation_ts>
          <short_desc>WebKit moves focus to where selection is instead of moving selection to the focused element like other browsers</short_desc>
          <delta_ts>2019-11-26 02:42:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction</keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>61310</blocked>
    
    <blocked>112854</blocked>
    
    <blocked>56271</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Erik Arvidsson">arv</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>arv</cc>
    
    <cc>cshu</cc>
    
    <cc>cuentanumerouno</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gregsimon</cc>
    
    <cc>harrison</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>leviw</cc>
    
    <cc>leviw</cc>
    
    <cc>matthewjamesengott</cc>
    
    <cc>mikelawther</cc>
    
    <cc>rniwa</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>221979</commentid>
    <comment_count>0</comment_count>
      <attachid>55301</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2010-05-06 14:49:32 -0700</bug_when>
    <thetext>Created attachment 55301
Test case

Given an element that has contentEditable. Focus it and select some text. Now click on something else that does not start a new selection (Node::canStartSelection is false). The selection is kept which is fine, however, now press a key on your keyboard. The contentEditable element steals the focus and modifies its content.

The same problem exists for input and textareas but there is a workaround in the code to always collapse their selection in FocusController::clearSelectionIfNeeded.

See test case for clearer repro steps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222554</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-07 12:32:00 -0700</bug_when>
    <thetext>I&apos;m not sure if I&apos;d expect the focus to remain in the contenteditable div after clicking a button, or to move out. Apparently, WebCore also isn&apos;t sure about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228104</commentid>
    <comment_count>2</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-05-19 17:37:10 -0700</bug_when>
    <thetext>The ideal behavior for web devs would be to keep the selection, but move the focus. This lets you write code that deals with the selection in an editable area onclick of a button without doing workarounds.

That&apos;s tricky to make work as there are clearly places in WebCore where we assume that the selection is in the focused node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228105</commentid>
    <comment_count>3</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-05-19 17:40:23 -0700</bug_when>
    <thetext>Another approach to make web development sane and keep the invariant that the selection is inside the focused node, would be to clear the selection, but store it per editable element and restore it when the element regains focus.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228108</commentid>
    <comment_count>4</comment_count>
      <attachid>56540</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-05-19 17:46:20 -0700</bug_when>
    <thetext>Created attachment 56540
test case with keydown

I saw this recently too.  It&apos;s also a problem that it allows modification to the content editable field without firing the keydown event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228130</commentid>
    <comment_count>5</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-05-19 18:26:59 -0700</bug_when>
    <thetext>Also, see bug 38548 for related discussion around this behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228539</commentid>
    <comment_count>6</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-05-20 13:57:27 -0700</bug_when>
    <thetext>Gecko has similar bugs: https://bugzilla.mozilla.org/show_bug.cgi?id=567213</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368683</commentid>
    <comment_count>7</comment_count>
      <attachid>86009</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-16 17:38:32 -0700</bug_when>
    <thetext>Created attachment 86009
Work in progress

Firefox has fixed this (I&apos;ve verified with Firefox 4) so we probably should too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371248</commentid>
    <comment_count>8</comment_count>
      <attachid>86432</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-22 00:16:11 -0700</bug_when>
    <thetext>Created attachment 86432
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371389</commentid>
    <comment_count>9</comment_count>
      <attachid>86432</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-22 08:00:00 -0700</bug_when>
    <thetext>Comment on attachment 86432
Patch

Removing the r? as there&apos;s still some things to be done here... mainly unifying the expression in Editor.cpp with the code in setFocusedNodeIfNeeded to use some function like focusableRoot.

This change incorporates a fix for 56271, as they both have to do with selection and focus being bound together differently than in other browsers, and both result in many rebaselines. This change, however, is risky. Sites that do a lot of fancy editing and selection that may have WebKit-specific paths could break. Ideally I&apos;d like to see the final version of this patch put into a Chrome Dev-channel release to get some widespread exposure and identify possible site breakage.

Thoughts and comments are appreciated, and keep in mind this doesn&apos;t include the couple hundred rebaselines due to changes in focus ring rects and editing delegates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371794</commentid>
    <comment_count>10</comment_count>
      <attachid>86538</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-22 16:28:27 -0700</bug_when>
    <thetext>Created attachment 86538
Patch

There are over 600 layout tests with either editing delegate changes, focus ring rect changes, or both. We could fix the focus ring pixel changes by explicitly focusing the applicable nodes in the tests, though it&apos;s a large change (over 400 tests appear to have this issue).

Two tests will become totally invalid if we make this change, as both expect an onFocus handler to fire in a selection or drag-and-drop. These are
- fast/events/content-changed-during-drop.html
- fast/events/5056619.html

Also, fast/events/inputText-never-fired-on-keydown-cancel.html has part of the test explicitly checking to see if focus follows selection. I&apos;ve removed that part of the test in the patch already.

I believe this is a change we want to make. Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371800</commentid>
    <comment_count>11</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-22 16:30:43 -0700</bug_when>
    <thetext>Listing this as blocking 56271 since the&apos;re related and I believe they should be fixed together given the rebaselining effort each will require.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371819</commentid>
    <comment_count>12</comment_count>
      <attachid>86538</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-22 16:53:44 -0700</bug_when>
    <thetext>Comment on attachment 86538
Patch

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

I&apos;m supportive of this change but I&apos;d like to hear opinions of other contributors.

&gt; LayoutTests/platform/mac/editing/input/insert-delete-smp-symbol.html:15
&gt; -            textInputController.insertText(&quot;ð&quot;);
&gt; +            textInputController.insertText(&quot;Æ&quot;);

Why do we have this change?

&gt; LayoutTests/fast/events/script-tests/inputText-never-fired-on-keydown-cancel.js:-60
&gt; -window.getSelection().setBaseAndExtent(targetEditable, 0, targetEditable, 0);
&gt; -test(targetEditable);
&gt; -

Are you sure removing this test is the correct fix?  Isn&apos;t that the author forgot to focus targetEditable?

&gt; LayoutTests/editing/selection/focus-doesnt-follow-selection.html:2
&gt; +

I don&apos;t think we need this blank line.

&gt; LayoutTests/editing/selection/focus-doesnt-follow-selection.html:14
&gt; +test.addEventListener(&quot;focus&quot;, function() {
&gt; +    test.innerText = &quot;FAIL&quot;;
&gt; +}, false);

It seems like it&apos;s simpler to put this in the onfocus attribute of the div.

&gt; LayoutTests/editing/editing.js:877
&gt; +    if (document.getElementsByTagName(&quot;body&quot;)[0].contentEditable)

Why can&apos;t we do document.body.contentEditable?

&gt; LayoutTests/editing/editing.js:901
&gt; +    if (document.getElementsByTagName(&quot;body&quot;)[0].contentEditable)

Ditto.

&gt; LayoutTests/editing/input/only-focused-field-receives-input.html:2
&gt; +

Same comment about the blank line.

&gt; LayoutTests/editing/input/only-focused-field-receives-input.html:11
&gt; +        var ev = document.createEvent(&quot;KeyboardEvent&quot;);

Let&apos;s use &quot;event&quot; instead of &quot;ev&quot;.

&gt; LayoutTests/editing/input/only-focused-field-receives-input.html:19
&gt; +function pressKey( key ) {
&gt; +    if (window.KeyEvent) {
&gt; +        var ev = document.createEvent(&quot;KeyboardEvent&quot;);
&gt; +        ev.initKeyEvent(&quot;keypress&quot;, true, true, window,  0,0,0,0, 0, key.charCodeAt(0));
&gt; +        document.body.dispatchEvent(ev);
&gt; +    }
&gt; +    else {
&gt; +        var ev = document.createEvent(&quot;TextEvent&quot;);
&gt; +        ev.initTextEvent(&apos;textInput&apos;, true, true, null, key.charAt(0));
&gt; +        document.body.dispatchEvent(ev);
&gt; +    }

Isn&apos;t it better to use eventSender here?

&gt; LayoutTests/editing/input/only-focused-field-receives-input.html:34
&gt; +    eventSender.mouseDown();
&gt; +    eventSender.mouseUp();

Maybe add leapForward between mouseDown and mouseUp?

&gt; LayoutTests/editing/style/highlight-insert-paragraph.html:17
&gt; -        document.body.dispatchEvent(ev);
&gt; +        document.getElementById(&quot;test&quot;).dispatchEvent(ev);

Why do we need this change?

&gt; LayoutTests/editing/style/highlight-insert-paragraph.html:22
&gt; -        document.body.dispatchEvent(ev);
&gt; +        document.getElementById(&quot;test&quot;).dispatchEvent(ev);

Ditto.

&gt; Source/WebCore/editing/Editor.cpp:188
&gt; +static Node* focusableRoot(Node* node)
&gt; +{
&gt; +    if (node-&gt;supportsFocus())

I&apos;m surprised that such a function didn&apos;t already exist.

&gt; Source/WebCore/editing/Editor.cpp:211
&gt; +    if (selectionStart &amp;&amp; selectionStart != targetNode
&gt; +        &amp;&amp; (!focusableRoot(targetNode) || !focusableRoot(targetNode)-&gt;containsIncludingShadowDOM(focusableRoot(selectionStart))))
&gt; +        return false;

It&apos;s not great that we call focusableRoot twice here.  Can&apos;t we have a nested if with just one call to focusableRoot?  Also, can targetNode be null when selectionStart is not null?

&gt; Source/WebCore/ChangeLog:16
&gt; +
&gt; +

One extra blank line here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371848</commentid>
    <comment_count>13</comment_count>
      <attachid>86538</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-22 17:12:32 -0700</bug_when>
    <thetext>Comment on attachment 86538
Patch

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

Thanks for the thorough review as usual! Do you have any thoughts about whether you think this change is fundamentally sound?

&gt;&gt; LayoutTests/platform/mac/editing/input/insert-delete-smp-symbol.html:15
&gt;&gt; +            textInputController.insertText(&quot;Æ&quot;);
&gt; 
&gt; Why do we have this change?

This seems to be an encoding issue from my editor. I&apos;ll fix it.

&gt;&gt; LayoutTests/fast/events/script-tests/inputText-never-fired-on-keydown-cancel.js:-60
&gt;&gt; -
&gt; 
&gt; Are you sure removing this test is the correct fix?  Isn&apos;t that the author forgot to focus targetEditable?

Except in that case it&apos;d just be a rehashing of the previous test. The setBaseAndExtent would become meaningless.

&gt;&gt; LayoutTests/editing/selection/focus-doesnt-follow-selection.html:2
&gt;&gt; +
&gt; 
&gt; I don&apos;t think we need this blank line.

You never *need* a blank line ;)

&gt;&gt; LayoutTests/editing/selection/focus-doesnt-follow-selection.html:14
&gt;&gt; +}, false);
&gt; 
&gt; It seems like it&apos;s simpler to put this in the onfocus attribute of the div.

Fair enough.

&gt;&gt; LayoutTests/editing/editing.js:877
&gt;&gt; +    if (document.getElementsByTagName(&quot;body&quot;)[0].contentEditable)
&gt; 
&gt; Why can&apos;t we do document.body.contentEditable?

Good call.

&gt;&gt; LayoutTests/editing/input/only-focused-field-receives-input.html:19
&gt;&gt; +    }
&gt; 
&gt; Isn&apos;t it better to use eventSender here?

We could, yes.

&gt;&gt; LayoutTests/editing/style/highlight-insert-paragraph.html:17
&gt;&gt; +        document.getElementById(&quot;test&quot;).dispatchEvent(ev);
&gt; 
&gt; Why do we need this change?

This change has the effect of not dispatching text events to the selection that aren&apos;t destined for the focused container. This matches other browsers.

&gt;&gt; LayoutTests/editing/style/highlight-insert-paragraph.html:22
&gt;&gt; +        document.getElementById(&quot;test&quot;).dispatchEvent(ev);
&gt; 
&gt; Ditto.

See above.

&gt;&gt; Source/WebCore/editing/Editor.cpp:188
&gt;&gt; +    if (node-&gt;supportsFocus())
&gt; 
&gt; I&apos;m surprised that such a function didn&apos;t already exist.

As far as I can tell, the only similar functionality is in SelectionController::setFocusedNodeIfNeeded. I hoped to be able to unify their implementations, but setFocusedNodeIfNeeded explicitly avoids Frames, which we explicitly *don&apos;t* want to do here.

&gt;&gt; Source/WebCore/editing/Editor.cpp:211
&gt;&gt; +        return false;
&gt; 
&gt; It&apos;s not great that we call focusableRoot twice here.  Can&apos;t we have a nested if with just one call to focusableRoot?  Also, can targetNode be null when selectionStart is not null?

This could be nested to avoid this, that&apos;s a valid performance point.

As for targetNode being null, I believe that&apos;s an invalid case, but I&apos;m not confident enough to say for sure. I did quite a bit of testing to get this condition correct and never ran into such a case. I&apos;d be more than happy to add an assert.

&gt;&gt; Source/WebCore/ChangeLog:16
&gt;&gt; +
&gt; 
&gt; One extra blank line here.

Ryosuke Niwa, destroyer of whitespace! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371861</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-22 17:29:18 -0700</bug_when>
    <thetext>This is just a guess. I don’t have time right at the moment to investigate further.

The idea that only something focused can have a selection is probably something that came from the Mac UI.

I am not certain, but I suspect that the heart of this is the difference in approach to focus on Mac vs. other platforms. It’s common to have the web reflect the Windows approach. And platforms other than Mac often simply echo it.

Those of us making WebKit work were all working for Apple and we may have changed WebKit’s semantics to match the Mac.

So the most likely trouble spots for this change will be in uses outside of web page context. It seems likely this will change behavior of some Dashboard widgets or Mac OS X applications. They may even need a way to request the old behavior.

For web browsers themselves, it’s probably OK to reflect this Windows style rather than matching the rest of Mac OS X.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371871</commentid>
    <comment_count>15</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-22 17:45:54 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; So the most likely trouble spots for this change will be in uses outside of web page context. It seems likely this will change behavior of some Dashboard widgets or Mac OS X applications. They may even need a way to request the old behavior.

Thanks Darin! I added an option flag and two convenience functions that replicate the old behavior. I would expect the issues you&apos;re talking about coming up in external apps, you&apos;re right.

On Mac WebKit, there are only two places in WebFrame where one can explicitly set the selection. These could easily be changed to call the setSelectionAndFocus method I added if you believe that would result in the expected behavior. If that gets me the green light I want to move forward with landing this and getting it into dev builds of Chromium sooner than later to start ferreting out any website regressions based on the old behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371895</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-22 18:34:36 -0700</bug_when>
    <thetext>To get the “green light” we’d need to do some kind of testing. We can’t make assumptions about how applications and Dashboard widgets set the selection. They can both have large pieces written in JavaScript, and can access the DOM and JavaScript from Objective-C as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372014</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-23 00:56:12 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; So the most likely trouble spots for this change will be in uses outside of web page context. It seems likely this will change behavior of some Dashboard widgets or Mac OS X applications. They may even need a way to request the old behavior.

Is there a good way to test this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372270</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-23 11:05:21 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Is there a good way to test this?

Like all application compatibility issues there are two parts:

    1) Getting the applications.

    2) Trying out the parts of the applications that are likely to be affected.

For Dashboard widgets, there is a set included with Mac OS X. For other applications it can be challenging. Many use WebKit!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372310</commentid>
    <comment_count>19</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-23 11:55:17 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; For Dashboard widgets, there is a set included with Mac OS X. For other applications it can be challenging. Many use WebKit!

Just to clarify, do you still think keeping the behavior the same from Objective-C to stay consistent with OSX is the right path? We would, of course, still have JavaScript to contend with, which I&apos;d expect most likely to be a problem in places like Dashboard where the JavaScript was written specifically with WebKit in mind (since other browsers don&apos;t have focus follow selection).

Is this testing something Apple will do as part of its QA process or is there additional testing you want ahead of that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372315</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-23 12:01:55 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Just to clarify, do you still think keeping the behavior the same from Objective-C to stay consistent with OSX is the right path?

Differences between Objective-C bindings and JavaScript would be a last resort if we couldn’t find any other solution. If we had some sort of quirk, it would be more likely tied to the context WebKit is running in rather than the caller.

&gt; We would, of course, still have JavaScript to contend with, which I&apos;d expect most likely to be a problem in places like Dashboard where the JavaScript was written specifically with WebKit in mind (since other browsers don&apos;t have focus follow selection).

There are many Mac OS X and iOS applications that use JavaScript too, not just Dashboard widgets.

&gt; Is this testing something Apple will do as part of its QA process or is there additional testing you want ahead of that?

Apple’s QA process might include some testing of third party applications, but probably long after any code change; there’s no team I can assign this to. My department at Apple doesn’t have the resources to test all those applications and Dashboard widgets; normally we use technical strategies that minimize the need for that kind of extensive testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393768</commentid>
    <comment_count>21</comment_count>
      <attachid>91338</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-04-27 13:45:51 -0700</bug_when>
    <thetext>Created attachment 91338
Patch with updated expectations

(In reply to comment #20)
&gt; Apple’s QA process might include some testing of third party applications, but probably long after any code change; there’s no team I can assign this to. My department at Apple doesn’t have the resources to test all those applications and Dashboard widgets; normally we use technical strategies that minimize the need for that kind of extensive testing.

I did the following testing with this change:

1) Ran Dashboard with this change, loaded every Widget that ships with Snow Leopard, and manually attempted to exhaust the functionality of each.

2) Ran the BrowserScope RTE suite (http://www.browserscope.org/richtext2/test) and validated we didn&apos;t regress.

3) Validated that forms that automatically set focus while you fill them out still work properly (tested Amazon, Yahoo, Google Checkout, and PayPal payment forms).

4) Validated that Rich Text Editors continue to work properly (TinyMCE, Aloha-Editor).

Throughout all this testing, I ran into no issues. Once again, for the web ideally we&apos;d get this change into a Chrome beta to ferret out issues on the Web.

This doesn&apos;t address concerns about Mac Apps with embedded WebViews. If this isn&apos;t something you can QA, we could make this an editing behavior, but I don&apos;t think that would be a clean solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393788</commentid>
    <comment_count>22</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-04-27 14:02:12 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Created an attachment (id=91338) [details]
&gt; Patch with updated expectations

TYI: This patch includes Mac test expectation changes and is nearly 8 megs. The code change is present in the previous patch (86538) has the code change in a format that&apos;s easier to look at, but the point of contention here is mostly about the behavior itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393802</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-27 14:10:08 -0700</bug_when>
    <thetext>Attachment 91338 did not build on chromium:
Build output: http://queues.webkit.org/results/8519057</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393909</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-27 15:56:35 -0700</bug_when>
    <thetext>Attachment 91338 did not build on chromium:
Build output: http://queues.webkit.org/results/8511500</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393966</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-27 16:40:36 -0700</bug_when>
    <thetext>Attachment 91338 did not build on chromium:
Build output: http://queues.webkit.org/results/8517129</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450211</commentid>
    <comment_count>26</comment_count>
    <who name="Mike Lawther">mikelawther</who>
    <bug_when>2011-08-11 18:27:52 -0700</bug_when>
    <thetext>*** Bug 65663 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475674</commentid>
    <comment_count>27</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-09-29 14:23:32 -0700</bug_when>
    <thetext>It is impossible to open the patch in the review tool.  Please upload a smaller patch.  Split out the test change from the code changes if you have to.  r-.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475675</commentid>
    <comment_count>28</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-09-29 14:25:42 -0700</bug_when>
    <thetext>I&apos;m happy to work with you to get this reviewed.  I just learned from your peer review that this had been stalled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475682</commentid>
    <comment_count>29</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-09-29 14:39:05 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; I&apos;m happy to work with you to get this reviewed.  I just learned from your peer review that this had been stalled.

Awesome :) The tricky thing is preventing regressions for Mac apps, I&apos;m not sure how we can ensure coverage there. Let&apos;s discuss this next week (I&apos;m heads down on subpixel and perf for now).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961784</commentid>
    <comment_count>30</comment_count>
    <who name="">cuentanumerouno</who>
    <bug_when>2013-12-20 01:29:16 -0800</bug_when>
    <thetext>Is this the same bug?
(If the focus happened AFTER the transition ends, the field wouldn&apos;t be lost as in this example) 

http://jsfiddle.net/dNk9v/ 

(Navigating with the TAB key should NOT break the transition properly working when clicking the tabs - legend tags)

In this example, the form inside a container with overflow:hidden is MOVED somehow to display the focused field, but such motion is NOT reflected in ANY CSS value, so it&apos;s impossible to control/prevent the transition to break.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>55301</attachid>
            <date>2010-05-06 14:49:32 -0700</date>
            <delta_ts>2010-05-06 14:49:32 -0700</delta_ts>
            <desc>Test case</desc>
            <filename>content-editable-focus-issue.html</filename>
            <type>text/html</type>
            <size>204</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+Cgo8cCBjb250ZW50ZWRpdGFibGUgb25rZXlkb3duPSJmYWlsKCkiPjEu
IFNlbGVjdCBtZTwvcD4KCjxidXR0b24+Mi4gVGhlbiBjbGljayBtZS48L2J1dHRvbj4KCjxwPjMu
IE5vdyB0eXBlIHNvbWV0aGluZzwvcD4KCjxwPlRoZSBjb250ZW50IGVkaXRhYmxlIHBhcmFncmFw
IHNob3VsZCBub3Qgc3RlYWwgdGhlIGZvY3VzLjwvcD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>56540</attachid>
            <date>2010-05-19 17:46:20 -0700</date>
            <delta_ts>2010-05-19 17:46:20 -0700</delta_ts>
            <desc>test case with keydown</desc>
            <filename>focus-test.html</filename>
            <type>text/html</type>
            <size>343</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+Cgo8cCBjb250ZW50ZWRpdGFibGUgb25rZXlkb3duPSJldmVudC5wcmV2
ZW50RGVmYXVsdCgpOyI+MS4gU2VsZWN0IG1lPC9wPgoKPGJ1dHRvbj4yLiBUaGVuIGNsaWNrIG1l
LjwvYnV0dG9uPgoKPHA+My4gTm93IHR5cGUgc29tZXRoaW5nPC9wPgoKPHA+VGhlcmUgaXMgYSBr
ZXlkb3duIGhhbmRsZXIgb24gdGhlIGNvbnRlbnRlZGl0YWJsZSBub2RlIHRoYXQgY2FsbHMgcHJl
dmVudERlZmF1bHQoKS4KVGhlIGZpcnN0IGV2ZW50IGRvZXNuJ3QgdHJpZ2dlciB0aGUga2V5ZG93
biBoYW5kbGVyLCBtYXliZSBiZWNhdXNlIHRoZSBub2RlIGRvZXNuJ3QKaGF2ZSBmb2N1cy48L3A+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86009</attachid>
            <date>2011-03-16 17:38:32 -0700</date>
            <delta_ts>2011-03-22 00:16:08 -0700</delta_ts>
            <desc>Work in progress</desc>
            <filename>typingtounfocused.patch</filename>
            <type>text/plain</type>
            <size>826</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDgxMjY1KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNiAr
MTkwLDEzIEBACiAgICAgaWYgKGV2ZW50LT5pc0Ryb3AoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBzZWxlY3Rpb25Gb3JDb21tYW5k
KGV2ZW50KTsKKyAgICBpZiAoTm9kZSogc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQo
KS5kZXByZWNhdGVkTm9kZSgpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHNlbGVj
dGlvblN0YXJ0LT5kb2N1bWVudCgpOworICAgICAgICBpZiAoIWRvY3VtZW50LT5mb2N1c2VkTm9k
ZSgpIHx8ICFkb2N1bWVudC0+Zm9jdXNlZE5vZGUoKS0+Y29udGFpbnNJbmNsdWRpbmdTaGFkb3dE
T00oc2VsZWN0aW9uU3RhcnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwog
ICAgIGlmIChldmVudC0+aXNQYXN0ZSgpKSB7CiAgICAgICAgIGlmIChldmVudC0+cGFzdGluZ0Zy
YWdtZW50KCkpCiAgICAgICAgICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KGV2ZW50
LT5wYXN0aW5nRnJhZ21lbnQoKSwgZmFsc2UsIGV2ZW50LT5zaG91bGRTbWFydFJlcGxhY2UoKSwg
ZXZlbnQtPnNob3VsZE1hdGNoU3R5bGUoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86432</attachid>
            <date>2011-03-22 00:16:11 -0700</date>
            <delta_ts>2011-03-22 16:28:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38696-20110322001610.patch</filename>
            <type>text/plain</type>
            <size>25196</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNjQ4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDMtMjEgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVuZm9jdXNlZCBjb250ZW50ZWRpdGFibGUgZWxlbWVudCBz
dGlsbCByZWNlaXZlcyBrZXlib2FyZCBldmVudHMgYW5kIGdldHMgbW9kaWZpZWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4Njk2CisKKyAgICAgICAg
Rml4aW5nIHR3byBpc3N1ZXMgd2hlcmUgc2VsZWN0aW9uIGFuZCBmb2N1cyBpbiBXZWJLaXQgd2Fz
IGluY29uc2lzdGVudCB3aXRoIEZGWDQgYW5kIElFOToKKyAgICAgICAgLSBGb2N1cyBubyBsb25n
ZXIgd2lsbCBmb2xsb3cgc2VsZWN0aW9uIHdoZW4gc2V0IHByb2dyYW1tYXRpY2FsbHksIGJ1dCBp
bnN0ZWFkCisgICAgICAgIG5lZWRzIHRvIGJlIHNldCBleHBsaWNpdGx5LgorICAgICAgICAtIFdo
ZW4gYW4gZWRpdGFibGUgZmllbGQgaXMgbm90IGZvY3VzZWQsIGl0IHdpbGwgbm90IHJlY2VpdmUg
dGV4dCBldmVudHMgcmVnYXJkbGVzcworICAgICAgICBvZiB3aGV0aGVyIGl0IHJldGFpbnMgdGhl
IHNlbGVjdGlvbi4KKworICAgICAgICBVcGRhdGluZyBjYWxsIHNpdGVzIHdoZXJlIGZvY3VzIGlz
IGV4cGVjdGVkIHRvIGZvbGxvdyB0aGUgc2VsZWN0aW9uLgorCisKKyAgICAgICAgVGVzdHM6IGVk
aXRpbmcvaW5wdXQvb25seS1mb2N1c2VkLWZpZWxkLXJlY2VpdmVzLWlucHV0Lmh0bWwKKyAgICAg
ICAgICAgICAgIGVkaXRpbmcvc2VsZWN0aW9uL2ZvY3VzLWRvZXNudC1mb2xsb3ctc2VsZWN0aW9u
Lmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aGFuZGxlVGV4dEV2ZW50KTogRGlzY2FyZCB0ZXh0IGV2ZW50cyB0aGF0IGFyZW4n
dCBiZWluZyBkaXNwYXRjaGVkIHRvCisgICAgICAgIHRoZSBzZWxlY3Rpb24ncyBjb250YWluZXIu
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29y
ZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRH
cmFtbWFySW5SYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1bmFwcGxpZWRTcGVs
bENvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5nKToKKyAg
ICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uKTogRGVmYXVsdCB0byBub3Qgc2V0
dGluZyB0aGUgZm9jdXNlZCBub2RlIHdoZW4KKyAgICAgICAgc2V0dGluZyB0aGUgc2VsZWN0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2VsZWN0RnJhbWVFbGVt
ZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9u
Q29udHJvbGxlcjo6c2V0U2VsZWN0aW9uRnJvbU5vbmUpOgorICAgICAgICAqIGVkaXRpbmcvU2Vs
ZWN0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxl
cjo6c2V0U2VsZWN0aW9uQW5kRm9jdXMpOiBDb252ZW5pZW5jZSBtZXRob2QgdG8gcmVwcm9kdWNl
IG9sZAorICAgICAgICBzZXRTZWxlY3Rpb24gYmVoYXZpb3IuCisgICAgICAgICogcGFnZS9FdmVu
dEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0U2VsZWN0aW9uSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0Tm9uRGlyZWN0aW9uYWxTZWxlY3Rpb25JZk5lZWRlZCk6Cisg
ICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9j
dXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIpOgorCiAyMDExLTAzLTIx
ICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZp
c2lvbiA4MTU5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTkwLDYgKzE5MCwxMiBAQCBib29sIEVkaXRvcjo6aGFuZGxlVGV4dEV2ZW50
KFRleHRFdmVudCogCiAgICAgaWYgKGV2ZW50LT5pc0Ryb3AoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgLy8gRG9uJ3Qgc2VuZCB0ZXh0IGV2ZW50cyB0byB0aGUgc2VsZWN0aW9uIGlm
IGl0J3Mgbm90IGluIHRoZSBldmVudCB0YXJnZXQgKHVzdWFsbHkgdGhlIGZvY3VzZWQgZWxlbWVu
dCkKKyAgICBOb2RlKiBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbkZvckNvbW1hbmQoZXZlbnQp
LnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBpZiAoc2VsZWN0aW9uU3RhcnQgJiYgZXZl
bnQtPnRhcmdldCgpLT50b05vZGUoKSAhPSBzZWxlY3Rpb25TdGFydCAmJiBldmVudC0+dGFyZ2V0
KCktPnRvTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gc2VsZWN0aW9uU3RhcnQtPnJv
b3RFZGl0YWJsZUVsZW1lbnQoKQorICAgICAgICAmJiBzZWxlY3Rpb25TdGFydC0+cm9vdEVkaXRh
YmxlRWxlbWVudCgpICYmIGV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCkgIT0gc2VsZWN0aW9uU3Rh
cnQtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS0+c2hhZG93SG9zdCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKICAgICBpZiAoZXZlbnQtPmlzUGFzdGUoKSkgewogICAgICAgICBpZiAoZXZlbnQt
PnBhc3RpbmdGcmFnbWVudCgpKQogICAgICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFn
bWVudChldmVudC0+cGFzdGluZ0ZyYWdtZW50KCksIGZhbHNlLCBldmVudC0+c2hvdWxkU21hcnRS
ZXBsYWNlKCksIGV2ZW50LT5zaG91bGRNYXRjaFN0eWxlKCkpOwpAQCAtMTkxMCw3ICsxOTE2LDcg
QEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhibwogICAgICAgICAKICAg
ICAgICAgLy8gRklYTUUgNDg1OTE5MDogVGhpcyBnZXRzIGNvbmZ1c2VkIHdpdGggZG91YmxlZCBw
dW5jdHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEgcGFyYWdyYXBoCiAgICAgICAgIFJlZlB0cjxSYW5n
ZT4gYmFkR3JhbW1hclJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShncmFtbWFyU2VhcmNo
UmFuZ2UuZ2V0KCksIGdyYW1tYXJQaHJhc2VPZmZzZXQgKyBncmFtbWFyRGV0YWlsLmxvY2F0aW9u
LCBncmFtbWFyRGV0YWlsLmxlbmd0aCk7Ci0gICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5z
ZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFtbWFyUmFuZ2UuZ2V0KCksIFNFTF9E
RUZBVUxUX0FGRklOSVRZKSk7CisgICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRTZWxl
Y3Rpb25BbmRGb2N1cyhWaXNpYmxlU2VsZWN0aW9uKGJhZEdyYW1tYXJSYW5nZS5nZXQoKSwgU0VM
X0RFRkFVTFRfQUZGSU5JVFkpKTsKICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnJldmVh
bFNlbGVjdGlvbigpOwogICAgICAgICAKICAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKQEAg
LTE5MjEsNyArMTkyNyw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmco
Ym8KICAgICAgICAgLy8gYSBtYXJrZXIgc28gd2UgZHJhdyB0aGUgcmVkIHNxdWlnZ2xlIGxhdGVy
LgogICAgICAgICAKICAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gVGV4
dEl0ZXJhdG9yOjpzdWJyYW5nZShzcGVsbGluZ1NlYXJjaFJhbmdlLmdldCgpLCBtaXNzcGVsbGlu
Z09mZnNldCwgbWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkpOwotICAgICAgICBmcmFtZSgpLT5zZWxl
Y3Rpb24oKS0+c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5nZS5n
ZXQoKSwgRE9XTlNUUkVBTSkpOworICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0U2Vs
ZWN0aW9uQW5kRm9jdXMoVmlzaWJsZVNlbGVjdGlvbihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBE
T1dOU1RSRUFNKSk7CiAgICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5yZXZlYWxTZWxlY3Rp
b24oKTsKICAgICAgICAgCiAgICAgICAgIGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKQEAgLTIxMjYsNyArMjEzMiw3IEBAIHZvaWQg
RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcKICAgICAgICAgaWYgKG5ld1NlbGVj
dGlvbiAhPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAg
IGlmICghZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24pKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGZyYW1lKCktPnNl
bGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKKyAgICAgICAgICAgIGZyYW1l
KCktPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb25BbmRGb2N1cyhuZXdTZWxlY3Rpb24pOwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKCFmcmFtZSgpLT5lZGl0b3IoKS0+c2hvdWxkSW5zZXJ0VGV4
dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0b3JJbnNl
cnRBY3Rpb25UeXBlZCkpCkBAIC0yNDAxLDcgKzI0MDcsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChy
ZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUxpbmspIHsKLSAgICAgICAgICAgICAgICBt
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7Cisg
ICAgICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbkFuZEZvY3Vz
KHNlbGVjdGlvblRvUmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgaWYgKGNhbkVkaXRSaWNobHkoKSkKQEAgLTI0MTksNyArMjQy
NSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAg
ICAgICAgICBpZiAodXNlU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCkKICAgICAgICAgICAgICAg
ICAgICAgYXBwbHlDb21tYW5kKFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5n
ZVRvUmVwbGFjZSwgcmVzdWx0LT5yZXBsYWNlbWVudCkpOwogICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9u
KHNlbGVjdGlvblRvUmVwbGFjZSk7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5zZXRTZWxlY3Rpb25BbmRGb2N1cyhzZWxlY3Rpb25Ub1JlcGxhY2UpOwogICAgICAg
ICAgICAgICAgICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVzdWx0LT5yZXBsYWNlbWVu
dCwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI3ODMsNyArMjc4OSw3
IEBAIHZvaWQgRWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY28KICNpZiBTVVBQT1JU
X0FVVE9DT1JSRUNUSU9OX1BBTkVMCiAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9u
UmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQs
IGNvcnJlY3Rpb24pOwogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwot
ICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0
ZWQsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkNsb3NlVHlwaW5nIHwgU2VsZWN0aW9uQ29udHJvbGxl
cjo6Q2xlYXJUeXBpbmdTdHlsZSB8IFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsQ29ycmVjdGlv
blRyaWdnZXJlZCk7CisgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxl
Y3Rpb25PZkNvcnJlY3RlZCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmcgfCBTZWxl
Y3Rpb25Db250cm9sbGVyOjpDbGVhclR5cGluZ1N0eWxlIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6
U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6VXBkYXRlRm9j
dXNlZE5vZGUpOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJh
bWUtPmRvY3VtZW50KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgp
LCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5kKCkpOwogCiAgICAgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2Vy
cygpOwpAQCAtMzM4NCw3ICszMzkwLDcgQEAgYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3Qg
U3RyaW5nJiB0YQogICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxl
Y3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyZXN1bHRSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpOwor
ICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb25BbmRGb2N1cyhWaXNpYmxlU2Vs
ZWN0aW9uKHJlc3VsdFJhbmdlLmdldCgpLCBET1dOU1RSRUFNKSk7CiAgICAgbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPnJldmVhbFNlbGVjdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiA4MTU5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw5ICsxNzgsOSBAQCB2b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OnNldFNlbGVjdGlvbihjCiAgICAgCiAgICAgbV9jYXJldFJlY3ROZWVkc1VwZGF0
ZSA9IHRydWU7CiAgICAgCi0gICAgaWYgKCFzLmlzTm9uZSgpKQorICAgIGlmIChvcHRpb25zICYg
VXBkYXRlRm9jdXNlZE5vZGUgJiYgIXMuaXNOb25lKCkpCiAgICAgICAgIHNldEZvY3VzZWROb2Rl
SWZOZWVkZWQoKTsKLSAgICAKKwogICAgIHVwZGF0ZUFwcGVhcmFuY2UoKTsKIAogICAgIC8vIEFs
d2F5cyBjbGVhciB0aGUgeCBwb3NpdGlvbiB1c2VkIGZvciB2ZXJ0aWNhbCBhcnJvdyBuYXZpZ2F0
aW9uLgpAQCAtMTM3NCw3ICsxMzc0LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZWxl
Y3RGcmFtZUVsZQogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGJlZm9yZU93bmVy
RWxlbWVudCwgYWZ0ZXJPd25lckVsZW1lbnQpOwogICAgIGlmIChwYXJlbnQtPnNlbGVjdGlvbigp
LT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkgewogICAgICAgICBwYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKHBhcmVudCk7Ci0gICAgICAgIHBhcmVu
dC0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOworICAgICAgICBwYXJl
bnQtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb25BbmRGb2N1cyhuZXdTZWxlY3Rpb24pOwogICAg
IH0KIH0KIApAQCAtMTgzMSw3ICsxODMxLDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpz
ZXRTZWxlY3Rpb25GcgogICAgIHdoaWxlIChub2RlICYmICFub2RlLT5oYXNUYWdOYW1lKGJvZHlU
YWcpKQogICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogICAgIGlmIChu
b2RlKQotICAgICAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9u
SW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0pKTsKKyAgICAgICAgc2V0U2VsZWN0aW9u
QW5kRm9jdXMoVmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9k
ZSksIERPV05TVFJFQU0pKTsKIH0KIAogYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgJ
KHJldmlzaW9uIDgxNTkxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250
cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDcgQEAgcHVibGljOgogICAgICAg
ICBDbGVhclR5cGluZ1N0eWxlID0gMSA8PCAxLAogICAgICAgICBVc2VyVHJpZ2dlcmVkID0gMSA8
PCAyLAogICAgICAgICBTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQgPSAxIDw8IDMsCisgICAgICAg
IFVwZGF0ZUZvY3VzZWROb2RlID0gMSA8PCA0LAogICAgIH07CiAgICAgdHlwZWRlZiB1bnNpZ25l
ZCBTZXRTZWxlY3Rpb25PcHRpb25zOwogCkBAIC03Nyw3ICs3OCw4IEBAIHB1YmxpYzoKIAogICAg
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Vs
ZWN0aW9uOyB9CiAgICAgdm9pZCBzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYs
IFNldFNlbGVjdGlvbk9wdGlvbnMgPSBDbG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGUsIEN1
cnNvckFsaWduT25TY3JvbGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIFRleHRHcmFu
dWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5LCBEaXJlY3Rpb25hbGl0eVBvbGljeSA9IE1h
a2VEaXJlY3Rpb25hbFNlbGVjdGlvbik7Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIERp
cmVjdGlvbmFsaXR5UG9saWN5IGRpcmVjdGlvbmFsaXR5ID0gTWFrZURpcmVjdGlvbmFsU2VsZWN0
aW9uKSB7IHNldFNlbGVjdGlvbihzZWxlY3Rpb24sIENsb3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdT
dHlsZSwgQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkLCBncmFudWxhcml0eSwgZGlyZWN0aW9u
YWxpdHkpOyB9CisgICAgdm9pZCBzZXRTZWxlY3Rpb25BbmRGb2N1cyhjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24sIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgRGlyZWN0aW9u
YWxpdHlQb2xpY3kgZGlyZWN0aW9uYWxpdHkgPSBNYWtlRGlyZWN0aW9uYWxTZWxlY3Rpb24pIHsg
c2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0eWxlIHwg
VXBkYXRlRm9jdXNlZE5vZGUsIEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRlZCwgZ3JhbnVsYXJp
dHksIGRpcmVjdGlvbmFsaXR5KTsgfQorICAgIHZvaWQgc2V0U2VsZWN0aW9uQW5kRm9jdXMoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSB7IHNldFNlbGVjdGlvbihzZWxlY3Rpb24s
IENsb3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZSB8IFVwZGF0ZUZvY3VzZWROb2RlKTsgfQog
ICAgIGJvb2wgc2V0U2VsZWN0ZWRSYW5nZShSYW5nZSosIEVBZmZpbml0eSwgYm9vbCBjbG9zZVR5
cGluZyk7CiAgICAgdm9pZCBzZWxlY3RBbGwoKTsKICAgICB2b2lkIGNsZWFyKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiA4MTU5MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDE0
ICsyNTQsMTQgQEAgc3RhdGljIHZvaWQgc2V0U2VsZWN0aW9uSWZOZWVkZWQoU2VsZWN0aQogewog
ICAgIEFTU0VSVChzZWxlY3Rpb24pOwogICAgIGlmIChzZWxlY3Rpb24tPnNlbGVjdGlvbigpICE9
IG5ld1NlbGVjdGlvbiAmJiBzZWxlY3Rpb24tPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24pKQotICAgICAgICBzZWxlY3Rpb24tPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwor
ICAgICAgICBzZWxlY3Rpb24tPnNldFNlbGVjdGlvbkFuZEZvY3VzKG5ld1NlbGVjdGlvbik7CiB9
CiAKIHN0YXRpYyB2b2lkIHNldE5vbkRpcmVjdGlvbmFsU2VsZWN0aW9uSWZOZWVkZWQoU2VsZWN0
aW9uQ29udHJvbGxlciogc2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxl
Y3Rpb24sIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICBBU1NFUlQoc2VsZWN0
aW9uKTsKICAgICBpZiAoc2VsZWN0aW9uLT5zZWxlY3Rpb24oKSAhPSBuZXdTZWxlY3Rpb24gJiYg
c2VsZWN0aW9uLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKLSAgICAgICAg
c2VsZWN0aW9uLT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBncmFudWxhcml0eSwgTWFrZU5v
bkRpcmVjdGlvbmFsU2VsZWN0aW9uKTsKKyAgICAgICAgc2VsZWN0aW9uLT5zZXRTZWxlY3Rpb25B
bmRGb2N1cyhuZXdTZWxlY3Rpb24sIGdyYW51bGFyaXR5LCBNYWtlTm9uRGlyZWN0aW9uYWxTZWxl
Y3Rpb24pOwogfQogCiB2b2lkIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q2xvc2VzdFdvcmRGcm9tTW91
c2VFdmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiByZXN1bHQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA4MTU5MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjkxLDcgKzI5MSw3IEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJ
bkRvY3UKICAgICAgICAgUG9zaXRpb24gcG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUobm9kZSk7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKHBvc2l0
aW9uLCBwb3NpdGlvbiwgRE9XTlNUUkVBTSk7CiAgICAgICAgIGlmIChmcmFtZS0+c2VsZWN0aW9u
KCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQotICAgICAgICAgICAgZnJh
bWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKKyAgICAgICAgICAg
IGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uQW5kRm9jdXMobmV3U2VsZWN0aW9uKTsK
ICAgICB9CiAKICAgICBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmZvY3VzKGZhbHNlKTsK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDgxNjQ4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMDMtMjEgIExldmkgV2VpbnRyYXViICA8
bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVuZm9jdXNlZCBjb250ZW50ZWRpdGFibGUgZWxlbWVudCBzdGlsbCByZWNl
aXZlcyBrZXlib2FyZCBldmVudHMgYW5kIGdldHMgbW9kaWZpZWQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4Njk2CisKKyAgICAgICAgVHdvIG5ldyB0
ZXN0cyBhcyB3ZWxsIGFzIGZpeGVzIHRvIG90aGVyIHRlc3RzIHRoYXQgcmVsaWVkIG9uIHByZXZp
b3VzIGJlaGF2aW9yIHdoZXJlCisgICAgICAgIGZvY3VzIGZvbGxvd2VkIHNlbGVjdGlvbi4gRm9j
dXMgbm93IG11c3QgYmUgZXhwbGljaXRseSBhc3NpZ25lZC4KKworICAgICAgICAqIGVkaXRpbmcv
ZWRpdGluZy5qczoKKyAgICAgICAgKHJ1bkVkaXRpbmdUZXN0KTogQXR0ZW1wdGluZyB0byBzZXQg
Zm9jdXMgdG8gdGhlIGJvZHksIHJvb3QsIG9yIHRlc3QgZWxlbWVudHMuCisgICAgICAgIChydW5E
dW1wQXNUZXh0RWRpdGluZ1Rlc3QpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21t
YW5kL3NjcmlwdC10ZXN0cy9icmVhay1vdXQtb2YtZW1wdHktbGlzdC1pdGVtLmpzOgorICAgICAg
ICAocHJlc3NLZXkpOgorICAgICAgICAqIGVkaXRpbmcvaW5wdXQvb25seS1mb2N1c2VkLWZpZWxk
LXJlY2VpdmVzLWlucHV0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9p
bnB1dC9vbmx5LWZvY3VzZWQtZmllbGQtcmVjZWl2ZXMtaW5wdXQuaHRtbDogQWRkZWQuCisgICAg
ICAgICogZWRpdGluZy9pbnB1dC9vcHRpb24tcGFnZS11cC1kb3duLmh0bWw6CisgICAgICAgICog
ZWRpdGluZy9pbnB1dC9zY3JvbGwtdmlld3BvcnQtcGFnZS11cC1kb3duLmh0bWw6CisgICAgICAg
ICogZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLWV2ZW50LW9ubHktb25jZS5odG1sOgorICAgICAg
ICAqIGVkaXRpbmcvc2VsZWN0aW9uL2ZvY3VzLWRvZXNudC1mb2xsb3ctc2VsZWN0aW9uLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vZm9jdXMtZG9lc250
LWZvbGxvdy1zZWxlY3Rpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9zdHlsZS9o
aWdobGlnaHQtaW5zZXJ0LXBhcmFncmFwaC5odG1sOgorICAgICAgICAqIGZhc3QvZXZlbnRzL3Nj
cmlwdC10ZXN0cy9ldmVudC1pbnB1dC1jb250ZW50RWRpdGFibGUuanM6CisgICAgICAgIChzZWwp
OgorICAgICAgICAqIGZhc3QvZXZlbnRzL3NjcmlwdC10ZXN0cy9pbnB1dFRleHQtbmV2ZXItZmly
ZWQtb24ta2V5ZG93bi1jYW5jZWwuanM6CisgICAgICAgICogZmFzdC9mb3Jtcy90ZXh0YXJlYS1z
ZWxlY3Rpb24tcHJlc2VydmF0aW9uLmh0bWw6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2VkaXRp
bmcvaW5wdXQvaW5zZXJ0LWRlbGV0ZS1zbXAtc3ltYm9sLmh0bWw6CisKIDIwMTEtMDMtMjEgIEFi
aGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBFcmljIFNlaWRlbC4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZWRpdGluZy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2VkaXRpbmcuanMJKHJldmlzaW9uIDgxNTkx
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9lZGl0aW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC04
NzIsOCArODcyLDE0IEBAIGZ1bmN0aW9uIHJ1bkVkaXRpbmdUZXN0KCkgewogICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wRWRpdGluZ0NhbGxiYWNrcygpOwogCiAgICAgdmFyIGVsZW0g
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdCIpOworICAgIHZhciByb290ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKTsKICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93Lmdl
dFNlbGVjdGlvbigpOwotICAgIHNlbGVjdGlvbi5zZXRQb3NpdGlvbihlbGVtLCAwKTsKKyAgICBp
ZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5jb250ZW50RWRpdGFi
bGUpCisgICAgICAgIHNlbGVjdGlvbi5zZXRQb3NpdGlvbihlbGVtLCAwKTsKKyAgICBlbHNlIGlm
IChyb290KQorICAgICAgICByb290LmZvY3VzKCk7CisgICAgZWxzZSBpZiAoZWxlbSkKKyAgICAg
ICAgZWxlbS5mb2N1cygpCiAgICAgZWRpdGluZ1Rlc3QoKTsKIH0KIApAQCAtODkwLDggKzg5Niwx
NCBAQCBmdW5jdGlvbiBydW5EdW1wQXNUZXh0RWRpdGluZ1Rlc3QoZW5hYmxlCiAgICAgZHVtcEFz
VGV4dCA9IHRydWU7CiAKICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
ZXN0Iik7CisgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpOwog
ICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgc2VsZWN0aW9u
LnNldFBvc2l0aW9uKGVsZW0sIDApOworICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgiYm9keSIpWzBdLmNvbnRlbnRFZGl0YWJsZSkKKyAgICAgICAgc2VsZWN0aW9uLnNldFBv
c2l0aW9uKGVsZW0sIDApOworICAgIGVsc2UgaWYgKHJvb3QpCisgICAgICAgIHJvb3QuZm9jdXMo
KTsKKyAgICBlbHNlIGlmIChlbGVtKQorICAgICAgICBlbGVtLmZvY3VzKCkKICAgICBlZGl0aW5n
VGVzdCgpOwogCiAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtYXJrdXBSZXN1bHRMaXN0
KTsKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc2NyaXB0LXRlc3RzL2Jy
ZWFrLW91dC1vZi1lbXB0eS1saXN0LWl0ZW0uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZWRpdGluZy9leGVjQ29tbWFuZC9zY3JpcHQtdGVzdHMvYnJlYWstb3V0LW9mLWVtcHR5LWxpc3Qt
aXRlbS5qcwkocmV2aXNpb24gODE1OTEpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21t
YW5kL3NjcmlwdC10ZXN0cy9icmVhay1vdXQtb2YtZW1wdHktbGlzdC1pdGVtLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC05LDEyICs5LDEyIEBAIGZ1bmN0aW9uIHByZXNzS2V5KGtleSkKICAgICBpZiAo
d2luZG93LktleUV2ZW50KSB7CiAgICAgICAgIHZhciBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50
KCJLZXlib2FyZEV2ZW50Iik7CiAgICAgICAgIGV2LmluaXRLZXlFdmVudCgia2V5cHJlc3MiLCB0
cnVlLCB0cnVlLCB3aW5kb3csICAwLDAsMCwwLCAwLCBrZXkuY2hhckNvZGVBdCgwKSk7Ci0gICAg
ICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChldik7CisgICAgICAgIHRlc3RDb250YWlu
ZXIuZGlzcGF0Y2hFdmVudChldik7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICB2YXIgZXYg
PSBkb2N1bWVudC5jcmVhdGVFdmVudCgiVGV4dEV2ZW50Iik7CiAgICAgICAgIGV2LmluaXRUZXh0
RXZlbnQoJ3RleHRJbnB1dCcsIHRydWUsIHRydWUsIG51bGwsIGtleS5jaGFyQXQoMCkpOwotICAg
ICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoZXYpOworICAgICAgICB0ZXN0Q29udGFp
bmVyLmRpc3BhdGNoRXZlbnQoZXYpOwogICAgIH0KIH0KIApJbmRleDogTGF5b3V0VGVzdHMvZWRp
dGluZy9pbnB1dC9vbmx5LWZvY3VzZWQtZmllbGQtcmVjZWl2ZXMtaW5wdXQtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvb25seS1mb2N1c2VkLWZp
ZWxkLXJlY2VpdmVzLWlucHV0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2VkaXRpbmcvaW5wdXQvb25seS1mb2N1c2VkLWZpZWxkLXJlY2VpdmVzLWlucHV0LWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUaGlzIHRlc3RzIHRoYXQgYW4g
ZWRpdGFibGUgZmllbGQgY2FuIG9ubHkgcmVjZWl2ZSB0ZXh0IGlucHV0IGV2ZW50cyB3aGVuIGl0
IGhhcyBmb2N1cywgbm90IGp1c3Qgd2hlbiBpdCBoYXMgdGhlIHNlbGVjdGlvbi4gVG8gcnVuIHRo
ZSB0ZXN0IG1hbnVhbGx5LCBmb2N1cyB0aGUgZWRpdGFibGUgZGl2IGJlbG93LCBjbGljayB0aGUg
YnV0dG9uLCB0aGVuIHR5cGUuIFlvdXIgaW5wdXQgc2hvdWxkIGJlIGlnbm9yZWQuCitQQVNTCitG
b2N1cyBTdGVhbGVyCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L29ubHktZm9jdXNl
ZC1maWVsZC1yZWNlaXZlcy1pbnB1dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Vk
aXRpbmcvaW5wdXQvb25seS1mb2N1c2VkLWZpZWxkLXJlY2VpdmVzLWlucHV0Lmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L29ubHktZm9jdXNlZC1maWVsZC1y
ZWNlaXZlcy1pbnB1dC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACis8IURPQ1RZ
UEUgaHRtbD4KKworPGJvZHk+Cis8ZGl2PlRoaXMgdGVzdHMgdGhhdCBhbiBlZGl0YWJsZSBmaWVs
ZCBjYW4gb25seSByZWNlaXZlIHRleHQgaW5wdXQgZXZlbnRzIHdoZW4gaXQgaGFzIGZvY3VzLCBu
b3QganVzdCB3aGVuIGl0IGhhcyB0aGUgc2VsZWN0aW9uLiBUbyBydW4gdGhlIHRlc3QgbWFudWFs
bHksIGZvY3VzIHRoZSBlZGl0YWJsZSBkaXYgYmVsb3csIGNsaWNrIHRoZSBidXR0b24sIHRoZW4g
dHlwZS4gWW91ciBpbnB1dCBzaG91bGQgYmUgaWdub3JlZC48L2Rpdj4KKzxkaXYgY29udGVudEVk
aXRhYmxlPSJ0cnVlIiBpZD0idGVzdCI+PC9kaXY+Cis8YnV0dG9uIGlkPSJidXR0b24iPkZvY3Vz
IFN0ZWFsZXI8L2J1dHRvbj4KKzwvYm9keT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBwcmVzc0tleSgg
a2V5ICkgeworICAgIGlmICh3aW5kb3cuS2V5RXZlbnQpIHsKKyAgICAgICAgdmFyIGV2ID0gZG9j
dW1lbnQuY3JlYXRlRXZlbnQoIktleWJvYXJkRXZlbnQiKTsKKyAgICAgICAgZXYuaW5pdEtleUV2
ZW50KCJrZXlwcmVzcyIsIHRydWUsIHRydWUsIHdpbmRvdywgIDAsMCwwLDAsIDAsIGtleS5jaGFy
Q29kZUF0KDApKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGV2KTsKKyAg
ICB9CisgICAgZWxzZSB7CisgICAgICAgIHZhciBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJU
ZXh0RXZlbnQiKTsKKyAgICAgICAgZXYuaW5pdFRleHRFdmVudCgndGV4dElucHV0JywgdHJ1ZSwg
dHJ1ZSwgbnVsbCwga2V5LmNoYXJBdCgwKSk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0
Y2hFdmVudChldik7CisgICAgfQorfQorCit2YXIgdGVzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJ0ZXN0Iik7Cit0ZXN0LmZvY3VzKCk7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgCisg
ICAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b24iKTsKKyAgICB2
YXIgeCA9IGJ1dHRvbi5vZmZzZXRMZWZ0ICsgYnV0dG9uLm9mZnNldFdpZHRoIC8gMjsKKyAgICB2
YXIgeSA9IGJ1dHRvbi5vZmZzZXRUb3AgKyBidXR0b24ub2Zmc2V0SGVpZ2h0IC8gMjsKKyAgICAK
KyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKKyAgICBldmVudFNlbmRlci5tb3Vz
ZURvd24oKTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgcHJlc3NLZXkoJ0YnKTsK
KyAgICBwcmVzc0tleSgnQScpOworICAgIHByZXNzS2V5KCdJJyk7CisgICAgcHJlc3NLZXkoJ0wn
KTsKKyAgICBpZiAodGVzdC5pbm5lclRleHQgPT0gJycpCisgICAgICAgIHRlc3QuaW5uZXJUZXh0
ID0gIlBBU1MiOworfQorCis8L3NjcmlwdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCklu
ZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L29wdGlvbi1wYWdlLXVwLWRvd24uaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L29wdGlvbi1wYWdlLXVwLWRv
d24uaHRtbAkocmV2aXNpb24gODE1OTEpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L29w
dGlvbi1wYWdlLXVwLWRvd24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQCBm
dW5jdGlvbiBydW5GcmFtZUN1cnNvck1vdmVUZXN0KCkgewogICAgIHZhciBkb2MgPSBmcmFtZS5k
b2N1bWVudDsKICAgICB2YXIgYm9keSA9IGRvYy5ib2R5OwogICAgIGJvZHkuaW5uZXJIVE1MID0g
Z2VuZXJhdGVDb250ZW50KCk7Ci0gICAgZnJhbWUuZm9jdXMoKTsKICAgICBmcmFtZS5nZXRTZWxl
Y3Rpb24oKS5zZXRQb3NpdGlvbihib2R5LmZpcnN0Q2hpbGQsIDApOworICAgIGJvZHkuZm9jdXMo
KTsKICAgICBydW5DdXJzb3JNb3ZlVGVzdCgiaWZyYW1lIiwgZnJhbWUsIGZyYW1lKTsKIH0KIApJ
bmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9zY3JvbGwtdmlld3BvcnQtcGFnZS11cC1k
b3duLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9zY3JvbGwt
dmlld3BvcnQtcGFnZS11cC1kb3duLmh0bWwJKHJldmlzaW9uIDgxNTkxKQorKysgTGF5b3V0VGVz
dHMvZWRpdGluZy9pbnB1dC9zY3JvbGwtdmlld3BvcnQtcGFnZS11cC1kb3duLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAgZnVuY3Rpb24gcnVuRnJhbWVTY3JvbGxUZXN0KCkg
ewogICAgIHZhciBkb2MgPSBmcmFtZS5kb2N1bWVudDsKICAgICB2YXIgYm9keSA9IGRvYy5ib2R5
OwogICAgIGJvZHkuaW5uZXJIVE1MID0gZ2VuZXJhdGVDb250ZW50KCk7Ci0gICAgZnJhbWUuZm9j
dXMoKTsKICAgICBmcmFtZS5nZXRTZWxlY3Rpb24oKS5zZXRQb3NpdGlvbihib2R5LmZpcnN0Q2hp
bGQsIDApOworICAgIGJvZHkuZm9jdXMoKTsKICAgICBpZiAob25NYWNQbGF0Zm9ybSkKICAgICAg
ICAgb2Zmc2V0cyA9IFsgNTUsIDE3NSBdOwogICAgIGVsc2UgCkluZGV4OiBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtZXZlbnQtb25seS1vbmNlLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLWV2ZW50LW9ubHktb25jZS5o
dG1sCShyZXZpc2lvbiA4MTU5MSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9w
YXN0ZS1ldmVudC1vbmx5LW9uY2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtOCwxMSArOCwxMiBA
QAogZnVuY3Rpb24gZWRpdGluZ1Rlc3QoKQogewogICAgIHZhciBmaXJlZENvdW50ID0gMDsKLSAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdCIpLmFkZEV2ZW50TGlzdGVuZXIoInBhc3Rl
IiwgZnVuY3Rpb24oKXsKKyAgICB2YXIgdGVzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
ZXN0Iik7CisgICAgdGVzdC5hZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsIGZ1bmN0aW9uKCl7CiAg
ICAgICAgIGZpcmVkQ291bnQrKwogICAgIH0sIGZhbHNlKTsKIAotICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJ0ZXN0IikuZm9jdXMoKTsKKyAgICB0ZXN0LmZvY3VzKCk7CiAgICAgZXhlY1Nl
bGVjdEFsbENvbW1hbmQoKTsKICAgICBleGVjQ29weUNvbW1hbmQoKTsKICAgICBleGVjUGFzdGVD
b21tYW5kKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9mb2N1cy1kb2Vz
bnQtZm9sbG93LXNlbGVjdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vZm9jdXMtZG9lc250LWZvbGxvdy1zZWxlY3Rpb24tZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZm9j
dXMtZG9lc250LWZvbGxvdy1zZWxlY3Rpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIHRoYXQgc2V0dGluZyB0aGUgc2VsZWN0aW9u
IGluIGEgbm9kZSBkb2Vzbid0IGFsc28gZm9jdXMgdGhhdCBub2RlCitQQVNTCkluZGV4OiBMYXlv
dXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9mb2N1cy1kb2VzbnQtZm9sbG93LXNlbGVjdGlvbi5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2ZvY3VzLWRv
ZXNudC1mb2xsb3ctc2VsZWN0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3NlbGVjdGlvbi9mb2N1cy1kb2VzbnQtZm9sbG93LXNlbGVjdGlvbi5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE2IEBACis8IURPQ1RZUEUgaHRtbD4KKworPGJvZHk+Cis8ZGl2
PlRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgc2V0dGluZyB0aGUgc2VsZWN0aW9uIGluIGEgbm9kZSBk
b2Vzbid0IGFsc28gZm9jdXMgdGhhdCBub2RlPC9kaXY+Cis8ZGl2IGNvbnRlbnRFZGl0YWJsZT0i
dHJ1ZSIgaWQ9InRlc3QiPlBBU1M8L2Rpdj4KKzwvYm9keT4KKzxzY3JpcHQ+CitpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKwordmFyIHRlc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOwordGVz
dC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIGZ1bmN0aW9uKCkgeworICAgIHRlc3QuaW5uZXJU
ZXh0ID0gIkZBSUwiOworfSwgZmFsc2UpOword2luZG93LmdldFNlbGVjdGlvbigpLnNldFBvc2l0
aW9uKHRlc3QsIDApOworPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRl
eDogTGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9oaWdobGlnaHQtaW5zZXJ0LXBhcmFncmFwaC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvaGlnaGxpZ2h0LWlu
c2VydC1wYXJhZ3JhcGguaHRtbAkocmV2aXNpb24gODE1OTEpCisrKyBMYXlvdXRUZXN0cy9lZGl0
aW5nL3N0eWxlL2hpZ2hsaWdodC1pbnNlcnQtcGFyYWdyYXBoLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTE0LDEyICsxNCwxMiBAQCBmdW5jdGlvbiBwcmVzc0tleSgga2V5ICkgewogICAgIGlmICh3
aW5kb3cuS2V5RXZlbnQpIHsKICAgICAgICAgdmFyIGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQo
IktleWJvYXJkRXZlbnQiKTsKICAgICAgICAgZXYuaW5pdEtleUV2ZW50KCJrZXlwcmVzcyIsIHRy
dWUsIHRydWUsIHdpbmRvdywgIDAsMCwwLDAsIDAsIGtleS5jaGFyQ29kZUF0KDApKTsKLSAgICAg
ICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGV2KTsKKyAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInRlc3QiKS5kaXNwYXRjaEV2ZW50KGV2KTsKICAgICB9CiAgICAgZWxzZSB7
CiAgICAgICAgIHZhciBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJUZXh0RXZlbnQiKTsKICAg
ICAgICAgZXYuaW5pdFRleHRFdmVudCgndGV4dElucHV0JywgdHJ1ZSwgdHJ1ZSwgbnVsbCwga2V5
LmNoYXJBdCgwKSk7Ci0gICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChldik7Cisg
ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0IikuZGlzcGF0Y2hFdmVudChldik7
CiAgICAgfQogfQogCkBAIC0yOSw2ICsyOSw3IEBAIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCiB2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0Jyk7CiB2YXIgcyA9
IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKIAorZS5mb2N1cygpOwogciA9IGRvY3VtZW50LmNyZWF0
ZVJhbmdlKCk7CiByLnNldFN0YXJ0KGUuZmlyc3RDaGlsZCwwKTsKIHIuc2V0RW5kKGUuZmlyc3RD
aGlsZCw1KTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NjcmlwdC10ZXN0cy9ldmVu
dC1pbnB1dC1jb250ZW50RWRpdGFibGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvc2NyaXB0LXRlc3RzL2V2ZW50LWlucHV0LWNvbnRlbnRFZGl0YWJsZS5qcwkocmV2
aXNpb24gODE1OTEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zY3JpcHQtdGVzdHMvZXZl
bnQtaW5wdXQtY29udGVudEVkaXRhYmxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3
IEBAIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJjcmVhdGVMaW5rIiwgZmFsc2UKIAogLy8gRW5zdXJl
IGtleSBldmVudHMgY2FuIGNhdXNlIHRoZSBldmVudCAKIHZhciB0YXJnZXQ3ID0gc2V0dXBGb3JG
aXJpbmdUZXN0KCc8cCBpZD0idGFyZ2V0NyIgY29udGVudEVkaXRhYmxlPlJlcGxhY2VkPC9wPics
ICJYIik7Cit0YXJnZXQ3LmZvY3VzKCk7CiBzZWwuc2VsZWN0QWxsQ2hpbGRyZW4odGFyZ2V0Nyk7
CiBldmVudFNlbmRlci5rZXlEb3duKCdYJyk7CiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3NjcmlwdC10ZXN0cy9pbnB1dFRleHQtbmV2ZXItZmlyZWQtb24ta2V5ZG93bi1jYW5jZWwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2NyaXB0LXRlc3RzL2lu
cHV0VGV4dC1uZXZlci1maXJlZC1vbi1rZXlkb3duLWNhbmNlbC5qcwkocmV2aXNpb24gODE1OTEp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zY3JpcHQtdGVzdHMvaW5wdXRUZXh0LW5ldmVy
LWZpcmVkLW9uLWtleWRvd24tY2FuY2VsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01NSw5ICs1NSw2
IEBAIHRlc3QodGFyZ2V0SW5wdXQpOwogdGFyZ2V0VGV4dGFyZWEuZm9jdXMoKTsKIHRlc3QodGFy
Z2V0VGV4dGFyZWEpOwogCi13aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudCh0
YXJnZXRFZGl0YWJsZSwgMCwgdGFyZ2V0RWRpdGFibGUsIDApOwotdGVzdCh0YXJnZXRFZGl0YWJs
ZSk7Ci0KIHRhcmdldFJvb3Quc3R5bGUuZGlzcGxheSA9ICJub25lIjsKIHZhciBzdWNjZXNzZnVs
bHlQYXJzZWQgPSB0cnVlOwogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVh
LXNlbGVjdGlvbi1wcmVzZXJ2YXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL3RleHRhcmVhLXNlbGVjdGlvbi1wcmVzZXJ2YXRpb24uaHRtbAkocmV2aXNpb24g
ODE1OTEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLXNlbGVjdGlvbi1wcmVz
ZXJ2YXRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTAsNiArMTAsNyBAQAogPC90ZXh0YXJl
YT48L3A+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgdmFyIHRhID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhJyk7CisgICAgdGEuZm9jdXMoKTsKICAgICB0YS5zZWxl
Y3Rpb25TdGFydCA9IDM7CiAgICAgdGEuc2VsZWN0aW9uRW5kID0gNDsKICAgICBzaG91bGRCZSgn
dGEuc2VsZWN0aW9uU3RhcnQnLCAnMycpOwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2VkaXRpbmcvaW5wdXQvaW5zZXJ0LWRlbGV0ZS1zbXAtc3ltYm9sLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvaW5wdXQvaW5zZXJ0LWRlbGV0ZS1z
bXAtc3ltYm9sLmh0bWwJKHJldmlzaW9uIDgxNTkxKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2VkaXRpbmcvaW5wdXQvaW5zZXJ0LWRlbGV0ZS1zbXAtc3ltYm9sLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTEwLDggKzEwLDkgQEAKICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKIAogICAgICAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNldFBv
c2l0aW9uKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0IiksIDApOworICAgICAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3QiKS5mb2N1cygpOwogICAgICAgICAgICAgdGV4
dElucHV0Q29udHJvbGxlci5pbnNlcnRUZXh0KCJQQVNTIik7Ci0gICAgICAgICAgICB0ZXh0SW5w
dXRDb250cm9sbGVyLmluc2VydFRleHQoIvCQhoIiKTsKKyAgICAgICAgICAgIHRleHRJbnB1dENv
bnRyb2xsZXIuaW5zZXJ0VGV4dCgixoIiKTsKICAgICAgICAgICAgIHRleHRJbnB1dENvbnRyb2xs
ZXIuZG9Db21tYW5kKCJkZWxldGVCYWNrd2FyZDoiKTsKIAogICAgICAgICB9IGNhdGNoIChleCkg
ewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86538</attachid>
            <date>2011-03-22 16:28:27 -0700</date>
            <delta_ts>2011-03-24 12:17:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>24950</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL2lucHV0L2luc2VydC1kZWxl
dGUtc21wLXN5bWJvbC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9lZGl0aW5nL2lucHV0L2luc2VydC1kZWxldGUtc21wLXN5bWJvbC5odG1sCShyZXZpc2lvbiA4
MTU5MSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL2lucHV0L2luc2VydC1k
ZWxldGUtc21wLXN5bWJvbC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw4ICsxMCw5IEBACiAg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CiAKICAgICAgICAg
ICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRQb3NpdGlvbihkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgidGVzdCIpLCAwKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
ZXN0IikuZm9jdXMoKTsKICAgICAgICAgICAgIHRleHRJbnB1dENvbnRyb2xsZXIuaW5zZXJ0VGV4
dCgiUEFTUyIpOwotICAgICAgICAgICAgdGV4dElucHV0Q29udHJvbGxlci5pbnNlcnRUZXh0KCLw
kIaCIik7CisgICAgICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLmluc2VydFRleHQoIsaCIik7
CiAgICAgICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyLmRvQ29tbWFuZCgiZGVsZXRlQmFja3dh
cmQ6Iik7CiAKICAgICAgICAgfSBjYXRjaCAoZXgpIHsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3NjcmlwdC10ZXN0cy9ldmVudC1pbnB1dC1jb250ZW50RWRpdGFibGUuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2NyaXB0LXRlc3RzL2V2ZW50LWlucHV0
LWNvbnRlbnRFZGl0YWJsZS5qcwkocmV2aXNpb24gODE1OTEpCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9zY3JpcHQtdGVzdHMvZXZlbnQtaW5wdXQtY29udGVudEVkaXRhYmxlLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBACiAKIC8vIEVuc3VyZSBrZXkgZXZlbnRzIGNhbiBj
YXVzZSB0aGUgZXZlbnQgCiB2YXIgdGFyZ2V0NyA9IHNldHVwRm9yRmlyaW5nVGVzdCgnPHAgaWQ9
InRhcmdldDciIGNvbnRlbnRFZGl0YWJsZT5SZXBsYWNlZDwvcD4nLCAiWCIpOwordGFyZ2V0Ny5m
b2N1cygpOwogc2VsLnNlbGVjdEFsbENoaWxkcmVuKHRhcmdldDcpOwogZXZlbnRTZW5kZXIua2V5
RG93bignWCcpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zY3JpcHQtdGVzdHMv
aW5wdXRUZXh0LW5ldmVyLWZpcmVkLW9uLWtleWRvd24tY2FuY2VsLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NjcmlwdC10ZXN0cy9pbnB1dFRleHQtbmV2ZXItZmly
ZWQtb24ta2V5ZG93bi1jYW5jZWwuanMJKHJldmlzaW9uIDgxNTkxKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvc2NyaXB0LXRlc3RzL2lucHV0VGV4dC1uZXZlci1maXJlZC1vbi1rZXlkb3du
LWNhbmNlbC5qcwkod29ya2luZyBjb3B5KQpAQCAtNTUsOSArNTUsNiBAQAogdGFyZ2V0VGV4dGFy
ZWEuZm9jdXMoKTsKIHRlc3QodGFyZ2V0VGV4dGFyZWEpOwogCi13aW5kb3cuZ2V0U2VsZWN0aW9u
KCkuc2V0QmFzZUFuZEV4dGVudCh0YXJnZXRFZGl0YWJsZSwgMCwgdGFyZ2V0RWRpdGFibGUsIDAp
OwotdGVzdCh0YXJnZXRFZGl0YWJsZSk7Ci0KIHRhcmdldFJvb3Quc3R5bGUuZGlzcGxheSA9ICJu
b25lIjsKIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwogCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL3RleHRhcmVhLXNlbGVjdGlvbi1wcmVzZXJ2YXRpb24uaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLXNlbGVjdGlvbi1wcmVzZXJ2
YXRpb24uaHRtbAkocmV2aXNpb24gODE1OTEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3Rl
eHRhcmVhLXNlbGVjdGlvbi1wcmVzZXJ2YXRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTAs
NiArMTAsNyBAQAogPC90ZXh0YXJlYT48L3A+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCI+CiAgICAgdmFyIHRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhJyk7CisgICAgdGEu
Zm9jdXMoKTsKICAgICB0YS5zZWxlY3Rpb25TdGFydCA9IDM7CiAgICAgdGEuc2VsZWN0aW9uRW5k
ID0gNDsKICAgICBzaG91bGRCZSgndGEuc2VsZWN0aW9uU3RhcnQnLCAnMycpOwpJbmRleDogTGF5
b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zY3JpcHQtdGVzdHMvYnJlYWstb3V0LW9mLWVt
cHR5LWxpc3QtaXRlbS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWND
b21tYW5kL3NjcmlwdC10ZXN0cy9icmVhay1vdXQtb2YtZW1wdHktbGlzdC1pdGVtLmpzCShyZXZp
c2lvbiA4MTU5MSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc2NyaXB0LXRl
c3RzL2JyZWFrLW91dC1vZi1lbXB0eS1saXN0LWl0ZW0uanMJKHdvcmtpbmcgY29weSkKQEAgLTks
MTIgKzksMTIgQEAKICAgICBpZiAod2luZG93LktleUV2ZW50KSB7CiAgICAgICAgIHZhciBldiA9
IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJLZXlib2FyZEV2ZW50Iik7CiAgICAgICAgIGV2LmluaXRL
ZXlFdmVudCgia2V5cHJlc3MiLCB0cnVlLCB0cnVlLCB3aW5kb3csICAwLDAsMCwwLCAwLCBrZXku
Y2hhckNvZGVBdCgwKSk7Ci0gICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChldik7
CisgICAgICAgIHRlc3RDb250YWluZXIuZGlzcGF0Y2hFdmVudChldik7CiAgICAgfQogICAgIGVs
c2UgewogICAgICAgICB2YXIgZXYgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgiVGV4dEV2ZW50Iik7
CiAgICAgICAgIGV2LmluaXRUZXh0RXZlbnQoJ3RleHRJbnB1dCcsIHRydWUsIHRydWUsIG51bGws
IGtleS5jaGFyQXQoMCkpOwotICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoZXYp
OworICAgICAgICB0ZXN0Q29udGFpbmVyLmRpc3BhdGNoRXZlbnQoZXYpOwogICAgIH0KIH0KIApJ
bmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLWV2ZW50LW9ubHktb25j
ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9wYXN0
ZS1ldmVudC1vbmx5LW9uY2UuaHRtbAkocmV2aXNpb24gODE1OTEpCisrKyBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtZXZlbnQtb25seS1vbmNlLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTgsMTEgKzgsMTIgQEAKIGZ1bmN0aW9uIGVkaXRpbmdUZXN0KCkKIHsKICAgICB2YXIg
ZmlyZWRDb3VudCA9IDA7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3QiKS5hZGRF
dmVudExpc3RlbmVyKCJwYXN0ZSIsIGZ1bmN0aW9uKCl7CisgICAgdmFyIHRlc3QgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgidGVzdCIpOworICAgIHRlc3QuYWRkRXZlbnRMaXN0ZW5lcigicGFz
dGUiLCBmdW5jdGlvbigpewogICAgICAgICBmaXJlZENvdW50KysKICAgICB9LCBmYWxzZSk7CiAK
LSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdCIpLmZvY3VzKCk7CisgICAgdGVzdC5m
b2N1cygpOwogICAgIGV4ZWNTZWxlY3RBbGxDb21tYW5kKCk7CiAgICAgZXhlY0NvcHlDb21tYW5k
KCk7CiAgICAgZXhlY1Bhc3RlQ29tbWFuZCgpOwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vZm9jdXMtZG9lc250LWZvbGxvdy1zZWxlY3Rpb24tZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2ZvY3VzLWRvZXNudC1mb2xs
b3ctc2VsZWN0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Vk
aXRpbmcvc2VsZWN0aW9uL2ZvY3VzLWRvZXNudC1mb2xsb3ctc2VsZWN0aW9uLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IHNl
dHRpbmcgdGhlIHNlbGVjdGlvbiBpbiBhIG5vZGUgZG9lc24ndCBhbHNvIGZvY3VzIHRoYXQgbm9k
ZQorUEFTUwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZm9jdXMtZG9lc250
LWZvbGxvdy1zZWxlY3Rpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9mb2N1cy1kb2VzbnQtZm9sbG93LXNlbGVjdGlvbi5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vZm9jdXMtZG9lc250LWZvbGxvdy1z
ZWxlY3Rpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAorPCFET0NUWVBFIGh0
bWw+CisKKzxib2R5PgorPGRpdj5UaGlzIHRlc3QgZW5zdXJlcyB0aGF0IHNldHRpbmcgdGhlIHNl
bGVjdGlvbiBpbiBhIG5vZGUgZG9lc24ndCBhbHNvIGZvY3VzIHRoYXQgbm9kZTwvZGl2PgorPGRp
diBjb250ZW50RWRpdGFibGU9InRydWUiIGlkPSJ0ZXN0Ij5QQVNTPC9kaXY+Cis8L2JvZHk+Cis8
c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3ZhciB0ZXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3Rlc3QnKTsKK3Rlc3QuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCBmdW5jdGlvbigp
IHsKKyAgICB0ZXN0LmlubmVyVGV4dCA9ICJGQUlMIjsKK30sIGZhbHNlKTsKK3dpbmRvdy5nZXRT
ZWxlY3Rpb24oKS5zZXRQb3NpdGlvbih0ZXN0LCAwKTsKKzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZWRpdGluZy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2VkaXRpbmcuanMJKHJldmlzaW9uIDgxNTkx
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9lZGl0aW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC04
NzIsOCArODcyLDE0IEBACiAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBFZGl0aW5n
Q2FsbGJhY2tzKCk7CiAKICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
ZXN0Iik7CisgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpOwog
ICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgc2VsZWN0aW9u
LnNldFBvc2l0aW9uKGVsZW0sIDApOworICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgiYm9keSIpWzBdLmNvbnRlbnRFZGl0YWJsZSkKKyAgICAgICAgc2VsZWN0aW9uLnNldFBv
c2l0aW9uKGVsZW0sIDApOworICAgIGVsc2UgaWYgKHJvb3QpCisgICAgICAgIHJvb3QuZm9jdXMo
KTsKKyAgICBlbHNlIGlmIChlbGVtKQorICAgICAgICBlbGVtLmZvY3VzKCkKICAgICBlZGl0aW5n
VGVzdCgpOwogfQogCkBAIC04OTAsOCArODk2LDE0IEBACiAgICAgZHVtcEFzVGV4dCA9IHRydWU7
CiAKICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Iik7CisgICAg
dmFyIHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpOwogICAgIHZhciBzZWxl
Y3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgc2VsZWN0aW9uLnNldFBvc2l0aW9u
KGVsZW0sIDApOworICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIp
WzBdLmNvbnRlbnRFZGl0YWJsZSkKKyAgICAgICAgc2VsZWN0aW9uLnNldFBvc2l0aW9uKGVsZW0s
IDApOworICAgIGVsc2UgaWYgKHJvb3QpCisgICAgICAgIHJvb3QuZm9jdXMoKTsKKyAgICBlbHNl
IGlmIChlbGVtKQorICAgICAgICBlbGVtLmZvY3VzKCkKICAgICBlZGl0aW5nVGVzdCgpOwogCiAg
ICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtYXJrdXBSZXN1bHRMaXN0KTsKSW5kZXg6IExh
eW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvc2Nyb2xsLXZpZXdwb3J0LXBhZ2UtdXAtZG93bi5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvc2Nyb2xsLXZpZXdwb3J0
LXBhZ2UtdXAtZG93bi5odG1sCShyZXZpc2lvbiA4MTU5MSkKKysrIExheW91dFRlc3RzL2VkaXRp
bmcvaW5wdXQvc2Nyb2xsLXZpZXdwb3J0LXBhZ2UtdXAtZG93bi5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw4ICsyNiw4IEBACiAgICAgdmFyIGRvYyA9IGZyYW1lLmRvY3VtZW50OwogICAgIHZh
ciBib2R5ID0gZG9jLmJvZHk7CiAgICAgYm9keS5pbm5lckhUTUwgPSBnZW5lcmF0ZUNvbnRlbnQo
KTsKLSAgICBmcmFtZS5mb2N1cygpOwogICAgIGZyYW1lLmdldFNlbGVjdGlvbigpLnNldFBvc2l0
aW9uKGJvZHkuZmlyc3RDaGlsZCwgMCk7CisgICAgYm9keS5mb2N1cygpOwogICAgIGlmIChvbk1h
Y1BsYXRmb3JtKQogICAgICAgICBvZmZzZXRzID0gWyA1NSwgMTc1IF07CiAgICAgZWxzZSAKSW5k
ZXg6IExheW91dFRlc3RzL2VkaXRpbmcvaW5wdXQvb25seS1mb2N1c2VkLWZpZWxkLXJlY2VpdmVz
LWlucHV0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9vbmx5
LWZvY3VzZWQtZmllbGQtcmVjZWl2ZXMtaW5wdXQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2VkaXRpbmcvaW5wdXQvb25seS1mb2N1c2VkLWZpZWxkLXJlY2VpdmVzLWlucHV0Lmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8Ym9k
eT4KKzxkaXY+VGhpcyB0ZXN0cyB0aGF0IGFuIGVkaXRhYmxlIGZpZWxkIGNhbiBvbmx5IHJlY2Vp
dmUgdGV4dCBpbnB1dCBldmVudHMgd2hlbiBpdCBoYXMgZm9jdXMsIG5vdCBqdXN0IHdoZW4gaXQg
aGFzIHRoZSBzZWxlY3Rpb24uIFRvIHJ1biB0aGUgdGVzdCBtYW51YWxseSwgZm9jdXMgdGhlIGVk
aXRhYmxlIGRpdiBiZWxvdywgY2xpY2sgdGhlIGJ1dHRvbiwgdGhlbiB0eXBlLiBZb3VyIGlucHV0
IHNob3VsZCBiZSBpZ25vcmVkLjwvZGl2PgorPGRpdiBjb250ZW50RWRpdGFibGU9InRydWUiIGlk
PSJ0ZXN0Ij48L2Rpdj4KKzxidXR0b24gaWQ9ImJ1dHRvbiI+Rm9jdXMgU3RlYWxlcjwvYnV0dG9u
PgorPC9ib2R5PgorPHNjcmlwdD4KK2Z1bmN0aW9uIHByZXNzS2V5KCBrZXkgKSB7CisgICAgaWYg
KHdpbmRvdy5LZXlFdmVudCkgeworICAgICAgICB2YXIgZXYgPSBkb2N1bWVudC5jcmVhdGVFdmVu
dCgiS2V5Ym9hcmRFdmVudCIpOworICAgICAgICBldi5pbml0S2V5RXZlbnQoImtleXByZXNzIiwg
dHJ1ZSwgdHJ1ZSwgd2luZG93LCAgMCwwLDAsMCwgMCwga2V5LmNoYXJDb2RlQXQoMCkpOworICAg
ICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoZXYpOworICAgIH0KKyAgICBlbHNlIHsK
KyAgICAgICAgdmFyIGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIlRleHRFdmVudCIpOworICAg
ICAgICBldi5pbml0VGV4dEV2ZW50KCd0ZXh0SW5wdXQnLCB0cnVlLCB0cnVlLCBudWxsLCBrZXku
Y2hhckF0KDApKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGV2KTsKKyAg
ICB9Cit9CisKK3ZhciB0ZXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3QiKTsKK3Rl
c3QuZm9jdXMoKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAKKyAgICB2YXIgYnV0dG9uID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvbiIpOworICAgIHZhciB4ID0gYnV0dG9uLm9m
ZnNldExlZnQgKyBidXR0b24ub2Zmc2V0V2lkdGggLyAyOworICAgIHZhciB5ID0gYnV0dG9uLm9m
ZnNldFRvcCArIGJ1dHRvbi5vZmZzZXRIZWlnaHQgLyAyOworICAgIAorICAgIGV2ZW50U2VuZGVy
Lm1vdXNlTW92ZVRvKHgsIHkpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgIGV2
ZW50U2VuZGVyLm1vdXNlVXAoKTsKKyAgICBwcmVzc0tleSgnRicpOworICAgIHByZXNzS2V5KCdB
Jyk7CisgICAgcHJlc3NLZXkoJ0knKTsKKyAgICBwcmVzc0tleSgnTCcpOworICAgIGlmICh0ZXN0
LmlubmVyVGV4dCA9PSAnJykKKyAgICAgICAgdGVzdC5pbm5lclRleHQgPSAiUEFTUyI7Cit9CisK
Kzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3Rz
L2VkaXRpbmcvaW5wdXQvb25seS1mb2N1c2VkLWZpZWxkLXJlY2VpdmVzLWlucHV0LWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2lucHV0L29ubHktZm9jdXNl
ZC1maWVsZC1yZWNlaXZlcy1pbnB1dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9lZGl0aW5nL2lucHV0L29ubHktZm9jdXNlZC1maWVsZC1yZWNlaXZlcy1pbnB1dC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGhpcyB0ZXN0cyB0aGF0
IGFuIGVkaXRhYmxlIGZpZWxkIGNhbiBvbmx5IHJlY2VpdmUgdGV4dCBpbnB1dCBldmVudHMgd2hl
biBpdCBoYXMgZm9jdXMsIG5vdCBqdXN0IHdoZW4gaXQgaGFzIHRoZSBzZWxlY3Rpb24uIFRvIHJ1
biB0aGUgdGVzdCBtYW51YWxseSwgZm9jdXMgdGhlIGVkaXRhYmxlIGRpdiBiZWxvdywgY2xpY2sg
dGhlIGJ1dHRvbiwgdGhlbiB0eXBlLiBZb3VyIGlucHV0IHNob3VsZCBiZSBpZ25vcmVkLgorUEFT
UworRm9jdXMgU3RlYWxlcgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1dC9vcHRpb24t
cGFnZS11cC1kb3duLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9pbnB1
dC9vcHRpb24tcGFnZS11cC1kb3duLmh0bWwJKHJldmlzaW9uIDgxNTkxKQorKysgTGF5b3V0VGVz
dHMvZWRpdGluZy9pbnB1dC9vcHRpb24tcGFnZS11cC1kb3duLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDggKzIzLDggQEAKICAgICB2YXIgZG9jID0gZnJhbWUuZG9jdW1lbnQ7CiAgICAgdmFy
IGJvZHkgPSBkb2MuYm9keTsKICAgICBib2R5LmlubmVySFRNTCA9IGdlbmVyYXRlQ29udGVudCgp
OwotICAgIGZyYW1lLmZvY3VzKCk7CiAgICAgZnJhbWUuZ2V0U2VsZWN0aW9uKCkuc2V0UG9zaXRp
b24oYm9keS5maXJzdENoaWxkLCAwKTsKKyAgICBib2R5LmZvY3VzKCk7CiAgICAgcnVuQ3Vyc29y
TW92ZVRlc3QoImlmcmFtZSIsIGZyYW1lLCBmcmFtZSk7CiB9CiAKSW5kZXg6IExheW91dFRlc3Rz
L2VkaXRpbmcvc3R5bGUvaGlnaGxpZ2h0LWluc2VydC1wYXJhZ3JhcGguaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL2hpZ2hsaWdodC1pbnNlcnQtcGFyYWdyYXBo
Lmh0bWwJKHJldmlzaW9uIDgxNTkxKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9oaWdo
bGlnaHQtaW5zZXJ0LXBhcmFncmFwaC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xNCwxMiArMTQs
MTIgQEAKICAgICBpZiAod2luZG93LktleUV2ZW50KSB7CiAgICAgICAgIHZhciBldiA9IGRvY3Vt
ZW50LmNyZWF0ZUV2ZW50KCJLZXlib2FyZEV2ZW50Iik7CiAgICAgICAgIGV2LmluaXRLZXlFdmVu
dCgia2V5cHJlc3MiLCB0cnVlLCB0cnVlLCB3aW5kb3csICAwLDAsMCwwLCAwLCBrZXkuY2hhckNv
ZGVBdCgwKSk7Ci0gICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChldik7CisgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0IikuZGlzcGF0Y2hFdmVudChldik7CiAg
ICAgfQogICAgIGVsc2UgewogICAgICAgICB2YXIgZXYgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgi
VGV4dEV2ZW50Iik7CiAgICAgICAgIGV2LmluaXRUZXh0RXZlbnQoJ3RleHRJbnB1dCcsIHRydWUs
IHRydWUsIG51bGwsIGtleS5jaGFyQXQoMCkpOwotICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3Bh
dGNoRXZlbnQoZXYpOworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdCIpLmRp
c3BhdGNoRXZlbnQoZXYpOwogICAgIH0KIH0KIApAQCAtMjksNiArMjksNyBAQAogdmFyIGUgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOwogdmFyIHMgPSB3aW5kb3cuZ2V0U2VsZWN0
aW9uKCk7CiAKK2UuZm9jdXMoKTsKIHIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogci5zZXRT
dGFydChlLmZpcnN0Q2hpbGQsMCk7CiByLnNldEVuZChlLmZpcnN0Q2hpbGQsNSk7CkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA4MTY0OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDMyIEBACisyMDExLTAzLTIxICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBVbmZvY3VzZWQgY29udGVudGVkaXRhYmxlIGVsZW1lbnQgc3RpbGwgcmVjZWl2ZXMga2V5
Ym9hcmQgZXZlbnRzIGFuZCBnZXRzIG1vZGlmaWVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODY5NgorCisgICAgICAgIFR3byBuZXcgdGVzdHMgYXMg
d2VsbCBhcyBmaXhlcyB0byBvdGhlciB0ZXN0cyB0aGF0IHJlbGllZCBvbiBwcmV2aW91cyBiZWhh
dmlvciB3aGVyZQorICAgICAgICBmb2N1cyBmb2xsb3dlZCBzZWxlY3Rpb24uIEZvY3VzIG5vdyBt
dXN0IGJlIGV4cGxpY2l0bHkgYXNzaWduZWQuCisKKyAgICAgICAgKiBlZGl0aW5nL2VkaXRpbmcu
anM6CisgICAgICAgIChydW5FZGl0aW5nVGVzdCk6IEF0dGVtcHRpbmcgdG8gc2V0IGZvY3VzIHRv
IHRoZSBib2R5LCByb290LCBvciB0ZXN0IGVsZW1lbnRzLgorICAgICAgICAocnVuRHVtcEFzVGV4
dEVkaXRpbmdUZXN0KTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9zY3Jp
cHQtdGVzdHMvYnJlYWstb3V0LW9mLWVtcHR5LWxpc3QtaXRlbS5qczoKKyAgICAgICAgKHByZXNz
S2V5KToKKyAgICAgICAgKiBlZGl0aW5nL2lucHV0L29ubHktZm9jdXNlZC1maWVsZC1yZWNlaXZl
cy1pbnB1dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvaW5wdXQvb25s
eS1mb2N1c2VkLWZpZWxkLXJlY2VpdmVzLWlucHV0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVk
aXRpbmcvaW5wdXQvb3B0aW9uLXBhZ2UtdXAtZG93bi5odG1sOgorICAgICAgICAqIGVkaXRpbmcv
aW5wdXQvc2Nyb2xsLXZpZXdwb3J0LXBhZ2UtdXAtZG93bi5odG1sOgorICAgICAgICAqIGVkaXRp
bmcvcGFzdGVib2FyZC9wYXN0ZS1ldmVudC1vbmx5LW9uY2UuaHRtbDoKKyAgICAgICAgKiBlZGl0
aW5nL3NlbGVjdGlvbi9mb2N1cy1kb2VzbnQtZm9sbG93LXNlbGVjdGlvbi1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL2ZvY3VzLWRvZXNudC1mb2xsb3ct
c2VsZWN0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc3R5bGUvaGlnaGxpZ2h0
LWluc2VydC1wYXJhZ3JhcGguaHRtbDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zY3JpcHQtdGVz
dHMvZXZlbnQtaW5wdXQtY29udGVudEVkaXRhYmxlLmpzOgorICAgICAgICAoc2VsKToKKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9zY3JpcHQtdGVzdHMvaW5wdXRUZXh0LW5ldmVyLWZpcmVkLW9uLWtl
eWRvd24tY2FuY2VsLmpzOgorICAgICAgICAqIGZhc3QvZm9ybXMvdGV4dGFyZWEtc2VsZWN0aW9u
LXByZXNlcnZhdGlvbi5odG1sOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9lZGl0aW5nL2lucHV0
L2luc2VydC1kZWxldGUtc21wLXN5bWJvbC5odG1sOgorCiAyMDExLTAzLTIxICBBYmhpc2hlayBB
cnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xs
ZXIuaAkocmV2aXNpb24gODE1OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlv
bkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBAQAogICAgICAgICBD
bGVhclR5cGluZ1N0eWxlID0gMSA8PCAxLAogICAgICAgICBVc2VyVHJpZ2dlcmVkID0gMSA8PCAy
LAogICAgICAgICBTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQgPSAxIDw8IDMsCisgICAgICAgIFVw
ZGF0ZUZvY3VzZWROb2RlID0gMSA8PCA0LAogICAgIH07CiAgICAgdHlwZWRlZiB1bnNpZ25lZCBT
ZXRTZWxlY3Rpb25PcHRpb25zOwogCkBAIC03Nyw3ICs3OCw4IEBACiAKICAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQog
ICAgIHZvaWQgc2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBTZXRTZWxlY3Rp
b25PcHRpb25zID0gQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0eWxlLCBDdXJzb3JBbGlnbk9u
U2Nyb2xsID0gQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkLCBUZXh0R3JhbnVsYXJpdHkgPSBD
aGFyYWN0ZXJHcmFudWxhcml0eSwgRGlyZWN0aW9uYWxpdHlQb2xpY3kgPSBNYWtlRGlyZWN0aW9u
YWxTZWxlY3Rpb24pOwotICAgIHZvaWQgc2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBEaXJlY3Rpb25hbGl0
eVBvbGljeSBkaXJlY3Rpb25hbGl0eSA9IE1ha2VEaXJlY3Rpb25hbFNlbGVjdGlvbikgeyBzZXRT
ZWxlY3Rpb24oc2VsZWN0aW9uLCBDbG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGUsIEFsaWdu
Q3Vyc29yT25TY3JvbGxJZk5lZWRlZCwgZ3JhbnVsYXJpdHksIGRpcmVjdGlvbmFsaXR5KTsgfQor
ICAgIHZvaWQgc2V0U2VsZWN0aW9uQW5kRm9jdXMoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIERpcmVjdGlvbmFsaXR5UG9saWN5
IGRpcmVjdGlvbmFsaXR5ID0gTWFrZURpcmVjdGlvbmFsU2VsZWN0aW9uKSB7IHNldFNlbGVjdGlv
bihzZWxlY3Rpb24sIENsb3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZSB8IFVwZGF0ZUZvY3Vz
ZWROb2RlLCBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIGdyYW51bGFyaXR5LCBkaXJlY3Rp
b25hbGl0eSk7IH0KKyAgICB2b2lkIHNldFNlbGVjdGlvbkFuZEZvY3VzKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikgeyBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBDbG9zZVR5cGlu
ZyB8IENsZWFyVHlwaW5nU3R5bGUgfCBVcGRhdGVGb2N1c2VkTm9kZSk7IH0KICAgICBib29sIHNl
dFNlbGVjdGVkUmFuZ2UoUmFuZ2UqLCBFQWZmaW5pdHksIGJvb2wgY2xvc2VUeXBpbmcpOwogICAg
IHZvaWQgc2VsZWN0QWxsKCk7CiAgICAgdm9pZCBjbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAkocmV2aXNpb24gODE1OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw2ICsxODIsMTkgQEAKICAgICBpZiAo
RWRpdG9yQ2xpZW50KiBjID0gY2xpZW50KCkpCiAgICAgICAgIGMtPmhhbmRsZUlucHV0TWV0aG9k
S2V5ZG93bihldmVudCk7CiB9CisgICAKK3N0YXRpYyBOb2RlKiBmb2N1c2FibGVSb290KE5vZGUq
IG5vZGUpCit7CisgICAgaWYgKG5vZGUtPnN1cHBvcnRzRm9jdXMoKSkKKyAgICAgICAgcmV0dXJu
IG5vZGU7CisgICAgTm9kZSogcm9vdCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAg
ICB3aGlsZSAocm9vdCkgeworICAgICAgICBpZiAocm9vdC0+c3VwcG9ydHNGb2N1cygpKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIHJvb3QgPSByb290LT5wYXJlbnRPckhvc3ROb2RlKCk7
CisgICAgfQorICAgIHJldHVybiByb290OworfQogCiBib29sIEVkaXRvcjo6aGFuZGxlVGV4dEV2
ZW50KFRleHRFdmVudCogZXZlbnQpCiB7CkBAIC0xOTAsNiArMjAzLDEzIEBACiAgICAgaWYgKGV2
ZW50LT5pc0Ryb3AoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgLy8gRG9uJ3Qgc2Vu
ZCB0ZXh0IGV2ZW50cyB0byB0aGUgc2VsZWN0aW9uIGlmIGl0J3Mgbm90IHdpdGhpbiB0aGUgc2Ft
ZSBmb2N1c2FibGUgY29udGV4dCBhcyB0aGUgZXZlbnQKKyAgICBOb2RlKiBzZWxlY3Rpb25TdGFy
dCA9IHNlbGVjdGlvbkZvckNvbW1hbmQoZXZlbnQpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsK
KyAgICBOb2RlKiB0YXJnZXROb2RlID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKKyAgICBp
ZiAoc2VsZWN0aW9uU3RhcnQgJiYgc2VsZWN0aW9uU3RhcnQgIT0gdGFyZ2V0Tm9kZQorICAgICAg
ICAmJiAoIWZvY3VzYWJsZVJvb3QodGFyZ2V0Tm9kZSkgfHwgIWZvY3VzYWJsZVJvb3QodGFyZ2V0
Tm9kZSktPmNvbnRhaW5zSW5jbHVkaW5nU2hhZG93RE9NKGZvY3VzYWJsZVJvb3Qoc2VsZWN0aW9u
U3RhcnQpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmIChldmVudC0+aXNQYXN0
ZSgpKSB7CiAgICAgICAgIGlmIChldmVudC0+cGFzdGluZ0ZyYWdtZW50KCkpCiAgICAgICAgICAg
ICByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KGV2ZW50LT5wYXN0aW5nRnJhZ21lbnQoKSwg
ZmFsc2UsIGV2ZW50LT5zaG91bGRTbWFydFJlcGxhY2UoKSwgZXZlbnQtPnNob3VsZE1hdGNoU3R5
bGUoKSk7CkBAIC0xOTEwLDcgKzE5MzAsNyBAQAogICAgICAgICAKICAgICAgICAgLy8gRklYTUUg
NDg1OTE5MDogVGhpcyBnZXRzIGNvbmZ1c2VkIHdpdGggZG91YmxlZCBwdW5jdHVhdGlvbiBhdCB0
aGUgZW5kIG9mIGEgcGFyYWdyYXBoCiAgICAgICAgIFJlZlB0cjxSYW5nZT4gYmFkR3JhbW1hclJh
bmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShncmFtbWFyU2VhcmNoUmFuZ2UuZ2V0KCksIGdy
YW1tYXJQaHJhc2VPZmZzZXQgKyBncmFtbWFyRGV0YWlsLmxvY2F0aW9uLCBncmFtbWFyRGV0YWls
Lmxlbmd0aCk7Ci0gICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbihiYWRHcmFtbWFyUmFuZ2UuZ2V0KCksIFNFTF9ERUZBVUxUX0FGRklOSVRZ
KSk7CisgICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb25BbmRGb2N1cyhW
aXNpYmxlU2VsZWN0aW9uKGJhZEdyYW1tYXJSYW5nZS5nZXQoKSwgU0VMX0RFRkFVTFRfQUZGSU5J
VFkpKTsKICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlvbigpOwog
ICAgICAgICAKICAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0
cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKQEAgLTE5MjEsNyArMTk0MSw3
IEBACiAgICAgICAgIC8vIGEgbWFya2VyIHNvIHdlIGRyYXcgdGhlIHJlZCBzcXVpZ2dsZSBsYXRl
ci4KICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSA9IFRl
eHRJdGVyYXRvcjo6c3VicmFuZ2Uoc3BlbGxpbmdTZWFyY2hSYW5nZS5nZXQoKSwgbWlzc3BlbGxp
bmdPZmZzZXQsIG1pc3NwZWxsZWRXb3JkLmxlbmd0aCgpKTsKLSAgICAgICAgZnJhbWUoKS0+c2Vs
ZWN0aW9uKCktPnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2Uu
Z2V0KCksIERPV05TVFJFQU0pKTsKKyAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNl
bGVjdGlvbkFuZEZvY3VzKFZpc2libGVTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwg
RE9XTlNUUkVBTSkpOwogICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+cmV2ZWFsU2VsZWN0
aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdpdGhN
aXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7CkBAIC0yMTI2LDcgKzIxNDYsNyBAQAogICAg
ICAgICBpZiAobmV3U2VsZWN0aW9uICE9IGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KSkgewogICAgICAgICAgICAgaWYgKCFmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwor
ICAgICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbkFuZEZvY3VzKG5l
d1NlbGVjdGlvbik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWZyYW1lKCktPmVkaXRvcigp
LT5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFuZ2Uu
Z2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkKQEAgLTI0MDEsNyArMjQyMSw3IEBACiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNr
aW5nVHlwZUxpbmspIHsKLSAgICAgICAgICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0
U2VsZWN0aW9uKHNlbGVjdGlvblRvUmVwbGFjZSk7CisgICAgICAgICAgICAgICAgbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbkFuZEZvY3VzKHNlbGVjdGlvblRvUmVwbGFjZSk7CiAg
ICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
cmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYg
KGNhbkVkaXRSaWNobHkoKSkKQEAgLTI0MTksNyArMjQzOSw3IEBACiAgICAgICAgICAgICAgICAg
aWYgKHVzZVNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQpCiAgICAgICAgICAgICAgICAgICAgIGFw
cGx5Q29tbWFuZChTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb1JlcGxh
Y2UsIHJlc3VsdC0+cmVwbGFjZW1lbnQpKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rp
b25Ub1JlcGxhY2UpOworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2V0U2VsZWN0aW9uQW5kRm9jdXMoc2VsZWN0aW9uVG9SZXBsYWNlKTsKICAgICAgICAgICAgICAg
ICAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlc3VsdC0+cmVwbGFjZW1lbnQsIGZhbHNl
LCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yNzgzLDcgKzI4MDMsNyBAQAogI2lm
IFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2Nv
cnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIGNv
cnJlY3RlZCwgY29ycmVjdGlvbik7CiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5
b3V0KCk7Ci0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rpb25P
ZkNvcnJlY3RlZCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q2xvc2VUeXBpbmcgfCBTZWxlY3Rpb25D
b250cm9sbGVyOjpDbGVhclR5cGluZ1N0eWxlIHwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxD
b3JyZWN0aW9uVHJpZ2dlcmVkKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0
aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBTZWxlY3Rpb25Db250cm9sbGVyOjpDbG9zZVR5cGlu
ZyB8IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkNsZWFyVHlwaW5nU3R5bGUgfCBTZWxlY3Rpb25Db250
cm9sbGVyOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQgfCBTZWxlY3Rpb25Db250cm9sbGVyOjpV
cGRhdGVGb2N1c2VkTm9kZSk7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVh
dGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigp
LnN0YXJ0KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5lbmQoKSk7CiAKICAg
ICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSBtX2ZyYW1lLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCk7CkBAIC0zMzg0LDcgKzM0MDQsNyBAQAogICAgIGlmIChyZXN1bHRSYW5nZS0+
Y29sbGFwc2VkKGV4Y2VwdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyZXN1bHRSYW5n
ZS5nZXQoKSwgRE9XTlNUUkVBTSkpOworICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxl
Y3Rpb25BbmRGb2N1cyhWaXNpYmxlU2VsZWN0aW9uKHJlc3VsdFJhbmdlLmdldCgpLCBET1dOU1RS
RUFNKSk7CiAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlvbigpOwogICAg
IHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25D
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA4MTU5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw5ICsx
NzgsOSBAQAogICAgIAogICAgIG1fY2FyZXRSZWN0TmVlZHNVcGRhdGUgPSB0cnVlOwogICAgIAot
ICAgIGlmICghcy5pc05vbmUoKSkKKyAgICBpZiAob3B0aW9ucyAmIFVwZGF0ZUZvY3VzZWROb2Rl
ICYmICFzLmlzTm9uZSgpKQogICAgICAgICBzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCk7Ci0gICAg
CisKICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7CiAKICAgICAvLyBBbHdheXMgY2xlYXIgdGhlIHgg
cG9zaXRpb24gdXNlZCBmb3IgdmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbi4KQEAgLTEzNzQsNyAr
MTM3NCw3IEBACiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oYmVmb3JlT3duZXJF
bGVtZW50LCBhZnRlck93bmVyRWxlbWVudCk7CiAgICAgaWYgKHBhcmVudC0+c2VsZWN0aW9uKCkt
PnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKSB7CiAgICAgICAgIHBhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUocGFyZW50KTsKLSAgICAgICAgcGFyZW50
LT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CisgICAgICAgIHBhcmVu
dC0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbkFuZEZvY3VzKG5ld1NlbGVjdGlvbik7CiAgICAg
fQogfQogCkBAIC0xODMxLDcgKzE4MzEsNyBAQAogICAgIHdoaWxlIChub2RlICYmICFub2RlLT5o
YXNUYWdOYW1lKGJvZHlUYWcpKQogICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSgpOwogICAgIGlmIChub2RlKQotICAgICAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlv
bihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0pKTsKKyAgICAg
ICAgc2V0U2VsZWN0aW9uQW5kRm9jdXMoVmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5P
ckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0pKTsKIH0KIAogYm9vbCBTZWxlY3Rpb25Db250
cm9sbGVyOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3
U2VsZWN0aW9uKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODE2NDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NiBAQAorMjAx
MS0wMy0yMSAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5mb2N1c2VkIGNvbnRlbnRl
ZGl0YWJsZSBlbGVtZW50IHN0aWxsIHJlY2VpdmVzIGtleWJvYXJkIGV2ZW50cyBhbmQgZ2V0cyBt
b2RpZmllZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mzg2OTYKKworICAgICAgICBGaXhpbmcgdHdvIGlzc3VlcyB3aGVyZSBzZWxlY3Rpb24gYW5kIGZv
Y3VzIGluIFdlYktpdCB3YXMgaW5jb25zaXN0ZW50IHdpdGggRkZYNCBhbmQgSUU5OgorICAgICAg
ICAtIEZvY3VzIG5vIGxvbmdlciB3aWxsIGZvbGxvdyBzZWxlY3Rpb24gd2hlbiBzZXQgcHJvZ3Jh
bW1hdGljYWxseSwgYnV0IGluc3RlYWQKKyAgICAgICAgbmVlZHMgdG8gYmUgc2V0IGV4cGxpY2l0
bHkuCisgICAgICAgIC0gV2hlbiBhbiBlZGl0YWJsZSBmaWVsZCBpcyBub3QgZm9jdXNlZCwgaXQg
d2lsbCBub3QgcmVjZWl2ZSB0ZXh0IGV2ZW50cyByZWdhcmRsZXNzCisgICAgICAgIG9mIHdoZXRo
ZXIgaXQgcmV0YWlucyB0aGUgc2VsZWN0aW9uLgorCisgICAgICAgIFVwZGF0aW5nIGNhbGwgc2l0
ZXMgd2hlcmUgZm9jdXMgaXMgZXhwZWN0ZWQgdG8gZm9sbG93IHRoZSBzZWxlY3Rpb24uCisKKwor
ICAgICAgICBUZXN0czogZWRpdGluZy9pbnB1dC9vbmx5LWZvY3VzZWQtZmllbGQtcmVjZWl2ZXMt
aW5wdXQuaHRtbAorICAgICAgICAgICAgICAgZWRpdGluZy9zZWxlY3Rpb24vZm9jdXMtZG9lc250
LWZvbGxvdy1zZWxlY3Rpb24uaHRtbAorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Zm9jdXNhYmxlUm9vdCk6IEhhbmR5IHN0YXRpYyBmdW5jdGlvbiBm
b3IgZ2V0dGluZyB0aGUgZm9jdXNhYmxlIHJvb3QgZm9yIGEgbm9kZQorICAgICAgICB3aGljaCBp
cyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRleHQgZXZlbnRzIHdpbGwgYmUgc2VudCB0byB0
aGUgc2VsZWN0aW9uIG9yIG5vdC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlVGV4
dEV2ZW50KTogRGlzY2FyZCB0ZXh0IGV2ZW50cyB0aGF0IGFyZW4ndCBiZWluZyBkaXNwYXRjaGVk
IHRvCisgICAgICAgIHRoZSBzZWxlY3Rpb24ncyBjb250YWluZXIuCisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL1Nl
bGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJv
bGxlcjo6c2V0U2VsZWN0aW9uKTogRGVmYXVsdCB0byBub3Qgc2V0dGluZyB0aGUgZm9jdXNlZCBu
b2RlIHdoZW4KKyAgICAgICAgc2V0dGluZyB0aGUgc2VsZWN0aW9uLgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5
U2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2Vs
ZWN0aW9uRnJvbU5vbmUpOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5o
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uQW5k
Rm9jdXMpOiBDb252ZW5pZW5jZSBtZXRob2QgdG8gcmVwcm9kdWNlIG9sZAorICAgICAgICBzZXRT
ZWxlY3Rpb24gYmVoYXZpb3IuCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0U2VsZWN0aW9uSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0Tm9uRGlyZWN0aW9uYWxTZWxlY3Rpb25JZk5lZWRlZCk6CisgICAgICAgICogcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjphZHZh
bmNlRm9jdXNJbkRvY3VtZW50T3JkZXIpOgorCiAyMDExLTAzLTIxICBBYmhpc2hlayBBcnlhICA8
aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA4
MTU5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjkxLDcgKzI5MSw3IEBACiAgICAgICAgIFBvc2l0aW9uIHBvc2l0aW9uID0g
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOwogICAgICAgICBWaXNpYmxlU2VsZWN0
aW9uIG5ld1NlbGVjdGlvbihwb3NpdGlvbiwgcG9zaXRpb24sIERPV05TVFJFQU0pOwogICAgICAg
ICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0
aW9uKSkKLSAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1Nl
bGVjdGlvbik7CisgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbkFu
ZEZvY3VzKG5ld1NlbGVjdGlvbik7CiAgICAgfQogCiAgICAgc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUpLT5mb2N1cyhmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCShyZXZpc2lvbiA4MTU5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDE0ICsyNTQsMTQgQEAKIHsKICAgICBBU1NFUlQo
c2VsZWN0aW9uKTsKICAgICBpZiAoc2VsZWN0aW9uLT5zZWxlY3Rpb24oKSAhPSBuZXdTZWxlY3Rp
b24gJiYgc2VsZWN0aW9uLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKLSAg
ICAgICAgc2VsZWN0aW9uLT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKKyAgICAgICAgc2Vs
ZWN0aW9uLT5zZXRTZWxlY3Rpb25BbmRGb2N1cyhuZXdTZWxlY3Rpb24pOwogfQogCiBzdGF0aWMg
dm9pZCBzZXROb25EaXJlY3Rpb25hbFNlbGVjdGlvbklmTmVlZGVkKFNlbGVjdGlvbkNvbnRyb2xs
ZXIqIHNlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgQVNTRVJUKHNlbGVjdGlvbik7CiAgICAg
aWYgKHNlbGVjdGlvbi0+c2VsZWN0aW9uKCkgIT0gbmV3U2VsZWN0aW9uICYmIHNlbGVjdGlvbi0+
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCi0gICAgICAgIHNlbGVjdGlvbi0+
c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgZ3JhbnVsYXJpdHksIE1ha2VOb25EaXJlY3Rpb25h
bFNlbGVjdGlvbik7CisgICAgICAgIHNlbGVjdGlvbi0+c2V0U2VsZWN0aW9uQW5kRm9jdXMobmV3
U2VsZWN0aW9uLCBncmFudWxhcml0eSwgTWFrZU5vbkRpcmVjdGlvbmFsU2VsZWN0aW9uKTsKIH0K
IAogdm9pZCBFdmVudEhhbmRsZXI6OnNlbGVjdENsb3Nlc3RXb3JkRnJvbU1vdXNlRXZlbnQoY29u
c3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgcmVzdWx0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91338</attachid>
            <date>2011-04-27 13:45:51 -0700</date>
            <delta_ts>2011-09-29 14:33:40 -0700</delta_ts>
            <desc>Patch with updated expectations</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64"></data>

          </attachment>
      

    </bug>

</bugzilla>