<?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>237988</bug_id>
          
          <creation_ts>2022-03-16 16:19:55 -0700</creation_ts>
          <short_desc>Stop returning NodeVector from functions</short_desc>
          <delta_ts>2022-03-18 14:16:57 -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>WebCore Misc.</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=238096</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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mifenton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1852044</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-16 16:19:55 -0700</bug_when>
    <thetext>Stop returning NodeVector from functions and use a out-parameter instead. While this doesn&apos;t look as modern, this is actually more efficient. This is because NodeVector has a fairly large inline buffer and is thus not that cheap to &quot;move&quot;.
This was causing functions like `ContainerNode::parserAppendChild(Node&amp;)` to spend unnecessary time under `VectorBuffer&lt;Ref&lt;Node, RawPtrTraits&lt;Node&gt;&gt;, 11, FastMalloc&gt;::swap(VectorBuffer&lt;Ref&lt;Node, RawPtrTraits&lt;Node&gt;&gt;, 11, FastMalloc&gt;&amp;, unsigned long, unsigned long)`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852047</commentid>
    <comment_count>1</comment_count>
      <attachid>454908</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-16 16:21:36 -0700</bug_when>
    <thetext>Created attachment 454908
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852049</commentid>
    <comment_count>2</comment_count>
      <attachid>454908</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-16 16:27:13 -0700</bug_when>
    <thetext>Comment on attachment 454908
Patch

This is definitely a measurable speedup? The return-value optimization doesn’t kick in?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852052</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-16 16:40:40 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 454908 [details]
&gt; Patch
&gt; 
&gt; This is definitely a measurable speedup? The return-value optimization
&gt; doesn’t kick in?

