<?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>86605</bug_id>
          
          <creation_ts>2012-05-16 03:32:55 -0700</creation_ts>
          <short_desc>Rect-based hittesting doesn&apos;t work in tables.</short_desc>
          <delta_ts>2012-06-11 02:39:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>
          
          <blocked>88066</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Allan Sandfeld Jensen">allan.jensen</reporter>
          <assigned_to name="Allan Sandfeld Jensen">allan.jensen</assigned_to>
          <cc>eric</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>625220</commentid>
    <comment_count>0</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-05-16 03:32:55 -0700</bug_when>
    <thetext>When doing rect-based hit-testing on a table without overflow, only the cell directly under the center point will be hit-tested and not all the cells that intersects with the area under the hit-test point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625226</commentid>
    <comment_count>1</comment_count>
      <attachid>142212</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-05-16 03:39:10 -0700</bug_when>
    <thetext>Created attachment 142212
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633840</commentid>
    <comment_count>2</comment_count>
      <attachid>144048</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-05-25 05:09:56 -0700</bug_when>
    <thetext>Created attachment 144048
Patch

Rebase to not depend on patch for bug 85792</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634226</commentid>
    <comment_count>3</comment_count>
      <attachid>144048</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-05-25 13:13:41 -0700</bug_when>
    <thetext>Comment on attachment 144048
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        After binary look-up of row and cell, continue to test following
&gt; +        cells that intersect with the area of the hit-test point.

This is not a useful description of what you are fixing nor really how.

Btw, you do a binary search on the rows and *columns*, not cells.

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1346
&gt; +    LayoutUnit offsetStartInColumnDirection, offsetEndInColumnDirection;

This is not the rule in WebKit to define 2 variables on one line. Those should be split on 2 lines.

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1363
&gt; +    if (style()-&gt;isHorizontalWritingMode()) {
&gt; +        if (!style()-&gt;isFlippedBlocksWritingMode()) {
&gt; +            offsetStartInColumnDirection = hitTestRect.y();
&gt; +            offsetEndInColumnDirection = hitTestRect.maxY();
&gt; +        } else {
&gt; +            offsetStartInColumnDirection = height() - hitTestRect.maxY();
&gt; +            offsetEndInColumnDirection = height() - hitTestRect.y();
&gt; +        }
&gt; +    } else {
&gt; +        if (!style()-&gt;isFlippedBlocksWritingMode()) {
&gt; +            offsetStartInColumnDirection = hitTestRect.x();
&gt; +            offsetEndInColumnDirection = hitTestRect.maxX();
&gt; +        } else {
&gt; +            offsetStartInColumnDirection = width() - hitTestRect.maxX();
&gt; +            offsetEndInColumnDirection = width() - hitTestRect.x();
&gt; +        }
&gt;      }

AFAICT this should use the table&apos;s style as we don&apos;t allow sections to have a writing mode different from the table.

Also why is this not using RenderBox::flipForWritingMode?

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1392
&gt; +    }

Same 2 comments as above.

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1417
&gt; +            ++hitColumn;

The inner loop should go into its own function. That should make the code more readable.

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1418
&gt; +        } while (hitColumn &lt; (columnPos.size() - 1) &amp;&amp; columnPos[hitColumn] &lt;= offsetEndInRowDirection);

How is a do ... while any better than a for?

For the record, this made the code so confusing that I missed that you kept the same direction of look-ups above.

&gt; LayoutTests/fast/dom/nodesFromRect-table.html:1
&gt; +&lt;html&gt;

Please add the proper doctype as you are not testing quirks mode:
&lt;!DOCTYPE html&gt;

&gt; LayoutTests/fast/dom/nodesFromRect-table.html:22
&gt; +&lt;body id=&quot;body&quot;&gt;

is this id used anywhere?

&gt; LayoutTests/fast/dom/nodesFromRect-table.html:48
&gt; +    &lt;script type=&quot;application/javascript&quot;&gt;

No need for the type, this is HTML.

&gt; LayoutTests/fast/dom/nodesFromRect-table.html:53
&gt; +                layoutTestController.dumpAsText();
&gt; +                layoutTestController.waitUntilDone();

You don&apos;t need those 2 lines: js-test-pre.js already calls the former, the latter is unneeded as we stop the test _after_ the load event handler.

&gt; LayoutTests/fast/dom/nodesFromRect-table.html:85
&gt; +            check(190, 175, 10, 20, 10, 20, [e.td22, e.td23, e.testtable]);
&gt; +            check(260, 275, 10, 20, 10, 20, [e.td43, e.td44, e.testtable]);
&gt; +            check(175, 190, 20, 10, 20, 10, [e.td22, e.td32, e.testtable]);
&gt; +            check(275, 260, 20, 10, 20, 10, [e.td34, e.td44, e.testtable]);
&gt; +            check(190, 190, 20, 20, 20, 20, [e.td22, e.td23, e.td32, e.td33, e.testtable]);

Interestingly you don&apos;t get the rows, I am not 100% this is expected here as you have some spacing between your cells. I think you should define a table section by adding a &lt;tbody id=&quot;tbody&quot;&gt; around your rows (here it&apos;s anonymous and maybe that&apos;s why you don&apos;t see it in your results).

&gt; LayoutTests/fast/dom/nodesFromRect-table.html:98
&gt; +            if (window.layoutTestController)
&gt; +                layoutTestController.notifyDone();

This is unneeded too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635790</commentid>
    <comment_count>4</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-05-29 02:41:10 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 144048 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=144048&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderTableSection.cpp:1363
&gt; &gt; +    if (style()-&gt;isHorizontalWritingMode()) {
&gt; &gt; +        if (!style()-&gt;isFlippedBlocksWritingMode()) {
&gt; &gt; +            offsetStartInColumnDirection = hitTestRect.y();
&gt; &gt; +            offsetEndInColumnDirection = hitTestRect.maxY();
&gt; &gt; +        } else {
&gt; &gt; +            offsetStartInColumnDirection = height() - hitTestRect.maxY();
&gt; &gt; +            offsetEndInColumnDirection = height() - hitTestRect.y();
&gt; &gt; +        }
&gt; &gt; +    } else {
&gt; &gt; +        if (!style()-&gt;isFlippedBlocksWritingMode()) {
&gt; &gt; +            offsetStartInColumnDirection = hitTestRect.x();
&gt; &gt; +            offsetEndInColumnDirection = hitTestRect.maxX();
&gt; &gt; +        } else {
&gt; &gt; +            offsetStartInColumnDirection = width() - hitTestRect.maxX();
&gt; &gt; +            offsetEndInColumnDirection = width() - hitTestRect.x();
&gt; &gt; +        }
&gt; &gt;      }
&gt; 
&gt; AFAICT this should use the table&apos;s style as we don&apos;t allow sections to have a writing mode different from the table.
&gt; 
I use the same style that was already in use. If that is wrong, then it  was buggy already.

&gt; Also why is this not using RenderBox::flipForWritingMode?
&gt; 
There was a minor difference, but I can&apos;t remember what.  I will take a look again.

&gt; &gt; LayoutTests/fast/dom/nodesFromRect-table.html:85
&gt; &gt; +            check(190, 175, 10, 20, 10, 20, [e.td22, e.td23, e.testtable]);
&gt; &gt; +            check(260, 275, 10, 20, 10, 20, [e.td43, e.td44, e.testtable]);
&gt; &gt; +            check(175, 190, 20, 10, 20, 10, [e.td22, e.td32, e.testtable]);
&gt; &gt; +            check(275, 260, 20, 10, 20, 10, [e.td34, e.td44, e.testtable]);
&gt; &gt; +            check(190, 190, 20, 20, 20, 20, [e.td22, e.td23, e.td32, e.td33, e.testtable]);
&gt; 
&gt; Interestingly you don&apos;t get the rows, I am not 100% this is expected here as you have some spacing between your cells. I think you should define a table section by adding a &lt;tbody id=&quot;tbody&quot;&gt; around your rows (here it&apos;s anonymous and maybe that&apos;s why you don&apos;t see it in your results).
&gt; 
We don&apos;t get the rows because rows are never returned in hit-tests. Even if you place spacing between cells, you will never be able to get a hit-test to hit a row. I know the history behind this, and I am not sure it makes sense anymore, but I don&apos;t want to change it in an unrelated patch.

I considered adding the rows to the result if two cells from the same row are returned, but that might confuse touch-adjustment. Since it currently relies on being able to adjust the touch-point to a location where it hits the chosen target, that might be problematic and with rows being un-hittable, 



Thanks for the great comments. I will improve the ChangeLog, clean-up the test and improve coding style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635864</commentid>
    <comment_count>5</comment_count>
      <attachid>144515</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-05-29 04:32:27 -0700</bug_when>
    <thetext>Created attachment 144515
Patch

Cleaned-up and writing-mode direction tested</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635877</commentid>
    <comment_count>6</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-05-29 04:38:39 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Btw, you do a binary search on the rows and *columns*, not cells.
&gt; 
I considered it a single 2D binary search, but I will correct the terminology if you think that is incorrect or confusing.

&gt; Also why is this not using RenderBox::flipForWritingMode?
&gt; 
I have used it for the first inversion now. The second seems to use slightly different test and a inverts over the last columnPos instead of width. To be honest I am not entirely sure why it doesn&apos;t use similar logic, so I am taking a cautious approach and keep the same logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637025</commentid>
    <comment_count>7</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-05-30 01:47:48 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #3)
&gt; &gt; Also why is this not using RenderBox::flipForWritingMode?
&gt; &gt; 
&gt; I have used it for the first inversion now. The second seems to use slightly different test and a inverts over the last columnPos instead of width. To be honest I am not entirely sure why it doesn&apos;t use similar logic, so I am taking a cautious approach and keep the same logic.

The second flip is for text-direction not writing-mode. The two are unfortunately separate properties currently, and needs to be accounted for separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637030</commentid>
    <comment_count>8</comment_count>
      <attachid>144755</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-05-30 01:55:27 -0700</bug_when>
    <thetext>Created attachment 144755
Patch

Add missing LayoutTest/ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637440</commentid>
    <comment_count>9</comment_count>
      <attachid>144755</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-05-30 11:10:40 -0700</bug_when>
    <thetext>Comment on attachment 144755
Patch

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

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1358
&gt; +    LayoutUnit offsetStartInColumnDirection;
&gt; +    LayoutUnit offsetEndInColumnDirection;
&gt; +    LayoutRect flippedHitTestRect = hitTestRect;
&gt; +    flipForWritingMode(flippedHitTestRect);
&gt; +    if (style()-&gt;isHorizontalWritingMode()) {
&gt; +        offsetStartInColumnDirection = flippedHitTestRect.y();
&gt; +        offsetEndInColumnDirection = flippedHitTestRect.maxY();
&gt; +    } else {
&gt; +        offsetStartInColumnDirection = flippedHitTestRect.x();
&gt; +        offsetEndInColumnDirection = flippedHitTestRect.maxX();
&gt; +    }

It looks more messy than I would have expected but unfortunately makes total sense. I wonder if we couldn&apos;t re-use the logic from dirtiedRows / dirtiedColumns here. The reason being that it&apos;s already fully writing-mode aware (not direction aware though), already does the proper row / column patching and accounts for overflowing cell (which nodeAtPoint currently doesn&apos;t). It would also avoid code duplication.

&gt; LayoutTests/fast/dom/nodesFromRect-table.html:23
&gt; +    .rtl {
&gt; +        direction: rtl;
&gt; +    }
&gt; +    .tblr {
&gt; +        -webkit-writing-mode: vertical-lr;
&gt; +    }

AFAICT those 2 are unused and should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637567</commentid>
    <comment_count>10</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-05-30 12:53:33 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 144755 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=144755&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderTableSection.cpp:1358
&gt; &gt; +    LayoutUnit offsetStartInColumnDirection;
&gt; &gt; +    LayoutUnit offsetEndInColumnDirection;
&gt; &gt; +    LayoutRect flippedHitTestRect = hitTestRect;
&gt; &gt; +    flipForWritingMode(flippedHitTestRect);
&gt; &gt; +    if (style()-&gt;isHorizontalWritingMode()) {
&gt; &gt; +        offsetStartInColumnDirection = flippedHitTestRect.y();
&gt; &gt; +        offsetEndInColumnDirection = flippedHitTestRect.maxY();
&gt; &gt; +    } else {
&gt; &gt; +        offsetStartInColumnDirection = flippedHitTestRect.x();
&gt; &gt; +        offsetEndInColumnDirection = flippedHitTestRect.maxX();
&gt; &gt; +    }
&gt; 
&gt; It looks more messy than I would have expected but unfortunately makes total sense. I wonder if we couldn&apos;t re-use the logic from dirtiedRows / dirtiedColumns here. 

It looks like that code does two binary lookups one for begin and one for end. Two lookups seems unnecessary here, and would make the common-case of point hit-testing slower.

The code could be made cleaner by having an additional function to flip for direction, and first flip for writing-mode and then for direction, but this begs the unpleasant question: If writing mode is top-to-bottom and direction right-to-left, does the columns then flow bottom-to-top? and if that is the case, does that mean that if both writing-mode and direction is right-to-left that the columns flow left-to-right?

&gt; 
&gt; &gt; LayoutTests/fast/dom/nodesFromRect-table.html:23
&gt; &gt; +    .rtl {
&gt; &gt; +        direction: rtl;
&gt; &gt; +    }
&gt; &gt; +    .tblr {
&gt; &gt; +        -webkit-writing-mode: vertical-lr;
&gt; &gt; +    }
&gt; 
&gt; AFAICT those 2 are unused and should be removed.

Right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637649</commentid>
    <comment_count>11</comment_count>
      <attachid>144755</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-05-30 13:45:33 -0700</bug_when>
    <thetext>Comment on attachment 144755
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderTableSection.cpp:1358
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; It looks more messy than I would have expected but unfortunately makes total sense. I wonder if we couldn&apos;t re-use the logic from dirtiedRows / dirtiedColumns here. The reason being that it&apos;s already fully writing-mode aware (not direction aware though), already does the proper row / column patching and accounts for overflowing cell (which nodeAtPoint currently doesn&apos;t). It would also avoid code duplication.
&gt; 
&gt; It looks like that code does two binary lookups one for begin and one for end. Two lookups seems unnecessary here, and would make the common-case of point hit-testing slower.
&gt; 
&gt; The code could be made cleaner by having an additional function to flip for direction, and first flip for writing-mode and then for direction, but this begs the unpleasant question: If writing mode is top-to-bottom and direction right-to-left, does the columns then flow bottom-to-top? and if that is the case, does that mean that if both writing-mode and direction is right-to-left that the columns flow left-to-right?

I don&apos;t really buy the performance argument. Those 2 functions have one big advantage: they have a nicer way to handle sparse overflowing cells. Currently it&apos;s handled above and is a quadratic algorithm. The 2nd binary search is still required, you just replaced it with checking explicitly when you have passed the extend of your rect below. For small rectangle testing, your explicit checks may win but the binary search gives us a better upper bound. On top of that, if you are afraid about performance, you could patch dirtiedRows / dirtiedColumns to avoid the second binary search for point hit-testing.

We have some issues with &apos;direction&apos; on table parts (especially when collapsing borders are involved). I don&apos;t understand your questions about writing mode vs direction. Those 2 properties handle orthogonal axis: writing mode defines the block flow direction (which translates how columns stack in a table), direction changes the inline flow direction (which translates how rows flow in a table). See CSS 3 writing mode for the details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638118</commentid>
    <comment_count>12</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-05-31 01:43:09 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 144755 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=144755&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/rendering/RenderTableSection.cpp:1358
&gt; &gt;&gt;&gt; +    }
&gt; &gt;&gt; 
&gt; &gt;&gt; It looks more messy than I would have expected but unfortunately makes total sense. I wonder if we couldn&apos;t re-use the logic from dirtiedRows / dirtiedColumns here. The reason being that it&apos;s already fully writing-mode aware (not direction aware though), already does the proper row / column patching and accounts for overflowing cell (which nodeAtPoint currently doesn&apos;t). It would also avoid code duplication.
&gt; &gt; 
&gt; &gt; It looks like that code does two binary lookups one for begin and one for end. Two lookups seems unnecessary here, and would make the common-case of point hit-testing slower.
&gt; &gt; 
&gt; &gt; The code could be made cleaner by having an additional function to flip for direction, and first flip for writing-mode and then for direction, but this begs the unpleasant question: If writing mode is top-to-bottom and direction right-to-left, does the columns then flow bottom-to-top? and if that is the case, does that mean that if both writing-mode and direction is right-to-left that the columns flow left-to-right?
&gt; 
&gt; I don&apos;t really buy the performance argument. Those 2 functions have one big advantage: they have a nicer way to handle sparse overflowing cells. Currently it&apos;s handled above and is a quadratic algorithm. The 2nd binary search is still required, you just replaced it with checking explicitly when you have passed the extend of your rect below. For small rectangle testing, your explicit checks may win but the binary search gives us a better upper bound. On top of that, if you are afraid about performance, you could patch dirtiedRows / dirtiedColumns to avoid the second binary search for point hit-testing.
&gt; 
No, in this case we are not looking for the start and the end, we are looking for all cells in between and need to visit all the cells in between. The linear search from the start is not a sub-optimal solution in this case, since we need to linearly walk all those cells anyway. This makes a second binary look-up a complete waste.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638336</commentid>
    <comment_count>13</comment_count>
      <attachid>144755</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-05-31 06:33:07 -0700</bug_when>
    <thetext>Comment on attachment 144755
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/rendering/RenderTableSection.cpp:1358
&gt;&gt;&gt;&gt;&gt; +    }
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; It looks more messy than I would have expected but unfortunately makes total sense. I wonder if we couldn&apos;t re-use the logic from dirtiedRows / dirtiedColumns here. The reason being that it&apos;s already fully writing-mode aware (not direction aware though), already does the proper row / column patching and accounts for overflowing cell (which nodeAtPoint currently doesn&apos;t). It would also avoid code duplication.
&gt;&gt;&gt; 
&gt;&gt;&gt; It looks like that code does two binary lookups one for begin and one for end. Two lookups seems unnecessary here, and would make the common-case of point hit-testing slower.
&gt;&gt;&gt; 
&gt;&gt;&gt; The code could be made cleaner by having an additional function to flip for direction, and first flip for writing-mode and then for direction, but this begs the unpleasant question: If writing mode is top-to-bottom and direction right-to-left, does the columns then flow bottom-to-top? and if that is the case, does that mean that if both writing-mode and direction is right-to-left that the columns flow left-to-right?
&gt;&gt; 
&gt;&gt; I don&apos;t really buy the performance argument. Those 2 functions have one big advantage: they have a nicer way to handle sparse overflowing cells. Currently it&apos;s handled above and is a quadratic algorithm. The 2nd binary search is still required, you just replaced it with checking explicitly when you have passed the extend of your rect below. For small rectangle testing, your explicit checks may win but the binary search gives us a better upper bound. On top of that, if you are afraid about performance, you could patch dirtiedRows / dirtiedColumns to avoid the second binary search for point hit-testing.
&gt;&gt; 
&gt;&gt; We have some issues with &apos;direction&apos; on table parts (especially when collapsing borders are involved). I don&apos;t understand your questions about writing mode vs direction. Those 2 properties handle orthogonal axis: writing mode defines the block flow direction (which translates how columns stack in a table), direction changes the inline flow direction (which translates how rows flow in a table). See CSS 3 writing mode for the details.
&gt; 
&gt; No, in this case we are not looking for the start and the end, we are looking for all cells in between and need to visit all the cells in between. The linear search from the start is not a sub-optimal solution in this case, since we need to linearly walk all those cells anyway. This makes a second binary look-up a complete waste.

Maybe I am missing something here, please tell me if that&apos;s the case. My point was not about avoiding the linear walk as it&apos;s needed to collect the cells. The issue was that the new code checks *every* cell to know if they are in the hit rect. Doing a binary search upfront removes the need for this check and *may* be better (the binary search may end up doing less comparisons, especially for bigger hit rect). If we can&apos;t say that our hit rect will be always small, the binary search with a tweak for the hit point case seemed like a better trade-off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638338</commentid>
    <comment_count>14</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-05-31 06:35:46 -0700</bug_when>
    <thetext>they we did internally for the blackberry port, is that we make the hit test rect a region, and as we walk over the cells, we remove the rect that intersects to the current cell from the rect.

hit testing is not needed when the region becomes empty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638374</commentid>
    <comment_count>15</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-05-31 07:08:50 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; 
&gt; Maybe I am missing something here, please tell me if that&apos;s the case. My point was not about avoiding the linear walk as it&apos;s needed to collect the cells. The issue was that the new code checks *every* cell to know if they are in the hit rect. Doing a binary search upfront removes the need for this check and *may* be better (the binary search may end up doing less comparisons, especially for bigger hit rect). If we can&apos;t say that our hit rect will be always small, the binary search with a tweak for the hit point case seemed like a better trade-off.

I see where you are going, but it is unfortunately necessary to check every cell, since we do not only want the table-cells in the hit-test area, but all elements in the area, so we need to also check and add the content of each cell to the output. It is not just walking them, it is a tree recursion down each cell.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638377</commentid>
    <comment_count>16</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-05-31 07:10:19 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #13)
&gt; &gt; 
&gt; &gt; Maybe I am missing something here, please tell me if that&apos;s the case. My point was not about avoiding the linear walk as it&apos;s needed to collect the cells. The issue was that the new code checks *every* cell to know if they are in the hit rect. Doing a binary search upfront removes the need for this check and *may* be better (the binary search may end up doing less comparisons, especially for bigger hit rect). If we can&apos;t say that our hit rect will be always small, the binary search with a tweak for the hit point case seemed like a better trade-off.
&gt; 
&gt; I see where you are going, but it is unfortunately necessary to check every cell, since we do not only want the table-cells in the hit-test area, but all elements in the area, so we need to also check and add the content of each cell to the output. It is not just walking them, it is a tree recursion down each cell.

not sure I agree. see my comment above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638395</commentid>
    <comment_count>17</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-05-31 07:37:23 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (In reply to comment #13)
&gt; &gt; &gt; 
&gt; &gt; &gt; Maybe I am missing something here, please tell me if that&apos;s the case. My point was not about avoiding the linear walk as it&apos;s needed to collect the cells. The issue was that the new code checks *every* cell to know if they are in the hit rect. Doing a binary search upfront removes the need for this check and *may* be better (the binary search may end up doing less comparisons, especially for bigger hit rect). If we can&apos;t say that our hit rect will be always small, the binary search with a tweak for the hit point case seemed like a better trade-off.
&gt; &gt; 
&gt; &gt; I see where you are going, but it is unfortunately necessary to check every cell, since we do not only want the table-cells in the hit-test area, but all elements in the area, so we need to also check and add the content of each cell to the output. It is not just walking them, it is a tree recursion down each cell.
&gt; 
&gt; not sure I agree. see my comment above.

Maybe I have misunderstood you, but you seem to be talking about an optimisation for overlapping elements. This particular patch is fixing the fast-path where no cells overlap each other. We could still do an optimisation like what you describe for the slow path, but the slow path is currently correct (but slow), where this patch fixes the fast path which is currently now even handling area-based hit-testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639107</commentid>
    <comment_count>18</comment_count>
      <attachid>145243</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-06-01 01:55:18 -0700</bug_when>
    <thetext>Created attachment 145243
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639108</commentid>
    <comment_count>19</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-06-01 01:58:28 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Created an attachment (id=145243) [details]
&gt; Patch

The new patch introduces some new helper function that can probably also be useful to, or be used to replace dirtiedRows and dirtiedColumns. Doing that might even fix various problems with right-to-left support in repainting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640673</commentid>
    <comment_count>20</comment_count>
      <attachid>145243</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-06-04 10:36:39 -0700</bug_when>
    <thetext>Comment on attachment 145243
Patch

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

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1112
&gt; +    unsigned nextRow = std::upper_bound(m_rowPos.begin(), m_rowPos.end(), flippedRect.y()) - m_rowPos.begin();

Shouldn&apos;t using upper_bound cause some issues as it would happily ignore 0px height rows? (for visual hit testing, it may not be an issue but for programmatic testing, I would expect those rows to be considered).

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1115
&gt; +        return CellSpan(m_rowPos.size(), m_rowPos.size()); // No rows spanned.

It may be worth thinking about having some CellSpan::emptySpan()? (this is kind of a magic constant)

&gt; Source/WebCore/rendering/RenderTableSection.h:213
&gt; +    // These two functions take a rectangle as input that has been flipped by flipRectToRowAndColumnDirection.
&gt; +    CellSpan spannedRows(const LayoutRect&amp; flippedRect) const;
&gt; +    CellSpan spannedColumns(const LayoutRect&amp; flippedRect) const;

Why do we need more functions that are doing exactly the same work as dirtiedRows and dirtiedColumns? Nowhere can I find why this is preferable to patching / re-using the above functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640688</commentid>
    <comment_count>21</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-06-04 10:58:54 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 145243 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145243&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderTableSection.cpp:1112
&gt; &gt; +    unsigned nextRow = std::upper_bound(m_rowPos.begin(), m_rowPos.end(), flippedRect.y()) - m_rowPos.begin();
&gt; 
&gt; Shouldn&apos;t using upper_bound cause some issues as it would happily ignore 0px height rows? (for visual hit testing, it may not be an issue but for programmatic testing, I would expect those rows to be considered).
&gt; 
I used upper bound because the existing test used upper bound. I wanted it to have similar behaviour for point-based testing.

&gt; &gt; Source/WebCore/rendering/RenderTableSection.cpp:1115
&gt; &gt; +        return CellSpan(m_rowPos.size(), m_rowPos.size()); // No rows spanned.
&gt; 
&gt; It may be worth thinking about having some CellSpan::emptySpan()? (this is kind of a magic constant)
&gt; 
The constant is not magic, the span is end-exclusive and any span with start=end is empty. This return value includes the information that the hit area is after all rows, similar (0,0) will be be returned for hit areas before all rows. This is used in the patch mentioned below.

&gt; &gt; Source/WebCore/rendering/RenderTableSection.h:213
&gt; &gt; +    // These two functions take a rectangle as input that has been flipped by flipRectToRowAndColumnDirection.
&gt; &gt; +    CellSpan spannedRows(const LayoutRect&amp; flippedRect) const;
&gt; &gt; +    CellSpan spannedColumns(const LayoutRect&amp; flippedRect) const;
&gt; 
&gt; Why do we need more functions that are doing exactly the same work as dirtiedRows and dirtiedColumns? Nowhere can I find why this is preferable to patching / re-using the above functions.

Yes I agree :) But I have patched that separately because reusing these functions slightly changes dirty behaviour (fixing separate bugs), and might have separate issues, see https://bugs.webkit.org/show_bug.cgi?id=88066</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641547</commentid>
    <comment_count>22</comment_count>
      <attachid>145243</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-06-05 07:56:26 -0700</bug_when>
    <thetext>Comment on attachment 145243
Patch

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

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1093
&gt; +LayoutRect RenderTableSection::flipRectToRowAndColumnDirection(const LayoutRect&amp; rect) const

Not a huge fan of the naming here. First &apos;direction&apos; only apply in the &quot;row&quot; direction (which is technically the inline base direction). Also you transpose the rectangle to align it with the writing mode coordinates - which is uncommon in the code, (x, y) being physical coordinates - the naming should use &apos;logical&apos; as it&apos;s not a normal rect.

Better suggestions on naming: logicalRectForWritingModeAndDirection(), flippedLogicalRectForWritingModeAndDirection()

&gt;&gt;&gt; Source/WebCore/rendering/RenderTableSection.cpp:1112
&gt;&gt;&gt; +    unsigned nextRow = std::upper_bound(m_rowPos.begin(), m_rowPos.end(), flippedRect.y()) - m_rowPos.begin();
&gt;&gt; 
&gt;&gt; Shouldn&apos;t using upper_bound cause some issues as it would happily ignore 0px height rows? (for visual hit testing, it may not be an issue but for programmatic testing, I would expect those rows to be considered).
&gt; 
&gt; I used upper bound because the existing test used upper bound. I wanted it to have similar behaviour for point-based testing.

Please add a FIXME in this case. This is kind of a corner cases but it should be tested.

&gt;&gt;&gt; Source/WebCore/rendering/RenderTableSection.cpp:1115
&gt;&gt;&gt; +        return CellSpan(m_rowPos.size(), m_rowPos.size()); // No rows spanned.
&gt;&gt; 
&gt;&gt; It may be worth thinking about having some CellSpan::emptySpan()? (this is kind of a magic constant)
&gt; 
&gt; The constant is not magic, the span is end-exclusive and any span with start=end is empty. This return value includes the information that the hit area is after all rows, similar (0,0) will be be returned for hit areas before all rows. This is used in the patch mentioned below.

Note that considering the end is a departure from the other usages of CellSpan. I don&apos;t really care either way but we need to be consistent.

&gt;&gt;&gt; Source/WebCore/rendering/RenderTableSection.h:213
&gt;&gt;&gt; +    CellSpan spannedColumns(const LayoutRect&amp; flippedRect) const;
&gt;&gt; 
&gt;&gt; Why do we need more functions that are doing exactly the same work as dirtiedRows and dirtiedColumns? Nowhere can I find why this is preferable to patching / re-using the above functions.
&gt; 
&gt; Yes I agree :) But I have patched that separately because reusing these functions slightly changes dirty behaviour (fixing separate bugs), and might have separate issues, see https://bugs.webkit.org/show_bug.cgi?id=88066

ACK, I missed the bug. Adding a huge FIXME here mentioning bug 88066 would help people not following closely what is going on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642266</commentid>
    <comment_count>23</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-06-06 00:56:37 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; &gt; The constant is not magic, the span is end-exclusive and any span with start=end is empty. This return value includes the information that the hit area is after all rows, similar (0,0) will be be returned for hit areas before all rows. This is used in the patch mentioned below.
&gt; 
&gt; Note that considering the end is a departure from the other usages of CellSpan. I don&apos;t really care either way but we need to be consistent.
&gt; 
Well, it is consistent with how rows and columns vectors are accessed, and also the values returned by fullTableColumnSpan for instance. The row and columns vectors are always one larger than the number of rows and columns, with the last value representing the end of the last row or column.

m_rowPos[0] == beginning of first row
m_rowPos[m_rowPos.size()-1] == end of the last row.

I will add a comment making it more explicit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642288</commentid>
    <comment_count>24</comment_count>
      <attachid>145964</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-06-06 01:54:08 -0700</bug_when>
    <thetext>Created attachment 145964
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644901</commentid>
    <comment_count>25</comment_count>
      <attachid>145964</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-06-08 11:44:06 -0700</bug_when>
    <thetext>Comment on attachment 145964
Patch

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

r=me

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1112
&gt; +    // FIXME: We should reevaluate if upper_bound is the correct choice here.

A more precise comment would help. The issue is that upper_bound will ignore empty rows. It may be fine for painting, not so much for hit testing.

Also currently rows / columns are handled slightly differently (upper_bound vs lower_bound). I don&apos;t see why it should be different but it already was so that&apos;s actually another FIXME :)

&gt; Source/WebCore/rendering/RenderTableSection.h:226
&gt; +    // The returned span of rows or columns is end-exclusive, and empty if start==end.

