<?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>211861</bug_id>
          
          <creation_ts>2020-05-13 13:35:23 -0700</creation_ts>
          <short_desc>[IPC] Use templates to reduce duplicate code in IPC::Decoder and IPC::Encoder classes</short_desc>
          <delta_ts>2020-05-13 21:25:03 -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>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=211880</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>achristensen</cc>
    
    <cc>andersca</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>sam</cc>
    
    <cc>useafterfree</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1652363</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-13 13:35:23 -0700</bug_when>
    <thetext>Use templates to reduce duplicate code in IPC::Decoder and IPC::Encoder classes.

&lt;rdar://problem/62360390&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652391</commentid>
    <comment_count>1</comment_count>
      <attachid>399299</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-13 14:08:10 -0700</bug_when>
    <thetext>Created attachment 399299
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652394</commentid>
    <comment_count>2</comment_count>
      <attachid>399299</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-05-13 14:23:09 -0700</bug_when>
    <thetext>Comment on attachment 399299
Patch v1

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

&gt; Source/WebKit/ChangeLog:3
&gt; +        [IPC] Use templates to reduce duplicate code in IPC::Decoder and IPC::Encoder classes

This was intentionally not done earlier before because we wanted to avoid serializing size_t because we supported 32-bit plugins in 64-bit hosts.  Now that macOS doesn&apos;t support 32-bit executables, I think we can do this.

Do we want to do the same template code deduplication with PersistentEncoder and PersistentDecoder?

&gt; Source/WebKit/Platform/IPC/Decoder.h:127
&gt; +        // FIXME: Check that this is a valid enum value.

I believe decodeEnum is only used for decoding legacy enum types without EnumTraits.  I think this FIXME should read: migrate all uses of this function to operator&gt;&gt; with proper value checks and remove this.

&gt; Source/WebKit/Platform/IPC/Encoder.h:67
&gt; +        // FIXME: Check that this is a valid enum value.

We typically don&apos;t do enum validity checking on the encoding side.  It&apos;s unnecessary slowdown.  If it&apos;s a compromised process, they won&apos;t check anyways.

&gt; Source/WebKit/Platform/IPC/Encoder.h:93
&gt; +    template&lt;typename T&gt;
&gt; +    auto encode(T value) -&gt; std::enable_if_t&lt;std::is_arithmetic&lt;T&gt;::value&gt;

This syntax makes it very hard to see what is returned.  Could you use the same syntax as everything else in this file and have two template parameters, the second with std::enable_if_t?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652400</commentid>
    <comment_count>3</comment_count>
      <attachid>399299</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-13 14:48:23 -0700</bug_when>
    <thetext>Comment on attachment 399299
Patch v1

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

&gt;&gt; Source/WebKit/ChangeLog:3
&gt;&gt; +        [IPC] Use templates to reduce duplicate code in IPC::Decoder and IPC::Encoder classes
&gt; 
&gt; This was intentionally not done earlier before because we wanted to avoid serializing size_t because we supported 32-bit plugins in 64-bit hosts.  Now that macOS doesn&apos;t support 32-bit executables, I think we can do this.
&gt; 
&gt; Do we want to do the same template code deduplication with PersistentEncoder and PersistentDecoder?

Good to know the history here.

Yes, we could do this to PersistentEncoder and PersistentDecoder in a separate patch.

&gt;&gt; Source/WebKit/Platform/IPC/Decoder.h:127
&gt;&gt; +        // FIXME: Check that this is a valid enum value.
&gt; 
&gt; I believe decodeEnum is only used for decoding legacy enum types without EnumTraits.  I think this FIXME should read: migrate all uses of this function to operator&gt;&gt; with proper value checks and remove this.

Sure, I can change this.  I wanted to use WTF::isValidEnum&lt;EnumType&gt;() to check the type, and I assume that would have lead me down the enum class/EnumTraits path, but I didn&apos;t know how to say it.

&gt;&gt; Source/WebKit/Platform/IPC/Encoder.h:67
&gt;&gt; +        // FIXME: Check that this is a valid enum value.
&gt; 
&gt; We typically don&apos;t do enum validity checking on the encoding side.  It&apos;s unnecessary slowdown.  If it&apos;s a compromised process, they won&apos;t check anyways.

It&apos;s more about catching our own mistakes.  This method has a Debug assertion:

    template&lt;typename E&gt;
    auto encode(E value) -&gt; std::enable_if_t&lt;std::is_enum&lt;E&gt;::value&gt;
    {
        ASSERT(WTF::isValidEnum&lt;E&gt;(static_cast&lt;typename std::underlying_type&lt;E&gt;::type&gt;(value)));
        encode(static_cast&lt;typename std::underlying_type&lt;E&gt;::type&gt;(value));
    }

I assume that&apos;s okay to add?  So change &quot;Check&quot; to &quot;Add Debug assert&quot;?

Do we eventually want to get rid of encodeEnum() (just like decodeEnum()) and just use the templated encode() (same method pasted above)?

&gt; Source/WebKit/Platform/IPC/Encoder.h:80
&gt; +        // FIXME: Check that this is a valid enum value.

Here, too.

&gt;&gt; Source/WebKit/Platform/IPC/Encoder.h:93
&gt;&gt; +    auto encode(T value) -&gt; std::enable_if_t&lt;std::is_arithmetic&lt;T&gt;::value&gt;
&gt; 
&gt; This syntax makes it very hard to see what is returned.  Could you use the same syntax as everything else in this file and have two template parameters, the second with std::enable_if_t?

Clearly it&apos;s `void`.  (There are a lot of places where I think `auto` is not clear, but I keep my mouth shut because I don&apos;t care enough to spend time discussing it.)  Happy to change this one, though.

