<?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>91894</bug_id>
          
          <creation_ts>2012-07-20 12:45:33 -0700</creation_ts>
          <short_desc>Search cancel button is hard to activate with a tap gesture even if touch adjustment is enabled.</short_desc>
          <delta_ts>2012-07-27 14:50:00 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>92093</dependson>
    
    <dependson>92293</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kevin Ellis">kevers</reporter>
          <assigned_to name="Kevin Ellis">kevers</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>gmak</cc>
    
    <cc>mifenton</cc>
    
    <cc>rjkroege</cc>
    
    <cc>rniwa</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>674863</commentid>
    <comment_count>0</comment_count>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-20 12:45:33 -0700</bug_when>
    <thetext>Search cancel button is hard to activate with a tap gesture even if touch adjustment is enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674879</commentid>
    <comment_count>1</comment_count>
      <attachid>153575</attachid>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-20 12:59:57 -0700</bug_when>
    <thetext>Created attachment 153575
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676545</commentid>
    <comment_count>2</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-24 02:12:07 -0700</bug_when>
    <thetext>Good catch, but a few comments.

First off, I think the patch should be split into the part solving the problem with search-cancel, and one improving the distance algorithm.

Second, there is something odd about the additional check to catch the cancel-button. The algorithm will already traverse up the tree and detect the shadow ancestor-node is an input-element (because input elements are mouse-focusable). The problem is more likely that the cancel-button doesn&apos;t become a real candidate because it shares the same responding ancester as other shadow-dom elements under the input element. I think we might need something more specific to detect the cancel button (and other shadow-dom buttons), but why isn&apos;t the cancel button mouse-focusable?

Note, the &apos;FIXME&apos; suggestion of implementing a hasDefaultEventHandler would solve the problem as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676629</commentid>
    <comment_count>3</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-24 04:08:36 -0700</bug_when>
    <thetext>I have uploaded my patch for hasDefaultEventHandler to bug #92093, if accepted the patch would also solve half of this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676866</commentid>
    <comment_count>4</comment_count>
      <attachid>153575</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-07-24 08:41:44 -0700</bug_when>
    <thetext>Comment on attachment 153575
Patch

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

&gt; Source/WebCore/ChangeLog:14
&gt; +        elements when controls are tightly packed horizontally.  Using a hybrid of distance to center
&gt; +        and percent overlap results in better disambiguation.

FWIW, in blackberry we use the percent overlap only, but we could adopt a mixed solution as well.

&gt; Source/WebCore/page/TouchAdjustment.cpp:77
&gt; +    Node* ancestorNode = node-&gt;shadowAncestorNode();

should not you use ::shadowHost instead?

see bug 91966</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676882</commentid>
    <comment_count>5</comment_count>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-24 08:59:44 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 153575 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=153575&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:14
&gt; &gt; +        elements when controls are tightly packed horizontally.  Using a hybrid of distance to center
&gt; &gt; +        and percent overlap results in better disambiguation.
&gt; 
&gt; FWIW, in blackberry we use the percent overlap only, but we could adopt a mixed solution as well.
&gt; 
&gt; &gt; Source/WebCore/page/TouchAdjustment.cpp:77
&gt; &gt; +    Node* ancestorNode = node-&gt;shadowAncestorNode();
&gt; 
&gt; should not you use ::shadowHost instead?
&gt; 
&gt; see bug 91966

The fix in 92093 for this par of the problem is more generic.  I&apos;m good with pulling out this part of the fix and blocking on the other fix.  There are two issues with this bug.  The first is incorrect pruning of the cancel button (fixed with the patch in 92093).  The second is a bias in the scoring, which is addressed by the hybrid scoring algorithm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677079</commentid>
    <comment_count>6</comment_count>
      <attachid>154115</attachid>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-24 11:58:43 -0700</bug_when>
    <thetext>Created attachment 154115
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677082</commentid>
    <comment_count>7</comment_count>
      <attachid>153575</attachid>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-24 12:02:32 -0700</bug_when>
    <thetext>Comment on attachment 153575
Patch

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

&gt;&gt; Source/WebCore/page/TouchAdjustment.cpp:77
&gt;&gt; +    Node* ancestorNode = node-&gt;shadowAncestorNode();
&gt; 
&gt; should not you use ::shadowHost instead?
&gt; 
&gt; see bug 91966

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677085</commentid>
    <comment_count>8</comment_count>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-24 12:10:28 -0700</bug_when>
    <thetext>Given that 92093 may require further discussion, I&apos;d like to proceed with this fix in parallel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678038</commentid>
    <comment_count>9</comment_count>
      <attachid>154115</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-25 07:48:55 -0700</bug_when>
    <thetext>Comment on attachment 154115
Patch

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

&gt; Source/WebCore/page/TouchAdjustment.cpp:79
&gt; +    Element* shadowHost = node-&gt;shadowHost();
&gt; +    if (shadowHost &amp;&amp; shadowHost-&gt;hasTagName(HTMLNames::inputTag))

I would love if this check was slightly more generic than just inputTag, but I guess this is acceptable as an interim solution. You might want to check if the input tag is disabled or readonly though.

&gt; Source/WebCore/page/TouchAdjustment.cpp:275
&gt; +// Uses a hybrid of distance to center and intersect ratio, normalizing each
&gt; +// score between 0 and 1 and choosing the better score. The distance to
&gt; +// centerline works best for disambiguating clicks on targets such as links,
&gt; +// where the width may be significantly larger than the touch width. Using
&gt; +// area of overlap in such cases can lead to a bias towards shorter links.
&gt; +// Conversely, percentage of overlap can provide strong confidence in tapping
&gt; +// on a small target, where the overlap is often quite high, and works well
&gt; +// for tightly packed controls.
&gt; +float hybridDistanceFunction(const IntPoint&amp; touchHotspot, const IntRect&amp; touchArea, const SubtargetGeometry&amp; subtarget)
&gt; +{
&gt; +    IntRect rect = subtarget.boundingBox();
&gt; +
&gt; +    // Convert from frame coordinates to window coordinates.
&gt; +    rect = subtarget.node()-&gt;document()-&gt;view()-&gt;contentsToWindow(rect);
&gt; +   
&gt; +    float touchWidth = touchArea.width();
&gt; +    float touchHeight = touchArea.height();
&gt; +    float distanceScale =  touchWidth * touchWidth + touchHeight * touchHeight;
&gt; +    float distanceToCenterScore = rect.distanceSquaredFromCenterLineToPoint(touchHotspot) / distanceScale;
&gt; +
&gt; +    float targetArea = rect.size().area();
&gt; +    rect.intersect(touchArea);
&gt; +    float intersectArea = rect.size().area();
&gt; +    float intersectionScore = 1 - intersectArea / targetArea;
&gt; +
&gt; +    return intersectionScore &lt; distanceToCenterScore ? intersectionScore : distanceToCenterScore;
&gt; +}
&gt; +

I would love to see a separate test-case for this change. That was the primary reason I suggested splitting the patch. A test case could also help highlight exactly how and where this is most useful.

&gt; Source/WebCore/page/TouchAdjustment.cpp:388
&gt; +        } else if (distanceMetric - bestDistanceMetric &lt; zeroTolerance) {
&gt; +            if (snapTo(*it, touchHotspot, touchArea, adjustedPoint)) {
&gt; +                if (node-&gt;isDescendantOf(targetNode)) {
&gt; +                    // Try to always return the inner-most element.
&gt; +                    targetPoint = adjustedPoint;
&gt; +                    targetNode = node;
&gt; +                    targetArea = it-&gt;boundingBox();
&gt; +                } else {
&gt; +                    // Minimize adjustment distance.
&gt; +                    float dx = targetPoint.x() - touchHotspot.x();
&gt; +                    float dy = targetPoint.y() - touchHotspot.y();
&gt; +                    float bestDistance = dx * dx + dy * dy;
&gt; +                    dx = adjustedPoint.x() - touchHotspot.x();
&gt; +                    dy = adjustedPoint.y() - touchHotspot.y();
&gt; +                    float distance = dx * dx + dy * dy;
&gt; +                    if (distance &lt; bestDistance) {
&gt; +                        targetPoint = adjustedPoint;
&gt; +                        targetNode = node;
&gt; +                        targetArea = it-&gt;boundingBox();
&gt; +                    }
&gt; +                }

Are you sure this part is still needed? Or is this needed because the shadowHost-&gt;hasTagName() check matches too many non-responding siblings of the cancel-button?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678119</commentid>
    <comment_count>10</comment_count>
      <attachid>154115</attachid>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-25 08:55:24 -0700</bug_when>
    <thetext>Comment on attachment 154115
Patch

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

&gt;&gt; Source/WebCore/page/TouchAdjustment.cpp:79
&gt;&gt; +    if (shadowHost &amp;&amp; shadowHost-&gt;hasTagName(HTMLNames::inputTag))
&gt; 
&gt; I would love if this check was slightly more generic than just inputTag, but I guess this is acceptable as an interim solution. You might want to check if the input tag is disabled or readonly though.

Can certainly add a check for disabled or readonly inputs.

&gt;&gt; Source/WebCore/page/TouchAdjustment.cpp:275
&gt;&gt; +
&gt; 
&gt; I would love to see a separate test-case for this change. That was the primary reason I suggested splitting the patch. A test case could also help highlight exactly how and where this is most useful.

Initially reluctant to split the patch since the fix to candidate pruning above only accounts for a touch accuracy improvement of roughly 5% to 30% (based on manually testing Chrome with a touch screen).  The rest of the benefit comes from improved scoring. 

Having said that, the scoring addresses other use cases and can look at adding separate tests and a separate &quot;improved scoring&quot; bug.  The distance to center scoring seems to be problematic when there very small targets inline with other controls.  A few tricky test cases would certainly help.

&gt;&gt; Source/WebCore/page/TouchAdjustment.cpp:388
&gt;&gt; +                }
&gt; 
&gt; Are you sure this part is still needed? Or is this needed because the shadowHost-&gt;hasTagName() check matches too many non-responding siblings of the cancel-button?

Yes, the tie break is necessary.  If the touch completely covers multiple controls, then there will be several controls with a zero score.  In fact, two of the existing tests fail without the tie-breaker as they use very large touch areas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679381</commentid>
    <comment_count>11</comment_count>
      <attachid>154662</attachid>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-26 08:56:55 -0700</bug_when>
    <thetext>Created attachment 154662
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679384</commentid>
    <comment_count>12</comment_count>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-26 08:59:35 -0700</bug_when>
    <thetext>Split out refinement to touch adjustment into 92293.  As a result, the test contains a few expected fails until the targeting issue is resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680276</commentid>
    <comment_count>13</comment_count>
      <attachid>153575</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-27 01:16:34 -0700</bug_when>
    <thetext>Comment on attachment 153575
Patch

Cleared review? from obsolete attachment 153575 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680546</commentid>
    <comment_count>14</comment_count>
      <attachid>154662</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-07-27 06:36:23 -0700</bug_when>
    <thetext>Comment on attachment 154662
Patch

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

&gt; Source/WebCore/page/TouchAdjustment.cpp:81
&gt; +    Element* shadowHost = node-&gt;shadowHost();
&gt; +    if (shadowHost &amp;&amp; shadowHost-&gt;hasTagName(HTMLNames::inputTag)) {
&gt; +        HTMLInputElement* input = static_cast&lt;HTMLInputElement*&gt;(shadowHost);
&gt; +        if (!input-&gt;readOnly() &amp;&amp; !input-&gt;disabled())
&gt; +            return true;
&gt; +    }

so any shadow content of an input will be a valid target?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680577</commentid>
    <comment_count>15</comment_count>
      <attachid>154662</attachid>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-27 06:56:39 -0700</bug_when>
    <thetext>Comment on attachment 154662
Patch

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

&gt;&gt; Source/WebCore/page/TouchAdjustment.cpp:81
&gt;&gt; +    }
&gt; 
&gt; so any shadow content of an input will be a valid target?

Yes, based on an inspection of the current set of shadow DOM elements inside the input tags, I believe that they should all be considered as candidates.  Until we have a more generic way of testing (see 92093), it seems safer to err on the side of too many candidates than too few. Having said that, I cannot think of a case where we have a shadow DOM element inside an input tag that should not be a candidate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680601</commentid>
    <comment_count>16</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-07-27 07:15:07 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 154662 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=154662&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/page/TouchAdjustment.cpp:81
&gt; &gt;&gt; +    }
&gt; &gt; 
&gt; &gt; so any shadow content of an input will be a valid target?
&gt; 
&gt; Yes, based on an inspection of the current set of shadow DOM elements inside the input tags, I believe that they should all be considered as candidates.  Until we have a more generic way of testing (see 92093), it seems safer to err on the side of too many candidates than too few. Having said that, I cannot think of a case where we have a shadow DOM element inside an input tag that should not be a candidate.

But we have a lot of &quot;container&quot; nodes/divs in input shadow trees. Let me think about it for a bit ...

Anyways, it is not that the solution would not work. I will see if we can be less generic here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680640</commentid>
    <comment_count>17</comment_count>
      <attachid>154662</attachid>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-27 07:48:33 -0700</bug_when>
    <thetext>Comment on attachment 154662
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/page/TouchAdjustment.cpp:81
&gt;&gt;&gt;&gt; +    }
&gt;&gt;&gt; 
&gt;&gt;&gt; so any shadow content of an input will be a valid target?
&gt;&gt; 
&gt;&gt; Yes, based on an inspection of the current set of shadow DOM elements inside the input tags, I believe that they should all be considered as candidates.  Until we have a more generic way of testing (see 92093), it seems safer to err on the side of too many candidates than too few. Having said that, I cannot think of a case where we have a shadow DOM element inside an input tag that should not be a candidate.
&gt; 
&gt; But we have a lot of &quot;container&quot; nodes/divs in input shadow trees. Let me think about it for a bit ...
&gt; 
&gt; Anyways, it is not that the solution would not work. I will see if we can be less generic here.

This interim fix will be deprecated by node-&gt;willRespondToMouseClickEvents() in 92093.  Looks like it is progressing well and if it can land quickly, I&apos;d be happy to pull out this shadowHost testing and simply check in the test case to ensure that &quot;search cancel&quot; stays fixed.  Will need to update the test expectations once 92293 (touch scoring) lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680884</commentid>
    <comment_count>18</comment_count>
      <attachid>155000</attachid>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-27 11:47:29 -0700</bug_when>
    <thetext>Created attachment 155000
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681112</commentid>
    <comment_count>19</comment_count>
      <attachid>155000</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-27 14:49:54 -0700</bug_when>
    <thetext>Comment on attachment 155000
Patch

Clearing flags on attachment: 155000

Committed r123919: &lt;http://trac.webkit.org/changeset/123919&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681114</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-27 14:50:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153575</attachid>
            <date>2012-07-20 12:59:57 -0700</date>
            <delta_ts>2012-07-27 01:16:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91894-20120720155952.patch</filename>
            <type>text/plain</type>
            <size>14653</size>
            <attacher name="Kevin Ellis">kevers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2IyZDdjMDU1YTEyYmZk