Terrific, thanks for documenting that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645532</commentid>
    <comment_count>26</comment_count>
      <attachid>146739</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-06-10 08:44:39 -0700</bug_when>
    <thetext>Created attachment 146739
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645868</commentid>
    <comment_count>27</comment_count>
      <attachid>146739</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-11 02:39:04 -0700</bug_when>
    <thetext>Comment on attachment 146739
Patch for landing

Clearing flags on attachment: 146739

Committed r119967: &lt;http://trac.webkit.org/changeset/119967&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645869</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-11 02:39:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142212</attachid>
            <date>2012-05-16 03:39:10 -0700</date>
            <delta_ts>2012-05-25 05:09:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86605-20120516123913.patch</filename>
            <type>text/plain</type>
            <size>13160</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODkxZjZmYzUyZWVlNTUx
MzA0NGVjOGQ3MDFjODI5YTc1NDMyZjg2My4uNTRmMjEyYjUyZmQyNTA0NjZhMzYyNTJmNjgxZDhi
N2I1MjI3NmU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIwIEBACiAyMDEyLTA1LTE2ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgogCisgICAgICAgIFJl
Y3QtYmFzZWQgaGl0dGVzdGluZyBkb2Vzbid0IHdvcmsgaW4gdGFibGVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY2MDUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZnRlciBiaW5hcnkgbG9vay11cCBv
ZiByb3cgYW5kIGNlbGwsIGNvbnRpbnVlIHRvIHRlc3QgZm9sbG93aW5nCisgICAgICAgIGNlbGxz
IHRoYXQgaW50ZXJzZWN0IHdpdGggdGhlIGFyZWEgb2YgdGhlIGhpdC10ZXN0IHBvaW50LgorCisg
ICAgICAgIFRlc3Q6IGZhc3QvZG9tL25vZGVzRnJvbVJlY3QtdGFibGUuaHRtbAorCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KToKKworMjAxMi0wNS0xNiAgQWxsYW4gU2Fu
ZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KKwogICAgICAgICBOb2Rlc0Zy
b21SZWN0IGFuZCBhcmVhLWJhc2VkIGhpdC10ZXN0aW5nIGNhbiBub3QgaGFuZGxlIENTUyB0cmFu
c2Zvcm1zLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODU3OTIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmNwcAppbmRleCAwNDgwODgxNzQ3NTE4ZGJkZTNiMDZjNjJkZjljN2Y0ZDdiODllZTBlLi42MmZj
ZDc3ZDE4ZTk0MzkyMGNjNTM4YmQ5NzdiY2Y3OWY3MTQwOWEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMTMzNyw1MCArMTMzNyw4
OSBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgTGF5b3V0UG9pbnQgbG9jYXRpb24gPSBwb2ludEluQ29udGFpbmVyLnBvaW50KCkg
LSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbik7Ci0gICAgaWYgKHN0eWxlKCktPmlzRmxp
cHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICBsb2NhdGlvbi5zZXRZKGhlaWdodCgpIC0g
bG9jYXRpb24ueSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9jYXRpb24uc2V0WCh3
aWR0aCgpIC0gbG9jYXRpb24ueCgpKTsKKyAgICBMYXlvdXRSZWN0IGhpdFRlc3RSZWN0ID0gcG9p
bnRJbkNvbnRhaW5lci5ib3VuZGluZ0JveCgpOworICAgIGhpdFRlc3RSZWN0Lm1vdmVCeSgtYWRq
dXN0ZWRMb2NhdGlvbik7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHN0YXJ0IGFuZCBlbmQgY29v
cmRpbmF0ZXMgb2YgdGhlIGhpdFRlc3RSZWN0LgorICAgIExheW91dFVuaXQgb2Zmc2V0U3RhcnRJ
bkNvbHVtbkRpcmVjdGlvbiwgb2Zmc2V0RW5kSW5Db2x1bW5EaXJlY3Rpb247CisgICAgaWYgKHN0
eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKKyAgICAgICAgaWYgKCFzdHlsZSgp
LT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7CisgICAgICAgICAgICBvZmZzZXRTdGFy
dEluQ29sdW1uRGlyZWN0aW9uID0gaGl0VGVzdFJlY3QueSgpOworICAgICAgICAgICAgb2Zmc2V0
RW5kSW5Db2x1bW5EaXJlY3Rpb24gPSBoaXRUZXN0UmVjdC5tYXhZKCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBvZmZzZXRTdGFydEluQ29sdW1uRGlyZWN0aW9uID0gaGVpZ2h0KCkg
LSBoaXRUZXN0UmVjdC5tYXhZKCk7CisgICAgICAgICAgICBvZmZzZXRFbmRJbkNvbHVtbkRpcmVj
dGlvbiA9IGhlaWdodCgpIC0gaGl0VGVzdFJlY3QueSgpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKCFzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7
CisgICAgICAgICAgICBvZmZzZXRTdGFydEluQ29sdW1uRGlyZWN0aW9uID0gaGl0VGVzdFJlY3Qu
eCgpOworICAgICAgICAgICAgb2Zmc2V0RW5kSW5Db2x1bW5EaXJlY3Rpb24gPSBoaXRUZXN0UmVj
dC5tYXhYKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvZmZzZXRTdGFydEluQ29s
dW1uRGlyZWN0aW9uID0gd2lkdGgoKSAtIGhpdFRlc3RSZWN0Lm1heFgoKTsKKyAgICAgICAgICAg
IG9mZnNldEVuZEluQ29sdW1uRGlyZWN0aW9uID0gd2lkdGgoKSAtIGhpdFRlc3RSZWN0LngoKTsK
KyAgICAgICAgfQogICAgIH0KIAotICAgIExheW91dFVuaXQgb2Zmc2V0SW5Db2x1bW5EaXJlY3Rp
b24gPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYXRpb24ueSgpIDog
bG9jYXRpb24ueCgpOwotCiAgICAgcmVjYWxjQ2VsbHNJZk5lZWRlZCgpOwogCi0gICAgLy8gRmlu
ZCB0aGUgZmlyc3Qgcm93IHRoYXQgc3RhcnRzIGFmdGVyIG9mZnNldEluQ29sdW1uRGlyZWN0aW9u
LgotICAgIHVuc2lnbmVkIG5leHRSb3cgPSBzdGQ6OnVwcGVyX2JvdW5kKG1fcm93UG9zLmJlZ2lu
KCksIG1fcm93UG9zLmVuZCgpLCBvZmZzZXRJbkNvbHVtbkRpcmVjdGlvbikgLSBtX3Jvd1Bvcy5i
ZWdpbigpOworICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJvdyB0aGF0IHN0YXJ0cyBhZnRlciBvZmZz
ZXRTdGFydEluQ29sdW1uRGlyZWN0aW9uLgorICAgIHVuc2lnbmVkIG5leHRSb3cgPSBzdGQ6OnVw
cGVyX2JvdW5kKG1fcm93UG9zLmJlZ2luKCksIG1fcm93UG9zLmVuZCgpLCBvZmZzZXRTdGFydElu
Q29sdW1uRGlyZWN0aW9uKSAtIG1fcm93UG9zLmJlZ2luKCk7CiAgICAgaWYgKG5leHRSb3cgPT0g
bV9yb3dQb3Muc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gTm93IHNldCBo
aXRSb3cgdG8gdGhlIGluZGV4IG9mIHRoZSBoaXQgcm93LCBvciAwLgogICAgIHVuc2lnbmVkIGhp
dFJvdyA9IG5leHRSb3cgPiAwID8gbmV4dFJvdyAtIDEgOiAwOwogCiAgICAgVmVjdG9yPGludD4m
IGNvbHVtblBvcyA9IHRhYmxlKCktPmNvbHVtblBvc2l0aW9ucygpOwotICAgIExheW91dFVuaXQg
b2Zmc2V0SW5Sb3dEaXJlY3Rpb24gPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gbG9jYXRpb24ueCgpIDogbG9jYXRpb24ueSgpOwotICAgIGlmICghc3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICBvZmZzZXRJblJvd0RpcmVjdGlvbiA9IGNvbHVt
blBvc1tjb2x1bW5Qb3Muc2l6ZSgpIC0gMV0gLSBvZmZzZXRJblJvd0RpcmVjdGlvbjsKKyAgICBM
YXlvdXRVbml0IG9mZnNldFN0YXJ0SW5Sb3dEaXJlY3Rpb24sIG9mZnNldEVuZEluUm93RGlyZWN0
aW9uOworICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAg
ICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKKyAgICAgICAgICAg
IG9mZnNldFN0YXJ0SW5Sb3dEaXJlY3Rpb24gPSBoaXRUZXN0UmVjdC54KCk7CisgICAgICAgICAg
ICBvZmZzZXRFbmRJblJvd0RpcmVjdGlvbiA9IGhpdFRlc3RSZWN0Lm1heFgoKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG9mZnNldFN0YXJ0SW5Sb3dEaXJlY3Rpb24gPSBjb2x1bW5Q
b3NbY29sdW1uUG9zLnNpemUoKSAtIDFdIC0gaGl0VGVzdFJlY3QubWF4WCgpOworICAgICAgICAg
ICAgb2Zmc2V0RW5kSW5Sb3dEaXJlY3Rpb24gPSBjb2x1bW5Qb3NbY29sdW1uUG9zLnNpemUoKSAt
IDFdIC0gaGl0VGVzdFJlY3QueCgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgeworICAgICAgICAgICAgb2Zm
c2V0U3RhcnRJblJvd0RpcmVjdGlvbiA9IGhpdFRlc3RSZWN0LnkoKTsKKyAgICAgICAgICAgIG9m
ZnNldEVuZEluUm93RGlyZWN0aW9uID0gaGl0VGVzdFJlY3QubWF4WSgpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgb2Zmc2V0U3RhcnRJblJvd0RpcmVjdGlvbiA9IGNvbHVtblBvc1tj
b2x1bW5Qb3Muc2l6ZSgpIC0gMV0gLSBoaXRUZXN0UmVjdC5tYXhZKCk7CisgICAgICAgICAgICBv
ZmZzZXRFbmRJblJvd0RpcmVjdGlvbiA9IGNvbHVtblBvc1tjb2x1bW5Qb3Muc2l6ZSgpIC0gMV0g
LSBoaXRUZXN0UmVjdC55KCk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICB1bnNpZ25lZCBuZXh0
Q29sdW1uID0gc3RkOjpsb3dlcl9ib3VuZChjb2x1bW5Qb3MuYmVnaW4oKSwgY29sdW1uUG9zLmVu
ZCgpLCBvZmZzZXRJblJvd0RpcmVjdGlvbikgLSBjb2x1bW5Qb3MuYmVnaW4oKTsKKyAgICB1bnNp
Z25lZCBuZXh0Q29sdW1uID0gc3RkOjpsb3dlcl9ib3VuZChjb2x1bW5Qb3MuYmVnaW4oKSwgY29s
dW1uUG9zLmVuZCgpLCBvZmZzZXRTdGFydEluUm93RGlyZWN0aW9uKSAtIGNvbHVtblBvcy5iZWdp
bigpOwogICAgIGlmIChuZXh0Q29sdW1uID09IGNvbHVtblBvcy5zaXplKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCBoaXRDb2x1bW4gPSBuZXh0Q29sdW1uID4gMCA/IG5l
eHRDb2x1bW4gLSAxIDogMDsKIAotICAgIENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBjZWxsQXQoaGl0
Um93LCBoaXRDb2x1bW4pOwotCi0gICAgLy8gSWYgdGhlIGNlbGwgaXMgZW1wdHksIHRoZXJlJ3Mg
bm90aGluZyB0byBkbwotICAgIGlmICghY3VycmVudC5oYXNDZWxscygpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgZG8geworICAgICAgICB1bnNpZ25lZCBoaXRDb2x1bW4gPSBuZXh0Q29s
dW1uID4gMCA/IG5leHRDb2x1bW4gLSAxIDogMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAg
Q2VsbFN0cnVjdCYgY3VycmVudCA9IGNlbGxBdChoaXRSb3csIGhpdENvbHVtbik7CisKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBjZWxsIGlzIGVtcHR5LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8KKyAg
ICAgICAgICAgIGlmICghY3VycmVudC5oYXNDZWxscygpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY3VycmVudC5jZWxscy5z
aXplKCkgOyBpOyApIHsKKyAgICAgICAgICAgICAgICAtLWk7CisgICAgICAgICAgICAgICAgUmVu
ZGVyVGFibGVDZWxsKiBjZWxsID0gY3VycmVudC5jZWxsc1tpXTsKKyAgICAgICAgICAgICAgICBM
YXlvdXRQb2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGVGb3JDaGlsZChjZWxsLCBh
ZGp1c3RlZExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8UmVuZGVy
T2JqZWN0Kj4oY2VsbCktPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRh
aW5lciwgY2VsbFBvaW50LCBhY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCB0b0xheW91dFBvaW50KHBvaW50SW5Db250YWluZXIucG9pbnQo
KSAtIGNlbGxQb2ludCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc1Jl
Y3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICsraGl0
Q29sdW1uOworICAgICAgICB9IHdoaWxlIChoaXRDb2x1bW4gPCAoY29sdW1uUG9zLnNpemUoKSAt
IDEpICYmIGNvbHVtblBvc1toaXRDb2x1bW5dIDw9IG9mZnNldEVuZEluUm93RGlyZWN0aW9uKTsK
KyAgICAgICAgaWYgKCFyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgKytoaXRSb3c7CisgICAgfSB3aGlsZSAoaGl0Um93IDwgKG1fcm93UG9zLnNp
emUoKSAtIDEpICYmIG1fcm93UG9zW2hpdFJvd10gPD0gb2Zmc2V0RW5kSW5Db2x1bW5EaXJlY3Rp
b24pOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gY3VycmVudC5jZWxscy5zaXplKCkgOyBpOyAp
IHsKLSAgICAgICAgLS1pOwotICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50
LmNlbGxzW2ldOwotICAgICAgICBMYXlvdXRQb2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGlu
Z01vZGVGb3JDaGlsZChjZWxsLCBhZGp1c3RlZExvY2F0aW9uKTsKLSAgICAgICAgaWYgKHN0YXRp
Y19jYXN0PFJlbmRlck9iamVjdCo+KGNlbGwpLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQs
IHBvaW50SW5Db250YWluZXIsIGNlbGxQb2ludCwgYWN0aW9uKSkgewotICAgICAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvTGF5b3V0UG9pbnQocG9pbnRJbkNvbnRhaW5lci5w
b2ludCgpIC0gY2VsbFBvaW50KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiAKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5ZDk0N2U0NmQxYmU4NjBi
ZTQ5ZWIzMDdmODg1ODA1MDdjMjg0NzQ1Li5iZjVjNGNiOWY5MTc0NmU0M2Y0ZmMxNzA1NGQ4OGQx
OWJhYTdkYWY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTUgQEAKIDIwMTItMDUtMTYgIEFsbGFuIFNhbmRm
ZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CiAKKyAgICAgICAgUmVjdC1iYXNl
ZCBoaXR0ZXN0aW5nIGRvZXNuJ3Qgd29yayBpbiB0YWJsZXMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjYwNQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10YWJs
ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL25vZGVzRnJvbVJlY3Qt
dGFibGUuaHRtbDogQWRkZWQuCisKKzIwMTItMDUtMTYgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAg
PGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKICAgICAgICAgTm9kZXNGcm9tUmVjdCBhbmQgYXJl
YS1iYXNlZCBoaXQtdGVzdGluZyBjYW4gbm90IGhhbmRsZSBDU1MgdHJhbnNmb3Jtcy4KICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1NzkyCiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtdGFibGUtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10YWJsZS1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjRiOTBhZmJhYWFjOTZmOTc5ZDE0OWY1Zjk3ODFmYTU4MmEwMDU1Mwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtdGFi
bGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjUgQEAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorQ2hlY2sgYXJlYSBoaXRzIGZ1bGx5IGluc2lkZSB0
YWJsZSBjZWxscworUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBB
bGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBm
b3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorQ2hl
Y2sgYXJlYSBoaXRzIGFjcm9zcyB0YWJsZSBib3JkZXIKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMg
Zm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BB
U1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK0NoZWNrIGFyZWEgaGl0cyBjcm9z
c2luZyBuZWlnaGJvdXJpbmcgdGFibGUgY2VsbHMKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91
bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1Mg
QWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMg
Zm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK0No
ZWNrIGFyZWEgaGl0cyBjcm9zc2luZyBlbnRpcmUgdGFibGUgY2VsbHMKK1BBU1MgQWxsIGNvcnJl
Y3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9y
IHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNv
cnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQg
Zm9yIHJlY3QKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVj
dC10YWJsZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10YWJsZS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmFlYjE1NDAxZmEwNmMxMmQ5MmFjNzI0NGQzM2VjNTA5OWZmZjBhZGQK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LXRh
YmxlLmh0bWwKQEAgLTAsMCArMSwxMDggQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+RG9jdW1l
bnQ6Om5vZGVzRnJvbVJlY3QgOiBDU1Mgc2NhbGUgdHJhbnNmb3JtcyAtIGJ1ZyA4NTc5MjwvdGl0
bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgICNzYW5kYm94IHsKKyAgICAgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgICAgICBsZWZ0OiAwcHg7CisgICAgICAgIHRvcDogMHB4Owor
ICAgICAgICB3aWR0aDogNjAwcHg7CisgICAgICAgIGhlaWdodDogODAwcHg7CisgICAgfQorICAg
ICN0ZXN0dGFibGUgeworICAgICAgICBtYXJnaW46IDEwMHB4OworICAgICAgICB3aWR0aDogMjAw
cHg7CisgICAgICAgIGhlaWdodDogMjAwcHg7CisgICAgfQorPC9zdHlsZT4KKzxzY3JpcHQgc3Jj
PSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkg
aWQ9ImJvZHkiPgorICAgIDxkaXYgaWQ9c2FuZGJveD4KKyAgICAgICAgPHRhYmxlIGlkPXRlc3R0
YWJsZT4KKyAgICAgICAgICAgIDx0ciBpZD10cjE+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRk
MTE+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkMTI+CisgICAgICAgICAgICAgICAgPHRkIGlk
PXRkMTM+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkMTQ+CisgICAgICAgICAgICA8dHIgaWQ9
dHIyPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDIxPgorICAgICAgICAgICAgICAgIDx0ZCBp
ZD10ZDIyPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDIzPgorICAgICAgICAgICAgICAgIDx0
ZCBpZD10ZDI0PgorICAgICAgICAgICAgPHRyIGlkPXRyMz4KKyAgICAgICAgICAgICAgICA8dGQg
aWQ9dGQzMT4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQzMj4KKyAgICAgICAgICAgICAgICA8
dGQgaWQ9dGQzMz4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQzND4KKyAgICAgICAgICAgIDx0
ciBpZD10cjQ+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkNDE+CisgICAgICAgICAgICAgICAg
PHRkIGlkPXRkNDI+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkNDM+CisgICAgICAgICAgICAg
ICAgPHRkIGlkPXRkNDQ+CisgICAgICAgIDwvdGFibGU+CisgICAgPC9kaXY+CisKKyAgICA8c2Ny
aXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlvbiBydW5U
ZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgeworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBlID0ge307CisKKyAgICAgICAgICAg
IC8vIFNldCB1cCBzaG9ydGN1dCBhY2Nlc3MgdG8gZWxlbWVudHMKKyAgICAgICAgICAgIGVbJ2h0
bWwnXSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF07CisgICAgICAg
ICAgICBbJ3NhbmRib3gnLCAndGVzdHRhYmxlJywgJ3RyMScsICd0cjInLCAndHIzJywgJ3RyNCcs
CisgICAgICAgICAgICAgJ3RkMTEnLCAndGQxMicsICd0ZDEzJywgJ3RkMTQnLAorICAgICAgICAg
ICAgICd0ZDIxJywgJ3RkMjInLCAndGQyMycsICd0ZDI0JywKKyAgICAgICAgICAgICAndGQzMScs
ICd0ZDMyJywgJ3RkMzMnLCAndGQzNCcsCisgICAgICAgICAgICAgJ3RkNDEnLCAndGQ0MicsICd0
ZDQzJywgJ3RkNDQnXS5mb3JFYWNoKGZ1bmN0aW9uKGEpIHsKKyAgICAgICAgICAgICAgICBlW2Fd
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSk7CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApOworICAgICAgICAgICAgZGVidWcoJ0NoZWNrIGFy
ZWEgaGl0cyBmdWxseSBpbnNpZGUgdGFibGUgY2VsbHMnKTsKKyAgICAgICAgICAgIGNoZWNrKDEy
NSwgMTI1LCAxMCwgMTAsIDEwLCAxMCwgW2UudGQxMV0pOworICAgICAgICAgICAgY2hlY2soMjc1
LCAxMjUsIDEwLCAxMCwgMTAsIDEwLCBbZS50ZDE0XSk7CisgICAgICAgICAgICBjaGVjaygxNzUs
IDE3NSwgMTAsIDEwLCAxMCwgMTAsIFtlLnRkMjJdKTsKKyAgICAgICAgICAgIGNoZWNrKDEyNSwg
Mjc1LCAxMCwgMTAsIDEwLCAxMCwgW2UudGQ0MV0pOworCisgICAgICAgICAgICBkZWJ1ZygnQ2hl
Y2sgYXJlYSBoaXRzIGFjcm9zcyB0YWJsZSBib3JkZXInKTsKKyAgICAgICAgICAgIGNoZWNrKDkw
LCAxMjUsIDEwLCAyMCwgMTAsIDIwLCBbZS50ZDExLCBlLnRlc3R0YWJsZSwgZS5zYW5kYm94XSk7
CisgICAgICAgICAgICBjaGVjaygyNzUsIDkwLCAyMCwgMTAsIDIwLCAxMCwgW2UudGQxNCwgZS50
ZXN0dGFibGUsIGUuc2FuZGJveF0pOworICAgICAgICAgICAgY2hlY2soMzEwLCAzMTAsIDIwLCAy
MCwgMjAsIDIwLCBbZS50ZDQ0LCBlLnRlc3R0YWJsZSwgZS5zYW5kYm94XSk7CisKKyAgICAgICAg
ICAgIGRlYnVnKCdDaGVjayBhcmVhIGhpdHMgY3Jvc3NpbmcgbmVpZ2hib3VyaW5nIHRhYmxlIGNl
bGxzJyk7CisgICAgICAgICAgICBjaGVjaygxOTAsIDE3NSwgMTAsIDIwLCAxMCwgMjAsIFtlLnRk
MjIsIGUudGQyMywgZS50ZXN0dGFibGVdKTsKKyAgICAgICAgICAgIGNoZWNrKDI2MCwgMjc1LCAx
MCwgMjAsIDEwLCAyMCwgW2UudGQ0MywgZS50ZDQ0LCBlLnRlc3R0YWJsZV0pOworICAgICAgICAg
ICAgY2hlY2soMTc1LCAxOTAsIDIwLCAxMCwgMjAsIDEwLCBbZS50ZDIyLCBlLnRkMzIsIGUudGVz
dHRhYmxlXSk7CisgICAgICAgICAgICBjaGVjaygyNzUsIDI2MCwgMjAsIDEwLCAyMCwgMTAsIFtl
LnRkMzQsIGUudGQ0NCwgZS50ZXN0dGFibGVdKTsKKyAgICAgICAgICAgIGNoZWNrKDE5MCwgMTkw
LCAyMCwgMjAsIDIwLCAyMCwgW2UudGQyMiwgZS50ZDIzLCBlLnRkMzIsIGUudGQzMywgZS50ZXN0
dGFibGVdKTsKKworICAgICAgICAgICAgZGVidWcoJ0NoZWNrIGFyZWEgaGl0cyBjcm9zc2luZyBl
bnRpcmUgdGFibGUgY2VsbHMnKTsKKyAgICAgICAgICAgIGNoZWNrKDIwMCwgMTc1LCAxMCwgOTAs
IDEwLCA5MCwgW2UudGQyMSwgZS50ZDIyLCBlLnRkMjMsIGUudGQyNCwgZS50ZXN0dGFibGVdKTsK
KyAgICAgICAgICAgIGNoZWNrKDE3NSwgMjAwLCA5MCwgMTAsIDkwLCAxMCwgW2UudGQxMiwgZS50
ZDIyLCBlLnRkMzIsIGUudGQ0MiwgZS50ZXN0dGFibGVdKTsKKyAgICAgICAgICAgIGNoZWNrKDE1
MCwgMTUwLCA2MCwgNjAsIDYwLCA2MCwgW2UudGQxMSwgZS50ZDEyLCBlLnRkMTMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRkMjEsIGUudGQyMiwgZS50
ZDIzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGQz
MSwgZS50ZDMyLCBlLnRkMzMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZS50ZXN0dGFibGUsIGUuc2FuZGJveF0pOworICAgICAgICAgICAgY2hlY2soMTI1
LCAzNTAsIDEyMCwgMTAsIDEwLCAxMCwgW2UudGQzMSwgZS50ZDQxLCBlLnRlc3R0YWJsZSwgZS5z
YW5kYm94XSk7CisgICAgICAgICAgICBjaGVjaygzNTAsIDE1MCwgMTAsIDEwLCAxMCwgMTIwLCBb
ZS50ZDEzLCBlLnRkMTQsIGUudGQyMywgZS50ZDI0LCBlLnRlc3R0YWJsZSwgZS5zYW5kYm94XSk7
CisKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisK
KyAgICAgICAgd2luZG93Lm9ubG9hZCA9IHJ1blRlc3Q7CisgICAgPC9zY3JpcHQ+CisKKyAgICA8
c3BhbiBpZD0iY29uc29sZSI+PC9zcGFuPgorICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144048</attachid>
            <date>2012-05-25 05:09:56 -0700</date>
            <delta_ts>2012-05-29 04:32:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86605-20120525140954.patch</filename>
            <type>text/plain</type>
            <size>13044</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4MzEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzM2YjAzNGE5MDI5YmQz
