<?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>78361</bug_id>
          
          <creation_ts>2012-02-10 09:09:35 -0800</creation_ts>
          <short_desc>Selectively retrieve text content around a given position</short_desc>
          <delta_ts>2012-03-28 06:31:23 -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>DOM</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>82460</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Leandro Graciá Gil">leandrogracia</reporter>
          <assigned_to name="Leandro Graciá Gil">leandrogracia</assigned_to>
          <cc>ap</cc>
    
    <cc>enrica</cc>
    
    <cc>tkent</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>554101</commentid>
    <comment_count>0</comment_count>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-02-10 09:09:35 -0800</bug_when>
    <thetext>Hi,

We are interested in retrieving a string containing the text content around a given VisiblePosition in a way that lets us extract a text range from it later. For example, we tap in a position inside a paragraph of text, retrieve about 50 characters around the tapped position into a string, operate it and then recover a text Range based on offsets of the extracted string. We also want to perform this selectively: we don&apos;t want to enter any form controls during the text content retrieval.

To achieve this we&apos;ve developed a class called for now &apos;DOMTextContentWalker&apos; (see the patch for details). We would like your opinion about including this in WebCore so that other ports might be able to make use of it, and if so were should it be included. A first proposal could be WebCore/dom given the kind of operation it performs, although it&apos;s not part of the DOM API. We&apos;re also open to place this in a WebKit API in case this doesn&apos;t seem useful for other ports. Any suggestions and opinions are welcome.

As usual, we will provide a layout test or this feature once it&apos;s clear what should be done about it.

Thanks,
Leandro</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554105</commentid>
    <comment_count>1</comment_count>
      <attachid>126522</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-02-10 09:18:15 -0800</bug_when>
    <thetext>Created attachment 126522
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554140</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-02-10 10:14:12 -0800</bug_when>
    <thetext>Extracting text content only doesn&apos;t appear useful for Mac port at least - we would need an attributed string. Enrica, do you agree?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554189</commentid>
    <comment_count>3</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-02-10 10:37:30 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Extracting text content only doesn&apos;t appear useful for Mac port at least - we would need an attributed string. Enrica, do you agree?

I can imagine possible uses of a feature like this and I think it could be useful to have it in WebCore.
We can decide to expose it as API based on attributed string in the Mac port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554279</commentid>
    <comment_count>4</comment_count>
      <attachid>126522</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-10 12:12:43 -0800</bug_when>
    <thetext>Comment on attachment 126522
Patch

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

&gt; Source/WebCore/dom/DOMTextContentWalker.cpp:13
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS&apos;&apos; AND ANY

Wrong copyright statement. Please use the &quot;correct&quot; one.

&gt; Source/WebCore/dom/DOMTextContentWalker.cpp:32
&gt; +#include &quot;TextIterator.h&quot;
&gt; +#include &quot;VisiblePosition.h&quot;
&gt; +#include &quot;VisibleSelection.h&quot;
&gt; +#include &quot;visible_units.h&quot;

This class heavily depends on editing. I don&apos;t think it should be in DOM. It belongs in editing.

&gt; Source/WebCore/dom/DOMTextContentWalker.cpp:36
&gt; +static PassRefPtr&lt;Range&gt; getRange(const Position&amp; start, const Position&amp; end)

In WebKit, we only use &quot;get&quot;~ if the value is returned through pass-by-reference or pass-by-pointer in the argument list.
Also, &quot;getRange&quot; is an extremely generic name.

&gt; Source/WebCore/dom/DOMTextContentWalker.cpp:38
&gt; +    return VisibleSelection(start.parentAnchoredEquivalent(), end.parentAnchoredEquivalent(), DOWNSTREAM).firstRange();

Why not Range::create(start.parentAnchoredEquivalent(), end.parentAnchoredEquivalent()) ?

&gt; Source/WebCore/dom/DOMTextContentWalker.cpp:45
&gt; +    CharacterIterator forwardChar(makeRange(position, endOfDocument(position)).get(), TextIteratorStopsOnFormControls);

This isn&apos;t &quot;char&quot;, it&apos;s an iterator.

&gt; Source/WebCore/dom/DOMTextContentWalker.h:13
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS&apos;&apos; AND ANY

Ditto about &quot;Apple Inc.&quot;

&gt; Source/WebCore/dom/DOMTextContentWalker.h:36
&gt; +// Explore the DOM tree to find the text contents up to a limit
&gt; +// around a position in a given text node.

We don&apos;t normally add a comment like this to explain what a class does. Instead, we give a descriptive name to the class such that it&apos;s self-evident.