ZmRkZDYzZWJkMGMwNzg0ODljZGIwNzFlOC4uNDc5YzdlNjExODYwYWY2OGVhYTU5NDk2MzRiNjI5
OWYwM2M2NjAwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTA3LTIwICBLZXZp
biBFbGxpcyAgPGtldmVyc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2VhcmNoIGNhbmNlbCBi
dXR0b24gaXMgaGFyZCB0byBhY3RpdmF0ZSB3aXRoIGEgdGFwIGdlc3R1cmUgZXZlbiBpZiB0b3Vj
aCBhZGp1c3RtZW50IGlzIGVuYWJsZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MTg5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFVwZGF0ZSB0b3VjaCBhZGp1c3RtZW50IHRvIGJldHRlciBkZWFsIHdp
dGggc21hbGwgY29udHJvbHMgYXR0YWNoZWQgdG8gYW4gaW5wdXQgZmllbGQuCisgICAgICAgIFBy
aW9yIHRvIHRoZSBwYXRjaCwgdGhlIGNhbmNlbCBidXR0b24gd2FzIGJlaW5nIGRpc2NhcmRlZCBh
cyBhIGNhbmRpZGF0ZSBmb3IgdG91Y2gKKyAgICAgICAgYWRqdXN0bWVudCBpZiB0aGUgdG91Y2gg
YXJlYSBjbGlwcGVkIHRoZSB0ZXh0IGlucHV0IHJlZ2lvbiBiZWNhdXNlIHRoZSBjYW5kaWRhdGUg
cHJ1bmluZworICAgICAgICBwcm9jZXNzIGZhaWxlZCB0byBhY2NvdW50IGZvciB0aGUgY2FuY2Vs
IGJ1dHRvbiBoYXZpbmcgYSBkZWZhdWx0IG1vdXNlIGhhbmRsZXIuICBGdXJ0aGVybW9yZSwKKyAg
ICAgICAgdGhlIHVzZSBvZiBkaXN0YW5jZSB0byBjZW50ZXJsaW5lIGFzIHRoZSBvbmx5IHNjb3Jp
bmcgbWV0cmljIHJlc3VsdHMgaW4gYSBiaWFzIHRvd2FyZHMgbGFyZ2VyCisgICAgICAgIGVsZW1l
bnRzIHdoZW4gY29udHJvbHMgYXJlIHRpZ2h0bHkgcGFja2VkIGhvcml6b250YWxseS4gIFVzaW5n
IGEgaHlicmlkIG9mIGRpc3RhbmNlIHRvIGNlbnRlcgorICAgICAgICBhbmQgcGVyY2VudCBvdmVy
bGFwIHJlc3VsdHMgaW4gYmV0dGVyIGRpc2FtYmlndWF0aW9uLgorCisgICAgICAgIFRlc3Q6IHRv
dWNoYWRqdXN0bWVudC9zZWFyY2gtY2FuY2VsLmh0bWwKKworICAgICAgICAqIHBhZ2UvVG91Y2hB
ZGp1c3RtZW50LmNwcDoKKyAgICAgICAgKFRvdWNoQWRqdXN0bWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpUb3VjaEFkanVzdG1lbnQ6Om5vZGVSZXNwb25kc1RvVGFwR2VzdHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6Omh5YnJpZERpc3RhbmNlRnVuY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjpmaW5kTm9kZVdpdGhMb3dlc3REaXN0YW5j
ZU1ldHJpYyk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kQmVzdENsaWNrYWJsZUNhbmRpZGF0ZSk6
CisKIDIwMTItMDctMTkgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTIzMTE3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3Vj
aEFkanVzdG1lbnQuY3BwCmluZGV4IGNmNGJhMWJiMzdhNTAxNDczOTZlZTNlYWI1YTc2NWUzZWFl
ZGQ1NWQuLjlhYjQ2NjIzMTQ0ODNkMzMyZDZlZWEyNGRlNGY4YjUzMmNkZTI0ODQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAKQEAgLTM5LDYgKzM5LDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgVG91Y2hBZGp1c3RtZW50IHsKIAorY29uc3QgZmxv
YXQgemVyb1RvbGVyYW5jZSA9IDFlLTZmOworCiAvLyBDbGFzcyBmb3IgcmVtZW1iZXJpbmcgYWJz
b2x1dGUgcXVhZHMgb2YgYSB0YXJnZXQgbm9kZSBhbmQgd2hhdCBub2RlIHRoZXkgcmVwcmVzZW50
LgogY2xhc3MgU3VidGFyZ2V0R2VvbWV0cnkgewogcHVibGljOgpAQCAtNzIsNiArNzQsMTAgQEAg
Ym9vbCBub2RlUmVzcG9uZHNUb1RhcEdlc3R1cmUoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsYWJlbFRhZykgJiYgc3RhdGljX2Nhc3Q8SFRN
TExhYmVsRWxlbWVudCo+KGVsZW1lbnQpLT5jb250cm9sKCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CisgICAgTm9kZSogYW5jZXN0b3JOb2RlID0gbm9kZS0+c2hhZG93QW5jZXN0
b3JOb2RlKCk7CisgICAgaWYgKGFuY2VzdG9yTm9kZSAhPSBub2RlICYmIGFuY2VzdG9yTm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGhhc0RlZmF1bHRFdmVudEhhbmRsZXIgYW5kIHVzZSB0
aGF0IGluc3RlYWQgb2YgYWxsIG9mIHRoZSBhYm92ZSBjaGVja3MuCiAgICAgaWYgKG5vZGUtPmhh
c0V2ZW50TGlzdGVuZXJzKCkKICAgICAgICAgJiYgKG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2
ZW50TmFtZXMoKS5jbGlja0V2ZW50KQpAQCAtMjE5LDcgKzIyNSw2IEBAIGZsb2F0IGRpc3RhbmNl
U3F1YXJlZFRvVGFyZ2V0Q2VudGVyTGluZShjb25zdCBJbnRQb2ludCYgdG91Y2hIb3RzcG90LCBj
b25zdCBJbnRSCiAgICAgcmV0dXJuIHJlY3QuZGlzdGFuY2VTcXVhcmVkRnJvbUNlbnRlckxpbmVU
b1BvaW50KHRvdWNoSG90c3BvdCk7CiB9CiAKLQogLy8gVGhpcyByZXR1cm5zIHF1b3RpZW50IG9m
IHRoZSB0YXJnZXQgYXJlYSBhbmQgaXRzIGludGVyc2VjdGlvbiB3aXRoIHRoZSB0b3VjaCBhcmVh
LgogLy8gVGhpcyB3aWxsIHByaW9yaXRpemUgbGFyZ2VzdCBpbnRlcnNlY3Rpb24gYW5kIHNtYWxs
ZXN0IGFyZWEsIHdoaWxlIGJhbGFuY2luZyB0aGUgdHdvIGFnYWluc3QgZWFjaCBvdGhlci4KIGZs
b2F0IHpvb21hYmxlSW50ZXJzZWN0aW9uUXVvdGllbnQoY29uc3QgSW50UG9pbnQmIHRvdWNoSG90
c3BvdCwgY29uc3QgSW50UmVjdCYgdG91Y2hBcmVhLCBjb25zdCBTdWJ0YXJnZXRHZW9tZXRyeSYg
c3VidGFyZ2V0KQpAQCAtMjM5LDYgKzI0NCwzNCBAQCBmbG9hdCB6b29tYWJsZUludGVyc2VjdGlv
blF1b3RpZW50KGNvbnN0IEludFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IEludFJlY3QmCiAg
ICAgcmV0dXJuIHJlY3Quc2l6ZSgpLmFyZWEoKSAvIChmbG9hdClpbnRlcnNlY3Rpb24uc2l6ZSgp
LmFyZWEoKTsKIH0KIAorLy8gVXNlcyBhIGh5YnJpZCBvZiBkaXN0YW5jZSB0byBjZW50ZXIgYW5k
IGludGVyc2VjdCByYXRpbywgbm9ybWFsaXppbmcgZWFjaAorLy8gc2NvcmUgYmV0d2VlbiAwIGFu
ZCAxIGFuZCBjaG9vc2luZyB0aGUgYmV0dGVyIHNjb3JlLiBUaGUgZGlzdGFuY2UgdG8KKy8vIGNl
bnRlcmxpbmUgd29ya3MgYmVzdCBmb3IgZGlzYW1iaWd1YXRpbmcgY2xpY2tzIG9uIHRhcmdldHMg
c3VjaCBhcyBsaW5rcywKKy8vIHdoZXJlIHRoZSB3aWR0aCBtYXkgYmUgc2lnbmlmaWNhbnRseSBs
YXJnZXIgdGhhbiB0aGUgdG91Y2ggd2lkdGguIFVzaW5nCisvLyBhcmVhIG9mIG92ZXJsYXAgaW4g
c3VjaCBjYXNlcyBjYW4gbGVhZCB0byBhIGJpYXMgdG93YXJkcyBzaG9ydGVyIGxpbmtzLgorLy8g
Q29udmVyc2VseSwgcGVyY2VudGFnZSBvZiBvdmVybGFwIGNhbiBwcm92aWRlIHN0cm9uZyBjb25m
aWRlbmNlIGluIHRhcHBpbmcKKy8vIG9uIGEgc21hbGwgdGFyZ2V0LCB3aGVyZSB0aGUgb3Zlcmxh
cCBpcyBvZnRlbiBxdWl0ZSBoaWdoLCBhbmQgd29ya3Mgd2VsbAorLy8gZm9yIHRpZ2h0bHkgcGFj
a2VkIGNvbnRyb2xzLgorZmxvYXQgaHlicmlkRGlzdGFuY2VGdW5jdGlvbihjb25zdCBJbnRQb2lu
dCYgdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0JiB0b3VjaEFyZWEsIGNvbnN0IFN1YnRhcmdl
dEdlb21ldHJ5JiBzdWJ0YXJnZXQpCit7CisgICAgSW50UmVjdCByZWN0ID0gc3VidGFyZ2V0LmJv
dW5kaW5nQm94KCk7CisKKyAgICAvLyBDb252ZXJ0IGZyb20gZnJhbWUgY29vcmRpbmF0ZXMgdG8g
d2luZG93IGNvb3JkaW5hdGVzLgorICAgIHJlY3QgPSBzdWJ0YXJnZXQubm9kZSgpLT5kb2N1bWVu
dCgpLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CisgICAKKyAgICBmbG9hdCB0b3Vj
aFdpZHRoID0gdG91Y2hBcmVhLndpZHRoKCk7CisgICAgZmxvYXQgdG91Y2hIZWlnaHQgPSB0b3Vj
aEFyZWEuaGVpZ2h0KCk7CisgICAgZmxvYXQgZGlzdGFuY2VTY2FsZSA9ICB0b3VjaFdpZHRoICog
dG91Y2hXaWR0aCArIHRvdWNoSGVpZ2h0ICogdG91Y2hIZWlnaHQ7CisgICAgZmxvYXQgZGlzdGFu
Y2VUb0NlbnRlclNjb3JlID0gcmVjdC5kaXN0YW5jZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9p
bnQodG91Y2hIb3RzcG90KSAvIGRpc3RhbmNlU2NhbGU7CisKKyAgICBmbG9hdCB0YXJnZXRBcmVh
ID0gcmVjdC5zaXplKCkuYXJlYSgpOworICAgIHJlY3QuaW50ZXJzZWN0KHRvdWNoQXJlYSk7Cisg
ICAgZmxvYXQgaW50ZXJzZWN0QXJlYSA9IHJlY3Quc2l6ZSgpLmFyZWEoKTsKKyAgICBmbG9hdCBp
bnRlcnNlY3Rpb25TY29yZSA9IDEgLSBpbnRlcnNlY3RBcmVhIC8gdGFyZ2V0QXJlYTsKKworICAg
IHJldHVybiBpbnRlcnNlY3Rpb25TY29yZSA8IGRpc3RhbmNlVG9DZW50ZXJTY29yZSA/IGludGVy
c2VjdGlvblNjb3JlIDogZGlzdGFuY2VUb0NlbnRlclNjb3JlOworfQorCiBGbG9hdFBvaW50IGNv
bnRlbnRzVG9XaW5kb3coRnJhbWVWaWV3ICp2aWV3LCBGbG9hdFBvaW50IHB0KQogewogICAgIGlu
dCB4ID0gc3RhdGljX2Nhc3Q8aW50PihwdC54KCkgKyAwLjVmKTsKQEAgLTMyMCw2ICszNTMsNyBA
QCBib29sIGZpbmROb2RlV2l0aExvd2VzdERpc3RhbmNlTWV0cmljKE5vZGUqJiB0YXJnZXROb2Rl
LCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQsCiAgICAgU3VidGFyZ2V0R2VvbWV0cnlMaXN0Ojpjb25z
dF9pdGVyYXRvciBpdCA9IHN1YnRhcmdldHMuYmVnaW4oKTsKICAgICBjb25zdCBTdWJ0YXJnZXRH
ZW9tZXRyeUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN1YnRhcmdldHMuZW5kKCk7CiAgICAg
SW50UG9pbnQgYWRqdXN0ZWRQb2ludDsKKwogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgTm9kZSogbm9kZSA9IGl0LT5ub2RlKCk7CiAgICAgICAgIGZsb2F0IGRpc3RhbmNl
TWV0cmljID0gZGlzdGFuY2VGdW5jdGlvbih0b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgKml0KTsK
QEAgLTMzMCwxMiArMzY0LDI3IEBAIGJvb2wgZmluZE5vZGVXaXRoTG93ZXN0RGlzdGFuY2VNZXRy
aWMoTm9kZSomIHRhcmdldE5vZGUsIEludFBvaW50JiB0YXJnZXRQb2ludCwKICAgICAgICAgICAg
ICAgICB0YXJnZXROb2RlID0gbm9kZTsKICAgICAgICAgICAgICAgICBiZXN0RGlzdGFuY2VNZXRy
aWMgPSBkaXN0YW5jZU1ldHJpYzsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChk
aXN0YW5jZU1ldHJpYyA9PSBiZXN0RGlzdGFuY2VNZXRyaWMpIHsKLSAgICAgICAgICAgIC8vIFRy
eSB0byBhbHdheXMgcmV0dXJuIHRoZSBpbm5lci1tb3N0IGVsZW1lbnQuCi0gICAgICAgICAgICBp
ZiAobm9kZS0+aXNEZXNjZW5kYW50T2YodGFyZ2V0Tm9kZSkgJiYgc25hcFRvKCppdCwgdG91Y2hI
b3RzcG90LCB0b3VjaEFyZWEsIGFkanVzdGVkUG9pbnQpKSB7Ci0gICAgICAgICAgICAgICAgdGFy
Z2V0UG9pbnQgPSBhZGp1c3RlZFBvaW50OwotICAgICAgICAgICAgICAgIHRhcmdldE5vZGUgPSBu
b2RlOwotICAgICAgICAgICAgICAgIHRhcmdldEFyZWEgPSBpdC0+Ym91bmRpbmdCb3goKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChkaXN0YW5jZU1ldHJpYyAtIGJlc3REaXN0YW5jZU1ldHJpYyA8IHpl
cm9Ub2xlcmFuY2UpIHsKKyAgICAgICAgICAgIGlmIChzbmFwVG8oKml0LCB0b3VjaEhvdHNwb3Qs
IHRvdWNoQXJlYSwgYWRqdXN0ZWRQb2ludCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
aXNEZXNjZW5kYW50T2YodGFyZ2V0Tm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVHJ5
IHRvIGFsd2F5cyByZXR1cm4gdGhlIGlubmVyLW1vc3QgZWxlbWVudC4KKyAgICAgICAgICAgICAg
ICAgICAgdGFyZ2V0UG9pbnQgPSBhZGp1c3RlZFBvaW50OworICAgICAgICAgICAgICAgICAgICB0
YXJnZXROb2RlID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QXJlYSA9IGl0LT5i
b3VuZGluZ0JveCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIE1pbmltaXplIGFkanVzdG1lbnQgZGlzdGFuY2UuCisgICAgICAgICAgICAgICAgICAg
IGZsb2F0IGR4ID0gdGFyZ2V0UG9pbnQueCgpIC0gdG91Y2hIb3RzcG90LngoKTsKKyAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgZHkgPSB0YXJnZXRQb2ludC55KCkgLSB0b3VjaEhvdHNwb3QueSgp
OworICAgICAgICAgICAgICAgICAgICBmbG9hdCBiZXN0RGlzdGFuY2UgPSBkeCAqIGR4ICsgZHkg
KiBkeTsKKyAgICAgICAgICAgICAgICAgICAgZHggPSBhZGp1c3RlZFBvaW50LngoKSAtIHRvdWNo
SG90c3BvdC54KCk7CisgICAgICAgICAgICAgICAgICAgIGR5ID0gYWRqdXN0ZWRQb2ludC55KCkg
LSB0b3VjaEhvdHNwb3QueSgpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBkaXN0YW5jZSA9
IGR4ICogZHggKyBkeSAqIGR5OworICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCBi
ZXN0RGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFBvaW50ID0gYWRq
dXN0ZWRQb2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5vZGUgPSBub2RlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QXJlYSA9IGl0LT5ib3VuZGluZ0JveCgpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpAQCAtMzUyLDcgKzQwMSw3IEBAIGJvb2wgZmluZEJlc3RDbGlja2Fi
bGVDYW5kaWRhdGUoTm9kZSomIHRhcmdldE5vZGUsIEludFBvaW50ICZ0YXJnZXRQb2ludCwgY29u
c3QKICAgICBJbnRSZWN0IHRhcmdldEFyZWE7CiAgICAgVG91Y2hBZGp1c3RtZW50OjpTdWJ0YXJn
ZXRHZW9tZXRyeUxpc3Qgc3VidGFyZ2V0czsKICAgICBUb3VjaEFkanVzdG1lbnQ6OmNvbXBpbGVT
dWJ0YXJnZXRMaXN0KG5vZGVMaXN0LCBzdWJ0YXJnZXRzLCBUb3VjaEFkanVzdG1lbnQ6Om5vZGVS
ZXNwb25kc1RvVGFwR2VzdHVyZSk7Ci0gICAgcmV0dXJuIFRvdWNoQWRqdXN0bWVudDo6ZmluZE5v
ZGVXaXRoTG93ZXN0RGlzdGFuY2VNZXRyaWModGFyZ2V0Tm9kZSwgdGFyZ2V0UG9pbnQsIHRhcmdl
dEFyZWEsIHRvdWNoSG90c3BvdCwgdG91Y2hBcmVhLCBzdWJ0YXJnZXRzLCBUb3VjaEFkanVzdG1l
bnQ6OmRpc3RhbmNlU3F1YXJlZFRvVGFyZ2V0Q2VudGVyTGluZSk7CisgICAgcmV0dXJuIFRvdWNo
QWRqdXN0bWVudDo6ZmluZE5vZGVXaXRoTG93ZXN0RGlzdGFuY2VNZXRyaWModGFyZ2V0Tm9kZSwg
dGFyZ2V0UG9pbnQsIHRhcmdldEFyZWEsIHRvdWNoSG90c3BvdCwgdG91Y2hBcmVhLCBzdWJ0YXJn
ZXRzLCBUb3VjaEFkanVzdG1lbnQ6Omh5YnJpZERpc3RhbmNlRnVuY3Rpb24pOwogfQogCiBib29s
IGZpbmRCZXN0Wm9vbWFibGVBcmVhKE5vZGUqJiB0YXJnZXROb2RlLCBJbnRSZWN0JiB0YXJnZXRB
cmVhLCBjb25zdCBJbnRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0JiB0b3VjaEFy
ZWEsIGNvbnN0IE5vZGVMaXN0JiBub2RlTGlzdCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1YmZlYzg2M2M3OWU1NjRhZmVm
YzRlNDZjM2JiODExMDFhNDYzY2Q0Li4xMjJkNTA4MDVkNTE1NGRjMDQwY2M5MTczNzFiMWYxMmU4
ODk2NTJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDctMjAgIEtldmluIEVsbGlzICA8
a2V2ZXJzQGNocm9taXVtLm9yZz4KKworICAgICAgICBTZWFyY2ggY2FuY2VsIGJ1dHRvbiBpcyBo
YXJkIHRvIGFjdGl2YXRlIHdpdGggYSB0YXAgZ2VzdHVyZSBldmVuIGlmIHRvdWNoIGFkanVzdG1l
bnQgaXMgZW5hYmxlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTkxODk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIHRlc3QgZm9yIHRvdWNoIGFkanVzdG1lbnQgaW4gdGhlIHZpY2luaXR5IG9mIGEg
c2VhcmNoIGNhbmNlbCBidXR0b24uICBQcmlvciB0byB0aGUgcGF0Y2gsCisgICAgICAgIHRvdWNo
IGFkanVzdG1lbnQgc2hvd2VkIGEgc3Ryb25nIGJpYXMgdG93YXJkcyB0aGUgdGV4dCBpbnB1dCBy
ZWdpb24gZXZlbiBpZiB0aGUgY2FuY2VsIGJ1dHRvbgorICAgICAgICB3YXMgY29tcGxldGVseSB3
aXRoaW4gdGhlIHRvdWNoIGFyZWEuCisKKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvc2VhcmNo
LWNhbmNlbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9z
ZWFyY2gtY2FuY2VsLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA3LTE5ICBKYW1lcyBTaW1vbnNlbiAg
PHNpbW9uamFtQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZWdyZXNzaW9uKDEyMDA5Nik6IFBy
b3RlY3QgdGhlIGVsZW1lbnQgdXNlZCBieSBJbWFnZUxvYWRlciB1bnRpbCB0aGUgZW5kIG9mIG5v
dGlmeUZpbmlzaGVkKCkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQv
c2VhcmNoLWNhbmNlbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQv
c2VhcmNoLWNhbmNlbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjEyNjI1Y2RiMmExZTRhZGE5
NDQyODhiZDk0Mzk1ZGQ4YTQxYjAyYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3Rv
dWNoYWRqdXN0bWVudC9zZWFyY2gtY2FuY2VsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMwIEBA
CisKK1Rlc3QgdG91Y2ggYWRqdXN0bWVudCBvbiBhIHNlYXJjaCBmaWVsZCB3aXRoIGEgdmlzaWJs
ZSBjYW5jZWwgYnV0dG9uLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworCitUb3Vj
aCBjZW50ZXJlZCBvbiBjYW5jZWwgYnV0dG9uIGJ1dCBvdmVybGFwcGluZyBuZWlnaGJvcmluZyBj
YW5kaWRhdGUuCitQQVNTIHRhcmdldENvbnRhaW5zUG9pbnQgaXMgdHJ1ZQorUEFTUyB0b3VjaENv
bnRhaW5zUG9pbnQgaXMgdHJ1ZQorCitPZmYtY2VudGVyIHRvdWNoZXMgZW5jbG9zaW5nIGNhbmNl
bCBidXR0b24uCitQQVNTIHRhcmdldENvbnRhaW5zUG9pbnQgaXMgdHJ1ZQorUEFTUyB0b3VjaENv
bnRhaW5zUG9pbnQgaXMgdHJ1ZQorUEFTUyB0YXJnZXRDb250YWluc1BvaW50IGlzIHRydWUKK1BB
U1MgdG91Y2hDb250YWluc1BvaW50IGlzIHRydWUKK1BBU1MgdGFyZ2V0Q29udGFpbnNQb2ludCBp
cyB0cnVlCitQQVNTIHRvdWNoQ29udGFpbnNQb2ludCBpcyB0cnVlCisKK1RvdWNoZXMgY2xpcHBp
bmcgbGVmdCBlZGdlIG9mIGNhbmNlbC1idXR0b24uCitQQVNTIHRhcmdldENvbnRhaW5zUG9pbnQg
aXMgdHJ1ZQorUEFTUyB0b3VjaENvbnRhaW5zUG9pbnQgaXMgdHJ1ZQorUEFTUyB0YXJnZXRDb250
YWluc1BvaW50IGlzIHRydWUKK1BBU1MgdG91Y2hDb250YWluc1BvaW50IGlzIHRydWUKK1BBU1Mg
dGFyZ2V0Q29udGFpbnNQb2ludCBpcyB0cnVlCitQQVNTIHRvdWNoQ29udGFpbnNQb2ludCBpcyB0
cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3NlYXJjaC1jYW5jZWwuaHRt
bCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9zZWFyY2gtY2FuY2VsLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTE3MzdlYzMyMTRhMGRiMTc0Y2EwZTQxNDY1YmFmNzI4NDhiYzcxMgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9zZWFyY2gtY2FuY2VsLmh0bWwK
QEAgLTAsMCArMSwxNDIgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgICAgaW5wdXRbdHlw
ZT0nc2VhcmNoJ10geworICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgICAgLXdl
YmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgICAgYm9yZGVyOiAxcHggc29saWQgIzk5
OTsKKyAgICAgIHBhZGRpbmc6IDVweDsKKyAgICB9CisKKyAgICBpbnB1dFt0eXBlPSdzZWFyY2gn
XTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiB7CisgICAgICAtd2Via2l0LWFwcGVhcmFu
Y2U6IG5vbmU7CisgICAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgICBi
YWNrZ3JvdW5kOiAjOTk5OworICAgICAgaGVpZ2h0OiAxMHB4OworICAgICAgbWFyZ2luOiAwOwor
ICAgICAgcGFkZGluZzogMDsKKyAgICAgIHdpZHRoOiAxMHB4OworICAgIH0KKzwvc3R5bGU+Cis8
c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorCis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKSI+CisKKzxkaXY+CisgIDxp
bnB1dCBpZD0idGFyZ2V0IiB0eXBlPSJzZWFyY2giIHZhbHVlPSJhYmNkIi8+Cis8L2Rpdj4KKwor
PHAgaWQ9J2Rlc2NyaXB0aW9uJz48L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKworPHNj
cmlwdD4KKyAgICB2YXIgZWxlbWVudDsKKyAgICB2YXIgYWRqdXN0ZWROb2RlOworICAgIHZhciBh
ZGp1c3RlZFBvaW50OworICAgIHZhciBpbnB1dEJvdW5kczsKKyAgICB2YXIgY2FuY2VsQm91bmRz
OworICAgIHZhciB0ZXh0Q29udGVudEJvdW5kczsKKyAgICB2YXIgdG91Y2hCb3VuZHM7CisgICAg
dmFyIHRhcmdldEJvdW5kczsKKyAgICB2YXIgdGFyZ2V0Q29udGFpbnNQb2ludDsKKyAgICB2YXIg
dG91Y2hDb250YWluc1BvaW50OworCisgICAgZnVuY3Rpb24gZmluZEFic29sdXRlUG9zaXRpb24o
bm9kZSkgeworICAgICAgICB2YXIgcG9zID0ge2xlZnQ6IDAsIHRvcDogMH07CisgICAgICAgIGRv
IHsKKyAgICAgICAgICAgIHBvcy5sZWZ0ICs9IG5vZGUub2Zmc2V0TGVmdDsKKyAgICAgICAgICAg
IHBvcy50b3AgKz0gbm9kZS5vZmZzZXRUb3A7CisgICAgICAgIH0gd2hpbGUgKG5vZGUgPSBub2Rl
Lm9mZnNldFBhcmVudCk7CisgICAgICAgIHJldHVybiBwb3M7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcnVuVG91Y2hUZXN0cygpIHsKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcign
Y2xpY2snLCBmdW5jdGlvbigpIHt9LCBmYWxzZSk7CisKKyAgICAgICAgZWxlbWVudCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCd0YXJnZXQnKTsKKyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNv
bHV0ZVBvc2l0aW9uKGVsZW1lbnQpOworCisgICAgICAgIHZhciB4ID0gcG9zLmxlZnQ7CisgICAg
ICAgIHZhciB5ID0gcG9zLnRvcDsKKyAgICAgICAgdmFyIHdpZHRoID0gZWxlbWVudC5jbGllbnRX
aWR0aDsKKyAgICAgICAgdmFyIGhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0OworCisgICAg
ICAgIGlucHV0Qm91bmRzID0geworICAgICAgICAgICAgeDogeCwKKyAgICAgICAgICAgIHk6IHks
CisgICAgICAgICAgICB3aWR0aDogd2lkdGgsCisgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodAor
ICAgICAgICB9OworCisgICAgICAgIHZhciB0b3VjaFJhZGl1cyA9IDIwOworICAgICAgICB2YXIg
b2Zmc2V0ID0gdG91Y2hSYWRpdXMgLyAyOworCisgICAgICAgIC8vIENlbnRlciBvZiBjYW5jZWwg
YnV0dG9uLgorICAgICAgICB2YXIgbWlkWCA9IHggKyB3aWR0aCAtIDExOworICAgICAgICB2YXIg
bWlkWSA9IHkgKyBoZWlnaHQgLyAyOworCisgICAgICAgIGNhbmNlbEJvdW5kcyA9IHsKKyAgICAg
ICAgICAgIHg6IG1pZFggLSA1LAorICAgICAgICAgICAgeTogbWlkWSAtIDUsCisgICAgICAgICAg
ICB3aWR0aDogMTAsCisgICAgICAgICAgICBoZWlnaHQ6IDEwCisgICAgICAgIH07CisKKyAgICAg
ICAgdGV4dENvbnRlbnRCb3VuZHMgPSB7CisgICAgICAgICAgIHg6IGlucHV0Qm91bmRzLngsCisg
ICAgICAgICAgIHk6IGlucHV0Qm91bmRzLnksCisgICAgICAgICAgIHdpZHRoOiBpbnB1dEJvdW5k
cy53aWR0aCAtIDE2LAorICAgICAgICAgICBoZWlnaHQ6IGlucHV0Qm91bmRzLmhlaWdodAorICAg
ICAgICB9OworCisgICAgICAgIGRlYnVnKCdcblRvdWNoIGNlbnRlcmVkIG9uIGNhbmNlbCBidXR0
b24gYnV0IG92ZXJsYXBwaW5nIG5laWdoYm9yaW5nIGNhbmRpZGF0ZS4nKTsKKyAgICAgICAgdGVz
dFRvdWNoKG1pZFgsIG1pZFksIHRvdWNoUmFkaXVzLCBjYW5jZWxCb3VuZHMpOworCisgICAgICAg
IGRlYnVnKCdcbk9mZi1jZW50ZXIgdG91Y2hlcyBlbmNsb3NpbmcgY2FuY2VsIGJ1dHRvbi4nKTsK
KyAgICAgICAgdGVzdFRvdWNoKG1pZFggLSBvZmZzZXQsIG1pZFksIHRvdWNoUmFkaXVzLCBjYW5j
ZWxCb3VuZHMpOworICAgICAgICB0ZXN0VG91Y2gobWlkWCAtIG9mZnNldCwgbWlkWSArIG9mZnNl
dCwgdG91Y2hSYWRpdXMsIGNhbmNlbEJvdW5kcyk7CisgICAgICAgIHRlc3RUb3VjaChtaWRYIC0g
b2Zmc2V0LCBtaWRZIC0gb2Zmc2V0LCB0b3VjaFJhZGl1cywgY2FuY2VsQm91bmRzKTsKKworICAg
ICAgICBkZWJ1ZygnXG5Ub3VjaGVzIGNsaXBwaW5nIGxlZnQgZWRnZSBvZiBjYW5jZWwtYnV0dG9u
LicpOworICAgICAgICB0ZXN0VG91Y2gobWlkWCAtIHRvdWNoUmFkaXVzIC0gMiwgbWlkWSwgdG91
Y2hSYWRpdXMsIHRleHRDb250ZW50Qm91bmRzKTsKKyAgICAgICAgdGVzdFRvdWNoKG1pZFggLSB0
b3VjaFJhZGl1cyAtIDIsIG1pZFkgLSBvZmZzZXQsIHRvdWNoUmFkaXVzLCB0ZXh0Q29udGVudEJv
dW5kcyk7CisgICAgICAgIHRlc3RUb3VjaChtaWRYIC0gdG91Y2hSYWRpdXMgLSAyLCBtaWRZICsg
b2Zmc2V0LCB0b3VjaFJhZGl1cywgdGV4dENvbnRlbnRCb3VuZHMpOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHRlc3RUb3VjaCh0b3VjaFgsIHRvdWNoWSwgcmFkaXVzLCBib3VuZHMpIHsKKworICAg
ICAgICB0YXJnZXRCb3VuZHMgPSBib3VuZHM7CisKKyAgICAgICAgdG91Y2hCb3VuZHMgPSB7Cisg
ICAgICAgICAgICB4OiB0b3VjaFggLSByYWRpdXMsCisgICAgICAgICAgICB5OiB0b3VjaFkgLSBy
YWRpdXMsCisgICAgICAgICAgICB3aWR0aDogMiAqIHJhZGl1cywKKyAgICAgICAgICAgIGhlaWdo
dDogMiAqIHJhZGl1cworICAgICAgICB9OworICAgICAgICBhZGp1c3RlZFBvaW50ID0gaW50ZXJu
YWxzLnRvdWNoUG9zaXRpb25BZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUodG91Y2hCb3VuZHMu
eCwgdG91Y2hCb3VuZHMueSwgdG91Y2hCb3VuZHMud2lkdGgsIHRvdWNoQm91bmRzLmhlaWdodCwg
ZG9jdW1lbnQpOworICAgICAgICB0YXJnZXRDb250YWluc1BvaW50ID0gY29udGFpbnNQb2ludCh0
YXJnZXRCb3VuZHMsIGFkanVzdGVkUG9pbnQpOworICAgICAgICB0b3VjaENvbnRhaW5zUG9pbnQg
PSBjb250YWluc1BvaW50KHRvdWNoQm91bmRzLCBhZGp1c3RlZFBvaW50KTsKKyAgICAgICAgc2hv
dWxkQmVUcnVlKCd0YXJnZXRDb250YWluc1BvaW50Jyk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgn
dG91Y2hDb250YWluc1BvaW50Jyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY29udGFpbnNQb2lu
dChib3VuZHMsIHBvaW50KSB7CisgICAgICAgIHJldHVybiBib3VuZHMueCA8PSBwb2ludC54ICYm
IGJvdW5kcy55IDw9IHBvaW50LnkgJiYgYm91bmRzLnggKyBib3VuZHMud2lkdGggPj0gcG9pbnQu
eCAmJiBib3VuZHMueSArIGJvdW5kcy5oZWlnaHQgPj0gcG9pbnQueTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBydW5UZXN0cygpCisgICAgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIg
JiYgd2luZG93LmludGVybmFscyAmJiBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RD
bGlja2FibGVOb2RlKSB7CisgICAgICAgICAgICBkZXNjcmlwdGlvbignVGVzdCB0b3VjaCBhZGp1
c3RtZW50IG9uIGEgc2VhcmNoIGZpZWxkIHdpdGggYSB2aXNpYmxlIGNhbmNlbCBidXR0b24uJyk7
CisgICAgICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIHRlc3RS
dW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgcnVuVG91Y2hUZXN0cygpOworICAg
ICAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154115</attachid>
            <date>2012-07-24 11:58:43 -0700</date>
            <delta_ts>2012-07-26 08:56:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91894-20120724145834.patch</filename>
            <type>text/plain</type>
            <size>14783</size>
            <attacher name="Kevin Ellis">kevers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc4ODg2MmNhOTBkYzg0