ZmMzNWE1NjBjZTFlODdlMmNiN2I5ZGI4YS4uM2QzOTRiYmNkODMxNWRmYzg3MmNkNGZjZmYwZDRi
M2I0NmU1MzYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTA1LTI1ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFJl
Y3QtYmFzZWQgaGl0dGVzdGluZyBkb2Vzbid0IHdvcmsgaW4gdGFibGVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY2MDUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZnRlciBiaW5hcnkgbG9vay11cCBv
ZiByb3cgYW5kIGNlbGwsIGNvbnRpbnVlIHRvIHRlc3QgZm9sbG93aW5nCisgICAgICAgIGNlbGxz
IHRoYXQgaW50ZXJzZWN0IHdpdGggdGhlIGFyZWEgb2YgdGhlIGhpdC10ZXN0IHBvaW50LgorCisg
ICAgICAgIFRlc3Q6IGZhc3QvZG9tL25vZGVzRnJvbVJlY3QtdGFibGUuaHRtbAorCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KToKKwogMjAxMi0wNS0yMyAgTmljbyBXZWJl
ciAgPHRoYWtpc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtL21hY10gVW5icmVh
ayBwb3B1cCBtZW51cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5jcHAKaW5kZXggN2Y0NGE3NWEwOTNlMDk1NjY0M2E5ZDAxMmU4NWVhYWU2ZGRhYjJl
YS4uZTk2YjAyNTViMDRjMDhlMTZmYjk0ZjdkN2M3NGRiN2FmNTA3ZWFiNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTEzMzksNTIg
KzEzMzksODkgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWwKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIExheW91dFBvaW50IGxvY2F0aW9uID0gcG9pbnRJbkNvbnRhaW5lciAt
IHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKTsKLSAgICBpZiAoc3R5bGUoKS0+aXNGbGlw
cGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewotICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIGxvY2F0aW9uLnNldFkoaGVpZ2h0KCkgLSBs
b2NhdGlvbi55KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2NhdGlvbi5zZXRYKHdp
ZHRoKCkgLSBsb2NhdGlvbi54KCkpOworICAgIExheW91dFJlY3QgaGl0VGVzdFJlY3QgPSByZXN1
bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpOworICAgIGhpdFRlc3RSZWN0Lm1vdmVC
eSgtYWRqdXN0ZWRMb2NhdGlvbik7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHN0YXJ0IGFuZCBl
bmQgY29vcmRpbmF0ZXMgb2YgdGhlIGhpdFRlc3RSZWN0LgorICAgIExheW91dFVuaXQgb2Zmc2V0
U3RhcnRJbkNvbHVtbkRpcmVjdGlvbiwgb2Zmc2V0RW5kSW5Db2x1bW5EaXJlY3Rpb247CisgICAg
aWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKKyAgICAgICAgaWYgKCFz
dHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7CisgICAgICAgICAgICBvZmZz
ZXRTdGFydEluQ29sdW1uRGlyZWN0aW9uID0gaGl0VGVzdFJlY3QueSgpOworICAgICAgICAgICAg
b2Zmc2V0RW5kSW5Db2x1bW5EaXJlY3Rpb24gPSBoaXRUZXN0UmVjdC5tYXhZKCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBvZmZzZXRTdGFydEluQ29sdW1uRGlyZWN0aW9uID0gaGVp
Z2h0KCkgLSBoaXRUZXN0UmVjdC5tYXhZKCk7CisgICAgICAgICAgICBvZmZzZXRFbmRJbkNvbHVt
bkRpcmVjdGlvbiA9IGhlaWdodCgpIC0gaGl0VGVzdFJlY3QueSgpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKCFzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9k
ZSgpKSB7CisgICAgICAgICAgICBvZmZzZXRTdGFydEluQ29sdW1uRGlyZWN0aW9uID0gaGl0VGVz
dFJlY3QueCgpOworICAgICAgICAgICAgb2Zmc2V0RW5kSW5Db2x1bW5EaXJlY3Rpb24gPSBoaXRU
ZXN0UmVjdC5tYXhYKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvZmZzZXRTdGFy
dEluQ29sdW1uRGlyZWN0aW9uID0gd2lkdGgoKSAtIGhpdFRlc3RSZWN0Lm1heFgoKTsKKyAgICAg
ICAgICAgIG9mZnNldEVuZEluQ29sdW1uRGlyZWN0aW9uID0gd2lkdGgoKSAtIGhpdFRlc3RSZWN0
LngoKTsKKyAgICAgICAgfQogICAgIH0KLQotICAgIExheW91dFVuaXQgb2Zmc2V0SW5Db2x1bW5E
aXJlY3Rpb24gPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYXRpb24u
eSgpIDogbG9jYXRpb24ueCgpOwogICAgIAogICAgIHJlY2FsY0NlbGxzSWZOZWVkZWQoKTsKIAot
ICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJvdyB0aGF0IHN0YXJ0cyBhZnRlciBvZmZzZXRJbkNvbHVt
bkRpcmVjdGlvbi4KLSAgICB1bnNpZ25lZCBuZXh0Um93ID0gc3RkOjp1cHBlcl9ib3VuZChtX3Jv
d1Bvcy5iZWdpbigpLCBtX3Jvd1Bvcy5lbmQoKSwgb2Zmc2V0SW5Db2x1bW5EaXJlY3Rpb24pIC0g
bV9yb3dQb3MuYmVnaW4oKTsKKyAgICAvLyBGaW5kIHRoZSBmaXJzdCByb3cgdGhhdCBzdGFydHMg
YWZ0ZXIgb2Zmc2V0U3RhcnRJbkNvbHVtbkRpcmVjdGlvbi4KKyAgICB1bnNpZ25lZCBuZXh0Um93
ID0gc3RkOjp1cHBlcl9ib3VuZChtX3Jvd1Bvcy5iZWdpbigpLCBtX3Jvd1Bvcy5lbmQoKSwgb2Zm
c2V0U3RhcnRJbkNvbHVtbkRpcmVjdGlvbikgLSBtX3Jvd1Bvcy5iZWdpbigpOwogICAgIGlmIChu
ZXh0Um93ID09IG1fcm93UG9zLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8v
IE5vdyBzZXQgaGl0Um93IHRvIHRoZSBpbmRleCBvZiB0aGUgaGl0IHJvdywgb3IgMC4KICAgICB1
bnNpZ25lZCBoaXRSb3cgPSBuZXh0Um93ID4gMCA/IG5leHRSb3cgLSAxIDogMDsKIAogICAgIFZl
Y3RvcjxpbnQ+JiBjb2x1bW5Qb3MgPSB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKTsKLSAgICBM
YXlvdXRVbml0IG9mZnNldEluUm93RGlyZWN0aW9uID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IGxvY2F0aW9uLngoKSA6IGxvY2F0aW9uLnkoKTsKLSAgICBpZiAoIXN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgb2Zmc2V0SW5Sb3dEaXJlY3Rp
b24gPSBjb2x1bW5Qb3NbY29sdW1uUG9zLnNpemUoKSAtIDFdIC0gb2Zmc2V0SW5Sb3dEaXJlY3Rp
b247CisgICAgTGF5b3V0VW5pdCBvZmZzZXRTdGFydEluUm93RGlyZWN0aW9uLCBvZmZzZXRFbmRJ
blJvd0RpcmVjdGlvbjsKKyAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkgeworICAgICAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7Cisg
ICAgICAgICAgICBvZmZzZXRTdGFydEluUm93RGlyZWN0aW9uID0gaGl0VGVzdFJlY3QueCgpOwor
ICAgICAgICAgICAgb2Zmc2V0RW5kSW5Sb3dEaXJlY3Rpb24gPSBoaXRUZXN0UmVjdC5tYXhYKCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvZmZzZXRTdGFydEluUm93RGlyZWN0aW9u
ID0gY29sdW1uUG9zW2NvbHVtblBvcy5zaXplKCkgLSAxXSAtIGhpdFRlc3RSZWN0Lm1heFgoKTsK
KyAgICAgICAgICAgIG9mZnNldEVuZEluUm93RGlyZWN0aW9uID0gY29sdW1uUG9zW2NvbHVtblBv
cy5zaXplKCkgLSAxXSAtIGhpdFRlc3RSZWN0LngoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKKyAgICAg
ICAgICAgIG9mZnNldFN0YXJ0SW5Sb3dEaXJlY3Rpb24gPSBoaXRUZXN0UmVjdC55KCk7CisgICAg
ICAgICAgICBvZmZzZXRFbmRJblJvd0RpcmVjdGlvbiA9IGhpdFRlc3RSZWN0Lm1heFkoKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG9mZnNldFN0YXJ0SW5Sb3dEaXJlY3Rpb24gPSBj
b2x1bW5Qb3NbY29sdW1uUG9zLnNpemUoKSAtIDFdIC0gaGl0VGVzdFJlY3QubWF4WSgpOworICAg
ICAgICAgICAgb2Zmc2V0RW5kSW5Sb3dEaXJlY3Rpb24gPSBjb2x1bW5Qb3NbY29sdW1uUG9zLnNp
emUoKSAtIDFdIC0gaGl0VGVzdFJlY3QueSgpOworICAgICAgICB9CisgICAgfQogCi0gICAgdW5z
aWduZWQgbmV4dENvbHVtbiA9IHN0ZDo6bG93ZXJfYm91bmQoY29sdW1uUG9zLmJlZ2luKCksIGNv
bHVtblBvcy5lbmQoKSwgb2Zmc2V0SW5Sb3dEaXJlY3Rpb24pIC0gY29sdW1uUG9zLmJlZ2luKCk7
CisgICAgdW5zaWduZWQgbmV4dENvbHVtbiA9IHN0ZDo6bG93ZXJfYm91bmQoY29sdW1uUG9zLmJl
Z2luKCksIGNvbHVtblBvcy5lbmQoKSwgb2Zmc2V0U3RhcnRJblJvd0RpcmVjdGlvbikgLSBjb2x1
bW5Qb3MuYmVnaW4oKTsKICAgICBpZiAobmV4dENvbHVtbiA9PSBjb2x1bW5Qb3Muc2l6ZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQgaGl0Q29sdW1uID0gbmV4dENvbHVt
biA+IDAgPyBuZXh0Q29sdW1uIC0gMSA6IDA7Ci0KLSAgICBDZWxsU3RydWN0JiBjdXJyZW50ID0g
Y2VsbEF0KGhpdFJvdywgaGl0Q29sdW1uKTsKLQotICAgIC8vIElmIHRoZSBjZWxsIGlzIGVtcHR5
LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8KLSAgICBpZiAoIWN1cnJlbnQuaGFzQ2VsbHMoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvIHsKKyAgICAgICAgdW5zaWduZWQgaGl0Q29sdW1u
ID0gbmV4dENvbHVtbiA+IDAgPyBuZXh0Q29sdW1uIC0gMSA6IDA7CisgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgIENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBjZWxsQXQoaGl0Um93LCBoaXRDb2x1bW4p
OworCisgICAgICAgICAgICAvLyBJZiB0aGUgY2VsbCBpcyBlbXB0eSwgdGhlcmUncyBub3RoaW5n
IHRvIGRvCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuaGFzQ2VsbHMoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGN1cnJl
bnQuY2VsbHMuc2l6ZSgpIDsgaTsgKSB7CisgICAgICAgICAgICAgICAgLS1pOworICAgICAgICAg
ICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IGN1cnJlbnQuY2VsbHNbaV07CisgICAgICAg
ICAgICAgICAgTGF5b3V0UG9pbnQgY2VsbFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlRm9yQ2hp
bGQoY2VsbCwgYWRqdXN0ZWRMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19j
YXN0PFJlbmRlck9iamVjdCo+KGNlbGwpLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBv
aW50SW5Db250YWluZXIsIGNlbGxQb2ludCwgYWN0aW9uKSkgeworICAgICAgICAgICAgICAgICAg
ICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9MYXlvdXRQb2ludChwb2ludEluQ29udGFp
bmVyIC0gY2VsbFBvaW50KSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcmVzdWx0Lmlz
UmVjdEJhc2VkVGVzdCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgKyto
aXRDb2x1bW47CisgICAgICAgIH0gd2hpbGUgKGhpdENvbHVtbiA8IChjb2x1bW5Qb3Muc2l6ZSgp
IC0gMSkgJiYgY29sdW1uUG9zW2hpdENvbHVtbl0gPD0gb2Zmc2V0RW5kSW5Sb3dEaXJlY3Rpb24p
OworICAgICAgICBpZiAoIXJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICArK2hpdFJvdzsKKyAgICB9IHdoaWxlIChoaXRSb3cgPCAobV9yb3dQb3Mu
c2l6ZSgpIC0gMSkgJiYgbV9yb3dQb3NbaGl0Um93XSA8PSBvZmZzZXRFbmRJbkNvbHVtbkRpcmVj
dGlvbik7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBjdXJyZW50LmNlbGxzLnNpemUoKSA7IGk7
ICkgewotICAgICAgICAtLWk7Ci0gICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IGN1cnJl
bnQuY2VsbHNbaV07Ci0gICAgICAgIExheW91dFBvaW50IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0
aW5nTW9kZUZvckNoaWxkKGNlbGwsIGFkanVzdGVkTG9jYXRpb24pOwotICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY2VsbCktPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3Vs
dCwgcG9pbnRJbkNvbnRhaW5lciwgY2VsbFBvaW50LCBhY3Rpb24pKSB7Ci0gICAgICAgICAgICB1
cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9MYXlvdXRQb2ludChwb2ludEluQ29udGFpbmVy
IC0gY2VsbFBvaW50KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0KICAgICByZXR1cm4gZmFsc2U7Ci0KIH0KIAogdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJl
bW92ZUNhY2hlZENvbGxhcHNlZEJvcmRlcnMoY29uc3QgUmVuZGVyVGFibGVDZWxsKiBjZWxsKQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDAzYjI0NzRmNTM5MTE3OWRjOTViMGRhYzNiNTk1NTc1ZTAxYjM4MGUuLjEzNTcwMmJj
ZWNhZWM3MWFhYjhiODc2MDc5OTQ3NDNmNzg2ZjNiMTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxMi0wNS0yNSAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNv
bT4KKworICAgICAgICBSZWN0LWJhc2VkIGhpdHRlc3RpbmcgZG9lc24ndCB3b3JrIGluIHRhYmxl
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2NjA1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0
L2RvbS9ub2Rlc0Zyb21SZWN0LXRhYmxlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10YWJsZS5odG1sOiBBZGRlZC4KKwogMjAxMi0wNS0yMyAg
S2FuZ2lsIEhhbiAgPGthbmdpbC5oYW5Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF1bRFJU
XSBGaXggV2ViQ29yZSBsaWJyYXJ5IHBhdGggYW5kIHJlYmFzZWxpbmUgcmVzdWx0CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LXRhYmxlLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtdGFibGUtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY0YjkwYWZiYWFhYzk2Zjk3OWQxNDlmNWY5NzgxZmE1ODJhMDA1NTMKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LXRhYmxl
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI1IEBACitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK0NoZWNrIGFyZWEgaGl0cyBmdWxseSBpbnNpZGUgdGFi
bGUgY2VsbHMKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxs
IGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91
bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK0NoZWNr
IGFyZWEgaGl0cyBhY3Jvc3MgdGFibGUgYm9yZGVyCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZv
dW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNT
IEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitDaGVjayBhcmVhIGhpdHMgY3Jvc3Np
bmcgbmVpZ2hib3VyaW5nIHRhYmxlIGNlbGxzCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5k
IGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFs
bCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZv
dW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitDaGVj
ayBhcmVhIGhpdHMgY3Jvc3NpbmcgZW50aXJlIHRhYmxlIGNlbGxzCitQQVNTIEFsbCBjb3JyZWN0
IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciBy
ZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3Jy
ZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZv
ciByZWN0CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3Qt
dGFibGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtdGFibGUuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hZWIxNTQwMWZhMDZjMTJkOTJhYzcyNDRkMzNlYzUwOTlmZmYwYWRkCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10YWJs
ZS5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkRvY3VtZW50
Ojpub2Rlc0Zyb21SZWN0IDogQ1NTIHNjYWxlIHRyYW5zZm9ybXMgLSBidWcgODU3OTI8L3RpdGxl
PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICAjc2FuZGJveCB7CisgICAgICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgbGVmdDogMHB4OworICAgICAgICB0b3A6IDBweDsKKyAg
ICAgICAgd2lkdGg6IDYwMHB4OworICAgICAgICBoZWlnaHQ6IDgwMHB4OworICAgIH0KKyAgICAj
dGVzdHRhYmxlIHsKKyAgICAgICAgbWFyZ2luOiAxMDBweDsKKyAgICAgICAgd2lkdGg6IDIwMHB4
OworICAgICAgICBoZWlnaHQ6IDIwMHB4OworICAgIH0KKzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0i
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IGlk
PSJib2R5Ij4KKyAgICA8ZGl2IGlkPXNhbmRib3g+CisgICAgICAgIDx0YWJsZSBpZD10ZXN0dGFi
bGU+CisgICAgICAgICAgICA8dHIgaWQ9dHIxPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDEx
PgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDEyPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10
ZDEzPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDE0PgorICAgICAgICAgICAgPHRyIGlkPXRy
Mj4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQyMT4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9
dGQyMj4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQyMz4KKyAgICAgICAgICAgICAgICA8dGQg
aWQ9dGQyND4KKyAgICAgICAgICAgIDx0ciBpZD10cjM+CisgICAgICAgICAgICAgICAgPHRkIGlk
PXRkMzE+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkMzI+CisgICAgICAgICAgICAgICAgPHRk
IGlkPXRkMzM+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkMzQ+CisgICAgICAgICAgICA8dHIg
aWQ9dHI0PgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDQxPgorICAgICAgICAgICAgICAgIDx0
ZCBpZD10ZDQyPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDQzPgorICAgICAgICAgICAgICAg
IDx0ZCBpZD10ZDQ0PgorICAgICAgICA8L3RhYmxlPgorICAgIDwvZGl2PgorCisgICAgPHNjcmlw
dCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gcnVuVGVz
dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgZSA9IHt9OworCisgICAgICAgICAgICAv
LyBTZXQgdXAgc2hvcnRjdXQgYWNjZXNzIHRvIGVsZW1lbnRzCisgICAgICAgICAgICBlWydodG1s
J10gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdOworICAgICAgICAg
ICAgWydzYW5kYm94JywgJ3Rlc3R0YWJsZScsICd0cjEnLCAndHIyJywgJ3RyMycsICd0cjQnLAor
ICAgICAgICAgICAgICd0ZDExJywgJ3RkMTInLCAndGQxMycsICd0ZDE0JywKKyAgICAgICAgICAg
ICAndGQyMScsICd0ZDIyJywgJ3RkMjMnLCAndGQyNCcsCisgICAgICAgICAgICAgJ3RkMzEnLCAn
dGQzMicsICd0ZDMzJywgJ3RkMzQnLAorICAgICAgICAgICAgICd0ZDQxJywgJ3RkNDInLCAndGQ0
MycsICd0ZDQ0J10uZm9yRWFjaChmdW5jdGlvbihhKSB7CisgICAgICAgICAgICAgICAgZVthXSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTsKKyAgICAgICAgICAgIGRlYnVnKCdDaGVjayBhcmVh
IGhpdHMgZnVsbHkgaW5zaWRlIHRhYmxlIGNlbGxzJyk7CisgICAgICAgICAgICBjaGVjaygxMjUs
IDEyNSwgMTAsIDEwLCAxMCwgMTAsIFtlLnRkMTFdKTsKKyAgICAgICAgICAgIGNoZWNrKDI3NSwg
MTI1LCAxMCwgMTAsIDEwLCAxMCwgW2UudGQxNF0pOworICAgICAgICAgICAgY2hlY2soMTc1LCAx
NzUsIDEwLCAxMCwgMTAsIDEwLCBbZS50ZDIyXSk7CisgICAgICAgICAgICBjaGVjaygxMjUsIDI3
NSwgMTAsIDEwLCAxMCwgMTAsIFtlLnRkNDFdKTsKKworICAgICAgICAgICAgZGVidWcoJ0NoZWNr
IGFyZWEgaGl0cyBhY3Jvc3MgdGFibGUgYm9yZGVyJyk7CisgICAgICAgICAgICBjaGVjayg5MCwg
MTI1LCAxMCwgMjAsIDEwLCAyMCwgW2UudGQxMSwgZS50ZXN0dGFibGUsIGUuc2FuZGJveF0pOwor
ICAgICAgICAgICAgY2hlY2soMjc1LCA5MCwgMjAsIDEwLCAyMCwgMTAsIFtlLnRkMTQsIGUudGVz
dHRhYmxlLCBlLnNhbmRib3hdKTsKKyAgICAgICAgICAgIGNoZWNrKDMxMCwgMzEwLCAyMCwgMjAs
IDIwLCAyMCwgW2UudGQ0NCwgZS50ZXN0dGFibGUsIGUuc2FuZGJveF0pOworCisgICAgICAgICAg
ICBkZWJ1ZygnQ2hlY2sgYXJlYSBoaXRzIGNyb3NzaW5nIG5laWdoYm91cmluZyB0YWJsZSBjZWxs
cycpOworICAgICAgICAgICAgY2hlY2soMTkwLCAxNzUsIDEwLCAyMCwgMTAsIDIwLCBbZS50ZDIy
LCBlLnRkMjMsIGUudGVzdHRhYmxlXSk7CisgICAgICAgICAgICBjaGVjaygyNjAsIDI3NSwgMTAs
IDIwLCAxMCwgMjAsIFtlLnRkNDMsIGUudGQ0NCwgZS50ZXN0dGFibGVdKTsKKyAgICAgICAgICAg
IGNoZWNrKDE3NSwgMTkwLCAyMCwgMTAsIDIwLCAxMCwgW2UudGQyMiwgZS50ZDMyLCBlLnRlc3R0
YWJsZV0pOworICAgICAgICAgICAgY2hlY2soMjc1LCAyNjAsIDIwLCAxMCwgMjAsIDEwLCBbZS50
ZDM0LCBlLnRkNDQsIGUudGVzdHRhYmxlXSk7CisgICAgICAgICAgICBjaGVjaygxOTAsIDE5MCwg
MjAsIDIwLCAyMCwgMjAsIFtlLnRkMjIsIGUudGQyMywgZS50ZDMyLCBlLnRkMzMsIGUudGVzdHRh
YmxlXSk7CisKKyAgICAgICAgICAgIGRlYnVnKCdDaGVjayBhcmVhIGhpdHMgY3Jvc3NpbmcgZW50
aXJlIHRhYmxlIGNlbGxzJyk7CisgICAgICAgICAgICBjaGVjaygyMDAsIDE3NSwgMTAsIDkwLCAx
MCwgOTAsIFtlLnRkMjEsIGUudGQyMiwgZS50ZDIzLCBlLnRkMjQsIGUudGVzdHRhYmxlXSk7Cisg
ICAgICAgICAgICBjaGVjaygxNzUsIDIwMCwgOTAsIDEwLCA5MCwgMTAsIFtlLnRkMTIsIGUudGQy
MiwgZS50ZDMyLCBlLnRkNDIsIGUudGVzdHRhYmxlXSk7CisgICAgICAgICAgICBjaGVjaygxNTAs
IDE1MCwgNjAsIDYwLCA2MCwgNjAsIFtlLnRkMTEsIGUudGQxMiwgZS50ZDEzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50ZDIxLCBlLnRkMjIsIGUudGQy
MywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRkMzEs
IGUudGQzMiwgZS50ZDMzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGUudGVzdHRhYmxlLCBlLnNhbmRib3hdKTsKKyAgICAgICAgICAgIGNoZWNrKDEyNSwg
MzUwLCAxMjAsIDEwLCAxMCwgMTAsIFtlLnRkMzEsIGUudGQ0MSwgZS50ZXN0dGFibGUsIGUuc2Fu
ZGJveF0pOworICAgICAgICAgICAgY2hlY2soMzUwLCAxNTAsIDEwLCAxMCwgMTAsIDEyMCwgW2Uu
dGQxMywgZS50ZDE0LCBlLnRkMjMsIGUudGQyNCwgZS50ZXN0dGFibGUsIGUuc2FuZGJveF0pOwor
CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHdpbmRvdy5vbmxvYWQgPSBydW5UZXN0OworICAgIDwvc2NyaXB0PgorCisgICAgPHNw
YW4gaWQ9ImNvbnNvbGUiPjwvc3Bhbj4KKyAgICA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144515</attachid>
            <date>2012-05-29 04:32:27 -0700</date>
            <delta_ts>2012-05-30 01:55:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86605-20120529133225.patch</filename>
            <type>text/plain</type>
            <size>13637</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQ5ZGZjNzNiNzMxZDZh
