<?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>197434</bug_id>
          
          <creation_ts>2019-04-30 13:10:57 -0700</creation_ts>
          <short_desc>[WinCairo] Implement Remote Web Inspector Client.</short_desc>
          <delta_ts>2019-05-20 14:18:26 -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>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>197029</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Ross Kirsling">ross.kirsling</assigned_to>
          <cc>basuke</cc>
    
    <cc>chris.reid</cc>
    
    <cc>commit-queue</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>stephan.szabo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>yoshiaki.jitsukawa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1531661</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2019-04-30 13:10:57 -0700</bug_when>
    <thetext>Add implementation of Remote Web Inspector client for WinCairo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1532088</commentid>
    <comment_count>1</comment_count>
      <attachid>368716</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2019-05-01 14:58:48 -0700</bug_when>
    <thetext>Created attachment 368716
PATCH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1532091</commentid>
    <comment_count>2</comment_count>
      <attachid>368718</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2019-05-01 15:01:29 -0700</bug_when>
    <thetext>Created attachment 368718
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1532139</commentid>
    <comment_count>3</comment_count>
      <attachid>368718</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-05-01 16:46:29 -0700</bug_when>
    <thetext>Comment on attachment 368718
Patch

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

&gt; Source/JavaScriptCore/inspector/remote/RemoteInspector.h:56
&gt; -#if PLATFORM(PLAYSTATION)
&gt; +#if USE(RI_SOCKET_SERVER)

Perhaps RWI would be clearer than just RI? Or maybe we could just say USE(INSPECTOR_SOCKET_SERVER) since we know the non-remote inspector doesn&apos;t need a socket server?

&gt; Source/JavaScriptCore/inspector/remote/socket/RemoteInspectorServer.cpp:63
&gt; +        LOG_ERROR(&quot;Inspector server listens for targets already.&quot;);

Nit: &quot;Inspector server is already listening for targets.&quot;

&gt; Source/JavaScriptCore/inspector/remote/socket/RemoteInspectorServer.cpp:112
&gt; +        { &quot;SetTargetList&quot;_s, reinterpret_cast&lt;CallHandler&gt;(&amp;RemoteInspectorServer::setTargetList)},

Nit: You added a space to this one but not the others. ;)

(Technically I think all of these pairs should begin and end with a space? But either way consistency is the most important...)

&gt; Source/JavaScriptCore/inspector/remote/socket/win/RemoteInspectorSocketWin.cpp:38
&gt; +static PlatformSocketType create();

If the declaration needs to be up here, should we just move the definition too?

&gt; Source/JavaScriptCore/inspector/remote/socket/win/RemoteInspectorSocketWin.cpp:88
&gt; +    if (socket == INVALID_SOCKET) {
&gt; +        LOG_ERROR(&quot;socket() failed, errno = %d&quot;, WSAGetLastError());
&gt; +        return INVALID_SOCKET_VALUE;

Seems like INVALID_SOCKET_VALUE is the same as INVALID_SOCKET on Windows -- need we use both?

&gt; Source/JavaScriptCore/inspector/remote/socket/win/RemoteInspectorSocketWin.cpp:231
&gt; +    // fcntl(socket, F_SETFD, FD_CLOEXEC);
&gt; +    // int flags = fcntl(socket, F_GETFL, 0);
&gt; +    // fcntl(socket, F_SETFL, flags | O_NONBLOCK);

Can these comments be deleted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1532144</commentid>
    <comment_count>4</comment_count>
      <attachid>368718</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2019-05-01 16:59:13 -0700</bug_when>
    <thetext>Comment on attachment 368718
Patch

Sorry, I sent a wrong patch to this bug!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1536955</commentid>
    <comment_count>5</comment_count>
      <attachid>370083</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-05-16 16:16:04 -0700</bug_when>
    <thetext>Created attachment 370083
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1536992</commentid>
    <comment_count>6</comment_count>
      <attachid>370083</attachid>
    <who name="Christopher Reid">chris.reid</who>
    <bug_when>2019-05-16 18:15:40 -0700</bug_when>
    <thetext>Comment on attachment 370083
Patch

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

Some informal comments

&gt; Source/WebKit/UIProcess/win/RemoteInspectorClient.cpp:93
&gt; +        RELEASE_LOG(&quot;Failed&quot;);

Is this release log needed?

&gt; Source/WebKit/UIProcess/win/WebView.cpp:241
&gt; +    m_page-&gt;setURLSchemeHandlerForScheme(RemoteInspectorProtocolHandler::create(*m_page), &quot;inspector&quot;);

It would be nice if this scheme was just accessible from URL bar navigations and not links in pages. It&apos;s consistent with what GTK does currently so it might be okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537185</commentid>
    <comment_count>7</comment_count>
      <attachid>370131</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-05-17 11:43:41 -0700</bug_when>
    <thetext>Created attachment 370131
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537600</commentid>
    <comment_count>8</comment_count>
      <attachid>370258</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-05-20 10:16:58 -0700</bug_when>
    <thetext>Created attachment 370258
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537616</commentid>
    <comment_count>9</comment_count>
      <attachid>370258</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2019-05-20 10:38:42 -0700</bug_when>
    <thetext>Comment on attachment 370258
Patch

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

It looks like Source/WebKit/UIProcess/win/RemoteWebInspectorProxyWin.cpp is the only real Windows file specific file. I would probably put the rest into a socket directory to match whats happening in JavaScriptCore.

&gt; Source/WebKit/UIProcess/RemoteWebInspectorProxy.cpp:173
&gt; +#if !ENABLE(REMOTE_INSPECTOR) || (!PLATFORM(MAC) &amp;&amp; !PLATFORM(GTK) &amp;&amp; !PLATFORM(WIN_CAIRO))

It seems like this is basically asking if its inspectable from itself. Are there other places where this is present? If so I would say to make this into its own ENABLE or USE. If not I would do || PLATFORM(IOS) || PLATFORM(WPE) and maybe even add a comment about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537648</commentid>
    <comment_count>10</comment_count>
      <attachid>370267</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-05-20 11:39:55 -0700</bug_when>
    <thetext>Created attachment 370267
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537664</commentid>
    <comment_count>11</comment_count>
      <attachid>370267</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2019-05-20 12:35:10 -0700</bug_when>
    <thetext>Comment on attachment 370267
Patch

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

&gt; Source/WebKit/UIProcess/RemoteWebInspectorProxy.cpp:173
&gt; +#if !ENABLE(REMOTE_INSPECTOR) &amp;&amp; !PLATFORM(MAC)

You&apos;re implementing this below. This is incorrect.

&gt; Source/WebKit/UIProcess/win/RemoteWebInspectorProxyWin.cpp:101
&gt; +WebPageProxy* RemoteWebInspectorProxy::platformCreateFrontendPageAndWindow()

Here&apos;s an implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537666</commentid>
    <comment_count>12</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-05-20 12:52:04 -0700</bug_when>
    <thetext>(In reply to Don Olmstead from comment #11)
&gt; Comment on attachment 370267 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=370267&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/RemoteWebInspectorProxy.cpp:173
&gt; &gt; +#if !ENABLE(REMOTE_INSPECTOR) &amp;&amp; !PLATFORM(MAC)
&gt; 
&gt; You&apos;re implementing this below. This is incorrect.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/win/RemoteWebInspectorProxyWin.cpp:101
&gt; &gt; +WebPageProxy* RemoteWebInspectorProxy::platformCreateFrontendPageAndWindow()
&gt; 
&gt; Here&apos;s an implementation.

It&apos;s not incorrect. RWIProxyMac is the only implementation that&apos;s not conditioned on ENABLE(REMOTE_INSPECTOR).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537667</commentid>
    <comment_count>13</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2019-05-20 12:54:22 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #12)
&gt; (In reply to Don Olmstead from comment #11)
&gt; &gt; Comment on attachment 370267 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=370267&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/UIProcess/RemoteWebInspectorProxy.cpp:173
&gt; &gt; &gt; +#if !ENABLE(REMOTE_INSPECTOR) &amp;&amp; !PLATFORM(MAC)
&gt; &gt; 
&gt; &gt; You&apos;re implementing this below. This is incorrect.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/UIProcess/win/RemoteWebInspectorProxyWin.cpp:101
&gt; &gt; &gt; +WebPageProxy* RemoteWebInspectorProxy::platformCreateFrontendPageAndWindow()
&gt; &gt; 
&gt; &gt; Here&apos;s an implementation.
&gt; 
&gt; It&apos;s not incorrect. RWIProxyMac is the only implementation that&apos;s not
&gt; conditioned on ENABLE(REMOTE_INSPECTOR).

My bad. I misread it as an || like the old one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537691</commentid>
    <comment_count>14</comment_count>
      <attachid>370267</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-20 14:17:07 -0700</bug_when>
    <thetext>Comment on attachment 370267
Patch

Clearing flags on attachment: 370267

Committed r245536: &lt;https://trac.webkit.org/changeset/245536&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537692</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-20 14:17:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537693</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-05-20 14:18:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/50960229&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>368716</attachid>
            <date>2019-05-01 14:58:48 -0700</date>
            <delta_ts>2019-05-01 15:01:29 -0700</delta_ts>
            <desc>PATCH</desc>
            <filename>197434.diff</filename>
            <type>text/plain</type>
            <size>36507</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3NTQ4YmQ5MWMzMi4uMjc3
ZDBhNzZhYWYgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAxOS0wNS0wMSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29ueS5j
b20+CisKKyAgICAgICAgW1dpbkNhaXJvXSBJbXBsZW1lbnQgUmVtb3RlIFdlYiBJbnNwZWN0b3Ig
Q2xpZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk3NDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBTb3VyY2UvY21ha2UvT3B0aW9uc1BsYXlTdGF0aW9uLmNtYWtlOgorICAgICAgICAqIFNvdXJj
ZS9jbWFrZS9PcHRpb25zV2luLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25z
V2luQ2Fpcm8uY21ha2U6CisKIDIwMTktMDQtMjkgIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVh
ZEBzb255LmNvbT4KIAogICAgICAgICBbQ01ha2VdIEFkZCBXRUJLSVRfRVhFQ1VUQUJMRSBtYWNy
bwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggMzhjY2FlMmI5NmUuLjY3ZWYwMzZmNzFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NSBAQAorMjAxOS0wNS0wMSAgQmFz
dWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29ueS5jb20+CisKKyAgICAgICAgW1dpbkNhaXJv
XSBJbXBsZW1lbnQgUmVtb3RlIFdlYiBJbnNwZWN0b3IgQ2xpZW50LgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3NDM0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IFdpbmRvd3MgaW1wbGVt
ZW50YXRpb24gZm9yIFNvY2tldCBCYWNrZW5kIG9mIFJlbW90ZUluc3BlY3RvciBhbmQgZW5hYmxl
IGl0IG9uIFdpbkNhaXJvCisgICAgICAgIGZvciBleHBlcmltZW50YWwgZmVhdHVyZS4KKworICAg
ICAgICBBbHNvIGFkZCBsaXN0ZW5lciBpbnRlcmZhY2UgZm9yIGNvbm5lY3Rpb24gYmV0d2VlYiBS
ZW1vdGVJbnNwZWN0b3IgYW5kIFJlbW90ZUluc3BlY3RvclNlcnZlcgorICAgICAgICBmb3IgZmxl
eGlibGUgY29uZmlndXJhdGlvbi4KKworICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAg
ICAgICAqIGluc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmg6CisgICAgICAgICogaW5z
cGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5oOgor
ICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50OjpkaWRB
Y2NlcHQpOgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3Rv
clNlcnZlci5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNlcnZlcjo6
Y29ubmVjdCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNlcnZlcjo6bGlz
dGVuRm9yVGFyZ2V0cyk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNlcnZl
cjo6ZGlkQWNjZXB0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU2VydmVy
OjpkaXNwYXRjaE1hcCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNlcnZl
cjo6c3RhcnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmFk
ZFNlcnZlckNvbm5lY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUv
c29ja2V0L1JlbW90ZUluc3BlY3RvclNlcnZlci5oOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1v
dGVJbnNwZWN0b3JTZXJ2ZXI6OlJlbW90ZUluc3BlY3RvclNlcnZlcik6CisgICAgICAgICogaW5z
cGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU29ja2V0LmNwcDoKKyAgICAgICAg
KEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3IpOgorICAgICAgICAo
SW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnN0YXJ0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6
UmVtb3RlSW5zcGVjdG9yOjpzdG9wSW50ZXJuYWwpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1v
dGVJbnNwZWN0b3I6OnNldFNlcnZlclBvcnQpOgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUv
c29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldC5oOgorICAgICAgICAqIGluc3BlY3Rvci9yZW1v
dGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmNwcDoKKyAgICAgICAgKElu
c3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6Omxpc3RlbkluZXQpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6Z2V0UG9ydCBj
b25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50
OjphY2NlcHRJbmV0U29ja2V0SWZFbmFibGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3Rl
L3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludC5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9yZW1vdGUvc29ja2V0L3Bvc2l4L1JlbW90ZUluc3BlY3RvclNvY2tldFBPU0lYLmNwcDoK
KyAgICAgICAgKEluc3BlY3Rvcjo6U29ja2V0Ojppbml0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6
U29ja2V0OjpsaXN0ZW4pOgorICAgICAgICAoSW5zcGVjdG9yOjpTb2NrZXQ6OmdldFBvcnQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L3dpbi9SZW1vdGVJbnNwZWN0b3JTb2Nr
ZXRXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6U29ja2V0Ojppbml0KToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6U29ja2V0OjpTb2NrZXQ6OlNvY2tldCk6CisgICAgICAgIChJbnNw
ZWN0b3I6OlNvY2tldDo6U29ja2V0Ojp+U29ja2V0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6U29j
a2V0OjpTb2NrZXQ6Om9wZXJhdG9yIFBsYXRmb3JtU29ja2V0VHlwZSBjb25zdCk6CisgICAgICAg
IChJbnNwZWN0b3I6OlNvY2tldDo6U29ja2V0OjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6U29ja2V0OjpTb2NrZXQ6OmxlYWspOgorICAgICAgICAoSW5zcGVjdG9y
OjpTb2NrZXQ6OmNyZWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlNvY2tldDo6c2V0T3B0KToK
KyAgICAgICAgKEluc3BlY3Rvcjo6U29ja2V0OjpzZXRPcHRFbmFibGVkKToKKyAgICAgICAgKElu
c3BlY3Rvcjo6U29ja2V0OjplbmFibGVPcHQpOgorICAgICAgICAoSW5zcGVjdG9yOjpTb2NrZXQ6
OmNvbm5lY3RUbyk6CisgICAgICAgIChJbnNwZWN0b3I6OlNvY2tldDo6YmluZEFuZExpc3Rlbik6
CisgICAgICAgIChJbnNwZWN0b3I6OlNvY2tldDo6Y29ubmVjdCk6CisgICAgICAgIChJbnNwZWN0
b3I6OlNvY2tldDo6bGlzdGVuKToKKyAgICAgICAgKEluc3BlY3Rvcjo6U29ja2V0OjphY2NlcHQp
OgorICAgICAgICAoSW5zcGVjdG9yOjpTb2NrZXQ6OmNyZWF0ZVBhaXIpOgorICAgICAgICAoSW5z
cGVjdG9yOjpTb2NrZXQ6OnNldHVwKToKKyAgICAgICAgKEluc3BlY3Rvcjo6U29ja2V0Ojppc1Zh
bGlkKToKKyAgICAgICAgKEluc3BlY3Rvcjo6U29ja2V0Ojppc0xpc3RlbmluZyk6CisgICAgICAg
IChJbnNwZWN0b3I6OlNvY2tldDo6Z2V0UG9ydCk6CisgICAgICAgIChJbnNwZWN0b3I6OlNvY2tl
dDo6cmVhZCk6CisgICAgICAgIChJbnNwZWN0b3I6OlNvY2tldDo6d3JpdGUpOgorICAgICAgICAo
SW5zcGVjdG9yOjpTb2NrZXQ6OmNsb3NlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6U29ja2V0Ojpw
cmVwYXJlUG9sbGluZyk6CisgICAgICAgIChJbnNwZWN0b3I6OlNvY2tldDo6cG9sbCk6CisgICAg
ICAgIChJbnNwZWN0b3I6OlNvY2tldDo6aXNSZWFkYWJsZSk6CisgICAgICAgIChJbnNwZWN0b3I6
OlNvY2tldDo6aXNXcml0YWJsZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlNvY2tldDo6bWFya1dh
aXRpbmdXcml0YWJsZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlNvY2tldDo6Y2xlYXJXYWl0aW5n
V3JpdGFibGUpOgorCiAyMDE5LTA0LTI5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5j
b20+CiAKICAgICAgICAgSklUU3R1YlJvdXRpbmVTZXQgd2FzdGVzIDE4MEtCIG9mIEhhc2hUYWJs
ZSBjYXBhY2l0eSBvbiBjYW4uY29tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
UGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1XaW4uY21h
a2UKaW5kZXggNDczMGU1NjY3ZDkuLjQyNWI5N2VjZDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1BsYXRmb3JtV2luLmNtYWtlCkBAIC0zMiw5ICszMiw1MSBAQCBpZiAoTk9UIFdURl9QTEFURk9S
TV9XSU5fQ0FJUk8pCiAgICAgKQogZW5kaWYgKCkKIAotbGlzdChSRU1PVkVfSVRFTSBKYXZhU2Ny
aXB0Q29yZV9TT1VSQ0VTCi0gICAgaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKLSkKK2lmIChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikKKyAgICBsaXN0KEFQ
UEVORCBKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAg
IiR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldCIKKyAgICApCisK
KyAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CisgICAgICAgIGluc3BlY3Rvci9yZW1vdGUvUmVtb3RlQXV0b21hdGlvblRhcmdldC5oCisgICAg
ICAgIGluc3BlY3Rvci9yZW1vdGUvUmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0LmgKKyAgICAgICAg
aW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVDb250cm9sbGFibGVUYXJnZXQuaAorICAgICAgICBpbnNw
ZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3Rpb25UYXJnZXQuaAorICAgICAgICBpbnNwZWN0b3Iv
cmVtb3RlL1JlbW90ZUluc3BlY3Rvci5oCisKKyAgICAgICAgaW5zcGVjdG9yL3JlbW90ZS9zb2Nr
ZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5oCisgICAgICAgIGluc3BlY3Rvci9y
ZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3Rvck1lc3NhZ2VQYXJzZXIuaAorICAgICAgICBpbnNw
ZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTZXJ2ZXIuaAorICAgICAgICBpbnNw
ZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXQuaAorICAgICAgICBpbnNw
ZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludC5oCisgICAg
KQorCisgICAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfU09VUkNFUworICAgICAgICBBUEkv
SlNSZW1vdGVJbnNwZWN0b3IuY3BwCisKKyAgICAgICAgaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVB
dXRvbWF0aW9uVGFyZ2V0LmNwcAorICAgICAgICBpbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUNvbm5l
Y3Rpb25Ub1RhcmdldC5jcHAKKyAgICAgICAgaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVDb250cm9s
bGFibGVUYXJnZXQuY3BwCisgICAgICAgIGluc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdGlv
blRhcmdldC5jcHAKKyAgICAgICAgaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuY3Bw
CisKKyAgICAgICAgaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVj
dGlvbkNsaWVudC5jcHAKKyAgICAgICAgaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5z
cGVjdG9yTWVzc2FnZVBhcnNlci5jcHAKKyAgICAgICAgaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yU2VydmVyLmNwcAorICAgICAgICBpbnNwZWN0b3IvcmVtb3RlL3NvY2tl
dC9SZW1vdGVJbnNwZWN0b3JTb2NrZXQuY3BwCisgICAgICAgIGluc3BlY3Rvci9yZW1vdGUvc29j
a2V0L1JlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmNwcAorCisgICAgICAgIGluc3BlY3Rv
ci9yZW1vdGUvc29ja2V0L3dpbi9SZW1vdGVJbnNwZWN0b3JTb2NrZXRXaW4uY3BwCisgICAgKQor
CisgICAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfTElCUkFSSUVTCisgICAgICAgIHdzb2Nr
MzIgd3MyXzMyCisgICAgKQorZWxzZSAoKQorICAgIGxpc3QoUkVNT1ZFX0lURU0gSmF2YVNjcmlw
dENvcmVfU09VUkNFUworICAgICAgICBpbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JD
b250cm9sbGVyLmNwcAorICAgICkKK2VuZGlmICgpCiAKIGZpbGUoQ09QWQogICAgICIke0pBVkFT
Q1JJUFRDT1JFX0RJUn0vSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS5yZXNv
dXJjZXMiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90
ZS9SZW1vdGVJbnNwZWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVt
b3RlL1JlbW90ZUluc3BlY3Rvci5oCmluZGV4IDcxYjdjZjRlZTU3Li4xOTZiYWQzMWMxMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5z
cGVjdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVt
b3RlSW5zcGVjdG9yLmgKQEAgLTUzLDcgKzUzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dEQnVzQ29u
bmVjdGlvbiBHREJ1c0Nvbm5lY3Rpb247CiB0eXBlZGVmIHN0cnVjdCBfR0RCdXNJbnRlcmZhY2VW
VGFibGUgR0RCdXNJbnRlcmZhY2VWVGFibGU7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFBMQVlT
VEFUSU9OKQorI2lmIFVTRShSSV9TT0NLRVRfU0VSVkVSKQogI2luY2x1ZGUgIlJlbW90ZUNvbm5l
Y3Rpb25Ub1RhcmdldC5oIgogI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGll
bnQuaCIKICNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludC5oIgpAQCAtNzcs
NyArNzcsNyBAQCBjbGFzcyBSZW1vdGVJbnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBKU19FWFBPUlRf
UFJJVkFURSBSZW1vdGVJbnNwZWN0b3IgZmluYWwKICNpZiBQTEFURk9STShDT0NPQSkKICAgICA6
IHB1YmxpYyBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uOjpDbGllbnQKLSNlbGlmIFBMQVRG
T1JNKFBMQVlTVEFUSU9OKQorI2VsaWYgVVNFKFJJX1NPQ0tFVF9TRVJWRVIpCiAgICAgOiBwdWJs
aWMgUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudAogI2VuZGlmCiB7CkBAIC0xNDYsMTIg
KzE0NiwxMyBAQCBwdWJsaWM6CiAjaWYgVVNFKEdMSUIpCiAgICAgdm9pZCByZXF1ZXN0QXV0b21h
dGlvblNlc3Npb24oY29uc3QgY2hhciogc2Vzc2lvbklELCBjb25zdCBDbGllbnQ6OlNlc3Npb25D
YXBhYmlsaXRpZXMmKTsKICNlbmRpZgotI2lmIFVTRShHTElCKSB8fCBQTEFURk9STShQTEFZU1RB
VElPTikKKyNpZiBVU0UoR0xJQikgfHwgVVNFKFJJX1NPQ0tFVF9TRVJWRVIpCiAgICAgdm9pZCBz
ZXR1cChUYXJnZXRJRCk7CiAgICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0KFRhcmdldElELCBj
b25zdCBjaGFyKiBtZXNzYWdlKTsKICNlbmRpZgotI2lmIFBMQVRGT1JNKFBMQVlTVEFUSU9OKQor
I2lmIFVTRShSSV9TT0NLRVRfU0VSVkVSKQogICAgIHN0YXRpYyB2b2lkIHNldENvbm5lY3Rpb25J
ZGVudGlmaWVyKFBsYXRmb3JtU29ja2V0VHlwZSk7CisgICAgc3RhdGljIHZvaWQgc2V0U2VydmVy
UG9ydCh1aW50MTZfdCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTIwNiw3ICsyMDcsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgcmVjZWl2ZWRBdXRvbWF0aWNJbnNwZWN0aW9uUmVqZWN0TWVzc2Fn
ZShOU0RpY3Rpb25hcnkgKnVzZXJJbmZvKTsKICAgICB2b2lkIHJlY2VpdmVkQXV0b21hdGlvblNl
c3Npb25SZXF1ZXN0TWVzc2FnZShOU0RpY3Rpb25hcnkgKnVzZXJJbmZvKTsKICNlbmRpZgotI2lm
IFBMQVRGT1JNKFBMQVlTVEFUSU9OKQorI2lmIFVTRShSSV9TT0NLRVRfU0VSVkVSKQogICAgIEhh
c2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4mIGRpc3BhdGNoTWFwKCkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBkaWRDbG9zZShDb25uZWN0aW9uSUQpIG92ZXJyaWRlOwogCkBAIC0yMzcsOSArMjM4LDEw
IEBAIHByaXZhdGU6CiAgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7CiAj
ZW5kaWYKIAotI2lmIFBMQVRGT1JNKFBMQVlTVEFUSU9OKQorI2lmIFVTRShSSV9TT0NLRVRfU0VS
VkVSKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludD4g
bV9zb2NrZXRDb25uZWN0aW9uOwogICAgIHN0YXRpYyBQbGF0Zm9ybVNvY2tldFR5cGUgc19jb25u
ZWN0aW9uSWRlbnRpZmllcjsKKyAgICBzdGF0aWMgdWludDE2X3Qgc19zZXJ2ZXJQb3J0OwogICAg
IE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gbV9jbGllbnRJRDsKICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5z
cGVjdG9yQ29ubmVjdGlvbkNsaWVudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuaAppbmRleCAz
NDhlMzkxNmJjMy4uMmIxZjcyNDg3YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1Jl
bW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCiAKKyNpbmNsdWRlICJSZW1vdGVDb250cm9sbGFibGVU
YXJnZXQuaCIKICNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludC5oIgogI2lu
Y2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBA
IC0zNiw3ICszNyw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogY2xhc3MgUmVtb3RlSW5zcGVj
dG9yQ29ubmVjdGlvbkNsaWVudCA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW1vdGVJbnNwZWN0
b3JDb25uZWN0aW9uQ2xpZW50PiB7CiBwdWJsaWM6CiAgICAgdm9pZCBkaWRSZWNlaXZlV2ViSW5z
cGVjdG9yRXZlbnQoQ29ubmVjdGlvbklELCBWZWN0b3I8dWludDhfdD4mJik7Ci0gICAgdmlydHVh
bCB2b2lkIGRpZEFjY2VwdChDb25uZWN0aW9uSUQsIFNvY2tldDo6RG9tYWluKSB7IH07CisgICAg
dmlydHVhbCB2b2lkIGRpZEFjY2VwdChDb25uZWN0aW9uSUQsIENvbm5lY3Rpb25JRCwgU29ja2V0
OjpEb21haW4pIHsgfTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2UoQ29ubmVjdGlvbklEKSA9
IDA7CiAKICAgICBzdHJ1Y3QgRXZlbnQgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNlcnZlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yU2VydmVyLmNwcAppbmRleCBlNjBmYzUyNzcwNi4uMGNlM2M1YzIzMmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNw
ZWN0b3JTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVt
b3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTZXJ2ZXIuY3BwCkBAIC0zMywzMCArMzMsNTggQEAK
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjph
ZGRTZXJ2ZXJDb25uZWN0aW9uKFBsYXRmb3JtU29ja2V0VHlwZSBpZGVudGlmaWVyKQorT3B0aW9u
YWw8UGxhdGZvcm1Tb2NrZXRUeXBlPiBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmNvbm5lY3QoKQog
ewotICAgIGlmICghbV9zZXJ2ZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fc2VydmVy
KSB7CisgICAgICAgIExPR19FUlJPUigiSW5zcGVjdG9yIHNlcnZlciBpcyBub3QgcnVubmluZyIp
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KIAotICAgIGlmIChhdXRvIGlk
ID0gbV9zZXJ2ZXItPmNyZWF0ZUNsaWVudChpZGVudGlmaWVyKSkgewotICAgICAgICBMb2NrSG9s
ZGVyIGxvY2sobV9jb25uZWN0aW9uc0xvY2spOwotICAgICAgICBtX2luc3BlY3RvckNvbm5lY3Rp
b25zLmFwcGVuZChpZC52YWx1ZSgpKTsKKyAgICBpZiAoYXV0byBzb2NrZXRzID0gU29ja2V0Ojpj
cmVhdGVQYWlyKCkpIHsKKyAgICAgICAgaWYgKGF1dG8gaWQgPSBtX3NlcnZlci0+Y3JlYXRlQ2xp
ZW50KHNvY2tldHMtPmF0KDApKSkgeworICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fY29u
bmVjdGlvbnNMb2NrKTsKKyAgICAgICAgICAgIG1faW5zcGVjdG9yQ29ubmVjdGlvbnMuYXBwZW5k
KGlkLnZhbHVlKCkpOworCisgICAgICAgICAgICByZXR1cm4gc29ja2V0cy0+YXQoMSk7CisgICAg
ICAgIH0KICAgICB9CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi12b2lkIFJlbW90
ZUluc3BlY3RvclNlcnZlcjo6ZGlkQWNjZXB0KENvbm5lY3Rpb25JRCBpZCwgU29ja2V0OjpEb21h
aW4gdHlwZSkKK09wdGlvbmFsPHVpbnQxNl90PiBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6Omxpc3Rl
bkZvclRhcmdldHMoKQoreworICAgIGlmICghbV9zZXJ2ZXIpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJJbnNwZWN0b3Igc2VydmVyIGlzIG5vdCBydW5uaW5nIik7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKG1faW5zcGVjdG9yTGlzdGVuZXIpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJJbnNwZWN0b3Igc2VydmVyIGxpc3RlbnMgZm9yIHRhcmdldHMgYWxyZWFk
eS4iKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoYXV0
byBjb25uZWN0aW9uID0gbV9zZXJ2ZXItPmxpc3RlbkluZXQoIjEyNy4wLjAuMSIsIDApKSB7Cisg
ICAgICAgIG1faW5zcGVjdG9yTGlzdGVuZXIgPSBjb25uZWN0aW9uOworICAgICAgICByZXR1cm4g
bV9zZXJ2ZXItPmdldFBvcnQoKmNvbm5lY3Rpb24pOworICAgIH0KKworICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpkaWRBY2NlcHQoQ29u
bmVjdGlvbklEIGlkLCBDb25uZWN0aW9uSUQgbGlzdGVuZXJJRCwgU29ja2V0OjpEb21haW4gdHlw
ZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotICAgIGlmICh0eXBlID09IFNv
Y2tldDo6RG9tYWluOjpOZXR3b3JrKSB7CisgICAgaWYgKHR5cGUgPT0gU29ja2V0OjpEb21haW46
OkxvY2FsIHx8IChtX2luc3BlY3Rvckxpc3RlbmVyICYmIGxpc3RlbmVySUQgPT0gKm1faW5zcGVj
dG9yTGlzdGVuZXIpKSB7CisgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX2Nvbm5lY3Rpb25zTG9j
ayk7CisgICAgICAgIG1faW5zcGVjdG9yQ29ubmVjdGlvbnMuYXBwZW5kKGlkKTsKKyAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gU29ja2V0OjpEb21haW46Ok5ldHdvcmspIHsKICAgICAgICAgaWYgKG1f
Y2xpZW50Q29ubmVjdGlvbikgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJJbnNwZWN0b3Igc2Vy
dmVyIGNhbiBhY2NlcHQgb25seSAxIGNsaWVudCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIG1fY2xpZW50Q29ubmVjdGlvbiA9IGlkOwotICAgIH0gZWxzZSBpZiAo
dHlwZSA9PSBTb2NrZXQ6OkRvbWFpbjo6TG9jYWwpIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2Nr
KG1fY29ubmVjdGlvbnNMb2NrKTsKLSAgICAgICAgbV9pbnNwZWN0b3JDb25uZWN0aW9ucy5hcHBl
bmQoaWQpOwogICAgIH0KIH0KIApAQCAtODEsMTIgKzEwOSwxMiBAQCB2b2lkIFJlbW90ZUluc3Bl
Y3RvclNlcnZlcjo6ZGlkQ2xvc2UoQ29ubmVjdGlvbklEIGlkKQogSGFzaE1hcDxTdHJpbmcsIFJl
bW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQ6OkNhbGxIYW5kbGVyPiYgUmVtb3RlSW5zcGVj
dG9yU2VydmVyOjpkaXNwYXRjaE1hcCgpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhh
c2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4+IGRpc3BhdGNoTWFwID0gSGFzaE1hcDxTdHJpbmcs
IENhbGxIYW5kbGVyPih7Ci0gICAgICAgIHsiU2V0VGFyZ2V0TGlzdCJfcywgJlJlbW90ZUluc3Bl
Y3RvclNlcnZlcjo6c2V0VGFyZ2V0TGlzdH0sCi0gICAgICAgIHsiU2V0dXBJbnNwZWN0b3JDbGll
bnQiX3MsICZSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNldHVwSW5zcGVjdG9yQ2xpZW50fSwKLSAg
ICAgICAgeyJTZXR1cCJfcywgJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2V0dXB9LAotICAgICAg
ICB7IkZyb250ZW5kRGlkQ2xvc2UiX3MsICZSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmNsb3NlfSwK
LSAgICAgICAgeyJTZW5kTWVzc2FnZVRvRnJvbnRlbmQiX3MsICZSZW1vdGVJbnNwZWN0b3JTZXJ2
ZXI6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZH0sCi0gICAgICAgIHsiU2VuZE1lc3NhZ2VUb0JhY2tl
bmQiX3MsICZSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNlbmRNZXNzYWdlVG9CYWNrZW5kfSwKKyAg
ICAgICAgeyAiU2V0VGFyZ2V0TGlzdCJfcywgcmVpbnRlcnByZXRfY2FzdDxDYWxsSGFuZGxlcj4o
JlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2V0VGFyZ2V0TGlzdCl9LAorICAgICAgICB7IlNldHVw
SW5zcGVjdG9yQ2xpZW50Il9zLCByZWludGVycHJldF9jYXN0PENhbGxIYW5kbGVyPigmUmVtb3Rl
SW5zcGVjdG9yU2VydmVyOjpzZXR1cEluc3BlY3RvckNsaWVudCl9LAorICAgICAgICB7IlNldHVw
Il9zLCByZWludGVycHJldF9jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVy
OjpzZXR1cCl9LAorICAgICAgICB7IkZyb250ZW5kRGlkQ2xvc2UiX3MsIHJlaW50ZXJwcmV0X2Nh
c3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmNsb3NlKX0sCisgICAgICAg
IHsiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIl9zLCByZWludGVycHJldF9jYXN0PENhbGxIYW5kbGVy
PigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpfSwKKyAgICAg
ICAgeyJTZW5kTWVzc2FnZVRvQmFja2VuZCJfcywgcmVpbnRlcnByZXRfY2FzdDxDYWxsSGFuZGxl
cj4oJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQpfSwKICAgICB9
KTsKIAogICAgIHJldHVybiBkaXNwYXRjaE1hcDsKQEAgLTEwOCw3ICsxMzYsNyBAQCBib29sIFJl
bW90ZUluc3BlY3RvclNlcnZlcjo6c3RhcnQodWludDE2X3QgcG9ydCkKIHsKICAgICBtX3NlcnZl
ciA9IFJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjpjcmVhdGUodGhpcywgIlJlbW90ZUlu
c3BlY3RvclNlcnZlciIpOwogCi0gICAgaWYgKCFtX3NlcnZlci0+bGlzdGVuSW5ldChwb3J0KSkg
eworICAgIGlmICghbV9zZXJ2ZXItPmxpc3RlbkluZXQobnVsbHB0ciwgcG9ydCkpIHsKICAgICAg
ICAgbV9zZXJ2ZXIgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1Jl
bW90ZUluc3BlY3RvclNlcnZlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9y
ZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNlcnZlci5oCmluZGV4IGI1MDgwYWVkNGUxLi5k
MzUxYzlmYmZhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9y
ZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNlcnZlci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTZXJ2ZXIuaApA
QCAtNDMsOSArNDMsMTMgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgc3Rh
cnQodWludDE2X3QpOwogICAgIGJvb2wgaXNSdW5uaW5nKCkgY29uc3QgeyByZXR1cm4gISFtX3Nl
cnZlcjsgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRTZXJ2ZXJDb25uZWN0aW9u
KFBsYXRmb3JtU29ja2V0VHlwZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8dWlu
dDE2X3Q+IGxpc3RlbkZvclRhcmdldHMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBPcHRpb25h
bDxQbGF0Zm9ybVNvY2tldFR5cGU+IGNvbm5lY3QoKTsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgTmV2ZXJEZXN0cm95ZWQ8UmVtb3RlSW5zcGVjdG9yU2VydmVyPjsKKyAgICBSZW1vdGVJ
bnNwZWN0b3JTZXJ2ZXIoKSB7IFNvY2tldDo6aW5pdCgpOyB9CisKICAgICB2b2lkIGNvbm5lY3Rp
b25DbG9zZWQoQ29ubmVjdGlvbklEKTsKIAogICAgIHZvaWQgc2V0VGFyZ2V0TGlzdChjb25zdCBF
dmVudCYpOwpAQCAtNTgsNyArNjIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2VuZENsb3NlRXZl
bnQoQ29ubmVjdGlvbklELCBUYXJnZXRJRCk7CiAgICAgdm9pZCBjbGllbnRDb25uZWN0aW9uQ2xv
c2VkKCk7CiAKLSAgICB2b2lkIGRpZEFjY2VwdChDb25uZWN0aW9uSUQsIFNvY2tldDo6RG9tYWlu
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEFjY2VwdChDb25uZWN0aW9uSUQsIENvbm5lY3Rpb25J
RCBsaXN0ZW5lcklELCBTb2NrZXQ6OkRvbWFpbikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRDbG9z
ZShDb25uZWN0aW9uSUQpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZW5kV2ViSW5zcGVjdG9yRXZl
bnQoQ29ubmVjdGlvbklELCBjb25zdCBTdHJpbmcmKTsKQEAgLTcyLDYgKzc2LDkgQEAgcHJpdmF0
ZToKICAgICBWZWN0b3I8Q29ubmVjdGlvbklEPiBtX2luc3BlY3RvckNvbm5lY3Rpb25zOwogICAg
IExvY2sgbV9jb25uZWN0aW9uc0xvY2s7CiAKKyAgICAvLyBMaXN0ZW5lciBmb3IgdGFyZ2V0cy4K
KyAgICBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IG1faW5zcGVjdG9yTGlzdGVuZXI7CisKICAgICAv
LyBDb25uZWN0aW9ucyBmcm9tIFJlbW90ZUluc3BlY3RvckNsaWVudC4KICAgICBPcHRpb25hbDxD
b25uZWN0aW9uSUQ+IG1fY2xpZW50Q29ubmVjdGlvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU29j
a2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9S
ZW1vdGVJbnNwZWN0b3JTb2NrZXQuY3BwCmluZGV4IGI0MzFkZjBhN2Y0Li41YTJjYmRlODgyZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0
L1JlbW90ZUluc3BlY3RvclNvY2tldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldC5jcHAKQEAgLTM5LDYg
KzM5LDcgQEAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBQbGF0Zm9ybVNvY2tldFR5cGUgUmVt
b3RlSW5zcGVjdG9yOjpzX2Nvbm5lY3Rpb25JZGVudGlmaWVyID0gSU5WQUxJRF9TT0NLRVRfVkFM
VUU7Cit1aW50MTZfdCBSZW1vdGVJbnNwZWN0b3I6OnNfc2VydmVyUG9ydCA9IDA7CiAKIFJlbW90
ZUluc3BlY3RvciYgUmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0b24oKQogewpAQCAtNDgsNyArNDks
NyBAQCBSZW1vdGVJbnNwZWN0b3ImIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkKIAogUmVt
b3RlSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3IoKQogewotICAgIHN0YXJ0KCk7CisgICAgU29j
a2V0Ojppbml0KCk7CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpkaWRDbG9zZShDb25uZWN0
aW9uSUQgaWQpCkBAIC04NywxNCArODgsMTggQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0YXJ0
KCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9tdXRleCk7CiAKLSAgICBpZiAobV9lbmFibGVk
IHx8IHNfY29ubmVjdGlvbklkZW50aWZpZXIgPT0gSU5WQUxJRF9TT0NLRVRfVkFMVUUpCisgICAg
aWYgKG1fZW5hYmxlZCB8fCAoc19jb25uZWN0aW9uSWRlbnRpZmllciA9PSBJTlZBTElEX1NPQ0tF
VF9WQUxVRSAmJiAhc19zZXJ2ZXJQb3J0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9lbmFi
bGVkID0gdHJ1ZTsKIAogICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IFJlbW90ZUluc3BlY3RvclNv
Y2tldEVuZHBvaW50OjpjcmVhdGUodGhpcywgIlJlbW90ZUluc3BlY3RvciIpOwogCi0gICAgbV9j
bGllbnRJRCA9IG1fc29ja2V0Q29ubmVjdGlvbi0+Y3JlYXRlQ2xpZW50KHNfY29ubmVjdGlvbklk
ZW50aWZpZXIpOworICAgIGlmIChzX2Nvbm5lY3Rpb25JZGVudGlmaWVyKSB7CisgICAgICAgIG1f
Y2xpZW50SUQgPSBtX3NvY2tldENvbm5lY3Rpb24tPmNyZWF0ZUNsaWVudChzX2Nvbm5lY3Rpb25J
ZGVudGlmaWVyKTsKKyAgICAgICAgc19jb25uZWN0aW9uSWRlbnRpZmllciA9IElOVkFMSURfU09D
S0VUX1ZBTFVFOworICAgIH0gZWxzZQorICAgICAgICBtX2NsaWVudElEID0gbV9zb2NrZXRDb25u
ZWN0aW9uLT5jb25uZWN0SW5ldCgiMTI3LjAuMC4xIiwgc19zZXJ2ZXJQb3J0KTsKIAogICAgIGlm
ICghbV90YXJnZXRNYXAuaXNFbXB0eSgpKQogICAgICAgICBwdXNoTGlzdGluZ3NTb29uKCk7CkBA
IC0xMTcsNyArMTIyLDYgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0b3BJbnRlcm5hbChTdG9w
U291cmNlKQogICAgIG1fYXV0b21hdGljSW5zcGVjdGlvblBhdXNlZCA9IGZhbHNlOwogICAgIG1f
c29ja2V0Q29ubmVjdGlvbiA9IG51bGxwdHI7CiAgICAgbV9jbGllbnRJRCA9IFdURjo6bnVsbG9w
dDsKLSAgICBzX2Nvbm5lY3Rpb25JZGVudGlmaWVyID0gSU5WQUxJRF9TT0NLRVRfVkFMVUU7CiB9
CiAKIFRhcmdldExpc3RpbmcgUmVtb3RlSW5zcGVjdG9yOjpsaXN0aW5nRm9ySW5zcGVjdGlvblRh
cmdldChjb25zdCBSZW1vdGVJbnNwZWN0aW9uVGFyZ2V0JiB0YXJnZXQpIGNvbnN0CkBAIC0yOTUs
NiArMjk5LDExIEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzZXRDb25uZWN0aW9uSWRlbnRpZmll
cihQbGF0Zm9ybVNvY2tldFR5cGUgY29ubmVjdGlvbklkZW50CiAgICAgUmVtb3RlSW5zcGVjdG9y
OjpzX2Nvbm5lY3Rpb25JZGVudGlmaWVyID0gY29ubmVjdGlvbklkZW50aWZpZXI7CiB9CiAKK3Zv
aWQgUmVtb3RlSW5zcGVjdG9yOjpzZXRTZXJ2ZXJQb3J0KHVpbnQxNl90IHBvcnQpCit7CisgICAg
UmVtb3RlSW5zcGVjdG9yOjpzX3NlcnZlclBvcnQgPSBwb3J0OworfQorCiB9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKIAogI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90
ZUluc3BlY3RvclNvY2tldC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1v
dGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldC5oCmluZGV4IDJmMmRhZGIyNjc2Li5iY2M2
MDlmYzJiNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1v
dGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXQuaApAQCAt
NjYsMTQgKzY2LDE3IEBAIGVudW0gY2xhc3MgRG9tYWluIHsKICAgICBOZXR3b3JrLAogfTsKIAor
dm9pZCBpbml0KCk7CisKIE9wdGlvbmFsPFBsYXRmb3JtU29ja2V0VHlwZT4gY29ubmVjdChjb25z
dCBjaGFyKiBzZXJ2ZXJBZGRyZXNzLCB1aW50MTZfdCBzZXJ2ZXJQb3J0KTsKLU9wdGlvbmFsPFBs
YXRmb3JtU29ja2V0VHlwZT4gbGlzdGVuKHVpbnQxNl90IHBvcnQpOworT3B0aW9uYWw8UGxhdGZv
cm1Tb2NrZXRUeXBlPiBsaXN0ZW4oY29uc3QgY2hhciogYWRkcmVzcywgdWludDE2X3QgcG9ydCk7
CiBPcHRpb25hbDxQbGF0Zm9ybVNvY2tldFR5cGU+IGFjY2VwdChQbGF0Zm9ybVNvY2tldFR5cGUp
OwogT3B0aW9uYWw8c3RkOjphcnJheTxQbGF0Zm9ybVNvY2tldFR5cGUsIDI+PiBjcmVhdGVQYWly
KCk7CiAKIHZvaWQgc2V0dXAoUGxhdGZvcm1Tb2NrZXRUeXBlKTsKIGJvb2wgaXNWYWxpZChQbGF0
Zm9ybVNvY2tldFR5cGUpOwogYm9vbCBpc0xpc3RlbmluZyhQbGF0Zm9ybVNvY2tldFR5cGUpOwor
dWludDE2X3QgZ2V0UG9ydChQbGF0Zm9ybVNvY2tldFR5cGUpOwogCiBPcHRpb25hbDxzaXplX3Q+
IHJlYWQoUGxhdGZvcm1Tb2NrZXRUeXBlLCB2b2lkKiBidWZmZXIsIGludCBidWZmZXJTaXplKTsK
IE9wdGlvbmFsPHNpemVfdD4gd3JpdGUoUGxhdGZvcm1Tb2NrZXRUeXBlLCBjb25zdCB2b2lkKiBk
YXRhLCBpbnQgc2l6ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3Rv
clNvY2tldEVuZHBvaW50LmNwcAppbmRleCA2NDdmZjY5MzU3YS4uNzEwMTY2OGE5N2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1v
dGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmNw
cApAQCAtNzYsMTQgKzc2LDEyIEBAIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gUmVtb3RlSW5zcGVj
dG9yU29ja2V0RW5kcG9pbnQ6OmNvbm5lY3RJbmV0KGNvbnN0IGNoYXIqIHNlCiAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIH0KIAotYm9vbCBSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6
bGlzdGVuSW5ldCh1aW50MTZfdCBwb3J0KQorT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBSZW1vdGVJ
bnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6bGlzdGVuSW5ldChjb25zdCBjaGFyKiBhZGRyZXNzLCB1
aW50MTZfdCBwb3J0KQogewotICAgIGlmIChhdXRvIHNvY2tldCA9IFNvY2tldDo6bGlzdGVuKHBv
cnQpKSB7Ci0gICAgICAgIGlmIChjcmVhdGVDbGllbnQoKnNvY2tldCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgaWYgKGF1dG8gc29ja2V0ID0gU29ja2V0OjpsaXN0ZW4o
YWRkcmVzcywgcG9ydCkpCisgICAgICAgIHJldHVybiBjcmVhdGVDbGllbnQoKnNvY2tldCk7CiAK
LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogYm9vbCBS
ZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6aXNMaXN0ZW5pbmcoQ29ubmVjdGlvbklEIGlk
KQpAQCAtMTYxLDYgKzE1OSwxNSBAQCBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IFJlbW90ZUluc3Bl
Y3RvclNvY2tldEVuZHBvaW50OjpjcmVhdGVDbGllbnQoUGxhdGZvcm1Tb2NrZQogICAgIHJldHVy
biBpZDsKIH0KIAorT3B0aW9uYWw8dWludDE2X3Q+IFJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBv
aW50OjpnZXRQb3J0KENvbm5lY3Rpb25JRCBpZCkgY29uc3QKK3sKKyAgICBMb2NrSG9sZGVyIGxv
Y2sobV9jb25uZWN0aW9uc0xvY2spOworICAgIGlmIChjb25zdCBhdXRvJiBjb25uZWN0aW9uID0g
bV9jb25uZWN0aW9ucy5nZXQoaWQpKQorICAgICAgICByZXR1cm4gU29ja2V0OjpnZXRQb3J0KGNv
bm5lY3Rpb24tPnNvY2tldCk7CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCiB2b2lk
IFJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjpyZWN2SWZFbmFibGVkKENvbm5lY3Rpb25J
RCBpZCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9jb25uZWN0aW9uc0xvY2spOwpAQCAtMjQ2
LDcgKzI1Myw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OmFjY2VwdElu
ZXRTb2NrZXRJZkVuYWJsZWQoQ29ubmVjdGlvbklEIGlkKQogICAgICAgICAgICAgbG9jay51bmxv
Y2tFYXJseSgpOwogICAgICAgICAgICAgaWYgKGF1dG8gbmV3SUQgPSBjcmVhdGVDbGllbnQoKnNv
Y2tldCkpIHsKICAgICAgICAgICAgICAgICBpZiAobV9pbnNwZWN0b3JDbGllbnQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQtPmRpZEFjY2VwdChuZXdJRC52YWx1ZSgp
LCBTb2NrZXQ6OkRvbWFpbjo6TmV0d29yayk7CisgICAgICAgICAgICAgICAgICAgIG1faW5zcGVj
dG9yQ2xpZW50LT5kaWRBY2NlcHQobmV3SUQudmFsdWUoKSwgaWQsIFNvY2tldDo6RG9tYWluOjpO
ZXR3b3JrKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNv
Y2tldEVuZHBvaW50LmgKaW5kZXggNjY5YTg0ODdmNzMuLjc5NjU3YzI0NTlmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5z
cGVjdG9yU29ja2V0RW5kcG9pbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQuaApAQCAtNTMs
MTIgKzUzLDE0IEBAIHB1YmxpYzoKICAgICB+UmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQo
KTsKIAogICAgIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gY29ubmVjdEluZXQoY29uc3QgY2hhciog
c2VydmVyQWRkciwgdWludDE2X3Qgc2VydmVyUG9ydCk7Ci0gICAgYm9vbCBsaXN0ZW5JbmV0KHVp
bnQxNl90IHBvcnQpOworICAgIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gbGlzdGVuSW5ldChjb25z
dCBjaGFyKiBhZGRyZXNzLCB1aW50MTZfdCBwb3J0KTsKIAogICAgIHZvaWQgc2VuZChDb25uZWN0
aW9uSUQsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCk7CiAKICAgICBPcHRpb25hbDxDb25u
ZWN0aW9uSUQ+IGNyZWF0ZUNsaWVudChQbGF0Zm9ybVNvY2tldFR5cGUgZmQpOwogCisgICAgT3B0
aW9uYWw8dWludDE2X3Q+IGdldFBvcnQoQ29ubmVjdGlvbklEKSBjb25zdDsKKwogcHJvdGVjdGVk
OgogICAgIHZvaWQgcmVjdklmRW5hYmxlZChDb25uZWN0aW9uSUQpOwogICAgIHZvaWQgc2VuZElm
RW5hYmxlZChDb25uZWN0aW9uSUQpOwpAQCAtNjcsNyArNjksNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBhY2NlcHRJbmV0U29ja2V0SWZFbmFibGVkKENvbm5lY3Rpb25JRCk7CiAgICAgYm9vbCBp
c0xpc3RlbmluZyhDb25uZWN0aW9uSUQpOwogCi0gICAgTG9jayBtX2Nvbm5lY3Rpb25zTG9jazsK
KyAgICBtdXRhYmxlIExvY2sgbV9jb25uZWN0aW9uc0xvY2s7CiAgICAgSGFzaE1hcDxDb25uZWN0
aW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxTb2NrZXQ6OkNvbm5lY3Rpb24+PiBtX2Nvbm5lY3Rpb25z
OwogCiAgICAgUGxhdGZvcm1Tb2NrZXRUeXBlIG1fd2FrZXVwU2VuZFNvY2tldCB7IElOVkFMSURf
U09DS0VUX1ZBTFVFIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3JlbW90ZS9zb2NrZXQvcG9zaXgvUmVtb3RlSW5zcGVjdG9yU29ja2V0UE9TSVguY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L3Bvc2l4L1JlbW90
ZUluc3BlY3RvclNvY2tldFBPU0lYLmNwcAppbmRleCBkZWY0ZGI1NTg2MS4uZmQzMjBhOTIxNDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tl
dC9wb3NpeC9SZW1vdGVJbnNwZWN0b3JTb2NrZXRQT1NJWC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L3Bvc2l4L1JlbW90ZUluc3BlY3RvclNv
Y2tldFBPU0lYLmNwcApAQCAtMzksNiArMzksMTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
IG5hbWVzcGFjZSBTb2NrZXQgewogCit2b2lkIGluaXQoKQoreworfQorCiBPcHRpb25hbDxQbGF0
Zm9ybVNvY2tldFR5cGU+IGNvbm5lY3QoY29uc3QgY2hhciogc2VydmVyQWRkcmVzcywgdWludDE2
X3Qgc2VydmVyUG9ydCkKIHsKICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcmVzcyA9IHsgfTsK
QEAgLTYzLDkgKzY3LDkgQEAgT3B0aW9uYWw8UGxhdGZvcm1Tb2NrZXRUeXBlPiBjb25uZWN0KGNv
bnN0IGNoYXIqIHNlcnZlckFkZHJlc3MsIHVpbnQxNl90IHNlcnZlclAKICAgICByZXR1cm4gZmQ7
CiB9CiAKLU9wdGlvbmFsPFBsYXRmb3JtU29ja2V0VHlwZT4gbGlzdGVuKHVpbnQxNl90IHBvcnQp
CitPcHRpb25hbDxQbGF0Zm9ybVNvY2tldFR5cGU+IGxpc3Rlbihjb25zdCBjaGFyKiBhZGRyZXNz
LCB1aW50MTZfdCBwb3J0KQogewotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyZXNzID0geyB9
OworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyID0geyB9OwogCiAgICAgaW50IGZkTGlzdGVu
ID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7CiAgICAgaWYgKGZk
TGlzdGVuIDwgMCkgewpAQCAtODYsMTAgKzkwLDEzIEBAIE9wdGlvbmFsPFBsYXRmb3JtU29ja2V0
VHlwZT4gbGlzdGVuKHVpbnQxNl90IHBvcnQpCiAgICAgfQogCiAgICAgLy8gRklYTUU6IFN1cHBv
cnQgQUZfSU5FVDYgY29ubmVjdGlvbnMuCi0gICAgYWRkcmVzcy5zaW5fZmFtaWx5ID0gQUZfSU5F
VDsKLSAgICBhZGRyZXNzLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOwotICAg
IGFkZHJlc3Muc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKLSAgICBlcnJvciA9IDo6YmluZChmZExp
c3RlbiwgKHN0cnVjdCBzb2NrYWRkciopJmFkZHJlc3MsIHNpemVvZihhZGRyZXNzKSk7CisgICAg
YWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICBpZiAoYWRkcmVzcykKKyAgICAgICAgaW5l
dF9hdG9uKGFkZHJlc3MsICZhZGRyLnNpbl9hZGRyKTsKKyAgICBlbHNlCisgICAgICAgIGFkZHIu
c2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisgICAgYWRkci5zaW5fcG9ydCA9
IGh0b25zKHBvcnQpOworICAgIGVycm9yID0gOjpiaW5kKGZkTGlzdGVuLCAoc3RydWN0IHNvY2th
ZGRyKikmYWRkciwgc2l6ZW9mKGFkZHIpKTsKICAgICBpZiAoZXJyb3IgPCAwKSB7CiAgICAgICAg
IExPR19FUlJPUigiYmluZCgpIGZhaWxlZCwgZXJybm8gPSAlZCIsIGVycm5vKTsKICAgICAgICAg
OjpjbG9zZShmZExpc3Rlbik7CkBAIC0xNTUsNiArMTYyLDE3IEBAIGJvb2wgaXNMaXN0ZW5pbmco
UGxhdGZvcm1Tb2NrZXRUeXBlIHNvY2tldCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3VpbnQx
Nl90IGdldFBvcnQoUGxhdGZvcm1Tb2NrZXRUeXBlIHNvY2tldCkKK3sKKyAgICBBU1NFUlQoaXNW
YWxpZChzb2NrZXQpKTsKKworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyZXNzOworICAgIGlu
dCBsZW4gPSBzaXplb2YoYWRkcmVzcyk7CisgICAgbWVtc2V0KCZhZGRyZXNzLCAwLCBsZW4pOwor
ICAgIGdldHNvY2tuYW1lKHNvY2tldCwgcmVpbnRlcnByZXRfY2FzdDxzdHJ1Y3Qgc29ja2FkZHIq
PigmYWRkcmVzcyksICZsZW4pOworICAgIHJldHVybiBhZGRyZXNzLnNpbl9wb3J0OworfQorCiBP
cHRpb25hbDxzaXplX3Q+IHJlYWQoUGxhdGZvcm1Tb2NrZXRUeXBlIHNvY2tldCwgdm9pZCogYnVm
ZmVyLCBpbnQgYnVmZmVyU2l6ZSkKIHsKICAgICBBU1NFUlQoaXNWYWxpZChzb2NrZXQpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC93
aW4vUmVtb3RlSW5zcGVjdG9yU29ja2V0V2luLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvcmVtb3RlL3NvY2tldC93aW4vUmVtb3RlSW5zcGVjdG9yU29ja2V0V2luLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2RkYTIzY2I1Y2QKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2Nr
ZXQvd2luL1JlbW90ZUluc3BlY3RvclNvY2tldFdpbi5jcHAKQEAgLTAsMCArMSwzMzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUluc3Bl
Y3RvclNvY2tldC5oIgorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRl
IDxtdXRleD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworbmFtZXNwYWNlIFNvY2tldCB7CisKK3N0YXRpYyBQbGF0Zm9ybVNvY2tldFR5cGUgY3JlYXRl
KCk7CisKK3ZvaWQgaW5pdCgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGZsYWc7Cisg
ICAgc3RkOjpjYWxsX29uY2UoZmxhZywgW10geworICAgICAgICBXU0FEQVRBIGRhdGE7CisgICAg
ICAgIFdPUkQgdmVyc2lvblJlcXVlc3RlZCA9IE1BS0VXT1JEKDIsIDApOworCisgICAgICAgIFdT
QVN0YXJ0dXAodmVyc2lvblJlcXVlc3RlZCwgJmRhdGEpOworICAgIH0pOworfQorCitjbGFzcyBT
b2NrZXQgeworcHVibGljOgorICAgIFNvY2tldCgpCisgICAgICAgIDogbV9zb2NrZXQoY3JlYXRl
KCkpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFNvY2tldChQbGF0Zm9ybVNvY2tldFR5
cGUgc29ja2V0KQorICAgICAgICA6IG1fc29ja2V0KHNvY2tldCkKKyAgICB7CisgICAgfQorCisg
ICAgZXhwbGljaXQgU29ja2V0KGNvbnN0IFNvY2tldCYpID0gZGVsZXRlOworICAgIH5Tb2NrZXQo
KQorICAgIHsKKyAgICAgICAgY2xvc2UobV9zb2NrZXQpOworICAgIH0KKworICAgIG9wZXJhdG9y
IFBsYXRmb3JtU29ja2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc29ja2V0OyB9CisgICAgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzVmFsaWQobV9zb2NrZXQpOyB9CisKKyAgICBQ
bGF0Zm9ybVNvY2tldFR5cGUgbGVhaygpCisgICAgeworICAgICAgICBhdXRvIHNvY2tldCA9IG1f
c29ja2V0OworICAgICAgICBtX3NvY2tldCA9IElOVkFMSURfU09DS0VUX1ZBTFVFOworICAgICAg
ICByZXR1cm4gc29ja2V0OworICAgIH0KKworcHJpdmF0ZToKKyAgICBQbGF0Zm9ybVNvY2tldFR5
cGUgbV9zb2NrZXQgeyBJTlZBTElEX1NPQ0tFVF9WQUxVRSB9OworfTsKKworc3RhdGljIFBsYXRm
b3JtU29ja2V0VHlwZSBjcmVhdGUoKQoreworICAgIFBsYXRmb3JtU29ja2V0VHlwZSBzb2NrZXQg
PSA6OnNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApOworICAgIGlmIChz
b2NrZXQgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJzb2NrZXQoKSBm
YWlsZWQsIGVycm5vID0gJWQiLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiBJ
TlZBTElEX1NPQ0tFVF9WQUxVRTsKKyAgICB9CisgICAgcmV0dXJuIHNvY2tldDsKK30KKworc3Rh
dGljIGJvb2wgc2V0T3B0KFBsYXRmb3JtU29ja2V0VHlwZSBzb2NrZXQsIGludCBvcHRuYW1lLCBj
b25zdCB2b2lkKiBvcHR2YWwsIGludCBvcHRsZW4sIGNvbnN0IGNoYXIqIGRlYnVnKQoreworICAg
IGludCBlcnJvciA9IDo6c2V0c29ja29wdChzb2NrZXQsIFNPTF9TT0NLRVQsIG9wdG5hbWUsIHN0
YXRpY19jYXN0PGNvbnN0IGNoYXIqPihvcHR2YWwpLCBvcHRsZW4pOworICAgIGlmIChlcnJvciA8
IDApIHsKKyAgICAgICAgTE9HX0VSUk9SKCJzZXRzb2Nrb3B0KCkgJXMsIGVycm5vID0gJWQiLCBk
ZWJ1ZywgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBzZXRPcHRFbmFibGVkKFBsYXRmb3Jt
U29ja2V0VHlwZSBzb2NrZXQsIGludCBvcHRuYW1lLCBib29sIGZsYWcsIGNvbnN0IGNoYXIqIGRl
YnVnKQoreworICAgIGNvbnN0IGludCB2YWwgPSBmbGFnOworICAgIHJldHVybiBzZXRPcHQoc29j
a2V0LCBvcHRuYW1lLCAmdmFsLCBzaXplb2YodmFsKSwgZGVidWcpOworfQorCitzdGF0aWMgYm9v
bCBlbmFibGVPcHQoUGxhdGZvcm1Tb2NrZXRUeXBlIHNvY2tldCwgaW50IG9wdG5hbWUsIGNvbnN0
IGNoYXIqIGRlYnVnKQoreworICAgIHJldHVybiBzZXRPcHRFbmFibGVkKHNvY2tldCwgb3B0bmFt
ZSwgdHJ1ZSwgZGVidWcpOworfQorCitzdGF0aWMgUGxhdGZvcm1Tb2NrZXRUeXBlIGNvbm5lY3RU
byhzdHJ1Y3Qgc29ja2FkZHJfaW4mIGFkZHJlc3MpCit7CisgICAgU29ja2V0IHNvY2tldDsKKyAg
ICBpZiAoIXNvY2tldCkKKyAgICAgICAgcmV0dXJuIElOVkFMSURfU09DS0VUX1ZBTFVFOworCisg
ICAgaW50IGVycm9yID0gOjpjb25uZWN0KHNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciopJmFkZHJl
c3MsIHNpemVvZihhZGRyZXNzKSk7CisgICAgaWYgKGVycm9yIDwgMCkKKyAgICAgICAgcmV0dXJu
IElOVkFMSURfU09DS0VUX1ZBTFVFOworCisgICAgcmV0dXJuIHNvY2tldC5sZWFrKCk7Cit9CisK
K3N0YXRpYyBQbGF0Zm9ybVNvY2tldFR5cGUgYmluZEFuZExpc3RlbihzdHJ1Y3Qgc29ja2FkZHJf
aW4mIGFkZHJlc3MpCit7CisgICAgU29ja2V0IHNvY2tldDsKKyAgICBpZiAoIXNvY2tldCkKKyAg
ICAgICAgcmV0dXJuIElOVkFMSURfU09DS0VUX1ZBTFVFOworCisgICAgaWYgKCFlbmFibGVPcHQo
c29ja2V0LCBTT19SRVVTRUFERFIsICJTT19SRVVTRUFERFIiKSkKKyAgICAgICAgcmV0dXJuIElO
VkFMSURfU09DS0VUX1ZBTFVFOworCisgICAgLy8gV2luU29jayBkb2Vzbid0IGhhdmUgYFNPX1JF
VVNFUE9SVGAuCisKKyAgICBpbnQgZXJyb3IgPSA6OmJpbmQoc29ja2V0LCAoc3RydWN0IHNvY2th
ZGRyKikmYWRkcmVzcywgc2l6ZW9mKGFkZHJlc3MpKTsKKyAgICBpZiAoZXJyb3IgPCAwKSB7Cisg
ICAgICAgIExPR19FUlJPUigiYmluZCgpIGZhaWxlZCwgZXJybm8gPSAlZCIsIFdTQUdldExhc3RF
cnJvcigpKTsKKyAgICAgICAgcmV0dXJuIElOVkFMSURfU09DS0VUX1ZBTFVFOworICAgIH0KKwor
ICAgIGVycm9yID0gOjpsaXN0ZW4oc29ja2V0LCAxKTsKKyAgICBpZiAoZXJyb3IgPCAwKSB7Cisg
ICAgICAgIExPR19FUlJPUigibGlzdGVuKCkgZmFpbGVkLCBlcnJubyA9ICVkIiwgV1NBR2V0TGFz
dEVycm9yKCkpOworICAgICAgICByZXR1cm4gSU5WQUxJRF9TT0NLRVRfVkFMVUU7CisgICAgfQor
CisgICAgcmV0dXJuIHNvY2tldC5sZWFrKCk7Cit9CisKK09wdGlvbmFsPFBsYXRmb3JtU29ja2V0
VHlwZT4gY29ubmVjdChjb25zdCBjaGFyKiBzZXJ2ZXJBZGRyZXNzLCB1aW50MTZfdCBzZXJ2ZXJQ
b3J0KQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyZXNzID0geyB9OworCisgICAgYWRk
cmVzcy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICA6OmluZXRfcHRvbihBRl9JTkVULCBzZXJ2
ZXJBZGRyZXNzLCAmYWRkcmVzcy5zaW5fYWRkcik7CisgICAgYWRkcmVzcy5zaW5fcG9ydCA9IGh0
b25zKHNlcnZlclBvcnQpOworCisgICAgYXV0byBzb2NrZXQgPSBjb25uZWN0VG8oYWRkcmVzcyk7
CisgICAgaWYgKCFpc1ZhbGlkKHNvY2tldCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gY29ubmVjdCB0byAlczoldSwgZXJybm8gPSAlZCIsIHNlcnZlckFkZHJlc3MsIHNlcnZlclBv
cnQsIFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICB9CisKKyAgICByZXR1cm4gc29ja2V0OworfQorCitPcHRpb25hbDxQbGF0Zm9ybVNvY2tldFR5
cGU+IGxpc3Rlbihjb25zdCBjaGFyKiBhZGRyZXNzU3RyLCB1aW50MTZfdCBwb3J0KQoreworICAg
IC8vIEZJWE1FOiBTdXBwb3J0IEFGX0lORVQ2IGNvbm5lY3Rpb25zLgorICAgIHN0cnVjdCBzb2Nr
YWRkcl9pbiBhZGRyZXNzID0geyB9OworICAgIGFkZHJlc3Muc2luX2ZhbWlseSA9IEFGX0lORVQ7
CisgICAgaWYgKGFkZHJlc3NTdHIpCisgICAgICAgIDo6aW5ldF9wdG9uKEFGX0lORVQsIGFkZHJl
c3NTdHIsICZhZGRyZXNzLnNpbl9hZGRyKTsKKyAgICBlbHNlCisgICAgICAgIGFkZHJlc3Muc2lu
X2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisgICAgYWRkcmVzcy5zaW5fcG9ydCA9
IGh0b25zKHBvcnQpOworCisgICAgYXV0byBzb2NrZXQgPSBiaW5kQW5kTGlzdGVuKGFkZHJlc3Mp
OworICAgIGlmICghaXNWYWxpZChzb2NrZXQpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgcmV0dXJuIHNvY2tldDsKK30KKworT3B0aW9uYWw8UGxhdGZvcm1Tb2NrZXRUeXBl
PiBhY2NlcHQoUGxhdGZvcm1Tb2NrZXRUeXBlIHNvY2tldCkKK3sKKyAgICBzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gYWRkcmVzcyA9IHsgfTsKKworICAgIHNvY2tsZW5fdCBsZW4gPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luKTsKKyAgICBpbnQgZmQgPSA6OmFjY2VwdChzb2NrZXQsIChzdHJ1Y3Qgc29j
a2FkZHIqKSAmYWRkcmVzcywgJmxlbik7CisgICAgaWYgKGZkID49IDApCisgICAgICAgIHJldHVy
biBmZDsKKworICAgIExPR19FUlJPUigiYWNjZXB0KGluZXQpIGVycm9yIChlcnJubyA9ICVkKSIs
IFdTQUdldExhc3RFcnJvcigpKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitPcHRp
b25hbDxzdGQ6OmFycmF5PFBsYXRmb3JtU29ja2V0VHlwZSwgMj4+IGNyZWF0ZVBhaXIoKQorewor
ICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyZXNzOworICAgIGFkZHJlc3Muc2luX2ZhbWlseSA9
IEFGX0lORVQ7CisgICAgYWRkcmVzcy5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9P
UEJBQ0spOworICAgIGFkZHJlc3Muc2luX3BvcnQgPSAwOworCisgICAgU29ja2V0IHNlcnZlcihi
aW5kQW5kTGlzdGVuKGFkZHJlc3MpKTsKKyAgICBpZiAoIXNlcnZlcikKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIGFkZHJlc3Muc2luX3BvcnQgPSBnZXRQb3J0KHNlcnZlcik7
CisKKyAgICBzdGQ6OmFycmF5PFBsYXRmb3JtU29ja2V0VHlwZSwgMj4gc29ja2V0czsKKyAgICBz
b2NrZXRzWzBdID0gY29ubmVjdFRvKGFkZHJlc3MpOworICAgIGlmICghaXNWYWxpZChzb2NrZXRz
WzBdKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChhdXRvIHNvY2tl
dCA9IGFjY2VwdChzZXJ2ZXIpKSB7CisgICAgICAgIHNvY2tldHNbMV0gPSAqc29ja2V0OworICAg
ICAgICByZXR1cm4gc29ja2V0czsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
fQorCit2b2lkIHNldHVwKFBsYXRmb3JtU29ja2V0VHlwZSBzb2NrZXQpCit7CisgICAgLy8gZmNu
dGwoc29ja2V0LCBGX1NFVEZELCBGRF9DTE9FWEVDKTsKKyAgICAvLyBpbnQgZmxhZ3MgPSBmY250
bChzb2NrZXQsIEZfR0VURkwsIDApOworICAgIC8vIGZjbnRsKHNvY2tldCwgRl9TRVRGTCwgZmxh
Z3MgfCBPX05PTkJMT0NLKTsKKworICAgIHNldE9wdChzb2NrZXQsIFNPX1JDVkJVRiwgJkJ1ZmZl
clNpemUsIHNpemVvZihCdWZmZXJTaXplKSwgIlNPX1JDVkJVRiIpOworICAgIHNldE9wdChzb2Nr
ZXQsIFNPX1NOREJVRiwgJkJ1ZmZlclNpemUsIHNpemVvZihCdWZmZXJTaXplKSwgIlNPX1NOREJV
RiIpOworfQorCitib29sIGlzVmFsaWQoUGxhdGZvcm1Tb2NrZXRUeXBlIHNvY2tldCkKK3sKKyAg
ICByZXR1cm4gc29ja2V0ICE9IElOVkFMSURfU09DS0VUX1ZBTFVFOworfQorCitib29sIGlzTGlz
dGVuaW5nKFBsYXRmb3JtU29ja2V0VHlwZSBzb2NrZXQpCit7CisgICAgaW50IG91dDsKKyAgICBz
b2NrbGVuX3Qgb3V0U2l6ZSA9IHNpemVvZihvdXQpOworICAgIGlmIChnZXRzb2Nrb3B0KHNvY2tl
dCwgU09MX1NPQ0tFVCwgU09fQUNDRVBUQ09OTiwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJm91
dCksICZvdXRTaXplKSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIG91dDsKKworICAgIExPR19FUlJP
UigiZ2V0c29ja29wdCBlcnJubyA9ICVkIiwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordWludDE2X3QgZ2V0UG9ydChQbGF0Zm9ybVNvY2tldFR5cGUgc29ja2V0
KQoreworICAgIEFTU0VSVChpc1ZhbGlkKHNvY2tldCkpOworCisgICAgc3RydWN0IHNvY2thZGRy
X2luIGFkZHJlc3M7CisgICAgaW50IGxlbiA9IHNpemVvZihhZGRyZXNzKTsKKyAgICBtZW1zZXQo
JmFkZHJlc3MsIDAsIGxlbik7CisgICAgZ2V0c29ja25hbWUoc29ja2V0LCByZWludGVycHJldF9j
YXN0PHN0cnVjdCBzb2NrYWRkcio+KCZhZGRyZXNzKSwgJmxlbik7CisgICAgcmV0dXJuIGFkZHJl
c3Muc2luX3BvcnQ7Cit9CisKK09wdGlvbmFsPHNpemVfdD4gcmVhZChQbGF0Zm9ybVNvY2tldFR5
cGUgc29ja2V0LCB2b2lkKiBidWZmZXIsIGludCBidWZmZXJTaXplKQoreworICAgIEFTU0VSVChp
c1ZhbGlkKHNvY2tldCkpOworCisgICAgYXV0byByZWFkU2l6ZSA9IDo6cmVjdihzb2NrZXQsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlciksIGJ1ZmZlclNpemUsIDApOworICAgIGlmIChy
ZWFkU2l6ZSAhPSBTT0NLRVRfRVJST1IpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHJlYWRTaXplKTsKKworICAgIExPR19FUlJPUigicmVhZCBlcnJvciAoZXJybm8gPSAlZCki
LCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworT3B0
aW9uYWw8c2l6ZV90PiB3cml0ZShQbGF0Zm9ybVNvY2tldFR5cGUgc29ja2V0LCBjb25zdCB2b2lk
KiBkYXRhLCBpbnQgc2l6ZSkKK3sKKyAgICBBU1NFUlQoaXNWYWxpZChzb2NrZXQpKTsKKworICAg
IGF1dG8gd3JpdGVTaXplID0gOjpzZW5kKHNvY2tldCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oZGF0YSksIHNpemUsIDApOworICAgIGlmICh3cml0ZVNpemUgIT0gU09DS0VUX0VSUk9S
KQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90Pih3cml0ZVNpemUpOworCisgICAg
TE9HX0VSUk9SKCJ3cml0ZSBlcnJvciAoZXJybm8gPSAlZCkiLCBXU0FHZXRMYXN0RXJyb3IoKSk7
CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwordm9pZCBjbG9zZShQbGF0Zm9ybVNvY2tl
dFR5cGUmIHNvY2tldCkKK3sKKyAgICBpZiAoIWlzVmFsaWQoc29ja2V0KSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgOjpjbG9zZXNvY2tldChzb2NrZXQpOworICAgIHNvY2tldCA9IElOVkFMSURf
U09DS0VUX1ZBTFVFOworfQorCitQb2xsaW5nRGVzY3JpcHRvciBwcmVwYXJlUG9sbGluZyhQbGF0
Zm9ybVNvY2tldFR5cGUgc29ja2V0KQoreworICAgIFBvbGxpbmdEZXNjcmlwdG9yIHBvbGw7Cisg
ICAgcG9sbC5mZCA9IHNvY2tldDsKKyAgICBwb2xsLmV2ZW50cyA9IFBPTExJTjsKKyAgICByZXR1
cm4gcG9sbDsKK30KKworYm9vbCBwb2xsKFZlY3RvcjxQb2xsaW5nRGVzY3JpcHRvcj4mIHBvbGxE
ZXNjcmlwdG9ycywgaW50IHRpbWVvdXQpCit7CisgICAgaW50IHJldCA9IDo6V1NBUG9sbChwb2xs
RGVzY3JpcHRvcnMuZGF0YSgpLCBwb2xsRGVzY3JpcHRvcnMuc2l6ZSgpLCB0aW1lb3V0KTsKKyAg
ICByZXR1cm4gcmV0ID4gMDsKK30KKworYm9vbCBpc1JlYWRhYmxlKGNvbnN0IFBvbGxpbmdEZXNj
cmlwdG9yJiBwb2xsKQoreworICAgIHJldHVybiBwb2xsLnJldmVudHMgJiBQT0xMSU47Cit9CisK
K2Jvb2wgaXNXcml0YWJsZShjb25zdCBQb2xsaW5nRGVzY3JpcHRvciYgcG9sbCkKK3sKKyAgICBy
ZXR1cm4gcG9sbC5yZXZlbnRzICYgUE9MTE9VVDsKK30KKwordm9pZCBtYXJrV2FpdGluZ1dyaXRh
YmxlKFBvbGxpbmdEZXNjcmlwdG9yJiBwb2xsKQoreworICAgIHBvbGwuZXZlbnRzIHw9IFBPTExP
VVQ7Cit9CisKK3ZvaWQgY2xlYXJXYWl0aW5nV3JpdGFibGUoUG9sbGluZ0Rlc2NyaXB0b3ImIHBv
bGwpCit7CisgICAgcG9sbC5ldmVudHMgJj0gflBPTExPVVQ7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFNvY2tldAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNQbGF5U3Rh
dGlvbi5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zUGxheVN0YXRpb24uY21ha2UKaW5kZXgg
MTYxZjdhZmMxZWEuLmQwMjJiNWFmYTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9u
c1BsYXlTdGF0aW9uLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zUGxheVN0YXRpb24u
Y21ha2UKQEAgLTEwOCw2ICsxMDgsNyBAQCBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ1VS
TCBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9GUkVFVFlQRSBPTikKIFNFVF9BTkRf
RVhQT1NFX1RPX0JVSUxEKFVTRV9IQVJGQlVaWiBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxE
KFVTRV9MSUJXUEUgT04pCitTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfUklfU09DS0VUX1NF
UlZFUiBFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikKIAogIyBSZW5kZXJpbmcgb3B0aW9ucwogU0VU
X0FORF9FWFBPU0VfVE9fQlVJTEQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfM0QgT04pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbi5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRp
b25zV2luLmNtYWtlCmluZGV4IGQ4OWNiZmY3ZTdlLi5iNmMxMzg2MjMyMSAxMDA2NDQKLS0tIGEv
U291cmNlL2NtYWtlL09wdGlvbnNXaW4uY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNX
aW4uY21ha2UKQEAgLTY3LDcgKzY3LDYgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX1dFQkFTU0VNQkxZIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9BVURJTyBQVUJMSUMgT0ZGKQogV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1hTTFQgUFVCTElDIE9OKQogCi1XRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUiBQUklWQVRFIE9GRikK
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TTU9PVEhfU0NST0xMSU5H
IFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1VT
RVJfTUVTU0FHRV9IQU5ETEVSUyBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9VU0VSU0VMRUNUX0FMTCBQUklWQVRFIE9GRikKQEAgLTkyLDYgKzkx
LDcgQEAgaWYgKCR7V1RGX1BMQVRGT1JNX1dJTl9DQUlST30pCiAgICAgV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFU09VUkNFX0xPQURfU1RBVElTVElDUyBQUklWQVRF
ICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFU30pCiAgICAgV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NFUlZJQ0VfV09SS0VSIFBSSVZBVEUgJHtFTkFCTEVfRVhQ
RVJJTUVOVEFMX0ZFQVRVUkVTfSkKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfVkFSSUFUSU9OX0ZPTlRTIFBSSVZBVEUgJHtFTkFCTEVfRVhQRVJJTUVOVEFMX0ZF
QVRVUkVTfSkKKyAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVN
T1RFX0lOU1BFQ1RPUiBQUklWQVRFICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFU30pCiAK
ICAgICAjIEZJWE1FOiBJbXBsZW1lbnQgcGx1Z2luIHByb2Nlc3Mgb24gTW9kZXJuIFdlYktpdC4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTMxMwogICAgIFdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJIFBS
SVZBVEUgT0ZGKQpAQCAtMTAwLDYgKzEwMCw3IEBAIGVsc2UgKCkKICAgICBXRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfSU5UTCBQVUJMSUMgT0ZGKQogICAgIFdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9QVUJMSUNfU1VGRklYX0xJU1QgUFJJVkFU
RSBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQkdM
IFBVQkxJQyBPRkYpCisgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X1JFTU9URV9JTlNQRUNUT1IgUFJJVkFURSBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoVVNFX1ZFUlNJT05fU1RBTVBFUiBQUklWQVRFIE9OKQogZW5kaWYgKCkKIApk
aWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9j
bWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UKaW5kZXggYWU0Yzc3OTA2NTAuLjRkNWQ0NWE5Y2Fh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlCisrKyBiL1Nv
dXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UKQEAgLTI4LDYgKzI4LDcgQEAgU0VUX0FO
RF9FWFBPU0VfVE9fQlVJTEQoVVNFX0NVUkwgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChV
U0VfVEVYVFVSRV9NQVBQRVIgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfVEVYVFVS
RV9NQVBQRVJfR0wgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTUVESUFfRk9VTkRB
VElPTiBPTikKK1NFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9SSV9TT0NLRVRfU0VSVkVSIEVO
QUJMRV9SRU1PVEVfSU5TUEVDVE9SKQogCiBzZXQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfM0Qg
T04pCiBzZXQoRU5BQkxFX1dFQktJVCBPTikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>368718</attachid>
            <date>2019-05-01 15:01:29 -0700</date>
            <delta_ts>2019-05-01 16:59:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>197434.diff</filename>
            <type>text/plain</type>
            <size>36725</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3NTQ4YmQ5MWMzMi4uMjIw
ZjBmYjhiYzUgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNyBAQAorMjAxOS0wNS0wMSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29ueS5j
b20+CisKKyAgICAgICAgW1dpbkNhaXJvXSBJbXBsZW1lbnQgUmVtb3RlIFdlYiBJbnNwZWN0b3Ig
Q2xpZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk3NDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIG5ldyBidWlsZCBmbGFnIFVTRV9SSV9TT0NLRVRfU0VSVkVSIHRvIGluZGljYXRlIHVzaW5n
IFNvY2tldCBpbXByZW1lbnRhdGlvbiBmb3IgUmVtb3RlSW5zcGVjdG9yCisgICAgICAgIHByb3Rv
Y29sLiBDdXJyZW50bHkgUGxheVN0YXRpb24gaXMgdGhlIG9ubHkgcGxhdGZvcm0gd2hpY2ggdXNl
cyB0aGlzLiBXaW5DYWlybyBpcyB0aGUgc2Vjb25kIG9uZS4KKworICAgICAgICAqIFNvdXJjZS9j
bWFrZS9PcHRpb25zUGxheVN0YXRpb24uY21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL09w
dGlvbnNXaW4uY21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5j
bWFrZToKKwogMjAxOS0wNC0yOSAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29t
PgogCiAgICAgICAgIFtDTWFrZV0gQWRkIFdFQktJVF9FWEVDVVRBQkxFIG1hY3JvCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwppbmRleCAzOGNjYWUyYjk2ZS4uNjdlZjAzNmY3MWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDE5LTA1LTAxICBCYXN1a2UgU3V6dWtp
ICA8QmFzdWtlLlN1enVraUBzb255LmNvbT4KKworICAgICAgICBbV2luQ2Fpcm9dIEltcGxlbWVu
dCBSZW1vdGUgV2ViIEluc3BlY3RvciBDbGllbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc0MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgV2luZG93cyBpbXBsZW1lbnRhdGlvbiBm
b3IgU29ja2V0IEJhY2tlbmQgb2YgUmVtb3RlSW5zcGVjdG9yIGFuZCBlbmFibGUgaXQgb24gV2lu
Q2Fpcm8KKyAgICAgICAgZm9yIGV4cGVyaW1lbnRhbCBmZWF0dXJlLgorCisgICAgICAgIEFsc28g
YWRkIGxpc3RlbmVyIGludGVyZmFjZSBmb3IgY29ubmVjdGlvbiBiZXR3ZWViIFJlbW90ZUluc3Bl
Y3RvciBhbmQgUmVtb3RlSW5zcGVjdG9yU2VydmVyCisgICAgICAgIGZvciBmbGV4aWJsZSBjb25m
aWd1cmF0aW9uLgorCisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICogaW5z
cGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVt
b3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50Lmg6CisgICAgICAgIChJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQ6OmRpZEFjY2VwdCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU2VydmVyOjpjb25uZWN0KToK
KyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU2VydmVyOjpsaXN0ZW5Gb3JUYXJn
ZXRzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU2VydmVyOjpkaWRBY2Nl
cHQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmRpc3BhdGNo
TWFwKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzdGFydCk6
CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNlcnZlcjo6YWRkU2VydmVyQ29u
bmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVt
b3RlSW5zcGVjdG9yU2VydmVyLmg6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rv
clNlcnZlcjo6UmVtb3RlSW5zcGVjdG9yU2VydmVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVt
b3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXQuY3BwOgorICAgICAgICAoSW5zcGVjdG9y
OjpSZW1vdGVJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcik6CisgICAgICAgIChJbnNwZWN0b3I6
OlJlbW90ZUluc3BlY3Rvcjo6c3RhcnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNw
ZWN0b3I6OnN0b3BJbnRlcm5hbCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rv
cjo6c2V0U2VydmVyUG9ydCk6CisgICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVt
b3RlSW5zcGVjdG9yU29ja2V0Lmg6CisgICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpS
ZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6bGlzdGVuSW5ldCk6CisgICAgICAgIChJbnNw
ZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjpnZXRQb3J0IGNvbnN0KToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OmFjY2VwdElu
ZXRTb2NrZXRJZkVuYWJsZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L1Jl
bW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL3JlbW90
ZS9zb2NrZXQvcG9zaXgvUmVtb3RlSW5zcGVjdG9yU29ja2V0UE9TSVguY3BwOgorICAgICAgICAo
SW5zcGVjdG9yOjpTb2NrZXQ6OmluaXQpOgorICAgICAgICAoSW5zcGVjdG9yOjpTb2NrZXQ6Omxp
c3Rlbik6CisgICAgICAgIChJbnNwZWN0b3I6OlNvY2tldDo6Z2V0UG9ydCk6CisgICAgICAgICog
aW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvd2luL1JlbW90ZUluc3BlY3RvclNvY2tldFdpbi5jcHA6
IEFkZGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpTb2NrZXQ6OmluaXQpOgorICAgICAgICAoSW5z
cGVjdG9yOjpTb2NrZXQ6OlNvY2tldDo6U29ja2V0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6U29j
a2V0OjpTb2NrZXQ6On5Tb2NrZXQpOgorICAgICAgICAoSW5zcGVjdG9yOjpTb2NrZXQ6OlNvY2tl
dDo6b3BlcmF0b3IgUGxhdGZvcm1Tb2NrZXRUeXBlIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rv
cjo6U29ja2V0OjpTb2NrZXQ6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSW5zcGVj
dG9yOjpTb2NrZXQ6OlNvY2tldDo6bGVhayk6CisgICAgICAgIChJbnNwZWN0b3I6OlNvY2tldDo6
Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6U29ja2V0OjpzZXRPcHQpOgorICAgICAgICAo
SW5zcGVjdG9yOjpTb2NrZXQ6OnNldE9wdEVuYWJsZWQpOgorICAgICAgICAoSW5zcGVjdG9yOjpT
b2NrZXQ6OmVuYWJsZU9wdCk6CisgICAgICAgIChJbnNwZWN0b3I6OlNvY2tldDo6Y29ubmVjdFRv
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6U29ja2V0OjpiaW5kQW5kTGlzdGVuKToKKyAgICAgICAg
KEluc3BlY3Rvcjo6U29ja2V0Ojpjb25uZWN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6U29ja2V0
OjpsaXN0ZW4pOgorICAgICAgICAoSW5zcGVjdG9yOjpTb2NrZXQ6OmFjY2VwdCk6CisgICAgICAg
IChJbnNwZWN0b3I6OlNvY2tldDo6Y3JlYXRlUGFpcik6CisgICAgICAgIChJbnNwZWN0b3I6OlNv
Y2tldDo6c2V0dXApOgorICAgICAgICAoSW5zcGVjdG9yOjpTb2NrZXQ6OmlzVmFsaWQpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpTb2NrZXQ6OmlzTGlzdGVuaW5nKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6U29ja2V0OjpnZXRQb3J0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6U29ja2V0OjpyZWFkKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6U29ja2V0Ojp3cml0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6
OlNvY2tldDo6Y2xvc2UpOgorICAgICAgICAoSW5zcGVjdG9yOjpTb2NrZXQ6OnByZXBhcmVQb2xs
aW5nKToKKyAgICAgICAgKEluc3BlY3Rvcjo6U29ja2V0Ojpwb2xsKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6U29ja2V0Ojppc1JlYWRhYmxlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6U29ja2V0Ojpp
c1dyaXRhYmxlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6U29ja2V0OjptYXJrV2FpdGluZ1dyaXRh
YmxlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6U29ja2V0OjpjbGVhcldhaXRpbmdXcml0YWJsZSk6
CisKIDIwMTktMDQtMjkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBKSVRTdHViUm91dGluZVNldCB3YXN0ZXMgMTgwS0Igb2YgSGFzaFRhYmxlIGNhcGFjaXR5
IG9uIGNhbi5jb20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybVdp
bi5jbWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCA0
NzMwZTU2NjdkOS4uNDI1Yjk3ZWNkMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1X
aW4uY21ha2UKQEAgLTMyLDkgKzMyLDUxIEBAIGlmIChOT1QgV1RGX1BMQVRGT1JNX1dJTl9DQUlS
TykKICAgICApCiBlbmRpZiAoKQogCi1saXN0KFJFTU9WRV9JVEVNIEphdmFTY3JpcHRDb3JlX1NP
VVJDRVMKLSAgICBpbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNw
cAotKQoraWYgKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKQorICAgIGxpc3QoQVBQRU5EIEphdmFT
Y3JpcHRDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICAiJHtKQVZBU0NS
SVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9yZW1vdGUvc29ja2V0IgorICAgICkKKworICAgIGxpc3Qo
QVBQRU5EIEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKKyAgICAgICAg
aW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVBdXRvbWF0aW9uVGFyZ2V0LmgKKyAgICAgICAgaW5zcGVj
dG9yL3JlbW90ZS9SZW1vdGVDb25uZWN0aW9uVG9UYXJnZXQuaAorICAgICAgICBpbnNwZWN0b3Iv
cmVtb3RlL1JlbW90ZUNvbnRyb2xsYWJsZVRhcmdldC5oCisgICAgICAgIGluc3BlY3Rvci9yZW1v
dGUvUmVtb3RlSW5zcGVjdGlvblRhcmdldC5oCisgICAgICAgIGluc3BlY3Rvci9yZW1vdGUvUmVt
b3RlSW5zcGVjdG9yLmgKKworICAgICAgICBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmgKKyAgICAgICAgaW5zcGVjdG9yL3JlbW90ZS9zb2Nr
ZXQvUmVtb3RlSW5zcGVjdG9yTWVzc2FnZVBhcnNlci5oCisgICAgICAgIGluc3BlY3Rvci9yZW1v
dGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNlcnZlci5oCisgICAgICAgIGluc3BlY3Rvci9yZW1v
dGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldC5oCisgICAgICAgIGluc3BlY3Rvci9yZW1v
dGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmgKKyAgICApCisKKyAgICBs
aXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCisgICAgICAgIEFQSS9KU1JlbW90ZUlu
c3BlY3Rvci5jcHAKKworICAgICAgICBpbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUF1dG9tYXRpb25U
YXJnZXQuY3BwCisgICAgICAgIGluc3BlY3Rvci9yZW1vdGUvUmVtb3RlQ29ubmVjdGlvblRvVGFy
Z2V0LmNwcAorICAgICAgICBpbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUNvbnRyb2xsYWJsZVRhcmdl
dC5jcHAKKyAgICAgICAgaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0aW9uVGFyZ2V0LmNw
cAorICAgICAgICBpbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3Rvci5jcHAKKworICAgICAg
ICBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50
LmNwcAorICAgICAgICBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JNZXNz
YWdlUGFyc2VyLmNwcAorICAgICAgICBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNw
ZWN0b3JTZXJ2ZXIuY3BwCisgICAgICAgIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUlu
c3BlY3RvclNvY2tldC5jcHAKKyAgICAgICAgaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yU29ja2V0RW5kcG9pbnQuY3BwCisKKyAgICAgICAgaW5zcGVjdG9yL3JlbW90ZS9z
b2NrZXQvd2luL1JlbW90ZUluc3BlY3RvclNvY2tldFdpbi5jcHAKKyAgICApCisKKyAgICBsaXN0
KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9MSUJSQVJJRVMKKyAgICAgICAgd3NvY2szMiB3czJfMzIK
KyAgICApCitlbHNlICgpCisgICAgbGlzdChSRU1PVkVfSVRFTSBKYXZhU2NyaXB0Q29yZV9TT1VS
Q0VTCisgICAgICAgIGluc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIu
Y3BwCisgICAgKQorZW5kaWYgKCkKIAogZmlsZShDT1BZCiAgICAgIiR7SkFWQVNDUklQVENPUkVf
RElSfS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnJlc291cmNlcyIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUlu
c3BlY3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3Rl
SW5zcGVjdG9yLmgKaW5kZXggNzFiN2NmNGVlNTcuLjE5NmJhZDMxYzEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0
b3IuaApAQCAtNTMsNyArNTMsNyBAQCB0eXBlZGVmIHN0cnVjdCBfR0RCdXNDb25uZWN0aW9uIEdE
QnVzQ29ubmVjdGlvbjsKIHR5cGVkZWYgc3RydWN0IF9HREJ1c0ludGVyZmFjZVZUYWJsZSBHREJ1
c0ludGVyZmFjZVZUYWJsZTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oUExBWVNUQVRJT04pCisj
aWYgVVNFKFJJX1NPQ0tFVF9TRVJWRVIpCiAjaW5jbHVkZSAiUmVtb3RlQ29ubmVjdGlvblRvVGFy
Z2V0LmgiCiAjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5oIgogI2lu
Y2x1ZGUgIlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmgiCkBAIC03Nyw3ICs3Nyw3IEBA
IGNsYXNzIFJlbW90ZUluc3BlY3RvckNsaWVudDsKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFJl
bW90ZUluc3BlY3RvciBmaW5hbAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIDogcHVibGljIFJl
bW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb246OkNsaWVudAotI2VsaWYgUExBVEZPUk0oUExBWVNU
QVRJT04pCisjZWxpZiBVU0UoUklfU09DS0VUX1NFUlZFUikKICAgICA6IHB1YmxpYyBSZW1vdGVJ
bnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50CiAjZW5kaWYKIHsKQEAgLTE0NiwxMiArMTQ2LDEzIEBA
IHB1YmxpYzoKICNpZiBVU0UoR0xJQikKICAgICB2b2lkIHJlcXVlc3RBdXRvbWF0aW9uU2Vzc2lv
bihjb25zdCBjaGFyKiBzZXNzaW9uSUQsIGNvbnN0IENsaWVudDo6U2Vzc2lvbkNhcGFiaWxpdGll
cyYpOwogI2VuZGlmCi0jaWYgVVNFKEdMSUIpIHx8IFBMQVRGT1JNKFBMQVlTVEFUSU9OKQorI2lm
IFVTRShHTElCKSB8fCBVU0UoUklfU09DS0VUX1NFUlZFUikKICAgICB2b2lkIHNldHVwKFRhcmdl
dElEKTsKICAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXQoVGFyZ2V0SUQsIGNvbnN0IGNoYXIq
IG1lc3NhZ2UpOwogI2VuZGlmCi0jaWYgUExBVEZPUk0oUExBWVNUQVRJT04pCisjaWYgVVNFKFJJ
X1NPQ0tFVF9TRVJWRVIpCiAgICAgc3RhdGljIHZvaWQgc2V0Q29ubmVjdGlvbklkZW50aWZpZXIo
UGxhdGZvcm1Tb2NrZXRUeXBlKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRTZXJ2ZXJQb3J0KHVpbnQx
Nl90KTsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMjA2LDcgKzIwNyw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCByZWNlaXZlZEF1dG9tYXRpY0luc3BlY3Rpb25SZWplY3RNZXNzYWdlKE5TRGljdGlv
bmFyeSAqdXNlckluZm8pOwogICAgIHZvaWQgcmVjZWl2ZWRBdXRvbWF0aW9uU2Vzc2lvblJlcXVl
c3RNZXNzYWdlKE5TRGljdGlvbmFyeSAqdXNlckluZm8pOwogI2VuZGlmCi0jaWYgUExBVEZPUk0o
UExBWVNUQVRJT04pCisjaWYgVVNFKFJJX1NPQ0tFVF9TRVJWRVIpCiAgICAgSGFzaE1hcDxTdHJp
bmcsIENhbGxIYW5kbGVyPiYgZGlzcGF0Y2hNYXAoKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZENs
b3NlKENvbm5lY3Rpb25JRCkgb3ZlcnJpZGU7CiAKQEAgLTIzNyw5ICsyMzgsMTAgQEAgcHJpdmF0
ZToKICAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKICNlbmRpZgogCi0j
aWYgUExBVEZPUk0oUExBWVNUQVRJT04pCisjaWYgVVNFKFJJX1NPQ0tFVF9TRVJWRVIpCiAgICAg
c3RkOjp1bmlxdWVfcHRyPFJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50PiBtX3NvY2tldENv
bm5lY3Rpb247CiAgICAgc3RhdGljIFBsYXRmb3JtU29ja2V0VHlwZSBzX2Nvbm5lY3Rpb25JZGVu
dGlmaWVyOworICAgIHN0YXRpYyB1aW50MTZfdCBzX3NlcnZlclBvcnQ7CiAgICAgT3B0aW9uYWw8
Q29ubmVjdGlvbklEPiBtX2NsaWVudElEOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25u
ZWN0aW9uQ2xpZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9z
b2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5oCmluZGV4IDM0OGUzOTE2YmMz
Li4yYjFmNzI0ODdjOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yQ29ubmVjdGlvbkNsaWVudC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoUkVN
T1RFX0lOU1BFQ1RPUikKIAorI2luY2x1ZGUgIlJlbW90ZUNvbnRyb2xsYWJsZVRhcmdldC5oIgog
I2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmgiCiAjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM2LDcgKzM3
LDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiBjbGFzcyBSZW1vdGVJbnNwZWN0b3JDb25uZWN0
aW9uQ2xpZW50IDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJlbW90ZUluc3BlY3RvckNvbm5lY3Rp
b25DbGllbnQ+IHsKIHB1YmxpYzoKICAgICB2b2lkIGRpZFJlY2VpdmVXZWJJbnNwZWN0b3JFdmVu
dChDb25uZWN0aW9uSUQsIFZlY3Rvcjx1aW50OF90PiYmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
QWNjZXB0KENvbm5lY3Rpb25JRCwgU29ja2V0OjpEb21haW4pIHsgfTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkQWNjZXB0KENvbm5lY3Rpb25JRCwgQ29ubmVjdGlvbklELCBTb2NrZXQ6OkRvbWFpbikg
eyB9OwogICAgIHZpcnR1YWwgdm9pZCBkaWRDbG9zZShDb25uZWN0aW9uSUQpID0gMDsKIAogICAg
IHN0cnVjdCBFdmVudCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTZXJ2ZXIu
Y3BwCmluZGV4IGU2MGZjNTI3NzA2Li4wY2UzYzVjMjMyZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNlcnZl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0
L1JlbW90ZUluc3BlY3RvclNlcnZlci5jcHAKQEAgLTMzLDMwICszMyw1OCBAQAogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAotdm9pZCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmFkZFNlcnZlckNv
bm5lY3Rpb24oUGxhdGZvcm1Tb2NrZXRUeXBlIGlkZW50aWZpZXIpCitPcHRpb25hbDxQbGF0Zm9y
bVNvY2tldFR5cGU+IFJlbW90ZUluc3BlY3RvclNlcnZlcjo6Y29ubmVjdCgpCiB7Ci0gICAgaWYg
KCFtX3NlcnZlcikKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9zZXJ2ZXIpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJJbnNwZWN0b3Igc2VydmVyIGlzIG5vdCBydW5uaW5nIik7CisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQogCi0gICAgaWYgKGF1dG8gaWQgPSBtX3NlcnZl
ci0+Y3JlYXRlQ2xpZW50KGlkZW50aWZpZXIpKSB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9jayht
X2Nvbm5lY3Rpb25zTG9jayk7Ci0gICAgICAgIG1faW5zcGVjdG9yQ29ubmVjdGlvbnMuYXBwZW5k
KGlkLnZhbHVlKCkpOworICAgIGlmIChhdXRvIHNvY2tldHMgPSBTb2NrZXQ6OmNyZWF0ZVBhaXIo
KSkgeworICAgICAgICBpZiAoYXV0byBpZCA9IG1fc2VydmVyLT5jcmVhdGVDbGllbnQoc29ja2V0
cy0+YXQoMCkpKSB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9jb25uZWN0aW9uc0xv
Y2spOworICAgICAgICAgICAgbV9pbnNwZWN0b3JDb25uZWN0aW9ucy5hcHBlbmQoaWQudmFsdWUo
KSk7CisKKyAgICAgICAgICAgIHJldHVybiBzb2NrZXRzLT5hdCgxKTsKKyAgICAgICAgfQogICAg
IH0KKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXZvaWQgUmVtb3RlSW5zcGVjdG9y
U2VydmVyOjpkaWRBY2NlcHQoQ29ubmVjdGlvbklEIGlkLCBTb2NrZXQ6OkRvbWFpbiB0eXBlKQor
T3B0aW9uYWw8dWludDE2X3Q+IFJlbW90ZUluc3BlY3RvclNlcnZlcjo6bGlzdGVuRm9yVGFyZ2V0
cygpCit7CisgICAgaWYgKCFtX3NlcnZlcikgeworICAgICAgICBMT0dfRVJST1IoIkluc3BlY3Rv
ciBzZXJ2ZXIgaXMgbm90IHJ1bm5pbmciKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICB9CisKKyAgICBpZiAobV9pbnNwZWN0b3JMaXN0ZW5lcikgeworICAgICAgICBMT0dfRVJS
T1IoIkluc3BlY3RvciBzZXJ2ZXIgbGlzdGVucyBmb3IgdGFyZ2V0cyBhbHJlYWR5LiIpOworICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIGlmIChhdXRvIGNvbm5lY3Rp
b24gPSBtX3NlcnZlci0+bGlzdGVuSW5ldCgiMTI3LjAuMC4xIiwgMCkpIHsKKyAgICAgICAgbV9p
bnNwZWN0b3JMaXN0ZW5lciA9IGNvbm5lY3Rpb247CisgICAgICAgIHJldHVybiBtX3NlcnZlci0+
Z2V0UG9ydCgqY29ubmVjdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
K30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmRpZEFjY2VwdChDb25uZWN0aW9uSUQg
aWQsIENvbm5lY3Rpb25JRCBsaXN0ZW5lcklELCBTb2NrZXQ6OkRvbWFpbiB0eXBlKQogewogICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKHR5cGUgPT0gU29ja2V0OjpEb21h
aW46Ok5ldHdvcmspIHsKKyAgICBpZiAodHlwZSA9PSBTb2NrZXQ6OkRvbWFpbjo6TG9jYWwgfHwg
KG1faW5zcGVjdG9yTGlzdGVuZXIgJiYgbGlzdGVuZXJJRCA9PSAqbV9pbnNwZWN0b3JMaXN0ZW5l
cikpIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fY29ubmVjdGlvbnNMb2NrKTsKKyAgICAg
ICAgbV9pbnNwZWN0b3JDb25uZWN0aW9ucy5hcHBlbmQoaWQpOworICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSBTb2NrZXQ6OkRvbWFpbjo6TmV0d29yaykgewogICAgICAgICBpZiAobV9jbGllbnRDb25u
ZWN0aW9uKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkluc3BlY3RvciBzZXJ2ZXIgY2FuIGFj
Y2VwdCBvbmx5IDEgY2xpZW50Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgbV9jbGllbnRDb25uZWN0aW9uID0gaWQ7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IFNv
Y2tldDo6RG9tYWluOjpMb2NhbCkgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9jb25uZWN0
aW9uc0xvY2spOwotICAgICAgICBtX2luc3BlY3RvckNvbm5lY3Rpb25zLmFwcGVuZChpZCk7CiAg
ICAgfQogfQogCkBAIC04MSwxMiArMTA5LDEyIEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yU2VydmVy
OjpkaWRDbG9zZShDb25uZWN0aW9uSUQgaWQpCiBIYXNoTWFwPFN0cmluZywgUmVtb3RlSW5zcGVj
dG9yQ29ubmVjdGlvbkNsaWVudDo6Q2FsbEhhbmRsZXI+JiBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6
OmRpc3BhdGNoTWFwKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJp
bmcsIENhbGxIYW5kbGVyPj4gZGlzcGF0Y2hNYXAgPSBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRs
ZXI+KHsKLSAgICAgICAgeyJTZXRUYXJnZXRMaXN0Il9zLCAmUmVtb3RlSW5zcGVjdG9yU2VydmVy
OjpzZXRUYXJnZXRMaXN0fSwKLSAgICAgICAgeyJTZXR1cEluc3BlY3RvckNsaWVudCJfcywgJlJl
bW90ZUluc3BlY3RvclNlcnZlcjo6c2V0dXBJbnNwZWN0b3JDbGllbnR9LAotICAgICAgICB7IlNl
dHVwIl9zLCAmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXR1cH0sCi0gICAgICAgIHsiRnJvbnRl
bmREaWRDbG9zZSJfcywgJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6Y2xvc2V9LAotICAgICAgICB7
IlNlbmRNZXNzYWdlVG9Gcm9udGVuZCJfcywgJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kfSwKLSAgICAgICAgeyJTZW5kTWVzc2FnZVRvQmFja2VuZCJfcywgJlJl
bW90ZUluc3BlY3RvclNlcnZlcjo6c2VuZE1lc3NhZ2VUb0JhY2tlbmR9LAorICAgICAgICB7ICJT
ZXRUYXJnZXRMaXN0Il9zLCByZWludGVycHJldF9jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5z
cGVjdG9yU2VydmVyOjpzZXRUYXJnZXRMaXN0KX0sCisgICAgICAgIHsiU2V0dXBJbnNwZWN0b3JD
bGllbnQiX3MsIHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JT
ZXJ2ZXI6OnNldHVwSW5zcGVjdG9yQ2xpZW50KX0sCisgICAgICAgIHsiU2V0dXAiX3MsIHJlaW50
ZXJwcmV0X2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNldHVwKX0s
CisgICAgICAgIHsiRnJvbnRlbmREaWRDbG9zZSJfcywgcmVpbnRlcnByZXRfY2FzdDxDYWxsSGFu
ZGxlcj4oJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6Y2xvc2UpfSwKKyAgICAgICAgeyJTZW5kTWVz
c2FnZVRvRnJvbnRlbmQiX3MsIHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJ
bnNwZWN0b3JTZXJ2ZXI6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCl9LAorICAgICAgICB7IlNlbmRN
ZXNzYWdlVG9CYWNrZW5kIl9zLCByZWludGVycHJldF9jYXN0PENhbGxIYW5kbGVyPigmUmVtb3Rl
SW5zcGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZVRvQmFja2VuZCl9LAogICAgIH0pOwogCiAgICAg
cmV0dXJuIGRpc3BhdGNoTWFwOwpAQCAtMTA4LDcgKzEzNiw3IEBAIGJvb2wgUmVtb3RlSW5zcGVj
dG9yU2VydmVyOjpzdGFydCh1aW50MTZfdCBwb3J0KQogewogICAgIG1fc2VydmVyID0gUmVtb3Rl
SW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OmNyZWF0ZSh0aGlzLCAiUmVtb3RlSW5zcGVjdG9yU2Vy
dmVyIik7CiAKLSAgICBpZiAoIW1fc2VydmVyLT5saXN0ZW5JbmV0KHBvcnQpKSB7CisgICAgaWYg
KCFtX3NlcnZlci0+bGlzdGVuSW5ldChudWxscHRyLCBwb3J0KSkgewogICAgICAgICBtX3NlcnZl
ciA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yU2VydmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2Nr
ZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmgKaW5kZXggYjUwODBhZWQ0ZTEuLmQzNTFjOWZiZmE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2Nr
ZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNlcnZlci5oCkBAIC00Myw5ICs0
MywxMyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBzdGFydCh1aW50MTZf
dCk7CiAgICAgYm9vbCBpc1J1bm5pbmcoKSBjb25zdCB7IHJldHVybiAhIW1fc2VydmVyOyB9CiAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZFNlcnZlckNvbm5lY3Rpb24oUGxhdGZvcm1T
b2NrZXRUeXBlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBPcHRpb25hbDx1aW50MTZfdD4gbGlz
dGVuRm9yVGFyZ2V0cygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFBsYXRmb3Jt
U29ja2V0VHlwZT4gY29ubmVjdCgpOwogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBOZXZl
ckRlc3Ryb3llZDxSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI+OworICAgIFJlbW90ZUluc3BlY3RvclNl
cnZlcigpIHsgU29ja2V0Ojppbml0KCk7IH0KKwogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChD
b25uZWN0aW9uSUQpOwogCiAgICAgdm9pZCBzZXRUYXJnZXRMaXN0KGNvbnN0IEV2ZW50Jik7CkBA
IC01OCw3ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZW5kQ2xvc2VFdmVudChDb25uZWN0
aW9uSUQsIFRhcmdldElEKTsKICAgICB2b2lkIGNsaWVudENvbm5lY3Rpb25DbG9zZWQoKTsKIAot
ICAgIHZvaWQgZGlkQWNjZXB0KENvbm5lY3Rpb25JRCwgU29ja2V0OjpEb21haW4pIG92ZXJyaWRl
OworICAgIHZvaWQgZGlkQWNjZXB0KENvbm5lY3Rpb25JRCwgQ29ubmVjdGlvbklEIGxpc3RlbmVy
SUQsIFNvY2tldDo6RG9tYWluKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZENsb3NlKENvbm5lY3Rp
b25JRCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNlbmRXZWJJbnNwZWN0b3JFdmVudChDb25uZWN0
aW9uSUQsIGNvbnN0IFN0cmluZyYpOwpAQCAtNzIsNiArNzYsOSBAQCBwcml2YXRlOgogICAgIFZl
Y3RvcjxDb25uZWN0aW9uSUQ+IG1faW5zcGVjdG9yQ29ubmVjdGlvbnM7CiAgICAgTG9jayBtX2Nv
bm5lY3Rpb25zTG9jazsKIAorICAgIC8vIExpc3RlbmVyIGZvciB0YXJnZXRzLgorICAgIE9wdGlv
bmFsPENvbm5lY3Rpb25JRD4gbV9pbnNwZWN0b3JMaXN0ZW5lcjsKKwogICAgIC8vIENvbm5lY3Rp
b25zIGZyb20gUmVtb3RlSW5zcGVjdG9yQ2xpZW50LgogICAgIE9wdGlvbmFsPENvbm5lY3Rpb25J
RD4gbV9jbGllbnRDb25uZWN0aW9uOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3Bl
Y3RvclNvY2tldC5jcHAKaW5kZXggYjQzMWRmMGE3ZjQuLjVhMmNiZGU4ODJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5z
cGVjdG9yU29ja2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Jl
bW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU29ja2V0LmNwcApAQCAtMzksNiArMzksNyBAQAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIFBsYXRmb3JtU29ja2V0VHlwZSBSZW1vdGVJbnNwZWN0
b3I6OnNfY29ubmVjdGlvbklkZW50aWZpZXIgPSBJTlZBTElEX1NPQ0tFVF9WQUxVRTsKK3VpbnQx
Nl90IFJlbW90ZUluc3BlY3Rvcjo6c19zZXJ2ZXJQb3J0ID0gMDsKIAogUmVtb3RlSW5zcGVjdG9y
JiBSZW1vdGVJbnNwZWN0b3I6OnNpbmdsZXRvbigpCiB7CkBAIC00OCw3ICs0OSw3IEBAIFJlbW90
ZUluc3BlY3RvciYgUmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0b24oKQogCiBSZW1vdGVJbnNwZWN0
b3I6OlJlbW90ZUluc3BlY3RvcigpCiB7Ci0gICAgc3RhcnQoKTsKKyAgICBTb2NrZXQ6OmluaXQo
KTsKIH0KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OmRpZENsb3NlKENvbm5lY3Rpb25JRCBpZCkK
QEAgLTg3LDE0ICs4OCwxOCBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c3RhcnQoKQogewogICAg
IExvY2tIb2xkZXIgbG9jayhtX211dGV4KTsKIAotICAgIGlmIChtX2VuYWJsZWQgfHwgc19jb25u
ZWN0aW9uSWRlbnRpZmllciA9PSBJTlZBTElEX1NPQ0tFVF9WQUxVRSkKKyAgICBpZiAobV9lbmFi
bGVkIHx8IChzX2Nvbm5lY3Rpb25JZGVudGlmaWVyID09IElOVkFMSURfU09DS0VUX1ZBTFVFICYm
ICFzX3NlcnZlclBvcnQpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2VuYWJsZWQgPSB0cnVl
OwogCiAgICAgbV9zb2NrZXRDb25uZWN0aW9uID0gUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9p
bnQ6OmNyZWF0ZSh0aGlzLCAiUmVtb3RlSW5zcGVjdG9yIik7CiAKLSAgICBtX2NsaWVudElEID0g
bV9zb2NrZXRDb25uZWN0aW9uLT5jcmVhdGVDbGllbnQoc19jb25uZWN0aW9uSWRlbnRpZmllcik7
CisgICAgaWYgKHNfY29ubmVjdGlvbklkZW50aWZpZXIpIHsKKyAgICAgICAgbV9jbGllbnRJRCA9
IG1fc29ja2V0Q29ubmVjdGlvbi0+Y3JlYXRlQ2xpZW50KHNfY29ubmVjdGlvbklkZW50aWZpZXIp
OworICAgICAgICBzX2Nvbm5lY3Rpb25JZGVudGlmaWVyID0gSU5WQUxJRF9TT0NLRVRfVkFMVUU7
CisgICAgfSBlbHNlCisgICAgICAgIG1fY2xpZW50SUQgPSBtX3NvY2tldENvbm5lY3Rpb24tPmNv
bm5lY3RJbmV0KCIxMjcuMC4wLjEiLCBzX3NlcnZlclBvcnQpOwogCiAgICAgaWYgKCFtX3Rhcmdl
dE1hcC5pc0VtcHR5KCkpCiAgICAgICAgIHB1c2hMaXN0aW5nc1Nvb24oKTsKQEAgLTExNyw3ICsx
MjIsNiBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c3RvcEludGVybmFsKFN0b3BTb3VyY2UpCiAg
ICAgbV9hdXRvbWF0aWNJbnNwZWN0aW9uUGF1c2VkID0gZmFsc2U7CiAgICAgbV9zb2NrZXRDb25u
ZWN0aW9uID0gbnVsbHB0cjsKICAgICBtX2NsaWVudElEID0gV1RGOjpudWxsb3B0OwotICAgIHNf
Y29ubmVjdGlvbklkZW50aWZpZXIgPSBJTlZBTElEX1NPQ0tFVF9WQUxVRTsKIH0KIAogVGFyZ2V0
TGlzdGluZyBSZW1vdGVJbnNwZWN0b3I6Omxpc3RpbmdGb3JJbnNwZWN0aW9uVGFyZ2V0KGNvbnN0
IFJlbW90ZUluc3BlY3Rpb25UYXJnZXQmIHRhcmdldCkgY29uc3QKQEAgLTI5NSw2ICsyOTksMTEg
QEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnNldENvbm5lY3Rpb25JZGVudGlmaWVyKFBsYXRmb3Jt
U29ja2V0VHlwZSBjb25uZWN0aW9uSWRlbnQKICAgICBSZW1vdGVJbnNwZWN0b3I6OnNfY29ubmVj
dGlvbklkZW50aWZpZXIgPSBjb25uZWN0aW9uSWRlbnRpZmllcjsKIH0KIAordm9pZCBSZW1vdGVJ
bnNwZWN0b3I6OnNldFNlcnZlclBvcnQodWludDE2X3QgcG9ydCkKK3sKKyAgICBSZW1vdGVJbnNw
ZWN0b3I6OnNfc2VydmVyUG9ydCA9IHBvcnQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgogCiAjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9y
U29ja2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yU29ja2V0LmgKaW5kZXggMmYyZGFkYjI2NzYuLmJjYzYwOWZjMmI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yU29ja2V0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldC5oCkBAIC02NiwxNCArNjYs
MTcgQEAgZW51bSBjbGFzcyBEb21haW4gewogICAgIE5ldHdvcmssCiB9OwogCit2b2lkIGluaXQo
KTsKKwogT3B0aW9uYWw8UGxhdGZvcm1Tb2NrZXRUeXBlPiBjb25uZWN0KGNvbnN0IGNoYXIqIHNl
cnZlckFkZHJlc3MsIHVpbnQxNl90IHNlcnZlclBvcnQpOwotT3B0aW9uYWw8UGxhdGZvcm1Tb2Nr
ZXRUeXBlPiBsaXN0ZW4odWludDE2X3QgcG9ydCk7CitPcHRpb25hbDxQbGF0Zm9ybVNvY2tldFR5
cGU+IGxpc3Rlbihjb25zdCBjaGFyKiBhZGRyZXNzLCB1aW50MTZfdCBwb3J0KTsKIE9wdGlvbmFs
PFBsYXRmb3JtU29ja2V0VHlwZT4gYWNjZXB0KFBsYXRmb3JtU29ja2V0VHlwZSk7CiBPcHRpb25h
bDxzdGQ6OmFycmF5PFBsYXRmb3JtU29ja2V0VHlwZSwgMj4+IGNyZWF0ZVBhaXIoKTsKIAogdm9p
ZCBzZXR1cChQbGF0Zm9ybVNvY2tldFR5cGUpOwogYm9vbCBpc1ZhbGlkKFBsYXRmb3JtU29ja2V0
VHlwZSk7CiBib29sIGlzTGlzdGVuaW5nKFBsYXRmb3JtU29ja2V0VHlwZSk7Cit1aW50MTZfdCBn
ZXRQb3J0KFBsYXRmb3JtU29ja2V0VHlwZSk7CiAKIE9wdGlvbmFsPHNpemVfdD4gcmVhZChQbGF0
Zm9ybVNvY2tldFR5cGUsIHZvaWQqIGJ1ZmZlciwgaW50IGJ1ZmZlclNpemUpOwogT3B0aW9uYWw8
c2l6ZV90PiB3cml0ZShQbGF0Zm9ybVNvY2tldFR5cGUsIGNvbnN0IHZvaWQqIGRhdGEsIGludCBz
aXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3Rl
L3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5k
cG9pbnQuY3BwCmluZGV4IDY0N2ZmNjkzNTdhLi43MTAxNjY4YTk3YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3Rv
clNvY2tldEVuZHBvaW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQuY3BwCkBAIC03Niwx
NCArNzYsMTIgQEAgT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBSZW1vdGVJbnNwZWN0b3JTb2NrZXRF
bmRwb2ludDo6Y29ubmVjdEluZXQoY29uc3QgY2hhciogc2UKICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogfQogCi1ib29sIFJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjpsaXN0ZW5JbmV0
KHVpbnQxNl90IHBvcnQpCitPcHRpb25hbDxDb25uZWN0aW9uSUQ+IFJlbW90ZUluc3BlY3RvclNv
Y2tldEVuZHBvaW50OjpsaXN0ZW5JbmV0KGNvbnN0IGNoYXIqIGFkZHJlc3MsIHVpbnQxNl90IHBv
cnQpCiB7Ci0gICAgaWYgKGF1dG8gc29ja2V0ID0gU29ja2V0OjpsaXN0ZW4ocG9ydCkpIHsKLSAg
ICAgICAgaWYgKGNyZWF0ZUNsaWVudCgqc29ja2V0KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KKyAgICBpZiAoYXV0byBzb2NrZXQgPSBTb2NrZXQ6Omxpc3RlbihhZGRyZXNzLCBw
b3J0KSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNsaWVudCgqc29ja2V0KTsKIAotICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiBib29sIFJlbW90ZUluc3Bl
Y3RvclNvY2tldEVuZHBvaW50Ojppc0xpc3RlbmluZyhDb25uZWN0aW9uSUQgaWQpCkBAIC0xNjEs
NiArMTU5LDE1IEBAIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gUmVtb3RlSW5zcGVjdG9yU29ja2V0
RW5kcG9pbnQ6OmNyZWF0ZUNsaWVudChQbGF0Zm9ybVNvY2tlCiAgICAgcmV0dXJuIGlkOwogfQog
CitPcHRpb25hbDx1aW50MTZfdD4gUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OmdldFBv
cnQoQ29ubmVjdGlvbklEIGlkKSBjb25zdAoreworICAgIExvY2tIb2xkZXIgbG9jayhtX2Nvbm5l
Y3Rpb25zTG9jayk7CisgICAgaWYgKGNvbnN0IGF1dG8mIGNvbm5lY3Rpb24gPSBtX2Nvbm5lY3Rp
b25zLmdldChpZCkpCisgICAgICAgIHJldHVybiBTb2NrZXQ6OmdldFBvcnQoY29ubmVjdGlvbi0+
c29ja2V0KTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKIHZvaWQgUmVtb3RlSW5z
cGVjdG9yU29ja2V0RW5kcG9pbnQ6OnJlY3ZJZkVuYWJsZWQoQ29ubmVjdGlvbklEIGlkKQogewog
ICAgIExvY2tIb2xkZXIgbG9jayhtX2Nvbm5lY3Rpb25zTG9jayk7CkBAIC0yNDYsNyArMjUzLDcg
QEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6YWNjZXB0SW5ldFNvY2tldElm
RW5hYmxlZChDb25uZWN0aW9uSUQgaWQpCiAgICAgICAgICAgICBsb2NrLnVubG9ja0Vhcmx5KCk7
CiAgICAgICAgICAgICBpZiAoYXV0byBuZXdJRCA9IGNyZWF0ZUNsaWVudCgqc29ja2V0KSkgewog
ICAgICAgICAgICAgICAgIGlmIChtX2luc3BlY3RvckNsaWVudCkgewotICAgICAgICAgICAgICAg
ICAgICBtX2luc3BlY3RvckNsaWVudC0+ZGlkQWNjZXB0KG5ld0lELnZhbHVlKCksIFNvY2tldDo6
RG9tYWluOjpOZXR3b3JrKTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQt
PmRpZEFjY2VwdChuZXdJRC52YWx1ZSgpLCBpZCwgU29ja2V0OjpEb21haW46Ok5ldHdvcmspOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUv
c29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9p
bnQuaAppbmRleCA2NjlhODQ4N2Y3My4uNzk2NTdjMjQ1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2Nr
ZXRFbmRwb2ludC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3Rl
L3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludC5oCkBAIC01MywxMiArNTMsMTQg
QEAgcHVibGljOgogICAgIH5SZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludCgpOwogCiAgICAg
T3B0aW9uYWw8Q29ubmVjdGlvbklEPiBjb25uZWN0SW5ldChjb25zdCBjaGFyKiBzZXJ2ZXJBZGRy
LCB1aW50MTZfdCBzZXJ2ZXJQb3J0KTsKLSAgICBib29sIGxpc3RlbkluZXQodWludDE2X3QgcG9y
dCk7CisgICAgT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBsaXN0ZW5JbmV0KGNvbnN0IGNoYXIqIGFk
ZHJlc3MsIHVpbnQxNl90IHBvcnQpOwogCiAgICAgdm9pZCBzZW5kKENvbm5lY3Rpb25JRCwgY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90KTsKIAogICAgIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4g
Y3JlYXRlQ2xpZW50KFBsYXRmb3JtU29ja2V0VHlwZSBmZCk7CiAKKyAgICBPcHRpb25hbDx1aW50
MTZfdD4gZ2V0UG9ydChDb25uZWN0aW9uSUQpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCByZWN2SWZFbmFibGVkKENvbm5lY3Rpb25JRCk7CiAgICAgdm9pZCBzZW5kSWZFbmFibGVkKENv
bm5lY3Rpb25JRCk7CkBAIC02Nyw3ICs2OSw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGFjY2Vw
dEluZXRTb2NrZXRJZkVuYWJsZWQoQ29ubmVjdGlvbklEKTsKICAgICBib29sIGlzTGlzdGVuaW5n
KENvbm5lY3Rpb25JRCk7CiAKLSAgICBMb2NrIG1fY29ubmVjdGlvbnNMb2NrOworICAgIG11dGFi
bGUgTG9jayBtX2Nvbm5lY3Rpb25zTG9jazsKICAgICBIYXNoTWFwPENvbm5lY3Rpb25JRCwgc3Rk
Ojp1bmlxdWVfcHRyPFNvY2tldDo6Q29ubmVjdGlvbj4+IG1fY29ubmVjdGlvbnM7CiAKICAgICBQ
bGF0Zm9ybVNvY2tldFR5cGUgbV93YWtldXBTZW5kU29ja2V0IHsgSU5WQUxJRF9TT0NLRVRfVkFM
VUUgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3Rl
L3NvY2tldC9wb3NpeC9SZW1vdGVJbnNwZWN0b3JTb2NrZXRQT1NJWC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvcG9zaXgvUmVtb3RlSW5zcGVjdG9y
U29ja2V0UE9TSVguY3BwCmluZGV4IGRlZjRkYjU1ODYxLi5mZDMyMGE5MjE0NyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L3Bvc2l4L1Jl
bW90ZUluc3BlY3RvclNvY2tldFBPU0lYLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvcG9zaXgvUmVtb3RlSW5zcGVjdG9yU29ja2V0UE9TSVgu
Y3BwCkBAIC0zOSw2ICszOSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogbmFtZXNwYWNl
IFNvY2tldCB7CiAKK3ZvaWQgaW5pdCgpCit7Cit9CisKIE9wdGlvbmFsPFBsYXRmb3JtU29ja2V0
VHlwZT4gY29ubmVjdChjb25zdCBjaGFyKiBzZXJ2ZXJBZGRyZXNzLCB1aW50MTZfdCBzZXJ2ZXJQ
b3J0KQogewogICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyZXNzID0geyB9OwpAQCAtNjMsOSAr
NjcsOSBAQCBPcHRpb25hbDxQbGF0Zm9ybVNvY2tldFR5cGU+IGNvbm5lY3QoY29uc3QgY2hhciog
c2VydmVyQWRkcmVzcywgdWludDE2X3Qgc2VydmVyUAogICAgIHJldHVybiBmZDsKIH0KIAotT3B0
aW9uYWw8UGxhdGZvcm1Tb2NrZXRUeXBlPiBsaXN0ZW4odWludDE2X3QgcG9ydCkKK09wdGlvbmFs
PFBsYXRmb3JtU29ja2V0VHlwZT4gbGlzdGVuKGNvbnN0IGNoYXIqIGFkZHJlc3MsIHVpbnQxNl90
IHBvcnQpCiB7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHJlc3MgPSB7IH07CisgICAgc3Ry
dWN0IHNvY2thZGRyX2luIGFkZHIgPSB7IH07CiAKICAgICBpbnQgZmRMaXN0ZW4gPSBzb2NrZXQo
QUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKTsKICAgICBpZiAoZmRMaXN0ZW4gPCAw
KSB7CkBAIC04NiwxMCArOTAsMTMgQEAgT3B0aW9uYWw8UGxhdGZvcm1Tb2NrZXRUeXBlPiBsaXN0
ZW4odWludDE2X3QgcG9ydCkKICAgICB9CiAKICAgICAvLyBGSVhNRTogU3VwcG9ydCBBRl9JTkVU
NiBjb25uZWN0aW9ucy4KLSAgICBhZGRyZXNzLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotICAgIGFk
ZHJlc3Muc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7Ci0gICAgYWRkcmVzcy5z
aW5fcG9ydCA9IGh0b25zKHBvcnQpOwotICAgIGVycm9yID0gOjpiaW5kKGZkTGlzdGVuLCAoc3Ry
dWN0IHNvY2thZGRyKikmYWRkcmVzcywgc2l6ZW9mKGFkZHJlc3MpKTsKKyAgICBhZGRyLnNpbl9m
YW1pbHkgPSBBRl9JTkVUOworICAgIGlmIChhZGRyZXNzKQorICAgICAgICBpbmV0X2F0b24oYWRk
cmVzcywgJmFkZHIuc2luX2FkZHIpOworICAgIGVsc2UKKyAgICAgICAgYWRkci5zaW5fYWRkci5z
X2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKKyAgICBhZGRyLnNpbl9wb3J0ID0gaHRvbnMocG9y
dCk7CisgICAgZXJyb3IgPSA6OmJpbmQoZmRMaXN0ZW4sIChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRy
LCBzaXplb2YoYWRkcikpOwogICAgIGlmIChlcnJvciA8IDApIHsKICAgICAgICAgTE9HX0VSUk9S
KCJiaW5kKCkgZmFpbGVkLCBlcnJubyA9ICVkIiwgZXJybm8pOwogICAgICAgICA6OmNsb3NlKGZk
TGlzdGVuKTsKQEAgLTE1NSw2ICsxNjIsMTcgQEAgYm9vbCBpc0xpc3RlbmluZyhQbGF0Zm9ybVNv
Y2tldFR5cGUgc29ja2V0KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAordWludDE2X3QgZ2V0UG9y
dChQbGF0Zm9ybVNvY2tldFR5cGUgc29ja2V0KQoreworICAgIEFTU0VSVChpc1ZhbGlkKHNvY2tl
dCkpOworCisgICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHJlc3M7CisgICAgaW50IGxlbiA9IHNp
emVvZihhZGRyZXNzKTsKKyAgICBtZW1zZXQoJmFkZHJlc3MsIDAsIGxlbik7CisgICAgZ2V0c29j
a25hbWUoc29ja2V0LCByZWludGVycHJldF9jYXN0PHN0cnVjdCBzb2NrYWRkcio+KCZhZGRyZXNz
KSwgJmxlbik7CisgICAgcmV0dXJuIGFkZHJlc3Muc2luX3BvcnQ7Cit9CisKIE9wdGlvbmFsPHNp
emVfdD4gcmVhZChQbGF0Zm9ybVNvY2tldFR5cGUgc29ja2V0LCB2b2lkKiBidWZmZXIsIGludCBi
dWZmZXJTaXplKQogewogICAgIEFTU0VSVChpc1ZhbGlkKHNvY2tldCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L3dpbi9SZW1vdGVJ
bnNwZWN0b3JTb2NrZXRXaW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9y
ZW1vdGUvc29ja2V0L3dpbi9SZW1vdGVJbnNwZWN0b3JTb2NrZXRXaW4uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZGRhMjNjYjVjZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC93aW4vUmVt
b3RlSW5zcGVjdG9yU29ja2V0V2luLmNwcApAQCAtMCwwICsxLDMzNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yU29ja2V0
LmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgPG11dGV4Pgor
I2luY2x1ZGUgPHdzMnRjcGlwLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3Bh
Y2UgU29ja2V0IHsKKworc3RhdGljIFBsYXRmb3JtU29ja2V0VHlwZSBjcmVhdGUoKTsKKwordm9p
ZCBpbml0KCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgZmxhZzsKKyAgICBzdGQ6OmNh
bGxfb25jZShmbGFnLCBbXSB7CisgICAgICAgIFdTQURBVEEgZGF0YTsKKyAgICAgICAgV09SRCB2
ZXJzaW9uUmVxdWVzdGVkID0gTUFLRVdPUkQoMiwgMCk7CisKKyAgICAgICAgV1NBU3RhcnR1cCh2
ZXJzaW9uUmVxdWVzdGVkLCAmZGF0YSk7CisgICAgfSk7Cit9CisKK2NsYXNzIFNvY2tldCB7Citw
dWJsaWM6CisgICAgU29ja2V0KCkKKyAgICAgICAgOiBtX3NvY2tldChjcmVhdGUoKSkKKyAgICB7
CisgICAgfQorCisgICAgZXhwbGljaXQgU29ja2V0KFBsYXRmb3JtU29ja2V0VHlwZSBzb2NrZXQp
CisgICAgICAgIDogbV9zb2NrZXQoc29ja2V0KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNp
dCBTb2NrZXQoY29uc3QgU29ja2V0JikgPSBkZWxldGU7CisgICAgflNvY2tldCgpCisgICAgewor
ICAgICAgICBjbG9zZShtX3NvY2tldCk7CisgICAgfQorCisgICAgb3BlcmF0b3IgUGxhdGZvcm1T
b2NrZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9zb2NrZXQ7IH0KKyAgICBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gaXNWYWxpZChtX3NvY2tldCk7IH0KKworICAgIFBsYXRmb3JtU29j
a2V0VHlwZSBsZWFrKCkKKyAgICB7CisgICAgICAgIGF1dG8gc29ja2V0ID0gbV9zb2NrZXQ7Cisg
ICAgICAgIG1fc29ja2V0ID0gSU5WQUxJRF9TT0NLRVRfVkFMVUU7CisgICAgICAgIHJldHVybiBz
b2NrZXQ7CisgICAgfQorCitwcml2YXRlOgorICAgIFBsYXRmb3JtU29ja2V0VHlwZSBtX3NvY2tl
dCB7IElOVkFMSURfU09DS0VUX1ZBTFVFIH07Cit9OworCitzdGF0aWMgUGxhdGZvcm1Tb2NrZXRU
eXBlIGNyZWF0ZSgpCit7CisgICAgUGxhdGZvcm1Tb2NrZXRUeXBlIHNvY2tldCA9IDo6c29ja2V0
KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7CisgICAgaWYgKHNvY2tldCA9PSBJ
TlZBTElEX1NPQ0tFVCkgeworICAgICAgICBMT0dfRVJST1IoInNvY2tldCgpIGZhaWxlZCwgZXJy
bm8gPSAlZCIsIFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIElOVkFMSURfU09D
S0VUX1ZBTFVFOworICAgIH0KKyAgICByZXR1cm4gc29ja2V0OworfQorCitzdGF0aWMgYm9vbCBz
ZXRPcHQoUGxhdGZvcm1Tb2NrZXRUeXBlIHNvY2tldCwgaW50IG9wdG5hbWUsIGNvbnN0IHZvaWQq
IG9wdHZhbCwgaW50IG9wdGxlbiwgY29uc3QgY2hhciogZGVidWcpCit7CisgICAgaW50IGVycm9y
ID0gOjpzZXRzb2Nrb3B0KHNvY2tldCwgU09MX1NPQ0tFVCwgb3B0bmFtZSwgc3RhdGljX2Nhc3Q8
Y29uc3QgY2hhcio+KG9wdHZhbCksIG9wdGxlbik7CisgICAgaWYgKGVycm9yIDwgMCkgeworICAg
ICAgICBMT0dfRVJST1IoInNldHNvY2tvcHQoKSAlcywgZXJybm8gPSAlZCIsIGRlYnVnLCBXU0FH
ZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3N0YXRpYyBib29sIHNldE9wdEVuYWJsZWQoUGxhdGZvcm1Tb2NrZXRUeXBl
IHNvY2tldCwgaW50IG9wdG5hbWUsIGJvb2wgZmxhZywgY29uc3QgY2hhciogZGVidWcpCit7Cisg
ICAgY29uc3QgaW50IHZhbCA9IGZsYWc7CisgICAgcmV0dXJuIHNldE9wdChzb2NrZXQsIG9wdG5h
bWUsICZ2YWwsIHNpemVvZih2YWwpLCBkZWJ1Zyk7Cit9CisKK3N0YXRpYyBib29sIGVuYWJsZU9w
dChQbGF0Zm9ybVNvY2tldFR5cGUgc29ja2V0LCBpbnQgb3B0bmFtZSwgY29uc3QgY2hhciogZGVi
dWcpCit7CisgICAgcmV0dXJuIHNldE9wdEVuYWJsZWQoc29ja2V0LCBvcHRuYW1lLCB0cnVlLCBk
ZWJ1Zyk7Cit9CisKK3N0YXRpYyBQbGF0Zm9ybVNvY2tldFR5cGUgY29ubmVjdFRvKHN0cnVjdCBz
b2NrYWRkcl9pbiYgYWRkcmVzcykKK3sKKyAgICBTb2NrZXQgc29ja2V0OworICAgIGlmICghc29j
a2V0KQorICAgICAgICByZXR1cm4gSU5WQUxJRF9TT0NLRVRfVkFMVUU7CisKKyAgICBpbnQgZXJy
b3IgPSA6OmNvbm5lY3Qoc29ja2V0LCAoc3RydWN0IHNvY2thZGRyKikmYWRkcmVzcywgc2l6ZW9m
KGFkZHJlc3MpKTsKKyAgICBpZiAoZXJyb3IgPCAwKQorICAgICAgICByZXR1cm4gSU5WQUxJRF9T
T0NLRVRfVkFMVUU7CisKKyAgICByZXR1cm4gc29ja2V0LmxlYWsoKTsKK30KKworc3RhdGljIFBs
YXRmb3JtU29ja2V0VHlwZSBiaW5kQW5kTGlzdGVuKHN0cnVjdCBzb2NrYWRkcl9pbiYgYWRkcmVz
cykKK3sKKyAgICBTb2NrZXQgc29ja2V0OworICAgIGlmICghc29ja2V0KQorICAgICAgICByZXR1
cm4gSU5WQUxJRF9TT0NLRVRfVkFMVUU7CisKKyAgICBpZiAoIWVuYWJsZU9wdChzb2NrZXQsIFNP
X1JFVVNFQUREUiwgIlNPX1JFVVNFQUREUiIpKQorICAgICAgICByZXR1cm4gSU5WQUxJRF9TT0NL
RVRfVkFMVUU7CisKKyAgICAvLyBXaW5Tb2NrIGRvZXNuJ3QgaGF2ZSBgU09fUkVVU0VQT1JUYC4K
KworICAgIGludCBlcnJvciA9IDo6YmluZChzb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRy
ZXNzLCBzaXplb2YoYWRkcmVzcykpOworICAgIGlmIChlcnJvciA8IDApIHsKKyAgICAgICAgTE9H
X0VSUk9SKCJiaW5kKCkgZmFpbGVkLCBlcnJubyA9ICVkIiwgV1NBR2V0TGFzdEVycm9yKCkpOwor
ICAgICAgICByZXR1cm4gSU5WQUxJRF9TT0NLRVRfVkFMVUU7CisgICAgfQorCisgICAgZXJyb3Ig
PSA6Omxpc3Rlbihzb2NrZXQsIDEpOworICAgIGlmIChlcnJvciA8IDApIHsKKyAgICAgICAgTE9H
X0VSUk9SKCJsaXN0ZW4oKSBmYWlsZWQsIGVycm5vID0gJWQiLCBXU0FHZXRMYXN0RXJyb3IoKSk7
CisgICAgICAgIHJldHVybiBJTlZBTElEX1NPQ0tFVF9WQUxVRTsKKyAgICB9CisKKyAgICByZXR1
cm4gc29ja2V0LmxlYWsoKTsKK30KKworT3B0aW9uYWw8UGxhdGZvcm1Tb2NrZXRUeXBlPiBjb25u
ZWN0KGNvbnN0IGNoYXIqIHNlcnZlckFkZHJlc3MsIHVpbnQxNl90IHNlcnZlclBvcnQpCit7Cisg
ICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHJlc3MgPSB7IH07CisKKyAgICBhZGRyZXNzLnNpbl9m
YW1pbHkgPSBBRl9JTkVUOworICAgIDo6aW5ldF9wdG9uKEFGX0lORVQsIHNlcnZlckFkZHJlc3Ms
ICZhZGRyZXNzLnNpbl9hZGRyKTsKKyAgICBhZGRyZXNzLnNpbl9wb3J0ID0gaHRvbnMoc2VydmVy
UG9ydCk7CisKKyAgICBhdXRvIHNvY2tldCA9IGNvbm5lY3RUbyhhZGRyZXNzKTsKKyAgICBpZiAo
IWlzVmFsaWQoc29ja2V0KSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjb25uZWN0
IHRvICVzOiV1LCBlcnJubyA9ICVkIiwgc2VydmVyQWRkcmVzcywgc2VydmVyUG9ydCwgV1NBR2V0
TGFzdEVycm9yKCkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAg
IHJldHVybiBzb2NrZXQ7Cit9CisKK09wdGlvbmFsPFBsYXRmb3JtU29ja2V0VHlwZT4gbGlzdGVu
KGNvbnN0IGNoYXIqIGFkZHJlc3NTdHIsIHVpbnQxNl90IHBvcnQpCit7CisgICAgLy8gRklYTUU6
IFN1cHBvcnQgQUZfSU5FVDYgY29ubmVjdGlvbnMuCisgICAgc3RydWN0IHNvY2thZGRyX2luIGFk
ZHJlc3MgPSB7IH07CisgICAgYWRkcmVzcy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICBpZiAo
YWRkcmVzc1N0cikKKyAgICAgICAgOjppbmV0X3B0b24oQUZfSU5FVCwgYWRkcmVzc1N0ciwgJmFk
ZHJlc3Muc2luX2FkZHIpOworICAgIGVsc2UKKyAgICAgICAgYWRkcmVzcy5zaW5fYWRkci5zX2Fk
ZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKKyAgICBhZGRyZXNzLnNpbl9wb3J0ID0gaHRvbnMocG9y
dCk7CisKKyAgICBhdXRvIHNvY2tldCA9IGJpbmRBbmRMaXN0ZW4oYWRkcmVzcyk7CisgICAgaWYg
KCFpc1ZhbGlkKHNvY2tldCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBy
ZXR1cm4gc29ja2V0OworfQorCitPcHRpb25hbDxQbGF0Zm9ybVNvY2tldFR5cGU+IGFjY2VwdChQ
bGF0Zm9ybVNvY2tldFR5cGUgc29ja2V0KQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRy
ZXNzID0geyB9OworCisgICAgc29ja2xlbl90IGxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pOworICAgIGludCBmZCA9IDo6YWNjZXB0KHNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciopICZh
ZGRyZXNzLCAmbGVuKTsKKyAgICBpZiAoZmQgPj0gMCkKKyAgICAgICAgcmV0dXJuIGZkOworCisg
ICAgTE9HX0VSUk9SKCJhY2NlcHQoaW5ldCkgZXJyb3IgKGVycm5vID0gJWQpIiwgV1NBR2V0TGFz
dEVycm9yKCkpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK09wdGlvbmFsPHN0ZDo6
YXJyYXk8UGxhdGZvcm1Tb2NrZXRUeXBlLCAyPj4gY3JlYXRlUGFpcigpCit7CisgICAgc3RydWN0
IHNvY2thZGRyX2luIGFkZHJlc3M7CisgICAgYWRkcmVzcy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsK
KyAgICBhZGRyZXNzLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7Cisg
ICAgYWRkcmVzcy5zaW5fcG9ydCA9IDA7CisKKyAgICBTb2NrZXQgc2VydmVyKGJpbmRBbmRMaXN0
ZW4oYWRkcmVzcykpOworICAgIGlmICghc2VydmVyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgYWRkcmVzcy5zaW5fcG9ydCA9IGdldFBvcnQoc2VydmVyKTsKKworICAgIHN0
ZDo6YXJyYXk8UGxhdGZvcm1Tb2NrZXRUeXBlLCAyPiBzb2NrZXRzOworICAgIHNvY2tldHNbMF0g
PSBjb25uZWN0VG8oYWRkcmVzcyk7CisgICAgaWYgKCFpc1ZhbGlkKHNvY2tldHNbMF0pKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKGF1dG8gc29ja2V0ID0gYWNjZXB0
KHNlcnZlcikpIHsKKyAgICAgICAgc29ja2V0c1sxXSA9ICpzb2NrZXQ7CisgICAgICAgIHJldHVy
biBzb2NrZXRzOworICAgIH0KKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3ZvaWQg
c2V0dXAoUGxhdGZvcm1Tb2NrZXRUeXBlIHNvY2tldCkKK3sKKyAgICAvLyBmY250bChzb2NrZXQs
IEZfU0VURkQsIEZEX0NMT0VYRUMpOworICAgIC8vIGludCBmbGFncyA9IGZjbnRsKHNvY2tldCwg
Rl9HRVRGTCwgMCk7CisgICAgLy8gZmNudGwoc29ja2V0LCBGX1NFVEZMLCBmbGFncyB8IE9fTk9O
QkxPQ0spOworCisgICAgc2V0T3B0KHNvY2tldCwgU09fUkNWQlVGLCAmQnVmZmVyU2l6ZSwgc2l6
ZW9mKEJ1ZmZlclNpemUpLCAiU09fUkNWQlVGIik7CisgICAgc2V0T3B0KHNvY2tldCwgU09fU05E
QlVGLCAmQnVmZmVyU2l6ZSwgc2l6ZW9mKEJ1ZmZlclNpemUpLCAiU09fU05EQlVGIik7Cit9CisK
K2Jvb2wgaXNWYWxpZChQbGF0Zm9ybVNvY2tldFR5cGUgc29ja2V0KQoreworICAgIHJldHVybiBz
b2NrZXQgIT0gSU5WQUxJRF9TT0NLRVRfVkFMVUU7Cit9CisKK2Jvb2wgaXNMaXN0ZW5pbmcoUGxh
dGZvcm1Tb2NrZXRUeXBlIHNvY2tldCkKK3sKKyAgICBpbnQgb3V0OworICAgIHNvY2tsZW5fdCBv
dXRTaXplID0gc2l6ZW9mKG91dCk7CisgICAgaWYgKGdldHNvY2tvcHQoc29ja2V0LCBTT0xfU09D
S0VULCBTT19BQ0NFUFRDT05OLCByZWludGVycHJldF9jYXN0PGNoYXIqPigmb3V0KSwgJm91dFNp
emUpICE9IC0xKQorICAgICAgICByZXR1cm4gb3V0OworCisgICAgTE9HX0VSUk9SKCJnZXRzb2Nr
b3B0IGVycm5vID0gJWQiLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit1aW50MTZfdCBnZXRQb3J0KFBsYXRmb3JtU29ja2V0VHlwZSBzb2NrZXQpCit7CisgICAg
QVNTRVJUKGlzVmFsaWQoc29ja2V0KSk7CisKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcmVz
czsKKyAgICBpbnQgbGVuID0gc2l6ZW9mKGFkZHJlc3MpOworICAgIG1lbXNldCgmYWRkcmVzcywg
MCwgbGVuKTsKKyAgICBnZXRzb2NrbmFtZShzb2NrZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8c3RydWN0
IHNvY2thZGRyKj4oJmFkZHJlc3MpLCAmbGVuKTsKKyAgICByZXR1cm4gYWRkcmVzcy5zaW5fcG9y
dDsKK30KKworT3B0aW9uYWw8c2l6ZV90PiByZWFkKFBsYXRmb3JtU29ja2V0VHlwZSBzb2NrZXQs
IHZvaWQqIGJ1ZmZlciwgaW50IGJ1ZmZlclNpemUpCit7CisgICAgQVNTRVJUKGlzVmFsaWQoc29j
a2V0KSk7CisKKyAgICBhdXRvIHJlYWRTaXplID0gOjpyZWN2KHNvY2tldCwgcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oYnVmZmVyKSwgYnVmZmVyU2l6ZSwgMCk7CisgICAgaWYgKHJlYWRTaXplICE9
IFNPQ0tFVF9FUlJPUikKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ocmVhZFNp
emUpOworCisgICAgTE9HX0VSUk9SKCJyZWFkIGVycm9yIChlcnJubyA9ICVkKSIsIFdTQUdldExh
c3RFcnJvcigpKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitPcHRpb25hbDxzaXpl
X3Q+IHdyaXRlKFBsYXRmb3JtU29ja2V0VHlwZSBzb2NrZXQsIGNvbnN0IHZvaWQqIGRhdGEsIGlu
dCBzaXplKQoreworICAgIEFTU0VSVChpc1ZhbGlkKHNvY2tldCkpOworCisgICAgYXV0byB3cml0
ZVNpemUgPSA6OnNlbmQoc29ja2V0LCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRh
KSwgc2l6ZSwgMCk7CisgICAgaWYgKHdyaXRlU2l6ZSAhPSBTT0NLRVRfRVJST1IpCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KHdyaXRlU2l6ZSk7CisKKyAgICBMT0dfRVJST1Io
IndyaXRlIGVycm9yIChlcnJubyA9ICVkKSIsIFdTQUdldExhc3RFcnJvcigpKTsKKyAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworfQorCit2b2lkIGNsb3NlKFBsYXRmb3JtU29ja2V0VHlwZSYgc29j
a2V0KQoreworICAgIGlmICghaXNWYWxpZChzb2NrZXQpKQorICAgICAgICByZXR1cm47CisKKyAg
ICA6OmNsb3Nlc29ja2V0KHNvY2tldCk7CisgICAgc29ja2V0ID0gSU5WQUxJRF9TT0NLRVRfVkFM
VUU7Cit9CisKK1BvbGxpbmdEZXNjcmlwdG9yIHByZXBhcmVQb2xsaW5nKFBsYXRmb3JtU29ja2V0
VHlwZSBzb2NrZXQpCit7CisgICAgUG9sbGluZ0Rlc2NyaXB0b3IgcG9sbDsKKyAgICBwb2xsLmZk
ID0gc29ja2V0OworICAgIHBvbGwuZXZlbnRzID0gUE9MTElOOworICAgIHJldHVybiBwb2xsOwor
fQorCitib29sIHBvbGwoVmVjdG9yPFBvbGxpbmdEZXNjcmlwdG9yPiYgcG9sbERlc2NyaXB0b3Jz
LCBpbnQgdGltZW91dCkKK3sKKyAgICBpbnQgcmV0ID0gOjpXU0FQb2xsKHBvbGxEZXNjcmlwdG9y
cy5kYXRhKCksIHBvbGxEZXNjcmlwdG9ycy5zaXplKCksIHRpbWVvdXQpOworICAgIHJldHVybiBy
ZXQgPiAwOworfQorCitib29sIGlzUmVhZGFibGUoY29uc3QgUG9sbGluZ0Rlc2NyaXB0b3ImIHBv
bGwpCit7CisgICAgcmV0dXJuIHBvbGwucmV2ZW50cyAmIFBPTExJTjsKK30KKworYm9vbCBpc1dy
aXRhYmxlKGNvbnN0IFBvbGxpbmdEZXNjcmlwdG9yJiBwb2xsKQoreworICAgIHJldHVybiBwb2xs
LnJldmVudHMgJiBQT0xMT1VUOworfQorCit2b2lkIG1hcmtXYWl0aW5nV3JpdGFibGUoUG9sbGlu
Z0Rlc2NyaXB0b3ImIHBvbGwpCit7CisgICAgcG9sbC5ldmVudHMgfD0gUE9MTE9VVDsKK30KKwor
dm9pZCBjbGVhcldhaXRpbmdXcml0YWJsZShQb2xsaW5nRGVzY3JpcHRvciYgcG9sbCkKK3sKKyAg
ICBwb2xsLmV2ZW50cyAmPSB+UE9MTE9VVDsKK30KKworfSAvLyBuYW1lc3BhY2UgU29ja2V0CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1BsYXlTdGF0aW9uLmNtYWtl
IGIvU291cmNlL2NtYWtlL09wdGlvbnNQbGF5U3RhdGlvbi5jbWFrZQppbmRleCAxNjFmN2FmYzFl
YS4uZDAyMmI1YWZhNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zUGxheVN0YXRp
b24uY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNQbGF5U3RhdGlvbi5jbWFrZQpAQCAt
MTA4LDYgKzEwOCw3IEBAIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DVVJMIE9OKQogU0VU
X0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0ZSRUVUWVBFIE9OKQogU0VUX0FORF9FWFBPU0VfVE9f
QlVJTEQoVVNFX0hBUkZCVVpaIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0xJQldQ
RSBPTikKK1NFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9SSV9TT0NLRVRfU0VSVkVSIEVOQUJM
RV9SRU1PVEVfSU5TUEVDVE9SKQogCiAjIFJlbmRlcmluZyBvcHRpb25zCiBTRVRfQU5EX0VYUE9T
RV9UT19CVUlMRChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF8zRCBPTikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9jbWFrZS9PcHRpb25zV2luLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNXaW4uY21h
a2UKaW5kZXggZDg5Y2JmZjdlN2UuLmI2YzEzODYyMzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21h
a2UvT3B0aW9uc1dpbi5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbi5jbWFrZQpA
QCAtNjcsNyArNjcsNiBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
V0VCQVNTRU1CTFkgUFJJVkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfV0VCX0FVRElPIFBVQkxJQyBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfWFNMVCBQVUJMSUMgT04pCiAKLVdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NNT09USF9TQ1JPTExJTkcgUFJJVkFURSBP
RkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVVNFUl9NRVNTQUdF
X0hBTkRMRVJTIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX1VTRVJTRUxFQ1RfQUxMIFBSSVZBVEUgT0ZGKQpAQCAtOTIsNiArOTEsNyBAQCBpZiAo
JHtXVEZfUExBVEZPUk1fV0lOX0NBSVJPfSkKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTIFBSSVZBVEUgJHtFTkFCTEVf
RVhQRVJJTUVOVEFMX0ZFQVRVUkVTfSkKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfU0VSVklDRV9XT1JLRVIgUFJJVkFURSAke0VOQUJMRV9FWFBFUklNRU5UQUxf
RkVBVFVSRVN9KQogICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9W
QVJJQVRJT05fRk9OVFMgUFJJVkFURSAke0VOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVN9KQor
ICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRU1PVEVfSU5TUEVD
VE9SIFBSSVZBVEUgJHtFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTfSkKIAogICAgICMgRklY
TUU6IEltcGxlbWVudCBwbHVnaW4gcHJvY2VzcyBvbiBNb2Rlcm4gV2ViS2l0LiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MzEzCiAgICAgV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkgUFJJVkFURSBPRkYp
CkBAIC0xMDAsNiArMTAwLDcgQEAgZWxzZSAoKQogICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9JTlRMIFBVQkxJQyBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX1BVQkxJQ19TVUZGSVhfTElTVCBQUklWQVRFIE9GRikKICAg
ICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCR0wgUFVCTElDIE9G
RikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVNT1RFX0lO
U1BFQ1RPUiBQUklWQVRFIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShVU0VfVkVSU0lPTl9TVEFNUEVSIFBSSVZBVEUgT04pCiBlbmRpZiAoKQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlv
bnNXaW5DYWlyby5jbWFrZQppbmRleCBhZTRjNzc5MDY1MC4uNGQ1ZDQ1YTljYWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL2NtYWtl
L09wdGlvbnNXaW5DYWlyby5jbWFrZQpAQCAtMjgsNiArMjgsNyBAQCBTRVRfQU5EX0VYUE9TRV9U
T19CVUlMRChVU0VfQ1VSTCBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9URVhUVVJF
X01BUFBFUiBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9URVhUVVJFX01BUFBFUl9H
TCBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9NRURJQV9GT1VOREFUSU9OIE9OKQor
U0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX1JJX1NPQ0tFVF9TRVJWRVIgRU5BQkxFX1JFTU9U
RV9JTlNQRUNUT1IpCiAKIHNldChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF8zRCBPTikKIHNldChF
TkFCTEVfV0VCS0lUIE9OKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370083</attachid>
            <date>2019-05-16 16:16:04 -0700</date>
            <delta_ts>2019-05-17 11:43:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197434-20190516161601.patch</filename>
            <type>text/plain</type>
            <size>38082</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NTUwNjM2OWVlN2IzYmQ1NDY2Y2Y4ZWQ0NjI2NDU0MTA0OTQ5NTgyLi42NjM5NzMzMDExYjI1NDdm
Y2NiZmQ0YWZiMjIyOGEwYzZkNTU5MmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAxOS0wNS0xNiAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW1dpbkNhaXJvXSBJbXBsZW1lbnQgUmVtb3RlIFdlYiBJbnNwZWN0
b3IgQ2xpZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk3NDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTZXJ2ZXIuY3BwOgor
ICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmRpc3BhdGNoTWFwKToK
KwogMjAxOS0wNS0xNiAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAK
ICAgICAgICAgW0pTQ10gSW52YWxpZCBBc3NpZ25tZW50VGFyZ2V0VHlwZSBzaG91bGQgYmUgYW4g
ZWFybHkgZXJyb3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDU5YjQzNzAyNzkxMjY0ODE3Y2VkMmFlMTMxZGFmZGIx
OTc2YWZhYTMuLjc0M2NjOTUxOWMwZTFhYjVlYjdjYjliZjQ5MWQzZDg3MDhkMzI2NWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTktMDUtMTYgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtp
cnNsaW5nQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5DYWlyb10gSW1wbGVtZW50IFJlbW90ZSBX
ZWIgSW5zcGVjdG9yIENsaWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NzQzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICogVUlQcm9jZXNzL1Jl
bW90ZVdlYkluc3BlY3RvclByb3h5LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1JlbW90ZUluc3BlY3Rv
ckNsaWVudC5jcHA6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vUmVtb3RlSW5zcGVj
dG9yQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vUmVtb3RlSW5zcGVj
dG9yUHJvdG9jb2xIYW5kbGVyV2luLmNwcDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL3dp
bi9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXJXaW4uaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHA6IEFkZGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXc6OldlYlZpZXcpOgorCiAyMDE5LTA1LTE2ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIFNQSSB0byBzZXQgYSBsaXN0IG9mIGhvc3Rz
IHRvIHdoaWNoIHRvIHNlbmQgY3VzdG9tIGhlYWRlciBmaWVsZHMgY3Jvc3Mtb3JpZ2luCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVt
b3RlSW5zcGVjdG9yU2VydmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTZXJ2ZXIuY3BwCmluZGV4IDg5MzUwODk2OTVh
NTM1YWE1MmFhYzZhZWI1MjJiY2M5MWIzMTIxMGUuLmQyYTVjM2E1MDY1MTk4NjU4ZGYzYjBiZDNk
OWZkMGMxODQ0MDRmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTZXJ2
ZXIuY3BwCkBAIC0xMDksMTIgKzEwOSwxMiBAQCB2b2lkIFJlbW90ZUluc3BlY3RvclNlcnZlcjo6
ZGlkQ2xvc2UoQ29ubmVjdGlvbklEIGlkKQogSGFzaE1hcDxTdHJpbmcsIFJlbW90ZUluc3BlY3Rv
ckNvbm5lY3Rpb25DbGllbnQ6OkNhbGxIYW5kbGVyPiYgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpk
aXNwYXRjaE1hcCgpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5n
LCBDYWxsSGFuZGxlcj4+IGRpc3BhdGNoTWFwID0gSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVy
Pih7Ci0gICAgICAgIHsgIlNldFRhcmdldExpc3QiX3MsIHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEhh
bmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNldFRhcmdldExpc3QpIH0sCi0gICAgICAg
IHsgIlNldHVwSW5zcGVjdG9yQ2xpZW50Il9zLCByZWludGVycHJldF9jYXN0PENhbGxIYW5kbGVy
PigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXR1cEluc3BlY3RvckNsaWVudCkgfSwKLSAgICAg
ICAgeyAiU2V0dXAiX3MsIHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNw
ZWN0b3JTZXJ2ZXI6OnNldHVwKSB9LAotICAgICAgICB7ICJGcm9udGVuZERpZENsb3NlIl9zLCBy
ZWludGVycHJldF9jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpjbG9z
ZSkgfSwKLSAgICAgICAgeyAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIl9zLCByZWludGVycHJldF9j
YXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZVRvRnJv
bnRlbmQpIH0sCi0gICAgICAgIHsgIlNlbmRNZXNzYWdlVG9CYWNrZW5kIl9zLCByZWludGVycHJl
dF9jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZVRv
QmFja2VuZCkgfSwKKyAgICAgICAgeyAiU2V0VGFyZ2V0TGlzdCJfcywgc3RhdGljX2Nhc3Q8Q2Fs
bEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNldFRhcmdldExpc3QpIH0sCisgICAg
ICAgIHsgIlNldHVwSW5zcGVjdG9yQ2xpZW50Il9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4o
JlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2V0dXBJbnNwZWN0b3JDbGllbnQpIH0sCisgICAgICAg
IHsgIlNldHVwIl9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvclNl
cnZlcjo6c2V0dXApIH0sCisgICAgICAgIHsgIkZyb250ZW5kRGlkQ2xvc2UiX3MsIHN0YXRpY19j
YXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpjbG9zZSkgfSwKKyAgICAg
ICAgeyAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIl9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4o
JlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKSB9LAorICAgICAg
ICB7ICJTZW5kTWVzc2FnZVRvQmFja2VuZCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZS
ZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKSB9LAogICAgIH0pOwog
CiAgICAgcmV0dXJuIGRpc3BhdGNoTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0
Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggYzM1
MTRlODNhMDI1OGFiN2MyMTA3M2EwOWNhODFkNmQyMDlhYjFlZC4uYjA3YmI0OTE1NTcyNzBkZjVi
NjIzY2NmMThiMWI0Y2VkNzEyMTlhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCkBAIC01NSw2
ICs1NSw5IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL3dpbi9XZWJzaXRlRGF0YVN0b3JlV2luLmNwcAogCiAgICAgVUlQcm9jZXNzL3dpbi9Q
YWdlQ2xpZW50SW1wbC5jcHAKKyAgICBVSVByb2Nlc3Mvd2luL1JlbW90ZUluc3BlY3RvckNsaWVu
dC5jcHAKKyAgICBVSVByb2Nlc3Mvd2luL1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcldp
bi5jcHAKKyAgICBVSVByb2Nlc3Mvd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcAog
ICAgIFVJUHJvY2Vzcy93aW4vVGV4dENoZWNrZXJXaW4uY3BwCiAgICAgVUlQcm9jZXNzL3dpbi9X
ZWJDb250ZXh0TWVudVByb3h5V2luLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2ViSW5zcGVjdG9y
UHJveHlXaW4uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eS5jcHAKaW5kZXggODdiMjI0ZWFmOTJkZDc0NzZjYTYxZmE0ZDE3ZDI3YTVm
ZTBlNDZkNS4uYjI5NjcxNjM4ZjUxNGQxZTZmZjIyZTQ5M2UwODhhNTY4ZGU4N2QxMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNw
cApAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNsb3Nl
RnJvbnRlbmRQYWdlQW5kV2luZG93KCkKICAgICBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5k
V2luZG93KCk7CiB9CiAKLSNpZiAhRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpIHx8ICghUExBVEZP
Uk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSkKKyNpZiAhRU5BQkxFKFJFTU9URV9JTlNQRUNUT1Ip
IHx8ICghUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOX0NB
SVJPKSkKIFdlYlBhZ2VQcm94eSogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3Jl
YXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmgKaW5k
ZXggMGZkMGU4M2E1YjU2MDRkN2Q2ZWM1ZjkxNjc1MjBmYTE5MzBkZGNhYS4uNWViYmI2OGQ0YzZk
YWEzM2MyODU4YmQ3YWUwOTUzMTA0YWJjMTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNz
IENlcnRpZmljYXRlSW5mbzsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJQYWdlUHJv
eHk7CitjbGFzcyBXZWJWaWV3OwogCiBjbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVu
dCB7CiBwdWJsaWM6CkBAIC04OCw2ICs4OSwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVX
aW5kb3dUaXRsZShjb25zdCBDU3RyaW5nJik7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTl9D
QUlSTykKKyAgICBMUkVTVUxUIHNpemVDaGFuZ2UoKTsKKyAgICBMUkVTVUxUIG9uQ2xvc2UoKTsK
KworICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFN
LCBMUEFSQU0pOworI2VuZGlmCisKICAgICB2b2lkIGNsb3NlRnJvbUNyYXNoKCk7CiAKIHByaXZh
dGU6CkBAIC0xMzksNiArMTQ3LDEwIEBAIHByaXZhdGU6CiAgICAgR3RrV2lkZ2V0KiBtX3dlYlZp
ZXcgeyBudWxscHRyIH07CiAgICAgR3RrV2lkZ2V0KiBtX3dpbmRvdyB7IG51bGxwdHIgfTsKICNl
bmRpZgorI2lmIFBMQVRGT1JNKFdJTl9DQUlSTykKKyAgICBIV05EIG1fZnJvbnRlbmRIYW5kbGU7
CisgICAgUmVmUHRyPFdlYlZpZXc+IG1fd2ViVmlldzsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUmVt
b3RlSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1v
dGVJbnNwZWN0b3JDbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjNjZhZDcyMjJiYjM2ZDgwN2FkM2Ex
NmY0YzNiNDkwZTU5MmJmZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy93aW4vUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMCwwICsxLDI1NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5j
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW5zcGVj
dG9yQ2xpZW50LmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUg
IlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5IGZpbmFs
IDogcHVibGljIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRCgpOworcHVibGljOgorICAgIFJlbW90ZUluc3BlY3RvclByb3h5KFJlbW90
ZUluc3BlY3RvckNsaWVudCYgaW5zcGVjdG9yQ2xpZW50LCBDb25uZWN0aW9uSUQgY29ubmVjdGlv
bklELCBUYXJnZXRJRCB0YXJnZXRJRCkKKyAgICAgICAgOiBtX3Byb3h5KFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpjcmVhdGUoKSkKKyAgICAgICAgLCBtX2luc3BlY3RvckNsaWVudChpbnNwZWN0
b3JDbGllbnQpCisgICAgICAgICwgbV9jb25uZWN0aW9uSUQoY29ubmVjdGlvbklEKQorICAgICAg
ICAsIG1fdGFyZ2V0SUQodGFyZ2V0SUQpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zZXRDbGll
bnQodGhpcyk7CisgICAgfQorCisgICAgflJlbW90ZUluc3BlY3RvclByb3h5KCkKKyAgICB7Cisg
ICAgICAgIG1fcHJveHktPnNldENsaWVudChudWxscHRyKTsKKyAgICAgICAgbV9wcm94eS0+aW52
YWxpZGF0ZSgpOworICAgIH0KKworICAgIHZvaWQgbG9hZCgpCisgICAgeworICAgICAgICBtX3By
b3h5LT5sb2FkKCJ3ZWIiLCAiIik7CisgICAgfQorCisgICAgdm9pZCBzaG93KCkKKyAgICB7Cisg
ICAgICAgIG1fcHJveHktPnNob3coKTsKKyAgICB9CisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9G
cm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCisgICAgeworICAgICAgICBtX3Byb3h5LT5z
ZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZSk7CisgICAgfQorCisgICAgdm9pZCBzZW5kTWVz
c2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBtX2luc3BlY3RvckNsaWVudC5zZW5kTWVzc2FnZVRvQmFja2VuZChtX2Nvbm5lY3Rpb25J
RCwgbV90YXJnZXRJRCwgbWVzc2FnZSk7CisgICAgfQorCisgICAgdm9pZCBjbG9zZUZyb21Gcm9u
dGVuZCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2luc3BlY3RvckNsaWVudC5jbG9zZUZy
b21Gcm9udGVuZChtX2Nvbm5lY3Rpb25JRCwgbV90YXJnZXRJRCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4gbV9wcm94eTsKKyAgICBSZW1vdGVJ
bnNwZWN0b3JDbGllbnQmIG1faW5zcGVjdG9yQ2xpZW50OworICAgIENvbm5lY3Rpb25JRCBtX2Nv
bm5lY3Rpb25JRDsKKyAgICBUYXJnZXRJRCBtX3RhcmdldElEOworfTsKKworUmVtb3RlSW5zcGVj
dG9yQ2xpZW50OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQoY29uc3QgY2hhciogYWRkcmVzcywgdW5z
aWduZWQgcG9ydCwgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG9ic2VydmVyKQorICAgIDogbV9v
YnNlcnZlcihvYnNlcnZlcikKK3sKKyAgICBtX3NvY2tldCA9IEluc3BlY3Rvcjo6UmVtb3RlSW5z
cGVjdG9yU29ja2V0RW5kcG9pbnQ6OmNyZWF0ZSh0aGlzLCAiUmVtb3RlSW5zcGVjdG9yQ2xpZW50
Iik7CisKKyAgICBtX2Nvbm5lY3Rpb25JRCA9IG1fc29ja2V0LT5jb25uZWN0SW5ldChhZGRyZXNz
LCBwb3J0KTsKKyAgICBpZiAoIW1fY29ubmVjdGlvbklEKSB7CisgICAgICAgIFJFTEVBU0VfTE9H
KCJGYWlsZWQiKTsKKyAgICAgICAgTE9HX0VSUk9SKCJbQ10gZXJyb3I6IGNvbm5lY3RJbmV0KCVz
LCAlZCkiLCBhZGRyZXNzLCBwb3J0KTsKKyAgICAgICAgbV9zb2NrZXQgPSBudWxscHRyOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RhcnRJbml0aWFsQ29tbXVuaWNhdGlvbigpOwor
fQorCitSZW1vdGVJbnNwZWN0b3JDbGllbnQ6On5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKQorewor
fQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZFdlYkluc3BlY3RvckV2ZW50KGNv
bnN0IFN0cmluZyYgZXZlbnQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBB
U1NFUlQobV9jb25uZWN0aW9uSUQuaGFzVmFsdWUoKSk7CisgICAgYXV0byBtZXNzYWdlID0gZXZl
bnQudXRmOCgpOworICAgIG1fc29ja2V0LT5zZW5kKG1fY29ubmVjdGlvbklELnZhbHVlKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1lc3NhZ2UuZGF0YSgpKSwgbWVzc2FnZS5s
ZW5ndGgoKSk7Cit9CisKK0hhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rv
ckNvbm5lY3Rpb25DbGllbnQ6OkNhbGxIYW5kbGVyPiYgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpk
aXNwYXRjaE1hcCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5n
LCBDYWxsSGFuZGxlcj4+IGRpc3BhdGNoTWFwID0gSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVy
Pih7CisgICAgICAgIHsgIlNldFRhcmdldExpc3QiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVy
PigmUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KSB9LAorICAgICAgICB7ICJT
ZW5kTWVzc2FnZVRvRnJvbnRlbmQiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpIH0sCisgICAgfSk7CisKKyAg
ICByZXR1cm4gZGlzcGF0Y2hNYXA7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpz
dGFydEluaXRpYWxDb21tdW5pY2F0aW9uKCkKK3sKKyAgICBhdXRvIGV2ZW50ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBldmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNldHVwSW5z
cGVjdG9yQ2xpZW50Il9zKTsKKyAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoZXZlbnQtPnRvSlNP
TlN0cmluZygpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNvbm5lY3Rpb25D
bG9zZWQoKQoreworICAgIG1fdGFyZ2V0cy5jbGVhcigpOworICAgIG1faW5zcGVjdG9yUHJveHlN
YXAuY2xlYXIoKTsKKyAgICBtX29ic2VydmVyLmNvbm5lY3Rpb25DbG9zZWQoKnRoaXMpOworfQor
Cit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6ZGlkQ2xvc2UoQ29ubmVjdGlvbklEKQorewor
fQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6aW5zcGVjdChDb25uZWN0aW9uSUQgY29u
bmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
aW5zcGVjdG9yUHJveHlNYXAuZW5zdXJlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFy
Z2V0SUQpLCBbdGhpcywgY29ubmVjdGlvbklELCB0YXJnZXRJRF0geworICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxSZW1vdGVJbnNwZWN0b3JQcm94eT4oKnRoaXMsIGNvbm5lY3Rpb25J
RCwgdGFyZ2V0SUQpOworICAgIH0pOworCisgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkg
eworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zaG93KCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBhdXRvIHNldHVwRXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIHNldHVwRXZlbnQtPnNldFN0cmluZygiZXZlbnQiX3MsICJTZXR1cCJfcyk7Cisg
ICAgc2V0dXBFdmVudC0+c2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zLCBjb25uZWN0aW9uSUQp
OworICAgIHNldHVwRXZlbnQtPnNldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7Cisg
ICAgc2VuZFdlYkluc3BlY3RvckV2ZW50KHNldHVwRXZlbnQtPnRvSlNPTlN0cmluZygpKTsKKwor
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmxvYWQoKTsKK30KKwordm9pZCBSZW1vdGVJ
bnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKENvbm5lY3Rpb25JRCBjb25uZWN0
aW9uSUQsIFRhcmdldElEIHRhcmdldElELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAg
YXV0byBiYWNrZW5kRXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGJhY2tlbmRF
dmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNlbmRNZXNzYWdlVG9CYWNrZW5kIl9zKTsKKyAg
ICBiYWNrZW5kRXZlbnQtPnNldEludGVnZXIoImNvbm5lY3Rpb25JRCJfcywgY29ubmVjdGlvbklE
KTsKKyAgICBiYWNrZW5kRXZlbnQtPnNldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7
CisgICAgYmFja2VuZEV2ZW50LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIG1lc3NhZ2UpOworICAg
IHNlbmRXZWJJbnNwZWN0b3JFdmVudChiYWNrZW5kRXZlbnQtPnRvSlNPTlN0cmluZygpKTsKK30K
Kwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNsb3NlRnJvbUZyb250ZW5kKENvbm5lY3Rp
b25JRCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRhcmdldElEKQoreworICAgIGF1dG8gY2xvc2Vk
RXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGNsb3NlZEV2ZW50LT5zZXRTdHJp
bmcoImV2ZW50Il9zLCAiRnJvbnRlbmREaWRDbG9zZSJfcyk7CisgICAgY2xvc2VkRXZlbnQtPnNl
dEludGVnZXIoImNvbm5lY3Rpb25JRCJfcywgY29ubmVjdGlvbklEKTsKKyAgICBjbG9zZWRFdmVu
dC0+c2V0SW50ZWdlcigidGFyZ2V0SUQiX3MsIHRhcmdldElEKTsKKyAgICBzZW5kV2ViSW5zcGVj
dG9yRXZlbnQoY2xvc2VkRXZlbnQtPnRvSlNPTlN0cmluZygpKTsKKworICAgIG1faW5zcGVjdG9y
UHJveHlNYXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsK
K30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QoY29uc3QgRXZl
bnQmIGV2ZW50KQoreworICAgIGlmICghZXZlbnQuY29ubmVjdGlvbklEIHx8ICFldmVudC5tZXNz
YWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VW
YWx1ZTsKKyAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oZXZlbnQubWVzc2FnZS52YWx1
ZSgpLCBtZXNzYWdlVmFsdWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SlNPTjo6
QXJyYXk+IG1lc3NhZ2VBcnJheTsKKyAgICBpZiAoIW1lc3NhZ2VWYWx1ZS0+YXNBcnJheShtZXNz
YWdlQXJyYXkpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8VGFyZ2V0PiB0YXJnZXRM
aXN0OworICAgIGZvciAoYXV0byYgaXRlbVZhbHVlIDogKm1lc3NhZ2VBcnJheSkgeworICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpdGVtT2JqZWN0OworICAgICAgICBpZiAoIWl0ZW1WYWx1
ZS0+YXNPYmplY3QoaXRlbU9iamVjdCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBUYXJnZXQgdGFyZ2V0OworICAgICAgICBpZiAoIWl0ZW1PYmplY3QtPmdldEludGVnZXIoInRh
cmdldElEIl9zLCB0YXJnZXQuaWQpCisgICAgICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3Ry
aW5nKCJuYW1lIl9zLCB0YXJnZXQubmFtZSkKKyAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5n
ZXRTdHJpbmcoInVybCJfcywgdGFyZ2V0LnVybCkKKyAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0
LT5nZXRTdHJpbmcoInR5cGUiX3MsIHRhcmdldC50eXBlKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIHRhcmdldExpc3QuYXBwZW5kKFdURk1vdmUodGFyZ2V0KSk7CisgICAgfQor
CisgICAgYXV0byBjb25uZWN0aW9uSUQgPSBldmVudC5jb25uZWN0aW9uSUQudmFsdWUoKTsKKwor
ICAgIC8vIEZpbmQgY2xvc2VkIHRhcmdldHMgdG8gcmVtb3ZlIHRoZW0uCisgICAgVmVjdG9yPFRh
cmdldElELCA0PiB0YXJnZXRzVG9SZW1vdmU7CisgICAgZm9yIChhdXRvJiBwYWlyIDogbV9pbnNw
ZWN0b3JQcm94eU1hcC5rZXlzKCkpIHsKKyAgICAgICAgaWYgKHBhaXIuZmlyc3QgIT0gY29ubmVj
dGlvbklEKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOworICAgICAgICBmb3IgKGF1dG8mIHRhcmdldCA6IHRhcmdldExpc3QpIHsKKyAgICAgICAg
ICAgIGlmICh0YXJnZXQuaWQgPT0gcGFpci5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgdGFyZ2V0c1RvUmVtb3ZlLmFw
cGVuZChwYWlyLnNlY29uZCk7CisgICAgfQorICAgIGZvciAoYXV0byYgdGFyZ2V0SUQgOiB0YXJn
ZXRzVG9SZW1vdmUpCisgICAgICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6bWFr
ZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKKworICAgIG1fdGFyZ2V0cy5zZXQoY29u
bmVjdGlvbklELCBXVEZNb3ZlKHRhcmdldExpc3QpKTsKKyAgICBtX29ic2VydmVyLnRhcmdldExp
c3RDaGFuZ2VkKCp0aGlzKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChjb25zdCBFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKCFldmVudC5j
b25uZWN0aW9uSUQgfHwgIWV2ZW50LnRhcmdldElEIHx8ICFldmVudC5tZXNzYWdlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBhdXRvIHByb3h5ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoc3Rk
OjptYWtlX3BhaXIoZXZlbnQuY29ubmVjdGlvbklELnZhbHVlKCksIGV2ZW50LnRhcmdldElELnZh
bHVlKCkpKTsKKyAgICBpZiAoIXByb3h5KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChldmVudC5tZXNzYWdlLnZhbHVlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvd2luL1JlbW90ZUluc3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvd2luL1JlbW90ZUluc3BlY3RvckNsaWVudC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1
YjM1ODRkM2E2ZjY0ZGZkY2FmYmI4ZDBiMzk4N2JlODk4ZDVlZjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKQEAg
LTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlQ29u
dHJvbGxhYmxlVGFyZ2V0Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVj
dG9yQ29ubmVjdGlvbkNsaWVudC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUlu
c3BlY3RvclNvY2tldEVuZHBvaW50Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBS
ZW1vdGVJbnNwZWN0b3JQcm94eTsKKworY2xhc3MgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIgewor
cHVibGljOgorICAgIHZpcnR1YWwgflJlbW90ZUluc3BlY3Rvck9ic2VydmVyKCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIHRhcmdldExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdGlvbkNsb3NlZChSZW1vdGVJbnNwZWN0b3JDbGll
bnQmKSA9IDA7Cit9OworCit1c2luZyBDb25uZWN0aW9uSUQgPSBJbnNwZWN0b3I6OkNvbm5lY3Rp
b25JRDsKK3VzaW5nIFRhcmdldElEID0gSW5zcGVjdG9yOjpUYXJnZXRJRDsKKworY2xhc3MgUmVt
b3RlSW5zcGVjdG9yQ2xpZW50IDogcHVibGljIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yQ29u
bmVjdGlvbkNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQoKTsKK3B1YmxpYzoK
KyAgICBSZW1vdGVJbnNwZWN0b3JDbGllbnQoY29uc3QgY2hhciogYWRkcmVzcywgdW5zaWduZWQg
cG9ydCwgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImKTsKKyAgICB+UmVtb3RlSW5zcGVjdG9yQ2xp
ZW50KCk7CisKKyAgICBzdHJ1Y3QgVGFyZ2V0IHsKKyAgICAgICAgVGFyZ2V0SUQgaWQ7CisgICAg
ICAgIFN0cmluZyB0eXBlOworICAgICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgU3RyaW5nIHVy
bDsKKyAgICB9OworCisgICAgY29uc3QgSGFzaE1hcDxDb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJn
ZXQ+PiYgdGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0czsgfQorCisgICAgdm9pZCBp
bnNwZWN0KENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQoQ29ubmVjdGlvbklELCBUYXJnZXRJRCwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBj
bG9zZUZyb21Gcm9udGVuZChDb25uZWN0aW9uSUQsIFRhcmdldElEKTsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8UmVtb3RlSW5zcGVjdG9yQ2xpZW50PjsKKwor
ICAgIHZvaWQgc3RhcnRJbml0aWFsQ29tbXVuaWNhdGlvbigpOworICAgIHZvaWQgY29ubmVjdGlv
bkNsb3NlZCgpOworCisgICAgdm9pZCBzZXRUYXJnZXRMaXN0KGNvbnN0IEV2ZW50Jik7CisgICAg
dm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgRXZlbnQmKTsKKyAgICB2b2lkIHNldEJh
Y2tlbmRDb21tYW5kcyhjb25zdCBFdmVudCYpOworCisgICAgdm9pZCBkaWRDbG9zZShDb25uZWN0
aW9uSUQpIG92ZXJyaWRlOworICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4mIGRpc3Bh
dGNoTWFwKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNlbmRXZWJJbnNwZWN0b3JFdmVudChjb25z
dCBTdHJpbmcmKTsKKworICAgIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJiBtX29ic2VydmVyOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBv
aW50PiBtX3NvY2tldDsKKyAgICBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IG1fY29ubmVjdGlvbklE
OworICAgIEhhc2hNYXA8Q29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0Pj4gbV90YXJnZXRzOwor
ICAgIEhhc2hNYXA8c3RkOjpwYWlyPENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQ+LCBzdGQ6OnVuaXF1
ZV9wdHI8UmVtb3RlSW5zcGVjdG9yUHJveHk+PiBtX2luc3BlY3RvclByb3h5TWFwOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVJbnNwZWN0
b3JQcm90b2NvbEhhbmRsZXJXaW4uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1Jl
bW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcldpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTlhOTQyOThh
MjE0NTQ4Njc1YTI1ZGVhYTZmNTgyNzNmM2RkZWQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXJXaW4u
Y3BwCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50
ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXJXaW4uaCIKKworI2lm
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgor
I2luY2x1ZGUgIkFQSVVzZXJDb250ZW50V29ybGQuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAu
aCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJTY3JpcHRNZXNzYWdl
SGFuZGxlci5oIgorI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaD4KKyNpbmNsdWRlIDx3dGYv
VVJMLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIFNjcmlwdE1lc3Nh
Z2VDbGllbnQgZmluYWwgOiBwdWJsaWMgV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI6OkNsaWVudCB7
CitwdWJsaWM6CisgICAgU2NyaXB0TWVzc2FnZUNsaWVudChSZW1vdGVJbnNwZWN0b3JQcm90b2Nv
bEhhbmRsZXImIGluc3BlY3RvclByb3RvY29sSGFuZGxlcikKKyAgICAgICAgOiBtX2luc3BlY3Rv
clByb3RvY29sSGFuZGxlcihpbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIpIHsgfQorCisgICAgflNj
cmlwdE1lc3NhZ2VDbGllbnQoKSB7IH0KKworICAgIHZvaWQgZGlkUG9zdE1lc3NhZ2UoV2ViUGFn
ZVByb3h5JiBwYWdlLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlJiBzZXJpYWxpemVkU2NyaXB0VmFsdWUpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBhdXRvIHRva2VucyA9IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS50b1N0cmluZygpLnNwbGl0KCI6
Iik7CisgICAgICAgIGlmICh0b2tlbnMuc2l6ZSgpICE9IDIpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgVVJMIHJlcXVlc3RVUkwgeyB7IH0sIHBhZ2UucGFnZUxvYWRTdGF0ZSgpLnVy
bCgpIH07CisgICAgICAgIG1faW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmluc3BlY3QocmVxdWVz
dFVSTC5ob3N0QW5kUG9ydCgpLCB0b2tlbnNbMF0udG9VSW50U3RyaWN0KCksIHRva2Vuc1sxXS50
b1VJbnRTdHJpY3QoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlbW90ZUluc3BlY3RvclBy
b3RvY29sSGFuZGxlciYgbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI7Cit9OworCit2b2lkIFJl
bW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6aW5zcGVjdChjb25zdCBTdHJpbmcmIGhvc3RB
bmRQb3J0LCBDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCkKK3sK
KyAgICBpZiAoYXV0byogY2xpZW50ID0gbV9pbnNwZWN0b3JDbGllbnRzLmdldChob3N0QW5kUG9y
dCkpCisgICAgICAgIGNsaWVudC0+aW5zcGVjdChjb25uZWN0aW9uSUQsIHRhcmdldElEKTsKK30K
Kwordm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6OnRhcmdldExpc3RDaGFuZ2Vk
KFJlbW90ZUluc3BlY3RvckNsaWVudCYpCit7CisgICAgbV9wYWdlLnJlbG9hZCh7IH0pOworfQor
Cit2b2lkIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6cGxhdGZvcm1TdGFydFRhc2so
V2ViUGFnZVByb3h5JiBwYWdlUHJveHksIFdlYlVSTFNjaGVtZVRhc2smIHRhc2spCit7CisgICAg
YXV0byYgcmVxdWVzdFVSTCA9IHRhc2sucmVxdWVzdCgpLnVybCgpOworICAgIGlmICghcmVxdWVz
dFVSTC5wb3J0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGNsaWVudCA9IG1faW5z
cGVjdG9yQ2xpZW50cy5lbnN1cmUocmVxdWVzdFVSTC5ob3N0QW5kUG9ydCgpLCBbdGhpcywgJnJl
cXVlc3RVUkxdIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UmVtb3RlSW5zcGVj
dG9yQ2xpZW50PihyZXF1ZXN0VVJMLmhvc3QoKS51dGY4KCkuZGF0YSgpLCByZXF1ZXN0VVJMLnBv
cnQoKS52YWx1ZSgpLCAqdGhpcyk7CisgICAgfSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworCisg
ICAgLy8gU2V0dXAgdGFyZ2V0IHBvc3RNZXNzYWdlIGxpc3RlbmVyCisgICAgYXV0byBoYW5kbGVy
ID0gV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNjcmlw
dE1lc3NhZ2VDbGllbnQ+KCp0aGlzKSwgImluc3BlY3RvciIsIEFQSTo6VXNlckNvbnRlbnRXb3Js
ZDo6bm9ybWFsV29ybGQoKSk7CisgICAgcGFnZVByb3h5LnBhZ2VHcm91cCgpLnVzZXJDb250ZW50
Q29udHJvbGxlcigpLmFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcihoYW5kbGVyLmdldCgpKTsK
KworICAgIFN0cmluZ0J1aWxkZXIgaHRtbEJ1aWxkZXI7CisgICAgaHRtbEJ1aWxkZXIuYXBwZW5k
KAorICAgICAgICAiPGh0bWw+PGhlYWQ+PHRpdGxlPlJlbW90ZSBJbnNwZWN0b3I8L3RpdGxlPiIK
KyAgICAgICAgIjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4
dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIgLz4iCisgICAgICAgICI8c3R5bGU+IgorICAgICAgICAi
ICBoMSB7IGNvbG9yOiAjYmFiZGI2OyB0ZXh0LXNoYWRvdzogMCAxcHggMCB3aGl0ZTsgbWFyZ2lu
LWJvdHRvbTogMDsgfSIKKyAgICAgICAgIiAgaHRtbCB7IGZvbnQtZmFtaWx5OiAtd2Via2l0LXN5
c3RlbS1mb250OyBmb250LXNpemU6IDExcHQ7IGNvbG9yOiAjMmUzNDM2OyBwYWRkaW5nOiAyMHB4
IDIwcHggMCAyMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmNmY0OyAiCisgICAgICAgICIgICAg
ICAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3As
IGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAsICNlZWVlZWMpLCBjb2xvci1zdG9wKDEsICNmNmY2
ZjQpKTsiCisgICAgICAgICIgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgNWVtOyBiYWNr
Z3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyB9IgorICAgICAgICAiICB0YWJsZSB7IHdpZHRoOiAx
MDAlOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB9IgorICAgICAgICAiICB0YWJsZSwgdGQg
eyBib3JkZXI6IDFweCBzb2xpZCAjZDNkN2NmOyBib3JkZXItbGVmdDogbm9uZTsgYm9yZGVyLXJp
Z2h0OiBub25lOyB9IgorICAgICAgICAiICBwIHsgbWFyZ2luLWJvdHRvbTogMzBweDsgfSIKKyAg
ICAgICAgIiAgdGQgeyBwYWRkaW5nOiAxNXB4OyB9IgorICAgICAgICAiICB0ZC5kYXRhIHsgd2lk
dGg6IDIwMHB4OyB9IgorICAgICAgICAiICAudGFyZ2V0bmFtZSB7IGZvbnQtd2VpZ2h0OiBib2xk
OyB9IgorICAgICAgICAiICAudGFyZ2V0dXJsIHsgY29sb3I6ICNiYWJkYjY7IH0iCisgICAgICAg
ICIgIHRkLmlucHV0IHsgd2lkdGg6IDY0cHg7IH0iCisgICAgICAgICIgIGlucHV0IHsgd2lkdGg6
IDEwMCU7IHBhZGRpbmc6IDhweDsgfSIKKyAgICAgICAgIjwvc3R5bGU+IgorICAgICAgICAiPC9o
ZWFkPjxib2R5PjxoMT5JbnNwZWN0YWJsZSB0YXJnZXRzPC9oMT4iKTsKKworICAgIGlmIChjbGll
bnQtPnRhcmdldHMoKS5pc0VtcHR5KCkpCisgICAgICAgIGh0bWxCdWlsZGVyLmFwcGVuZCgiPHA+
Tm8gdGFyZ2V0cyBmb3VuZDwvcD4iKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaHRtbEJ1aWxkZXIu
YXBwZW5kKCI8dGFibGU+Iik7CisgICAgICAgIGZvciAoYXV0byYgY29ubmVjdGlvbklEIDogY2xp
ZW50LT50YXJnZXRzKCkua2V5cygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHRhcmdldCA6
IGNsaWVudC0+dGFyZ2V0cygpLmdldChjb25uZWN0aW9uSUQpKSB7CisgICAgICAgICAgICAgICAg
aHRtbEJ1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICI8dGJv
ZHk+PHRyPiIKKyAgICAgICAgICAgICAgICAgICAgIjx0ZCBjbGFzcz1cImRhdGFcIj48ZGl2IGNs
YXNzPVwidGFyZ2V0bmFtZVwiPiIsIHRhcmdldC5uYW1lLCAiPC9kaXY+PGRpdiBjbGFzcz1cInRh
cmdldHVybFwiPiIsIHRhcmdldC51cmwsICI8L2Rpdj48L3RkPiIKKyAgICAgICAgICAgICAgICAg
ICAgIjx0ZCBjbGFzcz1cImlucHV0XCI+PGlucHV0IHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIklu
c3BlY3RcIiBvbmNsaWNrPVwid2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaW5zcGVjdG9y
LnBvc3RNZXNzYWdlKCciLCBjb25uZWN0aW9uSUQsICI6IiwgdGFyZ2V0LmlkLCAiJyk7XCI+PC90
ZD4iCisgICAgICAgICAgICAgICAgICAgICI8L3RyPjwvdGJvZHk+IgorICAgICAgICAgICAgICAg
ICkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGh0bWxCdWlsZGVyLmFwcGVu
ZCgiPC90YWJsZT4iKTsKKyAgICB9CisKKyAgICBhdXRvIGh0bWwgPSBodG1sQnVpbGRlci50b1N0
cmluZygpLnV0ZjgoKTsKKyAgICBwYWdlUHJveHkubG9hZERhdGEoeyByZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihodG1sLmRhdGEoKSksIGh0bWwubGVuZ3RoKCkgfSwgInRleHQvaHRt
bCJfcywgIlVURi04Il9zLCByZXF1ZXN0VVJMKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXJXaW4u
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhh
bmRsZXJXaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMGFjMzRlMmQzOWQ2NjNhNGU0YmVhYmU4Y2IyNjEwMmYw
NmFiMTFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1Jl
bW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcldpbi5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikK
KworI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvckNsaWVudC5oIgorI2luY2x1ZGUgIldlYlVSTFNj
aGVtZUhhbmRsZXIuaCIKKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBVUkw7Cit9CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJVUkxTY2hlbWVUYXNrOworCitjbGFzcyBSZW1vdGVJ
bnNwZWN0b3JQcm90b2NvbEhhbmRsZXIgZmluYWwgOiBwdWJsaWMgUmVtb3RlSW5zcGVjdG9yT2Jz
ZXJ2ZXIsIHB1YmxpYyBXZWJVUkxTY2hlbWVIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcj4gY3JlYXRlKFdlYlBhZ2VQcm94eSYg
cGFnZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRs
ZXIocGFnZSkpOyB9CisKKyAgICB2b2lkIGluc3BlY3QoY29uc3QgU3RyaW5nJiwgQ29ubmVjdGlv
bklELCBUYXJnZXRJRCk7CisKK3ByaXZhdGU6CisgICAgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xI
YW5kbGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICAgICAgOiBtX3BhZ2UocGFnZSkgeyB9CisK
KyAgICAvLyBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlcgorICAgIHZvaWQgdGFyZ2V0TGlzdENoYW5n
ZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JikgZmluYWw7CisgICAgdm9pZCBjb25uZWN0aW9uQ2xv
c2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpIGZpbmFsIHsgfQorCisgICAgLy8gV2ViVVJMU2No
ZW1lSGFuZGxlcgorICAgIHZvaWQgcGxhdGZvcm1TdGFydFRhc2soV2ViUGFnZVByb3h5JiwgV2Vi
VVJMU2NoZW1lVGFzayYpIGZpbmFsOworICAgIHZvaWQgcGxhdGZvcm1TdG9wVGFzayhXZWJQYWdl
UHJveHkmLCBXZWJVUkxTY2hlbWVUYXNrJikgZmluYWwgeyB9CisgICAgdm9pZCBwbGF0Zm9ybVRh
c2tDb21wbGV0ZWQoV2ViVVJMU2NoZW1lVGFzayYpIGZpbmFsIHsgfQorCisgICAgSGFzaE1hcDxT
dHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVJbnNwZWN0b3JDbGllbnQ+PiBtX2luc3BlY3Rv
ckNsaWVudHM7CisgICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2lu
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMGRhMWU1Mzg3NDE2YmIwYTgyMjljODcwMzVjODg2NDIzN2Fh
NWFlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1v
dGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclBy
b3h5LmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIkFQSVBh
Z2VDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNs
dWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRl
ICJXZWJWaWV3LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitzdGF0aWMgTFBDVFNUUiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQ
cm9wID0gVEVYVCgiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyIik7Citjb25zdCBMUENX
U1RSIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lID0gTCJSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eUNsYXNzIjsKKworTFJFU1VMVCBDQUxMQkFDSyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6V25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBh
cmFtKQoreworICAgIFJlbW90ZVdlYkluc3BlY3RvclByb3h5KiBjbGllbnQgPSByZWludGVycHJl
dF9jYXN0PFJlbW90ZVdlYkluc3BlY3RvclByb3h5Kj4oOjpHZXRQcm9wKGh3bmQsIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5UG9pbnRlclByb3ApKTsKKworICAgIHN3aXRjaCAobXNnKSB7CisgICAg
Y2FzZSBXTV9TSVpFOgorICAgICAgICByZXR1cm4gY2xpZW50LT5zaXplQ2hhbmdlKCk7CisgICAg
Y2FzZSBXTV9DTE9TRToKKyAgICAgICAgcmV0dXJuIGNsaWVudC0+b25DbG9zZSgpOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiA6OkRlZldpbmRvd1By
b2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKK3N0YXRpYyBBVE9NIHJlZ2lzdGVy
V2luZG93Q2xhc3MoKQoreworICAgIHN0YXRpYyBib29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xh
c3MgPSBmYWxzZTsKKyAgICBpZiAoaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcykKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBXTkRDTEFTU0VYIHdjZXg7CisgICAgd2NleC5jYlNpemUgPSBz
aXplb2YoV05EQ0xBU1NFWCk7CisgICAgd2NleC5zdHlsZSAgICAgICAgICA9IDA7CisgICAgd2Nl
eC5scGZuV25kUHJvYyAgICA9IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpXbmRQcm9jOworICAg
IHdjZXguY2JDbHNFeHRyYSAgICAgPSAwOworICAgIHdjZXguY2JXbmRFeHRyYSAgICAgPSAwOwor
ICAgIHdjZXguaEluc3RhbmNlICAgICAgPSAwOworICAgIHdjZXguaEljb24gICAgICAgICAgPSAw
OworICAgIHdjZXguaEN1cnNvciAgICAgICAgPSBMb2FkQ3Vyc29yKDAsIElEQ19BUlJPVyk7Cisg
ICAgd2NleC5oYnJCYWNrZ3JvdW5kICA9IDA7CisgICAgd2NleC5scHN6TWVudU5hbWUgICA9IDA7
CisgICAgd2NleC5scHN6Q2xhc3NOYW1lICA9IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NO
YW1lOworICAgIHdjZXguaEljb25TbSAgICAgICAgPSAwOworCisgICAgaGF2ZVJlZ2lzdGVyZWRX
aW5kb3dDbGFzcyA9IHRydWU7CisgICAgcmV0dXJuIDo6UmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsK
K30KKworTFJFU1VMVCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2l6ZUNoYW5nZSgpCit7Cisg
ICAgaWYgKCFtX3dlYlZpZXcpCisgICAgICAgIHJldHVybiAwOworCisgICAgUkVDVCByZWN0Owor
ICAgIDo6R2V0Q2xpZW50UmVjdChtX2Zyb250ZW5kSGFuZGxlLCAmcmVjdCk7CisgICAgOjpTZXRX
aW5kb3dQb3MobV93ZWJWaWV3LT53aW5kb3coKSwgMCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVj
dC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVS
KTsKKyAgICByZXR1cm4gMDsKK30KKworTFJFU1VMVCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
b25DbG9zZSgpCit7CisgICAgOjpTaG93V2luZG93KG1fZnJvbnRlbmRIYW5kbGUsIFNXX0hJREUp
OworICAgIGZyb250ZW5kRGlkQ2xvc2UoKTsKKyAgICByZXR1cm4gMDsKK30KKworV2ViUGFnZVBy
b3h5KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VB
bmRXaW5kb3coKQoreworICAgIFJlZlB0cjxXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXMgPSBX
ZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsK
KyAgICBwcmVmZXJlbmNlcy0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKHRydWUpOwor
CisjaWYgRU5BQkxFKERFVkVMT1BFUl9NT0RFKQorICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9w
ZXJFeHRyYXNFbmFibGVkKHRydWUpOworICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3Nh
Z2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKKyNlbmRpZgorCisgICAgUmVmUHRyPFdl
YlBhZ2VHcm91cD4gcGFnZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUoaW5zcGVjdG9yUGFn
ZUdyb3VwSWRlbnRpZmllckZvclBhZ2UobnVsbHB0cikpOworCisgICAgYXV0byBwYWdlQ29uZmln
dXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOworICAgIHBhZ2VDb25m
aWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdG9y
TGV2ZWxGb3JQYWdlKG51bGxwdHIpKSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZl
cmVuY2VzKHByZWZlcmVuY2VzLmdldCgpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFn
ZUdyb3VwKHBhZ2VHcm91cC5nZXQoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoNjAs
IDIwMCwgMTUwMCwgMTAwMCk7CisgICAgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOworICAgIG1fZnJv
bnRlbmRIYW5kbGUgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
Q2xhc3NOYW1lLCAwLCBXU19PVkVSTEFQUEVEV0lORE9XLAorICAgICAgICByZWN0LngoKSwgcmVj
dC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgMCwgMCwgMCwgMCk7CisKKyAgICA6
OlNldFByb3AobV9mcm9udGVuZEhhbmRsZSwgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVy
UHJvcCwgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRoaXMpKTsKKyAgICBTaG93V2luZG93KG1f
ZnJvbnRlbmRIYW5kbGUsIFNXX1NIT1cpOworCisgICAgUkVDVCByOworICAgIDo6R2V0Q2xpZW50
UmVjdChtX2Zyb250ZW5kSGFuZGxlLCAmcik7CisgICAgbV93ZWJWaWV3ID0gV2ViVmlldzo6Y3Jl
YXRlKHIsIHBhZ2VDb25maWd1cmF0aW9uLCBtX2Zyb250ZW5kSGFuZGxlKTsKKyAgICByZXR1cm4g
bV93ZWJWaWV3LT5wYWdlKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQnJpbmdUb0Zyb250KCkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkgeyB9
Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIHsgfQordm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKSB7IH0KK3Zv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0
cmluZyYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2Vy
dGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikgeyB9CisKK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KQoreworICAgIDo6RGVzdHJveVdpbmRvdyhtX2Zyb250ZW5kSGFuZGxlKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAppbmRleCA5NjJmMzAyYzk4OGMzNDM4
NzdmN2RhZDcxMTU3ODc5ZmVjY2JmZDAwLi5jNDJlZDk1NTY3ZjJhNjMxMGMzNTgzNjE0MDZlN2Zh
ZTQ0NzRiODE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1
ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50
LmgiCisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyV2luLmgiCiAjaW5j
bHVkZSAiV0tBUElDYXN0LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eVdpbi5oIgog
I2luY2x1ZGUgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKQEAgLTIzNiw2ICsyMzcsMTAgQEAgV2Vi
Vmlldzo6V2ViVmlldyhSRUNUIHJlY3QsIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mIGNv
bmZpZ3VyYXRpb24sIEhXTkQgcGEKICAgICBpZiAobV9wYWdlLT5kcmF3aW5nQXJlYSgpKQogICAg
ICAgICBtX3BhZ2UtPmRyYXdpbmdBcmVhKCktPnNldFNpemUoSW50U2l6ZShyZWN0LnJpZ2h0IC0g
cmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wKSk7CiAKKyNpZiBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKKyAgICBtX3BhZ2UtPnNldFVSTFNjaGVtZUhhbmRsZXJGb3JTY2hlbWUoUmVt
b3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjpjcmVhdGUoKm1fcGFnZSksICJpbnNwZWN0b3Ii
KTsKKyNlbmRpZgorCiAgICAgLy8gRklYTUU6IEluaXRpYWxpemluZyB0aGUgdG9vbHRpcCB3aW5k
b3cgaGVyZSBtYXRjaGVzIFdlYktpdCB3aW4sIGJ1dCBzZWVtcyBsaWtlIHNvbWV0aGluZwogICAg
IC8vIHdlIGNvdWxkIGRvIG9uIGRlbWFuZCB0byBzYXZlIHJlc291cmNlcy4KICAgICBpbml0aWFs
aXplVG9vbFRpcFdpbmRvdygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW4u
Y21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbi5jbWFrZQppbmRleCBiNmMxMzg2MjMyMWFi
ZTk0MWNjYjQ4NjNkNTA2ZjVjYThiNjYzOTk4Li44NmVlOWIxMmJkN2I5OTQyNDg0NTRiMGE3MDg3
ZDVhYjIyNjcyM2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbi5jbWFrZQor
KysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbi5jbWFrZQpAQCAtNjgsNyArNjgsNiBAQCBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCX0FVRElPIFBVQkxJQyBPRkYp
CiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfWFNMVCBQVUJMSUMgT04p
CiAKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TTU9PVEhfU0NST0xM
SU5HIFBSSVZBVEUgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X1VTRVJfTUVTU0FHRV9IQU5ETEVSUyBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9VU0VSU0VMRUNUX0FMTCBQUklWQVRFIE9GRikKIFdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJHTCBQUklWQVRFIE9GRikKIFdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJfQ1JZUFRPIFBSSVZBVEUgT0ZG
KQpAQCAtNzcsNiArNzYsNyBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfV0VCX0NSWVBUTyBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKFVTRV9TWVNURU1fTUFMTE9DIFBSSVZBVEUgT04pCiAKIGlmICgke1dURl9QTEFURk9STV9X
SU5fQ0FJUk99KQorICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9V
U0VSX01FU1NBR0VfSEFORExFUlMgUFJJVkFURSBPTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSIFBVQkxJ
QyBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xFR0FD
WV9FTkNSWVBURURfTUVESUEgUFVCTElDIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfSU5UTCBQVUJMSUMgT04pCkBAIC05Niw2ICs5Niw3IEBAIGlmICgk
e1dURl9QTEFURk9STV9XSU5fQ0FJUk99KQogICAgICMgRklYTUU6IEltcGxlbWVudCBwbHVnaW4g
cHJvY2VzcyBvbiBNb2Rlcm4gV2ViS2l0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg1MzEzCiAgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX05FVFNDQVBFX1BMVUdJTl9BUEkgUFJJVkFURSBPRkYpCiBlbHNlICgpCisgICAgV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1VTRVJfTUVTU0FHRV9IQU5ETEVSUyBQ
UklWQVRFIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
TEVHQUNZX0VOQ1JZUFRFRF9NRURJQSBQVUJMSUMgT04pCiAgICAgV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0lOVEwgUFVCTElDIE9GRikKICAgICBXRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUFVCTElDX1NVRkZJWF9MSVNUIFBSSVZBVEUgT0ZG
KQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZSBiL1NvdXJj
ZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UKaW5kZXggYTcxNmVjNmYwZWExMGZlYmUzOWIy
OGJmMGM1ZGZlZDcyM2JiNjMyMS4uOGIxYzI4MGY4NjNhYzEwZTAyNDFhNjQ3MWEwOWM5ODU5ZTcw
MDZiYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQorKysg
Yi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlCkBAIC0yOCw3ICsyOCw3IEBAIFNF
VF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DVVJMIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJ
TEQoVVNFX1RFWFRVUkVfTUFQUEVSIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX1RF
WFRVUkVfTUFQUEVSX0dMIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX01FRElBX0ZP
VU5EQVRJT04gT04pCi1TRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfSU5TUEVDVE9SX1NPQ0tF
VF9TRVJWRVIgRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IpCitTRVRfQU5EX0VYUE9TRV9UT19CVUlM
RChVU0VfSU5TUEVDVE9SX1NPQ0tFVF9TRVJWRVIgJHtFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUn0p
CiAKIHNldChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF8zRCBPTikKIHNldChFTkFCTEVfV0VCS0lU
IE9OKQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDBkNWNmZTRhNDJi
ZTEzMzYwOTdiYWYxMDUyZjg3NmFhMDA3YzAwMjMuLjFkY2UxOTg2YWRkZDhmNzZkYzY4YzU4NDQ2
ZmQ3N2JiNTBmMDFlMTYgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMyBAQAorMjAxOS0wNS0xNiAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdA
c29ueS5jb20+CisKKyAgICAgICAgW1dpbkNhaXJvXSBJbXBsZW1lbnQgUmVtb3RlIFdlYiBJbnNw
ZWN0b3IgQ2xpZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk3NDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc1dpbi5jbWFrZToKKyAgICAgICAgKiBTb3VyY2Uv
Y21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlOgorCiAyMDE5LTA1LTA5ICBYYW4gTMOzcGV6ICA8
eGFuQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0NNYWtlXSBEZXRlY3QgU1NFMiBhdCBjb21waWxl
IHRpbWUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370131</attachid>
            <date>2019-05-17 11:43:41 -0700</date>
            <delta_ts>2019-05-20 10:16:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197434-20190517114339.patch</filename>
            <type>text/plain</type>
            <size>39999</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NTUwNjM2OWVlN2IzYmQ1NDY2Y2Y4ZWQ0NjI2NDU0MTA0OTQ5NTgyLi5mZDMyODVjOGNmMjQzMmJl
ZDRlNDMzODliMWZlZjE5MDNkYjMwODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxOS0wNS0xNyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW1dpbkNhaXJvXSBJbXBsZW1lbnQgUmVtb3RlIFdlYiBJbnNwZWN0
b3IgQ2xpZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk3NDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xp
ZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNs
aWVudDo6ZGlkQWNjZXB0KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL3Nv
Y2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50Lmg6CisgICAgICAgIChJbnNwZWN0
b3I6OlJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQ6OmRpZEFjY2VwdCk6CisgICAgICAg
ICogaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmNwcDoKKyAg
ICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU2VydmVyOjpkaXNwYXRjaE1hcCk6CisK
IDIwMTktMDUtMTYgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgogCiAg
ICAgICAgIFtKU0NdIEludmFsaWQgQXNzaWdubWVudFRhcmdldFR5cGUgc2hvdWxkIGJlIGFuIGVh
cmx5IGVycm9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCA1OWI0MzcwMjc5MTI2NDgxN2NlZDJhZTEzMWRhZmRiMTk3
NmFmYWEzLi5jYjVlZTcwY2ZhMDI1MjdjYTFhZjEyN2IyOWNmMGFkZjdlMmJjYTQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIxIEBACisyMDE5LTA1LTE3ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJz
bGluZ0Bzb255LmNvbT4KKworICAgICAgICBbV2luQ2Fpcm9dIEltcGxlbWVudCBSZW1vdGUgV2Vi
IEluc3BlY3RvciBDbGllbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTc0MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1v
dGVXZWJJbnNwZWN0b3JQcm94eS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZVdlYklu
c3BlY3RvclByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1JlbW90ZUluc3BlY3Rv
ckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1JlbW90ZUluc3BlY3Rv
clByb3RvY29sSGFuZGxlcldpbi5jcHA6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4v
UmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyV2luLmg6IEFkZGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
OjpXZWJWaWV3KToKKwogMjAxOS0wNS0xNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBTUEkgdG8gc2V0IGEgbGlzdCBvZiBob3N0cyB0
byB3aGljaCB0byBzZW5kIGN1c3RvbSBoZWFkZXIgZmllbGRzIGNyb3NzLW9yaWdpbgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90
ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuY3Bw
CmluZGV4IDU2ZjQ2Y2RlNWE0YzUwOTU4ZGUyMjRkMjAzOWFjOGE5MTEwNjJlYjQuLjBlOTBmMThl
NzJmNWQ5Y2Y5ZTQzZDFmZmZlNjg5MTcxNTdjZWU0MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0
aW9uQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90
ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5jcHAKQEAgLTgwLDEwICs4
MCw2IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudDo6ZGlkUmVjZWl2ZVdl
Ykluc3BlY3RvckV2ZW50KENvbm5lY3Rpb25JRCBjCiAgICAgfSk7CiB9CiAKLXZvaWQgUmVtb3Rl
SW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudDo6ZGlkQWNjZXB0KENvbm5lY3Rpb25JRCwgQ29ubmVj
dGlvbklELCBTb2NrZXQ6OkRvbWFpbikKLXsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CiAKICNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JD
b25uZWN0aW9uQ2xpZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90
ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5oCmluZGV4IDg3M2EwNTEz
NTZlMWMxOWE3YTk4MDA0MWY2ODBiNzhiMTY5ZWUzYTMuLmM2YTYyOTYyMjIyN2E2MDU2ZGYzYzA3
NmJiYWY0MjY0MjZiMzkxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUlu
c3BlY3RvckNvbm5lY3Rpb25DbGllbnQuaApAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIGNsYXNzIFJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQgOiBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudD4gewogcHVibGlj
OgogICAgIHZvaWQgZGlkUmVjZWl2ZVdlYkluc3BlY3RvckV2ZW50KENvbm5lY3Rpb25JRCwgVmVj
dG9yPHVpbnQ4X3Q+JiYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRBY2NlcHQoQ29ubmVjdGlvbklE
IGFjY2VwdGVkSUQsIENvbm5lY3Rpb25JRCBsaXN0ZW5lcklELCBTb2NrZXQ6OkRvbWFpbik7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZEFjY2VwdChDb25uZWN0aW9uSUQgYWNjZXB0ZWRJRCwgQ29ubmVj
dGlvbklEIGxpc3RlbmVySUQsIFNvY2tldDo6RG9tYWluKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ2xvc2UoQ29ubmVjdGlvbklEKSA9IDA7CiAKICAgICBzdHJ1Y3QgRXZlbnQgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90
ZUluc3BlY3RvclNlcnZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Jl
bW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmNwcAppbmRleCA4OTM1MDg5Njk1YTUz
NWFhNTJhYWM2YWViNTIyYmNjOTFiMzEyMTBlLi5kMmE1YzNhNTA2NTE5ODY1OGRmM2IwYmQzZDlm
ZDBjMTg0NDA0ZjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVy
LmNwcApAQCAtMTA5LDEyICsxMDksMTIgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmRp
ZENsb3NlKENvbm5lY3Rpb25JRCBpZCkKIEhhc2hNYXA8U3RyaW5nLCBSZW1vdGVJbnNwZWN0b3JD
b25uZWN0aW9uQ2xpZW50OjpDYWxsSGFuZGxlcj4mIFJlbW90ZUluc3BlY3RvclNlcnZlcjo6ZGlz
cGF0Y2hNYXAoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywg
Q2FsbEhhbmRsZXI+PiBkaXNwYXRjaE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4o
ewotICAgICAgICB7ICJTZXRUYXJnZXRMaXN0Il9zLCByZWludGVycHJldF9jYXN0PENhbGxIYW5k
bGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXRUYXJnZXRMaXN0KSB9LAotICAgICAgICB7
ICJTZXR1cEluc3BlY3RvckNsaWVudCJfcywgcmVpbnRlcnByZXRfY2FzdDxDYWxsSGFuZGxlcj4o
JlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2V0dXBJbnNwZWN0b3JDbGllbnQpIH0sCi0gICAgICAg
IHsgIlNldHVwIl9zLCByZWludGVycHJldF9jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVj
dG9yU2VydmVyOjpzZXR1cCkgfSwKLSAgICAgICAgeyAiRnJvbnRlbmREaWRDbG9zZSJfcywgcmVp
bnRlcnByZXRfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6Y2xvc2Up
IH0sCi0gICAgICAgIHsgIlNlbmRNZXNzYWdlVG9Gcm9udGVuZCJfcywgcmVpbnRlcnByZXRfY2Fz
dDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKSB9LAotICAgICAgICB7ICJTZW5kTWVzc2FnZVRvQmFja2VuZCJfcywgcmVpbnRlcnByZXRf
Y2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQpIH0sCisgICAgICAgIHsgIlNldFRhcmdldExpc3QiX3MsIHN0YXRpY19jYXN0PENhbGxI
YW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXRUYXJnZXRMaXN0KSB9LAorICAgICAg
ICB7ICJTZXR1cEluc3BlY3RvckNsaWVudCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZS
ZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNldHVwSW5zcGVjdG9yQ2xpZW50KSB9LAorICAgICAgICB7
ICJTZXR1cCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JTZXJ2
ZXI6OnNldHVwKSB9LAorICAgICAgICB7ICJGcm9udGVuZERpZENsb3NlIl9zLCBzdGF0aWNfY2Fz
dDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6Y2xvc2UpIH0sCisgICAgICAg
IHsgIlNlbmRNZXNzYWdlVG9Gcm9udGVuZCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZS
ZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCkgfSwKKyAgICAgICAg
eyAiU2VuZE1lc3NhZ2VUb0JhY2tlbmQiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVt
b3RlSW5zcGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZVRvQmFja2VuZCkgfSwKICAgICB9KTsKIAog
ICAgIHJldHVybiBkaXNwYXRjaE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IGMzNTE0
ZTgzYTAyNThhYjdjMjEwNzNhMDljYTgxZDZkMjA5YWIxZWQuLmIwN2JiNDkxNTU3MjcwZGY1YjYy
M2NjZjE4YjFiNGNlZDcxMjE5YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1X
aW4uY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtNTUsNiAr
NTUsOSBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9XZWJzaXRl
RGF0YS93aW4vV2Vic2l0ZURhdGFTdG9yZVdpbi5jcHAKIAogICAgIFVJUHJvY2Vzcy93aW4vUGFn
ZUNsaWVudEltcGwuY3BwCisgICAgVUlQcm9jZXNzL3dpbi9SZW1vdGVJbnNwZWN0b3JDbGllbnQu
Y3BwCisgICAgVUlQcm9jZXNzL3dpbi9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXJXaW4u
Y3BwCisgICAgVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKICAg
ICBVSVByb2Nlc3Mvd2luL1RleHRDaGVja2VyV2luLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2Vi
Q29udGV4dE1lbnVQcm94eVdpbi5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYkluc3BlY3RvclBy
b3h5V2luLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHkuY3BwCmluZGV4IDg3YjIyNGVhZjkyZGQ3NDc2Y2E2MWZhNGQxN2QyN2E1ZmUw
ZTQ2ZDUuLmIyOTY3MTYzOGY1MTRkMWU2ZmYyMmU0OTNlMDg4YTU2OGRlODdkMTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAK
QEAgLTE3MCw3ICsxNzAsNyBAQCB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZy
b250ZW5kUGFnZUFuZFdpbmRvdygpCiAgICAgcGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpOwogfQogCi0jaWYgIUVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKSB8fCAoIVBMQVRGT1JN
KE1BQykgJiYgIVBMQVRGT1JNKEdUSykpCisjaWYgIUVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKSB8
fCAoIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTl9DQUlS
TykpCiBXZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0
ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oCmluZGV4
IDBmZDBlODNhNWI1NjA0ZDdkNmVjNWY5MTY3NTIwZmExOTMwZGRjYWEuLjVlYmJiNjhkNGM2ZGFh
MzNjMjg1OGJkN2FlMDk1MzEwNGFiYzE0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaApAQCAtNDgsNiArNDgsNyBAQCBjbGFzcyBD
ZXJ0aWZpY2F0ZUluZm87CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZVByb3h5
OworY2xhc3MgV2ViVmlldzsKIAogY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQg
ewogcHVibGljOgpAQCAtODgsNiArODksMTMgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlV2lu
ZG93VGl0bGUoY29uc3QgQ1N0cmluZyYpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU5fQ0FJ
Uk8pCisgICAgTFJFU1VMVCBzaXplQ2hhbmdlKCk7CisgICAgTFJFU1VMVCBvbkNsb3NlKCk7CisK
KyAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwg
TFBBUkFNKTsKKyNlbmRpZgorCiAgICAgdm9pZCBjbG9zZUZyb21DcmFzaCgpOwogCiBwcml2YXRl
OgpAQCAtMTM5LDYgKzE0NywxMCBAQCBwcml2YXRlOgogICAgIEd0a1dpZGdldCogbV93ZWJWaWV3
IHsgbnVsbHB0ciB9OwogICAgIEd0a1dpZGdldCogbV93aW5kb3cgeyBudWxscHRyIH07CiAjZW5k
aWYKKyNpZiBQTEFURk9STShXSU5fQ0FJUk8pCisgICAgSFdORCBtX2Zyb250ZW5kSGFuZGxlOwor
ICAgIFJlZlB0cjxXZWJWaWV3PiBtX3dlYlZpZXc7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1JlbW90
ZUluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYjJhYzg1Njg1OWFkYTQ0ODI0ZjIzMDdj
N2U0NTA3Y2E3Yzc0NmY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3Mvd2luL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKQEAgLTAsMCArMSwyNTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUluc3BlY3Rv
ckNsaWVudC5oIgorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlICJS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm94eSBmaW5hbCA6
IHB1YmxpYyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQoKTsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbnNwZWN0b3JQcm94eShSZW1vdGVJ
bnNwZWN0b3JDbGllbnQmIGluc3BlY3RvckNsaWVudCwgQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25J
RCwgVGFyZ2V0SUQgdGFyZ2V0SUQpCisgICAgICAgIDogbV9wcm94eShSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6Y3JlYXRlKCkpCisgICAgICAgICwgbV9pbnNwZWN0b3JDbGllbnQoaW5zcGVjdG9y
Q2xpZW50KQorICAgICAgICAsIG1fY29ubmVjdGlvbklEKGNvbm5lY3Rpb25JRCkKKyAgICAgICAg
LCBtX3RhcmdldElEKHRhcmdldElEKQorICAgIHsKKyAgICAgICAgbV9wcm94eS0+c2V0Q2xpZW50
KHRoaXMpOworICAgIH0KKworICAgIH5SZW1vdGVJbnNwZWN0b3JQcm94eSgpCisgICAgeworICAg
ICAgICBtX3Byb3h5LT5zZXRDbGllbnQobnVsbHB0cik7CisgICAgICAgIG1fcHJveHktPmludmFs
aWRhdGUoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQoKQorICAgIHsKKyAgICAgICAgbV9wcm94
eS0+bG9hZCgid2ViIiwgIiIpOworICAgIH0KKworICAgIHZvaWQgc2hvdygpCisgICAgeworICAg
ICAgICBtX3Byb3h5LT5zaG93KCk7CisgICAgfQorCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJv
bnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgbV9wcm94eS0+c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpOworICAgIH0KKworICAgIHZvaWQgc2VuZE1lc3Nh
Z2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgbV9pbnNwZWN0b3JDbGllbnQuc2VuZE1lc3NhZ2VUb0JhY2tlbmQobV9jb25uZWN0aW9uSUQs
IG1fdGFyZ2V0SUQsIG1lc3NhZ2UpOworICAgIH0KKworICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRl
bmQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuY2xvc2VGcm9t
RnJvbnRlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+IG1fcHJveHk7CisgICAgUmVtb3RlSW5z
cGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKKyAgICBDb25uZWN0aW9uSUQgbV9jb25u
ZWN0aW9uSUQ7CisgICAgVGFyZ2V0SUQgbV90YXJnZXRJRDsKK307CisKK1JlbW90ZUluc3BlY3Rv
ckNsaWVudDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50KGNvbnN0IGNoYXIqIGFkZHJlc3MsIHVuc2ln
bmVkIHBvcnQsIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJiBvYnNlcnZlcikKKyAgICA6IG1fb2Jz
ZXJ2ZXIob2JzZXJ2ZXIpCit7CisgICAgbV9zb2NrZXQgPSBJbnNwZWN0b3I6OlJlbW90ZUluc3Bl
Y3RvclNvY2tldEVuZHBvaW50OjpjcmVhdGUodGhpcywgIlJlbW90ZUluc3BlY3RvckNsaWVudCIp
OworCisgICAgbV9jb25uZWN0aW9uSUQgPSBtX3NvY2tldC0+Y29ubmVjdEluZXQoYWRkcmVzcywg
cG9ydCk7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb25JRCkgeworICAgICAgICBMT0dfRVJST1IoIklu
c3BlY3RvciBjbGllbnQgY291bGQgbm90IGNvbm5lY3QgdG8gJXM6JWQiLCBhZGRyZXNzLCBwb3J0
KTsKKyAgICAgICAgbV9zb2NrZXQgPSBudWxscHRyOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgc3RhcnRJbml0aWFsQ29tbXVuaWNhdGlvbigpOworfQorCitSZW1vdGVJbnNwZWN0b3JD
bGllbnQ6On5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKQoreworfQorCit2b2lkIFJlbW90ZUluc3Bl
Y3RvckNsaWVudDo6c2VuZFdlYkluc3BlY3RvckV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnQpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9jb25uZWN0aW9uSUQu
aGFzVmFsdWUoKSk7CisgICAgYXV0byBtZXNzYWdlID0gZXZlbnQudXRmOCgpOworICAgIG1fc29j
a2V0LT5zZW5kKG1fY29ubmVjdGlvbklELnZhbHVlKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KG1lc3NhZ2UuZGF0YSgpKSwgbWVzc2FnZS5sZW5ndGgoKSk7Cit9CisKK0hhc2hN
YXA8U3RyaW5nLCBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQ6OkNh
bGxIYW5kbGVyPiYgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpkaXNwYXRjaE1hcCgpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4+IGRpc3Bh
dGNoTWFwID0gSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPih7CisgICAgICAgIHsgIlNldFRh
cmdldExpc3QiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50OjpzZXRUYXJnZXRMaXN0KSB9LAorICAgICAgICB7ICJTZW5kTWVzc2FnZVRvRnJvbnRlbmQi
X3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5k
TWVzc2FnZVRvRnJvbnRlbmQpIH0sCisgICAgfSk7CisKKyAgICByZXR1cm4gZGlzcGF0Y2hNYXA7
Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzdGFydEluaXRpYWxDb21tdW5pY2F0
aW9uKCkKK3sKKyAgICBhdXRvIGV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBl
dmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNldHVwSW5zcGVjdG9yQ2xpZW50Il9zKTsKKyAg
ICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoZXZlbnQtPnRvSlNPTlN0cmluZygpKTsKK30KKwordm9p
ZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNvbm5lY3Rpb25DbG9zZWQoKQoreworICAgIG1fdGFy
Z2V0cy5jbGVhcigpOworICAgIG1faW5zcGVjdG9yUHJveHlNYXAuY2xlYXIoKTsKKyAgICBtX29i
c2VydmVyLmNvbm5lY3Rpb25DbG9zZWQoKnRoaXMpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3Rv
ckNsaWVudDo6ZGlkQ2xvc2UoQ29ubmVjdGlvbklEKQoreworfQorCit2b2lkIFJlbW90ZUluc3Bl
Y3RvckNsaWVudDo6aW5zcGVjdChDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0
YXJnZXRJRCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1faW5zcGVjdG9yUHJveHlNYXAuZW5z
dXJlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpLCBbdGhpcywgY29ubmVj
dGlvbklELCB0YXJnZXRJRF0geworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSZW1v
dGVJbnNwZWN0b3JQcm94eT4oKnRoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpOworICAgIH0p
OworCisgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLT5zaG93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
dXRvIHNldHVwRXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHNldHVwRXZlbnQt
PnNldFN0cmluZygiZXZlbnQiX3MsICJTZXR1cCJfcyk7CisgICAgc2V0dXBFdmVudC0+c2V0SW50
ZWdlcigiY29ubmVjdGlvbklEIl9zLCBjb25uZWN0aW9uSUQpOworICAgIHNldHVwRXZlbnQtPnNl
dEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7CisgICAgc2VuZFdlYkluc3BlY3RvckV2
ZW50KHNldHVwRXZlbnQtPnRvSlNPTlN0cmluZygpKTsKKworICAgIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUtPmxvYWQoKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRN
ZXNzYWdlVG9CYWNrZW5kKENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRhcmdl
dElELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgYXV0byBiYWNrZW5kRXZlbnQgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGJhY2tlbmRFdmVudC0+c2V0U3RyaW5nKCJldmVu
dCJfcywgIlNlbmRNZXNzYWdlVG9CYWNrZW5kIl9zKTsKKyAgICBiYWNrZW5kRXZlbnQtPnNldElu
dGVnZXIoImNvbm5lY3Rpb25JRCJfcywgY29ubmVjdGlvbklEKTsKKyAgICBiYWNrZW5kRXZlbnQt
PnNldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7CisgICAgYmFja2VuZEV2ZW50LT5z
ZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIG1lc3NhZ2UpOworICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVu
dChiYWNrZW5kRXZlbnQtPnRvSlNPTlN0cmluZygpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0
b3JDbGllbnQ6OmNsb3NlRnJvbUZyb250ZW5kKENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRh
cmdldElEIHRhcmdldElEKQoreworICAgIGF1dG8gY2xvc2VkRXZlbnQgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGNsb3NlZEV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiRnJvbnRl
bmREaWRDbG9zZSJfcyk7CisgICAgY2xvc2VkRXZlbnQtPnNldEludGVnZXIoImNvbm5lY3Rpb25J
RCJfcywgY29ubmVjdGlvbklEKTsKKyAgICBjbG9zZWRFdmVudC0+c2V0SW50ZWdlcigidGFyZ2V0
SUQiX3MsIHRhcmdldElEKTsKKyAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoY2xvc2VkRXZlbnQt
PnRvSlNPTlN0cmluZygpKTsKKworICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6
bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKK30KKwordm9pZCBSZW1vdGVJbnNw
ZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmIGV2ZW50KQoreworICAgIGlm
ICghZXZlbnQuY29ubmVjdGlvbklEIHx8ICFldmVudC5tZXNzYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsKKyAgICBpZiAoIUpTT046
OlZhbHVlOjpwYXJzZUpTT04oZXZlbnQubWVzc2FnZS52YWx1ZSgpLCBtZXNzYWdlVmFsdWUpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG1lc3NhZ2VBcnJheTsK
KyAgICBpZiAoIW1lc3NhZ2VWYWx1ZS0+YXNBcnJheShtZXNzYWdlQXJyYXkpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBWZWN0b3I8VGFyZ2V0PiB0YXJnZXRMaXN0OworICAgIGZvciAoYXV0byYg
aXRlbVZhbHVlIDogKm1lc3NhZ2VBcnJheSkgeworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBpdGVtT2JqZWN0OworICAgICAgICBpZiAoIWl0ZW1WYWx1ZS0+YXNPYmplY3QoaXRlbU9iamVj
dCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBUYXJnZXQgdGFyZ2V0OworICAg
ICAgICBpZiAoIWl0ZW1PYmplY3QtPmdldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXQuaWQp
CisgICAgICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9zLCB0YXJnZXQu
bmFtZSkKKyAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInVybCJfcywgdGFy
Z2V0LnVybCkKKyAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUiX3Ms
IHRhcmdldC50eXBlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHRhcmdldExp
c3QuYXBwZW5kKFdURk1vdmUodGFyZ2V0KSk7CisgICAgfQorCisgICAgYXV0byBjb25uZWN0aW9u
SUQgPSBldmVudC5jb25uZWN0aW9uSUQudmFsdWUoKTsKKworICAgIC8vIEZpbmQgY2xvc2VkIHRh
cmdldHMgdG8gcmVtb3ZlIHRoZW0uCisgICAgVmVjdG9yPFRhcmdldElELCA0PiB0YXJnZXRzVG9S
ZW1vdmU7CisgICAgZm9yIChhdXRvJiBwYWlyIDogbV9pbnNwZWN0b3JQcm94eU1hcC5rZXlzKCkp
IHsKKyAgICAgICAgaWYgKHBhaXIuZmlyc3QgIT0gY29ubmVjdGlvbklEKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKGF1
dG8mIHRhcmdldCA6IHRhcmdldExpc3QpIHsKKyAgICAgICAgICAgIGlmICh0YXJnZXQuaWQgPT0g
cGFpci5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZv
dW5kKQorICAgICAgICAgICAgdGFyZ2V0c1RvUmVtb3ZlLmFwcGVuZChwYWlyLnNlY29uZCk7Cisg
ICAgfQorICAgIGZvciAoYXV0byYgdGFyZ2V0SUQgOiB0YXJnZXRzVG9SZW1vdmUpCisgICAgICAg
IG1faW5zcGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwg
dGFyZ2V0SUQpKTsKKworICAgIG1fdGFyZ2V0cy5zZXQoY29ubmVjdGlvbklELCBXVEZNb3ZlKHRh
cmdldExpc3QpKTsKKyAgICBtX29ic2VydmVyLnRhcmdldExpc3RDaGFuZ2VkKCp0aGlzKTsKK30K
Kwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25z
dCBFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKCFldmVudC5jb25uZWN0aW9uSUQgfHwgIWV2ZW50
LnRhcmdldElEIHx8ICFldmVudC5tZXNzYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IHByb3h5ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoc3RkOjptYWtlX3BhaXIoZXZlbnQuY29u
bmVjdGlvbklELnZhbHVlKCksIGV2ZW50LnRhcmdldElELnZhbHVlKCkpKTsKKyAgICBpZiAoIXBy
b3h5KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChldmVudC5tZXNzYWdlLnZh
bHVlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2lu
L1JlbW90ZUluc3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1Jl
bW90ZUluc3BlY3RvckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1YjM1ODRkM2E2ZjY0ZGZkY2FmYmI4
ZDBiMzk4N2JlODk4ZDVlZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy93aW4vUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQor
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlQ29udHJvbGxhYmxlVGFyZ2V0Lmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBSZW1vdGVJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm94eTsK
KworY2xhc3MgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwg
flJlbW90ZUluc3BlY3Rvck9ic2VydmVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHRhcmdldExp
c3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Y29ubmVjdGlvbkNsb3NlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSA9IDA7Cit9OworCit1c2lu
ZyBDb25uZWN0aW9uSUQgPSBJbnNwZWN0b3I6OkNvbm5lY3Rpb25JRDsKK3VzaW5nIFRhcmdldElE
ID0gSW5zcGVjdG9yOjpUYXJnZXRJRDsKKworY2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xpZW50IDog
cHVibGljIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudCB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQoKTsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbnNwZWN0b3JD
bGllbnQoY29uc3QgY2hhciogYWRkcmVzcywgdW5zaWduZWQgcG9ydCwgUmVtb3RlSW5zcGVjdG9y
T2JzZXJ2ZXImKTsKKyAgICB+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCk7CisKKyAgICBzdHJ1Y3Qg
VGFyZ2V0IHsKKyAgICAgICAgVGFyZ2V0SUQgaWQ7CisgICAgICAgIFN0cmluZyB0eXBlOworICAg
ICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgU3RyaW5nIHVybDsKKyAgICB9OworCisgICAgY29u
c3QgSGFzaE1hcDxDb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+PiYgdGFyZ2V0cygpIGNvbnN0
IHsgcmV0dXJuIG1fdGFyZ2V0czsgfQorCisgICAgdm9pZCBpbnNwZWN0KENvbm5lY3Rpb25JRCwg
VGFyZ2V0SUQpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoQ29ubmVjdGlvbklELCBU
YXJnZXRJRCwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBjbG9zZUZyb21Gcm9udGVuZChDb25u
ZWN0aW9uSUQsIFRhcmdldElEKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTmV2ZXJE
ZXN0cm95ZWQ8UmVtb3RlSW5zcGVjdG9yQ2xpZW50PjsKKworICAgIHZvaWQgc3RhcnRJbml0aWFs
Q29tbXVuaWNhdGlvbigpOworICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZCgpOworCisgICAgdm9p
ZCBzZXRUYXJnZXRMaXN0KGNvbnN0IEV2ZW50Jik7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJv
bnRlbmQoY29uc3QgRXZlbnQmKTsKKyAgICB2b2lkIHNldEJhY2tlbmRDb21tYW5kcyhjb25zdCBF
dmVudCYpOworCisgICAgdm9pZCBkaWRDbG9zZShDb25uZWN0aW9uSUQpIG92ZXJyaWRlOworICAg
IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4mIGRpc3BhdGNoTWFwKCkgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIHNlbmRXZWJJbnNwZWN0b3JFdmVudChjb25zdCBTdHJpbmcmKTsKKworICAgIFJl
bW90ZUluc3BlY3Rvck9ic2VydmVyJiBtX29ic2VydmVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50PiBtX3NvY2tldDsKKyAgICBP
cHRpb25hbDxDb25uZWN0aW9uSUQ+IG1fY29ubmVjdGlvbklEOworICAgIEhhc2hNYXA8Q29ubmVj
dGlvbklELCBWZWN0b3I8VGFyZ2V0Pj4gbV90YXJnZXRzOworICAgIEhhc2hNYXA8c3RkOjpwYWly
PENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQ+LCBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlSW5zcGVjdG9y
UHJveHk+PiBtX2luc3BlY3RvclByb3h5TWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXJXaW4u
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1JlbW90ZUluc3BlY3RvclByb3RvY29s
SGFuZGxlcldpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTlhOTQyOThhMjE0NTQ4Njc1YTI1ZGVhYTZmNTgy
NzNmM2RkZWQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dp
bi9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXJXaW4uY3BwCkBAIC0wLDAgKzEsMTM1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJ
bnNwZWN0b3JQcm90b2NvbEhhbmRsZXJXaW4uaCIKKworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVD
VE9SKQorCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgorI2luY2x1ZGUgIkFQSVVzZXJDb250
ZW50V29ybGQuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKKyNpbmNsdWRlICJXZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5oIgorI2luY2x1ZGUg
IldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIFNjcmlwdE1lc3NhZ2VDbGllbnQgZmluYWwgOiBwdWJs
aWMgV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI6OkNsaWVudCB7CitwdWJsaWM6CisgICAgU2NyaXB0
TWVzc2FnZUNsaWVudChSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXImIGluc3BlY3RvclBy
b3RvY29sSGFuZGxlcikKKyAgICAgICAgOiBtX2luc3BlY3RvclByb3RvY29sSGFuZGxlcihpbnNw
ZWN0b3JQcm90b2NvbEhhbmRsZXIpIHsgfQorCisgICAgflNjcmlwdE1lc3NhZ2VDbGllbnQoKSB7
IH0KKworICAgIHZvaWQgZGlkUG9zdE1lc3NhZ2UoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBG
cmFtZUluZm9EYXRhJiwgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlJiBzZXJpYWxpemVk
U2NyaXB0VmFsdWUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIHRva2VucyA9IHNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS50b1N0cmluZygpLnNwbGl0KCI6Iik7CisgICAgICAgIGlmICh0b2tl
bnMuc2l6ZSgpICE9IDIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgVVJMIHJlcXVl
c3RVUkwgeyB7IH0sIHBhZ2UucGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07CisgICAgICAgIG1faW5z
cGVjdG9yUHJvdG9jb2xIYW5kbGVyLmluc3BlY3QocmVxdWVzdFVSTC5ob3N0QW5kUG9ydCgpLCB0
b2tlbnNbMF0udG9VSW50U3RyaWN0KCksIHRva2Vuc1sxXS50b1VJbnRTdHJpY3QoKSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlciYgbV9pbnNw
ZWN0b3JQcm90b2NvbEhhbmRsZXI7Cit9OworCit2b2lkIFJlbW90ZUluc3BlY3RvclByb3RvY29s
SGFuZGxlcjo6aW5zcGVjdChjb25zdCBTdHJpbmcmIGhvc3RBbmRQb3J0LCBDb25uZWN0aW9uSUQg
Y29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCkKK3sKKyAgICBpZiAoYXV0byogY2xpZW50
ID0gbV9pbnNwZWN0b3JDbGllbnRzLmdldChob3N0QW5kUG9ydCkpCisgICAgICAgIGNsaWVudC0+
aW5zcGVjdChjb25uZWN0aW9uSUQsIHRhcmdldElEKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0
b3JQcm90b2NvbEhhbmRsZXI6OnRhcmdldExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNsaWVu
dCYpCit7CisgICAgbV9wYWdlLnJlbG9hZCh7IH0pOworfQorCit2b2lkIFJlbW90ZUluc3BlY3Rv
clByb3RvY29sSGFuZGxlcjo6cGxhdGZvcm1TdGFydFRhc2soV2ViUGFnZVByb3h5JiBwYWdlUHJv
eHksIFdlYlVSTFNjaGVtZVRhc2smIHRhc2spCit7CisgICAgYXV0byYgcmVxdWVzdFVSTCA9IHRh
c2sucmVxdWVzdCgpLnVybCgpOworICAgIGlmICghcmVxdWVzdFVSTC5wb3J0KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8qIGNsaWVudCA9IG1faW5zcGVjdG9yQ2xpZW50cy5lbnN1cmUo
cmVxdWVzdFVSTC5ob3N0QW5kUG9ydCgpLCBbdGhpcywgJnJlcXVlc3RVUkxdIHsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UmVtb3RlSW5zcGVjdG9yQ2xpZW50PihyZXF1ZXN0VVJM
Lmhvc3QoKS51dGY4KCkuZGF0YSgpLCByZXF1ZXN0VVJMLnBvcnQoKS52YWx1ZSgpLCAqdGhpcyk7
CisgICAgfSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworCisgICAgLy8gU2V0dXAgdGFyZ2V0IHBv
c3RNZXNzYWdlIGxpc3RlbmVyCisgICAgYXV0byBoYW5kbGVyID0gV2ViU2NyaXB0TWVzc2FnZUhh
bmRsZXI6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNjcmlwdE1lc3NhZ2VDbGllbnQ+KCp0aGlz
KSwgImluc3BlY3RvciIsIEFQSTo6VXNlckNvbnRlbnRXb3JsZDo6bm9ybWFsV29ybGQoKSk7Cisg
ICAgcGFnZVByb3h5LnBhZ2VHcm91cCgpLnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJT
Y3JpcHRNZXNzYWdlSGFuZGxlcihoYW5kbGVyLmdldCgpKTsKKworICAgIFN0cmluZ0J1aWxkZXIg
aHRtbEJ1aWxkZXI7CisgICAgaHRtbEJ1aWxkZXIuYXBwZW5kKAorICAgICAgICAiPGh0bWw+PGhl
YWQ+PHRpdGxlPlJlbW90ZSBJbnNwZWN0b3I8L3RpdGxlPiIKKyAgICAgICAgIjxtZXRhIGh0dHAt
ZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04
XCIgLz4iCisgICAgICAgICI8c3R5bGU+IgorICAgICAgICAiICBoMSB7IGNvbG9yOiAjYmFiZGI2
OyB0ZXh0LXNoYWRvdzogMCAxcHggMCB3aGl0ZTsgbWFyZ2luLWJvdHRvbTogMDsgfSIKKyAgICAg
ICAgIiAgaHRtbCB7IGZvbnQtZmFtaWx5OiAtd2Via2l0LXN5c3RlbS1mb250OyBmb250LXNpemU6
IDExcHQ7IGNvbG9yOiAjMmUzNDM2OyBwYWRkaW5nOiAyMHB4IDIwcHggMCAyMHB4OyBiYWNrZ3Jv
dW5kLWNvbG9yOiAjZjZmNmY0OyAiCisgICAgICAgICIgICAgICAgICBiYWNrZ3JvdW5kLWltYWdl
OiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1z
dG9wKDAsICNlZWVlZWMpLCBjb2xvci1zdG9wKDEsICNmNmY2ZjQpKTsiCisgICAgICAgICIgICAg
ICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgNWVtOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVw
ZWF0OyB9IgorICAgICAgICAiICB0YWJsZSB7IHdpZHRoOiAxMDAlOyBib3JkZXItY29sbGFwc2U6
IGNvbGxhcHNlOyB9IgorICAgICAgICAiICB0YWJsZSwgdGQgeyBib3JkZXI6IDFweCBzb2xpZCAj
ZDNkN2NmOyBib3JkZXItbGVmdDogbm9uZTsgYm9yZGVyLXJpZ2h0OiBub25lOyB9IgorICAgICAg
ICAiICBwIHsgbWFyZ2luLWJvdHRvbTogMzBweDsgfSIKKyAgICAgICAgIiAgdGQgeyBwYWRkaW5n
OiAxNXB4OyB9IgorICAgICAgICAiICB0ZC5kYXRhIHsgd2lkdGg6IDIwMHB4OyB9IgorICAgICAg
ICAiICAudGFyZ2V0bmFtZSB7IGZvbnQtd2VpZ2h0OiBib2xkOyB9IgorICAgICAgICAiICAudGFy
Z2V0dXJsIHsgY29sb3I6ICNiYWJkYjY7IH0iCisgICAgICAgICIgIHRkLmlucHV0IHsgd2lkdGg6
IDY0cHg7IH0iCisgICAgICAgICIgIGlucHV0IHsgd2lkdGg6IDEwMCU7IHBhZGRpbmc6IDhweDsg
fSIKKyAgICAgICAgIjwvc3R5bGU+IgorICAgICAgICAiPC9oZWFkPjxib2R5PjxoMT5JbnNwZWN0
YWJsZSB0YXJnZXRzPC9oMT4iKTsKKworICAgIGlmIChjbGllbnQtPnRhcmdldHMoKS5pc0VtcHR5
KCkpCisgICAgICAgIGh0bWxCdWlsZGVyLmFwcGVuZCgiPHA+Tm8gdGFyZ2V0cyBmb3VuZDwvcD4i
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgaHRtbEJ1aWxkZXIuYXBwZW5kKCI8dGFibGU+Iik7Cisg
ICAgICAgIGZvciAoYXV0byYgY29ubmVjdGlvbklEIDogY2xpZW50LT50YXJnZXRzKCkua2V5cygp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHRhcmdldCA6IGNsaWVudC0+dGFyZ2V0cygpLmdl
dChjb25uZWN0aW9uSUQpKSB7CisgICAgICAgICAgICAgICAgaHRtbEJ1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICI8dGJvZHk+PHRyPiIKKyAgICAgICAgICAg
ICAgICAgICAgIjx0ZCBjbGFzcz1cImRhdGFcIj48ZGl2IGNsYXNzPVwidGFyZ2V0bmFtZVwiPiIs
IHRhcmdldC5uYW1lLCAiPC9kaXY+PGRpdiBjbGFzcz1cInRhcmdldHVybFwiPiIsIHRhcmdldC51
cmwsICI8L2Rpdj48L3RkPiIKKyAgICAgICAgICAgICAgICAgICAgIjx0ZCBjbGFzcz1cImlucHV0
XCI+PGlucHV0IHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkluc3BlY3RcIiBvbmNsaWNrPVwid2lu
ZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaW5zcGVjdG9yLnBvc3RNZXNzYWdlKCciLCBjb25u
ZWN0aW9uSUQsICI6IiwgdGFyZ2V0LmlkLCAiJyk7XCI+PC90ZD4iCisgICAgICAgICAgICAgICAg
ICAgICI8L3RyPjwvdGJvZHk+IgorICAgICAgICAgICAgICAgICkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGh0bWxCdWlsZGVyLmFwcGVuZCgiPC90YWJsZT4iKTsKKyAgICB9
CisKKyAgICBhdXRvIGh0bWwgPSBodG1sQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKKyAgICBw
YWdlUHJveHkubG9hZERhdGEoeyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihodG1s
LmRhdGEoKSksIGh0bWwubGVuZ3RoKCkgfSwgInRleHQvaHRtbCJfcywgIlVURi04Il9zLCByZXF1
ZXN0VVJMKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dp
bi9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXJXaW4uaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3dpbi9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXJXaW4uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lMGFjMzRlMmQzOWQ2NjNhNGU0YmVhYmU4Y2IyNjEwMmYwNmFiMTFhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1JlbW90ZUluc3BlY3RvclByb3RvY29s
SGFuZGxlcldpbi5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
U29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIlJlbW90ZUlu
c3BlY3RvckNsaWVudC5oIgorI2luY2x1ZGUgIldlYlVSTFNjaGVtZUhhbmRsZXIuaCIKKworbmFt
ZXNwYWNlIFdURiB7CitjbGFzcyBVUkw7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXZWJVUkxTY2hlbWVUYXNrOworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRs
ZXIgZmluYWwgOiBwdWJsaWMgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIsIHB1YmxpYyBXZWJVUkxT
Y2hlbWVIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbW90ZUluc3BlY3RvclBy
b3RvY29sSGFuZGxlcj4gY3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSkgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIocGFnZSkpOyB9CisKKyAgICB2
b2lkIGluc3BlY3QoY29uc3QgU3RyaW5nJiwgQ29ubmVjdGlvbklELCBUYXJnZXRJRCk7CisKK3By
aXZhdGU6CisgICAgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyKFdlYlBhZ2VQcm94eSYg
cGFnZSkKKyAgICAgICAgOiBtX3BhZ2UocGFnZSkgeyB9CisKKyAgICAvLyBSZW1vdGVJbnNwZWN0
b3JPYnNlcnZlcgorICAgIHZvaWQgdGFyZ2V0TGlzdENoYW5nZWQoUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50JikgZmluYWw7CisgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKFJlbW90ZUluc3BlY3RvckNs
aWVudCYpIGZpbmFsIHsgfQorCisgICAgLy8gV2ViVVJMU2NoZW1lSGFuZGxlcgorICAgIHZvaWQg
cGxhdGZvcm1TdGFydFRhc2soV2ViUGFnZVByb3h5JiwgV2ViVVJMU2NoZW1lVGFzayYpIGZpbmFs
OworICAgIHZvaWQgcGxhdGZvcm1TdG9wVGFzayhXZWJQYWdlUHJveHkmLCBXZWJVUkxTY2hlbWVU
YXNrJikgZmluYWwgeyB9CisgICAgdm9pZCBwbGF0Zm9ybVRhc2tDb21wbGV0ZWQoV2ViVVJMU2No
ZW1lVGFzayYpIGZpbmFsIHsgfQorCisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0
cjxSZW1vdGVJbnNwZWN0b3JDbGllbnQ+PiBtX2luc3BlY3RvckNsaWVudHM7CisgICAgV2ViUGFn
ZVByb3h5JiBtX3BhZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MGRhMWU1Mzg3NDE2YmIwYTgyMjljODcwMzVjODg2NDIzN2FhNWFlOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdp
bi5jcHAKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCisKKyNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCisj
aW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIK
KyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgTFBD
VFNUUiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wID0gVEVYVCgiUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHlQb2ludGVyIik7Citjb25zdCBMUENXU1RSIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5Q2xhc3NOYW1lID0gTCJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzIjsKKworTFJF
U1VMVCBDQUxMQkFDSyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6V25kUHJvYyhIV05EIGh3bmQs
IFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5KiBjbGllbnQgPSByZWludGVycHJldF9jYXN0PFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5Kj4oOjpHZXRQcm9wKGh3bmQsIFJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRl
clByb3ApKTsKKworICAgIHN3aXRjaCAobXNnKSB7CisgICAgY2FzZSBXTV9TSVpFOgorICAgICAg
ICByZXR1cm4gY2xpZW50LT5zaXplQ2hhbmdlKCk7CisgICAgY2FzZSBXTV9DTE9TRToKKyAgICAg
ICAgcmV0dXJuIGNsaWVudC0+b25DbG9zZSgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIHJldHVybiA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNnLCB3UGFyYW0s
IGxQYXJhbSk7Cit9CisKK3N0YXRpYyBBVE9NIHJlZ2lzdGVyV2luZG93Q2xhc3MoKQoreworICAg
IHN0YXRpYyBib29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKKyAgICBpZiAo
aGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBX
TkRDTEFTU0VYIHdjZXg7CisgICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7Cisg
ICAgd2NleC5zdHlsZSAgICAgICAgICA9IDA7CisgICAgd2NleC5scGZuV25kUHJvYyAgICA9IFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpXbmRQcm9jOworICAgIHdjZXguY2JDbHNFeHRyYSAgICAg
PSAwOworICAgIHdjZXguY2JXbmRFeHRyYSAgICAgPSAwOworICAgIHdjZXguaEluc3RhbmNlICAg
ICAgPSAwOworICAgIHdjZXguaEljb24gICAgICAgICAgPSAwOworICAgIHdjZXguaEN1cnNvciAg
ICAgICAgPSBMb2FkQ3Vyc29yKDAsIElEQ19BUlJPVyk7CisgICAgd2NleC5oYnJCYWNrZ3JvdW5k
ICA9IDA7CisgICAgd2NleC5scHN6TWVudU5hbWUgICA9IDA7CisgICAgd2NleC5scHN6Q2xhc3NO
YW1lICA9IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lOworICAgIHdjZXguaEljb25T
bSAgICAgICAgPSAwOworCisgICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IHRydWU7Cisg
ICAgcmV0dXJuIDo6UmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKK30KKworTFJFU1VMVCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6c2l6ZUNoYW5nZSgpCit7CisgICAgaWYgKCFtX3dlYlZpZXcpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgUkVDVCByZWN0OworICAgIDo6R2V0Q2xpZW50UmVjdCht
X2Zyb250ZW5kSGFuZGxlLCAmcmVjdCk7CisgICAgOjpTZXRXaW5kb3dQb3MobV93ZWJWaWV3LT53
aW5kb3coKSwgMCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwg
cmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKKyAgICByZXR1cm4gMDsKK30K
KworTFJFU1VMVCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6b25DbG9zZSgpCit7CisgICAgOjpT
aG93V2luZG93KG1fZnJvbnRlbmRIYW5kbGUsIFNXX0hJREUpOworICAgIGZyb250ZW5kRGlkQ2xv
c2UoKTsKKyAgICByZXR1cm4gMDsKK30KKworV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIFJl
ZlB0cjxXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRl
KFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKKyAgICBwcmVmZXJlbmNlcy0+c2V0
QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKHRydWUpOworCisjaWYgRU5BQkxFKERFVkVMT1BF
Ul9NT0RFKQorICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUp
OworICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5h
YmxlZCh0cnVlKTsKKyNlbmRpZgorCisgICAgUmVmUHRyPFdlYlBhZ2VHcm91cD4gcGFnZUdyb3Vw
ID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUoaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBh
Z2UobnVsbHB0cikpOworCisgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNv
bmZpZ3VyYXRpb246OmNyZWF0ZSgpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNz
UG9vbCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKG51bGxwdHIp
KSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLmdl
dCgpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5nZXQo
KSk7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoNjAsIDIwMCwgMTUwMCwgMTAwMCk7Cisg
ICAgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOworICAgIG1fZnJvbnRlbmRIYW5kbGUgPSA6OkNyZWF0
ZVdpbmRvd0V4KDAsIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lLCAwLCBXU19PVkVS
TEFQUEVEV0lORE9XLAorICAgICAgICByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSwgMCwgMCwgMCwgMCk7CisKKyAgICA6OlNldFByb3AobV9mcm9udGVuZEhh
bmRsZSwgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCwgcmVpbnRlcnByZXRfY2Fz
dDxIQU5ETEU+KHRoaXMpKTsKKyAgICBTaG93V2luZG93KG1fZnJvbnRlbmRIYW5kbGUsIFNXX1NI
T1cpOworCisgICAgUkVDVCByOworICAgIDo6R2V0Q2xpZW50UmVjdChtX2Zyb250ZW5kSGFuZGxl
LCAmcik7CisgICAgbV93ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKHIsIHBhZ2VDb25maWd1cmF0
aW9uLCBtX2Zyb250ZW5kSGFuZGxlKTsKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5wYWdlKCk7Cit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkg
eyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7
IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYpIHsgfQordm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvJikgeyB9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIDo6RGVzdHJveVdp
bmRvdyhtX2Zyb250ZW5kSGFuZGxlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dp
bi9XZWJWaWV3LmNwcAppbmRleCA5NjJmMzAyYzk4OGMzNDM4NzdmN2RhZDcxMTU3ODc5ZmVjY2Jm
ZDAwLi5jNDJlZDk1NTY3ZjJhNjMxMGMzNTgzNjE0MDZlN2ZhZTQ0NzRiODE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZl
bnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiUmVtb3Rl
SW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyV2luLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCiAj
aW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eVdpbi5oIgogI2luY2x1ZGUgIldlYkVkaXRDb21t
YW5kUHJveHkuaCIKQEAgLTIzNiw2ICsyMzcsMTAgQEAgV2ViVmlldzo6V2ViVmlldyhSRUNUIHJl
Y3QsIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24sIEhXTkQgcGEK
ICAgICBpZiAobV9wYWdlLT5kcmF3aW5nQXJlYSgpKQogICAgICAgICBtX3BhZ2UtPmRyYXdpbmdB
cmVhKCktPnNldFNpemUoSW50U2l6ZShyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRv
bSAtIHJlY3QudG9wKSk7CiAKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICBtX3Bh
Z2UtPnNldFVSTFNjaGVtZUhhbmRsZXJGb3JTY2hlbWUoUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xI
YW5kbGVyOjpjcmVhdGUoKm1fcGFnZSksICJpbnNwZWN0b3IiKTsKKyNlbmRpZgorCiAgICAgLy8g
RklYTUU6IEluaXRpYWxpemluZyB0aGUgdG9vbHRpcCB3aW5kb3cgaGVyZSBtYXRjaGVzIFdlYktp
dCB3aW4sIGJ1dCBzZWVtcyBsaWtlIHNvbWV0aGluZwogICAgIC8vIHdlIGNvdWxkIGRvIG9uIGRl
bWFuZCB0byBzYXZlIHJlc291cmNlcy4KICAgICBpbml0aWFsaXplVG9vbFRpcFdpbmRvdygpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW4uY21ha2UgYi9Tb3VyY2UvY21ha2Uv
T3B0aW9uc1dpbi5jbWFrZQppbmRleCBiNmMxMzg2MjMyMWFiZTk0MWNjYjQ4NjNkNTA2ZjVjYThi
NjYzOTk4Li44NmVlOWIxMmJkN2I5OTQyNDg0NTRiMGE3MDg3ZDVhYjIyNjcyM2ZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbi5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0
aW9uc1dpbi5jbWFrZQpAQCAtNjgsNyArNjgsNiBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfV0VCX0FVRElPIFBVQkxJQyBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfWFNMVCBQVUJMSUMgT04pCiAKIFdFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TTU9PVEhfU0NST0xMSU5HIFBSSVZBVEUgT0ZGKQotV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1VTRVJfTUVTU0FHRV9IQU5ETEVS
UyBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9V
U0VSU0VMRUNUX0FMTCBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9XRUJHTCBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9XRUJfQ1JZUFRPIFBSSVZBVEUgT0ZGKQpAQCAtNzcsNiArNzYsNyBAQCBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCX0NSWVBUTyBQUklWQVRF
IE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKFVTRV9TWVNURU1fTUFMTE9D
IFBSSVZBVEUgT04pCiAKIGlmICgke1dURl9QTEFURk9STV9XSU5fQ0FJUk99KQorICAgIFdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9VU0VSX01FU1NBR0VfSEFORExFUlMg
UFJJVkFURSBPTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
TEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSIFBVQkxJQyBPRkYpCiAgICAgV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xFR0FDWV9FTkNSWVBURURfTUVESUEgUFVC
TElDIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfSU5U
TCBQVUJMSUMgT04pCkBAIC05Niw2ICs5Niw3IEBAIGlmICgke1dURl9QTEFURk9STV9XSU5fQ0FJ
Uk99KQogICAgICMgRklYTUU6IEltcGxlbWVudCBwbHVnaW4gcHJvY2VzcyBvbiBNb2Rlcm4gV2Vi
S2l0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MzEzCiAgICAg
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9B
UEkgUFJJVkFURSBPRkYpCiBlbHNlICgpCisgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX1VTRVJfTUVTU0FHRV9IQU5ETEVSUyBQUklWQVRFIE9GRikKICAgICBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTEVHQUNZX0VOQ1JZUFRFRF9NRURJ
QSBQVUJMSUMgT04pCiAgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X0lOVEwgUFVCTElDIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfUFVCTElDX1NVRkZJWF9MSVNUIFBSSVZBVEUgT0ZGKQpkaWZmIC0tZ2l0IGEvU291cmNl
L2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fp
cm8uY21ha2UKaW5kZXggYTcxNmVjNmYwZWExMGZlYmUzOWIyOGJmMGM1ZGZlZDcyM2JiNjMyMS4u
OGIxYzI4MGY4NjNhYzEwZTAyNDFhNjQ3MWEwOWM5ODU5ZTcwMDZiYyAxMDA2NDQKLS0tIGEvU291
cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9u
c1dpbkNhaXJvLmNtYWtlCkBAIC0yOCw3ICsyOCw3IEBAIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxE
KFVTRV9DVVJMIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX1RFWFRVUkVfTUFQUEVS
IE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX1RFWFRVUkVfTUFQUEVSX0dMIE9OKQog
U0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX01FRElBX0ZPVU5EQVRJT04gT04pCi1TRVRfQU5E
X0VYUE9TRV9UT19CVUlMRChVU0VfSU5TUEVDVE9SX1NPQ0tFVF9TRVJWRVIgRU5BQkxFX1JFTU9U
RV9JTlNQRUNUT1IpCitTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfSU5TUEVDVE9SX1NPQ0tF
VF9TRVJWRVIgJHtFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUn0pCiAKIHNldChFTkFCTEVfR1JBUEhJ
Q1NfQ09OVEVYVF8zRCBPTikKIHNldChFTkFCTEVfV0VCS0lUIE9OKQpkaWZmIC0tZ2l0IGEvQ2hh
bmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDBkNWNmZTRhNDJiZTEzMzYwOTdiYWYxMDUyZjg3NmFh
MDA3YzAwMjMuLjM0NGZiZDIyYjdiY2MyNzVlYjJiYTUzNGU3ZjAxYWU5MzE4MGZmNDcgMTAwNjQ0
Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxOS0w
NS0xNyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CisKKyAgICAgICAg
W1dpbkNhaXJvXSBJbXBsZW1lbnQgUmVtb3RlIFdlYiBJbnNwZWN0b3IgQ2xpZW50LgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3NDM0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2Uv
T3B0aW9uc1dpbi5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJv
LmNtYWtlOgorCiAyMDE5LTA1LTA5ICBYYW4gTMOzcGV6ICA8eGFuQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW0NNYWtlXSBEZXRlY3QgU1NFMiBhdCBjb21waWxlIHRpbWUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370258</attachid>
            <date>2019-05-20 10:16:58 -0700</date>
            <delta_ts>2019-05-20 11:39:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197434-20190520101657.patch</filename>
            <type>text/plain</type>
            <size>40002</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NDg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MmQ1Y2ZlMTY0OWQ0OGFkNDEzN2U4NDM0MzJjZjEyYzkxY2Y0NTE0Li41NWIxOTJlODQzZGY5MzZl
Nzg5NTNiYWNiYWU3NTIyYjc1NzM5MmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxOS0wNS0yMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW1dpbkNhaXJvXSBJbXBsZW1lbnQgUmVtb3RlIFdlYiBJbnNwZWN0
b3IgQ2xpZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk3NDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xp
ZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNs
aWVudDo6ZGlkQWNjZXB0KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL3Nv
Y2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50Lmg6CisgICAgICAgIChJbnNwZWN0
b3I6OlJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQ6OmRpZEFjY2VwdCk6CisgICAgICAg
ICogaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmNwcDoKKyAg
ICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU2VydmVyOjpkaXNwYXRjaE1hcCk6CisK
IDIwMTktMDUtMTcgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJlLWVuYWJsZSBnZW5lcmF0ZS14Y2ZpbGVsaXN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzZmQyOGU5M2M4YmY4
NWFiN2ZkMjkzODNhOGMwMDJmMjE2OGVkNzBhLi4xMjc4NzM0YzZiNDk3YWFmYjM2ZGJjZDc3ZDA3
NDAzODI0ODE5NGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE5LTA1LTIwICBSb3Nz
IEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAgICBbV2luQ2Fpcm9d
IEltcGxlbWVudCBSZW1vdGUgV2ViIEluc3BlY3RvciBDbGllbnQuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc0MzQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHA6CisgICAgICAgICog
VUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L3dpbi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3Mvd2luL1JlbW90ZUluc3BlY3RvckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3Mvd2luL1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcldpbi5jcHA6IEFkZGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy93aW4vUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyV2luLmg6
IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlX
aW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3OjpXZWJWaWV3KToKKwogMjAxOS0wNS0xNyAgQW50b2luZSBR
dWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIHdlYnNpdGUgcG9saWN5
IHRvIGRpc2FibGUgdGhlIGxlZ2FjeSAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaCBi
ZWhhdmlvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1v
dGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5l
Y3Rpb25DbGllbnQuY3BwCmluZGV4IDU2ZjQ2Y2RlNWE0YzUwOTU4ZGUyMjRkMjAzOWFjOGE5MTEw
NjJlYjQuLjBlOTBmMThlNzJmNWQ5Y2Y5ZTQzZDFmZmZlNjg5MTcxNTdjZWU0MTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5j
cHAKQEAgLTgwLDEwICs4MCw2IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVu
dDo6ZGlkUmVjZWl2ZVdlYkluc3BlY3RvckV2ZW50KENvbm5lY3Rpb25JRCBjCiAgICAgfSk7CiB9
CiAKLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudDo6ZGlkQWNjZXB0KENvbm5l
Y3Rpb25JRCwgQ29ubmVjdGlvbklELCBTb2NrZXQ6OkRvbWFpbikKLXsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCiAKICNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9S
ZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5o
CmluZGV4IDg3M2EwNTEzNTZlMWMxOWE3YTk4MDA0MWY2ODBiNzhiMTY5ZWUzYTMuLmM2YTYyOTYy
MjIyN2E2MDU2ZGYzYzA3NmJiYWY0MjY0MjZiMzkxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0
aW9uQ2xpZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUv
c29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuaApAQCAtMzcsNyArMzcsNyBA
QCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIGNsYXNzIFJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25D
bGllbnQgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNs
aWVudD4gewogcHVibGljOgogICAgIHZvaWQgZGlkUmVjZWl2ZVdlYkluc3BlY3RvckV2ZW50KENv
bm5lY3Rpb25JRCwgVmVjdG9yPHVpbnQ4X3Q+JiYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRBY2Nl
cHQoQ29ubmVjdGlvbklEIGFjY2VwdGVkSUQsIENvbm5lY3Rpb25JRCBsaXN0ZW5lcklELCBTb2Nr
ZXQ6OkRvbWFpbik7CisgICAgdmlydHVhbCB2b2lkIGRpZEFjY2VwdChDb25uZWN0aW9uSUQgYWNj
ZXB0ZWRJRCwgQ29ubmVjdGlvbklEIGxpc3RlbmVySUQsIFNvY2tldDo6RG9tYWluKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2UoQ29ubmVjdGlvbklEKSA9IDA7CiAKICAgICBzdHJ1Y3Qg
RXZlbnQgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1v
dGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNlcnZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmNwcAppbmRl
eCA4OTM1MDg5Njk1YTUzNWFhNTJhYWM2YWViNTIyYmNjOTFiMzEyMTBlLi5kMmE1YzNhNTA2NTE5
ODY1OGRmM2IwYmQzZDlmZDBjMTg0NDA0ZjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yU2VydmVyLmNwcApAQCAtMTA5LDEyICsxMDksMTIgQEAgdm9pZCBSZW1vdGVJbnNw
ZWN0b3JTZXJ2ZXI6OmRpZENsb3NlKENvbm5lY3Rpb25JRCBpZCkKIEhhc2hNYXA8U3RyaW5nLCBS
ZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50OjpDYWxsSGFuZGxlcj4mIFJlbW90ZUluc3Bl
Y3RvclNlcnZlcjo6ZGlzcGF0Y2hNYXAoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxI
YXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+PiBkaXNwYXRjaE1hcCA9IEhhc2hNYXA8U3RyaW5n
LCBDYWxsSGFuZGxlcj4oewotICAgICAgICB7ICJTZXRUYXJnZXRMaXN0Il9zLCByZWludGVycHJl
dF9jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXRUYXJnZXRMaXN0
KSB9LAotICAgICAgICB7ICJTZXR1cEluc3BlY3RvckNsaWVudCJfcywgcmVpbnRlcnByZXRfY2Fz
dDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2V0dXBJbnNwZWN0b3JDbGll
bnQpIH0sCi0gICAgICAgIHsgIlNldHVwIl9zLCByZWludGVycHJldF9jYXN0PENhbGxIYW5kbGVy
PigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXR1cCkgfSwKLSAgICAgICAgeyAiRnJvbnRlbmRE
aWRDbG9zZSJfcywgcmVpbnRlcnByZXRfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3Rv
clNlcnZlcjo6Y2xvc2UpIH0sCi0gICAgICAgIHsgIlNlbmRNZXNzYWdlVG9Gcm9udGVuZCJfcywg
cmVpbnRlcnByZXRfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKSB9LAotICAgICAgICB7ICJTZW5kTWVzc2FnZVRvQmFja2VuZCJf
cywgcmVpbnRlcnByZXRfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6
c2VuZE1lc3NhZ2VUb0JhY2tlbmQpIH0sCisgICAgICAgIHsgIlNldFRhcmdldExpc3QiX3MsIHN0
YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXRUYXJnZXRM
aXN0KSB9LAorICAgICAgICB7ICJTZXR1cEluc3BlY3RvckNsaWVudCJfcywgc3RhdGljX2Nhc3Q8
Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNldHVwSW5zcGVjdG9yQ2xpZW50
KSB9LAorICAgICAgICB7ICJTZXR1cCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1v
dGVJbnNwZWN0b3JTZXJ2ZXI6OnNldHVwKSB9LAorICAgICAgICB7ICJGcm9udGVuZERpZENsb3Nl
Il9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6Y2xv
c2UpIH0sCisgICAgICAgIHsgIlNlbmRNZXNzYWdlVG9Gcm9udGVuZCJfcywgc3RhdGljX2Nhc3Q8
Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZCkgfSwKKyAgICAgICAgeyAiU2VuZE1lc3NhZ2VUb0JhY2tlbmQiX3MsIHN0YXRpY19jYXN0PENh
bGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZVRvQmFja2VuZCkg
fSwKICAgICB9KTsKIAogICAgIHJldHVybiBkaXNwYXRjaE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNt
YWtlCmluZGV4IGMzNTE0ZTgzYTAyNThhYjdjMjEwNzNhMDljYTgxZDZkMjA5YWIxZWQuLmIwN2Ji
NDkxNTU3MjcwZGY1YjYyM2NjZjE4YjFiNGNlZDcxMjE5YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5j
bWFrZQpAQCAtNTUsNiArNTUsOSBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS93aW4vV2Vic2l0ZURhdGFTdG9yZVdpbi5jcHAKIAogICAgIFVJ
UHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwuY3BwCisgICAgVUlQcm9jZXNzL3dpbi9SZW1vdGVJ
bnNwZWN0b3JDbGllbnQuY3BwCisgICAgVUlQcm9jZXNzL3dpbi9SZW1vdGVJbnNwZWN0b3JQcm90
b2NvbEhhbmRsZXJXaW4uY3BwCisgICAgVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eVdpbi5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1RleHRDaGVja2VyV2luLmNwcAogICAgIFVJ
UHJvY2Vzcy93aW4vV2ViQ29udGV4dE1lbnVQcm94eVdpbi5jcHAKICAgICBVSVByb2Nlc3Mvd2lu
L1dlYkluc3BlY3RvclByb3h5V2luLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCmluZGV4IDg3YjIyNGVhZjkyZGQ3NDc2Y2E2
MWZhNGQxN2QyN2E1ZmUwZTQ2ZDUuLmIyOTY3MTYzOGY1MTRkMWU2ZmYyMmU0OTNlMDg4YTU2OGRl
ODdkMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eS5jcHAKQEAgLTE3MCw3ICsxNzAsNyBAQCB2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCiAgICAgcGxhdGZvcm1DbG9zZUZy
b250ZW5kUGFnZUFuZFdpbmRvdygpOwogfQogCi0jaWYgIUVOQUJMRShSRU1PVEVfSU5TUEVDVE9S
KSB8fCAoIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykpCisjaWYgIUVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKSB8fCAoIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBM
QVRGT1JNKFdJTl9DQUlSTykpCiBXZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYklu
c3BlY3RvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0
b3JQcm94eS5oCmluZGV4IDBmZDBlODNhNWI1NjA0ZDdkNmVjNWY5MTY3NTIwZmExOTMwZGRjYWEu
LjVlYmJiNjhkNGM2ZGFhMzNjMjg1OGJkN2FlMDk1MzEwNGFiYzE0ZWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaApAQCAtNDgsNiAr
NDgsNyBAQCBjbGFzcyBDZXJ0aWZpY2F0ZUluZm87CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xh
c3MgV2ViUGFnZVByb3h5OworY2xhc3MgV2ViVmlldzsKIAogY2xhc3MgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHlDbGllbnQgewogcHVibGljOgpAQCAtODgsNiArODksMTMgQEAgcHVibGljOgogICAg
IHZvaWQgdXBkYXRlV2luZG93VGl0bGUoY29uc3QgQ1N0cmluZyYpOwogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShXSU5fQ0FJUk8pCisgICAgTFJFU1VMVCBzaXplQ2hhbmdlKCk7CisgICAgTFJFU1VM
VCBvbkNsb3NlKCk7CisKKyAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQs
IFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKKyNlbmRpZgorCiAgICAgdm9pZCBjbG9zZUZyb21DcmFz
aCgpOwogCiBwcml2YXRlOgpAQCAtMTM5LDYgKzE0NywxMCBAQCBwcml2YXRlOgogICAgIEd0a1dp
ZGdldCogbV93ZWJWaWV3IHsgbnVsbHB0ciB9OwogICAgIEd0a1dpZGdldCogbV93aW5kb3cgeyBu
dWxscHRyIH07CiAjZW5kaWYKKyNpZiBQTEFURk9STShXSU5fQ0FJUk8pCisgICAgSFdORCBtX2Zy
b250ZW5kSGFuZGxlOworICAgIFJlZlB0cjxXZWJWaWV3PiBtX3dlYlZpZXc7CisjZW5kaWYKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvd2luL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy93aW4vUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYjJhYzg1Njg1
OWFkYTQ0ODI0ZjIzMDdjN2U0NTA3Y2E3Yzc0NmY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvd2luL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKQEAgLTAsMCAr
MSwyNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlbW90ZUluc3BlY3RvckNsaWVudC5oIgorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1Ip
CisKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVJbnNwZWN0
b3JQcm94eSBmaW5hbCA6IHB1YmxpYyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQoKTsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbnNwZWN0
b3JQcm94eShSZW1vdGVJbnNwZWN0b3JDbGllbnQmIGluc3BlY3RvckNsaWVudCwgQ29ubmVjdGlv
bklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQgdGFyZ2V0SUQpCisgICAgICAgIDogbV9wcm94eShS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlKCkpCisgICAgICAgICwgbV9pbnNwZWN0b3JD
bGllbnQoaW5zcGVjdG9yQ2xpZW50KQorICAgICAgICAsIG1fY29ubmVjdGlvbklEKGNvbm5lY3Rp
b25JRCkKKyAgICAgICAgLCBtX3RhcmdldElEKHRhcmdldElEKQorICAgIHsKKyAgICAgICAgbV9w
cm94eS0+c2V0Q2xpZW50KHRoaXMpOworICAgIH0KKworICAgIH5SZW1vdGVJbnNwZWN0b3JQcm94
eSgpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQobnVsbHB0cik7CisgICAgICAg
IG1fcHJveHktPmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQoKQorICAgIHsK
KyAgICAgICAgbV9wcm94eS0+bG9hZCgid2ViIiwgIiIpOworICAgIH0KKworICAgIHZvaWQgc2hv
dygpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zaG93KCk7CisgICAgfQorCisgICAgdm9pZCBz
ZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgIHsKKyAgICAg
ICAgbV9wcm94eS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpOworICAgIH0KKworICAg
IHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuc2VuZE1lc3NhZ2VUb0JhY2tlbmQo
bV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQsIG1lc3NhZ2UpOworICAgIH0KKworICAgIHZvaWQg
Y2xvc2VGcm9tRnJvbnRlbmQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9pbnNwZWN0b3JD
bGllbnQuY2xvc2VGcm9tRnJvbnRlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+IG1fcHJveHk7
CisgICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKKyAgICBDb25u
ZWN0aW9uSUQgbV9jb25uZWN0aW9uSUQ7CisgICAgVGFyZ2V0SUQgbV90YXJnZXRJRDsKK307CisK
K1JlbW90ZUluc3BlY3RvckNsaWVudDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50KGNvbnN0IGNoYXIq
IGFkZHJlc3MsIHVuc2lnbmVkIHBvcnQsIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJiBvYnNlcnZl
cikKKyAgICA6IG1fb2JzZXJ2ZXIob2JzZXJ2ZXIpCit7CisgICAgbV9zb2NrZXQgPSBJbnNwZWN0
b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjpjcmVhdGUodGhpcywgIlJlbW90ZUlu
c3BlY3RvckNsaWVudCIpOworCisgICAgbV9jb25uZWN0aW9uSUQgPSBtX3NvY2tldC0+Y29ubmVj
dEluZXQoYWRkcmVzcywgcG9ydCk7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb25JRCkgeworICAgICAg
ICBMT0dfRVJST1IoIkluc3BlY3RvciBjbGllbnQgY291bGQgbm90IGNvbm5lY3QgdG8gJXM6JWQi
LCBhZGRyZXNzLCBwb3J0KTsKKyAgICAgICAgbV9zb2NrZXQgPSBudWxscHRyOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgc3RhcnRJbml0aWFsQ29tbXVuaWNhdGlvbigpOworfQorCitS
ZW1vdGVJbnNwZWN0b3JDbGllbnQ6On5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKQoreworfQorCit2
b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZFdlYkluc3BlY3RvckV2ZW50KGNvbnN0IFN0
cmluZyYgZXZlbnQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQo
bV9jb25uZWN0aW9uSUQuaGFzVmFsdWUoKSk7CisgICAgYXV0byBtZXNzYWdlID0gZXZlbnQudXRm
OCgpOworICAgIG1fc29ja2V0LT5zZW5kKG1fY29ubmVjdGlvbklELnZhbHVlKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1lc3NhZ2UuZGF0YSgpKSwgbWVzc2FnZS5sZW5ndGgo
KSk7Cit9CisKK0hhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvckNvbm5l
Y3Rpb25DbGllbnQ6OkNhbGxIYW5kbGVyPiYgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpkaXNwYXRj
aE1hcCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBDYWxs
SGFuZGxlcj4+IGRpc3BhdGNoTWFwID0gSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPih7Cisg
ICAgICAgIHsgIlNldFRhcmdldExpc3QiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVt
b3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KSB9LAorICAgICAgICB7ICJTZW5kTWVz
c2FnZVRvRnJvbnRlbmQiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVj
dG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpIH0sCisgICAgfSk7CisKKyAgICByZXR1
cm4gZGlzcGF0Y2hNYXA7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzdGFydElu
aXRpYWxDb21tdW5pY2F0aW9uKCkKK3sKKyAgICBhdXRvIGV2ZW50ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBldmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNldHVwSW5zcGVjdG9y
Q2xpZW50Il9zKTsKKyAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoZXZlbnQtPnRvSlNPTlN0cmlu
ZygpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNvbm5lY3Rpb25DbG9zZWQo
KQoreworICAgIG1fdGFyZ2V0cy5jbGVhcigpOworICAgIG1faW5zcGVjdG9yUHJveHlNYXAuY2xl
YXIoKTsKKyAgICBtX29ic2VydmVyLmNvbm5lY3Rpb25DbG9zZWQoKnRoaXMpOworfQorCit2b2lk
IFJlbW90ZUluc3BlY3RvckNsaWVudDo6ZGlkQ2xvc2UoQ29ubmVjdGlvbklEKQoreworfQorCit2
b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6aW5zcGVjdChDb25uZWN0aW9uSUQgY29ubmVjdGlv
bklELCBUYXJnZXRJRCB0YXJnZXRJRCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1faW5zcGVj
dG9yUHJveHlNYXAuZW5zdXJlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQp
LCBbdGhpcywgY29ubmVjdGlvbklELCB0YXJnZXRJRF0geworICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxSZW1vdGVJbnNwZWN0b3JQcm94eT4oKnRoaXMsIGNvbm5lY3Rpb25JRCwgdGFy
Z2V0SUQpOworICAgIH0pOworCisgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zaG93KCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBhdXRvIHNldHVwRXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIHNldHVwRXZlbnQtPnNldFN0cmluZygiZXZlbnQiX3MsICJTZXR1cCJfcyk7CisgICAgc2V0
dXBFdmVudC0+c2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zLCBjb25uZWN0aW9uSUQpOworICAg
IHNldHVwRXZlbnQtPnNldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7CisgICAgc2Vu
ZFdlYkluc3BlY3RvckV2ZW50KHNldHVwRXZlbnQtPnRvSlNPTlN0cmluZygpKTsKKworICAgIGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmxvYWQoKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0
b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQs
IFRhcmdldElEIHRhcmdldElELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgYXV0byBi
YWNrZW5kRXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGJhY2tlbmRFdmVudC0+
c2V0U3RyaW5nKCJldmVudCJfcywgIlNlbmRNZXNzYWdlVG9CYWNrZW5kIl9zKTsKKyAgICBiYWNr
ZW5kRXZlbnQtPnNldEludGVnZXIoImNvbm5lY3Rpb25JRCJfcywgY29ubmVjdGlvbklEKTsKKyAg
ICBiYWNrZW5kRXZlbnQtPnNldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7CisgICAg
YmFja2VuZEV2ZW50LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIG1lc3NhZ2UpOworICAgIHNlbmRX
ZWJJbnNwZWN0b3JFdmVudChiYWNrZW5kRXZlbnQtPnRvSlNPTlN0cmluZygpKTsKK30KKwordm9p
ZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNsb3NlRnJvbUZyb250ZW5kKENvbm5lY3Rpb25JRCBj
b25uZWN0aW9uSUQsIFRhcmdldElEIHRhcmdldElEKQoreworICAgIGF1dG8gY2xvc2VkRXZlbnQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGNsb3NlZEV2ZW50LT5zZXRTdHJpbmcoImV2
ZW50Il9zLCAiRnJvbnRlbmREaWRDbG9zZSJfcyk7CisgICAgY2xvc2VkRXZlbnQtPnNldEludGVn
ZXIoImNvbm5lY3Rpb25JRCJfcywgY29ubmVjdGlvbklEKTsKKyAgICBjbG9zZWRFdmVudC0+c2V0
SW50ZWdlcigidGFyZ2V0SUQiX3MsIHRhcmdldElEKTsKKyAgICBzZW5kV2ViSW5zcGVjdG9yRXZl
bnQoY2xvc2VkRXZlbnQtPnRvSlNPTlN0cmluZygpKTsKKworICAgIG1faW5zcGVjdG9yUHJveHlN
YXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKK30KKwor
dm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmIGV2
ZW50KQoreworICAgIGlmICghZXZlbnQuY29ubmVjdGlvbklEIHx8ICFldmVudC5tZXNzYWdlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsK
KyAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oZXZlbnQubWVzc2FnZS52YWx1ZSgpLCBt
ZXNzYWdlVmFsdWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IG1lc3NhZ2VBcnJheTsKKyAgICBpZiAoIW1lc3NhZ2VWYWx1ZS0+YXNBcnJheShtZXNzYWdlQXJy
YXkpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8VGFyZ2V0PiB0YXJnZXRMaXN0Owor
ICAgIGZvciAoYXV0byYgaXRlbVZhbHVlIDogKm1lc3NhZ2VBcnJheSkgeworICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBpdGVtT2JqZWN0OworICAgICAgICBpZiAoIWl0ZW1WYWx1ZS0+YXNP
YmplY3QoaXRlbU9iamVjdCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBUYXJn
ZXQgdGFyZ2V0OworICAgICAgICBpZiAoIWl0ZW1PYmplY3QtPmdldEludGVnZXIoInRhcmdldElE
Il9zLCB0YXJnZXQuaWQpCisgICAgICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJu
YW1lIl9zLCB0YXJnZXQubmFtZSkKKyAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJp
bmcoInVybCJfcywgdGFyZ2V0LnVybCkKKyAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRT
dHJpbmcoInR5cGUiX3MsIHRhcmdldC50eXBlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIHRhcmdldExpc3QuYXBwZW5kKFdURk1vdmUodGFyZ2V0KSk7CisgICAgfQorCisgICAg
YXV0byBjb25uZWN0aW9uSUQgPSBldmVudC5jb25uZWN0aW9uSUQudmFsdWUoKTsKKworICAgIC8v
IEZpbmQgY2xvc2VkIHRhcmdldHMgdG8gcmVtb3ZlIHRoZW0uCisgICAgVmVjdG9yPFRhcmdldElE
LCA0PiB0YXJnZXRzVG9SZW1vdmU7CisgICAgZm9yIChhdXRvJiBwYWlyIDogbV9pbnNwZWN0b3JQ
cm94eU1hcC5rZXlzKCkpIHsKKyAgICAgICAgaWYgKHBhaXIuZmlyc3QgIT0gY29ubmVjdGlvbklE
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwor
ICAgICAgICBmb3IgKGF1dG8mIHRhcmdldCA6IHRhcmdldExpc3QpIHsKKyAgICAgICAgICAgIGlm
ICh0YXJnZXQuaWQgPT0gcGFpci5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgdGFyZ2V0c1RvUmVtb3ZlLmFwcGVuZChw
YWlyLnNlY29uZCk7CisgICAgfQorICAgIGZvciAoYXV0byYgdGFyZ2V0SUQgOiB0YXJnZXRzVG9S
ZW1vdmUpCisgICAgICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWly
KGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKKworICAgIG1fdGFyZ2V0cy5zZXQoY29ubmVjdGlv
bklELCBXVEZNb3ZlKHRhcmdldExpc3QpKTsKKyAgICBtX29ic2VydmVyLnRhcmdldExpc3RDaGFu
Z2VkKCp0aGlzKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChjb25zdCBFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKCFldmVudC5jb25uZWN0
aW9uSUQgfHwgIWV2ZW50LnRhcmdldElEIHx8ICFldmVudC5tZXNzYWdlKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIHByb3h5ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoc3RkOjptYWtl
X3BhaXIoZXZlbnQuY29ubmVjdGlvbklELnZhbHVlKCksIGV2ZW50LnRhcmdldElELnZhbHVlKCkp
KTsKKyAgICBpZiAoIXByb3h5KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChl
dmVudC5tZXNzYWdlLnZhbHVlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvd2luL1JlbW90ZUluc3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvd2luL1JlbW90ZUluc3BlY3RvckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1YjM1ODRk
M2E2ZjY0ZGZkY2FmYmI4ZDBiMzk4N2JlODk4ZDVlZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTAsMCAr
MSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlQ29udHJvbGxh
YmxlVGFyZ2V0Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVjdG9yQ29u
bmVjdGlvbkNsaWVudC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUluc3BlY3Rv
clNvY2tldEVuZHBvaW50Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBSZW1vdGVJ
bnNwZWN0b3JQcm94eTsKKworY2xhc3MgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIgeworcHVibGlj
OgorICAgIHZpcnR1YWwgflJlbW90ZUluc3BlY3Rvck9ic2VydmVyKCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIHRhcmdldExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgY29ubmVjdGlvbkNsb3NlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSA9
IDA7Cit9OworCit1c2luZyBDb25uZWN0aW9uSUQgPSBJbnNwZWN0b3I6OkNvbm5lY3Rpb25JRDsK
K3VzaW5nIFRhcmdldElEID0gSW5zcGVjdG9yOjpUYXJnZXRJRDsKKworY2xhc3MgUmVtb3RlSW5z
cGVjdG9yQ2xpZW50IDogcHVibGljIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlv
bkNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQoKTsKK3B1YmxpYzoKKyAgICBS
ZW1vdGVJbnNwZWN0b3JDbGllbnQoY29uc3QgY2hhciogYWRkcmVzcywgdW5zaWduZWQgcG9ydCwg
UmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImKTsKKyAgICB+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCk7
CisKKyAgICBzdHJ1Y3QgVGFyZ2V0IHsKKyAgICAgICAgVGFyZ2V0SUQgaWQ7CisgICAgICAgIFN0
cmluZyB0eXBlOworICAgICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgU3RyaW5nIHVybDsKKyAg
ICB9OworCisgICAgY29uc3QgSGFzaE1hcDxDb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+PiYg
dGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0czsgfQorCisgICAgdm9pZCBpbnNwZWN0
KENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQo
Q29ubmVjdGlvbklELCBUYXJnZXRJRCwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBjbG9zZUZy
b21Gcm9udGVuZChDb25uZWN0aW9uSUQsIFRhcmdldElEKTsKKworcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8UmVtb3RlSW5zcGVjdG9yQ2xpZW50PjsKKworICAgIHZv
aWQgc3RhcnRJbml0aWFsQ29tbXVuaWNhdGlvbigpOworICAgIHZvaWQgY29ubmVjdGlvbkNsb3Nl
ZCgpOworCisgICAgdm9pZCBzZXRUYXJnZXRMaXN0KGNvbnN0IEV2ZW50Jik7CisgICAgdm9pZCBz
ZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgRXZlbnQmKTsKKyAgICB2b2lkIHNldEJhY2tlbmRD
b21tYW5kcyhjb25zdCBFdmVudCYpOworCisgICAgdm9pZCBkaWRDbG9zZShDb25uZWN0aW9uSUQp
IG92ZXJyaWRlOworICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4mIGRpc3BhdGNoTWFw
KCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNlbmRXZWJJbnNwZWN0b3JFdmVudChjb25zdCBTdHJp
bmcmKTsKKworICAgIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJiBtX29ic2VydmVyOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50PiBt
X3NvY2tldDsKKyAgICBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IG1fY29ubmVjdGlvbklEOworICAg
IEhhc2hNYXA8Q29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0Pj4gbV90YXJnZXRzOworICAgIEhh
c2hNYXA8c3RkOjpwYWlyPENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQ+LCBzdGQ6OnVuaXF1ZV9wdHI8
UmVtb3RlSW5zcGVjdG9yUHJveHk+PiBtX2luc3BlY3RvclByb3h5TWFwOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVJbnNwZWN0b3JQcm90
b2NvbEhhbmRsZXJXaW4uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1JlbW90ZUlu
c3BlY3RvclByb3RvY29sSGFuZGxlcldpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ZkZDJmMTY2ZDg1YTYx
NmQzY2M0YTEzNDI3NDdlY2ZiZTYyYzVjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXJXaW4uY3BwCkBA
IC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3Rp
dmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXJXaW4uaCIKKworI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgorI2luY2x1
ZGUgIkFQSVVzZXJDb250ZW50V29ybGQuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNp
bmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJTY3JpcHRNZXNzYWdlSGFuZGxl
ci5oIgorI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIFNjcmlwdE1lc3NhZ2VDbGll
bnQgZmluYWwgOiBwdWJsaWMgV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI6OkNsaWVudCB7CitwdWJs
aWM6CisgICAgU2NyaXB0TWVzc2FnZUNsaWVudChSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRs
ZXImIGluc3BlY3RvclByb3RvY29sSGFuZGxlcikKKyAgICAgICAgOiBtX2luc3BlY3RvclByb3Rv
Y29sSGFuZGxlcihpbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIpIHsgfQorCisgICAgflNjcmlwdE1l
c3NhZ2VDbGllbnQoKSB7IH0KKworICAgIHZvaWQgZGlkUG9zdE1lc3NhZ2UoV2ViUGFnZVByb3h5
JiBwYWdlLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZh
bHVlJiBzZXJpYWxpemVkU2NyaXB0VmFsdWUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRv
IHRva2VucyA9IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS50b1N0cmluZygpLnNwbGl0KCI6Iik7Cisg
ICAgICAgIGlmICh0b2tlbnMuc2l6ZSgpICE9IDIpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgVVJMIHJlcXVlc3RVUkwgeyB7IH0sIHBhZ2UucGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07
CisgICAgICAgIG1faW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmluc3BlY3QocmVxdWVzdFVSTC5o
b3N0QW5kUG9ydCgpLCB0b2tlbnNbMF0udG9VSW50U3RyaWN0KCksIHRva2Vuc1sxXS50b1VJbnRT
dHJpY3QoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlbW90ZUluc3BlY3RvclByb3RvY29s
SGFuZGxlciYgbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI7Cit9OworCit2b2lkIFJlbW90ZUlu
c3BlY3RvclByb3RvY29sSGFuZGxlcjo6aW5zcGVjdChjb25zdCBTdHJpbmcmIGhvc3RBbmRQb3J0
LCBDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCkKK3sKKyAgICBp
ZiAoYXV0byogY2xpZW50ID0gbV9pbnNwZWN0b3JDbGllbnRzLmdldChob3N0QW5kUG9ydCkpCisg
ICAgICAgIGNsaWVudC0+aW5zcGVjdChjb25uZWN0aW9uSUQsIHRhcmdldElEKTsKK30KKwordm9p
ZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6OnRhcmdldExpc3RDaGFuZ2VkKFJlbW90
ZUluc3BlY3RvckNsaWVudCYpCit7CisgICAgbV9wYWdlLnJlbG9hZCh7IH0pOworfQorCit2b2lk
IFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6cGxhdGZvcm1TdGFydFRhc2soV2ViUGFn
ZVByb3h5JiBwYWdlUHJveHksIFdlYlVSTFNjaGVtZVRhc2smIHRhc2spCit7CisgICAgYXV0byYg
cmVxdWVzdFVSTCA9IHRhc2sucmVxdWVzdCgpLnVybCgpOworICAgIGlmICghcmVxdWVzdFVSTC5w
b3J0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGNsaWVudCA9IG1faW5zcGVjdG9y
Q2xpZW50cy5lbnN1cmUocmVxdWVzdFVSTC5ob3N0QW5kUG9ydCgpLCBbdGhpcywgJnJlcXVlc3RV
UkxdIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UmVtb3RlSW5zcGVjdG9yQ2xp
ZW50PihyZXF1ZXN0VVJMLmhvc3QoKS51dGY4KCkuZGF0YSgpLCByZXF1ZXN0VVJMLnBvcnQoKS52
YWx1ZSgpLCAqdGhpcyk7CisgICAgfSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworCisgICAgLy8g
U2V0dXAgdGFyZ2V0IHBvc3RNZXNzYWdlIGxpc3RlbmVyCisgICAgYXV0byBoYW5kbGVyID0gV2Vi
U2NyaXB0TWVzc2FnZUhhbmRsZXI6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNjcmlwdE1lc3Nh
Z2VDbGllbnQ+KCp0aGlzKSwgImluc3BlY3RvciIsIEFQSTo6VXNlckNvbnRlbnRXb3JsZDo6bm9y
bWFsV29ybGQoKSk7CisgICAgcGFnZVByb3h5LnBhZ2VHcm91cCgpLnVzZXJDb250ZW50Q29udHJv
bGxlcigpLmFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcihoYW5kbGVyLmdldCgpKTsKKworICAg
IFN0cmluZ0J1aWxkZXIgaHRtbEJ1aWxkZXI7CisgICAgaHRtbEJ1aWxkZXIuYXBwZW5kKAorICAg
ICAgICAiPGh0bWw+PGhlYWQ+PHRpdGxlPlJlbW90ZSBJbnNwZWN0b3I8L3RpdGxlPiIKKyAgICAg
ICAgIjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1s
OyBjaGFyc2V0PXV0Zi04XCIgLz4iCisgICAgICAgICI8c3R5bGU+IgorICAgICAgICAiICBoMSB7
IGNvbG9yOiAjYmFiZGI2OyB0ZXh0LXNoYWRvdzogMCAxcHggMCB3aGl0ZTsgbWFyZ2luLWJvdHRv
bTogMDsgfSIKKyAgICAgICAgIiAgaHRtbCB7IGZvbnQtZmFtaWx5OiAtd2Via2l0LXN5c3RlbS1m
b250OyBmb250LXNpemU6IDExcHQ7IGNvbG9yOiAjMmUzNDM2OyBwYWRkaW5nOiAyMHB4IDIwcHgg
MCAyMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmNmY0OyAiCisgICAgICAgICIgICAgICAgICBi
YWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQg
Ym90dG9tLCBjb2xvci1zdG9wKDAsICNlZWVlZWMpLCBjb2xvci1zdG9wKDEsICNmNmY2ZjQpKTsi
CisgICAgICAgICIgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgNWVtOyBiYWNrZ3JvdW5k
LXJlcGVhdDogbm8tcmVwZWF0OyB9IgorICAgICAgICAiICB0YWJsZSB7IHdpZHRoOiAxMDAlOyBi
b3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB9IgorICAgICAgICAiICB0YWJsZSwgdGQgeyBib3Jk
ZXI6IDFweCBzb2xpZCAjZDNkN2NmOyBib3JkZXItbGVmdDogbm9uZTsgYm9yZGVyLXJpZ2h0OiBu
b25lOyB9IgorICAgICAgICAiICBwIHsgbWFyZ2luLWJvdHRvbTogMzBweDsgfSIKKyAgICAgICAg
IiAgdGQgeyBwYWRkaW5nOiAxNXB4OyB9IgorICAgICAgICAiICB0ZC5kYXRhIHsgd2lkdGg6IDIw
MHB4OyB9IgorICAgICAgICAiICAudGFyZ2V0bmFtZSB7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Igor
ICAgICAgICAiICAudGFyZ2V0dXJsIHsgY29sb3I6ICNiYWJkYjY7IH0iCisgICAgICAgICIgIHRk
LmlucHV0IHsgd2lkdGg6IDY0cHg7IH0iCisgICAgICAgICIgIGlucHV0IHsgd2lkdGg6IDEwMCU7
IHBhZGRpbmc6IDhweDsgfSIKKyAgICAgICAgIjwvc3R5bGU+IgorICAgICAgICAiPC9oZWFkPjxi
b2R5PjxoMT5JbnNwZWN0YWJsZSB0YXJnZXRzPC9oMT4iKTsKKworICAgIGlmIChjbGllbnQtPnRh
cmdldHMoKS5pc0VtcHR5KCkpCisgICAgICAgIGh0bWxCdWlsZGVyLmFwcGVuZCgiPHA+Tm8gdGFy
Z2V0cyBmb3VuZDwvcD4iKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaHRtbEJ1aWxkZXIuYXBwZW5k
KCI8dGFibGU+Iik7CisgICAgICAgIGZvciAoYXV0byYgY29ubmVjdGlvbklEIDogY2xpZW50LT50
YXJnZXRzKCkua2V5cygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHRhcmdldCA6IGNsaWVu
dC0+dGFyZ2V0cygpLmdldChjb25uZWN0aW9uSUQpKSB7CisgICAgICAgICAgICAgICAgaHRtbEJ1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICI8dGJvZHk+PHRy
PiIKKyAgICAgICAgICAgICAgICAgICAgIjx0ZCBjbGFzcz1cImRhdGFcIj48ZGl2IGNsYXNzPVwi
dGFyZ2V0bmFtZVwiPiIsIHRhcmdldC5uYW1lLCAiPC9kaXY+PGRpdiBjbGFzcz1cInRhcmdldHVy
bFwiPiIsIHRhcmdldC51cmwsICI8L2Rpdj48L3RkPiIKKyAgICAgICAgICAgICAgICAgICAgIjx0
ZCBjbGFzcz1cImlucHV0XCI+PGlucHV0IHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkluc3BlY3Rc
IiBvbmNsaWNrPVwid2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaW5zcGVjdG9yLnBvc3RN
ZXNzYWdlKCciLCBjb25uZWN0aW9uSUQsICI6IiwgdGFyZ2V0LmlkLCAiJyk7XCI+PC90ZD4iCisg
ICAgICAgICAgICAgICAgICAgICI8L3RyPjwvdGJvZHk+IgorICAgICAgICAgICAgICAgICkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGh0bWxCdWlsZGVyLmFwcGVuZCgiPC90
YWJsZT4iKTsKKyAgICB9CisKKyAgICBodG1sQnVpbGRlci5hcHBlbmQoIjwvYm9keT48L2h0bWw+
Iik7CisKKyAgICBhdXRvIGh0bWwgPSBodG1sQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKKyAg
ICBwYWdlUHJveHkubG9hZERhdGEoeyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPiho
dG1sLmRhdGEoKSksIGh0bWwubGVuZ3RoKCkgfSwgInRleHQvaHRtbCJfcywgIlVURi04Il9zLCBy
ZXF1ZXN0VVJMKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3dpbi9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXJXaW4uaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3dpbi9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXJXaW4uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lMGFjMzRlMmQzOWQ2NjNhNGU0YmVhYmU4Y2IyNjEwMmYwNmFiMTFhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1JlbW90ZUluc3BlY3RvclByb3Rv
Y29sSGFuZGxlcldpbi5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIlJlbW90
ZUluc3BlY3RvckNsaWVudC5oIgorI2luY2x1ZGUgIldlYlVSTFNjaGVtZUhhbmRsZXIuaCIKKwor
bmFtZXNwYWNlIFdURiB7CitjbGFzcyBVUkw7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBXZWJVUkxTY2hlbWVUYXNrOworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhh
bmRsZXIgZmluYWwgOiBwdWJsaWMgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIsIHB1YmxpYyBXZWJV
UkxTY2hlbWVIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbW90ZUluc3BlY3Rv
clByb3RvY29sSGFuZGxlcj4gY3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSkgeyByZXR1cm4gYWRv
cHRSZWYoKm5ldyBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIocGFnZSkpOyB9CisKKyAg
ICB2b2lkIGluc3BlY3QoY29uc3QgU3RyaW5nJiwgQ29ubmVjdGlvbklELCBUYXJnZXRJRCk7CisK
K3ByaXZhdGU6CisgICAgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyKFdlYlBhZ2VQcm94
eSYgcGFnZSkKKyAgICAgICAgOiBtX3BhZ2UocGFnZSkgeyB9CisKKyAgICAvLyBSZW1vdGVJbnNw
ZWN0b3JPYnNlcnZlcgorICAgIHZvaWQgdGFyZ2V0TGlzdENoYW5nZWQoUmVtb3RlSW5zcGVjdG9y
Q2xpZW50JikgZmluYWw7CisgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKFJlbW90ZUluc3BlY3Rv
ckNsaWVudCYpIGZpbmFsIHsgfQorCisgICAgLy8gV2ViVVJMU2NoZW1lSGFuZGxlcgorICAgIHZv
aWQgcGxhdGZvcm1TdGFydFRhc2soV2ViUGFnZVByb3h5JiwgV2ViVVJMU2NoZW1lVGFzayYpIGZp
bmFsOworICAgIHZvaWQgcGxhdGZvcm1TdG9wVGFzayhXZWJQYWdlUHJveHkmLCBXZWJVUkxTY2hl
bWVUYXNrJikgZmluYWwgeyB9CisgICAgdm9pZCBwbGF0Zm9ybVRhc2tDb21wbGV0ZWQoV2ViVVJM
U2NoZW1lVGFzayYpIGZpbmFsIHsgfQorCisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVJbnNwZWN0b3JDbGllbnQ+PiBtX2luc3BlY3RvckNsaWVudHM7CisgICAgV2Vi
UGFnZVByb3h5JiBtX3BhZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGRhMWU1Mzg3NDE2YmIwYTgyMjljODcwMzVjODg2NDIzN2FhNWFlOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eVdpbi5jcHAKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCisKKyNpZiBFTkFC
TEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgi
CisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAu
aCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMg
TFBDVFNUUiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wID0gVEVYVCgiUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHlQb2ludGVyIik7Citjb25zdCBMUENXU1RSIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5Q2xhc3NOYW1lID0gTCJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzIjsKKwor
TFJFU1VMVCBDQUxMQkFDSyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6V25kUHJvYyhIV05EIGh3
bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5KiBjbGllbnQgPSByZWludGVycHJldF9jYXN0PFJlbW90ZVdlYklu
c3BlY3RvclByb3h5Kj4oOjpHZXRQcm9wKGh3bmQsIFJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9p
bnRlclByb3ApKTsKKworICAgIHN3aXRjaCAobXNnKSB7CisgICAgY2FzZSBXTV9TSVpFOgorICAg
ICAgICByZXR1cm4gY2xpZW50LT5zaXplQ2hhbmdlKCk7CisgICAgY2FzZSBXTV9DTE9TRToKKyAg
ICAgICAgcmV0dXJuIGNsaWVudC0+b25DbG9zZSgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNnLCB3UGFy
YW0sIGxQYXJhbSk7Cit9CisKK3N0YXRpYyBBVE9NIHJlZ2lzdGVyV2luZG93Q2xhc3MoKQorewor
ICAgIHN0YXRpYyBib29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKKyAgICBp
ZiAoaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBXTkRDTEFTU0VYIHdjZXg7CisgICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7
CisgICAgd2NleC5zdHlsZSAgICAgICAgICA9IDA7CisgICAgd2NleC5scGZuV25kUHJvYyAgICA9
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpXbmRQcm9jOworICAgIHdjZXguY2JDbHNFeHRyYSAg
ICAgPSAwOworICAgIHdjZXguY2JXbmRFeHRyYSAgICAgPSAwOworICAgIHdjZXguaEluc3RhbmNl
ICAgICAgPSAwOworICAgIHdjZXguaEljb24gICAgICAgICAgPSAwOworICAgIHdjZXguaEN1cnNv
ciAgICAgICAgPSBMb2FkQ3Vyc29yKDAsIElEQ19BUlJPVyk7CisgICAgd2NleC5oYnJCYWNrZ3Jv
dW5kICA9IDA7CisgICAgd2NleC5scHN6TWVudU5hbWUgICA9IDA7CisgICAgd2NleC5scHN6Q2xh
c3NOYW1lICA9IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lOworICAgIHdjZXguaElj
b25TbSAgICAgICAgPSAwOworCisgICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IHRydWU7
CisgICAgcmV0dXJuIDo6UmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKK30KKworTFJFU1VMVCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6c2l6ZUNoYW5nZSgpCit7CisgICAgaWYgKCFtX3dlYlZpZXcp
CisgICAgICAgIHJldHVybiAwOworCisgICAgUkVDVCByZWN0OworICAgIDo6R2V0Q2xpZW50UmVj
dChtX2Zyb250ZW5kSGFuZGxlLCAmcmVjdCk7CisgICAgOjpTZXRXaW5kb3dQb3MobV93ZWJWaWV3
LT53aW5kb3coKSwgMCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAtIHJlY3QubGVm
dCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKKyAgICByZXR1cm4gMDsK
K30KKworTFJFU1VMVCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6b25DbG9zZSgpCit7CisgICAg
OjpTaG93V2luZG93KG1fZnJvbnRlbmRIYW5kbGUsIFNXX0hJREUpOworICAgIGZyb250ZW5kRGlk
Q2xvc2UoKTsKKyAgICByZXR1cm4gMDsKK30KKworV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAg
IFJlZlB0cjxXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3Jl
YXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKKyAgICBwcmVmZXJlbmNlcy0+
c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKHRydWUpOworCisjaWYgRU5BQkxFKERFVkVM
T1BFUl9NT0RFKQorICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRy
dWUpOworICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xl
RW5hYmxlZCh0cnVlKTsKKyNlbmRpZgorCisgICAgUmVmUHRyPFdlYlBhZ2VHcm91cD4gcGFnZUdy
b3VwID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUoaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZv
clBhZ2UobnVsbHB0cikpOworCisgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6UGFn
ZUNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcm9j
ZXNzUG9vbCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKG51bGxw
dHIpKSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2Vz
LmdldCgpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5n
ZXQoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoNjAsIDIwMCwgMTUwMCwgMTAwMCk7
CisgICAgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOworICAgIG1fZnJvbnRlbmRIYW5kbGUgPSA6OkNy
ZWF0ZVdpbmRvd0V4KDAsIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lLCAwLCBXU19P
VkVSTEFQUEVEV0lORE9XLAorICAgICAgICByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgo
KSwgcmVjdC5oZWlnaHQoKSwgMCwgMCwgMCwgMCk7CisKKyAgICA6OlNldFByb3AobV9mcm9udGVu
ZEhhbmRsZSwgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCwgcmVpbnRlcnByZXRf
Y2FzdDxIQU5ETEU+KHRoaXMpKTsKKyAgICBTaG93V2luZG93KG1fZnJvbnRlbmRIYW5kbGUsIFNX
X1NIT1cpOworCisgICAgUkVDVCByOworICAgIDo6R2V0Q2xpZW50UmVjdChtX2Zyb250ZW5kSGFu
ZGxlLCAmcik7CisgICAgbV93ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKHIsIHBhZ2VDb25maWd1
cmF0aW9uLCBtX2Zyb250ZW5kSGFuZGxlKTsKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5wYWdlKCk7
Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250
KCkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkgeyB9Cit2b2lkIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
KSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYpIHsgfQordm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvJikgeyB9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIDo6RGVzdHJv
eVdpbmRvdyhtX2Zyb250ZW5kSGFuZGxlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3dpbi9XZWJWaWV3LmNwcAppbmRleCA5NjJmMzAyYzk4OGMzNDM4NzdmN2RhZDcxMTU3ODc5ZmVj
Y2JmZDAwLi5jNDJlZDk1NTY3ZjJhNjMxMGMzNTgzNjE0MDZlN2ZhZTQ0NzRiODE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNl
RXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiUmVt
b3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyV2luLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0Lmgi
CiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eVdpbi5oIgogI2luY2x1ZGUgIldlYkVkaXRD
b21tYW5kUHJveHkuaCIKQEAgLTIzNiw2ICsyMzcsMTAgQEAgV2ViVmlldzo6V2ViVmlldyhSRUNU
IHJlY3QsIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24sIEhXTkQg
cGEKICAgICBpZiAobV9wYWdlLT5kcmF3aW5nQXJlYSgpKQogICAgICAgICBtX3BhZ2UtPmRyYXdp
bmdBcmVhKCktPnNldFNpemUoSW50U2l6ZShyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJv
dHRvbSAtIHJlY3QudG9wKSk7CiAKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICBt
X3BhZ2UtPnNldFVSTFNjaGVtZUhhbmRsZXJGb3JTY2hlbWUoUmVtb3RlSW5zcGVjdG9yUHJvdG9j
b2xIYW5kbGVyOjpjcmVhdGUoKm1fcGFnZSksICJpbnNwZWN0b3IiKTsKKyNlbmRpZgorCiAgICAg
Ly8gRklYTUU6IEluaXRpYWxpemluZyB0aGUgdG9vbHRpcCB3aW5kb3cgaGVyZSBtYXRjaGVzIFdl
YktpdCB3aW4sIGJ1dCBzZWVtcyBsaWtlIHNvbWV0aGluZwogICAgIC8vIHdlIGNvdWxkIGRvIG9u
IGRlbWFuZCB0byBzYXZlIHJlc291cmNlcy4KICAgICBpbml0aWFsaXplVG9vbFRpcFdpbmRvdygp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW4uY21ha2UgYi9Tb3VyY2UvY21h
a2UvT3B0aW9uc1dpbi5jbWFrZQppbmRleCBiNmMxMzg2MjMyMWFiZTk0MWNjYjQ4NjNkNTA2ZjVj
YThiNjYzOTk4Li44NmVlOWIxMmJkN2I5OTQyNDg0NTRiMGE3MDg3ZDVhYjIyNjcyM2ZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbi5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2Uv
T3B0aW9uc1dpbi5jbWFrZQpAQCAtNjgsNyArNjgsNiBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfV0VCX0FVRElPIFBVQkxJQyBPRkYpCiBXRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfWFNMVCBQVUJMSUMgT04pCiAKIFdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TTU9PVEhfU0NST0xMSU5HIFBSSVZBVEUgT0ZGKQot
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1VTRVJfTUVTU0FHRV9IQU5E
TEVSUyBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9VU0VSU0VMRUNUX0FMTCBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9XRUJHTCBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9XRUJfQ1JZUFRPIFBSSVZBVEUgT0ZGKQpAQCAtNzcsNiArNzYsNyBA
QCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCX0NSWVBUTyBQUklW
QVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKFVTRV9TWVNURU1fTUFM
TE9DIFBSSVZBVEUgT04pCiAKIGlmICgke1dURl9QTEFURk9STV9XSU5fQ0FJUk99KQorICAgIFdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9VU0VSX01FU1NBR0VfSEFORExF
UlMgUFJJVkFURSBPTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSIFBVQkxJQyBPRkYpCiAgICAgV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xFR0FDWV9FTkNSWVBURURfTUVESUEg
UFVCTElDIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
SU5UTCBQVUJMSUMgT04pCkBAIC05Niw2ICs5Niw3IEBAIGlmICgke1dURl9QTEFURk9STV9XSU5f
Q0FJUk99KQogICAgICMgRklYTUU6IEltcGxlbWVudCBwbHVnaW4gcHJvY2VzcyBvbiBNb2Rlcm4g
V2ViS2l0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MzEzCiAg
ICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05FVFNDQVBFX1BMVUdJ
Tl9BUEkgUFJJVkFURSBPRkYpCiBlbHNlICgpCisgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX1VTRVJfTUVTU0FHRV9IQU5ETEVSUyBQUklWQVRFIE9GRikKICAgICBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTEVHQUNZX0VOQ1JZUFRFRF9N
RURJQSBQVUJMSUMgT04pCiAgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX0lOVEwgUFVCTElDIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfUFVCTElDX1NVRkZJWF9MSVNUIFBSSVZBVEUgT0ZGKQpkaWZmIC0tZ2l0IGEvU291
cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV2lu
Q2Fpcm8uY21ha2UKaW5kZXggYTcxNmVjNmYwZWExMGZlYmUzOWIyOGJmMGM1ZGZlZDcyM2JiNjMy
MS4uOGIxYzI4MGY4NjNhYzEwZTAyNDFhNjQ3MWEwOWM5ODU5ZTcwMDZiYyAxMDA2NDQKLS0tIGEv
U291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0
aW9uc1dpbkNhaXJvLmNtYWtlCkBAIC0yOCw3ICsyOCw3IEBAIFNFVF9BTkRfRVhQT1NFX1RPX0JV
SUxEKFVTRV9DVVJMIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX1RFWFRVUkVfTUFQ
UEVSIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX1RFWFRVUkVfTUFQUEVSX0dMIE9O
KQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX01FRElBX0ZPVU5EQVRJT04gT04pCi1TRVRf
QU5EX0VYUE9TRV9UT19CVUlMRChVU0VfSU5TUEVDVE9SX1NPQ0tFVF9TRVJWRVIgRU5BQkxFX1JF
TU9URV9JTlNQRUNUT1IpCitTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfSU5TUEVDVE9SX1NP
Q0tFVF9TRVJWRVIgJHtFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUn0pCiAKIHNldChFTkFCTEVfR1JB
UEhJQ1NfQ09OVEVYVF8zRCBPTikKIHNldChFTkFCTEVfV0VCS0lUIE9OKQpkaWZmIC0tZ2l0IGEv
Q2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDBkNWNmZTRhNDJiZTEzMzYwOTdiYWYxMDUyZjg3
NmFhMDA3YzAwMjMuLjNjYmFkM2FiYzQxODM5ODdhODU2ZmEwZGJhZWFlMDNhYzk5NTY2Y2MgMTAw
NjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
OS0wNS0yMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CisKKyAgICAg
ICAgW1dpbkNhaXJvXSBJbXBsZW1lbnQgUmVtb3RlIFdlYiBJbnNwZWN0b3IgQ2xpZW50LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3NDM0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21h
a2UvT3B0aW9uc1dpbi5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNh
aXJvLmNtYWtlOgorCiAyMDE5LTA1LTA5ICBYYW4gTMOzcGV6ICA8eGFuQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0NNYWtlXSBEZXRlY3QgU1NFMiBhdCBjb21waWxlIHRpbWUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370267</attachid>
            <date>2019-05-20 11:39:55 -0700</date>
            <delta_ts>2019-05-20 14:17:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197434-20190520113955.patch</filename>
            <type>text/plain</type>
            <size>40027</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NDg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MmQ1Y2ZlMTY0OWQ0OGFkNDEzN2U4NDM0MzJjZjEyYzkxY2Y0NTE0Li41NWIxOTJlODQzZGY5MzZl
Nzg5NTNiYWNiYWU3NTIyYjc1NzM5MmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxOS0wNS0yMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW1dpbkNhaXJvXSBJbXBsZW1lbnQgUmVtb3RlIFdlYiBJbnNwZWN0
b3IgQ2xpZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk3NDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xp
ZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNs
aWVudDo6ZGlkQWNjZXB0KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL3Nv
Y2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50Lmg6CisgICAgICAgIChJbnNwZWN0
b3I6OlJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQ6OmRpZEFjY2VwdCk6CisgICAgICAg
ICogaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmNwcDoKKyAg
ICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU2VydmVyOjpkaXNwYXRjaE1hcCk6CisK
IDIwMTktMDUtMTcgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJlLWVuYWJsZSBnZW5lcmF0ZS14Y2ZpbGVsaXN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzZmQyOGU5M2M4YmY4
NWFiN2ZkMjkzODNhOGMwMDJmMjE2OGVkNzBhLi5hNTVhZTMzYWU1ZGM3MzA5ODI4NjI4Yzc2Nzlk
ZWNkZjQ4OTE3ZjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE5LTA1LTIwICBSb3Nz
IEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAgICBbV2luQ2Fpcm9d
IEltcGxlbWVudCBSZW1vdGUgV2ViIEluc3BlY3RvciBDbGllbnQuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc0MzQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHA6CisgICAgICAgICog
VUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5jcHA6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5k
bGVyLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpXZWJWaWV3KToKKwogMjAxOS0wNS0xNyAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIHdlYnNpdGUg
cG9saWN5IHRvIGRpc2FibGUgdGhlIGxlZ2FjeSAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0
b3VjaCBiZWhhdmlvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3Rv
ckNvbm5lY3Rpb25DbGllbnQuY3BwCmluZGV4IDU2ZjQ2Y2RlNWE0YzUwOTU4ZGUyMjRkMjAzOWFj
OGE5MTEwNjJlYjQuLjBlOTBmMThlNzJmNWQ5Y2Y5ZTQzZDFmZmZlNjg5MTcxNTdjZWU0MTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9S
ZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNs
aWVudC5jcHAKQEAgLTgwLDEwICs4MCw2IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlv
bkNsaWVudDo6ZGlkUmVjZWl2ZVdlYkluc3BlY3RvckV2ZW50KENvbm5lY3Rpb25JRCBjCiAgICAg
fSk7CiB9CiAKLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudDo6ZGlkQWNjZXB0
KENvbm5lY3Rpb25JRCwgQ29ubmVjdGlvbklELCBTb2NrZXQ6OkRvbWFpbikKLXsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCiAKICNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3Nv
Y2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNs
aWVudC5oCmluZGV4IDg3M2EwNTEzNTZlMWMxOWE3YTk4MDA0MWY2ODBiNzhiMTY5ZWUzYTMuLmM2
YTYyOTYyMjIyN2E2MDU2ZGYzYzA3NmJiYWY0MjY0MjZiMzkxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JD
b25uZWN0aW9uQ2xpZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9y
ZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuaApAQCAtMzcsNyAr
MzcsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIGNsYXNzIFJlbW90ZUluc3BlY3RvckNvbm5l
Y3Rpb25DbGllbnQgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVtb3RlSW5zcGVjdG9yQ29ubmVj
dGlvbkNsaWVudD4gewogcHVibGljOgogICAgIHZvaWQgZGlkUmVjZWl2ZVdlYkluc3BlY3RvckV2
ZW50KENvbm5lY3Rpb25JRCwgVmVjdG9yPHVpbnQ4X3Q+JiYpOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRBY2NlcHQoQ29ubmVjdGlvbklEIGFjY2VwdGVkSUQsIENvbm5lY3Rpb25JRCBsaXN0ZW5lcklE
LCBTb2NrZXQ6OkRvbWFpbik7CisgICAgdmlydHVhbCB2b2lkIGRpZEFjY2VwdChDb25uZWN0aW9u
SUQgYWNjZXB0ZWRJRCwgQ29ubmVjdGlvbklEIGxpc3RlbmVySUQsIFNvY2tldDo6RG9tYWluKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2UoQ29ubmVjdGlvbklEKSA9IDA7CiAKICAgICBz
dHJ1Y3QgRXZlbnQgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNlcnZlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmNw
cAppbmRleCA4OTM1MDg5Njk1YTUzNWFhNTJhYWM2YWViNTIyYmNjOTFiMzEyMTBlLi5kMmE1YzNh
NTA2NTE5ODY1OGRmM2IwYmQzZDlmZDBjMTg0NDA0ZjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yU2VydmVyLmNwcApAQCAtMTA5LDEyICsxMDksMTIgQEAgdm9pZCBSZW1v
dGVJbnNwZWN0b3JTZXJ2ZXI6OmRpZENsb3NlKENvbm5lY3Rpb25JRCBpZCkKIEhhc2hNYXA8U3Ry
aW5nLCBSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50OjpDYWxsSGFuZGxlcj4mIFJlbW90
ZUluc3BlY3RvclNlcnZlcjo6ZGlzcGF0Y2hNYXAoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+PiBkaXNwYXRjaE1hcCA9IEhhc2hNYXA8
U3RyaW5nLCBDYWxsSGFuZGxlcj4oewotICAgICAgICB7ICJTZXRUYXJnZXRMaXN0Il9zLCByZWlu
dGVycHJldF9jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXRUYXJn
ZXRMaXN0KSB9LAotICAgICAgICB7ICJTZXR1cEluc3BlY3RvckNsaWVudCJfcywgcmVpbnRlcnBy
ZXRfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2V0dXBJbnNwZWN0
b3JDbGllbnQpIH0sCi0gICAgICAgIHsgIlNldHVwIl9zLCByZWludGVycHJldF9jYXN0PENhbGxI
YW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXR1cCkgfSwKLSAgICAgICAgeyAiRnJv
bnRlbmREaWRDbG9zZSJfcywgcmVpbnRlcnByZXRfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUlu
c3BlY3RvclNlcnZlcjo6Y2xvc2UpIH0sCi0gICAgICAgIHsgIlNlbmRNZXNzYWdlVG9Gcm9udGVu
ZCJfcywgcmVpbnRlcnByZXRfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvclNlcnZl
cjo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKSB9LAotICAgICAgICB7ICJTZW5kTWVzc2FnZVRvQmFj
a2VuZCJfcywgcmVpbnRlcnByZXRfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvclNl
cnZlcjo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQpIH0sCisgICAgICAgIHsgIlNldFRhcmdldExpc3Qi
X3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXRU
YXJnZXRMaXN0KSB9LAorICAgICAgICB7ICJTZXR1cEluc3BlY3RvckNsaWVudCJfcywgc3RhdGlj
X2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNldHVwSW5zcGVjdG9y
Q2xpZW50KSB9LAorICAgICAgICB7ICJTZXR1cCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+
KCZSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNldHVwKSB9LAorICAgICAgICB7ICJGcm9udGVuZERp
ZENsb3NlIl9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvclNlcnZl
cjo6Y2xvc2UpIH0sCisgICAgICAgIHsgIlNlbmRNZXNzYWdlVG9Gcm9udGVuZCJfcywgc3RhdGlj
X2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNlbmRNZXNzYWdlVG9G
cm9udGVuZCkgfSwKKyAgICAgICAgeyAiU2VuZE1lc3NhZ2VUb0JhY2tlbmQiX3MsIHN0YXRpY19j
YXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZVRvQmFj
a2VuZCkgfSwKICAgICB9KTsKIAogICAgIHJldHVybiBkaXNwYXRjaE1hcDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
V2luLmNtYWtlCmluZGV4IGMzNTE0ZTgzYTAyNThhYjdjMjEwNzNhMDljYTgxZDZkMjA5YWIxZWQu
LmI1YzRlYzFlNmRjMTU0ZTY1NWU0NTU2YzAzMWMyNzRkZmQzMzM2NjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bVdpbi5jbWFrZQpAQCAtMTgyLDYgKzE4MiwxOSBAQCBpZiAoJHtXVEZfUExBVEZPUk1fV0lOX0NB
SVJPfSkKICAgICApCiBlbmRpZiAoKQogCitpZiAoRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IpCisg
ICAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKKyAgICAgICAgVUlQcm9jZXNzL3NvY2tldC9S
ZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCisgICAgICAgIFVJUHJvY2Vzcy9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcAorCisgICAgICAgIFVJUHJvY2Vzcy93aW4vUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCisgICAgKQorCisgICAgbGlzdChBUFBFTkQgV2Vi
S2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNz
L3NvY2tldCIKKyAgICApCitlbmRpZiAoKQorCiBzZXQoU2hhcmVkV2ViS2l0TGlicmFyaWVzCiAg
ICAgJHtXZWJLaXRfTElCUkFSSUVTfQogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCmluZGV4IDg3YjIyNGVhZjkyZGQ3NDc2Y2E2
MWZhNGQxN2QyN2E1ZmUwZTQ2ZDUuLjk1NDA5OGIwZjVmYjIwYzQ5N2RkNDY5ODMyZjA5ZmNmMDBh
ZGQ4NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eS5jcHAKQEAgLTE3MCw3ICsxNzAsNyBAQCB2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCiAgICAgcGxhdGZvcm1DbG9zZUZy
b250ZW5kUGFnZUFuZFdpbmRvdygpOwogfQogCi0jaWYgIUVOQUJMRShSRU1PVEVfSU5TUEVDVE9S
KSB8fCAoIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykpCisjaWYgIUVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKSAmJiAhUExBVEZPUk0oTUFDKQogV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHkuaAppbmRleCAwZmQwZTgzYTViNTYwNGQ3ZDZlYzVmOTE2NzUy
MGZhMTkzMGRkY2FhLi41ZWJiYjY4ZDRjNmRhYTMzYzI4NThiZDdhZTA5NTMxMDRhYmMxNGVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5
LmgKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgQ2VydGlmaWNhdGVJbmZvOwogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIFdlYlBhZ2VQcm94eTsKK2NsYXNzIFdlYlZpZXc7CiAKIGNsYXNzIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IHsKIHB1YmxpYzoKQEAgLTg4LDYgKzg5LDEzIEBA
IHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZVdpbmRvd1RpdGxlKGNvbnN0IENTdHJpbmcmKTsKICNl
bmRpZgogCisjaWYgUExBVEZPUk0oV0lOX0NBSVJPKQorICAgIExSRVNVTFQgc2l6ZUNoYW5nZSgp
OworICAgIExSRVNVTFQgb25DbG9zZSgpOworCisgICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sg
V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CisjZW5kaWYKKwogICAgIHZvaWQg
Y2xvc2VGcm9tQ3Jhc2goKTsKIAogcHJpdmF0ZToKQEAgLTEzOSw2ICsxNDcsMTAgQEAgcHJpdmF0
ZToKICAgICBHdGtXaWRnZXQqIG1fd2ViVmlldyB7IG51bGxwdHIgfTsKICAgICBHdGtXaWRnZXQq
IG1fd2luZG93IHsgbnVsbHB0ciB9OwogI2VuZGlmCisjaWYgUExBVEZPUk0oV0lOX0NBSVJPKQor
ICAgIEhXTkQgbV9mcm9udGVuZEhhbmRsZTsKKyAgICBSZWZQdHI8V2ViVmlldz4gbV93ZWJWaWV3
OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZWIyYWM4NTY4NTlhZGE0NDgyNGYyMzA3YzdlNDUwN2NhN2M3NDZmNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0
b3JDbGllbnQuY3BwCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JDbGllbnQuaCIKKworI2lmIEVO
QUJMRShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHkgZmluYWwgOiBwdWJsaWMgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHlDbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKCk7CitwdWJs
aWM6CisgICAgUmVtb3RlSW5zcGVjdG9yUHJveHkoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBpbnNw
ZWN0b3JDbGllbnQsIENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRhcmdldElE
KQorICAgICAgICA6IG1fcHJveHkoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZSgpKQor
ICAgICAgICAsIG1faW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkKKyAgICAgICAgLCBt
X2Nvbm5lY3Rpb25JRChjb25uZWN0aW9uSUQpCisgICAgICAgICwgbV90YXJnZXRJRCh0YXJnZXRJ
RCkKKyAgICB7CisgICAgICAgIG1fcHJveHktPnNldENsaWVudCh0aGlzKTsKKyAgICB9CisKKyAg
ICB+UmVtb3RlSW5zcGVjdG9yUHJveHkoKQorICAgIHsKKyAgICAgICAgbV9wcm94eS0+c2V0Q2xp
ZW50KG51bGxwdHIpOworICAgICAgICBtX3Byb3h5LT5pbnZhbGlkYXRlKCk7CisgICAgfQorCisg
ICAgdm9pZCBsb2FkKCkKKyAgICB7CisgICAgICAgIG1fcHJveHktPmxvYWQoIndlYiIsICIiKTsK
KyAgICB9CisKKyAgICB2b2lkIHNob3coKQorICAgIHsKKyAgICAgICAgbV9wcm94eS0+c2hvdygp
OworICAgIH0KKworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKKyAgICB7CisgICAgICAgIG1fcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCht
ZXNzYWdlKTsKKyAgICB9CisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1faW5zcGVjdG9yQ2xpZW50
LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1fY29ubmVjdGlvbklELCBtX3RhcmdldElELCBtZXNzYWdl
KTsKKyAgICB9CisKKyAgICB2b2lkIGNsb3NlRnJvbUZyb250ZW5kKCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIG1faW5zcGVjdG9yQ2xpZW50LmNsb3NlRnJvbUZyb250ZW5kKG1fY29ubmVjdGlv
bklELCBtX3RhcmdldElEKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmPFJlbW90ZVdlYklu
c3BlY3RvclByb3h5PiBtX3Byb3h5OworICAgIFJlbW90ZUluc3BlY3RvckNsaWVudCYgbV9pbnNw
ZWN0b3JDbGllbnQ7CisgICAgQ29ubmVjdGlvbklEIG1fY29ubmVjdGlvbklEOworICAgIFRhcmdl
dElEIG1fdGFyZ2V0SUQ7Cit9OworCitSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OlJlbW90ZUluc3Bl
Y3RvckNsaWVudChjb25zdCBjaGFyKiBhZGRyZXNzLCB1bnNpZ25lZCBwb3J0LCBSZW1vdGVJbnNw
ZWN0b3JPYnNlcnZlciYgb2JzZXJ2ZXIpCisgICAgOiBtX29ic2VydmVyKG9ic2VydmVyKQorewor
ICAgIG1fc29ja2V0ID0gSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6
Y3JlYXRlKHRoaXMsICJSZW1vdGVJbnNwZWN0b3JDbGllbnQiKTsKKworICAgIG1fY29ubmVjdGlv
bklEID0gbV9zb2NrZXQtPmNvbm5lY3RJbmV0KGFkZHJlc3MsIHBvcnQpOworICAgIGlmICghbV9j
b25uZWN0aW9uSUQpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnNwZWN0b3IgY2xpZW50IGNvdWxk
IG5vdCBjb25uZWN0IHRvICVzOiVkIiwgYWRkcmVzcywgcG9ydCk7CisgICAgICAgIG1fc29ja2V0
ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXJ0SW5pdGlhbENv
bW11bmljYXRpb24oKTsKK30KKworUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojp+UmVtb3RlSW5zcGVj
dG9yQ2xpZW50KCkKK3sKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRXZWJJ
bnNwZWN0b3JFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50KQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgQVNTRVJUKG1fY29ubmVjdGlvbklELmhhc1ZhbHVlKCkpOworICAgIGF1
dG8gbWVzc2FnZSA9IGV2ZW50LnV0ZjgoKTsKKyAgICBtX3NvY2tldC0+c2VuZChtX2Nvbm5lY3Rp
b25JRC52YWx1ZSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtZXNzYWdlLmRh
dGEoKSksIG1lc3NhZ2UubGVuZ3RoKCkpOworfQorCitIYXNoTWFwPFN0cmluZywgSW5zcGVjdG9y
OjpSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50OjpDYWxsSGFuZGxlcj4mIFJlbW90ZUlu
c3BlY3RvckNsaWVudDo6ZGlzcGF0Y2hNYXAoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+PiBkaXNwYXRjaE1hcCA9IEhhc2hNYXA8U3Ry
aW5nLCBDYWxsSGFuZGxlcj4oeworICAgICAgICB7ICJTZXRUYXJnZXRMaXN0Il9zLCBzdGF0aWNf
Y2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0VGFyZ2V0TGlzdCkg
fSwKKyAgICAgICAgeyAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIl9zLCBzdGF0aWNfY2FzdDxDYWxs
SGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKSB9
LAorICAgIH0pOworCisgICAgcmV0dXJuIGRpc3BhdGNoTWFwOworfQorCit2b2lkIFJlbW90ZUlu
c3BlY3RvckNsaWVudDo6c3RhcnRJbml0aWFsQ29tbXVuaWNhdGlvbigpCit7CisgICAgYXV0byBl
dmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgZXZlbnQtPnNldFN0cmluZygiZXZl
bnQiX3MsICJTZXR1cEluc3BlY3RvckNsaWVudCJfcyk7CisgICAgc2VuZFdlYkluc3BlY3RvckV2
ZW50KGV2ZW50LT50b0pTT05TdHJpbmcoKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50Ojpjb25uZWN0aW9uQ2xvc2VkKCkKK3sKKyAgICBtX3RhcmdldHMuY2xlYXIoKTsKKyAgICBt
X2luc3BlY3RvclByb3h5TWFwLmNsZWFyKCk7CisgICAgbV9vYnNlcnZlci5jb25uZWN0aW9uQ2xv
c2VkKCp0aGlzKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmRpZENsb3NlKENv
bm5lY3Rpb25JRCkKK3sKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3Qo
Q29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQgdGFyZ2V0SUQpCit7CisgICAgYXV0
byBhZGRSZXN1bHQgPSBtX2luc3BlY3RvclByb3h5TWFwLmVuc3VyZShzdGQ6Om1ha2VfcGFpcihj
b25uZWN0aW9uSUQsIHRhcmdldElEKSwgW3RoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SURdIHsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UmVtb3RlSW5zcGVjdG9yUHJveHk+KCp0
aGlzLCBjb25uZWN0aW9uSUQsIHRhcmdldElEKTsKKyAgICB9KTsKKworICAgIGlmICghYWRkUmVz
dWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2hv
dygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBzZXR1cEV2ZW50ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBzZXR1cEV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9z
LCAiU2V0dXAiX3MpOworICAgIHNldHVwRXZlbnQtPnNldEludGVnZXIoImNvbm5lY3Rpb25JRCJf
cywgY29ubmVjdGlvbklEKTsKKyAgICBzZXR1cEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJf
cywgdGFyZ2V0SUQpOworICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChzZXR1cEV2ZW50LT50b0pT
T05TdHJpbmcoKSk7CisKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5sb2FkKCk7Cit9
CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvQmFja2VuZChDb25u
ZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQoreworICAgIGF1dG8gYmFja2VuZEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBiYWNrZW5kRXZlbnQtPnNldFN0cmluZygiZXZlbnQiX3MsICJTZW5kTWVzc2FnZVRv
QmFja2VuZCJfcyk7CisgICAgYmFja2VuZEV2ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQi
X3MsIGNvbm5lY3Rpb25JRCk7CisgICAgYmFja2VuZEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJ
RCJfcywgdGFyZ2V0SUQpOworICAgIGJhY2tlbmRFdmVudC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9z
LCBtZXNzYWdlKTsKKyAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoYmFja2VuZEV2ZW50LT50b0pT
T05TdHJpbmcoKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpjbG9zZUZyb21G
cm9udGVuZChDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCkKK3sK
KyAgICBhdXRvIGNsb3NlZEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBjbG9z
ZWRFdmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIkZyb250ZW5kRGlkQ2xvc2UiX3MpOworICAg
IGNsb3NlZEV2ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCk7
CisgICAgY2xvc2VkRXZlbnQtPnNldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7Cisg
ICAgc2VuZFdlYkluc3BlY3RvckV2ZW50KGNsb3NlZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7CisK
KyAgICBtX2luc3BlY3RvclByb3h5TWFwLnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9u
SUQsIHRhcmdldElEKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJn
ZXRMaXN0KGNvbnN0IEV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAoIWV2ZW50LmNvbm5lY3Rpb25J
RCB8fCAhZXZlbnQubWVzc2FnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEpTT046
OlZhbHVlPiBtZXNzYWdlVmFsdWU7CisgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGV2
ZW50Lm1lc3NhZ2UudmFsdWUoKSwgbWVzc2FnZVZhbHVlKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUmVmUHRyPEpTT046OkFycmF5PiBtZXNzYWdlQXJyYXk7CisgICAgaWYgKCFtZXNzYWdlVmFs
dWUtPmFzQXJyYXkobWVzc2FnZUFycmF5KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9y
PFRhcmdldD4gdGFyZ2V0TGlzdDsKKyAgICBmb3IgKGF1dG8mIGl0ZW1WYWx1ZSA6ICptZXNzYWdl
QXJyYXkpIHsKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaXRlbU9iamVjdDsKKyAgICAg
ICAgaWYgKCFpdGVtVmFsdWUtPmFzT2JqZWN0KGl0ZW1PYmplY3QpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgVGFyZ2V0IHRhcmdldDsKKyAgICAgICAgaWYgKCFpdGVtT2JqZWN0
LT5nZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0LmlkKQorICAgICAgICAgICAgfHwgIWl0
ZW1PYmplY3QtPmdldFN0cmluZygibmFtZSJfcywgdGFyZ2V0Lm5hbWUpCisgICAgICAgICAgICB8
fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJ1cmwiX3MsIHRhcmdldC51cmwpCisgICAgICAgICAg
ICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCB0YXJnZXQudHlwZSkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICB0YXJnZXRMaXN0LmFwcGVuZChXVEZNb3ZlKHRh
cmdldCkpOworICAgIH0KKworICAgIGF1dG8gY29ubmVjdGlvbklEID0gZXZlbnQuY29ubmVjdGlv
bklELnZhbHVlKCk7CisKKyAgICAvLyBGaW5kIGNsb3NlZCB0YXJnZXRzIHRvIHJlbW92ZSB0aGVt
LgorICAgIFZlY3RvcjxUYXJnZXRJRCwgND4gdGFyZ2V0c1RvUmVtb3ZlOworICAgIGZvciAoYXV0
byYgcGFpciA6IG1faW5zcGVjdG9yUHJveHlNYXAua2V5cygpKSB7CisgICAgICAgIGlmIChwYWly
LmZpcnN0ICE9IGNvbm5lY3Rpb25JRCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRvJiB0YXJnZXQgOiB0YXJnZXRM
aXN0KSB7CisgICAgICAgICAgICBpZiAodGFyZ2V0LmlkID09IHBhaXIuc2Vjb25kKSB7CisgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIHRh
cmdldHNUb1JlbW92ZS5hcHBlbmQocGFpci5zZWNvbmQpOworICAgIH0KKyAgICBmb3IgKGF1dG8m
IHRhcmdldElEIDogdGFyZ2V0c1RvUmVtb3ZlKQorICAgICAgICBtX2luc3BlY3RvclByb3h5TWFw
LnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7CisKKyAgICBt
X3RhcmdldHMuc2V0KGNvbm5lY3Rpb25JRCwgV1RGTW92ZSh0YXJnZXRMaXN0KSk7CisgICAgbV9v
YnNlcnZlci50YXJnZXRMaXN0Q2hhbmdlZCgqdGhpcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVj
dG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgRXZlbnQmIGV2ZW50KQorewor
ICAgIGlmICghZXZlbnQuY29ubmVjdGlvbklEIHx8ICFldmVudC50YXJnZXRJRCB8fCAhZXZlbnQu
bWVzc2FnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBwcm94eSA9IG1faW5zcGVjdG9y
UHJveHlNYXAuZ2V0KHN0ZDo6bWFrZV9wYWlyKGV2ZW50LmNvbm5lY3Rpb25JRC52YWx1ZSgpLCBl
dmVudC50YXJnZXRJRC52YWx1ZSgpKSk7CisgICAgaWYgKCFwcm94eSkgeworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHByb3h5LT5z
ZW5kTWVzc2FnZVRvRnJvbnRlbmQoZXZlbnQubWVzc2FnZS52YWx1ZSgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kNWIzNTg0ZDNhNmY2NGRmZGNhZmJiOGQwYjM5ODdiZTg5OGQ1
ZWYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1Jl
bW90ZUluc3BlY3RvckNsaWVudC5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1JlbW90ZUNvbnRyb2xsYWJsZVRhcmdldC5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuaD4KKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9SZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludC5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50OworY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHk7CisKK2NsYXNzIFJl
bW90ZUluc3BlY3Rvck9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5SZW1vdGVJbnNw
ZWN0b3JPYnNlcnZlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB0YXJnZXRMaXN0Q2hhbmdlZChS
ZW1vdGVJbnNwZWN0b3JDbGllbnQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3Rpb25D
bG9zZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JikgPSAwOworfTsKKwordXNpbmcgQ29ubmVjdGlv
bklEID0gSW5zcGVjdG9yOjpDb25uZWN0aW9uSUQ7Cit1c2luZyBUYXJnZXRJRCA9IEluc3BlY3Rv
cjo6VGFyZ2V0SUQ7CisKK2NsYXNzIFJlbW90ZUluc3BlY3RvckNsaWVudCA6IHB1YmxpYyBJbnNw
ZWN0b3I6OlJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEKCk7CitwdWJsaWM6CisgICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50KGNvbnN0
IGNoYXIqIGFkZHJlc3MsIHVuc2lnbmVkIHBvcnQsIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJik7
CisgICAgflJlbW90ZUluc3BlY3RvckNsaWVudCgpOworCisgICAgc3RydWN0IFRhcmdldCB7Cisg
ICAgICAgIFRhcmdldElEIGlkOworICAgICAgICBTdHJpbmcgdHlwZTsKKyAgICAgICAgU3RyaW5n
IG5hbWU7CisgICAgICAgIFN0cmluZyB1cmw7CisgICAgfTsKKworICAgIGNvbnN0IEhhc2hNYXA8
Q29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0Pj4mIHRhcmdldHMoKSBjb25zdCB7IHJldHVybiBt
X3RhcmdldHM7IH0KKworICAgIHZvaWQgaW5zcGVjdChDb25uZWN0aW9uSUQsIFRhcmdldElEKTsK
KyAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQsIGNv
bnN0IFN0cmluZyYpOworICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoQ29ubmVjdGlvbklELCBU
YXJnZXRJRCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFJl
bW90ZUluc3BlY3RvckNsaWVudD47CisKKyAgICB2b2lkIHN0YXJ0SW5pdGlhbENvbW11bmljYXRp
b24oKTsKKyAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoKTsKKworICAgIHZvaWQgc2V0VGFyZ2V0
TGlzdChjb25zdCBFdmVudCYpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0
IEV2ZW50Jik7CisgICAgdm9pZCBzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgRXZlbnQmKTsKKwor
ICAgIHZvaWQgZGlkQ2xvc2UoQ29ubmVjdGlvbklEKSBvdmVycmlkZTsKKyAgICBIYXNoTWFwPFN0
cmluZywgQ2FsbEhhbmRsZXI+JiBkaXNwYXRjaE1hcCgpIG92ZXJyaWRlOworCisgICAgdm9pZCBz
ZW5kV2ViSW5zcGVjdG9yRXZlbnQoY29uc3QgU3RyaW5nJik7CisKKyAgICBSZW1vdGVJbnNwZWN0
b3JPYnNlcnZlciYgbV9vYnNlcnZlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpS
ZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludD4gbV9zb2NrZXQ7CisgICAgT3B0aW9uYWw8Q29u
bmVjdGlvbklEPiBtX2Nvbm5lY3Rpb25JRDsKKyAgICBIYXNoTWFwPENvbm5lY3Rpb25JRCwgVmVj
dG9yPFRhcmdldD4+IG1fdGFyZ2V0czsKKyAgICBIYXNoTWFwPHN0ZDo6cGFpcjxDb25uZWN0aW9u
SUQsIFRhcmdldElEPiwgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUluc3BlY3RvclByb3h5Pj4gbV9p
bnNwZWN0b3JQcm94eU1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjgxMmU0NTg3ODc1NmFmNDhlMGZmNzhkMGY2NWU5NDM3NWZhM2EwM2IK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcApAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yUHJv
dG9jb2xIYW5kbGVyLmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1
ZGUgIkFQSU5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJBUElVc2VyQ29udGVudFdvcmxkLmgiCisj
aW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5j
bHVkZSAiV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitjbGFzcyBTY3JpcHRNZXNzYWdlQ2xpZW50IGZpbmFsIDogcHVibGljIFdlYlNjcmlwdE1l
c3NhZ2VIYW5kbGVyOjpDbGllbnQgeworcHVibGljOgorICAgIFNjcmlwdE1lc3NhZ2VDbGllbnQo
UmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyJiBpbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIp
CisgICAgICAgIDogbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIoaW5zcGVjdG9yUHJvdG9jb2xI
YW5kbGVyKSB7IH0KKworICAgIH5TY3JpcHRNZXNzYWdlQ2xpZW50KCkgeyB9CisKKyAgICB2b2lk
IGRpZFBvc3RNZXNzYWdlKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYs
IFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgc2VyaWFsaXplZFNjcmlwdFZhbHVlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byB0b2tlbnMgPSBzZXJpYWxpemVkU2NyaXB0VmFs
dWUudG9TdHJpbmcoKS5zcGxpdCgiOiIpOworICAgICAgICBpZiAodG9rZW5zLnNpemUoKSAhPSAy
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFVSTCByZXF1ZXN0VVJMIHsgeyB9LCBw
YWdlLnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAgICBtX2luc3BlY3RvclByb3RvY29s
SGFuZGxlci5pbnNwZWN0KHJlcXVlc3RVUkwuaG9zdEFuZFBvcnQoKSwgdG9rZW5zWzBdLnRvVUlu
dFN0cmljdCgpLCB0b2tlbnNbMV0udG9VSW50U3RyaWN0KCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXImIG1faW5zcGVjdG9yUHJvdG9jb2xI
YW5kbGVyOworfTsKKwordm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6Omluc3Bl
Y3QoY29uc3QgU3RyaW5nJiBob3N0QW5kUG9ydCwgQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwg
VGFyZ2V0SUQgdGFyZ2V0SUQpCit7CisgICAgaWYgKGF1dG8qIGNsaWVudCA9IG1faW5zcGVjdG9y
Q2xpZW50cy5nZXQoaG9zdEFuZFBvcnQpKQorICAgICAgICBjbGllbnQtPmluc3BlY3QoY29ubmVj
dGlvbklELCB0YXJnZXRJRCk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5k
bGVyOjp0YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKQoreworICAgIG1f
cGFnZS5yZWxvYWQoeyB9KTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRs
ZXI6OnBsYXRmb3JtU3RhcnRUYXNrKFdlYlBhZ2VQcm94eSYgcGFnZVByb3h5LCBXZWJVUkxTY2hl
bWVUYXNrJiB0YXNrKQoreworICAgIGF1dG8mIHJlcXVlc3RVUkwgPSB0YXNrLnJlcXVlc3QoKS51
cmwoKTsKKyAgICBpZiAoIXJlcXVlc3RVUkwucG9ydCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvKiBjbGllbnQgPSBtX2luc3BlY3RvckNsaWVudHMuZW5zdXJlKHJlcXVlc3RVUkwuaG9z
dEFuZFBvcnQoKSwgW3RoaXMsICZyZXF1ZXN0VVJMXSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPFJlbW90ZUluc3BlY3RvckNsaWVudD4ocmVxdWVzdFVSTC5ob3N0KCkudXRmOCgp
LmRhdGEoKSwgcmVxdWVzdFVSTC5wb3J0KCkudmFsdWUoKSwgKnRoaXMpOworICAgIH0pLml0ZXJh
dG9yLT52YWx1ZS5nZXQoKTsKKworICAgIC8vIFNldHVwIHRhcmdldCBwb3N0TWVzc2FnZSBsaXN0
ZW5lcgorICAgIGF1dG8gaGFuZGxlciA9IFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpjcmVhdGUo
c3RkOjptYWtlX3VuaXF1ZTxTY3JpcHRNZXNzYWdlQ2xpZW50PigqdGhpcyksICJpbnNwZWN0b3Ii
LCBBUEk6OlVzZXJDb250ZW50V29ybGQ6Om5vcm1hbFdvcmxkKCkpOworICAgIHBhZ2VQcm94eS5w
YWdlR3JvdXAoKS51c2VyQ29udGVudENvbnRyb2xsZXIoKS5hZGRVc2VyU2NyaXB0TWVzc2FnZUhh
bmRsZXIoaGFuZGxlci5nZXQoKSk7CisKKyAgICBTdHJpbmdCdWlsZGVyIGh0bWxCdWlsZGVyOwor
ICAgIGh0bWxCdWlsZGVyLmFwcGVuZCgKKyAgICAgICAgIjxodG1sPjxoZWFkPjx0aXRsZT5SZW1v
dGUgSW5zcGVjdG9yPC90aXRsZT4iCisgICAgICAgICI8bWV0YSBodHRwLWVxdWl2PVwiQ29udGVu
dC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiIC8+IgorICAgICAg
ICAiPHN0eWxlPiIKKyAgICAgICAgIiAgaDEgeyBjb2xvcjogI2JhYmRiNjsgdGV4dC1zaGFkb3c6
IDAgMXB4IDAgd2hpdGU7IG1hcmdpbi1ib3R0b206IDA7IH0iCisgICAgICAgICIgIGh0bWwgeyBm
b250LWZhbWlseTogLXdlYmtpdC1zeXN0ZW0tZm9udDsgZm9udC1zaXplOiAxMXB0OyBjb2xvcjog
IzJlMzQzNjsgcGFkZGluZzogMjBweCAyMHB4IDAgMjBweDsgYmFja2dyb3VuZC1jb2xvcjogI2Y2
ZjZmNDsgIgorICAgICAgICAiICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFk
aWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjZWVlZWVj
KSwgY29sb3Itc3RvcCgxLCAjZjZmNmY0KSk7IgorICAgICAgICAiICAgICAgICAgYmFja2dyb3Vu
ZC1zaXplOiAxMDAlIDVlbTsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgfSIKKyAgICAg
ICAgIiAgdGFibGUgeyB3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgfSIK
KyAgICAgICAgIiAgdGFibGUsIHRkIHsgYm9yZGVyOiAxcHggc29saWQgI2QzZDdjZjsgYm9yZGVy
LWxlZnQ6IG5vbmU7IGJvcmRlci1yaWdodDogbm9uZTsgfSIKKyAgICAgICAgIiAgcCB7IG1hcmdp
bi1ib3R0b206IDMwcHg7IH0iCisgICAgICAgICIgIHRkIHsgcGFkZGluZzogMTVweDsgfSIKKyAg
ICAgICAgIiAgdGQuZGF0YSB7IHdpZHRoOiAyMDBweDsgfSIKKyAgICAgICAgIiAgLnRhcmdldG5h
bWUgeyBmb250LXdlaWdodDogYm9sZDsgfSIKKyAgICAgICAgIiAgLnRhcmdldHVybCB7IGNvbG9y
OiAjYmFiZGI2OyB9IgorICAgICAgICAiICB0ZC5pbnB1dCB7IHdpZHRoOiA2NHB4OyB9IgorICAg
ICAgICAiICBpbnB1dCB7IHdpZHRoOiAxMDAlOyBwYWRkaW5nOiA4cHg7IH0iCisgICAgICAgICI8
L3N0eWxlPiIKKyAgICAgICAgIjwvaGVhZD48Ym9keT48aDE+SW5zcGVjdGFibGUgdGFyZ2V0czwv
aDE+Iik7CisKKyAgICBpZiAoY2xpZW50LT50YXJnZXRzKCkuaXNFbXB0eSgpKQorICAgICAgICBo
dG1sQnVpbGRlci5hcHBlbmQoIjxwPk5vIHRhcmdldHMgZm91bmQ8L3A+Iik7CisgICAgZWxzZSB7
CisgICAgICAgIGh0bWxCdWlsZGVyLmFwcGVuZCgiPHRhYmxlPiIpOworICAgICAgICBmb3IgKGF1
dG8mIGNvbm5lY3Rpb25JRCA6IGNsaWVudC0+dGFyZ2V0cygpLmtleXMoKSkgeworICAgICAgICAg
ICAgZm9yIChhdXRvJiB0YXJnZXQgOiBjbGllbnQtPnRhcmdldHMoKS5nZXQoY29ubmVjdGlvbklE
KSkgeworICAgICAgICAgICAgICAgIGh0bWxCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKAorICAg
ICAgICAgICAgICAgICAgICAiPHRib2R5Pjx0cj4iCisgICAgICAgICAgICAgICAgICAgICI8dGQg
Y2xhc3M9XCJkYXRhXCI+PGRpdiBjbGFzcz1cInRhcmdldG5hbWVcIj4iLCB0YXJnZXQubmFtZSwg
IjwvZGl2PjxkaXYgY2xhc3M9XCJ0YXJnZXR1cmxcIj4iLCB0YXJnZXQudXJsLCAiPC9kaXY+PC90
ZD4iCisgICAgICAgICAgICAgICAgICAgICI8dGQgY2xhc3M9XCJpbnB1dFwiPjxpbnB1dCB0eXBl
PVwiYnV0dG9uXCIgdmFsdWU9XCJJbnNwZWN0XCIgb25jbGljaz1cIndpbmRvdy53ZWJraXQubWVz
c2FnZUhhbmRsZXJzLmluc3BlY3Rvci5wb3N0TWVzc2FnZSgnIiwgY29ubmVjdGlvbklELCAiOiIs
IHRhcmdldC5pZCwgIicpO1wiPjwvdGQ+IgorICAgICAgICAgICAgICAgICAgICAiPC90cj48L3Ri
b2R5PiIKKyAgICAgICAgICAgICAgICApKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBodG1sQnVpbGRlci5hcHBlbmQoIjwvdGFibGU+Iik7CisgICAgfQorCisgICAgaHRtbEJ1
aWxkZXIuYXBwZW5kKCI8L2JvZHk+PC9odG1sPiIpOworCisgICAgYXV0byBodG1sID0gaHRtbEJ1
aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7CisgICAgcGFnZVByb3h5LmxvYWREYXRhKHsgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaHRtbC5kYXRhKCkpLCBodG1sLmxlbmd0aCgpIH0s
ICJ0ZXh0L2h0bWwiX3MsICJVVEYtOCJfcywgcmVxdWVzdFVSTCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9j
b2xIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yUHJvdG9jb2xIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTBhYzM0ZTJkMzlkNjYzYTRlNGJlYWJl
OGNiMjYxMDJmMDZhYjExYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaApAQCAtMCwwICsxLDY2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFJFTU9URV9J
TlNQRUNUT1IpCisKKyNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JDbGllbnQuaCIKKyNpbmNsdWRl
ICJXZWJVUkxTY2hlbWVIYW5kbGVyLmgiCisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgVVJMOwor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVVJMU2NoZW1lVGFzazsKKworY2xh
c3MgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyIGZpbmFsIDogcHVibGljIFJlbW90ZUlu
c3BlY3Rvck9ic2VydmVyLCBwdWJsaWMgV2ViVVJMU2NoZW1lSGFuZGxlciB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI+IGNyZWF0ZShXZWJQ
YWdlUHJveHkmIHBhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlSW5zcGVjdG9yUHJv
dG9jb2xIYW5kbGVyKHBhZ2UpKTsgfQorCisgICAgdm9pZCBpbnNwZWN0KGNvbnN0IFN0cmluZyYs
IENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQpOworCitwcml2YXRlOgorICAgIFJlbW90ZUluc3BlY3Rv
clByb3RvY29sSGFuZGxlcihXZWJQYWdlUHJveHkmIHBhZ2UpCisgICAgICAgIDogbV9wYWdlKHBh
Z2UpIHsgfQorCisgICAgLy8gUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIKKyAgICB2b2lkIHRhcmdl
dExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpIGZpbmFsOworICAgIHZvaWQgY29u
bmVjdGlvbkNsb3NlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSBmaW5hbCB7IH0KKworICAgIC8v
IFdlYlVSTFNjaGVtZUhhbmRsZXIKKyAgICB2b2lkIHBsYXRmb3JtU3RhcnRUYXNrKFdlYlBhZ2VQ
cm94eSYsIFdlYlVSTFNjaGVtZVRhc2smKSBmaW5hbDsKKyAgICB2b2lkIHBsYXRmb3JtU3RvcFRh
c2soV2ViUGFnZVByb3h5JiwgV2ViVVJMU2NoZW1lVGFzayYpIGZpbmFsIHsgfQorICAgIHZvaWQg
cGxhdGZvcm1UYXNrQ29tcGxldGVkKFdlYlVSTFNjaGVtZVRhc2smKSBmaW5hbCB7IH0KKworICAg
IEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Pj4g
bV9pbnNwZWN0b3JDbGllbnRzOworICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0
b3JQcm94eVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHlXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBkYTFlNTM4NzQxNmJiMGE4MjI5Yzg3MDM1
Yzg4NjQyMzdhYTVhZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCkBAIC0wLDAgKzEsMTQ3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eS5oIgorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNs
dWRlICJBUElQYWdlQ29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5
LmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIExQQ1RTVFIgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHlQb2ludGVyUHJvcCA9IFRFWFQoIlJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRlciIpOwor
Y29uc3QgTFBDV1NUUiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSA9IEwiUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHlDbGFzcyI7CisKK0xSRVNVTFQgQ0FMTEJBQ0sgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OlduZFByb2MoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwg
TFBBUkFNIGxQYXJhbSkKK3sKKyAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50ID0g
cmVpbnRlcnByZXRfY2FzdDxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSo+KDo6R2V0UHJvcChod25k
LCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wKSk7CisKKyAgICBzd2l0Y2ggKG1z
ZykgeworICAgIGNhc2UgV01fU0laRToKKyAgICAgICAgcmV0dXJuIGNsaWVudC0+c2l6ZUNoYW5n
ZSgpOworICAgIGNhc2UgV01fQ0xPU0U6CisgICAgICAgIHJldHVybiBjbGllbnQtPm9uQ2xvc2Uo
KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gOjpE
ZWZXaW5kb3dQcm9jKGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOworfQorCitzdGF0aWMgQVRP
TSByZWdpc3RlcldpbmRvd0NsYXNzKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJl
ZFdpbmRvd0NsYXNzID0gZmFsc2U7CisgICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3Mp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgV05EQ0xBU1NFWCB3Y2V4OworICAgIHdjZXgu
Y2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOworICAgIHdjZXguc3R5bGUgICAgICAgICAgPSAw
OworICAgIHdjZXgubHBmblduZFByb2MgICAgPSBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6V25k
UHJvYzsKKyAgICB3Y2V4LmNiQ2xzRXh0cmEgICAgID0gMDsKKyAgICB3Y2V4LmNiV25kRXh0cmEg
ICAgID0gMDsKKyAgICB3Y2V4LmhJbnN0YW5jZSAgICAgID0gMDsKKyAgICB3Y2V4LmhJY29uICAg
ICAgICAgID0gMDsKKyAgICB3Y2V4LmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNvcigwLCBJRENf
QVJST1cpOworICAgIHdjZXguaGJyQmFja2dyb3VuZCAgPSAwOworICAgIHdjZXgubHBzek1lbnVO
YW1lICAgPSAwOworICAgIHdjZXgubHBzekNsYXNzTmFtZSAgPSBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eUNsYXNzTmFtZTsKKyAgICB3Y2V4LmhJY29uU20gICAgICAgID0gMDsKKworICAgIGhhdmVS
ZWdpc3RlcmVkV2luZG93Q2xhc3MgPSB0cnVlOworICAgIHJldHVybiA6OlJlZ2lzdGVyQ2xhc3NF
eCgmd2NleCk7Cit9CisKK0xSRVNVTFQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNpemVDaGFu
Z2UoKQoreworICAgIGlmICghbV93ZWJWaWV3KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJF
Q1QgcmVjdDsKKyAgICA6OkdldENsaWVudFJlY3QobV9mcm9udGVuZEhhbmRsZSwgJnJlY3QpOwor
ICAgIDo6U2V0V2luZG93UG9zKG1fd2ViVmlldy0+d2luZG93KCksIDAsIHJlY3QubGVmdCwgcmVj
dC50b3AsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIFNX
UF9OT1pPUkRFUik7CisgICAgcmV0dXJuIDA7Cit9CisKK0xSRVNVTFQgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6Om9uQ2xvc2UoKQoreworICAgIDo6U2hvd1dpbmRvdyhtX2Zyb250ZW5kSGFuZGxl
LCBTV19ISURFKTsKKyAgICBmcm9udGVuZERpZENsb3NlKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K1dlYlBhZ2VQcm94eSogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBSZWZQdHI8V2ViUHJlZmVyZW5jZXM+IHByZWZl
cmVuY2VzID0gV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZShTdHJpbmcoKSwgIldlYktpdDIuIiwgIldl
YktpdDIuIik7CisgICAgcHJlZmVyZW5jZXMtPnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJM
cyh0cnVlKTsKKworI2lmIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKKyAgICBwcmVmZXJlbmNlcy0+
c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKKyAgICBwcmVmZXJlbmNlcy0+c2V0TG9n
c1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQodHJ1ZSk7CisjZW5kaWYKKworICAg
IFJlZlB0cjxXZWJQYWdlR3JvdXA+IHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKGlu
c3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKG51bGxwdHIpKTsKKworICAgIGF1dG8g
cGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKKyAg
ICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJmluc3BlY3RvclByb2Nlc3NQb29s
KGluc3BlY3RvckxldmVsRm9yUGFnZShudWxscHRyKSkpOworICAgIHBhZ2VDb25maWd1cmF0aW9u
LT5zZXRQcmVmZXJlbmNlcyhwcmVmZXJlbmNlcy5nZXQoKSk7CisgICAgcGFnZUNvbmZpZ3VyYXRp
b24tPnNldFBhZ2VHcm91cChwYWdlR3JvdXAuZ2V0KCkpOworCisgICAgV2ViQ29yZTo6SW50UmVj
dCByZWN0KDYwLCAyMDAsIDE1MDAsIDEwMDApOworICAgIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsK
KyAgICBtX2Zyb250ZW5kSGFuZGxlID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eUNsYXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKKyAgICAgICAgcmVj
dC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIDAsIDAsIDAsIDAp
OworCisgICAgOjpTZXRQcm9wKG1fZnJvbnRlbmRIYW5kbGUsIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5UG9pbnRlclByb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7CisgICAgU2hv
d1dpbmRvdyhtX2Zyb250ZW5kSGFuZGxlLCBTV19TSE9XKTsKKworICAgIFJFQ1QgcjsKKyAgICA6
OkdldENsaWVudFJlY3QobV9mcm9udGVuZEhhbmRsZSwgJnIpOworICAgIG1fd2ViVmlldyA9IFdl
YlZpZXc6OmNyZWF0ZShyLCBwYWdlQ29uZmlndXJhdGlvbiwgbV9mcm9udGVuZEhhbmRsZSk7Cisg
ICAgcmV0dXJuIG1fd2ViVmlldy0+cGFnZSgpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2ws
IGJvb2wpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSB7
IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFn
KCkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW5Jbk5ld1Rh
Yihjb25zdCBTdHJpbmcmKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpIHsgfQor
Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdl
QW5kV2luZG93KCkKK3sKKyAgICA6OkRlc3Ryb3lXaW5kb3cobV9mcm9udGVuZEhhbmRsZSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKaW5kZXggOTYyZjMw
MmM5ODhjMzQzODc3ZjdkYWQ3MTE1Nzg3OWZlY2NiZmQwMC4uNWRkMzA1YzVjNjQ3MmVmODZiYzc0
ZjZhM2JmZDk4MzI1NWQxOTMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
d2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3
LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQu
aCIKICNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2Vi
V2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5o
IgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHlX
aW4uaCIKICNpbmNsdWRlICJXZWJFZGl0Q29tbWFuZFByb3h5LmgiCkBAIC0yMzYsNiArMjM3LDEw
IEBAIFdlYlZpZXc6OldlYlZpZXcoUkVDVCByZWN0LCBjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0
aW9uJiBjb25maWd1cmF0aW9uLCBIV05EIHBhCiAgICAgaWYgKG1fcGFnZS0+ZHJhd2luZ0FyZWEo
KSkKICAgICAgICAgbV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5zZXRTaXplKEludFNpemUocmVjdC5y
aWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCkpOwogCisjaWYgRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCisgICAgbV9wYWdlLT5zZXRVUkxTY2hlbWVIYW5kbGVyRm9yU2No
ZW1lKFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6Y3JlYXRlKCptX3BhZ2UpLCAiaW5z
cGVjdG9yIik7CisjZW5kaWYKKwogICAgIC8vIEZJWE1FOiBJbml0aWFsaXppbmcgdGhlIHRvb2x0
aXAgd2luZG93IGhlcmUgbWF0Y2hlcyBXZWJLaXQgd2luLCBidXQgc2VlbXMgbGlrZSBzb21ldGhp
bmcKICAgICAvLyB3ZSBjb3VsZCBkbyBvbiBkZW1hbmQgdG8gc2F2ZSByZXNvdXJjZXMuCiAgICAg
aW5pdGlhbGl6ZVRvb2xUaXBXaW5kb3coKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRp
b25zV2luLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNXaW4uY21ha2UKaW5kZXggYjZjMTM4
NjIzMjFhYmU5NDFjY2I0ODYzZDUwNmY1Y2E4YjY2Mzk5OC4uODZlZTliMTJiZDdiOTk0MjQ4NDU0
YjBhNzA4N2Q1YWIyMjY3MjNmZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW4u
Y21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNXaW4uY21ha2UKQEAgLTY4LDcgKzY4LDYg
QEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQl9BVURJTyBQVUJM
SUMgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1hTTFQgUFVC
TElDIE9OKQogCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU01PT1RI
X1NDUk9MTElORyBQUklWQVRFIE9GRikKLVdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9VU0VSX01FU1NBR0VfSEFORExFUlMgUFJJVkFURSBPRkYpCiBXRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVVNFUlNFTEVDVF9BTEwgUFJJVkFURSBPRkYpCiBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCR0wgUFJJVkFURSBPRkYp
CiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCX0NSWVBUTyBQUklW
QVRFIE9GRikKQEAgLTc3LDYgKzc2LDcgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX1dFQl9DUllQVE8gUFJJVkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShVU0VfU1lTVEVNX01BTExPQyBQUklWQVRFIE9OKQogCiBpZiAoJHtXVEZfUExB
VEZPUk1fV0lOX0NBSVJPfSkKKyAgICBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfVVNFUl9NRVNTQUdFX0hBTkRMRVJTIFBSSVZBVEUgT04pCiAgICAgV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdF
UiBQVUJMSUMgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9MRUdBQ1lfRU5DUllQVEVEX01FRElBIFBVQkxJQyBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0lOVEwgUFVCTElDIE9OKQpAQCAtOTYsNiArOTYsNyBA
QCBpZiAoJHtXVEZfUExBVEZPUk1fV0lOX0NBSVJPfSkKICAgICAjIEZJWE1FOiBJbXBsZW1lbnQg
cGx1Z2luIHByb2Nlc3Mgb24gTW9kZXJuIFdlYktpdC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4NTMxMwogICAgIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJIFBSSVZBVEUgT0ZGKQogZWxzZSAoKQorICAg
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9VU0VSX01FU1NBR0VfSEFO
RExFUlMgUFJJVkFURSBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX0xFR0FDWV9FTkNSWVBURURfTUVESUEgUFVCTElDIE9OKQogICAgIFdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9JTlRMIFBVQkxJQyBPRkYpCiAgICAgV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1BVQkxJQ19TVUZGSVhfTElTVCBQUklW
QVRFIE9GRikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2Ug
Yi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlCmluZGV4IGE3MTZlYzZmMGVhMTBm
ZWJlMzliMjhiZjBjNWRmZWQ3MjNiYjYzMjEuLjhiMWMyODBmODYzYWMxMGUwMjQxYTY0NzFhMDlj
OTg1OWU3MDA2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21h
a2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQpAQCAtMjgsNyArMjgs
NyBAQCBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ1VSTCBPTikKIFNFVF9BTkRfRVhQT1NF
X1RPX0JVSUxEKFVTRV9URVhUVVJFX01BUFBFUiBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxE
KFVTRV9URVhUVVJFX01BUFBFUl9HTCBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9N
RURJQV9GT1VOREFUSU9OIE9OKQotU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RP
Ul9TT0NLRVRfU0VSVkVSIEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKQorU0VUX0FORF9FWFBPU0Vf
VE9fQlVJTEQoVVNFX0lOU1BFQ1RPUl9TT0NLRVRfU0VSVkVSICR7RU5BQkxFX1JFTU9URV9JTlNQ
RUNUT1J9KQogCiBzZXQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfM0QgT04pCiBzZXQoRU5BQkxF
X1dFQktJVCBPTikKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAwZDVj
ZmU0YTQyYmUxMzM2MDk3YmFmMTA1MmY4NzZhYTAwN2MwMDIzLi4zY2JhZDNhYmM0MTgzOTg3YTg1
NmZhMGRiYWVhZTAzYWM5OTU2NmNjIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTktMDUtMjAgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtp
cnNsaW5nQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5DYWlyb10gSW1wbGVtZW50IFJlbW90ZSBX
ZWIgSW5zcGVjdG9yIENsaWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NzQzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNXaW4uY21ha2U6CisgICAgICAgICog
U291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZToKKwogMjAxOS0wNS0wOSAgWGFuIEzD
s3BleiAgPHhhbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtDTWFrZV0gRGV0ZWN0IFNTRTIgYXQg
Y29tcGlsZSB0aW1lCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>