I am still waiting on A/B testing but I can clearly see the cost in traces when running Speedometer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852053</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-16 16:41:37 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #3)
&gt; (In reply to Darin Adler from comment #2)
&gt; &gt; Comment on attachment 454908 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; This is definitely a measurable speedup? The return-value optimization
&gt; &gt; doesn’t kick in?
&gt; 
&gt; I am still waiting on A/B testing but I can clearly see the cost in traces
&gt; when running Speedometer.

Sample Count, Samples %, Normalized CPU %, Symbol
41, 0.0%, 0.0%, WTF::VectorBuffer&lt;WTF::Ref&lt;WebCore::Node, WTF::RawPtrTraits&lt;WebCore::Node&gt; &gt;, 11ul, WTF::FastMalloc&gt;::swap(WTF::VectorBuffer&lt;WTF::Ref&lt;WebCore::Node, WTF::RawPtrTraits&lt;WebCore::Node&gt; &gt;, 11ul, WTF::FastMalloc&gt;&amp;, unsigned long, unsigned long) (in WebCore)
33, 0.0%, 0.0%,     WebCore::ContainerNode::parserAppendChild(WebCore::Node&amp;) (in WebCore)
4, 0.0%, 0.0%,     WebCore::ContainerNode::appendChildWithoutPreInsertionValidityCheck(WebCore::Node&amp;) (in WebCore)
1, 0.0%, 0.0%,     WebCore::executeTask(WebCore::HTMLConstructionSiteTask&amp;) (in WebCore)
1, 0.0%, 0.0%,     WebCore::Node::insertBefore(WebCore::Node&amp;, WebCore::Node*) (in WebCore)
1, 0.0%, 0.0%,     WebCore::ContainerNode::appendChild(WebCore::Node&amp;) (in WebCore)
1, 0.0%, 0.0%,     WebCore::ContainerNode::replaceAll(WebCore::Node*) (in WebCore)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852054</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-16 16:42:39 -0700</bug_when>
    <thetext>I’m really surprised that this involves a call to swap. Maybe we can fix that some other way. The return-value optimization should not rely on move semantics; it predates move semantics and maybe the another solution is to carefully write these functions so they get return-value optimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852055</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-16 16:44:50 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; I’m really surprised that this involves a call to swap. Maybe we can fix
&gt; that some other way. The return-value optimization should not rely on move
&gt; semantics; it predates move semantics and maybe the another solution is to
&gt; carefully write these functions so they get return-value optimization.

I believe it involves swap() because that&apos;s have the Vector move constructor is implemented:
```
template&lt;typename T, size_t inlineCapacity, typename OverflowHandler, size_t minCapacity, typename Malloc&gt;
inline Vector&lt;T, inlineCapacity, OverflowHandler, minCapacity, Malloc&gt;::Vector(Vector&lt;T, inlineCapacity, OverflowHandler, minCapacity, Malloc&gt;&amp;&amp; other)
{
    swap(other);
}
```

I can find dig deeper though. It is true that one would hope to get RVO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852056</commentid>
    <comment_count>7</comment_count>
      <attachid>454908</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-16 16:44:55 -0700</bug_when>
    <thetext>Comment on attachment 454908
Patch

You’re welcome to fix it this way. I won’t stand in the way. But return-value optimization should have prevented this swap code from running; I want to understand why it didn’t kick in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852059</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-16 16:46:59 -0700</bug_when>
    <thetext>Separately, we should check and see if the move constructor can be written more efficiently than swap; seems likely that it could be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852060</commentid>
    <comment_count>9</comment_count>
      <attachid>454908</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-16 16:48:14 -0700</bug_when>
    <thetext>Comment on attachment 454908
Patch

Hmm, in some cases at least, it seems we call swap() explicitly:
e.g. `nodesForInsertion.swap(removedChildNodes);` in `ContainerNode::removeSelfOrChildNodesForInsertion()`.

Maybe I am wrong about the cause for the swap(), I&apos;ll double check the other instances.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852064</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-16 16:50:29 -0700</bug_when>
    <thetext>Please also keep in mind that those functions likely use swap because the code predates move semantics; they could move instead if that helped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852096</commentid>
    <comment_count>11</comment_count>
      <attachid>454922</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-16 17:51:49 -0700</bug_when>
    <thetext>Created attachment 454922
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852101</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-16 18:26:11 -0700</bug_when>
    <thetext>With this patch (using an out-parameter for NodeVector), I have verified in traces that the CPU time spent in Vector::swap() is completely gone under this Node functions.

However, using returning a NodeVector (avoid avoiding the explicit swap in ContainerNode::removeSelfOrChildNodesForInsertion(), I still see the CPU time under Vector::swap:
Sample Count, Samples %, Normalized CPU %, Symbol
16, 0.0%, 0.0%, WTF::VectorBuffer&lt;WTF::Ref&lt;WebCore::Node, WTF::RawPtrTraits&lt;WebCore::Node&gt; &gt;, 11ul, WTF::FastMalloc&gt;::swap(WTF::VectorBuffer&lt;WTF::Ref&lt;WebCore::Node, WTF::RawPtrTraits&lt;WebCore::Node&gt; &gt;, 11ul, WTF::FastMalloc&gt;&amp;, unsigned long, unsigned long) (in WebCore)
10, 0.0%, 0.0%,     WebCore::ContainerNode::parserAppendChild(WebCore::Node&amp;) (in WebCore)
5, 0.0%, 0.0%,     WebCore::ContainerNode::appendChildWithoutPreInsertionValidityCheck(WebCore::Node&amp;) (in WebCore)
1, 0.0%, 0.0%,     WebCore::ContainerNode::removeSelfOrChildNodesForInsertion(WebCore::Node&amp;, std::__1::optional&lt;WebCore::Exception&gt;&amp;) (in WebCore)

Seems to confirm my suspicion that returning a NodeVector does call the Vector&apos;s move constructor (which is slow in the NodeVector case due to the large inline buffer).
I haven&apos;t been able to get rid of that CPU time while returning NodeVector in functions yet.

Note that many of the functions were already using an out-parameter for NodeVector, only the couple that I fixed were using a return value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852112</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-16 19:49:30 -0700</bug_when>
    <thetext>From some quick googling it seems that copy elision is only guaranteed in C++17 for prvalues. Therefore, there is no guarantee for named variables.

In those functions, we are definitely returning named variables (and sometimes from multiple code paths, not a single return statement). In such cases, NRVO is apparently not guaranteed, even in C++17. There might be a way to refactor the code to get NRVO but since there is no guarantee, it sounds like it would be fragile.

Given this, I think using an out-parameter is probably the way to go?
It definitely gets rid of the move constructor / Vector::swap() according to the profiler (still waiting on A/B testing to see if the win is actually measurable on Speedometer).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852273</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-17 07:28:03 -0700</bug_when>
    <thetext>OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852275</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-17 07:28:40 -0700</bug_when>
    <thetext>Still think Vector’s move constructor can do better than swap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852278</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-17 07:36:18 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #15)
&gt; Still think Vector’s move constructor can do better than swap.

Yes, I believe so as well. However, I think this can be addressed separately?
Even if the Vector&apos;s move constructor could be better than a swap, it would still be costly for vectors with an inline buffer, compared to vectors that use an out-of-line buffer (that we can simply adopt).

The A/B bots have not even started processing this patch :/ From local testing I see a 0.5-0.6% progression on Speedometer 2 (iMac Pro / Intel). I also see from the profiler that the CPU time under NodeVector::swap() is completely gone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852292</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-17 08:01:27 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #16)
&gt; (In reply to Darin Adler from comment #15)
&gt; &gt; Still think Vector’s move constructor can do better than swap.
&gt; 
&gt; Yes, I believe so as well. However, I think this can be addressed separately?

Yes.

&gt; Even if the Vector&apos;s move constructor could be better than a swap, it would
&gt; still be costly for vectors with an inline buffer, compared to vectors that
&gt; use an out-of-line buffer (that we can simply adopt).

Agreed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852293</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-17 08:02:13 -0700</bug_when>
    <thetext>Sorry, thought I did review+ yesterday</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852337</commentid>
    <comment_count>19</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-17 09:55:25 -0700</bug_when>
    <thetext>Committed r291416 (248543@main): &lt;https://commits.webkit.org/248543@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 454922.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852338</commentid>
    <comment_count>20</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-17 09:56:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/90437212&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454908</attachid>
            <date>2022-03-16 16:21:36 -0700</date>
            <delta_ts>2022-03-16 17:51:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237988-20220316162135.patch</filename>
            <type>text/plain</type>
            <size>13890</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMzcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2NjYTBhYjNkNzk1ZTlk
MzA2ZjVmOWRhZDFlZmNlNTQ0MTc0OGEzOS4uNmI3NjE2ZDU1ZTRmMmQ5OWEwYjkyZTM1NGNhMDRm
ZGRiYTFjZjU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIyLTAzLTE2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCByZXR1cm5pbmcgTm9k
ZVZlY3RvciBmcm9tIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM3OTg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU3RvcCByZXR1cm5pbmcgTm9kZVZlY3RvciBmcm9tIGZ1bmN0aW9ucyBh
bmQgdXNlIGEgb3V0LXBhcmFtZXRlciBpbnN0ZWFkLiBXaGlsZSB0aGlzIGRvZXNuJ3QgbG9vawor
ICAgICAgICBhcyBtb2Rlcm4sIHRoaXMgaXMgYWN0dWFsbHkgbW9yZSBlZmZpY2llbnQuIFRoaXMg
aXMgYmVjYXVzZSBOb2RlVmVjdG9yIGhhcyBhIGZhaXJseSBsYXJnZSBpbmxpbmUKKyAgICAgICAg
YnVmZmVyIGFuZCBpcyB0aHVzIG5vdCB0aGF0IGNoZWFwIHRvICJtb3ZlIi4KKworICAgICAgICBU
aGlzIHdhcyBjYXVzaW5nIGZ1bmN0aW9ucyBsaWtlIGBDb250YWluZXJOb2RlOjpwYXJzZXJBcHBl
bmRDaGlsZChOb2RlJilgIHRvIHNwZW5kIHVubmVjZXNzYXJ5CisgICAgICAgIHRpbWUgdW5kZXI6
CisgICAgICAgIGBWZWN0b3JCdWZmZXI8UmVmPE5vZGUsIFJhd1B0clRyYWl0czxOb2RlPj4sIDEx
LCBGYXN0TWFsbG9jPjo6c3dhcChWZWN0b3JCdWZmZXI8UmVmPE5vZGUsIFJhd1B0clRyYWl0czxO
b2RlPj4sIDExLCBGYXN0TWFsbG9jPiYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpYAor
CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGFpbmVyTm9kZTo6cmVtb3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OmV4ZWN1dGVOb2RlSW5zZXJ0aW9uV2l0aFNjcmlwdEFzc2VydGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZW1vdmVTZWxmT3JDaGlsZE5vZGVzRm9y
SW5zZXJ0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnRha2VBbGxDaGls
ZHJlbkZyb20pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cmVwbGFjZUFsbCk6
CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZW1vdmVDaGlsZHJlbik6CisgICAg
ICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hpbGRyZW4pOgorICAgICAgICAq
IGRvbS9Db250YWluZXJOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0Q2hpbGROb2Rl
cyk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Om5vdGlmeUNoaWxkTm9kZUluc2VydGVkKToKKyAgICAgICAgKiBkb20vQ29udGFp
bmVyTm9kZUFsZ29yaXRobXMuaDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjphZGRTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6Omluc2VydEFkamFjZW50SFRNTCk6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxl
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERv
d25JbmxpbmVTdHlsZUFyb3VuZE5vZGUpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZU5vZGVX
aXRoU3BhbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3dhcEluTm9kZVByZXNlcnZp
bmdBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4pOgorCiAyMDIyLTAzLTE2ICBCYXN1a2UgU3V6dWtpICA8
YmFzdWtlLnN1enVraUBzb255LmNvbT4KIAogICAgICAgICBbUGxheVN0YXRpb25dIEZpeCBidWls
ZCBicmVhayBhZnRlciByMjkxMzQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5k
ZXggZWJiYjA2NmVmYzQyMDExNDQ3MGUwYTJlZGJkMjlkODFiNTcwM2M3MC4uZDViYWExNDdmM2Yw
OGRhYzQ1ODIyNjFhOTcxYjU3MGQwMDAzMzhmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0NvbnRhaW5lck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJO
b2RlLmNwcApAQCAtNzksOSArNzksMTAgQEAgdW5zaWduZWQgU2NyaXB0RGlzYWxsb3dlZFNjb3Bl
OjpzX2NvdW50ID0gMDsKIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6RXZlbnRBbGxvd2VkU2NvcGUq
IFNjcmlwdERpc2FsbG93ZWRTY29wZTo6RXZlbnRBbGxvd2VkU2NvcGU6OnNfY3VycmVudFNjb3Bl
ID0gbnVsbHB0cjsKICNlbmRpZgogCi1BTFdBWVNfSU5MSU5FIE5vZGVWZWN0b3IgQ29udGFpbmVy
Tm9kZTo6cmVtb3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9uKENoaWxkQ2hhbmdlOjpT
b3VyY2Ugc291cmNlLCBEZWZlckNoaWxkcmVuQ2hhbmdlZCBkZWZlckNoaWxkcmVuQ2hhbmdlZCkK
K0FMV0FZU19JTkxJTkUgdm9pZCBDb250YWluZXJOb2RlOjpyZW1vdmVBbGxDaGlsZHJlbldpdGhT
Y3JpcHRBc3NlcnRpb24oQ2hpbGRDaGFuZ2U6OlNvdXJjZSBzb3VyY2UsIE5vZGVWZWN0b3ImIGNo
aWxkcmVuLCBEZWZlckNoaWxkcmVuQ2hhbmdlZCBkZWZlckNoaWxkcmVuQ2hhbmdlZCkKIHsKLSAg
ICBhdXRvIGNoaWxkcmVuID0gY29sbGVjdENoaWxkTm9kZXMoKnRoaXMpOworICAgIEFTU0VSVChj
aGlsZHJlbi5pc0VtcHR5KCkpOworICAgIGNvbGxlY3RDaGlsZE5vZGVzKCp0aGlzLCBjaGlsZHJl
bik7CiAKICAgICBpZiAoVU5MSUtFTFkoaXNEb2N1bWVudEZyYWdtZW50Rm9ySW5uZXJPdXRlckhU
TUwoKSkpIHsKICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2Ny
aXB0RGlzYWxsb3dlZFNjb3BlOwpAQCAtOTAsNyArOTEsNyBAQCBBTFdBWVNfSU5MSU5FIE5vZGVW
ZWN0b3IgQ29udGFpbmVyTm9kZTo6cmVtb3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9u
KENoaQogICAgICAgICB3aGlsZSAoUmVmUHRyPE5vZGU+IGNoaWxkID0gbV9maXJzdENoaWxkKQog
ICAgICAgICAgICAgcmVtb3ZlQmV0d2VlbihudWxscHRyLCBjaGlsZC0+bmV4dFNpYmxpbmcoKSwg
KmNoaWxkKTsKICAgICAgICAgZG9jdW1lbnQoKS5pbmNET01UcmVlVmVyc2lvbigpOwotICAgICAg
ICByZXR1cm4gY2hpbGRyZW47CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoc291
cmNlID09IENoaWxkQ2hhbmdlOjpTb3VyY2U6OkFQSSkgewpAQCAtMTM2LDggKzEzNyw2IEBAIEFM
V0FZU19JTkxJTkUgTm9kZVZlY3RvciBDb250YWluZXJOb2RlOjpyZW1vdmVBbGxDaGlsZHJlbldp
dGhTY3JpcHRBc3NlcnRpb24oQ2hpCiAKICAgICBpZiAoZGVmZXJDaGlsZHJlbkNoYW5nZWQgPT0g
RGVmZXJDaGlsZHJlbkNoYW5nZWQ6Ok5vKQogICAgICAgICBjaGlsZHJlbkNoYW5nZWQoY2hpbGRD
aGFuZ2UpOwotCi0gICAgcmV0dXJuIGNoaWxkcmVuOwogfQogCiBzdGF0aWMgQ29udGFpbmVyTm9k
ZTo6Q2hpbGRDaGFuZ2UgbWFrZUNoaWxkQ2hhbmdlRm9yUmVtb3ZhbChOb2RlJiBjaGlsZFRvUmVt
b3ZlLCBDb250YWluZXJOb2RlOjpDaGlsZENoYW5nZTo6U291cmNlIHNvdXJjZSkKQEAgLTI2Miw3
ICsyNjEsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGV4ZWN1dGVOb2RlSW5zZXJ0aW9u
V2l0aFNjcmlwdEFzc2VydGlvbihDb250YWluZXJOb2RlJgogCiAgICAgICAgIGRvTm9kZUluc2Vy
dGlvbigpOwogICAgICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlKGNvbnRhaW5lck5vZGUpLmNo
aWxkQWRkZWQoY2hpbGQpOwotICAgICAgICBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0
cyA9IG5vdGlmeUNoaWxkTm9kZUluc2VydGVkKGNvbnRhaW5lck5vZGUsIGNoaWxkKTsKKyAgICAg
ICAgbm90aWZ5Q2hpbGROb2RlSW5zZXJ0ZWQoY29udGFpbmVyTm9kZSwgY2hpbGQsIHBvc3RJbnNl
cnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogTW92ZSBj
aGlsZHJlbkNoYW5nZWQgaW50byBTY3JpcHREaXNhbGxvd2VkU2NvcGUgYmxvY2suCkBAIC0yODIs
NyArMjgxLDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ29udGFpbmVyTm9kZTo6cmVtb3ZlU2VsZk9y
Q2hpbGROb2Rlc0Zvckluc2VydGlvbihOb2RlJiBjaGlsZCwKICAgICAgICAgaWYgKCFmcmFnbWVu
dC0+aGFzQ2hpbGROb2RlcygpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBh
dXRvIHJlbW92ZWRDaGlsZE5vZGVzID0gZnJhZ21lbnQtPnJlbW92ZUFsbENoaWxkcmVuV2l0aFNj
cmlwdEFzc2VydGlvbihDb250YWluZXJOb2RlOjpDaGlsZENoYW5nZTo6U291cmNlOjpBUEkpOwor
ICAgICAgICBOb2RlVmVjdG9yIHJlbW92ZWRDaGlsZE5vZGVzOworICAgICAgICBmcmFnbWVudC0+
cmVtb3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9uKENvbnRhaW5lck5vZGU6OkNoaWxk
Q2hhbmdlOjpTb3VyY2U6OkFQSSwgcmVtb3ZlZENoaWxkTm9kZXMpOwogICAgICAgICBub2Rlc0Zv
ckluc2VydGlvbi5zd2FwKHJlbW92ZWRDaGlsZE5vZGVzKTsKIAogICAgICAgICBmcmFnbWVudC0+
cmVidWlsZFNWR0V4dGVuc2lvbnNFbGVtZW50c0lmTmVjZXNzYXJ5KCk7CkBAIC0zMjgsNyArMzI4
LDggQEAgdm9pZCBDb250YWluZXJOb2RlOjp0YWtlQWxsQ2hpbGRyZW5Gcm9tKENvbnRhaW5lck5v
ZGUqIG9sZFBhcmVudCkKIHsKICAgICBBU1NFUlQob2xkUGFyZW50KTsKIAotICAgIGF1dG8gY2hp
bGRyZW4gPSBvbGRQYXJlbnQtPnJlbW92ZUFsbENoaWxkcmVuV2l0aFNjcmlwdEFzc2VydGlvbihD
aGlsZENoYW5nZTo6U291cmNlOjpQYXJzZXIpOworICAgIE5vZGVWZWN0b3IgY2hpbGRyZW47Cisg
ICAgb2xkUGFyZW50LT5yZW1vdmVBbGxDaGlsZHJlbldpdGhTY3JpcHRBc3NlcnRpb24oQ2hpbGRD
aGFuZ2U6OlNvdXJjZTo6UGFyc2VyLCBjaGlsZHJlbik7CiAKICAgICAvLyBGSVhNRTogYXNzZXJ0
IHRoYXQgd2UgZG9uJ3QgZGlzcGF0Y2ggZXZlbnRzIGhlcmUgc2luY2UgdGhpcyBjb250YWluZXIg
bm9kZSBpcyBzdGlsbCBkaXNjb25uZWN0ZWQuCiAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxk
cmVuKSB7CkBAIC03MTAsNyArNzExLDggQEAgdm9pZCBDb250YWluZXJOb2RlOjpyZXBsYWNlQWxs
KE5vZGUqIG5vZGUpCiAKICAgICBSZWY8Q29udGFpbmVyTm9kZT4gcHJvdGVjdGVkVGhpcygqdGhp
cyk7CiAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbigqdGhpcyk7Ci0gICAgcmVt
b3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9uKENoaWxkQ2hhbmdlOjpTb3VyY2U6OkFQ
SSwgRGVmZXJDaGlsZHJlbkNoYW5nZWQ6Olllcyk7CisgICAgTm9kZVZlY3RvciByZW1vdmVkQ2hp
bGRyZW47CisgICAgcmVtb3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9uKENoaWxkQ2hh
bmdlOjpTb3VyY2U6OkFQSSwgcmVtb3ZlZENoaWxkcmVuLCBEZWZlckNoaWxkcmVuQ2hhbmdlZDo6
WWVzKTsKIAogICAgIGV4ZWN1dGVOb2RlSW5zZXJ0aW9uV2l0aFNjcmlwdEFzc2VydGlvbigqdGhp
cywgKm5vZGUsIG51bGxwdHIsIENoaWxkQ2hhbmdlOjpTb3VyY2U6OkFQSSwgUmVwbGFjZWRBbGxD
aGlsZHJlbjo6WWVzLCBbJl0gewogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxJbnNlcnRET01Ob2RlKGRvY3VtZW50KCksICp0aGlzKTsKQEAgLTc0Miw3ICs3NDQsOCBAQCB2
b2lkIENvbnRhaW5lck5vZGU6OnJlbW92ZUNoaWxkcmVuKCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgUmVmPENvbnRhaW5lck5vZGU+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwotICAgIHJlbW92ZUFs
bENoaWxkcmVuV2l0aFNjcmlwdEFzc2VydGlvbihDaGlsZENoYW5nZTo6U291cmNlOjpBUEkpOwor
ICAgIE5vZGVWZWN0b3IgcmVtb3ZlZENoaWxkcmVuOworICAgIHJlbW92ZUFsbENoaWxkcmVuV2l0
aFNjcmlwdEFzc2VydGlvbihDaGlsZENoYW5nZTo6U291cmNlOjpBUEksIHJlbW92ZWRDaGlsZHJl
bik7CiAKICAgICByZWJ1aWxkU1ZHRXh0ZW5zaW9uc0VsZW1lbnRzSWZOZWNlc3NhcnkoKTsKICAg
ICBkaXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KCk7CkBAIC0xMDI2LDcgKzEwMjksOCBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hpbGRyZW4oRml4ZWRWZWN0
b3I8Tm9kZU9yU3RyaW5nPiYmIHZlYwogICAgIC8vIHN0ZXAgMwogICAgIFJlZiBwcm90ZWN0ZWRU
aGlzIHsgKnRoaXMgfTsKICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKCp0aGlz
KTsKLSAgICByZW1vdmVBbGxDaGlsZHJlbldpdGhTY3JpcHRBc3NlcnRpb24oQ2hpbGRDaGFuZ2U6
OlNvdXJjZTo6QVBJLCBEZWZlckNoaWxkcmVuQ2hhbmdlZDo6Tm8pOworICAgIE5vZGVWZWN0b3Ig
cmVtb3ZlZENoaWxkcmVuOworICAgIHJlbW92ZUFsbENoaWxkcmVuV2l0aFNjcmlwdEFzc2VydGlv
bihDaGlsZENoYW5nZTo6U291cmNlOjpBUEksIHJlbW92ZWRDaGlsZHJlbiwgRGVmZXJDaGlsZHJl
bkNoYW5nZWQ6Ok5vKTsKIAogICAgIGlmIChub2RlKSB7CiAgICAgICAgIGlmIChhdXRvIGFwcGVu
ZFJlc3VsdCA9IGFwcGVuZENoaWxkV2l0aG91dFByZUluc2VydGlvblZhbGlkaXR5Q2hlY2soKm5v
ZGUpOyBhcHBlbmRSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGUuaAppbmRleCAxY2NjNjhmNDQ0ZDkxM2FmY2JhODdkM2I0ZmYyMTIzYTcwZGY3NGJmLi4yODQ3
N2VmMDJjNzgwYmIzMTQ2OGQzMzUwMDRkMGE5ODI2ZDAzYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmgKQEAgLTE3MCw3ICsxNzAsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAg
IHZvaWQgZXhlY3V0ZVByZXBhcmVkQ2hpbGRyZW5SZW1vdmFsKCk7CiAgICAgZW51bSBjbGFzcyBE
ZWZlckNoaWxkcmVuQ2hhbmdlZCB7IFllcywgTm8gfTsKLSAgICBOb2RlVmVjdG9yIHJlbW92ZUFs
bENoaWxkcmVuV2l0aFNjcmlwdEFzc2VydGlvbihDaGlsZENoYW5nZTo6U291cmNlLCBEZWZlckNo
aWxkcmVuQ2hhbmdlZCA9IERlZmVyQ2hpbGRyZW5DaGFuZ2VkOjpObyk7CisgICAgdm9pZCByZW1v
dmVBbGxDaGlsZHJlbldpdGhTY3JpcHRBc3NlcnRpb24oQ2hpbGRDaGFuZ2U6OlNvdXJjZSwgTm9k
ZVZlY3RvciYgY2hpbGRyZW4sIERlZmVyQ2hpbGRyZW5DaGFuZ2VkID0gRGVmZXJDaGlsZHJlbkNo
YW5nZWQ6Ok5vKTsKICAgICBib29sIHJlbW92ZU5vZGVXaXRoU2NyaXB0QXNzZXJ0aW9uKE5vZGUm
LCBDaGlsZENoYW5nZTo6U291cmNlKTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiByZW1vdmVTZWxm
T3JDaGlsZE5vZGVzRm9ySW5zZXJ0aW9uKE5vZGUmLCBOb2RlVmVjdG9yJik7CiAKQEAgLTIyMywx
MiArMjIzLDEwIEBAIGlubGluZSBOb2RlJiBOb2RlOjpyb290Tm9kZSgpIGNvbnN0CiAgICAgcmV0
dXJuIHRyYXZlcnNlVG9Sb290Tm9kZSgpOwogfQogCi1pbmxpbmUgTm9kZVZlY3RvciBjb2xsZWN0
Q2hpbGROb2RlcyhOb2RlJiBub2RlKQoraW5saW5lIHZvaWQgY29sbGVjdENoaWxkTm9kZXMoTm9k
ZSYgbm9kZSwgTm9kZVZlY3RvciYgY2hpbGRyZW4pCiB7Ci0gICAgTm9kZVZlY3RvciBjaGlsZHJl
bjsKICAgICBmb3IgKE5vZGUqIGNoaWxkID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKmNoaWxk
KTsKLSAgICByZXR1cm4gY2hpbGRyZW47CiB9CiAKIGNsYXNzIENoaWxkTm9kZXNMYXp5U25hcHNo
b3QgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0
aG1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAK
aW5kZXggMzY5OTk3ZTBiMGFmNWIzYzc5NDQxOGE0Zjk4MzVkMjViYjZhNmU1MS4uNjNiODE4NmY2
N2VmMDU0ZTRiMzJkOTlmYmQ3NWExODI4MTdiMzM5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCkBAIC04Niw3ICs4Niw5IEBAIHN0YXRpYyB2
b2lkIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5z
ZXJ0ZWRUcmVlLCBOb2RlCiAgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKHBhcmVu
dE9mSW5zZXJ0ZWRUcmVlLCAqcm9vdCwgVHJlZVNjb3BlQ2hhbmdlOjpEaWROb3RDaGFuZ2UsIHBv
c3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKIH0KIAotTm9kZVZlY3RvciBub3RpZnlD
aGlsZE5vZGVJbnNlcnRlZChDb250YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSwgTm9k
ZSYgbm9kZSkKKy8vIFdlIGludGVudGlvbmFsbHkgdXNlIGFuIG91dC1wYXJhbWV0ZXIgZm9yIHBv
c3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSB2
ZWN0b3IuIFRoaXMgaXMgYmVjYXVzZQorLy8gTm9kZVZlY3RvciBoYXMgYSBsYXJnZSBpbmxpbmUg
YnVmZmVyIGFuZCBpcyB0aHVzIG5vdCBjaGVhcCB0byBtb3ZlLgordm9pZCBub3RpZnlDaGlsZE5v
ZGVJbnNlcnRlZChDb250YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSwgTm9kZSYgbm9k
ZSwgTm9kZVZlY3RvciYgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpCiB7CiAgICAg
QVNTRVJUKFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFkOjpoYXNEaXNhbGxvd2Vk
U2NvcGUoKSk7CiAKQEAgLTk1LDE2ICs5NywxMiBAQCBOb2RlVmVjdG9yIG5vdGlmeUNoaWxkTm9k
ZUluc2VydGVkKENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCBOb2RlJiBubwog
ICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdERvY3VtZW50KG5vZGUuZG9jdW1lbnQoKSk7CiAgICAg
UmVmPE5vZGU+IHByb3RlY3ROb2RlKG5vZGUpOwogCi0gICAgTm9kZVZlY3RvciBwb3N0SW5zZXJ0
aW9uTm90aWZpY2F0aW9uVGFyZ2V0czsKLQogICAgIC8vIFRyZWUgc2NvcGUgaGFzIGNoYW5nZWQg
aWYgdGhlIGNvbnRhaW5lciBub2RlIGludG8gd2hpY2ggIm5vZGUiIGlzIGluc2VydGVkIGlzIGlu
IGEgZG9jdW1lbnQgb3IgYSBzaGFkb3cgcm9vdC4KICAgICBhdXRvIHRyZWVTY29wZUNoYW5nZSA9
IHBhcmVudE9mSW5zZXJ0ZWRUcmVlLmlzSW5UcmVlU2NvcGUoKSA/IFRyZWVTY29wZUNoYW5nZTo6
Q2hhbmdlZCA6IFRyZWVTY29wZUNoYW5nZTo6RGlkTm90Q2hhbmdlOwogICAgIGlmIChwYXJlbnRP
Zkluc2VydGVkVHJlZS5pc0Nvbm5lY3RlZCgpKQogICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQocGFyZW50T2ZJbnNlcnRlZFRyZWUsIG5vZGUsIHRyZWVTY29wZUNoYW5nZSwg
cG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOwogICAgIGVsc2UKICAgICAgICAgbm90
aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUocGFyZW50T2ZJbnNlcnRlZFRyZWUsIG5vZGUsIHRyZWVT
Y29wZUNoYW5nZSwgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOwotCi0gICAgcmV0
dXJuIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzOwogfQogCiBpbmxpbmUgUmVtb3Zl
ZFN1YnRyZWVPYnNlcnZhYmlsaXR5IG9ic2VydmFiaWxpdHlPZlJlbW92ZWROb2RlKE5vZGUmIG5v
ZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRo
bXMuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5oCmluZGV4
IGY4MmQ2ZjUxMGE4YTg5NjA4MWZiNzQ0NTc2ZjZjMzdmY2JlNDU5MTUuLmFkMjU5NTFiODM2MGQ3
ZGNhZWEyOWU1OTdhODVjNzczZWJkYTRmNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlQWxnb3JpdGhtcy5oCkBAIC02MSw3ICs2MSw4IEBAIHB1YmxpYzoKIH07CiAjZW5k
aWYgLy8gbm90IEFTU0VSVF9FTkFCTEVECiAKLU5vZGVWZWN0b3Igbm90aWZ5Q2hpbGROb2RlSW5z
ZXJ0ZWQoQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUsIE5vZGUmKTsKK3ZvaWQg
bm90aWZ5Q2hpbGROb2RlSW5zZXJ0ZWQoQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRy
ZWUsIE5vZGUmLCBOb2RlVmVjdG9yJiBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7
CisKIGVudW0gY2xhc3MgUmVtb3ZlZFN1YnRyZWVPYnNlcnZhYmlsaXR5IHsKICAgICBOb3RPYnNl
cnZhYmxlLAogICAgIE1heWJlT2JzZXJ2YWJsZUJ5UmVmUHRyLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CmluZGV4IDU0ZGNjN2EzYTQ1NzJmOGRhZWM4MjQwZDUyZjBmN2Y2NDg1YmU3MTMuLjZkZjRkNzcz
YTliM2Y5YmZkYjY3Y2I5NDMxOWIzMWEyNDNiNzMxM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
QEAgLTI0NTgsMTEgKzI0NTgsOSBAQCB2b2lkIEVsZW1lbnQ6OmFkZFNoYWRvd1Jvb3QoUmVmPFNo
YWRvd1Jvb3Q+JiYgbmV3U2hhZG93Um9vdCkKICAgICAgICAgc2hhZG93Um9vdC5zZXRIb3N0KCp0
aGlzKTsKICAgICAgICAgc2hhZG93Um9vdC5zZXRQYXJlbnRUcmVlU2NvcGUodHJlZVNjb3BlKCkp
OwogCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAgICAgQVNTRVJUKG5vdGlmeUNoaWxkTm9kZUlu
c2VydGVkKCp0aGlzLCBzaGFkb3dSb290KS5pc0VtcHR5KCkpOwotI2Vsc2UKLSAgICAgICAgbm90
aWZ5Q2hpbGROb2RlSW5zZXJ0ZWQoKnRoaXMsIHNoYWRvd1Jvb3QpOwotI2VuZGlmCisgICAgICAg
IE5vZGVWZWN0b3IgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHM7CisgICAgICAgIG5v
dGlmeUNoaWxkTm9kZUluc2VydGVkKCp0aGlzLCBzaGFkb3dSb290LCBwb3N0SW5zZXJ0aW9uTm90
aWZpY2F0aW9uVGFyZ2V0cyk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocG9zdEluc2VydGlvbk5v
dGlmaWNhdGlvblRhcmdldHMsIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzLmlzRW1w
dHkoKSk7CiAKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQdXNoU2hhZG93
Um9vdCgqdGhpcywgc2hhZG93Um9vdCk7CiAKQEAgLTQ2NDAsNyArNDYzOCw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IEVsZW1lbnQ6Omluc2VydEFkamFjZW50SFRNTChjb25zdCBTdHJpbmcmIHdoZXJl
LCBjb25zdCBTdHJpbmcmCiAgICAgaWYgKFVOTElLRUxZKGFkZGVkTm9kZXMpKSB7CiAgICAgICAg
IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBpbnNlcnRBZGphY2VudCwgYXMgb3RoZXJ3aXNlIHRo
ZSBjaGlsZHJlbiBvZiBmcmFnbWVudCB3aWxsIGJlIG1vdmVkCiAgICAgICAgIC8vIHRvIHRoZWly
IG5ldyBwYXJlbnQgYW5kIHdpbGwgYmUgaGFyZGVyIHRvIGtlZXAgdHJhY2sgb2YuCi0gICAgICAg
ICphZGRlZE5vZGVzID0gY29sbGVjdENoaWxkTm9kZXMoZnJhZ21lbnQucmV0dXJuVmFsdWUoKSk7
CisgICAgICAgIGNvbGxlY3RDaGlsZE5vZGVzKGZyYWdtZW50LnJldHVyblZhbHVlKCksICphZGRl
ZE5vZGVzKTsKICAgICB9CiAKICAgICAvLyBTdGVwIDQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4IGQwNmM5M2Q2ZDhhOTVkNGMwMjhjNWNlNzI1
NjYyMjhkZTRkMDRiNjIuLmJmYTI0ZGIwNmJmYmUzZmY1ZGU5YTdlYjY5OWVmYWRjNDU0Y2ZjYzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC0x
MDQ2LDcgKzEwNDYsOCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0
eWxlQXJvdW5kTm9kZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBOb2RlKgogICAgIC8vIEVhY2ggY2hp
bGQgb2YgdGhlIHJlbW92ZWQgZWxlbWVudCwgZXhjbHVzaW5nIGFuY2VzdG9ycyBvZiB0YXJnZXRO
b2RlLCBpcyB0aGVuIHdyYXBwZWQgYnkgY2xvbmVzIG9mIGVsZW1lbnRzIGluIGVsZW1lbnRzVG9Q
dXNoRG93bi4KICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBlbGVtZW50c1RvUHVzaERvd247CiAg
ICAgd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudCAhPSB0YXJnZXROb2RlICYmIGN1cnJlbnQtPmNv
bnRhaW5zKHRhcmdldE5vZGUpKSB7Ci0gICAgICAgIGF1dG8gY3VycmVudENoaWxkcmVuID0gY29s
bGVjdENoaWxkTm9kZXMoKmN1cnJlbnQpOworICAgICAgICBOb2RlVmVjdG9yIGN1cnJlbnRDaGls
ZHJlbjsKKyAgICAgICAgY29sbGVjdENoaWxkTm9kZXMoKmN1cnJlbnQsIGN1cnJlbnRDaGlsZHJl
bik7CiAKICAgICAgICAgUmVmUHRyPFN0eWxlZEVsZW1lbnQ+IHN0eWxlZEVsZW1lbnQ7CiAgICAg
ICAgIGlmIChpczxTdHlsZWRFbGVtZW50PigqY3VycmVudCkgJiYgaXNTdHlsZWRJbmxpbmVFbGVt
ZW50VG9SZW1vdmUoZG93bmNhc3Q8RWxlbWVudD4oY3VycmVudC5nZXQoKSkpKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3Bw
CmluZGV4IDYzNWI2YTNmOTc3YjRjYWIwN2M5ZThjODA0NjI1N2NjZjA2YmE4MmQuLjhlMGI4ZDdm
MzRhYzhjMjVmMmU3NDNmMTU5N2I5NGIxZGVkYWRmYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwCkBAIC00OSw3ICs0
OSw4IEBAIHN0YXRpYyB2b2lkIHN3YXBJbk5vZGVQcmVzZXJ2aW5nQXR0cmlidXRlc0FuZENoaWxk
cmVuKEhUTUxFbGVtZW50JiBuZXdOb2RlLCBIVE1MCiAKICAgICAvLyBGSVhNRTogRml4IHRoaXMg
dG8gc2VuZCB0aGUgcHJvcGVyIE11dGF0aW9uUmVjb3JkcyB3aGVuIE11dGF0aW9uT2JzZXJ2ZXJz
IGFyZSBwcmVzZW50LgogICAgIG5ld05vZGUuY2xvbmVEYXRhRnJvbUVsZW1lbnQobm9kZVRvUmVw
bGFjZSk7Ci0gICAgYXV0byBjaGlsZHJlbiA9IGNvbGxlY3RDaGlsZE5vZGVzKG5vZGVUb1JlcGxh
Y2UpOworICAgIE5vZGVWZWN0b3IgY2hpbGRyZW47CisgICAgY29sbGVjdENoaWxkTm9kZXMobm9k
ZVRvUmVwbGFjZSwgY2hpbGRyZW4pOwogICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikK
ICAgICAgICAgbmV3Tm9kZS5hcHBlbmRDaGlsZChjaGlsZCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454922</attachid>
            <date>2022-03-16 17:51:49 -0700</date>
            <delta_ts>2022-03-17 10:53:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237988-20220316175148.patch</filename>
            <type>text/plain</type>
            <size>13976</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2NmNjEyZTEwYjhiN2Iz
ZGIzNDRmMWY2NDE5YmE0MzQzYzI3ZmJiMy4uN2QxZDc1MWI0NDhhNWMzZDQ0ZDY2ODgyN2NiYTRh
OGY2ZGMyZDA5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIyLTAzLTE2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCByZXR1cm5pbmcgTm9k
ZVZlY3RvciBmcm9tIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM3OTg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU3RvcCByZXR1cm5pbmcgTm9kZVZlY3RvciBmcm9tIGZ1bmN0aW9ucyBh
bmQgdXNlIGEgb3V0LXBhcmFtZXRlciBpbnN0ZWFkLiBXaGlsZSB0aGlzIGRvZXNuJ3QgbG9vawor
ICAgICAgICBhcyBtb2Rlcm4sIHRoaXMgaXMgYWN0dWFsbHkgbW9yZSBlZmZpY2llbnQuIFRoaXMg
aXMgYmVjYXVzZSBOb2RlVmVjdG9yIGhhcyBhIGZhaXJseSBsYXJnZSBpbmxpbmUKKyAgICAgICAg
YnVmZmVyIGFuZCBpcyB0aHVzIG5vdCB0aGF0IGNoZWFwIHRvICJtb3ZlIi4KKworICAgICAgICBU
aGlzIHdhcyBjYXVzaW5nIGZ1bmN0aW9ucyBsaWtlIGBDb250YWluZXJOb2RlOjpwYXJzZXJBcHBl
bmRDaGlsZChOb2RlJilgIHRvIHNwZW5kIHVubmVjZXNzYXJ5CisgICAgICAgIHRpbWUgdW5kZXI6
CisgICAgICAgIGBWZWN0b3JCdWZmZXI8UmVmPE5vZGUsIFJhd1B0clRyYWl0czxOb2RlPj4sIDEx
LCBGYXN0TWFsbG9jPjo6c3dhcChWZWN0b3JCdWZmZXI8UmVmPE5vZGUsIFJhd1B0clRyYWl0czxO
b2RlPj4sIDExLCBGYXN0TWFsbG9jPiYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpYAor
CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGFpbmVyTm9kZTo6cmVtb3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OmV4ZWN1dGVOb2RlSW5zZXJ0aW9uV2l0aFNjcmlwdEFzc2VydGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZW1vdmVTZWxmT3JDaGlsZE5vZGVzRm9y
SW5zZXJ0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnRha2VBbGxDaGls
ZHJlbkZyb20pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cmVwbGFjZUFsbCk6
CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZW1vdmVDaGlsZHJlbik6CisgICAg
ICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hpbGRyZW4pOgorICAgICAgICAq
IGRvbS9Db250YWluZXJOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0Q2hpbGROb2Rl
cyk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Om5vdGlmeUNoaWxkTm9kZUluc2VydGVkKToKKyAgICAgICAgKiBkb20vQ29udGFp
bmVyTm9kZUFsZ29yaXRobXMuaDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjphZGRTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6Omluc2VydEFkamFjZW50SFRNTCk6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxl
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERv
d25JbmxpbmVTdHlsZUFyb3VuZE5vZGUpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZU5vZGVX
aXRoU3BhbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3dhcEluTm9kZVByZXNlcnZp
bmdBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4pOgorCiAyMDIyLTAzLTE2ICBEZXZpbiBSb3Vzc28gIDxk
cm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBbQXBwbGUgUGF5XSB2ZXJzaW9uIHZhbHVlcyBh
cmUgaW5jb3JyZWN0LCBjYXVzaW5nIGluY29ycmVjdCBmZWF0dXJlIGRldGVjdGlvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCmluZGV4IGViYmIwNjZlZmM0MjAxMTQ0NzBlMGEyZWRi
ZDI5ZDgxYjU3MDNjNzAuLjMyNGE4N2Q2YmVkMmQ1ZmRhYWY3MjhmNDlhY2E3ZjZkODZiMmMwYTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKQEAgLTc5LDkgKzc5LDEwIEBAIHVu
c2lnbmVkIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6c19jb3VudCA9IDA7CiBTY3JpcHREaXNhbGxv
d2VkU2NvcGU6OkV2ZW50QWxsb3dlZFNjb3BlKiBTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkV2ZW50
QWxsb3dlZFNjb3BlOjpzX2N1cnJlbnRTY29wZSA9IG51bGxwdHI7CiAjZW5kaWYKIAotQUxXQVlT
X0lOTElORSBOb2RlVmVjdG9yIENvbnRhaW5lck5vZGU6OnJlbW92ZUFsbENoaWxkcmVuV2l0aFNj
cmlwdEFzc2VydGlvbihDaGlsZENoYW5nZTo6U291cmNlIHNvdXJjZSwgRGVmZXJDaGlsZHJlbkNo
YW5nZWQgZGVmZXJDaGlsZHJlbkNoYW5nZWQpCitBTFdBWVNfSU5MSU5FIHZvaWQgQ29udGFpbmVy
Tm9kZTo6cmVtb3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9uKENoaWxkQ2hhbmdlOjpT
b3VyY2Ugc291cmNlLCBOb2RlVmVjdG9yJiBjaGlsZHJlbiwgRGVmZXJDaGlsZHJlbkNoYW5nZWQg
ZGVmZXJDaGlsZHJlbkNoYW5nZWQpCiB7Ci0gICAgYXV0byBjaGlsZHJlbiA9IGNvbGxlY3RDaGls
ZE5vZGVzKCp0aGlzKTsKKyAgICBBU1NFUlQoY2hpbGRyZW4uaXNFbXB0eSgpKTsKKyAgICBjb2xs
ZWN0Q2hpbGROb2RlcygqdGhpcywgY2hpbGRyZW4pOwogCiAgICAgaWYgKFVOTElLRUxZKGlzRG9j
dW1lbnRGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKCkpKSB7CiAgICAgICAgIFNjcmlwdERpc2Fs
bG93ZWRTY29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKQEAgLTkwLDcg
KzkxLDcgQEAgQUxXQVlTX0lOTElORSBOb2RlVmVjdG9yIENvbnRhaW5lck5vZGU6OnJlbW92ZUFs
bENoaWxkcmVuV2l0aFNjcmlwdEFzc2VydGlvbihDaGkKICAgICAgICAgd2hpbGUgKFJlZlB0cjxO
b2RlPiBjaGlsZCA9IG1fZmlyc3RDaGlsZCkKICAgICAgICAgICAgIHJlbW92ZUJldHdlZW4obnVs
bHB0ciwgY2hpbGQtPm5leHRTaWJsaW5nKCksICpjaGlsZCk7CiAgICAgICAgIGRvY3VtZW50KCku
aW5jRE9NVHJlZVZlcnNpb24oKTsKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuOworICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHNvdXJjZSA9PSBDaGlsZENoYW5nZTo6U291cmNlOjpB
UEkpIHsKQEAgLTEzNiw4ICsxMzcsNiBAQCBBTFdBWVNfSU5MSU5FIE5vZGVWZWN0b3IgQ29udGFp
bmVyTm9kZTo6cmVtb3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9uKENoaQogCiAgICAg
aWYgKGRlZmVyQ2hpbGRyZW5DaGFuZ2VkID09IERlZmVyQ2hpbGRyZW5DaGFuZ2VkOjpObykKICAg
ICAgICAgY2hpbGRyZW5DaGFuZ2VkKGNoaWxkQ2hhbmdlKTsKLQotICAgIHJldHVybiBjaGlsZHJl
bjsKIH0KIAogc3RhdGljIENvbnRhaW5lck5vZGU6OkNoaWxkQ2hhbmdlIG1ha2VDaGlsZENoYW5n
ZUZvclJlbW92YWwoTm9kZSYgY2hpbGRUb1JlbW92ZSwgQ29udGFpbmVyTm9kZTo6Q2hpbGRDaGFu
Z2U6OlNvdXJjZSBzb3VyY2UpCkBAIC0yNjIsNyArMjYxLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgdm9pZCBleGVjdXRlTm9kZUluc2VydGlvbldpdGhTY3JpcHRBc3NlcnRpb24oQ29udGFpbmVy
Tm9kZSYKIAogICAgICAgICBkb05vZGVJbnNlcnRpb24oKTsKICAgICAgICAgQ2hpbGRMaXN0TXV0
YXRpb25TY29wZShjb250YWluZXJOb2RlKS5jaGlsZEFkZGVkKGNoaWxkKTsKLSAgICAgICAgcG9z
dEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMgPSBub3RpZnlDaGlsZE5vZGVJbnNlcnRlZChj
b250YWluZXJOb2RlLCBjaGlsZCk7CisgICAgICAgIG5vdGlmeUNoaWxkTm9kZUluc2VydGVkKGNv
bnRhaW5lck5vZGUsIGNoaWxkLCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7CiAg
ICAgfQogCiAgICAgLy8gRklYTUU6IE1vdmUgY2hpbGRyZW5DaGFuZ2VkIGludG8gU2NyaXB0RGlz
YWxsb3dlZFNjb3BlIGJsb2NrLgpAQCAtMjgyLDggKzI4MSw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IENvbnRhaW5lck5vZGU6OnJlbW92ZVNlbGZPckNoaWxkTm9kZXNGb3JJbnNlcnRpb24oTm9kZSYg
Y2hpbGQsCiAgICAgICAgIGlmICghZnJhZ21lbnQtPmhhc0NoaWxkTm9kZXMoKSkKICAgICAgICAg
ICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgYXV0byByZW1vdmVkQ2hpbGROb2RlcyA9IGZyYWdt
ZW50LT5yZW1vdmVBbGxDaGlsZHJlbldpdGhTY3JpcHRBc3NlcnRpb24oQ29udGFpbmVyTm9kZTo6
Q2hpbGRDaGFuZ2U6OlNvdXJjZTo6QVBJKTsKLSAgICAgICAgbm9kZXNGb3JJbnNlcnRpb24uc3dh
cChyZW1vdmVkQ2hpbGROb2Rlcyk7CisgICAgICAgIEFTU0VSVChub2Rlc0Zvckluc2VydGlvbi5p
c0VtcHR5KCkpOworICAgICAgICBmcmFnbWVudC0+cmVtb3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0
QXNzZXJ0aW9uKENvbnRhaW5lck5vZGU6OkNoaWxkQ2hhbmdlOjpTb3VyY2U6OkFQSSwgbm9kZXNG
b3JJbnNlcnRpb24pOwogCiAgICAgICAgIGZyYWdtZW50LT5yZWJ1aWxkU1ZHRXh0ZW5zaW9uc0Vs
ZW1lbnRzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgZnJhZ21lbnQtPmRpc3BhdGNoU3VidHJlZU1v
ZGlmaWVkRXZlbnQoKTsKQEAgLTMyOCw3ICszMjcsOCBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnRh
a2VBbGxDaGlsZHJlbkZyb20oQ29udGFpbmVyTm9kZSogb2xkUGFyZW50KQogewogICAgIEFTU0VS
VChvbGRQYXJlbnQpOwogCi0gICAgYXV0byBjaGlsZHJlbiA9IG9sZFBhcmVudC0+cmVtb3ZlQWxs
Q2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9uKENoaWxkQ2hhbmdlOjpTb3VyY2U6OlBhcnNlcik7
CisgICAgTm9kZVZlY3RvciBjaGlsZHJlbjsKKyAgICBvbGRQYXJlbnQtPnJlbW92ZUFsbENoaWxk
cmVuV2l0aFNjcmlwdEFzc2VydGlvbihDaGlsZENoYW5nZTo6U291cmNlOjpQYXJzZXIsIGNoaWxk
cmVuKTsKIAogICAgIC8vIEZJWE1FOiBhc3NlcnQgdGhhdCB3ZSBkb24ndCBkaXNwYXRjaCBldmVu
dHMgaGVyZSBzaW5jZSB0aGlzIGNvbnRhaW5lciBub2RlIGlzIHN0aWxsIGRpc2Nvbm5lY3RlZC4K
ICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pIHsKQEAgLTcxMCw3ICs3MTAsOCBAQCB2
b2lkIENvbnRhaW5lck5vZGU6OnJlcGxhY2VBbGwoTm9kZSogbm9kZSkKIAogICAgIFJlZjxDb250
YWluZXJOb2RlPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKICAgICBDaGlsZExpc3RNdXRhdGlvblNj
b3BlIG11dGF0aW9uKCp0aGlzKTsKLSAgICByZW1vdmVBbGxDaGlsZHJlbldpdGhTY3JpcHRBc3Nl
cnRpb24oQ2hpbGRDaGFuZ2U6OlNvdXJjZTo6QVBJLCBEZWZlckNoaWxkcmVuQ2hhbmdlZDo6WWVz
KTsKKyAgICBOb2RlVmVjdG9yIHJlbW92ZWRDaGlsZHJlbjsKKyAgICByZW1vdmVBbGxDaGlsZHJl
bldpdGhTY3JpcHRBc3NlcnRpb24oQ2hpbGRDaGFuZ2U6OlNvdXJjZTo6QVBJLCByZW1vdmVkQ2hp
bGRyZW4sIERlZmVyQ2hpbGRyZW5DaGFuZ2VkOjpZZXMpOwogCiAgICAgZXhlY3V0ZU5vZGVJbnNl
cnRpb25XaXRoU2NyaXB0QXNzZXJ0aW9uKCp0aGlzLCAqbm9kZSwgbnVsbHB0ciwgQ2hpbGRDaGFu
Z2U6OlNvdXJjZTo6QVBJLCBSZXBsYWNlZEFsbENoaWxkcmVuOjpZZXMsIFsmXSB7CiAgICAgICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGUoZG9jdW1lbnQoKSwg
KnRoaXMpOwpAQCAtNzQyLDcgKzc0Myw4IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6cmVtb3ZlQ2hp
bGRyZW4oKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWY8Q29udGFpbmVyTm9kZT4gcHJvdGVj
dGVkVGhpcygqdGhpcyk7Ci0gICAgcmVtb3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9u
KENoaWxkQ2hhbmdlOjpTb3VyY2U6OkFQSSk7CisgICAgTm9kZVZlY3RvciByZW1vdmVkQ2hpbGRy
ZW47CisgICAgcmVtb3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9uKENoaWxkQ2hhbmdl
OjpTb3VyY2U6OkFQSSwgcmVtb3ZlZENoaWxkcmVuKTsKIAogICAgIHJlYnVpbGRTVkdFeHRlbnNp
b25zRWxlbWVudHNJZk5lY2Vzc2FyeSgpOwogICAgIGRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZl
bnQoKTsKQEAgLTEwMjYsNyArMTAyOCw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENvbnRhaW5lck5v
ZGU6OnJlcGxhY2VDaGlsZHJlbihGaXhlZFZlY3RvcjxOb2RlT3JTdHJpbmc+JiYgdmVjCiAgICAg
Ly8gc3RlcCAzCiAgICAgUmVmIHByb3RlY3RlZFRoaXMgeyAqdGhpcyB9OwogICAgIENoaWxkTGlz
dE11dGF0aW9uU2NvcGUgbXV0YXRpb24oKnRoaXMpOwotICAgIHJlbW92ZUFsbENoaWxkcmVuV2l0
aFNjcmlwdEFzc2VydGlvbihDaGlsZENoYW5nZTo6U291cmNlOjpBUEksIERlZmVyQ2hpbGRyZW5D
aGFuZ2VkOjpObyk7CisgICAgTm9kZVZlY3RvciByZW1vdmVkQ2hpbGRyZW47CisgICAgcmVtb3Zl
QWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9uKENoaWxkQ2hhbmdlOjpTb3VyY2U6OkFQSSwg
cmVtb3ZlZENoaWxkcmVuLCBEZWZlckNoaWxkcmVuQ2hhbmdlZDo6Tm8pOwogCiAgICAgaWYgKG5v
ZGUpIHsKICAgICAgICAgaWYgKGF1dG8gYXBwZW5kUmVzdWx0ID0gYXBwZW5kQ2hpbGRXaXRob3V0
UHJlSW5zZXJ0aW9uVmFsaWRpdHlDaGVjaygqbm9kZSk7IGFwcGVuZFJlc3VsdC5oYXNFeGNlcHRp
b24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCmluZGV4IDFjY2M2OGY0NDRkOTEzYWZj
YmE4N2QzYjRmZjIxMjNhNzBkZjc0YmYuLjI4NDc3ZWYwMmM3ODBiYjMxNDY4ZDMzNTAwNGQwYTk4
MjZkMDNhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaApAQCAtMTcwLDcgKzE3MCw3
IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdm9pZCBleGVjdXRlUHJlcGFyZWRDaGlsZHJl
blJlbW92YWwoKTsKICAgICBlbnVtIGNsYXNzIERlZmVyQ2hpbGRyZW5DaGFuZ2VkIHsgWWVzLCBO
byB9OwotICAgIE5vZGVWZWN0b3IgcmVtb3ZlQWxsQ2hpbGRyZW5XaXRoU2NyaXB0QXNzZXJ0aW9u
KENoaWxkQ2hhbmdlOjpTb3VyY2UsIERlZmVyQ2hpbGRyZW5DaGFuZ2VkID0gRGVmZXJDaGlsZHJl
bkNoYW5nZWQ6Ok5vKTsKKyAgICB2b2lkIHJlbW92ZUFsbENoaWxkcmVuV2l0aFNjcmlwdEFzc2Vy
dGlvbihDaGlsZENoYW5nZTo6U291cmNlLCBOb2RlVmVjdG9yJiBjaGlsZHJlbiwgRGVmZXJDaGls
ZHJlbkNoYW5nZWQgPSBEZWZlckNoaWxkcmVuQ2hhbmdlZDo6Tm8pOwogICAgIGJvb2wgcmVtb3Zl
Tm9kZVdpdGhTY3JpcHRBc3NlcnRpb24oTm9kZSYsIENoaWxkQ2hhbmdlOjpTb3VyY2UpOwogICAg
IEV4Y2VwdGlvbk9yPHZvaWQ+IHJlbW92ZVNlbGZPckNoaWxkTm9kZXNGb3JJbnNlcnRpb24oTm9k
ZSYsIE5vZGVWZWN0b3ImKTsKIApAQCAtMjIzLDEyICsyMjMsMTAgQEAgaW5saW5lIE5vZGUmIE5v
ZGU6OnJvb3ROb2RlKCkgY29uc3QKICAgICByZXR1cm4gdHJhdmVyc2VUb1Jvb3ROb2RlKCk7CiB9
CiAKLWlubGluZSBOb2RlVmVjdG9yIGNvbGxlY3RDaGlsZE5vZGVzKE5vZGUmIG5vZGUpCitpbmxp
bmUgdm9pZCBjb2xsZWN0Q2hpbGROb2RlcyhOb2RlJiBub2RlLCBOb2RlVmVjdG9yJiBjaGlsZHJl
bikKIHsKLSAgICBOb2RlVmVjdG9yIGNoaWxkcmVuOwogICAgIGZvciAoTm9kZSogY2hpbGQgPSBu
b2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAg
ICAgICAgIGNoaWxkcmVuLmFwcGVuZCgqY2hpbGQpOwotICAgIHJldHVybiBjaGlsZHJlbjsKIH0K
IAogY2xhc3MgQ2hpbGROb2Rlc0xhenlTbmFwc2hvdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAppbmRleCAzNjk5OTdlMGIwYWY1YjNjNzk0NDE4
YTRmOTgzNWQyNWJiNmE2ZTUxLi42M2I4MTg2ZjY3ZWYwNTRlNGIzMmQ5OWZiZDc1YTE4MjgxN2Iz
MzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRo
bXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5j
cHAKQEAgLTg2LDcgKzg2LDkgQEAgc3RhdGljIHZvaWQgbm90aWZ5Tm9kZUluc2VydGVkSW50b1Ry
ZWUoQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUsIE5vZGUKICAgICAgICAgbm90
aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUocGFyZW50T2ZJbnNlcnRlZFRyZWUsICpyb290LCBUcmVl
U2NvcGVDaGFuZ2U6OkRpZE5vdENoYW5nZSwgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdl
dHMpOwogfQogCi1Ob2RlVmVjdG9yIG5vdGlmeUNoaWxkTm9kZUluc2VydGVkKENvbnRhaW5lck5v
ZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCBOb2RlJiBub2RlKQorLy8gV2UgaW50ZW50aW9uYWxs
eSB1c2UgYW4gb3V0LXBhcmFtZXRlciBmb3IgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdl
dHMgaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIHZlY3Rvci4gVGhpcyBpcyBiZWNhdXNlCisvLyBO
b2RlVmVjdG9yIGhhcyBhIGxhcmdlIGlubGluZSBidWZmZXIgYW5kIGlzIHRodXMgbm90IGNoZWFw
IHRvIG1vdmUuCit2b2lkIG5vdGlmeUNoaWxkTm9kZUluc2VydGVkKENvbnRhaW5lck5vZGUmIHBh
cmVudE9mSW5zZXJ0ZWRUcmVlLCBOb2RlJiBub2RlLCBOb2RlVmVjdG9yJiBwb3N0SW5zZXJ0aW9u
Tm90aWZpY2F0aW9uVGFyZ2V0cykKIHsKICAgICBBU1NFUlQoU2NyaXB0RGlzYWxsb3dlZFNjb3Bl
OjpJbk1haW5UaHJlYWQ6Omhhc0Rpc2FsbG93ZWRTY29wZSgpKTsKIApAQCAtOTUsMTYgKzk3LDEy
IEBAIE5vZGVWZWN0b3Igbm90aWZ5Q2hpbGROb2RlSW5zZXJ0ZWQoQ29udGFpbmVyTm9kZSYgcGFy
ZW50T2ZJbnNlcnRlZFRyZWUsIE5vZGUmIG5vCiAgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0RG9j
dW1lbnQobm9kZS5kb2N1bWVudCgpKTsKICAgICBSZWY8Tm9kZT4gcHJvdGVjdE5vZGUobm9kZSk7
CiAKLSAgICBOb2RlVmVjdG9yIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzOwotCiAg
ICAgLy8gVHJlZSBzY29wZSBoYXMgY2hhbmdlZCBpZiB0aGUgY29udGFpbmVyIG5vZGUgaW50byB3
aGljaCAibm9kZSIgaXMgaW5zZXJ0ZWQgaXMgaW4gYSBkb2N1bWVudCBvciBhIHNoYWRvdyByb290
LgogICAgIGF1dG8gdHJlZVNjb3BlQ2hhbmdlID0gcGFyZW50T2ZJbnNlcnRlZFRyZWUuaXNJblRy
ZWVTY29wZSgpID8gVHJlZVNjb3BlQ2hhbmdlOjpDaGFuZ2VkIDogVHJlZVNjb3BlQ2hhbmdlOjpE
aWROb3RDaGFuZ2U7CiAgICAgaWYgKHBhcmVudE9mSW5zZXJ0ZWRUcmVlLmlzQ29ubmVjdGVkKCkp
CiAgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudChwYXJlbnRPZkluc2VydGVk
VHJlZSwgbm9kZSwgdHJlZVNjb3BlQ2hhbmdlLCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFy
Z2V0cyk7CiAgICAgZWxzZQogICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvVHJlZShwYXJl
bnRPZkluc2VydGVkVHJlZSwgbm9kZSwgdHJlZVNjb3BlQ2hhbmdlLCBwb3N0SW5zZXJ0aW9uTm90
aWZpY2F0aW9uVGFyZ2V0cyk7Ci0KLSAgICByZXR1cm4gcG9zdEluc2VydGlvbk5vdGlmaWNhdGlv
blRhcmdldHM7CiB9CiAKIGlubGluZSBSZW1vdmVkU3VidHJlZU9ic2VydmFiaWxpdHkgb2JzZXJ2
YWJpbGl0eU9mUmVtb3ZlZE5vZGUoTm9kZSYgbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGVBbGdvcml0aG1zLmgKaW5kZXggZjgyZDZmNTEwYThhODk2MDgxZmI3NDQ1NzZm
NmMzN2ZjYmU0NTkxNS4uYWQyNTk1MWI4MzYwZDdkY2FlYTI5ZTU5N2E4NWM3NzNlYmRhNGY1ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgKQEAgLTYx
LDcgKzYxLDggQEAgcHVibGljOgogfTsKICNlbmRpZiAvLyBub3QgQVNTRVJUX0VOQUJMRUQKIAot
Tm9kZVZlY3RvciBub3RpZnlDaGlsZE5vZGVJbnNlcnRlZChDb250YWluZXJOb2RlJiBwYXJlbnRP
Zkluc2VydGVkVHJlZSwgTm9kZSYpOwordm9pZCBub3RpZnlDaGlsZE5vZGVJbnNlcnRlZChDb250
YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSwgTm9kZSYsIE5vZGVWZWN0b3ImIHBvc3RJ
bnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKKwogZW51bSBjbGFzcyBSZW1vdmVkU3VidHJl
ZU9ic2VydmFiaWxpdHkgewogICAgIE5vdE9ic2VydmFibGUsCiAgICAgTWF5YmVPYnNlcnZhYmxl
QnlSZWZQdHIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggNTRkY2M3YTNhNDU3MmY4ZGFlYzgy
NDBkNTJmMGY3ZjY0ODViZTcxMy4uNmRmNGQ3NzNhOWIzZjliZmRiNjdjYjk0MzE5YjMxYTI0M2I3
MzEzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMjQ1OCwxMSArMjQ1OCw5IEBAIHZvaWQg
RWxlbWVudDo6YWRkU2hhZG93Um9vdChSZWY8U2hhZG93Um9vdD4mJiBuZXdTaGFkb3dSb290KQog
ICAgICAgICBzaGFkb3dSb290LnNldEhvc3QoKnRoaXMpOwogICAgICAgICBzaGFkb3dSb290LnNl
dFBhcmVudFRyZWVTY29wZSh0cmVlU2NvcGUoKSk7CiAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
ICAgICBBU1NFUlQobm90aWZ5Q2hpbGROb2RlSW5zZXJ0ZWQoKnRoaXMsIHNoYWRvd1Jvb3QpLmlz
RW1wdHkoKSk7Ci0jZWxzZQotICAgICAgICBub3RpZnlDaGlsZE5vZGVJbnNlcnRlZCgqdGhpcywg
c2hhZG93Um9vdCk7Ci0jZW5kaWYKKyAgICAgICAgTm9kZVZlY3RvciBwb3N0SW5zZXJ0aW9uTm90
aWZpY2F0aW9uVGFyZ2V0czsKKyAgICAgICAgbm90aWZ5Q2hpbGROb2RlSW5zZXJ0ZWQoKnRoaXMs
IHNoYWRvd1Jvb3QsIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cywgcG9zdEluc2Vy
dGlvbk5vdGlmaWNhdGlvblRhcmdldHMuaXNFbXB0eSgpKTsKIAogICAgICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZFB1c2hTaGFkb3dSb290KCp0aGlzLCBzaGFkb3dSb290KTsKIApA
QCAtNDY0MCw3ICs0NjM4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6aW5zZXJ0QWRq
YWNlbnRIVE1MKGNvbnN0IFN0cmluZyYgd2hlcmUsIGNvbnN0IFN0cmluZyYKICAgICBpZiAoVU5M
SUtFTFkoYWRkZWROb2RlcykpIHsKICAgICAgICAgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGlu
c2VydEFkamFjZW50LCBhcyBvdGhlcndpc2UgdGhlIGNoaWxkcmVuIG9mIGZyYWdtZW50IHdpbGwg
YmUgbW92ZWQKICAgICAgICAgLy8gdG8gdGhlaXIgbmV3IHBhcmVudCBhbmQgd2lsbCBiZSBoYXJk
ZXIgdG8ga2VlcCB0cmFjayBvZi4KLSAgICAgICAgKmFkZGVkTm9kZXMgPSBjb2xsZWN0Q2hpbGRO
b2RlcyhmcmFnbWVudC5yZXR1cm5WYWx1ZSgpKTsKKyAgICAgICAgY29sbGVjdENoaWxkTm9kZXMo
ZnJhZ21lbnQucmV0dXJuVmFsdWUoKSwgKmFkZGVkTm9kZXMpOwogICAgIH0KIAogICAgIC8vIFN0
ZXAgNC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5k
ZXggZDA2YzkzZDZkOGE5NWQ0YzAyOGM1Y2U3MjU2NjIyOGRlNGQwNGI2Mi4uYmZhMjRkYjA2YmZi
ZTNmZjVkZTlhN2ViNjk5ZWZhZGM0NTRjZmNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTEwNDYsNyArMTA0Niw4IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OnB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKEVkaXRpbmdTdHlsZSYg
c3R5bGUsIE5vZGUqCiAgICAgLy8gRWFjaCBjaGlsZCBvZiB0aGUgcmVtb3ZlZCBlbGVtZW50LCBl
eGNsdXNpbmcgYW5jZXN0b3JzIG9mIHRhcmdldE5vZGUsIGlzIHRoZW4gd3JhcHBlZCBieSBjbG9u
ZXMgb2YgZWxlbWVudHMgaW4gZWxlbWVudHNUb1B1c2hEb3duLgogICAgIFZlY3RvcjxSZWY8RWxl
bWVudD4+IGVsZW1lbnRzVG9QdXNoRG93bjsKICAgICB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50
ICE9IHRhcmdldE5vZGUgJiYgY3VycmVudC0+Y29udGFpbnModGFyZ2V0Tm9kZSkpIHsKLSAgICAg
ICAgYXV0byBjdXJyZW50Q2hpbGRyZW4gPSBjb2xsZWN0Q2hpbGROb2RlcygqY3VycmVudCk7Cisg
ICAgICAgIE5vZGVWZWN0b3IgY3VycmVudENoaWxkcmVuOworICAgICAgICBjb2xsZWN0Q2hpbGRO
b2RlcygqY3VycmVudCwgY3VycmVudENoaWxkcmVuKTsKIAogICAgICAgICBSZWZQdHI8U3R5bGVk
RWxlbWVudD4gc3R5bGVkRWxlbWVudDsKICAgICAgICAgaWYgKGlzPFN0eWxlZEVsZW1lbnQ+KCpj
dXJyZW50KSAmJiBpc1N0eWxlZElubGluZUVsZW1lbnRUb1JlbW92ZShkb3duY2FzdDxFbGVtZW50
PihjdXJyZW50LmdldCgpKSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5jcHAKaW5kZXggNjM1YjZhM2Y5NzdiNGNhYjA3Yzll
OGM4MDQ2MjU3Y2NmMDZiYTgyZC4uOGUwYjhkN2YzNGFjOGMyNWYyZTc0M2YxNTk3Yjk0YjFkZWRh
ZGZiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlTm9kZVdpdGhT
cGFuQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlTm9kZVdp
dGhTcGFuQ29tbWFuZC5jcHAKQEAgLTQ5LDcgKzQ5LDggQEAgc3RhdGljIHZvaWQgc3dhcEluTm9k
ZVByZXNlcnZpbmdBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oSFRNTEVsZW1lbnQmIG5ld05vZGUsIEhU
TUwKIAogICAgIC8vIEZJWE1FOiBGaXggdGhpcyB0byBzZW5kIHRoZSBwcm9wZXIgTXV0YXRpb25S
ZWNvcmRzIHdoZW4gTXV0YXRpb25PYnNlcnZlcnMgYXJlIHByZXNlbnQuCiAgICAgbmV3Tm9kZS5j
bG9uZURhdGFGcm9tRWxlbWVudChub2RlVG9SZXBsYWNlKTsKLSAgICBhdXRvIGNoaWxkcmVuID0g
Y29sbGVjdENoaWxkTm9kZXMobm9kZVRvUmVwbGFjZSk7CisgICAgTm9kZVZlY3RvciBjaGlsZHJl
bjsKKyAgICBjb2xsZWN0Q2hpbGROb2Rlcyhub2RlVG9SZXBsYWNlLCBjaGlsZHJlbik7CiAgICAg
Zm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKQogICAgICAgICBuZXdOb2RlLmFwcGVuZENoaWxk
KGNoaWxkKTsKIAo=
</data>
<flag name="commit-queue"
          id="482831"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>