NzI4Yjg5MWU0MWNlNTQ5MWViYjg4NDE3OC4uZjllMjY4N2I2ZWZlNDA3MTI2YTZkZTI4ZGYyOWNk
ZGVjNzE5Yzc5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTA1LTI1ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFJl
Y3QtYmFzZWQgaGl0dGVzdGluZyBkb2Vzbid0IHdvcmsgaW4gdGFibGVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY2MDUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZXhpc3RpbmcgY29kZSBvbmx5
IHBlcmZvcm1lZCBhIHNpbmdsZSBiaW5hcnkgbG9va3VwIGZvciB0aGUgY2VudHJhbAorICAgICAg
ICBoaXQtdGVzdCBwb2ludC4gVGhpcyBtZWFudCBhcmVhLWJhc2VkIGhpdC10ZXN0aW5nIGRpZCBu
b3Qgd29yayBhY3Jvc3MKKyAgICAgICAgdGFibGUtY2VsbCBib3JkZXJzLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcGVyZm9ybXMgYSBiaW5hcnkgbG9va3VwIGZvciB0aGUgdG9wLWxlZnQgY29ybmVy
IG9mIHRoZSBoaXQtCisgICAgICAgIHRlc3QgcmVjdCwgYW5kIGhpdC10ZXN0IGFsbCBmb2xsb3dp
bmcgcm93cyB1bnRpbCB0aGUgYm90dG9tIG9mIHRoZSBoaXQtCisgICAgICAgIHRlc3QgcmVjdCBp
cyBmb3VuZCwgYW5kIGFsbCBmb2xsb3dpbmcgY29sdW1ucyB1bnRpbCB0aGUgcmlnaHQgZWRnZSBv
ZiB0aGUKKyAgICAgICAgaGl0LXRlc3QgcmVjdCBpcyBmb3VuZC4KKworICAgICAgICBGb3IgcG9p
bnQtYmFzZWQgaGl0LXRlc3Rpbmcgd2Ugc3RpbGwgb25seSB0ZXN0IGEgc2luZ2xlIGNvbHVtbiBp
biBhCisgICAgICAgIHNpbmdsZSByb3cuCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vbm9kZXNG
cm9tUmVjdC10YWJsZS5odG1sCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9p
bnQpOgorCiAyMDEyLTA1LTI5ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBSRUdSRVNTSU9OOiBsb2FkIGhlYXAgc25hcHNo
b3QgZG9lc24ndCB3b3JrLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcAppbmRleCBkYjI1ZTgxNDk5NTc0MTVjZDllMjNjMzAyOGExNTMzNmFmMGFh
ZGFlLi42NDI4MGU5YTU0MjA0YjQ5MzhmN2M5ZGVlODkwNDZlNThhNmQxZjY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMTM0MSw1
MiArMTM0MSw4MyBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgTGF5b3V0UG9pbnQgbG9jYXRpb24gPSBwb2ludEluQ29udGFpbmVy
IC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pOwotICAgIGlmIChzdHlsZSgpLT5pc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgbG9jYXRpb24uc2V0WShoZWlnaHQoKSAt
IGxvY2F0aW9uLnkoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvY2F0aW9uLnNldFgo
d2lkdGgoKSAtIGxvY2F0aW9uLngoKSk7CisgICAgTGF5b3V0UmVjdCBoaXRUZXN0UmVjdCA9IHJl
c3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcik7CisgICAgaGl0VGVzdFJlY3QubW92
ZUJ5KC1hZGp1c3RlZExvY2F0aW9uKTsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RhcnQgYW5k
IGVuZCBjb29yZGluYXRlcyBvZiB0aGUgaGl0VGVzdFJlY3QuCisgICAgTGF5b3V0VW5pdCBvZmZz
ZXRTdGFydEluQ29sdW1uRGlyZWN0aW9uOworICAgIExheW91dFVuaXQgb2Zmc2V0RW5kSW5Db2x1
bW5EaXJlY3Rpb247CisgICAgTGF5b3V0UmVjdCBmbGlwcGVkSGl0VGVzdFJlY3QgPSBoaXRUZXN0
UmVjdDsKKyAgICBmbGlwRm9yV3JpdGluZ01vZGUoZmxpcHBlZEhpdFRlc3RSZWN0KTsKKyAgICBp
ZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgeworICAgICAgICBvZmZzZXRT
dGFydEluQ29sdW1uRGlyZWN0aW9uID0gZmxpcHBlZEhpdFRlc3RSZWN0LnkoKTsKKyAgICAgICAg
b2Zmc2V0RW5kSW5Db2x1bW5EaXJlY3Rpb24gPSBmbGlwcGVkSGl0VGVzdFJlY3QubWF4WSgpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIG9mZnNldFN0YXJ0SW5Db2x1bW5EaXJlY3Rpb24gPSBmbGlw
cGVkSGl0VGVzdFJlY3QueCgpOworICAgICAgICBvZmZzZXRFbmRJbkNvbHVtbkRpcmVjdGlvbiA9
IGZsaXBwZWRIaXRUZXN0UmVjdC5tYXhYKCk7CiAgICAgfQotCi0gICAgTGF5b3V0VW5pdCBvZmZz
ZXRJbkNvbHVtbkRpcmVjdGlvbiA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBsb2NhdGlvbi55KCkgOiBsb2NhdGlvbi54KCk7CiAgICAgCisgICAgVmVjdG9yPGludD4mIGNv
bHVtblBvcyA9IHRhYmxlKCktPmNvbHVtblBvc2l0aW9ucygpOworICAgIExheW91dFVuaXQgb2Zm
c2V0U3RhcnRJblJvd0RpcmVjdGlvbjsKKyAgICBMYXlvdXRVbml0IG9mZnNldEVuZEluUm93RGly
ZWN0aW9uOworICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Cisg
ICAgICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKKyAgICAgICAg
ICAgIG9mZnNldFN0YXJ0SW5Sb3dEaXJlY3Rpb24gPSBoaXRUZXN0UmVjdC54KCk7CisgICAgICAg
ICAgICBvZmZzZXRFbmRJblJvd0RpcmVjdGlvbiA9IGhpdFRlc3RSZWN0Lm1heFgoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG9mZnNldFN0YXJ0SW5Sb3dEaXJlY3Rpb24gPSBjb2x1
bW5Qb3NbY29sdW1uUG9zLnNpemUoKSAtIDFdIC0gaGl0VGVzdFJlY3QubWF4WCgpOworICAgICAg
ICAgICAgb2Zmc2V0RW5kSW5Sb3dEaXJlY3Rpb24gPSBjb2x1bW5Qb3NbY29sdW1uUG9zLnNpemUo
KSAtIDFdIC0gaGl0VGVzdFJlY3QueCgpOworICAgICAgICB9CisgICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKKyAgICAgICAgICAg
IG9mZnNldFN0YXJ0SW5Sb3dEaXJlY3Rpb24gPSBoaXRUZXN0UmVjdC55KCk7CisgICAgICAgICAg
ICBvZmZzZXRFbmRJblJvd0RpcmVjdGlvbiA9IGhpdFRlc3RSZWN0Lm1heFkoKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG9mZnNldFN0YXJ0SW5Sb3dEaXJlY3Rpb24gPSBjb2x1bW5Q
b3NbY29sdW1uUG9zLnNpemUoKSAtIDFdIC0gaGl0VGVzdFJlY3QubWF4WSgpOworICAgICAgICAg
ICAgb2Zmc2V0RW5kSW5Sb3dEaXJlY3Rpb24gPSBjb2x1bW5Qb3NbY29sdW1uUG9zLnNpemUoKSAt
IDFdIC0gaGl0VGVzdFJlY3QueSgpOworICAgICAgICB9CisgICAgfQorCiAgICAgcmVjYWxjQ2Vs
bHNJZk5lZWRlZCgpOwogCi0gICAgLy8gRmluZCB0aGUgZmlyc3Qgcm93IHRoYXQgc3RhcnRzIGFm
dGVyIG9mZnNldEluQ29sdW1uRGlyZWN0aW9uLgotICAgIHVuc2lnbmVkIG5leHRSb3cgPSBzdGQ6
OnVwcGVyX2JvdW5kKG1fcm93UG9zLmJlZ2luKCksIG1fcm93UG9zLmVuZCgpLCBvZmZzZXRJbkNv
bHVtbkRpcmVjdGlvbikgLSBtX3Jvd1Bvcy5iZWdpbigpOworICAgIC8vIEZpbmQgdGhlIGZpcnN0
IHJvdyB0aGF0IHN0YXJ0cyBhZnRlciBvZmZzZXRTdGFydEluQ29sdW1uRGlyZWN0aW9uLgorICAg
IHVuc2lnbmVkIG5leHRSb3cgPSBzdGQ6OnVwcGVyX2JvdW5kKG1fcm93UG9zLmJlZ2luKCksIG1f
cm93UG9zLmVuZCgpLCBvZmZzZXRTdGFydEluQ29sdW1uRGlyZWN0aW9uKSAtIG1fcm93UG9zLmJl
Z2luKCk7CiAgICAgaWYgKG5leHRSb3cgPT0gbV9yb3dQb3Muc2l6ZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgLy8gTm93IHNldCBoaXRSb3cgdG8gdGhlIGluZGV4IG9mIHRoZSBoaXQg
cm93LCBvciAwLgotICAgIHVuc2lnbmVkIGhpdFJvdyA9IG5leHRSb3cgPiAwID8gbmV4dFJvdyAt
IDEgOiAwOwogCi0gICAgVmVjdG9yPGludD4mIGNvbHVtblBvcyA9IHRhYmxlKCktPmNvbHVtblBv
c2l0aW9ucygpOwotICAgIExheW91dFVuaXQgb2Zmc2V0SW5Sb3dEaXJlY3Rpb24gPSBzdHlsZSgp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYXRpb24ueCgpIDogbG9jYXRpb24ueSgp
OwotICAgIGlmICghc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICBv
ZmZzZXRJblJvd0RpcmVjdGlvbiA9IGNvbHVtblBvc1tjb2x1bW5Qb3Muc2l6ZSgpIC0gMV0gLSBv
ZmZzZXRJblJvd0RpcmVjdGlvbjsKLQotICAgIHVuc2lnbmVkIG5leHRDb2x1bW4gPSBzdGQ6Omxv
d2VyX2JvdW5kKGNvbHVtblBvcy5iZWdpbigpLCBjb2x1bW5Qb3MuZW5kKCksIG9mZnNldEluUm93
RGlyZWN0aW9uKSAtIGNvbHVtblBvcy5iZWdpbigpOworICAgIHVuc2lnbmVkIG5leHRDb2x1bW4g
PSBzdGQ6Omxvd2VyX2JvdW5kKGNvbHVtblBvcy5iZWdpbigpLCBjb2x1bW5Qb3MuZW5kKCksIG9m
ZnNldFN0YXJ0SW5Sb3dEaXJlY3Rpb24pIC0gY29sdW1uUG9zLmJlZ2luKCk7CiAgICAgaWYgKG5l
eHRDb2x1bW4gPT0gY29sdW1uUG9zLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHVuc2lnbmVkIGhpdENvbHVtbiA9IG5leHRDb2x1bW4gPiAwID8gbmV4dENvbHVtbiAtIDEgOiAw
OwogCi0gICAgQ2VsbFN0cnVjdCYgY3VycmVudCA9IGNlbGxBdChoaXRSb3csIGhpdENvbHVtbik7
CisgICAgLy8gTm93IHNldCBoaXRSb3cgdG8gdGhlIGluZGV4IG9mIHRoZSBoaXQgcm93LCBvciAw
LgorICAgIHVuc2lnbmVkIGhpdFJvdyA9IG5leHRSb3cgPiAwID8gbmV4dFJvdyAtIDEgOiAwOwor
ICAgIGZvciAoOyBoaXRSb3cgPCAobV9yb3dQb3Muc2l6ZSgpIC0gMSkgJiYgbV9yb3dQb3NbaGl0
Um93XSA8PSBvZmZzZXRFbmRJbkNvbHVtbkRpcmVjdGlvbjsgKytoaXRSb3cpIHsKIAotICAgIC8v
IElmIHRoZSBjZWxsIGlzIGVtcHR5LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8KLSAgICBpZiAoIWN1
cnJlbnQuaGFzQ2VsbHMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1bnNpZ25l
ZCBoaXRDb2x1bW4gPSBuZXh0Q29sdW1uID4gMCA/IG5leHRDb2x1bW4gLSAxIDogMDsKKyAgICAg
ICAgZm9yICg7IGhpdENvbHVtbiA8IChjb2x1bW5Qb3Muc2l6ZSgpIC0gMSkgJiYgY29sdW1uUG9z
W2hpdENvbHVtbl0gPD0gb2Zmc2V0RW5kSW5Sb3dEaXJlY3Rpb247ICsraGl0Q29sdW1uKSB7Cisg
ICAgICAgICAgICBDZWxsU3RydWN0JiBjdXJyZW50ID0gY2VsbEF0KGhpdFJvdywgaGl0Q29sdW1u
KTsKKworICAgICAgICAgICAgLy8gSWYgdGhlIGNlbGwgaXMgZW1wdHksIHRoZXJlJ3Mgbm90aGlu
ZyB0byBkbworICAgICAgICAgICAgaWYgKCFjdXJyZW50Lmhhc0NlbGxzKCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBjdXJyZW50LmNlbGxzLnNp
emUoKSA7IGk7ICkgewotICAgICAgICAtLWk7Ci0gICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2Vs
bCA9IGN1cnJlbnQuY2VsbHNbaV07Ci0gICAgICAgIExheW91dFBvaW50IGNlbGxQb2ludCA9IGZs
aXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKGNlbGwsIGFkanVzdGVkTG9jYXRpb24pOwotICAgICAg
ICBpZiAoc3RhdGljX2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY2VsbCktPm5vZGVBdFBvaW50KHJlcXVl
c3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2VsbFBvaW50LCBhY3Rpb24pKSB7Ci0gICAg
ICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9MYXlvdXRQb2ludChwb2ludElu
Q29udGFpbmVyIC0gY2VsbFBvaW50KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGN1cnJlbnQuY2VsbHMuc2l6ZSgpIDsgaTsgKSB7Cisg
ICAgICAgICAgICAgICAgLS1pOworICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2Vs
bCA9IGN1cnJlbnQuY2VsbHNbaV07CisgICAgICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2VsbFBv
aW50ID0gZmxpcEZvcldyaXRpbmdNb2RlRm9yQ2hpbGQoY2VsbCwgYWRqdXN0ZWRMb2NhdGlvbik7
CisgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PFJlbmRlck9iamVjdCo+KGNlbGwpLT5u
b2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNlbGxQb2ludCwg
YWN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3Vs
dCwgdG9MYXlvdXRQb2ludChwb2ludEluQ29udGFpbmVyIC0gY2VsbFBvaW50KSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICghcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGlmICghcmVzdWx0LmlzUmVjdEJhc2Vk
VGVzdCgpKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiBmYWxzZTsKIAor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJlbW92ZUNh
Y2hlZENvbGxhcHNlZEJvcmRlcnMoY29uc3QgUmVuZGVyVGFibGVDZWxsKiBjZWxsKQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10YWJsZS1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LXRhYmxlLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kMTViMjk5OGI0NjNlYTExZDgzMzg4MjQxYjMxZWRhYjJlNjVkYTg0Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10YWJs
ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzOCBAQAorRG9jdW1lbnQ6Om5vZGVzRnJvbVJlY3Qg
OiBSZWN0LWJhc2VkIGhpdC10ZXN0aW5nIG9uIHRhYmxlcyAtIGJ1ZyA4NjYwNQorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCitDaGVjayBhcmVhIGhpdHMgZnVsbHkgaW5zaWRlIHRhYmxlIGNlbGxz
CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0
IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciBy
ZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitDaGVjayBhcmVhIGhp
dHMgYWNyb3NzIHRhYmxlIGJvcmRlcgorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3Ig
cmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29y
cmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorQ2hlY2sgYXJlYSBoaXRzIGNyb3NzaW5nIG5laWdo
Ym91cmluZyB0YWJsZSBjZWxscworUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVj
dAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29ycmVj
dCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3Ig
cmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorQ2hlY2sgYXJlYSBo
aXRzIGNyb3NzaW5nIGVudGlyZSB0YWJsZSBjZWxscworUEFTUyBBbGwgY29ycmVjdCBub2RlcyBm
b3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFT
UyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2Rl
cyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAor
Q2hlY2sgYXJlYSBoaXRzIG9uIHJpZ2h0LXRvLWxlZnQgdGFibGUKK1BBU1MgQWxsIGNvcnJlY3Qg
bm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJl
Y3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK0NoZWNrIGFyZWEgaGl0
cyBvbiBmbGlwcGVkICh0Yi1scikgdGFibGUKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQg
Zm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxs
IGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10YWJsZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
bm9kZXNGcm9tUmVjdC10YWJsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlYjZlNjhhYzY4YzQwN2E2ZWQ1
YTZkYjYxYWNkMzFiYWQ1YjcyNTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9ub2Rlc0Zyb21SZWN0LXRhYmxlLmh0bWwKQEAgLTAsMCArMSwxMjEgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5Eb2N1bWVudDo6bm9kZXNGcm9tUmVjdCA6
IFJlY3QtYmFzZWQgaGl0LXRlc3Rpbmcgb24gdGFibGVzIC0gYnVnIDg2NjA1PC90aXRsZT4KKzxz
dHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgI3NhbmRib3ggeworICAgICAgICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgICAgICAgIGxlZnQ6IDBweDsKKyAgICAgICAgdG9wOiAwcHg7CisgICAgICAg
IHdpZHRoOiA2MDBweDsKKyAgICAgICAgaGVpZ2h0OiA4MDBweDsKKyAgICB9CisgICAgI3Rlc3R0
YWJsZSB7CisgICAgICAgIG1hcmdpbjogMTAwcHg7CisgICAgICAgIHdpZHRoOiAyMDBweDsKKyAg
ICAgICAgaGVpZ2h0OiAyMDBweDsKKyAgICB9CisgICAgLnJ0bCB7CisgICAgICAgIGRpcmVjdGlv
bjogcnRsOworICAgIH0KKyAgICAudGJsciB7CisgICAgICAgIC13ZWJraXQtd3JpdGluZy1tb2Rl
OiB2ZXJ0aWNhbC1scjsKKyAgICB9Cis8L3N0eWxlPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL25v
ZGVzRnJvbVJlY3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKyAgICA8ZGl2IGlk
PXNhbmRib3g+CisgICAgICAgIDx0YWJsZSBpZD10ZXN0dGFibGU+CisgICAgICAgICAgICA8dHIg
aWQ9dHIxPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDExPgorICAgICAgICAgICAgICAgIDx0
ZCBpZD10ZDEyPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDEzPgorICAgICAgICAgICAgICAg
IDx0ZCBpZD10ZDE0PgorICAgICAgICAgICAgPHRyIGlkPXRyMj4KKyAgICAgICAgICAgICAgICA8
dGQgaWQ9dGQyMT4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQyMj4KKyAgICAgICAgICAgICAg
ICA8dGQgaWQ9dGQyMz4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQyND4KKyAgICAgICAgICAg
IDx0ciBpZD10cjM+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkMzE+CisgICAgICAgICAgICAg
ICAgPHRkIGlkPXRkMzI+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkMzM+CisgICAgICAgICAg
ICAgICAgPHRkIGlkPXRkMzQ+CisgICAgICAgICAgICA8dHIgaWQ9dHI0PgorICAgICAgICAgICAg
ICAgIDx0ZCBpZD10ZDQxPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDQyPgorICAgICAgICAg
ICAgICAgIDx0ZCBpZD10ZDQzPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDQ0PgorICAgICAg
ICA8L3RhYmxlPgorICAgIDwvZGl2PgorCisgICAgPHNjcmlwdD4KKyAgICAgICAgZnVuY3Rpb24g
cnVuVGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKGRvY3VtZW50LnRp
dGxlKTsKKyAgICAgICAgICAgIHZhciBlID0ge307CisKKyAgICAgICAgICAgIC8vIFNldCB1cCBz
aG9ydGN1dCBhY2Nlc3MgdG8gZWxlbWVudHMKKyAgICAgICAgICAgIFsnc2FuZGJveCcsICd0ZXN0
dGFibGUnLCAndHIxJywgJ3RyMicsICd0cjMnLCAndHI0JywKKyAgICAgICAgICAgICAndGQxMScs
ICd0ZDEyJywgJ3RkMTMnLCAndGQxNCcsCisgICAgICAgICAgICAgJ3RkMjEnLCAndGQyMicsICd0
ZDIzJywgJ3RkMjQnLAorICAgICAgICAgICAgICd0ZDMxJywgJ3RkMzInLCAndGQzMycsICd0ZDM0
JywKKyAgICAgICAgICAgICAndGQ0MScsICd0ZDQyJywgJ3RkNDMnLCAndGQ0NCddLmZvckVhY2go
ZnVuY3Rpb24oYSkgeworICAgICAgICAgICAgICAgIGVbYV0gPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZChhKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8o
MCwgMCk7CisgICAgICAgICAgICBkZWJ1ZygnQ2hlY2sgYXJlYSBoaXRzIGZ1bGx5IGluc2lkZSB0
YWJsZSBjZWxscycpOworICAgICAgICAgICAgY2hlY2soMTI1LCAxMjUsIDEwLCAxMCwgMTAsIDEw
LCBbZS50ZDExXSk7CisgICAgICAgICAgICBjaGVjaygyNzUsIDEyNSwgMTAsIDEwLCAxMCwgMTAs
IFtlLnRkMTRdKTsKKyAgICAgICAgICAgIGNoZWNrKDE3NSwgMTc1LCAxMCwgMTAsIDEwLCAxMCwg
W2UudGQyMl0pOworICAgICAgICAgICAgY2hlY2soMTI1LCAyNzUsIDEwLCAxMCwgMTAsIDEwLCBb
ZS50ZDQxXSk7CisKKyAgICAgICAgICAgIGRlYnVnKCdDaGVjayBhcmVhIGhpdHMgYWNyb3NzIHRh
YmxlIGJvcmRlcicpOworICAgICAgICAgICAgY2hlY2soOTAsIDEyNSwgMTAsIDIwLCAxMCwgMjAs
IFtlLnRkMTEsIGUudGVzdHRhYmxlLCBlLnNhbmRib3hdKTsKKyAgICAgICAgICAgIGNoZWNrKDI3
NSwgOTAsIDIwLCAxMCwgMjAsIDEwLCBbZS50ZDE0LCBlLnRlc3R0YWJsZSwgZS5zYW5kYm94XSk7
CisgICAgICAgICAgICBjaGVjaygzMTAsIDMxMCwgMjAsIDIwLCAyMCwgMjAsIFtlLnRkNDQsIGUu
dGVzdHRhYmxlLCBlLnNhbmRib3hdKTsKKworICAgICAgICAgICAgZGVidWcoJ0NoZWNrIGFyZWEg
aGl0cyBjcm9zc2luZyBuZWlnaGJvdXJpbmcgdGFibGUgY2VsbHMnKTsKKyAgICAgICAgICAgIGNo
ZWNrKDE5MCwgMTc1LCAxMCwgMjAsIDEwLCAyMCwgW2UudGQyMiwgZS50ZDIzLCBlLnRlc3R0YWJs
ZV0pOworICAgICAgICAgICAgY2hlY2soMjYwLCAyNzUsIDEwLCAyMCwgMTAsIDIwLCBbZS50ZDQz
LCBlLnRkNDQsIGUudGVzdHRhYmxlXSk7CisgICAgICAgICAgICBjaGVjaygxNzUsIDE5MCwgMjAs
IDEwLCAyMCwgMTAsIFtlLnRkMjIsIGUudGQzMiwgZS50ZXN0dGFibGVdKTsKKyAgICAgICAgICAg
IGNoZWNrKDI3NSwgMjYwLCAyMCwgMTAsIDIwLCAxMCwgW2UudGQzNCwgZS50ZDQ0LCBlLnRlc3R0
YWJsZV0pOworICAgICAgICAgICAgY2hlY2soMTkwLCAxOTAsIDIwLCAyMCwgMjAsIDIwLCBbZS50
ZDIyLCBlLnRkMjMsIGUudGQzMiwgZS50ZDMzLCBlLnRlc3R0YWJsZV0pOworCisgICAgICAgICAg
ICBkZWJ1ZygnQ2hlY2sgYXJlYSBoaXRzIGNyb3NzaW5nIGVudGlyZSB0YWJsZSBjZWxscycpOwor
ICAgICAgICAgICAgY2hlY2soMjAwLCAxNzUsIDEwLCA5MCwgMTAsIDkwLCBbZS50ZDIxLCBlLnRk
MjIsIGUudGQyMywgZS50ZDI0LCBlLnRlc3R0YWJsZV0pOworICAgICAgICAgICAgY2hlY2soMTc1
LCAyMDAsIDkwLCAxMCwgOTAsIDEwLCBbZS50ZDEyLCBlLnRkMjIsIGUudGQzMiwgZS50ZDQyLCBl
LnRlc3R0YWJsZV0pOworICAgICAgICAgICAgY2hlY2soMTUwLCAxNTAsIDYwLCA2MCwgNjAsIDYw
LCBbZS50ZDExLCBlLnRkMTIsIGUudGQxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGUudGQyMSwgZS50ZDIyLCBlLnRkMjMsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50ZDMxLCBlLnRkMzIsIGUudGQzMywgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRlc3R0YWJsZSwg
ZS5zYW5kYm94XSk7CisgICAgICAgICAgICBjaGVjaygxMjUsIDM1MCwgMTIwLCAxMCwgMTAsIDEw
LCBbZS50ZDMxLCBlLnRkNDEsIGUudGVzdHRhYmxlLCBlLnNhbmRib3hdKTsKKyAgICAgICAgICAg
IGNoZWNrKDM1MCwgMTUwLCAxMCwgMTAsIDEwLCAxMjAsIFtlLnRkMTMsIGUudGQxNCwgZS50ZDIz
LCBlLnRkMjQsIGUudGVzdHRhYmxlLCBlLnNhbmRib3hdKTsKKworICAgICAgICAgICAgZGVidWco
J0NoZWNrIGFyZWEgaGl0cyBvbiByaWdodC10by1sZWZ0IHRhYmxlJyk7CisgICAgICAgICAgICBl
Wyd0ZXN0dGFibGUnXS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2RpcmVjdGlvbjogcnRsJyk7Cisg
ICAgICAgICAgICBjaGVjaygyNzUsIDEyNSwgMTAsIDEwLCAxMCwgMTAsIFtlLnRkMTFdKTsKKyAg
ICAgICAgICAgIGNoZWNrKDE3NSwgMTc1LCAxMCwgMTAsIDEwLCAxMCwgW2UudGQyM10pOworICAg
ICAgICAgICAgY2hlY2soMTc1LCAxOTAsIDIwLCAxMCwgMjAsIDEwLCBbZS50ZDIzLCBlLnRkMzMs
IGUudGVzdHRhYmxlXSk7CisKKyAgICAgICAgICAgIGRlYnVnKCdDaGVjayBhcmVhIGhpdHMgb24g
ZmxpcHBlZCAodGItbHIpIHRhYmxlJyk7CisgICAgICAgICAgICBlWyd0ZXN0dGFibGUnXS5zZXRB
dHRyaWJ1dGUoJ3N0eWxlJywgJy13ZWJraXQtd3JpdGluZy1tb2RlOiB2ZXJ0aWNhbC1scicpOwor
ICAgICAgICAgICAgY2hlY2soMjc1LCAxMjUsIDEwLCAxMCwgMTAsIDEwLCBbZS50ZDQxXSk7Cisg
ICAgICAgICAgICBjaGVjaygxMjUsIDI3NSwgMTAsIDEwLCAxMCwgMTAsIFtlLnRkMTRdKTsKKyAg
ICAgICAgICAgIGNoZWNrKDIwMCwgMTc1LCAxMCwgOTAsIDEwLCA5MCwgW2UudGQxMiwgZS50ZDIy
LCBlLnRkMzIsIGUudGQ0MiwgZS50ZXN0dGFibGVdKTsKKworICAgICAgICB9CisKKyAgICAgICAg
d2luZG93Lm9ubG9hZCA9IHJ1blRlc3Q7CisgICAgPC9zY3JpcHQ+CisKKyAgICA8cCBpZD0nZGVz
Y3JpcHRpb24nPjwvcD4KKyAgICA8c3BhbiBpZD0iY29uc29sZSI+PC9zcGFuPgorICAgIDxzY3Jp
cHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144755</attachid>
            <date>2012-05-30 01:55:27 -0700</date>
            <delta_ts>2012-06-01 01:55:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86605-20120530105536.patch</filename>
            <type>text/plain</type>
            <size>14130</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4OTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTRjZjgyZWNlNzk3ZDIy
ZTczODY3OGQ0NmI3MDQ3ZTcwYTc5NjM3Ny4uZTRkZTc3MGY4ZTM3OWM4MDFiMTUwYWRkYjMxOTgw
ZTY0YTA1NWYyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTA1LTI1ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFJl
Y3QtYmFzZWQgaGl0dGVzdGluZyBkb2Vzbid0IHdvcmsgaW4gdGFibGVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY2MDUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZXhpc3RpbmcgY29kZSBvbmx5
IHBlcmZvcm1lZCBhIHNpbmdsZSBiaW5hcnkgbG9va3VwIGZvciB0aGUgY2VudHJhbAorICAgICAg
ICBoaXQtdGVzdCBwb2ludC4gVGhpcyBtZWFudCBhcmVhLWJhc2VkIGhpdC10ZXN0aW5nIGRpZCBu
b3Qgd29yayBhY3Jvc3MKKyAgICAgICAgdGFibGUtY2VsbCBib3JkZXJzLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcGVyZm9ybXMgYSBiaW5hcnkgbG9va3VwIGZvciB0aGUgdG9wLWxlZnQgY29ybmVy
IG9mIHRoZSBoaXQtCisgICAgICAgIHRlc3QgcmVjdCwgYW5kIGhpdC10ZXN0IGFsbCBmb2xsb3dp
bmcgcm93cyB1bnRpbCB0aGUgYm90dG9tIG9mIHRoZSBoaXQtCisgICAgICAgIHRlc3QgcmVjdCBp
cyBmb3VuZCwgYW5kIGFsbCBmb2xsb3dpbmcgY29sdW1ucyB1bnRpbCB0aGUgcmlnaHQgZWRnZSBv
ZiB0aGUKKyAgICAgICAgaGl0LXRlc3QgcmVjdCBpcyBmb3VuZC4KKworICAgICAgICBGb3IgcG9p
bnQtYmFzZWQgaGl0LXRlc3Rpbmcgd2Ugc3RpbGwgb25seSB0ZXN0IGEgc2luZ2xlIGNvbHVtbiBp
biBhCisgICAgICAgIHNpbmdsZSByb3cuCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vbm9kZXNG
cm9tUmVjdC10YWJsZS5odG1sCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9p
bnQpOgorCiAyMDEyLTA1LTMwICBNaWtlIExhd3RoZXIgIDxtaWtlbGF3dGhlckBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgQ1NTMyBjYWxjOiBJbXBsZW1lbnQgQ1NTT00gc3VwcG9ydApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAppbmRleCBkYjI1
ZTgxNDk5NTc0MTVjZDllMjNjMzAyOGExNTMzNmFmMGFhZGFlLi40OTI0YjBmYWNjNDc4MDZlOWVm
MzJiMTFlNGE0MjQwM2NkOWMwOTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMTM0MSw1MiArMTM0MSw3OSBAQCBib29sIFJlbmRl
clRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgTGF5b3V0
UG9pbnQgbG9jYXRpb24gPSBwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFkanVzdGVk
TG9jYXRpb24pOwotICAgIGlmIChzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgp
KSB7Ci0gICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAg
ICAgICAgICAgbG9jYXRpb24uc2V0WShoZWlnaHQoKSAtIGxvY2F0aW9uLnkoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGxvY2F0aW9uLnNldFgod2lkdGgoKSAtIGxvY2F0aW9uLngoKSk7
CisgICAgTGF5b3V0UmVjdCBoaXRUZXN0UmVjdCA9IHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJ
bkNvbnRhaW5lcik7CisgICAgaGl0VGVzdFJlY3QubW92ZUJ5KC1hZGp1c3RlZExvY2F0aW9uKTsK
KworICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RhcnQgYW5kIGVuZCBjb29yZGluYXRlcyBvZiB0aGUg
aGl0VGVzdFJlY3QuCisgICAgTGF5b3V0VW5pdCBvZmZzZXRTdGFydEluQ29sdW1uRGlyZWN0aW9u
OworICAgIExheW91dFVuaXQgb2Zmc2V0RW5kSW5Db2x1bW5EaXJlY3Rpb247CisgICAgTGF5b3V0
UmVjdCBmbGlwcGVkSGl0VGVzdFJlY3QgPSBoaXRUZXN0UmVjdDsKKyAgICBmbGlwRm9yV3JpdGlu
Z01vZGUoZmxpcHBlZEhpdFRlc3RSZWN0KTsKKyAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkgeworICAgICAgICBvZmZzZXRTdGFydEluQ29sdW1uRGlyZWN0aW9uID0g
ZmxpcHBlZEhpdFRlc3RSZWN0LnkoKTsKKyAgICAgICAgb2Zmc2V0RW5kSW5Db2x1bW5EaXJlY3Rp
b24gPSBmbGlwcGVkSGl0VGVzdFJlY3QubWF4WSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG9m
ZnNldFN0YXJ0SW5Db2x1bW5EaXJlY3Rpb24gPSBmbGlwcGVkSGl0VGVzdFJlY3QueCgpOworICAg
ICAgICBvZmZzZXRFbmRJbkNvbHVtbkRpcmVjdGlvbiA9IGZsaXBwZWRIaXRUZXN0UmVjdC5tYXhY
KCk7CisgICAgfQorCisgICAgVmVjdG9yPGludD4mIGNvbHVtblBvcyA9IHRhYmxlKCktPmNvbHVt
blBvc2l0aW9ucygpOworICAgIExheW91dFVuaXQgb2Zmc2V0U3RhcnRJblJvd0RpcmVjdGlvbjsK
KyAgICBMYXlvdXRVbml0IG9mZnNldEVuZEluUm93RGlyZWN0aW9uOworICAgIGlmIChzdHlsZSgp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAgICAgIG9mZnNldFN0YXJ0SW5Sb3dE
aXJlY3Rpb24gPSBoaXRUZXN0UmVjdC54KCk7CisgICAgICAgIG9mZnNldEVuZEluUm93RGlyZWN0
aW9uID0gaGl0VGVzdFJlY3QubWF4WCgpOworICAgICB9IGVsc2UgeworICAgICAgICBvZmZzZXRT
dGFydEluUm93RGlyZWN0aW9uID0gaGl0VGVzdFJlY3QueSgpOworICAgICAgICBvZmZzZXRFbmRJ
blJvd0RpcmVjdGlvbiA9IGhpdFRlc3RSZWN0Lm1heFkoKTsKKyAgICB9CisgICAgLy8gRmxpcCBm
b3IgdGV4dCBkaXJlY3Rpb24uCisgICAgaWYgKCFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpIHsKKyAgICAgICAgTGF5b3V0VW5pdCB0ZW1wT2Zmc2V0U3RhcnRJblJvd0RpcmVjdGlv
biA9IG9mZnNldFN0YXJ0SW5Sb3dEaXJlY3Rpb247CisgICAgICAgIG9mZnNldFN0YXJ0SW5Sb3dE
aXJlY3Rpb24gPSBjb2x1bW5Qb3NbY29sdW1uUG9zLnNpemUoKSAtIDFdIC0gb2Zmc2V0RW5kSW5S
b3dEaXJlY3Rpb247CisgICAgICAgIG9mZnNldEVuZEluUm93RGlyZWN0aW9uID0gY29sdW1uUG9z
W2NvbHVtblBvcy5zaXplKCkgLSAxXSAtIHRlbXBPZmZzZXRTdGFydEluUm93RGlyZWN0aW9uOwog
ICAgIH0KIAotICAgIExheW91dFVuaXQgb2Zmc2V0SW5Db2x1bW5EaXJlY3Rpb24gPSBzdHlsZSgp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYXRpb24ueSgpIDogbG9jYXRpb24ueCgp
OwotICAgIAogICAgIHJlY2FsY0NlbGxzSWZOZWVkZWQoKTsKIAotICAgIC8vIEZpbmQgdGhlIGZp
cnN0IHJvdyB0aGF0IHN0YXJ0cyBhZnRlciBvZmZzZXRJbkNvbHVtbkRpcmVjdGlvbi4KLSAgICB1
bnNpZ25lZCBuZXh0Um93ID0gc3RkOjp1cHBlcl9ib3VuZChtX3Jvd1Bvcy5iZWdpbigpLCBtX3Jv
d1Bvcy5lbmQoKSwgb2Zmc2V0SW5Db2x1bW5EaXJlY3Rpb24pIC0gbV9yb3dQb3MuYmVnaW4oKTsK
KyAgICAvLyBGaW5kIHRoZSBmaXJzdCByb3cgdGhhdCBzdGFydHMgYWZ0ZXIgb2Zmc2V0U3RhcnRJ
bkNvbHVtbkRpcmVjdGlvbi4KKyAgICB1bnNpZ25lZCBuZXh0Um93ID0gc3RkOjp1cHBlcl9ib3Vu
ZChtX3Jvd1Bvcy5iZWdpbigpLCBtX3Jvd1Bvcy5lbmQoKSwgb2Zmc2V0U3RhcnRJbkNvbHVtbkRp
cmVjdGlvbikgLSBtX3Jvd1Bvcy5iZWdpbigpOwogICAgIGlmIChuZXh0Um93ID09IG1fcm93UG9z
LnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIE5vdyBzZXQgaGl0Um93IHRv
IHRoZSBpbmRleCBvZiB0aGUgaGl0IHJvdywgb3IgMC4KLSAgICB1bnNpZ25lZCBoaXRSb3cgPSBu
ZXh0Um93ID4gMCA/IG5leHRSb3cgLSAxIDogMDsKLQotICAgIFZlY3RvcjxpbnQ+JiBjb2x1bW5Q
b3MgPSB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKTsKLSAgICBMYXlvdXRVbml0IG9mZnNldElu
Um93RGlyZWN0aW9uID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2F0
aW9uLngoKSA6IGxvY2F0aW9uLnkoKTsKLSAgICBpZiAoIXN0eWxlKCktPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSkKLSAgICAgICAgb2Zmc2V0SW5Sb3dEaXJlY3Rpb24gPSBjb2x1bW5Qb3NbY29s
dW1uUG9zLnNpemUoKSAtIDFdIC0gb2Zmc2V0SW5Sb3dEaXJlY3Rpb247CiAKLSAgICB1bnNpZ25l
ZCBuZXh0Q29sdW1uID0gc3RkOjpsb3dlcl9ib3VuZChjb2x1bW5Qb3MuYmVnaW4oKSwgY29sdW1u
UG9zLmVuZCgpLCBvZmZzZXRJblJvd0RpcmVjdGlvbikgLSBjb2x1bW5Qb3MuYmVnaW4oKTsKKyAg
ICB1bnNpZ25lZCBuZXh0Q29sdW1uID0gc3RkOjpsb3dlcl9ib3VuZChjb2x1bW5Qb3MuYmVnaW4o
KSwgY29sdW1uUG9zLmVuZCgpLCBvZmZzZXRTdGFydEluUm93RGlyZWN0aW9uKSAtIGNvbHVtblBv
cy5iZWdpbigpOwogICAgIGlmIChuZXh0Q29sdW1uID09IGNvbHVtblBvcy5zaXplKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCBoaXRDb2x1bW4gPSBuZXh0Q29sdW1uID4g
MCA/IG5leHRDb2x1bW4gLSAxIDogMDsKIAotICAgIENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBjZWxs
QXQoaGl0Um93LCBoaXRDb2x1bW4pOworICAgIC8vIE5vdyBzZXQgaGl0Um93IHRvIHRoZSBpbmRl
eCBvZiB0aGUgaGl0IHJvdywgb3IgMC4KKyAgICB1bnNpZ25lZCBoaXRSb3cgPSBuZXh0Um93ID4g
MCA/IG5leHRSb3cgLSAxIDogMDsKKyAgICBmb3IgKDsgaGl0Um93IDwgKG1fcm93UG9zLnNpemUo
KSAtIDEpICYmIG1fcm93UG9zW2hpdFJvd10gPD0gb2Zmc2V0RW5kSW5Db2x1bW5EaXJlY3Rpb247
ICsraGl0Um93KSB7CisKKyAgICAgICAgdW5zaWduZWQgaGl0Q29sdW1uID0gbmV4dENvbHVtbiA+
IDAgPyBuZXh0Q29sdW1uIC0gMSA6IDA7CisgICAgICAgIGZvciAoOyBoaXRDb2x1bW4gPCAoY29s
dW1uUG9zLnNpemUoKSAtIDEpICYmIGNvbHVtblBvc1toaXRDb2x1bW5dIDw9IG9mZnNldEVuZElu
Um93RGlyZWN0aW9uOyArK2hpdENvbHVtbikgeworICAgICAgICAgICAgQ2VsbFN0cnVjdCYgY3Vy
cmVudCA9IGNlbGxBdChoaXRSb3csIGhpdENvbHVtbik7CiAKLSAgICAvLyBJZiB0aGUgY2VsbCBp
cyBlbXB0eSwgdGhlcmUncyBub3RoaW5nIHRvIGRvCi0gICAgaWYgKCFjdXJyZW50Lmhhc0NlbGxz
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBjZWxsIGlz
IGVtcHR5LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8KKyAgICAgICAgICAgIGlmICghY3VycmVudC5o
YXNDZWxscygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gY3VycmVudC5jZWxscy5zaXplKCkgOyBpOyApIHsKLSAgICAgICAgLS1pOwotICAgICAg
ICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LmNlbGxzW2ldOwotICAgICAgICBMYXlv
dXRQb2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGVGb3JDaGlsZChjZWxsLCBhZGp1
c3RlZExvY2F0aW9uKTsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PFJlbmRlck9iamVjdCo+KGNl
bGwpLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNlbGxQ
b2ludCwgYWN0aW9uKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IHRvTGF5b3V0UG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIGNlbGxQb2ludCkpOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjdXJyZW50LmNl
bGxzLnNpemUoKSA7IGk7ICkgeworICAgICAgICAgICAgICAgIC0taTsKKyAgICAgICAgICAgICAg
ICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LmNlbGxzW2ldOworICAgICAgICAgICAg
ICAgIExheW91dFBvaW50IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKGNl
bGwsIGFkanVzdGVkTG9jYXRpb24pOworICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxS
ZW5kZXJPYmplY3QqPihjZWxsKS0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludElu
Q29udGFpbmVyLCBjZWxsUG9pbnQsIGFjdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvTGF5b3V0UG9pbnQocG9pbnRJbkNvbnRhaW5lciAt
IGNlbGxQb2ludCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc1JlY3RC
YXNlZFRlc3QoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBp
ZiAoIXJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7CiAKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgUmVuZGVy
VGFibGVTZWN0aW9uOjpyZW1vdmVDYWNoZWRDb2xsYXBzZWRCb3JkZXJzKGNvbnN0IFJlbmRlclRh
YmxlQ2VsbCogY2VsbCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjNGY0ZjcyNWYxMDlkMWY0NjI2MDQ3YjAyMzIxN2I1ZTgy
Y2JkMTllLi44NWJmMjUzNjAwNWQ2NTE5MWU0YjMzYWZhYTVjNTVlNTk2M2MzOGIwIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTItMDUtMjUgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFu
LmplbnNlbkBub2tpYS5jb20+CisKKyAgICAgICAgUmVjdC1iYXNlZCBoaXR0ZXN0aW5nIGRvZXNu
J3Qgd29yayBpbiB0YWJsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04NjYwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3Qgbm9kZXNGcm9tUmVjdCBvbiB0YWJsZXMuCisKKyAgICAgICAgKiBmYXN0
L2RvbS9ub2Rlc0Zyb21SZWN0LXRhYmxlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10YWJsZS5odG1sOiBBZGRlZC4KKwogMjAxMi0wNS0zMCAg
TWlrZSBMYXd0aGVyICA8bWlrZWxhd3RoZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENTUzMg
Y2FsYzogSW1wbGVtZW50IENTU09NIHN1cHBvcnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZG9tL25vZGVzRnJvbVJlY3QtdGFibGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vbm9kZXNGcm9tUmVjdC10YWJsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDE1YjI5
OThiNDYzZWExMWQ4MzM4ODI0MWIzMWVkYWIyZTY1ZGE4NAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtdGFibGUtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMzggQEAKK0RvY3VtZW50Ojpub2Rlc0Zyb21SZWN0IDogUmVjdC1iYXNlZCBoaXQtdGVz
dGluZyBvbiB0YWJsZXMgLSBidWcgODY2MDUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorQ2hl
Y2sgYXJlYSBoaXRzIGZ1bGx5IGluc2lkZSB0YWJsZSBjZWxscworUEFTUyBBbGwgY29ycmVjdCBu
b2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVj
dAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29ycmVj
dCBub2RlcyBmb3VuZCBmb3IgcmVjdAorQ2hlY2sgYXJlYSBoaXRzIGFjcm9zcyB0YWJsZSBib3Jk
ZXIKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJl
Y3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9y
IHJlY3QKK0NoZWNrIGFyZWEgaGl0cyBjcm9zc2luZyBuZWlnaGJvdXJpbmcgdGFibGUgY2VsbHMK
K1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qg
bm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJl
Y3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJl
Y3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK0NoZWNrIGFyZWEgaGl0cyBjcm9zc2luZyBlbnRpcmUg
dGFibGUgY2VsbHMKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1Mg
QWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMg
Zm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BB
U1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK0NoZWNrIGFyZWEgaGl0cyBvbiBy
aWdodC10by1sZWZ0IHRhYmxlCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0
CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0
IG5vZGVzIGZvdW5kIGZvciByZWN0CitDaGVjayBhcmVhIGhpdHMgb24gZmxpcHBlZCAodGItbHIp
IHRhYmxlCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBj
b3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5k
IGZvciByZWN0CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJl
Y3QtdGFibGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtdGFibGUu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zZWI2ZTY4YWM2OGM0MDdhNmVkNWE2ZGI2MWFjZDMxYmFkNWI3MjU3
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10
YWJsZS5odG1sCkBAIC0wLDAgKzEsMTIxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8dGl0bGU+RG9jdW1lbnQ6Om5vZGVzRnJvbVJlY3QgOiBSZWN0LWJhc2VkIGhpdC10ZXN0
aW5nIG9uIHRhYmxlcyAtIGJ1ZyA4NjYwNTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3Mi
PgorICAgICNzYW5kYm94IHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgICBs
ZWZ0OiAwcHg7CisgICAgICAgIHRvcDogMHB4OworICAgICAgICB3aWR0aDogNjAwcHg7CisgICAg
ICAgIGhlaWdodDogODAwcHg7CisgICAgfQorICAgICN0ZXN0dGFibGUgeworICAgICAgICBtYXJn
aW46IDEwMHB4OworICAgICAgICB3aWR0aDogMjAwcHg7CisgICAgICAgIGhlaWdodDogMjAwcHg7
CisgICAgfQorICAgIC5ydGwgeworICAgICAgICBkaXJlY3Rpb246IHJ0bDsKKyAgICB9CisgICAg
LnRibHIgeworICAgICAgICAtd2Via2l0LXdyaXRpbmctbW9kZTogdmVydGljYWwtbHI7CisgICAg
fQorPC9zdHlsZT4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisgICAgPGRpdiBpZD1zYW5kYm94PgorICAgICAgICA8
dGFibGUgaWQ9dGVzdHRhYmxlPgorICAgICAgICAgICAgPHRyIGlkPXRyMT4KKyAgICAgICAgICAg
ICAgICA8dGQgaWQ9dGQxMT4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQxMj4KKyAgICAgICAg
ICAgICAgICA8dGQgaWQ9dGQxMz4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQxND4KKyAgICAg
ICAgICAgIDx0ciBpZD10cjI+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkMjE+CisgICAgICAg
ICAgICAgICAgPHRkIGlkPXRkMjI+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkMjM+CisgICAg
ICAgICAgICAgICAgPHRkIGlkPXRkMjQ+CisgICAgICAgICAgICA8dHIgaWQ9dHIzPgorICAgICAg
ICAgICAgICAgIDx0ZCBpZD10ZDMxPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDMyPgorICAg
ICAgICAgICAgICAgIDx0ZCBpZD10ZDMzPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDM0Pgor
ICAgICAgICAgICAgPHRyIGlkPXRyND4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQ0MT4KKyAg
ICAgICAgICAgICAgICA8dGQgaWQ9dGQ0Mj4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQ0Mz4K
KyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQ0ND4KKyAgICAgICAgPC90YWJsZT4KKyAgICA8L2Rp
dj4KKworICAgIDxzY3JpcHQ+CisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKQorICAgICAgICB7
CisgICAgICAgICAgICBkZXNjcmlwdGlvbihkb2N1bWVudC50aXRsZSk7CisgICAgICAgICAgICB2
YXIgZSA9IHt9OworCisgICAgICAgICAgICAvLyBTZXQgdXAgc2hvcnRjdXQgYWNjZXNzIHRvIGVs
ZW1lbnRzCisgICAgICAgICAgICBbJ3NhbmRib3gnLCAndGVzdHRhYmxlJywgJ3RyMScsICd0cjIn
LCAndHIzJywgJ3RyNCcsCisgICAgICAgICAgICAgJ3RkMTEnLCAndGQxMicsICd0ZDEzJywgJ3Rk
MTQnLAorICAgICAgICAgICAgICd0ZDIxJywgJ3RkMjInLCAndGQyMycsICd0ZDI0JywKKyAgICAg
ICAgICAgICAndGQzMScsICd0ZDMyJywgJ3RkMzMnLCAndGQzNCcsCisgICAgICAgICAgICAgJ3Rk
NDEnLCAndGQ0MicsICd0ZDQzJywgJ3RkNDQnXS5mb3JFYWNoKGZ1bmN0aW9uKGEpIHsKKyAgICAg
ICAgICAgICAgICBlW2FdID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSk7CisgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApOworICAgICAgICAgICAg
ZGVidWcoJ0NoZWNrIGFyZWEgaGl0cyBmdWxseSBpbnNpZGUgdGFibGUgY2VsbHMnKTsKKyAgICAg
ICAgICAgIGNoZWNrKDEyNSwgMTI1LCAxMCwgMTAsIDEwLCAxMCwgW2UudGQxMV0pOworICAgICAg
ICAgICAgY2hlY2soMjc1LCAxMjUsIDEwLCAxMCwgMTAsIDEwLCBbZS50ZDE0XSk7CisgICAgICAg
ICAgICBjaGVjaygxNzUsIDE3NSwgMTAsIDEwLCAxMCwgMTAsIFtlLnRkMjJdKTsKKyAgICAgICAg
ICAgIGNoZWNrKDEyNSwgMjc1LCAxMCwgMTAsIDEwLCAxMCwgW2UudGQ0MV0pOworCisgICAgICAg
ICAgICBkZWJ1ZygnQ2hlY2sgYXJlYSBoaXRzIGFjcm9zcyB0YWJsZSBib3JkZXInKTsKKyAgICAg
ICAgICAgIGNoZWNrKDkwLCAxMjUsIDEwLCAyMCwgMTAsIDIwLCBbZS50ZDExLCBlLnRlc3R0YWJs
ZSwgZS5zYW5kYm94XSk7CisgICAgICAgICAgICBjaGVjaygyNzUsIDkwLCAyMCwgMTAsIDIwLCAx
MCwgW2UudGQxNCwgZS50ZXN0dGFibGUsIGUuc2FuZGJveF0pOworICAgICAgICAgICAgY2hlY2so
MzEwLCAzMTAsIDIwLCAyMCwgMjAsIDIwLCBbZS50ZDQ0LCBlLnRlc3R0YWJsZSwgZS5zYW5kYm94
XSk7CisKKyAgICAgICAgICAgIGRlYnVnKCdDaGVjayBhcmVhIGhpdHMgY3Jvc3NpbmcgbmVpZ2hi
b3VyaW5nIHRhYmxlIGNlbGxzJyk7CisgICAgICAgICAgICBjaGVjaygxOTAsIDE3NSwgMTAsIDIw
LCAxMCwgMjAsIFtlLnRkMjIsIGUudGQyMywgZS50ZXN0dGFibGVdKTsKKyAgICAgICAgICAgIGNo
ZWNrKDI2MCwgMjc1LCAxMCwgMjAsIDEwLCAyMCwgW2UudGQ0MywgZS50ZDQ0LCBlLnRlc3R0YWJs
ZV0pOworICAgICAgICAgICAgY2hlY2soMTc1LCAxOTAsIDIwLCAxMCwgMjAsIDEwLCBbZS50ZDIy
LCBlLnRkMzIsIGUudGVzdHRhYmxlXSk7CisgICAgICAgICAgICBjaGVjaygyNzUsIDI2MCwgMjAs
IDEwLCAyMCwgMTAsIFtlLnRkMzQsIGUudGQ0NCwgZS50ZXN0dGFibGVdKTsKKyAgICAgICAgICAg
IGNoZWNrKDE5MCwgMTkwLCAyMCwgMjAsIDIwLCAyMCwgW2UudGQyMiwgZS50ZDIzLCBlLnRkMzIs
IGUudGQzMywgZS50ZXN0dGFibGVdKTsKKworICAgICAgICAgICAgZGVidWcoJ0NoZWNrIGFyZWEg
aGl0cyBjcm9zc2luZyBlbnRpcmUgdGFibGUgY2VsbHMnKTsKKyAgICAgICAgICAgIGNoZWNrKDIw
MCwgMTc1LCAxMCwgOTAsIDEwLCA5MCwgW2UudGQyMSwgZS50ZDIyLCBlLnRkMjMsIGUudGQyNCwg
ZS50ZXN0dGFibGVdKTsKKyAgICAgICAgICAgIGNoZWNrKDE3NSwgMjAwLCA5MCwgMTAsIDkwLCAx
MCwgW2UudGQxMiwgZS50ZDIyLCBlLnRkMzIsIGUudGQ0MiwgZS50ZXN0dGFibGVdKTsKKyAgICAg
ICAgICAgIGNoZWNrKDE1MCwgMTUwLCA2MCwgNjAsIDYwLCA2MCwgW2UudGQxMSwgZS50ZDEyLCBl
LnRkMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRk
MjEsIGUudGQyMiwgZS50ZDIzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGUudGQzMSwgZS50ZDMyLCBlLnRkMzMsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZS50ZXN0dGFibGUsIGUuc2FuZGJveF0pOworICAgICAg
ICAgICAgY2hlY2soMTI1LCAzNTAsIDEyMCwgMTAsIDEwLCAxMCwgW2UudGQzMSwgZS50ZDQxLCBl
LnRlc3R0YWJsZSwgZS5zYW5kYm94XSk7CisgICAgICAgICAgICBjaGVjaygzNTAsIDE1MCwgMTAs
IDEwLCAxMCwgMTIwLCBbZS50ZDEzLCBlLnRkMTQsIGUudGQyMywgZS50ZDI0LCBlLnRlc3R0YWJs
ZSwgZS5zYW5kYm94XSk7CisKKyAgICAgICAgICAgIGRlYnVnKCdDaGVjayBhcmVhIGhpdHMgb24g
cmlnaHQtdG8tbGVmdCB0YWJsZScpOworICAgICAgICAgICAgZVsndGVzdHRhYmxlJ10uc2V0QXR0
cmlidXRlKCdzdHlsZScsICdkaXJlY3Rpb246IHJ0bCcpOworICAgICAgICAgICAgY2hlY2soMjc1
LCAxMjUsIDEwLCAxMCwgMTAsIDEwLCBbZS50ZDExXSk7CisgICAgICAgICAgICBjaGVjaygxNzUs
IDE3NSwgMTAsIDEwLCAxMCwgMTAsIFtlLnRkMjNdKTsKKyAgICAgICAgICAgIGNoZWNrKDE3NSwg
MTkwLCAyMCwgMTAsIDIwLCAxMCwgW2UudGQyMywgZS50ZDMzLCBlLnRlc3R0YWJsZV0pOworCisg
ICAgICAgICAgICBkZWJ1ZygnQ2hlY2sgYXJlYSBoaXRzIG9uIGZsaXBwZWQgKHRiLWxyKSB0YWJs
ZScpOworICAgICAgICAgICAgZVsndGVzdHRhYmxlJ10uc2V0QXR0cmlidXRlKCdzdHlsZScsICct
d2Via2l0LXdyaXRpbmctbW9kZTogdmVydGljYWwtbHInKTsKKyAgICAgICAgICAgIGNoZWNrKDI3
NSwgMTI1LCAxMCwgMTAsIDEwLCAxMCwgW2UudGQ0MV0pOworICAgICAgICAgICAgY2hlY2soMTI1
LCAyNzUsIDEwLCAxMCwgMTAsIDEwLCBbZS50ZDE0XSk7CisgICAgICAgICAgICBjaGVjaygyMDAs
IDE3NSwgMTAsIDkwLCAxMCwgOTAsIFtlLnRkMTIsIGUudGQyMiwgZS50ZDMyLCBlLnRkNDIsIGUu
dGVzdHRhYmxlXSk7CisKKyAgICAgICAgfQorCisgICAgICAgIHdpbmRvdy5vbmxvYWQgPSBydW5U
ZXN0OworICAgIDwvc2NyaXB0PgorCisgICAgPHAgaWQ9J2Rlc2NyaXB0aW9uJz48L3A+CisgICAg
PHNwYW4gaWQ9ImNvbnNvbGUiPjwvc3Bhbj4KKyAgICA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145243</attachid>
            <date>2012-06-01 01:55:18 -0700</date>
            <delta_ts>2012-06-06 01:53:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86605-20120601105527.patch</filename>
            <type>text/plain</type>
            <size>16400</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDhlODI5ZTkxMDVlNDJk