Should I change this one as well?  It has the same issue.

    template&lt;typename E&gt;
    auto encode(E value) -&gt; std::enable_if_t&lt;std::is_enum&lt;E&gt;::value&gt;
    {
        ASSERT(WTF::isValidEnum&lt;E&gt;(static_cast&lt;typename std::underlying_type&lt;E&gt;::type&gt;(value)));
        encode(static_cast&lt;typename std::underlying_type&lt;E&gt;::type&gt;(value));
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652412</commentid>
    <comment_count>4</comment_count>
      <attachid>399299</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-05-13 15:36:23 -0700</bug_when>
    <thetext>Comment on attachment 399299
Patch v1

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

&gt;&gt;&gt; Source/WebKit/Platform/IPC/Decoder.h:127
&gt;&gt;&gt; +        // FIXME: Check that this is a valid enum value.
&gt;&gt; 
&gt;&gt; I believe decodeEnum is only used for decoding legacy enum types without EnumTraits.  I think this FIXME should read: migrate all uses of this function to operator&gt;&gt; with proper value checks and remove this.
&gt; 
&gt; Sure, I can change this.  I wanted to use WTF::isValidEnum&lt;EnumType&gt;() to check the type, and I assume that would have lead me down the enum class/EnumTraits path, but I didn&apos;t know how to say it.

We should also look for places where we just cast enum values to integral types for IPC.  There are still a few of them around from the good ol&apos; days.

&gt;&gt;&gt; Source/WebKit/Platform/IPC/Encoder.h:67
&gt;&gt;&gt; +        // FIXME: Check that this is a valid enum value.
&gt;&gt; 
&gt;&gt; We typically don&apos;t do enum validity checking on the encoding side.  It&apos;s unnecessary slowdown.  If it&apos;s a compromised process, they won&apos;t check anyways.
&gt; 
&gt; It&apos;s more about catching our own mistakes.  This method has a Debug assertion:
&gt; 
&gt;     template&lt;typename E&gt;
&gt;     auto encode(E value) -&gt; std::enable_if_t&lt;std::is_enum&lt;E&gt;::value&gt;
&gt;     {
&gt;         ASSERT(WTF::isValidEnum&lt;E&gt;(static_cast&lt;typename std::underlying_type&lt;E&gt;::type&gt;(value)));
&gt;         encode(static_cast&lt;typename std::underlying_type&lt;E&gt;::type&gt;(value));
&gt;     }
&gt; 
&gt; I assume that&apos;s okay to add?  So change &quot;Check&quot; to &quot;Add Debug assert&quot;?
&gt; 
&gt; Do we eventually want to get rid of encodeEnum() (just like decodeEnum()) and just use the templated encode() (same method pasted above)?

Debug assertion is fine.

&gt;&gt;&gt; Source/WebKit/Platform/IPC/Encoder.h:93
&gt;&gt;&gt; +    auto encode(T value) -&gt; std::enable_if_t&lt;std::is_arithmetic&lt;T&gt;::value&gt;
&gt;&gt; 
&gt;&gt; This syntax makes it very hard to see what is returned.  Could you use the same syntax as everything else in this file and have two template parameters, the second with std::enable_if_t?
&gt; 
&gt; Clearly it&apos;s `void`.  (There are a lot of places where I think `auto` is not clear, but I keep my mouth shut because I don&apos;t care enough to spend time discussing it.)  Happy to change this one, though.
&gt; 
&gt; Should I change this one as well?  It has the same issue.
&gt; 
&gt;     template&lt;typename E&gt;
&gt;     auto encode(E value) -&gt; std::enable_if_t&lt;std::is_enum&lt;E&gt;::value&gt;
&gt;     {
&gt;         ASSERT(WTF::isValidEnum&lt;E&gt;(static_cast&lt;typename std::underlying_type&lt;E&gt;::type&gt;(value)));
&gt;         encode(static_cast&lt;typename std::underlying_type&lt;E&gt;::type&gt;(value));
&gt;     }

Yes, please change them both.  A template parameter indicating what the template is used for is much better than a mess in the return type, especially with an implicit return type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652414</commentid>
    <comment_count>5</comment_count>
      <attachid>399299</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-13 15:46:34 -0700</bug_when>
    <thetext>Comment on attachment 399299
Patch v1

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

&gt;&gt;&gt; Source/WebKit/Platform/IPC/Decoder.h:127
&gt;&gt;&gt; +        // FIXME: Check that this is a valid enum value.
&gt;&gt; 
&gt;&gt; I believe decodeEnum is only used for decoding legacy enum types without EnumTraits.  I think this FIXME should read: migrate all uses of this function to operator&gt;&gt; with proper value checks and remove this.
&gt; 
&gt; Sure, I can change this.  I wanted to use WTF::isValidEnum&lt;EnumType&gt;() to check the type, and I assume that would have lead me down the enum class/EnumTraits path, but I didn&apos;t know how to say it.

Should this method also have a FIXME to remove it?  If not, I don&apos;t understand why.

    template&lt;typename E, std::enable_if_t&lt;std::is_enum&lt;E&gt;::value&gt;* = nullptr&gt;
    WARN_UNUSED_RETURN bool decode(E&amp; enumValue)
    {   
        typename std::underlying_type&lt;E&gt;::type value;
        if (!decode(value))
            return false;
        if (!WTF::isValidEnum&lt;E&gt;(value))
            return false;
        
        enumValue = static_cast&lt;E&gt;(value);
        return true;
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652430</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-05-13 16:22:52 -0700</bug_when>
    <thetext>We should remove decodeEnum and rename all of them to decode, and also be pushing towards using operator&gt;&gt;
Same with encodeEnum, which is super easy to replace with operator&lt;&lt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652437</commentid>
    <comment_count>7</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-13 16:35:01 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #6)
&gt; We should remove decodeEnum and rename all of them to decode, and also be
&gt; pushing towards using operator&gt;&gt;
&gt; Same with encodeEnum, which is super easy to replace with operator&lt;&lt;

Okay, got it. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652440</commentid>
    <comment_count>8</comment_count>
      <attachid>399316</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-05-13 16:43:43 -0700</bug_when>
    <thetext>Created attachment 399316
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652494</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-05-13 19:43:03 -0700</bug_when>
    <thetext>Committed r261672: &lt;https://trac.webkit.org/changeset/261672&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 399316.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399299</attachid>
            <date>2020-05-13 14:08:10 -0700</date>
            <delta_ts>2020-05-13 16:43:41 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-211861-20200513140815.patch</filename>
            <type>text/plain</type>
            <size>20196</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxNTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDM5YzZkODcxNTdiZjI3YzVh
NzcxZDBjNWI3OTIzM2E4MGI4YzJmZWIuLjUyYjIyOGUxMWVmMjM1Y2Y0MWE4NGJkYzdiMWYzYTNi
ZjdiYTY3ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMjAtMDUtMTMgIERhdmlkIEtp
bHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KKworICAgICAgICBbSVBDXSBVc2UgdGVtcGxhdGVz
IHRvIHJlZHVjZSBkdXBsaWNhdGUgY29kZSBpbiBJUEM6OkRlY29kZXIgYW5kIElQQzo6RW5jb2Rl
ciBjbGFzc2VzCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTE4NjE+CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS82MjM2MDM5MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbiBicm9hZCBzdHJva2VzLCB0aGlzIGNoYW5nZSBmaXhlcyB0
aGUgZm9sbG93aW5nIGlzc3VlczoKKyAgICAgICAgLSBDaGFuZ2UgYHVuc2lnbmVkYCB0eXBlIHRv
IGBzaXplX3RgIGZvciBgYWxpZ25tZW50YCBwYXJhbWV0ZXJzCisgICAgICAgICAgZm9yIGNvbnNp
c3RlbmN5IG9uIDMyLWJpdCBwbGF0Zm9ybXMuCisgICAgICAgIC0gVGVtcGxhdGl6ZSBFbmNvZGVy
OjplbmNvZGUoKSwgRGVjb2Rlcjo6ZGVjb2RlKCkgYW5kCisgICAgICAgICAgRGVjb2Rlcjo6b3Bl
cmF0b3I+PigpIG1ldGhvZHMgdG8gcmVkdWNlIGR1cGxpY2F0ZSBjb2RlLiAgVGhpcworICAgICAg
ICAgIGRlbGV0ZWQgY29kZSBpbiBzb3VyY2UgZmlsZXMsIGFkZGVkIHRlbXBsYXRlIG1ldGhvZHMg
dG8gaGVhZGVyCisgICAgICAgICAgZmlsZXMsIGFuZCByZXF1aXJlZCBhIGZldyBjaGFuZ2VzIHRv
IGV4aXN0aW5nIHRlbXBsYXRlcyBpbgorICAgICAgICAgIGhlYWRlciBmaWxlcyB0byBkaXNhbWJp
Z3VhdGUgc3RkOjppc19hcml0aG1ldGljIHBhcmFtZXRlcgorICAgICAgICAgIHR5cGVzLgorICAg
ICAgICAtIFVzZSBgdHlwZW5hbWUgRWAgZm9yIGFsbCB0ZW1wbGF0ZSBtZXRob2RzIHRoYXQgaGFu
ZGxlIGVudW0KKyAgICAgICAgICB0eXBlcy4KKyAgICAgICAgLSBVc2UgYHR5cGVuYW1lIFRgIGZv
ciBhbGwgb3RoZXIgdGVtcGxhdGUgbWV0aG9kIHR5cGVzLgorICAgICAgICAtIE1vdmUgV0FSTl9V
TlVTRURfUkVUVVJOIHRvIHNhbWUgbGluZSBhcyBgYm9vbGAgcmV0dXJuIHR5cGUuCisgICAgICAg
IC0gQWRkIEZJWE1FIGNvbW1lbnRzIHRvIHZhbGlkYXRlIGVudW0gdmFsdWVzLgorCisgICAgICAg
ICogUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpyb3VuZFVwVG9BbGln
bm1lbnQpOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjphbGlnbkJ1ZmZlclBvc2l0aW9uKToKKyAg
ICAgICAgKElQQzo6RGVjb2Rlcjo6YnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbiBjb25zdCk6
CisgICAgICAgIChJUEM6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAg
IChJUEM6OmRlY29kZVZhbHVlRnJvbUJ1ZmZlcik6IERlbGV0ZS4KKyAgICAgICAgKElQQzo6RGVj
b2Rlcjo6Z2V0T3B0aW9uYWwpOiBEZWxldGUuCisgICAgICAgIChJUEM6OkRlY29kZXI6Om9wZXJh
dG9yPj4pOiBEZWxldGUuCisgICAgICAgIChJUEM6OkRlY29kZXI6OmRlY29kZSk6IERlbGV0ZS4K
KyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRGVjb2Rlci5oOgorICAgICAgICAoSVBDOjpEZWNvZGVy
OjpkZWNvZGUpOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpvcGVyYXRvcj4+KToKKyAgICAgICAg
KElQQzo6RGVjb2Rlcjo6ZGVjb2RlRW51bSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0VuY29k
ZXIuY3BwOgorICAgICAgICAoSVBDOjpyb3VuZFVwVG9BbGlnbm1lbnQpOgorICAgICAgICAoSVBD
OjpFbmNvZGVyOjpncm93KToKKyAgICAgICAgKElQQzo6RW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKToKKyAgICAgICAgKElQQzo6Y29weVZhbHVlVG9CdWZmZXIpOiBEZWxldGUuCisgICAg
ICAgIChJUEM6OkVuY29kZXI6OmVuY29kZSk6IERlbGV0ZS4KKyAgICAgICAgKiBQbGF0Zm9ybS9J
UEMvRW5jb2Rlci5oOgorCiAyMDIwLTA1LTEyICBKYWNvYiBVcGhvZmYgIDxqYWNvYl91cGhvZmZA
YXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjYxNTU3LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAppbmRleCA0OWI0ZGE0ZGJjYTg3ODU5M2My
YmNiZWJlMWRjYmJkMjUzZTgyNzEwLi5kNDZmNjA3ODE1ODUxZWUzODIxZjhhZWQ2NzFhYTc4Yjk2
YzI0NTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcApAQCAtMTMzLDcg
KzEzMyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBEZWNvZGVyOjp1bndyYXBGb3JUZXN0
aW5nKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIERlY29kZXI6OmNyZWF0ZSh3cmFwcGVk
TWVzc2FnZS5kYXRhKCksIHdyYXBwZWRNZXNzYWdlLnNpemUoKSwgbnVsbHB0ciwgV1RGTW92ZShh
dHRhY2htZW50cykpOwogfQogCi1zdGF0aWMgaW5saW5lIGNvbnN0IHVpbnQ4X3QqIHJvdW5kVXBU
b0FsaWdubWVudChjb25zdCB1aW50OF90KiBwdHIsIHVuc2lnbmVkIGFsaWdubWVudCkKK3N0YXRp
YyBpbmxpbmUgY29uc3QgdWludDhfdCogcm91bmRVcFRvQWxpZ25tZW50KGNvbnN0IHVpbnQ4X3Qq
IHB0ciwgc2l6ZV90IGFsaWdubWVudCkKIHsKICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgYWxpZ25t
ZW50IGlzIGEgcG93ZXIgb2YgMi4KICAgICBBU1NFUlQoYWxpZ25tZW50ICYmICEoYWxpZ25tZW50
ICYgKGFsaWdubWVudCAtIDEpKSk7CkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIGlubGluZSBi
b29sIGFsaWduZWRCdWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKGNvbnN0IHVpbnQ4X3QqIGFs
aWduZWRQb3MKICAgICByZXR1cm4gYnVmZmVyRW5kID49IGFsaWduZWRQb3NpdGlvbiAmJiBidWZm
ZXJTdGFydCA8PSBhbGlnbmVkUG9zaXRpb24gJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihidWZmZXJF
bmQgLSBhbGlnbmVkUG9zaXRpb24pID49IHNpemU7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6YWxpZ25C
dWZmZXJQb3NpdGlvbih1bnNpZ25lZCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQorYm9vbCBEZWNv
ZGVyOjphbGlnbkJ1ZmZlclBvc2l0aW9uKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQog
ewogICAgIGNvbnN0IHVpbnQ4X3QqIGFsaWduZWRQb3NpdGlvbiA9IHJvdW5kVXBUb0FsaWdubWVu
dChtX2J1ZmZlclBvcywgYWxpZ25tZW50KTsKICAgICBpZiAoIWFsaWduZWRCdWZmZXJJc0xhcmdl
RW5vdWdoVG9Db250YWluKGFsaWduZWRQb3NpdGlvbiwgbV9idWZmZXIsIG1fYnVmZmVyRW5kLCBz
aXplKSkgewpAQCAtMTY0LDEyICsxNjQsMTIgQEAgYm9vbCBEZWNvZGVyOjphbGlnbkJ1ZmZlclBv
c2l0aW9uKHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgRGVjb2Rlcjo6YnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbih1bnNpZ25l
ZCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSBjb25zdAorYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xh
cmdlRW5vdWdoVG9Db250YWluKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSBjb25zdAog
ewogICAgIHJldHVybiBhbGlnbmVkQnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihyb3VuZFVw
VG9BbGlnbm1lbnQobV9idWZmZXJQb3MsIGFsaWdubWVudCksIG1fYnVmZmVyLCBtX2J1ZmZlckVu
ZCwgc2l6ZSk7CiB9CiAKLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQpCitib29sIERlY29kZXI6
OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90
IGFsaWdubWVudCkKIHsKICAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBz
aXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTk2LDE2NSArMTk2LDYgQEAgYm9vbCBE
ZWNvZGVyOjpkZWNvZGVWYXJpYWJsZUxlbmd0aEJ5dGVBcnJheShEYXRhUmVmZXJlbmNlJiBkYXRh
UmVmZXJlbmNlKQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUeXBl
Pgotc3RhdGljIHZvaWQgZGVjb2RlVmFsdWVGcm9tQnVmZmVyKFR5cGUmIHZhbHVlLCBjb25zdCB1
aW50OF90KiYgYnVmZmVyUG9zaXRpb24pCi17Ci0gICAgbWVtY3B5KCZ2YWx1ZSwgYnVmZmVyUG9z
aXRpb24sIHNpemVvZih2YWx1ZSkpOwotICAgIGJ1ZmZlclBvc2l0aW9uICs9IHNpemVvZihUeXBl
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLURlY29kZXImIERlY29kZXI6OmdldE9w
dGlvbmFsKE9wdGlvbmFsPFR5cGU+JiBvcHRpb25hbCkKLXsKLSAgICBUeXBlIHJlc3VsdDsKLSAg
ICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oc2l6ZW9mKHJlc3VsdCksIHNpemVvZihyZXN1bHQp
KSkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIAotICAgIGRlY29kZVZhbHVlRnJvbUJ1ZmZl
cihyZXN1bHQsIG1fYnVmZmVyUG9zKTsKLSAgICBvcHRpb25hbCA9IHJlc3VsdDsKLSAgICByZXR1
cm4gKnRoaXM7Ci19Ci0KLURlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8Ym9v
bD4mIG9wdGlvbmFsKQotewotICAgIHJldHVybiBnZXRPcHRpb25hbChvcHRpb25hbCk7Ci19Ci0K
LURlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8dWludDhfdD4mIG9wdGlvbmFs
KQotewotICAgIHJldHVybiBnZXRPcHRpb25hbChvcHRpb25hbCk7Ci19Ci0KLURlY29kZXImIERl
Y29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8dWludDE2X3Q+JiBvcHRpb25hbCkKLXsKLSAgICBy
ZXR1cm4gZ2V0T3B0aW9uYWwob3B0aW9uYWwpOwotfQotCi1EZWNvZGVyJiBEZWNvZGVyOjpvcGVy
YXRvcj4+KE9wdGlvbmFsPHVpbnQzMl90PiYgb3B0aW9uYWwpCi17Ci0gICAgcmV0dXJuIGdldE9w
dGlvbmFsKG9wdGlvbmFsKTsKLX0KLQotRGVjb2RlciYgRGVjb2Rlcjo6b3BlcmF0b3I+PihPcHRp
b25hbDx1aW50NjRfdD4mIG9wdGlvbmFsKQotewotICAgIHJldHVybiBnZXRPcHRpb25hbChvcHRp
b25hbCk7Ci19Ci0KLURlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8aW50MTZf
dD4mIG9wdGlvbmFsKQotewotICAgIHJldHVybiBnZXRPcHRpb25hbChvcHRpb25hbCk7Ci19Ci0K
LURlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8aW50MzJfdD4mIG9wdGlvbmFs
KQotewotICAgIHJldHVybiBnZXRPcHRpb25hbChvcHRpb25hbCk7Ci19Ci0KLURlY29kZXImIERl
Y29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8aW50NjRfdD4mIG9wdGlvbmFsKQotewotICAgIHJl
dHVybiBnZXRPcHRpb25hbChvcHRpb25hbCk7Ci19Ci0KLURlY29kZXImIERlY29kZXI6Om9wZXJh
dG9yPj4oT3B0aW9uYWw8ZmxvYXQ+JiBvcHRpb25hbCkKLXsKLSAgICByZXR1cm4gZ2V0T3B0aW9u
YWwob3B0aW9uYWwpOwotfQotCi1EZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFs
PGRvdWJsZT4mIG9wdGlvbmFsKQotewotICAgIHJldHVybiBnZXRPcHRpb25hbChvcHRpb25hbCk7
Ci19Ci0KLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGJvb2wmIHJlc3VsdCkKLXsKLSAgICBpZiAoIWFs
aWduQnVmZmVyUG9zaXRpb24oc2l6ZW9mKHJlc3VsdCksIHNpemVvZihyZXN1bHQpKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGRlY29kZVZhbHVlRnJvbUJ1ZmZlcihyZXN1bHQs
IG1fYnVmZmVyUG9zKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNv
ZGUodWludDhfdCYgcmVzdWx0KQotewotICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihzaXpl
b2YocmVzdWx0KSwgc2l6ZW9mKHJlc3VsdCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBkZWNvZGVWYWx1ZUZyb21CdWZmZXIocmVzdWx0LCBtX2J1ZmZlclBvcyk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQxNl90JiByZXN1bHQpCi17Ci0g
ICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKHNpemVvZihyZXN1bHQpLCBzaXplb2YocmVzdWx0
KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRlY29kZVZhbHVlRnJvbUJ1ZmZlcihy
ZXN1bHQsIG1fYnVmZmVyUG9zKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEZWNvZGVy
OjpkZWNvZGUodWludDMyX3QmIHJlc3VsdCkKLXsKLSAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRp
b24oc2l6ZW9mKHJlc3VsdCksIHNpemVvZihyZXN1bHQpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgZGVjb2RlVmFsdWVGcm9tQnVmZmVyKHJlc3VsdCwgbV9idWZmZXJQb3MpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIERlY29kZXI6OmRlY29kZSh1aW50NjRfdCYgcmVzdWx0
KQotewotICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihzaXplb2YocmVzdWx0KSwgc2l6ZW9m
KHJlc3VsdCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgZGVjb2RlVmFsdWVG
cm9tQnVmZmVyKHJlc3VsdCwgbV9idWZmZXJQb3MpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIERlY29kZXI6OmRlY29kZShpbnQxNl90JiByZXN1bHQpCi17Ci0gICAgaWYgKCFhbGlnbkJ1
ZmZlclBvc2l0aW9uKHNpemVvZihyZXN1bHQpLCBzaXplb2YocmVzdWx0KSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGRlY29kZVZhbHVlRnJvbUJ1ZmZlcihyZXN1bHQsIG1fYnVmZmVy
UG9zKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNvZGUoaW50MzJf
dCYgcmVzdWx0KQotewotICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihzaXplb2YocmVzdWx0
KSwgc2l6ZW9mKHJlc3VsdCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgZGVj
b2RlVmFsdWVGcm9tQnVmZmVyKHJlc3VsdCwgbV9idWZmZXJQb3MpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIERlY29kZXI6OmRlY29kZShpbnQ2NF90JiByZXN1bHQpCi17Ci0gICAgaWYg
KCFhbGlnbkJ1ZmZlclBvc2l0aW9uKHNpemVvZihyZXN1bHQpLCBzaXplb2YocmVzdWx0KSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRlY29kZVZhbHVlRnJvbUJ1ZmZlcihyZXN1bHQs
IG1fYnVmZmVyUG9zKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNv
ZGUoZmxvYXQmIHJlc3VsdCkKLXsKLSAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oc2l6ZW9m
KHJlc3VsdCksIHNpemVvZihyZXN1bHQpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ZGVjb2RlVmFsdWVGcm9tQnVmZmVyKHJlc3VsdCwgbV9idWZmZXJQb3MpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIERlY29kZXI6OmRlY29kZShkb3VibGUmIHJlc3VsdCkKLXsKLSAgICBp
ZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oc2l6ZW9mKHJlc3VsdCksIHNpemVvZihyZXN1bHQpKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGRlY29kZVZhbHVlRnJvbUJ1ZmZlcihy
ZXN1bHQsIG1fYnVmZmVyUG9zKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBEZWNvZGVy
OjpyZW1vdmVBdHRhY2htZW50KEF0dGFjaG1lbnQmIGF0dGFjaG1lbnQpCiB7CiAgICAgaWYgKG1f
YXR0YWNobWVudHMuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvRGVjb2Rlci5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCmlu
ZGV4IDEzOGE5ZGUzYzYxNGNhNjBjMGQwMGY4NmFkOWQzODRmODRkN2Y5MDIuLjg4MTY0OWYwYTA3
Yjg1MzAwNWU4YzA0ZDYzODUyY2I5ODA1OTRmMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0RlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9E
ZWNvZGVyLmgKQEAgLTc1LDM0ICs3NSwyOCBAQCBwdWJsaWM6CiAgICAgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyUG9zICE9IG51bGxwdHI7
IH0KICAgICB2b2lkIG1hcmtJbnZhbGlkKCkgeyBtX2J1ZmZlclBvcyA9IG51bGxwdHI7IH0KIAot
ICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90
Kiwgc2l6ZV90LCB1bnNpZ25lZCBhbGlnbm1lbnQpOworICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBi
b29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90KiBkYXRhLCBzaXplX3QsIHNpemVfdCBh
bGlnbm1lbnQpOwogCiAgICAgLy8gVGhlIGRhdGEgaW4gdGhlIGRhdGEgcmVmZXJlbmNlIGhlcmUg
d2lsbCBvbmx5IGJlIHZhbGlkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIEFyZ3VtZW50RGVjb2Rl
ciBvYmplY3QuCiAgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlVmFyaWFibGVMZW5n
dGhCeXRlQXJyYXkoRGF0YVJlZmVyZW5jZSYpOwogCi0gICAgV0FSTl9VTlVTRURfUkVUVVJOIGJv
b2wgZGVjb2RlKGJvb2wmKTsKLSAgICBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPGJvb2w+
Jik7Ci0gICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKHVpbnQ4X3QmKTsKLSAgICBE
ZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQ4X3Q+Jik7Ci0gICAgV0FSTl9VTlVTRURf
UkVUVVJOIGJvb2wgZGVjb2RlKHVpbnQxNl90Jik7Ci0gICAgRGVjb2RlciYgb3BlcmF0b3I+PihP
cHRpb25hbDx1aW50MTZfdD4mKTsKLSAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUo
dWludDMyX3QmKTsKLSAgICBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPHVpbnQzMl90PiYp
OwotICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZSh1aW50NjRfdCYpOwotICAgIERl
Y29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8dWludDY0X3Q+Jik7Ci0gICAgV0FSTl9VTlVTRURf
UkVUVVJOIGJvb2wgZGVjb2RlKGludDE2X3QmKTsKLSAgICBEZWNvZGVyJiBvcGVyYXRvcj4+KE9w
dGlvbmFsPGludDE2X3Q+Jik7Ci0gICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKGlu
dDMyX3QmKTsKLSAgICBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPGludDMyX3Q+Jik7Ci0g
ICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKGludDY0X3QmKTsKLSAgICBEZWNvZGVy
JiBvcGVyYXRvcj4+KE9wdGlvbmFsPGludDY0X3Q+Jik7Ci0gICAgV0FSTl9VTlVTRURfUkVUVVJO
IGJvb2wgZGVjb2RlKGZsb2F0Jik7Ci0gICAgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxm
bG9hdD4mKTsKLSAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoZG91YmxlJik7Ci0g
ICAgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxkb3VibGU+Jik7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEU+
Ojp2YWx1ZT4+IFdBUk5fVU5VU0VEX1JFVFVSTgotICAgIGJvb2wgZGVjb2RlKEUmIGUpCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2FyaXRobWV0aWM8
VD46OnZhbHVlPiogPSBudWxscHRyPgorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29k
ZShUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQp
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0
ZDo6aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWU+KiA9IG51bGxwdHI+CisgICAgRGVjb2RlciYgb3Bl
cmF0b3I+PihPcHRpb25hbDxUPiYgb3B0aW9uYWwpCisgICAgeworICAgICAgICBUIHJlc3VsdDsK
KyAgICAgICAgaWYgKGRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPigmcmVzdWx0KSwgc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKSkKKyAgICAgICAgICAgIG9wdGlv
bmFsID0gcmVzdWx0OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRSwgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2VudW08RT46OnZhbHVlPiog
PSBudWxscHRyPgorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShFJiBlbnVtVmFs
dWUpCiAgICAgewogICAgICAgICB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFPjo6dHlw
ZSB2YWx1ZTsKICAgICAgICAgaWYgKCFkZWNvZGUodmFsdWUpKQpAQCAtMTEwLDExICsxMDQsMTEg
QEAgcHVibGljOgogICAgICAgICBpZiAoIVdURjo6aXNWYWxpZEVudW08RT4odmFsdWUpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFPih2YWx1
ZSk7CisgICAgICAgIGVudW1WYWx1ZSA9IHN0YXRpY19jYXN0PEU+KHZhbHVlKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRSwgdHlwZW5hbWUg
PSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxFPjo6dmFsdWU+PgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEUsIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEU+Ojp2YWx1ZT4qID0g
bnVsbHB0cj4KICAgICBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPEU+JiBvcHRpb25hbCkK
ICAgICB7CiAgICAgICAgIE9wdGlvbmFsPHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPEU+
Ojp0eXBlPiB2YWx1ZTsKQEAgLTEyNCwxNCArMTE4LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFdBUk5fVU5VU0VE
X1JFVFVSTgotICAgIGJvb2wgZGVjb2RlRW51bShUJiByZXN1bHQpCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRT4KKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVFbnVtKEUmIHJlc3Vs
dCkKICAgICB7Ci0gICAgICAgIHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPFQ+Ojp0eXBl
IHZhbHVlOworICAgICAgICB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFPjo6dHlwZSB2
YWx1ZTsKICAgICAgICAgaWYgKCFkZWNvZGUodmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PFQ+KHZhbHVlKTsKKyAgICAgICAg
Ly8gRklYTUU6IENoZWNrIHRoYXQgdGhpcyBpcyBhIHZhbGlkIGVudW0gdmFsdWUuCisgICAgICAg
IHJlc3VsdCA9IHN0YXRpY19jYXN0PEU+KHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkBAIC0xNDYsMTQgKzE0MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBidWZm
ZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKGFsaWdub2YoVCksIG51bUVsZW1lbnRzICogc2l6ZW9m
KFQpKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90
PCFzdGQ6OmlzX2VudW08VD46OnZhbHVlICYmIFVzZXNMZWdhY3lEZWNvZGVyPFQ+Ojp2YWx1ZT4q
ID0gbnVsbHB0cj4gV0FSTl9VTlVTRURfUkVUVVJOCi0gICAgYm9vbCBkZWNvZGUoVCYgdCkKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2VudW08VD46
OnZhbHVlICYmICFzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlICYmIFVzZXNMZWdhY3lEZWNv
ZGVyPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBk
ZWNvZGUoVCYgdCkKICAgICB7CiAgICAgICAgIHJldHVybiBBcmd1bWVudENvZGVyPFQ+OjpkZWNv
ZGUoKnRoaXMsIHQpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5h
YmxlX2lmX3Q8IXN0ZDo6aXNfZW51bTxUPjo6dmFsdWUgJiYgIVVzZXNMZWdhY3lEZWNvZGVyPFQ+
Ojp2YWx1ZT4qID0gbnVsbHB0cj4gV0FSTl9VTlVTRURfUkVUVVJOCi0gICAgYm9vbCBkZWNvZGUo
VCYgdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6Omlz
X2VudW08VD46OnZhbHVlICYmICFzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlICYmICFVc2Vz
TGVnYWN5RGVjb2RlcjxUPjo6dmFsdWU+KiA9IG51bGxwdHI+CisgICAgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgZGVjb2RlKFQmIHQpCiAgICAgewogICAgICAgICBPcHRpb25hbDxUPiBvcHRpb25h
bDsKICAgICAgICAgKnRoaXMgPj4gb3B0aW9uYWw7CkBAIC0xNzAsNyArMTY0LDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogICAgIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfZW51bTxUPjo6dmFsdWUgJiYgIVVzZXNN
b2Rlcm5EZWNvZGVyPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2VudW08VD46OnZhbHVlICYmICFzdGQ6Omlz
X2FyaXRobWV0aWM8VD46OnZhbHVlICYmICFVc2VzTW9kZXJuRGVjb2RlcjxUPjo6dmFsdWU+KiA9
IG51bGxwdHI+CiAgICAgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxUPiYgb3B0aW9uYWwp
CiAgICAgewogICAgICAgICBUIHQ7CkBAIC0xODcsOSArMTgxLDggQEAgcHVibGljOgogICAgIHN0
YXRpYyBjb25zdCBib29sIGlzSVBDRGVjb2RlciA9IHRydWU7CiAKIHByaXZhdGU6Ci0gICAgYm9v
bCBhbGlnbkJ1ZmZlclBvc2l0aW9uKHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90KTsKLSAgICBi
b29sIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4odW5zaWduZWQgYWxpZ25tZW50LCBzaXpl
X3QpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IERlY29kZXImIGdldE9wdGlv
bmFsKE9wdGlvbmFsPFR5cGU+Jik7CisgICAgYm9vbCBhbGlnbkJ1ZmZlclBvc2l0aW9uKHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCk7CisgICAgYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250
YWluKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCkgY29uc3Q7CiAKICAgICBjb25zdCB1aW50OF90
KiBtX2J1ZmZlcjsKICAgICBjb25zdCB1aW50OF90KiBtX2J1ZmZlclBvczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAKaW5kZXggYjU1NDNkYmEyMzE4YWRiNzg1OTVlMGVmNGMz
NWNhMTdlZDM0YzU5OC4uYmYxNTcwMmZhMTVhNDA2ZDQxODhlMTFmNTU0Nzk0YmIyZjYyZGQ0NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM4LDcgKzEzOCw3IEBAIHZv
aWQgRW5jb2Rlcjo6d3JhcEZvclRlc3Rpbmcoc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+IG9yaWdp
bmFsKQogICAgICAgICBhZGRBdHRhY2htZW50KFdURk1vdmUoYXR0YWNobWVudCkpOwogfQogCi1z
dGF0aWMgaW5saW5lIHNpemVfdCByb3VuZFVwVG9BbGlnbm1lbnQoc2l6ZV90IHZhbHVlLCB1bnNp
Z25lZCBhbGlnbm1lbnQpCitzdGF0aWMgaW5saW5lIHNpemVfdCByb3VuZFVwVG9BbGlnbm1lbnQo
c2l6ZV90IHZhbHVlLCBzaXplX3QgYWxpZ25tZW50KQogewogICAgIHJldHVybiAoKHZhbHVlICsg
YWxpZ25tZW50IC0gMSkgLyBhbGlnbm1lbnQpICogYWxpZ25tZW50OwogfQpAQCAtMTcyLDcgKzE3
Miw3IEBAIHZvaWQgRW5jb2Rlcjo6ZW5jb2RlSGVhZGVyKCkKICAgICAqdGhpcyA8PCBtX2Rlc3Rp
bmF0aW9uSUQ7CiB9CiAKLXVpbnQ4X3QqIEVuY29kZXI6Omdyb3codW5zaWduZWQgYWxpZ25tZW50
LCBzaXplX3Qgc2l6ZSkKK3VpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90IGFsaWdubWVudCwg
c2l6ZV90IHNpemUpCiB7CiAgICAgc2l6ZV90IGFsaWduZWRTaXplID0gcm91bmRVcFRvQWxpZ25t
ZW50KG1fYnVmZmVyU2l6ZSwgYWxpZ25tZW50KTsKICAgICByZXNlcnZlKGFsaWduZWRTaXplICsg
c2l6ZSk7CkBAIC0xODUsNyArMTg1LDcgQEAgdWludDhfdCogRW5jb2Rlcjo6Z3Jvdyh1bnNpZ25l
ZCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogICAgIHJldHVybiBtX2J1ZmZlciArIGFsaWduZWRT
aXplOwogfQogCi12b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50KQordm9pZCBFbmNvZGVy
OjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUs
IHNpemVfdCBhbGlnbm1lbnQpCiB7CiAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGRhdGEpICUgYWxpZ25tZW50KSk7CiAKQEAgLTE5OSw3MiArMTk5LDYgQEAgdm9pZCBF
bmNvZGVyOjplbmNvZGVWYXJpYWJsZUxlbmd0aEJ5dGVBcnJheShjb25zdCBEYXRhUmVmZXJlbmNl
JiBkYXRhUmVmZXJlbmNlKQogICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShkYXRhUmVmZXJlbmNl
LmRhdGEoKSwgZGF0YVJlZmVyZW5jZS5zaXplKCksIDEpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgotc3RhdGljIHZvaWQgY29weVZhbHVlVG9CdWZmZXIoVHlwZSB2YWx1ZSwgdWludDhf
dCogYnVmZmVyUG9zaXRpb24pCi17Ci0gICAgbWVtY3B5KGJ1ZmZlclBvc2l0aW9uLCAmdmFsdWUs
IHNpemVvZihUeXBlKSk7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGJvb2wgbikKLXsKLSAg
ICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemVvZihuKSwgc2l6ZW9mKG4pKTsKLSAgICBjb3B5
VmFsdWVUb0J1ZmZlcihuLCBidWZmZXIpOwotfQotCi12b2lkIEVuY29kZXI6OmVuY29kZSh1aW50
OF90IG4pCi17Ci0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YobiksIHNpemVvZihu
KSk7Ci0gICAgY29weVZhbHVlVG9CdWZmZXIobiwgYnVmZmVyKTsKLX0KLQotdm9pZCBFbmNvZGVy
OjplbmNvZGUodWludDE2X3QgbikKLXsKLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemVv
ZihuKSwgc2l6ZW9mKG4pKTsKLSAgICBjb3B5VmFsdWVUb0J1ZmZlcihuLCBidWZmZXIpOwotfQot
Ci12b2lkIEVuY29kZXI6OmVuY29kZSh1aW50MzJfdCBuKQotewotICAgIHVpbnQ4X3QqIGJ1ZmZl
ciA9IGdyb3coc2l6ZW9mKG4pLCBzaXplb2YobikpOwotICAgIGNvcHlWYWx1ZVRvQnVmZmVyKG4s
IGJ1ZmZlcik7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKHVpbnQ2NF90IG4pCi17Ci0gICAg
dWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YobiksIHNpemVvZihuKSk7Ci0gICAgY29weVZh
bHVlVG9CdWZmZXIobiwgYnVmZmVyKTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNvZGUoaW50MTZf
dCBuKQotewotICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3coc2l6ZW9mKG4pLCBzaXplb2Yobikp
OwotICAgIGNvcHlWYWx1ZVRvQnVmZmVyKG4sIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6
ZW5jb2RlKGludDMyX3QgbikKLXsKLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemVvZihu
KSwgc2l6ZW9mKG4pKTsKLSAgICBjb3B5VmFsdWVUb0J1ZmZlcihuLCBidWZmZXIpOwotfQotCi12
b2lkIEVuY29kZXI6OmVuY29kZShpbnQ2NF90IG4pCi17Ci0gICAgdWludDhfdCogYnVmZmVyID0g
Z3JvdyhzaXplb2YobiksIHNpemVvZihuKSk7Ci0gICAgY29weVZhbHVlVG9CdWZmZXIobiwgYnVm
ZmVyKTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNvZGUoZmxvYXQgbikKLXsKLSAgICB1aW50OF90
KiBidWZmZXIgPSBncm93KHNpemVvZihuKSwgc2l6ZW9mKG4pKTsKLSAgICBjb3B5VmFsdWVUb0J1
ZmZlcihuLCBidWZmZXIpOwotfQotCi12b2lkIEVuY29kZXI6OmVuY29kZShkb3VibGUgbikKLXsK
LSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemVvZihuKSwgc2l6ZW9mKG4pKTsKLSAgICBj
b3B5VmFsdWVUb0J1ZmZlcihuLCBidWZmZXIpOwotfQotCiB2b2lkIEVuY29kZXI6OmFkZEF0dGFj
aG1lbnQoQXR0YWNobWVudCYmIGF0dGFjaG1lbnQpCiB7CiAgICAgbV9hdHRhY2htZW50cy5hcHBl
bmQoV1RGTW92ZShhdHRhY2htZW50KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9FbmNvZGVyLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgK
aW5kZXggY2ZkZTU5NTE5OGUzOGZhMDg1ZTk1Mjg3OWE4OTAzMzA5MTQwMDRlYS4uNjU3OTlhNDE4
ZjJlZTIyM2UxYWM4YzU3MGJiMWRkMDU5NzUyYjAyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0VuY29kZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01OCwzNCArNTgsNDMgQEAgcHVibGljOgogCiAgICAgdm9pZCB3cmFwRm9yVGVz
dGluZyhzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4pOwogCi0gICAgdm9pZCBlbmNvZGVGaXhlZExl
bmd0aERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCwgdW5zaWduZWQgYWxpZ25tZW50KTsKKyAg
ICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qs
IHNpemVfdCBhbGlnbm1lbnQpOwogICAgIHZvaWQgZW5jb2RlVmFyaWFibGVMZW5ndGhCeXRlQXJy
YXkoY29uc3QgRGF0YVJlZmVyZW5jZSYpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9p
ZCBlbmNvZGVFbnVtKFQgdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFPgorICAgIHZvaWQgZW5j
b2RlRW51bShFIHQpCiAgICAgewotICAgICAgICBlbmNvZGUoc3RhdGljX2Nhc3Q8dHlwZW5hbWUg
c3RkOjp1bmRlcmx5aW5nX3R5cGU8VD46OnR5cGU+KHQpKTsKKyAgICAgICAgLy8gRklYTUU6IENo
ZWNrIHRoYXQgdGhpcyBpcyBhIHZhbGlkIGVudW0gdmFsdWUuCisgICAgICAgIGVuY29kZShzdGF0
aWNfY2FzdDx0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFPjo6dHlwZT4odCkpOwogICAg
IH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNf
ZW51bTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90
PFQ+Pj46OnZhbHVlPiogPSBudWxscHRyPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6
ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfZW51bTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdF90PHN0
ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+Pj46OnZhbHVlICYmICFzdGQ6OmlzX2FyaXRobWV0aWM8
dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4+
Ojp2YWx1ZT4qID0gbnVsbHB0cj4KICAgICB2b2lkIGVuY29kZShUJiYgdCkKICAgICB7CiAgICAg
ICAgIEFyZ3VtZW50Q29kZXI8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8dHlwZW5hbWUgc3Rk
OjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlPjo6dHlwZT46OmVuY29kZSgqdGhpcywgc3RkOjpm
b3J3YXJkPFQ+KHQpKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+KiA9IG51bGxwdHI+Ci0gICAgRW5jb2Rl
ciYgb3BlcmF0b3I8PChUJiYgdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFLCBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfZW51bTxFPjo6dmFsdWU+KiA9IG51bGxwdHI+CisgICAgRW5jb2RlciYg
b3BlcmF0b3I8PChFJiYgdCkKICAgICB7Ci0gICAgICAgIGVuY29kZShzdGF0aWNfY2FzdDx0eXBl
bmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxUPjo6dHlwZT4odCkpOworICAgICAgICAvLyBGSVhN
RTogQ2hlY2sgdGhhdCB0aGlzIGlzIGEgdmFsaWQgZW51bSB2YWx1ZS4KKyAgICAgICAgZW5jb2Rl
KHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPEU+Ojp0eXBlPih0KSk7
CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2VudW08VD46OnZhbHVlPiogPSBudWxscHRyPgot
ICAgIEVuY29kZXImIG9wZXJhdG9yPDwoVCYmIHQpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRSwg
c3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19lbnVtPEU+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KKyAg
ICBFbmNvZGVyJiBvcGVyYXRvcjw8KEUmJiB0KQogICAgIHsKLSAgICAgICAgZW5jb2RlKHN0ZDo6
Zm9yd2FyZDxUPih0KSk7CisgICAgICAgIGVuY29kZShzdGQ6OmZvcndhcmQ8RT4odCkpOwogICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICBhdXRvIGVuY29kZShUIHZhbHVlKSAtPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYXJpdGht
ZXRpYzxUPjo6dmFsdWU+CisgICAgeworICAgICAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKFQpLCBhbGlnbm9m
KFQpKTsKKyAgICB9CisKICAgICB1aW50OF90KiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1
ZmZlcjsgfQogICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJT
aXplOyB9CiAKQEAgLTk0LDIyICsxMDMsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNJUENFbmNvZGVyID0gdHJ1ZTsKIAotICAgIHZvaWQgZW5jb2RlKHVpbnQ2NF90KTsK
LQogcHJpdmF0ZToKICAgICB2b2lkIHJlc2VydmUoc2l6ZV90KTsKIAotICAgIHVpbnQ4X3QqIGdy
b3codW5zaWduZWQgYWxpZ25tZW50LCBzaXplX3QpOwotCi0gICAgdm9pZCBlbmNvZGUoYm9vbCk7
Ci0gICAgdm9pZCBlbmNvZGUodWludDhfdCk7Ci0gICAgdm9pZCBlbmNvZGUodWludDE2X3QpOwot
ICAgIHZvaWQgZW5jb2RlKHVpbnQzMl90KTsKLSAgICB2b2lkIGVuY29kZShpbnQxNl90KTsKLSAg
ICB2b2lkIGVuY29kZShpbnQzMl90KTsKLSAgICB2b2lkIGVuY29kZShpbnQ2NF90KTsKLSAgICB2
b2lkIGVuY29kZShmbG9hdCk7Ci0gICAgdm9pZCBlbmNvZGUoZG91YmxlKTsKKyAgICB1aW50OF90
KiBncm93KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFPgogICAgIGF1dG8gZW5jb2RlKEUgdmFsdWUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjpp
c19lbnVtPEU+Ojp2YWx1ZT4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399316</attachid>
            <date>2020-05-13 16:43:43 -0700</date>
            <delta_ts>2020-05-13 19:43:03 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-211861-20200513164349.patch</filename>
            <type>text/plain</type>
            <size>20658</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxNTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDM5YzZkODcxNTdiZjI3YzVh
NzcxZDBjNWI3OTIzM2E4MGI4YzJmZWIuLjc4YjgxOTY4ZTQ0Nzk2YzU2NzE3YTg4ZjFhZmM5ZDVj
OGFlNzIxYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMjAtMDUtMTMgIERhdmlkIEtp
bHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KKworICAgICAgICBbSVBDXSBVc2UgdGVtcGxhdGVz
IHRvIHJlZHVjZSBkdXBsaWNhdGUgY29kZSBpbiBJUEM6OkRlY29kZXIgYW5kIElQQzo6RW5jb2Rl
ciBjbGFzc2VzCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTE4NjE+CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS82MjM2MDM5MD4KKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENo
cmlzdGVuc2VuLgorCisgICAgICAgIEluIGJyb2FkIHN0cm9rZXMsIHRoaXMgY2hhbmdlIGZpeGVz
IHRoZSBmb2xsb3dpbmcgaXNzdWVzOgorICAgICAgICAtIENoYW5nZSBgdW5zaWduZWRgIHR5cGUg
dG8gYHNpemVfdGAgZm9yIGBhbGlnbm1lbnRgIHBhcmFtZXRlcnMKKyAgICAgICAgICBmb3IgY29u
c2lzdGVuY3kgb24gMzItYml0IHBsYXRmb3Jtcy4KKyAgICAgICAgLSBUZW1wbGF0aXplIEVuY29k
ZXI6OmVuY29kZSgpLCBEZWNvZGVyOjpkZWNvZGUoKSBhbmQKKyAgICAgICAgICBEZWNvZGVyOjpv
cGVyYXRvcj4+KCkgbWV0aG9kcyB0byByZWR1Y2UgZHVwbGljYXRlIGNvZGUuICBUaGlzCisgICAg
ICAgICAgZGVsZXRlZCBjb2RlIGluIHNvdXJjZSBmaWxlcywgYWRkZWQgdGVtcGxhdGUgbWV0aG9k
cyB0byBoZWFkZXIKKyAgICAgICAgICBmaWxlcywgYW5kIHJlcXVpcmVkIGEgZmV3IGNoYW5nZXMg
dG8gZXhpc3RpbmcgdGVtcGxhdGVzIGluCisgICAgICAgICAgaGVhZGVyIGZpbGVzIHRvIGRpc2Ft
YmlndWF0ZSBzdGQ6OmlzX2FyaXRobWV0aWMgcGFyYW1ldGVyCisgICAgICAgICAgdHlwZXMuCisg
ICAgICAgIC0gVXNlIGB0eXBlbmFtZSBFYCBmb3IgYWxsIHRlbXBsYXRlIG1ldGhvZHMgdGhhdCBo
YW5kbGUgZW51bQorICAgICAgICAgIHR5cGVzLgorICAgICAgICAtIFVzZSBgdHlwZW5hbWUgVGAg
Zm9yIGFsbCBvdGhlciB0ZW1wbGF0ZSBtZXRob2QgdHlwZXMuCisgICAgICAgIC0gTW92ZSBXQVJO
X1VOVVNFRF9SRVRVUk4gdG8gc2FtZSBsaW5lIGFzIGBib29sYCByZXR1cm4gdHlwZS4KKyAgICAg
ICAgLSBBZGQgRklYTUUgY29tbWVudHMgdG8gdmFsaWRhdGUgZW51bSB2YWx1ZXMuCisKKyAgICAg
ICAgKiBQbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHA6CisgICAgICAgIChJUEM6OnJvdW5kVXBUb0Fs
aWdubWVudCk6CisgICAgICAgIChJUEM6OkRlY29kZXI6OmFsaWduQnVmZmVyUG9zaXRpb24pOgor
ICAgICAgICAoSVBDOjpEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluIGNvbnN0
KToKKyAgICAgICAgKElQQzo6RGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAg
ICAgKElQQzo6ZGVjb2RlVmFsdWVGcm9tQnVmZmVyKTogRGVsZXRlLgorICAgICAgICAoSVBDOjpE
ZWNvZGVyOjpnZXRPcHRpb25hbCk6IERlbGV0ZS4KKyAgICAgICAgKElQQzo6RGVjb2Rlcjo6b3Bl
cmF0b3I+Pik6IERlbGV0ZS4KKyAgICAgICAgKElQQzo6RGVjb2Rlcjo6ZGVjb2RlKTogRGVsZXRl
LgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmg6CisgICAgICAgIChJUEM6OkRlY29k
ZXI6OmRlY29kZSk6CisgICAgICAgIChJUEM6OkRlY29kZXI6Om9wZXJhdG9yPj4pOgorICAgICAg
ICAoSVBDOjpEZWNvZGVyOjpkZWNvZGVFbnVtKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRW5j
b2Rlci5jcHA6CisgICAgICAgIChJUEM6OnJvdW5kVXBUb0FsaWdubWVudCk6CisgICAgICAgIChJ
UEM6OkVuY29kZXI6Omdyb3cpOgorICAgICAgICAoSVBDOjpFbmNvZGVyOjplbmNvZGVGaXhlZExl
bmd0aERhdGEpOgorICAgICAgICAoSVBDOjpjb3B5VmFsdWVUb0J1ZmZlcik6IERlbGV0ZS4KKyAg
ICAgICAgKElQQzo6RW5jb2Rlcjo6ZW5jb2RlKTogRGVsZXRlLgorICAgICAgICAqIFBsYXRmb3Jt
L0lQQy9FbmNvZGVyLmg6CisKIDIwMjAtMDUtMTIgIEphY29iIFVwaG9mZiAgPGphY29iX3VwaG9m
ZkBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNjE1NTcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCmluZGV4IDQ5YjRkYTRkYmNhODc4NTkz
YzJiY2JlYmUxZGNiYmQyNTNlODI3MTAuLmQ0NmY2MDc4MTU4NTFlZTM4MjFmOGFlZDY3MWFhNzhi
OTZjMjQ1MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCkBAIC0xMzMs
NyArMTMzLDcgQEAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IERlY29kZXI6OnVud3JhcEZvclRl
c3RpbmcoRGVjb2RlciYgZGVjb2RlcikKICAgICByZXR1cm4gRGVjb2Rlcjo6Y3JlYXRlKHdyYXBw
ZWRNZXNzYWdlLmRhdGEoKSwgd3JhcHBlZE1lc3NhZ2Uuc2l6ZSgpLCBudWxscHRyLCBXVEZNb3Zl
KGF0dGFjaG1lbnRzKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY29uc3QgdWludDhfdCogcm91bmRV
cFRvQWxpZ25tZW50KGNvbnN0IHVpbnQ4X3QqIHB0ciwgdW5zaWduZWQgYWxpZ25tZW50KQorc3Rh
dGljIGlubGluZSBjb25zdCB1aW50OF90KiByb3VuZFVwVG9BbGlnbm1lbnQoY29uc3QgdWludDhf
dCogcHRyLCBzaXplX3QgYWxpZ25tZW50KQogewogICAgIC8vIEFzc2VydCB0aGF0IHRoZSBhbGln
bm1lbnQgaXMgYSBwb3dlciBvZiAyLgogICAgIEFTU0VSVChhbGlnbm1lbnQgJiYgIShhbGlnbm1l
bnQgJiAoYWxpZ25tZW50IC0gMSkpKTsKQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgYWxpZ25lZEJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oY29uc3QgdWludDhfdCog
YWxpZ25lZFBvcwogICAgIHJldHVybiBidWZmZXJFbmQgPj0gYWxpZ25lZFBvc2l0aW9uICYmIGJ1
ZmZlclN0YXJ0IDw9IGFsaWduZWRQb3NpdGlvbiAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGJ1ZmZl
ckVuZCAtIGFsaWduZWRQb3NpdGlvbikgPj0gc2l6ZTsKIH0KIAotYm9vbCBEZWNvZGVyOjphbGln
bkJ1ZmZlclBvc2l0aW9uKHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUpCitib29sIERl
Y29kZXI6OmFsaWduQnVmZmVyUG9zaXRpb24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUp
CiB7CiAgICAgY29uc3QgdWludDhfdCogYWxpZ25lZFBvc2l0aW9uID0gcm91bmRVcFRvQWxpZ25t
ZW50KG1fYnVmZmVyUG9zLCBhbGlnbm1lbnQpOwogICAgIGlmICghYWxpZ25lZEJ1ZmZlcklzTGFy
Z2VFbm91Z2hUb0NvbnRhaW4oYWxpZ25lZFBvc2l0aW9uLCBtX2J1ZmZlciwgbV9idWZmZXJFbmQs
IHNpemUpKSB7CkBAIC0xNjQsMTIgKzE2NCwxMiBAQCBib29sIERlY29kZXI6OmFsaWduQnVmZmVy
UG9zaXRpb24odW5zaWduZWQgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHVuc2ln
bmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUpIGNvbnN0Citib29sIERlY29kZXI6OmJ1ZmZlcklz
TGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGFsaWduZWRCdWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHJvdW5k
VXBUb0FsaWdubWVudChtX2J1ZmZlclBvcywgYWxpZ25tZW50KSwgbV9idWZmZXIsIG1fYnVmZmVy
RW5kLCBzaXplKTsKIH0KIAotYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkKK2Jvb2wgRGVjb2Rl
cjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXpl
X3QgYWxpZ25tZW50KQogewogICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihhbGlnbm1lbnQs
IHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xOTYsMTY1ICsxOTYsNiBAQCBib29s
IERlY29kZXI6OmRlY29kZVZhcmlhYmxlTGVuZ3RoQnl0ZUFycmF5KERhdGFSZWZlcmVuY2UmIGRh
dGFSZWZlcmVuY2UpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFR5
cGU+Ci1zdGF0aWMgdm9pZCBkZWNvZGVWYWx1ZUZyb21CdWZmZXIoVHlwZSYgdmFsdWUsIGNvbnN0
IHVpbnQ4X3QqJiBidWZmZXJQb3NpdGlvbikKLXsKLSAgICBtZW1jcHkoJnZhbHVlLCBidWZmZXJQ
b3NpdGlvbiwgc2l6ZW9mKHZhbHVlKSk7Ci0gICAgYnVmZmVyUG9zaXRpb24gKz0gc2l6ZW9mKFR5
cGUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotRGVjb2RlciYgRGVjb2Rlcjo6Z2V0
T3B0aW9uYWwoT3B0aW9uYWw8VHlwZT4mIG9wdGlvbmFsKQotewotICAgIFR5cGUgcmVzdWx0Owot
ICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihzaXplb2YocmVzdWx0KSwgc2l6ZW9mKHJlc3Vs
dCkpKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgCi0gICAgZGVjb2RlVmFsdWVGcm9tQnVm
ZmVyKHJlc3VsdCwgbV9idWZmZXJQb3MpOwotICAgIG9wdGlvbmFsID0gcmVzdWx0OwotICAgIHJl
dHVybiAqdGhpczsKLX0KLQotRGVjb2RlciYgRGVjb2Rlcjo6b3BlcmF0b3I+PihPcHRpb25hbDxi
b29sPiYgb3B0aW9uYWwpCi17Ci0gICAgcmV0dXJuIGdldE9wdGlvbmFsKG9wdGlvbmFsKTsKLX0K
LQotRGVjb2RlciYgRGVjb2Rlcjo6b3BlcmF0b3I+PihPcHRpb25hbDx1aW50OF90PiYgb3B0aW9u
YWwpCi17Ci0gICAgcmV0dXJuIGdldE9wdGlvbmFsKG9wdGlvbmFsKTsKLX0KLQotRGVjb2RlciYg
RGVjb2Rlcjo6b3BlcmF0b3I+PihPcHRpb25hbDx1aW50MTZfdD4mIG9wdGlvbmFsKQotewotICAg
IHJldHVybiBnZXRPcHRpb25hbChvcHRpb25hbCk7Ci19Ci0KLURlY29kZXImIERlY29kZXI6Om9w
ZXJhdG9yPj4oT3B0aW9uYWw8dWludDMyX3Q+JiBvcHRpb25hbCkKLXsKLSAgICByZXR1cm4gZ2V0
T3B0aW9uYWwob3B0aW9uYWwpOwotfQotCi1EZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9w
dGlvbmFsPHVpbnQ2NF90PiYgb3B0aW9uYWwpCi17Ci0gICAgcmV0dXJuIGdldE9wdGlvbmFsKG9w
dGlvbmFsKTsKLX0KLQotRGVjb2RlciYgRGVjb2Rlcjo6b3BlcmF0b3I+PihPcHRpb25hbDxpbnQx
Nl90PiYgb3B0aW9uYWwpCi17Ci0gICAgcmV0dXJuIGdldE9wdGlvbmFsKG9wdGlvbmFsKTsKLX0K
LQotRGVjb2RlciYgRGVjb2Rlcjo6b3BlcmF0b3I+PihPcHRpb25hbDxpbnQzMl90PiYgb3B0aW9u
YWwpCi17Ci0gICAgcmV0dXJuIGdldE9wdGlvbmFsKG9wdGlvbmFsKTsKLX0KLQotRGVjb2RlciYg
RGVjb2Rlcjo6b3BlcmF0b3I+PihPcHRpb25hbDxpbnQ2NF90PiYgb3B0aW9uYWwpCi17Ci0gICAg
cmV0dXJuIGdldE9wdGlvbmFsKG9wdGlvbmFsKTsKLX0KLQotRGVjb2RlciYgRGVjb2Rlcjo6b3Bl
cmF0b3I+PihPcHRpb25hbDxmbG9hdD4mIG9wdGlvbmFsKQotewotICAgIHJldHVybiBnZXRPcHRp
b25hbChvcHRpb25hbCk7Ci19Ci0KLURlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9u
YWw8ZG91YmxlPiYgb3B0aW9uYWwpCi17Ci0gICAgcmV0dXJuIGdldE9wdGlvbmFsKG9wdGlvbmFs
KTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNvZGUoYm9vbCYgcmVzdWx0KQotewotICAgIGlmICgh
YWxpZ25CdWZmZXJQb3NpdGlvbihzaXplb2YocmVzdWx0KSwgc2l6ZW9mKHJlc3VsdCkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgZGVjb2RlVmFsdWVGcm9tQnVmZmVyKHJlc3Vs
dCwgbV9idWZmZXJQb3MpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIERlY29kZXI6OmRl
Y29kZSh1aW50OF90JiByZXN1bHQpCi17Ci0gICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKHNp
emVvZihyZXN1bHQpLCBzaXplb2YocmVzdWx0KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGRlY29kZVZhbHVlRnJvbUJ1ZmZlcihyZXN1bHQsIG1fYnVmZmVyUG9zKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNvZGUodWludDE2X3QmIHJlc3VsdCkKLXsK
LSAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oc2l6ZW9mKHJlc3VsdCksIHNpemVvZihyZXN1
bHQpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZGVjb2RlVmFsdWVGcm9tQnVmZmVy
KHJlc3VsdCwgbV9idWZmZXJQb3MpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIERlY29k
ZXI6OmRlY29kZSh1aW50MzJfdCYgcmVzdWx0KQotewotICAgIGlmICghYWxpZ25CdWZmZXJQb3Np
dGlvbihzaXplb2YocmVzdWx0KSwgc2l6ZW9mKHJlc3VsdCkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBkZWNvZGVWYWx1ZUZyb21CdWZmZXIocmVzdWx0LCBtX2J1ZmZlclBvcyk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQ2NF90JiByZXN1
bHQpCi17Ci0gICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKHNpemVvZihyZXN1bHQpLCBzaXpl
b2YocmVzdWx0KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBkZWNvZGVWYWx1
ZUZyb21CdWZmZXIocmVzdWx0LCBtX2J1ZmZlclBvcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGludDE2X3QmIHJlc3VsdCkKLXsKLSAgICBpZiAoIWFsaWdu
QnVmZmVyUG9zaXRpb24oc2l6ZW9mKHJlc3VsdCksIHNpemVvZihyZXN1bHQpKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgZGVjb2RlVmFsdWVGcm9tQnVmZmVyKHJlc3VsdCwgbV9idWZm
ZXJQb3MpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIERlY29kZXI6OmRlY29kZShpbnQz
Ml90JiByZXN1bHQpCi17Ci0gICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKHNpemVvZihyZXN1
bHQpLCBzaXplb2YocmVzdWx0KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBk
ZWNvZGVWYWx1ZUZyb21CdWZmZXIocmVzdWx0LCBtX2J1ZmZlclBvcyk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGludDY0X3QmIHJlc3VsdCkKLXsKLSAgICBp
ZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oc2l6ZW9mKHJlc3VsdCksIHNpemVvZihyZXN1bHQpKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZGVjb2RlVmFsdWVGcm9tQnVmZmVyKHJlc3Vs
dCwgbV9idWZmZXJQb3MpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIERlY29kZXI6OmRl
Y29kZShmbG9hdCYgcmVzdWx0KQotewotICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihzaXpl
b2YocmVzdWx0KSwgc2l6ZW9mKHJlc3VsdCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBkZWNvZGVWYWx1ZUZyb21CdWZmZXIocmVzdWx0LCBtX2J1ZmZlclBvcyk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGRvdWJsZSYgcmVzdWx0KQotewotICAg
IGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihzaXplb2YocmVzdWx0KSwgc2l6ZW9mKHJlc3VsdCkp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgZGVjb2RlVmFsdWVGcm9tQnVmZmVy
KHJlc3VsdCwgbV9idWZmZXJQb3MpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIERlY29k
ZXI6OnJlbW92ZUF0dGFjaG1lbnQoQXR0YWNobWVudCYgYXR0YWNobWVudCkKIHsKICAgICBpZiAo
bV9hdHRhY2htZW50cy5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9EZWNvZGVyLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgK
aW5kZXggMTM4YTlkZTNjNjE0Y2E2MGMwZDAwZjg2YWQ5ZDM4NGY4NGQ3ZjkwMi4uODllY2E5NjMz
MGE5YWE0OGY0ZGMxMDVlNmNlODRlMDYyN2JhYzYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0RlY29kZXIuaApAQCAtNzUsMzQgKzc1LDI4IEBAIHB1YmxpYzoKICAgICBXQVJOX1VOVVNFRF9S
RVRVUk4gYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJQb3MgIT0gbnVsbHB0
cjsgfQogICAgIHZvaWQgbWFya0ludmFsaWQoKSB7IG1fYnVmZmVyUG9zID0gbnVsbHB0cjsgfQog
Ci0gICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4
X3QqLCBzaXplX3QsIHVuc2lnbmVkIGFsaWdubWVudCk7CisgICAgV0FSTl9VTlVTRURfUkVUVVJO
IGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCwgc2l6ZV90
IGFsaWdubWVudCk7CiAKICAgICAvLyBUaGUgZGF0YSBpbiB0aGUgZGF0YSByZWZlcmVuY2UgaGVy
ZSB3aWxsIG9ubHkgYmUgdmFsaWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgQXJndW1lbnREZWNv
ZGVyIG9iamVjdC4KICAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVWYXJpYWJsZUxl
bmd0aEJ5dGVBcnJheShEYXRhUmVmZXJlbmNlJik7CiAKLSAgICBXQVJOX1VOVVNFRF9SRVRVUk4g
Ym9vbCBkZWNvZGUoYm9vbCYpOwotICAgIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8Ym9v
bD4mKTsKLSAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUodWludDhfdCYpOwotICAg
IERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8dWludDhfdD4mKTsKLSAgICBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGUodWludDE2X3QmKTsKLSAgICBEZWNvZGVyJiBvcGVyYXRvcj4+
KE9wdGlvbmFsPHVpbnQxNl90PiYpOwotICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29k
ZSh1aW50MzJfdCYpOwotICAgIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8dWludDMyX3Q+
Jik7Ci0gICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKHVpbnQ2NF90Jik7Ci0gICAg
RGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDx1aW50NjRfdD4mKTsKLSAgICBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGUoaW50MTZfdCYpOwotICAgIERlY29kZXImIG9wZXJhdG9yPj4o
T3B0aW9uYWw8aW50MTZfdD4mKTsKLSAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUo
aW50MzJfdCYpOwotICAgIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8aW50MzJfdD4mKTsK
LSAgICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoaW50NjRfdCYpOwotICAgIERlY29k
ZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8aW50NjRfdD4mKTsKLSAgICBXQVJOX1VOVVNFRF9SRVRV
Uk4gYm9vbCBkZWNvZGUoZmxvYXQmKTsKLSAgICBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFs
PGZsb2F0PiYpOwotICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShkb3VibGUmKTsK
LSAgICBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlvbmFsPGRvdWJsZT4mKTsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2VudW08
RT46OnZhbHVlPj4gV0FSTl9VTlVTRURfUkVUVVJOCi0gICAgYm9vbCBkZWNvZGUoRSYgZSkKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYXJpdGhtZXRp
YzxUPjo6dmFsdWU+KiA9IG51bGxwdHI+CisgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVj
b2RlKFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZpeGVkTGVuZ3RoRGF0
YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YoVCksIGFsaWdub2Yo
VCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8
c3RkOjppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KKyAgICBEZWNvZGVyJiBv
cGVyYXRvcj4+KE9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKKyAgICB7CisgICAgICAgIFQgcmVzdWx0
OworICAgICAgICBpZiAoZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCo+KCZyZXN1bHQpLCBzaXplb2YoVCksIGFsaWdub2YoVCkpKQorICAgICAgICAgICAgb3B0
aW9uYWwgPSByZXN1bHQ7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFLCBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZW51bTxFPjo6dmFsdWU+
KiA9IG51bGxwdHI+CisgICAgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKEUmIGVudW1W
YWx1ZSkKICAgICB7CiAgICAgICAgIHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPEU+Ojp0
eXBlIHZhbHVlOwogICAgICAgICBpZiAoIWRlY29kZSh2YWx1ZSkpCkBAIC0xMTAsMTEgKzEwNCwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghV1RGOjppc1ZhbGlkRW51bTxFPih2YWx1ZSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgZSA9IHN0YXRpY19jYXN0PEU+KHZh
bHVlKTsKKyAgICAgICAgZW51bVZhbHVlID0gc3RhdGljX2Nhc3Q8RT4odmFsdWUpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFLCB0eXBlbmFt
ZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEU+Ojp2YWx1ZT4+CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRSwgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2VudW08RT46OnZhbHVlPiog
PSBudWxscHRyPgogICAgIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8RT4mIG9wdGlvbmFs
KQogICAgIHsKICAgICAgICAgT3B0aW9uYWw8dHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8
RT46OnR5cGU+IHZhbHVlOwpAQCAtMTI0LDE0ICsxMTgsMTQgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gV0FSTl9VTlVT
RURfUkVUVVJOCi0gICAgYm9vbCBkZWNvZGVFbnVtKFQmIHJlc3VsdCkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFPgorICAgIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZUVudW0oRSYgcmVz
dWx0KQogICAgIHsKLSAgICAgICAgdHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8VD46OnR5
cGUgdmFsdWU7CisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBhZnRlciBtaWdyYXRpbmcg
YWxsIHVzZXMgb2YgdGhpcyBmdW5jdGlvbiB0byBkZWNvZGUoKSBvciBvcGVyYXRvcj4+KCkgd2l0
aCBXVEY6OmlzVmFsaWRFbnVtIGNoZWNrLgorICAgICAgICB0eXBlbmFtZSBzdGQ6OnVuZGVybHlp
bmdfdHlwZTxFPjo6dHlwZSB2YWx1ZTsKICAgICAgICAgaWYgKCFkZWNvZGUodmFsdWUpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PFQ+
KHZhbHVlKTsKKyAgICAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8RT4odmFsdWUpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0NiwxNCArMTQwLDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oYWxpZ25vZihUKSwgbnVt
RWxlbWVudHMgKiBzaXplb2YoVCkpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfZW51bTxUPjo6dmFsdWUgJiYgVXNlc0xlZ2FjeURl
Y29kZXI8VD46OnZhbHVlPiogPSBudWxscHRyPiBXQVJOX1VOVVNFRF9SRVRVUk4KLSAgICBib29s
IGRlY29kZShUJiB0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8
IXN0ZDo6aXNfZW51bTxUPjo6dmFsdWUgJiYgIXN0ZDo6aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUg
JiYgVXNlc0xlZ2FjeURlY29kZXI8VD46OnZhbHVlPiogPSBudWxscHRyPgorICAgIFdBUk5fVU5V
U0VEX1JFVFVSTiBib29sIGRlY29kZShUJiB0KQogICAgIHsKICAgICAgICAgcmV0dXJuIEFyZ3Vt
ZW50Q29kZXI8VD46OmRlY29kZSgqdGhpcywgdCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZSAmJiAhVXNl
c0xlZ2FjeURlY29kZXI8VD46OnZhbHVlPiogPSBudWxscHRyPiBXQVJOX1VOVVNFRF9SRVRVUk4K
LSAgICBib29sIGRlY29kZShUJiB0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5h
YmxlX2lmX3Q8IXN0ZDo6aXNfZW51bTxUPjo6dmFsdWUgJiYgIXN0ZDo6aXNfYXJpdGhtZXRpYzxU
Pjo6dmFsdWUgJiYgIVVzZXNMZWdhY3lEZWNvZGVyPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KKyAg
ICBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoVCYgdCkKICAgICB7CiAgICAgICAgIE9w
dGlvbmFsPFQ+IG9wdGlvbmFsOwogICAgICAgICAqdGhpcyA+PiBvcHRpb25hbDsKQEAgLTE3MCw3
ICsxNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAgICAgCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19lbnVtPFQ+
Ojp2YWx1ZSAmJiAhVXNlc01vZGVybkRlY29kZXI8VD46OnZhbHVlPiogPSBudWxscHRyPgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfZW51bTxUPjo6
dmFsdWUgJiYgIXN0ZDo6aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUgJiYgIVVzZXNNb2Rlcm5EZWNv
ZGVyPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KICAgICBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlv
bmFsPFQ+JiBvcHRpb25hbCkKICAgICB7CiAgICAgICAgIFQgdDsKQEAgLTE4Nyw5ICsxODEsOCBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNJUENEZWNvZGVyID0gdHJ1ZTsKIAog
cHJpdmF0ZToKLSAgICBib29sIGFsaWduQnVmZmVyUG9zaXRpb24odW5zaWduZWQgYWxpZ25tZW50
LCBzaXplX3QpOwotICAgIGJvb2wgYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbih1bnNpZ25l
ZCBhbGlnbm1lbnQsIHNpemVfdCkgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4g
RGVjb2RlciYgZ2V0T3B0aW9uYWwoT3B0aW9uYWw8VHlwZT4mKTsKKyAgICBib29sIGFsaWduQnVm
ZmVyUG9zaXRpb24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKKyAgICBib29sIGJ1ZmZlcklz
TGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KSBjb25zdDsKIAog
ICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVy
UG9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAppbmRleCBiNTU0M2RiYTIz
MThhZGI3ODU5NWUwZWY0YzM1Y2ExN2VkMzRjNTk4Li5iZjE1NzAyZmExNWE0MDZkNDE4OGUxMWY1
NTQ3OTRiYjJmNjJkZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9F
bmNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MzgsNyArMTM4LDcgQEAgdm9pZCBFbmNvZGVyOjp3cmFwRm9yVGVzdGluZyhzdGQ6OnVuaXF1ZV9w
dHI8RW5jb2Rlcj4gb3JpZ2luYWwpCiAgICAgICAgIGFkZEF0dGFjaG1lbnQoV1RGTW92ZShhdHRh
Y2htZW50KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc2l6ZV90IHJvdW5kVXBUb0FsaWdubWVudChz
aXplX3QgdmFsdWUsIHVuc2lnbmVkIGFsaWdubWVudCkKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHJv
dW5kVXBUb0FsaWdubWVudChzaXplX3QgdmFsdWUsIHNpemVfdCBhbGlnbm1lbnQpCiB7CiAgICAg
cmV0dXJuICgodmFsdWUgKyBhbGlnbm1lbnQgLSAxKSAvIGFsaWdubWVudCkgKiBhbGlnbm1lbnQ7
CiB9CkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBFbmNvZGVyOjplbmNvZGVIZWFkZXIoKQogICAg
ICp0aGlzIDw8IG1fZGVzdGluYXRpb25JRDsKIH0KIAotdWludDhfdCogRW5jb2Rlcjo6Z3Jvdyh1
bnNpZ25lZCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQordWludDhfdCogRW5jb2Rlcjo6Z3Jvdyhz
aXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBzaXplX3QgYWxpZ25lZFNpemUg
PSByb3VuZFVwVG9BbGlnbm1lbnQobV9idWZmZXJTaXplLCBhbGlnbm1lbnQpOwogICAgIHJlc2Vy
dmUoYWxpZ25lZFNpemUgKyBzaXplKTsKQEAgLTE4NSw3ICsxODUsNyBAQCB1aW50OF90KiBFbmNv
ZGVyOjpncm93KHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiAgICAgcmV0dXJuIG1f
YnVmZmVyICsgYWxpZ25lZFNpemU7CiB9CiAKLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1l
bnQpCit2b2lkIEVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkKIHsKICAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YSkgJSBhbGlnbm1lbnQpKTsKIApAQCAtMTk5LDcy
ICsxOTksNiBAQCB2b2lkIEVuY29kZXI6OmVuY29kZVZhcmlhYmxlTGVuZ3RoQnl0ZUFycmF5KGNv
bnN0IERhdGFSZWZlcmVuY2UmIGRhdGFSZWZlcmVuY2UpCiAgICAgZW5jb2RlRml4ZWRMZW5ndGhE
YXRhKGRhdGFSZWZlcmVuY2UuZGF0YSgpLCBkYXRhUmVmZXJlbmNlLnNpemUoKSwgMSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci1zdGF0aWMgdm9pZCBjb3B5VmFsdWVUb0J1ZmZlcihU
eXBlIHZhbHVlLCB1aW50OF90KiBidWZmZXJQb3NpdGlvbikKLXsKLSAgICBtZW1jcHkoYnVmZmVy
UG9zaXRpb24sICZ2YWx1ZSwgc2l6ZW9mKFR5cGUpKTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNv
ZGUoYm9vbCBuKQotewotICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3coc2l6ZW9mKG4pLCBzaXpl
b2YobikpOwotICAgIGNvcHlWYWx1ZVRvQnVmZmVyKG4sIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgRW5j
b2Rlcjo6ZW5jb2RlKHVpbnQ4X3QgbikKLXsKLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNp
emVvZihuKSwgc2l6ZW9mKG4pKTsKLSAgICBjb3B5VmFsdWVUb0J1ZmZlcihuLCBidWZmZXIpOwot
fQotCi12b2lkIEVuY29kZXI6OmVuY29kZSh1aW50MTZfdCBuKQotewotICAgIHVpbnQ4X3QqIGJ1
ZmZlciA9IGdyb3coc2l6ZW9mKG4pLCBzaXplb2YobikpOwotICAgIGNvcHlWYWx1ZVRvQnVmZmVy
KG4sIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKHVpbnQzMl90IG4pCi17Ci0g
ICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YobiksIHNpemVvZihuKSk7Ci0gICAgY29w
eVZhbHVlVG9CdWZmZXIobiwgYnVmZmVyKTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNvZGUodWlu
dDY0X3QgbikKLXsKLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemVvZihuKSwgc2l6ZW9m
KG4pKTsKLSAgICBjb3B5VmFsdWVUb0J1ZmZlcihuLCBidWZmZXIpOwotfQotCi12b2lkIEVuY29k
ZXI6OmVuY29kZShpbnQxNl90IG4pCi17Ci0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXpl
b2YobiksIHNpemVvZihuKSk7Ci0gICAgY29weVZhbHVlVG9CdWZmZXIobiwgYnVmZmVyKTsKLX0K
LQotdm9pZCBFbmNvZGVyOjplbmNvZGUoaW50MzJfdCBuKQotewotICAgIHVpbnQ4X3QqIGJ1ZmZl
ciA9IGdyb3coc2l6ZW9mKG4pLCBzaXplb2YobikpOwotICAgIGNvcHlWYWx1ZVRvQnVmZmVyKG4s
IGJ1ZmZlcik7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGludDY0X3QgbikKLXsKLSAgICB1
aW50OF90KiBidWZmZXIgPSBncm93KHNpemVvZihuKSwgc2l6ZW9mKG4pKTsKLSAgICBjb3B5VmFs
dWVUb0J1ZmZlcihuLCBidWZmZXIpOwotfQotCi12b2lkIEVuY29kZXI6OmVuY29kZShmbG9hdCBu
KQotewotICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3coc2l6ZW9mKG4pLCBzaXplb2YobikpOwot
ICAgIGNvcHlWYWx1ZVRvQnVmZmVyKG4sIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5j
b2RlKGRvdWJsZSBuKQotewotICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3coc2l6ZW9mKG4pLCBz
aXplb2YobikpOwotICAgIGNvcHlWYWx1ZVRvQnVmZmVyKG4sIGJ1ZmZlcik7Ci19Ci0KIHZvaWQg
RW5jb2Rlcjo6YWRkQXR0YWNobWVudChBdHRhY2htZW50JiYgYXR0YWNobWVudCkKIHsKICAgICBt
X2F0dGFjaG1lbnRzLmFwcGVuZChXVEZNb3ZlKGF0dGFjaG1lbnQpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0VuY29kZXIuaAppbmRleCBjZmRlNTk1MTk4ZTM4ZmEwODVlOTUyODc5YTg5MDMzMDkx
NDAwNGVhLi5kZGE4MDA4ZjYxMGE2YzJlMmY3NDQ5OTRjODY3ZTIwZmQ5Y2NjMmE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKKysrIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDI0ICs1OCwyNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHdyYXBGb3JUZXN0aW5nKHN0ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPik7CiAKLSAgICB2
b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90LCB1bnNpZ25l
ZCBhbGlnbm1lbnQpOworICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCwgc2l6ZV90IGFsaWdubWVudCk7CiAgICAgdm9pZCBlbmNvZGVWYXJp
YWJsZUxlbmd0aEJ5dGVBcnJheShjb25zdCBEYXRhUmVmZXJlbmNlJik7CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB2b2lkIGVuY29kZUVudW0oVCB0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEU+CisgICAgdm9pZCBlbmNvZGVFbnVtKEUgZW51bVZhbHVlKQogICAgIHsKLSAgICAgICAgZW5j
b2RlKHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPFQ+Ojp0eXBlPih0
KSk7CisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBhZnRlciBtaWdyYXRpbmcgYWxsIHVz
ZXMgb2YgdGhpcyBmdW5jdGlvbiB0byBlbmNvZGUoKSBvciBvcGVyYXRvcjw8KCkgd2l0aCBXVEY6
OmlzVmFsaWRFbnVtIGNoZWNrLgorICAgICAgICBlbmNvZGUoc3RhdGljX2Nhc3Q8dHlwZW5hbWUg
c3RkOjp1bmRlcmx5aW5nX3R5cGU8RT46OnR5cGU+KGVudW1WYWx1ZSkpOwogICAgIH0KIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfZW51bTx0eXBl
bmFtZSBzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PFQ+Pj46OnZh
bHVlPiogPSBudWxscHRyPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lm
X3Q8IXN0ZDo6aXNfZW51bTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdF90PHN0ZDo6cmVtb3Zl
X3JlZmVyZW5jZV90PFQ+Pj46OnZhbHVlICYmICFzdGQ6OmlzX2FyaXRobWV0aWM8dHlwZW5hbWUg
c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxUPj4+Ojp2YWx1ZT4q
ID0gbnVsbHB0cj4KICAgICB2b2lkIGVuY29kZShUJiYgdCkKICAgICB7CiAgICAgICAgIEFyZ3Vt
ZW50Q29kZXI8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8dHlwZW5hbWUgc3RkOjpyZW1vdmVf
cmVmZXJlbmNlPFQ+Ojp0eXBlPjo6dHlwZT46OmVuY29kZSgqdGhpcywgc3RkOjpmb3J3YXJkPFQ+
KHQpKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+KiA9IG51bGxwdHI+Ci0gICAgRW5jb2RlciYgb3BlcmF0
b3I8PChUJiYgdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFLCBzdGQ6OmVuYWJsZV9pZl90PHN0
ZDo6aXNfZW51bTxFPjo6dmFsdWU+KiA9IG51bGxwdHI+CisgICAgRW5jb2RlciYgb3BlcmF0b3I8
PChFJiYgZW51bVZhbHVlKQogICAgIHsKLSAgICAgICAgZW5jb2RlKHN0YXRpY19jYXN0PHR5cGVu
YW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPFQ+Ojp0eXBlPih0KSk7CisgICAgICAgIEFTU0VSVChX
VEY6OmlzVmFsaWRFbnVtPEU+KHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190
eXBlPEU+Ojp0eXBlPihlbnVtVmFsdWUpKSk7CisgICAgICAgIGVuY29kZShzdGF0aWNfY2FzdDx0
eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFPjo6dHlwZT4oZW51bVZhbHVlKSk7CiAgICAg
ICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKQEAgLTg2LDYgKzg5LDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0
ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZT4qID0gbnVsbHB0cj4K
KyAgICB2b2lkIGVuY29kZShUIHZhbHVlKQorICAgIHsKKyAgICAgICAgZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZihU
KSwgYWxpZ25vZihUKSk7CisgICAgfQorCiAgICAgdWludDhfdCogYnVmZmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9idWZmZXI7IH0KICAgICBzaXplX3QgYnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYnVmZmVyU2l6ZTsgfQogCkBAIC05NCwyOCArMTAzLDE2IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBjb25zdCBib29sIGlzSVBDRW5jb2RlciA9IHRydWU7CiAKLSAgICB2b2lkIGVuY29kZSh1
aW50NjRfdCk7Ci0KIHByaXZhdGU6CiAgICAgdm9pZCByZXNlcnZlKHNpemVfdCk7CiAKLSAgICB1
aW50OF90KiBncm93KHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90KTsKKyAgICB1aW50OF90KiBn
cm93KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAKLSAgICB2b2lkIGVuY29kZShib29sKTsK
LSAgICB2b2lkIGVuY29kZSh1aW50OF90KTsKLSAgICB2b2lkIGVuY29kZSh1aW50MTZfdCk7Ci0g
ICAgdm9pZCBlbmNvZGUodWludDMyX3QpOwotICAgIHZvaWQgZW5jb2RlKGludDE2X3QpOwotICAg
IHZvaWQgZW5jb2RlKGludDMyX3QpOwotICAgIHZvaWQgZW5jb2RlKGludDY0X3QpOwotICAgIHZv
aWQgZW5jb2RlKGZsb2F0KTsKLSAgICB2b2lkIGVuY29kZShkb3VibGUpOwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgRT4KLSAgICBhdXRvIGVuY29kZShFIHZhbHVlKSAtPiBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfZW51bTxFPjo6dmFsdWU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRSwgc3Rk
OjplbmFibGVfaWZfdDxzdGQ6OmlzX2VudW08RT46OnZhbHVlPiogPSBudWxscHRyPgorICAgIHZv
aWQgZW5jb2RlKEUgZW51bVZhbHVlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKFdURjo6aXNWYWxp
ZEVudW08RT4oc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8RT46OnR5
cGU+KHZhbHVlKSkpOwotICAgICAgICBlbmNvZGUoc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RkOjp1
bmRlcmx5aW5nX3R5cGU8RT46OnR5cGU+KHZhbHVlKSk7CisgICAgICAgIEFTU0VSVChXVEY6Omlz
VmFsaWRFbnVtPEU+KHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPEU+
Ojp0eXBlPihlbnVtVmFsdWUpKSk7CisgICAgICAgIGVuY29kZShzdGF0aWNfY2FzdDx0eXBlbmFt
ZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFPjo6dHlwZT4oZW51bVZhbHVlKSk7CiAgICAgfQogCiAg
ICAgdm9pZCBlbmNvZGVIZWFkZXIoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>