<?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>64133</bug_id>
          
          <creation_ts>2011-07-07 16:27:55 -0700</creation_ts>
          <short_desc>Move selection related code from RenderTextControl to HTMLTextFormControlElement</short_desc>
          <delta_ts>2011-07-11 10:55:32 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>64210</dependson>
    
    <dependson>64212</dependson>
          <blocked>47865</blocked>
    
    <blocked>60403</blocked>
    
    <blocked>64134</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>adele</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>inferno</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>mjs</cc>
    
    <cc>tkent</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>433778</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-07 16:27:55 -0700</bug_when>
    <thetext>RenderTextControl shouldn&apos;t be providing interface for selection.  We should move all selection-related member functions of RenderTextControl to HTMLTextFormControlElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433779</commentid>
    <comment_count>1</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-07-07 16:30:01 -0700</bug_when>
    <thetext>This sounds awesome!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433780</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-07 16:31:15 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; This sounds awesome!

It IS awesome :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433796</commentid>
    <comment_count>3</comment_count>
      <attachid>100052</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-07 17:04:58 -0700</bug_when>
    <thetext>Created attachment 100052
Awesome patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433799</commentid>
    <comment_count>4</comment_count>
      <attachid>100052</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-07-07 17:13:49 -0700</bug_when>
    <thetext>Comment on attachment 100052
Awesome patch

Attachment 100052 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9003095</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433809</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-07 17:30:20 -0700</bug_when>
    <thetext>In qwebpage.cpp:

void QWebPagePrivate::inputMethodEvent(QInputMethodEvent *ev)
{
...
        case QInputMethodEvent::Selection: {
            hasSelection = true;
            // A selection in the inputMethodEvent is always reflected in the visible text
            if (node)
                setSelectionRange(node, qMin(a.start, (a.start + a.length)), qMax(a.start, (a.start + a.length)));

            if (!ev-&gt;preeditString().isEmpty())
                editor-&gt;setComposition(ev-&gt;preeditString(), underlines, qMin(a.start, (a.start + a.length)), qMax(a.start, (a.start + a.length)));
            else {
...
    if (node &amp;&amp; ev-&gt;replacementLength() &gt; 0) {
        int cursorPos = frame-&gt;selection()-&gt;extent().offsetInContainerNode();
        int start = cursorPos + ev-&gt;replacementStart();
        setSelectionRange(node, start, start + ev-&gt;replacementLength());
        // Commit regardless of whether commitString is empty, to get rid of selection.
        editor-&gt;confirmComposition(ev-&gt;commitString());
    } else if (!ev-&gt;commitString().isEmpty()) {

Why is this code calling setSelectionRange?  This function only works on a text node inside an input element.  This can&apos;t be right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433957</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-07-08 01:56:40 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; In qwebpage.cpp:
&gt; 
&gt; void QWebPagePrivate::inputMethodEvent(QInputMethodEvent *ev)
&gt; {
&gt; ...
&gt;         case QInputMethodEvent::Selection: {
&gt;             hasSelection = true;
&gt;             // A selection in the inputMethodEvent is always reflected in the visible text
&gt;             if (node)
&gt;                 setSelectionRange(node, qMin(a.start, (a.start + a.length)), qMax(a.start, (a.start + a.length)));
&gt; 
&gt;             if (!ev-&gt;preeditString().isEmpty())
&gt;                 editor-&gt;setComposition(ev-&gt;preeditString(), underlines, qMin(a.start, (a.start + a.length)), qMax(a.start, (a.start + a.length)));
&gt;             else {


The documentation for Selection is the following:

--
If set, the edit cursor should be moved to the specified position in the editor text contents. In contrast with Cursor, this attribute does not work on the preedit text, but on the surrounding text. The cursor will be moved after the commit string has been committed, and the preedit string will be located at the new edit position. The start position specifies the new position and the length variable can be used to set a selection starting from that point. The value is unused.
--

The documentation is not totally clear for me, but I guess this is mostly for fullscreen IME&apos;s. The qMin/qMax are used because Qt defines selections as an anchor and a cursor. Meaning if you select from right to left, the right start position is the anchor and the left position is the cursor, meaning that anchor (a.start) &gt; cursor (a.length)

&gt; ...
&gt;     if (node &amp;&amp; ev-&gt;replacementLength() &gt; 0) {
&gt;         int cursorPos = frame-&gt;selection()-&gt;extent().offsetInContainerNode();
&gt;         int start = cursorPos + ev-&gt;replacementStart();
&gt;         setSelectionRange(node, start, start + ev-&gt;replacementLength());
&gt;         // Commit regardless of whether commitString is empty, to get rid of selection.
&gt;         editor-&gt;confirmComposition(ev-&gt;commitString());
&gt;     } else if (!ev-&gt;commitString().isEmpty()) {
&gt; 
&gt; Why is this code calling setSelectionRange?  This function only works on a text node inside an input element.  This can&apos;t be right.

Yes, I believe that we should replace this with

RefPtr&lt;Range&gt; replacementRange = TextIterator::rangeFromLocationAndLength(scope, cursorPos + ev-&gt;replacementStart(), ev-&gt;replacementLength());
targetFrame-&gt;selection()-&gt;setSelection(VisibleSelection(replacementRange.get(), SEL_DEFAULT_AFFINITY));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434055</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-08 08:16:38 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; The documentation for Selection is the following:
&gt; 
&gt; --
&gt; If set, the edit cursor should be moved to the specified position in the editor text contents. In contrast with Cursor, this attribute does not work on the preedit text, but on the surrounding text. The cursor will be moved after the commit string has been committed, and the preedit string will be located at the new edit position. The start position specifies the new position and the length variable can be used to set a selection starting from that point. The value is unused.

I don&apos;t think this is specific to RenderTextControl.

&gt; The documentation is not totally clear for me, but I guess this is mostly for fullscreen IME&apos;s. The qMin/qMax are used because Qt defines selections as an anchor and a cursor. Meaning if you select from right to left, the right start position is the anchor and the left position is the cursor, meaning that anchor (a.start) &gt; cursor (a.length)

Could you replace this code by
RefPtr&lt;Range&gt; range = TextIterator::rangeFromLocationAndLength(node, qMin(a.start, (a.start + a.length)), qMax(a.start, (a.start + a.length));
targetFrame-&gt;selection()-&gt;setSelection(VisibleSelection(range.get(), SEL_DEFAULT_AFFINITY));

?

&gt; Yes, I believe that we should replace this with
&gt; 
&gt; RefPtr&lt;Range&gt; replacementRange = TextIterator::rangeFromLocationAndLength(scope, cursorPos + ev-&gt;replacementStart(), ev-&gt;replacementLength());
&gt; targetFrame-&gt;selection()-&gt;setSelection(VisibleSelection(replacementRange.get(), SEL_DEFAULT_AFFINITY));

Great!  Could you do that please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434155</commentid>
    <comment_count>8</comment_count>
      <attachid>100134</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-08 11:04:00 -0700</bug_when>
    <thetext>Created attachment 100134
Update calls to setSelectionRange</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434178</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-08 11:19:38 -0700</bug_when>
    <thetext>Kenneth has a patch to fix Qt dependency on setSelectionRange on https://bugs.webkit.org/show_bug.cgi?id=64172.  Unfortunately, nobody can test that patch for now so I&apos;m updating the code to call HTMLTextFormControlElement::setSelectionRange instead in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434194</commentid>
    <comment_count>10</comment_count>
      <attachid>100140</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-08 11:39:24 -0700</bug_when>
    <thetext>Created attachment 100140
resubmit for qt-ews</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434225</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-08 12:20:27 -0700</bug_when>
    <thetext>Ping reviewers because this patch is blocking further cleanups.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434274</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-08 13:31:06 -0700</bug_when>
    <thetext>Committed r90662: &lt;http://trac.webkit.org/changeset/90662&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434536</commentid>
    <comment_count>13</comment_count>
      <attachid>100219</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-09 18:57:47 -0700</bug_when>
    <thetext>Created attachment 100219
Fixed the regression

The problem was the change in line 719/819 of HTMLFormControlElement.cpp:
-    RenderTextControl* renderTextControl = toRenderTextControl(renderer());
-    cacheSelection(renderTextControl-&gt;selectionStart(), renderTextControl-&gt;selectionEnd());
+    cacheSelection(selectionStart(), selectionEnd());

When the element isn&apos;t focused, selectionStart and selectionEnd can return m_cachedSelectionStart or m_cachedSelectionEnd.  I fixed this by adding computeSelectionStart and computeSelectiionEnd that do exactly what RenderText::selectionStart and RenderText::selectionEnd did.  Unfortunately, I could not come up with a layout test for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434567</commentid>
    <comment_count>14</comment_count>
      <attachid>100219</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-07-10 09:45:14 -0700</bug_when>
    <thetext>Comment on attachment 100219
Fixed the regression

What&apos;s up with the EWS bots?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435017</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-11 10:55:32 -0700</bug_when>
    <thetext>Committed r90763: &lt;http://trac.webkit.org/changeset/90763&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100052</attachid>
            <date>2011-07-07 17:04:58 -0700</date>
            <delta_ts>2011-07-08 11:03:56 -0700</delta_ts>
            <desc>Awesome patch</desc>
            <filename>bug-64133-20110707170457.patch</filename>
            <type>text/plain</type>
            <size>19828</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwNjAyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDctMDcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBzZWxlY3Rpb24gcmVsYXRl
ZCBjb2RlIGZyb20gUmVuZGVyVGV4dENvbnRyb2wgdG8gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTMz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQg
c2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwgaGFzVmlzaWJsZVRleHRBcmVhLCBzZXRTZWxl
Y3Rpb25SYW5nZSwgc2V0Q29udGFpbmVyQW5kT2Zmc2V0Rm9yUmFuZ2UKKyAgICAgICAgYW5kIHNl
bGVjdGlvbiBmcm9tIFJlbmRlclRleHRDb250cm9sLmNwcCB0byBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmNwcC4KKworICAgICAgICBUaGlzIHJlZmFjdG9yaW5nIHJlbW92ZXMgUmVuZGVyVGV4dENv
bnRyb2wncyBkZXBlbmRlbmN5IG9uIEZyYW1lU2VsZWN0aW9uLgorCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNlbGVjdGVkVGV4dCk6IENhbGxzIEhUTUxUZXh0
RnJvbUNvbnRyb2w6OnNlbGVjdGVkVGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnNlbGVjdGVkVGV4dFJhbmdlKTogQ2FsbHMgc2VsZWN0aW9uU3RhcnQg
YW5kIHNlbGVjdGlvbkVuZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnNldFNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgICogaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50OjpzZWxlY3RlZFRleHQpOiBFeHRyYWN0ZWQgZnJvbSBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpzZWxlY3RlZFRleHQuCisgICAgICAgIChXZWJDb3JlOjpoYXNWaXNpYmxl
VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6
OnNldFNlbGVjdGlvblJhbmdlKTogTWVyZ2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9mIHRoZSBzYW1l
IG5hbWUgaW4KKyAgICAgICAgUmVuZGVyVGV4dENvbnRyb2wuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uU3RhcnQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb25FbmQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnNldENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdlKTog
TW92ZWQgZnJvbSBSZW5kZXJUZXh0Q29udHJvbC5jcHAKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb24pOiBNZXJnZWQgd2l0aCB0aGUgZnVuY3Rp
b24gb2YgdGhlIHNhbWUgbmFtZSBpbiBSZW5kZXJUZXh0Q29udHJvbC4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb25DaGFuZ2VkKTogQ2FsbHMg
c2VsZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZC4KKyAgICAgICAgKiBodG1sL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50OjpyZXN0b3JlQ2FjaGVkU2VsZWN0aW9uKTogTW92ZWQgZnJvbSBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50LmNwcCBub3cgdGhhdAorICAgICAgICBhbGwgZnVuY3Rpb25zIGFyZSBzZWxmLWNv
bnRhaW5lZCBpbiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC4KKyAgICAgICAgKiBodG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
c2V0VmFsdWUpOiBDYWxscyBzZXRTZWxlY3Rpb25SYW5nZS4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRy
b2w6OnRleHRGb3JtQ29udHJvbEVsZW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuaDoKKwogMjAxMS0wNy0wNyAgTGV2aSBXZWludHJhdWIgIDxsZXZp
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3dpdGNoIHJlbWFpbmluZyBwYWludCBmdW5jdGlv
bnMgdG8gbmV3IGxheW91dCB0eXBlcwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lv
biA5MDU5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OTQsOCArMTk5NCw4IEBAIFN0cmlu
ZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZWxlY3QKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOyAvLyBuZWVkIHRvIHJldHVybiBzb21ldGhpbmcgZGlzdGluY3QgZnJvbSBlbXB0eSBzdHJp
bmcKICAgICAKICAgICBpZiAoaXNOYXRpdmVUZXh0Q29udHJvbCgpKSB7Ci0gICAgICAgIFJlbmRl
clRleHRDb250cm9sKiB0ZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2wobV9yZW5kZXJl
cik7Ci0gICAgICAgIHJldHVybiB0ZXh0Q29udHJvbC0+dGV4dCgpLnN1YnN0cmluZyh0ZXh0Q29u
dHJvbC0+c2VsZWN0aW9uU3RhcnQoKSwgdGV4dENvbnRyb2wtPnNlbGVjdGlvbkVuZCgpIC0gdGV4
dENvbnRyb2wtPnNlbGVjdGlvblN0YXJ0KCkpOworICAgICAgICBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCogdGV4dENvbnRyb2wgPSB0b1JlbmRlclRleHRDb250cm9sKG1fcmVuZGVyZXIpLT50
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCk7CisgICAgICAgIHJldHVybiB0ZXh0Q29udHJvbC0+c2Vs
ZWN0ZWRUZXh0KCk7CiAgICAgfQogICAgIAogICAgIGlmIChhcmlhUm9sZUF0dHJpYnV0ZSgpID09
IFVua25vd25Sb2xlKQpAQCAtMjAyOCw3ICsyMDI4LDcgQEAgUGxhaW5UZXh0UmFuZ2UgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdAogICAgIAogICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFSb2xl
ID0gYXJpYVJvbGVBdHRyaWJ1dGUoKTsKICAgICBpZiAoaXNOYXRpdmVUZXh0Q29udHJvbCgpICYm
IGFyaWFSb2xlID09IFVua25vd25Sb2xlKSB7Ci0gICAgICAgIFJlbmRlclRleHRDb250cm9sKiB0
ZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2wobV9yZW5kZXJlcik7CisgICAgICAgIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRy
b2wobV9yZW5kZXJlciktPnRleHRGb3JtQ29udHJvbEVsZW1lbnQoKTsKICAgICAgICAgcmV0dXJu
IFBsYWluVGV4dFJhbmdlKHRleHRDb250cm9sLT5zZWxlY3Rpb25TdGFydCgpLCB0ZXh0Q29udHJv
bC0+c2VsZWN0aW9uRW5kKCkgLSB0ZXh0Q29udHJvbC0+c2VsZWN0aW9uU3RhcnQoKSk7CiAgICAg
fQogICAgIApAQCAtMjA0MSw3ICsyMDQxLDggQEAgUGxhaW5UZXh0UmFuZ2UgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3Rl
ZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UpCiB7CiAgICAgaWYgKGlzTmF0
aXZlVGV4dENvbnRyb2woKSkgewotICAgICAgICBzZXRTZWxlY3Rpb25SYW5nZShtX3JlbmRlcmVy
LT5ub2RlKCksIHJhbmdlLnN0YXJ0LCByYW5nZS5zdGFydCArIHJhbmdlLmxlbmd0aCk7CisgICAg
ICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4
dENvbnRyb2wobV9yZW5kZXJlciktPnRleHRGb3JtQ29udHJvbEVsZW1lbnQoKTsKKyAgICAgICAg
dGV4dENvbnRyb2wtPnNldFNlbGVjdGlvblJhbmdlKHJhbmdlLnN0YXJ0LCByYW5nZS5zdGFydCAr
IHJhbmdlLmxlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gOTA1
OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NjIsNiArNjYyLDE2IEBAIHZvaWQgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6OnNlbGVjdCgKICAgICBzZXRTZWxlY3Rpb25SYW5nZSgwLCBudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKSk7CiB9CiAKK1N0cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
c2VsZWN0ZWRUZXh0KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUg
dG8gZXh0cmFjdCBzZWxlY3RlZCBjb250ZW50cyBldmVuIGlmIHRoZXJlIHdlcmUgbm8gcmVuZGVy
ZXIuCisgICAgaWYgKCFyZW5kZXJlcigpIHx8IHJlbmRlcmVyKCktPmlzVGV4dENvbnRyb2woKSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgUmVuZGVyVGV4dENvbnRyb2wqIHRleHRD
b250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKTsKKyAgICByZXR1cm4gdGV4
dENvbnRyb2wtPnRleHQoKS5zdWJzdHJpbmcoc2VsZWN0aW9uU3RhcnQoKSwgc2VsZWN0aW9uRW5k
KCkgLSBzZWxlY3Rpb25TdGFydCgpKTsKK30KKwogdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudDo6ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCkKIHsKICAgICBpZiAobV90ZXh0
QXNPZkxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50ICE9IHZhbHVlKCkpIHsKQEAgLTY3MSw5ICs2
ODEsNDYgQEAgdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0YwogICAgIHNl
dENoYW5nZWRTaW5jZUxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KGZhbHNlKTsKIH0KIAorc3Rh
dGljIGlubGluZSBib29sIGhhc1Zpc2libGVUZXh0QXJlYShSZW5kZXJUZXh0Q29udHJvbCogdGV4
dENvbnRyb2wpCit7CisgICAgQVNTRVJUKHRleHRDb250cm9sKTsKKyAgICBIVE1MRWxlbWVudCog
aW5uZXJUZXh0ID0gdGV4dENvbnRyb2wtPmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICByZXR1cm4g
dGV4dENvbnRyb2wtPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBISURERU4gJiYgaW5uZXJUZXh0
ICYmIGlubmVyVGV4dC0+cmVuZGVyZXIoKSAmJiBpbm5lclRleHQtPnJlbmRlckJveCgpLT5oZWln
aHQoKTsKK30KKwogdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9u
UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKQogewotICAgIFdlYkNvcmU6OnNldFNlbGVjdGlvblJh
bmdlKHRoaXMsIHN0YXJ0LCBlbmQpOworICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCisgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJl
cigpLT5pc1RleHRDb250cm9sKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGVuZCA9IG1heChl
bmQsIDApOworICAgIHN0YXJ0ID0gbWluKG1heChzdGFydCwgMCksIGVuZCk7CisKKyAgICBSZW5k
ZXJUZXh0Q29udHJvbCogY29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSk7
CisgICAgaWYgKCFoYXNWaXNpYmxlVGV4dEFyZWEoY29udHJvbCkpIHsKKyAgICAgICAgY2FjaGVT
ZWxlY3Rpb24oc3RhcnQsIGVuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWaXNp
YmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IGNvbnRyb2wtPnZpc2libGVQb3NpdGlvbkZvcklu
ZGV4KHN0YXJ0KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb247CisgICAgaWYgKHN0
YXJ0ID09IGVuZCkKKyAgICAgICAgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgIGVs
c2UKKyAgICAgICAgZW5kUG9zaXRpb24gPSBjb250cm9sLT52aXNpYmxlUG9zaXRpb25Gb3JJbmRl
eChlbmQpOworCisgICAgLy8gc3RhcnRQb3NpdGlvbiBhbmQgZW5kUG9zaXRpb24gY2FuIGJlIG51
bGwgcG9zaXRpb24gZm9yIGV4YW1wbGUgd2hlbgorICAgIC8vICItd2Via2l0LXVzZXItc2VsZWN0
OiBub25lIiBzdHlsZSBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLgorICAgIGlmIChzdGFydFBvc2l0
aW9uLmlzTm90TnVsbCgpICYmIGVuZFBvc2l0aW9uLmlzTm90TnVsbCgpKSB7CisgICAgICAgIEFT
U0VSVChzdGFydFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+c2hh
ZG93QW5jZXN0b3JOb2RlKCkgPT0gdGhpcworICAgICAgICAgICAgJiYgZW5kUG9zaXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA9PSB0
aGlzKTsKKyAgICB9CisKKyAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IFZpc2li
bGVTZWxlY3Rpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkt
PnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwogfQogCiBpbnQgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KCkgY29uc3QKQEAgLTY4Miw5ICs3MjksMTYgQEAgaW50
IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3RpbwogICAgICAgICByZXR1cm4gMDsK
ICAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlzICYmIGhhc0NhY2hlZFNl
bGVjdGlvblN0YXJ0KCkpCiAgICAgICAgIHJldHVybiBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0Owot
ICAgIGlmICghcmVuZGVyZXIoKSkKKworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZy
YW1lKCk7CisgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFmcmFtZSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvblN0
YXJ0KCk7CisKKyAgICBIVE1MRWxlbWVudCogaW5uZXJUZXh0ID0gdG9SZW5kZXJUZXh0Q29udHJv
bChyZW5kZXJlcigpKS0+aW5uZXJUZXh0RWxlbWVudCgpOworICAgIC8vIERvIG5vdCBjYWxsIGlu
bmVyVGV4dEVsZW1lbnQoKSBpbiB0aGUgZnVuY3Rpb24gYXJndW1lbnRzIGFzIGNyZWF0aW5nIGEg
VmlzaWJsZVBvc2l0aW9uCisgICAgLy8gZnJvbSBmcmFtZS0+c2VsZWN0aW9uLT5zdGFydCgpIGNh
biBibG93IHVzIGZyb20gdW5kZXJuZWF0aC4gQWxzbywgZnVuY3Rpb24gb3JkZXJpbmcgaXMKKyAg
ICAvLyB1c3VhbGx5IGRlcGVuZGVudCBvbiB0aGUgY29tcGlsZXIuCisgICAgcmV0dXJuIFJlbmRl
clRleHRDb250cm9sOjppbmRleEZvclZpc2libGVQb3NpdGlvbihpbm5lclRleHQsIGZyYW1lLT5z
ZWxlY3Rpb24oKS0+c3RhcnQoKSk7CiB9CiAKIGludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6c2VsZWN0aW9uRW5kKCkgY29uc3QKQEAgLTY5MywyMSArNzQ3LDY4IEBAIGludCBIVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW8KICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYg
KGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0gdGhpcyAmJiBoYXNDYWNoZWRTZWxlY3Rpb25F
bmQoKSkKICAgICAgICAgcmV0dXJuIG1fY2FjaGVkU2VsZWN0aW9uRW5kOwotICAgIGlmICghcmVu
ZGVyZXIoKSkKKworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CisgICAg
aWYgKCFyZW5kZXJlcigpIHx8ICFmcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvbkVuZCgpOworCisgICAg
SFRNTEVsZW1lbnQqIGlubmVyVGV4dCA9IHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSkt
PmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICAvLyBEbyBub3QgY2FsbCBpbm5lclRleHRFbGVtZW50
KCkgaW4gdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBhcyBjcmVhdGluZyBhIFZpc2libGVQb3NpdGlv
bgorICAgIC8vIGZyb20gZnJhbWUtPnNlbGVjdGlvbi0+c3RhcnQoKSBjYW4gYmxvdyB1cyBmcm9t
IHVuZGVybmVhdGguIEFsc28sIGZ1bmN0aW9uIG9yZGVyaW5nIGlzCisgICAgLy8gdXN1YWxseSBk
ZXBlbmRlbnQgb24gdGhlIGNvbXBpbGVyLgorICAgIHJldHVybiBSZW5kZXJUZXh0Q29udHJvbDo6
aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oaW5uZXJUZXh0LCBmcmFtZS0+c2VsZWN0aW9uKCktPmVu
ZCgpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldENvbnRhaW5lckFuZE9mZnNldEZvclJh
bmdlKE5vZGUqIG5vZGUsIGludCBvZmZzZXQsIE5vZGUqJiBjb250YWluZXJOb2RlLCBpbnQmIG9m
ZnNldEluQ29udGFpbmVyKQoreworICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpIHsKKyAgICAg
ICAgY29udGFpbmVyTm9kZSA9IG5vZGU7CisgICAgICAgIG9mZnNldEluQ29udGFpbmVyID0gb2Zm
c2V0OworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnRhaW5lck5vZGUgPSBub2RlLT5wYXJlbnRO
b2RlKCk7CisgICAgICAgIG9mZnNldEluQ29udGFpbmVyID0gbm9kZS0+bm9kZUluZGV4KCkgKyBv
ZmZzZXQ7CisgICAgfQogfQogCiBQYXNzUmVmUHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6c2VsZWN0aW9uKCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIWlz
VGV4dEZvcm1Db250cm9sKCkgfHwgIWhhc0NhY2hlZFNlbGVjdGlvblN0YXJ0KCkgfHwgIWhhc0Nh
Y2hlZFNlbGVjdGlvbkVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdG9SZW5k
ZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+c2VsZWN0aW9uKG1fY2FjaGVkU2VsZWN0aW9uU3Rh
cnQsIG1fY2FjaGVkU2VsZWN0aW9uRW5kKTsKLX0KKyAgICAKKyAgICBpbnQgc3RhcnQgPSBtX2Nh
Y2hlZFNlbGVjdGlvblN0YXJ0OworICAgIGludCBlbmQgPSBtX2NhY2hlZFNlbGVjdGlvbkVuZDsK
KworICAgIEFTU0VSVChzdGFydCA8PSBlbmQpOworICAgIEhUTUxFbGVtZW50KiBpbm5lclRleHQg
PSB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5pbm5lclRleHRFbGVtZW50KCk7Cisg
ICAgaWYgKCFpbm5lclRleHQpCisgICAgICAgIHJldHVybiAwOwogCi12b2lkIEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpyZXN0b3JlQ2FjaGVkU2VsZWN0aW9uKCkKLXsKLSAgICBXZWJDb3Jl
OjpzZXRTZWxlY3Rpb25SYW5nZSh0aGlzLCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0LCBtX2NhY2hl
ZFNlbGVjdGlvbkVuZCk7CisgICAgaWYgKCFpbm5lclRleHQtPmZpcnN0Q2hpbGQoKSkKKyAgICAg
ICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgaW5uZXJUZXh0LCAwLCBpbm5lclRl
eHQsIDApOworCisgICAgaW50IG9mZnNldCA9IDA7CisgICAgTm9kZSogc3RhcnROb2RlID0gMDsK
KyAgICBOb2RlKiBlbmROb2RlID0gMDsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBpbm5lclRleHQt
PmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoaW5uZXJU
ZXh0KSkgeworICAgICAgICBBU1NFUlQoIW5vZGUtPmZpcnN0Q2hpbGQoKSk7CisgICAgICAgIEFT
U0VSVChub2RlLT5pc1RleHROb2RlKCkgfHwgbm9kZS0+aGFzVGFnTmFtZShiclRhZykpOworICAg
ICAgICBpbnQgbGVuZ3RoID0gbm9kZS0+aXNUZXh0Tm9kZSgpID8gbGFzdE9mZnNldEluTm9kZShu
b2RlKSA6IDE7CisKKyAgICAgICAgaWYgKG9mZnNldCA8PSBzdGFydCAmJiBzdGFydCA8PSBvZmZz
ZXQgKyBsZW5ndGgpCisgICAgICAgICAgICBzZXRDb250YWluZXJBbmRPZmZzZXRGb3JSYW5nZShu
b2RlLCBzdGFydCAtIG9mZnNldCwgc3RhcnROb2RlLCBzdGFydCk7CisKKyAgICAgICAgaWYgKG9m
ZnNldCA8PSBlbmQgJiYgZW5kIDw9IG9mZnNldCArIGxlbmd0aCkgeworICAgICAgICAgICAgc2V0
Q29udGFpbmVyQW5kT2Zmc2V0Rm9yUmFuZ2Uobm9kZSwgZW5kIC0gb2Zmc2V0LCBlbmROb2RlLCBl
bmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBvZmZzZXQgKz0g
bGVuZ3RoOworICAgIH0KKworICAgIGlmICghc3RhcnROb2RlIHx8ICFlbmROb2RlKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0
Tm9kZSwgc3RhcnQsIGVuZE5vZGUsIGVuZCk7CiB9CiAKIHZvaWQgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6OnNlbGVjdGlvbkNoYW5nZWQoYm9vbCB1c2VyVHJpZ2dlcmVkKQpAQCAtNzE1LDgg
KzgxNiw3IEBAIHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGkKICAgICBp
ZiAoIXJlbmRlcmVyKCkgfHwgIWlzVGV4dEZvcm1Db250cm9sKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlbmRlclRleHRDb250cm9sKiByZW5kZXJUZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4
dENvbnRyb2wocmVuZGVyZXIoKSk7Ci0gICAgY2FjaGVTZWxlY3Rpb24ocmVuZGVyVGV4dENvbnRy
b2wtPnNlbGVjdGlvblN0YXJ0KCksIHJlbmRlclRleHRDb250cm9sLT5zZWxlY3Rpb25FbmQoKSk7
CisgICAgY2FjaGVTZWxlY3Rpb24oc2VsZWN0aW9uU3RhcnQoKSwgc2VsZWN0aW9uRW5kKCkpOwog
CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAg
aWYgKGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpICYmIHVzZXJUcmlnZ2VyZWQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkocmV2aXNp
b24gOTA1OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDYgKzIwNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
bGVjdCgpOwogICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKTsK
ICAgICBQYXNzUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24oKSBjb25zdDsKKyAgICBTdHJpbmcgc2Vs
ZWN0ZWRUZXh0KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb3JtQ29udHJv
bENoYW5nZUV2ZW50KCk7CiAKQEAgLTIzMCw3ICsyMzEsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2
b2lkIHNldFRleHRBc09mTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoY29uc3QgU3RyaW5nJiB0
ZXh0KSB7IG1fdGV4dEFzT2ZMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCA9IHRleHQ7IH0KIAot
ICAgIHZvaWQgcmVzdG9yZUNhY2hlZFNlbGVjdGlvbigpOworICAgIHZvaWQgcmVzdG9yZUNhY2hl
ZFNlbGVjdGlvbigpIHsgc2V0U2VsZWN0aW9uUmFuZ2UobV9jYWNoZWRTZWxlY3Rpb25TdGFydCwg
bV9jYWNoZWRTZWxlY3Rpb25FbmQpOyB9CiAgICAgYm9vbCBoYXNDYWNoZWRTZWxlY3Rpb25TdGFy
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQgPj0gMDsgfQogICAgIGJv
b2wgaGFzQ2FjaGVkU2VsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTZWxlY3Rp
b25FbmQgPj0gMDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDkwNTkxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxNiw3ICsxMDE2LDcgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpzZXRWYWx1ZShjb25zdCBTdAogICAgIGlmIChpc1RleHRGaWVsZCgpKSB7
CiAgICAgICAgIHVuc2lnbmVkIG1heCA9IHZpc2libGVWYWx1ZSgpLmxlbmd0aCgpOwogICAgICAg
ICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlzKQotICAgICAgICAgICAgV2Vi
Q29yZTo6c2V0U2VsZWN0aW9uUmFuZ2UodGhpcywgbWF4LCBtYXgpOworICAgICAgICAgICAgc2V0
U2VsZWN0aW9uUmFuZ2UobWF4LCBtYXgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjYWNo
ZVNlbGVjdGlvbihtYXgsIG1heCk7CiAgICAgICAgIG1fc3VnZ2VzdGVkVmFsdWUgPSBTdHJpbmco
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcAkocmV2aXNpb24gOTA1OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVk
ZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
LSNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxCUkVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgpAQCAtODIsNiArODEsMTEgQEAgUmVuZGVyVGV4dENvbnRyb2w6On5SZW5kZXJU
ZXh0Q29udHJvbCgpCiB7CiB9CiAKK0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiBSZW5kZXJU
ZXh0Q29udHJvbDo6dGV4dEZvcm1Db250cm9sRWxlbWVudCgpCit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Kj4obm9kZSgpKTsKK30KKwogdm9pZCBS
ZW5kZXJUZXh0Q29udHJvbDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBSZW5kZXJCbG9jazo6c3R5bGVEaWRD
aGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwpAQCAtMTczLDczICsxNzcsNiBAQCB2b2lkIFJlbmRlclRl
eHRDb250cm9sOjpzZXRMYXN0Q2hhbmdlV2FzCiAgICAgZG9jdW1lbnQoKS0+c2V0SWdub3JlQXV0
b2ZvY3VzKGxhc3RDaGFuZ2VXYXNVc2VyRWRpdCk7CiB9CiAKLWludCBSZW5kZXJUZXh0Q29udHJv
bDo6c2VsZWN0aW9uU3RhcnQoKSBjb25zdAotewotICAgIEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZy
YW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgSFRN
TEVsZW1lbnQqIGlubmVyVGV4dCA9IGlubmVyVGV4dEVsZW1lbnQoKTsKLSAgICAvLyBEbyBub3Qg
Y2FsbCBpbm5lclRleHRFbGVtZW50KCkgaW4gdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBhcyBjcmVh
dGluZyBhIFZpc2libGVQb3NpdGlvbgotICAgIC8vIGZyb20gZnJhbWUtPnNlbGVjdGlvbi0+c3Rh
cnQoKSBjYW4gYmxvdyB1cyBmcm9tIHVuZGVybmVhdGguIEFsc28sIGZ1bmN0aW9uIG9yZGVyaW5n
IGlzCi0gICAgLy8gdXN1YWxseSBkZXBlbmRlbnQgb24gdGhlIGNvbXBpbGVyLgotICAgIHJldHVy
biBSZW5kZXJUZXh0Q29udHJvbDo6aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oaW5uZXJUZXh0LCBm
cmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkpOwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRyb2w6
OnNlbGVjdGlvbkVuZCgpIGNvbnN0Ci17Ci0gICAgRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUo
KTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEhUTUxFbGVtZW50
KiBpbm5lclRleHQgPSBpbm5lclRleHRFbGVtZW50KCk7Ci0gICAgLy8gRG8gbm90IGNhbGwgaW5u
ZXJUZXh0RWxlbWVudCgpIGluIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMgYXMgY3JlYXRpbmcgYSBW
aXNpYmxlUG9zaXRpb24KLSAgICAvLyBmcm9tIGZyYW1lLT5zZWxlY3Rpb24tPmVuZCgpIGNhbiBi
bG93IHVzIGZyb20gdW5kZXJuZWF0aC4gQWxzbywgZnVuY3Rpb24gb3JkZXJpbmcgaXMKLSAgICAv
LyB1c3VhbGx5IGRlcGVuZGVudCBvbiB0aGUgY29tcGlsZXIuCi0gICAgcmV0dXJuIFJlbmRlclRl
eHRDb250cm9sOjppbmRleEZvclZpc2libGVQb3NpdGlvbihpbm5lclRleHQsIGZyYW1lLT5zZWxl
Y3Rpb24oKS0+ZW5kKCkpOwotfQotCi1ib29sIFJlbmRlclRleHRDb250cm9sOjpoYXNWaXNpYmxl
VGV4dEFyZWEoKSBjb25zdAotewotICAgIEhUTUxFbGVtZW50KiBpbm5lclRleHQgPSBpbm5lclRl
eHRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4g
fHwgIWlubmVyVGV4dCB8fCAhaW5uZXJUZXh0LT5yZW5kZXJlcigpIHx8ICFpbm5lclRleHQtPnJl
bmRlckJveCgpLT5oZWlnaHQoKTsKLX0KLQotdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShOb2RlKiBu
b2RlLCBpbnQgc3RhcnQsIGludCBlbmQpCi17Ci0gICAgQVNTRVJUKG5vZGUpOwotICAgIG5vZGUt
PmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotCi0g
ICAgaWYgKCFub2RlLT5yZW5kZXJlcigpIHx8ICFub2RlLT5yZW5kZXJlcigpLT5pc1RleHRDb250
cm9sKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGVuZCA9IG1heChlbmQsIDApOwotICAgIHN0
YXJ0ID0gbWluKG1heChzdGFydCwgMCksIGVuZCk7Ci0KLSAgICBSZW5kZXJUZXh0Q29udHJvbCog
Y29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2wobm9kZS0+cmVuZGVyZXIoKSk7Ci0KLSAgICBp
ZiAoY29udHJvbC0+aGFzVmlzaWJsZVRleHRBcmVhKCkpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqPihub2RlKS0+Y2FjaGVTZWxlY3Rpb24oc3RhcnQs
IGVuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
UG9zaXRpb24gPSBjb250cm9sLT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChzdGFydCk7Ci0gICAg
VmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uOwotICAgIGlmIChzdGFydCA9PSBlbmQpCi0gICAg
ICAgIGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIGVuZFBv
c2l0aW9uID0gY29udHJvbC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoZW5kKTsKLQotICAgIC8v
IHN0YXJ0UG9zaXRpb24gYW5kIGVuZFBvc2l0aW9uIGNhbiBiZSBudWxsIHBvc2l0aW9uIGZvciBl
eGFtcGxlIHdoZW4KLSAgICAvLyAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZSIgc3R5bGUgYXR0
cmlidXRlIGlzIHNwZWNpZmllZC4KLSAgICBpZiAoc3RhcnRQb3NpdGlvbi5pc05vdE51bGwoKSAm
JiBlbmRQb3NpdGlvbi5pc05vdE51bGwoKSkgewotICAgICAgICBBU1NFUlQoc3RhcnRQb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgp
ID09IG5vZGUgJiYgZW5kUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgp
LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA9PSBub2RlKTsKLSAgICB9Ci0gICAgVmlzaWJsZVNlbGVj
dGlvbiBuZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBv
c2l0aW9uKTsKLQotICAgIGlmIChGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFt
ZSgpKQotICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rp
b24pOwotfQotCiBib29sIFJlbmRlclRleHRDb250cm9sOjppc1NlbGVjdGFibGVFbGVtZW50KEhU
TUxFbGVtZW50KiBpbm5lclRleHQsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlIHx8ICFp
bm5lclRleHQpCkBAIC0yNTYsNTIgKzE5Myw2IEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2w6Omlz
U2VsZWN0YWJsZUVsZW0KICAgICAgICAgfHwgKHNoYWRvd0FuY2VzdG9yLT5oYXNUYWdOYW1lKGlu
cHV0VGFnKSAmJiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93QW5jZXN0b3Ip
LT5pc1RleHRGaWVsZCgpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRDb250YWluZXJB
bmRPZmZzZXRGb3JSYW5nZShOb2RlKiBub2RlLCBpbnQgb2Zmc2V0LCBOb2RlKiYgY29udGFpbmVy
Tm9kZSwgaW50JiBvZmZzZXRJbkNvbnRhaW5lcikKLXsKLSAgICBpZiAobm9kZS0+aXNUZXh0Tm9k
ZSgpKSB7Ci0gICAgICAgIGNvbnRhaW5lck5vZGUgPSBub2RlOwotICAgICAgICBvZmZzZXRJbkNv
bnRhaW5lciA9IG9mZnNldDsKLSAgICB9IGVsc2UgewotICAgICAgICBjb250YWluZXJOb2RlID0g
bm9kZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICBvZmZzZXRJbkNvbnRhaW5lciA9IG5vZGUtPm5v
ZGVJbmRleCgpICsgb2Zmc2V0OwotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxSYW5nZT4gUmVuZGVy
VGV4dENvbnRyb2w6OnNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKHN0YXJ0IDw9IGVuZCk7Ci0gICAgSFRNTEVsZW1lbnQqIGlubmVyVGV4dCA9IGlubmVy
VGV4dEVsZW1lbnQoKTsKLSAgICBpZiAoIWlubmVyVGV4dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBpZiAoIWlubmVyVGV4dC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gUmFuZ2U6
OmNyZWF0ZShkb2N1bWVudCgpLCBpbm5lclRleHQsIDAsIGlubmVyVGV4dCwgMCk7Ci0KLSAgICBp
bnQgb2Zmc2V0ID0gMDsKLSAgICBOb2RlKiBzdGFydE5vZGUgPSAwOwotICAgIE5vZGUqIGVuZE5v
ZGUgPSAwOwotICAgIGZvciAoTm9kZSogbm9kZSA9IGlubmVyVGV4dC0+Zmlyc3RDaGlsZCgpOyBu
b2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShpbm5lclRleHQpKSB7Ci0gICAgICAg
IEFTU0VSVCghbm9kZS0+Zmlyc3RDaGlsZCgpKTsKLSAgICAgICAgQVNTRVJUKG5vZGUtPmlzVGV4
dE5vZGUoKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJyVGFnKSk7Ci0gICAgICAgIGludCBsZW5ndGgg
PSBub2RlLT5pc1RleHROb2RlKCkgPyBsYXN0T2Zmc2V0SW5Ob2RlKG5vZGUpIDogMTsKLSAgICAK
LSAgICAgICAgaWYgKG9mZnNldCA8PSBzdGFydCAmJiBzdGFydCA8PSBvZmZzZXQgKyBsZW5ndGgp
Ci0gICAgICAgICAgICBzZXRDb250YWluZXJBbmRPZmZzZXRGb3JSYW5nZShub2RlLCBzdGFydCAt
IG9mZnNldCwgc3RhcnROb2RlLCBzdGFydCk7Ci0KLSAgICAgICAgaWYgKG9mZnNldCA8PSBlbmQg
JiYgZW5kIDw9IG9mZnNldCArIGxlbmd0aCkgewotICAgICAgICAgICAgc2V0Q29udGFpbmVyQW5k
T2Zmc2V0Rm9yUmFuZ2Uobm9kZSwgZW5kIC0gb2Zmc2V0LCBlbmROb2RlLCBlbmQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBvZmZzZXQgKz0gbGVuZ3RoOwotICAg
IH0KLSAgICAKLSAgICBpZiAoIXN0YXJ0Tm9kZSB8fCAhZW5kTm9kZSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE5vZGUsIHN0
YXJ0LCBlbmROb2RlLCBlbmQpOwotfQotCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRy
b2w6OnZpc2libGVQb3NpdGlvbkZvckluZGV4KGludCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAo
aW5kZXggPD0gMCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbC5oCShyZXZpc2lvbiA5MDU5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ7CiBj
bGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogY2xhc3MgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ7CiBj
bGFzcyBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ7CkBAIC0zNCwxNiArMzUsMTMgQEAgY2xh
c3MgUmVuZGVyVGV4dENvbnRyb2wgOiBwdWJsaWMgUmVuZGVyQgogcHVibGljOgogICAgIHZpcnR1
YWwgflJlbmRlclRleHRDb250cm9sKCk7CiAKKyAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dCogdGV4dEZvcm1Db250cm9sRWxlbWVudCgpOwogICAgIHZpcnR1YWwgSFRNTEVsZW1lbnQqIGlu
bmVyVGV4dEVsZW1lbnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBjcmVhdGVJbm5lclRleHRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHls
ZSkgY29uc3QgPSAwOwogCiAgICAgYm9vbCBsYXN0Q2hhbmdlV2FzVXNlckVkaXQoKSBjb25zdCB7
IHJldHVybiBtX2xhc3RDaGFuZ2VXYXNVc2VyRWRpdDsgfQogICAgIHZvaWQgc2V0TGFzdENoYW5n
ZVdhc1VzZXJFZGl0KGJvb2wgbGFzdENoYW5nZVdhc1VzZXJFZGl0KTsKIAotICAgIGludCBzZWxl
Y3Rpb25TdGFydCgpIGNvbnN0OwotICAgIGludCBzZWxlY3Rpb25FbmQoKSBjb25zdDsKLSAgICBQ
YXNzUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQog
ICAgIHZpcnR1YWwgdm9pZCBzdWJ0cmVlSGFzQ2hhbmdlZCgpOwogICAgIFN0cmluZyB0ZXh0KCk7
CiAgICAgU3RyaW5nIHRleHRXaXRoSGFyZExpbmVCcmVha3MoKTsKQEAgLTk2LDcgKzk0LDYgQEAg
cHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0ZvcmNlZFN0eWxlUmVjYWxjUHJv
cGFnYXRpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBib29sIGhhc1Zpc2libGVU
ZXh0QXJlYSgpIGNvbnN0OwogICAgIGZyaWVuZCB2b2lkIHNldFNlbGVjdGlvblJhbmdlKE5vZGUq
LCBpbnQgc3RhcnQsIGludCBlbmQpOwogICAgIHN0YXRpYyBib29sIGlzU2VsZWN0YWJsZUVsZW1l
bnQoSFRNTEVsZW1lbnQqLCBOb2RlKik7CiAgICAgCkBAIC0xMDksOCArMTA2LDYgQEAgcHJpdmF0
ZToKICAgICBib29sIG1fbGFzdENoYW5nZVdhc1VzZXJFZGl0OwogfTsKIAotdm9pZCBzZXRTZWxl
Y3Rpb25SYW5nZShOb2RlKiwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKLQogaW5saW5lIFJlbmRlclRl
eHRDb250cm9sKiB0b1JlbmRlclRleHRDb250cm9sKFJlbmRlck9iamVjdCogb2JqZWN0KQogeyAK
ICAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzVGV4dENvbnRyb2woKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100134</attachid>
            <date>2011-07-08 11:04:00 -0700</date>
            <delta_ts>2011-07-08 11:39:20 -0700</delta_ts>
            <desc>Update calls to setSelectionRange</desc>
            <filename>bug-64133-20110708110359.patch</filename>
            <type>text/plain</type>
            <size>22317</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwNjAyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDctMDcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBzZWxlY3Rpb24gcmVsYXRl
ZCBjb2RlIGZyb20gUmVuZGVyVGV4dENvbnRyb2wgdG8gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTMz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQg
c2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwgaGFzVmlzaWJsZVRleHRBcmVhLCBzZXRTZWxl
Y3Rpb25SYW5nZSwgc2V0Q29udGFpbmVyQW5kT2Zmc2V0Rm9yUmFuZ2UKKyAgICAgICAgYW5kIHNl
bGVjdGlvbiBmcm9tIFJlbmRlclRleHRDb250cm9sLmNwcCB0byBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmNwcC4KKworICAgICAgICBUaGlzIHJlZmFjdG9yaW5nIHJlbW92ZXMgUmVuZGVyVGV4dENv
bnRyb2wncyBkZXBlbmRlbmN5IG9uIEZyYW1lU2VsZWN0aW9uLgorCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNlbGVjdGVkVGV4dCk6IENhbGxzIEhUTUxUZXh0
RnJvbUNvbnRyb2w6OnNlbGVjdGVkVGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnNlbGVjdGVkVGV4dFJhbmdlKTogQ2FsbHMgc2VsZWN0aW9uU3RhcnQg
YW5kIHNlbGVjdGlvbkVuZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnNldFNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgICogaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50OjpzZWxlY3RlZFRleHQpOiBFeHRyYWN0ZWQgZnJvbSBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpzZWxlY3RlZFRleHQuCisgICAgICAgIChXZWJDb3JlOjpoYXNWaXNpYmxl
VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6
OnNldFNlbGVjdGlvblJhbmdlKTogTWVyZ2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9mIHRoZSBzYW1l
IG5hbWUgaW4KKyAgICAgICAgUmVuZGVyVGV4dENvbnRyb2wuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uU3RhcnQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb25FbmQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnNldENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdlKTog
TW92ZWQgZnJvbSBSZW5kZXJUZXh0Q29udHJvbC5jcHAKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb24pOiBNZXJnZWQgd2l0aCB0aGUgZnVuY3Rp
b24gb2YgdGhlIHNhbWUgbmFtZSBpbiBSZW5kZXJUZXh0Q29udHJvbC4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb25DaGFuZ2VkKTogQ2FsbHMg
c2VsZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZC4KKyAgICAgICAgKiBodG1sL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50OjpyZXN0b3JlQ2FjaGVkU2VsZWN0aW9uKTogTW92ZWQgZnJvbSBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50LmNwcCBub3cgdGhhdAorICAgICAgICBhbGwgZnVuY3Rpb25zIGFyZSBzZWxmLWNv
bnRhaW5lZCBpbiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC4KKyAgICAgICAgKiBodG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
c2V0VmFsdWUpOiBDYWxscyBzZXRTZWxlY3Rpb25SYW5nZS4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRy
b2w6OnRleHRGb3JtQ29udHJvbEVsZW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuaDoKKwogMjAxMS0wNy0wNyAgTGV2aSBXZWludHJhdWIgIDxsZXZp
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3dpdGNoIHJlbWFpbmluZyBwYWludCBmdW5jdGlv
bnMgdG8gbmV3IGxheW91dCB0eXBlcwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lv
biA5MDYwMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OTQsOCArMTk5NCw4IEBAIFN0cmlu
ZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZWxlY3QKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOyAvLyBuZWVkIHRvIHJldHVybiBzb21ldGhpbmcgZGlzdGluY3QgZnJvbSBlbXB0eSBzdHJp
bmcKICAgICAKICAgICBpZiAoaXNOYXRpdmVUZXh0Q29udHJvbCgpKSB7Ci0gICAgICAgIFJlbmRl
clRleHRDb250cm9sKiB0ZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2wobV9yZW5kZXJl
cik7Ci0gICAgICAgIHJldHVybiB0ZXh0Q29udHJvbC0+dGV4dCgpLnN1YnN0cmluZyh0ZXh0Q29u
dHJvbC0+c2VsZWN0aW9uU3RhcnQoKSwgdGV4dENvbnRyb2wtPnNlbGVjdGlvbkVuZCgpIC0gdGV4
dENvbnRyb2wtPnNlbGVjdGlvblN0YXJ0KCkpOworICAgICAgICBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCogdGV4dENvbnRyb2wgPSB0b1JlbmRlclRleHRDb250cm9sKG1fcmVuZGVyZXIpLT50
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCk7CisgICAgICAgIHJldHVybiB0ZXh0Q29udHJvbC0+c2Vs
ZWN0ZWRUZXh0KCk7CiAgICAgfQogICAgIAogICAgIGlmIChhcmlhUm9sZUF0dHJpYnV0ZSgpID09
IFVua25vd25Sb2xlKQpAQCAtMjAyOCw3ICsyMDI4LDcgQEAgUGxhaW5UZXh0UmFuZ2UgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdAogICAgIAogICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFSb2xl
ID0gYXJpYVJvbGVBdHRyaWJ1dGUoKTsKICAgICBpZiAoaXNOYXRpdmVUZXh0Q29udHJvbCgpICYm
IGFyaWFSb2xlID09IFVua25vd25Sb2xlKSB7Ci0gICAgICAgIFJlbmRlclRleHRDb250cm9sKiB0
ZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2wobV9yZW5kZXJlcik7CisgICAgICAgIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRy
b2wobV9yZW5kZXJlciktPnRleHRGb3JtQ29udHJvbEVsZW1lbnQoKTsKICAgICAgICAgcmV0dXJu
IFBsYWluVGV4dFJhbmdlKHRleHRDb250cm9sLT5zZWxlY3Rpb25TdGFydCgpLCB0ZXh0Q29udHJv
bC0+c2VsZWN0aW9uRW5kKCkgLSB0ZXh0Q29udHJvbC0+c2VsZWN0aW9uU3RhcnQoKSk7CiAgICAg
fQogICAgIApAQCAtMjA0MSw3ICsyMDQxLDggQEAgUGxhaW5UZXh0UmFuZ2UgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3Rl
ZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UpCiB7CiAgICAgaWYgKGlzTmF0
aXZlVGV4dENvbnRyb2woKSkgewotICAgICAgICBzZXRTZWxlY3Rpb25SYW5nZShtX3JlbmRlcmVy
LT5ub2RlKCksIHJhbmdlLnN0YXJ0LCByYW5nZS5zdGFydCArIHJhbmdlLmxlbmd0aCk7CisgICAg
ICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4
dENvbnRyb2wobV9yZW5kZXJlciktPnRleHRGb3JtQ29udHJvbEVsZW1lbnQoKTsKKyAgICAgICAg
dGV4dENvbnRyb2wtPnNldFNlbGVjdGlvblJhbmdlKHJhbmdlLnN0YXJ0LCByYW5nZS5zdGFydCAr
IHJhbmdlLmxlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gOTA2
MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NjIsNiArNjYyLDE2IEBAIHZvaWQgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6OnNlbGVjdCgKICAgICBzZXRTZWxlY3Rpb25SYW5nZSgwLCBudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKSk7CiB9CiAKK1N0cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
c2VsZWN0ZWRUZXh0KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUg
dG8gZXh0cmFjdCBzZWxlY3RlZCBjb250ZW50cyBldmVuIGlmIHRoZXJlIHdlcmUgbm8gcmVuZGVy
ZXIuCisgICAgaWYgKCFyZW5kZXJlcigpIHx8IHJlbmRlcmVyKCktPmlzVGV4dENvbnRyb2woKSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgUmVuZGVyVGV4dENvbnRyb2wqIHRleHRD
b250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKTsKKyAgICByZXR1cm4gdGV4
dENvbnRyb2wtPnRleHQoKS5zdWJzdHJpbmcoc2VsZWN0aW9uU3RhcnQoKSwgc2VsZWN0aW9uRW5k
KCkgLSBzZWxlY3Rpb25TdGFydCgpKTsKK30KKwogdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudDo6ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCkKIHsKICAgICBpZiAobV90ZXh0
QXNPZkxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50ICE9IHZhbHVlKCkpIHsKQEAgLTY3MSw5ICs2
ODEsNDYgQEAgdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0YwogICAgIHNl
dENoYW5nZWRTaW5jZUxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KGZhbHNlKTsKIH0KIAorc3Rh
dGljIGlubGluZSBib29sIGhhc1Zpc2libGVUZXh0QXJlYShSZW5kZXJUZXh0Q29udHJvbCogdGV4
dENvbnRyb2wpCit7CisgICAgQVNTRVJUKHRleHRDb250cm9sKTsKKyAgICBIVE1MRWxlbWVudCog
aW5uZXJUZXh0ID0gdGV4dENvbnRyb2wtPmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICByZXR1cm4g
dGV4dENvbnRyb2wtPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBISURERU4gJiYgaW5uZXJUZXh0
ICYmIGlubmVyVGV4dC0+cmVuZGVyZXIoKSAmJiBpbm5lclRleHQtPnJlbmRlckJveCgpLT5oZWln
aHQoKTsKK30KKwogdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9u
UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKQogewotICAgIFdlYkNvcmU6OnNldFNlbGVjdGlvblJh
bmdlKHRoaXMsIHN0YXJ0LCBlbmQpOworICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCisgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJl
cigpLT5pc1RleHRDb250cm9sKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGVuZCA9IG1heChl
bmQsIDApOworICAgIHN0YXJ0ID0gbWluKG1heChzdGFydCwgMCksIGVuZCk7CisKKyAgICBSZW5k
ZXJUZXh0Q29udHJvbCogY29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSk7
CisgICAgaWYgKCFoYXNWaXNpYmxlVGV4dEFyZWEoY29udHJvbCkpIHsKKyAgICAgICAgY2FjaGVT
ZWxlY3Rpb24oc3RhcnQsIGVuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWaXNp
YmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IGNvbnRyb2wtPnZpc2libGVQb3NpdGlvbkZvcklu
ZGV4KHN0YXJ0KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb247CisgICAgaWYgKHN0
YXJ0ID09IGVuZCkKKyAgICAgICAgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgIGVs
c2UKKyAgICAgICAgZW5kUG9zaXRpb24gPSBjb250cm9sLT52aXNpYmxlUG9zaXRpb25Gb3JJbmRl
eChlbmQpOworCisgICAgLy8gc3RhcnRQb3NpdGlvbiBhbmQgZW5kUG9zaXRpb24gY2FuIGJlIG51
bGwgcG9zaXRpb24gZm9yIGV4YW1wbGUgd2hlbgorICAgIC8vICItd2Via2l0LXVzZXItc2VsZWN0
OiBub25lIiBzdHlsZSBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLgorICAgIGlmIChzdGFydFBvc2l0
aW9uLmlzTm90TnVsbCgpICYmIGVuZFBvc2l0aW9uLmlzTm90TnVsbCgpKSB7CisgICAgICAgIEFT
U0VSVChzdGFydFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+c2hh
ZG93QW5jZXN0b3JOb2RlKCkgPT0gdGhpcworICAgICAgICAgICAgJiYgZW5kUG9zaXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA9PSB0
aGlzKTsKKyAgICB9CisKKyAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IFZpc2li
bGVTZWxlY3Rpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkt
PnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwogfQogCiBpbnQgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KCkgY29uc3QKQEAgLTY4Miw5ICs3MjksMTYgQEAgaW50
IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3RpbwogICAgICAgICByZXR1cm4gMDsK
ICAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlzICYmIGhhc0NhY2hlZFNl
bGVjdGlvblN0YXJ0KCkpCiAgICAgICAgIHJldHVybiBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0Owot
ICAgIGlmICghcmVuZGVyZXIoKSkKKworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZy
YW1lKCk7CisgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFmcmFtZSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvblN0
YXJ0KCk7CisKKyAgICBIVE1MRWxlbWVudCogaW5uZXJUZXh0ID0gdG9SZW5kZXJUZXh0Q29udHJv
bChyZW5kZXJlcigpKS0+aW5uZXJUZXh0RWxlbWVudCgpOworICAgIC8vIERvIG5vdCBjYWxsIGlu
bmVyVGV4dEVsZW1lbnQoKSBpbiB0aGUgZnVuY3Rpb24gYXJndW1lbnRzIGFzIGNyZWF0aW5nIGEg
VmlzaWJsZVBvc2l0aW9uCisgICAgLy8gZnJvbSBmcmFtZS0+c2VsZWN0aW9uLT5zdGFydCgpIGNh
biBibG93IHVzIGZyb20gdW5kZXJuZWF0aC4gQWxzbywgZnVuY3Rpb24gb3JkZXJpbmcgaXMKKyAg
ICAvLyB1c3VhbGx5IGRlcGVuZGVudCBvbiB0aGUgY29tcGlsZXIuCisgICAgcmV0dXJuIFJlbmRl
clRleHRDb250cm9sOjppbmRleEZvclZpc2libGVQb3NpdGlvbihpbm5lclRleHQsIGZyYW1lLT5z
ZWxlY3Rpb24oKS0+c3RhcnQoKSk7CiB9CiAKIGludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6c2VsZWN0aW9uRW5kKCkgY29uc3QKQEAgLTY5MywyMSArNzQ3LDY4IEBAIGludCBIVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW8KICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYg
KGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0gdGhpcyAmJiBoYXNDYWNoZWRTZWxlY3Rpb25F
bmQoKSkKICAgICAgICAgcmV0dXJuIG1fY2FjaGVkU2VsZWN0aW9uRW5kOwotICAgIGlmICghcmVu
ZGVyZXIoKSkKKworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CisgICAg
aWYgKCFyZW5kZXJlcigpIHx8ICFmcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvbkVuZCgpOworCisgICAg
SFRNTEVsZW1lbnQqIGlubmVyVGV4dCA9IHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSkt
PmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICAvLyBEbyBub3QgY2FsbCBpbm5lclRleHRFbGVtZW50
KCkgaW4gdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBhcyBjcmVhdGluZyBhIFZpc2libGVQb3NpdGlv
bgorICAgIC8vIGZyb20gZnJhbWUtPnNlbGVjdGlvbi0+c3RhcnQoKSBjYW4gYmxvdyB1cyBmcm9t
IHVuZGVybmVhdGguIEFsc28sIGZ1bmN0aW9uIG9yZGVyaW5nIGlzCisgICAgLy8gdXN1YWxseSBk
ZXBlbmRlbnQgb24gdGhlIGNvbXBpbGVyLgorICAgIHJldHVybiBSZW5kZXJUZXh0Q29udHJvbDo6
aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oaW5uZXJUZXh0LCBmcmFtZS0+c2VsZWN0aW9uKCktPmVu
ZCgpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldENvbnRhaW5lckFuZE9mZnNldEZvclJh
bmdlKE5vZGUqIG5vZGUsIGludCBvZmZzZXQsIE5vZGUqJiBjb250YWluZXJOb2RlLCBpbnQmIG9m
ZnNldEluQ29udGFpbmVyKQoreworICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpIHsKKyAgICAg
ICAgY29udGFpbmVyTm9kZSA9IG5vZGU7CisgICAgICAgIG9mZnNldEluQ29udGFpbmVyID0gb2Zm
c2V0OworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnRhaW5lck5vZGUgPSBub2RlLT5wYXJlbnRO
b2RlKCk7CisgICAgICAgIG9mZnNldEluQ29udGFpbmVyID0gbm9kZS0+bm9kZUluZGV4KCkgKyBv
ZmZzZXQ7CisgICAgfQogfQogCiBQYXNzUmVmUHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6c2VsZWN0aW9uKCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIWlz
VGV4dEZvcm1Db250cm9sKCkgfHwgIWhhc0NhY2hlZFNlbGVjdGlvblN0YXJ0KCkgfHwgIWhhc0Nh
Y2hlZFNlbGVjdGlvbkVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdG9SZW5k
ZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+c2VsZWN0aW9uKG1fY2FjaGVkU2VsZWN0aW9uU3Rh
cnQsIG1fY2FjaGVkU2VsZWN0aW9uRW5kKTsKLX0KKyAgICAKKyAgICBpbnQgc3RhcnQgPSBtX2Nh
Y2hlZFNlbGVjdGlvblN0YXJ0OworICAgIGludCBlbmQgPSBtX2NhY2hlZFNlbGVjdGlvbkVuZDsK
KworICAgIEFTU0VSVChzdGFydCA8PSBlbmQpOworICAgIEhUTUxFbGVtZW50KiBpbm5lclRleHQg
PSB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5pbm5lclRleHRFbGVtZW50KCk7Cisg
ICAgaWYgKCFpbm5lclRleHQpCisgICAgICAgIHJldHVybiAwOwogCi12b2lkIEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpyZXN0b3JlQ2FjaGVkU2VsZWN0aW9uKCkKLXsKLSAgICBXZWJDb3Jl
OjpzZXRTZWxlY3Rpb25SYW5nZSh0aGlzLCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0LCBtX2NhY2hl
ZFNlbGVjdGlvbkVuZCk7CisgICAgaWYgKCFpbm5lclRleHQtPmZpcnN0Q2hpbGQoKSkKKyAgICAg
ICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgaW5uZXJUZXh0LCAwLCBpbm5lclRl
eHQsIDApOworCisgICAgaW50IG9mZnNldCA9IDA7CisgICAgTm9kZSogc3RhcnROb2RlID0gMDsK
KyAgICBOb2RlKiBlbmROb2RlID0gMDsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBpbm5lclRleHQt
PmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoaW5uZXJU
ZXh0KSkgeworICAgICAgICBBU1NFUlQoIW5vZGUtPmZpcnN0Q2hpbGQoKSk7CisgICAgICAgIEFT
U0VSVChub2RlLT5pc1RleHROb2RlKCkgfHwgbm9kZS0+aGFzVGFnTmFtZShiclRhZykpOworICAg
ICAgICBpbnQgbGVuZ3RoID0gbm9kZS0+aXNUZXh0Tm9kZSgpID8gbGFzdE9mZnNldEluTm9kZShu
b2RlKSA6IDE7CisKKyAgICAgICAgaWYgKG9mZnNldCA8PSBzdGFydCAmJiBzdGFydCA8PSBvZmZz
ZXQgKyBsZW5ndGgpCisgICAgICAgICAgICBzZXRDb250YWluZXJBbmRPZmZzZXRGb3JSYW5nZShu
b2RlLCBzdGFydCAtIG9mZnNldCwgc3RhcnROb2RlLCBzdGFydCk7CisKKyAgICAgICAgaWYgKG9m
ZnNldCA8PSBlbmQgJiYgZW5kIDw9IG9mZnNldCArIGxlbmd0aCkgeworICAgICAgICAgICAgc2V0
Q29udGFpbmVyQW5kT2Zmc2V0Rm9yUmFuZ2Uobm9kZSwgZW5kIC0gb2Zmc2V0LCBlbmROb2RlLCBl
bmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBvZmZzZXQgKz0g
bGVuZ3RoOworICAgIH0KKworICAgIGlmICghc3RhcnROb2RlIHx8ICFlbmROb2RlKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0
Tm9kZSwgc3RhcnQsIGVuZE5vZGUsIGVuZCk7CiB9CiAKIHZvaWQgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6OnNlbGVjdGlvbkNoYW5nZWQoYm9vbCB1c2VyVHJpZ2dlcmVkKQpAQCAtNzE1LDgg
KzgxNiw3IEBAIHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGkKICAgICBp
ZiAoIXJlbmRlcmVyKCkgfHwgIWlzVGV4dEZvcm1Db250cm9sKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlbmRlclRleHRDb250cm9sKiByZW5kZXJUZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4
dENvbnRyb2wocmVuZGVyZXIoKSk7Ci0gICAgY2FjaGVTZWxlY3Rpb24ocmVuZGVyVGV4dENvbnRy
b2wtPnNlbGVjdGlvblN0YXJ0KCksIHJlbmRlclRleHRDb250cm9sLT5zZWxlY3Rpb25FbmQoKSk7
CisgICAgY2FjaGVTZWxlY3Rpb24oc2VsZWN0aW9uU3RhcnQoKSwgc2VsZWN0aW9uRW5kKCkpOwog
CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAg
aWYgKGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpICYmIHVzZXJUcmlnZ2VyZWQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkocmV2aXNp
b24gOTA2MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDYgKzIwNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
bGVjdCgpOwogICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKTsK
ICAgICBQYXNzUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24oKSBjb25zdDsKKyAgICBTdHJpbmcgc2Vs
ZWN0ZWRUZXh0KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb3JtQ29udHJv
bENoYW5nZUV2ZW50KCk7CiAKQEAgLTIzMCw3ICsyMzEsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2
b2lkIHNldFRleHRBc09mTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoY29uc3QgU3RyaW5nJiB0
ZXh0KSB7IG1fdGV4dEFzT2ZMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCA9IHRleHQ7IH0KIAot
ICAgIHZvaWQgcmVzdG9yZUNhY2hlZFNlbGVjdGlvbigpOworICAgIHZvaWQgcmVzdG9yZUNhY2hl
ZFNlbGVjdGlvbigpIHsgc2V0U2VsZWN0aW9uUmFuZ2UobV9jYWNoZWRTZWxlY3Rpb25TdGFydCwg
bV9jYWNoZWRTZWxlY3Rpb25FbmQpOyB9CiAgICAgYm9vbCBoYXNDYWNoZWRTZWxlY3Rpb25TdGFy
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQgPj0gMDsgfQogICAgIGJv
b2wgaGFzQ2FjaGVkU2VsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTZWxlY3Rp
b25FbmQgPj0gMDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDkwNjAyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxNiw3ICsxMDE2LDcgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpzZXRWYWx1ZShjb25zdCBTdAogICAgIGlmIChpc1RleHRGaWVsZCgpKSB7
CiAgICAgICAgIHVuc2lnbmVkIG1heCA9IHZpc2libGVWYWx1ZSgpLmxlbmd0aCgpOwogICAgICAg
ICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlzKQotICAgICAgICAgICAgV2Vi
Q29yZTo6c2V0U2VsZWN0aW9uUmFuZ2UodGhpcywgbWF4LCBtYXgpOworICAgICAgICAgICAgc2V0
U2VsZWN0aW9uUmFuZ2UobWF4LCBtYXgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjYWNo
ZVNlbGVjdGlvbihtYXgsIG1heCk7CiAgICAgICAgIG1fc3VnZ2VzdGVkVmFsdWUgPSBTdHJpbmco
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcAkocmV2aXNpb24gOTA2MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVk
ZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
LSNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxCUkVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgpAQCAtODIsNiArODEsMTEgQEAgUmVuZGVyVGV4dENvbnRyb2w6On5SZW5kZXJU
ZXh0Q29udHJvbCgpCiB7CiB9CiAKK0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiBSZW5kZXJU
ZXh0Q29udHJvbDo6dGV4dEZvcm1Db250cm9sRWxlbWVudCgpCit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Kj4obm9kZSgpKTsKK30KKwogdm9pZCBS
ZW5kZXJUZXh0Q29udHJvbDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBSZW5kZXJCbG9jazo6c3R5bGVEaWRD
aGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwpAQCAtMTczLDczICsxNzcsNiBAQCB2b2lkIFJlbmRlclRl
eHRDb250cm9sOjpzZXRMYXN0Q2hhbmdlV2FzCiAgICAgZG9jdW1lbnQoKS0+c2V0SWdub3JlQXV0
b2ZvY3VzKGxhc3RDaGFuZ2VXYXNVc2VyRWRpdCk7CiB9CiAKLWludCBSZW5kZXJUZXh0Q29udHJv
bDo6c2VsZWN0aW9uU3RhcnQoKSBjb25zdAotewotICAgIEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZy
YW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgSFRN
TEVsZW1lbnQqIGlubmVyVGV4dCA9IGlubmVyVGV4dEVsZW1lbnQoKTsKLSAgICAvLyBEbyBub3Qg
Y2FsbCBpbm5lclRleHRFbGVtZW50KCkgaW4gdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBhcyBjcmVh
dGluZyBhIFZpc2libGVQb3NpdGlvbgotICAgIC8vIGZyb20gZnJhbWUtPnNlbGVjdGlvbi0+c3Rh
cnQoKSBjYW4gYmxvdyB1cyBmcm9tIHVuZGVybmVhdGguIEFsc28sIGZ1bmN0aW9uIG9yZGVyaW5n
IGlzCi0gICAgLy8gdXN1YWxseSBkZXBlbmRlbnQgb24gdGhlIGNvbXBpbGVyLgotICAgIHJldHVy
biBSZW5kZXJUZXh0Q29udHJvbDo6aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oaW5uZXJUZXh0LCBm
cmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkpOwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRyb2w6
OnNlbGVjdGlvbkVuZCgpIGNvbnN0Ci17Ci0gICAgRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUo
KTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEhUTUxFbGVtZW50
KiBpbm5lclRleHQgPSBpbm5lclRleHRFbGVtZW50KCk7Ci0gICAgLy8gRG8gbm90IGNhbGwgaW5u
ZXJUZXh0RWxlbWVudCgpIGluIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMgYXMgY3JlYXRpbmcgYSBW
aXNpYmxlUG9zaXRpb24KLSAgICAvLyBmcm9tIGZyYW1lLT5zZWxlY3Rpb24tPmVuZCgpIGNhbiBi
bG93IHVzIGZyb20gdW5kZXJuZWF0aC4gQWxzbywgZnVuY3Rpb24gb3JkZXJpbmcgaXMKLSAgICAv
LyB1c3VhbGx5IGRlcGVuZGVudCBvbiB0aGUgY29tcGlsZXIuCi0gICAgcmV0dXJuIFJlbmRlclRl
eHRDb250cm9sOjppbmRleEZvclZpc2libGVQb3NpdGlvbihpbm5lclRleHQsIGZyYW1lLT5zZWxl
Y3Rpb24oKS0+ZW5kKCkpOwotfQotCi1ib29sIFJlbmRlclRleHRDb250cm9sOjpoYXNWaXNpYmxl
VGV4dEFyZWEoKSBjb25zdAotewotICAgIEhUTUxFbGVtZW50KiBpbm5lclRleHQgPSBpbm5lclRl
eHRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4g
fHwgIWlubmVyVGV4dCB8fCAhaW5uZXJUZXh0LT5yZW5kZXJlcigpIHx8ICFpbm5lclRleHQtPnJl
bmRlckJveCgpLT5oZWlnaHQoKTsKLX0KLQotdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShOb2RlKiBu
b2RlLCBpbnQgc3RhcnQsIGludCBlbmQpCi17Ci0gICAgQVNTRVJUKG5vZGUpOwotICAgIG5vZGUt
PmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotCi0g
ICAgaWYgKCFub2RlLT5yZW5kZXJlcigpIHx8ICFub2RlLT5yZW5kZXJlcigpLT5pc1RleHRDb250
cm9sKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGVuZCA9IG1heChlbmQsIDApOwotICAgIHN0
YXJ0ID0gbWluKG1heChzdGFydCwgMCksIGVuZCk7Ci0KLSAgICBSZW5kZXJUZXh0Q29udHJvbCog
Y29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2wobm9kZS0+cmVuZGVyZXIoKSk7Ci0KLSAgICBp
ZiAoY29udHJvbC0+aGFzVmlzaWJsZVRleHRBcmVhKCkpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqPihub2RlKS0+Y2FjaGVTZWxlY3Rpb24oc3RhcnQs
IGVuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
UG9zaXRpb24gPSBjb250cm9sLT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChzdGFydCk7Ci0gICAg
VmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uOwotICAgIGlmIChzdGFydCA9PSBlbmQpCi0gICAg
ICAgIGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIGVuZFBv
c2l0aW9uID0gY29udHJvbC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoZW5kKTsKLQotICAgIC8v
IHN0YXJ0UG9zaXRpb24gYW5kIGVuZFBvc2l0aW9uIGNhbiBiZSBudWxsIHBvc2l0aW9uIGZvciBl
eGFtcGxlIHdoZW4KLSAgICAvLyAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZSIgc3R5bGUgYXR0
cmlidXRlIGlzIHNwZWNpZmllZC4KLSAgICBpZiAoc3RhcnRQb3NpdGlvbi5pc05vdE51bGwoKSAm
JiBlbmRQb3NpdGlvbi5pc05vdE51bGwoKSkgewotICAgICAgICBBU1NFUlQoc3RhcnRQb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgp
ID09IG5vZGUgJiYgZW5kUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgp
LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA9PSBub2RlKTsKLSAgICB9Ci0gICAgVmlzaWJsZVNlbGVj
dGlvbiBuZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBv
c2l0aW9uKTsKLQotICAgIGlmIChGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFt
ZSgpKQotICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rp
b24pOwotfQotCiBib29sIFJlbmRlclRleHRDb250cm9sOjppc1NlbGVjdGFibGVFbGVtZW50KEhU
TUxFbGVtZW50KiBpbm5lclRleHQsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlIHx8ICFp
bm5lclRleHQpCkBAIC0yNTYsNTIgKzE5Myw2IEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2w6Omlz
U2VsZWN0YWJsZUVsZW0KICAgICAgICAgfHwgKHNoYWRvd0FuY2VzdG9yLT5oYXNUYWdOYW1lKGlu
cHV0VGFnKSAmJiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93QW5jZXN0b3Ip
LT5pc1RleHRGaWVsZCgpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRDb250YWluZXJB
bmRPZmZzZXRGb3JSYW5nZShOb2RlKiBub2RlLCBpbnQgb2Zmc2V0LCBOb2RlKiYgY29udGFpbmVy
Tm9kZSwgaW50JiBvZmZzZXRJbkNvbnRhaW5lcikKLXsKLSAgICBpZiAobm9kZS0+aXNUZXh0Tm9k
ZSgpKSB7Ci0gICAgICAgIGNvbnRhaW5lck5vZGUgPSBub2RlOwotICAgICAgICBvZmZzZXRJbkNv
bnRhaW5lciA9IG9mZnNldDsKLSAgICB9IGVsc2UgewotICAgICAgICBjb250YWluZXJOb2RlID0g
bm9kZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICBvZmZzZXRJbkNvbnRhaW5lciA9IG5vZGUtPm5v
ZGVJbmRleCgpICsgb2Zmc2V0OwotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxSYW5nZT4gUmVuZGVy
VGV4dENvbnRyb2w6OnNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKHN0YXJ0IDw9IGVuZCk7Ci0gICAgSFRNTEVsZW1lbnQqIGlubmVyVGV4dCA9IGlubmVy
VGV4dEVsZW1lbnQoKTsKLSAgICBpZiAoIWlubmVyVGV4dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBpZiAoIWlubmVyVGV4dC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gUmFuZ2U6
OmNyZWF0ZShkb2N1bWVudCgpLCBpbm5lclRleHQsIDAsIGlubmVyVGV4dCwgMCk7Ci0KLSAgICBp
bnQgb2Zmc2V0ID0gMDsKLSAgICBOb2RlKiBzdGFydE5vZGUgPSAwOwotICAgIE5vZGUqIGVuZE5v
ZGUgPSAwOwotICAgIGZvciAoTm9kZSogbm9kZSA9IGlubmVyVGV4dC0+Zmlyc3RDaGlsZCgpOyBu
b2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShpbm5lclRleHQpKSB7Ci0gICAgICAg
IEFTU0VSVCghbm9kZS0+Zmlyc3RDaGlsZCgpKTsKLSAgICAgICAgQVNTRVJUKG5vZGUtPmlzVGV4
dE5vZGUoKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJyVGFnKSk7Ci0gICAgICAgIGludCBsZW5ndGgg
PSBub2RlLT5pc1RleHROb2RlKCkgPyBsYXN0T2Zmc2V0SW5Ob2RlKG5vZGUpIDogMTsKLSAgICAK
LSAgICAgICAgaWYgKG9mZnNldCA8PSBzdGFydCAmJiBzdGFydCA8PSBvZmZzZXQgKyBsZW5ndGgp
Ci0gICAgICAgICAgICBzZXRDb250YWluZXJBbmRPZmZzZXRGb3JSYW5nZShub2RlLCBzdGFydCAt
IG9mZnNldCwgc3RhcnROb2RlLCBzdGFydCk7Ci0KLSAgICAgICAgaWYgKG9mZnNldCA8PSBlbmQg
JiYgZW5kIDw9IG9mZnNldCArIGxlbmd0aCkgewotICAgICAgICAgICAgc2V0Q29udGFpbmVyQW5k
T2Zmc2V0Rm9yUmFuZ2Uobm9kZSwgZW5kIC0gb2Zmc2V0LCBlbmROb2RlLCBlbmQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBvZmZzZXQgKz0gbGVuZ3RoOwotICAg
IH0KLSAgICAKLSAgICBpZiAoIXN0YXJ0Tm9kZSB8fCAhZW5kTm9kZSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE5vZGUsIHN0
YXJ0LCBlbmROb2RlLCBlbmQpOwotfQotCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRy
b2w6OnZpc2libGVQb3NpdGlvbkZvckluZGV4KGludCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAo
aW5kZXggPD0gMCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbC5oCShyZXZpc2lvbiA5MDYwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ7CiBj
bGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogY2xhc3MgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ7CiBj
bGFzcyBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ7CkBAIC0zNCwxNiArMzUsMTMgQEAgY2xh
c3MgUmVuZGVyVGV4dENvbnRyb2wgOiBwdWJsaWMgUmVuZGVyQgogcHVibGljOgogICAgIHZpcnR1
YWwgflJlbmRlclRleHRDb250cm9sKCk7CiAKKyAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dCogdGV4dEZvcm1Db250cm9sRWxlbWVudCgpOwogICAgIHZpcnR1YWwgSFRNTEVsZW1lbnQqIGlu
bmVyVGV4dEVsZW1lbnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBjcmVhdGVJbm5lclRleHRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHls
ZSkgY29uc3QgPSAwOwogCiAgICAgYm9vbCBsYXN0Q2hhbmdlV2FzVXNlckVkaXQoKSBjb25zdCB7
IHJldHVybiBtX2xhc3RDaGFuZ2VXYXNVc2VyRWRpdDsgfQogICAgIHZvaWQgc2V0TGFzdENoYW5n
ZVdhc1VzZXJFZGl0KGJvb2wgbGFzdENoYW5nZVdhc1VzZXJFZGl0KTsKIAotICAgIGludCBzZWxl
Y3Rpb25TdGFydCgpIGNvbnN0OwotICAgIGludCBzZWxlY3Rpb25FbmQoKSBjb25zdDsKLSAgICBQ
YXNzUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQog
ICAgIHZpcnR1YWwgdm9pZCBzdWJ0cmVlSGFzQ2hhbmdlZCgpOwogICAgIFN0cmluZyB0ZXh0KCk7
CiAgICAgU3RyaW5nIHRleHRXaXRoSGFyZExpbmVCcmVha3MoKTsKQEAgLTk2LDcgKzk0LDYgQEAg
cHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0ZvcmNlZFN0eWxlUmVjYWxjUHJv
cGFnYXRpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBib29sIGhhc1Zpc2libGVU
ZXh0QXJlYSgpIGNvbnN0OwogICAgIGZyaWVuZCB2b2lkIHNldFNlbGVjdGlvblJhbmdlKE5vZGUq
LCBpbnQgc3RhcnQsIGludCBlbmQpOwogICAgIHN0YXRpYyBib29sIGlzU2VsZWN0YWJsZUVsZW1l
bnQoSFRNTEVsZW1lbnQqLCBOb2RlKik7CiAgICAgCkBAIC0xMDksOCArMTA2LDYgQEAgcHJpdmF0
ZToKICAgICBib29sIG1fbGFzdENoYW5nZVdhc1VzZXJFZGl0OwogfTsKIAotdm9pZCBzZXRTZWxl
Y3Rpb25SYW5nZShOb2RlKiwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKLQogaW5saW5lIFJlbmRlclRl
eHRDb250cm9sKiB0b1JlbmRlclRleHRDb250cm9sKFJlbmRlck9iamVjdCogb2JqZWN0KQogeyAK
ICAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzVGV4dENvbnRyb2woKSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwkocmV2aXNpb24gOTA2NDMpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDExLTA3LTA4ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgc2VsZWN0aW9uIHJlbGF0ZWQg
Y29kZSBmcm9tIFJlbmRlclRleHRDb250cm9sIHRvIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDEzMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2Vk
IGNhbGxzIHRvIFdlYkNvcmU6OnNldFNlbGVjdGlvblJhbmdlIGJ5IGNhbGxzIHRvIEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZS4KKworICAgICAgICAqIEFwaS9x
d2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OmlucHV0TWV0aG9kRXZlbnQp
OgorCiAyMDExLTA3LTA1ICBSYWZhZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3NzYS5v
cmc+CiAKICAgICAgICAgW1F0XSBGaXggdHN0X1FXZWJGcmFtZTo6c2V0SHRtbFdpdGhSZXNvdXJj
ZSgpIEFQSSB0ZXN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA5
MDYwMikKKysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTExMSw4ICsxMTExLDEwIEBAIHZvaWQgUVdlYlBhZ2VQcml2YXRlOjppbnB1dE1ldGhv
ZEV2ZW50KFEKICAgICAgICAgY2FzZSBRSW5wdXRNZXRob2RFdmVudDo6U2VsZWN0aW9uOiB7CiAg
ICAgICAgICAgICBoYXNTZWxlY3Rpb24gPSB0cnVlOwogICAgICAgICAgICAgLy8gQSBzZWxlY3Rp
b24gaW4gdGhlIGlucHV0TWV0aG9kRXZlbnQgaXMgYWx3YXlzIHJlZmxlY3RlZCBpbiB0aGUgdmlz
aWJsZSB0ZXh0Ci0gICAgICAgICAgICBpZiAobm9kZSkKLSAgICAgICAgICAgICAgICBzZXRTZWxl
Y3Rpb25SYW5nZShub2RlLCBxTWluKGEuc3RhcnQsIChhLnN0YXJ0ICsgYS5sZW5ndGgpKSwgcU1h
eChhLnN0YXJ0LCAoYS5zdGFydCArIGEubGVuZ3RoKSkpOworICAgICAgICAgICAgaWYgKG5vZGUp
IHsKKyAgICAgICAgICAgICAgICBpZiAoSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRleHRD
b250cm9sID0gdG9UZXh0Rm9ybUNvbnRyb2wobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHRl
eHRDb250cm9sLT5zZXRTZWxlY3Rpb25SYW5nZShxTWluKGEuc3RhcnQsIChhLnN0YXJ0ICsgYS5s
ZW5ndGgpKSwgcU1heChhLnN0YXJ0LCAoYS5zdGFydCArIGEubGVuZ3RoKSkpOworICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBpZiAoIWV2LT5wcmVlZGl0U3RyaW5nKCkuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgICAgIGVkaXRvci0+c2V0Q29tcG9zaXRpb24oZXYtPnByZWVkaXRTdHJpbmco
KSwgdW5kZXJsaW5lcywgcU1pbihhLnN0YXJ0LCAoYS5zdGFydCArIGEubGVuZ3RoKSksIHFNYXgo
YS5zdGFydCwgKGEuc3RhcnQgKyBhLmxlbmd0aCkpKTsKQEAgLTExMzIsNyArMTEzNCw4IEBAIHZv
aWQgUVdlYlBhZ2VQcml2YXRlOjppbnB1dE1ldGhvZEV2ZW50KFEKICAgICBpZiAobm9kZSAmJiBl
di0+cmVwbGFjZW1lbnRMZW5ndGgoKSA+IDApIHsKICAgICAgICAgaW50IGN1cnNvclBvcyA9IGZy
YW1lLT5zZWxlY3Rpb24oKS0+ZXh0ZW50KCkub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CiAgICAg
ICAgIGludCBzdGFydCA9IGN1cnNvclBvcyArIGV2LT5yZXBsYWNlbWVudFN0YXJ0KCk7Ci0gICAg
ICAgIHNldFNlbGVjdGlvblJhbmdlKG5vZGUsIHN0YXJ0LCBzdGFydCArIGV2LT5yZXBsYWNlbWVu
dExlbmd0aCgpKTsKKyAgICAgICAgaWYgKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0
Q29udHJvbCA9IHRvVGV4dEZvcm1Db250cm9sKG5vZGUpKQorICAgICAgICAgICAgdGV4dENvbnRy
b2wtPnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBzdGFydCArIGV2LT5yZXBsYWNlbWVudExlbmd0
aCgpKTsKICAgICAgICAgLy8gQ29tbWl0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBjb21taXRTdHJp
bmcgaXMgZW1wdHksIHRvIGdldCByaWQgb2Ygc2VsZWN0aW9uLgogICAgICAgICBlZGl0b3ItPmNv
bmZpcm1Db21wb3NpdGlvbihldi0+Y29tbWl0U3RyaW5nKCkpOwogICAgIH0gZWxzZSBpZiAoIWV2
LT5jb21taXRTdHJpbmcoKS5pc0VtcHR5KCkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100140</attachid>
            <date>2011-07-08 11:39:24 -0700</date>
            <delta_ts>2011-07-09 18:58:15 -0700</delta_ts>
            <desc>resubmit for qt-ews</desc>
            <filename>bug-64133-20110708113923.patch</filename>
            <type>text/plain</type>
            <size>22301</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwNjQzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDctMDcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBzZWxlY3Rpb24gcmVsYXRl
ZCBjb2RlIGZyb20gUmVuZGVyVGV4dENvbnRyb2wgdG8gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTMz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQg
c2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwgaGFzVmlzaWJsZVRleHRBcmVhLCBzZXRTZWxl
Y3Rpb25SYW5nZSwgc2V0Q29udGFpbmVyQW5kT2Zmc2V0Rm9yUmFuZ2UKKyAgICAgICAgYW5kIHNl
bGVjdGlvbiBmcm9tIFJlbmRlclRleHRDb250cm9sLmNwcCB0byBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmNwcC4KKworICAgICAgICBUaGlzIHJlZmFjdG9yaW5nIHJlbW92ZXMgUmVuZGVyVGV4dENv
bnRyb2wncyBkZXBlbmRlbmN5IG9uIEZyYW1lU2VsZWN0aW9uLgorCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNlbGVjdGVkVGV4dCk6IENhbGxzIEhUTUxUZXh0
RnJvbUNvbnRyb2w6OnNlbGVjdGVkVGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnNlbGVjdGVkVGV4dFJhbmdlKTogQ2FsbHMgc2VsZWN0aW9uU3RhcnQg
YW5kIHNlbGVjdGlvbkVuZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnNldFNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgICogaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50OjpzZWxlY3RlZFRleHQpOiBFeHRyYWN0ZWQgZnJvbSBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpzZWxlY3RlZFRleHQuCisgICAgICAgIChXZWJDb3JlOjpoYXNWaXNpYmxl
VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6
OnNldFNlbGVjdGlvblJhbmdlKTogTWVyZ2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9mIHRoZSBzYW1l
IG5hbWUgaW4KKyAgICAgICAgUmVuZGVyVGV4dENvbnRyb2wuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uU3RhcnQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb25FbmQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnNldENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdlKTog
TW92ZWQgZnJvbSBSZW5kZXJUZXh0Q29udHJvbC5jcHAKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb24pOiBNZXJnZWQgd2l0aCB0aGUgZnVuY3Rp
b24gb2YgdGhlIHNhbWUgbmFtZSBpbiBSZW5kZXJUZXh0Q29udHJvbC4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb25DaGFuZ2VkKTogQ2FsbHMg
c2VsZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZC4KKyAgICAgICAgKiBodG1sL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50OjpyZXN0b3JlQ2FjaGVkU2VsZWN0aW9uKTogTW92ZWQgZnJvbSBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50LmNwcCBub3cgdGhhdAorICAgICAgICBhbGwgZnVuY3Rpb25zIGFyZSBzZWxmLWNv
bnRhaW5lZCBpbiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC4KKyAgICAgICAgKiBodG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
c2V0VmFsdWUpOiBDYWxscyBzZXRTZWxlY3Rpb25SYW5nZS4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRy
b2w6OnRleHRGb3JtQ29udHJvbEVsZW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuaDoKKwogMjAxMS0wNy0wOCAgQ2hhbmcgU2h1ICA8Y3NodUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVwZGF0ZSBjYWxsaW5nIHNpdGVzIGFmdGVyIGZ1bmN0aW9uIHJl
bmFtZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDkwNjQzKQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTk5NCw4ICsxOTk0LDggQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnNlbGVjdAogICAgICAgICByZXR1cm4gU3RyaW5nKCk7IC8vIG5lZWQgdG8g
cmV0dXJuIHNvbWV0aGluZyBkaXN0aW5jdCBmcm9tIGVtcHR5IHN0cmluZwogICAgIAogICAgIGlm
IChpc05hdGl2ZVRleHRDb250cm9sKCkpIHsKLSAgICAgICAgUmVuZGVyVGV4dENvbnRyb2wqIHRl
eHRDb250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJvbChtX3JlbmRlcmVyKTsKLSAgICAgICAgcmV0
dXJuIHRleHRDb250cm9sLT50ZXh0KCkuc3Vic3RyaW5nKHRleHRDb250cm9sLT5zZWxlY3Rpb25T
dGFydCgpLCB0ZXh0Q29udHJvbC0+c2VsZWN0aW9uRW5kKCkgLSB0ZXh0Q29udHJvbC0+c2VsZWN0
aW9uU3RhcnQoKSk7CisgICAgICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0Q29u
dHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2wobV9yZW5kZXJlciktPnRleHRGb3JtQ29udHJvbEVs
ZW1lbnQoKTsKKyAgICAgICAgcmV0dXJuIHRleHRDb250cm9sLT5zZWxlY3RlZFRleHQoKTsKICAg
ICB9CiAgICAgCiAgICAgaWYgKGFyaWFSb2xlQXR0cmlidXRlKCkgPT0gVW5rbm93blJvbGUpCkBA
IC0yMDI4LDcgKzIwMjgsNyBAQCBQbGFpblRleHRSYW5nZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0CiAgICAgCiAgICAgQWNjZXNzaWJpbGl0eVJvbGUgYXJpYVJvbGUgPSBhcmlhUm9sZUF0dHJp
YnV0ZSgpOwogICAgIGlmIChpc05hdGl2ZVRleHRDb250cm9sKCkgJiYgYXJpYVJvbGUgPT0gVW5r
bm93blJvbGUpIHsKLSAgICAgICAgUmVuZGVyVGV4dENvbnRyb2wqIHRleHRDb250cm9sID0gdG9S
ZW5kZXJUZXh0Q29udHJvbChtX3JlbmRlcmVyKTsKKyAgICAgICAgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQqIHRleHRDb250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJvbChtX3JlbmRlcmVyKS0+
dGV4dEZvcm1Db250cm9sRWxlbWVudCgpOwogICAgICAgICByZXR1cm4gUGxhaW5UZXh0UmFuZ2Uo
dGV4dENvbnRyb2wtPnNlbGVjdGlvblN0YXJ0KCksIHRleHRDb250cm9sLT5zZWxlY3Rpb25FbmQo
KSAtIHRleHRDb250cm9sLT5zZWxlY3Rpb25TdGFydCgpKTsKICAgICB9CiAgICAgCkBAIC0yMDQx
LDcgKzIwNDEsOCBAQCBQbGFpblRleHRSYW5nZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0CiB2
b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkVGV4dFJhbmdlKGNvbnN0
IFBsYWluVGV4dFJhbmdlJiByYW5nZSkKIHsKICAgICBpZiAoaXNOYXRpdmVUZXh0Q29udHJvbCgp
KSB7Ci0gICAgICAgIHNldFNlbGVjdGlvblJhbmdlKG1fcmVuZGVyZXItPm5vZGUoKSwgcmFuZ2Uu
c3RhcnQsIHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQqIHRleHRDb250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJvbChtX3JlbmRl
cmVyKS0+dGV4dEZvcm1Db250cm9sRWxlbWVudCgpOworICAgICAgICB0ZXh0Q29udHJvbC0+c2V0
U2VsZWN0aW9uUmFuZ2UocmFuZ2Uuc3RhcnQsIHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVuZ3RoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MDY0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2Miw2ICs2NjIsMTYgQEAgdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0
KAogICAgIHNldFNlbGVjdGlvblJhbmdlKDAsIG51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsK
IH0KIAorU3RyaW5nIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3RlZFRleHQoKSBj
b25zdAoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBleHRyYWN0IHNlbGVj
dGVkIGNvbnRlbnRzIGV2ZW4gaWYgdGhlcmUgd2VyZSBubyByZW5kZXJlci4KKyAgICBpZiAoIXJl
bmRlcmVyKCkgfHwgcmVuZGVyZXIoKS0+aXNUZXh0Q29udHJvbCgpKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisKKyAgICBSZW5kZXJUZXh0Q29udHJvbCogdGV4dENvbnRyb2wgPSB0b1JlbmRl
clRleHRDb250cm9sKHJlbmRlcmVyKCkpOworICAgIHJldHVybiB0ZXh0Q29udHJvbC0+dGV4dCgp
LnN1YnN0cmluZyhzZWxlY3Rpb25TdGFydCgpLCBzZWxlY3Rpb25FbmQoKSAtIHNlbGVjdGlvblN0
YXJ0KCkpOworfQorCiB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZv
cm1Db250cm9sQ2hhbmdlRXZlbnQoKQogewogICAgIGlmIChtX3RleHRBc09mTGFzdEZvcm1Db250
cm9sQ2hhbmdlRXZlbnQgIT0gdmFsdWUoKSkgewpAQCAtNjcxLDkgKzY4MSw0NiBAQCB2b2lkIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjCiAgICAgc2V0Q2hhbmdlZFNpbmNlTGFz
dEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoZmFsc2UpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wg
aGFzVmlzaWJsZVRleHRBcmVhKFJlbmRlclRleHRDb250cm9sKiB0ZXh0Q29udHJvbCkKK3sKKyAg
ICBBU1NFUlQodGV4dENvbnRyb2wpOworICAgIEhUTUxFbGVtZW50KiBpbm5lclRleHQgPSB0ZXh0
Q29udHJvbC0+aW5uZXJUZXh0RWxlbWVudCgpOworICAgIHJldHVybiB0ZXh0Q29udHJvbC0+c3R5
bGUoKS0+dmlzaWJpbGl0eSgpICE9IEhJRERFTiAmJiBpbm5lclRleHQgJiYgaW5uZXJUZXh0LT5y
ZW5kZXJlcigpICYmIGlubmVyVGV4dC0+cmVuZGVyQm94KCktPmhlaWdodCgpOworfQorCiB2b2lk
IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQs
IGludCBlbmQpCiB7Ci0gICAgV2ViQ29yZTo6c2V0U2VsZWN0aW9uUmFuZ2UodGhpcywgc3RhcnQs
IGVuZCk7CisgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CisKKyAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmlzVGV4dENvbnRy
b2woKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZW5kID0gbWF4KGVuZCwgMCk7CisgICAgc3Rh
cnQgPSBtaW4obWF4KHN0YXJ0LCAwKSwgZW5kKTsKKworICAgIFJlbmRlclRleHRDb250cm9sKiBj
b250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKTsKKyAgICBpZiAoIWhhc1Zp
c2libGVUZXh0QXJlYShjb250cm9sKSkgeworICAgICAgICBjYWNoZVNlbGVjdGlvbihzdGFydCwg
ZW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZpc2libGVQb3NpdGlvbiBzdGFy
dFBvc2l0aW9uID0gY29udHJvbC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoc3RhcnQpOworICAg
IFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbjsKKyAgICBpZiAoc3RhcnQgPT0gZW5kKQorICAg
ICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247CisgICAgZWxzZQorICAgICAgICBlbmRQ
b3NpdGlvbiA9IGNvbnRyb2wtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KGVuZCk7CisKKyAgICAv
LyBzdGFydFBvc2l0aW9uIGFuZCBlbmRQb3NpdGlvbiBjYW4gYmUgbnVsbCBwb3NpdGlvbiBmb3Ig
ZXhhbXBsZSB3aGVuCisgICAgLy8gIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmUiIHN0eWxlIGF0
dHJpYnV0ZSBpcyBzcGVjaWZpZWQuCisgICAgaWYgKHN0YXJ0UG9zaXRpb24uaXNOb3ROdWxsKCkg
JiYgZW5kUG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKKyAgICAgICAgQVNTRVJUKHN0YXJ0UG9zaXRp
b24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUo
KSA9PSB0aGlzCisgICAgICAgICAgICAmJiBlbmRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRl
cHJlY2F0ZWROb2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpID09IHRoaXMpOworICAgIH0KKwor
ICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
KCktPmZyYW1lKCkpCisgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5l
d1NlbGVjdGlvbik7CiB9CiAKIGludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0
aW9uU3RhcnQoKSBjb25zdApAQCAtNjgyLDkgKzcyOSwxNiBAQCBpbnQgSFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQ6OnNlbGVjdGlvCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChkb2N1bWVu
dCgpLT5mb2N1c2VkTm9kZSgpICE9IHRoaXMgJiYgaGFzQ2FjaGVkU2VsZWN0aW9uU3RhcnQoKSkK
ICAgICAgICAgcmV0dXJuIG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQ7Ci0gICAgaWYgKCFyZW5kZXJl
cigpKQorCisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAo
IXJlbmRlcmVyKCkgfHwgIWZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdG9S
ZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+c2VsZWN0aW9uU3RhcnQoKTsKKworICAgIEhU
TUxFbGVtZW50KiBpbm5lclRleHQgPSB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5p
bm5lclRleHRFbGVtZW50KCk7CisgICAgLy8gRG8gbm90IGNhbGwgaW5uZXJUZXh0RWxlbWVudCgp
IGluIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMgYXMgY3JlYXRpbmcgYSBWaXNpYmxlUG9zaXRpb24K
KyAgICAvLyBmcm9tIGZyYW1lLT5zZWxlY3Rpb24tPnN0YXJ0KCkgY2FuIGJsb3cgdXMgZnJvbSB1
bmRlcm5lYXRoLiBBbHNvLCBmdW5jdGlvbiBvcmRlcmluZyBpcworICAgIC8vIHVzdWFsbHkgZGVw
ZW5kZW50IG9uIHRoZSBjb21waWxlci4KKyAgICByZXR1cm4gUmVuZGVyVGV4dENvbnRyb2w6Omlu
ZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGlubmVyVGV4dCwgZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFy
dCgpKTsKIH0KIAogaW50IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb25FbmQo
KSBjb25zdApAQCAtNjkzLDIxICs3NDcsNjggQEAgaW50IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50OjpzZWxlY3RpbwogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoZG9jdW1lbnQoKS0+Zm9j
dXNlZE5vZGUoKSAhPSB0aGlzICYmIGhhc0NhY2hlZFNlbGVjdGlvbkVuZCgpKQogICAgICAgICBy
ZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25FbmQ7Ci0gICAgaWYgKCFyZW5kZXJlcigpKQorCisgICAg
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIXJlbmRlcmVyKCkg
fHwgIWZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdG9SZW5kZXJUZXh0Q29u
dHJvbChyZW5kZXJlcigpKS0+c2VsZWN0aW9uRW5kKCk7CisKKyAgICBIVE1MRWxlbWVudCogaW5u
ZXJUZXh0ID0gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+aW5uZXJUZXh0RWxlbWVu
dCgpOworICAgIC8vIERvIG5vdCBjYWxsIGlubmVyVGV4dEVsZW1lbnQoKSBpbiB0aGUgZnVuY3Rp
b24gYXJndW1lbnRzIGFzIGNyZWF0aW5nIGEgVmlzaWJsZVBvc2l0aW9uCisgICAgLy8gZnJvbSBm
cmFtZS0+c2VsZWN0aW9uLT5zdGFydCgpIGNhbiBibG93IHVzIGZyb20gdW5kZXJuZWF0aC4gQWxz
bywgZnVuY3Rpb24gb3JkZXJpbmcgaXMKKyAgICAvLyB1c3VhbGx5IGRlcGVuZGVudCBvbiB0aGUg
Y29tcGlsZXIuCisgICAgcmV0dXJuIFJlbmRlclRleHRDb250cm9sOjppbmRleEZvclZpc2libGVQ
b3NpdGlvbihpbm5lclRleHQsIGZyYW1lLT5zZWxlY3Rpb24oKS0+ZW5kKCkpOworfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgc2V0Q29udGFpbmVyQW5kT2Zmc2V0Rm9yUmFuZ2UoTm9kZSogbm9kZSwg
aW50IG9mZnNldCwgTm9kZSomIGNvbnRhaW5lck5vZGUsIGludCYgb2Zmc2V0SW5Db250YWluZXIp
Cit7CisgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkgeworICAgICAgICBjb250YWluZXJOb2Rl
ID0gbm9kZTsKKyAgICAgICAgb2Zmc2V0SW5Db250YWluZXIgPSBvZmZzZXQ7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgY29udGFpbmVyTm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAg
b2Zmc2V0SW5Db250YWluZXIgPSBub2RlLT5ub2RlSW5kZXgoKSArIG9mZnNldDsKKyAgICB9CiB9
CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rp
b24oKSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXIoKSB8fCAhaXNUZXh0Rm9ybUNvbnRyb2wo
KSB8fCAhaGFzQ2FjaGVkU2VsZWN0aW9uU3RhcnQoKSB8fCAhaGFzQ2FjaGVkU2VsZWN0aW9uRW5k
KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b1JlbmRlclRleHRDb250cm9sKHJl
bmRlcmVyKCkpLT5zZWxlY3Rpb24obV9jYWNoZWRTZWxlY3Rpb25TdGFydCwgbV9jYWNoZWRTZWxl
Y3Rpb25FbmQpOwotfQorICAgIAorICAgIGludCBzdGFydCA9IG1fY2FjaGVkU2VsZWN0aW9uU3Rh
cnQ7CisgICAgaW50IGVuZCA9IG1fY2FjaGVkU2VsZWN0aW9uRW5kOworCisgICAgQVNTRVJUKHN0
YXJ0IDw9IGVuZCk7CisgICAgSFRNTEVsZW1lbnQqIGlubmVyVGV4dCA9IHRvUmVuZGVyVGV4dENv
bnRyb2wocmVuZGVyZXIoKSktPmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICBpZiAoIWlubmVyVGV4
dCkKKyAgICAgICAgcmV0dXJuIDA7CiAKLXZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6
OnJlc3RvcmVDYWNoZWRTZWxlY3Rpb24oKQotewotICAgIFdlYkNvcmU6OnNldFNlbGVjdGlvblJh
bmdlKHRoaXMsIG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQsIG1fY2FjaGVkU2VsZWN0aW9uRW5kKTsK
KyAgICBpZiAoIWlubmVyVGV4dC0+Zmlyc3RDaGlsZCgpKQorICAgICAgICByZXR1cm4gUmFuZ2U6
OmNyZWF0ZShkb2N1bWVudCgpLCBpbm5lclRleHQsIDAsIGlubmVyVGV4dCwgMCk7CisKKyAgICBp
bnQgb2Zmc2V0ID0gMDsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSAwOworICAgIE5vZGUqIGVuZE5v
ZGUgPSAwOworICAgIGZvciAoTm9kZSogbm9kZSA9IGlubmVyVGV4dC0+Zmlyc3RDaGlsZCgpOyBu
b2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShpbm5lclRleHQpKSB7CisgICAgICAg
IEFTU0VSVCghbm9kZS0+Zmlyc3RDaGlsZCgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmlzVGV4
dE5vZGUoKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJyVGFnKSk7CisgICAgICAgIGludCBsZW5ndGgg
PSBub2RlLT5pc1RleHROb2RlKCkgPyBsYXN0T2Zmc2V0SW5Ob2RlKG5vZGUpIDogMTsKKworICAg
ICAgICBpZiAob2Zmc2V0IDw9IHN0YXJ0ICYmIHN0YXJ0IDw9IG9mZnNldCArIGxlbmd0aCkKKyAg
ICAgICAgICAgIHNldENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdlKG5vZGUsIHN0YXJ0IC0gb2Zm
c2V0LCBzdGFydE5vZGUsIHN0YXJ0KTsKKworICAgICAgICBpZiAob2Zmc2V0IDw9IGVuZCAmJiBl
bmQgPD0gb2Zmc2V0ICsgbGVuZ3RoKSB7CisgICAgICAgICAgICBzZXRDb250YWluZXJBbmRPZmZz
ZXRGb3JSYW5nZShub2RlLCBlbmQgLSBvZmZzZXQsIGVuZE5vZGUsIGVuZCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldCArPSBsZW5ndGg7CisgICAgfQor
CisgICAgaWYgKCFzdGFydE5vZGUgfHwgIWVuZE5vZGUpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnROb2RlLCBzdGFydCwgZW5k
Tm9kZSwgZW5kKTsKIH0KIAogdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0
aW9uQ2hhbmdlZChib29sIHVzZXJUcmlnZ2VyZWQpCkBAIC03MTUsOCArODE2LDcgQEAgdm9pZCBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aQogICAgIGlmICghcmVuZGVyZXIoKSB8
fCAhaXNUZXh0Rm9ybUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyVGV4
dENvbnRyb2wqIHJlbmRlclRleHRDb250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJl
cigpKTsKLSAgICBjYWNoZVNlbGVjdGlvbihyZW5kZXJUZXh0Q29udHJvbC0+c2VsZWN0aW9uU3Rh
cnQoKSwgcmVuZGVyVGV4dENvbnRyb2wtPnNlbGVjdGlvbkVuZCgpKTsKKyAgICBjYWNoZVNlbGVj
dGlvbihzZWxlY3Rpb25TdGFydCgpLCBzZWxlY3Rpb25FbmQoKSk7CiAKICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewogICAgICAgICBpZiAoZnJhbWUtPnNlbGVj
dGlvbigpLT5pc1JhbmdlKCkgJiYgdXNlclRyaWdnZXJlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCShyZXZpc2lvbiA5MDY0MykKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDcsNiArMjA3LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2VsZWN0KCk7CiAgICAgdm9p
ZCBzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBlbmQpOwogICAgIFBhc3NSZWZQdHI8
UmFuZ2U+IHNlbGVjdGlvbigpIGNvbnN0OworICAgIFN0cmluZyBzZWxlY3RlZFRleHQoKSBjb25z
dDsKIAogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsK
IApAQCAtMjMwLDcgKzIzMSw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgc2V0VGV4dEFzT2ZM
YXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudChjb25zdCBTdHJpbmcmIHRleHQpIHsgbV90ZXh0QXNP
Zkxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50ID0gdGV4dDsgfQogCi0gICAgdm9pZCByZXN0b3Jl
Q2FjaGVkU2VsZWN0aW9uKCk7CisgICAgdm9pZCByZXN0b3JlQ2FjaGVkU2VsZWN0aW9uKCkgeyBz
ZXRTZWxlY3Rpb25SYW5nZShtX2NhY2hlZFNlbGVjdGlvblN0YXJ0LCBtX2NhY2hlZFNlbGVjdGlv
bkVuZCk7IH0KICAgICBib29sIGhhc0NhY2hlZFNlbGVjdGlvblN0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9jYWNoZWRTZWxlY3Rpb25TdGFydCA+PSAwOyB9CiAgICAgYm9vbCBoYXNDYWNoZWRTZWxl
Y3Rpb25FbmQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNlbGVjdGlvbkVuZCA+PSAwOyB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24g
OTA2NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDE2LDcgKzEwMTYsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNl
dFZhbHVlKGNvbnN0IFN0CiAgICAgaWYgKGlzVGV4dEZpZWxkKCkpIHsKICAgICAgICAgdW5zaWdu
ZWQgbWF4ID0gdmlzaWJsZVZhbHVlKCkubGVuZ3RoKCk7CiAgICAgICAgIGlmIChkb2N1bWVudCgp
LT5mb2N1c2VkTm9kZSgpID09IHRoaXMpCi0gICAgICAgICAgICBXZWJDb3JlOjpzZXRTZWxlY3Rp
b25SYW5nZSh0aGlzLCBtYXgsIG1heCk7CisgICAgICAgICAgICBzZXRTZWxlY3Rpb25SYW5nZSht
YXgsIG1heCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhY2hlU2VsZWN0aW9uKG1heCwg
bWF4KTsKICAgICAgICAgbV9zdWdnZXN0ZWRWYWx1ZSA9IFN0cmluZygpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiA5
MDY0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1l
U2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEJSRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxG
b3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCkBAIC04
Miw2ICs4MSwxMSBAQCBSZW5kZXJUZXh0Q29udHJvbDo6flJlbmRlclRleHRDb250cm9sKCkKIHsK
IH0KIAorSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sOjp0ZXh0
Rm9ybUNvbnRyb2xFbGVtZW50KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQqPihub2RlKCkpOworfQorCiB2b2lkIFJlbmRlclRleHRDb250cm9s
OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlKQogewogICAgIFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRT
dHlsZSk7CkBAIC0xNzMsNzMgKzE3Nyw2IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnNldExh
c3RDaGFuZ2VXYXMKICAgICBkb2N1bWVudCgpLT5zZXRJZ25vcmVBdXRvZm9jdXMobGFzdENoYW5n
ZVdhc1VzZXJFZGl0KTsKIH0KIAotaW50IFJlbmRlclRleHRDb250cm9sOjpzZWxlY3Rpb25TdGFy
dCgpIGNvbnN0Ci17Ci0gICAgRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBpZiAo
IWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBIVE1MRWxlbWVudCogaW5uZXJU
ZXh0ID0gaW5uZXJUZXh0RWxlbWVudCgpOwotICAgIC8vIERvIG5vdCBjYWxsIGlubmVyVGV4dEVs
ZW1lbnQoKSBpbiB0aGUgZnVuY3Rpb24gYXJndW1lbnRzIGFzIGNyZWF0aW5nIGEgVmlzaWJsZVBv
c2l0aW9uCi0gICAgLy8gZnJvbSBmcmFtZS0+c2VsZWN0aW9uLT5zdGFydCgpIGNhbiBibG93IHVz
IGZyb20gdW5kZXJuZWF0aC4gQWxzbywgZnVuY3Rpb24gb3JkZXJpbmcgaXMKLSAgICAvLyB1c3Vh
bGx5IGRlcGVuZGVudCBvbiB0aGUgY29tcGlsZXIuCi0gICAgcmV0dXJuIFJlbmRlclRleHRDb250
cm9sOjppbmRleEZvclZpc2libGVQb3NpdGlvbihpbm5lclRleHQsIGZyYW1lLT5zZWxlY3Rpb24o
KS0+c3RhcnQoKSk7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJvbDo6c2VsZWN0aW9uRW5kKCkg
Y29uc3QKLXsKLSAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIGlmICghZnJh
bWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgSFRNTEVsZW1lbnQqIGlubmVyVGV4dCA9IGlu
bmVyVGV4dEVsZW1lbnQoKTsKLSAgICAvLyBEbyBub3QgY2FsbCBpbm5lclRleHRFbGVtZW50KCkg
aW4gdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBhcyBjcmVhdGluZyBhIFZpc2libGVQb3NpdGlvbgot
ICAgIC8vIGZyb20gZnJhbWUtPnNlbGVjdGlvbi0+ZW5kKCkgY2FuIGJsb3cgdXMgZnJvbSB1bmRl
cm5lYXRoLiBBbHNvLCBmdW5jdGlvbiBvcmRlcmluZyBpcwotICAgIC8vIHVzdWFsbHkgZGVwZW5k
ZW50IG9uIHRoZSBjb21waWxlci4KLSAgICByZXR1cm4gUmVuZGVyVGV4dENvbnRyb2w6OmluZGV4
Rm9yVmlzaWJsZVBvc2l0aW9uKGlubmVyVGV4dCwgZnJhbWUtPnNlbGVjdGlvbigpLT5lbmQoKSk7
Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2w6Omhhc1Zpc2libGVUZXh0QXJlYSgpIGNvbnN0
Ci17Ci0gICAgSFRNTEVsZW1lbnQqIGlubmVyVGV4dCA9IGlubmVyVGV4dEVsZW1lbnQoKTsKLSAg
ICByZXR1cm4gc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCAhaW5uZXJUZXh0IHx8
ICFpbm5lclRleHQtPnJlbmRlcmVyKCkgfHwgIWlubmVyVGV4dC0+cmVuZGVyQm94KCktPmhlaWdo
dCgpOwotfQotCi12b2lkIHNldFNlbGVjdGlvblJhbmdlKE5vZGUqIG5vZGUsIGludCBzdGFydCwg
aW50IGVuZCkKLXsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgbm9kZS0+ZG9jdW1lbnQoKS0+dXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0KLSAgICBpZiAoIW5vZGUtPnJl
bmRlcmVyKCkgfHwgIW5vZGUtPnJlbmRlcmVyKCktPmlzVGV4dENvbnRyb2woKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZW5kID0gbWF4KGVuZCwgMCk7Ci0gICAgc3RhcnQgPSBtaW4obWF4KHN0
YXJ0LCAwKSwgZW5kKTsKLQotICAgIFJlbmRlclRleHRDb250cm9sKiBjb250cm9sID0gdG9SZW5k
ZXJUZXh0Q29udHJvbChub2RlLT5yZW5kZXJlcigpKTsKLQotICAgIGlmIChjb250cm9sLT5oYXNW
aXNpYmxlVGV4dEFyZWEoKSkgewotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudCo+KG5vZGUpLT5jYWNoZVNlbGVjdGlvbihzdGFydCwgZW5kKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IGNvbnRy
b2wtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KHN0YXJ0KTsKLSAgICBWaXNpYmxlUG9zaXRpb24g
ZW5kUG9zaXRpb247Ci0gICAgaWYgKHN0YXJ0ID09IGVuZCkKLSAgICAgICAgZW5kUG9zaXRpb24g
PSBzdGFydFBvc2l0aW9uOwotICAgIGVsc2UKLSAgICAgICAgZW5kUG9zaXRpb24gPSBjb250cm9s
LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChlbmQpOwotCi0gICAgLy8gc3RhcnRQb3NpdGlvbiBh
bmQgZW5kUG9zaXRpb24gY2FuIGJlIG51bGwgcG9zaXRpb24gZm9yIGV4YW1wbGUgd2hlbgotICAg
IC8vICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lIiBzdHlsZSBhdHRyaWJ1dGUgaXMgc3BlY2lm
aWVkLgotICAgIGlmIChzdGFydFBvc2l0aW9uLmlzTm90TnVsbCgpICYmIGVuZFBvc2l0aW9uLmlz
Tm90TnVsbCgpKSB7Ci0gICAgICAgIEFTU0VSVChzdGFydFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkuZGVwcmVjYXRlZE5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgPT0gbm9kZSAmJiBlbmRQ
b3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnNoYWRvd0FuY2VzdG9y
Tm9kZSgpID09IG5vZGUpOwotICAgIH0KLSAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlv
biA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwotCi0gICAg
aWYgKEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgIGZy
YW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7Ci19Ci0KIGJvb2wg
UmVuZGVyVGV4dENvbnRyb2w6OmlzU2VsZWN0YWJsZUVsZW1lbnQoSFRNTEVsZW1lbnQqIGlubmVy
VGV4dCwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUgfHwgIWlubmVyVGV4dCkKQEAgLTI1
Niw1MiArMTkzLDYgQEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbDo6aXNTZWxlY3RhYmxlRWxlbQog
ICAgICAgICB8fCAoc2hhZG93QW5jZXN0b3ItPmhhc1RhZ05hbWUoaW5wdXRUYWcpICYmIHN0YXRp
Y19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihzaGFkb3dBbmNlc3RvciktPmlzVGV4dEZpZWxkKCkp
KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdl
KE5vZGUqIG5vZGUsIGludCBvZmZzZXQsIE5vZGUqJiBjb250YWluZXJOb2RlLCBpbnQmIG9mZnNl
dEluQ29udGFpbmVyKQotewotICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAg
Y29udGFpbmVyTm9kZSA9IG5vZGU7Ci0gICAgICAgIG9mZnNldEluQ29udGFpbmVyID0gb2Zmc2V0
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnRhaW5lck5vZGUgPSBub2RlLT5wYXJlbnROb2Rl
KCk7Ci0gICAgICAgIG9mZnNldEluQ29udGFpbmVyID0gbm9kZS0+bm9kZUluZGV4KCkgKyBvZmZz
ZXQ7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFJhbmdlPiBSZW5kZXJUZXh0Q29udHJvbDo6c2Vs
ZWN0aW9uKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc3RhcnQgPD0g
ZW5kKTsKLSAgICBIVE1MRWxlbWVudCogaW5uZXJUZXh0ID0gaW5uZXJUZXh0RWxlbWVudCgpOwot
ICAgIGlmICghaW5uZXJUZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghaW5uZXJU
ZXh0LT5maXJzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50
KCksIGlubmVyVGV4dCwgMCwgaW5uZXJUZXh0LCAwKTsKLQotICAgIGludCBvZmZzZXQgPSAwOwot
ICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IDA7Ci0gICAgTm9kZSogZW5kTm9kZSA9IDA7Ci0gICAgZm9y
IChOb2RlKiBub2RlID0gaW5uZXJUZXh0LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2Rl
LT50cmF2ZXJzZU5leHROb2RlKGlubmVyVGV4dCkpIHsKLSAgICAgICAgQVNTRVJUKCFub2RlLT5m
aXJzdENoaWxkKCkpOwotICAgICAgICBBU1NFUlQobm9kZS0+aXNUZXh0Tm9kZSgpIHx8IG5vZGUt
Pmhhc1RhZ05hbWUoYnJUYWcpKTsKLSAgICAgICAgaW50IGxlbmd0aCA9IG5vZGUtPmlzVGV4dE5v
ZGUoKSA/IGxhc3RPZmZzZXRJbk5vZGUobm9kZSkgOiAxOwotICAgIAotICAgICAgICBpZiAob2Zm
c2V0IDw9IHN0YXJ0ICYmIHN0YXJ0IDw9IG9mZnNldCArIGxlbmd0aCkKLSAgICAgICAgICAgIHNl
dENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdlKG5vZGUsIHN0YXJ0IC0gb2Zmc2V0LCBzdGFydE5v
ZGUsIHN0YXJ0KTsKLQotICAgICAgICBpZiAob2Zmc2V0IDw9IGVuZCAmJiBlbmQgPD0gb2Zmc2V0
ICsgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBzZXRDb250YWluZXJBbmRPZmZzZXRGb3JSYW5nZShu
b2RlLCBlbmQgLSBvZmZzZXQsIGVuZE5vZGUsIGVuZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIG9mZnNldCArPSBsZW5ndGg7Ci0gICAgfQotICAgIAotICAgIGlm
ICghc3RhcnROb2RlIHx8ICFlbmROb2RlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVy
biBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0Tm9kZSwgc3RhcnQsIGVuZE5vZGUsIGVu
ZCk7Ci19Ci0KIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Q29udHJvbDo6dmlzaWJsZVBvc2l0
aW9uRm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAogewogICAgIGlmIChpbmRleCA8PSAwKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgJKHJldmlz
aW9uIDkwNjQzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDsKIGNsYXNzIFZpc2libGVTZWxl
Y3Rpb247CiBjbGFzcyBUZXh0Q29udHJvbElubmVyRWxlbWVudDsKIGNsYXNzIFRleHRDb250cm9s
SW5uZXJUZXh0RWxlbWVudDsKQEAgLTM0LDE2ICszNSwxMyBAQCBjbGFzcyBSZW5kZXJUZXh0Q29u
dHJvbCA6IHB1YmxpYyBSZW5kZXJCCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+UmVuZGVyVGV4dENv
bnRyb2woKTsKIAorICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0Rm9ybUNvbnRy
b2xFbGVtZW50KCk7CiAgICAgdmlydHVhbCBIVE1MRWxlbWVudCogaW5uZXJUZXh0RWxlbWVudCgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUlu
bmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKSBjb25zdCA9IDA7CiAK
ICAgICBib29sIGxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdENo
YW5nZVdhc1VzZXJFZGl0OyB9CiAgICAgdm9pZCBzZXRMYXN0Q2hhbmdlV2FzVXNlckVkaXQoYm9v
bCBsYXN0Q2hhbmdlV2FzVXNlckVkaXQpOwogCi0gICAgaW50IHNlbGVjdGlvblN0YXJ0KCkgY29u
c3Q7Ci0gICAgaW50IHNlbGVjdGlvbkVuZCgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8UmFuZ2U+
IHNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCiAgICAgdmlydHVhbCB2b2lk
IHN1YnRyZWVIYXNDaGFuZ2VkKCk7CiAgICAgU3RyaW5nIHRleHQoKTsKICAgICBTdHJpbmcgdGV4
dFdpdGhIYXJkTGluZUJyZWFrcygpOwpAQCAtOTYsNyArOTQsNiBAQCBwcml2YXRlOgogCiAgICAg
dmlydHVhbCBib29sIHJlcXVpcmVzRm9yY2VkU3R5bGVSZWNhbGNQcm9wYWdhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIGJvb2wgaGFzVmlzaWJsZVRleHRBcmVhKCkgY29uc3Q7
CiAgICAgZnJpZW5kIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UoTm9kZSosIGludCBzdGFydCwgaW50
IGVuZCk7CiAgICAgc3RhdGljIGJvb2wgaXNTZWxlY3RhYmxlRWxlbWVudChIVE1MRWxlbWVudCos
IE5vZGUqKTsKICAgICAKQEAgLTEwOSw4ICsxMDYsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9s
YXN0Q2hhbmdlV2FzVXNlckVkaXQ7CiB9OwogCi12b2lkIHNldFNlbGVjdGlvblJhbmdlKE5vZGUq
LCBpbnQgc3RhcnQsIGludCBlbmQpOwotCiBpbmxpbmUgUmVuZGVyVGV4dENvbnRyb2wqIHRvUmVu
ZGVyVGV4dENvbnRyb2woUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7IAogICAgIEFTU0VSVCghb2Jq
ZWN0IHx8IG9iamVjdC0+aXNUZXh0Q29udHJvbCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZp
c2lvbiA5MDY0MykKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDctMDggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgTW92ZSBzZWxlY3Rpb24gcmVsYXRlZCBjb2RlIGZyb20gUmVuZGVy
VGV4dENvbnRyb2wgdG8gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTMzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZWQgY2FsbHMgdG8gV2ViQ29y
ZTo6c2V0U2VsZWN0aW9uUmFuZ2UgYnkgY2FsbHMgdG8gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQ6OnNldFNlbGVjdGlvblJhbmdlLgorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAg
ICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6aW5wdXRNZXRob2RFdmVudCk6CisKIDIwMTEtMDctMDUg
IFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxvYm9Ab3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBb
UXRdIEZpeCB0c3RfUVdlYkZyYW1lOjpzZXRIdG1sV2l0aFJlc291cmNlKCkgQVBJIHRlc3QKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDkwNjQzKQorKysgU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTExLDggKzEx
MTEsMTAgQEAgdm9pZCBRV2ViUGFnZVByaXZhdGU6OmlucHV0TWV0aG9kRXZlbnQoUQogICAgICAg
ICBjYXNlIFFJbnB1dE1ldGhvZEV2ZW50OjpTZWxlY3Rpb246IHsKICAgICAgICAgICAgIGhhc1Nl
bGVjdGlvbiA9IHRydWU7CiAgICAgICAgICAgICAvLyBBIHNlbGVjdGlvbiBpbiB0aGUgaW5wdXRN
ZXRob2RFdmVudCBpcyBhbHdheXMgcmVmbGVjdGVkIGluIHRoZSB2aXNpYmxlIHRleHQKLSAgICAg
ICAgICAgIGlmIChub2RlKQotICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvblJhbmdlKG5vZGUs
IHFNaW4oYS5zdGFydCwgKGEuc3RhcnQgKyBhLmxlbmd0aCkpLCBxTWF4KGEuc3RhcnQsIChhLnN0
YXJ0ICsgYS5sZW5ndGgpKSk7CisgICAgICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAg
ICAgIGlmIChIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4dENvbnRyb2wgPSB0b1RleHRG
b3JtQ29udHJvbChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRyb2wtPnNldFNl
bGVjdGlvblJhbmdlKHFNaW4oYS5zdGFydCwgKGEuc3RhcnQgKyBhLmxlbmd0aCkpLCBxTWF4KGEu
c3RhcnQsIChhLnN0YXJ0ICsgYS5sZW5ndGgpKSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGlmICghZXYtPnByZWVkaXRTdHJpbmcoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAg
ZWRpdG9yLT5zZXRDb21wb3NpdGlvbihldi0+cHJlZWRpdFN0cmluZygpLCB1bmRlcmxpbmVzLCBx
TWluKGEuc3RhcnQsIChhLnN0YXJ0ICsgYS5sZW5ndGgpKSwgcU1heChhLnN0YXJ0LCAoYS5zdGFy
dCArIGEubGVuZ3RoKSkpOwpAQCAtMTEzMiw3ICsxMTM0LDggQEAgdm9pZCBRV2ViUGFnZVByaXZh
dGU6OmlucHV0TWV0aG9kRXZlbnQoUQogICAgIGlmIChub2RlICYmIGV2LT5yZXBsYWNlbWVudExl
bmd0aCgpID4gMCkgewogICAgICAgICBpbnQgY3Vyc29yUG9zID0gZnJhbWUtPnNlbGVjdGlvbigp
LT5leHRlbnQoKS5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKICAgICAgICAgaW50IHN0YXJ0ID0g
Y3Vyc29yUG9zICsgZXYtPnJlcGxhY2VtZW50U3RhcnQoKTsKLSAgICAgICAgc2V0U2VsZWN0aW9u
UmFuZ2Uobm9kZSwgc3RhcnQsIHN0YXJ0ICsgZXYtPnJlcGxhY2VtZW50TGVuZ3RoKCkpOworICAg
ICAgICBpZiAoSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRleHRDb250cm9sID0gdG9UZXh0
Rm9ybUNvbnRyb2wobm9kZSkpCisgICAgICAgICAgICB0ZXh0Q29udHJvbC0+c2V0U2VsZWN0aW9u
UmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgZXYtPnJlcGxhY2VtZW50TGVuZ3RoKCkpOwogICAgICAgICAv
LyBDb21taXQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGNvbW1pdFN0cmluZyBpcyBlbXB0eSwgdG8g
Z2V0IHJpZCBvZiBzZWxlY3Rpb24uCiAgICAgICAgIGVkaXRvci0+Y29uZmlybUNvbXBvc2l0aW9u
KGV2LT5jb21taXRTdHJpbmcoKSk7CiAgICAgfSBlbHNlIGlmICghZXYtPmNvbW1pdFN0cmluZygp
LmlzRW1wdHkoKSkgewo=
</data>
<flag name="review"
          id="94780"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100219</attachid>
            <date>2011-07-09 18:57:47 -0700</date>
            <delta_ts>2011-07-11 10:14:52 -0700</delta_ts>
            <desc>Fixed the regression</desc>
            <filename>fix64133b</filename>
            <type>text/plain</type>
            <size>22047</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwNjg4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDctMDkgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBzZWxlY3Rpb24gcmVsYXRl
ZCBjb2RlIGZyb20gUmVuZGVyVGV4dENvbnRyb2wgdG8gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTMz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQg
c2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwgaGFzVmlzaWJsZVRleHRBcmVhLCBzZXRTZWxl
Y3Rpb25SYW5nZSwgc2V0Q29udGFpbmVyQW5kT2Zmc2V0Rm9yUmFuZ2UKKyAgICAgICAgYW5kIHNl
bGVjdGlvbiBmcm9tIFJlbmRlclRleHRDb250cm9sLmNwcCB0byBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmNwcC4KKworICAgICAgICBUaGlzIHJlZmFjdG9yaW5nIHJlbW92ZXMgUmVuZGVyVGV4dENv
bnRyb2wncyBkZXBlbmRlbmN5IG9uIEZyYW1lU2VsZWN0aW9uLgorCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNlbGVjdGVkVGV4dCk6IENhbGxzIEhUTUxUZXh0
RnJvbUNvbnRyb2w6OnNlbGVjdGVkVGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnNlbGVjdGVkVGV4dFJhbmdlKTogQ2FsbHMgc2VsZWN0aW9uU3RhcnQg
YW5kIHNlbGVjdGlvbkVuZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnNldFNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgICogaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50OjpzZWxlY3RlZFRleHQpOiBFeHRyYWN0ZWQgZnJvbSBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpzZWxlY3RlZFRleHQuCisgICAgICAgIChXZWJDb3JlOjpoYXNWaXNpYmxl
VGV4dEFyZWEpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZSk6IE1lcmdlZCB3aXRoIHRoZSBmdW5jdGlvbiBvZiB0
aGUgc2FtZSBuYW1lIGluIFJlbmRlclRleHRDb250cm9sLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KTogQ2FsbHMgY29tcHV0ZVNl
bGVjdGlvblN0YXJ0IGluc3RlYWQgb2YgUmVuZGVyVGV4dENvbnRyb2w6OnNlbGVjdGlvblN0YXJ0
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmNvbXB1dGVT
ZWxlY3Rpb25TdGFydCk6IE1vdmVkIGZyb20gUmVuZGVyVGV4dENvbnRyb2w6OnNlbGVjdGlvblN0
YXJ0LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVj
dGlvbkVuZCk6IENhbGxzIGNvbXB1dGVTZWxlY3Rpb25FbmQgaW5zdGVhZCBvZiBSZW5kZXJUZXh0
OjpzZWxlY3Rpb25FbmQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudDo6Y29tcHV0ZVNlbGVjdGlvbkVuZCk6IE1vdmVkIGZyb20gUmVuZGVyVGV4dENvbnRyb2w6
OnNlbGVjdGlvblN0YXJ0LgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29udGFpbmVyQW5kT2Zmc2V0
Rm9yUmFuZ2UpOiBNb3ZlZCBmcm9tIFJlbmRlclRleHRDb250cm9sLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb24pOiBNZXJnZWQgd2l0
aCB0aGUgZnVuY3Rpb24gb2YgdGhlIHNhbWUgbmFtZSBpbiBSZW5kZXJUZXh0Q29udHJvbC4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpyZXN0b3JlQ2FjaGVk
U2VsZWN0aW9uKTogQ2FsbHMgY29tcHV0ZVNlbGVjdGlvblN0YXJ0IGFuZCBjb21wdXRlU2VsZWN0
aW9uRW5kIGluc3RlYWQgb2YKKyAgICAgICAgUmVuZGVyVGV4dENvbnRyb2w6OnNlbGVjdGlvblN0
YXJ0IGFuZCBSZW5kZXJUZXh0Q29udHJvbDo6c2VsZWN0aW9uRW5kLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvbkNoYW5nZWQpOiBDYWxscyBz
ZWxlY3Rpb25TdGFydCBhbmQgc2VsZWN0aW9uRW5kLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1D
b250cm9sRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZSk6IENhbGxzIHNldFNl
bGVjdGlvblJhbmdlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6dGV4dEZvcm1Db250cm9sRWxl
bWVudCk6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oOgor
CiAyMDExLTA3LTA5ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4IGZvciByOTA2ODAuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDkwNjQ1KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTk5NCw4ICsxOTk0LDggQEAKICAgICAgICAgcmV0dXJuIFN0cmluZygpOyAvLyBuZWVkIHRvIHJl
dHVybiBzb21ldGhpbmcgZGlzdGluY3QgZnJvbSBlbXB0eSBzdHJpbmcKICAgICAKICAgICBpZiAo
aXNOYXRpdmVUZXh0Q29udHJvbCgpKSB7Ci0gICAgICAgIFJlbmRlclRleHRDb250cm9sKiB0ZXh0
Q29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2wobV9yZW5kZXJlcik7Ci0gICAgICAgIHJldHVy
biB0ZXh0Q29udHJvbC0+dGV4dCgpLnN1YnN0cmluZyh0ZXh0Q29udHJvbC0+c2VsZWN0aW9uU3Rh
cnQoKSwgdGV4dENvbnRyb2wtPnNlbGVjdGlvbkVuZCgpIC0gdGV4dENvbnRyb2wtPnNlbGVjdGlv
blN0YXJ0KCkpOworICAgICAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4dENvbnRy
b2wgPSB0b1JlbmRlclRleHRDb250cm9sKG1fcmVuZGVyZXIpLT50ZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50KCk7CisgICAgICAgIHJldHVybiB0ZXh0Q29udHJvbC0+c2VsZWN0ZWRUZXh0KCk7CiAgICAg
fQogICAgIAogICAgIGlmIChhcmlhUm9sZUF0dHJpYnV0ZSgpID09IFVua25vd25Sb2xlKQpAQCAt
MjAyOCw3ICsyMDI4LDcgQEAKICAgICAKICAgICBBY2Nlc3NpYmlsaXR5Um9sZSBhcmlhUm9sZSA9
IGFyaWFSb2xlQXR0cmlidXRlKCk7CiAgICAgaWYgKGlzTmF0aXZlVGV4dENvbnRyb2woKSAmJiBh
cmlhUm9sZSA9PSBVbmtub3duUm9sZSkgewotICAgICAgICBSZW5kZXJUZXh0Q29udHJvbCogdGV4
dENvbnRyb2wgPSB0b1JlbmRlclRleHRDb250cm9sKG1fcmVuZGVyZXIpOworICAgICAgICBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4dENvbnRyb2wgPSB0b1JlbmRlclRleHRDb250cm9s
KG1fcmVuZGVyZXIpLT50ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCk7CiAgICAgICAgIHJldHVybiBQ
bGFpblRleHRSYW5nZSh0ZXh0Q29udHJvbC0+c2VsZWN0aW9uU3RhcnQoKSwgdGV4dENvbnRyb2wt
PnNlbGVjdGlvbkVuZCgpIC0gdGV4dENvbnRyb2wtPnNlbGVjdGlvblN0YXJ0KCkpOwogICAgIH0K
ICAgICAKQEAgLTIwNDEsNyArMjA0MSw4IEBACiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OnNldFNlbGVjdGVkVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZSkKIHsK
ICAgICBpZiAoaXNOYXRpdmVUZXh0Q29udHJvbCgpKSB7Ci0gICAgICAgIHNldFNlbGVjdGlvblJh
bmdlKG1fcmVuZGVyZXItPm5vZGUoKSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLnN0YXJ0ICsgcmFuZ2Uu
bGVuZ3RoKTsKKyAgICAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRleHRDb250cm9s
ID0gdG9SZW5kZXJUZXh0Q29udHJvbChtX3JlbmRlcmVyKS0+dGV4dEZvcm1Db250cm9sRWxlbWVu
dCgpOworICAgICAgICB0ZXh0Q29udHJvbC0+c2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2Uuc3RhcnQs
IHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5
MDY0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMTYsNyArMTAxNiw3IEBACiAgICAgaWYgKGlzVGV4dEZpZWxkKCkpIHsK
ICAgICAgICAgdW5zaWduZWQgbWF4ID0gdmlzaWJsZVZhbHVlKCkubGVuZ3RoKCk7CiAgICAgICAg
IGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRoaXMpCi0gICAgICAgICAgICBXZWJD
b3JlOjpzZXRTZWxlY3Rpb25SYW5nZSh0aGlzLCBtYXgsIG1heCk7CisgICAgICAgICAgICBzZXRT
ZWxlY3Rpb25SYW5nZShtYXgsIG1heCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhY2hl
U2VsZWN0aW9uKG1heCwgbWF4KTsKICAgICAgICAgbV9zdWdnZXN0ZWRWYWx1ZSA9IFN0cmluZygp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJ
KHJldmlzaW9uIDkwNjQ1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw2ICsyMDcsNyBAQAogICAgIHZvaWQgc2Vs
ZWN0KCk7CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBlbmQpOwog
ICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbigpIGNvbnN0OworICAgIFN0cmluZyBzZWxl
Y3RlZFRleHQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZvcm1Db250cm9s
Q2hhbmdlRXZlbnQoKTsKIApAQCAtMjM1LDYgKzIzNiw5IEBACiAgICAgYm9vbCBoYXNDYWNoZWRT
ZWxlY3Rpb25FbmQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNlbGVjdGlvbkVuZCA+PSAwOyB9
CiAKIHByaXZhdGU6CisgICAgaW50IGNvbXB1dGVTZWxlY3Rpb25TdGFydCgpIGNvbnN0OworICAg
IGludCBjb21wdXRlU2VsZWN0aW9uRW5kKCkgY29uc3Q7CisKICAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hGb2N1c0V2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmNwcAkocmV2aXNpb24gOTA2NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjIsNiArNjYyLDE2IEBACiAgICAg
c2V0U2VsZWN0aW9uUmFuZ2UoMCwgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwogfQogCitT
dHJpbmcgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGVkVGV4dCgpIGNvbnN0Cit7
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGV4dHJhY3Qgc2VsZWN0ZWQgY29u
dGVudHMgZXZlbiBpZiB0aGVyZSB3ZXJlIG5vIHJlbmRlcmVyLgorICAgIGlmICghcmVuZGVyZXIo
KSB8fCByZW5kZXJlcigpLT5pc1RleHRDb250cm9sKCkpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKworICAgIFJlbmRlclRleHRDb250cm9sKiB0ZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4dENv
bnRyb2wocmVuZGVyZXIoKSk7CisgICAgcmV0dXJuIHRleHRDb250cm9sLT50ZXh0KCkuc3Vic3Ry
aW5nKHNlbGVjdGlvblN0YXJ0KCksIHNlbGVjdGlvbkVuZCgpIC0gc2VsZWN0aW9uU3RhcnQoKSk7
Cit9CisKIHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9ybUNvbnRy
b2xDaGFuZ2VFdmVudCgpCiB7CiAgICAgaWYgKG1fdGV4dEFzT2ZMYXN0Rm9ybUNvbnRyb2xDaGFu
Z2VFdmVudCAhPSB2YWx1ZSgpKSB7CkBAIC02NzEsOSArNjgxLDQ1IEBACiAgICAgc2V0Q2hhbmdl
ZFNpbmNlTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoZmFsc2UpOwogfQogCitib29sIGhhc1Zp
c2libGVUZXh0QXJlYShSZW5kZXJUZXh0Q29udHJvbCogdGV4dENvbnRyb2wpCit7CisgICAgQVNT
RVJUKHRleHRDb250cm9sKTsKKyAgICBIVE1MRWxlbWVudCogaW5uZXJUZXh0ID0gdGV4dENvbnRy
b2wtPmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICByZXR1cm4gdGV4dENvbnRyb2wtPnN0eWxlKCkt
PnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgIWlubmVyVGV4dCB8fCAhaW5uZXJUZXh0LT5yZW5k
ZXJlcigpIHx8ICFpbm5lclRleHQtPnJlbmRlckJveCgpLT5oZWlnaHQoKTsKK30KKwogdm9pZCBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBp
bnQgZW5kKQogewotICAgIFdlYkNvcmU6OnNldFNlbGVjdGlvblJhbmdlKHRoaXMsIHN0YXJ0LCBl
bmQpOworICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOworCisgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcigpLT5pc1RleHRDb250cm9s
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGVuZCA9IG1heChlbmQsIDApOworICAgIHN0YXJ0
ID0gbWluKG1heChzdGFydCwgMCksIGVuZCk7CisKKyAgICBSZW5kZXJUZXh0Q29udHJvbCogY29u
dHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSk7CisgICAgaWYgKGhhc1Zpc2li
bGVUZXh0QXJlYShjb250cm9sKSkgeworICAgICAgICBjYWNoZVNlbGVjdGlvbihzdGFydCwgZW5k
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3Np
dGlvbiA9IGNvbnRyb2wtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KHN0YXJ0KTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gZW5kUG9zaXRpb247CisgICAgaWYgKHN0YXJ0ID09IGVuZCkKKyAgICAgICAg
ZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgIGVsc2UKKyAgICAgICAgZW5kUG9zaXRp
b24gPSBjb250cm9sLT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChlbmQpOworCisgICAgLy8gc3Rh
cnRQb3NpdGlvbiBhbmQgZW5kUG9zaXRpb24gY2FuIGJlIG51bGwgcG9zaXRpb24gZm9yIGV4YW1w
bGUgd2hlbgorICAgIC8vICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lIiBzdHlsZSBhdHRyaWJ1
dGUgaXMgc3BlY2lmaWVkLgorICAgIGlmIChzdGFydFBvc2l0aW9uLmlzTm90TnVsbCgpICYmIGVu
ZFBvc2l0aW9uLmlzTm90TnVsbCgpKSB7CisgICAgICAgIEFTU0VSVChzdGFydFBvc2l0aW9uLmRl
ZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgPT0g
dGhpcworICAgICAgICAgICAgJiYgZW5kUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNh
dGVkTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA9PSB0aGlzKTsKKyAgICB9CisgICAgVmlz
aWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0UG9zaXRp
b24sIGVuZFBvc2l0aW9uKTsKKworICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5m
cmFtZSgpKQorICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24pOwogfQogCiBpbnQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvblN0
YXJ0KCkgY29uc3QKQEAgLTY4Miw5ICs3MjgsMjEgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
aWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0gdGhpcyAmJiBoYXNDYWNoZWRTZWxlY3Rp
b25TdGFydCgpKQogICAgICAgICByZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25TdGFydDsKLSAgICBp
ZiAoIXJlbmRlcmVyKCkpCisKKyAgICByZXR1cm4gY29tcHV0ZVNlbGVjdGlvblN0YXJ0KCk7Cit9
CisKK2ludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZVNlbGVjdGlvblN0YXJ0
KCkgY29uc3QKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOworICAg
IGlmICghcmVuZGVyZXIoKSB8fCAhZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5zZWxlY3Rpb25TdGFydCgpOworCisg
ICAgSFRNTEVsZW1lbnQqIGlubmVyVGV4dCA9IHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIo
KSktPmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICAvLyBEbyBub3QgY2FsbCBpbm5lclRleHRFbGVt
ZW50KCkgaW4gdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBhcyBjcmVhdGluZyBhIFZpc2libGVQb3Np
dGlvbgorICAgIC8vIGZyb20gZnJhbWUtPnNlbGVjdGlvbi0+c3RhcnQoKSBjYW4gYmxvdyB1cyBm
cm9tIHVuZGVybmVhdGguIEFsc28sIGZ1bmN0aW9uIG9yZGVyaW5nIGlzCisgICAgLy8gdXN1YWxs
eSBkZXBlbmRlbnQgb24gdGhlIGNvbXBpbGVyLgorICAgIHJldHVybiBSZW5kZXJUZXh0Q29udHJv
bDo6aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oaW5uZXJUZXh0LCBmcmFtZS0+c2VsZWN0aW9uKCkt
PnN0YXJ0KCkpOwogfQogCiBpbnQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlv
bkVuZCgpIGNvbnN0CkBAIC02OTMsMjEgKzc1MSw3NyBAQAogICAgICAgICByZXR1cm4gMDsKICAg
ICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlzICYmIGhhc0NhY2hlZFNlbGVj
dGlvbkVuZCgpKQogICAgICAgICByZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25FbmQ7Ci0gICAgaWYg
KCFyZW5kZXJlcigpKQorICAgIHJldHVybiBjb21wdXRlU2VsZWN0aW9uRW5kKCk7Cit9CisKK2lu
dCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZVNlbGVjdGlvbkVuZCgpIGNvbnN0
Cit7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIXJl
bmRlcmVyKCkgfHwgIWZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdG9SZW5k
ZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+c2VsZWN0aW9uRW5kKCk7CisKKyAgICBIVE1MRWxl
bWVudCogaW5uZXJUZXh0ID0gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+aW5uZXJU
ZXh0RWxlbWVudCgpOworICAgIC8vIERvIG5vdCBjYWxsIGlubmVyVGV4dEVsZW1lbnQoKSBpbiB0
aGUgZnVuY3Rpb24gYXJndW1lbnRzIGFzIGNyZWF0aW5nIGEgVmlzaWJsZVBvc2l0aW9uCisgICAg
Ly8gZnJvbSBmcmFtZS0+c2VsZWN0aW9uLT5lbmQoKSBjYW4gYmxvdyB1cyBmcm9tIHVuZGVybmVh
dGguIEFsc28sIGZ1bmN0aW9uIG9yZGVyaW5nIGlzCisgICAgLy8gdXN1YWxseSBkZXBlbmRlbnQg
b24gdGhlIGNvbXBpbGVyLgorICAgIHJldHVybiBSZW5kZXJUZXh0Q29udHJvbDo6aW5kZXhGb3JW
aXNpYmxlUG9zaXRpb24oaW5uZXJUZXh0LCBmcmFtZS0+c2VsZWN0aW9uKCktPmVuZCgpKTsKIH0K
IAorc3RhdGljIGlubGluZSB2b2lkIHNldENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdlKE5vZGUq
IG5vZGUsIGludCBvZmZzZXQsIE5vZGUqJiBjb250YWluZXJOb2RlLCBpbnQmIG9mZnNldEluQ29u
dGFpbmVyKQoreworICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgY29udGFp
bmVyTm9kZSA9IG5vZGU7CisgICAgICAgIG9mZnNldEluQ29udGFpbmVyID0gb2Zmc2V0OworICAg
IH0gZWxzZSB7CisgICAgICAgIGNvbnRhaW5lck5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Cisg
ICAgICAgIG9mZnNldEluQ29udGFpbmVyID0gbm9kZS0+bm9kZUluZGV4KCkgKyBvZmZzZXQ7Cisg
ICAgfQorfQorCiBQYXNzUmVmUHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
c2VsZWN0aW9uKCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIWlzVGV4dEZvcm1D
b250cm9sKCkgfHwgIWhhc0NhY2hlZFNlbGVjdGlvblN0YXJ0KCkgfHwgIWhhc0NhY2hlZFNlbGVj
dGlvbkVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdG9SZW5kZXJUZXh0Q29u
dHJvbChyZW5kZXJlcigpKS0+c2VsZWN0aW9uKG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQsIG1fY2Fj
aGVkU2VsZWN0aW9uRW5kKTsKKworICAgIGludCBzdGFydCA9IG1fY2FjaGVkU2VsZWN0aW9uU3Rh
cnQ7CisgICAgaW50IGVuZCA9IG1fY2FjaGVkU2VsZWN0aW9uRW5kOworCisgICAgQVNTRVJUKHN0
YXJ0IDw9IGVuZCk7CisgICAgSFRNTEVsZW1lbnQqIGlubmVyVGV4dCA9IHRvUmVuZGVyVGV4dENv
bnRyb2wocmVuZGVyZXIoKSktPmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICBpZiAoIWlubmVyVGV4
dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWlubmVyVGV4dC0+Zmlyc3RDaGlsZCgp
KQorICAgICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBpbm5lclRleHQsIDAs
IGlubmVyVGV4dCwgMCk7CisKKyAgICBpbnQgb2Zmc2V0ID0gMDsKKyAgICBOb2RlKiBzdGFydE5v
ZGUgPSAwOworICAgIE5vZGUqIGVuZE5vZGUgPSAwOworICAgIGZvciAoTm9kZSogbm9kZSA9IGlu
bmVyVGV4dC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZShpbm5lclRleHQpKSB7CisgICAgICAgIEFTU0VSVCghbm9kZS0+Zmlyc3RDaGlsZCgpKTsKKyAg
ICAgICAgQVNTRVJUKG5vZGUtPmlzVGV4dE5vZGUoKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJyVGFn
KSk7CisgICAgICAgIGludCBsZW5ndGggPSBub2RlLT5pc1RleHROb2RlKCkgPyBsYXN0T2Zmc2V0
SW5Ob2RlKG5vZGUpIDogMTsKKworICAgICAgICBpZiAob2Zmc2V0IDw9IHN0YXJ0ICYmIHN0YXJ0
IDw9IG9mZnNldCArIGxlbmd0aCkKKyAgICAgICAgICAgIHNldENvbnRhaW5lckFuZE9mZnNldEZv
clJhbmdlKG5vZGUsIHN0YXJ0IC0gb2Zmc2V0LCBzdGFydE5vZGUsIHN0YXJ0KTsKKworICAgICAg
ICBpZiAob2Zmc2V0IDw9IGVuZCAmJiBlbmQgPD0gb2Zmc2V0ICsgbGVuZ3RoKSB7CisgICAgICAg
ICAgICBzZXRDb250YWluZXJBbmRPZmZzZXRGb3JSYW5nZShub2RlLCBlbmQgLSBvZmZzZXQsIGVu
ZE5vZGUsIGVuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG9m
ZnNldCArPSBsZW5ndGg7CisgICAgfQorCisgICAgaWYgKCFzdGFydE5vZGUgfHwgIWVuZE5vZGUp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQo
KSwgc3RhcnROb2RlLCBzdGFydCwgZW5kTm9kZSwgZW5kKTsKIH0KIAogdm9pZCBIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudDo6cmVzdG9yZUNhY2hlZFNlbGVjdGlvbigpCiB7Ci0gICAgV2ViQ29y
ZTo6c2V0U2VsZWN0aW9uUmFuZ2UodGhpcywgbV9jYWNoZWRTZWxlY3Rpb25TdGFydCwgbV9jYWNo
ZWRTZWxlY3Rpb25FbmQpOworICAgIHNldFNlbGVjdGlvblJhbmdlKG1fY2FjaGVkU2VsZWN0aW9u
U3RhcnQsIG1fY2FjaGVkU2VsZWN0aW9uRW5kKTsKIH0KIAogdm9pZCBIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudDo6c2VsZWN0aW9uQ2hhbmdlZChib29sIHVzZXJUcmlnZ2VyZWQpCkBAIC03MTUs
OCArODI5LDggQEAKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIWlzVGV4dEZvcm1Db250cm9sKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclRleHRDb250cm9sKiByZW5kZXJUZXh0Q29u
dHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSk7Ci0gICAgY2FjaGVTZWxlY3Rp
b24ocmVuZGVyVGV4dENvbnRyb2wtPnNlbGVjdGlvblN0YXJ0KCksIHJlbmRlclRleHRDb250cm9s
LT5zZWxlY3Rpb25FbmQoKSk7CisgICAgLy8gc2VsZWN0aW9uU3RhcnQoKSBvciBzZWxlY3Rpb25F
bmQoKSB3aWxsIHJldHVybiBjYWNoZWQgc2VsZWN0aW9uIHdoZW4gdGhpcyBub2RlIGRvZXNuJ3Qg
aGF2ZSBmb2N1cworICAgIGNhY2hlU2VsZWN0aW9uKGNvbXB1dGVTZWxlY3Rpb25TdGFydCgpLCBj
b21wdXRlU2VsZWN0aW9uRW5kKCkpOwogCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
KCktPmZyYW1lKCkpIHsKICAgICAgICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgp
ICYmIHVzZXJUcmlnZ2VyZWQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDkwNjQ1KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNiAr
ODIsMTEgQEAKIHsKIH0KIAorSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIFJlbmRlclRleHRD
b250cm9sOjp0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqPihub2RlKCkpOworfQorCiB2b2lkIFJlbmRl
clRleHRDb250cm9sOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAgIFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5n
ZShkaWZmLCBvbGRTdHlsZSk7CkBAIC0xNzMsNzMgKzE3OCw2IEBACiAgICAgZG9jdW1lbnQoKS0+
c2V0SWdub3JlQXV0b2ZvY3VzKGxhc3RDaGFuZ2VXYXNVc2VyRWRpdCk7CiB9CiAKLWludCBSZW5k
ZXJUZXh0Q29udHJvbDo6c2VsZWN0aW9uU3RhcnQoKSBjb25zdAotewotICAgIEZyYW1lKiBmcmFt
ZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgCi0gICAgSFRNTEVsZW1lbnQqIGlubmVyVGV4dCA9IGlubmVyVGV4dEVsZW1lbnQoKTsKLSAg
ICAvLyBEbyBub3QgY2FsbCBpbm5lclRleHRFbGVtZW50KCkgaW4gdGhlIGZ1bmN0aW9uIGFyZ3Vt
ZW50cyBhcyBjcmVhdGluZyBhIFZpc2libGVQb3NpdGlvbgotICAgIC8vIGZyb20gZnJhbWUtPnNl
bGVjdGlvbi0+c3RhcnQoKSBjYW4gYmxvdyB1cyBmcm9tIHVuZGVybmVhdGguIEFsc28sIGZ1bmN0
aW9uIG9yZGVyaW5nIGlzCi0gICAgLy8gdXN1YWxseSBkZXBlbmRlbnQgb24gdGhlIGNvbXBpbGVy
LgotICAgIHJldHVybiBSZW5kZXJUZXh0Q29udHJvbDo6aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24o
aW5uZXJUZXh0LCBmcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkpOwotfQotCi1pbnQgUmVuZGVy
VGV4dENvbnRyb2w6OnNlbGVjdGlvbkVuZCgpIGNvbnN0Ci17Ci0gICAgRnJhbWUqIGZyYW1lID0g
dGhpcy0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IEhUTUxFbGVtZW50KiBpbm5lclRleHQgPSBpbm5lclRleHRFbGVtZW50KCk7Ci0gICAgLy8gRG8g
bm90IGNhbGwgaW5uZXJUZXh0RWxlbWVudCgpIGluIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMgYXMg
Y3JlYXRpbmcgYSBWaXNpYmxlUG9zaXRpb24KLSAgICAvLyBmcm9tIGZyYW1lLT5zZWxlY3Rpb24t
PmVuZCgpIGNhbiBibG93IHVzIGZyb20gdW5kZXJuZWF0aC4gQWxzbywgZnVuY3Rpb24gb3JkZXJp
bmcgaXMKLSAgICAvLyB1c3VhbGx5IGRlcGVuZGVudCBvbiB0aGUgY29tcGlsZXIuCi0gICAgcmV0
dXJuIFJlbmRlclRleHRDb250cm9sOjppbmRleEZvclZpc2libGVQb3NpdGlvbihpbm5lclRleHQs
IGZyYW1lLT5zZWxlY3Rpb24oKS0+ZW5kKCkpOwotfQotCi1ib29sIFJlbmRlclRleHRDb250cm9s
OjpoYXNWaXNpYmxlVGV4dEFyZWEoKSBjb25zdAotewotICAgIEhUTUxFbGVtZW50KiBpbm5lclRl
eHQgPSBpbm5lclRleHRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIHN0eWxlKCktPnZpc2liaWxpdHko
KSA9PSBISURERU4gfHwgIWlubmVyVGV4dCB8fCAhaW5uZXJUZXh0LT5yZW5kZXJlcigpIHx8ICFp
bm5lclRleHQtPnJlbmRlckJveCgpLT5oZWlnaHQoKTsKLX0KLQotdm9pZCBzZXRTZWxlY3Rpb25S
YW5nZShOb2RlKiBub2RlLCBpbnQgc3RhcnQsIGludCBlbmQpCi17Ci0gICAgQVNTRVJUKG5vZGUp
OwotICAgIG5vZGUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwotCi0gICAgaWYgKCFub2RlLT5yZW5kZXJlcigpIHx8ICFub2RlLT5yZW5kZXJlcigp
LT5pc1RleHRDb250cm9sKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGVuZCA9IG1heChlbmQs
IDApOwotICAgIHN0YXJ0ID0gbWluKG1heChzdGFydCwgMCksIGVuZCk7Ci0KLSAgICBSZW5kZXJU
ZXh0Q29udHJvbCogY29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2wobm9kZS0+cmVuZGVyZXIo
KSk7Ci0KLSAgICBpZiAoY29udHJvbC0+aGFzVmlzaWJsZVRleHRBcmVhKCkpIHsKLSAgICAgICAg
c3RhdGljX2Nhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqPihub2RlKS0+Y2FjaGVTZWxl
Y3Rpb24oc3RhcnQsIGVuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBjb250cm9sLT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChz
dGFydCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uOwotICAgIGlmIChzdGFydCA9
PSBlbmQpCi0gICAgICAgIGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKLSAgICBlbHNlCi0g
ICAgICAgIGVuZFBvc2l0aW9uID0gY29udHJvbC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoZW5k
KTsKLQotICAgIC8vIHN0YXJ0UG9zaXRpb24gYW5kIGVuZFBvc2l0aW9uIGNhbiBiZSBudWxsIHBv
c2l0aW9uIGZvciBleGFtcGxlIHdoZW4KLSAgICAvLyAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9u
ZSIgc3R5bGUgYXR0cmlidXRlIGlzIHNwZWNpZmllZC4KLSAgICBpZiAoc3RhcnRQb3NpdGlvbi5p
c05vdE51bGwoKSAmJiBlbmRQb3NpdGlvbi5pc05vdE51bGwoKSkgewotICAgICAgICBBU1NFUlQo
c3RhcnRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnNoYWRvd0Fu
Y2VzdG9yTm9kZSgpID09IG5vZGUgJiYgZW5kUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXBy
ZWNhdGVkTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA9PSBub2RlKTsKLSAgICB9Ci0gICAg
VmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0UG9z
aXRpb24sIGVuZFBvc2l0aW9uKTsKLQotICAgIGlmIChGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1
bWVudCgpLT5mcmFtZSgpKQotICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlv
bihuZXdTZWxlY3Rpb24pOwotfQotCiBib29sIFJlbmRlclRleHRDb250cm9sOjppc1NlbGVjdGFi
bGVFbGVtZW50KEhUTUxFbGVtZW50KiBpbm5lclRleHQsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYg
KCFub2RlIHx8ICFpbm5lclRleHQpCkBAIC0yNTYsNTIgKzE5NCw2IEBACiAgICAgICAgIHx8IChz
aGFkb3dBbmNlc3Rvci0+aGFzVGFnTmFtZShpbnB1dFRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudCo+KHNoYWRvd0FuY2VzdG9yKS0+aXNUZXh0RmllbGQoKSkpOwogfQogCi1zdGF0
aWMgaW5saW5lIHZvaWQgc2V0Q29udGFpbmVyQW5kT2Zmc2V0Rm9yUmFuZ2UoTm9kZSogbm9kZSwg
aW50IG9mZnNldCwgTm9kZSomIGNvbnRhaW5lck5vZGUsIGludCYgb2Zmc2V0SW5Db250YWluZXIp
Ci17Ci0gICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICBjb250YWluZXJOb2Rl
ID0gbm9kZTsKLSAgICAgICAgb2Zmc2V0SW5Db250YWluZXIgPSBvZmZzZXQ7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgY29udGFpbmVyTm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAg
b2Zmc2V0SW5Db250YWluZXIgPSBub2RlLT5ub2RlSW5kZXgoKSArIG9mZnNldDsKLSAgICB9Ci19
Ci0KLVBhc3NSZWZQdHI8UmFuZ2U+IFJlbmRlclRleHRDb250cm9sOjpzZWxlY3Rpb24oaW50IHN0
YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIEFTU0VSVChzdGFydCA8PSBlbmQpOwotICAgIEhU
TUxFbGVtZW50KiBpbm5lclRleHQgPSBpbm5lclRleHRFbGVtZW50KCk7Ci0gICAgaWYgKCFpbm5l
clRleHQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFpbm5lclRleHQtPmZpcnN0Q2hp
bGQoKSkKLSAgICAgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgaW5uZXJUZXh0
LCAwLCBpbm5lclRleHQsIDApOwotCi0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgTm9kZSogc3Rh
cnROb2RlID0gMDsKLSAgICBOb2RlKiBlbmROb2RlID0gMDsKLSAgICBmb3IgKE5vZGUqIG5vZGUg
PSBpbm5lclRleHQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4
dE5vZGUoaW5uZXJUZXh0KSkgewotICAgICAgICBBU1NFUlQoIW5vZGUtPmZpcnN0Q2hpbGQoKSk7
Ci0gICAgICAgIEFTU0VSVChub2RlLT5pc1RleHROb2RlKCkgfHwgbm9kZS0+aGFzVGFnTmFtZShi
clRhZykpOwotICAgICAgICBpbnQgbGVuZ3RoID0gbm9kZS0+aXNUZXh0Tm9kZSgpID8gbGFzdE9m
ZnNldEluTm9kZShub2RlKSA6IDE7Ci0gICAgCi0gICAgICAgIGlmIChvZmZzZXQgPD0gc3RhcnQg
JiYgc3RhcnQgPD0gb2Zmc2V0ICsgbGVuZ3RoKQotICAgICAgICAgICAgc2V0Q29udGFpbmVyQW5k
T2Zmc2V0Rm9yUmFuZ2Uobm9kZSwgc3RhcnQgLSBvZmZzZXQsIHN0YXJ0Tm9kZSwgc3RhcnQpOwot
Ci0gICAgICAgIGlmIChvZmZzZXQgPD0gZW5kICYmIGVuZCA8PSBvZmZzZXQgKyBsZW5ndGgpIHsK
LSAgICAgICAgICAgIHNldENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdlKG5vZGUsIGVuZCAtIG9m
ZnNldCwgZW5kTm9kZSwgZW5kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgb2Zmc2V0ICs9IGxlbmd0aDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFzdGFydE5vZGUg
fHwgIWVuZE5vZGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIFJhbmdlOjpjcmVh
dGUoZG9jdW1lbnQoKSwgc3RhcnROb2RlLCBzdGFydCwgZW5kTm9kZSwgZW5kKTsKLX0KLQogVmlz
aWJsZVBvc2l0aW9uIFJlbmRlclRleHRDb250cm9sOjp2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChp
bnQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKGluZGV4IDw9IDApCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAkocmV2aXNpb24gOTA2NDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIGNsYXNz
IFRleHRDb250cm9sSW5uZXJFbGVtZW50OwogY2xhc3MgVGV4dENvbnRyb2xJbm5lclRleHRFbGVt
ZW50OwpAQCAtMzQsMTYgKzM1LDEzIEBACiBwdWJsaWM6CiAgICAgdmlydHVhbCB+UmVuZGVyVGV4
dENvbnRyb2woKTsKIAorICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0Rm9ybUNv
bnRyb2xFbGVtZW50KCk7CiAgICAgdmlydHVhbCBIVE1MRWxlbWVudCogaW5uZXJUZXh0RWxlbWVu
dCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0
ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKSBjb25zdCA9IDA7
CiAKICAgICBib29sIGxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFz
dENoYW5nZVdhc1VzZXJFZGl0OyB9CiAgICAgdm9pZCBzZXRMYXN0Q2hhbmdlV2FzVXNlckVkaXQo
Ym9vbCBsYXN0Q2hhbmdlV2FzVXNlckVkaXQpOwogCi0gICAgaW50IHNlbGVjdGlvblN0YXJ0KCkg
Y29uc3Q7Ci0gICAgaW50IHNlbGVjdGlvbkVuZCgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8UmFu
Z2U+IHNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCiAgICAgdmlydHVhbCB2
b2lkIHN1YnRyZWVIYXNDaGFuZ2VkKCk7CiAgICAgU3RyaW5nIHRleHQoKTsKICAgICBTdHJpbmcg
dGV4dFdpdGhIYXJkTGluZUJyZWFrcygpOwpAQCAtOTYsOCArOTQsNiBAQAogCiAgICAgdmlydHVh
bCBib29sIHJlcXVpcmVzRm9yY2VkU3R5bGVSZWNhbGNQcm9wYWdhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAotICAgIGJvb2wgaGFzVmlzaWJsZVRleHRBcmVhKCkgY29uc3Q7Ci0gICAg
ZnJpZW5kIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UoTm9kZSosIGludCBzdGFydCwgaW50IGVuZCk7
CiAgICAgc3RhdGljIGJvb2wgaXNTZWxlY3RhYmxlRWxlbWVudChIVE1MRWxlbWVudCosIE5vZGUq
KTsKICAgICAKICAgICB2aXJ0dWFsIGludCB0ZXh0QmxvY2tJbnNldExlZnQoKSBjb25zdCA9IDA7
CkBAIC0xMDksOCArMTA1LDYgQEAKICAgICBib29sIG1fbGFzdENoYW5nZVdhc1VzZXJFZGl0Owog
fTsKIAotdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShOb2RlKiwgaW50IHN0YXJ0LCBpbnQgZW5kKTsK
LQogaW5saW5lIFJlbmRlclRleHRDb250cm9sKiB0b1JlbmRlclRleHRDb250cm9sKFJlbmRlck9i
amVjdCogb2JqZWN0KQogeyAKICAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzVGV4dENv
bnRyb2woKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gOTA2ODgpCisrKyBTb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEx
LTA3LTA5ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUg
c2VsZWN0aW9uIHJlbGF0ZWQgY29kZSBmcm9tIFJlbmRlclRleHRDb250cm9sIHRvIEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NDEzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFJlcGxhY2VkIGNhbGxzIHRvIFdlYkNvcmU6OnNldFNlbGVjdGlvblJhbmdlIGJ5
IGNhbGxzIHRvIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZS4K
KworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6
OmlucHV0TWV0aG9kRXZlbnQpOgorCiAyMDExLTA3LTA4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjkwNjYyLgpJbmRl
eDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gOTA2NDUpCisrKyBTb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMTEsOCArMTEx
MSwxMCBAQAogICAgICAgICBjYXNlIFFJbnB1dE1ldGhvZEV2ZW50OjpTZWxlY3Rpb246IHsKICAg
ICAgICAgICAgIGhhc1NlbGVjdGlvbiA9IHRydWU7CiAgICAgICAgICAgICAvLyBBIHNlbGVjdGlv
biBpbiB0aGUgaW5wdXRNZXRob2RFdmVudCBpcyBhbHdheXMgcmVmbGVjdGVkIGluIHRoZSB2aXNp
YmxlIHRleHQKLSAgICAgICAgICAgIGlmIChub2RlKQotICAgICAgICAgICAgICAgIHNldFNlbGVj
dGlvblJhbmdlKG5vZGUsIHFNaW4oYS5zdGFydCwgKGEuc3RhcnQgKyBhLmxlbmd0aCkpLCBxTWF4
KGEuc3RhcnQsIChhLnN0YXJ0ICsgYS5sZW5ndGgpKSk7CisgICAgICAgICAgICBpZiAobm9kZSkg
eworICAgICAgICAgICAgICAgIGlmIChIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4dENv
bnRyb2wgPSB0b1RleHRGb3JtQ29udHJvbChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgdGV4
dENvbnRyb2wtPnNldFNlbGVjdGlvblJhbmdlKHFNaW4oYS5zdGFydCwgKGEuc3RhcnQgKyBhLmxl
bmd0aCkpLCBxTWF4KGEuc3RhcnQsIChhLnN0YXJ0ICsgYS5sZW5ndGgpKSk7CisgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmICghZXYtPnByZWVkaXRTdHJpbmcoKS5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICAgICAgZWRpdG9yLT5zZXRDb21wb3NpdGlvbihldi0+cHJlZWRpdFN0cmluZygp
LCB1bmRlcmxpbmVzLCBxTWluKGEuc3RhcnQsIChhLnN0YXJ0ICsgYS5sZW5ndGgpKSwgcU1heChh
LnN0YXJ0LCAoYS5zdGFydCArIGEubGVuZ3RoKSkpOwpAQCAtMTEzMiw3ICsxMTM0LDggQEAKICAg
ICBpZiAobm9kZSAmJiBldi0+cmVwbGFjZW1lbnRMZW5ndGgoKSA+IDApIHsKICAgICAgICAgaW50
IGN1cnNvclBvcyA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+ZXh0ZW50KCkub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCk7CiAgICAgICAgIGludCBzdGFydCA9IGN1cnNvclBvcyArIGV2LT5yZXBsYWNlbWVu
dFN0YXJ0KCk7Ci0gICAgICAgIHNldFNlbGVjdGlvblJhbmdlKG5vZGUsIHN0YXJ0LCBzdGFydCAr
IGV2LT5yZXBsYWNlbWVudExlbmd0aCgpKTsKKyAgICAgICAgaWYgKEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50KiB0ZXh0Q29udHJvbCA9IHRvVGV4dEZvcm1Db250cm9sKG5vZGUpKQorICAgICAg
ICAgICAgdGV4dENvbnRyb2wtPnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBzdGFydCArIGV2LT5y
ZXBsYWNlbWVudExlbmd0aCgpKTsKICAgICAgICAgLy8gQ29tbWl0IHJlZ2FyZGxlc3Mgb2Ygd2hl
dGhlciBjb21taXRTdHJpbmcgaXMgZW1wdHksIHRvIGdldCByaWQgb2Ygc2VsZWN0aW9uLgogICAg
ICAgICBlZGl0b3ItPmNvbmZpcm1Db21wb3NpdGlvbihldi0+Y29tbWl0U3RyaW5nKCkpOwogICAg
IH0gZWxzZSBpZiAoIWV2LT5jb21taXRTdHJpbmcoKS5pc0VtcHR5KCkpIHsK
</data>
<flag name="review"
          id="94875"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="94987"
          type_id="3"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>