&gt; Source/WebCore/dom/DOMTextContentWalker.h:37
&gt; +class DOMTextContentWalker {

This isn&apos;t really a &quot;walker&quot; class. It obtains text around a given visible position. It&apos;s certainly not &quot;DOM&quot; because the prefix &quot;DOM&quot; indicates that it&apos;s exposed to DOM, which isn&apos;t case at all here.
How about SurroundingText?

&gt; Source/WebCore/dom/DOMTextContentWalker.h:45
&gt; +    // Convert start/end positions in the content text string into a text range.

This comment repeats the code, please remove and perhaps rename arguments to startOffsetInContent and endOffsetInContent.

&gt; Source/WebCore/editing/TextIterator.cpp:243
&gt; +static bool checkFormControlElement(Node* startNode)

What are you &quot;checking&quot; here? It should renamed to enclosedByFormControlElement.

&gt; Source/WebCore/editing/TextIterator.cpp:247
&gt; +        if (node-&gt;isElementNode() &amp;&amp; static_cast&lt;Element*&gt;(node)-&gt;isFormControlElement())

Don&apos;t we have toElement?

&gt; Source/WebCore/editing/TextIterator.cpp:399
&gt; +        if (!m_shouldStop &amp;&amp; m_stopsOnFormControls &amp;&amp; checkFormControlElement(m_node))

r- because TextIterator is in extremely hot path and we shouldn&apos;t be walking up the tree on every node like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557148</commentid>
    <comment_count>5</comment_count>
      <attachid>126522</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-02-15 04:15:13 -0800</bug_when>
    <thetext>Comment on attachment 126522
Patch

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

&gt;&gt; Source/WebCore/editing/TextIterator.cpp:399
&gt;&gt; +        if (!m_shouldStop &amp;&amp; m_stopsOnFormControls &amp;&amp; checkFormControlElement(m_node))
&gt; 
&gt; r- because TextIterator is in extremely hot path and we shouldn&apos;t be walking up the tree on every node like this.

That should only happen when the new TextIteratorStopsOnFormControls behavior is set. It shouldn&apos;t affect other uses of TextIterator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577292</commentid>
    <comment_count>6</comment_count>
      <attachid>131607</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-13 07:31:44 -0700</bug_when>
    <thetext>Created attachment 131607
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577293</commentid>
    <comment_count>7</comment_count>
      <attachid>126522</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-13 07:32:36 -0700</bug_when>
    <thetext>Comment on attachment 126522
Patch

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

&gt;&gt; Source/WebCore/dom/DOMTextContentWalker.cpp:13
&gt;&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS&apos;&apos; AND ANY
&gt; 
&gt; Wrong copyright statement. Please use the &quot;correct&quot; one.

I thought this was the correct one. Could you please point me to it?

&gt;&gt; Source/WebCore/dom/DOMTextContentWalker.cpp:32
&gt;&gt; +#include &quot;visible_units.h&quot;
&gt; 
&gt; This class heavily depends on editing. I don&apos;t think it should be in DOM. It belongs in editing.

Fixed. Now located in editing/SurroundingText as suggested below.

&gt;&gt; Source/WebCore/dom/DOMTextContentWalker.cpp:36
&gt;&gt; +static PassRefPtr&lt;Range&gt; getRange(const Position&amp; start, const Position&amp; end)
&gt; 
&gt; In WebKit, we only use &quot;get&quot;~ if the value is returned through pass-by-reference or pass-by-pointer in the argument list.
&gt; Also, &quot;getRange&quot; is an extremely generic name.

Function removed.

&gt;&gt; Source/WebCore/dom/DOMTextContentWalker.cpp:38
&gt;&gt; +    return VisibleSelection(start.parentAnchoredEquivalent(), end.parentAnchoredEquivalent(), DOWNSTREAM).firstRange();
&gt; 
&gt; Why not Range::create(start.parentAnchoredEquivalent(), end.parentAnchoredEquivalent()) ?

Done as suggested.

&gt;&gt; Source/WebCore/dom/DOMTextContentWalker.cpp:45
&gt;&gt; +    CharacterIterator forwardChar(makeRange(position, endOfDocument(position)).get(), TextIteratorStopsOnFormControls);
&gt; 
&gt; This isn&apos;t &quot;char&quot;, it&apos;s an iterator.

Fixed.

&gt;&gt; Source/WebCore/dom/DOMTextContentWalker.h:13
&gt;&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS&apos;&apos; AND ANY
&gt; 
&gt; Ditto about &quot;Apple Inc.&quot;

Will fix with the correct copyright statement.

&gt;&gt; Source/WebCore/dom/DOMTextContentWalker.h:36
&gt;&gt; +// around a position in a given text node.
&gt; 
&gt; We don&apos;t normally add a comment like this to explain what a class does. Instead, we give a descriptive name to the class such that it&apos;s self-evident.

Fixed.

&gt;&gt; Source/WebCore/dom/DOMTextContentWalker.h:37
&gt;&gt; +class DOMTextContentWalker {
&gt; 
&gt; This isn&apos;t really a &quot;walker&quot; class. It obtains text around a given visible position. It&apos;s certainly not &quot;DOM&quot; because the prefix &quot;DOM&quot; indicates that it&apos;s exposed to DOM, which isn&apos;t case at all here.
&gt; How about SurroundingText?

Fixed.

&gt;&gt; Source/WebCore/dom/DOMTextContentWalker.h:45
&gt;&gt; +    // Convert start/end positions in the content text string into a text range.
&gt; 
&gt; This comment repeats the code, please remove and perhaps rename arguments to startOffsetInContent and endOffsetInContent.

Fixed.

&gt;&gt; Source/WebCore/editing/TextIterator.cpp:243
&gt;&gt; +static bool checkFormControlElement(Node* startNode)
&gt; 
&gt; What are you &quot;checking&quot; here? It should renamed to enclosedByFormControlElement.

Fixed.

&gt;&gt; Source/WebCore/editing/TextIterator.cpp:247
&gt;&gt; +        if (node-&gt;isElementNode() &amp;&amp; static_cast&lt;Element*&gt;(node)-&gt;isFormControlElement())
&gt; 
&gt; Don&apos;t we have toElement?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577299</commentid>
    <comment_count>8</comment_count>
      <attachid>131607</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-13 07:48:34 -0700</bug_when>
    <thetext>Comment on attachment 131607
Patch

Attachment 131607 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/11948518</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577323</commentid>
    <comment_count>9</comment_count>
      <attachid>131616</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-13 08:05:56 -0700</bug_when>
    <thetext>Created attachment 131616
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579560</commentid>
    <comment_count>10</comment_count>
      <attachid>131616</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-15 11:23:04 -0700</bug_when>
    <thetext>Comment on attachment 131616
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        Reviewed by NOBODY (OOPS!).

This line needs to appear before the description.

&gt; Source/WebCore/editing/SurroundingText.cpp:22
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + * 1.  Redistributions of source code must retain the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt; + * 2.  Redistributions in binary form must reproduce the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer in the
&gt; + *     documentation and/or other materials provided with the distribution.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS&apos;&apos; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
&gt; + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
&gt; + * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
&gt; + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
&gt; + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
&gt; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
&gt; + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
&gt; + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Please use the correct license. e.g. EditingStyle.h

&gt; Source/WebCore/editing/SurroundingText.cpp:37
&gt; +SurroundingText::SurroundingText(const VisiblePosition&amp; position, unsigned maxLength)

It&apos;s probably better to call this one visiblePosition.

&gt; Source/WebCore/editing/SurroundingText.cpp:44
&gt; +    // No forward contents, started inside form control.

I don&apos;t think this comment is useful (it only says what, not why; also the code is self-evident as is). Please remove.

&gt; Source/WebCore/editing/SurroundingText.cpp:45
&gt; +    Position deepPosition = position.deepEquivalent();

And this one position.

&gt; Source/WebCore/editing/SurroundingText.cpp:47
&gt; +    if (!Range::create(document, deepPosition, forwardIterator.range()-&gt;startPosition())-&gt;text().length())

You can&apos;t pass a position to Range unless it&apos;s range compliant. r- because of this.
So you need to do deepPosition.parentAnchoredEquivalent() here.
You probably want to do this when you declare deepPosition.

&gt; Source/WebCore/editing/SurroundingText.cpp:57
&gt; +PassRefPtr&lt;Range&gt; SurroundingText::contentOffsetsToRange(unsigned startOffsetInContent, unsigned endOffsetInContent)

It&apos;s probably better to call this function rangeFromContentOffsets.

&gt; Source/WebCore/editing/TextIterator.cpp:245
&gt; +static bool enclosedByFormControlElement(Node* startNode)
&gt; +{
&gt; +    Node* node = startNode;

You could just name startNode node, then you wouldn&apos;t have to declare a local variable.

&gt; Source/WebCore/editing/TextIterator.cpp:395
&gt; +        if (!m_shouldStop &amp;&amp; m_stopsOnFormControls &amp;&amp; enclosedByFormControlElement(m_node))
&gt; +            m_shouldStop = true;

Why do we want to proceed if we&apos;re already inside a form control element? Shouldn&apos;t be just bail out here?
If you do that, we wouldn&apos;t need m_shouldStop. We can just m_node = 0 and everything else should just work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586617</commentid>
    <comment_count>11</comment_count>
      <attachid>131616</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-23 12:38:27 -0700</bug_when>
    <thetext>Comment on attachment 131616
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt; +        Reviewed by NOBODY (OOPS!).
&gt; 
&gt; This line needs to appear before the description.

Fixed.

&gt;&gt; Source/WebCore/editing/SurroundingText.cpp:22
&gt;&gt; + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; 
&gt; Please use the correct license. e.g. EditingStyle.h

Fixed. Thanks for pointing to a good example.

&gt;&gt; Source/WebCore/editing/SurroundingText.cpp:37
&gt;&gt; +SurroundingText::SurroundingText(const VisiblePosition&amp; position, unsigned maxLength)
&gt; 
&gt; It&apos;s probably better to call this one visiblePosition.

Fixed.

&gt;&gt; Source/WebCore/editing/SurroundingText.cpp:44
&gt;&gt; +    // No forward contents, started inside form control.
&gt; 
&gt; I don&apos;t think this comment is useful (it only says what, not why; also the code is self-evident as is). Please remove.

Fixed.

&gt;&gt; Source/WebCore/editing/SurroundingText.cpp:45
&gt;&gt; +    Position deepPosition = position.deepEquivalent();
&gt; 
&gt; And this one position.

Fixed.

&gt;&gt; Source/WebCore/editing/SurroundingText.cpp:47
&gt;&gt; +    if (!Range::create(document, deepPosition, forwardIterator.range()-&gt;startPosition())-&gt;text().length())
&gt; 
&gt; You can&apos;t pass a position to Range unless it&apos;s range compliant. r- because of this.
&gt; So you need to do deepPosition.parentAnchoredEquivalent() here.
&gt; You probably want to do this when you declare deepPosition.

Fixed. Thanks for finding this.

&gt;&gt; Source/WebCore/editing/SurroundingText.cpp:57
&gt;&gt; +PassRefPtr&lt;Range&gt; SurroundingText::contentOffsetsToRange(unsigned startOffsetInContent, unsigned endOffsetInContent)
&gt; 
&gt; It&apos;s probably better to call this function rangeFromContentOffsets.

Fixed.

&gt;&gt; Source/WebCore/editing/TextIterator.cpp:245
&gt;&gt; +    Node* node = startNode;
&gt; 
&gt; You could just name startNode node, then you wouldn&apos;t have to declare a local variable.

Fixed.

&gt;&gt; Source/WebCore/editing/TextIterator.cpp:395
&gt;&gt; +            m_shouldStop = true;
&gt; 
&gt; Why do we want to proceed if we&apos;re already inside a form control element? Shouldn&apos;t be just bail out here?
&gt; If you do that, we wouldn&apos;t need m_shouldStop. We can just m_node = 0 and everything else should just work.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586618</commentid>
    <comment_count>12</comment_count>
      <attachid>131616</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-23 12:39:42 -0700</bug_when>
    <thetext>Comment on attachment 131616
Patch

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

&gt;&gt;&gt; Source/WebCore/editing/TextIterator.cpp:395
&gt;&gt;&gt; +            m_shouldStop = true;
&gt;&gt; 
&gt;&gt; Why do we want to proceed if we&apos;re already inside a form control element? Shouldn&apos;t be just bail out here?
&gt;&gt; If you do that, we wouldn&apos;t need m_shouldStop. We can just m_node = 0 and everything else should just work.
&gt; 
&gt; Fixed.

Correcting my last comment: as discussed in #webkit, we should keep m_shouldStop in order to preserve the range.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586620</commentid>
    <comment_count>13</comment_count>
      <attachid>133537</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-23 12:40:05 -0700</bug_when>
    <thetext>Created attachment 133537
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586637</commentid>
    <comment_count>14</comment_count>
      <attachid>133537</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-23 12:57:21 -0700</bug_when>
    <thetext>Comment on attachment 133537
Patch

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

&gt; Source/WebCore/editing/TextIterator.cpp:243
&gt; +static bool enclosedByFormControlElement(Node* node)

Nit: enclosingFormControlElement. You may consider moving this to FromControlElement.h/cpp after changing the return type to Node*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586815</commentid>
    <comment_count>15</comment_count>
      <attachid>133537</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-23 15:39:09 -0700</bug_when>
    <thetext>Comment on attachment 133537
Patch

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

&gt;&gt; Source/WebCore/editing/TextIterator.cpp:243
&gt;&gt; +static bool enclosedByFormControlElement(Node* node)
&gt; 
&gt; Nit: enclosingFormControlElement. You may consider moving this to FromControlElement.h/cpp after changing the return type to Node*.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586816</commentid>
    <comment_count>16</comment_count>
      <attachid>133573</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-23 15:39:34 -0700</bug_when>
    <thetext>Created attachment 133573
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589257</commentid>
    <comment_count>17</comment_count>
      <attachid>133573</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-27 14:08:04 -0700</bug_when>
    <thetext>Comment on attachment 133573
Patch

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

&gt; Source/WebCore/editing/TextIterator.cpp:1170
&gt; +    // Prevent changing the iterator position if a form control element was found and advance should stop on it.

This comment repeats what the code already says. Please remove.

&gt; Source/WebCore/html/HTMLFormControlElement.cpp:468
&gt; +    while (node) {

My preference is to use for-loop here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589886</commentid>
    <comment_count>18</comment_count>
      <attachid>133573</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-28 05:54:08 -0700</bug_when>
    <thetext>Comment on attachment 133573
Patch

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

Thanks for the review. Since the suggested changes are minor nits I&apos;ll be applying them directly to the committed patch.

&gt;&gt; Source/WebCore/editing/TextIterator.cpp:1170
&gt;&gt; +    // Prevent changing the iterator position if a form control element was found and advance should stop on it.
&gt; 
&gt; This comment repeats what the code already says. Please remove.

Removed.

&gt;&gt; Source/WebCore/html/HTMLFormControlElement.cpp:468
&gt;&gt; +    while (node) {
&gt; 
&gt; My preference is to use for-loop here.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589893</commentid>
    <comment_count>19</comment_count>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-03-28 06:03:14 -0700</bug_when>
    <thetext>Committed r112389: &lt;http://trac.webkit.org/changeset/112389&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126522</attachid>
            <date>2012-02-10 09:18:15 -0800</date>
            <delta_ts>2012-03-13 07:32:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78361-20120210171813.patch</filename>
            <type>text/plain</type>
            <size>14898</size>
            <attacher name="Leandro Graciá Gil">leandrogracia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MjM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTQzMzRjODdiYzYwYmI4
Yjc3MzMxOWU4MzFkZGUxZDAyNmM2OWQyYi4uN2ZmZGE1M2JmODNmOGU1YTcyZDU1MTBlYjQ5ZDZh
YTM5Y2ZkNjBjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTAyLTEwICBMZWFu
ZHJvIEdyYWNpYSBHaWwgIDxsZWFuZHJvZ3JhY2lhQGNocm9taXVtLm9yZz4KKworICAgICAgICBT
ZWxlY3RpdmVseSByZXRyaWV2ZSB0ZXh0IGNvbnRlbnQgYXJvdW5kIGEgZ2l2ZW4gcG9zaXRpb24u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODM2MQor
CisgICAgICAgIEludHJvZHVjZSB0aGUgRE9NVGV4dENvbnRlbnRXYWxrZXIgY2xhc3MgdG8gc2Vs
ZWN0aXZlbHkgcmV0cmlldmUgY29udGVudAorICAgICAgICBhcm91bmQgYSBnaXZlbiBWaXNpYmxl
UG9zaXRpb24gaW50byBhIHN0cmluZyBpbiBzdWNoIGEgd2F5IHRoYXQgYSB0ZXh0CisgICAgICAg
IFJhbmdlIGNhbiBiZSBleHRyYWN0ZWQgbGF0ZXIgZnJvbSBhIHBhaXIgb2YgdGhlIHN0cmluZydz
IHBvc2l0aW9ucy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUZXN0czogYSBuZXcgbGF5b3V0IHRlc3Qgd2lsbCBiZSBpbnRyb2R1Y2VkIG9uY2UgdGhl
IHJlcXVpcmVkIFdlYktpdCBBUEkgY29kZSBpcyByZWFkeS4KKworICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBkb20vRE9NVGV4dENvbnRlbnRXYWxrZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NVGV4dENvbnRlbnRXYWxrZXI6OkRPTVRleHRDb250ZW50V2Fsa2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVRleHRDb250ZW50V2Fsa2VyOjpjb250ZW50T2Zmc2V0c1RvUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVGV4dENvbnRlbnRXYWxrZXI6OmNvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NVGV4dENvbnRlbnRXYWxrZXI6OnBvc2l0aW9uT2Zmc2V0SW5D
b250ZW50KToKKyAgICAgICAgKiBkb20vRE9NVGV4dENvbnRlbnRXYWxrZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERPTVRleHRDb250ZW50V2Fsa2VyKToKKyAgICAg
ICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0Zv
cm1Db250cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVy
YXRvcjo6YXRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjphZHZhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBs
aWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YXRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxp
ZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSk6CisgICAgICAgICogZWRpdGluZy9U
ZXh0SXRlcmF0b3IuaDoKKyAgICAgICAgKFRleHRJdGVyYXRvcik6CisgICAgICAgIChTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKToKKwogMjAxMi0wMi0wOSAgQWxsYW4gU2FuZGZlbGQg
SmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KIAogICAgICAgICBFbnN1cmUgdGltZXJz
IGFuZCBvdGhlciBhY3RpdmUgRE9NIG9iamVjdHMgZG8gbm90IGZpcmUgaW4gc3VzcGVuZGVkIGRv
Y3VtZW50cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBjNTlhY2RjOTczZDNkNDI2OWIyMzkxYzc0NjUz
MjYzNDFkYjJhZmFjLi42YjRmYWQxM2JmMjhkNjAwMzc5ZDAyNWVlOWU2ZTViMDhiODUxYjA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC00OTU2LDYgKzQ5NTYsOCBAQAogICAgICAgICAgICAgJ2RvbS9E
T01TdHJpbmdMaXN0LmgnLAogICAgICAgICAgICAgJ2RvbS9ET01TdHJpbmdNYXAuY3BwJywKICAg
ICAgICAgICAgICdkb20vRE9NU3RyaW5nTWFwLmgnLAorICAgICAgICAgICAgJ2RvbS9ET01UZXh0
Q29udGVudFdhbGtlci5jcHAnLAorICAgICAgICAgICAgJ2RvbS9ET01UZXh0Q29udGVudFdhbGtl
ci5oJywKICAgICAgICAgICAgICdkb20vRGF0YVRyYW5zZmVySXRlbS5jcHAnLAogICAgICAgICAg
ICAgJ2RvbS9EYXRhVHJhbnNmZXJJdGVtLmgnLAogICAgICAgICAgICAgJ2RvbS9EYXRhVHJhbnNm
ZXJJdGVtTGlzdC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01UZXh0Q29u
dGVudFdhbGtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NVGV4dENvbnRlbnRXYWxrZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQ0MjZjMGE0YzcxYTkzN2RiYTAzY2MwZTQzZGIxNTMzMGM4MWFiZjIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NVGV4dENvbnRlbnRXYWxr
ZXIuY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJET01UZXh0Q29udGVudFdhbGtlci5oIgorCisjaW5jbHVkZSAiUmFuZ2Uu
aCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24u
aCIKKyNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAidmlzaWJsZV91bml0
cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBn
ZXRSYW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCit7Cisg
ICAgcmV0dXJuIFZpc2libGVTZWxlY3Rpb24oc3RhcnQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50
KCksIGVuZC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSwgRE9XTlNUUkVBTSkuZmlyc3RSYW5n
ZSgpOworfQorCitET01UZXh0Q29udGVudFdhbGtlcjo6RE9NVGV4dENvbnRlbnRXYWxrZXIoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgdW5zaWduZWQgbWF4TGVuZ3RoKQorICAgIDog
bV9wb3NpdGlvbk9mZnNldEluQ29udGVudCgwKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGhhbGZN
YXhMZW5ndGggPSBtYXhMZW5ndGggLyAyOworICAgIENoYXJhY3Rlckl0ZXJhdG9yIGZvcndhcmRD
aGFyKG1ha2VSYW5nZShwb3NpdGlvbiwgZW5kT2ZEb2N1bWVudChwb3NpdGlvbikpLmdldCgpLCBU
ZXh0SXRlcmF0b3JTdG9wc09uRm9ybUNvbnRyb2xzKTsKKyAgICBmb3J3YXJkQ2hhci5hZHZhbmNl
KG1heExlbmd0aCAtIGhhbGZNYXhMZW5ndGgpOworCisgICAgLy8gTm8gZm9yd2FyZCBjb250ZW50
cywgc3RhcnRlZCBpbnNpZGUgZm9ybSBjb250cm9sLgorICAgIGlmICghZ2V0UmFuZ2UocG9zaXRp
b24uZGVlcEVxdWl2YWxlbnQoKSwgZm9yd2FyZENoYXIucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigp
KS0+dGV4dCgpLmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBCYWNrd2FyZHNDaGFy
YWN0ZXJJdGVyYXRvciBiYWNrd2FyZHNDaGFyKG1ha2VSYW5nZShzdGFydE9mRG9jdW1lbnQocG9z
aXRpb24pLCBwb3NpdGlvbikuZ2V0KCksIFRleHRJdGVyYXRvclN0b3BzT25Gb3JtQ29udHJvbHMp
OworICAgIGJhY2t3YXJkc0NoYXIuYWR2YW5jZShoYWxmTWF4TGVuZ3RoKTsKKworICAgIG1fcG9z
aXRpb25PZmZzZXRJbkNvbnRlbnQgPSBnZXRSYW5nZShiYWNrd2FyZHNDaGFyLnJhbmdlKCktPmVu
ZFBvc2l0aW9uKCksIHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpLT50ZXh0KCkubGVuZ3RoKCk7
CisgICAgbV9jb250ZW50UmFuZ2UgPSBnZXRSYW5nZShiYWNrd2FyZHNDaGFyLnJhbmdlKCktPmVu
ZFBvc2l0aW9uKCksIGZvcndhcmRDaGFyLnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKSk7Cit9CisK
K1Bhc3NSZWZQdHI8UmFuZ2U+IERPTVRleHRDb250ZW50V2Fsa2VyOjpjb250ZW50T2Zmc2V0c1Rv
UmFuZ2UodW5zaWduZWQgc3RhcnRJbkNvbnRlbnQsIHVuc2lnbmVkIGVuZEluQ29udGVudCkKK3sK
KyAgICBpZiAoc3RhcnRJbkNvbnRlbnQgPj0gZW5kSW5Db250ZW50IHx8IGVuZEluQ29udGVudCA+
IGNvbnRlbnQoKS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBDaGFyYWN0ZXJJ
dGVyYXRvciBpdGVyYXRvcihtX2NvbnRlbnRSYW5nZS5nZXQoKSk7CisgICAgaXRlcmF0b3IuYWR2
YW5jZShzdGFydEluQ29udGVudCk7CisKKyAgICBQb3NpdGlvbiBzdGFydCA9IGl0ZXJhdG9yLnJh
bmdlKCktPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBpdGVyYXRvci5hZHZhbmNlKGVuZEluQ29udGVu
dCAtIHN0YXJ0SW5Db250ZW50KTsKKyAgICBQb3NpdGlvbiBlbmQgPSBpdGVyYXRvci5yYW5nZSgp
LT5zdGFydFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIGdldFJhbmdlKHN0YXJ0LCBlbmQpOworfQor
CitTdHJpbmcgRE9NVGV4dENvbnRlbnRXYWxrZXI6OmNvbnRlbnQoKSBjb25zdAoreworICAgIGlm
IChtX2NvbnRlbnRSYW5nZSkKKyAgICAgICAgcmV0dXJuIG1fY29udGVudFJhbmdlLT50ZXh0KCk7
CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit1bnNpZ25lZCBET01UZXh0Q29udGVudFdhbGtl
cjo6cG9zaXRpb25PZmZzZXRJbkNvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3Bvc2l0
aW9uT2Zmc2V0SW5Db250ZW50OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NVGV4dENvbnRlbnRXYWxrZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9ET01UZXh0Q29udGVudFdhbGtlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxMWFjMzk5ZmIy
NWU1NWU4OGI0YTMxMGYzMzVhZDFmMzgwYjNjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRE9NVGV4dENvbnRlbnRXYWxrZXIuaApAQCAtMCwwICsxLDU2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIERPTVRleHRDb250ZW50V2Fsa2VyX2gKKyNkZWZpbmUgRE9NVGV4
dENvbnRlbnRXYWxrZXJfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBSYW5nZTsKK2NsYXNzIFZpc2libGVQb3NpdGlvbjsKKwor
Ly8gRXhwbG9yZSB0aGUgRE9NIHRyZWUgdG8gZmluZCB0aGUgdGV4dCBjb250ZW50cyB1cCB0byBh
IGxpbWl0CisvLyBhcm91bmQgYSBwb3NpdGlvbiBpbiBhIGdpdmVuIHRleHQgbm9kZS4KK2NsYXNz
IERPTVRleHRDb250ZW50V2Fsa2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShET01UZXh0
Q29udGVudFdhbGtlcik7CitwdWJsaWM6CisgICAgRE9NVGV4dENvbnRlbnRXYWxrZXIoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgdW5zaWduZWQgbWF4TGVuZ3RoKTsKKworICAgIFN0cmluZyBjb250
ZW50KCkgY29uc3Q7CisgICAgdW5zaWduZWQgcG9zaXRpb25PZmZzZXRJbkNvbnRlbnQoKSBjb25z
dDsKKworICAgIC8vIENvbnZlcnQgc3RhcnQvZW5kIHBvc2l0aW9ucyBpbiB0aGUgY29udGVudCB0
ZXh0IHN0cmluZyBpbnRvIGEgdGV4dCByYW5nZS4KKyAgICBQYXNzUmVmUHRyPFJhbmdlPiBjb250
ZW50T2Zmc2V0c1RvUmFuZ2UodW5zaWduZWQgc3RhcnRJbkNvbnRlbnQsIHVuc2lnbmVkIGVuZElu
Q29udGVudCk7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFJhbmdlPiBtX2NvbnRlbnRSYW5nZTsK
KyAgICBzaXplX3QgbV9wb3NpdGlvbk9mZnNldEluQ29udGVudDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERPTVRleHRDb250ZW50V2Fsa2VyX2gKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IGMxYzc5ZjI4YWIxNTA0NDE2ZTZi
YTJjY2NhMWFiZmM2ZmQ1NmE0OTMuLjc3ZjRlNmIzYmU1ODJkNTgxMTk4YjE2YzBmYjIyMzUzNGRm
ZTk3YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTI0MCw2
ICsyNDAsMTcgQEAgc3RhdGljIHZvaWQgc2V0VXBGdWxseUNsaXBwZWRTdGFjayhCaXRTdGFjayYg
c3RhY2ssIE5vZGUqIG5vZGUpCiAgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA9PSAxICsgZGVwdGhD
cm9zc2luZ1NoYWRvd0JvdW5kYXJpZXMobm9kZSkpOwogfQogCitzdGF0aWMgYm9vbCBjaGVja0Zv
cm1Db250cm9sRWxlbWVudChOb2RlKiBzdGFydE5vZGUpCit7CisgICAgTm9kZSogbm9kZSA9IHN0
YXJ0Tm9kZTsKKyAgICB3aGlsZSAobm9kZSkgeworICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50
Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1l
bnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBub2RlID0gbm9kZS0+cGFy
ZW50Tm9kZSgpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIC8vIC0tLS0tLS0tCiAK
IFRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKCkKQEAgLTI2MSw2ICsyNzIsOCBAQCBUZXh0SXRl
cmF0b3I6OlRleHRJdGVyYXRvcigpCiAgICAgLCBtX2hhbmRsZWRGaXJzdExldHRlcihmYWxzZSkK
ICAgICAsIG1faWdub3Jlc1N0eWxlVmlzaWJpbGl0eShmYWxzZSkKICAgICAsIG1fZW1pdHNPYmpl
Y3RSZXBsYWNlbWVudENoYXJhY3RlcnMoZmFsc2UpCisgICAgLCBtX3N0b3BzT25Gb3JtQ29udHJv
bHMoZmFsc2UpCisgICAgLCBtX3Nob3VsZFN0b3AoZmFsc2UpCiB7CiB9CiAKQEAgLTI4Miw2ICsy
OTUsOCBAQCBUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwgVGV4dEl0
ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpCiAgICAgLCBtX2hhbmRsZWRGaXJzdExldHRlcihmYWxz
ZSkKICAgICAsIG1faWdub3Jlc1N0eWxlVmlzaWJpbGl0eShiZWhhdmlvciAmIFRleHRJdGVyYXRv
cklnbm9yZXNTdHlsZVZpc2liaWxpdHkpCiAgICAgLCBtX2VtaXRzT2JqZWN0UmVwbGFjZW1lbnRD
aGFyYWN0ZXJzKGJlaGF2aW9yICYgVGV4dEl0ZXJhdG9yRW1pdHNPYmplY3RSZXBsYWNlbWVudENo
YXJhY3RlcnMpCisgICAgLCBtX3N0b3BzT25Gb3JtQ29udHJvbHMoYmVoYXZpb3IgJiBUZXh0SXRl
cmF0b3JTdG9wc09uRm9ybUNvbnRyb2xzKQorICAgICwgbV9zaG91bGRTdG9wKGZhbHNlKQogewog
ICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwpAQCAtMzM5LDggKzM1NCwxNiBAQCBUZXh0SXRl
cmF0b3I6On5UZXh0SXRlcmF0b3IoKQogewogfQogCitib29sIFRleHRJdGVyYXRvcjo6YXRFbmQo
KSBjb25zdAoreworICAgIHJldHVybiAhbV9wb3NpdGlvbk5vZGUgfHwgbV9zaG91bGRTdG9wOwor
fQorCiB2b2lkIFRleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiB7CisgICAgaWYgKG1fc2hvdWxkU3Rv
cCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gcmVzZXQgdGhlIHJ1biBpbmZvcm1hdGlvbgog
ICAgIG1fcG9zaXRpb25Ob2RlID0gMDsKICAgICBtX3RleHRMZW5ndGggPSAwOwpAQCAtMzczLDYg
KzM5Niw5IEBAIHZvaWQgVGV4dEl0ZXJhdG9yOjphZHZhbmNlKCkKICAgICB9CiAKICAgICB3aGls
ZSAobV9ub2RlICYmIG1fbm9kZSAhPSBtX3Bhc3RFbmROb2RlKSB7CisgICAgICAgIGlmICghbV9z
aG91bGRTdG9wICYmIG1fc3RvcHNPbkZvcm1Db250cm9scyAmJiBjaGVja0Zvcm1Db250cm9sRWxl
bWVudChtX25vZGUpKQorICAgICAgICAgICAgbV9zaG91bGRTdG9wID0gdHJ1ZTsKKwogICAgICAg
ICAvLyBpZiB0aGUgcmFuZ2UgZW5kcyBhdCBvZmZzZXQgMCBvZiBhbiBlbGVtZW50LCByZXByZXNl
bnQgdGhlCiAgICAgICAgIC8vIHBvc2l0aW9uLCBidXQgbm90IHRoZSBjb250ZW50LCBvZiB0aGF0
IGVsZW1lbnQgZS5nLiBpZiB0aGUKICAgICAgICAgLy8gbm9kZSBpcyBhIGJsb2NrZmxvdyBlbGVt
ZW50LCBlbWl0IGEgbmV3bGluZSB0aGF0CkBAIC0xMDczLDYgKzEwOTksOCBAQCBTaW1wbGlmaWVk
QmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKCkK
ICAgICAsIG1fc2luZ2xlQ2hhcmFjdGVyQnVmZmVyKDApCiAgICAgLCBtX2hhdmVQYXNzZWRTdGFy
dE5vZGUoZmFsc2UpCiAgICAgLCBtX3Nob3VsZEhhbmRsZUZpcnN0TGV0dGVyKGZhbHNlKQorICAg
ICwgbV9zdG9wc09uRm9ybUNvbnRyb2xzKGZhbHNlKQorICAgICwgbV9zaG91bGRTdG9wKGZhbHNl
KQogewogfQogCkBAIC0xMDk2LDggKzExMjQsMTAgQEAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJ
dGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwK
ICAgICAsIG1fc2luZ2xlQ2hhcmFjdGVyQnVmZmVyKDApCiAgICAgLCBtX2hhdmVQYXNzZWRTdGFy
dE5vZGUoZmFsc2UpCiAgICAgLCBtX3Nob3VsZEhhbmRsZUZpcnN0TGV0dGVyKGZhbHNlKQorICAg
ICwgbV9zdG9wc09uRm9ybUNvbnRyb2xzKGJlaGF2aW9yICYgVGV4dEl0ZXJhdG9yU3RvcHNPbkZv
cm1Db250cm9scykKKyAgICAsIG1fc2hvdWxkU3RvcChmYWxzZSkKIHsKLSAgICBBU1NFUlQobV9i
ZWhhdmlvciA9PSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOworICAgIEFTU0VSVChtX2Jl
aGF2aW9yID09IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciB8fCBtX2JlaGF2aW9yID09IFRl
eHRJdGVyYXRvclN0b3BzT25Gb3JtQ29udHJvbHMpOwogCiAgICAgaWYgKCFyKQogICAgICAgICBy
ZXR1cm47CkBAIC0xMTQ2LDEwICsxMTc2LDI0IEBAIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRl
cmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2UqIHIsCiAg
ICAgYWR2YW5jZSgpOwogfQogCitib29sIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6
OmF0RW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fcG9zaXRpb25Ob2RlIHx8IG1fc2hvdWxk
U3RvcDsKK30KKwogdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNl
KCkKIHsKICAgICBBU1NFUlQobV9wb3NpdGlvbk5vZGUpOwogCisgICAgaWYgKG1fc2hvdWxkU3Rv
cCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUHJldmVudCBjaGFuZ2luZyB0aGUgaXRlcmF0
b3IgcG9zaXRpb24gaWYgYSBmb3JtIGNvbnRyb2wgZWxlbWVudCB3YXMgZm91bmQgYW5kIGFkdmFu
Y2Ugc2hvdWxkIHN0b3Agb24gaXQuCisgICAgaWYgKG1fc3RvcHNPbkZvcm1Db250cm9scyAmJiBj
aGVja0Zvcm1Db250cm9sRWxlbWVudChtX25vZGUpKSB7CisgICAgICAgIG1fc2hvdWxkU3RvcCA9
IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBtX3Bvc2l0aW9uTm9kZSA9IDA7
CiAgICAgbV90ZXh0TGVuZ3RoID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9y
LmgKaW5kZXggMDhmZjA5NWE2OTZiMzI0MjFlODk0ZTAzNDZiNWI0OGIwZmYzZTM0Yi4uM2U4NTUw
MmZhODMxM2FmMTE3MmE5ZjMzNWJiYmZiYTQ4ZjhhMzgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRJdGVyYXRvci5oCkBAIC00Myw3ICs0Myw4IEBAIGVudW0gVGV4dEl0ZXJhdG9yQmVoYXZp
b3IgewogICAgIFRleHRJdGVyYXRvckVtaXRzVGV4dHNXaXRob3V0VHJhbnNjb2RpbmcgPSAxIDw8
IDIsCiAgICAgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSA9IDEgPDwgMywKICAg
ICBUZXh0SXRlcmF0b3JFbWl0c09iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVycyA9IDEgPDwgNCwK
LSAgICBUZXh0SXRlcmF0b3JFbWl0c09yaWdpbmFsVGV4dCA9IDEgPDwgNQorICAgIFRleHRJdGVy
YXRvckVtaXRzT3JpZ2luYWxUZXh0ID0gMSA8PCA1LAorICAgIFRleHRJdGVyYXRvclN0b3BzT25G
b3JtQ29udHJvbHMgPSAxIDw8IDYKIH07CiAgICAgCiAvLyBGSVhNRTogQ2FuJ3QgcmVhbGx5IGFu
c3dlciB0aGlzIHF1ZXN0aW9uIGNvcnJlY3RseSB3aXRob3V0IGtub3dpbmcgdGhlIHdoaXRlLXNw
YWNlIG1vZGUuCkBAIC04OSw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICB+VGV4dEl0ZXJhdG9yKCk7
CiAgICAgZXhwbGljaXQgVGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiwgVGV4dEl0ZXJhdG9yQmVo
YXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwogCi0gICAgYm9vbCBhdEVuZCgp
IGNvbnN0IHsgcmV0dXJuICFtX3Bvc2l0aW9uTm9kZTsgfQorICAgIGJvb2wgYXRFbmQoKSBjb25z
dDsKICAgICB2b2lkIGFkdmFuY2UoKTsKICAgICAKICAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXh0TGVuZ3RoOyB9CkBAIC0xODUsNiArMTg2LDEwIEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2lnbm9yZXNTdHlsZVZpc2liaWxpdHk7CiAgICAgLy8gVXNlZCB3aGVuIGVtaXR0aW5n
IHRoZSBzcGVjaWFsIDB4RkZGQyBjaGFyYWN0ZXIgaXMgcmVxdWlyZWQuCiAgICAgYm9vbCBtX2Vt
aXRzT2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJzOworICAgIC8vIFVzZWQgd2hlbiB0aGUgaXRl
cmF0aW9uIHNob3VsZCBzdG9wIGlmIGZvcm0gY29udHJvbHMgYXJlIHJlYWNoZWQuCisgICAgYm9v
bCBtX3N0b3BzT25Gb3JtQ29udHJvbHM7CisgICAgLy8gVXNlZCB3aGVuIG1fc3RvcHNPbkZvcm1D
b250cm9scyBpcyBzZXQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpdGVyYXRvciBzaG91bGQga2VlcCBh
ZHZhbmNpbmcuCisgICAgYm9vbCBtX3Nob3VsZFN0b3A7CiB9OwogCiAvLyBJdGVyYXRlcyB0aHJv
dWdoIHRoZSBET00gcmFuZ2UsIHJldHVybmluZyBhbGwgdGhlIHRleHQsIGFuZCAwLWxlbmd0aCBi
b3VuZGFyaWVzCkBAIC0xOTUsNyArMjAwLDcgQEAgcHVibGljOgogICAgIFNpbXBsaWZpZWRCYWNr
d2FyZHNUZXh0SXRlcmF0b3IoKTsKICAgICBleHBsaWNpdCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4
dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0
b3JEZWZhdWx0QmVoYXZpb3IpOwogICAgIAotICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVy
biAhbV9wb3NpdGlvbk5vZGU7IH0KKyAgICBib29sIGF0RW5kKCkgY29uc3Q7CiAgICAgdm9pZCBh
ZHZhbmNlKCk7CiAgICAgCiAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dExl
bmd0aDsgfQpAQCAtMjQ3LDYgKzI1MiwxMiBAQCBwcml2YXRlOgogCiAgICAgLy8gU2hvdWxkIGhh
bmRsZSBmaXJzdC1sZXR0ZXIgcmVuZGVyZXIgaW4gdGhlIG5leHQgY2FsbCB0byBoYW5kbGVUZXh0
Tm9kZS4KICAgICBib29sIG1fc2hvdWxkSGFuZGxlRmlyc3RMZXR0ZXI7CisKKyAgICAvLyBVc2Vk
IHdoZW4gdGhlIGl0ZXJhdGlvbiBzaG91bGQgc3RvcCBpZiBmb3JtIGNvbnRyb2xzIGFyZSByZWFj
aGVkLgorICAgIGJvb2wgbV9zdG9wc09uRm9ybUNvbnRyb2xzOworCisgICAgLy8gVXNlZCB3aGVu
IG1fc3RvcHNPbkZvcm1Db250cm9scyBpcyBzZXQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpdGVyYXRv
ciBzaG91bGQga2VlcCBhZHZhbmNpbmcuCisgICAgYm9vbCBtX3Nob3VsZFN0b3A7CiB9OwogCiAv
LyBCdWlsZHMgb24gdGhlIHRleHQgaXRlcmF0b3IsIGFkZGluZyBhIGNoYXJhY3RlciBwb3NpdGlv
biBzbyB3ZSBjYW4gd2FsayBvbmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131607</attachid>
            <date>2012-03-13 07:31:44 -0700</date>
            <delta_ts>2012-03-13 08:05:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78361-20120313143142.patch</filename>
            <type>text/plain</type>
            <size>14632</size>
            <attacher name="Leandro Graciá Gil">leandrogracia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTg0NTBlNDkwZWE3YmU1
MTc1YTE0ZjE3OTY2NzNlNzdiMTYxNGU2ZS4uNjcxNDUxOWJkMmQzOTg0NjYzYzgwODg4MzUyZWRk
NThmMDRiYTliNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTAzLTEzICBMZWFu
ZHJvIEdyYWNpYSBHaWwgIDxsZWFuZHJvZ3JhY2lhQGNocm9taXVtLm9yZz4KKworICAgICAgICBT
ZWxlY3RpdmVseSByZXRyaWV2ZSB0ZXh0IGNvbnRlbnQgYXJvdW5kIGEgZ2l2ZW4gcG9zaXRpb24u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODM2MQor
CisgICAgICAgIEludHJvZHVjZSB0aGUgRE9NVGV4dENvbnRlbnRXYWxrZXIgY2xhc3MgdG8gc2Vs
ZWN0aXZlbHkgcmV0cmlldmUgY29udGVudAorICAgICAgICBhcm91bmQgYSBnaXZlbiBWaXNpYmxl
UG9zaXRpb24gaW50byBhIHN0cmluZyBpbiBzdWNoIGEgd2F5IHRoYXQgYSB0ZXh0CisgICAgICAg
IFJhbmdlIGNhbiBiZSBleHRyYWN0ZWQgbGF0ZXIgZnJvbSBhIHBhaXIgb2YgdGhlIHN0cmluZydz
IHBvc2l0aW9ucy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUZXN0czogYSBuZXcgbGF5b3V0IHRlc3Qgd2lsbCBiZSBpbnRyb2R1Y2VkIG9uY2UgdGhl
IHJlcXVpcmVkIFdlYktpdCBBUEkgY29kZSBpcyByZWFkeS4KKworICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBlZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTdXJyb3VuZGluZ1RleHQ6OlN1cnJv
dW5kaW5nVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTdXJyb3VuZGluZ1RleHQ6OmNvbnRlbnRP
ZmZzZXRzVG9SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdXJyb3VuZGluZ1RleHQ6OmNvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U3Vycm91bmRpbmdUZXh0Ojpwb3NpdGlvbk9mZnNldElu
Q29udGVudCk6CisgICAgICAgICogZWRpdGluZy9TdXJyb3VuZGluZ1RleHQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFN1cnJvdW5kaW5nVGV4dCk6CisgICAgICAgICog
ZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zZWRCeUZv
cm1Db250cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVy
YXRvcjo6YXRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjphZHZhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBs
aWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YXRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxp
ZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSk6CisgICAgICAgICogZWRpdGluZy9U
ZXh0SXRlcmF0b3IuaDoKKyAgICAgICAgKFRleHRJdGVyYXRvcik6CisgICAgICAgIChTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKToKKwogMjAxMi0wMy0xMyAgVnNldm9sb2QgVmxhc292
ICA8dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGluc3BlY3RvciBj
b21waWxhdGlvbiBtb2R1bGUgbmFtZSBmaXggYWZ0ZXIgcjExMDU1MC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpp
bmRleCA4NzhjNDY1ZWJmZGQyOWNkY2FmZTk2NjgxMGFmYWI2ZWZhZGNkMjFhLi44ZDY1NjFhNTIz
NzVlZWQ3YzVmMjFjNDgxNzliY2M5ZWQxMWU3NWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xMTIs
NiArMTEyLDggQEAKICAgICAgICAgICAgICdlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU21hcnRSZXBsYWNlLmgnLAogICAgICAgICAgICAg
J2VkaXRpbmcvU3BlbGxDaGVja2VyLmgnLAorICAgICAgICAgICAgJ2VkaXRpbmcvU3Vycm91bmRp
bmdUZXh0LmNwcCcsCisgICAgICAgICAgICAnZWRpdGluZy9TdXJyb3VuZGluZ1RleHQuaCcsCiAg
ICAgICAgICAgICAnZWRpdGluZy9UZXh0QWZmaW5pdHkuaCcsCiAgICAgICAgICAgICAnZWRpdGlu
Zy9UZXh0R3JhbnVsYXJpdHkuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9UZXh0SXRlcmF0b3Iu
aCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDAzMmVjMTZjY2Y5Y2M1MjhhZjc2N2Y3ZjM1YTU1MDc3ZWMwN2YwYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Vycm91bmRpbmdUZXh0LmNwcApAQCAtMCww
ICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U3Vycm91bmRpbmdUZXh0LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlJh
bmdlLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0
aW9uLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgInZpc2libGVf
dW5pdHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdXJyb3VuZGluZ1RleHQ6OlN1cnJv
dW5kaW5nVGV4dChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCB1bnNpZ25lZCBtYXhM
ZW5ndGgpCisgICAgOiBtX3Bvc2l0aW9uT2Zmc2V0SW5Db250ZW50KDApCit7CisgICAgY29uc3Qg
dW5zaWduZWQgaGFsZk1heExlbmd0aCA9IG1heExlbmd0aCAvIDI7CisgICAgQ2hhcmFjdGVySXRl
cmF0b3IgZm9yd2FyZEl0ZXJhdG9yKG1ha2VSYW5nZShwb3NpdGlvbiwgZW5kT2ZEb2N1bWVudChw
b3NpdGlvbikpLmdldCgpLCBUZXh0SXRlcmF0b3JTdG9wc09uRm9ybUNvbnRyb2xzKTsKKyAgICBm
b3J3YXJkSXRlcmF0b3IuYWR2YW5jZShtYXhMZW5ndGggLSBoYWxmTWF4TGVuZ3RoKTsKKworICAg
IC8vIE5vIGZvcndhcmQgY29udGVudHMsIHN0YXJ0ZWQgaW5zaWRlIGZvcm0gY29udHJvbC4KKyAg
ICBQb3NpdGlvbiBkZWVwUG9zaXRpb24gPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOworICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IGRlZXBQb3NpdGlvbi5kb2N1bWVudCgpOworICAgIGlmICgh
UmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgZGVlcFBvc2l0aW9uLCBmb3J3YXJkSXRlcmF0b3IucmFu
Z2UoKS0+c3RhcnRQb3NpdGlvbigpKS0+dGV4dCgpLmxlbmd0aCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBiYWNrd2FyZHNJdGVyYXRvcihtYWtl
UmFuZ2Uoc3RhcnRPZkRvY3VtZW50KHBvc2l0aW9uKSwgcG9zaXRpb24pLmdldCgpLCBUZXh0SXRl
cmF0b3JTdG9wc09uRm9ybUNvbnRyb2xzKTsKKyAgICBiYWNrd2FyZHNJdGVyYXRvci5hZHZhbmNl
KGhhbGZNYXhMZW5ndGgpOworCisgICAgbV9wb3NpdGlvbk9mZnNldEluQ29udGVudCA9IFJhbmdl
OjpjcmVhdGUoZG9jdW1lbnQsIGJhY2t3YXJkc0l0ZXJhdG9yLnJhbmdlKCktPmVuZFBvc2l0aW9u
KCksIGRlZXBQb3NpdGlvbiktPnRleHQoKS5sZW5ndGgoKTsKKyAgICBtX2NvbnRlbnRSYW5nZSA9
IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIGJhY2t3YXJkc0l0ZXJhdG9yLnJhbmdlKCktPmVuZFBv
c2l0aW9uKCksIGZvcndhcmRJdGVyYXRvci5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCkpOworfQor
CitQYXNzUmVmUHRyPFJhbmdlPiBTdXJyb3VuZGluZ1RleHQ6OmNvbnRlbnRPZmZzZXRzVG9SYW5n
ZSh1bnNpZ25lZCBzdGFydE9mZnNldEluQ29udGVudCwgdW5zaWduZWQgZW5kT2Zmc2V0SW5Db250
ZW50KQoreworICAgIGlmIChzdGFydE9mZnNldEluQ29udGVudCA+PSBlbmRPZmZzZXRJbkNvbnRl
bnQgfHwgZW5kT2Zmc2V0SW5Db250ZW50ID4gY29udGVudCgpLmxlbmd0aCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIENoYXJhY3Rlckl0ZXJhdG9yIGl0ZXJhdG9yKG1fY29udGVudFJhbmdl
LmdldCgpKTsKKyAgICBpdGVyYXRvci5hZHZhbmNlKHN0YXJ0T2Zmc2V0SW5Db250ZW50KTsKKwor
ICAgIFBvc2l0aW9uIHN0YXJ0ID0gaXRlcmF0b3IucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpOwor
ICAgIGl0ZXJhdG9yLmFkdmFuY2UoZW5kT2Zmc2V0SW5Db250ZW50IC0gc3RhcnRPZmZzZXRJbkNv
bnRlbnQpOworICAgIFBvc2l0aW9uIGVuZCA9IGl0ZXJhdG9yLnJhbmdlKCktPnN0YXJ0UG9zaXRp
b24oKTsKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzdGFydC5kb2N1bWVudCgpLCBzdGFydCwg
ZW5kKTsKK30KKworU3RyaW5nIFN1cnJvdW5kaW5nVGV4dDo6Y29udGVudCgpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fY29udGVudFJhbmdlKQorICAgICAgICByZXR1cm4gbV9jb250ZW50UmFuZ2UtPnRl
eHQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3Vuc2lnbmVkIFN1cnJvdW5kaW5nVGV4
dDo6cG9zaXRpb25PZmZzZXRJbkNvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3Bvc2l0
aW9uT2Zmc2V0SW5Db250ZW50OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TdXJyb3VuZGluZ1RleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ODZmYzlmMDI3YjI4
MDM2OGI4OTYxMGIzOTdkZGNhZGJiYjJhMzU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TdXJyb3VuZGluZ1RleHQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFN1cnJvdW5kaW5nVGV4dF9oCisjZGVmaW5lIFN1cnJvdW5kaW5nVGV4
dF9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFJhbmdlOworY2xhc3MgVmlzaWJsZVBvc2l0aW9uOworCitjbGFzcyBTdXJyb3Vu
ZGluZ1RleHQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN1cnJvdW5kaW5nVGV4dCk7Citw
dWJsaWM6CisgICAgU3Vycm91bmRpbmdUZXh0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIHVuc2ln
bmVkIG1heExlbmd0aCk7CisKKyAgICBTdHJpbmcgY29udGVudCgpIGNvbnN0OworICAgIHVuc2ln
bmVkIHBvc2l0aW9uT2Zmc2V0SW5Db250ZW50KCkgY29uc3Q7CisKKyAgICBQYXNzUmVmUHRyPFJh
bmdlPiBjb250ZW50T2Zmc2V0c1RvUmFuZ2UodW5zaWduZWQgc3RhcnRPZmZzZXRJbkNvbnRlbnQs
IHVuc2lnbmVkIGVuZE9mZnNldEluQ29udGVudCk7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFJh
bmdlPiBtX2NvbnRlbnRSYW5nZTsKKyAgICBzaXplX3QgbV9wb3NpdGlvbk9mZnNldEluQ29udGVu
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFN1cnJvdW5kaW5n
VGV4dF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCBlMGJm
OGMzYTBmZTZlOGE2ODMzMTNmMTc4OGM4NGFiNWZiMDRkNDM1Li5kYTg3YWZiNzdiZGExMGFlNjY0
ZWVhMDkxYTljNDgwZGIzZDVhNGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0
b3IuY3BwCkBAIC0yNDAsNiArMjQwLDE3IEBAIHN0YXRpYyB2b2lkIHNldFVwRnVsbHlDbGlwcGVk
U3RhY2soQml0U3RhY2smIHN0YWNrLCBOb2RlKiBub2RlKQogICAgIEFTU0VSVChzdGFjay5zaXpl
KCkgPT0gMSArIGRlcHRoQ3Jvc3NpbmdTaGFkb3dCb3VuZGFyaWVzKG5vZGUpKTsKIH0KIAorc3Rh
dGljIGJvb2wgZW5jbG9zZWRCeUZvcm1Db250cm9sRWxlbWVudChOb2RlKiBzdGFydE5vZGUpCit7
CisgICAgTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsKKyAgICB3aGlsZSAobm9kZSkgeworICAgICAg
ICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBub2RlID0g
bm9kZS0+cGFyZW50Tm9kZSgpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIC8vIC0t
LS0tLS0tCiAKIFRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKCkKQEAgLTI2MSw2ICsyNzIsOCBA
QCBUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcigpCiAgICAgLCBtX2hhbmRsZWRGaXJzdExldHRl
cihmYWxzZSkKICAgICAsIG1faWdub3Jlc1N0eWxlVmlzaWJpbGl0eShmYWxzZSkKICAgICAsIG1f
ZW1pdHNPYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcnMoZmFsc2UpCisgICAgLCBtX3N0b3BzT25G
b3JtQ29udHJvbHMoZmFsc2UpCisgICAgLCBtX3Nob3VsZFN0b3AoZmFsc2UpCiB7CiB9CiAKQEAg
LTI4Miw2ICsyOTUsOCBAQCBUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcihjb25zdCBSYW5nZSog
ciwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpCiAgICAgLCBtX2hhbmRsZWRGaXJzdExl
dHRlcihmYWxzZSkKICAgICAsIG1faWdub3Jlc1N0eWxlVmlzaWJpbGl0eShiZWhhdmlvciAmIFRl
eHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHkpCiAgICAgLCBtX2VtaXRzT2JqZWN0UmVw
bGFjZW1lbnRDaGFyYWN0ZXJzKGJlaGF2aW9yICYgVGV4dEl0ZXJhdG9yRW1pdHNPYmplY3RSZXBs
YWNlbWVudENoYXJhY3RlcnMpCisgICAgLCBtX3N0b3BzT25Gb3JtQ29udHJvbHMoYmVoYXZpb3Ig
JiBUZXh0SXRlcmF0b3JTdG9wc09uRm9ybUNvbnRyb2xzKQorICAgICwgbV9zaG91bGRTdG9wKGZh
bHNlKQogewogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwpAQCAtMzM5LDggKzM1NCwxNiBA
QCBUZXh0SXRlcmF0b3I6On5UZXh0SXRlcmF0b3IoKQogewogfQogCitib29sIFRleHRJdGVyYXRv
cjo6YXRFbmQoKSBjb25zdAoreworICAgIHJldHVybiAhbV9wb3NpdGlvbk5vZGUgfHwgbV9zaG91
bGRTdG9wOworfQorCiB2b2lkIFRleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiB7CisgICAgaWYgKG1f
c2hvdWxkU3RvcCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gcmVzZXQgdGhlIHJ1biBpbmZv
cm1hdGlvbgogICAgIG1fcG9zaXRpb25Ob2RlID0gMDsKICAgICBtX3RleHRMZW5ndGggPSAwOwpA
QCAtMzczLDYgKzM5Niw5IEBAIHZvaWQgVGV4dEl0ZXJhdG9yOjphZHZhbmNlKCkKICAgICB9CiAK
ICAgICB3aGlsZSAobV9ub2RlICYmIG1fbm9kZSAhPSBtX3Bhc3RFbmROb2RlKSB7CisgICAgICAg
IGlmICghbV9zaG91bGRTdG9wICYmIG1fc3RvcHNPbkZvcm1Db250cm9scyAmJiBlbmNsb3NlZEJ5
Rm9ybUNvbnRyb2xFbGVtZW50KG1fbm9kZSkpCisgICAgICAgICAgICBtX3Nob3VsZFN0b3AgPSB0
cnVlOworCiAgICAgICAgIC8vIGlmIHRoZSByYW5nZSBlbmRzIGF0IG9mZnNldCAwIG9mIGFuIGVs
ZW1lbnQsIHJlcHJlc2VudCB0aGUKICAgICAgICAgLy8gcG9zaXRpb24sIGJ1dCBub3QgdGhlIGNv
bnRlbnQsIG9mIHRoYXQgZWxlbWVudCBlLmcuIGlmIHRoZQogICAgICAgICAvLyBub2RlIGlzIGEg
YmxvY2tmbG93IGVsZW1lbnQsIGVtaXQgYSBuZXdsaW5lIHRoYXQKQEAgLTEwNzEsNiArMTA5Nyw4
IEBAIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3IoKQogICAgICwgbV9zaW5nbGVDaGFyYWN0ZXJCdWZmZXIoMCkKICAgICAsIG1f
aGF2ZVBhc3NlZFN0YXJ0Tm9kZShmYWxzZSkKICAgICAsIG1fc2hvdWxkSGFuZGxlRmlyc3RMZXR0
ZXIoZmFsc2UpCisgICAgLCBtX3N0b3BzT25Gb3JtQ29udHJvbHMoZmFsc2UpCisgICAgLCBtX3No
b3VsZFN0b3AoZmFsc2UpCiB7CiB9CiAKQEAgLTEwOTQsOCArMTEyMiwxMCBAQCBTaW1wbGlmaWVk
QmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNv
bnN0IFJhbmdlKiByLAogICAgICwgbV9zaW5nbGVDaGFyYWN0ZXJCdWZmZXIoMCkKICAgICAsIG1f
aGF2ZVBhc3NlZFN0YXJ0Tm9kZShmYWxzZSkKICAgICAsIG1fc2hvdWxkSGFuZGxlRmlyc3RMZXR0
ZXIoZmFsc2UpCisgICAgLCBtX3N0b3BzT25Gb3JtQ29udHJvbHMoYmVoYXZpb3IgJiBUZXh0SXRl
cmF0b3JTdG9wc09uRm9ybUNvbnRyb2xzKQorICAgICwgbV9zaG91bGRTdG9wKGZhbHNlKQogewot
ICAgIEFTU0VSVChtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7Cisg
ICAgQVNTRVJUKG1fYmVoYXZpb3IgPT0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yIHx8IG1f
YmVoYXZpb3IgPT0gVGV4dEl0ZXJhdG9yU3RvcHNPbkZvcm1Db250cm9scyk7CiAKICAgICBpZiAo
IXIpCiAgICAgICAgIHJldHVybjsKQEAgLTExNDQsMTAgKzExNzQsMjQgQEAgU2ltcGxpZmllZEJh
Y2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcihjb25z
dCBSYW5nZSogciwKICAgICBhZHZhbmNlKCk7CiB9CiAKK2Jvb2wgU2ltcGxpZmllZEJhY2t3YXJk
c1RleHRJdGVyYXRvcjo6YXRFbmQoKSBjb25zdAoreworICAgIHJldHVybiAhbV9wb3NpdGlvbk5v
ZGUgfHwgbV9zaG91bGRTdG9wOworfQorCiB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRl
cmF0b3I6OmFkdmFuY2UoKQogewogICAgIEFTU0VSVChtX3Bvc2l0aW9uTm9kZSk7CiAKKyAgICBp
ZiAobV9zaG91bGRTdG9wKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQcmV2ZW50IGNoYW5n
aW5nIHRoZSBpdGVyYXRvciBwb3NpdGlvbiBpZiBhIGZvcm0gY29udHJvbCBlbGVtZW50IHdhcyBm
b3VuZCBhbmQgYWR2YW5jZSBzaG91bGQgc3RvcCBvbiBpdC4KKyAgICBpZiAobV9zdG9wc09uRm9y
bUNvbnRyb2xzICYmIGVuY2xvc2VkQnlGb3JtQ29udHJvbEVsZW1lbnQobV9ub2RlKSkgeworICAg
ICAgICBtX3Nob3VsZFN0b3AgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
bV9wb3NpdGlvbk5vZGUgPSAwOwogICAgIG1fdGV4dExlbmd0aCA9IDA7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRJdGVyYXRvci5oCmluZGV4IDA4ZmYwOTVhNjk2YjMyNDIxZTg5NGUwMzQ2YjVi
NDhiMGZmM2UzNGIuLjNlODU1MDJmYTgzMTNhZjExNzJhOWYzMzViYmJmYmE0OGY4YTM4MDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaApAQCAtNDMsNyArNDMsOCBAQCBlbnVt
IFRleHRJdGVyYXRvckJlaGF2aW9yIHsKICAgICBUZXh0SXRlcmF0b3JFbWl0c1RleHRzV2l0aG91
dFRyYW5zY29kaW5nID0gMSA8PCAyLAogICAgIFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2li
aWxpdHkgPSAxIDw8IDMsCiAgICAgVGV4dEl0ZXJhdG9yRW1pdHNPYmplY3RSZXBsYWNlbWVudENo
YXJhY3RlcnMgPSAxIDw8IDQsCi0gICAgVGV4dEl0ZXJhdG9yRW1pdHNPcmlnaW5hbFRleHQgPSAx
IDw8IDUKKyAgICBUZXh0SXRlcmF0b3JFbWl0c09yaWdpbmFsVGV4dCA9IDEgPDwgNSwKKyAgICBU
ZXh0SXRlcmF0b3JTdG9wc09uRm9ybUNvbnRyb2xzID0gMSA8PCA2CiB9OwogICAgIAogLy8gRklY
TUU6IENhbid0IHJlYWxseSBhbnN3ZXIgdGhpcyBxdWVzdGlvbiBjb3JyZWN0bHkgd2l0aG91dCBr
bm93aW5nIHRoZSB3aGl0ZS1zcGFjZSBtb2RlLgpAQCAtODksNyArOTAsNyBAQCBwdWJsaWM6CiAg
ICAgflRleHRJdGVyYXRvcigpOwogICAgIGV4cGxpY2l0IFRleHRJdGVyYXRvcihjb25zdCBSYW5n
ZSosIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsK
IAotICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV9wb3NpdGlvbk5vZGU7IH0KKyAg
ICBib29sIGF0RW5kKCkgY29uc3Q7CiAgICAgdm9pZCBhZHZhbmNlKCk7CiAgICAgCiAgICAgaW50
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dExlbmd0aDsgfQpAQCAtMTg1LDYgKzE4Niwx
MCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pZ25vcmVzU3R5bGVWaXNpYmlsaXR5OwogICAgIC8v
IFVzZWQgd2hlbiBlbWl0dGluZyB0aGUgc3BlY2lhbCAweEZGRkMgY2hhcmFjdGVyIGlzIHJlcXVp
cmVkLgogICAgIGJvb2wgbV9lbWl0c09iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyczsKKyAgICAv
LyBVc2VkIHdoZW4gdGhlIGl0ZXJhdGlvbiBzaG91bGQgc3RvcCBpZiBmb3JtIGNvbnRyb2xzIGFy
ZSByZWFjaGVkLgorICAgIGJvb2wgbV9zdG9wc09uRm9ybUNvbnRyb2xzOworICAgIC8vIFVzZWQg
d2hlbiBtX3N0b3BzT25Gb3JtQ29udHJvbHMgaXMgc2V0IHRvIGRldGVybWluZSBpZiB0aGUgaXRl
cmF0b3Igc2hvdWxkIGtlZXAgYWR2YW5jaW5nLgorICAgIGJvb2wgbV9zaG91bGRTdG9wOwogfTsK
IAogLy8gSXRlcmF0ZXMgdGhyb3VnaCB0aGUgRE9NIHJhbmdlLCByZXR1cm5pbmcgYWxsIHRoZSB0
ZXh0LCBhbmQgMC1sZW5ndGggYm91bmRhcmllcwpAQCAtMTk1LDcgKzIwMCw3IEBAIHB1YmxpYzoK
ICAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKCk7CiAgICAgZXhwbGljaXQgU2lt
cGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSosIFRleHRJdGVyYXRvckJl
aGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKICAgICAKLSAgICBib29sIGF0
RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fcG9zaXRpb25Ob2RlOyB9CisgICAgYm9vbCBhdEVuZCgp
IGNvbnN0OwogICAgIHZvaWQgYWR2YW5jZSgpOwogICAgIAogICAgIGludCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX3RleHRMZW5ndGg7IH0KQEAgLTI0Nyw2ICsyNTIsMTIgQEAgcHJpdmF0ZToK
IAogICAgIC8vIFNob3VsZCBoYW5kbGUgZmlyc3QtbGV0dGVyIHJlbmRlcmVyIGluIHRoZSBuZXh0
IGNhbGwgdG8gaGFuZGxlVGV4dE5vZGUuCiAgICAgYm9vbCBtX3Nob3VsZEhhbmRsZUZpcnN0TGV0
dGVyOworCisgICAgLy8gVXNlZCB3aGVuIHRoZSBpdGVyYXRpb24gc2hvdWxkIHN0b3AgaWYgZm9y
bSBjb250cm9scyBhcmUgcmVhY2hlZC4KKyAgICBib29sIG1fc3RvcHNPbkZvcm1Db250cm9sczsK
KworICAgIC8vIFVzZWQgd2hlbiBtX3N0b3BzT25Gb3JtQ29udHJvbHMgaXMgc2V0IHRvIGRldGVy
bWluZSBpZiB0aGUgaXRlcmF0b3Igc2hvdWxkIGtlZXAgYWR2YW5jaW5nLgorICAgIGJvb2wgbV9z
aG91bGRTdG9wOwogfTsKIAogLy8gQnVpbGRzIG9uIHRoZSB0ZXh0IGl0ZXJhdG9yLCBhZGRpbmcg
YSBjaGFyYWN0ZXIgcG9zaXRpb24gc28gd2UgY2FuIHdhbGsgb25lCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131616</attachid>
            <date>2012-03-13 08:05:56 -0700</date>
            <delta_ts>2012-03-23 12:39:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78361-20120313150553.patch</filename>
            <type>text/plain</type>
            <size>14407</size>
            <attacher name="Leandro Graciá Gil">leandrogracia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTA1ZTgxZDc3N2FkNTE2
YjQzN2RmZjAxMmQ1NzkxZGMyZmVlOTk3ZC4uZDlhZDA2MGIxM2ZlY2E1OTM5NDMyOTgwZTVjYTJi
NzI0MjI2N2ZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTAzLTEzICBMZWFu
ZHJvIEdyYWNpYSBHaWwgIDxsZWFuZHJvZ3JhY2lhQGNocm9taXVtLm9yZz4KKworICAgICAgICBT
ZWxlY3RpdmVseSByZXRyaWV2ZSB0ZXh0IGNvbnRlbnQgYXJvdW5kIGEgZ2l2ZW4gcG9zaXRpb24u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODM2MQor
CisgICAgICAgIEludHJvZHVjZSB0aGUgRE9NVGV4dENvbnRlbnRXYWxrZXIgY2xhc3MgdG8gc2Vs
ZWN0aXZlbHkgcmV0cmlldmUgY29udGVudAorICAgICAgICBhcm91bmQgYSBnaXZlbiBWaXNpYmxl
UG9zaXRpb24gaW50byBhIHN0cmluZyBpbiBzdWNoIGEgd2F5IHRoYXQgYSB0ZXh0CisgICAgICAg
IFJhbmdlIGNhbiBiZSBleHRyYWN0ZWQgbGF0ZXIgZnJvbSBhIHBhaXIgb2YgdGhlIHN0cmluZydz
IHBvc2l0aW9ucy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUZXN0czogYSBuZXcgbGF5b3V0IHRlc3Qgd2lsbCBiZSBpbnRyb2R1Y2VkIG9uY2UgdGhl
IHJlcXVpcmVkIFdlYktpdCBBUEkgY29kZSBpcyByZWFkeS4KKworICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBlZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTdXJyb3VuZGluZ1RleHQ6OlN1cnJv
dW5kaW5nVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTdXJyb3VuZGluZ1RleHQ6OmNvbnRlbnRP
ZmZzZXRzVG9SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdXJyb3VuZGluZ1RleHQ6OmNvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U3Vycm91bmRpbmdUZXh0Ojpwb3NpdGlvbk9mZnNldElu
Q29udGVudCk6CisgICAgICAgICogZWRpdGluZy9TdXJyb3VuZGluZ1RleHQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFN1cnJvdW5kaW5nVGV4dCk6CisgICAgICAgICog
ZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zZWRCeUZv
cm1Db250cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVy
YXRvcjo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4
dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2UpOgorICAgICAg
ICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0
b3I6OmF0RW5kKToKKyAgICAgICAgKFRleHRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphdEVuZCk6CisgICAgICAgIChTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKToKKwogMjAxMi0wMy0xMyAgR2F2aW4gUGV0ZXJzICA8
Z2F2aW5wQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggYW4gZW51bWVyYXRpb24gbmFtZSBp
biBSZWFzb25zRnJhbWVDYW5ub3RCZUluUGFnZUNhY2hlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDg3
OGM0NjVlYmZkZDI5Y2RjYWZlOTY2ODEwYWZhYjZlZmFkY2QyMWEuLjhkNjU2MWE1MjM3NWVlZDdj
NWYyMWM0ODE3OWJjYzllZDExZTc1YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTExMiw2ICsxMTIs
OCBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCcsCiAg
ICAgICAgICAgICAnZWRpdGluZy9TbWFydFJlcGxhY2UuaCcsCiAgICAgICAgICAgICAnZWRpdGlu
Zy9TcGVsbENoZWNrZXIuaCcsCisgICAgICAgICAgICAnZWRpdGluZy9TdXJyb3VuZGluZ1RleHQu
Y3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5oJywKICAgICAgICAg
ICAgICdlZGl0aW5nL1RleHRBZmZpbml0eS5oJywKICAgICAgICAgICAgICdlZGl0aW5nL1RleHRH
cmFudWxhcml0eS5oJywKICAgICAgICAgICAgICdlZGl0aW5nL1RleHRJdGVyYXRvci5oJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Vycm91bmRpbmdUZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Vycm91bmRpbmdUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDMy
ZWMxNmNjZjljYzUyOGFmNzY3ZjdmMzVhNTUwNzdlYzA3ZjBjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TdXJyb3VuZGluZ1RleHQuY3BwCkBAIC0wLDAgKzEsODMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdXJyb3Vu
ZGluZ1RleHQuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIK
KyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIK
KyNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAidmlzaWJsZV91bml0cy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N1cnJvdW5kaW5nVGV4dDo6U3Vycm91bmRpbmdU
ZXh0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIHVuc2lnbmVkIG1heExlbmd0aCkK
KyAgICA6IG1fcG9zaXRpb25PZmZzZXRJbkNvbnRlbnQoMCkKK3sKKyAgICBjb25zdCB1bnNpZ25l
ZCBoYWxmTWF4TGVuZ3RoID0gbWF4TGVuZ3RoIC8gMjsKKyAgICBDaGFyYWN0ZXJJdGVyYXRvciBm
b3J3YXJkSXRlcmF0b3IobWFrZVJhbmdlKHBvc2l0aW9uLCBlbmRPZkRvY3VtZW50KHBvc2l0aW9u
KSkuZ2V0KCksIFRleHRJdGVyYXRvclN0b3BzT25Gb3JtQ29udHJvbHMpOworICAgIGZvcndhcmRJ
dGVyYXRvci5hZHZhbmNlKG1heExlbmd0aCAtIGhhbGZNYXhMZW5ndGgpOworCisgICAgLy8gTm8g
Zm9yd2FyZCBjb250ZW50cywgc3RhcnRlZCBpbnNpZGUgZm9ybSBjb250cm9sLgorICAgIFBvc2l0
aW9uIGRlZXBQb3NpdGlvbiA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CisgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gZGVlcFBvc2l0aW9uLmRvY3VtZW50KCk7CisgICAgaWYgKCFSYW5nZTo6
Y3JlYXRlKGRvY3VtZW50LCBkZWVwUG9zaXRpb24sIGZvcndhcmRJdGVyYXRvci5yYW5nZSgpLT5z
dGFydFBvc2l0aW9uKCkpLT50ZXh0KCkubGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKG1ha2VSYW5nZShz
dGFydE9mRG9jdW1lbnQocG9zaXRpb24pLCBwb3NpdGlvbikuZ2V0KCksIFRleHRJdGVyYXRvclN0
b3BzT25Gb3JtQ29udHJvbHMpOworICAgIGJhY2t3YXJkc0l0ZXJhdG9yLmFkdmFuY2UoaGFsZk1h
eExlbmd0aCk7CisKKyAgICBtX3Bvc2l0aW9uT2Zmc2V0SW5Db250ZW50ID0gUmFuZ2U6OmNyZWF0
ZShkb2N1bWVudCwgYmFja3dhcmRzSXRlcmF0b3IucmFuZ2UoKS0+ZW5kUG9zaXRpb24oKSwgZGVl
cFBvc2l0aW9uKS0+dGV4dCgpLmxlbmd0aCgpOworICAgIG1fY29udGVudFJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShkb2N1bWVudCwgYmFja3dhcmRzSXRlcmF0b3IucmFuZ2UoKS0+ZW5kUG9zaXRpb24o
KSwgZm9yd2FyZEl0ZXJhdG9yLnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKSk7Cit9CisKK1Bhc3NS
ZWZQdHI8UmFuZ2U+IFN1cnJvdW5kaW5nVGV4dDo6Y29udGVudE9mZnNldHNUb1JhbmdlKHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0SW5Db250ZW50LCB1bnNpZ25lZCBlbmRPZmZzZXRJbkNvbnRlbnQpCit7
CisgICAgaWYgKHN0YXJ0T2Zmc2V0SW5Db250ZW50ID49IGVuZE9mZnNldEluQ29udGVudCB8fCBl
bmRPZmZzZXRJbkNvbnRlbnQgPiBjb250ZW50KCkubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgQ2hhcmFjdGVySXRlcmF0b3IgaXRlcmF0b3IobV9jb250ZW50UmFuZ2UuZ2V0KCkp
OworICAgIGl0ZXJhdG9yLmFkdmFuY2Uoc3RhcnRPZmZzZXRJbkNvbnRlbnQpOworCisgICAgUG9z
aXRpb24gc3RhcnQgPSBpdGVyYXRvci5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCk7CisgICAgaXRl
cmF0b3IuYWR2YW5jZShlbmRPZmZzZXRJbkNvbnRlbnQgLSBzdGFydE9mZnNldEluQ29udGVudCk7
CisgICAgUG9zaXRpb24gZW5kID0gaXRlcmF0b3IucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpOwor
ICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHN0YXJ0LmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOwor
fQorCitTdHJpbmcgU3Vycm91bmRpbmdUZXh0Ojpjb250ZW50KCkgY29uc3QKK3sKKyAgICBpZiAo
bV9jb250ZW50UmFuZ2UpCisgICAgICAgIHJldHVybiBtX2NvbnRlbnRSYW5nZS0+dGV4dCgpOwor
ICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordW5zaWduZWQgU3Vycm91bmRpbmdUZXh0Ojpwb3Np
dGlvbk9mZnNldEluQ29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcG9zaXRpb25PZmZz
ZXRJbkNvbnRlbnQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Vycm91bmRpbmdUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4NmZjOWYwMjdiMjgwMzY4Yjg5
NjEwYjM5N2RkY2FkYmJiMmEzNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgU3Vycm91bmRpbmdUZXh0X2gKKyNkZWZpbmUgU3Vycm91bmRpbmdUZXh0X2gKKwor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgUmFuZ2U7CitjbGFzcyBWaXNpYmxlUG9zaXRpb247CisKK2NsYXNzIFN1cnJvdW5kaW5nVGV4
dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3Vycm91bmRpbmdUZXh0KTsKK3B1YmxpYzoK
KyAgICBTdXJyb3VuZGluZ1RleHQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgdW5zaWduZWQgbWF4
TGVuZ3RoKTsKKworICAgIFN0cmluZyBjb250ZW50KCkgY29uc3Q7CisgICAgdW5zaWduZWQgcG9z
aXRpb25PZmZzZXRJbkNvbnRlbnQoKSBjb25zdDsKKworICAgIFBhc3NSZWZQdHI8UmFuZ2U+IGNv
bnRlbnRPZmZzZXRzVG9SYW5nZSh1bnNpZ25lZCBzdGFydE9mZnNldEluQ29udGVudCwgdW5zaWdu
ZWQgZW5kT2Zmc2V0SW5Db250ZW50KTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8UmFuZ2U+IG1f
Y29udGVudFJhbmdlOworICAgIHNpemVfdCBtX3Bvc2l0aW9uT2Zmc2V0SW5Db250ZW50OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3Vycm91bmRpbmdUZXh0X2gK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IGUwYmY4YzNhMGZl
NmU4YTY4MzMxM2YxNzg4Yzg0YWI1ZmIwNGQ0MzUuLjA4M2QwNzFmMzBhMGRhZDc5N2M5NzM5NDhm
MmNhMDM4ZDAzMzBmMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAK
QEAgLTI0MCw2ICsyNDAsMTcgQEAgc3RhdGljIHZvaWQgc2V0VXBGdWxseUNsaXBwZWRTdGFjayhC
aXRTdGFjayYgc3RhY2ssIE5vZGUqIG5vZGUpCiAgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA9PSAx
ICsgZGVwdGhDcm9zc2luZ1NoYWRvd0JvdW5kYXJpZXMobm9kZSkpOwogfQogCitzdGF0aWMgYm9v
bCBlbmNsb3NlZEJ5Rm9ybUNvbnRyb2xFbGVtZW50KE5vZGUqIHN0YXJ0Tm9kZSkKK3sKKyAgICBO
b2RlKiBub2RlID0gc3RhcnROb2RlOworICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgIGlmIChu
b2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5vZGUpLT5pc0Zvcm1Db250cm9sRWxl
bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIG5vZGUgPSBub2RlLT5w
YXJlbnROb2RlKCk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogLy8gLS0tLS0tLS0K
IAogVGV4dEl0ZXJhdG9yOjpUZXh0SXRlcmF0b3IoKQpAQCAtMjYxLDYgKzI3Miw4IEBAIFRleHRJ
dGVyYXRvcjo6VGV4dEl0ZXJhdG9yKCkKICAgICAsIG1faGFuZGxlZEZpcnN0TGV0dGVyKGZhbHNl
KQogICAgICwgbV9pZ25vcmVzU3R5bGVWaXNpYmlsaXR5KGZhbHNlKQogICAgICwgbV9lbWl0c09i
amVjdFJlcGxhY2VtZW50Q2hhcmFjdGVycyhmYWxzZSkKKyAgICAsIG1fc3RvcHNPbkZvcm1Db250
cm9scyhmYWxzZSkKKyAgICAsIG1fc2hvdWxkU3RvcChmYWxzZSkKIHsKIH0KIApAQCAtMjgyLDYg
KzI5NSw4IEBAIFRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLCBUZXh0
SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKICAgICAsIG1faGFuZGxlZEZpcnN0TGV0dGVyKGZh
bHNlKQogICAgICwgbV9pZ25vcmVzU3R5bGVWaXNpYmlsaXR5KGJlaGF2aW9yICYgVGV4dEl0ZXJh
dG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSkKICAgICAsIG1fZW1pdHNPYmplY3RSZXBsYWNlbWVu
dENoYXJhY3RlcnMoYmVoYXZpb3IgJiBUZXh0SXRlcmF0b3JFbWl0c09iamVjdFJlcGxhY2VtZW50
Q2hhcmFjdGVycykKKyAgICAsIG1fc3RvcHNPbkZvcm1Db250cm9scyhiZWhhdmlvciAmIFRleHRJ
dGVyYXRvclN0b3BzT25Gb3JtQ29udHJvbHMpCisgICAgLCBtX3Nob3VsZFN0b3AoZmFsc2UpCiB7
CiAgICAgaWYgKCFyKQogICAgICAgICByZXR1cm47CkBAIC0zNDEsNiArMzU2LDkgQEAgVGV4dEl0
ZXJhdG9yOjp+VGV4dEl0ZXJhdG9yKCkKIAogdm9pZCBUZXh0SXRlcmF0b3I6OmFkdmFuY2UoKQog
eworICAgIGlmIChtX3Nob3VsZFN0b3ApCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIHJlc2V0
IHRoZSBydW4gaW5mb3JtYXRpb24KICAgICBtX3Bvc2l0aW9uTm9kZSA9IDA7CiAgICAgbV90ZXh0
TGVuZ3RoID0gMDsKQEAgLTM3Myw2ICszOTEsOSBAQCB2b2lkIFRleHRJdGVyYXRvcjo6YWR2YW5j
ZSgpCiAgICAgfQogCiAgICAgd2hpbGUgKG1fbm9kZSAmJiBtX25vZGUgIT0gbV9wYXN0RW5kTm9k
ZSkgeworICAgICAgICBpZiAoIW1fc2hvdWxkU3RvcCAmJiBtX3N0b3BzT25Gb3JtQ29udHJvbHMg
JiYgZW5jbG9zZWRCeUZvcm1Db250cm9sRWxlbWVudChtX25vZGUpKQorICAgICAgICAgICAgbV9z
aG91bGRTdG9wID0gdHJ1ZTsKKwogICAgICAgICAvLyBpZiB0aGUgcmFuZ2UgZW5kcyBhdCBvZmZz
ZXQgMCBvZiBhbiBlbGVtZW50LCByZXByZXNlbnQgdGhlCiAgICAgICAgIC8vIHBvc2l0aW9uLCBi
dXQgbm90IHRoZSBjb250ZW50LCBvZiB0aGF0IGVsZW1lbnQgZS5nLiBpZiB0aGUKICAgICAgICAg
Ly8gbm9kZSBpcyBhIGJsb2NrZmxvdyBlbGVtZW50LCBlbWl0IGEgbmV3bGluZSB0aGF0CkBAIC0x
MDcxLDYgKzEwOTIsOCBAQCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKCkKICAgICAsIG1fc2luZ2xlQ2hhcmFjdGVyQnVmZmVy
KDApCiAgICAgLCBtX2hhdmVQYXNzZWRTdGFydE5vZGUoZmFsc2UpCiAgICAgLCBtX3Nob3VsZEhh
bmRsZUZpcnN0TGV0dGVyKGZhbHNlKQorICAgICwgbV9zdG9wc09uRm9ybUNvbnRyb2xzKGZhbHNl
KQorICAgICwgbV9zaG91bGRTdG9wKGZhbHNlKQogewogfQogCkBAIC0xMDk0LDggKzExMTcsMTAg
QEAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1Rl
eHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwKICAgICAsIG1fc2luZ2xlQ2hhcmFjdGVyQnVmZmVy
KDApCiAgICAgLCBtX2hhdmVQYXNzZWRTdGFydE5vZGUoZmFsc2UpCiAgICAgLCBtX3Nob3VsZEhh
bmRsZUZpcnN0TGV0dGVyKGZhbHNlKQorICAgICwgbV9zdG9wc09uRm9ybUNvbnRyb2xzKGJlaGF2
aW9yICYgVGV4dEl0ZXJhdG9yU3RvcHNPbkZvcm1Db250cm9scykKKyAgICAsIG1fc2hvdWxkU3Rv
cChmYWxzZSkKIHsKLSAgICBBU1NFUlQobV9iZWhhdmlvciA9PSBUZXh0SXRlcmF0b3JEZWZhdWx0
QmVoYXZpb3IpOworICAgIEFTU0VSVChtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvckRlZmF1bHRC
ZWhhdmlvciB8fCBtX2JlaGF2aW9yID09IFRleHRJdGVyYXRvclN0b3BzT25Gb3JtQ29udHJvbHMp
OwogCiAgICAgaWYgKCFyKQogICAgICAgICByZXR1cm47CkBAIC0xMTQ4LDYgKzExNzMsMTUgQEAg
dm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKCkKIHsKICAgICBB
U1NFUlQobV9wb3NpdGlvbk5vZGUpOwogCisgICAgaWYgKG1fc2hvdWxkU3RvcCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gUHJldmVudCBjaGFuZ2luZyB0aGUgaXRlcmF0b3IgcG9zaXRpb24g
aWYgYSBmb3JtIGNvbnRyb2wgZWxlbWVudCB3YXMgZm91bmQgYW5kIGFkdmFuY2Ugc2hvdWxkIHN0
b3Agb24gaXQuCisgICAgaWYgKG1fc3RvcHNPbkZvcm1Db250cm9scyAmJiBlbmNsb3NlZEJ5Rm9y
bUNvbnRyb2xFbGVtZW50KG1fbm9kZSkpIHsKKyAgICAgICAgbV9zaG91bGRTdG9wID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG1fcG9zaXRpb25Ob2RlID0gMDsKICAgICBt
X3RleHRMZW5ndGggPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAppbmRl
eCAwOGZmMDk1YTY5NmIzMjQyMWU4OTRlMDM0NmI1YjQ4YjBmZjNlMzRiLi5iZmNmYWUzNTY2ZTRj
MGE3YTM3ZTBiM2I0ZDczMmM2YjkzOTI0NjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmgKQEAgLTQzLDcgKzQzLDggQEAgZW51bSBUZXh0SXRlcmF0b3JCZWhhdmlvciB7CiAg
ICAgVGV4dEl0ZXJhdG9yRW1pdHNUZXh0c1dpdGhvdXRUcmFuc2NvZGluZyA9IDEgPDwgMiwKICAg
ICBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5ID0gMSA8PCAzLAogICAgIFRleHRJ
dGVyYXRvckVtaXRzT2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJzID0gMSA8PCA0LAotICAgIFRl
eHRJdGVyYXRvckVtaXRzT3JpZ2luYWxUZXh0ID0gMSA8PCA1CisgICAgVGV4dEl0ZXJhdG9yRW1p
dHNPcmlnaW5hbFRleHQgPSAxIDw8IDUsCisgICAgVGV4dEl0ZXJhdG9yU3RvcHNPbkZvcm1Db250
cm9scyA9IDEgPDwgNgogfTsKICAgICAKIC8vIEZJWE1FOiBDYW4ndCByZWFsbHkgYW5zd2VyIHRo
aXMgcXVlc3Rpb24gY29ycmVjdGx5IHdpdGhvdXQga25vd2luZyB0aGUgd2hpdGUtc3BhY2UgbW9k
ZS4KQEAgLTg5LDcgKzkwLDcgQEAgcHVibGljOgogICAgIH5UZXh0SXRlcmF0b3IoKTsKICAgICBl
eHBsaWNpdCBUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2UqLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9
IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7CiAKLSAgICBib29sIGF0RW5kKCkgY29uc3Qg
eyByZXR1cm4gIW1fcG9zaXRpb25Ob2RlOyB9CisgICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0
dXJuICFtX3Bvc2l0aW9uTm9kZSB8fCBtX3Nob3VsZFN0b3A7IH0KICAgICB2b2lkIGFkdmFuY2Uo
KTsKICAgICAKICAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0TGVuZ3RoOyB9
CkBAIC0xODUsNiArMTg2LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lnbm9yZXNTdHlsZVZp
c2liaWxpdHk7CiAgICAgLy8gVXNlZCB3aGVuIGVtaXR0aW5nIHRoZSBzcGVjaWFsIDB4RkZGQyBj
aGFyYWN0ZXIgaXMgcmVxdWlyZWQuCiAgICAgYm9vbCBtX2VtaXRzT2JqZWN0UmVwbGFjZW1lbnRD
aGFyYWN0ZXJzOworICAgIC8vIFVzZWQgd2hlbiB0aGUgaXRlcmF0aW9uIHNob3VsZCBzdG9wIGlm
IGZvcm0gY29udHJvbHMgYXJlIHJlYWNoZWQuCisgICAgYm9vbCBtX3N0b3BzT25Gb3JtQ29udHJv
bHM7CisgICAgLy8gVXNlZCB3aGVuIG1fc3RvcHNPbkZvcm1Db250cm9scyBpcyBzZXQgdG8gZGV0
ZXJtaW5lIGlmIHRoZSBpdGVyYXRvciBzaG91bGQga2VlcCBhZHZhbmNpbmcuCisgICAgYm9vbCBt
X3Nob3VsZFN0b3A7CiB9OwogCiAvLyBJdGVyYXRlcyB0aHJvdWdoIHRoZSBET00gcmFuZ2UsIHJl
dHVybmluZyBhbGwgdGhlIHRleHQsIGFuZCAwLWxlbmd0aCBib3VuZGFyaWVzCkBAIC0xOTUsNyAr
MjAwLDcgQEAgcHVibGljOgogICAgIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IoKTsK
ICAgICBleHBsaWNpdCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdl
KiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwog
ICAgIAotICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV9wb3NpdGlvbk5vZGU7IH0K
KyAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fcG9zaXRpb25Ob2RlIHx8IG1fc2hv
dWxkU3RvcDsgfQogICAgIHZvaWQgYWR2YW5jZSgpOwogICAgIAogICAgIGludCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX3RleHRMZW5ndGg7IH0KQEAgLTI0Nyw2ICsyNTIsMTIgQEAgcHJpdmF0
ZToKIAogICAgIC8vIFNob3VsZCBoYW5kbGUgZmlyc3QtbGV0dGVyIHJlbmRlcmVyIGluIHRoZSBu
ZXh0IGNhbGwgdG8gaGFuZGxlVGV4dE5vZGUuCiAgICAgYm9vbCBtX3Nob3VsZEhhbmRsZUZpcnN0
TGV0dGVyOworCisgICAgLy8gVXNlZCB3aGVuIHRoZSBpdGVyYXRpb24gc2hvdWxkIHN0b3AgaWYg
Zm9ybSBjb250cm9scyBhcmUgcmVhY2hlZC4KKyAgICBib29sIG1fc3RvcHNPbkZvcm1Db250cm9s
czsKKworICAgIC8vIFVzZWQgd2hlbiBtX3N0b3BzT25Gb3JtQ29udHJvbHMgaXMgc2V0IHRvIGRl
dGVybWluZSBpZiB0aGUgaXRlcmF0b3Igc2hvdWxkIGtlZXAgYWR2YW5jaW5nLgorICAgIGJvb2wg
bV9zaG91bGRTdG9wOwogfTsKIAogLy8gQnVpbGRzIG9uIHRoZSB0ZXh0IGl0ZXJhdG9yLCBhZGRp
bmcgYSBjaGFyYWN0ZXIgcG9zaXRpb24gc28gd2UgY2FuIHdhbGsgb25lCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133537</attachid>
            <date>2012-03-23 12:40:05 -0700</date>
            <delta_ts>2012-03-23 15:39:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78361-20120323194004.patch</filename>
            <type>text/plain</type>
            <size>15114</size>
            <attacher name="Leandro Graciá Gil">leandrogracia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExODU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmY5NDQ2Y2QzZWE4OWRj
ZjcyNThjYTZkN2RhYjVlNDBhZGJjNTE3OC4uNGUzYjA2MjQxMzFlZDNhMzBlMjA2ZGUyYzdjNTIy
ZDdiOTAyMmM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAzLTIzICBMZWFu
ZHJvIEdyYWNpYSBHaWwgIDxsZWFuZHJvZ3JhY2lhQGNocm9taXVtLm9yZz4KKworICAgICAgICBT
ZWxlY3RpdmVseSByZXRyaWV2ZSB0ZXh0IGNvbnRlbnQgYXJvdW5kIGEgZ2l2ZW4gcG9zaXRpb24u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODM2MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBh
IG5ldyBsYXlvdXQgdGVzdCB3aWxsIGJlIGludHJvZHVjZWQgb25jZSB0aGUgcmVxdWlyZWQgV2Vi
S2l0IEFQSSBjb2RlIGlzIHJlYWR5LgorCisgICAgICAgIEludHJvZHVjZSB0aGUgRE9NVGV4dENv
bnRlbnRXYWxrZXIgY2xhc3MgdG8gc2VsZWN0aXZlbHkgcmV0cmlldmUgY29udGVudAorICAgICAg
ICBhcm91bmQgYSBnaXZlbiBWaXNpYmxlUG9zaXRpb24gaW50byBhIHN0cmluZyBpbiBzdWNoIGEg
d2F5IHRoYXQgYSB0ZXh0CisgICAgICAgIFJhbmdlIGNhbiBiZSBleHRyYWN0ZWQgbGF0ZXIgZnJv
bSBhIHBhaXIgb2YgdGhlIHN0cmluZydzIHBvc2l0aW9ucy4KKworICAgICAgICBBIG5ldyBib29s
ZWFuIGNhbGxlZCBtX3Nob3VsZFN0b3AgaXMgYWxzbyBpbnRyb2R1Y2VkIGluIHRoZSBUZXh0SXRl
cmF0b3IgdG8gZm9yY2UKKyAgICAgICAgaXQgYWR2YW5jaW5nIHVuZGVyIGNlcnRhaW4gY29uZGl0
aW9ucy4gQWx0aG91Z2ggdGhpcyBpcyB1c3VhbGx5IGRvbmUgYnkgc2V0dGluZworICAgICAgICBt
X3Bvc2l0aW9uTm9kZSB0byB6ZXJvLCBpdCBjYW4ndCBiZSBhcHBsaWVkIGluIHRoaXMgY2FzZSBz
aW5jZSBieSBkb2luZyBzbyB0aGUKKyAgICAgICAgaXRlcmF0b3IncyByYW5nZSBpcyBsb3N0Lgor
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGVkaXRpbmcvU3Vycm91bmRpbmdU
ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN1
cnJvdW5kaW5nVGV4dDo6U3Vycm91bmRpbmdUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlN1cnJv
dW5kaW5nVGV4dDo6cmFuZ2VGcm9tQ29udGVudE9mZnNldHMpOgorICAgICAgICAoV2ViQ29yZTo6
U3Vycm91bmRpbmdUZXh0Ojpjb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN1cnJvdW5kaW5n
VGV4dDo6cG9zaXRpb25PZmZzZXRJbkNvbnRlbnQpOgorICAgICAgICAqIGVkaXRpbmcvU3Vycm91
bmRpbmdUZXh0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTdXJyb3Vu
ZGluZ1RleHQpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmVuY2xvc2VkQnlGb3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OmFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJ
dGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJh
dG9yOjphZHZhbmNlKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5oOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjphdEVuZCk6CisgICAgICAgIChUZXh0SXRlcmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YXRF
bmQpOgorICAgICAgICAoU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcik6CisKIDIwMTIt
MDMtMjMgIFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CiAKICAgICAgICAg
VGhlIEpTQyBjb2RlIGdlbmVyYXRvciBkb2Vzbid0IGdlbmVyYXRlIGNvcnJlY3QgY29kZSBmb3Ig
Q29uc3RydWN0b3JzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYjc0MWYxMGY1MGNhNTNjYTIxOGMzNmNj
MTQ1N2YyM2VmMjRlYTZlOC4uODkwNmJkNDRmYTljZTViZmZmOGVhNzNjYjQ0NDVmMzU5NDhkOTRj
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTEzLDYgKzExMyw4IEBACiAgICAgICAgICAgICAnZWRp
dGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL1Nt
YXJ0UmVwbGFjZS5oJywKICAgICAgICAgICAgICdlZGl0aW5nL1NwZWxsQ2hlY2tlci5oJywKKyAg
ICAgICAgICAgICdlZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5jcHAnLAorICAgICAgICAgICAgJ2Vk
aXRpbmcvU3Vycm91bmRpbmdUZXh0LmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvVGV4dEFmZmlu
aXR5LmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvVGV4dEdyYW51bGFyaXR5LmgnLAogICAgICAg
ICAgICAgJ2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TdXJyb3VuZGluZ1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
dXJyb3VuZGluZ1RleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmOWFhN2U4MDdhNGY2NTM2MmIwMWFmNTAy
ZDE5NDQ5Y2FlNjFjY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1N1cnJvdW5kaW5nVGV4dC5jcHAKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTdXJyb3VuZGluZ1RleHQuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJW
aXNpYmxlUG9zaXRpb24uaCIKKyNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCisjaW5jbHVk
ZSAidmlzaWJsZV91bml0cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N1cnJvdW5kaW5n
VGV4dDo6U3Vycm91bmRpbmdUZXh0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0
aW9uLCB1bnNpZ25lZCBtYXhMZW5ndGgpCisgICAgOiBtX3Bvc2l0aW9uT2Zmc2V0SW5Db250ZW50
KDApCit7CisgICAgY29uc3QgdW5zaWduZWQgaGFsZk1heExlbmd0aCA9IG1heExlbmd0aCAvIDI7
CisgICAgQ2hhcmFjdGVySXRlcmF0b3IgZm9yd2FyZEl0ZXJhdG9yKG1ha2VSYW5nZSh2aXNpYmxl
UG9zaXRpb24sIGVuZE9mRG9jdW1lbnQodmlzaWJsZVBvc2l0aW9uKSkuZ2V0KCksIFRleHRJdGVy
YXRvclN0b3BzT25Gb3JtQ29udHJvbHMpOworICAgIGZvcndhcmRJdGVyYXRvci5hZHZhbmNlKG1h
eExlbmd0aCAtIGhhbGZNYXhMZW5ndGgpOworCisgICAgUG9zaXRpb24gcG9zaXRpb24gPSB2aXNp
YmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsK
KyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBwb3NpdGlvbi5kb2N1bWVudCgpOworICAgIGlmICgh
UmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgcG9zaXRpb24sIGZvcndhcmRJdGVyYXRvci5yYW5nZSgp
LT5zdGFydFBvc2l0aW9uKCkpLT50ZXh0KCkubGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKG1ha2VSYW5n
ZShzdGFydE9mRG9jdW1lbnQodmlzaWJsZVBvc2l0aW9uKSwgdmlzaWJsZVBvc2l0aW9uKS5nZXQo
KSwgVGV4dEl0ZXJhdG9yU3RvcHNPbkZvcm1Db250cm9scyk7CisgICAgYmFja3dhcmRzSXRlcmF0
b3IuYWR2YW5jZShoYWxmTWF4TGVuZ3RoKTsKKworICAgIG1fcG9zaXRpb25PZmZzZXRJbkNvbnRl
bnQgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBiYWNrd2FyZHNJdGVyYXRvci5yYW5nZSgpLT5l
bmRQb3NpdGlvbigpLCBwb3NpdGlvbiktPnRleHQoKS5sZW5ndGgoKTsKKyAgICBtX2NvbnRlbnRS
YW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIGJhY2t3YXJkc0l0ZXJhdG9yLnJhbmdlKCkt
PmVuZFBvc2l0aW9uKCksIGZvcndhcmRJdGVyYXRvci5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCkp
OworfQorCitQYXNzUmVmUHRyPFJhbmdlPiBTdXJyb3VuZGluZ1RleHQ6OnJhbmdlRnJvbUNvbnRl
bnRPZmZzZXRzKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0SW5Db250ZW50LCB1bnNpZ25lZCBlbmRPZmZz
ZXRJbkNvbnRlbnQpCit7CisgICAgaWYgKHN0YXJ0T2Zmc2V0SW5Db250ZW50ID49IGVuZE9mZnNl
dEluQ29udGVudCB8fCBlbmRPZmZzZXRJbkNvbnRlbnQgPiBjb250ZW50KCkubGVuZ3RoKCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgQ2hhcmFjdGVySXRlcmF0b3IgaXRlcmF0b3IobV9jb250
ZW50UmFuZ2UuZ2V0KCkpOworICAgIGl0ZXJhdG9yLmFkdmFuY2Uoc3RhcnRPZmZzZXRJbkNvbnRl
bnQpOworCisgICAgUG9zaXRpb24gc3RhcnQgPSBpdGVyYXRvci5yYW5nZSgpLT5zdGFydFBvc2l0
aW9uKCk7CisgICAgaXRlcmF0b3IuYWR2YW5jZShlbmRPZmZzZXRJbkNvbnRlbnQgLSBzdGFydE9m
ZnNldEluQ29udGVudCk7CisgICAgUG9zaXRpb24gZW5kID0gaXRlcmF0b3IucmFuZ2UoKS0+c3Rh
cnRQb3NpdGlvbigpOworICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHN0YXJ0LmRvY3VtZW50KCks
IHN0YXJ0LCBlbmQpOworfQorCitTdHJpbmcgU3Vycm91bmRpbmdUZXh0Ojpjb250ZW50KCkgY29u
c3QKK3sKKyAgICBpZiAobV9jb250ZW50UmFuZ2UpCisgICAgICAgIHJldHVybiBtX2NvbnRlbnRS
YW5nZS0+dGV4dCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordW5zaWduZWQgU3Vycm91
bmRpbmdUZXh0Ojpwb3NpdGlvbk9mZnNldEluQ29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcG9zaXRpb25PZmZzZXRJbkNvbnRlbnQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Vycm91bmRpbmdUZXh0LmggYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwNjk4
NzVhMWFlZTc1ZDM4ZjY0N2U0NDBlOGZkOGEzMjNjM2VjODcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5oCkBAIC0wLDAgKzEsNTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFN1cnJvdW5kaW5nVGV4dF9oCisjZGVmaW5lIFN1cnJvdW5kaW5nVGV4dF9oCisKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFJhbmdlOworY2xhc3MgVmlzaWJsZVBvc2l0aW9uOworCitjbGFzcyBTdXJyb3VuZGluZ1RleHQg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN1cnJvdW5kaW5nVGV4dCk7CitwdWJsaWM6Cisg
ICAgU3Vycm91bmRpbmdUZXh0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIHVuc2lnbmVkIG1heExl
bmd0aCk7CisKKyAgICBTdHJpbmcgY29udGVudCgpIGNvbnN0OworICAgIHVuc2lnbmVkIHBvc2l0
aW9uT2Zmc2V0SW5Db250ZW50KCkgY29uc3Q7CisKKyAgICBQYXNzUmVmUHRyPFJhbmdlPiByYW5n
ZUZyb21Db250ZW50T2Zmc2V0cyh1bnNpZ25lZCBzdGFydE9mZnNldEluQ29udGVudCwgdW5zaWdu
ZWQgZW5kT2Zmc2V0SW5Db250ZW50KTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8UmFuZ2U+IG1f
Y29udGVudFJhbmdlOworICAgIHNpemVfdCBtX3Bvc2l0aW9uT2Zmc2V0SW5Db250ZW50OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3Vycm91bmRpbmdUZXh0X2gK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IGQxMDQ0YzEwZjFj
ODJiOTEyZTc3Njk2ZmMwY2M1NWZjMDBkZDBlMzkuLmU3MTA2YTM3NDI1YTc0YTRkZTBmZjk0ZjYz
YjM3ZWIxOTljYzI3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAK
QEAgLTI0MCw2ICsyNDAsMTYgQEAgc3RhdGljIHZvaWQgc2V0VXBGdWxseUNsaXBwZWRTdGFjayhC
aXRTdGFjayYgc3RhY2ssIE5vZGUqIG5vZGUpCiAgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA9PSAx
ICsgZGVwdGhDcm9zc2luZ1NoYWRvd0JvdW5kYXJpZXMobm9kZSkpOwogfQogCitzdGF0aWMgYm9v
bCBlbmNsb3NlZEJ5Rm9ybUNvbnRyb2xFbGVtZW50KE5vZGUqIG5vZGUpCit7CisgICAgd2hpbGUg
KG5vZGUpIHsKKyAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQo
bm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCiAvLyAtLS0tLS0tLQogCiBUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcigpCkBA
IC0yNjEsNiArMjcxLDggQEAgVGV4dEl0ZXJhdG9yOjpUZXh0SXRlcmF0b3IoKQogICAgICwgbV9o
YW5kbGVkRmlyc3RMZXR0ZXIoZmFsc2UpCiAgICAgLCBtX2lnbm9yZXNTdHlsZVZpc2liaWxpdHko
ZmFsc2UpCiAgICAgLCBtX2VtaXRzT2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJzKGZhbHNlKQor
ICAgICwgbV9zdG9wc09uRm9ybUNvbnRyb2xzKGZhbHNlKQorICAgICwgbV9zaG91bGRTdG9wKGZh
bHNlKQogewogfQogCkBAIC0yODIsNiArMjk0LDggQEAgVGV4dEl0ZXJhdG9yOjpUZXh0SXRlcmF0
b3IoY29uc3QgUmFuZ2UqIHIsIFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yKQogICAgICwg
bV9oYW5kbGVkRmlyc3RMZXR0ZXIoZmFsc2UpCiAgICAgLCBtX2lnbm9yZXNTdHlsZVZpc2liaWxp
dHkoYmVoYXZpb3IgJiBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5KQogICAgICwg
bV9lbWl0c09iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVycyhiZWhhdmlvciAmIFRleHRJdGVyYXRv
ckVtaXRzT2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJzKQorICAgICwgbV9zdG9wc09uRm9ybUNv
bnRyb2xzKGJlaGF2aW9yICYgVGV4dEl0ZXJhdG9yU3RvcHNPbkZvcm1Db250cm9scykKKyAgICAs
IG1fc2hvdWxkU3RvcChmYWxzZSkKIHsKICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybjsKQEAg
LTM0MSw2ICszNTUsOSBAQCBUZXh0SXRlcmF0b3I6On5UZXh0SXRlcmF0b3IoKQogCiB2b2lkIFRl
eHRJdGVyYXRvcjo6YWR2YW5jZSgpCiB7CisgICAgaWYgKG1fc2hvdWxkU3RvcCkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgLy8gcmVzZXQgdGhlIHJ1biBpbmZvcm1hdGlvbgogICAgIG1fcG9zaXRp
b25Ob2RlID0gMDsKICAgICBtX3RleHRMZW5ndGggPSAwOwpAQCAtMzczLDYgKzM5MCw5IEBAIHZv
aWQgVGV4dEl0ZXJhdG9yOjphZHZhbmNlKCkKICAgICB9CiAKICAgICB3aGlsZSAobV9ub2RlICYm
IG1fbm9kZSAhPSBtX3Bhc3RFbmROb2RlKSB7CisgICAgICAgIGlmICghbV9zaG91bGRTdG9wICYm
IG1fc3RvcHNPbkZvcm1Db250cm9scyAmJiBlbmNsb3NlZEJ5Rm9ybUNvbnRyb2xFbGVtZW50KG1f
bm9kZSkpCisgICAgICAgICAgICBtX3Nob3VsZFN0b3AgPSB0cnVlOworCiAgICAgICAgIC8vIGlm
IHRoZSByYW5nZSBlbmRzIGF0IG9mZnNldCAwIG9mIGFuIGVsZW1lbnQsIHJlcHJlc2VudCB0aGUK
ICAgICAgICAgLy8gcG9zaXRpb24sIGJ1dCBub3QgdGhlIGNvbnRlbnQsIG9mIHRoYXQgZWxlbWVu
dCBlLmcuIGlmIHRoZQogICAgICAgICAvLyBub2RlIGlzIGEgYmxvY2tmbG93IGVsZW1lbnQsIGVt
aXQgYSBuZXdsaW5lIHRoYXQKQEAgLTEwNzMsNiArMTA5Myw4IEBAIFNpbXBsaWZpZWRCYWNrd2Fy
ZHNUZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IoKQogICAgICwg
bV9zaW5nbGVDaGFyYWN0ZXJCdWZmZXIoMCkKICAgICAsIG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZShm
YWxzZSkKICAgICAsIG1fc2hvdWxkSGFuZGxlRmlyc3RMZXR0ZXIoZmFsc2UpCisgICAgLCBtX3N0
b3BzT25Gb3JtQ29udHJvbHMoZmFsc2UpCisgICAgLCBtX3Nob3VsZFN0b3AoZmFsc2UpCiB7CiB9
CiAKQEAgLTEwOTYsOCArMTExOCwxMCBAQCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9y
OjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLAogICAgICwg
bV9zaW5nbGVDaGFyYWN0ZXJCdWZmZXIoMCkKICAgICAsIG1faGF2ZVBhc3NlZFN0YXJ0Tm9kZShm
YWxzZSkKICAgICAsIG1fc2hvdWxkSGFuZGxlRmlyc3RMZXR0ZXIoZmFsc2UpCisgICAgLCBtX3N0
b3BzT25Gb3JtQ29udHJvbHMoYmVoYXZpb3IgJiBUZXh0SXRlcmF0b3JTdG9wc09uRm9ybUNvbnRy
b2xzKQorICAgICwgbV9zaG91bGRTdG9wKGZhbHNlKQogewotICAgIEFTU0VSVChtX2JlaGF2aW9y
ID09IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7CisgICAgQVNTRVJUKG1fYmVoYXZpb3Ig
PT0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yIHx8IG1fYmVoYXZpb3IgPT0gVGV4dEl0ZXJh
dG9yU3RvcHNPbkZvcm1Db250cm9scyk7CiAKICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybjsK
QEAgLTExNTAsNiArMTE3NCwxNSBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0
b3I6OmFkdmFuY2UoKQogewogICAgIEFTU0VSVChtX3Bvc2l0aW9uTm9kZSk7CiAKKyAgICBpZiAo
bV9zaG91bGRTdG9wKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQcmV2ZW50IGNoYW5naW5n
IHRoZSBpdGVyYXRvciBwb3NpdGlvbiBpZiBhIGZvcm0gY29udHJvbCBlbGVtZW50IHdhcyBmb3Vu
ZCBhbmQgYWR2YW5jZSBzaG91bGQgc3RvcCBvbiBpdC4KKyAgICBpZiAobV9zdG9wc09uRm9ybUNv
bnRyb2xzICYmIGVuY2xvc2VkQnlGb3JtQ29udHJvbEVsZW1lbnQobV9ub2RlKSkgeworICAgICAg
ICBtX3Nob3VsZFN0b3AgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgbV9w
b3NpdGlvbk5vZGUgPSAwOwogICAgIG1fdGV4dExlbmd0aCA9IDA7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5oCmluZGV4IDA4ZmYwOTVhNjk2YjMyNDIxZTg5NGUwMzQ2YjViNDhi
MGZmM2UzNGIuLmJmY2ZhZTM1NjZlNGMwYTdhMzdlMGIzYjRkNzMyYzZiOTM5MjQ2MzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaApAQCAtNDMsNyArNDMsOCBAQCBlbnVtIFRl
eHRJdGVyYXRvckJlaGF2aW9yIHsKICAgICBUZXh0SXRlcmF0b3JFbWl0c1RleHRzV2l0aG91dFRy
YW5zY29kaW5nID0gMSA8PCAyLAogICAgIFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxp
dHkgPSAxIDw8IDMsCiAgICAgVGV4dEl0ZXJhdG9yRW1pdHNPYmplY3RSZXBsYWNlbWVudENoYXJh
Y3RlcnMgPSAxIDw8IDQsCi0gICAgVGV4dEl0ZXJhdG9yRW1pdHNPcmlnaW5hbFRleHQgPSAxIDw8
IDUKKyAgICBUZXh0SXRlcmF0b3JFbWl0c09yaWdpbmFsVGV4dCA9IDEgPDwgNSwKKyAgICBUZXh0
SXRlcmF0b3JTdG9wc09uRm9ybUNvbnRyb2xzID0gMSA8PCA2CiB9OwogICAgIAogLy8gRklYTUU6
IENhbid0IHJlYWxseSBhbnN3ZXIgdGhpcyBxdWVzdGlvbiBjb3JyZWN0bHkgd2l0aG91dCBrbm93
aW5nIHRoZSB3aGl0ZS1zcGFjZSBtb2RlLgpAQCAtODksNyArOTAsNyBAQCBwdWJsaWM6CiAgICAg
flRleHRJdGVyYXRvcigpOwogICAgIGV4cGxpY2l0IFRleHRJdGVyYXRvcihjb25zdCBSYW5nZSos
IFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKIAot
ICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV9wb3NpdGlvbk5vZGU7IH0KKyAgICBi
b29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fcG9zaXRpb25Ob2RlIHx8IG1fc2hvdWxkU3Rv
cDsgfQogICAgIHZvaWQgYWR2YW5jZSgpOwogICAgIAogICAgIGludCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX3RleHRMZW5ndGg7IH0KQEAgLTE4NSw2ICsxODYsMTAgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1faWdub3Jlc1N0eWxlVmlzaWJpbGl0eTsKICAgICAvLyBVc2VkIHdoZW4gZW1pdHRp
bmcgdGhlIHNwZWNpYWwgMHhGRkZDIGNoYXJhY3RlciBpcyByZXF1aXJlZC4KICAgICBib29sIG1f
ZW1pdHNPYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcnM7CisgICAgLy8gVXNlZCB3aGVuIHRoZSBp
dGVyYXRpb24gc2hvdWxkIHN0b3AgaWYgZm9ybSBjb250cm9scyBhcmUgcmVhY2hlZC4KKyAgICBi
b29sIG1fc3RvcHNPbkZvcm1Db250cm9sczsKKyAgICAvLyBVc2VkIHdoZW4gbV9zdG9wc09uRm9y
bUNvbnRyb2xzIGlzIHNldCB0byBkZXRlcm1pbmUgaWYgdGhlIGl0ZXJhdG9yIHNob3VsZCBrZWVw
IGFkdmFuY2luZy4KKyAgICBib29sIG1fc2hvdWxkU3RvcDsKIH07CiAKIC8vIEl0ZXJhdGVzIHRo
cm91Z2ggdGhlIERPTSByYW5nZSwgcmV0dXJuaW5nIGFsbCB0aGUgdGV4dCwgYW5kIDAtbGVuZ3Ro
IGJvdW5kYXJpZXMKQEAgLTE5NSw3ICsyMDAsNyBAQCBwdWJsaWM6CiAgICAgU2ltcGxpZmllZEJh
Y2t3YXJkc1RleHRJdGVyYXRvcigpOwogICAgIGV4cGxpY2l0IFNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2UqLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVy
YXRvckRlZmF1bHRCZWhhdmlvcik7CiAgICAgCi0gICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0
dXJuICFtX3Bvc2l0aW9uTm9kZTsgfQorICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAh
bV9wb3NpdGlvbk5vZGUgfHwgbV9zaG91bGRTdG9wOyB9CiAgICAgdm9pZCBhZHZhbmNlKCk7CiAg
ICAgCiAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dExlbmd0aDsgfQpAQCAt
MjQ3LDYgKzI1MiwxMiBAQCBwcml2YXRlOgogCiAgICAgLy8gU2hvdWxkIGhhbmRsZSBmaXJzdC1s
ZXR0ZXIgcmVuZGVyZXIgaW4gdGhlIG5leHQgY2FsbCB0byBoYW5kbGVUZXh0Tm9kZS4KICAgICBi
b29sIG1fc2hvdWxkSGFuZGxlRmlyc3RMZXR0ZXI7CisKKyAgICAvLyBVc2VkIHdoZW4gdGhlIGl0
ZXJhdGlvbiBzaG91bGQgc3RvcCBpZiBmb3JtIGNvbnRyb2xzIGFyZSByZWFjaGVkLgorICAgIGJv
b2wgbV9zdG9wc09uRm9ybUNvbnRyb2xzOworCisgICAgLy8gVXNlZCB3aGVuIG1fc3RvcHNPbkZv
cm1Db250cm9scyBpcyBzZXQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpdGVyYXRvciBzaG91bGQga2Vl
cCBhZHZhbmNpbmcuCisgICAgYm9vbCBtX3Nob3VsZFN0b3A7CiB9OwogCiAvLyBCdWlsZHMgb24g
dGhlIHRleHQgaXRlcmF0b3IsIGFkZGluZyBhIGNoYXJhY3RlciBwb3NpdGlvbiBzbyB3ZSBjYW4g
d2FsayBvbmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133573</attachid>
            <date>2012-03-23 15:39:34 -0700</date>
            <delta_ts>2012-03-28 05:54:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78361-20120323223931.patch</filename>
            <type>text/plain</type>
            <size>16283</size>
            <attacher name="Leandro Graciá Gil">leandrogracia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExODU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmY5NDQ2Y2QzZWE4OWRj
ZjcyNThjYTZkN2RhYjVlNDBhZGJjNTE3OC4uYmEwYTU5M2E3NWMxOTFiMzcwZDYwMzZhOWQ3NzJh
ZmI5Y2Q5YWM5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTAzLTIzICBMZWFu
ZHJvIEdyYWNpYSBHaWwgIDxsZWFuZHJvZ3JhY2lhQGNocm9taXVtLm9yZz4KKworICAgICAgICBT
ZWxlY3RpdmVseSByZXRyaWV2ZSB0ZXh0IGNvbnRlbnQgYXJvdW5kIGEgZ2l2ZW4gcG9zaXRpb24u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODM2MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBh
IG5ldyBsYXlvdXQgdGVzdCB3aWxsIGJlIGludHJvZHVjZWQgb25jZSB0aGUgcmVxdWlyZWQgV2Vi
S2l0IEFQSSBjb2RlIGlzIHJlYWR5LgorCisgICAgICAgIEludHJvZHVjZSB0aGUgRE9NVGV4dENv
bnRlbnRXYWxrZXIgY2xhc3MgdG8gc2VsZWN0aXZlbHkgcmV0cmlldmUgY29udGVudAorICAgICAg
ICBhcm91bmQgYSBnaXZlbiBWaXNpYmxlUG9zaXRpb24gaW50byBhIHN0cmluZyBpbiBzdWNoIGEg
d2F5IHRoYXQgYSB0ZXh0CisgICAgICAgIFJhbmdlIGNhbiBiZSBleHRyYWN0ZWQgbGF0ZXIgZnJv
bSBhIHBhaXIgb2YgdGhlIHN0cmluZydzIHBvc2l0aW9ucy4KKworICAgICAgICBBIG5ldyBib29s
ZWFuIGNhbGxlZCBtX3Nob3VsZFN0b3AgaXMgYWxzbyBpbnRyb2R1Y2VkIGluIHRoZSBUZXh0SXRl
cmF0b3IgdG8gZm9yY2UKKyAgICAgICAgaXQgYWR2YW5jaW5nIHVuZGVyIGNlcnRhaW4gY29uZGl0
aW9ucy4gQWx0aG91Z2ggdGhpcyBpcyB1c3VhbGx5IGRvbmUgYnkgc2V0dGluZworICAgICAgICBt
X3Bvc2l0aW9uTm9kZSB0byB6ZXJvLCBpdCBjYW4ndCBiZSBhcHBsaWVkIGluIHRoaXMgY2FzZSBz
aW5jZSBieSBkb2luZyBzbyB0aGUKKyAgICAgICAgaXRlcmF0b3IncyByYW5nZSBpcyBsb3N0Lgor
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGVkaXRpbmcvU3Vycm91bmRpbmdU
ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN1
cnJvdW5kaW5nVGV4dDo6U3Vycm91bmRpbmdUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlN1cnJv
dW5kaW5nVGV4dDo6cmFuZ2VGcm9tQ29udGVudE9mZnNldHMpOgorICAgICAgICAoV2ViQ29yZTo6
U3Vycm91bmRpbmdUZXh0Ojpjb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN1cnJvdW5kaW5n
VGV4dDo6cG9zaXRpb25PZmZzZXRJbkNvbnRlbnQpOgorICAgICAgICAqIGVkaXRpbmcvU3Vycm91
bmRpbmdUZXh0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTdXJyb3Vu
ZGluZ1RleHQpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRJdGVyYXRvcjo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2Up
OgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0SXRlcmF0b3I6OmF0RW5kKToKKyAgICAgICAgKFRleHRJdGVyYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphdEVuZCk6CisgICAgICAg
IChTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKToKKyAgICAgICAgKiBodG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9s
RWxlbWVudDo6ZW5jbG9zaW5nRm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oOgorICAgICAgICAoSFRN
TEZvcm1Db250cm9sRWxlbWVudCk6CisKIDIwMTItMDMtMjMgIFRvbW15IFdpZGVuZmx5Y2h0ICA8
dG9tbXl3QGdvb2dsZS5jb20+CiAKICAgICAgICAgVGhlIEpTQyBjb2RlIGdlbmVyYXRvciBkb2Vz
bid0IGdlbmVyYXRlIGNvcnJlY3QgY29kZSBmb3IgQ29uc3RydWN0b3JzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggYjc0MWYxMGY1MGNhNTNjYTIxOGMzNmNjMTQ1N2YyM2VmMjRlYTZlOC4uODkwNmJkNDRm
YTljZTViZmZmOGVhNzNjYjQ0NDVmMzU5NDhkOTRjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTEz
LDYgKzExMyw4IEBACiAgICAgICAgICAgICAnZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL1NtYXJ0UmVwbGFjZS5oJywKICAgICAgICAgICAg
ICdlZGl0aW5nL1NwZWxsQ2hlY2tlci5oJywKKyAgICAgICAgICAgICdlZGl0aW5nL1N1cnJvdW5k
aW5nVGV4dC5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcvU3Vycm91bmRpbmdUZXh0LmgnLAog
ICAgICAgICAgICAgJ2VkaXRpbmcvVGV4dEFmZmluaXR5LmgnLAogICAgICAgICAgICAgJ2VkaXRp
bmcvVGV4dEdyYW51bGFyaXR5LmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvVGV4dEl0ZXJhdG9y
LmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TdXJyb3VuZGluZ1RleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TdXJyb3VuZGluZ1RleHQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmRmOWFhN2U4MDdhNGY2NTM2MmIwMWFmNTAyZDE5NDQ5Y2FlNjFjY2UKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5jcHAKQEAgLTAs
MCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdXJyb3VuZGluZ1RleHQu
aCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRl
ICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKKyNpbmNsdWRl
ICJWaXNpYmxlU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1N1cnJvdW5kaW5nVGV4dDo6U3Vycm91bmRpbmdUZXh0KGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCB1bnNpZ25lZCBtYXhMZW5ndGgpCisg
ICAgOiBtX3Bvc2l0aW9uT2Zmc2V0SW5Db250ZW50KDApCit7CisgICAgY29uc3QgdW5zaWduZWQg
aGFsZk1heExlbmd0aCA9IG1heExlbmd0aCAvIDI7CisgICAgQ2hhcmFjdGVySXRlcmF0b3IgZm9y
d2FyZEl0ZXJhdG9yKG1ha2VSYW5nZSh2aXNpYmxlUG9zaXRpb24sIGVuZE9mRG9jdW1lbnQodmlz
aWJsZVBvc2l0aW9uKSkuZ2V0KCksIFRleHRJdGVyYXRvclN0b3BzT25Gb3JtQ29udHJvbHMpOwor
ICAgIGZvcndhcmRJdGVyYXRvci5hZHZhbmNlKG1heExlbmd0aCAtIGhhbGZNYXhMZW5ndGgpOwor
CisgICAgUG9zaXRpb24gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQo
KS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBw
b3NpdGlvbi5kb2N1bWVudCgpOworICAgIGlmICghUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgcG9z
aXRpb24sIGZvcndhcmRJdGVyYXRvci5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCkpLT50ZXh0KCku
bGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJh
dG9yIGJhY2t3YXJkc0l0ZXJhdG9yKG1ha2VSYW5nZShzdGFydE9mRG9jdW1lbnQodmlzaWJsZVBv
c2l0aW9uKSwgdmlzaWJsZVBvc2l0aW9uKS5nZXQoKSwgVGV4dEl0ZXJhdG9yU3RvcHNPbkZvcm1D
b250cm9scyk7CisgICAgYmFja3dhcmRzSXRlcmF0b3IuYWR2YW5jZShoYWxmTWF4TGVuZ3RoKTsK
KworICAgIG1fcG9zaXRpb25PZmZzZXRJbkNvbnRlbnQgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50
LCBiYWNrd2FyZHNJdGVyYXRvci5yYW5nZSgpLT5lbmRQb3NpdGlvbigpLCBwb3NpdGlvbiktPnRl
eHQoKS5sZW5ndGgoKTsKKyAgICBtX2NvbnRlbnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1l
bnQsIGJhY2t3YXJkc0l0ZXJhdG9yLnJhbmdlKCktPmVuZFBvc2l0aW9uKCksIGZvcndhcmRJdGVy
YXRvci5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCkpOworfQorCitQYXNzUmVmUHRyPFJhbmdlPiBT
dXJyb3VuZGluZ1RleHQ6OnJhbmdlRnJvbUNvbnRlbnRPZmZzZXRzKHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0SW5Db250ZW50LCB1bnNpZ25lZCBlbmRPZmZzZXRJbkNvbnRlbnQpCit7CisgICAgaWYgKHN0
YXJ0T2Zmc2V0SW5Db250ZW50ID49IGVuZE9mZnNldEluQ29udGVudCB8fCBlbmRPZmZzZXRJbkNv
bnRlbnQgPiBjb250ZW50KCkubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ2hh
cmFjdGVySXRlcmF0b3IgaXRlcmF0b3IobV9jb250ZW50UmFuZ2UuZ2V0KCkpOworICAgIGl0ZXJh
dG9yLmFkdmFuY2Uoc3RhcnRPZmZzZXRJbkNvbnRlbnQpOworCisgICAgUG9zaXRpb24gc3RhcnQg
PSBpdGVyYXRvci5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCk7CisgICAgaXRlcmF0b3IuYWR2YW5j
ZShlbmRPZmZzZXRJbkNvbnRlbnQgLSBzdGFydE9mZnNldEluQ29udGVudCk7CisgICAgUG9zaXRp
b24gZW5kID0gaXRlcmF0b3IucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpOworICAgIHJldHVybiBS
YW5nZTo6Y3JlYXRlKHN0YXJ0LmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOworfQorCitTdHJpbmcg
U3Vycm91bmRpbmdUZXh0Ojpjb250ZW50KCkgY29uc3QKK3sKKyAgICBpZiAobV9jb250ZW50UmFu
Z2UpCisgICAgICAgIHJldHVybiBtX2NvbnRlbnRSYW5nZS0+dGV4dCgpOworICAgIHJldHVybiBT
dHJpbmcoKTsKK30KKwordW5zaWduZWQgU3Vycm91bmRpbmdUZXh0Ojpwb3NpdGlvbk9mZnNldElu
Q29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcG9zaXRpb25PZmZzZXRJbkNvbnRlbnQ7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3Vycm91bmRpbmdUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1N1cnJv
dW5kaW5nVGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwNjk4NzVhMWFlZTc1ZDM4ZjY0N2U0NDBlOGZkOGEz
MjNjM2VjODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1N1cnJv
dW5kaW5nVGV4dC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN1cnJvdW5kaW5nVGV4dF9oCisj
ZGVmaW5lIFN1cnJvdW5kaW5nVGV4dF9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJhbmdlOworY2xhc3MgVmlzaWJsZVBvc2l0
aW9uOworCitjbGFzcyBTdXJyb3VuZGluZ1RleHQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFN1cnJvdW5kaW5nVGV4dCk7CitwdWJsaWM6CisgICAgU3Vycm91bmRpbmdUZXh0KGNvbnN0IFZp
c2libGVQb3NpdGlvbiYsIHVuc2lnbmVkIG1heExlbmd0aCk7CisKKyAgICBTdHJpbmcgY29udGVu
dCgpIGNvbnN0OworICAgIHVuc2lnbmVkIHBvc2l0aW9uT2Zmc2V0SW5Db250ZW50KCkgY29uc3Q7
CisKKyAgICBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZUZyb21Db250ZW50T2Zmc2V0cyh1bnNpZ25l
ZCBzdGFydE9mZnNldEluQ29udGVudCwgdW5zaWduZWQgZW5kT2Zmc2V0SW5Db250ZW50KTsKKwor
cHJpdmF0ZToKKyAgICBSZWZQdHI8UmFuZ2U+IG1fY29udGVudFJhbmdlOworICAgIHNpemVfdCBt
X3Bvc2l0aW9uT2Zmc2V0SW5Db250ZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gU3Vycm91bmRpbmdUZXh0X2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuY3BwCmluZGV4IGQxMDQ0YzEwZjFjODJiOTEyZTc3Njk2ZmMwY2M1NWZjMDBkZDBl
MzkuLjhiMzViZmFmODI4MGFjMTY2NWNjOWEzNmYzNjE1MDc2ZTVkNDlkOTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTI2MSw2ICsyNjEsOCBAQCBUZXh0SXRl
cmF0b3I6OlRleHRJdGVyYXRvcigpCiAgICAgLCBtX2hhbmRsZWRGaXJzdExldHRlcihmYWxzZSkK
ICAgICAsIG1faWdub3Jlc1N0eWxlVmlzaWJpbGl0eShmYWxzZSkKICAgICAsIG1fZW1pdHNPYmpl
Y3RSZXBsYWNlbWVudENoYXJhY3RlcnMoZmFsc2UpCisgICAgLCBtX3N0b3BzT25Gb3JtQ29udHJv
bHMoZmFsc2UpCisgICAgLCBtX3Nob3VsZFN0b3AoZmFsc2UpCiB7CiB9CiAKQEAgLTI4Miw2ICsy
ODQsOCBAQCBUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwgVGV4dEl0
ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpCiAgICAgLCBtX2hhbmRsZWRGaXJzdExldHRlcihmYWxz
ZSkKICAgICAsIG1faWdub3Jlc1N0eWxlVmlzaWJpbGl0eShiZWhhdmlvciAmIFRleHRJdGVyYXRv
cklnbm9yZXNTdHlsZVZpc2liaWxpdHkpCiAgICAgLCBtX2VtaXRzT2JqZWN0UmVwbGFjZW1lbnRD
aGFyYWN0ZXJzKGJlaGF2aW9yICYgVGV4dEl0ZXJhdG9yRW1pdHNPYmplY3RSZXBsYWNlbWVudENo
YXJhY3RlcnMpCisgICAgLCBtX3N0b3BzT25Gb3JtQ29udHJvbHMoYmVoYXZpb3IgJiBUZXh0SXRl
cmF0b3JTdG9wc09uRm9ybUNvbnRyb2xzKQorICAgICwgbV9zaG91bGRTdG9wKGZhbHNlKQogewog
ICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwpAQCAtMzQxLDYgKzM0NSw5IEBAIFRleHRJdGVy
YXRvcjo6flRleHRJdGVyYXRvcigpCiAKIHZvaWQgVGV4dEl0ZXJhdG9yOjphZHZhbmNlKCkKIHsK
KyAgICBpZiAobV9zaG91bGRTdG9wKQorICAgICAgICByZXR1cm47CisKICAgICAvLyByZXNldCB0
aGUgcnVuIGluZm9ybWF0aW9uCiAgICAgbV9wb3NpdGlvbk5vZGUgPSAwOwogICAgIG1fdGV4dExl
bmd0aCA9IDA7CkBAIC0zNzMsNiArMzgwLDkgQEAgdm9pZCBUZXh0SXRlcmF0b3I6OmFkdmFuY2Uo
KQogICAgIH0KIAogICAgIHdoaWxlIChtX25vZGUgJiYgbV9ub2RlICE9IG1fcGFzdEVuZE5vZGUp
IHsKKyAgICAgICAgaWYgKCFtX3Nob3VsZFN0b3AgJiYgbV9zdG9wc09uRm9ybUNvbnRyb2xzICYm
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmVuY2xvc2luZ0Zvcm1Db250cm9sRWxlbWVudChtX25v
ZGUpKQorICAgICAgICAgICAgbV9zaG91bGRTdG9wID0gdHJ1ZTsKKwogICAgICAgICAvLyBpZiB0
aGUgcmFuZ2UgZW5kcyBhdCBvZmZzZXQgMCBvZiBhbiBlbGVtZW50LCByZXByZXNlbnQgdGhlCiAg
ICAgICAgIC8vIHBvc2l0aW9uLCBidXQgbm90IHRoZSBjb250ZW50LCBvZiB0aGF0IGVsZW1lbnQg
ZS5nLiBpZiB0aGUKICAgICAgICAgLy8gbm9kZSBpcyBhIGJsb2NrZmxvdyBlbGVtZW50LCBlbWl0
IGEgbmV3bGluZSB0aGF0CkBAIC0xMDczLDYgKzEwODMsOCBAQCBTaW1wbGlmaWVkQmFja3dhcmRz
VGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKCkKICAgICAsIG1f
c2luZ2xlQ2hhcmFjdGVyQnVmZmVyKDApCiAgICAgLCBtX2hhdmVQYXNzZWRTdGFydE5vZGUoZmFs
c2UpCiAgICAgLCBtX3Nob3VsZEhhbmRsZUZpcnN0TGV0dGVyKGZhbHNlKQorICAgICwgbV9zdG9w
c09uRm9ybUNvbnRyb2xzKGZhbHNlKQorICAgICwgbV9zaG91bGRTdG9wKGZhbHNlKQogewogfQog
CkBAIC0xMDk2LDggKzExMDgsMTAgQEAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6
U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwKICAgICAsIG1f
c2luZ2xlQ2hhcmFjdGVyQnVmZmVyKDApCiAgICAgLCBtX2hhdmVQYXNzZWRTdGFydE5vZGUoZmFs
c2UpCiAgICAgLCBtX3Nob3VsZEhhbmRsZUZpcnN0TGV0dGVyKGZhbHNlKQorICAgICwgbV9zdG9w
c09uRm9ybUNvbnRyb2xzKGJlaGF2aW9yICYgVGV4dEl0ZXJhdG9yU3RvcHNPbkZvcm1Db250cm9s
cykKKyAgICAsIG1fc2hvdWxkU3RvcChmYWxzZSkKIHsKLSAgICBBU1NFUlQobV9iZWhhdmlvciA9
PSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOworICAgIEFTU0VSVChtX2JlaGF2aW9yID09
IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciB8fCBtX2JlaGF2aW9yID09IFRleHRJdGVyYXRv
clN0b3BzT25Gb3JtQ29udHJvbHMpOwogCiAgICAgaWYgKCFyKQogICAgICAgICByZXR1cm47CkBA
IC0xMTUwLDYgKzExNjQsMTUgQEAgdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9y
OjphZHZhbmNlKCkKIHsKICAgICBBU1NFUlQobV9wb3NpdGlvbk5vZGUpOwogCisgICAgaWYgKG1f
c2hvdWxkU3RvcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUHJldmVudCBjaGFuZ2luZyB0
aGUgaXRlcmF0b3IgcG9zaXRpb24gaWYgYSBmb3JtIGNvbnRyb2wgZWxlbWVudCB3YXMgZm91bmQg
YW5kIGFkdmFuY2Ugc2hvdWxkIHN0b3Agb24gaXQuCisgICAgaWYgKG1fc3RvcHNPbkZvcm1Db250
cm9scyAmJiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjplbmNsb3NpbmdGb3JtQ29udHJvbEVsZW1l
bnQobV9ub2RlKSkgeworICAgICAgICBtX3Nob3VsZFN0b3AgPSB0cnVlOworICAgICAgICByZXR1
cm47CisgICAgfQorCiAgICAgbV9wb3NpdGlvbk5vZGUgPSAwOwogICAgIG1fdGV4dExlbmd0aCA9
IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCmluZGV4IDA4ZmYwOTVhNjk2
YjMyNDIxZTg5NGUwMzQ2YjViNDhiMGZmM2UzNGIuLmJmY2ZhZTM1NjZlNGMwYTdhMzdlMGIzYjRk
NzMyYzZiOTM5MjQ2MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaApAQCAt
NDMsNyArNDMsOCBAQCBlbnVtIFRleHRJdGVyYXRvckJlaGF2aW9yIHsKICAgICBUZXh0SXRlcmF0
b3JFbWl0c1RleHRzV2l0aG91dFRyYW5zY29kaW5nID0gMSA8PCAyLAogICAgIFRleHRJdGVyYXRv
cklnbm9yZXNTdHlsZVZpc2liaWxpdHkgPSAxIDw8IDMsCiAgICAgVGV4dEl0ZXJhdG9yRW1pdHNP
YmplY3RSZXBsYWNlbWVudENoYXJhY3RlcnMgPSAxIDw8IDQsCi0gICAgVGV4dEl0ZXJhdG9yRW1p
dHNPcmlnaW5hbFRleHQgPSAxIDw8IDUKKyAgICBUZXh0SXRlcmF0b3JFbWl0c09yaWdpbmFsVGV4
dCA9IDEgPDwgNSwKKyAgICBUZXh0SXRlcmF0b3JTdG9wc09uRm9ybUNvbnRyb2xzID0gMSA8PCA2
CiB9OwogICAgIAogLy8gRklYTUU6IENhbid0IHJlYWxseSBhbnN3ZXIgdGhpcyBxdWVzdGlvbiBj
b3JyZWN0bHkgd2l0aG91dCBrbm93aW5nIHRoZSB3aGl0ZS1zcGFjZSBtb2RlLgpAQCAtODksNyAr
OTAsNyBAQCBwdWJsaWM6CiAgICAgflRleHRJdGVyYXRvcigpOwogICAgIGV4cGxpY2l0IFRleHRJ
dGVyYXRvcihjb25zdCBSYW5nZSosIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9y
RGVmYXVsdEJlaGF2aW9yKTsKIAotICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV9w
b3NpdGlvbk5vZGU7IH0KKyAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fcG9zaXRp
b25Ob2RlIHx8IG1fc2hvdWxkU3RvcDsgfQogICAgIHZvaWQgYWR2YW5jZSgpOwogICAgIAogICAg
IGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3RleHRMZW5ndGg7IH0KQEAgLTE4NSw2ICsx
ODYsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1faWdub3Jlc1N0eWxlVmlzaWJpbGl0eTsKICAg
ICAvLyBVc2VkIHdoZW4gZW1pdHRpbmcgdGhlIHNwZWNpYWwgMHhGRkZDIGNoYXJhY3RlciBpcyBy
ZXF1aXJlZC4KICAgICBib29sIG1fZW1pdHNPYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcnM7Cisg
ICAgLy8gVXNlZCB3aGVuIHRoZSBpdGVyYXRpb24gc2hvdWxkIHN0b3AgaWYgZm9ybSBjb250cm9s
cyBhcmUgcmVhY2hlZC4KKyAgICBib29sIG1fc3RvcHNPbkZvcm1Db250cm9sczsKKyAgICAvLyBV
c2VkIHdoZW4gbV9zdG9wc09uRm9ybUNvbnRyb2xzIGlzIHNldCB0byBkZXRlcm1pbmUgaWYgdGhl
IGl0ZXJhdG9yIHNob3VsZCBrZWVwIGFkdmFuY2luZy4KKyAgICBib29sIG1fc2hvdWxkU3RvcDsK
IH07CiAKIC8vIEl0ZXJhdGVzIHRocm91Z2ggdGhlIERPTSByYW5nZSwgcmV0dXJuaW5nIGFsbCB0
aGUgdGV4dCwgYW5kIDAtbGVuZ3RoIGJvdW5kYXJpZXMKQEAgLTE5NSw3ICsyMDAsNyBAQCBwdWJs
aWM6CiAgICAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcigpOwogICAgIGV4cGxpY2l0
IFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2UqLCBUZXh0SXRlcmF0
b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7CiAgICAgCi0gICAgYm9v
bCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuICFtX3Bvc2l0aW9uTm9kZTsgfQorICAgIGJvb2wgYXRF
bmQoKSBjb25zdCB7IHJldHVybiAhbV9wb3NpdGlvbk5vZGUgfHwgbV9zaG91bGRTdG9wOyB9CiAg
ICAgdm9pZCBhZHZhbmNlKCk7CiAgICAgCiAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGV4dExlbmd0aDsgfQpAQCAtMjQ3LDYgKzI1MiwxMiBAQCBwcml2YXRlOgogCiAgICAgLy8g
U2hvdWxkIGhhbmRsZSBmaXJzdC1sZXR0ZXIgcmVuZGVyZXIgaW4gdGhlIG5leHQgY2FsbCB0byBo
YW5kbGVUZXh0Tm9kZS4KICAgICBib29sIG1fc2hvdWxkSGFuZGxlRmlyc3RMZXR0ZXI7CisKKyAg
ICAvLyBVc2VkIHdoZW4gdGhlIGl0ZXJhdGlvbiBzaG91bGQgc3RvcCBpZiBmb3JtIGNvbnRyb2xz
IGFyZSByZWFjaGVkLgorICAgIGJvb2wgbV9zdG9wc09uRm9ybUNvbnRyb2xzOworCisgICAgLy8g
VXNlZCB3aGVuIG1fc3RvcHNPbkZvcm1Db250cm9scyBpcyBzZXQgdG8gZGV0ZXJtaW5lIGlmIHRo
ZSBpdGVyYXRvciBzaG91bGQga2VlcCBhZHZhbmNpbmcuCisgICAgYm9vbCBtX3Nob3VsZFN0b3A7
CiB9OwogCiAvLyBCdWlsZHMgb24gdGhlIHRleHQgaXRlcmF0b3IsIGFkZGluZyBhIGNoYXJhY3Rl
ciBwb3NpdGlvbiBzbyB3ZSBjYW4gd2FsayBvbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IDBkYWQzNDZmMzQ3NWUxMTI5ZTYzNmU4ZjUx
M2NjMDg5OTdkZjJiNDguLjFiMmYwMjAyY2E0ZjExZTM4NWM3N2EzYWEwMWY3NTZmYTliZmRjZWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApA
QCAtNDYzLDQgKzQ2MywxNCBAQCBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRGVmYXVs
dEJ1dHRvbkZvckZvcm0oKSBjb25zdAogICAgIHJldHVybiBpc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0
b24oKSAmJiBmb3JtKCkgJiYgZm9ybSgpLT5kZWZhdWx0QnV0dG9uKCkgPT0gdGhpczsKIH0KIAor
SFRNTEZvcm1Db250cm9sRWxlbWVudCogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZW5jbG9zaW5n
Rm9ybUNvbnRyb2xFbGVtZW50KE5vZGUqIG5vZGUpCit7CisgICAgd2hpbGUgKG5vZGUpIHsKKyAg
ICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSktPmlzRm9y
bUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZv
cm1Db250cm9sRWxlbWVudCo+KG5vZGUpOworICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9k
ZSgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViY29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAppbmRleCAzZTYx
ZTc4YjY2NmI2NzA2ZTE5MTNkNDNkODJiOTM5YWNkYjQ3MmY4Li4zN2I5ZjljMzZlNDhlNzExNTE3
N2E1ZGUxYTM5MjE2N2I5NDJkZTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuaApAQCAtMTA0LDYgKzEwNCw4IEBAIHB1YmxpYzoKICAgICBib29sIGhh
c0F1dG9mb2N1c2VkKCkgeyByZXR1cm4gbV9oYXNBdXRvZm9jdXNlZDsgfQogICAgIHZvaWQgc2V0
QXV0b2ZvY3VzZWQoKSB7IG1faGFzQXV0b2ZvY3VzZWQgPSB0cnVlOyB9CiAKKyAgICBzdGF0aWMg
SFRNTEZvcm1Db250cm9sRWxlbWVudCogZW5jbG9zaW5nRm9ybUNvbnRyb2xFbGVtZW50KE5vZGUq
KTsKKwogICAgIHVzaW5nIFRyZWVTaGFyZWQ8Q29udGFpbmVyTm9kZT46OnJlZjsKICAgICB1c2lu
ZyBUcmVlU2hhcmVkPENvbnRhaW5lck5vZGU+OjpkZXJlZjsKIAo=
</data>
<flag name="review"
          id="137606"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>