<?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>215673</bug_id>
          
          <creation_ts>2020-08-19 17:18:20 -0700</creation_ts>
          <short_desc>Make it possible to create a WeakPtr to Node and use it store assigned nodes in SlotAssignment</short_desc>
          <delta_ts>2021-04-12 21:45: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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=215879</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=224470</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1681544</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-08-19 17:18:20 -0700</bug_when>
    <thetext>We should be able to make WeakPtr to Node. Deploy that in SlotAssignment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681546</commentid>
    <comment_count>1</comment_count>
      <attachid>406891</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-08-19 17:19:00 -0700</bug_when>
    <thetext>Created attachment 406891
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681566</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-19 18:09:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/67440818&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681731</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-08-20 10:31:08 -0700</bug_when>
    <thetext>Is it OK to make all Nodes bigger? Or should we consider putting the WeakPtrFactory in RareData?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681753</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-08-20 11:57:46 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #3)
&gt; Is it OK to make all Nodes bigger? Or should we consider putting the
&gt; WeakPtrFactory in RareData?

I don&apos;t think putting in RareData is a good idea because ElementRareData is pretty big and I doubt that WeakPtr would stay rare. I&apos;m running memory tests with this change.

I don&apos;t think the size of Node really matters these days because most of memory usage is JS heap. But if we really wanted, we can share it with NodeRareData pointer in Node. So basically, we can have a single pointer either point to WeakReference or NodeRareData/ElementRareData. When we create NodeRareData, we can move it inside.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682873</commentid>
    <comment_count>5</comment_count>
      <attachid>407257</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-08-25 18:51:06 -0700</bug_when>
    <thetext>Created attachment 407257
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682874</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-08-25 18:51:18 -0700</bug_when>
    <thetext>Our internal perf tests seem to show that this patch is basically perf &amp; memory neutral.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683034</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-26 10:41:26 -0700</bug_when>
    <thetext>I’m surprised that making all text nodes bigger is memory neutral!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683042</commentid>
    <comment_count>8</comment_count>
      <attachid>407257</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-26 10:53:53 -0700</bug_when>
    <thetext>Comment on attachment 407257
Patch

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

I’m going to say review+ but I am surprised that we can afford this much extra memory for every text node.

If we can afford this extra memory, then it seems like we can cut down the code size and complexity of accessibility code by taking advantage. AXObjectCache::remove has a lot of code in it to respond to the deletion of a node. Needs to remove it from each of many separate data structures have nodes as keys or values. AccessibilityNodeObject::m_node is a raw pointer that is nulled out by a hand-written WeakPtr implementation in a function named &quot;detachRemoteParts&quot;.