ZDQ3ODlkYjUzMTM2MzZiZTQyMjNmMjZiOS4uMTNiZTQxOTlmZGZiYzM3MDFmNzI0NjIyNTUxYzFm
ZGY1MWM5MjE0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA3LTI0ICBLZXZp
biBFbGxpcyAgPGtldmVyc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2VhcmNoIGNhbmNlbCBi
dXR0b24gaXMgaGFyZCB0byBhY3RpdmF0ZSB3aXRoIGEgdGFwIGdlc3R1cmUgZXZlbiBpZiB0b3Vj
aCBhZGp1c3RtZW50IGlzIGVuYWJsZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MTg5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFVwZGF0ZSB0b3VjaCBhZGp1c3RtZW50IHRvIGJldHRlciBkZWFsIHdp
dGggc21hbGwgY29udHJvbHMgYXR0YWNoZWQKKyAgICAgICAgdG8gYW4gaW5wdXQgZmllbGQuICBQ
cmlvciB0byB0aGUgcGF0Y2gsIHRoZSBjYW5jZWwgYnV0dG9uIHdhcyBiZWluZworICAgICAgICBk
aXNjYXJkZWQgYXMgYSBjYW5kaWRhdGUgZm9yIHRvdWNoIGFkanVzdG1lbnQgaWYgdGhlIHRvdWNo
IGFyZWEgCisgICAgICAgIGNsaXBwZWQgdGhlIHRleHQgaW5wdXQgcmVnaW9uIGJlY2F1c2UgdGhl
IGNhbmRpZGF0ZSBwcnVuaW5nIHByb2Nlc3MKKyAgICAgICAgZmFpbGVkIHRvIGFjY291bnQgZm9y
IHRoZSBjYW5jZWwgYnV0dG9uIGhhdmluZyBhIGRlZmF1bHQgbW91c2UKKyAgICAgICAgaGFuZGxl
ci4gIEZ1cnRoZXJtb3JlLCB0aGUgdXNlIG9mIGRpc3RhbmNlIHRvIGNlbnRlcmxpbmUgYXMgdGhl
IG9ubHkKKyAgICAgICAgc2NvcmluZyBtZXRyaWMgcmVzdWx0cyBpbiBhIGJpYXMgdG93YXJkcyBs
YXJnZXIgZWxlbWVudHMgd2hlbiBjb250cm9scworICAgICAgICBhcmUgdGlnaHRseSBwYWNrZWQg
aG9yaXpvbnRhbGx5LiAgVXNpbmcgYSBoeWJyaWQgb2YgZGlzdGFuY2UgdG8gY2VudGVyCisgICAg
ICAgIGFuZCBwZXJjZW50IG92ZXJsYXAgcmVzdWx0cyBpbiBiZXR0ZXIgZGlzYW1iaWd1YXRpb24u
CisKKyAgICAgICAgVGVzdDogdG91Y2hhZGp1c3RtZW50L3NlYXJjaC1jYW5jZWwuaHRtbAorCisg
ICAgICAgICogcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwOgorICAgICAgICAoVG91Y2hBZGp1c3Rt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6bm9kZVJlc3BvbmRzVG9U
YXBHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6aHlicmlkRGlz
dGFuY2VGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OmZpbmRO
b2RlV2l0aExvd2VzdERpc3RhbmNlTWV0cmljKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRCZXN0
Q2xpY2thYmxlQ2FuZGlkYXRlKToKKwogMjAxMi0wNy0yNCAgTmljbyBXZWJlciAgPHRoYWtpc0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtL21hY10gUmVtb3ZlIHdlYmNvcmVfcmVz
b3VyY2VfZmlsZXMgZnJvbSBXZWJDb3JlLmd5cGkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1
c3RtZW50LmNwcAppbmRleCBjZjRiYTFiYjM3YTUwMTQ3Mzk2ZWUzZWFiNWE3NjVlM2VhZWRkNTVk
Li4zMzBjZjZiMDliNzg2MzIzN2YxMTM2YWJhM2U2ODQyYTAwZjljMjc3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwCkBAIC0zNCwxMSArMzQsMTQgQEAKICNpbmNsdWRl
ICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBuYW1lc3BhY2UgVG91Y2hBZGp1c3RtZW50IHsKIAorY29uc3QgZmxvYXQgemVyb1RvbGVy
YW5jZSA9IDFlLTZmOworCiAvLyBDbGFzcyBmb3IgcmVtZW1iZXJpbmcgYWJzb2x1dGUgcXVhZHMg
b2YgYSB0YXJnZXQgbm9kZSBhbmQgd2hhdCBub2RlIHRoZXkgcmVwcmVzZW50LgogY2xhc3MgU3Vi
dGFyZ2V0R2VvbWV0cnkgewogcHVibGljOgpAQCAtNzIsNiArNzUsMTAgQEAgYm9vbCBub2RlUmVz
cG9uZHNUb1RhcEdlc3R1cmUoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpsYWJlbFRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVu
dCo+KGVsZW1lbnQpLT5jb250cm9sKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CisgICAgRWxlbWVudCogc2hhZG93SG9zdCA9IG5vZGUtPnNoYWRvd0hvc3QoKTsKKyAgICBpZiAo
c2hhZG93SG9zdCAmJiBzaGFkb3dIb3N0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgaGFzRGVm
YXVsdEV2ZW50SGFuZGxlciBhbmQgdXNlIHRoYXQgaW5zdGVhZCBvZiBhbGwgb2YgdGhlIGFib3Zl
IGNoZWNrcy4KICAgICBpZiAobm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoKQogICAgICAgICAmJiAo
bm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpCkBAIC0yMTks
NyArMjI2LDYgQEAgZmxvYXQgZGlzdGFuY2VTcXVhcmVkVG9UYXJnZXRDZW50ZXJMaW5lKGNvbnN0
IEludFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IEludFIKICAgICByZXR1cm4gcmVjdC5kaXN0
YW5jZVNxdWFyZWRGcm9tQ2VudGVyTGluZVRvUG9pbnQodG91Y2hIb3RzcG90KTsKIH0KIAotCiAv
LyBUaGlzIHJldHVybnMgcXVvdGllbnQgb2YgdGhlIHRhcmdldCBhcmVhIGFuZCBpdHMgaW50ZXJz
ZWN0aW9uIHdpdGggdGhlIHRvdWNoIGFyZWEuCiAvLyBUaGlzIHdpbGwgcHJpb3JpdGl6ZSBsYXJn
ZXN0IGludGVyc2VjdGlvbiBhbmQgc21hbGxlc3QgYXJlYSwgd2hpbGUgYmFsYW5jaW5nIHRoZSB0
d28gYWdhaW5zdCBlYWNoIG90aGVyLgogZmxvYXQgem9vbWFibGVJbnRlcnNlY3Rpb25RdW90aWVu
dChjb25zdCBJbnRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0JiB0b3VjaEFyZWEs
IGNvbnN0IFN1YnRhcmdldEdlb21ldHJ5JiBzdWJ0YXJnZXQpCkBAIC0yMzksNiArMjQ1LDM0IEBA
IGZsb2F0IHpvb21hYmxlSW50ZXJzZWN0aW9uUXVvdGllbnQoY29uc3QgSW50UG9pbnQmIHRvdWNo
SG90c3BvdCwgY29uc3QgSW50UmVjdCYKICAgICByZXR1cm4gcmVjdC5zaXplKCkuYXJlYSgpIC8g
KGZsb2F0KWludGVyc2VjdGlvbi5zaXplKCkuYXJlYSgpOwogfQogCisvLyBVc2VzIGEgaHlicmlk
IG9mIGRpc3RhbmNlIHRvIGNlbnRlciBhbmQgaW50ZXJzZWN0IHJhdGlvLCBub3JtYWxpemluZyBl
YWNoCisvLyBzY29yZSBiZXR3ZWVuIDAgYW5kIDEgYW5kIGNob29zaW5nIHRoZSBiZXR0ZXIgc2Nv
cmUuIFRoZSBkaXN0YW5jZSB0bworLy8gY2VudGVybGluZSB3b3JrcyBiZXN0IGZvciBkaXNhbWJp
Z3VhdGluZyBjbGlja3Mgb24gdGFyZ2V0cyBzdWNoIGFzIGxpbmtzLAorLy8gd2hlcmUgdGhlIHdp
ZHRoIG1heSBiZSBzaWduaWZpY2FudGx5IGxhcmdlciB0aGFuIHRoZSB0b3VjaCB3aWR0aC4gVXNp
bmcKKy8vIGFyZWEgb2Ygb3ZlcmxhcCBpbiBzdWNoIGNhc2VzIGNhbiBsZWFkIHRvIGEgYmlhcyB0
b3dhcmRzIHNob3J0ZXIgbGlua3MuCisvLyBDb252ZXJzZWx5LCBwZXJjZW50YWdlIG9mIG92ZXJs
YXAgY2FuIHByb3ZpZGUgc3Ryb25nIGNvbmZpZGVuY2UgaW4gdGFwcGluZworLy8gb24gYSBzbWFs
bCB0YXJnZXQsIHdoZXJlIHRoZSBvdmVybGFwIGlzIG9mdGVuIHF1aXRlIGhpZ2gsIGFuZCB3b3Jr
cyB3ZWxsCisvLyBmb3IgdGlnaHRseSBwYWNrZWQgY29udHJvbHMuCitmbG9hdCBoeWJyaWREaXN0
YW5jZUZ1bmN0aW9uKGNvbnN0IEludFBvaW50JiB0b3VjaEhvdHNwb3QsIGNvbnN0IEludFJlY3Qm
IHRvdWNoQXJlYSwgY29uc3QgU3VidGFyZ2V0R2VvbWV0cnkmIHN1YnRhcmdldCkKK3sKKyAgICBJ
bnRSZWN0IHJlY3QgPSBzdWJ0YXJnZXQuYm91bmRpbmdCb3goKTsKKworICAgIC8vIENvbnZlcnQg
ZnJvbSBmcmFtZSBjb29yZGluYXRlcyB0byB3aW5kb3cgY29vcmRpbmF0ZXMuCisgICAgcmVjdCA9
IHN1YnRhcmdldC5ub2RlKCktPmRvY3VtZW50KCktPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhy
ZWN0KTsKKyAgIAorICAgIGZsb2F0IHRvdWNoV2lkdGggPSB0b3VjaEFyZWEud2lkdGgoKTsKKyAg
ICBmbG9hdCB0b3VjaEhlaWdodCA9IHRvdWNoQXJlYS5oZWlnaHQoKTsKKyAgICBmbG9hdCBkaXN0
YW5jZVNjYWxlID0gIHRvdWNoV2lkdGggKiB0b3VjaFdpZHRoICsgdG91Y2hIZWlnaHQgKiB0b3Vj
aEhlaWdodDsKKyAgICBmbG9hdCBkaXN0YW5jZVRvQ2VudGVyU2NvcmUgPSByZWN0LmRpc3RhbmNl
U3F1YXJlZEZyb21DZW50ZXJMaW5lVG9Qb2ludCh0b3VjaEhvdHNwb3QpIC8gZGlzdGFuY2VTY2Fs
ZTsKKworICAgIGZsb2F0IHRhcmdldEFyZWEgPSByZWN0LnNpemUoKS5hcmVhKCk7CisgICAgcmVj
dC5pbnRlcnNlY3QodG91Y2hBcmVhKTsKKyAgICBmbG9hdCBpbnRlcnNlY3RBcmVhID0gcmVjdC5z
aXplKCkuYXJlYSgpOworICAgIGZsb2F0IGludGVyc2VjdGlvblNjb3JlID0gMSAtIGludGVyc2Vj
dEFyZWEgLyB0YXJnZXRBcmVhOworCisgICAgcmV0dXJuIGludGVyc2VjdGlvblNjb3JlIDwgZGlz
dGFuY2VUb0NlbnRlclNjb3JlID8gaW50ZXJzZWN0aW9uU2NvcmUgOiBkaXN0YW5jZVRvQ2VudGVy
U2NvcmU7Cit9CisKIEZsb2F0UG9pbnQgY29udGVudHNUb1dpbmRvdyhGcmFtZVZpZXcgKnZpZXcs
IEZsb2F0UG9pbnQgcHQpCiB7CiAgICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KHB0LngoKSAr
IDAuNWYpOwpAQCAtMzIwLDYgKzM1NCw3IEBAIGJvb2wgZmluZE5vZGVXaXRoTG93ZXN0RGlzdGFu
Y2VNZXRyaWMoTm9kZSomIHRhcmdldE5vZGUsIEludFBvaW50JiB0YXJnZXRQb2ludCwKICAgICBT
dWJ0YXJnZXRHZW9tZXRyeUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3VidGFyZ2V0cy5iZWdp
bigpOwogICAgIGNvbnN0IFN1YnRhcmdldEdlb21ldHJ5TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gc3VidGFyZ2V0cy5lbmQoKTsKICAgICBJbnRQb2ludCBhZGp1c3RlZFBvaW50OworCiAgICAg
Zm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBOb2RlKiBub2RlID0gaXQtPm5vZGUo
KTsKICAgICAgICAgZmxvYXQgZGlzdGFuY2VNZXRyaWMgPSBkaXN0YW5jZUZ1bmN0aW9uKHRvdWNo
SG90c3BvdCwgdG91Y2hBcmVhLCAqaXQpOwpAQCAtMzMwLDEyICszNjUsMjcgQEAgYm9vbCBmaW5k
Tm9kZVdpdGhMb3dlc3REaXN0YW5jZU1ldHJpYyhOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UG9pbnQm
IHRhcmdldFBvaW50LAogICAgICAgICAgICAgICAgIHRhcmdldE5vZGUgPSBub2RlOwogICAgICAg
ICAgICAgICAgIGJlc3REaXN0YW5jZU1ldHJpYyA9IGRpc3RhbmNlTWV0cmljOwogICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgaWYgKGRpc3RhbmNlTWV0cmljID09IGJlc3REaXN0YW5jZU1l
dHJpYykgewotICAgICAgICAgICAgLy8gVHJ5IHRvIGFsd2F5cyByZXR1cm4gdGhlIGlubmVyLW1v
c3QgZWxlbWVudC4KLSAgICAgICAgICAgIGlmIChub2RlLT5pc0Rlc2NlbmRhbnRPZih0YXJnZXRO
b2RlKSAmJiBzbmFwVG8oKml0LCB0b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgYWRqdXN0ZWRQb2lu
dCkpIHsKLSAgICAgICAgICAgICAgICB0YXJnZXRQb2ludCA9IGFkanVzdGVkUG9pbnQ7Ci0gICAg
ICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0QXJl
YSA9IGl0LT5ib3VuZGluZ0JveCgpOworICAgICAgICB9IGVsc2UgaWYgKGRpc3RhbmNlTWV0cmlj
IC0gYmVzdERpc3RhbmNlTWV0cmljIDwgemVyb1RvbGVyYW5jZSkgeworICAgICAgICAgICAgaWYg
KHNuYXBUbygqaXQsIHRvdWNoSG90c3BvdCwgdG91Y2hBcmVhLCBhZGp1c3RlZFBvaW50KSkgewor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5pc0Rlc2NlbmRhbnRPZih0YXJnZXROb2RlKSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdG8gYWx3YXlzIHJldHVybiB0aGUgaW5uZXItbW9z
dCBlbGVtZW50LgorICAgICAgICAgICAgICAgICAgICB0YXJnZXRQb2ludCA9IGFkanVzdGVkUG9p
bnQ7CisgICAgICAgICAgICAgICAgICAgIHRhcmdldE5vZGUgPSBub2RlOworICAgICAgICAgICAg
ICAgICAgICB0YXJnZXRBcmVhID0gaXQtPmJvdW5kaW5nQm94KCk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTWluaW1pemUgYWRqdXN0bWVudCBkaXN0
YW5jZS4KKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgZHggPSB0YXJnZXRQb2ludC54KCkgLSB0
b3VjaEhvdHNwb3QueCgpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBkeSA9IHRhcmdldFBv
aW50LnkoKSAtIHRvdWNoSG90c3BvdC55KCk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGJl
c3REaXN0YW5jZSA9IGR4ICogZHggKyBkeSAqIGR5OworICAgICAgICAgICAgICAgICAgICBkeCA9
IGFkanVzdGVkUG9pbnQueCgpIC0gdG91Y2hIb3RzcG90LngoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZHkgPSBhZGp1c3RlZFBvaW50LnkoKSAtIHRvdWNoSG90c3BvdC55KCk7CisgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IGRpc3RhbmNlID0gZHggKiBkeCArIGR5ICogZHk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChkaXN0YW5jZSA8IGJlc3REaXN0YW5jZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0UG9pbnQgPSBhZGp1c3RlZFBvaW50OworICAgICAgICAgICAgICAgICAg
ICAgICAgdGFyZ2V0Tm9kZSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRB
cmVhID0gaXQtPmJvdW5kaW5nQm94KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zNTIsNyArNDAy
LDcgQEAgYm9vbCBmaW5kQmVzdENsaWNrYWJsZUNhbmRpZGF0ZShOb2RlKiYgdGFyZ2V0Tm9kZSwg
SW50UG9pbnQgJnRhcmdldFBvaW50LCBjb25zdAogICAgIEludFJlY3QgdGFyZ2V0QXJlYTsKICAg
ICBUb3VjaEFkanVzdG1lbnQ6OlN1YnRhcmdldEdlb21ldHJ5TGlzdCBzdWJ0YXJnZXRzOwogICAg
IFRvdWNoQWRqdXN0bWVudDo6Y29tcGlsZVN1YnRhcmdldExpc3Qobm9kZUxpc3QsIHN1YnRhcmdl
dHMsIFRvdWNoQWRqdXN0bWVudDo6bm9kZVJlc3BvbmRzVG9UYXBHZXN0dXJlKTsKLSAgICByZXR1
cm4gVG91Y2hBZGp1c3RtZW50OjpmaW5kTm9kZVdpdGhMb3dlc3REaXN0YW5jZU1ldHJpYyh0YXJn
ZXROb2RlLCB0YXJnZXRQb2ludCwgdGFyZ2V0QXJlYSwgdG91Y2hIb3RzcG90LCB0b3VjaEFyZWEs
IHN1YnRhcmdldHMsIFRvdWNoQWRqdXN0bWVudDo6ZGlzdGFuY2VTcXVhcmVkVG9UYXJnZXRDZW50
ZXJMaW5lKTsKKyAgICByZXR1cm4gVG91Y2hBZGp1c3RtZW50OjpmaW5kTm9kZVdpdGhMb3dlc3RE
aXN0YW5jZU1ldHJpYyh0YXJnZXROb2RlLCB0YXJnZXRQb2ludCwgdGFyZ2V0QXJlYSwgdG91Y2hI
b3RzcG90LCB0b3VjaEFyZWEsIHN1YnRhcmdldHMsIFRvdWNoQWRqdXN0bWVudDo6aHlicmlkRGlz
dGFuY2VGdW5jdGlvbik7CiB9CiAKIGJvb2wgZmluZEJlc3Rab29tYWJsZUFyZWEoTm9kZSomIHRh
cmdldE5vZGUsIEludFJlY3QmIHRhcmdldEFyZWEsIGNvbnN0IEludFBvaW50JiB0b3VjaEhvdHNw
b3QsIGNvbnN0IEludFJlY3QmIHRvdWNoQXJlYSwgY29uc3QgTm9kZUxpc3QmIG5vZGVMaXN0KQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IGRjMjJiYjM2ZmViMDA5MTJjYmZiYjZlZjNlYzNhN2MwZmFiMzkxOGUuLjA0ODA0NDc2
ODUwMzJmZDhhNWMwNTAwMzQ3Nzc4N2RhNTMyYmJkODAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAor
MjAxMi0wNy0yNCAgS2V2aW4gRWxsaXMgIDxrZXZlcnNAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFNlYXJjaCBjYW5jZWwgYnV0dG9uIGlzIGhhcmQgdG8gYWN0aXZhdGUgd2l0aCBhIHRhcCBnZXN0
dXJlIGV2ZW4gaWYgdG91Y2ggYWRqdXN0bWVudCBpcyBlbmFibGVkLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE4OTQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGVzdCBmb3IgdG91Y2ggYWRqdXN0
bWVudCBpbiB0aGUgdmljaW5pdHkgb2YgYSBzZWFyY2ggY2FuY2VsCisgICAgICAgIGJ1dHRvbi4g
IFByaW9yIHRvIHRoZSBwYXRjaCwgdG91Y2ggYWRqdXN0bWVudCBzaG93ZWQgYSBzdHJvbmcgYmlh
cworICAgICAgICB0b3dhcmRzIHRoZSB0ZXh0IGlucHV0IHJlZ2lvbiBldmVuIGlmIHRoZSBjYW5j
ZWwgYnV0dG9uIHdhcyBjb21wbGV0ZWx5CisgICAgICAgIHdpdGhpbiB0aGUgdG91Y2ggYXJlYS4K
KworICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9zZWFyY2gtY2FuY2VsLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L3NlYXJjaC1jYW5jZWwuaHRtbDogQWRk
ZWQuCisKIDIwMTItMDctMjQgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5v
cmc+CiAKICAgICAgICAgaW5saW5lLXRhYmxlIHdyYXBwZXIgc2hvdWxkIGJlIGdlbmVyYXRlZCBm
b3IgZGlzcGxheTogaW5saW5lIGVsZW1lbnQgb25seQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
dG91Y2hhZGp1c3RtZW50L3NlYXJjaC1jYW5jZWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
dG91Y2hhZGp1c3RtZW50L3NlYXJjaC1jYW5jZWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIx
MjYyNWNkYjJhMWU0YWRhOTQ0Mjg4YmQ5NDM5NWRkOGE0MWIwMmMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvc2VhcmNoLWNhbmNlbC1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwzMCBAQAorCitUZXN0IHRvdWNoIGFkanVzdG1lbnQgb24gYSBzZWFyY2ggZmll
bGQgd2l0aCBhIHZpc2libGUgY2FuY2VsIGJ1dHRvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKKworVG91Y2ggY2VudGVyZWQgb24gY2FuY2VsIGJ1dHRvbiBidXQgb3ZlcmxhcHBp
bmcgbmVpZ2hib3JpbmcgY2FuZGlkYXRlLgorUEFTUyB0YXJnZXRDb250YWluc1BvaW50IGlzIHRy
dWUKK1BBU1MgdG91Y2hDb250YWluc1BvaW50IGlzIHRydWUKKworT2ZmLWNlbnRlciB0b3VjaGVz
IGVuY2xvc2luZyBjYW5jZWwgYnV0dG9uLgorUEFTUyB0YXJnZXRDb250YWluc1BvaW50IGlzIHRy
dWUKK1BBU1MgdG91Y2hDb250YWluc1BvaW50IGlzIHRydWUKK1BBU1MgdGFyZ2V0Q29udGFpbnNQ
b2ludCBpcyB0cnVlCitQQVNTIHRvdWNoQ29udGFpbnNQb2ludCBpcyB0cnVlCitQQVNTIHRhcmdl
dENvbnRhaW5zUG9pbnQgaXMgdHJ1ZQorUEFTUyB0b3VjaENvbnRhaW5zUG9pbnQgaXMgdHJ1ZQor
CitUb3VjaGVzIGNsaXBwaW5nIGxlZnQgZWRnZSBvZiBjYW5jZWwtYnV0dG9uLgorUEFTUyB0YXJn
ZXRDb250YWluc1BvaW50IGlzIHRydWUKK1BBU1MgdG91Y2hDb250YWluc1BvaW50IGlzIHRydWUK
K1BBU1MgdGFyZ2V0Q29udGFpbnNQb2ludCBpcyB0cnVlCitQQVNTIHRvdWNoQ29udGFpbnNQb2lu
dCBpcyB0cnVlCitQQVNTIHRhcmdldENvbnRhaW5zUG9pbnQgaXMgdHJ1ZQorUEFTUyB0b3VjaENv
bnRhaW5zUG9pbnQgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9z
ZWFyY2gtY2FuY2VsLmh0bWwgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvc2VhcmNoLWNh
bmNlbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxNzM3ZWMzMjE0YTBkYjE3NGNhMGU0MTQ2NWJhZjcyODQ4
YmM3MTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvc2Vh
cmNoLWNhbmNlbC5odG1sCkBAIC0wLDAgKzEsMTQyIEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxl
PgorICAgIGlucHV0W3R5cGU9J3NlYXJjaCddIHsKKyAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTog
bm9uZTsKKyAgICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgIGJvcmRl
cjogMXB4IHNvbGlkICM5OTk7CisgICAgICBwYWRkaW5nOiA1cHg7CisgICAgfQorCisgICAgaW5w
dXRbdHlwZT0nc2VhcmNoJ106Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24geworICAgICAg
LXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3Jk
ZXItYm94OworICAgICAgYmFja2dyb3VuZDogIzk5OTsKKyAgICAgIGhlaWdodDogMTBweDsKKyAg
ICAgIG1hcmdpbjogMDsKKyAgICAgIHBhZGRpbmc6IDA7CisgICAgICB3aWR0aDogMTBweDsKKyAg
ICB9Cis8L3N0eWxlPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCki
PgorCis8ZGl2PgorICA8aW5wdXQgaWQ9InRhcmdldCIgdHlwZT0ic2VhcmNoIiB2YWx1ZT0iYWJj
ZCIvPgorPC9kaXY+CisKKzxwIGlkPSdkZXNjcmlwdGlvbic+PC9wPgorPGRpdiBpZD0nY29uc29s
ZSc+PC9kaXY+CisKKzxzY3JpcHQ+CisgICAgdmFyIGVsZW1lbnQ7CisgICAgdmFyIGFkanVzdGVk
Tm9kZTsKKyAgICB2YXIgYWRqdXN0ZWRQb2ludDsKKyAgICB2YXIgaW5wdXRCb3VuZHM7CisgICAg
dmFyIGNhbmNlbEJvdW5kczsKKyAgICB2YXIgdGV4dENvbnRlbnRCb3VuZHM7CisgICAgdmFyIHRv
dWNoQm91bmRzOworICAgIHZhciB0YXJnZXRCb3VuZHM7CisgICAgdmFyIHRhcmdldENvbnRhaW5z
UG9pbnQ7CisgICAgdmFyIHRvdWNoQ29udGFpbnNQb2ludDsKKworICAgIGZ1bmN0aW9uIGZpbmRB
YnNvbHV0ZVBvc2l0aW9uKG5vZGUpIHsKKyAgICAgICAgdmFyIHBvcyA9IHtsZWZ0OiAwLCB0b3A6
IDB9OworICAgICAgICBkbyB7CisgICAgICAgICAgICBwb3MubGVmdCArPSBub2RlLm9mZnNldExl
ZnQ7CisgICAgICAgICAgICBwb3MudG9wICs9IG5vZGUub2Zmc2V0VG9wOworICAgICAgICB9IHdo
aWxlIChub2RlID0gbm9kZS5vZmZzZXRQYXJlbnQpOworICAgICAgICByZXR1cm4gcG9zOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHJ1blRvdWNoVGVzdHMoKSB7CisgICAgICAgIGRvY3VtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7fSwgZmFsc2UpOworCisgICAgICAg
IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0Jyk7CisgICAgICAgIHZh
ciBwb3MgPSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50KTsKKworICAgICAgICB2YXIgeCA9
IHBvcy5sZWZ0OworICAgICAgICB2YXIgeSA9IHBvcy50b3A7CisgICAgICAgIHZhciB3aWR0aCA9
IGVsZW1lbnQuY2xpZW50V2lkdGg7CisgICAgICAgIHZhciBoZWlnaHQgPSBlbGVtZW50LmNsaWVu
dEhlaWdodDsKKworICAgICAgICBpbnB1dEJvdW5kcyA9IHsKKyAgICAgICAgICAgIHg6IHgsCisg
ICAgICAgICAgICB5OiB5LAorICAgICAgICAgICAgd2lkdGg6IHdpZHRoLAorICAgICAgICAgICAg
aGVpZ2h0OiBoZWlnaHQKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgdG91Y2hSYWRpdXMgPSAy
MDsKKyAgICAgICAgdmFyIG9mZnNldCA9IHRvdWNoUmFkaXVzIC8gMjsKKworICAgICAgICAvLyBD
ZW50ZXIgb2YgY2FuY2VsIGJ1dHRvbi4KKyAgICAgICAgdmFyIG1pZFggPSB4ICsgd2lkdGggLSAx
MTsKKyAgICAgICAgdmFyIG1pZFkgPSB5ICsgaGVpZ2h0IC8gMjsKKworICAgICAgICBjYW5jZWxC
b3VuZHMgPSB7CisgICAgICAgICAgICB4OiBtaWRYIC0gNSwKKyAgICAgICAgICAgIHk6IG1pZFkg
LSA1LAorICAgICAgICAgICAgd2lkdGg6IDEwLAorICAgICAgICAgICAgaGVpZ2h0OiAxMAorICAg
ICAgICB9OworCisgICAgICAgIHRleHRDb250ZW50Qm91bmRzID0geworICAgICAgICAgICB4OiBp
bnB1dEJvdW5kcy54LAorICAgICAgICAgICB5OiBpbnB1dEJvdW5kcy55LAorICAgICAgICAgICB3
aWR0aDogaW5wdXRCb3VuZHMud2lkdGggLSAxNiwKKyAgICAgICAgICAgaGVpZ2h0OiBpbnB1dEJv
dW5kcy5oZWlnaHQKKyAgICAgICAgfTsKKworICAgICAgICBkZWJ1ZygnXG5Ub3VjaCBjZW50ZXJl
ZCBvbiBjYW5jZWwgYnV0dG9uIGJ1dCBvdmVybGFwcGluZyBuZWlnaGJvcmluZyBjYW5kaWRhdGUu
Jyk7CisgICAgICAgIHRlc3RUb3VjaChtaWRYLCBtaWRZLCB0b3VjaFJhZGl1cywgY2FuY2VsQm91
bmRzKTsKKworICAgICAgICBkZWJ1ZygnXG5PZmYtY2VudGVyIHRvdWNoZXMgZW5jbG9zaW5nIGNh
bmNlbCBidXR0b24uJyk7CisgICAgICAgIHRlc3RUb3VjaChtaWRYIC0gb2Zmc2V0LCBtaWRZLCB0
b3VjaFJhZGl1cywgY2FuY2VsQm91bmRzKTsKKyAgICAgICAgdGVzdFRvdWNoKG1pZFggLSBvZmZz
ZXQsIG1pZFkgKyBvZmZzZXQsIHRvdWNoUmFkaXVzLCBjYW5jZWxCb3VuZHMpOworICAgICAgICB0
ZXN0VG91Y2gobWlkWCAtIG9mZnNldCwgbWlkWSAtIG9mZnNldCwgdG91Y2hSYWRpdXMsIGNhbmNl
bEJvdW5kcyk7CisKKyAgICAgICAgZGVidWcoJ1xuVG91Y2hlcyBjbGlwcGluZyBsZWZ0IGVkZ2Ug
b2YgY2FuY2VsLWJ1dHRvbi4nKTsKKyAgICAgICAgdGVzdFRvdWNoKG1pZFggLSB0b3VjaFJhZGl1
cyAtIDIsIG1pZFksIHRvdWNoUmFkaXVzLCB0ZXh0Q29udGVudEJvdW5kcyk7CisgICAgICAgIHRl
c3RUb3VjaChtaWRYIC0gdG91Y2hSYWRpdXMgLSAyLCBtaWRZIC0gb2Zmc2V0LCB0b3VjaFJhZGl1
cywgdGV4dENvbnRlbnRCb3VuZHMpOworICAgICAgICB0ZXN0VG91Y2gobWlkWCAtIHRvdWNoUmFk
aXVzIC0gMiwgbWlkWSArIG9mZnNldCwgdG91Y2hSYWRpdXMsIHRleHRDb250ZW50Qm91bmRzKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0VG91Y2godG91Y2hYLCB0b3VjaFksIHJhZGl1cywg
Ym91bmRzKSB7CisKKyAgICAgICAgdGFyZ2V0Qm91bmRzID0gYm91bmRzOworCisgICAgICAgIHRv
dWNoQm91bmRzID0geworICAgICAgICAgICAgeDogdG91Y2hYIC0gcmFkaXVzLAorICAgICAgICAg
ICAgeTogdG91Y2hZIC0gcmFkaXVzLAorICAgICAgICAgICAgd2lkdGg6IDIgKiByYWRpdXMsCisg
ICAgICAgICAgICBoZWlnaHQ6IDIgKiByYWRpdXMKKyAgICAgICAgfTsKKyAgICAgICAgYWRqdXN0
ZWRQb2ludCA9IGludGVybmFscy50b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVO
b2RlKHRvdWNoQm91bmRzLngsIHRvdWNoQm91bmRzLnksIHRvdWNoQm91bmRzLndpZHRoLCB0b3Vj
aEJvdW5kcy5oZWlnaHQsIGRvY3VtZW50KTsKKyAgICAgICAgdGFyZ2V0Q29udGFpbnNQb2ludCA9
IGNvbnRhaW5zUG9pbnQodGFyZ2V0Qm91bmRzLCBhZGp1c3RlZFBvaW50KTsKKyAgICAgICAgdG91
Y2hDb250YWluc1BvaW50ID0gY29udGFpbnNQb2ludCh0b3VjaEJvdW5kcywgYWRqdXN0ZWRQb2lu
dCk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgndGFyZ2V0Q29udGFpbnNQb2ludCcpOworICAgICAg
ICBzaG91bGRCZVRydWUoJ3RvdWNoQ29udGFpbnNQb2ludCcpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGNvbnRhaW5zUG9pbnQoYm91bmRzLCBwb2ludCkgeworICAgICAgICByZXR1cm4gYm91bmRz
LnggPD0gcG9pbnQueCAmJiBib3VuZHMueSA8PSBwb2ludC55ICYmIGJvdW5kcy54ICsgYm91bmRz
LndpZHRoID49IHBvaW50LnggJiYgYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0ID49IHBvaW50Lnk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyICYmIHdpbmRvdy5pbnRlcm5hbHMgJiYgaW50ZXJuYWxzLnRvdWNoTm9k
ZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSkgeworICAgICAgICAgICAgZGVzY3JpcHRpb24o
J1Rlc3QgdG91Y2ggYWRqdXN0bWVudCBvbiBhIHNlYXJjaCBmaWVsZCB3aXRoIGEgdmlzaWJsZSBj
YW5jZWwgYnV0dG9uLicpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cisg
ICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIHJ1blRv
dWNoVGVzdHMoKTsKKyAgICAgICAgICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgICAg
ICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154662</attachid>
            <date>2012-07-26 08:56:55 -0700</date>
            <delta_ts>2012-07-27 11:47:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91894-20120726115644.patch</filename>
            <type>text/plain</type>
            <size>9576</size>
            <attacher name="Kevin Ellis">kevers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc4ODg2MmNhOTBkYzg0
