<?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>227843</bug_id>
          
          <creation_ts>2021-07-09 10:22:22 -0700</creation_ts>
          <short_desc>[ITP] Improve ResourceLoadStatisticsDatabaseStore&apos;s buildList() and use it in more places</short_desc>
          <delta_ts>2021-07-10 09:49:29 -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>
          
          
          <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>bfulgham</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>katherine_cheney</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1776022</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-07-09 10:22:22 -0700</bug_when>
    <thetext>Improve ResourceLoadStatisticsDatabaseStore&apos;s buildList() and use it in more places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776026</commentid>
    <comment_count>1</comment_count>
      <attachid>433224</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-07-09 10:34:04 -0700</bug_when>
    <thetext>Created attachment 433224
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776031</commentid>
    <comment_count>2</comment_count>
      <attachid>433225</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-07-09 10:38:48 -0700</bug_when>
    <thetext>Created attachment 433225
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776111</commentid>
    <comment_count>3</comment_count>
      <attachid>433225</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-07-09 17:15:53 -0700</bug_when>
    <thetext>Comment on attachment 433225
Patch

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

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:330
&gt; +static String buildList(const ContainerType&amp; values)

One day I will add the following to WTF:

template &lt;typename ContainerType, typename SeparatorType, typename TransformFunctor&gt; String join(const ContainerType&amp; values, const SeparatorType&amp; separator, TransformFunctor&amp;&amp; functor)
{
    StringBuilder builder;

    bool first = true;
    for (auto&amp; value : values) {
        auto tuple = std::invoke(functor, value);
        if (first) {
            builder.append(tuple);
            first = false;
        } else
            builder.append(separator, tuple);
    }
    return builder.toString();
}

so this becomes

template &lt;typename ContainerType&gt; static String buildList(const ContainerType&amp; values)
{
    return join(values, &quot;, &quot;, [](auto&amp; value) {
        if constexpr (std::is_arithmetic_v&lt;std::remove_reference_t&lt;decltype(value)&gt;&gt;)
            return std::make_tuple(&apos;&quot;&apos;, value, &apos;&quot;&apos;);
        else
            return value;
    });
}


I&apos;m unclear it it is better :).

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:338
&gt; +        if constexpr (std::is_arithmetic_v&lt;std::remove_reference_t&lt;decltype(value)&gt;&gt;) {
&gt; +            builder.append(builder.isEmpty() ? &quot;&quot; : &quot;, &quot;, value);
&gt; +        } else {
&gt; +            builder.append(builder.isEmpty() ? &quot;&quot; : &quot;, &quot;, &apos;&quot;&apos;, value, &apos;&quot;&apos;);
&gt; +        }

No need for the braces here. I think it is likely a bit more efficient to use dedicated bool rather than check isEmpty().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776114</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-07-09 17:27:04 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #3)
&gt; Comment on attachment 433225 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=433225&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:330
&gt; &gt; +static String buildList(const ContainerType&amp; values)
&gt; 
&gt; One day I will add the following to WTF:
&gt; 
&gt; template &lt;typename ContainerType, typename SeparatorType, typename
&gt; TransformFunctor&gt; String join(const ContainerType&amp; values, const
&gt; SeparatorType&amp; separator, TransformFunctor&amp;&amp; functor)
&gt; {
&gt;     StringBuilder builder;
&gt; 
&gt;     bool first = true;
&gt;     for (auto&amp; value : values) {
&gt;         auto tuple = std::invoke(functor, value);
&gt;         if (first) {
&gt;             builder.append(tuple);
&gt;             first = false;
&gt;         } else
&gt;             builder.append(separator, tuple);
&gt;     }
&gt;     return builder.toString();
&gt; }
&gt; 
&gt; so this becomes
&gt; 
&gt; template &lt;typename ContainerType&gt; static String buildList(const
&gt; ContainerType&amp; values)
&gt; {
&gt;     return join(values, &quot;, &quot;, [](auto&amp; value) {
&gt;         if constexpr
&gt; (std::is_arithmetic_v&lt;std::remove_reference_t&lt;decltype(value)&gt;&gt;)
&gt;             return std::make_tuple(&apos;&quot;&apos;, value, &apos;&quot;&apos;);
&gt;         else
&gt;             return value;
&gt;     });
&gt; }
&gt; 
&gt; 
&gt; I&apos;m unclear it it is better :).
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:338
&gt; &gt; +        if constexpr (std::is_arithmetic_v&lt;std::remove_reference_t&lt;decltype(value)&gt;&gt;) {
&gt; &gt; +            builder.append(builder.isEmpty() ? &quot;&quot; : &quot;, &quot;, value);
&gt; &gt; +        } else {
&gt; &gt; +            builder.append(builder.isEmpty() ? &quot;&quot; : &quot;, &quot;, &apos;&quot;&apos;, value, &apos;&quot;&apos;);
&gt; &gt; +        }
&gt; 
&gt; No need for the braces here. I think it is likely a bit more efficient to
&gt; use dedicated bool rather than check isEmpty().

You mean I do not need the curly braces in the else case, right? I thought you&apos;d like the symmetry, since I need them for the `if constexpr` but I&apos;ll drop them :)