&gt; Source/WebCore/html/HTMLSlotElement.cpp:122
&gt; +    for (const WeakPtr&lt;Node&gt;&amp; nodePtr : *assignedNodes) {

auto&amp;

&gt; Source/WebCore/html/HTMLSlotElement.cpp:125
&gt; +            ASSERT_NOT_REACHED();

Why can we assert this?

&gt; Source/WebCore/html/HTMLSlotElement.cpp:157
&gt; -    return assignedNodes-&gt;map([] (Node* node) { return makeRef(*node); });
&gt; +
&gt; +    Vector&lt;Ref&lt;Node&gt;&gt; nodes;
&gt; +    nodes.reserveInitialCapacity(assignedNodes-&gt;size());
&gt; +    for (auto&amp; nodePtr : *assignedNodes) {
&gt; +        auto* node = nodePtr.get();
&gt; +        if (UNLIKELY(!node))
&gt; +            continue;
&gt; +        nodes.uncheckedAppend(*node);
&gt; +    }
&gt; +
&gt; +    return nodes;

I’d like us to create a Vector::map variant that allows removal of the nodes during the mapping process. I included this feature in makeVector, although the design isn’t super-elegant, and have found it to often be useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683216</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-08-26 17:10:21 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Comment on attachment 407257 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407257&amp;action=review
&gt; 
&gt; I’m going to say review+ but I am surprised that we can afford this much
&gt; extra memory for every text node.

I&apos;m sure it&apos;s using slightly more memory but these days JS heap &amp; IO surfaces account for a much larger proportion of the memory.

&gt; If we can afford this extra memory, then it seems like we can cut down the
&gt; code size and complexity of accessibility code by taking advantage.
&gt; AXObjectCache::remove has a lot of code in it to respond to the deletion of
&gt; a node. Needs to remove it from each of many separate data structures have
&gt; nodes as keys or values. AccessibilityNodeObject::m_node is a raw pointer
&gt; that is nulled out by a hand-written WeakPtr implementation in a function
&gt; named &quot;detachRemoteParts&quot;.

Yeah, there is a lot of code that could be simplified once this patch lands.

&gt; &gt; Source/WebCore/html/HTMLSlotElement.cpp:122
&gt; &gt; +    for (const WeakPtr&lt;Node&gt;&amp; nodePtr : *assignedNodes) {
&gt; 
&gt; auto&amp;

Hm... I explicitly wanted to communicate the fact it&apos;s a weak pointer. I&apos;d use auto&amp; and rename the variable to nodeWeakPtr then.

&gt; &gt; Source/WebCore/html/HTMLSlotElement.cpp:125
&gt; &gt; +            ASSERT_NOT_REACHED();
&gt; 
&gt; Why can we assert this?

In theory, this should never happen. This assertion being hit would mean that we have a bug somewhere, which I don&apos;t believe it exist today.

&gt; &gt; Source/WebCore/html/HTMLSlotElement.cpp:157
&gt; &gt; -    return assignedNodes-&gt;map([] (Node* node) { return makeRef(*node); });
&gt; &gt; +
&gt; &gt; +    Vector&lt;Ref&lt;Node&gt;&gt; nodes;
&gt; &gt; +    nodes.reserveInitialCapacity(assignedNodes-&gt;size());
&gt; &gt; +    for (auto&amp; nodePtr : *assignedNodes) {
&gt; &gt; +        auto* node = nodePtr.get();
&gt; &gt; +        if (UNLIKELY(!node))
&gt; &gt; +            continue;
&gt; &gt; +        nodes.uncheckedAppend(*node);
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    return nodes;
&gt; 
&gt; I’d like us to create a Vector::map variant that allows removal of the nodes
&gt; during the mapping process. I included this feature in makeVector, although
&gt; the design isn’t super-elegant, and have found it to often be useful.

Yes, my thoughts exactly. I didn&apos;t do it in this patch because I wanted to keep it easily revertible in the case it still causes a perf regression somewhere but I&apos;d go work on that on a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683239</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-08-26 18:26:25 -0700</bug_when>
    <thetext>Committed r266212: &lt;https://trac.webkit.org/changeset/266212&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406891</attachid>
            <date>2020-08-19 17:19:00 -0700</date>
            <delta_ts>2020-08-25 18:51:05 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>wip215673.patch</filename>
            <type>text/plain</type>
            <size>9883</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFRyZWVJdGVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkVHJlZUl0ZXJhdG9yLmNwcAkocmV2
aXNpb24gMjY1ODgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkVHJlZUl0ZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3IEBACiAgICAgICAgIGF1dG8mIHNs
b3QgPSBkb3duY2FzdDxIVE1MU2xvdEVsZW1lbnQ+KGN1cnJlbnQoKSk7CiAgICAgICAgIGlmIChh
dXRvKiBhc3NpZ25lZE5vZGVzID0gc2xvdC5hc3NpZ25lZE5vZGVzKCkpIHsKICAgICAgICAgICAg
IGNvbnRleHQoKS5zbG90Tm9kZUluZGV4ID0gMDsKLSAgICAgICAgICAgIGF1dG8qIGFzc2lnbmVk
Tm9kZSA9IGFzc2lnbmVkTm9kZXMtPmF0KDApOworICAgICAgICAgICAgYXV0byogYXNzaWduZWRO
b2RlID0gYXNzaWduZWROb2Rlcy0+YXQoMCkuZ2V0KCk7CiAgICAgICAgICAgICBtX2NvbnRleHRT
dGFjay5hcHBlbmQoQ29udGV4dCgqYXNzaWduZWROb2RlLT5wYXJlbnRFbGVtZW50KCksICphc3Np
Z25lZE5vZGUsIENvbnRleHQ6OlNsb3R0ZWQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtMTk3LDcgKzE5Nyw5IEBACiAgICAgaWYgKGNvbnRleHQoKS5zbG90Tm9kZUluZGV4
ID49IGFzc2lnbmVkTm9kZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvKiBzbG90Tm9kZSA9IGFzc2lnbmVkTm9kZXMuYXQoY29udGV4dCgpLnNsb3ROb2RlSW5kZXgp
OworICAgIGF1dG8qIHNsb3ROb2RlID0gYXNzaWduZWROb2Rlcy5hdChjb250ZXh0KCkuc2xvdE5v
ZGVJbmRleCkuZ2V0KCk7CisgICAgaWYgKCFzbG90Tm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIG1fY29udGV4dFN0YWNrLmFwcGVuZChDb250ZXh0KCpzbG90Tm9kZS0+cGFyZW50RWxl
bWVudCgpLCAqc2xvdE5vZGUsIENvbnRleHQ6OlNsb3R0ZWQpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFRyZWVJdGVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFRyZWVJdGVyYXRvci5oCShyZXZp
c2lvbiAyNjU4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRUcmVlSXRlcmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDcgKzIyNiw3IEBACiAgICAgICAgIHJldHVybiBzaGFk
b3dSb290LT5maXJzdENoaWxkKCk7CiAgICAgaWYgKGlzPEhUTUxTbG90RWxlbWVudD4obm9kZSkp
IHsKICAgICAgICAgaWYgKGF1dG8qIGFzc2lnbmVkTm9kZXMgPSBkb3duY2FzdDxIVE1MU2xvdEVs
ZW1lbnQ+KG5vZGUpLmFzc2lnbmVkTm9kZXMoKSkKLSAgICAgICAgICAgIHJldHVybiBhc3NpZ25l
ZE5vZGVzLT5hdCgwKTsKKyAgICAgICAgICAgIHJldHVybiBhc3NpZ25lZE5vZGVzLT5hdCgwKS5n
ZXQoKTsKICAgICB9CiAgICAgcmV0dXJuIG5vZGUuZmlyc3RDaGlsZCgpOwogfQpAQCAtMjM5LDcg
KzIzOSw3IEBACiAgICAgICAgIGF1dG8gbm9kZUluZGV4ID0gYXNzaWduZWROb2Rlcy0+ZmluZCgm
bm9kZSk7CiAgICAgICAgIEFTU0VSVChub2RlSW5kZXggIT0gbm90Rm91bmQpOwogICAgICAgICBp
ZiAoYXNzaWduZWROb2Rlcy0+c2l6ZSgpID4gbm9kZUluZGV4ICsgMSkKLSAgICAgICAgICAgIHJl
dHVybiBhc3NpZ25lZE5vZGVzLT5hdChub2RlSW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVy
biBhc3NpZ25lZE5vZGVzLT5hdChub2RlSW5kZXggKyAxKS5nZXQoKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgJKHJldmlzaW9uIDI2NTg4MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYg
QEAKIAogI2luY2x1ZGUgIkNvbGxlY3Rpb25UeXBlLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgotI2lu
Y2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsNyAr
MzUsNyBAQAogY29uc3QgaW50IGluaXRpYWxOb2RlVmVjdG9yU2l6ZSA9IDExOyAvLyBDb3ZlcnMg
OTkuNSUuIFNlZSB3ZWJraXQub3JnL2IvODA3MDYKIHR5cGVkZWYgVmVjdG9yPFJlZjxOb2RlPiwg
aW5pdGlhbE5vZGVWZWN0b3JTaXplPiBOb2RlVmVjdG9yOwogCi1jbGFzcyBDb250YWluZXJOb2Rl
IDogcHVibGljIENhbk1ha2VXZWFrUHRyPENvbnRhaW5lck5vZGU+LCBwdWJsaWMgTm9kZSB7Citj
bGFzcyBDb250YWluZXJOb2RlIDogcHVibGljIE5vZGUgewogICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoQ29udGFpbmVyTm9kZSk7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q29udGFpbmVyTm9k
ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAyNjU4ODApCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8
d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRl
IDx3dGYvVVJMSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIC8vIFRoaXMgbmVl
ZHMgdG8gYmUgaGVyZSBiZWNhdXNlIERvY3VtZW50LmggYWxzbyBkZXBlbmRzIG9uIGl0LgogI2Rl
ZmluZSBEVU1QX05PREVfU1RBVElTVElDUyAwCkBAIC02OSw3ICs3MCw3IEBACiAKIHVzaW5nIE5v
ZGVPclN0cmluZyA9IFZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+OwogCi1jbGFzcyBOb2Rl
IDogcHVibGljIEV2ZW50VGFyZ2V0IHsKK2NsYXNzIE5vZGUgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQ
dHI8Tm9kZT4sIHB1YmxpYyBFdmVudFRhcmdldCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChOb2RlKTsKIAogICAgIGZyaWVuZCBjbGFzcyBEb2N1bWVudDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9TaGFkb3dSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
U2hhZG93Um9vdC5jcHAJKHJldmlzaW9uIDI2NTg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9T
aGFkb3dSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDcgKzI1Myw3IEBACiAgICAgcmV0
dXJuIG1fc2xvdEFzc2lnbm1lbnQtPnNsb3RGYWxsYmFja0RpZENoYW5nZShzbG90LCAqdGhpcyk7
CiB9CiAKLWNvbnN0IFZlY3RvcjxOb2RlKj4qIFNoYWRvd1Jvb3Q6OmFzc2lnbmVkTm9kZXNGb3JT
bG90KGNvbnN0IEhUTUxTbG90RWxlbWVudCYgc2xvdCkKK2NvbnN0IFZlY3RvcjxXZWFrUHRyPE5v
ZGU+PiogU2hhZG93Um9vdDo6YXNzaWduZWROb2Rlc0ZvclNsb3QoY29uc3QgSFRNTFNsb3RFbGVt
ZW50JiBzbG90KQogewogICAgIGlmICghbV9zbG90QXNzaWdubWVudCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgJKHJldmlzaW9uIDI2NTg4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5
LDcgKzk5LDcgQEAKICAgICB2b2lkIGhvc3RDaGlsZEVsZW1lbnREaWRDaGFuZ2UoY29uc3QgRWxl
bWVudCYpOwogICAgIHZvaWQgaG9zdENoaWxkRWxlbWVudERpZENoYW5nZVNsb3RBdHRyaWJ1dGUo
RWxlbWVudCYsIGNvbnN0IEF0b21TdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9tU3RyaW5nJiBu
ZXdWYWx1ZSk7CiAKLSAgICBjb25zdCBWZWN0b3I8Tm9kZSo+KiBhc3NpZ25lZE5vZGVzRm9yU2xv
dChjb25zdCBIVE1MU2xvdEVsZW1lbnQmKTsKKyAgICBjb25zdCBWZWN0b3I8V2Vha1B0cjxOb2Rl
Pj4qIGFzc2lnbmVkTm9kZXNGb3JTbG90KGNvbnN0IEhUTUxTbG90RWxlbWVudCYpOwogCiAgICAg
dm9pZCBtb3ZlU2hhZG93Um9vdFRvTmV3UGFyZW50U2NvcGUoVHJlZVNjb3BlJiwgRG9jdW1lbnQm
KTsKICAgICB2b2lkIG1vdmVTaGFkb3dSb290VG9OZXdEb2N1bWVudChEb2N1bWVudCYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL1Nsb3RBc3NpZ25tZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vU2xvdEFzc2lnbm1lbnQuY3BwCShyZXZpc2lvbiAyNjU4ODApCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vU2xvdEFzc2lnbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMTEsNyArMzExLDcgQEAKICAgICBkaWRDaGFuZ2VTbG90KGNoaWxkRWxlbWVudC5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNsb3RBdHRyKSwgc2hhZG93Um9vdCk7CiB9CiAKLWNv
bnN0IFZlY3RvcjxOb2RlKj4qIFNsb3RBc3NpZ25tZW50Ojphc3NpZ25lZE5vZGVzRm9yU2xvdChj
b25zdCBIVE1MU2xvdEVsZW1lbnQmIHNsb3RFbGVtZW50LCBTaGFkb3dSb290JiBzaGFkb3dSb290
KQorY29uc3QgVmVjdG9yPFdlYWtQdHI8Tm9kZT4+KiBTbG90QXNzaWdubWVudDo6YXNzaWduZWRO
b2Rlc0ZvclNsb3QoY29uc3QgSFRNTFNsb3RFbGVtZW50JiBzbG90RWxlbWVudCwgU2hhZG93Um9v
dCYgc2hhZG93Um9vdCkKIHsKICAgICBBU1NFUlQoc2xvdEVsZW1lbnQuY29udGFpbmluZ1NoYWRv
d1Jvb3QoKSA9PSAmc2hhZG93Um9vdCk7CiAgICAgY29uc3QgQXRvbVN0cmluZyYgc2xvdE5hbWUg
PSBzbG90TmFtZUZyb21BdHRyaWJ1dGVWYWx1ZShzbG90RWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKG5hbWVBdHRyKSk7CkBAIC00MDAsNyArNDAwLDcgQEAKICAgICBpZiAo
c2xvdE5hbWUgPT0gZGVmYXVsdFNsb3ROYW1lKCkpIHsKICAgICAgICAgYXV0byBkZWZhdWx0U2xv
dEVudHJ5ID0gbV9zbG90cy5maW5kKGRlZmF1bHRTbG90TmFtZSgpKTsKICAgICAgICAgaWYgKGRl
ZmF1bHRTbG90RW50cnkgIT0gbV9zbG90cy5lbmQoKSkKLSAgICAgICAgICAgIGRlZmF1bHRTbG90
RW50cnktPnZhbHVlLT5hc3NpZ25lZE5vZGVzLmFwcGVuZCgmY2hpbGQpOworICAgICAgICAgICAg
ZGVmYXVsdFNsb3RFbnRyeS0+dmFsdWUtPmFzc2lnbmVkTm9kZXMuYXBwZW5kKG1ha2VXZWFrUHRy
KGNoaWxkKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQwNyw3ICs0MDcsNyBAQAog
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zbG90cy5lbnN1cmUoc2xvdE5hbWUsIFtdIHsKICAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8U2xvdD4oKTsKICAgICB9KTsKLSAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLT5hc3NpZ25lZE5vZGVzLmFwcGVuZCgmY2hpbGQpOworICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUtPmFzc2lnbmVkTm9kZXMuYXBwZW5kKG1ha2VXZWFrUHRyKGNoaWxk
KSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TbG90QXNzaWdubWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TbG90QXNzaWdubWVudC5oCShyZXZpc2lv
biAyNjU4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2xvdEFzc2lnbm1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQAogICAgIHZvaWQgZGlkQ2hhbmdlU2xvdChjb25zdCBB
dG9tU3RyaW5nJiwgU2hhZG93Um9vdCYpOwogICAgIHZvaWQgZW5xdWV1ZVNsb3RDaGFuZ2VFdmVu
dChjb25zdCBBdG9tU3RyaW5nJiwgU2hhZG93Um9vdCYpOwogCi0gICAgY29uc3QgVmVjdG9yPE5v
ZGUqPiogYXNzaWduZWROb2Rlc0ZvclNsb3QoY29uc3QgSFRNTFNsb3RFbGVtZW50JiwgU2hhZG93
Um9vdCYpOworICAgIGNvbnN0IFZlY3RvcjxXZWFrUHRyPE5vZGU+PiogYXNzaWduZWROb2Rlc0Zv
clNsb3QoY29uc3QgSFRNTFNsb3RFbGVtZW50JiwgU2hhZG93Um9vdCYpOwogCiAgICAgdmlydHVh
bCB2b2lkIGhvc3RDaGlsZEVsZW1lbnREaWRDaGFuZ2UoY29uc3QgRWxlbWVudCYsIFNoYWRvd1Jv
b3QmKTsKIApAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICBXZWFrUHRyPEhUTUxTbG90RWxlbWVu
dD4gb2xkRWxlbWVudDsKICAgICAgICAgdW5zaWduZWQgZWxlbWVudENvdW50IHsgMCB9OwogICAg
ICAgICBib29sIHNlZW5GaXJzdEVsZW1lbnQgeyBmYWxzZSB9OwotICAgICAgICBWZWN0b3I8Tm9k
ZSo+IGFzc2lnbmVkTm9kZXM7CisgICAgICAgIFZlY3RvcjxXZWFrUHRyPE5vZGU+PiBhc3NpZ25l
ZE5vZGVzOwogICAgIH07CiAKICAgICBib29sIGhhc0Fzc2lnbmVkTm9kZXMoU2hhZG93Um9vdCYs
IFNsb3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNsb3RFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTbG90RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDI2NTg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNsb3RFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQAogICAgIH0KIH0KIAotY29uc3QgVmVj
dG9yPE5vZGUqPiogSFRNTFNsb3RFbGVtZW50Ojphc3NpZ25lZE5vZGVzKCkgY29uc3QKK2NvbnN0
IFZlY3RvcjxXZWFrUHRyPE5vZGU+PiogSFRNTFNsb3RFbGVtZW50Ojphc3NpZ25lZE5vZGVzKCkg
Y29uc3QKIHsKICAgICBhdXRvIHNoYWRvd1Jvb3QgPSBtYWtlUmVmUHRyKGNvbnRhaW5pbmdTaGFk
b3dSb290KCkpOwogICAgIGlmICghc2hhZG93Um9vdCkKQEAgLTExOSw3ICsxMTksMTIgQEAKICAg
ICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGZvciAoY29uc3QgUmVmUHRyPE5v
ZGU+JiBub2RlIDogKmFzc2lnbmVkTm9kZXMpIHsKKyAgICBmb3IgKGNvbnN0IFdlYWtQdHI8Tm9k
ZT4mIG5vZGVQdHIgOiAqYXNzaWduZWROb2RlcykgeworICAgICAgICBhdXRvKiBub2RlID0gbm9k
ZVB0ci5nZXQoKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFub2RlKSkgeworICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQog
ICAgICAgICBpZiAoaXM8SFRNTFNsb3RFbGVtZW50Pigqbm9kZSkgJiYgZG93bmNhc3Q8SFRNTFNs
b3RFbGVtZW50Pigqbm9kZSkuY29udGFpbmluZ1NoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgIGZs
YXR0ZW5Bc3NpZ25lZE5vZGVzKG5vZGVzLCBkb3duY2FzdDxIVE1MU2xvdEVsZW1lbnQ+KCpub2Rl
KSk7CiAgICAgICAgIGVsc2UKQEAgLTEzOSw3ICsxNDQsMTcgQEAKICAgICBhdXRvKiBhc3NpZ25l
ZE5vZGVzID0gdGhpcy0+YXNzaWduZWROb2RlcygpOwogICAgIGlmICghYXNzaWduZWROb2RlcykK
ICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gYXNzaWduZWROb2Rlcy0+bWFwKFtdIChO
b2RlKiBub2RlKSB7IHJldHVybiBtYWtlUmVmKCpub2RlKTsgfSk7CisKKyAgICBWZWN0b3I8UmVm
PE5vZGU+PiBub2RlczsKKyAgICBub2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFzc2lnbmVk
Tm9kZXMtPnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBub2RlUHRyIDogKmFzc2lnbmVkTm9kZXMp
IHsKKyAgICAgICAgYXV0byogbm9kZSA9IG5vZGVQdHIuZ2V0KCk7CisgICAgICAgIGlmIChVTkxJ
S0VMWSghbm9kZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbm9kZXMudW5jaGVj
a2VkQXBwZW5kKCpub2RlKTsKKyAgICB9CisKKyAgICByZXR1cm4gbm9kZXM7CiB9CiAKIFZlY3Rv
cjxSZWY8RWxlbWVudD4+IEhUTUxTbG90RWxlbWVudDo6YXNzaWduZWRFbGVtZW50cyhjb25zdCBB
c3NpZ25lZE5vZGVzT3B0aW9ucyYgb3B0aW9ucykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNsb3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2xvdEVsZW1lbnQuaAkocmV2aXNpb24gMjY1ODgwKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MU2xvdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8SFRNTFNsb3RFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKLSAgICBjb25zdCBWZWN0b3I8Tm9kZSo+KiBhc3Np
Z25lZE5vZGVzKCkgY29uc3Q7CisgICAgY29uc3QgVmVjdG9yPFdlYWtQdHI8Tm9kZT4+KiBhc3Np
Z25lZE5vZGVzKCkgY29uc3Q7CiAgICAgc3RydWN0IEFzc2lnbmVkTm9kZXNPcHRpb25zIHsKICAg
ICAgICAgYm9vbCBmbGF0dGVuOwogICAgIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zv
Y3VzQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNjU4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZvY3VzQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQAog
ICAgICAgICBhdXRvKiBhc3NpZ25lTm9kZXMgPSBtX3Nsb3RFbGVtZW50LT5hc3NpZ25lZE5vZGVz
KCk7CiAgICAgICAgIGlmIChtX3Nsb3RLaW5kID09IFNsb3RLaW5kOjpBc3NpZ25lZCkgewogICAg
ICAgICAgICAgQVNTRVJUKGFzc2lnbmVOb2Rlcyk7Ci0gICAgICAgICAgICByZXR1cm4gYXNzaWdu
ZU5vZGVzLT5maXJzdCgpOworICAgICAgICAgICAgcmV0dXJuIGFzc2lnbmVOb2Rlcy0+Zmlyc3Qo
KS5nZXQoKTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQobV9zbG90S2luZCA9PSBTbG90S2lu
ZDo6RmFsbGJhY2spOwogICAgICAgICByZXR1cm4gbV9zbG90RWxlbWVudC0+Zmlyc3RDaGlsZCgp
OwpAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgIGF1dG8qIGFzc2lnbmVOb2RlcyA9IG1fc2xv
dEVsZW1lbnQtPmFzc2lnbmVkTm9kZXMoKTsKICAgICAgICAgaWYgKG1fc2xvdEtpbmQgPT0gU2xv
dEtpbmQ6OkFzc2lnbmVkKSB7CiAgICAgICAgICAgICBBU1NFUlQoYXNzaWduZU5vZGVzKTsKLSAg
ICAgICAgICAgIHJldHVybiBhc3NpZ25lTm9kZXMtPmxhc3QoKTsKKyAgICAgICAgICAgIHJldHVy
biBhc3NpZ25lTm9kZXMtPmxhc3QoKS5nZXQoKTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQo
bV9zbG90S2luZCA9PSBTbG90S2luZDo6RmFsbGJhY2spOwogICAgICAgICByZXR1cm4gbV9zbG90
RWxlbWVudC0+bGFzdENoaWxkKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407257</attachid>
            <date>2020-08-25 18:51:06 -0700</date>
            <delta_ts>2020-08-26 10:53:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215673-20200825185106.patch</filename>
            <type>text/plain</type>
            <size>12394</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDIwLTA4LTI1ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8g
Y3JlYXRlIGEgV2Vha1B0ciB0byBOb2RlIGFuZCB1c2UgaXQgc3RvcmUgYXNzaWduZWQgbm9kZXMg
aW4gU2xvdEFzc2lnbm1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNTY3MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjc0NDA4MTg+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBt
YWtlcyBOb2RlIGluaGVyaXQgZnJvbSBDYW5NYWtlV2Vha1B0cjxOb2RlPiBhbmQgdXNlcyBpdCBp
biBTbG90QXNzaWdubWVudCdzIGFzc2lnbmVkTm9kZXMKKyAgICAgICAgYW5kIHJlbGF0ZWQgbWVt
YmVyIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5j
ZSB0aGVyZSBzaG91bGQgYmUgbm8gYmVoYXZpb3JhbCBkaWZmZXJlbmNlLgorCisgICAgICAgICog
ZG9tL0NvbXBvc2VkVHJlZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2Vk
VHJlZUl0ZXJhdG9yOjp0cmF2ZXJzZU5leHRJblNoYWRvd1RyZWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zZWRUcmVlSXRlcmF0b3I6OmFkdmFuY2VJblNsb3QpOgorICAgICAgICAqIGRvbS9D
b21wb3NlZFRyZWVJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RDaGlsZEluQ29t
cG9zZWRUcmVlSWdub3JpbmdVc2VyQWdlbnRTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6bmV4
dFNpYmxpbmdJbkNvbXBvc2VkVHJlZUlnbm9yaW5nVXNlckFnZW50U2hhZG93KToKKyAgICAgICAg
KiBkb20vQ29udGFpbmVyTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgICog
ZG9tL1NoYWRvd1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6YXNzaWdu
ZWROb2Rlc0ZvclNsb3QpOgorICAgICAgICAqIGRvbS9TaGFkb3dSb290Lmg6CisgICAgICAgICog
ZG9tL1Nsb3RBc3NpZ25tZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNsb3RBc3NpZ25tZW50
Ojphc3NpZ25lZE5vZGVzRm9yU2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpTbG90QXNzaWdubWVu
dDo6YXNzaWduVG9TbG90KToKKyAgICAgICAgKiBkb20vU2xvdEFzc2lnbm1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxTbG90RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2xv
dEVsZW1lbnQ6OmFzc2lnbmVkTm9kZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6ZmxhdHRl
bkFzc2lnbmVkTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBodG1sL0hUTUxTbG90RWxlbWVudC5oOgorICAgICAgICAqIHBhZ2UvRm9jdXNDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzTmF2aWdhdGlvblNjb3BlOjpmaXJz
dE5vZGVJblNjb3BlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzTmF2aWdhdGlvblNj
b3BlOjpsYXN0Tm9kZUluU2NvcGUgY29uc3QpOgorCiAyMDIwLTA4LTI1ICBaYWxhbiBCdWp0YXMg
IDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBEbyBub3QgbW92ZSB0aGUg
cnVucyBvdXQgb2YgdGhlIExpbmVCdWlsZGVyIHdoaWxlIGNsb3NpbmcgdGhlIGxpbmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFRyZWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkVHJlZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24g
MjY1ODgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkVHJlZUl0ZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgQ29tcG9zZWRUcmVlSXRlcmF0
b3I6OnRyYXZlcnNlTmV4dEkKICAgICAgICAgYXV0byYgc2xvdCA9IGRvd25jYXN0PEhUTUxTbG90
RWxlbWVudD4oY3VycmVudCgpKTsKICAgICAgICAgaWYgKGF1dG8qIGFzc2lnbmVkTm9kZXMgPSBz
bG90LmFzc2lnbmVkTm9kZXMoKSkgewogICAgICAgICAgICAgY29udGV4dCgpLnNsb3ROb2RlSW5k
ZXggPSAwOwotICAgICAgICAgICAgYXV0byogYXNzaWduZWROb2RlID0gYXNzaWduZWROb2Rlcy0+
YXQoMCk7CisgICAgICAgICAgICBhdXRvKiBhc3NpZ25lZE5vZGUgPSBhc3NpZ25lZE5vZGVzLT5h
dCgwKS5nZXQoKTsKICAgICAgICAgICAgIG1fY29udGV4dFN0YWNrLmFwcGVuZChDb250ZXh0KCph
c3NpZ25lZE5vZGUtPnBhcmVudEVsZW1lbnQoKSwgKmFzc2lnbmVkTm9kZSwgQ29udGV4dDo6U2xv
dHRlZCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xOTcsNyArMTk3LDkg
QEAgYm9vbCBDb21wb3NlZFRyZWVJdGVyYXRvcjo6YWR2YW5jZUluU2xvdAogICAgIGlmIChjb250
ZXh0KCkuc2xvdE5vZGVJbmRleCA+PSBhc3NpZ25lZE5vZGVzLnNpemUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYXV0byogc2xvdE5vZGUgPSBhc3NpZ25lZE5vZGVzLmF0KGNvbnRl
eHQoKS5zbG90Tm9kZUluZGV4KTsKKyAgICBhdXRvKiBzbG90Tm9kZSA9IGFzc2lnbmVkTm9kZXMu
YXQoY29udGV4dCgpLnNsb3ROb2RlSW5kZXgpLmdldCgpOworICAgIGlmICghc2xvdE5vZGUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX2NvbnRleHRTdGFjay5hcHBlbmQoQ29udGV4dCgq
c2xvdE5vZGUtPnBhcmVudEVsZW1lbnQoKSwgKnNsb3ROb2RlLCBDb250ZXh0OjpTbG90dGVkKSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRU
cmVlSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRU
cmVlSXRlcmF0b3IuaAkocmV2aXNpb24gMjY1ODgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Nv
bXBvc2VkVHJlZUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQCBp
bmxpbmUgTm9kZSogZmlyc3RDaGlsZEluQ29tcG9zZWRUcmVlSWduCiAgICAgICAgIHJldHVybiBz
aGFkb3dSb290LT5maXJzdENoaWxkKCk7CiAgICAgaWYgKGlzPEhUTUxTbG90RWxlbWVudD4obm9k
ZSkpIHsKICAgICAgICAgaWYgKGF1dG8qIGFzc2lnbmVkTm9kZXMgPSBkb3duY2FzdDxIVE1MU2xv
dEVsZW1lbnQ+KG5vZGUpLmFzc2lnbmVkTm9kZXMoKSkKLSAgICAgICAgICAgIHJldHVybiBhc3Np
Z25lZE5vZGVzLT5hdCgwKTsKKyAgICAgICAgICAgIHJldHVybiBhc3NpZ25lZE5vZGVzLT5hdCgw
KS5nZXQoKTsKICAgICB9CiAgICAgcmV0dXJuIG5vZGUuZmlyc3RDaGlsZCgpOwogfQpAQCAtMjM5
LDcgKzIzOSw3IEBAIGlubGluZSBOb2RlKiBuZXh0U2libGluZ0luQ29tcG9zZWRUcmVlSWcKICAg
ICAgICAgYXV0byBub2RlSW5kZXggPSBhc3NpZ25lZE5vZGVzLT5maW5kKCZub2RlKTsKICAgICAg
ICAgQVNTRVJUKG5vZGVJbmRleCAhPSBub3RGb3VuZCk7CiAgICAgICAgIGlmIChhc3NpZ25lZE5v
ZGVzLT5zaXplKCkgPiBub2RlSW5kZXggKyAxKQotICAgICAgICAgICAgcmV0dXJuIGFzc2lnbmVk
Tm9kZXMtPmF0KG5vZGVJbmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuIGFzc2lnbmVkTm9k
ZXMtPmF0KG5vZGVJbmRleCArIDEpLmdldCgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAgICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Db250YWluZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuaAkocmV2aXNpb24gMjY1ODgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVk
ZSAiQ29sbGVjdGlvblR5cGUuaCIKICNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSA8d3RmL1dl
YWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiw3ICszNSw3IEBAIGNsYXNz
IFJlbmRlckVsZW1lbnQ7CiBjb25zdCBpbnQgaW5pdGlhbE5vZGVWZWN0b3JTaXplID0gMTE7IC8v
IENvdmVycyA5OS41JS4gU2VlIHdlYmtpdC5vcmcvYi84MDcwNgogdHlwZWRlZiBWZWN0b3I8UmVm
PE5vZGU+LCBpbml0aWFsTm9kZVZlY3RvclNpemU+IE5vZGVWZWN0b3I7CiAKLWNsYXNzIENvbnRh
aW5lck5vZGUgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q29udGFpbmVyTm9kZT4sIHB1YmxpYyBO
b2RlIHsKK2NsYXNzIENvbnRhaW5lck5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChDb250YWluZXJOb2RlKTsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Db250
YWluZXJOb2RlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDI2NTg4MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNp
bmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
I2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogLy8g
VGhpcyBuZWVkcyB0byBiZSBoZXJlIGJlY2F1c2UgRG9jdW1lbnQuaCBhbHNvIGRlcGVuZHMgb24g
aXQuCiAjZGVmaW5lIERVTVBfTk9ERV9TVEFUSVNUSUNTIDAKQEAgLTY5LDcgKzcwLDcgQEAgY2xh
c3MgVG91Y2hFdmVudDsKIAogdXNpbmcgTm9kZU9yU3RyaW5nID0gVmFyaWFudDxSZWZQdHI8Tm9k
ZT4sIFN0cmluZz47CiAKLWNsYXNzIE5vZGUgOiBwdWJsaWMgRXZlbnRUYXJnZXQgeworY2xhc3Mg
Tm9kZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOb2RlPiwgcHVibGljIEV2ZW50VGFyZ2V0IHsK
ICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE5vZGUpOwogCiAgICAgZnJpZW5kIGNsYXNzIERv
Y3VtZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAkocmV2aXNpb24gMjY1ODgw
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTMsNyArMjUzLDcgQEAgdm9pZCBTaGFkb3dSb290OjpzbG90RmFsbGJhY2tEaWRDaGFuZ2Uo
SAogICAgIHJldHVybiBtX3Nsb3RBc3NpZ25tZW50LT5zbG90RmFsbGJhY2tEaWRDaGFuZ2Uoc2xv
dCwgKnRoaXMpOwogfQogCi1jb25zdCBWZWN0b3I8Tm9kZSo+KiBTaGFkb3dSb290Ojphc3NpZ25l
ZE5vZGVzRm9yU2xvdChjb25zdCBIVE1MU2xvdEVsZW1lbnQmIHNsb3QpCitjb25zdCBWZWN0b3I8
V2Vha1B0cjxOb2RlPj4qIFNoYWRvd1Jvb3Q6OmFzc2lnbmVkTm9kZXNGb3JTbG90KGNvbnN0IEhU
TUxTbG90RWxlbWVudCYgc2xvdCkKIHsKICAgICBpZiAoIW1fc2xvdEFzc2lnbm1lbnQpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCShyZXZpc2lv
biAyNjU4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC05OSw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGhvc3RDaGlsZEVsZW1lbnRE
aWRDaGFuZ2UoY29uc3QgRWxlbWVudCYpOwogICAgIHZvaWQgaG9zdENoaWxkRWxlbWVudERpZENo
YW5nZVNsb3RBdHRyaWJ1dGUoRWxlbWVudCYsIGNvbnN0IEF0b21TdHJpbmcmIG9sZFZhbHVlLCBj
b25zdCBBdG9tU3RyaW5nJiBuZXdWYWx1ZSk7CiAKLSAgICBjb25zdCBWZWN0b3I8Tm9kZSo+KiBh
c3NpZ25lZE5vZGVzRm9yU2xvdChjb25zdCBIVE1MU2xvdEVsZW1lbnQmKTsKKyAgICBjb25zdCBW
ZWN0b3I8V2Vha1B0cjxOb2RlPj4qIGFzc2lnbmVkTm9kZXNGb3JTbG90KGNvbnN0IEhUTUxTbG90
RWxlbWVudCYpOwogCiAgICAgdm9pZCBtb3ZlU2hhZG93Um9vdFRvTmV3UGFyZW50U2NvcGUoVHJl
ZVNjb3BlJiwgRG9jdW1lbnQmKTsKICAgICB2b2lkIG1vdmVTaGFkb3dSb290VG9OZXdEb2N1bWVu
dChEb2N1bWVudCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Nsb3RBc3NpZ25tZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2xvdEFzc2lnbm1lbnQuY3BwCShy
ZXZpc2lvbiAyNjU4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2xvdEFzc2lnbm1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNyArMzExLDcgQEAgdm9pZCBTbG90QXNzaWdubWVudDo6
aG9zdENoaWxkRWxlbWVudERpZAogICAgIGRpZENoYW5nZVNsb3QoY2hpbGRFbGVtZW50LmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc2xvdEF0dHIpLCBzaGFkb3dSb290KTsKIH0KIAot
Y29uc3QgVmVjdG9yPE5vZGUqPiogU2xvdEFzc2lnbm1lbnQ6OmFzc2lnbmVkTm9kZXNGb3JTbG90
KGNvbnN0IEhUTUxTbG90RWxlbWVudCYgc2xvdEVsZW1lbnQsIFNoYWRvd1Jvb3QmIHNoYWRvd1Jv
b3QpCitjb25zdCBWZWN0b3I8V2Vha1B0cjxOb2RlPj4qIFNsb3RBc3NpZ25tZW50Ojphc3NpZ25l
ZE5vZGVzRm9yU2xvdChjb25zdCBIVE1MU2xvdEVsZW1lbnQmIHNsb3RFbGVtZW50LCBTaGFkb3dS
b290JiBzaGFkb3dSb290KQogewogICAgIEFTU0VSVChzbG90RWxlbWVudC5jb250YWluaW5nU2hh
ZG93Um9vdCgpID09ICZzaGFkb3dSb290KTsKICAgICBjb25zdCBBdG9tU3RyaW5nJiBzbG90TmFt
ZSA9IHNsb3ROYW1lRnJvbUF0dHJpYnV0ZVZhbHVlKHNsb3RFbGVtZW50LmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24obmFtZUF0dHIpKTsKQEAgLTQwMCwxNCArNDAwLDE0IEBAIHZvaWQg
U2xvdEFzc2lnbm1lbnQ6OmFzc2lnblRvU2xvdChOb2RlJiAKICAgICBpZiAoc2xvdE5hbWUgPT0g
ZGVmYXVsdFNsb3ROYW1lKCkpIHsKICAgICAgICAgYXV0byBkZWZhdWx0U2xvdEVudHJ5ID0gbV9z
bG90cy5maW5kKGRlZmF1bHRTbG90TmFtZSgpKTsKICAgICAgICAgaWYgKGRlZmF1bHRTbG90RW50
cnkgIT0gbV9zbG90cy5lbmQoKSkKLSAgICAgICAgICAgIGRlZmF1bHRTbG90RW50cnktPnZhbHVl
LT5hc3NpZ25lZE5vZGVzLmFwcGVuZCgmY2hpbGQpOworICAgICAgICAgICAgZGVmYXVsdFNsb3RF
bnRyeS0+dmFsdWUtPmFzc2lnbmVkTm9kZXMuYXBwZW5kKG1ha2VXZWFrUHRyKGNoaWxkKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fc2xvdHMuZW5z
dXJlKHNsb3ROYW1lLCBbXSB7CiAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFNsb3Q+KCk7CiAg
ICAgfSk7Ci0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YXNzaWduZWROb2Rlcy5hcHBl
bmQoJmNoaWxkKTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hc3NpZ25lZE5vZGVz
LmFwcGVuZChtYWtlV2Vha1B0cihjaGlsZCkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vU2xvdEFzc2lnbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
U2xvdEFzc2lnbm1lbnQuaAkocmV2aXNpb24gMjY1ODgwKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L1Nsb3RBc3NpZ25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZGlkQ2hhbmdlU2xvdChjb25zdCBBdG9tU3RyaW5nJiwgU2hhZG93Um9vdCYp
OwogICAgIHZvaWQgZW5xdWV1ZVNsb3RDaGFuZ2VFdmVudChjb25zdCBBdG9tU3RyaW5nJiwgU2hh
ZG93Um9vdCYpOwogCi0gICAgY29uc3QgVmVjdG9yPE5vZGUqPiogYXNzaWduZWROb2Rlc0ZvclNs
b3QoY29uc3QgSFRNTFNsb3RFbGVtZW50JiwgU2hhZG93Um9vdCYpOworICAgIGNvbnN0IFZlY3Rv
cjxXZWFrUHRyPE5vZGU+PiogYXNzaWduZWROb2Rlc0ZvclNsb3QoY29uc3QgSFRNTFNsb3RFbGVt
ZW50JiwgU2hhZG93Um9vdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGhvc3RDaGlsZEVsZW1lbnRE
aWRDaGFuZ2UoY29uc3QgRWxlbWVudCYsIFNoYWRvd1Jvb3QmKTsKIApAQCAtNzgsNyArNzgsNyBA
QCBwcml2YXRlOgogICAgICAgICBXZWFrUHRyPEhUTUxTbG90RWxlbWVudD4gb2xkRWxlbWVudDsK
ICAgICAgICAgdW5zaWduZWQgZWxlbWVudENvdW50IHsgMCB9OwogICAgICAgICBib29sIHNlZW5G
aXJzdEVsZW1lbnQgeyBmYWxzZSB9OwotICAgICAgICBWZWN0b3I8Tm9kZSo+IGFzc2lnbmVkTm9k
ZXM7CisgICAgICAgIFZlY3RvcjxXZWFrUHRyPE5vZGU+PiBhc3NpZ25lZE5vZGVzOwogICAgIH07
CiAKICAgICBib29sIGhhc0Fzc2lnbmVkTm9kZXMoU2hhZG93Um9vdCYsIFNsb3QmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNsb3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTbG90RWxlbWVudC5jcHAJKHJldmlzaW9uIDI2NTg4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNsb3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIEhUTUxTbG90RWxlbWVudDo6YXR0cmlidXRlQ2hhbmdl
ZChjCiAgICAgfQogfQogCi1jb25zdCBWZWN0b3I8Tm9kZSo+KiBIVE1MU2xvdEVsZW1lbnQ6OmFz
c2lnbmVkTm9kZXMoKSBjb25zdAorY29uc3QgVmVjdG9yPFdlYWtQdHI8Tm9kZT4+KiBIVE1MU2xv
dEVsZW1lbnQ6OmFzc2lnbmVkTm9kZXMoKSBjb25zdAogewogICAgIGF1dG8gc2hhZG93Um9vdCA9
IG1ha2VSZWZQdHIoY29udGFpbmluZ1NoYWRvd1Jvb3QoKSk7CiAgICAgaWYgKCFzaGFkb3dSb290
KQpAQCAtMTE5LDcgKzExOSwxMiBAQCBzdGF0aWMgdm9pZCBmbGF0dGVuQXNzaWduZWROb2RlcyhW
ZWN0b3I8CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBmb3IgKGNvbnN0
IFJlZlB0cjxOb2RlPiYgbm9kZSA6ICphc3NpZ25lZE5vZGVzKSB7CisgICAgZm9yIChjb25zdCBX
ZWFrUHRyPE5vZGU+JiBub2RlUHRyIDogKmFzc2lnbmVkTm9kZXMpIHsKKyAgICAgICAgYXV0byog
bm9kZSA9IG5vZGVQdHIuZ2V0KCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghbm9kZSkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KICAgICAgICAgaWYgKGlzPEhUTUxTbG90RWxlbWVudD4oKm5vZGUpICYmIGRvd25j
YXN0PEhUTUxTbG90RWxlbWVudD4oKm5vZGUpLmNvbnRhaW5pbmdTaGFkb3dSb290KCkpCiAgICAg
ICAgICAgICBmbGF0dGVuQXNzaWduZWROb2Rlcyhub2RlcywgZG93bmNhc3Q8SFRNTFNsb3RFbGVt
ZW50Pigqbm9kZSkpOwogICAgICAgICBlbHNlCkBAIC0xMzksNyArMTQ0LDE3IEBAIFZlY3RvcjxS
ZWY8Tm9kZT4+IEhUTUxTbG90RWxlbWVudDo6YXNzaWcKICAgICBhdXRvKiBhc3NpZ25lZE5vZGVz
ID0gdGhpcy0+YXNzaWduZWROb2RlcygpOwogICAgIGlmICghYXNzaWduZWROb2RlcykKICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gYXNzaWduZWROb2Rlcy0+bWFwKFtdIChOb2RlKiBu
b2RlKSB7IHJldHVybiBtYWtlUmVmKCpub2RlKTsgfSk7CisKKyAgICBWZWN0b3I8UmVmPE5vZGU+
PiBub2RlczsKKyAgICBub2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFzc2lnbmVkTm9kZXMt
PnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBub2RlUHRyIDogKmFzc2lnbmVkTm9kZXMpIHsKKyAg
ICAgICAgYXV0byogbm9kZSA9IG5vZGVQdHIuZ2V0KCk7CisgICAgICAgIGlmIChVTkxJS0VMWSgh
bm9kZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbm9kZXMudW5jaGVja2VkQXBw
ZW5kKCpub2RlKTsKKyAgICB9CisKKyAgICByZXR1cm4gbm9kZXM7CiB9CiAKIFZlY3RvcjxSZWY8
RWxlbWVudD4+IEhUTUxTbG90RWxlbWVudDo6YXNzaWduZWRFbGVtZW50cyhjb25zdCBBc3NpZ25l
ZE5vZGVzT3B0aW9ucyYgb3B0aW9ucykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFNsb3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U2xvdEVsZW1lbnQuaAkocmV2aXNpb24gMjY1ODgwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU2xvdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBI
VE1MU2xvdEVsZW1lbnQgZmluYWwgOiBwdWJsaWMgSFRNCiBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxIVE1MU2xvdEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQm
KTsKIAotICAgIGNvbnN0IFZlY3RvcjxOb2RlKj4qIGFzc2lnbmVkTm9kZXMoKSBjb25zdDsKKyAg
ICBjb25zdCBWZWN0b3I8V2Vha1B0cjxOb2RlPj4qIGFzc2lnbmVkTm9kZXMoKSBjb25zdDsKICAg
ICBzdHJ1Y3QgQXNzaWduZWROb2Rlc09wdGlvbnMgewogICAgICAgICBib29sIGZsYXR0ZW47CiAg
ICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDI2NTg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTgwLDcgKzE4MCw3IEBAIE5vZGUqIEZvY3VzTmF2aWdhdGlvblNj
b3BlOjpmaXJzdE5vZGVJblMKICAgICAgICAgYXV0byogYXNzaWduZU5vZGVzID0gbV9zbG90RWxl
bWVudC0+YXNzaWduZWROb2RlcygpOwogICAgICAgICBpZiAobV9zbG90S2luZCA9PSBTbG90S2lu
ZDo6QXNzaWduZWQpIHsKICAgICAgICAgICAgIEFTU0VSVChhc3NpZ25lTm9kZXMpOwotICAgICAg
ICAgICAgcmV0dXJuIGFzc2lnbmVOb2Rlcy0+Zmlyc3QoKTsKKyAgICAgICAgICAgIHJldHVybiBh
c3NpZ25lTm9kZXMtPmZpcnN0KCkuZ2V0KCk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKG1f
c2xvdEtpbmQgPT0gU2xvdEtpbmQ6OkZhbGxiYWNrKTsKICAgICAgICAgcmV0dXJuIG1fc2xvdEVs
ZW1lbnQtPmZpcnN0Q2hpbGQoKTsKQEAgLTE5NSw3ICsxOTUsNyBAQCBOb2RlKiBGb2N1c05hdmln
YXRpb25TY29wZTo6bGFzdE5vZGVJblNjCiAgICAgICAgIGF1dG8qIGFzc2lnbmVOb2RlcyA9IG1f
c2xvdEVsZW1lbnQtPmFzc2lnbmVkTm9kZXMoKTsKICAgICAgICAgaWYgKG1fc2xvdEtpbmQgPT0g
U2xvdEtpbmQ6OkFzc2lnbmVkKSB7CiAgICAgICAgICAgICBBU1NFUlQoYXNzaWduZU5vZGVzKTsK
LSAgICAgICAgICAgIHJldHVybiBhc3NpZ25lTm9kZXMtPmxhc3QoKTsKKyAgICAgICAgICAgIHJl
dHVybiBhc3NpZ25lTm9kZXMtPmxhc3QoKS5nZXQoKTsKICAgICAgICAgfQogICAgICAgICBBU1NF
UlQobV9zbG90S2luZCA9PSBTbG90S2luZDo6RmFsbGJhY2spOwogICAgICAgICByZXR1cm4gbV9z
bG90RWxlbWVudC0+bGFzdENoaWxkKCk7Cg==
</data>
<flag name="review"
          id="422612"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>