<?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>239370</bug_id>
          
          <creation_ts>2022-04-14 20:06:57 -0700</creation_ts>
          <short_desc>Replace complex String::insert() with a simplified makeStringByInserting() free function</short_desc>
          <delta_ts>2022-04-16 13:33:15 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>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>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mifenton</cc>
    
    <cc>philipj</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1861701</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-14 20:06:57 -0700</bug_when>
    <thetext>Simplify String::insert() implementation and reduce usage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861703</commentid>
    <comment_count>1</comment_count>
      <attachid>457668</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-14 20:10:40 -0700</bug_when>
    <thetext>Created attachment 457668
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861715</commentid>
    <comment_count>2</comment_count>
      <attachid>457673</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-14 21:54:41 -0700</bug_when>
    <thetext>Created attachment 457673
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861907</commentid>
    <comment_count>3</comment_count>
      <attachid>457673</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-15 14:06:50 -0700</bug_when>
    <thetext>Comment on attachment 457673
Patch

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

&gt; Source/WTF/ChangeLog:8
&gt; +        Simplify String::insert() implementation and reduce usage.

What uses remain?

&gt; Source/WebCore/dom/CharacterData.cpp:170
&gt; +    StringView oldDataView { m_data };
&gt; +    auto newData = makeString(oldDataView.left(offset), data, oldDataView.substring(offset + count));

Should we add a special case for when count is 0 and data is empty?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861926</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-15 14:56:18 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Comment on attachment 457673 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=457673&amp;action=review
&gt; 
&gt; &gt; Source/WTF/ChangeLog:8
&gt; &gt; +        Simplify String::insert() implementation and reduce usage.
&gt; 
&gt; What uses remain?

Not many:
Source/WebCore/Modules/mediasource/MediaSource.cpp:        rawType.insert1(&quot;.00&quot;_s, position + codec.length());
Source/WebCore/dom/CharacterData.cpp:    newData.insert1(data, offset);
Source/WebCore/html/HTMLTextFormControlElement.cpp:        text.insert1(replacement, start);

&gt; &gt; Source/WebCore/dom/CharacterData.cpp:170
&gt; &gt; +    StringView oldDataView { m_data };
&gt; &gt; +    auto newData = makeString(oldDataView.left(offset), data, oldDataView.substring(offset + count));
&gt; 
&gt; Should we add a special case for when count is 0 and data is empty?

Need to think more about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861928</commentid>
    <comment_count>5</comment_count>
      <attachid>457673</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-15 14:59:56 -0700</bug_when>
    <thetext>Comment on attachment 457673
Patch

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

&gt;&gt;&gt; Source/WTF/ChangeLog:8
&gt;&gt;&gt; +        Simplify String::insert() implementation and reduce usage.
&gt;&gt; 
&gt;&gt; What uses remain?
&gt; 
&gt; Not many:
&gt; Source/WebCore/Modules/mediasource/MediaSource.cpp:        rawType.insert1(&quot;.00&quot;_s, position + codec.length());
&gt; Source/WebCore/dom/CharacterData.cpp:    newData.insert1(data, offset);
&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:        text.insert1(replacement, start);

I am surprised you didn’t go all the way and do those 3 too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861929</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-15 15:01:33 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 457673 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=457673&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WTF/ChangeLog:8
&gt; &gt;&gt;&gt; +        Simplify String::insert() implementation and reduce usage.
&gt; &gt;&gt; 
&gt; &gt;&gt; What uses remain?
&gt; &gt; 
&gt; &gt; Not many:
&gt; &gt; Source/WebCore/Modules/mediasource/MediaSource.cpp:        rawType.insert1(&quot;.00&quot;_s, position + codec.length());
&gt; &gt; Source/WebCore/dom/CharacterData.cpp:    newData.insert1(data, offset);
&gt; &gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:        text.insert1(replacement, start);
&gt; 
&gt; I am surprised you didn’t go all the way and do those 3 too.

