<?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>144174</bug_id>
          
          <creation_ts>2015-04-24 16:55:03 -0700</creation_ts>
          <short_desc>[WK2] Cookies set during media loading are not added to cookie store</short_desc>
          <delta_ts>2015-07-17 08:57:27 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>dbates</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1088412</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-24 16:55:03 -0700</bug_when>
    <thetext>[WK2] Cookies set during media loading are not added to cookie store</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088425</commentid>
    <comment_count>1</comment_count>
      <attachid>251597</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-24 17:15:02 -0700</bug_when>
    <thetext>Created attachment 251597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088427</commentid>
    <comment_count>2</comment_count>
      <attachid>251598</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-24 17:22:20 -0700</bug_when>
    <thetext>Created attachment 251598
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088432</commentid>
    <comment_count>3</comment_count>
      <attachid>251600</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-24 17:39:06 -0700</bug_when>
    <thetext>Created attachment 251600
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088547</commentid>
    <comment_count>4</comment_count>
      <attachid>251636</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-25 07:26:28 -0700</bug_when>
    <thetext>Created attachment 251636
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089757</commentid>
    <comment_count>5</comment_count>
      <attachid>251636</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-04-28 15:25:03 -0700</bug_when>
    <thetext>Comment on attachment 251636
Patch

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

&gt; Source/WebKit2/ChangeLog:12
&gt; +        To do so, WebKit will add a new shim onto the CFConnectionCreateWithProperties() function,

CF_URL_Connection.

Just for the record, this is quite fragile, because WebKit also makes requests from WebContent (ping requests, application cache). I don&apos;t know how to improve this, but we should at least have a comment in the code, to easier find the problem when it inevitably occurs.

&gt; Source/WebKit2/Shared/mac/CookieStorageShim.mm:52
&gt;  SOFT_LINK(CFNetwork, CFURLRequestGetURL, CFURLRef, (CFURLRequestRef request), (request))
&gt;  
&gt; +extern &quot;C&quot; CFURLConnectionRef CFURLConnectionCreateWithProperties(CFAllocatorRef alloc, CFURLRequestRef request, CFURLConnectionClient* client, CFDictionaryRef properties);

I don&apos;t know why the above is SOF_LINK&apos;ed, but if there is a reason, it probably applies to this function too.

&gt; Source/WebKit2/Shared/mac/CookieStorageShim.mm:79
&gt; +#if USE(CFNETWORK)

As discussed in person, this is false on Mac.

&gt; Source/WebKit2/Shared/mac/CookieStorageShimLibrary.h:34
&gt; +typedef struct CFURLConnectionClient_V1 CFURLConnectionClient;

V1?

&gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.h:47
&gt; +    static CFIndex maximumSupportedClientVersion();

I&apos;d just use a constant in the class, not a function.

&gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.mm:50
&gt; +    case 0:

Maybe we don&apos;t need the older versions? As you&apos;ll have to redefine these SPI structures in CFNetworkSPI.h, that&apos;s a lot of structure definitions to have.

&gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.mm:158
&gt; +        WebProcess::singleton().networkConnection()-&gt;connection()-&gt;send(Messages::NetworkConnectionToWebProcess::SetCookiesFromDOM(SessionID::defaultSessionID(), firstPartyForCookiesURL, requestURL, cookies), 0);

I don&apos;t think that &quot;FromDOM&quot; is appropriate here, it&apos;s decisively not from DOM.

Also, defaultSession :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089990</commentid>
    <comment_count>6</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-29 08:27:24 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 251636 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251636&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:12
&gt; &gt; +        To do so, WebKit will add a new shim onto the CFConnectionCreateWithProperties() function,
&gt; 
&gt; CF_URL_Connection.

Whoops, will fix.

&gt; Just for the record, this is quite fragile, because WebKit also makes
&gt; requests from WebContent (ping requests, application cache). I don&apos;t know
&gt; how to improve this, but we should at least have a comment in the code, to
&gt; easier find the problem when it inevitably occurs.

Okay, I&apos;ll look into this.

&gt; &gt; Source/WebKit2/Shared/mac/CookieStorageShim.mm:52
&gt; &gt;  SOFT_LINK(CFNetwork, CFURLRequestGetURL, CFURLRef, (CFURLRequestRef request), (request))
&gt; &gt;  
&gt; &gt; +extern &quot;C&quot; CFURLConnectionRef CFURLConnectionCreateWithProperties(CFAllocatorRef alloc, CFURLRequestRef request, CFURLConnectionClient* client, CFDictionaryRef properties);
&gt; 
&gt; I don&apos;t know why the above is SOF_LINK&apos;ed, but if there is a reason, it
&gt; probably applies to this function too.

We can&apos;t soft-link and dynamically interpose at the same time, which is why the first is SOFT_LINK&apos;d and the second is not.

&gt; &gt; Source/WebKit2/Shared/mac/CookieStorageShim.mm:79
&gt; &gt; +#if USE(CFNETWORK)
&gt; 
&gt; As discussed in person, this is false on Mac.

Okay, I&apos;ll work around this.

&gt; &gt; Source/WebKit2/Shared/mac/CookieStorageShimLibrary.h:34
&gt; &gt; +typedef struct CFURLConnectionClient_V1 CFURLConnectionClient;
&gt; 
&gt; V1?

Yes; this is verbatim.

&gt; &gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.h:47
&gt; &gt; +    static CFIndex maximumSupportedClientVersion();
&gt; 
&gt; I&apos;d just use a constant in the class, not a function.

Ok.

&gt; &gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.mm:50
&gt; &gt; +    case 0:
&gt; 
&gt; Maybe we don&apos;t need the older versions? As you&apos;ll have to redefine these SPI
&gt; structures in CFNetworkSPI.h, that&apos;s a lot of structure definitions to have.

That&apos;s very true. I&apos;ll look into using only the V6 version.

&gt; &gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.mm:158
&gt; &gt; +        WebProcess::singleton().networkConnection()-&gt;connection()-&gt;send(Messages::NetworkConnectionToWebProcess::SetCookiesFromDOM(SessionID::defaultSessionID(), firstPartyForCookiesURL, requestURL, cookies), 0);
&gt; 
&gt; I don&apos;t think that &quot;FromDOM&quot; is appropriate here, it&apos;s decisively not from
&gt; DOM.

I looked into this, and there is no difference in /setting/ cookies from the DOM vs. from HTTP; there is when retrieving cookies. I.e., the DOM can set cookies that it cannot read.

We could define a new message, SetCookiesFromHTTP, but the implementation would be identical to the DOM version.

&gt; Also, defaultSession :(

:(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090048</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-04-29 10:13:11 -0700</bug_when>
    <thetext>&gt; We can&apos;t soft-link and dynamically interpose at the same time, which is why the first is SOFT_LINK&apos;d and the second is not.

Why do we need to SOFT_LINK the CFURLRequestGetURL function?

&gt; I looked into this, and there is no difference in /setting/ cookies from the DOM vs. from HTTP

That&apos;s a bug, httponly cookies should not be overwritable from DOM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090049</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-04-29 10:14:03 -0700</bug_when>
    <thetext>(see rdar://problem/12427027)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109663</commentid>
    <comment_count>9</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2015-07-15 12:17:32 -0700</bug_when>
    <thetext>&lt;rdar://problem/20525970&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109930</commentid>
    <comment_count>10</comment_count>
      <attachid>256917</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-07-16 11:45:33 -0700</bug_when>
    <thetext>Created attachment 256917
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110087</commentid>
    <comment_count>11</comment_count>
      <attachid>256917</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-07-16 21:39:44 -0700</bug_when>
    <thetext>Comment on attachment 256917
Patch

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

This approach is clever, but I&apos;m concerned there&apos;s pitfalls.

&gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.mm:70
&gt; +    if (m_wrappedClient.copyDescription)
&gt; +        m_client.copyDescription = &amp;copyDescription;
&gt; +    if (m_wrappedClient.didReceiveData)
&gt; +        m_client.didReceiveData = &amp;didReceiveData;
&gt; +    if (m_wrappedClient.didStopBuffering)
&gt; +        m_client.didStopBuffering = &amp;didStopBuffering;

When setting up the proxy client, you only include functions that actually exist in the wrapped client. This is good!  But then...

&gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.mm:185
&gt; +void WebCFURLConnectionClientWrapper::didReceiveData(CFURLConnectionRef conn, CFDataRef data, CFIndex originalLength, const void *info)
&gt; +{
&gt; +    const WebCFURLConnectionClientWrapper* thisInfo = static_cast&lt;const WebCFURLConnectionClientWrapper*&gt;(info);
&gt; +    if (thisInfo-&gt;m_wrappedClient.didReceiveData)
&gt; +        thisInfo-&gt;m_wrappedClient.didReceiveData(conn, data, originalLength, thisInfo-&gt;m_wrappedClient.clientInfo);
&gt; +}

In each of the trivial callbacks, you verify that the wrapped client implements the method.

It implemented the method at construct time, which is all you should worry about. You can assert here if you&apos;re super paranoid, but please don&apos;t add branches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110088</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-07-16 21:40:00 -0700</bug_when>
    <thetext>(I have more comments coming, too)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110091</commentid>
    <comment_count>13</comment_count>
      <attachid>256917</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-07-16 21:45:51 -0700</bug_when>
    <thetext>Comment on attachment 256917
Patch

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

There&apos;s more details I didn&apos;t look into closely, will wait until the next rev that takes into account the feedback so far.

&gt; Source/WebCore/platform/spi/cf/CFURLConnectionSPI.h:27
&gt; +#ifndef CFURLConnectionSPI_h
&gt; +#define CFURLConnectionSPI_h

There&apos;s already a CFNetworkSPI.h that does some CFURLConnection stuff.

No real need to add this one as long as we already have the dumping ground.

&gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.mm:127
&gt; +    RetainPtr&lt;CFMutableURLRequestRef&gt; mutableRequest = adoptCF(CFURLRequestCreateMutableCopy(kCFAllocatorDefault, request));

You always create the mutable request...

&gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.mm:160
&gt; +    if (thisInfo-&gt;m_wrappedClient.willSendRequest)
&gt; +        return thisInfo-&gt;m_wrappedClient.willSendRequest(conn, mutableRequest.get(), response, thisInfo-&gt;m_wrappedClient.clientInfo);

...and always pass that one into the wrapped client, or...

&gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.mm:161
&gt; +    return mutableRequest.leakRef();

... then always return it.

We&apos;ve seen more than once that:
1 - Identity of the request passed in is important
2 - Churning through copies of CFURLRequests when not necessary is a perf hit.

Please take care to use the original request when there was no need to create the mutable one.

&gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.mm:173
&gt; +        WebProcess::singleton().networkConnection()-&gt;connection()-&gt;send(Messages::NetworkConnectionToWebProcess::SetCookiesFromDOM(thisInfo-&gt;m_sessionID, firstPartyForCookiesURL, requestURL, cookies), 0);

As of VERY recently, setCookiesFromDOM no longer behaves like receiving a set-cookie header from a resource response.

If we go through with this you&apos;ll need to add a new message for &quot;setting cookies from response set-cookie header&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110092</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-07-16 21:48:39 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I looked into this, and there is no difference in /setting/ cookies from the
&gt; DOM vs. from HTTP; there is when retrieving cookies. I.e., the DOM can set
&gt; cookies that it cannot read.
&gt; 
&gt; We could define a new message, SetCookiesFromHTTP, but the implementation
&gt; would be identical to the DOM version.

As I mentioned in my review feedback, this is not true, so you are once again established as a known liar. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110136</commentid>
    <comment_count>15</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-07-17 08:57:27 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 256917 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=256917&amp;action=review
&gt; 
&gt; This approach is clever, but I&apos;m concerned there&apos;s pitfalls.
&gt; 
&gt; &gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.mm:70
&gt; &gt; +    if (m_wrappedClient.copyDescription)
&gt; &gt; +        m_client.copyDescription = &amp;copyDescription;
&gt; &gt; +    if (m_wrappedClient.didReceiveData)
&gt; &gt; +        m_client.didReceiveData = &amp;didReceiveData;
&gt; &gt; +    if (m_wrappedClient.didStopBuffering)
&gt; &gt; +        m_client.didStopBuffering = &amp;didStopBuffering;
&gt; 
&gt; When setting up the proxy client, you only include functions that actually
&gt; exist in the wrapped client. This is good!  But then...
&gt; 
&gt; &gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.mm:185
&gt; &gt; +void WebCFURLConnectionClientWrapper::didReceiveData(CFURLConnectionRef conn, CFDataRef data, CFIndex originalLength, const void *info)
&gt; &gt; +{
&gt; &gt; +    const WebCFURLConnectionClientWrapper* thisInfo = static_cast&lt;const WebCFURLConnectionClientWrapper*&gt;(info);
&gt; &gt; +    if (thisInfo-&gt;m_wrappedClient.didReceiveData)
&gt; &gt; +        thisInfo-&gt;m_wrappedClient.didReceiveData(conn, data, originalLength, thisInfo-&gt;m_wrappedClient.clientInfo);
&gt; &gt; +}
&gt; 
&gt; In each of the trivial callbacks, you verify that the wrapped client
&gt; implements the method.
&gt; 
&gt; It implemented the method at construct time, which is all you should worry
&gt; about. You can assert here if you&apos;re super paranoid, but please don&apos;t add
&gt; branches.

Sure thing.

(In reply to comment #13)
&gt; Comment on attachment 256917 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=256917&amp;action=review
&gt; 
&gt; There&apos;s more details I didn&apos;t look into closely, will wait until the next
&gt; rev that takes into account the feedback so far.
&gt; 
&gt; &gt; Source/WebCore/platform/spi/cf/CFURLConnectionSPI.h:27
&gt; &gt; +#ifndef CFURLConnectionSPI_h
&gt; &gt; +#define CFURLConnectionSPI_h
&gt; 
&gt; There&apos;s already a CFNetworkSPI.h that does some CFURLConnection stuff.
&gt; 
&gt; No real need to add this one as long as we already have the dumping ground.

OK.

&gt; &gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.mm:127
&gt; &gt; +    RetainPtr&lt;CFMutableURLRequestRef&gt; mutableRequest = adoptCF(CFURLRequestCreateMutableCopy(kCFAllocatorDefault, request));
&gt; 
&gt; You always create the mutable request...
&gt; 
&gt; &gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.mm:160
&gt; &gt; +    if (thisInfo-&gt;m_wrappedClient.willSendRequest)
&gt; &gt; +        return thisInfo-&gt;m_wrappedClient.willSendRequest(conn, mutableRequest.get(), response, thisInfo-&gt;m_wrappedClient.clientInfo);
&gt; 
&gt; ...and always pass that one into the wrapped client, or...
&gt; 
&gt; &gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.mm:161
&gt; &gt; +    return mutableRequest.leakRef();
&gt; 
&gt; ... then always return it.
&gt; 
&gt; We&apos;ve seen more than once that:
&gt; 1 - Identity of the request passed in is important
&gt; 2 - Churning through copies of CFURLRequests when not necessary is a perf
&gt; hit.
&gt; 
&gt; Please take care to use the original request when there was no need to
&gt; create the mutable one.

Sure thing.

&gt; &gt; Source/WebKit2/Shared/mac/WebCFURLConnectionClientWrapper.mm:173
&gt; &gt; +        WebProcess::singleton().networkConnection()-&gt;connection()-&gt;send(Messages::NetworkConnectionToWebProcess::SetCookiesFromDOM(thisInfo-&gt;m_sessionID, firstPartyForCookiesURL, requestURL, cookies), 0);
&gt; 
&gt; As of VERY recently, setCookiesFromDOM no longer behaves like receiving a
&gt; set-cookie header from a resource response.
&gt; 
&gt; If we go through with this you&apos;ll need to add a new message for &quot;setting
&gt; cookies from response set-cookie header&quot;.

Ok.

(In reply to comment #14)
&gt; (In reply to comment #6)
&gt; &gt; I looked into this, and there is no difference in /setting/ cookies from the
&gt; &gt; DOM vs. from HTTP; there is when retrieving cookies. I.e., the DOM can set
&gt; &gt; cookies that it cannot read.
&gt; &gt; 
&gt; &gt; We could define a new message, SetCookiesFromHTTP, but the implementation
&gt; &gt; would be identical to the DOM version.
&gt; 
&gt; As I mentioned in my review feedback, this is not true, so you are once
&gt; again established as a known liar. :)

It was true at the time!  If the passage of time made old liars out of the young, then... :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251597</attachid>
            <date>2015-04-24 17:15:02 -0700</date>
            <delta_ts>2015-04-24 17:22:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144174-20150424171355.patch</filename>
            <type>text/plain</type>
            <size>37999</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMzc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMGJkMjcxZjYyYmY2NDA4
ODYyMTVhYzAwMjU4ODQ3N2I2NTYwNzE4MS4uOTdkOTg4ZTI5ODk2MjRjN2RkMDFkZWZhNmFmNTcz
YWQwOTljMzA3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDE1LTA0LTI0ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIENvb2tpZXMgc2V0
IGR1cmluZyBtZWRpYSBsb2FkaW5nIGFyZSBub3QgYWRkZWQgdG8gY29va2llIHN0b3JlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQxNzQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCBX
ZWJLaXQgaGFzIGFkZGVkIGEgc2hpbSB3aGVuIGNvb2tpZXMgYXJlIHJldHJpZXZlZCBmcm9tIHRo
ZSBjb29raWUgc3RvcmUsIGFuZAorICAgICAgICBpbnN0ZWFkLCBjb29raWVzIGFyZSByZXRyaWV2
ZWQgZnJvbSB0aGUgTmV0d29ya1Byb2Nlc3MuIEhvd2V2ZXIsIHdoZW4gY29va2llcyBhcmUgc2V0
CisgICAgICAgIHRocm91Z2ggYSBIVFRQIHJlc3BvbnNlLCBXZWJLaXQgbmV2ZXIgdXBkYXRlcyB0
aGUgTmV0d29ya1Byb2Nlc3Mgd2l0aCB0aG9zZSBuZXcgY29va2llcy4KKworICAgICAgICBUbyBk
byBzbywgV2ViS2l0IHdpbGwgYWRkIGEgbmV3IHNoaW0gb250byB0aGUgQ0ZDb25uZWN0aW9uQ3Jl
YXRlV2l0aFByb3BlcnRpZXMoKSBmdW5jdGlvbiwKKyAgICAgICAgd2hpY2ggd2lsbCByZXBsYWNl
IHRoZSBjbGllbnQgY2FsbGJhY2tzIHByb3ZpZGVkIGluIHRoYXQgZnVuY3Rpb24gd2l0aCBvdXIg
b3duLiBJbiB0aGUKKyAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlLCBpZiB0aGUgcmVzcG9uc2Ug
Y29udGFpbnMgYSAiU2V0LUNvb2tpZSIgaGVhZGVyLCB0aGUgY29va2llIHN0cmluZyB3aWxsCisg
ICAgICAgIGJlIHBhc3NlZCB0byB0aGUgTmV0d29ya1Byb2Nlc3MgZm9yIHN0b3JhZ2UuIER1ZSB0
byB0aGUgZXhpc3RpbmcgY29va2llIHJldHJpZXZhbCBzaGltLAorICAgICAgICB0aGVzZSBuZXcg
Y29va2llcyB3aWxsIGJlIGF2YWlsYWJsZSBkdXJpbmcgZnV0dXJlIG1lZGlhIEhUVFAgcmVxdWVz
dHMuCisKKyAgICAgICAgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciBpcyBhIGNsYXNz
IHdoaWNoIHN0b3JlcyBhIENGVVJMQ29ubmVjdGlvbkNsaWVudCBzdHJ1Y3QsIGFuZAorICAgICAg
ICByZXBsYWNlcyBpdCB3aXRoIGEgbmV3IHN0cnVjdC4gSW4gZWFjaCBvZiB0aGUgY2xpZW50IGNh
bGxiYWNrcywgdGhlIGNsYXNzIHdpbGwgY2FsbCB0aHJvdWdoCisgICAgICAgIHRvIHRoZSBvcmln
aW5hbCBoYW5kbGVyIGlmIHRoYXQgaGFuZGxlciBpcyB2YWxpZC4KKworICAgICAgICAqIFNoYXJl
ZC9tYWMvQ29va2llU3RvcmFnZVNoaW0ubW06CisgICAgICAgIChXZWJLaXQ6OndlYmtpdENvbm5l
Y3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcyk6IENyZWF0ZSBhIFdlYkNGVVJMQ29ubmVjdGlvbkNs
aWVudFdyYXBwZXIsIGFuZAorICAgICAgICAgICAgcmVwbGFjZSB0aGUgY2xpZW50IHBhcmFtZXRl
ciB3aXRoIHRoYXQgbmV3IHdyYXBwZXIuCisgICAgICAgIChXZWJLaXQ6OkNvb2tpZVN0b3JhZ2VT
aGltOjppbml0aWFsaXplKTogSW5pdGlhbGl6ZSB0aGUgbmV3IHNoaW0uCisgICAgICAgICogU2hh
cmVkL21hYy9Db29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwOgorICAgICAgICAoV2ViS2l0Ojpz
aGltQ0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMpOiBDYWxsIHRocm91Z2ggdG8g
dGhlIHNoaW0gbWV0aG9kLgorICAgICAgICAqIFNoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW1M
aWJyYXJ5Lmg6CisgICAgICAgICogU2hhcmVkL21hYy9XZWJDRlVSTENvbm5lY3Rpb25DbGllbnRX
cmFwcGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGll
bnRXcmFwcGVyOjpjcmVhdGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViQ0ZVUkxDb25uZWN0
aW9uQ2xpZW50V3JhcHBlci5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29u
bmVjdGlvbkNsaWVudFdyYXBwZXI6Om1heGltdW1TdXBwb3J0ZWRDbGllbnRWZXJzaW9uKTogVGhl
IHdyYXBwZXIgY2xhc3MKKyAgICAgICAgICAgIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIENGVVJM
Q29ubmVjdGlvbkNsaWVudF9WNiBvciBvbGRlci4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcik6
IENvcHkgdGhlIGNsaWVudAorICAgICAgICAgICAgY2FsbGJhY2sgcG9uaXRlcnMgaW50byB0aGUg
Y2xhc3MsIGFuZCBjb25zdHJ1Y3QgYSByZXBsYWNlbWVudCBjbGllbnQuCisgICAgICAgIChXZWJL
aXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6On5XZWJDRlVSTENvbm5lY3Rpb25D
bGllbnRXcmFwcGVyKTogUmVsZWFzZSB0aGUgd3JhcHBlZCBjbGllbnQuCisgICAgICAgIChXZWJL
aXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OnJldGFpbik6IENhbGwgcmVmKCku
CisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OnJlbGVh
c2UpOiBDYWxsIGRlcmVmKCkuCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNs
aWVudFdyYXBwZXI6OmNvcHlEZXNjcmlwdGlvbik6IFBhc3MgdGhyb3VnaCB0byB0aGUgd3JhcHBl
ZCBjbGllbnQuCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXI6OndpbGxTZW5kUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENv
bm5lY3Rpb25DbGllbnRXcmFwcGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOiBEaXR0by4gKEFsc28g
ZmV0Y2ggdGhlIG5ldyBjb29raWVzIGZyb20gdGhlIHJlc3BvbnNlLikKKyAgICAgICAgKFdlYktp
dDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZURhdGEpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlk
U3RvcEJ1ZmZlcmluZyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rp
b25DbGllbnRXcmFwcGVyOjpkaWRGaW5pc2hMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJL
aXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZEZhaWwpOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6d2lsbENhY2hl
UmVzcG9uc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xp
ZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZFNlbmRC
b2R5RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGll
bnRXcmFwcGVyOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpuZWVkTmV3Qm9keVN0cmVh
bSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFw
cGVyOjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktp
dDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6d2lsbFNlbmRSZXF1ZXN0Rm9yQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZURhdGFBcnJheSk6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpjbGllbnQpOiBT
aW1wbGUgZ2V0dGVyLgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajogQWRkIHRoZSBuZXcgZmlsZXMgdG8gdGhlIHByb2plY3QuCisKIDIwMTUtMDQtMDUgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIFNwaW5zIHNlZW4gaW4g
V0tTZXRBcHBsaWNhdGlvbkluZm9ybWF0aW9uSXRlbSwgc28gaXQgc2hvdWxkIG5vdCBiZSBjYWxs
ZWQgb24gdGhlIG1haW4gdGhyZWFkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL0Nvb2tpZVN0b3JhZ2VTaGltLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29r
aWVTdG9yYWdlU2hpbS5tbQppbmRleCAzYTQ2NTQyODQ0OTVmNmQ3MzMwODM1NWE4MDk2ZDkzNmM0
Yzc4ZjE4Li5mNTM2MWQzYjJjZTcwNzNjZTgxOGNhZjk5ZjY2YTVmZjdmNzRhYmZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW0ubW0KQEAgLTMxLDYg
KzMxLDcgQEAKICNpbmNsdWRlICJDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuaCIKICNpbmNsdWRl
ICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQ
cm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KQEAgLTQ4LDYgKzQ5LDgg
QEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGVVJMUmVxdWVzdCogQ0ZVUkxSZXF1ZXN0UmVmOwog
U09GVF9MSU5LX0ZSQU1FV09SSyhDRk5ldHdvcmspCiBTT0ZUX0xJTksoQ0ZOZXR3b3JrLCBDRlVS
TFJlcXVlc3RHZXRVUkwsIENGVVJMUmVmLCAoQ0ZVUkxSZXF1ZXN0UmVmIHJlcXVlc3QpLCAocmVx
dWVzdCkpCiAKK2V4dGVybiAiQyIgQ0ZVUkxDb25uZWN0aW9uUmVmIENGVVJMQ29ubmVjdGlvbkNy
ZWF0ZVdpdGhQcm9wZXJ0aWVzKENGQWxsb2NhdG9yUmVmIGFsbG9jLCBDRlVSTFJlcXVlc3RSZWYg
cmVxdWVzdCwgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50KiBjbGllbnQsIENGRGljdGlvbmFyeVJlZiBw
cm9wZXJ0aWVzKTsKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbnRlcmZhY2UgV0tO
U1VSTFNlc3Npb25Mb2NhbCA6IE5TT2JqZWN0CkBAIC03Myw2ICs3NiwxOCBAQCBzdGF0aWMgQ0ZE
aWN0aW9uYXJ5UmVmIHdlYktpdENvb2tpZVN0b3JhZ2VDb3B5UmVxdWVzdEhlYWRlckZpZWxkc0Zv
clVSTChDRkhUVFBDbwogICAgIHJldHVybiBDRkRpY3Rpb25hcnlDcmVhdGUoMCwgY29va2llS2V5
cywgY29va2llVmFsdWVzLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKIH0KIAorc3RhdGljIENGVVJMQ29ubmVjdGlv
blJlZiB3ZWJraXRDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMoQ0ZVUkxSZXF1ZXN0UmVm
IHJlcXVlc3QsIENGVVJMQ29ubmVjdGlvbkNsaWVudCogY2xpZW50LCBDRkRpY3Rpb25hcnlSZWYg
cHJvcGVydGllcykKK3sKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAgICBp
ZiAoIWNsaWVudCB8fCBjbGllbnQtPnZlcnNpb24gPiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRX
cmFwcGVyOjptYXhpbXVtU3VwcG9ydGVkQ2xpZW50VmVyc2lvbigpKQorICAgICAgICByZXR1cm4g
Q0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
cmVxdWVzdCwgY2xpZW50LCBwcm9wZXJ0aWVzKTsKKworICAgIFJlZjxXZWJDRlVSTENvbm5lY3Rp
b25DbGllbnRXcmFwcGVyPiB3cmFwcGVyID0gV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBl
cjo6Y3JlYXRlKGNsaWVudCk7CisgICAgcmV0dXJuIENGVVJMQ29ubmVjdGlvbkNyZWF0ZVdpdGhQ
cm9wZXJ0aWVzKGtDRkFsbG9jYXRvckRlZmF1bHQsIHJlcXVlc3QsIHdyYXBwZXItPmNsaWVudCgp
LCBwcm9wZXJ0aWVzKTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKK30KKwogQ29va2ll
U3RvcmFnZVNoaW0mIENvb2tpZVN0b3JhZ2VTaGltOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxDb29raWVTdG9yYWdlU2hpbT4gc3RvcmFnZTsKQEAgLTgxLDcgKzk2
LDkgQEAgQ29va2llU3RvcmFnZVNoaW0mIENvb2tpZVN0b3JhZ2VTaGltOjpzaW5nbGV0b24oKQog
CiB2b2lkIENvb2tpZVN0b3JhZ2VTaGltOjppbml0aWFsaXplKCkKIHsKLSAgICBDb29raWVTdG9y
YWdlU2hpbUNhbGxiYWNrcyBjYWxsYmFja3MgPSB7ICZ3ZWJLaXRDb29raWVTdG9yYWdlQ29weVJl
cXVlc3RIZWFkZXJGaWVsZHNGb3JVUkwgfTsKKyAgICBDb29raWVTdG9yYWdlU2hpbUNhbGxiYWNr
cyBjYWxsYmFja3MgPSB7ICZ3ZWJLaXRDb29raWVTdG9yYWdlQ29weVJlcXVlc3RIZWFkZXJGaWVs
ZHNGb3JVUkwKKyAgICAgICAgLCAmd2Via2l0Q29ubmVjdGlvbkNyZWF0ZVdpdGhQcm9wZXJ0aWVz
CisgICAgfTsKICAgICBDb29raWVTdG9yYWdlU2hpbUluaXRpYWxpemVGdW5jIGZ1bmMgPSByZWlu
dGVycHJldF9jYXN0PENvb2tpZVN0b3JhZ2VTaGltSW5pdGlhbGl6ZUZ1bmM+KGRsc3ltKFJUTERf
REVGQVVMVCwgIldlYktpdENvb2tpZVN0b3JhZ2VTaGltSW5pdGlhbGl6ZSIpKTsKICAgICBpZiAo
ZnVuYykKICAgICAgICAgZnVuYyhjYWxsYmFja3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwCmluZGV4IDY3N2RiMjdl
MWM5ZmQ3NGM5NGJiZTBhYmE3NGJkODhiMDEwNTczODguLjhjMWJiZjViODVkNWM0NWNjZjdiMTZj
OWRlNDhiMGE1MmQ0ODk4MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
Q29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL0Nvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAKQEAgLTMyLDYgKzMyLDggQEAKIAogZXh0
ZXJuICJDIiBDRkRpY3Rpb25hcnlSZWYgX0NGSFRUUENvb2tpZVN0b3JhZ2VDb3B5UmVxdWVzdEhl
YWRlckZpZWxkc0ZvclVSTChDRkFsbG9jYXRvclJlZiBpbkFsbG9jYXRvciwgQ0ZIVFRQQ29va2ll
U3RvcmFnZVJlZiBpbkNvb2tpZVN0b3JhZ2UsIENGVVJMUmVmIGluUmVxdWVzdFVSTCk7CiAKK2V4
dGVybiAiQyIgQ0ZVUkxDb25uZWN0aW9uUmVmIENGVVJMQ29ubmVjdGlvbkNyZWF0ZVdpdGhQcm9w
ZXJ0aWVzKENGQWxsb2NhdG9yUmVmIGFsbG9jLCBDRlVSTFJlcXVlc3RSZWYgcmVxdWVzdCwgQ0ZV
UkxDb25uZWN0aW9uQ2xpZW50KiBjbGllbnQsIENGRGljdGlvbmFyeVJlZiBwcm9wZXJ0aWVzKTsK
KwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGV4dGVybiAiQyIgdm9pZCBXZWJLaXRDb29raWVTdG9y
YWdlU2hpbUluaXRpYWxpemUoY29uc3QgQ29va2llU3RvcmFnZVNoaW1DYWxsYmFja3MmKTsKQEAg
LTc1LDYgKzc3LDMxIEBAIHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgc2hpbUNGSFRUUENvb2tpZVN0
b3JhZ2VDb3B5UmVxdWVzdEhlYWRlckZpZWxkc0ZvclVSTChDRkFsCiAKIERZTERfSU5URVJQT1NF
KHNoaW1DRkhUVFBDb29raWVTdG9yYWdlQ29weVJlcXVlc3RIZWFkZXJGaWVsZHNGb3JVUkwsIF9D
RkhUVFBDb29raWVTdG9yYWdlQ29weVJlcXVlc3RIZWFkZXJGaWVsZHNGb3JVUkwpOwogCitzdGF0
aWMgQ0ZVUkxDb25uZWN0aW9uUmVmIHNoaW1DRlVSTENvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVy
dGllcyhDRkFsbG9jYXRvclJlZiBhbGxvYywgQ0ZVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIENGVVJM
Q29ubmVjdGlvbkNsaWVudCogY2xpZW50LCBDRkRpY3Rpb25hcnlSZWYgcHJvcGVydGllcykKK3sK
KyAgICBTaGltUHJvdGVjdG9yIHByb3RlY3RvcjsKKworICAgIGRvIHsKKyAgICAgICAgLy8gUHJv
dGVjdCBhZ2FpbnN0IHVuaW5pdGlhbGl6ZWQgY2FsbGJhY2tzOgorICAgICAgICBpZiAoIWNvb2tp
ZVN0b3JhZ2VTaGltQ2FsbGJhY2tzLmNvb2tpZVN0b3JhZ2VDb3B5UmVxdWVzdEhlYWRlckZpZWxk
c0ZvclVSTCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIFByb3RlY3QgYWdhaW5z
dCBhY2NpZGVudGFsIHJlY3Vyc2lvbjoKKyAgICAgICAgaWYgKFNoaW1Qcm90ZWN0b3I6OmNvdW50
KCkgPiAxKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgQ0ZVUkxDb25uZWN0aW9uUmVm
IHJlc3VsdHMgPSBjb29raWVTdG9yYWdlU2hpbUNhbGxiYWNrcy5jb25uZWN0aW9uQ3JlYXRlV2l0
aFByb3BlcnRpZXMocmVxdWVzdCwgY2xpZW50LCBwcm9wZXJ0aWVzKTsKKyAgICAgICAgaWYgKCFy
ZXN1bHRzKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7Cisg
ICAgfSB3aGlsZSAoMCk7CisKKyAgICByZXR1cm4gQ0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFBy
b3BlcnRpZXMoYWxsb2MsIHJlcXVlc3QsIGNsaWVudCwgcHJvcGVydGllcyk7Cit9CisKK0RZTERf
SU5URVJQT1NFKHNoaW1DRlVSTENvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcywgQ0ZVUkxD
b25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMpOworCiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5KCJkZWZhdWx0IikpKQogdm9pZCBXZWJLaXRDb29raWVTdG9yYWdlU2hpbUluaXRpYWxpemUo
Y29uc3QgQ29va2llU3RvcmFnZVNoaW1DYWxsYmFja3MmIGNhbGxiYWNrcykKIHsKQEAgLTg3LDcg
KzExNCw3IEBAIHZvaWQgV2ViS2l0Q29va2llU3RvcmFnZVNoaW1Jbml0aWFsaXplKGNvbnN0IENv
b2tpZVN0b3JhZ2VTaGltQ2FsbGJhY2tzJiBjYWxsYmFjCiAKICAgICBjb29raWVTdG9yYWdlU2hp
bUNhbGxiYWNrcyA9IGNhbGxiYWNrczsKIH0KLSAgICAKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxF
KE5FVFdPUktfUFJPQ0VTUykgJiYgIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5oCmluZGV4IDMxMDhlMGEx
ZGY2N2JhNjFkYTk0ZjcyMmI1NTBmNGYxZWI0NDk5ZWYuLjMxMzY1NzcyY2MyZGJiZWU0ZTdmNTIw
ZTIxNzlmM2U2YWU3NWY1NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
Q29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21h
Yy9Db29raWVTdG9yYWdlU2hpbUxpYnJhcnkuaApAQCAtMjksMTEgKzI5LDE1IEBACiAjaWYgRU5B
QkxFKE5FVFdPUktfUFJPQ0VTUykKIAogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ0ZIVFRQQ29va2ll
U3RvcmFnZSogIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBf
Q0ZVUkxSZXF1ZXN0KiBDRlVSTFJlcXVlc3RSZWY7Cit0eXBlZGVmIHN0cnVjdCBfQ0ZVUkxDb25u
ZWN0aW9uKiBDRlVSTENvbm5lY3Rpb25SZWY7Cit0eXBlZGVmIHN0cnVjdCBDRlVSTENvbm5lY3Rp
b25DbGllbnRfVjEgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogc3RydWN0IENvb2tpZVN0b3JhZ2VTaGltQ2FsbGJhY2tzIHsKICAgICBDRkRpY3Rpb25hcnlS
ZWYgKCpjb29raWVTdG9yYWdlQ29weVJlcXVlc3RIZWFkZXJGaWVsZHNGb3JVUkwpKENGSFRUUENv
b2tpZVN0b3JhZ2VSZWYsIENGVVJMUmVmKTsKKyAgICBDRlVSTENvbm5lY3Rpb25SZWYgKCpjb25u
ZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMpKENGVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBDRlVS
TENvbm5lY3Rpb25DbGllbnQqIGNsaWVudCwgQ0ZEaWN0aW9uYXJ5UmVmIHByb3BlcnRpZXMpOwog
fTsKIAogdHlwZWRlZiB2b2lkICgqQ29va2llU3RvcmFnZVNoaW1Jbml0aWFsaXplRnVuYykoY29u
c3QgQ29va2llU3RvcmFnZVNoaW1DYWxsYmFja3MmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9tYWMvV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9XZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uN2VlZWNhNmRjYWZkMzM5OTFlOTczMDM4YWE4NTNlY2Y3MzRkNTI5YgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ0ZVUkxDb25uZWN0aW9u
Q2xpZW50V3JhcHBlci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXJfaAorI2RlZmluZSBXZWJDRlVSTENvbm5lY3Rp
b25DbGllbnRXcmFwcGVyX2gKKworI2luY2x1ZGUgPENGTmV0d29yay9DRlVSTENvbm5lY3Rpb24u
aD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyPiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVy
PiBjcmVhdGUoQ0ZVUkxDb25uZWN0aW9uQ2xpZW50KiB3cmFwcGVkQ2xpZW50KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBl
cih3cmFwcGVkQ2xpZW50KSk7CisgICAgfTsKKyAgICB+V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50
V3JhcHBlcigpOworCisgICAgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50KiBjbGllbnQoKTsKKworICAg
IHN0YXRpYyBDRkluZGV4IG1heGltdW1TdXBwb3J0ZWRDbGllbnRWZXJzaW9uKCk7CisKK3ByaXZh
dGU6CisgICAgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcihDRlVSTENvbm5lY3Rpb25D
bGllbnQqIHdyYXBwZWRDbGllbnQpOworCisgICAgc3RhdGljIGNvbnN0IHZvaWQqIHJldGFpbihj
b25zdCB2b2lkKiBpbmZvKTsKKyAgICBzdGF0aWMgdm9pZCByZWxlYXNlKGNvbnN0IHZvaWQqIGlu
Zm8pOworICAgIHN0YXRpYyBDRlN0cmluZ1JlZiBjb3B5RGVzY3JpcHRpb24oY29uc3Qgdm9pZCog
aW5mbyk7CisgICAgc3RhdGljIENGVVJMUmVxdWVzdFJlZiB3aWxsU2VuZFJlcXVlc3QoQ0ZVUkxD
b25uZWN0aW9uUmVmLCBDRlVSTFJlcXVlc3RSZWYsIENGVVJMUmVzcG9uc2VSZWYsIGNvbnN0IHZv
aWQgKmluZm8pOworICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShDRlVSTENvbm5l
Y3Rpb25SZWYsIENGVVJMUmVzcG9uc2VSZWYsIGNvbnN0IHZvaWQgKmluZm8pOworICAgIHN0YXRp
YyB2b2lkIGRpZFJlY2VpdmVEYXRhKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZEYXRhUmVmLCBDRklu
ZGV4IG9yaWdpbmFsTGVuZ3RoLCBjb25zdCB2b2lkICppbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBk
aWRTdG9wQnVmZmVyaW5nKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZEYXRhUmVmLCBDRkluZGV4IG9y
aWdpbmFsTGVuZ3RoLCBjb25zdCB2b2lkICppbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nKENGVVJMQ29ubmVjdGlvblJlZiwgY29uc3Qgdm9pZCAqaW5mbyk7CisgICAgc3Rh
dGljIHZvaWQgZGlkRmFpbChDRlVSTENvbm5lY3Rpb25SZWYsIENGRXJyb3JSZWYsIGNvbnN0IHZv
aWQgKmluZm8pOworICAgIHN0YXRpYyBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHdpbGxDYWNoZVJl
c3BvbnNlKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiwgY29uc3Qg
dm9pZCAqaW5mbyk7CisgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZVUkxBdXRoQ2hhbGxlbmdlUmVmLCBjb25zdCB2
b2lkICppbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRTZW5kQm9keURhdGEoQ0ZVUkxDb25uZWN0
aW9uUmVmLCBDRkluZGV4IGJ5dGVzV3JpdHRlbiwgQ0ZJbmRleCB0b3RhbEJ5dGVzV3JpdHRlbiwg
Q0ZJbmRleCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlLCBjb25zdCB2b2lkICppbmZvKTsKKyAg
ICBzdGF0aWMgQm9vbGVhbiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShDRlVSTENvbm5lY3Rp
b25SZWYsIGNvbnN0IHZvaWQgKmluZm8pOworICAgIHN0YXRpYyBDRlJlYWRTdHJlYW1SZWYgbmVl
ZE5ld0JvZHlTdHJlYW0oQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTFJlcXVlc3RSZWYsIGNvbnN0
IHZvaWQgKmluZm8pOworICAgIHN0YXRpYyBCb29sZWFuIGNhblJlc3BvbmRUb1Byb3RlY3Rpb25T
cGFjZShDRlVSTENvbm5lY3Rpb25SZWYsIENGVVJMUHJvdGVjdGlvblNwYWNlUmVmLCBjb25zdCB2
b2lkKiBpbmZvKTsKKyAgICBzdGF0aWMgdm9pZCB3aWxsU2VuZFJlcXVlc3RGb3JBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShDRlVSTENvbm5lY3Rpb25SZWYsIENGVVJMQXV0aENoYWxsZW5nZVJlZiwg
Y29uc3Qgdm9pZCAqaW5mbyk7CisgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZURhdGFBcnJheShD
RlVSTENvbm5lY3Rpb25SZWYsIENGQXJyYXlSZWYsIGNvbnN0IHZvaWQgKmluZm8pOworCisgICAg
Q0ZVUkxDb25uZWN0aW9uQ2xpZW50X1Y2IG1fd3JhcHBlZENsaWVudCB7IH07CisgICAgQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50X1Y2IG1fY2xpZW50IHsgfTsKK307CisKK30KKworI2VuZGlmIC8vIFdl
YkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9XZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLm1tIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9XZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmM5YmJkM2I3ZjRjZjNkYzQxNzc5OTFlZWJiNmY3OGVmZTg3MmIxZjEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNGVVJMQ29ubmVjdGlv
bkNsaWVudFdyYXBwZXIubW0KQEAgLTAsMCArMSwyNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLmgi
CisKKyNpbXBvcnQgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCisjaW1wb3J0ICJO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbXBvcnQgIldlYlByb2Nlc3MuaCIKKyNpbXBv
cnQgPFdlYkNvcmUvVVJMLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitDRkluZGV4IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6
Om1heGltdW1TdXBwb3J0ZWRDbGllbnRWZXJzaW9uKCkKK3sKKyAgICByZXR1cm4gNjsKK30KKwor
V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50
V3JhcHBlcihDRlVSTENvbm5lY3Rpb25DbGllbnQqIHdyYXBwZWRDbGllbnQpCit7CisgICAgc3dp
dGNoICh3cmFwcGVkQ2xpZW50LT52ZXJzaW9uKSB7CisgICAgY2FzZSAwOgorICAgICAgICBtZW1j
cHkoJm1fd3JhcHBlZENsaWVudCwgd3JhcHBlZENsaWVudCwgc2l6ZW9mKENGVVJMQ29ubmVjdGlv
bkNsaWVudF9WMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIG1lbWNw
eSgmbV93cmFwcGVkQ2xpZW50LCB3cmFwcGVkQ2xpZW50LCBzaXplb2YoQ0ZVUkxDb25uZWN0aW9u
Q2xpZW50X1YxKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgbWVtY3B5
KCZtX3dyYXBwZWRDbGllbnQsIHdyYXBwZWRDbGllbnQsIHNpemVvZihDRlVSTENvbm5lY3Rpb25D
bGllbnRfVjIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgICBtZW1jcHko
Jm1fd3JhcHBlZENsaWVudCwgd3JhcHBlZENsaWVudCwgc2l6ZW9mKENGVVJMQ29ubmVjdGlvbkNs
aWVudF9WMykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIG1lbWNweSgm
bV93cmFwcGVkQ2xpZW50LCB3cmFwcGVkQ2xpZW50LCBzaXplb2YoQ0ZVUkxDb25uZWN0aW9uQ2xp
ZW50X1Y0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNToKKyAgICAgICAgbWVtY3B5KCZt
X3dyYXBwZWRDbGllbnQsIHdyYXBwZWRDbGllbnQsIHNpemVvZihDRlVSTENvbm5lY3Rpb25DbGll
bnRfVjUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA2OgorICAgICAgICBtZW1jcHkoJm1f
d3JhcHBlZENsaWVudCwgd3JhcHBlZENsaWVudCwgc2l6ZW9mKENGVVJMQ29ubmVjdGlvbkNsaWVu
dF9WNikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBtX2NsaWVudC52ZXJzaW9uID0gNjsKKyAgICBtX2Ns
aWVudC5jbGllbnRJbmZvID0gdGhpczsKKyAgICBtX2NsaWVudC5yZXRhaW4gPSAmcmV0YWluOwor
ICAgIG1fY2xpZW50LnJlbGVhc2UgPSAmcmVsZWFzZTsKKyAgICBtX2NsaWVudC5kaWRSZWNlaXZl
UmVzcG9uc2UgPSAmZGlkUmVjZWl2ZVJlc3BvbnNlOworCisgICAgaWYgKG1fd3JhcHBlZENsaWVu
dC5jb3B5RGVzY3JpcHRpb24pCisgICAgICAgIG1fY2xpZW50LmNvcHlEZXNjcmlwdGlvbiA9ICZj
b3B5RGVzY3JpcHRpb247CisgICAgaWYgKG1fd3JhcHBlZENsaWVudC53aWxsU2VuZFJlcXVlc3Qp
CisgICAgICAgIG1fY2xpZW50LndpbGxTZW5kUmVxdWVzdCA9ICZ3aWxsU2VuZFJlcXVlc3Q7Cisg
ICAgaWYgKG1fd3JhcHBlZENsaWVudC5kaWRSZWNlaXZlRGF0YSkKKyAgICAgICAgbV9jbGllbnQu
ZGlkUmVjZWl2ZURhdGEgPSAmZGlkUmVjZWl2ZURhdGE7CisgICAgaWYgKG1fd3JhcHBlZENsaWVu
dC5kaWRTdG9wQnVmZmVyaW5nKQorICAgICAgICBtX2NsaWVudC5kaWRTdG9wQnVmZmVyaW5nID0g
JmRpZFN0b3BCdWZmZXJpbmc7CisgICAgaWYgKG1fd3JhcHBlZENsaWVudC5kaWRGaW5pc2hMb2Fk
aW5nKQorICAgICAgICBtX2NsaWVudC5kaWRGaW5pc2hMb2FkaW5nID0gJmRpZEZpbmlzaExvYWRp
bmc7CisgICAgaWYgKG1fd3JhcHBlZENsaWVudC5kaWRGYWlsKQorICAgICAgICBtX2NsaWVudC5k
aWRGYWlsID0gJmRpZEZhaWw7CisgICAgaWYgKG1fd3JhcHBlZENsaWVudC53aWxsQ2FjaGVSZXNw
b25zZSkKKyAgICAgICAgbV9jbGllbnQud2lsbENhY2hlUmVzcG9uc2UgPSAmd2lsbENhY2hlUmVz
cG9uc2U7CisgICAgaWYgKG1fd3JhcHBlZENsaWVudC5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpCisgICAgICAgIG1fY2xpZW50LmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSA9ICZkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CisgICAgaWYgKG1fd3Jh
cHBlZENsaWVudC5kaWRTZW5kQm9keURhdGEpCisgICAgICAgIG1fY2xpZW50LmRpZFNlbmRCb2R5
RGF0YSA9ICZkaWRTZW5kQm9keURhdGE7CisgICAgaWYgKG1fd3JhcHBlZENsaWVudC5zaG91bGRV
c2VDcmVkZW50aWFsU3RvcmFnZSkKKyAgICAgICAgbV9jbGllbnQuc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UgPSAmc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2U7CisgICAgaWYgKG1fd3JhcHBl
ZENsaWVudC5uZWVkTmV3Qm9keVN0cmVhbSkKKyAgICAgICAgbV9jbGllbnQubmVlZE5ld0JvZHlT
dHJlYW0gPSAmbmVlZE5ld0JvZHlTdHJlYW07CisgICAgaWYgKG1fd3JhcHBlZENsaWVudC5jYW5S
ZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UpCisgICAgICAgIG1fY2xpZW50LmNhblJlc3BvbmRUb1By
b3RlY3Rpb25TcGFjZSA9ICZjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2U7CisgICAgaWYgKG1f
d3JhcHBlZENsaWVudC53aWxsU2VuZFJlcXVlc3RGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkK
KyAgICAgICAgbV9jbGllbnQud2lsbFNlbmRSZXF1ZXN0Rm9yQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UgPSAmd2lsbFNlbmRSZXF1ZXN0Rm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CisgICAgaWYg
KG1fd3JhcHBlZENsaWVudC5kaWRSZWNlaXZlRGF0YUFycmF5KQorICAgICAgICBtX2NsaWVudC5k
aWRSZWNlaXZlRGF0YUFycmF5ID0gJmRpZFJlY2VpdmVEYXRhQXJyYXk7CisKKyAgICBpZiAobV93
cmFwcGVkQ2xpZW50LnJldGFpbikKKyAgICAgICAgbV93cmFwcGVkQ2xpZW50LnJldGFpbihtX3dy
YXBwZWRDbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK1dlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdy
YXBwZXI6On5XZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKCkKK3sKKyAgICBpZiAobV93
cmFwcGVkQ2xpZW50LnJlbGVhc2UpCisgICAgICAgIG1fd3JhcHBlZENsaWVudC5yZWxlYXNlKG1f
d3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKK30KKworY29uc3Qgdm9pZCogV2ViQ0ZVUkxDb25u
ZWN0aW9uQ2xpZW50V3JhcHBlcjo6cmV0YWluKGNvbnN0IHZvaWQqIGluZm8pCit7CisgICAgV2Vi
Q0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0luZm8gPSBzdGF0aWNfY2FzdDxXZWJD
RlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4oY29uc3RfY2FzdDx2b2lkKj4oaW5mbykpOwor
ICAgIHRoaXNJbmZvLT5yZWYoKTsKKyAgICByZXR1cm4gdGhpc0luZm87Cit9CisKK3ZvaWQgV2Vi
Q0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6cmVsZWFzZShjb25zdCB2b2lkKiBpbmZvKQor
eworICAgIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGlj
X2Nhc3Q8V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+
KGluZm8pKTsKKyAgICB0aGlzSW5mby0+ZGVyZWYoKTsKK30KKworQ0ZTdHJpbmdSZWYgV2ViQ0ZV
UkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6Y29weURlc2NyaXB0aW9uKGNvbnN0IHZvaWQqIGlu
Zm8pCit7CisgICAgY29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0lu
Zm8gPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4o
aW5mbyk7CisgICAgaWYgKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY29weURlc2NyaXB0aW9u
KQorICAgICAgICByZXR1cm4gdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5jb3B5RGVzY3JpcHRp
b24odGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworQ0ZVUkxSZXF1ZXN0UmVmIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXI6OndpbGxTZW5kUmVxdWVzdChDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZVUkxSZXF1ZXN0
UmVmIHJlcXVlc3QsIENGVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIGNvbnN0IHZvaWQgKmluZm8p
Cit7CisgICAgY29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0luZm8g
PSBzdGF0aWNfY2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4oaW5m
byk7CisgICAgaWYgKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQud2lsbFNlbmRSZXF1ZXN0KQor
ICAgICAgICByZXR1cm4gdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC53aWxsU2VuZFJlcXVlc3Qo
Y29ubiwgcmVxdWVzdCwgcmVzcG9uc2UsIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2xpZW50
SW5mbyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViQ0ZVUkxDb25uZWN0aW9u
Q2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKENGVVJMQ29ubmVjdGlvblJlZiBjb25u
LCBDRlVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBjb25zdCB2b2lkICppbmZvKQoreworICAgIGNv
bnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nh
c3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworCisgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZkNvb2tpZXMgPSBhZG9wdENGKENGSFRUUE1lc3NhZ2VD
b3B5SGVhZGVyRmllbGRWYWx1ZShDRlVSTFJlc3BvbnNlR2V0SFRUUFJlc3BvbnNlKHJlc3BvbnNl
KSwgQ0ZTVFIoIlNldC1Db29raWUiKSkpOworICAgIGlmIChjZkNvb2tpZXMgJiYgQ0ZTdHJpbmdH
ZXRMZW5ndGgoY2ZDb29raWVzLmdldCgpKSkgeworICAgICAgICBTdHJpbmcgY29va2llcyA9IGNm
Q29va2llcy5nZXQoKTsKKyAgICAgICAgVVJMIHJlcXVlc3RVUkwgPSBDRlVSTFJlc3BvbnNlR2V0
VVJMKHJlc3BvbnNlKTsKKyAgICAgICAgVVJMIGZpcnN0UGFydHlGb3JDb29raWVzVVJMOworICAg
ICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXRD
b29raWVzRnJvbURPTShTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgZmlyc3RQYXJ0eUZv
ckNvb2tpZXNVUkwsIHJlcXVlc3RVUkwsIGNvb2tpZXMpLCAwKTsKKyAgICB9CisKKyAgICBpZiAo
dGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRSZWNlaXZlUmVzcG9uc2UpCisgICAgICAgIHRo
aXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbm4sIHJlc3BvbnNl
LCB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYkNG
VVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZFJlY2VpdmVEYXRhKENGVVJMQ29ubmVjdGlv
blJlZiBjb25uLCBDRkRhdGFSZWYgZGF0YSwgQ0ZJbmRleCBvcmlnaW5hbExlbmd0aCwgY29uc3Qg
dm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVy
KiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdy
YXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRSZWNl
aXZlRGF0YSkKKyAgICAgICAgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRSZWNlaXZlRGF0
YShjb25uLCBkYXRhLCBvcmlnaW5hbExlbmd0aCwgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5j
bGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpk
aWRTdG9wQnVmZmVyaW5nKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRkRhdGFSZWYgYnVmZmVy
ZWREYXRhLCBDRkluZGV4IG9yaWdpbmFsTGVuZ3RoLCBjb25zdCB2b2lkICppbmZvKQoreworICAg
IGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworICAg
IGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmRpZFN0b3BCdWZmZXJpbmcpCisgICAgICAg
IHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuZGlkU3RvcEJ1ZmZlcmluZyhjb25uLCBidWZmZXJl
ZERhdGEsIG9yaWdpbmFsTGVuZ3RoLCB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNsaWVudElu
Zm8pOworfQorCit2b2lkIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZEZpbmlz
aExvYWRpbmcoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIGNvbnN0IHZvaWQgKmluZm8pCit7Cisg
ICAgY29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0luZm8gPSBzdGF0
aWNfY2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4oaW5mbyk7Cisg
ICAgaWYgKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuZGlkRmluaXNoTG9hZGluZykKKyAgICAg
ICAgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRGaW5pc2hMb2FkaW5nKGNvbm4sIHRoaXNJ
bmZvLT5tX3dyYXBwZWRDbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViQ0ZVUkxDb25u
ZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlkRmFpbChDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZF
cnJvclJlZiBlcnJvciwgY29uc3Qgdm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENv
bm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNG
VVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1f
d3JhcHBlZENsaWVudC5kaWRGYWlsKQorICAgICAgICB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50
LmRpZEZhaWwoY29ubiwgZXJyb3IsIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2xpZW50SW5m
byk7Cit9CisKK0NGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50
V3JhcHBlcjo6d2lsbENhY2hlUmVzcG9uc2UoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGQ2Fj
aGVkVVJMUmVzcG9uc2VSZWYgY2FjaGVkUmVzcG9uc2UsIGNvbnN0IHZvaWQgKmluZm8pCit7Cisg
ICAgY29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0luZm8gPSBzdGF0
aWNfY2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4oaW5mbyk7Cisg
ICAgaWYgKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQud2lsbENhY2hlUmVzcG9uc2UpCisgICAg
ICAgIHJldHVybiB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LndpbGxDYWNoZVJlc3BvbnNlKGNv
bm4sIGNhY2hlZFJlc3BvbnNlLCB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8p
OworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVu
dFdyYXBwZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShDRlVSTENvbm5lY3Rp
b25SZWYgY29ubiwgQ0ZVUkxBdXRoQ2hhbGxlbmdlUmVmIGNoYWxsZW5nZSwgY29uc3Qgdm9pZCAq
aW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0aGlz
SW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIq
PihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UpCisgICAgICAgIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQu
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbm4sIGNoYWxsZW5nZSwgdGhpc0lu
Zm8tPm1fd3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJDRlVSTENvbm5l
Y3Rpb25DbGllbnRXcmFwcGVyOjpkaWRTZW5kQm9keURhdGEoQ0ZVUkxDb25uZWN0aW9uUmVmIGNv
bm4sIENGSW5kZXggYnl0ZXNXcml0dGVuLCBDRkluZGV4IHRvdGFsQnl0ZXNXcml0dGVuLCBDRklu
ZGV4IHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUsIGNvbnN0IHZvaWQgKmluZm8pCit7CisgICAg
Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0luZm8gPSBzdGF0aWNf
Y2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4oaW5mbyk7CisgICAg
aWYgKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuZGlkU2VuZEJvZHlEYXRhKQorICAgICAgICB0
aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmRpZFNlbmRCb2R5RGF0YShjb25uLCBieXRlc1dyaXR0
ZW4sIHRvdGFsQnl0ZXNXcml0dGVuLCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlLCB0aGlzSW5m
by0+bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworfQorCitCb29sZWFuIFdlYkNGVVJMQ29u
bmVjdGlvbkNsaWVudFdyYXBwZXI6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKENGVVJMQ29u
bmVjdGlvblJlZiBjb25uLCBjb25zdCB2b2lkICppbmZvKQoreworICAgIGNvbnN0IFdlYkNGVVJM
Q29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2Vi
Q0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworICAgIGlmICh0aGlzSW5mby0+
bV93cmFwcGVkQ2xpZW50LnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQorICAgICAgICByZXR1
cm4gdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShj
b25uLCB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworICAgIHJldHVybiBm
YWxzZTsKK30KKworQ0ZSZWFkU3RyZWFtUmVmIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXI6Om5lZWROZXdCb2R5U3RyZWFtKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRlVSTFJlcXVl
c3RSZWYgcmVxdWVzdCwgY29uc3Qgdm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENv
bm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNG
VVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1f
d3JhcHBlZENsaWVudC5uZWVkTmV3Qm9keVN0cmVhbSkKKyAgICAgICAgcmV0dXJuIHRoaXNJbmZv
LT5tX3dyYXBwZWRDbGllbnQubmVlZE5ld0JvZHlTdHJlYW0oY29ubiwgcmVxdWVzdCwgdGhpc0lu
Zm8tPm1fd3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworQm9vbGVhbiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpjYW5SZXNwb25kVG9Q
cm90ZWN0aW9uU3BhY2UoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGVVJMUHJvdGVjdGlvblNw
YWNlUmVmIHByb3RlY3Rpb25TcGFjZSwgY29uc3Qgdm9pZCogaW5mbykKK3sKKyAgICBjb25zdCBX
ZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNv
bnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhp
c0luZm8tPm1fd3JhcHBlZENsaWVudC5jYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UpCisgICAg
ICAgIHJldHVybiB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNhblJlc3BvbmRUb1Byb3RlY3Rp
b25TcGFjZShjb25uLCBwcm90ZWN0aW9uU3BhY2UsIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQu
Y2xpZW50SW5mbyk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkNGVVJMQ29ubmVj
dGlvbkNsaWVudFdyYXBwZXI6OndpbGxTZW5kUmVxdWVzdEZvckF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2hhbGxl
bmdlLCBjb25zdCB2b2lkICppbmZvKQoreworICAgIGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNs
aWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0
aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworICAgIGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xp
ZW50LndpbGxTZW5kUmVxdWVzdEZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQorICAgICAgICB0
aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LndpbGxTZW5kUmVxdWVzdEZvckF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKGNvbm4sIGNoYWxsZW5nZSwgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5jbGll
bnRJbmZvKTsKK30KKwordm9pZCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpkaWRS
ZWNlaXZlRGF0YUFycmF5KENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRkFycmF5UmVmIGRhdGFB
cnJheSwgY29uc3Qgdm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25D
bGllbnRXcmFwcGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNGVVJMQ29ubmVj
dGlvbkNsaWVudFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1fd3JhcHBlZENs
aWVudC5kaWRSZWNlaXZlRGF0YUFycmF5KQorICAgICAgICB0aGlzSW5mby0+bV93cmFwcGVkQ2xp
ZW50LmRpZFJlY2VpdmVEYXRhQXJyYXkoY29ubiwgZGF0YUFycmF5LCB0aGlzSW5mby0+bV93cmFw
cGVkQ2xpZW50LmNsaWVudEluZm8pOworfQorCitDRlVSTENvbm5lY3Rpb25DbGllbnQqIFdlYkNG
VVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmNsaWVudCgpCit7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Q0ZVUkxDb25uZWN0aW9uQ2xpZW50Kj4oJm1fY2xpZW50KTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGQ5Mzc2YjYxOGQ5NjdlMzk4ZDRjOGY0NWNjNGYxM2FlYWFmMzA0OTIuLmM2MTEyNmE5ODkw
YzM2ODE0YTViYTY1MjE0N2UyOWUwOGY2NGE3YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2OTMsNiArMTY5Myw3IEBACiAJ
CUNEMTlBMjZFMUExM0U4MzQwMDhENjUwRSAvKiBXZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QxOUEyNkEx
QTEzRTgyMTAwOEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi87IH07CiAJ
CUNENUM2NkEwMTM0QjlEMzgwMDRGRTJBOCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VGdWxsU2NyZWVu
Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENENUM2NjlFMTM0QjlEMzYwMDRGRTJBOCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VGdWxsU2NyZWVu
Q2xpZW50LmNwcCAqLzsgfTsKIAkJQ0Q1QzY2QTExMzRCOUQzODAwNEZFMkE4IC8qIEluamVjdGVk
QnVuZGxlUGFnZUZ1bGxTY3JlZW5DbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENENUM2NjlGMTM0QjlEMzcwMDRGRTJBOCAvKiBJbmplY3RlZEJ1
bmRsZVBhZ2VGdWxsU2NyZWVuQ2xpZW50LmggKi87IH07CisJCUNENjI0QTVBMUFFMDkxMDAwMEEz
MTgyRSAvKiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDYyNEE1ODFBRTA5MTAwMDBBMzE4MkUg
LyogV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5oICovOyB9OwogCQlDRDY3RDMwRTE1
QzA4RjlBMDA4NDNBREYgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q2
N0QzMDgxNUMwN0JFMDAwODQzQURGIC8qIEluamVjdGVkQnVuZGxlUGFnZURpYWdub3N0aWNMb2dn
aW5nQ2xpZW50LmNwcCAqLzsgfTsKIAkJQ0Q2Rjc1RjQxMzFCNjZEMDAwRDZCMjFFIC8qIFdlYkZ1
bGxTY3JlZW5NYW5hZ2VyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0Q3M0JBM0UxMzFBMkU4QTAwRUVERUQyIC8qIFdlYkZ1bGxTY3JlZW5N
YW5hZ2VyUHJveHkuY3BwICovOyB9OwogCQlDRDczQkE0NzEzMUFDQzlBMDBFRURFRDIgLyogV2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDczQkE0NTEzMUFDQzg4MDBFRURFRDIg
LyogV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBA
IC0xNzAzLDYgKzE3MDQsNyBAQAogCQlDREMzODMwODE3MjExODkwMDA4QTJGQzMgLyogV2ViUHJv
Y2Vzc1NoaW0uZHlsaWIgaW4gQ29weSBXZWJQcm9jZXNzU2hpbSAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREMzODMwNjE3MjExNzk5MDA4QTJGQzMgLyogV2ViUHJvY2Vzc1No
aW0uZHlsaWIgKi87IH07CiAJCUNEQzM4MzBDMTcyMTIyODIwMDhBMkZDMyAvKiBDb29raWVTdG9y
YWdlU2hpbUxpYnJhcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQzM4MzBCMTcyMTIxQ0UwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbUxpYnJh
cnkuaCAqLzsgfTsKIAkJQ0RDMzgzMTAxNzIxMjQ0MDAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VT
aGltLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RD
MzgzMEQxNzIxMjQyRDAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltLm1tICovOyB9OworCQlD
REM0RUM0NjFBRTZBOTAwMDA5QUNCRDEgLyogV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBl
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENjI0
QTU3MUFFMDkxMDAwMEEzMTgyRSAvKiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLm1t
ICovOyB9OwogCQlDRENBODVDODEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQ0E4NUM2MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyLm1tICovOyB9OwogCQlDRENBODVDOTEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0RDQTg1QzcxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIuaCAqLzsgfTsKIAkJQ0RFNkUyRDMxOUY3MzFDNDAwQkE5Njg4IC8qIFdlYk9yaWdp
bkRhdGFNYW5hZ2VyU3VwcGxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RFNkUyRDIxOUY3MzFDNDAwQkE5Njg4IC8qIFdlYk9yaWdpbkRhdGFN
YW5hZ2VyU3VwcGxlbWVudC5oICovOyB9OwpAQCAtMzk0MSw2ICszOTQzLDggQEAKIAkJQ0QxOUEy
NkExQTEzRTgyMTAwOEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENUM2NjlFMTM0QjlEMzYwMDRGRTJBOCAv
KiBJbmplY3RlZEJ1bmRsZVBhZ2VGdWxsU2NyZWVuQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZUZ1bGxTY3JlZW5DbGllbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDVDNjY5RjEzNEI5RDM3MDA0RkUy
QTggLyogSW5qZWN0ZWRCdW5kbGVQYWdlRnVsbFNjcmVlbkNsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZVBhZ2VGdWxsU2NyZWVuQ2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNENjI0QTU3MUFFMDkxMDAwMEEzMTgyRSAv
KiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q2MjRBNTgxQUUwOTEwMDAwQTMxODJFIC8q
IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRDY3RDMwODE1QzA3QkUwMDA4NDNBREYgLyogSW5qZWN0ZWRC
dW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDY3RDMwOTE1QzA3QkUwMDA4
NDNBREYgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q3M0JBMzcx
MzFBMjlGRTAwRUVERUQyIC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcDsgcGF0aCA9
IEZ1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNjU2OSw2ICs2NTczLDggQEAKIAkJCQlCQ0UyMzI2MjEyMkM2Q0YzMDBENUMz
NUEgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tICovLAogCQkJCUJDMTExQjVCMTEyRjYy
OTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkuaCAqLywKIAkJCQlCQzExMUI1QzExMkY2Mjk4
MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5Lm1tICovLAorCQkJCUNENjI0QTU3MUFFMDkxMDAw
MEEzMTgyRSAvKiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLm1tICovLAorCQkJCUNE
NjI0QTU4MUFFMDkxMDAwMEEzMTgyRSAvKiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVy
LmggKi8sCiAJCQkJOTA1NjIwRTUxMkJDMjQ3NjAwMDc5OUI2IC8qIFdlYk1lbW9yeVNhbXBsZXIu
bWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CkBAIC04Mjg0LDYgKzgyOTAsNyBAQAog
CQkJCTFBRkE0QjhDMUE2NUExRDAwMDZDNEFCNCAvKiBXZWJQcm9jZXNzTGlmZXRpbWVUcmFja2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUU4NDlDODEzNjhEOTM5MDAzOEQ0ODEgLyogV0tJbnNw
ZWN0b3JQcml2YXRlTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUE5RTEwQjEzMTVDRDE4MDA5
RTcwMzEgLyogV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlD
RDYyNEE1QTFBRTA5MTAwMDBBMzE4MkUgLyogV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzNEM0EzQjYxMzM5NjAwQjAwNzA5QkU0IC8qIFdLTWVk
aWFDYWNoZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDA3NUZFMTI0RkYwMjcwMDY4
RjIwQSAvKiBXS011dGFibGVBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M4OUQyQkExQTZC
MEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwMDYzLDYgKzEwMDcwLDcgQEAKIAkJCQkzMThCRTE3NTE0NzQzREQ3MDBBOEZCQjIgLyogV0tO
b3RpZmljYXRpb25NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxQTJFQzc3MTQ4RDY2
MkUwMDgxMEQ3MSAvKiBXS05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBRDA5RjJCMTc0M0Y4RTYwMEE5NUU1MCAvKiBXS05QQVBJUGx1Z0luQ29u
dGFpbmVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RDNEVDNDYxQUU2QTkwMDAwOUFDQkQxIC8q
IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkz
N0M0QzA5MzE4MTRCM0FGMDAzNjg4QjkgLyogV0tOU0FycmF5Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzczQ0VBRDUxODU0MTdBRTAwOEMzNjNEIC8qIFdLTlNEYXRhLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzcxQTE5NDExODI0RDI5MzAwRjMyQTVFIC8qIFdLTlNEaWN0aW9uYXJ5Lm1tIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggN2U3MTEzZmJjNDFlY2FlOTMxMGE5NzM4ZTYxNTNhZWQ4NzRiNDkx
Yy4uYWRkYzljNGI3ZWVkYjExZTBmOGM2OWM3ODYxOWMxZTNjODZlNmIwMiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDE1LTA0LTI0ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgor
CisgICAgICAgIFtXSzJdIENvb2tpZXMgc2V0IGR1cmluZyBtZWRpYSBsb2FkaW5nIGFyZSBub3Qg
YWRkZWQgdG8gY29va2llIHN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDQxNzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvbWVkaWEvcmVzb3VyY2VzL2dldC1jb29raWUuaHRt
bDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9tZWRpYS9yZXNvdXJjZXMvdmlkZW8tc2V0
LWNvb2tpZS5waHA6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tc2V0
LWNvb2tpZS5odG1sOiBBZGRlZC4KKwogMjAxNS0wNC0wNyAgSmVyIE5vYmxlICA8amVyLm5vYmxl
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBzZXR0aW5nICYgcmVzdHJpY3Rpb24gd2hpY2gg
cHJldmVudHMgbm9uLWludGVyYWN0aXZ0ZSBwbGF5YmFjayBvZiBhdWRpYmxlIG1lZGlhIGVsZW1l
bnRzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS9yZXNvdXJjZXMv
Z2V0LWNvb2tpZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS9yZXNvdXJjZXMv
Z2V0LWNvb2tpZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3NWQwNGRkMGU4NWJiZDA3YTA3NWFmMWNjNTc4
NzM2ZWRmOGIwYTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21l
ZGlhL3Jlc291cmNlcy9nZXQtY29va2llLmh0bWwKQEAgLTAsMCArMSBAQAorPHNjcmlwdD5kb2N1
bWVudC53cml0ZShkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS9yZXNvdXJj
ZXMvdmlkZW8tc2V0LWNvb2tpZS5waHAgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL3Jl
c291cmNlcy92aWRlby1zZXQtY29va2llLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZmQyZDdmYmFmYWRhMmMw
MWM3OWEyMWY5ZDNjMDQzZDk3ZmUyNDVkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9tZWRpYS9yZXNvdXJjZXMvdmlkZW8tc2V0LWNvb2tpZS5waHAKQEAgLTAsMCAr
MSwxNiBAQAorPD9waHAKKworICAgICR1YSA9ICRfU0VSVkVSWyJIVFRQX1VTRVJfQUdFTlQiXTsK
KworCWhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUiKTsKKwloZWFkZXIoIkNvbm5lY3Rp
b246IGNsb3NlIik7CisJaGVhZGVyKCJTZXQtQ29va2llOiBURVNUPVZBTElEOyBwYXRoPS8iKTsK
KworICAgICRmaWxlTmFtZSA9ICRfR0VUWyJuYW1lIl07CisgICAgJHR5cGUgPSAkX0dFVFsidHlw
ZSJdOworCisgICAgJF9HRVQgPSBhcnJheSgpOworICAgICRfR0VUWyduYW1lJ10gPSAkZmlsZU5h
bWU7CisgICAgJF9HRVRbJ3R5cGUnXSA9ICR0eXBlOworICAgIEBpbmNsdWRlKCIuL3NlcnZlLXZp
ZGVvLnBocCIpOyAKKz8+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlh
L3ZpZGVvLXNldC1jb29raWUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvdmlk
ZW8tc2V0LWNvb2tpZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmMDdhOGVmYWQxYTE4NDdhY2E1ZjBmYjAw
ODM1NGE1MDA5ZTAwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L21lZGlhL3ZpZGVvLXNldC1jb29raWUuaHRtbApAQCAtMCwwICsxLDQ5IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9Li4vLi4vbWVkaWEtcmVzb3Vy
Y2VzL3ZpZGVvLXRlc3QuanM+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Li4vLi4vbWVkaWEt
cmVzb3VyY2VzL21lZGlhLWZpbGUuanM+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1Rl
eHQoKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuc2V0QWx3YXlzQWNjZXB0Q29va2llcyh0cnVl
KTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB9CisK
KyAgICAgICAgZG9jdW1lbnQuY29va2llID0gJ1RFU1Q9SU5WQUxJRDsgcGF0aD0vJzsKKyAgICAg
ICAgdmFyIGZyYW1lOworCisgICAgICAgIGZ1bmN0aW9uIHNldENvb2tpZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgnZG9jdW1lbnQuY29va2llJywgJ1RFU1Q9SU5WQUxJ
RCcpOworCisgICAgICAgICAgICBmaW5kTWVkaWFFbGVtZW50KCk7CisgICAgICAgICAgICB3YWl0
Rm9yRXZlbnQoJ2NhbnBsYXl0aHJvdWdoJywgb25jYW5wbGF5dGhyb3VnaCk7CisKKyAgICAgICAg
ICAgIHZhciBtb3ZpZSA9IGZpbmRNZWRpYUZpbGUoJ3ZpZGVvJywgJ3Rlc3QnKTsKKyAgICAgICAg
ICAgIHZhciB0eXBlID0gbWltZVR5cGVGb3JFeHRlbnNpb24obW92aWUuc3BsaXQoJy4nKS5wb3Ao
KSk7CisKKyAgICAgICAgICAgIHZpZGVvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpZGVv
Jyk7CisgICAgICAgICAgICB2aWRlby5zcmMgPSAicmVzb3VyY2VzL3ZpZGVvLXNldC1jb29raWUu
cGhwP25hbWU9IiArIG1vdmllICsgJyZ0eXBlPScgKyB0eXBlOworICAgICAgICAgICAgdmlkZW8u
cGxheSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gb25jYW5wbGF5dGhyb3VnaCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
aWZyYW1lIik7CisgICAgICAgICAgICBmcmFtZS5zcmMgPSAicmVzb3VyY2VzL2dldENvb2tpZS5o
dG1sIjsKKyAgICAgICAgICAgIHdhaXRGb3JFdmVudE9uKGZyYW1lLCAnbG9hZCcsIG9uZnJhbWVs
b2FkKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZnJhbWUpOworICAg
ICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gb25mcmFtZWxvYWQoZXZlbnQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgnZnJhbWUuY29udGVudERvY3VtZW50LmNvb2tpZScs
ICdURVNUPVZBTElEJyk7CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIH0KKyAgICA8
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ic2V0Q29va2llKCkiPgorPHZpZGVvIGlk
PSJ2aWRlbyI+PC92aWRlbz4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBhMjNlY2NmM2FhNDEzMTBiOTNkMWU5
Mzg0ZjI0ODgyMDM0NzlkZTc0Li4xMGU3Yjg2NWI1ODMzZjFkYWM4OWIxMTYwNTU2MzEwMWI1ZTVh
MDAwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3Rh
dGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25z
CkBAIC0zMiw2ICszMiw4IEBAIHdlYmtpdC5vcmcvYi8xMzk3NzggZnVsbHNjcmVlbi9leGl0LWZ1
bGwtc2NyZWVuLWlmcmFtZS5odG1sIFsgU2tpcCBdCiAKIHdlYmtpdC5vcmcvYi8xMzk4NjIgZWRp
dGluZy9zcGVsbGluZy9ncmFtbWFyLWVkaXQtd29yZC5odG1sIFsgU2tpcCBdCiAKK3dlYmtpdC5v
cmcvYi8xNDQxNzQgaHR0cC90ZXN0cy9tZWRpYS92aWRlby1zZXQtY29va2llLmh0bWwgWyBGYWls
dXJlIF0KKwogIyMjIEVORCBPRiAoMSkgRmFpbHVyZXMgd2l0aCBidWcgcmVwb3J0cwogIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251598</attachid>
            <date>2015-04-24 17:22:20 -0700</date>
            <delta_ts>2015-04-24 17:39:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144174-20150424172113.patch</filename>
            <type>text/plain</type>
            <size>38000</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMzc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMGJkMjcxZjYyYmY2NDA4
ODYyMTVhYzAwMjU4ODQ3N2I2NTYwNzE4MS4uOTdkOTg4ZTI5ODk2MjRjN2RkMDFkZWZhNmFmNTcz
YWQwOTljMzA3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDE1LTA0LTI0ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIENvb2tpZXMgc2V0
IGR1cmluZyBtZWRpYSBsb2FkaW5nIGFyZSBub3QgYWRkZWQgdG8gY29va2llIHN0b3JlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQxNzQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCBX
ZWJLaXQgaGFzIGFkZGVkIGEgc2hpbSB3aGVuIGNvb2tpZXMgYXJlIHJldHJpZXZlZCBmcm9tIHRo
ZSBjb29raWUgc3RvcmUsIGFuZAorICAgICAgICBpbnN0ZWFkLCBjb29raWVzIGFyZSByZXRyaWV2
ZWQgZnJvbSB0aGUgTmV0d29ya1Byb2Nlc3MuIEhvd2V2ZXIsIHdoZW4gY29va2llcyBhcmUgc2V0
CisgICAgICAgIHRocm91Z2ggYSBIVFRQIHJlc3BvbnNlLCBXZWJLaXQgbmV2ZXIgdXBkYXRlcyB0
aGUgTmV0d29ya1Byb2Nlc3Mgd2l0aCB0aG9zZSBuZXcgY29va2llcy4KKworICAgICAgICBUbyBk
byBzbywgV2ViS2l0IHdpbGwgYWRkIGEgbmV3IHNoaW0gb250byB0aGUgQ0ZDb25uZWN0aW9uQ3Jl
YXRlV2l0aFByb3BlcnRpZXMoKSBmdW5jdGlvbiwKKyAgICAgICAgd2hpY2ggd2lsbCByZXBsYWNl
IHRoZSBjbGllbnQgY2FsbGJhY2tzIHByb3ZpZGVkIGluIHRoYXQgZnVuY3Rpb24gd2l0aCBvdXIg
b3duLiBJbiB0aGUKKyAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlLCBpZiB0aGUgcmVzcG9uc2Ug
Y29udGFpbnMgYSAiU2V0LUNvb2tpZSIgaGVhZGVyLCB0aGUgY29va2llIHN0cmluZyB3aWxsCisg
ICAgICAgIGJlIHBhc3NlZCB0byB0aGUgTmV0d29ya1Byb2Nlc3MgZm9yIHN0b3JhZ2UuIER1ZSB0
byB0aGUgZXhpc3RpbmcgY29va2llIHJldHJpZXZhbCBzaGltLAorICAgICAgICB0aGVzZSBuZXcg
Y29va2llcyB3aWxsIGJlIGF2YWlsYWJsZSBkdXJpbmcgZnV0dXJlIG1lZGlhIEhUVFAgcmVxdWVz
dHMuCisKKyAgICAgICAgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciBpcyBhIGNsYXNz
IHdoaWNoIHN0b3JlcyBhIENGVVJMQ29ubmVjdGlvbkNsaWVudCBzdHJ1Y3QsIGFuZAorICAgICAg
ICByZXBsYWNlcyBpdCB3aXRoIGEgbmV3IHN0cnVjdC4gSW4gZWFjaCBvZiB0aGUgY2xpZW50IGNh
bGxiYWNrcywgdGhlIGNsYXNzIHdpbGwgY2FsbCB0aHJvdWdoCisgICAgICAgIHRvIHRoZSBvcmln
aW5hbCBoYW5kbGVyIGlmIHRoYXQgaGFuZGxlciBpcyB2YWxpZC4KKworICAgICAgICAqIFNoYXJl
ZC9tYWMvQ29va2llU3RvcmFnZVNoaW0ubW06CisgICAgICAgIChXZWJLaXQ6OndlYmtpdENvbm5l
Y3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcyk6IENyZWF0ZSBhIFdlYkNGVVJMQ29ubmVjdGlvbkNs
aWVudFdyYXBwZXIsIGFuZAorICAgICAgICAgICAgcmVwbGFjZSB0aGUgY2xpZW50IHBhcmFtZXRl
ciB3aXRoIHRoYXQgbmV3IHdyYXBwZXIuCisgICAgICAgIChXZWJLaXQ6OkNvb2tpZVN0b3JhZ2VT
aGltOjppbml0aWFsaXplKTogSW5pdGlhbGl6ZSB0aGUgbmV3IHNoaW0uCisgICAgICAgICogU2hh
cmVkL21hYy9Db29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwOgorICAgICAgICAoV2ViS2l0Ojpz
aGltQ0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMpOiBDYWxsIHRocm91Z2ggdG8g
dGhlIHNoaW0gbWV0aG9kLgorICAgICAgICAqIFNoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW1M
aWJyYXJ5Lmg6CisgICAgICAgICogU2hhcmVkL21hYy9XZWJDRlVSTENvbm5lY3Rpb25DbGllbnRX
cmFwcGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGll
bnRXcmFwcGVyOjpjcmVhdGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViQ0ZVUkxDb25uZWN0
aW9uQ2xpZW50V3JhcHBlci5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29u
bmVjdGlvbkNsaWVudFdyYXBwZXI6Om1heGltdW1TdXBwb3J0ZWRDbGllbnRWZXJzaW9uKTogVGhl
IHdyYXBwZXIgY2xhc3MKKyAgICAgICAgICAgIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIENGVVJM
Q29ubmVjdGlvbkNsaWVudF9WNiBvciBvbGRlci4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcik6
IENvcHkgdGhlIGNsaWVudAorICAgICAgICAgICAgY2FsbGJhY2sgcG9uaXRlcnMgaW50byB0aGUg
Y2xhc3MsIGFuZCBjb25zdHJ1Y3QgYSByZXBsYWNlbWVudCBjbGllbnQuCisgICAgICAgIChXZWJL
aXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6On5XZWJDRlVSTENvbm5lY3Rpb25D
bGllbnRXcmFwcGVyKTogUmVsZWFzZSB0aGUgd3JhcHBlZCBjbGllbnQuCisgICAgICAgIChXZWJL
aXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OnJldGFpbik6IENhbGwgcmVmKCku
CisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OnJlbGVh
c2UpOiBDYWxsIGRlcmVmKCkuCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNs
aWVudFdyYXBwZXI6OmNvcHlEZXNjcmlwdGlvbik6IFBhc3MgdGhyb3VnaCB0byB0aGUgd3JhcHBl
ZCBjbGllbnQuCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXI6OndpbGxTZW5kUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENv
bm5lY3Rpb25DbGllbnRXcmFwcGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOiBEaXR0by4gKEFsc28g
ZmV0Y2ggdGhlIG5ldyBjb29raWVzIGZyb20gdGhlIHJlc3BvbnNlLikKKyAgICAgICAgKFdlYktp
dDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZURhdGEpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlk
U3RvcEJ1ZmZlcmluZyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rp
b25DbGllbnRXcmFwcGVyOjpkaWRGaW5pc2hMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJL
aXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZEZhaWwpOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6d2lsbENhY2hl
UmVzcG9uc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xp
ZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZFNlbmRC
b2R5RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGll
bnRXcmFwcGVyOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpuZWVkTmV3Qm9keVN0cmVh
bSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFw
cGVyOjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktp
dDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6d2lsbFNlbmRSZXF1ZXN0Rm9yQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZURhdGFBcnJheSk6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpjbGllbnQpOiBT
aW1wbGUgZ2V0dGVyLgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajogQWRkIHRoZSBuZXcgZmlsZXMgdG8gdGhlIHByb2plY3QuCisKIDIwMTUtMDQtMDUgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIFNwaW5zIHNlZW4gaW4g
V0tTZXRBcHBsaWNhdGlvbkluZm9ybWF0aW9uSXRlbSwgc28gaXQgc2hvdWxkIG5vdCBiZSBjYWxs
ZWQgb24gdGhlIG1haW4gdGhyZWFkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL0Nvb2tpZVN0b3JhZ2VTaGltLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29r
aWVTdG9yYWdlU2hpbS5tbQppbmRleCAzYTQ2NTQyODQ0OTVmNmQ3MzMwODM1NWE4MDk2ZDkzNmM0
Yzc4ZjE4Li5mNTM2MWQzYjJjZTcwNzNjZTgxOGNhZjk5ZjY2YTVmZjdmNzRhYmZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW0ubW0KQEAgLTMxLDYg
KzMxLDcgQEAKICNpbmNsdWRlICJDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuaCIKICNpbmNsdWRl
ICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQ
cm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KQEAgLTQ4LDYgKzQ5LDgg
QEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGVVJMUmVxdWVzdCogQ0ZVUkxSZXF1ZXN0UmVmOwog
U09GVF9MSU5LX0ZSQU1FV09SSyhDRk5ldHdvcmspCiBTT0ZUX0xJTksoQ0ZOZXR3b3JrLCBDRlVS
TFJlcXVlc3RHZXRVUkwsIENGVVJMUmVmLCAoQ0ZVUkxSZXF1ZXN0UmVmIHJlcXVlc3QpLCAocmVx
dWVzdCkpCiAKK2V4dGVybiAiQyIgQ0ZVUkxDb25uZWN0aW9uUmVmIENGVVJMQ29ubmVjdGlvbkNy
ZWF0ZVdpdGhQcm9wZXJ0aWVzKENGQWxsb2NhdG9yUmVmIGFsbG9jLCBDRlVSTFJlcXVlc3RSZWYg
cmVxdWVzdCwgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50KiBjbGllbnQsIENGRGljdGlvbmFyeVJlZiBw
cm9wZXJ0aWVzKTsKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbnRlcmZhY2UgV0tO
U1VSTFNlc3Npb25Mb2NhbCA6IE5TT2JqZWN0CkBAIC03Myw2ICs3NiwxOCBAQCBzdGF0aWMgQ0ZE
aWN0aW9uYXJ5UmVmIHdlYktpdENvb2tpZVN0b3JhZ2VDb3B5UmVxdWVzdEhlYWRlckZpZWxkc0Zv
clVSTChDRkhUVFBDbwogICAgIHJldHVybiBDRkRpY3Rpb25hcnlDcmVhdGUoMCwgY29va2llS2V5
cywgY29va2llVmFsdWVzLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKIH0KIAorc3RhdGljIENGVVJMQ29ubmVjdGlv
blJlZiB3ZWJraXRDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMoQ0ZVUkxSZXF1ZXN0UmVm
IHJlcXVlc3QsIENGVVJMQ29ubmVjdGlvbkNsaWVudCogY2xpZW50LCBDRkRpY3Rpb25hcnlSZWYg
cHJvcGVydGllcykKK3sKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAgICBp
ZiAoIWNsaWVudCB8fCBjbGllbnQtPnZlcnNpb24gPiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRX
cmFwcGVyOjptYXhpbXVtU3VwcG9ydGVkQ2xpZW50VmVyc2lvbigpKQorICAgICAgICByZXR1cm4g
Q0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
cmVxdWVzdCwgY2xpZW50LCBwcm9wZXJ0aWVzKTsKKworICAgIFJlZjxXZWJDRlVSTENvbm5lY3Rp
b25DbGllbnRXcmFwcGVyPiB3cmFwcGVyID0gV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBl
cjo6Y3JlYXRlKGNsaWVudCk7CisgICAgcmV0dXJuIENGVVJMQ29ubmVjdGlvbkNyZWF0ZVdpdGhQ
cm9wZXJ0aWVzKGtDRkFsbG9jYXRvckRlZmF1bHQsIHJlcXVlc3QsIHdyYXBwZXItPmNsaWVudCgp
LCBwcm9wZXJ0aWVzKTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKK30KKwogQ29va2ll
U3RvcmFnZVNoaW0mIENvb2tpZVN0b3JhZ2VTaGltOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxDb29raWVTdG9yYWdlU2hpbT4gc3RvcmFnZTsKQEAgLTgxLDcgKzk2
LDkgQEAgQ29va2llU3RvcmFnZVNoaW0mIENvb2tpZVN0b3JhZ2VTaGltOjpzaW5nbGV0b24oKQog
CiB2b2lkIENvb2tpZVN0b3JhZ2VTaGltOjppbml0aWFsaXplKCkKIHsKLSAgICBDb29raWVTdG9y
YWdlU2hpbUNhbGxiYWNrcyBjYWxsYmFja3MgPSB7ICZ3ZWJLaXRDb29raWVTdG9yYWdlQ29weVJl
cXVlc3RIZWFkZXJGaWVsZHNGb3JVUkwgfTsKKyAgICBDb29raWVTdG9yYWdlU2hpbUNhbGxiYWNr
cyBjYWxsYmFja3MgPSB7ICZ3ZWJLaXRDb29raWVTdG9yYWdlQ29weVJlcXVlc3RIZWFkZXJGaWVs
ZHNGb3JVUkwKKyAgICAgICAgLCAmd2Via2l0Q29ubmVjdGlvbkNyZWF0ZVdpdGhQcm9wZXJ0aWVz
CisgICAgfTsKICAgICBDb29raWVTdG9yYWdlU2hpbUluaXRpYWxpemVGdW5jIGZ1bmMgPSByZWlu
dGVycHJldF9jYXN0PENvb2tpZVN0b3JhZ2VTaGltSW5pdGlhbGl6ZUZ1bmM+KGRsc3ltKFJUTERf
REVGQVVMVCwgIldlYktpdENvb2tpZVN0b3JhZ2VTaGltSW5pdGlhbGl6ZSIpKTsKICAgICBpZiAo
ZnVuYykKICAgICAgICAgZnVuYyhjYWxsYmFja3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwCmluZGV4IDY3N2RiMjdl
MWM5ZmQ3NGM5NGJiZTBhYmE3NGJkODhiMDEwNTczODguLjhjMWJiZjViODVkNWM0NWNjZjdiMTZj
OWRlNDhiMGE1MmQ0ODk4MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
Q29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL0Nvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAKQEAgLTMyLDYgKzMyLDggQEAKIAogZXh0
ZXJuICJDIiBDRkRpY3Rpb25hcnlSZWYgX0NGSFRUUENvb2tpZVN0b3JhZ2VDb3B5UmVxdWVzdEhl
YWRlckZpZWxkc0ZvclVSTChDRkFsbG9jYXRvclJlZiBpbkFsbG9jYXRvciwgQ0ZIVFRQQ29va2ll
U3RvcmFnZVJlZiBpbkNvb2tpZVN0b3JhZ2UsIENGVVJMUmVmIGluUmVxdWVzdFVSTCk7CiAKK2V4
dGVybiAiQyIgQ0ZVUkxDb25uZWN0aW9uUmVmIENGVVJMQ29ubmVjdGlvbkNyZWF0ZVdpdGhQcm9w
ZXJ0aWVzKENGQWxsb2NhdG9yUmVmIGFsbG9jLCBDRlVSTFJlcXVlc3RSZWYgcmVxdWVzdCwgQ0ZV
UkxDb25uZWN0aW9uQ2xpZW50KiBjbGllbnQsIENGRGljdGlvbmFyeVJlZiBwcm9wZXJ0aWVzKTsK
KwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGV4dGVybiAiQyIgdm9pZCBXZWJLaXRDb29raWVTdG9y
YWdlU2hpbUluaXRpYWxpemUoY29uc3QgQ29va2llU3RvcmFnZVNoaW1DYWxsYmFja3MmKTsKQEAg
LTc1LDYgKzc3LDMxIEBAIHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgc2hpbUNGSFRUUENvb2tpZVN0
b3JhZ2VDb3B5UmVxdWVzdEhlYWRlckZpZWxkc0ZvclVSTChDRkFsCiAKIERZTERfSU5URVJQT1NF
KHNoaW1DRkhUVFBDb29raWVTdG9yYWdlQ29weVJlcXVlc3RIZWFkZXJGaWVsZHNGb3JVUkwsIF9D
RkhUVFBDb29raWVTdG9yYWdlQ29weVJlcXVlc3RIZWFkZXJGaWVsZHNGb3JVUkwpOwogCitzdGF0
aWMgQ0ZVUkxDb25uZWN0aW9uUmVmIHNoaW1DRlVSTENvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVy
dGllcyhDRkFsbG9jYXRvclJlZiBhbGxvYywgQ0ZVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIENGVVJM
Q29ubmVjdGlvbkNsaWVudCogY2xpZW50LCBDRkRpY3Rpb25hcnlSZWYgcHJvcGVydGllcykKK3sK
KyAgICBTaGltUHJvdGVjdG9yIHByb3RlY3RvcjsKKworICAgIGRvIHsKKyAgICAgICAgLy8gUHJv
dGVjdCBhZ2FpbnN0IHVuaW5pdGlhbGl6ZWQgY2FsbGJhY2tzOgorICAgICAgICBpZiAoIWNvb2tp
ZVN0b3JhZ2VTaGltQ2FsbGJhY2tzLmNvb2tpZVN0b3JhZ2VDb3B5UmVxdWVzdEhlYWRlckZpZWxk
c0ZvclVSTCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIFByb3RlY3QgYWdhaW5z
dCBhY2NpZGVudGFsIHJlY3Vyc2lvbjoKKyAgICAgICAgaWYgKFNoaW1Qcm90ZWN0b3I6OmNvdW50
KCkgPiAxKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgQ0ZVUkxDb25uZWN0aW9uUmVm
IHJlc3VsdHMgPSBjb29raWVTdG9yYWdlU2hpbUNhbGxiYWNrcy5jb25uZWN0aW9uQ3JlYXRlV2l0
aFByb3BlcnRpZXMocmVxdWVzdCwgY2xpZW50LCBwcm9wZXJ0aWVzKTsKKyAgICAgICAgaWYgKCFy
ZXN1bHRzKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7Cisg
ICAgfSB3aGlsZSAoMCk7CisKKyAgICByZXR1cm4gQ0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFBy
b3BlcnRpZXMoYWxsb2MsIHJlcXVlc3QsIGNsaWVudCwgcHJvcGVydGllcyk7Cit9CisKK0RZTERf
SU5URVJQT1NFKHNoaW1DRlVSTENvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcywgQ0ZVUkxD
b25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMpOworCiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5KCJkZWZhdWx0IikpKQogdm9pZCBXZWJLaXRDb29raWVTdG9yYWdlU2hpbUluaXRpYWxpemUo
Y29uc3QgQ29va2llU3RvcmFnZVNoaW1DYWxsYmFja3MmIGNhbGxiYWNrcykKIHsKQEAgLTg3LDcg
KzExNCw3IEBAIHZvaWQgV2ViS2l0Q29va2llU3RvcmFnZVNoaW1Jbml0aWFsaXplKGNvbnN0IENv
b2tpZVN0b3JhZ2VTaGltQ2FsbGJhY2tzJiBjYWxsYmFjCiAKICAgICBjb29raWVTdG9yYWdlU2hp
bUNhbGxiYWNrcyA9IGNhbGxiYWNrczsKIH0KLSAgICAKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxF
KE5FVFdPUktfUFJPQ0VTUykgJiYgIVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5oCmluZGV4IDMxMDhlMGEx
ZGY2N2JhNjFkYTk0ZjcyMmI1NTBmNGYxZWI0NDk5ZWYuLjMxMzY1NzcyY2MyZGJiZWU0ZTdmNTIw
ZTIxNzlmM2U2YWU3NWY1NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
Q29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21h
Yy9Db29raWVTdG9yYWdlU2hpbUxpYnJhcnkuaApAQCAtMjksMTEgKzI5LDE1IEBACiAjaWYgRU5B
QkxFKE5FVFdPUktfUFJPQ0VTUykKIAogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ0ZIVFRQQ29va2ll
U3RvcmFnZSogIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBf
Q0ZVUkxSZXF1ZXN0KiBDRlVSTFJlcXVlc3RSZWY7Cit0eXBlZGVmIHN0cnVjdCBfQ0ZVUkxDb25u
ZWN0aW9uKiBDRlVSTENvbm5lY3Rpb25SZWY7Cit0eXBlZGVmIHN0cnVjdCBDRlVSTENvbm5lY3Rp
b25DbGllbnRfVjEgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogc3RydWN0IENvb2tpZVN0b3JhZ2VTaGltQ2FsbGJhY2tzIHsKICAgICBDRkRpY3Rpb25hcnlS
ZWYgKCpjb29raWVTdG9yYWdlQ29weVJlcXVlc3RIZWFkZXJGaWVsZHNGb3JVUkwpKENGSFRUUENv
b2tpZVN0b3JhZ2VSZWYsIENGVVJMUmVmKTsKKyAgICBDRlVSTENvbm5lY3Rpb25SZWYgKCpjb25u
ZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMpKENGVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBDRlVS
TENvbm5lY3Rpb25DbGllbnQqIGNsaWVudCwgQ0ZEaWN0aW9uYXJ5UmVmIHByb3BlcnRpZXMpOwog
fTsKIAogdHlwZWRlZiB2b2lkICgqQ29va2llU3RvcmFnZVNoaW1Jbml0aWFsaXplRnVuYykoY29u
c3QgQ29va2llU3RvcmFnZVNoaW1DYWxsYmFja3MmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9tYWMvV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9XZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uN2VlZWNhNmRjYWZkMzM5OTFlOTczMDM4YWE4NTNlY2Y3MzRkNTI5YgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ0ZVUkxDb25uZWN0aW9u
Q2xpZW50V3JhcHBlci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXJfaAorI2RlZmluZSBXZWJDRlVSTENvbm5lY3Rp
b25DbGllbnRXcmFwcGVyX2gKKworI2luY2x1ZGUgPENGTmV0d29yay9DRlVSTENvbm5lY3Rpb24u
aD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyPiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVy
PiBjcmVhdGUoQ0ZVUkxDb25uZWN0aW9uQ2xpZW50KiB3cmFwcGVkQ2xpZW50KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBl
cih3cmFwcGVkQ2xpZW50KSk7CisgICAgfTsKKyAgICB+V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50
V3JhcHBlcigpOworCisgICAgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50KiBjbGllbnQoKTsKKworICAg
IHN0YXRpYyBDRkluZGV4IG1heGltdW1TdXBwb3J0ZWRDbGllbnRWZXJzaW9uKCk7CisKK3ByaXZh
dGU6CisgICAgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcihDRlVSTENvbm5lY3Rpb25D
bGllbnQqIHdyYXBwZWRDbGllbnQpOworCisgICAgc3RhdGljIGNvbnN0IHZvaWQqIHJldGFpbihj
b25zdCB2b2lkKiBpbmZvKTsKKyAgICBzdGF0aWMgdm9pZCByZWxlYXNlKGNvbnN0IHZvaWQqIGlu
Zm8pOworICAgIHN0YXRpYyBDRlN0cmluZ1JlZiBjb3B5RGVzY3JpcHRpb24oY29uc3Qgdm9pZCog
aW5mbyk7CisgICAgc3RhdGljIENGVVJMUmVxdWVzdFJlZiB3aWxsU2VuZFJlcXVlc3QoQ0ZVUkxD
b25uZWN0aW9uUmVmLCBDRlVSTFJlcXVlc3RSZWYsIENGVVJMUmVzcG9uc2VSZWYsIGNvbnN0IHZv
aWQgKmluZm8pOworICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShDRlVSTENvbm5l
Y3Rpb25SZWYsIENGVVJMUmVzcG9uc2VSZWYsIGNvbnN0IHZvaWQgKmluZm8pOworICAgIHN0YXRp
YyB2b2lkIGRpZFJlY2VpdmVEYXRhKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZEYXRhUmVmLCBDRklu
ZGV4IG9yaWdpbmFsTGVuZ3RoLCBjb25zdCB2b2lkICppbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBk
aWRTdG9wQnVmZmVyaW5nKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZEYXRhUmVmLCBDRkluZGV4IG9y
aWdpbmFsTGVuZ3RoLCBjb25zdCB2b2lkICppbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nKENGVVJMQ29ubmVjdGlvblJlZiwgY29uc3Qgdm9pZCAqaW5mbyk7CisgICAgc3Rh
dGljIHZvaWQgZGlkRmFpbChDRlVSTENvbm5lY3Rpb25SZWYsIENGRXJyb3JSZWYsIGNvbnN0IHZv
aWQgKmluZm8pOworICAgIHN0YXRpYyBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHdpbGxDYWNoZVJl
c3BvbnNlKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiwgY29uc3Qg
dm9pZCAqaW5mbyk7CisgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZVUkxBdXRoQ2hhbGxlbmdlUmVmLCBjb25zdCB2
b2lkICppbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRTZW5kQm9keURhdGEoQ0ZVUkxDb25uZWN0
aW9uUmVmLCBDRkluZGV4IGJ5dGVzV3JpdHRlbiwgQ0ZJbmRleCB0b3RhbEJ5dGVzV3JpdHRlbiwg
Q0ZJbmRleCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlLCBjb25zdCB2b2lkICppbmZvKTsKKyAg
ICBzdGF0aWMgQm9vbGVhbiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShDRlVSTENvbm5lY3Rp
b25SZWYsIGNvbnN0IHZvaWQgKmluZm8pOworICAgIHN0YXRpYyBDRlJlYWRTdHJlYW1SZWYgbmVl
ZE5ld0JvZHlTdHJlYW0oQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTFJlcXVlc3RSZWYsIGNvbnN0
IHZvaWQgKmluZm8pOworICAgIHN0YXRpYyBCb29sZWFuIGNhblJlc3BvbmRUb1Byb3RlY3Rpb25T
cGFjZShDRlVSTENvbm5lY3Rpb25SZWYsIENGVVJMUHJvdGVjdGlvblNwYWNlUmVmLCBjb25zdCB2
b2lkKiBpbmZvKTsKKyAgICBzdGF0aWMgdm9pZCB3aWxsU2VuZFJlcXVlc3RGb3JBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShDRlVSTENvbm5lY3Rpb25SZWYsIENGVVJMQXV0aENoYWxsZW5nZVJlZiwg
Y29uc3Qgdm9pZCAqaW5mbyk7CisgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZURhdGFBcnJheShD
RlVSTENvbm5lY3Rpb25SZWYsIENGQXJyYXlSZWYsIGNvbnN0IHZvaWQgKmluZm8pOworCisgICAg
Q0ZVUkxDb25uZWN0aW9uQ2xpZW50X1Y2IG1fd3JhcHBlZENsaWVudCB7IH07CisgICAgQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50X1Y2IG1fY2xpZW50IHsgfTsKK307CisKK30KKworI2VuZGlmIC8vIFdl
YkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9XZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLm1tIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9XZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmM5YmJkM2I3ZjRjZjNkYzQxNzc5OTFlZWJiNmY3OGVmZTg3MmIxZjEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNGVVJMQ29ubmVjdGlv
bkNsaWVudFdyYXBwZXIubW0KQEAgLTAsMCArMSwyNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLmgi
CisKKyNpbXBvcnQgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCisjaW1wb3J0ICJO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbXBvcnQgIldlYlByb2Nlc3MuaCIKKyNpbXBv
cnQgPFdlYkNvcmUvVVJMLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitDRkluZGV4IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6
Om1heGltdW1TdXBwb3J0ZWRDbGllbnRWZXJzaW9uKCkKK3sKKyAgICByZXR1cm4gNjsKK30KKwor
V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50
V3JhcHBlcihDRlVSTENvbm5lY3Rpb25DbGllbnQqIHdyYXBwZWRDbGllbnQpCit7CisgICAgc3dp
dGNoICh3cmFwcGVkQ2xpZW50LT52ZXJzaW9uKSB7CisgICAgY2FzZSAwOgorICAgICAgICBtZW1j
cHkoJm1fd3JhcHBlZENsaWVudCwgd3JhcHBlZENsaWVudCwgc2l6ZW9mKENGVVJMQ29ubmVjdGlv
bkNsaWVudF9WMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIG1lbWNw
eSgmbV93cmFwcGVkQ2xpZW50LCB3cmFwcGVkQ2xpZW50LCBzaXplb2YoQ0ZVUkxDb25uZWN0aW9u
Q2xpZW50X1YxKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgbWVtY3B5
KCZtX3dyYXBwZWRDbGllbnQsIHdyYXBwZWRDbGllbnQsIHNpemVvZihDRlVSTENvbm5lY3Rpb25D
bGllbnRfVjIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgICBtZW1jcHko
Jm1fd3JhcHBlZENsaWVudCwgd3JhcHBlZENsaWVudCwgc2l6ZW9mKENGVVJMQ29ubmVjdGlvbkNs
aWVudF9WMykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIG1lbWNweSgm
bV93cmFwcGVkQ2xpZW50LCB3cmFwcGVkQ2xpZW50LCBzaXplb2YoQ0ZVUkxDb25uZWN0aW9uQ2xp
ZW50X1Y0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNToKKyAgICAgICAgbWVtY3B5KCZt
X3dyYXBwZWRDbGllbnQsIHdyYXBwZWRDbGllbnQsIHNpemVvZihDRlVSTENvbm5lY3Rpb25DbGll
bnRfVjUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA2OgorICAgICAgICBtZW1jcHkoJm1f
d3JhcHBlZENsaWVudCwgd3JhcHBlZENsaWVudCwgc2l6ZW9mKENGVVJMQ29ubmVjdGlvbkNsaWVu
dF9WNikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBtX2NsaWVudC52ZXJzaW9uID0gNjsKKyAgICBtX2Ns
aWVudC5jbGllbnRJbmZvID0gdGhpczsKKyAgICBtX2NsaWVudC5yZXRhaW4gPSAmcmV0YWluOwor
ICAgIG1fY2xpZW50LnJlbGVhc2UgPSAmcmVsZWFzZTsKKyAgICBtX2NsaWVudC5kaWRSZWNlaXZl
UmVzcG9uc2UgPSAmZGlkUmVjZWl2ZVJlc3BvbnNlOworCisgICAgaWYgKG1fd3JhcHBlZENsaWVu
dC5jb3B5RGVzY3JpcHRpb24pCisgICAgICAgIG1fY2xpZW50LmNvcHlEZXNjcmlwdGlvbiA9ICZj
b3B5RGVzY3JpcHRpb247CisgICAgaWYgKG1fd3JhcHBlZENsaWVudC53aWxsU2VuZFJlcXVlc3Qp
CisgICAgICAgIG1fY2xpZW50LndpbGxTZW5kUmVxdWVzdCA9ICZ3aWxsU2VuZFJlcXVlc3Q7Cisg
ICAgaWYgKG1fd3JhcHBlZENsaWVudC5kaWRSZWNlaXZlRGF0YSkKKyAgICAgICAgbV9jbGllbnQu
ZGlkUmVjZWl2ZURhdGEgPSAmZGlkUmVjZWl2ZURhdGE7CisgICAgaWYgKG1fd3JhcHBlZENsaWVu
dC5kaWRTdG9wQnVmZmVyaW5nKQorICAgICAgICBtX2NsaWVudC5kaWRTdG9wQnVmZmVyaW5nID0g
JmRpZFN0b3BCdWZmZXJpbmc7CisgICAgaWYgKG1fd3JhcHBlZENsaWVudC5kaWRGaW5pc2hMb2Fk
aW5nKQorICAgICAgICBtX2NsaWVudC5kaWRGaW5pc2hMb2FkaW5nID0gJmRpZEZpbmlzaExvYWRp
bmc7CisgICAgaWYgKG1fd3JhcHBlZENsaWVudC5kaWRGYWlsKQorICAgICAgICBtX2NsaWVudC5k
aWRGYWlsID0gJmRpZEZhaWw7CisgICAgaWYgKG1fd3JhcHBlZENsaWVudC53aWxsQ2FjaGVSZXNw
b25zZSkKKyAgICAgICAgbV9jbGllbnQud2lsbENhY2hlUmVzcG9uc2UgPSAmd2lsbENhY2hlUmVz
cG9uc2U7CisgICAgaWYgKG1fd3JhcHBlZENsaWVudC5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpCisgICAgICAgIG1fY2xpZW50LmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSA9ICZkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CisgICAgaWYgKG1fd3Jh
cHBlZENsaWVudC5kaWRTZW5kQm9keURhdGEpCisgICAgICAgIG1fY2xpZW50LmRpZFNlbmRCb2R5
RGF0YSA9ICZkaWRTZW5kQm9keURhdGE7CisgICAgaWYgKG1fd3JhcHBlZENsaWVudC5zaG91bGRV
c2VDcmVkZW50aWFsU3RvcmFnZSkKKyAgICAgICAgbV9jbGllbnQuc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UgPSAmc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2U7CisgICAgaWYgKG1fd3JhcHBl
ZENsaWVudC5uZWVkTmV3Qm9keVN0cmVhbSkKKyAgICAgICAgbV9jbGllbnQubmVlZE5ld0JvZHlT
dHJlYW0gPSAmbmVlZE5ld0JvZHlTdHJlYW07CisgICAgaWYgKG1fd3JhcHBlZENsaWVudC5jYW5S
ZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UpCisgICAgICAgIG1fY2xpZW50LmNhblJlc3BvbmRUb1By
b3RlY3Rpb25TcGFjZSA9ICZjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2U7CisgICAgaWYgKG1f
d3JhcHBlZENsaWVudC53aWxsU2VuZFJlcXVlc3RGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkK
KyAgICAgICAgbV9jbGllbnQud2lsbFNlbmRSZXF1ZXN0Rm9yQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UgPSAmd2lsbFNlbmRSZXF1ZXN0Rm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CisgICAgaWYg
KG1fd3JhcHBlZENsaWVudC5kaWRSZWNlaXZlRGF0YUFycmF5KQorICAgICAgICBtX2NsaWVudC5k
aWRSZWNlaXZlRGF0YUFycmF5ID0gJmRpZFJlY2VpdmVEYXRhQXJyYXk7CisKKyAgICBpZiAobV93
cmFwcGVkQ2xpZW50LnJldGFpbikKKyAgICAgICAgbV93cmFwcGVkQ2xpZW50LnJldGFpbihtX3dy
YXBwZWRDbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK1dlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdy
YXBwZXI6On5XZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKCkKK3sKKyAgICBpZiAobV93
cmFwcGVkQ2xpZW50LnJlbGVhc2UpCisgICAgICAgIG1fd3JhcHBlZENsaWVudC5yZWxlYXNlKG1f
d3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKK30KKworY29uc3Qgdm9pZCogV2ViQ0ZVUkxDb25u
ZWN0aW9uQ2xpZW50V3JhcHBlcjo6cmV0YWluKGNvbnN0IHZvaWQqIGluZm8pCit7CisgICAgV2Vi
Q0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0luZm8gPSBzdGF0aWNfY2FzdDxXZWJD
RlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4oY29uc3RfY2FzdDx2b2lkKj4oaW5mbykpOwor
ICAgIHRoaXNJbmZvLT5yZWYoKTsKKyAgICByZXR1cm4gdGhpc0luZm87Cit9CisKK3ZvaWQgV2Vi
Q0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6cmVsZWFzZShjb25zdCB2b2lkKiBpbmZvKQor
eworICAgIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGlj
X2Nhc3Q8V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+
KGluZm8pKTsKKyAgICB0aGlzSW5mby0+ZGVyZWYoKTsKK30KKworQ0ZTdHJpbmdSZWYgV2ViQ0ZV
UkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6Y29weURlc2NyaXB0aW9uKGNvbnN0IHZvaWQqIGlu
Zm8pCit7CisgICAgY29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0lu
Zm8gPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4o
aW5mbyk7CisgICAgaWYgKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY29weURlc2NyaXB0aW9u
KQorICAgICAgICByZXR1cm4gdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5jb3B5RGVzY3JpcHRp
b24odGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworQ0ZVUkxSZXF1ZXN0UmVmIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXI6OndpbGxTZW5kUmVxdWVzdChDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZVUkxSZXF1ZXN0
UmVmIHJlcXVlc3QsIENGVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIGNvbnN0IHZvaWQgKmluZm8p
Cit7CisgICAgY29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0luZm8g
PSBzdGF0aWNfY2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4oaW5m
byk7CisgICAgaWYgKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQud2lsbFNlbmRSZXF1ZXN0KQor
ICAgICAgICByZXR1cm4gdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC53aWxsU2VuZFJlcXVlc3Qo
Y29ubiwgcmVxdWVzdCwgcmVzcG9uc2UsIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2xpZW50
SW5mbyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViQ0ZVUkxDb25uZWN0aW9u
Q2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKENGVVJMQ29ubmVjdGlvblJlZiBjb25u
LCBDRlVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBjb25zdCB2b2lkICppbmZvKQoreworICAgIGNv
bnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nh
c3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworCisgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZkNvb2tpZXMgPSBhZG9wdENGKENGSFRUUE1lc3NhZ2VD
b3B5SGVhZGVyRmllbGRWYWx1ZShDRlVSTFJlc3BvbnNlR2V0SFRUUFJlc3BvbnNlKHJlc3BvbnNl
KSwgQ0ZTVFIoIlNldC1Db29raWUiKSkpOworICAgIGlmIChjZkNvb2tpZXMgJiYgQ0ZTdHJpbmdH
ZXRMZW5ndGgoY2ZDb29raWVzLmdldCgpKSkgeworICAgICAgICBTdHJpbmcgY29va2llcyA9IGNm
Q29va2llcy5nZXQoKTsKKyAgICAgICAgVVJMIHJlcXVlc3RVUkwgPSBDRlVSTFJlc3BvbnNlR2V0
VVJMKHJlc3BvbnNlKTsKKyAgICAgICAgVVJMIGZpcnN0UGFydHlGb3JDb29raWVzVVJMOworICAg
ICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXRD
b29raWVzRnJvbURPTShTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgZmlyc3RQYXJ0eUZv
ckNvb2tpZXNVUkwsIHJlcXVlc3RVUkwsIGNvb2tpZXMpLCAwKTsKKyAgICB9CisKKyAgICBpZiAo
dGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRSZWNlaXZlUmVzcG9uc2UpCisgICAgICAgIHRo
aXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbm4sIHJlc3BvbnNl
LCB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYkNG
VVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZFJlY2VpdmVEYXRhKENGVVJMQ29ubmVjdGlv
blJlZiBjb25uLCBDRkRhdGFSZWYgZGF0YSwgQ0ZJbmRleCBvcmlnaW5hbExlbmd0aCwgY29uc3Qg
dm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVy
KiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdy
YXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRSZWNl
aXZlRGF0YSkKKyAgICAgICAgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRSZWNlaXZlRGF0
YShjb25uLCBkYXRhLCBvcmlnaW5hbExlbmd0aCwgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5j
bGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpk
aWRTdG9wQnVmZmVyaW5nKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRkRhdGFSZWYgYnVmZmVy
ZWREYXRhLCBDRkluZGV4IG9yaWdpbmFsTGVuZ3RoLCBjb25zdCB2b2lkICppbmZvKQoreworICAg
IGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworICAg
IGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmRpZFN0b3BCdWZmZXJpbmcpCisgICAgICAg
IHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuZGlkU3RvcEJ1ZmZlcmluZyhjb25uLCBidWZmZXJl
ZERhdGEsIG9yaWdpbmFsTGVuZ3RoLCB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNsaWVudElu
Zm8pOworfQorCit2b2lkIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZEZpbmlz
aExvYWRpbmcoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIGNvbnN0IHZvaWQgKmluZm8pCit7Cisg
ICAgY29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0luZm8gPSBzdGF0
aWNfY2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4oaW5mbyk7Cisg
ICAgaWYgKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuZGlkRmluaXNoTG9hZGluZykKKyAgICAg
ICAgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRGaW5pc2hMb2FkaW5nKGNvbm4sIHRoaXNJ
bmZvLT5tX3dyYXBwZWRDbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViQ0ZVUkxDb25u
ZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlkRmFpbChDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZF
cnJvclJlZiBlcnJvciwgY29uc3Qgdm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENv
bm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNG
VVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1f
d3JhcHBlZENsaWVudC5kaWRGYWlsKQorICAgICAgICB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50
LmRpZEZhaWwoY29ubiwgZXJyb3IsIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2xpZW50SW5m
byk7Cit9CisKK0NGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50
V3JhcHBlcjo6d2lsbENhY2hlUmVzcG9uc2UoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGQ2Fj
aGVkVVJMUmVzcG9uc2VSZWYgY2FjaGVkUmVzcG9uc2UsIGNvbnN0IHZvaWQgKmluZm8pCit7Cisg
ICAgY29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0luZm8gPSBzdGF0
aWNfY2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4oaW5mbyk7Cisg
ICAgaWYgKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQud2lsbENhY2hlUmVzcG9uc2UpCisgICAg
ICAgIHJldHVybiB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LndpbGxDYWNoZVJlc3BvbnNlKGNv
bm4sIGNhY2hlZFJlc3BvbnNlLCB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8p
OworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVu
dFdyYXBwZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShDRlVSTENvbm5lY3Rp
b25SZWYgY29ubiwgQ0ZVUkxBdXRoQ2hhbGxlbmdlUmVmIGNoYWxsZW5nZSwgY29uc3Qgdm9pZCAq
aW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0aGlz
SW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIq
PihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UpCisgICAgICAgIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQu
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbm4sIGNoYWxsZW5nZSwgdGhpc0lu
Zm8tPm1fd3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJDRlVSTENvbm5l
Y3Rpb25DbGllbnRXcmFwcGVyOjpkaWRTZW5kQm9keURhdGEoQ0ZVUkxDb25uZWN0aW9uUmVmIGNv
bm4sIENGSW5kZXggYnl0ZXNXcml0dGVuLCBDRkluZGV4IHRvdGFsQnl0ZXNXcml0dGVuLCBDRklu
ZGV4IHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUsIGNvbnN0IHZvaWQgKmluZm8pCit7CisgICAg
Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0luZm8gPSBzdGF0aWNf
Y2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4oaW5mbyk7CisgICAg
aWYgKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuZGlkU2VuZEJvZHlEYXRhKQorICAgICAgICB0
aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmRpZFNlbmRCb2R5RGF0YShjb25uLCBieXRlc1dyaXR0
ZW4sIHRvdGFsQnl0ZXNXcml0dGVuLCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlLCB0aGlzSW5m
by0+bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworfQorCitCb29sZWFuIFdlYkNGVVJMQ29u
bmVjdGlvbkNsaWVudFdyYXBwZXI6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKENGVVJMQ29u
bmVjdGlvblJlZiBjb25uLCBjb25zdCB2b2lkICppbmZvKQoreworICAgIGNvbnN0IFdlYkNGVVJM
Q29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2Vi
Q0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworICAgIGlmICh0aGlzSW5mby0+
bV93cmFwcGVkQ2xpZW50LnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQorICAgICAgICByZXR1
cm4gdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShj
b25uLCB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworICAgIHJldHVybiBm
YWxzZTsKK30KKworQ0ZSZWFkU3RyZWFtUmVmIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXI6Om5lZWROZXdCb2R5U3RyZWFtKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRlVSTFJlcXVl
c3RSZWYgcmVxdWVzdCwgY29uc3Qgdm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENv
bm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNG
VVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1f
d3JhcHBlZENsaWVudC5uZWVkTmV3Qm9keVN0cmVhbSkKKyAgICAgICAgcmV0dXJuIHRoaXNJbmZv
LT5tX3dyYXBwZWRDbGllbnQubmVlZE5ld0JvZHlTdHJlYW0oY29ubiwgcmVxdWVzdCwgdGhpc0lu
Zm8tPm1fd3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworQm9vbGVhbiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpjYW5SZXNwb25kVG9Q
cm90ZWN0aW9uU3BhY2UoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGVVJMUHJvdGVjdGlvblNw
YWNlUmVmIHByb3RlY3Rpb25TcGFjZSwgY29uc3Qgdm9pZCogaW5mbykKK3sKKyAgICBjb25zdCBX
ZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNv
bnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhp
c0luZm8tPm1fd3JhcHBlZENsaWVudC5jYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UpCisgICAg
ICAgIHJldHVybiB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNhblJlc3BvbmRUb1Byb3RlY3Rp
b25TcGFjZShjb25uLCBwcm90ZWN0aW9uU3BhY2UsIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQu
Y2xpZW50SW5mbyk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkNGVVJMQ29ubmVj
dGlvbkNsaWVudFdyYXBwZXI6OndpbGxTZW5kUmVxdWVzdEZvckF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2hhbGxl
bmdlLCBjb25zdCB2b2lkICppbmZvKQoreworICAgIGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNs
aWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0
aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworICAgIGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xp
ZW50LndpbGxTZW5kUmVxdWVzdEZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQorICAgICAgICB0
aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LndpbGxTZW5kUmVxdWVzdEZvckF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKGNvbm4sIGNoYWxsZW5nZSwgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5jbGll
bnRJbmZvKTsKK30KKwordm9pZCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpkaWRS
ZWNlaXZlRGF0YUFycmF5KENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRkFycmF5UmVmIGRhdGFB
cnJheSwgY29uc3Qgdm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25D
bGllbnRXcmFwcGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNGVVJMQ29ubmVj
dGlvbkNsaWVudFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1fd3JhcHBlZENs
aWVudC5kaWRSZWNlaXZlRGF0YUFycmF5KQorICAgICAgICB0aGlzSW5mby0+bV93cmFwcGVkQ2xp
ZW50LmRpZFJlY2VpdmVEYXRhQXJyYXkoY29ubiwgZGF0YUFycmF5LCB0aGlzSW5mby0+bV93cmFw
cGVkQ2xpZW50LmNsaWVudEluZm8pOworfQorCitDRlVSTENvbm5lY3Rpb25DbGllbnQqIFdlYkNG
VVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmNsaWVudCgpCit7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Q0ZVUkxDb25uZWN0aW9uQ2xpZW50Kj4oJm1fY2xpZW50KTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGQ5Mzc2YjYxOGQ5NjdlMzk4ZDRjOGY0NWNjNGYxM2FlYWFmMzA0OTIuLmM2MTEyNmE5ODkw
YzM2ODE0YTViYTY1MjE0N2UyOWUwOGY2NGE3YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2OTMsNiArMTY5Myw3IEBACiAJ
CUNEMTlBMjZFMUExM0U4MzQwMDhENjUwRSAvKiBXZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QxOUEyNkEx
QTEzRTgyMTAwOEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi87IH07CiAJ
CUNENUM2NkEwMTM0QjlEMzgwMDRGRTJBOCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VGdWxsU2NyZWVu
Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENENUM2NjlFMTM0QjlEMzYwMDRGRTJBOCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VGdWxsU2NyZWVu
Q2xpZW50LmNwcCAqLzsgfTsKIAkJQ0Q1QzY2QTExMzRCOUQzODAwNEZFMkE4IC8qIEluamVjdGVk
QnVuZGxlUGFnZUZ1bGxTY3JlZW5DbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENENUM2NjlGMTM0QjlEMzcwMDRGRTJBOCAvKiBJbmplY3RlZEJ1
bmRsZVBhZ2VGdWxsU2NyZWVuQ2xpZW50LmggKi87IH07CisJCUNENjI0QTVBMUFFMDkxMDAwMEEz
MTgyRSAvKiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDYyNEE1ODFBRTA5MTAwMDBBMzE4MkUg
LyogV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5oICovOyB9OwogCQlDRDY3RDMwRTE1
QzA4RjlBMDA4NDNBREYgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q2
N0QzMDgxNUMwN0JFMDAwODQzQURGIC8qIEluamVjdGVkQnVuZGxlUGFnZURpYWdub3N0aWNMb2dn
aW5nQ2xpZW50LmNwcCAqLzsgfTsKIAkJQ0Q2Rjc1RjQxMzFCNjZEMDAwRDZCMjFFIC8qIFdlYkZ1
bGxTY3JlZW5NYW5hZ2VyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0Q3M0JBM0UxMzFBMkU4QTAwRUVERUQyIC8qIFdlYkZ1bGxTY3JlZW5N
YW5hZ2VyUHJveHkuY3BwICovOyB9OwogCQlDRDczQkE0NzEzMUFDQzlBMDBFRURFRDIgLyogV2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDczQkE0NTEzMUFDQzg4MDBFRURFRDIg
LyogV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBA
IC0xNzAzLDYgKzE3MDQsNyBAQAogCQlDREMzODMwODE3MjExODkwMDA4QTJGQzMgLyogV2ViUHJv
Y2Vzc1NoaW0uZHlsaWIgaW4gQ29weSBXZWJQcm9jZXNzU2hpbSAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREMzODMwNjE3MjExNzk5MDA4QTJGQzMgLyogV2ViUHJvY2Vzc1No
aW0uZHlsaWIgKi87IH07CiAJCUNEQzM4MzBDMTcyMTIyODIwMDhBMkZDMyAvKiBDb29raWVTdG9y
YWdlU2hpbUxpYnJhcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQzM4MzBCMTcyMTIxQ0UwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbUxpYnJh
cnkuaCAqLzsgfTsKIAkJQ0RDMzgzMTAxNzIxMjQ0MDAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VT
aGltLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RD
MzgzMEQxNzIxMjQyRDAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltLm1tICovOyB9OworCQlD
REM0RUM0NjFBRTZBOTAwMDA5QUNCRDEgLyogV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBl
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENjI0
QTU3MUFFMDkxMDAwMEEzMTgyRSAvKiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLm1t
ICovOyB9OwogCQlDRENBODVDODEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQ0E4NUM2MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyLm1tICovOyB9OwogCQlDRENBODVDOTEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0RDQTg1QzcxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIuaCAqLzsgfTsKIAkJQ0RFNkUyRDMxOUY3MzFDNDAwQkE5Njg4IC8qIFdlYk9yaWdp
bkRhdGFNYW5hZ2VyU3VwcGxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RFNkUyRDIxOUY3MzFDNDAwQkE5Njg4IC8qIFdlYk9yaWdpbkRhdGFN
YW5hZ2VyU3VwcGxlbWVudC5oICovOyB9OwpAQCAtMzk0MSw2ICszOTQzLDggQEAKIAkJQ0QxOUEy
NkExQTEzRTgyMTAwOEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENUM2NjlFMTM0QjlEMzYwMDRGRTJBOCAv
KiBJbmplY3RlZEJ1bmRsZVBhZ2VGdWxsU2NyZWVuQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZUZ1bGxTY3JlZW5DbGllbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDVDNjY5RjEzNEI5RDM3MDA0RkUy
QTggLyogSW5qZWN0ZWRCdW5kbGVQYWdlRnVsbFNjcmVlbkNsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZVBhZ2VGdWxsU2NyZWVuQ2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNENjI0QTU3MUFFMDkxMDAwMEEzMTgyRSAv
KiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q2MjRBNTgxQUUwOTEwMDAwQTMxODJFIC8q
IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRDY3RDMwODE1QzA3QkUwMDA4NDNBREYgLyogSW5qZWN0ZWRC
dW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDY3RDMwOTE1QzA3QkUwMDA4
NDNBREYgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q3M0JBMzcx
MzFBMjlGRTAwRUVERUQyIC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcDsgcGF0aCA9
IEZ1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNjU2OSw2ICs2NTczLDggQEAKIAkJCQlCQ0UyMzI2MjEyMkM2Q0YzMDBENUMz
NUEgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tICovLAogCQkJCUJDMTExQjVCMTEyRjYy
OTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkuaCAqLywKIAkJCQlCQzExMUI1QzExMkY2Mjk4
MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5Lm1tICovLAorCQkJCUNENjI0QTU3MUFFMDkxMDAw
MEEzMTgyRSAvKiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLm1tICovLAorCQkJCUNE
NjI0QTU4MUFFMDkxMDAwMEEzMTgyRSAvKiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVy
LmggKi8sCiAJCQkJOTA1NjIwRTUxMkJDMjQ3NjAwMDc5OUI2IC8qIFdlYk1lbW9yeVNhbXBsZXIu
bWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CkBAIC04Mjg0LDYgKzgyOTAsNyBAQAog
CQkJCTFBRkE0QjhDMUE2NUExRDAwMDZDNEFCNCAvKiBXZWJQcm9jZXNzTGlmZXRpbWVUcmFja2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUU4NDlDODEzNjhEOTM5MDAzOEQ0ODEgLyogV0tJbnNw
ZWN0b3JQcml2YXRlTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUE5RTEwQjEzMTVDRDE4MDA5
RTcwMzEgLyogV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlD
RDYyNEE1QTFBRTA5MTAwMDBBMzE4MkUgLyogV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzNEM0EzQjYxMzM5NjAwQjAwNzA5QkU0IC8qIFdLTWVk
aWFDYWNoZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDA3NUZFMTI0RkYwMjcwMDY4
RjIwQSAvKiBXS011dGFibGVBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M4OUQyQkExQTZC
MEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwMDYzLDYgKzEwMDcwLDcgQEAKIAkJCQkzMThCRTE3NTE0NzQzREQ3MDBBOEZCQjIgLyogV0tO
b3RpZmljYXRpb25NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxQTJFQzc3MTQ4RDY2
MkUwMDgxMEQ3MSAvKiBXS05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBRDA5RjJCMTc0M0Y4RTYwMEE5NUU1MCAvKiBXS05QQVBJUGx1Z0luQ29u
dGFpbmVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RDNEVDNDYxQUU2QTkwMDAwOUFDQkQxIC8q
IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkz
N0M0QzA5MzE4MTRCM0FGMDAzNjg4QjkgLyogV0tOU0FycmF5Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzczQ0VBRDUxODU0MTdBRTAwOEMzNjNEIC8qIFdLTlNEYXRhLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzcxQTE5NDExODI0RDI5MzAwRjMyQTVFIC8qIFdLTlNEaWN0aW9uYXJ5Lm1tIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggN2U3MTEzZmJjNDFlY2FlOTMxMGE5NzM4ZTYxNTNhZWQ4NzRiNDkx
Yy4uYWRkYzljNGI3ZWVkYjExZTBmOGM2OWM3ODYxOWMxZTNjODZlNmIwMiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDE1LTA0LTI0ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgor
CisgICAgICAgIFtXSzJdIENvb2tpZXMgc2V0IGR1cmluZyBtZWRpYSBsb2FkaW5nIGFyZSBub3Qg
YWRkZWQgdG8gY29va2llIHN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDQxNzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvbWVkaWEvcmVzb3VyY2VzL2dldC1jb29raWUuaHRt
bDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9tZWRpYS9yZXNvdXJjZXMvdmlkZW8tc2V0
LWNvb2tpZS5waHA6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tc2V0
LWNvb2tpZS5odG1sOiBBZGRlZC4KKwogMjAxNS0wNC0wNyAgSmVyIE5vYmxlICA8amVyLm5vYmxl
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBzZXR0aW5nICYgcmVzdHJpY3Rpb24gd2hpY2gg
cHJldmVudHMgbm9uLWludGVyYWN0aXZ0ZSBwbGF5YmFjayBvZiBhdWRpYmxlIG1lZGlhIGVsZW1l
bnRzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS9yZXNvdXJjZXMv
Z2V0LWNvb2tpZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS9yZXNvdXJjZXMv
Z2V0LWNvb2tpZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3NWQwNGRkMGU4NWJiZDA3YTA3NWFmMWNjNTc4
NzM2ZWRmOGIwYTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21l
ZGlhL3Jlc291cmNlcy9nZXQtY29va2llLmh0bWwKQEAgLTAsMCArMSBAQAorPHNjcmlwdD5kb2N1
bWVudC53cml0ZShkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS9yZXNvdXJj
ZXMvdmlkZW8tc2V0LWNvb2tpZS5waHAgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL3Jl
c291cmNlcy92aWRlby1zZXQtY29va2llLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZmQyZDdmYmFmYWRhMmMw
MWM3OWEyMWY5ZDNjMDQzZDk3ZmUyNDVkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9tZWRpYS9yZXNvdXJjZXMvdmlkZW8tc2V0LWNvb2tpZS5waHAKQEAgLTAsMCAr
MSwxNiBAQAorPD9waHAKKworICAgICR1YSA9ICRfU0VSVkVSWyJIVFRQX1VTRVJfQUdFTlQiXTsK
KworCWhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUiKTsKKwloZWFkZXIoIkNvbm5lY3Rp
b246IGNsb3NlIik7CisJaGVhZGVyKCJTZXQtQ29va2llOiBURVNUPVZBTElEOyBwYXRoPS8iKTsK
KworICAgICRmaWxlTmFtZSA9ICRfR0VUWyJuYW1lIl07CisgICAgJHR5cGUgPSAkX0dFVFsidHlw
ZSJdOworCisgICAgJF9HRVQgPSBhcnJheSgpOworICAgICRfR0VUWyduYW1lJ10gPSAkZmlsZU5h
bWU7CisgICAgJF9HRVRbJ3R5cGUnXSA9ICR0eXBlOworICAgIEBpbmNsdWRlKCIuL3NlcnZlLXZp
ZGVvLnBocCIpOyAKKz8+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlh
L3ZpZGVvLXNldC1jb29raWUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvdmlk
ZW8tc2V0LWNvb2tpZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjZmVlMzQxNjYzNThmY2U2MjY3MWIwYjg4
ZGNkMzYyNjQ4N2YzMjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L21lZGlhL3ZpZGVvLXNldC1jb29raWUuaHRtbApAQCAtMCwwICsxLDQ5IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9Li4vLi4vbWVkaWEtcmVzb3Vy
Y2VzL3ZpZGVvLXRlc3QuanM+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Li4vLi4vbWVkaWEt
cmVzb3VyY2VzL21lZGlhLWZpbGUuanM+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1Rl
eHQoKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuc2V0QWx3YXlzQWNjZXB0Q29va2llcyh0cnVl
KTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB9CisK
KyAgICAgICAgZG9jdW1lbnQuY29va2llID0gJ1RFU1Q9SU5WQUxJRDsgcGF0aD0vJzsKKyAgICAg
ICAgdmFyIGZyYW1lOworCisgICAgICAgIGZ1bmN0aW9uIHNldENvb2tpZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgnZG9jdW1lbnQuY29va2llJywgJ1RFU1Q9SU5WQUxJ
RCcpOworCisgICAgICAgICAgICBmaW5kTWVkaWFFbGVtZW50KCk7CisgICAgICAgICAgICB3YWl0
Rm9yRXZlbnQoJ2NhbnBsYXl0aHJvdWdoJywgb25jYW5wbGF5dGhyb3VnaCk7CisKKyAgICAgICAg
ICAgIHZhciBtb3ZpZSA9IGZpbmRNZWRpYUZpbGUoJ3ZpZGVvJywgJ3Rlc3QnKTsKKyAgICAgICAg
ICAgIHZhciB0eXBlID0gbWltZVR5cGVGb3JFeHRlbnNpb24obW92aWUuc3BsaXQoJy4nKS5wb3Ao
KSk7CisKKyAgICAgICAgICAgIHZpZGVvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpZGVv
Jyk7CisgICAgICAgICAgICB2aWRlby5zcmMgPSAicmVzb3VyY2VzL3ZpZGVvLXNldC1jb29raWUu
cGhwP25hbWU9IiArIG1vdmllICsgJyZ0eXBlPScgKyB0eXBlOworICAgICAgICAgICAgdmlkZW8u
cGxheSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gb25jYW5wbGF5dGhyb3VnaCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
aWZyYW1lIik7CisgICAgICAgICAgICBmcmFtZS5zcmMgPSAicmVzb3VyY2VzL2dldC1jb29raWUu
aHRtbCI7CisgICAgICAgICAgICB3YWl0Rm9yRXZlbnRPbihmcmFtZSwgJ2xvYWQnLCBvbmZyYW1l
bG9hZCk7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZyYW1lKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9uZnJhbWVsb2FkKGV2ZW50KQorICAgICAgICB7
CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoJ2ZyYW1lLmNvbnRlbnREb2N1bWVudC5jb29raWUn
LCAnVEVTVD1WQUxJRCcpOworICAgICAgICAgICAgZW5kVGVzdCgpOworICAgICAgICB9CisgICAg
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InNldENvb2tpZSgpIj4KKzx2aWRlbyBp
ZD0idmlkZW8iPjwvdmlkZW8+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggYTIzZWNjZjNhYTQxMzEwYjkzZDFl
OTM4NGYyNDg4MjAzNDc5ZGU3NC4uMTBlN2I4NjViNTgzM2YxZGFjODliMTE2MDU1NjMxMDFiNWU1
YTAwMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0
YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9u
cwpAQCAtMzIsNiArMzIsOCBAQCB3ZWJraXQub3JnL2IvMTM5Nzc4IGZ1bGxzY3JlZW4vZXhpdC1m
dWxsLXNjcmVlbi1pZnJhbWUuaHRtbCBbIFNraXAgXQogCiB3ZWJraXQub3JnL2IvMTM5ODYyIGVk
aXRpbmcvc3BlbGxpbmcvZ3JhbW1hci1lZGl0LXdvcmQuaHRtbCBbIFNraXAgXQogCit3ZWJraXQu
b3JnL2IvMTQ0MTc0IGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tc2V0LWNvb2tpZS5odG1sIFsgRmFp
bHVyZSBdCisKICMjIyBFTkQgT0YgKDEpIEZhaWx1cmVzIHdpdGggYnVnIHJlcG9ydHMKICMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251600</attachid>
            <date>2015-04-24 17:39:06 -0700</date>
            <delta_ts>2015-04-25 07:26:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144174-20150424173759.patch</filename>
            <type>text/plain</type>
            <size>37951</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMjk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGRmMzQ3ZDNmMDBjMDI0
ZWFkNWMzMTFiNTI2NjIyNzI3OTViMmQzMy4uYmFmNjhhZWM5MmNmOGY5MWQ3ZTM2ZTliNTdkNDBl
NDgyZDg3OTVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDE1LTA0LTI0ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIENvb2tpZXMgc2V0
IGR1cmluZyBtZWRpYSBsb2FkaW5nIGFyZSBub3QgYWRkZWQgdG8gY29va2llIHN0b3JlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQxNzQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCBX
ZWJLaXQgaGFzIGFkZGVkIGEgc2hpbSB3aGVuIGNvb2tpZXMgYXJlIHJldHJpZXZlZCBmcm9tIHRo
ZSBjb29raWUgc3RvcmUsIGFuZAorICAgICAgICBpbnN0ZWFkLCBjb29raWVzIGFyZSByZXRyaWV2
ZWQgZnJvbSB0aGUgTmV0d29ya1Byb2Nlc3MuIEhvd2V2ZXIsIHdoZW4gY29va2llcyBhcmUgc2V0
CisgICAgICAgIHRocm91Z2ggYSBIVFRQIHJlc3BvbnNlLCBXZWJLaXQgbmV2ZXIgdXBkYXRlcyB0
aGUgTmV0d29ya1Byb2Nlc3Mgd2l0aCB0aG9zZSBuZXcgY29va2llcy4KKworICAgICAgICBUbyBk
byBzbywgV2ViS2l0IHdpbGwgYWRkIGEgbmV3IHNoaW0gb250byB0aGUgQ0ZDb25uZWN0aW9uQ3Jl
YXRlV2l0aFByb3BlcnRpZXMoKSBmdW5jdGlvbiwKKyAgICAgICAgd2hpY2ggd2lsbCByZXBsYWNl
IHRoZSBjbGllbnQgY2FsbGJhY2tzIHByb3ZpZGVkIGluIHRoYXQgZnVuY3Rpb24gd2l0aCBvdXIg
b3duLiBJbiB0aGUKKyAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlLCBpZiB0aGUgcmVzcG9uc2Ug
Y29udGFpbnMgYSAiU2V0LUNvb2tpZSIgaGVhZGVyLCB0aGUgY29va2llIHN0cmluZyB3aWxsCisg
ICAgICAgIGJlIHBhc3NlZCB0byB0aGUgTmV0d29ya1Byb2Nlc3MgZm9yIHN0b3JhZ2UuIER1ZSB0
byB0aGUgZXhpc3RpbmcgY29va2llIHJldHJpZXZhbCBzaGltLAorICAgICAgICB0aGVzZSBuZXcg
Y29va2llcyB3aWxsIGJlIGF2YWlsYWJsZSBkdXJpbmcgZnV0dXJlIG1lZGlhIEhUVFAgcmVxdWVz
dHMuCisKKyAgICAgICAgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciBpcyBhIGNsYXNz
IHdoaWNoIHN0b3JlcyBhIENGVVJMQ29ubmVjdGlvbkNsaWVudCBzdHJ1Y3QsIGFuZAorICAgICAg
ICByZXBsYWNlcyBpdCB3aXRoIGEgbmV3IHN0cnVjdC4gSW4gZWFjaCBvZiB0aGUgY2xpZW50IGNh
bGxiYWNrcywgdGhlIGNsYXNzIHdpbGwgY2FsbCB0aHJvdWdoCisgICAgICAgIHRvIHRoZSBvcmln
aW5hbCBoYW5kbGVyIGlmIHRoYXQgaGFuZGxlciBpcyB2YWxpZC4KKworICAgICAgICAqIFNoYXJl
ZC9tYWMvQ29va2llU3RvcmFnZVNoaW0ubW06CisgICAgICAgIChXZWJLaXQ6OndlYmtpdENvbm5l
Y3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcyk6IENyZWF0ZSBhIFdlYkNGVVJMQ29ubmVjdGlvbkNs
aWVudFdyYXBwZXIsIGFuZAorICAgICAgICAgICAgcmVwbGFjZSB0aGUgY2xpZW50IHBhcmFtZXRl
ciB3aXRoIHRoYXQgbmV3IHdyYXBwZXIuCisgICAgICAgIChXZWJLaXQ6OkNvb2tpZVN0b3JhZ2VT
aGltOjppbml0aWFsaXplKTogSW5pdGlhbGl6ZSB0aGUgbmV3IHNoaW0uCisgICAgICAgICogU2hh
cmVkL21hYy9Db29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwOgorICAgICAgICAoV2ViS2l0Ojpz
aGltQ0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMpOiBDYWxsIHRocm91Z2ggdG8g
dGhlIHNoaW0gbWV0aG9kLgorICAgICAgICAqIFNoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW1M
aWJyYXJ5Lmg6CisgICAgICAgICogU2hhcmVkL21hYy9XZWJDRlVSTENvbm5lY3Rpb25DbGllbnRX
cmFwcGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGll
bnRXcmFwcGVyOjpjcmVhdGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViQ0ZVUkxDb25uZWN0
aW9uQ2xpZW50V3JhcHBlci5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29u
bmVjdGlvbkNsaWVudFdyYXBwZXI6Om1heGltdW1TdXBwb3J0ZWRDbGllbnRWZXJzaW9uKTogVGhl
IHdyYXBwZXIgY2xhc3MKKyAgICAgICAgICAgIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIENGVVJM
Q29ubmVjdGlvbkNsaWVudF9WNiBvciBvbGRlci4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcik6
IENvcHkgdGhlIGNsaWVudAorICAgICAgICAgICAgY2FsbGJhY2sgcG9uaXRlcnMgaW50byB0aGUg
Y2xhc3MsIGFuZCBjb25zdHJ1Y3QgYSByZXBsYWNlbWVudCBjbGllbnQuCisgICAgICAgIChXZWJL
aXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6On5XZWJDRlVSTENvbm5lY3Rpb25D
bGllbnRXcmFwcGVyKTogUmVsZWFzZSB0aGUgd3JhcHBlZCBjbGllbnQuCisgICAgICAgIChXZWJL
aXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OnJldGFpbik6IENhbGwgcmVmKCku
CisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OnJlbGVh
c2UpOiBDYWxsIGRlcmVmKCkuCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNs
aWVudFdyYXBwZXI6OmNvcHlEZXNjcmlwdGlvbik6IFBhc3MgdGhyb3VnaCB0byB0aGUgd3JhcHBl
ZCBjbGllbnQuCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXI6OndpbGxTZW5kUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENv
bm5lY3Rpb25DbGllbnRXcmFwcGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOiBEaXR0by4gKEFsc28g
ZmV0Y2ggdGhlIG5ldyBjb29raWVzIGZyb20gdGhlIHJlc3BvbnNlLikKKyAgICAgICAgKFdlYktp
dDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZURhdGEpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlk
U3RvcEJ1ZmZlcmluZyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rp
b25DbGllbnRXcmFwcGVyOjpkaWRGaW5pc2hMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJL
aXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZEZhaWwpOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6d2lsbENhY2hl
UmVzcG9uc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xp
ZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZFNlbmRC
b2R5RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGll
bnRXcmFwcGVyOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpuZWVkTmV3Qm9keVN0cmVh
bSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFw
cGVyOjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktp
dDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6d2lsbFNlbmRSZXF1ZXN0Rm9yQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZURhdGFBcnJheSk6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpjbGllbnQpOiBT
aW1wbGUgZ2V0dGVyLgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajogQWRkIHRoZSBuZXcgZmlsZXMgdG8gdGhlIHByb2plY3QuCisKIDIwMTUtMDQtMjQgIEJyZW50
IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgVGV4dEluZGljYXRvciBm
b3IgZW1iZWRkZWQgUERGcyBpcyBzbGlnaHRseSBvZmZzZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW0ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltLm1tCmluZGV4IDNhNDY1NDI4NDQ5NWY2ZDczMzA4
MzU1YTgwOTZkOTM2YzRjNzhmMTguLmY1MzYxZDNiMmNlNzA3M2NlODE4Y2FmOTlmNjZhNWZmN2Y3
NGFiZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFn
ZVNoaW0ubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hp
bS5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2VTaGltTGlicmFy
eS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViQ0ZVUkxDb25uZWN0
aW9uQ2xpZW50V3JhcHBlci5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgpA
QCAtNDgsNiArNDksOCBAQCB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfQ0ZVUkxSZXF1ZXN0KiBDRlVS
TFJlcXVlc3RSZWY7CiBTT0ZUX0xJTktfRlJBTUVXT1JLKENGTmV0d29yaykKIFNPRlRfTElOSyhD
Rk5ldHdvcmssIENGVVJMUmVxdWVzdEdldFVSTCwgQ0ZVUkxSZWYsIChDRlVSTFJlcXVlc3RSZWYg
cmVxdWVzdCksIChyZXF1ZXN0KSkKIAorZXh0ZXJuICJDIiBDRlVSTENvbm5lY3Rpb25SZWYgQ0ZV
UkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMoQ0ZBbGxvY2F0b3JSZWYgYWxsb2MsIENG
VVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBDRlVSTENvbm5lY3Rpb25DbGllbnQqIGNsaWVudCwgQ0ZE
aWN0aW9uYXJ5UmVmIHByb3BlcnRpZXMpOworCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
QGludGVyZmFjZSBXS05TVVJMU2Vzc2lvbkxvY2FsIDogTlNPYmplY3QKQEAgLTczLDYgKzc2LDE4
IEBAIHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgd2ViS2l0Q29va2llU3RvcmFnZUNvcHlSZXF1ZXN0
SGVhZGVyRmllbGRzRm9yVVJMKENGSFRUUENvCiAgICAgcmV0dXJuIENGRGljdGlvbmFyeUNyZWF0
ZSgwLCBjb29raWVLZXlzLCBjb29raWVWYWx1ZXMsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNh
bGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOwogfQogCitzdGF0aWMg
Q0ZVUkxDb25uZWN0aW9uUmVmIHdlYmtpdENvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcyhD
RlVSTFJlcXVlc3RSZWYgcmVxdWVzdCwgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50KiBjbGllbnQsIENG
RGljdGlvbmFyeVJlZiBwcm9wZXJ0aWVzKQoreworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1
c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFy
YXRpb25zIgorICAgIGlmICghY2xpZW50IHx8IGNsaWVudC0+dmVyc2lvbiA+IFdlYkNGVVJMQ29u
bmVjdGlvbkNsaWVudFdyYXBwZXI6Om1heGltdW1TdXBwb3J0ZWRDbGllbnRWZXJzaW9uKCkpCisg
ICAgICAgIHJldHVybiBDRlVSTENvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcyhrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCByZXF1ZXN0LCBjbGllbnQsIHByb3BlcnRpZXMpOworCisgICAgUmVmPFdl
YkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI+IHdyYXBwZXIgPSBXZWJDRlVSTENvbm5lY3Rp
b25DbGllbnRXcmFwcGVyOjpjcmVhdGUoY2xpZW50KTsKKyAgICByZXR1cm4gQ0ZVUkxDb25uZWN0
aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVxdWVzdCwgd3Jh
cHBlci0+Y2xpZW50KCksIHByb3BlcnRpZXMpOworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBv
cAorfQorCiBDb29raWVTdG9yYWdlU2hpbSYgQ29va2llU3RvcmFnZVNoaW06OnNpbmdsZXRvbigp
CiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvb2tpZVN0b3JhZ2VTaGltPiBzdG9yYWdl
OwpAQCAtODEsNyArOTYsOSBAQCBDb29raWVTdG9yYWdlU2hpbSYgQ29va2llU3RvcmFnZVNoaW06
OnNpbmdsZXRvbigpCiAKIHZvaWQgQ29va2llU3RvcmFnZVNoaW06OmluaXRpYWxpemUoKQogewot
ICAgIENvb2tpZVN0b3JhZ2VTaGltQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsgJndlYktpdENvb2tp
ZVN0b3JhZ2VDb3B5UmVxdWVzdEhlYWRlckZpZWxkc0ZvclVSTCB9OworICAgIENvb2tpZVN0b3Jh
Z2VTaGltQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsgJndlYktpdENvb2tpZVN0b3JhZ2VDb3B5UmVx
dWVzdEhlYWRlckZpZWxkc0ZvclVSTAorICAgICAgICAsICZ3ZWJraXRDb25uZWN0aW9uQ3JlYXRl
V2l0aFByb3BlcnRpZXMKKyAgICB9OwogICAgIENvb2tpZVN0b3JhZ2VTaGltSW5pdGlhbGl6ZUZ1
bmMgZnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29va2llU3RvcmFnZVNoaW1Jbml0aWFsaXplRnVu
Yz4oZGxzeW0oUlRMRF9ERUZBVUxULCAiV2ViS2l0Q29va2llU3RvcmFnZVNoaW1Jbml0aWFsaXpl
IikpOwogICAgIGlmIChmdW5jKQogICAgICAgICBmdW5jKGNhbGxiYWNrcyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAK
aW5kZXggNjc3ZGIyN2UxYzlmZDc0Yzk0YmJlMGFiYTc0YmQ4OGIwMTA1NzM4OC4uOGMxYmJmNWI4
NWQ1YzQ1Y2NmN2IxNmM5ZGU0OGIwYTUyZDQ4OTgwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcApAQCAtMzIsNiAr
MzIsOCBAQAogCiBleHRlcm4gIkMiIENGRGljdGlvbmFyeVJlZiBfQ0ZIVFRQQ29va2llU3RvcmFn
ZUNvcHlSZXF1ZXN0SGVhZGVyRmllbGRzRm9yVVJMKENGQWxsb2NhdG9yUmVmIGluQWxsb2NhdG9y
LCBDRkhUVFBDb29raWVTdG9yYWdlUmVmIGluQ29va2llU3RvcmFnZSwgQ0ZVUkxSZWYgaW5SZXF1
ZXN0VVJMKTsKIAorZXh0ZXJuICJDIiBDRlVSTENvbm5lY3Rpb25SZWYgQ0ZVUkxDb25uZWN0aW9u
Q3JlYXRlV2l0aFByb3BlcnRpZXMoQ0ZBbGxvY2F0b3JSZWYgYWxsb2MsIENGVVJMUmVxdWVzdFJl
ZiByZXF1ZXN0LCBDRlVSTENvbm5lY3Rpb25DbGllbnQqIGNsaWVudCwgQ0ZEaWN0aW9uYXJ5UmVm
IHByb3BlcnRpZXMpOworCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogZXh0ZXJuICJDIiB2b2lkIFdl
YktpdENvb2tpZVN0b3JhZ2VTaGltSW5pdGlhbGl6ZShjb25zdCBDb29raWVTdG9yYWdlU2hpbUNh
bGxiYWNrcyYpOwpAQCAtNzUsNiArNzcsMzEgQEAgc3RhdGljIENGRGljdGlvbmFyeVJlZiBzaGlt
Q0ZIVFRQQ29va2llU3RvcmFnZUNvcHlSZXF1ZXN0SGVhZGVyRmllbGRzRm9yVVJMKENGQWwKIAog
RFlMRF9JTlRFUlBPU0Uoc2hpbUNGSFRUUENvb2tpZVN0b3JhZ2VDb3B5UmVxdWVzdEhlYWRlckZp
ZWxkc0ZvclVSTCwgX0NGSFRUUENvb2tpZVN0b3JhZ2VDb3B5UmVxdWVzdEhlYWRlckZpZWxkc0Zv
clVSTCk7CiAKK3N0YXRpYyBDRlVSTENvbm5lY3Rpb25SZWYgc2hpbUNGVVJMQ29ubmVjdGlvbkNy
ZWF0ZVdpdGhQcm9wZXJ0aWVzKENGQWxsb2NhdG9yUmVmIGFsbG9jLCBDRlVSTFJlcXVlc3RSZWYg
cmVxdWVzdCwgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50KiBjbGllbnQsIENGRGljdGlvbmFyeVJlZiBw
cm9wZXJ0aWVzKQoreworICAgIFNoaW1Qcm90ZWN0b3IgcHJvdGVjdG9yOworCisgICAgZG8gewor
ICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgdW5pbml0aWFsaXplZCBjYWxsYmFja3M6CisgICAg
ICAgIGlmICghY29va2llU3RvcmFnZVNoaW1DYWxsYmFja3MuY29va2llU3RvcmFnZUNvcHlSZXF1
ZXN0SGVhZGVyRmllbGRzRm9yVVJMKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8g
UHJvdGVjdCBhZ2FpbnN0IGFjY2lkZW50YWwgcmVjdXJzaW9uOgorICAgICAgICBpZiAoU2hpbVBy
b3RlY3Rvcjo6Y291bnQoKSA+IDEpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBDRlVS
TENvbm5lY3Rpb25SZWYgcmVzdWx0cyA9IGNvb2tpZVN0b3JhZ2VTaGltQ2FsbGJhY2tzLmNvbm5l
Y3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcyhyZXF1ZXN0LCBjbGllbnQsIHByb3BlcnRpZXMpOwor
ICAgICAgICBpZiAoIXJlc3VsdHMpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICByZXR1
cm4gcmVzdWx0czsKKyAgICB9IHdoaWxlICgwKTsKKworICAgIHJldHVybiBDRlVSTENvbm5lY3Rp
b25DcmVhdGVXaXRoUHJvcGVydGllcyhhbGxvYywgcmVxdWVzdCwgY2xpZW50LCBwcm9wZXJ0aWVz
KTsKK30KKworRFlMRF9JTlRFUlBPU0Uoc2hpbUNGVVJMQ29ubmVjdGlvbkNyZWF0ZVdpdGhQcm9w
ZXJ0aWVzLCBDRlVSTENvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcyk7CisKIF9fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCiB2b2lkIFdlYktpdENvb2tpZVN0b3JhZ2VT
aGltSW5pdGlhbGl6ZShjb25zdCBDb29raWVTdG9yYWdlU2hpbUNhbGxiYWNrcyYgY2FsbGJhY2tz
KQogewpAQCAtODcsNyArMTE0LDcgQEAgdm9pZCBXZWJLaXRDb29raWVTdG9yYWdlU2hpbUluaXRp
YWxpemUoY29uc3QgQ29va2llU3RvcmFnZVNoaW1DYWxsYmFja3MmIGNhbGxiYWMKIAogICAgIGNv
b2tpZVN0b3JhZ2VTaGltQ2FsbGJhY2tzID0gY2FsbGJhY2tzOwogfQotICAgIAorCiB9CiAKICNl
bmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKSAmJiAhUExBVEZPUk0oSU9TKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbUxpYnJhcnku
aCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmgK
aW5kZXggMzEwOGUwYTFkZjY3YmE2MWRhOTRmNzIyYjU1MGY0ZjFlYjQ0OTllZi4uMzEzNjU3NzJj
YzJkYmJlZTRlN2Y1MjBlMjE3OWYzZTZhZTc1ZjU2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbUxpYnJhcnkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5oCkBAIC0yOSwxMSArMjks
MTUgQEAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogCiB0eXBlZGVmIHN0cnVjdCBPcGFx
dWVDRkhUVFBDb29raWVTdG9yYWdlKiAgQ0ZIVFRQQ29va2llU3RvcmFnZVJlZjsKK3R5cGVkZWYg
Y29uc3Qgc3RydWN0IF9DRlVSTFJlcXVlc3QqIENGVVJMUmVxdWVzdFJlZjsKK3R5cGVkZWYgc3Ry
dWN0IF9DRlVSTENvbm5lY3Rpb24qIENGVVJMQ29ubmVjdGlvblJlZjsKK3R5cGVkZWYgc3RydWN0
IENGVVJMQ29ubmVjdGlvbkNsaWVudF9WMSBDRlVSTENvbm5lY3Rpb25DbGllbnQ7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBzdHJ1Y3QgQ29va2llU3RvcmFnZVNoaW1DYWxsYmFja3MgewogICAg
IENGRGljdGlvbmFyeVJlZiAoKmNvb2tpZVN0b3JhZ2VDb3B5UmVxdWVzdEhlYWRlckZpZWxkc0Zv
clVSTCkoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiwgQ0ZVUkxSZWYpOworICAgIENGVVJMQ29ubmVj
dGlvblJlZiAoKmNvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcykoQ0ZVUkxSZXF1ZXN0UmVm
IHJlcXVlc3QsIENGVVJMQ29ubmVjdGlvbkNsaWVudCogY2xpZW50LCBDRkRpY3Rpb25hcnlSZWYg
cHJvcGVydGllcyk7CiB9OwogCiB0eXBlZGVmIHZvaWQgKCpDb29raWVTdG9yYWdlU2hpbUluaXRp
YWxpemVGdW5jKShjb25zdCBDb29raWVTdG9yYWdlU2hpbUNhbGxiYWNrcyYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFw
cGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNGVVJMQ29ubmVjdGlvbkNsaWVu
dFdyYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZWVlY2E2ZGNhZmQzMzk5MWU5NzMwMzhhYTg1M2VjZjcz
NGQ1MjliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJD
RlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcl9oCisjZGVmaW5lIFdl
YkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXJfaAorCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NG
VVJMQ29ubmVjdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQ0ZVUkxDb25uZWN0
aW9uQ2xpZW50V3JhcHBlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkNGVVJMQ29ubmVjdGlvbkNs
aWVudFdyYXBwZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYkNGVVJMQ29ubmVjdGlv
bkNsaWVudFdyYXBwZXI+IGNyZWF0ZShDRlVSTENvbm5lY3Rpb25DbGllbnQqIHdyYXBwZWRDbGll
bnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDRlVSTENvbm5lY3Rp
b25DbGllbnRXcmFwcGVyKHdyYXBwZWRDbGllbnQpKTsKKyAgICB9OworICAgIH5XZWJDRlVSTENv
bm5lY3Rpb25DbGllbnRXcmFwcGVyKCk7CisKKyAgICBDRlVSTENvbm5lY3Rpb25DbGllbnQqIGNs
aWVudCgpOworCisgICAgc3RhdGljIENGSW5kZXggbWF4aW11bVN1cHBvcnRlZENsaWVudFZlcnNp
b24oKTsKKworcHJpdmF0ZToKKyAgICBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKENG
VVJMQ29ubmVjdGlvbkNsaWVudCogd3JhcHBlZENsaWVudCk7CisKKyAgICBzdGF0aWMgY29uc3Qg
dm9pZCogcmV0YWluKGNvbnN0IHZvaWQqIGluZm8pOworICAgIHN0YXRpYyB2b2lkIHJlbGVhc2Uo
Y29uc3Qgdm9pZCogaW5mbyk7CisgICAgc3RhdGljIENGU3RyaW5nUmVmIGNvcHlEZXNjcmlwdGlv
bihjb25zdCB2b2lkKiBpbmZvKTsKKyAgICBzdGF0aWMgQ0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5k
UmVxdWVzdChDRlVSTENvbm5lY3Rpb25SZWYsIENGVVJMUmVxdWVzdFJlZiwgQ0ZVUkxSZXNwb25z
ZVJlZiwgY29uc3Qgdm9pZCAqaW5mbyk7CisgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3Bv
bnNlKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZVUkxSZXNwb25zZVJlZiwgY29uc3Qgdm9pZCAqaW5m
byk7CisgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZURhdGEoQ0ZVUkxDb25uZWN0aW9uUmVmLCBD
RkRhdGFSZWYsIENGSW5kZXggb3JpZ2luYWxMZW5ndGgsIGNvbnN0IHZvaWQgKmluZm8pOworICAg
IHN0YXRpYyB2b2lkIGRpZFN0b3BCdWZmZXJpbmcoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRkRhdGFS
ZWYsIENGSW5kZXggb3JpZ2luYWxMZW5ndGgsIGNvbnN0IHZvaWQgKmluZm8pOworICAgIHN0YXRp
YyB2b2lkIGRpZEZpbmlzaExvYWRpbmcoQ0ZVUkxDb25uZWN0aW9uUmVmLCBjb25zdCB2b2lkICpp
bmZvKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRGYWlsKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZFcnJv
clJlZiwgY29uc3Qgdm9pZCAqaW5mbyk7CisgICAgc3RhdGljIENGQ2FjaGVkVVJMUmVzcG9uc2VS
ZWYgd2lsbENhY2hlUmVzcG9uc2UoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRkNhY2hlZFVSTFJlc3Bv
bnNlUmVmLCBjb25zdCB2b2lkICppbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTEF1dGhDaGFsbGVu
Z2VSZWYsIGNvbnN0IHZvaWQgKmluZm8pOworICAgIHN0YXRpYyB2b2lkIGRpZFNlbmRCb2R5RGF0
YShDRlVSTENvbm5lY3Rpb25SZWYsIENGSW5kZXggYnl0ZXNXcml0dGVuLCBDRkluZGV4IHRvdGFs
Qnl0ZXNXcml0dGVuLCBDRkluZGV4IHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUsIGNvbnN0IHZv
aWQgKmluZm8pOworICAgIHN0YXRpYyBCb29sZWFuIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KENGVVJMQ29ubmVjdGlvblJlZiwgY29uc3Qgdm9pZCAqaW5mbyk7CisgICAgc3RhdGljIENGUmVh
ZFN0cmVhbVJlZiBuZWVkTmV3Qm9keVN0cmVhbShDRlVSTENvbm5lY3Rpb25SZWYsIENGVVJMUmVx
dWVzdFJlZiwgY29uc3Qgdm9pZCAqaW5mbyk7CisgICAgc3RhdGljIEJvb2xlYW4gY2FuUmVzcG9u
ZFRvUHJvdGVjdGlvblNwYWNlKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZVUkxQcm90ZWN0aW9uU3Bh
Y2VSZWYsIGNvbnN0IHZvaWQqIGluZm8pOworICAgIHN0YXRpYyB2b2lkIHdpbGxTZW5kUmVxdWVz
dEZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZVUkxBdXRo
Q2hhbGxlbmdlUmVmLCBjb25zdCB2b2lkICppbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRSZWNl
aXZlRGF0YUFycmF5KENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZBcnJheVJlZiwgY29uc3Qgdm9pZCAq
aW5mbyk7CisKKyAgICBDRlVSTENvbm5lY3Rpb25DbGllbnRfVjYgbV93cmFwcGVkQ2xpZW50IHsg
fTsKKyAgICBDRlVSTENvbm5lY3Rpb25DbGllbnRfVjYgbV9jbGllbnQgeyB9OworfTsKKworfQor
CisjZW5kaWYgLy8gV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXIubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNGVVJMQ29ubmVjdGlvbkNsaWVu
dFdyYXBwZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzliYmQzYjdmNGNmM2RjNDE3Nzk5MWVlYmI2Zjc4ZWZl
ODcyYjFmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2Vi
Q0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5tbQpAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYkNGVVJMQ29ubmVjdGlvbkNs
aWVudFdyYXBwZXIuaCIKKworI2ltcG9ydCAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
aCIKKyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2ltcG9ydCAiV2ViUHJv
Y2Vzcy5oIgorI2ltcG9ydCA8V2ViQ29yZS9VUkwuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0NGSW5kZXggV2ViQ0ZVUkxDb25uZWN0aW9u
Q2xpZW50V3JhcHBlcjo6bWF4aW11bVN1cHBvcnRlZENsaWVudFZlcnNpb24oKQoreworICAgIHJl
dHVybiA2OworfQorCitXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpXZWJDRlVSTENv
bm5lY3Rpb25DbGllbnRXcmFwcGVyKENGVVJMQ29ubmVjdGlvbkNsaWVudCogd3JhcHBlZENsaWVu
dCkKK3sKKyAgICBzd2l0Y2ggKHdyYXBwZWRDbGllbnQtPnZlcnNpb24pIHsKKyAgICBjYXNlIDA6
CisgICAgICAgIG1lbWNweSgmbV93cmFwcGVkQ2xpZW50LCB3cmFwcGVkQ2xpZW50LCBzaXplb2Yo
Q0ZVUkxDb25uZWN0aW9uQ2xpZW50X1YwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToK
KyAgICAgICAgbWVtY3B5KCZtX3dyYXBwZWRDbGllbnQsIHdyYXBwZWRDbGllbnQsIHNpemVvZihD
RlVSTENvbm5lY3Rpb25DbGllbnRfVjEpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgor
ICAgICAgICBtZW1jcHkoJm1fd3JhcHBlZENsaWVudCwgd3JhcHBlZENsaWVudCwgc2l6ZW9mKENG
VVJMQ29ubmVjdGlvbkNsaWVudF9WMikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDM6Cisg
ICAgICAgIG1lbWNweSgmbV93cmFwcGVkQ2xpZW50LCB3cmFwcGVkQ2xpZW50LCBzaXplb2YoQ0ZV
UkxDb25uZWN0aW9uQ2xpZW50X1YzKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAg
ICAgICAgbWVtY3B5KCZtX3dyYXBwZWRDbGllbnQsIHdyYXBwZWRDbGllbnQsIHNpemVvZihDRlVS
TENvbm5lY3Rpb25DbGllbnRfVjQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA1OgorICAg
ICAgICBtZW1jcHkoJm1fd3JhcHBlZENsaWVudCwgd3JhcHBlZENsaWVudCwgc2l6ZW9mKENGVVJM
Q29ubmVjdGlvbkNsaWVudF9WNSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDY6CisgICAg
ICAgIG1lbWNweSgmbV93cmFwcGVkQ2xpZW50LCB3cmFwcGVkQ2xpZW50LCBzaXplb2YoQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50X1Y2KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIG1fY2xpZW50LnZlcnNpb24g
PSA2OworICAgIG1fY2xpZW50LmNsaWVudEluZm8gPSB0aGlzOworICAgIG1fY2xpZW50LnJldGFp
biA9ICZyZXRhaW47CisgICAgbV9jbGllbnQucmVsZWFzZSA9ICZyZWxlYXNlOworICAgIG1fY2xp
ZW50LmRpZFJlY2VpdmVSZXNwb25zZSA9ICZkaWRSZWNlaXZlUmVzcG9uc2U7CisKKyAgICBpZiAo
bV93cmFwcGVkQ2xpZW50LmNvcHlEZXNjcmlwdGlvbikKKyAgICAgICAgbV9jbGllbnQuY29weURl
c2NyaXB0aW9uID0gJmNvcHlEZXNjcmlwdGlvbjsKKyAgICBpZiAobV93cmFwcGVkQ2xpZW50Lndp
bGxTZW5kUmVxdWVzdCkKKyAgICAgICAgbV9jbGllbnQud2lsbFNlbmRSZXF1ZXN0ID0gJndpbGxT
ZW5kUmVxdWVzdDsKKyAgICBpZiAobV93cmFwcGVkQ2xpZW50LmRpZFJlY2VpdmVEYXRhKQorICAg
ICAgICBtX2NsaWVudC5kaWRSZWNlaXZlRGF0YSA9ICZkaWRSZWNlaXZlRGF0YTsKKyAgICBpZiAo
bV93cmFwcGVkQ2xpZW50LmRpZFN0b3BCdWZmZXJpbmcpCisgICAgICAgIG1fY2xpZW50LmRpZFN0
b3BCdWZmZXJpbmcgPSAmZGlkU3RvcEJ1ZmZlcmluZzsKKyAgICBpZiAobV93cmFwcGVkQ2xpZW50
LmRpZEZpbmlzaExvYWRpbmcpCisgICAgICAgIG1fY2xpZW50LmRpZEZpbmlzaExvYWRpbmcgPSAm
ZGlkRmluaXNoTG9hZGluZzsKKyAgICBpZiAobV93cmFwcGVkQ2xpZW50LmRpZEZhaWwpCisgICAg
ICAgIG1fY2xpZW50LmRpZEZhaWwgPSAmZGlkRmFpbDsKKyAgICBpZiAobV93cmFwcGVkQ2xpZW50
LndpbGxDYWNoZVJlc3BvbnNlKQorICAgICAgICBtX2NsaWVudC53aWxsQ2FjaGVSZXNwb25zZSA9
ICZ3aWxsQ2FjaGVSZXNwb25zZTsKKyAgICBpZiAobV93cmFwcGVkQ2xpZW50LmRpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKKyAgICAgICAgbV9jbGllbnQuZGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlID0gJmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsK
KyAgICBpZiAobV93cmFwcGVkQ2xpZW50LmRpZFNlbmRCb2R5RGF0YSkKKyAgICAgICAgbV9jbGll
bnQuZGlkU2VuZEJvZHlEYXRhID0gJmRpZFNlbmRCb2R5RGF0YTsKKyAgICBpZiAobV93cmFwcGVk
Q2xpZW50LnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQorICAgICAgICBtX2NsaWVudC5zaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZSA9ICZzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZTsKKyAg
ICBpZiAobV93cmFwcGVkQ2xpZW50Lm5lZWROZXdCb2R5U3RyZWFtKQorICAgICAgICBtX2NsaWVu
dC5uZWVkTmV3Qm9keVN0cmVhbSA9ICZuZWVkTmV3Qm9keVN0cmVhbTsKKyAgICBpZiAobV93cmFw
cGVkQ2xpZW50LmNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZSkKKyAgICAgICAgbV9jbGllbnQu
Y2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNlID0gJmNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFj
ZTsKKyAgICBpZiAobV93cmFwcGVkQ2xpZW50LndpbGxTZW5kUmVxdWVzdEZvckF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKQorICAgICAgICBtX2NsaWVudC53aWxsU2VuZFJlcXVlc3RGb3JBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSA9ICZ3aWxsU2VuZFJlcXVlc3RGb3JBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTsKKyAgICBpZiAobV93cmFwcGVkQ2xpZW50LmRpZFJlY2VpdmVEYXRhQXJyYXkpCisgICAg
ICAgIG1fY2xpZW50LmRpZFJlY2VpdmVEYXRhQXJyYXkgPSAmZGlkUmVjZWl2ZURhdGFBcnJheTsK
KworICAgIGlmIChtX3dyYXBwZWRDbGllbnQucmV0YWluKQorICAgICAgICBtX3dyYXBwZWRDbGll
bnQucmV0YWluKG1fd3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKK30KKworV2ViQ0ZVUkxDb25u
ZWN0aW9uQ2xpZW50V3JhcHBlcjo6fldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIoKQor
eworICAgIGlmIChtX3dyYXBwZWRDbGllbnQucmVsZWFzZSkKKyAgICAgICAgbV93cmFwcGVkQ2xp
ZW50LnJlbGVhc2UobV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworfQorCitjb25zdCB2b2lk
KiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpyZXRhaW4oY29uc3Qgdm9pZCogaW5m
bykKK3sKKyAgICBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0aGlzSW5mbyA9IHN0
YXRpY19jYXN0PFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqPihjb25zdF9jYXN0PHZv
aWQqPihpbmZvKSk7CisgICAgdGhpc0luZm8tPnJlZigpOworICAgIHJldHVybiB0aGlzSW5mbzsK
K30KKwordm9pZCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpyZWxlYXNlKGNvbnN0
IHZvaWQqIGluZm8pCit7CisgICAgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhp
c0luZm8gPSBzdGF0aWNfY2FzdDxXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4oY29u
c3RfY2FzdDx2b2lkKj4oaW5mbykpOworICAgIHRoaXNJbmZvLT5kZXJlZigpOworfQorCitDRlN0
cmluZ1JlZiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpjb3B5RGVzY3JpcHRpb24o
Y29uc3Qgdm9pZCogaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRX
cmFwcGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNs
aWVudFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5j
b3B5RGVzY3JpcHRpb24pCisgICAgICAgIHJldHVybiB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50
LmNvcHlEZXNjcmlwdGlvbih0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitDRlVSTFJlcXVlc3RSZWYgV2ViQ0ZVUkxDb25uZWN0
aW9uQ2xpZW50V3JhcHBlcjo6d2lsbFNlbmRSZXF1ZXN0KENGVVJMQ29ubmVjdGlvblJlZiBjb25u
LCBDRlVSTFJlcXVlc3RSZWYgcmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgY29u
c3Qgdm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFw
cGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVu
dFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC53aWxs
U2VuZFJlcXVlc3QpCisgICAgICAgIHJldHVybiB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50Lndp
bGxTZW5kUmVxdWVzdChjb25uLCByZXF1ZXN0LCByZXNwb25zZSwgdGhpc0luZm8tPm1fd3JhcHBl
ZENsaWVudC5jbGllbnRJbmZvKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBXZWJD
RlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoQ0ZVUkxDb25u
ZWN0aW9uUmVmIGNvbm4sIENGVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIGNvbnN0IHZvaWQgKmlu
Zm8pCit7CisgICAgY29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0lu
Zm8gPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4o
aW5mbyk7CisKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmQ29va2llcyA9IGFkb3B0Q0Yo
Q0ZIVFRQTWVzc2FnZUNvcHlIZWFkZXJGaWVsZFZhbHVlKENGVVJMUmVzcG9uc2VHZXRIVFRQUmVz
cG9uc2UocmVzcG9uc2UpLCBDRlNUUigiU2V0LUNvb2tpZSIpKSk7CisgICAgaWYgKGNmQ29va2ll
cyAmJiBDRlN0cmluZ0dldExlbmd0aChjZkNvb2tpZXMuZ2V0KCkpKSB7CisgICAgICAgIFN0cmlu
ZyBjb29raWVzID0gY2ZDb29raWVzLmdldCgpOworICAgICAgICBVUkwgcmVxdWVzdFVSTCA9IENG
VVJMUmVzcG9uc2VHZXRVUkwocmVzcG9uc2UpOworICAgICAgICBVUkwgZmlyc3RQYXJ0eUZvckNv
b2tpZXNVUkw7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0
aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OlNldENvb2tpZXNGcm9tRE9NKFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
LCBmaXJzdFBhcnR5Rm9yQ29va2llc1VSTCwgcmVxdWVzdFVSTCwgY29va2llcyksIDApOworICAg
IH0KKworICAgIGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmRpZFJlY2VpdmVSZXNwb25z
ZSkKKyAgICAgICAgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRSZWNlaXZlUmVzcG9uc2Uo
Y29ubiwgcmVzcG9uc2UsIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2xpZW50SW5mbyk7Cit9
CisKK3ZvaWQgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZURhdGEo
Q0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGRGF0YVJlZiBkYXRhLCBDRkluZGV4IG9yaWdpbmFs
TGVuZ3RoLCBjb25zdCB2b2lkICppbmZvKQoreworICAgIGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlv
bkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxDb25u
ZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworICAgIGlmICh0aGlzSW5mby0+bV93cmFwcGVk
Q2xpZW50LmRpZFJlY2VpdmVEYXRhKQorICAgICAgICB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50
LmRpZFJlY2VpdmVEYXRhKGNvbm4sIGRhdGEsIG9yaWdpbmFsTGVuZ3RoLCB0aGlzSW5mby0+bV93
cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYkNGVVJMQ29ubmVjdGlvbkNs
aWVudFdyYXBwZXI6OmRpZFN0b3BCdWZmZXJpbmcoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENG
RGF0YVJlZiBidWZmZXJlZERhdGEsIENGSW5kZXggb3JpZ2luYWxMZW5ndGgsIGNvbnN0IHZvaWQg
KmluZm8pCit7CisgICAgY29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhp
c0luZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVy
Kj4oaW5mbyk7CisgICAgaWYgKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuZGlkU3RvcEJ1ZmZl
cmluZykKKyAgICAgICAgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRTdG9wQnVmZmVyaW5n
KGNvbm4sIGJ1ZmZlcmVkRGF0YSwgb3JpZ2luYWxMZW5ndGgsIHRoaXNJbmZvLT5tX3dyYXBwZWRD
bGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3Jh
cHBlcjo6ZGlkRmluaXNoTG9hZGluZyhDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgY29uc3Qgdm9p
ZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0
aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRGaW5pc2hM
b2FkaW5nKQorICAgICAgICB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmRpZEZpbmlzaExvYWRp
bmcoY29ubiwgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9p
ZCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpkaWRGYWlsKENGVVJMQ29ubmVjdGlv
blJlZiBjb25uLCBDRkVycm9yUmVmIGVycm9yLCBjb25zdCB2b2lkICppbmZvKQoreworICAgIGNv
bnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nh
c3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworICAgIGlm
ICh0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmRpZEZhaWwpCisgICAgICAgIHRoaXNJbmZvLT5t
X3dyYXBwZWRDbGllbnQuZGlkRmFpbChjb25uLCBlcnJvciwgdGhpc0luZm8tPm1fd3JhcHBlZENs
aWVudC5jbGllbnRJbmZvKTsKK30KKworQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiBXZWJDRlVSTENv
bm5lY3Rpb25DbGllbnRXcmFwcGVyOjp3aWxsQ2FjaGVSZXNwb25zZShDRlVSTENvbm5lY3Rpb25S
ZWYgY29ubiwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiBjYWNoZWRSZXNwb25zZSwgY29uc3Qgdm9p
ZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0
aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC53aWxsQ2FjaGVS
ZXNwb25zZSkKKyAgICAgICAgcmV0dXJuIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQud2lsbENh
Y2hlUmVzcG9uc2UoY29ubiwgY2FjaGVkUmVzcG9uc2UsIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGll
bnQuY2xpZW50SW5mbyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2hhbGxlbmdl
LCBjb25zdCB2b2lkICppbmZvKQoreworICAgIGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVu
dFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9u
Q2xpZW50V3JhcHBlcio+KGluZm8pOworICAgIGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50
LmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKKyAgICAgICAgdGhpc0luZm8tPm1f
d3JhcHBlZENsaWVudC5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29ubiwgY2hh
bGxlbmdlLCB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lk
IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZFNlbmRCb2R5RGF0YShDRlVSTENv
bm5lY3Rpb25SZWYgY29ubiwgQ0ZJbmRleCBieXRlc1dyaXR0ZW4sIENGSW5kZXggdG90YWxCeXRl
c1dyaXR0ZW4sIENGSW5kZXggdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSwgY29uc3Qgdm9pZCAq
aW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0aGlz
SW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIq
PihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRTZW5kQm9keURh
dGEpCisgICAgICAgIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuZGlkU2VuZEJvZHlEYXRhKGNv
bm4sIGJ5dGVzV3JpdHRlbiwgdG90YWxCeXRlc1dyaXR0ZW4sIHRvdGFsQnl0ZXNFeHBlY3RlZFRv
V3JpdGUsIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK0Jvb2xl
YW4gV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIGNvbnN0IHZvaWQgKmluZm8pCit7CisgICAg
Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0luZm8gPSBzdGF0aWNf
Y2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4oaW5mbyk7CisgICAg
aWYgKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2Up
CisgICAgICAgIHJldHVybiB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LnNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlKGNvbm4sIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2xpZW50SW5mbyk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitDRlJlYWRTdHJlYW1SZWYgV2ViQ0ZVUkxDb25uZWN0
aW9uQ2xpZW50V3JhcHBlcjo6bmVlZE5ld0JvZHlTdHJlYW0oQ0ZVUkxDb25uZWN0aW9uUmVmIGNv
bm4sIENGVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBjb25zdCB2b2lkICppbmZvKQoreworICAgIGNv
bnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nh
c3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworICAgIGlm
ICh0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50Lm5lZWROZXdCb2R5U3RyZWFtKQorICAgICAgICBy
ZXR1cm4gdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5uZWVkTmV3Qm9keVN0cmVhbShjb25uLCBy
ZXF1ZXN0LCB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworICAgIHJldHVy
biBudWxscHRyOworfQorCitCb29sZWFuIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6
OmNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZShDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZV
UkxQcm90ZWN0aW9uU3BhY2VSZWYgcHJvdGVjdGlvblNwYWNlLCBjb25zdCB2b2lkKiBpbmZvKQor
eworICAgIGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0g
c3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8p
OworICAgIGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNhblJlc3BvbmRUb1Byb3RlY3Rp
b25TcGFjZSkKKyAgICAgICAgcmV0dXJuIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2FuUmVz
cG9uZFRvUHJvdGVjdGlvblNwYWNlKGNvbm4sIHByb3RlY3Rpb25TcGFjZSwgdGhpc0luZm8tPm1f
d3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6d2lsbFNlbmRSZXF1ZXN0Rm9yQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGVVJMQXV0aENoYWxs
ZW5nZVJlZiBjaGFsbGVuZ2UsIGNvbnN0IHZvaWQgKmluZm8pCit7CisgICAgY29uc3QgV2ViQ0ZV
UkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0luZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBX
ZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4oaW5mbyk7CisgICAgaWYgKHRoaXNJbmZv
LT5tX3dyYXBwZWRDbGllbnQud2lsbFNlbmRSZXF1ZXN0Rm9yQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UpCisgICAgICAgIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQud2lsbFNlbmRSZXF1ZXN0Rm9y
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29ubiwgY2hhbGxlbmdlLCB0aGlzSW5mby0+bV93cmFw
cGVkQ2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVu
dFdyYXBwZXI6OmRpZFJlY2VpdmVEYXRhQXJyYXkoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENG
QXJyYXlSZWYgZGF0YUFycmF5LCBjb25zdCB2b2lkICppbmZvKQoreworICAgIGNvbnN0IFdlYkNG
VVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworICAgIGlmICh0aGlzSW5m
by0+bV93cmFwcGVkQ2xpZW50LmRpZFJlY2VpdmVEYXRhQXJyYXkpCisgICAgICAgIHRoaXNJbmZv
LT5tX3dyYXBwZWRDbGllbnQuZGlkUmVjZWl2ZURhdGFBcnJheShjb25uLCBkYXRhQXJyYXksIHRo
aXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK0NGVVJMQ29ubmVjdGlv
bkNsaWVudCogV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6Y2xpZW50KCkKK3sKKyAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDRlVSTENvbm5lY3Rpb25DbGllbnQqPigmbV9jbGll
bnQpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggNmEzZWY1YThjYzdlZjNhN2Q2ZjY5NWY0NDMxZGJhYTgxNTRjYjIy
ZS4uMDJmNjE0YjM4MGZhYWVlMDE0OTZjMzE5NjRhYTY5NjhlYTkwMWRhMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY5OSw2
ICsxNjk5LDcgQEAKIAkJQ0QxOUEyNkUxQTEzRTgzNDAwOEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNM
b2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDRDE5QTI2QTFBMTNFODIxMDA4RDY1MEUgLyogV2ViRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQuaCAqLzsgfTsKIAkJQ0Q1QzY2QTAxMzRCOUQzODAwNEZFMkE4IC8qIEluamVjdGVkQnVuZGxl
UGFnZUZ1bGxTY3JlZW5DbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0Q1QzY2OUUxMzRCOUQzNjAwNEZFMkE4IC8qIEluamVjdGVkQnVuZGxl
UGFnZUZ1bGxTY3JlZW5DbGllbnQuY3BwICovOyB9OwogCQlDRDVDNjZBMTEzNEI5RDM4MDA0RkUy
QTggLyogSW5qZWN0ZWRCdW5kbGVQYWdlRnVsbFNjcmVlbkNsaWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q1QzY2OUYxMzRCOUQzNzAwNEZFMkE4
IC8qIEluamVjdGVkQnVuZGxlUGFnZUZ1bGxTY3JlZW5DbGllbnQuaCAqLzsgfTsKKwkJQ0Q2MjRB
NUExQUUwOTEwMDAwQTMxODJFIC8qIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENjI0QTU4MUFF
MDkxMDAwMEEzMTgyRSAvKiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLmggKi87IH07
CiAJCUNENjdEMzBFMTVDMDhGOUEwMDg0M0FERiAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRDY3RDMwODE1QzA3QkUwMDA4NDNBREYgLyogSW5qZWN0ZWRCdW5kbGVQYWdl
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwICovOyB9OwogCQlDRDZGNzVGNDEzMUI2NkQwMDBE
NkIyMUUgLyogV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDczQkEzRTEzMUEyRThBMDBFRURFRDIgLyog
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5jcHAgKi87IH07CiAJCUNENzNCQTQ3MTMxQUNDOUEw
MEVFREVEMiAvKiBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENzNCQTQ1MTMx
QUNDODgwMEVFREVEMiAvKiBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCAqLzsgfTsKQEAgLTE3MTAsNiArMTcxMSw3IEBACiAJCUNEQzM4MzA4MTcyMTE4OTAwMDhB
MkZDMyAvKiBXZWJQcm9jZXNzU2hpbS5keWxpYiBpbiBDb3B5IFdlYlByb2Nlc3NTaGltICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzM4MzA2MTcyMTE3OTkwMDhBMkZDMyAv
KiBXZWJQcm9jZXNzU2hpbS5keWxpYiAqLzsgfTsKIAkJQ0RDMzgzMEMxNzIxMjI4MjAwOEEyRkMz
IC8qIENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDMzgzMEIxNzIxMjFDRTAwOEEyRkMzIC8qIENvb2tpZVN0
b3JhZ2VTaGltTGlicmFyeS5oICovOyB9OwogCQlDREMzODMxMDE3MjEyNDQwMDA4QTJGQzMgLyog
Q29va2llU3RvcmFnZVNoaW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDREMzODMwRDE3MjEyNDJEMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW0u
bW0gKi87IH07CisJCUNEQzRFQzQ2MUFFNkE5MDAwMDlBQ0JEMSAvKiBXZWJDRlVSTENvbm5lY3Rp
b25DbGllbnRXcmFwcGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0Q2MjRBNTcxQUUwOTEwMDAwQTMxODJFIC8qIFdlYkNGVVJMQ29ubmVjdGlvbkNs
aWVudFdyYXBwZXIubW0gKi87IH07CiAJCUNEQ0E4NUM4MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0RDQTg1QzYxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXIubW0gKi87IH07CiAJCUNEQ0E4NUM5MTMyQUJBNEUwMEU5NjFERiAv
KiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRENBODVDNzEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlci5oICovOyB9OwogCQlDREU2RTJEMzE5RjczMUM0MDBCQTk2
ODggLyogV2ViT3JpZ2luRGF0YU1hbmFnZXJTdXBwbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREU2RTJEMjE5RjczMUM0MDBCQTk2ODggLyog
V2ViT3JpZ2luRGF0YU1hbmFnZXJTdXBwbGVtZW50LmggKi87IH07CkBAIC0zOTU2LDYgKzM5NTgs
OCBAQAogCQlDRDE5QTI2QTFBMTNFODIxMDA4RDY1MEUgLyogV2ViRGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q1QzY2OUUxMzRC
OUQzNjAwNEZFMkE4IC8qIEluamVjdGVkQnVuZGxlUGFnZUZ1bGxTY3JlZW5DbGllbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlRnVs
bFNjcmVlbkNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENUM2NjlG
MTM0QjlEMzcwMDRGRTJBOCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VGdWxsU2NyZWVuQ2xpZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZUZ1bGxT
Y3JlZW5DbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q2MjRBNTcxQUUw
OTEwMDAwQTMxODJFIC8qIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDRlVSTENvbm5lY3Rpb25DbGll
bnRXcmFwcGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDYyNEE1ODFBRTA5
MTAwMDBBMzE4MkUgLyogV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENjdEMzA4MTVDMDdCRTAwMDg0M0FE
RiAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZVBhZ2VEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENjdE
MzA5MTVDMDdCRTAwMDg0M0FERiAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VEaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRs
ZVBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDRDczQkEzNzEzMUEyOUZFMDBFRURFRDIgLyogV2ViRnVsbFNjcmVlbk1hbmFnZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViRnVsbFNjcmVlbk1hbmFn
ZXIuY3BwOyBwYXRoID0gRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NjAwLDYgKzY2MDQsOCBAQAogCQkJCUJDMTExQjVC
MTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkuaCAqLywKIAkJCQlCQzExMUI1QzEx
MkY2Mjk4MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5Lm1tICovLAogCQkJCTUxQUQzNTcyMUFE
MkYzNzUwMDU3QjM4RSAvKiBXZWJIaXRUZXN0UmVzdWx0Lm1tICovLAorCQkJCUNENjI0QTU3MUFF
MDkxMDAwMEEzMTgyRSAvKiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLm1tICovLAor
CQkJCUNENjI0QTU4MUFFMDkxMDAwMEEzMTgyRSAvKiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRX
cmFwcGVyLmggKi8sCiAJCQkJOTA1NjIwRTUxMkJDMjQ3NjAwMDc5OUI2IC8qIFdlYk1lbW9yeVNh
bXBsZXIubWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CkBAIC04MzE0LDYgKzgzMjAs
NyBAQAogCQkJCTZFRTg0OUM4MTM2OEQ5MzkwMDM4RDQ4MSAvKiBXS0luc3BlY3RvclByaXZhdGVN
YWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQTlFMTBCMTMxNUNEMTgwMDlFNzAzMSAvKiBXS0tl
eVZhbHVlU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENzkwQTlGMUFENzE2
NDkwMEFCOTBCMyAvKiBXS0xheW91dE1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUNENjI0QTVB
MUFFMDkxMDAwMEEzMTgyRSAvKiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzM0QzQTNCNjEzMzk2MDBCMDA3MDlCRTQgLyogV0tNZWRpYUNhY2hl
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0MDc1RkUxMjRGRjAyNzAwNjhGMjBBIC8q
IFdLTXV0YWJsZUFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQwNzYwMDEyNEZGMDI3MDA2
OEYyMEEgLyogV0tNdXRhYmxlRGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDEwNSw2
ICsxMDExMiw3IEBACiAJCQkJMzE4QkUxNzUxNDc0M0RENzAwQThGQkIyIC8qIFdLTm90aWZpY2F0
aW9uTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUEyRUM3NzE0OEQ2NjJFMDA4MTBE
NzEgLyogV0tOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxQUQwOUYyQjE3NDNGOEU2MDBBOTVFNTAgLyogV0tOUEFQSVBsdWdJbkNvbnRhaW5lci5t
bSBpbiBTb3VyY2VzICovLAorCQkJCUNEQzRFQzQ2MUFFNkE5MDAwMDlBQ0JEMSAvKiBXZWJDRlVS
TENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzdDNEMwOTMx
ODE0QjNBRjAwMzY4OEI5IC8qIFdLTlNBcnJheS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTM3M0NF
QUQ1MTg1NDE3QUUwMDhDMzYzRCAvKiBXS05TRGF0YS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTM3
MUExOTQxMTgyNEQyOTMwMEYzMkE1RSAvKiBXS05TRGljdGlvbmFyeS5tbSBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IGMwZThiZDU0ZjQ2N2U2NTEwNmY1MGYzYzFmZjQyYzFkODQ5Njg1NTIuLjE5ODc3
MGY4YTMxYzQxYjZjZDM5M2NhZGVlN2M5NTVlYzUyOTNmM2IgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBA
QAorMjAxNS0wNC0yNCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAg
ICBbV0syXSBDb29raWVzIHNldCBkdXJpbmcgbWVkaWEgbG9hZGluZyBhcmUgbm90IGFkZGVkIHRv
IGNvb2tpZSBzdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ0MTc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBodHRwL3Rlc3RzL21lZGlhL3Jlc291cmNlcy9nZXQtY29va2llLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvbWVkaWEvcmVzb3VyY2VzL3ZpZGVvLXNldC1jb29raWUu
cGhwOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXNldC1jb29raWUu
aHRtbDogQWRkZWQuCisKIDIwMTUtMDQtMDcgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIGEgc2V0dGluZyAmIHJlc3RyaWN0aW9uIHdoaWNoIHByZXZlbnRz
IG5vbi1pbnRlcmFjdGl2dGUgcGxheWJhY2sgb2YgYXVkaWJsZSBtZWRpYSBlbGVtZW50cy4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvcmVzb3VyY2VzL2dldC1jb29r
aWUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvcmVzb3VyY2VzL2dldC1jb29r
aWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45NzVkMDRkZDBlODViYmQwN2EwNzVhZjFjYzU3ODczNmVkZjhi
MGE2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS9yZXNv
dXJjZXMvZ2V0LWNvb2tpZS5odG1sCkBAIC0wLDAgKzEgQEAKKzxzY3JpcHQ+ZG9jdW1lbnQud3Jp
dGUoZG9jdW1lbnQuY29va2llKTwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvcmVzb3VyY2VzL3ZpZGVv
LXNldC1jb29raWUucGhwIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS9yZXNvdXJjZXMv
dmlkZW8tc2V0LWNvb2tpZS5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmZkMmQ3ZmJhZmFkYTJjMDFjNzlhMjFm
OWQzYzA0M2Q5N2ZlMjQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbWVkaWEvcmVzb3VyY2VzL3ZpZGVvLXNldC1jb29raWUucGhwCkBAIC0wLDAgKzEsMTYgQEAK
Kzw/cGhwCisKKyAgICAkdWEgPSAkX1NFUlZFUlsiSFRUUF9VU0VSX0FHRU5UIl07CisKKwloZWFk
ZXIoIkNhY2hlLUNvbnRyb2w6IG5vLXN0b3JlIik7CisJaGVhZGVyKCJDb25uZWN0aW9uOiBjbG9z
ZSIpOworCWhlYWRlcigiU2V0LUNvb2tpZTogVEVTVD1WQUxJRDsgcGF0aD0vIik7CisKKyAgICAk
ZmlsZU5hbWUgPSAkX0dFVFsibmFtZSJdOworICAgICR0eXBlID0gJF9HRVRbInR5cGUiXTsKKwor
ICAgICRfR0VUID0gYXJyYXkoKTsKKyAgICAkX0dFVFsnbmFtZSddID0gJGZpbGVOYW1lOworICAg
ICRfR0VUWyd0eXBlJ10gPSAkdHlwZTsKKyAgICBAaW5jbHVkZSgiLi9zZXJ2ZS12aWRlby5waHAi
KTsgCis/PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS92aWRlby1z
ZXQtY29va2llLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXNldC1j
b29raWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Y2ZlZTM0MTY2MzU4ZmNlNjI2NzFiMGI4OGRjZDM2MjY0
ODdmMzI1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS92
aWRlby1zZXQtY29va2llLmh0bWwKQEAgLTAsMCArMSw0OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPS4uLy4uL21lZGlhLXJlc291cmNlcy92aWRl
by10ZXN0LmpzPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPS4uLy4uL21lZGlhLXJlc291cmNl
cy9tZWRpYS1maWxlLmpzPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikgeworICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cisg
ICAgICAgICAgICB0ZXN0UnVubmVyLnNldEFsd2F5c0FjY2VwdENvb2tpZXModHJ1ZSk7CisgICAg
ICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGRvY3VtZW50LmNvb2tpZSA9ICdURVNUPUlOVkFMSUQ7IHBhdGg9Lyc7CisgICAgICAgIHZhciBm
cmFtZTsKKworICAgICAgICBmdW5jdGlvbiBzZXRDb29raWUoKQorICAgICAgICB7CisgICAgICAg
ICAgICB0ZXN0RXhwZWN0ZWQoJ2RvY3VtZW50LmNvb2tpZScsICdURVNUPUlOVkFMSUQnKTsKKwor
ICAgICAgICAgICAgZmluZE1lZGlhRWxlbWVudCgpOworICAgICAgICAgICAgd2FpdEZvckV2ZW50
KCdjYW5wbGF5dGhyb3VnaCcsIG9uY2FucGxheXRocm91Z2gpOworCisgICAgICAgICAgICB2YXIg
bW92aWUgPSBmaW5kTWVkaWFGaWxlKCd2aWRlbycsICd0ZXN0Jyk7CisgICAgICAgICAgICB2YXIg
dHlwZSA9IG1pbWVUeXBlRm9yRXh0ZW5zaW9uKG1vdmllLnNwbGl0KCcuJykucG9wKCkpOworCisg
ICAgICAgICAgICB2aWRlbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aWRlbycpOworICAg
ICAgICAgICAgdmlkZW8uc3JjID0gInJlc291cmNlcy92aWRlby1zZXQtY29va2llLnBocD9uYW1l
PSIgKyBtb3ZpZSArICcmdHlwZT0nICsgdHlwZTsKKyAgICAgICAgICAgIHZpZGVvLnBsYXkoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9uY2FucGxheXRocm91Z2goKQorICAgICAg
ICB7CisgICAgICAgICAgICBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIp
OworICAgICAgICAgICAgZnJhbWUuc3JjID0gInJlc291cmNlcy9nZXQtY29va2llLmh0bWwiOwor
ICAgICAgICAgICAgd2FpdEZvckV2ZW50T24oZnJhbWUsICdsb2FkJywgb25mcmFtZWxvYWQpOwor
ICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmcmFtZSk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBvbmZyYW1lbG9hZChldmVudCkKKyAgICAgICAgeworICAgICAg
ICAgICAgdGVzdEV4cGVjdGVkKCdmcmFtZS5jb250ZW50RG9jdW1lbnQuY29va2llJywgJ1RFU1Q9
VkFMSUQnKTsKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJzZXRDb29raWUoKSI+Cis8dmlkZW8gaWQ9InZpZGVv
Ij48L3ZpZGVvPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
LXdrMS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGJiNjgzNTBiZTdkZTU1Nzk0MGI3ZDZiZjQ3N2Mx
ZjRmZDFjZGJmMDUuLmE3ZWY3ODE1ZjA4MWU0NzMxNTk4N2IzNTI0MTE5OTNhNzBmMjRiYWIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucwor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTM0
LDYgKzM0LDggQEAgd2Via2l0Lm9yZy9iLzEzOTg2MiBlZGl0aW5nL3NwZWxsaW5nL2dyYW1tYXIt
ZWRpdC13b3JkLmh0bWwgWyBTa2lwIF0KIAogd2Via2l0Lm9yZy9iLzE0NDEyNyBjb21wb3NpdGlu
Zy9zY3JvbGxpbmcvdG91Y2gtc2Nyb2xsLXRvLWNsaXAuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCiAK
K3dlYmtpdC5vcmcvYi8xNDQxNzQgaHR0cC90ZXN0cy9tZWRpYS92aWRlby1zZXQtY29va2llLmh0
bWwgWyBGYWlsdXJlIF0KKwogIyMjIEVORCBPRiAoMSkgRmFpbHVyZXMgd2l0aCBidWcgcmVwb3J0
cwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251636</attachid>
            <date>2015-04-25 07:26:28 -0700</date>
            <delta_ts>2015-07-16 11:45:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144174-20150425072522.patch</filename>
            <type>text/plain</type>
            <size>33894</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMjk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGRmMzQ3ZDNmMDBjMDI0
ZWFkNWMzMTFiNTI2NjIyNzI3OTViMmQzMy4uYmFmNjhhZWM5MmNmOGY5MWQ3ZTM2ZTliNTdkNDBl
NDgyZDg3OTVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDE1LTA0LTI0ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIENvb2tpZXMgc2V0
IGR1cmluZyBtZWRpYSBsb2FkaW5nIGFyZSBub3QgYWRkZWQgdG8gY29va2llIHN0b3JlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQxNzQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCBX
ZWJLaXQgaGFzIGFkZGVkIGEgc2hpbSB3aGVuIGNvb2tpZXMgYXJlIHJldHJpZXZlZCBmcm9tIHRo
ZSBjb29raWUgc3RvcmUsIGFuZAorICAgICAgICBpbnN0ZWFkLCBjb29raWVzIGFyZSByZXRyaWV2
ZWQgZnJvbSB0aGUgTmV0d29ya1Byb2Nlc3MuIEhvd2V2ZXIsIHdoZW4gY29va2llcyBhcmUgc2V0
CisgICAgICAgIHRocm91Z2ggYSBIVFRQIHJlc3BvbnNlLCBXZWJLaXQgbmV2ZXIgdXBkYXRlcyB0
aGUgTmV0d29ya1Byb2Nlc3Mgd2l0aCB0aG9zZSBuZXcgY29va2llcy4KKworICAgICAgICBUbyBk
byBzbywgV2ViS2l0IHdpbGwgYWRkIGEgbmV3IHNoaW0gb250byB0aGUgQ0ZDb25uZWN0aW9uQ3Jl
YXRlV2l0aFByb3BlcnRpZXMoKSBmdW5jdGlvbiwKKyAgICAgICAgd2hpY2ggd2lsbCByZXBsYWNl
IHRoZSBjbGllbnQgY2FsbGJhY2tzIHByb3ZpZGVkIGluIHRoYXQgZnVuY3Rpb24gd2l0aCBvdXIg
b3duLiBJbiB0aGUKKyAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlLCBpZiB0aGUgcmVzcG9uc2Ug
Y29udGFpbnMgYSAiU2V0LUNvb2tpZSIgaGVhZGVyLCB0aGUgY29va2llIHN0cmluZyB3aWxsCisg
ICAgICAgIGJlIHBhc3NlZCB0byB0aGUgTmV0d29ya1Byb2Nlc3MgZm9yIHN0b3JhZ2UuIER1ZSB0
byB0aGUgZXhpc3RpbmcgY29va2llIHJldHJpZXZhbCBzaGltLAorICAgICAgICB0aGVzZSBuZXcg
Y29va2llcyB3aWxsIGJlIGF2YWlsYWJsZSBkdXJpbmcgZnV0dXJlIG1lZGlhIEhUVFAgcmVxdWVz
dHMuCisKKyAgICAgICAgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciBpcyBhIGNsYXNz
IHdoaWNoIHN0b3JlcyBhIENGVVJMQ29ubmVjdGlvbkNsaWVudCBzdHJ1Y3QsIGFuZAorICAgICAg
ICByZXBsYWNlcyBpdCB3aXRoIGEgbmV3IHN0cnVjdC4gSW4gZWFjaCBvZiB0aGUgY2xpZW50IGNh
bGxiYWNrcywgdGhlIGNsYXNzIHdpbGwgY2FsbCB0aHJvdWdoCisgICAgICAgIHRvIHRoZSBvcmln
aW5hbCBoYW5kbGVyIGlmIHRoYXQgaGFuZGxlciBpcyB2YWxpZC4KKworICAgICAgICAqIFNoYXJl
ZC9tYWMvQ29va2llU3RvcmFnZVNoaW0ubW06CisgICAgICAgIChXZWJLaXQ6OndlYmtpdENvbm5l
Y3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcyk6IENyZWF0ZSBhIFdlYkNGVVJMQ29ubmVjdGlvbkNs
aWVudFdyYXBwZXIsIGFuZAorICAgICAgICAgICAgcmVwbGFjZSB0aGUgY2xpZW50IHBhcmFtZXRl
ciB3aXRoIHRoYXQgbmV3IHdyYXBwZXIuCisgICAgICAgIChXZWJLaXQ6OkNvb2tpZVN0b3JhZ2VT
aGltOjppbml0aWFsaXplKTogSW5pdGlhbGl6ZSB0aGUgbmV3IHNoaW0uCisgICAgICAgICogU2hh
cmVkL21hYy9Db29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwOgorICAgICAgICAoV2ViS2l0Ojpz
aGltQ0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMpOiBDYWxsIHRocm91Z2ggdG8g
dGhlIHNoaW0gbWV0aG9kLgorICAgICAgICAqIFNoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW1M
aWJyYXJ5Lmg6CisgICAgICAgICogU2hhcmVkL21hYy9XZWJDRlVSTENvbm5lY3Rpb25DbGllbnRX
cmFwcGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGll
bnRXcmFwcGVyOjpjcmVhdGUpOgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViQ0ZVUkxDb25uZWN0
aW9uQ2xpZW50V3JhcHBlci5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29u
bmVjdGlvbkNsaWVudFdyYXBwZXI6Om1heGltdW1TdXBwb3J0ZWRDbGllbnRWZXJzaW9uKTogVGhl
IHdyYXBwZXIgY2xhc3MKKyAgICAgICAgICAgIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIENGVVJM
Q29ubmVjdGlvbkNsaWVudF9WNiBvciBvbGRlci4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcik6
IENvcHkgdGhlIGNsaWVudAorICAgICAgICAgICAgY2FsbGJhY2sgcG9uaXRlcnMgaW50byB0aGUg
Y2xhc3MsIGFuZCBjb25zdHJ1Y3QgYSByZXBsYWNlbWVudCBjbGllbnQuCisgICAgICAgIChXZWJL
aXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6On5XZWJDRlVSTENvbm5lY3Rpb25D
bGllbnRXcmFwcGVyKTogUmVsZWFzZSB0aGUgd3JhcHBlZCBjbGllbnQuCisgICAgICAgIChXZWJL
aXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OnJldGFpbik6IENhbGwgcmVmKCku
CisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OnJlbGVh
c2UpOiBDYWxsIGRlcmVmKCkuCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNs
aWVudFdyYXBwZXI6OmNvcHlEZXNjcmlwdGlvbik6IFBhc3MgdGhyb3VnaCB0byB0aGUgd3JhcHBl
ZCBjbGllbnQuCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXI6OndpbGxTZW5kUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENv
bm5lY3Rpb25DbGllbnRXcmFwcGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOiBEaXR0by4gKEFsc28g
ZmV0Y2ggdGhlIG5ldyBjb29raWVzIGZyb20gdGhlIHJlc3BvbnNlLikKKyAgICAgICAgKFdlYktp
dDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZURhdGEpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlk
U3RvcEJ1ZmZlcmluZyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rp
b25DbGllbnRXcmFwcGVyOjpkaWRGaW5pc2hMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJL
aXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZEZhaWwpOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6d2lsbENhY2hl
UmVzcG9uc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xp
ZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZFNlbmRC
b2R5RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGll
bnRXcmFwcGVyOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpuZWVkTmV3Qm9keVN0cmVh
bSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFw
cGVyOjpjYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktp
dDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6d2lsbFNlbmRSZXF1ZXN0Rm9yQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZURhdGFBcnJheSk6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpjbGllbnQpOiBT
aW1wbGUgZ2V0dGVyLgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajogQWRkIHRoZSBuZXcgZmlsZXMgdG8gdGhlIHByb2plY3QuCisKIDIwMTUtMDQtMjQgIEJyZW50
IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgVGV4dEluZGljYXRvciBm
b3IgZW1iZWRkZWQgUERGcyBpcyBzbGlnaHRseSBvZmZzZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW0ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltLm1tCmluZGV4IDNhNDY1NDI4NDQ5NWY2ZDczMzA4
MzU1YTgwOTZkOTM2YzRjNzhmMTguLjJmZGNiNGUwYjI0N2Y0ZmM4OGI0MDhmY2VkYTM3NDQxMDhm
YWRjN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFn
ZVNoaW0ubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hp
bS5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2VTaGltTGlicmFy
eS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViQ0ZVUkxDb25uZWN0
aW9uQ2xpZW50V3JhcHBlci5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgpA
QCAtNDgsNiArNDksOCBAQCB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfQ0ZVUkxSZXF1ZXN0KiBDRlVS
TFJlcXVlc3RSZWY7CiBTT0ZUX0xJTktfRlJBTUVXT1JLKENGTmV0d29yaykKIFNPRlRfTElOSyhD
Rk5ldHdvcmssIENGVVJMUmVxdWVzdEdldFVSTCwgQ0ZVUkxSZWYsIChDRlVSTFJlcXVlc3RSZWYg
cmVxdWVzdCksIChyZXF1ZXN0KSkKIAorZXh0ZXJuICJDIiBDRlVSTENvbm5lY3Rpb25SZWYgQ0ZV
UkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMoQ0ZBbGxvY2F0b3JSZWYgYWxsb2MsIENG
VVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBDRlVSTENvbm5lY3Rpb25DbGllbnQqIGNsaWVudCwgQ0ZE
aWN0aW9uYXJ5UmVmIHByb3BlcnRpZXMpOworCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
QGludGVyZmFjZSBXS05TVVJMU2Vzc2lvbkxvY2FsIDogTlNPYmplY3QKQEAgLTczLDYgKzc2LDIw
IEBAIHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgd2ViS2l0Q29va2llU3RvcmFnZUNvcHlSZXF1ZXN0
SGVhZGVyRmllbGRzRm9yVVJMKENGSFRUUENvCiAgICAgcmV0dXJuIENGRGljdGlvbmFyeUNyZWF0
ZSgwLCBjb29raWVLZXlzLCBjb29raWVWYWx1ZXMsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNh
bGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOwogfQogCisjaWYgVVNF
KENGTkVUV09SSykKK3N0YXRpYyBDRlVSTENvbm5lY3Rpb25SZWYgd2Via2l0Q29ubmVjdGlvbkNy
ZWF0ZVdpdGhQcm9wZXJ0aWVzKENGVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBDRlVSTENvbm5lY3Rp
b25DbGllbnQqIGNsaWVudCwgQ0ZEaWN0aW9uYXJ5UmVmIHByb3BlcnRpZXMpCit7CisjcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAgaWYgKCFjbGllbnQgfHwgY2xpZW50LT52
ZXJzaW9uID4gV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6bWF4aW11bVN1cHBvcnRl
ZENsaWVudFZlcnNpb24oKSkKKyAgICAgICAgcmV0dXJuIENGVVJMQ29ubmVjdGlvbkNyZWF0ZVdp
dGhQcm9wZXJ0aWVzKGtDRkFsbG9jYXRvckRlZmF1bHQsIHJlcXVlc3QsIGNsaWVudCwgcHJvcGVy
dGllcyk7CisKKyAgICBSZWY8V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcj4gd3JhcHBl
ciA9IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmNyZWF0ZShjbGllbnQpOworICAg
IHJldHVybiBDRlVSTENvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcyhrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCByZXF1ZXN0LCB3cmFwcGVyLT5jbGllbnQoKSwgcHJvcGVydGllcyk7CisjcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgcG9wCit9CisjZW5kaWYKKwogQ29va2llU3RvcmFnZVNoaW0mIENv
b2tpZVN0b3JhZ2VTaGltOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxDb29raWVTdG9yYWdlU2hpbT4gc3RvcmFnZTsKQEAgLTgxLDcgKzk4LDExIEBAIENvb2tpZVN0
b3JhZ2VTaGltJiBDb29raWVTdG9yYWdlU2hpbTo6c2luZ2xldG9uKCkKIAogdm9pZCBDb29raWVT
dG9yYWdlU2hpbTo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAgQ29va2llU3RvcmFnZVNoaW1DYWxsYmFj
a3MgY2FsbGJhY2tzID0geyAmd2ViS2l0Q29va2llU3RvcmFnZUNvcHlSZXF1ZXN0SGVhZGVyRmll
bGRzRm9yVVJMIH07CisgICAgQ29va2llU3RvcmFnZVNoaW1DYWxsYmFja3MgY2FsbGJhY2tzID0g
eyAmd2ViS2l0Q29va2llU3RvcmFnZUNvcHlSZXF1ZXN0SGVhZGVyRmllbGRzRm9yVVJMCisjaWYg
VVNFKENGTkVUV09SSykKKyAgICAgICAgLCAmd2Via2l0Q29ubmVjdGlvbkNyZWF0ZVdpdGhQcm9w
ZXJ0aWVzCisjZW5kaWYKKyAgICB9OwogICAgIENvb2tpZVN0b3JhZ2VTaGltSW5pdGlhbGl6ZUZ1
bmMgZnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29va2llU3RvcmFnZVNoaW1Jbml0aWFsaXplRnVu
Yz4oZGxzeW0oUlRMRF9ERUZBVUxULCAiV2ViS2l0Q29va2llU3RvcmFnZVNoaW1Jbml0aWFsaXpl
IikpOwogICAgIGlmIChmdW5jKQogICAgICAgICBmdW5jKGNhbGxiYWNrcyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAK
aW5kZXggNjc3ZGIyN2UxYzlmZDc0Yzk0YmJlMGFiYTc0YmQ4OGIwMTA1NzM4OC4uZWFmMjAxN2Fl
MDBlZjQzOGI4NThkZGEwZjAxOTQyMDViZjcxYWNlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcApAQCAtMzIsNiAr
MzIsMTAgQEAKIAogZXh0ZXJuICJDIiBDRkRpY3Rpb25hcnlSZWYgX0NGSFRUUENvb2tpZVN0b3Jh
Z2VDb3B5UmVxdWVzdEhlYWRlckZpZWxkc0ZvclVSTChDRkFsbG9jYXRvclJlZiBpbkFsbG9jYXRv
ciwgQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBpbkNvb2tpZVN0b3JhZ2UsIENGVVJMUmVmIGluUmVx
dWVzdFVSTCk7CiAKKyNpZiBVU0UoQ0ZORVRXT1JLKQorZXh0ZXJuICJDIiBDRlVSTENvbm5lY3Rp
b25SZWYgQ0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMoQ0ZBbGxvY2F0b3JSZWYg
YWxsb2MsIENGVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBDRlVSTENvbm5lY3Rpb25DbGllbnQqIGNs
aWVudCwgQ0ZEaWN0aW9uYXJ5UmVmIHByb3BlcnRpZXMpOworI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBleHRlcm4gIkMiIHZvaWQgV2ViS2l0Q29va2llU3RvcmFnZVNoaW1Jbml0aWFs
aXplKGNvbnN0IENvb2tpZVN0b3JhZ2VTaGltQ2FsbGJhY2tzJik7CkBAIC03NSw2ICs3OSwzNCBA
QCBzdGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmIHNoaW1DRkhUVFBDb29raWVTdG9yYWdlQ29weVJlcXVl
c3RIZWFkZXJGaWVsZHNGb3JVUkwoQ0ZBbAogCiBEWUxEX0lOVEVSUE9TRShzaGltQ0ZIVFRQQ29v
a2llU3RvcmFnZUNvcHlSZXF1ZXN0SGVhZGVyRmllbGRzRm9yVVJMLCBfQ0ZIVFRQQ29va2llU3Rv
cmFnZUNvcHlSZXF1ZXN0SGVhZGVyRmllbGRzRm9yVVJMKTsKIAorI2lmIFVTRShDRk5FVFdPUksp
CitzdGF0aWMgQ0ZVUkxDb25uZWN0aW9uUmVmIHNoaW1DRlVSTENvbm5lY3Rpb25DcmVhdGVXaXRo
UHJvcGVydGllcyhDRkFsbG9jYXRvclJlZiBhbGxvYywgQ0ZVUkxSZXF1ZXN0UmVmIHJlcXVlc3Qs
IENGVVJMQ29ubmVjdGlvbkNsaWVudCogY2xpZW50LCBDRkRpY3Rpb25hcnlSZWYgcHJvcGVydGll
cykKK3sKKyAgICBTaGltUHJvdGVjdG9yIHByb3RlY3RvcjsKKworICAgIGRvIHsKKyAgICAgICAg
Ly8gUHJvdGVjdCBhZ2FpbnN0IHVuaW5pdGlhbGl6ZWQgY2FsbGJhY2tzOgorICAgICAgICBpZiAo
IWNvb2tpZVN0b3JhZ2VTaGltQ2FsbGJhY2tzLmNvb2tpZVN0b3JhZ2VDb3B5UmVxdWVzdEhlYWRl
ckZpZWxkc0ZvclVSTCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIFByb3RlY3Qg
YWdhaW5zdCBhY2NpZGVudGFsIHJlY3Vyc2lvbjoKKyAgICAgICAgaWYgKFNoaW1Qcm90ZWN0b3I6
OmNvdW50KCkgPiAxKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgQ0ZVUkxDb25uZWN0
aW9uUmVmIHJlc3VsdHMgPSBjb29raWVTdG9yYWdlU2hpbUNhbGxiYWNrcy5jb25uZWN0aW9uQ3Jl
YXRlV2l0aFByb3BlcnRpZXMocmVxdWVzdCwgY2xpZW50LCBwcm9wZXJ0aWVzKTsKKyAgICAgICAg
aWYgKCFyZXN1bHRzKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dHM7CisgICAgfSB3aGlsZSAoMCk7CisKKyAgICByZXR1cm4gQ0ZVUkxDb25uZWN0aW9uQ3JlYXRl
V2l0aFByb3BlcnRpZXMoYWxsb2MsIHJlcXVlc3QsIGNsaWVudCwgcHJvcGVydGllcyk7Cit9CisK
K0RZTERfSU5URVJQT1NFKHNoaW1DRlVSTENvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcywg
Q0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMpOworI2VuZGlmIC8vIFVTRShDRk5F
VFdPUkspCisKKwogX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKIHZvaWQg
V2ViS2l0Q29va2llU3RvcmFnZVNoaW1Jbml0aWFsaXplKGNvbnN0IENvb2tpZVN0b3JhZ2VTaGlt
Q2FsbGJhY2tzJiBjYWxsYmFja3MpCiB7CkBAIC04Nyw3ICsxMTksNyBAQCB2b2lkIFdlYktpdENv
b2tpZVN0b3JhZ2VTaGltSW5pdGlhbGl6ZShjb25zdCBDb29raWVTdG9yYWdlU2hpbUNhbGxiYWNr
cyYgY2FsbGJhYwogCiAgICAgY29va2llU3RvcmFnZVNoaW1DYWxsYmFja3MgPSBjYWxsYmFja3M7
CiB9Ci0gICAgCisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpICYmICFQ
TEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tp
ZVN0b3JhZ2VTaGltTGlicmFyeS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29raWVT
dG9yYWdlU2hpbUxpYnJhcnkuaAppbmRleCAzMTA4ZTBhMWRmNjdiYTYxZGE5NGY3MjJiNTUwZjRm
MWViNDQ5OWVmLi5kM2RlM2RjOWU1NGVjOWNmN2NkOTcxODI0NmRiMTRmZGZlMzFhNjlhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltTGlicmFy
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW1MaWJy
YXJ5LmgKQEAgLTI5LDExICsyOSwxNyBAQAogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCiAK
IHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UqICBDRkhUVFBDb29raWVT
dG9yYWdlUmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGVVJMUmVxdWVzdCogQ0ZVUkxSZXF1
ZXN0UmVmOwordHlwZWRlZiBzdHJ1Y3QgX0NGVVJMQ29ubmVjdGlvbiogQ0ZVUkxDb25uZWN0aW9u
UmVmOwordHlwZWRlZiBzdHJ1Y3QgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50X1YxIENGVVJMQ29ubmVj
dGlvbkNsaWVudDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0cnVjdCBDb29raWVTdG9yYWdl
U2hpbUNhbGxiYWNrcyB7CiAgICAgQ0ZEaWN0aW9uYXJ5UmVmICgqY29va2llU3RvcmFnZUNvcHlS
ZXF1ZXN0SGVhZGVyRmllbGRzRm9yVVJMKShDRkhUVFBDb29raWVTdG9yYWdlUmVmLCBDRlVSTFJl
Zik7CisjaWYgVVNFKENGTkVUV09SSykKKyAgICBDRlVSTENvbm5lY3Rpb25SZWYgKCpjb25uZWN0
aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMpKENGVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBDRlVSTENv
bm5lY3Rpb25DbGllbnQqIGNsaWVudCwgQ0ZEaWN0aW9uYXJ5UmVmIHByb3BlcnRpZXMpOworI2Vu
ZGlmCiB9OwogCiB0eXBlZGVmIHZvaWQgKCpDb29raWVTdG9yYWdlU2hpbUluaXRpYWxpemVGdW5j
KShjb25zdCBDb29raWVTdG9yYWdlU2hpbUNhbGxiYWNrcyYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9XZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLmggYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44ZThkNTk5Nzc2YjZlOGUxMjRhYzRjNDkzNTI2NmYzYWViNzM4YjRhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDRlVSTENvbm5l
Y3Rpb25DbGllbnRXcmFwcGVyLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcl9oCisjZGVmaW5lIFdlYkNGVVJMQ29u
bmVjdGlvbkNsaWVudFdyYXBwZXJfaAorCisjaWYgVVNFKENGTkVUV09SSykKKworI2luY2x1ZGUg
PENGTmV0d29yay9DRlVSTENvbm5lY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdl
YkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJDRlVS
TENvbm5lY3Rpb25DbGllbnRXcmFwcGVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJD
RlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyPiBjcmVhdGUoQ0ZVUkxDb25uZWN0aW9uQ2xpZW50
KiB3cmFwcGVkQ2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
Q0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcih3cmFwcGVkQ2xpZW50KSk7CisgICAgfTsKKyAg
ICB+V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcigpOworCisgICAgQ0ZVUkxDb25uZWN0
aW9uQ2xpZW50KiBjbGllbnQoKTsKKworICAgIHN0YXRpYyBDRkluZGV4IG1heGltdW1TdXBwb3J0
ZWRDbGllbnRWZXJzaW9uKCk7CisKK3ByaXZhdGU6CisgICAgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xp
ZW50V3JhcHBlcihDRlVSTENvbm5lY3Rpb25DbGllbnQqIHdyYXBwZWRDbGllbnQpOworCisgICAg
c3RhdGljIGNvbnN0IHZvaWQqIHJldGFpbihjb25zdCB2b2lkKiBpbmZvKTsKKyAgICBzdGF0aWMg
dm9pZCByZWxlYXNlKGNvbnN0IHZvaWQqIGluZm8pOworICAgIHN0YXRpYyBDRlN0cmluZ1JlZiBj
b3B5RGVzY3JpcHRpb24oY29uc3Qgdm9pZCogaW5mbyk7CisgICAgc3RhdGljIENGVVJMUmVxdWVz
dFJlZiB3aWxsU2VuZFJlcXVlc3QoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTFJlcXVlc3RSZWYs
IENGVVJMUmVzcG9uc2VSZWYsIGNvbnN0IHZvaWQgKmluZm8pOworICAgIHN0YXRpYyB2b2lkIGRp
ZFJlY2VpdmVSZXNwb25zZShDRlVSTENvbm5lY3Rpb25SZWYsIENGVVJMUmVzcG9uc2VSZWYsIGNv
bnN0IHZvaWQgKmluZm8pOworICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVEYXRhKENGVVJMQ29u
bmVjdGlvblJlZiwgQ0ZEYXRhUmVmLCBDRkluZGV4IG9yaWdpbmFsTGVuZ3RoLCBjb25zdCB2b2lk
ICppbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRTdG9wQnVmZmVyaW5nKENGVVJMQ29ubmVjdGlv
blJlZiwgQ0ZEYXRhUmVmLCBDRkluZGV4IG9yaWdpbmFsTGVuZ3RoLCBjb25zdCB2b2lkICppbmZv
KTsKKyAgICBzdGF0aWMgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKENGVVJMQ29ubmVjdGlvblJlZiwg
Y29uc3Qgdm9pZCAqaW5mbyk7CisgICAgc3RhdGljIHZvaWQgZGlkRmFpbChDRlVSTENvbm5lY3Rp
b25SZWYsIENGRXJyb3JSZWYsIGNvbnN0IHZvaWQgKmluZm8pOworICAgIHN0YXRpYyBDRkNhY2hl
ZFVSTFJlc3BvbnNlUmVmIHdpbGxDYWNoZVJlc3BvbnNlKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZD
YWNoZWRVUkxSZXNwb25zZVJlZiwgY29uc3Qgdm9pZCAqaW5mbyk7CisgICAgc3RhdGljIHZvaWQg
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZV
UkxBdXRoQ2hhbGxlbmdlUmVmLCBjb25zdCB2b2lkICppbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBk
aWRTZW5kQm9keURhdGEoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRkluZGV4IGJ5dGVzV3JpdHRlbiwg
Q0ZJbmRleCB0b3RhbEJ5dGVzV3JpdHRlbiwgQ0ZJbmRleCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dy
aXRlLCBjb25zdCB2b2lkICppbmZvKTsKKyAgICBzdGF0aWMgQm9vbGVhbiBzaG91bGRVc2VDcmVk
ZW50aWFsU3RvcmFnZShDRlVSTENvbm5lY3Rpb25SZWYsIGNvbnN0IHZvaWQgKmluZm8pOworICAg
IHN0YXRpYyBDRlJlYWRTdHJlYW1SZWYgbmVlZE5ld0JvZHlTdHJlYW0oQ0ZVUkxDb25uZWN0aW9u
UmVmLCBDRlVSTFJlcXVlc3RSZWYsIGNvbnN0IHZvaWQgKmluZm8pOworICAgIHN0YXRpYyBCb29s
ZWFuIGNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZShDRlVSTENvbm5lY3Rpb25SZWYsIENGVVJM
UHJvdGVjdGlvblNwYWNlUmVmLCBjb25zdCB2b2lkKiBpbmZvKTsKKyAgICBzdGF0aWMgdm9pZCB3
aWxsU2VuZFJlcXVlc3RGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShDRlVSTENvbm5lY3Rpb25S
ZWYsIENGVVJMQXV0aENoYWxsZW5nZVJlZiwgY29uc3Qgdm9pZCAqaW5mbyk7CisgICAgc3RhdGlj
IHZvaWQgZGlkUmVjZWl2ZURhdGFBcnJheShDRlVSTENvbm5lY3Rpb25SZWYsIENGQXJyYXlSZWYs
IGNvbnN0IHZvaWQgKmluZm8pOworCisgICAgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50X1Y2IG1fd3Jh
cHBlZENsaWVudCB7IH07CisgICAgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50X1Y2IG1fY2xpZW50IHsg
fTsKK307CisKK30KKworI2VuZGlmIC8vIFVTRShDRk5FVFdPUkspCisKKyNlbmRpZiAvLyBXZWJD
RlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9tYWMvV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45MGRkOWFmOGY5OWE5MTc1NjM5MTE4ZTVhNTI4OWZlZTkzMmFjZDNhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDRlVSTENvbm5lY3Rpb25D
bGllbnRXcmFwcGVyLm1tCkBAIC0wLDAgKzEsMjYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5oIgor
CisjaWYgVVNFKENGTkVUV09SSykKKworI2ltcG9ydCAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuaCIKKyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2ltcG9ydCAi
V2ViUHJvY2Vzcy5oIgorI2ltcG9ydCA8V2ViQ29yZS9VUkwuaD4KKyNpbXBvcnQgPHd0Zi9SZXRh
aW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0NGSW5kZXggV2ViQ0ZVUkxDb25u
ZWN0aW9uQ2xpZW50V3JhcHBlcjo6bWF4aW11bVN1cHBvcnRlZENsaWVudFZlcnNpb24oKQorewor
ICAgIHJldHVybiA2OworfQorCitXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpXZWJD
RlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKENGVVJMQ29ubmVjdGlvbkNsaWVudCogd3JhcHBl
ZENsaWVudCkKK3sKKyAgICBzd2l0Y2ggKHdyYXBwZWRDbGllbnQtPnZlcnNpb24pIHsKKyAgICBj
YXNlIDA6CisgICAgICAgIG1lbWNweSgmbV93cmFwcGVkQ2xpZW50LCB3cmFwcGVkQ2xpZW50LCBz
aXplb2YoQ0ZVUkxDb25uZWN0aW9uQ2xpZW50X1YwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgMToKKyAgICAgICAgbWVtY3B5KCZtX3dyYXBwZWRDbGllbnQsIHdyYXBwZWRDbGllbnQsIHNp
emVvZihDRlVSTENvbm5lY3Rpb25DbGllbnRfVjEpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAyOgorICAgICAgICBtZW1jcHkoJm1fd3JhcHBlZENsaWVudCwgd3JhcHBlZENsaWVudCwgc2l6
ZW9mKENGVVJMQ29ubmVjdGlvbkNsaWVudF9WMikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IDM6CisgICAgICAgIG1lbWNweSgmbV93cmFwcGVkQ2xpZW50LCB3cmFwcGVkQ2xpZW50LCBzaXpl
b2YoQ0ZVUkxDb25uZWN0aW9uQ2xpZW50X1YzKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
NDoKKyAgICAgICAgbWVtY3B5KCZtX3dyYXBwZWRDbGllbnQsIHdyYXBwZWRDbGllbnQsIHNpemVv
ZihDRlVSTENvbm5lY3Rpb25DbGllbnRfVjQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA1
OgorICAgICAgICBtZW1jcHkoJm1fd3JhcHBlZENsaWVudCwgd3JhcHBlZENsaWVudCwgc2l6ZW9m
KENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDY6
CisgICAgICAgIG1lbWNweSgmbV93cmFwcGVkQ2xpZW50LCB3cmFwcGVkQ2xpZW50LCBzaXplb2Yo
Q0ZVUkxDb25uZWN0aW9uQ2xpZW50X1Y2KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIG1fY2xpZW50LnZl
cnNpb24gPSA2OworICAgIG1fY2xpZW50LmNsaWVudEluZm8gPSB0aGlzOworICAgIG1fY2xpZW50
LnJldGFpbiA9ICZyZXRhaW47CisgICAgbV9jbGllbnQucmVsZWFzZSA9ICZyZWxlYXNlOworICAg
IG1fY2xpZW50LmRpZFJlY2VpdmVSZXNwb25zZSA9ICZkaWRSZWNlaXZlUmVzcG9uc2U7CisKKyAg
ICBpZiAobV93cmFwcGVkQ2xpZW50LmNvcHlEZXNjcmlwdGlvbikKKyAgICAgICAgbV9jbGllbnQu
Y29weURlc2NyaXB0aW9uID0gJmNvcHlEZXNjcmlwdGlvbjsKKyAgICBpZiAobV93cmFwcGVkQ2xp
ZW50LndpbGxTZW5kUmVxdWVzdCkKKyAgICAgICAgbV9jbGllbnQud2lsbFNlbmRSZXF1ZXN0ID0g
JndpbGxTZW5kUmVxdWVzdDsKKyAgICBpZiAobV93cmFwcGVkQ2xpZW50LmRpZFJlY2VpdmVEYXRh
KQorICAgICAgICBtX2NsaWVudC5kaWRSZWNlaXZlRGF0YSA9ICZkaWRSZWNlaXZlRGF0YTsKKyAg
ICBpZiAobV93cmFwcGVkQ2xpZW50LmRpZFN0b3BCdWZmZXJpbmcpCisgICAgICAgIG1fY2xpZW50
LmRpZFN0b3BCdWZmZXJpbmcgPSAmZGlkU3RvcEJ1ZmZlcmluZzsKKyAgICBpZiAobV93cmFwcGVk
Q2xpZW50LmRpZEZpbmlzaExvYWRpbmcpCisgICAgICAgIG1fY2xpZW50LmRpZEZpbmlzaExvYWRp
bmcgPSAmZGlkRmluaXNoTG9hZGluZzsKKyAgICBpZiAobV93cmFwcGVkQ2xpZW50LmRpZEZhaWwp
CisgICAgICAgIG1fY2xpZW50LmRpZEZhaWwgPSAmZGlkRmFpbDsKKyAgICBpZiAobV93cmFwcGVk
Q2xpZW50LndpbGxDYWNoZVJlc3BvbnNlKQorICAgICAgICBtX2NsaWVudC53aWxsQ2FjaGVSZXNw
b25zZSA9ICZ3aWxsQ2FjaGVSZXNwb25zZTsKKyAgICBpZiAobV93cmFwcGVkQ2xpZW50LmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKKyAgICAgICAgbV9jbGllbnQuZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0gJmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTsKKyAgICBpZiAobV93cmFwcGVkQ2xpZW50LmRpZFNlbmRCb2R5RGF0YSkKKyAgICAgICAg
bV9jbGllbnQuZGlkU2VuZEJvZHlEYXRhID0gJmRpZFNlbmRCb2R5RGF0YTsKKyAgICBpZiAobV93
cmFwcGVkQ2xpZW50LnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQorICAgICAgICBtX2NsaWVu
dC5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSA9ICZzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZTsKKyAgICBpZiAobV93cmFwcGVkQ2xpZW50Lm5lZWROZXdCb2R5U3RyZWFtKQorICAgICAgICBt
X2NsaWVudC5uZWVkTmV3Qm9keVN0cmVhbSA9ICZuZWVkTmV3Qm9keVN0cmVhbTsKKyAgICBpZiAo
bV93cmFwcGVkQ2xpZW50LmNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZSkKKyAgICAgICAgbV9j
bGllbnQuY2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNlID0gJmNhblJlc3BvbmRUb1Byb3RlY3Rp
b25TcGFjZTsKKyAgICBpZiAobV93cmFwcGVkQ2xpZW50LndpbGxTZW5kUmVxdWVzdEZvckF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKQorICAgICAgICBtX2NsaWVudC53aWxsU2VuZFJlcXVlc3RGb3JB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9ICZ3aWxsU2VuZFJlcXVlc3RGb3JBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZTsKKyAgICBpZiAobV93cmFwcGVkQ2xpZW50LmRpZFJlY2VpdmVEYXRhQXJyYXkp
CisgICAgICAgIG1fY2xpZW50LmRpZFJlY2VpdmVEYXRhQXJyYXkgPSAmZGlkUmVjZWl2ZURhdGFB
cnJheTsKKworICAgIGlmIChtX3dyYXBwZWRDbGllbnQucmV0YWluKQorICAgICAgICBtX3dyYXBw
ZWRDbGllbnQucmV0YWluKG1fd3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKK30KKworV2ViQ0ZV
UkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6fldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXIoKQoreworICAgIGlmIChtX3dyYXBwZWRDbGllbnQucmVsZWFzZSkKKyAgICAgICAgbV93cmFw
cGVkQ2xpZW50LnJlbGVhc2UobV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworfQorCitjb25z
dCB2b2lkKiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpyZXRhaW4oY29uc3Qgdm9p
ZCogaW5mbykKK3sKKyAgICBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0aGlzSW5m
byA9IHN0YXRpY19jYXN0PFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqPihjb25zdF9j
YXN0PHZvaWQqPihpbmZvKSk7CisgICAgdGhpc0luZm8tPnJlZigpOworICAgIHJldHVybiB0aGlz
SW5mbzsKK30KKwordm9pZCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpyZWxlYXNl
KGNvbnN0IHZvaWQqIGluZm8pCit7CisgICAgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBl
ciogdGhpc0luZm8gPSBzdGF0aWNfY2FzdDxXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVy
Kj4oY29uc3RfY2FzdDx2b2lkKj4oaW5mbykpOworICAgIHRoaXNJbmZvLT5kZXJlZigpOworfQor
CitDRlN0cmluZ1JlZiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpjb3B5RGVzY3Jp
cHRpb24oY29uc3Qgdm9pZCogaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25D
bGllbnRXcmFwcGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNGVVJMQ29ubmVj
dGlvbkNsaWVudFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1fd3JhcHBlZENs
aWVudC5jb3B5RGVzY3JpcHRpb24pCisgICAgICAgIHJldHVybiB0aGlzSW5mby0+bV93cmFwcGVk
Q2xpZW50LmNvcHlEZXNjcmlwdGlvbih0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNsaWVudElu
Zm8pOworICAgIHJldHVybiBudWxscHRyOworfQorCitDRlVSTFJlcXVlc3RSZWYgV2ViQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6d2lsbFNlbmRSZXF1ZXN0KENGVVJMQ29ubmVjdGlvblJl
ZiBjb25uLCBDRlVSTFJlcXVlc3RSZWYgcmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiByZXNwb25z
ZSwgY29uc3Qgdm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGll
bnRXcmFwcGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlv
bkNsaWVudFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1fd3JhcHBlZENsaWVu
dC53aWxsU2VuZFJlcXVlc3QpCisgICAgICAgIHJldHVybiB0aGlzSW5mby0+bV93cmFwcGVkQ2xp
ZW50LndpbGxTZW5kUmVxdWVzdChjb25uLCByZXF1ZXN0LCByZXNwb25zZSwgdGhpc0luZm8tPm1f
d3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9p
ZCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoQ0ZV
UkxDb25uZWN0aW9uUmVmIGNvbm4sIENGVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIGNvbnN0IHZv
aWQgKmluZm8pCit7CisgICAgY29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciog
dGhpc0luZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFw
cGVyKj4oaW5mbyk7CisKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmQ29va2llcyA9IGFk
b3B0Q0YoQ0ZIVFRQTWVzc2FnZUNvcHlIZWFkZXJGaWVsZFZhbHVlKENGVVJMUmVzcG9uc2VHZXRI
VFRQUmVzcG9uc2UocmVzcG9uc2UpLCBDRlNUUigiU2V0LUNvb2tpZSIpKSk7CisgICAgaWYgKGNm
Q29va2llcyAmJiBDRlN0cmluZ0dldExlbmd0aChjZkNvb2tpZXMuZ2V0KCkpKSB7CisgICAgICAg
IFN0cmluZyBjb29raWVzID0gY2ZDb29raWVzLmdldCgpOworICAgICAgICBVUkwgcmVxdWVzdFVS
TCA9IENGVVJMUmVzcG9uc2VHZXRVUkwocmVzcG9uc2UpOworICAgICAgICBVUkwgZmlyc3RQYXJ0
eUZvckNvb2tpZXNVUkw7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtD
b25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OlNldENvb2tpZXNGcm9tRE9NKFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpLCBmaXJzdFBhcnR5Rm9yQ29va2llc1VSTCwgcmVxdWVzdFVSTCwgY29va2llcyksIDAp
OworICAgIH0KKworICAgIGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmRpZFJlY2VpdmVS
ZXNwb25zZSkKKyAgICAgICAgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRSZWNlaXZlUmVz
cG9uc2UoY29ubiwgcmVzcG9uc2UsIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2xpZW50SW5m
byk7Cit9CisKK3ZvaWQgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2
ZURhdGEoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGRGF0YVJlZiBkYXRhLCBDRkluZGV4IG9y
aWdpbmFsTGVuZ3RoLCBjb25zdCB2b2lkICppbmZvKQoreworICAgIGNvbnN0IFdlYkNGVVJMQ29u
bmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ0ZV
UkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworICAgIGlmICh0aGlzSW5mby0+bV93
cmFwcGVkQ2xpZW50LmRpZFJlY2VpdmVEYXRhKQorICAgICAgICB0aGlzSW5mby0+bV93cmFwcGVk
Q2xpZW50LmRpZFJlY2VpdmVEYXRhKGNvbm4sIGRhdGEsIG9yaWdpbmFsTGVuZ3RoLCB0aGlzSW5m
by0+bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYkNGVVJMQ29ubmVj
dGlvbkNsaWVudFdyYXBwZXI6OmRpZFN0b3BCdWZmZXJpbmcoQ0ZVUkxDb25uZWN0aW9uUmVmIGNv
bm4sIENGRGF0YVJlZiBidWZmZXJlZERhdGEsIENGSW5kZXggb3JpZ2luYWxMZW5ndGgsIGNvbnN0
IHZvaWQgKmluZm8pCit7CisgICAgY29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBl
ciogdGhpc0luZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRX
cmFwcGVyKj4oaW5mbyk7CisgICAgaWYgKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuZGlkU3Rv
cEJ1ZmZlcmluZykKKyAgICAgICAgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRTdG9wQnVm
ZmVyaW5nKGNvbm4sIGJ1ZmZlcmVkRGF0YSwgb3JpZ2luYWxMZW5ndGgsIHRoaXNJbmZvLT5tX3dy
YXBwZWRDbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xp
ZW50V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZyhDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgY29u
c3Qgdm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFw
cGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVu
dFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRG
aW5pc2hMb2FkaW5nKQorICAgICAgICB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmRpZEZpbmlz
aExvYWRpbmcoY29ubiwgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKK30K
Kwordm9pZCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpkaWRGYWlsKENGVVJMQ29u
bmVjdGlvblJlZiBjb25uLCBDRkVycm9yUmVmIGVycm9yLCBjb25zdCB2b2lkICppbmZvKQorewor
ICAgIGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOwor
ICAgIGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmRpZEZhaWwpCisgICAgICAgIHRoaXNJ
bmZvLT5tX3dyYXBwZWRDbGllbnQuZGlkRmFpbChjb25uLCBlcnJvciwgdGhpc0luZm8tPm1fd3Jh
cHBlZENsaWVudC5jbGllbnRJbmZvKTsKK30KKworQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiBXZWJD
RlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjp3aWxsQ2FjaGVSZXNwb25zZShDRlVSTENvbm5l
Y3Rpb25SZWYgY29ubiwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiBjYWNoZWRSZXNwb25zZSwgY29u
c3Qgdm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFw
cGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVu
dFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC53aWxs
Q2FjaGVSZXNwb25zZSkKKyAgICAgICAgcmV0dXJuIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQu
d2lsbENhY2hlUmVzcG9uc2UoY29ubiwgY2FjaGVkUmVzcG9uc2UsIHRoaXNJbmZvLT5tX3dyYXBw
ZWRDbGllbnQuY2xpZW50SW5mbyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgV2Vi
Q0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2hh
bGxlbmdlLCBjb25zdCB2b2lkICppbmZvKQoreworICAgIGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlv
bkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxDb25u
ZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworICAgIGlmICh0aGlzSW5mby0+bV93cmFwcGVk
Q2xpZW50LmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKKyAgICAgICAgdGhpc0lu
Zm8tPm1fd3JhcHBlZENsaWVudC5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29u
biwgY2hhbGxlbmdlLCB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworfQor
Cit2b2lkIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZFNlbmRCb2R5RGF0YShD
RlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZJbmRleCBieXRlc1dyaXR0ZW4sIENGSW5kZXggdG90
YWxCeXRlc1dyaXR0ZW4sIENGSW5kZXggdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSwgY29uc3Qg
dm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVy
KiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdy
YXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRTZW5k
Qm9keURhdGEpCisgICAgICAgIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuZGlkU2VuZEJvZHlE
YXRhKGNvbm4sIGJ5dGVzV3JpdHRlbiwgdG90YWxCeXRlc1dyaXR0ZW4sIHRvdGFsQnl0ZXNFeHBl
Y3RlZFRvV3JpdGUsIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2xpZW50SW5mbyk7Cit9CisK
K0Jvb2xlYW4gV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6c2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIGNvbnN0IHZvaWQgKmluZm8pCit7
CisgICAgY29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0luZm8gPSBz
dGF0aWNfY2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4oaW5mbyk7
CisgICAgaWYgKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UpCisgICAgICAgIHJldHVybiB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LnNob3VsZFVz
ZUNyZWRlbnRpYWxTdG9yYWdlKGNvbm4sIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2xpZW50
SW5mbyk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitDRlJlYWRTdHJlYW1SZWYgV2ViQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6bmVlZE5ld0JvZHlTdHJlYW0oQ0ZVUkxDb25uZWN0aW9u
UmVmIGNvbm4sIENGVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBjb25zdCB2b2lkICppbmZvKQorewor
ICAgIGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOwor
ICAgIGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50Lm5lZWROZXdCb2R5U3RyZWFtKQorICAg
ICAgICByZXR1cm4gdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5uZWVkTmV3Qm9keVN0cmVhbShj
b25uLCByZXF1ZXN0LCB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworICAg
IHJldHVybiBudWxscHRyOworfQorCitCb29sZWFuIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdy
YXBwZXI6OmNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZShDRlVSTENvbm5lY3Rpb25SZWYgY29u
biwgQ0ZVUkxQcm90ZWN0aW9uU3BhY2VSZWYgcHJvdGVjdGlvblNwYWNlLCBjb25zdCB2b2lkKiBp
bmZvKQoreworICAgIGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJ
bmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+
KGluZm8pOworICAgIGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNhblJlc3BvbmRUb1By
b3RlY3Rpb25TcGFjZSkKKyAgICAgICAgcmV0dXJuIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQu
Y2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNlKGNvbm4sIHByb3RlY3Rpb25TcGFjZSwgdGhpc0lu
Zm8tPm1fd3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6d2lsbFNlbmRSZXF1ZXN0Rm9y
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGVVJMQXV0
aENoYWxsZW5nZVJlZiBjaGFsbGVuZ2UsIGNvbnN0IHZvaWQgKmluZm8pCit7CisgICAgY29uc3Qg
V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0luZm8gPSBzdGF0aWNfY2FzdDxj
b25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4oaW5mbyk7CisgICAgaWYgKHRo
aXNJbmZvLT5tX3dyYXBwZWRDbGllbnQud2lsbFNlbmRSZXF1ZXN0Rm9yQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpCisgICAgICAgIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQud2lsbFNlbmRSZXF1
ZXN0Rm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29ubiwgY2hhbGxlbmdlLCB0aGlzSW5mby0+
bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYkNGVVJMQ29ubmVjdGlv
bkNsaWVudFdyYXBwZXI6OmRpZFJlY2VpdmVEYXRhQXJyYXkoQ0ZVUkxDb25uZWN0aW9uUmVmIGNv
bm4sIENGQXJyYXlSZWYgZGF0YUFycmF5LCBjb25zdCB2b2lkICppbmZvKQoreworICAgIGNvbnN0
IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nhc3Q8
Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworICAgIGlmICh0
aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmRpZFJlY2VpdmVEYXRhQXJyYXkpCisgICAgICAgIHRo
aXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuZGlkUmVjZWl2ZURhdGFBcnJheShjb25uLCBkYXRhQXJy
YXksIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK0NGVVJMQ29u
bmVjdGlvbkNsaWVudCogV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6Y2xpZW50KCkK
K3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDRlVSTENvbm5lY3Rpb25DbGllbnQqPigm
bV9jbGllbnQpOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JLKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZhM2Vm
NWE4Y2M3ZWYzYTdkNmY2OTVmNDQzMWRiYWE4MTU0Y2IyMmUuLjAyZjYxNGIzODBmYWFlZTAxNDk2
YzMxOTY0YWE2OTY4ZWE5MDFkYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2OTksNiArMTY5OSw3IEBACiAJCUNEMTlBMjZF
MUExM0U4MzQwMDhENjUwRSAvKiBXZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QxOUEyNkExQTEzRTgyMTAw
OEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi87IH07CiAJCUNENUM2NkEw
MTM0QjlEMzgwMDRGRTJBOCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VGdWxsU2NyZWVuQ2xpZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENUM2NjlF
MTM0QjlEMzYwMDRGRTJBOCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VGdWxsU2NyZWVuQ2xpZW50LmNw
cCAqLzsgfTsKIAkJQ0Q1QzY2QTExMzRCOUQzODAwNEZFMkE4IC8qIEluamVjdGVkQnVuZGxlUGFn
ZUZ1bGxTY3JlZW5DbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENENUM2NjlGMTM0QjlEMzcwMDRGRTJBOCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VG
dWxsU2NyZWVuQ2xpZW50LmggKi87IH07CisJCUNENjI0QTVBMUFFMDkxMDAwMEEzMTgyRSAvKiBX
ZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDYyNEE1ODFBRTA5MTAwMDBBMzE4MkUgLyogV2ViQ0ZV
UkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5oICovOyB9OwogCQlDRDY3RDMwRTE1QzA4RjlBMDA4
NDNBREYgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q2N0QzMDgxNUMw
N0JFMDAwODQzQURGIC8qIEluamVjdGVkQnVuZGxlUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50
LmNwcCAqLzsgfTsKIAkJQ0Q2Rjc1RjQxMzFCNjZEMDAwRDZCMjFFIC8qIFdlYkZ1bGxTY3JlZW5N
YW5hZ2VyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0Q3M0JBM0UxMzFBMkU4QTAwRUVERUQyIC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJv
eHkuY3BwICovOyB9OwogCQlDRDczQkE0NzEzMUFDQzlBMDBFRURFRDIgLyogV2ViRnVsbFNjcmVl
bk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDczQkE0NTEzMUFDQzg4MDBFRURFRDIgLyogV2ViRnVs
bFNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBAIC0xNzEwLDYg
KzE3MTEsNyBAQAogCQlDREMzODMwODE3MjExODkwMDA4QTJGQzMgLyogV2ViUHJvY2Vzc1NoaW0u
ZHlsaWIgaW4gQ29weSBXZWJQcm9jZXNzU2hpbSAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREMzODMwNjE3MjExNzk5MDA4QTJGQzMgLyogV2ViUHJvY2Vzc1NoaW0uZHlsaWIg
Ki87IH07CiAJCUNEQzM4MzBDMTcyMTIyODIwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbUxp
YnJhcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QzM4MzBCMTcyMTIxQ0UwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuaCAqLzsg
fTsKIAkJQ0RDMzgzMTAxNzIxMjQ0MDAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDMzgzMEQxNzIx
MjQyRDAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltLm1tICovOyB9OworCQlDREM0RUM0NjFB
RTZBOTAwMDA5QUNCRDEgLyogV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENjI0QTU3MUFFMDkx
MDAwMEEzMTgyRSAvKiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLm1tICovOyB9Owog
CQlDRENBODVDODEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0E4
NUM2MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tICov
OyB9OwogCQlDRENBODVDOTEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RDQTg1QzcxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIu
aCAqLzsgfTsKIAkJQ0RFNkUyRDMxOUY3MzFDNDAwQkE5Njg4IC8qIFdlYk9yaWdpbkRhdGFNYW5h
Z2VyU3VwcGxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RFNkUyRDIxOUY3MzFDNDAwQkE5Njg4IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2VyU3Vw
cGxlbWVudC5oICovOyB9OwpAQCAtMzk1Niw2ICszOTU4LDggQEAKIAkJQ0QxOUEyNkExQTEzRTgy
MTAwOEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENUM2NjlFMTM0QjlEMzYwMDRGRTJBOCAvKiBJbmplY3Rl
ZEJ1bmRsZVBhZ2VGdWxsU2NyZWVuQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZUZ1bGxTY3JlZW5DbGllbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDVDNjY5RjEzNEI5RDM3MDA0RkUyQTggLyogSW5q
ZWN0ZWRCdW5kbGVQYWdlRnVsbFNjcmVlbkNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZVBhZ2VGdWxsU2NyZWVuQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUNENjI0QTU3MUFFMDkxMDAwMEEzMTgyRSAvKiBXZWJDRlVS
TENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q2MjRBNTgxQUUwOTEwMDAwQTMxODJFIC8qIFdlYkNGVVJM
Q29ubmVjdGlvbkNsaWVudFdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDRDY3RDMwODE1QzA3QkUwMDA4NDNBREYgLyogSW5qZWN0ZWRCdW5kbGVQYWdl
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDY3RDMwOTE1QzA3QkUwMDA4NDNBREYgLyog
SW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q3M0JBMzcxMzFBMjlGRTAw
RUVERUQyIC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFdlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcDsgcGF0aCA9IEZ1bGxTY3Jl
ZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNjYwMCw2ICs2NjA0LDggQEAKIAkJCQlCQzExMUI1QjExMkY2Mjk4MDAzMzdCQUIgLyogV2Vi
RXZlbnRGYWN0b3J5LmggKi8sCiAJCQkJQkMxMTFCNUMxMTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2
ZW50RmFjdG9yeS5tbSAqLywKIAkJCQk1MUFEMzU3MjFBRDJGMzc1MDA1N0IzOEUgLyogV2ViSGl0
VGVzdFJlc3VsdC5tbSAqLywKKwkJCQlDRDYyNEE1NzFBRTA5MTAwMDBBMzE4MkUgLyogV2ViQ0ZV
UkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5tbSAqLywKKwkJCQlDRDYyNEE1ODFBRTA5MTAwMDBB
MzE4MkUgLyogV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5oICovLAogCQkJCTkwNTYy
MEU1MTJCQzI0NzYwMDA3OTlCNiAvKiBXZWJNZW1vcnlTYW1wbGVyLm1hYy5tbSAqLywKIAkJCSk7
CiAJCQlwYXRoID0gbWFjOwpAQCAtODMxNCw2ICs4MzIwLDcgQEAKIAkJCQk2RUU4NDlDODEzNjhE
OTM5MDAzOEQ0ODEgLyogV0tJbnNwZWN0b3JQcml2YXRlTWFjLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MUE5RTEwQjEzMTVDRDE4MDA5RTcwMzEgLyogV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyRDc5MEE5RjFBRDcxNjQ5MDBBQjkwQjMgLyogV0tMYXlvdXRN
b2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRDYyNEE1QTFBRTA5MTAwMDBBMzE4MkUgLyogV2Vi
Q0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzNEM0Ez
QjYxMzM5NjAwQjAwNzA5QkU0IC8qIFdLTWVkaWFDYWNoZU1hbmFnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDNDA3NUZFMTI0RkYwMjcwMDY4RjIwQSAvKiBXS011dGFibGVBcnJheS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM0MDc2MDAxMjRGRjAyNzAwNjhGMjBBIC8qIFdLTXV0YWJsZURpY3Rp
b25hcnkuaCBpbiBIZWFkZXJzICovLApAQCAtMTAxMDUsNiArMTAxMTIsNyBAQAogCQkJCTMxOEJF
MTc1MTQ3NDNERDcwMEE4RkJCMiAvKiBXS05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzFBMkVDNzcxNDhENjYyRTAwODEwRDcxIC8qIFdLTm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFEMDlGMkIxNzQzRjhFNjAw
QTk1RTUwIC8qIFdLTlBBUElQbHVnSW5Db250YWluZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQlD
REM0RUM0NjFBRTZBOTAwMDA5QUNCRDEgLyogV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBl
ci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTM3QzRDMDkzMTgxNEIzQUYwMDM2ODhCOSAvKiBXS05T
QXJyYXkubW0gaW4gU291cmNlcyAqLywKIAkJCQkzNzNDRUFENTE4NTQxN0FFMDA4QzM2M0QgLyog
V0tOU0RhdGEubW0gaW4gU291cmNlcyAqLywKIAkJCQkzNzFBMTk0MTE4MjREMjkzMDBGMzJBNUUg
LyogV0tOU0RpY3Rpb25hcnkubW0gaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256917</attachid>
            <date>2015-07-16 11:45:33 -0700</date>
            <delta_ts>2015-07-16 21:39:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144174-20150716114425.patch</filename>
            <type>text/plain</type>
            <size>54536</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2ODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYzMjg0MTI5YmViMzJkNDA2Y2QyM2Vk
MDE5YzQ2ZjZmOTZjMjBmMzQuLjg4MTYwYWJkOTQzYWI3NTVhZWI0Zjg2YWNlYjc1MDNkYTYzZGM5
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTUtMDctMTYgIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gQ29va2llcyBzZXQgZHVyaW5nIG1lZGlhIGxv
YWRpbmcgYXJlIG5vdCBhZGRlZCB0byBjb29raWUgc3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDE3NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBIQVZFIG1hY3JvIGZvciBBVlVS
TEFzc2V0J3MgdXNlciBpbmZvIG1ldGhvZHMuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoK
KwogMjAxNS0wNy0xNCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFzc2VydGlvbnMuaCBzaG91bGQgaW5jbHVkZSBFeHBvcnRNYWNyb3MuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGU2NjJiODA4OTk1ZDdiZWI0NDRlOTdkZjhjNjFhOWI2NDQxZjViMDAuLmQxZDI3NzNl
NzQwZWIyYzhmYjZjNDA0OThmNjNjMmE0NmFmZTY4ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MSBAQAorMjAxNS0wNy0xNiAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAg
ICAgICBbV0syXSBDb29raWVzIHNldCBkdXJpbmcgbWVkaWEgbG9hZGluZyBhcmUgbm90IGFkZGVk
IHRvIGNvb2tpZSBzdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ0MTc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQXNzb2NpYXRlIGEgc2Vzc2lvbiBJRCB3aXRoIHRoZSBBVlVSTEFzc2V0IHRvIGJl
IHVzZWQgYnkgdGhlIFdlYktpdDIgY29va2llIHNoaW0uCisKKyAgICAgICAgVGVzdDogaHR0cC90
ZXN0cy9tZWRpYS92aWRlby1zZXQtY29va2llLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkIG5ldyBmaWxlcyB0byBwcm9qZWN0LgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0Rm9yVVJMKTogUmVnaXN0ZXIgdGhlIHNl
c3Npb24gSUQKKyAgICAgICAgICAgIHVzZWQgYnkgdGhlIEFWVVJMQXNzZXQuCisgICAgICAgICog
cGxhdGZvcm0vc3BpL2NmL0NGVVJMQ29ubmVjdGlvblNQSS5oOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9zcGkvbWFjL0FWRm91bmRhdGlvblNQSS5oOiBBZGRkZWQgZW50cmllcyBmb3IgdXNl
ciBpbmZvciBtZXRob2RzLgorCiAyMDE1LTA3LTE1ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNp
ZWhAYXBwbGUuY29tPgogCiAgICAgICAgIE5lZ2F0aXZlIHNjcm9sbCBzbmFwIHJlcGVhdCB2YWx1
ZXMgY2F1c2Ugd2ViIHByb2Nlc3MgdG8gaGFuZyBpbmRlZmluaXRlbHkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA3
MGYzZmI5MTAyZDRiYTA4MjA5ZjBkYmNlMTczZTAyYzM4NzE3OTQxLi4zMWUyYzc0NWE4ODM4NjY5
ZDBhMzQ4OGY2MTVlMDY4N2IzMWE2Yjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkgQEAKKzIw
MTUtMDctMTUgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dL
Ml0gQ29va2llcyBzZXQgZHVyaW5nIG1lZGlhIGxvYWRpbmcgYXJlIG5vdCBhZGRlZCB0byBjb29r
aWUgc3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NDE3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFByZXZpb3VzbHksIFdlYktpdCBoYXMgYWRkZWQgYSBzaGltIHdoZW4gY29va2llcyBhcmUgcmV0
cmlldmVkIGZyb20gdGhlIGNvb2tpZSBzdG9yZSwgYW5kCisgICAgICAgIGluc3RlYWQsIGNvb2tp
ZXMgYXJlIHJldHJpZXZlZCBmcm9tIHRoZSBOZXR3b3JrUHJvY2Vzcy4gSG93ZXZlciwgd2hlbiBj
b29raWVzIGFyZSBzZXQKKyAgICAgICAgdGhyb3VnaCBhIEhUVFAgcmVzcG9uc2UsIFdlYktpdCBu
ZXZlciB1cGRhdGVzIHRoZSBOZXR3b3JrUHJvY2VzcyB3aXRoIHRob3NlIG5ldyBjb29raWVzLgor
CisgICAgICAgIFRvIGRvIHNvLCBXZWJLaXQgd2lsbCBhZGQgYSBuZXcgc2hpbSBvbnRvIHRoZSBD
RkNvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcygpIGZ1bmN0aW9uLAorICAgICAgICB3aGlj
aCB3aWxsIHJlcGxhY2UgdGhlIGNsaWVudCBjYWxsYmFja3MgcHJvdmlkZWQgaW4gdGhhdCBmdW5j
dGlvbiB3aXRoIG91ciBvd24uIEluIHRoZQorICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2UsIGlm
IHRoZSByZXNwb25zZSBjb250YWlucyBhICJTZXQtQ29va2llIiBoZWFkZXIsIHRoZSBjb29raWUg
c3RyaW5nIHdpbGwKKyAgICAgICAgYmUgcGFzc2VkIHRvIHRoZSBOZXR3b3JrUHJvY2VzcyBmb3Ig
c3RvcmFnZS4gRHVlIHRvIHRoZSBleGlzdGluZyBjb29raWUgcmV0cmlldmFsIHNoaW0sCisgICAg
ICAgIHRoZXNlIG5ldyBjb29raWVzIHdpbGwgYmUgYXZhaWxhYmxlIGR1cmluZyBmdXR1cmUgbWVk
aWEgSFRUUCByZXF1ZXN0cy4KKworICAgICAgICBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFw
cGVyIGlzIGEgY2xhc3Mgd2hpY2ggc3RvcmVzIGEgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50IHN0cnVj
dCwgYW5kCisgICAgICAgIHJlcGxhY2VzIGl0IHdpdGggYSBuZXcgc3RydWN0LiBJbiBlYWNoIG9m
IHRoZSBjbGllbnQgY2FsbGJhY2tzLCB0aGUgY2xhc3Mgd2lsbCBjYWxsIHRocm91Z2gKKyAgICAg
ICAgdG8gdGhlIG9yaWdpbmFsIGhhbmRsZXIgaWYgdGhhdCBoYW5kbGVyIGlzIHZhbGlkLgorCisg
ICAgICAgICogU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbS5tbToKKyAgICAgICAgKFdlYktp
dDo6d2Via2l0Q29ubmVjdGlvbkNyZWF0ZVdpdGhQcm9wZXJ0aWVzKTogQ3JlYXRlIGEgV2ViQ0ZV
UkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciwgYW5kCisgICAgICAgICAgICByZXBsYWNlIHRoZSBj
bGllbnQgcGFyYW1ldGVyIHdpdGggdGhhdCBuZXcgd3JhcHBlci4KKyAgICAgICAgKFdlYktpdDo6
Q29va2llU3RvcmFnZVNoaW06OmluaXRpYWxpemUpOiBJbml0aWFsaXplIHRoZSBuZXcgc2hpbS4K
KyAgICAgICAgKiBTaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OnNoaW1DRlVSTENvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcyk6IENh
bGwgdGhyb3VnaCB0byB0aGUgc2hpbSBtZXRob2QuCisgICAgICAgICogU2hhcmVkL21hYy9Db29r
aWVTdG9yYWdlU2hpbUxpYnJhcnkuaDoKKyAgICAgICAgKiBTaGFyZWQvbWFjL1dlYkNGVVJMQ29u
bmVjdGlvbkNsaWVudFdyYXBwZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJM
Q29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmNyZWF0ZSk6CisgICAgICAgICogU2hhcmVkL21hYy9X
ZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6bWF4aW11bVN1cHBvcnRlZENsaWVu
dFZlcnNpb24pOiBUaGUgd3JhcHBlciBjbGFzcworICAgICAgICAgICAgY3VycmVudGx5IG9ubHkg
c3VwcG9ydHMgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50X1Y2IG9yIG9sZGVyLgorICAgICAgICAoV2Vi
S2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpXZWJDRlVSTENvbm5lY3Rpb25D
bGllbnRXcmFwcGVyKTogQ29weSB0aGUgY2xpZW50CisgICAgICAgICAgICBjYWxsYmFjayBwb25p
dGVycyBpbnRvIHRoZSBjbGFzcywgYW5kIGNvbnN0cnVjdCBhIHJlcGxhY2VtZW50IGNsaWVudC4K
KyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6fldlYkNG
VVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIpOiBSZWxlYXNlIHRoZSB3cmFwcGVkIGNsaWVudC4K
KyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6cmV0YWlu
KTogQ2FsbCByZWYoKS4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50
V3JhcHBlcjo6cmVsZWFzZSk6IENhbGwgZGVyZWYoKS4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZV
UkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6Y29weURlc2NyaXB0aW9uKTogUGFzcyB0aHJvdWdo
IHRvIHRoZSB3cmFwcGVkIGNsaWVudC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0
aW9uQ2xpZW50V3JhcHBlcjo6d2lsbFNlbmRSZXF1ZXN0KTogRGl0dG8uCisgICAgICAgIChXZWJL
aXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6
IERpdHRvLiAoQWxzbyBmZXRjaCB0aGUgbmV3IGNvb2tpZXMgZnJvbSB0aGUgcmVzcG9uc2UuKQor
ICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpkaWRSZWNl
aXZlRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGll
bnRXcmFwcGVyOjpkaWRTdG9wQnVmZmVyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6Oldl
YkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZEZpbmlzaExvYWRpbmcpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlkRmFp
bCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFw
cGVyOjp3aWxsQ2FjaGVSZXNwb25zZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJDRlVS
TENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3Jh
cHBlcjo6ZGlkU2VuZEJvZHlEYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJM
Q29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKTogRGl0
dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6Om5l
ZWROZXdCb2R5U3RyZWFtKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVj
dGlvbkNsaWVudFdyYXBwZXI6OmNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZSk6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjp3aWxsU2Vu
ZFJlcXVlc3RGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6IERpdHRvLgorICAgICAgICAoV2Vi
S2l0OjpXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpkaWRSZWNlaXZlRGF0YUFycmF5
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBw
ZXI6OmNsaWVudCk6IFNpbXBsZSBnZXR0ZXIuCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOiBBZGQgdGhlIG5ldyBmaWxlcyB0byB0aGUgcHJvamVjdC4KKwogMjAx
NS0wNy0xNSAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW01h
Y11bV0syXSBWaWRlb3Mgc2hvdWxkIG9ubHkgaGF2ZSBhY2Nlc3MgdG8gY29va2llcyB3aGVuIC1b
TlNVUkxSZXF1ZXN0IEhUVFBTaG91bGRIYW5kbGVDb29raWVzXSBpcyBZRVMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmlu
ZGV4IGRlYThkNTM4NGE4ZjU2YzZlNzU1NmM0MGIzYTdiODczZDZlN2YwOGIuLjhkZjI4ZjQxMzc3
ODEwZjcyZDA4ODA3ZDlkYTc3NDNhYzk3MmE4NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtMTAzMiw2ICsx
MDMyLDEwIEBACiAjZGVmaW5lIEhBVkVfQVZGT1VOREFUSU9OX0xPQURFUl9ERUxFR0FURSAxCiAj
ZW5kaWYKIAorI2lmIChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDkwMDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEwMTEwMCkKKyNkZWZpbmUgSEFWRV9BVkZPVU5EQVRJT05fVVNFUl9J
TkZPIDEKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFDKQogI2RlZmluZSBVU0VfVklERU9UT09M
Qk9YIDEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGQxOWVjZGJkNDhhYjU1NzY0MTA4NWY4MzhmN2EwNWM5ZWNjY2Iz
MzguLjMyMDMyMGEwMWI1OGIxMmMzMDg3NTkwZTViMmRhOWY0ZjYzMGY1OTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU3NDQs
NiArNTc0NCw3IEBACiAJCUNEMTlBMjY4MUExM0U3MDAwMDhENjUwRSAvKiBEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0QxOUEyNjcxQTEzRTcwMDAwOEQ2NTBFIC8qIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0QxQjRB
NjUxNjA3ODZBRTAwMjgyREY5IC8qIE1lZGlhS2V5TmVlZGVkRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBOThEQzIxNjAxNEVFRTAwRkVB
M0IxIC8qIE1lZGlhS2V5TmVlZGVkRXZlbnQuY3BwICovOyB9OwogCQlDRDFFNzM0NzE2N0JDNzhF
MDA5QTg4NUQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QxRTczNDYxNjdCQzc4RTAwOUE4ODVEIC8q
IFRleHRUcmFja1JlcHJlc2VudGF0aW9uLmNwcCAqLzsgfTsKKwkJQ0QyMkQ0QjAxQjU3MjdBQjAw
NDM2MkRDIC8qIENGVVJMQ29ubmVjdGlvblNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QyMkQ0QUYxQjU3MjdBQjAwNDM2MkRDIC8qIENGVVJMQ29u
bmVjdGlvblNQSS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUNEMjdGNkU1MTQ1NzY4NUEwMDc4MjA3RCAvKiBKU01lZGlhQ29udHJvbGxlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDI3RjZFMjE0
NTc2NzU4MDA3ODIwN0QgLyogSlNNZWRpYUNvbnRyb2xsZXIuY3BwICovOyB9OwogCQlDRDI3RjZF
NzE0NTc3MEQzMDA3ODIwN0QgLyogTWVkaWFDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEMjdGNkU2MTQ1NzcwRDMwMDc4MjA3RCAv
KiBNZWRpYUNvbnRyb2xsZXIuY3BwICovOyB9OwogCQlDRDJGNEEyMzE4RDg5RjcwMDA2Mzc0NkQg
LyogQXVkaW9IYXJkd2FyZUxpc3RlbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEMkY0QTIxMThEODlGNzAwMDYzNzQ2RCAvKiBBdWRpb0hhcmR3
YXJlTGlzdGVuZXIuY3BwICovOyB9OwpAQCAtMTMzNDQsNiArMTMzNDUsNyBAQAogCQlDRDEyN0RF
QjE0RjMwOTc5MDBFODQ3NzkgLyogV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0QxOUEyNjcxQTEzRTcwMDAwOEQ2NTBF
IC8qIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNEMUU3MzQ2MTY3QkM3OEUwMDlBODg1RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEMjJENEFGMUI1
NzI3QUIwMDQzNjJEQyAvKiBDRlVSTENvbm5lY3Rpb25TUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ0ZVUkxDb25uZWN0aW9uU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUNEMjdGNkUwMTQ1NzVDMUIwMDc4MjA3RCAvKiBNZWRpYUNvbnRyb2xsZXIuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IE1lZGlhQ29udHJvbGxlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNEMjdGNkUyMTQ1NzY3NTgwMDc4MjA3RCAvKiBKU01lZGlhQ29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lZGlhQ29udHJvbGxlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEMjdGNkUzMTQ1NzY3NTgwMDc4MjA3RCAvKiBK
U01lZGlhQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01l
ZGlhQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY2MzksNiAr
MTY2NDEsNyBAQAogCQkJCTY1MDg2REE3MTlBQzE3MTkwMDlBRjQ2QiAvKiBDRkxvY2FsZVNQSS5o
ICovLAogCQkJCUNFODI0NUVGMTlCNjcxQkEwMEFDMDEyMiAvKiBDRk5ldHdvcmtDb25uZWN0aW9u
Q2FjaGVTUEkuaCAqLywKIAkJCQlDRTEyNTI1QTFBMUMwMTgyMDA4NjQ0ODAgLyogQ0ZOZXR3b3Jr
U1BJLmggKi8sCisJCQkJQ0QyMkQ0QUYxQjU3MjdBQjAwNDM2MkRDIC8qIENGVVJMQ29ubmVjdGlv
blNQSS5oICovLAogCQkJCTQ0NDlBNDA0MUE5NjRCMDAwMEI2NEFENSAvKiBDb3JlTWVkaWFTUEku
aCAqLywKIAkJCSk7CiAJCQlwYXRoID0gY2Y7CkBAIC0yNTk1Nyw2ICsyNTk2MCw3IEBACiAJCQkJ
QzlGODdDRkUxQjI4RjQwRTAwOTc5QjgzIC8qIE1lZGlhU2Vzc2lvbkV2ZW50cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzkwRjY1NTYxQjIyNTNCRTAwMjE2M0ExIC8qIE1lZGlhU2Vzc2lvbk1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3NjM4QTk5MTg4NDQ4NzIwMEUxNUExQiAvKiBNZWRp
YVNlc3Npb25NYW5hZ2VySU9TLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRDIyRDRCMDFCNTcyN0FC
MDA0MzYyREMgLyogQ0ZVUkxDb25uZWN0aW9uU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlDOUQ4
NTFGMDFCMzlEQzc4MDA4NTA2MkUgLyogTWVkaWFTZXNzaW9uTWV0YWRhdGEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUNEM0E0OTVGMTdBOUQwMUIwMDI3NEU0MiAvKiBNZWRpYVNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQ0Q2NDFFQjMxODE4RjVFRDAwRUU0QzQxIC8qIE1lZGlhU291cmNlUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQppbmRleCA3YmFiNWM3
OGM1ZmQ5M2EyZjBhNTc2YWM1ZjljMDk1N2ExNThhOGRiLi4yNTI0NGZjMTllMzk2MjUzM2I4OTIz
ZGY5NWY2YmM0NTkyNjg5N2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KQEAgLTM1LDYgKzM1
LDcgQEAKICNpbXBvcnQgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCiAjaW1wb3J0ICJCbG9j
a0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkNETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDLmgiCisj
aW1wb3J0ICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCAiQ29va2llLmgiCiAjaW1w
b3J0ICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKICNpbXBvcnQgIkZsb2F0Q29udmVyc2lv
bi5oIgpAQCAtOTE1LDYgKzkxNiwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6OmNyZWF0ZUFWQXNzZXRGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgTlNV
UkwgKmNvY29hVVJMID0gY2Fub25pY2FsVVJMKHVybCk7CiAgICAgbV9hdkFzc2V0ID0gYWRvcHRO
UyhbYWxsb2NBVlVSTEFzc2V0SW5zdGFuY2UoKSBpbml0V2l0aFVSTDpjb2NvYVVSTCBvcHRpb25z
Om9wdGlvbnMuZ2V0KCldKTsKIAorI2lmIEhBVkUoQVZGT1VOREFUSU9OX1VTRVJfSU5GTykKKyAg
ICB1aW50NjRfdCBzZXNzaW9uSUQgPSBwbGF5ZXIoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+
c2Vzc2lvbklEKCkuc2Vzc2lvbklEKCk7CisgICAgW2dldEFWVVJMQXNzZXRDbGFzcygpIHNldFVz
ZXJJbmZvT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRMb25nTG9uZzpzZXNzaW9u
SURdIGZvclVSTEFzc2V0Om1fYXZBc3NldC5nZXQoKV07CisjZW5kaWYKKwogI2lmIEhBVkUoQVZG
T1VOREFUSU9OX0xPQURFUl9ERUxFR0FURSkKICAgICBbW21fYXZBc3NldC5nZXQoKSByZXNvdXJj
ZUxvYWRlcl0gc2V0RGVsZWdhdGU6bV9sb2FkZXJEZWxlZ2F0ZS5nZXQoKSBxdWV1ZTpnbG9iYWxM
b2FkZXJEZWxlZ2F0ZVF1ZXVlKCldOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcGkvY2YvQ0ZVUkxDb25uZWN0aW9uU1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcGkvY2YvQ0ZVUkxDb25uZWN0aW9uU1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2M4ZDMyZTdj
NGIwMWE0MGRkYjE0MzQyMTAzZWQzNDk5OWE3MjBmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jZi9DRlVSTENvbm5lY3Rpb25TUEkuaApAQCAtMCwwICsx
LDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDRlVSTENvbm5lY3Rpb25TUElfaAorI2RlZmluZSBD
RlVSTENvbm5lY3Rpb25TUElfaAorCisjaWYgUExBVEZPUk0oV0lOKSB8fCBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQorCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGVVJMQ29ubmVjdGlvbi5oPgorCisj
ZWxzZQorCisjaW5jbHVkZSA8Q29uZGl0aW9uYWxNYWNyb3MuaD4KKwordHlwZWRlZiBjb25zdCBz
dHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2UqIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWY7Cit0eXBl
ZGVmIGNvbnN0IHN0cnVjdCBfQ0ZVUkxSZXF1ZXN0KiBDRlVSTFJlcXVlc3RSZWY7Cit0eXBlZGVm
IHN0cnVjdCBfX0NGSFRUUE1lc3NhZ2UqIENGSFRUUE1lc3NhZ2VSZWY7Cit0eXBlZGVmIHN0cnVj
dCBfQ0ZVUkxBdXRoQ2hhbGxlbmdlKiBDRlVSTEF1dGhDaGFsbGVuZ2VSZWY7Cit0eXBlZGVmIHN0
cnVjdCBfQ0ZVUkxDb25uZWN0aW9uKiBDRlVSTENvbm5lY3Rpb25SZWY7Cit0eXBlZGVmIHN0cnVj
dCBfQ0ZVUkxQcm90ZWN0aW9uU3BhY2UqIENGVVJMUHJvdGVjdGlvblNwYWNlUmVmOwordHlwZWRl
ZiBzdHJ1Y3QgX0NGVVJMUmVxdWVzdCogQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZjsKK3R5cGVkZWYg
c3RydWN0IF9DRlVSTFJlc3BvbnNlKiBDRlVSTFJlc3BvbnNlUmVmOwordHlwZWRlZiBzdHJ1Y3Qg
Q0ZVUkxDb25uZWN0aW9uQ2xpZW50X1Y2IENGVVJMQ29ubmVjdGlvbkNsaWVudDsKK3R5cGVkZWYg
c3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UqIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7
CisKK3R5cGVkZWYgQ0FMTEJBQ0tfQVBJX0MoQ0ZVUkxSZXF1ZXN0UmVmLCBDRlVSTENvbm5lY3Rp
b25XaWxsU2VuZFJlcXVlc3RDYWxsYmFjaykoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTFJlcXVl
c3RSZWYsIENGVVJMUmVzcG9uc2VSZWYgcmVkaXJlY3Rpb25SZXNwb25zZSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7Cit0eXBlZGVmIENBTExCQUNLX0FQSV9DKHZvaWQsIENGVVJMQ29ubmVjdGlv
bkRpZFJlY2VpdmVSZXNwb25zZUNhbGxiYWNrKShDRlVSTENvbm5lY3Rpb25SZWYsIENGVVJMUmVz
cG9uc2VSZWYgcmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordHlwZWRlZiBDQUxM
QkFDS19BUElfQyh2b2lkLCBDRlVSTENvbm5lY3Rpb25EaWRSZWNlaXZlRGF0YUNhbGxiYWNrKShD
RlVSTENvbm5lY3Rpb25SZWYsIENGRGF0YVJlZiBkYXRhLCBDRkluZGV4IG9yaWdpbmFsTGVuZ3Ro
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgQ0FMTEJBQ0tfQVBJX0Modm9pZCwg
Q0ZVUkxDb25uZWN0aW9uRGlkU3RvcEJ1ZmZlcmluZ0RhdGFDYWxsYmFjaykoQ0ZVUkxDb25uZWN0
aW9uUmVmLCBDRkRhdGFSZWYgYnVmZmVyZWREYXRhLCBDRkluZGV4IG9yaWdpbmFsTGVuZ3RoLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgQ0FMTEJBQ0tfQVBJX0Modm9pZCwgQ0ZV
UkxDb25uZWN0aW9uRGlkRmluaXNoTG9hZGluZ0NhbGxiYWNrKShDRlVSTENvbm5lY3Rpb25SZWYs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordHlwZWRlZiBDQUxMQkFDS19BUElfQyh2b2lkLCBD
RlVSTENvbm5lY3Rpb25EaWRGYWlsQ2FsbGJhY2tWMCkoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlN0
cmVhbUVycm9yIGVycm9yLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgQ0FMTEJB
Q0tfQVBJX0Modm9pZCwgQ0ZVUkxDb25uZWN0aW9uRGlkRmFpbENhbGxiYWNrKShDRlVSTENvbm5l
Y3Rpb25SZWYsIENGRXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordHlw
ZWRlZiBDQUxMQkFDS19BUElfQyhDRkNhY2hlZFVSTFJlc3BvbnNlUmVmLCBDRlVSTENvbm5lY3Rp
b25XaWxsQ2FjaGVSZXNwb25zZUNhbGxiYWNrKShDRlVSTENvbm5lY3Rpb25SZWYsIENGQ2FjaGVk
VVJMUmVzcG9uc2VSZWYgY2FjaGVkUmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwor
dHlwZWRlZiBDQUxMQkFDS19BUElfQyh2b2lkLCBDRlVSTENvbm5lY3Rpb25EaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VDYWxsYmFjaykoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTEF1
dGhDaGFsbGVuZ2VSZWYgY2hhbGxlbmdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVk
ZWYgQ0FMTEJBQ0tfQVBJX0Modm9pZCwgQ0ZVUkxDb25uZWN0aW9uRGlkU2VuZEJvZHlEYXRhQ2Fs
bGJhY2spKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZJbmRleCBieXRlc1dyaXR0ZW4sIENGSW5kZXgg
dG90YWxCeXRlc1dyaXR0ZW4sIENGSW5kZXggdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIENBTExCQUNLX0FQSV9DKEJvb2xlYW4sIENG
VVJMQ29ubmVjdGlvblNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlQ2FsbGJhY2spKENGVVJMQ29u
bmVjdGlvblJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIENBTExCQUNLX0FQ
SV9DKENGUmVhZFN0cmVhbVJlZiwgQ0ZVUkxDb25uZWN0aW9uTmVlZE5ld0JvZHlTdHJlYW1DYWxs
YmFjaykoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTFJlcXVlc3RSZWYsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOwordHlwZWRlZiBDQUxMQkFDS19BUElfQyhCb29sZWFuLCBDRlVSTENvbm5lY3Rp
b25DYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UpIChDRlVSTENvbm5lY3Rpb25SZWYsIENGVVJM
UHJvdGVjdGlvblNwYWNlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgQ0FM
TEJBQ0tfQVBJX0Modm9pZCwgQ0ZVUkxDb25uZWN0aW9uV2lsbFNlbmRSZXF1ZXN0Rm9yQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UpIChDRlVSTENvbm5lY3Rpb25SZWYsIENGVVJMQXV0aENoYWxsZW5n
ZVJlZiBjaGFsbGVuZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordHlwZWRlZiBDQUxMQkFD
S19BUElfQyh2b2lkLCBDRlVSTENvbm5lY3Rpb25EaWRSZWNlaXZlRGF0YUFycmF5Q2FsbGJhY2sp
KENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZBcnJheVJlZiBkYXRhQXJyYXksIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOworCitzdHJ1Y3QgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50X1Y2IHsKKyAgICBDRklu
ZGV4IHZlcnNpb247CisgICAgY29uc3Qgdm9pZCogY2xpZW50SW5mbzsKKworICAgIENGQWxsb2Nh
dG9yUmV0YWluQ2FsbEJhY2sgcmV0YWluOworICAgIENGQWxsb2NhdG9yUmVsZWFzZUNhbGxCYWNr
IHJlbGVhc2U7CisgICAgQ0ZBbGxvY2F0b3JDb3B5RGVzY3JpcHRpb25DYWxsQmFjayBjb3B5RGVz
Y3JpcHRpb247CisKKyAgICBDRlVSTENvbm5lY3Rpb25XaWxsU2VuZFJlcXVlc3RDYWxsYmFjayB3
aWxsU2VuZFJlcXVlc3Q7CisgICAgQ0ZVUkxDb25uZWN0aW9uRGlkUmVjZWl2ZVJlc3BvbnNlQ2Fs
bGJhY2sgZGlkUmVjZWl2ZVJlc3BvbnNlOworICAgIENGVVJMQ29ubmVjdGlvbkRpZFJlY2VpdmVE
YXRhQ2FsbGJhY2sgZGlkUmVjZWl2ZURhdGE7CisgICAgQ0ZVUkxDb25uZWN0aW9uRGlkU3RvcEJ1
ZmZlcmluZ0RhdGFDYWxsYmFjayBkaWRTdG9wQnVmZmVyaW5nOworICAgIENGVVJMQ29ubmVjdGlv
bkRpZEZpbmlzaExvYWRpbmdDYWxsYmFjayBkaWRGaW5pc2hMb2FkaW5nOworICAgIENGVVJMQ29u
bmVjdGlvbkRpZEZhaWxDYWxsYmFjayBkaWRGYWlsOworICAgIENGVVJMQ29ubmVjdGlvbldpbGxD
YWNoZVJlc3BvbnNlQ2FsbGJhY2sgd2lsbENhY2hlUmVzcG9uc2U7CisgICAgQ0ZVUkxDb25uZWN0
aW9uRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ2FsbGJhY2sgZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIENGVVJMQ29ubmVjdGlvbkRpZFNlbmRCb2R5RGF0
YUNhbGxiYWNrIGRpZFNlbmRCb2R5RGF0YTsKKyAgICBDRlVSTENvbm5lY3Rpb25TaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZUNhbGxiYWNrIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlOworICAg
IENGVVJMQ29ubmVjdGlvbk5lZWROZXdCb2R5U3RyZWFtQ2FsbGJhY2sgbmVlZE5ld0JvZHlTdHJl
YW07CisgICAgQ0ZVUkxDb25uZWN0aW9uQ2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNlIGNhblJl
c3BvbmRUb1Byb3RlY3Rpb25TcGFjZTsKKyAgICBDRlVSTENvbm5lY3Rpb25XaWxsU2VuZFJlcXVl
c3RGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSB3aWxsU2VuZFJlcXVlc3RGb3JBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZTsKKyAgICBDRlVSTENvbm5lY3Rpb25EaWRSZWNlaXZlRGF0YUFycmF5Q2Fs
bGJhY2sgZGlkUmVjZWl2ZURhdGFBcnJheTsKK307CisKKyNlbmRpZiAvLyBQTEFURk9STShXSU4p
IHx8IFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3BpL21hYy9BVkZvdW5kYXRpb25TUEkuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NwaS9tYWMvQVZGb3VuZGF0aW9uU1BJLmgKaW5kZXggMzY2ODQ2OGMzMjBj
ODMwZWFhNWYwMzNhMWVmZGMyZWE2YzBlYzQzMy4uMDk3OTcyNmUwMDc0NGM5YzNlNDNiOThmZmEx
YmJjZTgyOWQzZjQ2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL21h
Yy9BVkZvdW5kYXRpb25TUEkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFj
L0FWRm91bmRhdGlvblNQSS5oCkBAIC0zMCw2ICszMCw3IEBACiAKICNpZiBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQogCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBc3NldF9Qcml2YXRlLmg+CiAj
aW1wb3J0IDxBVkZvdW5kYXRpb24vQVZPdXRwdXRDb250ZXh0Lmg+CiAjaW1wb3J0IDxBVkZvdW5k
YXRpb24vQVZQbGF5ZXJfUHJpdmF0ZS5oPgogCkBAIC00Nyw2ICs0OCwxMSBAQAogQHByb3BlcnR5
IChub25hdG9taWMsIHJldGFpbikgQVZPdXRwdXRDb250ZXh0ICpvdXRwdXRDb250ZXh0OwogQGVu
ZAogCitAaW50ZXJmYWNlIEFWVVJMQXNzZXQgKEFWVVJMQXNzZXRVc2VySW5mb1N1cHBvcnRQcml2
YXRlKQorKyAodm9pZClzZXRVc2VySW5mb09iamVjdDooaWQpdXNlckluZm9PYmplY3QgZm9yVVJM
QXNzZXQ6KEFWVVJMQXNzZXQgKilVUkxBc3NldDsKKysgKGlkKXVzZXJJbmZvT2JqZWN0Rm9yVVJM
QXNzZXRJbnN0YW5jZUlkZW50aWZpZXI6KE5TU3RyaW5nICopVVVJRFN0cmluZzsKK0BlbmQKKwog
I2VuZGlmCiAKICNlbmRpZiAvLyBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAh
UExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29r
aWVTdG9yYWdlU2hpbS5tbSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFn
ZVNoaW0ubW0KaW5kZXggMDQzZDY1NjZjMzI3MjBhZmFkY2I3ZWQyNWRiOGI5ZjRmYmVmOWQ0NS4u
MTg5Y2FlNTkzNTJjOTk0MDA1YzU1NzliZDE1NDc4YWRiYjBhOWY2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltLm1tCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmgiCiAjaW5jbHVkZSAiTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24uaCIKKyNpbmNsdWRlICJXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLmgiCiAj
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CkBAIC00OSw2ICs1MCw4IEBAIFNPRlRf
TElOS19GUkFNRVdPUksoQ0ZOZXR3b3JrKQogU09GVF9MSU5LKENGTmV0d29yaywgQ0ZVUkxSZXF1
ZXN0R2V0VVJMLCBDRlVSTFJlZiwgKENGVVJMUmVxdWVzdFJlZiByZXF1ZXN0KSwgKHJlcXVlc3Qp
KQogU09GVF9MSU5LKENGTmV0d29yaywgQ0ZVUkxSZXF1ZXN0U2hvdWxkSGFuZGxlSFRUUENvb2tp
ZXMsIEJvb2xlYW4sIChDRlVSTFJlcXVlc3RSZWYgcmVxdWVzdCksIChyZXF1ZXN0KSkKIAorZXh0
ZXJuICJDIiBDRlVSTENvbm5lY3Rpb25SZWYgQ0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3Bl
cnRpZXMoQ0ZBbGxvY2F0b3JSZWYgYWxsb2MsIENGVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBDRlVS
TENvbm5lY3Rpb25DbGllbnQqIGNsaWVudCwgQ0ZEaWN0aW9uYXJ5UmVmIHByb3BlcnRpZXMpOwor
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogQGludGVyZmFjZSBXS05TVVJMU2Vzc2lvbkxv
Y2FsIDogTlNPYmplY3QKQEAgLTc0LDYgKzc3LDE4IEBAIHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYg
d2ViS2l0Q29va2llU3RvcmFnZUNvcHlSZXF1ZXN0SGVhZGVyRmllbGRzRm9yVVJMKENGSFRUUENv
CiAgICAgcmV0dXJuIENGRGljdGlvbmFyeUNyZWF0ZSgwLCBjb29raWVLZXlzLCBjb29raWVWYWx1
ZXMsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5
VmFsdWVDYWxsQmFja3MpOwogfQogCitzdGF0aWMgQ0ZVUkxDb25uZWN0aW9uUmVmIHdlYmtpdENv
bm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcyhDRlVSTFJlcXVlc3RSZWYgcmVxdWVzdCwgQ0ZV
UkxDb25uZWN0aW9uQ2xpZW50KiBjbGllbnQsIENGRGljdGlvbmFyeVJlZiBwcm9wZXJ0aWVzKQor
eworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAgIGlmICghY2xpZW50IHx8
IGNsaWVudC0+dmVyc2lvbiAhPSA2KQorICAgICAgICByZXR1cm4gQ0ZVUkxDb25uZWN0aW9uQ3Jl
YXRlV2l0aFByb3BlcnRpZXMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVxdWVzdCwgY2xpZW50LCBw
cm9wZXJ0aWVzKTsKKworICAgIFJlZjxXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyPiB3
cmFwcGVyID0gV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6Y3JlYXRlKHJlaW50ZXJw
cmV0X2Nhc3Q8Q0ZVUkxDb25uZWN0aW9uQ2xpZW50X1Y2Kj4oY2xpZW50KSk7CisgICAgcmV0dXJu
IENGVVJMQ29ubmVjdGlvbkNyZWF0ZVdpdGhQcm9wZXJ0aWVzKGtDRkFsbG9jYXRvckRlZmF1bHQs
IHJlcXVlc3QsIHdyYXBwZXItPmNsaWVudCgpLCBwcm9wZXJ0aWVzKTsKKyNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwb3AKK30KKwogQ29va2llU3RvcmFnZVNoaW0mIENvb2tpZVN0b3JhZ2VTaGlt
OjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb29raWVTdG9yYWdl
U2hpbT4gc3RvcmFnZTsKQEAgLTgyLDcgKzk3LDkgQEAgQ29va2llU3RvcmFnZVNoaW0mIENvb2tp
ZVN0b3JhZ2VTaGltOjpzaW5nbGV0b24oKQogCiB2b2lkIENvb2tpZVN0b3JhZ2VTaGltOjppbml0
aWFsaXplKCkKIHsKLSAgICBDb29raWVTdG9yYWdlU2hpbUNhbGxiYWNrcyBjYWxsYmFja3MgPSB7
ICZ3ZWJLaXRDb29raWVTdG9yYWdlQ29weVJlcXVlc3RIZWFkZXJGaWVsZHNGb3JVUkwgfTsKKyAg
ICBDb29raWVTdG9yYWdlU2hpbUNhbGxiYWNrcyBjYWxsYmFja3MgPSB7ICZ3ZWJLaXRDb29raWVT
dG9yYWdlQ29weVJlcXVlc3RIZWFkZXJGaWVsZHNGb3JVUkwKKyAgICAgICAgLCAmd2Via2l0Q29u
bmVjdGlvbkNyZWF0ZVdpdGhQcm9wZXJ0aWVzCisgICAgfTsKICAgICBDb29raWVTdG9yYWdlU2hp
bUluaXRpYWxpemVGdW5jIGZ1bmMgPSByZWludGVycHJldF9jYXN0PENvb2tpZVN0b3JhZ2VTaGlt
SW5pdGlhbGl6ZUZ1bmM+KGRsc3ltKFJUTERfREVGQVVMVCwgIldlYktpdENvb2tpZVN0b3JhZ2VT
aGltSW5pdGlhbGl6ZSIpKTsKICAgICBpZiAoZnVuYykKICAgICAgICAgZnVuYyhjYWxsYmFja3Mp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hp
bUxpYnJhcnkuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hp
bUxpYnJhcnkuY3BwCmluZGV4IDY3N2RiMjdlMWM5ZmQ3NGM5NGJiZTBhYmE3NGJkODhiMDEwNTcz
ODguLmRmNzJjYjU0YzhjZWQxNWY5YzJiNjkwNzc1MTA4N2NhMjRhMGY1YzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5j
cHAKQEAgLTMyLDYgKzMyLDggQEAKIAogZXh0ZXJuICJDIiBDRkRpY3Rpb25hcnlSZWYgX0NGSFRU
UENvb2tpZVN0b3JhZ2VDb3B5UmVxdWVzdEhlYWRlckZpZWxkc0ZvclVSTChDRkFsbG9jYXRvclJl
ZiBpbkFsbG9jYXRvciwgQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBpbkNvb2tpZVN0b3JhZ2UsIENG
VVJMUmVmIGluUmVxdWVzdFVSTCk7CiAKK2V4dGVybiAiQyIgQ0ZVUkxDb25uZWN0aW9uUmVmIENG
VVJMQ29ubmVjdGlvbkNyZWF0ZVdpdGhQcm9wZXJ0aWVzKENGQWxsb2NhdG9yUmVmIGFsbG9jLCBD
RlVSTFJlcXVlc3RSZWYgcmVxdWVzdCwgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50KiBjbGllbnQsIENG
RGljdGlvbmFyeVJlZiBwcm9wZXJ0aWVzKTsKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGV4dGVy
biAiQyIgdm9pZCBXZWJLaXRDb29raWVTdG9yYWdlU2hpbUluaXRpYWxpemUoY29uc3QgQ29va2ll
U3RvcmFnZVNoaW1DYWxsYmFja3MmKTsKQEAgLTc1LDYgKzc3LDM0IEBAIHN0YXRpYyBDRkRpY3Rp
b25hcnlSZWYgc2hpbUNGSFRUUENvb2tpZVN0b3JhZ2VDb3B5UmVxdWVzdEhlYWRlckZpZWxkc0Zv
clVSTChDRkFsCiAKIERZTERfSU5URVJQT1NFKHNoaW1DRkhUVFBDb29raWVTdG9yYWdlQ29weVJl
cXVlc3RIZWFkZXJGaWVsZHNGb3JVUkwsIF9DRkhUVFBDb29raWVTdG9yYWdlQ29weVJlcXVlc3RI
ZWFkZXJGaWVsZHNGb3JVUkwpOwogCitzdGF0aWMgQ0ZVUkxDb25uZWN0aW9uUmVmIHNoaW1DRlVS
TENvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcyhDRkFsbG9jYXRvclJlZiBhbGxvYywgQ0ZV
UkxSZXF1ZXN0UmVmIHJlcXVlc3QsIENGVVJMQ29ubmVjdGlvbkNsaWVudCogY2xpZW50LCBDRkRp
Y3Rpb25hcnlSZWYgcHJvcGVydGllcykKK3sKKyAgICBTaGltUHJvdGVjdG9yIHByb3RlY3RvcjsK
KworICAgIGRvIHsKKyAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IHVuaW5pdGlhbGl6ZWQgY2Fs
bGJhY2tzOgorICAgICAgICBpZiAoIWNvb2tpZVN0b3JhZ2VTaGltQ2FsbGJhY2tzLmNvb2tpZVN0
b3JhZ2VDb3B5UmVxdWVzdEhlYWRlckZpZWxkc0ZvclVSTCkKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBhY2NpZGVudGFsIHJlY3Vyc2lvbjoKKyAgICAg
ICAgaWYgKFNoaW1Qcm90ZWN0b3I6OmNvdW50KCkgPiAxKQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgQ0ZVUkxDb25uZWN0aW9uUmVmIHJlc3VsdHMgPSBjb29raWVTdG9yYWdlU2hpbUNh
bGxiYWNrcy5jb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMocmVxdWVzdCwgY2xpZW50LCBw
cm9wZXJ0aWVzKTsKKyAgICAgICAgaWYgKCFyZXN1bHRzKQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgfSB3aGlsZSAoMCk7CisKKyNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdk
ZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAgICByZXR1cm4gQ0ZVUkxDb25uZWN0aW9uQ3JlYXRl
V2l0aFByb3BlcnRpZXMoYWxsb2MsIHJlcXVlc3QsIGNsaWVudCwgcHJvcGVydGllcyk7Cit9CisK
K0RZTERfSU5URVJQT1NFKHNoaW1DRlVSTENvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcywg
Q0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMpOworI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIHBvcAorCiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQogdm9p
ZCBXZWJLaXRDb29raWVTdG9yYWdlU2hpbUluaXRpYWxpemUoY29uc3QgQ29va2llU3RvcmFnZVNo
aW1DYWxsYmFja3MmIGNhbGxiYWNrcykKIHsKQEAgLTg3LDcgKzExNyw3IEBAIHZvaWQgV2ViS2l0
Q29va2llU3RvcmFnZVNoaW1Jbml0aWFsaXplKGNvbnN0IENvb2tpZVN0b3JhZ2VTaGltQ2FsbGJh
Y2tzJiBjYWxsYmFjCiAKICAgICBjb29raWVTdG9yYWdlU2hpbUNhbGxiYWNrcyA9IGNhbGxiYWNr
czsKIH0KLSAgICAKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykgJiYg
IVBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29v
a2llU3RvcmFnZVNoaW1MaWJyYXJ5LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tp
ZVN0b3JhZ2VTaGltTGlicmFyeS5oCmluZGV4IDMxMDhlMGExZGY2N2JhNjFkYTk0ZjcyMmI1NTBm
NGYxZWI0NDk5ZWYuLmNlMDdiOTI0MDcxYzQ0NzFlOWE3MWMyNTUzMDM4MTcyNmZhYTUyOTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW1MaWJy
YXJ5LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbUxp
YnJhcnkuaApAQCAtMjgsMTIgKzI4LDE1IEBACiAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNT
KQogCisjaW5jbHVkZSA8V2ViQ29yZS9DRlVSTENvbm5lY3Rpb25TUEkuaD4KKwogdHlwZWRlZiBz
dHJ1Y3QgT3BhcXVlQ0ZIVFRQQ29va2llU3RvcmFnZSogIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdHJ1Y3QgQ29va2llU3RvcmFnZVNoaW1DYWxsYmFj
a3MgewogICAgIENGRGljdGlvbmFyeVJlZiAoKmNvb2tpZVN0b3JhZ2VDb3B5UmVxdWVzdEhlYWRl
ckZpZWxkc0ZvclVSTCkoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiwgQ0ZVUkxSZWYpOworICAgIENG
VVJMQ29ubmVjdGlvblJlZiAoKmNvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcykoQ0ZVUkxS
ZXF1ZXN0UmVmIHJlcXVlc3QsIENGVVJMQ29ubmVjdGlvbkNsaWVudCogY2xpZW50LCBDRkRpY3Rp
b25hcnlSZWYgcHJvcGVydGllcyk7CiB9OwogCiB0eXBlZGVmIHZvaWQgKCpDb29raWVTdG9yYWdl
U2hpbUluaXRpYWxpemVGdW5jKShjb25zdCBDb29raWVTdG9yYWdlU2hpbUNhbGxiYWNrcyYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJDRlVSTENvbm5lY3Rpb25D
bGllbnRXcmFwcGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNGVVJMQ29ubmVj
dGlvbkNsaWVudFdyYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZGNjYmZiZjAwYmE0OTNmZDllMTViNWY4
MTliMDg0MGJlZWUwM2M2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9XZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLmgKQEAgLTAsMCArMSw3NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcl9oCisj
ZGVmaW5lIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXJfaAorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DRlVSTENvbm5lY3Rpb25TUEkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBl
ciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI+IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI+
IGNyZWF0ZShDRlVSTENvbm5lY3Rpb25DbGllbnRfVjYqIHdyYXBwZWRDbGllbnQpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFw
cGVyKHdyYXBwZWRDbGllbnQpKTsKKyAgICB9OworICAgIH5XZWJDRlVSTENvbm5lY3Rpb25DbGll
bnRXcmFwcGVyKCk7CisKKyAgICBDRlVSTENvbm5lY3Rpb25DbGllbnQqIGNsaWVudCgpOworCitw
cml2YXRlOgorICAgIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIoQ0ZVUkxDb25uZWN0
aW9uQ2xpZW50X1Y2KiB3cmFwcGVkQ2xpZW50KTsKKworICAgIHN0YXRpYyBjb25zdCB2b2lkKiBy
ZXRhaW4oY29uc3Qgdm9pZCogaW5mbyk7CisgICAgc3RhdGljIHZvaWQgcmVsZWFzZShjb25zdCB2
b2lkKiBpbmZvKTsKKyAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgY29weURlc2NyaXB0aW9uKGNvbnN0
IHZvaWQqIGluZm8pOworICAgIHN0YXRpYyBDRlVSTFJlcXVlc3RSZWYgd2lsbFNlbmRSZXF1ZXN0
KENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZVUkxSZXF1ZXN0UmVmLCBDRlVSTFJlc3BvbnNlUmVmLCBj
b25zdCB2b2lkICppbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoQ0ZV
UkxDb25uZWN0aW9uUmVmLCBDRlVSTFJlc3BvbnNlUmVmLCBjb25zdCB2b2lkICppbmZvKTsKKyAg
ICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShDRlVSTENvbm5lY3Rpb25SZWYsIENGRGF0YVJl
ZiwgQ0ZJbmRleCBvcmlnaW5hbExlbmd0aCwgY29uc3Qgdm9pZCAqaW5mbyk7CisgICAgc3RhdGlj
IHZvaWQgZGlkU3RvcEJ1ZmZlcmluZyhDRlVSTENvbm5lY3Rpb25SZWYsIENGRGF0YVJlZiwgQ0ZJ
bmRleCBvcmlnaW5hbExlbmd0aCwgY29uc3Qgdm9pZCAqaW5mbyk7CisgICAgc3RhdGljIHZvaWQg
ZGlkRmluaXNoTG9hZGluZyhDRlVSTENvbm5lY3Rpb25SZWYsIGNvbnN0IHZvaWQgKmluZm8pOwor
ICAgIHN0YXRpYyB2b2lkIGRpZEZhaWwoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRkVycm9yUmVmLCBj
b25zdCB2b2lkICppbmZvKTsKKyAgICBzdGF0aWMgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiB3aWxs
Q2FjaGVSZXNwb25zZShDRlVSTENvbm5lY3Rpb25SZWYsIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYs
IGNvbnN0IHZvaWQgKmluZm8pOworICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShDRlVSTENvbm5lY3Rpb25SZWYsIENGVVJMQXV0aENoYWxsZW5nZVJlZiwg
Y29uc3Qgdm9pZCAqaW5mbyk7CisgICAgc3RhdGljIHZvaWQgZGlkU2VuZEJvZHlEYXRhKENGVVJM
Q29ubmVjdGlvblJlZiwgQ0ZJbmRleCBieXRlc1dyaXR0ZW4sIENGSW5kZXggdG90YWxCeXRlc1dy
aXR0ZW4sIENGSW5kZXggdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZSwgY29uc3Qgdm9pZCAqaW5m
byk7CisgICAgc3RhdGljIEJvb2xlYW4gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoQ0ZVUkxD
b25uZWN0aW9uUmVmLCBjb25zdCB2b2lkICppbmZvKTsKKyAgICBzdGF0aWMgQ0ZSZWFkU3RyZWFt
UmVmIG5lZWROZXdCb2R5U3RyZWFtKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZVUkxSZXF1ZXN0UmVm
LCBjb25zdCB2b2lkICppbmZvKTsKKyAgICBzdGF0aWMgQm9vbGVhbiBjYW5SZXNwb25kVG9Qcm90
ZWN0aW9uU3BhY2UoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTFByb3RlY3Rpb25TcGFjZVJlZiwg
Y29uc3Qgdm9pZCogaW5mbyk7CisgICAgc3RhdGljIHZvaWQgd2lsbFNlbmRSZXF1ZXN0Rm9yQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTEF1dGhDaGFsbGVu
Z2VSZWYsIGNvbnN0IHZvaWQgKmluZm8pOworICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVEYXRh
QXJyYXkoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRkFycmF5UmVmLCBjb25zdCB2b2lkICppbmZvKTsK
KworICAgIENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiBtX3dyYXBwZWRDbGllbnQgeyB9OworICAg
IENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiBtX2NsaWVudCB7IH07CisgICAgV2ViQ29yZTo6U2Vz
c2lvbklEIG1fc2Vzc2lvbklEOworfTsKKworfQorCisjZW5kaWYgLy8gV2ViQ0ZVUkxDb25uZWN0
aW9uQ2xpZW50V3JhcHBlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1dlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbWFjL1dlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTE5
ZjNiODQ0NjhlOWUxZjkzODhhMGVmMTU0MzhkZTZiZjExMjY1YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBl
ci5tbQpAQCAtMCwwICsxLDI3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIldlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIuaCIKKworI2ltcG9ydCAi
QVBJVVJMLmgiCisjaW1wb3J0ICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2lt
cG9ydCAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzLmgi
CisjaW1wb3J0IDxXZWJDb3JlL0FWRm91bmRhdGlvblNQSS5oPgorI2ltcG9ydCA8V2ViQ29yZS9V
UkwuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworU09GVF9MSU5LX0ZSQU1FV09S
SyhBVkZvdW5kYXRpb24pCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlVSTEFzc2V0
KQorCitTT0ZUX0xJTktfRlJBTUVXT1JLKENGTmV0d29yaykKK1NPRlRfTElOSyhDRk5ldHdvcmss
IENGVVJMUmVxdWVzdENyZWF0ZU11dGFibGVDb3B5LCBDRk11dGFibGVVUkxSZXF1ZXN0UmVmLCAo
Q0ZBbGxvY2F0b3JSZWYgYWxsb2MsIENGVVJMUmVxdWVzdFJlZiByZXF1ZXN0KSwgKGFsbG9jLCBy
ZXF1ZXN0KSkKK1NPRlRfTElOSyhDRk5ldHdvcmssIENGVVJMUmVxdWVzdENvcHlIVFRQSGVhZGVy
RmllbGRWYWx1ZSwgQ0ZTdHJpbmdSZWYsIChDRlVSTFJlcXVlc3RSZWYgcmVxdWVzdCwgQ0ZTdHJp
bmdSZWYgaGVhZGVyKSwgKHJlcXVlc3QsIGhlYWRlcikpOworU09GVF9MSU5LKENGTmV0d29yaywg
Q0ZVUkxSZXF1ZXN0Q29weUhUVFBSZXF1ZXN0LCBDRkhUVFBNZXNzYWdlUmVmLCAoQ0ZVUkxSZXF1
ZXN0UmVmIHJlcXVlc3QpLCAocmVxdWVzdCkpOworU09GVF9MSU5LKENGTmV0d29yaywgQ0ZVUkxS
ZXF1ZXN0U2V0SFRUUENvb2tpZVN0b3JhZ2UsIHZvaWQsIChDRk11dGFibGVVUkxSZXF1ZXN0UmVm
IHJlcXVlc3QsIENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSksIChyZXF1ZXN0
LCBjb29raWVTdG9yYWdlKSk7CitTT0ZUX0xJTksoQ0ZOZXR3b3JrLCBDRlVSTFJlcXVlc3RTZXRI
VFRQSGVhZGVyRmllbGRWYWx1ZSwgdm9pZCwgKENGTXV0YWJsZVVSTFJlcXVlc3RSZWYgcmVxdWVz
dCwgQ0ZTdHJpbmdSZWYgaHR0cEhlYWRlckZpZWxkLCBDRlN0cmluZ1JlZiBodHRwSGVhZGVyRmll
bGRWYWx1ZSksIChyZXF1ZXN0LCBodHRwSGVhZGVyRmllbGQsIGh0dHBIZWFkZXJGaWVsZFZhbHVl
KSk7CitTT0ZUX0xJTksoQ0ZOZXR3b3JrLCBDRlVSTFJlc3BvbnNlR2V0SFRUUFJlc3BvbnNlLCBD
RkhUVFBNZXNzYWdlUmVmLCAoQ0ZVUkxSZXNwb25zZVJlZiByZXNwb25zZSksIChyZXNwb25zZSkp
OworU09GVF9MSU5LKENGTmV0d29yaywgQ0ZVUkxSZXNwb25zZUdldFVSTCwgQ0ZVUkxSZWYsIChD
RlVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKSwgKHJlc3BvbnNlKSk7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjpXZWJDRlVSTENvbm5lY3Rp
b25DbGllbnRXcmFwcGVyKENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiogd3JhcHBlZENsaWVudCkK
KyAgICA6IG1fd3JhcHBlZENsaWVudCgqd3JhcHBlZENsaWVudCkKKyAgICAsIG1fc2Vzc2lvbklE
KFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQoreworICAgIG1fY2xpZW50LnZlcnNpb24g
PSA2OworICAgIG1fY2xpZW50LmNsaWVudEluZm8gPSB0aGlzOworICAgIG1fY2xpZW50LnJldGFp
biA9ICZyZXRhaW47CisgICAgbV9jbGllbnQucmVsZWFzZSA9ICZyZWxlYXNlOworICAgIG1fY2xp
ZW50LmRpZFJlY2VpdmVSZXNwb25zZSA9ICZkaWRSZWNlaXZlUmVzcG9uc2U7CisgICAgbV9jbGll
bnQud2lsbFNlbmRSZXF1ZXN0ID0gJndpbGxTZW5kUmVxdWVzdDsKKworICAgIGlmIChtX3dyYXBw
ZWRDbGllbnQuY29weURlc2NyaXB0aW9uKQorICAgICAgICBtX2NsaWVudC5jb3B5RGVzY3JpcHRp
b24gPSAmY29weURlc2NyaXB0aW9uOworICAgIGlmIChtX3dyYXBwZWRDbGllbnQuZGlkUmVjZWl2
ZURhdGEpCisgICAgICAgIG1fY2xpZW50LmRpZFJlY2VpdmVEYXRhID0gJmRpZFJlY2VpdmVEYXRh
OworICAgIGlmIChtX3dyYXBwZWRDbGllbnQuZGlkU3RvcEJ1ZmZlcmluZykKKyAgICAgICAgbV9j
bGllbnQuZGlkU3RvcEJ1ZmZlcmluZyA9ICZkaWRTdG9wQnVmZmVyaW5nOworICAgIGlmIChtX3dy
YXBwZWRDbGllbnQuZGlkRmluaXNoTG9hZGluZykKKyAgICAgICAgbV9jbGllbnQuZGlkRmluaXNo
TG9hZGluZyA9ICZkaWRGaW5pc2hMb2FkaW5nOworICAgIGlmIChtX3dyYXBwZWRDbGllbnQuZGlk
RmFpbCkKKyAgICAgICAgbV9jbGllbnQuZGlkRmFpbCA9ICZkaWRGYWlsOworICAgIGlmIChtX3dy
YXBwZWRDbGllbnQud2lsbENhY2hlUmVzcG9uc2UpCisgICAgICAgIG1fY2xpZW50LndpbGxDYWNo
ZVJlc3BvbnNlID0gJndpbGxDYWNoZVJlc3BvbnNlOworICAgIGlmIChtX3dyYXBwZWRDbGllbnQu
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQorICAgICAgICBtX2NsaWVudC5kaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSAmZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlOworICAgIGlmIChtX3dyYXBwZWRDbGllbnQuZGlkU2VuZEJvZHlEYXRhKQorICAg
ICAgICBtX2NsaWVudC5kaWRTZW5kQm9keURhdGEgPSAmZGlkU2VuZEJvZHlEYXRhOworICAgIGlm
IChtX3dyYXBwZWRDbGllbnQuc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpCisgICAgICAgIG1f
Y2xpZW50LnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlID0gJnNob3VsZFVzZUNyZWRlbnRpYWxT
dG9yYWdlOworICAgIGlmIChtX3dyYXBwZWRDbGllbnQubmVlZE5ld0JvZHlTdHJlYW0pCisgICAg
ICAgIG1fY2xpZW50Lm5lZWROZXdCb2R5U3RyZWFtID0gJm5lZWROZXdCb2R5U3RyZWFtOworICAg
IGlmIChtX3dyYXBwZWRDbGllbnQuY2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNlKQorICAgICAg
ICBtX2NsaWVudC5jYW5SZXNwb25kVG9Qcm90ZWN0aW9uU3BhY2UgPSAmY2FuUmVzcG9uZFRvUHJv
dGVjdGlvblNwYWNlOworICAgIGlmIChtX3dyYXBwZWRDbGllbnQud2lsbFNlbmRSZXF1ZXN0Rm9y
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCisgICAgICAgIG1fY2xpZW50LndpbGxTZW5kUmVxdWVz
dEZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0gJndpbGxTZW5kUmVxdWVzdEZvckF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlOworICAgIGlmIChtX3dyYXBwZWRDbGllbnQuZGlkUmVjZWl2ZURhdGFB
cnJheSkKKyAgICAgICAgbV9jbGllbnQuZGlkUmVjZWl2ZURhdGFBcnJheSA9ICZkaWRSZWNlaXZl
RGF0YUFycmF5OworCisgICAgaWYgKG1fd3JhcHBlZENsaWVudC5yZXRhaW4pCisgICAgICAgIG1f
d3JhcHBlZENsaWVudC5yZXRhaW4obV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworfQorCitX
ZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjp+V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50
V3JhcHBlcigpCit7CisgICAgaWYgKG1fd3JhcHBlZENsaWVudC5yZWxlYXNlKQorICAgICAgICBt
X3dyYXBwZWRDbGllbnQucmVsZWFzZShtX3dyYXBwZWRDbGllbnQuY2xpZW50SW5mbyk7Cit9CisK
K2NvbnN0IHZvaWQqIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OnJldGFpbihjb25z
dCB2b2lkKiBpbmZvKQoreworICAgIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRo
aXNJbmZvID0gc3RhdGljX2Nhc3Q8V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGNv
bnN0X2Nhc3Q8dm9pZCo+KGluZm8pKTsKKyAgICB0aGlzSW5mby0+cmVmKCk7CisgICAgcmV0dXJu
IHRoaXNJbmZvOworfQorCit2b2lkIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OnJl
bGVhc2UoY29uc3Qgdm9pZCogaW5mbykKK3sKKyAgICBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRX
cmFwcGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdy
YXBwZXIqPihjb25zdF9jYXN0PHZvaWQqPihpbmZvKSk7CisgICAgdGhpc0luZm8tPmRlcmVmKCk7
Cit9CisKK0NGU3RyaW5nUmVmIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmNvcHlE
ZXNjcmlwdGlvbihjb25zdCB2b2lkKiBpbmZvKQoreworICAgIGNvbnN0IFdlYkNGVVJMQ29ubmVj
dGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworICAgIGlmICh0aGlzSW5mby0+bV93cmFw
cGVkQ2xpZW50LmNvcHlEZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuIHRoaXNJbmZvLT5tX3dy
YXBwZWRDbGllbnQuY29weURlc2NyaXB0aW9uKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2xp
ZW50SW5mbyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0NGVVJMUmVxdWVzdFJlZiBXZWJD
RlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjp3aWxsU2VuZFJlcXVlc3QoQ0ZVUkxDb25uZWN0
aW9uUmVmIGNvbm4sIENGVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBDRlVSTFJlc3BvbnNlUmVmIHJl
c3BvbnNlLCBjb25zdCB2b2lkICppbmZvKQoreworICAgIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVu
dFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nhc3Q8V2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50
V3JhcHBlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGluZm8pKTsKKworICAgIFJldGFpblB0cjxDRk11
dGFibGVVUkxSZXF1ZXN0UmVmPiBtdXRhYmxlUmVxdWVzdCA9IGFkb3B0Q0YoQ0ZVUkxSZXF1ZXN0
Q3JlYXRlTXV0YWJsZUNvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVxdWVzdCkpOworCisjaWYg
SEFWRShBVkZPVU5EQVRJT05fVVNFUl9JTkZPKQorICAgIGRvIHsKKyAgICAgICAgUmV0YWluUHRy
PENGU3RyaW5nUmVmPiBjZlVVSUQgPSBhZG9wdENGKENGVVJMUmVxdWVzdENvcHlIVFRQSGVhZGVy
RmllbGRWYWx1ZShyZXF1ZXN0LCBDRlNUUigiWC1QbGF5YmFjay1TZXNzaW9uLUlkIikpKTsKKyAg
ICAgICAgU3RyaW5nIFVVSUQgPSBjZlVVSUQuZ2V0KCk7CisgICAgICAgIGlmIChVVUlELmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlkIHVzZXJJbmZvID0gW2dldEFW
VVJMQXNzZXRDbGFzcygpIHVzZXJJbmZvT2JqZWN0Rm9yVVJMQXNzZXRJbnN0YW5jZUlkZW50aWZp
ZXI6VVVJRF07CisgICAgICAgIGlmICghdXNlckluZm8gfHwgIVt1c2VySW5mbyBpc0tpbmRPZkNs
YXNzOltOU051bWJlciBjbGFzc11dKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgdGhp
c0luZm8tPm1fc2Vzc2lvbklEID0gU2Vzc2lvbklEKCh1aW50NjRfdClbKE5TTnVtYmVyICopdXNl
ckluZm8gdW5zaWduZWRMb25nTG9uZ1ZhbHVlXSk7CisKKyAgICAgICAgUmV0YWluUHRyPENGSFRU
UE1lc3NhZ2VSZWY+IG1lc3NhZ2UgPSBhZG9wdENGKENGVVJMUmVxdWVzdENvcHlIVFRQUmVxdWVz
dChtdXRhYmxlUmVxdWVzdC5nZXQoKSkpOworCisgICAgICAgIFVSTCByZXF1ZXN0VVJMID0gYWRv
cHRDRihDRkhUVFBNZXNzYWdlQ29weVJlcXVlc3RVUkwobWVzc2FnZS5nZXQoKSkpLmdldCgpOwor
ICAgICAgICBVUkwgZmlyc3RQYXJ0eUZvckNvb2tpZXNVUkw7CisKKyAgICAgICAgQ0ZVUkxSZXF1
ZXN0U2V0SFRUUENvb2tpZVN0b3JhZ2UobXV0YWJsZVJlcXVlc3QuZ2V0KCksIG51bGxwdHIpOwor
ICAgICAgICBib29sIGNvb2tpZXNFbmFibGVkID0gZmFsc2U7CisgICAgICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRW5hYmxlZCh0
aGlzSW5mby0+bV9zZXNzaW9uSUQsIGZpcnN0UGFydHlGb3JDb29raWVzVVJMLCByZXF1ZXN0VVJM
KSwgY29va2llc0VuYWJsZWQsIDApOworICAgICAgICBpZiAoIWNvb2tpZXNFbmFibGVkKQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgU3RyaW5nIGNvb2tpZUhlYWRlcjsKKyAgICAgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHRoaXNJbmZvLT5tX3Nlc3Npb25JRCwgZmlyc3RQYXJ0
eUZvckNvb2tpZXNVUkwsIHJlcXVlc3RVUkwpLCBjb29raWVIZWFkZXIsIDApOworICAgICAgICBD
RlVSTFJlcXVlc3RTZXRIVFRQSGVhZGVyRmllbGRWYWx1ZShtdXRhYmxlUmVxdWVzdC5nZXQoKSwg
Q0ZTVFIoIkNvb2tpZSIpLCBjb29raWVIZWFkZXIuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSk7Cisg
ICAgfSB3aGlsZSAoMCk7CisjZW5kaWYKKworICAgIGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xp
ZW50LndpbGxTZW5kUmVxdWVzdCkKKyAgICAgICAgcmV0dXJuIHRoaXNJbmZvLT5tX3dyYXBwZWRD
bGllbnQud2lsbFNlbmRSZXF1ZXN0KGNvbm4sIG11dGFibGVSZXF1ZXN0LmdldCgpLCByZXNwb25z
ZSwgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKKyAgICByZXR1cm4gbXV0
YWJsZVJlcXVlc3QubGVha1JlZigpOworfQorCit2b2lkIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVu
dFdyYXBwZXI6OmRpZFJlY2VpdmVSZXNwb25zZShDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZV
UkxSZXNwb25zZVJlZiByZXNwb25zZSwgY29uc3Qgdm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBX
ZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNv
bnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqPihpbmZvKTsKKworICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gY2ZDb29raWVzID0gYWRvcHRDRihDRkhUVFBNZXNzYWdlQ29weUhl
YWRlckZpZWxkVmFsdWUoQ0ZVUkxSZXNwb25zZUdldEhUVFBSZXNwb25zZShyZXNwb25zZSksIENG
U1RSKCJTZXQtQ29va2llIikpKTsKKyAgICBpZiAoY2ZDb29raWVzICYmIENGU3RyaW5nR2V0TGVu
Z3RoKGNmQ29va2llcy5nZXQoKSkpIHsKKyAgICAgICAgU3RyaW5nIGNvb2tpZXMgPSBjZkNvb2tp
ZXMuZ2V0KCk7CisgICAgICAgIFVSTCByZXF1ZXN0VVJMID0gQ0ZVUkxSZXNwb25zZUdldFVSTChy
ZXNwb25zZSk7CisgICAgICAgIFVSTCBmaXJzdFBhcnR5Rm9yQ29va2llc1VSTDsKKyAgICAgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U2V0Q29va2ll
c0Zyb21ET00odGhpc0luZm8tPm1fc2Vzc2lvbklELCBmaXJzdFBhcnR5Rm9yQ29va2llc1VSTCwg
cmVxdWVzdFVSTCwgY29va2llcyksIDApOworICAgIH0KKworICAgIGlmICh0aGlzSW5mby0+bV93
cmFwcGVkQ2xpZW50LmRpZFJlY2VpdmVSZXNwb25zZSkKKyAgICAgICAgdGhpc0luZm8tPm1fd3Jh
cHBlZENsaWVudC5kaWRSZWNlaXZlUmVzcG9uc2UoY29ubiwgcmVzcG9uc2UsIHRoaXNJbmZvLT5t
X3dyYXBwZWRDbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViQ0ZVUkxDb25uZWN0aW9u
Q2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZURhdGEoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENG
RGF0YVJlZiBkYXRhLCBDRkluZGV4IG9yaWdpbmFsTGVuZ3RoLCBjb25zdCB2b2lkICppbmZvKQor
eworICAgIGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0g
c3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8p
OworICAgIGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmRpZFJlY2VpdmVEYXRhKQorICAg
ICAgICB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmRpZFJlY2VpdmVEYXRhKGNvbm4sIGRhdGEs
IG9yaWdpbmFsTGVuZ3RoLCB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOwor
fQorCit2b2lkIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZFN0b3BCdWZmZXJp
bmcoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGRGF0YVJlZiBidWZmZXJlZERhdGEsIENGSW5k
ZXggb3JpZ2luYWxMZW5ndGgsIGNvbnN0IHZvaWQgKmluZm8pCit7CisgICAgY29uc3QgV2ViQ0ZV
UkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciogdGhpc0luZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBX
ZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKj4oaW5mbyk7CisgICAgaWYgKHRoaXNJbmZv
LT5tX3dyYXBwZWRDbGllbnQuZGlkU3RvcEJ1ZmZlcmluZykKKyAgICAgICAgdGhpc0luZm8tPm1f
d3JhcHBlZENsaWVudC5kaWRTdG9wQnVmZmVyaW5nKGNvbm4sIGJ1ZmZlcmVkRGF0YSwgb3JpZ2lu
YWxMZW5ndGgsIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3Zv
aWQgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZyhDRlVS
TENvbm5lY3Rpb25SZWYgY29ubiwgY29uc3Qgdm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJD
RlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0
IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0lu
Zm8tPm1fd3JhcHBlZENsaWVudC5kaWRGaW5pc2hMb2FkaW5nKQorICAgICAgICB0aGlzSW5mby0+
bV93cmFwcGVkQ2xpZW50LmRpZEZpbmlzaExvYWRpbmcoY29ubiwgdGhpc0luZm8tPm1fd3JhcHBl
ZENsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRX
cmFwcGVyOjpkaWRGYWlsKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBDRkVycm9yUmVmIGVycm9y
LCBjb25zdCB2b2lkICppbmZvKQoreworICAgIGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVu
dFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9u
Q2xpZW50V3JhcHBlcio+KGluZm8pOworICAgIGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50
LmRpZEZhaWwpCisgICAgICAgIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuZGlkRmFpbChjb25u
LCBlcnJvciwgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsKK30KKworQ0ZD
YWNoZWRVUkxSZXNwb25zZVJlZiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyOjp3aWxs
Q2FjaGVSZXNwb25zZShDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZDYWNoZWRVUkxSZXNwb25z
ZVJlZiBjYWNoZWRSZXNwb25zZSwgY29uc3Qgdm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJD
RlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0
IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0lu
Zm8tPm1fd3JhcHBlZENsaWVudC53aWxsQ2FjaGVSZXNwb25zZSkKKyAgICAgICAgcmV0dXJuIHRo
aXNJbmZvLT5tX3dyYXBwZWRDbGllbnQud2lsbENhY2hlUmVzcG9uc2UoY29ubiwgY2FjaGVkUmVz
cG9uc2UsIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2xpZW50SW5mbyk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6ZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKENGVVJMQ29ubmVjdGlvblJlZiBjb25uLCBD
RlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2hhbGxlbmdlLCBjb25zdCB2b2lkICppbmZvKQoreworICAg
IGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworICAg
IGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSkKKyAgICAgICAgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5kaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoY29ubiwgY2hhbGxlbmdlLCB0aGlzSW5mby0+bV93cmFwcGVk
Q2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdy
YXBwZXI6OmRpZFNlbmRCb2R5RGF0YShDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZJbmRleCBi
eXRlc1dyaXR0ZW4sIENGSW5kZXggdG90YWxCeXRlc1dyaXR0ZW4sIENGSW5kZXggdG90YWxCeXRl
c0V4cGVjdGVkVG9Xcml0ZSwgY29uc3Qgdm9pZCAqaW5mbykKK3sKKyAgICBjb25zdCBXZWJDRlVS
TENvbm5lY3Rpb25DbGllbnRXcmFwcGVyKiB0aGlzSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFdl
YkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIqPihpbmZvKTsKKyAgICBpZiAodGhpc0luZm8t
Pm1fd3JhcHBlZENsaWVudC5kaWRTZW5kQm9keURhdGEpCisgICAgICAgIHRoaXNJbmZvLT5tX3dy
YXBwZWRDbGllbnQuZGlkU2VuZEJvZHlEYXRhKGNvbm4sIGJ5dGVzV3JpdHRlbiwgdG90YWxCeXRl
c1dyaXR0ZW4sIHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUsIHRoaXNJbmZvLT5tX3dyYXBwZWRD
bGllbnQuY2xpZW50SW5mbyk7Cit9CisKK0Jvb2xlYW4gV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50
V3JhcHBlcjo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoQ0ZVUkxDb25uZWN0aW9uUmVmIGNv
bm4sIGNvbnN0IHZvaWQgKmluZm8pCit7CisgICAgY29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xp
ZW50V3JhcHBlciogdGhpc0luZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rp
b25DbGllbnRXcmFwcGVyKj4oaW5mbyk7CisgICAgaWYgKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGll
bnQuc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpCisgICAgICAgIHJldHVybiB0aGlzSW5mby0+
bV93cmFwcGVkQ2xpZW50LnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKGNvbm4sIHRoaXNJbmZv
LT5tX3dyYXBwZWRDbGllbnQuY2xpZW50SW5mbyk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitD
RlJlYWRTdHJlYW1SZWYgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlcjo6bmVlZE5ld0Jv
ZHlTdHJlYW0oQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGVVJMUmVxdWVzdFJlZiByZXF1ZXN0
LCBjb25zdCB2b2lkICppbmZvKQoreworICAgIGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVu
dFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9u
Q2xpZW50V3JhcHBlcio+KGluZm8pOworICAgIGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50
Lm5lZWROZXdCb2R5U3RyZWFtKQorICAgICAgICByZXR1cm4gdGhpc0luZm8tPm1fd3JhcHBlZENs
aWVudC5uZWVkTmV3Qm9keVN0cmVhbShjb25uLCByZXF1ZXN0LCB0aGlzSW5mby0+bV93cmFwcGVk
Q2xpZW50LmNsaWVudEluZm8pOworICAgIHJldHVybiBudWxscHRyOworfQorCitCb29sZWFuIFdl
YkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFj
ZShDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZVUkxQcm90ZWN0aW9uU3BhY2VSZWYgcHJvdGVj
dGlvblNwYWNlLCBjb25zdCB2b2lkKiBpbmZvKQoreworICAgIGNvbnN0IFdlYkNGVVJMQ29ubmVj
dGlvbkNsaWVudFdyYXBwZXIqIHRoaXNJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50V3JhcHBlcio+KGluZm8pOworICAgIGlmICh0aGlzSW5mby0+bV93cmFw
cGVkQ2xpZW50LmNhblJlc3BvbmRUb1Byb3RlY3Rpb25TcGFjZSkKKyAgICAgICAgcmV0dXJuIHRo
aXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2FuUmVzcG9uZFRvUHJvdGVjdGlvblNwYWNlKGNvbm4s
IHByb3RlY3Rpb25TcGFjZSwgdGhpc0luZm8tPm1fd3JhcHBlZENsaWVudC5jbGllbnRJbmZvKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3Jh
cHBlcjo6d2lsbFNlbmRSZXF1ZXN0Rm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQ0ZVUkxDb25u
ZWN0aW9uUmVmIGNvbm4sIENGVVJMQXV0aENoYWxsZW5nZVJlZiBjaGFsbGVuZ2UsIGNvbnN0IHZv
aWQgKmluZm8pCit7CisgICAgY29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3JhcHBlciog
dGhpc0luZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFw
cGVyKj4oaW5mbyk7CisgICAgaWYgKHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQud2lsbFNlbmRS
ZXF1ZXN0Rm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCisgICAgICAgIHRoaXNJbmZvLT5tX3dy
YXBwZWRDbGllbnQud2lsbFNlbmRSZXF1ZXN0Rm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29u
biwgY2hhbGxlbmdlLCB0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmNsaWVudEluZm8pOworfQor
Cit2b2lkIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXI6OmRpZFJlY2VpdmVEYXRhQXJy
YXkoQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm4sIENGQXJyYXlSZWYgZGF0YUFycmF5LCBjb25zdCB2
b2lkICppbmZvKQoreworICAgIGNvbnN0IFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIq
IHRoaXNJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ0ZVUkxDb25uZWN0aW9uQ2xpZW50V3Jh
cHBlcio+KGluZm8pOworICAgIGlmICh0aGlzSW5mby0+bV93cmFwcGVkQ2xpZW50LmRpZFJlY2Vp
dmVEYXRhQXJyYXkpCisgICAgICAgIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuZGlkUmVjZWl2
ZURhdGFBcnJheShjb25uLCBkYXRhQXJyYXksIHRoaXNJbmZvLT5tX3dyYXBwZWRDbGllbnQuY2xp
ZW50SW5mbyk7Cit9CisKK0NGVVJMQ29ubmVjdGlvbkNsaWVudCogV2ViQ0ZVUkxDb25uZWN0aW9u
Q2xpZW50V3JhcHBlcjo6Y2xpZW50KCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxD
RlVSTENvbm5lY3Rpb25DbGllbnQqPigmbV9jbGllbnQpOworfQorCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjk2ZTJjYWUw
MGE4NmRiMWViNzhjY2VmYTExZTc4MWRiMjUyZmEzYi4uZjI1OTdiNzAwZjllYWQ0ZmEyOWFiODc2
ZTdjMDYyM2M1MDYzZGMyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY2OSw2ICsxNjY5LDcgQEAKIAkJQ0QxOUEyNkUxQTEz
RTgzNDAwOEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDE5QTI2QTFBMTNFODIxMDA4RDY1
MEUgLyogV2ViRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLzsgfTsKIAkJQ0Q1QzY2QTAxMzRC
OUQzODAwNEZFMkE4IC8qIEluamVjdGVkQnVuZGxlUGFnZUZ1bGxTY3JlZW5DbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q1QzY2OUUxMzRC
OUQzNjAwNEZFMkE4IC8qIEluamVjdGVkQnVuZGxlUGFnZUZ1bGxTY3JlZW5DbGllbnQuY3BwICov
OyB9OwogCQlDRDVDNjZBMTEzNEI5RDM4MDA0RkUyQTggLyogSW5qZWN0ZWRCdW5kbGVQYWdlRnVs
bFNjcmVlbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0Q1QzY2OUYxMzRCOUQzNzAwNEZFMkE4IC8qIEluamVjdGVkQnVuZGxlUGFnZUZ1bGxT
Y3JlZW5DbGllbnQuaCAqLzsgfTsKKwkJQ0Q2MjRBNUExQUUwOTEwMDAwQTMxODJFIC8qIFdlYkNG
VVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENENjI0QTU4MUFFMDkxMDAwMEEzMTgyRSAvKiBXZWJDRlVSTENv
bm5lY3Rpb25DbGllbnRXcmFwcGVyLmggKi87IH07CiAJCUNENjdEMzBFMTVDMDhGOUEwMDg0M0FE
RiAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDY3RDMwODE1QzA3QkUw
MDA4NDNBREYgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3Bw
ICovOyB9OwogCQlDRDZGNzVGNDEzMUI2NkQwMDBENkIyMUUgLyogV2ViRnVsbFNjcmVlbk1hbmFn
ZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRDczQkEzRTEzMUEyRThBMDBFRURFRDIgLyogV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5j
cHAgKi87IH07CiAJCUNENzNCQTQ3MTMxQUNDOUEwMEVFREVEMiAvKiBXZWJGdWxsU2NyZWVuTWFu
YWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENENzNCQTQ1MTMxQUNDODgwMEVFREVEMiAvKiBXZWJGdWxsU2Ny
ZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKQEAgLTE2ODAsNiArMTY4
MSw3IEBACiAJCUNEQzM4MzA4MTcyMTE4OTAwMDhBMkZDMyAvKiBXZWJQcm9jZXNzU2hpbS5keWxp
YiBpbiBDb3B5IFdlYlByb2Nlc3NTaGltICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQzM4MzA2MTcyMTE3OTkwMDhBMkZDMyAvKiBXZWJQcm9jZXNzU2hpbS5keWxpYiAqLzsg
fTsKIAkJQ0RDMzgzMEMxNzIxMjI4MjAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltTGlicmFy
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDMzgz
MEIxNzIxMjFDRTAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5oICovOyB9Owog
CQlDREMzODMxMDE3MjEyNDQwMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW0ubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREMzODMwRDE3MjEyNDJE
MDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW0ubW0gKi87IH07CisJCUNEQzRFQzQ2MUFFNkE5
MDAwMDlBQ0JEMSAvKiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q2MjRBNTcxQUUwOTEwMDAw
QTMxODJFIC8qIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIubW0gKi87IH07CiAJCUNE
Q0E4NUM4MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDQTg1QzYx
MzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW0gKi87IH07
CiAJCUNEQ0E4NUM5MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRENB
ODVDNzEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oICov
OyB9OwogCQlDRTFBMEJEMjFBNDhFNkM2MDA1NEVGNzQgLyogQXNzZXJ0aW9uU2VydmljZXNTUEku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFMUEwQkND
MUE0OEU2QzYwMDU0RUY3NCAvKiBBc3NlcnRpb25TZXJ2aWNlc1NQSS5oICovOyB9OwpAQCAtMzg5
Myw2ICszODk1LDggQEAKIAkJQ0QxOUEyNkExQTEzRTgyMTAwOEQ2NTBFIC8qIFdlYkRpYWdub3N0
aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRp
YWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNE
NUM2NjlFMTM0QjlEMzYwMDRGRTJBOCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VGdWxsU2NyZWVuQ2xp
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVu
ZGxlUGFnZUZ1bGxTY3JlZW5DbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDRDVDNjY5RjEzNEI5RDM3MDA0RkUyQTggLyogSW5qZWN0ZWRCdW5kbGVQYWdlRnVsbFNjcmVl
bkNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRs
ZVBhZ2VGdWxsU2NyZWVuQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNE
NjI0QTU3MUFFMDkxMDAwMEEzMTgyRSAvKiBXZWJDRlVSTENvbm5lY3Rpb25DbGllbnRXcmFwcGVy
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ0ZVUkxDb25u
ZWN0aW9uQ2xpZW50V3JhcHBlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q2
MjRBNTgxQUUwOTEwMDAwQTMxODJFIC8qIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ0ZVUkxDb25uZWN0aW9uQ2xp
ZW50V3JhcHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDY3RDMwODE1QzA3
QkUwMDA4NDNBREYgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQ
YWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDRDY3RDMwOTE1QzA3QkUwMDA4NDNBREYgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5q
ZWN0ZWRCdW5kbGVQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQ0Q3M0JBMzcxMzFBMjlGRTAwRUVERUQyIC8qIFdlYkZ1bGxTY3JlZW5N
YW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkZ1bGxT
Y3JlZW5NYW5hZ2VyLmNwcDsgcGF0aCA9IEZ1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjQ5Niw2ICs2NTAwLDggQEAKIAkJ
CQlCQ0UyMzI2MjEyMkM2Q0YzMDBENUMzNUEgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1t
ICovLAogCQkJCUJDMTExQjVCMTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkuaCAq
LywKIAkJCQlCQzExMUI1QzExMkY2Mjk4MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5Lm1tICov
LAorCQkJCUNENjI0QTU3MUFFMDkxMDAwMEEzMTgyRSAvKiBXZWJDRlVSTENvbm5lY3Rpb25DbGll
bnRXcmFwcGVyLm1tICovLAorCQkJCUNENjI0QTU4MUFFMDkxMDAwMEEzMTgyRSAvKiBXZWJDRlVS
TENvbm5lY3Rpb25DbGllbnRXcmFwcGVyLmggKi8sCiAJCQkJNTFBRDM1NzIxQUQyRjM3NTAwNTdC
MzhFIC8qIFdlYkhpdFRlc3RSZXN1bHQubW0gKi8sCiAJCQkJOTA1NjIwRTUxMkJDMjQ3NjAwMDc5
OUI2IC8qIFdlYk1lbW9yeVNhbXBsZXIubWFjLm1tICovLAogCQkJKTsKQEAgLTgxOTUsNiArODIw
MSw3IEBACiAJCQkJQTU0MjkzQTQxOTVBNDNEQTAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNl
YXJjaEdlc3R1cmVSZWNvZ25pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUU4NDlDODEzNjhE
OTM5MDAzOEQ0ODEgLyogV0tJbnNwZWN0b3JQcml2YXRlTWFjLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MUE5RTEwQjEzMTVDRDE4MDA5RTcwMzEgLyogV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlDRDYyNEE1QTFBRTA5MTAwMDBBMzE4MkUgLyogV2ViQ0ZVUkxD
b25uZWN0aW9uQ2xpZW50V3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ3OTBBOUYxQUQ3
MTY0OTAwQUI5MEIzIC8qIFdLTGF5b3V0TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzNEM0Ez
QjYxMzM5NjAwQjAwNzA5QkU0IC8qIFdLTWVkaWFDYWNoZU1hbmFnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUM5Q0Q0MzlEMUI0QjAyNEYwMDIzOUUzMyAvKiBXS01lZGlhU2Vzc2lvbk1ldGFkYXRh
LmggaW4gSGVhZGVycyAqLywKQEAgLTEwMDE0LDYgKzEwMDIxLDcgQEAKIAkJCQkzMThCRTE3NTE0
NzQzREQ3MDBBOEZCQjIgLyogV0tOb3RpZmljYXRpb25NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxQTJFQzc3MTQ4RDY2MkUwMDgxMEQ3MSAvKiBXS05vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRDA5RjJCMTc0M0Y4RTYwMEE5NUU1
MCAvKiBXS05QQVBJUGx1Z0luQ29udGFpbmVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RDNEVD
NDYxQUU2QTkwMDAwOUFDQkQxIC8qIFdlYkNGVVJMQ29ubmVjdGlvbkNsaWVudFdyYXBwZXIubW0g
aW4gU291cmNlcyAqLywKIAkJCQkzN0M0QzA5MzE4MTRCM0FGMDAzNjg4QjkgLyogV0tOU0FycmF5
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzczQ0VBRDUxODU0MTdBRTAwOEMzNjNEIC8qIFdLTlNE
YXRhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzcxQTE5NDExODI0RDI5MzAwRjMyQTVFIC8qIFdL
TlNEaWN0aW9uYXJ5Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNGI5ODgzOWQ4OGNkMGU4OTdm
NDQ2N2ZiMWI1NDU5NWFmYWJmYTVkYi4uZWEyMGNmOWQyZWIzYjI2NzA0M2M2NDYxZDY3ODE1MzUw
MGQ2ZTVlYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE1LTA3LTE1ICBKZXIgTm9ibGUgIDxq
ZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIENvb2tpZXMgc2V0IGR1cmluZyBt
ZWRpYSBsb2FkaW5nIGFyZSBub3QgYWRkZWQgdG8gY29va2llIHN0b3JlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQxNzQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvbWVkaWEvcmVz
b3VyY2VzL2dldC1jb29raWUuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9tZWRp
YS9yZXNvdXJjZXMvdmlkZW8tc2V0LWNvb2tpZS5waHA6IEFkZGVkLgorICAgICAgICAqIGh0dHAv
dGVzdHMvbWVkaWEvdmlkZW8tc2V0LWNvb2tpZS5odG1sOiBBZGRlZC4KKwogMjAxNS0wNy0xNSAg
V2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBOZWdhdGl2
ZSBzY3JvbGwgc25hcCByZXBlYXQgdmFsdWVzIGNhdXNlIHdlYiBwcm9jZXNzIHRvIGhhbmcgaW5k
ZWZpbml0ZWx5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL3Jlc291
cmNlcy9nZXQtY29va2llLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL3Jlc291
cmNlcy9nZXQtY29va2llLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTc1ZDA0ZGQwZTg1YmJkMDdhMDc1YWYx
Y2M1Nzg3MzZlZGY4YjBhNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbWVkaWEvcmVzb3VyY2VzL2dldC1jb29raWUuaHRtbApAQCAtMCwwICsxIEBACis8c2NyaXB0
PmRvY3VtZW50LndyaXRlKGRvY3VtZW50LmNvb2tpZSk8L3NjcmlwdD4KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL3Jl
c291cmNlcy92aWRlby1zZXQtY29va2llLnBocCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVk
aWEvcmVzb3VyY2VzL3ZpZGVvLXNldC1jb29raWUucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmZDJkN2ZiYWZh
ZGEyYzAxYzc5YTIxZjlkM2MwNDNkOTdmZTI0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL21lZGlhL3Jlc291cmNlcy92aWRlby1zZXQtY29va2llLnBocApAQCAt
MCwwICsxLDE2IEBACis8P3BocAorCisgICAgJHVhID0gJF9TRVJWRVJbIkhUVFBfVVNFUl9BR0VO
VCJdOworCisJaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1zdG9yZSIpOworCWhlYWRlcigiQ29u
bmVjdGlvbjogY2xvc2UiKTsKKwloZWFkZXIoIlNldC1Db29raWU6IFRFU1Q9VkFMSUQ7IHBhdGg9
LyIpOworCisgICAgJGZpbGVOYW1lID0gJF9HRVRbIm5hbWUiXTsKKyAgICAkdHlwZSA9ICRfR0VU
WyJ0eXBlIl07CisKKyAgICAkX0dFVCA9IGFycmF5KCk7CisgICAgJF9HRVRbJ25hbWUnXSA9ICRm
aWxlTmFtZTsKKyAgICAkX0dFVFsndHlwZSddID0gJHR5cGU7CisgICAgQGluY2x1ZGUoIi4vc2Vy
dmUtdmlkZW8ucGhwIik7IAorPz4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
bWVkaWEvdmlkZW8tc2V0LWNvb2tpZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRp
YS92aWRlby1zZXQtY29va2llLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmYwN2E4ZWZhZDFhMTg0N2FjYTVm
MGZiMDA4MzU0YTUwMDllMDA0YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvbWVkaWEvdmlkZW8tc2V0LWNvb2tpZS5odG1sCkBAIC0wLDAgKzEsNDkgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0uLi8uLi9tZWRpYS1y
ZXNvdXJjZXMvdmlkZW8tdGVzdC5qcz48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0uLi8uLi9t
ZWRpYS1yZXNvdXJjZXMvbWVkaWEtZmlsZS5qcz48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5zZXRBbHdheXNBY2NlcHRDb29raWVz
KHRydWUpOworICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAg
IH0KKworICAgICAgICBkb2N1bWVudC5jb29raWUgPSAnVEVTVD1JTlZBTElEOyBwYXRoPS8nOwor
ICAgICAgICB2YXIgZnJhbWU7CisKKyAgICAgICAgZnVuY3Rpb24gc2V0Q29va2llKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCdkb2N1bWVudC5jb29raWUnLCAnVEVTVD1J
TlZBTElEJyk7CisKKyAgICAgICAgICAgIGZpbmRNZWRpYUVsZW1lbnQoKTsKKyAgICAgICAgICAg
IHdhaXRGb3JFdmVudCgnY2FucGxheXRocm91Z2gnLCBvbmNhbnBsYXl0aHJvdWdoKTsKKworICAg
ICAgICAgICAgdmFyIG1vdmllID0gZmluZE1lZGlhRmlsZSgndmlkZW8nLCAndGVzdCcpOworICAg
ICAgICAgICAgdmFyIHR5cGUgPSBtaW1lVHlwZUZvckV4dGVuc2lvbihtb3ZpZS5zcGxpdCgnLicp
LnBvcCgpKTsKKworICAgICAgICAgICAgdmlkZW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
dmlkZW8nKTsKKyAgICAgICAgICAgIHZpZGVvLnNyYyA9ICJyZXNvdXJjZXMvdmlkZW8tc2V0LWNv
b2tpZS5waHA/bmFtZT0iICsgbW92aWUgKyAnJnR5cGU9JyArIHR5cGU7CisgICAgICAgICAgICB2
aWRlby5wbGF5KCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBvbmNhbnBsYXl0aHJv
dWdoKCkKKyAgICAgICAgeworICAgICAgICAgICAgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJpZnJhbWUiKTsKKyAgICAgICAgICAgIGZyYW1lLnNyYyA9ICJyZXNvdXJjZXMvZ2V0Q29v
a2llLmh0bWwiOworICAgICAgICAgICAgd2FpdEZvckV2ZW50T24oZnJhbWUsICdsb2FkJywgb25m
cmFtZWxvYWQpOworICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmcmFtZSk7
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBvbmZyYW1lbG9hZChldmVudCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCdmcmFtZS5jb250ZW50RG9jdW1lbnQuY29v
a2llJywgJ1RFU1Q9VkFMSUQnKTsKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAgfQor
ICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJzZXRDb29raWUoKSI+Cis8dmlk
ZW8gaWQ9InZpZGVvIj48L3ZpZGVvPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDA4ZTllZDBkNGQ4MTk4MzNm
MDY5MzNhNDBlMGZhZjQyYTgxZjNlODYuLjcwOWFiOGZkY2U1ZWMxOGIxYzkwMjExNjgxNzczM2Q2
MTYwNDYwMDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4
cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3Rh
dGlvbnMKQEAgLTM4LDYgKzM4LDggQEAgd2Via2l0Lm9yZy9iLzE0NTQzMiBtZWRpYS92aWRlby10
cmFuc2Zvcm1lZC1ieS1qYXZhc2NyaXB0Lmh0bWwgWyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9i
LzE0NjYyMiBbIFlvc2VtaXRlIERlYnVnIF0gd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvbW9yZS9m
dW5jdGlvbnMvY29weVRleEltYWdlMkRCYWRBcmdzLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogCit3
ZWJraXQub3JnL2IvMTQ0MTc0IGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tc2V0LWNvb2tpZS5odG1s
IFsgRmFpbHVyZSBdCisKICMjIyBFTkQgT0YgKDEpIEZhaWx1cmVzIHdpdGggYnVnIHJlcG9ydHMK
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAo=
</data>
<flag name="review"
          id="282027"
          type_id="1"
          status="-"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>