ZDQ3ODlkYjUzMTM2MzZiZTQyMjNmMjZiOS4uNzA2YWI2OTg2ZWUwNGY3ZWFlMDM5NTgzNWY3MmNm
YzJjM2RhMWVhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA3LTI0ICBLZXZp
biBFbGxpcyAgPGtldmVyc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2VhcmNoIGNhbmNlbCBi
dXR0b24gaXMgaGFyZCB0byBhY3RpdmF0ZSB3aXRoIGEgdGFwIGdlc3R1cmUgZXZlbiBpZiB0b3Vj
aCBhZGp1c3RtZW50IGlzIGVuYWJsZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MTg5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFVwZGF0ZSBjaGVjayBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBub2RlIHJl
c3BvbmRzIHRvIHRhcCBnZXN0dXJlcy4KKyAgICAgICAgUHJldmlvdXNseSwgdGhlIGNhbmNlbCBi
dXR0b24gd2FzIGJlaW5nIGRpc2NhcmRlZCBhcyBhIGNhbmRpZGF0ZSBmb3IKKyAgICAgICAgdG91
Y2ggYWRqdXN0bWVudCBpZiB0aGUgdG91Y2ggYXJlYSBjbGlwcGVkIHRoZSB0ZXh0IGlucHV0IHJl
Z2lvbgorICAgICAgICBiZWNhdXNlIHRoZSBjYW5kaWRhdGUgcHJ1bmluZyBwcm9jZXNzIGZhaWxl
ZCB0byBhY2NvdW50IGZvciB0aGUgY2FuY2VsCisgICAgICAgIGJ1dHRvbiBoYXZpbmcgYSBkZWZh
dWx0IG1vdXNlIGhhbmRsZXIuICBQb3NzaWJseSBhbiBpbnRlcmltIGZpeCwKKyAgICAgICAgZGVw
ZW5kaW5nIG9uIHJlc29sdXRpb24gdG8gOTIwOTMuCisKKyAgICAgICAgVGVzdDogdG91Y2hhZGp1
c3RtZW50L3NlYXJjaC1jYW5jZWwuaHRtbAorCisgICAgICAgICogcGFnZS9Ub3VjaEFkanVzdG1l
bnQuY3BwOgorICAgICAgICAoVG91Y2hBZGp1c3RtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRv
dWNoQWRqdXN0bWVudDo6bm9kZVJlc3BvbmRzVG9UYXBHZXN0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRvdWNoQWRqdXN0bWVudDo6aHlicmlkRGlzdGFuY2VGdW5jdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OmZpbmROb2RlV2l0aExvd2VzdERpc3RhbmNlTWV0cmlj
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRCZXN0Q2xpY2thYmxlQ2FuZGlkYXRlKToKKwogMjAx
Mi0wNy0yNCAgTmljbyBXZWJlciAgPHRoYWtpc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2No
cm9taXVtL21hY10gUmVtb3ZlIHdlYmNvcmVfcmVzb3VyY2VfZmlsZXMgZnJvbSBXZWJDb3JlLmd5
cGkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcAppbmRleCBjZjRiYTFiYjM3
YTUwMTQ3Mzk2ZWUzZWFiNWE3NjVlM2VhZWRkNTVkLi5hODQ4MmUxYWMwODM1NTE3M2EyNTUzMWJh
NjVlNzA0N2ZmYWE1ZjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRq
dXN0bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3Bw
CkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZs
b2F0UXVhZC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKQEAgLTcyLDYgKzczLDEyIEBAIGJvb2wgbm9k
ZVJlc3BvbmRzVG9UYXBHZXN0dXJlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6bGFiZWxUYWcpICYmIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVs
ZW1lbnQqPihlbGVtZW50KS0+Y29udHJvbCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQorICAgIEVsZW1lbnQqIHNoYWRvd0hvc3QgPSBub2RlLT5zaGFkb3dIb3N0KCk7CisgICAg
aWYgKHNoYWRvd0hvc3QgJiYgc2hhZG93SG9zdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0
VGFnKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPihzaGFkb3dIb3N0KTsKKyAgICAgICAgaWYgKCFpbnB1dC0+cmVhZE9u
bHkoKSAmJiAhaW5wdXQtPmRpc2FibGVkKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBoYXNEZWZhdWx0RXZlbnRIYW5kbGVyIGFuZCB1
c2UgdGhhdCBpbnN0ZWFkIG9mIGFsbCBvZiB0aGUgYWJvdmUgY2hlY2tzLgogICAgIGlmIChub2Rl
LT5oYXNFdmVudExpc3RlbmVycygpCiAgICAgICAgICYmIChub2RlLT5oYXNFdmVudExpc3RlbmVy
cyhldmVudE5hbWVzKCkuY2xpY2tFdmVudCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkYzIyYmIzNmZlYjAwOTEyY2JmYmI2
ZWYzZWMzYTdjMGZhYjM5MThlLi40MjAyNTIxODgwNGQ2MzA3OWQzYzI5MDUzYjEwOWZhNTY0MWE1
NDZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDctMjYgIEtldmluIEVsbGlzICA8a2V2
ZXJzQGNocm9taXVtLm9yZz4KKworICAgICAgICBTZWFyY2ggY2FuY2VsIGJ1dHRvbiBpcyBoYXJk
IHRvIGFjdGl2YXRlIHdpdGggYSB0YXAgZ2VzdHVyZSBldmVuIGlmIHRvdWNoIGFkanVzdG1lbnQg
aXMgZW5hYmxlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkxODk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHRlc3QgZm9yIHRvdWNoIGFkanVzdG1lbnQgaW4gdGhlIHZpY2luaXR5IG9mIGEgc2Vh
cmNoIGNhbmNlbCBidXR0b24uCisgICAgICAgIFByaW9yIHRvIHRoZSBwYXRjaCwgdGhlIGNhbmNl
bCBidXR0b24gd2FzIHBydW5lZCBhcyBhIGNhbmRpZGF0ZSBpZiB0aGUgCisgICAgICAgIHRvdWNo
IGFyZWEgY2xpcHBlZCB0aGUgaW5wdXQgZmllbGQuCisKKyAgICAgICAgKiB0b3VjaGFkanVzdG1l
bnQvc2VhcmNoLWNhbmNlbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRq
dXN0bWVudC9zZWFyY2gtY2FuY2VsLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA3LTI0ICBKdWxpZW4g
Q2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIGlubGluZS10YWJs
ZSB3cmFwcGVyIHNob3VsZCBiZSBnZW5lcmF0ZWQgZm9yIGRpc3BsYXk6IGlubGluZSBlbGVtZW50
IG9ubHkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9zZWFyY2gtY2Fu
Y2VsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9zZWFyY2gtY2Fu
Y2VsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMTQyMGI4ZTEyYTg5NWEyNTE4NWYxYjFiOWE5
N2M1YTkxODcyYjE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3Rt
ZW50L3NlYXJjaC1jYW5jZWwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzEgQEAKKworVGVzdCB0
b3VjaCBhZGp1c3RtZW50IG9uIGEgc2VhcmNoIGZpZWxkIHdpdGggYSB2aXNpYmxlIGNhbmNlbCBi
dXR0b24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKK1RvdWNoIGNlbnRlcmVk
IG9uIGNhbmNlbCBidXR0b24gYnV0IG92ZXJsYXBwaW5nIG5laWdoYm9yaW5nIGNhbmRpZGF0ZS4K
K1BBU1MgdGFyZ2V0Q29udGFpbnNQb2ludCBpcyB0cnVlCitQQVNTIHRvdWNoQ29udGFpbnNQb2lu
dCBpcyB0cnVlCisKK09mZi1jZW50ZXIgdG91Y2hlcyBlbmNsb3NpbmcgY2FuY2VsIGJ1dHRvbi4K
K0ZhaWx1cmVzIHJlbGF0ZWQgdG8gaXNzdWVzIHdpdGggdGFyZ2V0dGluZyBzbWFsbCBlbGVtZW50
cyAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyMjkzKS4KK0ZBSUwg
dGFyZ2V0Q29udGFpbnNQb2ludCBzaG91bGQgYmUgdHJ1ZS4gV2FzIGZhbHNlLgorUEFTUyB0b3Vj
aENvbnRhaW5zUG9pbnQgaXMgdHJ1ZQorRkFJTCB0YXJnZXRDb250YWluc1BvaW50IHNob3VsZCBi
ZSB0cnVlLiBXYXMgZmFsc2UuCitQQVNTIHRvdWNoQ29udGFpbnNQb2ludCBpcyB0cnVlCitGQUlM
IHRhcmdldENvbnRhaW5zUG9pbnQgc2hvdWxkIGJlIHRydWUuIFdhcyBmYWxzZS4KK1BBU1MgdG91
Y2hDb250YWluc1BvaW50IGlzIHRydWUKKworVG91Y2hlcyBjbGlwcGluZyBsZWZ0IGVkZ2Ugb2Yg
Y2FuY2VsLWJ1dHRvbi4KK1BBU1MgdGFyZ2V0Q29udGFpbnNQb2ludCBpcyB0cnVlCitQQVNTIHRv
dWNoQ29udGFpbnNQb2ludCBpcyB0cnVlCitQQVNTIHRhcmdldENvbnRhaW5zUG9pbnQgaXMgdHJ1
ZQorUEFTUyB0b3VjaENvbnRhaW5zUG9pbnQgaXMgdHJ1ZQorUEFTUyB0YXJnZXRDb250YWluc1Bv
aW50IGlzIHRydWUKK1BBU1MgdG91Y2hDb250YWluc1BvaW50IGlzIHRydWUKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy90b3VjaGFkanVzdG1lbnQvc2VhcmNoLWNhbmNlbC5odG1sIGIvTGF5b3V0VGVzdHMv
dG91Y2hhZGp1c3RtZW50L3NlYXJjaC1jYW5jZWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDEyZGNlODk2
ZWNkY2Q1NTBhMTU2M2JmOWRmMTI0NGNlOGIwOGQyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvdG91Y2hhZGp1c3RtZW50L3NlYXJjaC1jYW5jZWwuaHRtbApAQCAtMCwwICsxLDE0MyBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyAgICBpbnB1dFt0eXBlPSdzZWFyY2gnXSB7Cisg
ICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgICAtd2Via2l0LWJveC1zaXppbmc6
IGJvcmRlci1ib3g7CisgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OworICAgICAgcGFkZGlu
ZzogNXB4OworICAgIH0KKworICAgIGlucHV0W3R5cGU9J3NlYXJjaCddOjotd2Via2l0LXNlYXJj
aC1jYW5jZWwtYnV0dG9uIHsKKyAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICAg
IC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgIGJhY2tncm91bmQ6ICM5OTk7
CisgICAgICBoZWlnaHQ6IDEwcHg7CisgICAgICBtYXJnaW46IDA7CisgICAgICBwYWRkaW5nOiAw
OworICAgICAgd2lkdGg6IDEwcHg7CisgICAgfQorPC9zdHlsZT4KKzxzY3JpcHQgc3JjPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKwor
PGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKworPGRpdj4KKyAgPGlucHV0IGlkPSJ0YXJnZXQi
IHR5cGU9InNlYXJjaCIgdmFsdWU9ImFiY2QiLz4KKzwvZGl2PgorCis8cCBpZD0nZGVzY3JpcHRp
b24nPjwvcD4KKzxkaXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorCis8c2NyaXB0PgorICAgIHZhciBl
bGVtZW50OworICAgIHZhciBhZGp1c3RlZE5vZGU7CisgICAgdmFyIGFkanVzdGVkUG9pbnQ7Cisg
ICAgdmFyIGlucHV0Qm91bmRzOworICAgIHZhciBjYW5jZWxCb3VuZHM7CisgICAgdmFyIHRleHRD
b250ZW50Qm91bmRzOworICAgIHZhciB0b3VjaEJvdW5kczsKKyAgICB2YXIgdGFyZ2V0Qm91bmRz
OworICAgIHZhciB0YXJnZXRDb250YWluc1BvaW50OworICAgIHZhciB0b3VjaENvbnRhaW5zUG9p
bnQ7CisKKyAgICBmdW5jdGlvbiBmaW5kQWJzb2x1dGVQb3NpdGlvbihub2RlKSB7CisgICAgICAg
IHZhciBwb3MgPSB7bGVmdDogMCwgdG9wOiAwfTsKKyAgICAgICAgZG8geworICAgICAgICAgICAg
cG9zLmxlZnQgKz0gbm9kZS5vZmZzZXRMZWZ0OworICAgICAgICAgICAgcG9zLnRvcCArPSBub2Rl
Lm9mZnNldFRvcDsKKyAgICAgICAgfSB3aGlsZSAobm9kZSA9IG5vZGUub2Zmc2V0UGFyZW50KTsK
KyAgICAgICAgcmV0dXJuIHBvczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5Ub3VjaFRlc3Rz
KCkgeworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9u
KCkge30sIGZhbHNlKTsKKworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3RhcmdldCcpOworICAgICAgICB2YXIgcG9zID0gZmluZEFic29sdXRlUG9zaXRpb24oZWxl
bWVudCk7CisKKyAgICAgICAgdmFyIHggPSBwb3MubGVmdDsKKyAgICAgICAgdmFyIHkgPSBwb3Mu
dG9wOworICAgICAgICB2YXIgd2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoOworICAgICAgICB2
YXIgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7CisKKyAgICAgICAgaW5wdXRCb3VuZHMg
PSB7CisgICAgICAgICAgICB4OiB4LAorICAgICAgICAgICAgeTogeSwKKyAgICAgICAgICAgIHdp
ZHRoOiB3aWR0aCwKKyAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0CisgICAgICAgIH07CisKKyAg
ICAgICAgdmFyIHRvdWNoUmFkaXVzID0gMjA7CisgICAgICAgIHZhciBvZmZzZXQgPSB0b3VjaFJh
ZGl1cyAvIDI7CisKKyAgICAgICAgLy8gQ2VudGVyIG9mIGNhbmNlbCBidXR0b24uCisgICAgICAg
IHZhciBtaWRYID0geCArIHdpZHRoIC0gMTE7CisgICAgICAgIHZhciBtaWRZID0geSArIGhlaWdo
dCAvIDI7CisKKyAgICAgICAgY2FuY2VsQm91bmRzID0geworICAgICAgICAgICAgeDogbWlkWCAt
IDUsCisgICAgICAgICAgICB5OiBtaWRZIC0gNSwKKyAgICAgICAgICAgIHdpZHRoOiAxMCwKKyAg
ICAgICAgICAgIGhlaWdodDogMTAKKyAgICAgICAgfTsKKworICAgICAgICB0ZXh0Q29udGVudEJv
dW5kcyA9IHsKKyAgICAgICAgICAgeDogaW5wdXRCb3VuZHMueCwKKyAgICAgICAgICAgeTogaW5w
dXRCb3VuZHMueSwKKyAgICAgICAgICAgd2lkdGg6IGlucHV0Qm91bmRzLndpZHRoIC0gMTYsCisg
ICAgICAgICAgIGhlaWdodDogaW5wdXRCb3VuZHMuaGVpZ2h0CisgICAgICAgIH07CisKKyAgICAg
ICAgZGVidWcoJ1xuVG91Y2ggY2VudGVyZWQgb24gY2FuY2VsIGJ1dHRvbiBidXQgb3ZlcmxhcHBp
bmcgbmVpZ2hib3JpbmcgY2FuZGlkYXRlLicpOworICAgICAgICB0ZXN0VG91Y2gobWlkWCwgbWlk
WSwgdG91Y2hSYWRpdXMsIGNhbmNlbEJvdW5kcyk7CisKKyAgICAgICAgZGVidWcoJ1xuT2ZmLWNl
bnRlciB0b3VjaGVzIGVuY2xvc2luZyBjYW5jZWwgYnV0dG9uLicpOworICAgICAgICBkZWJ1Zygn
RmFpbHVyZXMgcmVsYXRlZCB0byBpc3N1ZXMgd2l0aCB0YXJnZXR0aW5nIHNtYWxsIGVsZW1lbnRz
IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIyOTMpLicpOworICAg
ICAgICB0ZXN0VG91Y2gobWlkWCAtIG9mZnNldCwgbWlkWSwgdG91Y2hSYWRpdXMsIGNhbmNlbEJv
dW5kcyk7CisgICAgICAgIHRlc3RUb3VjaChtaWRYIC0gb2Zmc2V0LCBtaWRZICsgb2Zmc2V0LCB0
b3VjaFJhZGl1cywgY2FuY2VsQm91bmRzKTsKKyAgICAgICAgdGVzdFRvdWNoKG1pZFggLSBvZmZz
ZXQsIG1pZFkgLSBvZmZzZXQsIHRvdWNoUmFkaXVzLCBjYW5jZWxCb3VuZHMpOworCisgICAgICAg
IGRlYnVnKCdcblRvdWNoZXMgY2xpcHBpbmcgbGVmdCBlZGdlIG9mIGNhbmNlbC1idXR0b24uJyk7
CisgICAgICAgIHRlc3RUb3VjaChtaWRYIC0gdG91Y2hSYWRpdXMgLSAyLCBtaWRZLCB0b3VjaFJh
ZGl1cywgdGV4dENvbnRlbnRCb3VuZHMpOworICAgICAgICB0ZXN0VG91Y2gobWlkWCAtIHRvdWNo
UmFkaXVzIC0gMiwgbWlkWSAtIG9mZnNldCwgdG91Y2hSYWRpdXMsIHRleHRDb250ZW50Qm91bmRz
KTsKKyAgICAgICAgdGVzdFRvdWNoKG1pZFggLSB0b3VjaFJhZGl1cyAtIDIsIG1pZFkgKyBvZmZz
ZXQsIHRvdWNoUmFkaXVzLCB0ZXh0Q29udGVudEJvdW5kcyk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gdGVzdFRvdWNoKHRvdWNoWCwgdG91Y2hZLCByYWRpdXMsIGJvdW5kcykgeworCisgICAgICAg
IHRhcmdldEJvdW5kcyA9IGJvdW5kczsKKworICAgICAgICB0b3VjaEJvdW5kcyA9IHsKKyAgICAg
ICAgICAgIHg6IHRvdWNoWCAtIHJhZGl1cywKKyAgICAgICAgICAgIHk6IHRvdWNoWSAtIHJhZGl1
cywKKyAgICAgICAgICAgIHdpZHRoOiAyICogcmFkaXVzLAorICAgICAgICAgICAgaGVpZ2h0OiAy
ICogcmFkaXVzCisgICAgICAgIH07CisgICAgICAgIGFkanVzdGVkUG9pbnQgPSBpbnRlcm5hbHMu
dG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSh0b3VjaEJvdW5kcy54LCB0
b3VjaEJvdW5kcy55LCB0b3VjaEJvdW5kcy53aWR0aCwgdG91Y2hCb3VuZHMuaGVpZ2h0LCBkb2N1
bWVudCk7CisgICAgICAgIHRhcmdldENvbnRhaW5zUG9pbnQgPSBjb250YWluc1BvaW50KHRhcmdl
dEJvdW5kcywgYWRqdXN0ZWRQb2ludCk7CisgICAgICAgIHRvdWNoQ29udGFpbnNQb2ludCA9IGNv
bnRhaW5zUG9pbnQodG91Y2hCb3VuZHMsIGFkanVzdGVkUG9pbnQpOworICAgICAgICBzaG91bGRC
ZVRydWUoJ3RhcmdldENvbnRhaW5zUG9pbnQnKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCd0b3Vj
aENvbnRhaW5zUG9pbnQnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjb250YWluc1BvaW50KGJv
dW5kcywgcG9pbnQpIHsKKyAgICAgICAgcmV0dXJuIGJvdW5kcy54IDw9IHBvaW50LnggJiYgYm91
bmRzLnkgPD0gcG9pbnQueSAmJiBib3VuZHMueCArIGJvdW5kcy53aWR0aCA+PSBwb2ludC54ICYm
IGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCA+PSBwb2ludC55OworICAgIH0KKworICAgIGZ1bmN0
aW9uIHJ1blRlc3RzKCkKKyAgICB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3
aW5kb3cuaW50ZXJuYWxzICYmIGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNr
YWJsZU5vZGUpIHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKCdUZXN0IHRvdWNoIGFkanVzdG1l
bnQgb24gYSBzZWFyY2ggZmllbGQgd2l0aCBhIHZpc2libGUgY2FuY2VsIGJ1dHRvbi4nKTsKKyAg
ICAgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgdGVzdFJ1bm5l
ci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICBydW5Ub3VjaFRlc3RzKCk7CisgICAgICAg
ICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7CisgICAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155000</attachid>
            <date>2012-07-27 11:47:29 -0700</date>
            <delta_ts>2012-07-27 14:49:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91894-20120727144717.patch</filename>
            <type>text/plain</type>
            <size>9039</size>
            <attacher name="Kevin Ellis">kevers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzODkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTlkNjNmMWU1Mjc2NzEx
