<?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>67056</bug_id>
          
          <creation_ts>2011-08-26 13:07:39 -0700</creation_ts>
          <short_desc>Logic from HTMLElement::deprecatedCreateContextualFragment moved into Range::createContextualFragment function</short_desc>
          <delta_ts>2011-09-05 00:46:07 -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>All</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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Kaustubh Atrawalkar">kaustubh.ra</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>kaustubh.ra</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>457718</commentid>
    <comment_count>0</comment_count>
    <who name="Kaustubh Atrawalkar">kaustubh.ra</who>
    <bug_when>2011-08-26 13:07:39 -0700</bug_when>
    <thetext>Logic from HTMLElement::deprecatedCreateContextualFragment moved into Range::createContextualFragment function.
Also corresponding calls need to be reformatted. Range::createContextualFragment semantics do not make sense for the rest of the DOM implementation to use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457719</commentid>
    <comment_count>1</comment_count>
      <attachid>105394</attachid>
    <who name="Kaustubh Atrawalkar">kaustubh.ra</who>
    <bug_when>2011-08-26 13:08:22 -0700</bug_when>
    <thetext>Created attachment 105394
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457720</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-26 13:10:59 -0700</bug_when>
    <thetext>Attachment 105394 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Source/WebCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 2 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457804</commentid>
    <comment_count>3</comment_count>
      <attachid>105394</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-26 15:10:56 -0700</bug_when>
    <thetext>Comment on attachment 105394
Patch

Attachment 105394 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9550086

New failing tests:
editing/deleting/delete-block-merge-contents-004.html
editing/deleting/delete-block-merge-contents-003.html
editing/deleting/5115601.html
editing/deleting/delete-at-paragraph-boundaries-003.html
editing/deleting/5369009.html
editing/deleting/delete-block-merge-contents-001.html
editing/deleting/4922367.html
editing/deleting/delete-3857753-fix.html
editing/deleting/25322-3.html
editing/deleting/4916235-1.html
editing/deleting/5206311-2.html
editing/deleting/delete-at-paragraph-boundaries-009.html
editing/deleting/backspace-avoid-preceding-style.html
editing/deleting/delete-at-paragraph-boundaries-007.html
editing/deleting/delete-across-editable-content-boundaries-2.html
editing/deleting/delete-across-editable-content-boundaries-3.html
editing/deleting/delete-block-merge-contents-002.html
http/tests/misc/copy-resolves-urls.html
editing/deleting/5890684.html
editing/deleting/5032066.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457864</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-26 17:15:29 -0700</bug_when>
    <thetext>This is generally a good thing to do, but it would be nice if this patch didn&apos;t make Range::createContextualFragment huge.  Maybe keep this code in a separate function in Range.cpp?  Also it looks like you&apos;re having trouble with tests failing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457945</commentid>
    <comment_count>5</comment_count>
      <attachid>105438</attachid>
    <who name="Kaustubh Atrawalkar">kaustubh.ra</who>
    <bug_when>2011-08-27 08:34:12 -0700</bug_when>
    <thetext>Created attachment 105438
Update patch with trimmed down createContextFragment function

Broken down createContextFragment function into two functionality keeping Element:createDocumentFragmentFromElement function separate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457946</commentid>
    <comment_count>6</comment_count>
      <attachid>105438</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-27 09:12:18 -0700</bug_when>
    <thetext>Comment on attachment 105438
Update patch with trimmed down createContextFragment function

Attachment 105438 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9541529

New failing tests:
editing/deleting/delete-block-merge-contents-004.html
editing/deleting/delete-block-merge-contents-003.html
editing/deleting/5115601.html
editing/deleting/delete-at-paragraph-boundaries-003.html
editing/deleting/5369009.html
editing/deleting/delete-block-merge-contents-001.html
editing/deleting/4922367.html
editing/deleting/delete-3857753-fix.html
editing/deleting/25322-3.html
editing/deleting/4916235-1.html
editing/deleting/5206311-2.html
editing/deleting/delete-at-paragraph-boundaries-009.html
editing/deleting/backspace-avoid-preceding-style.html
editing/deleting/delete-at-paragraph-boundaries-007.html
editing/deleting/delete-across-editable-content-boundaries-2.html
editing/deleting/delete-across-editable-content-boundaries-3.html
editing/deleting/delete-block-merge-contents-002.html
http/tests/misc/copy-resolves-urls.html
editing/deleting/5890684.html
editing/deleting/5032066.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458141</commentid>
    <comment_count>7</comment_count>
      <attachid>105477</attachid>
    <who name="Kaustubh Atrawalkar">kaustubh.ra</who>
    <bug_when>2011-08-29 02:12:37 -0700</bug_when>
    <thetext>Created attachment 105477
Respecting  FragmentScriptingPermission for failing chrome layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458147</commentid>
    <comment_count>8</comment_count>
      <attachid>105477</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-29 02:49:57 -0700</bug_when>
    <thetext>Comment on attachment 105477
Respecting  FragmentScriptingPermission for failing chrome layout tests.

Attachment 105477 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9567033

New failing tests:
editing/deleting/delete-block-merge-contents-004.html
editing/deleting/delete-block-merge-contents-003.html
editing/deleting/5115601.html
editing/deleting/delete-at-paragraph-boundaries-003.html
editing/deleting/5369009.html
editing/deleting/delete-block-merge-contents-001.html
editing/deleting/4922367.html
editing/deleting/delete-3857753-fix.html
editing/deleting/25322-3.html
editing/deleting/4916235-1.html
editing/deleting/5206311-2.html
editing/deleting/delete-at-paragraph-boundaries-009.html
editing/deleting/backspace-avoid-preceding-style.html
editing/deleting/delete-at-paragraph-boundaries-007.html
editing/deleting/delete-across-editable-content-boundaries-2.html
editing/deleting/delete-across-editable-content-boundaries-3.html
editing/deleting/delete-block-merge-contents-002.html
http/tests/misc/copy-resolves-urls.html
editing/deleting/5890684.html
editing/deleting/5032066.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458339</commentid>
    <comment_count>9</comment_count>
      <attachid>105477</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-08-29 12:02:56 -0700</bug_when>
    <thetext>Comment on attachment 105477
Respecting  FragmentScriptingPermission for failing chrome layout tests.

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

&gt; Source/WebCore/dom/Range.cpp:1138
&gt; +    RefPtr&lt;Node&gt; nextNode;
&gt; +    for (RefPtr&lt;Node&gt; node = fragment-&gt;firstChild(); node; node = nextNode) {
&gt; +        nextNode = node-&gt;nextSibling();
&gt; +        if (node-&gt;hasTagName(htmlTag) || node-&gt;hasTagName(headTag) || node-&gt;hasTagName(bodyTag)) {
&gt; +            HTMLElement* element = toHTMLElement(node.get());
&gt; +            Node* firstChild = element-&gt;firstChild();
&gt; +            if (firstChild)
&gt; +                nextNode = firstChild;
&gt; +            RefPtr&lt;Node&gt; nextChild;
&gt; +            for (RefPtr&lt;Node&gt; child = firstChild; child; child = nextChild) {
&gt; +                nextChild = child-&gt;nextSibling();
&gt; +                element-&gt;removeChild(child.get(), ignoredExceptionCode);
&gt; +                ASSERT(!ignoredExceptionCode);
&gt; +                fragment-&gt;insertBefore(child, element, ignoredExceptionCode);
&gt; +                ASSERT(!ignoredExceptionCode);
&gt; +            }
&gt; +            fragment-&gt;removeChild(element, ignoredExceptionCode);
&gt; +            ASSERT(!ignoredExceptionCode);
&gt; +        }
&gt; +    }

Seems this could be split of into a separate helper function.  Even static inline.

&gt; Source/WebCore/editing/markup.cpp:687
&gt; +    RefPtr&lt;DocumentFragment&gt; fragment = (Range::create(document))-&gt;createContextualFragment(markup, ec, scriptingPermission);

Again here, no parens around Range::create() are needed.

&gt; Source/WebKit/qt/Api/qwebelement.cpp:1421
&gt; +    RefPtr&lt;DocumentFragment&gt; fragment = (Range::create(doc))-&gt;createContextualFragment(markup, exception);

These extra () around Range::create() are not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458340</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-08-29 12:03:08 -0700</bug_when>
    <thetext>It&apos;s great that you&apos;re working on this!  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461238</commentid>
    <comment_count>11</comment_count>
      <attachid>106139</attachid>
    <who name="Kaustubh Atrawalkar">kaustubh.ra</who>
    <bug_when>2011-09-02 08:47:23 -0700</bug_when>
    <thetext>Created attachment 106139
Updated Patch

Hi Eric, 
Thanks for reviewing my patch. I have incorporated your suggested changes. Can u please review this one?
Thanks :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461239</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-02 08:49:00 -0700</bug_when>
    <thetext>Attachment 106139 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/dom/Range.h:93:  The parameter name &quot;element&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/dom/Range.h:93:  The parameter name &quot;scriptingPermission&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/dom/Range.cpp:1100:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461247</commentid>
    <comment_count>13</comment_count>
      <attachid>106139</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-09-02 09:00:39 -0700</bug_when>
    <thetext>Comment on attachment 106139
Updated Patch

Attachment 106139 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9582699</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461254</commentid>
    <comment_count>14</comment_count>
      <attachid>106141</attachid>
    <who name="Kaustubh Atrawalkar">kaustubh.ra</who>
    <bug_when>2011-09-02 09:28:00 -0700</bug_when>
    <thetext>Created attachment 106141
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461394</commentid>
    <comment_count>15</comment_count>
      <attachid>106141</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-02 11:49:57 -0700</bug_when>
    <thetext>Comment on attachment 106141
Patch

Attachment 106141 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9583705

New failing tests:
editing/execCommand/insert-list-xml.xhtml</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461406</commentid>
    <comment_count>16</comment_count>
      <attachid>106141</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-09-02 12:13:44 -0700</bug_when>
    <thetext>Comment on attachment 106141
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        No new tests. (OOPS!)

You should replace this with an explanation of why no tests are needed (just refactoring) and remove the OOPS.

&gt; Source/WebCore/dom/Range.cpp:7
&gt; + * Portions  (C) 2011 Motorola Mobility. All rights reserved.

I think folks normally just say &quot;Copyright&quot;

&gt; Source/WebCore/dom/Range.cpp:1102
&gt; +    // Exceptions are ignored because none ought to happen here.

That&apos;s understood from the ASSERTs below.  You can just remove thsi comment.

&gt; Source/WebCore/dom/Range.cpp:1170
&gt; +    RefPtr&lt;DocumentFragment&gt; fragment = createDocumentFragmentForElement(markup, static_cast&lt;Element*&gt;(element), scriptingPermission);

We don&apos;t have a toElement cast?  the to* functions will check -&gt;isElement first, which is useful.

&gt; Source/WebCore/editing/markup.cpp:686
&gt; +    // Still using a fake body element here to trick the HTML parser to using the

The &quot;still&quot; won&apos;t mean anything to anyone reading this comment later.  Should just be removed.  &quot;Use a fake body element to make the HTMLParser start in InBody mode.&quot;

&gt; Source/WebCore/editing/markup.cpp:688
&gt; +    RefPtr&lt;DocumentFragment&gt; fragment =  Range::create(document)-&gt;createDocumentFragmentForElement(markup, document-&gt;body(), scriptingPermission);

This seems bad.  We&apos;re now doing a another malloc.  Why does this need to be on Range?

&gt; Source/WebKit/qt/Api/qwebelement.cpp:1027
&gt; +    WebCore::Element* e = m_element;
&gt; +    Document* doc = e ? e-&gt;document() : 0;
&gt; +    if (!doc)

Why the local variable e?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461423</commentid>
    <comment_count>17</comment_count>
      <attachid>106141</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-02 12:28:57 -0700</bug_when>
    <thetext>Comment on attachment 106141
Patch

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

&gt; Source/WebCore/ChangeLog:4
&gt; +        Logic from HTMLElement::deprecatedCreateContextualFragment moved into
&gt; +        Range::createContextualFragment function.

This line should match the bug title You should either rename the bug or replace this line by the actual bug title.

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

You should add description here (keep the blank line after Reviewed by ~~).

&gt; Source/WebCore/dom/Range.cpp:1127
&gt; +    if (htmlElement-&gt;hasLocalName(colTag) || htmlElement-&gt;hasLocalName(colgroupTag) || htmlElement-&gt;hasLocalName(framesetTag)
&gt; +        || htmlElement-&gt;hasLocalName(headTag) || htmlElement-&gt;hasLocalName(styleTag) || htmlElement-&gt;hasLocalName(titleTag))
&gt; +        return 0;
&gt; +

Where did this code come from?  We need a test if we&apos;re making any behavioral changes.

&gt; Source/WebKit/qt/Api/qwebelement.cpp:1077
&gt; +    WebCore::Element* e = m_element;
&gt; +    Document* doc = e ? e-&gt;document() : 0;

I don&apos;t think m_element can be null here. See the the line above. We already call isHTMLElement on m_element. If m_element was null, then we would have blown up before reaching this line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461812</commentid>
    <comment_count>18</comment_count>
    <who name="Kaustubh Atrawalkar">kaustubh.ra</who>
    <bug_when>2011-09-03 05:33:20 -0700</bug_when>
    <thetext>Thanks Eric for the review. Please see the reply below.

