<?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>152593</bug_id>
          
          <creation_ts>2015-12-29 21:23:49 -0800</creation_ts>
          <short_desc>Modern IDB: Only fire blocked events after all open connections have handled their versionchange events</short_desc>
          <delta_ts>2022-08-01 18:59:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>Other</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149117</blocked>
    
    <blocked>150882</blocked>
    
    <blocked>152600</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>aestes</cc>
    
    <cc>alecflett</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>jochen</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1151585</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-12-29 21:23:49 -0800</bug_when>
    <thetext>Modern IDB: Only fire blocked events after all open connections have handled their version change events

Currently, whenever we send all open connections the versionchange event, we immediately fire the blocked event on the request.

That&apos;s not right, as in their versionchange event handlers the connections can close themselves, rendering the request *not* blocked.

This behavior is explicitly denoted in the spec and is covered by existing failing tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151586</commentid>
    <comment_count>1</comment_count>
      <attachid>267998</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-12-29 21:32:44 -0800</bug_when>
    <thetext>Created attachment 267998
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151635</commentid>
    <comment_count>2</comment_count>
      <attachid>267998</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-12-30 15:08:41 -0800</bug_when>
    <thetext>Comment on attachment 267998
Patch v1

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

&gt; Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.cpp:382
&gt; +        serverConnection().didFireVersionChangeEvent(m_databaseConnectionIdentifier, static_cast&lt;IDBVersionChangeEvent&amp;&gt;(event).requestIdentifier());

You should use downcast here instead of static_cast.

&gt; Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.h:92
&gt; +    virtual bool dispatchEvent(Event&amp;) override final;

No need to specify virtual here.

&gt; Source/WebCore/Modules/indexeddb/client/IDBVersionChangeEventImpl.h:51
&gt; +    virtual bool isVersionChangeEvent() const override final { return true; }

Ditto.

&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:350
&gt; +    if (!databaseConnection)
&gt; +        return;
&gt; +
&gt; +    databaseConnection-&gt;didFireVersionChangeEvent(requestIdentifier);

It&apos;d be more concise to write:

if (auto databaseConnection = m_databaseConnections.get(databaseConnectionIdentifier))
    databaseConnection-&gt;didFireVersionChangeEvent(requestIdentifier);

&gt; Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp:377
&gt; +    RefPtr&lt;InProcessIDBServer&gt; self(this);
&gt; +    RunLoop::current().dispatch([this, self, databaseConnectionIdentifier, requestIdentifier] {
&gt; +        m_server-&gt;didFireVersionChangeEvent(databaseConnectionIdentifier, requestIdentifier);
&gt; +    });

Could you use self-&gt;m_server so you don&apos;t have to capture this?

&gt; Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h:75
&gt; +    virtual void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier) override final;

No need for virtual here, or for any other function in this file that&apos;s already marked override.