I did that at first. Then it didn&apos;t seem worth it to me because it made the call sites look a little more complicated and not more efficient. For this reason, I felt it was good to hide the complexity inside String::insert() and use that for those 3 call sites. Do you feel differently?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861930</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-15 15:03:58 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #6)
&gt; (In reply to Darin Adler from comment #5)
&gt; &gt; Comment on attachment 457673 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=457673&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Source/WTF/ChangeLog:8
&gt; &gt; &gt;&gt;&gt; +        Simplify String::insert() implementation and reduce usage.
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; What uses remain?
&gt; &gt; &gt; 
&gt; &gt; &gt; Not many:
&gt; &gt; &gt; Source/WebCore/Modules/mediasource/MediaSource.cpp:        rawType.insert1(&quot;.00&quot;_s, position + codec.length());
&gt; &gt; &gt; Source/WebCore/dom/CharacterData.cpp:    newData.insert1(data, offset);
&gt; &gt; &gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:        text.insert1(replacement, start);
&gt; &gt; 
&gt; &gt; I am surprised you didn’t go all the way and do those 3 too.
&gt; 
&gt; I did that at first. Then it didn&apos;t seem worth it to me because it made the
&gt; call sites look a little more complicated and not more efficient. For this
&gt; reason, I felt it was good to hide the complexity inside String::insert()
&gt; and use that for those 3 call sites. Do you feel differently?

Especially, with my simpler / lightweight String::insert() implementation, the cost to keeping it is not high (compared to previously, as it was a LOT of code).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861931</commentid>
    <comment_count>8</comment_count>
      <attachid>457673</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-15 15:06:31 -0700</bug_when>
    <thetext>Comment on attachment 457673
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WTF/ChangeLog:8
&gt;&gt;&gt;&gt;&gt; +        Simplify String::insert() implementation and reduce usage.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; What uses remain?
&gt;&gt;&gt; 
&gt;&gt;&gt; Not many:
&gt;&gt;&gt; Source/WebCore/Modules/mediasource/MediaSource.cpp:        rawType.insert1(&quot;.00&quot;_s, position + codec.length());
&gt;&gt;&gt; Source/WebCore/dom/CharacterData.cpp:    newData.insert1(data, offset);
&gt;&gt;&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:        text.insert1(replacement, start);
&gt;&gt; 
&gt;&gt; I am surprised you didn’t go all the way and do those 3 too.
&gt; 
&gt; I did that at first. Then it didn&apos;t seem worth it to me because it made the call sites look a little more complicated and not more efficient. For this reason, I felt it was good to hide the complexity inside String::insert() and use that for those 3 call sites. Do you feel differently?

I do.

I think we should stop making String feel &quot;mutable&quot; and get rid of functions that modify a String in place by making a new StringImpl, since they seem more efficient than they are and it’s confusing to have them alongside other functions that return values and don’t modify the String. Instead we should have functions that make new strings. So String::insert is one of the ones I want to get rid of. Even if we just changed it to be a non-member function that returns a String rather than changing a String in place (basically the exact same code) I think it would help us make String better.

I know this is a radical thing to say, but some day we might even rename StringImpl to String and use RefPtr&lt;String&gt; where we use String today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861936</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-15 15:18:51 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Comment on attachment 457673 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=457673&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt;&gt; Source/WTF/ChangeLog:8
&gt; &gt;&gt;&gt;&gt;&gt; +        Simplify String::insert() implementation and reduce usage.
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt; What uses remain?
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Not many:
&gt; &gt;&gt;&gt; Source/WebCore/Modules/mediasource/MediaSource.cpp:        rawType.insert1(&quot;.00&quot;_s, position + codec.length());
&gt; &gt;&gt;&gt; Source/WebCore/dom/CharacterData.cpp:    newData.insert1(data, offset);
&gt; &gt;&gt;&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:        text.insert1(replacement, start);
&gt; &gt;&gt; 
&gt; &gt;&gt; I am surprised you didn’t go all the way and do those 3 too.
&gt; &gt; 
&gt; &gt; I did that at first. Then it didn&apos;t seem worth it to me because it made the call sites look a little more complicated and not more efficient. For this reason, I felt it was good to hide the complexity inside String::insert() and use that for those 3 call sites. Do you feel differently?
&gt; 
&gt; I do.
&gt; 
&gt; I think we should stop making String feel &quot;mutable&quot; and get rid of functions
&gt; that modify a String in place by making a new StringImpl, since they seem
&gt; more efficient than they are and it’s confusing to have them alongside other
&gt; functions that return values and don’t modify the String. Instead we should
&gt; have functions that make new strings. So String::insert is one of the ones I
&gt; want to get rid of. Even if we just changed it to be a non-member function
&gt; that returns a String rather than changing a String in place (basically the
&gt; exact same code) I think it would help us make String better.
&gt; 
&gt; I know this is a radical thing to say, but some day we might even rename
&gt; StringImpl to String and use RefPtr&lt;String&gt; where we use String today.

How would you feel if that insert() function was const and returned a String with WARN_UNUSED_RETURN ?
We have quite a few functions like this on String and I find that less confusing personally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861937</commentid>
    <comment_count>10</comment_count>
      <attachid>457673</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-15 15:26:32 -0700</bug_when>
    <thetext>Comment on attachment 457673
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Source/WTF/ChangeLog:8
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +        Simplify String::insert() implementation and reduce usage.
&gt;&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt;&gt; What uses remain?
&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt; Not many:
&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/Modules/mediasource/MediaSource.cpp:        rawType.insert1(&quot;.00&quot;_s, position + codec.length());
&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/dom/CharacterData.cpp:    newData.insert1(data, offset);
&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:        text.insert1(replacement, start);
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; I am surprised you didn’t go all the way and do those 3 too.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I did that at first. Then it didn&apos;t seem worth it to me because it made the call sites look a little more complicated and not more efficient. For this reason, I felt it was good to hide the complexity inside String::insert() and use that for those 3 call sites. Do you feel differently?
&gt;&gt;&gt; 
&gt;&gt;&gt; Especially, with my simpler / lightweight String::insert() implementation, the cost to keeping it is not high (compared to previously, as it was a LOT of code).
&gt;&gt; 
&gt;&gt; I do.
&gt;&gt; 
&gt;&gt; I think we should stop making String feel &quot;mutable&quot; and get rid of functions that modify a String in place by making a new StringImpl, since they seem more efficient than they are and it’s confusing to have them alongside other functions that return values and don’t modify the String. Instead we should have functions that make new strings. So String::insert is one of the ones I want to get rid of. Even if we just changed it to be a non-member function that returns a String rather than changing a String in place (basically the exact same code) I think it would help us make String better.
&gt;&gt; 
&gt;&gt; I know this is a radical thing to say, but some day we might even rename StringImpl to String and use RefPtr&lt;String&gt; where we use String today.
&gt; 
&gt; How would you feel if that insert() function was const and returned a String with WARN_UNUSED_RETURN ?
&gt; We have quite a few functions like this on String and I find that less confusing personally.

Maybe. Not sure it has to be a member function at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861938</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-15 15:27:12 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #4)
&gt; (In reply to Darin Adler from comment #3)
&gt; &gt; Comment on attachment 457673 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=457673&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/ChangeLog:8
&gt; &gt; &gt; +        Simplify String::insert() implementation and reduce usage.
&gt; &gt; 
&gt; &gt; What uses remain?
&gt; 
&gt; Not many:
&gt; Source/WebCore/Modules/mediasource/MediaSource.cpp:       
&gt; rawType.insert1(&quot;.00&quot;_s, position + codec.length());
&gt; Source/WebCore/dom/CharacterData.cpp:    newData.insert1(data, offset);
&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:       
&gt; text.insert1(replacement, start);
&gt; 
&gt; &gt; &gt; Source/WebCore/dom/CharacterData.cpp:170
&gt; &gt; &gt; +    StringView oldDataView { m_data };
&gt; &gt; &gt; +    auto newData = makeString(oldDataView.left(offset), data, oldDataView.substring(offset + count));
&gt; &gt; 
&gt; &gt; Should we add a special case for when count is 0 and data is empty?
&gt; 
&gt; Need to think more about this.

I added logging for this case and it didn&apos;t happen on Speedometer or on the several top sites I browsed and interacted with for the past 5 minutes. I am not convinced such optimization is worth it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861941</commentid>
    <comment_count>12</comment_count>
      <attachid>457673</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-15 15:36:29 -0700</bug_when>
    <thetext>Comment on attachment 457673
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Source/WTF/ChangeLog:8
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +        Simplify String::insert() implementation and reduce usage.
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; What uses remain?
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Not many:
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/Modules/mediasource/MediaSource.cpp:        rawType.insert1(&quot;.00&quot;_s, position + codec.length());
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/dom/CharacterData.cpp:    newData.insert1(data, offset);
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:        text.insert1(replacement, start);
&gt;&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt;&gt; I am surprised you didn’t go all the way and do those 3 too.
&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt; I did that at first. Then it didn&apos;t seem worth it to me because it made the call sites look a little more complicated and not more efficient. For this reason, I felt it was good to hide the complexity inside String::insert() and use that for those 3 call sites. Do you feel differently?
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Especially, with my simpler / lightweight String::insert() implementation, the cost to keeping it is not high (compared to previously, as it was a LOT of code).
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I do.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I think we should stop making String feel &quot;mutable&quot; and get rid of functions that modify a String in place by making a new StringImpl, since they seem more efficient than they are and it’s confusing to have them alongside other functions that return values and don’t modify the String. Instead we should have functions that make new strings. So String::insert is one of the ones I want to get rid of. Even if we just changed it to be a non-member function that returns a String rather than changing a String in place (basically the exact same code) I think it would help us make String better.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I know this is a radical thing to say, but some day we might even rename StringImpl to String and use RefPtr&lt;String&gt; where we use String today.
&gt;&gt;&gt; 
&gt;&gt;&gt; How would you feel if that insert() function was const and returned a String with WARN_UNUSED_RETURN ?
&gt;&gt;&gt; We have quite a few functions like this on String and I find that less confusing personally.
&gt;&gt; 
&gt;&gt; Maybe. Not sure it has to be a member function at all.
&gt; 
&gt; I added logging for this case and it didn&apos;t happen on Speedometer or on the several top sites I browsed and interacted with for the past 5 minutes. I am not convinced such optimization is worth it.

Glad we don’t need it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861948</commentid>
    <comment_count>13</comment_count>
      <attachid>457728</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-15 15:52:00 -0700</bug_when>
    <thetext>Created attachment 457728
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861950</commentid>
    <comment_count>14</comment_count>
      <attachid>457728</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-15 15:59:52 -0700</bug_when>
    <thetext>Comment on attachment 457728
Patch

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

&gt; Source/WTF/wtf/text/WTFString.h:606
&gt; +WTF_EXPORT_PRIVATE String makeStringByInserting(const String&amp; originalString, StringView stringToInsert, unsigned position);

I like it. A neat thing about this is that we could also make an overload that takes a StringView for originalString if we find that’s needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861953</commentid>
    <comment_count>15</comment_count>
      <attachid>457728</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-15 16:07:02 -0700</bug_when>
    <thetext>Comment on attachment 457728
Patch

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

&gt;&gt; Source/WTF/wtf/text/WTFString.h:606
&gt;&gt; +WTF_EXPORT_PRIVATE String makeStringByInserting(const String&amp; originalString, StringView stringToInsert, unsigned position);
&gt; 
&gt; I like it. A neat thing about this is that we could also make an overload that takes a StringView for originalString if we find that’s needed.

Good, I like it better as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862018</commentid>
    <comment_count>16</comment_count>
      <attachid>457728</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-15 20:13:55 -0700</bug_when>
    <thetext>Comment on attachment 457728
Patch

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

&gt; Source/WTF/wtf/text/WTFString.cpp:84
&gt; +    StringView originalStringView { originalString };
&gt; +    return makeString(originalStringView.left(position), stringToInsert, originalStringView.substring(position));

Wait, there’s nothing about this function taking advantage of the fact that originalString is a String, so we should change it to take a StringView!

&gt; Source/WebCore/dom/CharacterData.cpp:141
&gt; +    String newData = makeStringByInserting(m_data, data, offset);

auto, like below</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862023</commentid>
    <comment_count>17</comment_count>
      <attachid>457741</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-15 21:08:00 -0700</bug_when>
    <thetext>Created attachment 457741
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862076</commentid>
    <comment_count>18</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-04-16 13:32:44 -0700</bug_when>
    <thetext>Committed r292942 (249707@main): &lt;https://commits.webkit.org/249707@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 457741.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862077</commentid>
    <comment_count>19</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-04-16 13:33:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/91853248&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457668</attachid>
            <date>2022-04-14 20:10:40 -0700</date>
            <delta_ts>2022-04-14 21:54:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-239370-20220414201040.patch</filename>
            <type>text/plain</type>
            <size>10024</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyODk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDNhNGUwNTAwYmYwYWQ5ZmM0ZDYxYzZj
Njk5MzIxM2VkMzhhNDA3MDYuLjVlZjNlNGJkZWRhNzdiMTk5MTA1NjlhMjMxZmQ2MDE1NTI5ZTk5
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjItMDQtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBTaW1wbGlmeSBTdHJpbmc6Omluc2VydCgpIGltcGxlbWVu
dGF0aW9uIGFuZCByZWR1Y2UgdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzOTM3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFNpbXBsaWZ5IFN0cmluZzo6aW5zZXJ0KCkgaW1wbGVtZW50YXRpb24g
YW5kIHJlZHVjZSB1c2FnZS4KKworICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5jcHA6Cisg
ICAgICAgIChXVEY6OlN0cmluZzo6aW5zZXJ0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjphcHBl
bmQpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOgorCiAyMDIyLTA0
LTE0ICBKIFBhc2NvZSAgPGpfcGFzY29lQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViQXV0aG5d
IENsZWFuIHVwIFdlYkF1dGhlbnRpY2F0aW9uTW9kZXJuIGFuZCBXZWJBdXRoblByb2Nlc3MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA4YTA0NTFkMTE3M2VjYTg2ZWE4NWJhMGRmMTMzZTM4YzQ0ZTA5Mzk2Li40MWRk
OWUzNmM4MzFmZjVlNTRhMjhjY2Y1YjhmMjFkYTdiY2ZhMTQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTkgQEAKKzIwMjItMDQtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwor
ICAgICAgICBTaW1wbGlmeSBTdHJpbmc6Omluc2VydCgpIGltcGxlbWVudGF0aW9uIGFuZCByZWR1
Y2UgdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzOTM3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFNpbXBsaWZ5IFN0cmluZzo6aW5zZXJ0KCkgaW1wbGVtZW50YXRpb24gYW5kIHJlZHVjZSB1c2Fn
ZS4KKworICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNoYXJhY3RlckRhdGE6OnJlcGxhY2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0RhdGFVUkxEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpE
ZWNvZGVUYXNrOjpwcm9jZXNzKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHbG9iYWxJbWFnZUZpbGVEZXNjcmlwdG9y
KToKKwogMjAyMi0wNC0xNCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
IAogICAgICAgICBVbmRvIG9wdGlvbiBhZnRlciBpbnZva2luZyAiTWFya3VwIEltYWdlIiBzYXlz
ICJVbmRvIFBhc3RlIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcu
Y3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCmluZGV4IGRjOTQxMDRiNTky
ZDEwOGQwMGI4MjU4MDc2MmIxMTUxOGYwN2NkZDkuLmIxZjgyMTk2YmM5MDQ4MzQ4MGZmMjEwNzJk
NmEwNWVlNTY4YjI0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKQEAgLTc4LDExNiAr
NzgsMTggQEAgaW50IGNvZGVQb2ludENvbXBhcmUoY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJp
bmcmIGIpCiAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUoYS5pbXBsKCksIGIuaW1wbCgpKTsK
IH0KIAotdm9pZCBTdHJpbmc6Omluc2VydChjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQg
cG9zaXRpb24pCit2b2lkIFN0cmluZzo6aW5zZXJ0KFN0cmluZ1ZpZXcgc3RyaW5nLCB1bnNpZ25l
ZCBwb3NpdGlvbikKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBleHRyZW1lbHkgaW5lZmZpY2ll
bnQuIFNvIG11Y2ggc28gdGhhdCB3ZSBtaWdodCB3YW50IHRvIHRha2UgdGhpcyBvdXQgb2YgU3Ry
aW5nJ3MgQVBJLgotCi0gICAgdW5zaWduZWQgbGVuZ3RoVG9JbnNlcnQgPSBzdHJpbmcubGVuZ3Ro
KCk7Ci0KLSAgICBpZiAoIWxlbmd0aFRvSW5zZXJ0KSB7Ci0gICAgICAgIGlmIChzdHJpbmcuaXNO
dWxsKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChpc051bGwoKSkKLSAgICAg
ICAgICAgIG1faW1wbCA9IHN0cmluZy5pbXBsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAocG9zaXRpb24gPj0gbGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKHN0cmluZy5pczhC
aXQoKSkKLSAgICAgICAgICAgIGFwcGVuZChzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxl
bmd0aCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwZW5kKHN0cmluZy5jaGFyYWN0
ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RyaW5nLmlzRW1w
dHkoKSkpIHsKKyAgICAgICAgaWYgKGlzTnVsbCgpICYmICFzdHJpbmcuaXNOdWxsKCkpCisgICAg
ICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjplbXB0eSgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKGxlbmd0aFRvSW5zZXJ0ID4gTWF4TGVuZ3RoIC0gbGVuZ3RoKCkpCi0g
ICAgICAgIENSQVNIKCk7Ci0KLSAgICBpZiAoaXM4Qml0KCkgJiYgc3RyaW5nLmlzOEJpdCgpKSB7
Ci0gICAgICAgIExDaGFyKiBkYXRhOwotICAgICAgICBhdXRvIG5ld1N0cmluZyA9IFN0cmluZ0lt
cGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCkgKyBsZW5ndGhUb0luc2VydCwgZGF0YSk7
Ci0gICAgICAgIFN0cmluZ1ZpZXcoKm1faW1wbCkubGVmdChwb3NpdGlvbikuZ2V0Q2hhcmFjdGVy
c1dpdGhVcGNvbnZlcnQoZGF0YSk7Ci0gICAgICAgIFN0cmluZ1ZpZXcoc3RyaW5nKS5nZXRDaGFy
YWN0ZXJzV2l0aFVwY29udmVydChkYXRhICsgcG9zaXRpb24pOwotICAgICAgICBTdHJpbmdWaWV3
KCptX2ltcGwpLnN1YnN0cmluZyhwb3NpdGlvbikuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQo
ZGF0YSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQpOwotICAgICAgICBtX2ltcGwgPSBXVEZN
b3ZlKG5ld1N0cmluZyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVUNoYXIqIGRhdGE7Ci0gICAg
ICAgIGF1dG8gbmV3U3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5n
dGgoKSArIGxlbmd0aFRvSW5zZXJ0LCBkYXRhKTsKLSAgICAgICAgU3RyaW5nVmlldygqbV9pbXBs
KS5sZWZ0KHBvc2l0aW9uKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkYXRhKTsKLSAgICAg
ICAgU3RyaW5nVmlldyhzdHJpbmcpLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRhdGEgKyBw
b3NpdGlvbik7Ci0gICAgICAgIFN0cmluZ1ZpZXcoKm1faW1wbCkuc3Vic3RyaW5nKHBvc2l0aW9u
KS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkYXRhICsgcG9zaXRpb24gKyBsZW5ndGhUb0lu
c2VydCk7Ci0gICAgICAgIG1faW1wbCA9IFdURk1vdmUobmV3U3RyaW5nKTsKLSAgICB9CisgICAg
U3RyaW5nVmlldyB0aGlzVmlldyB7ICp0aGlzIH07CisgICAgbV9pbXBsID0gbWFrZVN0cmluZyh0
aGlzVmlldy5sZWZ0KHBvc2l0aW9uKSwgc3RyaW5nLCB0aGlzVmlldy5zdWJzdHJpbmcocG9zaXRp
b24pKS5yZWxlYXNlSW1wbCgpOwogfQogCi12b2lkIFN0cmluZzo6YXBwZW5kKGNvbnN0IExDaGFy
KiBjaGFyYWN0ZXJzVG9BcHBlbmQsIHVuc2lnbmVkIGxlbmd0aFRvQXBwZW5kKQotewotICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGV4dHJlbWVseSBpbmVmZmljaWVudC4gU28gbXVjaCBzbyB0aGF0IHdl
IG1pZ2h0IHdhbnQgdG8gdGFrZSB0aGlzIG91dCBvZiBTdHJpbmcncyBBUEkuCi0KLSAgICBpZiAo
IW1faW1wbCkgewotICAgICAgICBpZiAoIWNoYXJhY3RlcnNUb0FwcGVuZCkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnNU
b0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKCFsZW5ndGhUb0FwcGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGNoYXJh
Y3RlcnNUb0FwcGVuZCk7Ci0KLSAgICB1bnNpZ25lZCBzdHJMZW5ndGggPSBtX2ltcGwtPmxlbmd0
aCgpOwotCi0gICAgaWYgKG1faW1wbC0+aXM4Qml0KCkpIHsKLSAgICAgICAgaWYgKGxlbmd0aFRv
QXBwZW5kID4gTWF4TGVuZ3RoIC0gc3RyTGVuZ3RoKQotICAgICAgICAgICAgQ1JBU0goKTsKLSAg
ICAgICAgTENoYXIqIGRhdGE7Ci0gICAgICAgIGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoc3RyTGVuZ3RoICsgbGVuZ3RoVG9BcHBlbmQsIGRhdGEpOwotICAg
ICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkYXRhLCBtX2ltcGwtPmNoYXJhY3RlcnM4
KCksIHN0ckxlbmd0aCk7Ci0gICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRhdGEg
KyBzdHJMZW5ndGgsIGNoYXJhY3RlcnNUb0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQpOwotICAgICAg
ICBtX2ltcGwgPSBXVEZNb3ZlKG5ld0ltcGwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKGxlbmd0aFRvQXBwZW5kID4gTWF4TGVuZ3RoIC0gc3RyTGVuZ3RoKQotICAgICAgICBD
UkFTSCgpOwotICAgIFVDaGFyKiBkYXRhOwotICAgIGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCkgKyBsZW5ndGhUb0FwcGVuZCwgZGF0YSk7Ci0g
ICAgU3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoZGF0YSwgbV9pbXBsLT5jaGFyYWN0ZXJzMTYo
KSwgc3RyTGVuZ3RoKTsKLSAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkYXRhICsgc3Ry
TGVuZ3RoLCBjaGFyYWN0ZXJzVG9BcHBlbmQsIGxlbmd0aFRvQXBwZW5kKTsKLSAgICBtX2ltcGwg
PSBXVEZNb3ZlKG5ld0ltcGwpOwotfQotCi12b2lkIFN0cmluZzo6YXBwZW5kKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzVG9BcHBlbmQsIHVuc2lnbmVkIGxlbmd0aFRvQXBwZW5kKQotewotICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGV4dHJlbWVseSBpbmVmZmljaWVudC4gU28gbXVjaCBzbyB0aGF0IHdl
IG1pZ2h0IHdhbnQgdG8gdGFrZSB0aGlzIG91dCBvZiBTdHJpbmcncyBBUEkuCi0KLSAgICBpZiAo
IW1faW1wbCkgewotICAgICAgICBpZiAoIWNoYXJhY3RlcnNUb0FwcGVuZCkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnNU
b0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKCFsZW5ndGhUb0FwcGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgc3Ry
TGVuZ3RoID0gbV9pbXBsLT5sZW5ndGgoKTsKLQotICAgIEFTU0VSVChjaGFyYWN0ZXJzVG9BcHBl
bmQpOwotICAgIGlmIChsZW5ndGhUb0FwcGVuZCA+IE1heExlbmd0aCAtIHN0ckxlbmd0aCkKLSAg
ICAgICAgQ1JBU0goKTsKLSAgICBVQ2hhciogZGF0YTsKLSAgICBhdXRvIG5ld0ltcGwgPSBTdHJp
bmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHN0ckxlbmd0aCArIGxlbmd0aFRvQXBwZW5kLCBk
YXRhKTsKLSAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkKLSAgICAgICAgU3RyaW5nSW1wbDo6Y29w
eUNoYXJhY3RlcnMoZGF0YSwgY2hhcmFjdGVyczgoKSwgc3RyTGVuZ3RoKTsKLSAgICBlbHNlCi0g
ICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRhdGEsIGNoYXJhY3RlcnMxNigpLCBz
dHJMZW5ndGgpOwotICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRhdGEgKyBzdHJMZW5n
dGgsIGNoYXJhY3RlcnNUb0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQpOwotICAgIG1faW1wbCA9IFdU
Rk1vdmUobmV3SW1wbCk7Ci19Ci0KLQogVUNoYXIzMiBTdHJpbmc6OmNoYXJhY3RlclN0YXJ0aW5n
QXQodW5zaWduZWQgaSkgY29uc3QKIHsKICAgICBpZiAoIW1faW1wbCB8fCBpID49IG1faW1wbC0+
bGVuZ3RoKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIv
U291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAppbmRleCA5ZTYzOTRhOWIzZWZiMGZlNjY4
NWI4OTEwMDRkZGVjOGJjZTA1YzYwLi45NmZmYjM2YjI0MGJjYzkyYTQ3NmFhNzhkMTQ3MzdlMzcz
YWE5YzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKQEAgLTE5MCw3ICsxOTAsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBlbmRzV2l0aChjaGFyIGNoYXJhY3RlcikgY29uc3QgeyByZXR1cm4gZW5k
c1dpdGgoc3RhdGljX2Nhc3Q8VUNoYXI+KGNoYXJhY3RlcikpOyB9CiAgICAgYm9vbCBoYXNJbmZp
eEVuZGluZ0F0KFN0cmluZ1ZpZXcgc3VmZml4LCB1bnNpZ25lZCBlbmQpIGNvbnN0OwogCi0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5zZXJ0KGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIHBv
c2l0aW9uKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbnNlcnQoU3RyaW5nVmlldywg
dW5zaWduZWQgcG9zaXRpb24pOwogCiAgICAgU3RyaW5nJiByZXBsYWNlKFVDaGFyIHRhcmdldCwg
VUNoYXIgcmVwbGFjZW1lbnQpOwogICAgIFN0cmluZyYgcmVwbGFjZShVQ2hhciB0YXJnZXQsIFN0
cmluZ1ZpZXcgcmVwbGFjZW1lbnQpOwpAQCAtMzM0LDEwICszMzQsNiBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgcmVtb3ZlSW50
ZXJuYWwoY29uc3QgQ2hhcmFjdGVyVHlwZSosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CiAKLSAgICAv
LyBGSVhNRTogT25seSB1c2VkIGJ5IGluc2VydCgpLCB3ZSBzaG91bGQgY29uc2lkZXIgZHJvcHBp
bmcgdGhlbS4KLSAgICB2b2lkIGFwcGVuZChjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwotCiAgICAg
dGVtcGxhdGU8Ym9vbCBhbGxvd0VtcHR5RW50cmllcz4gdm9pZCBzcGxpdEludGVybmFsKFVDaGFy
IHNlcGFyYXRvciwgY29uc3QgU3BsaXRGdW5jdG9yJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Ym9v
bCBhbGxvd0VtcHR5RW50cmllcz4gVmVjdG9yPFN0cmluZz4gc3BsaXRJbnRlcm5hbChVQ2hhciBz
ZXBhcmF0b3IpIGNvbnN0OwogICAgIHRlbXBsYXRlPGJvb2wgYWxsb3dFbXB0eUVudHJpZXM+IFZl
Y3RvcjxTdHJpbmc+IHNwbGl0SW50ZXJuYWwoU3RyaW5nVmlldyBzZXBhcmF0b3IpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCmluZGV4IDk3NTUyZWFmMTJlYzQ0MGQ5OWI4
ZDJiYzk4NWM2YWI3OWRjZjhhYWUuLjU2Y2UyMGI0MDI0NTI2NjFjMzQ3YWI3OGRiNjZlMjhiYmJj
OTMzMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKQEAgLTE2NiwxMCArMTY2
LDkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6cmVwbGFjZURhdGEodW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY28KIAogICAgIGNvdW50ID0gc3RkOjptaW4oY291
bnQsIGxlbmd0aCgpIC0gb2Zmc2V0KTsKIAotICAgIFN0cmluZyBuZXdEYXRhID0gbV9kYXRhOwot
ICAgIG5ld0RhdGEucmVtb3ZlKG9mZnNldCwgY291bnQpOwotICAgIG5ld0RhdGEuaW5zZXJ0KGRh
dGEsIG9mZnNldCk7Ci0gICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdEYXRhLCBvZmZzZXQsIGNvdW50
LCBkYXRhLmxlbmd0aCgpKTsKKyAgICBTdHJpbmdWaWV3IG9sZERhdGFWaWV3IHsgbV9kYXRhIH07
CisgICAgYXV0byBuZXdEYXRhID0gbWFrZVN0cmluZyhvbGREYXRhVmlldy5sZWZ0KG9mZnNldCks
IGRhdGEsIG9sZERhdGFWaWV3LnJpZ2h0KG9mZnNldCArIGNvdW50KSk7CisgICAgc2V0RGF0YUFu
ZFVwZGF0ZShXVEZNb3ZlKG5ld0RhdGEpLCBvZmZzZXQsIGNvdW50LCBkYXRhLmxlbmd0aCgpKTsK
IAogICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRGF0YVVSTERlY29kZXIuY3BwCmluZGV4IDY3OTI0NDBmMGFmOTNkNWI2YmFmOGM5ZGQ3
MDFlZDhlMDI0Yzk1MDIuLjIzMWIzYTIxZmY4N2Q1Yzc5NmRmNTlmM2MzYjIyOThjY2U2NjdhMWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29k
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29k
ZXIuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICBhdXRvIG1lZGlhVHlw
ZSA9IChpc0Jhc2U2NCA/IGhlYWRlci5sZWZ0KG1lZGlhVHlwZUVuZCkgOiBoZWFkZXIpLnRvU3Ry
aW5nKCk7CiAgICAgICAgIG1lZGlhVHlwZSA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRUUFNw
YWNlcyhtZWRpYVR5cGUpOwogICAgICAgICBpZiAobWVkaWFUeXBlLnN0YXJ0c1dpdGgoJzsnKSkK
LSAgICAgICAgICAgIG1lZGlhVHlwZS5pbnNlcnQoInRleHQvcGxhaW4iX3MsIDApOworICAgICAg
ICAgICAgbWVkaWFUeXBlID0gbWFrZVN0cmluZygidGV4dC9wbGFpbiJfcywgbWVkaWFUeXBlKTsK
IAogICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKG1lZGlhVHlwZSkp
CiAgICAgICAgICAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKaW5kZXggN2QxNTM2YTdkNjRk
M2ZjODM2Mjc2MmYzYTcwNGRhNTM4YzZmN2E2Mi4uMDZkZDM1Zjk4NzJjYjlhZjUxOGFiOTRjNTU3
NTA4OTM4ZWE2N2ZkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bh
c3RlYm9hcmRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJv
YXJkV2luLmNwcApAQCAtOTUwLDggKzk1MCw3IEBAIHN0YXRpYyBIR0xPQkFMIGNyZWF0ZUdsb2Jh
bEltYWdlRmlsZURlc2NyaXB0b3IoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYKICAg
ICAgICAgR2xvYmFsRnJlZShtZW1PYmopOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAg
ZXh0ZW5zaW9uLmluc2VydCgiLiJfcywgMCk7Ci0gICAgZnNQYXRoID0gZmlsZVN5c3RlbVBhdGhG
cm9tVVJMT3JUaXRsZSh1cmwsIHByZWZlcnJlZFRpdGxlLCBleHRlbnNpb24sIGZhbHNlKTsKKyAg
ICBmc1BhdGggPSBmaWxlU3lzdGVtUGF0aEZyb21VUkxPclRpdGxlKHVybCwgcHJlZmVycmVkVGl0
bGUsIG1ha2VTdHJpbmcoJy4nLCBleHRlbnNpb24pLCBmYWxzZSk7CiAKICAgICBpZiAoZnNQYXRo
Lmxlbmd0aCgpIDw9IDApIHsKICAgICAgICAgR2xvYmFsVW5sb2NrKG1lbU9iaik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457673</attachid>
            <date>2022-04-14 21:54:41 -0700</date>
            <delta_ts>2022-04-15 15:51:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-239370-20220414215440.patch</filename>
            <type>text/plain</type>
            <size>10028</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyODk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDNhNGUwNTAwYmYwYWQ5ZmM0ZDYxYzZj
Njk5MzIxM2VkMzhhNDA3MDYuLjVlZjNlNGJkZWRhNzdiMTk5MTA1NjlhMjMxZmQ2MDE1NTI5ZTk5
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjItMDQtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBTaW1wbGlmeSBTdHJpbmc6Omluc2VydCgpIGltcGxlbWVu
dGF0aW9uIGFuZCByZWR1Y2UgdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzOTM3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFNpbXBsaWZ5IFN0cmluZzo6aW5zZXJ0KCkgaW1wbGVtZW50YXRpb24g
YW5kIHJlZHVjZSB1c2FnZS4KKworICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5jcHA6Cisg
ICAgICAgIChXVEY6OlN0cmluZzo6aW5zZXJ0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjphcHBl
bmQpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOgorCiAyMDIyLTA0
LTE0ICBKIFBhc2NvZSAgPGpfcGFzY29lQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViQXV0aG5d
IENsZWFuIHVwIFdlYkF1dGhlbnRpY2F0aW9uTW9kZXJuIGFuZCBXZWJBdXRoblByb2Nlc3MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA4YTA0NTFkMTE3M2VjYTg2ZWE4NWJhMGRmMTMzZTM4YzQ0ZTA5Mzk2Li40MWRk
OWUzNmM4MzFmZjVlNTRhMjhjY2Y1YjhmMjFkYTdiY2ZhMTQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTkgQEAKKzIwMjItMDQtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwor
ICAgICAgICBTaW1wbGlmeSBTdHJpbmc6Omluc2VydCgpIGltcGxlbWVudGF0aW9uIGFuZCByZWR1
Y2UgdXNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzOTM3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFNpbXBsaWZ5IFN0cmluZzo6aW5zZXJ0KCkgaW1wbGVtZW50YXRpb24gYW5kIHJlZHVjZSB1c2Fn
ZS4KKworICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNoYXJhY3RlckRhdGE6OnJlcGxhY2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0RhdGFVUkxEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFVUkxEZWNvZGVyOjpE
ZWNvZGVUYXNrOjpwcm9jZXNzKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHbG9iYWxJbWFnZUZpbGVEZXNjcmlwdG9y
KToKKwogMjAyMi0wNC0xNCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
IAogICAgICAgICBVbmRvIG9wdGlvbiBhZnRlciBpbnZva2luZyAiTWFya3VwIEltYWdlIiBzYXlz
ICJVbmRvIFBhc3RlIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcu
Y3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCmluZGV4IGRjOTQxMDRiNTky
ZDEwOGQwMGI4MjU4MDc2MmIxMTUxOGYwN2NkZDkuLmIxZjgyMTk2YmM5MDQ4MzQ4MGZmMjEwNzJk
NmEwNWVlNTY4YjI0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKQEAgLTc4LDExNiAr
NzgsMTggQEAgaW50IGNvZGVQb2ludENvbXBhcmUoY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJp
bmcmIGIpCiAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUoYS5pbXBsKCksIGIuaW1wbCgpKTsK
IH0KIAotdm9pZCBTdHJpbmc6Omluc2VydChjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQg
cG9zaXRpb24pCit2b2lkIFN0cmluZzo6aW5zZXJ0KFN0cmluZ1ZpZXcgc3RyaW5nLCB1bnNpZ25l
ZCBwb3NpdGlvbikKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBleHRyZW1lbHkgaW5lZmZpY2ll
bnQuIFNvIG11Y2ggc28gdGhhdCB3ZSBtaWdodCB3YW50IHRvIHRha2UgdGhpcyBvdXQgb2YgU3Ry
aW5nJ3MgQVBJLgotCi0gICAgdW5zaWduZWQgbGVuZ3RoVG9JbnNlcnQgPSBzdHJpbmcubGVuZ3Ro
KCk7Ci0KLSAgICBpZiAoIWxlbmd0aFRvSW5zZXJ0KSB7Ci0gICAgICAgIGlmIChzdHJpbmcuaXNO
dWxsKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChpc051bGwoKSkKLSAgICAg
ICAgICAgIG1faW1wbCA9IHN0cmluZy5pbXBsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAocG9zaXRpb24gPj0gbGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKHN0cmluZy5pczhC
aXQoKSkKLSAgICAgICAgICAgIGFwcGVuZChzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxl
bmd0aCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwZW5kKHN0cmluZy5jaGFyYWN0
ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RyaW5nLmlzRW1w
dHkoKSkpIHsKKyAgICAgICAgaWYgKGlzTnVsbCgpICYmICFzdHJpbmcuaXNOdWxsKCkpCisgICAg
ICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjplbXB0eSgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKGxlbmd0aFRvSW5zZXJ0ID4gTWF4TGVuZ3RoIC0gbGVuZ3RoKCkpCi0g
ICAgICAgIENSQVNIKCk7Ci0KLSAgICBpZiAoaXM4Qml0KCkgJiYgc3RyaW5nLmlzOEJpdCgpKSB7
Ci0gICAgICAgIExDaGFyKiBkYXRhOwotICAgICAgICBhdXRvIG5ld1N0cmluZyA9IFN0cmluZ0lt
cGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCkgKyBsZW5ndGhUb0luc2VydCwgZGF0YSk7
Ci0gICAgICAgIFN0cmluZ1ZpZXcoKm1faW1wbCkubGVmdChwb3NpdGlvbikuZ2V0Q2hhcmFjdGVy
c1dpdGhVcGNvbnZlcnQoZGF0YSk7Ci0gICAgICAgIFN0cmluZ1ZpZXcoc3RyaW5nKS5nZXRDaGFy
YWN0ZXJzV2l0aFVwY29udmVydChkYXRhICsgcG9zaXRpb24pOwotICAgICAgICBTdHJpbmdWaWV3
KCptX2ltcGwpLnN1YnN0cmluZyhwb3NpdGlvbikuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQo
ZGF0YSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQpOwotICAgICAgICBtX2ltcGwgPSBXVEZN
b3ZlKG5ld1N0cmluZyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVUNoYXIqIGRhdGE7Ci0gICAg
ICAgIGF1dG8gbmV3U3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5n
dGgoKSArIGxlbmd0aFRvSW5zZXJ0LCBkYXRhKTsKLSAgICAgICAgU3RyaW5nVmlldygqbV9pbXBs
KS5sZWZ0KHBvc2l0aW9uKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkYXRhKTsKLSAgICAg
ICAgU3RyaW5nVmlldyhzdHJpbmcpLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRhdGEgKyBw
b3NpdGlvbik7Ci0gICAgICAgIFN0cmluZ1ZpZXcoKm1faW1wbCkuc3Vic3RyaW5nKHBvc2l0aW9u
KS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkYXRhICsgcG9zaXRpb24gKyBsZW5ndGhUb0lu
c2VydCk7Ci0gICAgICAgIG1faW1wbCA9IFdURk1vdmUobmV3U3RyaW5nKTsKLSAgICB9CisgICAg
U3RyaW5nVmlldyB0aGlzVmlldyB7ICp0aGlzIH07CisgICAgbV9pbXBsID0gbWFrZVN0cmluZyh0
aGlzVmlldy5sZWZ0KHBvc2l0aW9uKSwgc3RyaW5nLCB0aGlzVmlldy5zdWJzdHJpbmcocG9zaXRp
b24pKS5yZWxlYXNlSW1wbCgpOwogfQogCi12b2lkIFN0cmluZzo6YXBwZW5kKGNvbnN0IExDaGFy
KiBjaGFyYWN0ZXJzVG9BcHBlbmQsIHVuc2lnbmVkIGxlbmd0aFRvQXBwZW5kKQotewotICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGV4dHJlbWVseSBpbmVmZmljaWVudC4gU28gbXVjaCBzbyB0aGF0IHdl
IG1pZ2h0IHdhbnQgdG8gdGFrZSB0aGlzIG91dCBvZiBTdHJpbmcncyBBUEkuCi0KLSAgICBpZiAo
IW1faW1wbCkgewotICAgICAgICBpZiAoIWNoYXJhY3RlcnNUb0FwcGVuZCkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnNU
b0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKCFsZW5ndGhUb0FwcGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGNoYXJh
Y3RlcnNUb0FwcGVuZCk7Ci0KLSAgICB1bnNpZ25lZCBzdHJMZW5ndGggPSBtX2ltcGwtPmxlbmd0
aCgpOwotCi0gICAgaWYgKG1faW1wbC0+aXM4Qml0KCkpIHsKLSAgICAgICAgaWYgKGxlbmd0aFRv
QXBwZW5kID4gTWF4TGVuZ3RoIC0gc3RyTGVuZ3RoKQotICAgICAgICAgICAgQ1JBU0goKTsKLSAg
ICAgICAgTENoYXIqIGRhdGE7Ci0gICAgICAgIGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoc3RyTGVuZ3RoICsgbGVuZ3RoVG9BcHBlbmQsIGRhdGEpOwotICAg
ICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkYXRhLCBtX2ltcGwtPmNoYXJhY3RlcnM4
KCksIHN0ckxlbmd0aCk7Ci0gICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRhdGEg
KyBzdHJMZW5ndGgsIGNoYXJhY3RlcnNUb0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQpOwotICAgICAg
ICBtX2ltcGwgPSBXVEZNb3ZlKG5ld0ltcGwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKGxlbmd0aFRvQXBwZW5kID4gTWF4TGVuZ3RoIC0gc3RyTGVuZ3RoKQotICAgICAgICBD
UkFTSCgpOwotICAgIFVDaGFyKiBkYXRhOwotICAgIGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCkgKyBsZW5ndGhUb0FwcGVuZCwgZGF0YSk7Ci0g
ICAgU3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoZGF0YSwgbV9pbXBsLT5jaGFyYWN0ZXJzMTYo
KSwgc3RyTGVuZ3RoKTsKLSAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkYXRhICsgc3Ry
TGVuZ3RoLCBjaGFyYWN0ZXJzVG9BcHBlbmQsIGxlbmd0aFRvQXBwZW5kKTsKLSAgICBtX2ltcGwg
PSBXVEZNb3ZlKG5ld0ltcGwpOwotfQotCi12b2lkIFN0cmluZzo6YXBwZW5kKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzVG9BcHBlbmQsIHVuc2lnbmVkIGxlbmd0aFRvQXBwZW5kKQotewotICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGV4dHJlbWVseSBpbmVmZmljaWVudC4gU28gbXVjaCBzbyB0aGF0IHdl
IG1pZ2h0IHdhbnQgdG8gdGFrZSB0aGlzIG91dCBvZiBTdHJpbmcncyBBUEkuCi0KLSAgICBpZiAo
IW1faW1wbCkgewotICAgICAgICBpZiAoIWNoYXJhY3RlcnNUb0FwcGVuZCkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnNU
b0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKCFsZW5ndGhUb0FwcGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgc3Ry
TGVuZ3RoID0gbV9pbXBsLT5sZW5ndGgoKTsKLQotICAgIEFTU0VSVChjaGFyYWN0ZXJzVG9BcHBl
bmQpOwotICAgIGlmIChsZW5ndGhUb0FwcGVuZCA+IE1heExlbmd0aCAtIHN0ckxlbmd0aCkKLSAg
ICAgICAgQ1JBU0goKTsKLSAgICBVQ2hhciogZGF0YTsKLSAgICBhdXRvIG5ld0ltcGwgPSBTdHJp
bmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHN0ckxlbmd0aCArIGxlbmd0aFRvQXBwZW5kLCBk
YXRhKTsKLSAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkKLSAgICAgICAgU3RyaW5nSW1wbDo6Y29w
eUNoYXJhY3RlcnMoZGF0YSwgY2hhcmFjdGVyczgoKSwgc3RyTGVuZ3RoKTsKLSAgICBlbHNlCi0g
ICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRhdGEsIGNoYXJhY3RlcnMxNigpLCBz
dHJMZW5ndGgpOwotICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRhdGEgKyBzdHJMZW5n
dGgsIGNoYXJhY3RlcnNUb0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQpOwotICAgIG1faW1wbCA9IFdU
Rk1vdmUobmV3SW1wbCk7Ci19Ci0KLQogVUNoYXIzMiBTdHJpbmc6OmNoYXJhY3RlclN0YXJ0aW5n
QXQodW5zaWduZWQgaSkgY29uc3QKIHsKICAgICBpZiAoIW1faW1wbCB8fCBpID49IG1faW1wbC0+
bGVuZ3RoKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIv
U291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAppbmRleCA5ZTYzOTRhOWIzZWZiMGZlNjY4
NWI4OTEwMDRkZGVjOGJjZTA1YzYwLi45NmZmYjM2YjI0MGJjYzkyYTQ3NmFhNzhkMTQ3MzdlMzcz
YWE5YzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKQEAgLTE5MCw3ICsxOTAsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBlbmRzV2l0aChjaGFyIGNoYXJhY3RlcikgY29uc3QgeyByZXR1cm4gZW5k
c1dpdGgoc3RhdGljX2Nhc3Q8VUNoYXI+KGNoYXJhY3RlcikpOyB9CiAgICAgYm9vbCBoYXNJbmZp
eEVuZGluZ0F0KFN0cmluZ1ZpZXcgc3VmZml4LCB1bnNpZ25lZCBlbmQpIGNvbnN0OwogCi0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5zZXJ0KGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIHBv
c2l0aW9uKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbnNlcnQoU3RyaW5nVmlldywg
dW5zaWduZWQgcG9zaXRpb24pOwogCiAgICAgU3RyaW5nJiByZXBsYWNlKFVDaGFyIHRhcmdldCwg
VUNoYXIgcmVwbGFjZW1lbnQpOwogICAgIFN0cmluZyYgcmVwbGFjZShVQ2hhciB0YXJnZXQsIFN0
cmluZ1ZpZXcgcmVwbGFjZW1lbnQpOwpAQCAtMzM0LDEwICszMzQsNiBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgcmVtb3ZlSW50
ZXJuYWwoY29uc3QgQ2hhcmFjdGVyVHlwZSosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CiAKLSAgICAv
LyBGSVhNRTogT25seSB1c2VkIGJ5IGluc2VydCgpLCB3ZSBzaG91bGQgY29uc2lkZXIgZHJvcHBp
bmcgdGhlbS4KLSAgICB2b2lkIGFwcGVuZChjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwotCiAgICAg
dGVtcGxhdGU8Ym9vbCBhbGxvd0VtcHR5RW50cmllcz4gdm9pZCBzcGxpdEludGVybmFsKFVDaGFy
IHNlcGFyYXRvciwgY29uc3QgU3BsaXRGdW5jdG9yJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Ym9v
bCBhbGxvd0VtcHR5RW50cmllcz4gVmVjdG9yPFN0cmluZz4gc3BsaXRJbnRlcm5hbChVQ2hhciBz
ZXBhcmF0b3IpIGNvbnN0OwogICAgIHRlbXBsYXRlPGJvb2wgYWxsb3dFbXB0eUVudHJpZXM+IFZl
Y3RvcjxTdHJpbmc+IHNwbGl0SW50ZXJuYWwoU3RyaW5nVmlldyBzZXBhcmF0b3IpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCmluZGV4IDk3NTUyZWFmMTJlYzQ0MGQ5OWI4
ZDJiYzk4NWM2YWI3OWRjZjhhYWUuLjEzMzM2ODVmZTQwY2MyNTZiZGUzZTBkNDVhNGQ2OThiZjVj
NjQyM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKQEAgLTE2NiwxMCArMTY2
LDkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6cmVwbGFjZURhdGEodW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY28KIAogICAgIGNvdW50ID0gc3RkOjptaW4oY291
bnQsIGxlbmd0aCgpIC0gb2Zmc2V0KTsKIAotICAgIFN0cmluZyBuZXdEYXRhID0gbV9kYXRhOwot
ICAgIG5ld0RhdGEucmVtb3ZlKG9mZnNldCwgY291bnQpOwotICAgIG5ld0RhdGEuaW5zZXJ0KGRh
dGEsIG9mZnNldCk7Ci0gICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdEYXRhLCBvZmZzZXQsIGNvdW50
LCBkYXRhLmxlbmd0aCgpKTsKKyAgICBTdHJpbmdWaWV3IG9sZERhdGFWaWV3IHsgbV9kYXRhIH07
CisgICAgYXV0byBuZXdEYXRhID0gbWFrZVN0cmluZyhvbGREYXRhVmlldy5sZWZ0KG9mZnNldCks
IGRhdGEsIG9sZERhdGFWaWV3LnN1YnN0cmluZyhvZmZzZXQgKyBjb3VudCkpOworICAgIHNldERh
dGFBbmRVcGRhdGUoV1RGTW92ZShuZXdEYXRhKSwgb2Zmc2V0LCBjb3VudCwgZGF0YS5sZW5ndGgo
KSk7CiAKICAgICByZXR1cm4geyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmNwcAppbmRleCA2NzkyNDQwZjBhZjkzZDViNmJhZjhj
OWRkNzAxZWQ4ZTAyNGM5NTAyLi4yMzFiM2EyMWZmODdkNWM3OTZkZjU5ZjNjM2IyMjk4Y2NlNjY3
YTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxE
ZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxE
ZWNvZGVyLmNwcApAQCAtMTE4LDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgYXV0byBtZWRp
YVR5cGUgPSAoaXNCYXNlNjQgPyBoZWFkZXIubGVmdChtZWRpYVR5cGVFbmQpIDogaGVhZGVyKS50
b1N0cmluZygpOwogICAgICAgICBtZWRpYVR5cGUgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hU
VFBTcGFjZXMobWVkaWFUeXBlKTsKICAgICAgICAgaWYgKG1lZGlhVHlwZS5zdGFydHNXaXRoKCc7
JykpCi0gICAgICAgICAgICBtZWRpYVR5cGUuaW5zZXJ0KCJ0ZXh0L3BsYWluIl9zLCAwKTsKKyAg
ICAgICAgICAgIG1lZGlhVHlwZSA9IG1ha2VTdHJpbmcoInRleHQvcGxhaW4iX3MsIG1lZGlhVHlw
ZSk7CiAKICAgICAgICAgaWYgKHNob3VsZFJlbW92ZUZyYWdtZW50SWRlbnRpZmllcihtZWRpYVR5
cGUpKQogICAgICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCmluZGV4IDdkMTUzNmE3
ZDY0ZDNmYzgzNjI3NjJmM2E3MDRkYTUzOGM2ZjdhNjIuLjA2ZGQzNWY5ODcyY2I5YWY1MThhYjk0
YzU1NzUwODkzOGVhNjdmZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9QYXN0ZWJvYXJkV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFz
dGVib2FyZFdpbi5jcHAKQEAgLTk1MCw4ICs5NTAsNyBAQCBzdGF0aWMgSEdMT0JBTCBjcmVhdGVH
bG9iYWxJbWFnZUZpbGVEZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcm
CiAgICAgICAgIEdsb2JhbEZyZWUobWVtT2JqKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQot
ICAgIGV4dGVuc2lvbi5pbnNlcnQoIi4iX3MsIDApOwotICAgIGZzUGF0aCA9IGZpbGVTeXN0ZW1Q
YXRoRnJvbVVSTE9yVGl0bGUodXJsLCBwcmVmZXJyZWRUaXRsZSwgZXh0ZW5zaW9uLCBmYWxzZSk7
CisgICAgZnNQYXRoID0gZmlsZVN5c3RlbVBhdGhGcm9tVVJMT3JUaXRsZSh1cmwsIHByZWZlcnJl
ZFRpdGxlLCBtYWtlU3RyaW5nKCcuJywgZXh0ZW5zaW9uKSwgZmFsc2UpOwogCiAgICAgaWYgKGZz
UGF0aC5sZW5ndGgoKSA8PSAwKSB7CiAgICAgICAgIEdsb2JhbFVubG9jayhtZW1PYmopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457728</attachid>
            <date>2022-04-15 15:52:00 -0700</date>
            <delta_ts>2022-04-15 21:07:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-239370-20220415155159.patch</filename>
            <type>text/plain</type>
            <size>12730</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyOTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQwN2ZjOWNjMGRmMjNmNTMxNTFiZWQ0
YzkxNjViYWE3NjFkZmJhZmQuLmE0YTBlMWUzNGZkYWY3MmQyMWVjNmMzYjk3ZDJjYjU3MGEzMGRi
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjItMDQtMTUgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIGNvbXBsZXggU3RyaW5nOjppbnNlcnQoKSB3
aXRoIGEgc2ltcGxpZmllZCBtYWtlU3RyaW5nQnlJbnNlcnRpbmcoKSBmcmVlIGZ1bmN0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzkzNzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi90ZXh0
L1dURlN0cmluZy5jcHA6CisgICAgICAgIChXVEY6Om1ha2VTdHJpbmdCeUluc2VydGluZyk6Cisg
ICAgICAgIChXVEY6OlN0cmluZzo6aW5zZXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3Ry
aW5nOjphcHBlbmQpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOgor
CiAyMDIyLTA0LTE1ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbR1RLXVtXUEVdIFJlbW92ZSBleGNsdXNpdmUgYnVpbGQgZ3VhcmRzIGFyb3VuZCBHUFUg
cHJvY2VzcyBwcmVmZXJlbmNlcywgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGY1OWE5OGNmOWY4ODU5YTQ0
MmJjOGRmYmNlNjgzYTc0ZDdkODZmNTUuLjIyMmQ2MzBjYmMzZTJiOWY1OWQ3MDI4Y2ZjZTIwMGRk
NTk5YWU5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMi0wNC0xNSAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgY29tcGxleCBTdHJp
bmc6Omluc2VydCgpIHdpdGggYSBzaW1wbGlmaWVkIG1ha2VTdHJpbmdCeUluc2VydGluZygpIGZy
ZWUgZnVuY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzOTM3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjphZGRWUDlGdWxsUmFuZ2VWaWRlb0ZsYWdUb0NvbnRlbnRUeXBlKToKKyAgICAgICAgKiBk
b20vQ2hhcmFjdGVyRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpp
bnNlcnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnJlcGxhY2VEYXRh
KToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRSYW5nZVRleHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YVVSTERlY29kZXI6OkRlY29kZVRhc2s6OnByb2Nlc3MpOgorICAgICAgICAq
IHBsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUdsb2JhbEltYWdlRmlsZURlc2NyaXB0b3IpOgorCiAyMDIyLTA0LTE1ICBBbnRvaW5lIFF1aW50
ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgV0tXZWJWaWV3IGZhbHNlIHBvc2l0aXZl
IHdoZW4gdGVzdGluZyBhLnJlbExpc3Quc3VwcG9ydHMoImFyIiksIGZhaWxzIHRvIG9wZW4gVVNE
WiBpbiBBUiBRdWlja0xvb2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3Ry
aW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAppbmRleCBkYzk0MTA0
YjU5MmQxMDhkMDBiODI1ODA3NjJiMTE1MThmMDdjZGQ5Li5kY2RjOGU0MDFmZTE2M2FmOThkM2I5
NjI3ZmVlZWIwMGIwOGY1MGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0
cmluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCkBAIC03OCwx
MTYgKzc4LDEyIEBAIGludCBjb2RlUG9pbnRDb21wYXJlKGNvbnN0IFN0cmluZyYgYSwgY29uc3Qg
U3RyaW5nJiBiKQogICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKGEuaW1wbCgpLCBiLmltcGwo
KSk7CiB9CiAKLXZvaWQgU3RyaW5nOjppbnNlcnQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2ln
bmVkIHBvc2l0aW9uKQorU3RyaW5nIG1ha2VTdHJpbmdCeUluc2VydGluZyhjb25zdCBTdHJpbmcm
IG9yaWdpbmFsU3RyaW5nLCBTdHJpbmdWaWV3IHN0cmluZ1RvSW5zZXJ0LCB1bnNpZ25lZCBwb3Np
dGlvbikKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBleHRyZW1lbHkgaW5lZmZpY2llbnQuIFNv
IG11Y2ggc28gdGhhdCB3ZSBtaWdodCB3YW50IHRvIHRha2UgdGhpcyBvdXQgb2YgU3RyaW5nJ3Mg
QVBJLgotCi0gICAgdW5zaWduZWQgbGVuZ3RoVG9JbnNlcnQgPSBzdHJpbmcubGVuZ3RoKCk7Ci0K
LSAgICBpZiAoIWxlbmd0aFRvSW5zZXJ0KSB7Ci0gICAgICAgIGlmIChzdHJpbmcuaXNOdWxsKCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgICAg
IG1faW1wbCA9IHN0cmluZy5pbXBsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAocG9zaXRpb24gPj0gbGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkK
LSAgICAgICAgICAgIGFwcGVuZChzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzMTYo
KSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChs
ZW5ndGhUb0luc2VydCA+IE1heExlbmd0aCAtIGxlbmd0aCgpKQotICAgICAgICBDUkFTSCgpOwot
Ci0gICAgaWYgKGlzOEJpdCgpICYmIHN0cmluZy5pczhCaXQoKSkgewotICAgICAgICBMQ2hhciog
ZGF0YTsKLSAgICAgICAgYXV0byBuZXdTdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRp
YWxpemVkKGxlbmd0aCgpICsgbGVuZ3RoVG9JbnNlcnQsIGRhdGEpOwotICAgICAgICBTdHJpbmdW
aWV3KCptX2ltcGwpLmxlZnQocG9zaXRpb24pLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRh
dGEpOwotICAgICAgICBTdHJpbmdWaWV3KHN0cmluZykuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZl
cnQoZGF0YSArIHBvc2l0aW9uKTsKLSAgICAgICAgU3RyaW5nVmlldygqbV9pbXBsKS5zdWJzdHJp
bmcocG9zaXRpb24pLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRhdGEgKyBwb3NpdGlvbiAr
IGxlbmd0aFRvSW5zZXJ0KTsKLSAgICAgICAgbV9pbXBsID0gV1RGTW92ZShuZXdTdHJpbmcpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFVDaGFyKiBkYXRhOwotICAgICAgICBhdXRvIG5ld1N0cmlu
ZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCkgKyBsZW5ndGhUb0lu
c2VydCwgZGF0YSk7Ci0gICAgICAgIFN0cmluZ1ZpZXcoKm1faW1wbCkubGVmdChwb3NpdGlvbiku
Z2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGF0YSk7Ci0gICAgICAgIFN0cmluZ1ZpZXcoc3Ry
aW5nKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkYXRhICsgcG9zaXRpb24pOwotICAgICAg
ICBTdHJpbmdWaWV3KCptX2ltcGwpLnN1YnN0cmluZyhwb3NpdGlvbikuZ2V0Q2hhcmFjdGVyc1dp
dGhVcGNvbnZlcnQoZGF0YSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQpOwotICAgICAgICBt
X2ltcGwgPSBXVEZNb3ZlKG5ld1N0cmluZyk7Ci0gICAgfQotfQotCi12b2lkIFN0cmluZzo6YXBw
ZW5kKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzVG9BcHBlbmQsIHVuc2lnbmVkIGxlbmd0aFRvQXBw
ZW5kKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGV4dHJlbWVseSBpbmVmZmljaWVudC4gU28g
bXVjaCBzbyB0aGF0IHdlIG1pZ2h0IHdhbnQgdG8gdGFrZSB0aGlzIG91dCBvZiBTdHJpbmcncyBB
UEkuCi0KLSAgICBpZiAoIW1faW1wbCkgewotICAgICAgICBpZiAoIWNoYXJhY3RlcnNUb0FwcGVu
ZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3Jl
YXRlKGNoYXJhY3RlcnNUb0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGhUb0FwcGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKGNoYXJhY3RlcnNUb0FwcGVuZCk7Ci0KLSAgICB1bnNpZ25lZCBzdHJMZW5ndGgg
PSBtX2ltcGwtPmxlbmd0aCgpOwotCi0gICAgaWYgKG1faW1wbC0+aXM4Qml0KCkpIHsKLSAgICAg
ICAgaWYgKGxlbmd0aFRvQXBwZW5kID4gTWF4TGVuZ3RoIC0gc3RyTGVuZ3RoKQotICAgICAgICAg
ICAgQ1JBU0goKTsKLSAgICAgICAgTENoYXIqIGRhdGE7Ci0gICAgICAgIGF1dG8gbmV3SW1wbCA9
IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoc3RyTGVuZ3RoICsgbGVuZ3RoVG9BcHBl
bmQsIGRhdGEpOwotICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkYXRhLCBtX2lt
cGwtPmNoYXJhY3RlcnM4KCksIHN0ckxlbmd0aCk7Ci0gICAgICAgIFN0cmluZ0ltcGw6OmNvcHlD
aGFyYWN0ZXJzKGRhdGEgKyBzdHJMZW5ndGgsIGNoYXJhY3RlcnNUb0FwcGVuZCwgbGVuZ3RoVG9B
cHBlbmQpOwotICAgICAgICBtX2ltcGwgPSBXVEZNb3ZlKG5ld0ltcGwpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aFRvQXBwZW5kID4gTWF4TGVuZ3RoIC0gc3RyTGVu
Z3RoKQotICAgICAgICBDUkFTSCgpOwotICAgIFVDaGFyKiBkYXRhOwotICAgIGF1dG8gbmV3SW1w
bCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCkgKyBsZW5ndGhUb0Fw
cGVuZCwgZGF0YSk7Ci0gICAgU3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoZGF0YSwgbV9pbXBs
LT5jaGFyYWN0ZXJzMTYoKSwgc3RyTGVuZ3RoKTsKLSAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFj
dGVycyhkYXRhICsgc3RyTGVuZ3RoLCBjaGFyYWN0ZXJzVG9BcHBlbmQsIGxlbmd0aFRvQXBwZW5k
KTsKLSAgICBtX2ltcGwgPSBXVEZNb3ZlKG5ld0ltcGwpOwotfQotCi12b2lkIFN0cmluZzo6YXBw
ZW5kKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzVG9BcHBlbmQsIHVuc2lnbmVkIGxlbmd0aFRvQXBw
ZW5kKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGV4dHJlbWVseSBpbmVmZmljaWVudC4gU28g
bXVjaCBzbyB0aGF0IHdlIG1pZ2h0IHdhbnQgdG8gdGFrZSB0aGlzIG91dCBvZiBTdHJpbmcncyBB
UEkuCi0KLSAgICBpZiAoIW1faW1wbCkgewotICAgICAgICBpZiAoIWNoYXJhY3RlcnNUb0FwcGVu
ZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3Jl
YXRlKGNoYXJhY3RlcnNUb0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGhUb0FwcGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgdW5zaWduZWQgc3RyTGVuZ3RoID0gbV9pbXBsLT5sZW5ndGgoKTsKLQotICAgIEFTU0VSVChj
aGFyYWN0ZXJzVG9BcHBlbmQpOwotICAgIGlmIChsZW5ndGhUb0FwcGVuZCA+IE1heExlbmd0aCAt
IHN0ckxlbmd0aCkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBVQ2hhciogZGF0YTsKLSAgICBhdXRv
IG5ld0ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHN0ckxlbmd0aCArIGxl
bmd0aFRvQXBwZW5kLCBkYXRhKTsKLSAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkKLSAgICAgICAg
U3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoZGF0YSwgY2hhcmFjdGVyczgoKSwgc3RyTGVuZ3Ro
KTsKLSAgICBlbHNlCi0gICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRhdGEsIGNo
YXJhY3RlcnMxNigpLCBzdHJMZW5ndGgpOwotICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJz
KGRhdGEgKyBzdHJMZW5ndGgsIGNoYXJhY3RlcnNUb0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQpOwot
ICAgIG1faW1wbCA9IFdURk1vdmUobmV3SW1wbCk7CisgICAgU3RyaW5nVmlldyBvcmlnaW5hbFN0
cmluZ1ZpZXcgeyBvcmlnaW5hbFN0cmluZyB9OworICAgIHJldHVybiBtYWtlU3RyaW5nKG9yaWdp
bmFsU3RyaW5nVmlldy5sZWZ0KHBvc2l0aW9uKSwgc3RyaW5nVG9JbnNlcnQsIG9yaWdpbmFsU3Ry
aW5nVmlldy5zdWJzdHJpbmcocG9zaXRpb24pKTsKIH0KIAotCiBVQ2hhcjMyIFN0cmluZzo6Y2hh
cmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCBpKSBjb25zdAogewogICAgIGlmICghbV9pbXBsIHx8
IGkgPj0gbV9pbXBsLT5sZW5ndGgoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
V1RGU3RyaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IDllNjM5
NGE5YjNlZmIwZmU2Njg1Yjg5MTAwNGRkZWM4YmNlMDVjNjAuLmYyOWYzY2YzNDIyNjdhZjI5Mzk0
MGY3OWQ4MDRmNDcyZWQ5OTI5YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RG
U3RyaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApAQCAtMTkwLDgg
KzE5MCw2IEBAIHB1YmxpYzoKICAgICBib29sIGVuZHNXaXRoKGNoYXIgY2hhcmFjdGVyKSBjb25z
dCB7IHJldHVybiBlbmRzV2l0aChzdGF0aWNfY2FzdDxVQ2hhcj4oY2hhcmFjdGVyKSk7IH0KICAg
ICBib29sIGhhc0luZml4RW5kaW5nQXQoU3RyaW5nVmlldyBzdWZmaXgsIHVuc2lnbmVkIGVuZCkg
Y29uc3Q7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbnNlcnQoY29uc3QgU3RyaW5n
JiwgdW5zaWduZWQgcG9zaXRpb24pOwotCiAgICAgU3RyaW5nJiByZXBsYWNlKFVDaGFyIHRhcmdl
dCwgVUNoYXIgcmVwbGFjZW1lbnQpOwogICAgIFN0cmluZyYgcmVwbGFjZShVQ2hhciB0YXJnZXQs
IFN0cmluZ1ZpZXcgcmVwbGFjZW1lbnQpOwogICAgIFN0cmluZyYgcmVwbGFjZShTdHJpbmdWaWV3
IHRhcmdldCwgU3RyaW5nVmlldyByZXBsYWNlbWVudCk7CkBAIC0zMzQsMTAgKzMzMiw2IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9p
ZCByZW1vdmVJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiwgdW5zaWduZWQsIHVuc2lnbmVk
KTsKIAotICAgIC8vIEZJWE1FOiBPbmx5IHVzZWQgYnkgaW5zZXJ0KCksIHdlIHNob3VsZCBjb25z
aWRlciBkcm9wcGluZyB0aGVtLgotICAgIHZvaWQgYXBwZW5kKGNvbnN0IExDaGFyKiwgdW5zaWdu
ZWQgbGVuZ3RoKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0
aCk7Ci0KICAgICB0ZW1wbGF0ZTxib29sIGFsbG93RW1wdHlFbnRyaWVzPiB2b2lkIHNwbGl0SW50
ZXJuYWwoVUNoYXIgc2VwYXJhdG9yLCBjb25zdCBTcGxpdEZ1bmN0b3ImKSBjb25zdDsKICAgICB0
ZW1wbGF0ZTxib29sIGFsbG93RW1wdHlFbnRyaWVzPiBWZWN0b3I8U3RyaW5nPiBzcGxpdEludGVy
bmFsKFVDaGFyIHNlcGFyYXRvcikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Ym9vbCBhbGxvd0VtcHR5
RW50cmllcz4gVmVjdG9yPFN0cmluZz4gc3BsaXRJbnRlcm5hbChTdHJpbmdWaWV3IHNlcGFyYXRv
cikgY29uc3Q7CkBAIC02MDksNiArNjAzLDggQEAgdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBp
bmxpbmUgYm9vbCBzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFMKICAg
ICByZXR1cm4gc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcuaW1wbCgp
LCBsb3dlcmNhc2VMZXR0ZXJzKTsKIH0KIAorV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBtYWtl
U3RyaW5nQnlJbnNlcnRpbmcoY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZywgU3RyaW5nVmll
dyBzdHJpbmdUb0luc2VydCwgdW5zaWduZWQgcG9zaXRpb24pOworCiBzdHJ1Y3QgSGFzaFRyYW5z
bGF0b3JBU0NJSUxpdGVyYWwgewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKEFTQ0lJTGl0ZXJh
bCBsaXRlcmFsKQogICAgIHsKQEAgLTY0NSw2ICs2NDEsNyBAQCB1c2luZyBXVEY6OmFwcGVuZE51
bWJlcjsKIHVzaW5nIFdURjo6Y2hhcmFjdGVyc1RvRG91YmxlOwogdXNpbmcgV1RGOjpjaGFyYWN0
ZXJzVG9GbG9hdDsKIHVzaW5nIFdURjo6ZW1wdHlTdHJpbmc7Cit1c2luZyBXVEY6Om1ha2VTdHJp
bmdCeUluc2VydGluZzsKIHVzaW5nIFdURjo6bnVsbFN0cmluZzsKIHVzaW5nIFdURjo6ZXF1YWw7
CiB1c2luZyBXVEY6OmZpbmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc291cmNlL01lZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
b3VyY2UvTWVkaWFTb3VyY2UuY3BwCmluZGV4IDhjYjZkNWNmYzM4ZDZlZjgwZjdlMzk0MWZiOTU4
YTM0ZDUzNWZjYzguLmU0NWM1YjJjNDAzMmZiOTU5MDQ3MWZmMTRmYTYyNjJiNDIzZTAzMTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2Uu
Y3BwCkBAIC02NTAsOCArNjUwLDcgQEAgc3RhdGljIENvbnRlbnRUeXBlIGFkZFZQOUZ1bGxSYW5n
ZVZpZGVvRmxhZ1RvQ29udGVudFR5cGUoY29uc3QgQ29udGVudFR5cGUmIHR5cGUKICAgICAgICAg
aWYgKHBvc2l0aW9uID09IG5vdEZvdW5kKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgcmF3VHlwZS5pbnNlcnQoIi4wMCJfcywgcG9zaXRpb24gKyBjb2RlYy5sZW5ndGgoKSk7Ci0g
ICAgICAgIHJldHVybiBDb250ZW50VHlwZShyYXdUeXBlKTsKKyAgICAgICAgcmV0dXJuIENvbnRl
bnRUeXBlKG1ha2VTdHJpbmdCeUluc2VydGluZyhyYXdUeXBlLCAiLjAwIl9zLCBwb3NpdGlvbiAr
IGNvZGVjLmxlbmd0aCgpKSk7CiAgICAgfQogICAgIHJldHVybiB0eXBlOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NoYXJhY3RlckRhdGEuY3BwCmluZGV4IDk3NTUyZWFmMTJlYzQ0MGQ5OWI4ZDJiYzk4NWM2
YWI3OWRjZjhhYWUuLmQ5ZmUyZTFiYTk5NmExYjM2MGRhZGE2YzE5MzE4OGE4NzE1ZDRjZGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKQEAgLTEzOCw4ICsxMzgsNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBDaGFyYWN0ZXJEYXRhOjppbnNlcnREYXRhKHVuc2lnbmVkIG9mZnNldCwg
Y29uc3QgU3RyaW5nJiBkYXRhKQogICAgIGlmIChvZmZzZXQgPiBsZW5ndGgoKSkKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAKLSAgICBTdHJpbmcgbmV3RGF0
YSA9IG1fZGF0YTsKLSAgICBuZXdEYXRhLmluc2VydChkYXRhLCBvZmZzZXQpOworICAgIFN0cmlu
ZyBuZXdEYXRhID0gbWFrZVN0cmluZ0J5SW5zZXJ0aW5nKG1fZGF0YSwgZGF0YSwgb2Zmc2V0KTsK
ICAgICBzZXREYXRhQW5kVXBkYXRlKG5ld0RhdGEsIG9mZnNldCwgMCwgZGF0YS5sZW5ndGgoKSk7
CiAKICAgICByZXR1cm4geyB9OwpAQCAtMTY2LDEwICsxNjUsOSBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBDaGFyYWN0ZXJEYXRhOjpyZXBsYWNlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNv
dW50LCBjbwogCiAgICAgY291bnQgPSBzdGQ6Om1pbihjb3VudCwgbGVuZ3RoKCkgLSBvZmZzZXQp
OwogCi0gICAgU3RyaW5nIG5ld0RhdGEgPSBtX2RhdGE7Ci0gICAgbmV3RGF0YS5yZW1vdmUob2Zm
c2V0LCBjb3VudCk7Ci0gICAgbmV3RGF0YS5pbnNlcnQoZGF0YSwgb2Zmc2V0KTsKLSAgICBzZXRE
YXRhQW5kVXBkYXRlKG5ld0RhdGEsIG9mZnNldCwgY291bnQsIGRhdGEubGVuZ3RoKCkpOworICAg
IFN0cmluZ1ZpZXcgb2xkRGF0YVZpZXcgeyBtX2RhdGEgfTsKKyAgICBhdXRvIG5ld0RhdGEgPSBt
YWtlU3RyaW5nKG9sZERhdGFWaWV3LmxlZnQob2Zmc2V0KSwgZGF0YSwgb2xkRGF0YVZpZXcuc3Vi
c3RyaW5nKG9mZnNldCArIGNvdW50KSk7CisgICAgc2V0RGF0YUFuZFVwZGF0ZShXVEZNb3ZlKG5l
d0RhdGEpLCBvZmZzZXQsIGNvdW50LCBkYXRhLmxlbmd0aCgpKTsKIAogICAgIHJldHVybiB7IH07
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQuY3BwCmluZGV4IGUyZDE1ZDFiMzEwYmY3M2I0NWMzZWZiMDdkNDcyYjZlNDM2ODI4OTEuLmQ2
NmQ5OWU1ZTQ2ZjI2YzQyOTg2YjMxN2YwNDdiOWVlZjA2MDc3NjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC0yNTksNyAr
MjU5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNl
dFJhbmdlVGV4dChjb25zdCBTdHJpbmcmIHJlcGxhY2UKICAgICBpZiAoc3RhcnQgPCBlbmQpCiAg
ICAgICAgIHRleHQucmVwbGFjZShzdGFydCwgZW5kIC0gc3RhcnQsIHJlcGxhY2VtZW50KTsKICAg
ICBlbHNlCi0gICAgICAgIHRleHQuaW5zZXJ0KHJlcGxhY2VtZW50LCBzdGFydCk7CisgICAgICAg
IHRleHQgPSBtYWtlU3RyaW5nQnlJbnNlcnRpbmcodGV4dCwgcmVwbGFjZW1lbnQsIHN0YXJ0KTsK
IAogICAgIHNldFZhbHVlKHRleHQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3I6OkRpc3BhdGNoTm9F
dmVudCwgVGV4dENvbnRyb2xTZXRWYWx1ZVNlbGVjdGlvbjo6RG9Ob3RTZXQpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwCmluZGV4
IDY3OTI0NDBmMGFmOTNkNWI2YmFmOGM5ZGQ3MDFlZDhlMDI0Yzk1MDIuLjIzMWIzYTIxZmY4N2Q1
Yzc5NmRmNTlmM2MzYjIyOThjY2U2NjdhMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgcHVi
bGljOgogICAgICAgICBhdXRvIG1lZGlhVHlwZSA9IChpc0Jhc2U2NCA/IGhlYWRlci5sZWZ0KG1l
ZGlhVHlwZUVuZCkgOiBoZWFkZXIpLnRvU3RyaW5nKCk7CiAgICAgICAgIG1lZGlhVHlwZSA9IHN0
cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRUUFNwYWNlcyhtZWRpYVR5cGUpOwogICAgICAgICBpZiAo
bWVkaWFUeXBlLnN0YXJ0c1dpdGgoJzsnKSkKLSAgICAgICAgICAgIG1lZGlhVHlwZS5pbnNlcnQo
InRleHQvcGxhaW4iX3MsIDApOworICAgICAgICAgICAgbWVkaWFUeXBlID0gbWFrZVN0cmluZygi
dGV4dC9wbGFpbiJfcywgbWVkaWFUeXBlKTsKIAogICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlRnJh
Z21lbnRJZGVudGlmaWVyKG1lZGlhVHlwZSkpCiAgICAgICAgICAgICB1cmwucmVtb3ZlRnJhZ21l
bnRJZGVudGlmaWVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
UGFzdGVib2FyZFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2Fy
ZFdpbi5jcHAKaW5kZXggN2QxNTM2YTdkNjRkM2ZjODM2Mjc2MmYzYTcwNGRhNTM4YzZmN2E2Mi4u
MDZkZDM1Zjk4NzJjYjlhZjUxOGFiOTRjNTU3NTA4OTM4ZWE2N2ZkZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcApAQCAtOTUwLDggKzk1MCw3IEBA
IHN0YXRpYyBIR0xPQkFMIGNyZWF0ZUdsb2JhbEltYWdlRmlsZURlc2NyaXB0b3IoY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYKICAgICAgICAgR2xvYmFsRnJlZShtZW1PYmopOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgZXh0ZW5zaW9uLmluc2VydCgiLiJfcywgMCk7Ci0g
ICAgZnNQYXRoID0gZmlsZVN5c3RlbVBhdGhGcm9tVVJMT3JUaXRsZSh1cmwsIHByZWZlcnJlZFRp
dGxlLCBleHRlbnNpb24sIGZhbHNlKTsKKyAgICBmc1BhdGggPSBmaWxlU3lzdGVtUGF0aEZyb21V
UkxPclRpdGxlKHVybCwgcHJlZmVycmVkVGl0bGUsIG1ha2VTdHJpbmcoJy4nLCBleHRlbnNpb24p
LCBmYWxzZSk7CiAKICAgICBpZiAoZnNQYXRoLmxlbmd0aCgpIDw9IDApIHsKICAgICAgICAgR2xv
YmFsVW5sb2NrKG1lbU9iaik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457741</attachid>
            <date>2022-04-15 21:08:00 -0700</date>
            <delta_ts>2022-04-16 13:32:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-239370-20220415210759.patch</filename>
            <type>text/plain</type>
            <size>12932</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyOTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDUyNDAxNTJjNjU4NGZjOWQ3ODBkMWE1
ZTA0Njg3MzAxYWUxMmNiNmQuLmY3MWMxOTBmMGVlOTIyNWIxNjVkZjBkMTdlZTBiNTYzMDY5NzI3
NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjItMDQtMTUgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIGNvbXBsZXggU3RyaW5nOjppbnNlcnQoKSB3
aXRoIGEgc2ltcGxpZmllZCBtYWtlU3RyaW5nQnlJbnNlcnRpbmcoKSBmcmVlIGZ1bmN0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzkzNzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIHd0Zi90ZXh0L1dU
RlN0cmluZy5jcHA6CisgICAgICAgIChXVEY6Om1ha2VTdHJpbmdCeUluc2VydGluZyk6CisgICAg
ICAgIChXVEY6OlN0cmluZzo6aW5zZXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5n
OjphcHBlbmQpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOgorCiAy
MDIyLTA0LTE1ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AcmVkaGF0LmNvbT4KIAog
ICAgICAgICBJR05PUkVfV0FSTklOR1NfQkVHSU4gc2hvdWxkIG5vdCB3YXJuIGFib3V0IHVucmVj
b2duaXplZCB3YXJuaW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDQyNjU4YmVkMzY5NzE2OWE2NDNkNDNmZjZk
MWFjMDlkNDcwNGVlOWIuLjczNTQ4MGMxNjI0ZTY4ZjUyNmNlNmViMTM4YmRhNTJkYzIwOTQ4OTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMi0wNC0xNSAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgY29tcGxleCBTdHJpbmc6Omluc2Vy
dCgpIHdpdGggYSBzaW1wbGlmaWVkIG1ha2VTdHJpbmdCeUluc2VydGluZygpIGZyZWUgZnVuY3Rp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTM3
MAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICogTW9kdWxl
cy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRWUDlG
dWxsUmFuZ2VWaWRlb0ZsYWdUb0NvbnRlbnRUeXBlKToKKyAgICAgICAgKiBkb20vQ2hhcmFjdGVy
RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjppbnNlcnREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnJlcGxhY2VEYXRhKToKKyAgICAgICAg
KiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRSYW5nZVRleHQpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvRGF0YVVSTERlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YVVSTERlY29kZXI6OkRlY29kZVRhc2s6OnByb2Nlc3MpOgorICAgICAgICAqIHBsYXRmb3JtL3dp
bi9QYXN0ZWJvYXJkV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdsb2JhbEltYWdl
RmlsZURlc2NyaXB0b3IpOgorCiAyMDIyLTA0LTE1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmVuYW1lIFdlYkNvcmU6OndlYkNvcmVCdWlsdGluTmFtZXMoKSB0
byBXZWJDb3JlOjpidWlsdGluTmFtZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdDb25jYXRlbmF0ZS5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRl
bmF0ZS5oCmluZGV4IDhhMDY1NjAzY2U2NWE1MTNmNjhiMjFjMzA1ZjkyYzQxMjBmZTI0ZWYuLjI5
ZTcwOGVmMjY1ZDFhNjAyNzk1YzI3ZWI0NGJjOWJkMWJlMmE4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmgKQEAgLTQ3OCwxMSArNDc4LDE3IEBAIFN0cmluZyBtYWtl
U3RyaW5nKFN0cmluZ1R5cGVzLi4uIHN0cmluZ3MpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAor
aW5saW5lIFN0cmluZyBtYWtlU3RyaW5nQnlJbnNlcnRpbmcoU3RyaW5nVmlldyBvcmlnaW5hbFN0
cmluZywgU3RyaW5nVmlldyBzdHJpbmdUb0luc2VydCwgdW5zaWduZWQgcG9zaXRpb24pCit7Cisg
ICAgcmV0dXJuIG1ha2VTdHJpbmcob3JpZ2luYWxTdHJpbmcubGVmdChwb3NpdGlvbiksIHN0cmlu
Z1RvSW5zZXJ0LCBvcmlnaW5hbFN0cmluZy5zdWJzdHJpbmcocG9zaXRpb24pKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6SW5kZW50YXRpb247CiB1c2luZyBXVEY6Oklu
ZGVudGF0aW9uU2NvcGU7CiB1c2luZyBXVEY6Om1ha2VTdHJpbmc7Cit1c2luZyBXVEY6Om1ha2VT
dHJpbmdCeUluc2VydGluZzsKIHVzaW5nIFdURjo6cGFkOwogdXNpbmcgV1RGOjpsb3dlcmNhc2U7
CiB1c2luZyBXVEY6OnRyeU1ha2VTdHJpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1dURlN0cmluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKaW5k
ZXggZGM5NDEwNGI1OTJkMTA4ZDAwYjgyNTgwNzYyYjExNTE4ZjA3Y2RkOS4uYTQ3OTBiODdlM2I2
MWE5MTc3YzlhMTRiY2FlZTBlMDcxZWQ3NGI1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
dGV4dC9XVEZTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNw
cApAQCAtNzgsMTE2ICs3OCw2IEBAIGludCBjb2RlUG9pbnRDb21wYXJlKGNvbnN0IFN0cmluZyYg
YSwgY29uc3QgU3RyaW5nJiBiKQogICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKGEuaW1wbCgp
LCBiLmltcGwoKSk7CiB9CiAKLXZvaWQgU3RyaW5nOjppbnNlcnQoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIHVuc2lnbmVkIHBvc2l0aW9uKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGV4dHJlbWVs
eSBpbmVmZmljaWVudC4gU28gbXVjaCBzbyB0aGF0IHdlIG1pZ2h0IHdhbnQgdG8gdGFrZSB0aGlz
IG91dCBvZiBTdHJpbmcncyBBUEkuCi0KLSAgICB1bnNpZ25lZCBsZW5ndGhUb0luc2VydCA9IHN0
cmluZy5sZW5ndGgoKTsKLQotICAgIGlmICghbGVuZ3RoVG9JbnNlcnQpIHsKLSAgICAgICAgaWYg
KHN0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGlzTnVs
bCgpKQotICAgICAgICAgICAgbV9pbXBsID0gc3RyaW5nLmltcGwoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChwb3NpdGlvbiA+PSBsZW5ndGgoKSkgewotICAgICAgICBpZiAo
c3RyaW5nLmlzOEJpdCgpKQotICAgICAgICAgICAgYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzOCgp
LCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmQoc3Ry
aW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKGxlbmd0aFRvSW5zZXJ0ID4gTWF4TGVuZ3RoIC0gbGVuZ3RoKCkpCi0g
ICAgICAgIENSQVNIKCk7Ci0KLSAgICBpZiAoaXM4Qml0KCkgJiYgc3RyaW5nLmlzOEJpdCgpKSB7
Ci0gICAgICAgIExDaGFyKiBkYXRhOwotICAgICAgICBhdXRvIG5ld1N0cmluZyA9IFN0cmluZ0lt
cGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCkgKyBsZW5ndGhUb0luc2VydCwgZGF0YSk7
Ci0gICAgICAgIFN0cmluZ1ZpZXcoKm1faW1wbCkubGVmdChwb3NpdGlvbikuZ2V0Q2hhcmFjdGVy
c1dpdGhVcGNvbnZlcnQoZGF0YSk7Ci0gICAgICAgIFN0cmluZ1ZpZXcoc3RyaW5nKS5nZXRDaGFy
YWN0ZXJzV2l0aFVwY29udmVydChkYXRhICsgcG9zaXRpb24pOwotICAgICAgICBTdHJpbmdWaWV3
KCptX2ltcGwpLnN1YnN0cmluZyhwb3NpdGlvbikuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQo
ZGF0YSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQpOwotICAgICAgICBtX2ltcGwgPSBXVEZN
b3ZlKG5ld1N0cmluZyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVUNoYXIqIGRhdGE7Ci0gICAg
ICAgIGF1dG8gbmV3U3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5n
dGgoKSArIGxlbmd0aFRvSW5zZXJ0LCBkYXRhKTsKLSAgICAgICAgU3RyaW5nVmlldygqbV9pbXBs
KS5sZWZ0KHBvc2l0aW9uKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkYXRhKTsKLSAgICAg
ICAgU3RyaW5nVmlldyhzdHJpbmcpLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRhdGEgKyBw
b3NpdGlvbik7Ci0gICAgICAgIFN0cmluZ1ZpZXcoKm1faW1wbCkuc3Vic3RyaW5nKHBvc2l0aW9u
KS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkYXRhICsgcG9zaXRpb24gKyBsZW5ndGhUb0lu
c2VydCk7Ci0gICAgICAgIG1faW1wbCA9IFdURk1vdmUobmV3U3RyaW5nKTsKLSAgICB9Ci19Ci0K
LXZvaWQgU3RyaW5nOjphcHBlbmQoY29uc3QgTENoYXIqIGNoYXJhY3RlcnNUb0FwcGVuZCwgdW5z
aWduZWQgbGVuZ3RoVG9BcHBlbmQpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgZXh0cmVtZWx5
IGluZWZmaWNpZW50LiBTbyBtdWNoIHNvIHRoYXQgd2UgbWlnaHQgd2FudCB0byB0YWtlIHRoaXMg
b3V0IG9mIFN0cmluZydzIEFQSS4KLQotICAgIGlmICghbV9pbXBsKSB7Ci0gICAgICAgIGlmICgh
Y2hhcmFjdGVyc1RvQXBwZW5kKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ltcGwg
PSBTdHJpbmdJbXBsOjpjcmVhdGUoY2hhcmFjdGVyc1RvQXBwZW5kLCBsZW5ndGhUb0FwcGVuZCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aFRvQXBwZW5kKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoY2hhcmFjdGVyc1RvQXBwZW5kKTsKLQotICAgIHVu
c2lnbmVkIHN0ckxlbmd0aCA9IG1faW1wbC0+bGVuZ3RoKCk7Ci0KLSAgICBpZiAobV9pbXBsLT5p
czhCaXQoKSkgewotICAgICAgICBpZiAobGVuZ3RoVG9BcHBlbmQgPiBNYXhMZW5ndGggLSBzdHJM
ZW5ndGgpCi0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICBMQ2hhciogZGF0YTsKLSAgICAg
ICAgYXV0byBuZXdJbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChzdHJMZW5n
dGggKyBsZW5ndGhUb0FwcGVuZCwgZGF0YSk7Ci0gICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFy
YWN0ZXJzKGRhdGEsIG1faW1wbC0+Y2hhcmFjdGVyczgoKSwgc3RyTGVuZ3RoKTsKLSAgICAgICAg
U3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoZGF0YSArIHN0ckxlbmd0aCwgY2hhcmFjdGVyc1Rv
QXBwZW5kLCBsZW5ndGhUb0FwcGVuZCk7Ci0gICAgICAgIG1faW1wbCA9IFdURk1vdmUobmV3SW1w
bCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoVG9BcHBlbmQgPiBN
YXhMZW5ndGggLSBzdHJMZW5ndGgpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgVUNoYXIqIGRhdGE7
Ci0gICAgYXV0byBuZXdJbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5n
dGgoKSArIGxlbmd0aFRvQXBwZW5kLCBkYXRhKTsKLSAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFj
dGVycyhkYXRhLCBtX2ltcGwtPmNoYXJhY3RlcnMxNigpLCBzdHJMZW5ndGgpOwotICAgIFN0cmlu
Z0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRhdGEgKyBzdHJMZW5ndGgsIGNoYXJhY3RlcnNUb0FwcGVu
ZCwgbGVuZ3RoVG9BcHBlbmQpOwotICAgIG1faW1wbCA9IFdURk1vdmUobmV3SW1wbCk7Ci19Ci0K
LXZvaWQgU3RyaW5nOjphcHBlbmQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnNUb0FwcGVuZCwgdW5z
aWduZWQgbGVuZ3RoVG9BcHBlbmQpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgZXh0cmVtZWx5
IGluZWZmaWNpZW50LiBTbyBtdWNoIHNvIHRoYXQgd2UgbWlnaHQgd2FudCB0byB0YWtlIHRoaXMg
b3V0IG9mIFN0cmluZydzIEFQSS4KLQotICAgIGlmICghbV9pbXBsKSB7Ci0gICAgICAgIGlmICgh
Y2hhcmFjdGVyc1RvQXBwZW5kKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ltcGwg
PSBTdHJpbmdJbXBsOjpjcmVhdGUoY2hhcmFjdGVyc1RvQXBwZW5kLCBsZW5ndGhUb0FwcGVuZCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aFRvQXBwZW5kKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBzdHJMZW5ndGggPSBtX2ltcGwtPmxlbmd0aCgp
OwotCi0gICAgQVNTRVJUKGNoYXJhY3RlcnNUb0FwcGVuZCk7Ci0gICAgaWYgKGxlbmd0aFRvQXBw
ZW5kID4gTWF4TGVuZ3RoIC0gc3RyTGVuZ3RoKQotICAgICAgICBDUkFTSCgpOwotICAgIFVDaGFy
KiBkYXRhOwotICAgIGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQoc3RyTGVuZ3RoICsgbGVuZ3RoVG9BcHBlbmQsIGRhdGEpOwotICAgIGlmIChtX2ltcGwtPmlz
OEJpdCgpKQotICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkYXRhLCBjaGFyYWN0
ZXJzOCgpLCBzdHJMZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNo
YXJhY3RlcnMoZGF0YSwgY2hhcmFjdGVyczE2KCksIHN0ckxlbmd0aCk7Ci0gICAgU3RyaW5nSW1w
bDo6Y29weUNoYXJhY3RlcnMoZGF0YSArIHN0ckxlbmd0aCwgY2hhcmFjdGVyc1RvQXBwZW5kLCBs
ZW5ndGhUb0FwcGVuZCk7Ci0gICAgbV9pbXBsID0gV1RGTW92ZShuZXdJbXBsKTsKLX0KLQotCiBV
Q2hhcjMyIFN0cmluZzo6Y2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCBpKSBjb25zdAogewog
ICAgIGlmICghbV9pbXBsIHx8IGkgPj0gbV9pbXBsLT5sZW5ndGgoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0
cmluZy5oCmluZGV4IDllNjM5NGE5YjNlZmIwZmU2Njg1Yjg5MTAwNGRkZWM4YmNlMDVjNjAuLjU0
ZDBiYmVmZTA3Y2JkNTlhNTczOGU5NDU0YTE4MWUyMWIwMWRmM2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZT
dHJpbmcuaApAQCAtMTkwLDggKzE5MCw2IEBAIHB1YmxpYzoKICAgICBib29sIGVuZHNXaXRoKGNo
YXIgY2hhcmFjdGVyKSBjb25zdCB7IHJldHVybiBlbmRzV2l0aChzdGF0aWNfY2FzdDxVQ2hhcj4o
Y2hhcmFjdGVyKSk7IH0KICAgICBib29sIGhhc0luZml4RW5kaW5nQXQoU3RyaW5nVmlldyBzdWZm
aXgsIHVuc2lnbmVkIGVuZCkgY29uc3Q7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBp
bnNlcnQoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgcG9zaXRpb24pOwotCiAgICAgU3RyaW5nJiBy
ZXBsYWNlKFVDaGFyIHRhcmdldCwgVUNoYXIgcmVwbGFjZW1lbnQpOwogICAgIFN0cmluZyYgcmVw
bGFjZShVQ2hhciB0YXJnZXQsIFN0cmluZ1ZpZXcgcmVwbGFjZW1lbnQpOwogICAgIFN0cmluZyYg
cmVwbGFjZShTdHJpbmdWaWV3IHRhcmdldCwgU3RyaW5nVmlldyByZXBsYWNlbWVudCk7CkBAIC0z
MzQsMTAgKzMzMiw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gdm9pZCByZW1vdmVJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiwg
dW5zaWduZWQsIHVuc2lnbmVkKTsKIAotICAgIC8vIEZJWE1FOiBPbmx5IHVzZWQgYnkgaW5zZXJ0
KCksIHdlIHNob3VsZCBjb25zaWRlciBkcm9wcGluZyB0aGVtLgotICAgIHZvaWQgYXBwZW5kKGNv
bnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBVQ2hh
ciosIHVuc2lnbmVkIGxlbmd0aCk7Ci0KICAgICB0ZW1wbGF0ZTxib29sIGFsbG93RW1wdHlFbnRy
aWVzPiB2b2lkIHNwbGl0SW50ZXJuYWwoVUNoYXIgc2VwYXJhdG9yLCBjb25zdCBTcGxpdEZ1bmN0
b3ImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxib29sIGFsbG93RW1wdHlFbnRyaWVzPiBWZWN0b3I8
U3RyaW5nPiBzcGxpdEludGVybmFsKFVDaGFyIHNlcGFyYXRvcikgY29uc3Q7CiAgICAgdGVtcGxh
dGU8Ym9vbCBhbGxvd0VtcHR5RW50cmllcz4gVmVjdG9yPFN0cmluZz4gc3BsaXRJbnRlcm5hbChT
dHJpbmdWaWV3IHNlcGFyYXRvcikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCmluZGV4IDhjYjZkNWNmYzM4ZDZlZjgwZjdl
Mzk0MWZiOTU4YTM0ZDUzNWZjYzguLmU0NWM1YjJjNDAzMmZiOTU5MDQ3MWZmMTRmYTYyNjJiNDIz
ZTAzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVk
aWFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVk
aWFTb3VyY2UuY3BwCkBAIC02NTAsOCArNjUwLDcgQEAgc3RhdGljIENvbnRlbnRUeXBlIGFkZFZQ
OUZ1bGxSYW5nZVZpZGVvRmxhZ1RvQ29udGVudFR5cGUoY29uc3QgQ29udGVudFR5cGUmIHR5cGUK
ICAgICAgICAgaWYgKHBvc2l0aW9uID09IG5vdEZvdW5kKQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgcmF3VHlwZS5pbnNlcnQoIi4wMCJfcywgcG9zaXRpb24gKyBjb2RlYy5sZW5n
dGgoKSk7Ci0gICAgICAgIHJldHVybiBDb250ZW50VHlwZShyYXdUeXBlKTsKKyAgICAgICAgcmV0
dXJuIENvbnRlbnRUeXBlKG1ha2VTdHJpbmdCeUluc2VydGluZyhyYXdUeXBlLCAiLjAwIl9zLCBw
b3NpdGlvbiArIGNvZGVjLmxlbmd0aCgpKSk7CiAgICAgfQogICAgIHJldHVybiB0eXBlOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCmluZGV4IDk3NTUyZWFmMTJlYzQ0MGQ5OWI4
ZDJiYzk4NWM2YWI3OWRjZjhhYWUuLjI1YzBjNzg3MWExNmNiOWU2ZGU3OGYyOTUwN2E3ZjQ3YTYy
MmI3MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKQEAgLTEzOCw5ICsxMzgs
OCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDaGFyYWN0ZXJEYXRhOjppbnNlcnREYXRhKHVuc2lnbmVk
IG9mZnNldCwgY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIGlmIChvZmZzZXQgPiBsZW5ndGgoKSkK
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CiAKLSAgICBTdHJp
bmcgbmV3RGF0YSA9IG1fZGF0YTsKLSAgICBuZXdEYXRhLmluc2VydChkYXRhLCBvZmZzZXQpOwot
ICAgIHNldERhdGFBbmRVcGRhdGUobmV3RGF0YSwgb2Zmc2V0LCAwLCBkYXRhLmxlbmd0aCgpKTsK
KyAgICBhdXRvIG5ld0RhdGEgPSBtYWtlU3RyaW5nQnlJbnNlcnRpbmcobV9kYXRhLCBkYXRhLCBv
ZmZzZXQpOworICAgIHNldERhdGFBbmRVcGRhdGUoV1RGTW92ZShuZXdEYXRhKSwgb2Zmc2V0LCAw
LCBkYXRhLmxlbmd0aCgpKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xNTQsNyArMTUzLDcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6ZGVsZXRlRGF0YSh1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGNvdW50KQogCiAgICAgU3RyaW5nIG5ld0RhdGEgPSBtX2RhdGE7CiAg
ICAgbmV3RGF0YS5yZW1vdmUob2Zmc2V0LCBjb3VudCk7Ci0gICAgc2V0RGF0YUFuZFVwZGF0ZShu
ZXdEYXRhLCBvZmZzZXQsIGNvdW50LCAwKTsKKyAgICBzZXREYXRhQW5kVXBkYXRlKFdURk1vdmUo
bmV3RGF0YSksIG9mZnNldCwgY291bnQsIDApOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTE2
NiwxMCArMTY1LDkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6cmVwbGFjZURh
dGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY28KIAogICAgIGNvdW50ID0gc3Rk
OjptaW4oY291bnQsIGxlbmd0aCgpIC0gb2Zmc2V0KTsKIAotICAgIFN0cmluZyBuZXdEYXRhID0g
bV9kYXRhOwotICAgIG5ld0RhdGEucmVtb3ZlKG9mZnNldCwgY291bnQpOwotICAgIG5ld0RhdGEu
aW5zZXJ0KGRhdGEsIG9mZnNldCk7Ci0gICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdEYXRhLCBvZmZz
ZXQsIGNvdW50LCBkYXRhLmxlbmd0aCgpKTsKKyAgICBTdHJpbmdWaWV3IG9sZERhdGFWaWV3IHsg
bV9kYXRhIH07CisgICAgYXV0byBuZXdEYXRhID0gbWFrZVN0cmluZyhvbGREYXRhVmlldy5sZWZ0
KG9mZnNldCksIGRhdGEsIG9sZERhdGFWaWV3LnN1YnN0cmluZyhvZmZzZXQgKyBjb3VudCkpOwor
ICAgIHNldERhdGFBbmRVcGRhdGUoV1RGTW92ZShuZXdEYXRhKSwgb2Zmc2V0LCBjb3VudCwgZGF0
YS5sZW5ndGgoKSk7CiAKICAgICByZXR1cm4geyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCBlMmQxNWQxYjMxMGJm
NzNiNDVjM2VmYjA3ZDQ3MmI2ZTQzNjgyODkxLi5kNjZkOTllNWU0NmYyNmM0Mjk4NmIzMTdmMDQ3
YjllZWYwNjA3NzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMjU5LDcgKzI1OSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRSYW5nZVRleHQoY29uc3QgU3RyaW5nJiBy
ZXBsYWNlCiAgICAgaWYgKHN0YXJ0IDwgZW5kKQogICAgICAgICB0ZXh0LnJlcGxhY2Uoc3RhcnQs
IGVuZCAtIHN0YXJ0LCByZXBsYWNlbWVudCk7CiAgICAgZWxzZQotICAgICAgICB0ZXh0Lmluc2Vy
dChyZXBsYWNlbWVudCwgc3RhcnQpOworICAgICAgICB0ZXh0ID0gbWFrZVN0cmluZ0J5SW5zZXJ0
aW5nKHRleHQsIHJlcGxhY2VtZW50LCBzdGFydCk7CiAKICAgICBzZXRWYWx1ZSh0ZXh0LCBUZXh0
RmllbGRFdmVudEJlaGF2aW9yOjpEaXNwYXRjaE5vRXZlbnQsIFRleHRDb250cm9sU2V0VmFsdWVT
ZWxlY3Rpb246OkRvTm90U2V0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9EYXRhVVJMRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0RhdGFVUkxEZWNvZGVyLmNwcAppbmRleCA2NzkyNDQwZjBhZjkzZDViNmJhZjhjOWRk
NzAxZWQ4ZTAyNGM5NTAyLi4yMzFiM2EyMWZmODdkNWM3OTZkZjU5ZjNjM2IyMjk4Y2NlNjY3YTFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNv
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0RhdGFVUkxEZWNv
ZGVyLmNwcApAQCAtMTE4LDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgYXV0byBtZWRpYVR5
cGUgPSAoaXNCYXNlNjQgPyBoZWFkZXIubGVmdChtZWRpYVR5cGVFbmQpIDogaGVhZGVyKS50b1N0
cmluZygpOwogICAgICAgICBtZWRpYVR5cGUgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUVFBT
cGFjZXMobWVkaWFUeXBlKTsKICAgICAgICAgaWYgKG1lZGlhVHlwZS5zdGFydHNXaXRoKCc7Jykp
Ci0gICAgICAgICAgICBtZWRpYVR5cGUuaW5zZXJ0KCJ0ZXh0L3BsYWluIl9zLCAwKTsKKyAgICAg
ICAgICAgIG1lZGlhVHlwZSA9IG1ha2VTdHJpbmcoInRleHQvcGxhaW4iX3MsIG1lZGlhVHlwZSk7
CiAKICAgICAgICAgaWYgKHNob3VsZFJlbW92ZUZyYWdtZW50SWRlbnRpZmllcihtZWRpYVR5cGUp
KQogICAgICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCmluZGV4IDdkMTUzNmE3ZDY0
ZDNmYzgzNjI3NjJmM2E3MDRkYTUzOGM2ZjdhNjIuLjA2ZGQzNWY5ODcyY2I5YWY1MThhYjk0YzU1
NzUwODkzOGVhNjdmZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Q
YXN0ZWJvYXJkV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVi
b2FyZFdpbi5jcHAKQEAgLTk1MCw4ICs5NTAsNyBAQCBzdGF0aWMgSEdMT0JBTCBjcmVhdGVHbG9i
YWxJbWFnZUZpbGVEZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmCiAg
ICAgICAgIEdsb2JhbEZyZWUobWVtT2JqKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAg
IGV4dGVuc2lvbi5pbnNlcnQoIi4iX3MsIDApOwotICAgIGZzUGF0aCA9IGZpbGVTeXN0ZW1QYXRo
RnJvbVVSTE9yVGl0bGUodXJsLCBwcmVmZXJyZWRUaXRsZSwgZXh0ZW5zaW9uLCBmYWxzZSk7Cisg
ICAgZnNQYXRoID0gZmlsZVN5c3RlbVBhdGhGcm9tVVJMT3JUaXRsZSh1cmwsIHByZWZlcnJlZFRp
dGxlLCBtYWtlU3RyaW5nKCcuJywgZXh0ZW5zaW9uKSwgZmFsc2UpOwogCiAgICAgaWYgKGZzUGF0
aC5sZW5ndGgoKSA8PSAwKSB7CiAgICAgICAgIEdsb2JhbFVubG9jayhtZW1PYmopOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>