ZWUyYzA1ZDQ4OWRkODQ0MzBkZmYyY2UxYi4uNjU1MmU4YmM2ZjdmMDZiMDMxMDc3YzYzMTQ5OTEw
YTM4NmRmNjg4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTA2LTAxICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFJl
Y3QtYmFzZWQgaGl0dGVzdGluZyBkb2Vzbid0IHdvcmsgaW4gdGFibGVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY2MDUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZXhpc3RpbmcgY29kZSBvbmx5
IHBlcmZvcm1lZCBhIHNpbmdsZSBiaW5hcnkgbG9va3VwIGZvciB0aGUgY2VudHJhbAorICAgICAg
ICBoaXQtdGVzdCBwb2ludC4gVGhpcyBtZWFudCBhcmVhLWJhc2VkIGhpdC10ZXN0aW5nIGRpZCBu
b3Qgd29yayBhY3Jvc3MKKyAgICAgICAgdGFibGUtY2VsbCBib3JkZXJzLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcGVyZm9ybXMgYSBiaW5hcnkgbG9va3VwIG9mIHN0YXJ0IGFuZCBlbmQgb2YgdGhl
IGhpdC10ZXN0CisgICAgICAgIHJlY3QsIGFuZCBpbnRyb2R1Y2VzIG5ldyBnZW5lcmljIGZ1bmN0
aW9ucyB0byBoZWxwIGNhbGN1bGF0ZSByb3dzIAorICAgICAgICBhbmQgY29sdW1ucyBzcGFubmVk
IGJ5IGEgcmVjdC4KKworICAgICAgICBGb3IgcG9pbnQtYmFzZWQgaGl0LXRlc3Rpbmcgd2Ugc3Rp
bGwgb25seSB0ZXN0IGEgc2luZ2xlIGNvbHVtbiBpbiBhCisgICAgICAgIHNpbmdsZSByb3cuCisK
KyAgICAgICAgVGVzdDogZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10YWJsZS5odG1sCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlU2VjdGlvbjo6ZmxpcFJlY3RUb1Jvd0FuZENvbHVtbkRpcmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnNwYW5uZWRSb3dzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6c3Bhbm5lZENvbHVtbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oOgorICAgICAgICAoUmVuZGVyVGFibGVTZWN0
aW9uKToKKwogMjAxMi0wNS0zMSAgTWlrZSBXZXN0ICA8bWt3c3RAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIEZpeGluZyBjb21waWxhdGlvbiB3aXRoIFNWRyBkaXNhYmxlZC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggZmU0NTczODRh
MDFhMzliNjA2ZGE2N2VjMjc3ZDE1MDRiZDA3YWI4ZS4uZTE4OTM2ZDRmNGIyNzRmMjM0NDc3ZDlm
MDk4NDQ3ZGRiNDY3YmQ4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAKQEAgLTEwOTAsNiArMTA5MCw3MSBAQCBDZWxsU3BhbiBSZW5kZXJU
YWJsZVNlY3Rpb246OmRpcnRpZWRDb2x1bW5zKGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3Qp
IGNvbnN0CiAgICAgcmV0dXJuIENlbGxTcGFuKHN0YXJ0Q29sLCBlbmRDb2wpOwogfQogCitMYXlv
dXRSZWN0IFJlbmRlclRhYmxlU2VjdGlvbjo6ZmxpcFJlY3RUb1Jvd0FuZENvbHVtbkRpcmVjdGlv
bihjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdAoreworICAgIExheW91dFJlY3QgdGFibGVB
bGlnbmVkUmVjdChyZWN0KTsKKworICAgIGZsaXBGb3JXcml0aW5nTW9kZSh0YWJsZUFsaWduZWRS
ZWN0KTsKKworICAgIGlmICghc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAg
ICAgICAgdGFibGVBbGlnbmVkUmVjdCA9IHRhYmxlQWxpZ25lZFJlY3QudHJhbnNwb3NlZFJlY3Qo
KTsKKworICAgIGNvbnN0IFZlY3RvcjxpbnQ+JiBjb2x1bW5Qb3MgPSB0YWJsZSgpLT5jb2x1bW5Q
b3NpdGlvbnMoKTsKKyAgICBpZiAoIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkK
KyAgICAgICAgdGFibGVBbGlnbmVkUmVjdC5zZXRYKGNvbHVtblBvc1tjb2x1bW5Qb3Muc2l6ZSgp
IC0gMV0gLSB0YWJsZUFsaWduZWRSZWN0Lm1heFgoKSk7CisKKyAgICByZXR1cm4gdGFibGVBbGln
bmVkUmVjdDsKK30KKworQ2VsbFNwYW4gUmVuZGVyVGFibGVTZWN0aW9uOjpzcGFubmVkUm93cyhj
b25zdCBMYXlvdXRSZWN0JiBmbGlwcGVkUmVjdCkgY29uc3QKK3sKKyAgICAvLyBGaW5kIHRoZSBm
aXJzdCByb3cgdGhhdCBzdGFydHMgYWZ0ZXIgcmVjdCB0b3AuCisgICAgdW5zaWduZWQgbmV4dFJv
dyA9IHN0ZDo6dXBwZXJfYm91bmQobV9yb3dQb3MuYmVnaW4oKSwgbV9yb3dQb3MuZW5kKCksIGZs
aXBwZWRSZWN0LnkoKSkgLSBtX3Jvd1Bvcy5iZWdpbigpOworCisgICAgaWYgKG5leHRSb3cgPT0g
bV9yb3dQb3Muc2l6ZSgpKQorICAgICAgICByZXR1cm4gQ2VsbFNwYW4obV9yb3dQb3Muc2l6ZSgp
LCBtX3Jvd1Bvcy5zaXplKCkpOyAvLyBObyByb3dzIHNwYW5uZWQuCisKKyAgICB1bnNpZ25lZCBz
dGFydFJvdyA9IG5leHRSb3cgPiAwID8gbmV4dFJvdyAtIDEgOiAwOworCisgICAgLy8gRmluZCB0
aGUgZmlyc3Qgcm93IHRoYXQgc3RhcnRzIGFmdGVyIHJlY3QgYm90dG9tLgorICAgIHVuc2lnbmVk
IGVuZFJvdzsKKyAgICBpZiAobV9yb3dQb3NbbmV4dFJvd10gPj0gZmxpcHBlZFJlY3QubWF4WSgp
KQorICAgICAgICBlbmRSb3cgPSBuZXh0Um93OworICAgIGVsc2UgeworICAgICAgICBlbmRSb3cg
PSBzdGQ6OnVwcGVyX2JvdW5kKG1fcm93UG9zLmJlZ2luKCksIG1fcm93UG9zLmVuZCgpLCBmbGlw
cGVkUmVjdC5tYXhZKCkpIC0gbV9yb3dQb3MuYmVnaW4oKTsKKyAgICAgICAgaWYgKGVuZFJvdyA9
PSBtX3Jvd1Bvcy5zaXplKCkpCisgICAgICAgICAgICBlbmRSb3cgPSBtX3Jvd1Bvcy5zaXplKCkg
LSAxOworICAgIH0KKworICAgIHJldHVybiBDZWxsU3BhbihzdGFydFJvdywgZW5kUm93KTsKK30K
KworQ2VsbFNwYW4gUmVuZGVyVGFibGVTZWN0aW9uOjpzcGFubmVkQ29sdW1ucyhjb25zdCBMYXlv
dXRSZWN0JiBmbGlwcGVkUmVjdCkgY29uc3QKK3sKKyAgICBjb25zdCBWZWN0b3I8aW50PiYgY29s
dW1uUG9zID0gdGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKCk7CisKKyAgICAvLyBGaW5kIHRoZSBm
aXJzdCBjb2x1bW50IHRoYXQgc3RhcnRzIGFmdGVyIHJlY3QgbGVmdC4KKyAgICB1bnNpZ25lZCBu
ZXh0Q29sdW1uID0gc3RkOjpsb3dlcl9ib3VuZChjb2x1bW5Qb3MuYmVnaW4oKSwgY29sdW1uUG9z
LmVuZCgpLCBmbGlwcGVkUmVjdC54KCkpIC0gY29sdW1uUG9zLmJlZ2luKCk7CisKKyAgICBpZiAo
bmV4dENvbHVtbiA9PSBjb2x1bW5Qb3Muc2l6ZSgpKQorICAgICAgICByZXR1cm4gQ2VsbFNwYW4o
Y29sdW1uUG9zLnNpemUoKSwgY29sdW1uUG9zLnNpemUoKSk7IC8vIE5vIGNvbHVtbnMgc3Bhbm5l
ZC4KKworICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gbmV4dENvbHVtbiA+IDAgPyBuZXh0Q29s
dW1uIC0gMSA6IDA7CisKKyAgICAvLyBGaW5kIHRoZSBmaXJzdCByb3cgdGhhdCBzdGFydHMgYWZ0
ZXIgcmVjdCByaWdodC4KKyAgICB1bnNpZ25lZCBlbmRDb2x1bW47CisgICAgaWYgKGNvbHVtblBv
c1tuZXh0Q29sdW1uXSA+PSBmbGlwcGVkUmVjdC5tYXhYKCkpCisgICAgICAgIGVuZENvbHVtbiA9
IG5leHRDb2x1bW47CisgICAgZWxzZSB7CisgICAgICAgIGVuZENvbHVtbiA9IHN0ZDo6bG93ZXJf
Ym91bmQoY29sdW1uUG9zLmJlZ2luKCksIGNvbHVtblBvcy5lbmQoKSwgZmxpcHBlZFJlY3QubWF4
WCgpKSAtIGNvbHVtblBvcy5iZWdpbigpOworICAgICAgICBpZiAoZW5kQ29sdW1uID09IGNvbHVt
blBvcy5zaXplKCkpCisgICAgICAgICAgICBlbmRDb2x1bW4gPSBjb2x1bW5Qb3Muc2l6ZSgpIC0g
MTsKKyAgICB9CisKKyAgICByZXR1cm4gQ2VsbFNwYW4oc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7
Cit9CisKKwogdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2JqZWN0KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgUGFpbnRQ
aGFzZSBwYWludFBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOwpAQCAtMTM0Miw1MiArMTQwNyw0NSBA
QCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgTGF5b3V0UG9pbnQgbG9jYXRpb24gPSBwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRT
aXplKGFkanVzdGVkTG9jYXRpb24pOwotICAgIGlmIChzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSgpKSB7Ci0gICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKQotICAgICAgICAgICAgbG9jYXRpb24uc2V0WShoZWlnaHQoKSAtIGxvY2F0aW9uLnko
KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvY2F0aW9uLnNldFgod2lkdGgoKSAtIGxv
Y2F0aW9uLngoKSk7Ci0gICAgfQotCi0gICAgTGF5b3V0VW5pdCBvZmZzZXRJbkNvbHVtbkRpcmVj
dGlvbiA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2NhdGlvbi55KCkg
OiBsb2NhdGlvbi54KCk7Ci0gICAgCiAgICAgcmVjYWxjQ2VsbHNJZk5lZWRlZCgpOwogCi0gICAg
Ly8gRmluZCB0aGUgZmlyc3Qgcm93IHRoYXQgc3RhcnRzIGFmdGVyIG9mZnNldEluQ29sdW1uRGly
ZWN0aW9uLgotICAgIHVuc2lnbmVkIG5leHRSb3cgPSBzdGQ6OnVwcGVyX2JvdW5kKG1fcm93UG9z
LmJlZ2luKCksIG1fcm93UG9zLmVuZCgpLCBvZmZzZXRJbkNvbHVtbkRpcmVjdGlvbikgLSBtX3Jv
d1Bvcy5iZWdpbigpOwotICAgIGlmIChuZXh0Um93ID09IG1fcm93UG9zLnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIE5vdyBzZXQgaGl0Um93IHRvIHRoZSBpbmRleCBvZiB0
aGUgaGl0IHJvdywgb3IgMC4KLSAgICB1bnNpZ25lZCBoaXRSb3cgPSBuZXh0Um93ID4gMCA/IG5l
eHRSb3cgLSAxIDogMDsKKyAgICBMYXlvdXRSZWN0IGhpdFRlc3RSZWN0ID0gcmVzdWx0LnJlY3RG
b3JQb2ludChwb2ludEluQ29udGFpbmVyKTsKKyAgICBoaXRUZXN0UmVjdC5tb3ZlQnkoLWFkanVz
dGVkTG9jYXRpb24pOwogCi0gICAgVmVjdG9yPGludD4mIGNvbHVtblBvcyA9IHRhYmxlKCktPmNv
bHVtblBvc2l0aW9ucygpOwotICAgIExheW91dFVuaXQgb2Zmc2V0SW5Sb3dEaXJlY3Rpb24gPSBz
dHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYXRpb24ueCgpIDogbG9jYXRp
b24ueSgpOwotICAgIGlmICghc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAg
ICAgICBvZmZzZXRJblJvd0RpcmVjdGlvbiA9IGNvbHVtblBvc1tjb2x1bW5Qb3Muc2l6ZSgpIC0g
MV0gLSBvZmZzZXRJblJvd0RpcmVjdGlvbjsKLQotICAgIHVuc2lnbmVkIG5leHRDb2x1bW4gPSBz
dGQ6Omxvd2VyX2JvdW5kKGNvbHVtblBvcy5iZWdpbigpLCBjb2x1bW5Qb3MuZW5kKCksIG9mZnNl
dEluUm93RGlyZWN0aW9uKSAtIGNvbHVtblBvcy5iZWdpbigpOwotICAgIGlmIChuZXh0Q29sdW1u
ID09IGNvbHVtblBvcy5zaXplKCkpCisgICAgTGF5b3V0UmVjdCB0YWJsZUFsaWduZWRSZWN0ID0g
ZmxpcFJlY3RUb1Jvd0FuZENvbHVtbkRpcmVjdGlvbihoaXRUZXN0UmVjdCk7CisgICAgQ2VsbFNw
YW4gcm93U3BhbiA9IHNwYW5uZWRSb3dzKHRhYmxlQWxpZ25lZFJlY3QpOworICAgIENlbGxTcGFu
IGNvbHVtblNwYW4gPSBzcGFubmVkQ29sdW1ucyh0YWJsZUFsaWduZWRSZWN0KTsKKyAgICBpZiAo
cm93U3Bhbi5zdGFydCgpID49IG1fcm93UG9zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChjb2x1bW5TcGFuLnN0YXJ0KCkgPj0gdGFibGUoKS0+Y29sdW1uUG9zaXRpb25z
KCkuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQgaGl0Q29sdW1u
ID0gbmV4dENvbHVtbiA+IDAgPyBuZXh0Q29sdW1uIC0gMSA6IDA7CiAKLSAgICBDZWxsU3RydWN0
JiBjdXJyZW50ID0gY2VsbEF0KGhpdFJvdywgaGl0Q29sdW1uKTsKKyAgICAvLyBOb3cgaXRlcmF0
ZSBvdmVyIHRoZSBzcGFubmVkIHJvd3MgYW5kIGNvbHVtbnMuCisgICAgZm9yICh1bnNpZ25lZCBo
aXRSb3cgPSByb3dTcGFuLnN0YXJ0KCk7IGhpdFJvdyA8IHJvd1NwYW4uZW5kKCk7ICsraGl0Um93
KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaGl0Q29sdW1uID0gY29sdW1uU3Bhbi5zdGFydCgp
OyBoaXRDb2x1bW4gPCBjb2x1bW5TcGFuLmVuZCgpOyArK2hpdENvbHVtbikgeworICAgICAgICAg
ICAgQ2VsbFN0cnVjdCYgY3VycmVudCA9IGNlbGxBdChoaXRSb3csIGhpdENvbHVtbik7CiAKLSAg
ICAvLyBJZiB0aGUgY2VsbCBpcyBlbXB0eSwgdGhlcmUncyBub3RoaW5nIHRvIGRvCi0gICAgaWYg
KCFjdXJyZW50Lmhhc0NlbGxzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IC8vIElmIHRoZSBjZWxsIGlzIGVtcHR5LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8KKyAgICAgICAg
ICAgIGlmICghY3VycmVudC5oYXNDZWxscygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gY3VycmVudC5jZWxscy5zaXplKCkgOyBpOyApIHsKLSAg
ICAgICAgLS1pOwotICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LmNlbGxz
W2ldOwotICAgICAgICBMYXlvdXRQb2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGVG
b3JDaGlsZChjZWxsLCBhZGp1c3RlZExvY2F0aW9uKTsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0
PFJlbmRlck9iamVjdCo+KGNlbGwpLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50
SW5Db250YWluZXIsIGNlbGxQb2ludCwgYWN0aW9uKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0
VGVzdFJlc3VsdChyZXN1bHQsIHRvTGF5b3V0UG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIGNlbGxQ
b2ludCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBjdXJyZW50LmNlbGxzLnNpemUoKSA7IGk7ICkgeworICAgICAgICAgICAgICAgIC0t
aTsKKyAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LmNlbGxz
W2ldOworICAgICAgICAgICAgICAgIExheW91dFBvaW50IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0
aW5nTW9kZUZvckNoaWxkKGNlbGwsIGFkanVzdGVkTG9jYXRpb24pOworICAgICAgICAgICAgICAg
IGlmIChzdGF0aWNfY2FzdDxSZW5kZXJPYmplY3QqPihjZWxsKS0+bm9kZUF0UG9pbnQocmVxdWVz
dCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBjZWxsUG9pbnQsIGFjdGlvbikpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvTGF5b3V0UG9pbnQo
cG9pbnRJbkNvbnRhaW5lciAtIGNlbGxQb2ludCkpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoIXJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorICAgICAgICBpZiAoIXJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CiAKKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpyZW1vdmVDYWNoZWRDb2xsYXBzZWRCb3Jk
ZXJzKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCogY2VsbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAppbmRleCBkY2RjMTM0OTAzMjFiNjYwYTcyZjNiNGYx
YmE2ODJjN2JlNDFlMWYyLi5kOTEyNDM1ZDBhMWY1ODBhMTAzYTkxZGViODQzYTFjYTg0MjhlN2I3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCkBA
IC0yMDUsNiArMjA1LDEzIEBAIHByaXZhdGU6CiAgICAgQ2VsbFNwYW4gZGlydGllZFJvd3MoY29u
c3QgTGF5b3V0UmVjdCYgcmVwYWludFJlY3QpIGNvbnN0OwogICAgIENlbGxTcGFuIGRpcnRpZWRD
b2x1bW5zKGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0KSBjb25zdDsKIAorICAgIC8vIEZs
aXAgdGhlIHJlY3Qgc28gaXQgYWxpZ25zIHdpdGggdGhlIGNvb3JkaW5hdGVzIHVzZWQgYnkgdGhl
IHJvd1BvcyBhbmQgY29sdW1uUG9zIHZlY3RvcnMuCisgICAgTGF5b3V0UmVjdCBmbGlwUmVjdFRv
Um93QW5kQ29sdW1uRGlyZWN0aW9uKGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKKworICAgIC8v
IFRoZXNlIHR3byBmdW5jdGlvbnMgdGFrZSBhIHJlY3RhbmdsZSBhcyBpbnB1dCB0aGF0IGhhcyBi
ZWVuIGZsaXBwZWQgYnkgZmxpcFJlY3RUb1Jvd0FuZENvbHVtbkRpcmVjdGlvbi4KKyAgICBDZWxs
U3BhbiBzcGFubmVkUm93cyhjb25zdCBMYXlvdXRSZWN0JiBmbGlwcGVkUmVjdCkgY29uc3Q7Cisg
ICAgQ2VsbFNwYW4gc3Bhbm5lZENvbHVtbnMoY29uc3QgTGF5b3V0UmVjdCYgZmxpcHBlZFJlY3Qp
IGNvbnN0OworCiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47CiAKICAgICBW
ZWN0b3I8Um93U3RydWN0PiBtX2dyaWQ7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYzRmM2Q2YzZlNWZmOTM5Mzc3Njg5ZDRh
ZDI1ZjhkOWE4MzEyM2FiOC4uMzM4ZGE4YmZlNThiODAwYzZiMzljZGQ2NTkxY2RmMzdlZDEzNDUx
YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA2LTAxICBBbGxhbiBTYW5kZmVsZCBKZW5z
ZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFJlY3QtYmFzZWQgaGl0dGVz
dGluZyBkb2Vzbid0IHdvcmsgaW4gdGFibGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY2MDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0IG5vZGVzRnJvbVJlY3Qgb24gdGFibGVzLgorCisgICAg
ICAgICogZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10YWJsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZG9tL25vZGVzRnJvbVJlY3QtdGFibGUuaHRtbDogQWRkZWQuCisKIDIw
MTItMDUtMzEgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbQ2hyb21pdW1dIFVucmV2aWV3ZWQsIHVwZGF0ZSBNYWMgTGVvcGFyZCBiYXNlbGluZXMg
Zm9yIGZhc3QvbXV0aWNvbC9zcGFuL3NwYW4tYXMtaW1tZWRpYXRlLWNvbHVtbnMtY2hpbGQuaHRt
bC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtdGFibGUt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10YWJsZS1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDE1YjI5OThiNDYzZWExMWQ4MzM4ODI0MWIzMWVkYWIy
ZTY1ZGE4NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJv
bVJlY3QtdGFibGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzggQEAKK0RvY3VtZW50Ojpub2Rl
c0Zyb21SZWN0IDogUmVjdC1iYXNlZCBoaXQtdGVzdGluZyBvbiB0YWJsZXMgLSBidWcgODY2MDUK
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorQ2hlY2sgYXJlYSBoaXRzIGZ1bGx5IGluc2lkZSB0
YWJsZSBjZWxscworUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBB
bGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBm
b3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorQ2hl
Y2sgYXJlYSBoaXRzIGFjcm9zcyB0YWJsZSBib3JkZXIKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMg
Zm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BB
U1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK0NoZWNrIGFyZWEgaGl0cyBjcm9z
c2luZyBuZWlnaGJvdXJpbmcgdGFibGUgY2VsbHMKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91
bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1Mg
QWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMg
Zm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK0No
ZWNrIGFyZWEgaGl0cyBjcm9zc2luZyBlbnRpcmUgdGFibGUgY2VsbHMKK1BBU1MgQWxsIGNvcnJl
Y3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9y
IHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNv
cnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQg
Zm9yIHJlY3QKK0NoZWNrIGFyZWEgaGl0cyBvbiByaWdodC10by1sZWZ0IHRhYmxlCitQQVNTIEFs
bCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZv
dW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitDaGVj
ayBhcmVhIGhpdHMgb24gZmxpcHBlZCAodGItbHIpIHRhYmxlCitQQVNTIEFsbCBjb3JyZWN0IG5v
ZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0
CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtdGFibGUuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtdGFibGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZDk1N2E4MWQ1
YzNkYTI4ZmViMmJmZmM2Y2I5MzVhMTY0NzUwYWNhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10YWJsZS5odG1sCkBAIC0wLDAgKzEsMTIxIEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+RG9jdW1lbnQ6Om5vZGVz
RnJvbVJlY3QgOiBSZWN0LWJhc2VkIGhpdC10ZXN0aW5nIG9uIHRhYmxlcyAtIGJ1ZyA4NjYwNTwv
dGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgICNzYW5kYm94IHsKKyAgICAgICAg
cG9zaXRpb246IGFic29sdXRlOworICAgICAgICBsZWZ0OiAwcHg7CisgICAgICAgIHRvcDogMHB4
OworICAgICAgICB3aWR0aDogNjAwcHg7CisgICAgICAgIGhlaWdodDogODAwcHg7CisgICAgfQor
ICAgICN0ZXN0dGFibGUgeworICAgICAgICBtYXJnaW46IDEwMHB4OworICAgICAgICB3aWR0aDog
MjAwcHg7CisgICAgICAgIGhlaWdodDogMjAwcHg7CisgICAgfQorICAgIC5ydGwgeworICAgICAg
ICBkaXJlY3Rpb246IHJ0bDsKKyAgICB9CisgICAgLnRibHIgeworICAgICAgICAtd2Via2l0LXdy
aXRpbmctbW9kZTogdmVydGljYWwtbHI7CisgICAgfQorPC9zdHlsZT4KKzxzY3JpcHQgc3JjPSIu
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9ub2Rlc0Zyb21SZWN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cisg
ICAgPGRpdiBpZD1zYW5kYm94PgorICAgICAgICA8dGFibGUgaWQ9dGVzdHRhYmxlPgorICAgICAg
ICAgICAgPHRyIGlkPXRyMT4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQxMT4KKyAgICAgICAg
ICAgICAgICA8dGQgaWQ9dGQxMj4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQxMz4KKyAgICAg
ICAgICAgICAgICA8dGQgaWQ9dGQxND4KKyAgICAgICAgICAgIDx0ciBpZD10cjI+CisgICAgICAg
ICAgICAgICAgPHRkIGlkPXRkMjE+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkMjI+CisgICAg
ICAgICAgICAgICAgPHRkIGlkPXRkMjM+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkMjQ+Cisg
ICAgICAgICAgICA8dHIgaWQ9dHIzPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDMxPgorICAg
ICAgICAgICAgICAgIDx0ZCBpZD10ZDMyPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDMzPgor
ICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDM0PgorICAgICAgICAgICAgPHRyIGlkPXRyND4KKyAg
ICAgICAgICAgICAgICA8dGQgaWQ9dGQ0MT4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQ0Mj4K
KyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQ0Mz4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQ0
ND4KKyAgICAgICAgPC90YWJsZT4KKyAgICA8L2Rpdj4KKworICAgIDxzY3JpcHQ+CisgICAgICAg
IGZ1bmN0aW9uIHJ1blRlc3QoKQorICAgICAgICB7CisgICAgICAgICAgICBkZXNjcmlwdGlvbihk
b2N1bWVudC50aXRsZSk7CisgICAgICAgICAgICB2YXIgZSA9IHt9OworCisgICAgICAgICAgICAv
LyBTZXQgdXAgc2hvcnRjdXQgYWNjZXNzIHRvIGVsZW1lbnRzCisgICAgICAgICAgICBbJ3NhbmRi
b3gnLCAndGVzdHRhYmxlJywgJ3RyMScsICd0cjInLCAndHIzJywgJ3RyNCcsCisgICAgICAgICAg
ICAgJ3RkMTEnLCAndGQxMicsICd0ZDEzJywgJ3RkMTQnLAorICAgICAgICAgICAgICd0ZDIxJywg
J3RkMjInLCAndGQyMycsICd0ZDI0JywKKyAgICAgICAgICAgICAndGQzMScsICd0ZDMyJywgJ3Rk
MzMnLCAndGQzNCcsCisgICAgICAgICAgICAgJ3RkNDEnLCAndGQ0MicsICd0ZDQzJywgJ3RkNDQn
XS5mb3JFYWNoKGZ1bmN0aW9uKGEpIHsKKyAgICAgICAgICAgICAgICBlW2FdID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoYSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgd2luZG93
LnNjcm9sbFRvKDAsIDApOworICAgICAgICAgICAgZGVidWcoJ0NoZWNrIGFyZWEgaGl0cyBmdWxs
eSBpbnNpZGUgdGFibGUgY2VsbHMnKTsKKyAgICAgICAgICAgIGNoZWNrKDEyNSwgMTI1LCAxMCwg
MTAsIDEwLCAxMCwgW2UudGQxMV0pOworICAgICAgICAgICAgY2hlY2soMjc1LCAxMjUsIDEwLCAx
MCwgMTAsIDEwLCBbZS50ZDE0XSk7CisgICAgICAgICAgICBjaGVjaygxNzUsIDE3NSwgMTAsIDEw
LCAxMCwgMTAsIFtlLnRkMjJdKTsKKyAgICAgICAgICAgIGNoZWNrKDEyNSwgMjc1LCAxMCwgMTAs
IDEwLCAxMCwgW2UudGQ0MV0pOworCisgICAgICAgICAgICBkZWJ1ZygnQ2hlY2sgYXJlYSBoaXRz
IGFjcm9zcyB0YWJsZSBib3JkZXInKTsKKyAgICAgICAgICAgIGNoZWNrKDkwLCAxMjUsIDEwLCAy
MCwgMTAsIDIwLCBbZS50ZDExLCBlLnRlc3R0YWJsZSwgZS5zYW5kYm94XSk7CisgICAgICAgICAg
ICBjaGVjaygyNzUsIDkwLCAyMCwgMTAsIDIwLCAxMCwgW2UudGQxNCwgZS50ZXN0dGFibGUsIGUu
c2FuZGJveF0pOworICAgICAgICAgICAgY2hlY2soMzEwLCAzMTAsIDIwLCAyMCwgMjAsIDIwLCBb
ZS50ZDQ0LCBlLnRlc3R0YWJsZSwgZS5zYW5kYm94XSk7CisKKyAgICAgICAgICAgIGRlYnVnKCdD
aGVjayBhcmVhIGhpdHMgY3Jvc3NpbmcgbmVpZ2hib3VyaW5nIHRhYmxlIGNlbGxzJyk7CisgICAg
ICAgICAgICBjaGVjaygxOTAsIDE3NSwgMTAsIDIwLCAxMCwgMjAsIFtlLnRkMjIsIGUudGQyMywg
ZS50ZXN0dGFibGVdKTsKKyAgICAgICAgICAgIGNoZWNrKDI2MCwgMjc1LCAxMCwgMjAsIDEwLCAy
MCwgW2UudGQ0MywgZS50ZDQ0LCBlLnRlc3R0YWJsZV0pOworICAgICAgICAgICAgY2hlY2soMTc1
LCAxOTAsIDIwLCAxMCwgMjAsIDEwLCBbZS50ZDIyLCBlLnRkMzIsIGUudGVzdHRhYmxlXSk7Cisg
ICAgICAgICAgICBjaGVjaygyNzUsIDI2MCwgMjAsIDEwLCAyMCwgMTAsIFtlLnRkMzQsIGUudGQ0
NCwgZS50ZXN0dGFibGVdKTsKKyAgICAgICAgICAgIGNoZWNrKDE5MCwgMTkwLCAyMCwgMjAsIDIw
LCAyMCwgW2UudGQyMiwgZS50ZDIzLCBlLnRkMzIsIGUudGQzMywgZS50ZXN0dGFibGVdKTsKKwor
ICAgICAgICAgICAgZGVidWcoJ0NoZWNrIGFyZWEgaGl0cyBjcm9zc2luZyBlbnRpcmUgdGFibGUg
Y2VsbHMnKTsKKyAgICAgICAgICAgIGNoZWNrKDIwMCwgMTc1LCAxMCwgOTAsIDEwLCA5MCwgW2Uu
dGQyMSwgZS50ZDIyLCBlLnRkMjMsIGUudGQyNCwgZS50ZXN0dGFibGVdKTsKKyAgICAgICAgICAg
IGNoZWNrKDE3NSwgMjAwLCA5MCwgMTAsIDkwLCAxMCwgW2UudGQxMiwgZS50ZDIyLCBlLnRkMzIs
IGUudGQ0MiwgZS50ZXN0dGFibGVdKTsKKyAgICAgICAgICAgIGNoZWNrKDE1MCwgMTUwLCA2MCwg
NjAsIDYwLCA2MCwgW2UudGQxMSwgZS50ZDEyLCBlLnRkMTMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRkMjEsIGUudGQyMiwgZS50ZDIzLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGQzMSwgZS50ZDMyLCBl
LnRkMzMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50
ZXN0dGFibGUsIGUuc2FuZGJveF0pOworICAgICAgICAgICAgY2hlY2soMTI1LCAzNTAsIDEyMCwg
MTAsIDEwLCAxMCwgW2UudGQzMSwgZS50ZDQxLCBlLnRlc3R0YWJsZSwgZS5zYW5kYm94XSk7Cisg
ICAgICAgICAgICBjaGVjaygzNTAsIDE1MCwgMTAsIDEwLCAxMCwgMTIwLCBbZS50ZDEzLCBlLnRk
MTQsIGUudGQyMywgZS50ZDI0LCBlLnRlc3R0YWJsZSwgZS5zYW5kYm94XSk7CisKKyAgICAgICAg
ICAgIGRlYnVnKCdDaGVjayBhcmVhIGhpdHMgb24gcmlnaHQtdG8tbGVmdCB0YWJsZScpOworICAg
ICAgICAgICAgZVsndGVzdHRhYmxlJ10uc2V0QXR0cmlidXRlKCdjbGFzcycsICdydGwnKTsKKyAg
ICAgICAgICAgIGNoZWNrKDI3NSwgMTI1LCAxMCwgMTAsIDEwLCAxMCwgW2UudGQxMV0pOworICAg
ICAgICAgICAgY2hlY2soMTc1LCAxNzUsIDEwLCAxMCwgMTAsIDEwLCBbZS50ZDIzXSk7CisgICAg
ICAgICAgICBjaGVjaygxNzUsIDE5MCwgMjAsIDEwLCAyMCwgMTAsIFtlLnRkMjMsIGUudGQzMywg
ZS50ZXN0dGFibGVdKTsKKworICAgICAgICAgICAgZGVidWcoJ0NoZWNrIGFyZWEgaGl0cyBvbiBm
bGlwcGVkICh0Yi1scikgdGFibGUnKTsKKyAgICAgICAgICAgIGVbJ3Rlc3R0YWJsZSddLnNldEF0
dHJpYnV0ZSgnY2xhc3MnLCAndGJscicpOworICAgICAgICAgICAgY2hlY2soMjc1LCAxMjUsIDEw
LCAxMCwgMTAsIDEwLCBbZS50ZDQxXSk7CisgICAgICAgICAgICBjaGVjaygxMjUsIDI3NSwgMTAs
IDEwLCAxMCwgMTAsIFtlLnRkMTRdKTsKKyAgICAgICAgICAgIGNoZWNrKDIwMCwgMTc1LCAxMCwg
OTAsIDEwLCA5MCwgW2UudGQxMiwgZS50ZDIyLCBlLnRkMzIsIGUudGQ0MiwgZS50ZXN0dGFibGVd
KTsKKworICAgICAgICB9CisKKyAgICAgICAgd2luZG93Lm9ubG9hZCA9IHJ1blRlc3Q7CisgICAg
PC9zY3JpcHQ+CisKKyAgICA8cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKyAgICA8c3BhbiBpZD0i
Y29uc29sZSI+PC9zcGFuPgorICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145964</attachid>
            <date>2012-06-06 01:54:08 -0700</date>
            <delta_ts>2012-06-10 08:44:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86605-20120606105417.patch</filename>
            <type>text/plain</type>
            <size>17571</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ0NDcxMDE3OGM2ZTlj
