<?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>101821</bug_id>
          
          <creation_ts>2012-11-09 17:45:38 -0800</creation_ts>
          <short_desc>Track subframe count to avoid traversing the tree when there&apos;s no subframes</short_desc>
          <delta_ts>2013-01-18 10:43:55 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>102576</dependson>
          <blocked>107302</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Elliott Sprehn">esprehn</reporter>
          <assigned_to name="Elliott Sprehn">esprehn</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>eric</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>763499</commentid>
    <comment_count>0</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-09 17:45:38 -0800</bug_when>
    <thetext>Track subframe count to avoid traversing the tree when there&apos;s no subframes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763505</commentid>
    <comment_count>1</comment_count>
      <attachid>173419</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-09 17:51:46 -0800</bug_when>
    <thetext>Created attachment 173419
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763511</commentid>
    <comment_count>2</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-09 17:59:18 -0800</bug_when>
    <thetext>@ojan

This is the whole patch, it needs to be split into two with the SubframeLoadingDisabler refactored out.

There&apos;s also an overflow bug right now because the number of iframes you insert can be over 1024 (10bits) and we increment that counter on Node::insertedInto() not when you get a Frame* so the 1000 limit doesn&apos;t apply.

We either need to use an unsigned 32bit int and assume you run out of heap space before you overflow the count in trying to create 2^32 &lt;iframe&gt; elements or we need to change the code to walk up the tree only when you get assigned a Frame*.

Anyway, I&apos;m posting the patch so it&apos;s at least somewhere instead of on my machine. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763518</commentid>
    <comment_count>3</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-09 18:07:37 -0800</bug_when>
    <thetext>Other unfinished tasks in this patch like I just noticed:

- I walk one level of the tree even when there&apos;s no subframes

- Walking the NodeVector in willRemoveChildren() is wrong since you could have changed the children and we&apos;d miss some nodes for disconnection.

I&apos;ll post another patch on Monday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763542</commentid>
    <comment_count>4</comment_count>
      <attachid>173419</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-09 18:34:19 -0800</bug_when>
    <thetext>Comment on attachment 173419
Patch

Removing the r? since the patch needs work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763784</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-10 22:32:41 -0800</bug_when>
    <thetext>Do you expect this to be a performance improvement in any real life situations?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763892</commentid>
    <comment_count>6</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-11 15:02:18 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Do you expect this to be a performance improvement in any real life situations?

Yes. It skips a subtree traversal when there&apos;s no frames in the subtree in removeChild. This should improve performance on things like changing views in web apps where they swap out a large chunk of DOM on url change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763904</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-11 15:54:58 -0800</bug_when>
    <thetext>Where will the improvement come from? We have a DOM traversal anyway to dispatch removedFrom() on every node.

Historically, the frame count in document has been causing a number of issues due to incorrect counting. Whenever there are two ways of storing the same information, they inevitably get out of sync. The benefit should be larger than the cost of bugs (including security bugs).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764026</commentid>
    <comment_count>8</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-11 21:43:27 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Where will the improvement come from? We have a DOM traversal anyway to dispatch removedFrom() on every node.

Just FYI, the traversal to be removed is pre-removal one.
Node::removedFrom() is post-removal traversal.

It was once called Node::willRemove().
I inlined it by de-virtualizing them: http://trac.webkit.org/changeset/116629</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767789</commentid>
    <comment_count>9</comment_count>
      <attachid>174365</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-15 00:27:52 -0800</bug_when>
    <thetext>Created attachment 174365
Patch

Simplified approach that is more tightly coupled to the lifecycle of the Frame objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767799</commentid>
    <comment_count>10</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-15 00:53:10 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=174365) [details]
&gt; Patch
&gt; 
&gt; Simplified approach that is more tightly coupled to the lifecycle of the Frame objects.

This approach uses the new setContentFrame() method to only increment when there really are connected frames and then decrements when being disconnected. This removes all the confusing lifecycle management that was from overriding insertedInto() and removedFrom().

I also added a compile assert about the bitfield and I made the change more incremental instead of just ditching the existing ChildFrameDisconnector as in the original patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768060</commentid>
    <comment_count>11</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-15 07:42:49 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Where will the improvement come from? We have a DOM traversal anyway to dispatch removedFrom() on every node.

Is that we do two traversals. Historically, we&apos;ve found that any code that walks lots of nodes in a tight loop will blow out the CPU cache and there is a non-trivial measurable improvement by avoiding doing the extra loop. For example, there was a patch a while back that added another loop over the vector of nodes to be removed in removeChildren that regressed performance by %6 in one benchmark.

&gt; Historically, the frame count in document has been causing a number of issues due to incorrect counting. Whenever there are two ways of storing the same information, they inevitably get out of sync. The benefit should be larger than the cost of bugs (including security bugs).

That&apos;s a fair concern. Elliot has simplified some of the frame creation logic in preparation for this patch. The new code seems safer and more maintainable to me.

Long-term, I think we should consider instead keeping a count of frames with beforeunload/unload handlers since those are the only ones we care about, but since that&apos;s a more invasive patch, I think this is a good incremental step in that direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768078</commentid>
    <comment_count>12</comment_count>
      <attachid>174365</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-15 08:02:39 -0800</bug_when>
    <thetext>Comment on attachment 174365
Patch

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

&gt; Source/WebCore/dom/ContainerNodeAlgorithms.h:274
&gt; +    void disconnectChildren();
&gt;      void disconnect();

I would kind of prefer just having one method here that takes ShouldIncludeRoot as an argument. It took me a while of looking around the code to understand why we needed both of these methods. WDYT?

&gt; Source/WebCore/dom/ContainerNodeAlgorithms.h:279
&gt; +    void collectFrameOwners(Node* root);
&gt; +    void collectFrameOwners(ElementShadow*);
&gt; +    void disconnectCollectedFrameOwners();

These names are much more clear!

&gt; Source/WebCore/dom/ContainerNodeAlgorithms.h:301
&gt; +inline void ChildFrameDisconnector::collectFrameOwners(Node* root)

Not sure if we care that this used to be iterative and is now recursive.

&gt; Source/WebCore/dom/ContainerNodeAlgorithms.h:306
&gt; +    if (root-&gt;isElementNode() &amp;&amp; root-&gt;isFrameOwnerElement())

Lets keep the hasCustomCallbacks in here for now and remove it in a followup patch. That way if it still does somehow affect performance, we can identify it separately from the performance impact of the rest of the change and not have to revert the whole change.

&gt; Source/WebCore/dom/NodeRareData.h:349
&gt; +COMPILE_ASSERT(Page::maxNumberOfFrames &lt; 1024, Frame_limit_should_fit_in_rare_data_count);

&lt;3 this assert.

&gt; Source/WebCore/html/HTMLFrameOwnerElement.cpp:70
&gt; +    // This causes an unload event in the subframe so it cannot be a part of
&gt; +    // removedFrom() because the unload handler in a same domain frame must be
&gt; +    // able to reach upward into the owner document.

Thanks for making this more clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768118</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-15 08:42:16 -0800</bug_when>
    <thetext>I think that I&apos;m convinced about the idea of this patch, except for one detail:

&gt; Long-term, I think we should consider instead keeping a count of frames with beforeunload/unload handlers since those are the only ones we care about, but since that&apos;s a more invasive patch, I think this is a good incremental step in that direction.

If that&apos;s the only purpose of the traversal, can we get the same benefits in practice by starting from the existing count of unload and beforeunload handlers in DOMWindow that is used to disable sudden termination? Most pages don&apos;t have any unload handlers, so counting them in each frame may be overkill.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768205</commentid>
    <comment_count>14</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-15 09:55:57 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; I think that I&apos;m convinced about the idea of this patch, except for one detail:
&gt; 
&gt; &gt; Long-term, I think we should consider instead keeping a count of frames with beforeunload/unload handlers since those are the only ones we care about, but since that&apos;s a more invasive patch, I think this is a good incremental step in that direction.
&gt; 
&gt; If that&apos;s the only purpose of the traversal, can we get the same benefits in practice by starting from the existing count of unload and beforeunload handlers in DOMWindow that is used to disable sudden termination? Most pages don&apos;t have any unload handlers, so counting them in each frame may be overkill.

The count is not transitive so it wouldn&apos;t work as is. We&apos;d also still need to propagate the count up the parent node hierarchy like in this patch.

Since that approach is just more optimization on top of the one here I&apos;d rather land this and then make another patch that implements that approach since it requires much of the same code I have here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768252</commentid>
    <comment_count>15</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-15 10:21:03 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 174365 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174365&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/ContainerNodeAlgorithms.h:274
&gt; &gt; +    void disconnectChildren();
&gt; &gt;      void disconnect();
&gt; 
&gt; I would kind of prefer just having one method here that takes ShouldIncludeRoot as an argument. It took me a while of looking around the code to understand why we needed both of these methods. WDYT?

I&apos;m not a big fan of methods with enums that change the behavior like that, but using one here does reduce the number of lines and code duplication so I&apos;ll go back to it.

&gt; 
&gt; &gt; Source/WebCore/dom/ContainerNodeAlgorithms.h:301
&gt; &gt; +inline void ChildFrameDisconnector::collectFrameOwners(Node* root)
&gt; 
&gt; Not sure if we care that this used to be iterative and is now recursive.

I don&apos;t think it should matter. attach() and detach() are recursive so if you were going to run out stack space it should have happened long before this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768260</commentid>
    <comment_count>16</comment_count>
      <attachid>174482</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-15 10:26:53 -0800</bug_when>
    <thetext>Created attachment 174482
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768311</commentid>
    <comment_count>17</comment_count>
      <attachid>174482</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-15 11:01:51 -0800</bug_when>
    <thetext>Comment on attachment 174482
Patch

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

Do we have test cases of nested frames inside frames ensuring their unload handlers get called before we remove them from the DOM? Mind adding one just to be sure we&apos;re not regressing that.

&gt; Source/WebCore/dom/ContainerNodeAlgorithms.h:336
&gt; +inline void ChildFrameDisconnector::disconnect(DisconnectPolicy policy)

I agree this code with the enum argument is a bit less elegant, but it&apos;s more clear what&apos;s going on...at least to me. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768316</commentid>
    <comment_count>18</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-15 11:04:04 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; I think that I&apos;m convinced about the idea of this patch, except for one detail:
&gt; &gt; 
&gt; &gt; &gt; Long-term, I think we should consider instead keeping a count of frames with beforeunload/unload handlers since those are the only ones we care about, but since that&apos;s a more invasive patch, I think this is a good incremental step in that direction.
&gt; &gt; 
&gt; &gt; If that&apos;s the only purpose of the traversal, can we get the same benefits in practice by starting from the existing count of unload and beforeunload handlers in DOMWindow that is used to disable sudden termination? Most pages don&apos;t have any unload handlers, so counting them in each frame may be overkill.
&gt; 
&gt; The count is not transitive so it wouldn&apos;t work as is. We&apos;d also still need to propagate the count up the parent node hierarchy like in this patch.
&gt; 
&gt; Since that approach is just more optimization on top of the one here I&apos;d rather land this and then make another patch that implements that approach since it requires much of the same code I have here.

To expand on this. The end result I have in my head is that we&apos;ll eventually replace the frame count with an unload handler count that is recursive and have this replace the unload stuff on DOMWindow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768320</commentid>
    <comment_count>19</comment_count>
      <attachid>174482</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-15 11:08:21 -0800</bug_when>
    <thetext>Comment on attachment 174482
Patch

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

&gt; Source/WebCore/dom/Node.cpp:2834
&gt; +    ASSERT(isContainerNode());

Seems weird to me to have this assert here, but not in decrementConnectedSubframeCount.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768323</commentid>
    <comment_count>20</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-15 11:11:52 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 174482 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174482&amp;action=review
&gt; 
&gt; Do we have test cases of nested frames inside frames ensuring their unload handlers get called before we remove them from the DOM? Mind adding one just to be sure we&apos;re not regressing that.
&gt; 

I can add a test, but this isn&apos;t related to that at all since the counting is per document so for the nested unload handler not to get called the parent frame&apos;s unload would have to have never been called which we do have tests for.

Such a test would be necessary if we want to track unload handling later though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768326</commentid>
    <comment_count>21</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-15 11:13:17 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 174482 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174482&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Node.cpp:2834
&gt; &gt; +    ASSERT(isContainerNode());
&gt; 
&gt; Seems weird to me to have this assert here, but not in decrementConnectedSubframeCount.

I&apos;ll add it to decrement. I hadn&apos;t done that since decrement asserts if the value is not &gt; 0, so you would have had to have called increment first but I guess you can go into the rare data and skip the increment assert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768327</commentid>
    <comment_count>22</comment_count>
      <attachid>174482</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-15 11:15:12 -0800</bug_when>
    <thetext>Comment on attachment 174482
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/Node.cpp:2834
&gt;&gt;&gt; +    ASSERT(isContainerNode());
&gt;&gt; 
&gt;&gt; Seems weird to me to have this assert here, but not in decrementConnectedSubframeCount.
&gt; 
&gt; I&apos;ll add it to decrement. I hadn&apos;t done that since decrement asserts if the value is not &gt; 0, so you would have had to have called increment first but I guess you can go into the rare data and skip the increment assert.

Oh. I see. That&apos;s fine too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768328</commentid>
    <comment_count>23</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-15 11:15:41 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #17)
