<?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>226832</bug_id>
          
          <creation_ts>2021-06-09 11:43:25 -0700</creation_ts>
          <short_desc>Regression(r276653) We&apos;re going to disk more often for local storage operations</short_desc>
          <delta_ts>2021-06-11 13:35:38 -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>WebKit2</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=225065</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=226938</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>
          <dependson>226788</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>nham</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1768255</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-09 11:43:25 -0700</bug_when>
    <thetext>We&apos;re going to disk more often for local storage operations since r276653 because we no longer keep items in memory. This results in a slightly increased power usage on one of our benchmarks. As a first step to improve this, I am reintroducing a cache of the items in memory, as long as the values are not too large (1Kb limit). We still go to disk to look up values that are larger than 1Kb to avoid regressing memory usage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768258</commentid>
    <comment_count>1</comment_count>
      <attachid>430985</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-09 11:45:39 -0700</bug_when>
    <thetext>Created attachment 430985
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768631</commentid>
    <comment_count>2</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-06-10 11:34:16 -0700</bug_when>
    <thetext>Do you have link to radar about the regression? Do we know what operation causes the regression? (If it&apos;s write, this does not seem to help?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768639</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-10 11:47:37 -0700</bug_when>
    <thetext>(In reply to Sihui Liu from comment #2)
&gt; Do you have link to radar about the regression? Do we know what operation
&gt; causes the regression? (If it&apos;s write, this does not seem to help?)

We have a regression. The change that introduced this dropped 2 things: the in memory cache of the items and the batching of writes to the database. This patch reintroduced the in memory cache (with size limitation) and I have a follow up patch to reintroduce the batching of writes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768644</commentid>
    <comment_count>4</comment_count>
      <attachid>430985</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-06-10 11:49:31 -0700</bug_when>
    <thetext>Comment on attachment 430985
Patch

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

Looks mostly good but I am confused by the value in the hash table, and maybe that means I found a bug.

&gt; Source/WebKit/ChangeLog:12
&gt; +        in memory, as long as the values are not too large (1Kb limit). We still go to disk to
&gt; +        look up values that are larger than 1Kb to avoid regressing memory usage.

Seems like we&apos;re still always writing values to disk eagerly. Is that because the writes did not show up as costly / frequent in the benchmark?

&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:42
&gt; +constexpr unsigned maximumSizeForValuesKeptInMemory { 1024 }; // 1Kb

For my most pedantic review comment ever, I will point out that the capitalization is &quot;kB&quot; [ https://en.wikipedia.org/wiki/Kilobyte#cite_note-IEC80000-1 ].

&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:150
&gt; +            auto value = pair.value-&gt;isNull() ? itemBypassingCache(pair.key) : *pair.value;

Do we need to check pair.value for the unset optional value here?

&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:162
&gt; +    m_items = CachedItemsMap { };

Is it sufficient that we only initialize / use our cache if the client asks for all items? Is that guaranteed to happen, or expected to happen in most cases?

&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.h:77
&gt; +    // Cached version of the items in memory.
&gt; +    // If the value is too large to keep in memory, we store a null String. We use std::optional&lt;&gt; for the
&gt; +    // value to distinguish the key being missing vs the key being present but its value not being stored in
&gt; +    // memory.

I&apos;m a little lost in our use of two null values (either unset optional or set optional with null String). If a key is absent, that means there is no entry in the database. If a key is present and a value is set optional with null String, that means there is an entry in the database and it is not cached (because it is large). What does it mean when a key is present and a value is unset optional?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768650</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-10 11:55:33 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #4)
&gt; Comment on attachment 430985 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=430985&amp;action=review
&gt; 
&gt; Looks mostly good but I am confused by the value in the hash table, and
&gt; maybe that means I found a bug.
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:12
&gt; &gt; +        in memory, as long as the values are not too large (1Kb limit). We still go to disk to
&gt; &gt; +        look up values that are larger than 1Kb to avoid regressing memory usage.
&gt; 
&gt; Seems like we&apos;re still always writing values to disk eagerly. Is that
&gt; because the writes did not show up as costly / frequent in the benchmark?
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:42
&gt; &gt; +constexpr unsigned maximumSizeForValuesKeptInMemory { 1024 }; // 1Kb
&gt; 
&gt; For my most pedantic review comment ever, I will point out that the
&gt; capitalization is &quot;kB&quot; [
&gt; https://en.wikipedia.org/wiki/Kilobyte#cite_note-IEC80000-1 ].
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:150
&gt; &gt; +            auto value = pair.value-&gt;isNull() ? itemBypassingCache(pair.key) : *pair.value;
&gt; 
&gt; Do we need to check pair.value for the unset optional value here?
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:162
&gt; &gt; +    m_items = CachedItemsMap { };
&gt; 
&gt; Is it sufficient that we only initialize / use our cache if the client asks
&gt; for all items? Is that guaranteed to happen, or expected to happen in most
&gt; cases?
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.h:77
&gt; &gt; +    // Cached version of the items in memory.
&gt; &gt; +    // If the value is too large to keep in memory, we store a null String. We use std::optional&lt;&gt; for the
&gt; &gt; +    // value to distinguish the key being missing vs the key being present but its value not being stored in
&gt; &gt; +    // memory.
&gt; 
&gt; I&apos;m a little lost in our use of two null values (either unset optional or
&gt; set optional with null String). If a key is absent, that means there is no
&gt; entry in the database. If a key is present and a value is set optional with
&gt; null String, that means there is an entry in the database and it is not
&gt; cached (because it is large). What does it mean when a key is present and a
&gt; value is unset optional?

We never store std::nullopt in the hashmap, this is the « empty » value. So if I call get() and get std::nullopt then I know the key wasn’t prevent. If I get an optional with a string in it, then I know the key was present. If the string inside the optional is null, then it means it is too large and we have to fetch it from disk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768655</commentid>
    <comment_count>6</comment_count>
      <attachid>430985</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-06-10 12:02:26 -0700</bug_when>
    <thetext>Comment on attachment 430985
Patch

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

I don’t understand why Geoff did cq- and not review-; I was going to do review+ but I think Geoff gets to finish he review now.

I agree that we can make the use of optional and null clearer with comments. I’m OK with how you are using them but it’s subtle and as we know, subtle is not good for future programmer happiness.

&gt;&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:42
&gt;&gt; +constexpr unsigned maximumSizeForValuesKeptInMemory { 1024 }; // 1Kb
&gt; 
&gt; For my most pedantic review comment ever, I will point out that the capitalization is &quot;kB&quot; [ https://en.wikipedia.org/wiki/Kilobyte#cite_note-IEC80000-1 ].

Greatest comment. But not the most pedantic you could have written since you didn’t point out that 1kB is 1000 bytes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768659</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-10 12:09:48 -0700</bug_when>
    <thetext>Any proposal on how to make the HashMap clearer? Maybe introduce my own class to represent the value instead of using std::optional?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768662</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-10 12:11:59 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #7)
&gt; Any proposal on how to make the HashMap clearer? Maybe introduce my own
&gt; class to represent the value instead of using std::optional?

Another way would be to use 2 separate container, a HashMap for fully cached values and a HashSet for keys whose value is too big. That would mean double hash lookup in some cases though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768692</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-06-10 13:10:20 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #7)
&gt; Any proposal on how to make the HashMap clearer? Maybe introduce my own
&gt; class to represent the value instead of using std::optional?

I don’t have any great ideas, but here are some less great ones:

Maybe a Variant would be clearer, so you could name each enumeration for the two null cases? Or WTF::Expected might work, with the unexpected values being that same enumeration I mentioned.

Or could use a class that could still maybe even store things as an optional and null, but the code would be written in a way that’s more explicit rather than using the std::optional and WTF::String functions directly? And with that class you could even change the storage to be even more efficient later if you wanted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768695</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-10 13:15:53 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #9)
&gt; (In reply to Chris Dumez from comment #7)
&gt; &gt; Any proposal on how to make the HashMap clearer? Maybe introduce my own
&gt; &gt; class to represent the value instead of using std::optional?
&gt; 
&gt; I don’t have any great ideas, but here are some less great ones:
&gt; 
&gt; Maybe a Variant would be clearer, so you could name each enumeration for the
&gt; two null cases? Or WTF::Expected might work, with the unexpected values
&gt; being that same enumeration I mentioned.

I thought about a Variant but then I started wondering, what do I get as result if I call HashMap::get() with a key that doesn&apos;t exist? I don&apos;t think we have traits to handle Variant types nicely in HashMap? I also couldn&apos;t find any usage of Variant in HashMaps in the codebase.

&gt; 
&gt; Or could use a class that could still maybe even store things as an optional
&gt; and null, but the code would be written in a way that’s more explicit rather
&gt; than using the std::optional and WTF::String functions directly? And with
&gt; that class you could even change the storage to be even more efficient later
&gt; if you wanted.

Yes, I think I may just have to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768700</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-10 13:22:17 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #4)
&gt; Comment on attachment 430985 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=430985&amp;action=review
&gt; 
&gt; Looks mostly good but I am confused by the value in the hash table, and
&gt; maybe that means I found a bug.
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:12
&gt; &gt; +        in memory, as long as the values are not too large (1Kb limit). We still go to disk to
&gt; &gt; +        look up values that are larger than 1Kb to avoid regressing memory usage.
&gt; 
&gt; Seems like we&apos;re still always writing values to disk eagerly. Is that
&gt; because the writes did not show up as costly / frequent in the benchmark?

Batching the writes is planned as a follow-up.

&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:42
&gt; &gt; +constexpr unsigned maximumSizeForValuesKeptInMemory { 1024 }; // 1Kb
&gt; 
&gt; For my most pedantic review comment ever, I will point out that the
&gt; capitalization is &quot;kB&quot; [
&gt; https://en.wikipedia.org/wiki/Kilobyte#cite_note-IEC80000-1 ].

Will fix.

&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:150
&gt; &gt; +            auto value = pair.value-&gt;isNull() ? itemBypassingCache(pair.key) : *pair.value;
&gt; 
&gt; Do we need to check pair.value for the unset optional value here?

I don&apos;t think so. You cannot store std::nullopt as a value in the HashMap AFAIK and we certainly don&apos;t with the current code.

&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:162
&gt; &gt; +    m_items = CachedItemsMap { };
&gt; 
&gt; Is it sufficient that we only initialize / use our cache if the client asks
&gt; for all items? Is that guaranteed to happen, or expected to happen in most
&gt; cases?

It always happens. That&apos;s the first thing that the client does since the WebProcess has its own copy of the data in memory and then only sends IPC to the network process to propagate updates to the network process (and other WebProcesses with pages of the same origin).

&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.h:77
&gt; &gt; +    // Cached version of the items in memory.
&gt; &gt; +    // If the value is too large to keep in memory, we store a null String. We use std::optional&lt;&gt; for the
&gt; &gt; +    // value to distinguish the key being missing vs the key being present but its value not being stored in
&gt; &gt; +    // memory.
&gt; 
&gt; I&apos;m a little lost in our use of two null values (either unset optional or
&gt; set optional with null String). If a key is absent, that means there is no
&gt; entry in the database. If a key is present and a value is set optional with
&gt; null String, that means there is an entry in the database and it is not
&gt; cached (because it is large). What does it mean when a key is present and a
&gt; value is unset optional?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768703</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-06-10 13:43:06 -0700</bug_when>
    <thetext>OK, I misunderstood before and now I understand.

I&apos;d suggest HashMap&lt;String, String&gt;, and switching from get() to find().

I think a find() call followed by one check for &quot;not found&quot; and another check for &quot;found, with null value&quot;, plus a comment about null values at the declaration site of the table, will be pretty clear. One specific improvement in clarity will be that there is only one null value possible (String()), rather than two (optional { }, optional { String() }).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768712</commentid>
    <comment_count>13</comment_count>
      <attachid>431122</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-10 13:51:08 -0700</bug_when>
    <thetext>Created attachment 431122
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768770</commentid>
    <comment_count>14</comment_count>
      <attachid>431122</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-06-10 15:33:11 -0700</bug_when>
    <thetext>Comment on attachment 431122
Patch

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

Looks good to me, but I think I spotted a bug.

&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:151
&gt; +        for (auto&amp; pair : *m_items) {
&gt; +            auto value = pair.value.isNull() ? itemBypassingCache(pair.key) : pair.value;
&gt; +            items.add(pair.key, WTFMove(value));

I would call &quot;pair&quot; &quot;entry&quot; here.

&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:217
&gt; +        if (it != m_items-&gt;end())
&gt; +            return { };

I think this is supposed to be ==</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768779</commentid>
    <comment_count>15</comment_count>
      <attachid>431149</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-10 15:43:02 -0700</bug_when>
    <thetext>Created attachment 431149
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768969</commentid>
    <comment_count>16</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2021-06-11 10:12:07 -0700</bug_when>
    <thetext>Another option here if we want to lean more on SQLite is to just issue BEGIN/END TRANSACTIONs on our own. Right now we are executing statements outside of the context of a transaction, so each statement acts as if it was wrapped in its own BEGIN/END TRANSACTION (which is what is causing more writes, as each transaction commit means writing to durable storage).

So basically the policy might be that we coalesce every N statements into its own commit by surrounding those N statements with a BEGIN/END transaction. There would also probably need to be a timeout on this coalescing so that we have some upper bound on the amount of time we wait before issuing an END TRANSACTION.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768970</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-11 10:14:07 -0700</bug_when>
    <thetext>(In reply to Ben Nham from comment #16)
&gt; Another option here if we want to lean more on SQLite is to just issue
&gt; BEGIN/END TRANSACTIONs on our own. Right now we are executing statements
&gt; outside of the context of a transaction, so each statement acts as if it was
&gt; wrapped in its own BEGIN/END TRANSACTION (which is what is causing more
&gt; writes, as each transaction commit means writing to durable storage).
&gt; 
&gt; So basically the policy might be that we coalesce every N statements into
&gt; its own commit by surrounding those N statements with a BEGIN/END
&gt; transaction. There would also probably need to be a timeout on this
&gt; coalescing so that we have some upper bound on the amount of time we wait
&gt; before issuing an END TRANSACTION.

This is what I have planned in my next patch, for the writes. This patch is about the reads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769038</commentid>
    <comment_count>18</comment_count>
      <attachid>431149</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-06-11 12:57:01 -0700</bug_when>
    <thetext>Comment on attachment 431149
Patch

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

Geoff reviewed this, but it says review? so I am setting review+.

&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:41
&gt; +static constexpr ASCIILiteral getItemsQueryString { &quot;SELECT key, value FROM ItemTable&quot;_s };

No need for static, no need for ASCIILiteral.

    constexpr auto getItemsQueryString { &quot;SELECT key, value FROM ItemTable&quot;_s };

&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:149
&gt; +        for (auto&amp; entry : *m_items) {

For better performance, consider adding this?

    items.reserveInitialCapacity(m_items-&gt;size());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769039</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-11 12:58:11 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #18)
&gt; Comment on attachment 431149 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=431149&amp;action=review
&gt; 
&gt; Geoff reviewed this, but it says review? so I am setting review+.

Geoff has r- twice but never r+.

&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:41
&gt; &gt; +static constexpr ASCIILiteral getItemsQueryString { &quot;SELECT key, value FROM ItemTable&quot;_s };
&gt; 
&gt; No need for static, no need for ASCIILiteral.
&gt; 
&gt;     constexpr auto getItemsQueryString { &quot;SELECT key, value FROM
&gt; ItemTable&quot;_s };

Will fix.

&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp:149
&gt; &gt; +        for (auto&amp; entry : *m_items) {
&gt; 
&gt; For better performance, consider adding this?
&gt; 
&gt;     items.reserveInitialCapacity(m_items-&gt;size());

Good idea, will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769044</commentid>
    <comment_count>20</comment_count>
      <attachid>431226</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-11 13:08:21 -0700</bug_when>
    <thetext>Created attachment 431226
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769054</commentid>
    <comment_count>21</comment_count>
      <attachid>431226</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-11 13:34:38 -0700</bug_when>
    <thetext>Comment on attachment 431226
Patch

Clearing flags on attachment: 431226

Committed r278778 (238735@main): &lt;https://commits.webkit.org/238735@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769055</commentid>
    <comment_count>22</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-11 13:34:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769057</commentid>
    <comment_count>23</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-11 13:35:38 -0700</bug_when>
    <thetext>&lt;rdar://problem/79213716&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430985</attachid>
            <date>2021-06-09 11:45:39 -0700</date>
            <delta_ts>2021-06-10 13:51:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226832-20210609114538.patch</filename>
            <type>text/plain</type>
            <size>8498</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNjNGFhOTM5M2Q1ZjYxNmZm
Yzk2ZTExYWY3OTRjZDAzYjRiZGFiNzkuLjdiYjliZTlhNDU2MDI4M2UwOWM4OGE1NjY5YThjNTcw
ODBlNDI1ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMjEtMDYtMDkgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZWdyZXNzaW9uKHIyNzY2NTMpIFdl
J3JlIGdvaW5nIHRvIGRpc2sgbW9yZSBvZnRlbiBmb3IgbG9jYWwgc3RvcmFnZSBvcGVyYXRpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4MzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSdyZSBn
b2luZyB0byBkaXNrIG1vcmUgb2Z0ZW4gZm9yIGxvY2FsIHN0b3JhZ2Ugb3BlcmF0aW9ucyBzaW5j
ZSByMjc2NjUzIGJlY2F1c2Ugd2Ugbm8KKyAgICAgICAgbG9uZ2VyIGtlZXAgaXRlbXMgaW4gbWVt
b3J5LiBUaGlzIHJlc3VsdHMgaW4gYSBzbGlnaHRseSBpbmNyZWFzZWQgcG93ZXIgdXNhZ2Ugb24g
b25lIG9mCisgICAgICAgIG91ciBiZW5jaG1hcmtzLiBBcyBhIGZpcnN0IHN0ZXAgdG8gaW1wcm92
ZSB0aGlzLCBJIGFtIHJlaW50cm9kdWNpbmcgYSBjYWNoZSBvZiB0aGUgaXRlbXMKKyAgICAgICAg
aW4gbWVtb3J5LCBhcyBsb25nIGFzIHRoZSB2YWx1ZXMgYXJlIG5vdCB0b28gbGFyZ2UgKDFLYiBs
aW1pdCkuIFdlIHN0aWxsIGdvIHRvIGRpc2sgdG8KKyAgICAgICAgbG9vayB1cCB2YWx1ZXMgdGhh
dCBhcmUgbGFyZ2VyIHRoYW4gMUtiIHRvIGF2b2lkIHJlZ3Jlc3NpbmcgbWVtb3J5IHVzYWdlLgor
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFz
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuRGF0YWJh
c2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6aXRlbXMgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6cmVtb3ZlSXRlbSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjppdGVtIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6Oml0ZW1CeXBhc3NpbmdDYWNoZSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpzZXRJdGVtKToKKyAg
ICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsZWFyKToKKyAgICAgICAgKFdl
YktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TG9j
YWxTdG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSBjb25zdCk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oOgorCiAyMDIxLTA2
LTA5ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gVUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpIGlzIG5vdCBj
YWxsZWQgd2hlbiBhIHZpZGVvIGV4aXRzIGZ1bGxzY3JlZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0
YWJhc2UuY3BwCmluZGV4IDRhNjM3NWNjYWRkNjE5MDc1MTRjMzQxOTBjYjBiYTlmNzQ2NDZhNTEu
LmIzNGU1NDM2MWZiOTc0NmU0ZjEwOTNlZTJmZGQ3NDE3MGVkZTNlZDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2Fs
U3RvcmFnZURhdGFiYXNlLmNwcApAQCAtMzgsNyArMzgsOCBAQAogbmFtZXNwYWNlIFdlYktpdCB7
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBn
ZXRJdGVtc1F1ZXJ5U3RyaW5nIHsgIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIl9z
IH07CitzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBnZXRJdGVtc1F1ZXJ5U3RyaW5nIHsg
IlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIl9zIH07Citjb25zdGV4cHIgdW5zaWdu
ZWQgbWF4aW11bVNpemVGb3JWYWx1ZXNLZXB0SW5NZW1vcnkgeyAxMDI0IH07IC8vIDFLYgogCiBS
ZWY8TG9jYWxTdG9yYWdlRGF0YWJhc2U+IExvY2FsU3RvcmFnZURhdGFiYXNlOjpjcmVhdGUoU3Ry
aW5nJiYgZGF0YWJhc2VQYXRoLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpCiB7CkBAIC02MSw4ICs2
MiwxMSBAQCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6fkxvY2FsU3RvcmFnZURhdGFiYXNlKCkKIGJv
b2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om9wZW5EYXRhYmFzZShTaG91bGRDcmVhdGVEYXRhYmFz
ZSBzaG91bGRDcmVhdGVEYXRhYmFzZSkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLSAgICBpZiAoIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobV9kYXRhYmFzZVBhdGgpICYmIHNo
b3VsZENyZWF0ZURhdGFiYXNlID09IFNob3VsZENyZWF0ZURhdGFiYXNlOjpObykKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKG1fZGF0YWJhc2VQ
YXRoKSkgeworICAgICAgICBpZiAoc2hvdWxkQ3JlYXRlRGF0YWJhc2UgPT0gU2hvdWxkQ3JlYXRl
RGF0YWJhc2U6Ok5vKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIG1faXRlbXMg
PSBDYWNoZWRJdGVtc01hcCB7IH07CisgICAgfQogCiAgICAgaWYgKG1fZGF0YWJhc2VQYXRoLmlz
RW1wdHkoKSkgewogICAgICAgICBMT0dfRVJST1IoIkZpbGVuYW1lIGZvciBsb2NhbCBzdG9yYWdl
IGRhdGFiYXNlIGlzIGVtcHR5IC0gY2Fubm90IG9wZW4gZm9yIHBlcnNpc3RlbnQgc3RvcmFnZSIp
OwpAQCAtMTQwLDE5ICsxNDQsMzAgQEAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTG9jYWxTdG9y
YWdlRGF0YWJhc2U6Oml0ZW1zKCkgY29uc3QKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkp
CiAgICAgICAgIHJldHVybiB7IH07CiAKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBpdGVt
czsKKyAgICBpZiAobV9pdGVtcykgeworICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiAqbV9pdGVt
cykgeworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IHBhaXIudmFsdWUtPmlzTnVsbCgpID8gaXRl
bUJ5cGFzc2luZ0NhY2hlKHBhaXIua2V5KSA6ICpwYWlyLnZhbHVlOworICAgICAgICAgICAgaXRl
bXMuYWRkKHBhaXIua2V5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGl0ZW1zOworICAgIH0KKwogICAgIGF1dG8gcXVlcnkgPSBzY29wZWRTdGF0ZW1lbnQobV9n
ZXRJdGVtc1N0YXRlbWVudCwgZ2V0SXRlbXNRdWVyeVN0cmluZyk7CiAgICAgaWYgKCFxdWVyeSkg
ewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZWxlY3QgaXRlbXMgZnJvbSBJdGVtVGFi
bGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAg
ICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBpdGVtczsKKyAgICBtX2l0ZW1zID0gQ2FjaGVkSXRl
bXNNYXAgeyB9OwogICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAgIHdoaWxlIChy
ZXN1bHQgPT0gU1FMSVRFX1JPVykgewogICAgICAgICBTdHJpbmcga2V5ID0gcXVlcnktPmNvbHVt
blRleHQoMCk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHF1ZXJ5LT5jb2x1bW5CbG9iQXNTdHJp
bmcoMSk7Ci0gICAgICAgIGlmICgha2V5LmlzTnVsbCgpICYmICF2YWx1ZS5pc051bGwoKSkKKyAg
ICAgICAgaWYgKCFrZXkuaXNOdWxsKCkgJiYgIXZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAg
ICBtX2l0ZW1zLT5hZGQoa2V5LCB2YWx1ZS5zaXplSW5CeXRlcygpID4gbWF4aW11bVNpemVGb3JW
YWx1ZXNLZXB0SW5NZW1vcnkgPyBTdHJpbmcoKSA6IHZhbHVlKTsKICAgICAgICAgICAgIGl0ZW1z
LmFkZChXVEZNb3ZlKGtleSksIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgfQogICAgICAgICBy
ZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAgIH0KIApAQCAtMTg0LDYgKzE5OSw5IEBAIHZvaWQg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIFN0cmlu
ZyYgb2xkVmFsdWUpCiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBpdGVtIGlu
IHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOwogICAgICAgICByZXR1
cm47CiAgICAgfQorCisgICAgaWYgKG1faXRlbXMpCisgICAgICAgIG1faXRlbXMtPnJlbW92ZShr
ZXkpOwogfQogCiBTdHJpbmcgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Oml0ZW0oY29uc3QgU3RyaW5n
JiBrZXkpIGNvbnN0CkBAIC0xOTIsNiArMjEwLDE5IEBAIFN0cmluZyBMb2NhbFN0b3JhZ2VEYXRh
YmFzZTo6aXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKICAgICBpZiAoIW1fZGF0YWJhc2Uu
aXNPcGVuKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKKyAgICBpZiAobV9pdGVtcykgeworICAg
ICAgICBhdXRvIHZhbHVlID0gbV9pdGVtcy0+Z2V0KGtleSk7CisgICAgICAgIGlmICghdmFsdWUp
CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlLT5p
c051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiAqdmFsdWU7CisgICAgICAgIC8vIFRoZSB2YWx1
ZSBpcyB0b28gbGFyZ2UgYW5kIG5lZWRzIHRvIGJlIGZldGNoZWQgZnJvbSB0aGUgZGF0YWJhc2Uu
CisgICAgfQorICAgIHJldHVybiBpdGVtQnlwYXNzaW5nQ2FjaGUoa2V5KTsKK30KKworU3RyaW5n
IExvY2FsU3RvcmFnZURhdGFiYXNlOjppdGVtQnlwYXNzaW5nQ2FjaGUoY29uc3QgU3RyaW5nJiBr
ZXkpIGNvbnN0Cit7CiAgICAgYXV0byBxdWVyeSA9IHNjb3BlZFN0YXRlbWVudChtX2dldEl0ZW1T
dGF0ZW1lbnQsICJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iX3MpOwog
ICAgIGlmICghcXVlcnkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZ2V0IGl0ZW0g
ZnJvbSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKQEAgLTIzMSw3ICsyNjIsMTEgQEAg
dm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgU3RyaW4KICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBk
YXRlIGl0ZW0gaW4gdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgLSAlaSIsIHJlc3VsdCk7CiAg
ICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX0ZVTEwpCiAgICAgICAgICAgICBxdW90YUV4Y2Vw
dGlvbiA9IHRydWU7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBpZiAobV9pdGVtcykK
KyAgICAgICAgbV9pdGVtcy0+c2V0KGtleSwgdmFsdWUuc2l6ZUluQnl0ZXMoKSA+IG1heGltdW1T
aXplRm9yVmFsdWVzS2VwdEluTWVtb3J5ID8gU3RyaW5nKCkgOiB2YWx1ZSk7CiB9CiAKIGJvb2wg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsZWFyKCkKQEAgLTI0MCw2ICsyNzUsOSBAQCBib29sIExv
Y2FsU3RvcmFnZURhdGFiYXNlOjpjbGVhcigpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAobV9pdGVtcyAmJiBtX2l0ZW1zLT5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGF1dG8gY2xlYXJTdGF0ZW1l
bnQgPSBzY29wZWRTdGF0ZW1lbnQobV9jbGVhclN0YXRlbWVudCwgIkRFTEVURSBGUk9NIEl0ZW1U
YWJsZSJfcyk7CiAgICAgaWYgKCFjbGVhclN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBwcmVwYXJlIGNsZWFyIHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2Nh
bCBzdG9yYWdlIGRhdGFiYXNlIik7CkBAIC0yNTIsNiArMjkwLDExIEBAIGJvb2wgTG9jYWxTdG9y
YWdlRGF0YWJhc2U6OmNsZWFyKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAg
IGlmIChtX2l0ZW1zKSB7CisgICAgICAgIG1faXRlbXMtPmNsZWFyKCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKwogICAgIHJldHVybiBtX2RhdGFiYXNlLmxhc3RDaGFuZ2VzKCkgPiAw
OwogfQogCkBAIC0yNjksNiArMzEyLDcgQEAgdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xv
c2UoKQogICAgIG1fZ2V0SXRlbVN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgbV9nZXRJdGVtc1N0
YXRlbWVudCA9IG51bGxwdHI7CiAgICAgbV9kZWxldGVJdGVtU3RhdGVtZW50ID0gbnVsbHB0cjsK
KyAgICBtX2l0ZW1zID0gc3RkOjpudWxsb3B0OwogCiAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVu
KCkpCiAgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKQEAgLTI4Myw2ICszMjcsOSBAQCBib29s
IExvY2FsU3RvcmFnZURhdGFiYXNlOjpkYXRhYmFzZUlzRW1wdHkoKSBjb25zdAogICAgIGlmICgh
bV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKG1f
aXRlbXMpCisgICAgICAgIHJldHVybiBtX2l0ZW1zLT5pc0VtcHR5KCk7CisKICAgICBhdXRvIHF1
ZXJ5ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJ
dGVtVGFibGUiX3MpOwogICAgIGlmICghcXVlcnkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gY291bnQgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdl
Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
TG9jYWxTdG9yYWdlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2Vi
U3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCmluZGV4IGU0MTc4ODY1YzcwMTYxZDUzMTI1
MTJhYWYzNTdkZjhiMDExNGRmN2QuLmNlNWE4MTdiYzU3YmFmYmI2YzU4NGNkMWUzNGMzZDM0OTdk
Y2QxMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCkBAIC02Miw2ICs2Miw4IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKTsKICAgICBib29sIGRh
dGFiYXNlSXNFbXB0eSgpIGNvbnN0OwogCisgICAgU3RyaW5nIGl0ZW1CeXBhc3NpbmdDYWNoZShj
b25zdCBTdHJpbmcmIGtleSkgY29uc3Q7CisKICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRB
dXRvUmVzZXRTY29wZSBzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudD4mLCBBU0NJSUxpdGVyYWwgcXVlcnkpIGNvbnN0OwogCiAgICAgU3RyaW5n
IG1fZGF0YWJhc2VQYXRoOwpAQCAtNjksNiArNzEsMTMgQEAgcHJpdmF0ZToKICAgICBjb25zdCB1
bnNpZ25lZCBtX3F1b3RhSW5CeXRlcyB7IDAgfTsKICAgICBib29sIG1faXNDbG9zZWQgeyBmYWxz
ZSB9OwogCisgICAgLy8gQ2FjaGVkIHZlcnNpb24gb2YgdGhlIGl0ZW1zIGluIG1lbW9yeS4KKyAg
ICAvLyBJZiB0aGUgdmFsdWUgaXMgdG9vIGxhcmdlIHRvIGtlZXAgaW4gbWVtb3J5LCB3ZSBzdG9y
ZSBhIG51bGwgU3RyaW5nLiBXZSB1c2Ugc3RkOjpvcHRpb25hbDw+IGZvciB0aGUKKyAgICAvLyB2
YWx1ZSB0byBkaXN0aW5ndWlzaCB0aGUga2V5IGJlaW5nIG1pc3NpbmcgdnMgdGhlIGtleSBiZWlu
ZyBwcmVzZW50IGJ1dCBpdHMgdmFsdWUgbm90IGJlaW5nIHN0b3JlZCBpbgorICAgIC8vIG1lbW9y
eS4KKyAgICB1c2luZyBDYWNoZWRJdGVtc01hcCA9IEhhc2hNYXA8U3RyaW5nLCBzdGQ6Om9wdGlv
bmFsPFN0cmluZz4+OworICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxDYWNoZWRJdGVtc01hcD4g
bV9pdGVtczsKKwogICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudD4gbV9jbGVhclN0YXRlbWVudDsKICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faW5zZXJ0U3RhdGVtZW50OwogICAgIG11dGFibGUg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRJdGVtU3RhdGVt
ZW50Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431122</attachid>
            <date>2021-06-10 13:51:08 -0700</date>
            <delta_ts>2021-06-10 15:43:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226832-20210610135107.patch</filename>
            <type>text/plain</type>
            <size>8335</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGJmZGRmODkwNmNiODg1Zjcx
ODQyMjg5ZTdmYmM0MDkzYjJjMjIwM2UuLjE3Zjg3MTIwYjY3NjUwODlhNWI2MDRjY2I1MDEyZWEw
NDA1MGEwNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMjEtMDYtMTAgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZWdyZXNzaW9uKHIyNzY2NTMpIFdl
J3JlIGdvaW5nIHRvIGRpc2sgbW9yZSBvZnRlbiBmb3IgbG9jYWwgc3RvcmFnZSBvcGVyYXRpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4MzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSdyZSBn
b2luZyB0byBkaXNrIG1vcmUgb2Z0ZW4gZm9yIGxvY2FsIHN0b3JhZ2Ugb3BlcmF0aW9ucyBzaW5j
ZSByMjc2NjUzIGJlY2F1c2Ugd2Ugbm8KKyAgICAgICAgbG9uZ2VyIGtlZXAgaXRlbXMgaW4gbWVt
b3J5LiBUaGlzIHJlc3VsdHMgaW4gYSBzbGlnaHRseSBpbmNyZWFzZWQgcG93ZXIgdXNhZ2Ugb24g
b25lIG9mCisgICAgICAgIG91ciBiZW5jaG1hcmtzLiBBcyBhIGZpcnN0IHN0ZXAgdG8gaW1wcm92
ZSB0aGlzLCBJIGFtIHJlaW50cm9kdWNpbmcgYSBjYWNoZSBvZiB0aGUgaXRlbXMKKyAgICAgICAg
aW4gbWVtb3J5LCBhcyBsb25nIGFzIHRoZSB2YWx1ZXMgYXJlIG5vdCB0b28gbGFyZ2UgKDFLYiBs
aW1pdCkuIFdlIHN0aWxsIGdvIHRvIGRpc2sgdG8KKyAgICAgICAgbG9vayB1cCB2YWx1ZXMgdGhh
dCBhcmUgbGFyZ2VyIHRoYW4gMUtiIHRvIGF2b2lkIHJlZ3Jlc3NpbmcgbWVtb3J5IHVzYWdlLgor
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFz
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuRGF0YWJh
c2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6aXRlbXMgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6cmVtb3ZlSXRlbSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjppdGVtIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6Oml0ZW1CeXBhc3NpbmdDYWNoZSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpzZXRJdGVtKToKKyAg
ICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsZWFyKToKKyAgICAgICAgKFdl
YktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TG9j
YWxTdG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSBjb25zdCk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oOgorCiAyMDIxLTA2
LTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRG8gc29tZSBo
YXJkZW5pbmcgaW4gWFBDU2VydmljZUV2ZW50SGFuZGxlcigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3Bw
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURh
dGFiYXNlLmNwcAppbmRleCA0YTYzNzVjY2FkZDYxOTA3NTE0YzM0MTkwY2IwYmE5Zjc0NjQ2YTUx
Li43N2ZiMDBjMzBhMDg1M2Y3N2NhNGNjNTgzODhlYTBkMGY3ZDc3YmIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VEYXRhYmFzZS5jcHAKQEAgLTM4LDcgKzM4LDggQEAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLXN0YXRpYyBjb25zdCBBU0NJSUxpdGVyYWwg
Z2V0SXRlbXNRdWVyeVN0cmluZyB7ICJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSJf
cyB9Oworc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgZ2V0SXRlbXNRdWVyeVN0cmluZyB7
ICJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSJfcyB9OworY29uc3RleHByIHVuc2ln
bmVkIG1heGltdW1TaXplRm9yVmFsdWVzS2VwdEluTWVtb3J5IHsgMTAyNCB9OyAvLyAxIEtCCiAK
IFJlZjxMb2NhbFN0b3JhZ2VEYXRhYmFzZT4gTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShT
dHJpbmcmJiBkYXRhYmFzZVBhdGgsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKIHsKQEAgLTYxLDgg
KzYyLDExIEBAIExvY2FsU3RvcmFnZURhdGFiYXNlOjp+TG9jYWxTdG9yYWdlRGF0YWJhc2UoKQog
Ym9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKFNob3VsZENyZWF0ZURhdGFi
YXNlIHNob3VsZENyZWF0ZURhdGFiYXNlKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhtX2RhdGFiYXNlUGF0aCkgJiYg
c2hvdWxkQ3JlYXRlRGF0YWJhc2UgPT0gU2hvdWxkQ3JlYXRlRGF0YWJhc2U6Ok5vKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobV9kYXRhYmFz
ZVBhdGgpKSB7CisgICAgICAgIGlmIChzaG91bGRDcmVhdGVEYXRhYmFzZSA9PSBTaG91bGRDcmVh
dGVEYXRhYmFzZTo6Tm8pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgbV9pdGVt
cyA9IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsgfTsKKyAgICB9CiAKICAgICBpZiAobV9kYXRh
YmFzZVBhdGguaXNFbXB0eSgpKSB7CiAgICAgICAgIExPR19FUlJPUigiRmlsZW5hbWUgZm9yIGxv
Y2FsIHN0b3JhZ2UgZGF0YWJhc2UgaXMgZW1wdHkgLSBjYW5ub3Qgb3BlbiBmb3IgcGVyc2lzdGVu
dCBzdG9yYWdlIik7CkBAIC0xNDAsMTkgKzE0NCwzMCBAQCBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6aXRlbXMoKSBjb25zdAogICAgIGlmICghbV9kYXRhYmFz
ZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAorICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IGl0ZW1zOworICAgIGlmIChtX2l0ZW1zKSB7CisgICAgICAgIGZvciAoYXV0byYgcGFp
ciA6ICptX2l0ZW1zKSB7CisgICAgICAgICAgICBhdXRvIHZhbHVlID0gcGFpci52YWx1ZS5pc051
bGwoKSA/IGl0ZW1CeXBhc3NpbmdDYWNoZShwYWlyLmtleSkgOiBwYWlyLnZhbHVlOworICAgICAg
ICAgICAgaXRlbXMuYWRkKHBhaXIua2V5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGl0ZW1zOworICAgIH0KKwogICAgIGF1dG8gcXVlcnkgPSBzY29wZWRTdGF0
ZW1lbnQobV9nZXRJdGVtc1N0YXRlbWVudCwgZ2V0SXRlbXNRdWVyeVN0cmluZyk7CiAgICAgaWYg
KCFxdWVyeSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZWxlY3QgaXRlbXMgZnJv
bSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBpdGVtczsKKyAgICBtX2l0ZW1zID0g
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4geyB9OwogICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3Rl
cCgpOwogICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewogICAgICAgICBTdHJpbmcg
a2V5ID0gcXVlcnktPmNvbHVtblRleHQoMCk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHF1ZXJ5
LT5jb2x1bW5CbG9iQXNTdHJpbmcoMSk7Ci0gICAgICAgIGlmICgha2V5LmlzTnVsbCgpICYmICF2
YWx1ZS5pc051bGwoKSkKKyAgICAgICAgaWYgKCFrZXkuaXNOdWxsKCkgJiYgIXZhbHVlLmlzTnVs
bCgpKSB7CisgICAgICAgICAgICBtX2l0ZW1zLT5hZGQoa2V5LCB2YWx1ZS5zaXplSW5CeXRlcygp
ID4gbWF4aW11bVNpemVGb3JWYWx1ZXNLZXB0SW5NZW1vcnkgPyBTdHJpbmcoKSA6IHZhbHVlKTsK
ICAgICAgICAgICAgIGl0ZW1zLmFkZChXVEZNb3ZlKGtleSksIFdURk1vdmUodmFsdWUpKTsKKyAg
ICAgICAgfQogICAgICAgICByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAgIH0KIApAQCAtMTg0
LDYgKzE5OSw5IEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnJlbW92ZUl0ZW0oY29uc3Qg
U3RyaW5nJiBrZXksIFN0cmluZyYgb2xkVmFsdWUpCiAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIGRlbGV0ZSBpdGVtIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1
bHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKG1faXRlbXMpCisgICAgICAg
IG1faXRlbXMtPnJlbW92ZShrZXkpOwogfQogCiBTdHJpbmcgTG9jYWxTdG9yYWdlRGF0YWJhc2U6
Oml0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CkBAIC0xOTIsNiArMjEwLDIwIEBAIFN0cmlu
ZyBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6aXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKICAg
ICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKKyAgICBp
ZiAobV9pdGVtcykgeworICAgICAgICAvLyBVc2UgZmluZCgpIGluc3RlYWQgb2YgZ2V0KCkgc2lu
Y2UgYSBudWxsIFN0cmluZyBpcyBhIHZhbGlkIHZhbHVlIGhlcmUuCisgICAgICAgIGF1dG8gaXQg
PSBtX2l0ZW1zLT5maW5kKGtleSk7CisgICAgICAgIGlmIChpdCAhPSBtX2l0ZW1zLT5lbmQoKSkK
KyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGlmICghaXQtPnZhbHVlLmlzTnVsbCgp
KQorICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKKyAgICAgICAgLy8gVGhlIHZhbHVlIGlz
IHRvbyBsYXJnZSBhbmQgbmVlZHMgdG8gYmUgZmV0Y2hlZCBmcm9tIHRoZSBkYXRhYmFzZS4KKyAg
ICB9CisgICAgcmV0dXJuIGl0ZW1CeXBhc3NpbmdDYWNoZShrZXkpOworfQorCitTdHJpbmcgTG9j
YWxTdG9yYWdlRGF0YWJhc2U6Oml0ZW1CeXBhc3NpbmdDYWNoZShjb25zdCBTdHJpbmcmIGtleSkg
Y29uc3QKK3sKICAgICBhdXRvIHF1ZXJ5ID0gc2NvcGVkU3RhdGVtZW50KG1fZ2V0SXRlbVN0YXRl
bWVudCwgIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyJfcyk7CiAgICAg
aWYgKCFxdWVyeSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBnZXQgaXRlbSBmcm9t
IEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOwpAQCAtMjMxLDcgKzI2MywxMSBAQCB2b2lk
IExvY2FsU3RvcmFnZURhdGFiYXNlOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBTdHJpbgogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUg
aXRlbSBpbiB0aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRlVMTCkKICAgICAgICAgICAgIHF1b3RhRXhjZXB0aW9u
ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChtX2l0ZW1zKQorICAg
ICAgICBtX2l0ZW1zLT5zZXQoa2V5LCB2YWx1ZS5zaXplSW5CeXRlcygpID4gbWF4aW11bVNpemVG
b3JWYWx1ZXNLZXB0SW5NZW1vcnkgPyBTdHJpbmcoKSA6IHZhbHVlKTsKIH0KIAogYm9vbCBMb2Nh
bFN0b3JhZ2VEYXRhYmFzZTo6Y2xlYXIoKQpAQCAtMjQwLDYgKzI3Niw5IEBAIGJvb2wgTG9jYWxT
dG9yYWdlRGF0YWJhc2U6OmNsZWFyKCkKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChtX2l0ZW1zICYmIG1faXRlbXMtPmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgYXV0byBjbGVhclN0YXRlbWVudCA9
IHNjb3BlZFN0YXRlbWVudChtX2NsZWFyU3RhdGVtZW50LCAiREVMRVRFIEZST00gSXRlbVRhYmxl
Il9zKTsKICAgICBpZiAoIWNsZWFyU3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHByZXBhcmUgY2xlYXIgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0
b3JhZ2UgZGF0YWJhc2UiKTsKQEAgLTI1Miw2ICsyOTEsMTEgQEAgYm9vbCBMb2NhbFN0b3JhZ2VE
YXRhYmFzZTo6Y2xlYXIoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgaWYg
KG1faXRlbXMpIHsKKyAgICAgICAgbV9pdGVtcy0+Y2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCiAgICAgcmV0dXJuIG1fZGF0YWJhc2UubGFzdENoYW5nZXMoKSA+IDA7CiB9
CiAKQEAgLTI2OSw2ICszMTMsNyBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpjbG9zZSgp
CiAgICAgbV9nZXRJdGVtU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICBtX2dldEl0ZW1zU3RhdGVt
ZW50ID0gbnVsbHB0cjsKICAgICBtX2RlbGV0ZUl0ZW1TdGF0ZW1lbnQgPSBudWxscHRyOworICAg
IG1faXRlbXMgPSBzdGQ6Om51bGxvcHQ7CiAKICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkK
ICAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwpAQCAtMjgzLDYgKzMyOCw5IEBAIGJvb2wgTG9j
YWxTdG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSgpIGNvbnN0CiAgICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAobV9pdGVt
cykKKyAgICAgICAgcmV0dXJuIG1faXRlbXMtPmlzRW1wdHkoKTsKKwogICAgIGF1dG8gcXVlcnkg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1U
YWJsZSJfcyk7CiAgICAgaWYgKCFxdWVyeSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0
byBjb3VudCBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VEYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9y
YWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmgKaW5kZXggZTQxNzg4NjVjNzAxNjFkNTMxMjUxMmFh
ZjM1N2RmOGIwMTE0ZGY3ZC4uNjMxNTVlMGZhMzkzMjAzNzVlZDFiYmNkMmVjMDM4M2RiNTk4OTdl
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xv
Y2FsU3RvcmFnZURhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmgKQEAgLTYyLDYgKzYyLDggQEAgcHJpdmF0
ZToKICAgICBib29sIG1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCgpOwogICAgIGJvb2wgZGF0YWJh
c2VJc0VtcHR5KCkgY29uc3Q7CiAKKyAgICBTdHJpbmcgaXRlbUJ5cGFzc2luZ0NhY2hlKGNvbnN0
IFN0cmluZyYga2V5KSBjb25zdDsKKwogICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9S
ZXNldFNjb3BlIHNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiYsIEFTQ0lJTGl0ZXJhbCBxdWVyeSkgY29uc3Q7CiAKICAgICBTdHJpbmcgbV9k
YXRhYmFzZVBhdGg7CkBAIC02OSw2ICs3MSwxMCBAQCBwcml2YXRlOgogICAgIGNvbnN0IHVuc2ln
bmVkIG1fcXVvdGFJbkJ5dGVzIHsgMCB9OwogICAgIGJvb2wgbV9pc0Nsb3NlZCB7IGZhbHNlIH07
CiAKKyAgICAvLyBDYWNoZWQgdmVyc2lvbiBvZiB0aGUgaXRlbXMgaW4gbWVtb3J5LgorICAgIC8v
IElmIHRoZSB2YWx1ZSBpcyB0b28gbGFyZ2UgdG8ga2VlcCBpbiBtZW1vcnksIHdlIHN0b3JlIGEg
bnVsbCBTdHJpbmcuCisgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+PiBtX2l0ZW1zOworCiAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50PiBtX2NsZWFyU3RhdGVtZW50OwogICAgIG11dGFibGUgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pbnNlcnRTdGF0ZW1lbnQ7CiAgICAg
bXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2dldEl0
ZW1TdGF0ZW1lbnQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431149</attachid>
            <date>2021-06-10 15:43:02 -0700</date>
            <delta_ts>2021-06-11 13:08:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226832-20210610154301.patch</filename>
            <type>text/plain</type>
            <size>8387</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NzM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZjNjJlYjMyZWRlMTM2YzA1
M2ZhNmM4Y2MzODQ4NDUyOGM4MjAzMDUuLjQxNjIzOTU5NTJkZDQ5Y2YxMmU5MDI1MDk2MmFhYTli
NWJiMWRiNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMjEtMDYtMTAgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZWdyZXNzaW9uKHIyNzY2NTMpIFdl
J3JlIGdvaW5nIHRvIGRpc2sgbW9yZSBvZnRlbiBmb3IgbG9jYWwgc3RvcmFnZSBvcGVyYXRpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4MzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSdyZSBn
b2luZyB0byBkaXNrIG1vcmUgb2Z0ZW4gZm9yIGxvY2FsIHN0b3JhZ2Ugb3BlcmF0aW9ucyBzaW5j
ZSByMjc2NjUzIGJlY2F1c2Ugd2Ugbm8KKyAgICAgICAgbG9uZ2VyIGtlZXAgaXRlbXMgaW4gbWVt
b3J5LiBUaGlzIHJlc3VsdHMgaW4gYSBzbGlnaHRseSBpbmNyZWFzZWQgcG93ZXIgdXNhZ2Ugb24g
b25lIG9mCisgICAgICAgIG91ciBiZW5jaG1hcmtzLiBBcyBhIGZpcnN0IHN0ZXAgdG8gaW1wcm92
ZSB0aGlzLCBJIGFtIHJlaW50cm9kdWNpbmcgYSBjYWNoZSBvZiB0aGUgaXRlbXMKKyAgICAgICAg
aW4gbWVtb3J5LCBhcyBsb25nIGFzIHRoZSB2YWx1ZXMgYXJlIG5vdCB0b28gbGFyZ2UgKDFLYiBs
aW1pdCkuIFdlIHN0aWxsIGdvIHRvIGRpc2sgdG8KKyAgICAgICAgbG9vayB1cCB2YWx1ZXMgdGhh
dCBhcmUgbGFyZ2VyIHRoYW4gMUtiIHRvIGF2b2lkIHJlZ3Jlc3NpbmcgbWVtb3J5IHVzYWdlLgor
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFz
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuRGF0YWJh
c2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6aXRlbXMgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6cmVtb3ZlSXRlbSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjppdGVtIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6Oml0ZW1CeXBhc3NpbmdDYWNoZSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpzZXRJdGVtKToKKyAg
ICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsZWFyKToKKyAgICAgICAgKFdl
YktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TG9j
YWxTdG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSBjb25zdCk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oOgorCiAyMDIxLTA2
LTEwICBBZGl0eWEgS2VlcnRoaSAgPGFrZWVydGhpQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9T
XSBWaW55bFdhbGwgYXBwIGNyYXNoZXMgd2hlbiB0YXBwaW5nIG9uICdmb3JtYXQnIGRyb3Bkb3du
IG1lbnUgaW4gJ0FkZCBSZWNvcmQnIG1lbnUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3Bw
CmluZGV4IDRhNjM3NWNjYWRkNjE5MDc1MTRjMzQxOTBjYjBiYTlmNzQ2NDZhNTEuLmYyNDcyMzUy
ZWQwY2Y3Yzg0OTQwZjFmNWY3YjE4OWE4NWYzZGUzMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURh
dGFiYXNlLmNwcApAQCAtMzgsNyArMzgsOCBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAotc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBnZXRJdGVtc1F1
ZXJ5U3RyaW5nIHsgIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIl9zIH07CitzdGF0
aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBnZXRJdGVtc1F1ZXJ5U3RyaW5nIHsgIlNFTEVDVCBr
ZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIl9zIH07Citjb25zdGV4cHIgdW5zaWduZWQgbWF4aW11
bVNpemVGb3JWYWx1ZXNLZXB0SW5NZW1vcnkgeyAxMDI0IH07IC8vIDEgS0IKIAogUmVmPExvY2Fs
U3RvcmFnZURhdGFiYXNlPiBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y3JlYXRlKFN0cmluZyYmIGRh
dGFiYXNlUGF0aCwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKQogewpAQCAtNjEsOCArNjIsMTEgQEAg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6On5Mb2NhbFN0b3JhZ2VEYXRhYmFzZSgpCiBib29sIExvY2Fs
U3RvcmFnZURhdGFiYXNlOjpvcGVuRGF0YWJhc2UoU2hvdWxkQ3JlYXRlRGF0YWJhc2Ugc2hvdWxk
Q3JlYXRlRGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAg
aWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKG1fZGF0YWJhc2VQYXRoKSAmJiBzaG91bGRDcmVh
dGVEYXRhYmFzZSA9PSBTaG91bGRDcmVhdGVEYXRhYmFzZTo6Tm8pCi0gICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhtX2RhdGFiYXNlUGF0aCkpIHsK
KyAgICAgICAgaWYgKHNob3VsZENyZWF0ZURhdGFiYXNlID09IFNob3VsZENyZWF0ZURhdGFiYXNl
OjpObykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBtX2l0ZW1zID0gSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4geyB9OworICAgIH0KIAogICAgIGlmIChtX2RhdGFiYXNlUGF0aC5p
c0VtcHR5KCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGaWxlbmFtZSBmb3IgbG9jYWwgc3RvcmFn
ZSBkYXRhYmFzZSBpcyBlbXB0eSAtIGNhbm5vdCBvcGVuIGZvciBwZXJzaXN0ZW50IHN0b3JhZ2Ui
KTsKQEAgLTE0MCwxOSArMTQ0LDMwIEBAIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IExvY2FsU3Rv
cmFnZURhdGFiYXNlOjppdGVtcygpIGNvbnN0CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KQogICAgICAgICByZXR1cm4geyB9OwogCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaXRl
bXM7CisgICAgaWYgKG1faXRlbXMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6ICptX2l0
ZW1zKSB7CisgICAgICAgICAgICBhdXRvIHZhbHVlID0gZW50cnkudmFsdWUuaXNOdWxsKCkgPyBp
dGVtQnlwYXNzaW5nQ2FjaGUoZW50cnkua2V5KSA6IGVudHJ5LnZhbHVlOworICAgICAgICAgICAg
aXRlbXMuYWRkKGVudHJ5LmtleSwgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBpdGVtczsKKyAgICB9CisKICAgICBhdXRvIHF1ZXJ5ID0gc2NvcGVkU3RhdGVtZW50
KG1fZ2V0SXRlbXNTdGF0ZW1lbnQsIGdldEl0ZW1zUXVlcnlTdHJpbmcpOwogICAgIGlmICghcXVl
cnkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gc2VsZWN0IGl0ZW1zIGZyb20gSXRl
bVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaXRlbXM7CisgICAgbV9pdGVtcyA9IEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IHsgfTsKICAgICBpbnQgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsK
ICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKICAgICAgICAgU3RyaW5nIGtleSA9
IHF1ZXJ5LT5jb2x1bW5UZXh0KDApOwogICAgICAgICBTdHJpbmcgdmFsdWUgPSBxdWVyeS0+Y29s
dW1uQmxvYkFzU3RyaW5nKDEpOwotICAgICAgICBpZiAoIWtleS5pc051bGwoKSAmJiAhdmFsdWUu
aXNOdWxsKCkpCisgICAgICAgIGlmICgha2V5LmlzTnVsbCgpICYmICF2YWx1ZS5pc051bGwoKSkg
eworICAgICAgICAgICAgbV9pdGVtcy0+YWRkKGtleSwgdmFsdWUuc2l6ZUluQnl0ZXMoKSA+IG1h
eGltdW1TaXplRm9yVmFsdWVzS2VwdEluTWVtb3J5ID8gU3RyaW5nKCkgOiB2YWx1ZSk7CiAgICAg
ICAgICAgICBpdGVtcy5hZGQoV1RGTW92ZShrZXkpLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAg
IH0KICAgICAgICAgcmVzdWx0ID0gcXVlcnktPnN0ZXAoKTsKICAgICB9CiAKQEAgLTE4NCw2ICsx
OTksOSBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpyZW1vdmVJdGVtKGNvbnN0IFN0cmlu
ZyYga2V5LCBTdHJpbmcmIG9sZFZhbHVlKQogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBk
ZWxldGUgaXRlbSBpbiB0aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChtX2l0ZW1zKQorICAgICAgICBtX2l0
ZW1zLT5yZW1vdmUoa2V5KTsKIH0KIAogU3RyaW5nIExvY2FsU3RvcmFnZURhdGFiYXNlOjppdGVt
KGNvbnN0IFN0cmluZyYga2V5KSBjb25zdApAQCAtMTkyLDYgKzIxMCwyMCBAQCBTdHJpbmcgTG9j
YWxTdG9yYWdlRGF0YWJhc2U6Oml0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiAgICAgaWYg
KCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4geyB9OwogCisgICAgaWYgKG1f
aXRlbXMpIHsKKyAgICAgICAgLy8gVXNlIGZpbmQoKSBpbnN0ZWFkIG9mIGdldCgpIHNpbmNlIGEg
bnVsbCBTdHJpbmcgaXMgYSB2YWxpZCB2YWx1ZSBoZXJlLgorICAgICAgICBhdXRvIGl0ID0gbV9p
dGVtcy0+ZmluZChrZXkpOworICAgICAgICBpZiAoaXQgPT0gbV9pdGVtcy0+ZW5kKCkpCisgICAg
ICAgICAgICByZXR1cm4geyB9OworICAgICAgICBpZiAoIWl0LT52YWx1ZS5pc051bGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CisgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyB0b28g
bGFyZ2UgYW5kIG5lZWRzIHRvIGJlIGZldGNoZWQgZnJvbSB0aGUgZGF0YWJhc2UuCisgICAgfQor
ICAgIHJldHVybiBpdGVtQnlwYXNzaW5nQ2FjaGUoa2V5KTsKK30KKworU3RyaW5nIExvY2FsU3Rv
cmFnZURhdGFiYXNlOjppdGVtQnlwYXNzaW5nQ2FjaGUoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0
Cit7CiAgICAgYXV0byBxdWVyeSA9IHNjb3BlZFN0YXRlbWVudChtX2dldEl0ZW1TdGF0ZW1lbnQs
ICJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iX3MpOwogICAgIGlmICgh
cXVlcnkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZ2V0IGl0ZW0gZnJvbSBJdGVt
VGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKQEAgLTIzMSw3ICsyNjMsMTEgQEAgdm9pZCBMb2Nh
bFN0b3JhZ2VEYXRhYmFzZTo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgU3RyaW4KICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGl0ZW0g
aW4gdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgLSAlaSIsIHJlc3VsdCk7CiAgICAgICAgIGlm
IChyZXN1bHQgPT0gU1FMSVRFX0ZVTEwpCiAgICAgICAgICAgICBxdW90YUV4Y2VwdGlvbiA9IHRy
dWU7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBpZiAobV9pdGVtcykKKyAgICAgICAg
bV9pdGVtcy0+c2V0KGtleSwgdmFsdWUuc2l6ZUluQnl0ZXMoKSA+IG1heGltdW1TaXplRm9yVmFs
dWVzS2VwdEluTWVtb3J5ID8gU3RyaW5nKCkgOiB2YWx1ZSk7CiB9CiAKIGJvb2wgTG9jYWxTdG9y
YWdlRGF0YWJhc2U6OmNsZWFyKCkKQEAgLTI0MCw2ICsyNzYsOSBAQCBib29sIExvY2FsU3RvcmFn
ZURhdGFiYXNlOjpjbGVhcigpCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAobV9pdGVtcyAmJiBtX2l0ZW1zLT5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGF1dG8gY2xlYXJTdGF0ZW1lbnQgPSBzY29w
ZWRTdGF0ZW1lbnQobV9jbGVhclN0YXRlbWVudCwgIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSJfcyk7
CiAgICAgaWYgKCFjbGVhclN0YXRlbWVudCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBwcmVwYXJlIGNsZWFyIHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdl
IGRhdGFiYXNlIik7CkBAIC0yNTIsNiArMjkxLDExIEBAIGJvb2wgTG9jYWxTdG9yYWdlRGF0YWJh
c2U6OmNsZWFyKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIGlmIChtX2l0
ZW1zKSB7CisgICAgICAgIG1faXRlbXMtPmNsZWFyKCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKwogICAgIHJldHVybiBtX2RhdGFiYXNlLmxhc3RDaGFuZ2VzKCkgPiAwOwogfQogCkBA
IC0yNjksNiArMzEzLDcgQEAgdm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y2xvc2UoKQogICAg
IG1fZ2V0SXRlbVN0YXRlbWVudCA9IG51bGxwdHI7CiAgICAgbV9nZXRJdGVtc1N0YXRlbWVudCA9
IG51bGxwdHI7CiAgICAgbV9kZWxldGVJdGVtU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2l0
ZW1zID0gc3RkOjpudWxsb3B0OwogCiAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAg
ICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKQEAgLTI4Myw2ICszMjgsOSBAQCBib29sIExvY2FsU3Rv
cmFnZURhdGFiYXNlOjpkYXRhYmFzZUlzRW1wdHkoKSBjb25zdAogICAgIGlmICghbV9kYXRhYmFz
ZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKG1faXRlbXMpCisg
ICAgICAgIHJldHVybiBtX2l0ZW1zLT5pc0VtcHR5KCk7CisKICAgICBhdXRvIHF1ZXJ5ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVtVGFibGUi
X3MpOwogICAgIGlmICghcXVlcnkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY291
bnQgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9y
YWdlRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9M
b2NhbFN0b3JhZ2VEYXRhYmFzZS5oCmluZGV4IGU0MTc4ODY1YzcwMTYxZDUzMTI1MTJhYWYzNTdk
ZjhiMDExNGRmN2QuLjYzMTU1ZTBmYTM5MzIwMzc1ZWQxYmJjZDJlYzAzODNkYjU5ODk3ZTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0
b3JhZ2VEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oCkBAIC02Miw2ICs2Miw4IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKTsKICAgICBib29sIGRhdGFiYXNlSXNF
bXB0eSgpIGNvbnN0OwogCisgICAgU3RyaW5nIGl0ZW1CeXBhc3NpbmdDYWNoZShjb25zdCBTdHJp
bmcmIGtleSkgY29uc3Q7CisKICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRT
Y29wZSBzY29wZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4mLCBBU0NJSUxpdGVyYWwgcXVlcnkpIGNvbnN0OwogCiAgICAgU3RyaW5nIG1fZGF0YWJh
c2VQYXRoOwpAQCAtNjksNiArNzEsMTAgQEAgcHJpdmF0ZToKICAgICBjb25zdCB1bnNpZ25lZCBt
X3F1b3RhSW5CeXRlcyB7IDAgfTsKICAgICBib29sIG1faXNDbG9zZWQgeyBmYWxzZSB9OwogCisg
ICAgLy8gQ2FjaGVkIHZlcnNpb24gb2YgdGhlIGl0ZW1zIGluIG1lbW9yeS4KKyAgICAvLyBJZiB0
aGUgdmFsdWUgaXMgdG9vIGxhcmdlIHRvIGtlZXAgaW4gbWVtb3J5LCB3ZSBzdG9yZSBhIG51bGwg
U3RyaW5nLgorICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxIYXNoTWFwPFN0cmluZywgU3RyaW5n
Pj4gbV9pdGVtczsKKwogICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudD4gbV9jbGVhclN0YXRlbWVudDsKICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faW5zZXJ0U3RhdGVtZW50OwogICAgIG11dGFi
bGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRJdGVtU3Rh
dGVtZW50Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431226</attachid>
            <date>2021-06-11 13:08:21 -0700</date>
            <delta_ts>2021-06-11 13:34:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226832-20210611130820.patch</filename>
            <type>text/plain</type>
            <size>8389</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4Nzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGZlZTIwNDYxNThjYWE2Mzk1
ZDQ4YTNkMjA0MDRiMTY0Y2QwMDBkZjQuLmMyNzI3MWEwY2M4MzNhYmVjNjAzMDk4M2I0M2VjMzNj
Nzk5MTVkNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMjEtMDYtMTEgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZWdyZXNzaW9uKHIyNzY2NTMpIFdl
J3JlIGdvaW5nIHRvIGRpc2sgbW9yZSBvZnRlbiBmb3IgbG9jYWwgc3RvcmFnZSBvcGVyYXRpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4MzIK
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBXZSdyZSBnb2lu
ZyB0byBkaXNrIG1vcmUgb2Z0ZW4gZm9yIGxvY2FsIHN0b3JhZ2Ugb3BlcmF0aW9ucyBzaW5jZSBy
Mjc2NjUzIGJlY2F1c2Ugd2Ugbm8KKyAgICAgICAgbG9uZ2VyIGtlZXAgaXRlbXMgaW4gbWVtb3J5
LiBUaGlzIHJlc3VsdHMgaW4gYSBzbGlnaHRseSBpbmNyZWFzZWQgcG93ZXIgdXNhZ2Ugb24gb25l
IG9mCisgICAgICAgIG91ciBiZW5jaG1hcmtzLiBBcyBhIGZpcnN0IHN0ZXAgdG8gaW1wcm92ZSB0
aGlzLCBJIGFtIHJlaW50cm9kdWNpbmcgYSBjYWNoZSBvZiB0aGUgaXRlbXMKKyAgICAgICAgaW4g
bWVtb3J5LCBhcyBsb25nIGFzIHRoZSB2YWx1ZXMgYXJlIG5vdCB0b28gbGFyZ2UgKDFLYiBsaW1p
dCkuIFdlIHN0aWxsIGdvIHRvIGRpc2sgdG8KKyAgICAgICAgbG9vayB1cCB2YWx1ZXMgdGhhdCBh
cmUgbGFyZ2VyIHRoYW4gMUtiIHRvIGF2b2lkIHJlZ3Jlc3NpbmcgbWVtb3J5IHVzYWdlLgorCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuRGF0YWJhc2Up
OgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6aXRlbXMgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6cmVtb3ZlSXRlbSk6CisgICAg
ICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjppdGVtIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6Oml0ZW1CeXBhc3NpbmdDYWNoZSBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjpzZXRJdGVtKToKKyAgICAg
ICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsZWFyKToKKyAgICAgICAgKFdlYktp
dDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxT
dG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSBjb25zdCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5oOgorCiAyMDIxLTA2LTEx
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIFdlYlBy
b2Nlc3MnIHJlbGVhc2UgbG9nZ2luZyBpbiBlcGhlbWVyYWwgc2Vzc2lvbnMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRh
YmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxT
dG9yYWdlRGF0YWJhc2UuY3BwCmluZGV4IDRhNjM3NWNjYWRkNjE5MDc1MTRjMzQxOTBjYjBiYTlm
NzQ2NDZhNTEuLjEzN2ViYWIzODZhMmQ3Mzg5NDIwYjllNzE4MTgzNDI5NTcwZjZjOWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9y
YWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcApAQCAtMzgsNyArMzgsOCBAQAogbmFtZXNwYWNl
IFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotc3RhdGljIGNvbnN0IEFTQ0lJ
TGl0ZXJhbCBnZXRJdGVtc1F1ZXJ5U3RyaW5nIHsgIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRl
bVRhYmxlIl9zIH07Citjb25zdGV4cHIgYXV0byBnZXRJdGVtc1F1ZXJ5U3RyaW5nIHsgIlNFTEVD
VCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIl9zIH07Citjb25zdGV4cHIgdW5zaWduZWQgbWF4
aW11bVNpemVGb3JWYWx1ZXNLZXB0SW5NZW1vcnkgeyAxMDI0IH07IC8vIDEgS0IKIAogUmVmPExv
Y2FsU3RvcmFnZURhdGFiYXNlPiBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6Y3JlYXRlKFN0cmluZyYm
IGRhdGFiYXNlUGF0aCwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKQogewpAQCAtNjEsOCArNjIsMTEg
QEAgTG9jYWxTdG9yYWdlRGF0YWJhc2U6On5Mb2NhbFN0b3JhZ2VEYXRhYmFzZSgpCiBib29sIExv
Y2FsU3RvcmFnZURhdGFiYXNlOjpvcGVuRGF0YWJhc2UoU2hvdWxkQ3JlYXRlRGF0YWJhc2Ugc2hv
dWxkQ3JlYXRlRGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0g
ICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKG1fZGF0YWJhc2VQYXRoKSAmJiBzaG91bGRD
cmVhdGVEYXRhYmFzZSA9PSBTaG91bGRDcmVhdGVEYXRhYmFzZTo6Tm8pCi0gICAgICAgIHJldHVy
biB0cnVlOworICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhtX2RhdGFiYXNlUGF0aCkp
IHsKKyAgICAgICAgaWYgKHNob3VsZENyZWF0ZURhdGFiYXNlID09IFNob3VsZENyZWF0ZURhdGFi
YXNlOjpObykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBtX2l0ZW1zID0gSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4geyB9OworICAgIH0KIAogICAgIGlmIChtX2RhdGFiYXNlUGF0
aC5pc0VtcHR5KCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGaWxlbmFtZSBmb3IgbG9jYWwgc3Rv
cmFnZSBkYXRhYmFzZSBpcyBlbXB0eSAtIGNhbm5vdCBvcGVuIGZvciBwZXJzaXN0ZW50IHN0b3Jh
Z2UiKTsKQEAgLTE0MCwxOSArMTQ0LDMxIEBAIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IExvY2Fs
U3RvcmFnZURhdGFiYXNlOjppdGVtcygpIGNvbnN0CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Bl
bigpKQogICAgICAgICByZXR1cm4geyB9OwogCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4g
aXRlbXM7CisgICAgaWYgKG1faXRlbXMpIHsKKyAgICAgICAgaXRlbXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShtX2l0ZW1zLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKm1f
aXRlbXMpIHsKKyAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBlbnRyeS52YWx1ZS5pc051bGwoKSA/
IGl0ZW1CeXBhc3NpbmdDYWNoZShlbnRyeS5rZXkpIDogZW50cnkudmFsdWU7CisgICAgICAgICAg
ICBpdGVtcy5hZGQoZW50cnkua2V5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGl0ZW1zOworICAgIH0KKwogICAgIGF1dG8gcXVlcnkgPSBzY29wZWRTdGF0ZW1l
bnQobV9nZXRJdGVtc1N0YXRlbWVudCwgZ2V0SXRlbXNRdWVyeVN0cmluZyk7CiAgICAgaWYgKCFx
dWVyeSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZWxlY3QgaXRlbXMgZnJvbSBJ
dGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CiAKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBpdGVtczsKKyAgICBtX2l0ZW1zID0gSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4geyB9OwogICAgIGludCByZXN1bHQgPSBxdWVyeS0+c3RlcCgp
OwogICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewogICAgICAgICBTdHJpbmcga2V5
ID0gcXVlcnktPmNvbHVtblRleHQoMCk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHF1ZXJ5LT5j
b2x1bW5CbG9iQXNTdHJpbmcoMSk7Ci0gICAgICAgIGlmICgha2V5LmlzTnVsbCgpICYmICF2YWx1
ZS5pc051bGwoKSkKKyAgICAgICAgaWYgKCFrZXkuaXNOdWxsKCkgJiYgIXZhbHVlLmlzTnVsbCgp
KSB7CisgICAgICAgICAgICBtX2l0ZW1zLT5hZGQoa2V5LCB2YWx1ZS5zaXplSW5CeXRlcygpID4g
bWF4aW11bVNpemVGb3JWYWx1ZXNLZXB0SW5NZW1vcnkgPyBTdHJpbmcoKSA6IHZhbHVlKTsKICAg
ICAgICAgICAgIGl0ZW1zLmFkZChXVEZNb3ZlKGtleSksIFdURk1vdmUodmFsdWUpKTsKKyAgICAg
ICAgfQogICAgICAgICByZXN1bHQgPSBxdWVyeS0+c3RlcCgpOwogICAgIH0KIApAQCAtMTg0LDYg
KzIwMCw5IEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnJlbW92ZUl0ZW0oY29uc3QgU3Ry
aW5nJiBrZXksIFN0cmluZyYgb2xkVmFsdWUpCiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGRlbGV0ZSBpdGVtIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKG1faXRlbXMpCisgICAgICAgIG1f
aXRlbXMtPnJlbW92ZShrZXkpOwogfQogCiBTdHJpbmcgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Oml0
ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CkBAIC0xOTIsNiArMjExLDIwIEBAIFN0cmluZyBM
b2NhbFN0b3JhZ2VEYXRhYmFzZTo6aXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKICAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKKyAgICBpZiAo
bV9pdGVtcykgeworICAgICAgICAvLyBVc2UgZmluZCgpIGluc3RlYWQgb2YgZ2V0KCkgc2luY2Ug
YSBudWxsIFN0cmluZyBpcyBhIHZhbGlkIHZhbHVlIGhlcmUuCisgICAgICAgIGF1dG8gaXQgPSBt
X2l0ZW1zLT5maW5kKGtleSk7CisgICAgICAgIGlmIChpdCA9PSBtX2l0ZW1zLT5lbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGlmICghaXQtPnZhbHVlLmlzTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKKyAgICAgICAgLy8gVGhlIHZhbHVlIGlzIHRv
byBsYXJnZSBhbmQgbmVlZHMgdG8gYmUgZmV0Y2hlZCBmcm9tIHRoZSBkYXRhYmFzZS4KKyAgICB9
CisgICAgcmV0dXJuIGl0ZW1CeXBhc3NpbmdDYWNoZShrZXkpOworfQorCitTdHJpbmcgTG9jYWxT
dG9yYWdlRGF0YWJhc2U6Oml0ZW1CeXBhc3NpbmdDYWNoZShjb25zdCBTdHJpbmcmIGtleSkgY29u
c3QKK3sKICAgICBhdXRvIHF1ZXJ5ID0gc2NvcGVkU3RhdGVtZW50KG1fZ2V0SXRlbVN0YXRlbWVu
dCwgIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyJfcyk7CiAgICAgaWYg
KCFxdWVyeSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBnZXQgaXRlbSBmcm9tIEl0
ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOwpAQCAtMjMxLDcgKzI2NCwxMSBAQCB2b2lkIExv
Y2FsU3RvcmFnZURhdGFiYXNlOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBTdHJpbgogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgaXRl
bSBpbiB0aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKICAgICAgICAg
aWYgKHJlc3VsdCA9PSBTUUxJVEVfRlVMTCkKICAgICAgICAgICAgIHF1b3RhRXhjZXB0aW9uID0g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmIChtX2l0ZW1zKQorICAgICAg
ICBtX2l0ZW1zLT5zZXQoa2V5LCB2YWx1ZS5zaXplSW5CeXRlcygpID4gbWF4aW11bVNpemVGb3JW
YWx1ZXNLZXB0SW5NZW1vcnkgPyBTdHJpbmcoKSA6IHZhbHVlKTsKIH0KIAogYm9vbCBMb2NhbFN0
b3JhZ2VEYXRhYmFzZTo6Y2xlYXIoKQpAQCAtMjQwLDYgKzI3Nyw5IEBAIGJvb2wgTG9jYWxTdG9y
YWdlRGF0YWJhc2U6OmNsZWFyKCkKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChtX2l0ZW1zICYmIG1faXRlbXMtPmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgYXV0byBjbGVhclN0YXRlbWVudCA9IHNj
b3BlZFN0YXRlbWVudChtX2NsZWFyU3RhdGVtZW50LCAiREVMRVRFIEZST00gSXRlbVRhYmxlIl9z
KTsKICAgICBpZiAoIWNsZWFyU3RhdGVtZW50KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHByZXBhcmUgY2xlYXIgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0b3Jh
Z2UgZGF0YWJhc2UiKTsKQEAgLTI1Miw2ICsyOTIsMTEgQEAgYm9vbCBMb2NhbFN0b3JhZ2VEYXRh
YmFzZTo6Y2xlYXIoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgaWYgKG1f
aXRlbXMpIHsKKyAgICAgICAgbV9pdGVtcy0+Y2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCiAgICAgcmV0dXJuIG1fZGF0YWJhc2UubGFzdENoYW5nZXMoKSA+IDA7CiB9CiAK
QEAgLTI2OSw2ICszMTQsNyBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjpjbG9zZSgpCiAg
ICAgbV9nZXRJdGVtU3RhdGVtZW50ID0gbnVsbHB0cjsKICAgICBtX2dldEl0ZW1zU3RhdGVtZW50
ID0gbnVsbHB0cjsKICAgICBtX2RlbGV0ZUl0ZW1TdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1f
aXRlbXMgPSBzdGQ6Om51bGxvcHQ7CiAKICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKICAg
ICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwpAQCAtMjgzLDYgKzMyOSw5IEBAIGJvb2wgTG9jYWxT
dG9yYWdlRGF0YWJhc2U6OmRhdGFiYXNlSXNFbXB0eSgpIGNvbnN0CiAgICAgaWYgKCFtX2RhdGFi
YXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAobV9pdGVtcykK
KyAgICAgICAgcmV0dXJuIG1faXRlbXMtPmlzRW1wdHkoKTsKKwogICAgIGF1dG8gcXVlcnkgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJs
ZSJfcyk7CiAgICAgaWYgKCFxdWVyeSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBj
b3VudCBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0
b3JhZ2VEYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L0xvY2FsU3RvcmFnZURhdGFiYXNlLmgKaW5kZXggZTQxNzg4NjVjNzAxNjFkNTMxMjUxMmFhZjM1
N2RmOGIwMTE0ZGY3ZC4uNjMxNTVlMGZhMzkzMjAzNzVlZDFiYmNkMmVjMDM4M2RiNTk4OTdlMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2Fs
U3RvcmFnZURhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmgKQEAgLTYyLDYgKzYyLDggQEAgcHJpdmF0ZToK
ICAgICBib29sIG1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCgpOwogICAgIGJvb2wgZGF0YWJhc2VJ
c0VtcHR5KCkgY29uc3Q7CiAKKyAgICBTdHJpbmcgaXRlbUJ5cGFzc2luZ0NhY2hlKGNvbnN0IFN0
cmluZyYga2V5KSBjb25zdDsKKwogICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNl
dFNjb3BlIHNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50PiYsIEFTQ0lJTGl0ZXJhbCBxdWVyeSkgY29uc3Q7CiAKICAgICBTdHJpbmcgbV9kYXRh
YmFzZVBhdGg7CkBAIC02OSw2ICs3MSwxMCBAQCBwcml2YXRlOgogICAgIGNvbnN0IHVuc2lnbmVk
IG1fcXVvdGFJbkJ5dGVzIHsgMCB9OwogICAgIGJvb2wgbV9pc0Nsb3NlZCB7IGZhbHNlIH07CiAK
KyAgICAvLyBDYWNoZWQgdmVyc2lvbiBvZiB0aGUgaXRlbXMgaW4gbWVtb3J5LgorICAgIC8vIElm
IHRoZSB2YWx1ZSBpcyB0b28gbGFyZ2UgdG8ga2VlcCBpbiBtZW1vcnksIHdlIHN0b3JlIGEgbnVs
bCBTdHJpbmcuCisgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+PiBtX2l0ZW1zOworCiAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiBtX2NsZWFyU3RhdGVtZW50OwogICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pbnNlcnRTdGF0ZW1lbnQ7CiAgICAgbXV0
YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2dldEl0ZW1T
dGF0ZW1lbnQ7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>