By a dedicated bool, you mean adding a Boolean variable like &quot;isFirst&quot; before the loop then checking it inside the loop and setting it to false?
I am personally not convinced it is worse the extra code given that StringBuilder::isEmpty() is implemented like so:
```
bool isEmpty() const { return !m_length; }
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776116</commentid>
    <comment_count>5</comment_count>
      <attachid>433250</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-07-09 17:33:14 -0700</bug_when>
    <thetext>Created attachment 433250
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776123</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-07-09 20:07:39 -0700</bug_when>
    <thetext>Committed r279802 (239566@main): &lt;https://commits.webkit.org/239566@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 433250.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776124</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-09 20:08:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/80406056&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776136</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-07-10 09:20:06 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #4)
&gt; (In reply to Sam Weinig from comment #3)
&gt; &gt; Comment on attachment 433225 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=433225&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:330
&gt; &gt; &gt; +static String buildList(const ContainerType&amp; values)
&gt; &gt; 
&gt; &gt; One day I will add the following to WTF:
&gt; &gt; 
&gt; &gt; template &lt;typename ContainerType, typename SeparatorType, typename
&gt; &gt; TransformFunctor&gt; String join(const ContainerType&amp; values, const
&gt; &gt; SeparatorType&amp; separator, TransformFunctor&amp;&amp; functor)
&gt; &gt; {
&gt; &gt;     StringBuilder builder;
&gt; &gt; 
&gt; &gt;     bool first = true;
&gt; &gt;     for (auto&amp; value : values) {
&gt; &gt;         auto tuple = std::invoke(functor, value);
&gt; &gt;         if (first) {
&gt; &gt;             builder.append(tuple);
&gt; &gt;             first = false;
&gt; &gt;         } else
&gt; &gt;             builder.append(separator, tuple);
&gt; &gt;     }
&gt; &gt;     return builder.toString();
&gt; &gt; }
&gt; &gt; 
&gt; &gt; so this becomes
&gt; &gt; 
&gt; &gt; template &lt;typename ContainerType&gt; static String buildList(const
&gt; &gt; ContainerType&amp; values)
&gt; &gt; {
&gt; &gt;     return join(values, &quot;, &quot;, [](auto&amp; value) {
&gt; &gt;         if constexpr
&gt; &gt; (std::is_arithmetic_v&lt;std::remove_reference_t&lt;decltype(value)&gt;&gt;)
&gt; &gt;             return std::make_tuple(&apos;&quot;&apos;, value, &apos;&quot;&apos;);
&gt; &gt;         else
&gt; &gt;             return value;
&gt; &gt;     });
&gt; &gt; }
&gt; &gt; 
&gt; &gt; 
&gt; &gt; I&apos;m unclear it it is better :).
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:338
&gt; &gt; &gt; +        if constexpr (std::is_arithmetic_v&lt;std::remove_reference_t&lt;decltype(value)&gt;&gt;) {
&gt; &gt; &gt; +            builder.append(builder.isEmpty() ? &quot;&quot; : &quot;, &quot;, value);
&gt; &gt; &gt; +        } else {
&gt; &gt; &gt; +            builder.append(builder.isEmpty() ? &quot;&quot; : &quot;, &quot;, &apos;&quot;&apos;, value, &apos;&quot;&apos;);
&gt; &gt; &gt; +        }
&gt; &gt; 
&gt; &gt; No need for the braces here. I think it is likely a bit more efficient to
&gt; &gt; use dedicated bool rather than check isEmpty().
&gt; 
&gt; You mean I do not need the curly braces in the else case, right? I thought
&gt; you&apos;d like the symmetry, since I need them for the `if constexpr` but I&apos;ll
&gt; drop them :)

I did mean curly braces. I don&apos;t think you need curly braces here though. What kind of error do you get without them?

&gt; 
&gt; By a dedicated bool, you mean adding a Boolean variable like &quot;isFirst&quot;
&gt; before the loop then checking it inside the loop and setting it to false?
&gt; I am personally not convinced it is worse the extra code given that
&gt; StringBuilder::isEmpty() is implemented like so:
&gt; ```
&gt; bool isEmpty() const { return !m_length; }
&gt; ```

Yeah, you are probably right. Both are probably on the stack so unlikely to be any different.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776139</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-07-10 09:49:29 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #8)
&gt; (In reply to Chris Dumez from comment #4)
&gt; &gt; (In reply to Sam Weinig from comment #3)
&gt; &gt; &gt; Comment on attachment 433225 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=433225&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:330
&gt; &gt; &gt; &gt; +static String buildList(const ContainerType&amp; values)
&gt; &gt; &gt; 
&gt; &gt; &gt; One day I will add the following to WTF:
&gt; &gt; &gt; 
&gt; &gt; &gt; template &lt;typename ContainerType, typename SeparatorType, typename
&gt; &gt; &gt; TransformFunctor&gt; String join(const ContainerType&amp; values, const
&gt; &gt; &gt; SeparatorType&amp; separator, TransformFunctor&amp;&amp; functor)
&gt; &gt; &gt; {
&gt; &gt; &gt;     StringBuilder builder;
&gt; &gt; &gt; 
&gt; &gt; &gt;     bool first = true;
&gt; &gt; &gt;     for (auto&amp; value : values) {
&gt; &gt; &gt;         auto tuple = std::invoke(functor, value);
&gt; &gt; &gt;         if (first) {
&gt; &gt; &gt;             builder.append(tuple);
&gt; &gt; &gt;             first = false;
&gt; &gt; &gt;         } else
&gt; &gt; &gt;             builder.append(separator, tuple);
&gt; &gt; &gt;     }
&gt; &gt; &gt;     return builder.toString();
&gt; &gt; &gt; }
&gt; &gt; &gt; 
&gt; &gt; &gt; so this becomes
&gt; &gt; &gt; 
&gt; &gt; &gt; template &lt;typename ContainerType&gt; static String buildList(const
&gt; &gt; &gt; ContainerType&amp; values)
&gt; &gt; &gt; {
&gt; &gt; &gt;     return join(values, &quot;, &quot;, [](auto&amp; value) {
&gt; &gt; &gt;         if constexpr
&gt; &gt; &gt; (std::is_arithmetic_v&lt;std::remove_reference_t&lt;decltype(value)&gt;&gt;)
&gt; &gt; &gt;             return std::make_tuple(&apos;&quot;&apos;, value, &apos;&quot;&apos;);
&gt; &gt; &gt;         else
&gt; &gt; &gt;             return value;
&gt; &gt; &gt;     });
&gt; &gt; &gt; }
&gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m unclear it it is better :).
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:338
&gt; &gt; &gt; &gt; +        if constexpr (std::is_arithmetic_v&lt;std::remove_reference_t&lt;decltype(value)&gt;&gt;) {
&gt; &gt; &gt; &gt; +            builder.append(builder.isEmpty() ? &quot;&quot; : &quot;, &quot;, value);
&gt; &gt; &gt; &gt; +        } else {
&gt; &gt; &gt; &gt; +            builder.append(builder.isEmpty() ? &quot;&quot; : &quot;, &quot;, &apos;&quot;&apos;, value, &apos;&quot;&apos;);
&gt; &gt; &gt; &gt; +        }
&gt; &gt; &gt; 
&gt; &gt; &gt; No need for the braces here. I think it is likely a bit more efficient to
&gt; &gt; &gt; use dedicated bool rather than check isEmpty().
&gt; &gt; 
&gt; &gt; You mean I do not need the curly braces in the else case, right? I thought
&gt; &gt; you&apos;d like the symmetry, since I need them for the `if constexpr` but I&apos;ll
&gt; &gt; drop them :)
&gt; 
&gt; I did mean curly braces. I don&apos;t think you need curly braces here though.
&gt; What kind of error do you get without them?

Oh! you&apos;re totally right, it builds without the curly brackets. I don&apos;t know why I thought `if constexpr` required curly brackets.

Anyway, I fixed it in &lt;https://commits.webkit.org/239569@main&gt;, thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433224</attachid>
            <date>2021-07-09 10:34:04 -0700</date>
            <delta_ts>2021-07-09 10:38:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227843-20210709103403.patch</filename>
            <type>text/plain</type>
            <size>10966</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5Nzg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTM0OTk3YTJkNGFkY2M4
MmUzMDBmNjNmYTY5MzBkZDFhYTJlOGM4NS4uMjY0YzY1ZmQ2MWRiODM0ODNlMWFmMmFhOWNmOGQz
NjU0NGY3NDAwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA3LTA5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW0lUUF0gSW1wcm92ZSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSdzIGJ1aWxkTGlzdCgpIGFuZCB1c2UgaXQg
aW4gbW9yZSBwbGFjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNzg0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFN1cHBvcnQgcGFzc2luZyBhIFJlZ2lzdHJhYmxlRG9tYWluIGRpcmVjdGx5IHRvIFN0
cmluZ0J1aWxkZXI6OmFwcGVuZCgpLgorCisgICAgICAgICogcGxhdGZvcm0vUmVnaXN0cmFibGVE
b21haW4uaDoKKwogMjAyMS0wNy0wOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBCaWdJbnQ2NEFycmF5IGFuZCBCaWdVaW50NjRBcnJheSBzdXBwb3J0
IHRvIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZGE3MWFiMjY4ODJlZmY4N2I1
YTQ5OTQ4MGI2YzQ1N2VmYmNlMWUxZC4uNDgxN2UyMTU3NThhNzk5ZWY2MjI3OTQ1MDg3YWJjZjQz
ZGZjMDBjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMS0wNy0wOSAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFtJVFBdIEltcHJvdmUgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUncyBidWlsZExpc3QoKSBhbmQgdXNlIGl0IGluIG1v
cmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjc4NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXByb3ZlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlJ3MgYnVpbGRMaXN0
KCkgYW5kIHVzZSBpdCBpbiBtb3JlIHBsYWNlcy4KKworICAgICAgICBidWlsZExpc3QoKSBub3cg
d29ya3Mgd2l0aCBTdHJpbmcgdHlwZXMgKFJlZ2lzdHJhYmxlRG9tYWluIGluIHRoaXMgcGFydGlj
dWxhciBjYXNlKSBhbmQKKyAgICAgICAgY2FuIHRha2UgYW55IGNvbnRhaW5lciB0eXBlIGluIHBh
cmFtZXRlci4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpidWlsZExp
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50
SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZmluZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJHcmFu
ZGZhdGhlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCk6CisKIDIwMjEtMDctMDkgIFlvdWVu
biBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBud19wYXJhbWV0ZXJz
X2FsbG93X3NoYXJpbmdfcG9ydF93aXRoX2xpc3RlbmVyIGlmIGF2YWlsYWJsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUmVnaXN0cmFibGVEb21haW4uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1JlZ2lzdHJhYmxlRG9tYWluLmgKaW5kZXggZWMzZTBmZmQzYWYzNTQ1
MzIwYzM3OGY4MGE4NTQyZDk3NmU4NjU2Mi4uY2Y3ODBjYzQ1YWVhNjg3YmM2MTliYmVlN2IyOWY0
ZDliZjczYWZkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUmVnaXN0cmFi
bGVEb21haW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SZWdpc3RyYWJsZURvbWFp
bi5oCkBAIC0xNjQsNCArMTY0LDEyIEBAIGlubGluZSBib29sIGFyZVJlZ2lzdHJhYmxlRG9tYWlu
c0VxdWFsKGNvbnN0IFVSTCYgYSwgY29uc3QgVVJMJiBiKQogbmFtZXNwYWNlIFdURiB7CiB0ZW1w
bGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gOiBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjo6UmVnaXN0cmFibGVEb21haW5IYXNoIHsgfTsKIHRl
bXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IDog
U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiB7IH07Ci19
CisKK3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8V2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4sIHZvaWQ+IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZywgdm9pZD4g
eworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW4pCisgICAgICAgIDogU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nLCB2
b2lkPihkb21haW4uc3RyaW5nKCkpCisgICAgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUu
Y3BwCmluZGV4IGJjMDAxZTZkODg5MTlhMDI0MjYwNDJkYmZmZjJmZTE0OTE1NDYzOTEuLjJlNDVi
ZGVkZGE5ZWRjZmExODYzNDg4MmI4OTcwM2FhMzdlZjY1NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcApAQCAtMzI2LDYgKzMy
NiwyMCBAQCBzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
TWFwPFN0cmluZywgVGFibGVBbmRJbmRleFBhaXI+JgogICAgIHJldHVybiBleHBlY3RlZFRhYmxl
QW5kSW5kZXhRdWVyaWVzOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4K
K3N0YXRpYyBTdHJpbmcgYnVpbGRMaXN0KGNvbnN0IENvbnRhaW5lclR5cGUmIHZhbHVlcykKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVl
cykgeworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfaW50ZWdyYWxfdjxzdGQ6OnJlbW92
ZV9yZWZlcmVuY2VfdDxkZWNsdHlwZSh2YWx1ZSk+PikgeworICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoYnVpbGRlci5pc0VtcHR5KCkgPyAiIiA6ICIsICIsIHZhbHVlKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGJ1aWxkZXIuaXNFbXB0eSgpID8gIiIg
OiAiLCAiLCAnIicsIHZhbHVlLCAnIicpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBi
dWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKIEhhc2hTZXQ8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmUqPiYgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFsbFN0
b3JlcygpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CkBAIC0xMjc1LDE5ICsx
Mjg5LDExIEBAIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFy
dHlEYXRhPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0CiAgICAgcmV0dXJuIHRoaXJkUGFydHlE
YXRhTGlzdDsKIH0KIAotc3RhdGljIFN0cmluZyBkb21haW5zVG9TdHJpbmcoY29uc3QgSGFzaFNl
dDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOwotICAgIGZvciAoY29uc3QgYXV0byYgZG9tYWluTmFtZSA6IGRvbWFpbnMpCi0gICAgICAg
IGJ1aWxkZXIuYXBwZW5kKGJ1aWxkZXIuaXNFbXB0eSgpID8gIiIgOiAiLCAiLCAnIicsIGRvbWFp
bk5hbWUuc3RyaW5nKCksICciJyk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0K
LQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jcmVtZW50UmVj
b3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mJiBk
b21haW5zKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgYXV0byBk
b21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93
KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRzUmVtb3Zl
ZCA9IGRhdGFSZWNvcmRzUmVtb3ZlZCArIDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIs
IGRvbWFpbnNUb1N0cmluZyhkb21haW5zKSwgIikiKSk7CisgICAgYXV0byBkb21haW5zVG9VcGRh
dGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmco
IlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRzUmVtb3ZlZCA9IGRhdGFSZWNv
cmRzUmVtb3ZlZCArIDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGJ1aWxkTGlzdChk
b21haW5zKSwgIikiKSk7CiAgICAgaWYgKCFkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgfHwgZG9t
YWluc1RvVXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jcmVtZW50U3RhdGlzdGljc0ZvckRvbWFpbnMgZmFpbGVk
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEzNDQs
MTUgKzEzNTAsNiBAQCB1bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWlucwogICAgIHJldHVybiBudW1iZXJP
ZlJlY3Vyc2l2ZUNhbGxzOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgot
c3RhdGljIFN0cmluZyBidWlsZExpc3QoY29uc3QgV1RGOjpJdGVyYXRvclJhbmdlPEl0ZXJhdG9y
VHlwZT4mIHZhbHVlcykKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChh
dXRvIGRvbWFpbklEIDogdmFsdWVzKQotICAgICAgICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlz
RW1wdHkoKSA/ICIiIDogIiwgIiwgZG9tYWluSUQpOwotICAgIHJldHVybiBidWlsZGVyLnRvU3Ry
aW5nKCk7Ci19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1h
cmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KCkKIHsKICAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTEzNzAsNyArMTM2Nyw3IEBAIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3Rl
ZFRvUHJldmFsCiAgICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydCh0b3BG
cmFtZVJlZGlyZWN0U3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpOwogICAgIH0KIAotICAgIGF1dG8g
bWFya1ByZXZhbGVudFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3co
bWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdI
RVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFN0ZFNldDx1
bnNpZ25lZD46Oml0ZXJhdG9yPihwcmV2YWxlbnREdWVUb1JlZGlyZWN0LmJlZ2luKCksIHByZXZh
bGVudER1ZVRvUmVkaXJlY3QuZW5kKCkpKSwgIikiKSk7CisgICAgYXV0byBtYXJrUHJldmFsZW50
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJV
UERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQg
SU4gKCIsIGJ1aWxkTGlzdChwcmV2YWxlbnREdWVUb1JlZGlyZWN0KSwgIikiKSk7CiAgICAgaWYg
KCFtYXJrUHJldmFsZW50U3RhdGVtZW50IHx8IG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQ
cmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCBmYWlsZWQgdG8gZXhlY3V0ZSwgZXJy
b3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMzkzLDEwICsx
MzkwLDcgQEAgSGFzaE1hcDx1bnNpZ25lZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMKICAgICAgICAgfQogICAgIH0KIAotICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBmb3IgKGF1dG8gdmFsdWUgOiByZXN1bHRzLmtl
eXMoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVpbGRlci5pc0VtcHR5KCkgPyAiIiA6ICIs
ICIsIHZhbHVlKTsKLSAgICBhdXRvIGRvbWFpbklEc09mSW50ZXJlc3QgPSBidWlsZGVyLnRvU3Ry
aW5nKCk7CisgICAgYXV0byBkb21haW5JRHNPZkludGVyZXN0ID0gYnVpbGRMaXN0KHJlc3VsdHMu
a2V5cygpKTsKIAogICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiU0VMRUNU
IHN1YnJlc291cmNlRG9tYWluSUQsIENPVU5UKHRvcEZyYW1lRG9tYWluSUQpIEZST00gU3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgi
LCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikp
OwogICAgIGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50KSB7CkBA
IC0xNjgzLDcgKzE2NzcsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZQogICAgICAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyB3YXMgbm90IGNv
bXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CiAgICAgfQogCi0g
ICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0
aGVyZWQgPSAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBkb21haW5zVG9TdHJpbmco
ZG9tYWlucyksICIpIikpOworICAgIGF1dG8gZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWRE
b21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAo
IiwgYnVpbGRMaXN0KGRvbWFpbnMpLCAiKSIpKTsKICAgICBpZiAoIWRvbWFpbnNUb1VwZGF0ZVN0
YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewogICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21h
aW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC0yMDEzLDcgKzIwMDcsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQoU3RkU2V0PHVuc2lnbmVkPgogewogICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFU
RSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAo
IiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRv
cj4oZG9tYWlucy5iZWdpbigpLCBkb21haW5zLmVuZCgpKSksICIpIikpOworICAgIGF1dG8gZG9t
YWluc1RvVXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyht
YWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hF
UkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxkTGlzdChkb21haW5zKSwgIikiKSk7CiAgICAgaWYgKCFk
b21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LT5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0RG9t
YWluc0FzUHJldmFsZW50IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RS
SU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0yNjA3LDcgKzI2MDEsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKFZlY3Rvcjx1bnNpZ25lZD4m
JgogICAgIGlmIChkb21haW5JRHNUb0NsZWFyLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byBsaXN0VG9DbGVhciA9IGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8VmVj
dG9yPHVuc2lnbmVkPjo6aXRlcmF0b3I+KGRvbWFpbklEc1RvQ2xlYXIuYmVnaW4oKSwgZG9tYWlu
SURzVG9DbGVhci5lbmQoKSkpOworICAgIGF1dG8gbGlzdFRvQ2xlYXIgPSBidWlsZExpc3QoZG9t
YWluSURzVG9DbGVhcik7CiAKICAgICBhdXRvIGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNl
cnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSAwIFdIRVJFIGRvbWFpbklEIElOICgiLCBs
aXN0VG9DbGVhciwgIikiKSk7CiAgICAgaWYgKCFjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50
KQpAQCAtMjc3MCw3ICsyNzY0LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQogICAgIHdoaWxlIChyZWNvcmRzVG9Q
cnVuZS0+c3RlcCgpID09IFNRTElURV9ST1cpCiAgICAgICAgIGVudHJpZXNUb1BydW5lLmFwcGVu
ZChyZWNvcmRzVG9QcnVuZS0+Y29sdW1uSW50KDApKTsKIAotICAgIGF1dG8gbGlzdFRvUHJ1bmUg
PSBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZlY3Rvcjx1bnNpZ25lZD46Oml0ZXJhdG9y
PihlbnRyaWVzVG9QcnVuZS5iZWdpbigpLCBlbnRyaWVzVG9QcnVuZS5lbmQoKSkpOworICAgIGF1
dG8gbGlzdFRvUHJ1bmUgPSBidWlsZExpc3QoZW50cmllc1RvUHJ1bmUpOwogCiAgICAgYXV0byBw
cnVuZUNvbW1hbmQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmco
IkRFTEVURSBmcm9tIE9ic2VydmVkRG9tYWlucyBXSEVSRSBkb21haW5JRCBJTiAoIiwgbGlzdFRv
UHJ1bmUsICIpIikpOwogICAgIGlmICghcHJ1bmVDb21tYW5kIHx8IHBydW5lQ29tbWFuZC0+c3Rl
cCgpICE9IFNRTElURV9ET05FKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433225</attachid>
            <date>2021-07-09 10:38:48 -0700</date>
            <delta_ts>2021-07-09 17:33:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227843-20210709103848.patch</filename>
            <type>text/plain</type>
            <size>11037</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5Nzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQ1ZmJmMDA2Mjc1NDRl
YWM1ZTc2NGZiYzA1YTdhNzY2M2UyZGQ2MS4uNGZmYWNjZDM1OGRjODEyZjIyNGIyZjMzNDU3OWM4
MjIxYzA5MGJmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA3LTA5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW0lUUF0gSW1wcm92ZSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSdzIGJ1aWxkTGlzdCgpIGFuZCB1c2UgaXQg
aW4gbW9yZSBwbGFjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNzg0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFN1cHBvcnQgcGFzc2luZyBhIFJlZ2lzdHJhYmxlRG9tYWluIGRpcmVjdGx5IHRvIFN0
cmluZ0J1aWxkZXI6OmFwcGVuZCgpLgorCisgICAgICAgICogcGxhdGZvcm0vUmVnaXN0cmFibGVE
b21haW4uaDoKKwogMjAyMS0wNy0wOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFtXZWJDcnlwdG9dIGRlcml2ZUJpdHMoKSBpbmNvcnJlY3RseSB0aHJvd3MgZm9y
IFBCS0RGMiBhbGdvcml0aG0gd2hlbiB0aGUgcGFzc3dvcmQgaXMgZW1wdHkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
YWMyOWE2MjEzODE4MGYwM2U4ZDMwMWMxODU2YzJjMzdjYzY1M2UwMy4uYmE2ODM3ZGE1ZmVmM2Jj
ODQ4NjA3NDc3YmRkODRjNDc0MjE1NjVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAy
MS0wNy0wOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFtJVFBd
IEltcHJvdmUgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUncyBidWlsZExpc3Qo
KSBhbmQgdXNlIGl0IGluIG1vcmUgcGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjc4NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXByb3ZlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlJ3MgYnVpbGRMaXN0KCkgYW5kIHVzZSBpdCBpbiBtb3JlIHBsYWNlcy4KKworICAgICAg
ICBidWlsZExpc3QoKSBub3cgd29ya3Mgd2l0aCBTdHJpbmcgdHlwZXMgKFJlZ2lzdHJhYmxlRG9t
YWluIGluIHRoaXMgcGFydGljdWxhciBjYXNlKSBhbmQKKyAgICAgICAgY2FuIHRha2UgYW55IGNv
bnRhaW5lciB0eXBlIGluIHBhcmFtZXRlci4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpidWlsZExpc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFp
bnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZmluZE5vdFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQ
cmV2YWxlbnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCk6CisK
IDIwMjEtMDctMDkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBW
YWxpZGF0ZSBrZXlzIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5k
Tm90VmVyeVByZXZhbGVudFJlc291cmNlcygpIGJlZm9yZSB1c2luZyB0aGVtIHdpdGggSGFzaE1h
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUmVnaXN0cmFibGVEb21haW4u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1JlZ2lzdHJhYmxlRG9tYWluLmgKaW5kZXggZWMz
ZTBmZmQzYWYzNTQ1MzIwYzM3OGY4MGE4NTQyZDk3NmU4NjU2Mi4uY2Y3ODBjYzQ1YWVhNjg3YmM2
MTliYmVlN2IyOWY0ZDliZjczYWZkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUmVnaXN0cmFibGVEb21haW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SZWdp
c3RyYWJsZURvbWFpbi5oCkBAIC0xNjQsNCArMTY0LDEyIEBAIGlubGluZSBib29sIGFyZVJlZ2lz
dHJhYmxlRG9tYWluc0VxdWFsKGNvbnN0IFVSTCYgYSwgY29uc3QgVVJMJiBiKQogbmFtZXNwYWNl
IFdURiB7CiB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbj4gOiBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjo6UmVnaXN0cmFibGVEb21haW5I
YXNoIHsgfTsKIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluPiB7IH07Ci19CisKK3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8V2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4sIHZvaWQ+IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZywgdm9pZD4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCisgICAgICAgIDogU3RyaW5nVHlwZUFkYXB0
ZXI8U3RyaW5nLCB2b2lkPihkb21haW4uc3RyaW5nKCkpCisgICAgeyB9Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmUuY3BwCmluZGV4IGYyYjA2N2VhNGRkMDc5YmRkN2Y3YWY3NWQ4YzJhMGIzN2Fl
MjE1MmYuLjdhZGU1NGU1ZDgyMTk3NzUwMTAyMTcyYmVhNGQ0NThkNjA1YzNlMWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcApA
QCAtMzI2LDYgKzMyNiwyMCBAQCBzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgVGFibGVBbmRJbmRleFBhaXI+JgogICAgIHJldHVybiBl
eHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29u
dGFpbmVyVHlwZT4KK3N0YXRpYyBTdHJpbmcgYnVpbGRMaXN0KGNvbnN0IENvbnRhaW5lclR5cGUm
IHZhbHVlcykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChhdXRvJiB2
YWx1ZSA6IHZhbHVlcykgeworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYXJpdGhtZXRp
Y192PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PGRlY2x0eXBlKHZhbHVlKT4+KSB7CisgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgdmFsdWUp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVpbGRlci5p
c0VtcHR5KCkgPyAiIiA6ICIsICIsICciJywgdmFsdWUsICciJyk7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKwogSGFzaFNldDxSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSo+JiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6YWxsU3RvcmVzKCkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
QEAgLTEyNzUsMTkgKzEyODksMTEgQEAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGE+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXQKICAgICByZXR1
cm4gdGhpcmRQYXJ0eURhdGFMaXN0OwogfQogCi1zdGF0aWMgU3RyaW5nIGRvbWFpbnNUb1N0cmlu
Zyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucykKLXsKLSAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBkb21haW5OYW1lIDogZG9t
YWlucykKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVpbGRlci5pc0VtcHR5KCkgPyAiIiA6ICIs
ICIsICciJywgZG9tYWluTmFtZS5zdHJpbmcoKSwgJyInKTsKLSAgICByZXR1cm4gYnVpbGRlci50
b1N0cmluZygpOwotfQotCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjppbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFJlZ2lzdHJh
YmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CiAKLSAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0
YVJlY29yZHNSZW1vdmVkID0gZGF0YVJlY29yZHNSZW1vdmVkICsgMSBXSEVSRSByZWdpc3RyYWJs
ZURvbWFpbiBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKKyAgICBhdXRv
IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNs
b3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJlY29yZHNSZW1v
dmVkID0gZGF0YVJlY29yZHNSZW1vdmVkICsgMSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAo
IiwgYnVpbGRMaXN0KGRvbWFpbnMpLCAiKSIpKTsKICAgICBpZiAoIWRvbWFpbnNUb1VwZGF0ZVN0
YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewogICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRTdGF0aXN0aWNzRm9y
RG9tYWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhp
cywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMTM0NCwxNSArMTM1MCw2IEBAIHVuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpyZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zCiAgICAg
cmV0dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBJ
dGVyYXRvclR5cGU+Ci1zdGF0aWMgU3RyaW5nIGJ1aWxkTGlzdChjb25zdCBXVEY6Okl0ZXJhdG9y
UmFuZ2U8SXRlcmF0b3JUeXBlPiYgdmFsdWVzKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRl
cjsKLSAgICBmb3IgKGF1dG8gZG9tYWluSUQgOiB2YWx1ZXMpCi0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKGJ1aWxkZXIuaXNFbXB0eSgpID8gIiIgOiAiLCAiLCBkb21haW5JRCk7Ci0gICAgcmV0dXJu
IGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKQog
ewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTM3MCw3ICsxMzY3LDcgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50
SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWwKICAgICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJl
Y3QuaW5zZXJ0KHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSk7CiAgICAg
fQogCi0gICAgYXV0byBtYXJrUHJldmFsZW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1By
ZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9y
UmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KHByZXZhbGVudER1ZVRvUmVkaXJlY3Qu
YmVnaW4oKSwgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5lbmQoKSkpLCAiKSIpKTsKKyAgICBhdXRv
IG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93
KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBX
SEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KHByZXZhbGVudER1ZVRvUmVkaXJlY3QpLCAi
KSIpKTsKICAgICBpZiAoIW1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQgfHwgbWFya1ByZXZhbGVudFN0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIElUUF9SRUxFQVNFX0xP
R19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50IGZhaWxlZCB0
byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
QEAgLTEzOTUsMTAgKzEzOTIsNyBAQCBIYXNoTWFwPHVuc2lnbmVkLCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Tm90VmVyeVByZXZhbGVudFJlc291cmNlcwogICAgICAgICB9
CiAgICAgfQogCi0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAoYXV0byB2YWx1
ZSA6IHJlc3VsdHMua2V5cygpKQotICAgICAgICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1w
dHkoKSA/ICIiIDogIiwgIiwgdmFsdWUpOwotICAgIGF1dG8gZG9tYWluSURzT2ZJbnRlcmVzdCA9
IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBhdXRvIGRvbWFpbklEc09mSW50ZXJlc3QgPSBidWls
ZExpc3QocmVzdWx0cy5rZXlzKCkpOwogCiAgICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW5zU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtl
U3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5J
RCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNl
RG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291
cmNlRG9tYWluSUQiKSk7CiAgICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNT
dGF0ZW1lbnQpIHsKQEAgLTE2OTcsNyArMTY5MSw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFzaFNl
CiAgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21h
aW5zIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlz
KTsKICAgICB9CiAKLSAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRv
bWFpbnNUb1N0cmluZyhkb21haW5zKSwgIikiKSk7CisgICAgYXV0byBkb21haW5zVG9VcGRhdGVT
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQ
REFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSAxIFdIRVJFIHJlZ2lzdHJh
YmxlRG9tYWluIElOICgiLCBidWlsZExpc3QoZG9tYWlucyksICIpIikpOwogICAgIGlmICghZG9t
YWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0
aGVyRGF0YUZvckRvbWFpbnMgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTIwMjcsNyArMjAyMSw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudChTdGRTZXQ8dW5zaWdu
ZWQ+CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBhdXRvIGRvbWFp
bnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFr
ZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJF
IGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFN0ZFNldDx1bnNp
Z25lZD46Oml0ZXJhdG9yPihkb21haW5zLmJlZ2luKCksIGRvbWFpbnMuZW5kKCkpKSwgIikiKSk7
CisgICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJl
dmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KGRvbWFpbnMpLCAiKSIp
KTsKICAgICBpZiAoIWRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVT
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI2MjEsNyArMjYxNSw3IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcoVmVj
dG9yPHVuc2lnbmVkPiYmCiAgICAgaWYgKGRvbWFpbklEc1RvQ2xlYXIuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIGxpc3RUb0NsZWFyID0gYnVpbGRMaXN0KFdURjo6SXRl
cmF0b3JSYW5nZTxWZWN0b3I8dW5zaWduZWQ+OjppdGVyYXRvcj4oZG9tYWluSURzVG9DbGVhci5i
ZWdpbigpLCBkb21haW5JRHNUb0NsZWFyLmVuZCgpKSk7CisgICAgYXV0byBsaXN0VG9DbGVhciA9
IGJ1aWxkTGlzdChkb21haW5JRHNUb0NsZWFyKTsKIAogICAgIGF1dG8gY2xlYXJHcmFuZGZhdGhl
cmluZ1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmlu
ZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDAgV0hFUkUgZG9t
YWluSUQgSU4gKCIsIGxpc3RUb0NsZWFyLCAiKSIpKTsKICAgICBpZiAoIWNsZWFyR3JhbmRmYXRo
ZXJpbmdTdGF0ZW1lbnQpCkBAIC0yNzg0LDcgKzI3NzgsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpCiAgICAgd2hp
bGUgKHJlY29yZHNUb1BydW5lLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAgZW50cmll
c1RvUHJ1bmUuYXBwZW5kKHJlY29yZHNUb1BydW5lLT5jb2x1bW5JbnQoMCkpOwogCi0gICAgYXV0
byBsaXN0VG9QcnVuZSA9IGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8VmVjdG9yPHVuc2ln
bmVkPjo6aXRlcmF0b3I+KGVudHJpZXNUb1BydW5lLmJlZ2luKCksIGVudHJpZXNUb1BydW5lLmVu
ZCgpKSk7CisgICAgYXV0byBsaXN0VG9QcnVuZSA9IGJ1aWxkTGlzdChlbnRyaWVzVG9QcnVuZSk7
CiAKICAgICBhdXRvIHBydW5lQ29tbWFuZCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNs
b3cobWFrZVN0cmluZygiREVMRVRFIGZyb20gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklE
IElOICgiLCBsaXN0VG9QcnVuZSwgIikiKSk7CiAgICAgaWYgKCFwcnVuZUNvbW1hbmQgfHwgcHJ1
bmVDb21tYW5kLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433250</attachid>
            <date>2021-07-09 17:33:14 -0700</date>
            <delta_ts>2021-07-09 20:07:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227843-20210709173314.patch</filename>
            <type>text/plain</type>
            <size>10955</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5Nzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWVkOWEzMGM3YmZiZTZj
OWY5ZTk2ZDk4YWU4OWI4ZWMzZmU1NzEyZi4uNmE0MWI2ODZhY2M1YjA1ZjE0NDU2MTczZmI5MDBl
NzliZTZiMGMyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA3LTA5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW0lUUF0gSW1wcm92ZSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSdzIGJ1aWxkTGlzdCgpIGFuZCB1c2UgaXQg
aW4gbW9yZSBwbGFjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNzg0MworCisgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAg
ICAgU3VwcG9ydCBwYXNzaW5nIGEgUmVnaXN0cmFibGVEb21haW4gZGlyZWN0bHkgdG8gU3RyaW5n
QnVpbGRlcjo6YXBwZW5kKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9SZWdpc3RyYWJsZURvbWFp
bi5oOgorCiAyMDIxLTA3LTA5ICBBZGl0eWEgS2VlcnRoaSAgPGFrZWVydGhpQGFwcGxlLmNvbT4K
IAogICAgICAgICBbaU9TXSBJbmNyZWFzZSBjb250cmFzdCBmb3IgdGV4dGZpZWxkcywgY2hlY2ti
b3hlcywgYW5kIHJhZGlvIGJ1dHRvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZGFmOTk2YThhMWY4NjliZTA5MDIw
OWM3N2Q5OGU5MmU2ZWU1NzYxYy4uZDk2ZDU4OWE0NTg4MDhmODEyZTNmNTk1ZTRiNWFkODcwNzBm
NDU3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMS0wNy0wOSAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFtJVFBdIEltcHJvdmUgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUncyBidWlsZExpc3QoKSBhbmQgdXNlIGl0IGluIG1vcmUg
cGxhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Mjc4NDMKKworICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgIEltcHJv
dmUgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUncyBidWlsZExpc3QoKSBhbmQg
dXNlIGl0IGluIG1vcmUgcGxhY2VzLgorCisgICAgICAgIGJ1aWxkTGlzdCgpIG5vdyB3b3JrcyB3
aXRoIFN0cmluZyB0eXBlcyAoUmVnaXN0cmFibGVEb21haW4gaW4gdGhpcyBwYXJ0aWN1bGFyIGNh
c2UpIGFuZAorICAgICAgICBjYW4gdGFrZSBhbnkgY29udGFpbmVyIHR5cGUgaW4gcGFyYW1ldGVy
LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OmJ1aWxkTGlzdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNy
ZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1Jl
ZGlyZWN0ZWRUb1ByZXZhbGVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kTm90VmVyeVByZXZhbGVudFJlc291cmNlcyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZh
dGhlckRhdGFGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVy
aW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkKToKKwogMjAyMS0wNy0wOSAgSmVyIE5vYmxlICA8
amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIEFsbG93IHRoZSBVSVByb2Nl
c3MgdG8gc2V0IGxvZ2dpbmcgcGFyYW1ldGVycyBpbiB0aGUgR1BVUHJvY2VzcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUmVnaXN0cmFibGVEb21haW4uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1JlZ2lzdHJhYmxlRG9tYWluLmgKaW5kZXggZWMzZTBmZmQzYWYzNTQ1
MzIwYzM3OGY4MGE4NTQyZDk3NmU4NjU2Mi4uY2Y3ODBjYzQ1YWVhNjg3YmM2MTliYmVlN2IyOWY0
ZDliZjczYWZkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUmVnaXN0cmFi
bGVEb21haW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SZWdpc3RyYWJsZURvbWFp
bi5oCkBAIC0xNjQsNCArMTY0LDEyIEBAIGlubGluZSBib29sIGFyZVJlZ2lzdHJhYmxlRG9tYWlu
c0VxdWFsKGNvbnN0IFVSTCYgYSwgY29uc3QgVVJMJiBiKQogbmFtZXNwYWNlIFdURiB7CiB0ZW1w
bGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gOiBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjo6UmVnaXN0cmFibGVEb21haW5IYXNoIHsgfTsKIHRl
bXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IDog
U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiB7IH07Ci19
CisKK3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8V2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4sIHZvaWQ+IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZywgdm9pZD4g
eworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW4pCisgICAgICAgIDogU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nLCB2
b2lkPihkb21haW4uc3RyaW5nKCkpCisgICAgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUu
Y3BwCmluZGV4IGYyYjA2N2VhNGRkMDc5YmRkN2Y3YWY3NWQ4YzJhMGIzN2FlMjE1MmYuLmI4NjU4
NWJkMTJiMmVjODhiYzU5YmM1M2FmMTY4MmM0M2M0NmY5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcApAQCAtMzI2LDYgKzMy
NiwxOSBAQCBzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
TWFwPFN0cmluZywgVGFibGVBbmRJbmRleFBhaXI+JgogICAgIHJldHVybiBleHBlY3RlZFRhYmxl
QW5kSW5kZXhRdWVyaWVzOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4K
K3N0YXRpYyBTdHJpbmcgYnVpbGRMaXN0KGNvbnN0IENvbnRhaW5lclR5cGUmIHZhbHVlcykKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVl
cykgeworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYXJpdGhtZXRpY192PHN0ZDo6cmVt
b3ZlX3JlZmVyZW5jZV90PGRlY2x0eXBlKHZhbHVlKT4+KSB7CisgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgdmFsdWUpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGJ1aWxkZXIuaXNFbXB0eSgpID8gIiIg
OiAiLCAiLCAnIicsIHZhbHVlLCAnIicpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0
cmluZygpOworfQorCiBIYXNoU2V0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Kj4mIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphbGxTdG9yZXMoKQogewog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTI3NSwxOSArMTI4OCwxMSBAQCBW
ZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdAogICAgIHJldHVybiB0aGlyZFBhcnR5RGF0YUxpc3Q7CiB9
CiAKLXN0YXRpYyBTdHJpbmcgZG9tYWluc1RvU3RyaW5nKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFi
bGVEb21haW4+JiBkb21haW5zKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGRvbWFpbk5hbWUgOiBkb21haW5zKQotICAgICAgICBidWlsZGVyLmFw
cGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgJyInLCBkb21haW5OYW1lLnN0cmlu
ZygpLCAnIicpOwotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVudFJlY29yZHNEZWxldGVk
Q291bnRGb3JEb21haW5zKEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsK
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGF1dG8gZG9tYWluc1RvVXBk
YXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5n
KCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBkYXRhUmVj
b3Jkc1JlbW92ZWQgKyAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBkb21haW5zVG9T
dHJpbmcoZG9tYWlucyksICIpIikpOworICAgIGF1dG8gZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJVUERBVEUgT2Jz
ZXJ2ZWREb21haW5zIFNFVCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBkYXRhUmVjb3Jkc1JlbW92ZWQg
KyAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBidWlsZExpc3QoZG9tYWlucyksICIp
IikpOwogICAgIGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFpbnNUb1VwZGF0
ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmluY3JlbWVudFN0YXRpc3RpY3NGb3JEb21haW5zIGZhaWxlZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMzQ0LDE1ICsxMzQ5LDYg
QEAgdW5zaWduZWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2
ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnMKICAgICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVD
YWxsczsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KLXN0YXRpYyBTdHJp
bmcgYnVpbGRMaXN0KGNvbnN0IFdURjo6SXRlcmF0b3JSYW5nZTxJdGVyYXRvclR5cGU+JiB2YWx1
ZXMpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAoYXV0byBkb21haW5J
RCA6IHZhbHVlcykKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVpbGRlci5pc0VtcHR5KCkgPyAi
IiA6ICIsICIsIGRvbWFpbklEKTsKLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQot
CiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxl
bnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCgpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CkBAIC0xMzcwLDcgKzEzNjYsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbAog
ICAgICAgICAgICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9wRnJhbWVSZWRpcmVj
dFN0YXRlbWVudC0+Y29sdW1uSW50KDApKTsKICAgICB9CiAKLSAgICBhdXRvIG1hcmtQcmV2YWxl
bnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmco
IlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5J
RCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+Ojpp
dGVyYXRvcj4ocHJldmFsZW50RHVlVG9SZWRpcmVjdC5iZWdpbigpLCBwcmV2YWxlbnREdWVUb1Jl
ZGlyZWN0LmVuZCgpKSksICIpIikpOworICAgIGF1dG8gbWFya1ByZXZhbGVudFN0YXRlbWVudCA9
IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2Vy
dmVkRG9tYWlucyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWls
ZExpc3QocHJldmFsZW50RHVlVG9SZWRpcmVjdCksICIpIikpOwogICAgIGlmICghbWFya1ByZXZh
bGVudFN0YXRlbWVudCB8fCBtYXJrUHJldmFsZW50U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50SWZI
YXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQgZmFpbGVkIHRvIGV4ZWN1dGUsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTM5NSwxMCArMTM5MSw3IEBAIEhh
c2hNYXA8dW5zaWduZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpOb3RW
ZXJ5UHJldmFsZW50UmVzb3VyY2VzCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChhdXRvIHZhbHVlIDogcmVzdWx0cy5rZXlzKCkpCi0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKGJ1aWxkZXIuaXNFbXB0eSgpID8gIiIgOiAiLCAiLCB2YWx1ZSk7
Ci0gICAgYXV0byBkb21haW5JRHNPZkludGVyZXN0ID0gYnVpbGRlci50b1N0cmluZygpOworICAg
IGF1dG8gZG9tYWluSURzT2ZJbnRlcmVzdCA9IGJ1aWxkTGlzdChyZXN1bHRzLmtleXMoKSk7CiAK
ICAgICBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJj
ZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURz
T2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCIpKTsKICAgICBpZiAo
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudCkgewpAQCAtMTY5Nyw3ICsx
NjkwLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRm
YXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2UKICAgICAgICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgd2FzIG5vdCBjb21wbGV0ZWQgZHVl
IHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwogICAgIH0KIAotICAgIGF1dG8gZG9t
YWluc1RvVXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyht
YWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMSBX
SEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAi
KSIpKTsKKyAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQg
Z3JhbmRmYXRoZXJlZCA9IDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGJ1aWxkTGlz
dChkb21haW5zKSwgIikiKSk7CiAgICAgaWYgKCFkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgfHwg
ZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyBmYWlsZWQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjAyNyw3
ICsyMDIwLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0
RG9tYWluc0FzUHJldmFsZW50KFN0ZFNldDx1bnNpZ25lZD4KIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKIAotICAgIGF1dG8gZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWRE
b21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxkTGlz
dChXVEY6Okl0ZXJhdG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KGRvbWFpbnMu
YmVnaW4oKSwgZG9tYWlucy5lbmQoKSkpLCAiKSIpKTsKKyAgICBhdXRvIGRvbWFpbnNUb1VwZGF0
ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygi
VVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklE
IElOICgiLCBidWlsZExpc3QoZG9tYWlucyksICIpIikpOwogICAgIGlmICghZG9tYWluc1RvVXBk
YXRlU3RhdGVtZW50IHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CiAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZh
bGVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtMjYyMSw3ICsyNjE0LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWduZWQ+JiYKICAgICBpZiAo
ZG9tYWluSURzVG9DbGVhci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8g
bGlzdFRvQ2xlYXIgPSBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZlY3Rvcjx1bnNpZ25l
ZD46Oml0ZXJhdG9yPihkb21haW5JRHNUb0NsZWFyLmJlZ2luKCksIGRvbWFpbklEc1RvQ2xlYXIu
ZW5kKCkpKTsKKyAgICBhdXRvIGxpc3RUb0NsZWFyID0gYnVpbGRMaXN0KGRvbWFpbklEc1RvQ2xl
YXIpOwogCiAgICAgYXV0byBjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5z
IFNFVCBncmFuZGZhdGhlcmVkID0gMCBXSEVSRSBkb21haW5JRCBJTiAoIiwgbGlzdFRvQ2xlYXIs
ICIpIikpOwogICAgIGlmICghY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudCkKQEAgLTI3ODQs
NyArMjc3Nyw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBy
dW5lU3RhdGlzdGljc0lmTmVlZGVkKCkKICAgICB3aGlsZSAocmVjb3Jkc1RvUHJ1bmUtPnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKQogICAgICAgICBlbnRyaWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jkc1Rv
UHJ1bmUtPmNvbHVtbkludCgwKSk7CiAKLSAgICBhdXRvIGxpc3RUb1BydW5lID0gYnVpbGRMaXN0
KFdURjo6SXRlcmF0b3JSYW5nZTxWZWN0b3I8dW5zaWduZWQ+OjppdGVyYXRvcj4oZW50cmllc1Rv
UHJ1bmUuYmVnaW4oKSwgZW50cmllc1RvUHJ1bmUuZW5kKCkpKTsKKyAgICBhdXRvIGxpc3RUb1By
dW5lID0gYnVpbGRMaXN0KGVudHJpZXNUb1BydW5lKTsKIAogICAgIGF1dG8gcHJ1bmVDb21tYW5k
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJERUxFVEUgZnJv
bSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RUb1BydW5lLCAiKSIp
KTsKICAgICBpZiAoIXBydW5lQ29tbWFuZCB8fCBwcnVuZUNvbW1hbmQtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>