YzhiNDNmMGY4MDJiZGYyMTM0ZTQ3Mjk2Yy4uMDU3NWQzMjJkMzk5ZTg1ZDA4M2I1MjIwYzY3YjM5
N2YwOTI5MGRlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA2LTA2ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFJl
Y3QtYmFzZWQgaGl0dGVzdGluZyBkb2Vzbid0IHdvcmsgaW4gdGFibGVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY2MDUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZXhpc3RpbmcgY29kZSBvbmx5
IHBlcmZvcm1lZCBhIHNpbmdsZSBiaW5hcnkgbG9va3VwIGZvciB0aGUgY2VudHJhbAorICAgICAg
ICBoaXQtdGVzdCBwb2ludC4gVGhpcyBtZWFudCBhcmVhLWJhc2VkIGhpdC10ZXN0aW5nIGRpZCBu
b3Qgd29yayBhY3Jvc3MKKyAgICAgICAgdGFibGUtY2VsbCBib3JkZXJzLiBBbGwgY2VsbHMgc3Bh
bm5lZCBieSBhIGhpdC10ZXN0IGFyZWEgbXVzdCBiZSBoaXQKKyAgICAgICAgdGVzdGVkLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0aHJlZSBhdXhpbGFyeSBmdW5jdGlvbnMgdG8g
aGVscCBjYWxjdWxhdGUgcm93cworICAgICAgICBhbmQgY29sdW1ucyBzcGFubmVkIGJ5IGFuIHJl
Y3QuIFRoZXNlIGFyZSBpbnRlbmRlZCB0byBhbHNvIGJlIHVzZWQgYnkKKyAgICAgICAgcmVwYWlu
dCBsb2dpYyBpbiBhIGxhdGVyIHBhdGNoLgorCisgICAgICAgIEZvciBwb2ludC1iYXNlZCBoaXQt
dGVzdGluZyB3ZSBtYWludGFpbiB1bmNoYW5nZWQgYmVoYXZpb3IgYW5kIHN0aWxsCisgICAgICAg
IG9ubHkgaGl0IHRlc3QgYSBzaW5nbGUgY29sdW1uIGluIGEgc2luZ2xlIHJvdy4KKworICAgICAg
ICBUZXN0OiBmYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LXRhYmxlLmh0bWwKKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVTZWN0aW9uOjpsb2dpY2FsUmVjdEZvcldyaXRpbmdNb2RlQW5kRGlyZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6c3Bhbm5lZFJvd3MpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpzcGFubmVkQ29sdW1ucyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgIChSZW5kZXJUYWJsZVNlY3Rp
b24pOgorCiAyMDEyLTA2LTA1ICBKb2UgVGhvbWFzICA8am9ldGhvbWFzQG1vdG9yb2xhLmNvbT4K
IAogICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiBBU1NFUlQoIWlzUGVyY2VudGFnZUludHJpbnNp
Y1NpemUpIGluIFJlbmRlclJlcGxhY2VkOjpjb21wdXRlSW50cmluc2ljUmF0aW9JbmZvcm1hdGlv
bkZvclJlbmRlckJveApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmNwcAppbmRleCA3ODVjYTFiYTJmN2EzYmNmZjIzZWQ1NDE3MDRiOTQ1M2UzYTliOTFk
Li5lZDU4YWM5MWQ0MzM0YzY2NGEwNjQyM2M3ODI1ZWZhOGY5NGE5NWQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMTAzNCw2ICsx
MDM0LDIzIEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludENlbGwoUmVuZGVyVGFibGVD
ZWxsKiBjZWxsLCBQYWludEluZm8mIHBhaW50SW5mbywKICAgICAgICAgY2VsbC0+cGFpbnQocGFp
bnRJbmZvLCBjZWxsUG9pbnQpOwogfQogCitMYXlvdXRSZWN0IFJlbmRlclRhYmxlU2VjdGlvbjo6
bG9naWNhbFJlY3RGb3JXcml0aW5nTW9kZUFuZERpcmVjdGlvbihjb25zdCBMYXlvdXRSZWN0JiBy
ZWN0KSBjb25zdAoreworICAgIExheW91dFJlY3QgdGFibGVBbGlnbmVkUmVjdChyZWN0KTsKKwor
ICAgIGZsaXBGb3JXcml0aW5nTW9kZSh0YWJsZUFsaWduZWRSZWN0KTsKKworICAgIGlmICghc3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgdGFibGVBbGlnbmVkUmVj
dCA9IHRhYmxlQWxpZ25lZFJlY3QudHJhbnNwb3NlZFJlY3QoKTsKKworICAgIGNvbnN0IFZlY3Rv
cjxpbnQ+JiBjb2x1bW5Qb3MgPSB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKTsKKyAgICBpZiAo
IXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICAgICAgdGFibGVBbGlnbmVk
UmVjdC5zZXRYKGNvbHVtblBvc1tjb2x1bW5Qb3Muc2l6ZSgpIC0gMV0gLSB0YWJsZUFsaWduZWRS
ZWN0Lm1heFgoKSk7CisKKyAgICByZXR1cm4gdGFibGVBbGlnbmVkUmVjdDsKK30KKworLy8gRklY
TUU6IFVzZSBzcGFubmVkUm93cyBpbnRlcm5hbGx5LCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg4MDY2CiBDZWxsU3BhbiBSZW5kZXJUYWJsZVNlY3Rpb246OmRp
cnRpZWRSb3dzKGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpIGNvbnN0CiB7CiAgICAgaWYg
KG1fZm9yY2VTbG93UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2VsbCkgCkBAIC0xMDYyLDYgKzEw
NzksNyBAQCBDZWxsU3BhbiBSZW5kZXJUYWJsZVNlY3Rpb246OmRpcnRpZWRSb3dzKGNvbnN0IExh
eW91dFJlY3QmIGRhbWFnZVJlY3QpIGNvbnN0CiB9CiAKIAorLy8gRklYTUU6IFVzZSBzcGFubmVk
Q29sdW1ucyBpbnRlcm5hbGx5LCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg4MDY2CiBDZWxsU3BhbiBSZW5kZXJUYWJsZVNlY3Rpb246OmRpcnRpZWRDb2x1bW5z
KGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpIGNvbnN0CiB7CiAgICAgaWYgKG1fZm9yY2VT
bG93UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2VsbCkgCkBAIC0xMDg4LDYgKzExMDYsNTYgQEAg
Q2VsbFNwYW4gUmVuZGVyVGFibGVTZWN0aW9uOjpkaXJ0aWVkQ29sdW1ucyhjb25zdCBMYXlvdXRS
ZWN0JiBkYW1hZ2VSZWN0KSBjb25zdAogICAgIHJldHVybiBDZWxsU3BhbihzdGFydENvbCwgZW5k
Q29sKTsKIH0KIAorQ2VsbFNwYW4gUmVuZGVyVGFibGVTZWN0aW9uOjpzcGFubmVkUm93cyhjb25z
dCBMYXlvdXRSZWN0JiBmbGlwcGVkUmVjdCkgY29uc3QKK3sKKyAgICAvLyBGaW5kIHRoZSBmaXJz
dCByb3cgdGhhdCBzdGFydHMgYWZ0ZXIgcmVjdCB0b3AuCisgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCByZWV2YWx1YXRlIGlmIHVwcGVyX2JvdW5kIGlzIHRoZSBjb3JyZWN0IGNob2ljZSBoZXJlLgor
ICAgIHVuc2lnbmVkIG5leHRSb3cgPSBzdGQ6OnVwcGVyX2JvdW5kKG1fcm93UG9zLmJlZ2luKCks
IG1fcm93UG9zLmVuZCgpLCBmbGlwcGVkUmVjdC55KCkpIC0gbV9yb3dQb3MuYmVnaW4oKTsKKwor
ICAgIGlmIChuZXh0Um93ID09IG1fcm93UG9zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIENlbGxT
cGFuKG1fcm93UG9zLnNpemUoKSAtIDEsIG1fcm93UG9zLnNpemUoKSAtIDEpOyAvLyBBZnRlciBh
bGwgcm93cy4KKworICAgIHVuc2lnbmVkIHN0YXJ0Um93ID0gbmV4dFJvdyA+IDAgPyBuZXh0Um93
IC0gMSA6IDA7CisKKyAgICAvLyBGaW5kIHRoZSBmaXJzdCByb3cgdGhhdCBzdGFydHMgYWZ0ZXIg
cmVjdCBib3R0b20uCisgICAgdW5zaWduZWQgZW5kUm93OworICAgIGlmIChtX3Jvd1Bvc1tuZXh0
Um93XSA+PSBmbGlwcGVkUmVjdC5tYXhZKCkpCisgICAgICAgIGVuZFJvdyA9IG5leHRSb3c7Cisg
ICAgZWxzZSB7CisgICAgICAgIGVuZFJvdyA9IHN0ZDo6dXBwZXJfYm91bmQobV9yb3dQb3MuYmVn
aW4oKSArIG5leHRSb3csIG1fcm93UG9zLmVuZCgpLCBmbGlwcGVkUmVjdC5tYXhZKCkpIC0gbV9y
b3dQb3MuYmVnaW4oKTsKKyAgICAgICAgaWYgKGVuZFJvdyA9PSBtX3Jvd1Bvcy5zaXplKCkpCisg
ICAgICAgICAgICBlbmRSb3cgPSBtX3Jvd1Bvcy5zaXplKCkgLSAxOworICAgIH0KKworICAgIHJl
dHVybiBDZWxsU3BhbihzdGFydFJvdywgZW5kUm93KTsKK30KKworQ2VsbFNwYW4gUmVuZGVyVGFi
bGVTZWN0aW9uOjpzcGFubmVkQ29sdW1ucyhjb25zdCBMYXlvdXRSZWN0JiBmbGlwcGVkUmVjdCkg
Y29uc3QKK3sKKyAgICBjb25zdCBWZWN0b3I8aW50PiYgY29sdW1uUG9zID0gdGFibGUoKS0+Y29s
dW1uUG9zaXRpb25zKCk7CisKKyAgICAvLyBGaW5kIHRoZSBmaXJzdCBjb2x1bW50IHRoYXQgc3Rh
cnRzIGFmdGVyIHJlY3QgbGVmdC4KKyAgICB1bnNpZ25lZCBuZXh0Q29sdW1uID0gc3RkOjpsb3dl
cl9ib3VuZChjb2x1bW5Qb3MuYmVnaW4oKSwgY29sdW1uUG9zLmVuZCgpLCBmbGlwcGVkUmVjdC54
KCkpIC0gY29sdW1uUG9zLmJlZ2luKCk7CisKKyAgICBpZiAobmV4dENvbHVtbiA9PSBjb2x1bW5Q
b3Muc2l6ZSgpKQorICAgICAgICByZXR1cm4gQ2VsbFNwYW4oY29sdW1uUG9zLnNpemUoKSAtIDEs
IGNvbHVtblBvcy5zaXplKCkgLSAxKTsgLy8gQWZ0ZXIgYWxsIGNvbHVtbnMuCisKKyAgICB1bnNp
Z25lZCBzdGFydENvbHVtbiA9IG5leHRDb2x1bW4gPiAwID8gbmV4dENvbHVtbiAtIDEgOiAwOwor
CisgICAgLy8gRmluZCB0aGUgZmlyc3Qgcm93IHRoYXQgc3RhcnRzIGFmdGVyIHJlY3QgcmlnaHQu
CisgICAgdW5zaWduZWQgZW5kQ29sdW1uOworICAgIGlmIChjb2x1bW5Qb3NbbmV4dENvbHVtbl0g
Pj0gZmxpcHBlZFJlY3QubWF4WCgpKQorICAgICAgICBlbmRDb2x1bW4gPSBuZXh0Q29sdW1uOwor
ICAgIGVsc2UgeworICAgICAgICBlbmRDb2x1bW4gPSBzdGQ6Omxvd2VyX2JvdW5kKGNvbHVtblBv
cy5iZWdpbigpICsgbmV4dENvbHVtbiwgY29sdW1uUG9zLmVuZCgpLCBmbGlwcGVkUmVjdC5tYXhY
KCkpIC0gY29sdW1uUG9zLmJlZ2luKCk7CisgICAgICAgIGlmIChlbmRDb2x1bW4gPT0gY29sdW1u
UG9zLnNpemUoKSkKKyAgICAgICAgICAgIGVuZENvbHVtbiA9IGNvbHVtblBvcy5zaXplKCkgLSAx
OworICAgIH0KKworICAgIHJldHVybiBDZWxsU3BhbihzdGFydENvbHVtbiwgZW5kQ29sdW1uKTsK
K30KKworCiB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBQYWludFBo
YXNlIHBhaW50UGhhc2UgPSBwYWludEluZm8ucGhhc2U7CkBAIC0xMzUxLDUyICsxNDE5LDQxIEBA
IGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBMYXlvdXRQb2ludCBsb2NhdGlvbiA9IHBvaW50SW5Db250YWluZXIgLSB0b0xheW91dFNp
emUoYWRqdXN0ZWRMb2NhdGlvbik7Ci0gICAgaWYgKHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dy
aXRpbmdNb2RlKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpCi0gICAgICAgICAgICBsb2NhdGlvbi5zZXRZKGhlaWdodCgpIC0gbG9jYXRpb24ueSgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9jYXRpb24uc2V0WCh3aWR0aCgpIC0gbG9j
YXRpb24ueCgpKTsKLSAgICB9Ci0KLSAgICBMYXlvdXRVbml0IG9mZnNldEluQ29sdW1uRGlyZWN0
aW9uID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2F0aW9uLnkoKSA6
IGxvY2F0aW9uLngoKTsKLSAgICAKICAgICByZWNhbGNDZWxsc0lmTmVlZGVkKCk7CiAKLSAgICAv
LyBGaW5kIHRoZSBmaXJzdCByb3cgdGhhdCBzdGFydHMgYWZ0ZXIgb2Zmc2V0SW5Db2x1bW5EaXJl
Y3Rpb24uCi0gICAgdW5zaWduZWQgbmV4dFJvdyA9IHN0ZDo6dXBwZXJfYm91bmQobV9yb3dQb3Mu
YmVnaW4oKSwgbV9yb3dQb3MuZW5kKCksIG9mZnNldEluQ29sdW1uRGlyZWN0aW9uKSAtIG1fcm93
UG9zLmJlZ2luKCk7Ci0gICAgaWYgKG5leHRSb3cgPT0gbV9yb3dQb3Muc2l6ZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gTm93IHNldCBoaXRSb3cgdG8gdGhlIGluZGV4IG9mIHRo
ZSBoaXQgcm93LCBvciAwLgotICAgIHVuc2lnbmVkIGhpdFJvdyA9IG5leHRSb3cgPiAwID8gbmV4
dFJvdyAtIDEgOiAwOworICAgIExheW91dFJlY3QgaGl0VGVzdFJlY3QgPSByZXN1bHQucmVjdEZv
clBvaW50KHBvaW50SW5Db250YWluZXIpOworICAgIGhpdFRlc3RSZWN0Lm1vdmVCeSgtYWRqdXN0
ZWRMb2NhdGlvbik7CiAKLSAgICBWZWN0b3I8aW50PiYgY29sdW1uUG9zID0gdGFibGUoKS0+Y29s
dW1uUG9zaXRpb25zKCk7Ci0gICAgTGF5b3V0VW5pdCBvZmZzZXRJblJvd0RpcmVjdGlvbiA9IHN0
eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2NhdGlvbi54KCkgOiBsb2NhdGlv
bi55KCk7Ci0gICAgaWYgKCFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAg
ICAgIG9mZnNldEluUm93RGlyZWN0aW9uID0gY29sdW1uUG9zW2NvbHVtblBvcy5zaXplKCkgLSAx
XSAtIG9mZnNldEluUm93RGlyZWN0aW9uOworICAgIExheW91dFJlY3QgdGFibGVBbGlnbmVkUmVj
dCA9IGxvZ2ljYWxSZWN0Rm9yV3JpdGluZ01vZGVBbmREaXJlY3Rpb24oaGl0VGVzdFJlY3QpOwor
ICAgIENlbGxTcGFuIHJvd1NwYW4gPSBzcGFubmVkUm93cyh0YWJsZUFsaWduZWRSZWN0KTsKKyAg
ICBDZWxsU3BhbiBjb2x1bW5TcGFuID0gc3Bhbm5lZENvbHVtbnModGFibGVBbGlnbmVkUmVjdCk7
CiAKLSAgICB1bnNpZ25lZCBuZXh0Q29sdW1uID0gc3RkOjpsb3dlcl9ib3VuZChjb2x1bW5Qb3Mu
YmVnaW4oKSwgY29sdW1uUG9zLmVuZCgpLCBvZmZzZXRJblJvd0RpcmVjdGlvbikgLSBjb2x1bW5Q
b3MuYmVnaW4oKTsKLSAgICBpZiAobmV4dENvbHVtbiA9PSBjb2x1bW5Qb3Muc2l6ZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQgaGl0Q29sdW1uID0gbmV4dENvbHVtbiA+
IDAgPyBuZXh0Q29sdW1uIC0gMSA6IDA7Ci0KLSAgICBDZWxsU3RydWN0JiBjdXJyZW50ID0gY2Vs
bEF0KGhpdFJvdywgaGl0Q29sdW1uKTsKKyAgICAvLyBOb3cgaXRlcmF0ZSBvdmVyIHRoZSBzcGFu
bmVkIHJvd3MgYW5kIGNvbHVtbnMuCisgICAgZm9yICh1bnNpZ25lZCBoaXRSb3cgPSByb3dTcGFu
LnN0YXJ0KCk7IGhpdFJvdyA8IHJvd1NwYW4uZW5kKCk7ICsraGl0Um93KSB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaGl0Q29sdW1uID0gY29sdW1uU3Bhbi5zdGFydCgpOyBoaXRDb2x1bW4gPCBj
b2x1bW5TcGFuLmVuZCgpOyArK2hpdENvbHVtbikgeworICAgICAgICAgICAgQ2VsbFN0cnVjdCYg
Y3VycmVudCA9IGNlbGxBdChoaXRSb3csIGhpdENvbHVtbik7CiAKLSAgICAvLyBJZiB0aGUgY2Vs
bCBpcyBlbXB0eSwgdGhlcmUncyBub3RoaW5nIHRvIGRvCi0gICAgaWYgKCFjdXJyZW50Lmhhc0Nl
bGxzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBjZWxs
IGlzIGVtcHR5LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8KKyAgICAgICAgICAgIGlmICghY3VycmVu
dC5oYXNDZWxscygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gY3VycmVudC5jZWxscy5zaXplKCkgOyBpOyApIHsKLSAgICAgICAgLS1pOwotICAg
ICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LmNlbGxzW2ldOwotICAgICAgICBM
YXlvdXRQb2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGVGb3JDaGlsZChjZWxsLCBh
ZGp1c3RlZExvY2F0aW9uKTsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PFJlbmRlck9iamVjdCo+
KGNlbGwpLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNl
bGxQb2ludCwgYWN0aW9uKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1
bHQsIHRvTGF5b3V0UG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIGNlbGxQb2ludCkpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjdXJyZW50
LmNlbGxzLnNpemUoKSA7IGk7ICkgeworICAgICAgICAgICAgICAgIC0taTsKKyAgICAgICAgICAg
ICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LmNlbGxzW2ldOworICAgICAgICAg
ICAgICAgIExheW91dFBvaW50IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZUZvckNoaWxk
KGNlbGwsIGFkanVzdGVkTG9jYXRpb24pOworICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2Fz
dDxSZW5kZXJPYmplY3QqPihjZWxsKS0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2lu
dEluQ29udGFpbmVyLCBjZWxsUG9pbnQsIGFjdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAg
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvTGF5b3V0UG9pbnQocG9pbnRJbkNvbnRhaW5l
ciAtIGNlbGxQb2ludCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc1Jl
Y3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAg
ICBpZiAoIXJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7CiAKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgUmVu
ZGVyVGFibGVTZWN0aW9uOjpyZW1vdmVDYWNoZWRDb2xsYXBzZWRCb3JkZXJzKGNvbnN0IFJlbmRl
clRhYmxlQ2VsbCogY2VsbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uaAppbmRleCBhYTBkMWFlZjA1NDVmNzA3MmQzNWIzOGMzM2Y0MDgxODczM2ExNjUx
Li5lYWE4ZjhlNGIxYmI4ZTI1MzBmMzJjYmY4NjhlOWI5ODAyZWY2ZjdmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCkBAIC0yMTYsOSArMjE2LDE3
IEBAIHByaXZhdGU6CiAgICAgQ2VsbFNwYW4gZnVsbFRhYmxlUm93U3BhbigpIGNvbnN0IHsgcmV0
dXJuIENlbGxTcGFuKDAsIG1fZ3JpZC5zaXplKCkpOyB9CiAgICAgQ2VsbFNwYW4gZnVsbFRhYmxl
Q29sdW1uU3BhbigpIGNvbnN0IHsgcmV0dXJuIENlbGxTcGFuKDAsIHRhYmxlKCktPmNvbHVtbnMo
KS5zaXplKCkpOyB9CiAKKyAgICAvLyBGbGlwIHRoZSByZWN0IHNvIGl0IGFsaWducyB3aXRoIHRo
ZSBjb29yZGluYXRlcyB1c2VkIGJ5IHRoZSByb3dQb3MgYW5kIGNvbHVtblBvcyB2ZWN0b3JzLgor
ICAgIExheW91dFJlY3QgbG9naWNhbFJlY3RGb3JXcml0aW5nTW9kZUFuZERpcmVjdGlvbihjb25z
dCBMYXlvdXRSZWN0JikgY29uc3Q7CisKICAgICBDZWxsU3BhbiBkaXJ0aWVkUm93cyhjb25zdCBM
YXlvdXRSZWN0JiByZXBhaW50UmVjdCkgY29uc3Q7CiAgICAgQ2VsbFNwYW4gZGlydGllZENvbHVt
bnMoY29uc3QgTGF5b3V0UmVjdCYgcmVwYWludFJlY3QpIGNvbnN0OwogCisgICAgLy8gVGhlc2Ug
dHdvIGZ1bmN0aW9ucyB0YWtlIGEgcmVjdGFuZ2xlIGFzIGlucHV0IHRoYXQgaGFzIGJlZW4gZmxp
cHBlZCBieSBsb2dpY2FsUmVjdEZvcldyaXRpbmdNb2RlQW5kRGlyZWN0aW9uLgorICAgIC8vIFRo
ZSByZXR1cm5lZCBzcGFuIG9mIHJvd3Mgb3IgY29sdW1ucyBpcyBlbmQtZXhjbHVzaXZlLCBhbmQg
ZW1wdHkgaWYgc3RhcnQ9PWVuZC4KKyAgICBDZWxsU3BhbiBzcGFubmVkUm93cyhjb25zdCBMYXlv
dXRSZWN0JiBmbGlwcGVkUmVjdCkgY29uc3Q7CisgICAgQ2VsbFNwYW4gc3Bhbm5lZENvbHVtbnMo
Y29uc3QgTGF5b3V0UmVjdCYgZmxpcHBlZFJlY3QpIGNvbnN0OworCiAgICAgUmVuZGVyT2JqZWN0
Q2hpbGRMaXN0IG1fY2hpbGRyZW47CiAKICAgICBWZWN0b3I8Um93U3RydWN0PiBtX2dyaWQ7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggYWUzYmIzMWI0NGFjNjhiM2E3ODc2YjAyMzY0MWNhYTZjODU3NjVlYi4uNzMzMTQ3Zjk3
ZTQ2MGE1ZTI2MjBmYTUwN2U3OGY2MDhjMjIxNjg5ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDEyLTA2LTA2ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29t
PgorCisgICAgICAgIFJlY3QtYmFzZWQgaGl0dGVzdGluZyBkb2Vzbid0IHdvcmsgaW4gdGFibGVz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY2MDUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0IG5v
ZGVzRnJvbVJlY3Qgb24gdGFibGVzLgorCisgICAgICAgICogZmFzdC9kb20vbm9kZXNGcm9tUmVj
dC10YWJsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL25vZGVzRnJv
bVJlY3QtdGFibGUuaHRtbDogQWRkZWQuCisKIDIwMTItMDYtMDUgIEpvZSBUaG9tYXMgIDxqb2V0
aG9tYXNAbW90b3JvbGEuY29tPgogCiAgICAgICAgIEFTU0VSVElPTiBGQUlMRUQ6IEFTU0VSVCgh
aXNQZXJjZW50YWdlSW50cmluc2ljU2l6ZSkgaW4gUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVJbnRy
aW5zaWNSYXRpb0luZm9ybWF0aW9uRm9yUmVuZGVyQm94CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LXRhYmxlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtdGFibGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQx
NWIyOTk4YjQ2M2VhMTFkODMzODgyNDFiMzFlZGFiMmU2NWRhODQKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LXRhYmxlLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDM4IEBACitEb2N1bWVudDo6bm9kZXNGcm9tUmVjdCA6IFJlY3QtYmFzZWQgaGl0
LXRlc3Rpbmcgb24gdGFibGVzIC0gYnVnIDg2NjA1CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
K0NoZWNrIGFyZWEgaGl0cyBmdWxseSBpbnNpZGUgdGFibGUgY2VsbHMKK1BBU1MgQWxsIGNvcnJl
Y3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9y
IHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNv
cnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK0NoZWNrIGFyZWEgaGl0cyBhY3Jvc3MgdGFibGUg
Ym9yZGVyCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBj
b3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5k
IGZvciByZWN0CitDaGVjayBhcmVhIGhpdHMgY3Jvc3NpbmcgbmVpZ2hib3VyaW5nIHRhYmxlIGNl
bGxzCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3Jy
ZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZv
ciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBj
b3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitDaGVjayBhcmVhIGhpdHMgY3Jvc3NpbmcgZW50
aXJlIHRhYmxlIGNlbGxzCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQ
QVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5v
ZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0
CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitDaGVjayBhcmVhIGhpdHMg
b24gcmlnaHQtdG8tbGVmdCB0YWJsZQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3Ig
cmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29y
cmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorQ2hlY2sgYXJlYSBoaXRzIG9uIGZsaXBwZWQgKHRi
LWxyKSB0YWJsZQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBB
bGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBm
b3VuZCBmb3IgcmVjdAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zy
b21SZWN0LXRhYmxlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LXRh
YmxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Q5NTdhODFkNWMzZGEyOGZlYjJiZmZjNmNiOTM1YTE2NDc1
MGFjYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJl
Y3QtdGFibGUuaHRtbApAQCAtMCwwICsxLDEyMSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHRpdGxlPkRvY3VtZW50Ojpub2Rlc0Zyb21SZWN0IDogUmVjdC1iYXNlZCBoaXQt
dGVzdGluZyBvbiB0YWJsZXMgLSBidWcgODY2MDU8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQv
Y3NzIj4KKyAgICAjc2FuZGJveCB7CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAg
ICAgbGVmdDogMHB4OworICAgICAgICB0b3A6IDBweDsKKyAgICAgICAgd2lkdGg6IDYwMHB4Owor
ICAgICAgICBoZWlnaHQ6IDgwMHB4OworICAgIH0KKyAgICAjdGVzdHRhYmxlIHsKKyAgICAgICAg
bWFyZ2luOiAxMDBweDsKKyAgICAgICAgd2lkdGg6IDIwMHB4OworICAgICAgICBoZWlnaHQ6IDIw
MHB4OworICAgIH0KKyAgICAucnRsIHsKKyAgICAgICAgZGlyZWN0aW9uOiBydGw7CisgICAgfQor
ICAgIC50YmxyIHsKKyAgICAgICAgLXdlYmtpdC13cml0aW5nLW1vZGU6IHZlcnRpY2FsLWxyOwor
ICAgIH0KKzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxkaXYgaWQ9c2FuZGJveD4KKyAgICAg
ICAgPHRhYmxlIGlkPXRlc3R0YWJsZT4KKyAgICAgICAgICAgIDx0ciBpZD10cjE+CisgICAgICAg
ICAgICAgICAgPHRkIGlkPXRkMTE+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkMTI+CisgICAg
ICAgICAgICAgICAgPHRkIGlkPXRkMTM+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkMTQ+Cisg
ICAgICAgICAgICA8dHIgaWQ9dHIyPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDIxPgorICAg
ICAgICAgICAgICAgIDx0ZCBpZD10ZDIyPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDIzPgor
ICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDI0PgorICAgICAgICAgICAgPHRyIGlkPXRyMz4KKyAg
ICAgICAgICAgICAgICA8dGQgaWQ9dGQzMT4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQzMj4K
KyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQzMz4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQz
ND4KKyAgICAgICAgICAgIDx0ciBpZD10cjQ+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkNDE+
CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkNDI+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRk
NDM+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkNDQ+CisgICAgICAgIDwvdGFibGU+CisgICAg
PC9kaXY+CisKKyAgICA8c2NyaXB0PgorICAgICAgICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZGVzY3JpcHRpb24oZG9jdW1lbnQudGl0bGUpOworICAgICAgICAg
ICAgdmFyIGUgPSB7fTsKKworICAgICAgICAgICAgLy8gU2V0IHVwIHNob3J0Y3V0IGFjY2VzcyB0
byBlbGVtZW50cworICAgICAgICAgICAgWydzYW5kYm94JywgJ3Rlc3R0YWJsZScsICd0cjEnLCAn
dHIyJywgJ3RyMycsICd0cjQnLAorICAgICAgICAgICAgICd0ZDExJywgJ3RkMTInLCAndGQxMycs
ICd0ZDE0JywKKyAgICAgICAgICAgICAndGQyMScsICd0ZDIyJywgJ3RkMjMnLCAndGQyNCcsCisg
ICAgICAgICAgICAgJ3RkMzEnLCAndGQzMicsICd0ZDMzJywgJ3RkMzQnLAorICAgICAgICAgICAg
ICd0ZDQxJywgJ3RkNDInLCAndGQ0MycsICd0ZDQ0J10uZm9yRWFjaChmdW5jdGlvbihhKSB7Cisg
ICAgICAgICAgICAgICAgZVthXSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpOworICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTsKKyAgICAgICAg
ICAgIGRlYnVnKCdDaGVjayBhcmVhIGhpdHMgZnVsbHkgaW5zaWRlIHRhYmxlIGNlbGxzJyk7Cisg
ICAgICAgICAgICBjaGVjaygxMjUsIDEyNSwgMTAsIDEwLCAxMCwgMTAsIFtlLnRkMTFdKTsKKyAg
ICAgICAgICAgIGNoZWNrKDI3NSwgMTI1LCAxMCwgMTAsIDEwLCAxMCwgW2UudGQxNF0pOworICAg
ICAgICAgICAgY2hlY2soMTc1LCAxNzUsIDEwLCAxMCwgMTAsIDEwLCBbZS50ZDIyXSk7CisgICAg
ICAgICAgICBjaGVjaygxMjUsIDI3NSwgMTAsIDEwLCAxMCwgMTAsIFtlLnRkNDFdKTsKKworICAg
ICAgICAgICAgZGVidWcoJ0NoZWNrIGFyZWEgaGl0cyBhY3Jvc3MgdGFibGUgYm9yZGVyJyk7Cisg
ICAgICAgICAgICBjaGVjayg5MCwgMTI1LCAxMCwgMjAsIDEwLCAyMCwgW2UudGQxMSwgZS50ZXN0
dGFibGUsIGUuc2FuZGJveF0pOworICAgICAgICAgICAgY2hlY2soMjc1LCA5MCwgMjAsIDEwLCAy
MCwgMTAsIFtlLnRkMTQsIGUudGVzdHRhYmxlLCBlLnNhbmRib3hdKTsKKyAgICAgICAgICAgIGNo
ZWNrKDMxMCwgMzEwLCAyMCwgMjAsIDIwLCAyMCwgW2UudGQ0NCwgZS50ZXN0dGFibGUsIGUuc2Fu
ZGJveF0pOworCisgICAgICAgICAgICBkZWJ1ZygnQ2hlY2sgYXJlYSBoaXRzIGNyb3NzaW5nIG5l
aWdoYm91cmluZyB0YWJsZSBjZWxscycpOworICAgICAgICAgICAgY2hlY2soMTkwLCAxNzUsIDEw
LCAyMCwgMTAsIDIwLCBbZS50ZDIyLCBlLnRkMjMsIGUudGVzdHRhYmxlXSk7CisgICAgICAgICAg
ICBjaGVjaygyNjAsIDI3NSwgMTAsIDIwLCAxMCwgMjAsIFtlLnRkNDMsIGUudGQ0NCwgZS50ZXN0
dGFibGVdKTsKKyAgICAgICAgICAgIGNoZWNrKDE3NSwgMTkwLCAyMCwgMTAsIDIwLCAxMCwgW2Uu
dGQyMiwgZS50ZDMyLCBlLnRlc3R0YWJsZV0pOworICAgICAgICAgICAgY2hlY2soMjc1LCAyNjAs
IDIwLCAxMCwgMjAsIDEwLCBbZS50ZDM0LCBlLnRkNDQsIGUudGVzdHRhYmxlXSk7CisgICAgICAg
ICAgICBjaGVjaygxOTAsIDE5MCwgMjAsIDIwLCAyMCwgMjAsIFtlLnRkMjIsIGUudGQyMywgZS50
ZDMyLCBlLnRkMzMsIGUudGVzdHRhYmxlXSk7CisKKyAgICAgICAgICAgIGRlYnVnKCdDaGVjayBh
cmVhIGhpdHMgY3Jvc3NpbmcgZW50aXJlIHRhYmxlIGNlbGxzJyk7CisgICAgICAgICAgICBjaGVj
aygyMDAsIDE3NSwgMTAsIDkwLCAxMCwgOTAsIFtlLnRkMjEsIGUudGQyMiwgZS50ZDIzLCBlLnRk
MjQsIGUudGVzdHRhYmxlXSk7CisgICAgICAgICAgICBjaGVjaygxNzUsIDIwMCwgOTAsIDEwLCA5
MCwgMTAsIFtlLnRkMTIsIGUudGQyMiwgZS50ZDMyLCBlLnRkNDIsIGUudGVzdHRhYmxlXSk7Cisg
ICAgICAgICAgICBjaGVjaygxNTAsIDE1MCwgNjAsIDYwLCA2MCwgNjAsIFtlLnRkMTEsIGUudGQx
MiwgZS50ZDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZS50ZDIxLCBlLnRkMjIsIGUudGQyMywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlLnRkMzEsIGUudGQzMiwgZS50ZDMzLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGVzdHRhYmxlLCBlLnNhbmRib3hdKTsKKyAg
ICAgICAgICAgIGNoZWNrKDEyNSwgMzUwLCAxMjAsIDEwLCAxMCwgMTAsIFtlLnRkMzEsIGUudGQ0
MSwgZS50ZXN0dGFibGUsIGUuc2FuZGJveF0pOworICAgICAgICAgICAgY2hlY2soMzUwLCAxNTAs
IDEwLCAxMCwgMTAsIDEyMCwgW2UudGQxMywgZS50ZDE0LCBlLnRkMjMsIGUudGQyNCwgZS50ZXN0
dGFibGUsIGUuc2FuZGJveF0pOworCisgICAgICAgICAgICBkZWJ1ZygnQ2hlY2sgYXJlYSBoaXRz
IG9uIHJpZ2h0LXRvLWxlZnQgdGFibGUnKTsKKyAgICAgICAgICAgIGVbJ3Rlc3R0YWJsZSddLnNl
dEF0dHJpYnV0ZSgnY2xhc3MnLCAncnRsJyk7CisgICAgICAgICAgICBjaGVjaygyNzUsIDEyNSwg
MTAsIDEwLCAxMCwgMTAsIFtlLnRkMTFdKTsKKyAgICAgICAgICAgIGNoZWNrKDE3NSwgMTc1LCAx
MCwgMTAsIDEwLCAxMCwgW2UudGQyM10pOworICAgICAgICAgICAgY2hlY2soMTc1LCAxOTAsIDIw
LCAxMCwgMjAsIDEwLCBbZS50ZDIzLCBlLnRkMzMsIGUudGVzdHRhYmxlXSk7CisKKyAgICAgICAg
ICAgIGRlYnVnKCdDaGVjayBhcmVhIGhpdHMgb24gZmxpcHBlZCAodGItbHIpIHRhYmxlJyk7Cisg
ICAgICAgICAgICBlWyd0ZXN0dGFibGUnXS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3RibHInKTsK
KyAgICAgICAgICAgIGNoZWNrKDI3NSwgMTI1LCAxMCwgMTAsIDEwLCAxMCwgW2UudGQ0MV0pOwor
ICAgICAgICAgICAgY2hlY2soMTI1LCAyNzUsIDEwLCAxMCwgMTAsIDEwLCBbZS50ZDE0XSk7Cisg
ICAgICAgICAgICBjaGVjaygyMDAsIDE3NSwgMTAsIDkwLCAxMCwgOTAsIFtlLnRkMTIsIGUudGQy
MiwgZS50ZDMyLCBlLnRkNDIsIGUudGVzdHRhYmxlXSk7CisKKyAgICAgICAgfQorCisgICAgICAg
IHdpbmRvdy5vbmxvYWQgPSBydW5UZXN0OworICAgIDwvc2NyaXB0PgorCisgICAgPHAgaWQ9J2Rl
c2NyaXB0aW9uJz48L3A+CisgICAgPHNwYW4gaWQ9ImNvbnNvbGUiPjwvc3Bhbj4KKyAgICA8c2Ny
aXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146739</attachid>
            <date>2012-06-10 08:44:39 -0700</date>
            <delta_ts>2012-06-11 02:39:04 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-86605-20120610174438.patch</filename>
            <type>text/plain</type>
            <size>17686</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5OTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTAxNjM0YmJkZWJiODg5