&gt; &gt; (From update of attachment 174482 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174482&amp;action=review
&gt; &gt; 
&gt; &gt; Do we have test cases of nested frames inside frames ensuring their unload handlers get called before we remove them from the DOM? Mind adding one just to be sure we&apos;re not regressing that.
&gt; &gt; 
&gt; 
&gt; I can add a test, but this isn&apos;t related to that at all since the counting is per document so for the nested unload handler not to get called the parent frame&apos;s unload would have to have never been called which we do have tests for.
&gt; 
&gt; Such a test would be necessary if we want to track unload handling later though.

You&apos;re right. Nevermind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768384</commentid>
    <comment_count>24</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-15 12:28:03 -0800</bug_when>
    <thetext>&gt; The end result I have in my head is that we&apos;ll eventually replace the frame count with an unload handler count that is recursive and have this replace the unload stuff on DOMWindow.

I&apos;m not sure if we are on the same page yet. The tracking in DOMWindow is not just recursive, it&apos;s actually per-process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768392</commentid>
    <comment_count>25</comment_count>
      <attachid>174482</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-15 12:39:08 -0800</bug_when>
    <thetext>Comment on attachment 174482
Patch

Clearing flags on attachment: 174482

Committed r134817: &lt;http://trac.webkit.org/changeset/134817&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768393</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-15 12:39:12 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768418</commentid>
    <comment_count>27</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-15 13:07:28 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; &gt; The end result I have in my head is that we&apos;ll eventually replace the frame count with an unload handler count that is recursive and have this replace the unload stuff on DOMWindow.
&gt; 
&gt; I&apos;m not sure if we are on the same page yet. The tracking in DOMWindow is not just recursive, it&apos;s actually per-process.

Whoops. Sorry. You&apos;re right. We could add the unload handler check in addition to what just got committed actually or we can rollout if you still object.

One advantage of tracking this per Node is that even in cases where we have unload handlers, we don&apos;t have to walk the whole subtree. We only walk down to each frame and prune the rest of the traversal. In the end result I&apos;m envisioning, we&apos;d only walk down to the frames that have unload handlers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768424</commentid>
    <comment_count>28</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-15 13:10:53 -0800</bug_when>
    <thetext>Hmmm. Maybe we don&apos;t need any of this complexity actually. It looks like Gecko fires unload handlers after it has removed the frame from the DOM. If we did the same, we would never need to do this pre-removal traversal.

https://bugs.webkit.org/show_bug.cgi?id=102012#c10</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768427</commentid>
    <comment_count>29</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-15 13:18:26 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; Hmmm. Maybe we don&apos;t need any of this complexity actually. It looks like Gecko fires unload handlers after it has removed the frame from the DOM. If we did the same, we would never need to do this pre-removal traversal.
&gt; 
&gt; https://bugs.webkit.org/show_bug.cgi?id=102012#c10

Yeah, I think we can collect the frames to call disconnect on during the removedFrom() traversal. We could use a set like SubframeLoadingDisabler does and in HTMLFrameOwnerElement::removedFrom() we add ourself to the nearest ancestor removal list. That would remove the need for SubframeLoadingDisabler and the counting in this patch.

I&apos;d like to leave this patch in and see what it does to the page cyclers and perf tests though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768449</commentid>
    <comment_count>30</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-15 13:49:43 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #24)
&gt; &gt; &gt; The end result I have in my head is that we&apos;ll eventually replace the frame count with an unload handler count that is recursive and have this replace the unload stuff on DOMWindow.
&gt; &gt; 
&gt; &gt; I&apos;m not sure if we are on the same page yet. The tracking in DOMWindow is not just recursive, it&apos;s actually per-process.
&gt; 
&gt; Whoops. Sorry. You&apos;re right. We could add the unload handler check in addition to what just got committed actually or we can rollout if you still object.
&gt; 
&gt; One advantage of tracking this per Node is that even in cases where we have unload handlers, we don&apos;t have to walk the whole subtree. We only walk down to each frame and prune the rest of the traversal. In the end result I&apos;m envisioning, we&apos;d only walk down to the frames that have unload handlers.

As I think about it more, I increasingly feel that the frame count approach is worth it. Otherwise, large high-profile sites like Gmail, Facebook, etc won&apos;t get any of the speed benefit here since they all have unload handlers.

That said, we could add the unload count check in addition to get extra perf benefit for pages without unload handlers, but I&apos;m not sure it would buy us real performance improvements given that we&apos;re already doing a heavily pruned traversal of the tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769834</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-16 18:31:13 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 102576</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769855</commentid>
    <comment_count>32</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-16 19:30:56 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; Re-opened since this is blocked by bug 102576

So it seems we must override insertedInto() and removedFrom() to handle parser mutations that may remove us from the tree and put us elsewhere without actually doing a disconnect(). We could also make parserRemoveChild() decrement all ancestors by the removed child&apos;s count, and we can make parserAppendChild() and parserInsertBefore() increment all ancestors by our current count.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771238</commentid>
    <comment_count>33</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-19 17:11:43 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #31)
&gt; &gt; Re-opened since this is blocked by bug 102576
&gt; 
&gt; So it seems we must override insertedInto() and removedFrom() to handle parser mutations that may remove us from the tree and put us elsewhere without actually doing a disconnect(). We could also make parserRemoveChild() decrement all ancestors by the removed child&apos;s count, and we can make parserAppendChild() and parserInsertBefore() increment all ancestors by our current count.

This makes me thing we should just jump to the final solution of tracking beforeunload/unload handlers since the two solutions are now diverging. beforeunload/unload handler tracking won&apos;t need this extra handling for parser mutations, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771446</commentid>
    <comment_count>34</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-19 20:52:55 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #32)
&gt; &gt; (In reply to comment #31)
&gt; &gt; &gt; Re-opened since this is blocked by bug 102576
&gt; &gt; 
&gt; &gt; So it seems we must override insertedInto() and removedFrom() to handle parser mutations that may remove us from the tree and put us elsewhere without actually doing a disconnect(). We could also make parserRemoveChild() decrement all ancestors by the removed child&apos;s count, and we can make parserAppendChild() and parserInsertBefore() increment all ancestors by our current count.
&gt; 
&gt; This makes me thing we should just jump to the final solution of tracking beforeunload/unload handlers since the two solutions are now diverging. beforeunload/unload handler tracking won&apos;t need this extra handling for parser mutations, right?

 There&apos;s no divergence, we still need this change for parser mutations. :)

Imagine the tree:

A
  \
   B
     \
      &lt;iframe src=&quot;javascript:onunload=...&quot;&gt;

and then the parser moves it into the tree:

C
  \
   D

it&apos;ll do so without unloading the frame so we still need the same logic that walks up the tree and decrements the frame count for B and A on parserRemove, and then increments the frame count for D and C on parserAppend.

We should fix the parser mutations and reland this patch since we need almost the exact same logic for unload handler counting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771503</commentid>
    <comment_count>35</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-19 22:03:11 -0800</bug_when>
    <thetext>javascript urls! I suppose the same effect could be achieved with a script element immediately after the iframe.

&gt; So it seems we must override insertedInto() and removedFrom() to handle parser mutations that may remove us from the tree and put us elsewhere without actually doing a disconnect(). We could also make parserRemoveChild() decrement all ancestors by the removed child&apos;s count, and we can make parserAppendChild() and parserInsertBefore() increment all ancestors by our current count.

The latter sounds better to me at first glance, but it&apos;s not clear to me which is the better way to handle this. For the most part, I don&apos;t think it would slow down parsing since it would just be a single if-statement on the hasRareData boolean the vast majority of the time. 

What would the insertedInto/removedFrom version look like? I suppose it would be like the first patch on this bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783495</commentid>
    <comment_count>36</comment_count>
      <attachid>177693</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-05 01:07:17 -0800</bug_when>
    <thetext>Created attachment 177693
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783497</commentid>
    <comment_count>37</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-05 01:07:57 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; Created an attachment (id=177693) [details]
&gt; Patch

Added the fix for parser based mutations and a test. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783864</commentid>
    <comment_count>38</comment_count>
      <attachid>177693</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-05 09:51:05 -0800</bug_when>
    <thetext>Comment on attachment 177693
Patch

This seems trivial to overfloe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783870</commentid>
    <comment_count>39</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-05 09:59:48 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; (From update of attachment 177693 [details])
&gt; This seems trivial to overfloe

You shouldn&apos;t be able to overflow it because of the Page::maxNumberOfFrames limit which is 1000. If you hit that we stop creating new Frame instances and your iframes fail to load. That&apos;s how ojan and I picked 10 bits for the count. See the COMPILE_ASSERT I added in NodeRareData.h :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799049</commentid>
    <comment_count>40</comment_count>
      <attachid>177693</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2013-01-02 16:13:32 -0800</bug_when>
    <thetext>Comment on attachment 177693
Patch

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

&gt; Source/WebCore/html/HTMLFrameOwnerElement.cpp:69
&gt; +    // FIXME: This causes an unload event in the subframe which could execute
&gt; +    // script that would reach into up into this document.

What&apos;s the fix here? Not clear to me what the problem is from this description.

&gt; LayoutTests/fast/frames/parser-append-subframe-count.html:15
&gt; +    This test should not cause crash or asserts decrementing the connected

nit: s/crash/crashes/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810047</commentid>
    <comment_count>41</comment_count>
      <attachid>183339</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-01-17 18:08:25 -0800</bug_when>
    <thetext>Created attachment 183339
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810053</commentid>
    <comment_count>42</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-01-17 18:10:32 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; (From update of attachment 177693 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=177693&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLFrameOwnerElement.cpp:69
&gt; &gt; +    // FIXME: This causes an unload event in the subframe which could execute
&gt; &gt; +    // script that would reach into up into this document.
&gt; 
&gt; What&apos;s the fix here? Not clear to me what the problem is from this description.

I added more explanation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810070</commentid>
    <comment_count>43</comment_count>
      <attachid>183344</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-01-17 18:32:51 -0800</bug_when>
    <thetext>Created attachment 183344
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810112</commentid>
    <comment_count>44</comment_count>
      <attachid>183344</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-17 19:23:26 -0800</bug_when>
    <thetext>Comment on attachment 183344
Patch for landing

Clearing flags on attachment: 183344

Committed r140090: &lt;http://trac.webkit.org/changeset/140090&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810113</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-17 19:23:33 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810168</commentid>
    <comment_count>46</comment_count>
      <attachid>183344</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-17 20:33:57 -0800</bug_when>
    <thetext>Comment on attachment 183344
Patch for landing

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

&gt; Source/WebCore/dom/NodeRareData.h:309
&gt; +    unsigned connectedSubframeCount() const { return m_connectedFrameCount; }

It would be helpful to assert that the cached value matches actual one here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810390</commentid>
    <comment_count>47</comment_count>
      <attachid>183344</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-01-18 02:05:35 -0800</bug_when>
    <thetext>Comment on attachment 183344
Patch for landing

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

&gt;&gt; Source/WebCore/dom/NodeRareData.h:309
&gt;&gt; +    unsigned connectedSubframeCount() const { return m_connectedFrameCount; }
&gt; 
&gt; It would be helpful to assert that the cached value matches actual one here.

Can you explain what you mean by cached value and actual value? I&apos;m not sure what you want to assert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810623</commentid>
    <comment_count>48</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-18 08:21:53 -0800</bug_when>
    <thetext>Is there a way to calculate connectedSubframeCount() by traversing the three? I&apos;d assert that this result matches m_connectedFrameCount.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810624</commentid>
    <comment_count>49</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-18 08:22:04 -0800</bug_when>
    <thetext>the tree*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810816</commentid>
    <comment_count>50</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-01-18 10:43:55 -0800</bug_when>
    <thetext>(In reply to comment #48)
&gt; Is there a way to calculate connectedSubframeCount() by traversing the tree? I&apos;d assert that this result matches m_connectedFrameCount.

https://bugs.webkit.org/show_bug.cgi?id=107302</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173419</attachid>
            <date>2012-11-09 17:51:46 -0800</date>
            <delta_ts>2012-11-15 00:27:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101821-20121109174953.patch</filename>
            <type>text/plain</type>
            <size>20061</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MTMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGFiYjYxMDIzNmY1ZGRi
NDNjMmI1ZjFjZWM3NmU1ZWRmMTZlZjhkNS4uM2ZjZDMxZDNjMWI4MWU3ZDdkZjU4NTgyZmIwYzk3
MWZiNDg5ZWY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTExLTA5ICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFRyYWNrIHN1YmZy
YW1lIGNvdW50IHRvIGF2b2lkIHRyYXZlcnNpbmcgdGhlIHRyZWUgd2hlbiB0aGVyZSdzIG5vIHN1
YmZyYW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAxODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QnVnIDEwMTYxOSBzaG93ZWQgYSA5LTE0JSBpbXByb3ZlbWVudCBmcm9tIG5vdCB3YWxraW5nIHRo
ZSBjaGlsZHJlbiBkdXJpbmcKKyAgICAgICAgcmVtb3ZlQ2hpbGQgbG9va2luZyBmb3IgZnJhbWVz
IHdoZW4gdGhlcmUncyBrbm93biB0byBiZSBubyBmcmFtZXMuIFRoZSBmaXgKKyAgICAgICAgaW4g
dGhhdCBidWcgb25seSBhdm9pZHMgdGhpcyB3YWxrIHdoZW4gdGhlIHdob2xlIGRvY3VtZW50IGhh
cyBubyBmcmFtZXMsIHRoaXMKKyAgICAgICAgcGF0Y2ggZXh0ZW5kcyBpdCB0byBza2lwIHRyYXZl
cnNpbmcgc3VidHJlZXMgdGhhdCBoYXZlIG5vIGlmcmFtZXMuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLCB0aGlzIGlzIGp1c3QgYSBwZXJmIHJlZmFjdG9yLgorCisgICAgICAgICogZG9tL0NvbnRh
aW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2lsbFJlbW92ZUNoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OndpbGxSZW1vdmVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpkaXNj
b25uZWN0U3ViZnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OmRpc2Nv
bm5lY3REZXNjZW5kYW50RnJhbWVzKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29y
aXRobXMuY3BwOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5oOgorICAg
ICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrQWNjZXB0Q2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aGFzQ29ubmVjdGVkU3ViZnJhbWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGU6OmluY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGVjcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVDb3VudCk6Cisg
ICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6Ok5vZGVSYXJlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlUmFyZURhdGE6OmluY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpkZWNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNv
dW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6aGFzQ29ubmVjdGVkU3ViZnJh
bWVzKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpkaWROb3RpZnlTdWJ0cmVlSW5zZXJ0aW9u
cyk6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50Ojp+SFRNTEZyYW1lT3duZXJFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudDo6cmVtb3ZlZEZyb20pOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50OjpkaXNjb25uZWN0Q29udGVu
dEZyYW1lKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oOgorICAgICAg
ICAoU3ViZnJhbWVMb2FkaW5nRGlzYWJsZXIpOgorICAgICAgICAgIE5ldyBjbGFzcyB0aGF0IGRp
c2FibGVzIHN1YmZyYW1lIGxvYWRpbmcgaW4gdHJlZXMgdGhhdCBhcmUgY3VycmVudGx5CisgICAg
ICAgICAgaW4gdGhlIG1pZGRsZSBvZiBiZWluZyByZW1vdmVkLiBUaGlzIG5lZWRzIHRvIGJlIHJl
ZmFjdG9yZWQgb3V0IGludG8KKyAgICAgICAgICBhIHNlcGFyYXRlIHBhdGNoLgorICAgICAgICAo
V2ViQ29yZTo6U3ViZnJhbWVMb2FkaW5nRGlzYWJsZXI6OlN1YmZyYW1lTG9hZGluZ0Rpc2FibGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGluZ0Rpc2FibGVyOjp+U3ViZnJhbWVM
b2FkaW5nRGlzYWJsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkaW5nRGlzYWJs
ZXI6OmNhbkxvYWRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTdWJmcmFtZUxvYWRpbmdEaXNh
Ymxlcjo6ZGlzYWJsZWRTdWJ0cmVlUm9vdHMpOgorCiAyMDEyLTExLTA5ICBBbGVjIEZsZXR0ICA8
YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmRleGVkREI6IENvbWJpbmUgSURC
QmFja2luZ1N0b3JlIGFuZCBJREJMZXZlbERCQmFja2luZ1N0b3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAKaW5kZXggYTYwNWNkMDhlYmRlN2ZiOWU3MjJkOTgzMjEwZmE0MmQ4ZDgz
NmJhOS4uZDM3NzQ4NzEyODk1YmVlMWQ1NzgzNmY0MmM3ZjdjNzFlNWMwYTI3MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Db250YWluZXJOb2RlLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisj
aW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJv
eC5oIgogI2luY2x1ZGUgIkluc2VydGlvblBvaW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmgiCkBAIC01OCw2ICs1OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
c3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZEluc2VydGlvbkV2ZW50cyhOb2RlKik7CiBzdGF0aWMg
dm9pZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOb2RlKik7CitzdGF0aWMgdm9pZCBkaXNj
b25uZWN0U3ViZnJhbWVzKE5vZGUqKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZVRyZWVBZnRlckluc2Vy
dGlvbihDb250YWluZXJOb2RlKiwgTm9kZSosIGJvb2wgc2hvdWxkTGF6eUF0dGFjaCk7CiAKIHR5
cGVkZWYgcGFpcjxSZWZQdHI8Tm9kZT4sIHVuc2lnbmVkPiBDYWxsYmFja1BhcmFtZXRlcnM7CkBA
IC0zNDcsNyArMzQ5LDkgQEAgc3RhdGljIHZvaWQgd2lsbFJlbW92ZUNoaWxkKE5vZGUqIGNoaWxk
KQogCiAgICAgZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMoY2hpbGQpOwogICAgIGNoaWxkLT5k
b2N1bWVudCgpLT5ub2RlV2lsbEJlUmVtb3ZlZChjaGlsZCk7IC8vIGUuZy4gbXV0YXRpb24gZXZl
bnQgbGlzdGVuZXIgY2FuIGNyZWF0ZSBhIG5ldyByYW5nZS4KLSAgICBDaGlsZEZyYW1lRGlzY29u
bmVjdG9yKGNoaWxkKS5kaXNjb25uZWN0KCk7CisKKyAgICBTdWJmcmFtZUxvYWRpbmdEaXNhYmxl
ciBkaXNhYmxlcihjaGlsZCk7CisgICAgZGlzY29ubmVjdFN1YmZyYW1lcyhjaGlsZCk7CiB9CiAK
IHN0YXRpYyB2b2lkIHdpbGxSZW1vdmVDaGlsZHJlbihDb250YWluZXJOb2RlKiBjb250YWluZXIp
CkBAIC0zNzMsMTIgKzM3NywzNSBAQCBzdGF0aWMgdm9pZCB3aWxsUmVtb3ZlQ2hpbGRyZW4oQ29u
dGFpbmVyTm9kZSogY29udGFpbmVyKQogICAgICAgICBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50
cyhjaGlsZCk7CiAgICAgfQogCi0gICAgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcihjb250YWluZXIs
IENoaWxkRnJhbWVEaXNjb25uZWN0b3I6OkRvTm90SW5jbHVkZVJvb3QpLmRpc2Nvbm5lY3QoKTsK
KyAgICBTdWJmcmFtZUxvYWRpbmdEaXNhYmxlciBkaXNhYmxlcihjb250YWluZXIpOworICAgIC8v
IFhYWDogLi4uCisgICAgZm9yIChOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IGNoaWxk
cmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxkcmVuLmVuZCgpOyBpdCsrKQorICAgICAgICBkaXNjb25u
ZWN0U3ViZnJhbWVzKGl0LT5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2Nvbm5lY3RTdWJm
cmFtZXMoTm9kZSogcm9vdCkKK3sKKyAgICBSZWZQdHI8Tm9kZT4gcHJvdGVjdChyb290KTsKKwor
ICAgIGlmIChyb290LT5pc0VsZW1lbnROb2RlKCkgJiYgcm9vdC0+aGFzQ29ubmVjdGVkU3ViZnJh
bWVzKCkgJiYgcm9vdC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQorICAgICAgICB0b0ZyYW1lT3du
ZXJFbGVtZW50KHJvb3QpLT5kaXNjb25uZWN0Q29udGVudEZyYW1lKCk7CisKKyAgICBmb3IgKE5v
ZGUqIGNoaWxkID0gcm9vdC0+Zmlyc3RDaGlsZCgpOyAgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5oYXNDb25uZWN0ZWRTdWJmcmFtZXMo
KSkKKyAgICAgICAgICAgIGRpc2Nvbm5lY3RTdWJmcmFtZXMoY2hpbGQpOworICAgIH0KKworICAg
IEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHJvb3QtPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVu
dChyb290KS0+c2hhZG93KCkgOiAwOworICAgIGlmIChzaGFkb3cpIHsKKyAgICAgICAgZm9yIChT
aGFkb3dSb290KiBzaGFkb3dSb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgc2hh
ZG93Um9vdDsgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQorICAg
ICAgICAgICAgZGlzY29ubmVjdFN1YmZyYW1lcyhzaGFkb3dSb290KTsKKyAgICB9CiB9CiAKIHZv
aWQgQ29udGFpbmVyTm9kZTo6ZGlzY29ubmVjdERlc2NlbmRhbnRGcmFtZXMoKQogewotICAgIENo
aWxkRnJhbWVEaXNjb25uZWN0b3IodGhpcykuZGlzY29ubmVjdCgpOworICAgIFN1YmZyYW1lTG9h
ZGluZ0Rpc2FibGVyIGRpc2FibGVyKHRoaXMpOworICAgIGRpc2Nvbm5lY3RTdWJmcmFtZXModGhp
cyk7CiB9CiAKIGJvb2wgQ29udGFpbmVyTm9kZTo6cmVtb3ZlQ2hpbGQoTm9kZSogb2xkQ2hpbGQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGVBbGdvcml0aG1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2Rl
QWxnb3JpdGhtcy5jcHAKaW5kZXggNTlkYWM3NDQ0NmZlMmU0ZDAxODY0ZjMzMDZhNjU4MjY4ZTZj
ZmIxZi4uNTNiMmExY2FlMWZhOWE2MDExN2ZiNjhmMmJjMjRjYjNiNTZmYTQ2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCkBAIC0xMDksMTYg
KzEwOSw0IEBAIHZvaWQgQ2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyOjpub3RpZnlEZXNjZW5kYW50
UmVtb3ZlZEZyb21UcmVlKENvbnRhaW5lck5vZGUqIG5vCiAgICAgfQogfQogCi12b2lkIENoaWxk
RnJhbWVEaXNjb25uZWN0b3I6OmNvbGxlY3REZXNjZW5kYW50KEVsZW1lbnRTaGFkb3cqIHNoYWRv
dykKLXsKLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93
Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkpCi0gICAgICAgIGNv
bGxlY3REZXNjZW5kYW50KHJvb3QsIEluY2x1ZGVSb290KTsKLX0KLQotdm9pZCBDaGlsZEZyYW1l
RGlzY29ubmVjdG9yOjpUYXJnZXQ6OmRpc2Nvbm5lY3QoKQotewotICAgIEFTU0VSVChpc1ZhbGlk
KCkpOwotICAgIHRvRnJhbWVPd25lckVsZW1lbnQobV9vd25lci5nZXQoKSktPmRpc2Nvbm5lY3RD
b250ZW50RnJhbWUoKTsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGVBbGdvcml0aG1zLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZUFsZ29yaXRobXMuaAppbmRleCA5ODQwODg5N2IxYjA0MWE4ZmJjYTQ3ZjJlOGQ5YzM1YzVjMzU2
MjkzLi5jNGU4ZDE0ZjFhMDI2MDcwYzQwZjAxYWViZTkxYTM4OWZkNGJjYjQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaApAQCAtMjQsNyArMjQsNiBA
QAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKQEAgLTI2MywxMDIgKzI2Miw2
IEBAIGlubGluZSB2b2lkIENoaWxkTm9kZVJlbW92YWxOb3RpZmllcjo6bm90aWZ5KE5vZGUqIG5v
ZGUpCiAgICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUodG9Db250YWluZXJOb2RlKG5v
ZGUpKTsKIH0KIAotY2xhc3MgQ2hpbGRGcmFtZURpc2Nvbm5lY3RvciB7Ci1wdWJsaWM6Ci0gICAg
ZW51bSBTaG91bGRJbmNsdWRlUm9vdCB7Ci0gICAgICAgIERvTm90SW5jbHVkZVJvb3QsCi0gICAg
ICAgIEluY2x1ZGVSb290Ci0gICAgfTsKLQotICAgIGV4cGxpY2l0IENoaWxkRnJhbWVEaXNjb25u
ZWN0b3IoTm9kZSogcm9vdCwgU2hvdWxkSW5jbHVkZVJvb3Qgc2hvdWxkSW5jbHVkZVJvb3QgPSBJ
bmNsdWRlUm9vdCkKLSAgICAgICAgOiBtX3Jvb3Qocm9vdCkKLSAgICB7Ci0gICAgICAgIC8vIElm
IHdlIGtub3cgdGhlcmUncyBubyBmcmFtZXMgdG8gZGlzY29ubmVjdCB0aGVuIGRvbid0IGJvdGhl
ciB0cmF2ZXJzaW5nCi0gICAgICAgIC8vIHRoZSB0cmVlIGxvb2tpbmcgZm9yIHRoZW0uCi0gICAg
ICAgIEZyYW1lKiBmcmFtZSA9IHJvb3QtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgICAgIGlm
IChmcmFtZSAmJiAhZnJhbWUtPnRyZWUoKS0+Zmlyc3RDaGlsZCgpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBjb2xsZWN0RGVzY2VuZGFudChtX3Jvb3QsIHNob3VsZEluY2x1ZGVSb290
KTsKLSAgICAgICAgcm9vdE5vZGVzKCkuYWRkKG1fcm9vdCk7Ci0gICAgfQotCi0gICAgfkNoaWxk
RnJhbWVEaXNjb25uZWN0b3IoKQotICAgIHsKLSAgICAgICAgcm9vdE5vZGVzKCkucmVtb3ZlKG1f
cm9vdCk7Ci0gICAgfQotCi0gICAgdm9pZCBkaXNjb25uZWN0KCk7Ci0KLSAgICBzdGF0aWMgYm9v
bCBub2RlSGFzRGlzY29ubmVjdG9yKE5vZGUqKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNvbGxl
Y3REZXNjZW5kYW50KE5vZGUqIHJvb3QsIFNob3VsZEluY2x1ZGVSb290KTsKLSAgICB2b2lkIGNv
bGxlY3REZXNjZW5kYW50KEVsZW1lbnRTaGFkb3cqKTsKLQotICAgIHN0YXRpYyBIYXNoU2V0PE5v
ZGUqPiYgcm9vdE5vZGVzKCkKLSAgICB7Ci0gICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFz
aFNldDxOb2RlKj4sIG5vZGVzLCAoKSk7Ci0gICAgICAgIHJldHVybiBub2RlczsKLSAgICB9Ci0K
LSAgICBjbGFzcyBUYXJnZXQgewotICAgIHB1YmxpYzoKLSAgICAgICAgVGFyZ2V0KEhUTUxGcmFt
ZU93bmVyRWxlbWVudCogZWxlbWVudCkKLSAgICAgICAgICAgIDogbV9vd25lcihlbGVtZW50KQot
ICAgICAgICAgICAgLCBtX293bmVyUGFyZW50KGVsZW1lbnQtPnBhcmVudE5vZGUoKSkKLSAgICAg
ICAgewotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4g
bV9vd25lci0+cGFyZW50Tm9kZSgpID09IG1fb3duZXJQYXJlbnQ7IH0KLSAgICAgICAgdm9pZCBk
aXNjb25uZWN0KCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SFRNTEZyYW1lT3du
ZXJFbGVtZW50PiBtX293bmVyOwotICAgICAgICBDb250YWluZXJOb2RlKiBtX293bmVyUGFyZW50
OwotICAgIH07Ci0KLSAgICBWZWN0b3I8VGFyZ2V0LCAxMD4gbV9saXN0OwotICAgIE5vZGUqIG1f
cm9vdDsKLX07Ci0KLWlubGluZSB2b2lkIENoaWxkRnJhbWVEaXNjb25uZWN0b3I6OmNvbGxlY3RE
ZXNjZW5kYW50KE5vZGUqIHJvb3QsIFNob3VsZEluY2x1ZGVSb290IHNob3VsZEluY2x1ZGVSb290
KQotewotICAgIGZvciAoTm9kZSogbm9kZSA9IHNob3VsZEluY2x1ZGVSb290ID09IEluY2x1ZGVS
b290ID8gcm9vdCA6IHJvb3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsKLSAgICAgICAgICAgIG5vZGUg
PSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3QpKSB7Ci0gICAgICAgIGlmICghbm9kZS0+aXNF
bGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7Ci0gICAgICAgIGlmIChlbGVtZW50LT5oYXNDdXN0b21D
YWxsYmFja3MoKSAmJiBlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpCi0gICAgICAgICAg
ICBtX2xpc3QuYXBwZW5kKHRvRnJhbWVPd25lckVsZW1lbnQoZWxlbWVudCkpOwotICAgICAgICBp
ZiAoRWxlbWVudFNoYWRvdyogc2hhZG93ID0gZWxlbWVudC0+c2hhZG93KCkpCi0gICAgICAgICAg
ICBjb2xsZWN0RGVzY2VuZGFudChzaGFkb3cpOwotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgQ2hp
bGRGcmFtZURpc2Nvbm5lY3Rvcjo6ZGlzY29ubmVjdCgpCi17Ci0gICAgdW5zaWduZWQgc2l6ZSA9
IG1fbGlzdC5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICBUYXJnZXQmIHRhcmdldCA9IG1fbGlzdFtpXTsKLSAgICAgICAgaWYgKHRhcmdl
dC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICB0YXJnZXQuZGlzY29ubmVjdCgpOwotICAgIH0KLX0K
LQotaW5saW5lIGJvb2wgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6bm9kZUhhc0Rpc2Nvbm5lY3Rv
cihOb2RlKiBub2RlKQotewotICAgIEhhc2hTZXQ8Tm9kZSo+JiBub2RlcyA9IHJvb3ROb2Rlcygp
OwotCi0gICAgaWYgKG5vZGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIGlmIChu
b2Rlcy5jb250YWlucyhub2RlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBDb250
YWluZXJOb2RlQWxnb3JpdGhtc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggMmRjY2EyNmFjODU0NDY4
ZGE5NzZkMTc5YzZkNDEwZjJhODQ3M2NiZC4uMTQxOTcyYThmZjA0YjlmZTc3ZTgzODQ2YmYxMDU2
ZWIwMGQyODgxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMTE5NSwxMSArMTE5NSw2IEBAIHN0YXRp
YyB2b2lkIGNoZWNrQWNjZXB0Q2hpbGQoTm9kZSogbmV3UGFyZW50LCBOb2RlKiBuZXdDaGlsZCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgaWYgKG5ld1BhcmVudC0+aW5Eb2N1bWVudCgp
ICYmIENoaWxkRnJhbWVEaXNjb25uZWN0b3I6Om5vZGVIYXNEaXNjb25uZWN0b3IobmV3UGFyZW50
KSkgewotICAgICAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KIH0KIAogdm9pZCBOb2RlOjpjaGVja1JlcGxhY2VDaGlsZChOb2RlKiBu
ZXdDaGlsZCwgTm9kZSogb2xkQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMjgyOSw2ICsy
ODI0LDIzIEBAIHZvaWQgTm9kZTo6dGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpIGNv
bnN0CiAgICAgcmFuZ2UtPnRleHRSZWN0cyhyZWN0cyk7CiB9CiAKK2Jvb2wgTm9kZTo6aGFzQ29u
bmVjdGVkU3ViZnJhbWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSAmJiBy
YXJlRGF0YSgpLT5oYXNDb25uZWN0ZWRTdWJmcmFtZXMoKTsKK30KKwordm9pZCBOb2RlOjppbmNy
ZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkKK3sKKyAgICBBU1NFUlQoaXNDb250YWluZXJO
b2RlKCkpOworICAgIGVuc3VyZVJhcmVEYXRhKCktPmluY3JlbWVudENvbm5lY3RlZFN1YmZyYW1l
Q291bnQoKTsKK30KKwordm9pZCBOb2RlOjpkZWNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50
KCkKK3sKKyAgICBBU1NFUlQoaGFzQ29ubmVjdGVkU3ViZnJhbWVzKCkpOworICAgIHJhcmVEYXRh
KCktPmRlY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQoKTsKK30KKwogdm9pZCBOb2RlOjpy
ZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCkKIHsKICAgICBzZXRIYXNTY29wZWRIVE1MU3R5
bGVDaGlsZCh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IDY2NjQ1ZjQ4ZjVlMmQ0MzQ1YWUyNDJmNjdi
ZWFmOTY1NTJlMzEzZDYuLjcxNjIwODdmZTczMzNiNmNiNmQ4NWE3YWJlNTc2NjU2OTE0YzRhNzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaApAQCAtNjg5LDYgKzY4OSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHRl
eHRSZWN0cyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdDsKIAorICAgIGJvb2wgaGFzQ29ubmVjdGVk
U3ViZnJhbWVzKCkgY29uc3Q7CisgICAgdm9pZCBpbmNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNv
dW50KCk7CisgICAgdm9pZCBkZWNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KCk7CisKIHBy
aXZhdGU6CiAgICAgZW51bSBOb2RlRmxhZ3MgewogICAgICAgICBJc1RleHRGbGFnID0gMSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlUmFyZURhdGEuaAppbmRleCBjNTZkMDZmOGE4YjA4NjdkYWNkOGNjZDNmNzk2
ZDcxODY0YzU2Mjc5Li40MGFkMzQ0YTA4Y2JmNzI3MTVmMjIyOTE3NGE2Yzg0ODk2Yzk0YmZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCkBAIC0xOTAsNiArMTkwLDcgQEAgcHVibGljOgog
ICAgICAgICAsIG1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2goZmFs
c2UpCiAgICAgICAgICwgbV9zdHlsZUFmZmVjdGVkQnlFbXB0eShmYWxzZSkKICAgICAgICAgLCBt
X2lzSW5DYW52YXNTdWJ0cmVlKGZhbHNlKQorICAgICAgICAsIG1fY29ubmVjdGVkRnJhbWVDb3Vu
dCgwKQogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICAgICAgLCBtX2NvbnRhaW5zRnVs
bFNjcmVlbkVsZW1lbnQoZmFsc2UpCiAjZW5kaWYKQEAgLTI5OSw2ICszMDAsMTAgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8q
KSBjb25zdDsKIAorICAgIHZvaWQgaW5jcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVDb3VudCgpIHsg
bV9jb25uZWN0ZWRGcmFtZUNvdW50Kys7IH0KKyAgICB2b2lkIGRlY3JlbWVudENvbm5lY3RlZFN1
YmZyYW1lQ291bnQoKSB7IG1fY29ubmVjdGVkRnJhbWVDb3VudC0tOyB9CisgICAgYm9vbCBoYXND
b25uZWN0ZWRTdWJmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2Nvbm5lY3RlZEZyYW1lQ291bnQ7
IH0KKwogcHJvdGVjdGVkOgogICAgIC8vIGZvciBFbGVtZW50UmFyZURhdGEKICAgICBib29sIG5l
ZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKCkgY29uc3QgeyByZXR1cm4g
bV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaDsgfQpAQCAtMzIyLDYg
KzMyNyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRl
U29vbkFmdGVyQXR0YWNoIDogMTsKICAgICBib29sIG1fc3R5bGVBZmZlY3RlZEJ5RW1wdHkgOiAx
OwogICAgIGJvb2wgbV9pc0luQ2FudmFzU3VidHJlZSA6IDE7CisgICAgdW5zaWduZWQgbV9jb25u
ZWN0ZWRGcmFtZUNvdW50IDogMTA7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIGJv
b2wgbV9jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50IDogMTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAppbmRleCBkNzg4MmYzN2MzY2YyMGM1
ZjBiNzk5N2RmNTVlODUxZDcwZDExN2I1Li45NzViMzAyNzU0MmM5YjYxYTg5MDRkM2U3ZTdmZjEw
NTliOGYwM2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1l
bnRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNl
LmNwcApAQCAtMTcwLDYgKzE3MCw5IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmRpZE5v
dGlmeVN1YnRyZWVJbnNlcnRpb25zKENvbnRhaW5lck5vZGUqKQogICAgIGlmICghZG9jdW1lbnQo
KS0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKCFTdWJmcmFtZUxvYWRpbmdE
aXNhYmxlcjo6Y2FuTG9hZEZyYW1lKHRoaXMpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBK
YXZhU2NyaXB0IGluIHNyYz1qYXZhc2NyaXB0OiBhbmQgYmVmb3Jlb25sb2FkIGNhbiBhY2Nlc3Mg
dGhlIHJlbmRlcmVyCiAgICAgLy8gZHVyaW5nIGF0dHJpYnV0ZSBwYXJzaW5nICpiZWZvcmUqIHRo
ZSBub3JtYWwgcGFyc2VyIG1hY2hpbmVyeSB3b3VsZAogICAgIC8vIGF0dGFjaCB0aGUgZWxlbWVu
dC4gVG8gc3VwcG9ydCB0aGlzLCB3ZSBsYXp5QXR0YWNoIGhlcmUsIGJ1dCBvbmx5CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKaW5kZXggNTYwZjM4Yjk2
NzljYTIyN2M0NjI2NjBmOWI0ZjI5Y2ZkYWQwZDZhZi4uZThkMzZhNGIyMjk5YzMxMDEyMWIzZjc0
OGM0MzJmNzFhNDEyNDUyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJh
bWVPd25lckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3du
ZXJFbGVtZW50LmNwcApAQCAtNDAsNiArNDAsMzggQEAgSFRNTEZyYW1lT3duZXJFbGVtZW50OjpI
VE1MRnJhbWVPd25lckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW0K
IHsKIH0KIAorSFRNTEZyYW1lT3duZXJFbGVtZW50Ojp+SFRNTEZyYW1lT3duZXJFbGVtZW50KCkK
K3sKKyAgICBpZiAobV9jb250ZW50RnJhbWUpCisgICAgICAgIG1fY29udGVudEZyYW1lLT5kaXNj
b25uZWN0T3duZXJFbGVtZW50KCk7Cit9CisKK05vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJl
cXVlc3QgSFRNTEZyYW1lT3duZXJFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSog
aW5zZXJ0aW9uUG9pbnQpCit7CisgICAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVz
dCByZXF1ZXN0ID0gSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7CisK
KyAgICBpZiAoIWluc2VydGlvblBvaW50LT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBy
ZXF1ZXN0OworCisgICAgaW5jcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVDb3VudCgpOworICAgIGZv
ciAoQ29udGFpbmVyTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRP
ckhvc3ROb2RlKCkpCisgICAgICAgIG5vZGUtPmluY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291
bnQoKTsKKworICAgIHJldHVybiByZXF1ZXN0OworfQorCit2b2lkIEhUTUxGcmFtZU93bmVyRWxl
bWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9pbnQpCit7CisgICAg
SFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKKworICAgIGlmICghaGFz
Q29ubmVjdGVkU3ViZnJhbWVzKCkgfHwgIWluc2VydGlvblBvaW50LT5pbkRvY3VtZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGRlY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQoKTsK
KyAgICBmb3IgKENvbnRhaW5lck5vZGUqIG5vZGUgPSBpbnNlcnRpb25Qb2ludDsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkKKyAgICAgICAgbm9kZS0+ZGVjcmVtZW50Q29u
bmVjdGVkU3ViZnJhbWVDb3VudCgpOworfQorCiBSZW5kZXJQYXJ0KiBIVE1MRnJhbWVPd25lckVs
ZW1lbnQ6OnJlbmRlclBhcnQoKSBjb25zdAogewogICAgIC8vIEhUTUxPYmplY3RFbGVtZW50IGFu
ZCBIVE1MRW1iZWRFbGVtZW50IG1heSByZXR1cm4gYXJiaXRyYXJ5IHJlbmRlcmVycwpAQCAtNTEs
OCArODMsOSBAQCBSZW5kZXJQYXJ0KiBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnJlbmRlclBhcnQo
KSBjb25zdAogCiB2b2lkIEhUTUxGcmFtZU93bmVyRWxlbWVudDo6ZGlzY29ubmVjdENvbnRlbnRG
cmFtZSgpCiB7Ci0gICAgQVNTRVJUKGhhc0N1c3RvbUNhbGxiYWNrcygpKTsKLSAgICAvLyBUaGlz
IGNhdXNlcyBhbiB1bmxvYWQgZXZlbnQgdGh1cyBjYW5ub3QgYmUgYSBwYXJ0IG9mIHJlbW92ZWRG
cm9tKCkuCisgICAgLy8gVGhpcyBjYXVzZXMgYW4gdW5sb2FkIGV2ZW50IGluIHRoZSBzdWJmcmFt
ZSBzbyBpdCBjYW5ub3QgYmUgYSBwYXJ0IG9mCisgICAgLy8gcmVtb3ZlZEZyb20oKSBiZWNhdXNl
IHRoZSB1bmxvYWQgaGFuZGxlciBpbiBhIHNhbWUgZG9tYWluIGZyYW1lIG11c3QgYmUKKyAgICAv
LyBhYmxlIHRvIHJlYWNoIHVwd2FyZCBpbnRvIHRoZSBvd25lciBkb2N1bWVudC4KICAgICBpZiAo
RnJhbWUqIGZyYW1lID0gY29udGVudEZyYW1lKCkpIHsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBw
cm90ZWN0KGZyYW1lKTsKICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5mcmFtZURldGFjaGVkKCk7
CkBAIC02MCwxMiArOTMsNiBAQCB2b2lkIEhUTUxGcmFtZU93bmVyRWxlbWVudDo6ZGlzY29ubmVj
dENvbnRlbnRGcmFtZSgpCiAgICAgfQogfQogCi1IVE1MRnJhbWVPd25lckVsZW1lbnQ6On5IVE1M
RnJhbWVPd25lckVsZW1lbnQoKQotewotICAgIGlmIChtX2NvbnRlbnRGcmFtZSkKLSAgICAgICAg
bV9jb250ZW50RnJhbWUtPmRpc2Nvbm5lY3RPd25lckVsZW1lbnQoKTsKLX0KLQogRG9jdW1lbnQq
IEhUTUxGcmFtZU93bmVyRWxlbWVudDo6Y29udGVudERvY3VtZW50KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9jb250ZW50RnJhbWUgPyBtX2NvbnRlbnRGcmFtZS0+ZG9jdW1lbnQoKSA6IDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAppbmRleCA1ZTI0MjZh
N2Q5ZTZlNjNkYTM4NjZiYjM5MmRjYWYwMzI2NTRiODEwLi4wMDA3YjQwZDU5OTMyYWZkOTI5ZDQ3
M2NjZGUxZDk1ZjQ5OTJmYzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
cmFtZU93bmVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3du
ZXJFbGVtZW50LmgKQEAgLTQyLDYgKzQyLDkgQEAgcHVibGljOgogICAgIERPTVdpbmRvdyogY29u
dGVudFdpbmRvdygpIGNvbnN0OwogICAgIERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQoKSBjb25z
dDsKIAorICAgIHZpcnR1YWwgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZElu
dG8oQ29udGFpbmVyTm9kZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJv
bShDb250YWluZXJOb2RlKikgT1ZFUlJJREU7CisKICAgICAvLyBNb3N0IHN1YmNsYXNzZXMgdXNl
IFJlbmRlclBhcnQgKGVpdGhlciBSZW5kZXJFbWJlZGRlZE9iamVjdCBvciBSZW5kZXJJRnJhbWUp
CiAgICAgLy8gZXhjZXB0IGZvciBIVE1MT2JqZWN0RWxlbWVudCBhbmQgSFRNTEVtYmVkRWxlbWVu
dCB3aGljaCBtYXkgcmV0dXJuIGFueQogICAgIC8vIFJlbmRlck9iamVjdCB3aGVuIHVzaW5nIGZh
bGxiYWNrIGNvbnRlbnQuCkBAIC03Niw2ICs3OSwzOCBAQCBpbmxpbmUgSFRNTEZyYW1lT3duZXJF
bGVtZW50KiB0b0ZyYW1lT3duZXJFbGVtZW50KE5vZGUqIG5vZGUpCiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KG5vZGUpOwogfQogCitjbGFzcyBTdWJmcmFt
ZUxvYWRpbmdEaXNhYmxlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU3ViZnJhbWVMb2FkaW5n
RGlzYWJsZXIoTm9kZSogcm9vdCkKKyAgICAgICAgOiBtX3Jvb3Qocm9vdCkKKyAgICB7CisgICAg
ICAgIGRpc2FibGVkU3VidHJlZVJvb3RzKCkuYWRkKG1fcm9vdCk7CisgICAgfQorCisgICAgflN1
YmZyYW1lTG9hZGluZ0Rpc2FibGVyKCkKKyAgICB7CisgICAgICAgIGRpc2FibGVkU3VidHJlZVJv
b3RzKCkucmVtb3ZlKG1fcm9vdCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgY2FuTG9hZEZy
YW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIpCisgICAgeworICAgICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBvd25lcjsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgeworICAg
ICAgICAgICAgaWYgKGRpc2FibGVkU3VidHJlZVJvb3RzKCkuY29udGFpbnMobm9kZSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgSGFzaFNldDxOb2RlKj4mIGRpc2FibGVk
U3VidHJlZVJvb3RzKCkKKyAgICB7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNl
dDxOb2RlKj4sIG5vZGVzLCAoKSk7CisgICAgICAgIHJldHVybiBub2RlczsKKyAgICB9CisKKyAg
ICBOb2RlKiBtX3Jvb3Q7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBIVE1MRnJhbWVPd25lckVsZW1lbnRfaApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDMxMTM2NDg0ODVjMDc3NTJmYTlhNzUx
NWRlMTRlZGQ2ZDFjYzgxMzMuLmYzMmJmYzE4ZDliZTc3ZWM1Mjk5ODgyZGQ4ZjQwYmIwODhiNDdl
MjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0xMS0wOSAgRWxsaW90dCBTcHJlaG4gIDxl
c3ByZWhuQGNocm9taXVtLm9yZz4KKworICAgICAgICBUcmFjayBzdWJmcmFtZSBjb3VudCB0byBh
dm9pZCB0cmF2ZXJzaW5nIHRoZSB0cmVlIHdoZW4gdGhlcmUncyBubyBzdWJmcmFtZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTgyMQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5m
b3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFz
ZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAg
ICogZmFzdC9mcmFtZXMvb3V0LW9mLWRvY3VtZW50LWlmcmFtZS1oYXMtY2hpbGQtZnJhbWUtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZnJhbWVzL291dC1v
Zi1kb2N1bWVudC1pZnJhbWUtaGFzLWNoaWxkLWZyYW1lLWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4K
KwogMjAxMi0xMS0wOSAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8cmFwaGFlbC5rdWJvLmRhLmNv
c3RhQGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXSBVbnJldmlld2VkIGdhcmRlbmluZy4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL291dC1vZi1kb2N1bWVudC1pZnJhbWUt
aGFzLWNoaWxkLWZyYW1lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL291
dC1vZi1kb2N1bWVudC1pZnJhbWUtaGFzLWNoaWxkLWZyYW1lLWV4cGVjdGVkLnR4dAppbmRleCBh
ZWIzM2IzNWJkZjFjM2ViMTA3OTI0NjkxZDA1MzZhNzhiYmZkYjlmLi5hZTFmNDFiZWE1MTRkOTc2
YmU4N2YzOWQzNzFjMTBhMzA4MzUzMjZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zy
YW1lcy9vdXQtb2YtZG9jdW1lbnQtaWZyYW1lLWhhcy1jaGlsZC1mcmFtZS1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvb3V0LW9mLWRvY3VtZW50LWlmcmFtZS1oYXMt
Y2hpbGQtZnJhbWUtZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsMyBAQAotQ09OU09MRSBNRVNTQUdF
OiBsaW5lIDE5OiBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IERPTSBFeGNlcHRpb24gNzog
QW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBtb2RpZnkgYW4gb2JqZWN0IHdoZXJlIG1vZGlmaWNhdGlv
bnMgYXJlIG5vdCBhbGxvd2VkLgogVGhpcyB0ZXN0cyB0aGF0IHNldmVyYWwgd2F5cyBvZiBtYWtp
bmcgYW4gaWZyYW1lIHRoYXQgaXNuJ3QgaW5zZXJ0ZWQgaW50byBhIGRvY3VtZW50IHRyZWUgYnV0
IGhhcyBhIGNoaWxkIGZyYW1lIHdpbGwgZmFpbC4KIAogT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9mcmFtZXMv
b3V0LW9mLWRvY3VtZW50LWlmcmFtZS1oYXMtY2hpbGQtZnJhbWUtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9mcmFtZXMvb3V0LW9mLWRvY3VtZW50LWlm
cmFtZS1oYXMtY2hpbGQtZnJhbWUtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkMThmMjU0ZWFhYTUzMzlhMTBkMWMxYWQzMzRkMTI0ZDNhZWQyOTExLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2Zhc3QvZnJhbWVzL291dC1vZi1kb2N1bWVudC1pZnJhbWUtaGFzLWNoaWxk
LWZyYW1lLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLUNPTlNP
TEUgTUVTU0FHRTogbGluZSAxOTogVW5jYXVnaHQgRXJyb3I6IE5PX01PRElGSUNBVElPTl9BTExP
V0VEX0VSUjogRE9NIEV4Y2VwdGlvbiA3Ci1UaGlzIHRlc3RzIHRoYXQgc2V2ZXJhbCB3YXlzIG9m
IG1ha2luZyBhbiBpZnJhbWUgdGhhdCBpc24ndCBpbnNlcnRlZCBpbnRvIGEgZG9jdW1lbnQgdHJl
ZSBidXQgaGFzIGEgY2hpbGQgZnJhbWUgd2lsbCBmYWlsLgotCi1PbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCi0KLQotUEFTUyB0YXJnZXRGcmFtZTEuY29udGVudFdpbmRvdyA9PSB1bmRlZmluZWQg
aXMgdHJ1ZQotUEFTUyB0YXJnZXRGcmFtZTIuY29udGVudFdpbmRvdyA9PSB1bmRlZmluZWQgaXMg
dHJ1ZQotUEFTUyB0YXJnZXRGcmFtZTMuY29udGVudFdpbmRvdyA9PSB1bmRlZmluZWQgaXMgdHJ1
ZQotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174365</attachid>
            <date>2012-11-15 00:27:52 -0800</date>
            <delta_ts>2012-11-15 10:26:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101821-20121115002550.patch</filename>
            <type>text/plain</type>
            <size>12136</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0NzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDNhOWVhMDQ5MWZlYmFh
Mzk4ODI1YzRjYTU5M2M1MDRjYTMyMTBmNC4uNWE3ZGUzNDk1Mjc2ZDBhZmJiMWU4NzVkMDNjMTU5
MjQ2NTc1YzA0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTExLTE0ICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFRyYWNrIHN1YmZy
YW1lIGNvdW50IHRvIGF2b2lkIHRyYXZlcnNpbmcgdGhlIHRyZWUgd2hlbiB0aGVyZSdzIG5vIHN1
YmZyYW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAxODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QnVnIDEwMTYxOSBzaG93ZWQgYSA5LTE0JSBpbXByb3ZlbWVudCBmcm9tIG5vdCB3YWxraW5nIHRo
ZSBjaGlsZHJlbiBkdXJpbmcKKyAgICAgICAgcmVtb3ZlQ2hpbGQgbG9va2luZyBmb3IgZnJhbWVz
IHdoZW4gdGhlcmUncyBrbm93biB0byBiZSBubyBmcmFtZXMuIFRoZSBmaXgKKyAgICAgICAgaW4g
dGhhdCBidWcgb25seSBhdm9pZHMgdGhpcyB3YWxrIHdoZW4gdGhlIHdob2xlIGRvY3VtZW50IGhh
cyBubyBmcmFtZXMsIHRoaXMKKyAgICAgICAgcGF0Y2ggZXh0ZW5kcyBpdCB0byBza2lwIHRyYXZl
cnNpbmcgc3VidHJlZXMgdGhhdCBoYXZlIG5vIGlmcmFtZXMgYnkgaG9va2luZworICAgICAgICB0
aGUgZnJhbWUgYXNzaWdubWVudCB0byB3YWxrIHVwIHRoZSB0cmVlIGFuZCBrZWVwIHRyYWNrIG9m
IHRoZSBjb3VudCBvZiBmcmFtZXMKKyAgICAgICAgaW4gdGhlIHN1YnRyZWUgb24gY29udGVudEZy
YW1lIGFzc2lnbm1lbnQgYW5kIHRoZW4gZGVjcmVtZW50IGl0IG9uIGRpc2Nvbm5lY3QuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLCB0aGlzIGlzIGp1c3QgYSBwZXJmIHJlZmFjdG9yLgorCisgICAg
ICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2lsbFJlbW92
ZUNoaWxkcmVuKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdEZyYW1lT3du
ZXJzKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNoaWxkRnJhbWVEaXNjb25uZWN0b3I6OkNoaWxkRnJhbWVEaXNjb25uZWN0b3Ip
OgorICAgICAgICAoQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpD
aGlsZEZyYW1lRGlzY29ubmVjdG9yOjpjb2xsZWN0RnJhbWVPd25lcnMpOgorICAgICAgICAgIFJl
bmFtZWQgZnJvbSBjb2xsZWN0RGVzY2VuZGFudCgpIHRvIGJldHRlciByZWZsZWN0IHdoYXQgaXQg
cmVhbGx5IGRvZXMuCisgICAgICAgIChXZWJDb3JlOjpDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpk
aXNjb25uZWN0Q29sbGVjdGVkRnJhbWVPd25lcnMpOgorICAgICAgICAgIFJlbmFtZWQgZnJvbSBk
aXNjb25uZWN0KCkgc28gd2UgY2FuIHVzZSB0aGF0IG1ldGhvZCBuYW1lIHRvIGdldCByaWQKKyAg
ICAgICAgICBvZiB0aGUgZW51bSBhbmQgbWFrZSB0aGUgY29kZSBtb3JlIGNsZWFyLgorICAgICAg
ICAoV2ViQ29yZTo6Q2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6ZGlzY29ubmVjdENoaWxkcmVuKToK
KyAgICAgICAgICBNZXRob2Qgd2l0aCB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgb2xkIGVudW0g
d2l0aCBEb05vdEluY2x1ZGVSb290LgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRGcmFtZURpc2Nv
bm5lY3Rvcjo6ZGlzY29ubmVjdCk6CisgICAgICAgICAgTWV0aG9kIHdpdGggdGhlIHNhbWUgYmVo
YXZpb3IgYXMgdGhlIG9sZCBlbnVtIHdpdGggSW5jbHVkZVJvb3QuCisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29ubmVjdGVkU3ViZnJhbWVDb3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppbmNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRlY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291
bnQpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgICogZG9tL05vZGVSYXJlRGF0YS5o
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpjb25uZWN0ZWRTdWJmcmFtZUNvdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6aW5jcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVDb3Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6OmRlY3JlbWVudENvbm5lY3RlZFN1
YmZyYW1lQ291bnQpOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudDo6c2V0Q29udGVudEZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudDo6ZGlzY29ubmVjdENv
bnRlbnRGcmFtZSk6CisKIDIwMTItMTEtMTQgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtWOF0gS2lsbCAkaW1wbENsYXNzTmFtZSBmcm9tIENvZGVHZW5l
cmF0b3JWOC5wbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCmluZGV4IGE2MDVjZDA4
ZWJkZTdmYjllNzIyZDk4MzIxMGZhNDJkOGQ4MzZiYTkuLjcwNjQ1YzRjYTFkOTZkMGNhOGNlM2Ez
MDMyZTI5MmQ0NDM1OWI3NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKQEAg
LTM3Myw3ICszNzMsNyBAQCBzdGF0aWMgdm9pZCB3aWxsUmVtb3ZlQ2hpbGRyZW4oQ29udGFpbmVy
Tm9kZSogY29udGFpbmVyKQogICAgICAgICBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhjaGls
ZCk7CiAgICAgfQogCi0gICAgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcihjb250YWluZXIsIENoaWxk
RnJhbWVEaXNjb25uZWN0b3I6OkRvTm90SW5jbHVkZVJvb3QpLmRpc2Nvbm5lY3QoKTsKKyAgICBD
aGlsZEZyYW1lRGlzY29ubmVjdG9yKGNvbnRhaW5lcikuZGlzY29ubmVjdENoaWxkcmVuKCk7CiB9
CiAKIHZvaWQgQ29udGFpbmVyTm9kZTo6ZGlzY29ubmVjdERlc2NlbmRhbnRGcmFtZXMoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAKaW5kZXggNTlk
YWM3NDQ0NmZlMmU0ZDAxODY0ZjMzMDZhNjU4MjY4ZTZjZmIxZi4uZGJkMDI2YzZlNDZlNTUyNmJh
MDYxNTY3NDIzYjRkZjYxOTU0NGEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFp
bmVyTm9kZUFsZ29yaXRobXMuY3BwCkBAIC0xMDksMTAgKzEwOSwxMCBAQCB2b2lkIENoaWxkTm9k
ZVJlbW92YWxOb3RpZmllcjo6bm90aWZ5RGVzY2VuZGFudFJlbW92ZWRGcm9tVHJlZShDb250YWlu
ZXJOb2RlKiBubwogICAgIH0KIH0KIAotdm9pZCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpjb2xs
ZWN0RGVzY2VuZGFudChFbGVtZW50U2hhZG93KiBzaGFkb3cpCit2b2lkIENoaWxkRnJhbWVEaXNj
b25uZWN0b3I6OmNvbGxlY3RGcmFtZU93bmVycyhFbGVtZW50U2hhZG93KiBzaGFkb3cpCiB7CiAg
ICAgZm9yIChTaGFkb3dSb290KiByb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsg
cm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQotICAgICAgICBjb2xsZWN0RGVz
Y2VuZGFudChyb290LCBJbmNsdWRlUm9vdCk7CisgICAgICAgIGNvbGxlY3RGcmFtZU93bmVycyhy
b290KTsKIH0KIAogdm9pZCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpUYXJnZXQ6OmRpc2Nvbm5l
Y3QoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0
aG1zLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAppbmRl
eCAyMTlhNWQ0OTYwY2JiMmUzMzRmM2ZkMWRkZjhhOTk5Y2EwOTk3NTJiLi42ODY3ODE4YmU2Zjkz
N2M0NjUxYzk3MjViMmMxMzA3MjdlM2ZkMTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZUFsZ29yaXRobXMuaApAQCAtMjY1LDMzICsyNjUsMTggQEAgaW5saW5lIHZvaWQg
Q2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyOjpub3RpZnkoTm9kZSogbm9kZSkKIAogY2xhc3MgQ2hp
bGRGcmFtZURpc2Nvbm5lY3RvciB7CiBwdWJsaWM6Ci0gICAgZW51bSBTaG91bGRJbmNsdWRlUm9v
dCB7Ci0gICAgICAgIERvTm90SW5jbHVkZVJvb3QsCi0gICAgICAgIEluY2x1ZGVSb290Ci0gICAg
fTsKLQotICAgIGV4cGxpY2l0IENoaWxkRnJhbWVEaXNjb25uZWN0b3IoTm9kZSogcm9vdCwgU2hv
dWxkSW5jbHVkZVJvb3Qgc2hvdWxkSW5jbHVkZVJvb3QgPSBJbmNsdWRlUm9vdCkKKyAgICBleHBs
aWNpdCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yKE5vZGUqIHJvb3QpCiAgICAgICAgIDogbV9yb290
KHJvb3QpCiAgICAgewotICAgICAgICAvLyBJZiB3ZSBrbm93IHRoZXJlJ3Mgbm8gZnJhbWVzIHRv
IGRpc2Nvbm5lY3QgdGhlbiBkb24ndCBib3RoZXIgdHJhdmVyc2luZwotICAgICAgICAvLyB0aGUg
dHJlZSBsb29raW5nIGZvciB0aGVtLgotICAgICAgICBGcmFtZSogZnJhbWUgPSByb290LT5kb2N1
bWVudCgpLT5mcmFtZSgpOwotICAgICAgICBpZiAoZnJhbWUgJiYgIWZyYW1lLT50cmVlKCktPmZp
cnN0Q2hpbGQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY29sbGVjdERlc2NlbmRh
bnQobV9yb290LCBzaG91bGRJbmNsdWRlUm9vdCk7Ci0gICAgfQotCi0gICAgfkNoaWxkRnJhbWVE
aXNjb25uZWN0b3IoKQotICAgIHsKICAgICB9CiAKKyAgICB2b2lkIGRpc2Nvbm5lY3RDaGlsZHJl
bigpOwogICAgIHZvaWQgZGlzY29ubmVjdCgpOwogCi0gICAgc3RhdGljIGJvb2wgbm9kZUhhc0Rp
c2Nvbm5lY3RvcihOb2RlKik7Ci0KIHByaXZhdGU6Ci0gICAgdm9pZCBjb2xsZWN0RGVzY2VuZGFu
dChOb2RlKiByb290LCBTaG91bGRJbmNsdWRlUm9vdCk7Ci0gICAgdm9pZCBjb2xsZWN0RGVzY2Vu
ZGFudChFbGVtZW50U2hhZG93Kik7CisgICAgdm9pZCBjb2xsZWN0RnJhbWVPd25lcnMoTm9kZSog
cm9vdCk7CisgICAgdm9pZCBjb2xsZWN0RnJhbWVPd25lcnMoRWxlbWVudFNoYWRvdyopOworICAg
IHZvaWQgZGlzY29ubmVjdENvbGxlY3RlZEZyYW1lT3duZXJzKCk7CiAKICAgICBjbGFzcyBUYXJn
ZXQgewogICAgIHB1YmxpYzoKQEAgLTMxMywyMSArMjk4LDIzIEBAIHByaXZhdGU6CiAgICAgTm9k
ZSogbV9yb290OwogfTsKIAotaW5saW5lIHZvaWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29s
bGVjdERlc2NlbmRhbnQoTm9kZSogcm9vdCwgU2hvdWxkSW5jbHVkZVJvb3Qgc2hvdWxkSW5jbHVk
ZVJvb3QpCitpbmxpbmUgdm9pZCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpjb2xsZWN0RnJhbWVP
d25lcnMoTm9kZSogcm9vdCkKIHsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzaG91bGRJbmNsdWRl
Um9vdCA9PSBJbmNsdWRlUm9vdCA/IHJvb3QgOiByb290LT5maXJzdENoaWxkKCk7IG5vZGU7Ci0g
ICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShyb290KSkgewotICAgICAg
ICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOwotICAgICAgICBpZiAoZWxl
bWVudC0+aGFzQ3VzdG9tQ2FsbGJhY2tzKCkgJiYgZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVu
dCgpKQotICAgICAgICAgICAgbV9saXN0LmFwcGVuZCh0b0ZyYW1lT3duZXJFbGVtZW50KGVsZW1l
bnQpKTsKLSAgICAgICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IGVsZW1lbnQtPnNoYWRv
dygpKQotICAgICAgICAgICAgY29sbGVjdERlc2NlbmRhbnQoc2hhZG93KTsKLSAgICB9CisgICAg
aWYgKCFyb290LT5jb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChyb290LT5pc0VsZW1lbnROb2RlKCkgJiYgcm9vdC0+aXNGcmFtZU93bmVyRWxlbWVu
dCgpKQorICAgICAgICBtX2xpc3QuYXBwZW5kKHRvRnJhbWVPd25lckVsZW1lbnQocm9vdCkpOwor
CisgICAgZm9yIChOb2RlKiBjaGlsZCA9IHJvb3QtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGNvbGxlY3RGcmFtZU93bmVycyhjaGls
ZCk7CisKKyAgICBFbGVtZW50U2hhZG93KiBzaGFkb3cgPSByb290LT5pc0VsZW1lbnROb2RlKCkg
PyB0b0VsZW1lbnQocm9vdCktPnNoYWRvdygpIDogMDsKKyAgICBpZiAoc2hhZG93KQorICAgICAg
ICBjb2xsZWN0RnJhbWVPd25lcnMoc2hhZG93KTsKIH0KIAotaW5saW5lIHZvaWQgQ2hpbGRGcmFt
ZURpc2Nvbm5lY3Rvcjo6ZGlzY29ubmVjdCgpCitpbmxpbmUgdm9pZCBDaGlsZEZyYW1lRGlzY29u
bmVjdG9yOjpkaXNjb25uZWN0Q29sbGVjdGVkRnJhbWVPd25lcnMoKQogewogICAgIC8vIE11c3Qg
ZGlzYWJsZSBmcmFtZSBsb2FkaW5nIGluIHRoZSBzdWJ0cmVlIHNvIGFuIHVubG9hZCBoYW5kbGVy
IGNhbm5vdAogICAgIC8vIGluc2VydCBtb3JlIGZyYW1lcyBhbmQgY3JlYXRlIGxvYWRlZCBmcmFt
ZXMgaW4gZGV0YWNoZWQgc3VidHJlZXMuCkBAIC0zNDAsNiArMzI3LDI2IEBAIGlubGluZSB2b2lk
IENoaWxkRnJhbWVEaXNjb25uZWN0b3I6OmRpc2Nvbm5lY3QoKQogICAgIH0KIH0KIAoraW5saW5l
IHZvaWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6ZGlzY29ubmVjdENoaWxkcmVuKCkKK3sKKyAg
ICBpZiAoIW1fcm9vdC0+Y29ubmVjdGVkU3ViZnJhbWVDb3VudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9yb290LT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBjb2xsZWN0RnJhbWVPd25lcnMo
Y2hpbGQpOworCisgICAgZGlzY29ubmVjdENvbGxlY3RlZEZyYW1lT3duZXJzKCk7Cit9CisKK2lu
bGluZSB2b2lkIENoaWxkRnJhbWVEaXNjb25uZWN0b3I6OmRpc2Nvbm5lY3QoKQoreworICAgIGlm
ICghbV9yb290LT5jb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNvbGxlY3RGcmFtZU93bmVycyhtX3Jvb3QpOworICAgIGRpc2Nvbm5lY3RDb2xsZWN0ZWRG
cmFtZU93bmVycygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBD
b250YWluZXJOb2RlQWxnb3JpdGhtc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggYmQ4ODdlOTRjYjBk
YzA5MDJhY2U1ZjAzZDJkMDhhZjg3MjhjY2E4ZC4uZmI5MzZmY2EyZTBiMmJlZTFiMWE4ZGZlNmYy
Yjg4OTllZjYzNTE0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjgyNCw2ICsyODI0LDIyIEBAIHZv
aWQgTm9kZTo6dGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpIGNvbnN0CiAgICAgcmFu
Z2UtPnRleHRSZWN0cyhyZWN0cyk7CiB9CiAKK3Vuc2lnbmVkIE5vZGU6OmNvbm5lY3RlZFN1YmZy
YW1lQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGEo
KS0+Y29ubmVjdGVkU3ViZnJhbWVDb3VudCgpIDogMDsKK30KKwordm9pZCBOb2RlOjppbmNyZW1l
bnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkKK3sKKyAgICBBU1NFUlQoaXNDb250YWluZXJOb2Rl
KCkpOworICAgIGVuc3VyZVJhcmVEYXRhKCktPmluY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291
bnQoKTsKK30KKwordm9pZCBOb2RlOjpkZWNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkK
K3sKKyAgICByYXJlRGF0YSgpLT5kZWNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KCk7Cit9
CisKIHZvaWQgTm9kZTo6cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpCiB7CiAgICAgc2V0
SGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQodHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCBiNjMyM2I5YjJk
NGQzY2YzMzEwMGM0MmVmMTJkZDNkZWRhYzUxNGYxLi4zNmEwMTNlZDczM2RhNjdhZDUyMjE1ZGEw
MGU3YTcxNTYwOWU0NDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTY4OCw2ICs2ODgsMTAgQEAgcHVibGlj
OgogCiAgICAgdm9pZCB0ZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+JikgY29uc3Q7CiAKKyAgICB1
bnNpZ25lZCBjb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkgY29uc3Q7CisgICAgdm9pZCBpbmNyZW1l
bnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KCk7CisgICAgdm9pZCBkZWNyZW1lbnRDb25uZWN0ZWRT
dWJmcmFtZUNvdW50KCk7CisKIHByaXZhdGU6CiAgICAgZW51bSBOb2RlRmxhZ3MgewogICAgICAg
ICBJc1RleHRGbGFnID0gMSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFy
ZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAppbmRleCBjNTZkMDZm
OGE4YjA4NjdkYWNkOGNjZDNmNzk2ZDcxODY0YzU2Mjc5Li41MTM4NmU0NWZlNDI2ZDQ1YTM1NWM0
ODk4YzI2MTM2MmEzMTRjMGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJh
cmVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCkBAIC0yNyw2
ICsyNyw3IEBACiAjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTXV0YXRp
b25PYnNlcnZlci5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCIK
KyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2luY2x1ZGUg
IlRhZ05vZGVMaXN0LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTE5MCw2ICsxOTEs
NyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25B
ZnRlckF0dGFjaChmYWxzZSkKICAgICAgICAgLCBtX3N0eWxlQWZmZWN0ZWRCeUVtcHR5KGZhbHNl
KQogICAgICAgICAsIG1faXNJbkNhbnZhc1N1YnRyZWUoZmFsc2UpCisgICAgICAgICwgbV9jb25u
ZWN0ZWRGcmFtZUNvdW50KDApCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgICAgICAs
IG1fY29udGFpbnNGdWxsU2NyZWVuRWxlbWVudChmYWxzZSkKICNlbmRpZgpAQCAtMjk3LDYgKzI5
OSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
Rm9jdXNlZDsgfQogICAgIHZvaWQgc2V0Rm9jdXNlZChib29sIGZvY3VzZWQpIHsgbV9pc0ZvY3Vz
ZWQgPSBmb2N1c2VkOyB9CiAKKyAgICB1bnNpZ25lZCBjb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9jb25uZWN0ZWRGcmFtZUNvdW50OyB9CisgICAgdm9pZCBpbmNyZW1l
bnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkgeyBtX2Nvbm5lY3RlZEZyYW1lQ291bnQrKzsgfQor
ICAgIHZvaWQgZGVjcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVDb3VudCgpIHsgQVNTRVJUKG1fY29u
bmVjdGVkRnJhbWVDb3VudCk7IG1fY29ubmVjdGVkRnJhbWVDb3VudC0tOyB9CisKICAgICB2aXJ0
dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCiBw
cm90ZWN0ZWQ6CkBAIC0zMjIsNiArMzI4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbmVlZHNG
b2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2ggOiAxOwogICAgIGJvb2wgbV9zdHls
ZUFmZmVjdGVkQnlFbXB0eSA6IDE7CiAgICAgYm9vbCBtX2lzSW5DYW52YXNTdWJ0cmVlIDogMTsK
KyAgICB1bnNpZ25lZCBtX2Nvbm5lY3RlZEZyYW1lQ291bnQgOiAxMDsKICNpZiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCiAgICAgYm9vbCBtX2NvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQgOiAxOwog
I2VuZGlmCkBAIC0zMzgsNiArMzQ1LDkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAorLy8gRW5z
dXJlIHRoZSAxMCBiaXRzIHJlc2VydmVkIGZvciB0aGUgbV9jb25uZWN0ZWRGcmFtZUNvdW50IGNh
bm5vdCBvdmVyZmxvdworQ09NUElMRV9BU1NFUlQoUGFnZTo6bWF4TnVtYmVyT2ZGcmFtZXMgPCAx
MDI0LCBGcmFtZV9saW1pdF9zaG91bGRfZml0X2luX3JhcmVfZGF0YV9jb3VudCk7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIE5vZGVSYXJlRGF0YV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKaW5kZXggMWUzODJiZmFhNmQ3
NTZhN2QzOTFiYWZhMmZhZDNmODM3OGIwYTU2OS4uMTEyYjhhN2Q0MmY4NDIxMjIzNjJjZGExOWM2
MThlMWI4YTg3MTkyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVP
d25lckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJF
bGVtZW50LmNwcApAQCAtNTcsMTMgKzU3LDIxIEBAIHZvaWQgSFRNTEZyYW1lT3duZXJFbGVtZW50
OjpzZXRDb250ZW50RnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIC8vIERpc2Nvbm5lY3RlZCBmcmFt
ZXMgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGxvYWQuCiAgICAgQVNTRVJUKGluRG9jdW1lbnQo
KSk7CiAgICAgbV9jb250ZW50RnJhbWUgPSBmcmFtZTsKKworICAgIGZvciAoQ29udGFpbmVyTm9k
ZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpCisg
ICAgICAgIG5vZGUtPmluY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQoKTsKIH0KIAogdm9p
ZCBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OmRpc2Nvbm5lY3RDb250ZW50RnJhbWUoKQogewogICAg
IEFTU0VSVChoYXNDdXN0b21DYWxsYmFja3MoKSk7Ci0gICAgLy8gVGhpcyBjYXVzZXMgYW4gdW5s
b2FkIGV2ZW50IHRodXMgY2Fubm90IGJlIGEgcGFydCBvZiByZW1vdmVkRnJvbSgpLgorICAgIC8v
IFRoaXMgY2F1c2VzIGFuIHVubG9hZCBldmVudCBpbiB0aGUgc3ViZnJhbWUgc28gaXQgY2Fubm90
IGJlIGEgcGFydCBvZgorICAgIC8vIHJlbW92ZWRGcm9tKCkgYmVjYXVzZSB0aGUgdW5sb2FkIGhh
bmRsZXIgaW4gYSBzYW1lIGRvbWFpbiBmcmFtZSBtdXN0IGJlCisgICAgLy8gYWJsZSB0byByZWFj
aCB1cHdhcmQgaW50byB0aGUgb3duZXIgZG9jdW1lbnQuCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9
IGNvbnRlbnRGcmFtZSgpKSB7CisgICAgICAgIGZvciAoQ29udGFpbmVyTm9kZSogbm9kZSA9IHRo
aXM7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpCisgICAgICAgICAgICBu
b2RlLT5kZWNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KCk7CisKICAgICAgICAgUmVmUHRy
PEZyYW1lPiBwcm90ZWN0KGZyYW1lKTsKICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5mcmFtZURl
dGFjaGVkKCk7CiAgICAgICAgIGZyYW1lLT5kaXNjb25uZWN0T3duZXJFbGVtZW50KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174482</attachid>
            <date>2012-11-15 10:26:53 -0800</date>
            <delta_ts>2012-12-05 01:07:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101821-20121115132449.patch</filename>
            <type>text/plain</type>
            <size>12193</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0Nzg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDI2MGY1MGQxODllOGUz
YWY0ZmUzOGY4ZWM3NTAyZTNiMmE2OTc3Mi4uYWY1YmM4NWMwMGMyYTA4ODFkY2IwODlhMzI4Mzgy
YTVlZWYyYThhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTExLTE1ICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFRyYWNrIHN1YmZy
YW1lIGNvdW50IHRvIGF2b2lkIHRyYXZlcnNpbmcgdGhlIHRyZWUgd2hlbiB0aGVyZSdzIG5vIHN1
YmZyYW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAxODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QnVnIDEwMTYxOSBzaG93ZWQgYSA5LTE0JSBpbXByb3ZlbWVudCBmcm9tIG5vdCB3YWxraW5nIHRo
ZSBjaGlsZHJlbiBkdXJpbmcKKyAgICAgICAgcmVtb3ZlQ2hpbGQgbG9va2luZyBmb3IgZnJhbWVz
IHdoZW4gdGhlcmUncyBrbm93biB0byBiZSBubyBmcmFtZXMuIFRoZSBmaXgKKyAgICAgICAgaW4g
dGhhdCBidWcgb25seSBhdm9pZHMgdGhpcyB3YWxrIHdoZW4gdGhlIHdob2xlIGRvY3VtZW50IGhh
cyBubyBmcmFtZXMsIHRoaXMKKyAgICAgICAgcGF0Y2ggZXh0ZW5kcyBpdCB0byBza2lwIHRyYXZl
cnNpbmcgc3VidHJlZXMgdGhhdCBoYXZlIG5vIGlmcmFtZXMgYnkgaG9va2luZworICAgICAgICB0
aGUgZnJhbWUgYXNzaWdubWVudCB0byB3YWxrIHVwIHRoZSB0cmVlIGFuZCBrZWVwIHRyYWNrIG9m
IHRoZSBjb3VudCBvZiBmcmFtZXMKKyAgICAgICAgaW4gdGhlIHN1YnRyZWUgb24gY29udGVudEZy
YW1lIGFzc2lnbm1lbnQgYW5kIHRoZW4gZGVjcmVtZW50IGl0IG9uIGRpc2Nvbm5lY3QuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLCB0aGlzIGlzIGp1c3QgYSBwZXJmIHJlZmFjdG9yLgorCisgICAg
ICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2lsbFJlbW92
ZUNoaWxkcmVuKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdEZyYW1lT3du
ZXJzKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNoaWxkRnJhbWVEaXNjb25uZWN0b3I6OkNoaWxkRnJhbWVEaXNjb25uZWN0b3Ip
OgorICAgICAgICAoQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpD
aGlsZEZyYW1lRGlzY29ubmVjdG9yOjpjb2xsZWN0RnJhbWVPd25lcnMpOgorICAgICAgICAgIFJl
bmFtZWQgZnJvbSBjb2xsZWN0RGVzY2VuZGFudCgpIHRvIGJldHRlciByZWZsZWN0IHdoYXQgaXQg
cmVhbGx5IGRvZXMuCisgICAgICAgIChXZWJDb3JlOjpDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpk
aXNjb25uZWN0Q29sbGVjdGVkRnJhbWVPd25lcnMpOgorICAgICAgICAgIFJlbmFtZWQgZnJvbSBk
aXNjb25uZWN0KCkgdG8gYmV0dGVyIHJlZmxlY3Qgd2hhdCBpdCByZWFsbHkgZG9lcy4KKyAgICAg
ICAgKFdlYkNvcmU6OkNoaWxkRnJhbWVEaXNjb25uZWN0b3I6OmRpc2Nvbm5lY3QpOgorICAgICAg
ICAgIE5ldyBtZXRob2QgdGhhdCBkb2VzIHRoZSBjb2xsZWN0aW9uIG9mIGZyYW1lIG93bmVycyBv
biBlaXRoZXIgdGhlIHJvb3QKKyAgICAgICAgICBvciBvbmx5IGl0J3MgZGVzY2VuZGFudHMuCisg
ICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29ubmVjdGVk
U3ViZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppbmNyZW1lbnRDb25uZWN0
ZWRTdWJmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRlY3JlbWVudENvbm5l
Y3RlZFN1YmZyYW1lQ291bnQpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgICogZG9t
L05vZGVSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpOb2RlUmFy
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpjb25uZWN0ZWRTdWJmcmFt
ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6aW5jcmVtZW50Q29ubmVj
dGVkU3ViZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6OmRlY3Jl
bWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQpOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lT3du
ZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudDo6
c2V0Q29udGVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVu
dDo6ZGlzY29ubmVjdENvbnRlbnRGcmFtZSk6CisKIDIwMTItMTEtMTUgIEVyaWsgQXJ2aWRzc29u
ICA8YXJ2QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVcGRhdGUgRE9NRXhjZXB0aW9uIG5hbWU6
IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAKaW5kZXggYTYwNWNkMDhlYmRlN2ZiOWU3MjJkOTgzMjEwZmE0MmQ4ZDgzNmJhOS4uYjY0ZGJh
YWNhYThlZTUyZWVhZGYzMTg4MmU2NjFhZTFjY2JiMzEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmNwcApAQCAtMzczLDcgKzM3Myw3IEBAIHN0YXRpYyB2b2lkIHdpbGxSZW1vdmVD
aGlsZHJlbihDb250YWluZXJOb2RlKiBjb250YWluZXIpCiAgICAgICAgIGRpc3BhdGNoQ2hpbGRS
ZW1vdmFsRXZlbnRzKGNoaWxkKTsKICAgICB9CiAKLSAgICBDaGlsZEZyYW1lRGlzY29ubmVjdG9y
KGNvbnRhaW5lciwgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6RG9Ob3RJbmNsdWRlUm9vdCkuZGlz
Y29ubmVjdCgpOworICAgIENoaWxkRnJhbWVEaXNjb25uZWN0b3IoY29udGFpbmVyKS5kaXNjb25u
ZWN0KENoaWxkRnJhbWVEaXNjb25uZWN0b3I6OkRlc2NlbmRhbnRzT25seSk7CiB9CiAKIHZvaWQg
Q29udGFpbmVyTm9kZTo6ZGlzY29ubmVjdERlc2NlbmRhbnRGcmFtZXMoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAKaW5kZXggNTlkYWM3NDQ0NmZl
MmU0ZDAxODY0ZjMzMDZhNjU4MjY4ZTZjZmIxZi4uZGJkMDI2YzZlNDZlNTUyNmJhMDYxNTY3NDIz
YjRkZjYxOTU0NGEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGVBbGdvcml0aG1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFs
Z29yaXRobXMuY3BwCkBAIC0xMDksMTAgKzEwOSwxMCBAQCB2b2lkIENoaWxkTm9kZVJlbW92YWxO
b3RpZmllcjo6bm90aWZ5RGVzY2VuZGFudFJlbW92ZWRGcm9tVHJlZShDb250YWluZXJOb2RlKiBu
bwogICAgIH0KIH0KIAotdm9pZCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpjb2xsZWN0RGVzY2Vu
ZGFudChFbGVtZW50U2hhZG93KiBzaGFkb3cpCit2b2lkIENoaWxkRnJhbWVEaXNjb25uZWN0b3I6
OmNvbGxlY3RGcmFtZU93bmVycyhFbGVtZW50U2hhZG93KiBzaGFkb3cpCiB7CiAgICAgZm9yIChT
aGFkb3dSb290KiByb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9v
dCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQotICAgICAgICBjb2xsZWN0RGVzY2VuZGFudChy
b290LCBJbmNsdWRlUm9vdCk7CisgICAgICAgIGNvbGxlY3RGcmFtZU93bmVycyhyb290KTsKIH0K
IAogdm9pZCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpUYXJnZXQ6OmRpc2Nvbm5lY3QoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAppbmRleCAyMTlhNWQ0
OTYwY2JiMmUzMzRmM2ZkMWRkZjhhOTk5Y2EwOTk3NTJiLi5jYzZkMmQyNzc1ZGNiNDVhZjEzNDBh
ZTVhZTNmODdjNTk3YWUzNWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFp
bmVyTm9kZUFsZ29yaXRobXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZUFsZ29yaXRobXMuaApAQCAtMjY1LDMzICsyNjUsMjIgQEAgaW5saW5lIHZvaWQgQ2hpbGROb2Rl
UmVtb3ZhbE5vdGlmaWVyOjpub3RpZnkoTm9kZSogbm9kZSkKIAogY2xhc3MgQ2hpbGRGcmFtZURp
c2Nvbm5lY3RvciB7CiBwdWJsaWM6Ci0gICAgZW51bSBTaG91bGRJbmNsdWRlUm9vdCB7Ci0gICAg
ICAgIERvTm90SW5jbHVkZVJvb3QsCi0gICAgICAgIEluY2x1ZGVSb290CisgICAgZW51bSBEaXNj
b25uZWN0UG9saWN5IHsKKyAgICAgICAgUm9vdEFuZERlc2NlbmRhbnRzLAorICAgICAgICBEZXNj
ZW5kYW50c09ubHkKICAgICB9OwogCi0gICAgZXhwbGljaXQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rv
cihOb2RlKiByb290LCBTaG91bGRJbmNsdWRlUm9vdCBzaG91bGRJbmNsdWRlUm9vdCA9IEluY2x1
ZGVSb290KQorICAgIGV4cGxpY2l0IENoaWxkRnJhbWVEaXNjb25uZWN0b3IoTm9kZSogcm9vdCkK
ICAgICAgICAgOiBtX3Jvb3Qocm9vdCkKICAgICB7Ci0gICAgICAgIC8vIElmIHdlIGtub3cgdGhl
cmUncyBubyBmcmFtZXMgdG8gZGlzY29ubmVjdCB0aGVuIGRvbid0IGJvdGhlciB0cmF2ZXJzaW5n
Ci0gICAgICAgIC8vIHRoZSB0cmVlIGxvb2tpbmcgZm9yIHRoZW0uCi0gICAgICAgIEZyYW1lKiBm
cmFtZSA9IHJvb3QtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgICAgIGlmIChmcmFtZSAmJiAh
ZnJhbWUtPnRyZWUoKS0+Zmlyc3RDaGlsZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBjb2xsZWN0RGVzY2VuZGFudChtX3Jvb3QsIHNob3VsZEluY2x1ZGVSb290KTsKICAgICB9CiAK
LSAgICB+Q2hpbGRGcmFtZURpc2Nvbm5lY3RvcigpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQg
ZGlzY29ubmVjdCgpOwotCi0gICAgc3RhdGljIGJvb2wgbm9kZUhhc0Rpc2Nvbm5lY3RvcihOb2Rl
Kik7CisgICAgdm9pZCBkaXNjb25uZWN0KERpc2Nvbm5lY3RQb2xpY3kgPSBSb290QW5kRGVzY2Vu
ZGFudHMpOwogCiBwcml2YXRlOgotICAgIHZvaWQgY29sbGVjdERlc2NlbmRhbnQoTm9kZSogcm9v
dCwgU2hvdWxkSW5jbHVkZVJvb3QpOwotICAgIHZvaWQgY29sbGVjdERlc2NlbmRhbnQoRWxlbWVu
dFNoYWRvdyopOworICAgIHZvaWQgY29sbGVjdEZyYW1lT3duZXJzKE5vZGUqIHJvb3QpOworICAg
IHZvaWQgY29sbGVjdEZyYW1lT3duZXJzKEVsZW1lbnRTaGFkb3cqKTsKKyAgICB2b2lkIGRpc2Nv
bm5lY3RDb2xsZWN0ZWRGcmFtZU93bmVycygpOwogCiAgICAgY2xhc3MgVGFyZ2V0IHsKICAgICBw
dWJsaWM6CkBAIC0zMTMsMjEgKzMwMiwyNSBAQCBwcml2YXRlOgogICAgIE5vZGUqIG1fcm9vdDsK
IH07CiAKLWlubGluZSB2b2lkIENoaWxkRnJhbWVEaXNjb25uZWN0b3I6OmNvbGxlY3REZXNjZW5k
YW50KE5vZGUqIHJvb3QsIFNob3VsZEluY2x1ZGVSb290IHNob3VsZEluY2x1ZGVSb290KQoraW5s
aW5lIHZvaWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdEZyYW1lT3duZXJzKE5vZGUq
IHJvb3QpCiB7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gc2hvdWxkSW5jbHVkZVJvb3QgPT0gSW5j
bHVkZVJvb3QgPyByb290IDogcm9vdC0+Zmlyc3RDaGlsZCgpOyBub2RlOwotICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUocm9vdCkpIHsKLSAgICAgICAgaWYgKCFub2Rl
LT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgRWxlbWVu
dCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKLSAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0N1
c3RvbUNhbGxiYWNrcygpICYmIGVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkKLSAgICAg
ICAgICAgIG1fbGlzdC5hcHBlbmQodG9GcmFtZU93bmVyRWxlbWVudChlbGVtZW50KSk7Ci0gICAg
ICAgIGlmIChFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBlbGVtZW50LT5zaGFkb3coKSkKLSAgICAg
ICAgICAgIGNvbGxlY3REZXNjZW5kYW50KHNoYWRvdyk7Ci0gICAgfQorICAgIGlmICghcm9vdC0+
Y29ubmVjdGVkU3ViZnJhbWVDb3VudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQganVzdCBjaGVjayBpc0VsZW1lbnROb2RlKCkgdG8gYXZvaWQgdGhlIHZp
cnR1YWwgY2FsbAorICAgIC8vIGFuZCB3ZSBzaG91bGQgbm90IGRlcGVuZCBvbiBoYXNDdXN0b21D
YWxsYmFja3MoKS4KKyAgICBpZiAocm9vdC0+aGFzQ3VzdG9tQ2FsbGJhY2tzKCkgJiYgcm9vdC0+
aXNGcmFtZU93bmVyRWxlbWVudCgpKQorICAgICAgICBtX2xpc3QuYXBwZW5kKHRvRnJhbWVPd25l
ckVsZW1lbnQocm9vdCkpOworCisgICAgZm9yIChOb2RlKiBjaGlsZCA9IHJvb3QtPmZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGNvbGxl
Y3RGcmFtZU93bmVycyhjaGlsZCk7CisKKyAgICBFbGVtZW50U2hhZG93KiBzaGFkb3cgPSByb290
LT5pc0VsZW1lbnROb2RlKCkgPyB0b0VsZW1lbnQocm9vdCktPnNoYWRvdygpIDogMDsKKyAgICBp
ZiAoc2hhZG93KQorICAgICAgICBjb2xsZWN0RnJhbWVPd25lcnMoc2hhZG93KTsKIH0KIAotaW5s
aW5lIHZvaWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6ZGlzY29ubmVjdCgpCitpbmxpbmUgdm9p
ZCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpkaXNjb25uZWN0Q29sbGVjdGVkRnJhbWVPd25lcnMo
KQogewogICAgIC8vIE11c3QgZGlzYWJsZSBmcmFtZSBsb2FkaW5nIGluIHRoZSBzdWJ0cmVlIHNv
IGFuIHVubG9hZCBoYW5kbGVyIGNhbm5vdAogICAgIC8vIGluc2VydCBtb3JlIGZyYW1lcyBhbmQg
Y3JlYXRlIGxvYWRlZCBmcmFtZXMgaW4gZGV0YWNoZWQgc3VidHJlZXMuCkBAIC0zNDAsNiArMzMz
LDIxIEBAIGlubGluZSB2b2lkIENoaWxkRnJhbWVEaXNjb25uZWN0b3I6OmRpc2Nvbm5lY3QoKQog
ICAgIH0KIH0KIAoraW5saW5lIHZvaWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6ZGlzY29ubmVj
dChEaXNjb25uZWN0UG9saWN5IHBvbGljeSkKK3sKKyAgICBpZiAoIW1fcm9vdC0+Y29ubmVjdGVk
U3ViZnJhbWVDb3VudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocG9saWN5ID09IFJv
b3RBbmREZXNjZW5kYW50cykKKyAgICAgICAgY29sbGVjdEZyYW1lT3duZXJzKG1fcm9vdCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIGZvciAoTm9kZSogY2hpbGQgPSBtX3Jvb3QtPmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICBjb2xs
ZWN0RnJhbWVPd25lcnMoY2hpbGQpOworICAgIH0KKworICAgIGRpc2Nvbm5lY3RDb2xsZWN0ZWRG
cmFtZU93bmVycygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBD
b250YWluZXJOb2RlQWxnb3JpdGhtc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggYmQ4ODdlOTRjYjBk
YzA5MDJhY2U1ZjAzZDJkMDhhZjg3MjhjY2E4ZC4uZmI5MzZmY2EyZTBiMmJlZTFiMWE4ZGZlNmYy
Yjg4OTllZjYzNTE0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjgyNCw2ICsyODI0LDIyIEBAIHZv
aWQgTm9kZTo6dGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpIGNvbnN0CiAgICAgcmFu
Z2UtPnRleHRSZWN0cyhyZWN0cyk7CiB9CiAKK3Vuc2lnbmVkIE5vZGU6OmNvbm5lY3RlZFN1YmZy
YW1lQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGEo
KS0+Y29ubmVjdGVkU3ViZnJhbWVDb3VudCgpIDogMDsKK30KKwordm9pZCBOb2RlOjppbmNyZW1l
bnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkKK3sKKyAgICBBU1NFUlQoaXNDb250YWluZXJOb2Rl
KCkpOworICAgIGVuc3VyZVJhcmVEYXRhKCktPmluY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291
bnQoKTsKK30KKwordm9pZCBOb2RlOjpkZWNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkK
K3sKKyAgICByYXJlRGF0YSgpLT5kZWNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KCk7Cit9
CisKIHZvaWQgTm9kZTo6cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpCiB7CiAgICAgc2V0
SGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQodHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCBiNjMyM2I5YjJk
NGQzY2YzMzEwMGM0MmVmMTJkZDNkZWRhYzUxNGYxLi4zNmEwMTNlZDczM2RhNjdhZDUyMjE1ZGEw
MGU3YTcxNTYwOWU0NDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTY4OCw2ICs2ODgsMTAgQEAgcHVibGlj
OgogCiAgICAgdm9pZCB0ZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+JikgY29uc3Q7CiAKKyAgICB1
bnNpZ25lZCBjb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkgY29uc3Q7CisgICAgdm9pZCBpbmNyZW1l
bnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KCk7CisgICAgdm9pZCBkZWNyZW1lbnRDb25uZWN0ZWRT
dWJmcmFtZUNvdW50KCk7CisKIHByaXZhdGU6CiAgICAgZW51bSBOb2RlRmxhZ3MgewogICAgICAg
ICBJc1RleHRGbGFnID0gMSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFy
ZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAppbmRleCBjNTZkMDZm
OGE4YjA4NjdkYWNkOGNjZDNmNzk2ZDcxODY0YzU2Mjc5Li41MTM4NmU0NWZlNDI2ZDQ1YTM1NWM0
ODk4YzI2MTM2MmEzMTRjMGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJh
cmVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCkBAIC0yNyw2
ICsyNyw3IEBACiAjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTXV0YXRp
b25PYnNlcnZlci5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCIK
KyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2luY2x1ZGUg
IlRhZ05vZGVMaXN0LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTE5MCw2ICsxOTEs
NyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25B
ZnRlckF0dGFjaChmYWxzZSkKICAgICAgICAgLCBtX3N0eWxlQWZmZWN0ZWRCeUVtcHR5KGZhbHNl
KQogICAgICAgICAsIG1faXNJbkNhbnZhc1N1YnRyZWUoZmFsc2UpCisgICAgICAgICwgbV9jb25u
ZWN0ZWRGcmFtZUNvdW50KDApCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgICAgICAs
IG1fY29udGFpbnNGdWxsU2NyZWVuRWxlbWVudChmYWxzZSkKICNlbmRpZgpAQCAtMjk3LDYgKzI5
OSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
Rm9jdXNlZDsgfQogICAgIHZvaWQgc2V0Rm9jdXNlZChib29sIGZvY3VzZWQpIHsgbV9pc0ZvY3Vz
ZWQgPSBmb2N1c2VkOyB9CiAKKyAgICB1bnNpZ25lZCBjb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9jb25uZWN0ZWRGcmFtZUNvdW50OyB9CisgICAgdm9pZCBpbmNyZW1l
bnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkgeyBtX2Nvbm5lY3RlZEZyYW1lQ291bnQrKzsgfQor
ICAgIHZvaWQgZGVjcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVDb3VudCgpIHsgQVNTRVJUKG1fY29u
bmVjdGVkRnJhbWVDb3VudCk7IG1fY29ubmVjdGVkRnJhbWVDb3VudC0tOyB9CisKICAgICB2aXJ0
dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCiBw
cm90ZWN0ZWQ6CkBAIC0zMjIsNiArMzI4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbmVlZHNG
b2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2ggOiAxOwogICAgIGJvb2wgbV9zdHls
ZUFmZmVjdGVkQnlFbXB0eSA6IDE7CiAgICAgYm9vbCBtX2lzSW5DYW52YXNTdWJ0cmVlIDogMTsK
KyAgICB1bnNpZ25lZCBtX2Nvbm5lY3RlZEZyYW1lQ291bnQgOiAxMDsKICNpZiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCiAgICAgYm9vbCBtX2NvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQgOiAxOwog
I2VuZGlmCkBAIC0zMzgsNiArMzQ1LDkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAorLy8gRW5z
dXJlIHRoZSAxMCBiaXRzIHJlc2VydmVkIGZvciB0aGUgbV9jb25uZWN0ZWRGcmFtZUNvdW50IGNh
bm5vdCBvdmVyZmxvdworQ09NUElMRV9BU1NFUlQoUGFnZTo6bWF4TnVtYmVyT2ZGcmFtZXMgPCAx
MDI0LCBGcmFtZV9saW1pdF9zaG91bGRfZml0X2luX3JhcmVfZGF0YV9jb3VudCk7CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIE5vZGVSYXJlRGF0YV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKaW5kZXggMWUzODJiZmFhNmQ3
NTZhN2QzOTFiYWZhMmZhZDNmODM3OGIwYTU2OS4uMTEyYjhhN2Q0MmY4NDIxMjIzNjJjZGExOWM2
MThlMWI4YTg3MTkyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVP
d25lckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJF
bGVtZW50LmNwcApAQCAtNTcsMTMgKzU3LDIxIEBAIHZvaWQgSFRNTEZyYW1lT3duZXJFbGVtZW50
OjpzZXRDb250ZW50RnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIC8vIERpc2Nvbm5lY3RlZCBmcmFt
ZXMgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGxvYWQuCiAgICAgQVNTRVJUKGluRG9jdW1lbnQo
KSk7CiAgICAgbV9jb250ZW50RnJhbWUgPSBmcmFtZTsKKworICAgIGZvciAoQ29udGFpbmVyTm9k
ZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpCisg
ICAgICAgIG5vZGUtPmluY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQoKTsKIH0KIAogdm9p
ZCBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OmRpc2Nvbm5lY3RDb250ZW50RnJhbWUoKQogewogICAg
IEFTU0VSVChoYXNDdXN0b21DYWxsYmFja3MoKSk7Ci0gICAgLy8gVGhpcyBjYXVzZXMgYW4gdW5s
b2FkIGV2ZW50IHRodXMgY2Fubm90IGJlIGEgcGFydCBvZiByZW1vdmVkRnJvbSgpLgorICAgIC8v
IFRoaXMgY2F1c2VzIGFuIHVubG9hZCBldmVudCBpbiB0aGUgc3ViZnJhbWUgc28gaXQgY2Fubm90
IGJlIGEgcGFydCBvZgorICAgIC8vIHJlbW92ZWRGcm9tKCkgYmVjYXVzZSB0aGUgdW5sb2FkIGhh
bmRsZXIgaW4gYSBzYW1lIGRvbWFpbiBmcmFtZSBtdXN0IGJlCisgICAgLy8gYWJsZSB0byByZWFj
aCB1cHdhcmQgaW50byB0aGUgb3duZXIgZG9jdW1lbnQuCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9
IGNvbnRlbnRGcmFtZSgpKSB7CisgICAgICAgIGZvciAoQ29udGFpbmVyTm9kZSogbm9kZSA9IHRo
aXM7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpCisgICAgICAgICAgICBu
b2RlLT5kZWNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KCk7CisKICAgICAgICAgUmVmUHRy
PEZyYW1lPiBwcm90ZWN0KGZyYW1lKTsKICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5mcmFtZURl
dGFjaGVkKCk7CiAgICAgICAgIGZyYW1lLT5kaXNjb25uZWN0T3duZXJFbGVtZW50KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177693</attachid>
            <date>2012-12-05 01:07:17 -0800</date>
            <delta_ts>2013-01-17 18:08:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101821-20121205010442.patch</filename>
            <type>text/plain</type>
            <size>16481</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NjE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWM4NmFmOGYyYTM5Njcw
Y2UwMTg3NjcwMDBhNmUzNWRhYTFlNjRkZC4uMWNkZDI1ZTE1YTUwNTc3OTk4NTcyYTFkYWI3YWZl
MmJkMTRkY2QxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTEyLTA0ICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFRyYWNrIHN1YmZy
YW1lIGNvdW50IHRvIGF2b2lkIHRyYXZlcnNpbmcgdGhlIHRyZWUgd2hlbiB0aGVyZSdzIG5vIHN1
YmZyYW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAxODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QnVnIDEwMTYxOSBzaG93ZWQgYSA5LTE0JSBpbXByb3ZlbWVudCBmcm9tIG5vdCB3YWxraW5nIHRo
ZSBjaGlsZHJlbiBkdXJpbmcKKyAgICAgICAgcmVtb3ZlQ2hpbGQgbG9va2luZyBmb3IgZnJhbWVz
IHdoZW4gdGhlcmUncyBrbm93biB0byBiZSBubyBmcmFtZXMuIFRoZSBmaXgKKyAgICAgICAgaW4g
dGhhdCBidWcgb25seSBhdm9pZHMgdGhpcyB3YWxrIHdoZW4gdGhlIHdob2xlIGRvY3VtZW50IGhh
cyBubyBmcmFtZXMsIHRoaXMKKyAgICAgICAgcGF0Y2ggZXh0ZW5kcyBpdCB0byBza2lwIHRyYXZl
cnNpbmcgc3VidHJlZXMgdGhhdCBoYXZlIG5vIGlmcmFtZXMgYnkgaG9va2luZworICAgICAgICB0
aGUgZnJhbWUgYXNzaWdubWVudCB0byB3YWxrIHVwIHRoZSB0cmVlIGFuZCBrZWVwIHRyYWNrIG9m
IHRoZSBjb3VudCBvZiBmcmFtZXMKKyAgICAgICAgaW4gdGhlIHN1YnRyZWUgb24gY29udGVudEZy
YW1lIGFzc2lnbm1lbnQgYW5kIHRoZW4gZGVjcmVtZW50IGl0IG9uIGRpc2Nvbm5lY3QuCisKKyAg
ICAgICAgVGVzdDogZmFzdC9mcmFtZXMvcGFyc2VyLWFwcGVuZC1zdWJmcmFtZS1jb3VudC5odG1s
CisKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3
aWxsUmVtb3ZlQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VyQXBwZW5kQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VyUmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VySW5zZXJ0QmVmb3JlKToKKyAgICAgICAgICAgIFRoZSBwYXJzZXIgbWF5IG1vdmUg
bm9kZXMgd2l0aG91dCBkb2luZyBmcmFtZSBkaXNjb25uZWN0aW9uIHNvIHdlCisgICAgICAgICAg
ICBtdXN0IG1haW50YWluIHRoZSBjb25uZWN0ZWQgc3ViZnJhbWUgY291bnQgbWFudWFsbHkgZHVy
aW5nIHRoZXNlCisgICAgICAgICAgICBtdXRhdGlvbnMuCisgICAgICAgICogZG9tL0NvbnRhaW5l
ck5vZGVBbGdvcml0aG1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkRnJhbWVEaXNjb25u
ZWN0b3I6OmNvbGxlY3RGcmFtZU93bmVycyk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGVB
bGdvcml0aG1zLmg6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpD
aGlsZEZyYW1lRGlzY29ubmVjdG9yKToKKyAgICAgICAgKENoaWxkRnJhbWVEaXNjb25uZWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdEZyYW1l
T3duZXJzKToKKyAgICAgICAgICBSZW5hbWVkIGZyb20gY29sbGVjdERlc2NlbmRhbnQoKSB0byBi
ZXR0ZXIgcmVmbGVjdCB3aGF0IGl0IHJlYWxseSBkb2VzLgorICAgICAgICAoV2ViQ29yZTo6Q2hp
bGRGcmFtZURpc2Nvbm5lY3Rvcjo6ZGlzY29ubmVjdENvbGxlY3RlZEZyYW1lT3duZXJzKToKKyAg
ICAgICAgICBSZW5hbWVkIGZyb20gZGlzY29ubmVjdCgpIHRvIGJldHRlciByZWZsZWN0IHdoYXQg
aXQgcmVhbGx5IGRvZXMuCisgICAgICAgIChXZWJDb3JlOjpDaGlsZEZyYW1lRGlzY29ubmVjdG9y
OjpkaXNjb25uZWN0KToKKyAgICAgICAgICBOZXcgbWV0aG9kIHRoYXQgZG9lcyB0aGUgY29sbGVj
dGlvbiBvZiBmcmFtZSBvd25lcnMgb24gZWl0aGVyIHRoZSByb290CisgICAgICAgICAgb3Igb25s
eSBpdCdzIGRlc2NlbmRhbnRzLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmNvbm5lY3RlZFN1YmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6aW5jcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpkZWNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KToKKyAgICAgICAgKiBkb20v
Tm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJl
RGF0YTo6Y29ubmVjdGVkU3ViZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFy
ZURhdGE6OmluY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZVJhcmVEYXRhOjpkZWNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KToKKyAgICAg
ICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRnJhbWVPd25lckVsZW1lbnQ6OnNldENvbnRlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6OmRpc2Nvbm5lY3RDb250ZW50RnJhbWUpOgorCiAyMDEy
LTEyLTA0ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBTdHls
ZSBzaGFyaW5nOiBBbGxvdyBzaGFyaW5nIGJldHdlZW4gZWxlbWVudHMgd2l0aCBjbGFzc2VzIG5v
dCByZWZlcmVuY2VkIGJ5IGFueSBzZWxlY3RvcnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ29udGFpbmVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZS5jcHAKaW5kZXggZTE5YjViNWExNTRlYzdhYzFkYjM0NGE4ZWE0ZThkNzYxZDZhMWYzYy4uOTFl
ZWVlZjFiOTA1MDY4Mzk0MTQxOTlhZTFkMDIzZTk4NDMxOTMyZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9D
b250YWluZXJOb2RlLmNwcApAQCAtMzA5LDYgKzMwOSwxMSBAQCB2b2lkIENvbnRhaW5lck5vZGU6
OnBhcnNlckluc2VydEJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBuZXh0
Q2hpbAogCiAgICAgaW5zZXJ0QmVmb3JlQ29tbW9uKG5leHRDaGlsZCwgbmV3Q2hpbGQuZ2V0KCkp
OwogCisgICAgaWYgKHVuc2lnbmVkIGNvdW50ID0gbmV3Q2hpbGQtPmNvbm5lY3RlZFN1YmZyYW1l
Q291bnQoKSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBuZXdDaGlsZC0+cGFyZW50T3JI
b3N0Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKQorICAgICAg
ICAgICAgbm9kZS0+aW5jcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVDb3VudChjb3VudCk7CisgICAg
fQorCiAgICAgY2hpbGRyZW5DaGFuZ2VkKHRydWUsIG5ld0NoaWxkLT5wcmV2aW91c1NpYmxpbmco
KSwgbmV4dENoaWxkLCAxKTsKICAgICBDaGlsZE5vZGVJbnNlcnRpb25Ob3RpZmllcih0aGlzKS5u
b3RpZnkobmV3Q2hpbGQuZ2V0KCkpOwogfQpAQCAtNDM4LDcgKzQ0Myw3IEBAIHN0YXRpYyB2b2lk
IHdpbGxSZW1vdmVDaGlsZHJlbihDb250YWluZXJOb2RlKiBjb250YWluZXIpCiAgICAgICAgIGRp
c3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKGNoaWxkKTsKICAgICB9CiAKLSAgICBDaGlsZEZyYW1l
RGlzY29ubmVjdG9yKGNvbnRhaW5lciwgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6RG9Ob3RJbmNs
dWRlUm9vdCkuZGlzY29ubmVjdCgpOworICAgIENoaWxkRnJhbWVEaXNjb25uZWN0b3IoY29udGFp
bmVyKS5kaXNjb25uZWN0KENoaWxkRnJhbWVEaXNjb25uZWN0b3I6OkRlc2NlbmRhbnRzT25seSk7
CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9kZTo6ZGlzY29ubmVjdERlc2NlbmRhbnRGcmFtZXMoKQpA
QCAtNTQxLDYgKzU0NiwxMSBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnBhcnNlclJlbW92ZUNoaWxk
KE5vZGUqIG9sZENoaWxkKQogICAgIE5vZGUqIHByZXYgPSBvbGRDaGlsZC0+cHJldmlvdXNTaWJs
aW5nKCk7CiAgICAgTm9kZSogbmV4dCA9IG9sZENoaWxkLT5uZXh0U2libGluZygpOwogCisgICAg
aWYgKHVuc2lnbmVkIGNvdW50ID0gb2xkQ2hpbGQtPmNvbm5lY3RlZFN1YmZyYW1lQ291bnQoKSkg
eworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBvbGRDaGlsZC0+cGFyZW50T3JIb3N0Tm9kZSgp
OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKQorICAgICAgICAgICAgbm9k
ZS0+ZGVjcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVDb3VudChjb3VudCk7CisgICAgfQorCiAgICAg
cmVtb3ZlQmV0d2VlbihwcmV2LCBuZXh0LCBvbGRDaGlsZCk7CiAKICAgICBjaGlsZHJlbkNoYW5n
ZWQodHJ1ZSwgcHJldiwgbmV4dCwgLTEpOwpAQCAtNjkxLDYgKzcwMSwxMSBAQCB2b2lkIENvbnRh
aW5lck5vZGU6OnBhcnNlckFwcGVuZENoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQpCiAg
ICAgICAgIHRyZWVTY29wZSgpLT5hZG9wdElmTmVlZGVkKG5ld0NoaWxkLmdldCgpKTsKICAgICB9
CiAKKyAgICBpZiAodW5zaWduZWQgY291bnQgPSBuZXdDaGlsZC0+Y29ubmVjdGVkU3ViZnJhbWVD
b3VudCgpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IG5ld0NoaWxkLT5wYXJlbnRPckhv
c3ROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpCisgICAgICAg
ICAgICBub2RlLT5pbmNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KGNvdW50KTsKKyAgICB9
CisKICAgICBjaGlsZHJlbkNoYW5nZWQodHJ1ZSwgbGFzdCwgMCwgMSk7CiAgICAgQ2hpbGROb2Rl
SW5zZXJ0aW9uTm90aWZpZXIodGhpcykubm90aWZ5KG5ld0NoaWxkLmdldCgpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCmluZGV4IDU5ZGFj
NzQ0NDZmZTJlNGQwMTg2NGYzMzA2YTY1ODI2OGU2Y2ZiMWYuLmRiZDAyNmM2ZTQ2ZTU1MjZiYTA2
MTU2NzQyM2I0ZGY2MTk1NDRhMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5l
ck5vZGVBbGdvcml0aG1zLmNwcApAQCAtMTA5LDEwICsxMDksMTAgQEAgdm9pZCBDaGlsZE5vZGVS
ZW1vdmFsTm90aWZpZXI6Om5vdGlmeURlc2NlbmRhbnRSZW1vdmVkRnJvbVRyZWUoQ29udGFpbmVy
Tm9kZSogbm8KICAgICB9CiB9CiAKLXZvaWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVj
dERlc2NlbmRhbnQoRWxlbWVudFNoYWRvdyogc2hhZG93KQordm9pZCBDaGlsZEZyYW1lRGlzY29u
bmVjdG9yOjpjb2xsZWN0RnJhbWVPd25lcnMoRWxlbWVudFNoYWRvdyogc2hhZG93KQogewogICAg
IGZvciAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJv
b3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkKLSAgICAgICAgY29sbGVjdERlc2Nl
bmRhbnQocm9vdCwgSW5jbHVkZVJvb3QpOworICAgICAgICBjb2xsZWN0RnJhbWVPd25lcnMocm9v
dCk7CiB9CiAKIHZvaWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6VGFyZ2V0OjpkaXNjb25uZWN0
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGht
cy5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgKaW5kZXgg
YjVmMGM0YmZhMDQwNmZlODRkZWEyYTMwOGFhOWFiNDZlYmZmNGFhOS4uZmE0OTg4M2Y4MWRmNTc1
OTAxNTZmN2UzZmY0MDY0NTRlODFmMjE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGVBbGdvcml0aG1zLmgKQEAgLTI3MywzMyArMjczLDIyIEBAIGlubGluZSB2b2lkIENo
aWxkTm9kZVJlbW92YWxOb3RpZmllcjo6bm90aWZ5KE5vZGUqIG5vZGUpCiAKIGNsYXNzIENoaWxk
RnJhbWVEaXNjb25uZWN0b3IgewogcHVibGljOgotICAgIGVudW0gU2hvdWxkSW5jbHVkZVJvb3Qg
ewotICAgICAgICBEb05vdEluY2x1ZGVSb290LAotICAgICAgICBJbmNsdWRlUm9vdAorICAgIGVu
dW0gRGlzY29ubmVjdFBvbGljeSB7CisgICAgICAgIFJvb3RBbmREZXNjZW5kYW50cywKKyAgICAg
ICAgRGVzY2VuZGFudHNPbmx5CiAgICAgfTsKIAotICAgIGV4cGxpY2l0IENoaWxkRnJhbWVEaXNj
b25uZWN0b3IoTm9kZSogcm9vdCwgU2hvdWxkSW5jbHVkZVJvb3Qgc2hvdWxkSW5jbHVkZVJvb3Qg
PSBJbmNsdWRlUm9vdCkKKyAgICBleHBsaWNpdCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yKE5vZGUq
IHJvb3QpCiAgICAgICAgIDogbV9yb290KHJvb3QpCiAgICAgewotICAgICAgICAvLyBJZiB3ZSBr
bm93IHRoZXJlJ3Mgbm8gZnJhbWVzIHRvIGRpc2Nvbm5lY3QgdGhlbiBkb24ndCBib3RoZXIgdHJh
dmVyc2luZwotICAgICAgICAvLyB0aGUgdHJlZSBsb29raW5nIGZvciB0aGVtLgotICAgICAgICBG
cmFtZSogZnJhbWUgPSByb290LT5kb2N1bWVudCgpLT5mcmFtZSgpOwotICAgICAgICBpZiAoZnJh
bWUgJiYgIWZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgY29sbGVjdERlc2NlbmRhbnQobV9yb290LCBzaG91bGRJbmNsdWRlUm9vdCk7CiAg
ICAgfQogCi0gICAgfkNoaWxkRnJhbWVEaXNjb25uZWN0b3IoKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB2b2lkIGRpc2Nvbm5lY3QoKTsKLQotICAgIHN0YXRpYyBib29sIG5vZGVIYXNEaXNjb25uZWN0
b3IoTm9kZSopOworICAgIHZvaWQgZGlzY29ubmVjdChEaXNjb25uZWN0UG9saWN5ID0gUm9vdEFu
ZERlc2NlbmRhbnRzKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGNvbGxlY3REZXNjZW5kYW50KE5v
ZGUqIHJvb3QsIFNob3VsZEluY2x1ZGVSb290KTsKLSAgICB2b2lkIGNvbGxlY3REZXNjZW5kYW50
KEVsZW1lbnRTaGFkb3cqKTsKKyAgICB2b2lkIGNvbGxlY3RGcmFtZU93bmVycyhOb2RlKiByb290
KTsKKyAgICB2b2lkIGNvbGxlY3RGcmFtZU93bmVycyhFbGVtZW50U2hhZG93Kik7CisgICAgdm9p
ZCBkaXNjb25uZWN0Q29sbGVjdGVkRnJhbWVPd25lcnMoKTsKIAogICAgIGNsYXNzIFRhcmdldCB7
CiAgICAgcHVibGljOgpAQCAtMzIxLDIxICszMTAsMjUgQEAgcHJpdmF0ZToKICAgICBOb2RlKiBt
X3Jvb3Q7CiB9OwogCi1pbmxpbmUgdm9pZCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpjb2xsZWN0
RGVzY2VuZGFudChOb2RlKiByb290LCBTaG91bGRJbmNsdWRlUm9vdCBzaG91bGRJbmNsdWRlUm9v
dCkKK2lubGluZSB2b2lkIENoaWxkRnJhbWVEaXNjb25uZWN0b3I6OmNvbGxlY3RGcmFtZU93bmVy
cyhOb2RlKiByb290KQogewotICAgIGZvciAoTm9kZSogbm9kZSA9IHNob3VsZEluY2x1ZGVSb290
ID09IEluY2x1ZGVSb290ID8gcm9vdCA6IHJvb3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsKLSAgICAg
ICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3QpKSB7Ci0gICAgICAgIGlm
ICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7Ci0gICAgICAgIGlmIChlbGVtZW50
LT5oYXNDdXN0b21DYWxsYmFja3MoKSAmJiBlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkp
Ci0gICAgICAgICAgICBtX2xpc3QuYXBwZW5kKHRvRnJhbWVPd25lckVsZW1lbnQoZWxlbWVudCkp
OwotICAgICAgICBpZiAoRWxlbWVudFNoYWRvdyogc2hhZG93ID0gZWxlbWVudC0+c2hhZG93KCkp
Ci0gICAgICAgICAgICBjb2xsZWN0RGVzY2VuZGFudChzaGFkb3cpOwotICAgIH0KKyAgICBpZiAo
IXJvb3QtPmNvbm5lY3RlZFN1YmZyYW1lQ291bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGp1c3QgY2hlY2sgaXNFbGVtZW50Tm9kZSgpIHRvIGF2b2lk
IHRoZSB2aXJ0dWFsIGNhbGwKKyAgICAvLyBhbmQgd2Ugc2hvdWxkIG5vdCBkZXBlbmQgb24gaGFz
Q3VzdG9tQ2FsbGJhY2tzKCkuCisgICAgaWYgKHJvb3QtPmhhc0N1c3RvbUNhbGxiYWNrcygpICYm
IHJvb3QtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkKKyAgICAgICAgbV9saXN0LmFwcGVuZCh0b0Zy
YW1lT3duZXJFbGVtZW50KHJvb3QpKTsKKworICAgIGZvciAoTm9kZSogY2hpbGQgPSByb290LT5m
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAg
ICBjb2xsZWN0RnJhbWVPd25lcnMoY2hpbGQpOworCisgICAgRWxlbWVudFNoYWRvdyogc2hhZG93
ID0gcm9vdC0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KHJvb3QpLT5zaGFkb3coKSA6IDA7
CisgICAgaWYgKHNoYWRvdykKKyAgICAgICAgY29sbGVjdEZyYW1lT3duZXJzKHNoYWRvdyk7CiB9
CiAKLWlubGluZSB2b2lkIENoaWxkRnJhbWVEaXNjb25uZWN0b3I6OmRpc2Nvbm5lY3QoKQoraW5s
aW5lIHZvaWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6ZGlzY29ubmVjdENvbGxlY3RlZEZyYW1l
T3duZXJzKCkKIHsKICAgICAvLyBNdXN0IGRpc2FibGUgZnJhbWUgbG9hZGluZyBpbiB0aGUgc3Vi
dHJlZSBzbyBhbiB1bmxvYWQgaGFuZGxlciBjYW5ub3QKICAgICAvLyBpbnNlcnQgbW9yZSBmcmFt
ZXMgYW5kIGNyZWF0ZSBsb2FkZWQgZnJhbWVzIGluIGRldGFjaGVkIHN1YnRyZWVzLgpAQCAtMzQ4
LDYgKzM0MSwyMSBAQCBpbmxpbmUgdm9pZCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpkaXNjb25u
ZWN0KCkKICAgICB9CiB9CiAKK2lubGluZSB2b2lkIENoaWxkRnJhbWVEaXNjb25uZWN0b3I6OmRp
c2Nvbm5lY3QoRGlzY29ubmVjdFBvbGljeSBwb2xpY3kpCit7CisgICAgaWYgKCFtX3Jvb3QtPmNv
bm5lY3RlZFN1YmZyYW1lQ291bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHBvbGlj
eSA9PSBSb290QW5kRGVzY2VuZGFudHMpCisgICAgICAgIGNvbGxlY3RGcmFtZU93bmVycyhtX3Jv
b3QpOworICAgIGVsc2UgeworICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9yb290LT5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICAg
ICAgY29sbGVjdEZyYW1lT3duZXJzKGNoaWxkKTsKKyAgICB9CisKKyAgICBkaXNjb25uZWN0Q29s
bGVjdGVkRnJhbWVPd25lcnMoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gQ29udGFpbmVyTm9kZUFsZ29yaXRobXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGE4NTU5
MmRhNDg3ZTBjMzE0NjY2MDFlZGM5Y2Y2ZDU2MjNkMGJjZWEuLjI0ZmVjODhlNTU1OTAxMTYyNDk2
MGNjYjllZTg1YmZjYTVkZDFlNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTI3MjAsNiArMjcyMCwy
MiBAQCB2b2lkIE5vZGU6OnRleHRSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzKSBjb25zdAog
ICAgIHJhbmdlLT50ZXh0UmVjdHMocmVjdHMpOwogfQogCit1bnNpZ25lZCBOb2RlOjpjb25uZWN0
ZWRTdWJmcmFtZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IHJh
cmVEYXRhKCktPmNvbm5lY3RlZFN1YmZyYW1lQ291bnQoKSA6IDA7Cit9CisKK3ZvaWQgTm9kZTo6
aW5jcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVDb3VudCh1bnNpZ25lZCBhbW91bnQpCit7CisgICAg
QVNTRVJUKGlzQ29udGFpbmVyTm9kZSgpKTsKKyAgICBlbnN1cmVSYXJlRGF0YSgpLT5pbmNyZW1l
bnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KGFtb3VudCk7Cit9CisKK3ZvaWQgTm9kZTo6ZGVjcmVt
ZW50Q29ubmVjdGVkU3ViZnJhbWVDb3VudCh1bnNpZ25lZCBhbW91bnQpCit7CisgICAgcmFyZURh
dGEoKS0+ZGVjcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVDb3VudChhbW91bnQpOworfQorCiB2b2lk
IE5vZGU6OnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKQogewogICAgIHNldEhhc1Njb3Bl
ZEhUTUxTdHlsZUNoaWxkKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggNDFkYWJjMzM1Y2M2MjQxODcx
MWM2Y2EwMzViY2U1YzA3NThiMThkYy4uMmM5ZGM2NTkwMjdjM2FjMDBkZjIxY2EzM2IzZDk5ZTVh
MjhkOGFiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC02ODcsNiArNjg3LDEwIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgdGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYpIGNvbnN0OwogCisgICAgdW5zaWduZWQg
Y29ubmVjdGVkU3ViZnJhbWVDb3VudCgpIGNvbnN0OworICAgIHZvaWQgaW5jcmVtZW50Q29ubmVj
dGVkU3ViZnJhbWVDb3VudCh1bnNpZ25lZCBhbW91bnQgPSAxKTsKKyAgICB2b2lkIGRlY3JlbWVu
dENvbm5lY3RlZFN1YmZyYW1lQ291bnQodW5zaWduZWQgYW1vdW50ID0gMSk7CisKIHByaXZhdGU6
CiAgICAgZW51bSBOb2RlRmxhZ3MgewogICAgICAgICBJc1RleHRGbGFnID0gMSwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlUmFyZURhdGEuaAppbmRleCBmOGY4NThjYmEyYTczNTZjZmJkYWMyNzIwOTkwNjljZjI5
YTcwMWNkLi45MjliZjcwYjBkYWE3MDg3NmNkZWY3ZWJjYjhmMmZjMTlhYmVjMzc4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGVSYXJlRGF0YS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiTGl2ZU5v
ZGVMaXN0LmgiCiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIk11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UXVhbGlmaWVkTmFtZS5oIgogI2luY2x1ZGUgIlRhZ05vZGVMaXN0LmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KQEAgLTIwOSw2ICsyMTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9uZWVk
c0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaChmYWxzZSkKICAgICAgICAgLCBt
X3N0eWxlQWZmZWN0ZWRCeUVtcHR5KGZhbHNlKQogICAgICAgICAsIG1faXNJbkNhbnZhc1N1YnRy
ZWUoZmFsc2UpCisgICAgICAgICwgbV9jb25uZWN0ZWRGcmFtZUNvdW50KDApCiAjaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQogICAgICAgICAsIG1fY29udGFpbnNGdWxsU2NyZWVuRWxlbWVudChm
YWxzZSkKICNlbmRpZgpAQCAtMzI0LDYgKzMyNiwyMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Zv
Y3VzZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRm9jdXNlZDsgfQogICAgIHZvaWQgc2V0Rm9jdXNl
ZChib29sIGZvY3VzZWQpIHsgbV9pc0ZvY3VzZWQgPSBmb2N1c2VkOyB9CiAKKyAgICB1bnNpZ25l
ZCBjb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb25uZWN0ZWRGcmFt
ZUNvdW50OyB9CisKKyAgICB2b2lkIGluY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQodW5z
aWduZWQgYW1vdW50KQorICAgIHsKKyAgICAgICAgbV9jb25uZWN0ZWRGcmFtZUNvdW50ICs9IGFt
b3VudDsKKyAgICB9CisKKyAgICB2b2lkIGRlY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQo
dW5zaWduZWQgYW1vdW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY29ubmVjdGVkRnJhbWVD
b3VudCk7CisgICAgICAgIEFTU0VSVChhbW91bnQgPD0gbV9jb25uZWN0ZWRGcmFtZUNvdW50KTsK
KyAgICAgICAgbV9jb25uZWN0ZWRGcmFtZUNvdW50IC09IGFtb3VudDsKKyAgICB9CisKICAgICB2
aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0Owog
CiBwcm90ZWN0ZWQ6CkBAIC0zNzIsNiArMzg4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbmVl
ZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2ggOiAxOwogICAgIGJvb2wgbV9z
dHlsZUFmZmVjdGVkQnlFbXB0eSA6IDE7CiAgICAgYm9vbCBtX2lzSW5DYW52YXNTdWJ0cmVlIDog
MTsKKyAgICB1bnNpZ25lZCBtX2Nvbm5lY3RlZEZyYW1lQ291bnQgOiAxMDsKICNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCiAgICAgYm9vbCBtX2NvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQgOiAx
OwogI2VuZGlmCkBAIC00MDIsNiArNDE5LDkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAorLy8g
RW5zdXJlIHRoZSAxMCBiaXRzIHJlc2VydmVkIGZvciB0aGUgbV9jb25uZWN0ZWRGcmFtZUNvdW50
IGNhbm5vdCBvdmVyZmxvdworQ09NUElMRV9BU1NFUlQoUGFnZTo6bWF4TnVtYmVyT2ZGcmFtZXMg
PCAxMDI0LCBGcmFtZV9saW1pdF9zaG91bGRfZml0X2luX3JhcmVfZGF0YV9jb3VudCk7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIE5vZGVSYXJlRGF0YV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKaW5kZXggMWUzODJiZmFh
NmQ3NTZhN2QzOTFiYWZhMmZhZDNmODM3OGIwYTU2OS4uYjg5MzExMzE2MDNjYTBlMTQ0ZTNhMGE2
NTI0NjFlMDUwNmE5NmU1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJh
bWVPd25lckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3du
ZXJFbGVtZW50LmNwcApAQCAtNTcsMTMgKzU3LDIwIEBAIHZvaWQgSFRNTEZyYW1lT3duZXJFbGVt
ZW50OjpzZXRDb250ZW50RnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIC8vIERpc2Nvbm5lY3RlZCBm
cmFtZXMgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGxvYWQuCiAgICAgQVNTRVJUKGluRG9jdW1l
bnQoKSk7CiAgICAgbV9jb250ZW50RnJhbWUgPSBmcmFtZTsKKworICAgIGZvciAoQ29udGFpbmVy
Tm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkp
CisgICAgICAgIG5vZGUtPmluY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQoKTsKIH0KIAog
dm9pZCBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OmRpc2Nvbm5lY3RDb250ZW50RnJhbWUoKQogewog
ICAgIEFTU0VSVChoYXNDdXN0b21DYWxsYmFja3MoKSk7Ci0gICAgLy8gVGhpcyBjYXVzZXMgYW4g
dW5sb2FkIGV2ZW50IHRodXMgY2Fubm90IGJlIGEgcGFydCBvZiByZW1vdmVkRnJvbSgpLgorICAg
IC8vIEZJWE1FOiBUaGlzIGNhdXNlcyBhbiB1bmxvYWQgZXZlbnQgaW4gdGhlIHN1YmZyYW1lIHdo
aWNoIGNvdWxkIGV4ZWN1dGUKKyAgICAvLyBzY3JpcHQgdGhhdCB3b3VsZCByZWFjaCBpbnRvIHVw
IGludG8gdGhpcyBkb2N1bWVudC4KICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29udGVudEZyYW1l
KCkpIHsKKyAgICAgICAgZm9yIChDb250YWluZXJOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkKKyAgICAgICAgICAgIG5vZGUtPmRlY3JlbWVu
dENvbm5lY3RlZFN1YmZyYW1lQ291bnQoKTsKKwogICAgICAgICBSZWZQdHI8RnJhbWU+IHByb3Rl
Y3QoZnJhbWUpOwogICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmZyYW1lRGV0YWNoZWQoKTsKICAg
ICAgICAgZnJhbWUtPmRpc2Nvbm5lY3RPd25lckVsZW1lbnQoKTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlODA5NDU0OWNl
ZWMwOThlMjJhMWIzMTlmNzA5MjNkNWU0OGIzZDljLi5iNjcwMDhiOTliZDY4N2MwOGRmMmQ2MzA2
MTlhMzZmM2JjMjVhZjM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTItMDQgIEVsbGlv
dHQgU3ByZWhuICA8ZXNwcmVobkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVHJhY2sgc3ViZnJh
bWUgY291bnQgdG8gYXZvaWQgdHJhdmVyc2luZyB0aGUgdHJlZSB3aGVuIHRoZXJlJ3Mgbm8gc3Vi
ZnJhbWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDE4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYSB0ZXN0IHRoYXQgd2hlbiBmcmFtZXMgYXJlIG1vdmVkIGFyb3VuZCBieSB0aGUgcGFyc2Vy
IGFuZCBub3QgYWN0dWFsbHkKKyAgICAgICAgZGV0YWNoZWQgd2Uga2VlcCB0aGUgc3ViZnJhbWUg
Y291bnRlcnMgb2YgYW5jZXN0b3JzIGNvbnNpc3RlbnQuCisKKyAgICAgICAgKiBmYXN0L2ZyYW1l
cy9wYXJzZXItYXBwZW5kLXN1YmZyYW1lLWNvdW50LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9mcmFtZXMvcGFyc2VyLWFwcGVuZC1zdWJmcmFtZS1jb3VudC5odG1sOiBBZGRl
ZC4KKwogMjAxMi0xMi0wNCAgVGFrYXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgV2ViS2l0IGdhcmRlbmluZy4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZnJhbWVzL3BhcnNlci1hcHBlbmQtc3ViZnJhbWUtY291bnQtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvcGFyc2VyLWFwcGVuZC1zdWJmcmFtZS1jb3Vu
dC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWQ4ZThiYTNjZTJjODg4MDk4MDFjZjI2Zjg1Mzli
ZDljMDI2NzU3MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3Bh
cnNlci1hcHBlbmQtc3ViZnJhbWUtY291bnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAor
VGhpcyB0ZXN0IHNob3VsZCBub3QgY2F1c2UgY3Jhc2ggb3IgYXNzZXJ0cyBkZWNyZW1lbnRpbmcg
dGhlIGNvbm5lY3RlZCBzdWJmcmFtZSBjb3VudCBhZnRlciB0aGUgcGFyc2VyIGhhcyBtb3ZlZCB0
aGUgaWZyYW1lIGluIHRoZSBhZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGhtLgorCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3BhcnNlci1hcHBlbmQtc3ViZnJhbWUtY291bnQu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3BhcnNlci1hcHBlbmQtc3ViZnJhbWUtY291
bnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mZTIwYjNjNDliMTE4OWI4YzJiZjE5YmJhNTJkY2E4YmYwZDFi
MDlkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvcGFyc2VyLWFw
cGVuZC1zdWJmcmFtZS1jb3VudC5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBodG1s
PgorCis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgd2luZG93
LnRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworCisgICAgb25sb2FkID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIFtdLmZvckVhY2guY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhIConKSwg
ZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxk
KG5vZGUpOworICAgICAgICB9KTsKKyAgICB9Cis8L3NjcmlwdD4KKworPHA+CisgICAgVGhpcyB0
ZXN0IHNob3VsZCBub3QgY2F1c2UgY3Jhc2ggb3IgYXNzZXJ0cyBkZWNyZW1lbnRpbmcgdGhlIGNv
bm5lY3RlZAorICAgIHN1YmZyYW1lIGNvdW50IGFmdGVyIHRoZSBwYXJzZXIgaGFzIG1vdmVkIHRo
ZSBpZnJhbWUgaW4gdGhlIGFkb3B0aW9uIGFnZW5jeQorICAgIGFsZ29yaXRobS4KKzwvcD4KKwor
PCEtLSA8L2ZpZ3VyZT4gaXMgbWlzc2luZyB0byBjYXVzZSB0aGUgYWRvcHRpb24gYWdlbmN5IGFs
Z29yaXRobSB0byBtb3ZlIHRoZSBpZnJhbWUgLS0+Cis8YT48ZmlndXJlPjxpZnJhbWU+PC9pZnJh
bWU+PC9hPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183339</attachid>
            <date>2013-01-17 18:08:25 -0800</date>
            <delta_ts>2013-01-17 18:32:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101821-20130117180525.patch</filename>
            <type>text/plain</type>
            <size>16726</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMDM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTUyN2Y5NDNkNmI1NTY1
NTYxNGIzODk4MWRkZDdjYmVlZDU0ZWE4YS4uNWJlNTg5NmYzMzYzMTU3MmU4MDA1YmM0MWU2NGE1
MTZlNmZjNzNjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEzLTAxLTE3ICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFRyYWNrIHN1YmZy
YW1lIGNvdW50IHRvIGF2b2lkIHRyYXZlcnNpbmcgdGhlIHRyZWUgd2hlbiB0aGVyZSdzIG5vIHN1
YmZyYW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAxODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KKworICAgICAgICBNYWtl
IHJlbW92ZUNoaWxkIDktMTQlIGZhc3RlciBieSBub3Qgd2Fsa2luZyB0aGUgY2hpbGRyZW4gbG9v
a2luZyBmb3IKKyAgICAgICAgZnJhbWVzIHdoZW4gdGhlcmUncyBrbm93biB0byBiZSBubyBmcmFt
ZXMuCisKKyAgICAgICAgVGhpcyBpcyBhIG1vcmUgZ2VuZXJhbGl6ZWQgdmVyc2lvbiBvZiB0aGUg
Zml4IGluIDEwMTYxOSB0aGF0IG9ubHkgYXZvaWRlZAorICAgICAgICB0aGlzIHdhbGsgd2hlbiB0
aGUgd2hvbGUgZG9jdW1lbnQgaGFkIG5vIGZyYW1lcy4gVGhpcyBwYXRjaCBleHRlbmRzIGl0IHRv
CisgICAgICAgIHNraXAgdHJhdmVyc2luZyBzdWJ0cmVlcyB0aGF0IGhhdmUgbm8gZnJhbWVzIGJ5
IHRyYWNraW5nIHRoZSBudW1iZXIgb2YKKyAgICAgICAgZnJhbWVzIGluIHN1YnRyZWVzIGFuZCB0
aGVuIG9ubHkgd2Fsa2luZyB0aG9zZSBzdWJ0cmVlcyB0aGF0IGFyZSBrbm93biB0bworICAgICAg
ICBjb250YWluIGZyYW1lcy4KKworICAgICAgICBUZXN0OiBmYXN0L2ZyYW1lcy9wYXJzZXItYXBw
ZW5kLXN1YmZyYW1lLWNvdW50Lmh0bWwKKworICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OndpbGxSZW1vdmVDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpwYXJzZXJBcHBlbmRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZXJSZW1vdmVD
aGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZXJJbnNlcnRCZWZvcmUpOgorICAgICAgICAg
ICAgVGhlIHBhcnNlciBtYXkgbW92ZSBub2RlcyB3aXRob3V0IGRvaW5nIGZyYW1lIGRpc2Nvbm5l
Y3Rpb24gc28gd2UKKyAgICAgICAgICAgIG11c3QgbWFpbnRhaW4gdGhlIGNvbm5lY3RlZCBzdWJm
cmFtZSBjb3VudCBtYW51YWxseSBkdXJpbmcgdGhlc2UKKyAgICAgICAgICAgIG11dGF0aW9ucy4K
KyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdEZyYW1lT3duZXJzKToKKyAgICAg
ICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
aWxkRnJhbWVEaXNjb25uZWN0b3I6OkNoaWxkRnJhbWVEaXNjb25uZWN0b3IpOgorICAgICAgICAo
Q2hpbGRGcmFtZURpc2Nvbm5lY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZEZyYW1lRGlz
Y29ubmVjdG9yOjpjb2xsZWN0RnJhbWVPd25lcnMpOgorICAgICAgICAgIFJlbmFtZWQgZnJvbSBj
b2xsZWN0RGVzY2VuZGFudCgpIHRvIGJldHRlciByZWZsZWN0IHdoYXQgaXQgcmVhbGx5IGRvZXMu
CisgICAgICAgIChXZWJDb3JlOjpDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpkaXNjb25uZWN0Q29s
bGVjdGVkRnJhbWVPd25lcnMpOgorICAgICAgICAgIFJlbmFtZWQgZnJvbSBkaXNjb25uZWN0KCkg
dG8gYmV0dGVyIHJlZmxlY3Qgd2hhdCBpdCByZWFsbHkgZG9lcy4KKyAgICAgICAgKFdlYkNvcmU6
OkNoaWxkRnJhbWVEaXNjb25uZWN0b3I6OmRpc2Nvbm5lY3QpOgorICAgICAgICAgIE5ldyBtZXRo
b2QgdGhhdCBkb2VzIHRoZSBjb2xsZWN0aW9uIG9mIGZyYW1lIG93bmVycyBvbiBlaXRoZXIgdGhl
IHJvb3QKKyAgICAgICAgICBvciBvbmx5IGl0J3MgZGVzY2VuZGFudHMuCisgICAgICAgICogZG9t
L05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29ubmVjdGVkU3ViZnJhbWVDb3Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppbmNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNv
dW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRlY3JlbWVudENvbm5lY3RlZFN1YmZyYW1l
Q291bnQpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgICogZG9tL05vZGVSYXJlRGF0
YS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpjb25uZWN0ZWRTdWJmcmFtZUNvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6aW5jcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVD
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6OmRlY3JlbWVudENvbm5lY3Rl
ZFN1YmZyYW1lQ291bnQpOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudDo6c2V0Q29udGVudEZy
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudDo6ZGlzY29ubmVj
dENvbnRlbnRGcmFtZSk6CisKIDIwMTMtMDEtMTcgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNDAw
MjMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXggMDE3NTllMmFiZjVmOGY5
ZTVjODc1YjRhZGU5Y2YyNTQ5MjE1N2M2YS4uZWY5MjFlYmY2YjQzZDU0YmJkNjhlYTlkMTIxNmI0
ZDRjNDI5OWRhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcApAQCAtMzMxLDYg
KzMzMSwxMSBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnBhcnNlckluc2VydEJlZm9yZShQYXNzUmVm
UHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBuZXh0Q2hpbAogCiAgICAgaW5zZXJ0QmVmb3JlQ29t
bW9uKG5leHRDaGlsZCwgbmV3Q2hpbGQuZ2V0KCkpOwogCisgICAgaWYgKHVuc2lnbmVkIGNvdW50
ID0gbmV3Q2hpbGQtPmNvbm5lY3RlZFN1YmZyYW1lQ291bnQoKSkgeworICAgICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBuZXdDaGlsZC0+cGFyZW50T3JIb3N0Tm9kZSgpOyBub2RlOyBub2RlID0gbm9k
ZS0+cGFyZW50T3JIb3N0Tm9kZSgpKQorICAgICAgICAgICAgbm9kZS0+aW5jcmVtZW50Q29ubmVj
dGVkU3ViZnJhbWVDb3VudChjb3VudCk7CisgICAgfQorCiAgICAgY2hpbGRyZW5DaGFuZ2VkKHRy
dWUsIG5ld0NoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSwgbmV4dENoaWxkLCAxKTsKICAgICBDaGls
ZE5vZGVJbnNlcnRpb25Ob3RpZmllcih0aGlzKS5ub3RpZnkobmV3Q2hpbGQuZ2V0KCkpOwogfQpA
QCAtNDQ5LDcgKzQ1NCw3IEBAIHN0YXRpYyB2b2lkIHdpbGxSZW1vdmVDaGlsZHJlbihDb250YWlu
ZXJOb2RlKiBjb250YWluZXIpCiAgICAgICAgIGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKGNo
aWxkKTsKICAgICB9CiAKLSAgICBDaGlsZEZyYW1lRGlzY29ubmVjdG9yKGNvbnRhaW5lciwgQ2hp
bGRGcmFtZURpc2Nvbm5lY3Rvcjo6RG9Ob3RJbmNsdWRlUm9vdCkuZGlzY29ubmVjdCgpOworICAg
IENoaWxkRnJhbWVEaXNjb25uZWN0b3IoY29udGFpbmVyKS5kaXNjb25uZWN0KENoaWxkRnJhbWVE
aXNjb25uZWN0b3I6OkRlc2NlbmRhbnRzT25seSk7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9kZTo6
ZGlzY29ubmVjdERlc2NlbmRhbnRGcmFtZXMoKQpAQCAtNTUyLDYgKzU1NywxMSBAQCB2b2lkIENv
bnRhaW5lck5vZGU6OnBhcnNlclJlbW92ZUNoaWxkKE5vZGUqIG9sZENoaWxkKQogICAgIE5vZGUq
IHByZXYgPSBvbGRDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgTm9kZSogbmV4dCA9IG9s
ZENoaWxkLT5uZXh0U2libGluZygpOwogCisgICAgaWYgKHVuc2lnbmVkIGNvdW50ID0gb2xkQ2hp
bGQtPmNvbm5lY3RlZFN1YmZyYW1lQ291bnQoKSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUg
PSBvbGRDaGlsZC0+cGFyZW50T3JIb3N0Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50
T3JIb3N0Tm9kZSgpKQorICAgICAgICAgICAgbm9kZS0+ZGVjcmVtZW50Q29ubmVjdGVkU3ViZnJh
bWVDb3VudChjb3VudCk7CisgICAgfQorCiAgICAgcmVtb3ZlQmV0d2VlbihwcmV2LCBuZXh0LCBv
bGRDaGlsZCk7CiAKICAgICBjaGlsZHJlbkNoYW5nZWQodHJ1ZSwgcHJldiwgbmV4dCwgLTEpOwpA
QCAtNjk2LDYgKzcwNiwxMSBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnBhcnNlckFwcGVuZENoaWxk
KFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQpCiAgICAgICAgIHRyZWVTY29wZSgpLT5hZG9wdElm
TmVlZGVkKG5ld0NoaWxkLmdldCgpKTsKICAgICB9CiAKKyAgICBpZiAodW5zaWduZWQgY291bnQg
PSBuZXdDaGlsZC0+Y29ubmVjdGVkU3ViZnJhbWVDb3VudCgpKSB7CisgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA9IG5ld0NoaWxkLT5wYXJlbnRPckhvc3ROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2Rl
LT5wYXJlbnRPckhvc3ROb2RlKCkpCisgICAgICAgICAgICBub2RlLT5pbmNyZW1lbnRDb25uZWN0
ZWRTdWJmcmFtZUNvdW50KGNvdW50KTsKKyAgICB9CisKICAgICBjaGlsZHJlbkNoYW5nZWQodHJ1
ZSwgbGFzdCwgMCwgMSk7CiAgICAgQ2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXIodGhpcykubm90
aWZ5KG5ld0NoaWxkLmdldCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9D
b250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZUFsZ29yaXRobXMuY3BwCmluZGV4IDczM2FhNjIzZjY1YjQ3MDQ4NTk2MWQ5MGMzNmRhNjFh
MDYxOWRkMWYuLjA4MGIwZjM1OWNiNTZjYmZjODk2MjEyOTA0YTc2YjZmZTAzY2FhNTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcApAQCAtMTA5
LDEwICsxMDksMTAgQEAgdm9pZCBDaGlsZE5vZGVSZW1vdmFsTm90aWZpZXI6Om5vdGlmeURlc2Nl
bmRhbnRSZW1vdmVkRnJvbVRyZWUoQ29udGFpbmVyTm9kZSogbm8KICAgICB9CiB9CiAKLXZvaWQg
Q2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdERlc2NlbmRhbnQoRWxlbWVudFNoYWRvdyog
c2hhZG93KQordm9pZCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpjb2xsZWN0RnJhbWVPd25lcnMo
RWxlbWVudFNoYWRvdyogc2hhZG93KQogewogICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IHNo
YWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRv
d1Jvb3QoKSkKLSAgICAgICAgY29sbGVjdERlc2NlbmRhbnQocm9vdCwgSW5jbHVkZVJvb3QpOwor
ICAgICAgICBjb2xsZWN0RnJhbWVPd25lcnMocm9vdCk7CiB9CiAKIHZvaWQgQ2hpbGRGcmFtZURp
c2Nvbm5lY3Rvcjo6VGFyZ2V0OjpkaXNjb25uZWN0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGVBbGdvcml0aG1zLmgKaW5kZXggNTMxMmRkNDg4ZGEyMTg3MzBmNDQ4M2Y5MDgw
YTlkYTNkMGQ3MTAzOS4uYWVjZjEzMDM0MDZkNTU3YzZkMTI2NjRjMGJjZTMzZjU1ZGQ0MjU3NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgKQEAgLTI2
MCwzMyArMjYwLDIyIEBAIGlubGluZSB2b2lkIENoaWxkTm9kZVJlbW92YWxOb3RpZmllcjo6bm90
aWZ5KE5vZGUqIG5vZGUpCiAKIGNsYXNzIENoaWxkRnJhbWVEaXNjb25uZWN0b3IgewogcHVibGlj
OgotICAgIGVudW0gU2hvdWxkSW5jbHVkZVJvb3QgewotICAgICAgICBEb05vdEluY2x1ZGVSb290
LAotICAgICAgICBJbmNsdWRlUm9vdAorICAgIGVudW0gRGlzY29ubmVjdFBvbGljeSB7CisgICAg
ICAgIFJvb3RBbmREZXNjZW5kYW50cywKKyAgICAgICAgRGVzY2VuZGFudHNPbmx5CiAgICAgfTsK
IAotICAgIGV4cGxpY2l0IENoaWxkRnJhbWVEaXNjb25uZWN0b3IoTm9kZSogcm9vdCwgU2hvdWxk
SW5jbHVkZVJvb3Qgc2hvdWxkSW5jbHVkZVJvb3QgPSBJbmNsdWRlUm9vdCkKKyAgICBleHBsaWNp
dCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yKE5vZGUqIHJvb3QpCiAgICAgICAgIDogbV9yb290KHJv
b3QpCiAgICAgewotICAgICAgICAvLyBJZiB3ZSBrbm93IHRoZXJlJ3Mgbm8gZnJhbWVzIHRvIGRp
c2Nvbm5lY3QgdGhlbiBkb24ndCBib3RoZXIgdHJhdmVyc2luZwotICAgICAgICAvLyB0aGUgdHJl
ZSBsb29raW5nIGZvciB0aGVtLgotICAgICAgICBGcmFtZSogZnJhbWUgPSByb290LT5kb2N1bWVu
dCgpLT5mcmFtZSgpOwotICAgICAgICBpZiAoZnJhbWUgJiYgIWZyYW1lLT50cmVlKCktPmZpcnN0
Q2hpbGQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY29sbGVjdERlc2NlbmRhbnQo
bV9yb290LCBzaG91bGRJbmNsdWRlUm9vdCk7CiAgICAgfQogCi0gICAgfkNoaWxkRnJhbWVEaXNj
b25uZWN0b3IoKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGRpc2Nvbm5lY3QoKTsKLQotICAg
IHN0YXRpYyBib29sIG5vZGVIYXNEaXNjb25uZWN0b3IoTm9kZSopOworICAgIHZvaWQgZGlzY29u
bmVjdChEaXNjb25uZWN0UG9saWN5ID0gUm9vdEFuZERlc2NlbmRhbnRzKTsKIAogcHJpdmF0ZToK
LSAgICB2b2lkIGNvbGxlY3REZXNjZW5kYW50KE5vZGUqIHJvb3QsIFNob3VsZEluY2x1ZGVSb290
KTsKLSAgICB2b2lkIGNvbGxlY3REZXNjZW5kYW50KEVsZW1lbnRTaGFkb3cqKTsKKyAgICB2b2lk
IGNvbGxlY3RGcmFtZU93bmVycyhOb2RlKiByb290KTsKKyAgICB2b2lkIGNvbGxlY3RGcmFtZU93
bmVycyhFbGVtZW50U2hhZG93Kik7CisgICAgdm9pZCBkaXNjb25uZWN0Q29sbGVjdGVkRnJhbWVP
d25lcnMoKTsKIAogICAgIGNsYXNzIFRhcmdldCB7CiAgICAgcHVibGljOgpAQCAtMzA4LDE4ICsy
OTcsMjUgQEAgcHJpdmF0ZToKICAgICBOb2RlKiBtX3Jvb3Q7CiB9OwogCi1pbmxpbmUgdm9pZCBD
aGlsZEZyYW1lRGlzY29ubmVjdG9yOjpjb2xsZWN0RGVzY2VuZGFudChOb2RlKiByb290LCBTaG91
bGRJbmNsdWRlUm9vdCBzaG91bGRJbmNsdWRlUm9vdCkKK2lubGluZSB2b2lkIENoaWxkRnJhbWVE
aXNjb25uZWN0b3I6OmNvbGxlY3RGcmFtZU93bmVycyhOb2RlKiByb290KQogewotICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSAoc2hvdWxkSW5jbHVkZVJvb3QgPT0gSW5jbHVkZVJvb3QgJiYgcm9vdC0+
aXNFbGVtZW50Tm9kZSgpKSA/IHRvRWxlbWVudChyb290KSA6IEVsZW1lbnRUcmF2ZXJzYWw6OmZp
cnN0V2l0aGluKHJvb3QpOwotICAgIGZvciAoOyBlbGVtZW50OyBlbGVtZW50ID0gRWxlbWVudFRy
YXZlcnNhbDo6bmV4dChlbGVtZW50LCByb290KSkgewotICAgICAgICBpZiAoZWxlbWVudC0+aGFz
Q3VzdG9tQ2FsbGJhY2tzKCkgJiYgZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQotICAg
ICAgICAgICAgbV9saXN0LmFwcGVuZCh0b0ZyYW1lT3duZXJFbGVtZW50KGVsZW1lbnQpKTsKLSAg
ICAgICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IGVsZW1lbnQtPnNoYWRvdygpKQotICAg
ICAgICAgICAgY29sbGVjdERlc2NlbmRhbnQoc2hhZG93KTsKLSAgICB9CisgICAgaWYgKCFyb290
LT5jb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBqdXN0IGNoZWNrIGlzRWxlbWVudE5vZGUoKSB0byBhdm9pZCB0aGUg
dmlydHVhbCBjYWxsCisgICAgLy8gYW5kIHdlIHNob3VsZCBub3QgZGVwZW5kIG9uIGhhc0N1c3Rv
bUNhbGxiYWNrcygpLgorICAgIGlmIChyb290LT5oYXNDdXN0b21DYWxsYmFja3MoKSAmJiByb290
LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpCisgICAgICAgIG1fbGlzdC5hcHBlbmQodG9GcmFtZU93
bmVyRWxlbWVudChyb290KSk7CisKKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gcm9vdC0+Zmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgY29s
bGVjdEZyYW1lT3duZXJzKGNoaWxkKTsKKworICAgIEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHJv
b3QtPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVudChyb290KS0+c2hhZG93KCkgOiAwOworICAg
IGlmIChzaGFkb3cpCisgICAgICAgIGNvbGxlY3RGcmFtZU93bmVycyhzaGFkb3cpOwogfQogCi1p
bmxpbmUgdm9pZCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpkaXNjb25uZWN0KCkKK2lubGluZSB2
b2lkIENoaWxkRnJhbWVEaXNjb25uZWN0b3I6OmRpc2Nvbm5lY3RDb2xsZWN0ZWRGcmFtZU93bmVy
cygpCiB7CiAgICAgLy8gTXVzdCBkaXNhYmxlIGZyYW1lIGxvYWRpbmcgaW4gdGhlIHN1YnRyZWUg
c28gYW4gdW5sb2FkIGhhbmRsZXIgY2Fubm90CiAgICAgLy8gaW5zZXJ0IG1vcmUgZnJhbWVzIGFu
ZCBjcmVhdGUgbG9hZGVkIGZyYW1lcyBpbiBkZXRhY2hlZCBzdWJ0cmVlcy4KQEAgLTMzMiw2ICsz
MjgsMjEgQEAgaW5saW5lIHZvaWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6ZGlzY29ubmVjdCgp
CiAgICAgfQogfQogCitpbmxpbmUgdm9pZCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpkaXNjb25u
ZWN0KERpc2Nvbm5lY3RQb2xpY3kgcG9saWN5KQoreworICAgIGlmICghbV9yb290LT5jb25uZWN0
ZWRTdWJmcmFtZUNvdW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwb2xpY3kgPT0g
Um9vdEFuZERlc2NlbmRhbnRzKQorICAgICAgICBjb2xsZWN0RnJhbWVPd25lcnMobV9yb290KTsK
KyAgICBlbHNlIHsKKyAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IG1fcm9vdC0+Zmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgICAgIGNv
bGxlY3RGcmFtZU93bmVycyhjaGlsZCk7CisgICAgfQorCisgICAgZGlzY29ubmVjdENvbGxlY3Rl
ZEZyYW1lT3duZXJzKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IENvbnRhaW5lck5vZGVBbGdvcml0aG1zX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA1NDBiYzE3YWZi
NzUwN2RhOTY3YjBmNzQ0MzgxMjY4NmIxOTljY2QwLi5iMTVjZTc3YWM0YzZkNTRiNmRlZTViOTY5
YjQ5NDRhY2RmY2E3MjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yNTk5LDYgKzI1OTksMjIgQEAg
dm9pZCBOb2RlOjp0ZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cykgY29uc3QKICAgICBy
YW5nZS0+dGV4dFJlY3RzKHJlY3RzKTsKIH0KIAordW5zaWduZWQgTm9kZTo6Y29ubmVjdGVkU3Vi
ZnJhbWVDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0
YSgpLT5jb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkgOiAwOworfQorCit2b2lkIE5vZGU6OmluY3Jl
bWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQodW5zaWduZWQgYW1vdW50KQoreworICAgIEFTU0VS
VChpc0NvbnRhaW5lck5vZGUoKSk7CisgICAgZW5zdXJlUmFyZURhdGEoKS0+aW5jcmVtZW50Q29u
bmVjdGVkU3ViZnJhbWVDb3VudChhbW91bnQpOworfQorCit2b2lkIE5vZGU6OmRlY3JlbWVudENv
bm5lY3RlZFN1YmZyYW1lQ291bnQodW5zaWduZWQgYW1vdW50KQoreworICAgIHJhcmVEYXRhKCkt
PmRlY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQoYW1vdW50KTsKK30KKwogdm9pZCBOb2Rl
OjpyZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCkKIHsKICAgICBzZXRIYXNTY29wZWRIVE1M
U3R5bGVDaGlsZCh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IDBlMDFjZWU4NTU4YzVlODJhZTdlYzhl
ZDE1NTY5MzY0ODFmZTQxOTkuLjVlYzYzYzQ1MmI0MjhmNDVkMDhiMTcwNGNjNDNlNzk2MTg2NTdi
NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaApAQCAtNjc0LDYgKzY3NCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHRleHRSZWN0cyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdDsKIAorICAgIHVuc2lnbmVkIGNvbm5l
Y3RlZFN1YmZyYW1lQ291bnQoKSBjb25zdDsKKyAgICB2b2lkIGluY3JlbWVudENvbm5lY3RlZFN1
YmZyYW1lQ291bnQodW5zaWduZWQgYW1vdW50ID0gMSk7CisgICAgdm9pZCBkZWNyZW1lbnRDb25u
ZWN0ZWRTdWJmcmFtZUNvdW50KHVuc2lnbmVkIGFtb3VudCA9IDEpOworCiBwcml2YXRlOgogICAg
IGVudW0gTm9kZUZsYWdzIHsKICAgICAgICAgSXNUZXh0RmxhZyA9IDEsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlUmFyZURhdGEuY3BwCmluZGV4IDYxOGE0OGI5ZTY0ODJhMWFiOWI0Y2U0MjQwMjI5NmRmYzBh
ZDI2MTMuLjViZTM2NTA2OTYzZjkwNTIxNDVlOGE2MGIxYTNkZTcyZTc1YzY4OTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlUmFyZURhdGEuY3BwCkBAIC0zOSw2ICszOSw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0cnVjdCBTYW1lU2l6ZUFzTm9kZVJhcmVEYXRhIHsKKyAgICB1bnNpZ25lZCBt
X2JpdGZpZWxkcyA6IDIwOwogICAgIHZvaWQqIG1fcG9pbnRlclszXTsKICNpZiBFTkFCTEUoTUlD
Uk9EQVRBKQogICAgIHZvaWQqIG1fbWljcm9EYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGVSYXJlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5o
CmluZGV4IDkyMjhiNzZjYjcxYWMwZjYxYmUzYTAzMGQwMDkzM2FjNTI4NDg1ZDYuLjhkMTliNjg3
NjZiMGRmZWI1Mzg4ZjcxYTk5YjRmMzVhNTkwYmNiYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlUmFyZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVE
YXRhLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJMaXZlTm9kZUxpc3QuaCIKICNpbmNs
dWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJhdGlvbi5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgi
CiAjaW5jbHVkZSAiVGFnTm9kZUxpc3QuaCIKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCkBAIC0z
MDUsMTUgKzMwNiwzMCBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKKyAgICB1bnNpZ25lZCBj
b25uZWN0ZWRTdWJmcmFtZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb25uZWN0ZWRGcmFtZUNv
dW50OyB9CisgICAgdm9pZCBpbmNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KHVuc2lnbmVk
IGFtb3VudCkKKyAgICB7CisgICAgICAgIG1fY29ubmVjdGVkRnJhbWVDb3VudCArPSBhbW91bnQ7
CisgICAgfQorICAgIHZvaWQgZGVjcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVDb3VudCh1bnNpZ25l
ZCBhbW91bnQpCisgICAgeworICAgICAgICBBU1NFUlQobV9jb25uZWN0ZWRGcmFtZUNvdW50KTsK
KyAgICAgICAgQVNTRVJUKGFtb3VudCA8PSBtX2Nvbm5lY3RlZEZyYW1lQ291bnQpOworICAgICAg
ICBtX2Nvbm5lY3RlZEZyYW1lQ291bnQgLT0gYW1vdW50OworICAgIH0KKwogICAgIC8vIFRoaXMg
bWVtYmVyIGZ1bmN0aW9uIGlzIGludGVudGlvbmlhbGx5IG5vdCB2aXJ0dWFsIHRvIGF2b2lkIGFk
ZGluZyBhIHZ0YWJsZSBwb2ludGVyLgogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5
T2JqZWN0SW5mbyopIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgTm9kZVJhcmVEYXRhKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiAgICAgICAgIDogTm9kZVJhcmVEYXRhQmFzZShyZW5kZXJlcikK
KyAgICAgICAgLCBtX2Nvbm5lY3RlZEZyYW1lQ291bnQoMCkKICAgICB7IH0KIAogcHJpdmF0ZToK
KyAgICB1bnNpZ25lZCBtX2Nvbm5lY3RlZEZyYW1lQ291bnQgOiAxMDsgLy8gTXVzdCBmaXQgUGFn
ZTo6bWF4TnVtYmVyT2ZGcmFtZXMuCisKICAgICBPd25QdHI8Tm9kZUxpc3RzTm9kZURhdGE+IG1f
bm9kZUxpc3RzOwogICAgIE93blB0cjxOb2RlTXV0YXRpb25PYnNlcnZlckRhdGE+IG1fbXV0YXRp
b25PYnNlcnZlckRhdGE7CiAKQEAgLTMyMiw2ICszMzgsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9
OwogCisvLyBFbnN1cmUgdGhlIDEwIGJpdHMgcmVzZXJ2ZWQgZm9yIHRoZSBtX2Nvbm5lY3RlZEZy
YW1lQ291bnQgY2Fubm90IG92ZXJmbG93CitDT01QSUxFX0FTU0VSVChQYWdlOjptYXhOdW1iZXJP
ZkZyYW1lcyA8IDEwMjQsIEZyYW1lX2xpbWl0X3Nob3VsZF9maXRfaW5fcmFyZV9kYXRhX2NvdW50
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gTm9kZVJhcmVEYXRhX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAppbmRleCAx
ZTM4MmJmYWE2ZDc1NmE3ZDM5MWJhZmEyZmFkM2Y4Mzc4YjBhNTY5Li4wM2YxNGNhYzQ5NzdhM2U0
OTdkN2FmZmI0NWM3M2QyOWI2OTNhMTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RnJhbWVPd25lckVsZW1lbnQuY3BwCkBAIC01NywxMyArNTcsMjIgQEAgdm9pZCBIVE1MRnJhbWVP
d25lckVsZW1lbnQ6OnNldENvbnRlbnRGcmFtZShGcmFtZSogZnJhbWUpCiAgICAgLy8gRGlzY29u
bmVjdGVkIGZyYW1lcyBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8gbG9hZC4KICAgICBBU1NFUlQo
aW5Eb2N1bWVudCgpKTsKICAgICBtX2NvbnRlbnRGcmFtZSA9IGZyYW1lOworCisgICAgZm9yIChD
b250YWluZXJOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE9ySG9z
dE5vZGUoKSkKKyAgICAgICAgbm9kZS0+aW5jcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVDb3VudCgp
OwogfQogCiB2b2lkIEhUTUxGcmFtZU93bmVyRWxlbWVudDo6ZGlzY29ubmVjdENvbnRlbnRGcmFt
ZSgpCiB7CiAgICAgQVNTRVJUKGhhc0N1c3RvbUNhbGxiYWNrcygpKTsKLSAgICAvLyBUaGlzIGNh
dXNlcyBhbiB1bmxvYWQgZXZlbnQgdGh1cyBjYW5ub3QgYmUgYSBwYXJ0IG9mIHJlbW92ZWRGcm9t
KCkuCisgICAgLy8gRklYTUU6IEN1cnJlbnRseSB3ZSBkb24ndCBkbyB0aGlzIGluIHJlbW92ZWRG
cm9tIGJlYWN1c2UgdGhpcyBjYXVzZXMgYW4KKyAgICAvLyB1bmxvYWQgZXZlbnQgaW4gdGhlIHN1
YmZyYW1lIHdoaWNoIGNvdWxkIGV4ZWN1dGUgc2NyaXB0IHRoYXQgY291bGQgdGhlbgorICAgIC8v
IHJlYWNoIHVwIGludG8gdGhpcyBkb2N1bWVudCBhbmQgdGhlbiBhdHRlbXB0IHRvIGxvb2sgYmFj
ayBkb3duLiBXZSBzaG91bGQKKyAgICAvLyBzZWUgaWYgdGhpcyBiZWhhdmlvciBpcyByZWFsbHkg
bmVlZGVkIGFzIEdlY2tvIGRvZXMgbm90IGFsbG93IHRoaXMuCiAgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IGNvbnRlbnRGcmFtZSgpKSB7CisgICAgICAgIGZvciAoQ29udGFpbmVyTm9kZSogbm9kZSA9
IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpCisgICAgICAgICAg
ICBub2RlLT5kZWNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KCk7CisKICAgICAgICAgUmVm
UHRyPEZyYW1lPiBwcm90ZWN0KGZyYW1lKTsKICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5mcmFt
ZURldGFjaGVkKCk7CiAgICAgICAgIGZyYW1lLT5kaXNjb25uZWN0T3duZXJFbGVtZW50KCk7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggNDRjNGE1MzhkZmIzODIxNGU0NjJjMzI4ZGVmZjgyMTFlYjY5NzIyMi4uYWQ2NDE2YTU4
MWE0ZmIwMmYyOGMwZTM3ZjEyYmRhMDFmMTgxNmI2YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisy
MDEzLTAxLTE3ICBFbGxpb3R0IFNwcmVobiAgPGVzcHJlaG5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFRyYWNrIHN1YmZyYW1lIGNvdW50IHRvIGF2b2lkIHRyYXZlcnNpbmcgdGhlIHRyZWUgd2hl
biB0aGVyZSdzIG5vIHN1YmZyYW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAxODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4K
KworICAgICAgICBBZGQgYSB0ZXN0IHRoYXQgd2hlbiBmcmFtZXMgYXJlIG1vdmVkIGFyb3VuZCBi
eSB0aGUgcGFyc2VyIGFuZCBub3QgYWN0dWFsbHkKKyAgICAgICAgZGV0YWNoZWQgd2Uga2VlcCB0
aGUgc3ViZnJhbWUgY291bnRlcnMgb2YgYW5jZXN0b3JzIGNvbnNpc3RlbnQuCisKKyAgICAgICAg
KiBmYXN0L2ZyYW1lcy9wYXJzZXItYXBwZW5kLXN1YmZyYW1lLWNvdW50LWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC9mcmFtZXMvcGFyc2VyLWFwcGVuZC1zdWJmcmFtZS1jb3Vu
dC5odG1sOiBBZGRlZC4KKwogMjAxMy0wMS0xNyAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTGF5b3V0IHRlc3QgcmViYXNlbGluZXMuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9wYXJzZXItYXBwZW5kLXN1YmZyYW1lLWNv
dW50LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3BhcnNlci1hcHBlbmQt
c3ViZnJhbWUtY291bnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4MWU3NGIyZWIxMjIyZDQ1
ZTEzNzIxNWFjZDQ3OTA3MDhjYzg0MzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2ZyYW1lcy9wYXJzZXItYXBwZW5kLXN1YmZyYW1lLWNvdW50LWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDMgQEAKK1RoaXMgdGVzdCBzaG91bGQgbm90IGNhdXNlIGNyYXNoZXMgb3IgYXNzZXJ0
cyBkZWNyZW1lbnRpbmcgdGhlIGNvbm5lY3RlZCBzdWJmcmFtZSBjb3VudCBhZnRlciB0aGUgcGFy
c2VyIGhhcyBtb3ZlZCB0aGUgaWZyYW1lIGluIHRoZSBhZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGht
LgorCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3BhcnNlci1hcHBlbmQt
c3ViZnJhbWUtY291bnQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3BhcnNlci1hcHBl
bmQtc3ViZnJhbWUtY291bnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MTNlZDMyZjc2ZjRlMjFjNjkyODY4
MGUzODUwMjNlOGI3ZjcxNTg5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9m
cmFtZXMvcGFyc2VyLWFwcGVuZC1zdWJmcmFtZS1jb3VudC5odG1sCkBAIC0wLDAgKzEsMjEgQEAK
KzwhRE9DVFlQRSBodG1sPgorCis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICAgICAgd2luZG93LnRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworCisgICAgb25sb2FkID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIFtdLmZvckVhY2guY2FsbChkb2N1bWVudC5xdWVyeVNlbGVj
dG9yQWxsKCdhIConKSwgZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgbm9kZS5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKG5vZGUpOworICAgICAgICB9KTsKKyAgICB9Cis8L3NjcmlwdD4KKwor
PHA+CisgICAgVGhpcyB0ZXN0IHNob3VsZCBub3QgY2F1c2UgY3Jhc2hlcyBvciBhc3NlcnRzIGRl
Y3JlbWVudGluZyB0aGUgY29ubmVjdGVkCisgICAgc3ViZnJhbWUgY291bnQgYWZ0ZXIgdGhlIHBh
cnNlciBoYXMgbW92ZWQgdGhlIGlmcmFtZSBpbiB0aGUgYWRvcHRpb24gYWdlbmN5CisgICAgYWxn
b3JpdGhtLgorPC9wPgorCis8IS0tIDwvZmlndXJlPiBpcyBtaXNzaW5nIHRvIGNhdXNlIHRoZSBh
ZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGhtIHRvIG1vdmUgdGhlIGlmcmFtZSAtLT4KKzxhPjxmaWd1
cmU+PGlmcmFtZT48L2lmcmFtZT48L2E+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183344</attachid>
            <date>2013-01-17 18:32:51 -0800</date>
            <delta_ts>2013-01-18 02:05:34 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-101821-20130117182951.patch</filename>
            <type>text/plain</type>
            <size>16748</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMDM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTUyN2Y5NDNkNmI1NTY1
NTYxNGIzODk4MWRkZDdjYmVlZDU0ZWE4YS4uYzExNTZhOTk5OTFiOWZlMjJjZWE4NTRkODRkNjRj
ZDI0MzY3OGUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEzLTAxLTE3ICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFRyYWNrIHN1YmZy
YW1lIGNvdW50IHRvIGF2b2lkIHRyYXZlcnNpbmcgdGhlIHRyZWUgd2hlbiB0aGVyZSdzIG5vIHN1
YmZyYW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAxODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KKworICAgICAgICBNYWtl
IHJlbW92ZUNoaWxkIDktMTQlIGZhc3RlciBieSBub3Qgd2Fsa2luZyB0aGUgZGVzY2VuZGFudHMg
bG9va2luZyBmb3IKKyAgICAgICAgZnJhbWVzIHdoZW4gdGhlcmUncyBrbm93biB0byBiZSBubyBm
cmFtZXMuCisKKyAgICAgICAgVGhpcyBpcyBhIG1vcmUgZ2VuZXJhbGl6ZWQgdmVyc2lvbiBvZiB0
aGUgZml4IGluIEJ1ZyAxMDE2MTkgdGhhdCBvbmx5CisgICAgICAgIGF2b2lkZWQgdGhpcyB3YWxr
IHdoZW4gdGhlIHdob2xlIGRvY3VtZW50IGhhZCBubyBmcmFtZXMuIFRoaXMgcGF0Y2ggZXh0ZW5k
cworICAgICAgICBpdCB0byBza2lwIHRyYXZlcnNpbmcgc3VidHJlZXMgdGhhdCBoYXZlIG5vIGZy
YW1lcyBieSB0cmFja2luZyB0aGUgbnVtYmVyIG9mCisgICAgICAgIGZyYW1lcyBpbiBzdWJ0cmVl
cyBhbmQgdGhlbiBvbmx5IHdhbGtpbmcgdGhvc2Ugc3VidHJlZXMgdGhhdCBhcmUga25vd24gdG8K
KyAgICAgICAgY29udGFpbiBmcmFtZXMgaW4gcmVtb3ZlQ2hpbGQuCisKKyAgICAgICAgVGVzdDog
ZmFzdC9mcmFtZXMvcGFyc2VyLWFwcGVuZC1zdWJmcmFtZS1jb3VudC5odG1sCisKKyAgICAgICAg
KiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3aWxsUmVtb3ZlQ2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VyQXBwZW5kQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VyUmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VySW5z
ZXJ0QmVmb3JlKToKKyAgICAgICAgICAgIFRoZSBwYXJzZXIgbWF5IG1vdmUgbm9kZXMgd2l0aG91
dCBkb2luZyBmcmFtZSBkaXNjb25uZWN0aW9uIHNvIHdlCisgICAgICAgICAgICBtdXN0IG1haW50
YWluIHRoZSBjb25uZWN0ZWQgc3ViZnJhbWUgY291bnQgbWFudWFsbHkgZHVyaW5nIHRoZXNlCisg
ICAgICAgICAgICBtdXRhdGlvbnMuCisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0
aG1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkRnJhbWVEaXNjb25uZWN0b3I6OmNvbGxl
Y3RGcmFtZU93bmVycyk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmg6
CisgICAgICAgIChXZWJDb3JlOjpDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpDaGlsZEZyYW1lRGlz
Y29ubmVjdG9yKToKKyAgICAgICAgKENoaWxkRnJhbWVEaXNjb25uZWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdEZyYW1lT3duZXJzKToKKyAg
ICAgICAgICBSZW5hbWVkIGZyb20gY29sbGVjdERlc2NlbmRhbnQoKSB0byBiZXR0ZXIgcmVmbGVj
dCB3aGF0IGl0IHJlYWxseSBkb2VzLgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRGcmFtZURpc2Nv
bm5lY3Rvcjo6ZGlzY29ubmVjdENvbGxlY3RlZEZyYW1lT3duZXJzKToKKyAgICAgICAgICBSZW5h
bWVkIGZyb20gZGlzY29ubmVjdCgpIHRvIGJldHRlciByZWZsZWN0IHdoYXQgaXQgcmVhbGx5IGRv
ZXMuCisgICAgICAgIChXZWJDb3JlOjpDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpkaXNjb25uZWN0
KToKKyAgICAgICAgICBOZXcgbWV0aG9kIHRoYXQgZG9lcyB0aGUgY29sbGVjdGlvbiBvZiBmcmFt
ZSBvd25lcnMgb24gZWl0aGVyIHRoZSByb290CisgICAgICAgICAgb3Igb25seSBpdCdzIGRlc2Nl
bmRhbnRzLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OmNvbm5lY3RlZFN1YmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW5jcmVt
ZW50Q29ubmVjdGVkU3ViZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkZWNy
ZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAg
ICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0
YTo6Tm9kZVJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6Y29ubmVj
dGVkU3ViZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6OmluY3Jl
bWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVE
YXRhOjpkZWNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KToKKyAgICAgICAgKiBodG1sL0hU
TUxGcmFtZU93bmVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVPd25l
ckVsZW1lbnQ6OnNldENvbnRlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVP
d25lckVsZW1lbnQ6OmRpc2Nvbm5lY3RDb250ZW50RnJhbWUpOgorCiAyMDEzLTAxLTE3ICBTaGVy
aWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByMTQwMDIzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0NvbnRhaW5lck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3Bw
CmluZGV4IDAxNzU5ZTJhYmY1ZjhmOWU1Yzg3NWI0YWRlOWNmMjU0OTIxNTdjNmEuLmVmOTIxZWJm
NmI0M2Q1NGJiZDY4ZWE5ZDEyMTZiNGQ0YzQyOTlkYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFp
bmVyTm9kZS5jcHAKQEAgLTMzMSw2ICszMzEsMTEgQEAgdm9pZCBDb250YWluZXJOb2RlOjpwYXJz
ZXJJbnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogbmV4dENoaWwK
IAogICAgIGluc2VydEJlZm9yZUNvbW1vbihuZXh0Q2hpbGQsIG5ld0NoaWxkLmdldCgpKTsKIAor
ICAgIGlmICh1bnNpZ25lZCBjb3VudCA9IG5ld0NoaWxkLT5jb25uZWN0ZWRTdWJmcmFtZUNvdW50
KCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gbmV3Q2hpbGQtPnBhcmVudE9ySG9zdE5v
ZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkKKyAgICAgICAgICAg
IG5vZGUtPmluY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQoY291bnQpOworICAgIH0KKwog
ICAgIGNoaWxkcmVuQ2hhbmdlZCh0cnVlLCBuZXdDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCksIG5l
eHRDaGlsZCwgMSk7CiAgICAgQ2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXIodGhpcykubm90aWZ5
KG5ld0NoaWxkLmdldCgpKTsKIH0KQEAgLTQ0OSw3ICs0NTQsNyBAQCBzdGF0aWMgdm9pZCB3aWxs
UmVtb3ZlQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSogY29udGFpbmVyKQogICAgICAgICBkaXNwYXRj
aENoaWxkUmVtb3ZhbEV2ZW50cyhjaGlsZCk7CiAgICAgfQogCi0gICAgQ2hpbGRGcmFtZURpc2Nv
bm5lY3Rvcihjb250YWluZXIsIENoaWxkRnJhbWVEaXNjb25uZWN0b3I6OkRvTm90SW5jbHVkZVJv
b3QpLmRpc2Nvbm5lY3QoKTsKKyAgICBDaGlsZEZyYW1lRGlzY29ubmVjdG9yKGNvbnRhaW5lciku
ZGlzY29ubmVjdChDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpEZXNjZW5kYW50c09ubHkpOwogfQog
CiB2b2lkIENvbnRhaW5lck5vZGU6OmRpc2Nvbm5lY3REZXNjZW5kYW50RnJhbWVzKCkKQEAgLTU1
Miw2ICs1NTcsMTEgQEAgdm9pZCBDb250YWluZXJOb2RlOjpwYXJzZXJSZW1vdmVDaGlsZChOb2Rl
KiBvbGRDaGlsZCkKICAgICBOb2RlKiBwcmV2ID0gb2xkQ2hpbGQtPnByZXZpb3VzU2libGluZygp
OwogICAgIE5vZGUqIG5leHQgPSBvbGRDaGlsZC0+bmV4dFNpYmxpbmcoKTsKIAorICAgIGlmICh1
bnNpZ25lZCBjb3VudCA9IG9sZENoaWxkLT5jb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkpIHsKKyAg
ICAgICAgZm9yIChOb2RlKiBub2RlID0gb2xkQ2hpbGQtPnBhcmVudE9ySG9zdE5vZGUoKTsgbm9k
ZTsgbm9kZSA9IG5vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkKKyAgICAgICAgICAgIG5vZGUtPmRl
Y3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQoY291bnQpOworICAgIH0KKwogICAgIHJlbW92
ZUJldHdlZW4ocHJldiwgbmV4dCwgb2xkQ2hpbGQpOwogCiAgICAgY2hpbGRyZW5DaGFuZ2VkKHRy
dWUsIHByZXYsIG5leHQsIC0xKTsKQEAgLTY5Niw2ICs3MDYsMTEgQEAgdm9pZCBDb250YWluZXJO
b2RlOjpwYXJzZXJBcHBlbmRDaGlsZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkKQogICAgICAg
ICB0cmVlU2NvcGUoKS0+YWRvcHRJZk5lZWRlZChuZXdDaGlsZC5nZXQoKSk7CiAgICAgfQogCisg
ICAgaWYgKHVuc2lnbmVkIGNvdW50ID0gbmV3Q2hpbGQtPmNvbm5lY3RlZFN1YmZyYW1lQ291bnQo
KSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBuZXdDaGlsZC0+cGFyZW50T3JIb3N0Tm9k
ZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKQorICAgICAgICAgICAg
bm9kZS0+aW5jcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVDb3VudChjb3VudCk7CisgICAgfQorCiAg
ICAgY2hpbGRyZW5DaGFuZ2VkKHRydWUsIGxhc3QsIDAsIDEpOwogICAgIENoaWxkTm9kZUluc2Vy
dGlvbk5vdGlmaWVyKHRoaXMpLm5vdGlmeShuZXdDaGlsZC5nZXQoKSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAppbmRleCA3MzNhYTYyM2Y2
NWI0NzA0ODU5NjFkOTBjMzZkYTYxYTA2MTlkZDFmLi4wODBiMGYzNTljYjU2Y2JmYzg5NjIxMjkw
NGE3NmI2ZmUwM2NhYTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZUFsZ29yaXRobXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2Rl
QWxnb3JpdGhtcy5jcHAKQEAgLTEwOSwxMCArMTA5LDEwIEBAIHZvaWQgQ2hpbGROb2RlUmVtb3Zh
bE5vdGlmaWVyOjpub3RpZnlEZXNjZW5kYW50UmVtb3ZlZEZyb21UcmVlKENvbnRhaW5lck5vZGUq
IG5vCiAgICAgfQogfQogCi12b2lkIENoaWxkRnJhbWVEaXNjb25uZWN0b3I6OmNvbGxlY3REZXNj
ZW5kYW50KEVsZW1lbnRTaGFkb3cqIHNoYWRvdykKK3ZvaWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rv
cjo6Y29sbGVjdEZyYW1lT3duZXJzKEVsZW1lbnRTaGFkb3cqIHNoYWRvdykKIHsKICAgICBmb3Ig
KFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyBy
b290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkpCi0gICAgICAgIGNvbGxlY3REZXNjZW5kYW50
KHJvb3QsIEluY2x1ZGVSb290KTsKKyAgICAgICAgY29sbGVjdEZyYW1lT3duZXJzKHJvb3QpOwog
fQogCiB2b2lkIENoaWxkRnJhbWVEaXNjb25uZWN0b3I6OlRhcmdldDo6ZGlzY29ubmVjdCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5oCmluZGV4IDUzMTJk
ZDQ4OGRhMjE4NzMwZjQ0ODNmOTA4MGE5ZGEzZDBkNzEwMzkuLmFlY2YxMzAzNDA2ZDU1N2M2ZDEy
NjY0YzBiY2UzM2Y1NWRkNDI1NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlQWxnb3JpdGhtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJO
b2RlQWxnb3JpdGhtcy5oCkBAIC0yNjAsMzMgKzI2MCwyMiBAQCBpbmxpbmUgdm9pZCBDaGlsZE5v
ZGVSZW1vdmFsTm90aWZpZXI6Om5vdGlmeShOb2RlKiBub2RlKQogCiBjbGFzcyBDaGlsZEZyYW1l
RGlzY29ubmVjdG9yIHsKIHB1YmxpYzoKLSAgICBlbnVtIFNob3VsZEluY2x1ZGVSb290IHsKLSAg
ICAgICAgRG9Ob3RJbmNsdWRlUm9vdCwKLSAgICAgICAgSW5jbHVkZVJvb3QKKyAgICBlbnVtIERp
c2Nvbm5lY3RQb2xpY3kgeworICAgICAgICBSb290QW5kRGVzY2VuZGFudHMsCisgICAgICAgIERl
c2NlbmRhbnRzT25seQogICAgIH07CiAKLSAgICBleHBsaWNpdCBDaGlsZEZyYW1lRGlzY29ubmVj
dG9yKE5vZGUqIHJvb3QsIFNob3VsZEluY2x1ZGVSb290IHNob3VsZEluY2x1ZGVSb290ID0gSW5j
bHVkZVJvb3QpCisgICAgZXhwbGljaXQgQ2hpbGRGcmFtZURpc2Nvbm5lY3RvcihOb2RlKiByb290
KQogICAgICAgICA6IG1fcm9vdChyb290KQogICAgIHsKLSAgICAgICAgLy8gSWYgd2Uga25vdyB0
aGVyZSdzIG5vIGZyYW1lcyB0byBkaXNjb25uZWN0IHRoZW4gZG9uJ3QgYm90aGVyIHRyYXZlcnNp
bmcKLSAgICAgICAgLy8gdGhlIHRyZWUgbG9va2luZyBmb3IgdGhlbS4KLSAgICAgICAgRnJhbWUq
IGZyYW1lID0gcm9vdC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICAgICAgaWYgKGZyYW1lICYm
ICFmcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGNvbGxlY3REZXNjZW5kYW50KG1fcm9vdCwgc2hvdWxkSW5jbHVkZVJvb3QpOwogICAgIH0K
IAotICAgIH5DaGlsZEZyYW1lRGlzY29ubmVjdG9yKCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9p
ZCBkaXNjb25uZWN0KCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBub2RlSGFzRGlzY29ubmVjdG9yKE5v
ZGUqKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3QoRGlzY29ubmVjdFBvbGljeSA9IFJvb3RBbmREZXNj
ZW5kYW50cyk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjb2xsZWN0RGVzY2VuZGFudChOb2RlKiBy
b290LCBTaG91bGRJbmNsdWRlUm9vdCk7Ci0gICAgdm9pZCBjb2xsZWN0RGVzY2VuZGFudChFbGVt
ZW50U2hhZG93Kik7CisgICAgdm9pZCBjb2xsZWN0RnJhbWVPd25lcnMoTm9kZSogcm9vdCk7Cisg
ICAgdm9pZCBjb2xsZWN0RnJhbWVPd25lcnMoRWxlbWVudFNoYWRvdyopOworICAgIHZvaWQgZGlz
Y29ubmVjdENvbGxlY3RlZEZyYW1lT3duZXJzKCk7CiAKICAgICBjbGFzcyBUYXJnZXQgewogICAg
IHB1YmxpYzoKQEAgLTMwOCwxOCArMjk3LDI1IEBAIHByaXZhdGU6CiAgICAgTm9kZSogbV9yb290
OwogfTsKIAotaW5saW5lIHZvaWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdERlc2Nl
bmRhbnQoTm9kZSogcm9vdCwgU2hvdWxkSW5jbHVkZVJvb3Qgc2hvdWxkSW5jbHVkZVJvb3QpCitp
bmxpbmUgdm9pZCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpjb2xsZWN0RnJhbWVPd25lcnMoTm9k
ZSogcm9vdCkKIHsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gKHNob3VsZEluY2x1ZGVSb290ID09
IEluY2x1ZGVSb290ICYmIHJvb3QtPmlzRWxlbWVudE5vZGUoKSkgPyB0b0VsZW1lbnQocm9vdCkg
OiBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihyb290KTsKLSAgICBmb3IgKDsgZWxlbWVu
dDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCwgcm9vdCkpIHsKLSAg
ICAgICAgaWYgKGVsZW1lbnQtPmhhc0N1c3RvbUNhbGxiYWNrcygpICYmIGVsZW1lbnQtPmlzRnJh
bWVPd25lckVsZW1lbnQoKSkKLSAgICAgICAgICAgIG1fbGlzdC5hcHBlbmQodG9GcmFtZU93bmVy
RWxlbWVudChlbGVtZW50KSk7Ci0gICAgICAgIGlmIChFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBl
bGVtZW50LT5zaGFkb3coKSkKLSAgICAgICAgICAgIGNvbGxlY3REZXNjZW5kYW50KHNoYWRvdyk7
Ci0gICAgfQorICAgIGlmICghcm9vdC0+Y29ubmVjdGVkU3ViZnJhbWVDb3VudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQganVzdCBjaGVjayBpc0VsZW1l
bnROb2RlKCkgdG8gYXZvaWQgdGhlIHZpcnR1YWwgY2FsbAorICAgIC8vIGFuZCB3ZSBzaG91bGQg
bm90IGRlcGVuZCBvbiBoYXNDdXN0b21DYWxsYmFja3MoKS4KKyAgICBpZiAocm9vdC0+aGFzQ3Vz
dG9tQ2FsbGJhY2tzKCkgJiYgcm9vdC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQorICAgICAgICBt
X2xpc3QuYXBwZW5kKHRvRnJhbWVPd25lckVsZW1lbnQocm9vdCkpOworCisgICAgZm9yIChOb2Rl
KiBjaGlsZCA9IHJvb3QtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpCisgICAgICAgIGNvbGxlY3RGcmFtZU93bmVycyhjaGlsZCk7CisKKyAgICBFbGVt
ZW50U2hhZG93KiBzaGFkb3cgPSByb290LT5pc0VsZW1lbnROb2RlKCkgPyB0b0VsZW1lbnQocm9v
dCktPnNoYWRvdygpIDogMDsKKyAgICBpZiAoc2hhZG93KQorICAgICAgICBjb2xsZWN0RnJhbWVP
d25lcnMoc2hhZG93KTsKIH0KIAotaW5saW5lIHZvaWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6
ZGlzY29ubmVjdCgpCitpbmxpbmUgdm9pZCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpkaXNjb25u
ZWN0Q29sbGVjdGVkRnJhbWVPd25lcnMoKQogewogICAgIC8vIE11c3QgZGlzYWJsZSBmcmFtZSBs
b2FkaW5nIGluIHRoZSBzdWJ0cmVlIHNvIGFuIHVubG9hZCBoYW5kbGVyIGNhbm5vdAogICAgIC8v
IGluc2VydCBtb3JlIGZyYW1lcyBhbmQgY3JlYXRlIGxvYWRlZCBmcmFtZXMgaW4gZGV0YWNoZWQg
c3VidHJlZXMuCkBAIC0zMzIsNiArMzI4LDIxIEBAIGlubGluZSB2b2lkIENoaWxkRnJhbWVEaXNj
b25uZWN0b3I6OmRpc2Nvbm5lY3QoKQogICAgIH0KIH0KIAoraW5saW5lIHZvaWQgQ2hpbGRGcmFt
ZURpc2Nvbm5lY3Rvcjo6ZGlzY29ubmVjdChEaXNjb25uZWN0UG9saWN5IHBvbGljeSkKK3sKKyAg
ICBpZiAoIW1fcm9vdC0+Y29ubmVjdGVkU3ViZnJhbWVDb3VudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAocG9saWN5ID09IFJvb3RBbmREZXNjZW5kYW50cykKKyAgICAgICAgY29sbGVj
dEZyYW1lT3duZXJzKG1fcm9vdCk7CisgICAgZWxzZSB7CisgICAgICAgIGZvciAoTm9kZSogY2hp
bGQgPSBtX3Jvb3QtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpCisgICAgICAgICAgICBjb2xsZWN0RnJhbWVPd25lcnMoY2hpbGQpOworICAgIH0KKwor
ICAgIGRpc2Nvbm5lY3RDb2xsZWN0ZWRGcmFtZU93bmVycygpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBDb250YWluZXJOb2RlQWxnb3JpdGhtc19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKaW5kZXggNTQwYmMxN2FmYjc1MDdkYTk2N2IwZjc0NDM4MTI2ODZiMTk5Y2NkMC4uYjE1
Y2U3N2FjNGM2ZDU0YjZkZWU1Yjk2OWI0OTQ0YWNkZmNhNzI1NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApA
QCAtMjU5OSw2ICsyNTk5LDIyIEBAIHZvaWQgTm9kZTo6dGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0
PiYgcmVjdHMpIGNvbnN0CiAgICAgcmFuZ2UtPnRleHRSZWN0cyhyZWN0cyk7CiB9CiAKK3Vuc2ln
bmVkIE5vZGU6OmNvbm5lY3RlZFN1YmZyYW1lQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBo
YXNSYXJlRGF0YSgpID8gcmFyZURhdGEoKS0+Y29ubmVjdGVkU3ViZnJhbWVDb3VudCgpIDogMDsK
K30KKwordm9pZCBOb2RlOjppbmNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KHVuc2lnbmVk
IGFtb3VudCkKK3sKKyAgICBBU1NFUlQoaXNDb250YWluZXJOb2RlKCkpOworICAgIGVuc3VyZVJh
cmVEYXRhKCktPmluY3JlbWVudENvbm5lY3RlZFN1YmZyYW1lQ291bnQoYW1vdW50KTsKK30KKwor
dm9pZCBOb2RlOjpkZWNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KHVuc2lnbmVkIGFtb3Vu
dCkKK3sKKyAgICByYXJlRGF0YSgpLT5kZWNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KGFt
b3VudCk7Cit9CisKIHZvaWQgTm9kZTo6cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpCiB7
CiAgICAgc2V0SGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQodHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCAw
ZTAxY2VlODU1OGM1ZTgyYWU3ZWM4ZWQxNTU2OTM2NDgxZmU0MTk5Li41ZWM2M2M0NTJiNDI4ZjQ1
ZDA4YjE3MDRjYzQzZTc5NjE4NjU3YjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTY3NCw2ICs2NzQsMTAg
QEAgcHVibGljOgogCiAgICAgdm9pZCB0ZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+JikgY29uc3Q7
CiAKKyAgICB1bnNpZ25lZCBjb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkgY29uc3Q7CisgICAgdm9p
ZCBpbmNyZW1lbnRDb25uZWN0ZWRTdWJmcmFtZUNvdW50KHVuc2lnbmVkIGFtb3VudCA9IDEpOwor
ICAgIHZvaWQgZGVjcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVDb3VudCh1bnNpZ25lZCBhbW91bnQg
PSAxKTsKKwogcHJpdmF0ZToKICAgICBlbnVtIE5vZGVGbGFncyB7CiAgICAgICAgIElzVGV4dEZs
YWcgPSAxLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmNwcAppbmRleCA2MThhNDhiOWU2NDgy
YTFhYjliNGNlNDI0MDIyOTZkZmMwYWQyNjEzLi41YmUzNjUwNjk2M2Y5MDUyMTQ1ZThhNjBiMWEz
ZGU3MmU3NWM2ODk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmNwcApAQCAtMzksNiAr
MzksNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgU2FtZVNpemVBc05vZGVSYXJl
RGF0YSB7CisgICAgdW5zaWduZWQgbV9iaXRmaWVsZHMgOiAyMDsKICAgICB2b2lkKiBtX3BvaW50
ZXJbM107CiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKICAgICB2b2lkKiBtX21pY3JvRGF0YTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlUmFyZURhdGEuaAppbmRleCA5MjI4Yjc2Y2I3MWFjMGY2MWJlM2EwMzBkMDA5
MzNhYzUyODQ4NWQ2Li44ZDE5YjY4NzY2YjBkZmViNTM4OGY3MWE5OWI0ZjM1YTU5MGJjYmExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAi
TGl2ZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUg
Ik11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2luY2x1ZGUgIlRhZ05vZGVMaXN0LmgiCiAjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQpAQCAtMzA1LDE1ICszMDYsMzAgQEAgcHVibGljOgogICAgIH0KICNl
bmRpZgogCisgICAgdW5zaWduZWQgY29ubmVjdGVkU3ViZnJhbWVDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29ubmVjdGVkRnJhbWVDb3VudDsgfQorICAgIHZvaWQgaW5jcmVtZW50Q29ubmVjdGVk
U3ViZnJhbWVDb3VudCh1bnNpZ25lZCBhbW91bnQpCisgICAgeworICAgICAgICBtX2Nvbm5lY3Rl
ZEZyYW1lQ291bnQgKz0gYW1vdW50OworICAgIH0KKyAgICB2b2lkIGRlY3JlbWVudENvbm5lY3Rl
ZFN1YmZyYW1lQ291bnQodW5zaWduZWQgYW1vdW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
Y29ubmVjdGVkRnJhbWVDb3VudCk7CisgICAgICAgIEFTU0VSVChhbW91bnQgPD0gbV9jb25uZWN0
ZWRGcmFtZUNvdW50KTsKKyAgICAgICAgbV9jb25uZWN0ZWRGcmFtZUNvdW50IC09IGFtb3VudDsK
KyAgICB9CisKICAgICAvLyBUaGlzIG1lbWJlciBmdW5jdGlvbiBpcyBpbnRlbnRpb25pYWxseSBu
b3QgdmlydHVhbCB0byBhdm9pZCBhZGRpbmcgYSB2dGFibGUgcG9pbnRlci4KICAgICB2b2lkIHJl
cG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAogcHJvdGVjdGVkOgog
ICAgIE5vZGVSYXJlRGF0YShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgICAgICA6IE5vZGVS
YXJlRGF0YUJhc2UocmVuZGVyZXIpCisgICAgICAgICwgbV9jb25uZWN0ZWRGcmFtZUNvdW50KDAp
CiAgICAgeyB9CiAKIHByaXZhdGU6CisgICAgdW5zaWduZWQgbV9jb25uZWN0ZWRGcmFtZUNvdW50
IDogMTA7IC8vIE11c3QgZml0IFBhZ2U6Om1heE51bWJlck9mRnJhbWVzLgorCiAgICAgT3duUHRy
PE5vZGVMaXN0c05vZGVEYXRhPiBtX25vZGVMaXN0czsKICAgICBPd25QdHI8Tm9kZU11dGF0aW9u
T2JzZXJ2ZXJEYXRhPiBtX211dGF0aW9uT2JzZXJ2ZXJEYXRhOwogCkBAIC0zMjIsNiArMzM4LDkg
QEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAorLy8gRW5zdXJlIHRoZSAxMCBiaXRzIHJlc2VydmVk
IGZvciB0aGUgbV9jb25uZWN0ZWRGcmFtZUNvdW50IGNhbm5vdCBvdmVyZmxvdworQ09NUElMRV9B
U1NFUlQoUGFnZTo6bWF4TnVtYmVyT2ZGcmFtZXMgPCAxMDI0LCBGcmFtZV9saW1pdF9zaG91bGRf
Zml0X2luX3JhcmVfZGF0YV9jb3VudCk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIE5vZGVSYXJlRGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGcmFtZU93bmVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93
bmVyRWxlbWVudC5jcHAKaW5kZXggMWUzODJiZmFhNmQ3NTZhN2QzOTFiYWZhMmZhZDNmODM3OGIw
YTU2OS4uZmI2OThlYTcyOGM1ODI3OTFhZDAzZDczNTQxZWJmYzExOTY5NWZiZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcApAQCAtNTcsMTMgKzU3
LDIyIEBAIHZvaWQgSFRNTEZyYW1lT3duZXJFbGVtZW50OjpzZXRDb250ZW50RnJhbWUoRnJhbWUq
IGZyYW1lKQogICAgIC8vIERpc2Nvbm5lY3RlZCBmcmFtZXMgc2hvdWxkIG5vdCBiZSBhbGxvd2Vk
IHRvIGxvYWQuCiAgICAgQVNTRVJUKGluRG9jdW1lbnQoKSk7CiAgICAgbV9jb250ZW50RnJhbWUg
PSBmcmFtZTsKKworICAgIGZvciAoQ29udGFpbmVyTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5v
ZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpCisgICAgICAgIG5vZGUtPmluY3JlbWVudENv
bm5lY3RlZFN1YmZyYW1lQ291bnQoKTsKIH0KIAogdm9pZCBIVE1MRnJhbWVPd25lckVsZW1lbnQ6
OmRpc2Nvbm5lY3RDb250ZW50RnJhbWUoKQogewogICAgIEFTU0VSVChoYXNDdXN0b21DYWxsYmFj
a3MoKSk7Ci0gICAgLy8gVGhpcyBjYXVzZXMgYW4gdW5sb2FkIGV2ZW50IHRodXMgY2Fubm90IGJl
IGEgcGFydCBvZiByZW1vdmVkRnJvbSgpLgorICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgd2UgZG9u
J3QgZG8gdGhpcyBpbiByZW1vdmVkRnJvbSBiZWNhdXNlIHRoaXMgY2F1c2VzIGFuCisgICAgLy8g
dW5sb2FkIGV2ZW50IGluIHRoZSBzdWJmcmFtZSB3aGljaCBjb3VsZCBleGVjdXRlIHNjcmlwdCB0
aGF0IGNvdWxkIHRoZW4KKyAgICAvLyByZWFjaCB1cCBpbnRvIHRoaXMgZG9jdW1lbnQgYW5kIHRo
ZW4gYXR0ZW1wdCB0byBsb29rIGJhY2sgZG93bi4gV2Ugc2hvdWxkCisgICAgLy8gc2VlIGlmIHRo
aXMgYmVoYXZpb3IgaXMgcmVhbGx5IG5lZWRlZCBhcyBHZWNrbyBkb2VzIG5vdCBhbGxvdyB0aGlz
LgogICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb250ZW50RnJhbWUoKSkgeworICAgICAgICBmb3Ig
KENvbnRhaW5lck5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50T3JI
b3N0Tm9kZSgpKQorICAgICAgICAgICAgbm9kZS0+ZGVjcmVtZW50Q29ubmVjdGVkU3ViZnJhbWVD
b3VudCgpOworCiAgICAgICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdChmcmFtZSk7CiAgICAgICAg
IGZyYW1lLT5sb2FkZXIoKS0+ZnJhbWVEZXRhY2hlZCgpOwogICAgICAgICBmcmFtZS0+ZGlzY29u
bmVjdE93bmVyRWxlbWVudCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQ0YzRhNTM4ZGZiMzgyMTRlNDYyYzMyOGRlZmY4
MjExZWI2OTcyMjIuLmFkNjQxNmE1ODFhNGZiMDJmMjhjMGUzN2YxMmJkYTAxZjE4MTZiNmMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMy0wMS0xNyAgRWxsaW90dCBTcHJlaG4gIDxlc3ByZWhu
QGNocm9taXVtLm9yZz4KKworICAgICAgICBUcmFjayBzdWJmcmFtZSBjb3VudCB0byBhdm9pZCB0
cmF2ZXJzaW5nIHRoZSB0cmVlIHdoZW4gdGhlcmUncyBubyBzdWJmcmFtZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTgyMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE9qYW4gVmFmYWkuCisKKyAgICAgICAgQWRkIGEgdGVzdCB0aGF0IHdoZW4gZnJh
bWVzIGFyZSBtb3ZlZCBhcm91bmQgYnkgdGhlIHBhcnNlciBhbmQgbm90IGFjdHVhbGx5CisgICAg
ICAgIGRldGFjaGVkIHdlIGtlZXAgdGhlIHN1YmZyYW1lIGNvdW50ZXJzIG9mIGFuY2VzdG9ycyBj
b25zaXN0ZW50LgorCisgICAgICAgICogZmFzdC9mcmFtZXMvcGFyc2VyLWFwcGVuZC1zdWJmcmFt
ZS1jb3VudC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZnJhbWVzL3BhcnNl
ci1hcHBlbmQtc3ViZnJhbWUtY291bnQuaHRtbDogQWRkZWQuCisKIDIwMTMtMDEtMTcgIEFscGhh
IExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIExheW91dCB0
ZXN0IHJlYmFzZWxpbmVzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvcGFy
c2VyLWFwcGVuZC1zdWJmcmFtZS1jb3VudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2ZyYW1lcy9wYXJzZXItYXBwZW5kLXN1YmZyYW1lLWNvdW50LWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mODFlNzRiMmViMTIyMmQ0NWUxMzcyMTVhY2Q0NzkwNzA4Y2M4NDMyCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvcGFyc2VyLWFwcGVuZC1zdWJmcmFtZS1j
b3VudC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACitUaGlzIHRlc3Qgc2hvdWxkIG5vdCBj
YXVzZSBjcmFzaGVzIG9yIGFzc2VydHMgZGVjcmVtZW50aW5nIHRoZSBjb25uZWN0ZWQgc3ViZnJh
bWUgY291bnQgYWZ0ZXIgdGhlIHBhcnNlciBoYXMgbW92ZWQgdGhlIGlmcmFtZSBpbiB0aGUgYWRv
cHRpb24gYWdlbmN5IGFsZ29yaXRobS4KKworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2ZyYW1lcy9wYXJzZXItYXBwZW5kLXN1YmZyYW1lLWNvdW50Lmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2ZyYW1lcy9wYXJzZXItYXBwZW5kLXN1YmZyYW1lLWNvdW50Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDEzZWQzMmY3NmY0ZTIxYzY5Mjg2ODBlMzg1MDIzZThiN2Y3MTU4OQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3BhcnNlci1hcHBlbmQtc3ViZnJhbWUtY291bnQu
aHRtbApAQCAtMCwwICsxLDIxIEBACis8IURPQ1RZUEUgaHRtbD4KKworPHNjcmlwdD4KKyAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHdpbmRvdy50ZXN0UnVubmVyLmR1bXBBc1Rl
eHQoKTsKKworICAgIG9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBbXS5mb3JFYWNoLmNh
bGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYSAqJyksIGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTsKKyAgICAgICAgfSk7
CisgICAgfQorPC9zY3JpcHQ+CisKKzxwPgorICAgIFRoaXMgdGVzdCBzaG91bGQgbm90IGNhdXNl
IGNyYXNoZXMgb3IgYXNzZXJ0cyBkZWNyZW1lbnRpbmcgdGhlIGNvbm5lY3RlZAorICAgIHN1YmZy
YW1lIGNvdW50IGFmdGVyIHRoZSBwYXJzZXIgaGFzIG1vdmVkIHRoZSBpZnJhbWUgaW4gdGhlIGFk
b3B0aW9uIGFnZW5jeQorICAgIGFsZ29yaXRobS4KKzwvcD4KKworPCEtLSA8L2ZpZ3VyZT4gaXMg
bWlzc2luZyB0byBjYXVzZSB0aGUgYWRvcHRpb24gYWdlbmN5IGFsZ29yaXRobSB0byBtb3ZlIHRo
ZSBpZnJhbWUgLS0+Cis8YT48ZmlndXJlPjxpZnJhbWU+PC9pZnJhbWU+PC9hPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>