&gt; Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h:94
&gt; -    virtual void fireVersionChangeEvent(IDBServer::UniqueIDBDatabaseConnection&amp;, uint64_t requestedVersion) override final;
&gt; +    virtual void fireVersionChangeEvent(IDBServer::UniqueIDBDatabaseConnection&amp;, const IDBResourceIdentifier&amp; requestIdentifier, uint64_t requestedVersion) override final;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151661</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-12-30 20:48:25 -0800</bug_when>
    <thetext>I&apos;ll do *some* of the &quot;virtual not needed&quot;s, but not all (where the rest of the file is already littered with them.

(In reply to comment #2)
&gt; Comment on attachment 267998 [details]
&gt; Patch v1
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp:377
&gt; &gt; +    RefPtr&lt;InProcessIDBServer&gt; self(this);
&gt; &gt; +    RunLoop::current().dispatch([this, self, databaseConnectionIdentifier, requestIdentifier] {
&gt; &gt; +        m_server-&gt;didFireVersionChangeEvent(databaseConnectionIdentifier, requestIdentifier);
&gt; &gt; +    });
&gt; 
&gt; Could you use self-&gt;m_server so you don&apos;t have to capture this?

Nope, need to capture this to have access to private variables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151664</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-12-30 20:56:36 -0800</bug_when>
    <thetext>Forgot to reply to this one:

(In reply to comment #2)
&gt; Comment on attachment 267998 [details]
&gt; Patch v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=267998&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.cpp:382
&gt; &gt; +        serverConnection().didFireVersionChangeEvent(m_databaseConnectionIdentifier, static_cast&lt;IDBVersionChangeEvent&amp;&gt;(event).requestIdentifier());
&gt; 
&gt; You should use downcast here instead of static_cast.

It&apos;s an upcast, not a downcast. =/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151670</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-12-30 21:44:28 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/194452</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151677</commentid>
    <comment_count>6</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-12-30 22:28:30 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Forgot to reply to this one:
&gt; 
&gt; (In reply to comment #2)
&gt; &gt; Comment on attachment 267998 [details]
&gt; &gt; Patch v1
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=267998&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.cpp:382
&gt; &gt; &gt; +        serverConnection().didFireVersionChangeEvent(m_databaseConnectionIdentifier, static_cast&lt;IDBVersionChangeEvent&amp;&gt;(event).requestIdentifier());
&gt; &gt; 
&gt; &gt; You should use downcast here instead of static_cast.
&gt; 
&gt; It&apos;s an upcast, not a downcast. =/

IDBVersionChangeEvent is a subclass of Event, right? This is what downcast is for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151679</commentid>
    <comment_count>7</comment_count>
      <attachid>267998</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-12-30 22:34:54 -0800</bug_when>
    <thetext>Comment on attachment 267998
Patch v1

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

&gt;&gt;&gt;&gt; Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.cpp:382
&gt;&gt;&gt;&gt; +        serverConnection().didFireVersionChangeEvent(m_databaseConnectionIdentifier, static_cast&lt;IDBVersionChangeEvent&amp;&gt;(event).requestIdentifier());
&gt;&gt;&gt; 
&gt;&gt;&gt; You should use downcast here instead of static_cast.
&gt;&gt; 
&gt;&gt; It&apos;s an upcast, not a downcast. =/
&gt; 
&gt; IDBVersionChangeEvent is a subclass of Event, right? This is what downcast is for.

Arguably this isn&apos;t necessary since you&apos;re already calling isVersionChangeEvent(), but it wouldn&apos;t hurt to have downcast&apos;s assertions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151725</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-12-31 10:08:38 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; Forgot to reply to this one:
&gt; &gt; 
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; Comment on attachment 267998 [details]
&gt; &gt; &gt; Patch v1
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=267998&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.cpp:382
&gt; &gt; &gt; &gt; +        serverConnection().didFireVersionChangeEvent(m_databaseConnectionIdentifier, static_cast&lt;IDBVersionChangeEvent&amp;&gt;(event).requestIdentifier());
&gt; &gt; &gt; 
&gt; &gt; &gt; You should use downcast here instead of static_cast.
&gt; &gt; 
&gt; &gt; It&apos;s an upcast, not a downcast. =/
&gt; 
&gt; IDBVersionChangeEvent is a subclass of Event, right? This is what downcast
&gt; is for.

It&apos;s not a direct subclass, but it is a descendent class.

I guess I misunderstand the direction.

Regardless, I changed it to downcast&lt;&gt; and it wouldn&apos;t compile. Maybe I just don&apos;t understand how downcast&lt;&gt; is supposed to be used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151726</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-12-31 10:10:22 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; Forgot to reply to this one:
&gt; &gt; &gt; 
&gt; &gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; &gt; Comment on attachment 267998 [details]
&gt; &gt; &gt; &gt; Patch v1
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; View in context:
&gt; &gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=267998&amp;action=review
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.cpp:382
&gt; &gt; &gt; &gt; &gt; +        serverConnection().didFireVersionChangeEvent(m_databaseConnectionIdentifier, static_cast&lt;IDBVersionChangeEvent&amp;&gt;(event).requestIdentifier());
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; You should use downcast here instead of static_cast.
&gt; &gt; &gt; 
&gt; &gt; &gt; It&apos;s an upcast, not a downcast. =/
&gt; &gt; 
&gt; &gt; IDBVersionChangeEvent is a subclass of Event, right? This is what downcast
&gt; &gt; is for.
&gt; 
&gt; It&apos;s not a direct subclass, but it is a descendent class.
&gt; 
&gt; I guess I misunderstand the direction.
&gt; 
&gt; Regardless, I changed it to downcast&lt;&gt; and it wouldn&apos;t compile. Maybe I just
&gt; don&apos;t understand how downcast&lt;&gt; is supposed to be used.

The build failure I got was caused by:
        static_assert(std::is_void&lt;ExpectedType&gt;::value, &quot;Missing TypeCastTraits specialization&quot;);
in TypeCasts.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151727</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-12-31 10:10:47 -0800</bug_when>
    <thetext>And yes, the comment above that assert does say exactly how to fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151730</commentid>
    <comment_count>11</comment_count>
      <attachid>268045</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-12-31 10:17:11 -0800</bug_when>
    <thetext>Created attachment 268045
Downcast followup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151757</commentid>
    <comment_count>12</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-12-31 12:10:28 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created attachment 268045 [details]
&gt; Downcast followup

👍</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151760</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-12-31 12:26:35 -0800</bug_when>
    <thetext>Neither CQ nor EWS seem willing to chew on this patch... will land manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151766</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-12-31 13:30:26 -0800</bug_when>
    <thetext>Followup landed in https://trac.webkit.org/changeset/194468</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1888282</commentid>
    <comment_count>15</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2022-08-01 18:59:18 -0700</bug_when>
    <thetext>*** Bug 71130 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267998</attachid>
            <date>2015-12-29 21:32:44 -0800</date>
            <delta_ts>2015-12-30 15:08:41 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>39036</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3MzVhMjM2Li45ZGY0YzcyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMTIt
MjkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybiBJ
REI6IE9ubHkgZmlyZSBibG9ja2VkIGV2ZW50cyBhZnRlciBhbGwgb3BlbiBjb25uZWN0aW9ucyBo
YXZlIGhhbmRsZWQgdGhlaXIgdmVyc2lvbmNoYW5nZSBldmVudHMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI1OTMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIFVuc2tpcCB0d28gdGltZW91dCB0ZXN0
cyB0aGF0IG5vdyBwYXNzLgorICAgICAgICAtIFJlY2xhc3NpZnkgYSB0ZXh0LWZhaWx1cmUgdGVz
dCB0byBiZSBza2lwcGVkIGZvciBuZXcgcmVhc29ucy4KKyAgICAgICAgCisgICAgICAgICogcGxh
dGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDE1LTEyLTI3ICBaYWxhbiBCdWp0
YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgU2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQg
ZmFpbHVyZSBpbiBXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpjbGVhckxheW91dFJvb3RJZk5lZWRl
ZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRp
b25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCmluZGV4
IDQ2OWFiYTcuLjBhNGU2MjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13
azEvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rl
c3RFeHBlY3RhdGlvbnMKQEAgLTkxLDEzICs5MSwxMCBAQCB3ZWJraXQub3JnL2IvMTUyMjY0IHN0
b3JhZ2UvaW5kZXhlZGRiL2RlbGV0ZWQtb2JqZWN0cy5odG1sIFsgRmFpbHVyZSBDcmFzaCBdCiAj
IElEQiB0ZXN0cyB0aGF0IHRpbWVvdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIHN0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNl
LXF1b3RhLmh0bWwgWyBTa2lwIF0KIHN0b3JhZ2UvaW5kZXhlZGRiL2RvbnQtd2VkZ2UuaHRtbCBb
IFNraXAgXQotc3RvcmFnZS9pbmRleGVkZGIvaW50dmVyc2lvbi1wZW5kaW5nLXZlcnNpb24tY2hh
bmdlcy1hc2NlbmRpbmcuaHRtbCBbIFNraXAgXQogc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rp
b24tc3RhcnZhdGlvbi5odG1sIFsgU2tpcCBdCi1zdG9yYWdlL2luZGV4ZWRkYi91bmJsb2NrZWQt
dmVyc2lvbi1jaGFuZ2VzLmh0bWwgWyBTa2lwIF0KIAogIyBJREIgdGVzdHMgd2l0aCB0ZXh0IGZh
aWx1cmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAogc3RvcmFnZS9pbmRleGVkZGIvZGF0YWJhc2UtZGVsZXRlcGVuZGluZy1mbGFn
Lmh0bWwgWyBGYWlsdXJlIF0KLXN0b3JhZ2UvaW5kZXhlZGRiL2RlbGV0ZS1jbG9zZWQtZGF0YWJh
c2Utb2JqZWN0Lmh0bWwgWyBGYWlsdXJlIF0KIHN0b3JhZ2UvaW5kZXhlZGRiL2ludHZlcnNpb24t
Z2F0ZWQtb24tZGVsZXRlLmh0bWwgWyBGYWlsdXJlIF0KIHN0b3JhZ2UvaW5kZXhlZGRiL29kZC1z
dHJpbmdzLmh0bWwgWyBGYWlsdXJlIF0KIHN0b3JhZ2UvaW5kZXhlZGRiL29wZW4tZGItcHJpdmF0
ZS1icm93c2luZy5odG1sIFsgRmFpbHVyZSBdCkBAIC0xMDYsNiArMTAzLDcgQEAgc3RvcmFnZS9p
bmRleGVkZGIvc2V0dmVyc2lvbi1ibG9ja2VkLWJ5LXZlcnNpb25jaGFuZ2UtY2xvc2UuaHRtbCBb
IEZhaWx1cmUgXQogc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tc2NvcGUtc2VxdWVuY2lu
Zy5odG1sIFsgRmFpbHVyZSBdCiAKICMgUmVsaWVzIG9uIGludGVybmFscy5vYnNlcnZlR0MKK3N0
b3JhZ2UvaW5kZXhlZGRiL2RlbGV0ZS1jbG9zZWQtZGF0YWJhc2Utb2JqZWN0Lmh0bWwgWyBTa2lw
IF0KIHN0b3JhZ2UvaW5kZXhlZGRiL2N1cnNvci1sZWFrLmh0bWwgWyBGYWlsdXJlIF0KIHN0b3Jh
Z2UvaW5kZXhlZGRiL2N1cnNvci1yZXF1ZXN0LWN5Y2xlLmh0bWwgWyBGYWlsdXJlIF0KIHN0b3Jh
Z2UvaW5kZXhlZGRiL3JlcXVlc3QtbGVhay5odG1sIFsgRmFpbHVyZSBdCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDEwYTJhMC4uYTJiNDU0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE1LTEyLTI5
ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm4gSURC
OiBPbmx5IGZpcmUgYmxvY2tlZCBldmVudHMgYWZ0ZXIgYWxsIG9wZW4gY29ubmVjdGlvbnMgaGF2
ZSBoYW5kbGVkIHRoZWlyIHZlcnNpb25jaGFuZ2UgZXZlbnRzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNTkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChBdCBsZWFzdCB0d28g
cHJldmlvdXNseSB0aW1pbmctb3V0IHRlc3RzIG5vdyBwYXNzLCBvdGhlcnMgYXJlIG5vdyBjbG9z
ZXIgdG8gcGFzc2luZykuCisKKyAgICAgICAgQmVmb3JlIHRoaXMgcGF0Y2gsIHdoZW5ldmVyIHdl
IHNlbnQgYWxsIG9wZW4gY29ubmVjdGlvbnMgdGhlIHZlcnNpb25jaGFuZ2UgZXZlbnQsIHdlIHdv
dWxkIGltbWVkaWF0ZWx5IAorICAgICAgICBmaXJlIHRoZSBibG9ja2VkIGV2ZW50IG9uIHRoZSBy
ZXF1ZXN0LgorCisgICAgICAgIFRoYXQncyBub3QgcmlnaHQsIGFzIHRob3NlIGV2ZW50IGhhbmRs
ZXJzIGNhbiBjbG9zZSB0aGUgY29ubmVjdGlvbnMsIHJlbmRlcmluZyB0aGUgcmVxdWVzdCB1bmJs
b2NrZWQuCisKKyAgICAgICAgU28gdGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBiZWhhdmlvciBv
ZiB3YWl0aW5nIGZvciBlYWNoIG9wZW4gY29ubmVjdGlvbiB0byBlaXRoZXIgY2xvc2Ugb3IgcG9z
aXRpdmVseQorICAgICAgICBtZXNzYWdlIGJhY2sgIkkgZmluaXNoZWQgZmlyaW5nIG15IHZlcnNp
b25jaGFuZ2UgZXZlbnQgaGFuZGxlciIKKyAgICAgICAgCisgICAgICAgIFRoaXMgYmVoYXZpb3Ig
aXMgZXhwbGljaXRseSBkZW5vdGVkIGluIHRoZSBzcGVjIGFuZCBpcyBjb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5l
Y3Rpb25Ub1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkNvbm5l
Y3Rpb25Ub1NlcnZlcjo6ZmlyZVZlcnNpb25DaGFuZ2VFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6ZGlkRmlyZVZlcnNpb25DaGFuZ2VF
dmVudCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25U
b1NlcnZlci5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0
aW9uVG9TZXJ2ZXJEZWxlZ2F0ZS5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQkRhdGFiYXNlSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklE
QkRhdGFiYXNlOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkNsaWVudDo6SURCRGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuaDoKKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkNsaWVudDo6SURCVmVyc2lvbkNoYW5nZUV2ZW50OjpJREJWZXJzaW9uQ2hh
bmdlRXZlbnQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJWZXJzaW9u
Q2hhbmdlRXZlbnRJbXBsLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCQ29ubmVjdGlvblRvQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
SURCQ29ubmVjdGlvblRvQ2xpZW50OjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50Lmg6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVn
YXRlLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpkaWRGaXJlVmVyc2lv
bkNoYW5nZUV2ZW50KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2Vy
dmVyLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU2VydmVyT3BlbkRC
UmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNlcnZlck9wZW5EQlJl
cXVlc3Q6Om5vdGlmeVJlcXVlc3RCbG9ja2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6U2VydmVyT3BlbkRCUmVxdWVzdDo6bm90aWZpZWRDb25uZWN0aW9uc09mVmVyc2lvbkNoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNlcnZlck9wZW5EQlJlcXVlc3Q6OmNv
bm5lY3Rpb25DbG9zZWRPckZpcmVkVmVyc2lvbkNoYW5nZUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6U2VydmVyT3BlbkRCUmVxdWVzdDo6bm90aWZ5RGVsZXRlUmVxdWVzdEJs
b2NrZWQpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TZXJ2
ZXJPcGVuREJSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNlcnZlck9w
ZW5EQlJlcXVlc3Q6Omhhc05vdGlmaWVkQmxvY2tlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNlcnZlck9wZW5EQlJlcXVlc3Q6Omhhc0Nvbm5lY3Rpb25zUGVuZGluZ1ZlcnNpb25D
aGFuZ2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNlcnZlck9wZW5EQlJl
cXVlc3Q6Omhhc05vdGlmaWVkQ29ubmVjdGlvbnNPZlZlcnNpb25DaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpTZXJ2ZXJPcGVuREJSZXF1ZXN0OjpoYXNOb3RpZmllZERlbGV0
ZVJlcXVlc3RCbG9ja2VkKTogRGVsZXRlZC4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJl
bnREZWxldGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6bWF5YmVOb3RpZnlDb25uZWN0aW9uc09mVmVyc2lvbkNoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpub3RpZnlDdXJyZW50
UmVxdWVzdENvbm5lY3Rpb25DbG9zZWRPckZpcmVkVmVyc2lvbkNoYW5nZUV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZEZpcmVWZXJzaW9u
Q2hhbmdlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Y29ubmVjdGlvbkNsb3NlZEZyb21DbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6bm90aWZ5Q29ubmVjdGlvbnNPZlZlcnNpb25DaGFu
Z2VGb3JVcGdyYWRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6Om5vdGlmeUNvbm5lY3Rpb25zT2ZWZXJzaW9uQ2hhbmdlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
aDoKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkNsb3NlZEZyb21DbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246
OmRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb24uaDoKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lu
UHJvY2Vzc0lEQlNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2
ZXI6OmZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNz
SURCU2VydmVyOjpkaWRGaXJlVmVyc2lvbkNoYW5nZUV2ZW50KToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmg6CisgICAgICAgIAorICAgICAg
ICAqIGRvbS9FdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnQ6OmlzVmVyc2lvbkNoYW5n
ZUV2ZW50KToKKwogMjAxNS0xMi0yOCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgTW9kZXJuIElEQjogUmVuYW1lIElEQlNlcnZlck9wZXJhdGlvbiB0byBTZXJ2
ZXJPcGVuREJSZXF1ZXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcAppbmRleCBm
ZjFiYTg2Li5jNjAyMmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcApAQCAt
MzE3LDcgKzMxNyw3IEBAIHZvaWQgSURCQ29ubmVjdGlvblRvU2VydmVyOjpkaWRBYm9ydFRyYW5z
YWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhCiAgICAgdHJhbnNhY3Rpb24t
PmRpZEFib3J0KGVycm9yKTsKIH0KIAotdm9pZCBJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmZpcmVW
ZXJzaW9uQ2hhbmdlRXZlbnQodWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwg
dWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKK3ZvaWQgSURCQ29ubmVjdGlvblRvU2VydmVyOjpm
aXJlVmVyc2lvbkNoYW5nZUV2ZW50KHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZp
ZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2
NF90IHJlcXVlc3RlZFZlcnNpb24pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkNvbm5lY3Rp
b25Ub1NlcnZlcjo6ZmlyZVZlcnNpb25DaGFuZ2VFdmVudCIpOwogCkBAIC0zMjUsNyArMzI1LDE0
IEBAIHZvaWQgSURCQ29ubmVjdGlvblRvU2VydmVyOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KHVp
bnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkCiAgICAgaWYgKCFjb25uZWN0aW9uKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBjb25uZWN0aW9uLT5maXJlVmVyc2lvbkNoYW5nZUV2ZW50KHJlcXVl
c3RlZFZlcnNpb24pOworICAgIGNvbm5lY3Rpb24tPmZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQocmVx
dWVzdElkZW50aWZpZXIsIHJlcXVlc3RlZFZlcnNpb24pOworfQorCit2b2lkIElEQkNvbm5lY3Rp
b25Ub1NlcnZlcjo6ZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVudCh1aW50NjRfdCBkYXRhYmFzZUNv
bm5lY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJ
ZGVudGlmaWVyKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6
OmRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQiKTsKKworICAgIG1fZGVsZWdhdGUtPmRpZEZpcmVW
ZXJzaW9uQ2hhbmdlRXZlbnQoZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgcmVxdWVzdElk
ZW50aWZpZXIpOwogfQogCiB2b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6ZGlkU3RhcnRUcmFu
c2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgY29uc3QgSURCRXJyb3ImIGVycm9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5oCmlu
ZGV4IGIxNGU1MGIuLjlmYWM4ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmgKQEAg
LTEwMyw3ICsxMDMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhYm9ydFRyYW5zYWN0aW9uKElEQlRy
YW5zYWN0aW9uJik7CiAgICAgdm9pZCBkaWRBYm9ydFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYpOwog
Ci0gICAgdm9pZCBmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVj
dGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pOworICAgIHZvaWQgZmly
ZVZlcnNpb25DaGFuZ2VFdmVudCh1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVy
LCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRf
dCByZXF1ZXN0ZWRWZXJzaW9uKTsKKyAgICB2b2lkIGRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQo
dWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllcik7CisKICAgICB2b2lkIGRpZFN0YXJ0VHJhbnNh
Y3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQkVycm9yJik7CiAgICAgdm9pZCBub3RpZnlPcGVuREJSZXF1ZXN0QmxvY2tlZChj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCBv
bGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVn
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVj
dGlvblRvU2VydmVyRGVsZWdhdGUuaAppbmRleCA3NWI1NTRjLi5mMjFjNDhjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRv
U2VydmVyRGVsZWdhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyRGVsZWdhdGUuaApAQCAtNzMsOCArNzMsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGl0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVxdWVzdERh
dGEmLCBjb25zdCBJREJLZXlEYXRhJiwgdW5zaWduZWQgbG9uZyBjb3VudCkgPSAwOwogCiAgICAg
dmlydHVhbCB2b2lkIGVzdGFibGlzaFRyYW5zYWN0aW9uKHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVj
dGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpID0gMDsKLQogICAgIHZp
cnR1YWwgdm9pZCBkYXRhYmFzZUNvbm5lY3Rpb25DbG9zZWQodWludDY0X3QgZGF0YWJhc2VDb25u
ZWN0aW9uSWRlbnRpZmllcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaXJlVmVyc2lvbkNo
YW5nZUV2ZW50KHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIpID0gMDsKIAogICAgIHZpcnR1
YWwgdm9pZCByZWYoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmKCkgPSAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNl
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0
YWJhc2VJbXBsLmNwcAppbmRleCAzZTJkY2E0Li5iYWY2Mzg2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBs
LmNwcApAQCAtMzU3LDE5ICszNTcsMzMgQEAgdm9pZCBJREJEYXRhYmFzZTo6ZGlkQ29tbWl0T3JB
Ym9ydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKICAgICAgICAgbWF5
YmVDbG9zZUluU2VydmVyKCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2U6OmZpcmVWZXJzaW9uQ2hh
bmdlRXZlbnQodWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKK3ZvaWQgSURCRGF0YWJhc2U6OmZp
cmVWZXJzaW9uQ2hhbmdlRXZlbnQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0
SWRlbnRpZmllciwgdWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKIHsKICAgICB1aW50NjRfdCBj
dXJyZW50VmVyc2lvbiA9IG1faW5mby52ZXJzaW9uKCk7Ci0gICAgTE9HKEluZGV4ZWREQiwgIklE
QkRhdGFiYXNlOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50IC0gY3VycmVudCB2ZXJzaW9uICUiIFBS
SXU2NCAiLCByZXF1ZXN0ZWQgdmVyc2lvbiAlIiBQUkl1NjQsIGN1cnJlbnRWZXJzaW9uLCByZXF1
ZXN0ZWRWZXJzaW9uKTsKKyAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmZpcmVWZXJz
aW9uQ2hhbmdlRXZlbnQgLSBjdXJyZW50IHZlcnNpb24gJSIgUFJJdTY0ICIsIHJlcXVlc3RlZCB2
ZXJzaW9uICUiIFBSSXU2NCAiLCBjb25uZWN0aW9uICUiIFBSSXU2NCwgY3VycmVudFZlcnNpb24s
IHJlcXVlc3RlZFZlcnNpb24sIG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcik7CiAKLSAg
ICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB8fCBtX2Nsb3NlUGVuZGluZykKKyAgICBp
ZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB8fCBtX2Nsb3NlUGVuZGluZykgeworICAgICAg
ICBzZXJ2ZXJDb25uZWN0aW9uKCkuZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVudChtX2RhdGFiYXNl
Q29ubmVjdGlvbklkZW50aWZpZXIsIHJlcXVlc3RJZGVudGlmaWVyKTsKICAgICAgICAgcmV0dXJu
OworICAgIH0KIAotICAgIFJlZjxFdmVudD4gZXZlbnQgPSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6
OmNyZWF0ZShjdXJyZW50VmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lvbiwgZXZlbnROYW1lcygpLnZl
cnNpb25jaGFuZ2VFdmVudCk7CisgICAgUmVmPEV2ZW50PiBldmVudCA9IElEQlZlcnNpb25DaGFu
Z2VFdmVudDo6Y3JlYXRlKHJlcXVlc3RJZGVudGlmaWVyLCBjdXJyZW50VmVyc2lvbiwgcmVxdWVz
dGVkVmVyc2lvbiwgZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCk7CiAgICAgZXZlbnQt
PnNldFRhcmdldCh0aGlzKTsKICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVl
dWUoKS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAKK2Jvb2wgSURCRGF0YWJh
c2U6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQoreworICAgIExPRyhJbmRleGVkREIsICJJ
REJEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudCAoJSIgUFJJdTY0ICIpIiwgbV9kYXRhYmFzZUNvbm5l
Y3Rpb25JZGVudGlmaWVyKTsKKworICAgIGJvb2wgcmVzdWx0ID0gV2ViQ29yZTo6SURCRGF0YWJh
c2U6OmRpc3BhdGNoRXZlbnQoZXZlbnQpOworCisgICAgaWYgKGV2ZW50LmlzVmVyc2lvbkNoYW5n
ZUV2ZW50KCkgJiYgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZl
bnQpCisgICAgICAgIHNlcnZlckNvbm5lY3Rpb24oKS5kaWRGaXJlVmVyc2lvbkNoYW5nZUV2ZW50
KG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgc3RhdGljX2Nhc3Q8SURCVmVyc2lvbkNo
YW5nZUV2ZW50Jj4oZXZlbnQpLnJlcXVlc3RJZGVudGlmaWVyKCkpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwogdm9pZCBJREJEYXRhYmFzZTo6ZGlkQ3JlYXRlSW5kZXhJbmZvKGNvbnN0IElE
QkluZGV4SW5mbyYgaW5mbykKIHsKICAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1faW5mby5pbmZv
Rm9yRXhpc3RpbmdPYmplY3RTdG9yZShpbmZvLm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRh
YmFzZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJE
YXRhYmFzZUltcGwuaAppbmRleCBmMDhiMWFmLi44NGFkN2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5o
CkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbGxBYm9ydFRyYW5zYWN0aW9u
KElEQlRyYW5zYWN0aW9uJik7CiAgICAgdm9pZCBkaWRBYm9ydFRyYW5zYWN0aW9uKElEQlRyYW5z
YWN0aW9uJik7CiAKLSAgICB2b2lkIGZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQodWludDY0X3QgcmVx
dWVzdGVkVmVyc2lvbik7CisgICAgdm9pZCBmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IHJlcXVlc3Rl
ZFZlcnNpb24pOwogCiAgICAgSURCQ29ubmVjdGlvblRvU2VydmVyJiBzZXJ2ZXJDb25uZWN0aW9u
KCkgeyByZXR1cm4gbV9zZXJ2ZXJDb25uZWN0aW9uLmdldCgpOyB9CiAKQEAgLTg5LDYgKzg5LDgg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc0Nsb3NpbmdPckNsb3NlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2xvc2VQZW5kaW5nIHx8IG1fY2xvc2VkSW5TZXJ2ZXI7IH0KIAorICAgIHZpcnR1YWwgYm9v
bCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGUgZmluYWw7CisKIHByaXZhdGU6CiAgICAg
SURCRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkNvbm5lY3Rpb25Ub1NlcnZl
ciYsIGNvbnN0IElEQlJlc3VsdERhdGEmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlZlcnNpb25DaGFuZ2VF
dmVudEltcGwuY3BwCmluZGV4IDQ4YTJlZWQuLmQzYThmMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVmVy
c2lvbkNoYW5nZUV2ZW50SW1wbC5jcHAKQEAgLTMxLDggKzMxLDkgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIG5hbWVzcGFjZSBJREJDbGllbnQgewogCi1JREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OklE
QlZlcnNpb25DaGFuZ2VFdmVudCh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJz
aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKK0lEQlZlcnNpb25DaGFuZ2VFdmVu
dDo6SURCVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVx
dWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24s
IGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQogICAgIDogV2ViQ29yZTo6SURCVmVyc2lv
bkNoYW5nZUV2ZW50KGV2ZW50VHlwZSkKKyAgICAsIG1fcmVxdWVzdElkZW50aWZpZXIocmVxdWVz
dElkZW50aWZpZXIpCiAgICAgLCBtX29sZFZlcnNpb24ob2xkVmVyc2lvbikKICAgICAsIG1fbmV3
VmVyc2lvbihuZXdWZXJzaW9uKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBs
LmgKaW5kZXggZDI2ZDUxOC4uMDhlZGUxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVmVyc2lvbkNoYW5nZUV2
ZW50SW1wbC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKIAorI2luY2x1ZGUgIklEQlJlc291cmNlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIklEQlZl
cnNpb25DaGFuZ2VFdmVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNywxNiArMzgs
MjYgQEAgY2xhc3MgSURCVmVyc2lvbkNoYW5nZUV2ZW50IGZpbmFsIDogcHVibGljIFdlYkNvcmU6
OklEQlZlcnNpb25DaGFuZ2VFdmVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxJREJWZXJz
aW9uQ2hhbmdlRXZlbnQ+IGNyZWF0ZSh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdW
ZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IElEQlZlcnNpb25DaGFuZ2VFdmVudChvbGRWZXJzaW9uLCBuZXdW
ZXJzaW9uLCBldmVudFR5cGUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCVmVy
c2lvbkNoYW5nZUV2ZW50KElEQlJlc291cmNlSWRlbnRpZmllcjo6ZW1wdHlWYWx1ZSgpLCBvbGRW
ZXJzaW9uLCBuZXdWZXJzaW9uLCBldmVudFR5cGUpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUmVm
PElEQlZlcnNpb25DaGFuZ2VFdmVudD4gY3JlYXRlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1Zl
cnNpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSURCVmVyc2lvbkNoYW5nZUV2ZW50KHJlcXVlc3RJZGVudGlmaWVy
LCBvbGRWZXJzaW9uLCBuZXdWZXJzaW9uLCBldmVudFR5cGUpKTsKKyAgICB9CisKKyAgICBjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gbV9yZXF1ZXN0SWRlbnRpZmllcjsgfQorCisgICAgdmlydHVhbCBib29sIGlzVmVyc2lvbkNo
YW5nZUV2ZW50KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCiBwcml2
YXRlOgotICAgIElEQlZlcnNpb25DaGFuZ2VFdmVudCh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50
NjRfdCBuZXdWZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CisgICAgSURC
VmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElk
ZW50aWZpZXIsIHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24sIGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKIAogICAgIHZpcnR1YWwgdWludDY0X3Qgb2xkVmVy
c2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fb2xkVmVyc2lvbjsgfQogICAgIHZpcnR1
YWwgT3B0aW9uYWw8dWludDY0X3Q+IG5ld1ZlcnNpb24oKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGU7CiAK
KyAgICBJREJSZXNvdXJjZUlkZW50aWZpZXIgbV9yZXF1ZXN0SWRlbnRpZmllcjsKICAgICB1aW50
NjRfdCBtX29sZFZlcnNpb247CiAgICAgdWludDY0X3QgbV9uZXdWZXJzaW9uOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0
aW9uVG9DbGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHAKaW5kZXggYmI1ZTQ3ZS4uYjk1MmY4YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rp
b25Ub0NsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHAKQEAgLTEyMyw5ICsxMjMsOSBAQCB2b2lkIElE
QkNvbm5lY3Rpb25Ub0NsaWVudDo6ZGlkQ29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cgogICAgIG1fZGVsZWdhdGUtPmRpZENvbW1pdFRyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgZXJyb3IpOwogfQogCi12b2lkIElEQkNvbm5lY3Rpb25Ub0Ns
aWVudDo6ZmlyZVZlcnNpb25DaGFuZ2VFdmVudChVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pCit2b2lkIElEQkNvbm5lY3Rp
b25Ub0NsaWVudDo6ZmlyZVZlcnNpb25DaGFuZ2VFdmVudChVbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElk
ZW50aWZpZXIsIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pCiB7Ci0gICAgbV9kZWxlZ2F0ZS0+
ZmlyZVZlcnNpb25DaGFuZ2VFdmVudChjb25uZWN0aW9uLCByZXF1ZXN0ZWRWZXJzaW9uKTsKKyAg
ICBtX2RlbGVnYXRlLT5maXJlVmVyc2lvbkNoYW5nZUV2ZW50KGNvbm5lY3Rpb24sIHJlcXVlc3RJ
ZGVudGlmaWVyLCByZXF1ZXN0ZWRWZXJzaW9uKTsKIH0KIAogdm9pZCBJREJDb25uZWN0aW9uVG9D
bGllbnQ6OmRpZFN0YXJ0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9D
bGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25u
ZWN0aW9uVG9DbGllbnQuaAppbmRleCA1Nzk3ZmE3YS4uODgwNjY0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25u
ZWN0aW9uVG9DbGllbnQuaApAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRP
cGVuQ3Vyc29yKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKICAgICB2b2lkIGRpZEl0ZXJhdGVDdXJz
b3IoY29uc3QgSURCUmVzdWx0RGF0YSYpOwogCi0gICAgdm9pZCBmaXJlVmVyc2lvbkNoYW5nZUV2
ZW50KFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYsIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNp
b24pOworICAgIHZvaWQgZmlyZVZlcnNpb25DaGFuZ2VFdmVudChVbmlxdWVJREJEYXRhYmFzZUNv
bm5lY3Rpb24mLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVy
LCB1aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKTsKICAgICB2b2lkIGRpZFN0YXJ0VHJhbnNhY3Rp
b24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNv
bnN0IElEQkVycm9yJik7CiAKICAgICB2b2lkIG5vdGlmeU9wZW5EQlJlcXVlc3RCbG9ja2VkKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IG9s
ZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRl
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlv
blRvQ2xpZW50RGVsZWdhdGUuaAppbmRleCA5NDhlMmQxLi5jNDIzZTRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xp
ZW50RGVsZWdhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdhdGUuaApAQCAtNjAsNyArNjAsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZE9wZW5DdXJzb3IoY29uc3QgSURCUmVzdWx0RGF0YSYp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkSXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXN1bHRE
YXRhJikgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoVW5p
cXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJiwgdWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KFVuaXF1ZUlEQkRhdGFi
YXNlQ29ubmVjdGlvbiYsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50
aWZpZXIsIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkU3RhcnRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG5v
dGlmeU9wZW5EQlJlcXVlc3RCbG9ja2VkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVx
dWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24p
ID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmNwcAppbmRleCA3ZmE1N2MwLi4yNmU2ZTY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAt
MzM5LDYgKzMzOSwxNyBAQCB2b2lkIElEQlNlcnZlcjo6ZGF0YWJhc2VDb25uZWN0aW9uQ2xvc2Vk
KHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpCiAgICAgZGF0YWJhc2VDb25u
ZWN0aW9uLT5jb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVudCgpOwogfQogCit2b2lkIElEQlNlcnZl
cjo6ZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVudCh1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25J
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVy
KQoreworICAgIExPRyhJbmRleGVkREIsICJJREJTZXJ2ZXI6OmRpZEZpcmVWZXJzaW9uQ2hhbmdl
RXZlbnQiKTsKKworICAgIGF1dG8gZGF0YWJhc2VDb25uZWN0aW9uID0gbV9kYXRhYmFzZUNvbm5l
Y3Rpb25zLmdldChkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKTsKKyAgICBpZiAoIWRhdGFi
YXNlQ29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgZGF0YWJhc2VDb25uZWN0aW9u
LT5kaWRGaXJlVmVyc2lvbkNoYW5nZUV2ZW50KHJlcXVlc3RJZGVudGlmaWVyKTsKK30KKwogdm9p
ZCBJREJTZXJ2ZXI6OnBvc3REYXRhYmFzZVRhc2soc3RkOjp1bmlxdWVfcHRyPENyb3NzVGhyZWFk
VGFzaz4mJiB0YXNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKaW5kZXgg
YmUzM2FiMC4uYzRkMjdmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaApAQCAtNzUsNiArNzUsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGVzdGFibGlzaFRyYW5zYWN0aW9uKHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklk
ZW50aWZpZXIsIGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpOwogICAgIHZvaWQgZGF0YWJhc2VD
b25uZWN0aW9uQ2xvc2VkKHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOwor
ICAgIHZvaWQgZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVudCh1aW50NjRfdCBkYXRhYmFzZUNvbm5l
Y3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVu
dGlmaWVyKTsKIAogICAgIHZvaWQgcG9zdERhdGFiYXNlVGFzayhzdGQ6OnVuaXF1ZV9wdHI8Q3Jv
c3NUaHJlYWRUYXNrPiYmKTsKICAgICB2b2lkIHBvc3REYXRhYmFzZVRhc2tSZXBseShzdGQ6OnVu
aXF1ZV9wdHI8Q3Jvc3NUaHJlYWRUYXNrPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TZXJ2ZXJPcGVuREJSZXF1ZXN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TZXJ2ZXJPcGVuREJSZXF1ZXN0LmNw
cAppbmRleCBhYzc2ODZhLi4zYWJiOGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU2VydmVyT3BlbkRCUmVxdWVzdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NlcnZlck9wZW5EQlJlcXVlc3QuY3Bw
CkBAIC01NSwxMyArNTUsMTQgQEAgYm9vbCBTZXJ2ZXJPcGVuREJSZXF1ZXN0Ojppc0RlbGV0ZVJl
cXVlc3QoKSBjb25zdAogICAgIHJldHVybiBtX3JlcXVlc3REYXRhLmlzRGVsZXRlUmVxdWVzdCgp
OwogfQogCi12b2lkIFNlcnZlck9wZW5EQlJlcXVlc3Q6Om5vdGlmeURlbGV0ZVJlcXVlc3RCbG9j
a2VkKHVpbnQ2NF90IGN1cnJlbnRWZXJzaW9uKQordm9pZCBTZXJ2ZXJPcGVuREJSZXF1ZXN0Ojpu
b3RpZnlSZXF1ZXN0QmxvY2tlZCh1aW50NjRfdCBjdXJyZW50VmVyc2lvbikKIHsKLSAgICBBU1NF
UlQoaXNEZWxldGVSZXF1ZXN0KCkpOwotICAgIEFTU0VSVCghbV9ub3RpZmllZERlbGV0ZVJlcXVl
c3RCbG9ja2VkKTsKKyAgICBBU1NFUlQoIW1fbm90aWZpZWRCbG9ja2VkKTsKKworICAgIHVpbnQ2
NF90IHJlcXVlc3RlZFZlcnNpb24gPSBpc09wZW5SZXF1ZXN0KCkgPyAgbV9yZXF1ZXN0RGF0YS5y
ZXF1ZXN0ZWRWZXJzaW9uKCkgOiAwOworICAgIG1fY29ubmVjdGlvbi5ub3RpZnlPcGVuREJSZXF1
ZXN0QmxvY2tlZChtX3JlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlmaWVyKCksIGN1cnJlbnRWZXJz
aW9uLCByZXF1ZXN0ZWRWZXJzaW9uKTsKIAotICAgIG1fY29ubmVjdGlvbi5ub3RpZnlPcGVuREJS
ZXF1ZXN0QmxvY2tlZChtX3JlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlmaWVyKCksIGN1cnJlbnRW
ZXJzaW9uLCAwKTsKLSAgICBtX25vdGlmaWVkRGVsZXRlUmVxdWVzdEJsb2NrZWQgPSB0cnVlOwor
ICAgIG1fbm90aWZpZWRCbG9ja2VkID0gdHJ1ZTsKIH0KIAogdm9pZCBTZXJ2ZXJPcGVuREJSZXF1
ZXN0Ojpub3RpZnlEaWREZWxldGVEYXRhYmFzZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8p
CkBAIC03MSw2ICs3MiwxOSBAQCB2b2lkIFNlcnZlck9wZW5EQlJlcXVlc3Q6Om5vdGlmeURpZERl
bGV0ZURhdGFiYXNlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbykKICAgICBtX2Nvbm5lY3Rp
b24uZGlkRGVsZXRlRGF0YWJhc2UoSURCUmVzdWx0RGF0YTo6ZGVsZXRlRGF0YWJhc2VTdWNjZXNz
KG1fcmVxdWVzdERhdGEucmVxdWVzdElkZW50aWZpZXIoKSwgaW5mbykpOwogfQogCit2b2lkIFNl
cnZlck9wZW5EQlJlcXVlc3Q6Om5vdGlmaWVkQ29ubmVjdGlvbnNPZlZlcnNpb25DaGFuZ2UoSGFz
aFNldDx1aW50NjRfdD4mJiBjb25uZWN0aW9uSWRlbnRpZmllcnMpCit7CisgICAgQVNTRVJUKCFt
X25vdGlmaWVkQ29ubmVjdGlvbnNPZlZlcnNpb25DaGFuZ2UpOworCisgICAgbV9ub3RpZmllZENv
bm5lY3Rpb25zT2ZWZXJzaW9uQ2hhbmdlID0gdHJ1ZTsKKyAgICBtX2Nvbm5lY3Rpb25zUGVuZGlu
Z1ZlcnNpb25DaGFuZ2VFdmVudCA9IFdURjo6bW92ZShjb25uZWN0aW9uSWRlbnRpZmllcnMpOwor
fQorCit2b2lkIFNlcnZlck9wZW5EQlJlcXVlc3Q6OmNvbm5lY3Rpb25DbG9zZWRPckZpcmVkVmVy
c2lvbkNoYW5nZUV2ZW50KHVpbnQ2NF90IGNvbm5lY3Rpb25JZGVudGlmaWVyKQoreworICAgIG1f
Y29ubmVjdGlvbnNQZW5kaW5nVmVyc2lvbkNoYW5nZUV2ZW50LnJlbW92ZShjb25uZWN0aW9uSWRl
bnRpZmllcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvU2VydmVyT3BlbkRCUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NlcnZlck9wZW5EQlJlcXVlc3QuaAppbmRleCBjYTg2N2NiLi5mYmJjZjky
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU2Vy
dmVyT3BlbkRCUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9TZXJ2ZXJPcGVuREJSZXF1ZXN0LmgKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1
ZGUgIklEQkNvbm5lY3Rpb25Ub0NsaWVudC5oIgogI2luY2x1ZGUgIklEQlJlcXVlc3REYXRhLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtNDksOSArNTAsMTcgQEAgcHVibGljOgogICAgIGJv
b2wgaXNPcGVuUmVxdWVzdCgpIGNvbnN0OwogICAgIGJvb2wgaXNEZWxldGVSZXF1ZXN0KCkgY29u
c3Q7CiAKLSAgICB2b2lkIG5vdGlmeURlbGV0ZVJlcXVlc3RCbG9ja2VkKHVpbnQ2NF90IGN1cnJl
bnRWZXJzaW9uKTsKKyAgICBib29sIGhhc05vdGlmaWVkQmxvY2tlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbm90aWZpZWRCbG9ja2VkOyB9CisgICAgdm9pZCBub3RpZnlSZXF1ZXN0QmxvY2tlZCh1aW50
NjRfdCBjdXJyZW50VmVyc2lvbik7CiAgICAgdm9pZCBub3RpZnlEaWREZWxldGVEYXRhYmFzZShj
b25zdCBJREJEYXRhYmFzZUluZm8mKTsKLSAgICBib29sIGhhc05vdGlmaWVkRGVsZXRlUmVxdWVz
dEJsb2NrZWQoKSBjb25zdCB7IHJldHVybiBtX25vdGlmaWVkRGVsZXRlUmVxdWVzdEJsb2NrZWQ7
IH0KKworICAgIHVpbnQ2NF90IHZlcnNpb25DaGFuZ2VJRCgpIGNvbnN0OworCisgICAgdm9pZCBu
b3RpZmllZENvbm5lY3Rpb25zT2ZWZXJzaW9uQ2hhbmdlKEhhc2hTZXQ8dWludDY0X3Q+JiYgY29u
bmVjdGlvbklkZW50aWZpZXJzKTsKKyAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWRPckZpcmVkVmVy
c2lvbkNoYW5nZUV2ZW50KHVpbnQ2NF90IGNvbm5lY3Rpb25JZGVudGlmaWVyKTsKKyAgICBib29s
IGhhc0Nvbm5lY3Rpb25zUGVuZGluZ1ZlcnNpb25DaGFuZ2VFdmVudCgpIGNvbnN0IHsgcmV0dXJu
ICFtX2Nvbm5lY3Rpb25zUGVuZGluZ1ZlcnNpb25DaGFuZ2VFdmVudC5pc0VtcHR5KCk7IH0KKyAg
ICBib29sIGhhc05vdGlmaWVkQ29ubmVjdGlvbnNPZlZlcnNpb25DaGFuZ2UoKSBjb25zdCB7IHJl
dHVybiBtX25vdGlmaWVkQ29ubmVjdGlvbnNPZlZlcnNpb25DaGFuZ2U7IH0KKwogCiBwcml2YXRl
OgogICAgIFNlcnZlck9wZW5EQlJlcXVlc3QoSURCQ29ubmVjdGlvblRvQ2xpZW50JiwgY29uc3Qg
SURCUmVxdWVzdERhdGEmKTsKQEAgLTU5LDcgKzY4LDEwIEBAIHByaXZhdGU6CiAgICAgSURCQ29u
bmVjdGlvblRvQ2xpZW50JiBtX2Nvbm5lY3Rpb247CiAgICAgSURCUmVxdWVzdERhdGEgbV9yZXF1
ZXN0RGF0YTsKIAotICAgIGJvb2wgbV9ub3RpZmllZERlbGV0ZVJlcXVlc3RCbG9ja2VkIHsgZmFs
c2UgfTsKKyAgICBib29sIG1fbm90aWZpZWRCbG9ja2VkIHsgZmFsc2UgfTsKKworICAgIGJvb2wg
bV9ub3RpZmllZENvbm5lY3Rpb25zT2ZWZXJzaW9uQ2hhbmdlIHsgZmFsc2UgfTsKKyAgICBIYXNo
U2V0PHVpbnQ2NF90PiBtX2Nvbm5lY3Rpb25zUGVuZGluZ1ZlcnNpb25DaGFuZ2VFdmVudDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5k
ZXggYmIwNzkxOC4uZWI2Njc3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0xNTgs
MTAgKzE1OCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9w
ZXJhdGlvbigpCiAgICAgfQogCiAgICAgLy8gT3RoZXJ3aXNlIHdlIGhhdmUgdG8gbm90aWZ5IGFs
bCB0aG9zZSBvcGVuIGNvbm5lY3Rpb25zIGFuZCB3YWl0IGZvciB0aGVtIHRvIGNsb3NlLgotICAg
IG5vdGlmeUNvbm5lY3Rpb25zT2ZWZXJzaW9uQ2hhbmdlRm9yVXBncmFkZSgpOwotCi0gICAgLy8g
QW5kIHdlIG5vdGlmeSB0aGlzIE9wZW5EQlJlcXVlc3QgdGhhdCBpdCBpcyBibG9ja2VkIHVudGls
IHRob3NlIGNvbm5lY3Rpb25zIGNsb3NlLgotICAgIG1fdmVyc2lvbkNoYW5nZURhdGFiYXNlQ29u
bmVjdGlvbi0+Y29ubmVjdGlvblRvQ2xpZW50KCkubm90aWZ5T3BlbkRCUmVxdWVzdEJsb2NrZWQo
bV9jdXJyZW50T3BlbkRCUmVxdWVzdC0+cmVxdWVzdERhdGEoKS5yZXF1ZXN0SWRlbnRpZmllcigp
LCBtX2RhdGFiYXNlSW5mby0+dmVyc2lvbigpLCByZXF1ZXN0ZWRWZXJzaW9uKTsKKyAgICBtYXli
ZU5vdGlmeUNvbm5lY3Rpb25zT2ZWZXJzaW9uQ2hhbmdlKCk7CiB9CiAKIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50RGVsZXRlT3BlcmF0aW9uKCkKQEAgLTE3MywxNSArMTcw
LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnREZWxldGVPcGVyYXRp
b24oKQogICAgIEFTU0VSVChtX2N1cnJlbnRPcGVuREJSZXF1ZXN0LT5pc0RlbGV0ZVJlcXVlc3Qo
KSk7CiAKICAgICBpZiAoaGFzQW55T3BlbkNvbm5lY3Rpb25zKCkpIHsKLSAgICAgICAgLy8gRXhh
Y3RseSBvbmNlLCBub3RpZnkgYWxsIG9wZW4gY29ubmVjdGlvbnMgb2YgdGhlIHBlbmRpbmcgZGVs
ZXRpb24uCi0gICAgICAgIGlmICghbV9oYXNOb3RpZmllZENvbm5lY3Rpb25zT2ZEZWxldGUpIHsK
LSAgICAgICAgICAgIG5vdGlmeUNvbm5lY3Rpb25zT2ZWZXJzaW9uQ2hhbmdlKDApOwotICAgICAg
ICAgICAgbV9oYXNOb3RpZmllZENvbm5lY3Rpb25zT2ZEZWxldGUgPSB0cnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCFtX2N1cnJlbnRPcGVuREJSZXF1ZXN0LT5oYXNOb3RpZmllZERlbGV0
ZVJlcXVlc3RCbG9ja2VkKCkpCi0gICAgICAgICAgICBtX2N1cnJlbnRPcGVuREJSZXF1ZXN0LT5u
b3RpZnlEZWxldGVSZXF1ZXN0QmxvY2tlZChtX2RhdGFiYXNlSW5mby0+dmVyc2lvbigpKTsKLQor
ICAgICAgICBtYXliZU5vdGlmeUNvbm5lY3Rpb25zT2ZWZXJzaW9uQ2hhbmdlKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTE5Miw3ICsxODEsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ3VycmVudERlbGV0ZU9wZXJhdGlvbigpCiAKICAgICBtX2N1cnJlbnRPcGVu
REJSZXF1ZXN0LT5ub3RpZnlEaWREZWxldGVEYXRhYmFzZSgqbV9kYXRhYmFzZUluZm8pOwogICAg
IG1fY3VycmVudE9wZW5EQlJlcXVlc3QgPSBudWxscHRyOwotICAgIG1faGFzTm90aWZpZWRDb25u
ZWN0aW9uc09mRGVsZXRlID0gZmFsc2U7CiAgICAgbV9kZWxldGVQZW5kaW5nID0gZmFsc2U7CiAK
ICAgICBpZiAobV9wZW5kaW5nT3BlbkRCUmVxdWVzdHMuaXNFbXB0eSgpKQpAQCAtMzI5LDI4ICsz
MTcsNjcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YmVnaW5UcmFuc2FjdGlvbkluQmFja2lu
Z1N0b3JlKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYKICAgICBtX2JhY2tpbmdTdG9yZS0+YmVn
aW5UcmFuc2FjdGlvbihpbmZvKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6bm90aWZ5
Q29ubmVjdGlvbnNPZlZlcnNpb25DaGFuZ2VGb3JVcGdyYWRlKCkKK3ZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6Om1heWJlTm90aWZ5Q29ubmVjdGlvbnNPZlZlcnNpb25DaGFuZ2UoKQogewogICAgIEFT
U0VSVChtX2N1cnJlbnRPcGVuREJSZXF1ZXN0KTsKLSAgICBBU1NFUlQobV9jdXJyZW50T3BlbkRC
UmVxdWVzdC0+aXNPcGVuUmVxdWVzdCgpKTsKLSAgICBBU1NFUlQobV92ZXJzaW9uQ2hhbmdlRGF0
YWJhc2VDb25uZWN0aW9uKTsKIAotICAgIG5vdGlmeUNvbm5lY3Rpb25zT2ZWZXJzaW9uQ2hhbmdl
KG1fY3VycmVudE9wZW5EQlJlcXVlc3QtPnJlcXVlc3REYXRhKCkucmVxdWVzdGVkVmVyc2lvbigp
KTsKLX0KKyAgICBpZiAobV9jdXJyZW50T3BlbkRCUmVxdWVzdC0+aGFzTm90aWZpZWRDb25uZWN0
aW9uc09mVmVyc2lvbkNoYW5nZSgpKQorICAgICAgICByZXR1cm47CiAKLXZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6Om5vdGlmeUNvbm5lY3Rpb25zT2ZWZXJzaW9uQ2hhbmdlKHVpbnQ2NF90IHJlcXVl
c3RlZFZlcnNpb24pCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRh
YmFzZTo6bm90aWZ5Q29ubmVjdGlvbnNPZlZlcnNpb25DaGFuZ2UgLSAlIiBQUkl1NjQsIHJlcXVl
c3RlZFZlcnNpb24pOworICAgIHVpbnQ2NF90IG5ld1ZlcnNpb24gPSBtX2N1cnJlbnRPcGVuREJS
ZXF1ZXN0LT5pc09wZW5SZXF1ZXN0KCkgPyBtX2N1cnJlbnRPcGVuREJSZXF1ZXN0LT5yZXF1ZXN0
RGF0YSgpLnJlcXVlc3RlZFZlcnNpb24oKSA6IDA7CisgICAgYXV0byByZXF1ZXN0SWRlbnRpZmll
ciA9IG1fY3VycmVudE9wZW5EQlJlcXVlc3QtPnJlcXVlc3REYXRhKCkucmVxdWVzdElkZW50aWZp
ZXIoKTsKKworICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6Om5v
dGlmeUNvbm5lY3Rpb25zT2ZWZXJzaW9uQ2hhbmdlIC0gJSIgUFJJdTY0LCBuZXdWZXJzaW9uKTsK
IAogICAgIC8vIDMuMy43ICJ2ZXJzaW9uY2hhbmdlIiB0cmFuc2FjdGlvbiBzdGVwcwogICAgIC8v
IEZpcmUgYSB2ZXJzaW9uY2hhbmdlIGV2ZW50IGF0IGVhY2ggY29ubmVjdGlvbiBpbiBtX29wZW5E
YXRhYmFzZUNvbm5lY3Rpb25zIHRoYXQgaXMgb3Blbi4KICAgICAvLyBUaGUgZXZlbnQgbXVzdCBu
b3QgYmUgZmlyZWQgb24gY29ubmVjdGlvbnMgd2hpY2ggaGFzIHRoZSBjbG9zZVBlbmRpbmcgZmxh
ZyBzZXQuCisgICAgSGFzaFNldDx1aW50NjRfdD4gY29ubmVjdGlvbklkZW50aWZpZXJzOwogICAg
IGZvciAoYXV0byBjb25uZWN0aW9uIDogbV9vcGVuRGF0YWJhc2VDb25uZWN0aW9ucykgewogICAg
ICAgICBpZiAoY29ubmVjdGlvbi0+Y2xvc2VQZW5kaW5nKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICBjb25uZWN0aW9uLT5maXJlVmVyc2lvbkNoYW5nZUV2ZW50KHJlcXVlc3Rl
ZFZlcnNpb24pOworICAgICAgICBjb25uZWN0aW9uLT5maXJlVmVyc2lvbkNoYW5nZUV2ZW50KHJl
cXVlc3RJZGVudGlmaWVyLCBuZXdWZXJzaW9uKTsKKyAgICAgICAgY29ubmVjdGlvbklkZW50aWZp
ZXJzLmFkZChjb25uZWN0aW9uLT5pZGVudGlmaWVyKCkpOwogICAgIH0KKworICAgIG1fY3VycmVu
dE9wZW5EQlJlcXVlc3QtPm5vdGlmaWVkQ29ubmVjdGlvbnNPZlZlcnNpb25DaGFuZ2UoV1RGOjpt
b3ZlKGNvbm5lY3Rpb25JZGVudGlmaWVycykpOworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
Ojpub3RpZnlDdXJyZW50UmVxdWVzdENvbm5lY3Rpb25DbG9zZWRPckZpcmVkVmVyc2lvbkNoYW5n
ZUV2ZW50KHVpbnQ2NF90IGNvbm5lY3Rpb25JZGVudGlmaWVyKQoreworICAgIExPRyhJbmRleGVk
REIsICJVbmlxdWVJREJEYXRhYmFzZTo6bm90aWZ5Q3VycmVudFJlcXVlc3RDb25uZWN0aW9uQ2xv
c2VkT3JGaXJlZFZlcnNpb25DaGFuZ2VFdmVudCAtICUiIFBSSXU2NCwgY29ubmVjdGlvbklkZW50
aWZpZXIpOworCisgICAgQVNTRVJUKG1fY3VycmVudE9wZW5EQlJlcXVlc3QpOworCisgICAgbV9j
dXJyZW50T3BlbkRCUmVxdWVzdC0+Y29ubmVjdGlvbkNsb3NlZE9yRmlyZWRWZXJzaW9uQ2hhbmdl
RXZlbnQoY29ubmVjdGlvbklkZW50aWZpZXIpOworCisgICAgaWYgKG1fY3VycmVudE9wZW5EQlJl
cXVlc3QtPmhhc0Nvbm5lY3Rpb25zUGVuZGluZ1ZlcnNpb25DaGFuZ2VFdmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIWhhc0FueU9wZW5Db25uZWN0aW9ucygpKSB7CisgICAgICAg
IGludm9rZU9wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChtX2N1cnJlbnRPcGVuREJSZXF1ZXN0LT5oYXNOb3RpZmllZEJsb2Nr
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gU2luY2UgYWxsIG9wZW4gY29ubmVjdGlv
bnMgaGF2ZSBmaXJlZCB0aGVpciB2ZXJzaW9uIGNoYW5nZSBldmVudHMgYnV0IG5vdCBhbGwgb2Yg
dGhlbSBoYXZlIGNsb3NlZCwKKyAgICAvLyB0aGlzIHJlcXVlc3QgaXMgb2ZmaWNpYWxseSBibG9j
a2VkLgorICAgIG1fY3VycmVudE9wZW5EQlJlcXVlc3QtPm5vdGlmeVJlcXVlc3RCbG9ja2VkKG1f
ZGF0YWJhc2VJbmZvLT52ZXJzaW9uKCkpOworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRGaXJlVmVyc2lvbkNoYW5nZUV2ZW50KFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllcikK
K3sKKyAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2U6OmRpZEZpcmVWZXJzaW9u
Q2hhbmdlRXZlbnQiKTsKKworICAgIGlmICghbV9jdXJyZW50T3BlbkRCUmVxdWVzdCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQVNTRVJUX1VOVVNFRChyZXF1ZXN0SWRlbnRpZmllciwgbV9jdXJy
ZW50T3BlbkRCUmVxdWVzdC0+cmVxdWVzdERhdGEoKS5yZXF1ZXN0SWRlbnRpZmllcigpID09IHJl
cXVlc3RJZGVudGlmaWVyKTsKKworICAgIG5vdGlmeUN1cnJlbnRSZXF1ZXN0Q29ubmVjdGlvbkNs
b3NlZE9yRmlyZWRWZXJzaW9uQ2hhbmdlRXZlbnQoY29ubmVjdGlvbi5pZGVudGlmaWVyKCkpOwog
fQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjphZGRPcGVuRGF0YWJhc2VDb25uZWN0aW9uKFJl
ZjxVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKQEAgLTkzOCw2ICs5
NjUsOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVu
dChVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mCiAKICAgICBBU1NFUlQobV9vcGVuRGF0YWJh
c2VDb25uZWN0aW9ucy5jb250YWlucygmY29ubmVjdGlvbikpOwogCisgICAgaWYgKG1fY3VycmVu
dE9wZW5EQlJlcXVlc3QpCisgICAgICAgIG5vdGlmeUN1cnJlbnRSZXF1ZXN0Q29ubmVjdGlvbkNs
b3NlZE9yRmlyZWRWZXJzaW9uQ2hhbmdlRXZlbnQoY29ubmVjdGlvbi5pZGVudGlmaWVyKCkpOwor
CiAgICAgRGVxdWU8UmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+PiBwZW5kaW5n
VHJhbnNhY3Rpb25zOwogICAgIHdoaWxlICghbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHko
KSkgewogICAgICAgICBhdXRvIHRyYW5zYWN0aW9uID0gbV9wZW5kaW5nVHJhbnNhY3Rpb25zLnRh
a2VGaXJzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRleCA0ZjVhMjRkLi5mNGM4Y2ZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAtOTUsNiArOTUsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYpOwogICAgIHZvaWQgdHJhbnNhY3Rpb25EZXN0cm95ZWQoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYpOwogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZEZyb21DbGllbnQoVW5pcXVl
SURCRGF0YWJhc2VDb25uZWN0aW9uJik7CisgICAgdm9pZCBkaWRGaXJlVmVyc2lvbkNoYW5nZUV2
ZW50KFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgcmVxdWVzdElkZW50aWZpZXIpOwogCiAgICAgdm9pZCBlbnF1ZXVlVHJhbnNhY3Rpb24o
UmVmPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+JiYpOwogCkBAIC0xMTUsOCArMTE2LDgg
QEAgcHJpdmF0ZToKICAgICBib29sIGhhc0FueU9wZW5Db25uZWN0aW9ucygpIGNvbnN0OwogCiAg
ICAgdm9pZCBzdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbigpOwotICAgIHZvaWQgbm90aWZ5
Q29ubmVjdGlvbnNPZlZlcnNpb25DaGFuZ2VGb3JVcGdyYWRlKCk7Ci0gICAgdm9pZCBub3RpZnlD
b25uZWN0aW9uc09mVmVyc2lvbkNoYW5nZSh1aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKTsKKyAg
ICB2b2lkIG1heWJlTm90aWZ5Q29ubmVjdGlvbnNPZlZlcnNpb25DaGFuZ2UoKTsKKyAgICB2b2lk
IG5vdGlmeUN1cnJlbnRSZXF1ZXN0Q29ubmVjdGlvbkNsb3NlZE9yRmlyZWRWZXJzaW9uQ2hhbmdl
RXZlbnQodWludDY0X3QgY29ubmVjdGlvbklkZW50aWZpZXIpOwogICAgIGJvb2wgaXNWZXJzaW9u
Q2hhbmdlSW5Qcm9ncmVzcygpOwogCiAgICAgdm9pZCBhY3RpdmF0ZVRyYW5zYWN0aW9uSW5CYWNr
aW5nU3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYpOwpAQCAtMjA3LDcgKzIwOCw2
IEBAIHByaXZhdGU6CiAgICAgSGFzaENvdW50ZWRTZXQ8dWludDY0X3Q+IG1fb2JqZWN0U3RvcmVU
cmFuc2FjdGlvbkNvdW50czsKIAogICAgIGJvb2wgbV9kZWxldGVQZW5kaW5nIHsgZmFsc2UgfTsK
LSAgICBib29sIG1faGFzTm90aWZpZWRDb25uZWN0aW9uc09mRGVsZXRlIHsgZmFsc2UgfTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2VDb25uZWN0aW9uLmNwcAppbmRleCBmYWI2OGUzLi45Y2FlNDAzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcApAQCAtNjgsMTYgKzY4LDIzIEBAIGJvb2wg
VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpoYXNOb25GaW5pc2hlZFRyYW5zYWN0aW9ucygp
IGNvbnN0CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjb25uZWN0aW9uQ2xv
c2VkRnJvbUNsaWVudCgpCiB7Ci0gICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNl
Q29ubmVjdGlvbjo6Y29ubmVjdGlvbkNsb3NlZEZyb21DbGllbnQiKTsKKyAgICBMT0coSW5kZXhl
ZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjb25uZWN0aW9uQ2xvc2VkRnJvbUNs
aWVudCAtICUiIFBSSXU2NCwgbV9pZGVudGlmaWVyKTsKIAogICAgIG1fY2xvc2VQZW5kaW5nID0g
dHJ1ZTsKICAgICBtX2RhdGFiYXNlLmNvbm5lY3Rpb25DbG9zZWRGcm9tQ2xpZW50KCp0aGlzKTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmZpcmVWZXJzaW9uQ2hhbmdl
RXZlbnQodWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2VD
b25uZWN0aW9uOjpkaWRGaXJlVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1
ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVudCIpOworCisg
ICAgbV9kYXRhYmFzZS5kaWRGaXJlVmVyc2lvbkNoYW5nZUV2ZW50KCp0aGlzLCByZXF1ZXN0SWRl
bnRpZmllcik7Cit9CisKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpmaXJlVmVy
c2lvbkNoYW5nZUV2ZW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50
aWZpZXIsIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pCiB7CiAgICAgQVNTRVJUKCFtX2Nsb3Nl
UGVuZGluZyk7Ci0gICAgbV9jb25uZWN0aW9uVG9DbGllbnQuZmlyZVZlcnNpb25DaGFuZ2VFdmVu
dCgqdGhpcywgcmVxdWVzdGVkVmVyc2lvbik7CisgICAgbV9jb25uZWN0aW9uVG9DbGllbnQuZmly
ZVZlcnNpb25DaGFuZ2VFdmVudCgqdGhpcywgcmVxdWVzdElkZW50aWZpZXIsIHJlcXVlc3RlZFZl
cnNpb24pOwogfQogCiBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiBVbmlxdWVJREJEYXRh
YmFzZUNvbm5lY3Rpb246OmNyZWF0ZVZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbih1aW50NjRfdCBu
ZXdWZXJzaW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oCmluZGV4
IGM1NDUyZDcuLmI0Zjg3YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0
aW9uLmgKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNOb25GaW5pc2hl
ZFRyYW5zYWN0aW9ucygpIGNvbnN0OwogCi0gICAgdm9pZCBmaXJlVmVyc2lvbkNoYW5nZUV2ZW50
KHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pOworICAgIHZvaWQgZmlyZVZlcnNpb25DaGFuZ2VF
dmVudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50
NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKTsKICAgICBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiBjcmVhdGVWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24odWludDY0X3QgbmV3VmVyc2lvbik7CiAK
ICAgICB2b2lkIGVzdGFibGlzaFRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYp
OwpAQCAtNzEsNiArNzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRDbGVhck9iamVjdFN0b3Jl
KGNvbnN0IElEQlJlc3VsdERhdGEmKTsKICAgICB2b2lkIGRpZENyZWF0ZUluZGV4KGNvbnN0IElE
QlJlc3VsdERhdGEmKTsKICAgICB2b2lkIGRpZERlbGV0ZUluZGV4KGNvbnN0IElEQlJlc3VsdERh
dGEmKTsKKyAgICB2b2lkIGRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllcik7CiAKIHByaXZhdGU6CiAgICAgVW5pcXVl
SURCRGF0YWJhc2VDb25uZWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlJiwgSURCQ29ubmVjdGlvblRv
Q2xpZW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCmluZGV4IDUwNmU5MjEuLmU0MTM3
MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
blByb2Nlc3NJREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC0zMzYsMTIgKzMzNiwxMiBAQCB2
b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6ZXN0YWJsaXNoVHJhbnNhY3Rpb24odWludDY0X3QgZGF0
YWJhc2VDb25uZWN0aW9uSWRlbnRpZgogICAgIH0pOwogfQogCi12b2lkIEluUHJvY2Vzc0lEQlNl
cnZlcjo6ZmlyZVZlcnNpb25DaGFuZ2VFdmVudChJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKK3ZvaWQg
SW5Qcm9jZXNzSURCU2VydmVyOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KElEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKQog
ewogICAgIFJlZlB0cjxJblByb2Nlc3NJREJTZXJ2ZXI+IHNlbGYodGhpcyk7CiAgICAgdWludDY0
X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciA9IGNvbm5lY3Rpb24uaWRlbnRpZmllcigp
OwotICAgIFJ1bkxvb3A6OmN1cnJlbnQoKS5kaXNwYXRjaChbdGhpcywgc2VsZiwgZGF0YWJhc2VD
b25uZWN0aW9uSWRlbnRpZmllciwgcmVxdWVzdGVkVmVyc2lvbl0gewotICAgICAgICBtX2Nvbm5l
Y3Rpb25Ub1NlcnZlci0+ZmlyZVZlcnNpb25DaGFuZ2VFdmVudChkYXRhYmFzZUNvbm5lY3Rpb25J
ZGVudGlmaWVyLCByZXF1ZXN0ZWRWZXJzaW9uKTsKKyAgICBSdW5Mb29wOjpjdXJyZW50KCkuZGlz
cGF0Y2goW3RoaXMsIHNlbGYsIGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIHJlcXVlc3RJ
ZGVudGlmaWVyLCByZXF1ZXN0ZWRWZXJzaW9uXSB7CisgICAgICAgIG1fY29ubmVjdGlvblRvU2Vy
dmVyLT5maXJlVmVyc2lvbkNoYW5nZUV2ZW50KGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIs
IHJlcXVlc3RJZGVudGlmaWVyLCByZXF1ZXN0ZWRWZXJzaW9uKTsKICAgICB9KTsKIH0KIApAQCAt
MzY5LDYgKzM2OSwxNCBAQCB2b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6ZGF0YWJhc2VDb25uZWN0
aW9uQ2xvc2VkKHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZQogICAgIH0pOwogfQogCit2
b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6ZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVudCh1aW50NjRf
dCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHJlcXVlc3RJZGVudGlmaWVyKQoreworICAgIFJlZlB0cjxJblByb2Nlc3NJREJTZXJ2ZXI+
IHNlbGYodGhpcyk7CisgICAgUnVuTG9vcDo6Y3VycmVudCgpLmRpc3BhdGNoKFt0aGlzLCBzZWxm
LCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCByZXF1ZXN0SWRlbnRpZmllcl0geworICAg
ICAgICBtX3NlcnZlci0+ZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVudChkYXRhYmFzZUNvbm5lY3Rp
b25JZGVudGlmaWVyLCByZXF1ZXN0SWRlbnRpZmllcik7CisgICAgfSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vz
c0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lu
UHJvY2Vzc0lEQlNlcnZlci5oCmluZGV4IDQxZDQzZGMuLmZiN2Y2NjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNz
SURCU2VydmVyLmgKQEAgLTcyLDYgKzcyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBp
dGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0YSYsIHVu
c2lnbmVkIGxvbmcgY291bnQpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBlc3Rh
Ymxpc2hUcmFuc2FjdGlvbih1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBj
b25zdCBJREJUcmFuc2FjdGlvbkluZm8mKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZv
aWQgZGF0YWJhc2VDb25uZWN0aW9uQ2xvc2VkKHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklk
ZW50aWZpZXIpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaXJlVmVyc2lv
bkNoYW5nZUV2ZW50KHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIpIG92ZXJyaWRlIGZpbmFs
OwogCiAgICAgLy8gSURCQ29ubmVjdGlvblRvQ2xpZW50CiAgICAgdmlydHVhbCB1aW50NjRfdCBp
ZGVudGlmaWVyKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC05MCw3ICs5MSw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRGVsZXRlUmVjb3JkKGNvbnN0IElEQlJlc3VsdERhdGEmKSBvdmVy
cmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkT3BlbkN1cnNvcihjb25zdCBJREJSZXN1
bHREYXRhJikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGRpZEl0ZXJhdGVDdXJz
b3IoY29uc3QgSURCUmVzdWx0RGF0YSYpIG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwgdm9p
ZCBmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KElEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uJiwgdWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbikgb3ZlcnJpZGUgZmluYWw7CisgICAg
dmlydHVhbCB2b2lkIGZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoSURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZUNvbm5lY3Rpb24mLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJ
ZGVudGlmaWVyLCB1aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKSBvdmVycmlkZSBmaW5hbDsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKSBvdmVycmlkZSBm
aW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5T3BlbkRCUmVxdWVzdEJsb2NrZWQoY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0X3Qgb2xkVmVy
c2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikgb3ZlcnJpZGUgZmluYWw7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmgK
aW5kZXggMGNjY2UxMC4uNzMwNWY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmgKQEAgLTE1MSw2ICsxNTEsMTAg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRFdmVudCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBpc1doZWVsRXZlbnQoKSBjb25zdDsKIAorI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQorICAgIHZpcnR1YWwgYm9vbCBpc1ZlcnNpb25DaGFuZ2VFdmVudCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKKwogICAgIGJvb2wgcHJvcGFnYXRpb25TdG9wcGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9wYWdhdGlvblN0b3BwZWQgfHwgbV9pbW1lZGlhdGVQcm9wYWdh
dGlvblN0b3BwZWQ7IH0KICAgICBib29sIGltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOyB9CiAK
</data>
<flag name="review"
          id="292958"
          type_id="1"
          status="+"
          setter="aestes"
    />
    <flag name="commit-queue"
          id="292959"
          type_id="3"
          status="-"
          setter="aestes"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268045</attachid>
            <date>2015-12-31 10:17:11 -0800</date>
            <delta_ts>2015-12-31 13:30:34 -0800</delta_ts>
            <desc>Downcast followup</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>2440</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwYjU2MDc2Li4xZDRjMzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTUtMTItMzEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlldyBmZWVkYmFjayBmb2xsb3d1cCBmb3I6CisgICAgICAgIE1vZGVybiBJREI6IE9u
bHkgZmlyZSBibG9ja2VkIGV2ZW50cyBhZnRlciBhbGwgb3BlbiBjb25uZWN0aW9ucyBoYXZlIGhh
bmRsZWQgdGhlaXIgdmVyc2lvbmNoYW5nZSBldmVudHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI1OTMKKworICAgICAgICBTdWdnZXN0ZWQgYnkg
QW5keSBFc3Rlcy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRh
YmFzZUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJEYXRhYmFzZTo6
ZGlzcGF0Y2hFdmVudCk6IFVzZSBkb3duY2FzdCBpbnN0ZWFkIG9mIHN0YXRpY19jYXN0LgorCisg
ICAgICAgIEFkZCB0cmFpdHMgdG8gc3VwcG9ydCBkb3duY2FzdDw+OgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL2NsaWVudC9JREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBsLmg6CisgICAgICAg
IChpc1R5cGUpOgorCiAyMDE1LTEyLTMwICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBNb2Rlcm4gSURCOiBPbmx5IGZpcmUgYmxvY2tlZCBldmVudHMgYWZ0ZXIg
YWxsIG9wZW4gY29ubmVjdGlvbnMgaGF2ZSBoYW5kbGVkIHRoZWlyIHZlcnNpb25jaGFuZ2UgZXZl
bnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQkRhdGFiYXNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcAppbmRleCBiYWY2Mzg2Li41MDM4NmM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
RGF0YWJhc2VJbXBsLmNwcApAQCAtMzc5LDcgKzM3OSw3IEBAIGJvb2wgSURCRGF0YWJhc2U6OmRp
c3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogICAgIGJvb2wgcmVzdWx0ID0gV2ViQ29yZTo6SURC
RGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogCiAgICAgaWYgKGV2ZW50LmlzVmVyc2lv
bkNoYW5nZUV2ZW50KCkgJiYgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hh
bmdlRXZlbnQpCi0gICAgICAgIHNlcnZlckNvbm5lY3Rpb24oKS5kaWRGaXJlVmVyc2lvbkNoYW5n
ZUV2ZW50KG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgc3RhdGljX2Nhc3Q8SURCVmVy
c2lvbkNoYW5nZUV2ZW50Jj4oZXZlbnQpLnJlcXVlc3RJZGVudGlmaWVyKCkpOworICAgICAgICBz
ZXJ2ZXJDb25uZWN0aW9uKCkuZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVudChtX2RhdGFiYXNlQ29u
bmVjdGlvbklkZW50aWZpZXIsIGRvd25jYXN0PElEQlZlcnNpb25DaGFuZ2VFdmVudD4oZXZlbnQp
LnJlcXVlc3RJZGVudGlmaWVyKCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJWZXJzaW9uQ2hh
bmdlRXZlbnRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5oCmluZGV4IGU5YWY1YjguLjY3MDU1YWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJWZXJzaW9u
Q2hhbmdlRXZlbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
Y2xpZW50L0lEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuaApAQCAtNjUsNSArNjUsOSBAQCBwcml2
YXRlOgogfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6SURCQ2xpZW50OjpJREJWZXJz
aW9uQ2hhbmdlRXZlbnQpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkV2
ZW50JiBldmVudCkgeyByZXR1cm4gZXZlbnQuaXNWZXJzaW9uQ2hhbmdlRXZlbnQoKTsgfQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCiAjZW5kaWYgLy8gSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbF9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>