M2VkMWE3OTgwYzdmZDllOWY3ODk4ZDRmOS4uYmY1NGVlNDU2MTE4MGNhNjRiMTkyMGJlYjIxNjEx
YmFlNjljZmZhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA2LTA2ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFJl
Y3QtYmFzZWQgaGl0dGVzdGluZyBkb2Vzbid0IHdvcmsgaW4gdGFibGVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY2MDUKKworICAgICAgICBSZXZp
ZXdlZCBieSBKdWxpZW4gQ2hhZmZyYWl4LgorCisgICAgICAgIFRoZSBleGlzdGluZyBjb2RlIG9u
bHkgcGVyZm9ybWVkIGEgc2luZ2xlIGJpbmFyeSBsb29rdXAgZm9yIHRoZSBjZW50cmFsCisgICAg
ICAgIGhpdC10ZXN0IHBvaW50LiBUaGlzIG1lYW50IGFyZWEtYmFzZWQgaGl0LXRlc3RpbmcgZGlk
IG5vdCB3b3JrIGFjcm9zcworICAgICAgICB0YWJsZS1jZWxsIGJvcmRlcnMuIEFsbCBjZWxscyBz
cGFubmVkIGJ5IGEgaGl0LXRlc3QgYXJlYSBtdXN0IGJlIGhpdAorICAgICAgICB0ZXN0ZWQuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRocmVlIGF1eGlsYXJ5IGZ1bmN0aW9ucyB0
byBoZWxwIGNhbGN1bGF0ZSByb3dzCisgICAgICAgIGFuZCBjb2x1bW5zIHNwYW5uZWQgYnkgYW4g
cmVjdC4gVGhlc2UgYXJlIGludGVuZGVkIHRvIGFsc28gYmUgdXNlZCBieQorICAgICAgICByZXBh
aW50IGxvZ2ljIGluIGEgbGF0ZXIgcGF0Y2guCisKKyAgICAgICAgRm9yIHBvaW50LWJhc2VkIGhp
dC10ZXN0aW5nIHdlIG1haW50YWluIHVuY2hhbmdlZCBiZWhhdmlvciBhbmQgc3RpbGwKKyAgICAg
ICAgb25seSBoaXQgdGVzdCBhIHNpbmdsZSBjb2x1bW4gaW4gYSBzaW5nbGUgcm93LgorCisgICAg
ICAgIFRlc3Q6IGZhc3QvZG9tL25vZGVzRnJvbVJlY3QtdGFibGUuaHRtbAorCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZVNlY3Rpb246OmxvZ2ljYWxSZWN0Rm9yV3JpdGluZ01vZGVBbmREaXJlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpzcGFubmVkUm93cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnNwYW5uZWRDb2x1bW5zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaDoKKyAgICAgICAgKFJlbmRlclRhYmxlU2Vj
dGlvbik6CisKIDIwMTItMDYtMTAgIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJraXQub3Jn
PgogCiAgICAgICAgIFtRdF1bV2luXSBGaXggYnVpbGRpbmcgU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy93aW4vUGx1Z2luVmlld1dpbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggNzNlZGViZjdlYWEwYmE2OWQ3MTkzODAxZjk5MTg3
ZjBiMmRiYzVlYi4uZWY4ZWZkZjc3MDM1MzM4ODkwMDFiMjNjMTJmZTY2NmY0YmY5MzIyZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAg
LTEwMjYsNiArMTAyNiwyMyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRDZWxsKFJl
bmRlclRhYmxlQ2VsbCogY2VsbCwgUGFpbnRJbmZvJiBwYWludEluZm8sCiAgICAgICAgIGNlbGwt
PnBhaW50KHBhaW50SW5mbywgY2VsbFBvaW50KTsKIH0KIAorTGF5b3V0UmVjdCBSZW5kZXJUYWJs
ZVNlY3Rpb246OmxvZ2ljYWxSZWN0Rm9yV3JpdGluZ01vZGVBbmREaXJlY3Rpb24oY29uc3QgTGF5
b3V0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBMYXlvdXRSZWN0IHRhYmxlQWxpZ25lZFJlY3Qo
cmVjdCk7CisKKyAgICBmbGlwRm9yV3JpdGluZ01vZGUodGFibGVBbGlnbmVkUmVjdCk7CisKKyAg
ICBpZiAoIXN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgIHRhYmxl
QWxpZ25lZFJlY3QgPSB0YWJsZUFsaWduZWRSZWN0LnRyYW5zcG9zZWRSZWN0KCk7CisKKyAgICBj
b25zdCBWZWN0b3I8aW50PiYgY29sdW1uUG9zID0gdGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKCk7
CisgICAgaWYgKCFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgICAgIHRh
YmxlQWxpZ25lZFJlY3Quc2V0WChjb2x1bW5Qb3NbY29sdW1uUG9zLnNpemUoKSAtIDFdIC0gdGFi
bGVBbGlnbmVkUmVjdC5tYXhYKCkpOworCisgICAgcmV0dXJuIHRhYmxlQWxpZ25lZFJlY3Q7Cit9
CisKKy8vIEZJWE1FOiBVc2Ugc3Bhbm5lZFJvd3MgaW50ZXJuYWxseSwgc2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODA2NgogQ2VsbFNwYW4gUmVuZGVyVGFibGVT
ZWN0aW9uOjpkaXJ0aWVkUm93cyhjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KSBjb25zdAog
ewogICAgIGlmIChtX2ZvcmNlU2xvd1BhaW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGwpIApAQCAt
MTA1NCw2ICsxMDcxLDcgQEAgQ2VsbFNwYW4gUmVuZGVyVGFibGVTZWN0aW9uOjpkaXJ0aWVkUm93
cyhjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KSBjb25zdAogfQogCiAKKy8vIEZJWE1FOiBV
c2Ugc3Bhbm5lZENvbHVtbnMgaW50ZXJuYWxseSwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04ODA2NgogQ2VsbFNwYW4gUmVuZGVyVGFibGVTZWN0aW9uOjpkaXJ0
aWVkQ29sdW1ucyhjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KSBjb25zdAogewogICAgIGlm
IChtX2ZvcmNlU2xvd1BhaW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGwpIApAQCAtMTA4MCw2ICsx
MDk4LDU3IEBAIENlbGxTcGFuIFJlbmRlclRhYmxlU2VjdGlvbjo6ZGlydGllZENvbHVtbnMoY29u
c3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkgY29uc3QKICAgICByZXR1cm4gQ2VsbFNwYW4oc3Rh
cnRDb2wsIGVuZENvbCk7CiB9CiAKK0NlbGxTcGFuIFJlbmRlclRhYmxlU2VjdGlvbjo6c3Bhbm5l
ZFJvd3MoY29uc3QgTGF5b3V0UmVjdCYgZmxpcHBlZFJlY3QpIGNvbnN0Cit7CisgICAgLy8gRmlu
ZCB0aGUgZmlyc3Qgcm93IHRoYXQgc3RhcnRzIGFmdGVyIHJlY3QgdG9wLgorICAgIC8vIEZJWE1F
OiBVcHBlcl9ib3VuZCBtaWdodCBub3QgYmUgdGhlIGNvcnJlY3QgYWxnb3JpdGhtIGhlcmUgc2lu
Y2UgaXQgbWlnaHQgc2tpcCBlbXB0eSByb3dzLCBidXQgaXQgaXMKKyAgICAvLyBjb25zaXN0ZW50
IHdpdGggYmVoYXZpb3IgaW4gdGhlIGZvcm1lciBwb2ludCBiYXNlZCBoaXQtdGVzdGluZyAoYnV0
IGluY29uc2lzdGVudCB3aXRoIHNwYW5uZWRDb2x1bW5zKS4KKyAgICB1bnNpZ25lZCBuZXh0Um93
ID0gc3RkOjp1cHBlcl9ib3VuZChtX3Jvd1Bvcy5iZWdpbigpLCBtX3Jvd1Bvcy5lbmQoKSwgZmxp
cHBlZFJlY3QueSgpKSAtIG1fcm93UG9zLmJlZ2luKCk7CisKKyAgICBpZiAobmV4dFJvdyA9PSBt
X3Jvd1Bvcy5zaXplKCkpCisgICAgICAgIHJldHVybiBDZWxsU3BhbihtX3Jvd1Bvcy5zaXplKCkg
LSAxLCBtX3Jvd1Bvcy5zaXplKCkgLSAxKTsgLy8gQWZ0ZXIgYWxsIHJvd3MuCisKKyAgICB1bnNp
Z25lZCBzdGFydFJvdyA9IG5leHRSb3cgPiAwID8gbmV4dFJvdyAtIDEgOiAwOworCisgICAgLy8g
RmluZCB0aGUgZmlyc3Qgcm93IHRoYXQgc3RhcnRzIGFmdGVyIHJlY3QgYm90dG9tLgorICAgIHVu
c2lnbmVkIGVuZFJvdzsKKyAgICBpZiAobV9yb3dQb3NbbmV4dFJvd10gPj0gZmxpcHBlZFJlY3Qu
bWF4WSgpKQorICAgICAgICBlbmRSb3cgPSBuZXh0Um93OworICAgIGVsc2UgeworICAgICAgICBl
bmRSb3cgPSBzdGQ6OnVwcGVyX2JvdW5kKG1fcm93UG9zLmJlZ2luKCkgKyBuZXh0Um93LCBtX3Jv
d1Bvcy5lbmQoKSwgZmxpcHBlZFJlY3QubWF4WSgpKSAtIG1fcm93UG9zLmJlZ2luKCk7CisgICAg
ICAgIGlmIChlbmRSb3cgPT0gbV9yb3dQb3Muc2l6ZSgpKQorICAgICAgICAgICAgZW5kUm93ID0g
bV9yb3dQb3Muc2l6ZSgpIC0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gQ2VsbFNwYW4oc3RhcnRS
b3csIGVuZFJvdyk7Cit9CisKK0NlbGxTcGFuIFJlbmRlclRhYmxlU2VjdGlvbjo6c3Bhbm5lZENv
bHVtbnMoY29uc3QgTGF5b3V0UmVjdCYgZmxpcHBlZFJlY3QpIGNvbnN0Cit7CisgICAgY29uc3Qg
VmVjdG9yPGludD4mIGNvbHVtblBvcyA9IHRhYmxlKCktPmNvbHVtblBvc2l0aW9ucygpOworCisg
ICAgLy8gRmluZCB0aGUgZmlyc3QgY29sdW1udCB0aGF0IHN0YXJ0cyBhZnRlciByZWN0IGxlZnQu
CisgICAgdW5zaWduZWQgbmV4dENvbHVtbiA9IHN0ZDo6bG93ZXJfYm91bmQoY29sdW1uUG9zLmJl
Z2luKCksIGNvbHVtblBvcy5lbmQoKSwgZmxpcHBlZFJlY3QueCgpKSAtIGNvbHVtblBvcy5iZWdp
bigpOworCisgICAgaWYgKG5leHRDb2x1bW4gPT0gY29sdW1uUG9zLnNpemUoKSkKKyAgICAgICAg
cmV0dXJuIENlbGxTcGFuKGNvbHVtblBvcy5zaXplKCkgLSAxLCBjb2x1bW5Qb3Muc2l6ZSgpIC0g
MSk7IC8vIEFmdGVyIGFsbCBjb2x1bW5zLgorCisgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBu
ZXh0Q29sdW1uID4gMCA/IG5leHRDb2x1bW4gLSAxIDogMDsKKworICAgIC8vIEZpbmQgdGhlIGZp
cnN0IHJvdyB0aGF0IHN0YXJ0cyBhZnRlciByZWN0IHJpZ2h0LgorICAgIHVuc2lnbmVkIGVuZENv
bHVtbjsKKyAgICBpZiAoY29sdW1uUG9zW25leHRDb2x1bW5dID49IGZsaXBwZWRSZWN0Lm1heFgo
KSkKKyAgICAgICAgZW5kQ29sdW1uID0gbmV4dENvbHVtbjsKKyAgICBlbHNlIHsKKyAgICAgICAg
ZW5kQ29sdW1uID0gc3RkOjpsb3dlcl9ib3VuZChjb2x1bW5Qb3MuYmVnaW4oKSArIG5leHRDb2x1
bW4sIGNvbHVtblBvcy5lbmQoKSwgZmxpcHBlZFJlY3QubWF4WCgpKSAtIGNvbHVtblBvcy5iZWdp
bigpOworICAgICAgICBpZiAoZW5kQ29sdW1uID09IGNvbHVtblBvcy5zaXplKCkpCisgICAgICAg
ICAgICBlbmRDb2x1bW4gPSBjb2x1bW5Qb3Muc2l6ZSgpIC0gMTsKKyAgICB9CisKKyAgICByZXR1
cm4gQ2VsbFNwYW4oc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7Cit9CisKKwogdm9pZCBSZW5kZXJU
YWJsZVNlY3Rpb246OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgUGFpbnRQaGFzZSBwYWludFBoYXNlID0gcGFp
bnRJbmZvLnBoYXNlOwpAQCAtMTM0NCw1MiArMTQxMyw0MSBAQCBib29sIFJlbmRlclRhYmxlU2Vj
dGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgTGF5b3V0UG9pbnQgbG9j
YXRpb24gPSBwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24p
OwotICAgIGlmIChzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7Ci0gICAg
ICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAg
bG9jYXRpb24uc2V0WShoZWlnaHQoKSAtIGxvY2F0aW9uLnkoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGxvY2F0aW9uLnNldFgod2lkdGgoKSAtIGxvY2F0aW9uLngoKSk7Ci0gICAgfQot
Ci0gICAgTGF5b3V0VW5pdCBvZmZzZXRJbkNvbHVtbkRpcmVjdGlvbiA9IHN0eWxlKCktPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2NhdGlvbi55KCkgOiBsb2NhdGlvbi54KCk7Ci0gICAg
CiAgICAgcmVjYWxjQ2VsbHNJZk5lZWRlZCgpOwogCi0gICAgLy8gRmluZCB0aGUgZmlyc3Qgcm93
IHRoYXQgc3RhcnRzIGFmdGVyIG9mZnNldEluQ29sdW1uRGlyZWN0aW9uLgotICAgIHVuc2lnbmVk
IG5leHRSb3cgPSBzdGQ6OnVwcGVyX2JvdW5kKG1fcm93UG9zLmJlZ2luKCksIG1fcm93UG9zLmVu
ZCgpLCBvZmZzZXRJbkNvbHVtbkRpcmVjdGlvbikgLSBtX3Jvd1Bvcy5iZWdpbigpOwotICAgIGlm
IChuZXh0Um93ID09IG1fcm93UG9zLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IC8vIE5vdyBzZXQgaGl0Um93IHRvIHRoZSBpbmRleCBvZiB0aGUgaGl0IHJvdywgb3IgMC4KLSAg
ICB1bnNpZ25lZCBoaXRSb3cgPSBuZXh0Um93ID4gMCA/IG5leHRSb3cgLSAxIDogMDsKKyAgICBM
YXlvdXRSZWN0IGhpdFRlc3RSZWN0ID0gcmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFp
bmVyKTsKKyAgICBoaXRUZXN0UmVjdC5tb3ZlQnkoLWFkanVzdGVkTG9jYXRpb24pOwogCi0gICAg
VmVjdG9yPGludD4mIGNvbHVtblBvcyA9IHRhYmxlKCktPmNvbHVtblBvc2l0aW9ucygpOwotICAg
IExheW91dFVuaXQgb2Zmc2V0SW5Sb3dEaXJlY3Rpb24gPSBzdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gbG9jYXRpb24ueCgpIDogbG9jYXRpb24ueSgpOwotICAgIGlmICghc3R5
bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICBvZmZzZXRJblJvd0RpcmVj
dGlvbiA9IGNvbHVtblBvc1tjb2x1bW5Qb3Muc2l6ZSgpIC0gMV0gLSBvZmZzZXRJblJvd0RpcmVj
dGlvbjsKKyAgICBMYXlvdXRSZWN0IHRhYmxlQWxpZ25lZFJlY3QgPSBsb2dpY2FsUmVjdEZvcldy
aXRpbmdNb2RlQW5kRGlyZWN0aW9uKGhpdFRlc3RSZWN0KTsKKyAgICBDZWxsU3BhbiByb3dTcGFu
ID0gc3Bhbm5lZFJvd3ModGFibGVBbGlnbmVkUmVjdCk7CisgICAgQ2VsbFNwYW4gY29sdW1uU3Bh
biA9IHNwYW5uZWRDb2x1bW5zKHRhYmxlQWxpZ25lZFJlY3QpOwogCi0gICAgdW5zaWduZWQgbmV4
dENvbHVtbiA9IHN0ZDo6bG93ZXJfYm91bmQoY29sdW1uUG9zLmJlZ2luKCksIGNvbHVtblBvcy5l
bmQoKSwgb2Zmc2V0SW5Sb3dEaXJlY3Rpb24pIC0gY29sdW1uUG9zLmJlZ2luKCk7Ci0gICAgaWYg
KG5leHRDb2x1bW4gPT0gY29sdW1uUG9zLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHVuc2lnbmVkIGhpdENvbHVtbiA9IG5leHRDb2x1bW4gPiAwID8gbmV4dENvbHVtbiAtIDEg
OiAwOwotCi0gICAgQ2VsbFN0cnVjdCYgY3VycmVudCA9IGNlbGxBdChoaXRSb3csIGhpdENvbHVt
bik7CisgICAgLy8gTm93IGl0ZXJhdGUgb3ZlciB0aGUgc3Bhbm5lZCByb3dzIGFuZCBjb2x1bW5z
LgorICAgIGZvciAodW5zaWduZWQgaGl0Um93ID0gcm93U3Bhbi5zdGFydCgpOyBoaXRSb3cgPCBy
b3dTcGFuLmVuZCgpOyArK2hpdFJvdykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGhpdENvbHVt
biA9IGNvbHVtblNwYW4uc3RhcnQoKTsgaGl0Q29sdW1uIDwgY29sdW1uU3Bhbi5lbmQoKTsgKyto
aXRDb2x1bW4pIHsKKyAgICAgICAgICAgIENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBjZWxsQXQoaGl0
Um93LCBoaXRDb2x1bW4pOwogCi0gICAgLy8gSWYgdGhlIGNlbGwgaXMgZW1wdHksIHRoZXJlJ3Mg
bm90aGluZyB0byBkbwotICAgIGlmICghY3VycmVudC5oYXNDZWxscygpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAvLyBJZiB0aGUgY2VsbCBpcyBlbXB0eSwgdGhlcmUncyBu
b3RoaW5nIHRvIGRvCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuaGFzQ2VsbHMoKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IGN1cnJlbnQuY2Vs
bHMuc2l6ZSgpIDsgaTsgKSB7Ci0gICAgICAgIC0taTsKLSAgICAgICAgUmVuZGVyVGFibGVDZWxs
KiBjZWxsID0gY3VycmVudC5jZWxsc1tpXTsKLSAgICAgICAgTGF5b3V0UG9pbnQgY2VsbFBvaW50
ID0gZmxpcEZvcldyaXRpbmdNb2RlRm9yQ2hpbGQoY2VsbCwgYWRqdXN0ZWRMb2NhdGlvbik7Ci0g
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxSZW5kZXJPYmplY3QqPihjZWxsKS0+bm9kZUF0UG9pbnQo
cmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBjZWxsUG9pbnQsIGFjdGlvbikpIHsK
LSAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCB0b0xheW91dFBvaW50KHBv
aW50SW5Db250YWluZXIgLSBjZWxsUG9pbnQpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY3VycmVudC5jZWxscy5zaXplKCkgOyBpOyAp
IHsKKyAgICAgICAgICAgICAgICAtLWk7CisgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxs
KiBjZWxsID0gY3VycmVudC5jZWxsc1tpXTsKKyAgICAgICAgICAgICAgICBMYXlvdXRQb2ludCBj
ZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGVGb3JDaGlsZChjZWxsLCBhZGp1c3RlZExvY2F0
aW9uKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY2Vs
bCktPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2VsbFBv
aW50LCBhY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCB0b0xheW91dFBvaW50KHBvaW50SW5Db250YWluZXIgLSBjZWxsUG9pbnQpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCFyZXN1bHQuaXNSZWN0
QmFzZWRUZXN0KCkpCisgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwogCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cmVt
b3ZlQ2FjaGVkQ29sbGFwc2VkQm9yZGVycyhjb25zdCBSZW5kZXJUYWJsZUNlbGwqIGNlbGwpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKaW5kZXggZDQy
Mzk1ZDIxYjNjN2I0NzZiOTA0NTgwNDM3MTgyMWRlNDZjMDAwZS4uZDM4ZjFkNWIwYmQ1NTVkMjky
YmEzNWFmMzE5MTYyY2I5MDU2NzcxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uaApAQCAtMjI3LDkgKzIyNywxNyBAQCBwcml2YXRlOgogICAgIENl
bGxTcGFuIGZ1bGxUYWJsZVJvd1NwYW4oKSBjb25zdCB7IHJldHVybiBDZWxsU3BhbigwLCBtX2dy
aWQuc2l6ZSgpKTsgfQogICAgIENlbGxTcGFuIGZ1bGxUYWJsZUNvbHVtblNwYW4oKSBjb25zdCB7
IHJldHVybiBDZWxsU3BhbigwLCB0YWJsZSgpLT5jb2x1bW5zKCkuc2l6ZSgpKTsgfQogCisgICAg
Ly8gRmxpcCB0aGUgcmVjdCBzbyBpdCBhbGlnbnMgd2l0aCB0aGUgY29vcmRpbmF0ZXMgdXNlZCBi
eSB0aGUgcm93UG9zIGFuZCBjb2x1bW5Qb3MgdmVjdG9ycy4KKyAgICBMYXlvdXRSZWN0IGxvZ2lj
YWxSZWN0Rm9yV3JpdGluZ01vZGVBbmREaXJlY3Rpb24oY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0
OworCiAgICAgQ2VsbFNwYW4gZGlydGllZFJvd3MoY29uc3QgTGF5b3V0UmVjdCYgcmVwYWludFJl
Y3QpIGNvbnN0OwogICAgIENlbGxTcGFuIGRpcnRpZWRDb2x1bW5zKGNvbnN0IExheW91dFJlY3Qm
IHJlcGFpbnRSZWN0KSBjb25zdDsKIAorICAgIC8vIFRoZXNlIHR3byBmdW5jdGlvbnMgdGFrZSBh
IHJlY3RhbmdsZSBhcyBpbnB1dCB0aGF0IGhhcyBiZWVuIGZsaXBwZWQgYnkgbG9naWNhbFJlY3RG
b3JXcml0aW5nTW9kZUFuZERpcmVjdGlvbi4KKyAgICAvLyBUaGUgcmV0dXJuZWQgc3BhbiBvZiBy
b3dzIG9yIGNvbHVtbnMgaXMgZW5kLWV4Y2x1c2l2ZSwgYW5kIGVtcHR5IGlmIHN0YXJ0PT1lbmQu
CisgICAgQ2VsbFNwYW4gc3Bhbm5lZFJvd3MoY29uc3QgTGF5b3V0UmVjdCYgZmxpcHBlZFJlY3Qp
IGNvbnN0OworICAgIENlbGxTcGFuIHNwYW5uZWRDb2x1bW5zKGNvbnN0IExheW91dFJlY3QmIGZs
aXBwZWRSZWN0KSBjb25zdDsKKwogICAgIHZvaWQgc2V0TG9naWNhbFBvc2l0aW9uRm9yQ2VsbChS
ZW5kZXJUYWJsZUNlbGwqLCB1bnNpZ25lZCBlZmZlY3RpdmVDb2x1bW4pIGNvbnN0OwogCiAgICAg
UmVuZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNmE5MTdlOWY4NGFiNjlm
YjUwMTdlYWM1MmU3NDhlY2NjY2Y2NzJlYS4uNzBmMWRlN2MxNjlmYWJjZGU4ZmY5M2ZiY2ZkODAw
ZjI4N2RjMjgwZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA2LTA2ICBBbGxhbiBTYW5k
ZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFJlY3QtYmFz
ZWQgaGl0dGVzdGluZyBkb2Vzbid0IHdvcmsgaW4gdGFibGVzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY2MDUKKworICAgICAgICBSZXZpZXdlZCBi
eSBKdWxpZW4gQ2hhZmZyYWl4LgorCisgICAgICAgIFRlc3Qgbm9kZXNGcm9tUmVjdCBvbiB0YWJs
ZXMuCisKKyAgICAgICAgKiBmYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LXRhYmxlLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10YWJsZS5odG1sOiBB
ZGRlZC4KKwogMjAxMi0wNi0xMCAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpA
aW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdIHNraXAgdXNlcnNjcmlwdHMvd2luZG93LW9uZXJy
b3ItZm9yLWlzb2xhdGVkLXdvcmxkLSouaHRtbCB0ZXN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10YWJsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LXRhYmxlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
MTViMjk5OGI0NjNlYTExZDgzMzg4MjQxYjMxZWRhYjJlNjVkYTg0Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10YWJsZS1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwzOCBAQAorRG9jdW1lbnQ6Om5vZGVzRnJvbVJlY3QgOiBSZWN0LWJhc2VkIGhp
dC10ZXN0aW5nIG9uIHRhYmxlcyAtIGJ1ZyA4NjYwNQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CitDaGVjayBhcmVhIGhpdHMgZnVsbHkgaW5zaWRlIHRhYmxlIGNlbGxzCitQQVNTIEFsbCBjb3Jy
ZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZv
ciByZWN0CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitQQVNTIEFsbCBj
b3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0CitDaGVjayBhcmVhIGhpdHMgYWNyb3NzIHRhYmxl
IGJvcmRlcgorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwg
Y29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3Vu
ZCBmb3IgcmVjdAorQ2hlY2sgYXJlYSBoaXRzIGNyb3NzaW5nIG5laWdoYm91cmluZyB0YWJsZSBj
ZWxscworUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29y
cmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBm
b3IgcmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwg
Y29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorQ2hlY2sgYXJlYSBoaXRzIGNyb3NzaW5nIGVu
dGlyZSB0YWJsZSBjZWxscworUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAor
UEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29ycmVjdCBu
b2RlcyBmb3VuZCBmb3IgcmVjdAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVj
dAorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdAorQ2hlY2sgYXJlYSBoaXRz
IG9uIHJpZ2h0LXRvLWxlZnQgdGFibGUKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9y
IHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNv
cnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK0NoZWNrIGFyZWEgaGl0cyBvbiBmbGlwcGVkICh0
Yi1scikgdGFibGUKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1Mg
QWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMg
Zm91bmQgZm9yIHJlY3QKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNG
cm9tUmVjdC10YWJsZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC10
YWJsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkOTU3YTgxZDVjM2RhMjhmZWIyYmZmYzZjYjkzNWExNjQ3
NTBhY2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21S
ZWN0LXRhYmxlLmh0bWwKQEAgLTAsMCArMSwxMjEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzx0aXRsZT5Eb2N1bWVudDo6bm9kZXNGcm9tUmVjdCA6IFJlY3QtYmFzZWQgaGl0
LXRlc3Rpbmcgb24gdGFibGVzIC0gYnVnIDg2NjA1PC90aXRsZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0
L2NzcyI+CisgICAgI3NhbmRib3ggeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAg
ICAgIGxlZnQ6IDBweDsKKyAgICAgICAgdG9wOiAwcHg7CisgICAgICAgIHdpZHRoOiA2MDBweDsK
KyAgICAgICAgaGVpZ2h0OiA4MDBweDsKKyAgICB9CisgICAgI3Rlc3R0YWJsZSB7CisgICAgICAg
IG1hcmdpbjogMTAwcHg7CisgICAgICAgIHdpZHRoOiAyMDBweDsKKyAgICAgICAgaGVpZ2h0OiAy
MDBweDsKKyAgICB9CisgICAgLnJ0bCB7CisgICAgICAgIGRpcmVjdGlvbjogcnRsOworICAgIH0K
KyAgICAudGJsciB7CisgICAgICAgIC13ZWJraXQtd3JpdGluZy1tb2RlOiB2ZXJ0aWNhbC1scjsK
KyAgICB9Cis8L3N0eWxlPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL25vZGVzRnJvbVJlY3QuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKyAgICA8ZGl2IGlkPXNhbmRib3g+CisgICAg
ICAgIDx0YWJsZSBpZD10ZXN0dGFibGU+CisgICAgICAgICAgICA8dHIgaWQ9dHIxPgorICAgICAg
ICAgICAgICAgIDx0ZCBpZD10ZDExPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDEyPgorICAg
ICAgICAgICAgICAgIDx0ZCBpZD10ZDEzPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDE0Pgor
ICAgICAgICAgICAgPHRyIGlkPXRyMj4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQyMT4KKyAg
ICAgICAgICAgICAgICA8dGQgaWQ9dGQyMj4KKyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQyMz4K
KyAgICAgICAgICAgICAgICA8dGQgaWQ9dGQyND4KKyAgICAgICAgICAgIDx0ciBpZD10cjM+Cisg
ICAgICAgICAgICAgICAgPHRkIGlkPXRkMzE+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkMzI+
CisgICAgICAgICAgICAgICAgPHRkIGlkPXRkMzM+CisgICAgICAgICAgICAgICAgPHRkIGlkPXRk
MzQ+CisgICAgICAgICAgICA8dHIgaWQ9dHI0PgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDQx
PgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDQyPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10
ZDQzPgorICAgICAgICAgICAgICAgIDx0ZCBpZD10ZDQ0PgorICAgICAgICA8L3RhYmxlPgorICAg
IDwvZGl2PgorCisgICAgPHNjcmlwdD4KKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKGRvY3VtZW50LnRpdGxlKTsKKyAgICAgICAg
ICAgIHZhciBlID0ge307CisKKyAgICAgICAgICAgIC8vIFNldCB1cCBzaG9ydGN1dCBhY2Nlc3Mg
dG8gZWxlbWVudHMKKyAgICAgICAgICAgIFsnc2FuZGJveCcsICd0ZXN0dGFibGUnLCAndHIxJywg
J3RyMicsICd0cjMnLCAndHI0JywKKyAgICAgICAgICAgICAndGQxMScsICd0ZDEyJywgJ3RkMTMn
LCAndGQxNCcsCisgICAgICAgICAgICAgJ3RkMjEnLCAndGQyMicsICd0ZDIzJywgJ3RkMjQnLAor
ICAgICAgICAgICAgICd0ZDMxJywgJ3RkMzInLCAndGQzMycsICd0ZDM0JywKKyAgICAgICAgICAg
ICAndGQ0MScsICd0ZDQyJywgJ3RkNDMnLCAndGQ0NCddLmZvckVhY2goZnVuY3Rpb24oYSkgewor
ICAgICAgICAgICAgICAgIGVbYV0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKTsKKyAgICAg
ICAgICAgIH0pOworCisgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7CisgICAgICAg
ICAgICBkZWJ1ZygnQ2hlY2sgYXJlYSBoaXRzIGZ1bGx5IGluc2lkZSB0YWJsZSBjZWxscycpOwor
ICAgICAgICAgICAgY2hlY2soMTI1LCAxMjUsIDEwLCAxMCwgMTAsIDEwLCBbZS50ZDExXSk7Cisg
ICAgICAgICAgICBjaGVjaygyNzUsIDEyNSwgMTAsIDEwLCAxMCwgMTAsIFtlLnRkMTRdKTsKKyAg
ICAgICAgICAgIGNoZWNrKDE3NSwgMTc1LCAxMCwgMTAsIDEwLCAxMCwgW2UudGQyMl0pOworICAg
ICAgICAgICAgY2hlY2soMTI1LCAyNzUsIDEwLCAxMCwgMTAsIDEwLCBbZS50ZDQxXSk7CisKKyAg
ICAgICAgICAgIGRlYnVnKCdDaGVjayBhcmVhIGhpdHMgYWNyb3NzIHRhYmxlIGJvcmRlcicpOwor
ICAgICAgICAgICAgY2hlY2soOTAsIDEyNSwgMTAsIDIwLCAxMCwgMjAsIFtlLnRkMTEsIGUudGVz
dHRhYmxlLCBlLnNhbmRib3hdKTsKKyAgICAgICAgICAgIGNoZWNrKDI3NSwgOTAsIDIwLCAxMCwg
MjAsIDEwLCBbZS50ZDE0LCBlLnRlc3R0YWJsZSwgZS5zYW5kYm94XSk7CisgICAgICAgICAgICBj
aGVjaygzMTAsIDMxMCwgMjAsIDIwLCAyMCwgMjAsIFtlLnRkNDQsIGUudGVzdHRhYmxlLCBlLnNh
bmRib3hdKTsKKworICAgICAgICAgICAgZGVidWcoJ0NoZWNrIGFyZWEgaGl0cyBjcm9zc2luZyBu
ZWlnaGJvdXJpbmcgdGFibGUgY2VsbHMnKTsKKyAgICAgICAgICAgIGNoZWNrKDE5MCwgMTc1LCAx
MCwgMjAsIDEwLCAyMCwgW2UudGQyMiwgZS50ZDIzLCBlLnRlc3R0YWJsZV0pOworICAgICAgICAg
ICAgY2hlY2soMjYwLCAyNzUsIDEwLCAyMCwgMTAsIDIwLCBbZS50ZDQzLCBlLnRkNDQsIGUudGVz
dHRhYmxlXSk7CisgICAgICAgICAgICBjaGVjaygxNzUsIDE5MCwgMjAsIDEwLCAyMCwgMTAsIFtl
LnRkMjIsIGUudGQzMiwgZS50ZXN0dGFibGVdKTsKKyAgICAgICAgICAgIGNoZWNrKDI3NSwgMjYw
LCAyMCwgMTAsIDIwLCAxMCwgW2UudGQzNCwgZS50ZDQ0LCBlLnRlc3R0YWJsZV0pOworICAgICAg
ICAgICAgY2hlY2soMTkwLCAxOTAsIDIwLCAyMCwgMjAsIDIwLCBbZS50ZDIyLCBlLnRkMjMsIGUu
dGQzMiwgZS50ZDMzLCBlLnRlc3R0YWJsZV0pOworCisgICAgICAgICAgICBkZWJ1ZygnQ2hlY2sg
YXJlYSBoaXRzIGNyb3NzaW5nIGVudGlyZSB0YWJsZSBjZWxscycpOworICAgICAgICAgICAgY2hl
Y2soMjAwLCAxNzUsIDEwLCA5MCwgMTAsIDkwLCBbZS50ZDIxLCBlLnRkMjIsIGUudGQyMywgZS50
ZDI0LCBlLnRlc3R0YWJsZV0pOworICAgICAgICAgICAgY2hlY2soMTc1LCAyMDAsIDkwLCAxMCwg
OTAsIDEwLCBbZS50ZDEyLCBlLnRkMjIsIGUudGQzMiwgZS50ZDQyLCBlLnRlc3R0YWJsZV0pOwor
ICAgICAgICAgICAgY2hlY2soMTUwLCAxNTAsIDYwLCA2MCwgNjAsIDYwLCBbZS50ZDExLCBlLnRk
MTIsIGUudGQxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGUudGQyMSwgZS50ZDIyLCBlLnRkMjMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZS50ZDMxLCBlLnRkMzIsIGUudGQzMywgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRlc3R0YWJsZSwgZS5zYW5kYm94XSk7Cisg
ICAgICAgICAgICBjaGVjaygxMjUsIDM1MCwgMTIwLCAxMCwgMTAsIDEwLCBbZS50ZDMxLCBlLnRk
NDEsIGUudGVzdHRhYmxlLCBlLnNhbmRib3hdKTsKKyAgICAgICAgICAgIGNoZWNrKDM1MCwgMTUw
LCAxMCwgMTAsIDEwLCAxMjAsIFtlLnRkMTMsIGUudGQxNCwgZS50ZDIzLCBlLnRkMjQsIGUudGVz
dHRhYmxlLCBlLnNhbmRib3hdKTsKKworICAgICAgICAgICAgZGVidWcoJ0NoZWNrIGFyZWEgaGl0
cyBvbiByaWdodC10by1sZWZ0IHRhYmxlJyk7CisgICAgICAgICAgICBlWyd0ZXN0dGFibGUnXS5z
ZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3J0bCcpOworICAgICAgICAgICAgY2hlY2soMjc1LCAxMjUs
IDEwLCAxMCwgMTAsIDEwLCBbZS50ZDExXSk7CisgICAgICAgICAgICBjaGVjaygxNzUsIDE3NSwg
MTAsIDEwLCAxMCwgMTAsIFtlLnRkMjNdKTsKKyAgICAgICAgICAgIGNoZWNrKDE3NSwgMTkwLCAy
MCwgMTAsIDIwLCAxMCwgW2UudGQyMywgZS50ZDMzLCBlLnRlc3R0YWJsZV0pOworCisgICAgICAg
ICAgICBkZWJ1ZygnQ2hlY2sgYXJlYSBoaXRzIG9uIGZsaXBwZWQgKHRiLWxyKSB0YWJsZScpOwor
ICAgICAgICAgICAgZVsndGVzdHRhYmxlJ10uc2V0QXR0cmlidXRlKCdjbGFzcycsICd0YmxyJyk7
CisgICAgICAgICAgICBjaGVjaygyNzUsIDEyNSwgMTAsIDEwLCAxMCwgMTAsIFtlLnRkNDFdKTsK
KyAgICAgICAgICAgIGNoZWNrKDEyNSwgMjc1LCAxMCwgMTAsIDEwLCAxMCwgW2UudGQxNF0pOwor
ICAgICAgICAgICAgY2hlY2soMjAwLCAxNzUsIDEwLCA5MCwgMTAsIDkwLCBbZS50ZDEyLCBlLnRk
MjIsIGUudGQzMiwgZS50ZDQyLCBlLnRlc3R0YWJsZV0pOworCisgICAgICAgIH0KKworICAgICAg
ICB3aW5kb3cub25sb2FkID0gcnVuVGVzdDsKKyAgICA8L3NjcmlwdD4KKworICAgIDxwIGlkPSdk
ZXNjcmlwdGlvbic+PC9wPgorICAgIDxzcGFuIGlkPSJjb25zb2xlIj48L3NwYW4+CisgICAgPHNj
cmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgorCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>