(In reply to comment #16)
&gt; (From update of attachment 106141 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106141&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        No new tests. (OOPS!)
&gt; 
&gt; You should replace this with an explanation of why no tests are needed (just refactoring) and remove the OOPS.
&gt; 

Added &quot;No New Tests. Code Re-factoring&quot; as per the bug.

&gt; &gt; Source/WebCore/dom/Range.cpp:7
&gt; &gt; + * Portions  (C) 2011 Motorola Mobility. All rights reserved.
&gt; 
&gt; I think folks normally just say &quot;Copyright&quot;
&gt; 

OK. I thought if you change very small portion of the whole file u need to add &quot;Portions&quot;. But anyway changed it to &quot;Copyright&quot;.

&gt; &gt; Source/WebCore/dom/Range.cpp:1102
&gt; &gt; +    // Exceptions are ignored because none ought to happen here.
&gt; 
&gt; That&apos;s understood from the ASSERTs below.  You can just remove thsi comment.
&gt; 

Removed unnecessary comment.

&gt; &gt; Source/WebCore/dom/Range.cpp:1170
&gt; &gt; +    RefPtr&lt;DocumentFragment&gt; fragment = createDocumentFragmentForElement(markup, static_cast&lt;Element*&gt;(element), scriptingPermission);
&gt; 
&gt; We don&apos;t have a toElement cast?  the to* functions will check -&gt;isElement first, which is useful.
&gt; 

Incorporated this change.

&gt; &gt; Source/WebCore/editing/markup.cpp:686
&gt; &gt; +    // Still using a fake body element here to trick the HTML parser to using the
&gt; 
&gt; The &quot;still&quot; won&apos;t mean anything to anyone reading this comment later.  Should just be removed.  &quot;Use a fake body element to make the HTMLParser start in InBody mode.&quot;
&gt; 

Agree with ambiguous &quot;still&quot; word. I have removed that.

&gt; &gt; Source/WebCore/editing/markup.cpp:688
&gt; &gt; +    RefPtr&lt;DocumentFragment&gt; fragment =  Range::create(document)-&gt;createDocumentFragmentForElement(markup, document-&gt;body(), scriptingPermission);
&gt; 
&gt; This seems bad.  We&apos;re now doing a another malloc.  Why does this need to be on Range?
&gt; 

The API createDocumentFragmentForElement is non-static API. We can not call it directly without creating object of Range. Previously, it was called on the fakebody element. ( the implementation was in HTMLElement.cpp which is now removed).

&gt; &gt; Source/WebKit/qt/Api/qwebelement.cpp:1027
&gt; &gt; +    WebCore::Element* e = m_element;
&gt; &gt; +    Document* doc = e ? e-&gt;document() : 0;
&gt; &gt; +    if (!doc)
&gt; 
&gt; Why the local variable e?

Just added one more check. But realized after Ryosuke&apos;s comment its not useful. Changed the line to - 

    if(!m_element-&gt;document())
        return;

    RefPtr&lt;DocumentFragment&gt; fragment =  Range::create(m_element-&gt;document)-&gt;createDocumentFragmentForElement(markup, toHTMLElement(m_element));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461814</commentid>
    <comment_count>19</comment_count>
    <who name="Kaustubh Atrawalkar">kaustubh.ra</who>
    <bug_when>2011-09-03 05:51:18 -0700</bug_when>
    <thetext>Thanks for review Ryosuke. Please check my reply below.

(In reply to comment #17)
&gt; (From update of attachment 106141 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106141&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:4
&gt; &gt; +        Logic from HTMLElement::deprecatedCreateContextualFragment moved into
&gt; &gt; +        Range::createContextualFragment function.
&gt; 
&gt; This line should match the bug title You should either rename the bug or replace this line by the actual bug title.
&gt; 
Changed the bug title. That&apos;s more relevant.
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +
&gt; 
&gt; You should add description here (keep the blank line after Reviewed by ~~).
&gt; 
Added description. 
&gt; &gt; Source/WebCore/dom/Range.cpp:1127
&gt; &gt; +    if (htmlElement-&gt;hasLocalName(colTag) || htmlElement-&gt;hasLocalName(colgroupTag) || htmlElement-&gt;hasLocalName(framesetTag)
&gt; &gt; +        || htmlElement-&gt;hasLocalName(headTag) || htmlElement-&gt;hasLocalName(styleTag) || htmlElement-&gt;hasLocalName(titleTag))
&gt; &gt; +        return 0;
&gt; &gt; +
&gt; 
&gt; Where did this code come from?  We need a test if we&apos;re making any behavioral changes.
&gt; 
This is directly picked up from HTMLElement::deprecatedCreateContextualFragment. No new behavioral changes here.
&gt; &gt; Source/WebKit/qt/Api/qwebelement.cpp:1077
&gt; &gt; +    WebCore::Element* e = m_element;
&gt; &gt; +    Document* doc = e ? e-&gt;document() : 0;
&gt; 
&gt; I don&apos;t think m_element can be null here. See the the line above. We already call isHTMLElement on m_element. If m_element was null, then we would have blown up before reaching this line.

Yes agree with you. I have changed that part as per my previous comment. Please review that once. I will update the patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461839</commentid>
    <comment_count>20</comment_count>
      <attachid>106266</attachid>
    <who name="Kaustubh Atrawalkar">kaustubh.ra</who>
    <bug_when>2011-09-03 12:02:22 -0700</bug_when>
    <thetext>Created attachment 106266
Re-factoring Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461840</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-03 12:03:59 -0700</bug_when>
    <thetext>Attachment 106266 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit/qt/Api/qwebelement.cpp:1025:  Missing space before ( in if(  [whitespace/parens] [5]
Source/WebKit/qt/Api/qwebelement.cpp:1073:  Missing space before ( in if(  [whitespace/parens] [5]
Source/WebKit/qt/Api/qwebelement.cpp:1127:  Missing space before ( in if(  [whitespace/parens] [5]
Source/WebKit/qt/Api/qwebelement.cpp:1179:  Missing space before ( in if(  [whitespace/parens] [5]
Source/WebKit/qt/Api/qwebelement.cpp:1328:  Missing space before ( in if(  [whitespace/parens] [5]
Source/WebKit/qt/Api/qwebelement.cpp:1405:  Missing space before ( in if(  [whitespace/parens] [5]
Total errors found: 6 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461841</commentid>
    <comment_count>22</comment_count>
      <attachid>106266</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-09-03 12:19:12 -0700</bug_when>
    <thetext>Comment on attachment 106266
Re-factoring Patch

Attachment 106266 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9587349</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461956</commentid>
    <comment_count>23</comment_count>
      <attachid>106288</attachid>
    <who name="Kaustubh Atrawalkar">kaustubh.ra</who>
    <bug_when>2011-09-04 10:15:52 -0700</bug_when>
    <thetext>Created attachment 106288
Updated Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461963</commentid>
    <comment_count>24</comment_count>
      <attachid>106288</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-04 11:04:40 -0700</bug_when>
    <thetext>Comment on attachment 106288
Updated Patch

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

&gt; Source/WebCore/dom/Range.cpp:1100
&gt; +static inline void insertIntoFragment(PassRefPtr&lt;DocumentFragment&gt; fragment, HTMLElement* element)

I don&apos;t think this function name is appropriate because element and its children are already in the fragment at this point. What this function is doing is to remove element preserving children.  I&apos;d say removeElementPreservingChildren will be a better name (I&apos;m kind of sad about the fact we can&apos;t share code with RemoveNodePreservingChildrenCommand).

&gt; Source/WebCore/dom/Range.cpp:1104
&gt; +    Node* firstChild = element-&gt;firstChild();

I don&apos;t see any benefit in declaring in this variable.  You should just do:
for (RefPtr&lt;Node&gt; child = element-&gt;firstChild(); child; child = nextChild)

&gt; Source/WebCore/dom/Range.cpp:1133
&gt; +    else {
&gt; +        if (!fragment-&gt;parseXML(markup, element, scriptingPermission))

This should be a single else-if

&gt; Source/WebCore/dom/Range.cpp:1135
&gt; +            // FIXME: We should propagate a syntax error exception out here.
&gt; +            return 0;

This comment should either be on the same line as return 0; or be wrapped by curly brackets (because the comment &amp; return 0 occupy 2 lines).

&gt; Source/WebCore/dom/Range.h:93
&gt; +    PassRefPtr&lt;DocumentFragment&gt; createDocumentFragmentForElement(const String&amp; markup, Element*,  FragmentScriptingPermission = FragmentScriptingAllowed);

This function can be static, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461967</commentid>
    <comment_count>25</comment_count>
      <attachid>106290</attachid>
    <who name="Kaustubh Atrawalkar">kaustubh.ra</who>
    <bug_when>2011-09-04 11:51:51 -0700</bug_when>
    <thetext>Created attachment 106290
Patch after getting in Ryosuke&apos;s comments

Ryosuke can u check once this patch? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461968</commentid>
    <comment_count>26</comment_count>
    <who name="Kaustubh Atrawalkar">kaustubh.ra</who>
    <bug_when>2011-09-04 11:58:28 -0700</bug_when>
    <thetext> 
&gt; I don&apos;t think this function name is appropriate because element and its children are already in the fragment at this point. What this function is doing is to remove element preserving children.  I&apos;d say removeElementPreservingChildren will be a better name (I&apos;m kind of sad about the fact we can&apos;t share code with RemoveNodePreservingChildrenCommand).
&gt; 
Hmm..seems to be relevant name. Ok I changed it.
&gt; I don&apos;t see any benefit in declaring in this variable.  You should just do:
&gt; for (RefPtr&lt;Node&gt; child = element-&gt;firstChild(); child; child = nextChild)
&gt; 
Just habit of getting pointers into variable before using it. Need to break it :)
&gt; This should be a single else-if
&gt; 
Actually it was copy pasted from previous code. So didn&apos;t changed it much. But will make it.
&gt; This comment should either be on the same line as return 0; or be wrapped by curly brackets (because the comment &amp; return 0 occupy 2 lines).
&gt; 
Yep. Done this.

&gt; This function can be static, no?

Yes this can be static. And then subsequent usage can also be without creating object of Range. So much more beneficial declaring it static. I missed that during splitting of the function createContextualFragment. Thanks you got that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461995</commentid>
    <comment_count>27</comment_count>
      <attachid>106290</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-04 18:02:45 -0700</bug_when>
    <thetext>Comment on attachment 106290
Patch after getting in Ryosuke&apos;s comments

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

&gt; Source/WebCore/dom/Range.cpp:1145
&gt; +            Node* firstChild = element-&gt;firstChild();
&gt; +            if (firstChild)
&gt; +                nextNode = firstChild;

firstChild can be declared inside if to limit the scope as in:
if (Node* firstChild = element-&gt;firstChild())
    nextNode = firstChild;

&gt; Source/WebCore/editing/markup.cpp:687
&gt;      // We use a fake body element here to trick the HTML parser to using the
&gt; -    // InBody insertion mode.  Really, all this code is wrong and need to be
&gt; -    // changed not to use deprecatedCreateContextualFragment.
&gt; +    // InBody insertion mode.

The entire comment seems to fit in one line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462039</commentid>
    <comment_count>28</comment_count>
      <attachid>106307</attachid>
    <who name="Kaustubh Atrawalkar">kaustubh.ra</who>
    <bug_when>2011-09-04 23:15:14 -0700</bug_when>
    <thetext>Created attachment 106307
Final Updated patch

Hi Ryosuke, I have added ur suggested changes in my final patch. 
Can u please review it once? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462042</commentid>
    <comment_count>29</comment_count>
      <attachid>106307</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-04 23:26:47 -0700</bug_when>
    <thetext>Comment on attachment 106307
Final Updated patch

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

sorry, I didn&apos;t catch one nit.

&gt; Source/WebCore/dom/Range.cpp:1139
&gt; +            return 0; // FIXME: We should propagate a syntax error exception out here.

Nit: wrong indentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462043</commentid>
    <comment_count>30</comment_count>
      <attachid>106308</attachid>
    <who name="Kaustubh Atrawalkar">kaustubh.ra</who>
    <bug_when>2011-09-04 23:29:17 -0700</bug_when>
    <thetext>Created attachment 106308
Patch

Aah..Even i missed that too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462045</commentid>
    <comment_count>31</comment_count>
      <attachid>106308</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-04 23:34:09 -0700</bug_when>
    <thetext>Comment on attachment 106308
Patch

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

&gt; Source/WebCore/dom/Range.cpp:1132
&gt; +    if (htmlElement-&gt;hasLocalName(colTag) || htmlElement-&gt;hasLocalName(colgroupTag) || htmlElement-&gt;hasLocalName(framesetTag)
&gt; +        || htmlElement-&gt;hasLocalName(headTag) || htmlElement-&gt;hasLocalName(styleTag) || htmlElement-&gt;hasLocalName(titleTag))
&gt; +        return 0;

Maybe we should consider using HashMap in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462046</commentid>
    <comment_count>32</comment_count>
    <who name="Kaustubh Atrawalkar">kaustubh.ra</who>
    <bug_when>2011-09-04 23:37:46 -0700</bug_when>
    <thetext>Yes I was thinking about the same. But for the first step i thought just move the logic/code as it is from HTMLElement to Range.cpp. Without changing much. I can take up the next step to make it hashMap soon. Thanks Ryosuke. 
(In reply to comment #31)
&gt; (From update of attachment 106308 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106308&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Range.cpp:1132
&gt; &gt; +    if (htmlElement-&gt;hasLocalName(colTag) || htmlElement-&gt;hasLocalName(colgroupTag) || htmlElement-&gt;hasLocalName(framesetTag)
&gt; &gt; +        || htmlElement-&gt;hasLocalName(headTag) || htmlElement-&gt;hasLocalName(styleTag) || htmlElement-&gt;hasLocalName(titleTag))
&gt; &gt; +        return 0;
&gt; 
&gt; Maybe we should consider using HashMap in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462047</commentid>
    <comment_count>33</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-04 23:39:27 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; Yes I was thinking about the same. But for the first step i thought just move the logic/code as it is from HTMLElement to Range.cpp. Without changing much. I can take up the next step to make it hashMap soon. 

Right. I think it&apos;ll be a nice followup patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462061</commentid>
    <comment_count>34</comment_count>
      <attachid>106308</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-05 00:46:01 -0700</bug_when>
    <thetext>Comment on attachment 106308
Patch

Clearing flags on attachment: 106308

Committed r94516: &lt;http://trac.webkit.org/changeset/94516&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462062</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-05 00:46:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105394</attachid>
            <date>2011-08-26 13:08:22 -0700</date>
            <delta_ts>2011-08-27 08:34:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>16852</size>
            <attacher name="Kaustubh Atrawalkar">kaustubh.ra</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzODk3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDgtMjYgIEthdXN0dWJo
IEF0cmF3YWxrYXIgIDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgTG9naWMgZnJv
bSBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBtb3ZlZCBp
bnRvCisgICAgICAgIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgZnVuY3Rpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIENv
ZGUgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgICog
ZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCk6CisgICAgICAgICogZWRpdGluZy9t
YXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKToK
KyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxF
bGVtZW50OjpvdXRlckhUTUwpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoKKwogMjAx
MS0wOC0yNiAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8a3Vib0Bwcm9mdXNpb24ubW9iaT4KIAog
ICAgICAgICBbRUZMXSBVcGRhdGUgc2VhcmNoYWJsZUluZGV4SW50cm9kdWN0aW9uKCkgdG8gbWF0
Y2ggR1RLKydzLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gOTM4OTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw0
OCArMTQwLDYgQEAgREVGSU5FX1ZJUlRVQUxfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKAogREVG
SU5FX1ZJUlRVQUxfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKEVsZW1lbnQsIGZvY3VzKTsKIERF
RklORV9WSVJUVUFMX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihFbGVtZW50LCBsb2FkKTsKIAot
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFbGVtZW50OjpkZXByZWNhdGVkQ3JlYXRlQ29u
dGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwLCBGcmFnbWVudFNjcmlwdGluZ1Bl
cm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKLXsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0K
LSAgICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgZnJhZ21lbnQt
PnBhcnNlSFRNTChtYXJrdXAsIHRoaXMsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwotICAgIGVsc2Ug
ewotICAgICAgICBpZiAoIWZyYWdtZW50LT5wYXJzZVhNTChtYXJrdXAsIHRoaXMsIHNjcmlwdGlu
Z1Blcm1pc3Npb24pKQotICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9wYWdhdGUg
YSBzeW50YXggZXJyb3IgZXhjZXB0aW9uIG91dCBoZXJlLgotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotCi0gICAgLy8gRXhjZXB0aW9ucyBhcmUgaWdub3JlZCBiZWNhdXNlIG5vbmUgb3Vn
aHQgdG8gaGFwcGVuIGhlcmUuCi0gICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkRXhjZXB0aW9uQ29k
ZTsKLQotICAgIC8vIFdlIG5lZWQgdG8gcG9wIDxodG1sPiBhbmQgPGJvZHk+IGVsZW1lbnRzIGFu
ZCByZW1vdmUgPGhlYWQ+IHRvCi0gICAgLy8gYWNjb21tb2RhdGUgZm9sa3MgcGFzc2luZyBjb21w
bGV0ZSBIVE1MIGRvY3VtZW50cyB0byBtYWtlIHRoZQotICAgIC8vIGNoaWxkIG9mIGFuIGVsZW1l
bnQuCi0KLSAgICBSZWZQdHI8Tm9kZT4gbmV4dE5vZGU7Ci0gICAgZm9yIChSZWZQdHI8Tm9kZT4g
bm9kZSA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBuZXh0Tm9kZSkgewot
ICAgICAgICBuZXh0Tm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChub2Rl
LT5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoaGVhZFRhZykgfHwgbm9k
ZS0+aGFzVGFnTmFtZShib2R5VGFnKSkgewotICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1l
bnQgPSB0b0hUTUxFbGVtZW50KG5vZGUuZ2V0KCkpOwotICAgICAgICAgICAgTm9kZSogZmlyc3RD
aGlsZCA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIGlmIChmaXJzdENoaWxk
KQotICAgICAgICAgICAgICAgIG5leHROb2RlID0gZmlyc3RDaGlsZDsKLSAgICAgICAgICAgIFJl
ZlB0cjxOb2RlPiBuZXh0Q2hpbGQ7Ci0gICAgICAgICAgICBmb3IgKFJlZlB0cjxOb2RlPiBjaGls
ZCA9IGZpcnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IG5leHRDaGlsZCkgewotICAgICAgICAgICAg
ICAgIG5leHRDaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgIGVs
ZW1lbnQtPnJlbW92ZUNoaWxkKGNoaWxkLmdldCgpLCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0gICAgICAgICAg
ICAgICAgZnJhZ21lbnQtPmluc2VydEJlZm9yZShjaGlsZCwgZWxlbWVudCwgaWdub3JlZEV4Y2Vw
dGlvbkNvZGUpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghaWdub3JlZEV4Y2VwdGlvbkNvZGUp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnJhZ21lbnQtPnJlbW92ZUNoaWxkKGVsZW1l
bnQsIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgIEFTU0VSVCghaWdub3JlZEV4
Y2VwdGlvbkNvZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmcmFnbWVudC5yZWxl
YXNlKCk7Ci19Ci0KIFBhc3NSZWZQdHI8Tm9kZT4gRWxlbWVudDo6Y2xvbmVOb2RlKGJvb2wgZGVl
cCkKIHsKICAgICByZXR1cm4gZGVlcCA/IGNsb25lRWxlbWVudFdpdGhDaGlsZHJlbigpIDogY2xv
bmVFbGVtZW50V2l0aG91dENoaWxkcmVuKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJldmlz
aW9uIDkzODk1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDggKzEwOCw2IEBAIHB1YmxpYzoKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5U
X0xJU1RFTkVSKHdlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UpOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxG
cmFnbWVudChjb25zdCBTdHJpbmcmLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBGcmFn
bWVudFNjcmlwdGluZ0FsbG93ZWQpOwotCiAgICAgYm9vbCBoYXNBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIGNvbnN0OwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZ2V0QXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAgICB2b2lkIHNldEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29k
ZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiA5Mzg5NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw3IEBACiAgKiAo
QykgMjAwMCBGcmVkZXJpayBIb2xsamVuIChmcmVkZXJpay5ob2xsamVuQGhpZy5ubykKICAqIChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgIChDKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw2ICszMyw4
IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5vZGUu
aCIKICNpbmNsdWRlICJOb2RlV2l0aEluZGV4LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgpAQCAtNTMsNiArNTYsNyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIAogI2lmbmRlZiBOREVCVUcKIHN0YXRpYyBXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRl
ciByYW5nZUNvdW50ZXIoIlJhbmdlIik7CkBAIC0xMTA2LDEwICsxMTEwLDUxIEBAIFBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OmNyZWEKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCi0gICAgLy8gTG9naWMgZnJvbSBkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50
IHNob3VsZCBqdXN0IGJlIG1vdmVkIGludG8KLSAgICAvLyB0aGlzIGZ1bmN0aW9uLiAgUmFuZ2U6
OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBzZW1hbnRpY3MgZG8gbm90IG1ha2UKLSAgICAvLyBz
ZW5zZSBmb3IgdGhlIHJlc3Qgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiB0byB1c2UuCi0gICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gdG9IVE1MRWxlbWVudChlbGVtZW50
KS0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIEhUTUxF
bGVtZW50KiBodG1sRWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoZWxlbWVudCk7CisgICAgaWYgKGh0
bWxFbGVtZW50LT5pZUZvcmJpZHNJbnNlcnRIVE1MKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKGh0bWxFbGVtZW50LT5oYXNMb2NhbE5hbWUoY29sZ3JvdXBUYWcpIHx8IGh0bWxFbGVt
ZW50LT5oYXNMb2NhbE5hbWUoZnJhbWVzZXRUYWcpCisgICAgICAgIHx8IGh0bWxFbGVtZW50LT5o
YXNMb2NhbE5hbWUoaGVhZFRhZykgfHwgaHRtbEVsZW1lbnQtPmhhc0xvY2FsTmFtZShzdHlsZVRh
ZykgfHwgaHRtbEVsZW1lbnQtPmhhc0xvY2FsTmFtZSh0aXRsZVRhZykpCisgICAgICAgIHJldHVy
biAwOworCisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZWxlbWVudC0+
ZG9jdW1lbnQoKS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworCisgICAgaWYgKGVsZW1lbnQt
PmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIGZyYWdtZW50LT5wYXJzZUhU
TUwobWFya3VwLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZWxlbWVudCksIEZyYWdtZW50U2NyaXB0
aW5nQWxsb3dlZCk7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghZnJhZ21lbnQtPnBhcnNlWE1M
KG1hcmt1cCwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGVsZW1lbnQpLCBGcmFnbWVudFNjcmlwdGlu
Z0FsbG93ZWQpKQorICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9wYWdhdGUgYSBz
eW50YXggZXJyb3IgZXhjZXB0aW9uIG91dCBoZXJlLgorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgLy8gRXhjZXB0aW9ucyBhcmUgaWdub3JlZCBiZWNhdXNlIG5vbmUgb3VnaHQg
dG8gaGFwcGVuIGhlcmUuCisgICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkRXhjZXB0aW9uQ29kZTsK
KworICAgIC8vIFdlIG5lZWQgdG8gcG9wIDxodG1sPiBhbmQgPGJvZHk+IGVsZW1lbnRzIGFuZCBy
ZW1vdmUgPGhlYWQ+IHRvCisgICAgLy8gYWNjb21tb2RhdGUgZm9sa3MgcGFzc2luZyBjb21wbGV0
ZSBIVE1MIGRvY3VtZW50cyB0byBtYWtlIHRoZQorICAgIC8vIGNoaWxkIG9mIGFuIGVsZW1lbnQu
CisgICAgUmVmUHRyPE5vZGU+IG5leHROb2RlOworICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUg
PSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbmV4dE5vZGUpIHsKKyAgICAg
ICAgbmV4dE5vZGUgPSBub2RlLT5uZXh0U2libGluZygpOworICAgICAgICBpZiAobm9kZS0+aGFz
VGFnTmFtZShodG1sVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGhlYWRUYWcpIHx8IG5vZGUtPmhh
c1RhZ05hbWUoYm9keVRhZykpIHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0g
dG9IVE1MRWxlbWVudChub2RlLmdldCgpKTsKKyAgICAgICAgICAgIE5vZGUqIGZpcnN0Q2hpbGQg
PSBlbGVtZW50LT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCkKKyAg
ICAgICAgICAgICAgICBuZXh0Tm9kZSA9IGZpcnN0Q2hpbGQ7CisgICAgICAgICAgICBSZWZQdHI8
Tm9kZT4gbmV4dENoaWxkOworICAgICAgICAgICAgZm9yIChSZWZQdHI8Tm9kZT4gY2hpbGQgPSBm
aXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBuZXh0Q2hpbGQpIHsKKyAgICAgICAgICAgICAgICBu
ZXh0Q2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50
LT5yZW1vdmVDaGlsZChjaGlsZC5nZXQoKSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOworICAgICAg
ICAgICAgICAgIEFTU0VSVCghaWdub3JlZEV4Y2VwdGlvbkNvZGUpOworICAgICAgICAgICAgICAg
IGZyYWdtZW50LT5pbnNlcnRCZWZvcmUoY2hpbGQsIGVsZW1lbnQsIGlnbm9yZWRFeGNlcHRpb25D
b2RlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGZyYWdtZW50LT5yZW1vdmVDaGlsZChlbGVtZW50LCBp
Z25vcmVkRXhjZXB0aW9uQ29kZSk7CisgICAgICAgICAgICBBU1NFUlQoIWlnbm9yZWRFeGNlcHRp
b25Db2RlKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghZnJhZ21lbnQpIHsKICAgICAg
ICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiA5Mzg5NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xl
IEluYy4KICAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICogUG9ydGlvbnMgIChD
KSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02ODIsMTIgKzY4Myw4IEBAIFN0cmluZyBjcmVhdGVN
YXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLAogCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmlu
ZyYgbWFya3VwLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQogewotICAgIC8vIFdlIHVzZSBhIGZha2UgYm9keSBl
bGVtZW50IGhlcmUgdG8gdHJpY2sgdGhlIEhUTUwgcGFyc2VyIHRvIHVzaW5nIHRoZQotICAgIC8v
IEluQm9keSBpbnNlcnRpb24gbW9kZS4gIFJlYWxseSwgYWxsIHRoaXMgY29kZSBpcyB3cm9uZyBh
bmQgbmVlZCB0byBiZQotICAgIC8vIGNoYW5nZWQgbm90IHRvIHVzZSBkZXByZWNhdGVkQ3JlYXRl
Q29udGV4dHVhbEZyYWdtZW50LgotICAgIFJlZlB0cjxIVE1MQm9keUVsZW1lbnQ+IGZha2VCb2R5
ID0gSFRNTEJvZHlFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwotICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBub3QgdXNlIGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQKLSAgICBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBmYWtlQm9keS0+ZGVwcmVjYXRlZENy
ZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXAsIHNjcmlwdGluZ1Blcm1pc3Npb24pOworICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IChSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KSktPmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVu
dChtYXJrdXAsIGVjKTsKIAogICAgIGlmIChmcmFnbWVudCAmJiAhYmFzZVVSTC5pc0VtcHR5KCkg
JiYgYmFzZVVSTCAhPSBibGFua1VSTCgpICYmIGJhc2VVUkwgIT0gZG9jdW1lbnQtPmJhc2VVUkwo
KSkKICAgICAgICAgY29tcGxldGVVUkxzKGZyYWdtZW50LmdldCgpLCBiYXNlVVJMKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5Mzg5NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTEsMjAg
KzI5MSw2IEBAIFN0cmluZyBIVE1MRWxlbWVudDo6b3V0ZXJIVE1MKCkgY29uc3QKICAgICByZXR1
cm4gY3JlYXRlTWFya3VwKHRoaXMpOwogfQogCi0vLyBGSVhNRTogVGhpcyBsb2dpYyBzaG91bGQg
bW92ZSBpbnRvIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQKLVBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gSFRNTEVsZW1lbnQ6OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJh
Z21lbnQoY29uc3QgU3RyaW5nJiBtYXJrdXAsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBz
Y3JpcHRpbmdQZXJtaXNzaW9uKQotewotICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgaW4gYWNjb3Jk
YW5jZSB3aXRoIHRoZSBkZWZpbml0aW9uIGFzIHVzZWQgYnkgSUUuCi0gICAgaWYgKGllRm9yYmlk
c0luc2VydEhUTUwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoaGFzTG9jYWxOYW1l
KGNvbFRhZykgfHwgaGFzTG9jYWxOYW1lKGNvbGdyb3VwVGFnKSB8fCBoYXNMb2NhbE5hbWUoZnJh
bWVzZXRUYWcpCi0gICAgICAgIHx8IGhhc0xvY2FsTmFtZShoZWFkVGFnKSB8fCBoYXNMb2NhbE5h
bWUoc3R5bGVUYWcpIHx8IGhhc0xvY2FsTmFtZSh0aXRsZVRhZykpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgcmV0dXJuIEVsZW1lbnQ6OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21l
bnQobWFya3VwLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKLX0KLQogc3RhdGljIGlubGluZSBib29s
IGhhc09uZUNoaWxkKENvbnRhaW5lck5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZSogZmlyc3RDaGls
ZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJ
KHJldmlzaW9uIDkzODk1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw2IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBpbm5l
ckhUTUwoKSBjb25zdDsKICAgICBTdHJpbmcgb3V0ZXJIVE1MKCkgY29uc3Q7Ci0gICAgLy8gZGVw
cmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBsb2dpYyBzaG91bGQgYmUgbW92ZWQgaW50
byBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50Ci0gICAgUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmlu
ZyYsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dl
ZCk7CiAgICAgdm9pZCBzZXRJbm5lckhUTUwoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYp
OwogICAgIHZvaWQgc2V0T3V0ZXJIVE1MKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICB2b2lkIHNldElubmVyVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwkocmV2aXNpb24gOTM4OTcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDExLTA4LTI2ICBLYXVzdHViaCBBdHJh
d2Fsa2FyICA8a2F1c3R1YmhAbW90b3JvbGEuY29tPgorCisgICAgICAgIExvZ2ljIGZyb20gSFRN
TEVsZW1lbnQ6OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgbW92ZWQgaW50bwor
ICAgICAgICBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IGZ1bmN0aW9uLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBxdC9BcGkvcXdlYmVsZW1lbnQu
Y3BwOgorICAgICAgICAoUVdlYkVsZW1lbnQ6OmFwcGVuZEluc2lkZSk6CisgICAgICAgIChRV2Vi
RWxlbWVudDo6cHJlcGVuZEluc2lkZSk6CisgICAgICAgIChRV2ViRWxlbWVudDo6cHJlcGVuZE91
dHNpZGUpOgorICAgICAgICAoUVdlYkVsZW1lbnQ6OmFwcGVuZE91dHNpZGUpOgorICAgICAgICAo
UVdlYkVsZW1lbnQ6OmVuY2xvc2VDb250ZW50c1dpdGgpOgorICAgICAgICAoUVdlYkVsZW1lbnQ6
OmVuY2xvc2VXaXRoKToKKwogMjAxMS0wOC0yMyAgSm9uYXMgTS4gR2FzdGFsIDxqZ2FzdGFsQHBy
b2Z1c2lvbi5tb2JpPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudG9uaW8gR29tZXMuCkluZGV4
OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCShyZXZpc2lvbiA5Mzg5NSkKKysrIFNv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICAgIFBvcnRpb25zICAoQykgMjAxMSBNb3Rvcm9s
YSBNb2JpbGl0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
NDUsNiArNDYsNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjZW5kaWYKICNpbmNs
dWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1h
Z2UuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0
LmgiCkBAIC0xMDIyLDEwICsxMDI0LDE0IEBAIHZvaWQgUVdlYkVsZW1lbnQ6OmFwcGVuZEluc2lk
ZShjb25zdCBRU3QKICAgICBpZiAoIW1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KG1fZWxlbWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50ID0gaHRtbEVsZW1lbnQtPkVsZW1lbnQ6OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFs
RnJhZ21lbnQobWFya3VwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBlID0gbV9lbGVtZW50Owor
ICAgIERvY3VtZW50KiBkb2MgPSBlID8gZS0+ZG9jdW1lbnQoKSA6IDA7CisgICAgaWYgKCFkb2Mp
CisgICAgICAgIHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKKyAg
ICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAoUmFuZ2U6OmNyZWF0ZShkb2Mp
KS0+Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCwgZXhjZXB0aW9uKTsKKwogICAgIG1f
ZWxlbWVudC0+YXBwZW5kQ2hpbGQoZnJhZ21lbnQsIGV4Y2VwdGlvbik7CiB9CiAKQEAgLTEwNjgs
MTAgKzEwNzQsMTMgQEAgdm9pZCBRV2ViRWxlbWVudDo6cHJlcGVuZEluc2lkZShjb25zdCBRUwog
ICAgIGlmICghbV9lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4o
bV9lbGVtZW50KTsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBodG1s
RWxlbWVudC0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAg
IFdlYkNvcmU6OkVsZW1lbnQqIGUgPSBtX2VsZW1lbnQ7CisgICAgRG9jdW1lbnQqIGRvYyA9IGUg
PyBlLT5kb2N1bWVudCgpIDogMDsKKyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuOwogCiAg
ICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBmcmFnbWVudCA9IChSYW5nZTo6Y3JlYXRlKGRvYykpLT5jcmVhdGVDb250ZXh0dWFsRnJh
Z21lbnQobWFya3VwLCBleGNlcHRpb24pOwogCiAgICAgaWYgKG1fZWxlbWVudC0+aGFzQ2hpbGRO
b2RlcygpKQogICAgICAgICBtX2VsZW1lbnQtPmluc2VydEJlZm9yZShmcmFnbWVudCwgbV9lbGVt
ZW50LT5maXJzdENoaWxkKCksIGV4Y2VwdGlvbik7CkBAIC0xMTIwLDEwICsxMTI5LDE0IEBAIHZv
aWQgUVdlYkVsZW1lbnQ6OnByZXBlbmRPdXRzaWRlKGNvbnN0IFEKICAgICBpZiAoIW1fZWxlbWVu
dC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIVE1MRWxlbWVudCog
aHRtbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1fZWxlbWVudCk7Ci0gICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gaHRtbEVsZW1lbnQtPmRlcHJlY2F0
ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50
KiBlID0gbV9lbGVtZW50OworICAgIERvY3VtZW50KiBkb2MgPSBlID8gZS0+ZG9jdW1lbnQoKSA6
IDA7CisgICAgaWYgKCFkb2MpCisgICAgICAgIHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUg
ZXhjZXB0aW9uID0gMDsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAo
UmFuZ2U6OmNyZWF0ZShkb2MpKS0+Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCwgZXhj
ZXB0aW9uKTsKKwogICAgIG1fZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5pbnNlcnRCZWZvcmUoZnJh
Z21lbnQsIG1fZWxlbWVudCwgZXhjZXB0aW9uKTsKIH0KIApAQCAtMTE3MCwxMCArMTE4MywxNCBA
QCB2b2lkIFFXZWJFbGVtZW50OjphcHBlbmRPdXRzaWRlKGNvbnN0IFFTCiAgICAgaWYgKCFtX2Vs
ZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTEVsZW1l
bnQqIGh0bWxFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihtX2VsZW1lbnQpOwot
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGh0bWxFbGVtZW50LT5kZXBy
ZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCk7CisgICAgV2ViQ29yZTo6RWxl
bWVudCogZSA9IG1fZWxlbWVudDsKKyAgICBEb2N1bWVudCogZG9jID0gZSA/IGUtPmRvY3VtZW50
KCkgOiAwOworICAgIGlmICghZG9jKQorICAgICAgICByZXR1cm47CiAKICAgICBFeGNlcHRpb25D
b2RlIGV4Y2VwdGlvbiA9IDA7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gKFJhbmdlOjpjcmVhdGUoZG9jKSktPmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXAs
IGV4Y2VwdGlvbik7CisKICAgICBpZiAoIW1fZWxlbWVudC0+bmV4dFNpYmxpbmcoKSkKICAgICAg
ICAgbV9lbGVtZW50LT5wYXJlbnROb2RlKCktPmFwcGVuZENoaWxkKGZyYWdtZW50LCBleGNlcHRp
b24pOwogICAgIGVsc2UKQEAgLTEzMTcsOCArMTMzNCwxMyBAQCB2b2lkIFFXZWJFbGVtZW50Ojpl
bmNsb3NlQ29udGVudHNXaXRoKGNvCiAgICAgaWYgKCFtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihtX2VsZW1lbnQpOwotICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IGh0bWxFbGVtZW50LT5kZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVh
bEZyYWdtZW50KG1hcmt1cCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogZSA9IG1fZWxlbWVudDsK
KyAgICBEb2N1bWVudCogZG9jID0gZSA/IGUtPmRvY3VtZW50KCkgOiAwOworICAgIGlmICghZG9j
KQorICAgICAgICByZXR1cm47CisKKyAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbiA9IDA7Cisg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gKFJhbmdlOjpjcmVhdGUoZG9j
KSktPmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXAsIGV4Y2VwdGlvbik7CiAKICAgICBp
ZiAoIWZyYWdtZW50IHx8ICFmcmFnbWVudC0+Zmlyc3RDaGlsZCgpKQogICAgICAgICByZXR1cm47
CkBAIC0xMzI4LDggKzEzNTAsNiBAQCB2b2lkIFFXZWJFbGVtZW50OjplbmNsb3NlQ29udGVudHNX
aXRoKGNvCiAgICAgaWYgKCFpbnNlcnRpb25Qb2ludCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
RXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOwotCiAgICAgLy8gcmVwYXJlbnQgY2hpbGRyZW4K
ICAgICBmb3IgKFJlZlB0cjxOb2RlPiBjaGlsZCA9IG1fZWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBj
aGlsZDspIHsKICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KTsKQEAgLTEzOTIsOCArMTQxMiwxMyBAQCB2b2lkIFFXZWJFbGVtZW50OjplbmNsb3NlV2l0aChj
b25zdCBRU3RyCiAgICAgaWYgKCFtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnQqPihtX2VsZW1lbnQpOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IGh0bWxFbGVtZW50LT5kZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG1h
cmt1cCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogZSA9IG1fZWxlbWVudDsKKyAgICBEb2N1bWVu
dCogZG9jID0gZSA/IGUtPmRvY3VtZW50KCkgOiAwOworICAgIGlmICghZG9jKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbiA9IDA7CisgICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gKFJhbmdlOjpjcmVhdGUoZG9jKSktPmNyZWF0ZUNv
bnRleHR1YWxGcmFnbWVudChtYXJrdXAsIGV4Y2VwdGlvbik7CiAKICAgICBpZiAoIWZyYWdtZW50
IHx8ICFmcmFnbWVudC0+Zmlyc3RDaGlsZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDEwLDcg
KzE0MzUsNiBAQCB2b2lkIFFXZWJFbGVtZW50OjplbmNsb3NlV2l0aChjb25zdCBRU3RyCiAgICAg
Tm9kZSogcGFyZW50ID0gbV9lbGVtZW50LT5wYXJlbnROb2RlKCk7CiAgICAgTm9kZSogc2libGlu
Z05vZGUgPSBtX2VsZW1lbnQtPm5leHRTaWJsaW5nKCk7CiAKLSAgICBFeGNlcHRpb25Db2RlIGV4
Y2VwdGlvbiA9IDA7CiAgICAgaW5zZXJ0aW9uUG9pbnQtPmFwcGVuZENoaWxkKG1fZWxlbWVudCwg
ZXhjZXB0aW9uKTsKIAogICAgIGlmICghc2libGluZ05vZGUpCg==
</data>
<flag name="commit-queue"
          id="101527"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105438</attachid>
            <date>2011-08-27 08:34:12 -0700</date>
            <delta_ts>2011-08-29 02:12:37 -0700</delta_ts>
            <desc>Update patch with trimmed down createContextFragment function</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>17417</size>
            <attacher name="Kaustubh Atrawalkar">kaustubh.ra</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzOTM3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDgtMjcgIEthdXN0dWJo
IEF0cmF3YWxrYXIgIDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgTG9naWMgZnJv
bSBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBtb3ZlZCBp
bnRvCisgICAgICAgIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgZnVuY3Rpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA1NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cy4gQ29kZSByZWZhY3RvcmluZy4KKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVEb2N1bWVudEZyYWdtZW50RnJvbUVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCk6CisgICAgICAgICogZG9tL1Jh
bmdlLmg6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNw
cDoKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50Lmg6CisKIDIwMTEtMDgtMjcgIEphcnJlZCBO
aWNob2xscyAgPGphcnJlZEBzZW5jaGEuY29tPgogCiAgICAgICAgIFtRdF0gTmVlZCBzcGluLWJ1
dHRvbiBpbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24g
OTM5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0MCw0OCArMTQwLDYgQEAgREVGSU5FX1ZJUlRVQUxfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKAogREVGSU5FX1ZJUlRVQUxfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKEVsZW1lbnQsIGZv
Y3VzKTsKIERFRklORV9WSVJUVUFMX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihFbGVtZW50LCBs
b2FkKTsKIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFbGVtZW50OjpkZXByZWNhdGVk
Q3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwLCBGcmFnbWVudFNj
cmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKLXsKLSAgICBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVudEZyYWdt
ZW50KCk7Ci0KLSAgICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAg
ZnJhZ21lbnQtPnBhcnNlSFRNTChtYXJrdXAsIHRoaXMsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwot
ICAgIGVsc2UgewotICAgICAgICBpZiAoIWZyYWdtZW50LT5wYXJzZVhNTChtYXJrdXAsIHRoaXMs
IHNjcmlwdGluZ1Blcm1pc3Npb24pKQotICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBw
cm9wYWdhdGUgYSBzeW50YXggZXJyb3IgZXhjZXB0aW9uIG91dCBoZXJlLgotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gRXhjZXB0aW9ucyBhcmUgaWdub3JlZCBiZWNhdXNl
IG5vbmUgb3VnaHQgdG8gaGFwcGVuIGhlcmUuCi0gICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkRXhj
ZXB0aW9uQ29kZTsKLQotICAgIC8vIFdlIG5lZWQgdG8gcG9wIDxodG1sPiBhbmQgPGJvZHk+IGVs
ZW1lbnRzIGFuZCByZW1vdmUgPGhlYWQ+IHRvCi0gICAgLy8gYWNjb21tb2RhdGUgZm9sa3MgcGFz
c2luZyBjb21wbGV0ZSBIVE1MIGRvY3VtZW50cyB0byBtYWtlIHRoZQotICAgIC8vIGNoaWxkIG9m
IGFuIGVsZW1lbnQuCi0KLSAgICBSZWZQdHI8Tm9kZT4gbmV4dE5vZGU7Ci0gICAgZm9yIChSZWZQ
dHI8Tm9kZT4gbm9kZSA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBuZXh0
Tm9kZSkgewotICAgICAgICBuZXh0Tm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoaGVhZFRh
ZykgfHwgbm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkgewotICAgICAgICAgICAgSFRNTEVsZW1l
bnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KG5vZGUuZ2V0KCkpOwotICAgICAgICAgICAgTm9k
ZSogZmlyc3RDaGlsZCA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIGlmIChm
aXJzdENoaWxkKQotICAgICAgICAgICAgICAgIG5leHROb2RlID0gZmlyc3RDaGlsZDsKLSAgICAg
ICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0Q2hpbGQ7Ci0gICAgICAgICAgICBmb3IgKFJlZlB0cjxO
b2RlPiBjaGlsZCA9IGZpcnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IG5leHRDaGlsZCkgewotICAg
ICAgICAgICAgICAgIG5leHRDaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwotICAgICAgICAg
ICAgICAgIGVsZW1lbnQtPnJlbW92ZUNoaWxkKGNoaWxkLmdldCgpLCBpZ25vcmVkRXhjZXB0aW9u
Q29kZSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0g
ICAgICAgICAgICAgICAgZnJhZ21lbnQtPmluc2VydEJlZm9yZShjaGlsZCwgZWxlbWVudCwgaWdu
b3JlZEV4Y2VwdGlvbkNvZGUpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghaWdub3JlZEV4Y2Vw
dGlvbkNvZGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnJhZ21lbnQtPnJlbW92ZUNo
aWxkKGVsZW1lbnQsIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgIEFTU0VSVCgh
aWdub3JlZEV4Y2VwdGlvbkNvZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmcmFn
bWVudC5yZWxlYXNlKCk7Ci19Ci0KIFBhc3NSZWZQdHI8Tm9kZT4gRWxlbWVudDo6Y2xvbmVOb2Rl
KGJvb2wgZGVlcCkKIHsKICAgICByZXR1cm4gZGVlcCA/IGNsb25lRWxlbWVudFdpdGhDaGlsZHJl
bigpIDogY2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmgJKHJldmlzaW9uIDkzOTM3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTA4LDggKzEwOCw2IEBAIHB1YmxpYzoKICAgICBERUZJTkVfQVRUUklC
VVRFX0VWRU5UX0xJU1RFTkVSKHdlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UpOwogI2VuZGlmCiAKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZGVwcmVjYXRlZENyZWF0ZUNv
bnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Np
b24gPSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOwotCiAgICAgYm9vbCBoYXNBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZ2V0
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAgICB2b2lkIHNldEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiA5MzkzNykKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw3
IEBACiAgKiAoQykgMjAwMCBGcmVkZXJpayBIb2xsamVuIChmcmVkZXJpay5ob2xsamVuQGhpZy5u
bykKICAqIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgIChDKSAyMDExIE1vdG9yb2xh
IE1vYmlsaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0z
Miw2ICszMyw4IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1
ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJOb2RlV2l0aEluZGV4LmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgpAQCAtNTMsNiArNTYsNyBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAogI2lmbmRlZiBOREVCVUcKIHN0YXRpYyBXVEY6OlJlZkNvdW50ZWRM
ZWFrQ291bnRlciByYW5nZUNvdW50ZXIoIlJhbmdlIik7CkBAIC0xMDkzLDYgKzEwOTcsNDkgQEAg
U3RyaW5nIFJhbmdlOjp0ZXh0KCkgY29uc3QKICAgICByZXR1cm4gcGxhaW5UZXh0KHRoaXMpOwog
fQogCisKK3N0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZURvY3VtZW50
RnJhZ21lbnRGb3JOb2RlKGNvbnN0IFN0cmluZyYgbWFya3VwLCBOb2RlKiBlbGVtZW50KQorewor
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGVsZW1lbnQtPmRvY3VtZW50
KCktPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKworICAgIGlmIChlbGVtZW50LT5kb2N1bWVu
dCgpLT5pc0hUTUxEb2N1bWVudCgpKQorICAgICAgICBmcmFnbWVudC0+cGFyc2VIVE1MKG1hcmt1
cCwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGVsZW1lbnQpLCBGcmFnbWVudFNjcmlwdGluZ0FsbG93
ZWQpOworICAgIGVsc2UgeworICAgICAgICBpZiAoIWZyYWdtZW50LT5wYXJzZVhNTChtYXJrdXAs
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihlbGVtZW50KSwgRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2Vk
KSkKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvcGFnYXRlIGEgc3ludGF4IGVy
cm9yIGV4Y2VwdGlvbiBvdXQgaGVyZS4KKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIC8vIEV4Y2VwdGlvbnMgYXJlIGlnbm9yZWQgYmVjYXVzZSBub25lIG91Z2h0IHRvIGhhcHBl
biBoZXJlLgorICAgIEV4Y2VwdGlvbkNvZGUgaWdub3JlZEV4Y2VwdGlvbkNvZGU7CisKKyAgICAv
LyBXZSBuZWVkIHRvIHBvcCA8aHRtbD4gYW5kIDxib2R5PiBlbGVtZW50cyBhbmQgcmVtb3ZlIDxo
ZWFkPiB0bworICAgIC8vIGFjY29tbW9kYXRlIGZvbGtzIHBhc3NpbmcgY29tcGxldGUgSFRNTCBk
b2N1bWVudHMgdG8gbWFrZSB0aGUKKyAgICAvLyBjaGlsZCBvZiBhbiBlbGVtZW50LgorICAgIFJl
ZlB0cjxOb2RlPiBuZXh0Tm9kZTsKKyAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gZnJhZ21l
bnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5leHROb2RlKSB7CisgICAgICAgIG5leHRO
b2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUo
aHRtbFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShoZWFkVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1l
KGJvZHlUYWcpKSB7CisgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVs
ZW1lbnQobm9kZS5nZXQoKSk7CisgICAgICAgICAgICBOb2RlKiBmaXJzdENoaWxkID0gZWxlbWVu
dC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQpCisgICAgICAgICAg
ICAgICAgbmV4dE5vZGUgPSBmaXJzdENoaWxkOworICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5l
eHRDaGlsZDsKKyAgICAgICAgICAgIGZvciAoUmVmUHRyPE5vZGU+IGNoaWxkID0gZmlyc3RDaGls
ZDsgY2hpbGQ7IGNoaWxkID0gbmV4dENoaWxkKSB7CisgICAgICAgICAgICAgICAgbmV4dENoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgZWxlbWVudC0+cmVtb3Zl
Q2hpbGQoY2hpbGQuZ2V0KCksIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoIWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKKyAgICAgICAgICAgICAgICBmcmFnbWVu
dC0+aW5zZXJ0QmVmb3JlKGNoaWxkLCBlbGVtZW50LCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVkRXhjZXB0aW9uQ29kZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBmcmFnbWVudC0+cmVtb3ZlQ2hpbGQoZWxlbWVudCwgaWdub3JlZEV4
Y2VwdGlvbkNvZGUpOworICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVkRXhjZXB0aW9uQ29kZSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworfQor
CiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJh
Z21lbnQoY29uc3QgU3RyaW5nJiBtYXJrdXAsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewog
ICAgIGlmICghbV9zdGFydC5jb250YWluZXIoKSkgewpAQCAtMTEwNiwxMCArMTE1MywxNiBAQCBQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpjcmVhCiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAotICAgIC8vIExvZ2ljIGZyb20gZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxG
cmFnbWVudCBzaG91bGQganVzdCBiZSBtb3ZlZCBpbnRvCi0gICAgLy8gdGhpcyBmdW5jdGlvbi4g
IFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgc2VtYW50aWNzIGRvIG5vdCBtYWtlCi0g
ICAgLy8gc2Vuc2UgZm9yIHRoZSByZXN0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gdG8gdXNl
LgotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHRvSFRNTEVsZW1lbnQo
ZWxlbWVudCktPmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKKyAg
ICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KGVsZW1lbnQpOworICAg
IGlmIChodG1sRWxlbWVudC0+aWVGb3JiaWRzSW5zZXJ0SFRNTCgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmIChodG1sRWxlbWVudC0+aGFzTG9jYWxOYW1lKGNvbFRhZykgfHwgaHRtbEVs
ZW1lbnQtPmhhc0xvY2FsTmFtZShjb2xncm91cFRhZykgfHwgaHRtbEVsZW1lbnQtPmhhc0xvY2Fs
TmFtZShmcmFtZXNldFRhZykKKyAgICAgICAgfHwgaHRtbEVsZW1lbnQtPmhhc0xvY2FsTmFtZSho
ZWFkVGFnKSB8fCBodG1sRWxlbWVudC0+aGFzTG9jYWxOYW1lKHN0eWxlVGFnKSB8fCBodG1sRWxl
bWVudC0+aGFzTG9jYWxOYW1lKHRpdGxlVGFnKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVEb2N1bWVudEZyYWdtZW50
Rm9yTm9kZShtYXJrdXAsIGVsZW1lbnQpOworCiAgICAgaWYgKCFmcmFnbWVudCkgewogICAgICAg
ICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDkzOTM3KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBHb29nbGUg
SW5jLgogICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBQb3J0aW9ucyAgKEMp
IDIwMTEgTW90b3JvbGEgTW9iaWxpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4MiwxMiArNjgzLDggQEAgU3RyaW5nIGNyZWF0ZU1h
cmt1cChjb25zdCBSYW5nZSogcmFuZ2UsCiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5n
JiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNz
aW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCiB7Ci0gICAgLy8gV2UgdXNlIGEgZmFrZSBib2R5IGVs
ZW1lbnQgaGVyZSB0byB0cmljayB0aGUgSFRNTCBwYXJzZXIgdG8gdXNpbmcgdGhlCi0gICAgLy8g
SW5Cb2R5IGluc2VydGlvbiBtb2RlLiAgUmVhbGx5LCBhbGwgdGhpcyBjb2RlIGlzIHdyb25nIGFu
ZCBuZWVkIHRvIGJlCi0gICAgLy8gY2hhbmdlZCBub3QgdG8gdXNlIGRlcHJlY2F0ZWRDcmVhdGVD
b250ZXh0dWFsRnJhZ21lbnQuCi0gICAgUmVmUHRyPEhUTUxCb2R5RWxlbWVudD4gZmFrZUJvZHkg
PSBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7Ci0gICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIG5vdCB1c2UgZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudAotICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGZha2VCb2R5LT5kZXByZWNhdGVkQ3Jl
YXRlQ29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCwgc2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gKFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQpKS0+Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50
KG1hcmt1cCwgZWMpOwogCiAgICAgaWYgKGZyYWdtZW50ICYmICFiYXNlVVJMLmlzRW1wdHkoKSAm
JiBiYXNlVVJMICE9IGJsYW5rVVJMKCkgJiYgYmFzZVVSTCAhPSBkb2N1bWVudC0+YmFzZVVSTCgp
KQogICAgICAgICBjb21wbGV0ZVVSTHMoZnJhZ21lbnQuZ2V0KCksIGJhc2VVUkwpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9uIDkzOTM3KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSwyMCAr
MjkxLDYgQEAgU3RyaW5nIEhUTUxFbGVtZW50OjpvdXRlckhUTUwoKSBjb25zdAogICAgIHJldHVy
biBjcmVhdGVNYXJrdXAodGhpcyk7CiB9CiAKLS8vIEZJWE1FOiBUaGlzIGxvZ2ljIHNob3VsZCBt
b3ZlIGludG8gUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudAotUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFn
bWVudChjb25zdCBTdHJpbmcmIG1hcmt1cCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNj
cmlwdGluZ1Blcm1pc3Npb24pCi17Ci0gICAgLy8gVGhlIGZvbGxvd2luZyBpcyBpbiBhY2NvcmRh
bmNlIHdpdGggdGhlIGRlZmluaXRpb24gYXMgdXNlZCBieSBJRS4KLSAgICBpZiAoaWVGb3JiaWRz
SW5zZXJ0SFRNTCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChoYXNMb2NhbE5hbWUo
Y29sVGFnKSB8fCBoYXNMb2NhbE5hbWUoY29sZ3JvdXBUYWcpIHx8IGhhc0xvY2FsTmFtZShmcmFt
ZXNldFRhZykKLSAgICAgICAgfHwgaGFzTG9jYWxOYW1lKGhlYWRUYWcpIHx8IGhhc0xvY2FsTmFt
ZShzdHlsZVRhZykgfHwgaGFzTG9jYWxOYW1lKHRpdGxlVGFnKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVu
dChtYXJrdXAsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wg
aGFzT25lQ2hpbGQoQ29udGFpbmVyTm9kZSogbm9kZSkKIHsKICAgICBOb2RlKiBmaXJzdENoaWxk
ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAko
cmV2aXNpb24gOTM5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDYgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGlubmVy
SFRNTCgpIGNvbnN0OwogICAgIFN0cmluZyBvdXRlckhUTUwoKSBjb25zdDsKLSAgICAvLyBkZXBy
ZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IGxvZ2ljIHNob3VsZCBiZSBtb3ZlZCBpbnRv
IFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5n
JiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2Vk
KTsKICAgICB2b2lkIHNldElubmVySFRNTChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7
CiAgICAgdm9pZCBzZXRPdXRlckhUTUwoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZvaWQgc2V0SW5uZXJUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MzkzNykKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDgtMjcgIEthdXN0
dWJoIEF0cmF3YWxrYXIgIDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgTG9naWMg
ZnJvbSBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBtb3Zl
ZCBpbnRvCisgICAgICAgIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgZnVuY3Rpb24u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQXBpL3F3
ZWJlbGVtZW50LmNwcDoKKyAgICAgICAgKFFXZWJFbGVtZW50OjphcHBlbmRJbnNpZGUpOgorICAg
ICAgICAoUVdlYkVsZW1lbnQ6OnByZXBlbmRJbnNpZGUpOgorICAgICAgICAoUVdlYkVsZW1lbnQ6
OnByZXBlbmRPdXRzaWRlKToKKyAgICAgICAgKFFXZWJFbGVtZW50OjphcHBlbmRPdXRzaWRlKToK
KyAgICAgICAgKFFXZWJFbGVtZW50OjplbmNsb3NlQ29udGVudHNXaXRoKToKKyAgICAgICAgKFFX
ZWJFbGVtZW50OjplbmNsb3NlV2l0aCk6CisKIDIwMTEtMDgtMjUgIEFkZW1hciBkZSBTb3V6YSBS
ZWlzIEpyLiAgPGFkZW1hci5yZWlzQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCBRdFdlYktpdC5wcm8gZml4IGZvciB3aGVuIGJ1aWxkaW5nIGluc2lkZSBRdApJbmRleDogU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAkocmV2aXNpb24gOTM5MzcpCisrKyBTb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAgICBQb3J0aW9ucyAgKEMpIDIwMTEgTW90b3JvbGEgTW9i
aWxpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ1LDYg
KzQ2LDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2VuZGlmCiAjaW5jbHVkZSAi
Tm9kZUxpc3QuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgi
CiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlICJTdGF0aWNOb2RlTGlzdC5oIgpA
QCAtMTAyMiwxMCArMTAyNCwxNCBAQCB2b2lkIFFXZWJFbGVtZW50OjphcHBlbmRJbnNpZGUoY29u
c3QgUVN0CiAgICAgaWYgKCFtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnQqPihtX2VsZW1lbnQpOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IGh0bWxFbGVtZW50LT5FbGVtZW50OjpkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdt
ZW50KG1hcmt1cCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogZSA9IG1fZWxlbWVudDsKKyAgICBE
b2N1bWVudCogZG9jID0gZSA/IGUtPmRvY3VtZW50KCkgOiAwOworICAgIGlmICghZG9jKQorICAg
ICAgICByZXR1cm47CiAKICAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbiA9IDA7CisgICAgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gKFJhbmdlOjpjcmVhdGUoZG9jKSktPmNy
ZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXAsIGV4Y2VwdGlvbik7CisKICAgICBtX2VsZW1l
bnQtPmFwcGVuZENoaWxkKGZyYWdtZW50LCBleGNlcHRpb24pOwogfQogCkBAIC0xMDY4LDEwICsx
MDc0LDEzIEBAIHZvaWQgUVdlYkVsZW1lbnQ6OnByZXBlbmRJbnNpZGUoY29uc3QgUVMKICAgICBp
ZiAoIW1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBI
VE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1fZWxl
bWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gaHRtbEVsZW1l
bnQtPmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKKyAgICBXZWJD
b3JlOjpFbGVtZW50KiBlID0gbV9lbGVtZW50OworICAgIERvY3VtZW50KiBkb2MgPSBlID8gZS0+
ZG9jdW1lbnQoKSA6IDA7CisgICAgaWYgKCFkb2MpCisgICAgICAgIHJldHVybjsKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSAoUmFuZ2U6OmNyZWF0ZShkb2MpKS0+Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50
KG1hcmt1cCwgZXhjZXB0aW9uKTsKIAogICAgIGlmIChtX2VsZW1lbnQtPmhhc0NoaWxkTm9kZXMo
KSkKICAgICAgICAgbV9lbGVtZW50LT5pbnNlcnRCZWZvcmUoZnJhZ21lbnQsIG1fZWxlbWVudC0+
Zmlyc3RDaGlsZCgpLCBleGNlcHRpb24pOwpAQCAtMTEyMCwxMCArMTEyOSwxNCBAQCB2b2lkIFFX
ZWJFbGVtZW50OjpwcmVwZW5kT3V0c2lkZShjb25zdCBRCiAgICAgaWYgKCFtX2VsZW1lbnQtPmlz
SFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTEVsZW1lbnQqIGh0bWxF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihtX2VsZW1lbnQpOwotICAgIFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGh0bWxFbGVtZW50LT5kZXByZWNhdGVkQ3Jl
YXRlQ29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogZSA9
IG1fZWxlbWVudDsKKyAgICBEb2N1bWVudCogZG9jID0gZSA/IGUtPmRvY3VtZW50KCkgOiAwOwor
ICAgIGlmICghZG9jKQorICAgICAgICByZXR1cm47CiAKICAgICBFeGNlcHRpb25Db2RlIGV4Y2Vw
dGlvbiA9IDA7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gKFJhbmdl
OjpjcmVhdGUoZG9jKSktPmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXAsIGV4Y2VwdGlv
bik7CisKICAgICBtX2VsZW1lbnQtPnBhcmVudE5vZGUoKS0+aW5zZXJ0QmVmb3JlKGZyYWdtZW50
LCBtX2VsZW1lbnQsIGV4Y2VwdGlvbik7CiB9CiAKQEAgLTExNzAsMTAgKzExODMsMTQgQEAgdm9p
ZCBRV2ViRWxlbWVudDo6YXBwZW5kT3V0c2lkZShjb25zdCBRUwogICAgIGlmICghbV9lbGVtZW50
LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxFbGVtZW50KiBo
dG1sRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9lbGVtZW50KTsKLSAgICBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBodG1sRWxlbWVudC0+ZGVwcmVjYXRl
ZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIFdlYkNvcmU6OkVsZW1lbnQq
IGUgPSBtX2VsZW1lbnQ7CisgICAgRG9jdW1lbnQqIGRvYyA9IGUgPyBlLT5kb2N1bWVudCgpIDog
MDsKKyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuOwogCiAgICAgRXhjZXB0aW9uQ29kZSBl
eGNlcHRpb24gPSAwOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IChS
YW5nZTo6Y3JlYXRlKGRvYykpLT5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwLCBleGNl
cHRpb24pOworCiAgICAgaWYgKCFtX2VsZW1lbnQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIG1f
ZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5hcHBlbmRDaGlsZChmcmFnbWVudCwgZXhjZXB0aW9uKTsK
ICAgICBlbHNlCkBAIC0xMzE3LDggKzEzMzQsMTMgQEAgdm9pZCBRV2ViRWxlbWVudDo6ZW5jbG9z
ZUNvbnRlbnRzV2l0aChjbwogICAgIGlmICghbV9lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50Kj4obV9lbGVtZW50KTsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZnJhZ21lbnQgPSBodG1sRWxlbWVudC0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFn
bWVudChtYXJrdXApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGUgPSBtX2VsZW1lbnQ7CisgICAg
RG9jdW1lbnQqIGRvYyA9IGUgPyBlLT5kb2N1bWVudCgpIDogMDsKKyAgICBpZiAoIWRvYykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOworICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IChSYW5nZTo6Y3JlYXRlKGRvYykpLT5j
cmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwLCBleGNlcHRpb24pOwogCiAgICAgaWYgKCFm
cmFnbWVudCB8fCAhZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTMyOCw4ICsxMzUwLDYgQEAgdm9pZCBRV2ViRWxlbWVudDo6ZW5jbG9zZUNvbnRlbnRzV2l0aChj
bwogICAgIGlmICghaW5zZXJ0aW9uUG9pbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEV4Y2Vw
dGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKLQogICAgIC8vIHJlcGFyZW50IGNoaWxkcmVuCiAgICAg
Zm9yIChSZWZQdHI8Tm9kZT4gY2hpbGQgPSBtX2VsZW1lbnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
KSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CkBA
IC0xMzkyLDggKzE0MTIsMTMgQEAgdm9pZCBRV2ViRWxlbWVudDo6ZW5jbG9zZVdpdGgoY29uc3Qg
UVN0cgogICAgIGlmICghbV9lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50Kj4obV9lbGVtZW50KTsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBodG1sRWxlbWVudC0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXAp
OworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGUgPSBtX2VsZW1lbnQ7CisgICAgRG9jdW1lbnQqIGRv
YyA9IGUgPyBlLT5kb2N1bWVudCgpIDogMDsKKyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJu
OworCisgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOworICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBmcmFnbWVudCA9IChSYW5nZTo6Y3JlYXRlKGRvYykpLT5jcmVhdGVDb250ZXh0
dWFsRnJhZ21lbnQobWFya3VwLCBleGNlcHRpb24pOwogCiAgICAgaWYgKCFmcmFnbWVudCB8fCAh
ZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQxMCw3ICsxNDM1
LDYgQEAgdm9pZCBRV2ViRWxlbWVudDo6ZW5jbG9zZVdpdGgoY29uc3QgUVN0cgogICAgIE5vZGUq
IHBhcmVudCA9IG1fZWxlbWVudC0+cGFyZW50Tm9kZSgpOwogICAgIE5vZGUqIHNpYmxpbmdOb2Rl
ID0gbV9lbGVtZW50LT5uZXh0U2libGluZygpOwogCi0gICAgRXhjZXB0aW9uQ29kZSBleGNlcHRp
b24gPSAwOwogICAgIGluc2VydGlvblBvaW50LT5hcHBlbmRDaGlsZChtX2VsZW1lbnQsIGV4Y2Vw
dGlvbik7CiAKICAgICBpZiAoIXNpYmxpbmdOb2RlKQo=
</data>
<flag name="commit-queue"
          id="101591"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105477</attachid>
            <date>2011-08-29 02:12:37 -0700</date>
            <delta_ts>2011-09-02 08:47:23 -0700</delta_ts>
            <desc>Respecting  FragmentScriptingPermission for failing chrome layout tests.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>18599</size>
            <attacher name="Kaustubh Atrawalkar">kaustubh.ra</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzOTYyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDgtMjkgIEthdXN0dWJo
IEF0cmF3YWxrYXIgIDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgTG9naWMgZnJv
bSBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBtb3ZlZCBp
bnRvCisgICAgICAgIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgZnVuY3Rpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA1NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cy4gQ29kZSBSZWZhY3RvcmluZy4KKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVEb2N1bWVudEZyYWdtZW50Rm9yTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KToKKyAgICAgICAgKiBkb20vUmFuZ2Uu
aDoKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVGcmFnbWVudEZyb21NYXJrdXApOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgor
ICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoKKwogMjAxMS0wOC0yNiAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBE
ZWJ1Z2dlci5zZXRCcmVha3BvaW50QnlVcmwgc2hvdWxkIHJldHVybiBlcnJvciB3aGVuIHNldHRp
bmcgYnJlYWtwb2ludCBvbiB0aGUgc2FtZSBsb2NhdGlvbiB0d2ljZS4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAJKHJldmlzaW9uIDkzOTU0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNDggKzE0MCw2IEBAIERFRklORV9WSVJUVUFM
X0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUigKIERFRklORV9WSVJUVUFMX0FUVFJJQlVURV9FVkVO
VF9MSVNURU5FUihFbGVtZW50LCBmb2N1cyk7CiBERUZJTkVfVklSVFVBTF9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIoRWxlbWVudCwgbG9hZCk7CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJp
bmcmIG1hcmt1cCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Np
b24pCi17Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnQo
KS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotCi0gICAgaWYgKGRvY3VtZW50KCktPmlzSFRN
TERvY3VtZW50KCkpCi0gICAgICAgIGZyYWdtZW50LT5wYXJzZUhUTUwobWFya3VwLCB0aGlzLCBz
Y3JpcHRpbmdQZXJtaXNzaW9uKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFmcmFnbWVudC0+
cGFyc2VYTUwobWFya3VwLCB0aGlzLCBzY3JpcHRpbmdQZXJtaXNzaW9uKSkKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvcGFnYXRlIGEgc3ludGF4IGVycm9yIGV4Y2VwdGlvbiBv
dXQgaGVyZS4KLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIEV4Y2VwdGlv
bnMgYXJlIGlnbm9yZWQgYmVjYXVzZSBub25lIG91Z2h0IHRvIGhhcHBlbiBoZXJlLgotICAgIEV4
Y2VwdGlvbkNvZGUgaWdub3JlZEV4Y2VwdGlvbkNvZGU7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIHBv
cCA8aHRtbD4gYW5kIDxib2R5PiBlbGVtZW50cyBhbmQgcmVtb3ZlIDxoZWFkPiB0bwotICAgIC8v
IGFjY29tbW9kYXRlIGZvbGtzIHBhc3NpbmcgY29tcGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFr
ZSB0aGUKLSAgICAvLyBjaGlsZCBvZiBhbiBlbGVtZW50LgotCi0gICAgUmVmUHRyPE5vZGU+IG5l
eHROb2RlOwotICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBmcmFnbWVudC0+Zmlyc3RDaGls
ZCgpOyBub2RlOyBub2RlID0gbmV4dE5vZGUpIHsKLSAgICAgICAgbmV4dE5vZGUgPSBub2RlLT5u
ZXh0U2libGluZygpOwotICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBu
b2RlLT5oYXNUYWdOYW1lKGhlYWRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsK
LSAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlLmdl
dCgpKTsKLSAgICAgICAgICAgIE5vZGUqIGZpcnN0Q2hpbGQgPSBlbGVtZW50LT5maXJzdENoaWxk
KCk7Ci0gICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAgICBuZXh0Tm9k
ZSA9IGZpcnN0Q2hpbGQ7Ci0gICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dENoaWxkOwotICAg
ICAgICAgICAgZm9yIChSZWZQdHI8Tm9kZT4gY2hpbGQgPSBmaXJzdENoaWxkOyBjaGlsZDsgY2hp
bGQgPSBuZXh0Q2hpbGQpIHsKLSAgICAgICAgICAgICAgICBuZXh0Q2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICBlbGVtZW50LT5yZW1vdmVDaGlsZChjaGlsZC5n
ZXQoKSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghaWdu
b3JlZEV4Y2VwdGlvbkNvZGUpOwotICAgICAgICAgICAgICAgIGZyYWdtZW50LT5pbnNlcnRCZWZv
cmUoY2hpbGQsIGVsZW1lbnQsIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoIWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGZyYWdtZW50LT5yZW1vdmVDaGlsZChlbGVtZW50LCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7
Ci0gICAgICAgICAgICBBU1NFUlQoIWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwotfQotCiBQYXNzUmVmUHRyPE5v
ZGU+IEVsZW1lbnQ6OmNsb25lTm9kZShib29sIGRlZXApCiB7CiAgICAgcmV0dXJuIGRlZXAgPyBj
bG9uZUVsZW1lbnRXaXRoQ2hpbGRyZW4oKSA6IGNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbigp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiA5Mzk1NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw4ICsxMDgsNiBAQCBwdWJs
aWM6CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih3ZWJraXRmdWxsc2NyZWVu
Y2hhbmdlKTsKICNlbmRpZgogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgRnJh
Z21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKLQog
ICAgIGJvb2wgaGFzQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGdldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29u
c3Q7CiAgICAgdm9pZCBzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9SYW5nZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNw
cAkocmV2aXNpb24gOTM5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICogKEMpIDIwMDAgRnJlZGVyaWsgSG9sbGplbiAo
ZnJlZGVyaWsuaG9sbGplbkBoaWcubm8pCiAgKiAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBv
c3QuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRp
b25zICAoQykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNiArMzMsOCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZVdpdGhJbmRl
eC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24u
aCIKQEAgLTUzLDYgKzU2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKICNpZm5kZWYgTkRFQlVHCiBz
dGF0aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIgcmFuZ2VDb3VudGVyKCJSYW5nZSIpOwpA
QCAtMTA5Myw3ICsxMDk3LDUwIEBAIFN0cmluZyBSYW5nZTo6dGV4dCgpIGNvbnN0CiAgICAgcmV0
dXJuIHBsYWluVGV4dCh0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBS
YW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwLCBFeGNl
cHRpb25Db2RlJiBlYykgY29uc3QKKworc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gY3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvck5vZGUoY29uc3QgU3RyaW5nJiBtYXJrdXAsIE5v
ZGUqIGVsZW1lbnQsICBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlz
c2lvbikKK3sKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBlbGVtZW50
LT5kb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisKKyAgICBpZiAoZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgZnJhZ21lbnQtPnBhcnNl
SFRNTChtYXJrdXAsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihlbGVtZW50KSwgc2NyaXB0aW5nUGVy
bWlzc2lvbik7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghZnJhZ21lbnQtPnBhcnNlWE1MKG1h
cmt1cCwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGVsZW1lbnQpLCBzY3JpcHRpbmdQZXJtaXNzaW9u
KSkKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvcGFnYXRlIGEgc3ludGF4IGVy
cm9yIGV4Y2VwdGlvbiBvdXQgaGVyZS4KKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIC8vIEV4Y2VwdGlvbnMgYXJlIGlnbm9yZWQgYmVjYXVzZSBub25lIG91Z2h0IHRvIGhhcHBl
biBoZXJlLgorICAgIEV4Y2VwdGlvbkNvZGUgaWdub3JlZEV4Y2VwdGlvbkNvZGU7CisKKyAgICAv
LyBXZSBuZWVkIHRvIHBvcCA8aHRtbD4gYW5kIDxib2R5PiBlbGVtZW50cyBhbmQgcmVtb3ZlIDxo
ZWFkPiB0bworICAgIC8vIGFjY29tbW9kYXRlIGZvbGtzIHBhc3NpbmcgY29tcGxldGUgSFRNTCBk
b2N1bWVudHMgdG8gbWFrZSB0aGUKKyAgICAvLyBjaGlsZCBvZiBhbiBlbGVtZW50LgorICAgIFJl
ZlB0cjxOb2RlPiBuZXh0Tm9kZTsKKyAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gZnJhZ21l
bnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5leHROb2RlKSB7CisgICAgICAgIG5leHRO
b2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUo
aHRtbFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShoZWFkVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1l
KGJvZHlUYWcpKSB7CisgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVs
ZW1lbnQobm9kZS5nZXQoKSk7CisgICAgICAgICAgICBOb2RlKiBmaXJzdENoaWxkID0gZWxlbWVu
dC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQpCisgICAgICAgICAg
ICAgICAgbmV4dE5vZGUgPSBmaXJzdENoaWxkOworICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5l
eHRDaGlsZDsKKyAgICAgICAgICAgIGZvciAoUmVmUHRyPE5vZGU+IGNoaWxkID0gZmlyc3RDaGls
ZDsgY2hpbGQ7IGNoaWxkID0gbmV4dENoaWxkKSB7CisgICAgICAgICAgICAgICAgbmV4dENoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgZWxlbWVudC0+cmVtb3Zl
Q2hpbGQoY2hpbGQuZ2V0KCksIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoIWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKKyAgICAgICAgICAgICAgICBmcmFnbWVu
dC0+aW5zZXJ0QmVmb3JlKGNoaWxkLCBlbGVtZW50LCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVkRXhjZXB0aW9uQ29kZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBmcmFnbWVudC0+cmVtb3ZlQ2hpbGQoZWxlbWVudCwgaWdub3JlZEV4
Y2VwdGlvbkNvZGUpOworICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVkRXhjZXB0aW9uQ29kZSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworfQor
CitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJh
Z21lbnQoY29uc3QgU3RyaW5nJiBtYXJrdXAsIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFnbWVudFNj
cmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikgY29uc3QKIHsKICAgICBpZiAo
IW1fc3RhcnQuY29udGFpbmVyKCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
QEAgLTExMDYsMTAgKzExNTMsMTYgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5n
ZTo6Y3JlYQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAvLyBMb2dpYyBmcm9tIGRl
cHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgc2hvdWxkIGp1c3QgYmUgbW92ZWQgaW50
bwotICAgIC8vIHRoaXMgZnVuY3Rpb24uICBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50
IHNlbWFudGljcyBkbyBub3QgbWFrZQotICAgIC8vIHNlbnNlIGZvciB0aGUgcmVzdCBvZiB0aGUg
RE9NIGltcGxlbWVudGF0aW9uIHRvIHVzZS4KLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5kZXByZWNhdGVkQ3JlYXRlQ29udGV4
dHVhbEZyYWdtZW50KG1hcmt1cCk7CisgICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gdG9I
VE1MRWxlbWVudChlbGVtZW50KTsKKyAgICBpZiAoaHRtbEVsZW1lbnQtPmllRm9yYmlkc0luc2Vy
dEhUTUwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaHRtbEVsZW1lbnQtPmhhc0xv
Y2FsTmFtZShjb2xUYWcpIHx8IGh0bWxFbGVtZW50LT5oYXNMb2NhbE5hbWUoY29sZ3JvdXBUYWcp
IHx8IGh0bWxFbGVtZW50LT5oYXNMb2NhbE5hbWUoZnJhbWVzZXRUYWcpCisgICAgICAgIHx8IGh0
bWxFbGVtZW50LT5oYXNMb2NhbE5hbWUoaGVhZFRhZykgfHwgaHRtbEVsZW1lbnQtPmhhc0xvY2Fs
TmFtZShzdHlsZVRhZykgfHwgaHRtbEVsZW1lbnQtPmhhc0xvY2FsTmFtZSh0aXRsZVRhZykpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gY3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvck5vZGUobWFya3VwLCBlbGVtZW50LCBzY3JpcHRp
bmdQZXJtaXNzaW9uKTsKKwogICAgIGlmICghZnJhZ21lbnQpIHsKICAgICAgICAgZWMgPSBOT1Rf
U1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAkocmV2
aXNpb24gOTM5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVy
LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRnJhZ21lbnRTY3JpcHRpbmdQ
ZXJtaXNzaW9uLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNp
bmNsdWRlICJSYW5nZUJvdW5kYXJ5UG9pbnQuaCIKQEAgLTg4LDcgKzg5LDcgQEAgcHVibGljOgog
ICAgIFN0cmluZyB0b0hUTUwoKSBjb25zdDsKICAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OwogCi0g
ICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQo
Y29uc3QgU3RyaW5nJiBodG1sLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5n
JiBodG1sLCBFeGNlcHRpb25Db2RlJiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJh
Z21lbnRTY3JpcHRpbmdBbGxvd2VkKSBjb25zdDsKIAogICAgIHZvaWQgZGV0YWNoKEV4Y2VwdGlv
bkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBjbG9uZVJhbmdlKEV4Y2VwdGlvbkNvZGUm
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDkzOTU0
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBHb29nbGUgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBT
LkwuCisgKiBQb3J0aW9ucyAgKEMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHkuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4MiwxMiArNjgz
LDggQEAgU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsCiAKIFBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgRnJh
Z21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCiB7Ci0gICAgLy8g
V2UgdXNlIGEgZmFrZSBib2R5IGVsZW1lbnQgaGVyZSB0byB0cmljayB0aGUgSFRNTCBwYXJzZXIg
dG8gdXNpbmcgdGhlCi0gICAgLy8gSW5Cb2R5IGluc2VydGlvbiBtb2RlLiAgUmVhbGx5LCBhbGwg
dGhpcyBjb2RlIGlzIHdyb25nIGFuZCBuZWVkIHRvIGJlCi0gICAgLy8gY2hhbmdlZCBub3QgdG8g
dXNlIGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQuCi0gICAgUmVmUHRyPEhUTUxC
b2R5RWxlbWVudD4gZmFrZUJvZHkgPSBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7
Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCB1c2UgZGVwcmVjYXRlZENyZWF0ZUNvbnRl
eHR1YWxGcmFnbWVudAotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGZh
a2VCb2R5LT5kZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCwgc2NyaXB0
aW5nUGVybWlzc2lvbik7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gKFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQpKS0+Y3Jl
YXRlQ29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCwgZWMsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwog
CiAgICAgaWYgKGZyYWdtZW50ICYmICFiYXNlVVJMLmlzRW1wdHkoKSAmJiBiYXNlVVJMICE9IGJs
YW5rVVJMKCkgJiYgYmFzZVVSTCAhPSBkb2N1bWVudC0+YmFzZVVSTCgpKQogICAgICAgICBjb21w
bGV0ZVVSTHMoZnJhZ21lbnQuZ2V0KCksIGJhc2VVUkwpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRWxlbWVudC5jcHAJKHJldmlzaW9uIDkzOTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSwyMCArMjkxLDYgQEAgU3RyaW5n
IEhUTUxFbGVtZW50OjpvdXRlckhUTUwoKSBjb25zdAogICAgIHJldHVybiBjcmVhdGVNYXJrdXAo
dGhpcyk7CiB9CiAKLS8vIEZJWE1FOiBUaGlzIGxvZ2ljIHNob3VsZCBtb3ZlIGludG8gUmFuZ2U6
OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBI
VE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJp
bmcmIG1hcmt1cCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Np
b24pCi17Ci0gICAgLy8gVGhlIGZvbGxvd2luZyBpcyBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGRl
ZmluaXRpb24gYXMgdXNlZCBieSBJRS4KLSAgICBpZiAoaWVGb3JiaWRzSW5zZXJ0SFRNTCgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChoYXNMb2NhbE5hbWUoY29sVGFnKSB8fCBoYXNM
b2NhbE5hbWUoY29sZ3JvdXBUYWcpIHx8IGhhc0xvY2FsTmFtZShmcmFtZXNldFRhZykKLSAgICAg
ICAgfHwgaGFzTG9jYWxOYW1lKGhlYWRUYWcpIHx8IGhhc0xvY2FsTmFtZShzdHlsZVRhZykgfHwg
aGFzTG9jYWxOYW1lKHRpdGxlVGFnKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4g
RWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXAsIHNjcmlw
dGluZ1Blcm1pc3Npb24pOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgaGFzT25lQ2hpbGQoQ29u
dGFpbmVyTm9kZSogbm9kZSkKIHsKICAgICBOb2RlKiBmaXJzdENoaWxkID0gbm9kZS0+Zmlyc3RD
aGlsZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAkocmV2aXNpb24gOTM5NTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDggKzQ0LDYgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGlubmVySFRNTCgpIGNvbnN0Owog
ICAgIFN0cmluZyBvdXRlckhUTUwoKSBjb25zdDsKLSAgICAvLyBkZXByZWNhdGVkQ3JlYXRlQ29u
dGV4dHVhbEZyYWdtZW50IGxvZ2ljIHNob3VsZCBiZSBtb3ZlZCBpbnRvIFJhbmdlOjpjcmVhdGVD
b250ZXh0dWFsRnJhZ21lbnQKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRlcHJl
Y2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgRnJhZ21lbnRTY3Jp
cHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKICAgICB2b2lkIHNl
dElubmVySFRNTChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXRP
dXRlckhUTUwoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgc2V0SW5u
ZXJUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9n
CShyZXZpc2lvbiA5Mzk2MikKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDgtMjkgIEthdXN0dWJoIEF0cmF3YWxrYXIg
IDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgTG9naWMgZnJvbSBIVE1MRWxlbWVu
dDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBtb3ZlZCBpbnRvCisgICAgICAg
IFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgZnVuY3Rpb24uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA1NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQXBpL3F3ZWJlbGVtZW50LmNwcDoK
KyAgICAgICAgKFFXZWJFbGVtZW50OjphcHBlbmRJbnNpZGUpOgorICAgICAgICAoUVdlYkVsZW1l
bnQ6OnByZXBlbmRJbnNpZGUpOgorICAgICAgICAoUVdlYkVsZW1lbnQ6OnByZXBlbmRPdXRzaWRl
KToKKyAgICAgICAgKFFXZWJFbGVtZW50OjphcHBlbmRPdXRzaWRlKToKKyAgICAgICAgKFFXZWJF
bGVtZW50OjplbmNsb3NlQ29udGVudHNXaXRoKToKKyAgICAgICAgKFFXZWJFbGVtZW50OjplbmNs
b3NlV2l0aCk6CisKIDIwMTEtMDgtMjUgIEFkZW1hciBkZSBTb3V6YSBSZWlzIEpyLiAgPGFkZW1h
ci5yZWlzQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBRdFdlYktpdC5wcm8g
Zml4IGZvciB3aGVuIGJ1aWxkaW5nIGluc2lkZSBRdApJbmRleDogU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYmVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJlbGVtZW50LmNwcAkocmV2aXNpb24gOTM5NTQpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2ViZWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICAgIENv
cHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKyAgICBQb3J0aW9ucyAgKEMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHkuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ1LDYgKzQ2LDcgQEAKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2VuZGlmCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNp
bmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0U3RhdGUuaCIKICNpbmNsdWRlICJTdGF0aWNOb2RlTGlzdC5oIgpAQCAtMTAyMiwxMCArMTAy
NCwxNCBAQCB2b2lkIFFXZWJFbGVtZW50OjphcHBlbmRJbnNpZGUoY29uc3QgUVN0CiAgICAgaWYg
KCFtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRN
TEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihtX2VsZW1l
bnQpOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGh0bWxFbGVtZW50
LT5FbGVtZW50OjpkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCk7Cisg
ICAgV2ViQ29yZTo6RWxlbWVudCogZSA9IG1fZWxlbWVudDsKKyAgICBEb2N1bWVudCogZG9jID0g
ZSA/IGUtPmRvY3VtZW50KCkgOiAwOworICAgIGlmICghZG9jKQorICAgICAgICByZXR1cm47CiAK
ICAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbiA9IDA7CisgICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gKFJhbmdlOjpjcmVhdGUoZG9jKSktPmNyZWF0ZUNvbnRleHR1YWxG
cmFnbWVudChtYXJrdXAsIGV4Y2VwdGlvbik7CisKICAgICBtX2VsZW1lbnQtPmFwcGVuZENoaWxk
KGZyYWdtZW50LCBleGNlcHRpb24pOwogfQogCkBAIC0xMDY4LDEwICsxMDc0LDEzIEBAIHZvaWQg
UVdlYkVsZW1lbnQ6OnByZXBlbmRJbnNpZGUoY29uc3QgUVMKICAgICBpZiAoIW1fZWxlbWVudC0+
aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIVE1MRWxlbWVudCogaHRt
bEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1fZWxlbWVudCk7Ci0gICAgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gaHRtbEVsZW1lbnQtPmRlcHJlY2F0ZWRD
cmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBl
ID0gbV9lbGVtZW50OworICAgIERvY3VtZW50KiBkb2MgPSBlID8gZS0+ZG9jdW1lbnQoKSA6IDA7
CisgICAgaWYgKCFkb2MpCisgICAgICAgIHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZXhj
ZXB0aW9uID0gMDsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAoUmFu
Z2U6OmNyZWF0ZShkb2MpKS0+Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCwgZXhjZXB0
aW9uKTsKIAogICAgIGlmIChtX2VsZW1lbnQtPmhhc0NoaWxkTm9kZXMoKSkKICAgICAgICAgbV9l
bGVtZW50LT5pbnNlcnRCZWZvcmUoZnJhZ21lbnQsIG1fZWxlbWVudC0+Zmlyc3RDaGlsZCgpLCBl
eGNlcHRpb24pOwpAQCAtMTEyMCwxMCArMTEyOSwxNCBAQCB2b2lkIFFXZWJFbGVtZW50OjpwcmVw
ZW5kT3V0c2lkZShjb25zdCBRCiAgICAgaWYgKCFtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnQqPihtX2VsZW1lbnQpOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBmcmFnbWVudCA9IGh0bWxFbGVtZW50LT5kZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZy
YWdtZW50KG1hcmt1cCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogZSA9IG1fZWxlbWVudDsKKyAg
ICBEb2N1bWVudCogZG9jID0gZSA/IGUtPmRvY3VtZW50KCkgOiAwOworICAgIGlmICghZG9jKQor
ICAgICAgICByZXR1cm47CiAKICAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbiA9IDA7CisgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gKFJhbmdlOjpjcmVhdGUoZG9jKSkt
PmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXAsIGV4Y2VwdGlvbik7CisKICAgICBtX2Vs
ZW1lbnQtPnBhcmVudE5vZGUoKS0+aW5zZXJ0QmVmb3JlKGZyYWdtZW50LCBtX2VsZW1lbnQsIGV4
Y2VwdGlvbik7CiB9CiAKQEAgLTExNzAsMTAgKzExODMsMTQgQEAgdm9pZCBRV2ViRWxlbWVudDo6
YXBwZW5kT3V0c2lkZShjb25zdCBRUwogICAgIGlmICghbV9lbGVtZW50LT5pc0hUTUxFbGVtZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9lbGVtZW50KTsKLSAgICBSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gZnJhZ21lbnQgPSBodG1sRWxlbWVudC0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1
YWxGcmFnbWVudChtYXJrdXApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGUgPSBtX2VsZW1lbnQ7
CisgICAgRG9jdW1lbnQqIGRvYyA9IGUgPyBlLT5kb2N1bWVudCgpIDogMDsKKyAgICBpZiAoIWRv
YykKKyAgICAgICAgcmV0dXJuOwogCiAgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOwor
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IChSYW5nZTo6Y3JlYXRlKGRv
YykpLT5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwLCBleGNlcHRpb24pOworCiAgICAg
aWYgKCFtX2VsZW1lbnQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIG1fZWxlbWVudC0+cGFyZW50
Tm9kZSgpLT5hcHBlbmRDaGlsZChmcmFnbWVudCwgZXhjZXB0aW9uKTsKICAgICBlbHNlCkBAIC0x
MzE3LDggKzEzMzQsMTMgQEAgdm9pZCBRV2ViRWxlbWVudDo6ZW5jbG9zZUNvbnRlbnRzV2l0aChj
bwogICAgIGlmICghbV9lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
Kj4obV9lbGVtZW50KTsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBo
dG1sRWxlbWVudC0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOwor
ICAgIFdlYkNvcmU6OkVsZW1lbnQqIGUgPSBtX2VsZW1lbnQ7CisgICAgRG9jdW1lbnQqIGRvYyA9
IGUgPyBlLT5kb2N1bWVudCgpIDogMDsKKyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOworICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IChSYW5nZTo6Y3JlYXRlKGRvYykpLT5jcmVhdGVDb250ZXh0dWFs
RnJhZ21lbnQobWFya3VwLCBleGNlcHRpb24pOwogCiAgICAgaWYgKCFmcmFnbWVudCB8fCAhZnJh
Z21lbnQtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTMyOCw4ICsxMzUwLDYg
QEAgdm9pZCBRV2ViRWxlbWVudDo6ZW5jbG9zZUNvbnRlbnRzV2l0aChjbwogICAgIGlmICghaW5z
ZXJ0aW9uUG9pbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0
aW9uID0gMDsKLQogICAgIC8vIHJlcGFyZW50IGNoaWxkcmVuCiAgICAgZm9yIChSZWZQdHI8Tm9k
ZT4gY2hpbGQgPSBtX2VsZW1lbnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7KSB7CiAgICAgICAgIFJl
ZlB0cjxOb2RlPiBuZXh0ID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CkBAIC0xMzkyLDggKzE0MTIs
MTMgQEAgdm9pZCBRV2ViRWxlbWVudDo6ZW5jbG9zZVdpdGgoY29uc3QgUVN0cgogICAgIGlmICgh
bV9lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxF
bGVtZW50KiBodG1sRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9lbGVtZW50
KTsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBodG1sRWxlbWVudC0+
ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIFdlYkNvcmU6
OkVsZW1lbnQqIGUgPSBtX2VsZW1lbnQ7CisgICAgRG9jdW1lbnQqIGRvYyA9IGUgPyBlLT5kb2N1
bWVudCgpIDogMDsKKyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhjZXB0
aW9uQ29kZSBleGNlcHRpb24gPSAwOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IChSYW5nZTo6Y3JlYXRlKGRvYykpLT5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFy
a3VwLCBleGNlcHRpb24pOwogCiAgICAgaWYgKCFmcmFnbWVudCB8fCAhZnJhZ21lbnQtPmZpcnN0
Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQxMCw3ICsxNDM1LDYgQEAgdm9pZCBRV2Vi
RWxlbWVudDo6ZW5jbG9zZVdpdGgoY29uc3QgUVN0cgogICAgIE5vZGUqIHBhcmVudCA9IG1fZWxl
bWVudC0+cGFyZW50Tm9kZSgpOwogICAgIE5vZGUqIHNpYmxpbmdOb2RlID0gbV9lbGVtZW50LT5u
ZXh0U2libGluZygpOwogCi0gICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOwogICAgIGlu
c2VydGlvblBvaW50LT5hcHBlbmRDaGlsZChtX2VsZW1lbnQsIGV4Y2VwdGlvbik7CiAKICAgICBp
ZiAoIXNpYmxpbmdOb2RlKQo=
</data>
<flag name="commit-queue"
          id="101648"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106139</attachid>
            <date>2011-09-02 08:47:23 -0700</date>
            <delta_ts>2011-09-02 09:28:00 -0700</delta_ts>
            <desc>Updated Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>16856</size>
            <attacher name="Kaustubh Atrawalkar">kaustubh.ra</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NDE3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDktMDIgIEthdXN0dWJo
IEF0cmF3YWxrYXIgIDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgTG9naWMgZnJv
bSBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBtb3ZlZCBp
bnRvCisgICAgICAgIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgZnVuY3Rpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA1NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cy4gKE9PUFMhKQorCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAqIGRvbS9F
bGVtZW50Lmg6CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlu
c2VydEludG9GcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlRG9jdW1l
bnRGcmFnbWVudEZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZUNv
bnRleHR1YWxGcmFnbWVudCk6CisgICAgICAgICogZG9tL1JhbmdlLmg6CisgICAgICAgICogZWRp
dGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hU
TUxFbGVtZW50Lmg6CisKIDIwMTEtMDktMDIgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTWFrZSBpdCBtb3JlIGNsZWFyIHdo
ZW4gcmVxdWVzdHMgYXJlIGxvYWRlZCBmcm9tIGNhY2hlIG9uIG5ldHdvcmsgcGFuZWwuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA5NDQxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDQ4ICsxNDEsNiBAQCBERUZJ
TkVfVklSVFVBTF9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoCiBERUZJTkVfVklSVFVBTF9BVFRS
SUJVVEVfRVZFTlRfTElTVEVORVIoRWxlbWVudCwgZm9jdXMpOwogREVGSU5FX1ZJUlRVQUxfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKEVsZW1lbnQsIGxvYWQpOwogCi1QYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IEVsZW1lbnQ6OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQo
Y29uc3QgU3RyaW5nJiBtYXJrdXAsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRp
bmdQZXJtaXNzaW9uKQotewotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
IGRvY3VtZW50KCktPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQotICAgIGlmIChkb2N1bWVu
dCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBmcmFnbWVudC0+cGFyc2VIVE1MKG1hcmt1
cCwgdGhpcywgc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICgh
ZnJhZ21lbnQtPnBhcnNlWE1MKG1hcmt1cCwgdGhpcywgc2NyaXB0aW5nUGVybWlzc2lvbikpCi0g
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb3BhZ2F0ZSBhIHN5bnRheCBlcnJvciBl
eGNlcHRpb24gb3V0IGhlcmUuCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAv
LyBFeGNlcHRpb25zIGFyZSBpZ25vcmVkIGJlY2F1c2Ugbm9uZSBvdWdodCB0byBoYXBwZW4gaGVy
ZS4KLSAgICBFeGNlcHRpb25Db2RlIGlnbm9yZWRFeGNlcHRpb25Db2RlOwotCi0gICAgLy8gV2Ug
bmVlZCB0byBwb3AgPGh0bWw+IGFuZCA8Ym9keT4gZWxlbWVudHMgYW5kIHJlbW92ZSA8aGVhZD4g
dG8KLSAgICAvLyBhY2NvbW1vZGF0ZSBmb2xrcyBwYXNzaW5nIGNvbXBsZXRlIEhUTUwgZG9jdW1l
bnRzIHRvIG1ha2UgdGhlCi0gICAgLy8gY2hpbGQgb2YgYW4gZWxlbWVudC4KLQotICAgIFJlZlB0
cjxOb2RlPiBuZXh0Tm9kZTsKLSAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gZnJhZ21lbnQt
PmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5leHROb2RlKSB7Ci0gICAgICAgIG5leHROb2Rl
ID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaHRt
bFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShoZWFkVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJv
ZHlUYWcpKSB7Ci0gICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1l
bnQobm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICBOb2RlKiBmaXJzdENoaWxkID0gZWxlbWVudC0+
Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQpCi0gICAgICAgICAgICAg
ICAgbmV4dE5vZGUgPSBmaXJzdENoaWxkOwotICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHRD
aGlsZDsKLSAgICAgICAgICAgIGZvciAoUmVmUHRyPE5vZGU+IGNoaWxkID0gZmlyc3RDaGlsZDsg
Y2hpbGQ7IGNoaWxkID0gbmV4dENoaWxkKSB7Ci0gICAgICAgICAgICAgICAgbmV4dENoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC0+cmVtb3ZlQ2hp
bGQoY2hpbGQuZ2V0KCksIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgICAgICBB
U1NFUlQoIWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgICAgICBmcmFnbWVudC0+
aW5zZXJ0QmVmb3JlKGNoaWxkLCBlbGVtZW50LCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBmcmFnbWVudC0+cmVtb3ZlQ2hpbGQoZWxlbWVudCwgaWdub3JlZEV4Y2Vw
dGlvbkNvZGUpOwotICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKLX0KLQogUGFz
c1JlZlB0cjxOb2RlPiBFbGVtZW50OjpjbG9uZU5vZGUoYm9vbCBkZWVwKQogewogICAgIHJldHVy
biBkZWVwID8gY2xvbmVFbGVtZW50V2l0aENoaWxkcmVuKCkgOiBjbG9uZUVsZW1lbnRXaXRob3V0
Q2hpbGRyZW4oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkocmV2aXNpb24gOTQ0MTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4
LDYgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIod2Via2l0
ZnVsbHNjcmVlbmNoYW5nZSk7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0
cmluZyYsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxs
b3dlZCk7Ci0KICAgICBib29sIGhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29u
c3Q7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBnZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIGNvbnN0OwogICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5jcHAJKHJldmlzaW9uIDk0NDE3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICAqIChDKSAyMDAwIEZyZWRlcmlr
IEhvbGxqZW4gKGZyZWRlcmlrLmhvbGxqZW5AaGlnLm5vKQogICogKEMpIDIwMDEgUGV0ZXIgS2Vs
bHkgKHBta0Bwb3N0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBQb3J0aW9ucyAgKEMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHkuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDYgKzMzLDggQEAKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIk5v
ZGVXaXRoSW5kZXguaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmgiCkBAIC01Myw2ICs1Niw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAjaWZuZGVm
IE5ERUJVRwogc3RhdGljIFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyIHJhbmdlQ291bnRlcigi
UmFuZ2UiKTsKQEAgLTEwOTMsNyArMTA5Nyw2NCBAQCBTdHJpbmcgUmFuZ2U6OnRleHQoKSBjb25z
dAogICAgIHJldHVybiBwbGFpblRleHQodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIG1h
cmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitzdGF0aWMgaW5saW5lIHZvaWQgaW5zZXJ0
SW50b0ZyYWdtZW50IChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50LCBIVE1M
RWxlbWVudCogZWxlbWVudCkKK3sKKyAgICAvLyBFeGNlcHRpb25zIGFyZSBpZ25vcmVkIGJlY2F1
c2Ugbm9uZSBvdWdodCB0byBoYXBwZW4gaGVyZS4KKyAgICBFeGNlcHRpb25Db2RlIGlnbm9yZWRF
eGNlcHRpb25Db2RlOworCisgICAgTm9kZSogZmlyc3RDaGlsZCA9IGVsZW1lbnQtPmZpcnN0Q2hp
bGQoKTsKKyAgICBSZWZQdHI8Tm9kZT4gbmV4dENoaWxkOworICAgIGZvciAoUmVmUHRyPE5vZGU+
IGNoaWxkID0gZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gbmV4dENoaWxkKSB7CisgICAgICAg
IG5leHRDaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAgICAgICBlbGVtZW50LT5yZW1v
dmVDaGlsZChjaGlsZC5nZXQoKSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOworICAgICAgICBBU1NF
UlQoIWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKKyAgICAgICAgZnJhZ21lbnQtPmluc2VydEJlZm9y
ZShjaGlsZCwgZWxlbWVudCwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOworICAgICAgICBBU1NFUlQo
IWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKKyAgICB9CisgICAgZnJhZ21lbnQtPnJlbW92ZUNoaWxk
KGVsZW1lbnQsIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKKyAgICBBU1NFUlQoIWlnbm9yZWRFeGNl
cHRpb25Db2RlKTsKK30KKworUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6Y3Jl
YXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQoY29uc3QgU3RyaW5nJiBtYXJrdXAsIEVsZW1l
bnQqIGVsZW1lbnQsICBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlz
c2lvbikKK3sKKyAgICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KGVs
ZW1lbnQpOworICAgIGlmIChodG1sRWxlbWVudC0+aWVGb3JiaWRzSW5zZXJ0SFRNTCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGlmIChodG1sRWxlbWVudC0+aGFzTG9jYWxOYW1lKGNvbFRh
ZykgfHwgaHRtbEVsZW1lbnQtPmhhc0xvY2FsTmFtZShjb2xncm91cFRhZykgfHwgaHRtbEVsZW1l
bnQtPmhhc0xvY2FsTmFtZShmcmFtZXNldFRhZykKKyAgICAgICAgfHwgaHRtbEVsZW1lbnQtPmhh
c0xvY2FsTmFtZShoZWFkVGFnKSB8fCBodG1sRWxlbWVudC0+aGFzTG9jYWxOYW1lKHN0eWxlVGFn
KSB8fCBodG1sRWxlbWVudC0+aGFzTG9jYWxOYW1lKHRpdGxlVGFnKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGVsZW1lbnQt
PmRvY3VtZW50KCktPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKworICAgIGlmIChlbGVtZW50
LT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQorICAgICAgICBmcmFnbWVudC0+cGFyc2VI
VE1MKG1hcmt1cCwgZWxlbWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgZWxzZSB7Cisg
ICAgICAgIGlmICghZnJhZ21lbnQtPnBhcnNlWE1MKG1hcmt1cCwgZWxlbWVudCwgc2NyaXB0aW5n
UGVybWlzc2lvbikpCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb3BhZ2F0ZSBh
IHN5bnRheCBlcnJvciBleGNlcHRpb24gb3V0IGhlcmUuCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICAvLyBXZSBuZWVkIHRvIHBvcCA8aHRtbD4gYW5kIDxib2R5PiBlbGVtZW50
cyBhbmQgcmVtb3ZlIDxoZWFkPiB0bworICAgIC8vIGFjY29tbW9kYXRlIGZvbGtzIHBhc3Npbmcg
Y29tcGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFrZSB0aGUKKyAgICAvLyBjaGlsZCBvZiBhbiBl
bGVtZW50LgorCisgICAgUmVmUHRyPE5vZGU+IG5leHROb2RlOworICAgIGZvciAoUmVmUHRyPE5v
ZGU+IG5vZGUgPSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbmV4dE5vZGUp
IHsKKyAgICAgICAgbmV4dE5vZGUgPSBub2RlLT5uZXh0U2libGluZygpOworICAgICAgICBpZiAo
bm9kZS0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGhlYWRUYWcpIHx8
IG5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50KiBl
bGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlLmdldCgpKTsKKyAgICAgICAgICAgIE5vZGUqIGZp
cnN0Q2hpbGQgPSBlbGVtZW50LT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICBpZiAoZmlyc3RD
aGlsZCkKKyAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IGZpcnN0Q2hpbGQ7CisgICAgICAgICAg
ICBpbnNlcnRJbnRvRnJhZ21lbnQoZnJhZ21lbnQsIGVsZW1lbnQpOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcm
IG1hcmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBz
Y3JpcHRpbmdQZXJtaXNzaW9uKQogewogICAgIGlmICghbV9zdGFydC5jb250YWluZXIoKSkgewog
ICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwpAQCAtMTEwNiwxMCArMTE2Nyw4IEBAIFBh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OmNyZWEKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCi0gICAgLy8gTG9naWMgZnJvbSBkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZy
YWdtZW50IHNob3VsZCBqdXN0IGJlIG1vdmVkIGludG8KLSAgICAvLyB0aGlzIGZ1bmN0aW9uLiAg
UmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBzZW1hbnRpY3MgZG8gbm90IG1ha2UKLSAg
ICAvLyBzZW5zZSBmb3IgdGhlIHJlc3Qgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiB0byB1c2Uu
Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gdG9IVE1MRWxlbWVudChl
bGVtZW50KS0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAg
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZURvY3VtZW50RnJhZ21l
bnRGb3JFbGVtZW50KG1hcmt1cCwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGVsZW1lbnQpLCBzY3Jp
cHRpbmdQZXJtaXNzaW9uKTsKKwogICAgIGlmICghZnJhZ21lbnQpIHsKICAgICAgICAgZWMgPSBO
T1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAko
cmV2aXNpb24gOTQ0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9s
ZGVyLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRnJhZ21lbnRTY3JpcHRp
bmdQZXJtaXNzaW9uLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk5vZGUuaCIK
ICNpbmNsdWRlICJSYW5nZUJvdW5kYXJ5UG9pbnQuaCIKQEAgLTg4LDcgKzg5LDggQEAgcHVibGlj
OgogICAgIFN0cmluZyB0b0hUTUwoKSBjb25zdDsKICAgICBTdHJpbmcgdGV4dCgpIGNvbnN0Owog
Ci0gICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21l
bnQoY29uc3QgU3RyaW5nJiBodG1sLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3Ry
aW5nJiBodG1sLCBFeGNlcHRpb25Db2RlJiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0g
RnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKKyAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JFbGVtZW50KGNvbnN0IFN0cmluZyYgbWFya3Vw
LCBFbGVtZW50KiBlbGVtZW50LCAgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGlu
Z1Blcm1pc3Npb24gPSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOwogCiAgICAgdm9pZCBkZXRh
Y2goRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IGNsb25lUmFuZ2UoRXhj
ZXB0aW9uQ29kZSYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2
aXNpb24gOTQ0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqIFBvcnRpb25zICAoQykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eS4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjgyLDEyICs2ODMsOSBAQCBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwK
IAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgU3RyaW5nJiBi
YXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikK
IHsKLSAgICAvLyBXZSB1c2UgYSBmYWtlIGJvZHkgZWxlbWVudCBoZXJlIHRvIHRyaWNrIHRoZSBI
VE1MIHBhcnNlciB0byB1c2luZyB0aGUKLSAgICAvLyBJbkJvZHkgaW5zZXJ0aW9uIG1vZGUuICBS
ZWFsbHksIGFsbCB0aGlzIGNvZGUgaXMgd3JvbmcgYW5kIG5lZWQgdG8gYmUKLSAgICAvLyBjaGFu
Z2VkIG5vdCB0byB1c2UgZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudC4KLSAgICBS
ZWZQdHI8SFRNTEJvZHlFbGVtZW50PiBmYWtlQm9keSA9IEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IHVzZSBkZXByZWNhdGVk
Q3JlYXRlQ29udGV4dHVhbEZyYWdtZW50Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50ID0gZmFrZUJvZHktPmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFy
a3VwLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICAvLyBVc2luZyBhIGZha2UgYm9keSBlbGVt
ZW50IGhlcmUgdG8gdHJpY2sgdGhlIEhUTUwgcGFyc2VyIHRvIHVzaW5nIHRoZQorICAgIC8vIElu
Qm9keSBpbnNlcnRpb24gbW9kZS4KKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPSAgUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCktPmNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JF
bGVtZW50KG1hcmt1cCwgZG9jdW1lbnQtPmJvZHkoKSwgc2NyaXB0aW5nUGVybWlzc2lvbik7CiAK
ICAgICBpZiAoZnJhZ21lbnQgJiYgIWJhc2VVUkwuaXNFbXB0eSgpICYmIGJhc2VVUkwgIT0gYmxh
bmtVUkwoKSAmJiBiYXNlVVJMICE9IGRvY3VtZW50LT5iYXNlVVJMKCkpCiAgICAgICAgIGNvbXBs
ZXRlVVJMcyhmcmFnbWVudC5nZXQoKSwgYmFzZVVSTCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50LmNwcAkocmV2aXNpb24gOTQ0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkxLDIwICsyOTEsNiBAQCBTdHJpbmcg
SFRNTEVsZW1lbnQ6Om91dGVySFRNTCgpIGNvbnN0CiAgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCh0
aGlzKTsKIH0KIAotLy8gRklYTUU6IFRoaXMgbG9naWMgc2hvdWxkIG1vdmUgaW50byBSYW5nZTo6
Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50Ci1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEhU
TUxFbGVtZW50OjpkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmlu
ZyYgbWFya3VwLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lv
bikKLXsKLSAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgZGVm
aW5pdGlvbiBhcyB1c2VkIGJ5IElFLgotICAgIGlmIChpZUZvcmJpZHNJbnNlcnRIVE1MKCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGhhc0xvY2FsTmFtZShjb2xUYWcpIHx8IGhhc0xv
Y2FsTmFtZShjb2xncm91cFRhZykgfHwgaGFzTG9jYWxOYW1lKGZyYW1lc2V0VGFnKQotICAgICAg
ICB8fCBoYXNMb2NhbE5hbWUoaGVhZFRhZykgfHwgaGFzTG9jYWxOYW1lKHN0eWxlVGFnKSB8fCBo
YXNMb2NhbE5hbWUodGl0bGVUYWcpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBF
bGVtZW50OjpkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCwgc2NyaXB0
aW5nUGVybWlzc2lvbik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNPbmVDaGlsZChDb250
YWluZXJOb2RlKiBub2RlKQogewogICAgIE5vZGUqIGZpcnN0Q2hpbGQgPSBub2RlLT5maXJzdENo
aWxkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCShyZXZpc2lvbiA5NDQxNykK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsOCArNDQsNiBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgaW5uZXJIVE1MKCkgY29uc3Q7CiAg
ICAgU3RyaW5nIG91dGVySFRNTCgpIGNvbnN0OwotICAgIC8vIGRlcHJlY2F0ZWRDcmVhdGVDb250
ZXh0dWFsRnJhZ21lbnQgbG9naWMgc2hvdWxkIGJlIG1vdmVkIGludG8gUmFuZ2U6OmNyZWF0ZUNv
bnRleHR1YWxGcmFnbWVudAotICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZGVwcmVj
YXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmLCBGcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24gPSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOwogICAgIHZvaWQgc2V0
SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldE91
dGVySFRNTChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXRJbm5l
clRleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwpJbmRleDogU291cmNlL1dlYktp
dC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDk0NDE3KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMS0wOS0wMiAgS2F1c3R1YmggQXRyYXdhbGthciAg
PGthdXN0dWJoQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBMb2dpYyBmcm9tIEhUTUxFbGVtZW50
OjpkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IG1vdmVkIGludG8KKyAgICAgICAg
UmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBmdW5jdGlvbi4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MDU2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBcGkvcXdlYmVsZW1lbnQuY3BwOgor
ICAgICAgICAoUVdlYkVsZW1lbnQ6OmFwcGVuZEluc2lkZSk6CisgICAgICAgIChRV2ViRWxlbWVu
dDo6cHJlcGVuZEluc2lkZSk6CisgICAgICAgIChRV2ViRWxlbWVudDo6cHJlcGVuZE91dHNpZGUp
OgorICAgICAgICAoUVdlYkVsZW1lbnQ6OmFwcGVuZE91dHNpZGUpOgorICAgICAgICAoUVdlYkVs
ZW1lbnQ6OmVuY2xvc2VDb250ZW50c1dpdGgpOgorICAgICAgICAoUVdlYkVsZW1lbnQ6OmVuY2xv
c2VXaXRoKToKKwogMjAxMS0wOS0wMSAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8
Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFtRdF0gVHJhbnNmb3JtIFF0
RmFsbGJhY2tXZWJQb3B1cENvbWJvIGludG8gUXRXZWJDb21ib0JveApJbmRleDogU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJlbGVtZW50LmNwcAkocmV2aXNpb24gOTQ0MTcpCisrKyBTb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjMsNyArMTAyMyw3
IEBAIHZvaWQgUVdlYkVsZW1lbnQ6OmFwcGVuZEluc2lkZShjb25zdCBRU3QKICAgICAgICAgcmV0
dXJuOwogCiAgICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnQqPihtX2VsZW1lbnQpOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IGh0bWxFbGVtZW50LT5FbGVtZW50OjpkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdt
ZW50KG1hcmt1cCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gIFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVudCht
YXJrdXAsIGh0bWxFbGVtZW50KTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsK
ICAgICBtX2VsZW1lbnQtPmFwcGVuZENoaWxkKGZyYWdtZW50LCBleGNlcHRpb24pOwpAQCAtMTA2
OSw3ICsxMDY5LDcgQEAgdm9pZCBRV2ViRWxlbWVudDo6cHJlcGVuZEluc2lkZShjb25zdCBRUwog
ICAgICAgICByZXR1cm47CiAKICAgICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudCo+KG1fZWxlbWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50ID0gaHRtbEVsZW1lbnQtPmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJh
Z21lbnQobWFya3VwKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAg
UmFuZ2U6OmNyZWF0ZShkb2N1bWVudCktPmNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JFbGVtZW50
KG1hcmt1cCwgaHRtbEVsZW1lbnQpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAw
OwogCkBAIC0xMTIxLDcgKzExMjEsNyBAQCB2b2lkIFFXZWJFbGVtZW50OjpwcmVwZW5kT3V0c2lk
ZShjb25zdCBRCiAgICAgICAgIHJldHVybjsKIAogICAgIEhUTUxFbGVtZW50KiBodG1sRWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9lbGVtZW50KTsKLSAgICBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBodG1sRWxlbWVudC0+ZGVwcmVjYXRlZENyZWF0ZUNv
bnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBm
cmFnbWVudCA9ICBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVu
dEZvckVsZW1lbnQobWFya3VwLCBodG1sRWxlbWVudCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGV4
Y2VwdGlvbiA9IDA7CiAgICAgbV9lbGVtZW50LT5wYXJlbnROb2RlKCktPmluc2VydEJlZm9yZShm
cmFnbWVudCwgbV9lbGVtZW50LCBleGNlcHRpb24pOwpAQCAtMTE3MSw3ICsxMTcxLDcgQEAgdm9p
ZCBRV2ViRWxlbWVudDo6YXBwZW5kT3V0c2lkZShjb25zdCBRUwogICAgICAgICByZXR1cm47CiAK
ICAgICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KG1fZWxlbWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gaHRt
bEVsZW1lbnQtPmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKKyAg
ICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAgUmFuZ2U6OmNyZWF0ZShkb2N1
bWVudCktPmNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JFbGVtZW50KG1hcmt1cCwgaHRtbEVsZW1l
bnQpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOwogICAgIGlmICghbV9lbGVt
ZW50LT5uZXh0U2libGluZygpKQpAQCAtMTMxOCw3ICsxMzE4LDcgQEAgdm9pZCBRV2ViRWxlbWVu
dDo6ZW5jbG9zZUNvbnRlbnRzV2l0aChjbwogICAgICAgICByZXR1cm47CiAKICAgICBIVE1MRWxl
bWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1fZWxlbWVudCk7
Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gaHRtbEVsZW1lbnQtPmRl
cHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKKyAgICBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAgUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCktPmNyZWF0
ZURvY3VtZW50RnJhZ21lbnRGb3JFbGVtZW50KG1hcmt1cCwgaHRtbEVsZW1lbnQpOwogCiAgICAg
aWYgKCFmcmFnbWVudCB8fCAhZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTM5Myw3ICsxMzkzLDcgQEAgdm9pZCBRV2ViRWxlbWVudDo6ZW5jbG9zZVdpdGgoY29u
c3QgUVN0cgogICAgICAgICByZXR1cm47CiAKICAgICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1fZWxlbWVudCk7Ci0gICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gaHRtbEVsZW1lbnQtPmRlcHJlY2F0ZWRDcmVhdGVDb250
ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJh
Z21lbnQgPSAgUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCktPmNyZWF0ZURvY3VtZW50RnJhZ21lbnRG
b3JFbGVtZW50KG1hcmt1cCwgaHRtbEVsZW1lbnQpOwogCiAgICAgaWYgKCFmcmFnbWVudCB8fCAh
ZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuOwo=
</data>
<flag name="commit-queue"
          id="102498"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106141</attachid>
            <date>2011-09-02 09:28:00 -0700</date>
            <delta_ts>2011-09-03 12:02:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>17733</size>
            <attacher name="Kaustubh Atrawalkar">kaustubh.ra</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NDE3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDktMDIgIEthdXN0dWJo
IEF0cmF3YWxrYXIgIDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgTG9naWMgZnJv
bSBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBtb3ZlZCBp
bnRvCisgICAgICAgIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgZnVuY3Rpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA1NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cy4gKE9PUFMhKQorCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAqIGRvbS9F
bGVtZW50Lmg6CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlu
c2VydEludG9GcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlRG9jdW1l
bnRGcmFnbWVudEZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZUNv
bnRleHR1YWxGcmFnbWVudCk6CisgICAgICAgICogZG9tL1JhbmdlLmg6CisgICAgICAgICogZWRp
dGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hU
TUxFbGVtZW50Lmg6CisKIDIwMTEtMDktMDIgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTWFrZSBpdCBtb3JlIGNsZWFyIHdo
ZW4gcmVxdWVzdHMgYXJlIGxvYWRlZCBmcm9tIGNhY2hlIG9uIG5ldHdvcmsgcGFuZWwuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA5NDQxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDQ4ICsxNDEsNiBAQCBERUZJ
TkVfVklSVFVBTF9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoCiBERUZJTkVfVklSVFVBTF9BVFRS
SUJVVEVfRVZFTlRfTElTVEVORVIoRWxlbWVudCwgZm9jdXMpOwogREVGSU5FX1ZJUlRVQUxfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKEVsZW1lbnQsIGxvYWQpOwogCi1QYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IEVsZW1lbnQ6OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQo
Y29uc3QgU3RyaW5nJiBtYXJrdXAsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRp
bmdQZXJtaXNzaW9uKQotewotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
IGRvY3VtZW50KCktPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQotICAgIGlmIChkb2N1bWVu
dCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBmcmFnbWVudC0+cGFyc2VIVE1MKG1hcmt1
cCwgdGhpcywgc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICgh
ZnJhZ21lbnQtPnBhcnNlWE1MKG1hcmt1cCwgdGhpcywgc2NyaXB0aW5nUGVybWlzc2lvbikpCi0g
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb3BhZ2F0ZSBhIHN5bnRheCBlcnJvciBl
eGNlcHRpb24gb3V0IGhlcmUuCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAv
LyBFeGNlcHRpb25zIGFyZSBpZ25vcmVkIGJlY2F1c2Ugbm9uZSBvdWdodCB0byBoYXBwZW4gaGVy
ZS4KLSAgICBFeGNlcHRpb25Db2RlIGlnbm9yZWRFeGNlcHRpb25Db2RlOwotCi0gICAgLy8gV2Ug
bmVlZCB0byBwb3AgPGh0bWw+IGFuZCA8Ym9keT4gZWxlbWVudHMgYW5kIHJlbW92ZSA8aGVhZD4g
dG8KLSAgICAvLyBhY2NvbW1vZGF0ZSBmb2xrcyBwYXNzaW5nIGNvbXBsZXRlIEhUTUwgZG9jdW1l
bnRzIHRvIG1ha2UgdGhlCi0gICAgLy8gY2hpbGQgb2YgYW4gZWxlbWVudC4KLQotICAgIFJlZlB0
cjxOb2RlPiBuZXh0Tm9kZTsKLSAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gZnJhZ21lbnQt
PmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5leHROb2RlKSB7Ci0gICAgICAgIG5leHROb2Rl
ID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaHRt
bFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShoZWFkVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJv
ZHlUYWcpKSB7Ci0gICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1l
bnQobm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICBOb2RlKiBmaXJzdENoaWxkID0gZWxlbWVudC0+
Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQpCi0gICAgICAgICAgICAg
ICAgbmV4dE5vZGUgPSBmaXJzdENoaWxkOwotICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHRD
aGlsZDsKLSAgICAgICAgICAgIGZvciAoUmVmUHRyPE5vZGU+IGNoaWxkID0gZmlyc3RDaGlsZDsg
Y2hpbGQ7IGNoaWxkID0gbmV4dENoaWxkKSB7Ci0gICAgICAgICAgICAgICAgbmV4dENoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC0+cmVtb3ZlQ2hp
bGQoY2hpbGQuZ2V0KCksIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgICAgICBB
U1NFUlQoIWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgICAgICBmcmFnbWVudC0+
aW5zZXJ0QmVmb3JlKGNoaWxkLCBlbGVtZW50LCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBmcmFnbWVudC0+cmVtb3ZlQ2hpbGQoZWxlbWVudCwgaWdub3JlZEV4Y2Vw
dGlvbkNvZGUpOwotICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKLX0KLQogUGFz
c1JlZlB0cjxOb2RlPiBFbGVtZW50OjpjbG9uZU5vZGUoYm9vbCBkZWVwKQogewogICAgIHJldHVy
biBkZWVwID8gY2xvbmVFbGVtZW50V2l0aENoaWxkcmVuKCkgOiBjbG9uZUVsZW1lbnRXaXRob3V0
Q2hpbGRyZW4oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkocmV2aXNpb24gOTQ0MTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4
LDYgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIod2Via2l0
ZnVsbHNjcmVlbmNoYW5nZSk7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0
cmluZyYsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxs
b3dlZCk7Ci0KICAgICBib29sIGhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29u
c3Q7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBnZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIGNvbnN0OwogICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5jcHAJKHJldmlzaW9uIDk0NDE3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICAqIChDKSAyMDAwIEZyZWRlcmlr
IEhvbGxqZW4gKGZyZWRlcmlrLmhvbGxqZW5AaGlnLm5vKQogICogKEMpIDIwMDEgUGV0ZXIgS2Vs
bHkgKHBta0Bwb3N0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBQb3J0aW9ucyAgKEMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHkuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDYgKzMzLDggQEAKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIk5v
ZGVXaXRoSW5kZXguaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmgiCkBAIC01Myw2ICs1Niw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAjaWZuZGVm
IE5ERUJVRwogc3RhdGljIFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyIHJhbmdlQ291bnRlcigi
UmFuZ2UiKTsKQEAgLTEwOTMsNyArMTA5Nyw2NCBAQCBTdHJpbmcgUmFuZ2U6OnRleHQoKSBjb25z
dAogICAgIHJldHVybiBwbGFpblRleHQodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIG1h
cmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitzdGF0aWMgaW5saW5lIHZvaWQgaW5zZXJ0
SW50b0ZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQsIEhUTUxF
bGVtZW50KiBlbGVtZW50KQoreworICAgIC8vIEV4Y2VwdGlvbnMgYXJlIGlnbm9yZWQgYmVjYXVz
ZSBub25lIG91Z2h0IHRvIGhhcHBlbiBoZXJlLgorICAgIEV4Y2VwdGlvbkNvZGUgaWdub3JlZEV4
Y2VwdGlvbkNvZGU7CisKKyAgICBOb2RlKiBmaXJzdENoaWxkID0gZWxlbWVudC0+Zmlyc3RDaGls
ZCgpOworICAgIFJlZlB0cjxOb2RlPiBuZXh0Q2hpbGQ7CisgICAgZm9yIChSZWZQdHI8Tm9kZT4g
Y2hpbGQgPSBmaXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBuZXh0Q2hpbGQpIHsKKyAgICAgICAg
bmV4dENoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIGVsZW1lbnQtPnJlbW92
ZUNoaWxkKGNoaWxkLmdldCgpLCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7CisgICAgICAgIEFTU0VS
VCghaWdub3JlZEV4Y2VwdGlvbkNvZGUpOworICAgICAgICBmcmFnbWVudC0+aW5zZXJ0QmVmb3Jl
KGNoaWxkLCBlbGVtZW50LCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7CisgICAgICAgIEFTU0VSVCgh
aWdub3JlZEV4Y2VwdGlvbkNvZGUpOworICAgIH0KKyAgICBmcmFnbWVudC0+cmVtb3ZlQ2hpbGQo
ZWxlbWVudCwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOworICAgIEFTU0VSVCghaWdub3JlZEV4Y2Vw
dGlvbkNvZGUpOworfQorCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpjcmVh
dGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVudChjb25zdCBTdHJpbmcmIG1hcmt1cCwgRWxlbWVu
dCogZWxlbWVudCwgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNz
aW9uKQoreworICAgIEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoZWxl
bWVudCk7CisgICAgaWYgKGh0bWxFbGVtZW50LT5pZUZvcmJpZHNJbnNlcnRIVE1MKCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgaWYgKGh0bWxFbGVtZW50LT5oYXNMb2NhbE5hbWUoY29sVGFn
KSB8fCBodG1sRWxlbWVudC0+aGFzTG9jYWxOYW1lKGNvbGdyb3VwVGFnKSB8fCBodG1sRWxlbWVu
dC0+aGFzTG9jYWxOYW1lKGZyYW1lc2V0VGFnKQorICAgICAgICB8fCBodG1sRWxlbWVudC0+aGFz
TG9jYWxOYW1lKGhlYWRUYWcpIHx8IGh0bWxFbGVtZW50LT5oYXNMb2NhbE5hbWUoc3R5bGVUYWcp
IHx8IGh0bWxFbGVtZW50LT5oYXNMb2NhbE5hbWUodGl0bGVUYWcpKQorICAgICAgICByZXR1cm4g
MDsKKworCisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZWxlbWVudC0+
ZG9jdW1lbnQoKS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworCisgICAgaWYgKGVsZW1lbnQt
PmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIGZyYWdtZW50LT5wYXJzZUhU
TUwobWFya3VwLCBlbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgaWYgKCFmcmFnbWVudC0+cGFyc2VYTUwobWFya3VwLCBlbGVtZW50LCBzY3JpcHRpbmdQ
ZXJtaXNzaW9uKSkKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvcGFnYXRlIGEg
c3ludGF4IGVycm9yIGV4Y2VwdGlvbiBvdXQgaGVyZS4KKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIC8vIFdlIG5lZWQgdG8gcG9wIDxodG1sPiBhbmQgPGJvZHk+IGVsZW1lbnRz
IGFuZCByZW1vdmUgPGhlYWQ+IHRvCisgICAgLy8gYWNjb21tb2RhdGUgZm9sa3MgcGFzc2luZyBj
b21wbGV0ZSBIVE1MIGRvY3VtZW50cyB0byBtYWtlIHRoZQorICAgIC8vIGNoaWxkIG9mIGFuIGVs
ZW1lbnQuCisKKyAgICBSZWZQdHI8Tm9kZT4gbmV4dE5vZGU7CisgICAgZm9yIChSZWZQdHI8Tm9k
ZT4gbm9kZSA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBuZXh0Tm9kZSkg
eworICAgICAgICBuZXh0Tm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIGlmIChu
b2RlLT5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoaGVhZFRhZykgfHwg
bm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkgeworICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVs
ZW1lbnQgPSB0b0hUTUxFbGVtZW50KG5vZGUuZ2V0KCkpOworICAgICAgICAgICAgTm9kZSogZmly
c3RDaGlsZCA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIGlmIChmaXJzdENo
aWxkKQorICAgICAgICAgICAgICAgIG5leHROb2RlID0gZmlyc3RDaGlsZDsKKyAgICAgICAgICAg
IGluc2VydEludG9GcmFnbWVudChmcmFnbWVudCwgZWxlbWVudCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYg
bWFya3VwLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNj
cmlwdGluZ1Blcm1pc3Npb24pCiB7CiAgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcigpKSB7CiAg
ICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CkBAIC0xMTA2LDEwICsxMTY3LDggQEAgUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6Y3JlYQogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKLSAgICAvLyBMb2dpYyBmcm9tIGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJh
Z21lbnQgc2hvdWxkIGp1c3QgYmUgbW92ZWQgaW50bwotICAgIC8vIHRoaXMgZnVuY3Rpb24uICBS
YW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IHNlbWFudGljcyBkbyBub3QgbWFrZQotICAg
IC8vIHNlbnNlIGZvciB0aGUgcmVzdCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIHRvIHVzZS4K
LSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSB0b0hUTUxFbGVtZW50KGVs
ZW1lbnQpLT5kZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCk7CisgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dEZvckVsZW1lbnQobWFya3VwLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZWxlbWVudCksIHNjcmlw
dGluZ1Blcm1pc3Npb24pOworCiAgICAgaWYgKCFmcmFnbWVudCkgewogICAgICAgICBlYyA9IE5P
VF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9SYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCShy
ZXZpc2lvbiA5NDQxNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xk
ZXIuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGlu
Z1Blcm1pc3Npb24uaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgog
I2luY2x1ZGUgIlJhbmdlQm91bmRhcnlQb2ludC5oIgpAQCAtODgsNyArODksOCBAQCBwdWJsaWM6
CiAgICAgU3RyaW5nIHRvSFRNTCgpIGNvbnN0OwogICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7CiAK
LSAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVu
dChjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJp
bmcmIGh0bWwsIEV4Y2VwdGlvbkNvZGUmLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBG
cmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gY3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQoY29uc3QgU3RyaW5nJiBtYXJrdXAs
IEVsZW1lbnQqLCAgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRp
bmdBbGxvd2VkKTsKIAogICAgIHZvaWQgZGV0YWNoKEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNz
UmVmUHRyPFJhbmdlPiBjbG9uZVJhbmdlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDk0NDE3KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBHb29n
bGUgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBQb3J0aW9ucyAg
KEMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4MiwxMiArNjgzLDkgQEAgU3RyaW5nIGNyZWF0
ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsCiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3Ry
aW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJt
aXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCiB7Ci0gICAgLy8gV2UgdXNlIGEgZmFrZSBib2R5
IGVsZW1lbnQgaGVyZSB0byB0cmljayB0aGUgSFRNTCBwYXJzZXIgdG8gdXNpbmcgdGhlCi0gICAg
Ly8gSW5Cb2R5IGluc2VydGlvbiBtb2RlLiAgUmVhbGx5LCBhbGwgdGhpcyBjb2RlIGlzIHdyb25n
IGFuZCBuZWVkIHRvIGJlCi0gICAgLy8gY2hhbmdlZCBub3QgdG8gdXNlIGRlcHJlY2F0ZWRDcmVh
dGVDb250ZXh0dWFsRnJhZ21lbnQuCi0gICAgUmVmUHRyPEhUTUxCb2R5RWxlbWVudD4gZmFrZUJv
ZHkgPSBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7Ci0gICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIG5vdCB1c2UgZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudAotICAg
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGZha2VCb2R5LT5kZXByZWNhdGVk
Q3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCwgc2NyaXB0aW5nUGVybWlzc2lvbik7Cisg
ICAgLy8gU3RpbGwgdXNpbmcgYSBmYWtlIGJvZHkgZWxlbWVudCBoZXJlIHRvIHRyaWNrIHRoZSBI
VE1MIHBhcnNlciB0byB1c2luZyB0aGUKKyAgICAvLyBJbkJvZHkgaW5zZXJ0aW9uIG1vZGUuCisg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gIFJhbmdlOjpjcmVhdGUoZG9j
dW1lbnQpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVudChtYXJrdXAsIGRvY3VtZW50
LT5ib2R5KCksIHNjcmlwdGluZ1Blcm1pc3Npb24pOwogCiAgICAgaWYgKGZyYWdtZW50ICYmICFi
YXNlVVJMLmlzRW1wdHkoKSAmJiBiYXNlVVJMICE9IGJsYW5rVVJMKCkgJiYgYmFzZVVSTCAhPSBk
b2N1bWVudC0+YmFzZVVSTCgpKQogICAgICAgICBjb21wbGV0ZVVSTHMoZnJhZ21lbnQuZ2V0KCks
IGJhc2VVUkwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9u
IDk0NDE3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5MSwyMCArMjkxLDYgQEAgU3RyaW5nIEhUTUxFbGVtZW50OjpvdXRlckhUTUwo
KSBjb25zdAogICAgIHJldHVybiBjcmVhdGVNYXJrdXAodGhpcyk7CiB9CiAKLS8vIEZJWE1FOiBU
aGlzIGxvZ2ljIHNob3VsZCBtb3ZlIGludG8gUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVu
dAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENy
ZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIG1hcmt1cCwgRnJhZ21lbnRTY3Jp
cHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCi17Ci0gICAgLy8gVGhlIGZvbGxv
d2luZyBpcyBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGRlZmluaXRpb24gYXMgdXNlZCBieSBJRS4K
LSAgICBpZiAoaWVGb3JiaWRzSW5zZXJ0SFRNTCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IGlmIChoYXNMb2NhbE5hbWUoY29sVGFnKSB8fCBoYXNMb2NhbE5hbWUoY29sZ3JvdXBUYWcpIHx8
IGhhc0xvY2FsTmFtZShmcmFtZXNldFRhZykKLSAgICAgICAgfHwgaGFzTG9jYWxOYW1lKGhlYWRU
YWcpIHx8IGhhc0xvY2FsTmFtZShzdHlsZVRhZykgfHwgaGFzTG9jYWxOYW1lKHRpdGxlVGFnKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0
ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXAsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwotfQotCiBz
dGF0aWMgaW5saW5lIGJvb2wgaGFzT25lQ2hpbGQoQ29udGFpbmVyTm9kZSogbm9kZSkKIHsKICAg
ICBOb2RlKiBmaXJzdENoaWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEVsZW1lbnQuaAkocmV2aXNpb24gOTQ0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDYgQEAgcHVibGljOgog
CiAgICAgU3RyaW5nIGlubmVySFRNTCgpIGNvbnN0OwogICAgIFN0cmluZyBvdXRlckhUTUwoKSBj
b25zdDsKLSAgICAvLyBkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IGxvZ2ljIHNo
b3VsZCBiZSBtb3ZlZCBpbnRvIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQKLSAgICBQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJh
Z21lbnQoY29uc3QgU3RyaW5nJiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21l
bnRTY3JpcHRpbmdBbGxvd2VkKTsKICAgICB2b2lkIHNldElubmVySFRNTChjb25zdCBTdHJpbmcm
LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXRPdXRlckhUTUwoY29uc3QgU3RyaW5nJiwg
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgc2V0SW5uZXJUZXh0KGNvbnN0IFN0cmluZyYsIEV4
Y2VwdGlvbkNvZGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NDQxNykKKysrIFNv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTEtMDktMDIgIEthdXN0dWJoIEF0cmF3YWxrYXIgIDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+
CisKKyAgICAgICAgTG9naWMgZnJvbSBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRl
eHR1YWxGcmFnbWVudCBtb3ZlZCBpbnRvCisgICAgICAgIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFs
RnJhZ21lbnQgZnVuY3Rpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NzA1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogQXBpL3F3ZWJlbGVtZW50LmNwcDoKKyAgICAgICAgKFFXZWJFbGVtZW50Ojph
cHBlbmRJbnNpZGUpOgorICAgICAgICAoUVdlYkVsZW1lbnQ6OnByZXBlbmRJbnNpZGUpOgorICAg
ICAgICAoUVdlYkVsZW1lbnQ6OnByZXBlbmRPdXRzaWRlKToKKyAgICAgICAgKFFXZWJFbGVtZW50
OjphcHBlbmRPdXRzaWRlKToKKyAgICAgICAgKFFXZWJFbGVtZW50OjplbmNsb3NlQ29udGVudHNX
aXRoKToKKyAgICAgICAgKFFXZWJFbGVtZW50OjplbmNsb3NlV2l0aCk6CisKIDIwMTEtMDktMDEg
IENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3Nh
Lm9yZz4KIAogICAgICAgICBbUXRdIFRyYW5zZm9ybSBRdEZhbGxiYWNrV2ViUG9wdXBDb21ibyBp
bnRvIFF0V2ViQ29tYm9Cb3gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAJ
KHJldmlzaW9uIDk0NDE3KQorKysgU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDIyLDggKzEwMjIsMTMgQEAgdm9pZCBRV2ViRWxlbWVudDo6
YXBwZW5kSW5zaWRlKGNvbnN0IFFTdAogICAgIGlmICghbV9lbGVtZW50LT5pc0hUTUxFbGVtZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFdlYkNvcmU6OkVsZW1lbnQqIGUgPSBtX2VsZW1l
bnQ7CisgICAgRG9jdW1lbnQqIGRvYyA9IGUgPyBlLT5kb2N1bWVudCgpIDogMDsKKyAgICBpZiAo
IWRvYykKKyAgICAgICAgcmV0dXJuOworCiAgICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihtX2VsZW1lbnQpOwotICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBmcmFnbWVudCA9IGh0bWxFbGVtZW50LT5FbGVtZW50OjpkZXByZWNhdGVkQ3Jl
YXRlQ29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50ID0gIFJhbmdlOjpjcmVhdGUoZG9jKS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVu
dEZvckVsZW1lbnQobWFya3VwLCBodG1sRWxlbWVudCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGV4
Y2VwdGlvbiA9IDA7CiAgICAgbV9lbGVtZW50LT5hcHBlbmRDaGlsZChmcmFnbWVudCwgZXhjZXB0
aW9uKTsKQEAgLTEwNjgsOCArMTA3MywxMyBAQCB2b2lkIFFXZWJFbGVtZW50OjpwcmVwZW5kSW5z
aWRlKGNvbnN0IFFTCiAgICAgaWYgKCFtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgV2ViQ29yZTo6RWxlbWVudCogZSA9IG1fZWxlbWVudDsKKyAgICBE
b2N1bWVudCogZG9jID0gZSA/IGUtPmRvY3VtZW50KCkgOiAwOworICAgIGlmICghZG9jKQorICAg
ICAgICByZXR1cm47CisKICAgICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KG1fZWxlbWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50ID0gaHRtbEVsZW1lbnQtPmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21l
bnQobWFya3VwKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAgUmFu
Z2U6OmNyZWF0ZShkb2MpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVudChtYXJrdXAs
IGh0bWxFbGVtZW50KTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKIApAQCAt
MTEyMCw4ICsxMTMwLDEzIEBAIHZvaWQgUVdlYkVsZW1lbnQ6OnByZXBlbmRPdXRzaWRlKGNvbnN0
IFEKICAgICBpZiAoIW1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm47
CiAKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBlID0gbV9lbGVtZW50OworICAgIERvY3VtZW50KiBk
b2MgPSBlID8gZS0+ZG9jdW1lbnQoKSA6IDA7CisgICAgaWYgKCFkb2MpCisgICAgICAgIHJldHVy
bjsKKwogICAgIEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50Kj4obV9lbGVtZW50KTsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBodG1sRWxlbWVudC0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXAp
OworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9ICBSYW5nZTo6Y3JlYXRl
KGRvYyktPmNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JFbGVtZW50KG1hcmt1cCwgaHRtbEVsZW1l
bnQpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOwogICAgIG1fZWxlbWVudC0+
cGFyZW50Tm9kZSgpLT5pbnNlcnRCZWZvcmUoZnJhZ21lbnQsIG1fZWxlbWVudCwgZXhjZXB0aW9u
KTsKQEAgLTExNzAsOCArMTE4NSwxMyBAQCB2b2lkIFFXZWJFbGVtZW50OjphcHBlbmRPdXRzaWRl
KGNvbnN0IFFTCiAgICAgaWYgKCFtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAg
cmV0dXJuOwogCisgICAgV2ViQ29yZTo6RWxlbWVudCogZSA9IG1fZWxlbWVudDsKKyAgICBEb2N1
bWVudCogZG9jID0gZSA/IGUtPmRvY3VtZW50KCkgOiAwOworICAgIGlmICghZG9jKQorICAgICAg
ICByZXR1cm47CisKICAgICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KG1fZWxlbWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50ID0gaHRtbEVsZW1lbnQtPmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQo
bWFya3VwKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAgUmFuZ2U6
OmNyZWF0ZShkb2MpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVudChtYXJrdXAsIGh0
bWxFbGVtZW50KTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKICAgICBpZiAo
IW1fZWxlbWVudC0+bmV4dFNpYmxpbmcoKSkKQEAgLTEzMTcsOCArMTMzNywxMyBAQCB2b2lkIFFX
ZWJFbGVtZW50OjplbmNsb3NlQ29udGVudHNXaXRoKGNvCiAgICAgaWYgKCFtX2VsZW1lbnQtPmlz
SFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgV2ViQ29yZTo6RWxlbWVudCog
ZSA9IG1fZWxlbWVudDsKKyAgICBEb2N1bWVudCogZG9jID0gZSA/IGUtPmRvY3VtZW50KCkgOiAw
OworICAgIGlmICghZG9jKQorICAgICAgICByZXR1cm47CisKICAgICBIVE1MRWxlbWVudCogaHRt
bEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1fZWxlbWVudCk7Ci0gICAgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gaHRtbEVsZW1lbnQtPmRlcHJlY2F0ZWRD
cmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gZnJhZ21lbnQgPSAgUmFuZ2U6OmNyZWF0ZShkb2MpLT5jcmVhdGVEb2N1bWVudEZyYWdt
ZW50Rm9yRWxlbWVudChtYXJrdXAsIGh0bWxFbGVtZW50KTsKIAogICAgIGlmICghZnJhZ21lbnQg
fHwgIWZyYWdtZW50LT5maXJzdENoaWxkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEzOTIsOCAr
MTQxNywxMyBAQCB2b2lkIFFXZWJFbGVtZW50OjplbmNsb3NlV2l0aChjb25zdCBRU3RyCiAgICAg
aWYgKCFtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAg
V2ViQ29yZTo6RWxlbWVudCogZSA9IG1fZWxlbWVudDsKKyAgICBEb2N1bWVudCogZG9jID0gZSA/
IGUtPmRvY3VtZW50KCkgOiAwOworICAgIGlmICghZG9jKQorICAgICAgICByZXR1cm47CisKICAg
ICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1f
ZWxlbWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gaHRtbEVs
ZW1lbnQtPmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKKyAgICBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAgUmFuZ2U6OmNyZWF0ZShkb2MpLT5j
cmVhdGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVudChtYXJrdXAsIGh0bWxFbGVtZW50KTsKIAog
ICAgIGlmICghZnJhZ21lbnQgfHwgIWZyYWdtZW50LT5maXJzdENoaWxkKCkpCiAgICAgICAgIHJl
dHVybjsK
</data>
<flag name="review"
          id="102501"
          type_id="1"
          status="-"
          setter="eric"
    />
    <flag name="commit-queue"
          id="102502"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106266</attachid>
            <date>2011-09-03 12:02:22 -0700</date>
            <delta_ts>2011-09-04 10:15:52 -0700</delta_ts>
            <desc>Re-factoring Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>17447</size>
            <attacher name="Kaustubh Atrawalkar">kaustubh.ra</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NDg3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDktMDMgIEthdXN0dWJo
IEF0cmF3YWxrYXIgIDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgTG9naWMgZnJv
bSBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBtb3ZlZCBp
bnRvCisgICAgICAgIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgZnVuY3Rpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA1NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvZGUgUmVmYWN0
b3JpbmcgZm9yIGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBDb2RlIFJlLWZhY3RvcmluZy4KKworICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjppbnNlcnRJbnRvRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQpOgorICAgICAgICAqIGRvbS9S
YW5nZS5oOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5j
cHA6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOgorCiAyMDExLTA5LTAzICBZdXRhIEtp
dGFtdXJhICA8eXV0YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYlNvY2tldDogU2VuZCBB
cnJheUJ1ZmZlciBhcyBXZWJTb2NrZXQgYmluYXJ5IG1lc3NhZ2UKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAJKHJldmlzaW9uIDk0NDg3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNDggKzE0MSw2IEBAIERFRklORV9WSVJUVUFMX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUigKIERFRklORV9WSVJUVUFMX0FUVFJJQlVURV9FVkVOVF9M
SVNURU5FUihFbGVtZW50LCBmb2N1cyk7CiBERUZJTkVfVklSVFVBTF9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIoRWxlbWVudCwgbG9hZCk7CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
RWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcm
IG1hcmt1cCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24p
Ci17Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnQoKS0+
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotCi0gICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERv
Y3VtZW50KCkpCi0gICAgICAgIGZyYWdtZW50LT5wYXJzZUhUTUwobWFya3VwLCB0aGlzLCBzY3Jp
cHRpbmdQZXJtaXNzaW9uKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFmcmFnbWVudC0+cGFy
c2VYTUwobWFya3VwLCB0aGlzLCBzY3JpcHRpbmdQZXJtaXNzaW9uKSkKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgcHJvcGFnYXRlIGEgc3ludGF4IGVycm9yIGV4Y2VwdGlvbiBvdXQg
aGVyZS4KLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIEV4Y2VwdGlvbnMg
YXJlIGlnbm9yZWQgYmVjYXVzZSBub25lIG91Z2h0IHRvIGhhcHBlbiBoZXJlLgotICAgIEV4Y2Vw
dGlvbkNvZGUgaWdub3JlZEV4Y2VwdGlvbkNvZGU7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIHBvcCA8
aHRtbD4gYW5kIDxib2R5PiBlbGVtZW50cyBhbmQgcmVtb3ZlIDxoZWFkPiB0bwotICAgIC8vIGFj
Y29tbW9kYXRlIGZvbGtzIHBhc3NpbmcgY29tcGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFrZSB0
aGUKLSAgICAvLyBjaGlsZCBvZiBhbiBlbGVtZW50LgotCi0gICAgUmVmUHRyPE5vZGU+IG5leHRO
b2RlOwotICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgp
OyBub2RlOyBub2RlID0gbmV4dE5vZGUpIHsKLSAgICAgICAgbmV4dE5vZGUgPSBub2RlLT5uZXh0
U2libGluZygpOwotICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKGhlYWRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsKLSAg
ICAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlLmdldCgp
KTsKLSAgICAgICAgICAgIE5vZGUqIGZpcnN0Q2hpbGQgPSBlbGVtZW50LT5maXJzdENoaWxkKCk7
Ci0gICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9
IGZpcnN0Q2hpbGQ7Ci0gICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dENoaWxkOwotICAgICAg
ICAgICAgZm9yIChSZWZQdHI8Tm9kZT4gY2hpbGQgPSBmaXJzdENoaWxkOyBjaGlsZDsgY2hpbGQg
PSBuZXh0Q2hpbGQpIHsKLSAgICAgICAgICAgICAgICBuZXh0Q2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKTsKLSAgICAgICAgICAgICAgICBlbGVtZW50LT5yZW1vdmVDaGlsZChjaGlsZC5nZXQo
KSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghaWdub3Jl
ZEV4Y2VwdGlvbkNvZGUpOwotICAgICAgICAgICAgICAgIGZyYWdtZW50LT5pbnNlcnRCZWZvcmUo
Y2hpbGQsIGVsZW1lbnQsIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgICAgICBB
U1NFUlQoIWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGZyYWdtZW50LT5yZW1vdmVDaGlsZChlbGVtZW50LCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0g
ICAgICAgICAgICBBU1NFUlQoIWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwotfQotCiBQYXNzUmVmUHRyPE5vZGU+
IEVsZW1lbnQ6OmNsb25lTm9kZShib29sIGRlZXApCiB7CiAgICAgcmV0dXJuIGRlZXAgPyBjbG9u
ZUVsZW1lbnRXaXRoQ2hpbGRyZW4oKSA6IGNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbigpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiA5NDQ4NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw4ICsxMDgsNiBAQCBwdWJsaWM6
CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih3ZWJraXRmdWxsc2NyZWVuY2hh
bmdlKTsKICNlbmRpZgogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgRnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKLQogICAg
IGJvb2wgaGFzQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGdldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7
CiAgICAgdm9pZCBzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAko
cmV2aXNpb24gOTQ0ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICogKEMpIDIwMDAgRnJlZGVyaWsgSG9sbGplbiAoZnJl
ZGVyaWsuaG9sbGplbkBoaWcubm8pCiAgKiAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMzIsNiArMzMsOCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKKyNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZVdpdGhJbmRleC5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIK
QEAgLTUzLDYgKzU2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKICNpZm5kZWYgTkRFQlVHCiBzdGF0
aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIgcmFuZ2VDb3VudGVyKCJSYW5nZSIpOwpAQCAt
MTA5Myw3ICsxMDk3LDYzIEBAIFN0cmluZyBSYW5nZTo6dGV4dCgpIGNvbnN0CiAgICAgcmV0dXJu
IHBsYWluVGV4dCh0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5n
ZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwLCBFeGNlcHRp
b25Db2RlJiBlYykgY29uc3QKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnNlcnRJbnRvRnJhZ21lbnQo
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCwgSFRNTEVsZW1lbnQqIGVsZW1l
bnQpCit7CisgICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkRXhjZXB0aW9uQ29kZTsKKworICAgIE5v
ZGUqIGZpcnN0Q2hpbGQgPSBlbGVtZW50LT5maXJzdENoaWxkKCk7CisgICAgUmVmUHRyPE5vZGU+
IG5leHRDaGlsZDsKKyAgICBmb3IgKFJlZlB0cjxOb2RlPiBjaGlsZCA9IGZpcnN0Q2hpbGQ7IGNo
aWxkOyBjaGlsZCA9IG5leHRDaGlsZCkgeworICAgICAgICBuZXh0Q2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsKKyAgICAgICAgZWxlbWVudC0+cmVtb3ZlQ2hpbGQoY2hpbGQuZ2V0KCksIGln
bm9yZWRFeGNlcHRpb25Db2RlKTsKKyAgICAgICAgQVNTRVJUKCFpZ25vcmVkRXhjZXB0aW9uQ29k
ZSk7CisgICAgICAgIGZyYWdtZW50LT5pbnNlcnRCZWZvcmUoY2hpbGQsIGVsZW1lbnQsIGlnbm9y
ZWRFeGNlcHRpb25Db2RlKTsKKyAgICAgICAgQVNTRVJUKCFpZ25vcmVkRXhjZXB0aW9uQ29kZSk7
CisgICAgfQorICAgIGZyYWdtZW50LT5yZW1vdmVDaGlsZChlbGVtZW50LCBpZ25vcmVkRXhjZXB0
aW9uQ29kZSk7CisgICAgQVNTRVJUKCFpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Cit9CisKK1Bhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OmNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JF
bGVtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwLCBFbGVtZW50KiBlbGVtZW50LCAgRnJhZ21lbnRT
Y3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCit7CisgICAgQVNTRVJUKGVs
ZW1lbnQpOworICAgIEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoZWxl
bWVudCk7CisgICAgaWYgKGh0bWxFbGVtZW50LT5pZUZvcmJpZHNJbnNlcnRIVE1MKCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgaWYgKGh0bWxFbGVtZW50LT5oYXNMb2NhbE5hbWUoY29sVGFn
KSB8fCBodG1sRWxlbWVudC0+aGFzTG9jYWxOYW1lKGNvbGdyb3VwVGFnKSB8fCBodG1sRWxlbWVu
dC0+aGFzTG9jYWxOYW1lKGZyYW1lc2V0VGFnKQorICAgICAgICB8fCBodG1sRWxlbWVudC0+aGFz
TG9jYWxOYW1lKGhlYWRUYWcpIHx8IGh0bWxFbGVtZW50LT5oYXNMb2NhbE5hbWUoc3R5bGVUYWcp
IHx8IGh0bWxFbGVtZW50LT5oYXNMb2NhbE5hbWUodGl0bGVUYWcpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGVsZW1lbnQtPmRv
Y3VtZW50KCktPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKworICAgIGlmIChlbGVtZW50LT5k
b2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQorICAgICAgICBmcmFnbWVudC0+cGFyc2VIVE1M
KG1hcmt1cCwgZWxlbWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgZWxzZSB7CisgICAg
ICAgIGlmICghZnJhZ21lbnQtPnBhcnNlWE1MKG1hcmt1cCwgZWxlbWVudCwgc2NyaXB0aW5nUGVy
bWlzc2lvbikpCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb3BhZ2F0ZSBhIHN5
bnRheCBlcnJvciBleGNlcHRpb24gb3V0IGhlcmUuCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICAvLyBXZSBuZWVkIHRvIHBvcCA8aHRtbD4gYW5kIDxib2R5PiBlbGVtZW50cyBh
bmQgcmVtb3ZlIDxoZWFkPiB0bworICAgIC8vIGFjY29tbW9kYXRlIGZvbGtzIHBhc3NpbmcgY29t
cGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFrZSB0aGUKKyAgICAvLyBjaGlsZCBvZiBhbiBlbGVt
ZW50LgorCisgICAgUmVmUHRyPE5vZGU+IG5leHROb2RlOworICAgIGZvciAoUmVmUHRyPE5vZGU+
IG5vZGUgPSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbmV4dE5vZGUpIHsK
KyAgICAgICAgbmV4dE5vZGUgPSBub2RlLT5uZXh0U2libGluZygpOworICAgICAgICBpZiAobm9k
ZS0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGhlYWRUYWcpIHx8IG5v
ZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVt
ZW50ID0gdG9IVE1MRWxlbWVudChub2RlLmdldCgpKTsKKyAgICAgICAgICAgIE5vZGUqIGZpcnN0
Q2hpbGQgPSBlbGVtZW50LT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICBpZiAoZmlyc3RDaGls
ZCkKKyAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IGZpcnN0Q2hpbGQ7CisgICAgICAgICAgICBp
bnNlcnRJbnRvRnJhZ21lbnQoZnJhZ21lbnQsIGVsZW1lbnQpOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIG1h
cmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3Jp
cHRpbmdQZXJtaXNzaW9uKQogewogICAgIGlmICghbV9zdGFydC5jb250YWluZXIoKSkgewogICAg
ICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwpAQCAtMTEwNiwxMCArMTE2Niw4IEBAIFBhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OmNyZWEKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogCi0gICAgLy8gTG9naWMgZnJvbSBkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdt
ZW50IHNob3VsZCBqdXN0IGJlIG1vdmVkIGludG8KLSAgICAvLyB0aGlzIGZ1bmN0aW9uLiAgUmFu
Z2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBzZW1hbnRpY3MgZG8gbm90IG1ha2UKLSAgICAv
LyBzZW5zZSBmb3IgdGhlIHJlc3Qgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiB0byB1c2UuCi0g
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gdG9IVE1MRWxlbWVudChlbGVt
ZW50KS0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZURvY3VtZW50RnJhZ21lbnRG
b3JFbGVtZW50KG1hcmt1cCwgdG9FbGVtZW50KGVsZW1lbnQpLCBzY3JpcHRpbmdQZXJtaXNzaW9u
KTsKKwogICAgIGlmICghZnJhZ21lbnQpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VS
UjsKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAkocmV2aXNpb24gOTQ0ODcp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLmgi
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJSYW5n
ZUJvdW5kYXJ5UG9pbnQuaCIKQEAgLTg4LDcgKzg5LDggQEAgcHVibGljOgogICAgIFN0cmluZyB0
b0hUTUwoKSBjb25zdDsKICAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OwogCi0gICAgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5n
JiBodG1sLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiBodG1sLCBFeGNl
cHRpb25Db2RlJiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRp
bmdBbGxvd2VkKTsKKyAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnRGb3JFbGVtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwLCBFbGVtZW50KiwgIEZy
YWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7CiAK
ICAgICB2b2lkIGRldGFjaChFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4g
Y2xvbmVSYW5nZShFeGNlcHRpb25Db2RlJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCShyZXZpc2lvbiA5NDQ4NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4KICAqIENv
cHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDExIE1vdG9y
b2xhIE1vYmlsaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02ODMsMTEgKzY4NCw5IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3Qg
UmFuZ2UqIHJhbmdlLAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29u
c3QgU3RyaW5nJiBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5n
UGVybWlzc2lvbikKIHsKICAgICAvLyBXZSB1c2UgYSBmYWtlIGJvZHkgZWxlbWVudCBoZXJlIHRv
IHRyaWNrIHRoZSBIVE1MIHBhcnNlciB0byB1c2luZyB0aGUKLSAgICAvLyBJbkJvZHkgaW5zZXJ0
aW9uIG1vZGUuICBSZWFsbHksIGFsbCB0aGlzIGNvZGUgaXMgd3JvbmcgYW5kIG5lZWQgdG8gYmUK
LSAgICAvLyBjaGFuZ2VkIG5vdCB0byB1c2UgZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFn
bWVudC4KKyAgICAvLyBJbkJvZHkgaW5zZXJ0aW9uIG1vZGUuCiAgICAgUmVmUHRyPEhUTUxCb2R5
RWxlbWVudD4gZmFrZUJvZHkgPSBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7Ci0g
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCB1c2UgZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1
YWxGcmFnbWVudAotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGZha2VC
b2R5LT5kZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCwgc2NyaXB0aW5n
UGVybWlzc2lvbik7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gIFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVudCht
YXJrdXAsIGZha2VCb2R5LmdldCgpLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKIAogICAgIGlmIChm
cmFnbWVudCAmJiAhYmFzZVVSTC5pc0VtcHR5KCkgJiYgYmFzZVVSTCAhPSBibGFua1VSTCgpICYm
IGJhc2VVUkwgIT0gZG9jdW1lbnQtPmJhc2VVUkwoKSkKICAgICAgICAgY29tcGxldGVVUkxzKGZy
YWdtZW50LmdldCgpLCBiYXNlVVJMKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA5NDQ4NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsMjAgKzMwMCw2IEBAIFN0cmluZyBIVE1MRWxlbWVu
dDo6b3V0ZXJIVE1MKCkgY29uc3QKICAgICByZXR1cm4gY3JlYXRlTWFya3VwKHRoaXMpOwogfQog
Ci0vLyBGSVhNRTogVGhpcyBsb2dpYyBzaG91bGQgbW92ZSBpbnRvIFJhbmdlOjpjcmVhdGVDb250
ZXh0dWFsRnJhZ21lbnQKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gSFRNTEVsZW1lbnQ6
OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiBtYXJrdXAs
IEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQotewotICAg
IC8vIFRoZSBmb2xsb3dpbmcgaXMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBkZWZpbml0aW9uIGFz
IHVzZWQgYnkgSUUuCi0gICAgaWYgKGllRm9yYmlkc0luc2VydEhUTUwoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBpZiAoaGFzTG9jYWxOYW1lKGNvbFRhZykgfHwgaGFzTG9jYWxOYW1lKGNv
bGdyb3VwVGFnKSB8fCBoYXNMb2NhbE5hbWUoZnJhbWVzZXRUYWcpCi0gICAgICAgIHx8IGhhc0xv
Y2FsTmFtZShoZWFkVGFnKSB8fCBoYXNMb2NhbE5hbWUoc3R5bGVUYWcpIHx8IGhhc0xvY2FsTmFt
ZSh0aXRsZVRhZykpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIEVsZW1lbnQ6OmRl
cHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwLCBzY3JpcHRpbmdQZXJtaXNz
aW9uKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGhhc09uZUNoaWxkKENvbnRhaW5lck5vZGUq
IG5vZGUpCiB7CiAgICAgTm9kZSogZmlyc3RDaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHJldmlzaW9uIDk0NDg3KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw2
IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBpbm5lckhUTUwoKSBjb25zdDsKICAgICBTdHJpbmcg
b3V0ZXJIVE1MKCkgY29uc3Q7Ci0gICAgLy8gZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFn
bWVudCBsb2dpYyBzaG91bGQgYmUgbW92ZWQgaW50byBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZy
YWdtZW50Ci0gICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkZXByZWNhdGVkQ3JlYXRl
Q29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7CiAgICAgdm9pZCBzZXRJbm5lckhUTUwo
Y29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgc2V0T3V0ZXJIVE1MKGNv
bnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldElubmVyVGV4dChjb25z
dCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24g
OTQ0ODcpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIxIEBACisyMDExLTA5LTAzICBLYXVzdHViaCBBdHJhd2Fsa2FyICA8a2F1c3R1YmhA
bW90b3JvbGEuY29tPgorCisgICAgICAgIExvZ2ljIGZyb20gSFRNTEVsZW1lbnQ6OmRlcHJlY2F0
ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgbW92ZWQgaW50bworICAgICAgICBSYW5nZTo6Y3Jl
YXRlQ29udGV4dHVhbEZyYWdtZW50IGZ1bmN0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcwNTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDb2RlIFJlZmFjdG9yaW5nIGZvciBkZXByZWNhdGVkQ3Jl
YXRlQ29udGV4dHVhbEZyYWdtZW50LgorCisgICAgICAgICogQXBpL3F3ZWJlbGVtZW50LmNwcDoK
KyAgICAgICAgKFFXZWJFbGVtZW50OjphcHBlbmRJbnNpZGUpOgorICAgICAgICAoUVdlYkVsZW1l
bnQ6OnByZXBlbmRJbnNpZGUpOgorICAgICAgICAoUVdlYkVsZW1lbnQ6OnByZXBlbmRPdXRzaWRl
KToKKyAgICAgICAgKFFXZWJFbGVtZW50OjphcHBlbmRPdXRzaWRlKToKKyAgICAgICAgKFFXZWJF
bGVtZW50OjplbmNsb3NlQ29udGVudHNXaXRoKToKKyAgICAgICAgKFFXZWJFbGVtZW50OjplbmNs
b3NlV2l0aCk6CisKIDIwMTEtMDktMDIgIEphZGUgSGFuICA8amFkZS5oYW5Abm9raWEuY29tPgog
CiAgICAgICAgIFtRdF1bU3ltYmlhbl0gUkVHUkVTU0lPTig5MzIzNSkgTWlzc2luZyAuZGVmIHVw
ZGF0ZQpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAkocmV2aXNpb24gOTQ0
ODcpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMjIsOCArMTAyMiwxMCBAQCB2b2lkIFFXZWJFbGVtZW50OjphcHBlbmRJbnNpZGUo
Y29uc3QgUVN0CiAgICAgaWYgKCFtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnQqPihtX2VsZW1lbnQpOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IGh0bWxFbGVtZW50LT5FbGVtZW50OjpkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZy
YWdtZW50KG1hcmt1cCk7CisgICAgaWYoIW1fZWxlbWVudC0+ZG9jdW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gIFJhbmdl
OjpjcmVhdGUobV9lbGVtZW50LT5kb2N1bWVudCktPmNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JF
bGVtZW50KG1hcmt1cCwgdG9IVE1MRWxlbWVudChtX2VsZW1lbnQpKTsKIAogICAgIEV4Y2VwdGlv
bkNvZGUgZXhjZXB0aW9uID0gMDsKICAgICBtX2VsZW1lbnQtPmFwcGVuZENoaWxkKGZyYWdtZW50
LCBleGNlcHRpb24pOwpAQCAtMTA2OCw4ICsxMDcwLDEwIEBAIHZvaWQgUVdlYkVsZW1lbnQ6OnBy
ZXBlbmRJbnNpZGUoY29uc3QgUVMKICAgICBpZiAoIW1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1fZWxlbWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gaHRtbEVsZW1lbnQtPmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFs
RnJhZ21lbnQobWFya3VwKTsKKyAgICBpZighbV9lbGVtZW50LT5kb2N1bWVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAgUmFu
Z2U6OmNyZWF0ZShtX2VsZW1lbnQtPmRvY3VtZW50KS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZv
ckVsZW1lbnQobWFya3VwLCB0b0hUTUxFbGVtZW50KG1fZWxlbWVudCkpOwogCiAgICAgRXhjZXB0
aW9uQ29kZSBleGNlcHRpb24gPSAwOwogCkBAIC0xMTIwLDggKzExMjQsMTAgQEAgdm9pZCBRV2Vi
RWxlbWVudDo6cHJlcGVuZE91dHNpZGUoY29uc3QgUQogICAgIGlmICghbV9lbGVtZW50LT5pc0hU
TUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxFbGVtZW50KiBodG1sRWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9lbGVtZW50KTsKLSAgICBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBodG1sRWxlbWVudC0+ZGVwcmVjYXRlZENyZWF0
ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIGlmKCFtX2VsZW1lbnQtPmRvY3VtZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9ICBSYW5nZTo6Y3JlYXRlKG1fZWxlbWVudC0+ZG9jdW1lbnQpLT5jcmVhdGVEb2N1bWVu
dEZyYWdtZW50Rm9yRWxlbWVudChtYXJrdXAsIHRvSFRNTEVsZW1lbnQobV9lbGVtZW50KSk7CiAK
ICAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbiA9IDA7CiAgICAgbV9lbGVtZW50LT5wYXJlbnRO
b2RlKCktPmluc2VydEJlZm9yZShmcmFnbWVudCwgbV9lbGVtZW50LCBleGNlcHRpb24pOwpAQCAt
MTE3MCw4ICsxMTc2LDEwIEBAIHZvaWQgUVdlYkVsZW1lbnQ6OmFwcGVuZE91dHNpZGUoY29uc3Qg
UVMKICAgICBpZiAoIW1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dCo+KG1fZWxlbWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0g
aHRtbEVsZW1lbnQtPmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsK
KyAgICBpZighbV9lbGVtZW50LT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAgUmFuZ2U6OmNyZWF0ZShtX2VsZW1l
bnQtPmRvY3VtZW50KS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQobWFya3VwLCB0
b0hUTUxFbGVtZW50KG1fZWxlbWVudCkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24g
PSAwOwogICAgIGlmICghbV9lbGVtZW50LT5uZXh0U2libGluZygpKQpAQCAtMTMxNyw4ICsxMzI1
LDEwIEBAIHZvaWQgUVdlYkVsZW1lbnQ6OmVuY2xvc2VDb250ZW50c1dpdGgoY28KICAgICBpZiAo
IW1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIVE1M
RWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1fZWxlbWVu
dCk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gaHRtbEVsZW1lbnQt
PmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKKyAgICBpZighbV9l
bGVtZW50LT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSAgUmFuZ2U6OmNyZWF0ZShtX2VsZW1lbnQtPmRvY3VtZW50
KS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQobWFya3VwLCB0b0hUTUxFbGVtZW50
KG1fZWxlbWVudCkpOwogCiAgICAgaWYgKCFmcmFnbWVudCB8fCAhZnJhZ21lbnQtPmZpcnN0Q2hp
bGQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTM5Miw4ICsxNDAyLDEwIEBAIHZvaWQgUVdlYkVs
ZW1lbnQ6OmVuY2xvc2VXaXRoKGNvbnN0IFFTdHIKICAgICBpZiAoIW1fZWxlbWVudC0+aXNIVE1M
RWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIVE1MRWxlbWVudCogaHRtbEVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1fZWxlbWVudCk7Ci0gICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gaHRtbEVsZW1lbnQtPmRlcHJlY2F0ZWRDcmVhdGVD
b250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKKyAgICBpZighbV9lbGVtZW50LT5kb2N1bWVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPSAgUmFuZ2U6OmNyZWF0ZShtX2VsZW1lbnQtPmRvY3VtZW50KS0+Y3JlYXRlRG9jdW1lbnRG
cmFnbWVudEZvckVsZW1lbnQobWFya3VwLCB0b0hUTUxFbGVtZW50KG1fZWxlbWVudCkpOwogCiAg
ICAgaWYgKCFmcmFnbWVudCB8fCAhZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0
dXJuOwo=
</data>
<flag name="commit-queue"
          id="102641"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106288</attachid>
            <date>2011-09-04 10:15:52 -0700</date>
            <delta_ts>2011-09-04 11:51:51 -0700</delta_ts>
            <desc>Updated Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>17506</size>
            <attacher name="Kaustubh Atrawalkar">kaustubh.ra</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NTAxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDktMDMgIEthdXN0dWJo
IEF0cmF3YWxrYXIgIDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgTG9naWMgZnJv
bSBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBtb3ZlZCBp
bnRvCisgICAgICAgIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgZnVuY3Rpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA1NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvZGUgUmVmYWN0
b3JpbmcgZm9yIGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBDb2RlIFJlLWZhY3RvcmluZy4KKworICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjppbnNlcnRJbnRvRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQpOgorICAgICAgICAqIGRvbS9S
YW5nZS5oOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5j
cHA6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOgorCiAyMDExLTA5LTA0ICBSb2JpbiBE
dW5uICA8cm9iaW5AYWxsZHVubi5jb20+CiAKICAgICAgICAgW3d4XSBFbmFibGUgd3hXZWJLaXQg
dG8gcnVuIHVzaW5nIHRoZSB3eEdDIENhaXJvIGJhY2tlbmQgb24gcGxhdGZvcm1zIG90aGVyIHRo
YW4gR1RLLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gOTQ1MDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw0OCAr
MTQxLDYgQEAgREVGSU5FX1ZJUlRVQUxfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKAogREVGSU5F
X1ZJUlRVQUxfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKEVsZW1lbnQsIGZvY3VzKTsKIERFRklO
RV9WSVJUVUFMX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihFbGVtZW50LCBsb2FkKTsKIAotUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFbGVtZW50OjpkZXByZWNhdGVkQ3JlYXRlQ29udGV4
dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1p
c3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKLXsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZnJhZ21lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0KLSAg
ICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgZnJhZ21lbnQtPnBh
cnNlSFRNTChtYXJrdXAsIHRoaXMsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwotICAgIGVsc2Ugewot
ICAgICAgICBpZiAoIWZyYWdtZW50LT5wYXJzZVhNTChtYXJrdXAsIHRoaXMsIHNjcmlwdGluZ1Bl
cm1pc3Npb24pKQotICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9wYWdhdGUgYSBz
eW50YXggZXJyb3IgZXhjZXB0aW9uIG91dCBoZXJlLgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgLy8gRXhjZXB0aW9ucyBhcmUgaWdub3JlZCBiZWNhdXNlIG5vbmUgb3VnaHQg
dG8gaGFwcGVuIGhlcmUuCi0gICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkRXhjZXB0aW9uQ29kZTsK
LQotICAgIC8vIFdlIG5lZWQgdG8gcG9wIDxodG1sPiBhbmQgPGJvZHk+IGVsZW1lbnRzIGFuZCBy
ZW1vdmUgPGhlYWQ+IHRvCi0gICAgLy8gYWNjb21tb2RhdGUgZm9sa3MgcGFzc2luZyBjb21wbGV0
ZSBIVE1MIGRvY3VtZW50cyB0byBtYWtlIHRoZQotICAgIC8vIGNoaWxkIG9mIGFuIGVsZW1lbnQu
Ci0KLSAgICBSZWZQdHI8Tm9kZT4gbmV4dE5vZGU7Ci0gICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9k
ZSA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBuZXh0Tm9kZSkgewotICAg
ICAgICBuZXh0Tm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChub2RlLT5o
YXNUYWdOYW1lKGh0bWxUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoaGVhZFRhZykgfHwgbm9kZS0+
aGFzVGFnTmFtZShib2R5VGFnKSkgewotICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQg
PSB0b0hUTUxFbGVtZW50KG5vZGUuZ2V0KCkpOwotICAgICAgICAgICAgTm9kZSogZmlyc3RDaGls
ZCA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIGlmIChmaXJzdENoaWxkKQot
ICAgICAgICAgICAgICAgIG5leHROb2RlID0gZmlyc3RDaGlsZDsKLSAgICAgICAgICAgIFJlZlB0
cjxOb2RlPiBuZXh0Q2hpbGQ7Ci0gICAgICAgICAgICBmb3IgKFJlZlB0cjxOb2RlPiBjaGlsZCA9
IGZpcnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IG5leHRDaGlsZCkgewotICAgICAgICAgICAgICAg
IG5leHRDaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgIGVsZW1l
bnQtPnJlbW92ZUNoaWxkKGNoaWxkLmdldCgpLCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0gICAgICAgICAgICAg
ICAgZnJhZ21lbnQtPmluc2VydEJlZm9yZShjaGlsZCwgZWxlbWVudCwgaWdub3JlZEV4Y2VwdGlv
bkNvZGUpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZnJhZ21lbnQtPnJlbW92ZUNoaWxkKGVsZW1lbnQs
IGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgIEFTU0VSVCghaWdub3JlZEV4Y2Vw
dGlvbkNvZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNl
KCk7Ci19Ci0KIFBhc3NSZWZQdHI8Tm9kZT4gRWxlbWVudDo6Y2xvbmVOb2RlKGJvb2wgZGVlcCkK
IHsKICAgICByZXR1cm4gZGVlcCA/IGNsb25lRWxlbWVudFdpdGhDaGlsZHJlbigpIDogY2xvbmVF
bGVtZW50V2l0aG91dENoaWxkcmVuKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJldmlzaW9u
IDk0NTAxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTA4LDggKzEwOCw2IEBAIHB1YmxpYzoKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJ
U1RFTkVSKHdlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UpOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFn
bWVudChjb25zdCBTdHJpbmcmLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBGcmFnbWVu
dFNjcmlwdGluZ0FsbG93ZWQpOwotCiAgICAgYm9vbCBoYXNBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpIGNvbnN0OwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZ2V0QXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAgICB2b2lkIHNldEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiA5NDUwMSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9SYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw3IEBACiAgKiAoQykg
MjAwMCBGcmVkZXJpayBIb2xsamVuIChmcmVkZXJpay5ob2xsamVuQGhpZy5ubykKICAqIChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw2ICszMyw4IEBA
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJI
VE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5vZGUuaCIK
ICNpbmNsdWRlICJOb2RlV2l0aEluZGV4LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgpAQCAtNTMsNiArNTYsNyBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAogI2lmbmRlZiBOREVCVUcKIHN0YXRpYyBXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciBy
YW5nZUNvdW50ZXIoIlJhbmdlIik7CkBAIC0xMDkzLDcgKzEwOTcsNjMgQEAgU3RyaW5nIFJhbmdl
Ojp0ZXh0KCkgY29uc3QKICAgICByZXR1cm4gcGxhaW5UZXh0KHRoaXMpOwogfQogCi1QYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29u
c3QgU3RyaW5nJiBtYXJrdXAsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorc3RhdGljIGlubGlu
ZSB2b2lkIGluc2VydEludG9GcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50LCBIVE1MRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBFeGNlcHRpb25Db2RlIGlnbm9y
ZWRFeGNlcHRpb25Db2RlOworCisgICAgTm9kZSogZmlyc3RDaGlsZCA9IGVsZW1lbnQtPmZpcnN0
Q2hpbGQoKTsKKyAgICBSZWZQdHI8Tm9kZT4gbmV4dENoaWxkOworICAgIGZvciAoUmVmUHRyPE5v
ZGU+IGNoaWxkID0gZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gbmV4dENoaWxkKSB7CisgICAg
ICAgIG5leHRDaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAgICAgICBlbGVtZW50LT5y
ZW1vdmVDaGlsZChjaGlsZC5nZXQoKSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOworICAgICAgICBB
U1NFUlQoIWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKKyAgICAgICAgZnJhZ21lbnQtPmluc2VydEJl
Zm9yZShjaGlsZCwgZWxlbWVudCwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOworICAgICAgICBBU1NF
UlQoIWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKKyAgICB9CisgICAgZnJhZ21lbnQtPnJlbW92ZUNo
aWxkKGVsZW1lbnQsIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKKyAgICBBU1NFUlQoIWlnbm9yZWRF
eGNlcHRpb25Db2RlKTsKK30KKworUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQoY29uc3QgU3RyaW5nJiBtYXJrdXAsIEVs
ZW1lbnQqIGVsZW1lbnQsICBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVy
bWlzc2lvbikKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgSFRNTEVsZW1lbnQqIGh0bWxF
bGVtZW50ID0gdG9IVE1MRWxlbWVudChlbGVtZW50KTsKKyAgICBpZiAoaHRtbEVsZW1lbnQtPmll
Rm9yYmlkc0luc2VydEhUTUwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaHRtbEVs
ZW1lbnQtPmhhc0xvY2FsTmFtZShjb2xUYWcpIHx8IGh0bWxFbGVtZW50LT5oYXNMb2NhbE5hbWUo
Y29sZ3JvdXBUYWcpIHx8IGh0bWxFbGVtZW50LT5oYXNMb2NhbE5hbWUoZnJhbWVzZXRUYWcpCisg
ICAgICAgIHx8IGh0bWxFbGVtZW50LT5oYXNMb2NhbE5hbWUoaGVhZFRhZykgfHwgaHRtbEVsZW1l
bnQtPmhhc0xvY2FsTmFtZShzdHlsZVRhZykgfHwgaHRtbEVsZW1lbnQtPmhhc0xvY2FsTmFtZSh0
aXRsZVRhZykpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpOworCisgICAgaWYgKGVsZW1lbnQtPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCisg
ICAgICAgIGZyYWdtZW50LT5wYXJzZUhUTUwobWFya3VwLCBlbGVtZW50LCBzY3JpcHRpbmdQZXJt
aXNzaW9uKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFmcmFnbWVudC0+cGFyc2VYTUwobWFy
a3VwLCBlbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKSkKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgcHJvcGFnYXRlIGEgc3ludGF4IGVycm9yIGV4Y2VwdGlvbiBvdXQgaGVyZS4K
KyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIFdlIG5lZWQgdG8gcG9wIDxo
dG1sPiBhbmQgPGJvZHk+IGVsZW1lbnRzIGFuZCByZW1vdmUgPGhlYWQ+IHRvCisgICAgLy8gYWNj
b21tb2RhdGUgZm9sa3MgcGFzc2luZyBjb21wbGV0ZSBIVE1MIGRvY3VtZW50cyB0byBtYWtlIHRo
ZQorICAgIC8vIGNoaWxkIG9mIGFuIGVsZW1lbnQuCisKKyAgICBSZWZQdHI8Tm9kZT4gbmV4dE5v
ZGU7CisgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7
IG5vZGU7IG5vZGUgPSBuZXh0Tm9kZSkgeworICAgICAgICBuZXh0Tm9kZSA9IG5vZGUtPm5leHRT
aWJsaW5nKCk7CisgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8IG5vZGUt
Pmhhc1RhZ05hbWUoaGVhZFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkgeworICAg
ICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KG5vZGUuZ2V0KCkp
OworICAgICAgICAgICAgTm9kZSogZmlyc3RDaGlsZCA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsK
KyAgICAgICAgICAgIGlmIChmaXJzdENoaWxkKQorICAgICAgICAgICAgICAgIG5leHROb2RlID0g
Zmlyc3RDaGlsZDsKKyAgICAgICAgICAgIGluc2VydEludG9GcmFnbWVudChmcmFnbWVudCwgZWxl
bWVudCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsK
K30KKworUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6Y3JlYXRlQ29udGV4dHVh
bEZyYWdtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCiB7CiAgICAgaWYgKCFt
X3N0YXJ0LmNvbnRhaW5lcigpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CkBA
IC0xMTA2LDEwICsxMTY2LDggQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6
Y3JlYQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAvLyBMb2dpYyBmcm9tIGRlcHJl
Y2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgc2hvdWxkIGp1c3QgYmUgbW92ZWQgaW50bwot
ICAgIC8vIHRoaXMgZnVuY3Rpb24uICBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IHNl
bWFudGljcyBkbyBub3QgbWFrZQotICAgIC8vIHNlbnNlIGZvciB0aGUgcmVzdCBvZiB0aGUgRE9N
IGltcGxlbWVudGF0aW9uIHRvIHVzZS4KLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJh
Z21lbnQgPSB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5kZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVh
bEZyYWdtZW50KG1hcmt1cCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gY3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQobWFya3VwLCB0b0VsZW1lbnQoZWxl
bWVudCksIHNjcmlwdGluZ1Blcm1pc3Npb24pOworCiAgICAgaWYgKCFmcmFnbWVudCkgewogICAg
ICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5oCShyZXZpc2lvbiA5NDUwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlUGxhY2Vob2xkZXIuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVk
ZSAiTm9kZS5oIgogI2luY2x1ZGUgIlJhbmdlQm91bmRhcnlQb2ludC5oIgpAQCAtODgsNyArODks
OCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRvSFRNTCgpIGNvbnN0OwogICAgIFN0cmluZyB0ZXh0
KCkgY29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUNvbnRl
eHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsK
KyAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVu
dChjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlvbkNvZGUmLCBGcmFnbWVudFNjcmlwdGluZ1Bl
cm1pc3Npb24gPSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOworICAgIFBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gY3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQoY29uc3QgU3Ry
aW5nJiBtYXJrdXAsIEVsZW1lbnQqLCAgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJh
Z21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKIAogICAgIHZvaWQgZGV0YWNoKEV4Y2VwdGlvbkNvZGUm
KTsKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBjbG9uZVJhbmdlKEV4Y2VwdGlvbkNvZGUmKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDk0NTAxKQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYg
KzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSBHb29nbGUgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHkuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4MywxMSArNjg0LDkgQEAg
U3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsCiBQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IFN0cmluZyYgbWFya3VwLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIEZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQogewogICAgIC8vIFdlIHVzZSBh
IGZha2UgYm9keSBlbGVtZW50IGhlcmUgdG8gdHJpY2sgdGhlIEhUTUwgcGFyc2VyIHRvIHVzaW5n
IHRoZQotICAgIC8vIEluQm9keSBpbnNlcnRpb24gbW9kZS4gIFJlYWxseSwgYWxsIHRoaXMgY29k
ZSBpcyB3cm9uZyBhbmQgbmVlZCB0byBiZQotICAgIC8vIGNoYW5nZWQgbm90IHRvIHVzZSBkZXBy
ZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50LgorICAgIC8vIEluQm9keSBpbnNlcnRpb24g
bW9kZS4KICAgICBSZWZQdHI8SFRNTEJvZHlFbGVtZW50PiBmYWtlQm9keSA9IEhUTUxCb2R5RWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IHVz
ZSBkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50Ci0gICAgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGZyYWdtZW50ID0gZmFrZUJvZHktPmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFs
RnJhZ21lbnQobWFya3VwLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSAgUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCktPmNyZWF0ZURv
Y3VtZW50RnJhZ21lbnRGb3JFbGVtZW50KG1hcmt1cCwgZmFrZUJvZHkuZ2V0KCksIHNjcmlwdGlu
Z1Blcm1pc3Npb24pOwogCiAgICAgaWYgKGZyYWdtZW50ICYmICFiYXNlVVJMLmlzRW1wdHkoKSAm
JiBiYXNlVVJMICE9IGJsYW5rVVJMKCkgJiYgYmFzZVVSTCAhPSBkb2N1bWVudC0+YmFzZVVSTCgp
KQogICAgICAgICBjb21wbGV0ZVVSTHMoZnJhZ21lbnQuZ2V0KCksIGJhc2VVUkwpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9uIDk0NTAxKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMCwyMCAr
MzAwLDYgQEAgU3RyaW5nIEhUTUxFbGVtZW50OjpvdXRlckhUTUwoKSBjb25zdAogICAgIHJldHVy
biBjcmVhdGVNYXJrdXAodGhpcyk7CiB9CiAKLS8vIEZJWE1FOiBUaGlzIGxvZ2ljIHNob3VsZCBt
b3ZlIGludG8gUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudAotUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFn
bWVudChjb25zdCBTdHJpbmcmIG1hcmt1cCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNj
cmlwdGluZ1Blcm1pc3Npb24pCi17Ci0gICAgLy8gVGhlIGZvbGxvd2luZyBpcyBpbiBhY2NvcmRh
bmNlIHdpdGggdGhlIGRlZmluaXRpb24gYXMgdXNlZCBieSBJRS4KLSAgICBpZiAoaWVGb3JiaWRz
SW5zZXJ0SFRNTCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChoYXNMb2NhbE5hbWUo
Y29sVGFnKSB8fCBoYXNMb2NhbE5hbWUoY29sZ3JvdXBUYWcpIHx8IGhhc0xvY2FsTmFtZShmcmFt
ZXNldFRhZykKLSAgICAgICAgfHwgaGFzTG9jYWxOYW1lKGhlYWRUYWcpIHx8IGhhc0xvY2FsTmFt
ZShzdHlsZVRhZykgfHwgaGFzTG9jYWxOYW1lKHRpdGxlVGFnKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVu
dChtYXJrdXAsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wg
aGFzT25lQ2hpbGQoQ29udGFpbmVyTm9kZSogbm9kZSkKIHsKICAgICBOb2RlKiBmaXJzdENoaWxk
ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAko
cmV2aXNpb24gOTQ1MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDYgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGlubmVy
SFRNTCgpIGNvbnN0OwogICAgIFN0cmluZyBvdXRlckhUTUwoKSBjb25zdDsKLSAgICAvLyBkZXBy
ZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IGxvZ2ljIHNob3VsZCBiZSBtb3ZlZCBpbnRv
IFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5n
JiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2Vk
KTsKICAgICB2b2lkIHNldElubmVySFRNTChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7
CiAgICAgdm9pZCBzZXRPdXRlckhUTUwoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZvaWQgc2V0SW5uZXJUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NDUwMSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDktMDMgIEthdXN0
dWJoIEF0cmF3YWxrYXIgIDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgTG9naWMg
ZnJvbSBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBtb3Zl
ZCBpbnRvCisgICAgICAgIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgZnVuY3Rpb24u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvZGUgUmVm
YWN0b3JpbmcgZm9yIGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQuCisKKyAgICAg
ICAgKiBBcGkvcXdlYmVsZW1lbnQuY3BwOgorICAgICAgICAoUVdlYkVsZW1lbnQ6OmFwcGVuZElu
c2lkZSk6CisgICAgICAgIChRV2ViRWxlbWVudDo6cHJlcGVuZEluc2lkZSk6CisgICAgICAgIChR
V2ViRWxlbWVudDo6cHJlcGVuZE91dHNpZGUpOgorICAgICAgICAoUVdlYkVsZW1lbnQ6OmFwcGVu
ZE91dHNpZGUpOgorICAgICAgICAoUVdlYkVsZW1lbnQ6OmVuY2xvc2VDb250ZW50c1dpdGgpOgor
ICAgICAgICAoUVdlYkVsZW1lbnQ6OmVuY2xvc2VXaXRoKToKKwogMjAxMS0wOS0wMyAgTGFzemxv
IEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lP
TiAocjg2MjY4KTogRml4IGZvciBxdF9uZXR3b3JrQWNjZXNzQWxsb3dlZCgpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCShyZXZpc2lvbiA5NDUwMSkKKysrIFNvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyMiw4ICsx
MDIyLDEwIEBAIHZvaWQgUVdlYkVsZW1lbnQ6OmFwcGVuZEluc2lkZShjb25zdCBRU3QKICAgICBp
ZiAoIW1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBI
VE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1fZWxl
bWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gaHRtbEVsZW1l
bnQtPkVsZW1lbnQ6OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsK
KyAgICBpZiAoIW1fZWxlbWVudC0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gIFJhbmdlOjpjcmVhdGUobV9lbGVt
ZW50LT5kb2N1bWVudCgpKS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQobWFya3Vw
LCB0b0hUTUxFbGVtZW50KG1fZWxlbWVudCkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRp
b24gPSAwOwogICAgIG1fZWxlbWVudC0+YXBwZW5kQ2hpbGQoZnJhZ21lbnQsIGV4Y2VwdGlvbik7
CkBAIC0xMDY4LDggKzEwNzAsMTAgQEAgdm9pZCBRV2ViRWxlbWVudDo6cHJlcGVuZEluc2lkZShj
b25zdCBRUwogICAgIGlmICghbV9lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4obV9lbGVtZW50KTsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPSBodG1sRWxlbWVudC0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJr
dXApOworICAgIGlmICghbV9lbGVtZW50LT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAgUmFuZ2U6OmNyZWF0ZSht
X2VsZW1lbnQtPmRvY3VtZW50KCkpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVudCht
YXJrdXAsIHRvSFRNTEVsZW1lbnQobV9lbGVtZW50KSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGV4
Y2VwdGlvbiA9IDA7CiAKQEAgLTExMjAsOCArMTEyNCwxMCBAQCB2b2lkIFFXZWJFbGVtZW50Ojpw
cmVwZW5kT3V0c2lkZShjb25zdCBRCiAgICAgaWYgKCFtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihtX2VsZW1lbnQpOwotICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IGh0bWxFbGVtZW50LT5kZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVh
bEZyYWdtZW50KG1hcmt1cCk7CisgICAgaWYgKCFtX2VsZW1lbnQtPmRvY3VtZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9ICBS
YW5nZTo6Y3JlYXRlKG1fZWxlbWVudC0+ZG9jdW1lbnQoKSktPmNyZWF0ZURvY3VtZW50RnJhZ21l
bnRGb3JFbGVtZW50KG1hcmt1cCwgdG9IVE1MRWxlbWVudChtX2VsZW1lbnQpKTsKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKICAgICBtX2VsZW1lbnQtPnBhcmVudE5vZGUoKS0+
aW5zZXJ0QmVmb3JlKGZyYWdtZW50LCBtX2VsZW1lbnQsIGV4Y2VwdGlvbik7CkBAIC0xMTcwLDgg
KzExNzYsMTAgQEAgdm9pZCBRV2ViRWxlbWVudDo6YXBwZW5kT3V0c2lkZShjb25zdCBRUwogICAg
IGlmICghbV9lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9l
bGVtZW50KTsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBodG1sRWxl
bWVudC0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIGlm
ICghbV9lbGVtZW50LT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAgUmFuZ2U6OmNyZWF0ZShtX2VsZW1lbnQtPmRv
Y3VtZW50KCkpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVudChtYXJrdXAsIHRvSFRN
TEVsZW1lbnQobV9lbGVtZW50KSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbiA9IDA7
CiAgICAgaWYgKCFtX2VsZW1lbnQtPm5leHRTaWJsaW5nKCkpCkBAIC0xMzE3LDggKzEzMjUsMTAg
QEAgdm9pZCBRV2ViRWxlbWVudDo6ZW5jbG9zZUNvbnRlbnRzV2l0aChjbwogICAgIGlmICghbV9l
bGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxFbGVt
ZW50KiBodG1sRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9lbGVtZW50KTsK
LSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBodG1sRWxlbWVudC0+ZGVw
cmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIGlmICghbV9lbGVt
ZW50LT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gZnJhZ21lbnQgPSAgUmFuZ2U6OmNyZWF0ZShtX2VsZW1lbnQtPmRvY3VtZW50KCkp
LT5jcmVhdGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVudChtYXJrdXAsIHRvSFRNTEVsZW1lbnQo
bV9lbGVtZW50KSk7CiAKICAgICBpZiAoIWZyYWdtZW50IHx8ICFmcmFnbWVudC0+Zmlyc3RDaGls
ZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzkyLDggKzE0MDIsMTAgQEAgdm9pZCBRV2ViRWxl
bWVudDo6ZW5jbG9zZVdpdGgoY29uc3QgUVN0cgogICAgIGlmICghbV9lbGVtZW50LT5pc0hUTUxF
bGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxFbGVtZW50KiBodG1sRWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9lbGVtZW50KTsKLSAgICBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBodG1sRWxlbWVudC0+ZGVwcmVjYXRlZENyZWF0ZUNv
bnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIGlmICghbV9lbGVtZW50LT5kb2N1bWVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPSAgUmFuZ2U6OmNyZWF0ZShtX2VsZW1lbnQtPmRvY3VtZW50KCkpLT5jcmVhdGVEb2N1bWVu
dEZyYWdtZW50Rm9yRWxlbWVudChtYXJrdXAsIHRvSFRNTEVsZW1lbnQobV9lbGVtZW50KSk7CiAK
ICAgICBpZiAoIWZyYWdtZW50IHx8ICFmcmFnbWVudC0+Zmlyc3RDaGlsZCgpKQogICAgICAgICBy
ZXR1cm47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106290</attachid>
            <date>2011-09-04 11:51:51 -0700</date>
            <delta_ts>2011-09-04 23:15:14 -0700</delta_ts>
            <desc>Patch after getting in Ryosuke&apos;s comments</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>16943</size>
            <attacher name="Kaustubh Atrawalkar">kaustubh.ra</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NTA0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDktMDMgIEthdXN0dWJo
IEF0cmF3YWxrYXIgIDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgTG9naWMgZnJv
bSBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBtb3ZlZCBp
bnRvCisgICAgICAgIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgZnVuY3Rpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA1NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvZGUgUmVmYWN0
b3JpbmcgZm9yIGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBDb2RlIFJlLWZhY3RvcmluZy4KKworICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVFbGVtZW50UHJlc2VydmluZ0NoaWxkcmVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjcmVhdGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KToKKyAg
ICAgICAgKiBkb20vUmFuZ2UuaDoKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVGcmFnbWVudEZyb21NYXJrdXApOgorICAgICAgICAqIGh0bWwv
SFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoKKwogMjAxMS0w
OS0wNCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFtDaHJvbWl1
bV0gQWRkIG1lbW9yeSB0aHJlc2hvbGQgdmFsdWVzIHRvIFdlYktpdFBsYXRmb3JtU3VwcG9ydC5o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA5NDUwNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDQ4ICsxNDEsNiBA
QCBERUZJTkVfVklSVFVBTF9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoCiBERUZJTkVfVklSVFVB
TF9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoRWxlbWVudCwgZm9jdXMpOwogREVGSU5FX1ZJUlRV
QUxfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKEVsZW1lbnQsIGxvYWQpOwogCi1QYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IEVsZW1lbnQ6OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJh
Z21lbnQoY29uc3QgU3RyaW5nJiBtYXJrdXAsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBz
Y3JpcHRpbmdQZXJtaXNzaW9uKQotewotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQotICAgIGlmIChk
b2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBmcmFnbWVudC0+cGFyc2VIVE1M
KG1hcmt1cCwgdGhpcywgc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IGlmICghZnJhZ21lbnQtPnBhcnNlWE1MKG1hcmt1cCwgdGhpcywgc2NyaXB0aW5nUGVybWlzc2lv
bikpCi0gICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb3BhZ2F0ZSBhIHN5bnRheCBl
cnJvciBleGNlcHRpb24gb3V0IGhlcmUuCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICAvLyBFeGNlcHRpb25zIGFyZSBpZ25vcmVkIGJlY2F1c2Ugbm9uZSBvdWdodCB0byBoYXBw
ZW4gaGVyZS4KLSAgICBFeGNlcHRpb25Db2RlIGlnbm9yZWRFeGNlcHRpb25Db2RlOwotCi0gICAg
Ly8gV2UgbmVlZCB0byBwb3AgPGh0bWw+IGFuZCA8Ym9keT4gZWxlbWVudHMgYW5kIHJlbW92ZSA8
aGVhZD4gdG8KLSAgICAvLyBhY2NvbW1vZGF0ZSBmb2xrcyBwYXNzaW5nIGNvbXBsZXRlIEhUTUwg
ZG9jdW1lbnRzIHRvIG1ha2UgdGhlCi0gICAgLy8gY2hpbGQgb2YgYW4gZWxlbWVudC4KLQotICAg
IFJlZlB0cjxOb2RlPiBuZXh0Tm9kZTsKLSAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gZnJh
Z21lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5leHROb2RlKSB7Ci0gICAgICAgIG5l
eHROb2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05h
bWUoaHRtbFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShoZWFkVGFnKSB8fCBub2RlLT5oYXNUYWdO
YW1lKGJvZHlUYWcpKSB7Ci0gICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRN
TEVsZW1lbnQobm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICBOb2RlKiBmaXJzdENoaWxkID0gZWxl
bWVudC0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQpCi0gICAgICAg
ICAgICAgICAgbmV4dE5vZGUgPSBmaXJzdENoaWxkOwotICAgICAgICAgICAgUmVmUHRyPE5vZGU+
IG5leHRDaGlsZDsKLSAgICAgICAgICAgIGZvciAoUmVmUHRyPE5vZGU+IGNoaWxkID0gZmlyc3RD
aGlsZDsgY2hpbGQ7IGNoaWxkID0gbmV4dENoaWxkKSB7Ci0gICAgICAgICAgICAgICAgbmV4dENo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC0+cmVt
b3ZlQ2hpbGQoY2hpbGQuZ2V0KCksIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoIWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgICAgICBmcmFn
bWVudC0+aW5zZXJ0QmVmb3JlKGNoaWxkLCBlbGVtZW50LCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBmcmFnbWVudC0+cmVtb3ZlQ2hpbGQoZWxlbWVudCwgaWdub3Jl
ZEV4Y2VwdGlvbkNvZGUpOwotICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVkRXhjZXB0aW9uQ29k
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKLX0K
LQogUGFzc1JlZlB0cjxOb2RlPiBFbGVtZW50OjpjbG9uZU5vZGUoYm9vbCBkZWVwKQogewogICAg
IHJldHVybiBkZWVwID8gY2xvbmVFbGVtZW50V2l0aENoaWxkcmVuKCkgOiBjbG9uZUVsZW1lbnRX
aXRob3V0Q2hpbGRyZW4oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkocmV2aXNpb24gOTQ1MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgs
OCArMTA4LDYgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIo
d2Via2l0ZnVsbHNjcmVlbmNoYW5nZSk7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNv
bnN0IFN0cmluZyYsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0
aW5nQWxsb3dlZCk7Ci0KICAgICBib29sIGhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JikgY29uc3Q7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBnZXRBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIGNvbnN0OwogICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9uIDk0NTA0KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICAqIChDKSAyMDAwIEZy
ZWRlcmlrIEhvbGxqZW4gKGZyZWRlcmlrLmhvbGxqZW5AaGlnLm5vKQogICogKEMpIDIwMDEgUGV0
ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHkuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDYgKzMzLDggQEAKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1
ZGUgIk5vZGVXaXRoSW5kZXguaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUHJvY2Vz
c2luZ0luc3RydWN0aW9uLmgiCkBAIC01Myw2ICs1Niw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAj
aWZuZGVmIE5ERUJVRwogc3RhdGljIFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyIHJhbmdlQ291
bnRlcigiUmFuZ2UiKTsKQEAgLTEwOTMsNyArMTA5Nyw1OSBAQCBTdHJpbmcgUmFuZ2U6OnRleHQo
KSBjb25zdAogICAgIHJldHVybiBwbGFpblRleHQodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJp
bmcmIG1hcmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitzdGF0aWMgaW5saW5lIHZvaWQg
cmVtb3ZlRWxlbWVudFByZXNlcnZpbmdDaGlsZHJlbihQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50LCBIVE1MRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBFeGNlcHRpb25Db2Rl
IGlnbm9yZWRFeGNlcHRpb25Db2RlOworCisgICAgUmVmUHRyPE5vZGU+IG5leHRDaGlsZDsKKyAg
ICBmb3IgKFJlZlB0cjxOb2RlPiBjaGlsZCA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gbmV4dENoaWxkKSB7CisgICAgICAgIG5leHRDaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpOworICAgICAgICBlbGVtZW50LT5yZW1vdmVDaGlsZChjaGlsZC5nZXQoKSwgaWdub3Jl
ZEV4Y2VwdGlvbkNvZGUpOworICAgICAgICBBU1NFUlQoIWlnbm9yZWRFeGNlcHRpb25Db2RlKTsK
KyAgICAgICAgZnJhZ21lbnQtPmluc2VydEJlZm9yZShjaGlsZCwgZWxlbWVudCwgaWdub3JlZEV4
Y2VwdGlvbkNvZGUpOworICAgICAgICBBU1NFUlQoIWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKKyAg
ICB9CisgICAgZnJhZ21lbnQtPnJlbW92ZUNoaWxkKGVsZW1lbnQsIGlnbm9yZWRFeGNlcHRpb25D
b2RlKTsKKyAgICBBU1NFUlQoIWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKK30KKworUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1l
bnQoY29uc3QgU3RyaW5nJiBtYXJrdXAsIEVsZW1lbnQqIGVsZW1lbnQsICBGcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKK3sKKyAgICBBU1NFUlQoZWxlbWVu
dCk7CisgICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gdG9IVE1MRWxlbWVudChlbGVtZW50
KTsKKyAgICBpZiAoaHRtbEVsZW1lbnQtPmllRm9yYmlkc0luc2VydEhUTUwoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBpZiAoaHRtbEVsZW1lbnQtPmhhc0xvY2FsTmFtZShjb2xUYWcpIHx8
IGh0bWxFbGVtZW50LT5oYXNMb2NhbE5hbWUoY29sZ3JvdXBUYWcpIHx8IGh0bWxFbGVtZW50LT5o
YXNMb2NhbE5hbWUoZnJhbWVzZXRUYWcpCisgICAgICAgIHx8IGh0bWxFbGVtZW50LT5oYXNMb2Nh
bE5hbWUoaGVhZFRhZykgfHwgaHRtbEVsZW1lbnQtPmhhc0xvY2FsTmFtZShzdHlsZVRhZykgfHwg
aHRtbEVsZW1lbnQtPmhhc0xvY2FsTmFtZSh0aXRsZVRhZykpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZWxlbWVudC0+ZG9jdW1l
bnQoKS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworCisgICAgaWYgKGVsZW1lbnQtPmRvY3Vt
ZW50KCktPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIGZyYWdtZW50LT5wYXJzZUhUTUwobWFy
a3VwLCBlbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBlbHNlIGlmICghZnJhZ21l
bnQtPnBhcnNlWE1MKG1hcmt1cCwgZWxlbWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbikpCisgICAg
ICAgICAgICByZXR1cm4gMDsgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9wYWdhdGUgYSBzeW50YXgg
ZXJyb3IgZXhjZXB0aW9uIG91dCBoZXJlLgorCisgICAgLy8gV2UgbmVlZCB0byBwb3AgPGh0bWw+
IGFuZCA8Ym9keT4gZWxlbWVudHMgYW5kIHJlbW92ZSA8aGVhZD4gdG8KKyAgICAvLyBhY2NvbW1v
ZGF0ZSBmb2xrcyBwYXNzaW5nIGNvbXBsZXRlIEhUTUwgZG9jdW1lbnRzIHRvIG1ha2UgdGhlCisg
ICAgLy8gY2hpbGQgb2YgYW4gZWxlbWVudC4KKworICAgIFJlZlB0cjxOb2RlPiBuZXh0Tm9kZTsK
KyAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKTsgbm9k
ZTsgbm9kZSA9IG5leHROb2RlKSB7CisgICAgICAgIG5leHROb2RlID0gbm9kZS0+bmV4dFNpYmxp
bmcoKTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaHRtbFRhZykgfHwgbm9kZS0+aGFz
VGFnTmFtZShoZWFkVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSB7CisgICAgICAg
ICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQobm9kZS5nZXQoKSk7Cisg
ICAgICAgICAgICBOb2RlKiBmaXJzdENoaWxkID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgpOworICAg
ICAgICAgICAgaWYgKGZpcnN0Q2hpbGQpCisgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBmaXJz
dENoaWxkOworICAgICAgICAgICAgcmVtb3ZlRWxlbWVudFByZXNlcnZpbmdDaGlsZHJlbihmcmFn
bWVudCwgZWxlbWVudCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZyYWdtZW50LnJl
bGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6Y3JlYXRl
Q29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwLCBFeGNlcHRpb25Db2RlJiBl
YywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCiB7CiAg
ICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcigpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFU
RV9FUlI7CkBAIC0xMTA2LDEwICsxMTYyLDggQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBSYW5nZTo6Y3JlYQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAvLyBMb2dpYyBm
cm9tIGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgc2hvdWxkIGp1c3QgYmUgbW92
ZWQgaW50bwotICAgIC8vIHRoaXMgZnVuY3Rpb24uICBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZy
YWdtZW50IHNlbWFudGljcyBkbyBub3QgbWFrZQotICAgIC8vIHNlbnNlIGZvciB0aGUgcmVzdCBv
ZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIHRvIHVzZS4KLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gZnJhZ21lbnQgPSB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5kZXByZWNhdGVkQ3JlYXRl
Q29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50ID0gY3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQobWFya3VwLCB0b0Vs
ZW1lbnQoZWxlbWVudCksIHNjcmlwdGluZ1Blcm1pc3Npb24pOworCiAgICAgaWYgKCFmcmFnbWVu
dCkgewogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm4gMDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5oCShyZXZpc2lvbiA5NDUwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlJhbmdlQm91bmRhcnlQb2ludC5oIgpAQCAt
ODgsNyArODksOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRvSFRNTCgpIGNvbnN0OwogICAgIFN0
cmluZyB0ZXh0KCkgY29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNy
ZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlvbkNvZGUm
KSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUNvbnRleHR1
YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlvbkNvZGUmLCBGcmFnbWVudFNj
cmlwdGluZ1Blcm1pc3Npb24gPSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JF
bGVtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwLCBFbGVtZW50KiwgIEZyYWdtZW50U2NyaXB0aW5n
UGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7CiAKICAgICB2b2lkIGRldGFj
aChFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gY2xvbmVSYW5nZShFeGNl
cHRpb25Db2RlJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZp
c2lvbiA5NDUwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAx
MSBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
ODMsMTEgKzY4NCw5IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLAog
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgU3RyaW5nJiBiYXNl
VVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKIHsK
ICAgICAvLyBXZSB1c2UgYSBmYWtlIGJvZHkgZWxlbWVudCBoZXJlIHRvIHRyaWNrIHRoZSBIVE1M
IHBhcnNlciB0byB1c2luZyB0aGUKLSAgICAvLyBJbkJvZHkgaW5zZXJ0aW9uIG1vZGUuICBSZWFs
bHksIGFsbCB0aGlzIGNvZGUgaXMgd3JvbmcgYW5kIG5lZWQgdG8gYmUKLSAgICAvLyBjaGFuZ2Vk
IG5vdCB0byB1c2UgZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudC4KKyAgICAvLyBJ
bkJvZHkgaW5zZXJ0aW9uIG1vZGUuCiAgICAgUmVmUHRyPEhUTUxCb2R5RWxlbWVudD4gZmFrZUJv
ZHkgPSBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7Ci0gICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIG5vdCB1c2UgZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudAotICAg
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGZha2VCb2R5LT5kZXByZWNhdGVk
Q3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCwgc2NyaXB0aW5nUGVybWlzc2lvbik7Cisg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gIFJhbmdlOjpjcmVhdGVEb2N1
bWVudEZyYWdtZW50Rm9yRWxlbWVudChtYXJrdXAsIGZha2VCb2R5LmdldCgpLCBzY3JpcHRpbmdQ
ZXJtaXNzaW9uKTsKIAogICAgIGlmIChmcmFnbWVudCAmJiAhYmFzZVVSTC5pc0VtcHR5KCkgJiYg
YmFzZVVSTCAhPSBibGFua1VSTCgpICYmIGJhc2VVUkwgIT0gZG9jdW1lbnQtPmJhc2VVUkwoKSkK
ICAgICAgICAgY29tcGxldGVVUkxzKGZyYWdtZW50LmdldCgpLCBiYXNlVVJMKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5NDUwNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsMjAgKzMw
MCw2IEBAIFN0cmluZyBIVE1MRWxlbWVudDo6b3V0ZXJIVE1MKCkgY29uc3QKICAgICByZXR1cm4g
Y3JlYXRlTWFya3VwKHRoaXMpOwogfQogCi0vLyBGSVhNRTogVGhpcyBsb2dpYyBzaG91bGQgbW92
ZSBpbnRvIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQKLVBhc3NSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gSFRNTEVsZW1lbnQ6OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21l
bnQoY29uc3QgU3RyaW5nJiBtYXJrdXAsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3Jp
cHRpbmdQZXJtaXNzaW9uKQotewotICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgaW4gYWNjb3JkYW5j
ZSB3aXRoIHRoZSBkZWZpbml0aW9uIGFzIHVzZWQgYnkgSUUuCi0gICAgaWYgKGllRm9yYmlkc0lu
c2VydEhUTUwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoaGFzTG9jYWxOYW1lKGNv
bFRhZykgfHwgaGFzTG9jYWxOYW1lKGNvbGdyb3VwVGFnKSB8fCBoYXNMb2NhbE5hbWUoZnJhbWVz
ZXRUYWcpCi0gICAgICAgIHx8IGhhc0xvY2FsTmFtZShoZWFkVGFnKSB8fCBoYXNMb2NhbE5hbWUo
c3R5bGVUYWcpIHx8IGhhc0xvY2FsTmFtZSh0aXRsZVRhZykpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIEVsZW1lbnQ6OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQo
bWFya3VwLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGhh
c09uZUNoaWxkKENvbnRhaW5lck5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZSogZmlyc3RDaGlsZCA9
IG5vZGUtPmZpcnN0Q2hpbGQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHJl
dmlzaW9uIDk0NTA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw4ICs0NCw2IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBpbm5lckhU
TUwoKSBjb25zdDsKICAgICBTdHJpbmcgb3V0ZXJIVE1MKCkgY29uc3Q7Ci0gICAgLy8gZGVwcmVj
YXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBsb2dpYyBzaG91bGQgYmUgbW92ZWQgaW50byBS
YW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50Ci0gICAgUGFzc1JlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYs
IEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7
CiAgICAgdm9pZCBzZXRJbm5lckhUTUwoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZvaWQgc2V0T3V0ZXJIVE1MKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICB2b2lkIHNldElubmVyVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gOTQ1MDQpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDExLTA5LTAzICBLYXVzdHVi
aCBBdHJhd2Fsa2FyICA8a2F1c3R1YmhAbW90b3JvbGEuY29tPgorCisgICAgICAgIExvZ2ljIGZy
b20gSFRNTEVsZW1lbnQ6OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgbW92ZWQg
aW50bworICAgICAgICBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IGZ1bmN0aW9uLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcwNTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb2RlIFJlZmFj
dG9yaW5nIGZvciBkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50LgorCisgICAgICAg
ICogQXBpL3F3ZWJlbGVtZW50LmNwcDoKKyAgICAgICAgKFFXZWJFbGVtZW50OjphcHBlbmRJbnNp
ZGUpOgorICAgICAgICAoUVdlYkVsZW1lbnQ6OnByZXBlbmRJbnNpZGUpOgorICAgICAgICAoUVdl
YkVsZW1lbnQ6OnByZXBlbmRPdXRzaWRlKToKKyAgICAgICAgKFFXZWJFbGVtZW50OjphcHBlbmRP
dXRzaWRlKToKKyAgICAgICAgKFFXZWJFbGVtZW50OjplbmNsb3NlQ29udGVudHNXaXRoKToKKyAg
ICAgICAgKFFXZWJFbGVtZW50OjplbmNsb3NlV2l0aCk6CisKIDIwMTEtMDktMDMgIExhc3psbyBH
b21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04g
KHI4NjI2OCk6IEZpeCBmb3IgcXRfbmV0d29ya0FjY2Vzc0FsbG93ZWQoKQpJbmRleDogU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAkocmV2aXNpb24gOTQ1MDQpCisrKyBTb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjIsOCArMTAy
Miw3IEBAIHZvaWQgUVdlYkVsZW1lbnQ6OmFwcGVuZEluc2lkZShjb25zdCBRU3QKICAgICBpZiAo
IW1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIVE1M
RWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1fZWxlbWVu
dCk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gaHRtbEVsZW1lbnQt
PkVsZW1lbnQ6OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKKyAg
ICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAgUmFuZ2U6OmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnRGb3JFbGVtZW50KG1hcmt1cCwgdG9IVE1MRWxlbWVudChtX2VsZW1lbnQpKTsK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKICAgICBtX2VsZW1lbnQtPmFwcGVu
ZENoaWxkKGZyYWdtZW50LCBleGNlcHRpb24pOwpAQCAtMTA2OCw4ICsxMDY3LDcgQEAgdm9pZCBR
V2ViRWxlbWVudDo6cHJlcGVuZEluc2lkZShjb25zdCBRUwogICAgIGlmICghbV9lbGVtZW50LT5p
c0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxFbGVtZW50KiBodG1s
RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9lbGVtZW50KTsKLSAgICBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBodG1sRWxlbWVudC0+ZGVwcmVjYXRlZENy
ZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBmcmFnbWVudCA9ICBSYW5nZTo6Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQo
bWFya3VwLCB0b0hUTUxFbGVtZW50KG1fZWxlbWVudCkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBl
eGNlcHRpb24gPSAwOwogCkBAIC0xMTIwLDggKzExMTgsNyBAQCB2b2lkIFFXZWJFbGVtZW50Ojpw
cmVwZW5kT3V0c2lkZShjb25zdCBRCiAgICAgaWYgKCFtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihtX2VsZW1lbnQpOwotICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IGh0bWxFbGVtZW50LT5kZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVh
bEZyYWdtZW50KG1hcmt1cCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gIFJhbmdlOjpjcmVhdGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVudChtYXJrdXAsIHRvSFRN
TEVsZW1lbnQobV9lbGVtZW50KSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbiA9IDA7
CiAgICAgbV9lbGVtZW50LT5wYXJlbnROb2RlKCktPmluc2VydEJlZm9yZShmcmFnbWVudCwgbV9l
bGVtZW50LCBleGNlcHRpb24pOwpAQCAtMTE3MCw4ICsxMTY3LDcgQEAgdm9pZCBRV2ViRWxlbWVu
dDo6YXBwZW5kT3V0c2lkZShjb25zdCBRUwogICAgIGlmICghbV9lbGVtZW50LT5pc0hUTUxFbGVt
ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9lbGVtZW50KTsKLSAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBodG1sRWxlbWVudC0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRl
eHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9ICBSYW5nZTo6Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQobWFya3VwLCB0
b0hUTUxFbGVtZW50KG1fZWxlbWVudCkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24g
PSAwOwogICAgIGlmICghbV9lbGVtZW50LT5uZXh0U2libGluZygpKQpAQCAtMTMxNyw4ICsxMzEz
LDcgQEAgdm9pZCBRV2ViRWxlbWVudDo6ZW5jbG9zZUNvbnRlbnRzV2l0aChjbwogICAgIGlmICgh
bV9lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxF
bGVtZW50KiBodG1sRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9lbGVtZW50
KTsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBodG1sRWxlbWVudC0+
ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9ICBSYW5nZTo6Y3JlYXRlRG9jdW1lbnRGcmFnbWVu
dEZvckVsZW1lbnQobWFya3VwLCB0b0hUTUxFbGVtZW50KG1fZWxlbWVudCkpOwogCiAgICAgaWYg
KCFmcmFnbWVudCB8fCAhZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTM5Miw4ICsxMzg3LDcgQEAgdm9pZCBRV2ViRWxlbWVudDo6ZW5jbG9zZVdpdGgoY29uc3Qg
UVN0cgogICAgIGlmICghbV9lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50Kj4obV9lbGVtZW50KTsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBodG1sRWxlbWVudC0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXAp
OworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9ICBSYW5nZTo6Y3JlYXRl
RG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQobWFya3VwLCB0b0hUTUxFbGVtZW50KG1fZWxlbWVu
dCkpOwogCiAgICAgaWYgKCFmcmFnbWVudCB8fCAhZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSkKICAg
ICAgICAgcmV0dXJuOwo=
</data>
<flag name="review"
          id="102682"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106307</attachid>
            <date>2011-09-04 23:15:14 -0700</date>
            <delta_ts>2011-09-04 23:29:17 -0700</delta_ts>
            <desc>Final Updated patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>16953</size>
            <attacher name="Kaustubh Atrawalkar">kaustubh.ra</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NTEyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDktMDMgIEthdXN0dWJo
IEF0cmF3YWxrYXIgIDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgTG9naWMgZnJv
bSBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBtb3ZlZCBp
bnRvCisgICAgICAgIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgZnVuY3Rpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA1NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvZGUgUmVmYWN0
b3JpbmcgZm9yIGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBDb2RlIFJlLWZhY3RvcmluZy4KKworICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjppbnNlcnRJbnRvRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQpOgorICAgICAgICAqIGRvbS9S
YW5nZS5oOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5j
cHA6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOgorCiAyMDExLTA5LTA0ICBBYmhpc2hl
ayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQ29t
cGlsZSBmaXggZm9yIHI5NDUxMS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9u
IDk0NTEyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDEsNDggKzE0MSw2IEBAIERFRklORV9WSVJUVUFMX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUigKIERFRklORV9WSVJUVUFMX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihFbGVtZW50LCBm
b2N1cyk7CiBERUZJTkVfVklSVFVBTF9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoRWxlbWVudCwg
bG9hZCk7CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWxlbWVudDo6ZGVwcmVjYXRl
ZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIG1hcmt1cCwgRnJhZ21lbnRT
Y3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCi17Ci0gICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRG9jdW1lbnRGcmFn
bWVudCgpOwotCi0gICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAg
IGZyYWdtZW50LT5wYXJzZUhUTUwobWFya3VwLCB0aGlzLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFmcmFnbWVudC0+cGFyc2VYTUwobWFya3VwLCB0aGlz
LCBzY3JpcHRpbmdQZXJtaXNzaW9uKSkKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
cHJvcGFnYXRlIGEgc3ludGF4IGVycm9yIGV4Y2VwdGlvbiBvdXQgaGVyZS4KLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIEV4Y2VwdGlvbnMgYXJlIGlnbm9yZWQgYmVjYXVz
ZSBub25lIG91Z2h0IHRvIGhhcHBlbiBoZXJlLgotICAgIEV4Y2VwdGlvbkNvZGUgaWdub3JlZEV4
Y2VwdGlvbkNvZGU7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIHBvcCA8aHRtbD4gYW5kIDxib2R5PiBl
bGVtZW50cyBhbmQgcmVtb3ZlIDxoZWFkPiB0bwotICAgIC8vIGFjY29tbW9kYXRlIGZvbGtzIHBh
c3NpbmcgY29tcGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFrZSB0aGUKLSAgICAvLyBjaGlsZCBv
ZiBhbiBlbGVtZW50LgotCi0gICAgUmVmUHRyPE5vZGU+IG5leHROb2RlOwotICAgIGZvciAoUmVm
UHRyPE5vZGU+IG5vZGUgPSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbmV4
dE5vZGUpIHsKLSAgICAgICAgbmV4dE5vZGUgPSBub2RlLT5uZXh0U2libGluZygpOwotICAgICAg
ICBpZiAobm9kZS0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGhlYWRU
YWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsKLSAgICAgICAgICAgIEhUTUxFbGVt
ZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlLmdldCgpKTsKLSAgICAgICAgICAgIE5v
ZGUqIGZpcnN0Q2hpbGQgPSBlbGVtZW50LT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICBpZiAo
Zmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IGZpcnN0Q2hpbGQ7Ci0gICAg
ICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dENoaWxkOwotICAgICAgICAgICAgZm9yIChSZWZQdHI8
Tm9kZT4gY2hpbGQgPSBmaXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBuZXh0Q2hpbGQpIHsKLSAg
ICAgICAgICAgICAgICBuZXh0Q2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAg
ICAgICAgICBlbGVtZW50LT5yZW1vdmVDaGlsZChjaGlsZC5nZXQoKSwgaWdub3JlZEV4Y2VwdGlv
bkNvZGUpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwot
ICAgICAgICAgICAgICAgIGZyYWdtZW50LT5pbnNlcnRCZWZvcmUoY2hpbGQsIGVsZW1lbnQsIGln
bm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIWlnbm9yZWRFeGNl
cHRpb25Db2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZyYWdtZW50LT5yZW1vdmVD
aGlsZChlbGVtZW50LCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0gICAgICAgICAgICBBU1NFUlQo
IWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZnJh
Z21lbnQucmVsZWFzZSgpOwotfQotCiBQYXNzUmVmUHRyPE5vZGU+IEVsZW1lbnQ6OmNsb25lTm9k
ZShib29sIGRlZXApCiB7CiAgICAgcmV0dXJuIGRlZXAgPyBjbG9uZUVsZW1lbnRXaXRoQ2hpbGRy
ZW4oKSA6IGNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5oCShyZXZpc2lvbiA5NDUxMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwOCw4ICsxMDgsNiBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0FUVFJJ
QlVURV9FVkVOVF9MSVNURU5FUih3ZWJraXRmdWxsc2NyZWVuY2hhbmdlKTsKICNlbmRpZgogCi0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRlcHJlY2F0ZWRDcmVhdGVD
b250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNz
aW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKLQogICAgIGJvb2wgaGFzQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGdl
dEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CiAgICAgdm9pZCBzZXRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkocmV2aXNpb24gOTQ1MTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQs
NyBAQAogICogKEMpIDIwMDAgRnJlZGVyaWsgSG9sbGplbiAoZnJlZGVyaWsuaG9sbGplbkBoaWcu
bm8pCiAgKiAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBNb3Rvcm9s
YSBNb2JpbGl0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MzIsNiArMzMsOCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZVdpdGhJbmRleC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKQEAgLTUzLDYgKzU2LDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKICNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgV1RGOjpSZWZDb3VudGVk
TGVha0NvdW50ZXIgcmFuZ2VDb3VudGVyKCJSYW5nZSIpOwpAQCAtMTEwMCw3ICsxMTA0LDU4IEBA
IFN0cmluZyBSYW5nZTo6dGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIHBsYWluVGV4dCh0aGlzKTsK
IH0KIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6Y3JlYXRlQ29udGV4dHVh
bEZyYWdtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QK
K3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVFbGVtZW50UHJlc2VydmluZ0NoaWxkcmVuKFBhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQsIEhUTUxFbGVtZW50KiBlbGVtZW50KQor
eworICAgIEV4Y2VwdGlvbkNvZGUgaWdub3JlZEV4Y2VwdGlvbkNvZGU7CisKKyAgICBSZWZQdHI8
Tm9kZT4gbmV4dENoaWxkOworICAgIGZvciAoUmVmUHRyPE5vZGU+IGNoaWxkID0gZWxlbWVudC0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBuZXh0Q2hpbGQpIHsKKyAgICAgICAgbmV4dENo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIGVsZW1lbnQtPnJlbW92ZUNoaWxk
KGNoaWxkLmdldCgpLCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7CisgICAgICAgIEFTU0VSVCghaWdu
b3JlZEV4Y2VwdGlvbkNvZGUpOworICAgICAgICBmcmFnbWVudC0+aW5zZXJ0QmVmb3JlKGNoaWxk
LCBlbGVtZW50LCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7CisgICAgICAgIEFTU0VSVCghaWdub3Jl
ZEV4Y2VwdGlvbkNvZGUpOworICAgIH0KKyAgICBmcmFnbWVudC0+cmVtb3ZlQ2hpbGQoZWxlbWVu
dCwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOworICAgIEFTU0VSVCghaWdub3JlZEV4Y2VwdGlvbkNv
ZGUpOworfQorCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpjcmVhdGVEb2N1
bWVudEZyYWdtZW50Rm9yRWxlbWVudChjb25zdCBTdHJpbmcmIG1hcmt1cCwgRWxlbWVudCogZWxl
bWVudCwgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQor
eworICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSB0
b0hUTUxFbGVtZW50KGVsZW1lbnQpOworICAgIGlmIChodG1sRWxlbWVudC0+aWVGb3JiaWRzSW5z
ZXJ0SFRNTCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChodG1sRWxlbWVudC0+aGFz
TG9jYWxOYW1lKGNvbFRhZykgfHwgaHRtbEVsZW1lbnQtPmhhc0xvY2FsTmFtZShjb2xncm91cFRh
ZykgfHwgaHRtbEVsZW1lbnQtPmhhc0xvY2FsTmFtZShmcmFtZXNldFRhZykKKyAgICAgICAgfHwg
aHRtbEVsZW1lbnQtPmhhc0xvY2FsTmFtZShoZWFkVGFnKSB8fCBodG1sRWxlbWVudC0+aGFzTG9j
YWxOYW1lKHN0eWxlVGFnKSB8fCBodG1sRWxlbWVudC0+aGFzTG9jYWxOYW1lKHRpdGxlVGFnKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisKKyAg
ICBpZiAoZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgZnJh
Z21lbnQtPnBhcnNlSFRNTChtYXJrdXAsIGVsZW1lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwor
ICAgIGVsc2UgaWYgKCFmcmFnbWVudC0+cGFyc2VYTUwobWFya3VwLCBlbGVtZW50LCBzY3JpcHRp
bmdQZXJtaXNzaW9uKSkKKyAgICAgICAgICAgIHJldHVybiAwOyAvLyBGSVhNRTogV2Ugc2hvdWxk
IHByb3BhZ2F0ZSBhIHN5bnRheCBlcnJvciBleGNlcHRpb24gb3V0IGhlcmUuCisKKyAgICAvLyBX
ZSBuZWVkIHRvIHBvcCA8aHRtbD4gYW5kIDxib2R5PiBlbGVtZW50cyBhbmQgcmVtb3ZlIDxoZWFk
PiB0bworICAgIC8vIGFjY29tbW9kYXRlIGZvbGtzIHBhc3NpbmcgY29tcGxldGUgSFRNTCBkb2N1
bWVudHMgdG8gbWFrZSB0aGUKKyAgICAvLyBjaGlsZCBvZiBhbiBlbGVtZW50LgorCisgICAgUmVm
UHRyPE5vZGU+IG5leHROb2RlOworICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBmcmFnbWVu
dC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbmV4dE5vZGUpIHsKKyAgICAgICAgbmV4dE5v
ZGUgPSBub2RlLT5uZXh0U2libGluZygpOworICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZSho
dG1sVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGhlYWRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUo
Ym9keVRhZykpIHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxl
bWVudChub2RlLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChOb2RlKiBmaXJzdENoaWxkID0gZWxl
bWVudC0+Zmlyc3RDaGlsZCgpKQorICAgICAgICAgICAgICAgIG5leHROb2RlID0gZmlyc3RDaGls
ZDsKKyAgICAgICAgICAgIHJlbW92ZUVsZW1lbnRQcmVzZXJ2aW5nQ2hpbGRyZW4oZnJhZ21lbnQs
IGVsZW1lbnQpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNl
KCk7Cit9CisKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OmNyZWF0ZUNvbnRl
eHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIG1hcmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMsIEZy
YWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQogewogICAgIGlm
ICghbV9zdGFydC5jb250YWluZXIoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJS
OwpAQCAtMTExMywxMCArMTE2OCw4IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUmFu
Z2U6OmNyZWEKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgLy8gTG9naWMgZnJvbSBk
ZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IHNob3VsZCBqdXN0IGJlIG1vdmVkIGlu
dG8KLSAgICAvLyB0aGlzIGZ1bmN0aW9uLiAgUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVu
dCBzZW1hbnRpY3MgZG8gbm90IG1ha2UKLSAgICAvLyBzZW5zZSBmb3IgdGhlIHJlc3Qgb2YgdGhl
IERPTSBpbXBsZW1lbnRhdGlvbiB0byB1c2UuCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50ID0gdG9IVE1MRWxlbWVudChlbGVtZW50KS0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRl
eHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IGNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JFbGVtZW50KG1hcmt1cCwgdG9FbGVtZW50
KGVsZW1lbnQpLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKwogICAgIGlmICghZnJhZ21lbnQpIHsK
ICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuaAkocmV2aXNpb24gOTQ1MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUmFu
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
RnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJSYW5nZUJvdW5kYXJ5UG9pbnQuaCIKQEAgLTg4LDcg
Kzg5LDggQEAgcHVibGljOgogICAgIFN0cmluZyB0b0hUTUwoKSBjb25zdDsKICAgICBTdHJpbmcg
dGV4dCgpIGNvbnN0OwogCi0gICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVD
b250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiBodG1sLCBFeGNlcHRpb25Db2RlJikgY29u
c3Q7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVDb250ZXh0dWFsRnJh
Z21lbnQoY29uc3QgU3RyaW5nJiBodG1sLCBFeGNlcHRpb25Db2RlJiwgRnJhZ21lbnRTY3JpcHRp
bmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVu
dChjb25zdCBTdHJpbmcmIG1hcmt1cCwgRWxlbWVudCosICBGcmFnbWVudFNjcmlwdGluZ1Blcm1p
c3Npb24gPSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOwogCiAgICAgdm9pZCBkZXRhY2goRXhj
ZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IGNsb25lUmFuZ2UoRXhjZXB0aW9u
Q29kZSYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24g
OTQ1MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdh
bGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eS4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgyLDEy
ICs2ODMsOSBAQCBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwKIAogUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgU3RyaW5nJiBiYXNlVVJM
LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKIHsKLSAg
ICAvLyBXZSB1c2UgYSBmYWtlIGJvZHkgZWxlbWVudCBoZXJlIHRvIHRyaWNrIHRoZSBIVE1MIHBh
cnNlciB0byB1c2luZyB0aGUKLSAgICAvLyBJbkJvZHkgaW5zZXJ0aW9uIG1vZGUuICBSZWFsbHks
IGFsbCB0aGlzIGNvZGUgaXMgd3JvbmcgYW5kIG5lZWQgdG8gYmUKLSAgICAvLyBjaGFuZ2VkIG5v
dCB0byB1c2UgZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudC4KKyAgICAvLyBXZSB1
c2UgYSBmYWtlIGJvZHkgZWxlbWVudCBoZXJlIHRvIHRyaWNrIHRoZSBIVE1MIHBhcnNlciB0byB1
c2luZyB0aGUgSW5Cb2R5IGluc2VydGlvbiBtb2RlLgogICAgIFJlZlB0cjxIVE1MQm9keUVsZW1l
bnQ+IGZha2VCb2R5ID0gSFRNTEJvZHlFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwotICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBub3QgdXNlIGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJh
Z21lbnQKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBmYWtlQm9keS0+
ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXAsIHNjcmlwdGluZ1Blcm1p
c3Npb24pOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9ICBSYW5nZTo6
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQobWFya3VwLCBmYWtlQm9keS5nZXQoKSwg
c2NyaXB0aW5nUGVybWlzc2lvbik7CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgIWJhc2VVUkwuaXNF
bXB0eSgpICYmIGJhc2VVUkwgIT0gYmxhbmtVUkwoKSAmJiBiYXNlVVJMICE9IGRvY3VtZW50LT5i
YXNlVVJMKCkpCiAgICAgICAgIGNvbXBsZXRlVVJMcyhmcmFnbWVudC5nZXQoKSwgYmFzZVVSTCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gOTQ1MTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAwLDIwICszMDAsNiBAQCBTdHJpbmcgSFRNTEVsZW1lbnQ6Om91dGVySFRNTCgpIGNvbnN0CiAg
ICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCh0aGlzKTsKIH0KIAotLy8gRklYTUU6IFRoaXMgbG9naWMg
c2hvdWxkIG1vdmUgaW50byBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50Ci1QYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IEhUTUxFbGVtZW50OjpkZXByZWNhdGVkQ3JlYXRlQ29udGV4
dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1p
c3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKLXsKLSAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGlu
IGFjY29yZGFuY2Ugd2l0aCB0aGUgZGVmaW5pdGlvbiBhcyB1c2VkIGJ5IElFLgotICAgIGlmIChp
ZUZvcmJpZHNJbnNlcnRIVE1MKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGhhc0xv
Y2FsTmFtZShjb2xUYWcpIHx8IGhhc0xvY2FsTmFtZShjb2xncm91cFRhZykgfHwgaGFzTG9jYWxO
YW1lKGZyYW1lc2V0VGFnKQotICAgICAgICB8fCBoYXNMb2NhbE5hbWUoaGVhZFRhZykgfHwgaGFz
TG9jYWxOYW1lKHN0eWxlVGFnKSB8fCBoYXNMb2NhbE5hbWUodGl0bGVUYWcpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBFbGVtZW50OjpkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVh
bEZyYWdtZW50KG1hcmt1cCwgc2NyaXB0aW5nUGVybWlzc2lvbik7Ci19Ci0KIHN0YXRpYyBpbmxp
bmUgYm9vbCBoYXNPbmVDaGlsZChDb250YWluZXJOb2RlKiBub2RlKQogewogICAgIE5vZGUqIGZp
cnN0Q2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudC5oCShyZXZpc2lvbiA5NDUxMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsNiBAQCBwdWJsaWM6CiAKICAgICBTdHJp
bmcgaW5uZXJIVE1MKCkgY29uc3Q7CiAgICAgU3RyaW5nIG91dGVySFRNTCgpIGNvbnN0OwotICAg
IC8vIGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgbG9naWMgc2hvdWxkIGJlIG1v
dmVkIGludG8gUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudAotICAgIFBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25z
dCBTdHJpbmcmLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBGcmFnbWVudFNjcmlwdGlu
Z0FsbG93ZWQpOwogICAgIHZvaWQgc2V0SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICB2b2lkIHNldE91dGVySFRNTChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdm9pZCBzZXRJbm5lclRleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29k
ZSYpOwpJbmRleDogU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NTEyKQorKysgU291cmNlL1dlYktp
dC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMS0wOS0w
MyAgS2F1c3R1YmggQXRyYXdhbGthciAgPGthdXN0dWJoQG1vdG9yb2xhLmNvbT4KKworICAgICAg
ICBMb2dpYyBmcm9tIEhUTUxFbGVtZW50OjpkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdt
ZW50IG1vdmVkIGludG8KKyAgICAgICAgUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBm
dW5jdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY3MDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q29kZSBSZWZhY3RvcmluZyBmb3IgZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudC4K
KworICAgICAgICAqIEFwaS9xd2ViZWxlbWVudC5jcHA6CisgICAgICAgIChRV2ViRWxlbWVudDo6
YXBwZW5kSW5zaWRlKToKKyAgICAgICAgKFFXZWJFbGVtZW50OjpwcmVwZW5kSW5zaWRlKToKKyAg
ICAgICAgKFFXZWJFbGVtZW50OjpwcmVwZW5kT3V0c2lkZSk6CisgICAgICAgIChRV2ViRWxlbWVu
dDo6YXBwZW5kT3V0c2lkZSk6CisgICAgICAgIChRV2ViRWxlbWVudDo6ZW5jbG9zZUNvbnRlbnRz
V2l0aCk6CisgICAgICAgIChRV2ViRWxlbWVudDo6ZW5jbG9zZVdpdGgpOgorCiAyMDExLTA5LTAz
ICBMYXN6bG8gR29tYm9zICA8bGFzemxvLjEuZ29tYm9zQG5va2lhLmNvbT4KIAogICAgICAgICBS
RUdSRVNTSU9OIChyODYyNjgpOiBGaXggZm9yIHF0X25ldHdvcmtBY2Nlc3NBbGxvd2VkKCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAJKHJldmlzaW9uIDk0NTEyKQorKysg
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDIyLDggKzEwMjIsNyBAQCB2b2lkIFFXZWJFbGVtZW50OjphcHBlbmRJbnNpZGUoY29uc3QgUVN0
CiAgICAgaWYgKCFtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
PihtX2VsZW1lbnQpOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGh0
bWxFbGVtZW50LT5FbGVtZW50OjpkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG1h
cmt1cCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gIFJhbmdlOjpj
cmVhdGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVudChtYXJrdXAsIHRvSFRNTEVsZW1lbnQobV9l
bGVtZW50KSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbiA9IDA7CiAgICAgbV9lbGVt
ZW50LT5hcHBlbmRDaGlsZChmcmFnbWVudCwgZXhjZXB0aW9uKTsKQEAgLTEwNjgsOCArMTA2Nyw3
IEBAIHZvaWQgUVdlYkVsZW1lbnQ6OnByZXBlbmRJbnNpZGUoY29uc3QgUVMKICAgICBpZiAoIW1f
ZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIVE1MRWxl
bWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1fZWxlbWVudCk7
Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gaHRtbEVsZW1lbnQtPmRl
cHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKKyAgICBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAgUmFuZ2U6OmNyZWF0ZURvY3VtZW50RnJhZ21lbnRG
b3JFbGVtZW50KG1hcmt1cCwgdG9IVE1MRWxlbWVudChtX2VsZW1lbnQpKTsKIAogICAgIEV4Y2Vw
dGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKIApAQCAtMTEyMCw4ICsxMTE4LDcgQEAgdm9pZCBRV2Vi
RWxlbWVudDo6cHJlcGVuZE91dHNpZGUoY29uc3QgUQogICAgIGlmICghbV9lbGVtZW50LT5pc0hU
TUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxFbGVtZW50KiBodG1sRWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9lbGVtZW50KTsKLSAgICBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBodG1sRWxlbWVudC0+ZGVwcmVjYXRlZENyZWF0
ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudCA9ICBSYW5nZTo6Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQobWFy
a3VwLCB0b0hUTUxFbGVtZW50KG1fZWxlbWVudCkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBleGNl
cHRpb24gPSAwOwogICAgIG1fZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5pbnNlcnRCZWZvcmUoZnJh
Z21lbnQsIG1fZWxlbWVudCwgZXhjZXB0aW9uKTsKQEAgLTExNzAsOCArMTE2Nyw3IEBAIHZvaWQg
UVdlYkVsZW1lbnQ6OmFwcGVuZE91dHNpZGUoY29uc3QgUVMKICAgICBpZiAoIW1fZWxlbWVudC0+
aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIVE1MRWxlbWVudCogaHRt
bEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1fZWxlbWVudCk7Ci0gICAgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gaHRtbEVsZW1lbnQtPmRlcHJlY2F0ZWRD
cmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gZnJhZ21lbnQgPSAgUmFuZ2U6OmNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JFbGVtZW50
KG1hcmt1cCwgdG9IVE1MRWxlbWVudChtX2VsZW1lbnQpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUg
ZXhjZXB0aW9uID0gMDsKICAgICBpZiAoIW1fZWxlbWVudC0+bmV4dFNpYmxpbmcoKSkKQEAgLTEz
MTcsOCArMTMxMyw3IEBAIHZvaWQgUVdlYkVsZW1lbnQ6OmVuY2xvc2VDb250ZW50c1dpdGgoY28K
ICAgICBpZiAoIW1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KG1fZWxlbWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gaHRt
bEVsZW1lbnQtPmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3VwKTsKKyAg
ICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAgUmFuZ2U6OmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnRGb3JFbGVtZW50KG1hcmt1cCwgdG9IVE1MRWxlbWVudChtX2VsZW1lbnQpKTsK
IAogICAgIGlmICghZnJhZ21lbnQgfHwgIWZyYWdtZW50LT5maXJzdENoaWxkKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTEzOTIsOCArMTM4Nyw3IEBAIHZvaWQgUVdlYkVsZW1lbnQ6OmVuY2xvc2VX
aXRoKGNvbnN0IFFTdHIKICAgICBpZiAoIW1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KG1fZWxlbWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50ID0gaHRtbEVsZW1lbnQtPmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21l
bnQobWFya3VwKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAgUmFu
Z2U6OmNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JFbGVtZW50KG1hcmt1cCwgdG9IVE1MRWxlbWVu
dChtX2VsZW1lbnQpKTsKIAogICAgIGlmICghZnJhZ21lbnQgfHwgIWZyYWdtZW50LT5maXJzdENo
aWxkKCkpCiAgICAgICAgIHJldHVybjsK
</data>
<flag name="review"
          id="102705"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106308</attachid>
            <date>2011-09-04 23:29:17 -0700</date>
            <delta_ts>2011-09-05 00:46:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>16949</size>
            <attacher name="Kaustubh Atrawalkar">kaustubh.ra</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NTEyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDktMDMgIEthdXN0dWJo
IEF0cmF3YWxrYXIgIDxrYXVzdHViaEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgTG9naWMgZnJv
bSBIVE1MRWxlbWVudDo6ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBtb3ZlZCBp
bnRvCisgICAgICAgIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgZnVuY3Rpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA1NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvZGUgUmVmYWN0
b3JpbmcgZm9yIGRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBDb2RlIFJlLWZhY3RvcmluZy4KKworICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjppbnNlcnRJbnRvRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQpOgorICAgICAgICAqIGRvbS9S
YW5nZS5oOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5j
cHA6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOgorCiAyMDExLTA5LTA0ICBBYmhpc2hl
ayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQ29t
cGlsZSBmaXggZm9yIHI5NDUxMS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9u
IDk0NTEyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDEsNDggKzE0MSw2IEBAIERFRklORV9WSVJUVUFMX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUigKIERFRklORV9WSVJUVUFMX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihFbGVtZW50LCBm
b2N1cyk7CiBERUZJTkVfVklSVFVBTF9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoRWxlbWVudCwg
bG9hZCk7CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWxlbWVudDo6ZGVwcmVjYXRl
ZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIG1hcmt1cCwgRnJhZ21lbnRT
Y3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCi17Ci0gICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRG9jdW1lbnRGcmFn
bWVudCgpOwotCi0gICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAg
IGZyYWdtZW50LT5wYXJzZUhUTUwobWFya3VwLCB0aGlzLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFmcmFnbWVudC0+cGFyc2VYTUwobWFya3VwLCB0aGlz
LCBzY3JpcHRpbmdQZXJtaXNzaW9uKSkKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
cHJvcGFnYXRlIGEgc3ludGF4IGVycm9yIGV4Y2VwdGlvbiBvdXQgaGVyZS4KLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIEV4Y2VwdGlvbnMgYXJlIGlnbm9yZWQgYmVjYXVz
ZSBub25lIG91Z2h0IHRvIGhhcHBlbiBoZXJlLgotICAgIEV4Y2VwdGlvbkNvZGUgaWdub3JlZEV4
Y2VwdGlvbkNvZGU7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIHBvcCA8aHRtbD4gYW5kIDxib2R5PiBl
bGVtZW50cyBhbmQgcmVtb3ZlIDxoZWFkPiB0bwotICAgIC8vIGFjY29tbW9kYXRlIGZvbGtzIHBh
c3NpbmcgY29tcGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFrZSB0aGUKLSAgICAvLyBjaGlsZCBv
ZiBhbiBlbGVtZW50LgotCi0gICAgUmVmUHRyPE5vZGU+IG5leHROb2RlOwotICAgIGZvciAoUmVm
UHRyPE5vZGU+IG5vZGUgPSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbmV4
dE5vZGUpIHsKLSAgICAgICAgbmV4dE5vZGUgPSBub2RlLT5uZXh0U2libGluZygpOwotICAgICAg
ICBpZiAobm9kZS0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGhlYWRU
YWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsKLSAgICAgICAgICAgIEhUTUxFbGVt
ZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlLmdldCgpKTsKLSAgICAgICAgICAgIE5v
ZGUqIGZpcnN0Q2hpbGQgPSBlbGVtZW50LT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICBpZiAo
Zmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IGZpcnN0Q2hpbGQ7Ci0gICAg
ICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dENoaWxkOwotICAgICAgICAgICAgZm9yIChSZWZQdHI8
Tm9kZT4gY2hpbGQgPSBmaXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBuZXh0Q2hpbGQpIHsKLSAg
ICAgICAgICAgICAgICBuZXh0Q2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAg
ICAgICAgICBlbGVtZW50LT5yZW1vdmVDaGlsZChjaGlsZC5nZXQoKSwgaWdub3JlZEV4Y2VwdGlv
bkNvZGUpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwot
ICAgICAgICAgICAgICAgIGZyYWdtZW50LT5pbnNlcnRCZWZvcmUoY2hpbGQsIGVsZW1lbnQsIGln
bm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIWlnbm9yZWRFeGNl
cHRpb25Db2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZyYWdtZW50LT5yZW1vdmVD
aGlsZChlbGVtZW50LCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0gICAgICAgICAgICBBU1NFUlQo
IWlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZnJh
Z21lbnQucmVsZWFzZSgpOwotfQotCiBQYXNzUmVmUHRyPE5vZGU+IEVsZW1lbnQ6OmNsb25lTm9k
ZShib29sIGRlZXApCiB7CiAgICAgcmV0dXJuIGRlZXAgPyBjbG9uZUVsZW1lbnRXaXRoQ2hpbGRy
ZW4oKSA6IGNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5oCShyZXZpc2lvbiA5NDUxMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwOCw4ICsxMDgsNiBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0FUVFJJ
QlVURV9FVkVOVF9MSVNURU5FUih3ZWJraXRmdWxsc2NyZWVuY2hhbmdlKTsKICNlbmRpZgogCi0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRlcHJlY2F0ZWRDcmVhdGVD
b250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNz
aW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKLQogICAgIGJvb2wgaGFzQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGdl
dEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CiAgICAgdm9pZCBzZXRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkocmV2aXNpb24gOTQ1MTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQs
NyBAQAogICogKEMpIDIwMDAgRnJlZGVyaWsgSG9sbGplbiAoZnJlZGVyaWsuaG9sbGplbkBoaWcu
bm8pCiAgKiAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBNb3Rvcm9s
YSBNb2JpbGl0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MzIsNiArMzMsOCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZVdpdGhJbmRleC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKQEAgLTUzLDYgKzU2LDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKICNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgV1RGOjpSZWZDb3VudGVk
TGVha0NvdW50ZXIgcmFuZ2VDb3VudGVyKCJSYW5nZSIpOwpAQCAtMTEwMCw3ICsxMTA0LDU4IEBA
IFN0cmluZyBSYW5nZTo6dGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIHBsYWluVGV4dCh0aGlzKTsK
IH0KIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6Y3JlYXRlQ29udGV4dHVh
bEZyYWdtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QK
K3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVFbGVtZW50UHJlc2VydmluZ0NoaWxkcmVuKFBhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQsIEhUTUxFbGVtZW50KiBlbGVtZW50KQor
eworICAgIEV4Y2VwdGlvbkNvZGUgaWdub3JlZEV4Y2VwdGlvbkNvZGU7CisKKyAgICBSZWZQdHI8
Tm9kZT4gbmV4dENoaWxkOworICAgIGZvciAoUmVmUHRyPE5vZGU+IGNoaWxkID0gZWxlbWVudC0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBuZXh0Q2hpbGQpIHsKKyAgICAgICAgbmV4dENo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIGVsZW1lbnQtPnJlbW92ZUNoaWxk
KGNoaWxkLmdldCgpLCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7CisgICAgICAgIEFTU0VSVCghaWdu
b3JlZEV4Y2VwdGlvbkNvZGUpOworICAgICAgICBmcmFnbWVudC0+aW5zZXJ0QmVmb3JlKGNoaWxk
LCBlbGVtZW50LCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7CisgICAgICAgIEFTU0VSVCghaWdub3Jl
ZEV4Y2VwdGlvbkNvZGUpOworICAgIH0KKyAgICBmcmFnbWVudC0+cmVtb3ZlQ2hpbGQoZWxlbWVu
dCwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOworICAgIEFTU0VSVCghaWdub3JlZEV4Y2VwdGlvbkNv
ZGUpOworfQorCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpjcmVhdGVEb2N1
bWVudEZyYWdtZW50Rm9yRWxlbWVudChjb25zdCBTdHJpbmcmIG1hcmt1cCwgRWxlbWVudCogZWxl
bWVudCwgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQor
eworICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSB0
b0hUTUxFbGVtZW50KGVsZW1lbnQpOworICAgIGlmIChodG1sRWxlbWVudC0+aWVGb3JiaWRzSW5z
ZXJ0SFRNTCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChodG1sRWxlbWVudC0+aGFz
TG9jYWxOYW1lKGNvbFRhZykgfHwgaHRtbEVsZW1lbnQtPmhhc0xvY2FsTmFtZShjb2xncm91cFRh
ZykgfHwgaHRtbEVsZW1lbnQtPmhhc0xvY2FsTmFtZShmcmFtZXNldFRhZykKKyAgICAgICAgfHwg
aHRtbEVsZW1lbnQtPmhhc0xvY2FsTmFtZShoZWFkVGFnKSB8fCBodG1sRWxlbWVudC0+aGFzTG9j
YWxOYW1lKHN0eWxlVGFnKSB8fCBodG1sRWxlbWVudC0+aGFzTG9jYWxOYW1lKHRpdGxlVGFnKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisKKyAg
ICBpZiAoZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgZnJh
Z21lbnQtPnBhcnNlSFRNTChtYXJrdXAsIGVsZW1lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwor
ICAgIGVsc2UgaWYgKCFmcmFnbWVudC0+cGFyc2VYTUwobWFya3VwLCBlbGVtZW50LCBzY3JpcHRp
bmdQZXJtaXNzaW9uKSkKKyAgICAgICAgcmV0dXJuIDA7IC8vIEZJWE1FOiBXZSBzaG91bGQgcHJv
cGFnYXRlIGEgc3ludGF4IGVycm9yIGV4Y2VwdGlvbiBvdXQgaGVyZS4KKworICAgIC8vIFdlIG5l
ZWQgdG8gcG9wIDxodG1sPiBhbmQgPGJvZHk+IGVsZW1lbnRzIGFuZCByZW1vdmUgPGhlYWQ+IHRv
CisgICAgLy8gYWNjb21tb2RhdGUgZm9sa3MgcGFzc2luZyBjb21wbGV0ZSBIVE1MIGRvY3VtZW50
cyB0byBtYWtlIHRoZQorICAgIC8vIGNoaWxkIG9mIGFuIGVsZW1lbnQuCisKKyAgICBSZWZQdHI8
Tm9kZT4gbmV4dE5vZGU7CisgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IGZyYWdtZW50LT5m
aXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBuZXh0Tm9kZSkgeworICAgICAgICBuZXh0Tm9kZSA9
IG5vZGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGh0bWxU
YWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoaGVhZFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShib2R5
VGFnKSkgeworICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50
KG5vZGUuZ2V0KCkpOworICAgICAgICAgICAgaWYgKE5vZGUqIGZpcnN0Q2hpbGQgPSBlbGVtZW50
LT5maXJzdENoaWxkKCkpCisgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBmaXJzdENoaWxkOwor
ICAgICAgICAgICAgcmVtb3ZlRWxlbWVudFByZXNlcnZpbmdDaGlsZHJlbihmcmFnbWVudCwgZWxl
bWVudCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsK
K30KKworUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6Y3JlYXRlQ29udGV4dHVh
bEZyYWdtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCiB7CiAgICAgaWYgKCFt
X3N0YXJ0LmNvbnRhaW5lcigpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CkBA
IC0xMTEzLDEwICsxMTY4LDggQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6
Y3JlYQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAvLyBMb2dpYyBmcm9tIGRlcHJl
Y2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgc2hvdWxkIGp1c3QgYmUgbW92ZWQgaW50bwot
ICAgIC8vIHRoaXMgZnVuY3Rpb24uICBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IHNl
bWFudGljcyBkbyBub3QgbWFrZQotICAgIC8vIHNlbnNlIGZvciB0aGUgcmVzdCBvZiB0aGUgRE9N
IGltcGxlbWVudGF0aW9uIHRvIHVzZS4KLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJh
Z21lbnQgPSB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5kZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVh
bEZyYWdtZW50KG1hcmt1cCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gY3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQobWFya3VwLCB0b0VsZW1lbnQoZWxl
bWVudCksIHNjcmlwdGluZ1Blcm1pc3Npb24pOworCiAgICAgaWYgKCFmcmFnbWVudCkgewogICAg
ICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5oCShyZXZpc2lvbiA5NDUxMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlUGxhY2Vob2xkZXIuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVk
ZSAiTm9kZS5oIgogI2luY2x1ZGUgIlJhbmdlQm91bmRhcnlQb2ludC5oIgpAQCAtODgsNyArODks
OCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRvSFRNTCgpIGNvbnN0OwogICAgIFN0cmluZyB0ZXh0
KCkgY29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUNvbnRl
eHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsK
KyAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVu
dChjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlvbkNvZGUmLCBGcmFnbWVudFNjcmlwdGluZ1Bl
cm1pc3Npb24gPSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZURvY3VtZW50RnJhZ21lbnRGb3JFbGVtZW50KGNv
bnN0IFN0cmluZyYgbWFya3VwLCBFbGVtZW50KiwgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
biA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7CiAKICAgICB2b2lkIGRldGFjaChFeGNlcHRp
b25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gY2xvbmVSYW5nZShFeGNlcHRpb25Db2Rl
JikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiA5NDUx
MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEg
Uy5MLgorICogQ29weXJpZ2h0IChDKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02ODIsMTIgKzY4
Myw5IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLAogCiBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgbWFya3VwLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIEZy
YWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQogewotICAgIC8v
IFdlIHVzZSBhIGZha2UgYm9keSBlbGVtZW50IGhlcmUgdG8gdHJpY2sgdGhlIEhUTUwgcGFyc2Vy
IHRvIHVzaW5nIHRoZQotICAgIC8vIEluQm9keSBpbnNlcnRpb24gbW9kZS4gIFJlYWxseSwgYWxs
IHRoaXMgY29kZSBpcyB3cm9uZyBhbmQgbmVlZCB0byBiZQotICAgIC8vIGNoYW5nZWQgbm90IHRv
IHVzZSBkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50LgorICAgIC8vIFdlIHVzZSBh
IGZha2UgYm9keSBlbGVtZW50IGhlcmUgdG8gdHJpY2sgdGhlIEhUTUwgcGFyc2VyIHRvIHVzaW5n
IHRoZSBJbkJvZHkgaW5zZXJ0aW9uIG1vZGUuCiAgICAgUmVmUHRyPEhUTUxCb2R5RWxlbWVudD4g
ZmFrZUJvZHkgPSBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7Ci0gICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIG5vdCB1c2UgZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVu
dAotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGZha2VCb2R5LT5kZXBy
ZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG1hcmt1cCwgc2NyaXB0aW5nUGVybWlzc2lv
bik7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gIFJhbmdlOjpjcmVh
dGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVudChtYXJrdXAsIGZha2VCb2R5LmdldCgpLCBzY3Jp
cHRpbmdQZXJtaXNzaW9uKTsKIAogICAgIGlmIChmcmFnbWVudCAmJiAhYmFzZVVSTC5pc0VtcHR5
KCkgJiYgYmFzZVVSTCAhPSBibGFua1VSTCgpICYmIGJhc2VVUkwgIT0gZG9jdW1lbnQtPmJhc2VV
UkwoKSkKICAgICAgICAgY29tcGxldGVVUkxzKGZyYWdtZW50LmdldCgpLCBiYXNlVVJMKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5NDUxMikKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAs
MjAgKzMwMCw2IEBAIFN0cmluZyBIVE1MRWxlbWVudDo6b3V0ZXJIVE1MKCkgY29uc3QKICAgICBy
ZXR1cm4gY3JlYXRlTWFya3VwKHRoaXMpOwogfQogCi0vLyBGSVhNRTogVGhpcyBsb2dpYyBzaG91
bGQgbW92ZSBpbnRvIFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQKLVBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gSFRNTEVsZW1lbnQ6OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFs
RnJhZ21lbnQoY29uc3QgU3RyaW5nJiBtYXJrdXAsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
biBzY3JpcHRpbmdQZXJtaXNzaW9uKQotewotICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgaW4gYWNj
b3JkYW5jZSB3aXRoIHRoZSBkZWZpbml0aW9uIGFzIHVzZWQgYnkgSUUuCi0gICAgaWYgKGllRm9y
Ymlkc0luc2VydEhUTUwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoaGFzTG9jYWxO
YW1lKGNvbFRhZykgfHwgaGFzTG9jYWxOYW1lKGNvbGdyb3VwVGFnKSB8fCBoYXNMb2NhbE5hbWUo
ZnJhbWVzZXRUYWcpCi0gICAgICAgIHx8IGhhc0xvY2FsTmFtZShoZWFkVGFnKSB8fCBoYXNMb2Nh
bE5hbWUoc3R5bGVUYWcpIHx8IGhhc0xvY2FsTmFtZSh0aXRsZVRhZykpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIEVsZW1lbnQ6OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJh
Z21lbnQobWFya3VwLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKLX0KLQogc3RhdGljIGlubGluZSBi
b29sIGhhc09uZUNoaWxkKENvbnRhaW5lck5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZSogZmlyc3RD
aGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmgJKHJldmlzaW9uIDk0NTEyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw2IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBp
bm5lckhUTUwoKSBjb25zdDsKICAgICBTdHJpbmcgb3V0ZXJIVE1MKCkgY29uc3Q7Ci0gICAgLy8g
ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBsb2dpYyBzaG91bGQgYmUgbW92ZWQg
aW50byBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50Ci0gICAgUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0
cmluZyYsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxs
b3dlZCk7CiAgICAgdm9pZCBzZXRJbm5lckhUTUwoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZvaWQgc2V0T3V0ZXJIVE1MKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICB2b2lkIHNldElubmVyVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gOTQ1MTIpCisrKyBTb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDExLTA5LTAzICBL
YXVzdHViaCBBdHJhd2Fsa2FyICA8a2F1c3R1YmhAbW90b3JvbGEuY29tPgorCisgICAgICAgIExv
Z2ljIGZyb20gSFRNTEVsZW1lbnQ6OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQg
bW92ZWQgaW50bworICAgICAgICBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IGZ1bmN0
aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njcw
NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb2Rl
IFJlZmFjdG9yaW5nIGZvciBkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50LgorCisg
ICAgICAgICogQXBpL3F3ZWJlbGVtZW50LmNwcDoKKyAgICAgICAgKFFXZWJFbGVtZW50OjphcHBl
bmRJbnNpZGUpOgorICAgICAgICAoUVdlYkVsZW1lbnQ6OnByZXBlbmRJbnNpZGUpOgorICAgICAg
ICAoUVdlYkVsZW1lbnQ6OnByZXBlbmRPdXRzaWRlKToKKyAgICAgICAgKFFXZWJFbGVtZW50Ojph
cHBlbmRPdXRzaWRlKToKKyAgICAgICAgKFFXZWJFbGVtZW50OjplbmNsb3NlQ29udGVudHNXaXRo
KToKKyAgICAgICAgKFFXZWJFbGVtZW50OjplbmNsb3NlV2l0aCk6CisKIDIwMTEtMDktMDMgIExh
c3psbyBHb21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29tPgogCiAgICAgICAgIFJFR1JF
U1NJT04gKHI4NjI2OCk6IEZpeCBmb3IgcXRfbmV0d29ya0FjY2Vzc0FsbG93ZWQoKQpJbmRleDog
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAkocmV2aXNpb24gOTQ1MTIpCisrKyBTb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjIs
OCArMTAyMiw3IEBAIHZvaWQgUVdlYkVsZW1lbnQ6OmFwcGVuZEluc2lkZShjb25zdCBRU3QKICAg
ICBpZiAoIW1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1f
ZWxlbWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gaHRtbEVs
ZW1lbnQtPkVsZW1lbnQ6OmRlcHJlY2F0ZWRDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobWFya3Vw
KTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAgUmFuZ2U6OmNyZWF0
ZURvY3VtZW50RnJhZ21lbnRGb3JFbGVtZW50KG1hcmt1cCwgdG9IVE1MRWxlbWVudChtX2VsZW1l
bnQpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKICAgICBtX2VsZW1lbnQt
PmFwcGVuZENoaWxkKGZyYWdtZW50LCBleGNlcHRpb24pOwpAQCAtMTA2OCw4ICsxMDY3LDcgQEAg
dm9pZCBRV2ViRWxlbWVudDo6cHJlcGVuZEluc2lkZShjb25zdCBRUwogICAgIGlmICghbV9lbGVt
ZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxFbGVtZW50
KiBodG1sRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9lbGVtZW50KTsKLSAg
ICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBodG1sRWxlbWVudC0+ZGVwcmVj
YXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBmcmFnbWVudCA9ICBSYW5nZTo6Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVs
ZW1lbnQobWFya3VwLCB0b0hUTUxFbGVtZW50KG1fZWxlbWVudCkpOwogCiAgICAgRXhjZXB0aW9u
Q29kZSBleGNlcHRpb24gPSAwOwogCkBAIC0xMTIwLDggKzExMTgsNyBAQCB2b2lkIFFXZWJFbGVt
ZW50OjpwcmVwZW5kT3V0c2lkZShjb25zdCBRCiAgICAgaWYgKCFtX2VsZW1lbnQtPmlzSFRNTEVs
ZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihtX2VsZW1lbnQpOwotICAgIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGh0bWxFbGVtZW50LT5kZXByZWNhdGVkQ3JlYXRlQ29u
dGV4dHVhbEZyYWdtZW50KG1hcmt1cCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50ID0gIFJhbmdlOjpjcmVhdGVEb2N1bWVudEZyYWdtZW50Rm9yRWxlbWVudChtYXJrdXAs
IHRvSFRNTEVsZW1lbnQobV9lbGVtZW50KSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlv
biA9IDA7CiAgICAgbV9lbGVtZW50LT5wYXJlbnROb2RlKCktPmluc2VydEJlZm9yZShmcmFnbWVu
dCwgbV9lbGVtZW50LCBleGNlcHRpb24pOwpAQCAtMTE3MCw4ICsxMTY3LDcgQEAgdm9pZCBRV2Vi
RWxlbWVudDo6YXBwZW5kT3V0c2lkZShjb25zdCBRUwogICAgIGlmICghbV9lbGVtZW50LT5pc0hU
TUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxFbGVtZW50KiBodG1sRWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9lbGVtZW50KTsKLSAgICBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBodG1sRWxlbWVudC0+ZGVwcmVjYXRlZENyZWF0
ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudCA9ICBSYW5nZTo6Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQobWFy
a3VwLCB0b0hUTUxFbGVtZW50KG1fZWxlbWVudCkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBleGNl
cHRpb24gPSAwOwogICAgIGlmICghbV9lbGVtZW50LT5uZXh0U2libGluZygpKQpAQCAtMTMxNyw4
ICsxMzEzLDcgQEAgdm9pZCBRV2ViRWxlbWVudDo6ZW5jbG9zZUNvbnRlbnRzV2l0aChjbwogICAg
IGlmICghbV9lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9l
bGVtZW50KTsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBodG1sRWxl
bWVudC0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOworICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9ICBSYW5nZTo6Y3JlYXRlRG9jdW1lbnRG
cmFnbWVudEZvckVsZW1lbnQobWFya3VwLCB0b0hUTUxFbGVtZW50KG1fZWxlbWVudCkpOwogCiAg
ICAgaWYgKCFmcmFnbWVudCB8fCAhZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTM5Miw4ICsxMzg3LDcgQEAgdm9pZCBRV2ViRWxlbWVudDo6ZW5jbG9zZVdpdGgo
Y29uc3QgUVN0cgogICAgIGlmICghbV9lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50Kj4obV9lbGVtZW50KTsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJh
Z21lbnQgPSBodG1sRWxlbWVudC0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCht
YXJrdXApOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9ICBSYW5nZTo6
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZvckVsZW1lbnQobWFya3VwLCB0b0hUTUxFbGVtZW50KG1f
ZWxlbWVudCkpOwogCiAgICAgaWYgKCFmcmFnbWVudCB8fCAhZnJhZ21lbnQtPmZpcnN0Q2hpbGQo
KSkKICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>