ZTliOGQyMGU3OTg1OWYxYmFiYmY5YTdhZS4uOTU3NTZmOTZmYTc4N2NlMjI1MTRjYjAyMWFjNTdk
NTJjZWVkNTNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA3LTI0ICBLZXZp
biBFbGxpcyAgPGtldmVyc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2VhcmNoIGNhbmNlbCBi
dXR0b24gaXMgaGFyZCB0byBhY3RpdmF0ZSB3aXRoIGEgdGFwIGdlc3R1cmUgZXZlbiBpZiB0b3Vj
aCBhZGp1c3RtZW50IGlzIGVuYWJsZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MTg5NAorCisgICAgICAgIFJldmlld2VkIGJ5IEFudG9uaW8gR29t
ZXMuCisKKyAgICAgICAgVXBkYXRlIGNoZWNrIGZvciBkZXRlcm1pbmluZyBpZiBhIG5vZGUgcmVz
cG9uZHMgdG8gdGFwIGdlc3R1cmVzLgorICAgICAgICBQcmV2aW91c2x5LCB0aGUgY2FuY2VsIGJ1
dHRvbiB3YXMgYmVpbmcgZGlzY2FyZGVkIGFzIGEgY2FuZGlkYXRlIGZvcgorICAgICAgICB0b3Vj
aCBhZGp1c3RtZW50IGlmIHRoZSB0b3VjaCBhcmVhIGNsaXBwZWQgdGhlIHRleHQgaW5wdXQgcmVn
aW9uCisgICAgICAgIGJlY2F1c2UgdGhlIGNhbmRpZGF0ZSBwcnVuaW5nIHByb2Nlc3MgZmFpbGVk
IHRvIGFjY291bnQgZm9yIHRoZSBjYW5jZWwKKyAgICAgICAgYnV0dG9uIGhhdmluZyBhIGRlZmF1
bHQgbW91c2UgaGFuZGxlci4gIFBvc3NpYmx5IGFuIGludGVyaW0gZml4LAorICAgICAgICBkZXBl
bmRpbmcgb24gcmVzb2x1dGlvbiB0byA5MjA5My4KKworICAgICAgICBUZXN0OiB0b3VjaGFkanVz
dG1lbnQvc2VhcmNoLWNhbmNlbC5odG1sCisKKyAgICAgICAgKiBwYWdlL1RvdWNoQWRqdXN0bWVu
dC5jcHA6CisgICAgICAgIChUb3VjaEFkanVzdG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VG91
Y2hBZGp1c3RtZW50Ojpub2RlUmVzcG9uZHNUb1RhcEdlc3R1cmUpOgorCiAyMDEyLTA3LTI3ICBK
b2UgTWFzb24gIDxqbWFzb25AcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gVXBkYXRl
IE5ldHdvcmtKb2I6OnNlbmRSZXF1ZXN0V2l0aENyZWRlbnRpYWxzIHRvIHVzZSBuZXcgZ2V0UHJv
eHlBZGRyZXNzIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVz
dG1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwCmluZGV4
IDIxODNiNmQ1ZWJmYTYxZDljNTEwYWFmMjYyZTM3NTBiYzMxNjFmNjEuLjg1Y2I2MWVkMjcxMzBk
MGVmMmE1NjQ0MWMwYzhiMDQ2YWU3MDJiOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvVG91Y2hBZGp1c3RtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRq
dXN0bWVudC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAj
aW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAi
SFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgpAQCAtNzUsNiArNzYsMTIg
QEAgYm9vbCBub2RlUmVzcG9uZHNUb1RhcEdlc3R1cmUoTm9kZSogbm9kZSkKICAgICAgICAgaWYg
KGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsYWJlbFRhZykgJiYgc3RhdGljX2Nhc3Q8
SFRNTExhYmVsRWxlbWVudCo+KGVsZW1lbnQpLT5jb250cm9sKCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CisgICAgRWxlbWVudCogc2hhZG93SG9zdCA9IG5vZGUtPnNoYWRvd0hv
c3QoKTsKKyAgICBpZiAoc2hhZG93SG9zdCAmJiBzaGFkb3dIb3N0LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aW5wdXRUYWcpKSB7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0hvc3QpOworICAgICAgICBpZiAoIWlu
cHV0LT5yZWFkT25seSgpICYmICFpbnB1dC0+ZGlzYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KIAogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgaGFzRGVmYXVsdEV2ZW50
SGFuZGxlciBhbmQgdXNlIHRoYXQgaW5zdGVhZCBvZiBhbGwgb2YgdGhlIGFib3ZlIGNoZWNrcy4K
ICAgICBpZiAobm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI3NzliMDc5MGQyYmQ3
ZDJlOWMzMGQxOGNjYWQ2MDkxMWNiOGEzNDcuLjg4M2JjZWQwZDRiOWRlZjdjNGQxY2E0NzZhMGJi
NTQwNmIyZTRlZmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wNy0yNiAgS2V2aW4gRWxs
aXMgIDxrZXZlcnNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNlYXJjaCBjYW5jZWwgYnV0dG9u
IGlzIGhhcmQgdG8gYWN0aXZhdGUgd2l0aCBhIHRhcCBnZXN0dXJlIGV2ZW4gaWYgdG91Y2ggYWRq
dXN0bWVudCBpcyBlbmFibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTE4OTQKKworICAgICAgICBSZXZpZXdlZCBieSBBbnRvbmlvIEdvbWVzLgor
CisgICAgICAgIEFkZCB0ZXN0IGZvciB0b3VjaCBhZGp1c3RtZW50IGluIHRoZSB2aWNpbml0eSBv
ZiBhIHNlYXJjaCBjYW5jZWwgYnV0dG9uLgorICAgICAgICBQcmlvciB0byB0aGUgcGF0Y2gsIHRo
ZSBjYW5jZWwgYnV0dG9uIHdhcyBwcnVuZWQgYXMgYSBjYW5kaWRhdGUgaWYgdGhlIAorICAgICAg
ICB0b3VjaCBhcmVhIGNsaXBwZWQgdGhlIGlucHV0IGZpZWxkLgorCisgICAgICAgICogdG91Y2hh
ZGp1c3RtZW50L3NlYXJjaC1jYW5jZWwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0
b3VjaGFkanVzdG1lbnQvc2VhcmNoLWNhbmNlbC5odG1sOiBBZGRlZC4KKwogMjAxMi0wNy0yNyAg
S2V2aW4gRWxsaXMgIDxrZXZlcnNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEltcHJvdmUgdG91
Y2ggYWRqdXN0bWVudCBmb3IgdGFyZ2V0dGluZyBzbWFsbCBjb250cm9scy4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9zZWFyY2gtY2FuY2VsLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9zZWFyY2gtY2FuY2VsLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yMTI2MjVjZGIyYTFlNGFkYTk0NDI4OGJkOTQzOTVkZDhhNDFiMDJjCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3NlYXJjaC1jYW5jZWwt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzAgQEAKKworVGVzdCB0b3VjaCBhZGp1c3RtZW50IG9u
IGEgc2VhcmNoIGZpZWxkIHdpdGggYSB2aXNpYmxlIGNhbmNlbCBidXR0b24uCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCisKK1RvdWNoIGNlbnRlcmVkIG9uIGNhbmNlbCBidXR0b24g
YnV0IG92ZXJsYXBwaW5nIG5laWdoYm9yaW5nIGNhbmRpZGF0ZS4KK1BBU1MgdGFyZ2V0Q29udGFp
bnNQb2ludCBpcyB0cnVlCitQQVNTIHRvdWNoQ29udGFpbnNQb2ludCBpcyB0cnVlCisKK09mZi1j
ZW50ZXIgdG91Y2hlcyBlbmNsb3NpbmcgY2FuY2VsIGJ1dHRvbi4KK1BBU1MgdGFyZ2V0Q29udGFp
bnNQb2ludCBpcyB0cnVlCitQQVNTIHRvdWNoQ29udGFpbnNQb2ludCBpcyB0cnVlCitQQVNTIHRh
cmdldENvbnRhaW5zUG9pbnQgaXMgdHJ1ZQorUEFTUyB0b3VjaENvbnRhaW5zUG9pbnQgaXMgdHJ1
ZQorUEFTUyB0YXJnZXRDb250YWluc1BvaW50IGlzIHRydWUKK1BBU1MgdG91Y2hDb250YWluc1Bv
aW50IGlzIHRydWUKKworVG91Y2hlcyBjbGlwcGluZyBsZWZ0IGVkZ2Ugb2YgY2FuY2VsLWJ1dHRv
bi4KK1BBU1MgdGFyZ2V0Q29udGFpbnNQb2ludCBpcyB0cnVlCitQQVNTIHRvdWNoQ29udGFpbnNQ
b2ludCBpcyB0cnVlCitQQVNTIHRhcmdldENvbnRhaW5zUG9pbnQgaXMgdHJ1ZQorUEFTUyB0b3Vj
aENvbnRhaW5zUG9pbnQgaXMgdHJ1ZQorUEFTUyB0YXJnZXRDb250YWluc1BvaW50IGlzIHRydWUK
K1BBU1MgdG91Y2hDb250YWluc1BvaW50IGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3Vj
aGFkanVzdG1lbnQvc2VhcmNoLWNhbmNlbC5odG1sIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3Rt
ZW50L3NlYXJjaC1jYW5jZWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTczN2VjMzIxNGEwZGIxNzRjYTBl
NDE0NjViYWY3Mjg0OGJjNzEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hh
ZGp1c3RtZW50L3NlYXJjaC1jYW5jZWwuaHRtbApAQCAtMCwwICsxLDE0MiBAQAorPGh0bWw+Cis8
aGVhZD4KKzxzdHlsZT4KKyAgICBpbnB1dFt0eXBlPSdzZWFyY2gnXSB7CisgICAgICAtd2Via2l0
LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7
CisgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OworICAgICAgcGFkZGluZzogNXB4OworICAg
IH0KKworICAgIGlucHV0W3R5cGU9J3NlYXJjaCddOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0
dG9uIHsKKyAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICAgIC13ZWJraXQtYm94
LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgIGJhY2tncm91bmQ6ICM5OTk7CisgICAgICBoZWln
aHQ6IDEwcHg7CisgICAgICBtYXJnaW46IDA7CisgICAgICBwYWRkaW5nOiAwOworICAgICAgd2lk
dGg6IDEwcHg7CisgICAgfQorPC9zdHlsZT4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgb25sb2Fk
PSJydW5UZXN0cygpIj4KKworPGRpdj4KKyAgPGlucHV0IGlkPSJ0YXJnZXQiIHR5cGU9InNlYXJj
aCIgdmFsdWU9ImFiY2QiLz4KKzwvZGl2PgorCis8cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKzxk
aXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorCis8c2NyaXB0PgorICAgIHZhciBlbGVtZW50OworICAg
IHZhciBhZGp1c3RlZE5vZGU7CisgICAgdmFyIGFkanVzdGVkUG9pbnQ7CisgICAgdmFyIGlucHV0
Qm91bmRzOworICAgIHZhciBjYW5jZWxCb3VuZHM7CisgICAgdmFyIHRleHRDb250ZW50Qm91bmRz
OworICAgIHZhciB0b3VjaEJvdW5kczsKKyAgICB2YXIgdGFyZ2V0Qm91bmRzOworICAgIHZhciB0
YXJnZXRDb250YWluc1BvaW50OworICAgIHZhciB0b3VjaENvbnRhaW5zUG9pbnQ7CisKKyAgICBm
dW5jdGlvbiBmaW5kQWJzb2x1dGVQb3NpdGlvbihub2RlKSB7CisgICAgICAgIHZhciBwb3MgPSB7
bGVmdDogMCwgdG9wOiAwfTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgcG9zLmxlZnQgKz0g
bm9kZS5vZmZzZXRMZWZ0OworICAgICAgICAgICAgcG9zLnRvcCArPSBub2RlLm9mZnNldFRvcDsK
KyAgICAgICAgfSB3aGlsZSAobm9kZSA9IG5vZGUub2Zmc2V0UGFyZW50KTsKKyAgICAgICAgcmV0
dXJuIHBvczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5Ub3VjaFRlc3RzKCkgeworICAgICAg
ICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge30sIGZhbHNl
KTsKKworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhcmdldCcp
OworICAgICAgICB2YXIgcG9zID0gZmluZEFic29sdXRlUG9zaXRpb24oZWxlbWVudCk7CisKKyAg
ICAgICAgdmFyIHggPSBwb3MubGVmdDsKKyAgICAgICAgdmFyIHkgPSBwb3MudG9wOworICAgICAg
ICB2YXIgd2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoOworICAgICAgICB2YXIgaGVpZ2h0ID0g
ZWxlbWVudC5jbGllbnRIZWlnaHQ7CisKKyAgICAgICAgaW5wdXRCb3VuZHMgPSB7CisgICAgICAg
ICAgICB4OiB4LAorICAgICAgICAgICAgeTogeSwKKyAgICAgICAgICAgIHdpZHRoOiB3aWR0aCwK
KyAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0CisgICAgICAgIH07CisKKyAgICAgICAgdmFyIHRv
dWNoUmFkaXVzID0gMjA7CisgICAgICAgIHZhciBvZmZzZXQgPSB0b3VjaFJhZGl1cyAvIDI7CisK
KyAgICAgICAgLy8gQ2VudGVyIG9mIGNhbmNlbCBidXR0b24uCisgICAgICAgIHZhciBtaWRYID0g
eCArIHdpZHRoIC0gMTE7CisgICAgICAgIHZhciBtaWRZID0geSArIGhlaWdodCAvIDI7CisKKyAg
ICAgICAgY2FuY2VsQm91bmRzID0geworICAgICAgICAgICAgeDogbWlkWCAtIDUsCisgICAgICAg
ICAgICB5OiBtaWRZIC0gNSwKKyAgICAgICAgICAgIHdpZHRoOiAxMCwKKyAgICAgICAgICAgIGhl
aWdodDogMTAKKyAgICAgICAgfTsKKworICAgICAgICB0ZXh0Q29udGVudEJvdW5kcyA9IHsKKyAg
ICAgICAgICAgeDogaW5wdXRCb3VuZHMueCwKKyAgICAgICAgICAgeTogaW5wdXRCb3VuZHMueSwK
KyAgICAgICAgICAgd2lkdGg6IGlucHV0Qm91bmRzLndpZHRoIC0gMTYsCisgICAgICAgICAgIGhl
aWdodDogaW5wdXRCb3VuZHMuaGVpZ2h0CisgICAgICAgIH07CisKKyAgICAgICAgZGVidWcoJ1xu
VG91Y2ggY2VudGVyZWQgb24gY2FuY2VsIGJ1dHRvbiBidXQgb3ZlcmxhcHBpbmcgbmVpZ2hib3Jp
bmcgY2FuZGlkYXRlLicpOworICAgICAgICB0ZXN0VG91Y2gobWlkWCwgbWlkWSwgdG91Y2hSYWRp
dXMsIGNhbmNlbEJvdW5kcyk7CisKKyAgICAgICAgZGVidWcoJ1xuT2ZmLWNlbnRlciB0b3VjaGVz
IGVuY2xvc2luZyBjYW5jZWwgYnV0dG9uLicpOworICAgICAgICB0ZXN0VG91Y2gobWlkWCAtIG9m
ZnNldCwgbWlkWSwgdG91Y2hSYWRpdXMsIGNhbmNlbEJvdW5kcyk7CisgICAgICAgIHRlc3RUb3Vj
aChtaWRYIC0gb2Zmc2V0LCBtaWRZICsgb2Zmc2V0LCB0b3VjaFJhZGl1cywgY2FuY2VsQm91bmRz
KTsKKyAgICAgICAgdGVzdFRvdWNoKG1pZFggLSBvZmZzZXQsIG1pZFkgLSBvZmZzZXQsIHRvdWNo
UmFkaXVzLCBjYW5jZWxCb3VuZHMpOworCisgICAgICAgIGRlYnVnKCdcblRvdWNoZXMgY2xpcHBp
bmcgbGVmdCBlZGdlIG9mIGNhbmNlbC1idXR0b24uJyk7CisgICAgICAgIHRlc3RUb3VjaChtaWRY
IC0gdG91Y2hSYWRpdXMgLSAyLCBtaWRZLCB0b3VjaFJhZGl1cywgdGV4dENvbnRlbnRCb3VuZHMp
OworICAgICAgICB0ZXN0VG91Y2gobWlkWCAtIHRvdWNoUmFkaXVzIC0gMiwgbWlkWSAtIG9mZnNl
dCwgdG91Y2hSYWRpdXMsIHRleHRDb250ZW50Qm91bmRzKTsKKyAgICAgICAgdGVzdFRvdWNoKG1p
ZFggLSB0b3VjaFJhZGl1cyAtIDIsIG1pZFkgKyBvZmZzZXQsIHRvdWNoUmFkaXVzLCB0ZXh0Q29u
dGVudEJvdW5kcyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdFRvdWNoKHRvdWNoWCwgdG91
Y2hZLCByYWRpdXMsIGJvdW5kcykgeworCisgICAgICAgIHRhcmdldEJvdW5kcyA9IGJvdW5kczsK
KworICAgICAgICB0b3VjaEJvdW5kcyA9IHsKKyAgICAgICAgICAgIHg6IHRvdWNoWCAtIHJhZGl1
cywKKyAgICAgICAgICAgIHk6IHRvdWNoWSAtIHJhZGl1cywKKyAgICAgICAgICAgIHdpZHRoOiAy
ICogcmFkaXVzLAorICAgICAgICAgICAgaGVpZ2h0OiAyICogcmFkaXVzCisgICAgICAgIH07Cisg
ICAgICAgIGFkanVzdGVkUG9pbnQgPSBpbnRlcm5hbHMudG91Y2hQb3NpdGlvbkFkanVzdGVkVG9C
ZXN0Q2xpY2thYmxlTm9kZSh0b3VjaEJvdW5kcy54LCB0b3VjaEJvdW5kcy55LCB0b3VjaEJvdW5k
cy53aWR0aCwgdG91Y2hCb3VuZHMuaGVpZ2h0LCBkb2N1bWVudCk7CisgICAgICAgIHRhcmdldENv
bnRhaW5zUG9pbnQgPSBjb250YWluc1BvaW50KHRhcmdldEJvdW5kcywgYWRqdXN0ZWRQb2ludCk7
CisgICAgICAgIHRvdWNoQ29udGFpbnNQb2ludCA9IGNvbnRhaW5zUG9pbnQodG91Y2hCb3VuZHMs
IGFkanVzdGVkUG9pbnQpOworICAgICAgICBzaG91bGRCZVRydWUoJ3RhcmdldENvbnRhaW5zUG9p
bnQnKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCd0b3VjaENvbnRhaW5zUG9pbnQnKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBjb250YWluc1BvaW50KGJvdW5kcywgcG9pbnQpIHsKKyAgICAgICAg
cmV0dXJuIGJvdW5kcy54IDw9IHBvaW50LnggJiYgYm91bmRzLnkgPD0gcG9pbnQueSAmJiBib3Vu
ZHMueCArIGJvdW5kcy53aWR0aCA+PSBwb2ludC54ICYmIGJvdW5kcy55ICsgYm91bmRzLmhlaWdo
dCA+PSBwb2ludC55OworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICB7Cisg
ICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIGludGVy
bmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUpIHsKKyAgICAgICAgICAg
IGRlc2NyaXB0aW9uKCdUZXN0IHRvdWNoIGFkanVzdG1lbnQgb24gYSBzZWFyY2ggZmllbGQgd2l0
aCBhIHZpc2libGUgY2FuY2VsIGJ1dHRvbi4nKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAg
ICAgICAgICBydW5Ub3VjaFRlc3RzKCk7CisgICAgICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNl
ZCgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAg
ICB9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>