<?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>222145</bug_id>
          
          <creation_ts>2021-02-18 17:07:04 -0800</creation_ts>
          <short_desc>Serialize NSURLRequest (rather than CFURLRequest) in IPC</short_desc>
          <delta_ts>2021-04-08 13:35:21 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=214314</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=224338</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>222242</dependson>
    
    <dependson>222442</dependson>
          <blocked>222441</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>katherine_cheney</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1731103</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-18 17:07:04 -0800</bug_when>
    <thetext>When building on modern Cocoa platforms we should serialize the actual NSURLRequest, rather than bridging to CFURLRequest and serializing that. This allows us to send more state across IPC (since CFURLRequest has been largely unchanged in the past 5+ years and does not reflect all of the features of NSURLRequest).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731104</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-18 17:07:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/74500963&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731108</commentid>
    <comment_count>2</comment_count>
      <attachid>420888</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-18 17:11:35 -0800</bug_when>
    <thetext>Created attachment 420888
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731111</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-18 17:19:15 -0800</bug_when>
    <thetext>I believe this patch could be extended a bit, since Cache Policy seems to be brought over with the NSURLRequest NSData object. We might be able to skip manually serializing responseContentDispositionEncodingFallbackArray as well.

It looks like &apos;requester&apos; is not serialized through NSURLRequest (it&apos;s probably a WebKit concept).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731167</commentid>
    <comment_count>4</comment_count>
      <attachid>420888</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-18 19:12:25 -0800</bug_when>
    <thetext>Comment on attachment 420888
Patch

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

Looks OK but I think we can do better.

&gt; Source/WebKit/ChangeLog:16
&gt; +        * Shared/mac/WebCoreArgumentCodersMac.mm:

Shouldn&apos;t this be in the Cocoa.mm file, not the Mac.mm file? I assume we use it on iOS, not just Mac.

&gt; Source/WebKit/Shared/mac/WebCoreArgumentCodersMac.mm:219
&gt; +    NSError *error = nil;
&gt; +    auto *archivedData = [NSKeyedArchiver archivedDataWithRootObject:requestToSerialize.get() requiringSecureCoding:YES error:&amp;error];
&gt; +    if (error)
&gt; +        LOG_ERROR(&quot;Failed to encode NSURLRequest: %d&quot;, error.code);
&gt; +    IPC::encode(encoder, (__bridge CFDataRef)archivedData);

This should use WebCoreArgumentCodersCocoa.h. I believe it can just be this:

    encode(encoder, requestToSerialize.get());

&gt; Source/WebKit/Shared/mac/WebCoreArgumentCodersMac.mm:223
&gt;      encoder &lt;&lt; resourceRequest.responseContentDispositionEncodingFallbackArray();

Is this still correct with NSURLRequest serialization?

&gt; Source/WebKit/Shared/mac/WebCoreArgumentCodersMac.mm:257
&gt; +    RetainPtr&lt;CFDataRef&gt; data;
&gt; +    if (!IPC::decode(decoder, data) || !data)
&gt; +        return false;
&gt; +
&gt; +    NSError *error = nil;
&gt; +    auto nsURLRequest = retainPtr([NSKeyedUnarchiver unarchivedObjectOfClass:[NSURLRequest class] fromData:(__bridge NSData *)data.get() error:&amp;error]);
&gt; +    if (error) {
&gt; +        LOG_ERROR(&quot;Failed to decode NSURLRequest: %d&quot;, error.code);
&gt; +        return false;
&gt; +    }

This would just be:

    auto request = decode(decoder, NSURLRequest.class);
    if (!request)
        return false;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731174</commentid>
    <comment_count>5</comment_count>
      <attachid>420888</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-18 19:27:28 -0800</bug_when>
    <thetext>Comment on attachment 420888
Patch

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

Thanks for reviewing. I’m going to investigate the api-Mac failure in case it’s related, and see if I can move this implementation to the Cocoa file.

&gt;&gt; Source/WebKit/ChangeLog:16
&gt;&gt; +        * Shared/mac/WebCoreArgumentCodersMac.mm:
&gt; 
&gt; Shouldn&apos;t this be in the Cocoa.mm file, not the Mac.mm file? I assume we use it on iOS, not just Mac.

It should! It caused me a lot of confusion initially, but I didn’t want to move too many things in one patch. Maybe I could do a separate change for that.

&gt;&gt; Source/WebKit/Shared/mac/WebCoreArgumentCodersMac.mm:223
&gt;&gt;      encoder &lt;&lt; resourceRequest.responseContentDispositionEncodingFallbackArray();
&gt; 
&gt; Is this still correct with NSURLRequest serialization?

I don’t think so — I think only “requester” needs to be serialized after this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731345</commentid>
    <comment_count>6</comment_count>
      <attachid>420888</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-19 08:26:59 -0800</bug_when>
    <thetext>Comment on attachment 420888
Patch

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

&gt; Source/WebKit/Shared/mac/WebCoreArgumentCodersMac.mm:53
&gt; +#if USE(CFURLCONNECTION)

I think we should just remove this code.  USE(CFURLCONNECTION) is only true on the AppleWin port, which doesn&apos;t support WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731494</commentid>
    <comment_count>7</comment_count>
      <attachid>420888</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-19 12:08:19 -0800</bug_when>
    <thetext>Comment on attachment 420888
Patch

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

&gt;&gt;&gt; Source/WebKit/ChangeLog:16
&gt;&gt;&gt; +        * Shared/mac/WebCoreArgumentCodersMac.mm:
&gt;&gt; 
&gt;&gt; Shouldn&apos;t this be in the Cocoa.mm file, not the Mac.mm file? I assume we use it on iOS, not just Mac.
&gt; 
&gt; It should! It caused me a lot of confusion initially, but I didn’t want to move too many things in one patch. Maybe I could do a separate change for that.

Actually, I think moving the NSURLRequest version (and leaving the old CFURLRequest version) makes sense.

&gt;&gt; Source/WebKit/Shared/mac/WebCoreArgumentCodersMac.mm:257
&gt;&gt; +    }
&gt; 
&gt; This would just be:
&gt; 
&gt;     auto request = decode(decoder, NSURLRequest.class);
&gt;     if (!request)
&gt;         return false;

Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731498</commentid>
    <comment_count>8</comment_count>
      <attachid>420888</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-19 12:11:08 -0800</bug_when>
    <thetext>Comment on attachment 420888
Patch

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

&gt;&gt;&gt;&gt; Source/WebKit/ChangeLog:16
&gt;&gt;&gt;&gt; +        * Shared/mac/WebCoreArgumentCodersMac.mm:
&gt;&gt;&gt; 
&gt;&gt;&gt; Shouldn&apos;t this be in the Cocoa.mm file, not the Mac.mm file? I assume we use it on iOS, not just Mac.
&gt;&gt; 
&gt;&gt; It should! It caused me a lot of confusion initially, but I didn’t want to move too many things in one patch. Maybe I could do a separate change for that.
&gt; 
&gt; Actually, I think moving the NSURLRequest version (and leaving the old CFURLRequest version) makes sense.

See Alex’s comments that make it clear we can remove the old CFURLRequest version entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731533</commentid>
    <comment_count>9</comment_count>
      <attachid>421017</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-19 12:54:30 -0800</bug_when>
    <thetext>Created attachment 421017
More complete change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731551</commentid>
    <comment_count>10</comment_count>
      <attachid>421020</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-19 13:12:43 -0800</bug_when>
    <thetext>Created attachment 421020
Rebaselined</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731562</commentid>
    <comment_count>11</comment_count>
      <attachid>421026</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-19 13:21:18 -0800</bug_when>
    <thetext>Created attachment 421026
Another try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731568</commentid>
    <comment_count>12</comment_count>
      <attachid>421027</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-19 13:30:44 -0800</bug_when>
    <thetext>Created attachment 421027
Yet another try</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731575</commentid>
    <comment_count>13</comment_count>
      <attachid>421027</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-19 13:54:52 -0800</bug_when>
    <thetext>Comment on attachment 421027
Yet another try

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

&gt; Tools/ChangeLog:10
&gt; +        and to test the updated IPC serialization for NSURLRequest.:q

:q

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/LoadInvalidURLRequest.mm:96
&gt; +        EXPECT_WK_STREQ([error.userInfo[@&quot;NSErrorFailingURLKey&quot;] absoluteString], &quot;http://%E2%80%80&quot;);

Note: this test verifies that nothing crashes during this.  The expectation changed surprisingly in https://bugs.webkit.org/show_bug.cgi?id=214314 and this is changing it back, which is probably a good thing.  Important are the facts that this doesn&apos;t crash and the URLExtras_ParsingError API test doesn&apos;t change expectations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731581</commentid>
    <comment_count>14</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-19 14:05:03 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #13)
&gt; Comment on attachment 421027 [details]
&gt; Yet another try
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=421027&amp;action=review
&gt; 
&gt; &gt; Tools/ChangeLog:10
&gt; &gt; +        and to test the updated IPC serialization for NSURLRequest.:q
&gt; 
&gt; :q
vi!!!!
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/LoadInvalidURLRequest.mm:96
&gt; &gt; +        EXPECT_WK_STREQ([error.userInfo[@&quot;NSErrorFailingURLKey&quot;] absoluteString], &quot;http://%E2%80%80&quot;);
&gt; 
&gt; Note: this test verifies that nothing crashes during this.  The expectation
&gt; changed surprisingly in https://bugs.webkit.org/show_bug.cgi?id=214314 and
&gt; this is changing it back, which is probably a good thing.  Important are the
&gt; facts that this doesn&apos;t crash and the URLExtras_ParsingError API test
&gt; doesn&apos;t change expectations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731620</commentid>
    <comment_count>15</comment_count>
      <attachid>421042</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-19 15:11:44 -0800</bug_when>
    <thetext>Created attachment 421042
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731692</commentid>
    <comment_count>16</comment_count>
      <attachid>421042</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-19 17:20:49 -0800</bug_when>
    <thetext>Comment on attachment 421042
Patch

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

I&apos;m assuming you&apos;ve verified that NSURLRequest does encode responseContentDispositionEncodingFallbackArray, cachePolicy, protocolProperties, expectedContentLength, version, archiveList, and mimeType where CFURLRequest does not.

&gt; Tools/ChangeLog:10
&gt; +        and to test the updated IPC serialization for NSURLRequest.:q

:q</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731696</commentid>
    <comment_count>17</comment_count>
      <attachid>421042</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-19 17:37:37 -0800</bug_when>
    <thetext>Comment on attachment 421042
Patch

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

&gt;&gt; Tools/ChangeLog:10
&gt;&gt; +        and to test the updated IPC serialization for NSURLRequest.:q
&gt; 
&gt; :q

!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731699</commentid>
    <comment_count>18</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-19 17:41:04 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #16)
&gt; Comment on attachment 421042 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=421042&amp;action=review
&gt; 
&gt; I&apos;m assuming you&apos;ve verified that NSURLRequest does encode
&gt; responseContentDispositionEncodingFallbackArray, cachePolicy,
&gt; protocolProperties, expectedContentLength, version, archiveList, and
&gt; mimeType where CFURLRequest does not.

It looks like we definitely do pick up the responseContentDispositionEncodingFallbackArray, cachePolicy, protocolProperties, and version, but I can&apos;t find evidence that expectedContentLength and mimeType are picked up. (archiveList is just a detail of our serialization work).

I&apos;ll side-serialize expectedContentLength and mimeType.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731702</commentid>
    <comment_count>19</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-19 17:44:13 -0800</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #18)
&gt; (In reply to Alex Christensen from comment #16)
&gt; &gt; Comment on attachment 421042 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=421042&amp;action=review
&gt; &gt; 
&gt; &gt; I&apos;m assuming you&apos;ve verified that NSURLRequest does encode
&gt; &gt; responseContentDispositionEncodingFallbackArray, cachePolicy,
&gt; &gt; protocolProperties, expectedContentLength, version, archiveList, and
&gt; &gt; mimeType where CFURLRequest does not.
&gt; 
&gt; It looks like we definitely do pick up the
&gt; responseContentDispositionEncodingFallbackArray, cachePolicy,
&gt; protocolProperties, and version, but I can&apos;t find evidence that
&gt; expectedContentLength and mimeType are picked up. (archiveList is just a
&gt; detail of our serialization work).
&gt; 
&gt; I&apos;ll side-serialize expectedContentLength and mimeType.

Wait -- no. Those are for NSURLResponse, and were only in that method because it was shared for NSURLResponse serialization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731708</commentid>
    <comment_count>20</comment_count>
      <attachid>421042</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-19 18:17:30 -0800</bug_when>
    <thetext>Comment on attachment 421042
Patch

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

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:549
&gt; +    RetainPtr&lt;NSURLRequest&gt; requestToSerialize = resourceRequest.nsURLRequest(WebCore::HTTPBodyUpdatePolicy::DoNotUpdateHTTPBody);

I suggest this style:

    auto requestToSerialize = retainPtr(xxx);

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:562
&gt; +        requestToSerialize = adoptNS([requestToSerialize mutableCopy]);
&gt; +        [(NSMutableURLRequest *)requestToSerialize setHTTPBody:nil];
&gt; +        [(NSMutableURLRequest *)requestToSerialize setHTTPBodyStream:nil];

I’d write:

    auto mutableRequest = adoptNS([requestToSerialize mutableCopy]);
    [mutableRequest setHTTPBody:nil];
    [mutableRequest setHTTPBodyStream:nil];
    requestToSerialize = WTFMove(mutableRequest);

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:586
&gt; +    resourceRequest = WebCore::ResourceRequest(request-&gt;get());

I would move this down after the last return false.

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:591
&gt; +    resourceRequest.setRequester(requester);

I would move this down after the last return false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731740</commentid>
    <comment_count>21</comment_count>
      <attachid>421042</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-19 19:55:29 -0800</bug_when>
    <thetext>Comment on attachment 421042
Patch

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

&gt;&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:549
&gt;&gt; +    RetainPtr&lt;NSURLRequest&gt; requestToSerialize = resourceRequest.nsURLRequest(WebCore::HTTPBodyUpdatePolicy::DoNotUpdateHTTPBody);
&gt; 
&gt; I suggest this style:
&gt; 
&gt;     auto requestToSerialize = retainPtr(xxx);

Will do. I also see some ITP-related errors, so I&apos;m going to do a bit more validation of the serialization to make sure we weren&apos;t relying on some idiosyncrasy of the CFURLRequest before landing. I&apos;ll be sure to adopt these suggestions, too.

&gt;&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:562
&gt;&gt; +        [(NSMutableURLRequest *)requestToSerialize setHTTPBodyStream:nil];
&gt; 
&gt; I’d write:
&gt; 
&gt;     auto mutableRequest = adoptNS([requestToSerialize mutableCopy]);
&gt;     [mutableRequest setHTTPBody:nil];
&gt;     [mutableRequest setHTTPBodyStream:nil];
&gt;     requestToSerialize = WTFMove(mutableRequest);

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731751</commentid>
    <comment_count>22</comment_count>
      <attachid>421077</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-19 21:03:49 -0800</bug_when>
    <thetext>Created attachment 421077
WIP: Trying to locate test failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731753</commentid>
    <comment_count>23</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-19 21:06:42 -0800</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #22)
&gt; Created attachment 421077 [details]
&gt; WIP: Trying to locate test failure.

I added some assertions to try to understand why the ITP tests would fail with this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731754</commentid>
    <comment_count>24</comment_count>
      <attachid>421079</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-19 21:21:12 -0800</bug_when>
    <thetext>Created attachment 421079
WIP: Trying to locate test failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731850</commentid>
    <comment_count>25</comment_count>
      <attachid>421108</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-20 13:46:55 -0800</bug_when>
    <thetext>Created attachment 421108
Logging to identify serialization error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731882</commentid>
    <comment_count>26</comment_count>
      <attachid>421119</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-20 16:14:26 -0800</bug_when>
    <thetext>Created attachment 421119
Additional logging</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731897</commentid>
    <comment_count>27</comment_count>
      <attachid>421122</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-20 17:49:39 -0800</bug_when>
    <thetext>Created attachment 421122
Now switch serializer and log</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732643</commentid>
    <comment_count>28</comment_count>
      <attachid>421338</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-23 12:06:02 -0800</bug_when>
    <thetext>Created attachment 421338
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732654</commentid>
    <comment_count>29</comment_count>
      <attachid>421338</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-23 12:37:11 -0800</bug_when>
    <thetext>Comment on attachment 421338
Patch

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

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:115
&gt; +        _URL = [[NSURL _URLWithData:[NSData dataWithBytesNoCopy:bytes length:length freeWhenDone:NO] relativeToURL:nil] retain];

WebCore uses CFURLCreateAbsoluteURLWithBytes. Why is it important to use something different here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732655</commentid>
    <comment_count>30</comment_count>
      <attachid>421338</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-02-23 12:44:22 -0800</bug_when>
    <thetext>Comment on attachment 421338
Patch

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

r- to fix leaks.  Nits are optional.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:58
&gt; +@interface NSURL (NSURLExtrasInternal)
&gt; ++ (NSURL *)_URLWithData:(NSData *)data relativeToURL:(NSURL *)baseURL;
&gt;  @end

Nit: Should this be declared in an SPI.h header instead of here?

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:63
&gt; +@interface WKEncodedURL : NSObject &lt;NSSecureCoding&gt;
&gt; +- (instancetype)initWithURL:(NSURL *)url;
&gt; +@property (nonatomic, readonly) NSURL *URL;
&gt; +@end

Nit:  Why use `url` for one variable but `URL` in the other?

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:70
&gt;      if ([object isKindOfClass:[NSFont class]]) {

Nit: Could use dynamic_objc_cast&lt;NSFont&gt;() here.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:78
&gt; +    if ([object isKindOfClass:[NSURL class]])

Nit: Could use dynamic_objc_cast&lt;NSURL&gt;() here.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:82
&gt; +        return [[WKEncodedURL alloc] initWithURL:object];
&gt; +
&gt; +    return object;
&gt; +}

Does this method return a +1 retained object or an (autoreleased/non-retained) object?

If it&apos;s meant to return a +1 retained object (probably not based on the method signature—check if the protocol has NS_RETURNS_RETAINED on the definition), then you&apos;re under-retaining `object` when returning it here.

If it&apos;s meant to return an autoreleased/non-retained object, then you&apos;re leaking the WKEncodedURLhere, which should have -autorelease called on it instead to fix the bug.

You probably need to call -autorelease on the WKEncodedURL object (or do the equivalent RetainPtr&lt;&gt; thing if you store the object in a RetainPtr&lt;&gt; via adoptNS()).

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:86
&gt; +    if ([object isKindOfClass:[WKEncodedURL class]])

Nit: Could use dynamic_objc_cast&lt;WKEncodedURL&gt;() here.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:113
&gt; +        auto bytes = (uint8_t *)[coder decodeBytesWithReturnedLength:&amp;length];
&gt; +        if (!bytes)
&gt; +            return nil;

You ned to release `self` here in the early return, otherwise it will leak.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:117
&gt; +        _URL = [[NSURL _URLWithData:[NSData dataWithBytesNoCopy:bytes length:length freeWhenDone:NO] relativeToURL:nil] retain];
&gt; +        if (!_URL)
&gt; +            return nil;

Ditto.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:130
&gt; +@end

You are missing a -dealloc method here to release the `_URL` instance variable, so `_URL` will leak when the WKEncodedURL is released.  (If you do this, don&apos;t forget the call to `[super dealloc]` at the end of the method.)

Could also solve this by using a RetainPtr&lt;WKEncodedURL&gt; for the instance variable, along with other syntax changes needed for that, then -dealloc is not needed.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewLoadAPIs.mm:157
&gt; +    [[NSFileManager defaultManager] removeItemAtURL:testFile error:nil];
&gt; +    [[NSFileManager defaultManager] removeItemAtURL:testDirectory error:nil];

Nit: Could pull out `[NSFileManager defaultManager]` into a local variable to save 5 extra Objective-C method calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732920</commentid>
    <comment_count>31</comment_count>
      <attachid>421417</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-24 09:50:58 -0800</bug_when>
    <thetext>Created attachment 421417
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732951</commentid>
    <comment_count>32</comment_count>
      <attachid>421417</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-02-24 10:31:27 -0800</bug_when>
    <thetext>Comment on attachment 421417
Patch

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

r=me (no changes required).  Leaving r? since I assume you want another review.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:64
&gt; -- (id)archiver:(NSKeyedArchiver *)archiver willEncodeObject:(id)object
&gt; +- (id _Nullable)archiver:(NSKeyedArchiver *_Nonnull)archiver willEncodeObject:(id _Nonnull)object

Nit: Does this method signature still match the NSKeyedArchiverDelegate protocol method?  No, it doesn&apos;t match exactly (via &lt;Foundation/NSKeyedArchiver.h&gt;):

- (nullable id)archiver:(NSKeyedArchiver *)archiver willEncodeObject:(id)object;

However, it&apos;s probably okay if the method signature doesn&apos;t match exactly since nullability hints are for the compiler, and the ObjC runtime doesn&apos;t care as long as the rest of the signature matches.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:80
&gt; +- (id _Nullable)unarchiver:(NSKeyedUnarchiver * _Nonnull)unarchiver didDecodeObject:(id _Nullable) NS_RELEASES_ARGUMENT object NS_RETURNS_RETAINED

Good catch matching the NSKeyedUnarchiverDelegate protocol definition!

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:84
&gt; +        [encodedURL release];

Nit: The clang static analyzer may be able to reason about this method better if you used this instead:

        [object release];

In practice, it doesn&apos;t matter whether you use `object` or `encodedURL`, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732953</commentid>
    <comment_count>33</comment_count>
      <attachid>421417</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-02-24 10:35:48 -0800</bug_when>
    <thetext>Comment on attachment 421417
Patch

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

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:75
&gt; +        return [[[WKEncodedURL alloc] initWithURL:url] autorelease];

I think Chris Dumez would suggest you do adoptNS([[[WKEncodedURL alloc] initWithURL:url]).autorelease() instead. Otherwise, this is tiny step backwards in smart pointer adoption.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:86
&gt; +    if (auto *encodedURL = dynamic_objc_cast&lt;WKEncodedURL&gt;(object)) {
&gt; +        auto url = retainPtr(encodedURL.url);
&gt; +        [encodedURL release];
&gt; +        return url.leakRef();
&gt; +    }

Manual -release is a tiny step backwards in smart pointer adoption.

I&apos;d suggest:

auto objectPtr = adoptNS(object);
if (auto *encodedURL = dynamic_objc_cast&lt;WKEncodedURL&gt;(objectPtr.get()))
    return retainPtr(encodedURL.url).leakRef();

return objectPtr.leakRef();

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:116
&gt; +    if (self = [super init]) {

Let&apos;s put self in a RetainPtr to remove manual release.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732970</commentid>
    <comment_count>34</comment_count>
      <attachid>421417</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-24 11:05:16 -0800</bug_when>
    <thetext>Comment on attachment 421417
Patch

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

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:64
&gt;&gt; +- (id _Nullable)archiver:(NSKeyedArchiver *_Nonnull)archiver willEncodeObject:(id _Nonnull)object
&gt; 
&gt; Nit: Does this method signature still match the NSKeyedArchiverDelegate protocol method?  No, it doesn&apos;t match exactly (via &lt;Foundation/NSKeyedArchiver.h&gt;):
&gt; 
&gt; - (nullable id)archiver:(NSKeyedArchiver *)archiver willEncodeObject:(id)object;
&gt; 
&gt; However, it&apos;s probably okay if the method signature doesn&apos;t match exactly since nullability hints are for the compiler, and the ObjC runtime doesn&apos;t care as long as the rest of the signature matches.

The compiler complained about nullability declarations until I got it to this point. I&apos;m not sure why it&apos;s happy with the NSKeyedArchiver.h version and not this one.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:75
&gt;&gt; +        return [[[WKEncodedURL alloc] initWithURL:url] autorelease];
&gt; 
&gt; I think Chris Dumez would suggest you do adoptNS([[[WKEncodedURL alloc] initWithURL:url]).autorelease() instead. Otherwise, this is tiny step backwards in smart pointer adoption.

Oh! Will fix.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:80
&gt;&gt; +- (id _Nullable)unarchiver:(NSKeyedUnarchiver * _Nonnull)unarchiver didDecodeObject:(id _Nullable) NS_RELEASES_ARGUMENT object NS_RETURNS_RETAINED
&gt; 
&gt; Good catch matching the NSKeyedUnarchiverDelegate protocol definition!

I&apos;m learning!

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:84
&gt;&gt; +        [encodedURL release];
&gt; 
&gt; Nit: The clang static analyzer may be able to reason about this method better if you used this instead:
&gt; 
&gt;         [object release];
&gt; 
&gt; In practice, it doesn&apos;t matter whether you use `object` or `encodedURL`, though.

I&apos;ll use &apos;object&apos; to help the analyzer.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:86
&gt;&gt; +    }
&gt; 
&gt; Manual -release is a tiny step backwards in smart pointer adoption.
&gt; 
&gt; I&apos;d suggest:
&gt; 
&gt; auto objectPtr = adoptNS(object);
&gt; if (auto *encodedURL = dynamic_objc_cast&lt;WKEncodedURL&gt;(objectPtr.get()))
&gt;     return retainPtr(encodedURL.url).leakRef();
&gt; 
&gt; return objectPtr.leakRef();

Will do.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:116
&gt;&gt; +    if (self = [super init]) {
&gt; 
&gt; Let&apos;s put self in a RetainPtr to remove manual release.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732983</commentid>
    <comment_count>35</comment_count>
      <attachid>421430</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-24 11:16:20 -0800</bug_when>
    <thetext>Created attachment 421430
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732986</commentid>
    <comment_count>36</comment_count>
      <attachid>421417</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-24 11:23:13 -0800</bug_when>
    <thetext>Comment on attachment 421417
Patch

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

&gt;&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:64
&gt;&gt;&gt; +- (id _Nullable)archiver:(NSKeyedArchiver *_Nonnull)archiver willEncodeObject:(id _Nonnull)object
&gt;&gt; 
&gt;&gt; Nit: Does this method signature still match the NSKeyedArchiverDelegate protocol method?  No, it doesn&apos;t match exactly (via &lt;Foundation/NSKeyedArchiver.h&gt;):
&gt;&gt; 
&gt;&gt; - (nullable id)archiver:(NSKeyedArchiver *)archiver willEncodeObject:(id)object;
&gt;&gt; 
&gt;&gt; However, it&apos;s probably okay if the method signature doesn&apos;t match exactly since nullability hints are for the compiler, and the ObjC runtime doesn&apos;t care as long as the rest of the signature matches.
&gt; 
&gt; The compiler complained about nullability declarations until I got it to this point. I&apos;m not sure why it&apos;s happy with the NSKeyedArchiver.h version and not this one.

The one in NSKeyedArchiver.h is written differently because it&apos;s inside a NS_ASSUME_NONNULL_BEGIN/NS_ASSUME_NONNULL_END pair, but it means the same as what’s written above.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:111
&gt; +    WTF::URLCharBuffer urlBytes;
&gt; +    WTF::getURLBytes((__bridge CFURLRef)m_url.get(), urlBytes);
&gt; +    [coder encodeBytes:urlBytes.data() length:urlBytes.size()];

This doesn’t handle the case where m_url is null; seems strange to go out of our way always to say it’s nullable but then not handle the null value.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:124
&gt; +        m_url = retainPtr(WTF::URLWithData([NSData dataWithBytesNoCopy:bytes length:length freeWhenDone:NO], nil));

Should not need to write retainPtr here. Assigning into a RetainPtr should work without that.

I think we should avoid creating and autoreleasing an NSData object here by making a function like URLWithData that takes a pointer and a length; it would be very easy to refactor that function to work without an object. Could do that as a follow-up refactor to improve efficiency; doesn’t seem necessary to do it in the first cut.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733077</commentid>
    <comment_count>37</comment_count>
      <attachid>421456</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-24 14:21:51 -0800</bug_when>
    <thetext>Created attachment 421456
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733083</commentid>
    <comment_count>38</comment_count>
      <attachid>421417</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-24 14:36:34 -0800</bug_when>
    <thetext>Comment on attachment 421417
Patch

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

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:111
&gt;&gt; +    [coder encodeBytes:urlBytes.data() length:urlBytes.size()];
&gt; 
&gt; This doesn’t handle the case where m_url is null; seems strange to go out of our way always to say it’s nullable but then not handle the null value.

Ah! Okay -- I will address that. I uploaded another patch before I saw these comments, so I will upload another patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733106</commentid>
    <comment_count>39</comment_count>
      <attachid>421417</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-24 15:15:44 -0800</bug_when>
    <thetext>Comment on attachment 421417
Patch

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

&gt;&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:111
&gt;&gt;&gt; +    [coder encodeBytes:urlBytes.data() length:urlBytes.size()];
&gt;&gt; 
&gt;&gt; This doesn’t handle the case where m_url is null; seems strange to go out of our way always to say it’s nullable but then not handle the null value.
&gt; 
&gt; Ah! Okay -- I will address that. I uploaded another patch before I saw these comments, so I will upload another patch soon.

Actually, after playing with this a bit I think we should mark the URL as _Nonnull. The serialization doesn&apos;t expect to encounter null URLs (we always serialize an empty string URL), and the result of this serialization is passed to CFURL functions that do not expect a null URL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733109</commentid>
    <comment_count>40</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-24 15:20:41 -0800</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #39)
&gt; Actually, after playing with this a bit I think we should mark the URL as
&gt; _Nonnull. The serialization doesn&apos;t expect to encounter null URLs (we always
&gt; serialize an empty string URL), and the result of this serialization is
&gt; passed to CFURL functions that do not expect a null URL.

Excellent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733115</commentid>
    <comment_count>41</comment_count>
      <attachid>421470</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-24 15:23:30 -0800</bug_when>
    <thetext>Created attachment 421470
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733131</commentid>
    <comment_count>42</comment_count>
      <attachid>421470</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-24 16:04:10 -0800</bug_when>
    <thetext>Comment on attachment 421470
Patch

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

Looks good. I still have style comments (all optional, but most are good ideas), and one comment that *might* be a correctness issue, the return value of initWithCoder: when decoding fails.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:58
&gt; +- (instancetype _Nullable)initWithURL:(NSURL *_Nonnull)url;

On reflection after reading multiple iterations of this patch, it seems to me we want to wrap the contents of this file into NS_ASSUME_NONNULL_BEGIN/END. We then would only have to annotate nullable things rather than also having to annotate all the non-null things.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:59
&gt; +@property (nonatomic, readonly) NSURL *_Nonnull url;

Could avoid the lowercase url by naming this wrappedURL (or targetURL, or underlyingURL).

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:67
&gt; +    if (auto *font = dynamic_objc_cast&lt;NSFont&gt;(object)) {

I slightly prefer:

    if (auto font = xxx

Maybe we could debate the merits?

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:74
&gt; +    if (auto *url = dynamic_objc_cast&lt;NSURL&gt;(object))

Ditto.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:82
&gt; +    auto objectPtr = adoptNS(object);

Not sure objectPtr is a great name. After all &quot;object&quot; is already a pointer. Maybe adoptedObject?

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:83
&gt; +    if (auto *encodedURL = dynamic_objc_cast&lt;WKEncodedURL&gt;(objectPtr.get()))

Same comment about auto.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:91
&gt; +@implementation WKEncodedURL {

I don’t think &quot;encoded URL&quot; is a great name for this. The URL in this object is not &quot;encoded&quot;. This is a proxy that facilitates encoding and decoding the URL. It does in fact function as the &quot;decoded URL&quot; in the decoding process, but during the encoding process it is not at all the &quot;encoded&quot; URL.

I would name this class something like &quot;WKURLArchivalWrapper&quot; or &quot;WKSecureCodingURLWrapper&quot;.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:92
&gt; +    RetainPtr&lt;NSURL&gt; m_url;

Could avoid the lowercase url by naming this m_wrappedURL (or m_targetURL or m_underlyingURL).

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:125
&gt; +            m_url = retainPtr([NSURL URLWithString:@&quot;&quot;]);

Should not need to call retainPtr here.

But also shouldn’t we return nil here, letting self get released, instead of setting the URL to &quot;&quot;? We want to correctly indicate failure rather than emptying out the URL and incorrectly indicating success.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:196
&gt; +static inline bool isSerializableFont(CTFontRef _Nullable font)

What determines where we use &quot;nullable&quot; and where we use &quot;_Nullable&quot;?

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:441
&gt; +    auto allowedClassSet = [NSMutableSet setWithArray:allowedClasses];

Could remove one autorelease by doing this instead:

    auto allowedClassSet = adoptNS([[NSMutableSet alloc] initWithArray:allowedClasses]);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733160</commentid>
    <comment_count>43</comment_count>
      <attachid>421470</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-24 17:22:34 -0800</bug_when>
    <thetext>Comment on attachment 421470
Patch

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

Thanks for the review!

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:58
&gt;&gt; +- (instancetype _Nullable)initWithURL:(NSURL *_Nonnull)url;
&gt; 
&gt; On reflection after reading multiple iterations of this patch, it seems to me we want to wrap the contents of this file into NS_ASSUME_NONNULL_BEGIN/END. We then would only have to annotate nullable things rather than also having to annotate all the non-null things.

It definitely makes the patch smaller -- I&apos;ll do so.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:67
&gt;&gt; +    if (auto *font = dynamic_objc_cast&lt;NSFont&gt;(object)) {
&gt; 
&gt; I slightly prefer:
&gt; 
&gt;     if (auto font = xxx
&gt; 
&gt; Maybe we could debate the merits?

No objections!

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:82
&gt;&gt; +    auto objectPtr = adoptNS(object);
&gt; 
&gt; Not sure objectPtr is a great name. After all &quot;object&quot; is already a pointer. Maybe adoptedObject?

Will do.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:83
&gt;&gt; +    if (auto *encodedURL = dynamic_objc_cast&lt;WKEncodedURL&gt;(objectPtr.get()))
&gt; 
&gt; Same comment about auto.

Done.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:91
&gt;&gt; +@implementation WKEncodedURL {
&gt; 
&gt; I don’t think &quot;encoded URL&quot; is a great name for this. The URL in this object is not &quot;encoded&quot;. This is a proxy that facilitates encoding and decoding the URL. It does in fact function as the &quot;decoded URL&quot; in the decoding process, but during the encoding process it is not at all the &quot;encoded&quot; URL.
&gt; 
&gt; I would name this class something like &quot;WKURLArchivalWrapper&quot; or &quot;WKSecureCodingURLWrapper&quot;.

I&apos;ll use WKSecureCodingURLWrapper.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:92
&gt;&gt; +    RetainPtr&lt;NSURL&gt; m_url;
&gt; 
&gt; Could avoid the lowercase url by naming this m_wrappedURL (or m_targetURL or m_underlyingURL).

Done. m_wrappedURL.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:125
&gt;&gt; +            m_url = retainPtr([NSURL URLWithString:@&quot;&quot;]);
&gt; 
&gt; Should not need to call retainPtr here.
&gt; 
&gt; But also shouldn’t we return nil here, letting self get released, instead of setting the URL to &quot;&quot;? We want to correctly indicate failure rather than emptying out the URL and incorrectly indicating success.

Good point. I&apos;ll do that.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:134
&gt; +        m_url = retainPtr(url);

Based on your other comments it occurs to me that I shouldn&apos;t do a retainPtr() here.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:196
&gt;&gt; +static inline bool isSerializableFont(CTFontRef _Nullable font)
&gt; 
&gt; What determines where we use &quot;nullable&quot; and where we use &quot;_Nullable&quot;?

I based it on what the compiler accepted. It seems like &quot;nullable&quot; is allowed in property declarations, but function signatures need _Nullable. But I might be mistaken.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:441
&gt;&gt; +    auto allowedClassSet = [NSMutableSet setWithArray:allowedClasses];
&gt; 
&gt; Could remove one autorelease by doing this instead:
&gt; 
&gt;     auto allowedClassSet = adoptNS([[NSMutableSet alloc] initWithArray:allowedClasses]);

Oh! Good catch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733163</commentid>
    <comment_count>44</comment_count>
      <attachid>421486</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-24 17:26:34 -0800</bug_when>
    <thetext>Created attachment 421486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733164</commentid>
    <comment_count>45</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-24 17:28:05 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #42)
&gt; Comment on attachment 421470 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=421470&amp;action=review
&gt; 
&gt; Looks good. I still have style comments (all optional, but most are good
&gt; ideas), and one comment that *might* be a correctness issue, the return
&gt; value of initWithCoder: when decoding fails.

Just to complicate things, I took another look at how CFURL had been serialized, and tried to more closely follow that model (and how it&apos;s done in Foundation). I now think that this accurately models how URL&apos;s are serialized both in WebKit, and in Foundation, and should now be correct.

Let&apos;s see whether the bots find anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733173</commentid>
    <comment_count>46</comment_count>
      <attachid>421486</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-24 17:54:09 -0800</bug_when>
    <thetext>Comment on attachment 421486
Patch

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

&gt; Source/WTF/wtf/cocoa/NSURLExtras.mm:169
&gt; +            // So only return early if the character after the slash is somethihg else.

Typo in the word &quot;something&quot; here.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:60
&gt; +- (instancetype _Nullable)initWithURL:(NSURL *)url;

Could use the wrappedURL name here too, to make it look nicer.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:76
&gt; +    if (auto url = dynamic_objc_cast&lt;NSURL&gt;(object))

Could use the wrappedURL name here too, to make it look nicer.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:107
&gt; +NSString * const baseURLExistsKey = @&quot;WK.baseURLExists&quot;;

This is not used in the code below. If this was marked static, you would have gotten a compiler warning about it being unused.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:108
&gt; +NSString * const baseURLKey = @&quot;WK.baseURL&quot;;

Since this is limited to the file it should have static. Could use constexpr for this. The syntax is nicer:

    static constexpr NSString *baseURLKey = @&quot;WK.baseURL&quot;;

Might also not even need &quot;static&quot; with constexpr, but I think it’s correct to do both.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:128
&gt; +    auto selfPtr = adoptNS([super init]);
&gt; +    if (selfPtr) {

Can just write this instead of nesting the entire function:

    auto selfPtr = adoptNS([super init]);
    if (!selfPtr)
        return nil;

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:134
&gt; +            baseURL = (NSURL *)[coder decodeObjectOfClass:NSURL.class forKey:baseURLKey];

Does this end up recursively using this method?

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:472
&gt;          [unarchiver finishDecoding];
&gt; +        unarchiver.get().delegate = nil;

Does this code *actually* run before the function returns even though we have return inside the @try and @catch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733358</commentid>
    <comment_count>47</comment_count>
      <attachid>421486</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-25 09:32:59 -0800</bug_when>
    <thetext>Comment on attachment 421486
Patch

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

&gt;&gt; Source/WTF/wtf/cocoa/NSURLExtras.mm:169
&gt;&gt; +            // So only return early if the character after the slash is somethihg else.
&gt; 
&gt; Typo in the word &quot;something&quot; here.

Doh!

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:60
&gt;&gt; +- (instancetype _Nullable)initWithURL:(NSURL *)url;
&gt; 
&gt; Could use the wrappedURL name here too, to make it look nicer.

Will do.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:76
&gt;&gt; +    if (auto url = dynamic_objc_cast&lt;NSURL&gt;(object))
&gt; 
&gt; Could use the wrappedURL name here too, to make it look nicer.

Good idea. And I should use &quot;wrapper&quot; instead of &quot;encodedURL&quot; below.

&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:86
&gt; +        return retainPtr(encodedURL.wrappedURL).leakRef();

... so this becomes &quot;wrapper.wrappedURL&quot;, which is more precise.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:107
&gt;&gt; +NSString * const baseURLExistsKey = @&quot;WK.baseURLExists&quot;;
&gt; 
&gt; This is not used in the code below. If this was marked static, you would have gotten a compiler warning about it being unused.

Oh! yes, I thought I would need to use this but didn&apos;t. I&apos;ll remove it.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:108
&gt;&gt; +NSString * const baseURLKey = @&quot;WK.baseURL&quot;;
&gt; 
&gt; Since this is limited to the file it should have static. Could use constexpr for this. The syntax is nicer:
&gt; 
&gt;     static constexpr NSString *baseURLKey = @&quot;WK.baseURL&quot;;
&gt; 
&gt; Might also not even need &quot;static&quot; with constexpr, but I think it’s correct to do both.

Will do.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:128
&gt;&gt; +    if (selfPtr) {
&gt; 
&gt; Can just write this instead of nesting the entire function:
&gt; 
&gt;     auto selfPtr = adoptNS([super init]);
&gt;     if (!selfPtr)
&gt;         return nil;

Will do.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:134
&gt;&gt; +            baseURL = (NSURL *)[coder decodeObjectOfClass:NSURL.class forKey:baseURLKey];
&gt; 
&gt; Does this end up recursively using this method?

This is the algorithm used by Foundation to serialize these objects, so I believe it is correct. I will add another TestWebKitAPI test that confirms we terminate.

&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:472
&gt;&gt; +        unarchiver.get().delegate = nil;
&gt; 
&gt; Does this code *actually* run before the function returns even though we have return inside the @try and @catch?

Yes -- I confirmed this in the debugger before putting it here. I originally set the delegate to nil in the @try and @catch blocks, but found that serialization failed because &apos;finishDecoding&apos; was unsuccessful without the delegate (which had been cleared before reaching @finally).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733394</commentid>
    <comment_count>48</comment_count>
      <attachid>421486</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-25 10:33:19 -0800</bug_when>
    <thetext>Comment on attachment 421486
Patch

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

&gt;&gt;&gt; Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.mm:134
&gt;&gt;&gt; +            baseURL = (NSURL *)[coder decodeObjectOfClass:NSURL.class forKey:baseURLKey];
&gt;&gt; 
&gt;&gt; Does this end up recursively using this method?
&gt; 
&gt; This is the algorithm used by Foundation to serialize these objects, so I believe it is correct. I will add another TestWebKitAPI test that confirms we terminate.

Sure, and looks good, but want to make sure that it does correctly end up using this function. I don’t think it will infinitely recurse because eventually we will have a URL without a base.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733449</commentid>
    <comment_count>49</comment_count>
      <attachid>421553</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-25 12:11:27 -0800</bug_when>
    <thetext>Created attachment 421553
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733466</commentid>
    <comment_count>50</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-25 12:40:50 -0800</bug_when>
    <thetext>Committed r273503: &lt;https://commits.webkit.org/r273503&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 421553.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733568</commentid>
    <comment_count>51</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2021-02-25 15:50:39 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 222442</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733624</commentid>
    <comment_count>52</comment_count>
      <attachid>421592</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-25 18:23:13 -0800</bug_when>
    <thetext>Created attachment 421592
Patch to address Blob test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733625</commentid>
    <comment_count>53</comment_count>
      <attachid>421592</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-02-25 18:24:38 -0800</bug_when>
    <thetext>Comment on attachment 421592
Patch to address Blob test

Sadly, WTF::URLFromBytes() doesn&apos;t handle URL fragments (e.g., &quot;/action&quot; from a Form) properly, so I&apos;m switching to the behavior of ArgumentCodersCF (which I should have done from the beginning).

If EWS is green across all tests, I&apos;ll land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733658</commentid>
    <comment_count>54</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-25 21:06:51 -0800</bug_when>
    <thetext>Committed r273541: &lt;https://commits.webkit.org/r273541&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 421592.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420888</attachid>
            <date>2021-02-18 17:11:35 -0800</date>
            <delta_ts>2021-02-19 15:11:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222145-20210218171134.patch</filename>
            <type>text/plain</type>
            <size>4269</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGFkMGIzMWZiYTNhY2EyZDJl
YjEwZWRkMDA5YzBmMTA1NzYxYmQ1ZmQuLmM0OGNkYTFkNzBkNTZhY2M4NDE1NDQwMjI2Mjg4ZTBl
MTEzYmM3NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjEtMDItMTggIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVx
dWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5nIGxheW91dCBhbmQgV2ViS2l0QVBJIHRlc3RzLgor
CisgICAgICAgIFJldmlzZSBJUEMgc2VyaWFsaXphdGlvbiBzbyB0aGF0IE5TVVJMQ29ubmVjdGlv
biAobW9kZXJuKSBDb2NvYSBidWlsZHMgc2VyaWFsaXplIHRoZQorICAgICAgICBOU1VSTFJlcXVl
c3Qgb2JqZWN0LCByYXRoZXIgdGhhbiBicmlkZ2luZyB0byBDRlVSTFJlcXVlc3QgYW5kIHNlcmlh
bGl6aW5nIHRoYXQuIFRoaXMKKyAgICAgICAgZW5zdXJlcyB0aGF0IHRoZSBmdWxsIHNldCBvZiBO
U1VSTFJlcXVlc3QgZmVhdHVyZXMgYXJlIGFjY3VyYXRlbHkgcmVjb25zdGl0dXRlZCBvbiB0aGUK
KyAgICAgICAgcmVjZWl2aW5nIHNpZGUgb2YgdGhlIGNvbm5lY3Rpb24uCisKKyAgICAgICAgKiBT
aGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbToKKyAgICAgICAgKElQQzo6QXJn
dW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEp
OgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46
OmRlY29kZVBsYXRmb3JtRGF0YSk6CisKIDIwMjEtMDItMTcgIEFkaXR5YSBLZWVydGhpICA8YWtl
ZXJ0aGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdW0ZDUl0gQWRkIG5ldyBkYXRhbGlzdCBk
cm9wZG93biBmb3IgdGV4dCBpbnB1dHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9t
YWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCmluZGV4IGY1MmVhYmYxZDI1YWY4NjMyZDY2
N2JiZWNlM2NlODUwZjA5MWE5YTcuLmIwMjA0ZjAzYjA1OTBmYjk5MDBkMTkzMjUzNDdkYTRmMTFj
YWQ2MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1l
bnRDb2RlcnNNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1
bWVudENvZGVyc01hYy5tbQpAQCAtNTAsNiArNTAsNyBAQAogCiBuYW1lc3BhY2UgSVBDIHsKIAor
I2lmIFVTRShDRlVSTENPTk5FQ1RJT04pCiBzdGF0aWMgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rp
b25hcnlSZWY+IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKENGSW5kZXggdmVyc2lv
biwgQ0ZUeXBlUmVmKiBvYmplY3RzLCBDRkluZGV4IG9iamVjdENvdW50LCBDRkRpY3Rpb25hcnlS
ZWYgcHJvdG9jb2xQcm9wZXJ0aWVzLCBDRk51bWJlclJlZiBleHBlY3RlZENvbnRlbnRMZW5ndGgs
IENGU3RyaW5nUmVmIG1pbWVUeXBlLCBDRlR5cGVSZWYgdG9rZW5OdWxsKQogewogICAgIGF1dG8g
YXJjaGl2ZUxpc3RBcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwpAQCAtMTg3LDYgKzE4OCw3
IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiBjcmVhdGVOU1VSTFJlcXVlc3RGcm9t
U2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oCiAgICAgCiAgICAgcmV0dXJuIGFkb3B0TlMoW1tO
U1VSTFJlcXVlc3QgYWxsb2NdIF9pbml0V2l0aENGVVJMUmVxdWVzdDpjZlJlcXVlc3QuZ2V0KCld
KTsKIH0KKyNlbmRpZgogCiB2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQogewpAQCAtMjA2LDggKzIwOCwxNiBA
QCB2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxh
dGZvcm1EYXRhKEVuY29kZXImIGVuY29kZQogICAgICAgICBbKE5TTXV0YWJsZVVSTFJlcXVlc3Qg
KilyZXF1ZXN0VG9TZXJpYWxpemUgc2V0SFRUUEJvZHlTdHJlYW06bmlsXTsKICAgICB9CiAKKyNp
ZiBVU0UoQ0ZVUkxDT05ORUNUSU9OKQogICAgIGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0ZVNlcmlh
bGl6YWJsZVJlcHJlc2VudGF0aW9uKHJlcXVlc3RUb1NlcmlhbGl6ZS5nZXQoKSwgSVBDOjp0b2tl
bk51bGxwdHJUeXBlUmVmKCkpOwogICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIGRpY3Rpb25hcnku
Z2V0KCkpOworI2Vsc2UKKyAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICBhdXRvICphcmNo
aXZlZERhdGEgPSBbTlNLZXllZEFyY2hpdmVyIGFyY2hpdmVkRGF0YVdpdGhSb290T2JqZWN0OnJl
cXVlc3RUb1NlcmlhbGl6ZS5nZXQoKSByZXF1aXJpbmdTZWN1cmVDb2Rpbmc6WUVTIGVycm9yOiZl
cnJvcl07CisgICAgaWYgKGVycm9yKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBlbmNv
ZGUgTlNVUkxSZXF1ZXN0OiAlZCIsIGVycm9yLmNvZGUpOworICAgIElQQzo6ZW5jb2RlKGVuY29k
ZXIsIChfX2JyaWRnZSBDRkRhdGFSZWYpYXJjaGl2ZWREYXRhKTsKKyNlbmRpZgogCiAgICAgLy8g
VGhlIGZhbGxiYWNrIGFycmF5IGlzIHBhcnQgb2YgTlNVUkxSZXF1ZXN0LCBidXQgaXQgaXMgbm90
IGVuY29kZWQgYnkgV0tOU1VSTFJlcXVlc3RDcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlv
bi4KICAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXNwb25zZUNvbnRlbnREaXNwb3Np
dGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSgpOwpAQCAtMjI2LDYgKzIzNiw3IEBAIGJvb2wgQXJn
dW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEo
RGVjb2RlciYgZGVjb2RlCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorI2lmIFVTRShD
RlVSTENPTk5FQ1RJT04pCiAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZGljdGlvbmFy
eTsKICAgICBpZiAoIUlQQzo6ZGVjb2RlKGRlY29kZXIsIGRpY3Rpb25hcnkpIHx8ICFkaWN0aW9u
YXJ5KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzMsNiArMjQ0LDE4IEBAIGJvb2wgQXJn
dW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEo
RGVjb2RlciYgZGVjb2RlCiAgICAgYXV0byBuc1VSTFJlcXVlc3QgPSBjcmVhdGVOU1VSTFJlcXVl
c3RGcm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oZGljdGlvbmFyeS5nZXQoKSwgSVBDOjp0
b2tlbk51bGxwdHJUeXBlUmVmKCkpOwogICAgIGlmICghbnNVUkxSZXF1ZXN0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CisjZWxzZQorICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7CisgICAg
aWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBkYXRhKSB8fCAhZGF0YSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgICAgYXV0byBuc1VSTFJlcXVl
c3QgPSByZXRhaW5QdHIoW05TS2V5ZWRVbmFyY2hpdmVyIHVuYXJjaGl2ZWRPYmplY3RPZkNsYXNz
OltOU1VSTFJlcXVlc3QgY2xhc3NdIGZyb21EYXRhOihfX2JyaWRnZSBOU0RhdGEgKilkYXRhLmdl
dCgpIGVycm9yOiZlcnJvcl0pOworICAgIGlmIChlcnJvcikgeworICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBkZWNvZGUgTlNVUkxSZXF1ZXN0OiAlZCIsIGVycm9yLmNvZGUpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorI2VuZGlmCiAKICAgICByZXNvdXJjZVJlcXVlc3QgPSBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QobnNVUkxSZXF1ZXN0LmdldCgpKTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421017</attachid>
            <date>2021-02-19 12:54:30 -0800</date>
            <delta_ts>2021-02-19 13:12:05 -0800</delta_ts>
            <desc>More complete change.</desc>
            <filename>brent.patch</filename>
            <type>text/plain</type>
            <size>21038</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYWQwYjMxZmJhM2FjLi5hOWU4NWMxZTQ5MzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjUgQEAKKzIwMjEtMDItMTggIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+
CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVxdWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1
ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5n
IGxheW91dCBhbmQgV2ViS2l0QVBJIHRlc3RzLgorCisgICAgICAgIFJldmlzZSBJUEMgc2VyaWFs
aXphdGlvbiBzbyB0aGF0IE5TVVJMQ29ubmVjdGlvbiAobW9kZXJuKSBDb2NvYSBidWlsZHMgc2Vy
aWFsaXplIHRoZQorICAgICAgICBOU1VSTFJlcXVlc3Qgb2JqZWN0LCByYXRoZXIgdGhhbiBicmlk
Z2luZyB0byBDRlVSTFJlcXVlc3QgYW5kIHNlcmlhbGl6aW5nIHRoYXQuIFRoaXMKKyAgICAgICAg
ZW5zdXJlcyB0aGF0IHRoZSBmdWxsIHNldCBvZiBOU1VSTFJlcXVlc3QgZmVhdHVyZXMgYXJlIGFj
Y3VyYXRlbHkgcmVjb25zdGl0dXRlZCBvbiB0aGUKKyAgICAgICAgcmVjZWl2aW5nIHNpZGUgb2Yg
dGhlIGNvbm5lY3Rpb24uCisKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzQ29jb2EubW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogQWRkZWQuCisgICAgICAgIChJUEM6
OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1E
YXRhKTogQWRkZWQuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNN
YWMubW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOiBE
ZWxldGVkLgorCiAyMDIxLTAyLTE3ICBBZGl0eWEgS2VlcnRoaSAgPGFrZWVydGhpQGFwcGxlLmNv
bT4KIAogICAgICAgICBbaU9TXVtGQ1JdIEFkZCBuZXcgZGF0YWxpc3QgZHJvcGRvd24gZm9yIHRl
eHQgaW5wdXRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJDb3Jl
QXJndW1lbnRDb2RlcnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNv
cmVBcmd1bWVudENvZGVyc0NvY29hLm1tCmluZGV4IDY3M2U5YjU4OGRmMC4uNjUxNzA1ZWRiYWU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRD
b2RlcnNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJDb3JlQXJn
dW1lbnRDb2RlcnNDb2NvYS5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUv
Rm9udC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb250QXR0cmlidXRlcy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNl
UmVxdWVzdC5oPgogI2ltcG9ydCA8cGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oPgogCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTY0Myw0ICs2NDQsNTIgQEAgT3B0aW9uYWw8Rm9udFBsYXRm
b3JtRGF0YT4gQXJndW1lbnRDb2RlcjxSZWY8Rm9udD4+OjpkZWNvZGVQbGF0Zm9ybURhdGEoRGVj
b2RlciYKICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShjdEZvbnQuZ2V0KCksIHNpemUudmFs
dWUoKSwgc3ludGhldGljQm9sZC52YWx1ZSgpLCBzeW50aGV0aWNPYmxpcXVlLnZhbHVlKCksIG9y
aWVudGF0aW9uLnZhbHVlKCksIHdpZHRoVmFyaWFudC52YWx1ZSgpLCB0ZXh0UmVuZGVyaW5nTW9k
ZS52YWx1ZSgpKTsKIH0KIAordm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKK3sKKyAgICBSZXRhaW5QdHI8TlNV
UkxSZXF1ZXN0PiByZXF1ZXN0VG9TZXJpYWxpemUgPSByZXNvdXJjZVJlcXVlc3QubnNVUkxSZXF1
ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KTsK
KworICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudCA9IHJlcXVlc3RUb1NlcmlhbGl6ZTsKKyAgICBl
bmNvZGVyIDw8IHJlcXVlc3RJc1ByZXNlbnQ7CisKKyAgICBpZiAoIXJlcXVlc3RJc1ByZXNlbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGRvbid0IHNlbmQgSFRUUCBib2R5IG92ZXIg
SVBDIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgICAgLy8gQWxzbywgaXQncyBub3QgYWx3YXlz
IHBvc3NpYmxlIHRvIGRvLCBhcyBzdHJlYW1zIGNhbiBvbmx5IGJlIGNyZWF0ZWQgaW4gcHJvY2Vz
cyB0aGF0IGRvZXMgbmV0d29ya2luZy4KKyAgICBpZiAoW3JlcXVlc3RUb1NlcmlhbGl6ZSBIVFRQ
Qm9keV0gfHwgW3JlcXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9keVN0cmVhbV0pIHsKKyAgICAgICAg
cmVxdWVzdFRvU2VyaWFsaXplID0gYWRvcHROUyhbcmVxdWVzdFRvU2VyaWFsaXplIG11dGFibGVD
b3B5XSk7CisgICAgICAgIFsoTlNNdXRhYmxlVVJMUmVxdWVzdCAqKXJlcXVlc3RUb1NlcmlhbGl6
ZSBzZXRIVFRQQm9keTpuaWxdOworICAgICAgICBbKE5TTXV0YWJsZVVSTFJlcXVlc3QgKilyZXF1
ZXN0VG9TZXJpYWxpemUgc2V0SFRUUEJvZHlTdHJlYW06bmlsXTsKKyAgICB9CisKKyAgICBJUEM6
OmVuY29kZShlbmNvZGVyLCByZXF1ZXN0VG9TZXJpYWxpemUuZ2V0KCkpOworCisgICAgZW5jb2Rl
ciA8PCByZXNvdXJjZVJlcXVlc3QucmVxdWVzdGVyKCk7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEoRGVjb2RlciYg
ZGVjb2RlciwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCit7Cisg
ICAgYm9vbCByZXF1ZXN0SXNQcmVzZW50OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVxdWVz
dElzUHJlc2VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcmVxdWVzdElz
UHJlc2VudCkgeworICAgICAgICByZXNvdXJjZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYXV0byByZXF1ZXN0
ID0gSVBDOjpkZWNvZGU8TlNVUkxSZXF1ZXN0PihkZWNvZGVyLCBOU1VSTFJlcXVlc3QuY2xhc3Mp
OworICAgIGlmICghcmVxdWVzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzb3Vy
Y2VSZXF1ZXN0ID0gV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QtPmdldCgpKTsKKyAg
ICAKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3RlciByZXF1ZXN0ZXI7Cisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXF1ZXN0ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmVzb3VyY2VSZXF1ZXN0LnNldFJlcXVlc3RlcihyZXF1ZXN0ZXIpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbSBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KaW5kZXggZjUyZWFiZjFk
MjVhLi5jNTk1MDY4YTZhNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9X
ZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQpAQCAtNTAsMjE1ICs1MCw2IEBACiAKIG5hbWVz
cGFjZSBJUEMgewogCi1zdGF0aWMgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IGNy
ZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKENGSW5kZXggdmVyc2lvbiwgQ0ZUeXBlUmVm
KiBvYmplY3RzLCBDRkluZGV4IG9iamVjdENvdW50LCBDRkRpY3Rpb25hcnlSZWYgcHJvdG9jb2xQ
cm9wZXJ0aWVzLCBDRk51bWJlclJlZiBleHBlY3RlZENvbnRlbnRMZW5ndGgsIENGU3RyaW5nUmVm
IG1pbWVUeXBlLCBDRlR5cGVSZWYgdG9rZW5OdWxsKQotewotICAgIGF1dG8gYXJjaGl2ZUxpc3RB
cnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
MCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwotCi0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBp
IDwgb2JqZWN0Q291bnQ7ICsraSkgewotICAgICAgICBDRlR5cGVSZWYgb2JqZWN0ID0gb2JqZWN0
c1tpXTsKLSAgICAgICAgaWYgKG9iamVjdCkgewotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZh
bHVlKGFyY2hpdmVMaXN0QXJyYXkuZ2V0KCksIG9iamVjdCk7Ci0gICAgICAgICAgICBDRlJlbGVh
c2Uob2JqZWN0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEFwcGVuZCBvdXIg
dG9rZW4gbnVsbCByZXByZXNlbnRhdGlvbi4KLSAgICAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1
ZShhcmNoaXZlTGlzdEFycmF5LmdldCgpLCB0b2tlbk51bGwpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgYXV0byBkaWN0aW9uYXJ5ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywg
JmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLQotICAgIGF1dG8gdmVyc2lvbk51
bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVt
YmVyQ0ZJbmRleFR5cGUsICZ2ZXJzaW9uKSk7Ci0gICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGlj
dGlvbmFyeS5nZXQoKSwgQ0ZTVFIoInZlcnNpb24iKSwgdmVyc2lvbk51bWJlci5nZXQoKSk7Ci0g
ICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIoImFyY2hpdmVM
aXN0IiksIGFyY2hpdmVMaXN0QXJyYXkuZ2V0KCkpOwotCi0gICAgaWYgKHByb3RvY29sUHJvcGVy
dGllcykgewotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBD
RlNUUigicHJvdG9jb2xQcm9wZXJ0aWVzIiksIHByb3RvY29sUHJvcGVydGllcyk7Ci0gICAgICAg
IENGUmVsZWFzZShwcm90b2NvbFByb3BlcnRpZXMpOwotICAgIH0KLQotICAgIGlmIChleHBlY3Rl
ZENvbnRlbnRMZW5ndGgpIHsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlvbmFy
eS5nZXQoKSwgQ0ZTVFIoImV4cGVjdGVkQ29udGVudExlbmd0aCIpLCBleHBlY3RlZENvbnRlbnRM
ZW5ndGgpOwotICAgICAgICBDRlJlbGVhc2UoZXhwZWN0ZWRDb250ZW50TGVuZ3RoKTsKLSAgICB9
Ci0KLSAgICBpZiAobWltZVR5cGUpIHsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGlj
dGlvbmFyeS5nZXQoKSwgQ0ZTVFIoIm1pbWVUeXBlIiksIG1pbWVUeXBlKTsKLSAgICAgICAgQ0ZS
ZWxlYXNlKG1pbWVUeXBlKTsKLSAgICB9Ci0KLSAgICBDRkFsbG9jYXRvckRlYWxsb2NhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgb2JqZWN0cyk7Ci0KLSAgICByZXR1cm4gZGljdGlvbmFyeTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPiBib29sIGV4dHJhY3REaWN0aW9uYXJ5VmFs
dWUoQ0ZEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIENGU3RyaW5nUmVmIGtleSwgVmFsdWVUeXBl
KiByZXN1bHQpCi17Ci0gICAgYXV0byB1bnR5cGVkVmFsdWUgPSBDRkRpY3Rpb25hcnlHZXRWYWx1
ZShkaWN0aW9uYXJ5LCBrZXkpOwotICAgIGF1dG8gdmFsdWUgPSBkeW5hbWljX2NmX2Nhc3Q8VmFs
dWVUeXBlPih1bnR5cGVkVmFsdWUpOwotICAgIGlmICh1bnR5cGVkVmFsdWUgJiYgIXZhbHVlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9
IHZhbHVlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBjcmVhdGVBcmNoaXZl
TGlzdChDRkRpY3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGws
IENGSW5kZXgqIHZlcnNpb24sIENGVHlwZVJlZioqIG9iamVjdHMsIENGSW5kZXgqIG9iamVjdENv
dW50LCBDRkRpY3Rpb25hcnlSZWYqIHByb3RvY29sUHJvcGVydGllcywgQ0ZOdW1iZXJSZWYqIGV4
cGVjdGVkQ29udGVudExlbmd0aCwgQ0ZTdHJpbmdSZWYqIG1pbWVUeXBlKQotewotICAgIGF1dG8g
dmVyc2lvbk51bWJlciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUocmVwcmVzZW50YXRpb24sIENGU1RSKCJ2ZXJzaW9uIikpKTsKLSAgICBpZiAoIXZl
cnNpb25OdW1iZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghQ0ZOdW1iZXJH
ZXRWYWx1ZSh2ZXJzaW9uTnVtYmVyLCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwgdmVyc2lvbikpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gYXJjaGl2ZUxpc3RBcnJheSA9IGR5bmFt
aWNfY2ZfY2FzdDxDRkFycmF5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShyZXByZXNlbnRhdGlv
biwgQ0ZTVFIoImFyY2hpdmVMaXN0IikpKTsKLSAgICBpZiAoIWFyY2hpdmVMaXN0QXJyYXkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gYXJjaGl2ZUxpc3RBcnJheUNvdW50ID0g
Q0ZBcnJheUdldENvdW50KGFyY2hpdmVMaXN0QXJyYXkpOwotICAgIGlmICghaXNJbkJvdW5kczxz
aXplX3Q+KGFyY2hpdmVMaXN0QXJyYXlDb3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGF1dG8gYnVmZmVyU2l6ZSA9IENoZWNrZWRTaXplKHNpemVvZihDRlR5cGVSZWYpKSAqIHN0
YXRpY19jYXN0PHNpemVfdD4oYXJjaGl2ZUxpc3RBcnJheUNvdW50KTsKLSAgICBpZiAoYnVmZmVy
U2l6ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
ZXh0cmFjdERpY3Rpb25hcnlWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoInByb3RvY29sUHJv
cGVydGllcyIpLCBwcm90b2NvbFByb3BlcnRpZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKCFleHRyYWN0RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigiZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoIiksIGV4cGVjdGVkQ29udGVudExlbmd0aCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoIWV4dHJhY3REaWN0aW9uYXJ5VmFsdWUocmVwcmVzZW50YXRp
b24sIENGU1RSKCJtaW1lVHlwZSIpLCBtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICpvYmplY3RDb3VudCA9IGFyY2hpdmVMaXN0QXJyYXlDb3VudDsKLSAgICAqb2JqZWN0
cyA9IHN0YXRpY19jYXN0PENGVHlwZVJlZio+KGZhc3RNYWxsb2MoYnVmZmVyU2l6ZS51bnNhZmVH
ZXQoKSkpOwotCi0gICAgQ0ZBcnJheUdldFZhbHVlcyhhcmNoaXZlTGlzdEFycmF5LCBDRlJhbmdl
TWFrZSgwLCAqb2JqZWN0Q291bnQpLCAqb2JqZWN0cyk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAw
OyBpIDwgKm9iamVjdENvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKCgqb2JqZWN0cylbaV0gPT0g
dG9rZW5OdWxsKQotICAgICAgICAgICAgKCpvYmplY3RzKVtpXSA9IG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihDRlVSTFJlcXVlc3RSZWYgY2ZSZXF1
ZXN0LCBDRlR5cGVSZWYgdG9rZW5OdWxsKQotewotICAgIENGSW5kZXggdmVyc2lvbjsKLSAgICBD
RlR5cGVSZWYqIG9iamVjdHM7Ci0gICAgQ0ZJbmRleCBvYmplY3RDb3VudDsKLSAgICBDRkRpY3Rp
b25hcnlSZWYgcHJvdG9jb2xQcm9wZXJ0aWVzOwotCi0gICAgLy8gRklYTUUgKDEyODg5NTE4KTog
RG8gbm90IHNlcmlhbGl6ZSBIVFRQIG1lc3NhZ2UgYm9keS4KLSAgICAvLyAxLiBJdCBjYW4gYmUg
bGFyZ2UgYW5kIHRodXMgY29zdGx5IHRvIHNlbmQgYWNyb3NzLgotICAgIC8vIDIuIEl0IGlzIG1p
c2xlYWRpbmcgdG8gcHJvdmlkZSBhIGJvZHkgd2l0aCBzb21lIHJlcXVlc3RzLCB3aGlsZSBvdGhl
cnMgdXNlIGJvZHkgc3RyZWFtcywgd2hpY2ggY2Fubm90IGJlIHNlcmlhbGl6ZWQgYXQgYWxsLgot
Ci0gICAgX0NGVVJMUmVxdWVzdENyZWF0ZUFyY2hpdmVMaXN0KGtDRkFsbG9jYXRvckRlZmF1bHQs
IGNmUmVxdWVzdCwgJnZlcnNpb24sICZvYmplY3RzLCAmb2JqZWN0Q291bnQsICZwcm90b2NvbFBy
b3BlcnRpZXMpOwotCi0gICAgLy8gVGhpcyB3aWxsIGRlYWxsb2NhdGUgdGhlIHBhc3NlZCBpbiBh
cmd1bWVudHMuCi0gICAgcmV0dXJuIGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKHZl
cnNpb24sIG9iamVjdHMsIG9iamVjdENvdW50LCBwcm90b2NvbFByb3BlcnRpZXMsIG51bGxwdHIs
IG51bGxwdHIsIHRva2VuTnVsbCk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZVUkxSZXF1ZXN0
UmVmPiBjcmVhdGVDRlVSTFJlcXVlc3RGcm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oQ0ZE
aWN0aW9uYXJ5UmVmIHJlcHJlc2VudGF0aW9uLCBDRlR5cGVSZWYgdG9rZW5OdWxsKQotewotICAg
IENGSW5kZXggdmVyc2lvbjsKLSAgICBDRlR5cGVSZWYqIG9iamVjdHM7Ci0gICAgQ0ZJbmRleCBv
YmplY3RDb3VudDsKLSAgICBDRkRpY3Rpb25hcnlSZWYgcHJvdG9jb2xQcm9wZXJ0aWVzOwotCi0g
ICAgaWYgKCFjcmVhdGVBcmNoaXZlTGlzdChyZXByZXNlbnRhdGlvbiwgdG9rZW5OdWxsLCAmdmVy
c2lvbiwgJm9iamVjdHMsICZvYmplY3RDb3VudCwgJnByb3RvY29sUHJvcGVydGllcywgbnVsbHB0
ciwgbnVsbHB0cikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBjZlJlcXVl
c3QgPSBhZG9wdENGKF9DRlVSTFJlcXVlc3RDcmVhdGVGcm9tQXJjaGl2ZUxpc3Qoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgdmVyc2lvbiwgb2JqZWN0cywgb2JqZWN0Q291bnQsIHByb3RvY29sUHJvcGVy
dGllcykpOwotICAgIGZhc3RGcmVlKG9iamVjdHMpOwotICAgIHJldHVybiBXVEZNb3ZlKGNmUmVx
dWVzdCk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjcmVhdGVTZXJp
YWxpemFibGVSZXByZXNlbnRhdGlvbihOU1VSTFJlcXVlc3QgKnJlcXVlc3QsIENGVHlwZVJlZiB0
b2tlbk51bGwpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9u
KFtyZXF1ZXN0IF9DRlVSTFJlcXVlc3RdLCB0b2tlbk51bGwpOwotfQotCi1zdGF0aWMgUmV0YWlu
UHRyPE5TVVJMUmVxdWVzdD4gY3JlYXRlTlNVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJl
c2VudGF0aW9uKENGRGljdGlvbmFyeVJlZiByZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRva2Vu
TnVsbCkKLXsKLSAgICBhdXRvIGNmUmVxdWVzdCA9IGNyZWF0ZUNGVVJMUmVxdWVzdEZyb21TZXJp
YWxpemFibGVSZXByZXNlbnRhdGlvbihyZXByZXNlbnRhdGlvbiwgdG9rZW5OdWxsKTsKLSAgICBp
ZiAoIWNmUmVxdWVzdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgcmV0dXJu
IGFkb3B0TlMoW1tOU1VSTFJlcXVlc3QgYWxsb2NdIF9pbml0V2l0aENGVVJMUmVxdWVzdDpjZlJl
cXVlc3QuZ2V0KCldKTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKLXsKLSAgICBSZXRhaW5QdHI8
TlNVUkxSZXF1ZXN0PiByZXF1ZXN0VG9TZXJpYWxpemUgPSByZXNvdXJjZVJlcXVlc3QubnNVUkxS
ZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5
KTsKLQotICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudCA9IHJlcXVlc3RUb1NlcmlhbGl6ZTsKLSAg
ICBlbmNvZGVyIDw8IHJlcXVlc3RJc1ByZXNlbnQ7Ci0KLSAgICBpZiAoIXJlcXVlc3RJc1ByZXNl
bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIGRvbid0IHNlbmQgSFRUUCBib2R5IG92
ZXIgSVBDIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCi0gICAgLy8gQWxzbywgaXQncyBub3QgYWx3
YXlzIHBvc3NpYmxlIHRvIGRvLCBhcyBzdHJlYW1zIGNhbiBvbmx5IGJlIGNyZWF0ZWQgaW4gcHJv
Y2VzcyB0aGF0IGRvZXMgbmV0d29ya2luZy4KLSAgICBpZiAoW3JlcXVlc3RUb1NlcmlhbGl6ZSBI
VFRQQm9keV0gfHwgW3JlcXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9keVN0cmVhbV0pIHsKLSAgICAg
ICAgcmVxdWVzdFRvU2VyaWFsaXplID0gYWRvcHROUyhbcmVxdWVzdFRvU2VyaWFsaXplIG11dGFi
bGVDb3B5XSk7Ci0gICAgICAgIFsoTlNNdXRhYmxlVVJMUmVxdWVzdCAqKXJlcXVlc3RUb1Nlcmlh
bGl6ZSBzZXRIVFRQQm9keTpuaWxdOwotICAgICAgICBbKE5TTXV0YWJsZVVSTFJlcXVlc3QgKily
ZXF1ZXN0VG9TZXJpYWxpemUgc2V0SFRUUEJvZHlTdHJlYW06bmlsXTsKLSAgICB9Ci0KLSAgICBh
dXRvIGRpY3Rpb25hcnkgPSBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihyZXF1ZXN0
VG9TZXJpYWxpemUuZ2V0KCksIElQQzo6dG9rZW5OdWxscHRyVHlwZVJlZigpKTsKLSAgICBJUEM6
OmVuY29kZShlbmNvZGVyLCBkaWN0aW9uYXJ5LmdldCgpKTsKLQotICAgIC8vIFRoZSBmYWxsYmFj
ayBhcnJheSBpcyBwYXJ0IG9mIE5TVVJMUmVxdWVzdCwgYnV0IGl0IGlzIG5vdCBlbmNvZGVkIGJ5
IFdLTlNVUkxSZXF1ZXN0Q3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24uCi0gICAgZW5j
b2RlciA8PCByZXNvdXJjZVJlcXVlc3QucmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGlu
Z0ZhbGxiYWNrQXJyYXkoKTsKLSAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXF1ZXN0
ZXIoKTsKLSAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5jYWNoZVBvbGljeSgpOwotfQot
Ci1ib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxh
dGZvcm1EYXRhKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVz
b3VyY2VSZXF1ZXN0KQotewotICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudDsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlcXVlc3RJc1ByZXNlbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoIXJlcXVlc3RJc1ByZXNlbnQpIHsKLSAgICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0g
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGRpY3Rpb25hcnk7Ci0gICAgaWYgKCFJ
UEM6OmRlY29kZShkZWNvZGVyLCBkaWN0aW9uYXJ5KSB8fCAhZGljdGlvbmFyeSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBuc1VSTFJlcXVlc3QgPSBjcmVhdGVOU1VSTFJlcXVl
c3RGcm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oZGljdGlvbmFyeS5nZXQoKSwgSVBDOjp0
b2tlbk51bGxwdHJUeXBlUmVmKCkpOwotICAgIGlmICghbnNVUkxSZXF1ZXN0KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXNvdXJjZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QobnNVUkxSZXF1ZXN0LmdldCgpKTsKLSAgICAKLSAgICBWZWN0b3I8U3RyaW5nPiByZXNw
b25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0Fy
cmF5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzb3VyY2VSZXF1ZXN0LnNldFJl
c3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KAotICAgICAgICBy
ZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkgPiAw
ID8gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMF0gOiBT
dHJpbmcoKSwKLSAgICAgICAgcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxi
YWNrQXJyYXkuc2l6ZSgpID4gMSA/IHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdG
YWxsYmFja0FycmF5WzFdIDogU3RyaW5nKCksCi0gICAgICAgIHJlc3BvbnNlQ29udGVudERpc3Bv
c2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnNpemUoKSA+IDIgPyByZXNwb25zZUNvbnRlbnRE
aXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVsyXSA6IFN0cmluZygpCi0gICAgKTsKLQot
ICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVlc3RlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXNvdXJjZVJlcXVlc3Quc2V0UmVxdWVzdGVyKHJlcXVlc3Rlcik7Ci0KLSAgICBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBjYWNoZVBvbGljeTsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGNhY2hlUG9saWN5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc291
cmNlUmVxdWVzdC5zZXRDYWNoZVBvbGljeShjYWNoZVBvbGljeSk7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQogdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNl
cnRpZmljYXRlSW5mbykKIHsKICAgICBlbmNvZGVyIDw8IGNlcnRpZmljYXRlSW5mby50eXBlKCk7
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmIz
OTc0OTg2Mzc4Li4yYTVlMzRiMjRjOWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMS0wMi0xOSAgQnJlbnQgRnVs
Z2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTZXJpYWxpemUgTlNVUkxSZXF1
ZXN0IChyYXRoZXIgdGhhbiBDRlVSTFJlcXVlc3QpIGluIElQQworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMTQ1CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS83NDUwMDk2Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgYSBuZXcgdGVzdCB0byBlbnN1cmUgd2UgY2FuIHN1Y2Nlc3NmdWxseSBsb2Fk
IFVSTHMgd2l0aCBhY2NlbnRlZCBjaGFyYWN0ZXJzLAorICAgICAgICBhbmQgdG8gdGVzdCB0aGUg
dXBkYXRlZCBJUEMgc2VyaWFsaXphdGlvbiBmb3IgTlNVUkxSZXF1ZXN0LjpxCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9BLzMwMy8yNDcvMzAzLzI0M28uaHRtbDogQWRk
ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1Rlc3RXZWJLaXRBUEkueGNzY2hlbWU6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2FkSW52YWxpZFVSTFJlcXVl
c3QubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0xvYWRBUElzLm1tOgorICAgICAgICAo
VEVTVCk6CisKIDIwMjEtMDItMTcgIEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29t
PgogCiAgICAgICAgIFtpT1NdW0ZDUl0gQWRkIG5ldyBkYXRhbGlzdCBkcm9wZG93biBmb3IgdGV4
dCBpbnB1dHMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmQyZjllNjI3NjkwLi45MTgyNGE1
Y2ZmNWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01NTUsNiArNTU1LDcgQEAKIAkJN0E5
MDlBODMxRDg3NzQ4MDAwN0UxMEY4IC8qIEludFNpemVUZXN0cy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTkwOUE3NTFEODc3NDc1MDA3RTEwRjgg
LyogSW50U2l6ZVRlc3RzLmNwcCAqLzsgfTsKIAkJN0E5NUJERTExRTlCRUM1RjAwODY1NDk4IC8q
IEluamVjdGVkQnVuZGxlQXBwbGVFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QTk1QkRFMDFFOUJFQzQwMDA4NjU0OTggLyogSW5qZWN0ZWRC
dW5kbGVBcHBsZUV2ZW50LmNwcCAqLzsgfTsKIAkJN0E5NUJERTIxRTlCRUM3NDAwODY1NDk4IC8q
IEluamVjdGVkQnVuZGxlQXBwbGVFdmVudF9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E5NUJEREYxRTlCRUM0MDAwODY1NDk4IC8qIElu
amVjdGVkQnVuZGxlQXBwbGVFdmVudF9CdW5kbGUuY3BwICovOyB9OworCQk3QUE1QzE0OTI1RTA0
MUY0MDA2REQ0MDggLyogQWPMp2HMg28uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUE1QzE0ODI1RTA0MUY0MDA2REQ0MDggLyogQWPM
p2HMg28uaHRtbCAqLzsgfTsKIAkJN0FDN0I1NkQyMEQ5NzY5RjAwMkMwOUEwIC8qIEN1c3RvbUJ1
bmRsZVBhcmFtZXRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdBQzdCNTZDMjBEOTc2OEYwMDJDMDlBMCAvKiBDdXN0b21CdW5kbGVQYXJhbWV0ZXIu
bW0gKi87IH07CiAJCTdBQzdCNTZFMjBEOTc2QTcwMDJDMDlBMCAvKiBDdXN0b21CdW5kbGVQYXJh
bWV0ZXJfQnVuZGxlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0FDN0I1NkIyMEQ5NzY4RTAwMkMwOUEwIC8qIEN1c3RvbUJ1bmRsZVBhcmFtZXRlcl9C
dW5kbGUubW0gKi87IH07CiAJCTdBQzdCNTcwMjBEOUJBNUIwMDJDMDlBMCAvKiBDdXN0b21CdW5k
bGVPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QUM3QjU2RjIwRDlCQTVCMDAyQzA5QTAgLyogQ3VzdG9tQnVuZGxlT2JqZWN0Lm1tICovOyB9
OwpAQCAtMTMxMCw2ICsxMzExLDcgQEAKIAkJCQkxQTlFNTJDOTEzRTY1RUY0MDA2OTE3RjUgLyog
MTgtY2hhcmFjdGVycy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTU1QTgxODAwMjE4
MTAyMjEwMDA0QTM5QSAvKiA0MDB4NDAwLWdyZWVuLnBuZyBpbiBDb3B5IFJlc291cmNlcyAqLywK
IAkJCQkzNzkwMjhCOTE0RkFDMjRDMDA3RTZCNDMgLyogYWNjZXB0c0ZpcnN0TW91c2UuaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLywKKwkJCQk3QUE1QzE0OTI1RTA0MUY0MDA2REQ0MDggLyogQWPM
p2HMg28uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk3MjVDM0VGMzIyMDU4QTVCMDA3
QzM2RkMgLyogQWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMuaHRtbCBpbiBDb3B5IFJlc291
cmNlcyAqLywKIAkJCQkxQzJCODE4NzFDODkyNUEwMDBBNTUyOUYgLyogQWhlbS50dGYgaW4gQ29w
eSBSZXNvdXJjZXMgKi8sCiAJCQkJNDZDMUVBOTgyNTc1ODgyMDAwNUU0MDlFIC8qIGFsZXJ0Lmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCkBAIC0yMzU3LDYgKzIzNTksNyBAQAogCQk3QTk1QkRF
MDFFOUJFQzQwMDA4NjU0OTggLyogSW5qZWN0ZWRCdW5kbGVBcHBsZUV2ZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlQXBwbGVFdmVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBOTlEOTkzMUFENEEyOUQwMDM3MzE0
MSAvKiBNZW51VHlwZXNGb3JNb3VzZUV2ZW50cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IE1lbnVUeXBlc0Zvck1vdXNlRXZlbnRzLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QUEwMjFCQTFBQjA5RUE3MDA1Mjk1M0YgLyogRGF0ZU1hdGguY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0ZU1hdGguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QUE1QzE0ODI1RTA0MUY0MDA2REQ0MDggLyogQWPM
p2HMg28uaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuaHRtbDsgbmFtZSA9ICJBY8ynYcyDby5odG1sIjsgcGF0aCA9ICJUZXN0cy9XZWJL
aXQvQWPMp2HMg28uaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQTZBMTUx
MUFBQzBCMzEwMDJCMkVEMyAvKiBXb3JrUXVldWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0FCMDE3MzkyM0ZCMkJGMDAwMkY4MzY2IC8qIFRlc3RXZWJLaXRBUEktbWFjT1MuZW50aXRs
ZW1lbnRzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC5lbnRpdGxlbWVudHM7IHBhdGggPSAiVGVzdFdl
YktpdEFQSS1tYWNPUy5lbnRpdGxlbWVudHMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QUM3QjU2QjIwRDk3NjhFMDAyQzA5QTAgLyogQ3VzdG9tQnVuZGxlUGFyYW1ldGVyX0J1bmRs
ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEN1c3RvbUJ1bmRsZVBhcmFtZXRlcl9CdW5kbGUu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMDkxLDYgKzMwOTQsNyBAQAogCQkw
OEZCNzc5NEZFODQxNTVEQzAyQUFDMDcgLyogVGVzdFdlYktpdEFQSSAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0FBNUMxNDgyNUUwNDFGNDAwNkRENDA4
IC8qIEFjzKdhzINvLmh0bWwgKi8sCiAJCQkJNDlBRUVGNjgyNDA3Mjc2RjAwQzg3RTRDIC8qIElu
Zm8ucGxpc3QgKi8sCiAJCQkJNUM5RDkyMjYyMkQ3REQ3QjAwOEU5MjY2IC8qIERlcml2ZWQgU291
cmNlcyAqLywKIAkJCQk1QzlEOTIxRDIyRDdEQkY3MDA4RTkyNjYgLyogU291cmNlcy50eHQgKi8s
CmRpZmYgLS1naXQgImEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvQVwzMDNcMjQ3
XDMwM1wyNDNvLmh0bWwiICJiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0FcMzAz
XDI0N1wzMDNcMjQzby5odG1sIgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLjEyY2Y4NzM2NDk3ZAotLS0gL2Rldi9udWxsCisrKyAiYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdC9BXDMwM1wyNDdcMzAzXDI0M28uaHRtbCIKQEAgLTAsMCArMSw1IEBACis8
aHRtbD4KKzxib2R5PgorICBTaW1wbGUgSFRNTCBmaWxlLgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2FkSW52YWxp
ZFVSTFJlcXVlc3QubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xv
YWRJbnZhbGlkVVJMUmVxdWVzdC5tbQppbmRleCA3ZDY1NGVkM2FmMmQuLjk2ZmU4YWQ0NGRkMSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2FkSW52
YWxpZFVSTFJlcXVlc3QubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Mb2FkSW52YWxpZFVSTFJlcXVlc3QubW0KQEAgLTkzLDcgKzkzLDcgQEAgVEVTVChXZWJL
aXQsIExvYWRJbnZhbGlkVVJMUmVxdWVzdE5vbkFTQ0lJKQogICAgIGRlbGVnYXRlLmdldCgpLmRp
ZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb24gPSBeKFdLV2ViVmlldyAqLCBXS05hdmlnYXRpb24g
KiwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGVycm9yLmRvbWFp
biwgQCJXZWJLaXRFcnJvckRvbWFpbiIpOwogICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwg
V2ViS2l0RXJyb3JDYW5ub3RTaG93VVJMKTsKLSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKFtlcnJv
ci51c2VySW5mb1tAIk5TRXJyb3JGYWlsaW5nVVJMS2V5Il0gYWJzb2x1dGVTdHJpbmddLCAiaHR0
cDovLyVDMyVBMiVDMiU4MCVDMiU4MCIpOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoW2Vycm9y
LnVzZXJJbmZvW0AiTlNFcnJvckZhaWxpbmdVUkxLZXkiXSBhYnNvbHV0ZVN0cmluZ10sICJodHRw
Oi8vJUUyJTgwJTgwIik7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH07CiAgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbV0tXZWJWaWV3IG5ld10pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3TG9hZEFQSXMubW0KaW5k
ZXggYmVkNTAwZWEzMzk0Li4wZTdmYjc3ODRiMDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3TG9hZEFQSXMubW0KKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbQpAQCAt
MTMyLDMgKzEzMiwyMCBAQCBURVNUKFdLV2ViVmlldywgTG9hZFNpbXVsYXRlZFJlcXVlc3RVcGRh
dGVzQmFja0ZvcndhcmRMaXN0KQogICAgIEVYUEVDVF9UUlVFKCFsaXN0LmZvcndhcmRJdGVtKTsK
ICAgICBFWFBFQ1RfV0tfU1RSRVEoZXhhbXBsZVVSTFN0cmluZywgW2xpc3QuYmFja0l0ZW0uVVJM
IGFic29sdXRlU3RyaW5nXSk7CiB9CisKK1RFU1QoV0tXZWJWaWV3LCBMb2FkQWNjZW50ZWRGaWxl
UmVxdWVzdCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisKKyAgICBhdXRv
IGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRd
KTsKKyAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwor
CisgICAgY29uc3QgVUludDggYnl0ZXNbNl0gPSB7ICdBJywgMHhDMywgMHhBNywgMHhDMywgMHhB
MywgJ28nIH07CisgICAgYXV0byBmaWxlTmFtZSA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10g
aW5pdFdpdGhCeXRlczpieXRlcyBsZW5ndGg6NiBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z10pOworCisgICAgTlNVUkwgKmZpbGUgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJl
c291cmNlOmZpbGVOYW1lLmdldCgpIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6
QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9
IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6ZmlsZV07CisgICAgW3dlYlZpZXcgbG9hZEZp
bGVSZXF1ZXN0OnJlcXVlc3QgYWxsb3dpbmdSZWFkQWNjZXNzVG9VUkw6ZmlsZS5VUkxCeURlbGV0
aW5nTGFzdFBhdGhDb21wb25lbnRdOworICAgIFtkZWxlZ2F0ZSB3YWl0Rm9yRGlkRmluaXNoTmF2
aWdhdGlvbl07CisgICAgRVhQRUNUX1dLX1NUUkVRKHdlYlZpZXcuZ2V0KCkuX3Jlc291cmNlRGly
ZWN0b3J5VVJMLnBhdGgsIGZpbGUuVVJMQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50LnBhdGgp
OworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421020</attachid>
            <date>2021-02-19 13:12:43 -0800</date>
            <delta_ts>2021-02-19 13:28:53 -0800</delta_ts>
            <desc>Rebaselined</desc>
            <filename>brent2.patch</filename>
            <type>text/plain</type>
            <size>21124</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggMmNkOGVlMzgzODY3Li44MjA5OGY5MDJiMGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjUgQEAKKzIwMjEtMDItMTggIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+
CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVxdWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1
ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5n
IGxheW91dCBhbmQgV2ViS2l0QVBJIHRlc3RzLgorCisgICAgICAgIFJldmlzZSBJUEMgc2VyaWFs
aXphdGlvbiBzbyB0aGF0IE5TVVJMQ29ubmVjdGlvbiAobW9kZXJuKSBDb2NvYSBidWlsZHMgc2Vy
aWFsaXplIHRoZQorICAgICAgICBOU1VSTFJlcXVlc3Qgb2JqZWN0LCByYXRoZXIgdGhhbiBicmlk
Z2luZyB0byBDRlVSTFJlcXVlc3QgYW5kIHNlcmlhbGl6aW5nIHRoYXQuIFRoaXMKKyAgICAgICAg
ZW5zdXJlcyB0aGF0IHRoZSBmdWxsIHNldCBvZiBOU1VSTFJlcXVlc3QgZmVhdHVyZXMgYXJlIGFj
Y3VyYXRlbHkgcmVjb25zdGl0dXRlZCBvbiB0aGUKKyAgICAgICAgcmVjZWl2aW5nIHNpZGUgb2Yg
dGhlIGNvbm5lY3Rpb24uCisKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzQ29jb2EubW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogQWRkZWQuCisgICAgICAgIChJUEM6
OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1E
YXRhKTogQWRkZWQuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNN
YWMubW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOiBE
ZWxldGVkLgorCiAyMDIxLTAyLTE5ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4K
IAogICAgICAgICBbUGF5bWVudCBSZXF1ZXN0XSBhZGQgc3VwcG9ydCBmb3IgQXBwbGUgUGF5IHBh
eW1lbnQgbWV0aG9kIG1vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29h
L1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29j
b2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW0KaW5kZXggNzZhZmI3MmZmMmZkLi43MTk1
ZWEzNTcwMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVB
cmd1bWVudENvZGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dl
YkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9Gb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRBdHRyaWJ1dGVzLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmg+CiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNTQzLDQgKzU0NCw1MiBAQCBPcHRpb25hbDxG
b250UGxhdGZvcm1EYXRhPiBBcmd1bWVudENvZGVyPFJlZjxGb250Pj46OmRlY29kZVBsYXRmb3Jt
RGF0YShEZWNvZGVyJgogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKGN0Rm9udC5nZXQoKSwg
c2l6ZS52YWx1ZSgpLCBzeW50aGV0aWNCb2xkLnZhbHVlKCksIHN5bnRoZXRpY09ibGlxdWUudmFs
dWUoKSwgb3JpZW50YXRpb24udmFsdWUoKSwgd2lkdGhWYXJpYW50LnZhbHVlKCksIHRleHRSZW5k
ZXJpbmdNb2RlLnZhbHVlKCkpOwogfQogCit2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQoreworICAgIFJldGFp
blB0cjxOU1VSTFJlcXVlc3Q+IHJlcXVlc3RUb1NlcmlhbGl6ZSA9IHJlc291cmNlUmVxdWVzdC5u
c1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRU
UEJvZHkpOworCisgICAgYm9vbCByZXF1ZXN0SXNQcmVzZW50ID0gcmVxdWVzdFRvU2VyaWFsaXpl
OworICAgIGVuY29kZXIgPDwgcmVxdWVzdElzUHJlc2VudDsKKworICAgIGlmICghcmVxdWVzdElz
UHJlc2VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgZG9uJ3Qgc2VuZCBIVFRQIGJv
ZHkgb3ZlciBJUEMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KKyAgICAvLyBBbHNvLCBpdCdzIG5v
dCBhbHdheXMgcG9zc2libGUgdG8gZG8sIGFzIHN0cmVhbXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBp
biBwcm9jZXNzIHRoYXQgZG9lcyBuZXR3b3JraW5nLgorICAgIGlmIChbcmVxdWVzdFRvU2VyaWFs
aXplIEhUVFBCb2R5XSB8fCBbcmVxdWVzdFRvU2VyaWFsaXplIEhUVFBCb2R5U3RyZWFtXSkgewor
ICAgICAgICByZXF1ZXN0VG9TZXJpYWxpemUgPSBhZG9wdE5TKFtyZXF1ZXN0VG9TZXJpYWxpemUg
bXV0YWJsZUNvcHldKTsKKyAgICAgICAgWyhOU011dGFibGVVUkxSZXF1ZXN0ICopcmVxdWVzdFRv
U2VyaWFsaXplIHNldEhUVFBCb2R5Om5pbF07CisgICAgICAgIFsoTlNNdXRhYmxlVVJMUmVxdWVz
dCAqKXJlcXVlc3RUb1NlcmlhbGl6ZSBzZXRIVFRQQm9keVN0cmVhbTpuaWxdOworICAgIH0KKwor
ICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIHJlcXVlc3RUb1NlcmlhbGl6ZS5nZXQoKSk7CisKKyAg
ICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXF1ZXN0ZXIoKTsKK30KKworYm9vbCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0YShE
ZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVz
dCkKK3sKKyAgICBib29sIHJlcXVlc3RJc1ByZXNlbnQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXF1ZXN0SXNQcmVzZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFy
ZXF1ZXN0SXNQcmVzZW50KSB7CisgICAgICAgIHJlc291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBhdXRv
IHJlcXVlc3QgPSBJUEM6OmRlY29kZTxOU1VSTFJlcXVlc3Q+KGRlY29kZXIsIE5TVVJMUmVxdWVz
dC5jbGFzcyk7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXNvdXJjZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QocmVxdWVzdC0+Z2V0
KCkpOworICAgIAorICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyIHJlcXVl
c3RlcjsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVlc3RlcikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXNvdXJjZVJlcXVlc3Quc2V0UmVxdWVzdGVyKHJlcXVlc3Rlcik7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQppbmRleCA4
M2MyYTg3MzNjOGEuLmM1OTUwNjhhNmE0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCkBAIC01MCwyMjEgKzUwLDYgQEAK
IAogbmFtZXNwYWNlIElQQyB7CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFy
eVJlZj4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oQ0ZJbmRleCB2ZXJzaW9uLCBD
RlR5cGVSZWYqIG9iamVjdHMsIENGSW5kZXggb2JqZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiBw
cm90b2NvbFByb3BlcnRpZXMsIENGTnVtYmVyUmVmIGV4cGVjdGVkQ29udGVudExlbmd0aCwgQ0ZT
dHJpbmdSZWYgbWltZVR5cGUsIENGVHlwZVJlZiB0b2tlbk51bGwpCi17Ci0gICAgYXV0byBhcmNo
aXZlTGlzdEFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCAwLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0KLSAgICBmb3IgKENGSW5kZXgg
aSA9IDA7IGkgPCBvYmplY3RDb3VudDsgKytpKSB7Ci0gICAgICAgIENGVHlwZVJlZiBvYmplY3Qg
PSBvYmplY3RzW2ldOwotICAgICAgICBpZiAob2JqZWN0KSB7Ci0gICAgICAgICAgICBDRkFycmF5
QXBwZW5kVmFsdWUoYXJjaGl2ZUxpc3RBcnJheS5nZXQoKSwgb2JqZWN0KTsKLSAgICAgICAgICAg
IENGUmVsZWFzZShvYmplY3QpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQXBw
ZW5kIG91ciB0b2tlbiBudWxsIHJlcHJlc2VudGF0aW9uLgotICAgICAgICAgICAgQ0ZBcnJheUFw
cGVuZFZhbHVlKGFyY2hpdmVMaXN0QXJyYXkuZ2V0KCksIHRva2VuTnVsbCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0
ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2Fs
bEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotCi0gICAgYXV0byB2
ZXJzaW9uTnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwgJnZlcnNpb24pKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigidmVyc2lvbiIpLCB2ZXJzaW9uTnVtYmVyLmdl
dCgpKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigi
YXJjaGl2ZUxpc3QiKSwgYXJjaGl2ZUxpc3RBcnJheS5nZXQoKSk7Ci0KLSAgICBpZiAocHJvdG9j
b2xQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnku
Z2V0KCksIENGU1RSKCJwcm90b2NvbFByb3BlcnRpZXMiKSwgcHJvdG9jb2xQcm9wZXJ0aWVzKTsK
LSAgICAgICAgQ0ZSZWxlYXNlKHByb3RvY29sUHJvcGVydGllcyk7Ci0gICAgfQotCi0gICAgaWYg
KGV4cGVjdGVkQ29udGVudExlbmd0aCkgewotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShk
aWN0aW9uYXJ5LmdldCgpLCBDRlNUUigiZXhwZWN0ZWRDb250ZW50TGVuZ3RoIiksIGV4cGVjdGVk
Q29udGVudExlbmd0aCk7Ci0gICAgICAgIENGUmVsZWFzZShleHBlY3RlZENvbnRlbnRMZW5ndGgp
OwotICAgIH0KLQotICAgIGlmIChtaW1lVHlwZSkgewotICAgICAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigibWltZVR5cGUiKSwgbWltZVR5cGUpOwotICAg
ICAgICBDRlJlbGVhc2UobWltZVR5cGUpOwotICAgIH0KLQotICAgIENGQWxsb2NhdG9yRGVhbGxv
Y2F0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBvYmplY3RzKTsKLQotICAgIHJldHVybiBkaWN0aW9u
YXJ5OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+IGJvb2wgZXh0cmFjdERpY3Rp
b25hcnlWYWx1ZShDRkRpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgQ0ZTdHJpbmdSZWYga2V5LCBW
YWx1ZVR5cGUqIHJlc3VsdCkKLXsKLSAgICBhdXRvIHVudHlwZWRWYWx1ZSA9IENGRGljdGlvbmFy
eUdldFZhbHVlKGRpY3Rpb25hcnksIGtleSk7Ci0gICAgYXV0byB2YWx1ZSA9IGR5bmFtaWNfY2Zf
Y2FzdDxWYWx1ZVR5cGU+KHVudHlwZWRWYWx1ZSk7Ci0gICAgaWYgKHVudHlwZWRWYWx1ZSAmJiAh
dmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICAq
cmVzdWx0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0
ZUFyY2hpdmVMaXN0KENGRGljdGlvbmFyeVJlZiByZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRv
a2VuTnVsbCwgQ0ZJbmRleCogdmVyc2lvbiwgQ0ZUeXBlUmVmKiogb2JqZWN0cywgQ0ZJbmRleCog
b2JqZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiogcHJvdG9jb2xQcm9wZXJ0aWVzLCBDRk51bWJl
clJlZiogZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBDRlN0cmluZ1JlZiogbWltZVR5cGUpCi17Ci0g
ICAgYXV0byB2ZXJzaW9uTnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoInZlcnNpb24iKSkpOwotICAg
IGlmICghdmVyc2lvbk51bWJlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFD
Rk51bWJlckdldFZhbHVlKHZlcnNpb25OdW1iZXIsIGtDRk51bWJlckNGSW5kZXhUeXBlLCB2ZXJz
aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBhcmNoaXZlTGlzdEFycmF5
ID0gZHluYW1pY19jZl9jYXN0PENGQXJyYXlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJlcHJl
c2VudGF0aW9uLCBDRlNUUigiYXJjaGl2ZUxpc3QiKSkpOwotICAgIGlmICghYXJjaGl2ZUxpc3RB
cnJheSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBhcmNoaXZlTGlzdEFycmF5
Q291bnQgPSBDRkFycmF5R2V0Q291bnQoYXJjaGl2ZUxpc3RBcnJheSk7Ci0gICAgaWYgKCFpc0lu
Qm91bmRzPHNpemVfdD4oYXJjaGl2ZUxpc3RBcnJheUNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byBidWZmZXJTaXplID0gQ2hlY2tlZFNpemUoc2l6ZW9mKENGVHlwZVJl
ZikpICogc3RhdGljX2Nhc3Q8c2l6ZV90PihhcmNoaXZlTGlzdEFycmF5Q291bnQpOwotICAgIGlm
IChidWZmZXJTaXplLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKCFleHRyYWN0RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigicHJv
dG9jb2xQcm9wZXJ0aWVzIiksIHByb3RvY29sUHJvcGVydGllcykpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoIWV4dHJhY3REaWN0aW9uYXJ5VmFsdWUocmVwcmVzZW50YXRpb24sIENG
U1RSKCJleHBlY3RlZENvbnRlbnRMZW5ndGgiKSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZXh0cmFjdERpY3Rpb25hcnlWYWx1ZShyZXBy
ZXNlbnRhdGlvbiwgQ0ZTVFIoIm1pbWVUeXBlIiksIG1pbWVUeXBlKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgKm9iamVjdENvdW50ID0gYXJjaGl2ZUxpc3RBcnJheUNvdW50OwotICAg
ICpvYmplY3RzID0gc3RhdGljX2Nhc3Q8Q0ZUeXBlUmVmKj4oZmFzdE1hbGxvYyhidWZmZXJTaXpl
LnVuc2FmZUdldCgpKSk7Ci0KLSAgICBDRkFycmF5R2V0VmFsdWVzKGFyY2hpdmVMaXN0QXJyYXks
IENGUmFuZ2VNYWtlKDAsICpvYmplY3RDb3VudCksICpvYmplY3RzKTsKLSAgICBmb3IgKENGSW5k
ZXggaSA9IDA7IGkgPCAqb2JqZWN0Q291bnQ7ICsraSkgewotICAgICAgICBpZiAoKCpvYmplY3Rz
KVtpXSA9PSB0b2tlbk51bGwpCi0gICAgICAgICAgICAoKm9iamVjdHMpW2ldID0gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKENGVVJMUmVxdWVzdFJl
ZiBjZlJlcXVlc3QsIENGVHlwZVJlZiB0b2tlbk51bGwpCi17Ci0gICAgQ0ZJbmRleCB2ZXJzaW9u
OwotICAgIENGVHlwZVJlZiogb2JqZWN0czsKLSAgICBDRkluZGV4IG9iamVjdENvdW50OwotICAg
IENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3BlcnRpZXM7Ci0KLSAgICAvLyBGSVhNRSAoMTI4
ODk1MTgpOiBEbyBub3Qgc2VyaWFsaXplIEhUVFAgbWVzc2FnZSBib2R5LgotICAgIC8vIDEuIEl0
IGNhbiBiZSBsYXJnZSBhbmQgdGh1cyBjb3N0bHkgdG8gc2VuZCBhY3Jvc3MuCi0gICAgLy8gMi4g
SXQgaXMgbWlzbGVhZGluZyB0byBwcm92aWRlIGEgYm9keSB3aXRoIHNvbWUgcmVxdWVzdHMsIHdo
aWxlIG90aGVycyB1c2UgYm9keSBzdHJlYW1zLCB3aGljaCBjYW5ub3QgYmUgc2VyaWFsaXplZCBh
dCBhbGwuCi0KLSAgICBfQ0ZVUkxSZXF1ZXN0Q3JlYXRlQXJjaGl2ZUxpc3Qoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgY2ZSZXF1ZXN0LCAmdmVyc2lvbiwgJm9iamVjdHMsICZvYmplY3RDb3VudCwgJnBy
b3RvY29sUHJvcGVydGllcyk7Ci0KLSAgICAvLyBUaGlzIHdpbGwgZGVhbGxvY2F0ZSB0aGUgcGFz
c2VkIGluIGFyZ3VtZW50cy4KLSAgICByZXR1cm4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50
YXRpb24odmVyc2lvbiwgb2JqZWN0cywgb2JqZWN0Q291bnQsIHByb3RvY29sUHJvcGVydGllcywg
bnVsbHB0ciwgbnVsbHB0ciwgdG9rZW5OdWxsKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRlVS
TFJlcXVlc3RSZWY+IGNyZWF0ZUNGVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRh
dGlvbihDRkRpY3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwp
Ci17Ci0gICAgQ0ZJbmRleCB2ZXJzaW9uOwotICAgIENGVHlwZVJlZiogb2JqZWN0czsKLSAgICBD
RkluZGV4IG9iamVjdENvdW50OwotICAgIENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3BlcnRp
ZXM7Ci0KLSAgICBpZiAoIWNyZWF0ZUFyY2hpdmVMaXN0KHJlcHJlc2VudGF0aW9uLCB0b2tlbk51
bGwsICZ2ZXJzaW9uLCAmb2JqZWN0cywgJm9iamVjdENvdW50LCAmcHJvdG9jb2xQcm9wZXJ0aWVz
LCBudWxscHRyLCBudWxscHRyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRv
IGNmUmVxdWVzdCA9IGFkb3B0Q0YoX0NGVVJMUmVxdWVzdENyZWF0ZUZyb21BcmNoaXZlTGlzdChr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCB2ZXJzaW9uLCBvYmplY3RzLCBvYmplY3RDb3VudCwgcHJvdG9j
b2xQcm9wZXJ0aWVzKSk7Ci0gICAgZmFzdEZyZWUob2JqZWN0cyk7Ci0gICAgcmV0dXJuIFdURk1v
dmUoY2ZSZXF1ZXN0KTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNy
ZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKE5TVVJMUmVxdWVzdCAqcmVxdWVzdCwgQ0ZU
eXBlUmVmIHRva2VuTnVsbCkKLXsKLSAgICByZXR1cm4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVz
ZW50YXRpb24oW3JlcXVlc3QgX0NGVVJMUmVxdWVzdF0sIHRva2VuTnVsbCk7Ci19Ci0KLXN0YXRp
YyBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiBjcmVhdGVOU1VSTFJlcXVlc3RGcm9tU2VyaWFsaXph
YmxlUmVwcmVzZW50YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIHJlcHJlc2VudGF0aW9uLCBDRlR5cGVS
ZWYgdG9rZW5OdWxsKQotewotICAgIGF1dG8gY2ZSZXF1ZXN0ID0gY3JlYXRlQ0ZVUkxSZXF1ZXN0
RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKHJlcHJlc2VudGF0aW9uLCB0b2tlbk51bGwp
OwotICAgIGlmICghY2ZSZXF1ZXN0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAg
ICByZXR1cm4gYWRvcHROUyhbW05TVVJMUmVxdWVzdCBhbGxvY10gX2luaXRXaXRoQ0ZVUkxSZXF1
ZXN0OmNmUmVxdWVzdC5nZXQoKV0pOwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQotewotICAgIFJl
dGFpblB0cjxOU1VSTFJlcXVlc3Q+IHJlcXVlc3RUb1NlcmlhbGl6ZSA9IHJlc291cmNlUmVxdWVz
dC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRl
SFRUUEJvZHkpOwotCi0gICAgYm9vbCByZXF1ZXN0SXNQcmVzZW50ID0gcmVxdWVzdFRvU2VyaWFs
aXplOwotICAgIGVuY29kZXIgPDwgcmVxdWVzdElzUHJlc2VudDsKLQotICAgIGlmICghcmVxdWVz
dElzUHJlc2VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgZG9uJ3Qgc2VuZCBIVFRQ
IGJvZHkgb3ZlciBJUEMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KLSAgICAvLyBBbHNvLCBpdCdz
IG5vdCBhbHdheXMgcG9zc2libGUgdG8gZG8sIGFzIHN0cmVhbXMgY2FuIG9ubHkgYmUgY3JlYXRl
ZCBpbiBwcm9jZXNzIHRoYXQgZG9lcyBuZXR3b3JraW5nLgotICAgIGlmIChbcmVxdWVzdFRvU2Vy
aWFsaXplIEhUVFBCb2R5XSB8fCBbcmVxdWVzdFRvU2VyaWFsaXplIEhUVFBCb2R5U3RyZWFtXSkg
ewotICAgICAgICByZXF1ZXN0VG9TZXJpYWxpemUgPSBhZG9wdE5TKFtyZXF1ZXN0VG9TZXJpYWxp
emUgbXV0YWJsZUNvcHldKTsKLSAgICAgICAgWyhOU011dGFibGVVUkxSZXF1ZXN0ICopcmVxdWVz
dFRvU2VyaWFsaXplIHNldEhUVFBCb2R5Om5pbF07Ci0gICAgICAgIFsoTlNNdXRhYmxlVVJMUmVx
dWVzdCAqKXJlcXVlc3RUb1NlcmlhbGl6ZSBzZXRIVFRQQm9keVN0cmVhbTpuaWxdOwotICAgIH0K
LQotICAgIGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9u
KHJlcXVlc3RUb1NlcmlhbGl6ZS5nZXQoKSwgSVBDOjp0b2tlbk51bGxwdHJUeXBlUmVmKCkpOwot
ICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIGRpY3Rpb25hcnkuZ2V0KCkpOwotCi0gICAgLy8gVGhl
IGZhbGxiYWNrIGFycmF5IGlzIHBhcnQgb2YgTlNVUkxSZXF1ZXN0LCBidXQgaXQgaXMgbm90IGVu
Y29kZWQgYnkgV0tOU1VSTFJlcXVlc3RDcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbi4K
LSAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlv
bkVuY29kaW5nRmFsbGJhY2tBcnJheSgpOwotICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0
LnJlcXVlc3RlcigpOwotICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LmNhY2hlUG9saWN5
KCk7Ci0gICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QuaXNBcHBCb3VuZCgpOwotfQotCi1i
b29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZv
cm1EYXRhKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3Vy
Y2VSZXF1ZXN0KQotewotICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudDsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlcXVlc3RJc1ByZXNlbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoIXJlcXVlc3RJc1ByZXNlbnQpIHsKLSAgICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0gV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGRpY3Rpb25hcnk7Ci0gICAgaWYgKCFJUEM6
OmRlY29kZShkZWNvZGVyLCBkaWN0aW9uYXJ5KSB8fCAhZGljdGlvbmFyeSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYXV0byBuc1VSTFJlcXVlc3QgPSBjcmVhdGVOU1VSTFJlcXVlc3RG
cm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oZGljdGlvbmFyeS5nZXQoKSwgSVBDOjp0b2tl
bk51bGxwdHJUeXBlUmVmKCkpOwotICAgIGlmICghbnNVUkxSZXF1ZXN0KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXNvdXJjZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QobnNVUkxSZXF1ZXN0LmdldCgpKTsKLSAgICAKLSAgICBWZWN0b3I8U3RyaW5nPiByZXNwb25z
ZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzb3VyY2VSZXF1ZXN0LnNldFJlc3Bv
bnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KAotICAgICAgICByZXNw
b25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkgPiAwID8g
cmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMF0gOiBTdHJp
bmcoKSwKLSAgICAgICAgcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXkuc2l6ZSgpID4gMSA/IHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxs
YmFja0FycmF5WzFdIDogU3RyaW5nKCksCi0gICAgICAgIHJlc3BvbnNlQ29udGVudERpc3Bvc2l0
aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnNpemUoKSA+IDIgPyByZXNwb25zZUNvbnRlbnREaXNw
b3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVsyXSA6IFN0cmluZygpCi0gICAgKTsKLQotICAg
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlcXVlc3RlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXNvdXJjZVJlcXVlc3Quc2V0UmVxdWVzdGVyKHJlcXVlc3Rlcik7Ci0KLSAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBjYWNoZVBvbGljeTsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGNhY2hlUG9saWN5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc291cmNl
UmVxdWVzdC5zZXRDYWNoZVBvbGljeShjYWNoZVBvbGljeSk7Ci0KLSAgICBib29sIGlzQXBwQm91
bmQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc0FwcEJvdW5kKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJlc291cmNlUmVxdWVzdC5zZXRJc0FwcEJvdW5kKGlzQXBwQm91bmQpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDZXJ0
aWZpY2F0ZUluZm8+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6Q2Vy
dGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCiB7CiAgICAgZW5jb2RlciA8PCBjZXJ0aWZp
Y2F0ZUluZm8udHlwZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IGRjNzhiYzRkY2QyYS4uMDExNDg5MzM5MTMwIDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEt
MDItMTkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2Vy
aWFsaXplIE5TVVJMUmVxdWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IHRlc3QgdG8gZW5zdXJlIHdlIGNhbiBz
dWNjZXNzZnVsbHkgbG9hZCBVUkxzIHdpdGggYWNjZW50ZWQgY2hhcmFjdGVycywKKyAgICAgICAg
YW5kIHRvIHRlc3QgdGhlIHVwZGF0ZWQgSVBDIHNlcmlhbGl6YXRpb24gZm9yIE5TVVJMUmVxdWVz
dC46cQorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvQS8zMDMvMjQ3LzMw
My8yNDNvLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvTG9hZEludmFsaWRVUkxSZXF1ZXN0Lm1tOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS1dlYlZpZXdMb2FkQVBJcy5tbToKKyAgICAgICAgKFRFU1QpOgorCiAyMDIxLTAyLTE5ICBB
ZGl0eWEgS2VlcnRoaSAgPGFrZWVydGhpQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXVtGQ1Jd
IEVuYWJsZSB0aGUgbmV3IGFwcGVhcmFuY2UgYnkgZGVmYXVsdApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCAzYzJmMDY4ZTFkMDguLjJhODIzYWI1NzM3OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTU1Nyw2ICs1NTcsNyBAQAogCQk3QTkwOUE4MzFEODc3NDgwMDA3RTEwRjggLyogSW50
U2l6ZVRlc3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdBOTA5QTc1MUQ4Nzc0NzUwMDdFMTBGOCAvKiBJbnRTaXplVGVzdHMuY3BwICovOyB9Owog
CQk3QTk1QkRFMTFFOUJFQzVGMDA4NjU0OTggLyogSW5qZWN0ZWRCdW5kbGVBcHBsZUV2ZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBOTVCREUw
MUU5QkVDNDAwMDg2NTQ5OCAvKiBJbmplY3RlZEJ1bmRsZUFwcGxlRXZlbnQuY3BwICovOyB9Owog
CQk3QTk1QkRFMjFFOUJFQzc0MDA4NjU0OTggLyogSW5qZWN0ZWRCdW5kbGVBcHBsZUV2ZW50X0J1
bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QTk1QkRERjFFOUJFQzQwMDA4NjU0OTggLyogSW5qZWN0ZWRCdW5kbGVBcHBsZUV2ZW50X0J1bmRs
ZS5jcHAgKi87IH07CisJCTdBQTVDMTQ5MjVFMDQxRjQwMDZERDQwOCAvKiBBY8ynYcyDby5odG1s
IGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdB
QTVDMTQ4MjVFMDQxRjQwMDZERDQwOCAvKiBBY8ynYcyDby5odG1sICovOyB9OwogCQk3QUM3QjU2
RDIwRDk3NjlGMDAyQzA5QTAgLyogQ3VzdG9tQnVuZGxlUGFyYW1ldGVyLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FDN0I1NkMyMEQ5NzY4RjAwMkMw
OUEwIC8qIEN1c3RvbUJ1bmRsZVBhcmFtZXRlci5tbSAqLzsgfTsKIAkJN0FDN0I1NkUyMEQ5NzZB
NzAwMkMwOUEwIC8qIEN1c3RvbUJ1bmRsZVBhcmFtZXRlcl9CdW5kbGUubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUM3QjU2QjIwRDk3NjhFMDAyQzA5
QTAgLyogQ3VzdG9tQnVuZGxlUGFyYW1ldGVyX0J1bmRsZS5tbSAqLzsgfTsKIAkJN0FDN0I1NzAy
MEQ5QkE1QjAwMkMwOUEwIC8qIEN1c3RvbUJ1bmRsZU9iamVjdC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBQzdCNTZGMjBEOUJBNUIwMDJDMDlBMCAv
KiBDdXN0b21CdW5kbGVPYmplY3QubW0gKi87IH07CkBAIC0xMzEyLDYgKzEzMTMsNyBAQAogCQkJ
CTFBOUU1MkM5MTNFNjVFRjQwMDY5MTdGNSAvKiAxOC1jaGFyYWN0ZXJzLmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8sCiAJCQkJNTVBODE4MDAyMTgxMDIyMTAwMDRBMzlBIC8qIDQwMHg0MDAtZ3Jl
ZW4ucG5nIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTM3OTAyOEI5MTRGQUMyNEMwMDdFNkI0
MyAvKiBhY2NlcHRzRmlyc3RNb3VzZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJCTdB
QTVDMTQ5MjVFMDQxRjQwMDZERDQwOCAvKiBBY8ynYcyDby5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovLAogCQkJCTcyNUMzRUYzMjIwNThBNUIwMDdDMzZGQyAvKiBBZGRpdGlvbmFsU3VwcG9ydGVk
SW1hZ2VUeXBlcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTFDMkI4MTg3MUM4OTI1
QTAwMEE1NTI5RiAvKiBBaGVtLnR0ZiBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk0NkMxRUE5
ODI1NzU4ODIwMDA1RTQwOUUgLyogYWxlcnQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAg
LTIzNjUsNiArMjM2Nyw3IEBACiAJCTdBOTVCREUwMUU5QkVDNDAwMDg2NTQ5OCAvKiBJbmplY3Rl
ZEJ1bmRsZUFwcGxlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5qZWN0ZWRCdW5kbGVBcHBsZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0E5OUQ5OTMxQUQ0QTI5RDAwMzczMTQxIC8qIE1lbnVUeXBlc0Zvck1vdXNlRXZlbnRz
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTWVudVR5cGVzRm9y
TW91c2VFdmVudHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQTAyMUJBMUFC
MDlFQTcwMDUyOTUzRiAvKiBEYXRlTWF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEYXRlTWF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdB
QTVDMTQ4MjVFMDQxRjQwMDZERDQwOCAvKiBBY8ynYcyDby5odG1sICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBuYW1lID0gIkFjzKdh
zINvLmh0bWwiOyBwYXRoID0gIlRlc3RzL1dlYktpdC9BY8ynYcyDby5odG1sIjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FBNkExNTExQUFDMEIzMTAwMkIyRUQzIC8qIFdvcmtRdWV1
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrUXVldWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUIwMTczOTIzRkIyQkYwMDAyRjgzNjYg
LyogVGVzdFdlYktpdEFQSS1tYWNPUy5lbnRpdGxlbWVudHMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0
LmVudGl0bGVtZW50czsgcGF0aCA9ICJUZXN0V2ViS2l0QVBJLW1hY09TLmVudGl0bGVtZW50cyI7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQzdCNTZCMjBEOTc2OEUwMDJDMDlBMCAv
KiBDdXN0b21CdW5kbGVQYXJhbWV0ZXJfQnVuZGxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
Q3VzdG9tQnVuZGxlUGFyYW1ldGVyX0J1bmRsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTMwOTksNiArMzEwMiw3IEBACiAJCTA4RkI3Nzk0RkU4NDE1NURDMDJBQUMwNyAvKiBU
ZXN0V2ViS2l0QVBJICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQk3QUE1QzE0ODI1RTA0MUY0MDA2REQ0MDggLyogQWPMp2HMg28uaHRtbCAqLywKIAkJCQk0
OUFFRUY2ODI0MDcyNzZGMDBDODdFNEMgLyogSW5mby5wbGlzdCAqLywKIAkJCQk1QzlEOTIyNjIy
RDdERDdCMDA4RTkyNjYgLyogRGVyaXZlZCBTb3VyY2VzICovLAogCQkJCTVDOUQ5MjFEMjJEN0RC
RjcwMDhFOTI2NiAvKiBTb3VyY2VzLnR4dCAqLywKZGlmZiAtLWdpdCAiYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdC9BXDMwM1wyNDdcMzAzXDI0M28uaHRtbCIgImIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvQVwzMDNcMjQ3XDMwM1wyNDNvLmh0bWwiCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTJjZjg3MzY0OTdkCi0tLSAvZGV2L251
bGwKKysrICJiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0FcMzAzXDI0N1wzMDNc
MjQzby5odG1sIgpAQCAtMCwwICsxLDUgQEAKKzxodG1sPgorPGJvZHk+CisgIFNpbXBsZSBIVE1M
IGZpbGUuCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0xvYWRJbnZhbGlkVVJMUmVxdWVzdC5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9hZEludmFsaWRVUkxSZXF1ZXN0Lm1tCmluZGV4
IDdkNjU0ZWQzYWYyZC4uOTZmZThhZDQ0ZGQxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvYWRJbnZhbGlkVVJMUmVxdWVzdC5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvYWRJbnZhbGlkVVJMUmVxdWVzdC5t
bQpAQCAtOTMsNyArOTMsNyBAQCBURVNUKFdlYktpdCwgTG9hZEludmFsaWRVUkxSZXF1ZXN0Tm9u
QVNDSUkpCiAgICAgZGVsZWdhdGUuZ2V0KCkuZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbiA9
IF4oV0tXZWJWaWV3ICosIFdLTmF2aWdhdGlvbiAqLCBOU0Vycm9yICplcnJvcikgewogICAgICAg
ICBFWFBFQ1RfV0tfU1RSRVEoZXJyb3IuZG9tYWluLCBAIldlYktpdEVycm9yRG9tYWluIik7CiAg
ICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBXZWJLaXRFcnJvckNhbm5vdFNob3dVUkwpOwot
ICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoW2Vycm9yLnVzZXJJbmZvW0AiTlNFcnJvckZhaWxpbmdV
UkxLZXkiXSBhYnNvbHV0ZVN0cmluZ10sICJodHRwOi8vJUMzJUEyJUMyJTgwJUMyJTgwIik7Cisg
ICAgICAgIEVYUEVDVF9XS19TVFJFUShbZXJyb3IudXNlckluZm9bQCJOU0Vycm9yRmFpbGluZ1VS
TEtleSJdIGFic29sdXRlU3RyaW5nXSwgImh0dHA6Ly8lRTIlODAlODAiKTsKICAgICAgICAgZG9u
ZSA9IHRydWU7CiAgICAgfTsKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtXS1dlYlZpZXcg
bmV3XSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dLV2ViVmlld0xvYWRBUElzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbQppbmRleCBiZWQ1MDBlYTMzOTQuLjBlN2ZiNzc4NGIw
MyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dl
YlZpZXdMb2FkQVBJcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLV2ViVmlld0xvYWRBUElzLm1tCkBAIC0xMzIsMyArMTMyLDIwIEBAIFRFU1QoV0tXZWJW
aWV3LCBMb2FkU2ltdWxhdGVkUmVxdWVzdFVwZGF0ZXNCYWNrRm9yd2FyZExpc3QpCiAgICAgRVhQ
RUNUX1RSVUUoIWxpc3QuZm9yd2FyZEl0ZW0pOwogICAgIEVYUEVDVF9XS19TVFJFUShleGFtcGxl
VVJMU3RyaW5nLCBbbGlzdC5iYWNrSXRlbS5VUkwgYWJzb2x1dGVTdHJpbmddKTsKIH0KKworVEVT
VChXS1dlYlZpZXcsIExvYWRBY2NlbnRlZEZpbGVSZXF1ZXN0KQoreworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCldKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdE5h
dmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRp
b25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBjb25zdCBVSW50OCBieXRlc1s2XSA9
IHsgJ0EnLCAweEMzLCAweEE3LCAweEMzLCAweEEzLCAnbycgfTsKKyAgICBhdXRvIGZpbGVOYW1l
ID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmJ5dGVzIGxlbmd0aDo2
IGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSk7CisKKyAgICBOU1VSTCAqZmlsZSA9IFtb
TlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6ZmlsZU5hbWUuZ2V0KCkgd2l0aEV4
dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07
CisgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpmaWxlXTsKKyAgICBbd2ViVmlldyBsb2FkRmlsZVJlcXVlc3Q6cmVxdWVzdCBhbGxvd2luZ1Jl
YWRBY2Nlc3NUb1VSTDpmaWxlLlVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07CisgICAg
W2RlbGVnYXRlIHdhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICBFWFBFQ1RfV0tfU1RS
RVEod2ViVmlldy5nZXQoKS5fcmVzb3VyY2VEaXJlY3RvcnlVUkwucGF0aCwgZmlsZS5VUkxCeURl
bGV0aW5nTGFzdFBhdGhDb21wb25lbnQucGF0aCk7Cit9Cg==
</data>
<flag name="commit-queue"
          id="439743"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421026</attachid>
            <date>2021-02-19 13:21:18 -0800</date>
            <delta_ts>2021-02-19 13:43:02 -0800</delta_ts>
            <desc>Another try.</desc>
            <filename>brent2.patch</filename>
            <type>text/plain</type>
            <size>21114</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggMmNkOGVlMzgzODY3Li44MjA5OGY5MDJiMGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjUgQEAKKzIwMjEtMDItMTggIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+
CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVxdWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1
ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5n
IGxheW91dCBhbmQgV2ViS2l0QVBJIHRlc3RzLgorCisgICAgICAgIFJldmlzZSBJUEMgc2VyaWFs
aXphdGlvbiBzbyB0aGF0IE5TVVJMQ29ubmVjdGlvbiAobW9kZXJuKSBDb2NvYSBidWlsZHMgc2Vy
aWFsaXplIHRoZQorICAgICAgICBOU1VSTFJlcXVlc3Qgb2JqZWN0LCByYXRoZXIgdGhhbiBicmlk
Z2luZyB0byBDRlVSTFJlcXVlc3QgYW5kIHNlcmlhbGl6aW5nIHRoYXQuIFRoaXMKKyAgICAgICAg
ZW5zdXJlcyB0aGF0IHRoZSBmdWxsIHNldCBvZiBOU1VSTFJlcXVlc3QgZmVhdHVyZXMgYXJlIGFj
Y3VyYXRlbHkgcmVjb25zdGl0dXRlZCBvbiB0aGUKKyAgICAgICAgcmVjZWl2aW5nIHNpZGUgb2Yg
dGhlIGNvbm5lY3Rpb24uCisKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzQ29jb2EubW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogQWRkZWQuCisgICAgICAgIChJUEM6
OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1E
YXRhKTogQWRkZWQuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNN
YWMubW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOiBE
ZWxldGVkLgorCiAyMDIxLTAyLTE5ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4K
IAogICAgICAgICBbUGF5bWVudCBSZXF1ZXN0XSBhZGQgc3VwcG9ydCBmb3IgQXBwbGUgUGF5IHBh
eW1lbnQgbWV0aG9kIG1vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29h
L1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29j
b2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW0KaW5kZXggNzZhZmI3MmZmMmZkLi43MTk1
ZWEzNTcwMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVB
cmd1bWVudENvZGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dl
YkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9Gb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRBdHRyaWJ1dGVzLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmg+CiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNTQzLDQgKzU0NCw1MiBAQCBPcHRpb25hbDxG
b250UGxhdGZvcm1EYXRhPiBBcmd1bWVudENvZGVyPFJlZjxGb250Pj46OmRlY29kZVBsYXRmb3Jt
RGF0YShEZWNvZGVyJgogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKGN0Rm9udC5nZXQoKSwg
c2l6ZS52YWx1ZSgpLCBzeW50aGV0aWNCb2xkLnZhbHVlKCksIHN5bnRoZXRpY09ibGlxdWUudmFs
dWUoKSwgb3JpZW50YXRpb24udmFsdWUoKSwgd2lkdGhWYXJpYW50LnZhbHVlKCksIHRleHRSZW5k
ZXJpbmdNb2RlLnZhbHVlKCkpOwogfQogCit2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQoreworICAgIFJldGFp
blB0cjxOU1VSTFJlcXVlc3Q+IHJlcXVlc3RUb1NlcmlhbGl6ZSA9IHJlc291cmNlUmVxdWVzdC5u
c1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRU
UEJvZHkpOworCisgICAgYm9vbCByZXF1ZXN0SXNQcmVzZW50ID0gcmVxdWVzdFRvU2VyaWFsaXpl
OworICAgIGVuY29kZXIgPDwgcmVxdWVzdElzUHJlc2VudDsKKworICAgIGlmICghcmVxdWVzdElz
UHJlc2VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgZG9uJ3Qgc2VuZCBIVFRQIGJv
ZHkgb3ZlciBJUEMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KKyAgICAvLyBBbHNvLCBpdCdzIG5v
dCBhbHdheXMgcG9zc2libGUgdG8gZG8sIGFzIHN0cmVhbXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBp
biBwcm9jZXNzIHRoYXQgZG9lcyBuZXR3b3JraW5nLgorICAgIGlmIChbcmVxdWVzdFRvU2VyaWFs
aXplIEhUVFBCb2R5XSB8fCBbcmVxdWVzdFRvU2VyaWFsaXplIEhUVFBCb2R5U3RyZWFtXSkgewor
ICAgICAgICByZXF1ZXN0VG9TZXJpYWxpemUgPSBhZG9wdE5TKFtyZXF1ZXN0VG9TZXJpYWxpemUg
bXV0YWJsZUNvcHldKTsKKyAgICAgICAgWyhOU011dGFibGVVUkxSZXF1ZXN0ICopcmVxdWVzdFRv
U2VyaWFsaXplIHNldEhUVFBCb2R5Om5pbF07CisgICAgICAgIFsoTlNNdXRhYmxlVVJMUmVxdWVz
dCAqKXJlcXVlc3RUb1NlcmlhbGl6ZSBzZXRIVFRQQm9keVN0cmVhbTpuaWxdOworICAgIH0KKwor
ICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIHJlcXVlc3RUb1NlcmlhbGl6ZS5nZXQoKSk7CisKKyAg
ICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXF1ZXN0ZXIoKTsKK30KKworYm9vbCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0YShE
ZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVz
dCkKK3sKKyAgICBib29sIHJlcXVlc3RJc1ByZXNlbnQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXF1ZXN0SXNQcmVzZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFy
ZXF1ZXN0SXNQcmVzZW50KSB7CisgICAgICAgIHJlc291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBhdXRv
IHJlcXVlc3QgPSBJUEM6OmRlY29kZTxOU1VSTFJlcXVlc3Q+KGRlY29kZXIsIE5TVVJMUmVxdWVz
dC5jbGFzcyk7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXNvdXJjZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QocmVxdWVzdC0+Z2V0
KCkpOworICAgIAorICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyIHJlcXVl
c3RlcjsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVlc3RlcikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXNvdXJjZVJlcXVlc3Quc2V0UmVxdWVzdGVyKHJlcXVlc3Rlcik7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQppbmRleCA4
M2MyYTg3MzNjOGEuLmM1OTUwNjhhNmE0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCkBAIC01MCwyMjEgKzUwLDYgQEAK
IAogbmFtZXNwYWNlIElQQyB7CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFy
eVJlZj4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oQ0ZJbmRleCB2ZXJzaW9uLCBD
RlR5cGVSZWYqIG9iamVjdHMsIENGSW5kZXggb2JqZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiBw
cm90b2NvbFByb3BlcnRpZXMsIENGTnVtYmVyUmVmIGV4cGVjdGVkQ29udGVudExlbmd0aCwgQ0ZT
dHJpbmdSZWYgbWltZVR5cGUsIENGVHlwZVJlZiB0b2tlbk51bGwpCi17Ci0gICAgYXV0byBhcmNo
aXZlTGlzdEFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCAwLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0KLSAgICBmb3IgKENGSW5kZXgg
aSA9IDA7IGkgPCBvYmplY3RDb3VudDsgKytpKSB7Ci0gICAgICAgIENGVHlwZVJlZiBvYmplY3Qg
PSBvYmplY3RzW2ldOwotICAgICAgICBpZiAob2JqZWN0KSB7Ci0gICAgICAgICAgICBDRkFycmF5
QXBwZW5kVmFsdWUoYXJjaGl2ZUxpc3RBcnJheS5nZXQoKSwgb2JqZWN0KTsKLSAgICAgICAgICAg
IENGUmVsZWFzZShvYmplY3QpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQXBw
ZW5kIG91ciB0b2tlbiBudWxsIHJlcHJlc2VudGF0aW9uLgotICAgICAgICAgICAgQ0ZBcnJheUFw
cGVuZFZhbHVlKGFyY2hpdmVMaXN0QXJyYXkuZ2V0KCksIHRva2VuTnVsbCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0
ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2Fs
bEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotCi0gICAgYXV0byB2
ZXJzaW9uTnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwgJnZlcnNpb24pKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigidmVyc2lvbiIpLCB2ZXJzaW9uTnVtYmVyLmdl
dCgpKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigi
YXJjaGl2ZUxpc3QiKSwgYXJjaGl2ZUxpc3RBcnJheS5nZXQoKSk7Ci0KLSAgICBpZiAocHJvdG9j
b2xQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnku
Z2V0KCksIENGU1RSKCJwcm90b2NvbFByb3BlcnRpZXMiKSwgcHJvdG9jb2xQcm9wZXJ0aWVzKTsK
LSAgICAgICAgQ0ZSZWxlYXNlKHByb3RvY29sUHJvcGVydGllcyk7Ci0gICAgfQotCi0gICAgaWYg
KGV4cGVjdGVkQ29udGVudExlbmd0aCkgewotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShk
aWN0aW9uYXJ5LmdldCgpLCBDRlNUUigiZXhwZWN0ZWRDb250ZW50TGVuZ3RoIiksIGV4cGVjdGVk
Q29udGVudExlbmd0aCk7Ci0gICAgICAgIENGUmVsZWFzZShleHBlY3RlZENvbnRlbnRMZW5ndGgp
OwotICAgIH0KLQotICAgIGlmIChtaW1lVHlwZSkgewotICAgICAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigibWltZVR5cGUiKSwgbWltZVR5cGUpOwotICAg
ICAgICBDRlJlbGVhc2UobWltZVR5cGUpOwotICAgIH0KLQotICAgIENGQWxsb2NhdG9yRGVhbGxv
Y2F0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBvYmplY3RzKTsKLQotICAgIHJldHVybiBkaWN0aW9u
YXJ5OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+IGJvb2wgZXh0cmFjdERpY3Rp
b25hcnlWYWx1ZShDRkRpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgQ0ZTdHJpbmdSZWYga2V5LCBW
YWx1ZVR5cGUqIHJlc3VsdCkKLXsKLSAgICBhdXRvIHVudHlwZWRWYWx1ZSA9IENGRGljdGlvbmFy
eUdldFZhbHVlKGRpY3Rpb25hcnksIGtleSk7Ci0gICAgYXV0byB2YWx1ZSA9IGR5bmFtaWNfY2Zf
Y2FzdDxWYWx1ZVR5cGU+KHVudHlwZWRWYWx1ZSk7Ci0gICAgaWYgKHVudHlwZWRWYWx1ZSAmJiAh
dmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICAq
cmVzdWx0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0
ZUFyY2hpdmVMaXN0KENGRGljdGlvbmFyeVJlZiByZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRv
a2VuTnVsbCwgQ0ZJbmRleCogdmVyc2lvbiwgQ0ZUeXBlUmVmKiogb2JqZWN0cywgQ0ZJbmRleCog
b2JqZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiogcHJvdG9jb2xQcm9wZXJ0aWVzLCBDRk51bWJl
clJlZiogZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBDRlN0cmluZ1JlZiogbWltZVR5cGUpCi17Ci0g
ICAgYXV0byB2ZXJzaW9uTnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoInZlcnNpb24iKSkpOwotICAg
IGlmICghdmVyc2lvbk51bWJlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFD
Rk51bWJlckdldFZhbHVlKHZlcnNpb25OdW1iZXIsIGtDRk51bWJlckNGSW5kZXhUeXBlLCB2ZXJz
aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBhcmNoaXZlTGlzdEFycmF5
ID0gZHluYW1pY19jZl9jYXN0PENGQXJyYXlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJlcHJl
c2VudGF0aW9uLCBDRlNUUigiYXJjaGl2ZUxpc3QiKSkpOwotICAgIGlmICghYXJjaGl2ZUxpc3RB
cnJheSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBhcmNoaXZlTGlzdEFycmF5
Q291bnQgPSBDRkFycmF5R2V0Q291bnQoYXJjaGl2ZUxpc3RBcnJheSk7Ci0gICAgaWYgKCFpc0lu
Qm91bmRzPHNpemVfdD4oYXJjaGl2ZUxpc3RBcnJheUNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byBidWZmZXJTaXplID0gQ2hlY2tlZFNpemUoc2l6ZW9mKENGVHlwZVJl
ZikpICogc3RhdGljX2Nhc3Q8c2l6ZV90PihhcmNoaXZlTGlzdEFycmF5Q291bnQpOwotICAgIGlm
IChidWZmZXJTaXplLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKCFleHRyYWN0RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigicHJv
dG9jb2xQcm9wZXJ0aWVzIiksIHByb3RvY29sUHJvcGVydGllcykpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoIWV4dHJhY3REaWN0aW9uYXJ5VmFsdWUocmVwcmVzZW50YXRpb24sIENG
U1RSKCJleHBlY3RlZENvbnRlbnRMZW5ndGgiKSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZXh0cmFjdERpY3Rpb25hcnlWYWx1ZShyZXBy
ZXNlbnRhdGlvbiwgQ0ZTVFIoIm1pbWVUeXBlIiksIG1pbWVUeXBlKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgKm9iamVjdENvdW50ID0gYXJjaGl2ZUxpc3RBcnJheUNvdW50OwotICAg
ICpvYmplY3RzID0gc3RhdGljX2Nhc3Q8Q0ZUeXBlUmVmKj4oZmFzdE1hbGxvYyhidWZmZXJTaXpl
LnVuc2FmZUdldCgpKSk7Ci0KLSAgICBDRkFycmF5R2V0VmFsdWVzKGFyY2hpdmVMaXN0QXJyYXks
IENGUmFuZ2VNYWtlKDAsICpvYmplY3RDb3VudCksICpvYmplY3RzKTsKLSAgICBmb3IgKENGSW5k
ZXggaSA9IDA7IGkgPCAqb2JqZWN0Q291bnQ7ICsraSkgewotICAgICAgICBpZiAoKCpvYmplY3Rz
KVtpXSA9PSB0b2tlbk51bGwpCi0gICAgICAgICAgICAoKm9iamVjdHMpW2ldID0gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKENGVVJMUmVxdWVzdFJl
ZiBjZlJlcXVlc3QsIENGVHlwZVJlZiB0b2tlbk51bGwpCi17Ci0gICAgQ0ZJbmRleCB2ZXJzaW9u
OwotICAgIENGVHlwZVJlZiogb2JqZWN0czsKLSAgICBDRkluZGV4IG9iamVjdENvdW50OwotICAg
IENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3BlcnRpZXM7Ci0KLSAgICAvLyBGSVhNRSAoMTI4
ODk1MTgpOiBEbyBub3Qgc2VyaWFsaXplIEhUVFAgbWVzc2FnZSBib2R5LgotICAgIC8vIDEuIEl0
IGNhbiBiZSBsYXJnZSBhbmQgdGh1cyBjb3N0bHkgdG8gc2VuZCBhY3Jvc3MuCi0gICAgLy8gMi4g
SXQgaXMgbWlzbGVhZGluZyB0byBwcm92aWRlIGEgYm9keSB3aXRoIHNvbWUgcmVxdWVzdHMsIHdo
aWxlIG90aGVycyB1c2UgYm9keSBzdHJlYW1zLCB3aGljaCBjYW5ub3QgYmUgc2VyaWFsaXplZCBh
dCBhbGwuCi0KLSAgICBfQ0ZVUkxSZXF1ZXN0Q3JlYXRlQXJjaGl2ZUxpc3Qoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgY2ZSZXF1ZXN0LCAmdmVyc2lvbiwgJm9iamVjdHMsICZvYmplY3RDb3VudCwgJnBy
b3RvY29sUHJvcGVydGllcyk7Ci0KLSAgICAvLyBUaGlzIHdpbGwgZGVhbGxvY2F0ZSB0aGUgcGFz
c2VkIGluIGFyZ3VtZW50cy4KLSAgICByZXR1cm4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50
YXRpb24odmVyc2lvbiwgb2JqZWN0cywgb2JqZWN0Q291bnQsIHByb3RvY29sUHJvcGVydGllcywg
bnVsbHB0ciwgbnVsbHB0ciwgdG9rZW5OdWxsKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRlVS
TFJlcXVlc3RSZWY+IGNyZWF0ZUNGVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRh
dGlvbihDRkRpY3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwp
Ci17Ci0gICAgQ0ZJbmRleCB2ZXJzaW9uOwotICAgIENGVHlwZVJlZiogb2JqZWN0czsKLSAgICBD
RkluZGV4IG9iamVjdENvdW50OwotICAgIENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3BlcnRp
ZXM7Ci0KLSAgICBpZiAoIWNyZWF0ZUFyY2hpdmVMaXN0KHJlcHJlc2VudGF0aW9uLCB0b2tlbk51
bGwsICZ2ZXJzaW9uLCAmb2JqZWN0cywgJm9iamVjdENvdW50LCAmcHJvdG9jb2xQcm9wZXJ0aWVz
LCBudWxscHRyLCBudWxscHRyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRv
IGNmUmVxdWVzdCA9IGFkb3B0Q0YoX0NGVVJMUmVxdWVzdENyZWF0ZUZyb21BcmNoaXZlTGlzdChr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCB2ZXJzaW9uLCBvYmplY3RzLCBvYmplY3RDb3VudCwgcHJvdG9j
b2xQcm9wZXJ0aWVzKSk7Ci0gICAgZmFzdEZyZWUob2JqZWN0cyk7Ci0gICAgcmV0dXJuIFdURk1v
dmUoY2ZSZXF1ZXN0KTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNy
ZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKE5TVVJMUmVxdWVzdCAqcmVxdWVzdCwgQ0ZU
eXBlUmVmIHRva2VuTnVsbCkKLXsKLSAgICByZXR1cm4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVz
ZW50YXRpb24oW3JlcXVlc3QgX0NGVVJMUmVxdWVzdF0sIHRva2VuTnVsbCk7Ci19Ci0KLXN0YXRp
YyBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiBjcmVhdGVOU1VSTFJlcXVlc3RGcm9tU2VyaWFsaXph
YmxlUmVwcmVzZW50YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIHJlcHJlc2VudGF0aW9uLCBDRlR5cGVS
ZWYgdG9rZW5OdWxsKQotewotICAgIGF1dG8gY2ZSZXF1ZXN0ID0gY3JlYXRlQ0ZVUkxSZXF1ZXN0
RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKHJlcHJlc2VudGF0aW9uLCB0b2tlbk51bGwp
OwotICAgIGlmICghY2ZSZXF1ZXN0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAg
ICByZXR1cm4gYWRvcHROUyhbW05TVVJMUmVxdWVzdCBhbGxvY10gX2luaXRXaXRoQ0ZVUkxSZXF1
ZXN0OmNmUmVxdWVzdC5nZXQoKV0pOwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQotewotICAgIFJl
dGFpblB0cjxOU1VSTFJlcXVlc3Q+IHJlcXVlc3RUb1NlcmlhbGl6ZSA9IHJlc291cmNlUmVxdWVz
dC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRl
SFRUUEJvZHkpOwotCi0gICAgYm9vbCByZXF1ZXN0SXNQcmVzZW50ID0gcmVxdWVzdFRvU2VyaWFs
aXplOwotICAgIGVuY29kZXIgPDwgcmVxdWVzdElzUHJlc2VudDsKLQotICAgIGlmICghcmVxdWVz
dElzUHJlc2VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgZG9uJ3Qgc2VuZCBIVFRQ
IGJvZHkgb3ZlciBJUEMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KLSAgICAvLyBBbHNvLCBpdCdz
IG5vdCBhbHdheXMgcG9zc2libGUgdG8gZG8sIGFzIHN0cmVhbXMgY2FuIG9ubHkgYmUgY3JlYXRl
ZCBpbiBwcm9jZXNzIHRoYXQgZG9lcyBuZXR3b3JraW5nLgotICAgIGlmIChbcmVxdWVzdFRvU2Vy
aWFsaXplIEhUVFBCb2R5XSB8fCBbcmVxdWVzdFRvU2VyaWFsaXplIEhUVFBCb2R5U3RyZWFtXSkg
ewotICAgICAgICByZXF1ZXN0VG9TZXJpYWxpemUgPSBhZG9wdE5TKFtyZXF1ZXN0VG9TZXJpYWxp
emUgbXV0YWJsZUNvcHldKTsKLSAgICAgICAgWyhOU011dGFibGVVUkxSZXF1ZXN0ICopcmVxdWVz
dFRvU2VyaWFsaXplIHNldEhUVFBCb2R5Om5pbF07Ci0gICAgICAgIFsoTlNNdXRhYmxlVVJMUmVx
dWVzdCAqKXJlcXVlc3RUb1NlcmlhbGl6ZSBzZXRIVFRQQm9keVN0cmVhbTpuaWxdOwotICAgIH0K
LQotICAgIGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9u
KHJlcXVlc3RUb1NlcmlhbGl6ZS5nZXQoKSwgSVBDOjp0b2tlbk51bGxwdHJUeXBlUmVmKCkpOwot
ICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIGRpY3Rpb25hcnkuZ2V0KCkpOwotCi0gICAgLy8gVGhl
IGZhbGxiYWNrIGFycmF5IGlzIHBhcnQgb2YgTlNVUkxSZXF1ZXN0LCBidXQgaXQgaXMgbm90IGVu
Y29kZWQgYnkgV0tOU1VSTFJlcXVlc3RDcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbi4K
LSAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlv
bkVuY29kaW5nRmFsbGJhY2tBcnJheSgpOwotICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0
LnJlcXVlc3RlcigpOwotICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LmNhY2hlUG9saWN5
KCk7Ci0gICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QuaXNBcHBCb3VuZCgpOwotfQotCi1i
b29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZv
cm1EYXRhKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3Vy
Y2VSZXF1ZXN0KQotewotICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudDsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlcXVlc3RJc1ByZXNlbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoIXJlcXVlc3RJc1ByZXNlbnQpIHsKLSAgICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0gV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGRpY3Rpb25hcnk7Ci0gICAgaWYgKCFJUEM6
OmRlY29kZShkZWNvZGVyLCBkaWN0aW9uYXJ5KSB8fCAhZGljdGlvbmFyeSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYXV0byBuc1VSTFJlcXVlc3QgPSBjcmVhdGVOU1VSTFJlcXVlc3RG
cm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oZGljdGlvbmFyeS5nZXQoKSwgSVBDOjp0b2tl
bk51bGxwdHJUeXBlUmVmKCkpOwotICAgIGlmICghbnNVUkxSZXF1ZXN0KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXNvdXJjZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QobnNVUkxSZXF1ZXN0LmdldCgpKTsKLSAgICAKLSAgICBWZWN0b3I8U3RyaW5nPiByZXNwb25z
ZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzb3VyY2VSZXF1ZXN0LnNldFJlc3Bv
bnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KAotICAgICAgICByZXNw
b25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkgPiAwID8g
cmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMF0gOiBTdHJp
bmcoKSwKLSAgICAgICAgcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXkuc2l6ZSgpID4gMSA/IHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxs
YmFja0FycmF5WzFdIDogU3RyaW5nKCksCi0gICAgICAgIHJlc3BvbnNlQ29udGVudERpc3Bvc2l0
aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnNpemUoKSA+IDIgPyByZXNwb25zZUNvbnRlbnREaXNw
b3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVsyXSA6IFN0cmluZygpCi0gICAgKTsKLQotICAg
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlcXVlc3RlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXNvdXJjZVJlcXVlc3Quc2V0UmVxdWVzdGVyKHJlcXVlc3Rlcik7Ci0KLSAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBjYWNoZVBvbGljeTsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGNhY2hlUG9saWN5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc291cmNl
UmVxdWVzdC5zZXRDYWNoZVBvbGljeShjYWNoZVBvbGljeSk7Ci0KLSAgICBib29sIGlzQXBwQm91
bmQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc0FwcEJvdW5kKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJlc291cmNlUmVxdWVzdC5zZXRJc0FwcEJvdW5kKGlzQXBwQm91bmQpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDZXJ0
aWZpY2F0ZUluZm8+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6Q2Vy
dGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCiB7CiAgICAgZW5jb2RlciA8PCBjZXJ0aWZp
Y2F0ZUluZm8udHlwZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IGRjNzhiYzRkY2QyYS4uMDExNDg5MzM5MTMwIDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEt
MDItMTkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2Vy
aWFsaXplIE5TVVJMUmVxdWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IHRlc3QgdG8gZW5zdXJlIHdlIGNhbiBz
dWNjZXNzZnVsbHkgbG9hZCBVUkxzIHdpdGggYWNjZW50ZWQgY2hhcmFjdGVycywKKyAgICAgICAg
YW5kIHRvIHRlc3QgdGhlIHVwZGF0ZWQgSVBDIHNlcmlhbGl6YXRpb24gZm9yIE5TVVJMUmVxdWVz
dC46cQorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvQS8zMDMvMjQ3LzMw
My8yNDNvLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvTG9hZEludmFsaWRVUkxSZXF1ZXN0Lm1tOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS1dlYlZpZXdMb2FkQVBJcy5tbToKKyAgICAgICAgKFRFU1QpOgorCiAyMDIxLTAyLTE5ICBB
ZGl0eWEgS2VlcnRoaSAgPGFrZWVydGhpQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXVtGQ1Jd
IEVuYWJsZSB0aGUgbmV3IGFwcGVhcmFuY2UgYnkgZGVmYXVsdApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCAzYzJmMDY4ZTFkMDguLjJhODIzYWI1NzM3OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTU1Nyw2ICs1NTcsNyBAQAogCQk3QTkwOUE4MzFEODc3NDgwMDA3RTEwRjggLyogSW50
U2l6ZVRlc3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdBOTA5QTc1MUQ4Nzc0NzUwMDdFMTBGOCAvKiBJbnRTaXplVGVzdHMuY3BwICovOyB9Owog
CQk3QTk1QkRFMTFFOUJFQzVGMDA4NjU0OTggLyogSW5qZWN0ZWRCdW5kbGVBcHBsZUV2ZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBOTVCREUw
MUU5QkVDNDAwMDg2NTQ5OCAvKiBJbmplY3RlZEJ1bmRsZUFwcGxlRXZlbnQuY3BwICovOyB9Owog
CQk3QTk1QkRFMjFFOUJFQzc0MDA4NjU0OTggLyogSW5qZWN0ZWRCdW5kbGVBcHBsZUV2ZW50X0J1
bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QTk1QkRERjFFOUJFQzQwMDA4NjU0OTggLyogSW5qZWN0ZWRCdW5kbGVBcHBsZUV2ZW50X0J1bmRs
ZS5jcHAgKi87IH07CisJCTdBQTVDMTQ5MjVFMDQxRjQwMDZERDQwOCAvKiBBY8ynYcyDby5odG1s
IGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdB
QTVDMTQ4MjVFMDQxRjQwMDZERDQwOCAvKiBBY8ynYcyDby5odG1sICovOyB9OwogCQk3QUM3QjU2
RDIwRDk3NjlGMDAyQzA5QTAgLyogQ3VzdG9tQnVuZGxlUGFyYW1ldGVyLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FDN0I1NkMyMEQ5NzY4RjAwMkMw
OUEwIC8qIEN1c3RvbUJ1bmRsZVBhcmFtZXRlci5tbSAqLzsgfTsKIAkJN0FDN0I1NkUyMEQ5NzZB
NzAwMkMwOUEwIC8qIEN1c3RvbUJ1bmRsZVBhcmFtZXRlcl9CdW5kbGUubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUM3QjU2QjIwRDk3NjhFMDAyQzA5
QTAgLyogQ3VzdG9tQnVuZGxlUGFyYW1ldGVyX0J1bmRsZS5tbSAqLzsgfTsKIAkJN0FDN0I1NzAy
MEQ5QkE1QjAwMkMwOUEwIC8qIEN1c3RvbUJ1bmRsZU9iamVjdC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBQzdCNTZGMjBEOUJBNUIwMDJDMDlBMCAv
KiBDdXN0b21CdW5kbGVPYmplY3QubW0gKi87IH07CkBAIC0xMzEyLDYgKzEzMTMsNyBAQAogCQkJ
CTFBOUU1MkM5MTNFNjVFRjQwMDY5MTdGNSAvKiAxOC1jaGFyYWN0ZXJzLmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8sCiAJCQkJNTVBODE4MDAyMTgxMDIyMTAwMDRBMzlBIC8qIDQwMHg0MDAtZ3Jl
ZW4ucG5nIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTM3OTAyOEI5MTRGQUMyNEMwMDdFNkI0
MyAvKiBhY2NlcHRzRmlyc3RNb3VzZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJCTdB
QTVDMTQ5MjVFMDQxRjQwMDZERDQwOCAvKiBBY8ynYcyDby5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovLAogCQkJCTcyNUMzRUYzMjIwNThBNUIwMDdDMzZGQyAvKiBBZGRpdGlvbmFsU3VwcG9ydGVk
SW1hZ2VUeXBlcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTFDMkI4MTg3MUM4OTI1
QTAwMEE1NTI5RiAvKiBBaGVtLnR0ZiBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk0NkMxRUE5
ODI1NzU4ODIwMDA1RTQwOUUgLyogYWxlcnQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAg
LTIzNjUsNiArMjM2Nyw3IEBACiAJCTdBOTVCREUwMUU5QkVDNDAwMDg2NTQ5OCAvKiBJbmplY3Rl
ZEJ1bmRsZUFwcGxlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5qZWN0ZWRCdW5kbGVBcHBsZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0E5OUQ5OTMxQUQ0QTI5RDAwMzczMTQxIC8qIE1lbnVUeXBlc0Zvck1vdXNlRXZlbnRz
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTWVudVR5cGVzRm9y
TW91c2VFdmVudHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQTAyMUJBMUFC
MDlFQTcwMDUyOTUzRiAvKiBEYXRlTWF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEYXRlTWF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdB
QTVDMTQ4MjVFMDQxRjQwMDZERDQwOCAvKiBBY8ynYcyDby5odG1sICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBuYW1lID0gIkFjzKdh
zINvLmh0bWwiOyBwYXRoID0gIlRlc3RzL1dlYktpdC9BY8ynYcyDby5odG1sIjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FBNkExNTExQUFDMEIzMTAwMkIyRUQzIC8qIFdvcmtRdWV1
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrUXVldWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUIwMTczOTIzRkIyQkYwMDAyRjgzNjYg
LyogVGVzdFdlYktpdEFQSS1tYWNPUy5lbnRpdGxlbWVudHMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0
LmVudGl0bGVtZW50czsgcGF0aCA9ICJUZXN0V2ViS2l0QVBJLW1hY09TLmVudGl0bGVtZW50cyI7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQzdCNTZCMjBEOTc2OEUwMDJDMDlBMCAv
KiBDdXN0b21CdW5kbGVQYXJhbWV0ZXJfQnVuZGxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
Q3VzdG9tQnVuZGxlUGFyYW1ldGVyX0J1bmRsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTMwOTksNiArMzEwMiw3IEBACiAJCTA4RkI3Nzk0RkU4NDE1NURDMDJBQUMwNyAvKiBU
ZXN0V2ViS2l0QVBJICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQk3QUE1QzE0ODI1RTA0MUY0MDA2REQ0MDggLyogQWPMp2HMg28uaHRtbCAqLywKIAkJCQk0
OUFFRUY2ODI0MDcyNzZGMDBDODdFNEMgLyogSW5mby5wbGlzdCAqLywKIAkJCQk1QzlEOTIyNjIy
RDdERDdCMDA4RTkyNjYgLyogRGVyaXZlZCBTb3VyY2VzICovLAogCQkJCTVDOUQ5MjFEMjJEN0RC
RjcwMDhFOTI2NiAvKiBTb3VyY2VzLnR4dCAqLywKZGlmZiAtLWdpdCAiYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdC9BXDMwM1wyNDdcMzAzXDI0M28uaHRtbCIgImIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvQVwzMDNcMjQ3XDMwM1wyNDNvLmh0bWwiCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTJjZjg3MzY0OTdkCi0tLSAvZGV2L251
bGwKKysrICJiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0FjzKdhzINvLmh0bWwi
CkBAIC0wLDAgKzEsNSBAQAorPGh0bWw+Cis8Ym9keT4KKyAgU2ltcGxlIEhUTUwgZmlsZS4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvTG9hZEludmFsaWRVUkxSZXF1ZXN0Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Mb2FkSW52YWxpZFVSTFJlcXVlc3QubW0KaW5kZXggN2Q2NTRlZDNh
ZjJkLi45NmZlOGFkNDRkZDEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTG9hZEludmFsaWRVUkxSZXF1ZXN0Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9hZEludmFsaWRVUkxSZXF1ZXN0Lm1tCkBAIC05Myw3
ICs5Myw3IEBAIFRFU1QoV2ViS2l0LCBMb2FkSW52YWxpZFVSTFJlcXVlc3ROb25BU0NJSSkKICAg
ICBkZWxlZ2F0ZS5nZXQoKS5kaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uID0gXihXS1dlYlZp
ZXcgKiwgV0tOYXZpZ2F0aW9uICosIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9X
S19TVFJFUShlcnJvci5kb21haW4sIEAiV2ViS2l0RXJyb3JEb21haW4iKTsKICAgICAgICAgRVhQ
RUNUX0VRKGVycm9yLmNvZGUsIFdlYktpdEVycm9yQ2Fubm90U2hvd1VSTCk7Ci0gICAgICAgIEVY
UEVDVF9XS19TVFJFUShbZXJyb3IudXNlckluZm9bQCJOU0Vycm9yRmFpbGluZ1VSTEtleSJdIGFi
c29sdXRlU3RyaW5nXSwgImh0dHA6Ly8lQzMlQTIlQzIlODAlQzIlODAiKTsKKyAgICAgICAgRVhQ
RUNUX1dLX1NUUkVRKFtlcnJvci51c2VySW5mb1tAIk5TRXJyb3JGYWlsaW5nVVJMS2V5Il0gYWJz
b2x1dGVTdHJpbmddLCAiaHR0cDovLyVFMiU4MCU4MCIpOwogICAgICAgICBkb25lID0gdHJ1ZTsK
ICAgICB9OwogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1dLV2ViVmlldyBuZXddKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3
TG9hZEFQSXMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2Vi
Vmlld0xvYWRBUElzLm1tCmluZGV4IGJlZDUwMGVhMzM5NC4uMGU3ZmI3Nzg0YjAzIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0xvYWRB
UElzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJW
aWV3TG9hZEFQSXMubW0KQEAgLTEzMiwzICsxMzIsMjAgQEAgVEVTVChXS1dlYlZpZXcsIExvYWRT
aW11bGF0ZWRSZXF1ZXN0VXBkYXRlc0JhY2tGb3J3YXJkTGlzdCkKICAgICBFWFBFQ1RfVFJVRSgh
bGlzdC5mb3J3YXJkSXRlbSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKGV4YW1wbGVVUkxTdHJpbmcs
IFtsaXN0LmJhY2tJdGVtLlVSTCBhYnNvbHV0ZVN0cmluZ10pOwogfQorCitURVNUKFdLV2ViVmll
dywgTG9hZEFjY2VudGVkRmlsZVJlcXVlc3QpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwg
NjAwKV0pOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0TmF2aWdhdGlvbkRl
bGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRl
OmRlbGVnYXRlLmdldCgpXTsKKworICAgIGNvbnN0IFVJbnQ4IGJ5dGVzWzZdID0geyAnQScsIDB4
QzMsIDB4QTcsIDB4QzMsIDB4QTMsICdvJyB9OworICAgIGF1dG8gZmlsZU5hbWUgPSBhZG9wdE5T
KFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOjYgZW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKKworICAgIE5TVVJMICpmaWxlID0gW1tOU0J1bmRsZSBt
YWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpmaWxlTmFtZS5nZXQoKSB3aXRoRXh0ZW5zaW9uOkAi
aHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBOU1VS
TFJlcXVlc3QgKnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOmZpbGVdOwor
ICAgIFt3ZWJWaWV3IGxvYWRGaWxlUmVxdWVzdDpyZXF1ZXN0IGFsbG93aW5nUmVhZEFjY2Vzc1Rv
VVJMOmZpbGUuVVJMQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50XTsKKyAgICBbZGVsZWdhdGUg
d2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIEVYUEVDVF9XS19TVFJFUSh3ZWJWaWV3
LmdldCgpLl9yZXNvdXJjZURpcmVjdG9yeVVSTC5wYXRoLCBmaWxlLlVSTEJ5RGVsZXRpbmdMYXN0
UGF0aENvbXBvbmVudC5wYXRoKTsKK30K
</data>
<flag name="commit-queue"
          id="439746"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421027</attachid>
            <date>2021-02-19 13:30:44 -0800</date>
            <delta_ts>2021-02-19 15:11:41 -0800</delta_ts>
            <desc>Yet another try</desc>
            <filename>brent2.patch</filename>
            <type>text/plain</type>
            <size>21112</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggMmNkOGVlMzgzODY3Li44MjA5OGY5MDJiMGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjUgQEAKKzIwMjEtMDItMTggIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+
CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVxdWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1
ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5n
IGxheW91dCBhbmQgV2ViS2l0QVBJIHRlc3RzLgorCisgICAgICAgIFJldmlzZSBJUEMgc2VyaWFs
aXphdGlvbiBzbyB0aGF0IE5TVVJMQ29ubmVjdGlvbiAobW9kZXJuKSBDb2NvYSBidWlsZHMgc2Vy
aWFsaXplIHRoZQorICAgICAgICBOU1VSTFJlcXVlc3Qgb2JqZWN0LCByYXRoZXIgdGhhbiBicmlk
Z2luZyB0byBDRlVSTFJlcXVlc3QgYW5kIHNlcmlhbGl6aW5nIHRoYXQuIFRoaXMKKyAgICAgICAg
ZW5zdXJlcyB0aGF0IHRoZSBmdWxsIHNldCBvZiBOU1VSTFJlcXVlc3QgZmVhdHVyZXMgYXJlIGFj
Y3VyYXRlbHkgcmVjb25zdGl0dXRlZCBvbiB0aGUKKyAgICAgICAgcmVjZWl2aW5nIHNpZGUgb2Yg
dGhlIGNvbm5lY3Rpb24uCisKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzQ29jb2EubW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogQWRkZWQuCisgICAgICAgIChJUEM6
OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1E
YXRhKTogQWRkZWQuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNN
YWMubW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOiBE
ZWxldGVkLgorCiAyMDIxLTAyLTE5ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4K
IAogICAgICAgICBbUGF5bWVudCBSZXF1ZXN0XSBhZGQgc3VwcG9ydCBmb3IgQXBwbGUgUGF5IHBh
eW1lbnQgbWV0aG9kIG1vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29h
L1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29j
b2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW0KaW5kZXggNzZhZmI3MmZmMmZkLi43MTk1
ZWEzNTcwMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVB
cmd1bWVudENvZGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dl
YkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9Gb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRBdHRyaWJ1dGVzLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmg+CiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNTQzLDQgKzU0NCw1MiBAQCBPcHRpb25hbDxG
b250UGxhdGZvcm1EYXRhPiBBcmd1bWVudENvZGVyPFJlZjxGb250Pj46OmRlY29kZVBsYXRmb3Jt
RGF0YShEZWNvZGVyJgogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKGN0Rm9udC5nZXQoKSwg
c2l6ZS52YWx1ZSgpLCBzeW50aGV0aWNCb2xkLnZhbHVlKCksIHN5bnRoZXRpY09ibGlxdWUudmFs
dWUoKSwgb3JpZW50YXRpb24udmFsdWUoKSwgd2lkdGhWYXJpYW50LnZhbHVlKCksIHRleHRSZW5k
ZXJpbmdNb2RlLnZhbHVlKCkpOwogfQogCit2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQoreworICAgIFJldGFp
blB0cjxOU1VSTFJlcXVlc3Q+IHJlcXVlc3RUb1NlcmlhbGl6ZSA9IHJlc291cmNlUmVxdWVzdC5u
c1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRU
UEJvZHkpOworCisgICAgYm9vbCByZXF1ZXN0SXNQcmVzZW50ID0gcmVxdWVzdFRvU2VyaWFsaXpl
OworICAgIGVuY29kZXIgPDwgcmVxdWVzdElzUHJlc2VudDsKKworICAgIGlmICghcmVxdWVzdElz
UHJlc2VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgZG9uJ3Qgc2VuZCBIVFRQIGJv
ZHkgb3ZlciBJUEMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KKyAgICAvLyBBbHNvLCBpdCdzIG5v
dCBhbHdheXMgcG9zc2libGUgdG8gZG8sIGFzIHN0cmVhbXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBp
biBwcm9jZXNzIHRoYXQgZG9lcyBuZXR3b3JraW5nLgorICAgIGlmIChbcmVxdWVzdFRvU2VyaWFs
aXplIEhUVFBCb2R5XSB8fCBbcmVxdWVzdFRvU2VyaWFsaXplIEhUVFBCb2R5U3RyZWFtXSkgewor
ICAgICAgICByZXF1ZXN0VG9TZXJpYWxpemUgPSBhZG9wdE5TKFtyZXF1ZXN0VG9TZXJpYWxpemUg
bXV0YWJsZUNvcHldKTsKKyAgICAgICAgWyhOU011dGFibGVVUkxSZXF1ZXN0ICopcmVxdWVzdFRv
U2VyaWFsaXplIHNldEhUVFBCb2R5Om5pbF07CisgICAgICAgIFsoTlNNdXRhYmxlVVJMUmVxdWVz
dCAqKXJlcXVlc3RUb1NlcmlhbGl6ZSBzZXRIVFRQQm9keVN0cmVhbTpuaWxdOworICAgIH0KKwor
ICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIHJlcXVlc3RUb1NlcmlhbGl6ZS5nZXQoKSk7CisKKyAg
ICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXF1ZXN0ZXIoKTsKK30KKworYm9vbCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0YShE
ZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVz
dCkKK3sKKyAgICBib29sIHJlcXVlc3RJc1ByZXNlbnQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXF1ZXN0SXNQcmVzZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFy
ZXF1ZXN0SXNQcmVzZW50KSB7CisgICAgICAgIHJlc291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBhdXRv
IHJlcXVlc3QgPSBJUEM6OmRlY29kZTxOU1VSTFJlcXVlc3Q+KGRlY29kZXIsIE5TVVJMUmVxdWVz
dC5jbGFzcyk7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXNvdXJjZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QocmVxdWVzdC0+Z2V0
KCkpOworICAgIAorICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyIHJlcXVl
c3RlcjsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVlc3RlcikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXNvdXJjZVJlcXVlc3Quc2V0UmVxdWVzdGVyKHJlcXVlc3Rlcik7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQppbmRleCA4
M2MyYTg3MzNjOGEuLmM1OTUwNjhhNmE0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCkBAIC01MCwyMjEgKzUwLDYgQEAK
IAogbmFtZXNwYWNlIElQQyB7CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFy
eVJlZj4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oQ0ZJbmRleCB2ZXJzaW9uLCBD
RlR5cGVSZWYqIG9iamVjdHMsIENGSW5kZXggb2JqZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiBw
cm90b2NvbFByb3BlcnRpZXMsIENGTnVtYmVyUmVmIGV4cGVjdGVkQ29udGVudExlbmd0aCwgQ0ZT
dHJpbmdSZWYgbWltZVR5cGUsIENGVHlwZVJlZiB0b2tlbk51bGwpCi17Ci0gICAgYXV0byBhcmNo
aXZlTGlzdEFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCAwLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0KLSAgICBmb3IgKENGSW5kZXgg
aSA9IDA7IGkgPCBvYmplY3RDb3VudDsgKytpKSB7Ci0gICAgICAgIENGVHlwZVJlZiBvYmplY3Qg
PSBvYmplY3RzW2ldOwotICAgICAgICBpZiAob2JqZWN0KSB7Ci0gICAgICAgICAgICBDRkFycmF5
QXBwZW5kVmFsdWUoYXJjaGl2ZUxpc3RBcnJheS5nZXQoKSwgb2JqZWN0KTsKLSAgICAgICAgICAg
IENGUmVsZWFzZShvYmplY3QpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQXBw
ZW5kIG91ciB0b2tlbiBudWxsIHJlcHJlc2VudGF0aW9uLgotICAgICAgICAgICAgQ0ZBcnJheUFw
cGVuZFZhbHVlKGFyY2hpdmVMaXN0QXJyYXkuZ2V0KCksIHRva2VuTnVsbCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0
ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2Fs
bEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotCi0gICAgYXV0byB2
ZXJzaW9uTnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwgJnZlcnNpb24pKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigidmVyc2lvbiIpLCB2ZXJzaW9uTnVtYmVyLmdl
dCgpKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigi
YXJjaGl2ZUxpc3QiKSwgYXJjaGl2ZUxpc3RBcnJheS5nZXQoKSk7Ci0KLSAgICBpZiAocHJvdG9j
b2xQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnku
Z2V0KCksIENGU1RSKCJwcm90b2NvbFByb3BlcnRpZXMiKSwgcHJvdG9jb2xQcm9wZXJ0aWVzKTsK
LSAgICAgICAgQ0ZSZWxlYXNlKHByb3RvY29sUHJvcGVydGllcyk7Ci0gICAgfQotCi0gICAgaWYg
KGV4cGVjdGVkQ29udGVudExlbmd0aCkgewotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShk
aWN0aW9uYXJ5LmdldCgpLCBDRlNUUigiZXhwZWN0ZWRDb250ZW50TGVuZ3RoIiksIGV4cGVjdGVk
Q29udGVudExlbmd0aCk7Ci0gICAgICAgIENGUmVsZWFzZShleHBlY3RlZENvbnRlbnRMZW5ndGgp
OwotICAgIH0KLQotICAgIGlmIChtaW1lVHlwZSkgewotICAgICAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigibWltZVR5cGUiKSwgbWltZVR5cGUpOwotICAg
ICAgICBDRlJlbGVhc2UobWltZVR5cGUpOwotICAgIH0KLQotICAgIENGQWxsb2NhdG9yRGVhbGxv
Y2F0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBvYmplY3RzKTsKLQotICAgIHJldHVybiBkaWN0aW9u
YXJ5OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+IGJvb2wgZXh0cmFjdERpY3Rp
b25hcnlWYWx1ZShDRkRpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgQ0ZTdHJpbmdSZWYga2V5LCBW
YWx1ZVR5cGUqIHJlc3VsdCkKLXsKLSAgICBhdXRvIHVudHlwZWRWYWx1ZSA9IENGRGljdGlvbmFy
eUdldFZhbHVlKGRpY3Rpb25hcnksIGtleSk7Ci0gICAgYXV0byB2YWx1ZSA9IGR5bmFtaWNfY2Zf
Y2FzdDxWYWx1ZVR5cGU+KHVudHlwZWRWYWx1ZSk7Ci0gICAgaWYgKHVudHlwZWRWYWx1ZSAmJiAh
dmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICAq
cmVzdWx0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0
ZUFyY2hpdmVMaXN0KENGRGljdGlvbmFyeVJlZiByZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRv
a2VuTnVsbCwgQ0ZJbmRleCogdmVyc2lvbiwgQ0ZUeXBlUmVmKiogb2JqZWN0cywgQ0ZJbmRleCog
b2JqZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiogcHJvdG9jb2xQcm9wZXJ0aWVzLCBDRk51bWJl
clJlZiogZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBDRlN0cmluZ1JlZiogbWltZVR5cGUpCi17Ci0g
ICAgYXV0byB2ZXJzaW9uTnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoInZlcnNpb24iKSkpOwotICAg
IGlmICghdmVyc2lvbk51bWJlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFD
Rk51bWJlckdldFZhbHVlKHZlcnNpb25OdW1iZXIsIGtDRk51bWJlckNGSW5kZXhUeXBlLCB2ZXJz
aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBhcmNoaXZlTGlzdEFycmF5
ID0gZHluYW1pY19jZl9jYXN0PENGQXJyYXlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJlcHJl
c2VudGF0aW9uLCBDRlNUUigiYXJjaGl2ZUxpc3QiKSkpOwotICAgIGlmICghYXJjaGl2ZUxpc3RB
cnJheSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBhcmNoaXZlTGlzdEFycmF5
Q291bnQgPSBDRkFycmF5R2V0Q291bnQoYXJjaGl2ZUxpc3RBcnJheSk7Ci0gICAgaWYgKCFpc0lu
Qm91bmRzPHNpemVfdD4oYXJjaGl2ZUxpc3RBcnJheUNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byBidWZmZXJTaXplID0gQ2hlY2tlZFNpemUoc2l6ZW9mKENGVHlwZVJl
ZikpICogc3RhdGljX2Nhc3Q8c2l6ZV90PihhcmNoaXZlTGlzdEFycmF5Q291bnQpOwotICAgIGlm
IChidWZmZXJTaXplLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKCFleHRyYWN0RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigicHJv
dG9jb2xQcm9wZXJ0aWVzIiksIHByb3RvY29sUHJvcGVydGllcykpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoIWV4dHJhY3REaWN0aW9uYXJ5VmFsdWUocmVwcmVzZW50YXRpb24sIENG
U1RSKCJleHBlY3RlZENvbnRlbnRMZW5ndGgiKSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZXh0cmFjdERpY3Rpb25hcnlWYWx1ZShyZXBy
ZXNlbnRhdGlvbiwgQ0ZTVFIoIm1pbWVUeXBlIiksIG1pbWVUeXBlKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgKm9iamVjdENvdW50ID0gYXJjaGl2ZUxpc3RBcnJheUNvdW50OwotICAg
ICpvYmplY3RzID0gc3RhdGljX2Nhc3Q8Q0ZUeXBlUmVmKj4oZmFzdE1hbGxvYyhidWZmZXJTaXpl
LnVuc2FmZUdldCgpKSk7Ci0KLSAgICBDRkFycmF5R2V0VmFsdWVzKGFyY2hpdmVMaXN0QXJyYXks
IENGUmFuZ2VNYWtlKDAsICpvYmplY3RDb3VudCksICpvYmplY3RzKTsKLSAgICBmb3IgKENGSW5k
ZXggaSA9IDA7IGkgPCAqb2JqZWN0Q291bnQ7ICsraSkgewotICAgICAgICBpZiAoKCpvYmplY3Rz
KVtpXSA9PSB0b2tlbk51bGwpCi0gICAgICAgICAgICAoKm9iamVjdHMpW2ldID0gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKENGVVJMUmVxdWVzdFJl
ZiBjZlJlcXVlc3QsIENGVHlwZVJlZiB0b2tlbk51bGwpCi17Ci0gICAgQ0ZJbmRleCB2ZXJzaW9u
OwotICAgIENGVHlwZVJlZiogb2JqZWN0czsKLSAgICBDRkluZGV4IG9iamVjdENvdW50OwotICAg
IENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3BlcnRpZXM7Ci0KLSAgICAvLyBGSVhNRSAoMTI4
ODk1MTgpOiBEbyBub3Qgc2VyaWFsaXplIEhUVFAgbWVzc2FnZSBib2R5LgotICAgIC8vIDEuIEl0
IGNhbiBiZSBsYXJnZSBhbmQgdGh1cyBjb3N0bHkgdG8gc2VuZCBhY3Jvc3MuCi0gICAgLy8gMi4g
SXQgaXMgbWlzbGVhZGluZyB0byBwcm92aWRlIGEgYm9keSB3aXRoIHNvbWUgcmVxdWVzdHMsIHdo
aWxlIG90aGVycyB1c2UgYm9keSBzdHJlYW1zLCB3aGljaCBjYW5ub3QgYmUgc2VyaWFsaXplZCBh
dCBhbGwuCi0KLSAgICBfQ0ZVUkxSZXF1ZXN0Q3JlYXRlQXJjaGl2ZUxpc3Qoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgY2ZSZXF1ZXN0LCAmdmVyc2lvbiwgJm9iamVjdHMsICZvYmplY3RDb3VudCwgJnBy
b3RvY29sUHJvcGVydGllcyk7Ci0KLSAgICAvLyBUaGlzIHdpbGwgZGVhbGxvY2F0ZSB0aGUgcGFz
c2VkIGluIGFyZ3VtZW50cy4KLSAgICByZXR1cm4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50
YXRpb24odmVyc2lvbiwgb2JqZWN0cywgb2JqZWN0Q291bnQsIHByb3RvY29sUHJvcGVydGllcywg
bnVsbHB0ciwgbnVsbHB0ciwgdG9rZW5OdWxsKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRlVS
TFJlcXVlc3RSZWY+IGNyZWF0ZUNGVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRh
dGlvbihDRkRpY3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwp
Ci17Ci0gICAgQ0ZJbmRleCB2ZXJzaW9uOwotICAgIENGVHlwZVJlZiogb2JqZWN0czsKLSAgICBD
RkluZGV4IG9iamVjdENvdW50OwotICAgIENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3BlcnRp
ZXM7Ci0KLSAgICBpZiAoIWNyZWF0ZUFyY2hpdmVMaXN0KHJlcHJlc2VudGF0aW9uLCB0b2tlbk51
bGwsICZ2ZXJzaW9uLCAmb2JqZWN0cywgJm9iamVjdENvdW50LCAmcHJvdG9jb2xQcm9wZXJ0aWVz
LCBudWxscHRyLCBudWxscHRyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRv
IGNmUmVxdWVzdCA9IGFkb3B0Q0YoX0NGVVJMUmVxdWVzdENyZWF0ZUZyb21BcmNoaXZlTGlzdChr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCB2ZXJzaW9uLCBvYmplY3RzLCBvYmplY3RDb3VudCwgcHJvdG9j
b2xQcm9wZXJ0aWVzKSk7Ci0gICAgZmFzdEZyZWUob2JqZWN0cyk7Ci0gICAgcmV0dXJuIFdURk1v
dmUoY2ZSZXF1ZXN0KTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNy
ZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKE5TVVJMUmVxdWVzdCAqcmVxdWVzdCwgQ0ZU
eXBlUmVmIHRva2VuTnVsbCkKLXsKLSAgICByZXR1cm4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVz
ZW50YXRpb24oW3JlcXVlc3QgX0NGVVJMUmVxdWVzdF0sIHRva2VuTnVsbCk7Ci19Ci0KLXN0YXRp
YyBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiBjcmVhdGVOU1VSTFJlcXVlc3RGcm9tU2VyaWFsaXph
YmxlUmVwcmVzZW50YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIHJlcHJlc2VudGF0aW9uLCBDRlR5cGVS
ZWYgdG9rZW5OdWxsKQotewotICAgIGF1dG8gY2ZSZXF1ZXN0ID0gY3JlYXRlQ0ZVUkxSZXF1ZXN0
RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKHJlcHJlc2VudGF0aW9uLCB0b2tlbk51bGwp
OwotICAgIGlmICghY2ZSZXF1ZXN0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAg
ICByZXR1cm4gYWRvcHROUyhbW05TVVJMUmVxdWVzdCBhbGxvY10gX2luaXRXaXRoQ0ZVUkxSZXF1
ZXN0OmNmUmVxdWVzdC5nZXQoKV0pOwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQotewotICAgIFJl
dGFpblB0cjxOU1VSTFJlcXVlc3Q+IHJlcXVlc3RUb1NlcmlhbGl6ZSA9IHJlc291cmNlUmVxdWVz
dC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRl
SFRUUEJvZHkpOwotCi0gICAgYm9vbCByZXF1ZXN0SXNQcmVzZW50ID0gcmVxdWVzdFRvU2VyaWFs
aXplOwotICAgIGVuY29kZXIgPDwgcmVxdWVzdElzUHJlc2VudDsKLQotICAgIGlmICghcmVxdWVz
dElzUHJlc2VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgZG9uJ3Qgc2VuZCBIVFRQ
IGJvZHkgb3ZlciBJUEMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KLSAgICAvLyBBbHNvLCBpdCdz
IG5vdCBhbHdheXMgcG9zc2libGUgdG8gZG8sIGFzIHN0cmVhbXMgY2FuIG9ubHkgYmUgY3JlYXRl
ZCBpbiBwcm9jZXNzIHRoYXQgZG9lcyBuZXR3b3JraW5nLgotICAgIGlmIChbcmVxdWVzdFRvU2Vy
aWFsaXplIEhUVFBCb2R5XSB8fCBbcmVxdWVzdFRvU2VyaWFsaXplIEhUVFBCb2R5U3RyZWFtXSkg
ewotICAgICAgICByZXF1ZXN0VG9TZXJpYWxpemUgPSBhZG9wdE5TKFtyZXF1ZXN0VG9TZXJpYWxp
emUgbXV0YWJsZUNvcHldKTsKLSAgICAgICAgWyhOU011dGFibGVVUkxSZXF1ZXN0ICopcmVxdWVz
dFRvU2VyaWFsaXplIHNldEhUVFBCb2R5Om5pbF07Ci0gICAgICAgIFsoTlNNdXRhYmxlVVJMUmVx
dWVzdCAqKXJlcXVlc3RUb1NlcmlhbGl6ZSBzZXRIVFRQQm9keVN0cmVhbTpuaWxdOwotICAgIH0K
LQotICAgIGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9u
KHJlcXVlc3RUb1NlcmlhbGl6ZS5nZXQoKSwgSVBDOjp0b2tlbk51bGxwdHJUeXBlUmVmKCkpOwot
ICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIGRpY3Rpb25hcnkuZ2V0KCkpOwotCi0gICAgLy8gVGhl
IGZhbGxiYWNrIGFycmF5IGlzIHBhcnQgb2YgTlNVUkxSZXF1ZXN0LCBidXQgaXQgaXMgbm90IGVu
Y29kZWQgYnkgV0tOU1VSTFJlcXVlc3RDcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbi4K
LSAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlv
bkVuY29kaW5nRmFsbGJhY2tBcnJheSgpOwotICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0
LnJlcXVlc3RlcigpOwotICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LmNhY2hlUG9saWN5
KCk7Ci0gICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QuaXNBcHBCb3VuZCgpOwotfQotCi1i
b29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZv
cm1EYXRhKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3Vy
Y2VSZXF1ZXN0KQotewotICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudDsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlcXVlc3RJc1ByZXNlbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoIXJlcXVlc3RJc1ByZXNlbnQpIHsKLSAgICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0gV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGRpY3Rpb25hcnk7Ci0gICAgaWYgKCFJUEM6
OmRlY29kZShkZWNvZGVyLCBkaWN0aW9uYXJ5KSB8fCAhZGljdGlvbmFyeSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYXV0byBuc1VSTFJlcXVlc3QgPSBjcmVhdGVOU1VSTFJlcXVlc3RG
cm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oZGljdGlvbmFyeS5nZXQoKSwgSVBDOjp0b2tl
bk51bGxwdHJUeXBlUmVmKCkpOwotICAgIGlmICghbnNVUkxSZXF1ZXN0KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXNvdXJjZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QobnNVUkxSZXF1ZXN0LmdldCgpKTsKLSAgICAKLSAgICBWZWN0b3I8U3RyaW5nPiByZXNwb25z
ZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzb3VyY2VSZXF1ZXN0LnNldFJlc3Bv
bnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KAotICAgICAgICByZXNw
b25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkgPiAwID8g
cmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMF0gOiBTdHJp
bmcoKSwKLSAgICAgICAgcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXkuc2l6ZSgpID4gMSA/IHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxs
YmFja0FycmF5WzFdIDogU3RyaW5nKCksCi0gICAgICAgIHJlc3BvbnNlQ29udGVudERpc3Bvc2l0
aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnNpemUoKSA+IDIgPyByZXNwb25zZUNvbnRlbnREaXNw
b3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVsyXSA6IFN0cmluZygpCi0gICAgKTsKLQotICAg
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlcXVlc3RlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXNvdXJjZVJlcXVlc3Quc2V0UmVxdWVzdGVyKHJlcXVlc3Rlcik7Ci0KLSAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBjYWNoZVBvbGljeTsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGNhY2hlUG9saWN5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc291cmNl
UmVxdWVzdC5zZXRDYWNoZVBvbGljeShjYWNoZVBvbGljeSk7Ci0KLSAgICBib29sIGlzQXBwQm91
bmQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc0FwcEJvdW5kKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJlc291cmNlUmVxdWVzdC5zZXRJc0FwcEJvdW5kKGlzQXBwQm91bmQpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDZXJ0
aWZpY2F0ZUluZm8+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6Q2Vy
dGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCiB7CiAgICAgZW5jb2RlciA8PCBjZXJ0aWZp
Y2F0ZUluZm8udHlwZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IGRjNzhiYzRkY2QyYS4uMDExNDg5MzM5MTMwIDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEt
MDItMTkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2Vy
aWFsaXplIE5TVVJMUmVxdWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IHRlc3QgdG8gZW5zdXJlIHdlIGNhbiBz
dWNjZXNzZnVsbHkgbG9hZCBVUkxzIHdpdGggYWNjZW50ZWQgY2hhcmFjdGVycywKKyAgICAgICAg
YW5kIHRvIHRlc3QgdGhlIHVwZGF0ZWQgSVBDIHNlcmlhbGl6YXRpb24gZm9yIE5TVVJMUmVxdWVz
dC46cQorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvQS8zMDMvMjQ3LzMw
My8yNDNvLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvTG9hZEludmFsaWRVUkxSZXF1ZXN0Lm1tOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS1dlYlZpZXdMb2FkQVBJcy5tbToKKyAgICAgICAgKFRFU1QpOgorCiAyMDIxLTAyLTE5ICBB
ZGl0eWEgS2VlcnRoaSAgPGFrZWVydGhpQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXVtGQ1Jd
IEVuYWJsZSB0aGUgbmV3IGFwcGVhcmFuY2UgYnkgZGVmYXVsdApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCAzYzJmMDY4ZTFkMDguLjJhODIzYWI1NzM3OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTU1Nyw2ICs1NTcsNyBAQAogCQk3QTkwOUE4MzFEODc3NDgwMDA3RTEwRjggLyogSW50
U2l6ZVRlc3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdBOTA5QTc1MUQ4Nzc0NzUwMDdFMTBGOCAvKiBJbnRTaXplVGVzdHMuY3BwICovOyB9Owog
CQk3QTk1QkRFMTFFOUJFQzVGMDA4NjU0OTggLyogSW5qZWN0ZWRCdW5kbGVBcHBsZUV2ZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBOTVCREUw
MUU5QkVDNDAwMDg2NTQ5OCAvKiBJbmplY3RlZEJ1bmRsZUFwcGxlRXZlbnQuY3BwICovOyB9Owog
CQk3QTk1QkRFMjFFOUJFQzc0MDA4NjU0OTggLyogSW5qZWN0ZWRCdW5kbGVBcHBsZUV2ZW50X0J1
bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QTk1QkRERjFFOUJFQzQwMDA4NjU0OTggLyogSW5qZWN0ZWRCdW5kbGVBcHBsZUV2ZW50X0J1bmRs
ZS5jcHAgKi87IH07CisJCTdBQTVDMTQ5MjVFMDQxRjQwMDZERDQwOCAvKiBBY8ynYcyDby5odG1s
IGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdB
QTVDMTQ4MjVFMDQxRjQwMDZERDQwOCAvKiBBY8ynYcyDby5odG1sICovOyB9OwogCQk3QUM3QjU2
RDIwRDk3NjlGMDAyQzA5QTAgLyogQ3VzdG9tQnVuZGxlUGFyYW1ldGVyLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FDN0I1NkMyMEQ5NzY4RjAwMkMw
OUEwIC8qIEN1c3RvbUJ1bmRsZVBhcmFtZXRlci5tbSAqLzsgfTsKIAkJN0FDN0I1NkUyMEQ5NzZB
NzAwMkMwOUEwIC8qIEN1c3RvbUJ1bmRsZVBhcmFtZXRlcl9CdW5kbGUubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUM3QjU2QjIwRDk3NjhFMDAyQzA5
QTAgLyogQ3VzdG9tQnVuZGxlUGFyYW1ldGVyX0J1bmRsZS5tbSAqLzsgfTsKIAkJN0FDN0I1NzAy
MEQ5QkE1QjAwMkMwOUEwIC8qIEN1c3RvbUJ1bmRsZU9iamVjdC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBQzdCNTZGMjBEOUJBNUIwMDJDMDlBMCAv
KiBDdXN0b21CdW5kbGVPYmplY3QubW0gKi87IH07CkBAIC0xMzEyLDYgKzEzMTMsNyBAQAogCQkJ
CTFBOUU1MkM5MTNFNjVFRjQwMDY5MTdGNSAvKiAxOC1jaGFyYWN0ZXJzLmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8sCiAJCQkJNTVBODE4MDAyMTgxMDIyMTAwMDRBMzlBIC8qIDQwMHg0MDAtZ3Jl
ZW4ucG5nIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTM3OTAyOEI5MTRGQUMyNEMwMDdFNkI0
MyAvKiBhY2NlcHRzRmlyc3RNb3VzZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJCTdB
QTVDMTQ5MjVFMDQxRjQwMDZERDQwOCAvKiBBY8ynYcyDby5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovLAogCQkJCTcyNUMzRUYzMjIwNThBNUIwMDdDMzZGQyAvKiBBZGRpdGlvbmFsU3VwcG9ydGVk
SW1hZ2VUeXBlcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTFDMkI4MTg3MUM4OTI1
QTAwMEE1NTI5RiAvKiBBaGVtLnR0ZiBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk0NkMxRUE5
ODI1NzU4ODIwMDA1RTQwOUUgLyogYWxlcnQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAg
LTIzNjUsNiArMjM2Nyw3IEBACiAJCTdBOTVCREUwMUU5QkVDNDAwMDg2NTQ5OCAvKiBJbmplY3Rl
ZEJ1bmRsZUFwcGxlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5qZWN0ZWRCdW5kbGVBcHBsZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0E5OUQ5OTMxQUQ0QTI5RDAwMzczMTQxIC8qIE1lbnVUeXBlc0Zvck1vdXNlRXZlbnRz
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTWVudVR5cGVzRm9y
TW91c2VFdmVudHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQTAyMUJBMUFC
MDlFQTcwMDUyOTUzRiAvKiBEYXRlTWF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEYXRlTWF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdB
QTVDMTQ4MjVFMDQxRjQwMDZERDQwOCAvKiBBY8ynYcyDby5odG1sICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBuYW1lID0gIkFjzKdh
zINvLmh0bWwiOyBwYXRoID0gIlRlc3RzL1dlYktpdC9BY8ynYcyDby5odG1sIjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FBNkExNTExQUFDMEIzMTAwMkIyRUQzIC8qIFdvcmtRdWV1
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrUXVldWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUIwMTczOTIzRkIyQkYwMDAyRjgzNjYg
LyogVGVzdFdlYktpdEFQSS1tYWNPUy5lbnRpdGxlbWVudHMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0
LmVudGl0bGVtZW50czsgcGF0aCA9ICJUZXN0V2ViS2l0QVBJLW1hY09TLmVudGl0bGVtZW50cyI7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQzdCNTZCMjBEOTc2OEUwMDJDMDlBMCAv
KiBDdXN0b21CdW5kbGVQYXJhbWV0ZXJfQnVuZGxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
Q3VzdG9tQnVuZGxlUGFyYW1ldGVyX0J1bmRsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTMwOTksNiArMzEwMiw3IEBACiAJCTA4RkI3Nzk0RkU4NDE1NURDMDJBQUMwNyAvKiBU
ZXN0V2ViS2l0QVBJICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQk3QUE1QzE0ODI1RTA0MUY0MDA2REQ0MDggLyogQWPMp2HMg28uaHRtbCAqLywKIAkJCQk0
OUFFRUY2ODI0MDcyNzZGMDBDODdFNEMgLyogSW5mby5wbGlzdCAqLywKIAkJCQk1QzlEOTIyNjIy
RDdERDdCMDA4RTkyNjYgLyogRGVyaXZlZCBTb3VyY2VzICovLAogCQkJCTVDOUQ5MjFEMjJEN0RC
RjcwMDhFOTI2NiAvKiBTb3VyY2VzLnR4dCAqLywKZGlmZiAtLWdpdCAiYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdC9BXDMwM1wyNDdcMzAzXDI0M28uaHRtbCIgImIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvQVwzMDNcMjQ3XDMwM1wyNDNvLmh0bWwiCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTJjZjg3MzY0OTdkCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvQWPMp2HMg28uaHRtbApA
QCAtMCwwICsxLDUgQEAKKzxodG1sPgorPGJvZHk+CisgIFNpbXBsZSBIVE1MIGZpbGUuCis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0xvYWRJbnZhbGlkVVJMUmVxdWVzdC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvTG9hZEludmFsaWRVUkxSZXF1ZXN0Lm1tCmluZGV4IDdkNjU0ZWQzYWYy
ZC4uOTZmZThhZDQ0ZGQxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0xvYWRJbnZhbGlkVVJMUmVxdWVzdC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvYWRJbnZhbGlkVVJMUmVxdWVzdC5tbQpAQCAtOTMsNyAr
OTMsNyBAQCBURVNUKFdlYktpdCwgTG9hZEludmFsaWRVUkxSZXF1ZXN0Tm9uQVNDSUkpCiAgICAg
ZGVsZWdhdGUuZ2V0KCkuZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbiA9IF4oV0tXZWJWaWV3
ICosIFdLTmF2aWdhdGlvbiAqLCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfV0tf
U1RSRVEoZXJyb3IuZG9tYWluLCBAIldlYktpdEVycm9yRG9tYWluIik7CiAgICAgICAgIEVYUEVD
VF9FUShlcnJvci5jb2RlLCBXZWJLaXRFcnJvckNhbm5vdFNob3dVUkwpOwotICAgICAgICBFWFBF
Q1RfV0tfU1RSRVEoW2Vycm9yLnVzZXJJbmZvW0AiTlNFcnJvckZhaWxpbmdVUkxLZXkiXSBhYnNv
bHV0ZVN0cmluZ10sICJodHRwOi8vJUMzJUEyJUMyJTgwJUMyJTgwIik7CisgICAgICAgIEVYUEVD
VF9XS19TVFJFUShbZXJyb3IudXNlckluZm9bQCJOU0Vycm9yRmFpbGluZ1VSTEtleSJdIGFic29s
dXRlU3RyaW5nXSwgImh0dHA6Ly8lRTIlODAlODAiKTsKICAgICAgICAgZG9uZSA9IHRydWU7CiAg
ICAgfTsKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtXS1dlYlZpZXcgbmV3XSk7CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0xv
YWRBUElzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZp
ZXdMb2FkQVBJcy5tbQppbmRleCBiZWQ1MDBlYTMzOTQuLjBlN2ZiNzc4NGIwMyAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJ
cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmll
d0xvYWRBUElzLm1tCkBAIC0xMzIsMyArMTMyLDIwIEBAIFRFU1QoV0tXZWJWaWV3LCBMb2FkU2lt
dWxhdGVkUmVxdWVzdFVwZGF0ZXNCYWNrRm9yd2FyZExpc3QpCiAgICAgRVhQRUNUX1RSVUUoIWxp
c3QuZm9yd2FyZEl0ZW0pOwogICAgIEVYUEVDVF9XS19TVFJFUShleGFtcGxlVVJMU3RyaW5nLCBb
bGlzdC5iYWNrSXRlbS5VUkwgYWJzb2x1dGVTdHJpbmddKTsKIH0KKworVEVTVChXS1dlYlZpZXcs
IExvYWRBY2NlbnRlZEZpbGVSZXF1ZXN0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYw
MCldKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdE5hdmlnYXRpb25EZWxl
Z2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpk
ZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBjb25zdCBVSW50OCBieXRlc1s2XSA9IHsgJ0EnLCAweEMz
LCAweEE3LCAweEMzLCAweEEzLCAnbycgfTsKKyAgICBhdXRvIGZpbGVOYW1lID0gYWRvcHROUyhb
W05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmJ5dGVzIGxlbmd0aDo2IGVuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nXSk7CisKKyAgICBOU1VSTCAqZmlsZSA9IFtbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6ZmlsZU5hbWUuZ2V0KCkgd2l0aEV4dGVuc2lvbjpAImh0
bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgTlNVUkxS
ZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpmaWxlXTsKKyAg
ICBbd2ViVmlldyBsb2FkRmlsZVJlcXVlc3Q6cmVxdWVzdCBhbGxvd2luZ1JlYWRBY2Nlc3NUb1VS
TDpmaWxlLlVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07CisgICAgW2RlbGVnYXRlIHdh
aXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEod2ViVmlldy5n
ZXQoKS5fcmVzb3VyY2VEaXJlY3RvcnlVUkwucGF0aCwgZmlsZS5VUkxCeURlbGV0aW5nTGFzdFBh
dGhDb21wb25lbnQucGF0aCk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421042</attachid>
            <date>2021-02-19 15:11:44 -0800</date>
            <delta_ts>2021-02-19 21:47:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222145-20210219151143.patch</filename>
            <type>text/plain</type>
            <size>18684</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDJjZDhlZTM4Mzg2NzMzYTIz
MzA5ZTdjNDk2MzUyNTc1ODVmZjgxYWYuLjgyMDk4ZjkwMmIwYjVjYTEzNGFiZDU0NDEwZDcyZjVj
YTA4MWI1ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDItMTggIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVx
dWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5nIGxheW91dCBhbmQgV2ViS2l0QVBJIHRlc3RzLgor
CisgICAgICAgIFJldmlzZSBJUEMgc2VyaWFsaXphdGlvbiBzbyB0aGF0IE5TVVJMQ29ubmVjdGlv
biAobW9kZXJuKSBDb2NvYSBidWlsZHMgc2VyaWFsaXplIHRoZQorICAgICAgICBOU1VSTFJlcXVl
c3Qgb2JqZWN0LCByYXRoZXIgdGhhbiBicmlkZ2luZyB0byBDRlVSTFJlcXVlc3QgYW5kIHNlcmlh
bGl6aW5nIHRoYXQuIFRoaXMKKyAgICAgICAgZW5zdXJlcyB0aGF0IHRoZSBmdWxsIHNldCBvZiBO
U1VSTFJlcXVlc3QgZmVhdHVyZXMgYXJlIGFjY3VyYXRlbHkgcmVjb25zdGl0dXRlZCBvbiB0aGUK
KyAgICAgICAgcmVjZWl2aW5nIHNpZGUgb2YgdGhlIGNvbm5lY3Rpb24uCisKKyAgICAgICAgKiBT
aGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW06CisgICAgICAgIChJUEM6
OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1E
YXRhKTogQWRkZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKTogQWRkZWQuCisgICAgICAgICogU2hhcmVk
L21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogRGVs
ZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOiBEZWxldGVkLgorCiAyMDIxLTAyLTE5ICBEZXZpbiBS
b3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBbUGF5bWVudCBSZXF1ZXN0XSBh
ZGQgc3VwcG9ydCBmb3IgQXBwbGUgUGF5IHBheW1lbnQgbWV0aG9kIG1vZGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1t
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2Eu
bW0KaW5kZXggNzZhZmI3MmZmMmZkNGY5N2I1Y2YwMTMyZWVhOWIzMzdmYTQ0YWI0My4uYzBkYzQ2
NGQ2N2RmMjUwY2U2ZjRlZTA0MmU1M2I1Y2YwN2NhMzZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW0KQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNCw2ICszNCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnQuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRm9udEF0dHJpYnV0ZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbXBvcnQgPHBh
bC9zcGkvY2YvQ29yZVRleHRTUEkuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC01
NDMsNCArNTQ0LDU4IEBAIE9wdGlvbmFsPEZvbnRQbGF0Zm9ybURhdGE+IEFyZ3VtZW50Q29kZXI8
UmVmPEZvbnQ+Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKERlY29kZXImCiAgICAgcmV0dXJuIEZvbnRQ
bGF0Zm9ybURhdGEoY3RGb250LmdldCgpLCBzaXplLnZhbHVlKCksIHN5bnRoZXRpY0JvbGQudmFs
dWUoKSwgc3ludGhldGljT2JsaXF1ZS52YWx1ZSgpLCBvcmllbnRhdGlvbi52YWx1ZSgpLCB3aWR0
aFZhcmlhbnQudmFsdWUoKSwgdGV4dFJlbmRlcmluZ01vZGUudmFsdWUoKSk7CiB9CiAKK3ZvaWQg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURh
dGEoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNv
dXJjZVJlcXVlc3QpCit7CisgICAgUmV0YWluUHRyPE5TVVJMUmVxdWVzdD4gcmVxdWVzdFRvU2Vy
aWFsaXplID0gcmVzb3VyY2VSZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVw
ZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSk7CisKKyAgICBib29sIHJlcXVlc3RJc1By
ZXNlbnQgPSByZXF1ZXN0VG9TZXJpYWxpemU7CisgICAgZW5jb2RlciA8PCByZXF1ZXN0SXNQcmVz
ZW50OworCisgICAgaWYgKCFyZXF1ZXN0SXNQcmVzZW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBXZSBkb24ndCBzZW5kIEhUVFAgYm9keSBvdmVyIElQQyBmb3IgYmV0dGVyIHBlcmZvcm1h
bmNlLgorICAgIC8vIEFsc28sIGl0J3Mgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBkbywgYXMgc3Ry
ZWFtcyBjYW4gb25seSBiZSBjcmVhdGVkIGluIHByb2Nlc3MgdGhhdCBkb2VzIG5ldHdvcmtpbmcu
CisgICAgaWYgKFtyZXF1ZXN0VG9TZXJpYWxpemUgSFRUUEJvZHldIHx8IFtyZXF1ZXN0VG9TZXJp
YWxpemUgSFRUUEJvZHlTdHJlYW1dKSB7CisgICAgICAgIHJlcXVlc3RUb1NlcmlhbGl6ZSA9IGFk
b3B0TlMoW3JlcXVlc3RUb1NlcmlhbGl6ZSBtdXRhYmxlQ29weV0pOworICAgICAgICBbKE5TTXV0
YWJsZVVSTFJlcXVlc3QgKilyZXF1ZXN0VG9TZXJpYWxpemUgc2V0SFRUUEJvZHk6bmlsXTsKKyAg
ICAgICAgWyhOU011dGFibGVVUkxSZXF1ZXN0ICopcmVxdWVzdFRvU2VyaWFsaXplIHNldEhUVFBC
b2R5U3RyZWFtOm5pbF07CisgICAgfQorCisgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgcmVxdWVz
dFRvU2VyaWFsaXplLmdldCgpKTsKKworICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LnJl
cXVlc3RlcigpOworICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LmlzQXBwQm91bmQoKTsK
K30KKworYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmRlY29k
ZVBsYXRmb3JtRGF0YShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlc291cmNlUmVxdWVzdCkKK3sKKyAgICBib29sIHJlcXVlc3RJc1ByZXNlbnQ7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXF1ZXN0SXNQcmVzZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFyZXF1ZXN0SXNQcmVzZW50KSB7CisgICAgICAgIHJlc291cmNlUmVxdWVz
dCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBhdXRvIHJlcXVlc3QgPSBJUEM6OmRlY29kZTxOU1VSTFJlcXVlc3Q+KGRlY29k
ZXIsIE5TVVJMUmVxdWVzdC5jbGFzcyk7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXNvdXJjZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QocmVxdWVzdC0+Z2V0KCkpOworICAgIAorICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6
UmVxdWVzdGVyIHJlcXVlc3RlcjsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVlc3Rlcikp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXNvdXJjZVJlcXVlc3Quc2V0UmVxdWVzdGVy
KHJlcXVlc3Rlcik7CisKKyAgICBib29sIGlzQXBwQm91bmQ7CisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShpc0FwcEJvdW5kKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc291cmNlUmVx
dWVzdC5zZXRJc0FwcEJvdW5kKGlzQXBwQm91bmQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9X
ZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KaW5kZXggODNjMmE4NzMzYzhhNWFkMjc5NGY5MTMw
ZjY0YzI4YTY5MDE2NWJmMy4uYzU5NTA2OGE2YTRjNzdkMDYxMjgwYWEyNTc0NjRkNjZhYTNjMTAx
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENv
ZGVyc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzTWFjLm1tCkBAIC01MCwyMjEgKzUwLDYgQEAKIAogbmFtZXNwYWNlIElQQyB7CiAKLXN0
YXRpYyBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3JlYXRlU2VyaWFsaXphYmxl
UmVwcmVzZW50YXRpb24oQ0ZJbmRleCB2ZXJzaW9uLCBDRlR5cGVSZWYqIG9iamVjdHMsIENGSW5k
ZXggb2JqZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3BlcnRpZXMsIENGTnVt
YmVyUmVmIGV4cGVjdGVkQ29udGVudExlbmd0aCwgQ0ZTdHJpbmdSZWYgbWltZVR5cGUsIENGVHlw
ZVJlZiB0b2tlbk51bGwpCi17Ci0gICAgYXV0byBhcmNoaXZlTGlzdEFycmF5ID0gYWRvcHRDRihD
RkFycmF5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZUFycmF5
Q2FsbEJhY2tzKSk7Ci0KLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBvYmplY3RDb3VudDsg
KytpKSB7Ci0gICAgICAgIENGVHlwZVJlZiBvYmplY3QgPSBvYmplY3RzW2ldOwotICAgICAgICBp
ZiAob2JqZWN0KSB7Ci0gICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJjaGl2ZUxpc3RB
cnJheS5nZXQoKSwgb2JqZWN0KTsKLSAgICAgICAgICAgIENGUmVsZWFzZShvYmplY3QpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQXBwZW5kIG91ciB0b2tlbiBudWxsIHJlcHJl
c2VudGF0aW9uLgotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFyY2hpdmVMaXN0QXJy
YXkuZ2V0KCksIHRva2VuTnVsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIGRpY3Rp
b25hcnkgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25h
cnlWYWx1ZUNhbGxCYWNrcykpOwotCi0gICAgYXV0byB2ZXJzaW9uTnVtYmVyID0gYWRvcHRDRihD
Rk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwg
JnZlcnNpb24pKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBD
RlNUUigidmVyc2lvbiIpLCB2ZXJzaW9uTnVtYmVyLmdldCgpKTsKLSAgICBDRkRpY3Rpb25hcnlT
ZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigiYXJjaGl2ZUxpc3QiKSwgYXJjaGl2ZUxp
c3RBcnJheS5nZXQoKSk7Ci0KLSAgICBpZiAocHJvdG9jb2xQcm9wZXJ0aWVzKSB7Ci0gICAgICAg
IENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnkuZ2V0KCksIENGU1RSKCJwcm90b2NvbFBy
b3BlcnRpZXMiKSwgcHJvdG9jb2xQcm9wZXJ0aWVzKTsKLSAgICAgICAgQ0ZSZWxlYXNlKHByb3Rv
Y29sUHJvcGVydGllcyk7Ci0gICAgfQotCi0gICAgaWYgKGV4cGVjdGVkQ29udGVudExlbmd0aCkg
ewotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigi
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoIiksIGV4cGVjdGVkQ29udGVudExlbmd0aCk7Ci0gICAgICAg
IENGUmVsZWFzZShleHBlY3RlZENvbnRlbnRMZW5ndGgpOwotICAgIH0KLQotICAgIGlmIChtaW1l
VHlwZSkgewotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBD
RlNUUigibWltZVR5cGUiKSwgbWltZVR5cGUpOwotICAgICAgICBDRlJlbGVhc2UobWltZVR5cGUp
OwotICAgIH0KLQotICAgIENGQWxsb2NhdG9yRGVhbGxvY2F0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBvYmplY3RzKTsKLQotICAgIHJldHVybiBkaWN0aW9uYXJ5OwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZVR5cGU+IGJvb2wgZXh0cmFjdERpY3Rpb25hcnlWYWx1ZShDRkRpY3Rpb25hcnlS
ZWYgZGljdGlvbmFyeSwgQ0ZTdHJpbmdSZWYga2V5LCBWYWx1ZVR5cGUqIHJlc3VsdCkKLXsKLSAg
ICBhdXRvIHVudHlwZWRWYWx1ZSA9IENGRGljdGlvbmFyeUdldFZhbHVlKGRpY3Rpb25hcnksIGtl
eSk7Ci0gICAgYXV0byB2YWx1ZSA9IGR5bmFtaWNfY2ZfY2FzdDxWYWx1ZVR5cGU+KHVudHlwZWRW
YWx1ZSk7Ci0gICAgaWYgKHVudHlwZWRWYWx1ZSAmJiAhdmFsdWUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICAqcmVzdWx0ID0gdmFsdWU7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0ZUFyY2hpdmVMaXN0KENGRGljdGlvbmFy
eVJlZiByZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRva2VuTnVsbCwgQ0ZJbmRleCogdmVyc2lv
biwgQ0ZUeXBlUmVmKiogb2JqZWN0cywgQ0ZJbmRleCogb2JqZWN0Q291bnQsIENGRGljdGlvbmFy
eVJlZiogcHJvdG9jb2xQcm9wZXJ0aWVzLCBDRk51bWJlclJlZiogZXhwZWN0ZWRDb250ZW50TGVu
Z3RoLCBDRlN0cmluZ1JlZiogbWltZVR5cGUpCi17Ci0gICAgYXV0byB2ZXJzaW9uTnVtYmVyID0g
ZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShyZXByZXNl
bnRhdGlvbiwgQ0ZTVFIoInZlcnNpb24iKSkpOwotICAgIGlmICghdmVyc2lvbk51bWJlcikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFDRk51bWJlckdldFZhbHVlKHZlcnNpb25O
dW1iZXIsIGtDRk51bWJlckNGSW5kZXhUeXBlLCB2ZXJzaW9uKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byBhcmNoaXZlTGlzdEFycmF5ID0gZHluYW1pY19jZl9jYXN0PENGQXJy
YXlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigiYXJjaGl2
ZUxpc3QiKSkpOwotICAgIGlmICghYXJjaGl2ZUxpc3RBcnJheSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byBhcmNoaXZlTGlzdEFycmF5Q291bnQgPSBDRkFycmF5R2V0Q291bnQo
YXJjaGl2ZUxpc3RBcnJheSk7Ci0gICAgaWYgKCFpc0luQm91bmRzPHNpemVfdD4oYXJjaGl2ZUxp
c3RBcnJheUNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBidWZmZXJT
aXplID0gQ2hlY2tlZFNpemUoc2l6ZW9mKENGVHlwZVJlZikpICogc3RhdGljX2Nhc3Q8c2l6ZV90
PihhcmNoaXZlTGlzdEFycmF5Q291bnQpOwotICAgIGlmIChidWZmZXJTaXplLmhhc092ZXJmbG93
ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFleHRyYWN0RGljdGlvbmFy
eVZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigicHJvdG9jb2xQcm9wZXJ0aWVzIiksIHByb3Rv
Y29sUHJvcGVydGllcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWV4dHJhY3RE
aWN0aW9uYXJ5VmFsdWUocmVwcmVzZW50YXRpb24sIENGU1RSKCJleHBlY3RlZENvbnRlbnRMZW5n
dGgiKSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghZXh0cmFjdERpY3Rpb25hcnlWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoIm1pbWVU
eXBlIiksIG1pbWVUeXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgKm9iamVjdENv
dW50ID0gYXJjaGl2ZUxpc3RBcnJheUNvdW50OwotICAgICpvYmplY3RzID0gc3RhdGljX2Nhc3Q8
Q0ZUeXBlUmVmKj4oZmFzdE1hbGxvYyhidWZmZXJTaXplLnVuc2FmZUdldCgpKSk7Ci0KLSAgICBD
RkFycmF5R2V0VmFsdWVzKGFyY2hpdmVMaXN0QXJyYXksIENGUmFuZ2VNYWtlKDAsICpvYmplY3RD
b3VudCksICpvYmplY3RzKTsKLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCAqb2JqZWN0Q291
bnQ7ICsraSkgewotICAgICAgICBpZiAoKCpvYmplY3RzKVtpXSA9PSB0b2tlbk51bGwpCi0gICAg
ICAgICAgICAoKm9iamVjdHMpW2ldID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZVNlcmlhbGl6
YWJsZVJlcHJlc2VudGF0aW9uKENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QsIENGVHlwZVJlZiB0
b2tlbk51bGwpCi17Ci0gICAgQ0ZJbmRleCB2ZXJzaW9uOwotICAgIENGVHlwZVJlZiogb2JqZWN0
czsKLSAgICBDRkluZGV4IG9iamVjdENvdW50OwotICAgIENGRGljdGlvbmFyeVJlZiBwcm90b2Nv
bFByb3BlcnRpZXM7Ci0KLSAgICAvLyBGSVhNRSAoMTI4ODk1MTgpOiBEbyBub3Qgc2VyaWFsaXpl
IEhUVFAgbWVzc2FnZSBib2R5LgotICAgIC8vIDEuIEl0IGNhbiBiZSBsYXJnZSBhbmQgdGh1cyBj
b3N0bHkgdG8gc2VuZCBhY3Jvc3MuCi0gICAgLy8gMi4gSXQgaXMgbWlzbGVhZGluZyB0byBwcm92
aWRlIGEgYm9keSB3aXRoIHNvbWUgcmVxdWVzdHMsIHdoaWxlIG90aGVycyB1c2UgYm9keSBzdHJl
YW1zLCB3aGljaCBjYW5ub3QgYmUgc2VyaWFsaXplZCBhdCBhbGwuCi0KLSAgICBfQ0ZVUkxSZXF1
ZXN0Q3JlYXRlQXJjaGl2ZUxpc3Qoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY2ZSZXF1ZXN0LCAmdmVy
c2lvbiwgJm9iamVjdHMsICZvYmplY3RDb3VudCwgJnByb3RvY29sUHJvcGVydGllcyk7Ci0KLSAg
ICAvLyBUaGlzIHdpbGwgZGVhbGxvY2F0ZSB0aGUgcGFzc2VkIGluIGFyZ3VtZW50cy4KLSAgICBy
ZXR1cm4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24odmVyc2lvbiwgb2JqZWN0cywg
b2JqZWN0Q291bnQsIHByb3RvY29sUHJvcGVydGllcywgbnVsbHB0ciwgbnVsbHB0ciwgdG9rZW5O
dWxsKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRlVSTFJlcXVlc3RSZWY+IGNyZWF0ZUNGVVJM
UmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgcmVw
cmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwpCi17Ci0gICAgQ0ZJbmRleCB2ZXJzaW9u
OwotICAgIENGVHlwZVJlZiogb2JqZWN0czsKLSAgICBDRkluZGV4IG9iamVjdENvdW50OwotICAg
IENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3BlcnRpZXM7Ci0KLSAgICBpZiAoIWNyZWF0ZUFy
Y2hpdmVMaXN0KHJlcHJlc2VudGF0aW9uLCB0b2tlbk51bGwsICZ2ZXJzaW9uLCAmb2JqZWN0cywg
Jm9iamVjdENvdW50LCAmcHJvdG9jb2xQcm9wZXJ0aWVzLCBudWxscHRyLCBudWxscHRyKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGNmUmVxdWVzdCA9IGFkb3B0Q0YoX0NG
VVJMUmVxdWVzdENyZWF0ZUZyb21BcmNoaXZlTGlzdChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB2ZXJz
aW9uLCBvYmplY3RzLCBvYmplY3RDb3VudCwgcHJvdG9jb2xQcm9wZXJ0aWVzKSk7Ci0gICAgZmFz
dEZyZWUob2JqZWN0cyk7Ci0gICAgcmV0dXJuIFdURk1vdmUoY2ZSZXF1ZXN0KTsKLX0KLQotc3Rh
dGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2Vu
dGF0aW9uKE5TVVJMUmVxdWVzdCAqcmVxdWVzdCwgQ0ZUeXBlUmVmIHRva2VuTnVsbCkKLXsKLSAg
ICByZXR1cm4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oW3JlcXVlc3QgX0NGVVJM
UmVxdWVzdF0sIHRva2VuTnVsbCk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0
PiBjcmVhdGVOU1VSTFJlcXVlc3RGcm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oQ0ZEaWN0
aW9uYXJ5UmVmIHJlcHJlc2VudGF0aW9uLCBDRlR5cGVSZWYgdG9rZW5OdWxsKQotewotICAgIGF1
dG8gY2ZSZXF1ZXN0ID0gY3JlYXRlQ0ZVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2Vu
dGF0aW9uKHJlcHJlc2VudGF0aW9uLCB0b2tlbk51bGwpOwotICAgIGlmICghY2ZSZXF1ZXN0KQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICByZXR1cm4gYWRvcHROUyhbW05TVVJM
UmVxdWVzdCBhbGxvY10gX2luaXRXaXRoQ0ZVUkxSZXF1ZXN0OmNmUmVxdWVzdC5nZXQoKV0pOwot
fQotCi12b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2Rl
UGxhdGZvcm1EYXRhKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQotewotICAgIFJldGFpblB0cjxOU1VSTFJlcXVlc3Q+IHJl
cXVlc3RUb1NlcmlhbGl6ZSA9IHJlc291cmNlUmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6
SFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpOwotCi0gICAgYm9vbCBy
ZXF1ZXN0SXNQcmVzZW50ID0gcmVxdWVzdFRvU2VyaWFsaXplOwotICAgIGVuY29kZXIgPDwgcmVx
dWVzdElzUHJlc2VudDsKLQotICAgIGlmICghcmVxdWVzdElzUHJlc2VudCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gV2UgZG9uJ3Qgc2VuZCBIVFRQIGJvZHkgb3ZlciBJUEMgZm9yIGJldHRl
ciBwZXJmb3JtYW5jZS4KLSAgICAvLyBBbHNvLCBpdCdzIG5vdCBhbHdheXMgcG9zc2libGUgdG8g
ZG8sIGFzIHN0cmVhbXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBpbiBwcm9jZXNzIHRoYXQgZG9lcyBu
ZXR3b3JraW5nLgotICAgIGlmIChbcmVxdWVzdFRvU2VyaWFsaXplIEhUVFBCb2R5XSB8fCBbcmVx
dWVzdFRvU2VyaWFsaXplIEhUVFBCb2R5U3RyZWFtXSkgewotICAgICAgICByZXF1ZXN0VG9TZXJp
YWxpemUgPSBhZG9wdE5TKFtyZXF1ZXN0VG9TZXJpYWxpemUgbXV0YWJsZUNvcHldKTsKLSAgICAg
ICAgWyhOU011dGFibGVVUkxSZXF1ZXN0ICopcmVxdWVzdFRvU2VyaWFsaXplIHNldEhUVFBCb2R5
Om5pbF07Ci0gICAgICAgIFsoTlNNdXRhYmxlVVJMUmVxdWVzdCAqKXJlcXVlc3RUb1NlcmlhbGl6
ZSBzZXRIVFRQQm9keVN0cmVhbTpuaWxdOwotICAgIH0KLQotICAgIGF1dG8gZGljdGlvbmFyeSA9
IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKHJlcXVlc3RUb1NlcmlhbGl6ZS5nZXQo
KSwgSVBDOjp0b2tlbk51bGxwdHJUeXBlUmVmKCkpOwotICAgIElQQzo6ZW5jb2RlKGVuY29kZXIs
IGRpY3Rpb25hcnkuZ2V0KCkpOwotCi0gICAgLy8gVGhlIGZhbGxiYWNrIGFycmF5IGlzIHBhcnQg
b2YgTlNVUkxSZXF1ZXN0LCBidXQgaXQgaXMgbm90IGVuY29kZWQgYnkgV0tOU1VSTFJlcXVlc3RD
cmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbi4KLSAgICBlbmNvZGVyIDw8IHJlc291cmNl
UmVxdWVzdC5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSgp
OwotICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LnJlcXVlc3RlcigpOwotICAgIGVuY29k
ZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LmNhY2hlUG9saWN5KCk7Ci0gICAgZW5jb2RlciA8PCByZXNv
dXJjZVJlcXVlc3QuaXNBcHBCb3VuZCgpOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKERlY29kZXImIGRlY29kZXIs
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQotewotICAgIGJvb2wg
cmVxdWVzdElzUHJlc2VudDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVlc3RJc1ByZXNl
bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXJlcXVlc3RJc1ByZXNlbnQp
IHsKLSAgICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0gV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+IGRpY3Rpb25hcnk7Ci0gICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBkaWN0aW9u
YXJ5KSB8fCAhZGljdGlvbmFyeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBu
c1VSTFJlcXVlc3QgPSBjcmVhdGVOU1VSTFJlcXVlc3RGcm9tU2VyaWFsaXphYmxlUmVwcmVzZW50
YXRpb24oZGljdGlvbmFyeS5nZXQoKSwgSVBDOjp0b2tlbk51bGxwdHJUeXBlUmVmKCkpOwotICAg
IGlmICghbnNVUkxSZXF1ZXN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXNvdXJj
ZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QobnNVUkxSZXF1ZXN0LmdldCgpKTsK
LSAgICAKLSAgICBWZWN0b3I8U3RyaW5nPiByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29k
aW5nRmFsbGJhY2tBcnJheTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3BvbnNlQ29udGVu
dERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmVzb3VyY2VSZXF1ZXN0LnNldFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5j
b2RpbmdGYWxsYmFja0FycmF5KAotICAgICAgICByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkgPiAwID8gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRp
b25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMF0gOiBTdHJpbmcoKSwKLSAgICAgICAgcmVzcG9uc2VD
b250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpID4gMSA/IHJlc3Bv
bnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5WzFdIDogU3RyaW5nKCks
Ci0gICAgICAgIHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
LnNpemUoKSA+IDIgPyByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tB
cnJheVsyXSA6IFN0cmluZygpCi0gICAgKTsKLQotICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dDo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVlc3Rl
cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXNvdXJjZVJlcXVlc3Quc2V0UmVxdWVz
dGVyKHJlcXVlc3Rlcik7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGlj
eSBjYWNoZVBvbGljeTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNhY2hlUG9saWN5KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc291cmNlUmVxdWVzdC5zZXRDYWNoZVBvbGljeShj
YWNoZVBvbGljeSk7Ci0KLSAgICBib29sIGlzQXBwQm91bmQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShpc0FwcEJvdW5kKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc291cmNlUmVx
dWVzdC5zZXRJc0FwcEJvdW5kKGlzQXBwQm91bmQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
IHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0
ZUluZm8pCiB7CiAgICAgZW5jb2RlciA8PCBjZXJ0aWZpY2F0ZUluZm8udHlwZSgpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGRjNzhiYzRkY2Qy
YTE3MjE4OTRiMThkMmIzNGM4MWYzMjY4NWJhODUuLmEwMDg4ODU5YWY2NmVhN2M1Y2VlODI3MDE3
NjAxNjA3MGZkYTkwZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMS0wMi0xOSAgQnJlbnQgRnVsZ2hhbSAgPGJm
dWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTZXJpYWxpemUgTlNVUkxSZXF1ZXN0IChyYXRo
ZXIgdGhhbiBDRlVSTFJlcXVlc3QpIGluIElQQworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMTQ1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NDUw
MDk2Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYSBuZXcgdGVzdCB0byBlbnN1cmUgd2UgY2FuIHN1Y2Nlc3NmdWxseSBsb2FkIFVSTHMgd2l0
aCBhY2NlbnRlZCBjaGFyYWN0ZXJzLAorICAgICAgICBhbmQgdG8gdGVzdCB0aGUgdXBkYXRlZCBJ
UEMgc2VyaWFsaXphdGlvbiBmb3IgTlNVUkxSZXF1ZXN0LjpxCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdC9BLzMwMy8yNDcvMzAzLzI0M28uaHRtbDogQWRkZWQuCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2FkSW52YWxpZFVSTFJlcXVl
c3QubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKTogQ29ycmVjdCBVUkwgcmVzdWx0
IG5vdyB0aGF0IHRoZSB2YWx1ZSBpcyBwcm9wZXJseSBzZXJpYWxpemVkLgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3TG9hZEFQSXMubW06CisgICAg
ICAgIChURVNUKToKKwogMjAyMS0wMi0xOSAgQWRpdHlhIEtlZXJ0aGkgIDxha2VlcnRoaUBhcHBs
ZS5jb20+CiAKICAgICAgICAgW2lPU11bRkNSXSBFbmFibGUgdGhlIG5ldyBhcHBlYXJhbmNlIGJ5
IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTG9hZEludmFsaWRVUkxSZXF1ZXN0Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Mb2FkSW52YWxpZFVSTFJlcXVlc3QubW0KaW5kZXggN2Q2NTRlZDNhZjJkZGFl
YWM4MjU2MDI0YTc5YTczNjExODRhM2FkYi4uOTZmZThhZDQ0ZGQxZmRjMjM1MjZlNjk0MWE2YzEw
MTg4NzgzNWEyYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Mb2FkSW52YWxpZFVSTFJlcXVlc3QubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Mb2FkSW52YWxpZFVSTFJlcXVlc3QubW0KQEAgLTkzLDcgKzkzLDcg
QEAgVEVTVChXZWJLaXQsIExvYWRJbnZhbGlkVVJMUmVxdWVzdE5vbkFTQ0lJKQogICAgIGRlbGVn
YXRlLmdldCgpLmRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb24gPSBeKFdLV2ViVmlldyAqLCBX
S05hdmlnYXRpb24gKiwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX1dLX1NUUkVR
KGVycm9yLmRvbWFpbiwgQCJXZWJLaXRFcnJvckRvbWFpbiIpOwogICAgICAgICBFWFBFQ1RfRVEo
ZXJyb3IuY29kZSwgV2ViS2l0RXJyb3JDYW5ub3RTaG93VVJMKTsKLSAgICAgICAgRVhQRUNUX1dL
X1NUUkVRKFtlcnJvci51c2VySW5mb1tAIk5TRXJyb3JGYWlsaW5nVVJMS2V5Il0gYWJzb2x1dGVT
dHJpbmddLCAiaHR0cDovLyVDMyVBMiVDMiU4MCVDMiU4MCIpOworICAgICAgICBFWFBFQ1RfV0tf
U1RSRVEoW2Vycm9yLnVzZXJJbmZvW0AiTlNFcnJvckZhaWxpbmdVUkxLZXkiXSBhYnNvbHV0ZVN0
cmluZ10sICJodHRwOi8vJUUyJTgwJTgwIik7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH07
CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbV0tXZWJWaWV3IG5ld10pOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJ
cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3TG9h
ZEFQSXMubW0KaW5kZXggYmVkNTAwZWEzMzk0NWE4MWU2OGQ4ODgzN2ZhOTBhZjdjZTU3MjA4YS4u
NWY5YTlmYTE2ZWMzNzc4MDY0NWY2YjNmMTFmMGI0Y2YxYTE5MDE2ZCAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0xvYWRB
UElzLm1tCkBAIC0xMzIsMyArMTMyLDQxIEBAIFRFU1QoV0tXZWJWaWV3LCBMb2FkU2ltdWxhdGVk
UmVxdWVzdFVwZGF0ZXNCYWNrRm9yd2FyZExpc3QpCiAgICAgRVhQRUNUX1RSVUUoIWxpc3QuZm9y
d2FyZEl0ZW0pOwogICAgIEVYUEVDVF9XS19TVFJFUShleGFtcGxlVVJMU3RyaW5nLCBbbGlzdC5i
YWNrSXRlbS5VUkwgYWJzb2x1dGVTdHJpbmddKTsKIH0KKworVEVTVChXS1dlYlZpZXcsIExvYWRB
Y2NlbnRlZEZpbGVSZXF1ZXN0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsK
KworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZSBh
bGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0
ZS5nZXQoKV07CisKKyAgICBjb25zdCBVSW50OCBieXRlc1s2XSA9IHsgJ0EnLCAweEMzLCAweEE3
LCAweEMzLCAweEEzLCAnbycgfTsKKyAgICBhdXRvIGZpbGVOYW1lID0gYWRvcHROUyhbW05TU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmJ5dGVzIGxlbmd0aDo2IGVuY29kaW5nOk5TVVRGOFN0
cmluZ0VuY29kaW5nXSk7CisKKyAgICAvLyBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gYWRkIHVuaWNv
ZGUgZmlsZW5hbWVzIHRvIGdpdC4KKyAgICBOU1VSTCAqb3JpZ2luYWxGaWxlID0gW1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0
bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgRVhQRUNU
X05PVF9OVUxMKG9yaWdpbmFsRmlsZSk7CisKKyAgICBOU1N0cmluZyAqdGVzdERpcmVjdG9yeVN0
cmluZyA9IFtOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpbW05TVVVJRCBVVUlEXSBVVUlEU3RyaW5nXV07CisgICAgTlNVUkwgKnRlc3REaXJlY3Rv
cnkgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOiB0ZXN0RGlyZWN0b3J5U3RyaW5nXTsKKworICAg
IE5TU3RyaW5nICp0ZXN0RmlsZVN0cmluZyA9IFtbdGVzdERpcmVjdG9yeVN0cmluZyBzdHJpbmdC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6ZmlsZU5hbWUuZ2V0KCldIHN0cmluZ0J5QXBwZW5kaW5n
UGF0aEV4dGVuc2lvbjpAImh0bWwiXTsKKyAgICBOU1VSTCAqdGVzdEZpbGUgPSBbTlNVUkwgZmls
ZVVSTFdpdGhQYXRoOnRlc3RGaWxlU3RyaW5nXTsKKworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZh
dWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJMOnRlc3RGaWxlIGVycm9yOm5pbF07CisgICAgW1tO
U0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGVzdERpcmVjdG9y
eSBlcnJvcjpuaWxdOworCisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjcmVh
dGVEaXJlY3RvcnlBdFVSTDp0ZXN0RGlyZWN0b3J5IHdpdGhJbnRlcm1lZGlhdGVEaXJlY3Rvcmll
czpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmlsXTsKKworICAgIE5TRXJyb3IgKmVycm9yID0g
bmlsOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY29weUl0ZW1BdFVSTDpv
cmlnaW5hbEZpbGUgdG9VUkw6dGVzdEZpbGUgZXJyb3I6JmVycm9yXTsKKyAgICBFWFBFQ1RfTlVM
TChlcnJvcik7CisgICAgCisgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVz
dCByZXF1ZXN0V2l0aFVSTDp0ZXN0RmlsZV07CisgICAgW3dlYlZpZXcgbG9hZEZpbGVSZXF1ZXN0
OnJlcXVlc3QgYWxsb3dpbmdSZWFkQWNjZXNzVG9VUkw6dGVzdEZpbGUuVVJMQnlEZWxldGluZ0xh
c3RQYXRoQ29tcG9uZW50XTsKKyAgICBbZGVsZWdhdGUgd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRp
b25dOworICAgIEVYUEVDVF9XS19TVFJFUSh3ZWJWaWV3LmdldCgpLl9yZXNvdXJjZURpcmVjdG9y
eVVSTC5wYXRoLCB0ZXN0RmlsZS5VUkxCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnQucGF0aCk7
CisKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDp0
ZXN0RmlsZSBlcnJvcjpuaWxdOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
cmVtb3ZlSXRlbUF0VVJMOnRlc3REaXJlY3RvcnkgZXJyb3I6bmlsXTsKK30K
</data>
<flag name="commit-queue"
          id="439814"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421077</attachid>
            <date>2021-02-19 21:03:49 -0800</date>
            <delta_ts>2021-02-19 21:21:08 -0800</delta_ts>
            <desc>WIP: Trying to locate test failure.</desc>
            <filename>bug-222145-20210219210348.patch</filename>
            <type>text/plain</type>
            <size>16775</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGVlNTVjYWU4ZjhkMDc5MWI5
MmJkNTM2NjMwNTNiZTNhMzBhMmMyOTguLjE1Yzk0ODQzMTI5YzkwZGMzNTEwZWY1Mjg3MjE4NDE3
YmIyNjVhMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDItMTggIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVx
dWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIEFs
ZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5nIGxheW91dCBhbmQg
V2ViS2l0QVBJIHRlc3RzLgorCisgICAgICAgIFJldmlzZSBJUEMgc2VyaWFsaXphdGlvbiBzbyB0
aGF0IE5TVVJMQ29ubmVjdGlvbiAobW9kZXJuKSBDb2NvYSBidWlsZHMgc2VyaWFsaXplIHRoZQor
ICAgICAgICBOU1VSTFJlcXVlc3Qgb2JqZWN0LCByYXRoZXIgdGhhbiBicmlkZ2luZyB0byBDRlVS
TFJlcXVlc3QgYW5kIHNlcmlhbGl6aW5nIHRoYXQuIFRoaXMKKyAgICAgICAgZW5zdXJlcyB0aGF0
IHRoZSBmdWxsIHNldCBvZiBOU1VSTFJlcXVlc3QgZmVhdHVyZXMgYXJlIGFjY3VyYXRlbHkgcmVj
b25zdGl0dXRlZCBvbiB0aGUKKyAgICAgICAgcmVjZWl2aW5nIHNpZGUgb2YgdGhlIGNvbm5lY3Rp
b24uCisKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2Eu
bW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogQWRkZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29k
ZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKTogQWRkZWQu
CisgICAgICAgICogU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW06CisgICAg
ICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2Rl
UGxhdGZvcm1EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOiBEZWxldGVkLgorCiAy
MDIxLTAyLTE5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgTlNFcnJvciByZXR1cm5lZCBieSBXZWJLaXQgQVBJIHNob3VsZCBhY3R1YWxseSBj
b25mb3JtIHRvIE5TU2VjdXJlQ29kaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCmluZGV4IDc2YWZiNzJmZjJm
ZDRmOTdiNWNmMDEzMmVlYTliMzM3ZmE0NGFiNDMuLjRjOTkzMGQ3ZDU1MGU1MjI1ODMyMjRmZjVm
YjAyYWNiOGQ4OWFmZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dl
YkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
Y29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogI2lt
cG9ydCA8V2ViQ29yZS9Gb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRBdHRyaWJ1dGVzLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NmL0NvcmVUZXh0U1BJ
Lmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNTQzLDQgKzU0NCw2MCBAQCBPcHRp
b25hbDxGb250UGxhdGZvcm1EYXRhPiBBcmd1bWVudENvZGVyPFJlZjxGb250Pj46OmRlY29kZVBs
YXRmb3JtRGF0YShEZWNvZGVyJgogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKGN0Rm9udC5n
ZXQoKSwgc2l6ZS52YWx1ZSgpLCBzeW50aGV0aWNCb2xkLnZhbHVlKCksIHN5bnRoZXRpY09ibGlx
dWUudmFsdWUoKSwgb3JpZW50YXRpb24udmFsdWUoKSwgd2lkdGhWYXJpYW50LnZhbHVlKCksIHRl
eHRSZW5kZXJpbmdNb2RlLnZhbHVlKCkpOwogfQogCisjaWYgMAordm9pZCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkK
K3sKKyAgICBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiByZXF1ZXN0VG9TZXJpYWxpemUgPSByZXNv
dXJjZVJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpE
b05vdFVwZGF0ZUhUVFBCb2R5KTsKKworICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudCA9IHJlcXVl
c3RUb1NlcmlhbGl6ZTsKKyAgICBlbmNvZGVyIDw8IHJlcXVlc3RJc1ByZXNlbnQ7CisKKyAgICBp
ZiAoIXJlcXVlc3RJc1ByZXNlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGRvbid0
IHNlbmQgSFRUUCBib2R5IG92ZXIgSVBDIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgICAgLy8g
QWxzbywgaXQncyBub3QgYWx3YXlzIHBvc3NpYmxlIHRvIGRvLCBhcyBzdHJlYW1zIGNhbiBvbmx5
IGJlIGNyZWF0ZWQgaW4gcHJvY2VzcyB0aGF0IGRvZXMgbmV0d29ya2luZy4KKyAgICBpZiAoW3Jl
cXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9keV0gfHwgW3JlcXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9k
eVN0cmVhbV0pIHsKKyAgICAgICAgcmVxdWVzdFRvU2VyaWFsaXplID0gYWRvcHROUyhbcmVxdWVz
dFRvU2VyaWFsaXplIG11dGFibGVDb3B5XSk7CisgICAgICAgIFsoTlNNdXRhYmxlVVJMUmVxdWVz
dCAqKXJlcXVlc3RUb1NlcmlhbGl6ZSBzZXRIVFRQQm9keTpuaWxdOworICAgICAgICBbKE5TTXV0
YWJsZVVSTFJlcXVlc3QgKilyZXF1ZXN0VG9TZXJpYWxpemUgc2V0SFRUUEJvZHlTdHJlYW06bmls
XTsKKyAgICB9CisKKyAgICBJUEM6OmVuY29kZShlbmNvZGVyLCByZXF1ZXN0VG9TZXJpYWxpemUu
Z2V0KCkpOworCisgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QucmVxdWVzdGVyKCk7Cisg
ICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QuaXNBcHBCb3VuZCgpOworfQorCitib29sIEFy
Z3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRh
KERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1
ZXN0KQoreworICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudDsKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlcXVlc3RJc1ByZXNlbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IXJlcXVlc3RJc1ByZXNlbnQpIHsKKyAgICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0gV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGF1
dG8gcmVxdWVzdCA9IElQQzo6ZGVjb2RlPE5TVVJMUmVxdWVzdD4oZGVjb2RlciwgTlNVUkxSZXF1
ZXN0LmNsYXNzKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJlc291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdChyZXF1ZXN0LT5n
ZXQoKSk7CisgICAgCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXIgcmVx
dWVzdGVyOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVxdWVzdGVyKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJlc291cmNlUmVxdWVzdC5zZXRSZXF1ZXN0ZXIocmVxdWVzdGVyKTsK
KworICAgIGJvb2wgaXNBcHBCb3VuZDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzQXBwQm91
bmQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzb3VyY2VSZXF1ZXN0LnNldElzQXBw
Qm91bmQoaXNBcHBCb3VuZCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiB9IC8v
IG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJD
b3JlQXJndW1lbnRDb2RlcnNNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzTWFjLm1tCmluZGV4IDgzYzJhODczM2M4YTVhZDI3OTRmOTEzMGY2NGMy
OGE2OTAxNjViZjMuLjE5Yjc2NTU5NjBlMjMyOWNmNTc3NzQ2ZGZjNTE2OTc2Y2I4NzBkYWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNN
YWMubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVy
c01hYy5tbQpAQCAtMjE0LDYgKzIxNCw5IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEoRW5jb2RlciYgZW5jb2RlCiAgICAg
ZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QucmVxdWVzdGVyKCk7CiAgICAgZW5jb2RlciA8PCBy
ZXNvdXJjZVJlcXVlc3QuY2FjaGVQb2xpY3koKTsKICAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVx
dWVzdC5pc0FwcEJvdW5kKCk7CisKKyAgICAvLyBTZXJpYWxpemUgYWdhaW4gd2l0aCByZWFsIGVu
Y29kZXI6CisgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgcmVxdWVzdFRvU2VyaWFsaXplLmdldCgp
KTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmRl
Y29kZVBsYXRmb3JtRGF0YShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIHJlc291cmNlUmVxdWVzdCkKQEAgLTI2Miw2ICsyNjUsMzIgQEAgYm9vbCBBcmd1bWVudENv
ZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0YShEZWNvZGVy
JiBkZWNvZGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc291cmNlUmVxdWVzdC5zZXRJ
c0FwcEJvdW5kKGlzQXBwQm91bmQpOwogCisgICAgYXV0byByZXF1ZXN0ID0gSVBDOjpkZWNvZGU8
TlNVUkxSZXF1ZXN0PihkZWNvZGVyLCBOU1VSTFJlcXVlc3QuY2xhc3MpOworICAgIGlmICghcmVx
dWVzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVEVTVFMKKyAgICBOU1VSTFJl
cXVlc3QgKmNmVmVyc2lvbiA9IG5zVVJMUmVxdWVzdC5nZXQoKTsKKyAgICBOU1VSTFJlcXVlc3Qg
Km5zVmVyc2lvbiA9IHJlcXVlc3QudmFsdWUoKS5nZXQoKTsKKworICAgIFJFTEVBU0VfQVNTRVJU
KGNmVmVyc2lvbi5jYWNoZVBvbGljeSA9PSBuc1ZlcnNpb24uY2FjaGVQb2xpY3kpOworICAgIFJF
TEVBU0VfQVNTRVJUKFtjZlZlcnNpb24uSFRUUE1ldGhvZCBpc0VxdWFsVG9TdHJpbmc6IG5zVmVy
c2lvbi5IVFRQTWV0aG9kXSk7CisgICAgUkVMRUFTRV9BU1NFUlQoW2NmVmVyc2lvbi5VUkwgaXNF
cXVhbDogbnNWZXJzaW9uLlVSTF0pOworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKCghY2ZWZXJz
aW9uLm1haW5Eb2N1bWVudFVSTCAmJiAhbnNWZXJzaW9uLm1haW5Eb2N1bWVudFVSTCkgfHwgW2Nm
VmVyc2lvbi5tYWluRG9jdW1lbnRVUkwgaXNFcXVhbDogbnNWZXJzaW9uLm1haW5Eb2N1bWVudFVS
TF0pOworICAgIGlmIChjZlZlcnNpb24uYWxsSFRUUEhlYWRlckZpZWxkcykgeworICAgICAgICBm
b3IgKGlkIGtleSBpbiBjZlZlcnNpb24uYWxsSFRUUEhlYWRlckZpZWxkcykgeworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoW1tuc1ZlcnNpb24uYWxsSFRUUEhlYWRlckZpZWxkcyB2YWx1ZUZv
cktleTprZXldIGlzRXF1YWw6IFtjZlZlcnNpb24uYWxsSFRUUEhlYWRlckZpZWxkcyB2YWx1ZUZv
cktleToga2V5XV0pOworICAgICAgICB9CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKGNmVmVy
c2lvbi50aW1lb3V0SW50ZXJ2YWwgPT0gbnNWZXJzaW9uLnRpbWVvdXRJbnRlcnZhbCk7CisgICAg
UkVMRUFTRV9BU1NFUlQoY2ZWZXJzaW9uLkhUVFBTaG91bGRIYW5kbGVDb29raWVzID09IG5zVmVy
c2lvbi5IVFRQU2hvdWxkSGFuZGxlQ29va2llcyk7CisgICAgUkVMRUFTRV9BU1NFUlQoY2ZWZXJz
aW9uLkhUVFBTaG91bGRVc2VQaXBlbGluaW5nID09IG5zVmVyc2lvbi5IVFRQU2hvdWxkVXNlUGlw
ZWxpbmluZyk7CisgICAgUkVMRUFTRV9BU1NFUlQoY2ZWZXJzaW9uLmFsbG93c0NlbGx1bGFyQWNj
ZXNzID09IG5zVmVyc2lvbi5hbGxvd3NDZWxsdWxhckFjY2Vzcyk7CisgICAgUkVMRUFTRV9BU1NF
UlQoY2ZWZXJzaW9uLmFsbG93c0NvbnN0cmFpbmVkTmV0d29ya0FjY2VzcyA9PSBuc1ZlcnNpb24u
YWxsb3dzQ29uc3RyYWluZWROZXR3b3JrQWNjZXNzKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjZlZl
cnNpb24uYWxsb3dzRXhwZW5zaXZlTmV0d29ya0FjY2VzcyA9PSBuc1ZlcnNpb24uYWxsb3dzRXhw
ZW5zaXZlTmV0d29ya0FjY2Vzcyk7CisgICAgUkVMRUFTRV9BU1NFUlQoY2ZWZXJzaW9uLm5ldHdv
cmtTZXJ2aWNlVHlwZSA9PSBuc1ZlcnNpb24ubmV0d29ya1NlcnZpY2VUeXBlKTsKKwogICAgIHJl
dHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFu
Z2VMb2cKaW5kZXggMGRiYWVmMjg5NjI4NDhhMzNkN2Y2NDE5NWQxMzRhZWIxNTM2M2E3YS4uMDVl
ZWI1NWQyMjljNmEwMGVkMjNmZTRlMmVkZGFjZDBmZTNjNTFhYiAxMDA2NDQKLS0tIGEvVG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIxLTAy
LTE5ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFNlcmlh
bGl6ZSBOU1VSTFJlcXVlc3QgKHJhdGhlciB0aGFuIENGVVJMUmVxdWVzdCkgaW4gSVBDCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjIxNDUKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzc0NTAwOTYzPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyIGFuZCBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIEFkZCBhIG5ldyB0ZXN0IHRv
IGVuc3VyZSB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IGxvYWQgVVJMcyB3aXRoIGFjY2VudGVkIGNoYXJh
Y3RlcnMsCisgICAgICAgIGFuZCB0byB0ZXN0IHRoZSB1cGRhdGVkIElQQyBzZXJpYWxpemF0aW9u
IGZvciBOU1VSTFJlcXVlc3QuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dC9BLzMwMy8yNDcvMzAzLzI0M28uaHRtbDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2FkSW52YWxpZFVSTFJlcXVlc3QubW06CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKTogQ29ycmVjdCBVUkwgcmVzdWx0IG5vdyB0aGF0IHRoZSB2YWx1
ZSBpcyBwcm9wZXJseSBzZXJpYWxpemVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV0tXZWJWaWV3TG9hZEFQSXMubW06CisgICAgICAgIChURVNUKToKKwogMjAy
MS0wMi0xOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAg
ICAgICAgIE5TRXJyb3IgcmV0dXJuZWQgYnkgV2ViS2l0IEFQSSBzaG91bGQgYWN0dWFsbHkgY29u
Zm9ybSB0byBOU1NlY3VyZUNvZGluZwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1Rlc3RXZWJLaXRB
UEkueGNzY2hlbWUgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvVGVzdFdlYktpdEFQSS54Y3NjaGVtZQppbmRleCA1ZjVl
YzJlNGFlYzM5ZWRjMzlmYzdmODVjN2Q5NjdlNWM0OTQ2OTRlLi45ZDc1NTc2OTAzYmUyNDhmYjZm
NmVkYTliOTUwZTA4MDczMGMzNTNiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvVGVzdFdlYktpdEFQ
SS54Y3NjaGVtZQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvVGVzdFdlYktpdEFQSS54Y3NjaGVtZQpAQCAtNTAs
NiArNTAsMTIgQEAKICAgICAgICAgICAgIFJlZmVyZW5jZWRDb250YWluZXIgPSAiY29udGFpbmVy
OlRlc3RXZWJLaXRBUEkueGNvZGVwcm9qIj4KICAgICAgICAgIDwvQnVpbGRhYmxlUmVmZXJlbmNl
PgogICAgICAgPC9CdWlsZGFibGVQcm9kdWN0UnVubmFibGU+CisgICAgICA8Q29tbWFuZExpbmVB
cmd1bWVudHM+CisgICAgICAgICA8Q29tbWFuZExpbmVBcmd1bWVudAorICAgICAgICAgICAgYXJn
dW1lbnQgPSAiLS1ndGVzdF9maWx0ZXI9V0tXZWJWaWV3LkxvYWRTaW11bGF0ZWRSZXF1ZXN0VXBk
YXRlc0JhY2tGb3J3YXJkTGlzdCIKKyAgICAgICAgICAgIGlzRW5hYmxlZCA9ICJZRVMiPgorICAg
ICAgICAgPC9Db21tYW5kTGluZUFyZ3VtZW50PgorICAgICAgPC9Db21tYW5kTGluZUFyZ3VtZW50
cz4KICAgIDwvTGF1bmNoQWN0aW9uPgogICAgPFByb2ZpbGVBY3Rpb24KICAgICAgIGJ1aWxkQ29u
ZmlndXJhdGlvbiA9ICJSZWxlYXNlIgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Mb2FkSW52YWxpZFVSTFJlcXVlc3QubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvYWRJbnZhbGlkVVJMUmVxdWVzdC5tbQppbmRleCA3
ZDY1NGVkM2FmMmRkYWVhYzgyNTYwMjRhNzlhNzM2MTE4NGEzYWRiLi45NmZlOGFkNDRkZDFmZGMy
MzUyNmU2OTQxYTZjMTAxODg3ODM1YTJhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0xvYWRJbnZhbGlkVVJMUmVxdWVzdC5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvYWRJbnZhbGlkVVJMUmVxdWVzdC5tbQpA
QCAtOTMsNyArOTMsNyBAQCBURVNUKFdlYktpdCwgTG9hZEludmFsaWRVUkxSZXF1ZXN0Tm9uQVND
SUkpCiAgICAgZGVsZWdhdGUuZ2V0KCkuZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbiA9IF4o
V0tXZWJWaWV3ICosIFdLTmF2aWdhdGlvbiAqLCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBF
WFBFQ1RfV0tfU1RSRVEoZXJyb3IuZG9tYWluLCBAIldlYktpdEVycm9yRG9tYWluIik7CiAgICAg
ICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBXZWJLaXRFcnJvckNhbm5vdFNob3dVUkwpOwotICAg
ICAgICBFWFBFQ1RfV0tfU1RSRVEoW2Vycm9yLnVzZXJJbmZvW0AiTlNFcnJvckZhaWxpbmdVUkxL
ZXkiXSBhYnNvbHV0ZVN0cmluZ10sICJodHRwOi8vJUMzJUEyJUMyJTgwJUMyJTgwIik7CisgICAg
ICAgIEVYUEVDVF9XS19TVFJFUShbZXJyb3IudXNlckluZm9bQCJOU0Vycm9yRmFpbGluZ1VSTEtl
eSJdIGFic29sdXRlU3RyaW5nXSwgImh0dHA6Ly8lRTIlODAlODAiKTsKICAgICAgICAgZG9uZSA9
IHRydWU7CiAgICAgfTsKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtXS1dlYlZpZXcgbmV3
XSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dL
V2ViVmlld0xvYWRBUElzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS1dlYlZpZXdMb2FkQVBJcy5tbQppbmRleCBiZWQ1MDBlYTMzOTQ1YTgxZTY4ZDg4ODM3ZmE5
MGFmN2NlNTcyMDhhLi41ZjlhOWZhMTZlYzM3NzgwNjQ1ZjZiM2YxMWYwYjRjZjFhMTkwMTZkIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmll
d0xvYWRBUElzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V0tXZWJWaWV3TG9hZEFQSXMubW0KQEAgLTEzMiwzICsxMzIsNDEgQEAgVEVTVChXS1dlYlZpZXcs
IExvYWRTaW11bGF0ZWRSZXF1ZXN0VXBkYXRlc0JhY2tGb3J3YXJkTGlzdCkKICAgICBFWFBFQ1Rf
VFJVRSghbGlzdC5mb3J3YXJkSXRlbSk7CiAgICAgRVhQRUNUX1dLX1NUUkVRKGV4YW1wbGVVUkxT
dHJpbmcsIFtsaXN0LmJhY2tJdGVtLlVSTCBhYnNvbHV0ZVN0cmluZ10pOwogfQorCitURVNUKFdL
V2ViVmlldywgTG9hZEFjY2VudGVkRmlsZVJlcXVlc3QpCit7CisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IDgwMCwgNjAwKV0pOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0TmF2aWdh
dGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRl
bGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIGNvbnN0IFVJbnQ4IGJ5dGVzWzZdID0geyAn
QScsIDB4QzMsIDB4QTcsIDB4QzMsIDB4QTMsICdvJyB9OworICAgIGF1dG8gZmlsZU5hbWUgPSBh
ZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOjYgZW5j
b2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKKworICAgIC8vIFRoaXMgYXZvaWRzIGhhdmlu
ZyB0byBhZGQgdW5pY29kZSBmaWxlbmFtZXMgdG8gZ2l0LgorICAgIE5TVVJMICpvcmlnaW5hbEZp
bGUgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRo
RXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMi
XTsKKyAgICBFWFBFQ1RfTk9UX05VTEwob3JpZ2luYWxGaWxlKTsKKworICAgIE5TU3RyaW5nICp0
ZXN0RGlyZWN0b3J5U3RyaW5nID0gW05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OltbTlNVVUlEIFVVSURdIFVVSURTdHJpbmddXTsKKyAgICBOU1VS
TCAqdGVzdERpcmVjdG9yeSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6IHRlc3REaXJlY3RvcnlT
dHJpbmddOworCisgICAgTlNTdHJpbmcgKnRlc3RGaWxlU3RyaW5nID0gW1t0ZXN0RGlyZWN0b3J5
U3RyaW5nIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpmaWxlTmFtZS5nZXQoKV0gc3Ry
aW5nQnlBcHBlbmRpbmdQYXRoRXh0ZW5zaW9uOkAiaHRtbCJdOworICAgIE5TVVJMICp0ZXN0Rmls
ZSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6dGVzdEZpbGVTdHJpbmddOworCisgICAgW1tOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGVzdEZpbGUgZXJyb3I6
bmlsXTsKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVS
TDp0ZXN0RGlyZWN0b3J5IGVycm9yOm5pbF07CisKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVs
dE1hbmFnZXJdIGNyZWF0ZURpcmVjdG9yeUF0VVJMOnRlc3REaXJlY3Rvcnkgd2l0aEludGVybWVk
aWF0ZURpcmVjdG9yaWVzOllFUyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjpuaWxdOworCisgICAgTlNF
cnJvciAqZXJyb3IgPSBuaWw7CisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBj
b3B5SXRlbUF0VVJMOm9yaWdpbmFsRmlsZSB0b1VSTDp0ZXN0RmlsZSBlcnJvcjomZXJyb3JdOwor
ICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKyAgICAKKyAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3Qg
PSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RGaWxlXTsKKyAgICBbd2ViVmlldyBs
b2FkRmlsZVJlcXVlc3Q6cmVxdWVzdCBhbGxvd2luZ1JlYWRBY2Nlc3NUb1VSTDp0ZXN0RmlsZS5V
UkxCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnRdOworICAgIFtkZWxlZ2F0ZSB3YWl0Rm9yRGlk
RmluaXNoTmF2aWdhdGlvbl07CisgICAgRVhQRUNUX1dLX1NUUkVRKHdlYlZpZXcuZ2V0KCkuX3Jl
c291cmNlRGlyZWN0b3J5VVJMLnBhdGgsIHRlc3RGaWxlLlVSTEJ5RGVsZXRpbmdMYXN0UGF0aENv
bXBvbmVudC5wYXRoKTsKKworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVt
b3ZlSXRlbUF0VVJMOnRlc3RGaWxlIGVycm9yOm5pbF07CisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRl
ZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGVzdERpcmVjdG9yeSBlcnJvcjpuaWxdOwor
fQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL2FkZC1ibG9ja2luZy10by1yZWRpcmVjdC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2FkZC1ibG9ja2luZy10by1yZWRpcmVjdC5odG1sCmlu
ZGV4IDAxMzkxOTUxNmNkZmQ2ODA5NmYwYWNhM2ZlMmU4ZjliODhlMjBhZjUuLmE2MjRhYWIxMzg3
MGUxYWU4YjQ2YTFjZTA2MjE2NDEyZTU5NTkzZDAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9hZGQtYmxvY2tpbmctdG8tcmVkaXJlY3Qu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mv
YWRkLWJsb2NraW5nLXRvLXJlZGlyZWN0Lmh0bWwKQEAgLTM1LDIwICszNSwyNCBAQAogICAgICAg
ICBzd2l0Y2ggKGRvY3VtZW50LmxvY2F0aW9uLmhhc2gpIHsKICAgICAgICAgICAgIGNhc2UgIiNz
dGVwMSI6CiAgICAgICAgICAgICAgICAgLy8gU2V0IGZpcnN0LXBhcnR5IGNvb2tpZSBmb3IgbG9j
YWxob3N0LgorICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTdGVwIDEiKTsKICAgICAgICAg
ICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gdGhpcmRQYXJ0eUJhc2VVcmwgKyBzdWJQ
YXRoVG9TZXRGaXJzdFBhcnR5Q29va2llICsgIiMiICsgcmV0dXJuVXJsICsgIiNzdGVwMiI7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICIjc3RlcDIiOgogICAgICAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGNvb2tpZSBnZXRzIHNlbnQgZm9yIGxvY2FsaG9z
dCB1bmRlciAxMjcuMC4wLjEgc2luY2UgbG9jYWxob3N0IGlzIG5vdCBwcmV2YWxlbnQuCisgICAg
ICAgICAgICAgICAgY29uc29sZS5sb2coIlN0ZXAgMiIpOwogICAgICAgICAgICAgICAgIGRvY3Vt
ZW50LmxvY2F0aW9uLmhhc2ggPSAic3RlcDMiOwogICAgICAgICAgICAgICAgIG9wZW5JZnJhbWUo
dGhpcmRQYXJ0eUJhc2VVcmwgKyBzdWJQYXRoVG9HZXRDb29raWVzICsgIiZtZXNzYWdlPVNob3Vs
ZCByZWNlaXZlIGZpcnN0LXBhcnR5IGNvb2tpZS4iLCBydW5UZXN0KTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgIiNzdGVwMyI6CisgICAgICAgICAgICAgICAgY29u
c29sZS5sb2coIlN0ZXAgMyIpOwogICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhh
c2ggPSAic3RlcDQiOwogICAgICAgICAgICAgICAgIC8vIExvYWQgYW4gaWZyYW1lIGluIGEgcmVk
aXJlY3QgY2hhaW4gdGhhdCBzdGFydHMgd2l0aCAxMjcuMC4wLjEgYW5kIGVuZHMgd2l0aCBsb2Nh
bGhvc3QuIEV4cGVjdCBhIGNvb2tpZSBmb3IgbG9jYWxob3N0LgogICAgICAgICAgICAgICAgIG9w
ZW5JZnJhbWUocmVkaXJlY3RDaGFpblVybCArICImbWVzc2FnZT1SZWRpcmVjdCBjYXNlIDEsIHNo
b3VsZCByZWNlaXZlIGZpcnN0LXBhcnR5IGNvb2tpZS4iLCBydW5UZXN0KTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgIiNzdGVwNCI6CiAgICAgICAgICAgICAgICAg
Ly8gU2V0IGxvY2FsaG9zdCBhcyBwcmV2YWxlbnQgdG8gcHV0IGl0IGluIHRoZSBibG9ja2luZyBj
YXRlZ29yeS4KKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiU3RlcCA0Iik7CiAgICAgICAg
ICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24uaGFzaCA9ICJzdGVwNSI7CiAgICAgICAgICAgICAg
ICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UodGhpcmRQYXJ0eU9y
aWdpbiwgdHJ1ZSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghdGVzdFJ1
bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSh0aGlyZFBhcnR5T3JpZ2luKSkKQEAg
LTU4LDMwICs2MiwzNiBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSAiI3N0ZXA1IjoKICAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IG5vIGNvb2tpZSBnZXRz
IHNlbnQgZm9yIGxvY2FsaG9zdCB1bmRlciAxMjcuMC4wLjEgc2luY2UgbG9jYWxob3N0J3MgY29v
a2llcyBhcmUgYmxvY2tlZC4KKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiU3RlcCA1Iik7
CiAgICAgICAgICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24uaGFzaCA9ICJzdGVwNiI7CiAgICAg
ICAgICAgICAgICAgb3BlbklmcmFtZSh0aGlyZFBhcnR5QmFzZVVybCArIHN1YlBhdGhUb0dldENv
b2tpZXMgKyAgIiZtZXNzYWdlPVNob3VsZCByZWNlaXZlIG5vIGNvb2tpZXMuIiwgcnVuVGVzdCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICIjc3RlcDYiOgogICAg
ICAgICAgICAgICAgIC8vIExvYWQgYW4gaWZyYW1lIGluIGEgcmVkaXJlY3QgY2hhaW4gdGhhdCBz
dGFydHMgd2l0aCAxMjcuMC4wLjEgYW5kIGVuZHMgd2l0aCBsb2NhbGhvc3QuIEV4cGVjdCBubyBj
b29raWUgZm9yIGxvY2FsaG9zdC4KKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiU3RlcCA2
Iik7CiAgICAgICAgICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24uaGFzaCA9ICJzdGVwNyI7CiAg
ICAgICAgICAgICAgICAgb3BlbklmcmFtZShyZWRpcmVjdENoYWluVXJsICsgIiZtZXNzYWdlPVJl
ZGlyZWN0IGNhc2UgMiwgc2hvdWxkIHJlY2VpdmUgbm8gY29va2llLiIsIHJ1blRlc3QpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAiI3N0ZXA3IjoKICAgICAgICAg
ICAgICAgICAvLyBUcnkgdG8gc2V0IGNvb2tpZSBmb3IgbG9jYWxob3N0IHVuZGVyIDEyNy4wLjAu
MS4KKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiU3RlcCA3Iik7CiAgICAgICAgICAgICAg
ICAgZG9jdW1lbnQubG9jYXRpb24uaGFzaCA9ICJzdGVwOCI7CiAgICAgICAgICAgICAgICAgb3Bl
bklmcmFtZSh0aGlyZFBhcnR5QmFzZVVybCArIHN1YlBhdGhUb1NldFBhcnRpdGlvbmVkQ29va2ll
ICsgIiZtZXNzYWdlPVRyeSB0byBzZXQgdGhpcmQtcGFydHkgY29va2llIGluIGJsb2NrZWQgbW9k
ZS4iLCBydW5UZXN0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
IiNzdGVwOCI6CiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBubyBjb29raWUgZ2V0cyBz
ZW50IGZvciBsb2NhbGhvc3QgdW5kZXIgMTI3LjAuMC4xIHNpbmNlIGxvY2FsaG9zdCdzIGNvb2tp
ZXMgYXJlIGJsb2NrZWQuCisgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIlN0ZXAgOCIpOwog
ICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSAic3RlcDkiOwogICAgICAg
ICAgICAgICAgIG9wZW5JZnJhbWUodGhpcmRQYXJ0eUJhc2VVcmwgKyBzdWJQYXRoVG9HZXRDb29r
aWVzICsgICImbWVzc2FnZT1BZnRlciBhdHRlbXB0ZWQgY29va2llIGNyZWF0aW9uLCBzaG91bGQg
cmVjZWl2ZSBubyBjb29raWUuIiwgcnVuVGVzdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlICIjc3RlcDkiOgogICAgICAgICAgICAgICAgIC8vIExvYWQgYW4gaWZy
YW1lIGluIGEgcmVkaXJlY3QgY2hhaW4gdGhhdCBzdGFydHMgd2l0aCAxMjcuMC4wLjEgYW5kIGVu
ZHMgd2l0aCBsb2NhbGhvc3QuIEV4cGVjdCBubyBjb29raWUgZm9yIGxvY2FsaG9zdC4KKyAgICAg
ICAgICAgICAgICBjb25zb2xlLmxvZygiU3RlcCA5Iik7CiAgICAgICAgICAgICAgICAgZG9jdW1l
bnQubG9jYXRpb24uaGFzaCA9ICJzdGVwMTAiOwogICAgICAgICAgICAgICAgIG9wZW5JZnJhbWUo
cmVkaXJlY3RDaGFpblVybCArICImbWVzc2FnZT1SZWRpcmVjdCBjYXNlIDMsIGFmdGVyIGF0dGVt
cHRlZCBjb29raWUgY3JlYXRpb24sIHNob3VsZCByZWNlaXZlIG5vIGNvb2tpZS4iLCBydW5UZXN0
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgIiNzdGVwMTAiOgor
ICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTdGVwIDEwIik7CiAgICAgICAgICAgICAgICAg
c2V0RW5hYmxlRmVhdHVyZShmYWxzZSwgZmluaXNoSlNUZXN0KTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421079</attachid>
            <date>2021-02-19 21:21:12 -0800</date>
            <delta_ts>2021-02-20 13:46:53 -0800</delta_ts>
            <desc>WIP: Trying to locate test failure.</desc>
            <filename>bug-222145-20210219212111.patch</filename>
            <type>text/plain</type>
            <size>19440</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGVlNTVjYWU4ZjhkMDc5MWI5
MmJkNTM2NjMwNTNiZTNhMzBhMmMyOTguLjE1Yzk0ODQzMTI5YzkwZGMzNTEwZWY1Mjg3MjE4NDE3
YmIyNjVhMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDItMTggIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVx
dWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIEFs
ZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5nIGxheW91dCBhbmQg
V2ViS2l0QVBJIHRlc3RzLgorCisgICAgICAgIFJldmlzZSBJUEMgc2VyaWFsaXphdGlvbiBzbyB0
aGF0IE5TVVJMQ29ubmVjdGlvbiAobW9kZXJuKSBDb2NvYSBidWlsZHMgc2VyaWFsaXplIHRoZQor
ICAgICAgICBOU1VSTFJlcXVlc3Qgb2JqZWN0LCByYXRoZXIgdGhhbiBicmlkZ2luZyB0byBDRlVS
TFJlcXVlc3QgYW5kIHNlcmlhbGl6aW5nIHRoYXQuIFRoaXMKKyAgICAgICAgZW5zdXJlcyB0aGF0
IHRoZSBmdWxsIHNldCBvZiBOU1VSTFJlcXVlc3QgZmVhdHVyZXMgYXJlIGFjY3VyYXRlbHkgcmVj
b25zdGl0dXRlZCBvbiB0aGUKKyAgICAgICAgcmVjZWl2aW5nIHNpZGUgb2YgdGhlIGNvbm5lY3Rp
b24uCisKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2Eu
bW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogQWRkZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29k
ZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKTogQWRkZWQu
CisgICAgICAgICogU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW06CisgICAg
ICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2Rl
UGxhdGZvcm1EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOiBEZWxldGVkLgorCiAy
MDIxLTAyLTE5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgTlNFcnJvciByZXR1cm5lZCBieSBXZWJLaXQgQVBJIHNob3VsZCBhY3R1YWxseSBj
b25mb3JtIHRvIE5TU2VjdXJlQ29kaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCmluZGV4IDc2YWZiNzJmZjJm
ZDRmOTdiNWNmMDEzMmVlYTliMzM3ZmE0NGFiNDMuLjRjOTkzMGQ3ZDU1MGU1MjI1ODMyMjRmZjVm
YjAyYWNiOGQ4OWFmZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dl
YkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
Y29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogI2lt
cG9ydCA8V2ViQ29yZS9Gb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRBdHRyaWJ1dGVzLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NmL0NvcmVUZXh0U1BJ
Lmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNTQzLDQgKzU0NCw2MCBAQCBPcHRp
b25hbDxGb250UGxhdGZvcm1EYXRhPiBBcmd1bWVudENvZGVyPFJlZjxGb250Pj46OmRlY29kZVBs
YXRmb3JtRGF0YShEZWNvZGVyJgogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKGN0Rm9udC5n
ZXQoKSwgc2l6ZS52YWx1ZSgpLCBzeW50aGV0aWNCb2xkLnZhbHVlKCksIHN5bnRoZXRpY09ibGlx
dWUudmFsdWUoKSwgb3JpZW50YXRpb24udmFsdWUoKSwgd2lkdGhWYXJpYW50LnZhbHVlKCksIHRl
eHRSZW5kZXJpbmdNb2RlLnZhbHVlKCkpOwogfQogCisjaWYgMAordm9pZCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkK
K3sKKyAgICBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiByZXF1ZXN0VG9TZXJpYWxpemUgPSByZXNv
dXJjZVJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpE
b05vdFVwZGF0ZUhUVFBCb2R5KTsKKworICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudCA9IHJlcXVl
c3RUb1NlcmlhbGl6ZTsKKyAgICBlbmNvZGVyIDw8IHJlcXVlc3RJc1ByZXNlbnQ7CisKKyAgICBp
ZiAoIXJlcXVlc3RJc1ByZXNlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGRvbid0
IHNlbmQgSFRUUCBib2R5IG92ZXIgSVBDIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgICAgLy8g
QWxzbywgaXQncyBub3QgYWx3YXlzIHBvc3NpYmxlIHRvIGRvLCBhcyBzdHJlYW1zIGNhbiBvbmx5
IGJlIGNyZWF0ZWQgaW4gcHJvY2VzcyB0aGF0IGRvZXMgbmV0d29ya2luZy4KKyAgICBpZiAoW3Jl
cXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9keV0gfHwgW3JlcXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9k
eVN0cmVhbV0pIHsKKyAgICAgICAgcmVxdWVzdFRvU2VyaWFsaXplID0gYWRvcHROUyhbcmVxdWVz
dFRvU2VyaWFsaXplIG11dGFibGVDb3B5XSk7CisgICAgICAgIFsoTlNNdXRhYmxlVVJMUmVxdWVz
dCAqKXJlcXVlc3RUb1NlcmlhbGl6ZSBzZXRIVFRQQm9keTpuaWxdOworICAgICAgICBbKE5TTXV0
YWJsZVVSTFJlcXVlc3QgKilyZXF1ZXN0VG9TZXJpYWxpemUgc2V0SFRUUEJvZHlTdHJlYW06bmls
XTsKKyAgICB9CisKKyAgICBJUEM6OmVuY29kZShlbmNvZGVyLCByZXF1ZXN0VG9TZXJpYWxpemUu
Z2V0KCkpOworCisgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QucmVxdWVzdGVyKCk7Cisg
ICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QuaXNBcHBCb3VuZCgpOworfQorCitib29sIEFy
Z3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRh
KERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1
ZXN0KQoreworICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudDsKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlcXVlc3RJc1ByZXNlbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IXJlcXVlc3RJc1ByZXNlbnQpIHsKKyAgICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0gV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGF1
dG8gcmVxdWVzdCA9IElQQzo6ZGVjb2RlPE5TVVJMUmVxdWVzdD4oZGVjb2RlciwgTlNVUkxSZXF1
ZXN0LmNsYXNzKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJlc291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdChyZXF1ZXN0LT5n
ZXQoKSk7CisgICAgCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXIgcmVx
dWVzdGVyOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVxdWVzdGVyKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJlc291cmNlUmVxdWVzdC5zZXRSZXF1ZXN0ZXIocmVxdWVzdGVyKTsK
KworICAgIGJvb2wgaXNBcHBCb3VuZDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzQXBwQm91
bmQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzb3VyY2VSZXF1ZXN0LnNldElzQXBw
Qm91bmQoaXNBcHBCb3VuZCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiB9IC8v
IG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJD
b3JlQXJndW1lbnRDb2RlcnNNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzTWFjLm1tCmluZGV4IDgzYzJhODczM2M4YTVhZDI3OTRmOTEzMGY2NGMy
OGE2OTAxNjViZjMuLjdjZjI4NTZkZjJiZWFiODA1YTNhNzRmMjQwMDI5MGU2ODI5NzE0MTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNN
YWMubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVy
c01hYy5tbQpAQCAtNTAsNyArNTAsNyBAQAogCiBuYW1lc3BhY2UgSVBDIHsKIAotc3RhdGljIFJl
dGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNl
bnRhdGlvbihDRkluZGV4IHZlcnNpb24sIENGVHlwZVJlZiogb2JqZWN0cywgQ0ZJbmRleCBvYmpl
Y3RDb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmIHByb3RvY29sUHJvcGVydGllcywgQ0ZOdW1iZXJSZWYg
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBDRlN0cmluZ1JlZiBtaW1lVHlwZSwgQ0ZUeXBlUmVmIHRv
a2VuTnVsbCkKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3JlYXRl
U2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oQ0ZJbmRleCB2ZXJzaW9uLCBDRlR5cGVSZWYqIG9i
amVjdHMsIENGSW5kZXggb2JqZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3Bl
cnRpZXMsIENGVHlwZVJlZiB0b2tlbk51bGwpCiB7CiAgICAgYXV0byBhcmNoaXZlTGlzdEFycmF5
ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAm
a0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CiAKQEAgLTc2LDE2ICs3Niw2IEBAIHN0YXRpYyBSZXRh
aW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50
YXRpb24oQ0ZJbmRlCiAgICAgICAgIENGUmVsZWFzZShwcm90b2NvbFByb3BlcnRpZXMpOwogICAg
IH0KIAotICAgIGlmIChleHBlY3RlZENvbnRlbnRMZW5ndGgpIHsKLSAgICAgICAgQ0ZEaWN0aW9u
YXJ5U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIoImV4cGVjdGVkQ29udGVudExlbmd0
aCIpLCBleHBlY3RlZENvbnRlbnRMZW5ndGgpOwotICAgICAgICBDRlJlbGVhc2UoZXhwZWN0ZWRD
b250ZW50TGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBpZiAobWltZVR5cGUpIHsKLSAgICAgICAgQ0ZE
aWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIoIm1pbWVUeXBlIiksIG1p
bWVUeXBlKTsKLSAgICAgICAgQ0ZSZWxlYXNlKG1pbWVUeXBlKTsKLSAgICB9Ci0KICAgICBDRkFs
bG9jYXRvckRlYWxsb2NhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgb2JqZWN0cyk7CiAKICAgICBy
ZXR1cm4gZGljdGlvbmFyeTsKQEAgLTEwMiw3ICs5Miw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlVHlwZT4gYm9vbCBleHRyYWN0RGljdGlvbmFyeVZhbHVlKENGRGljdGlvbmFyeVJlZiBkaWN0
aW9uCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGNyZWF0ZUFyY2hpdmVMaXN0
KENGRGljdGlvbmFyeVJlZiByZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRva2VuTnVsbCwgQ0ZJ
bmRleCogdmVyc2lvbiwgQ0ZUeXBlUmVmKiogb2JqZWN0cywgQ0ZJbmRleCogb2JqZWN0Q291bnQs
IENGRGljdGlvbmFyeVJlZiogcHJvdG9jb2xQcm9wZXJ0aWVzLCBDRk51bWJlclJlZiogZXhwZWN0
ZWRDb250ZW50TGVuZ3RoLCBDRlN0cmluZ1JlZiogbWltZVR5cGUpCitzdGF0aWMgYm9vbCBjcmVh
dGVBcmNoaXZlTGlzdChDRkRpY3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0
b2tlbk51bGwsIENGSW5kZXgqIHZlcnNpb24sIENGVHlwZVJlZioqIG9iamVjdHMsIENGSW5kZXgq
IG9iamVjdENvdW50LCBDRkRpY3Rpb25hcnlSZWYqIHByb3RvY29sUHJvcGVydGllcykKIHsKICAg
ICBhdXRvIHZlcnNpb25OdW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGlj
dGlvbmFyeUdldFZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigidmVyc2lvbiIpKSk7CiAgICAg
aWYgKCF2ZXJzaW9uTnVtYmVyKQpAQCAtMTI1LDEwICsxMTUsNiBAQCBzdGF0aWMgYm9vbCBjcmVh
dGVBcmNoaXZlTGlzdChDRkRpY3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0
b2tlbk51bAogCiAgICAgaWYgKCFleHRyYWN0RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9u
LCBDRlNUUigicHJvdG9jb2xQcm9wZXJ0aWVzIiksIHByb3RvY29sUHJvcGVydGllcykpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWV4dHJhY3REaWN0aW9uYXJ5VmFsdWUocmVwcmVz
ZW50YXRpb24sIENGU1RSKCJleHBlY3RlZENvbnRlbnRMZW5ndGgiKSwgZXhwZWN0ZWRDb250ZW50
TGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZXh0cmFjdERpY3Rpb25h
cnlWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoIm1pbWVUeXBlIiksIG1pbWVUeXBlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgKm9iamVjdENvdW50ID0gYXJjaGl2ZUxpc3RBcnJh
eUNvdW50OwogICAgICpvYmplY3RzID0gc3RhdGljX2Nhc3Q8Q0ZUeXBlUmVmKj4oZmFzdE1hbGxv
YyhidWZmZXJTaXplLnVuc2FmZUdldCgpKSk7CkBAIC0xNTYsNyArMTQyLDcgQEAgc3RhdGljIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9u
KENGVVJMUmVxdWVzdFIKICAgICBfQ0ZVUkxSZXF1ZXN0Q3JlYXRlQXJjaGl2ZUxpc3Qoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgY2ZSZXF1ZXN0LCAmdmVyc2lvbiwgJm9iamVjdHMsICZvYmplY3RDb3Vu
dCwgJnByb3RvY29sUHJvcGVydGllcyk7CiAKICAgICAvLyBUaGlzIHdpbGwgZGVhbGxvY2F0ZSB0
aGUgcGFzc2VkIGluIGFyZ3VtZW50cy4KLSAgICByZXR1cm4gY3JlYXRlU2VyaWFsaXphYmxlUmVw
cmVzZW50YXRpb24odmVyc2lvbiwgb2JqZWN0cywgb2JqZWN0Q291bnQsIHByb3RvY29sUHJvcGVy
dGllcywgbnVsbHB0ciwgbnVsbHB0ciwgdG9rZW5OdWxsKTsKKyAgICByZXR1cm4gY3JlYXRlU2Vy
aWFsaXphYmxlUmVwcmVzZW50YXRpb24odmVyc2lvbiwgb2JqZWN0cywgb2JqZWN0Q291bnQsIHBy
b3RvY29sUHJvcGVydGllcywgdG9rZW5OdWxsKTsKIH0KIAogc3RhdGljIFJldGFpblB0cjxDRlVS
TFJlcXVlc3RSZWY+IGNyZWF0ZUNGVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRh
dGlvbihDRkRpY3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwp
CkBAIC0xNjYsNyArMTUyLDcgQEAgc3RhdGljIFJldGFpblB0cjxDRlVSTFJlcXVlc3RSZWY+IGNy
ZWF0ZUNGVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRhdGkKICAgICBDRkluZGV4
IG9iamVjdENvdW50OwogICAgIENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3BlcnRpZXM7CiAK
LSAgICBpZiAoIWNyZWF0ZUFyY2hpdmVMaXN0KHJlcHJlc2VudGF0aW9uLCB0b2tlbk51bGwsICZ2
ZXJzaW9uLCAmb2JqZWN0cywgJm9iamVjdENvdW50LCAmcHJvdG9jb2xQcm9wZXJ0aWVzLCBudWxs
cHRyLCBudWxscHRyKSkKKyAgICBpZiAoIWNyZWF0ZUFyY2hpdmVMaXN0KHJlcHJlc2VudGF0aW9u
LCB0b2tlbk51bGwsICZ2ZXJzaW9uLCAmb2JqZWN0cywgJm9iamVjdENvdW50LCAmcHJvdG9jb2xQ
cm9wZXJ0aWVzKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvIGNmUmVxdWVz
dCA9IGFkb3B0Q0YoX0NGVVJMUmVxdWVzdENyZWF0ZUZyb21BcmNoaXZlTGlzdChrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCB2ZXJzaW9uLCBvYmplY3RzLCBvYmplY3RDb3VudCwgcHJvdG9jb2xQcm9wZXJ0
aWVzKSk7CkBAIC0yMTQsNiArMjAwLDkgQEAgdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBlbmNvZGUKICAgICBl
bmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXF1ZXN0ZXIoKTsKICAgICBlbmNvZGVyIDw8IHJl
c291cmNlUmVxdWVzdC5jYWNoZVBvbGljeSgpOwogICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1
ZXN0LmlzQXBwQm91bmQoKTsKKworICAgIC8vIFNlcmlhbGl6ZSBhZ2FpbiB3aXRoIHJlYWwgZW5j
b2RlcjoKKyAgICBJUEM6OmVuY29kZShlbmNvZGVyLCByZXF1ZXN0VG9TZXJpYWxpemUuZ2V0KCkp
OwogfQogCiBib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVj
b2RlUGxhdGZvcm1EYXRhKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgcmVzb3VyY2VSZXF1ZXN0KQpAQCAtMjYyLDYgKzI1MSwzMSBAQCBib29sIEFyZ3VtZW50Q29k
ZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKERlY29kZXIm
IGRlY29kZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVzb3VyY2VSZXF1ZXN0LnNldElz
QXBwQm91bmQoaXNBcHBCb3VuZCk7CiAKKyAgICBhdXRvIHJlcXVlc3QgPSBJUEM6OmRlY29kZTxO
U1VSTFJlcXVlc3Q+KGRlY29kZXIsIE5TVVJMUmVxdWVzdC5jbGFzcyk7CisgICAgaWYgKCFyZXF1
ZXN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBURVNUUworICAgIE5TVVJMUmVx
dWVzdCAqY2ZWZXJzaW9uID0gbnNVUkxSZXF1ZXN0LmdldCgpOworICAgIE5TVVJMUmVxdWVzdCAq
bnNWZXJzaW9uID0gcmVxdWVzdC52YWx1ZSgpLmdldCgpOworCisgICAgUkVMRUFTRV9BU1NFUlQo
Y2ZWZXJzaW9uLmNhY2hlUG9saWN5ID09IG5zVmVyc2lvbi5jYWNoZVBvbGljeSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoW2NmVmVyc2lvbi5IVFRQTWV0aG9kIGlzRXF1YWxUb1N0cmluZzogbnNWZXJz
aW9uLkhUVFBNZXRob2RdKTsKKyAgICBSRUxFQVNFX0FTU0VSVChbY2ZWZXJzaW9uLlVSTCBpc0Vx
dWFsOiBuc1ZlcnNpb24uVVJMXSk7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoKCFjZlZlcnNp
b24ubWFpbkRvY3VtZW50VVJMICYmICFuc1ZlcnNpb24ubWFpbkRvY3VtZW50VVJMKSB8fCBbY2ZW
ZXJzaW9uLm1haW5Eb2N1bWVudFVSTCBpc0VxdWFsOiBuc1ZlcnNpb24ubWFpbkRvY3VtZW50VVJM
XSk7CisgICAgaWYgKGNmVmVyc2lvbi5hbGxIVFRQSGVhZGVyRmllbGRzKSB7CisgICAgICAgIGZv
ciAoaWQga2V5IGluIGNmVmVyc2lvbi5hbGxIVFRQSGVhZGVyRmllbGRzKQorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoW1tuc1ZlcnNpb24uYWxsSFRUUEhlYWRlckZpZWxkcyB2YWx1ZUZvcktl
eTprZXldIGlzRXF1YWw6IFtjZlZlcnNpb24uYWxsSFRUUEhlYWRlckZpZWxkcyB2YWx1ZUZvcktl
eToga2V5XV0pOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChjZlZlcnNpb24udGltZW91dElu
dGVydmFsID09IG5zVmVyc2lvbi50aW1lb3V0SW50ZXJ2YWwpOworICAgIFJFTEVBU0VfQVNTRVJU
KGNmVmVyc2lvbi5IVFRQU2hvdWxkSGFuZGxlQ29va2llcyA9PSBuc1ZlcnNpb24uSFRUUFNob3Vs
ZEhhbmRsZUNvb2tpZXMpOworICAgIFJFTEVBU0VfQVNTRVJUKGNmVmVyc2lvbi5IVFRQU2hvdWxk
VXNlUGlwZWxpbmluZyA9PSBuc1ZlcnNpb24uSFRUUFNob3VsZFVzZVBpcGVsaW5pbmcpOworICAg
IFJFTEVBU0VfQVNTRVJUKGNmVmVyc2lvbi5hbGxvd3NDZWxsdWxhckFjY2VzcyA9PSBuc1ZlcnNp
b24uYWxsb3dzQ2VsbHVsYXJBY2Nlc3MpOworICAgIFJFTEVBU0VfQVNTRVJUKGNmVmVyc2lvbi5h
bGxvd3NDb25zdHJhaW5lZE5ldHdvcmtBY2Nlc3MgPT0gbnNWZXJzaW9uLmFsbG93c0NvbnN0cmFp
bmVkTmV0d29ya0FjY2Vzcyk7CisgICAgUkVMRUFTRV9BU1NFUlQoY2ZWZXJzaW9uLmFsbG93c0V4
cGVuc2l2ZU5ldHdvcmtBY2Nlc3MgPT0gbnNWZXJzaW9uLmFsbG93c0V4cGVuc2l2ZU5ldHdvcmtB
Y2Nlc3MpOworICAgIFJFTEVBU0VfQVNTRVJUKGNmVmVyc2lvbi5uZXR3b3JrU2VydmljZVR5cGUg
PT0gbnNWZXJzaW9uLm5ldHdvcmtTZXJ2aWNlVHlwZSk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDBk
YmFlZjI4OTYyODQ4YTMzZDdmNjQxOTVkMTM0YWViMTUzNjNhN2EuLjA1ZWViNTVkMjI5YzZhMDBl
ZDIzZmU0ZTJlZGRhY2QwZmUzYzUxYWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMS0wMi0xOSAgQnJlbnQgRnVs
Z2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTZXJpYWxpemUgTlNVUkxSZXF1
ZXN0IChyYXRoZXIgdGhhbiBDRlVSTFJlcXVlc3QpIGluIElQQworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMTQ1CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS83NDUwMDk2Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlciBhbmQgQWxl
eCBDaHJpc3RlbnNlbi4KKworICAgICAgICBBZGQgYSBuZXcgdGVzdCB0byBlbnN1cmUgd2UgY2Fu
IHN1Y2Nlc3NmdWxseSBsb2FkIFVSTHMgd2l0aCBhY2NlbnRlZCBjaGFyYWN0ZXJzLAorICAgICAg
ICBhbmQgdG8gdGVzdCB0aGUgdXBkYXRlZCBJUEMgc2VyaWFsaXphdGlvbiBmb3IgTlNVUkxSZXF1
ZXN0LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvQS8zMDMvMjQ3LzMw
My8yNDNvLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvTG9hZEludmFsaWRVUkxSZXF1ZXN0Lm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
VEVTVCk6IENvcnJlY3QgVVJMIHJlc3VsdCBub3cgdGhhdCB0aGUgdmFsdWUgaXMgcHJvcGVybHkg
c2VyaWFsaXplZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dL
V2ViVmlld0xvYWRBUElzLm1tOgorICAgICAgICAoVEVTVCk6CisKIDIwMjEtMDItMTkgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBOU0Vycm9y
IHJldHVybmVkIGJ5IFdlYktpdCBBUEkgc2hvdWxkIGFjdHVhbGx5IGNvbmZvcm0gdG8gTlNTZWN1
cmVDb2RpbmcKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvTG9hZEludmFsaWRVUkxSZXF1ZXN0Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Mb2FkSW52YWxpZFVSTFJlcXVlc3QubW0KaW5kZXggN2Q2NTRlZDNhZjJkZGFl
YWM4MjU2MDI0YTc5YTczNjExODRhM2FkYi4uOTZmZThhZDQ0ZGQxZmRjMjM1MjZlNjk0MWE2YzEw
MTg4NzgzNWEyYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Mb2FkSW52YWxpZFVSTFJlcXVlc3QubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Mb2FkSW52YWxpZFVSTFJlcXVlc3QubW0KQEAgLTkzLDcgKzkzLDcg
QEAgVEVTVChXZWJLaXQsIExvYWRJbnZhbGlkVVJMUmVxdWVzdE5vbkFTQ0lJKQogICAgIGRlbGVn
YXRlLmdldCgpLmRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb24gPSBeKFdLV2ViVmlldyAqLCBX
S05hdmlnYXRpb24gKiwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX1dLX1NUUkVR
KGVycm9yLmRvbWFpbiwgQCJXZWJLaXRFcnJvckRvbWFpbiIpOwogICAgICAgICBFWFBFQ1RfRVEo
ZXJyb3IuY29kZSwgV2ViS2l0RXJyb3JDYW5ub3RTaG93VVJMKTsKLSAgICAgICAgRVhQRUNUX1dL
X1NUUkVRKFtlcnJvci51c2VySW5mb1tAIk5TRXJyb3JGYWlsaW5nVVJMS2V5Il0gYWJzb2x1dGVT
dHJpbmddLCAiaHR0cDovLyVDMyVBMiVDMiU4MCVDMiU4MCIpOworICAgICAgICBFWFBFQ1RfV0tf
U1RSRVEoW2Vycm9yLnVzZXJJbmZvW0AiTlNFcnJvckZhaWxpbmdVUkxLZXkiXSBhYnNvbHV0ZVN0
cmluZ10sICJodHRwOi8vJUUyJTgwJTgwIik7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH07
CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbV0tXZWJWaWV3IG5ld10pOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJ
cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3TG9h
ZEFQSXMubW0KaW5kZXggYmVkNTAwZWEzMzk0NWE4MWU2OGQ4ODgzN2ZhOTBhZjdjZTU3MjA4YS4u
NWY5YTlmYTE2ZWMzNzc4MDY0NWY2YjNmMTFmMGI0Y2YxYTE5MDE2ZCAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0xvYWRB
UElzLm1tCkBAIC0xMzIsMyArMTMyLDQxIEBAIFRFU1QoV0tXZWJWaWV3LCBMb2FkU2ltdWxhdGVk
UmVxdWVzdFVwZGF0ZXNCYWNrRm9yd2FyZExpc3QpCiAgICAgRVhQRUNUX1RSVUUoIWxpc3QuZm9y
d2FyZEl0ZW0pOwogICAgIEVYUEVDVF9XS19TVFJFUShleGFtcGxlVVJMU3RyaW5nLCBbbGlzdC5i
YWNrSXRlbS5VUkwgYWJzb2x1dGVTdHJpbmddKTsKIH0KKworVEVTVChXS1dlYlZpZXcsIExvYWRB
Y2NlbnRlZEZpbGVSZXF1ZXN0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsK
KworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZSBh
bGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0
ZS5nZXQoKV07CisKKyAgICBjb25zdCBVSW50OCBieXRlc1s2XSA9IHsgJ0EnLCAweEMzLCAweEE3
LCAweEMzLCAweEEzLCAnbycgfTsKKyAgICBhdXRvIGZpbGVOYW1lID0gYWRvcHROUyhbW05TU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmJ5dGVzIGxlbmd0aDo2IGVuY29kaW5nOk5TVVRGOFN0
cmluZ0VuY29kaW5nXSk7CisKKyAgICAvLyBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gYWRkIHVuaWNv
ZGUgZmlsZW5hbWVzIHRvIGdpdC4KKyAgICBOU1VSTCAqb3JpZ2luYWxGaWxlID0gW1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0
bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgRVhQRUNU
X05PVF9OVUxMKG9yaWdpbmFsRmlsZSk7CisKKyAgICBOU1N0cmluZyAqdGVzdERpcmVjdG9yeVN0
cmluZyA9IFtOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpbW05TVVVJRCBVVUlEXSBVVUlEU3RyaW5nXV07CisgICAgTlNVUkwgKnRlc3REaXJlY3Rv
cnkgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOiB0ZXN0RGlyZWN0b3J5U3RyaW5nXTsKKworICAg
IE5TU3RyaW5nICp0ZXN0RmlsZVN0cmluZyA9IFtbdGVzdERpcmVjdG9yeVN0cmluZyBzdHJpbmdC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6ZmlsZU5hbWUuZ2V0KCldIHN0cmluZ0J5QXBwZW5kaW5n
UGF0aEV4dGVuc2lvbjpAImh0bWwiXTsKKyAgICBOU1VSTCAqdGVzdEZpbGUgPSBbTlNVUkwgZmls
ZVVSTFdpdGhQYXRoOnRlc3RGaWxlU3RyaW5nXTsKKworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZh
dWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJMOnRlc3RGaWxlIGVycm9yOm5pbF07CisgICAgW1tO
U0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGVzdERpcmVjdG9y
eSBlcnJvcjpuaWxdOworCisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjcmVh
dGVEaXJlY3RvcnlBdFVSTDp0ZXN0RGlyZWN0b3J5IHdpdGhJbnRlcm1lZGlhdGVEaXJlY3Rvcmll
czpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmlsXTsKKworICAgIE5TRXJyb3IgKmVycm9yID0g
bmlsOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY29weUl0ZW1BdFVSTDpv
cmlnaW5hbEZpbGUgdG9VUkw6dGVzdEZpbGUgZXJyb3I6JmVycm9yXTsKKyAgICBFWFBFQ1RfTlVM
TChlcnJvcik7CisgICAgCisgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVz
dCByZXF1ZXN0V2l0aFVSTDp0ZXN0RmlsZV07CisgICAgW3dlYlZpZXcgbG9hZEZpbGVSZXF1ZXN0
OnJlcXVlc3QgYWxsb3dpbmdSZWFkQWNjZXNzVG9VUkw6dGVzdEZpbGUuVVJMQnlEZWxldGluZ0xh
c3RQYXRoQ29tcG9uZW50XTsKKyAgICBbZGVsZWdhdGUgd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRp
b25dOworICAgIEVYUEVDVF9XS19TVFJFUSh3ZWJWaWV3LmdldCgpLl9yZXNvdXJjZURpcmVjdG9y
eVVSTC5wYXRoLCB0ZXN0RmlsZS5VUkxCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnQucGF0aCk7
CisKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDp0
ZXN0RmlsZSBlcnJvcjpuaWxdOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
cmVtb3ZlSXRlbUF0VVJMOnRlc3REaXJlY3RvcnkgZXJyb3I6bmlsXTsKK30KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9hZGQtYmxvY2tp
bmctdG8tcmVkaXJlY3QuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9hZGQtYmxvY2tpbmctdG8tcmVkaXJlY3QuaHRtbAppbmRleCAwMTM5MTk1MTZj
ZGZkNjgwOTZmMGFjYTNmZTJlOGY5Yjg4ZTIwYWY1Li5hNjI0YWFiMTM4NzBlMWFlOGI0NmExY2Uw
NjIxNjQxMmU1OTU5M2QwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvYWRkLWJsb2NraW5nLXRvLXJlZGlyZWN0Lmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2FkZC1ibG9ja2luZy10
by1yZWRpcmVjdC5odG1sCkBAIC0zNSwyMCArMzUsMjQgQEAKICAgICAgICAgc3dpdGNoIChkb2N1
bWVudC5sb2NhdGlvbi5oYXNoKSB7CiAgICAgICAgICAgICBjYXNlICIjc3RlcDEiOgogICAgICAg
ICAgICAgICAgIC8vIFNldCBmaXJzdC1wYXJ0eSBjb29raWUgZm9yIGxvY2FsaG9zdC4KKyAgICAg
ICAgICAgICAgICBjb25zb2xlLmxvZygiU3RlcCAxIik7CiAgICAgICAgICAgICAgICAgZG9jdW1l
bnQubG9jYXRpb24uaHJlZiA9IHRoaXJkUGFydHlCYXNlVXJsICsgc3ViUGF0aFRvU2V0Rmlyc3RQ
YXJ0eUNvb2tpZSArICIjIiArIHJldHVyblVybCArICIjc3RlcDIiOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSAiI3N0ZXAyIjoKICAgICAgICAgICAgICAgICAvLyBD
aGVjayB0aGF0IHRoZSBjb29raWUgZ2V0cyBzZW50IGZvciBsb2NhbGhvc3QgdW5kZXIgMTI3LjAu
MC4xIHNpbmNlIGxvY2FsaG9zdCBpcyBub3QgcHJldmFsZW50LgorICAgICAgICAgICAgICAgIGNv
bnNvbGUubG9nKCJTdGVwIDIiKTsKICAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5o
YXNoID0gInN0ZXAzIjsKICAgICAgICAgICAgICAgICBvcGVuSWZyYW1lKHRoaXJkUGFydHlCYXNl
VXJsICsgc3ViUGF0aFRvR2V0Q29va2llcyArICImbWVzc2FnZT1TaG91bGQgcmVjZWl2ZSBmaXJz
dC1wYXJ0eSBjb29raWUuIiwgcnVuVGVzdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlICIjc3RlcDMiOgorICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTdGVw
IDMiKTsKICAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5oYXNoID0gInN0ZXA0IjsK
ICAgICAgICAgICAgICAgICAvLyBMb2FkIGFuIGlmcmFtZSBpbiBhIHJlZGlyZWN0IGNoYWluIHRo
YXQgc3RhcnRzIHdpdGggMTI3LjAuMC4xIGFuZCBlbmRzIHdpdGggbG9jYWxob3N0LiBFeHBlY3Qg
YSBjb29raWUgZm9yIGxvY2FsaG9zdC4KICAgICAgICAgICAgICAgICBvcGVuSWZyYW1lKHJlZGly
ZWN0Q2hhaW5VcmwgKyAiJm1lc3NhZ2U9UmVkaXJlY3QgY2FzZSAxLCBzaG91bGQgcmVjZWl2ZSBm
aXJzdC1wYXJ0eSBjb29raWUuIiwgcnVuVGVzdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlICIjc3RlcDQiOgogICAgICAgICAgICAgICAgIC8vIFNldCBsb2NhbGhv
c3QgYXMgcHJldmFsZW50IHRvIHB1dCBpdCBpbiB0aGUgYmxvY2tpbmcgY2F0ZWdvcnkuCisgICAg
ICAgICAgICAgICAgY29uc29sZS5sb2coIlN0ZXAgNCIpOwogICAgICAgICAgICAgICAgIGRvY3Vt
ZW50LmxvY2F0aW9uLmhhc2ggPSAic3RlcDUiOwogICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIu
c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHRoaXJkUGFydHlPcmlnaW4sIHRydWUsIGZ1
bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0
aWNzUHJldmFsZW50UmVzb3VyY2UodGhpcmRQYXJ0eU9yaWdpbikpCkBAIC01OCwzMCArNjIsMzYg
QEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgIiNzdGVwNSI6CiAg
ICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBubyBjb29raWUgZ2V0cyBzZW50IGZvciBsb2Nh
bGhvc3QgdW5kZXIgMTI3LjAuMC4xIHNpbmNlIGxvY2FsaG9zdCdzIGNvb2tpZXMgYXJlIGJsb2Nr
ZWQuCisgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIlN0ZXAgNSIpOwogICAgICAgICAgICAg
ICAgIGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSAic3RlcDYiOwogICAgICAgICAgICAgICAgIG9w
ZW5JZnJhbWUodGhpcmRQYXJ0eUJhc2VVcmwgKyBzdWJQYXRoVG9HZXRDb29raWVzICsgICImbWVz
c2FnZT1TaG91bGQgcmVjZWl2ZSBubyBjb29raWVzLiIsIHJ1blRlc3QpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAiI3N0ZXA2IjoKICAgICAgICAgICAgICAgICAv
LyBMb2FkIGFuIGlmcmFtZSBpbiBhIHJlZGlyZWN0IGNoYWluIHRoYXQgc3RhcnRzIHdpdGggMTI3
LjAuMC4xIGFuZCBlbmRzIHdpdGggbG9jYWxob3N0LiBFeHBlY3Qgbm8gY29va2llIGZvciBsb2Nh
bGhvc3QuCisgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIlN0ZXAgNiIpOwogICAgICAgICAg
ICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSAic3RlcDciOwogICAgICAgICAgICAgICAg
IG9wZW5JZnJhbWUocmVkaXJlY3RDaGFpblVybCArICImbWVzc2FnZT1SZWRpcmVjdCBjYXNlIDIs
IHNob3VsZCByZWNlaXZlIG5vIGNvb2tpZS4iLCBydW5UZXN0KTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgIiNzdGVwNyI6CiAgICAgICAgICAgICAgICAgLy8gVHJ5
IHRvIHNldCBjb29raWUgZm9yIGxvY2FsaG9zdCB1bmRlciAxMjcuMC4wLjEuCisgICAgICAgICAg
ICAgICAgY29uc29sZS5sb2coIlN0ZXAgNyIpOwogICAgICAgICAgICAgICAgIGRvY3VtZW50Lmxv
Y2F0aW9uLmhhc2ggPSAic3RlcDgiOwogICAgICAgICAgICAgICAgIG9wZW5JZnJhbWUodGhpcmRQ
YXJ0eUJhc2VVcmwgKyBzdWJQYXRoVG9TZXRQYXJ0aXRpb25lZENvb2tpZSArICImbWVzc2FnZT1U
cnkgdG8gc2V0IHRoaXJkLXBhcnR5IGNvb2tpZSBpbiBibG9ja2VkIG1vZGUuIiwgcnVuVGVzdCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICIjc3RlcDgiOgogICAg
ICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgbm8gY29va2llIGdldHMgc2VudCBmb3IgbG9jYWxo
b3N0IHVuZGVyIDEyNy4wLjAuMSBzaW5jZSBsb2NhbGhvc3QncyBjb29raWVzIGFyZSBibG9ja2Vk
LgorICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTdGVwIDgiKTsKICAgICAgICAgICAgICAg
ICBkb2N1bWVudC5sb2NhdGlvbi5oYXNoID0gInN0ZXA5IjsKICAgICAgICAgICAgICAgICBvcGVu
SWZyYW1lKHRoaXJkUGFydHlCYXNlVXJsICsgc3ViUGF0aFRvR2V0Q29va2llcyArICAiJm1lc3Nh
Z2U9QWZ0ZXIgYXR0ZW1wdGVkIGNvb2tpZSBjcmVhdGlvbiwgc2hvdWxkIHJlY2VpdmUgbm8gY29v
a2llLiIsIHJ1blRlc3QpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSAiI3N0ZXA5IjoKICAgICAgICAgICAgICAgICAvLyBMb2FkIGFuIGlmcmFtZSBpbiBhIHJlZGly
ZWN0IGNoYWluIHRoYXQgc3RhcnRzIHdpdGggMTI3LjAuMC4xIGFuZCBlbmRzIHdpdGggbG9jYWxo
b3N0LiBFeHBlY3Qgbm8gY29va2llIGZvciBsb2NhbGhvc3QuCisgICAgICAgICAgICAgICAgY29u
c29sZS5sb2coIlN0ZXAgOSIpOwogICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhh
c2ggPSAic3RlcDEwIjsKICAgICAgICAgICAgICAgICBvcGVuSWZyYW1lKHJlZGlyZWN0Q2hhaW5V
cmwgKyAiJm1lc3NhZ2U9UmVkaXJlY3QgY2FzZSAzLCBhZnRlciBhdHRlbXB0ZWQgY29va2llIGNy
ZWF0aW9uLCBzaG91bGQgcmVjZWl2ZSBubyBjb29raWUuIiwgcnVuVGVzdCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICIjc3RlcDEwIjoKKyAgICAgICAgICAgICAg
ICBjb25zb2xlLmxvZygiU3RlcCAxMCIpOwogICAgICAgICAgICAgICAgIHNldEVuYWJsZUZlYXR1
cmUoZmFsc2UsIGZpbmlzaEpTVGVzdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421108</attachid>
            <date>2021-02-20 13:46:55 -0800</date>
            <delta_ts>2021-02-20 16:14:23 -0800</delta_ts>
            <desc>Logging to identify serialization error.</desc>
            <filename>bug-222145-20210220134654.patch</filename>
            <type>text/plain</type>
            <size>22186</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGVlNTVjYWU4ZjhkMDc5MWI5
MmJkNTM2NjMwNTNiZTNhMzBhMmMyOTguLjE1Yzk0ODQzMTI5YzkwZGMzNTEwZWY1Mjg3MjE4NDE3
YmIyNjVhMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDItMTggIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVx
dWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIEFs
ZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5nIGxheW91dCBhbmQg
V2ViS2l0QVBJIHRlc3RzLgorCisgICAgICAgIFJldmlzZSBJUEMgc2VyaWFsaXphdGlvbiBzbyB0
aGF0IE5TVVJMQ29ubmVjdGlvbiAobW9kZXJuKSBDb2NvYSBidWlsZHMgc2VyaWFsaXplIHRoZQor
ICAgICAgICBOU1VSTFJlcXVlc3Qgb2JqZWN0LCByYXRoZXIgdGhhbiBicmlkZ2luZyB0byBDRlVS
TFJlcXVlc3QgYW5kIHNlcmlhbGl6aW5nIHRoYXQuIFRoaXMKKyAgICAgICAgZW5zdXJlcyB0aGF0
IHRoZSBmdWxsIHNldCBvZiBOU1VSTFJlcXVlc3QgZmVhdHVyZXMgYXJlIGFjY3VyYXRlbHkgcmVj
b25zdGl0dXRlZCBvbiB0aGUKKyAgICAgICAgcmVjZWl2aW5nIHNpZGUgb2YgdGhlIGNvbm5lY3Rp
b24uCisKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2Eu
bW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogQWRkZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29k
ZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKTogQWRkZWQu
CisgICAgICAgICogU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW06CisgICAg
ICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2Rl
UGxhdGZvcm1EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOiBEZWxldGVkLgorCiAy
MDIxLTAyLTE5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgTlNFcnJvciByZXR1cm5lZCBieSBXZWJLaXQgQVBJIHNob3VsZCBhY3R1YWxseSBj
b25mb3JtIHRvIE5TU2VjdXJlQ29kaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCmluZGV4IDc2YWZiNzJmZjJm
ZDRmOTdiNWNmMDEzMmVlYTliMzM3ZmE0NGFiNDMuLjRjOTkzMGQ3ZDU1MGU1MjI1ODMyMjRmZjVm
YjAyYWNiOGQ4OWFmZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dl
YkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
Y29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogI2lt
cG9ydCA8V2ViQ29yZS9Gb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRBdHRyaWJ1dGVzLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NmL0NvcmVUZXh0U1BJ
Lmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNTQzLDQgKzU0NCw2MCBAQCBPcHRp
b25hbDxGb250UGxhdGZvcm1EYXRhPiBBcmd1bWVudENvZGVyPFJlZjxGb250Pj46OmRlY29kZVBs
YXRmb3JtRGF0YShEZWNvZGVyJgogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKGN0Rm9udC5n
ZXQoKSwgc2l6ZS52YWx1ZSgpLCBzeW50aGV0aWNCb2xkLnZhbHVlKCksIHN5bnRoZXRpY09ibGlx
dWUudmFsdWUoKSwgb3JpZW50YXRpb24udmFsdWUoKSwgd2lkdGhWYXJpYW50LnZhbHVlKCksIHRl
eHRSZW5kZXJpbmdNb2RlLnZhbHVlKCkpOwogfQogCisjaWYgMAordm9pZCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkK
K3sKKyAgICBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiByZXF1ZXN0VG9TZXJpYWxpemUgPSByZXNv
dXJjZVJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpE
b05vdFVwZGF0ZUhUVFBCb2R5KTsKKworICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudCA9IHJlcXVl
c3RUb1NlcmlhbGl6ZTsKKyAgICBlbmNvZGVyIDw8IHJlcXVlc3RJc1ByZXNlbnQ7CisKKyAgICBp
ZiAoIXJlcXVlc3RJc1ByZXNlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGRvbid0
IHNlbmQgSFRUUCBib2R5IG92ZXIgSVBDIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgICAgLy8g
QWxzbywgaXQncyBub3QgYWx3YXlzIHBvc3NpYmxlIHRvIGRvLCBhcyBzdHJlYW1zIGNhbiBvbmx5
IGJlIGNyZWF0ZWQgaW4gcHJvY2VzcyB0aGF0IGRvZXMgbmV0d29ya2luZy4KKyAgICBpZiAoW3Jl
cXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9keV0gfHwgW3JlcXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9k
eVN0cmVhbV0pIHsKKyAgICAgICAgcmVxdWVzdFRvU2VyaWFsaXplID0gYWRvcHROUyhbcmVxdWVz
dFRvU2VyaWFsaXplIG11dGFibGVDb3B5XSk7CisgICAgICAgIFsoTlNNdXRhYmxlVVJMUmVxdWVz
dCAqKXJlcXVlc3RUb1NlcmlhbGl6ZSBzZXRIVFRQQm9keTpuaWxdOworICAgICAgICBbKE5TTXV0
YWJsZVVSTFJlcXVlc3QgKilyZXF1ZXN0VG9TZXJpYWxpemUgc2V0SFRUUEJvZHlTdHJlYW06bmls
XTsKKyAgICB9CisKKyAgICBJUEM6OmVuY29kZShlbmNvZGVyLCByZXF1ZXN0VG9TZXJpYWxpemUu
Z2V0KCkpOworCisgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QucmVxdWVzdGVyKCk7Cisg
ICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QuaXNBcHBCb3VuZCgpOworfQorCitib29sIEFy
Z3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRh
KERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1
ZXN0KQoreworICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudDsKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlcXVlc3RJc1ByZXNlbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IXJlcXVlc3RJc1ByZXNlbnQpIHsKKyAgICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0gV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGF1
dG8gcmVxdWVzdCA9IElQQzo6ZGVjb2RlPE5TVVJMUmVxdWVzdD4oZGVjb2RlciwgTlNVUkxSZXF1
ZXN0LmNsYXNzKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJlc291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdChyZXF1ZXN0LT5n
ZXQoKSk7CisgICAgCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXIgcmVx
dWVzdGVyOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVxdWVzdGVyKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJlc291cmNlUmVxdWVzdC5zZXRSZXF1ZXN0ZXIocmVxdWVzdGVyKTsK
KworICAgIGJvb2wgaXNBcHBCb3VuZDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzQXBwQm91
bmQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzb3VyY2VSZXF1ZXN0LnNldElzQXBw
Qm91bmQoaXNBcHBCb3VuZCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiB9IC8v
IG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJD
b3JlQXJndW1lbnRDb2RlcnNNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzTWFjLm1tCmluZGV4IDgzYzJhODczM2M4YTVhZDI3OTRmOTEzMGY2NGMy
OGE2OTAxNjViZjMuLmRiM2YyNThjYmNmNDRhYTA2NjE1NDJiZGU1NTEwMGU1ZGFmZjU5ZmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNN
YWMubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVy
c01hYy5tbQpAQCAtNTAsNTkgKzUwLDcgQEAKIAogbmFtZXNwYWNlIElQQyB7CiAKLXN0YXRpYyBS
ZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVz
ZW50YXRpb24oQ0ZJbmRleCB2ZXJzaW9uLCBDRlR5cGVSZWYqIG9iamVjdHMsIENGSW5kZXggb2Jq
ZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3BlcnRpZXMsIENGTnVtYmVyUmVm
IGV4cGVjdGVkQ29udGVudExlbmd0aCwgQ0ZTdHJpbmdSZWYgbWltZVR5cGUsIENGVHlwZVJlZiB0
b2tlbk51bGwpCi17Ci0gICAgYXV0byBhcmNoaXZlTGlzdEFycmF5ID0gYWRvcHRDRihDRkFycmF5
Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZUFycmF5Q2FsbEJh
Y2tzKSk7Ci0KLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBvYmplY3RDb3VudDsgKytpKSB7
Ci0gICAgICAgIENGVHlwZVJlZiBvYmplY3QgPSBvYmplY3RzW2ldOwotICAgICAgICBpZiAob2Jq
ZWN0KSB7Ci0gICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJjaGl2ZUxpc3RBcnJheS5n
ZXQoKSwgb2JqZWN0KTsKLSAgICAgICAgICAgIENGUmVsZWFzZShvYmplY3QpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgLy8gQXBwZW5kIG91ciB0b2tlbiBudWxsIHJlcHJlc2VudGF0
aW9uLgotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFyY2hpdmVMaXN0QXJyYXkuZ2V0
KCksIHRva2VuTnVsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIGRpY3Rpb25hcnkg
PSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
MCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1
ZUNhbGxCYWNrcykpOwotCi0gICAgYXV0byB2ZXJzaW9uTnVtYmVyID0gYWRvcHRDRihDRk51bWJl
ckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwgJnZlcnNp
b24pKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigi
dmVyc2lvbiIpLCB2ZXJzaW9uTnVtYmVyLmdldCgpKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1
ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigiYXJjaGl2ZUxpc3QiKSwgYXJjaGl2ZUxpc3RBcnJh
eS5nZXQoKSk7Ci0KLSAgICBpZiAocHJvdG9jb2xQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGRGlj
dGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnkuZ2V0KCksIENGU1RSKCJwcm90b2NvbFByb3BlcnRp
ZXMiKSwgcHJvdG9jb2xQcm9wZXJ0aWVzKTsKLSAgICAgICAgQ0ZSZWxlYXNlKHByb3RvY29sUHJv
cGVydGllcyk7Ci0gICAgfQotCi0gICAgaWYgKGV4cGVjdGVkQ29udGVudExlbmd0aCkgewotICAg
ICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigiZXhwZWN0
ZWRDb250ZW50TGVuZ3RoIiksIGV4cGVjdGVkQ29udGVudExlbmd0aCk7Ci0gICAgICAgIENGUmVs
ZWFzZShleHBlY3RlZENvbnRlbnRMZW5ndGgpOwotICAgIH0KLQotICAgIGlmIChtaW1lVHlwZSkg
ewotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigi
bWltZVR5cGUiKSwgbWltZVR5cGUpOwotICAgICAgICBDRlJlbGVhc2UobWltZVR5cGUpOwotICAg
IH0KLQotICAgIENGQWxsb2NhdG9yRGVhbGxvY2F0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBvYmpl
Y3RzKTsKLQotICAgIHJldHVybiBkaWN0aW9uYXJ5OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZVR5cGU+IGJvb2wgZXh0cmFjdERpY3Rpb25hcnlWYWx1ZShDRkRpY3Rpb25hcnlSZWYgZGlj
dGlvbmFyeSwgQ0ZTdHJpbmdSZWYga2V5LCBWYWx1ZVR5cGUqIHJlc3VsdCkKLXsKLSAgICBhdXRv
IHVudHlwZWRWYWx1ZSA9IENGRGljdGlvbmFyeUdldFZhbHVlKGRpY3Rpb25hcnksIGtleSk7Ci0g
ICAgYXV0byB2YWx1ZSA9IGR5bmFtaWNfY2ZfY2FzdDxWYWx1ZVR5cGU+KHVudHlwZWRWYWx1ZSk7
Ci0gICAgaWYgKHVudHlwZWRWYWx1ZSAmJiAhdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAocmVzdWx0KQotICAgICAgICAqcmVzdWx0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0ZUFyY2hpdmVMaXN0KENGRGljdGlvbmFyeVJlZiBy
ZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRva2VuTnVsbCwgQ0ZJbmRleCogdmVyc2lvbiwgQ0ZU
eXBlUmVmKiogb2JqZWN0cywgQ0ZJbmRleCogb2JqZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiog
cHJvdG9jb2xQcm9wZXJ0aWVzLCBDRk51bWJlclJlZiogZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBD
RlN0cmluZ1JlZiogbWltZVR5cGUpCitzdGF0aWMgYm9vbCBjcmVhdGVBcmNoaXZlTGlzdChDRkRp
Y3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwsIENGSW5kZXgq
IHZlcnNpb24sIENGVHlwZVJlZioqIG9iamVjdHMsIENGSW5kZXgqIG9iamVjdENvdW50LCBDRkRp
Y3Rpb25hcnlSZWYqIHByb3RvY29sUHJvcGVydGllcykKIHsKICAgICBhdXRvIHZlcnNpb25OdW1i
ZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJl
cHJlc2VudGF0aW9uLCBDRlNUUigidmVyc2lvbiIpKSk7CiAgICAgaWYgKCF2ZXJzaW9uTnVtYmVy
KQpAQCAtMTIzLDEyICs3MSwxMiBAQCBzdGF0aWMgYm9vbCBjcmVhdGVBcmNoaXZlTGlzdChDRkRp
Y3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bAogICAgIGlmIChi
dWZmZXJTaXplLmhhc092ZXJmbG93ZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKCFleHRyYWN0RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigicHJvdG9j
b2xQcm9wZXJ0aWVzIiksIHByb3RvY29sUHJvcGVydGllcykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIWV4dHJhY3REaWN0aW9uYXJ5VmFsdWUocmVwcmVzZW50YXRpb24sIENGU1RS
KCJleHBlY3RlZENvbnRlbnRMZW5ndGgiKSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZXh0cmFjdERpY3Rpb25hcnlWYWx1ZShyZXByZXNl
bnRhdGlvbiwgQ0ZTVFIoIm1pbWVUeXBlIiksIG1pbWVUeXBlKSkKKyAgICBhdXRvIHVudHlwZWRW
YWx1ZSA9IENGRGljdGlvbmFyeUdldFZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigicHJvdG9j
b2xQcm9wZXJ0aWVzIikpOworICAgIGF1dG8gdmFsdWUgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZEaWN0
aW9uYXJ5UmVmPih1bnR5cGVkVmFsdWUpOworICAgIGlmICh1bnR5cGVkVmFsdWUgJiYgIXZhbHVl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHByb3RvY29sUHJvcGVydGllcykKKyAg
ICAgICAgKnByb3RvY29sUHJvcGVydGllcyA9IHZhbHVlOwogCiAgICAgKm9iamVjdENvdW50ID0g
YXJjaGl2ZUxpc3RBcnJheUNvdW50OwogICAgICpvYmplY3RzID0gc3RhdGljX2Nhc3Q8Q0ZUeXBl
UmVmKj4oZmFzdE1hbGxvYyhidWZmZXJTaXplLnVuc2FmZUdldCgpKSk7CkBAIC0xNDIsOCArOTAs
MTAgQEAgc3RhdGljIGJvb2wgY3JlYXRlQXJjaGl2ZUxpc3QoQ0ZEaWN0aW9uYXJ5UmVmIHJlcHJl
c2VudGF0aW9uLCBDRlR5cGVSZWYgdG9rZW5OdWwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2Vu
dGF0aW9uKENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QsIENGVHlwZVJlZiB0b2tlbk51bGwpCitz
dGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVz
ZW50YXRpb24oTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0LCBDRlR5cGVSZWYgdG9rZW5OdWxsKQogewor
ICAgIENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QgPSBbcmVxdWVzdCBfQ0ZVUkxSZXF1ZXN0XTsK
KwogICAgIENGSW5kZXggdmVyc2lvbjsKICAgICBDRlR5cGVSZWYqIG9iamVjdHM7CiAgICAgQ0ZJ
bmRleCBvYmplY3RDb3VudDsKQEAgLTE1NSwzMyArMTA1LDQ3IEBAIHN0YXRpYyBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihDRlVSTFJl
cXVlc3RSCiAKICAgICBfQ0ZVUkxSZXF1ZXN0Q3JlYXRlQXJjaGl2ZUxpc3Qoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgY2ZSZXF1ZXN0LCAmdmVyc2lvbiwgJm9iamVjdHMsICZvYmplY3RDb3VudCwgJnBy
b3RvY29sUHJvcGVydGllcyk7CiAKLSAgICAvLyBUaGlzIHdpbGwgZGVhbGxvY2F0ZSB0aGUgcGFz
c2VkIGluIGFyZ3VtZW50cy4KLSAgICByZXR1cm4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50
YXRpb24odmVyc2lvbiwgb2JqZWN0cywgb2JqZWN0Q291bnQsIHByb3RvY29sUHJvcGVydGllcywg
bnVsbHB0ciwgbnVsbHB0ciwgdG9rZW5OdWxsKTsKKyAgICBhdXRvIGFyY2hpdmVMaXN0QXJyYXkg
PSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZr
Q0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKKworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IG9i
amVjdENvdW50OyArK2kpIHsKKyAgICAgICAgQ0ZUeXBlUmVmIG9iamVjdCA9IG9iamVjdHNbaV07
CisgICAgICAgIGlmIChvYmplY3QpIHsKKyAgICAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShh
cmNoaXZlTGlzdEFycmF5LmdldCgpLCBvYmplY3QpOworICAgICAgICAgICAgQ0ZSZWxlYXNlKG9i
amVjdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBcHBlbmQgb3VyIHRva2Vu
IG51bGwgcmVwcmVzZW50YXRpb24uCisgICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJj
aGl2ZUxpc3RBcnJheS5nZXQoKSwgdG9rZW5OdWxsKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisKKyAgICBhdXRvIHZlcnNpb25OdW1iZXIg
PSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckNG
SW5kZXhUeXBlLCAmdmVyc2lvbikpOworICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25h
cnkuZ2V0KCksIENGU1RSKCJ2ZXJzaW9uIiksIHZlcnNpb25OdW1iZXIuZ2V0KCkpOworICAgIENG
RGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnkuZ2V0KCksIENGU1RSKCJhcmNoaXZlTGlzdCIp
LCBhcmNoaXZlTGlzdEFycmF5LmdldCgpKTsKKworICAgIGlmIChwcm90b2NvbFByb3BlcnRpZXMp
IHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIo
InByb3RvY29sUHJvcGVydGllcyIpLCBwcm90b2NvbFByb3BlcnRpZXMpOworICAgICAgICBDRlJl
bGVhc2UocHJvdG9jb2xQcm9wZXJ0aWVzKTsKKyAgICB9CisKKyAgICBDRkFsbG9jYXRvckRlYWxs
b2NhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgb2JqZWN0cyk7CisKKyAgICByZXR1cm4gZGljdGlv
bmFyeTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDRlVSTFJlcXVlc3RSZWY+IGNyZWF0ZUNGVVJM
UmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgcmVw
cmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwpCitzdGF0aWMgUmV0YWluUHRyPE5TVVJM
UmVxdWVzdD4gY3JlYXRlTlNVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9u
KENGRGljdGlvbmFyeVJlZiByZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRva2VuTnVsbCkKIHsK
ICAgICBDRkluZGV4IHZlcnNpb247CiAgICAgQ0ZUeXBlUmVmKiBvYmplY3RzOwogICAgIENGSW5k
ZXggb2JqZWN0Q291bnQ7CiAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3RvY29sUHJvcGVydGllczsK
IAotICAgIGlmICghY3JlYXRlQXJjaGl2ZUxpc3QocmVwcmVzZW50YXRpb24sIHRva2VuTnVsbCwg
JnZlcnNpb24sICZvYmplY3RzLCAmb2JqZWN0Q291bnQsICZwcm90b2NvbFByb3BlcnRpZXMsIG51
bGxwdHIsIG51bGxwdHIpKQorICAgIGlmICghY3JlYXRlQXJjaGl2ZUxpc3QocmVwcmVzZW50YXRp
b24sIHRva2VuTnVsbCwgJnZlcnNpb24sICZvYmplY3RzLCAmb2JqZWN0Q291bnQsICZwcm90b2Nv
bFByb3BlcnRpZXMpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gY2ZSZXF1
ZXN0ID0gYWRvcHRDRihfQ0ZVUkxSZXF1ZXN0Q3JlYXRlRnJvbUFyY2hpdmVMaXN0KGtDRkFsbG9j
YXRvckRlZmF1bHQsIHZlcnNpb24sIG9iamVjdHMsIG9iamVjdENvdW50LCBwcm90b2NvbFByb3Bl
cnRpZXMpKTsKICAgICBmYXN0RnJlZShvYmplY3RzKTsKLSAgICByZXR1cm4gV1RGTW92ZShjZlJl
cXVlc3QpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY3JlYXRlU2Vy
aWFsaXphYmxlUmVwcmVzZW50YXRpb24oTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0LCBDRlR5cGVSZWYg
dG9rZW5OdWxsKQotewotICAgIHJldHVybiBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlv
bihbcmVxdWVzdCBfQ0ZVUkxSZXF1ZXN0XSwgdG9rZW5OdWxsKTsKLX0KLQotc3RhdGljIFJldGFp
blB0cjxOU1VSTFJlcXVlc3Q+IGNyZWF0ZU5TVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXBy
ZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tl
bk51bGwpCi17Ci0gICAgYXV0byBjZlJlcXVlc3QgPSBjcmVhdGVDRlVSTFJlcXVlc3RGcm9tU2Vy
aWFsaXphYmxlUmVwcmVzZW50YXRpb24ocmVwcmVzZW50YXRpb24sIHRva2VuTnVsbCk7CiAgICAg
aWYgKCFjZlJlcXVlc3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIApAQCAtMjE0LDYg
KzE3OCw5IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+Ojpl
bmNvZGVQbGF0Zm9ybURhdGEoRW5jb2RlciYgZW5jb2RlCiAgICAgZW5jb2RlciA8PCByZXNvdXJj
ZVJlcXVlc3QucmVxdWVzdGVyKCk7CiAgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QuY2Fj
aGVQb2xpY3koKTsKICAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5pc0FwcEJvdW5kKCk7
CisKKyAgICAvLyBTZXJpYWxpemUgYWdhaW4gd2l0aCByZWFsIGVuY29kZXI6CisgICAgSVBDOjpl
bmNvZGUoZW5jb2RlciwgcmVxdWVzdFRvU2VyaWFsaXplLmdldCgpKTsKIH0KIAogYm9vbCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0YShE
ZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVz
dCkKQEAgLTI2Miw2ICsyMjksOTQgQEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0YShEZWNvZGVyJiBkZWNvZGUKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJlc291cmNlUmVxdWVzdC5zZXRJc0FwcEJvdW5kKGlzQXBwQm91
bmQpOwogCisgICAgYXV0byByZXF1ZXN0ID0gSVBDOjpkZWNvZGU8TlNVUkxSZXF1ZXN0PihkZWNv
ZGVyLCBOU1VSTFJlcXVlc3QuY2xhc3MpOworICAgIGlmICghcmVxdWVzdCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gVEVTVFMKKyAgICBOU1VSTFJlcXVlc3QgKmNmUmVxdWVzdCA9
IG5zVVJMUmVxdWVzdC5nZXQoKTsKKyAgICBOU1VSTFJlcXVlc3QgKm5zUmVxdWVzdCA9IHJlcXVl
c3QudmFsdWUoKS5nZXQoKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKGNmUmVxdWVzdC5jYWNoZVBv
bGljeSA9PSBuc1JlcXVlc3QuY2FjaGVQb2xpY3kpOworICAgIFJFTEVBU0VfQVNTRVJUKFtjZlJl
cXVlc3QuSFRUUE1ldGhvZCBpc0VxdWFsVG9TdHJpbmc6IG5zUmVxdWVzdC5IVFRQTWV0aG9kXSk7
CisgICAgUkVMRUFTRV9BU1NFUlQoW2NmUmVxdWVzdC5VUkwgaXNFcXVhbDogbnNSZXF1ZXN0LlVS
TF0pOworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKCghY2ZSZXF1ZXN0Lm1haW5Eb2N1bWVudFVS
TCAmJiAhbnNSZXF1ZXN0Lm1haW5Eb2N1bWVudFVSTCkgfHwgW2NmUmVxdWVzdC5tYWluRG9jdW1l
bnRVUkwgaXNFcXVhbDogbnNSZXF1ZXN0Lm1haW5Eb2N1bWVudFVSTF0pOworICAgIGlmIChjZlJl
cXVlc3QuYWxsSFRUUEhlYWRlckZpZWxkcykgeworICAgICAgICBmb3IgKGlkIGtleSBpbiBjZlJl
cXVlc3QuYWxsSFRUUEhlYWRlckZpZWxkcykKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFtb
bnNSZXF1ZXN0LmFsbEhUVFBIZWFkZXJGaWVsZHMgdmFsdWVGb3JLZXk6a2V5XSBpc0VxdWFsOiBb
Y2ZSZXF1ZXN0LmFsbEhUVFBIZWFkZXJGaWVsZHMgdmFsdWVGb3JLZXk6IGtleV1dKTsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlQoY2ZSZXF1ZXN0LnRpbWVvdXRJbnRlcnZhbCA9PSBuc1JlcXVl
c3QudGltZW91dEludGVydmFsKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjZlJlcXVlc3QuSFRUUFNo
b3VsZEhhbmRsZUNvb2tpZXMgPT0gbnNSZXF1ZXN0LkhUVFBTaG91bGRIYW5kbGVDb29raWVzKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChjZlJlcXVlc3QuSFRUUFNob3VsZFVzZVBpcGVsaW5pbmcgPT0g
bnNSZXF1ZXN0LkhUVFBTaG91bGRVc2VQaXBlbGluaW5nKTsKKyAgICBSRUxFQVNFX0FTU0VSVChj
ZlJlcXVlc3QuYWxsb3dzQ2VsbHVsYXJBY2Nlc3MgPT0gbnNSZXF1ZXN0LmFsbG93c0NlbGx1bGFy
QWNjZXNzKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjZlJlcXVlc3QuYWxsb3dzQ29uc3RyYWluZWRO
ZXR3b3JrQWNjZXNzID09IG5zUmVxdWVzdC5hbGxvd3NDb25zdHJhaW5lZE5ldHdvcmtBY2Nlc3Mp
OworICAgIFJFTEVBU0VfQVNTRVJUKGNmUmVxdWVzdC5hbGxvd3NFeHBlbnNpdmVOZXR3b3JrQWNj
ZXNzID09IG5zUmVxdWVzdC5hbGxvd3NFeHBlbnNpdmVOZXR3b3JrQWNjZXNzKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChjZlJlcXVlc3QubmV0d29ya1NlcnZpY2VUeXBlID09IG5zUmVxdWVzdC5uZXR3
b3JrU2VydmljZVR5cGUpOworCisgICAgLy8gQ29tcGFyZSB0aGUgcHJvcGVydGllcworICAgIGF1
dG8gY2ZEaWN0aW9uYXJ5ID0gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oY2ZSZXF1
ZXN0LCBJUEM6OnRva2VuTnVsbHB0clR5cGVSZWYoKSk7CisgICAgYXV0byBuc0RpY3Rpb25hcnkg
PSBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihuc1JlcXVlc3QsIElQQzo6dG9rZW5O
dWxscHRyVHlwZVJlZigpKTsKKworICAgIC8vIFRoZXNlIG91Z2h0IHRvIGJlIGlkZW50aWNhbC4K
KyAgICBhdXRvIGNmVmVyc2lvbk51bWJlciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4o
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoY2ZEaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigidmVyc2lvbiIp
KSk7CisgICAgYXV0byBuc1ZlcnNpb25OdW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJS
ZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG5zRGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIoInZlcnNp
b24iKSkpOworCisgICAgQ0ZJbmRleCBjZlZlcnNpb24sIG5zVmVyc2lvbjsKKyAgICBDRk51bWJl
ckdldFZhbHVlKGNmVmVyc2lvbk51bWJlciwga0NGTnVtYmVyQ0ZJbmRleFR5cGUsICZjZlZlcnNp
b24pOworICAgIENGTnVtYmVyR2V0VmFsdWUobnNWZXJzaW9uTnVtYmVyLCBrQ0ZOdW1iZXJDRklu
ZGV4VHlwZSwgJm5zVmVyc2lvbik7CisgICAgUkVMRUFTRV9BU1NFUlQoY2ZWZXJzaW9uID09IG5z
VmVyc2lvbik7CisgICAgCisgICAgYXV0byBjZkFyY2hpdmVMaXN0QXJyYXkgPSBkeW5hbWljX2Nm
X2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoY2ZEaWN0aW9uYXJ5LmdldCgp
LCBDRlNUUigiYXJjaGl2ZUxpc3QiKSkpOworICAgIGF1dG8gbnNBcmNoaXZlTGlzdEFycmF5ID0g
ZHluYW1pY19jZl9jYXN0PENGQXJyYXlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG5zRGljdGlv
bmFyeS5nZXQoKSwgQ0ZTVFIoImFyY2hpdmVMaXN0IikpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgo
Y2ZBcmNoaXZlTGlzdEFycmF5ICYmIG5zQXJjaGl2ZUxpc3RBcnJheSkgfHwgKCFjZkFyY2hpdmVM
aXN0QXJyYXkgJiYgIW5zQXJjaGl2ZUxpc3RBcnJheSkpOworCisgICAgYXV0byBjZkFyY2hpdmVM
aXN0QXJyYXlDb3VudCA9IENGQXJyYXlHZXRDb3VudChjZkFyY2hpdmVMaXN0QXJyYXkpOworICAg
IGF1dG8gbnNBcmNoaXZlTGlzdEFycmF5Q291bnQgPSBDRkFycmF5R2V0Q291bnQobnNBcmNoaXZl
TGlzdEFycmF5KTsKKyAgICBSRUxFQVNFX0FTU0VSVChjZkFyY2hpdmVMaXN0QXJyYXlDb3VudCA9
PSBuc0FyY2hpdmVMaXN0QXJyYXlDb3VudCk7CisKKyAgICBpZiAoY2ZBcmNoaXZlTGlzdEFycmF5
Q291bnQgJiYgbnNBcmNoaXZlTGlzdEFycmF5Q291bnQpIHsKKyAgICAgICAgZm9yIChDRkluZGV4
IGkgPSAwOyBpIDwgY2ZBcmNoaXZlTGlzdEFycmF5Q291bnQ7ICsraSkgeworICAgICAgICAgICAg
YXV0byBjZk9iaiA9IENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY2ZBcmNoaXZlTGlzdEFycmF5LCBp
KTsKKyAgICAgICAgICAgIGF1dG8gbnNPYmogPSBDRkFycmF5R2V0VmFsdWVBdEluZGV4KG5zQXJj
aGl2ZUxpc3RBcnJheSwgaSk7CisgICAgICAgICAgICBpZiAoY2ZPYmogPT0gSVBDOjp0b2tlbk51
bGxwdHJUeXBlUmVmKCkpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChuc09iaiA9
PSBJUEM6OnRva2VuTnVsbHB0clR5cGVSZWYoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChDRkdldFR5cGVJRChj
Zk9iaikgPT0gQ0ZHZXRUeXBlSUQobnNPYmopKTsKKyAgICAgICAgICAgIGlmICghV1RGOjpzYWZl
Q0ZFcXVhbChjZk9iaiwgbnNPYmopKSB7CisgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJB
cmNoaXZlIExpc3QgbWlzbWF0Y2ggYXQgcG9zaXRpb24gJWQiLCBpKTsKKyAgICAgICAgICAgICAg
ICBDRlNob3coY2ZPYmopOworICAgICAgICAgICAgICAgIENGU2hvdyhuc09iaik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYXV0byBjZlByb3RvY29sUHJvcGVy
dGllcyA9IGR5bmFtaWNfY2ZfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGRGljdGlvbmFyeUdldFZh
bHVlKGNmRGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIoInByb3RvY29sUHJvcGVydGllcyIpKSk7Cisg
ICAgYXV0byBuc1Byb3RvY29sUHJvcGVydGllcyA9IGR5bmFtaWNfY2ZfY2FzdDxDRkRpY3Rpb25h
cnlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG5zRGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIoInBy
b3RvY29sUHJvcGVydGllcyIpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoKGNmUHJvdG9jb2xQcm9w
ZXJ0aWVzICYmIG5zUHJvdG9jb2xQcm9wZXJ0aWVzKSB8fCAoIWNmUHJvdG9jb2xQcm9wZXJ0aWVz
ICYmICFuc1Byb3RvY29sUHJvcGVydGllcykpOworICAgIGlmIChjZlByb3RvY29sUHJvcGVydGll
cyAmJiBuc1Byb3RvY29sUHJvcGVydGllcykgeworICAgICAgICBDRkluZGV4IGNmU2l6ZSA9IENG
RGljdGlvbmFyeUdldENvdW50KGNmUHJvdG9jb2xQcm9wZXJ0aWVzKTsKKyAgICAgICAgQ0ZJbmRl
eCBuc1NpemUgPSBDRkRpY3Rpb25hcnlHZXRDb3VudChuc1Byb3RvY29sUHJvcGVydGllcyk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNmU2l6ZSA9PSBuc1NpemUpOworCisgICAgICAgIFZlY3Rv
cjxDRlR5cGVSZWYsIDMyPiBjZktleXMoY2ZTaXplKTsKKyAgICAgICAgVmVjdG9yPENGVHlwZVJl
ZiwgMzI+IGNmVmFsdWVzKGNmU2l6ZSk7CisgICAgICAgIENGRGljdGlvbmFyeUdldEtleXNBbmRW
YWx1ZXMoY2ZQcm90b2NvbFByb3BlcnRpZXMsIGNmS2V5cy5kYXRhKCksIGNmVmFsdWVzLmRhdGEo
KSk7CisKKyAgICAgICAgZm9yIChhdXRvIGkgPSAwOyBpIDwgY2ZTaXplOyArK2kpIHsKKyAgICAg
ICAgICAgIGF1dG8ga2V5ID0gY2ZLZXlzW2ldOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Q0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkobnNQcm90b2NvbFByb3BlcnRpZXMsIGtleSkpOworICAg
ICAgICAgICAgYXV0byBuc1ZhbHVlID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobnNQcm90b2NvbFBy
b3BlcnRpZXMsIGtleSk7CisgICAgICAgICAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQobnNWYWx1ZSkg
PT0gQ0ZHZXRUeXBlSUQoY2ZWYWx1ZXNbaV0pKTsKKyAgICAgICAgICAgIGlmICghV1RGOjpzYWZl
Q0ZFcXVhbChuc1ZhbHVlLCBjZlZhbHVlc1tpXSkpIHsKKyAgICAgICAgICAgICAgICBXVEZMb2dB
bHdheXMoIlByb3RvY29sIFByb3BlcnRpZXMgZGljdGlvbmFyeSBtaXNtYXRjaCBhdCBwb3NpdGlv
biAlZCIsIGkpOworICAgICAgICAgICAgICAgIENGU2hvdyhjZlZhbHVlc1tpXSk7CisgICAgICAg
ICAgICAgICAgQ0ZTaG93KG5zVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwZGJhZWYyODk2Mjg0OGEzM2Q3ZjY0MTk1ZDEzNGFlYjE1
MzYzYTdhLi4wNWVlYjU1ZDIyOWM2YTAwZWQyM2ZlNGUyZWRkYWNkMGZlM2M1MWFiIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMjEtMDItMTkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAg
ICAgICAgU2VyaWFsaXplIE5TVVJMUmVxdWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1ZXN0KSBp
biBJUEMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MjE0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgQWRkIGEg
bmV3IHRlc3QgdG8gZW5zdXJlIHdlIGNhbiBzdWNjZXNzZnVsbHkgbG9hZCBVUkxzIHdpdGggYWNj
ZW50ZWQgY2hhcmFjdGVycywKKyAgICAgICAgYW5kIHRvIHRlc3QgdGhlIHVwZGF0ZWQgSVBDIHNl
cmlhbGl6YXRpb24gZm9yIE5TVVJMUmVxdWVzdC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0L0EvMzAzLzI0Ny8zMDMvMjQzby5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvYWRJbnZhbGlkVVJMUmVxdWVzdC5tbToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOiBDb3JyZWN0IFVSTCByZXN1bHQgbm93IHRo
YXQgdGhlIHZhbHVlIGlzIHByb3Blcmx5IHNlcmlhbGl6ZWQuCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbToKKyAgICAgICAgKFRF
U1QpOgorCiAyMDIxLTAyLTE5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgTlNFcnJvciByZXR1cm5lZCBieSBXZWJLaXQgQVBJIHNob3VsZCBh
Y3R1YWxseSBjb25mb3JtIHRvIE5TU2VjdXJlQ29kaW5nCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvYWRJbnZhbGlkVVJMUmVxdWVzdC5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9hZEludmFsaWRVUkxSZXF1ZXN0
Lm1tCmluZGV4IDdkNjU0ZWQzYWYyZGRhZWFjODI1NjAyNGE3OWE3MzYxMTg0YTNhZGIuLjk2ZmU4
YWQ0NGRkMWZkYzIzNTI2ZTY5NDFhNmMxMDE4ODc4MzVhMmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9hZEludmFsaWRVUkxSZXF1ZXN0Lm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9hZEludmFsaWRVUkxS
ZXF1ZXN0Lm1tCkBAIC05Myw3ICs5Myw3IEBAIFRFU1QoV2ViS2l0LCBMb2FkSW52YWxpZFVSTFJl
cXVlc3ROb25BU0NJSSkKICAgICBkZWxlZ2F0ZS5nZXQoKS5kaWRGYWlsUHJvdmlzaW9uYWxOYXZp
Z2F0aW9uID0gXihXS1dlYlZpZXcgKiwgV0tOYXZpZ2F0aW9uICosIE5TRXJyb3IgKmVycm9yKSB7
CiAgICAgICAgIEVYUEVDVF9XS19TVFJFUShlcnJvci5kb21haW4sIEAiV2ViS2l0RXJyb3JEb21h
aW4iKTsKICAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIFdlYktpdEVycm9yQ2Fubm90U2hv
d1VSTCk7Ci0gICAgICAgIEVYUEVDVF9XS19TVFJFUShbZXJyb3IudXNlckluZm9bQCJOU0Vycm9y
RmFpbGluZ1VSTEtleSJdIGFic29sdXRlU3RyaW5nXSwgImh0dHA6Ly8lQzMlQTIlQzIlODAlQzIl
ODAiKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKFtlcnJvci51c2VySW5mb1tAIk5TRXJyb3JG
YWlsaW5nVVJMS2V5Il0gYWJzb2x1dGVTdHJpbmddLCAiaHR0cDovLyVFMiU4MCU4MCIpOwogICAg
ICAgICBkb25lID0gdHJ1ZTsKICAgICB9OwogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1dL
V2ViVmlldyBuZXddKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tXZWJWaWV3TG9hZEFQSXMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1dLV2ViVmlld0xvYWRBUElzLm1tCmluZGV4IGJlZDUwMGVhMzM5NDVhODFl
NjhkODg4MzdmYTkwYWY3Y2U1NzIwOGEuLjVmOWE5ZmExNmVjMzc3ODA2NDVmNmIzZjExZjBiNGNm
MWExOTAxNmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV0tXZWJWaWV3TG9hZEFQSXMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbQpAQCAtMTMyLDMgKzEzMiw0MSBAQCBURVNU
KFdLV2ViVmlldywgTG9hZFNpbXVsYXRlZFJlcXVlc3RVcGRhdGVzQmFja0ZvcndhcmRMaXN0KQog
ICAgIEVYUEVDVF9UUlVFKCFsaXN0LmZvcndhcmRJdGVtKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEo
ZXhhbXBsZVVSTFN0cmluZywgW2xpc3QuYmFja0l0ZW0uVVJMIGFic29sdXRlU3RyaW5nXSk7CiB9
CisKK1RFU1QoV0tXZWJWaWV3LCBMb2FkQWNjZW50ZWRGaWxlUmVxdWVzdCkKK3sKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
W1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBbd2ViVmlldyBzZXRO
YXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgY29uc3QgVUludDggYnl0
ZXNbNl0gPSB7ICdBJywgMHhDMywgMHhBNywgMHhDMywgMHhBMywgJ28nIH07CisgICAgYXV0byBm
aWxlTmFtZSA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhCeXRlczpieXRlcyBs
ZW5ndGg6NiBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pOworCisgICAgLy8gVGhpcyBh
dm9pZHMgaGF2aW5nIHRvIGFkZCB1bmljb2RlIGZpbGVuYW1lcyB0byBnaXQuCisgICAgTlNVUkwg
Km9yaWdpbmFsRmlsZSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJz
aW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJ
LnJlc291cmNlcyJdOworICAgIEVYUEVDVF9OT1RfTlVMTChvcmlnaW5hbEZpbGUpOworCisgICAg
TlNTdHJpbmcgKnRlc3REaXJlY3RvcnlTdHJpbmcgPSBbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBz
dHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6W1tOU1VVSUQgVVVJRF0gVVVJRFN0cmluZ11d
OworICAgIE5TVVJMICp0ZXN0RGlyZWN0b3J5ID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDogdGVz
dERpcmVjdG9yeVN0cmluZ107CisKKyAgICBOU1N0cmluZyAqdGVzdEZpbGVTdHJpbmcgPSBbW3Rl
c3REaXJlY3RvcnlTdHJpbmcgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OmZpbGVOYW1l
LmdldCgpXSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhFeHRlbnNpb246QCJodG1sIl07CisgICAgTlNV
UkwgKnRlc3RGaWxlID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDp0ZXN0RmlsZVN0cmluZ107CisK
KyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDp0ZXN0
RmlsZSBlcnJvcjpuaWxdOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVt
b3ZlSXRlbUF0VVJMOnRlc3REaXJlY3RvcnkgZXJyb3I6bmlsXTsKKworICAgIFtbTlNGaWxlTWFu
YWdlciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRVUkw6dGVzdERpcmVjdG9yeSB3
aXRoSW50ZXJtZWRpYXRlRGlyZWN0b3JpZXM6WUVTIGF0dHJpYnV0ZXM6bmlsIGVycm9yOm5pbF07
CisKKyAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVs
dE1hbmFnZXJdIGNvcHlJdGVtQXRVUkw6b3JpZ2luYWxGaWxlIHRvVVJMOnRlc3RGaWxlIGVycm9y
OiZlcnJvcl07CisgICAgRVhQRUNUX05VTEwoZXJyb3IpOworICAgIAorICAgIE5TVVJMUmVxdWVz
dCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdEZpbGVdOworICAg
IFt3ZWJWaWV3IGxvYWRGaWxlUmVxdWVzdDpyZXF1ZXN0IGFsbG93aW5nUmVhZEFjY2Vzc1RvVVJM
OnRlc3RGaWxlLlVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07CisgICAgW2RlbGVnYXRl
IHdhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEod2ViVmll
dy5nZXQoKS5fcmVzb3VyY2VEaXJlY3RvcnlVUkwucGF0aCwgdGVzdEZpbGUuVVJMQnlEZWxldGlu
Z0xhc3RQYXRoQ29tcG9uZW50LnBhdGgpOworCisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRN
YW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGVzdEZpbGUgZXJyb3I6bmlsXTsKKyAgICBbW05TRmls
ZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDp0ZXN0RGlyZWN0b3J5IGVy
cm9yOm5pbF07Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421119</attachid>
            <date>2021-02-20 16:14:26 -0800</date>
            <delta_ts>2021-02-20 17:49:37 -0800</delta_ts>
            <desc>Additional logging</desc>
            <filename>bug-222145-20210220161425.patch</filename>
            <type>text/plain</type>
            <size>25755</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGVlNTVjYWU4ZjhkMDc5MWI5
MmJkNTM2NjMwNTNiZTNhMzBhMmMyOTguLjE1Yzk0ODQzMTI5YzkwZGMzNTEwZWY1Mjg3MjE4NDE3
YmIyNjVhMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDItMTggIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVx
dWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIEFs
ZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5nIGxheW91dCBhbmQg
V2ViS2l0QVBJIHRlc3RzLgorCisgICAgICAgIFJldmlzZSBJUEMgc2VyaWFsaXphdGlvbiBzbyB0
aGF0IE5TVVJMQ29ubmVjdGlvbiAobW9kZXJuKSBDb2NvYSBidWlsZHMgc2VyaWFsaXplIHRoZQor
ICAgICAgICBOU1VSTFJlcXVlc3Qgb2JqZWN0LCByYXRoZXIgdGhhbiBicmlkZ2luZyB0byBDRlVS
TFJlcXVlc3QgYW5kIHNlcmlhbGl6aW5nIHRoYXQuIFRoaXMKKyAgICAgICAgZW5zdXJlcyB0aGF0
IHRoZSBmdWxsIHNldCBvZiBOU1VSTFJlcXVlc3QgZmVhdHVyZXMgYXJlIGFjY3VyYXRlbHkgcmVj
b25zdGl0dXRlZCBvbiB0aGUKKyAgICAgICAgcmVjZWl2aW5nIHNpZGUgb2YgdGhlIGNvbm5lY3Rp
b24uCisKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2Eu
bW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogQWRkZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29k
ZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKTogQWRkZWQu
CisgICAgICAgICogU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW06CisgICAg
ICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2Rl
UGxhdGZvcm1EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOiBEZWxldGVkLgorCiAy
MDIxLTAyLTE5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgTlNFcnJvciByZXR1cm5lZCBieSBXZWJLaXQgQVBJIHNob3VsZCBhY3R1YWxseSBj
b25mb3JtIHRvIE5TU2VjdXJlQ29kaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCmluZGV4IDc2YWZiNzJmZjJm
ZDRmOTdiNWNmMDEzMmVlYTliMzM3ZmE0NGFiNDMuLjRjOTkzMGQ3ZDU1MGU1MjI1ODMyMjRmZjVm
YjAyYWNiOGQ4OWFmZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dl
YkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
Y29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogI2lt
cG9ydCA8V2ViQ29yZS9Gb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRBdHRyaWJ1dGVzLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NmL0NvcmVUZXh0U1BJ
Lmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNTQzLDQgKzU0NCw2MCBAQCBPcHRp
b25hbDxGb250UGxhdGZvcm1EYXRhPiBBcmd1bWVudENvZGVyPFJlZjxGb250Pj46OmRlY29kZVBs
YXRmb3JtRGF0YShEZWNvZGVyJgogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKGN0Rm9udC5n
ZXQoKSwgc2l6ZS52YWx1ZSgpLCBzeW50aGV0aWNCb2xkLnZhbHVlKCksIHN5bnRoZXRpY09ibGlx
dWUudmFsdWUoKSwgb3JpZW50YXRpb24udmFsdWUoKSwgd2lkdGhWYXJpYW50LnZhbHVlKCksIHRl
eHRSZW5kZXJpbmdNb2RlLnZhbHVlKCkpOwogfQogCisjaWYgMAordm9pZCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkK
K3sKKyAgICBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiByZXF1ZXN0VG9TZXJpYWxpemUgPSByZXNv
dXJjZVJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpE
b05vdFVwZGF0ZUhUVFBCb2R5KTsKKworICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudCA9IHJlcXVl
c3RUb1NlcmlhbGl6ZTsKKyAgICBlbmNvZGVyIDw8IHJlcXVlc3RJc1ByZXNlbnQ7CisKKyAgICBp
ZiAoIXJlcXVlc3RJc1ByZXNlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGRvbid0
IHNlbmQgSFRUUCBib2R5IG92ZXIgSVBDIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgICAgLy8g
QWxzbywgaXQncyBub3QgYWx3YXlzIHBvc3NpYmxlIHRvIGRvLCBhcyBzdHJlYW1zIGNhbiBvbmx5
IGJlIGNyZWF0ZWQgaW4gcHJvY2VzcyB0aGF0IGRvZXMgbmV0d29ya2luZy4KKyAgICBpZiAoW3Jl
cXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9keV0gfHwgW3JlcXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9k
eVN0cmVhbV0pIHsKKyAgICAgICAgcmVxdWVzdFRvU2VyaWFsaXplID0gYWRvcHROUyhbcmVxdWVz
dFRvU2VyaWFsaXplIG11dGFibGVDb3B5XSk7CisgICAgICAgIFsoTlNNdXRhYmxlVVJMUmVxdWVz
dCAqKXJlcXVlc3RUb1NlcmlhbGl6ZSBzZXRIVFRQQm9keTpuaWxdOworICAgICAgICBbKE5TTXV0
YWJsZVVSTFJlcXVlc3QgKilyZXF1ZXN0VG9TZXJpYWxpemUgc2V0SFRUUEJvZHlTdHJlYW06bmls
XTsKKyAgICB9CisKKyAgICBJUEM6OmVuY29kZShlbmNvZGVyLCByZXF1ZXN0VG9TZXJpYWxpemUu
Z2V0KCkpOworCisgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QucmVxdWVzdGVyKCk7Cisg
ICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QuaXNBcHBCb3VuZCgpOworfQorCitib29sIEFy
Z3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRh
KERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1
ZXN0KQoreworICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudDsKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlcXVlc3RJc1ByZXNlbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IXJlcXVlc3RJc1ByZXNlbnQpIHsKKyAgICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0gV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGF1
dG8gcmVxdWVzdCA9IElQQzo6ZGVjb2RlPE5TVVJMUmVxdWVzdD4oZGVjb2RlciwgTlNVUkxSZXF1
ZXN0LmNsYXNzKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJlc291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdChyZXF1ZXN0LT5n
ZXQoKSk7CisgICAgCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXIgcmVx
dWVzdGVyOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVxdWVzdGVyKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJlc291cmNlUmVxdWVzdC5zZXRSZXF1ZXN0ZXIocmVxdWVzdGVyKTsK
KworICAgIGJvb2wgaXNBcHBCb3VuZDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzQXBwQm91
bmQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzb3VyY2VSZXF1ZXN0LnNldElzQXBw
Qm91bmQoaXNBcHBCb3VuZCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiB9IC8v
IG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJD
b3JlQXJndW1lbnRDb2RlcnNNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzTWFjLm1tCmluZGV4IDgzYzJhODczM2M4YTVhZDI3OTRmOTEzMGY2NGMy
OGE2OTAxNjViZjMuLjIwMDcyMWMyMDY1ZDI1OTY5ZWZlNDQyZmM1NDdmYWFiNGU3NTVmZGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNN
YWMubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVy
c01hYy5tbQpAQCAtNTAsNTkgKzUwLDcgQEAKIAogbmFtZXNwYWNlIElQQyB7CiAKLXN0YXRpYyBS
ZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVz
ZW50YXRpb24oQ0ZJbmRleCB2ZXJzaW9uLCBDRlR5cGVSZWYqIG9iamVjdHMsIENGSW5kZXggb2Jq
ZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3BlcnRpZXMsIENGTnVtYmVyUmVm
IGV4cGVjdGVkQ29udGVudExlbmd0aCwgQ0ZTdHJpbmdSZWYgbWltZVR5cGUsIENGVHlwZVJlZiB0
b2tlbk51bGwpCi17Ci0gICAgYXV0byBhcmNoaXZlTGlzdEFycmF5ID0gYWRvcHRDRihDRkFycmF5
Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZUFycmF5Q2FsbEJh
Y2tzKSk7Ci0KLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBvYmplY3RDb3VudDsgKytpKSB7
Ci0gICAgICAgIENGVHlwZVJlZiBvYmplY3QgPSBvYmplY3RzW2ldOwotICAgICAgICBpZiAob2Jq
ZWN0KSB7Ci0gICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJjaGl2ZUxpc3RBcnJheS5n
ZXQoKSwgb2JqZWN0KTsKLSAgICAgICAgICAgIENGUmVsZWFzZShvYmplY3QpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgLy8gQXBwZW5kIG91ciB0b2tlbiBudWxsIHJlcHJlc2VudGF0
aW9uLgotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFyY2hpdmVMaXN0QXJyYXkuZ2V0
KCksIHRva2VuTnVsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIGRpY3Rpb25hcnkg
PSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
MCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1
ZUNhbGxCYWNrcykpOwotCi0gICAgYXV0byB2ZXJzaW9uTnVtYmVyID0gYWRvcHRDRihDRk51bWJl
ckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwgJnZlcnNp
b24pKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigi
dmVyc2lvbiIpLCB2ZXJzaW9uTnVtYmVyLmdldCgpKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1
ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigiYXJjaGl2ZUxpc3QiKSwgYXJjaGl2ZUxpc3RBcnJh
eS5nZXQoKSk7Ci0KLSAgICBpZiAocHJvdG9jb2xQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGRGlj
dGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnkuZ2V0KCksIENGU1RSKCJwcm90b2NvbFByb3BlcnRp
ZXMiKSwgcHJvdG9jb2xQcm9wZXJ0aWVzKTsKLSAgICAgICAgQ0ZSZWxlYXNlKHByb3RvY29sUHJv
cGVydGllcyk7Ci0gICAgfQotCi0gICAgaWYgKGV4cGVjdGVkQ29udGVudExlbmd0aCkgewotICAg
ICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigiZXhwZWN0
ZWRDb250ZW50TGVuZ3RoIiksIGV4cGVjdGVkQ29udGVudExlbmd0aCk7Ci0gICAgICAgIENGUmVs
ZWFzZShleHBlY3RlZENvbnRlbnRMZW5ndGgpOwotICAgIH0KLQotICAgIGlmIChtaW1lVHlwZSkg
ewotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigi
bWltZVR5cGUiKSwgbWltZVR5cGUpOwotICAgICAgICBDRlJlbGVhc2UobWltZVR5cGUpOwotICAg
IH0KLQotICAgIENGQWxsb2NhdG9yRGVhbGxvY2F0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBvYmpl
Y3RzKTsKLQotICAgIHJldHVybiBkaWN0aW9uYXJ5OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZVR5cGU+IGJvb2wgZXh0cmFjdERpY3Rpb25hcnlWYWx1ZShDRkRpY3Rpb25hcnlSZWYgZGlj
dGlvbmFyeSwgQ0ZTdHJpbmdSZWYga2V5LCBWYWx1ZVR5cGUqIHJlc3VsdCkKLXsKLSAgICBhdXRv
IHVudHlwZWRWYWx1ZSA9IENGRGljdGlvbmFyeUdldFZhbHVlKGRpY3Rpb25hcnksIGtleSk7Ci0g
ICAgYXV0byB2YWx1ZSA9IGR5bmFtaWNfY2ZfY2FzdDxWYWx1ZVR5cGU+KHVudHlwZWRWYWx1ZSk7
Ci0gICAgaWYgKHVudHlwZWRWYWx1ZSAmJiAhdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAocmVzdWx0KQotICAgICAgICAqcmVzdWx0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0ZUFyY2hpdmVMaXN0KENGRGljdGlvbmFyeVJlZiBy
ZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRva2VuTnVsbCwgQ0ZJbmRleCogdmVyc2lvbiwgQ0ZU
eXBlUmVmKiogb2JqZWN0cywgQ0ZJbmRleCogb2JqZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiog
cHJvdG9jb2xQcm9wZXJ0aWVzLCBDRk51bWJlclJlZiogZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBD
RlN0cmluZ1JlZiogbWltZVR5cGUpCitzdGF0aWMgYm9vbCBjcmVhdGVBcmNoaXZlTGlzdChDRkRp
Y3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwsIENGSW5kZXgq
IHZlcnNpb24sIENGVHlwZVJlZioqIG9iamVjdHMsIENGSW5kZXgqIG9iamVjdENvdW50LCBDRkRp
Y3Rpb25hcnlSZWYqIHByb3RvY29sUHJvcGVydGllcykKIHsKICAgICBhdXRvIHZlcnNpb25OdW1i
ZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJl
cHJlc2VudGF0aW9uLCBDRlNUUigidmVyc2lvbiIpKSk7CiAgICAgaWYgKCF2ZXJzaW9uTnVtYmVy
KQpAQCAtMTIzLDEyICs3MSwxMiBAQCBzdGF0aWMgYm9vbCBjcmVhdGVBcmNoaXZlTGlzdChDRkRp
Y3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bAogICAgIGlmIChi
dWZmZXJTaXplLmhhc092ZXJmbG93ZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKCFleHRyYWN0RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigicHJvdG9j
b2xQcm9wZXJ0aWVzIiksIHByb3RvY29sUHJvcGVydGllcykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIWV4dHJhY3REaWN0aW9uYXJ5VmFsdWUocmVwcmVzZW50YXRpb24sIENGU1RS
KCJleHBlY3RlZENvbnRlbnRMZW5ndGgiKSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZXh0cmFjdERpY3Rpb25hcnlWYWx1ZShyZXByZXNl
bnRhdGlvbiwgQ0ZTVFIoIm1pbWVUeXBlIiksIG1pbWVUeXBlKSkKKyAgICBhdXRvIHVudHlwZWRW
YWx1ZSA9IENGRGljdGlvbmFyeUdldFZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigicHJvdG9j
b2xQcm9wZXJ0aWVzIikpOworICAgIGF1dG8gdmFsdWUgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZEaWN0
aW9uYXJ5UmVmPih1bnR5cGVkVmFsdWUpOworICAgIGlmICh1bnR5cGVkVmFsdWUgJiYgIXZhbHVl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHByb3RvY29sUHJvcGVydGllcykKKyAg
ICAgICAgKnByb3RvY29sUHJvcGVydGllcyA9IHZhbHVlOwogCiAgICAgKm9iamVjdENvdW50ID0g
YXJjaGl2ZUxpc3RBcnJheUNvdW50OwogICAgICpvYmplY3RzID0gc3RhdGljX2Nhc3Q8Q0ZUeXBl
UmVmKj4oZmFzdE1hbGxvYyhidWZmZXJTaXplLnVuc2FmZUdldCgpKSk7CkBAIC0xNDIsOCArOTAs
MTAgQEAgc3RhdGljIGJvb2wgY3JlYXRlQXJjaGl2ZUxpc3QoQ0ZEaWN0aW9uYXJ5UmVmIHJlcHJl
c2VudGF0aW9uLCBDRlR5cGVSZWYgdG9rZW5OdWwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2Vu
dGF0aW9uKENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QsIENGVHlwZVJlZiB0b2tlbk51bGwpCitz
dGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVz
ZW50YXRpb24oTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0LCBDRlR5cGVSZWYgdG9rZW5OdWxsKQogewor
ICAgIENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QgPSBbcmVxdWVzdCBfQ0ZVUkxSZXF1ZXN0XTsK
KwogICAgIENGSW5kZXggdmVyc2lvbjsKICAgICBDRlR5cGVSZWYqIG9iamVjdHM7CiAgICAgQ0ZJ
bmRleCBvYmplY3RDb3VudDsKQEAgLTE1NSwzMyArMTA1LDQ3IEBAIHN0YXRpYyBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihDRlVSTFJl
cXVlc3RSCiAKICAgICBfQ0ZVUkxSZXF1ZXN0Q3JlYXRlQXJjaGl2ZUxpc3Qoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgY2ZSZXF1ZXN0LCAmdmVyc2lvbiwgJm9iamVjdHMsICZvYmplY3RDb3VudCwgJnBy
b3RvY29sUHJvcGVydGllcyk7CiAKLSAgICAvLyBUaGlzIHdpbGwgZGVhbGxvY2F0ZSB0aGUgcGFz
c2VkIGluIGFyZ3VtZW50cy4KLSAgICByZXR1cm4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50
YXRpb24odmVyc2lvbiwgb2JqZWN0cywgb2JqZWN0Q291bnQsIHByb3RvY29sUHJvcGVydGllcywg
bnVsbHB0ciwgbnVsbHB0ciwgdG9rZW5OdWxsKTsKKyAgICBhdXRvIGFyY2hpdmVMaXN0QXJyYXkg
PSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZr
Q0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKKworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IG9i
amVjdENvdW50OyArK2kpIHsKKyAgICAgICAgQ0ZUeXBlUmVmIG9iamVjdCA9IG9iamVjdHNbaV07
CisgICAgICAgIGlmIChvYmplY3QpIHsKKyAgICAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShh
cmNoaXZlTGlzdEFycmF5LmdldCgpLCBvYmplY3QpOworICAgICAgICAgICAgQ0ZSZWxlYXNlKG9i
amVjdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBcHBlbmQgb3VyIHRva2Vu
IG51bGwgcmVwcmVzZW50YXRpb24uCisgICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJj
aGl2ZUxpc3RBcnJheS5nZXQoKSwgdG9rZW5OdWxsKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisKKyAgICBhdXRvIHZlcnNpb25OdW1iZXIg
PSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckNG
SW5kZXhUeXBlLCAmdmVyc2lvbikpOworICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25h
cnkuZ2V0KCksIENGU1RSKCJ2ZXJzaW9uIiksIHZlcnNpb25OdW1iZXIuZ2V0KCkpOworICAgIENG
RGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnkuZ2V0KCksIENGU1RSKCJhcmNoaXZlTGlzdCIp
LCBhcmNoaXZlTGlzdEFycmF5LmdldCgpKTsKKworICAgIGlmIChwcm90b2NvbFByb3BlcnRpZXMp
IHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIo
InByb3RvY29sUHJvcGVydGllcyIpLCBwcm90b2NvbFByb3BlcnRpZXMpOworICAgICAgICBDRlJl
bGVhc2UocHJvdG9jb2xQcm9wZXJ0aWVzKTsKKyAgICB9CisKKyAgICBDRkFsbG9jYXRvckRlYWxs
b2NhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgb2JqZWN0cyk7CisKKyAgICByZXR1cm4gZGljdGlv
bmFyeTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDRlVSTFJlcXVlc3RSZWY+IGNyZWF0ZUNGVVJM
UmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgcmVw
cmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwpCitzdGF0aWMgUmV0YWluUHRyPE5TVVJM
UmVxdWVzdD4gY3JlYXRlTlNVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9u
KENGRGljdGlvbmFyeVJlZiByZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRva2VuTnVsbCkKIHsK
ICAgICBDRkluZGV4IHZlcnNpb247CiAgICAgQ0ZUeXBlUmVmKiBvYmplY3RzOwogICAgIENGSW5k
ZXggb2JqZWN0Q291bnQ7CiAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3RvY29sUHJvcGVydGllczsK
IAotICAgIGlmICghY3JlYXRlQXJjaGl2ZUxpc3QocmVwcmVzZW50YXRpb24sIHRva2VuTnVsbCwg
JnZlcnNpb24sICZvYmplY3RzLCAmb2JqZWN0Q291bnQsICZwcm90b2NvbFByb3BlcnRpZXMsIG51
bGxwdHIsIG51bGxwdHIpKQorICAgIGlmICghY3JlYXRlQXJjaGl2ZUxpc3QocmVwcmVzZW50YXRp
b24sIHRva2VuTnVsbCwgJnZlcnNpb24sICZvYmplY3RzLCAmb2JqZWN0Q291bnQsICZwcm90b2Nv
bFByb3BlcnRpZXMpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gY2ZSZXF1
ZXN0ID0gYWRvcHRDRihfQ0ZVUkxSZXF1ZXN0Q3JlYXRlRnJvbUFyY2hpdmVMaXN0KGtDRkFsbG9j
YXRvckRlZmF1bHQsIHZlcnNpb24sIG9iamVjdHMsIG9iamVjdENvdW50LCBwcm90b2NvbFByb3Bl
cnRpZXMpKTsKICAgICBmYXN0RnJlZShvYmplY3RzKTsKLSAgICByZXR1cm4gV1RGTW92ZShjZlJl
cXVlc3QpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY3JlYXRlU2Vy
aWFsaXphYmxlUmVwcmVzZW50YXRpb24oTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0LCBDRlR5cGVSZWYg
dG9rZW5OdWxsKQotewotICAgIHJldHVybiBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlv
bihbcmVxdWVzdCBfQ0ZVUkxSZXF1ZXN0XSwgdG9rZW5OdWxsKTsKLX0KLQotc3RhdGljIFJldGFp
blB0cjxOU1VSTFJlcXVlc3Q+IGNyZWF0ZU5TVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXBy
ZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tl
bk51bGwpCi17Ci0gICAgYXV0byBjZlJlcXVlc3QgPSBjcmVhdGVDRlVSTFJlcXVlc3RGcm9tU2Vy
aWFsaXphYmxlUmVwcmVzZW50YXRpb24ocmVwcmVzZW50YXRpb24sIHRva2VuTnVsbCk7CiAgICAg
aWYgKCFjZlJlcXVlc3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIApAQCAtMjE0LDYg
KzE3OCw5IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+Ojpl
bmNvZGVQbGF0Zm9ybURhdGEoRW5jb2RlciYgZW5jb2RlCiAgICAgZW5jb2RlciA8PCByZXNvdXJj
ZVJlcXVlc3QucmVxdWVzdGVyKCk7CiAgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QuY2Fj
aGVQb2xpY3koKTsKICAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5pc0FwcEJvdW5kKCk7
CisKKyAgICAvLyBTZXJpYWxpemUgYWdhaW4gd2l0aCByZWFsIGVuY29kZXI6CisgICAgSVBDOjpl
bmNvZGUoZW5jb2RlciwgcmVxdWVzdFRvU2VyaWFsaXplLmdldCgpKTsKIH0KIAogYm9vbCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0YShE
ZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVz
dCkKQEAgLTI2Miw2ICsyMjksMTM3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEoRGVjb2RlciYgZGVjb2RlCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICByZXNvdXJjZVJlcXVlc3Quc2V0SXNBcHBCb3VuZChpc0FwcEJv
dW5kKTsKIAorICAgIGF1dG8gcmVxdWVzdCA9IElQQzo6ZGVjb2RlPE5TVVJMUmVxdWVzdD4oZGVj
b2RlciwgTlNVUkxSZXF1ZXN0LmNsYXNzKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIFRFU1RTCisgICAgTlNVUkxSZXF1ZXN0ICpjZlJlcXVlc3Qg
PSBuc1VSTFJlcXVlc3QuZ2V0KCk7CisgICAgTlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3QgPSByZXF1
ZXN0LnZhbHVlKCkuZ2V0KCk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChjZlJlcXVlc3QuY2FjaGVQ
b2xpY3kgPT0gbnNSZXF1ZXN0LmNhY2hlUG9saWN5KTsKKyAgICBSRUxFQVNFX0FTU0VSVChbY2ZS
ZXF1ZXN0LkhUVFBNZXRob2QgaXNFcXVhbFRvU3RyaW5nOiBuc1JlcXVlc3QuSFRUUE1ldGhvZF0p
OworICAgIGlmICghW2NmUmVxdWVzdC5VUkwgaXNFcXVhbDogbnNSZXF1ZXN0LlVSTF0pIHsKKyAg
ICAgICAgV1RGTG9nQWx3YXlzKCJTRVJJQUxJWkFUSU9OIEVSUk9SOiBDRlVSTFJlcXVlc3QgYW5k
IE5TVVJMUmVxZXVzdCBzZXJpYWxpemF0aW9uIG1pc21hdGNoIGZvciBVUkw6Iik7CisgICAgICAg
IE5TTG9nKEAiU0VSSUFMSVpBVElPTiBFUlJPUjogU2VyaWFsaXphdGlvbiBtaXNtYXRjaDogJUAg
aW5zdGVhZCBvZiAlQCIsIGNmUmVxdWVzdC5VUkwsIG5zUmVxdWVzdC5VUkwpOworICAgICAgICBD
RlNob3coY2ZSZXF1ZXN0LlVSTCk7CisgICAgICAgIENGU2hvdyhuc1JlcXVlc3QuVVJMKTsKKyAg
ICB9CisKKyAgICBpZCBjZk1haW5Eb2N1bWVudFVSTCA9IGNmUmVxdWVzdC5tYWluRG9jdW1lbnRV
Ukw7CisgICAgaWQgbnNNYWluRG9jdW1lbnRVUkwgPSBuc1JlcXVlc3QubWFpbkRvY3VtZW50VVJM
OworICAgIGlmIChjZk1haW5Eb2N1bWVudFVSTCB8fCBuc01haW5Eb2N1bWVudFVSTCkgeworICAg
ICAgICBpZiAoIVtjZk1haW5Eb2N1bWVudFVSTCBpc0VxdWFsOiBuc01haW5Eb2N1bWVudFVSTF0p
IHsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiU0VSSUFMSVpBVElPTiBFUlJPUjogQ0ZVUkxS
ZXF1ZXN0IGFuZCBOU1VSTFJlcWV1c3Qgc2VyaWFsaXphdGlvbiBtaXNtYXRjaCBmb3IgbWFpbkRv
Y3VtZW50VVJMOiIpOworICAgICAgICAgICAgTlNMb2coQCJTRVJJQUxJWkFUSU9OIEVSUk9SOiBT
ZXJpYWxpemF0aW9uIG1pc21hdGNoIGZvciBtYWluRG9jdW1lbnRVUkw6ICVAIGluc3RlYWQgb2Yg
JUAiLCBjZk1haW5Eb2N1bWVudFVSTCwgbnNNYWluRG9jdW1lbnRVUkwpOworICAgICAgICAgICAg
Q0ZTaG93KGNmTWFpbkRvY3VtZW50VVJMKTsKKyAgICAgICAgICAgIENGU2hvdyhuc01haW5Eb2N1
bWVudFVSTCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2ZSZXF1ZXN0LmFsbEhUVFBI
ZWFkZXJGaWVsZHMpIHsKKyAgICAgICAgZm9yIChpZCBrZXkgaW4gY2ZSZXF1ZXN0LmFsbEhUVFBI
ZWFkZXJGaWVsZHMpIHsKKyAgICAgICAgICAgIGlkIGNmSGVhZGVyVmFsdWUgPSBbY2ZSZXF1ZXN0
LmFsbEhUVFBIZWFkZXJGaWVsZHMgdmFsdWVGb3JLZXk6a2V5XTsKKyAgICAgICAgICAgIGlkIG5z
SGVhZGVyVmFsdWUgPSBbbnNSZXF1ZXN0LmFsbEhUVFBIZWFkZXJGaWVsZHMgdmFsdWVGb3JLZXk6
a2V5XTsKKyAgICAgICAgICAgIGlmICghW25zSGVhZGVyVmFsdWUgaXNFcXVhbDpjZkhlYWRlclZh
bHVlXSkgeworICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiU0VSSUFMSVpBVElPTiBFUlJP
UjogQ0ZVUkxSZXF1ZXN0IGFuZCBOU1VSTFJlcWV1c3Qgc2VyaWFsaXphdGlvbiBtaXNtYXRjaCBm
b3IgSFRUUCBIZWFkZXI6Iik7CisgICAgICAgICAgICAgICAgTlNMb2coQCJTRVJJQUxJWkFUSU9O
IEVSUk9SOiBTZXJpYWxpemF0aW9uIG1pc21hdGNoIGZvciBoZWFkZXIgJUA6ICVAIGluc3RlYWQg
b2YgJUAiLCBrZXksIGNmSGVhZGVyVmFsdWUsIG5zSGVhZGVyVmFsdWUpOworICAgICAgICAgICAg
ICAgIENGU2hvdyhrZXkpOworICAgICAgICAgICAgICAgIENGU2hvdyhjZkhlYWRlclZhbHVlKTsK
KyAgICAgICAgICAgICAgICBDRlNob3cobnNIZWFkZXJWYWx1ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoY2ZSZXF1ZXN0LnRpbWVvdXRJbnRl
cnZhbCA9PSBuc1JlcXVlc3QudGltZW91dEludGVydmFsKTsKKyAgICBSRUxFQVNFX0FTU0VSVChj
ZlJlcXVlc3QuSFRUUFNob3VsZEhhbmRsZUNvb2tpZXMgPT0gbnNSZXF1ZXN0LkhUVFBTaG91bGRI
YW5kbGVDb29raWVzKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjZlJlcXVlc3QuSFRUUFNob3VsZFVz
ZVBpcGVsaW5pbmcgPT0gbnNSZXF1ZXN0LkhUVFBTaG91bGRVc2VQaXBlbGluaW5nKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChjZlJlcXVlc3QuYWxsb3dzQ2VsbHVsYXJBY2Nlc3MgPT0gbnNSZXF1ZXN0
LmFsbG93c0NlbGx1bGFyQWNjZXNzKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjZlJlcXVlc3QuYWxs
b3dzQ29uc3RyYWluZWROZXR3b3JrQWNjZXNzID09IG5zUmVxdWVzdC5hbGxvd3NDb25zdHJhaW5l
ZE5ldHdvcmtBY2Nlc3MpOworICAgIFJFTEVBU0VfQVNTRVJUKGNmUmVxdWVzdC5hbGxvd3NFeHBl
bnNpdmVOZXR3b3JrQWNjZXNzID09IG5zUmVxdWVzdC5hbGxvd3NFeHBlbnNpdmVOZXR3b3JrQWNj
ZXNzKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjZlJlcXVlc3QubmV0d29ya1NlcnZpY2VUeXBlID09
IG5zUmVxdWVzdC5uZXR3b3JrU2VydmljZVR5cGUpOworICAgIFJFTEVBU0VfQVNTRVJUKGNmUmVx
dWVzdC5fc2NoZW1lV2FzVXBncmFkZWREdWVUb0R5bmFtaWNIU1RTID09IG5zUmVxdWVzdC5fc2No
ZW1lV2FzVXBncmFkZWREdWVUb0R5bmFtaWNIU1RTKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjZlJl
cXVlc3QuX3ByZXZlbnRIU1RTU3RvcmFnZSA9PSBuc1JlcXVlc3QuX3ByZXZlbnRIU1RTU3RvcmFn
ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoY2ZSZXF1ZXN0Ll9pZ25vcmVIU1RTID09IG5zUmVxdWVz
dC5faWdub3JlSFNUUyk7CisgICAgUkVMRUFTRV9BU1NFUlQoW2NmUmVxdWVzdCBfcHJvcGVydHlG
b3JLZXk6QCJzdGFydFRpbWVvdXRUaW1lIl0gPT0gW25zUmVxdWVzdCBfcHJvcGVydHlGb3JLZXk6
QCJzdGFydFRpbWVvdXRUaW1lIl0pOworICAgIFJFTEVBU0VfQVNTRVJUKFtjZlJlcXVlc3QgX3By
b3BlcnR5Rm9yS2V5OkAicmVxdWlyZXNTaG9ydENvbm5lY3Rpb25UaW1lb3V0Il0gPT0gW25zUmVx
dWVzdCBfcHJvcGVydHlGb3JLZXk6QCJyZXF1aXJlc1Nob3J0Q29ubmVjdGlvblRpbWVvdXQiXSk7
CisgICAgTlNUaW1lSW50ZXJ2YWwgY2ZQYXlsb2FkVGltZW91dCA9IFsoTlNOdW1iZXIgKilbY2ZS
ZXF1ZXN0IF9wcm9wZXJ0eUZvcktleTpAInBheWxvYWRUcmFuc21pc3Npb25UaW1lb3V0Il0gZG91
YmxlVmFsdWVdOworICAgIE5TVGltZUludGVydmFsIG5zUGF5bG9hZFRpbWVvdXQgPSBbKE5TTnVt
YmVyICopW25zUmVxdWVzdCBfcHJvcGVydHlGb3JLZXk6QCJwYXlsb2FkVHJhbnNtaXNzaW9uVGlt
ZW91dCJdIGRvdWJsZVZhbHVlXTsKKyAgICBSRUxFQVNFX0FTU0VSVChjZlBheWxvYWRUaW1lb3V0
ID09IG5zUGF5bG9hZFRpbWVvdXQpOworCisgICAgLy8gQ29tcGFyZSB0aGUgcHJvcGVydGllcwor
ICAgIGF1dG8gY2ZEaWN0aW9uYXJ5ID0gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24o
Y2ZSZXF1ZXN0LCBJUEM6OnRva2VuTnVsbHB0clR5cGVSZWYoKSk7CisgICAgYXV0byBuc0RpY3Rp
b25hcnkgPSBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihuc1JlcXVlc3QsIElQQzo6
dG9rZW5OdWxscHRyVHlwZVJlZigpKTsKKworICAgIC8vIFRoZXNlIG91Z2h0IHRvIGJlIGlkZW50
aWNhbC4KKyAgICBhdXRvIGNmVmVyc2lvbk51bWJlciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJl
clJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoY2ZEaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigidmVy
c2lvbiIpKSk7CisgICAgYXV0byBuc1ZlcnNpb25OdW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZO
dW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG5zRGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIo
InZlcnNpb24iKSkpOworCisgICAgQ0ZJbmRleCBjZlZlcnNpb24sIG5zVmVyc2lvbjsKKyAgICBD
Rk51bWJlckdldFZhbHVlKGNmVmVyc2lvbk51bWJlciwga0NGTnVtYmVyQ0ZJbmRleFR5cGUsICZj
ZlZlcnNpb24pOworICAgIENGTnVtYmVyR2V0VmFsdWUobnNWZXJzaW9uTnVtYmVyLCBrQ0ZOdW1i
ZXJDRkluZGV4VHlwZSwgJm5zVmVyc2lvbik7CisgICAgUkVMRUFTRV9BU1NFUlQoY2ZWZXJzaW9u
ID09IG5zVmVyc2lvbik7CisgICAgCisgICAgYXV0byBjZkFyY2hpdmVMaXN0QXJyYXkgPSBkeW5h
bWljX2NmX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoY2ZEaWN0aW9uYXJ5
LmdldCgpLCBDRlNUUigiYXJjaGl2ZUxpc3QiKSkpOworICAgIGF1dG8gbnNBcmNoaXZlTGlzdEFy
cmF5ID0gZHluYW1pY19jZl9jYXN0PENGQXJyYXlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG5z
RGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIoImFyY2hpdmVMaXN0IikpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCgoY2ZBcmNoaXZlTGlzdEFycmF5ICYmIG5zQXJjaGl2ZUxpc3RBcnJheSkgfHwgKCFjZkFy
Y2hpdmVMaXN0QXJyYXkgJiYgIW5zQXJjaGl2ZUxpc3RBcnJheSkpOworCisgICAgYXV0byBjZkFy
Y2hpdmVMaXN0QXJyYXlDb3VudCA9IENGQXJyYXlHZXRDb3VudChjZkFyY2hpdmVMaXN0QXJyYXkp
OworICAgIGF1dG8gbnNBcmNoaXZlTGlzdEFycmF5Q291bnQgPSBDRkFycmF5R2V0Q291bnQobnNB
cmNoaXZlTGlzdEFycmF5KTsKKyAgICBSRUxFQVNFX0FTU0VSVChjZkFyY2hpdmVMaXN0QXJyYXlD
b3VudCA9PSBuc0FyY2hpdmVMaXN0QXJyYXlDb3VudCk7CisKKyAgICBpZiAoY2ZBcmNoaXZlTGlz
dEFycmF5Q291bnQgJiYgbnNBcmNoaXZlTGlzdEFycmF5Q291bnQpIHsKKyAgICAgICAgZm9yIChD
RkluZGV4IGkgPSAwOyBpIDwgY2ZBcmNoaXZlTGlzdEFycmF5Q291bnQ7ICsraSkgeworICAgICAg
ICAgICAgYXV0byBjZk9iaiA9IENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY2ZBcmNoaXZlTGlzdEFy
cmF5LCBpKTsKKyAgICAgICAgICAgIGF1dG8gbnNPYmogPSBDRkFycmF5R2V0VmFsdWVBdEluZGV4
KG5zQXJjaGl2ZUxpc3RBcnJheSwgaSk7CisgICAgICAgICAgICBpZiAoY2ZPYmogPT0gSVBDOjp0
b2tlbk51bGxwdHJUeXBlUmVmKCkpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChu
c09iaiA9PSBJUEM6OnRva2VuTnVsbHB0clR5cGVSZWYoKSk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChDRkdldFR5
cGVJRChjZk9iaikgPT0gQ0ZHZXRUeXBlSUQobnNPYmopKTsKKyAgICAgICAgICAgIGlmICghV1RG
OjpzYWZlQ0ZFcXVhbChjZk9iaiwgbnNPYmopKSB7CisgICAgICAgICAgICAgICAgYm9vbCBsb2cg
PSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChpID09IDYpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdWludDY0X3QgY2ZCaXRtYXAsIG5zQml0bWFwOworICAgICAgICAgICAgICAgICAgICBDRk51
bWJlckdldFZhbHVlKGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oY2ZPYmopLCBrQ0ZOdW1i
ZXJTSW50NjRUeXBlLCAmY2ZCaXRtYXApOworICAgICAgICAgICAgICAgICAgICBDRk51bWJlckdl
dFZhbHVlKGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4obnNPYmopLCBrQ0ZOdW1iZXJTSW50
NjRUeXBlLCAmbnNCaXRtYXApOworICAgICAgICAgICAgICAgICAgICBpZiAobnNCaXRtYXAgLSBj
ZkJpdG1hcCA9PSAzMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobG9nKSB7CisgICAgICAgICAgICAg
ICAgICAgIFdURkxvZ0Fsd2F5cygiU0VSSUFMSVpBVElPTiBFUlJPUjogQXJjaGl2ZSBMaXN0IG1p
c21hdGNoIGF0IHBvc2l0aW9uICVkIiwgaSk7CisgICAgICAgICAgICAgICAgICAgIENGU2hvdyhj
Zk9iaik7CisgICAgICAgICAgICAgICAgICAgIENGU2hvdyhuc09iaik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGF1dG8gY2ZQ
cm90b2NvbFByb3BlcnRpZXMgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShjZkRpY3Rpb25hcnkuZ2V0KCksIENGU1RSKCJwcm90b2NvbFByb3Bl
cnRpZXMiKSkpOworICAgIGF1dG8gbnNQcm90b2NvbFByb3BlcnRpZXMgPSBkeW5hbWljX2NmX2Nh
c3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShuc0RpY3Rpb25hcnkuZ2V0
KCksIENGU1RSKCJwcm90b2NvbFByb3BlcnRpZXMiKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKChj
ZlByb3RvY29sUHJvcGVydGllcyAmJiBuc1Byb3RvY29sUHJvcGVydGllcykgfHwgKCFjZlByb3Rv
Y29sUHJvcGVydGllcyAmJiAhbnNQcm90b2NvbFByb3BlcnRpZXMpKTsKKyAgICBpZiAoY2ZQcm90
b2NvbFByb3BlcnRpZXMgJiYgbnNQcm90b2NvbFByb3BlcnRpZXMpIHsKKyAgICAgICAgQ0ZJbmRl
eCBjZlNpemUgPSBDRkRpY3Rpb25hcnlHZXRDb3VudChjZlByb3RvY29sUHJvcGVydGllcyk7Cisg
ICAgICAgIENGSW5kZXggbnNTaXplID0gQ0ZEaWN0aW9uYXJ5R2V0Q291bnQobnNQcm90b2NvbFBy
b3BlcnRpZXMpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjZlNpemUgPT0gbnNTaXplKTsKKwor
ICAgICAgICBWZWN0b3I8Q0ZUeXBlUmVmLCAzMj4gY2ZLZXlzKGNmU2l6ZSk7CisgICAgICAgIFZl
Y3RvcjxDRlR5cGVSZWYsIDMyPiBjZlZhbHVlcyhjZlNpemUpOworICAgICAgICBDRkRpY3Rpb25h
cnlHZXRLZXlzQW5kVmFsdWVzKGNmUHJvdG9jb2xQcm9wZXJ0aWVzLCBjZktleXMuZGF0YSgpLCBj
ZlZhbHVlcy5kYXRhKCkpOworCisgICAgICAgIGZvciAoYXV0byBpID0gMDsgaSA8IGNmU2l6ZTsg
KytpKSB7CisgICAgICAgICAgICBhdXRvIGtleSA9IGNmS2V5c1tpXTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KG5zUHJvdG9jb2xQcm9wZXJ0aWVz
LCBrZXkpKTsKKyAgICAgICAgICAgIGF1dG8gbnNWYWx1ZSA9IENGRGljdGlvbmFyeUdldFZhbHVl
KG5zUHJvdG9jb2xQcm9wZXJ0aWVzLCBrZXkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Q0ZHZXRUeXBlSUQobnNWYWx1ZSkgPT0gQ0ZHZXRUeXBlSUQoY2ZWYWx1ZXNbaV0pKTsKKyAgICAg
ICAgICAgIGlmICghV1RGOjpzYWZlQ0ZFcXVhbChuc1ZhbHVlLCBjZlZhbHVlc1tpXSkpIHsKKyAg
ICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIlNFUklBTElaQVRJT04gRVJST1I6IFByb3RvY29s
IFByb3BlcnRpZXMgZGljdGlvbmFyeSBtaXNtYXRjaCBhdCBwb3NpdGlvbiAlZCIsIGkpOworICAg
ICAgICAgICAgICAgIENGU2hvdyhrZXkpOworICAgICAgICAgICAgICAgIENGU2hvdyhjZlZhbHVl
c1tpXSk7CisgICAgICAgICAgICAgICAgQ0ZTaG93KG5zVmFsdWUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwZGJhZWYyODk2Mjg0OGEzM2Q3
ZjY0MTk1ZDEzNGFlYjE1MzYzYTdhLi4wNWVlYjU1ZDIyOWM2YTAwZWQyM2ZlNGUyZWRkYWNkMGZl
M2M1MWFiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjAgQEAKKzIwMjEtMDItMTkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBh
cHBsZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVxdWVzdCAocmF0aGVyIHRoYW4g
Q0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MDA5NjM+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIEFsZXggQ2hyaXN0ZW5zZW4uCisK
KyAgICAgICAgQWRkIGEgbmV3IHRlc3QgdG8gZW5zdXJlIHdlIGNhbiBzdWNjZXNzZnVsbHkgbG9h
ZCBVUkxzIHdpdGggYWNjZW50ZWQgY2hhcmFjdGVycywKKyAgICAgICAgYW5kIHRvIHRlc3QgdGhl
IHVwZGF0ZWQgSVBDIHNlcmlhbGl6YXRpb24gZm9yIE5TVVJMUmVxdWVzdC4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0EvMzAzLzI0Ny8zMDMvMjQzby5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvYWRJbnZhbGlk
VVJMUmVxdWVzdC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOiBDb3JyZWN0IFVS
TCByZXN1bHQgbm93IHRoYXQgdGhlIHZhbHVlIGlzIHByb3Blcmx5IHNlcmlhbGl6ZWQuCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5t
bToKKyAgICAgICAgKFRFU1QpOgorCiAyMDIxLTAyLTE5ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTlNFcnJvciByZXR1cm5lZCBieSBXZWJL
aXQgQVBJIHNob3VsZCBhY3R1YWxseSBjb25mb3JtIHRvIE5TU2VjdXJlQ29kaW5nCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3hjc2hhcmVk
ZGF0YS94Y3NjaGVtZXMvVGVzdFdlYktpdEFQSS54Y3NjaGVtZSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9UZXN0V2Vi
S2l0QVBJLnhjc2NoZW1lCmluZGV4IDVmNWVjMmU0YWVjMzllZGMzOWZjN2Y4NWM3ZDk2N2U1YzQ5
NDY5NGUuLjRhM2Y2MmM3N2QzM2VkNGViZTNiMjU3NmI1NzVlZTM3ZWFjMzc1MTIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2oveGNzaGFyZWRk
YXRhL3hjc2NoZW1lcy9UZXN0V2ViS2l0QVBJLnhjc2NoZW1lCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9UZXN0
V2ViS2l0QVBJLnhjc2NoZW1lCkBAIC01MCw2ICs1MCwxMiBAQAogICAgICAgICAgICAgUmVmZXJl
bmNlZENvbnRhaW5lciA9ICJjb250YWluZXI6VGVzdFdlYktpdEFQSS54Y29kZXByb2oiPgogICAg
ICAgICAgPC9CdWlsZGFibGVSZWZlcmVuY2U+CiAgICAgICA8L0J1aWxkYWJsZVByb2R1Y3RSdW5u
YWJsZT4KKyAgICAgIDxDb21tYW5kTGluZUFyZ3VtZW50cz4KKyAgICAgICAgIDxDb21tYW5kTGlu
ZUFyZ3VtZW50CisgICAgICAgICAgICBhcmd1bWVudCA9ICItLWd0ZXN0X2ZpbHRlcj1XS1dlYlZp
ZXcuTG9hZCoiCisgICAgICAgICAgICBpc0VuYWJsZWQgPSAiWUVTIj4KKyAgICAgICAgIDwvQ29t
bWFuZExpbmVBcmd1bWVudD4KKyAgICAgIDwvQ29tbWFuZExpbmVBcmd1bWVudHM+CiAgICA8L0xh
dW5jaEFjdGlvbj4KICAgIDxQcm9maWxlQWN0aW9uCiAgICAgICBidWlsZENvbmZpZ3VyYXRpb24g
PSAiUmVsZWFzZSIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvTG9hZEludmFsaWRVUkxSZXF1ZXN0Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9Mb2FkSW52YWxpZFVSTFJlcXVlc3QubW0KaW5kZXggN2Q2NTRlZDNhZjJk
ZGFlYWM4MjU2MDI0YTc5YTczNjExODRhM2FkYi4uOTZmZThhZDQ0ZGQxZmRjMjM1MjZlNjk0MWE2
YzEwMTg4NzgzNWEyYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9Mb2FkSW52YWxpZFVSTFJlcXVlc3QubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2FkSW52YWxpZFVSTFJlcXVlc3QubW0KQEAgLTkzLDcgKzkz
LDcgQEAgVEVTVChXZWJLaXQsIExvYWRJbnZhbGlkVVJMUmVxdWVzdE5vbkFTQ0lJKQogICAgIGRl
bGVnYXRlLmdldCgpLmRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb24gPSBeKFdLV2ViVmlldyAq
LCBXS05hdmlnYXRpb24gKiwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX1dLX1NU
UkVRKGVycm9yLmRvbWFpbiwgQCJXZWJLaXRFcnJvckRvbWFpbiIpOwogICAgICAgICBFWFBFQ1Rf
RVEoZXJyb3IuY29kZSwgV2ViS2l0RXJyb3JDYW5ub3RTaG93VVJMKTsKLSAgICAgICAgRVhQRUNU
X1dLX1NUUkVRKFtlcnJvci51c2VySW5mb1tAIk5TRXJyb3JGYWlsaW5nVVJMS2V5Il0gYWJzb2x1
dGVTdHJpbmddLCAiaHR0cDovLyVDMyVBMiVDMiU4MCVDMiU4MCIpOworICAgICAgICBFWFBFQ1Rf
V0tfU1RSRVEoW2Vycm9yLnVzZXJJbmZvW0AiTlNFcnJvckZhaWxpbmdVUkxLZXkiXSBhYnNvbHV0
ZVN0cmluZ10sICJodHRwOi8vJUUyJTgwJTgwIik7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAg
IH07CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbV0tXZWJWaWV3IG5ld10pOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2Fk
QVBJcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3
TG9hZEFQSXMubW0KaW5kZXggYmVkNTAwZWEzMzk0NWE4MWU2OGQ4ODgzN2ZhOTBhZjdjZTU3MjA4
YS4uNWY5YTlmYTE2ZWMzNzc4MDY0NWY2YjNmMTFmMGI0Y2YxYTE5MDE2ZCAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0xv
YWRBUElzLm1tCkBAIC0xMzIsMyArMTMyLDQxIEBAIFRFU1QoV0tXZWJWaWV3LCBMb2FkU2ltdWxh
dGVkUmVxdWVzdFVwZGF0ZXNCYWNrRm9yd2FyZExpc3QpCiAgICAgRVhQRUNUX1RSVUUoIWxpc3Qu
Zm9yd2FyZEl0ZW0pOwogICAgIEVYUEVDVF9XS19TVFJFUShleGFtcGxlVVJMU3RyaW5nLCBbbGlz
dC5iYWNrSXRlbS5VUkwgYWJzb2x1dGVTdHJpbmddKTsKIH0KKworVEVTVChXS1dlYlZpZXcsIExv
YWRBY2NlbnRlZEZpbGVSZXF1ZXN0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCld
KTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdE5hdmlnYXRpb25EZWxlZ2F0
ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07CisKKyAgICBjb25zdCBVSW50OCBieXRlc1s2XSA9IHsgJ0EnLCAweEMzLCAw
eEE3LCAweEMzLCAweEEzLCAnbycgfTsKKyAgICBhdXRvIGZpbGVOYW1lID0gYWRvcHROUyhbW05T
U3RyaW5nIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmJ5dGVzIGxlbmd0aDo2IGVuY29kaW5nOk5TVVRG
OFN0cmluZ0VuY29kaW5nXSk7CisKKyAgICAvLyBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gYWRkIHVu
aWNvZGUgZmlsZW5hbWVzIHRvIGdpdC4KKyAgICBOU1VSTCAqb3JpZ2luYWxGaWxlID0gW1tOU0J1
bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpA
Imh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgRVhQ
RUNUX05PVF9OVUxMKG9yaWdpbmFsRmlsZSk7CisKKyAgICBOU1N0cmluZyAqdGVzdERpcmVjdG9y
eVN0cmluZyA9IFtOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENv
bXBvbmVudDpbW05TVVVJRCBVVUlEXSBVVUlEU3RyaW5nXV07CisgICAgTlNVUkwgKnRlc3REaXJl
Y3RvcnkgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOiB0ZXN0RGlyZWN0b3J5U3RyaW5nXTsKKwor
ICAgIE5TU3RyaW5nICp0ZXN0RmlsZVN0cmluZyA9IFtbdGVzdERpcmVjdG9yeVN0cmluZyBzdHJp
bmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6ZmlsZU5hbWUuZ2V0KCldIHN0cmluZ0J5QXBwZW5k
aW5nUGF0aEV4dGVuc2lvbjpAImh0bWwiXTsKKyAgICBOU1VSTCAqdGVzdEZpbGUgPSBbTlNVUkwg
ZmlsZVVSTFdpdGhQYXRoOnRlc3RGaWxlU3RyaW5nXTsKKworICAgIFtbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJMOnRlc3RGaWxlIGVycm9yOm5pbF07CisgICAg
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGVzdERpcmVj
dG9yeSBlcnJvcjpuaWxdOworCisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBj
cmVhdGVEaXJlY3RvcnlBdFVSTDp0ZXN0RGlyZWN0b3J5IHdpdGhJbnRlcm1lZGlhdGVEaXJlY3Rv
cmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmlsXTsKKworICAgIE5TRXJyb3IgKmVycm9y
ID0gbmlsOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY29weUl0ZW1BdFVS
TDpvcmlnaW5hbEZpbGUgdG9VUkw6dGVzdEZpbGUgZXJyb3I6JmVycm9yXTsKKyAgICBFWFBFQ1Rf
TlVMTChlcnJvcik7CisgICAgCisgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVx
dWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0RmlsZV07CisgICAgW3dlYlZpZXcgbG9hZEZpbGVSZXF1
ZXN0OnJlcXVlc3QgYWxsb3dpbmdSZWFkQWNjZXNzVG9VUkw6dGVzdEZpbGUuVVJMQnlEZWxldGlu
Z0xhc3RQYXRoQ29tcG9uZW50XTsKKyAgICBbZGVsZWdhdGUgd2FpdEZvckRpZEZpbmlzaE5hdmln
YXRpb25dOworICAgIEVYUEVDVF9XS19TVFJFUSh3ZWJWaWV3LmdldCgpLl9yZXNvdXJjZURpcmVj
dG9yeVVSTC5wYXRoLCB0ZXN0RmlsZS5VUkxCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnQucGF0
aCk7CisKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVS
TDp0ZXN0RmlsZSBlcnJvcjpuaWxdOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdl
cl0gcmVtb3ZlSXRlbUF0VVJMOnRlc3REaXJlY3RvcnkgZXJyb3I6bmlsXTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421122</attachid>
            <date>2021-02-20 17:49:39 -0800</date>
            <delta_ts>2021-02-23 12:06:00 -0800</delta_ts>
            <desc>Now switch serializer and log</desc>
            <filename>bug-222145-20210220174938.patch</filename>
            <type>text/plain</type>
            <size>27681</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGVlNTVjYWU4ZjhkMDc5MWI5
MmJkNTM2NjMwNTNiZTNhMzBhMmMyOTguLjE1Yzk0ODQzMTI5YzkwZGMzNTEwZWY1Mjg3MjE4NDE3
YmIyNjVhMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDItMTggIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVx
dWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIEFs
ZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5nIGxheW91dCBhbmQg
V2ViS2l0QVBJIHRlc3RzLgorCisgICAgICAgIFJldmlzZSBJUEMgc2VyaWFsaXphdGlvbiBzbyB0
aGF0IE5TVVJMQ29ubmVjdGlvbiAobW9kZXJuKSBDb2NvYSBidWlsZHMgc2VyaWFsaXplIHRoZQor
ICAgICAgICBOU1VSTFJlcXVlc3Qgb2JqZWN0LCByYXRoZXIgdGhhbiBicmlkZ2luZyB0byBDRlVS
TFJlcXVlc3QgYW5kIHNlcmlhbGl6aW5nIHRoYXQuIFRoaXMKKyAgICAgICAgZW5zdXJlcyB0aGF0
IHRoZSBmdWxsIHNldCBvZiBOU1VSTFJlcXVlc3QgZmVhdHVyZXMgYXJlIGFjY3VyYXRlbHkgcmVj
b25zdGl0dXRlZCBvbiB0aGUKKyAgICAgICAgcmVjZWl2aW5nIHNpZGUgb2YgdGhlIGNvbm5lY3Rp
b24uCisKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2Eu
bW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogQWRkZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29k
ZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKTogQWRkZWQu
CisgICAgICAgICogU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW06CisgICAg
ICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2Rl
UGxhdGZvcm1EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOiBEZWxldGVkLgorCiAy
MDIxLTAyLTE5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgTlNFcnJvciByZXR1cm5lZCBieSBXZWJLaXQgQVBJIHNob3VsZCBhY3R1YWxseSBj
b25mb3JtIHRvIE5TU2VjdXJlQ29kaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCmluZGV4IDc2YWZiNzJmZjJm
ZDRmOTdiNWNmMDEzMmVlYTliMzM3ZmE0NGFiNDMuLjRjOTkzMGQ3ZDU1MGU1MjI1ODMyMjRmZjVm
YjAyYWNiOGQ4OWFmZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dl
YkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
Y29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogI2lt
cG9ydCA8V2ViQ29yZS9Gb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRBdHRyaWJ1dGVzLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NmL0NvcmVUZXh0U1BJ
Lmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNTQzLDQgKzU0NCw2MCBAQCBPcHRp
b25hbDxGb250UGxhdGZvcm1EYXRhPiBBcmd1bWVudENvZGVyPFJlZjxGb250Pj46OmRlY29kZVBs
YXRmb3JtRGF0YShEZWNvZGVyJgogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKGN0Rm9udC5n
ZXQoKSwgc2l6ZS52YWx1ZSgpLCBzeW50aGV0aWNCb2xkLnZhbHVlKCksIHN5bnRoZXRpY09ibGlx
dWUudmFsdWUoKSwgb3JpZW50YXRpb24udmFsdWUoKSwgd2lkdGhWYXJpYW50LnZhbHVlKCksIHRl
eHRSZW5kZXJpbmdNb2RlLnZhbHVlKCkpOwogfQogCisjaWYgMAordm9pZCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkK
K3sKKyAgICBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiByZXF1ZXN0VG9TZXJpYWxpemUgPSByZXNv
dXJjZVJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpE
b05vdFVwZGF0ZUhUVFBCb2R5KTsKKworICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudCA9IHJlcXVl
c3RUb1NlcmlhbGl6ZTsKKyAgICBlbmNvZGVyIDw8IHJlcXVlc3RJc1ByZXNlbnQ7CisKKyAgICBp
ZiAoIXJlcXVlc3RJc1ByZXNlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGRvbid0
IHNlbmQgSFRUUCBib2R5IG92ZXIgSVBDIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgICAgLy8g
QWxzbywgaXQncyBub3QgYWx3YXlzIHBvc3NpYmxlIHRvIGRvLCBhcyBzdHJlYW1zIGNhbiBvbmx5
IGJlIGNyZWF0ZWQgaW4gcHJvY2VzcyB0aGF0IGRvZXMgbmV0d29ya2luZy4KKyAgICBpZiAoW3Jl
cXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9keV0gfHwgW3JlcXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9k
eVN0cmVhbV0pIHsKKyAgICAgICAgcmVxdWVzdFRvU2VyaWFsaXplID0gYWRvcHROUyhbcmVxdWVz
dFRvU2VyaWFsaXplIG11dGFibGVDb3B5XSk7CisgICAgICAgIFsoTlNNdXRhYmxlVVJMUmVxdWVz
dCAqKXJlcXVlc3RUb1NlcmlhbGl6ZSBzZXRIVFRQQm9keTpuaWxdOworICAgICAgICBbKE5TTXV0
YWJsZVVSTFJlcXVlc3QgKilyZXF1ZXN0VG9TZXJpYWxpemUgc2V0SFRUUEJvZHlTdHJlYW06bmls
XTsKKyAgICB9CisKKyAgICBJUEM6OmVuY29kZShlbmNvZGVyLCByZXF1ZXN0VG9TZXJpYWxpemUu
Z2V0KCkpOworCisgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QucmVxdWVzdGVyKCk7Cisg
ICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QuaXNBcHBCb3VuZCgpOworfQorCitib29sIEFy
Z3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRh
KERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1
ZXN0KQoreworICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudDsKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlcXVlc3RJc1ByZXNlbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IXJlcXVlc3RJc1ByZXNlbnQpIHsKKyAgICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0gV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGF1
dG8gcmVxdWVzdCA9IElQQzo6ZGVjb2RlPE5TVVJMUmVxdWVzdD4oZGVjb2RlciwgTlNVUkxSZXF1
ZXN0LmNsYXNzKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJlc291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdChyZXF1ZXN0LT5n
ZXQoKSk7CisgICAgCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXIgcmVx
dWVzdGVyOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVxdWVzdGVyKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJlc291cmNlUmVxdWVzdC5zZXRSZXF1ZXN0ZXIocmVxdWVzdGVyKTsK
KworICAgIGJvb2wgaXNBcHBCb3VuZDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzQXBwQm91
bmQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzb3VyY2VSZXF1ZXN0LnNldElzQXBw
Qm91bmQoaXNBcHBCb3VuZCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiB9IC8v
IG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJD
b3JlQXJndW1lbnRDb2RlcnNNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzTWFjLm1tCmluZGV4IDgzYzJhODczM2M4YTVhZDI3OTRmOTEzMGY2NGMy
OGE2OTAxNjViZjMuLjVkMjBkMTcxMjUwNWNkMjAyYjcwZGU4ZWYzYmQ2MDhkYWZlNjFmMDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNN
YWMubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVy
c01hYy5tbQpAQCAtNTAsNTkgKzUwLDcgQEAKIAogbmFtZXNwYWNlIElQQyB7CiAKLXN0YXRpYyBS
ZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVz
ZW50YXRpb24oQ0ZJbmRleCB2ZXJzaW9uLCBDRlR5cGVSZWYqIG9iamVjdHMsIENGSW5kZXggb2Jq
ZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3BlcnRpZXMsIENGTnVtYmVyUmVm
IGV4cGVjdGVkQ29udGVudExlbmd0aCwgQ0ZTdHJpbmdSZWYgbWltZVR5cGUsIENGVHlwZVJlZiB0
b2tlbk51bGwpCi17Ci0gICAgYXV0byBhcmNoaXZlTGlzdEFycmF5ID0gYWRvcHRDRihDRkFycmF5
Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZUFycmF5Q2FsbEJh
Y2tzKSk7Ci0KLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBvYmplY3RDb3VudDsgKytpKSB7
Ci0gICAgICAgIENGVHlwZVJlZiBvYmplY3QgPSBvYmplY3RzW2ldOwotICAgICAgICBpZiAob2Jq
ZWN0KSB7Ci0gICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJjaGl2ZUxpc3RBcnJheS5n
ZXQoKSwgb2JqZWN0KTsKLSAgICAgICAgICAgIENGUmVsZWFzZShvYmplY3QpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgLy8gQXBwZW5kIG91ciB0b2tlbiBudWxsIHJlcHJlc2VudGF0
aW9uLgotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFyY2hpdmVMaXN0QXJyYXkuZ2V0
KCksIHRva2VuTnVsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIGRpY3Rpb25hcnkg
PSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
MCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1
ZUNhbGxCYWNrcykpOwotCi0gICAgYXV0byB2ZXJzaW9uTnVtYmVyID0gYWRvcHRDRihDRk51bWJl
ckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwgJnZlcnNp
b24pKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigi
dmVyc2lvbiIpLCB2ZXJzaW9uTnVtYmVyLmdldCgpKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1
ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigiYXJjaGl2ZUxpc3QiKSwgYXJjaGl2ZUxpc3RBcnJh
eS5nZXQoKSk7Ci0KLSAgICBpZiAocHJvdG9jb2xQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGRGlj
dGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnkuZ2V0KCksIENGU1RSKCJwcm90b2NvbFByb3BlcnRp
ZXMiKSwgcHJvdG9jb2xQcm9wZXJ0aWVzKTsKLSAgICAgICAgQ0ZSZWxlYXNlKHByb3RvY29sUHJv
cGVydGllcyk7Ci0gICAgfQotCi0gICAgaWYgKGV4cGVjdGVkQ29udGVudExlbmd0aCkgewotICAg
ICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigiZXhwZWN0
ZWRDb250ZW50TGVuZ3RoIiksIGV4cGVjdGVkQ29udGVudExlbmd0aCk7Ci0gICAgICAgIENGUmVs
ZWFzZShleHBlY3RlZENvbnRlbnRMZW5ndGgpOwotICAgIH0KLQotICAgIGlmIChtaW1lVHlwZSkg
ewotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigi
bWltZVR5cGUiKSwgbWltZVR5cGUpOwotICAgICAgICBDRlJlbGVhc2UobWltZVR5cGUpOwotICAg
IH0KLQotICAgIENGQWxsb2NhdG9yRGVhbGxvY2F0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBvYmpl
Y3RzKTsKLQotICAgIHJldHVybiBkaWN0aW9uYXJ5OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZVR5cGU+IGJvb2wgZXh0cmFjdERpY3Rpb25hcnlWYWx1ZShDRkRpY3Rpb25hcnlSZWYgZGlj
dGlvbmFyeSwgQ0ZTdHJpbmdSZWYga2V5LCBWYWx1ZVR5cGUqIHJlc3VsdCkKLXsKLSAgICBhdXRv
IHVudHlwZWRWYWx1ZSA9IENGRGljdGlvbmFyeUdldFZhbHVlKGRpY3Rpb25hcnksIGtleSk7Ci0g
ICAgYXV0byB2YWx1ZSA9IGR5bmFtaWNfY2ZfY2FzdDxWYWx1ZVR5cGU+KHVudHlwZWRWYWx1ZSk7
Ci0gICAgaWYgKHVudHlwZWRWYWx1ZSAmJiAhdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAocmVzdWx0KQotICAgICAgICAqcmVzdWx0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0ZUFyY2hpdmVMaXN0KENGRGljdGlvbmFyeVJlZiBy
ZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRva2VuTnVsbCwgQ0ZJbmRleCogdmVyc2lvbiwgQ0ZU
eXBlUmVmKiogb2JqZWN0cywgQ0ZJbmRleCogb2JqZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiog
cHJvdG9jb2xQcm9wZXJ0aWVzLCBDRk51bWJlclJlZiogZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBD
RlN0cmluZ1JlZiogbWltZVR5cGUpCitzdGF0aWMgYm9vbCBjcmVhdGVBcmNoaXZlTGlzdChDRkRp
Y3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwsIENGSW5kZXgq
IHZlcnNpb24sIENGVHlwZVJlZioqIG9iamVjdHMsIENGSW5kZXgqIG9iamVjdENvdW50LCBDRkRp
Y3Rpb25hcnlSZWYqIHByb3RvY29sUHJvcGVydGllcykKIHsKICAgICBhdXRvIHZlcnNpb25OdW1i
ZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJl
cHJlc2VudGF0aW9uLCBDRlNUUigidmVyc2lvbiIpKSk7CiAgICAgaWYgKCF2ZXJzaW9uTnVtYmVy
KQpAQCAtMTIzLDEyICs3MSwxMiBAQCBzdGF0aWMgYm9vbCBjcmVhdGVBcmNoaXZlTGlzdChDRkRp
Y3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bAogICAgIGlmIChi
dWZmZXJTaXplLmhhc092ZXJmbG93ZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKCFleHRyYWN0RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigicHJvdG9j
b2xQcm9wZXJ0aWVzIiksIHByb3RvY29sUHJvcGVydGllcykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIWV4dHJhY3REaWN0aW9uYXJ5VmFsdWUocmVwcmVzZW50YXRpb24sIENGU1RS
KCJleHBlY3RlZENvbnRlbnRMZW5ndGgiKSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZXh0cmFjdERpY3Rpb25hcnlWYWx1ZShyZXByZXNl
bnRhdGlvbiwgQ0ZTVFIoIm1pbWVUeXBlIiksIG1pbWVUeXBlKSkKKyAgICBhdXRvIHVudHlwZWRW
YWx1ZSA9IENGRGljdGlvbmFyeUdldFZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigicHJvdG9j
b2xQcm9wZXJ0aWVzIikpOworICAgIGF1dG8gdmFsdWUgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZEaWN0
aW9uYXJ5UmVmPih1bnR5cGVkVmFsdWUpOworICAgIGlmICh1bnR5cGVkVmFsdWUgJiYgIXZhbHVl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHByb3RvY29sUHJvcGVydGllcykKKyAg
ICAgICAgKnByb3RvY29sUHJvcGVydGllcyA9IHZhbHVlOwogCiAgICAgKm9iamVjdENvdW50ID0g
YXJjaGl2ZUxpc3RBcnJheUNvdW50OwogICAgICpvYmplY3RzID0gc3RhdGljX2Nhc3Q8Q0ZUeXBl
UmVmKj4oZmFzdE1hbGxvYyhidWZmZXJTaXplLnVuc2FmZUdldCgpKSk7CkBAIC0xNDIsOCArOTAs
MTAgQEAgc3RhdGljIGJvb2wgY3JlYXRlQXJjaGl2ZUxpc3QoQ0ZEaWN0aW9uYXJ5UmVmIHJlcHJl
c2VudGF0aW9uLCBDRlR5cGVSZWYgdG9rZW5OdWwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2Vu
dGF0aW9uKENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QsIENGVHlwZVJlZiB0b2tlbk51bGwpCitz
dGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVz
ZW50YXRpb24oTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0LCBDRlR5cGVSZWYgdG9rZW5OdWxsKQogewor
ICAgIENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QgPSBbcmVxdWVzdCBfQ0ZVUkxSZXF1ZXN0XTsK
KwogICAgIENGSW5kZXggdmVyc2lvbjsKICAgICBDRlR5cGVSZWYqIG9iamVjdHM7CiAgICAgQ0ZJ
bmRleCBvYmplY3RDb3VudDsKQEAgLTE1NSwzMyArMTA1LDQ3IEBAIHN0YXRpYyBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihDRlVSTFJl
cXVlc3RSCiAKICAgICBfQ0ZVUkxSZXF1ZXN0Q3JlYXRlQXJjaGl2ZUxpc3Qoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgY2ZSZXF1ZXN0LCAmdmVyc2lvbiwgJm9iamVjdHMsICZvYmplY3RDb3VudCwgJnBy
b3RvY29sUHJvcGVydGllcyk7CiAKLSAgICAvLyBUaGlzIHdpbGwgZGVhbGxvY2F0ZSB0aGUgcGFz
c2VkIGluIGFyZ3VtZW50cy4KLSAgICByZXR1cm4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50
YXRpb24odmVyc2lvbiwgb2JqZWN0cywgb2JqZWN0Q291bnQsIHByb3RvY29sUHJvcGVydGllcywg
bnVsbHB0ciwgbnVsbHB0ciwgdG9rZW5OdWxsKTsKKyAgICBhdXRvIGFyY2hpdmVMaXN0QXJyYXkg
PSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZr
Q0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKKworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IG9i
amVjdENvdW50OyArK2kpIHsKKyAgICAgICAgQ0ZUeXBlUmVmIG9iamVjdCA9IG9iamVjdHNbaV07
CisgICAgICAgIGlmIChvYmplY3QpIHsKKyAgICAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShh
cmNoaXZlTGlzdEFycmF5LmdldCgpLCBvYmplY3QpOworICAgICAgICAgICAgQ0ZSZWxlYXNlKG9i
amVjdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBcHBlbmQgb3VyIHRva2Vu
IG51bGwgcmVwcmVzZW50YXRpb24uCisgICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJj
aGl2ZUxpc3RBcnJheS5nZXQoKSwgdG9rZW5OdWxsKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisKKyAgICBhdXRvIHZlcnNpb25OdW1iZXIg
PSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckNG
SW5kZXhUeXBlLCAmdmVyc2lvbikpOworICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25h
cnkuZ2V0KCksIENGU1RSKCJ2ZXJzaW9uIiksIHZlcnNpb25OdW1iZXIuZ2V0KCkpOworICAgIENG
RGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnkuZ2V0KCksIENGU1RSKCJhcmNoaXZlTGlzdCIp
LCBhcmNoaXZlTGlzdEFycmF5LmdldCgpKTsKKworICAgIGlmIChwcm90b2NvbFByb3BlcnRpZXMp
IHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIo
InByb3RvY29sUHJvcGVydGllcyIpLCBwcm90b2NvbFByb3BlcnRpZXMpOworICAgICAgICBDRlJl
bGVhc2UocHJvdG9jb2xQcm9wZXJ0aWVzKTsKKyAgICB9CisKKyAgICBDRkFsbG9jYXRvckRlYWxs
b2NhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgb2JqZWN0cyk7CisKKyAgICByZXR1cm4gZGljdGlv
bmFyeTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDRlVSTFJlcXVlc3RSZWY+IGNyZWF0ZUNGVVJM
UmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgcmVw
cmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwpCitzdGF0aWMgUmV0YWluUHRyPE5TVVJM
UmVxdWVzdD4gY3JlYXRlTlNVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9u
KENGRGljdGlvbmFyeVJlZiByZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRva2VuTnVsbCkKIHsK
ICAgICBDRkluZGV4IHZlcnNpb247CiAgICAgQ0ZUeXBlUmVmKiBvYmplY3RzOwogICAgIENGSW5k
ZXggb2JqZWN0Q291bnQ7CiAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3RvY29sUHJvcGVydGllczsK
IAotICAgIGlmICghY3JlYXRlQXJjaGl2ZUxpc3QocmVwcmVzZW50YXRpb24sIHRva2VuTnVsbCwg
JnZlcnNpb24sICZvYmplY3RzLCAmb2JqZWN0Q291bnQsICZwcm90b2NvbFByb3BlcnRpZXMsIG51
bGxwdHIsIG51bGxwdHIpKQorICAgIGlmICghY3JlYXRlQXJjaGl2ZUxpc3QocmVwcmVzZW50YXRp
b24sIHRva2VuTnVsbCwgJnZlcnNpb24sICZvYmplY3RzLCAmb2JqZWN0Q291bnQsICZwcm90b2Nv
bFByb3BlcnRpZXMpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gY2ZSZXF1
ZXN0ID0gYWRvcHRDRihfQ0ZVUkxSZXF1ZXN0Q3JlYXRlRnJvbUFyY2hpdmVMaXN0KGtDRkFsbG9j
YXRvckRlZmF1bHQsIHZlcnNpb24sIG9iamVjdHMsIG9iamVjdENvdW50LCBwcm90b2NvbFByb3Bl
cnRpZXMpKTsKICAgICBmYXN0RnJlZShvYmplY3RzKTsKLSAgICByZXR1cm4gV1RGTW92ZShjZlJl
cXVlc3QpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY3JlYXRlU2Vy
aWFsaXphYmxlUmVwcmVzZW50YXRpb24oTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0LCBDRlR5cGVSZWYg
dG9rZW5OdWxsKQotewotICAgIHJldHVybiBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlv
bihbcmVxdWVzdCBfQ0ZVUkxSZXF1ZXN0XSwgdG9rZW5OdWxsKTsKLX0KLQotc3RhdGljIFJldGFp
blB0cjxOU1VSTFJlcXVlc3Q+IGNyZWF0ZU5TVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXBy
ZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tl
bk51bGwpCi17Ci0gICAgYXV0byBjZlJlcXVlc3QgPSBjcmVhdGVDRlVSTFJlcXVlc3RGcm9tU2Vy
aWFsaXphYmxlUmVwcmVzZW50YXRpb24ocmVwcmVzZW50YXRpb24sIHRva2VuTnVsbCk7CiAgICAg
aWYgKCFjZlJlcXVlc3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIApAQCAtMjE0LDYg
KzE3OCw5IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+Ojpl
bmNvZGVQbGF0Zm9ybURhdGEoRW5jb2RlciYgZW5jb2RlCiAgICAgZW5jb2RlciA8PCByZXNvdXJj
ZVJlcXVlc3QucmVxdWVzdGVyKCk7CiAgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QuY2Fj
aGVQb2xpY3koKTsKICAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5pc0FwcEJvdW5kKCk7
CisKKyAgICAvLyBTZXJpYWxpemUgYWdhaW4gd2l0aCByZWFsIGVuY29kZXI6CisgICAgSVBDOjpl
bmNvZGUoZW5jb2RlciwgcmVxdWVzdFRvU2VyaWFsaXplLmdldCgpKTsKIH0KIAogYm9vbCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0YShE
ZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVz
dCkKQEAgLTIzNCwzNCArMjAxLDE2NCBAQCBib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKERlY29kZXImIGRlY29kZQogICAgIGF1
dG8gbnNVUkxSZXF1ZXN0ID0gY3JlYXRlTlNVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJl
c2VudGF0aW9uKGRpY3Rpb25hcnkuZ2V0KCksIElQQzo6dG9rZW5OdWxscHRyVHlwZVJlZigpKTsK
ICAgICBpZiAoIW5zVVJMUmVxdWVzdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVz
b3VyY2VSZXF1ZXN0ID0gV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KG5zVVJMUmVxdWVzdC5nZXQo
KSk7CiAgICAgCiAgICAgVmVjdG9yPFN0cmluZz4gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25F
bmNvZGluZ0ZhbGxiYWNrQXJyYXk7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXNwb25zZUNv
bnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHJlc291cmNlUmVxdWVzdC5zZXRSZXNwb25zZUNvbnRlbnREaXNwb3NpdGlv
bkVuY29kaW5nRmFsbGJhY2tBcnJheSgKLSAgICAgICAgcmVzcG9uc2VDb250ZW50RGlzcG9zaXRp
b25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpID4gMCA/IHJlc3BvbnNlQ29udGVudERpc3Bv
c2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5WzBdIDogU3RyaW5nKCksCi0gICAgICAgIHJlc3Bv
bnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnNpemUoKSA+IDEgPyBy
ZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVsxXSA6IFN0cmlu
ZygpLAotICAgICAgICByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tB
cnJheS5zaXplKCkgPiAyID8gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxi
YWNrQXJyYXlbMl0gOiBTdHJpbmcoKQotICAgICk7Ci0KICAgICBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3Q6OlJlcXVlc3RlciByZXF1ZXN0ZXI7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXF1
ZXN0ZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzb3VyY2VSZXF1ZXN0LnNldFJl
cXVlc3RlcihyZXF1ZXN0ZXIpOwogCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQ
b2xpY3kgY2FjaGVQb2xpY3k7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjYWNoZVBvbGljeSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXNvdXJjZVJlcXVlc3Quc2V0Q2FjaGVQb2xp
Y3koY2FjaGVQb2xpY3kpOwogCiAgICAgYm9vbCBpc0FwcEJvdW5kOwogICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoaXNBcHBCb3VuZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
cmVxdWVzdCA9IElQQzo6ZGVjb2RlPE5TVVJMUmVxdWVzdD4oZGVjb2RlciwgTlNVUkxSZXF1ZXN0
LmNsYXNzKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJlc291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdChyZXF1ZXN0LT5nZXQo
KSk7CisgICAgcmVzb3VyY2VSZXF1ZXN0LnNldFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5j
b2RpbmdGYWxsYmFja0FycmF5KAorICAgICAgICByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkgPiAwID8gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRp
b25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMF0gOiBTdHJpbmcoKSwKKyAgICAgICAgcmVzcG9uc2VD
b250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpID4gMSA/IHJlc3Bv
bnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5WzFdIDogU3RyaW5nKCks
CisgICAgICAgIHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
LnNpemUoKSA+IDIgPyByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tB
cnJheVsyXSA6IFN0cmluZygpCisgICAgKTsKKyAgICByZXNvdXJjZVJlcXVlc3Quc2V0UmVxdWVz
dGVyKHJlcXVlc3Rlcik7CisgICAgcmVzb3VyY2VSZXF1ZXN0LnNldENhY2hlUG9saWN5KGNhY2hl
UG9saWN5KTsKICAgICByZXNvdXJjZVJlcXVlc3Quc2V0SXNBcHBCb3VuZChpc0FwcEJvdW5kKTsK
IAorICAgIC8vIFRFU1RTCisgICAgTlNVUkxSZXF1ZXN0ICpjZlJlcXVlc3QgPSBuc1VSTFJlcXVl
c3QuZ2V0KCk7CisgICAgTlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3QgPSByZXF1ZXN0LnZhbHVlKCku
Z2V0KCk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChjZlJlcXVlc3QuY2FjaGVQb2xpY3kgPT0gbnNS
ZXF1ZXN0LmNhY2hlUG9saWN5KTsKKyAgICBSRUxFQVNFX0FTU0VSVChbY2ZSZXF1ZXN0LkhUVFBN
ZXRob2QgaXNFcXVhbFRvU3RyaW5nOiBuc1JlcXVlc3QuSFRUUE1ldGhvZF0pOworICAgIGlmICgh
W2NmUmVxdWVzdC5VUkwgaXNFcXVhbDogbnNSZXF1ZXN0LlVSTF0pIHsKKyAgICAgICAgV1RGTG9n
QWx3YXlzKCJTRVJJQUxJWkFUSU9OIEVSUk9SOiBDRlVSTFJlcXVlc3QgYW5kIE5TVVJMUmVxZXVz
dCBzZXJpYWxpemF0aW9uIG1pc21hdGNoIGZvciBVUkw6Iik7CisgICAgICAgIE5TTG9nKEAiU0VS
SUFMSVpBVElPTiBFUlJPUjogU2VyaWFsaXphdGlvbiBtaXNtYXRjaDogJUAgaW5zdGVhZCBvZiAl
QCIsIGNmUmVxdWVzdC5VUkwsIG5zUmVxdWVzdC5VUkwpOworICAgICAgICBDRlNob3coY2ZSZXF1
ZXN0LlVSTCk7CisgICAgICAgIENGU2hvdyhuc1JlcXVlc3QuVVJMKTsKKyAgICB9CisKKyAgICBp
ZCBjZk1haW5Eb2N1bWVudFVSTCA9IGNmUmVxdWVzdC5tYWluRG9jdW1lbnRVUkw7CisgICAgaWQg
bnNNYWluRG9jdW1lbnRVUkwgPSBuc1JlcXVlc3QubWFpbkRvY3VtZW50VVJMOworICAgIGlmIChj
Zk1haW5Eb2N1bWVudFVSTCB8fCBuc01haW5Eb2N1bWVudFVSTCkgeworICAgICAgICBpZiAoIVtj
Zk1haW5Eb2N1bWVudFVSTCBpc0VxdWFsOiBuc01haW5Eb2N1bWVudFVSTF0pIHsKKyAgICAgICAg
ICAgIFdURkxvZ0Fsd2F5cygiU0VSSUFMSVpBVElPTiBFUlJPUjogQ0ZVUkxSZXF1ZXN0IGFuZCBO
U1VSTFJlcWV1c3Qgc2VyaWFsaXphdGlvbiBtaXNtYXRjaCBmb3IgbWFpbkRvY3VtZW50VVJMOiIp
OworICAgICAgICAgICAgTlNMb2coQCJTRVJJQUxJWkFUSU9OIEVSUk9SOiBTZXJpYWxpemF0aW9u
IG1pc21hdGNoIGZvciBtYWluRG9jdW1lbnRVUkw6ICVAIGluc3RlYWQgb2YgJUAiLCBjZk1haW5E
b2N1bWVudFVSTCwgbnNNYWluRG9jdW1lbnRVUkwpOworICAgICAgICAgICAgQ0ZTaG93KGNmTWFp
bkRvY3VtZW50VVJMKTsKKyAgICAgICAgICAgIENGU2hvdyhuc01haW5Eb2N1bWVudFVSTCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2ZSZXF1ZXN0LmFsbEhUVFBIZWFkZXJGaWVsZHMp
IHsKKyAgICAgICAgZm9yIChpZCBrZXkgaW4gY2ZSZXF1ZXN0LmFsbEhUVFBIZWFkZXJGaWVsZHMp
IHsKKyAgICAgICAgICAgIGlkIGNmSGVhZGVyVmFsdWUgPSBbY2ZSZXF1ZXN0LmFsbEhUVFBIZWFk
ZXJGaWVsZHMgdmFsdWVGb3JLZXk6a2V5XTsKKyAgICAgICAgICAgIGlkIG5zSGVhZGVyVmFsdWUg
PSBbbnNSZXF1ZXN0LmFsbEhUVFBIZWFkZXJGaWVsZHMgdmFsdWVGb3JLZXk6a2V5XTsKKyAgICAg
ICAgICAgIGlmICghW25zSGVhZGVyVmFsdWUgaXNFcXVhbDpjZkhlYWRlclZhbHVlXSkgeworICAg
ICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiU0VSSUFMSVpBVElPTiBFUlJPUjogQ0ZVUkxSZXF1
ZXN0IGFuZCBOU1VSTFJlcWV1c3Qgc2VyaWFsaXphdGlvbiBtaXNtYXRjaCBmb3IgSFRUUCBIZWFk
ZXI6Iik7CisgICAgICAgICAgICAgICAgTlNMb2coQCJTRVJJQUxJWkFUSU9OIEVSUk9SOiBTZXJp
YWxpemF0aW9uIG1pc21hdGNoIGZvciBoZWFkZXIgJUA6ICVAIGluc3RlYWQgb2YgJUAiLCBrZXks
IGNmSGVhZGVyVmFsdWUsIG5zSGVhZGVyVmFsdWUpOworICAgICAgICAgICAgICAgIENGU2hvdyhr
ZXkpOworICAgICAgICAgICAgICAgIENGU2hvdyhjZkhlYWRlclZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBDRlNob3cobnNIZWFkZXJWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlQoY2ZSZXF1ZXN0LnRpbWVvdXRJbnRlcnZhbCA9PSBuc1Jl
cXVlc3QudGltZW91dEludGVydmFsKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjZlJlcXVlc3QuSFRU
UFNob3VsZEhhbmRsZUNvb2tpZXMgPT0gbnNSZXF1ZXN0LkhUVFBTaG91bGRIYW5kbGVDb29raWVz
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChjZlJlcXVlc3QuSFRUUFNob3VsZFVzZVBpcGVsaW5pbmcg
PT0gbnNSZXF1ZXN0LkhUVFBTaG91bGRVc2VQaXBlbGluaW5nKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChjZlJlcXVlc3QuYWxsb3dzQ2VsbHVsYXJBY2Nlc3MgPT0gbnNSZXF1ZXN0LmFsbG93c0NlbGx1
bGFyQWNjZXNzKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjZlJlcXVlc3QuYWxsb3dzQ29uc3RyYWlu
ZWROZXR3b3JrQWNjZXNzID09IG5zUmVxdWVzdC5hbGxvd3NDb25zdHJhaW5lZE5ldHdvcmtBY2Nl
c3MpOworICAgIFJFTEVBU0VfQVNTRVJUKGNmUmVxdWVzdC5hbGxvd3NFeHBlbnNpdmVOZXR3b3Jr
QWNjZXNzID09IG5zUmVxdWVzdC5hbGxvd3NFeHBlbnNpdmVOZXR3b3JrQWNjZXNzKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChjZlJlcXVlc3QubmV0d29ya1NlcnZpY2VUeXBlID09IG5zUmVxdWVzdC5u
ZXR3b3JrU2VydmljZVR5cGUpOworICAgIFJFTEVBU0VfQVNTRVJUKGNmUmVxdWVzdC5fc2NoZW1l
V2FzVXBncmFkZWREdWVUb0R5bmFtaWNIU1RTID09IG5zUmVxdWVzdC5fc2NoZW1lV2FzVXBncmFk
ZWREdWVUb0R5bmFtaWNIU1RTKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjZlJlcXVlc3QuX3ByZXZl
bnRIU1RTU3RvcmFnZSA9PSBuc1JlcXVlc3QuX3ByZXZlbnRIU1RTU3RvcmFnZSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoY2ZSZXF1ZXN0Ll9pZ25vcmVIU1RTID09IG5zUmVxdWVzdC5faWdub3JlSFNU
Uyk7CisgICAgUkVMRUFTRV9BU1NFUlQoW2NmUmVxdWVzdCBfcHJvcGVydHlGb3JLZXk6QCJzdGFy
dFRpbWVvdXRUaW1lIl0gPT0gW25zUmVxdWVzdCBfcHJvcGVydHlGb3JLZXk6QCJzdGFydFRpbWVv
dXRUaW1lIl0pOworICAgIFJFTEVBU0VfQVNTRVJUKFtjZlJlcXVlc3QgX3Byb3BlcnR5Rm9yS2V5
OkAicmVxdWlyZXNTaG9ydENvbm5lY3Rpb25UaW1lb3V0Il0gPT0gW25zUmVxdWVzdCBfcHJvcGVy
dHlGb3JLZXk6QCJyZXF1aXJlc1Nob3J0Q29ubmVjdGlvblRpbWVvdXQiXSk7CisgICAgTlNUaW1l
SW50ZXJ2YWwgY2ZQYXlsb2FkVGltZW91dCA9IFsoTlNOdW1iZXIgKilbY2ZSZXF1ZXN0IF9wcm9w
ZXJ0eUZvcktleTpAInBheWxvYWRUcmFuc21pc3Npb25UaW1lb3V0Il0gZG91YmxlVmFsdWVdOwor
ICAgIE5TVGltZUludGVydmFsIG5zUGF5bG9hZFRpbWVvdXQgPSBbKE5TTnVtYmVyICopW25zUmVx
dWVzdCBfcHJvcGVydHlGb3JLZXk6QCJwYXlsb2FkVHJhbnNtaXNzaW9uVGltZW91dCJdIGRvdWJs
ZVZhbHVlXTsKKyAgICBSRUxFQVNFX0FTU0VSVChjZlBheWxvYWRUaW1lb3V0ID09IG5zUGF5bG9h
ZFRpbWVvdXQpOworCisgICAgLy8gQ29tcGFyZSB0aGUgcHJvcGVydGllcworICAgIGF1dG8gY2ZE
aWN0aW9uYXJ5ID0gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oY2ZSZXF1ZXN0LCBJ
UEM6OnRva2VuTnVsbHB0clR5cGVSZWYoKSk7CisgICAgYXV0byBuc0RpY3Rpb25hcnkgPSBjcmVh
dGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihuc1JlcXVlc3QsIElQQzo6dG9rZW5OdWxscHRy
VHlwZVJlZigpKTsKKworICAgIC8vIFRoZXNlIG91Z2h0IHRvIGJlIGlkZW50aWNhbC4KKyAgICBh
dXRvIGNmVmVyc2lvbk51bWJlciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUoY2ZEaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigidmVyc2lvbiIpKSk7Cisg
ICAgYXV0byBuc1ZlcnNpb25OdW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENG
RGljdGlvbmFyeUdldFZhbHVlKG5zRGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIoInZlcnNpb24iKSkp
OworCisgICAgQ0ZJbmRleCBjZlZlcnNpb24sIG5zVmVyc2lvbjsKKyAgICBDRk51bWJlckdldFZh
bHVlKGNmVmVyc2lvbk51bWJlciwga0NGTnVtYmVyQ0ZJbmRleFR5cGUsICZjZlZlcnNpb24pOwor
ICAgIENGTnVtYmVyR2V0VmFsdWUobnNWZXJzaW9uTnVtYmVyLCBrQ0ZOdW1iZXJDRkluZGV4VHlw
ZSwgJm5zVmVyc2lvbik7CisgICAgUkVMRUFTRV9BU1NFUlQoY2ZWZXJzaW9uID09IG5zVmVyc2lv
bik7CisgICAgCisgICAgYXV0byBjZkFyY2hpdmVMaXN0QXJyYXkgPSBkeW5hbWljX2NmX2Nhc3Q8
Q0ZBcnJheVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoY2ZEaWN0aW9uYXJ5LmdldCgpLCBDRlNU
UigiYXJjaGl2ZUxpc3QiKSkpOworICAgIGF1dG8gbnNBcmNoaXZlTGlzdEFycmF5ID0gZHluYW1p
Y19jZl9jYXN0PENGQXJyYXlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG5zRGljdGlvbmFyeS5n
ZXQoKSwgQ0ZTVFIoImFyY2hpdmVMaXN0IikpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgoY2ZBcmNo
aXZlTGlzdEFycmF5ICYmIG5zQXJjaGl2ZUxpc3RBcnJheSkgfHwgKCFjZkFyY2hpdmVMaXN0QXJy
YXkgJiYgIW5zQXJjaGl2ZUxpc3RBcnJheSkpOworCisgICAgYXV0byBjZkFyY2hpdmVMaXN0QXJy
YXlDb3VudCA9IENGQXJyYXlHZXRDb3VudChjZkFyY2hpdmVMaXN0QXJyYXkpOworICAgIGF1dG8g
bnNBcmNoaXZlTGlzdEFycmF5Q291bnQgPSBDRkFycmF5R2V0Q291bnQobnNBcmNoaXZlTGlzdEFy
cmF5KTsKKyAgICBSRUxFQVNFX0FTU0VSVChjZkFyY2hpdmVMaXN0QXJyYXlDb3VudCA9PSBuc0Fy
Y2hpdmVMaXN0QXJyYXlDb3VudCk7CisKKyAgICBpZiAoY2ZBcmNoaXZlTGlzdEFycmF5Q291bnQg
JiYgbnNBcmNoaXZlTGlzdEFycmF5Q291bnQpIHsKKyAgICAgICAgZm9yIChDRkluZGV4IGkgPSAw
OyBpIDwgY2ZBcmNoaXZlTGlzdEFycmF5Q291bnQ7ICsraSkgeworICAgICAgICAgICAgYXV0byBj
Zk9iaiA9IENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY2ZBcmNoaXZlTGlzdEFycmF5LCBpKTsKKyAg
ICAgICAgICAgIGF1dG8gbnNPYmogPSBDRkFycmF5R2V0VmFsdWVBdEluZGV4KG5zQXJjaGl2ZUxp
c3RBcnJheSwgaSk7CisgICAgICAgICAgICBpZiAoY2ZPYmogPT0gSVBDOjp0b2tlbk51bGxwdHJU
eXBlUmVmKCkpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChuc09iaiA9PSBJUEM6
OnRva2VuTnVsbHB0clR5cGVSZWYoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChDRkdldFR5cGVJRChjZk9iaikg
PT0gQ0ZHZXRUeXBlSUQobnNPYmopKTsKKyAgICAgICAgICAgIGlmICghV1RGOjpzYWZlQ0ZFcXVh
bChjZk9iaiwgbnNPYmopKSB7CisgICAgICAgICAgICAgICAgYm9vbCBsb2cgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGlmIChpID09IDYpIHsKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg
Y2ZCaXRtYXAsIG5zQml0bWFwOworICAgICAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVl
KGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oY2ZPYmopLCBrQ0ZOdW1iZXJTSW50NjRUeXBl
LCAmY2ZCaXRtYXApOworICAgICAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKGR5bmFt
aWNfY2ZfY2FzdDxDRk51bWJlclJlZj4obnNPYmopLCBrQ0ZOdW1iZXJTSW50NjRUeXBlLCAmbnNC
aXRtYXApOworICAgICAgICAgICAgICAgICAgICBpZiAobnNCaXRtYXAgLSBjZkJpdG1hcCA9PSAz
MikKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZyA9IGZhbHNlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAobG9nKSB7CisgICAgICAgICAgICAgICAgICAgIFdURkxv
Z0Fsd2F5cygiU0VSSUFMSVpBVElPTiBFUlJPUjogQXJjaGl2ZSBMaXN0IG1pc21hdGNoIGF0IHBv
c2l0aW9uICVkIiwgaSk7CisgICAgICAgICAgICAgICAgICAgIENGU2hvdyhjZk9iaik7CisgICAg
ICAgICAgICAgICAgICAgIENGU2hvdyhuc09iaik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGF1dG8gY2ZQcm90b2NvbFByb3Bl
cnRpZXMgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRpY3Rpb25hcnlHZXRW
YWx1ZShjZkRpY3Rpb25hcnkuZ2V0KCksIENGU1RSKCJwcm90b2NvbFByb3BlcnRpZXMiKSkpOwor
ICAgIGF1dG8gbnNQcm90b2NvbFByb3BlcnRpZXMgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZEaWN0aW9u
YXJ5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShuc0RpY3Rpb25hcnkuZ2V0KCksIENGU1RSKCJw
cm90b2NvbFByb3BlcnRpZXMiKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKChjZlByb3RvY29sUHJv
cGVydGllcyAmJiBuc1Byb3RvY29sUHJvcGVydGllcykgfHwgKCFjZlByb3RvY29sUHJvcGVydGll
cyAmJiAhbnNQcm90b2NvbFByb3BlcnRpZXMpKTsKKyAgICBpZiAoY2ZQcm90b2NvbFByb3BlcnRp
ZXMgJiYgbnNQcm90b2NvbFByb3BlcnRpZXMpIHsKKyAgICAgICAgQ0ZJbmRleCBjZlNpemUgPSBD
RkRpY3Rpb25hcnlHZXRDb3VudChjZlByb3RvY29sUHJvcGVydGllcyk7CisgICAgICAgIENGSW5k
ZXggbnNTaXplID0gQ0ZEaWN0aW9uYXJ5R2V0Q291bnQobnNQcm90b2NvbFByb3BlcnRpZXMpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjZlNpemUgPT0gbnNTaXplKTsKKworICAgICAgICBWZWN0
b3I8Q0ZUeXBlUmVmLCAzMj4gY2ZLZXlzKGNmU2l6ZSk7CisgICAgICAgIFZlY3RvcjxDRlR5cGVS
ZWYsIDMyPiBjZlZhbHVlcyhjZlNpemUpOworICAgICAgICBDRkRpY3Rpb25hcnlHZXRLZXlzQW5k
VmFsdWVzKGNmUHJvdG9jb2xQcm9wZXJ0aWVzLCBjZktleXMuZGF0YSgpLCBjZlZhbHVlcy5kYXRh
KCkpOworCisgICAgICAgIGZvciAoYXV0byBpID0gMDsgaSA8IGNmU2l6ZTsgKytpKSB7CisgICAg
ICAgICAgICBhdXRvIGtleSA9IGNmS2V5c1tpXTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KG5zUHJvdG9jb2xQcm9wZXJ0aWVzLCBrZXkpKTsKKyAg
ICAgICAgICAgIGF1dG8gbnNWYWx1ZSA9IENGRGljdGlvbmFyeUdldFZhbHVlKG5zUHJvdG9jb2xQ
cm9wZXJ0aWVzLCBrZXkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoQ0ZHZXRUeXBlSUQo
bnNWYWx1ZSkgPT0gQ0ZHZXRUeXBlSUQoY2ZWYWx1ZXNbaV0pKTsKKyAgICAgICAgICAgIGlmICgh
V1RGOjpzYWZlQ0ZFcXVhbChuc1ZhbHVlLCBjZlZhbHVlc1tpXSkpIHsKKyAgICAgICAgICAgICAg
ICBXVEZMb2dBbHdheXMoIlNFUklBTElaQVRJT04gRVJST1I6IFByb3RvY29sIFByb3BlcnRpZXMg
ZGljdGlvbmFyeSBtaXNtYXRjaCBhdCBwb3NpdGlvbiAlZCIsIGkpOworICAgICAgICAgICAgICAg
IENGU2hvdyhrZXkpOworICAgICAgICAgICAgICAgIENGU2hvdyhjZlZhbHVlc1tpXSk7CisgICAg
ICAgICAgICAgICAgQ0ZTaG93KG5zVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwZGJhZWYyODk2Mjg0OGEzM2Q3ZjY0MTk1ZDEzNGFl
YjE1MzYzYTdhLi4wNWVlYjU1ZDIyOWM2YTAwZWQyM2ZlNGUyZWRkYWNkMGZlM2M1MWFiIDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjAgQEAKKzIwMjEtMDItMTkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisK
KyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVxdWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1ZXN0
KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMjE0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgQWRk
IGEgbmV3IHRlc3QgdG8gZW5zdXJlIHdlIGNhbiBzdWNjZXNzZnVsbHkgbG9hZCBVUkxzIHdpdGgg
YWNjZW50ZWQgY2hhcmFjdGVycywKKyAgICAgICAgYW5kIHRvIHRlc3QgdGhlIHVwZGF0ZWQgSVBD
IHNlcmlhbGl6YXRpb24gZm9yIE5TVVJMUmVxdWVzdC4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0L0EvMzAzLzI0Ny8zMDMvMjQzby5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvYWRJbnZhbGlkVVJMUmVxdWVzdC5t
bToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOiBDb3JyZWN0IFVSTCByZXN1bHQgbm93
IHRoYXQgdGhlIHZhbHVlIGlzIHByb3Blcmx5IHNlcmlhbGl6ZWQuCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbToKKyAgICAgICAg
KFRFU1QpOgorCiAyMDIxLTAyLTE5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgTlNFcnJvciByZXR1cm5lZCBieSBXZWJLaXQgQVBJIHNob3Vs
ZCBhY3R1YWxseSBjb25mb3JtIHRvIE5TU2VjdXJlQ29kaW5nCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVt
ZXMvVGVzdFdlYktpdEFQSS54Y3NjaGVtZSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9UZXN0V2ViS2l0QVBJLnhjc2No
ZW1lCmluZGV4IDVmNWVjMmU0YWVjMzllZGMzOWZjN2Y4NWM3ZDk2N2U1YzQ5NDY5NGUuLjRhM2Y2
MmM3N2QzM2VkNGViZTNiMjU3NmI1NzVlZTM3ZWFjMzc1MTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1l
cy9UZXN0V2ViS2l0QVBJLnhjc2NoZW1lCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9UZXN0V2ViS2l0QVBJLnhj
c2NoZW1lCkBAIC01MCw2ICs1MCwxMiBAQAogICAgICAgICAgICAgUmVmZXJlbmNlZENvbnRhaW5l
ciA9ICJjb250YWluZXI6VGVzdFdlYktpdEFQSS54Y29kZXByb2oiPgogICAgICAgICAgPC9CdWls
ZGFibGVSZWZlcmVuY2U+CiAgICAgICA8L0J1aWxkYWJsZVByb2R1Y3RSdW5uYWJsZT4KKyAgICAg
IDxDb21tYW5kTGluZUFyZ3VtZW50cz4KKyAgICAgICAgIDxDb21tYW5kTGluZUFyZ3VtZW50Cisg
ICAgICAgICAgICBhcmd1bWVudCA9ICItLWd0ZXN0X2ZpbHRlcj1XS1dlYlZpZXcuTG9hZCoiCisg
ICAgICAgICAgICBpc0VuYWJsZWQgPSAiWUVTIj4KKyAgICAgICAgIDwvQ29tbWFuZExpbmVBcmd1
bWVudD4KKyAgICAgIDwvQ29tbWFuZExpbmVBcmd1bWVudHM+CiAgICA8L0xhdW5jaEFjdGlvbj4K
ICAgIDxQcm9maWxlQWN0aW9uCiAgICAgICBidWlsZENvbmZpZ3VyYXRpb24gPSAiUmVsZWFzZSIK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9hZElu
dmFsaWRVUkxSZXF1ZXN0Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9Mb2FkSW52YWxpZFVSTFJlcXVlc3QubW0KaW5kZXggN2Q2NTRlZDNhZjJkZGFlYWM4MjU2MDI0
YTc5YTczNjExODRhM2FkYi4uOTZmZThhZDQ0ZGQxZmRjMjM1MjZlNjk0MWE2YzEwMTg4NzgzNWEy
YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2Fk
SW52YWxpZFVSTFJlcXVlc3QubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9Mb2FkSW52YWxpZFVSTFJlcXVlc3QubW0KQEAgLTkzLDcgKzkzLDcgQEAgVEVTVChX
ZWJLaXQsIExvYWRJbnZhbGlkVVJMUmVxdWVzdE5vbkFTQ0lJKQogICAgIGRlbGVnYXRlLmdldCgp
LmRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb24gPSBeKFdLV2ViVmlldyAqLCBXS05hdmlnYXRp
b24gKiwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGVycm9yLmRv
bWFpbiwgQCJXZWJLaXRFcnJvckRvbWFpbiIpOwogICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29k
ZSwgV2ViS2l0RXJyb3JDYW5ub3RTaG93VVJMKTsKLSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKFtl
cnJvci51c2VySW5mb1tAIk5TRXJyb3JGYWlsaW5nVVJMS2V5Il0gYWJzb2x1dGVTdHJpbmddLCAi
aHR0cDovLyVDMyVBMiVDMiU4MCVDMiU4MCIpOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoW2Vy
cm9yLnVzZXJJbmZvW0AiTlNFcnJvckZhaWxpbmdVUkxLZXkiXSBhYnNvbHV0ZVN0cmluZ10sICJo
dHRwOi8vJUUyJTgwJTgwIik7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH07CiAgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbV0tXZWJWaWV3IG5ld10pOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3TG9hZEFQSXMubW0K
aW5kZXggYmVkNTAwZWEzMzk0NWE4MWU2OGQ4ODgzN2ZhOTBhZjdjZTU3MjA4YS4uNWY5YTlmYTE2
ZWMzNzc4MDY0NWY2YjNmMTFmMGI0Y2YxYTE5MDE2ZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0xvYWRBUElzLm1tCkBA
IC0xMzIsMyArMTMyLDQxIEBAIFRFU1QoV0tXZWJWaWV3LCBMb2FkU2ltdWxhdGVkUmVxdWVzdFVw
ZGF0ZXNCYWNrRm9yd2FyZExpc3QpCiAgICAgRVhQRUNUX1RSVUUoIWxpc3QuZm9yd2FyZEl0ZW0p
OwogICAgIEVYUEVDVF9XS19TVFJFUShleGFtcGxlVVJMU3RyaW5nLCBbbGlzdC5iYWNrSXRlbS5V
UkwgYWJzb2x1dGVTdHJpbmddKTsKIH0KKworVEVTVChXS1dlYlZpZXcsIExvYWRBY2NlbnRlZEZp
bGVSZXF1ZXN0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsKKworICAgIGF1
dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5p
dF0pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07
CisKKyAgICBjb25zdCBVSW50OCBieXRlc1s2XSA9IHsgJ0EnLCAweEMzLCAweEE3LCAweEMzLCAw
eEEzLCAnbycgfTsKKyAgICBhdXRvIGZpbGVOYW1lID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9j
XSBpbml0V2l0aEJ5dGVzOmJ5dGVzIGxlbmd0aDo2IGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29k
aW5nXSk7CisKKyAgICAvLyBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gYWRkIHVuaWNvZGUgZmlsZW5h
bWVzIHRvIGdpdC4KKyAgICBOU1VSTCAqb3JpZ2luYWxGaWxlID0gW1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRp
cmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgRVhQRUNUX05PVF9OVUxM
KG9yaWdpbmFsRmlsZSk7CisKKyAgICBOU1N0cmluZyAqdGVzdERpcmVjdG9yeVN0cmluZyA9IFtO
U1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbW05T
VVVJRCBVVUlEXSBVVUlEU3RyaW5nXV07CisgICAgTlNVUkwgKnRlc3REaXJlY3RvcnkgPSBbTlNV
UkwgZmlsZVVSTFdpdGhQYXRoOiB0ZXN0RGlyZWN0b3J5U3RyaW5nXTsKKworICAgIE5TU3RyaW5n
ICp0ZXN0RmlsZVN0cmluZyA9IFtbdGVzdERpcmVjdG9yeVN0cmluZyBzdHJpbmdCeUFwcGVuZGlu
Z1BhdGhDb21wb25lbnQ6ZmlsZU5hbWUuZ2V0KCldIHN0cmluZ0J5QXBwZW5kaW5nUGF0aEV4dGVu
c2lvbjpAImh0bWwiXTsKKyAgICBOU1VSTCAqdGVzdEZpbGUgPSBbTlNVUkwgZmlsZVVSTFdpdGhQ
YXRoOnRlc3RGaWxlU3RyaW5nXTsKKworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdl
cl0gcmVtb3ZlSXRlbUF0VVJMOnRlc3RGaWxlIGVycm9yOm5pbF07CisgICAgW1tOU0ZpbGVNYW5h
Z2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGVzdERpcmVjdG9yeSBlcnJvcjpu
aWxdOworCisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjcmVhdGVEaXJlY3Rv
cnlBdFVSTDp0ZXN0RGlyZWN0b3J5IHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0
cmlidXRlczpuaWwgZXJyb3I6bmlsXTsKKworICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAg
IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY29weUl0ZW1BdFVSTDpvcmlnaW5hbEZp
bGUgdG9VUkw6dGVzdEZpbGUgZXJyb3I6JmVycm9yXTsKKyAgICBFWFBFQ1RfTlVMTChlcnJvcik7
CisgICAgCisgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0
V2l0aFVSTDp0ZXN0RmlsZV07CisgICAgW3dlYlZpZXcgbG9hZEZpbGVSZXF1ZXN0OnJlcXVlc3Qg
YWxsb3dpbmdSZWFkQWNjZXNzVG9VUkw6dGVzdEZpbGUuVVJMQnlEZWxldGluZ0xhc3RQYXRoQ29t
cG9uZW50XTsKKyAgICBbZGVsZWdhdGUgd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAg
IEVYUEVDVF9XS19TVFJFUSh3ZWJWaWV3LmdldCgpLl9yZXNvdXJjZURpcmVjdG9yeVVSTC5wYXRo
LCB0ZXN0RmlsZS5VUkxCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnQucGF0aCk7CisKKyAgICBb
W05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDp0ZXN0RmlsZSBl
cnJvcjpuaWxdOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRl
bUF0VVJMOnRlc3REaXJlY3RvcnkgZXJyb3I6bmlsXTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421338</attachid>
            <date>2021-02-23 12:06:02 -0800</date>
            <delta_ts>2021-02-24 09:50:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222145-20210223120601.patch</filename>
            <type>text/plain</type>
            <size>24586</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMjc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGViNTc5NDQ4Yjk1YjFjZTJl
MjQwNjI3NzU3ZDAyYWM0Mjg2MjkzZmQuLmJhYzJmYjRhMGZkOWVjNDA0YmJkOGJkMmQwYWQ1MGI5
ZThjMjE1NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMjEtMDItMjMgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVx
dWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIEFs
ZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5nIGxheW91dCBhbmQg
V2ViS2l0QVBJIHRlc3RzLgorCisgICAgICAgIFJldmlzZSBJUEMgc2VyaWFsaXphdGlvbiBzbyB0
aGF0IE5TVVJMQ29ubmVjdGlvbiAobW9kZXJuKSBDb2NvYSBidWlsZHMgc2VyaWFsaXplIHRoZQor
ICAgICAgICBOU1VSTFJlcXVlc3Qgb2JqZWN0LCByYXRoZXIgdGhhbiBicmlkZ2luZyB0byBDRlVS
TFJlcXVlc3QgYW5kIHNlcmlhbGl6aW5nIHRoYXQuIFRoaXMKKyAgICAgICAgZW5zdXJlcyB0aGF0
IHRoZSBmdWxsIHNldCBvZiBOU1VSTFJlcXVlc3QgZmVhdHVyZXMgYXJlIGFjY3VyYXRlbHkgcmVj
b25zdGl0dXRlZCBvbiB0aGUKKyAgICAgICAgcmVjZWl2aW5nIHNpZGUgb2YgdGhlIGNvbm5lY3Rp
b24uCisKKyAgICAgICAgQmVjYXVzZSBOU1VSTCBzZXJpYWxpemF0aW9uIGRvZXNuJ3QgaGFuZGxl
IHNvbWUgZW5jb2RlZCBwYXJhbWV0ZXJzIHByb3Blcmx5LCB3ZSBpbXBsZW1lbnQKKyAgICAgICAg
YW4gYXJjaGl2aW5nIGRlbGVnYXRlIHRvIGFyY2hpdmUgdGhlIFVSTCBsaWtlIHdlIGRvIGZvciBD
RlVSTC4KKworICAgICAgICAqIFNoYXJlZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tOgor
ICAgICAgICAoLVtXS1NlY3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlIGFyY2hpdmVyOndpbGxF
bmNvZGVPYmplY3Q6XSk6IEFkZGVkLgorICAgICAgICAoLVtXS1NlY3VyZUNvZGluZ0FyY2hpdmlu
Z0RlbGVnYXRlIHVuYXJjaGl2ZXI6ZGlkRGVjb2RlT2JqZWN0Ol0pOiBBZGRlZC4KKyAgICAgICAg
KCtbV0tFbmNvZGVkVVJMIHN1cHBvcnRzU2VjdXJlQ29kaW5nXSk6IEFkZGVkLgorICAgICAgICAo
LVtXS0VuY29kZWRVUkwgZW5jb2RlV2l0aENvZGVyOl0pOiBBZGRlZC4KKyAgICAgICAgKC1bV0tF
bmNvZGVkVVJMIGluaXRXaXRoQ29kZXI6XSk6IEFkZGVkLgorICAgICAgICAoLVtXS0VuY29kZWRV
UkwgaW5pdFdpdGhVUkw6XSk6IEFkZGVkLgorICAgICAgICAoSVBDOjplbmNvZGVTZWN1cmVDb2Rp
bmdJbnRlcm5hbCk6IFVwZGF0ZSB0byB1c2UgbmV3IGRlbGVnYXRlLgorICAgICAgICAoSVBDOjpk
ZWNvZGVTZWN1cmVDb2RpbmdJbnRlcm5hbCk6IERpdHRvLgorICAgICAgICAoLVtXS1NlY3VyZUNv
ZGluZ0ZvbnRBdHRyaWJ1dGVOb3JtYWxpemVyIGFyY2hpdmVyOndpbGxFbmNvZGVPYmplY3Q6XSk6
IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0Nv
Y29hLm1tOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YSk6IEFkZCBOU1VSTFJlcXVlc3QgZW5jb2RpbmcuCisg
ICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVj
b2RlUGxhdGZvcm1EYXRhKTogQWRkIE5TVVJMUmVxdWVzdCBkZWNvZGluZy4KKyAgICAgICAgKiBT
aGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbToKKyAgICAgICAgKElQQzo6Y3Jl
YXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpl
eHRyYWN0RGljdGlvbmFyeVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6Y3JlYXRlQXJj
aGl2ZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpjcmVhdGVDRlVSTFJlcXVlc3RGcm9t
U2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpjcmVh
dGVOU1VSTFJlcXVlc3RGcm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmVu
Y29kZVBsYXRmb3JtRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKTogRGVsZXRlZC4K
KwogMjAyMS0wMi0yMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFVzZSBhZG9wdE5TKCkgYXMgc29vbiBhcyB3ZSBbW09iamNDbGFzcyBhbGxvY10gaW5pdF0gdG8g
YXZvaWQgbGVha3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0FyZ3Vt
ZW50Q29kZXJzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9Bcmd1bWVudENv
ZGVyc0NvY29hLm1tCmluZGV4IGJkM2FlYzMxYzMzZGI1N2Y2ZjgyMjdlMzU2OTFhYTNiODc0MGY4
N2EuLmM5YzE5ZWM0NTkzN2JkMDc2NGY0Yzc0NGZlMWNmODI4YzAyNjNjYmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0FyZ3VtZW50Q29kZXJzQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQXJndW1lbnRDb2RlcnNDb2NvYS5tbQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgsIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Niw2ICszNiw3IEBACiAjaW1wb3J0IDxDb3JlVGV4dC9DVEZvbnREZXNjcmlwdG9yLmg+CiAjaW1w
b3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4K
KyNpbXBvcnQgPHd0Zi9jZi9DRlVSTEV4dHJhcy5oPgogCiAjaWYgVVNFKEFQUEtJVCkKICNpbXBv
cnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KQEAgLTQ5LDI4ICs1MCw4NCBAQAogI2ltcG9ydCA8VUlL
aXQvVUlGb250RGVzY3JpcHRvci5oPgogI2VuZGlmCiAKLSNpZiBIQVZFKE5TRk9OVF9XSVRIX09Q
VElDQUxfU0laSU5HX0JVRykKK0BpbnRlcmZhY2UgV0tTZWN1cmVDb2RpbmdBcmNoaXZpbmdEZWxl
Z2F0ZSA6IE5TT2JqZWN0IDxOU0tleWVkQXJjaGl2ZXJEZWxlZ2F0ZSwgTlNLZXllZFVuYXJjaGl2
ZXJEZWxlZ2F0ZT4KK0BlbmQKIAotQGludGVyZmFjZSBXS1NlY3VyZUNvZGluZ0ZvbnRBdHRyaWJ1
dGVOb3JtYWxpemVyIDogTlNPYmplY3QgPE5TS2V5ZWRBcmNoaXZlckRlbGVnYXRlPgorQGludGVy
ZmFjZSBOU1VSTCAoTlNVUkxFeHRyYXNJbnRlcm5hbCkKKysgKE5TVVJMICopX1VSTFdpdGhEYXRh
OihOU0RhdGEgKilkYXRhIHJlbGF0aXZlVG9VUkw6KE5TVVJMICopYmFzZVVSTDsKIEBlbmQKIAot
QGltcGxlbWVudGF0aW9uIFdLU2VjdXJlQ29kaW5nRm9udEF0dHJpYnV0ZU5vcm1hbGl6ZXIKK0Bp
bnRlcmZhY2UgV0tFbmNvZGVkVVJMIDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5nPgorLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoVVJMOihOU1VSTCAqKXVybDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgTlNVUkwgKlVSTDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLU2VjdXJl
Q29kaW5nQXJjaGl2aW5nRGVsZWdhdGUKIAogLSAoaWQpYXJjaGl2ZXI6KE5TS2V5ZWRBcmNoaXZl
ciAqKWFyY2hpdmVyIHdpbGxFbmNvZGVPYmplY3Q6KGlkKW9iamVjdAogeworI2lmIEhBVkUoTlNG
T05UX1dJVEhfT1BUSUNBTF9TSVpJTkdfQlVHKQogICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xh
c3M6W05TRm9udCBjbGFzc11dKSB7CiAgICAgICAgIE5TRm9udCAqZm9udCA9IHN0YXRpY19jYXN0
PE5TRm9udCAqPihvYmplY3QpOwogICAgICAgICAvLyBSZWNyZWF0ZSBhbnkgc2VyaWFsaXplZCBm
b250cyBhZnRlciBub3JtYWxpemluZyB0aGUKICAgICAgICAgLy8gZm9udCBhdHRyaWJ1dGVzIHRv
IHdvcmsgYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS81MTY1Nzg4MD4uCiAgICAgICAgIHJldHVybiBX
ZWJLaXQ6OmZvbnRXaXRoQXR0cmlidXRlcyhmb250LmZvbnREZXNjcmlwdG9yLmZvbnRBdHRyaWJ1
dGVzLCAwKTsKICAgICB9CisjZW5kaWYKKworICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6
W05TVVJMIGNsYXNzXV0pCisgICAgICAgIHJldHVybiBbW1dLRW5jb2RlZFVSTCBhbGxvY10gaW5p
dFdpdGhVUkw6b2JqZWN0XTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKKy0gKGlkKXVuYXJj
aGl2ZXI6KE5TS2V5ZWRVbmFyY2hpdmVyICopdW5hcmNoaXZlciBkaWREZWNvZGVPYmplY3Q6KGlk
KW9iamVjdAoreworICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W1dLRW5jb2RlZFVSTCBj
bGFzc11dKQorICAgICAgICByZXR1cm4gKChXS0VuY29kZWRVUkwgKilvYmplY3QpLlVSTDsKIAog
ICAgIHJldHVybiBvYmplY3Q7CiB9CiAKIEBlbmQKIAotI2VuZGlmCitAaW1wbGVtZW50YXRpb24g
V0tFbmNvZGVkVVJMCisKKysgKEJPT0wpc3VwcG9ydHNTZWN1cmVDb2RpbmcgeworICAgIHJldHVy
biBZRVM7Cit9CisKKy0gKHZvaWQpZW5jb2RlV2l0aENvZGVyOihOU0NvZGVyICopY29kZXIKK3sK
KyAgICBXVEY6OlVSTENoYXJCdWZmZXIgdXJsQnl0ZXM7CisgICAgV1RGOjpnZXRVUkxCeXRlcygo
X19icmlkZ2UgQ0ZVUkxSZWYpX1VSTCwgdXJsQnl0ZXMpOworICAgIFtjb2RlciBlbmNvZGVCeXRl
czp1cmxCeXRlcy5kYXRhKCkgbGVuZ3RoOnVybEJ5dGVzLnNpemUoKV07Cit9CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvZGVyOihOU0NvZGVyICopY29kZXIKK3sKKyAgICBpZiAoc2VsZiA9
IFtzdXBlciBpbml0XSkgeworICAgICAgICBOU1VJbnRlZ2VyIGxlbmd0aDsKKyAgICAgICAgYXV0
byBieXRlcyA9ICh1aW50OF90ICopW2NvZGVyIGRlY29kZUJ5dGVzV2l0aFJldHVybmVkTGVuZ3Ro
OiZsZW5ndGhdOworICAgICAgICBpZiAoIWJ5dGVzKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgICAgICBfVVJMID0gW1tOU1VSTCBfVVJMV2l0aERhdGE6W05TRGF0YSBkYXRhV2l0aEJ5
dGVzTm9Db3B5OmJ5dGVzIGxlbmd0aDpsZW5ndGggZnJlZVdoZW5Eb25lOk5PXSByZWxhdGl2ZVRv
VVJMOm5pbF0gcmV0YWluXTsKKyAgICAgICAgaWYgKCFfVVJMKQorICAgICAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICB9CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoVVJMOihOU1VSTCAqKXVybAoreworICAgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKQor
ICAgICAgICBfVVJMID0gW3VybCByZXRhaW5dOworCisgICAgcmV0dXJuIHNlbGY7Cit9CitAZW5k
CiAKIG5hbWVzcGFjZSBJUEMgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0zNDYsMTcg
KzQwMywxMiBAQCBzdGF0aWMgdm9pZCBlbmNvZGVTZWN1cmVDb2RpbmdJbnRlcm5hbChFbmNvZGVy
JiBlbmNvZGVyLCBpZCA8TlNPYmplY3QsIE5TU2VjdXJlQwogewogICAgIGF1dG8gYXJjaGl2ZXIg
PSBhZG9wdE5TKFtbTlNLZXllZEFyY2hpdmVyIGFsbG9jXSBpbml0UmVxdWlyaW5nU2VjdXJlQ29k
aW5nOllFU10pOwogCi0jaWYgSEFWRShOU0ZPTlRfV0lUSF9PUFRJQ0FMX1NJWklOR19CVUcpCi0g
ICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS1NlY3VyZUNvZGluZ0ZvbnRBdHRyaWJ1dGVO
b3JtYWxpemVyIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tX
S1NlY3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW2FyY2hp
dmVyIHNldERlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKLSNlbmRpZgogCiAgICAgW2FyY2hpdmVy
IGVuY29kZU9iamVjdDpvYmplY3QgZm9yS2V5Ok5TS2V5ZWRBcmNoaXZlUm9vdE9iamVjdEtleV07
CiAgICAgW2FyY2hpdmVyIGZpbmlzaEVuY29kaW5nXTsKLQotI2lmIEhBVkUoTlNGT05UX1dJVEhf
T1BUSUNBTF9TSVpJTkdfQlVHKQogICAgIFthcmNoaXZlciBzZXREZWxlZ2F0ZTpuaWxdOwotI2Vu
ZGlmCiAKICAgICBlbmNvZGUoZW5jb2RlciwgKF9fYnJpZGdlIENGRGF0YVJlZilbYXJjaGl2ZXIg
ZW5jb2RlZERhdGFdKTsKIH0KQEAgLTM3Myw4ICs0MjUsMTUgQEAgc3RhdGljIE9wdGlvbmFsPFJl
dGFpblB0cjxpZD4+IGRlY29kZVNlY3VyZUNvZGluZ0ludGVybmFsKERlY29kZXImIGRlY29kZXIs
IE5TQXIKIAogICAgIGF1dG8gdW5hcmNoaXZlciA9IGFkb3B0TlMoW1tOU0tleWVkVW5hcmNoaXZl
ciBhbGxvY10gaW5pdEZvclJlYWRpbmdGcm9tRGF0YTooX19icmlkZ2UgTlNEYXRhICopZGF0YS5n
ZXQoKSBlcnJvcjpudWxscHRyXSk7CiAgICAgdW5hcmNoaXZlci5nZXQoKS5kZWNvZGluZ0ZhaWx1
cmVQb2xpY3kgPSBOU0RlY29kaW5nRmFpbHVyZVBvbGljeVJhaXNlRXhjZXB0aW9uOworCisgICAg
YXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS1NlY3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRl
IGFsbG9jXSBpbml0XSk7CisgICAgdW5hcmNoaXZlci5nZXQoKS5kZWxlZ2F0ZSA9IGRlbGVnYXRl
LmdldCgpOworCisgICAgYXV0byBhbGxvd2VkQ2xhc3NTZXQgPSBbTlNNdXRhYmxlU2V0IHNldFdp
dGhBcnJheTphbGxvd2VkQ2xhc3Nlc107CisgICAgW2FsbG93ZWRDbGFzc1NldCBhZGRPYmplY3Q6
V0tFbmNvZGVkVVJMLmNsYXNzXTsKKyAgICAKICAgICBAdHJ5IHsKLSAgICAgICAgaWQgcmVzdWx0
ID0gW3VuYXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzc2VzOltOU1NldCBzZXRXaXRoQXJyYXk6
YWxsb3dlZENsYXNzZXNdIGZvcktleTpOU0tleWVkQXJjaGl2ZVJvb3RPYmplY3RLZXldOworICAg
ICAgICBpZCByZXN1bHQgPSBbdW5hcmNoaXZlciBkZWNvZGVPYmplY3RPZkNsYXNzZXM6YWxsb3dl
ZENsYXNzU2V0IGZvcktleTpOU0tleWVkQXJjaGl2ZVJvb3RPYmplY3RLZXldOwogICAgICAgICBB
U1NFUlQoIXJlc3VsdCB8fCBbcmVzdWx0IGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woTlNT
ZWN1cmVDb2RpbmcpXSk7CiAgICAgICAgIHJldHVybiB7IHJlc3VsdCB9OwogICAgIH0gQGNhdGNo
IChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7CkBAIC0zODIsNiArNDQxLDcgQEAgc3RhdGljIE9w
dGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZVNlY3VyZUNvZGluZ0ludGVybmFsKERlY29kZXIm
IGRlY29kZXIsIE5TQXIKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9IEBmaW5h
bGx5IHsKICAgICAgICAgW3VuYXJjaGl2ZXIgZmluaXNoRGVjb2RpbmddOworICAgICAgICB1bmFy
Y2hpdmVyLmdldCgpLmRlbGVnYXRlID0gbmlsOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbQpp
bmRleCA3NmFmYjcyZmYyZmQ0Zjk3YjVjZjAxMzJlZWE5YjMzN2ZhNDRhYjQzLi4yYjZhNzU1ZGY3
MGY5MThmZDAwNDdjN2I2NzBiN2E0NmQxNjZiMjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRm9udC5oPgogI2ltcG9ydCA8V2ViQ29yZS9G
b250QXR0cmlidXRlcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2ltcG9ydCA8cGFsL3Nw
aS9jZi9Db3JlVGV4dFNQSS5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTU0Myw0
ICs1NDQsNTkgQEAgT3B0aW9uYWw8Rm9udFBsYXRmb3JtRGF0YT4gQXJndW1lbnRDb2RlcjxSZWY8
Rm9udD4+OjpkZWNvZGVQbGF0Zm9ybURhdGEoRGVjb2RlciYKICAgICByZXR1cm4gRm9udFBsYXRm
b3JtRGF0YShjdEZvbnQuZ2V0KCksIHNpemUudmFsdWUoKSwgc3ludGhldGljQm9sZC52YWx1ZSgp
LCBzeW50aGV0aWNPYmxpcXVlLnZhbHVlKCksIG9yaWVudGF0aW9uLnZhbHVlKCksIHdpZHRoVmFy
aWFudC52YWx1ZSgpLCB0ZXh0UmVuZGVyaW5nTW9kZS52YWx1ZSgpKTsKIH0KIAordm9pZCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNl
UmVxdWVzdCkKK3sKKyAgICBhdXRvIHJlcXVlc3RUb1NlcmlhbGl6ZSA9IHJldGFpblB0cihyZXNv
dXJjZVJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpE
b05vdFVwZGF0ZUhUVFBCb2R5KSk7CisKKyAgICBib29sIHJlcXVlc3RJc1ByZXNlbnQgPSByZXF1
ZXN0VG9TZXJpYWxpemU7CisgICAgZW5jb2RlciA8PCByZXF1ZXN0SXNQcmVzZW50OworCisgICAg
aWYgKCFyZXF1ZXN0SXNQcmVzZW50KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBkb24n
dCBzZW5kIEhUVFAgYm9keSBvdmVyIElQQyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLgorICAgIC8v
IEFsc28sIGl0J3Mgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBkbywgYXMgc3RyZWFtcyBjYW4gb25s
eSBiZSBjcmVhdGVkIGluIHByb2Nlc3MgdGhhdCBkb2VzIG5ldHdvcmtpbmcuCisgICAgaWYgKFty
ZXF1ZXN0VG9TZXJpYWxpemUgSFRUUEJvZHldIHx8IFtyZXF1ZXN0VG9TZXJpYWxpemUgSFRUUEJv
ZHlTdHJlYW1dKSB7CisgICAgICAgIGF1dG8gbXV0YWJsZVJlcXVlc3QgPSBhZG9wdE5TKFtyZXF1
ZXN0VG9TZXJpYWxpemUgbXV0YWJsZUNvcHldKTsKKyAgICAgICAgW211dGFibGVSZXF1ZXN0IHNl
dEhUVFBCb2R5Om5pbF07CisgICAgICAgIFttdXRhYmxlUmVxdWVzdCBzZXRIVFRQQm9keVN0cmVh
bTpuaWxdOworICAgICAgICByZXF1ZXN0VG9TZXJpYWxpemUgPSBXVEZNb3ZlKG11dGFibGVSZXF1
ZXN0KTsKKyAgICB9CisKKyAgICBJUEM6OmVuY29kZShlbmNvZGVyLCByZXF1ZXN0VG9TZXJpYWxp
emUuZ2V0KCkpOworCisgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QucmVxdWVzdGVyKCk7
CisgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QuaXNBcHBCb3VuZCgpOworfQorCitib29s
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1E
YXRhKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VS
ZXF1ZXN0KQoreworICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudDsKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlcXVlc3RJc1ByZXNlbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIXJlcXVlc3RJc1ByZXNlbnQpIHsKKyAgICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0gV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IGF1dG8gcmVxdWVzdCA9IElQQzo6ZGVjb2RlPE5TVVJMUmVxdWVzdD4oZGVjb2RlciwgTlNVUkxS
ZXF1ZXN0LmNsYXNzKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3RlciByZXF1ZXN0ZXI7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXF1ZXN0ZXIpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBib29sIGlzQXBwQm91bmQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc0Fw
cEJvdW5kKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzb3VyY2VSZXF1ZXN0ID0g
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QtPmdldCgpKTsKKyAgICByZXNvdXJjZVJl
cXVlc3Quc2V0UmVxdWVzdGVyKHJlcXVlc3Rlcik7CisgICAgcmVzb3VyY2VSZXF1ZXN0LnNldElz
QXBwQm91bmQoaXNBcHBCb3VuZCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzTWFjLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1
bWVudENvZGVyc01hYy5tbQppbmRleCAwZjYwNWZhZDUyMTcyNTE0MTBlMjVkN2JiYzkxY2IxM2M4
MTRlNTQ0Li5jNTk1MDY4YTZhNGM3N2QwNjEyODBhYTI1NzQ2NGQ2NmFhM2MxMDFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMu
bW0KQEAgLTQyLDI0NSArNDIsMTQgQEAKICNpbXBvcnQgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CiAj
aW1wb3J0IDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9T
REspCi0jaW5jbHVkZSA8V2ViS2l0QWRkaXRpb25zL1dlYkNvcmVBcmd1bWVudENvZGVyc01hY0Fk
ZGl0aW9ucy5oPgotI2VuZGlmCi0KICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VU
KQogI2ltcG9ydCA8V2ViQ29yZS9NZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4dC5oPgogI2ltcG9y
dCA8b2JqYy9ydW50aW1lLmg+CiAjaW1wb3J0IDxwYWwvY29jb2EvQVZGb3VuZGF0aW9uU29mdExp
bmsuaD4KICNlbmRpZgogCi0jaWZuZGVmIFdFQkNPUkVfQVJHVU1FTlRDT0RFUlNfTUFDX0RFQ09E
RV9BRERJVElPTlMKLSNkZWZpbmUgV0VCQ09SRV9BUkdVTUVOVENPREVSU19NQUNfREVDT0RFX0FE
RElUSU9OUwotI2VuZGlmCi0KLSNpZm5kZWYgV0VCQ09SRV9BUkdVTUVOVENPREVSU19NQUNfRU5D
T0RFX0FERElUSU9OUwotI2RlZmluZSBXRUJDT1JFX0FSR1VNRU5UQ09ERVJTX01BQ19FTkNPREVf
QURESVRJT05TCi0jZW5kaWYKLQogbmFtZXNwYWNlIElQQyB7CiAKLXN0YXRpYyBSZXRhaW5QdHI8
Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24o
Q0ZJbmRleCB2ZXJzaW9uLCBDRlR5cGVSZWYqIG9iamVjdHMsIENGSW5kZXggb2JqZWN0Q291bnQs
IENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3BlcnRpZXMsIENGTnVtYmVyUmVmIGV4cGVjdGVk
Q29udGVudExlbmd0aCwgQ0ZTdHJpbmdSZWYgbWltZVR5cGUsIENGVHlwZVJlZiB0b2tlbk51bGwp
Ci17Ci0gICAgYXV0byBhcmNoaXZlTGlzdEFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0
YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0K
LSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBvYmplY3RDb3VudDsgKytpKSB7Ci0gICAgICAg
IENGVHlwZVJlZiBvYmplY3QgPSBvYmplY3RzW2ldOwotICAgICAgICBpZiAob2JqZWN0KSB7Ci0g
ICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJjaGl2ZUxpc3RBcnJheS5nZXQoKSwgb2Jq
ZWN0KTsKLSAgICAgICAgICAgIENGUmVsZWFzZShvYmplY3QpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gQXBwZW5kIG91ciB0b2tlbiBudWxsIHJlcHJlc2VudGF0aW9uLgotICAg
ICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFyY2hpdmVMaXN0QXJyYXkuZ2V0KCksIHRva2Vu
TnVsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdENG
KENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5
cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNr
cykpOwotCi0gICAgYXV0byB2ZXJzaW9uTnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwgJnZlcnNpb24pKTsKLSAg
ICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigidmVyc2lvbiIp
LCB2ZXJzaW9uTnVtYmVyLmdldCgpKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9u
YXJ5LmdldCgpLCBDRlNUUigiYXJjaGl2ZUxpc3QiKSwgYXJjaGl2ZUxpc3RBcnJheS5nZXQoKSk7
Ci0KLSAgICBpZiAocHJvdG9jb2xQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVNl
dFZhbHVlKGRpY3Rpb25hcnkuZ2V0KCksIENGU1RSKCJwcm90b2NvbFByb3BlcnRpZXMiKSwgcHJv
dG9jb2xQcm9wZXJ0aWVzKTsKLSAgICAgICAgQ0ZSZWxlYXNlKHByb3RvY29sUHJvcGVydGllcyk7
Ci0gICAgfQotCi0gICAgaWYgKGV4cGVjdGVkQ29udGVudExlbmd0aCkgewotICAgICAgICBDRkRp
Y3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigiZXhwZWN0ZWRDb250ZW50
TGVuZ3RoIiksIGV4cGVjdGVkQ29udGVudExlbmd0aCk7Ci0gICAgICAgIENGUmVsZWFzZShleHBl
Y3RlZENvbnRlbnRMZW5ndGgpOwotICAgIH0KLQotICAgIGlmIChtaW1lVHlwZSkgewotICAgICAg
ICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigibWltZVR5cGUi
KSwgbWltZVR5cGUpOwotICAgICAgICBDRlJlbGVhc2UobWltZVR5cGUpOwotICAgIH0KLQotICAg
IENGQWxsb2NhdG9yRGVhbGxvY2F0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBvYmplY3RzKTsKLQot
ICAgIHJldHVybiBkaWN0aW9uYXJ5OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+
IGJvb2wgZXh0cmFjdERpY3Rpb25hcnlWYWx1ZShDRkRpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwg
Q0ZTdHJpbmdSZWYga2V5LCBWYWx1ZVR5cGUqIHJlc3VsdCkKLXsKLSAgICBhdXRvIHVudHlwZWRW
YWx1ZSA9IENGRGljdGlvbmFyeUdldFZhbHVlKGRpY3Rpb25hcnksIGtleSk7Ci0gICAgYXV0byB2
YWx1ZSA9IGR5bmFtaWNfY2ZfY2FzdDxWYWx1ZVR5cGU+KHVudHlwZWRWYWx1ZSk7Ci0gICAgaWYg
KHVudHlwZWRWYWx1ZSAmJiAhdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
cmVzdWx0KQotICAgICAgICAqcmVzdWx0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXN0YXRpYyBib29sIGNyZWF0ZUFyY2hpdmVMaXN0KENGRGljdGlvbmFyeVJlZiByZXByZXNlbnRh
dGlvbiwgQ0ZUeXBlUmVmIHRva2VuTnVsbCwgQ0ZJbmRleCogdmVyc2lvbiwgQ0ZUeXBlUmVmKiog
b2JqZWN0cywgQ0ZJbmRleCogb2JqZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiogcHJvdG9jb2xQ
cm9wZXJ0aWVzLCBDRk51bWJlclJlZiogZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBDRlN0cmluZ1Jl
ZiogbWltZVR5cGUpCi17Ci0gICAgYXV0byB2ZXJzaW9uTnVtYmVyID0gZHluYW1pY19jZl9jYXN0
PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIo
InZlcnNpb24iKSkpOwotICAgIGlmICghdmVyc2lvbk51bWJlcikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKCFDRk51bWJlckdldFZhbHVlKHZlcnNpb25OdW1iZXIsIGtDRk51bWJl
ckNGSW5kZXhUeXBlLCB2ZXJzaW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0
byBhcmNoaXZlTGlzdEFycmF5ID0gZHluYW1pY19jZl9jYXN0PENGQXJyYXlSZWY+KENGRGljdGlv
bmFyeUdldFZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigiYXJjaGl2ZUxpc3QiKSkpOwotICAg
IGlmICghYXJjaGl2ZUxpc3RBcnJheSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0
byBhcmNoaXZlTGlzdEFycmF5Q291bnQgPSBDRkFycmF5R2V0Q291bnQoYXJjaGl2ZUxpc3RBcnJh
eSk7Ci0gICAgaWYgKCFpc0luQm91bmRzPHNpemVfdD4oYXJjaGl2ZUxpc3RBcnJheUNvdW50KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBidWZmZXJTaXplID0gQ2hlY2tlZFNp
emUoc2l6ZW9mKENGVHlwZVJlZikpICogc3RhdGljX2Nhc3Q8c2l6ZV90PihhcmNoaXZlTGlzdEFy
cmF5Q291bnQpOwotICAgIGlmIChidWZmZXJTaXplLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFleHRyYWN0RGljdGlvbmFyeVZhbHVlKHJlcHJlc2Vu
dGF0aW9uLCBDRlNUUigicHJvdG9jb2xQcm9wZXJ0aWVzIiksIHByb3RvY29sUHJvcGVydGllcykp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWV4dHJhY3REaWN0aW9uYXJ5VmFsdWUo
cmVwcmVzZW50YXRpb24sIENGU1RSKCJleHBlY3RlZENvbnRlbnRMZW5ndGgiKSwgZXhwZWN0ZWRD
b250ZW50TGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZXh0cmFjdERp
Y3Rpb25hcnlWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoIm1pbWVUeXBlIiksIG1pbWVUeXBl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgKm9iamVjdENvdW50ID0gYXJjaGl2ZUxp
c3RBcnJheUNvdW50OwotICAgICpvYmplY3RzID0gc3RhdGljX2Nhc3Q8Q0ZUeXBlUmVmKj4oZmFz
dE1hbGxvYyhidWZmZXJTaXplLnVuc2FmZUdldCgpKSk7Ci0KLSAgICBDRkFycmF5R2V0VmFsdWVz
KGFyY2hpdmVMaXN0QXJyYXksIENGUmFuZ2VNYWtlKDAsICpvYmplY3RDb3VudCksICpvYmplY3Rz
KTsKLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCAqb2JqZWN0Q291bnQ7ICsraSkgewotICAg
ICAgICBpZiAoKCpvYmplY3RzKVtpXSA9PSB0b2tlbk51bGwpCi0gICAgICAgICAgICAoKm9iamVj
dHMpW2ldID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGlj
IFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0
aW9uKENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QsIENGVHlwZVJlZiB0b2tlbk51bGwpCi17Ci0g
ICAgQ0ZJbmRleCB2ZXJzaW9uOwotICAgIENGVHlwZVJlZiogb2JqZWN0czsKLSAgICBDRkluZGV4
IG9iamVjdENvdW50OwotICAgIENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3BlcnRpZXM7Ci0K
LSAgICAvLyBGSVhNRSAoMTI4ODk1MTgpOiBEbyBub3Qgc2VyaWFsaXplIEhUVFAgbWVzc2FnZSBi
b2R5LgotICAgIC8vIDEuIEl0IGNhbiBiZSBsYXJnZSBhbmQgdGh1cyBjb3N0bHkgdG8gc2VuZCBh
Y3Jvc3MuCi0gICAgLy8gMi4gSXQgaXMgbWlzbGVhZGluZyB0byBwcm92aWRlIGEgYm9keSB3aXRo
IHNvbWUgcmVxdWVzdHMsIHdoaWxlIG90aGVycyB1c2UgYm9keSBzdHJlYW1zLCB3aGljaCBjYW5u
b3QgYmUgc2VyaWFsaXplZCBhdCBhbGwuCi0KLSAgICBfQ0ZVUkxSZXF1ZXN0Q3JlYXRlQXJjaGl2
ZUxpc3Qoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY2ZSZXF1ZXN0LCAmdmVyc2lvbiwgJm9iamVjdHMs
ICZvYmplY3RDb3VudCwgJnByb3RvY29sUHJvcGVydGllcyk7Ci0KLSAgICAvLyBUaGlzIHdpbGwg
ZGVhbGxvY2F0ZSB0aGUgcGFzc2VkIGluIGFyZ3VtZW50cy4KLSAgICByZXR1cm4gY3JlYXRlU2Vy
aWFsaXphYmxlUmVwcmVzZW50YXRpb24odmVyc2lvbiwgb2JqZWN0cywgb2JqZWN0Q291bnQsIHBy
b3RvY29sUHJvcGVydGllcywgbnVsbHB0ciwgbnVsbHB0ciwgdG9rZW5OdWxsKTsKLX0KLQotc3Rh
dGljIFJldGFpblB0cjxDRlVSTFJlcXVlc3RSZWY+IGNyZWF0ZUNGVVJMUmVxdWVzdEZyb21TZXJp
YWxpemFibGVSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENG
VHlwZVJlZiB0b2tlbk51bGwpCi17Ci0gICAgQ0ZJbmRleCB2ZXJzaW9uOwotICAgIENGVHlwZVJl
Ziogb2JqZWN0czsKLSAgICBDRkluZGV4IG9iamVjdENvdW50OwotICAgIENGRGljdGlvbmFyeVJl
ZiBwcm90b2NvbFByb3BlcnRpZXM7Ci0KLSAgICBpZiAoIWNyZWF0ZUFyY2hpdmVMaXN0KHJlcHJl
c2VudGF0aW9uLCB0b2tlbk51bGwsICZ2ZXJzaW9uLCAmb2JqZWN0cywgJm9iamVjdENvdW50LCAm
cHJvdG9jb2xQcm9wZXJ0aWVzLCBudWxscHRyLCBudWxscHRyKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBhdXRvIGNmUmVxdWVzdCA9IGFkb3B0Q0YoX0NGVVJMUmVxdWVzdENyZWF0
ZUZyb21BcmNoaXZlTGlzdChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB2ZXJzaW9uLCBvYmplY3RzLCBv
YmplY3RDb3VudCwgcHJvdG9jb2xQcm9wZXJ0aWVzKSk7Ci0gICAgZmFzdEZyZWUob2JqZWN0cyk7
Ci0gICAgcmV0dXJuIFdURk1vdmUoY2ZSZXF1ZXN0KTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKE5TVVJMUmVx
dWVzdCAqcmVxdWVzdCwgQ0ZUeXBlUmVmIHRva2VuTnVsbCkKLXsKLSAgICByZXR1cm4gY3JlYXRl
U2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oW3JlcXVlc3QgX0NGVVJMUmVxdWVzdF0sIHRva2Vu
TnVsbCk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiBjcmVhdGVOU1VSTFJl
cXVlc3RGcm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIHJlcHJl
c2VudGF0aW9uLCBDRlR5cGVSZWYgdG9rZW5OdWxsKQotewotICAgIGF1dG8gY2ZSZXF1ZXN0ID0g
Y3JlYXRlQ0ZVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKHJlcHJlc2Vu
dGF0aW9uLCB0b2tlbk51bGwpOwotICAgIGlmICghY2ZSZXF1ZXN0KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAKLSAgICByZXR1cm4gYWRvcHROUyhbW05TVVJMUmVxdWVzdCBhbGxvY10g
X2luaXRXaXRoQ0ZVUkxSZXF1ZXN0OmNmUmVxdWVzdC5nZXQoKV0pOwotfQotCi12b2lkIEFyZ3Vt
ZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VS
ZXF1ZXN0KQotewotICAgIFJldGFpblB0cjxOU1VSTFJlcXVlc3Q+IHJlcXVlc3RUb1NlcmlhbGl6
ZSA9IHJlc291cmNlUmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQ
b2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpOwotCi0gICAgYm9vbCByZXF1ZXN0SXNQcmVzZW50
ID0gcmVxdWVzdFRvU2VyaWFsaXplOwotICAgIGVuY29kZXIgPDwgcmVxdWVzdElzUHJlc2VudDsK
LQotICAgIGlmICghcmVxdWVzdElzUHJlc2VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
V2UgZG9uJ3Qgc2VuZCBIVFRQIGJvZHkgb3ZlciBJUEMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4K
LSAgICAvLyBBbHNvLCBpdCdzIG5vdCBhbHdheXMgcG9zc2libGUgdG8gZG8sIGFzIHN0cmVhbXMg
Y2FuIG9ubHkgYmUgY3JlYXRlZCBpbiBwcm9jZXNzIHRoYXQgZG9lcyBuZXR3b3JraW5nLgotICAg
IGlmIChbcmVxdWVzdFRvU2VyaWFsaXplIEhUVFBCb2R5XSB8fCBbcmVxdWVzdFRvU2VyaWFsaXpl
IEhUVFBCb2R5U3RyZWFtXSkgewotICAgICAgICByZXF1ZXN0VG9TZXJpYWxpemUgPSBhZG9wdE5T
KFtyZXF1ZXN0VG9TZXJpYWxpemUgbXV0YWJsZUNvcHldKTsKLSAgICAgICAgWyhOU011dGFibGVV
UkxSZXF1ZXN0ICopcmVxdWVzdFRvU2VyaWFsaXplIHNldEhUVFBCb2R5Om5pbF07Ci0gICAgICAg
IFsoTlNNdXRhYmxlVVJMUmVxdWVzdCAqKXJlcXVlc3RUb1NlcmlhbGl6ZSBzZXRIVFRQQm9keVN0
cmVhbTpuaWxdOwotICAgIH0KLQotICAgIGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0ZVNlcmlhbGl6
YWJsZVJlcHJlc2VudGF0aW9uKHJlcXVlc3RUb1NlcmlhbGl6ZS5nZXQoKSwgSVBDOjp0b2tlbk51
bGxwdHJUeXBlUmVmKCkpOwotICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIGRpY3Rpb25hcnkuZ2V0
KCkpOwotCi0gICAgV0VCQ09SRV9BUkdVTUVOVENPREVSU19NQUNfRU5DT0RFX0FERElUSU9OUwot
Ci0gICAgLy8gVGhlIGZhbGxiYWNrIGFycmF5IGlzIHBhcnQgb2YgTlNVUkxSZXF1ZXN0LCBidXQg
aXQgaXMgbm90IGVuY29kZWQgYnkgV0tOU1VSTFJlcXVlc3RDcmVhdGVTZXJpYWxpemFibGVSZXBy
ZXNlbnRhdGlvbi4KLSAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXNwb25zZUNvbnRl
bnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSgpOwotICAgIGVuY29kZXIgPDwgcmVz
b3VyY2VSZXF1ZXN0LnJlcXVlc3RlcigpOwotICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0
LmNhY2hlUG9saWN5KCk7Ci0gICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QuaXNBcHBCb3Vu
ZCgpOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6
ZGVjb2RlUGxhdGZvcm1EYXRhKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQotewotICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudDsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVlc3RJc1ByZXNlbnQpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoIXJlcXVlc3RJc1ByZXNlbnQpIHsKLSAgICAgICAgcmVzb3VyY2VS
ZXF1ZXN0ID0gV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGRpY3Rpb25hcnk7Ci0g
ICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBkaWN0aW9uYXJ5KSB8fCAhZGljdGlvbmFyeSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBuc1VSTFJlcXVlc3QgPSBjcmVhdGVO
U1VSTFJlcXVlc3RGcm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oZGljdGlvbmFyeS5nZXQo
KSwgSVBDOjp0b2tlbk51bGxwdHJUeXBlUmVmKCkpOwotICAgIGlmICghbnNVUkxSZXF1ZXN0KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBXRUJDT1JFX0FSR1VNRU5UQ09ERVJTX01BQ19E
RUNPREVfQURESVRJT05TCi0KLSAgICByZXNvdXJjZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QobnNVUkxSZXF1ZXN0LmdldCgpKTsKLSAgICAKLSAgICBWZWN0b3I8U3RyaW5nPiBy
ZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFj
a0FycmF5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzb3VyY2VSZXF1ZXN0LnNl
dFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KAotICAgICAg
ICByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkg
PiAwID8gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMF0g
OiBTdHJpbmcoKSwKLSAgICAgICAgcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0Zh
bGxiYWNrQXJyYXkuc2l6ZSgpID4gMSA/IHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2Rp
bmdGYWxsYmFja0FycmF5WzFdIDogU3RyaW5nKCksCi0gICAgICAgIHJlc3BvbnNlQ29udGVudERp
c3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnNpemUoKSA+IDIgPyByZXNwb25zZUNvbnRl
bnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVsyXSA6IFN0cmluZygpCi0gICAgKTsK
LQotICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVlc3RlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXNvdXJjZVJlcXVlc3Quc2V0UmVxdWVzdGVyKHJlcXVlc3Rlcik7Ci0KLSAgICBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBjYWNoZVBvbGljeTsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGNhY2hlUG9saWN5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJl
c291cmNlUmVxdWVzdC5zZXRDYWNoZVBvbGljeShjYWNoZVBvbGljeSk7Ci0KLSAgICBib29sIGlz
QXBwQm91bmQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc0FwcEJvdW5kKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJlc291cmNlUmVxdWVzdC5zZXRJc0FwcEJvdW5kKGlzQXBwQm91
bmQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCiB7CiAgICAgZW5jb2RlciA8PCBj
ZXJ0aWZpY2F0ZUluZm8udHlwZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDRhZWQ2OWI0ZDU3NjE2YWE4ZjM1ZWU4MDliZGY3Mjk4M2RjNjMz
ODkuLmM1Njk5MWM5MGRmZGJlNDg2OTJlMTgxNDUwOGVhNGNiMmU3MDA0YTIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAor
MjAyMS0wMi0yMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAg
ICBTZXJpYWxpemUgTlNVUkxSZXF1ZXN0IChyYXRoZXIgdGhhbiBDRlVSTFJlcXVlc3QpIGluIElQ
QworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMTQ1
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NDUwMDk2Mz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlciBhbmQgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICBBZGQgYSBuZXcg
dGVzdCB0byBlbnN1cmUgd2UgY2FuIHN1Y2Nlc3NmdWxseSBsb2FkIFVSTHMgd2l0aCBhY2NlbnRl
ZCBjaGFyYWN0ZXJzLAorICAgICAgICBhbmQgdG8gdGVzdCB0aGUgdXBkYXRlZCBJUEMgc2VyaWFs
aXphdGlvbiBmb3IgTlNVUkxSZXF1ZXN0LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQvQS8zMDMvMjQ3LzMwMy8yNDNvLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3TG9hZEFQSXMubW06CisgICAgICAg
IChURVNUKToKKwogMjAyMS0wMi0yMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFVzZSBhZG9wdE5TKCkgYXMgc29vbiBhcyB3ZSBbW09iamNDbGFzcyBhbGxvY10g
aW5pdF0gdG8gYXZvaWQgbGVha3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3TG9hZEFQSXMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0xvYWRBUElzLm1tCmluZGV4IGJlZDUwMGVhMzM5
NDVhODFlNjhkODg4MzdmYTkwYWY3Y2U1NzIwOGEuLjVmOWE5ZmExNmVjMzc3ODA2NDVmNmIzZjEx
ZjBiNGNmMWExOTAxNmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tXZWJWaWV3TG9hZEFQSXMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbQpAQCAtMTMyLDMgKzEzMiw0MSBA
QCBURVNUKFdLV2ViVmlldywgTG9hZFNpbXVsYXRlZFJlcXVlc3RVcGRhdGVzQmFja0ZvcndhcmRM
aXN0KQogICAgIEVYUEVDVF9UUlVFKCFsaXN0LmZvcndhcmRJdGVtKTsKICAgICBFWFBFQ1RfV0tf
U1RSRVEoZXhhbXBsZVVSTFN0cmluZywgW2xpc3QuYmFja0l0ZW0uVVJMIGFic29sdXRlU3RyaW5n
XSk7CiB9CisKK1RFU1QoV0tXZWJWaWV3LCBMb2FkQWNjZW50ZWRGaWxlUmVxdWVzdCkKK3sKKyAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRv
cHROUyhbW1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBbd2ViVmll
dyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgY29uc3QgVUlu
dDggYnl0ZXNbNl0gPSB7ICdBJywgMHhDMywgMHhBNywgMHhDMywgMHhBMywgJ28nIH07CisgICAg
YXV0byBmaWxlTmFtZSA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhCeXRlczpi
eXRlcyBsZW5ndGg6NiBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pOworCisgICAgLy8g
VGhpcyBhdm9pZHMgaGF2aW5nIHRvIGFkZCB1bmljb2RlIGZpbGVuYW1lcyB0byBnaXQuCisgICAg
TlNVUkwgKm9yaWdpbmFsRmlsZSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3Vy
Y2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2Vi
S2l0QVBJLnJlc291cmNlcyJdOworICAgIEVYUEVDVF9OT1RfTlVMTChvcmlnaW5hbEZpbGUpOwor
CisgICAgTlNTdHJpbmcgKnRlc3REaXJlY3RvcnlTdHJpbmcgPSBbTlNUZW1wb3JhcnlEaXJlY3Rv
cnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6W1tOU1VVSUQgVVVJRF0gVVVJRFN0
cmluZ11dOworICAgIE5TVVJMICp0ZXN0RGlyZWN0b3J5ID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0
aDogdGVzdERpcmVjdG9yeVN0cmluZ107CisKKyAgICBOU1N0cmluZyAqdGVzdEZpbGVTdHJpbmcg
PSBbW3Rlc3REaXJlY3RvcnlTdHJpbmcgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OmZp
bGVOYW1lLmdldCgpXSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhFeHRlbnNpb246QCJodG1sIl07Cisg
ICAgTlNVUkwgKnRlc3RGaWxlID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDp0ZXN0RmlsZVN0cmlu
Z107CisKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVS
TDp0ZXN0RmlsZSBlcnJvcjpuaWxdOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdl
cl0gcmVtb3ZlSXRlbUF0VVJMOnRlc3REaXJlY3RvcnkgZXJyb3I6bmlsXTsKKworICAgIFtbTlNG
aWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRVUkw6dGVzdERpcmVj
dG9yeSB3aXRoSW50ZXJtZWRpYXRlRGlyZWN0b3JpZXM6WUVTIGF0dHJpYnV0ZXM6bmlsIGVycm9y
Om5pbF07CisKKyAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICBbW05TRmlsZU1hbmFnZXIg
ZGVmYXVsdE1hbmFnZXJdIGNvcHlJdGVtQXRVUkw6b3JpZ2luYWxGaWxlIHRvVVJMOnRlc3RGaWxl
IGVycm9yOiZlcnJvcl07CisgICAgRVhQRUNUX05VTEwoZXJyb3IpOworICAgIAorICAgIE5TVVJM
UmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdEZpbGVd
OworICAgIFt3ZWJWaWV3IGxvYWRGaWxlUmVxdWVzdDpyZXF1ZXN0IGFsbG93aW5nUmVhZEFjY2Vz
c1RvVVJMOnRlc3RGaWxlLlVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07CisgICAgW2Rl
bGVnYXRlIHdhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
d2ViVmlldy5nZXQoKS5fcmVzb3VyY2VEaXJlY3RvcnlVUkwucGF0aCwgdGVzdEZpbGUuVVJMQnlE
ZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50LnBhdGgpOworCisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRl
ZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGVzdEZpbGUgZXJyb3I6bmlsXTsKKyAgICBb
W05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDp0ZXN0RGlyZWN0
b3J5IGVycm9yOm5pbF07Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421417</attachid>
            <date>2021-02-24 09:50:58 -0800</date>
            <delta_ts>2021-02-24 11:23:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222145-20210224095057.patch</filename>
            <type>text/plain</type>
            <size>31317</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMjc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGViNTc5NDQ4Yjk1YjFjZTJl
MjQwNjI3NzU3ZDAyYWM0Mjg2MjkzZmQuLmJhYzJmYjRhMGZkOWVjNDA0YmJkOGJkMmQwYWQ1MGI5
ZThjMjE1NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMjEtMDItMjMgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVx
dWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIEFs
ZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5nIGxheW91dCBhbmQg
V2ViS2l0QVBJIHRlc3RzLgorCisgICAgICAgIFJldmlzZSBJUEMgc2VyaWFsaXphdGlvbiBzbyB0
aGF0IE5TVVJMQ29ubmVjdGlvbiAobW9kZXJuKSBDb2NvYSBidWlsZHMgc2VyaWFsaXplIHRoZQor
ICAgICAgICBOU1VSTFJlcXVlc3Qgb2JqZWN0LCByYXRoZXIgdGhhbiBicmlkZ2luZyB0byBDRlVS
TFJlcXVlc3QgYW5kIHNlcmlhbGl6aW5nIHRoYXQuIFRoaXMKKyAgICAgICAgZW5zdXJlcyB0aGF0
IHRoZSBmdWxsIHNldCBvZiBOU1VSTFJlcXVlc3QgZmVhdHVyZXMgYXJlIGFjY3VyYXRlbHkgcmVj
b25zdGl0dXRlZCBvbiB0aGUKKyAgICAgICAgcmVjZWl2aW5nIHNpZGUgb2YgdGhlIGNvbm5lY3Rp
b24uCisKKyAgICAgICAgQmVjYXVzZSBOU1VSTCBzZXJpYWxpemF0aW9uIGRvZXNuJ3QgaGFuZGxl
IHNvbWUgZW5jb2RlZCBwYXJhbWV0ZXJzIHByb3Blcmx5LCB3ZSBpbXBsZW1lbnQKKyAgICAgICAg
YW4gYXJjaGl2aW5nIGRlbGVnYXRlIHRvIGFyY2hpdmUgdGhlIFVSTCBsaWtlIHdlIGRvIGZvciBD
RlVSTC4KKworICAgICAgICAqIFNoYXJlZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tOgor
ICAgICAgICAoLVtXS1NlY3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlIGFyY2hpdmVyOndpbGxF
bmNvZGVPYmplY3Q6XSk6IEFkZGVkLgorICAgICAgICAoLVtXS1NlY3VyZUNvZGluZ0FyY2hpdmlu
Z0RlbGVnYXRlIHVuYXJjaGl2ZXI6ZGlkRGVjb2RlT2JqZWN0Ol0pOiBBZGRlZC4KKyAgICAgICAg
KCtbV0tFbmNvZGVkVVJMIHN1cHBvcnRzU2VjdXJlQ29kaW5nXSk6IEFkZGVkLgorICAgICAgICAo
LVtXS0VuY29kZWRVUkwgZW5jb2RlV2l0aENvZGVyOl0pOiBBZGRlZC4KKyAgICAgICAgKC1bV0tF
bmNvZGVkVVJMIGluaXRXaXRoQ29kZXI6XSk6IEFkZGVkLgorICAgICAgICAoLVtXS0VuY29kZWRV
UkwgaW5pdFdpdGhVUkw6XSk6IEFkZGVkLgorICAgICAgICAoSVBDOjplbmNvZGVTZWN1cmVDb2Rp
bmdJbnRlcm5hbCk6IFVwZGF0ZSB0byB1c2UgbmV3IGRlbGVnYXRlLgorICAgICAgICAoSVBDOjpk
ZWNvZGVTZWN1cmVDb2RpbmdJbnRlcm5hbCk6IERpdHRvLgorICAgICAgICAoLVtXS1NlY3VyZUNv
ZGluZ0ZvbnRBdHRyaWJ1dGVOb3JtYWxpemVyIGFyY2hpdmVyOndpbGxFbmNvZGVPYmplY3Q6XSk6
IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0Nv
Y29hLm1tOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YSk6IEFkZCBOU1VSTFJlcXVlc3QgZW5jb2RpbmcuCisg
ICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVj
b2RlUGxhdGZvcm1EYXRhKTogQWRkIE5TVVJMUmVxdWVzdCBkZWNvZGluZy4KKyAgICAgICAgKiBT
aGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbToKKyAgICAgICAgKElQQzo6Y3Jl
YXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpl
eHRyYWN0RGljdGlvbmFyeVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6Y3JlYXRlQXJj
aGl2ZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpjcmVhdGVDRlVSTFJlcXVlc3RGcm9t
U2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpjcmVh
dGVOU1VSTFJlcXVlc3RGcm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmVu
Y29kZVBsYXRmb3JtRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKTogRGVsZXRlZC4K
KwogMjAyMS0wMi0yMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFVzZSBhZG9wdE5TKCkgYXMgc29vbiBhcyB3ZSBbW09iamNDbGFzcyBhbGxvY10gaW5pdF0gdG8g
YXZvaWQgbGVha3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0FyZ3Vt
ZW50Q29kZXJzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9Bcmd1bWVudENv
ZGVyc0NvY29hLm1tCmluZGV4IGJkM2FlYzMxYzMzZGI1N2Y2ZjgyMjdlMzU2OTFhYTNiODc0MGY4
N2EuLjU1NmU1ZWViZmUwZjU3OWQ5OWQ5MzA5NjAxN2NmZDk4Y2RkYjEzMmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0FyZ3VtZW50Q29kZXJzQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQXJndW1lbnRDb2RlcnNDb2NvYS5tbQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgsIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Niw2ICszNiw4IEBACiAjaW1wb3J0IDxDb3JlVGV4dC9DVEZvbnREZXNjcmlwdG9yLmg+CiAjaW1w
b3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4K
KyNpbXBvcnQgPHd0Zi9jZi9DRlVSTEV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL2NvY29hL05TVVJM
RXh0cmFzLmg+CiAKICNpZiBVU0UoQVBQS0lUKQogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5o
PgpAQCAtNDksMjggKzUxLDk1IEBACiAjaW1wb3J0IDxVSUtpdC9VSUZvbnREZXNjcmlwdG9yLmg+
CiAjZW5kaWYKIAotI2lmIEhBVkUoTlNGT05UX1dJVEhfT1BUSUNBTF9TSVpJTkdfQlVHKQorQGlu
dGVyZmFjZSBXS1NlY3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlIDogTlNPYmplY3QgPE5TS2V5
ZWRBcmNoaXZlckRlbGVnYXRlLCBOU0tleWVkVW5hcmNoaXZlckRlbGVnYXRlPgorQGVuZAogCi1A
aW50ZXJmYWNlIFdLU2VjdXJlQ29kaW5nRm9udEF0dHJpYnV0ZU5vcm1hbGl6ZXIgOiBOU09iamVj
dCA8TlNLZXllZEFyY2hpdmVyRGVsZWdhdGU+CitAaW50ZXJmYWNlIFdLRW5jb2RlZFVSTCA6IE5T
T2JqZWN0IDxOU1NlY3VyZUNvZGluZz4KKy0gKGluc3RhbmNldHlwZSBfTnVsbGFibGUpaW5pdFdp
dGhVUkw6KE5TVVJMICpfTnVsbGFibGUpdXJsOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5LCBudWxsYWJsZSkgTlNVUkwgKnVybDsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIFdLU2Vj
dXJlQ29kaW5nRm9udEF0dHJpYnV0ZU5vcm1hbGl6ZXIKK0BpbXBsZW1lbnRhdGlvbiBXS1NlY3Vy
ZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlCiAKLS0gKGlkKWFyY2hpdmVyOihOU0tleWVkQXJjaGl2
ZXIgKilhcmNoaXZlciB3aWxsRW5jb2RlT2JqZWN0OihpZClvYmplY3QKKy0gKGlkIF9OdWxsYWJs
ZSlhcmNoaXZlcjooTlNLZXllZEFyY2hpdmVyICpfTm9ubnVsbClhcmNoaXZlciB3aWxsRW5jb2Rl
T2JqZWN0OihpZCBfTm9ubnVsbClvYmplY3QKIHsKLSAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNs
YXNzOltOU0ZvbnQgY2xhc3NdXSkgewotICAgICAgICBOU0ZvbnQgKmZvbnQgPSBzdGF0aWNfY2Fz
dDxOU0ZvbnQgKj4ob2JqZWN0KTsKKyNpZiBIQVZFKE5TRk9OVF9XSVRIX09QVElDQUxfU0laSU5H
X0JVRykKKyAgICBpZiAoYXV0byAqZm9udCA9IGR5bmFtaWNfb2JqY19jYXN0PE5TRm9udD4ob2Jq
ZWN0KSkgewogICAgICAgICAvLyBSZWNyZWF0ZSBhbnkgc2VyaWFsaXplZCBmb250cyBhZnRlciBu
b3JtYWxpemluZyB0aGUKICAgICAgICAgLy8gZm9udCBhdHRyaWJ1dGVzIHRvIHdvcmsgYXJvdW5k
IDxyZGFyOi8vcHJvYmxlbS81MTY1Nzg4MD4uCiAgICAgICAgIHJldHVybiBXZWJLaXQ6OmZvbnRX
aXRoQXR0cmlidXRlcyhmb250LmZvbnREZXNjcmlwdG9yLmZvbnRBdHRyaWJ1dGVzLCAwKTsKICAg
ICB9CisjZW5kaWYKKworICAgIGlmIChhdXRvICp1cmwgPSBkeW5hbWljX29iamNfY2FzdDxOU1VS
TD4ob2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIFtbW1dLRW5jb2RlZFVSTCBhbGxvY10gaW5pdFdp
dGhVUkw6dXJsXSBhdXRvcmVsZWFzZV07CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCistIChp
ZCBfTnVsbGFibGUpdW5hcmNoaXZlcjooTlNLZXllZFVuYXJjaGl2ZXIgKiBfTm9ubnVsbCl1bmFy
Y2hpdmVyIGRpZERlY29kZU9iamVjdDooaWQgX051bGxhYmxlKSBOU19SRUxFQVNFU19BUkdVTUVO
VCBvYmplY3QgTlNfUkVUVVJOU19SRVRBSU5FRAoreworICAgIGlmIChhdXRvICplbmNvZGVkVVJM
ID0gZHluYW1pY19vYmpjX2Nhc3Q8V0tFbmNvZGVkVVJMPihvYmplY3QpKSB7CisgICAgICAgIGF1
dG8gdXJsID0gcmV0YWluUHRyKGVuY29kZWRVUkwudXJsKTsKKyAgICAgICAgW2VuY29kZWRVUkwg
cmVsZWFzZV07CisgICAgICAgIHJldHVybiB1cmwubGVha1JlZigpOworICAgIH0KIAogICAgIHJl
dHVybiBvYmplY3Q7CiB9CiAKIEBlbmQKIAotI2VuZGlmCitAaW1wbGVtZW50YXRpb24gV0tFbmNv
ZGVkVVJMIHsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IG1fdXJsOworfQorCistIChOU1VSTCAqX051
bGxhYmxlKXVybAoreworICAgIHJldHVybiBtX3VybC5nZXQoKTsKK30KKworKyAoQk9PTClzdXBw
b3J0c1NlY3VyZUNvZGluZworeworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKHZvaWQpZW5jb2Rl
V2l0aENvZGVyOihOU0NvZGVyICpfTm9ubnVsbCljb2RlcgoreworICAgIFdURjo6VVJMQ2hhckJ1
ZmZlciB1cmxCeXRlczsKKyAgICBXVEY6OmdldFVSTEJ5dGVzKChfX2JyaWRnZSBDRlVSTFJlZilt
X3VybC5nZXQoKSwgdXJsQnl0ZXMpOworICAgIFtjb2RlciBlbmNvZGVCeXRlczp1cmxCeXRlcy5k
YXRhKCkgbGVuZ3RoOnVybEJ5dGVzLnNpemUoKV07Cit9CisKKy0gKF9OdWxsYWJsZSBpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb2RlcjooTlNDb2RlciAqX05vbm51bGwpY29kZXIKK3sKKyAgICBpZiAo
c2VsZiA9IFtzdXBlciBpbml0XSkgeworICAgICAgICBOU1VJbnRlZ2VyIGxlbmd0aDsKKyAgICAg
ICAgYXV0byBieXRlcyA9ICh1aW50OF90ICopW2NvZGVyIGRlY29kZUJ5dGVzV2l0aFJldHVybmVk
TGVuZ3RoOiZsZW5ndGhdOworICAgICAgICBpZiAoIWJ5dGVzKSB7CisgICAgICAgICAgICBbc2Vs
ZiByZWxlYXNlXTsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KKworICAgICAg
ICBtX3VybCA9IHJldGFpblB0cihXVEY6OlVSTFdpdGhEYXRhKFtOU0RhdGEgZGF0YVdpdGhCeXRl
c05vQ29weTpieXRlcyBsZW5ndGg6bGVuZ3RoIGZyZWVXaGVuRG9uZTpOT10sIG5pbCkpOworICAg
ICAgICBpZiAoIW1fdXJsKSB7CisgICAgICAgICAgICBbc2VsZiByZWxlYXNlXTsKKyAgICAgICAg
ICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAoX051bGxhYmxlIGluc3RhbmNldHlwZSlpbml0V2l0aFVSTDooTlNVUkwgKiBfTnVsbGFi
bGUpdXJsCit7CisgICAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pCisgICAgICAgIG1fdXJsID0g
cmV0YWluUHRyKHVybCk7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAogCiBuYW1lc3Bh
Y2UgSVBDIHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtOTMsNyArMTYyLDcgQEAgZW51
bSBjbGFzcyBOU1R5cGUgewogCiAjcHJhZ21hIG1hcmsgLSBIZWxwZXJzCiAKLXN0YXRpYyBOU1R5
cGUgdHlwZUZyb21PYmplY3QoaWQgb2JqZWN0KQorc3RhdGljIE5TVHlwZSB0eXBlRnJvbU9iamVj
dChpZCBfTm9ubnVsbCBvYmplY3QpCiB7CiAgICAgQVNTRVJUKG9iamVjdCk7CiAKQEAgLTEyNywx
MiArMTk2LDEyIEBAIHN0YXRpYyBOU1R5cGUgdHlwZUZyb21PYmplY3QoaWQgb2JqZWN0KQogICAg
IHJldHVybiBOU1R5cGU6OlVua25vd247CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Nlcmlh
bGl6YWJsZUZvbnQoQ1RGb250UmVmIGZvbnQpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTZXJpYWxp
emFibGVGb250KENURm9udFJlZiBfTnVsbGFibGUgZm9udCkKIHsKICAgICByZXR1cm4gYWRvcHRD
RihDVEZvbnRDb3B5QXR0cmlidXRlKGZvbnQsIGtDVEZvbnRVUkxBdHRyaWJ1dGUpKTsKIH0KIAot
c3RhdGljIGlubGluZSBib29sIGlzU2VyaWFsaXphYmxlVmFsdWUoaWQgdmFsdWUpCitzdGF0aWMg
aW5saW5lIGJvb2wgaXNTZXJpYWxpemFibGVWYWx1ZShpZCBfTnVsbGFibGUgdmFsdWUpCiB7CiAg
ICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltDb2NvYUZvbnQgY2xhc3NdXSkKICAgICAgICAg
cmV0dXJuIGlzU2VyaWFsaXphYmxlRm9udCgoX19icmlkZ2UgQ1RGb250UmVmKXZhbHVlKTsKQEAg
LTE0MSw3ICsyMTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTZXJpYWxpemFibGVWYWx1ZShp
ZCB2YWx1ZSkKIAogI3ByYWdtYSBtYXJrIC0gTlNBcnJheQogCi1zdGF0aWMgdm9pZCBlbmNvZGVB
cnJheUludGVybmFsKEVuY29kZXImIGVuY29kZXIsIE5TQXJyYXkgKmFycmF5KQorc3RhdGljIHZv
aWQgZW5jb2RlQXJyYXlJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU0FycmF5ICpfTnVsbGFi
bGUgYXJyYXkpCiB7CiAgICAgLy8gRXZlbiB0aG91Z2ggTlNBcnJheSBpcyB0b2xsIGZyZWUgYnJp
ZGdlZCB3aXRoIENGQXJyYXlSZWYsIHZhbHVlcyBtYXkgbm90IGJlLAogICAgIC8vIHNvIHdlIHNo
b3VsZCBzdGF5IHdpdGhpbiB0aGlzIGZpbGUncyBjb2RlLgpAQCAtMTcwLDcgKzIzOSw3IEBAIHN0
YXRpYyB2b2lkIGVuY29kZUFycmF5SW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNBcnJheSAq
YXJyYXkpCiAgICAgfQogfQogCi1zdGF0aWMgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2Rl
QXJyYXlJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyLCBOU0FycmF5PENsYXNzPiAqYWxsb3dlZENs
YXNzZXMpCitzdGF0aWMgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2RlQXJyYXlJbnRlcm5h
bChEZWNvZGVyJiBkZWNvZGVyLCBOU0FycmF5PENsYXNzPiAqIF9Ob25udWxsIGFsbG93ZWRDbGFz
c2VzKQogewogICAgIHVpbnQ2NF90IHNpemU7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXpl
KSkKQEAgLTE5MCw3ICsyNTksNyBAQCBzdGF0aWMgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVj
b2RlQXJyYXlJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyLCBOU0FycmF5PENsYQogI3ByYWdtYSBt
YXJrIC0gTlNDb2xvciAvIFVJQ29sb3IKIAogI2lmIFVTRShBUFBLSVQpCi1zdGF0aWMgaW5saW5l
IHZvaWQgZW5jb2RlQ29sb3JJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU0NvbG9yICpjb2xv
cikKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVDb2xvckludGVybmFsKEVuY29kZXImIGVuY29k
ZXIsIE5TQ29sb3IgKl9Ob25udWxsIGNvbG9yKQogewogICAgIGVuY29kZXIgPDwgY29sb3JGcm9t
TlNDb2xvcihjb2xvcik7CiB9CkBAIC0yMDMsNyArMjcyLDcgQEAgc3RhdGljIGlubGluZSBPcHRp
b25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVDb2xvckludGVybmFsKERlY29kZXImIGRlY29kZXIp
CiAgICAgcmV0dXJuIHsgbnNDb2xvcihjb2xvcikgfTsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5l
IHZvaWQgZW5jb2RlQ29sb3JJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBVSUNvbG9yICpjb2xv
cikKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVDb2xvckludGVybmFsKEVuY29kZXImIGVuY29k
ZXIsIFVJQ29sb3IgKl9Ob25udWxsIGNvbG9yKQogewogICAgIGVuY29kZXIgPDwgY29sb3JGcm9t
VUlDb2xvcihjb2xvcik7CiB9CkBAIC0yMTksNyArMjg4LDcgQEAgc3RhdGljIGlubGluZSBPcHRp
b25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVDb2xvckludGVybmFsKERlY29kZXImIGRlY29kZXIp
CiAKICNwcmFnbWEgbWFyayAtIE5TRGF0YQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5jb2RlRGF0
YUludGVybmFsKEVuY29kZXImIGVuY29kZXIsIE5TRGF0YSAqZGF0YSkKK3N0YXRpYyBpbmxpbmUg
dm9pZCBlbmNvZGVEYXRhSW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNEYXRhICpfTm9ubnVs
bCBkYXRhKQogewogICAgIGVuY29kZShlbmNvZGVyLCAoX19icmlkZ2UgQ0ZEYXRhUmVmKWRhdGEp
OwogfQpAQCAtMjM0LDcgKzMwMyw3IEBAIHN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8UmV0YWluUHRy
PGlkPj4gZGVjb2RlRGF0YUludGVybmFsKERlY29kZXImIGRlY29kZXIpCiAKICNwcmFnbWEgbWFy
ayAtIE5TRGF0ZQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5jb2RlRGF0ZUludGVybmFsKEVuY29k
ZXImIGVuY29kZXIsIE5TRGF0ZSAqZGF0ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVEYXRl
SW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNEYXRlICpfTm9ubnVsbCBkYXRlKQogewogICAg
IGVuY29kZShlbmNvZGVyLCAoX19icmlkZ2UgQ0ZEYXRlUmVmKWRhdGUpOwogfQpAQCAtMjQ5LDcg
KzMxOCw3IEBAIHN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2RlRGF0
ZUludGVybmFsKERlY29kZXImIGRlY29kZXIpCiAKICNwcmFnbWEgbWFyayAtIE5TRGljdGlvbmFy
eQogCi1zdGF0aWMgdm9pZCBlbmNvZGVEaWN0aW9uYXJ5SW50ZXJuYWwoRW5jb2RlciYgZW5jb2Rl
ciwgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQorc3RhdGljIHZvaWQgZW5jb2RlRGljdGlvbmFy
eUludGVybmFsKEVuY29kZXImIGVuY29kZXIsIE5TRGljdGlvbmFyeSAqX05vbm51bGwgZGljdGlv
bmFyeSkKIHsKICAgICAvLyBFdmVuIHRob3VnaCBOU0RpY3Rpb25hcnkgaXMgdG9sbCBmcmVlIGJy
aWRnZWQgd2l0aCBDRkRpY3Rpb25hcnlSZWYsIGtleXMvdmFsdWVzIG1heSBub3QgYmUsCiAgICAg
Ly8gc28gd2Ugc2hvdWxkIHN0YXkgd2l0aGluIHRoaXMgZmlsZSdzIGNvZGUuCkBAIC0yODEsNyAr
MzUwLDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlRGljdGlvbmFyeUludGVybmFsKEVuY29kZXImIGVu
Y29kZXIsIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSkKICAgICB9CiB9CiAKLXN0YXRpYyBPcHRp
b25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVEaWN0aW9uYXJ5SW50ZXJuYWwoRGVjb2RlciYgZGVj
b2RlciwgTlNBcnJheTxDbGFzcz4gKmFsbG93ZWRDbGFzc2VzKQorc3RhdGljIE9wdGlvbmFsPFJl
dGFpblB0cjxpZD4+IGRlY29kZURpY3Rpb25hcnlJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyLCBO
U0FycmF5PENsYXNzPiAqX05vbm51bGwgYWxsb3dlZENsYXNzZXMpCiB7CiAgICAgdWludDY0X3Qg
c2l6ZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQpAQCAtMzA1LDcgKzM3NCw3IEBA
IHN0YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVEaWN0aW9uYXJ5SW50ZXJuYWwo
RGVjb2RlciYgZGVjb2RlciwgTlNBcnJhCiAKICNwcmFnbWEgbWFyayAtIE5TRm9udCAvIFVJRm9u
dAogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5jb2RlRm9udEludGVybmFsKEVuY29kZXImIGVuY29k
ZXIsIENvY29hRm9udCAqZm9udCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVGb250SW50ZXJu
YWwoRW5jb2RlciYgZW5jb2RlciwgQ29jb2FGb250ICpfTm9ubnVsbCBmb250KQogewogICAgIGVu
Y29kZShlbmNvZGVyLCBmb250LmZvbnREZXNjcmlwdG9yLmZvbnRBdHRyaWJ1dGVzKTsKIH0KQEAg
LTMyNyw3ICszOTYsNyBAQCBzdGF0aWMgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2RlRm9u
dEludGVybmFsKERlY29kZXImIGRlY29kZXIpCiAKICNwcmFnbWEgbWFyayAtIE5TTnVtYmVyCiAK
LXN0YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVOdW1iZXJJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVy
LCBOU051bWJlciAqbnVtYmVyKQorc3RhdGljIGlubGluZSB2b2lkIGVuY29kZU51bWJlckludGVy
bmFsKEVuY29kZXImIGVuY29kZXIsIE5TTnVtYmVyICpfTm9ubnVsbCBudW1iZXIpCiB7CiAgICAg
ZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBDRk51bWJlclJlZiludW1iZXIpOwogfQpAQCAtMzQy
LDI2ICs0MTEsMjEgQEAgc3RhdGljIGlubGluZSBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNv
ZGVOdW1iZXJJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyKQogCiAjcHJhZ21hIG1hcmsgLSBpZCA8
TlNTZWN1cmVDb2Rpbmc+CiAKLXN0YXRpYyB2b2lkIGVuY29kZVNlY3VyZUNvZGluZ0ludGVybmFs
KEVuY29kZXImIGVuY29kZXIsIGlkIDxOU09iamVjdCwgTlNTZWN1cmVDb2Rpbmc+IG9iamVjdCkK
K3N0YXRpYyB2b2lkIGVuY29kZVNlY3VyZUNvZGluZ0ludGVybmFsKEVuY29kZXImIGVuY29kZXIs
IGlkIDxOU09iamVjdCwgTlNTZWN1cmVDb2Rpbmc+IF9Ob25udWxsIG9iamVjdCkKIHsKICAgICBh
dXRvIGFyY2hpdmVyID0gYWRvcHROUyhbW05TS2V5ZWRBcmNoaXZlciBhbGxvY10gaW5pdFJlcXVp
cmluZ1NlY3VyZUNvZGluZzpZRVNdKTsKIAotI2lmIEhBVkUoTlNGT05UX1dJVEhfT1BUSUNBTF9T
SVpJTkdfQlVHKQotICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tTZWN1cmVDb2RpbmdG
b250QXR0cmlidXRlTm9ybWFsaXplciBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gZGVsZWdhdGUg
PSBhZG9wdE5TKFtbV0tTZWN1cmVDb2RpbmdBcmNoaXZpbmdEZWxlZ2F0ZSBhbGxvY10gaW5pdF0p
OwogICAgIFthcmNoaXZlciBzZXREZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07Ci0jZW5kaWYKIAog
ICAgIFthcmNoaXZlciBlbmNvZGVPYmplY3Q6b2JqZWN0IGZvcktleTpOU0tleWVkQXJjaGl2ZVJv
b3RPYmplY3RLZXldOwogICAgIFthcmNoaXZlciBmaW5pc2hFbmNvZGluZ107Ci0KLSNpZiBIQVZF
KE5TRk9OVF9XSVRIX09QVElDQUxfU0laSU5HX0JVRykKICAgICBbYXJjaGl2ZXIgc2V0RGVsZWdh
dGU6bmlsXTsKLSNlbmRpZgogCiAgICAgZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBDRkRhdGFS
ZWYpW2FyY2hpdmVyIGVuY29kZWREYXRhXSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxSZXRhaW5Q
dHI8aWQ+PiBkZWNvZGVTZWN1cmVDb2RpbmdJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyLCBOU0Fy
cmF5PENsYXNzPiAqYWxsb3dlZENsYXNzZXMpCitzdGF0aWMgT3B0aW9uYWw8UmV0YWluUHRyPGlk
Pj4gZGVjb2RlU2VjdXJlQ29kaW5nSW50ZXJuYWwoRGVjb2RlciYgZGVjb2RlciwgTlNBcnJheTxD
bGFzcz4gKl9Ob25udWxsIGFsbG93ZWRDbGFzc2VzKQogewogICAgIEFTU0VSVChhbGxvd2VkQ2xh
c3NlcyAmJiBhbGxvd2VkQ2xhc3Nlcy5jb3VudCk7CiAgICAgaWYgKCFhbGxvd2VkQ2xhc3NlcyB8
fCAhYWxsb3dlZENsYXNzZXMuY291bnQpCkBAIC0zNzMsOCArNDM3LDE1IEBAIHN0YXRpYyBPcHRp
b25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVTZWN1cmVDb2RpbmdJbnRlcm5hbChEZWNvZGVyJiBk
ZWNvZGVyLCBOU0FyCiAKICAgICBhdXRvIHVuYXJjaGl2ZXIgPSBhZG9wdE5TKFtbTlNLZXllZFVu
YXJjaGl2ZXIgYWxsb2NdIGluaXRGb3JSZWFkaW5nRnJvbURhdGE6KF9fYnJpZGdlIE5TRGF0YSAq
KWRhdGEuZ2V0KCkgZXJyb3I6bnVsbHB0cl0pOwogICAgIHVuYXJjaGl2ZXIuZ2V0KCkuZGVjb2Rp
bmdGYWlsdXJlUG9saWN5ID0gTlNEZWNvZGluZ0ZhaWx1cmVQb2xpY3lSYWlzZUV4Y2VwdGlvbjsK
KworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tTZWN1cmVDb2RpbmdBcmNoaXZpbmdE
ZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIHVuYXJjaGl2ZXIuZ2V0KCkuZGVsZWdhdGUgPSBk
ZWxlZ2F0ZS5nZXQoKTsKKworICAgIGF1dG8gYWxsb3dlZENsYXNzU2V0ID0gW05TTXV0YWJsZVNl
dCBzZXRXaXRoQXJyYXk6YWxsb3dlZENsYXNzZXNdOworICAgIFthbGxvd2VkQ2xhc3NTZXQgYWRk
T2JqZWN0OldLRW5jb2RlZFVSTC5jbGFzc107CisgICAgCiAgICAgQHRyeSB7Ci0gICAgICAgIGlk
IHJlc3VsdCA9IFt1bmFyY2hpdmVyIGRlY29kZU9iamVjdE9mQ2xhc3NlczpbTlNTZXQgc2V0V2l0
aEFycmF5OmFsbG93ZWRDbGFzc2VzXSBmb3JLZXk6TlNLZXllZEFyY2hpdmVSb290T2JqZWN0S2V5
XTsKKyAgICAgICAgaWQgcmVzdWx0ID0gW3VuYXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzc2Vz
OmFsbG93ZWRDbGFzc1NldCBmb3JLZXk6TlNLZXllZEFyY2hpdmVSb290T2JqZWN0S2V5XTsKICAg
ICAgICAgQVNTRVJUKCFyZXN1bHQgfHwgW3Jlc3VsdCBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3Rv
Y29sKE5TU2VjdXJlQ29kaW5nKV0pOwogICAgICAgICByZXR1cm4geyByZXN1bHQgfTsKICAgICB9
IEBjYXRjaCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgewpAQCAtMzgyLDEyICs0NTMsMTMgQEAg
c3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZVNlY3VyZUNvZGluZ0ludGVybmFs
KERlY29kZXImIGRlY29kZXIsIE5TQXIKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICB9IEBmaW5hbGx5IHsKICAgICAgICAgW3VuYXJjaGl2ZXIgZmluaXNoRGVjb2RpbmddOworICAg
ICAgICB1bmFyY2hpdmVyLmdldCgpLmRlbGVnYXRlID0gbmlsOwogICAgIH0KIH0KIAogI3ByYWdt
YSBtYXJrIC0gTlNTdHJpbmcKIAotc3RhdGljIGlubGluZSB2b2lkIGVuY29kZVN0cmluZ0ludGVy
bmFsKEVuY29kZXImIGVuY29kZXIsIE5TU3RyaW5nICpzdHJpbmcpCitzdGF0aWMgaW5saW5lIHZv
aWQgZW5jb2RlU3RyaW5nSW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNTdHJpbmcgKl9Ob25u
dWxsIHN0cmluZykKIHsKICAgICBlbmNvZGUoZW5jb2RlciwgKF9fYnJpZGdlIENGU3RyaW5nUmVm
KXN0cmluZyk7CiB9CkBAIC00MDIsOSArNDc0LDkgQEAgc3RhdGljIGlubGluZSBPcHRpb25hbDxS
ZXRhaW5QdHI8aWQ+PiBkZWNvZGVTdHJpbmdJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyKQogCiAj
cHJhZ21hIG1hcmsgLSBOU1VSTAogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5jb2RlVVJMSW50ZXJu
YWwoRW5jb2RlciYgZW5jb2RlciwgTlNVUkwgKlVSTCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmNv
ZGVVUkxJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU1VSTCAqX05vbm51bGwgdXJsKQogewot
ICAgIGVuY29kZShlbmNvZGVyLCAoX19icmlkZ2UgQ0ZVUkxSZWYpVVJMKTsKKyAgICBlbmNvZGUo
ZW5jb2RlciwgKF9fYnJpZGdlIENGVVJMUmVmKXVybCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgT3B0
aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2RlVVJMSW50ZXJuYWwoRGVjb2RlciYgZGVjb2RlcikK
QEAgLTQxNyw3ICs0ODksNyBAQCBzdGF0aWMgaW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+
IGRlY29kZVVSTEludGVybmFsKERlY29kZXImIGRlY29kZXIpCiAKICNwcmFnbWEgbWFyayAtIEVu
dHJ5IFBvaW50IEVuY29kZXIgLyBEZWNvZGVyCiAKLXZvaWQgZW5jb2RlT2JqZWN0KEVuY29kZXIm
IGVuY29kZXIsIGlkIG9iamVjdCkKK3ZvaWQgZW5jb2RlT2JqZWN0KEVuY29kZXImIGVuY29kZXIs
IGlkIF9Ob25udWxsIG9iamVjdCkKIHsKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGJvb2w+
KCFvYmplY3QpOwogICAgIGlmICghb2JqZWN0KQpAQCAtNDY0LDcgKzUzNiw3IEBAIHZvaWQgZW5j
b2RlT2JqZWN0KEVuY29kZXImIGVuY29kZXIsIGlkIG9iamVjdCkKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAotT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2RlT2JqZWN0KERlY29k
ZXImIGRlY29kZXIsIE5TQXJyYXk8Q2xhc3M+ICphbGxvd2VkQ2xhc3NlcykKK09wdGlvbmFsPFJl
dGFpblB0cjxpZD4+IGRlY29kZU9iamVjdChEZWNvZGVyJiBkZWNvZGVyLCBOU0FycmF5PENsYXNz
PiAqX05vbm51bGwgYWxsb3dlZENsYXNzZXMpCiB7CiAgICAgYm9vbCBpc051bGw7CiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShpc051bGwpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbQppbmRleCA3NmFmYjcyZmYy
ZmQ0Zjk3YjVjZjAxMzJlZWE5YjMzN2ZhNDRhYjQzLi4yYjZhNzU1ZGY3MGY5MThmZDAwNDdjN2I2
NzBiN2E0NmQxNjZiMjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9X
ZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9D
b2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bXBvcnQgPFdlYkNvcmUvRm9udC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb250QXR0cmlidXRlcy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2ltcG9ydCA8cGFsL3NwaS9jZi9Db3JlVGV4dFNQ
SS5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTU0Myw0ICs1NDQsNTkgQEAgT3B0
aW9uYWw8Rm9udFBsYXRmb3JtRGF0YT4gQXJndW1lbnRDb2RlcjxSZWY8Rm9udD4+OjpkZWNvZGVQ
bGF0Zm9ybURhdGEoRGVjb2RlciYKICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShjdEZvbnQu
Z2V0KCksIHNpemUudmFsdWUoKSwgc3ludGhldGljQm9sZC52YWx1ZSgpLCBzeW50aGV0aWNPYmxp
cXVlLnZhbHVlKCksIG9yaWVudGF0aW9uLnZhbHVlKCksIHdpZHRoVmFyaWFudC52YWx1ZSgpLCB0
ZXh0UmVuZGVyaW5nTW9kZS52YWx1ZSgpKTsKIH0KIAordm9pZCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKK3sKKyAg
ICBhdXRvIHJlcXVlc3RUb1NlcmlhbGl6ZSA9IHJldGFpblB0cihyZXNvdXJjZVJlcXVlc3QubnNV
UkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBC
b2R5KSk7CisKKyAgICBib29sIHJlcXVlc3RJc1ByZXNlbnQgPSByZXF1ZXN0VG9TZXJpYWxpemU7
CisgICAgZW5jb2RlciA8PCByZXF1ZXN0SXNQcmVzZW50OworCisgICAgaWYgKCFyZXF1ZXN0SXNQ
cmVzZW50KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBkb24ndCBzZW5kIEhUVFAgYm9k
eSBvdmVyIElQQyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLgorICAgIC8vIEFsc28sIGl0J3Mgbm90
IGFsd2F5cyBwb3NzaWJsZSB0byBkbywgYXMgc3RyZWFtcyBjYW4gb25seSBiZSBjcmVhdGVkIGlu
IHByb2Nlc3MgdGhhdCBkb2VzIG5ldHdvcmtpbmcuCisgICAgaWYgKFtyZXF1ZXN0VG9TZXJpYWxp
emUgSFRUUEJvZHldIHx8IFtyZXF1ZXN0VG9TZXJpYWxpemUgSFRUUEJvZHlTdHJlYW1dKSB7Cisg
ICAgICAgIGF1dG8gbXV0YWJsZVJlcXVlc3QgPSBhZG9wdE5TKFtyZXF1ZXN0VG9TZXJpYWxpemUg
bXV0YWJsZUNvcHldKTsKKyAgICAgICAgW211dGFibGVSZXF1ZXN0IHNldEhUVFBCb2R5Om5pbF07
CisgICAgICAgIFttdXRhYmxlUmVxdWVzdCBzZXRIVFRQQm9keVN0cmVhbTpuaWxdOworICAgICAg
ICByZXF1ZXN0VG9TZXJpYWxpemUgPSBXVEZNb3ZlKG11dGFibGVSZXF1ZXN0KTsKKyAgICB9CisK
KyAgICBJUEM6OmVuY29kZShlbmNvZGVyLCByZXF1ZXN0VG9TZXJpYWxpemUuZ2V0KCkpOworCisg
ICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QucmVxdWVzdGVyKCk7CisgICAgZW5jb2RlciA8
PCByZXNvdXJjZVJlcXVlc3QuaXNBcHBCb3VuZCgpOworfQorCitib29sIEFyZ3VtZW50Q29kZXI8
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKERlY29kZXImIGRl
Y29kZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQoreworICAg
IGJvb2wgcmVxdWVzdElzUHJlc2VudDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVlc3RJ
c1ByZXNlbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXJlcXVlc3RJc1By
ZXNlbnQpIHsKKyAgICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0gV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGF1dG8gcmVxdWVzdCA9
IElQQzo6ZGVjb2RlPE5TVVJMUmVxdWVzdD4oZGVjb2RlciwgTlNVUkxSZXF1ZXN0LmNsYXNzKTsK
KyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3RlciByZXF1ZXN0ZXI7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXF1ZXN0ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29s
IGlzQXBwQm91bmQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc0FwcEJvdW5kKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzb3VyY2VSZXF1ZXN0ID0gV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0KHJlcXVlc3QtPmdldCgpKTsKKyAgICByZXNvdXJjZVJlcXVlc3Quc2V0UmVxdWVz
dGVyKHJlcXVlc3Rlcik7CisgICAgcmVzb3VyY2VSZXF1ZXN0LnNldElzQXBwQm91bmQoaXNBcHBC
b3VuZCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFj
Lm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5t
bQppbmRleCAwZjYwNWZhZDUyMTcyNTE0MTBlMjVkN2JiYzkxY2IxM2M4MTRlNTQ0Li5jNTk1MDY4
YTZhNGM3N2QwNjEyODBhYTI1NzQ2NGQ2NmFhM2MxMDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KQEAgLTQyLDI0NSAr
NDIsMTQgQEAKICNpbXBvcnQgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CiAjaW1wb3J0IDx3dGYvY2Yv
VHlwZUNhc3RzQ0YuaD4KIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW5jbHVkZSA8
V2ViS2l0QWRkaXRpb25zL1dlYkNvcmVBcmd1bWVudENvZGVyc01hY0FkZGl0aW9ucy5oPgotI2Vu
ZGlmCi0KICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogI2ltcG9ydCA8V2Vi
Q29yZS9NZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4dC5oPgogI2ltcG9ydCA8b2JqYy9ydW50aW1l
Lmg+CiAjaW1wb3J0IDxwYWwvY29jb2EvQVZGb3VuZGF0aW9uU29mdExpbmsuaD4KICNlbmRpZgog
Ci0jaWZuZGVmIFdFQkNPUkVfQVJHVU1FTlRDT0RFUlNfTUFDX0RFQ09ERV9BRERJVElPTlMKLSNk
ZWZpbmUgV0VCQ09SRV9BUkdVTUVOVENPREVSU19NQUNfREVDT0RFX0FERElUSU9OUwotI2VuZGlm
Ci0KLSNpZm5kZWYgV0VCQ09SRV9BUkdVTUVOVENPREVSU19NQUNfRU5DT0RFX0FERElUSU9OUwot
I2RlZmluZSBXRUJDT1JFX0FSR1VNRU5UQ09ERVJTX01BQ19FTkNPREVfQURESVRJT05TCi0jZW5k
aWYKLQogbmFtZXNwYWNlIElQQyB7CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlv
bmFyeVJlZj4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oQ0ZJbmRleCB2ZXJzaW9u
LCBDRlR5cGVSZWYqIG9iamVjdHMsIENGSW5kZXggb2JqZWN0Q291bnQsIENGRGljdGlvbmFyeVJl
ZiBwcm90b2NvbFByb3BlcnRpZXMsIENGTnVtYmVyUmVmIGV4cGVjdGVkQ29udGVudExlbmd0aCwg
Q0ZTdHJpbmdSZWYgbWltZVR5cGUsIENGVHlwZVJlZiB0b2tlbk51bGwpCi17Ci0gICAgYXV0byBh
cmNoaXZlTGlzdEFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCAwLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0KLSAgICBmb3IgKENGSW5k
ZXggaSA9IDA7IGkgPCBvYmplY3RDb3VudDsgKytpKSB7Ci0gICAgICAgIENGVHlwZVJlZiBvYmpl
Y3QgPSBvYmplY3RzW2ldOwotICAgICAgICBpZiAob2JqZWN0KSB7Ci0gICAgICAgICAgICBDRkFy
cmF5QXBwZW5kVmFsdWUoYXJjaGl2ZUxpc3RBcnJheS5nZXQoKSwgb2JqZWN0KTsKLSAgICAgICAg
ICAgIENGUmVsZWFzZShvYmplY3QpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8g
QXBwZW5kIG91ciB0b2tlbiBudWxsIHJlcHJlc2VudGF0aW9uLgotICAgICAgICAgICAgQ0ZBcnJh
eUFwcGVuZFZhbHVlKGFyY2hpdmVMaXN0QXJyYXkuZ2V0KCksIHRva2VuTnVsbCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdENGKENGRGljdGlvbmFyeUNy
ZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5
Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotCi0gICAgYXV0
byB2ZXJzaW9uTnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwgJnZlcnNpb24pKTsKLSAgICBDRkRpY3Rpb25hcnlT
ZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigidmVyc2lvbiIpLCB2ZXJzaW9uTnVtYmVy
LmdldCgpKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNU
UigiYXJjaGl2ZUxpc3QiKSwgYXJjaGl2ZUxpc3RBcnJheS5nZXQoKSk7Ci0KLSAgICBpZiAocHJv
dG9jb2xQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25h
cnkuZ2V0KCksIENGU1RSKCJwcm90b2NvbFByb3BlcnRpZXMiKSwgcHJvdG9jb2xQcm9wZXJ0aWVz
KTsKLSAgICAgICAgQ0ZSZWxlYXNlKHByb3RvY29sUHJvcGVydGllcyk7Ci0gICAgfQotCi0gICAg
aWYgKGV4cGVjdGVkQ29udGVudExlbmd0aCkgewotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1
ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigiZXhwZWN0ZWRDb250ZW50TGVuZ3RoIiksIGV4cGVj
dGVkQ29udGVudExlbmd0aCk7Ci0gICAgICAgIENGUmVsZWFzZShleHBlY3RlZENvbnRlbnRMZW5n
dGgpOwotICAgIH0KLQotICAgIGlmIChtaW1lVHlwZSkgewotICAgICAgICBDRkRpY3Rpb25hcnlT
ZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigibWltZVR5cGUiKSwgbWltZVR5cGUpOwot
ICAgICAgICBDRlJlbGVhc2UobWltZVR5cGUpOwotICAgIH0KLQotICAgIENGQWxsb2NhdG9yRGVh
bGxvY2F0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBvYmplY3RzKTsKLQotICAgIHJldHVybiBkaWN0
aW9uYXJ5OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+IGJvb2wgZXh0cmFjdERp
Y3Rpb25hcnlWYWx1ZShDRkRpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgQ0ZTdHJpbmdSZWYga2V5
LCBWYWx1ZVR5cGUqIHJlc3VsdCkKLXsKLSAgICBhdXRvIHVudHlwZWRWYWx1ZSA9IENGRGljdGlv
bmFyeUdldFZhbHVlKGRpY3Rpb25hcnksIGtleSk7Ci0gICAgYXV0byB2YWx1ZSA9IGR5bmFtaWNf
Y2ZfY2FzdDxWYWx1ZVR5cGU+KHVudHlwZWRWYWx1ZSk7Ci0gICAgaWYgKHVudHlwZWRWYWx1ZSAm
JiAhdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAocmVzdWx0KQotICAgICAg
ICAqcmVzdWx0ID0gdmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGNy
ZWF0ZUFyY2hpdmVMaXN0KENGRGljdGlvbmFyeVJlZiByZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVm
IHRva2VuTnVsbCwgQ0ZJbmRleCogdmVyc2lvbiwgQ0ZUeXBlUmVmKiogb2JqZWN0cywgQ0ZJbmRl
eCogb2JqZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiogcHJvdG9jb2xQcm9wZXJ0aWVzLCBDRk51
bWJlclJlZiogZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBDRlN0cmluZ1JlZiogbWltZVR5cGUpCi17
Ci0gICAgYXV0byB2ZXJzaW9uTnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihD
RkRpY3Rpb25hcnlHZXRWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoInZlcnNpb24iKSkpOwot
ICAgIGlmICghdmVyc2lvbk51bWJlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCFDRk51bWJlckdldFZhbHVlKHZlcnNpb25OdW1iZXIsIGtDRk51bWJlckNGSW5kZXhUeXBlLCB2
ZXJzaW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBhcmNoaXZlTGlzdEFy
cmF5ID0gZHluYW1pY19jZl9jYXN0PENGQXJyYXlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJl
cHJlc2VudGF0aW9uLCBDRlNUUigiYXJjaGl2ZUxpc3QiKSkpOwotICAgIGlmICghYXJjaGl2ZUxp
c3RBcnJheSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBhcmNoaXZlTGlzdEFy
cmF5Q291bnQgPSBDRkFycmF5R2V0Q291bnQoYXJjaGl2ZUxpc3RBcnJheSk7Ci0gICAgaWYgKCFp
c0luQm91bmRzPHNpemVfdD4oYXJjaGl2ZUxpc3RBcnJheUNvdW50KSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byBidWZmZXJTaXplID0gQ2hlY2tlZFNpemUoc2l6ZW9mKENGVHlw
ZVJlZikpICogc3RhdGljX2Nhc3Q8c2l6ZV90PihhcmNoaXZlTGlzdEFycmF5Q291bnQpOwotICAg
IGlmIChidWZmZXJTaXplLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKCFleHRyYWN0RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigi
cHJvdG9jb2xQcm9wZXJ0aWVzIiksIHByb3RvY29sUHJvcGVydGllcykpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIWV4dHJhY3REaWN0aW9uYXJ5VmFsdWUocmVwcmVzZW50YXRpb24s
IENGU1RSKCJleHBlY3RlZENvbnRlbnRMZW5ndGgiKSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZXh0cmFjdERpY3Rpb25hcnlWYWx1ZShy
ZXByZXNlbnRhdGlvbiwgQ0ZTVFIoIm1pbWVUeXBlIiksIG1pbWVUeXBlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgKm9iamVjdENvdW50ID0gYXJjaGl2ZUxpc3RBcnJheUNvdW50Owot
ICAgICpvYmplY3RzID0gc3RhdGljX2Nhc3Q8Q0ZUeXBlUmVmKj4oZmFzdE1hbGxvYyhidWZmZXJT
aXplLnVuc2FmZUdldCgpKSk7Ci0KLSAgICBDRkFycmF5R2V0VmFsdWVzKGFyY2hpdmVMaXN0QXJy
YXksIENGUmFuZ2VNYWtlKDAsICpvYmplY3RDb3VudCksICpvYmplY3RzKTsKLSAgICBmb3IgKENG
SW5kZXggaSA9IDA7IGkgPCAqb2JqZWN0Q291bnQ7ICsraSkgewotICAgICAgICBpZiAoKCpvYmpl
Y3RzKVtpXSA9PSB0b2tlbk51bGwpCi0gICAgICAgICAgICAoKm9iamVjdHMpW2ldID0gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKENGVVJMUmVxdWVz
dFJlZiBjZlJlcXVlc3QsIENGVHlwZVJlZiB0b2tlbk51bGwpCi17Ci0gICAgQ0ZJbmRleCB2ZXJz
aW9uOwotICAgIENGVHlwZVJlZiogb2JqZWN0czsKLSAgICBDRkluZGV4IG9iamVjdENvdW50Owot
ICAgIENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3BlcnRpZXM7Ci0KLSAgICAvLyBGSVhNRSAo
MTI4ODk1MTgpOiBEbyBub3Qgc2VyaWFsaXplIEhUVFAgbWVzc2FnZSBib2R5LgotICAgIC8vIDEu
IEl0IGNhbiBiZSBsYXJnZSBhbmQgdGh1cyBjb3N0bHkgdG8gc2VuZCBhY3Jvc3MuCi0gICAgLy8g
Mi4gSXQgaXMgbWlzbGVhZGluZyB0byBwcm92aWRlIGEgYm9keSB3aXRoIHNvbWUgcmVxdWVzdHMs
IHdoaWxlIG90aGVycyB1c2UgYm9keSBzdHJlYW1zLCB3aGljaCBjYW5ub3QgYmUgc2VyaWFsaXpl
ZCBhdCBhbGwuCi0KLSAgICBfQ0ZVUkxSZXF1ZXN0Q3JlYXRlQXJjaGl2ZUxpc3Qoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgY2ZSZXF1ZXN0LCAmdmVyc2lvbiwgJm9iamVjdHMsICZvYmplY3RDb3VudCwg
JnByb3RvY29sUHJvcGVydGllcyk7Ci0KLSAgICAvLyBUaGlzIHdpbGwgZGVhbGxvY2F0ZSB0aGUg
cGFzc2VkIGluIGFyZ3VtZW50cy4KLSAgICByZXR1cm4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVz
ZW50YXRpb24odmVyc2lvbiwgb2JqZWN0cywgb2JqZWN0Q291bnQsIHByb3RvY29sUHJvcGVydGll
cywgbnVsbHB0ciwgbnVsbHB0ciwgdG9rZW5OdWxsKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxD
RlVSTFJlcXVlc3RSZWY+IGNyZWF0ZUNGVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNl
bnRhdGlvbihDRkRpY3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51
bGwpCi17Ci0gICAgQ0ZJbmRleCB2ZXJzaW9uOwotICAgIENGVHlwZVJlZiogb2JqZWN0czsKLSAg
ICBDRkluZGV4IG9iamVjdENvdW50OwotICAgIENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3Bl
cnRpZXM7Ci0KLSAgICBpZiAoIWNyZWF0ZUFyY2hpdmVMaXN0KHJlcHJlc2VudGF0aW9uLCB0b2tl
bk51bGwsICZ2ZXJzaW9uLCAmb2JqZWN0cywgJm9iamVjdENvdW50LCAmcHJvdG9jb2xQcm9wZXJ0
aWVzLCBudWxscHRyLCBudWxscHRyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBh
dXRvIGNmUmVxdWVzdCA9IGFkb3B0Q0YoX0NGVVJMUmVxdWVzdENyZWF0ZUZyb21BcmNoaXZlTGlz
dChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB2ZXJzaW9uLCBvYmplY3RzLCBvYmplY3RDb3VudCwgcHJv
dG9jb2xQcm9wZXJ0aWVzKSk7Ci0gICAgZmFzdEZyZWUob2JqZWN0cyk7Ci0gICAgcmV0dXJuIFdU
Rk1vdmUoY2ZSZXF1ZXN0KTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKE5TVVJMUmVxdWVzdCAqcmVxdWVzdCwg
Q0ZUeXBlUmVmIHRva2VuTnVsbCkKLXsKLSAgICByZXR1cm4gY3JlYXRlU2VyaWFsaXphYmxlUmVw
cmVzZW50YXRpb24oW3JlcXVlc3QgX0NGVVJMUmVxdWVzdF0sIHRva2VuTnVsbCk7Ci19Ci0KLXN0
YXRpYyBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiBjcmVhdGVOU1VSTFJlcXVlc3RGcm9tU2VyaWFs
aXphYmxlUmVwcmVzZW50YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIHJlcHJlc2VudGF0aW9uLCBDRlR5
cGVSZWYgdG9rZW5OdWxsKQotewotICAgIGF1dG8gY2ZSZXF1ZXN0ID0gY3JlYXRlQ0ZVUkxSZXF1
ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKHJlcHJlc2VudGF0aW9uLCB0b2tlbk51
bGwpOwotICAgIGlmICghY2ZSZXF1ZXN0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAK
LSAgICByZXR1cm4gYWRvcHROUyhbW05TVVJMUmVxdWVzdCBhbGxvY10gX2luaXRXaXRoQ0ZVUkxS
ZXF1ZXN0OmNmUmVxdWVzdC5nZXQoKV0pOwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQotewotICAg
IFJldGFpblB0cjxOU1VSTFJlcXVlc3Q+IHJlcXVlc3RUb1NlcmlhbGl6ZSA9IHJlc291cmNlUmVx
dWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBk
YXRlSFRUUEJvZHkpOwotCi0gICAgYm9vbCByZXF1ZXN0SXNQcmVzZW50ID0gcmVxdWVzdFRvU2Vy
aWFsaXplOwotICAgIGVuY29kZXIgPDwgcmVxdWVzdElzUHJlc2VudDsKLQotICAgIGlmICghcmVx
dWVzdElzUHJlc2VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgZG9uJ3Qgc2VuZCBI
VFRQIGJvZHkgb3ZlciBJUEMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KLSAgICAvLyBBbHNvLCBp
dCdzIG5vdCBhbHdheXMgcG9zc2libGUgdG8gZG8sIGFzIHN0cmVhbXMgY2FuIG9ubHkgYmUgY3Jl
YXRlZCBpbiBwcm9jZXNzIHRoYXQgZG9lcyBuZXR3b3JraW5nLgotICAgIGlmIChbcmVxdWVzdFRv
U2VyaWFsaXplIEhUVFBCb2R5XSB8fCBbcmVxdWVzdFRvU2VyaWFsaXplIEhUVFBCb2R5U3RyZWFt
XSkgewotICAgICAgICByZXF1ZXN0VG9TZXJpYWxpemUgPSBhZG9wdE5TKFtyZXF1ZXN0VG9TZXJp
YWxpemUgbXV0YWJsZUNvcHldKTsKLSAgICAgICAgWyhOU011dGFibGVVUkxSZXF1ZXN0ICopcmVx
dWVzdFRvU2VyaWFsaXplIHNldEhUVFBCb2R5Om5pbF07Ci0gICAgICAgIFsoTlNNdXRhYmxlVVJM
UmVxdWVzdCAqKXJlcXVlc3RUb1NlcmlhbGl6ZSBzZXRIVFRQQm9keVN0cmVhbTpuaWxdOwotICAg
IH0KLQotICAgIGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0
aW9uKHJlcXVlc3RUb1NlcmlhbGl6ZS5nZXQoKSwgSVBDOjp0b2tlbk51bGxwdHJUeXBlUmVmKCkp
OwotICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIGRpY3Rpb25hcnkuZ2V0KCkpOwotCi0gICAgV0VC
Q09SRV9BUkdVTUVOVENPREVSU19NQUNfRU5DT0RFX0FERElUSU9OUwotCi0gICAgLy8gVGhlIGZh
bGxiYWNrIGFycmF5IGlzIHBhcnQgb2YgTlNVUkxSZXF1ZXN0LCBidXQgaXQgaXMgbm90IGVuY29k
ZWQgYnkgV0tOU1VSTFJlcXVlc3RDcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbi4KLSAg
ICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheSgpOwotICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LnJl
cXVlc3RlcigpOwotICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LmNhY2hlUG9saWN5KCk7
Ci0gICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QuaXNBcHBCb3VuZCgpOwotfQotCi1ib29s
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1E
YXRhKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VS
ZXF1ZXN0KQotewotICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudDsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlcXVlc3RJc1ByZXNlbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoIXJlcXVlc3RJc1ByZXNlbnQpIHsKLSAgICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0gV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGRpY3Rpb25hcnk7Ci0gICAgaWYgKCFJUEM6OmRl
Y29kZShkZWNvZGVyLCBkaWN0aW9uYXJ5KSB8fCAhZGljdGlvbmFyeSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byBuc1VSTFJlcXVlc3QgPSBjcmVhdGVOU1VSTFJlcXVlc3RGcm9t
U2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oZGljdGlvbmFyeS5nZXQoKSwgSVBDOjp0b2tlbk51
bGxwdHJUeXBlUmVmKCkpOwotICAgIGlmICghbnNVUkxSZXF1ZXN0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBXRUJDT1JFX0FSR1VNRU5UQ09ERVJTX01BQ19ERUNPREVfQURESVRJT05T
Ci0KLSAgICByZXNvdXJjZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QobnNVUkxS
ZXF1ZXN0LmdldCgpKTsKLSAgICAKLSAgICBWZWN0b3I8U3RyaW5nPiByZXNwb25zZUNvbnRlbnRE
aXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzb3VyY2VSZXF1ZXN0LnNldFJlc3BvbnNlQ29udGVu
dERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KAotICAgICAgICByZXNwb25zZUNvbnRl
bnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkgPiAwID8gcmVzcG9uc2VD
b250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMF0gOiBTdHJpbmcoKSwKLSAg
ICAgICAgcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6
ZSgpID4gMSA/IHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
WzFdIDogU3RyaW5nKCksCi0gICAgICAgIHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2Rp
bmdGYWxsYmFja0FycmF5LnNpemUoKSA+IDIgPyByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheVsyXSA6IFN0cmluZygpCi0gICAgKTsKLQotICAgIFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlcXVlc3RlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXNvdXJjZVJl
cXVlc3Quc2V0UmVxdWVzdGVyKHJlcXVlc3Rlcik7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3RDYWNoZVBvbGljeSBjYWNoZVBvbGljeTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNh
Y2hlUG9saWN5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc291cmNlUmVxdWVzdC5z
ZXRDYWNoZVBvbGljeShjYWNoZVBvbGljeSk7Ci0KLSAgICBib29sIGlzQXBwQm91bmQ7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShpc0FwcEJvdW5kKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJlc291cmNlUmVxdWVzdC5zZXRJc0FwcEJvdW5kKGlzQXBwQm91bmQpOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUlu
Zm8+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJ
bmZvJiBjZXJ0aWZpY2F0ZUluZm8pCiB7CiAgICAgZW5jb2RlciA8PCBjZXJ0aWZpY2F0ZUluZm8u
dHlwZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDRhZWQ2OWI0ZDU3NjE2YWE4ZjM1ZWU4MDliZGY3Mjk4M2RjNjMzODkuLmM1Njk5MWM5MGRm
ZGJlNDg2OTJlMTgxNDUwOGVhNGNiMmU3MDA0YTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMS0wMi0yMyAgQnJl
bnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTZXJpYWxpemUgTlNV
UkxSZXF1ZXN0IChyYXRoZXIgdGhhbiBDRlVSTFJlcXVlc3QpIGluIElQQworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMTQ1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS83NDUwMDk2Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlciBh
bmQgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICBBZGQgYSBuZXcgdGVzdCB0byBlbnN1cmUg
d2UgY2FuIHN1Y2Nlc3NmdWxseSBsb2FkIFVSTHMgd2l0aCBhY2NlbnRlZCBjaGFyYWN0ZXJzLAor
ICAgICAgICBhbmQgdG8gdGVzdCB0aGUgdXBkYXRlZCBJUEMgc2VyaWFsaXphdGlvbiBmb3IgTlNV
UkxSZXF1ZXN0LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvQS8zMDMv
MjQ3LzMwMy8yNDNvLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV0tXZWJWaWV3TG9hZEFQSXMubW06CisgICAgICAgIChURVNUKToKKwogMjAy
MS0wMi0yMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBh
ZG9wdE5TKCkgYXMgc29vbiBhcyB3ZSBbW09iamNDbGFzcyBhbGxvY10gaW5pdF0gdG8gYXZvaWQg
bGVha3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V0tXZWJWaWV3TG9hZEFQSXMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLV2ViVmlld0xvYWRBUElzLm1tCmluZGV4IGJlZDUwMGVhMzM5NDVhODFlNjhkODg4Mzdm
YTkwYWY3Y2U1NzIwOGEuLmM2ZThhYzQ0NTY2ZDQ1ZjYyOTZhYThhODVmZjkyMWRhNWFhOTRlYWIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJW
aWV3TG9hZEFQSXMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS1dlYlZpZXdMb2FkQVBJcy5tbQpAQCAtMTMyLDMgKzEzMiw0MiBAQCBURVNUKFdLV2ViVmll
dywgTG9hZFNpbXVsYXRlZFJlcXVlc3RVcGRhdGVzQmFja0ZvcndhcmRMaXN0KQogICAgIEVYUEVD
VF9UUlVFKCFsaXN0LmZvcndhcmRJdGVtKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoZXhhbXBsZVVS
TFN0cmluZywgW2xpc3QuYmFja0l0ZW0uVVJMIGFic29sdXRlU3RyaW5nXSk7CiB9CisKK1RFU1Qo
V0tXZWJWaWV3LCBMb2FkQWNjZW50ZWRGaWxlUmVxdWVzdCkKK3sKKyAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgODAwLCA2MDApXSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3ROYXZp
Z2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9u
RGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgY29uc3QgVUludDggYnl0ZXNbNl0gPSB7
ICdBJywgMHhDMywgMHhBNywgMHhDMywgMHhBMywgJ28nIH07CisgICAgYXV0byBmaWxlTmFtZSA9
IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhCeXRlczpieXRlcyBsZW5ndGg6NiBl
bmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pOworCisgICAgLy8gVGhpcyBhdm9pZHMgaGF2
aW5nIHRvIGFkZCB1bmljb2RlIGZpbGVuYW1lcyB0byBnaXQuCisgICAgTlNVUkwgKm9yaWdpbmFs
RmlsZSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdp
dGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyJdOworICAgIEVYUEVDVF9OT1RfTlVMTChvcmlnaW5hbEZpbGUpOworCisgICAgTlNTdHJpbmcg
KnRlc3REaXJlY3RvcnlTdHJpbmcgPSBbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6W1tOU1VVSUQgVVVJRF0gVVVJRFN0cmluZ11dOworICAgIE5T
VVJMICp0ZXN0RGlyZWN0b3J5ID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDogdGVzdERpcmVjdG9y
eVN0cmluZ107CisKKyAgICBOU1N0cmluZyAqdGVzdEZpbGVTdHJpbmcgPSBbW3Rlc3REaXJlY3Rv
cnlTdHJpbmcgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OmZpbGVOYW1lLmdldCgpXSBz
dHJpbmdCeUFwcGVuZGluZ1BhdGhFeHRlbnNpb246QCJodG1sIl07CisgICAgTlNVUkwgKnRlc3RG
aWxlID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDp0ZXN0RmlsZVN0cmluZ107CisKKyAgICBhdXRv
IGRlZmF1bHRNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOworICAgIFtk
ZWZhdWx0TWFuYWdlciByZW1vdmVJdGVtQXRVUkw6dGVzdEZpbGUgZXJyb3I6bmlsXTsKKyAgICBb
ZGVmYXVsdE1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOnRlc3REaXJlY3RvcnkgZXJyb3I6bmlsXTsK
KworICAgIFtkZWZhdWx0TWFuYWdlciBjcmVhdGVEaXJlY3RvcnlBdFVSTDp0ZXN0RGlyZWN0b3J5
IHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmls
XTsKKworICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgIFtkZWZhdWx0TWFuYWdlciBjb3B5
SXRlbUF0VVJMOm9yaWdpbmFsRmlsZSB0b1VSTDp0ZXN0RmlsZSBlcnJvcjomZXJyb3JdOworICAg
IEVYUEVDVF9OVUxMKGVycm9yKTsKKyAgICAKKyAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3QgPSBb
TlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RGaWxlXTsKKyAgICBbd2ViVmlldyBsb2Fk
RmlsZVJlcXVlc3Q6cmVxdWVzdCBhbGxvd2luZ1JlYWRBY2Nlc3NUb1VSTDp0ZXN0RmlsZS5VUkxC
eURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnRdOworICAgIFtkZWxlZ2F0ZSB3YWl0Rm9yRGlkRmlu
aXNoTmF2aWdhdGlvbl07CisgICAgRVhQRUNUX1dLX1NUUkVRKHdlYlZpZXcuZ2V0KCkuX3Jlc291
cmNlRGlyZWN0b3J5VVJMLnBhdGgsIHRlc3RGaWxlLlVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBv
bmVudC5wYXRoKTsKKworICAgIFtkZWZhdWx0TWFuYWdlciByZW1vdmVJdGVtQXRVUkw6dGVzdEZp
bGUgZXJyb3I6bmlsXTsKKyAgICBbZGVmYXVsdE1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOnRlc3RE
aXJlY3RvcnkgZXJyb3I6bmlsXTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421430</attachid>
            <date>2021-02-24 11:16:20 -0800</date>
            <delta_ts>2021-02-24 14:21:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222145-20210224111619.patch</filename>
            <type>text/plain</type>
            <size>31280</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMjc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGViNTc5NDQ4Yjk1YjFjZTJl
MjQwNjI3NzU3ZDAyYWM0Mjg2MjkzZmQuLmJhYzJmYjRhMGZkOWVjNDA0YmJkOGJkMmQwYWQ1MGI5
ZThjMjE1NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMjEtMDItMjMgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVx
dWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIEFs
ZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5nIGxheW91dCBhbmQg
V2ViS2l0QVBJIHRlc3RzLgorCisgICAgICAgIFJldmlzZSBJUEMgc2VyaWFsaXphdGlvbiBzbyB0
aGF0IE5TVVJMQ29ubmVjdGlvbiAobW9kZXJuKSBDb2NvYSBidWlsZHMgc2VyaWFsaXplIHRoZQor
ICAgICAgICBOU1VSTFJlcXVlc3Qgb2JqZWN0LCByYXRoZXIgdGhhbiBicmlkZ2luZyB0byBDRlVS
TFJlcXVlc3QgYW5kIHNlcmlhbGl6aW5nIHRoYXQuIFRoaXMKKyAgICAgICAgZW5zdXJlcyB0aGF0
IHRoZSBmdWxsIHNldCBvZiBOU1VSTFJlcXVlc3QgZmVhdHVyZXMgYXJlIGFjY3VyYXRlbHkgcmVj
b25zdGl0dXRlZCBvbiB0aGUKKyAgICAgICAgcmVjZWl2aW5nIHNpZGUgb2YgdGhlIGNvbm5lY3Rp
b24uCisKKyAgICAgICAgQmVjYXVzZSBOU1VSTCBzZXJpYWxpemF0aW9uIGRvZXNuJ3QgaGFuZGxl
IHNvbWUgZW5jb2RlZCBwYXJhbWV0ZXJzIHByb3Blcmx5LCB3ZSBpbXBsZW1lbnQKKyAgICAgICAg
YW4gYXJjaGl2aW5nIGRlbGVnYXRlIHRvIGFyY2hpdmUgdGhlIFVSTCBsaWtlIHdlIGRvIGZvciBD
RlVSTC4KKworICAgICAgICAqIFNoYXJlZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tOgor
ICAgICAgICAoLVtXS1NlY3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlIGFyY2hpdmVyOndpbGxF
bmNvZGVPYmplY3Q6XSk6IEFkZGVkLgorICAgICAgICAoLVtXS1NlY3VyZUNvZGluZ0FyY2hpdmlu
Z0RlbGVnYXRlIHVuYXJjaGl2ZXI6ZGlkRGVjb2RlT2JqZWN0Ol0pOiBBZGRlZC4KKyAgICAgICAg
KCtbV0tFbmNvZGVkVVJMIHN1cHBvcnRzU2VjdXJlQ29kaW5nXSk6IEFkZGVkLgorICAgICAgICAo
LVtXS0VuY29kZWRVUkwgZW5jb2RlV2l0aENvZGVyOl0pOiBBZGRlZC4KKyAgICAgICAgKC1bV0tF
bmNvZGVkVVJMIGluaXRXaXRoQ29kZXI6XSk6IEFkZGVkLgorICAgICAgICAoLVtXS0VuY29kZWRV
UkwgaW5pdFdpdGhVUkw6XSk6IEFkZGVkLgorICAgICAgICAoSVBDOjplbmNvZGVTZWN1cmVDb2Rp
bmdJbnRlcm5hbCk6IFVwZGF0ZSB0byB1c2UgbmV3IGRlbGVnYXRlLgorICAgICAgICAoSVBDOjpk
ZWNvZGVTZWN1cmVDb2RpbmdJbnRlcm5hbCk6IERpdHRvLgorICAgICAgICAoLVtXS1NlY3VyZUNv
ZGluZ0ZvbnRBdHRyaWJ1dGVOb3JtYWxpemVyIGFyY2hpdmVyOndpbGxFbmNvZGVPYmplY3Q6XSk6
IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0Nv
Y29hLm1tOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YSk6IEFkZCBOU1VSTFJlcXVlc3QgZW5jb2RpbmcuCisg
ICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVj
b2RlUGxhdGZvcm1EYXRhKTogQWRkIE5TVVJMUmVxdWVzdCBkZWNvZGluZy4KKyAgICAgICAgKiBT
aGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbToKKyAgICAgICAgKElQQzo6Y3Jl
YXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpl
eHRyYWN0RGljdGlvbmFyeVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6Y3JlYXRlQXJj
aGl2ZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpjcmVhdGVDRlVSTFJlcXVlc3RGcm9t
U2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpjcmVh
dGVOU1VSTFJlcXVlc3RGcm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmVu
Y29kZVBsYXRmb3JtRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKTogRGVsZXRlZC4K
KwogMjAyMS0wMi0yMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFVzZSBhZG9wdE5TKCkgYXMgc29vbiBhcyB3ZSBbW09iamNDbGFzcyBhbGxvY10gaW5pdF0gdG8g
YXZvaWQgbGVha3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0FyZ3Vt
ZW50Q29kZXJzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9Bcmd1bWVudENv
ZGVyc0NvY29hLm1tCmluZGV4IGJkM2FlYzMxYzMzZGI1N2Y2ZjgyMjdlMzU2OTFhYTNiODc0MGY4
N2EuLmVmN2YxZGM1YmExMDc0YjkxYzkzY2NiZTc5ZDI0NDAwNDUwM2ZhYzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0FyZ3VtZW50Q29kZXJzQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQXJndW1lbnRDb2RlcnNDb2NvYS5tbQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgsIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Niw2ICszNiw4IEBACiAjaW1wb3J0IDxDb3JlVGV4dC9DVEZvbnREZXNjcmlwdG9yLmg+CiAjaW1w
b3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4K
KyNpbXBvcnQgPHd0Zi9jZi9DRlVSTEV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL2NvY29hL05TVVJM
RXh0cmFzLmg+CiAKICNpZiBVU0UoQVBQS0lUKQogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5o
PgpAQCAtNDksMjggKzUxLDkwIEBACiAjaW1wb3J0IDxVSUtpdC9VSUZvbnREZXNjcmlwdG9yLmg+
CiAjZW5kaWYKIAotI2lmIEhBVkUoTlNGT05UX1dJVEhfT1BUSUNBTF9TSVpJTkdfQlVHKQorQGlu
dGVyZmFjZSBXS1NlY3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlIDogTlNPYmplY3QgPE5TS2V5
ZWRBcmNoaXZlckRlbGVnYXRlLCBOU0tleWVkVW5hcmNoaXZlckRlbGVnYXRlPgorQGVuZAogCi1A
aW50ZXJmYWNlIFdLU2VjdXJlQ29kaW5nRm9udEF0dHJpYnV0ZU5vcm1hbGl6ZXIgOiBOU09iamVj
dCA8TlNLZXllZEFyY2hpdmVyRGVsZWdhdGU+CitAaW50ZXJmYWNlIFdLRW5jb2RlZFVSTCA6IE5T
T2JqZWN0IDxOU1NlY3VyZUNvZGluZz4KKy0gKGluc3RhbmNldHlwZSBfTnVsbGFibGUpaW5pdFdp
dGhVUkw6KE5TVVJMICpfTnVsbGFibGUpdXJsOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5LCBudWxsYWJsZSkgTlNVUkwgKnVybDsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIFdLU2Vj
dXJlQ29kaW5nRm9udEF0dHJpYnV0ZU5vcm1hbGl6ZXIKK0BpbXBsZW1lbnRhdGlvbiBXS1NlY3Vy
ZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlCiAKLS0gKGlkKWFyY2hpdmVyOihOU0tleWVkQXJjaGl2
ZXIgKilhcmNoaXZlciB3aWxsRW5jb2RlT2JqZWN0OihpZClvYmplY3QKKy0gKG51bGxhYmxlIGlk
KWFyY2hpdmVyOihOU0tleWVkQXJjaGl2ZXIgKl9Ob25udWxsKWFyY2hpdmVyIHdpbGxFbmNvZGVP
YmplY3Q6KGlkIF9Ob25udWxsKW9iamVjdAogewotICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xh
c3M6W05TRm9udCBjbGFzc11dKSB7Ci0gICAgICAgIE5TRm9udCAqZm9udCA9IHN0YXRpY19jYXN0
PE5TRm9udCAqPihvYmplY3QpOworI2lmIEhBVkUoTlNGT05UX1dJVEhfT1BUSUNBTF9TSVpJTkdf
QlVHKQorICAgIGlmIChhdXRvICpmb250ID0gZHluYW1pY19vYmpjX2Nhc3Q8TlNGb250PihvYmpl
Y3QpKSB7CiAgICAgICAgIC8vIFJlY3JlYXRlIGFueSBzZXJpYWxpemVkIGZvbnRzIGFmdGVyIG5v
cm1hbGl6aW5nIHRoZQogICAgICAgICAvLyBmb250IGF0dHJpYnV0ZXMgdG8gd29yayBhcm91bmQg
PHJkYXI6Ly9wcm9ibGVtLzUxNjU3ODgwPi4KICAgICAgICAgcmV0dXJuIFdlYktpdDo6Zm9udFdp
dGhBdHRyaWJ1dGVzKGZvbnQuZm9udERlc2NyaXB0b3IuZm9udEF0dHJpYnV0ZXMsIDApOwogICAg
IH0KKyNlbmRpZgorCisgICAgaWYgKGF1dG8gKnVybCA9IGR5bmFtaWNfb2JqY19jYXN0PE5TVVJM
PihvYmplY3QpKQorICAgICAgICByZXR1cm4gYWRvcHROUyhbW1dLRW5jb2RlZFVSTCBhbGxvY10g
aW5pdFdpdGhVUkw6dXJsXSkuYXV0b3JlbGVhc2UoKTsKIAogICAgIHJldHVybiBvYmplY3Q7CiB9
CiAKKy0gKGlkIF9OdWxsYWJsZSl1bmFyY2hpdmVyOihOU0tleWVkVW5hcmNoaXZlciAqX05vbm51
bGwpdW5hcmNoaXZlciBkaWREZWNvZGVPYmplY3Q6KGlkIF9OdWxsYWJsZSkgTlNfUkVMRUFTRVNf
QVJHVU1FTlQgb2JqZWN0IE5TX1JFVFVSTlNfUkVUQUlORUQKK3sKKyAgICBhdXRvIG9iamVjdFB0
ciA9IGFkb3B0TlMob2JqZWN0KTsKKyAgICBpZiAoYXV0byAqZW5jb2RlZFVSTCA9IGR5bmFtaWNf
b2JqY19jYXN0PFdLRW5jb2RlZFVSTD4ob2JqZWN0UHRyLmdldCgpKSkKKyAgICAgICAgcmV0dXJu
IHJldGFpblB0cihlbmNvZGVkVVJMLnVybCkubGVha1JlZigpOworCisgICAgcmV0dXJuIG9iamVj
dFB0ci5sZWFrUmVmKCk7Cit9CisKIEBlbmQKIAotI2VuZGlmCitAaW1wbGVtZW50YXRpb24gV0tF
bmNvZGVkVVJMIHsKKyAgICBSZXRhaW5QdHI8TlNVUkw+IG1fdXJsOworfQorCistIChOU1VSTCAq
X051bGxhYmxlKXVybAoreworICAgIHJldHVybiBtX3VybC5nZXQoKTsKK30KKworKyAoQk9PTClz
dXBwb3J0c1NlY3VyZUNvZGluZworeworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKHZvaWQpZW5j
b2RlV2l0aENvZGVyOihOU0NvZGVyICpfTm9ubnVsbCljb2RlcgoreworICAgIFdURjo6VVJMQ2hh
ckJ1ZmZlciB1cmxCeXRlczsKKyAgICBXVEY6OmdldFVSTEJ5dGVzKChfX2JyaWRnZSBDRlVSTFJl
ZiltX3VybC5nZXQoKSwgdXJsQnl0ZXMpOworICAgIFtjb2RlciBlbmNvZGVCeXRlczp1cmxCeXRl
cy5kYXRhKCkgbGVuZ3RoOnVybEJ5dGVzLnNpemUoKV07Cit9CisKKy0gKF9OdWxsYWJsZSBpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb2RlcjooTlNDb2RlciAqX05vbm51bGwpY29kZXIKK3sKKyAgICBh
dXRvIHNlbGZQdHIgPSBhZG9wdE5TKFtzdXBlciBpbml0XSk7CisgICAgaWYgKHNlbGZQdHIpIHsK
KyAgICAgICAgTlNVSW50ZWdlciBsZW5ndGg7CisgICAgICAgIGF1dG8gYnl0ZXMgPSAodWludDhf
dCAqKVtjb2RlciBkZWNvZGVCeXRlc1dpdGhSZXR1cm5lZExlbmd0aDombGVuZ3RoXTsKKyAgICAg
ICAgaWYgKCFieXRlcykKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAgICAgbV91cmwg
PSByZXRhaW5QdHIoV1RGOjpVUkxXaXRoRGF0YShbTlNEYXRhIGRhdGFXaXRoQnl0ZXNOb0NvcHk6
Ynl0ZXMgbGVuZ3RoOmxlbmd0aCBmcmVlV2hlbkRvbmU6Tk9dLCBuaWwpKTsKKyAgICAgICAgaWYg
KCFtX3VybCkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorCisgICAgcmV0dXJuIHNl
bGZQdHIubGVha1JlZigpOworfQorCistIChfTnVsbGFibGUgaW5zdGFuY2V0eXBlKWluaXRXaXRo
VVJMOihOU1VSTCAqIF9OdWxsYWJsZSl1cmwKK3sKKyAgICBpZiAoc2VsZiA9IFtzdXBlciBpbml0
XSkKKyAgICAgICAgbV91cmwgPSByZXRhaW5QdHIodXJsKTsKKworICAgIHJldHVybiBzZWxmOwor
fQorCitAZW5kCiAKIG5hbWVzcGFjZSBJUEMgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBA
IC05Myw3ICsxNTcsNyBAQCBlbnVtIGNsYXNzIE5TVHlwZSB7CiAKICNwcmFnbWEgbWFyayAtIEhl
bHBlcnMKIAotc3RhdGljIE5TVHlwZSB0eXBlRnJvbU9iamVjdChpZCBvYmplY3QpCitzdGF0aWMg
TlNUeXBlIHR5cGVGcm9tT2JqZWN0KGlkIF9Ob25udWxsIG9iamVjdCkKIHsKICAgICBBU1NFUlQo
b2JqZWN0KTsKIApAQCAtMTI3LDEyICsxOTEsMTIgQEAgc3RhdGljIE5TVHlwZSB0eXBlRnJvbU9i
amVjdChpZCBvYmplY3QpCiAgICAgcmV0dXJuIE5TVHlwZTo6VW5rbm93bjsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIGlzU2VyaWFsaXphYmxlRm9udChDVEZvbnRSZWYgZm9udCkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBpc1NlcmlhbGl6YWJsZUZvbnQoQ1RGb250UmVmIF9OdWxsYWJsZSBmb250KQog
ewogICAgIHJldHVybiBhZG9wdENGKENURm9udENvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9udFVS
TEF0dHJpYnV0ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNTZXJpYWxpemFibGVWYWx1
ZShpZCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NlcmlhbGl6YWJsZVZhbHVlKGlkIF9O
dWxsYWJsZSB2YWx1ZSkKIHsKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W0NvY29hRm9u
dCBjbGFzc11dKQogICAgICAgICByZXR1cm4gaXNTZXJpYWxpemFibGVGb250KChfX2JyaWRnZSBD
VEZvbnRSZWYpdmFsdWUpOwpAQCAtMTQxLDcgKzIwNSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBp
c1NlcmlhbGl6YWJsZVZhbHVlKGlkIHZhbHVlKQogCiAjcHJhZ21hIG1hcmsgLSBOU0FycmF5CiAK
LXN0YXRpYyB2b2lkIGVuY29kZUFycmF5SW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNBcnJh
eSAqYXJyYXkpCitzdGF0aWMgdm9pZCBlbmNvZGVBcnJheUludGVybmFsKEVuY29kZXImIGVuY29k
ZXIsIE5TQXJyYXkgKl9OdWxsYWJsZSBhcnJheSkKIHsKICAgICAvLyBFdmVuIHRob3VnaCBOU0Fy
cmF5IGlzIHRvbGwgZnJlZSBicmlkZ2VkIHdpdGggQ0ZBcnJheVJlZiwgdmFsdWVzIG1heSBub3Qg
YmUsCiAgICAgLy8gc28gd2Ugc2hvdWxkIHN0YXkgd2l0aGluIHRoaXMgZmlsZSdzIGNvZGUuCkBA
IC0xNzAsNyArMjM0LDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlQXJyYXlJbnRlcm5hbChFbmNvZGVy
JiBlbmNvZGVyLCBOU0FycmF5ICphcnJheSkKICAgICB9CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxS
ZXRhaW5QdHI8aWQ+PiBkZWNvZGVBcnJheUludGVybmFsKERlY29kZXImIGRlY29kZXIsIE5TQXJy
YXk8Q2xhc3M+ICphbGxvd2VkQ2xhc3NlcykKK3N0YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+
PiBkZWNvZGVBcnJheUludGVybmFsKERlY29kZXImIGRlY29kZXIsIE5TQXJyYXk8Q2xhc3M+ICog
X05vbm51bGwgYWxsb3dlZENsYXNzZXMpCiB7CiAgICAgdWludDY0X3Qgc2l6ZTsKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHNpemUpKQpAQCAtMTkwLDcgKzI1NCw3IEBAIHN0YXRpYyBPcHRpb25h
bDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVBcnJheUludGVybmFsKERlY29kZXImIGRlY29kZXIsIE5T
QXJyYXk8Q2xhCiAjcHJhZ21hIG1hcmsgLSBOU0NvbG9yIC8gVUlDb2xvcgogCiAjaWYgVVNFKEFQ
UEtJVCkKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVDb2xvckludGVybmFsKEVuY29kZXImIGVu
Y29kZXIsIE5TQ29sb3IgKmNvbG9yKQorc3RhdGljIGlubGluZSB2b2lkIGVuY29kZUNvbG9ySW50
ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNDb2xvciAqX05vbm51bGwgY29sb3IpCiB7CiAgICAg
ZW5jb2RlciA8PCBjb2xvckZyb21OU0NvbG9yKGNvbG9yKTsKIH0KQEAgLTIwMyw3ICsyNjcsNyBA
QCBzdGF0aWMgaW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZUNvbG9ySW50ZXJu
YWwoRGVjb2RlciYgZGVjb2RlcikKICAgICByZXR1cm4geyBuc0NvbG9yKGNvbG9yKSB9OwogfQog
I2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVDb2xvckludGVybmFsKEVuY29kZXImIGVu
Y29kZXIsIFVJQ29sb3IgKmNvbG9yKQorc3RhdGljIGlubGluZSB2b2lkIGVuY29kZUNvbG9ySW50
ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgVUlDb2xvciAqX05vbm51bGwgY29sb3IpCiB7CiAgICAg
ZW5jb2RlciA8PCBjb2xvckZyb21VSUNvbG9yKGNvbG9yKTsKIH0KQEAgLTIxOSw3ICsyODMsNyBA
QCBzdGF0aWMgaW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZUNvbG9ySW50ZXJu
YWwoRGVjb2RlciYgZGVjb2RlcikKIAogI3ByYWdtYSBtYXJrIC0gTlNEYXRhCiAKLXN0YXRpYyBp
bmxpbmUgdm9pZCBlbmNvZGVEYXRhSW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNEYXRhICpk
YXRhKQorc3RhdGljIGlubGluZSB2b2lkIGVuY29kZURhdGFJbnRlcm5hbChFbmNvZGVyJiBlbmNv
ZGVyLCBOU0RhdGEgKl9Ob25udWxsIGRhdGEpCiB7CiAgICAgZW5jb2RlKGVuY29kZXIsIChfX2Jy
aWRnZSBDRkRhdGFSZWYpZGF0YSk7CiB9CkBAIC0yMzQsNyArMjk4LDcgQEAgc3RhdGljIGlubGlu
ZSBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVEYXRhSW50ZXJuYWwoRGVjb2RlciYgZGVj
b2RlcikKIAogI3ByYWdtYSBtYXJrIC0gTlNEYXRlCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmNv
ZGVEYXRlSW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNEYXRlICpkYXRlKQorc3RhdGljIGlu
bGluZSB2b2lkIGVuY29kZURhdGVJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU0RhdGUgKl9O
b25udWxsIGRhdGUpCiB7CiAgICAgZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBDRkRhdGVSZWYp
ZGF0ZSk7CiB9CkBAIC0yNDksNyArMzEzLDcgQEAgc3RhdGljIGlubGluZSBPcHRpb25hbDxSZXRh
aW5QdHI8aWQ+PiBkZWNvZGVEYXRlSW50ZXJuYWwoRGVjb2RlciYgZGVjb2RlcikKIAogI3ByYWdt
YSBtYXJrIC0gTlNEaWN0aW9uYXJ5CiAKLXN0YXRpYyB2b2lkIGVuY29kZURpY3Rpb25hcnlJbnRl
cm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkpCitzdGF0aWMg
dm9pZCBlbmNvZGVEaWN0aW9uYXJ5SW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNEaWN0aW9u
YXJ5ICpfTm9ubnVsbCBkaWN0aW9uYXJ5KQogewogICAgIC8vIEV2ZW4gdGhvdWdoIE5TRGljdGlv
bmFyeSBpcyB0b2xsIGZyZWUgYnJpZGdlZCB3aXRoIENGRGljdGlvbmFyeVJlZiwga2V5cy92YWx1
ZXMgbWF5IG5vdCBiZSwKICAgICAvLyBzbyB3ZSBzaG91bGQgc3RheSB3aXRoaW4gdGhpcyBmaWxl
J3MgY29kZS4KQEAgLTI4MSw3ICszNDUsNyBAQCBzdGF0aWMgdm9pZCBlbmNvZGVEaWN0aW9uYXJ5
SW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQogICAg
IH0KIH0KIAotc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZURpY3Rpb25hcnlJ
bnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyLCBOU0FycmF5PENsYXNzPiAqYWxsb3dlZENsYXNzZXMp
CitzdGF0aWMgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2RlRGljdGlvbmFyeUludGVybmFs
KERlY29kZXImIGRlY29kZXIsIE5TQXJyYXk8Q2xhc3M+ICpfTm9ubnVsbCBhbGxvd2VkQ2xhc3Nl
cykKIHsKICAgICB1aW50NjRfdCBzaXplOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkp
CkBAIC0zMDUsNyArMzY5LDcgQEAgc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29k
ZURpY3Rpb25hcnlJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyLCBOU0FycmEKIAogI3ByYWdtYSBt
YXJrIC0gTlNGb250IC8gVUlGb250CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVGb250SW50
ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgQ29jb2FGb250ICpmb250KQorc3RhdGljIGlubGluZSB2
b2lkIGVuY29kZUZvbnRJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBDb2NvYUZvbnQgKl9Ob25u
dWxsIGZvbnQpCiB7CiAgICAgZW5jb2RlKGVuY29kZXIsIGZvbnQuZm9udERlc2NyaXB0b3IuZm9u
dEF0dHJpYnV0ZXMpOwogfQpAQCAtMzI3LDcgKzM5MSw3IEBAIHN0YXRpYyBPcHRpb25hbDxSZXRh
aW5QdHI8aWQ+PiBkZWNvZGVGb250SW50ZXJuYWwoRGVjb2RlciYgZGVjb2RlcikKIAogI3ByYWdt
YSBtYXJrIC0gTlNOdW1iZXIKIAotc3RhdGljIGlubGluZSB2b2lkIGVuY29kZU51bWJlckludGVy
bmFsKEVuY29kZXImIGVuY29kZXIsIE5TTnVtYmVyICpudW1iZXIpCitzdGF0aWMgaW5saW5lIHZv
aWQgZW5jb2RlTnVtYmVySW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNOdW1iZXIgKl9Ob25u
dWxsIG51bWJlcikKIHsKICAgICBlbmNvZGUoZW5jb2RlciwgKF9fYnJpZGdlIENGTnVtYmVyUmVm
KW51bWJlcik7CiB9CkBAIC0zNDIsMjYgKzQwNiwyMSBAQCBzdGF0aWMgaW5saW5lIE9wdGlvbmFs
PFJldGFpblB0cjxpZD4+IGRlY29kZU51bWJlckludGVybmFsKERlY29kZXImIGRlY29kZXIpCiAK
ICNwcmFnbWEgbWFyayAtIGlkIDxOU1NlY3VyZUNvZGluZz4KIAotc3RhdGljIHZvaWQgZW5jb2Rl
U2VjdXJlQ29kaW5nSW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgaWQgPE5TT2JqZWN0LCBOU1Nl
Y3VyZUNvZGluZz4gb2JqZWN0KQorc3RhdGljIHZvaWQgZW5jb2RlU2VjdXJlQ29kaW5nSW50ZXJu
YWwoRW5jb2RlciYgZW5jb2RlciwgaWQgPE5TT2JqZWN0LCBOU1NlY3VyZUNvZGluZz4gX05vbm51
bGwgb2JqZWN0KQogewogICAgIGF1dG8gYXJjaGl2ZXIgPSBhZG9wdE5TKFtbTlNLZXllZEFyY2hp
dmVyIGFsbG9jXSBpbml0UmVxdWlyaW5nU2VjdXJlQ29kaW5nOllFU10pOwogCi0jaWYgSEFWRShO
U0ZPTlRfV0lUSF9PUFRJQ0FMX1NJWklOR19CVUcpCi0gICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0
TlMoW1tXS1NlY3VyZUNvZGluZ0ZvbnRBdHRyaWJ1dGVOb3JtYWxpemVyIGFsbG9jXSBpbml0XSk7
CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS1NlY3VyZUNvZGluZ0FyY2hpdmluZ0Rl
bGVnYXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW2FyY2hpdmVyIHNldERlbGVnYXRlOmRlbGVnYXRl
LmdldCgpXTsKLSNlbmRpZgogCiAgICAgW2FyY2hpdmVyIGVuY29kZU9iamVjdDpvYmplY3QgZm9y
S2V5Ok5TS2V5ZWRBcmNoaXZlUm9vdE9iamVjdEtleV07CiAgICAgW2FyY2hpdmVyIGZpbmlzaEVu
Y29kaW5nXTsKLQotI2lmIEhBVkUoTlNGT05UX1dJVEhfT1BUSUNBTF9TSVpJTkdfQlVHKQogICAg
IFthcmNoaXZlciBzZXREZWxlZ2F0ZTpuaWxdOwotI2VuZGlmCiAKICAgICBlbmNvZGUoZW5jb2Rl
ciwgKF9fYnJpZGdlIENGRGF0YVJlZilbYXJjaGl2ZXIgZW5jb2RlZERhdGFdKTsKIH0KIAotc3Rh
dGljIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZVNlY3VyZUNvZGluZ0ludGVybmFsKERl
Y29kZXImIGRlY29kZXIsIE5TQXJyYXk8Q2xhc3M+ICphbGxvd2VkQ2xhc3NlcykKK3N0YXRpYyBP
cHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVTZWN1cmVDb2RpbmdJbnRlcm5hbChEZWNvZGVy
JiBkZWNvZGVyLCBOU0FycmF5PENsYXNzPiAqX05vbm51bGwgYWxsb3dlZENsYXNzZXMpCiB7CiAg
ICAgQVNTRVJUKGFsbG93ZWRDbGFzc2VzICYmIGFsbG93ZWRDbGFzc2VzLmNvdW50KTsKICAgICBp
ZiAoIWFsbG93ZWRDbGFzc2VzIHx8ICFhbGxvd2VkQ2xhc3Nlcy5jb3VudCkKQEAgLTM3Myw4ICs0
MzIsMTUgQEAgc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZVNlY3VyZUNvZGlu
Z0ludGVybmFsKERlY29kZXImIGRlY29kZXIsIE5TQXIKIAogICAgIGF1dG8gdW5hcmNoaXZlciA9
IGFkb3B0TlMoW1tOU0tleWVkVW5hcmNoaXZlciBhbGxvY10gaW5pdEZvclJlYWRpbmdGcm9tRGF0
YTooX19icmlkZ2UgTlNEYXRhICopZGF0YS5nZXQoKSBlcnJvcjpudWxscHRyXSk7CiAgICAgdW5h
cmNoaXZlci5nZXQoKS5kZWNvZGluZ0ZhaWx1cmVQb2xpY3kgPSBOU0RlY29kaW5nRmFpbHVyZVBv
bGljeVJhaXNlRXhjZXB0aW9uOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS1Nl
Y3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgdW5hcmNoaXZl
ci5nZXQoKS5kZWxlZ2F0ZSA9IGRlbGVnYXRlLmdldCgpOworCisgICAgYXV0byBhbGxvd2VkQ2xh
c3NTZXQgPSBbTlNNdXRhYmxlU2V0IHNldFdpdGhBcnJheTphbGxvd2VkQ2xhc3Nlc107CisgICAg
W2FsbG93ZWRDbGFzc1NldCBhZGRPYmplY3Q6V0tFbmNvZGVkVVJMLmNsYXNzXTsKKyAgICAKICAg
ICBAdHJ5IHsKLSAgICAgICAgaWQgcmVzdWx0ID0gW3VuYXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZD
bGFzc2VzOltOU1NldCBzZXRXaXRoQXJyYXk6YWxsb3dlZENsYXNzZXNdIGZvcktleTpOU0tleWVk
QXJjaGl2ZVJvb3RPYmplY3RLZXldOworICAgICAgICBpZCByZXN1bHQgPSBbdW5hcmNoaXZlciBk
ZWNvZGVPYmplY3RPZkNsYXNzZXM6YWxsb3dlZENsYXNzU2V0IGZvcktleTpOU0tleWVkQXJjaGl2
ZVJvb3RPYmplY3RLZXldOwogICAgICAgICBBU1NFUlQoIXJlc3VsdCB8fCBbcmVzdWx0IGNvbmZv
cm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woTlNTZWN1cmVDb2RpbmcpXSk7CiAgICAgICAgIHJldHVy
biB7IHJlc3VsdCB9OwogICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7CkBA
IC0zODIsMTIgKzQ0OCwxMyBAQCBzdGF0aWMgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2Rl
U2VjdXJlQ29kaW5nSW50ZXJuYWwoRGVjb2RlciYgZGVjb2RlciwgTlNBcgogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgIH0gQGZpbmFsbHkgewogICAgICAgICBbdW5hcmNoaXZlciBm
aW5pc2hEZWNvZGluZ107CisgICAgICAgIHVuYXJjaGl2ZXIuZ2V0KCkuZGVsZWdhdGUgPSBuaWw7
CiAgICAgfQogfQogCiAjcHJhZ21hIG1hcmsgLSBOU1N0cmluZwogCi1zdGF0aWMgaW5saW5lIHZv
aWQgZW5jb2RlU3RyaW5nSW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNTdHJpbmcgKnN0cmlu
ZykKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVTdHJpbmdJbnRlcm5hbChFbmNvZGVyJiBlbmNv
ZGVyLCBOU1N0cmluZyAqX05vbm51bGwgc3RyaW5nKQogewogICAgIGVuY29kZShlbmNvZGVyLCAo
X19icmlkZ2UgQ0ZTdHJpbmdSZWYpc3RyaW5nKTsKIH0KQEAgLTQwMiw5ICs0NjksOSBAQCBzdGF0
aWMgaW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZVN0cmluZ0ludGVybmFsKERl
Y29kZXImIGRlY29kZXIpCiAKICNwcmFnbWEgbWFyayAtIE5TVVJMCiAKLXN0YXRpYyBpbmxpbmUg
dm9pZCBlbmNvZGVVUkxJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU1VSTCAqVVJMKQorc3Rh
dGljIGlubGluZSB2b2lkIGVuY29kZVVSTEludGVybmFsKEVuY29kZXImIGVuY29kZXIsIE5TVVJM
ICpfTm9ubnVsbCB1cmwpCiB7Ci0gICAgZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBDRlVSTFJl
ZilVUkwpOworICAgIGVuY29kZShlbmNvZGVyLCAoX19icmlkZ2UgQ0ZVUkxSZWYpdXJsKTsKIH0K
IAogc3RhdGljIGlubGluZSBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVVUkxJbnRlcm5h
bChEZWNvZGVyJiBkZWNvZGVyKQpAQCAtNDE3LDcgKzQ4NCw3IEBAIHN0YXRpYyBpbmxpbmUgT3B0
aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2RlVVJMSW50ZXJuYWwoRGVjb2RlciYgZGVjb2RlcikK
IAogI3ByYWdtYSBtYXJrIC0gRW50cnkgUG9pbnQgRW5jb2RlciAvIERlY29kZXIKIAotdm9pZCBl
bmNvZGVPYmplY3QoRW5jb2RlciYgZW5jb2RlciwgaWQgb2JqZWN0KQordm9pZCBlbmNvZGVPYmpl
Y3QoRW5jb2RlciYgZW5jb2RlciwgaWQgX05vbm51bGwgb2JqZWN0KQogewogICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8Ym9vbD4oIW9iamVjdCk7CiAgICAgaWYgKCFvYmplY3QpCkBAIC00NjQs
NyArNTMxLDcgQEAgdm9pZCBlbmNvZGVPYmplY3QoRW5jb2RlciYgZW5jb2RlciwgaWQgb2JqZWN0
KQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1PcHRpb25hbDxSZXRhaW5QdHI8aWQ+
PiBkZWNvZGVPYmplY3QoRGVjb2RlciYgZGVjb2RlciwgTlNBcnJheTxDbGFzcz4gKmFsbG93ZWRD
bGFzc2VzKQorT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2RlT2JqZWN0KERlY29kZXImIGRl
Y29kZXIsIE5TQXJyYXk8Q2xhc3M+ICpfTm9ubnVsbCBhbGxvd2VkQ2xhc3NlcykKIHsKICAgICBi
b29sIGlzTnVsbDsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzTnVsbCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5t
bSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29h
Lm1tCmluZGV4IDc2YWZiNzJmZjJmZDRmOTdiNWNmMDEzMmVlYTliMzM3ZmE0NGFiNDMuLjJiNmE3
NTVkZjcwZjkxOGZkMDA0N2M3YjY3MGI3YTQ2ZDE2NmIyNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9Gb250Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0ZvbnRBdHRyaWJ1dGVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDdXN0b21QbGF0Zm9y
bURhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW1wb3J0IDxw
YWwvc3BpL2NmL0NvcmVUZXh0U1BJLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAt
NTQzLDQgKzU0NCw1OSBAQCBPcHRpb25hbDxGb250UGxhdGZvcm1EYXRhPiBBcmd1bWVudENvZGVy
PFJlZjxGb250Pj46OmRlY29kZVBsYXRmb3JtRGF0YShEZWNvZGVyJgogICAgIHJldHVybiBGb250
UGxhdGZvcm1EYXRhKGN0Rm9udC5nZXQoKSwgc2l6ZS52YWx1ZSgpLCBzeW50aGV0aWNCb2xkLnZh
bHVlKCksIHN5bnRoZXRpY09ibGlxdWUudmFsdWUoKSwgb3JpZW50YXRpb24udmFsdWUoKSwgd2lk
dGhWYXJpYW50LnZhbHVlKCksIHRleHRSZW5kZXJpbmdNb2RlLnZhbHVlKCkpOwogfQogCit2b2lk
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1E
YXRhKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVz
b3VyY2VSZXF1ZXN0KQoreworICAgIGF1dG8gcmVxdWVzdFRvU2VyaWFsaXplID0gcmV0YWluUHRy
KHJlc291cmNlUmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xp
Y3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpKTsKKworICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudCA9
IHJlcXVlc3RUb1NlcmlhbGl6ZTsKKyAgICBlbmNvZGVyIDw8IHJlcXVlc3RJc1ByZXNlbnQ7CisK
KyAgICBpZiAoIXJlcXVlc3RJc1ByZXNlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdl
IGRvbid0IHNlbmQgSFRUUCBib2R5IG92ZXIgSVBDIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisg
ICAgLy8gQWxzbywgaXQncyBub3QgYWx3YXlzIHBvc3NpYmxlIHRvIGRvLCBhcyBzdHJlYW1zIGNh
biBvbmx5IGJlIGNyZWF0ZWQgaW4gcHJvY2VzcyB0aGF0IGRvZXMgbmV0d29ya2luZy4KKyAgICBp
ZiAoW3JlcXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9keV0gfHwgW3JlcXVlc3RUb1NlcmlhbGl6ZSBI
VFRQQm9keVN0cmVhbV0pIHsKKyAgICAgICAgYXV0byBtdXRhYmxlUmVxdWVzdCA9IGFkb3B0TlMo
W3JlcXVlc3RUb1NlcmlhbGl6ZSBtdXRhYmxlQ29weV0pOworICAgICAgICBbbXV0YWJsZVJlcXVl
c3Qgc2V0SFRUUEJvZHk6bmlsXTsKKyAgICAgICAgW211dGFibGVSZXF1ZXN0IHNldEhUVFBCb2R5
U3RyZWFtOm5pbF07CisgICAgICAgIHJlcXVlc3RUb1NlcmlhbGl6ZSA9IFdURk1vdmUobXV0YWJs
ZVJlcXVlc3QpOworICAgIH0KKworICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIHJlcXVlc3RUb1Nl
cmlhbGl6ZS5nZXQoKSk7CisKKyAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXF1ZXN0
ZXIoKTsKKyAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5pc0FwcEJvdW5kKCk7Cit9CisK
K2Jvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0
Zm9ybURhdGEoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNv
dXJjZVJlcXVlc3QpCit7CisgICAgYm9vbCByZXF1ZXN0SXNQcmVzZW50OworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVxdWVzdElzUHJlc2VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghcmVxdWVzdElzUHJlc2VudCkgeworICAgICAgICByZXNvdXJjZVJlcXVlc3QgPSBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgYXV0byByZXF1ZXN0ID0gSVBDOjpkZWNvZGU8TlNVUkxSZXF1ZXN0PihkZWNvZGVyLCBO
U1VSTFJlcXVlc3QuY2xhc3MpOworICAgIGlmICghcmVxdWVzdCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyIHJlcXVl
c3RlcjsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVlc3RlcikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGJvb2wgaXNBcHBCb3VuZDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGlzQXBwQm91bmQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXNvdXJjZVJlcXVl
c3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QocmVxdWVzdC0+Z2V0KCkpOworICAgIHJlc291
cmNlUmVxdWVzdC5zZXRSZXF1ZXN0ZXIocmVxdWVzdGVyKTsKKyAgICByZXNvdXJjZVJlcXVlc3Qu
c2V0SXNBcHBCb3VuZChpc0FwcEJvdW5kKTsKKworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8v
IG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJD
b3JlQXJndW1lbnRDb2RlcnNNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzTWFjLm1tCmluZGV4IDBmNjA1ZmFkNTIxNzI1MTQxMGUyNWQ3YmJjOTFj
YjEzYzgxNGU1NDQuLmM1OTUwNjhhNmE0Yzc3ZDA2MTI4MGFhMjU3NDY0ZDY2YWEzYzEwMWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNN
YWMubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVy
c01hYy5tbQpAQCAtNDIsMjQ1ICs0MiwxNCBAQAogI2ltcG9ydCA8d3RmL01hY2hTZW5kUmlnaHQu
aD4KICNpbXBvcnQgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgogCi0jaWYgVVNFKEFQUExFX0lOVEVS
TkFMX1NESykKLSNpbmNsdWRlIDxXZWJLaXRBZGRpdGlvbnMvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
TWFjQWRkaXRpb25zLmg+Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19U
QVJHRVQpCiAjaW1wb3J0IDxXZWJDb3JlL01lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0Lmg+CiAj
aW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHBhbC9jb2NvYS9BVkZvdW5kYXRpb25T
b2Z0TGluay5oPgogI2VuZGlmCiAKLSNpZm5kZWYgV0VCQ09SRV9BUkdVTUVOVENPREVSU19NQUNf
REVDT0RFX0FERElUSU9OUwotI2RlZmluZSBXRUJDT1JFX0FSR1VNRU5UQ09ERVJTX01BQ19ERUNP
REVfQURESVRJT05TCi0jZW5kaWYKLQotI2lmbmRlZiBXRUJDT1JFX0FSR1VNRU5UQ09ERVJTX01B
Q19FTkNPREVfQURESVRJT05TCi0jZGVmaW5lIFdFQkNPUkVfQVJHVU1FTlRDT0RFUlNfTUFDX0VO
Q09ERV9BRERJVElPTlMKLSNlbmRpZgotCiBuYW1lc3BhY2UgSVBDIHsKIAotc3RhdGljIFJldGFp
blB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRh
dGlvbihDRkluZGV4IHZlcnNpb24sIENGVHlwZVJlZiogb2JqZWN0cywgQ0ZJbmRleCBvYmplY3RD
b3VudCwgQ0ZEaWN0aW9uYXJ5UmVmIHByb3RvY29sUHJvcGVydGllcywgQ0ZOdW1iZXJSZWYgZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoLCBDRlN0cmluZ1JlZiBtaW1lVHlwZSwgQ0ZUeXBlUmVmIHRva2Vu
TnVsbCkKLXsKLSAgICBhdXRvIGFyY2hpdmVMaXN0QXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVh
dGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3Mp
KTsKLQotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IG9iamVjdENvdW50OyArK2kpIHsKLSAg
ICAgICAgQ0ZUeXBlUmVmIG9iamVjdCA9IG9iamVjdHNbaV07Ci0gICAgICAgIGlmIChvYmplY3Qp
IHsKLSAgICAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcmNoaXZlTGlzdEFycmF5LmdldCgp
LCBvYmplY3QpOwotICAgICAgICAgICAgQ0ZSZWxlYXNlKG9iamVjdCk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAvLyBBcHBlbmQgb3VyIHRva2VuIG51bGwgcmVwcmVzZW50YXRpb24u
Ci0gICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJjaGl2ZUxpc3RBcnJheS5nZXQoKSwg
dG9rZW5OdWxsKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gZGljdGlvbmFyeSA9IGFk
b3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAm
a0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2Fs
bEJhY2tzKSk7Ci0KLSAgICBhdXRvIHZlcnNpb25OdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckNGSW5kZXhUeXBlLCAmdmVyc2lvbikp
OwotICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnkuZ2V0KCksIENGU1RSKCJ2ZXJz
aW9uIiksIHZlcnNpb25OdW1iZXIuZ2V0KCkpOwotICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRp
Y3Rpb25hcnkuZ2V0KCksIENGU1RSKCJhcmNoaXZlTGlzdCIpLCBhcmNoaXZlTGlzdEFycmF5Lmdl
dCgpKTsKLQotICAgIGlmIChwcm90b2NvbFByb3BlcnRpZXMpIHsKLSAgICAgICAgQ0ZEaWN0aW9u
YXJ5U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIoInByb3RvY29sUHJvcGVydGllcyIp
LCBwcm90b2NvbFByb3BlcnRpZXMpOwotICAgICAgICBDRlJlbGVhc2UocHJvdG9jb2xQcm9wZXJ0
aWVzKTsKLSAgICB9Ci0KLSAgICBpZiAoZXhwZWN0ZWRDb250ZW50TGVuZ3RoKSB7Ci0gICAgICAg
IENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnkuZ2V0KCksIENGU1RSKCJleHBlY3RlZENv
bnRlbnRMZW5ndGgiKSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKTsKLSAgICAgICAgQ0ZSZWxlYXNl
KGV4cGVjdGVkQ29udGVudExlbmd0aCk7Ci0gICAgfQotCi0gICAgaWYgKG1pbWVUeXBlKSB7Ci0g
ICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnkuZ2V0KCksIENGU1RSKCJtaW1l
VHlwZSIpLCBtaW1lVHlwZSk7Ci0gICAgICAgIENGUmVsZWFzZShtaW1lVHlwZSk7Ci0gICAgfQot
Ci0gICAgQ0ZBbGxvY2F0b3JEZWFsbG9jYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIG9iamVjdHMp
OwotCi0gICAgcmV0dXJuIGRpY3Rpb25hcnk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
VHlwZT4gYm9vbCBleHRyYWN0RGljdGlvbmFyeVZhbHVlKENGRGljdGlvbmFyeVJlZiBkaWN0aW9u
YXJ5LCBDRlN0cmluZ1JlZiBrZXksIFZhbHVlVHlwZSogcmVzdWx0KQotewotICAgIGF1dG8gdW50
eXBlZFZhbHVlID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdGlvbmFyeSwga2V5KTsKLSAgICBh
dXRvIHZhbHVlID0gZHluYW1pY19jZl9jYXN0PFZhbHVlVHlwZT4odW50eXBlZFZhbHVlKTsKLSAg
ICBpZiAodW50eXBlZFZhbHVlICYmICF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChyZXN1bHQpCi0gICAgICAgICpyZXN1bHQgPSB2YWx1ZTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotc3RhdGljIGJvb2wgY3JlYXRlQXJjaGl2ZUxpc3QoQ0ZEaWN0aW9uYXJ5UmVmIHJlcHJl
c2VudGF0aW9uLCBDRlR5cGVSZWYgdG9rZW5OdWxsLCBDRkluZGV4KiB2ZXJzaW9uLCBDRlR5cGVS
ZWYqKiBvYmplY3RzLCBDRkluZGV4KiBvYmplY3RDb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBwcm90
b2NvbFByb3BlcnRpZXMsIENGTnVtYmVyUmVmKiBleHBlY3RlZENvbnRlbnRMZW5ndGgsIENGU3Ry
aW5nUmVmKiBtaW1lVHlwZSkKLXsKLSAgICBhdXRvIHZlcnNpb25OdW1iZXIgPSBkeW5hbWljX2Nm
X2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJlcHJlc2VudGF0aW9uLCBD
RlNUUigidmVyc2lvbiIpKSk7Ci0gICAgaWYgKCF2ZXJzaW9uTnVtYmVyKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIUNGTnVtYmVyR2V0VmFsdWUodmVyc2lvbk51bWJlciwga0NG
TnVtYmVyQ0ZJbmRleFR5cGUsIHZlcnNpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBhdXRvIGFyY2hpdmVMaXN0QXJyYXkgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocmVwcmVzZW50YXRpb24sIENGU1RSKCJhcmNoaXZlTGlzdCIpKSk7
Ci0gICAgaWYgKCFhcmNoaXZlTGlzdEFycmF5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBhdXRvIGFyY2hpdmVMaXN0QXJyYXlDb3VudCA9IENGQXJyYXlHZXRDb3VudChhcmNoaXZlTGlz
dEFycmF5KTsKLSAgICBpZiAoIWlzSW5Cb3VuZHM8c2l6ZV90PihhcmNoaXZlTGlzdEFycmF5Q291
bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGJ1ZmZlclNpemUgPSBDaGVj
a2VkU2l6ZShzaXplb2YoQ0ZUeXBlUmVmKSkgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KGFyY2hpdmVM
aXN0QXJyYXlDb3VudCk7Ci0gICAgaWYgKGJ1ZmZlclNpemUuaGFzT3ZlcmZsb3dlZCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWV4dHJhY3REaWN0aW9uYXJ5VmFsdWUocmVw
cmVzZW50YXRpb24sIENGU1RSKCJwcm90b2NvbFByb3BlcnRpZXMiKSwgcHJvdG9jb2xQcm9wZXJ0
aWVzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZXh0cmFjdERpY3Rpb25hcnlW
YWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoImV4cGVjdGVkQ29udGVudExlbmd0aCIpLCBleHBl
Y3RlZENvbnRlbnRMZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFleHRy
YWN0RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigibWltZVR5cGUiKSwgbWlt
ZVR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAqb2JqZWN0Q291bnQgPSBhcmNo
aXZlTGlzdEFycmF5Q291bnQ7Ci0gICAgKm9iamVjdHMgPSBzdGF0aWNfY2FzdDxDRlR5cGVSZWYq
PihmYXN0TWFsbG9jKGJ1ZmZlclNpemUudW5zYWZlR2V0KCkpKTsKLQotICAgIENGQXJyYXlHZXRW
YWx1ZXMoYXJjaGl2ZUxpc3RBcnJheSwgQ0ZSYW5nZU1ha2UoMCwgKm9iamVjdENvdW50KSwgKm9i
amVjdHMpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8ICpvYmplY3RDb3VudDsgKytpKSB7
Ci0gICAgICAgIGlmICgoKm9iamVjdHMpW2ldID09IHRva2VuTnVsbCkKLSAgICAgICAgICAgICgq
b2JqZWN0cylbaV0gPSBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1z
dGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVz
ZW50YXRpb24oQ0ZVUkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCwgQ0ZUeXBlUmVmIHRva2VuTnVsbCkK
LXsKLSAgICBDRkluZGV4IHZlcnNpb247Ci0gICAgQ0ZUeXBlUmVmKiBvYmplY3RzOwotICAgIENG
SW5kZXggb2JqZWN0Q291bnQ7Ci0gICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3RvY29sUHJvcGVydGll
czsKLQotICAgIC8vIEZJWE1FICgxMjg4OTUxOCk6IERvIG5vdCBzZXJpYWxpemUgSFRUUCBtZXNz
YWdlIGJvZHkuCi0gICAgLy8gMS4gSXQgY2FuIGJlIGxhcmdlIGFuZCB0aHVzIGNvc3RseSB0byBz
ZW5kIGFjcm9zcy4KLSAgICAvLyAyLiBJdCBpcyBtaXNsZWFkaW5nIHRvIHByb3ZpZGUgYSBib2R5
IHdpdGggc29tZSByZXF1ZXN0cywgd2hpbGUgb3RoZXJzIHVzZSBib2R5IHN0cmVhbXMsIHdoaWNo
IGNhbm5vdCBiZSBzZXJpYWxpemVkIGF0IGFsbC4KLQotICAgIF9DRlVSTFJlcXVlc3RDcmVhdGVB
cmNoaXZlTGlzdChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjZlJlcXVlc3QsICZ2ZXJzaW9uLCAmb2Jq
ZWN0cywgJm9iamVjdENvdW50LCAmcHJvdG9jb2xQcm9wZXJ0aWVzKTsKLQotICAgIC8vIFRoaXMg
d2lsbCBkZWFsbG9jYXRlIHRoZSBwYXNzZWQgaW4gYXJndW1lbnRzLgotICAgIHJldHVybiBjcmVh
dGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbih2ZXJzaW9uLCBvYmplY3RzLCBvYmplY3RDb3Vu
dCwgcHJvdG9jb2xQcm9wZXJ0aWVzLCBudWxscHRyLCBudWxscHRyLCB0b2tlbk51bGwpOwotfQot
Ci1zdGF0aWMgUmV0YWluUHRyPENGVVJMUmVxdWVzdFJlZj4gY3JlYXRlQ0ZVUkxSZXF1ZXN0RnJv
bVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKENGRGljdGlvbmFyeVJlZiByZXByZXNlbnRhdGlv
biwgQ0ZUeXBlUmVmIHRva2VuTnVsbCkKLXsKLSAgICBDRkluZGV4IHZlcnNpb247Ci0gICAgQ0ZU
eXBlUmVmKiBvYmplY3RzOwotICAgIENGSW5kZXggb2JqZWN0Q291bnQ7Ci0gICAgQ0ZEaWN0aW9u
YXJ5UmVmIHByb3RvY29sUHJvcGVydGllczsKLQotICAgIGlmICghY3JlYXRlQXJjaGl2ZUxpc3Qo
cmVwcmVzZW50YXRpb24sIHRva2VuTnVsbCwgJnZlcnNpb24sICZvYmplY3RzLCAmb2JqZWN0Q291
bnQsICZwcm90b2NvbFByb3BlcnRpZXMsIG51bGxwdHIsIG51bGxwdHIpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gY2ZSZXF1ZXN0ID0gYWRvcHRDRihfQ0ZVUkxSZXF1ZXN0
Q3JlYXRlRnJvbUFyY2hpdmVMaXN0KGtDRkFsbG9jYXRvckRlZmF1bHQsIHZlcnNpb24sIG9iamVj
dHMsIG9iamVjdENvdW50LCBwcm90b2NvbFByb3BlcnRpZXMpKTsKLSAgICBmYXN0RnJlZShvYmpl
Y3RzKTsKLSAgICByZXR1cm4gV1RGTW92ZShjZlJlcXVlc3QpOwotfQotCi1zdGF0aWMgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oTlNV
UkxSZXF1ZXN0ICpyZXF1ZXN0LCBDRlR5cGVSZWYgdG9rZW5OdWxsKQotewotICAgIHJldHVybiBj
cmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihbcmVxdWVzdCBfQ0ZVUkxSZXF1ZXN0XSwg
dG9rZW5OdWxsKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxOU1VSTFJlcXVlc3Q+IGNyZWF0ZU5T
VVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlSZWYg
cmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwpCi17Ci0gICAgYXV0byBjZlJlcXVl
c3QgPSBjcmVhdGVDRlVSTFJlcXVlc3RGcm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24ocmVw
cmVzZW50YXRpb24sIHRva2VuTnVsbCk7Ci0gICAgaWYgKCFjZlJlcXVlc3QpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIAotICAgIHJldHVybiBhZG9wdE5TKFtbTlNVUkxSZXF1ZXN0IGFs
bG9jXSBfaW5pdFdpdGhDRlVSTFJlcXVlc3Q6Y2ZSZXF1ZXN0LmdldCgpXSk7Ci19Ci0KLXZvaWQg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURh
dGEoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNv
dXJjZVJlcXVlc3QpCi17Ci0gICAgUmV0YWluUHRyPE5TVVJMUmVxdWVzdD4gcmVxdWVzdFRvU2Vy
aWFsaXplID0gcmVzb3VyY2VSZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVw
ZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSk7Ci0KLSAgICBib29sIHJlcXVlc3RJc1By
ZXNlbnQgPSByZXF1ZXN0VG9TZXJpYWxpemU7Ci0gICAgZW5jb2RlciA8PCByZXF1ZXN0SXNQcmVz
ZW50OwotCi0gICAgaWYgKCFyZXF1ZXN0SXNQcmVzZW50KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBXZSBkb24ndCBzZW5kIEhUVFAgYm9keSBvdmVyIElQQyBmb3IgYmV0dGVyIHBlcmZvcm1h
bmNlLgotICAgIC8vIEFsc28sIGl0J3Mgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBkbywgYXMgc3Ry
ZWFtcyBjYW4gb25seSBiZSBjcmVhdGVkIGluIHByb2Nlc3MgdGhhdCBkb2VzIG5ldHdvcmtpbmcu
Ci0gICAgaWYgKFtyZXF1ZXN0VG9TZXJpYWxpemUgSFRUUEJvZHldIHx8IFtyZXF1ZXN0VG9TZXJp
YWxpemUgSFRUUEJvZHlTdHJlYW1dKSB7Ci0gICAgICAgIHJlcXVlc3RUb1NlcmlhbGl6ZSA9IGFk
b3B0TlMoW3JlcXVlc3RUb1NlcmlhbGl6ZSBtdXRhYmxlQ29weV0pOwotICAgICAgICBbKE5TTXV0
YWJsZVVSTFJlcXVlc3QgKilyZXF1ZXN0VG9TZXJpYWxpemUgc2V0SFRUUEJvZHk6bmlsXTsKLSAg
ICAgICAgWyhOU011dGFibGVVUkxSZXF1ZXN0ICopcmVxdWVzdFRvU2VyaWFsaXplIHNldEhUVFBC
b2R5U3RyZWFtOm5pbF07Ci0gICAgfQotCi0gICAgYXV0byBkaWN0aW9uYXJ5ID0gY3JlYXRlU2Vy
aWFsaXphYmxlUmVwcmVzZW50YXRpb24ocmVxdWVzdFRvU2VyaWFsaXplLmdldCgpLCBJUEM6OnRv
a2VuTnVsbHB0clR5cGVSZWYoKSk7Ci0gICAgSVBDOjplbmNvZGUoZW5jb2RlciwgZGljdGlvbmFy
eS5nZXQoKSk7Ci0KLSAgICBXRUJDT1JFX0FSR1VNRU5UQ09ERVJTX01BQ19FTkNPREVfQURESVRJ
T05TCi0KLSAgICAvLyBUaGUgZmFsbGJhY2sgYXJyYXkgaXMgcGFydCBvZiBOU1VSTFJlcXVlc3Qs
IGJ1dCBpdCBpcyBub3QgZW5jb2RlZCBieSBXS05TVVJMUmVxdWVzdENyZWF0ZVNlcmlhbGl6YWJs
ZVJlcHJlc2VudGF0aW9uLgotICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LnJlc3BvbnNl
Q29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KCk7Ci0gICAgZW5jb2RlciA8
PCByZXNvdXJjZVJlcXVlc3QucmVxdWVzdGVyKCk7Ci0gICAgZW5jb2RlciA8PCByZXNvdXJjZVJl
cXVlc3QuY2FjaGVQb2xpY3koKTsKLSAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5pc0Fw
cEJvdW5kKCk7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCi17Ci0gICAgYm9vbCByZXF1ZXN0SXNQcmVzZW50
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVxdWVzdElzUHJlc2VudCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmICghcmVxdWVzdElzUHJlc2VudCkgewotICAgICAgICByZXNv
dXJjZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QoKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZGljdGlvbmFy
eTsKLSAgICBpZiAoIUlQQzo6ZGVjb2RlKGRlY29kZXIsIGRpY3Rpb25hcnkpIHx8ICFkaWN0aW9u
YXJ5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIG5zVVJMUmVxdWVzdCA9IGNy
ZWF0ZU5TVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihkaWN0aW9uYXJ5
LmdldCgpLCBJUEM6OnRva2VuTnVsbHB0clR5cGVSZWYoKSk7Ci0gICAgaWYgKCFuc1VSTFJlcXVl
c3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdFQkNPUkVfQVJHVU1FTlRDT0RFUlNf
TUFDX0RFQ09ERV9BRERJVElPTlMKLQotICAgIHJlc291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdChuc1VSTFJlcXVlc3QuZ2V0KCkpOwotICAgIAotICAgIFZlY3RvcjxTdHJp
bmc+IHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5OwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0Zh
bGxiYWNrQXJyYXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXNvdXJjZVJlcXVl
c3Quc2V0UmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkoCi0g
ICAgICAgIHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnNp
emUoKSA+IDAgPyByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJh
eVswXSA6IFN0cmluZygpLAotICAgICAgICByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29k
aW5nRmFsbGJhY2tBcnJheS5zaXplKCkgPiAxID8gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25F
bmNvZGluZ0ZhbGxiYWNrQXJyYXlbMV0gOiBTdHJpbmcoKSwKLSAgICAgICAgcmVzcG9uc2VDb250
ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpID4gMiA/IHJlc3BvbnNl
Q29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5WzJdIDogU3RyaW5nKCkKLSAg
ICApOwotCi0gICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXIgcmVxdWVzdGVy
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVxdWVzdGVyKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJlc291cmNlUmVxdWVzdC5zZXRSZXF1ZXN0ZXIocmVxdWVzdGVyKTsKLQotICAg
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5IGNhY2hlUG9saWN5OwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoY2FjaGVQb2xpY3kpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmVzb3VyY2VSZXF1ZXN0LnNldENhY2hlUG9saWN5KGNhY2hlUG9saWN5KTsKLQotICAgIGJv
b2wgaXNBcHBCb3VuZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzQXBwQm91bmQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzb3VyY2VSZXF1ZXN0LnNldElzQXBwQm91bmQoaXNB
cHBCb3VuZCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBBcmd1bWVudENvZGVyPFdl
YkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBX
ZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKIHsKICAgICBlbmNvZGVy
IDw8IGNlcnRpZmljYXRlSW5mby50eXBlKCk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGFlZDY5YjRkNTc2MTZhYThmMzVlZTgwOWJkZjcyOTgz
ZGM2MzM4OS4uYzU2OTkxYzkwZGZkYmU0ODY5MmUxODE0NTA4ZWE0Y2IyZTcwMDRhMiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4
IEBACisyMDIxLTAyLTIzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisg
ICAgICAgIFNlcmlhbGl6ZSBOU1VSTFJlcXVlc3QgKHJhdGhlciB0aGFuIENGVVJMUmVxdWVzdCkg
aW4gSVBDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjIxNDUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc0NTAwOTYzPgorCisgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyIGFuZCBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIEFkZCBh
IG5ldyB0ZXN0IHRvIGVuc3VyZSB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IGxvYWQgVVJMcyB3aXRoIGFj
Y2VudGVkIGNoYXJhY3RlcnMsCisgICAgICAgIGFuZCB0byB0ZXN0IHRoZSB1cGRhdGVkIElQQyBz
ZXJpYWxpemF0aW9uIGZvciBOU1VSTFJlcXVlc3QuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdC9BLzMwMy8yNDcvMzAzLzI0M28uaHRtbDogQWRkZWQuCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbToKKyAg
ICAgICAgKFRFU1QpOgorCiAyMDIxLTAyLTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgVXNlIGFkb3B0TlMoKSBhcyBzb29uIGFzIHdlIFtbT2JqY0NsYXNzIGFs
bG9jXSBpbml0XSB0byBhdm9pZCBsZWFrcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3TG9hZEFQSXMubW0KaW5kZXggYmVkNTAw
ZWEzMzk0NWE4MWU2OGQ4ODgzN2ZhOTBhZjdjZTU3MjA4YS4uYzZlOGFjNDQ1NjZkNDVmNjI5NmFh
OGE4NWZmOTIxZGE1YWE5NGVhYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0xvYWRBUElzLm1tCkBAIC0xMzIsMyArMTMy
LDQyIEBAIFRFU1QoV0tXZWJWaWV3LCBMb2FkU2ltdWxhdGVkUmVxdWVzdFVwZGF0ZXNCYWNrRm9y
d2FyZExpc3QpCiAgICAgRVhQRUNUX1RSVUUoIWxpc3QuZm9yd2FyZEl0ZW0pOwogICAgIEVYUEVD
VF9XS19TVFJFUShleGFtcGxlVVJMU3RyaW5nLCBbbGlzdC5iYWNrSXRlbS5VUkwgYWJzb2x1dGVT
dHJpbmddKTsKIH0KKworVEVTVChXS1dlYlZpZXcsIExvYWRBY2NlbnRlZEZpbGVSZXF1ZXN0KQor
eworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsKKworICAgIGF1dG8gZGVsZWdhdGUg
PSBhZG9wdE5TKFtbVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3
ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBjb25z
dCBVSW50OCBieXRlc1s2XSA9IHsgJ0EnLCAweEMzLCAweEE3LCAweEMzLCAweEEzLCAnbycgfTsK
KyAgICBhdXRvIGZpbGVOYW1lID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aEJ5
dGVzOmJ5dGVzIGxlbmd0aDo2IGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSk7CisKKyAg
ICAvLyBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gYWRkIHVuaWNvZGUgZmlsZW5hbWVzIHRvIGdpdC4K
KyAgICBOU1VSTCAqb3JpZ2luYWxGaWxlID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JS
ZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRl
c3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgRVhQRUNUX05PVF9OVUxMKG9yaWdpbmFsRmls
ZSk7CisKKyAgICBOU1N0cmluZyAqdGVzdERpcmVjdG9yeVN0cmluZyA9IFtOU1RlbXBvcmFyeURp
cmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbW05TVVVJRCBVVUlEXSBV
VUlEU3RyaW5nXV07CisgICAgTlNVUkwgKnRlc3REaXJlY3RvcnkgPSBbTlNVUkwgZmlsZVVSTFdp
dGhQYXRoOiB0ZXN0RGlyZWN0b3J5U3RyaW5nXTsKKworICAgIE5TU3RyaW5nICp0ZXN0RmlsZVN0
cmluZyA9IFtbdGVzdERpcmVjdG9yeVN0cmluZyBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25l
bnQ6ZmlsZU5hbWUuZ2V0KCldIHN0cmluZ0J5QXBwZW5kaW5nUGF0aEV4dGVuc2lvbjpAImh0bWwi
XTsKKyAgICBOU1VSTCAqdGVzdEZpbGUgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnRlc3RGaWxl
U3RyaW5nXTsKKworICAgIGF1dG8gZGVmYXVsdE1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZh
dWx0TWFuYWdlcl07CisgICAgW2RlZmF1bHRNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDp0ZXN0Rmls
ZSBlcnJvcjpuaWxdOworICAgIFtkZWZhdWx0TWFuYWdlciByZW1vdmVJdGVtQXRVUkw6dGVzdERp
cmVjdG9yeSBlcnJvcjpuaWxdOworCisgICAgW2RlZmF1bHRNYW5hZ2VyIGNyZWF0ZURpcmVjdG9y
eUF0VVJMOnRlc3REaXJlY3Rvcnkgd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOllFUyBhdHRy
aWJ1dGVzOm5pbCBlcnJvcjpuaWxdOworCisgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgICAg
W2RlZmF1bHRNYW5hZ2VyIGNvcHlJdGVtQXRVUkw6b3JpZ2luYWxGaWxlIHRvVVJMOnRlc3RGaWxl
IGVycm9yOiZlcnJvcl07CisgICAgRVhQRUNUX05VTEwoZXJyb3IpOworICAgIAorICAgIE5TVVJM
UmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdEZpbGVd
OworICAgIFt3ZWJWaWV3IGxvYWRGaWxlUmVxdWVzdDpyZXF1ZXN0IGFsbG93aW5nUmVhZEFjY2Vz
c1RvVVJMOnRlc3RGaWxlLlVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07CisgICAgW2Rl
bGVnYXRlIHdhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
d2ViVmlldy5nZXQoKS5fcmVzb3VyY2VEaXJlY3RvcnlVUkwucGF0aCwgdGVzdEZpbGUuVVJMQnlE
ZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50LnBhdGgpOworCisgICAgW2RlZmF1bHRNYW5hZ2VyIHJl
bW92ZUl0ZW1BdFVSTDp0ZXN0RmlsZSBlcnJvcjpuaWxdOworICAgIFtkZWZhdWx0TWFuYWdlciBy
ZW1vdmVJdGVtQXRVUkw6dGVzdERpcmVjdG9yeSBlcnJvcjpuaWxdOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421456</attachid>
            <date>2021-02-24 14:21:51 -0800</date>
            <delta_ts>2021-02-24 15:23:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222145-20210224142150.patch</filename>
            <type>text/plain</type>
            <size>33521</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMjc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGM1YmNlYmY2ODM0Y2Y1YzZmYTU2ZTQx
MjQ1NTM2ODY0ZWRmZDVlMjMuLmMwN2U2N2ZkZDcwNjEzNWY5MGE3MzE1M2M1ZTk0ZmY4NjA0ZWYy
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDItMjQgIEJyZW50IEZ1bGdoYW0gIDxiZnVs
Z2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVxdWVzdCAocmF0aGVy
IHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MDA5
NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVVJM
V2l0aERhdGEgZG9lcyBhbiBlYXJseSByZXR1cm4gd2hlbiB0aGUgbGVhZGluZyBjaGFyYWN0ZXIg
aW4gdGhlIFVSTCBpcyAnLycsCisgICAgICAgIHNpZ25pZnlpbmcgYSBmaWxlIHBhdGguIEhvd2V2
ZXIsIFVSTHMgb2YgdGhlIGZvcm0gIi8vY2RuLmRvbWFpbi5jb20iIGFyZSBvZnRlbgorICAgICAg
ICBlbmNvdW50ZXJlZCwgYW5kIFJGQyAzOTg2IGRvZXMgbm90IHByb2hpYml0IHRoZW0uIFdlIHNo
b3VsZCBvbmx5IGRvIGFuIGVhcmx5CisgICAgICAgIHJldHVybiBpZiB0aGUgY2hhcmFjdGVyIGFm
dGVyIHRoZSBpbml0aWFsICcvJyBpcyBub3QgYWxzbyAnLycuCisKKyAgICAgICAgKiB3dGYvY29j
b2EvTlNVUkxFeHRyYXMubW06CisgICAgICAgIChXVEY6OlVSTFdpdGhEYXRhKToKKwogMjAyMS0w
Mi0yMiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGV4cGVy
aW1lbnRhbCBzdXBwb3J0IGZvciBDU1MgQ29sb3IgNSBjb2xvci1taXgoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBl
YjU3OTQ0OGI5NWIxY2UyZTI0MDYyNzc1N2QwMmFjNDI4NjI5M2ZkLi5iYWMyZmI0YTBmZDllYzQw
NGJiZDhiZDJkMGFkNTBiOWU4YzIxNTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDIx
LTAyLTIzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFNl
cmlhbGl6ZSBOU1VSTFJlcXVlc3QgKHJhdGhlciB0aGFuIENGVVJMUmVxdWVzdCkgaW4gSVBDCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjIxNDUKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc0NTAwOTYzPgorCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyIGFuZCBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIFRlc3RlZCBieSBleGlz
dGluZyBsYXlvdXQgYW5kIFdlYktpdEFQSSB0ZXN0cy4KKworICAgICAgICBSZXZpc2UgSVBDIHNl
cmlhbGl6YXRpb24gc28gdGhhdCBOU1VSTENvbm5lY3Rpb24gKG1vZGVybikgQ29jb2EgYnVpbGRz
IHNlcmlhbGl6ZSB0aGUKKyAgICAgICAgTlNVUkxSZXF1ZXN0IG9iamVjdCwgcmF0aGVyIHRoYW4g
YnJpZGdpbmcgdG8gQ0ZVUkxSZXF1ZXN0IGFuZCBzZXJpYWxpemluZyB0aGF0LiBUaGlzCisgICAg
ICAgIGVuc3VyZXMgdGhhdCB0aGUgZnVsbCBzZXQgb2YgTlNVUkxSZXF1ZXN0IGZlYXR1cmVzIGFy
ZSBhY2N1cmF0ZWx5IHJlY29uc3RpdHV0ZWQgb24gdGhlCisgICAgICAgIHJlY2VpdmluZyBzaWRl
IG9mIHRoZSBjb25uZWN0aW9uLgorCisgICAgICAgIEJlY2F1c2UgTlNVUkwgc2VyaWFsaXphdGlv
biBkb2Vzbid0IGhhbmRsZSBzb21lIGVuY29kZWQgcGFyYW1ldGVycyBwcm9wZXJseSwgd2UgaW1w
bGVtZW50CisgICAgICAgIGFuIGFyY2hpdmluZyBkZWxlZ2F0ZSB0byBhcmNoaXZlIHRoZSBVUkwg
bGlrZSB3ZSBkbyBmb3IgQ0ZVUkwuCisKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvQXJndW1lbnRD
b2RlcnNDb2NvYS5tbToKKyAgICAgICAgKC1bV0tTZWN1cmVDb2RpbmdBcmNoaXZpbmdEZWxlZ2F0
ZSBhcmNoaXZlcjp3aWxsRW5jb2RlT2JqZWN0Ol0pOiBBZGRlZC4KKyAgICAgICAgKC1bV0tTZWN1
cmVDb2RpbmdBcmNoaXZpbmdEZWxlZ2F0ZSB1bmFyY2hpdmVyOmRpZERlY29kZU9iamVjdDpdKTog
QWRkZWQuCisgICAgICAgICgrW1dLRW5jb2RlZFVSTCBzdXBwb3J0c1NlY3VyZUNvZGluZ10pOiBB
ZGRlZC4KKyAgICAgICAgKC1bV0tFbmNvZGVkVVJMIGVuY29kZVdpdGhDb2RlcjpdKTogQWRkZWQu
CisgICAgICAgICgtW1dLRW5jb2RlZFVSTCBpbml0V2l0aENvZGVyOl0pOiBBZGRlZC4KKyAgICAg
ICAgKC1bV0tFbmNvZGVkVVJMIGluaXRXaXRoVVJMOl0pOiBBZGRlZC4KKyAgICAgICAgKElQQzo6
ZW5jb2RlU2VjdXJlQ29kaW5nSW50ZXJuYWwpOiBVcGRhdGUgdG8gdXNlIG5ldyBkZWxlZ2F0ZS4K
KyAgICAgICAgKElQQzo6ZGVjb2RlU2VjdXJlQ29kaW5nSW50ZXJuYWwpOiBEaXR0by4KKyAgICAg
ICAgKC1bV0tTZWN1cmVDb2RpbmdGb250QXR0cmlidXRlTm9ybWFsaXplciBhcmNoaXZlcjp3aWxs
RW5jb2RlT2JqZWN0Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9XZWJDb3Jl
QXJndW1lbnRDb2RlcnNDb2NvYS5tbToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEpOiBBZGQgTlNVUkxSZXF1
ZXN0IGVuY29kaW5nLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0YSk6IEFkZCBOU1VSTFJlcXVlc3QgZGVjb2Rp
bmcuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW06Cisg
ICAgICAgIChJUEM6OmNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKElQQzo6ZXh0cmFjdERpY3Rpb25hcnlWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAg
IChJUEM6OmNyZWF0ZUFyY2hpdmVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6Y3JlYXRl
Q0ZVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKElQQzo6Y3JlYXRlTlNVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEpOiBEZWxldGVkLgorICAgICAgICAoSVBD
OjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3Jt
RGF0YSk6IERlbGV0ZWQuCisKIDIwMjEtMDItMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBVc2UgYWRvcHROUygpIGFzIHNvb24gYXMgd2UgW1tPYmpjQ2xhc3Mg
YWxsb2NdIGluaXRdIHRvIGF2b2lkIGxlYWtzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9j
b2NvYS9OU1VSTEV4dHJhcy5tbSBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJMRXh0cmFzLm1t
CmluZGV4IDIwOWVhNWI4NjY0YTFiYTMxOTJmOWVjMjM1MzllMzBjZTJjOTdhODIuLjRhNWE1ZDRj
YmVmZDA5OGY1NzFkNGU0ZGRmMjAxMWI0NGE2NjRjYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL2NvY29hL05TVVJMRXh0cmFzLm1tCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJM
RXh0cmFzLm1tCkBAIC0xNjQsOCArMTY0LDEyIEBAIE5TVVJMICpVUkxXaXRoRGF0YShOU0RhdGEg
KmRhdGEsIE5TVVJMICpiYXNlVVJMKQogICAgICAgICBjb25zdCBVSW50OCAqYnl0ZXMgPSBzdGF0
aWNfY2FzdDxjb25zdCBVSW50OCo+KFtkYXRhIGJ5dGVzXSk7CiAgICAgICAgIAogICAgICAgICAv
LyBDRlVSTENyZWF0ZUFic29sdXRlVVJMV2l0aEJ5dGVzIHdvdWxkIGNvbXBsYWluIHRvIGNvbnNv
bGUgaWYgd2UgcGFzc2VkIGEgcGF0aCB0byBpdC4KLSAgICAgICAgaWYgKGJ5dGVzWzBdID09ICcv
JyAmJiAhYmFzZVVSTCkKLSAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIGlmIChieXRl
c1swXSA9PSAnLycgJiYgIWJhc2VVUkwpIHsKKyAgICAgICAgICAgIC8vIEEgVVJMIHN0YXJ0aW5n
IHdpdGggJy8vJyBpcyB2YWxpZCAoYW4gYXV0aG9yaXR5IHdpdGhvdXQgYSBzY2hlbWUpLCBhbmQg
aXMgbm90IGEgZmlsZSBwYXRoLgorICAgICAgICAgICAgLy8gU28gb25seSByZXR1cm4gZWFybHkg
aWYgdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgc2xhc2ggaXMgc29tZXRoaWhnIGVsc2UuCisgICAg
ICAgICAgICBpZiAobGVuZ3RoID09IDEgfHwgYnl0ZXNbMV0gIT0gJy8nKQorICAgICAgICAgICAg
ICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIE5PVEU6IFdl
IHVzZSBVVEYtOCBoZXJlIHNpbmNlIHRoaXMgZW5jb2RpbmcgaXMgdXNlZCB3aGVuIGNvbXB1dGlu
ZyBzdHJpbmdzIHdoZW4gcmV0dXJuaW5nIFVSTCBjb21wb25lbnRzCiAgICAgICAgIC8vIChlLmcg
Y2FsbHMgdG8gTlNVUkwgLXBhdGgpLiBIb3dldmVyLCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCB0b2xl
cmFudCBvZiBpbGxlZ2FsIFVURi04IHNlcXVlbmNlcywgd2hpY2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL0NvY29hL0FyZ3VtZW50Q29kZXJzQ29jb2EubW0gYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tCmluZGV4IGJkM2FlYzMxYzMz
ZGI1N2Y2ZjgyMjdlMzU2OTFhYTNiODc0MGY4N2EuLmVhNTNmOTQ1NDIyNzI4MWJmNmI1MmU3OWI3
YzBjMzBjYzY2NzdiODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0Fy
Z3VtZW50Q29kZXJzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQXJn
dW1lbnRDb2RlcnNDb2NvYS5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTgsIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw2ICszNiw4IEBACiAjaW1wb3J0IDxDb3JlVGV4
dC9DVEZvbnREZXNjcmlwdG9yLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5o
PgogI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4KKyNpbXBvcnQgPHd0Zi9jZi9DRlVSTEV4dHJhcy5o
PgorI2ltcG9ydCA8d3RmL2NvY29hL05TVVJMRXh0cmFzLmg+CiAKICNpZiBVU0UoQVBQS0lUKQog
I2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgpAQCAtNDksMjggKzUxLDkwIEBACiAjaW1wb3J0
IDxVSUtpdC9VSUZvbnREZXNjcmlwdG9yLmg+CiAjZW5kaWYKIAotI2lmIEhBVkUoTlNGT05UX1dJ
VEhfT1BUSUNBTF9TSVpJTkdfQlVHKQorQGludGVyZmFjZSBXS1NlY3VyZUNvZGluZ0FyY2hpdmlu
Z0RlbGVnYXRlIDogTlNPYmplY3QgPE5TS2V5ZWRBcmNoaXZlckRlbGVnYXRlLCBOU0tleWVkVW5h
cmNoaXZlckRlbGVnYXRlPgorQGVuZAogCi1AaW50ZXJmYWNlIFdLU2VjdXJlQ29kaW5nRm9udEF0
dHJpYnV0ZU5vcm1hbGl6ZXIgOiBOU09iamVjdCA8TlNLZXllZEFyY2hpdmVyRGVsZWdhdGU+CitA
aW50ZXJmYWNlIFdLRW5jb2RlZFVSTCA6IE5TT2JqZWN0IDxOU1NlY3VyZUNvZGluZz4KKy0gKGlu
c3RhbmNldHlwZSBfTnVsbGFibGUpaW5pdFdpdGhVUkw6KE5TVVJMICpfTnVsbGFibGUpdXJsOwor
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBudWxsYWJsZSkgTlNVUkwgKnVybDsKIEBl
bmQKIAotQGltcGxlbWVudGF0aW9uIFdLU2VjdXJlQ29kaW5nRm9udEF0dHJpYnV0ZU5vcm1hbGl6
ZXIKK0BpbXBsZW1lbnRhdGlvbiBXS1NlY3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlCiAKLS0g
KGlkKWFyY2hpdmVyOihOU0tleWVkQXJjaGl2ZXIgKilhcmNoaXZlciB3aWxsRW5jb2RlT2JqZWN0
OihpZClvYmplY3QKKy0gKG51bGxhYmxlIGlkKWFyY2hpdmVyOihOU0tleWVkQXJjaGl2ZXIgKl9O
b25udWxsKWFyY2hpdmVyIHdpbGxFbmNvZGVPYmplY3Q6KGlkIF9Ob25udWxsKW9iamVjdAogewot
ICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TRm9udCBjbGFzc11dKSB7Ci0gICAgICAg
IE5TRm9udCAqZm9udCA9IHN0YXRpY19jYXN0PE5TRm9udCAqPihvYmplY3QpOworI2lmIEhBVkUo
TlNGT05UX1dJVEhfT1BUSUNBTF9TSVpJTkdfQlVHKQorICAgIGlmIChhdXRvICpmb250ID0gZHlu
YW1pY19vYmpjX2Nhc3Q8TlNGb250PihvYmplY3QpKSB7CiAgICAgICAgIC8vIFJlY3JlYXRlIGFu
eSBzZXJpYWxpemVkIGZvbnRzIGFmdGVyIG5vcm1hbGl6aW5nIHRoZQogICAgICAgICAvLyBmb250
IGF0dHJpYnV0ZXMgdG8gd29yayBhcm91bmQgPHJkYXI6Ly9wcm9ibGVtLzUxNjU3ODgwPi4KICAg
ICAgICAgcmV0dXJuIFdlYktpdDo6Zm9udFdpdGhBdHRyaWJ1dGVzKGZvbnQuZm9udERlc2NyaXB0
b3IuZm9udEF0dHJpYnV0ZXMsIDApOwogICAgIH0KKyNlbmRpZgorCisgICAgaWYgKGF1dG8gKnVy
bCA9IGR5bmFtaWNfb2JqY19jYXN0PE5TVVJMPihvYmplY3QpKQorICAgICAgICByZXR1cm4gYWRv
cHROUyhbW1dLRW5jb2RlZFVSTCBhbGxvY10gaW5pdFdpdGhVUkw6dXJsXSkuYXV0b3JlbGVhc2Uo
KTsKIAogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKKy0gKGlkIF9OdWxsYWJsZSl1bmFyY2hpdmVy
OihOU0tleWVkVW5hcmNoaXZlciAqX05vbm51bGwpdW5hcmNoaXZlciBkaWREZWNvZGVPYmplY3Q6
KGlkIF9OdWxsYWJsZSkgTlNfUkVMRUFTRVNfQVJHVU1FTlQgb2JqZWN0IE5TX1JFVFVSTlNfUkVU
QUlORUQKK3sKKyAgICBhdXRvIG9iamVjdFB0ciA9IGFkb3B0TlMob2JqZWN0KTsKKyAgICBpZiAo
YXV0byAqZW5jb2RlZFVSTCA9IGR5bmFtaWNfb2JqY19jYXN0PFdLRW5jb2RlZFVSTD4ob2JqZWN0
UHRyLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIHJldGFpblB0cihlbmNvZGVkVVJMLnVybCkubGVh
a1JlZigpOworCisgICAgcmV0dXJuIG9iamVjdFB0ci5sZWFrUmVmKCk7Cit9CisKIEBlbmQKIAot
I2VuZGlmCitAaW1wbGVtZW50YXRpb24gV0tFbmNvZGVkVVJMIHsKKyAgICBSZXRhaW5QdHI8TlNV
Ukw+IG1fdXJsOworfQorCistIChOU1VSTCAqX051bGxhYmxlKXVybAoreworICAgIHJldHVybiBt
X3VybC5nZXQoKTsKK30KKworKyAoQk9PTClzdXBwb3J0c1NlY3VyZUNvZGluZworeworICAgIHJl
dHVybiBZRVM7Cit9CisKKy0gKHZvaWQpZW5jb2RlV2l0aENvZGVyOihOU0NvZGVyICpfTm9ubnVs
bCljb2RlcgoreworICAgIFdURjo6VVJMQ2hhckJ1ZmZlciB1cmxCeXRlczsKKyAgICBXVEY6Omdl
dFVSTEJ5dGVzKChfX2JyaWRnZSBDRlVSTFJlZiltX3VybC5nZXQoKSwgdXJsQnl0ZXMpOworICAg
IFtjb2RlciBlbmNvZGVCeXRlczp1cmxCeXRlcy5kYXRhKCkgbGVuZ3RoOnVybEJ5dGVzLnNpemUo
KV07Cit9CisKKy0gKF9OdWxsYWJsZSBpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2RlcjooTlNDb2Rl
ciAqX05vbm51bGwpY29kZXIKK3sKKyAgICBhdXRvIHNlbGZQdHIgPSBhZG9wdE5TKFtzdXBlciBp
bml0XSk7CisgICAgaWYgKHNlbGZQdHIpIHsKKyAgICAgICAgTlNVSW50ZWdlciBsZW5ndGg7Cisg
ICAgICAgIGlmIChhdXRvIGJ5dGVzID0gKHVpbnQ4X3QgKilbY29kZXIgZGVjb2RlQnl0ZXNXaXRo
UmV0dXJuZWRMZW5ndGg6Jmxlbmd0aF0pCisgICAgICAgICAgICBtX3VybCA9IHJldGFpblB0cihX
VEY6OlVSTFdpdGhEYXRhKFtOU0RhdGEgZGF0YVdpdGhCeXRlc05vQ29weTpieXRlcyBsZW5ndGg6
bGVuZ3RoIGZyZWVXaGVuRG9uZTpOT10sIG5pbCkpOworCisgICAgICAgIGlmICghbV91cmwpIHsK
KyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlY29kZSBOU1VSTCBkdWUgdG8gaW52
YWxpZCBlbmNvZGluZyBvZiBsZW5ndGggJWQuIiwgbGVuZ3RoKTsKKyAgICAgICAgICAgIG1fdXJs
ID0gcmV0YWluUHRyKFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiIl0pOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHNlbGZQdHIubGVha1JlZigpOworfQorCistIChfTnVsbGFibGUgaW5z
dGFuY2V0eXBlKWluaXRXaXRoVVJMOihOU1VSTCAqIF9OdWxsYWJsZSl1cmwKK3sKKyAgICBpZiAo
c2VsZiA9IFtzdXBlciBpbml0XSkKKyAgICAgICAgbV91cmwgPSByZXRhaW5QdHIodXJsKTsKKwor
ICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCiAKIG5hbWVzcGFjZSBJUEMgewogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CkBAIC05Myw3ICsxNTcsNyBAQCBlbnVtIGNsYXNzIE5TVHlwZSB7CiAK
ICNwcmFnbWEgbWFyayAtIEhlbHBlcnMKIAotc3RhdGljIE5TVHlwZSB0eXBlRnJvbU9iamVjdChp
ZCBvYmplY3QpCitzdGF0aWMgTlNUeXBlIHR5cGVGcm9tT2JqZWN0KGlkIF9Ob25udWxsIG9iamVj
dCkKIHsKICAgICBBU1NFUlQob2JqZWN0KTsKIApAQCAtMTI3LDEyICsxOTEsMTIgQEAgc3RhdGlj
IE5TVHlwZSB0eXBlRnJvbU9iamVjdChpZCBvYmplY3QpCiAgICAgcmV0dXJuIE5TVHlwZTo6VW5r
bm93bjsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlzU2VyaWFsaXphYmxlRm9udChDVEZvbnRS
ZWYgZm9udCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NlcmlhbGl6YWJsZUZvbnQoQ1RGb250UmVm
IF9OdWxsYWJsZSBmb250KQogewogICAgIHJldHVybiBhZG9wdENGKENURm9udENvcHlBdHRyaWJ1
dGUoZm9udCwga0NURm9udFVSTEF0dHJpYnV0ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wg
aXNTZXJpYWxpemFibGVWYWx1ZShpZCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1Nlcmlh
bGl6YWJsZVZhbHVlKGlkIF9OdWxsYWJsZSB2YWx1ZSkKIHsKICAgICBpZiAoW3ZhbHVlIGlzS2lu
ZE9mQ2xhc3M6W0NvY29hRm9udCBjbGFzc11dKQogICAgICAgICByZXR1cm4gaXNTZXJpYWxpemFi
bGVGb250KChfX2JyaWRnZSBDVEZvbnRSZWYpdmFsdWUpOwpAQCAtMTQxLDcgKzIwNSw3IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBpc1NlcmlhbGl6YWJsZVZhbHVlKGlkIHZhbHVlKQogCiAjcHJhZ21h
IG1hcmsgLSBOU0FycmF5CiAKLXN0YXRpYyB2b2lkIGVuY29kZUFycmF5SW50ZXJuYWwoRW5jb2Rl
ciYgZW5jb2RlciwgTlNBcnJheSAqYXJyYXkpCitzdGF0aWMgdm9pZCBlbmNvZGVBcnJheUludGVy
bmFsKEVuY29kZXImIGVuY29kZXIsIE5TQXJyYXkgKl9OdWxsYWJsZSBhcnJheSkKIHsKICAgICAv
LyBFdmVuIHRob3VnaCBOU0FycmF5IGlzIHRvbGwgZnJlZSBicmlkZ2VkIHdpdGggQ0ZBcnJheVJl
ZiwgdmFsdWVzIG1heSBub3QgYmUsCiAgICAgLy8gc28gd2Ugc2hvdWxkIHN0YXkgd2l0aGluIHRo
aXMgZmlsZSdzIGNvZGUuCkBAIC0xNzAsNyArMjM0LDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlQXJy
YXlJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU0FycmF5ICphcnJheSkKICAgICB9CiB9CiAK
LXN0YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVBcnJheUludGVybmFsKERlY29k
ZXImIGRlY29kZXIsIE5TQXJyYXk8Q2xhc3M+ICphbGxvd2VkQ2xhc3NlcykKK3N0YXRpYyBPcHRp
b25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVBcnJheUludGVybmFsKERlY29kZXImIGRlY29kZXIs
IE5TQXJyYXk8Q2xhc3M+ICogX05vbm51bGwgYWxsb3dlZENsYXNzZXMpCiB7CiAgICAgdWludDY0
X3Qgc2l6ZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQpAQCAtMTkwLDcgKzI1NCw3
IEBAIHN0YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVBcnJheUludGVybmFsKERl
Y29kZXImIGRlY29kZXIsIE5TQXJyYXk8Q2xhCiAjcHJhZ21hIG1hcmsgLSBOU0NvbG9yIC8gVUlD
b2xvcgogCiAjaWYgVVNFKEFQUEtJVCkKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVDb2xvcklu
dGVybmFsKEVuY29kZXImIGVuY29kZXIsIE5TQ29sb3IgKmNvbG9yKQorc3RhdGljIGlubGluZSB2
b2lkIGVuY29kZUNvbG9ySW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNDb2xvciAqX05vbm51
bGwgY29sb3IpCiB7CiAgICAgZW5jb2RlciA8PCBjb2xvckZyb21OU0NvbG9yKGNvbG9yKTsKIH0K
QEAgLTIwMyw3ICsyNjcsNyBAQCBzdGF0aWMgaW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+
IGRlY29kZUNvbG9ySW50ZXJuYWwoRGVjb2RlciYgZGVjb2RlcikKICAgICByZXR1cm4geyBuc0Nv
bG9yKGNvbG9yKSB9OwogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVDb2xvcklu
dGVybmFsKEVuY29kZXImIGVuY29kZXIsIFVJQ29sb3IgKmNvbG9yKQorc3RhdGljIGlubGluZSB2
b2lkIGVuY29kZUNvbG9ySW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgVUlDb2xvciAqX05vbm51
bGwgY29sb3IpCiB7CiAgICAgZW5jb2RlciA8PCBjb2xvckZyb21VSUNvbG9yKGNvbG9yKTsKIH0K
QEAgLTIxOSw3ICsyODMsNyBAQCBzdGF0aWMgaW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+
IGRlY29kZUNvbG9ySW50ZXJuYWwoRGVjb2RlciYgZGVjb2RlcikKIAogI3ByYWdtYSBtYXJrIC0g
TlNEYXRhCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVEYXRhSW50ZXJuYWwoRW5jb2RlciYg
ZW5jb2RlciwgTlNEYXRhICpkYXRhKQorc3RhdGljIGlubGluZSB2b2lkIGVuY29kZURhdGFJbnRl
cm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU0RhdGEgKl9Ob25udWxsIGRhdGEpCiB7CiAgICAgZW5j
b2RlKGVuY29kZXIsIChfX2JyaWRnZSBDRkRhdGFSZWYpZGF0YSk7CiB9CkBAIC0yMzQsNyArMjk4
LDcgQEAgc3RhdGljIGlubGluZSBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVEYXRhSW50
ZXJuYWwoRGVjb2RlciYgZGVjb2RlcikKIAogI3ByYWdtYSBtYXJrIC0gTlNEYXRlCiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBlbmNvZGVEYXRlSW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNEYXRl
ICpkYXRlKQorc3RhdGljIGlubGluZSB2b2lkIGVuY29kZURhdGVJbnRlcm5hbChFbmNvZGVyJiBl
bmNvZGVyLCBOU0RhdGUgKl9Ob25udWxsIGRhdGUpCiB7CiAgICAgZW5jb2RlKGVuY29kZXIsIChf
X2JyaWRnZSBDRkRhdGVSZWYpZGF0ZSk7CiB9CkBAIC0yNDksNyArMzEzLDcgQEAgc3RhdGljIGlu
bGluZSBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVEYXRlSW50ZXJuYWwoRGVjb2RlciYg
ZGVjb2RlcikKIAogI3ByYWdtYSBtYXJrIC0gTlNEaWN0aW9uYXJ5CiAKLXN0YXRpYyB2b2lkIGVu
Y29kZURpY3Rpb25hcnlJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU0RpY3Rpb25hcnkgKmRp
Y3Rpb25hcnkpCitzdGF0aWMgdm9pZCBlbmNvZGVEaWN0aW9uYXJ5SW50ZXJuYWwoRW5jb2RlciYg
ZW5jb2RlciwgTlNEaWN0aW9uYXJ5ICpfTm9ubnVsbCBkaWN0aW9uYXJ5KQogewogICAgIC8vIEV2
ZW4gdGhvdWdoIE5TRGljdGlvbmFyeSBpcyB0b2xsIGZyZWUgYnJpZGdlZCB3aXRoIENGRGljdGlv
bmFyeVJlZiwga2V5cy92YWx1ZXMgbWF5IG5vdCBiZSwKICAgICAvLyBzbyB3ZSBzaG91bGQgc3Rh
eSB3aXRoaW4gdGhpcyBmaWxlJ3MgY29kZS4KQEAgLTI4MSw3ICszNDUsNyBAQCBzdGF0aWMgdm9p
ZCBlbmNvZGVEaWN0aW9uYXJ5SW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNEaWN0aW9uYXJ5
ICpkaWN0aW9uYXJ5KQogICAgIH0KIH0KIAotc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+
IGRlY29kZURpY3Rpb25hcnlJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyLCBOU0FycmF5PENsYXNz
PiAqYWxsb3dlZENsYXNzZXMpCitzdGF0aWMgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2Rl
RGljdGlvbmFyeUludGVybmFsKERlY29kZXImIGRlY29kZXIsIE5TQXJyYXk8Q2xhc3M+ICpfTm9u
bnVsbCBhbGxvd2VkQ2xhc3NlcykKIHsKICAgICB1aW50NjRfdCBzaXplOwogICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoc2l6ZSkpCkBAIC0zMDUsNyArMzY5LDcgQEAgc3RhdGljIE9wdGlvbmFsPFJl
dGFpblB0cjxpZD4+IGRlY29kZURpY3Rpb25hcnlJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyLCBO
U0FycmEKIAogI3ByYWdtYSBtYXJrIC0gTlNGb250IC8gVUlGb250CiAKLXN0YXRpYyBpbmxpbmUg
dm9pZCBlbmNvZGVGb250SW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgQ29jb2FGb250ICpmb250
KQorc3RhdGljIGlubGluZSB2b2lkIGVuY29kZUZvbnRJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVy
LCBDb2NvYUZvbnQgKl9Ob25udWxsIGZvbnQpCiB7CiAgICAgZW5jb2RlKGVuY29kZXIsIGZvbnQu
Zm9udERlc2NyaXB0b3IuZm9udEF0dHJpYnV0ZXMpOwogfQpAQCAtMzI3LDcgKzM5MSw3IEBAIHN0
YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVGb250SW50ZXJuYWwoRGVjb2RlciYg
ZGVjb2RlcikKIAogI3ByYWdtYSBtYXJrIC0gTlNOdW1iZXIKIAotc3RhdGljIGlubGluZSB2b2lk
IGVuY29kZU51bWJlckludGVybmFsKEVuY29kZXImIGVuY29kZXIsIE5TTnVtYmVyICpudW1iZXIp
CitzdGF0aWMgaW5saW5lIHZvaWQgZW5jb2RlTnVtYmVySW50ZXJuYWwoRW5jb2RlciYgZW5jb2Rl
ciwgTlNOdW1iZXIgKl9Ob25udWxsIG51bWJlcikKIHsKICAgICBlbmNvZGUoZW5jb2RlciwgKF9f
YnJpZGdlIENGTnVtYmVyUmVmKW51bWJlcik7CiB9CkBAIC0zNDIsMjYgKzQwNiwyMSBAQCBzdGF0
aWMgaW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZU51bWJlckludGVybmFsKERl
Y29kZXImIGRlY29kZXIpCiAKICNwcmFnbWEgbWFyayAtIGlkIDxOU1NlY3VyZUNvZGluZz4KIAot
c3RhdGljIHZvaWQgZW5jb2RlU2VjdXJlQ29kaW5nSW50ZXJuYWwoRW5jb2RlciYgZW5jb2Rlciwg
aWQgPE5TT2JqZWN0LCBOU1NlY3VyZUNvZGluZz4gb2JqZWN0KQorc3RhdGljIHZvaWQgZW5jb2Rl
U2VjdXJlQ29kaW5nSW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgaWQgPE5TT2JqZWN0LCBOU1Nl
Y3VyZUNvZGluZz4gX05vbm51bGwgb2JqZWN0KQogewogICAgIGF1dG8gYXJjaGl2ZXIgPSBhZG9w
dE5TKFtbTlNLZXllZEFyY2hpdmVyIGFsbG9jXSBpbml0UmVxdWlyaW5nU2VjdXJlQ29kaW5nOllF
U10pOwogCi0jaWYgSEFWRShOU0ZPTlRfV0lUSF9PUFRJQ0FMX1NJWklOR19CVUcpCi0gICAgYXV0
byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS1NlY3VyZUNvZGluZ0ZvbnRBdHRyaWJ1dGVOb3JtYWxp
emVyIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS1NlY3Vy
ZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlIGFsbG9jXSBpbml0XSk7CiAgICAgW2FyY2hpdmVyIHNl
dERlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKLSNlbmRpZgogCiAgICAgW2FyY2hpdmVyIGVuY29k
ZU9iamVjdDpvYmplY3QgZm9yS2V5Ok5TS2V5ZWRBcmNoaXZlUm9vdE9iamVjdEtleV07CiAgICAg
W2FyY2hpdmVyIGZpbmlzaEVuY29kaW5nXTsKLQotI2lmIEhBVkUoTlNGT05UX1dJVEhfT1BUSUNB
TF9TSVpJTkdfQlVHKQogICAgIFthcmNoaXZlciBzZXREZWxlZ2F0ZTpuaWxdOwotI2VuZGlmCiAK
ICAgICBlbmNvZGUoZW5jb2RlciwgKF9fYnJpZGdlIENGRGF0YVJlZilbYXJjaGl2ZXIgZW5jb2Rl
ZERhdGFdKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZVNlY3Vy
ZUNvZGluZ0ludGVybmFsKERlY29kZXImIGRlY29kZXIsIE5TQXJyYXk8Q2xhc3M+ICphbGxvd2Vk
Q2xhc3NlcykKK3N0YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVTZWN1cmVDb2Rp
bmdJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyLCBOU0FycmF5PENsYXNzPiAqX05vbm51bGwgYWxs
b3dlZENsYXNzZXMpCiB7CiAgICAgQVNTRVJUKGFsbG93ZWRDbGFzc2VzICYmIGFsbG93ZWRDbGFz
c2VzLmNvdW50KTsKICAgICBpZiAoIWFsbG93ZWRDbGFzc2VzIHx8ICFhbGxvd2VkQ2xhc3Nlcy5j
b3VudCkKQEAgLTM3Myw4ICs0MzIsMTUgQEAgc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+
IGRlY29kZVNlY3VyZUNvZGluZ0ludGVybmFsKERlY29kZXImIGRlY29kZXIsIE5TQXIKIAogICAg
IGF1dG8gdW5hcmNoaXZlciA9IGFkb3B0TlMoW1tOU0tleWVkVW5hcmNoaXZlciBhbGxvY10gaW5p
dEZvclJlYWRpbmdGcm9tRGF0YTooX19icmlkZ2UgTlNEYXRhICopZGF0YS5nZXQoKSBlcnJvcjpu
dWxscHRyXSk7CiAgICAgdW5hcmNoaXZlci5nZXQoKS5kZWNvZGluZ0ZhaWx1cmVQb2xpY3kgPSBO
U0RlY29kaW5nRmFpbHVyZVBvbGljeVJhaXNlRXhjZXB0aW9uOworCisgICAgYXV0byBkZWxlZ2F0
ZSA9IGFkb3B0TlMoW1tXS1NlY3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlIGFsbG9jXSBpbml0
XSk7CisgICAgdW5hcmNoaXZlci5nZXQoKS5kZWxlZ2F0ZSA9IGRlbGVnYXRlLmdldCgpOworCisg
ICAgYXV0byBhbGxvd2VkQ2xhc3NTZXQgPSBbTlNNdXRhYmxlU2V0IHNldFdpdGhBcnJheTphbGxv
d2VkQ2xhc3Nlc107CisgICAgW2FsbG93ZWRDbGFzc1NldCBhZGRPYmplY3Q6V0tFbmNvZGVkVVJM
LmNsYXNzXTsKKyAgICAKICAgICBAdHJ5IHsKLSAgICAgICAgaWQgcmVzdWx0ID0gW3VuYXJjaGl2
ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzc2VzOltOU1NldCBzZXRXaXRoQXJyYXk6YWxsb3dlZENsYXNz
ZXNdIGZvcktleTpOU0tleWVkQXJjaGl2ZVJvb3RPYmplY3RLZXldOworICAgICAgICBpZCByZXN1
bHQgPSBbdW5hcmNoaXZlciBkZWNvZGVPYmplY3RPZkNsYXNzZXM6YWxsb3dlZENsYXNzU2V0IGZv
cktleTpOU0tleWVkQXJjaGl2ZVJvb3RPYmplY3RLZXldOwogICAgICAgICBBU1NFUlQoIXJlc3Vs
dCB8fCBbcmVzdWx0IGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woTlNTZWN1cmVDb2Rpbmcp
XSk7CiAgICAgICAgIHJldHVybiB7IHJlc3VsdCB9OwogICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlv
biAqZXhjZXB0aW9uKSB7CkBAIC0zODIsMTIgKzQ0OCwxMyBAQCBzdGF0aWMgT3B0aW9uYWw8UmV0
YWluUHRyPGlkPj4gZGVjb2RlU2VjdXJlQ29kaW5nSW50ZXJuYWwoRGVjb2RlciYgZGVjb2Rlciwg
TlNBcgogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0gQGZpbmFsbHkgewogICAg
ICAgICBbdW5hcmNoaXZlciBmaW5pc2hEZWNvZGluZ107CisgICAgICAgIHVuYXJjaGl2ZXIuZ2V0
KCkuZGVsZWdhdGUgPSBuaWw7CiAgICAgfQogfQogCiAjcHJhZ21hIG1hcmsgLSBOU1N0cmluZwog
Ci1zdGF0aWMgaW5saW5lIHZvaWQgZW5jb2RlU3RyaW5nSW50ZXJuYWwoRW5jb2RlciYgZW5jb2Rl
ciwgTlNTdHJpbmcgKnN0cmluZykKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVTdHJpbmdJbnRl
cm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU1N0cmluZyAqX05vbm51bGwgc3RyaW5nKQogewogICAg
IGVuY29kZShlbmNvZGVyLCAoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpc3RyaW5nKTsKIH0KQEAgLTQw
Miw5ICs0NjksOSBAQCBzdGF0aWMgaW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29k
ZVN0cmluZ0ludGVybmFsKERlY29kZXImIGRlY29kZXIpCiAKICNwcmFnbWEgbWFyayAtIE5TVVJM
CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVVUkxJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVy
LCBOU1VSTCAqVVJMKQorc3RhdGljIGlubGluZSB2b2lkIGVuY29kZVVSTEludGVybmFsKEVuY29k
ZXImIGVuY29kZXIsIE5TVVJMICpfTm9ubnVsbCB1cmwpCiB7Ci0gICAgZW5jb2RlKGVuY29kZXIs
IChfX2JyaWRnZSBDRlVSTFJlZilVUkwpOworICAgIGVuY29kZShlbmNvZGVyLCAoX19icmlkZ2Ug
Q0ZVUkxSZWYpdXJsKTsKIH0KIAogc3RhdGljIGlubGluZSBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+
PiBkZWNvZGVVUkxJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyKQpAQCAtNDE3LDcgKzQ4NCw3IEBA
IHN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2RlVVJMSW50ZXJuYWwo
RGVjb2RlciYgZGVjb2RlcikKIAogI3ByYWdtYSBtYXJrIC0gRW50cnkgUG9pbnQgRW5jb2RlciAv
IERlY29kZXIKIAotdm9pZCBlbmNvZGVPYmplY3QoRW5jb2RlciYgZW5jb2RlciwgaWQgb2JqZWN0
KQordm9pZCBlbmNvZGVPYmplY3QoRW5jb2RlciYgZW5jb2RlciwgaWQgX05vbm51bGwgb2JqZWN0
KQogewogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Ym9vbD4oIW9iamVjdCk7CiAgICAgaWYg
KCFvYmplY3QpCkBAIC00NjQsNyArNTMxLDcgQEAgdm9pZCBlbmNvZGVPYmplY3QoRW5jb2RlciYg
ZW5jb2RlciwgaWQgb2JqZWN0KQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1PcHRp
b25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVPYmplY3QoRGVjb2RlciYgZGVjb2RlciwgTlNBcnJh
eTxDbGFzcz4gKmFsbG93ZWRDbGFzc2VzKQorT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2Rl
T2JqZWN0KERlY29kZXImIGRlY29kZXIsIE5TQXJyYXk8Q2xhc3M+ICpfTm9ubnVsbCBhbGxvd2Vk
Q2xhc3NlcykKIHsKICAgICBib29sIGlzTnVsbDsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlz
TnVsbCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJDb3JlQXJn
dW1lbnRDb2RlcnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVB
cmd1bWVudENvZGVyc0NvY29hLm1tCmluZGV4IDc2YWZiNzJmZjJmZDRmOTdiNWNmMDEzMmVlYTli
MzM3ZmE0NGFiNDMuLjJiNmE3NTVkZjcwZjkxOGZkMDA0N2M3YjY3MGI3YTQ2ZDE2NmIyNDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVy
c0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVu
dENvZGVyc0NvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9Gb250
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRBdHRyaWJ1dGVzLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1
ZXN0Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmg+CiAKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQpAQCAtNTQzLDQgKzU0NCw1OSBAQCBPcHRpb25hbDxGb250UGxhdGZvcm1E
YXRhPiBBcmd1bWVudENvZGVyPFJlZjxGb250Pj46OmRlY29kZVBsYXRmb3JtRGF0YShEZWNvZGVy
JgogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKGN0Rm9udC5nZXQoKSwgc2l6ZS52YWx1ZSgp
LCBzeW50aGV0aWNCb2xkLnZhbHVlKCksIHN5bnRoZXRpY09ibGlxdWUudmFsdWUoKSwgb3JpZW50
YXRpb24udmFsdWUoKSwgd2lkdGhWYXJpYW50LnZhbHVlKCksIHRleHRSZW5kZXJpbmdNb2RlLnZh
bHVlKCkpOwogfQogCit2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQoreworICAgIGF1dG8gcmVxdWVzdFRvU2Vy
aWFsaXplID0gcmV0YWluUHRyKHJlc291cmNlUmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6
SFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpKTsKKworICAgIGJvb2wg
cmVxdWVzdElzUHJlc2VudCA9IHJlcXVlc3RUb1NlcmlhbGl6ZTsKKyAgICBlbmNvZGVyIDw8IHJl
cXVlc3RJc1ByZXNlbnQ7CisKKyAgICBpZiAoIXJlcXVlc3RJc1ByZXNlbnQpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIFdlIGRvbid0IHNlbmQgSFRUUCBib2R5IG92ZXIgSVBDIGZvciBiZXR0
ZXIgcGVyZm9ybWFuY2UuCisgICAgLy8gQWxzbywgaXQncyBub3QgYWx3YXlzIHBvc3NpYmxlIHRv
IGRvLCBhcyBzdHJlYW1zIGNhbiBvbmx5IGJlIGNyZWF0ZWQgaW4gcHJvY2VzcyB0aGF0IGRvZXMg
bmV0d29ya2luZy4KKyAgICBpZiAoW3JlcXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9keV0gfHwgW3Jl
cXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9keVN0cmVhbV0pIHsKKyAgICAgICAgYXV0byBtdXRhYmxl
UmVxdWVzdCA9IGFkb3B0TlMoW3JlcXVlc3RUb1NlcmlhbGl6ZSBtdXRhYmxlQ29weV0pOworICAg
ICAgICBbbXV0YWJsZVJlcXVlc3Qgc2V0SFRUUEJvZHk6bmlsXTsKKyAgICAgICAgW211dGFibGVS
ZXF1ZXN0IHNldEhUVFBCb2R5U3RyZWFtOm5pbF07CisgICAgICAgIHJlcXVlc3RUb1NlcmlhbGl6
ZSA9IFdURk1vdmUobXV0YWJsZVJlcXVlc3QpOworICAgIH0KKworICAgIElQQzo6ZW5jb2RlKGVu
Y29kZXIsIHJlcXVlc3RUb1NlcmlhbGl6ZS5nZXQoKSk7CisKKyAgICBlbmNvZGVyIDw8IHJlc291
cmNlUmVxdWVzdC5yZXF1ZXN0ZXIoKTsKKyAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5p
c0FwcEJvdW5kKCk7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCit7CisgICAgYm9vbCByZXF1ZXN0SXNQcmVz
ZW50OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVxdWVzdElzUHJlc2VudCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghcmVxdWVzdElzUHJlc2VudCkgeworICAgICAgICBy
ZXNvdXJjZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QoKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgYXV0byByZXF1ZXN0ID0gSVBDOjpkZWNvZGU8TlNVUkxS
ZXF1ZXN0PihkZWNvZGVyLCBOU1VSTFJlcXVlc3QuY2xhc3MpOworICAgIGlmICghcmVxdWVzdCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dDo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVlc3Rl
cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgaXNBcHBCb3VuZDsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGlzQXBwQm91bmQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXNvdXJjZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QocmVxdWVzdC0+
Z2V0KCkpOworICAgIHJlc291cmNlUmVxdWVzdC5zZXRSZXF1ZXN0ZXIocmVxdWVzdGVyKTsKKyAg
ICByZXNvdXJjZVJlcXVlc3Quc2V0SXNBcHBCb3VuZChpc0FwcEJvdW5kKTsKKworICAgIHJldHVy
biB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0gYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCmluZGV4IDBmNjA1ZmFkNTIx
NzI1MTQxMGUyNWQ3YmJjOTFjYjEzYzgxNGU1NDQuLmM1OTUwNjhhNmE0Yzc3ZDA2MTI4MGFhMjU3
NDY0ZDY2YWEzYzEwMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9XZWJD
b3JlQXJndW1lbnRDb2RlcnNNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dl
YkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQpAQCAtNDIsMjQ1ICs0MiwxNCBAQAogI2ltcG9ydCA8
d3RmL01hY2hTZW5kUmlnaHQuaD4KICNpbXBvcnQgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgogCi0j
aWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbmNsdWRlIDxXZWJLaXRBZGRpdGlvbnMvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzTWFjQWRkaXRpb25zLmg+Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShX
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAjaW1wb3J0IDxXZWJDb3JlL01lZGlhUGxheWJhY2tU
YXJnZXRDb250ZXh0Lmg+CiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHBhbC9j
b2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGluay5oPgogI2VuZGlmCiAKLSNpZm5kZWYgV0VCQ09SRV9B
UkdVTUVOVENPREVSU19NQUNfREVDT0RFX0FERElUSU9OUwotI2RlZmluZSBXRUJDT1JFX0FSR1VN
RU5UQ09ERVJTX01BQ19ERUNPREVfQURESVRJT05TCi0jZW5kaWYKLQotI2lmbmRlZiBXRUJDT1JF
X0FSR1VNRU5UQ09ERVJTX01BQ19FTkNPREVfQURESVRJT05TCi0jZGVmaW5lIFdFQkNPUkVfQVJH
VU1FTlRDT0RFUlNfTUFDX0VOQ09ERV9BRERJVElPTlMKLSNlbmRpZgotCiBuYW1lc3BhY2UgSVBD
IHsKIAotc3RhdGljIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBjcmVhdGVTZXJp
YWxpemFibGVSZXByZXNlbnRhdGlvbihDRkluZGV4IHZlcnNpb24sIENGVHlwZVJlZiogb2JqZWN0
cywgQ0ZJbmRleCBvYmplY3RDb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmIHByb3RvY29sUHJvcGVydGll
cywgQ0ZOdW1iZXJSZWYgZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBDRlN0cmluZ1JlZiBtaW1lVHlw
ZSwgQ0ZUeXBlUmVmIHRva2VuTnVsbCkKLXsKLSAgICBhdXRvIGFyY2hpdmVMaXN0QXJyYXkgPSBh
ZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZU
eXBlQXJyYXlDYWxsQmFja3MpKTsKLQotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IG9iamVj
dENvdW50OyArK2kpIHsKLSAgICAgICAgQ0ZUeXBlUmVmIG9iamVjdCA9IG9iamVjdHNbaV07Ci0g
ICAgICAgIGlmIChvYmplY3QpIHsKLSAgICAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcmNo
aXZlTGlzdEFycmF5LmdldCgpLCBvYmplY3QpOwotICAgICAgICAgICAgQ0ZSZWxlYXNlKG9iamVj
dCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBBcHBlbmQgb3VyIHRva2VuIG51
bGwgcmVwcmVzZW50YXRpb24uCi0gICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJjaGl2
ZUxpc3RBcnJheS5nZXQoKSwgdG9rZW5OdWxsKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1
dG8gZGljdGlvbmFyeSA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBl
RGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0KLSAgICBhdXRvIHZlcnNpb25OdW1iZXIgPSBh
ZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckNGSW5k
ZXhUeXBlLCAmdmVyc2lvbikpOwotICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnku
Z2V0KCksIENGU1RSKCJ2ZXJzaW9uIiksIHZlcnNpb25OdW1iZXIuZ2V0KCkpOwotICAgIENGRGlj
dGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnkuZ2V0KCksIENGU1RSKCJhcmNoaXZlTGlzdCIpLCBh
cmNoaXZlTGlzdEFycmF5LmdldCgpKTsKLQotICAgIGlmIChwcm90b2NvbFByb3BlcnRpZXMpIHsK
LSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIoInBy
b3RvY29sUHJvcGVydGllcyIpLCBwcm90b2NvbFByb3BlcnRpZXMpOwotICAgICAgICBDRlJlbGVh
c2UocHJvdG9jb2xQcm9wZXJ0aWVzKTsKLSAgICB9Ci0KLSAgICBpZiAoZXhwZWN0ZWRDb250ZW50
TGVuZ3RoKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnkuZ2V0KCks
IENGU1RSKCJleHBlY3RlZENvbnRlbnRMZW5ndGgiKSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKTsK
LSAgICAgICAgQ0ZSZWxlYXNlKGV4cGVjdGVkQ29udGVudExlbmd0aCk7Ci0gICAgfQotCi0gICAg
aWYgKG1pbWVUeXBlKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnku
Z2V0KCksIENGU1RSKCJtaW1lVHlwZSIpLCBtaW1lVHlwZSk7Ci0gICAgICAgIENGUmVsZWFzZSht
aW1lVHlwZSk7Ci0gICAgfQotCi0gICAgQ0ZBbGxvY2F0b3JEZWFsbG9jYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIG9iamVjdHMpOwotCi0gICAgcmV0dXJuIGRpY3Rpb25hcnk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFZhbHVlVHlwZT4gYm9vbCBleHRyYWN0RGljdGlvbmFyeVZhbHVlKENGRGlj
dGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBDRlN0cmluZ1JlZiBrZXksIFZhbHVlVHlwZSogcmVzdWx0
KQotewotICAgIGF1dG8gdW50eXBlZFZhbHVlID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdGlv
bmFyeSwga2V5KTsKLSAgICBhdXRvIHZhbHVlID0gZHluYW1pY19jZl9jYXN0PFZhbHVlVHlwZT4o
dW50eXBlZFZhbHVlKTsKLSAgICBpZiAodW50eXBlZFZhbHVlICYmICF2YWx1ZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgICpyZXN1bHQgPSB2YWx1ZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgY3JlYXRlQXJjaGl2ZUxpc3QoQ0ZE
aWN0aW9uYXJ5UmVmIHJlcHJlc2VudGF0aW9uLCBDRlR5cGVSZWYgdG9rZW5OdWxsLCBDRkluZGV4
KiB2ZXJzaW9uLCBDRlR5cGVSZWYqKiBvYmplY3RzLCBDRkluZGV4KiBvYmplY3RDb3VudCwgQ0ZE
aWN0aW9uYXJ5UmVmKiBwcm90b2NvbFByb3BlcnRpZXMsIENGTnVtYmVyUmVmKiBleHBlY3RlZENv
bnRlbnRMZW5ndGgsIENGU3RyaW5nUmVmKiBtaW1lVHlwZSkKLXsKLSAgICBhdXRvIHZlcnNpb25O
dW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVl
KHJlcHJlc2VudGF0aW9uLCBDRlNUUigidmVyc2lvbiIpKSk7Ci0gICAgaWYgKCF2ZXJzaW9uTnVt
YmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIUNGTnVtYmVyR2V0VmFsdWUo
dmVyc2lvbk51bWJlciwga0NGTnVtYmVyQ0ZJbmRleFR5cGUsIHZlcnNpb24pKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGFyY2hpdmVMaXN0QXJyYXkgPSBkeW5hbWljX2NmX2Nh
c3Q8Q0ZBcnJheVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocmVwcmVzZW50YXRpb24sIENGU1RS
KCJhcmNoaXZlTGlzdCIpKSk7Ci0gICAgaWYgKCFhcmNoaXZlTGlzdEFycmF5KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGFyY2hpdmVMaXN0QXJyYXlDb3VudCA9IENGQXJyYXlH
ZXRDb3VudChhcmNoaXZlTGlzdEFycmF5KTsKLSAgICBpZiAoIWlzSW5Cb3VuZHM8c2l6ZV90Pihh
cmNoaXZlTGlzdEFycmF5Q291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRv
IGJ1ZmZlclNpemUgPSBDaGVja2VkU2l6ZShzaXplb2YoQ0ZUeXBlUmVmKSkgKiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGFyY2hpdmVMaXN0QXJyYXlDb3VudCk7Ci0gICAgaWYgKGJ1ZmZlclNpemUuaGFz
T3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWV4dHJhY3RE
aWN0aW9uYXJ5VmFsdWUocmVwcmVzZW50YXRpb24sIENGU1RSKCJwcm90b2NvbFByb3BlcnRpZXMi
KSwgcHJvdG9jb2xQcm9wZXJ0aWVzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
ZXh0cmFjdERpY3Rpb25hcnlWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoImV4cGVjdGVkQ29u
dGVudExlbmd0aCIpLCBleHBlY3RlZENvbnRlbnRMZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCFleHRyYWN0RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNU
UigibWltZVR5cGUiKSwgbWltZVR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAq
b2JqZWN0Q291bnQgPSBhcmNoaXZlTGlzdEFycmF5Q291bnQ7Ci0gICAgKm9iamVjdHMgPSBzdGF0
aWNfY2FzdDxDRlR5cGVSZWYqPihmYXN0TWFsbG9jKGJ1ZmZlclNpemUudW5zYWZlR2V0KCkpKTsK
LQotICAgIENGQXJyYXlHZXRWYWx1ZXMoYXJjaGl2ZUxpc3RBcnJheSwgQ0ZSYW5nZU1ha2UoMCwg
Km9iamVjdENvdW50KSwgKm9iamVjdHMpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8ICpv
YmplY3RDb3VudDsgKytpKSB7Ci0gICAgICAgIGlmICgoKm9iamVjdHMpW2ldID09IHRva2VuTnVs
bCkKLSAgICAgICAgICAgICgqb2JqZWN0cylbaV0gPSBudWxscHRyOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY3JlYXRl
U2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oQ0ZVUkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCwgQ0ZU
eXBlUmVmIHRva2VuTnVsbCkKLXsKLSAgICBDRkluZGV4IHZlcnNpb247Ci0gICAgQ0ZUeXBlUmVm
KiBvYmplY3RzOwotICAgIENGSW5kZXggb2JqZWN0Q291bnQ7Ci0gICAgQ0ZEaWN0aW9uYXJ5UmVm
IHByb3RvY29sUHJvcGVydGllczsKLQotICAgIC8vIEZJWE1FICgxMjg4OTUxOCk6IERvIG5vdCBz
ZXJpYWxpemUgSFRUUCBtZXNzYWdlIGJvZHkuCi0gICAgLy8gMS4gSXQgY2FuIGJlIGxhcmdlIGFu
ZCB0aHVzIGNvc3RseSB0byBzZW5kIGFjcm9zcy4KLSAgICAvLyAyLiBJdCBpcyBtaXNsZWFkaW5n
IHRvIHByb3ZpZGUgYSBib2R5IHdpdGggc29tZSByZXF1ZXN0cywgd2hpbGUgb3RoZXJzIHVzZSBi
b2R5IHN0cmVhbXMsIHdoaWNoIGNhbm5vdCBiZSBzZXJpYWxpemVkIGF0IGFsbC4KLQotICAgIF9D
RlVSTFJlcXVlc3RDcmVhdGVBcmNoaXZlTGlzdChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjZlJlcXVl
c3QsICZ2ZXJzaW9uLCAmb2JqZWN0cywgJm9iamVjdENvdW50LCAmcHJvdG9jb2xQcm9wZXJ0aWVz
KTsKLQotICAgIC8vIFRoaXMgd2lsbCBkZWFsbG9jYXRlIHRoZSBwYXNzZWQgaW4gYXJndW1lbnRz
LgotICAgIHJldHVybiBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbih2ZXJzaW9uLCBv
YmplY3RzLCBvYmplY3RDb3VudCwgcHJvdG9jb2xQcm9wZXJ0aWVzLCBudWxscHRyLCBudWxscHRy
LCB0b2tlbk51bGwpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENGVVJMUmVxdWVzdFJlZj4gY3Jl
YXRlQ0ZVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKENGRGljdGlvbmFy
eVJlZiByZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRva2VuTnVsbCkKLXsKLSAgICBDRkluZGV4
IHZlcnNpb247Ci0gICAgQ0ZUeXBlUmVmKiBvYmplY3RzOwotICAgIENGSW5kZXggb2JqZWN0Q291
bnQ7Ci0gICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3RvY29sUHJvcGVydGllczsKLQotICAgIGlmICgh
Y3JlYXRlQXJjaGl2ZUxpc3QocmVwcmVzZW50YXRpb24sIHRva2VuTnVsbCwgJnZlcnNpb24sICZv
YmplY3RzLCAmb2JqZWN0Q291bnQsICZwcm90b2NvbFByb3BlcnRpZXMsIG51bGxwdHIsIG51bGxw
dHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gY2ZSZXF1ZXN0ID0gYWRv
cHRDRihfQ0ZVUkxSZXF1ZXN0Q3JlYXRlRnJvbUFyY2hpdmVMaXN0KGtDRkFsbG9jYXRvckRlZmF1
bHQsIHZlcnNpb24sIG9iamVjdHMsIG9iamVjdENvdW50LCBwcm90b2NvbFByb3BlcnRpZXMpKTsK
LSAgICBmYXN0RnJlZShvYmplY3RzKTsKLSAgICByZXR1cm4gV1RGTW92ZShjZlJlcXVlc3QpOwot
fQotCi1zdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY3JlYXRlU2VyaWFsaXphYmxl
UmVwcmVzZW50YXRpb24oTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0LCBDRlR5cGVSZWYgdG9rZW5OdWxs
KQotewotICAgIHJldHVybiBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihbcmVxdWVz
dCBfQ0ZVUkxSZXF1ZXN0XSwgdG9rZW5OdWxsKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxOU1VS
TFJlcXVlc3Q+IGNyZWF0ZU5TVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRhdGlv
bihDRkRpY3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwpCi17
Ci0gICAgYXV0byBjZlJlcXVlc3QgPSBjcmVhdGVDRlVSTFJlcXVlc3RGcm9tU2VyaWFsaXphYmxl
UmVwcmVzZW50YXRpb24ocmVwcmVzZW50YXRpb24sIHRva2VuTnVsbCk7Ci0gICAgaWYgKCFjZlJl
cXVlc3QpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHJldHVybiBhZG9wdE5T
KFtbTlNVUkxSZXF1ZXN0IGFsbG9jXSBfaW5pdFdpdGhDRlVSTFJlcXVlc3Q6Y2ZSZXF1ZXN0Lmdl
dCgpXSk7Ci19Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+
OjplbmNvZGVQbGF0Zm9ybURhdGEoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCi17Ci0gICAgUmV0YWluUHRyPE5TVVJMUmVx
dWVzdD4gcmVxdWVzdFRvU2VyaWFsaXplID0gcmVzb3VyY2VSZXF1ZXN0Lm5zVVJMUmVxdWVzdChX
ZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSk7Ci0KLSAg
ICBib29sIHJlcXVlc3RJc1ByZXNlbnQgPSByZXF1ZXN0VG9TZXJpYWxpemU7Ci0gICAgZW5jb2Rl
ciA8PCByZXF1ZXN0SXNQcmVzZW50OwotCi0gICAgaWYgKCFyZXF1ZXN0SXNQcmVzZW50KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBkb24ndCBzZW5kIEhUVFAgYm9keSBvdmVyIElQQyBm
b3IgYmV0dGVyIHBlcmZvcm1hbmNlLgotICAgIC8vIEFsc28sIGl0J3Mgbm90IGFsd2F5cyBwb3Nz
aWJsZSB0byBkbywgYXMgc3RyZWFtcyBjYW4gb25seSBiZSBjcmVhdGVkIGluIHByb2Nlc3MgdGhh
dCBkb2VzIG5ldHdvcmtpbmcuCi0gICAgaWYgKFtyZXF1ZXN0VG9TZXJpYWxpemUgSFRUUEJvZHld
IHx8IFtyZXF1ZXN0VG9TZXJpYWxpemUgSFRUUEJvZHlTdHJlYW1dKSB7Ci0gICAgICAgIHJlcXVl
c3RUb1NlcmlhbGl6ZSA9IGFkb3B0TlMoW3JlcXVlc3RUb1NlcmlhbGl6ZSBtdXRhYmxlQ29weV0p
OwotICAgICAgICBbKE5TTXV0YWJsZVVSTFJlcXVlc3QgKilyZXF1ZXN0VG9TZXJpYWxpemUgc2V0
SFRUUEJvZHk6bmlsXTsKLSAgICAgICAgWyhOU011dGFibGVVUkxSZXF1ZXN0ICopcmVxdWVzdFRv
U2VyaWFsaXplIHNldEhUVFBCb2R5U3RyZWFtOm5pbF07Ci0gICAgfQotCi0gICAgYXV0byBkaWN0
aW9uYXJ5ID0gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24ocmVxdWVzdFRvU2VyaWFs
aXplLmdldCgpLCBJUEM6OnRva2VuTnVsbHB0clR5cGVSZWYoKSk7Ci0gICAgSVBDOjplbmNvZGUo
ZW5jb2RlciwgZGljdGlvbmFyeS5nZXQoKSk7Ci0KLSAgICBXRUJDT1JFX0FSR1VNRU5UQ09ERVJT
X01BQ19FTkNPREVfQURESVRJT05TCi0KLSAgICAvLyBUaGUgZmFsbGJhY2sgYXJyYXkgaXMgcGFy
dCBvZiBOU1VSTFJlcXVlc3QsIGJ1dCBpdCBpcyBub3QgZW5jb2RlZCBieSBXS05TVVJMUmVxdWVz
dENyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uLgotICAgIGVuY29kZXIgPDwgcmVzb3Vy
Y2VSZXF1ZXN0LnJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
KCk7Ci0gICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QucmVxdWVzdGVyKCk7Ci0gICAgZW5j
b2RlciA8PCByZXNvdXJjZVJlcXVlc3QuY2FjaGVQb2xpY3koKTsKLSAgICBlbmNvZGVyIDw8IHJl
c291cmNlUmVxdWVzdC5pc0FwcEJvdW5kKCk7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEoRGVjb2RlciYgZGVjb2Rl
ciwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCi17Ci0gICAgYm9v
bCByZXF1ZXN0SXNQcmVzZW50OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVxdWVzdElzUHJl
c2VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghcmVxdWVzdElzUHJlc2Vu
dCkgewotICAgICAgICByZXNvdXJjZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qo
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gZGljdGlvbmFyeTsKLSAgICBpZiAoIUlQQzo6ZGVjb2RlKGRlY29kZXIsIGRpY3Rp
b25hcnkpIHx8ICFkaWN0aW9uYXJ5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRv
IG5zVVJMUmVxdWVzdCA9IGNyZWF0ZU5TVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNl
bnRhdGlvbihkaWN0aW9uYXJ5LmdldCgpLCBJUEM6OnRva2VuTnVsbHB0clR5cGVSZWYoKSk7Ci0g
ICAgaWYgKCFuc1VSTFJlcXVlc3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdFQkNP
UkVfQVJHVU1FTlRDT0RFUlNfTUFDX0RFQ09ERV9BRERJVElPTlMKLQotICAgIHJlc291cmNlUmVx
dWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdChuc1VSTFJlcXVlc3QuZ2V0KCkpOwotICAg
IAotICAgIFZlY3RvcjxTdHJpbmc+IHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdG
YWxsYmFja0FycmF5OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzcG9uc2VDb250ZW50RGlz
cG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXNvdXJjZVJlcXVlc3Quc2V0UmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGlu
Z0ZhbGxiYWNrQXJyYXkoCi0gICAgICAgIHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2Rp
bmdGYWxsYmFja0FycmF5LnNpemUoKSA+IDAgPyByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheVswXSA6IFN0cmluZygpLAotICAgICAgICByZXNwb25zZUNvbnRl
bnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkgPiAxID8gcmVzcG9uc2VD
b250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMV0gOiBTdHJpbmcoKSwKLSAg
ICAgICAgcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6
ZSgpID4gMiA/IHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
WzJdIDogU3RyaW5nKCkKLSAgICApOwotCi0gICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpS
ZXF1ZXN0ZXIgcmVxdWVzdGVyOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVxdWVzdGVyKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc291cmNlUmVxdWVzdC5zZXRSZXF1ZXN0ZXIo
cmVxdWVzdGVyKTsKLQotICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5IGNh
Y2hlUG9saWN5OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2FjaGVQb2xpY3kpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzb3VyY2VSZXF1ZXN0LnNldENhY2hlUG9saWN5KGNhY2hl
UG9saWN5KTsKLQotICAgIGJvb2wgaXNBcHBCb3VuZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGlzQXBwQm91bmQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzb3VyY2VSZXF1ZXN0
LnNldElzQXBwQm91bmQoaXNBcHBCb3VuZCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9p
ZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5m
bykKIHsKICAgICBlbmNvZGVyIDw8IGNlcnRpZmljYXRlSW5mby50eXBlKCk7CmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGFlZDY5YjRkNTc2MTZh
YThmMzVlZTgwOWJkZjcyOTgzZGM2MzM4OS4uYzU2OTkxYzkwZGZkYmU0ODY5MmUxODE0NTA4ZWE0
Y2IyZTcwMDRhMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTAyLTIzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdo
YW1AYXBwbGUuY29tPgorCisgICAgICAgIFNlcmlhbGl6ZSBOU1VSTFJlcXVlc3QgKHJhdGhlciB0
aGFuIENGVVJMUmVxdWVzdCkgaW4gSVBDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjIxNDUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc0NTAwOTYz
PgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyIGFuZCBBbGV4IENocmlzdGVuc2Vu
LgorCisgICAgICAgIEFkZCBhIG5ldyB0ZXN0IHRvIGVuc3VyZSB3ZSBjYW4gc3VjY2Vzc2Z1bGx5
IGxvYWQgVVJMcyB3aXRoIGFjY2VudGVkIGNoYXJhY3RlcnMsCisgICAgICAgIGFuZCB0byB0ZXN0
IHRoZSB1cGRhdGVkIElQQyBzZXJpYWxpemF0aW9uIGZvciBOU1VSTFJlcXVlc3QuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9BLzMwMy8yNDcvMzAzLzI0M28uaHRtbDog
QWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZp
ZXdMb2FkQVBJcy5tbToKKyAgICAgICAgKFRFU1QpOgorCiAyMDIxLTAyLTIyICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIGFkb3B0TlMoKSBhcyBzb29uIGFz
IHdlIFtbT2JqY0NsYXNzIGFsbG9jXSBpbml0XSB0byBhdm9pZCBsZWFrcwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5t
bSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3TG9hZEFQ
SXMubW0KaW5kZXggYmVkNTAwZWEzMzk0NWE4MWU2OGQ4ODgzN2ZhOTBhZjdjZTU3MjA4YS4uYzZl
OGFjNDQ1NjZkNDVmNjI5NmFhOGE4NWZmOTIxZGE1YWE5NGVhYiAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0xvYWRBUElz
Lm1tCkBAIC0xMzIsMyArMTMyLDQyIEBAIFRFU1QoV0tXZWJWaWV3LCBMb2FkU2ltdWxhdGVkUmVx
dWVzdFVwZGF0ZXNCYWNrRm9yd2FyZExpc3QpCiAgICAgRVhQRUNUX1RSVUUoIWxpc3QuZm9yd2Fy
ZEl0ZW0pOwogICAgIEVYUEVDVF9XS19TVFJFUShleGFtcGxlVVJMU3RyaW5nLCBbbGlzdC5iYWNr
SXRlbS5VUkwgYWJzb2x1dGVTdHJpbmddKTsKIH0KKworVEVTVChXS1dlYlZpZXcsIExvYWRBY2Nl
bnRlZEZpbGVSZXF1ZXN0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsKKwor
ICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxv
Y10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5n
ZXQoKV07CisKKyAgICBjb25zdCBVSW50OCBieXRlc1s2XSA9IHsgJ0EnLCAweEMzLCAweEE3LCAw
eEMzLCAweEEzLCAnbycgfTsKKyAgICBhdXRvIGZpbGVOYW1lID0gYWRvcHROUyhbW05TU3RyaW5n
IGFsbG9jXSBpbml0V2l0aEJ5dGVzOmJ5dGVzIGxlbmd0aDo2IGVuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nXSk7CisKKyAgICAvLyBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gYWRkIHVuaWNvZGUg
ZmlsZW5hbWVzIHRvIGdpdC4KKyAgICBOU1VSTCAqb3JpZ2luYWxGaWxlID0gW1tOU0J1bmRsZSBt
YWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwi
IHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAgRVhQRUNUX05P
VF9OVUxMKG9yaWdpbmFsRmlsZSk7CisKKyAgICBOU1N0cmluZyAqdGVzdERpcmVjdG9yeVN0cmlu
ZyA9IFtOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDpbW05TVVVJRCBVVUlEXSBVVUlEU3RyaW5nXV07CisgICAgTlNVUkwgKnRlc3REaXJlY3Rvcnkg
PSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOiB0ZXN0RGlyZWN0b3J5U3RyaW5nXTsKKworICAgIE5T
U3RyaW5nICp0ZXN0RmlsZVN0cmluZyA9IFtbdGVzdERpcmVjdG9yeVN0cmluZyBzdHJpbmdCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6ZmlsZU5hbWUuZ2V0KCldIHN0cmluZ0J5QXBwZW5kaW5nUGF0
aEV4dGVuc2lvbjpAImh0bWwiXTsKKyAgICBOU1VSTCAqdGVzdEZpbGUgPSBbTlNVUkwgZmlsZVVS
TFdpdGhQYXRoOnRlc3RGaWxlU3RyaW5nXTsKKworICAgIGF1dG8gZGVmYXVsdE1hbmFnZXIgPSBb
TlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07CisgICAgW2RlZmF1bHRNYW5hZ2VyIHJlbW92
ZUl0ZW1BdFVSTDp0ZXN0RmlsZSBlcnJvcjpuaWxdOworICAgIFtkZWZhdWx0TWFuYWdlciByZW1v
dmVJdGVtQXRVUkw6dGVzdERpcmVjdG9yeSBlcnJvcjpuaWxdOworCisgICAgW2RlZmF1bHRNYW5h
Z2VyIGNyZWF0ZURpcmVjdG9yeUF0VVJMOnRlc3REaXJlY3Rvcnkgd2l0aEludGVybWVkaWF0ZURp
cmVjdG9yaWVzOllFUyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjpuaWxdOworCisgICAgTlNFcnJvciAq
ZXJyb3IgPSBuaWw7CisgICAgW2RlZmF1bHRNYW5hZ2VyIGNvcHlJdGVtQXRVUkw6b3JpZ2luYWxG
aWxlIHRvVVJMOnRlc3RGaWxlIGVycm9yOiZlcnJvcl07CisgICAgRVhQRUNUX05VTEwoZXJyb3Ip
OworICAgIAorICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVz
dFdpdGhVUkw6dGVzdEZpbGVdOworICAgIFt3ZWJWaWV3IGxvYWRGaWxlUmVxdWVzdDpyZXF1ZXN0
IGFsbG93aW5nUmVhZEFjY2Vzc1RvVVJMOnRlc3RGaWxlLlVSTEJ5RGVsZXRpbmdMYXN0UGF0aENv
bXBvbmVudF07CisgICAgW2RlbGVnYXRlIHdhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEod2ViVmlldy5nZXQoKS5fcmVzb3VyY2VEaXJlY3RvcnlVUkwucGF0
aCwgdGVzdEZpbGUuVVJMQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50LnBhdGgpOworCisgICAg
W2RlZmF1bHRNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDp0ZXN0RmlsZSBlcnJvcjpuaWxdOworICAg
IFtkZWZhdWx0TWFuYWdlciByZW1vdmVJdGVtQXRVUkw6dGVzdERpcmVjdG9yeSBlcnJvcjpuaWxd
OworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421470</attachid>
            <date>2021-02-24 15:23:30 -0800</date>
            <delta_ts>2021-02-24 17:26:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222145-20210224152330.patch</filename>
            <type>text/plain</type>
            <size>33856</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMjc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGM1YmNlYmY2ODM0Y2Y1YzZmYTU2ZTQx
MjQ1NTM2ODY0ZWRmZDVlMjMuLmMwN2U2N2ZkZDcwNjEzNWY5MGE3MzE1M2M1ZTk0ZmY4NjA0ZWYy
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDItMjQgIEJyZW50IEZ1bGdoYW0gIDxiZnVs
Z2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVxdWVzdCAocmF0aGVy
IHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MDA5
NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVVJM
V2l0aERhdGEgZG9lcyBhbiBlYXJseSByZXR1cm4gd2hlbiB0aGUgbGVhZGluZyBjaGFyYWN0ZXIg
aW4gdGhlIFVSTCBpcyAnLycsCisgICAgICAgIHNpZ25pZnlpbmcgYSBmaWxlIHBhdGguIEhvd2V2
ZXIsIFVSTHMgb2YgdGhlIGZvcm0gIi8vY2RuLmRvbWFpbi5jb20iIGFyZSBvZnRlbgorICAgICAg
ICBlbmNvdW50ZXJlZCwgYW5kIFJGQyAzOTg2IGRvZXMgbm90IHByb2hpYml0IHRoZW0uIFdlIHNo
b3VsZCBvbmx5IGRvIGFuIGVhcmx5CisgICAgICAgIHJldHVybiBpZiB0aGUgY2hhcmFjdGVyIGFm
dGVyIHRoZSBpbml0aWFsICcvJyBpcyBub3QgYWxzbyAnLycuCisKKyAgICAgICAgKiB3dGYvY29j
b2EvTlNVUkxFeHRyYXMubW06CisgICAgICAgIChXVEY6OlVSTFdpdGhEYXRhKToKKwogMjAyMS0w
Mi0yMiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGV4cGVy
aW1lbnRhbCBzdXBwb3J0IGZvciBDU1MgQ29sb3IgNSBjb2xvci1taXgoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBl
YjU3OTQ0OGI5NWIxY2UyZTI0MDYyNzc1N2QwMmFjNDI4NjI5M2ZkLi5iYWMyZmI0YTBmZDllYzQw
NGJiZDhiZDJkMGFkNTBiOWU4YzIxNTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDIx
LTAyLTIzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFNl
cmlhbGl6ZSBOU1VSTFJlcXVlc3QgKHJhdGhlciB0aGFuIENGVVJMUmVxdWVzdCkgaW4gSVBDCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjIxNDUKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc0NTAwOTYzPgorCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyIGFuZCBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIFRlc3RlZCBieSBleGlz
dGluZyBsYXlvdXQgYW5kIFdlYktpdEFQSSB0ZXN0cy4KKworICAgICAgICBSZXZpc2UgSVBDIHNl
cmlhbGl6YXRpb24gc28gdGhhdCBOU1VSTENvbm5lY3Rpb24gKG1vZGVybikgQ29jb2EgYnVpbGRz
IHNlcmlhbGl6ZSB0aGUKKyAgICAgICAgTlNVUkxSZXF1ZXN0IG9iamVjdCwgcmF0aGVyIHRoYW4g
YnJpZGdpbmcgdG8gQ0ZVUkxSZXF1ZXN0IGFuZCBzZXJpYWxpemluZyB0aGF0LiBUaGlzCisgICAg
ICAgIGVuc3VyZXMgdGhhdCB0aGUgZnVsbCBzZXQgb2YgTlNVUkxSZXF1ZXN0IGZlYXR1cmVzIGFy
ZSBhY2N1cmF0ZWx5IHJlY29uc3RpdHV0ZWQgb24gdGhlCisgICAgICAgIHJlY2VpdmluZyBzaWRl
IG9mIHRoZSBjb25uZWN0aW9uLgorCisgICAgICAgIEJlY2F1c2UgTlNVUkwgc2VyaWFsaXphdGlv
biBkb2Vzbid0IGhhbmRsZSBzb21lIGVuY29kZWQgcGFyYW1ldGVycyBwcm9wZXJseSwgd2UgaW1w
bGVtZW50CisgICAgICAgIGFuIGFyY2hpdmluZyBkZWxlZ2F0ZSB0byBhcmNoaXZlIHRoZSBVUkwg
bGlrZSB3ZSBkbyBmb3IgQ0ZVUkwuCisKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvQXJndW1lbnRD
b2RlcnNDb2NvYS5tbToKKyAgICAgICAgKC1bV0tTZWN1cmVDb2RpbmdBcmNoaXZpbmdEZWxlZ2F0
ZSBhcmNoaXZlcjp3aWxsRW5jb2RlT2JqZWN0Ol0pOiBBZGRlZC4KKyAgICAgICAgKC1bV0tTZWN1
cmVDb2RpbmdBcmNoaXZpbmdEZWxlZ2F0ZSB1bmFyY2hpdmVyOmRpZERlY29kZU9iamVjdDpdKTog
QWRkZWQuCisgICAgICAgICgrW1dLRW5jb2RlZFVSTCBzdXBwb3J0c1NlY3VyZUNvZGluZ10pOiBB
ZGRlZC4KKyAgICAgICAgKC1bV0tFbmNvZGVkVVJMIGVuY29kZVdpdGhDb2RlcjpdKTogQWRkZWQu
CisgICAgICAgICgtW1dLRW5jb2RlZFVSTCBpbml0V2l0aENvZGVyOl0pOiBBZGRlZC4KKyAgICAg
ICAgKC1bV0tFbmNvZGVkVVJMIGluaXRXaXRoVVJMOl0pOiBBZGRlZC4KKyAgICAgICAgKElQQzo6
ZW5jb2RlU2VjdXJlQ29kaW5nSW50ZXJuYWwpOiBVcGRhdGUgdG8gdXNlIG5ldyBkZWxlZ2F0ZS4K
KyAgICAgICAgKElQQzo6ZGVjb2RlU2VjdXJlQ29kaW5nSW50ZXJuYWwpOiBEaXR0by4KKyAgICAg
ICAgKC1bV0tTZWN1cmVDb2RpbmdGb250QXR0cmlidXRlTm9ybWFsaXplciBhcmNoaXZlcjp3aWxs
RW5jb2RlT2JqZWN0Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9XZWJDb3Jl
QXJndW1lbnRDb2RlcnNDb2NvYS5tbToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEpOiBBZGQgTlNVUkxSZXF1
ZXN0IGVuY29kaW5nLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0YSk6IEFkZCBOU1VSTFJlcXVlc3QgZGVjb2Rp
bmcuCisgICAgICAgICogU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW06Cisg
ICAgICAgIChJUEM6OmNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKElQQzo6ZXh0cmFjdERpY3Rpb25hcnlWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAg
IChJUEM6OmNyZWF0ZUFyY2hpdmVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6Y3JlYXRl
Q0ZVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKElQQzo6Y3JlYXRlTlNVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEpOiBEZWxldGVkLgorICAgICAgICAoSVBD
OjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3Jt
RGF0YSk6IERlbGV0ZWQuCisKIDIwMjEtMDItMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBVc2UgYWRvcHROUygpIGFzIHNvb24gYXMgd2UgW1tPYmpjQ2xhc3Mg
YWxsb2NdIGluaXRdIHRvIGF2b2lkIGxlYWtzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9j
b2NvYS9OU1VSTEV4dHJhcy5tbSBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJMRXh0cmFzLm1t
CmluZGV4IDIwOWVhNWI4NjY0YTFiYTMxOTJmOWVjMjM1MzllMzBjZTJjOTdhODIuLjkzYTAxZDcx
MDVhMTJmMTI1YjlmNGIxYTYxZDJiM2VhODI5Mjk3M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL2NvY29hL05TVVJMRXh0cmFzLm1tCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJM
RXh0cmFzLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2NCw4ICsxNjQsMTIgQEAgTlNVUkwgKlVSTFdpdGhEYXRh
KE5TRGF0YSAqZGF0YSwgTlNVUkwgKmJhc2VVUkwpCiAgICAgICAgIGNvbnN0IFVJbnQ4ICpieXRl
cyA9IHN0YXRpY19jYXN0PGNvbnN0IFVJbnQ4Kj4oW2RhdGEgYnl0ZXNdKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIENGVVJMQ3JlYXRlQWJzb2x1dGVVUkxXaXRoQnl0ZXMgd291bGQgY29tcGxhaW4g
dG8gY29uc29sZSBpZiB3ZSBwYXNzZWQgYSBwYXRoIHRvIGl0LgotICAgICAgICBpZiAoYnl0ZXNb
MF0gPT0gJy8nICYmICFiYXNlVVJMKQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAg
aWYgKGJ5dGVzWzBdID09ICcvJyAmJiAhYmFzZVVSTCkgeworICAgICAgICAgICAgLy8gQSBVUkwg
c3RhcnRpbmcgd2l0aCAnLy8nIGlzIHZhbGlkIChhbiBhdXRob3JpdHkgd2l0aG91dCBhIHNjaGVt
ZSksIGFuZCBpcyBub3QgYSBmaWxlIHBhdGguCisgICAgICAgICAgICAvLyBTbyBvbmx5IHJldHVy
biBlYXJseSBpZiB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBzbGFzaCBpcyBzb21ldGhpaGcgZWxz
ZS4KKyAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMSB8fCBieXRlc1sxXSAhPSAnLycpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8g
Tk9URTogV2UgdXNlIFVURi04IGhlcmUgc2luY2UgdGhpcyBlbmNvZGluZyBpcyB1c2VkIHdoZW4g
Y29tcHV0aW5nIHN0cmluZ3Mgd2hlbiByZXR1cm5pbmcgVVJMIGNvbXBvbmVudHMKICAgICAgICAg
Ly8gKGUuZyBjYWxscyB0byBOU1VSTCAtcGF0aCkuIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gaXMg
bm90IHRvbGVyYW50IG9mIGlsbGVnYWwgVVRGLTggc2VxdWVuY2VzLCB3aGljaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQXJndW1lbnRDb2RlcnNDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0FyZ3VtZW50Q29kZXJzQ29jb2EubW0KaW5kZXggYmQz
YWVjMzFjMzNkYjU3ZjZmODIyN2UzNTY5MWFhM2I4NzQwZjg3YS4uMmNkOTBlZmMwNjgxZDk3YzYw
MzAzNGNiM2MxZWU1MTkwMmRiNGViZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
Q29jb2EvQXJndW1lbnRDb2RlcnNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9D
b2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOCwgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDggQEAKICNpbXBvcnQg
PENvcmVUZXh0L0NURm9udERlc2NyaXB0b3IuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNl
cHRpb25zLmg+CiAjaW1wb3J0IDx3dGYvSGFzaFNldC5oPgorI2ltcG9ydCA8d3RmL2NmL0NGVVJM
RXh0cmFzLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvTlNVUkxFeHRyYXMuaD4KIAogI2lmIFVTRShB
UFBLSVQpCiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+CkBAIC00OSwyOCArNTEsOTIgQEAK
ICNpbXBvcnQgPFVJS2l0L1VJRm9udERlc2NyaXB0b3IuaD4KICNlbmRpZgogCi0jaWYgSEFWRShO
U0ZPTlRfV0lUSF9PUFRJQ0FMX1NJWklOR19CVUcpCitAaW50ZXJmYWNlIFdLU2VjdXJlQ29kaW5n
QXJjaGl2aW5nRGVsZWdhdGUgOiBOU09iamVjdCA8TlNLZXllZEFyY2hpdmVyRGVsZWdhdGUsIE5T
S2V5ZWRVbmFyY2hpdmVyRGVsZWdhdGU+CitAZW5kCiAKLUBpbnRlcmZhY2UgV0tTZWN1cmVDb2Rp
bmdGb250QXR0cmlidXRlTm9ybWFsaXplciA6IE5TT2JqZWN0IDxOU0tleWVkQXJjaGl2ZXJEZWxl
Z2F0ZT4KK0BpbnRlcmZhY2UgV0tFbmNvZGVkVVJMIDogTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5n
PgorLSAoaW5zdGFuY2V0eXBlIF9OdWxsYWJsZSlpbml0V2l0aFVSTDooTlNVUkwgKl9Ob25udWxs
KXVybDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNVUkwgKl9Ob25udWxsIHVy
bDsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIFdLU2VjdXJlQ29kaW5nRm9udEF0dHJpYnV0ZU5v
cm1hbGl6ZXIKK0BpbXBsZW1lbnRhdGlvbiBXS1NlY3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRl
CiAKLS0gKGlkKWFyY2hpdmVyOihOU0tleWVkQXJjaGl2ZXIgKilhcmNoaXZlciB3aWxsRW5jb2Rl
T2JqZWN0OihpZClvYmplY3QKKy0gKG51bGxhYmxlIGlkKWFyY2hpdmVyOihOU0tleWVkQXJjaGl2
ZXIgKl9Ob25udWxsKWFyY2hpdmVyIHdpbGxFbmNvZGVPYmplY3Q6KGlkIF9Ob25udWxsKW9iamVj
dAogewotICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TRm9udCBjbGFzc11dKSB7Ci0g
ICAgICAgIE5TRm9udCAqZm9udCA9IHN0YXRpY19jYXN0PE5TRm9udCAqPihvYmplY3QpOworI2lm
IEhBVkUoTlNGT05UX1dJVEhfT1BUSUNBTF9TSVpJTkdfQlVHKQorICAgIGlmIChhdXRvICpmb250
ID0gZHluYW1pY19vYmpjX2Nhc3Q8TlNGb250PihvYmplY3QpKSB7CiAgICAgICAgIC8vIFJlY3Jl
YXRlIGFueSBzZXJpYWxpemVkIGZvbnRzIGFmdGVyIG5vcm1hbGl6aW5nIHRoZQogICAgICAgICAv
LyBmb250IGF0dHJpYnV0ZXMgdG8gd29yayBhcm91bmQgPHJkYXI6Ly9wcm9ibGVtLzUxNjU3ODgw
Pi4KICAgICAgICAgcmV0dXJuIFdlYktpdDo6Zm9udFdpdGhBdHRyaWJ1dGVzKGZvbnQuZm9udERl
c2NyaXB0b3IuZm9udEF0dHJpYnV0ZXMsIDApOwogICAgIH0KKyNlbmRpZgorCisgICAgaWYgKGF1
dG8gKnVybCA9IGR5bmFtaWNfb2JqY19jYXN0PE5TVVJMPihvYmplY3QpKQorICAgICAgICByZXR1
cm4gYWRvcHROUyhbW1dLRW5jb2RlZFVSTCBhbGxvY10gaW5pdFdpdGhVUkw6dXJsXSkuYXV0b3Jl
bGVhc2UoKTsKIAogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKKy0gKGlkIF9OdWxsYWJsZSl1bmFy
Y2hpdmVyOihOU0tleWVkVW5hcmNoaXZlciAqX05vbm51bGwpdW5hcmNoaXZlciBkaWREZWNvZGVP
YmplY3Q6KGlkIF9OdWxsYWJsZSkgTlNfUkVMRUFTRVNfQVJHVU1FTlQgb2JqZWN0IE5TX1JFVFVS
TlNfUkVUQUlORUQKK3sKKyAgICBhdXRvIG9iamVjdFB0ciA9IGFkb3B0TlMob2JqZWN0KTsKKyAg
ICBpZiAoYXV0byAqZW5jb2RlZFVSTCA9IGR5bmFtaWNfb2JqY19jYXN0PFdLRW5jb2RlZFVSTD4o
b2JqZWN0UHRyLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIHJldGFpblB0cihlbmNvZGVkVVJMLnVy
bCkubGVha1JlZigpOworCisgICAgcmV0dXJuIG9iamVjdFB0ci5sZWFrUmVmKCk7Cit9CisKIEBl
bmQKIAotI2VuZGlmCitAaW1wbGVtZW50YXRpb24gV0tFbmNvZGVkVVJMIHsKKyAgICBSZXRhaW5Q
dHI8TlNVUkw+IG1fdXJsOworfQorCistIChOU1VSTCAqX05vbm51bGwpdXJsCit7CisgICAgcmV0
dXJuIG1fdXJsLmdldCgpOworfQorCisrIChCT09MKXN1cHBvcnRzU2VjdXJlQ29kaW5nCit7Cisg
ICAgcmV0dXJuIFlFUzsKK30KKworLSAodm9pZCllbmNvZGVXaXRoQ29kZXI6KE5TQ29kZXIgKl9O
b25udWxsKWNvZGVyCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV91cmwpOworICAgIFdURjo6VVJM
Q2hhckJ1ZmZlciB1cmxCeXRlczsKKyAgICBXVEY6OmdldFVSTEJ5dGVzKChfX2JyaWRnZSBDRlVS
TFJlZiltX3VybC5nZXQoKSwgdXJsQnl0ZXMpOworICAgIFtjb2RlciBlbmNvZGVCeXRlczp1cmxC
eXRlcy5kYXRhKCkgbGVuZ3RoOnVybEJ5dGVzLnNpemUoKV07Cit9CisKKy0gKF9OdWxsYWJsZSBp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb2RlcjooTlNDb2RlciAqX05vbm51bGwpY29kZXIKK3sKKyAg
ICBhdXRvIHNlbGZQdHIgPSBhZG9wdE5TKFtzdXBlciBpbml0XSk7CisgICAgaWYgKHNlbGZQdHIp
IHsKKyAgICAgICAgTlNVSW50ZWdlciBsZW5ndGg7CisgICAgICAgIGlmIChhdXRvIGJ5dGVzID0g
KHVpbnQ4X3QgKilbY29kZXIgZGVjb2RlQnl0ZXNXaXRoUmV0dXJuZWRMZW5ndGg6Jmxlbmd0aF0p
IHsKKyAgICAgICAgICAgIG1fdXJsID0gV1RGOjpVUkxXaXRoRGF0YShbTlNEYXRhIGRhdGFXaXRo
Qnl0ZXNOb0NvcHk6Ynl0ZXMgbGVuZ3RoOmxlbmd0aCBmcmVlV2hlbkRvbmU6Tk9dLCBuaWwpOwor
ICAgICAgICAgICAgaWYgKCFtX3VybCkKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBkZWNvZGUgTlNVUkwgZHVlIHRvIGludmFsaWQgZW5jb2Rpbmcgb2YgbGVuZ3RoICVkLiIs
IGxlbmd0aCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fdXJsKQorICAgICAgICAgICAg
bV91cmwgPSByZXRhaW5QdHIoW05TVVJMIFVSTFdpdGhTdHJpbmc6QCIiXSk7CisgICAgfQorCisg
ICAgcmV0dXJuIHNlbGZQdHIubGVha1JlZigpOworfQorCistIChfTnVsbGFibGUgaW5zdGFuY2V0
eXBlKWluaXRXaXRoVVJMOihOU1VSTCAqIF9Ob25udWxsKXVybAoreworICAgIGlmIChzZWxmID0g
W3N1cGVyIGluaXRdKQorICAgICAgICBtX3VybCA9IHJldGFpblB0cih1cmwpOworCisgICAgcmV0
dXJuIHNlbGY7Cit9CisKK0BlbmQKIAogbmFtZXNwYWNlIElQQyB7CiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKQEAgLTkzLDcgKzE1OSw3IEBAIGVudW0gY2xhc3MgTlNUeXBlIHsKIAogI3ByYWdt
YSBtYXJrIC0gSGVscGVycwogCi1zdGF0aWMgTlNUeXBlIHR5cGVGcm9tT2JqZWN0KGlkIG9iamVj
dCkKK3N0YXRpYyBOU1R5cGUgdHlwZUZyb21PYmplY3QoaWQgX05vbm51bGwgb2JqZWN0KQogewog
ICAgIEFTU0VSVChvYmplY3QpOwogCkBAIC0xMjcsMTIgKzE5MywxMiBAQCBzdGF0aWMgTlNUeXBl
IHR5cGVGcm9tT2JqZWN0KGlkIG9iamVjdCkKICAgICByZXR1cm4gTlNUeXBlOjpVbmtub3duOwog
fQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNTZXJpYWxpemFibGVGb250KENURm9udFJlZiBmb250
KQorc3RhdGljIGlubGluZSBib29sIGlzU2VyaWFsaXphYmxlRm9udChDVEZvbnRSZWYgX051bGxh
YmxlIGZvbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250Q29weUF0dHJpYnV0ZShmb250
LCBrQ1RGb250VVJMQXR0cmlidXRlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Nlcmlh
bGl6YWJsZVZhbHVlKGlkIHZhbHVlKQorc3RhdGljIGlubGluZSBib29sIGlzU2VyaWFsaXphYmxl
VmFsdWUoaWQgX051bGxhYmxlIHZhbHVlKQogewogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFz
czpbQ29jb2FGb250IGNsYXNzXV0pCiAgICAgICAgIHJldHVybiBpc1NlcmlhbGl6YWJsZUZvbnQo
KF9fYnJpZGdlIENURm9udFJlZil2YWx1ZSk7CkBAIC0xNDEsNyArMjA3LDcgQEAgc3RhdGljIGlu
bGluZSBib29sIGlzU2VyaWFsaXphYmxlVmFsdWUoaWQgdmFsdWUpCiAKICNwcmFnbWEgbWFyayAt
IE5TQXJyYXkKIAotc3RhdGljIHZvaWQgZW5jb2RlQXJyYXlJbnRlcm5hbChFbmNvZGVyJiBlbmNv
ZGVyLCBOU0FycmF5ICphcnJheSkKK3N0YXRpYyB2b2lkIGVuY29kZUFycmF5SW50ZXJuYWwoRW5j
b2RlciYgZW5jb2RlciwgTlNBcnJheSAqX051bGxhYmxlIGFycmF5KQogewogICAgIC8vIEV2ZW4g
dGhvdWdoIE5TQXJyYXkgaXMgdG9sbCBmcmVlIGJyaWRnZWQgd2l0aCBDRkFycmF5UmVmLCB2YWx1
ZXMgbWF5IG5vdCBiZSwKICAgICAvLyBzbyB3ZSBzaG91bGQgc3RheSB3aXRoaW4gdGhpcyBmaWxl
J3MgY29kZS4KQEAgLTE3MCw3ICsyMzYsNyBAQCBzdGF0aWMgdm9pZCBlbmNvZGVBcnJheUludGVy
bmFsKEVuY29kZXImIGVuY29kZXIsIE5TQXJyYXkgKmFycmF5KQogICAgIH0KIH0KIAotc3RhdGlj
IE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZUFycmF5SW50ZXJuYWwoRGVjb2RlciYgZGVj
b2RlciwgTlNBcnJheTxDbGFzcz4gKmFsbG93ZWRDbGFzc2VzKQorc3RhdGljIE9wdGlvbmFsPFJl
dGFpblB0cjxpZD4+IGRlY29kZUFycmF5SW50ZXJuYWwoRGVjb2RlciYgZGVjb2RlciwgTlNBcnJh
eTxDbGFzcz4gKiBfTm9ubnVsbCBhbGxvd2VkQ2xhc3NlcykKIHsKICAgICB1aW50NjRfdCBzaXpl
OwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCkBAIC0xOTAsNyArMjU2LDcgQEAgc3Rh
dGljIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZUFycmF5SW50ZXJuYWwoRGVjb2RlciYg
ZGVjb2RlciwgTlNBcnJheTxDbGEKICNwcmFnbWEgbWFyayAtIE5TQ29sb3IgLyBVSUNvbG9yCiAK
ICNpZiBVU0UoQVBQS0lUKQotc3RhdGljIGlubGluZSB2b2lkIGVuY29kZUNvbG9ySW50ZXJuYWwo
RW5jb2RlciYgZW5jb2RlciwgTlNDb2xvciAqY29sb3IpCitzdGF0aWMgaW5saW5lIHZvaWQgZW5j
b2RlQ29sb3JJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU0NvbG9yICpfTm9ubnVsbCBjb2xv
cikKIHsKICAgICBlbmNvZGVyIDw8IGNvbG9yRnJvbU5TQ29sb3IoY29sb3IpOwogfQpAQCAtMjAz
LDcgKzI2OSw3IEBAIHN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2Rl
Q29sb3JJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyKQogICAgIHJldHVybiB7IG5zQ29sb3IoY29s
b3IpIH07CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGVuY29kZUNvbG9ySW50ZXJuYWwo
RW5jb2RlciYgZW5jb2RlciwgVUlDb2xvciAqY29sb3IpCitzdGF0aWMgaW5saW5lIHZvaWQgZW5j
b2RlQ29sb3JJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBVSUNvbG9yICpfTm9ubnVsbCBjb2xv
cikKIHsKICAgICBlbmNvZGVyIDw8IGNvbG9yRnJvbVVJQ29sb3IoY29sb3IpOwogfQpAQCAtMjE5
LDcgKzI4NSw3IEBAIHN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2Rl
Q29sb3JJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyKQogCiAjcHJhZ21hIG1hcmsgLSBOU0RhdGEK
IAotc3RhdGljIGlubGluZSB2b2lkIGVuY29kZURhdGFJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVy
LCBOU0RhdGEgKmRhdGEpCitzdGF0aWMgaW5saW5lIHZvaWQgZW5jb2RlRGF0YUludGVybmFsKEVu
Y29kZXImIGVuY29kZXIsIE5TRGF0YSAqX05vbm51bGwgZGF0YSkKIHsKICAgICBlbmNvZGUoZW5j
b2RlciwgKF9fYnJpZGdlIENGRGF0YVJlZilkYXRhKTsKIH0KQEAgLTIzNCw3ICszMDAsNyBAQCBz
dGF0aWMgaW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZURhdGFJbnRlcm5hbChE
ZWNvZGVyJiBkZWNvZGVyKQogCiAjcHJhZ21hIG1hcmsgLSBOU0RhdGUKIAotc3RhdGljIGlubGlu
ZSB2b2lkIGVuY29kZURhdGVJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU0RhdGUgKmRhdGUp
CitzdGF0aWMgaW5saW5lIHZvaWQgZW5jb2RlRGF0ZUludGVybmFsKEVuY29kZXImIGVuY29kZXIs
IE5TRGF0ZSAqX05vbm51bGwgZGF0ZSkKIHsKICAgICBlbmNvZGUoZW5jb2RlciwgKF9fYnJpZGdl
IENGRGF0ZVJlZilkYXRlKTsKIH0KQEAgLTI0OSw3ICszMTUsNyBAQCBzdGF0aWMgaW5saW5lIE9w
dGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZURhdGVJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVy
KQogCiAjcHJhZ21hIG1hcmsgLSBOU0RpY3Rpb25hcnkKIAotc3RhdGljIHZvaWQgZW5jb2RlRGlj
dGlvbmFyeUludGVybmFsKEVuY29kZXImIGVuY29kZXIsIE5TRGljdGlvbmFyeSAqZGljdGlvbmFy
eSkKK3N0YXRpYyB2b2lkIGVuY29kZURpY3Rpb25hcnlJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVy
LCBOU0RpY3Rpb25hcnkgKl9Ob25udWxsIGRpY3Rpb25hcnkpCiB7CiAgICAgLy8gRXZlbiB0aG91
Z2ggTlNEaWN0aW9uYXJ5IGlzIHRvbGwgZnJlZSBicmlkZ2VkIHdpdGggQ0ZEaWN0aW9uYXJ5UmVm
LCBrZXlzL3ZhbHVlcyBtYXkgbm90IGJlLAogICAgIC8vIHNvIHdlIHNob3VsZCBzdGF5IHdpdGhp
biB0aGlzIGZpbGUncyBjb2RlLgpAQCAtMjgxLDcgKzM0Nyw3IEBAIHN0YXRpYyB2b2lkIGVuY29k
ZURpY3Rpb25hcnlJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU0RpY3Rpb25hcnkgKmRpY3Rp
b25hcnkpCiAgICAgfQogfQogCi1zdGF0aWMgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2Rl
RGljdGlvbmFyeUludGVybmFsKERlY29kZXImIGRlY29kZXIsIE5TQXJyYXk8Q2xhc3M+ICphbGxv
d2VkQ2xhc3NlcykKK3N0YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVEaWN0aW9u
YXJ5SW50ZXJuYWwoRGVjb2RlciYgZGVjb2RlciwgTlNBcnJheTxDbGFzcz4gKl9Ob25udWxsIGFs
bG93ZWRDbGFzc2VzKQogewogICAgIHVpbnQ2NF90IHNpemU7CiAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShzaXplKSkKQEAgLTMwNSw3ICszNzEsNyBAQCBzdGF0aWMgT3B0aW9uYWw8UmV0YWluUHRy
PGlkPj4gZGVjb2RlRGljdGlvbmFyeUludGVybmFsKERlY29kZXImIGRlY29kZXIsIE5TQXJyYQog
CiAjcHJhZ21hIG1hcmsgLSBOU0ZvbnQgLyBVSUZvbnQKIAotc3RhdGljIGlubGluZSB2b2lkIGVu
Y29kZUZvbnRJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBDb2NvYUZvbnQgKmZvbnQpCitzdGF0
aWMgaW5saW5lIHZvaWQgZW5jb2RlRm9udEludGVybmFsKEVuY29kZXImIGVuY29kZXIsIENvY29h
Rm9udCAqX05vbm51bGwgZm9udCkKIHsKICAgICBlbmNvZGUoZW5jb2RlciwgZm9udC5mb250RGVz
Y3JpcHRvci5mb250QXR0cmlidXRlcyk7CiB9CkBAIC0zMjcsNyArMzkzLDcgQEAgc3RhdGljIE9w
dGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZUZvbnRJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVy
KQogCiAjcHJhZ21hIG1hcmsgLSBOU051bWJlcgogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5jb2Rl
TnVtYmVySW50ZXJuYWwoRW5jb2RlciYgZW5jb2RlciwgTlNOdW1iZXIgKm51bWJlcikKK3N0YXRp
YyBpbmxpbmUgdm9pZCBlbmNvZGVOdW1iZXJJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU051
bWJlciAqX05vbm51bGwgbnVtYmVyKQogewogICAgIGVuY29kZShlbmNvZGVyLCAoX19icmlkZ2Ug
Q0ZOdW1iZXJSZWYpbnVtYmVyKTsKIH0KQEAgLTM0MiwyNiArNDA4LDIxIEBAIHN0YXRpYyBpbmxp
bmUgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2RlTnVtYmVySW50ZXJuYWwoRGVjb2RlciYg
ZGVjb2RlcikKIAogI3ByYWdtYSBtYXJrIC0gaWQgPE5TU2VjdXJlQ29kaW5nPgogCi1zdGF0aWMg
dm9pZCBlbmNvZGVTZWN1cmVDb2RpbmdJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBpZCA8TlNP
YmplY3QsIE5TU2VjdXJlQ29kaW5nPiBvYmplY3QpCitzdGF0aWMgdm9pZCBlbmNvZGVTZWN1cmVD
b2RpbmdJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBpZCA8TlNPYmplY3QsIE5TU2VjdXJlQ29k
aW5nPiBfTm9ubnVsbCBvYmplY3QpCiB7CiAgICAgYXV0byBhcmNoaXZlciA9IGFkb3B0TlMoW1tO
U0tleWVkQXJjaGl2ZXIgYWxsb2NdIGluaXRSZXF1aXJpbmdTZWN1cmVDb2Rpbmc6WUVTXSk7CiAK
LSNpZiBIQVZFKE5TRk9OVF9XSVRIX09QVElDQUxfU0laSU5HX0JVRykKLSAgICBhdXRvIGRlbGVn
YXRlID0gYWRvcHROUyhbW1dLU2VjdXJlQ29kaW5nRm9udEF0dHJpYnV0ZU5vcm1hbGl6ZXIgYWxs
b2NdIGluaXRdKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1dLU2VjdXJlQ29kaW5n
QXJjaGl2aW5nRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKICAgICBbYXJjaGl2ZXIgc2V0RGVsZWdh
dGU6ZGVsZWdhdGUuZ2V0KCldOwotI2VuZGlmCiAKICAgICBbYXJjaGl2ZXIgZW5jb2RlT2JqZWN0
Om9iamVjdCBmb3JLZXk6TlNLZXllZEFyY2hpdmVSb290T2JqZWN0S2V5XTsKICAgICBbYXJjaGl2
ZXIgZmluaXNoRW5jb2RpbmddOwotCi0jaWYgSEFWRShOU0ZPTlRfV0lUSF9PUFRJQ0FMX1NJWklO
R19CVUcpCiAgICAgW2FyY2hpdmVyIHNldERlbGVnYXRlOm5pbF07Ci0jZW5kaWYKIAogICAgIGVu
Y29kZShlbmNvZGVyLCAoX19icmlkZ2UgQ0ZEYXRhUmVmKVthcmNoaXZlciBlbmNvZGVkRGF0YV0p
OwogfQogCi1zdGF0aWMgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2RlU2VjdXJlQ29kaW5n
SW50ZXJuYWwoRGVjb2RlciYgZGVjb2RlciwgTlNBcnJheTxDbGFzcz4gKmFsbG93ZWRDbGFzc2Vz
KQorc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZVNlY3VyZUNvZGluZ0ludGVy
bmFsKERlY29kZXImIGRlY29kZXIsIE5TQXJyYXk8Q2xhc3M+ICpfTm9ubnVsbCBhbGxvd2VkQ2xh
c3NlcykKIHsKICAgICBBU1NFUlQoYWxsb3dlZENsYXNzZXMgJiYgYWxsb3dlZENsYXNzZXMuY291
bnQpOwogICAgIGlmICghYWxsb3dlZENsYXNzZXMgfHwgIWFsbG93ZWRDbGFzc2VzLmNvdW50KQpA
QCAtMzczLDggKzQzNCwxNSBAQCBzdGF0aWMgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2Rl
U2VjdXJlQ29kaW5nSW50ZXJuYWwoRGVjb2RlciYgZGVjb2RlciwgTlNBcgogCiAgICAgYXV0byB1
bmFyY2hpdmVyID0gYWRvcHROUyhbW05TS2V5ZWRVbmFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yUmVh
ZGluZ0Zyb21EYXRhOihfX2JyaWRnZSBOU0RhdGEgKilkYXRhLmdldCgpIGVycm9yOm51bGxwdHJd
KTsKICAgICB1bmFyY2hpdmVyLmdldCgpLmRlY29kaW5nRmFpbHVyZVBvbGljeSA9IE5TRGVjb2Rp
bmdGYWlsdXJlUG9saWN5UmFpc2VFeGNlcHRpb247CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRv
cHROUyhbW1dLU2VjdXJlQ29kaW5nQXJjaGl2aW5nRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAg
ICB1bmFyY2hpdmVyLmdldCgpLmRlbGVnYXRlID0gZGVsZWdhdGUuZ2V0KCk7CisKKyAgICBhdXRv
IGFsbG93ZWRDbGFzc1NldCA9IFtOU011dGFibGVTZXQgc2V0V2l0aEFycmF5OmFsbG93ZWRDbGFz
c2VzXTsKKyAgICBbYWxsb3dlZENsYXNzU2V0IGFkZE9iamVjdDpXS0VuY29kZWRVUkwuY2xhc3Nd
OworICAgIAogICAgIEB0cnkgewotICAgICAgICBpZCByZXN1bHQgPSBbdW5hcmNoaXZlciBkZWNv
ZGVPYmplY3RPZkNsYXNzZXM6W05TU2V0IHNldFdpdGhBcnJheTphbGxvd2VkQ2xhc3Nlc10gZm9y
S2V5Ok5TS2V5ZWRBcmNoaXZlUm9vdE9iamVjdEtleV07CisgICAgICAgIGlkIHJlc3VsdCA9IFt1
bmFyY2hpdmVyIGRlY29kZU9iamVjdE9mQ2xhc3NlczphbGxvd2VkQ2xhc3NTZXQgZm9yS2V5Ok5T
S2V5ZWRBcmNoaXZlUm9vdE9iamVjdEtleV07CiAgICAgICAgIEFTU0VSVCghcmVzdWx0IHx8IFty
ZXN1bHQgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChOU1NlY3VyZUNvZGluZyldKTsKICAg
ICAgICAgcmV0dXJuIHsgcmVzdWx0IH07CiAgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNl
cHRpb24pIHsKQEAgLTM4MiwxMiArNDUwLDEzIEBAIHN0YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8
aWQ+PiBkZWNvZGVTZWN1cmVDb2RpbmdJbnRlcm5hbChEZWNvZGVyJiBkZWNvZGVyLCBOU0FyCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfSBAZmluYWxseSB7CiAgICAgICAgIFt1
bmFyY2hpdmVyIGZpbmlzaERlY29kaW5nXTsKKyAgICAgICAgdW5hcmNoaXZlci5nZXQoKS5kZWxl
Z2F0ZSA9IG5pbDsKICAgICB9CiB9CiAKICNwcmFnbWEgbWFyayAtIE5TU3RyaW5nCiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBlbmNvZGVTdHJpbmdJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBOU1N0
cmluZyAqc3RyaW5nKQorc3RhdGljIGlubGluZSB2b2lkIGVuY29kZVN0cmluZ0ludGVybmFsKEVu
Y29kZXImIGVuY29kZXIsIE5TU3RyaW5nICpfTm9ubnVsbCBzdHJpbmcpCiB7CiAgICAgZW5jb2Rl
KGVuY29kZXIsIChfX2JyaWRnZSBDRlN0cmluZ1JlZilzdHJpbmcpOwogfQpAQCAtNDAyLDkgKzQ3
MSw5IEBAIHN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2RlU3RyaW5n
SW50ZXJuYWwoRGVjb2RlciYgZGVjb2RlcikKIAogI3ByYWdtYSBtYXJrIC0gTlNVUkwKIAotc3Rh
dGljIGlubGluZSB2b2lkIGVuY29kZVVSTEludGVybmFsKEVuY29kZXImIGVuY29kZXIsIE5TVVJM
ICpVUkwpCitzdGF0aWMgaW5saW5lIHZvaWQgZW5jb2RlVVJMSW50ZXJuYWwoRW5jb2RlciYgZW5j
b2RlciwgTlNVUkwgKl9Ob25udWxsIHVybCkKIHsKLSAgICBlbmNvZGUoZW5jb2RlciwgKF9fYnJp
ZGdlIENGVVJMUmVmKVVSTCk7CisgICAgZW5jb2RlKGVuY29kZXIsIChfX2JyaWRnZSBDRlVSTFJl
Zil1cmwpOwogfQogCiBzdGF0aWMgaW5saW5lIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29k
ZVVSTEludGVybmFsKERlY29kZXImIGRlY29kZXIpCkBAIC00MTcsNyArNDg2LDcgQEAgc3RhdGlj
IGlubGluZSBPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVVUkxJbnRlcm5hbChEZWNvZGVy
JiBkZWNvZGVyKQogCiAjcHJhZ21hIG1hcmsgLSBFbnRyeSBQb2ludCBFbmNvZGVyIC8gRGVjb2Rl
cgogCi12b2lkIGVuY29kZU9iamVjdChFbmNvZGVyJiBlbmNvZGVyLCBpZCBvYmplY3QpCit2b2lk
IGVuY29kZU9iamVjdChFbmNvZGVyJiBlbmNvZGVyLCBpZCBfTm9ubnVsbCBvYmplY3QpCiB7CiAg
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxib29sPighb2JqZWN0KTsKICAgICBpZiAoIW9iamVj
dCkKQEAgLTQ2NCw3ICs1MzMsNyBAQCB2b2lkIGVuY29kZU9iamVjdChFbmNvZGVyJiBlbmNvZGVy
LCBpZCBvYmplY3QpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLU9wdGlvbmFsPFJl
dGFpblB0cjxpZD4+IGRlY29kZU9iamVjdChEZWNvZGVyJiBkZWNvZGVyLCBOU0FycmF5PENsYXNz
PiAqYWxsb3dlZENsYXNzZXMpCitPcHRpb25hbDxSZXRhaW5QdHI8aWQ+PiBkZWNvZGVPYmplY3Qo
RGVjb2RlciYgZGVjb2RlciwgTlNBcnJheTxDbGFzcz4gKl9Ob25udWxsIGFsbG93ZWRDbGFzc2Vz
KQogewogICAgIGJvb2wgaXNOdWxsOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNOdWxsKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENv
ZGVyc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzQ29jb2EubW0KaW5kZXggNzZhZmI3MmZmMmZkNGY5N2I1Y2YwMTMyZWVhOWIzMzdmYTQ0
YWI0My4uMmI2YTc1NWRmNzBmOTE4ZmQwMDQ3YzdiNjcwYjdhNDZkMTY2YjI0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
Q29jb2EubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnQuaD4KICNp
bXBvcnQgPFdlYkNvcmUvRm9udEF0dHJpYnV0ZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4K
ICNpbXBvcnQgPHBhbC9zcGkvY2YvQ29yZVRleHRTUEkuaD4KIAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCkBAIC01NDMsNCArNTQ0LDU5IEBAIE9wdGlvbmFsPEZvbnRQbGF0Zm9ybURhdGE+IEFy
Z3VtZW50Q29kZXI8UmVmPEZvbnQ+Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKERlY29kZXImCiAgICAg
cmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoY3RGb250LmdldCgpLCBzaXplLnZhbHVlKCksIHN5bnRo
ZXRpY0JvbGQudmFsdWUoKSwgc3ludGhldGljT2JsaXF1ZS52YWx1ZSgpLCBvcmllbnRhdGlvbi52
YWx1ZSgpLCB3aWR0aFZhcmlhbnQudmFsdWUoKSwgdGV4dFJlbmRlcmluZ01vZGUudmFsdWUoKSk7
CiB9CiAKK3ZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjplbmNv
ZGVQbGF0Zm9ybURhdGEoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCit7CisgICAgYXV0byByZXF1ZXN0VG9TZXJpYWxpemUg
PSByZXRhaW5QdHIocmVzb3VyY2VSZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9k
eVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSkpOworCisgICAgYm9vbCByZXF1ZXN0
SXNQcmVzZW50ID0gcmVxdWVzdFRvU2VyaWFsaXplOworICAgIGVuY29kZXIgPDwgcmVxdWVzdElz
UHJlc2VudDsKKworICAgIGlmICghcmVxdWVzdElzUHJlc2VudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gV2UgZG9uJ3Qgc2VuZCBIVFRQIGJvZHkgb3ZlciBJUEMgZm9yIGJldHRlciBwZXJm
b3JtYW5jZS4KKyAgICAvLyBBbHNvLCBpdCdzIG5vdCBhbHdheXMgcG9zc2libGUgdG8gZG8sIGFz
IHN0cmVhbXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBpbiBwcm9jZXNzIHRoYXQgZG9lcyBuZXR3b3Jr
aW5nLgorICAgIGlmIChbcmVxdWVzdFRvU2VyaWFsaXplIEhUVFBCb2R5XSB8fCBbcmVxdWVzdFRv
U2VyaWFsaXplIEhUVFBCb2R5U3RyZWFtXSkgeworICAgICAgICBhdXRvIG11dGFibGVSZXF1ZXN0
ID0gYWRvcHROUyhbcmVxdWVzdFRvU2VyaWFsaXplIG11dGFibGVDb3B5XSk7CisgICAgICAgIFtt
dXRhYmxlUmVxdWVzdCBzZXRIVFRQQm9keTpuaWxdOworICAgICAgICBbbXV0YWJsZVJlcXVlc3Qg
c2V0SFRUUEJvZHlTdHJlYW06bmlsXTsKKyAgICAgICAgcmVxdWVzdFRvU2VyaWFsaXplID0gV1RG
TW92ZShtdXRhYmxlUmVxdWVzdCk7CisgICAgfQorCisgICAgSVBDOjplbmNvZGUoZW5jb2Rlciwg
cmVxdWVzdFRvU2VyaWFsaXplLmdldCgpKTsKKworICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1
ZXN0LnJlcXVlc3RlcigpOworICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LmlzQXBwQm91
bmQoKTsKK30KKworYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46
OmRlY29kZVBsYXRmb3JtRGF0YShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlc291cmNlUmVxdWVzdCkKK3sKKyAgICBib29sIHJlcXVlc3RJc1ByZXNlbnQ7Cisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXF1ZXN0SXNQcmVzZW50KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFyZXF1ZXN0SXNQcmVzZW50KSB7CisgICAgICAgIHJlc291cmNl
UmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCgpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBhdXRvIHJlcXVlc3QgPSBJUEM6OmRlY29kZTxOU1VSTFJlcXVlc3Q+
KGRlY29kZXIsIE5TVVJMUmVxdWVzdC5jbGFzcyk7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXF1
ZXN0ZXIgcmVxdWVzdGVyOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVxdWVzdGVyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBpc0FwcEJvdW5kOworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoaXNBcHBCb3VuZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
c291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdChyZXF1ZXN0LT5nZXQoKSk7
CisgICAgcmVzb3VyY2VSZXF1ZXN0LnNldFJlcXVlc3RlcihyZXF1ZXN0ZXIpOworICAgIHJlc291
cmNlUmVxdWVzdC5zZXRJc0FwcEJvdW5kKGlzQXBwQm91bmQpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KaW5kZXggMGY2MDVmYWQ1MjE3MjUxNDEw
ZTI1ZDdiYmM5MWNiMTNjODE0ZTU0NC4uYzU5NTA2OGE2YTRjNzdkMDYxMjgwYWEyNTc0NjRkNjZh
YTNjMTAxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1
bWVudENvZGVyc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzTWFjLm1tCkBAIC00MiwyNDUgKzQyLDE0IEBACiAjaW1wb3J0IDx3dGYvTWFj
aFNlbmRSaWdodC5oPgogI2ltcG9ydCA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+CiAKLSNpZiBVU0Uo
QVBQTEVfSU5URVJOQUxfU0RLKQotI2luY2x1ZGUgPFdlYktpdEFkZGl0aW9ucy9XZWJDb3JlQXJn
dW1lbnRDb2RlcnNNYWNBZGRpdGlvbnMuaD4KLSNlbmRpZgotCiAjaWYgRU5BQkxFKFdJUkVMRVNT
X1BMQVlCQUNLX1RBUkdFVCkKICNpbXBvcnQgPFdlYkNvcmUvTWVkaWFQbGF5YmFja1RhcmdldENv
bnRleHQuaD4KICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgogI2ltcG9ydCA8cGFsL2NvY29hL0FW
Rm91bmRhdGlvblNvZnRMaW5rLmg+CiAjZW5kaWYKIAotI2lmbmRlZiBXRUJDT1JFX0FSR1VNRU5U
Q09ERVJTX01BQ19ERUNPREVfQURESVRJT05TCi0jZGVmaW5lIFdFQkNPUkVfQVJHVU1FTlRDT0RF
UlNfTUFDX0RFQ09ERV9BRERJVElPTlMKLSNlbmRpZgotCi0jaWZuZGVmIFdFQkNPUkVfQVJHVU1F
TlRDT0RFUlNfTUFDX0VOQ09ERV9BRERJVElPTlMKLSNkZWZpbmUgV0VCQ09SRV9BUkdVTUVOVENP
REVSU19NQUNfRU5DT0RFX0FERElUSU9OUwotI2VuZGlmCi0KIG5hbWVzcGFjZSBJUEMgewogCi1z
dGF0aWMgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IGNyZWF0ZVNlcmlhbGl6YWJs
ZVJlcHJlc2VudGF0aW9uKENGSW5kZXggdmVyc2lvbiwgQ0ZUeXBlUmVmKiBvYmplY3RzLCBDRklu
ZGV4IG9iamVjdENvdW50LCBDRkRpY3Rpb25hcnlSZWYgcHJvdG9jb2xQcm9wZXJ0aWVzLCBDRk51
bWJlclJlZiBleHBlY3RlZENvbnRlbnRMZW5ndGgsIENGU3RyaW5nUmVmIG1pbWVUeXBlLCBDRlR5
cGVSZWYgdG9rZW5OdWxsKQotewotICAgIGF1dG8gYXJjaGl2ZUxpc3RBcnJheSA9IGFkb3B0Q0Yo
Q0ZBcnJheUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVBcnJh
eUNhbGxCYWNrcykpOwotCi0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgb2JqZWN0Q291bnQ7
ICsraSkgewotICAgICAgICBDRlR5cGVSZWYgb2JqZWN0ID0gb2JqZWN0c1tpXTsKLSAgICAgICAg
aWYgKG9iamVjdCkgewotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFyY2hpdmVMaXN0
QXJyYXkuZ2V0KCksIG9iamVjdCk7Ci0gICAgICAgICAgICBDRlJlbGVhc2Uob2JqZWN0KTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEFwcGVuZCBvdXIgdG9rZW4gbnVsbCByZXBy
ZXNlbnRhdGlvbi4KLSAgICAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcmNoaXZlTGlzdEFy
cmF5LmdldCgpLCB0b2tlbk51bGwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBkaWN0
aW9uYXJ5ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MpKTsKLQotICAgIGF1dG8gdmVyc2lvbk51bWJlciA9IGFkb3B0Q0Yo
Q0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyQ0ZJbmRleFR5cGUs
ICZ2ZXJzaW9uKSk7Ci0gICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwg
Q0ZTVFIoInZlcnNpb24iKSwgdmVyc2lvbk51bWJlci5nZXQoKSk7Ci0gICAgQ0ZEaWN0aW9uYXJ5
U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIoImFyY2hpdmVMaXN0IiksIGFyY2hpdmVM
aXN0QXJyYXkuZ2V0KCkpOwotCi0gICAgaWYgKHByb3RvY29sUHJvcGVydGllcykgewotICAgICAg
ICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigicHJvdG9jb2xQ
cm9wZXJ0aWVzIiksIHByb3RvY29sUHJvcGVydGllcyk7Ci0gICAgICAgIENGUmVsZWFzZShwcm90
b2NvbFByb3BlcnRpZXMpOwotICAgIH0KLQotICAgIGlmIChleHBlY3RlZENvbnRlbnRMZW5ndGgp
IHsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIo
ImV4cGVjdGVkQ29udGVudExlbmd0aCIpLCBleHBlY3RlZENvbnRlbnRMZW5ndGgpOwotICAgICAg
ICBDRlJlbGVhc2UoZXhwZWN0ZWRDb250ZW50TGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBpZiAobWlt
ZVR5cGUpIHsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwg
Q0ZTVFIoIm1pbWVUeXBlIiksIG1pbWVUeXBlKTsKLSAgICAgICAgQ0ZSZWxlYXNlKG1pbWVUeXBl
KTsKLSAgICB9Ci0KLSAgICBDRkFsbG9jYXRvckRlYWxsb2NhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgb2JqZWN0cyk7Ci0KLSAgICByZXR1cm4gZGljdGlvbmFyeTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVmFsdWVUeXBlPiBib29sIGV4dHJhY3REaWN0aW9uYXJ5VmFsdWUoQ0ZEaWN0aW9uYXJ5
UmVmIGRpY3Rpb25hcnksIENGU3RyaW5nUmVmIGtleSwgVmFsdWVUeXBlKiByZXN1bHQpCi17Ci0g
ICAgYXV0byB1bnR5cGVkVmFsdWUgPSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShkaWN0aW9uYXJ5LCBr
ZXkpOwotICAgIGF1dG8gdmFsdWUgPSBkeW5hbWljX2NmX2Nhc3Q8VmFsdWVUeXBlPih1bnR5cGVk
VmFsdWUpOwotICAgIGlmICh1bnR5cGVkVmFsdWUgJiYgIXZhbHVlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IHZhbHVlOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBjcmVhdGVBcmNoaXZlTGlzdChDRkRpY3Rpb25h
cnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwsIENGSW5kZXgqIHZlcnNp
b24sIENGVHlwZVJlZioqIG9iamVjdHMsIENGSW5kZXgqIG9iamVjdENvdW50LCBDRkRpY3Rpb25h
cnlSZWYqIHByb3RvY29sUHJvcGVydGllcywgQ0ZOdW1iZXJSZWYqIGV4cGVjdGVkQ29udGVudExl
bmd0aCwgQ0ZTdHJpbmdSZWYqIG1pbWVUeXBlKQotewotICAgIGF1dG8gdmVyc2lvbk51bWJlciA9
IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocmVwcmVz
ZW50YXRpb24sIENGU1RSKCJ2ZXJzaW9uIikpKTsKLSAgICBpZiAoIXZlcnNpb25OdW1iZXIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghQ0ZOdW1iZXJHZXRWYWx1ZSh2ZXJzaW9u
TnVtYmVyLCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwgdmVyc2lvbikpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8gYXJjaGl2ZUxpc3RBcnJheSA9IGR5bmFtaWNfY2ZfY2FzdDxDRkFy
cmF5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoImFyY2hp
dmVMaXN0IikpKTsKLSAgICBpZiAoIWFyY2hpdmVMaXN0QXJyYXkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8gYXJjaGl2ZUxpc3RBcnJheUNvdW50ID0gQ0ZBcnJheUdldENvdW50
KGFyY2hpdmVMaXN0QXJyYXkpOwotICAgIGlmICghaXNJbkJvdW5kczxzaXplX3Q+KGFyY2hpdmVM
aXN0QXJyYXlDb3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gYnVmZmVy
U2l6ZSA9IENoZWNrZWRTaXplKHNpemVvZihDRlR5cGVSZWYpKSAqIHN0YXRpY19jYXN0PHNpemVf
dD4oYXJjaGl2ZUxpc3RBcnJheUNvdW50KTsKLSAgICBpZiAoYnVmZmVyU2l6ZS5oYXNPdmVyZmxv
d2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZXh0cmFjdERpY3Rpb25h
cnlWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoInByb3RvY29sUHJvcGVydGllcyIpLCBwcm90
b2NvbFByb3BlcnRpZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFleHRyYWN0
RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigiZXhwZWN0ZWRDb250ZW50TGVu
Z3RoIiksIGV4cGVjdGVkQ29udGVudExlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoIWV4dHJhY3REaWN0aW9uYXJ5VmFsdWUocmVwcmVzZW50YXRpb24sIENGU1RSKCJtaW1l
VHlwZSIpLCBtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICpvYmplY3RD
b3VudCA9IGFyY2hpdmVMaXN0QXJyYXlDb3VudDsKLSAgICAqb2JqZWN0cyA9IHN0YXRpY19jYXN0
PENGVHlwZVJlZio+KGZhc3RNYWxsb2MoYnVmZmVyU2l6ZS51bnNhZmVHZXQoKSkpOwotCi0gICAg
Q0ZBcnJheUdldFZhbHVlcyhhcmNoaXZlTGlzdEFycmF5LCBDRlJhbmdlTWFrZSgwLCAqb2JqZWN0
Q291bnQpLCAqb2JqZWN0cyk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgKm9iamVjdENv
dW50OyArK2kpIHsKLSAgICAgICAgaWYgKCgqb2JqZWN0cylbaV0gPT0gdG9rZW5OdWxsKQotICAg
ICAgICAgICAgKCpvYmplY3RzKVtpXSA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjcmVhdGVTZXJpYWxp
emFibGVSZXByZXNlbnRhdGlvbihDRlVSTFJlcXVlc3RSZWYgY2ZSZXF1ZXN0LCBDRlR5cGVSZWYg
dG9rZW5OdWxsKQotewotICAgIENGSW5kZXggdmVyc2lvbjsKLSAgICBDRlR5cGVSZWYqIG9iamVj
dHM7Ci0gICAgQ0ZJbmRleCBvYmplY3RDb3VudDsKLSAgICBDRkRpY3Rpb25hcnlSZWYgcHJvdG9j
b2xQcm9wZXJ0aWVzOwotCi0gICAgLy8gRklYTUUgKDEyODg5NTE4KTogRG8gbm90IHNlcmlhbGl6
ZSBIVFRQIG1lc3NhZ2UgYm9keS4KLSAgICAvLyAxLiBJdCBjYW4gYmUgbGFyZ2UgYW5kIHRodXMg
Y29zdGx5IHRvIHNlbmQgYWNyb3NzLgotICAgIC8vIDIuIEl0IGlzIG1pc2xlYWRpbmcgdG8gcHJv
dmlkZSBhIGJvZHkgd2l0aCBzb21lIHJlcXVlc3RzLCB3aGlsZSBvdGhlcnMgdXNlIGJvZHkgc3Ry
ZWFtcywgd2hpY2ggY2Fubm90IGJlIHNlcmlhbGl6ZWQgYXQgYWxsLgotCi0gICAgX0NGVVJMUmVx
dWVzdENyZWF0ZUFyY2hpdmVMaXN0KGtDRkFsbG9jYXRvckRlZmF1bHQsIGNmUmVxdWVzdCwgJnZl
cnNpb24sICZvYmplY3RzLCAmb2JqZWN0Q291bnQsICZwcm90b2NvbFByb3BlcnRpZXMpOwotCi0g
ICAgLy8gVGhpcyB3aWxsIGRlYWxsb2NhdGUgdGhlIHBhc3NlZCBpbiBhcmd1bWVudHMuCi0gICAg
cmV0dXJuIGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKHZlcnNpb24sIG9iamVjdHMs
IG9iamVjdENvdW50LCBwcm90b2NvbFByb3BlcnRpZXMsIG51bGxwdHIsIG51bGxwdHIsIHRva2Vu
TnVsbCk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZVUkxSZXF1ZXN0UmVmPiBjcmVhdGVDRlVS
TFJlcXVlc3RGcm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIHJl
cHJlc2VudGF0aW9uLCBDRlR5cGVSZWYgdG9rZW5OdWxsKQotewotICAgIENGSW5kZXggdmVyc2lv
bjsKLSAgICBDRlR5cGVSZWYqIG9iamVjdHM7Ci0gICAgQ0ZJbmRleCBvYmplY3RDb3VudDsKLSAg
ICBDRkRpY3Rpb25hcnlSZWYgcHJvdG9jb2xQcm9wZXJ0aWVzOwotCi0gICAgaWYgKCFjcmVhdGVB
cmNoaXZlTGlzdChyZXByZXNlbnRhdGlvbiwgdG9rZW5OdWxsLCAmdmVyc2lvbiwgJm9iamVjdHMs
ICZvYmplY3RDb3VudCwgJnByb3RvY29sUHJvcGVydGllcywgbnVsbHB0ciwgbnVsbHB0cikpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBjZlJlcXVlc3QgPSBhZG9wdENGKF9D
RlVSTFJlcXVlc3RDcmVhdGVGcm9tQXJjaGl2ZUxpc3Qoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdmVy
c2lvbiwgb2JqZWN0cywgb2JqZWN0Q291bnQsIHByb3RvY29sUHJvcGVydGllcykpOwotICAgIGZh
c3RGcmVlKG9iamVjdHMpOwotICAgIHJldHVybiBXVEZNb3ZlKGNmUmVxdWVzdCk7Ci19Ci0KLXN0
YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNl
bnRhdGlvbihOU1VSTFJlcXVlc3QgKnJlcXVlc3QsIENGVHlwZVJlZiB0b2tlbk51bGwpCi17Ci0g
ICAgcmV0dXJuIGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKFtyZXF1ZXN0IF9DRlVS
TFJlcXVlc3RdLCB0b2tlbk51bGwpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPE5TVVJMUmVxdWVz
dD4gY3JlYXRlTlNVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKENGRGlj
dGlvbmFyeVJlZiByZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRva2VuTnVsbCkKLXsKLSAgICBh
dXRvIGNmUmVxdWVzdCA9IGNyZWF0ZUNGVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNl
bnRhdGlvbihyZXByZXNlbnRhdGlvbiwgdG9rZW5OdWxsKTsKLSAgICBpZiAoIWNmUmVxdWVzdCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgcmV0dXJuIGFkb3B0TlMoW1tOU1VS
TFJlcXVlc3QgYWxsb2NdIF9pbml0V2l0aENGVVJMUmVxdWVzdDpjZlJlcXVlc3QuZ2V0KCldKTsK
LX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmVuY29k
ZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlc291cmNlUmVxdWVzdCkKLXsKLSAgICBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiBy
ZXF1ZXN0VG9TZXJpYWxpemUgPSByZXNvdXJjZVJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6
OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KTsKLQotICAgIGJvb2wg
cmVxdWVzdElzUHJlc2VudCA9IHJlcXVlc3RUb1NlcmlhbGl6ZTsKLSAgICBlbmNvZGVyIDw8IHJl
cXVlc3RJc1ByZXNlbnQ7Ci0KLSAgICBpZiAoIXJlcXVlc3RJc1ByZXNlbnQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFdlIGRvbid0IHNlbmQgSFRUUCBib2R5IG92ZXIgSVBDIGZvciBiZXR0
ZXIgcGVyZm9ybWFuY2UuCi0gICAgLy8gQWxzbywgaXQncyBub3QgYWx3YXlzIHBvc3NpYmxlIHRv
IGRvLCBhcyBzdHJlYW1zIGNhbiBvbmx5IGJlIGNyZWF0ZWQgaW4gcHJvY2VzcyB0aGF0IGRvZXMg
bmV0d29ya2luZy4KLSAgICBpZiAoW3JlcXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9keV0gfHwgW3Jl
cXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9keVN0cmVhbV0pIHsKLSAgICAgICAgcmVxdWVzdFRvU2Vy
aWFsaXplID0gYWRvcHROUyhbcmVxdWVzdFRvU2VyaWFsaXplIG11dGFibGVDb3B5XSk7Ci0gICAg
ICAgIFsoTlNNdXRhYmxlVVJMUmVxdWVzdCAqKXJlcXVlc3RUb1NlcmlhbGl6ZSBzZXRIVFRQQm9k
eTpuaWxdOwotICAgICAgICBbKE5TTXV0YWJsZVVSTFJlcXVlc3QgKilyZXF1ZXN0VG9TZXJpYWxp
emUgc2V0SFRUUEJvZHlTdHJlYW06bmlsXTsKLSAgICB9Ci0KLSAgICBhdXRvIGRpY3Rpb25hcnkg
PSBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihyZXF1ZXN0VG9TZXJpYWxpemUuZ2V0
KCksIElQQzo6dG9rZW5OdWxscHRyVHlwZVJlZigpKTsKLSAgICBJUEM6OmVuY29kZShlbmNvZGVy
LCBkaWN0aW9uYXJ5LmdldCgpKTsKLQotICAgIFdFQkNPUkVfQVJHVU1FTlRDT0RFUlNfTUFDX0VO
Q09ERV9BRERJVElPTlMKLQotICAgIC8vIFRoZSBmYWxsYmFjayBhcnJheSBpcyBwYXJ0IG9mIE5T
VVJMUmVxdWVzdCwgYnV0IGl0IGlzIG5vdCBlbmNvZGVkIGJ5IFdLTlNVUkxSZXF1ZXN0Q3JlYXRl
U2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24uCi0gICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVl
c3QucmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkoKTsKLSAg
ICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXF1ZXN0ZXIoKTsKLSAgICBlbmNvZGVyIDw8
IHJlc291cmNlUmVxdWVzdC5jYWNoZVBvbGljeSgpOwotICAgIGVuY29kZXIgPDwgcmVzb3VyY2VS
ZXF1ZXN0LmlzQXBwQm91bmQoKTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0YShEZWNvZGVyJiBkZWNvZGVyLCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKLXsKLSAgICBib29sIHJlcXVl
c3RJc1ByZXNlbnQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXF1ZXN0SXNQcmVzZW50KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFyZXF1ZXN0SXNQcmVzZW50KSB7Ci0g
ICAgICAgIHJlc291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCgpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBkaWN0aW9uYXJ5OwotICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgZGljdGlvbmFyeSkg
fHwgIWRpY3Rpb25hcnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gbnNVUkxS
ZXF1ZXN0ID0gY3JlYXRlTlNVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9u
KGRpY3Rpb25hcnkuZ2V0KCksIElQQzo6dG9rZW5OdWxscHRyVHlwZVJlZigpKTsKLSAgICBpZiAo
IW5zVVJMUmVxdWVzdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV0VCQ09SRV9BUkdV
TUVOVENPREVSU19NQUNfREVDT0RFX0FERElUSU9OUwotCi0gICAgcmVzb3VyY2VSZXF1ZXN0ID0g
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KG5zVVJMUmVxdWVzdC5nZXQoKSk7Ci0gICAgCi0gICAg
VmVjdG9yPFN0cmluZz4gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXNwb25zZUNvbnRlbnREaXNwb3NpdGlv
bkVuY29kaW5nRmFsbGJhY2tBcnJheSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
c291cmNlUmVxdWVzdC5zZXRSZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJh
Y2tBcnJheSgKLSAgICAgICAgcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxi
YWNrQXJyYXkuc2l6ZSgpID4gMCA/IHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdG
YWxsYmFja0FycmF5WzBdIDogU3RyaW5nKCksCi0gICAgICAgIHJlc3BvbnNlQ29udGVudERpc3Bv
c2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnNpemUoKSA+IDEgPyByZXNwb25zZUNvbnRlbnRE
aXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVsxXSA6IFN0cmluZygpLAotICAgICAgICBy
ZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkgPiAy
ID8gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMl0gOiBT
dHJpbmcoKQotICAgICk7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3Rl
ciByZXF1ZXN0ZXI7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXF1ZXN0ZXIpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzb3VyY2VSZXF1ZXN0LnNldFJlcXVlc3RlcihyZXF1ZXN0
ZXIpOwotCi0gICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVQb2xp
Y3k7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjYWNoZVBvbGljeSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXNvdXJjZVJlcXVlc3Quc2V0Q2FjaGVQb2xpY3koY2FjaGVQb2xpY3kp
OwotCi0gICAgYm9vbCBpc0FwcEJvdW5kOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNBcHBC
b3VuZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXNvdXJjZVJlcXVlc3Quc2V0SXNB
cHBCb3VuZChpc0FwcEJvdW5kKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIEFyZ3Vt
ZW50Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQogewog
ICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGVJbmZvLnR5cGUoKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0YWVkNjliNGQ1NzYxNmFhOGYzNWVl
ODA5YmRmNzI5ODNkYzYzMzg5Li5jNTY5OTFjOTBkZmRiZTQ4NjkyZTE4MTQ1MDhlYTRjYjJlNzAw
NGEyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTggQEAKKzIwMjEtMDItMjMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVxdWVzdCAocmF0aGVyIHRoYW4gQ0ZV
UkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MDA5NjM+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAg
ICAgICAgQWRkIGEgbmV3IHRlc3QgdG8gZW5zdXJlIHdlIGNhbiBzdWNjZXNzZnVsbHkgbG9hZCBV
UkxzIHdpdGggYWNjZW50ZWQgY2hhcmFjdGVycywKKyAgICAgICAgYW5kIHRvIHRlc3QgdGhlIHVw
ZGF0ZWQgSVBDIHNlcmlhbGl6YXRpb24gZm9yIE5TVVJMUmVxdWVzdC4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0EvMzAzLzI0Ny8zMDMvMjQzby5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0xvYWRB
UElzLm1tOgorICAgICAgICAoVEVTVCk6CisKIDIwMjEtMDItMjIgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgYWRvcHROUygpIGFzIHNvb24gYXMgd2UgW1tP
YmpjQ2xhc3MgYWxsb2NdIGluaXRdIHRvIGF2b2lkIGxlYWtzCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0xvYWRBUElzLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbQpp
bmRleCBiZWQ1MDBlYTMzOTQ1YTgxZTY4ZDg4ODM3ZmE5MGFmN2NlNTcyMDhhLi5jNmU4YWM0NDU2
NmQ0NWY2Mjk2YWE4YTg1ZmY5MjFkYTVhYTk0ZWFiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0xvYWRBUElzLm1tCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3TG9hZEFQSXMubW0KQEAg
LTEzMiwzICsxMzIsNDIgQEAgVEVTVChXS1dlYlZpZXcsIExvYWRTaW11bGF0ZWRSZXF1ZXN0VXBk
YXRlc0JhY2tGb3J3YXJkTGlzdCkKICAgICBFWFBFQ1RfVFJVRSghbGlzdC5mb3J3YXJkSXRlbSk7
CiAgICAgRVhQRUNUX1dLX1NUUkVRKGV4YW1wbGVVUkxTdHJpbmcsIFtsaXN0LmJhY2tJdGVtLlVS
TCBhYnNvbHV0ZVN0cmluZ10pOwogfQorCitURVNUKFdLV2ViVmlldywgTG9hZEFjY2VudGVkRmls
ZVJlcXVlc3QpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKV0pOworCisgICAgYXV0
byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0TmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0
XSk7CisgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsK
KworICAgIGNvbnN0IFVJbnQ4IGJ5dGVzWzZdID0geyAnQScsIDB4QzMsIDB4QTcsIDB4QzMsIDB4
QTMsICdvJyB9OworICAgIGF1dG8gZmlsZU5hbWUgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2Nd
IGluaXRXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOjYgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmddKTsKKworICAgIC8vIFRoaXMgYXZvaWRzIGhhdmluZyB0byBhZGQgdW5pY29kZSBmaWxlbmFt
ZXMgdG8gZ2l0LgorICAgIE5TVVJMICpvcmlnaW5hbEZpbGUgPSBbW05TQnVuZGxlIG1haW5CdW5k
bGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGly
ZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBFWFBFQ1RfTk9UX05VTEwo
b3JpZ2luYWxGaWxlKTsKKworICAgIE5TU3RyaW5nICp0ZXN0RGlyZWN0b3J5U3RyaW5nID0gW05T
VGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OltbTlNV
VUlEIFVVSURdIFVVSURTdHJpbmddXTsKKyAgICBOU1VSTCAqdGVzdERpcmVjdG9yeSA9IFtOU1VS
TCBmaWxlVVJMV2l0aFBhdGg6IHRlc3REaXJlY3RvcnlTdHJpbmddOworCisgICAgTlNTdHJpbmcg
KnRlc3RGaWxlU3RyaW5nID0gW1t0ZXN0RGlyZWN0b3J5U3RyaW5nIHN0cmluZ0J5QXBwZW5kaW5n
UGF0aENvbXBvbmVudDpmaWxlTmFtZS5nZXQoKV0gc3RyaW5nQnlBcHBlbmRpbmdQYXRoRXh0ZW5z
aW9uOkAiaHRtbCJdOworICAgIE5TVVJMICp0ZXN0RmlsZSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBh
dGg6dGVzdEZpbGVTdHJpbmddOworCisgICAgYXV0byBkZWZhdWx0TWFuYWdlciA9IFtOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKKyAgICBbZGVmYXVsdE1hbmFnZXIgcmVtb3ZlSXRlbUF0
VVJMOnRlc3RGaWxlIGVycm9yOm5pbF07CisgICAgW2RlZmF1bHRNYW5hZ2VyIHJlbW92ZUl0ZW1B
dFVSTDp0ZXN0RGlyZWN0b3J5IGVycm9yOm5pbF07CisKKyAgICBbZGVmYXVsdE1hbmFnZXIgY3Jl
YXRlRGlyZWN0b3J5QXRVUkw6dGVzdERpcmVjdG9yeSB3aXRoSW50ZXJtZWRpYXRlRGlyZWN0b3Jp
ZXM6WUVTIGF0dHJpYnV0ZXM6bmlsIGVycm9yOm5pbF07CisKKyAgICBOU0Vycm9yICplcnJvciA9
IG5pbDsKKyAgICBbZGVmYXVsdE1hbmFnZXIgY29weUl0ZW1BdFVSTDpvcmlnaW5hbEZpbGUgdG9V
Ukw6dGVzdEZpbGUgZXJyb3I6JmVycm9yXTsKKyAgICBFWFBFQ1RfTlVMTChlcnJvcik7CisgICAg
CisgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDp0ZXN0RmlsZV07CisgICAgW3dlYlZpZXcgbG9hZEZpbGVSZXF1ZXN0OnJlcXVlc3QgYWxsb3dp
bmdSZWFkQWNjZXNzVG9VUkw6dGVzdEZpbGUuVVJMQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50
XTsKKyAgICBbZGVsZWdhdGUgd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIEVYUEVD
VF9XS19TVFJFUSh3ZWJWaWV3LmdldCgpLl9yZXNvdXJjZURpcmVjdG9yeVVSTC5wYXRoLCB0ZXN0
RmlsZS5VUkxCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnQucGF0aCk7CisKKyAgICBbZGVmYXVs
dE1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOnRlc3RGaWxlIGVycm9yOm5pbF07CisgICAgW2RlZmF1
bHRNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDp0ZXN0RGlyZWN0b3J5IGVycm9yOm5pbF07Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421486</attachid>
            <date>2021-02-24 17:26:34 -0800</date>
            <delta_ts>2021-02-25 12:11:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222145-20210224172633.patch</filename>
            <type>text/plain</type>
            <size>28463</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczNDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGY1ZDJlYzE3MjM2YThkNDQxN2JmODcz
MDBmODFjYjdhZjMxYzQ4ODIuLjM4YzFkZDAwOWFmYjExYWU4MWFiNzkxNWNjZWNmMGRlNWVmOTc0
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDItMjQgIEJyZW50IEZ1bGdoYW0gIDxiZnVs
Z2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVxdWVzdCAocmF0aGVy
IHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MDA5
NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVVJM
V2l0aERhdGEgZG9lcyBhbiBlYXJseSByZXR1cm4gd2hlbiB0aGUgbGVhZGluZyBjaGFyYWN0ZXIg
aW4gdGhlIFVSTCBpcyAnLycsCisgICAgICAgIHNpZ25pZnlpbmcgYSBmaWxlIHBhdGguIEhvd2V2
ZXIsIFVSTHMgb2YgdGhlIGZvcm0gIi8vY2RuLmRvbWFpbi5jb20iIGFyZSBvZnRlbgorICAgICAg
ICBlbmNvdW50ZXJlZCwgYW5kIFJGQyAzOTg2IGRvZXMgbm90IHByb2hpYml0IHRoZW0uIFdlIHNo
b3VsZCBvbmx5IGRvIGFuIGVhcmx5CisgICAgICAgIHJldHVybiBpZiB0aGUgY2hhcmFjdGVyIGFm
dGVyIHRoZSBpbml0aWFsICcvJyBpcyBub3QgYWxzbyAnLycuCisKKyAgICAgICAgKiB3dGYvY29j
b2EvTlNVUkxFeHRyYXMubW06CisgICAgICAgIChXVEY6OlVSTFdpdGhEYXRhKToKKwogMjAyMS0w
Mi0yNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHBsYXRm
b3JtIGVuYWJsZSBmb3Igc2VwYXJhdGVkIG1vZGVsIGludmVzdGlnYXRpb24KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
NzE5NmUyZTA2YTIyOTNlMDFjMTQxYjIyZTU4MzYwOTM3NmM5NTU0OS4uZjAzNGM5NGMwOGM2OGI3
ZmU4NWM0Y2FjOWIzYjU4NzAxZjc5ODZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAy
MS0wMi0yMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBT
ZXJpYWxpemUgTlNVUkxSZXF1ZXN0IChyYXRoZXIgdGhhbiBDRlVSTFJlcXVlc3QpIGluIElQQwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMTQ1Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NDUwMDk2Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlciBhbmQgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICBUZXN0ZWQgYnkgZXhp
c3RpbmcgbGF5b3V0IGFuZCBXZWJLaXRBUEkgdGVzdHMuCisKKyAgICAgICAgUmV2aXNlIElQQyBz
ZXJpYWxpemF0aW9uIHNvIHRoYXQgTlNVUkxDb25uZWN0aW9uIChtb2Rlcm4pIENvY29hIGJ1aWxk
cyBzZXJpYWxpemUgdGhlCisgICAgICAgIE5TVVJMUmVxdWVzdCBvYmplY3QsIHJhdGhlciB0aGFu
IGJyaWRnaW5nIHRvIENGVVJMUmVxdWVzdCBhbmQgc2VyaWFsaXppbmcgdGhhdC4gVGhpcworICAg
ICAgICBlbnN1cmVzIHRoYXQgdGhlIGZ1bGwgc2V0IG9mIE5TVVJMUmVxdWVzdCBmZWF0dXJlcyBh
cmUgYWNjdXJhdGVseSByZWNvbnN0aXR1dGVkIG9uIHRoZQorICAgICAgICByZWNlaXZpbmcgc2lk
ZSBvZiB0aGUgY29ubmVjdGlvbi4KKworICAgICAgICBCZWNhdXNlIE5TVVJMIHNlcmlhbGl6YXRp
b24gZG9lc24ndCBoYW5kbGUgc29tZSBlbmNvZGVkIHBhcmFtZXRlcnMgcHJvcGVybHksIHdlIGlt
cGxlbWVudAorICAgICAgICBhbiBhcmNoaXZpbmcgZGVsZWdhdGUgdG8gYXJjaGl2ZSB0aGUgVVJM
IGxpa2Ugd2UgZG8gZm9yIENGVVJMLgorCisgICAgICAgICogU2hhcmVkL0NvY29hL0FyZ3VtZW50
Q29kZXJzQ29jb2EubW06CisgICAgICAgICgtW1dLU2VjdXJlQ29kaW5nQXJjaGl2aW5nRGVsZWdh
dGUgYXJjaGl2ZXI6d2lsbEVuY29kZU9iamVjdDpdKTogQWRkZWQuCisgICAgICAgICgtW1dLU2Vj
dXJlQ29kaW5nQXJjaGl2aW5nRGVsZWdhdGUgdW5hcmNoaXZlcjpkaWREZWNvZGVPYmplY3Q6XSk6
IEFkZGVkLgorICAgICAgICAoK1tXS0VuY29kZWRVUkwgc3VwcG9ydHNTZWN1cmVDb2RpbmddKTog
QWRkZWQuCisgICAgICAgICgtW1dLRW5jb2RlZFVSTCBlbmNvZGVXaXRoQ29kZXI6XSk6IEFkZGVk
LgorICAgICAgICAoLVtXS0VuY29kZWRVUkwgaW5pdFdpdGhDb2RlcjpdKTogQWRkZWQuCisgICAg
ICAgICgtW1dLRW5jb2RlZFVSTCBpbml0V2l0aFVSTDpdKTogQWRkZWQuCisgICAgICAgIChJUEM6
OmVuY29kZVNlY3VyZUNvZGluZ0ludGVybmFsKTogVXBkYXRlIHRvIHVzZSBuZXcgZGVsZWdhdGUu
CisgICAgICAgIChJUEM6OmRlY29kZVNlY3VyZUNvZGluZ0ludGVybmFsKTogRGl0dG8uCisgICAg
ICAgICgtW1dLU2VjdXJlQ29kaW5nRm9udEF0dHJpYnV0ZU5vcm1hbGl6ZXIgYXJjaGl2ZXI6d2ls
bEVuY29kZU9iamVjdDpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzQ29jb2EubW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogQWRkIE5TVVJMUmVx
dWVzdCBlbmNvZGluZy4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOiBBZGQgTlNVUkxSZXF1ZXN0IGRlY29k
aW5nLgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tOgor
ICAgICAgICAoSVBDOjpjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChJUEM6OmV4dHJhY3REaWN0aW9uYXJ5VmFsdWUpOiBEZWxldGVkLgorICAgICAg
ICAoSVBDOjpjcmVhdGVBcmNoaXZlTGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OmNyZWF0
ZUNGVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChJUEM6OmNyZWF0ZU5TVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRh
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKElQ
Qzo6QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9y
bURhdGEpOiBEZWxldGVkLgorCiAyMDIxLTAyLTI0ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFu
QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBHZXQgZGVmYXVsdCB2YWx1ZSBpbiB0aGUgVUkg
cHJvY2VzcyBmb3Igd2hldGhlciBzeW5jaHJvbm91cyBYTUxIdHRwUmVxdWVzdCBhcmUgYWxsb3dl
ZCBkdXJpbmcgdW5sb2FkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9OU1VSTEV4
dHJhcy5tbSBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJMRXh0cmFzLm1tCmluZGV4IDIwOWVh
NWI4NjY0YTFiYTMxOTJmOWVjMjM1MzllMzBjZTJjOTdhODIuLjkzYTAxZDcxMDVhMTJmMTI1Yjlm
NGIxYTYxZDJiM2VhODI5Mjk3M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL05T
VVJMRXh0cmFzLm1tCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJMRXh0cmFzLm1tCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE2NCw4ICsxNjQsMTIgQEAgTlNVUkwgKlVSTFdpdGhEYXRhKE5TRGF0YSAqZGF0
YSwgTlNVUkwgKmJhc2VVUkwpCiAgICAgICAgIGNvbnN0IFVJbnQ4ICpieXRlcyA9IHN0YXRpY19j
YXN0PGNvbnN0IFVJbnQ4Kj4oW2RhdGEgYnl0ZXNdKTsKICAgICAgICAgCiAgICAgICAgIC8vIENG
VVJMQ3JlYXRlQWJzb2x1dGVVUkxXaXRoQnl0ZXMgd291bGQgY29tcGxhaW4gdG8gY29uc29sZSBp
ZiB3ZSBwYXNzZWQgYSBwYXRoIHRvIGl0LgotICAgICAgICBpZiAoYnl0ZXNbMF0gPT0gJy8nICYm
ICFiYXNlVVJMKQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgaWYgKGJ5dGVzWzBd
ID09ICcvJyAmJiAhYmFzZVVSTCkgeworICAgICAgICAgICAgLy8gQSBVUkwgc3RhcnRpbmcgd2l0
aCAnLy8nIGlzIHZhbGlkIChhbiBhdXRob3JpdHkgd2l0aG91dCBhIHNjaGVtZSksIGFuZCBpcyBu
b3QgYSBmaWxlIHBhdGguCisgICAgICAgICAgICAvLyBTbyBvbmx5IHJldHVybiBlYXJseSBpZiB0
aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBzbGFzaCBpcyBzb21ldGhpaGcgZWxzZS4KKyAgICAgICAg
ICAgIGlmIChsZW5ndGggPT0gMSB8fCBieXRlc1sxXSAhPSAnLycpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gTk9URTogV2UgdXNl
IFVURi04IGhlcmUgc2luY2UgdGhpcyBlbmNvZGluZyBpcyB1c2VkIHdoZW4gY29tcHV0aW5nIHN0
cmluZ3Mgd2hlbiByZXR1cm5pbmcgVVJMIGNvbXBvbmVudHMKICAgICAgICAgLy8gKGUuZyBjYWxs
cyB0byBOU1VSTCAtcGF0aCkuIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gaXMgbm90IHRvbGVyYW50
IG9mIGlsbGVnYWwgVVRGLTggc2VxdWVuY2VzLCB3aGljaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvQ29jb2EvQXJndW1lbnRDb2RlcnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0NvY29hL0FyZ3VtZW50Q29kZXJzQ29jb2EubW0KaW5kZXggYmQzYWVjMzFjMzNkYjU3
ZjZmODIyN2UzNTY5MWFhM2I4NzQwZjg3YS4uODc2YmEyZGJhOGQ1ZDNlNjI2YTcxNjFkMGUxNjUy
NDQ3ZjVjNjY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQXJndW1l
bnRDb2RlcnNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9Bcmd1bWVu
dENvZGVyc0NvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCwgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDggQEAKICNpbXBvcnQgPENvcmVUZXh0L0NU
Rm9udERlc2NyaXB0b3IuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CiAj
aW1wb3J0IDx3dGYvSGFzaFNldC5oPgorI2ltcG9ydCA8d3RmL2NmL0NGVVJMRXh0cmFzLmg+Cisj
aW1wb3J0IDx3dGYvY29jb2EvTlNVUkxFeHRyYXMuaD4KIAogI2lmIFVTRShBUFBLSVQpCiAjaW1w
b3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+CkBAIC00OSwyOCArNTEsMTExIEBACiAjaW1wb3J0IDxV
SUtpdC9VSUZvbnREZXNjcmlwdG9yLmg+CiAjZW5kaWYKIAotI2lmIEhBVkUoTlNGT05UX1dJVEhf
T1BUSUNBTF9TSVpJTkdfQlVHKQorTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKworQGludGVyZmFj
ZSBXS1NlY3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlIDogTlNPYmplY3QgPE5TS2V5ZWRBcmNo
aXZlckRlbGVnYXRlLCBOU0tleWVkVW5hcmNoaXZlckRlbGVnYXRlPgorQGVuZAogCi1AaW50ZXJm
YWNlIFdLU2VjdXJlQ29kaW5nRm9udEF0dHJpYnV0ZU5vcm1hbGl6ZXIgOiBOU09iamVjdCA8TlNL
ZXllZEFyY2hpdmVyRGVsZWdhdGU+CitAaW50ZXJmYWNlIFdLU2VjdXJlQ29kaW5nVVJMV3JhcHBl
ciA6IE5TT2JqZWN0IDxOU1NlY3VyZUNvZGluZz4KKy0gKGluc3RhbmNldHlwZSBfTnVsbGFibGUp
aW5pdFdpdGhVUkw6KE5TVVJMICopdXJsOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBOU1VSTCAqIHdyYXBwZWRVUkw7CiBAZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBXS1NlY3VyZUNv
ZGluZ0ZvbnRBdHRyaWJ1dGVOb3JtYWxpemVyCitAaW1wbGVtZW50YXRpb24gV0tTZWN1cmVDb2Rp
bmdBcmNoaXZpbmdEZWxlZ2F0ZQogCi0tIChpZClhcmNoaXZlcjooTlNLZXllZEFyY2hpdmVyICop
YXJjaGl2ZXIgd2lsbEVuY29kZU9iamVjdDooaWQpb2JqZWN0CistIChudWxsYWJsZSBpZClhcmNo
aXZlcjooTlNLZXllZEFyY2hpdmVyICopYXJjaGl2ZXIgd2lsbEVuY29kZU9iamVjdDooaWQpb2Jq
ZWN0CiB7Ci0gICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNGb250IGNsYXNzXV0pIHsK
LSAgICAgICAgTlNGb250ICpmb250ID0gc3RhdGljX2Nhc3Q8TlNGb250ICo+KG9iamVjdCk7Cisj
aWYgSEFWRShOU0ZPTlRfV0lUSF9PUFRJQ0FMX1NJWklOR19CVUcpCisgICAgaWYgKGF1dG8gZm9u
dCA9IGR5bmFtaWNfb2JqY19jYXN0PE5TRm9udD4ob2JqZWN0KSkgewogICAgICAgICAvLyBSZWNy
ZWF0ZSBhbnkgc2VyaWFsaXplZCBmb250cyBhZnRlciBub3JtYWxpemluZyB0aGUKICAgICAgICAg
Ly8gZm9udCBhdHRyaWJ1dGVzIHRvIHdvcmsgYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS81MTY1Nzg4
MD4uCiAgICAgICAgIHJldHVybiBXZWJLaXQ6OmZvbnRXaXRoQXR0cmlidXRlcyhmb250LmZvbnRE
ZXNjcmlwdG9yLmZvbnRBdHRyaWJ1dGVzLCAwKTsKICAgICB9CisjZW5kaWYKKworICAgIGlmIChh
dXRvIHVybCA9IGR5bmFtaWNfb2JqY19jYXN0PE5TVVJMPihvYmplY3QpKQorICAgICAgICByZXR1
cm4gYWRvcHROUyhbW1dLU2VjdXJlQ29kaW5nVVJMV3JhcHBlciBhbGxvY10gaW5pdFdpdGhVUkw6
dXJsXSkuYXV0b3JlbGVhc2UoKTsKIAogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKKy0gKGlkIF9O
dWxsYWJsZSl1bmFyY2hpdmVyOihOU0tleWVkVW5hcmNoaXZlciAqKXVuYXJjaGl2ZXIgZGlkRGVj
b2RlT2JqZWN0OihpZCBfTnVsbGFibGUpIE5TX1JFTEVBU0VTX0FSR1VNRU5UIG9iamVjdCBOU19S
RVRVUk5TX1JFVEFJTkVECit7CisgICAgYXV0byBhZG9wdGVkT2JqZWN0ID0gYWRvcHROUyhvYmpl
Y3QpOworICAgIGlmIChhdXRvIGVuY29kZWRVUkwgPSBkeW5hbWljX29iamNfY2FzdDxXS1NlY3Vy
ZUNvZGluZ1VSTFdyYXBwZXI+KGFkb3B0ZWRPYmplY3QuZ2V0KCkpKQorICAgICAgICByZXR1cm4g
cmV0YWluUHRyKGVuY29kZWRVUkwud3JhcHBlZFVSTCkubGVha1JlZigpOworCisgICAgcmV0dXJu
IGFkb3B0ZWRPYmplY3QubGVha1JlZigpOworfQorCiBAZW5kCiAKLSNlbmRpZgorQGltcGxlbWVu
dGF0aW9uIFdLU2VjdXJlQ29kaW5nVVJMV3JhcHBlciB7CisgICAgUmV0YWluUHRyPE5TVVJMPiBt
X3dyYXBwZWRVUkw7Cit9CisKKy0gKE5TVVJMICopd3JhcHBlZFVSTAoreworICAgIHJldHVybiBt
X3dyYXBwZWRVUkwuZ2V0KCk7Cit9CisKKysgKEJPT0wpc3VwcG9ydHNTZWN1cmVDb2RpbmcKK3sK
KyAgICByZXR1cm4gWUVTOworfQorCitOU1N0cmluZyAqIGNvbnN0IGJhc2VVUkxFeGlzdHNLZXkg
PSBAIldLLmJhc2VVUkxFeGlzdHMiOworTlNTdHJpbmcgKiBjb25zdCBiYXNlVVJMS2V5ID0gQCJX
Sy5iYXNlVVJMIjsKKworLSAodm9pZCllbmNvZGVXaXRoQ29kZXI6KE5TQ29kZXIgKiljb2Rlcgor
eworICAgIFJFTEVBU0VfQVNTRVJUKG1fd3JhcHBlZFVSTCk7CisgICAgYXV0byBiYXNlVVJMID0g
bV93cmFwcGVkVVJMLmdldCgpLmJhc2VVUkw7CisgICAgQk9PTCBoYXNCYXNlVVJMID0gISFiYXNl
VVJMOworCisgICAgW2NvZGVyIGVuY29kZVZhbHVlT2ZPYmpDVHlwZToiYyIgYXQ6Jmhhc0Jhc2VV
UkxdOworICAgIGlmIChoYXNCYXNlVVJMKQorICAgICAgICBbY29kZXIgZW5jb2RlT2JqZWN0OmJh
c2VVUkwgZm9yS2V5OmJhc2VVUkxLZXldOworCisgICAgV1RGOjpVUkxDaGFyQnVmZmVyIHVybEJ5
dGVzOworICAgIFdURjo6Z2V0VVJMQnl0ZXMoKF9fYnJpZGdlIENGVVJMUmVmKW1fd3JhcHBlZFVS
TC5nZXQoKSwgdXJsQnl0ZXMpOworICAgIFtjb2RlciBlbmNvZGVCeXRlczp1cmxCeXRlcy5kYXRh
KCkgbGVuZ3RoOnVybEJ5dGVzLnNpemUoKV07Cit9CisKKy0gKF9OdWxsYWJsZSBpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb2RlcjooTlNDb2RlciAqKWNvZGVyCit7CisgICAgYXV0byBzZWxmUHRyID0g
YWRvcHROUyhbc3VwZXIgaW5pdF0pOworICAgIGlmIChzZWxmUHRyKSB7CisgICAgICAgIEJPT0wg
aGFzQmFzZVVSTDsKKyAgICAgICAgW2NvZGVyIGRlY29kZVZhbHVlT2ZPYmpDVHlwZToiYyIgYXQ6
Jmhhc0Jhc2VVUkwgc2l6ZTpzaXplb2YoaGFzQmFzZVVSTCldOworCisgICAgICAgIFJldGFpblB0
cjxOU1VSTD4gYmFzZVVSTDsKKyAgICAgICAgaWYgKGhhc0Jhc2VVUkwpCisgICAgICAgICAgICBi
YXNlVVJMID0gKE5TVVJMICopW2NvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3M6TlNVUkwuY2xhc3Mg
Zm9yS2V5OmJhc2VVUkxLZXldOworCisgICAgICAgIE5TVUludGVnZXIgbGVuZ3RoOworICAgICAg
ICBpZiAoYXV0byBieXRlcyA9ICh1aW50OF90ICopW2NvZGVyIGRlY29kZUJ5dGVzV2l0aFJldHVy
bmVkTGVuZ3RoOiZsZW5ndGhdKSB7CisgICAgICAgICAgICBtX3dyYXBwZWRVUkwgPSBXVEY6OlVS
TFdpdGhEYXRhKFtOU0RhdGEgZGF0YVdpdGhCeXRlc05vQ29weTpieXRlcyBsZW5ndGg6bGVuZ3Ro
IGZyZWVXaGVuRG9uZTpOT10sIGJhc2VVUkwuZ2V0KCkpOworICAgICAgICAgICAgaWYgKCFtX3dy
YXBwZWRVUkwpCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVjb2RlIE5T
VVJMIGR1ZSB0byBpbnZhbGlkIGVuY29kaW5nIG9mIGxlbmd0aCAlZC4iLCBsZW5ndGgpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFtX3dyYXBwZWRVUkwpCisgICAgICAgICAgICByZXR1cm4g
bmlsOworICAgIH0KKworICAgIHJldHVybiBzZWxmUHRyLmxlYWtSZWYoKTsKK30KKworLSAoX051
bGxhYmxlIGluc3RhbmNldHlwZSlpbml0V2l0aFVSTDooTlNVUkwgKil1cmwKK3sKKyAgICBpZiAo
c2VsZiA9IFtzdXBlciBpbml0XSkKKyAgICAgICAgbV93cmFwcGVkVVJMID0gdXJsOworCisgICAg
cmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKIAogbmFtZXNwYWNlIElQQyB7CiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKQEAgLTM0NiwxNyArNDMxLDEyIEBAIHN0YXRpYyB2b2lkIGVuY29kZVNlY3Vy
ZUNvZGluZ0ludGVybmFsKEVuY29kZXImIGVuY29kZXIsIGlkIDxOU09iamVjdCwgTlNTZWN1cmVD
CiB7CiAgICAgYXV0byBhcmNoaXZlciA9IGFkb3B0TlMoW1tOU0tleWVkQXJjaGl2ZXIgYWxsb2Nd
IGluaXRSZXF1aXJpbmdTZWN1cmVDb2Rpbmc6WUVTXSk7CiAKLSNpZiBIQVZFKE5TRk9OVF9XSVRI
X09QVElDQUxfU0laSU5HX0JVRykKLSAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1dLU2Vj
dXJlQ29kaW5nRm9udEF0dHJpYnV0ZU5vcm1hbGl6ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRv
IGRlbGVnYXRlID0gYWRvcHROUyhbW1dLU2VjdXJlQ29kaW5nQXJjaGl2aW5nRGVsZWdhdGUgYWxs
b2NdIGluaXRdKTsKICAgICBbYXJjaGl2ZXIgc2V0RGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwot
I2VuZGlmCiAKICAgICBbYXJjaGl2ZXIgZW5jb2RlT2JqZWN0Om9iamVjdCBmb3JLZXk6TlNLZXll
ZEFyY2hpdmVSb290T2JqZWN0S2V5XTsKICAgICBbYXJjaGl2ZXIgZmluaXNoRW5jb2RpbmddOwot
Ci0jaWYgSEFWRShOU0ZPTlRfV0lUSF9PUFRJQ0FMX1NJWklOR19CVUcpCiAgICAgW2FyY2hpdmVy
IHNldERlbGVnYXRlOm5pbF07Ci0jZW5kaWYKIAogICAgIGVuY29kZShlbmNvZGVyLCAoX19icmlk
Z2UgQ0ZEYXRhUmVmKVthcmNoaXZlciBlbmNvZGVkRGF0YV0pOwogfQpAQCAtMzczLDggKzQ1Mywx
NSBAQCBzdGF0aWMgT3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2RlU2VjdXJlQ29kaW5nSW50
ZXJuYWwoRGVjb2RlciYgZGVjb2RlciwgTlNBcgogCiAgICAgYXV0byB1bmFyY2hpdmVyID0gYWRv
cHROUyhbW05TS2V5ZWRVbmFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yUmVhZGluZ0Zyb21EYXRhOihf
X2JyaWRnZSBOU0RhdGEgKilkYXRhLmdldCgpIGVycm9yOm51bGxwdHJdKTsKICAgICB1bmFyY2hp
dmVyLmdldCgpLmRlY29kaW5nRmFpbHVyZVBvbGljeSA9IE5TRGVjb2RpbmdGYWlsdXJlUG9saWN5
UmFpc2VFeGNlcHRpb247CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1dLU2VjdXJl
Q29kaW5nQXJjaGl2aW5nRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICB1bmFyY2hpdmVyLmdl
dCgpLmRlbGVnYXRlID0gZGVsZWdhdGUuZ2V0KCk7CisKKyAgICBhdXRvIGFsbG93ZWRDbGFzc1Nl
dCA9IGFkb3B0TlMoW1tOU011dGFibGVTZXQgYWxsb2NdIGluaXRXaXRoQXJyYXk6YWxsb3dlZENs
YXNzZXNdKTsKKyAgICBbYWxsb3dlZENsYXNzU2V0IGFkZE9iamVjdDpXS1NlY3VyZUNvZGluZ1VS
TFdyYXBwZXIuY2xhc3NdOworICAgIAogICAgIEB0cnkgewotICAgICAgICBpZCByZXN1bHQgPSBb
dW5hcmNoaXZlciBkZWNvZGVPYmplY3RPZkNsYXNzZXM6W05TU2V0IHNldFdpdGhBcnJheTphbGxv
d2VkQ2xhc3Nlc10gZm9yS2V5Ok5TS2V5ZWRBcmNoaXZlUm9vdE9iamVjdEtleV07CisgICAgICAg
IGlkIHJlc3VsdCA9IFt1bmFyY2hpdmVyIGRlY29kZU9iamVjdE9mQ2xhc3NlczphbGxvd2VkQ2xh
c3NTZXQuZ2V0KCkgZm9yS2V5Ok5TS2V5ZWRBcmNoaXZlUm9vdE9iamVjdEtleV07CiAgICAgICAg
IEFTU0VSVCghcmVzdWx0IHx8IFtyZXN1bHQgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChO
U1NlY3VyZUNvZGluZyldKTsKICAgICAgICAgcmV0dXJuIHsgcmVzdWx0IH07CiAgICAgfSBAY2F0
Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKQEAgLTM4Miw2ICs0NjksNyBAQCBzdGF0aWMg
T3B0aW9uYWw8UmV0YWluUHRyPGlkPj4gZGVjb2RlU2VjdXJlQ29kaW5nSW50ZXJuYWwoRGVjb2Rl
ciYgZGVjb2RlciwgTlNBcgogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0gQGZp
bmFsbHkgewogICAgICAgICBbdW5hcmNoaXZlciBmaW5pc2hEZWNvZGluZ107CisgICAgICAgIHVu
YXJjaGl2ZXIuZ2V0KCkuZGVsZWdhdGUgPSBuaWw7CiAgICAgfQogfQogCkBAIC01MjYsNCArNjE0
LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxJUEM6Ok5TVHlwZT4gewogfTsKIH0g
Ly8gbmFtZXNwYWNlIFdURgogCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKwogI2VuZGlmIC8vIFBM
QVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9X
ZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbQppbmRleCA3NmFmYjcyZmYyZmQ0Zjk3YjVjZjAx
MzJlZWE5YjMzN2ZhNDRhYjQzLi4yYjZhNzU1ZGY3MGY5MThmZDAwNDdjN2I2NzBiN2E0NmQxNjZi
MjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJDb3JlQXJndW1l
bnRDb2RlcnNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJDb3Jl
QXJndW1lbnRDb2RlcnNDb2NvYS5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbXBvcnQgPFdlYkNv
cmUvRm9udC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb250QXR0cmlidXRlcy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291
cmNlUmVxdWVzdC5oPgogI2ltcG9ydCA8cGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oPgogCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTU0Myw0ICs1NDQsNTkgQEAgT3B0aW9uYWw8Rm9udFBs
YXRmb3JtRGF0YT4gQXJndW1lbnRDb2RlcjxSZWY8Rm9udD4+OjpkZWNvZGVQbGF0Zm9ybURhdGEo
RGVjb2RlciYKICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShjdEZvbnQuZ2V0KCksIHNpemUu
dmFsdWUoKSwgc3ludGhldGljQm9sZC52YWx1ZSgpLCBzeW50aGV0aWNPYmxpcXVlLnZhbHVlKCks
IG9yaWVudGF0aW9uLnZhbHVlKCksIHdpZHRoVmFyaWFudC52YWx1ZSgpLCB0ZXh0UmVuZGVyaW5n
TW9kZS52YWx1ZSgpKTsKIH0KIAordm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKK3sKKyAgICBhdXRvIHJlcXVl
c3RUb1NlcmlhbGl6ZSA9IHJldGFpblB0cihyZXNvdXJjZVJlcXVlc3QubnNVUkxSZXF1ZXN0KFdl
YkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KSk7CisKKyAg
ICBib29sIHJlcXVlc3RJc1ByZXNlbnQgPSByZXF1ZXN0VG9TZXJpYWxpemU7CisgICAgZW5jb2Rl
ciA8PCByZXF1ZXN0SXNQcmVzZW50OworCisgICAgaWYgKCFyZXF1ZXN0SXNQcmVzZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBXZSBkb24ndCBzZW5kIEhUVFAgYm9keSBvdmVyIElQQyBm
b3IgYmV0dGVyIHBlcmZvcm1hbmNlLgorICAgIC8vIEFsc28sIGl0J3Mgbm90IGFsd2F5cyBwb3Nz
aWJsZSB0byBkbywgYXMgc3RyZWFtcyBjYW4gb25seSBiZSBjcmVhdGVkIGluIHByb2Nlc3MgdGhh
dCBkb2VzIG5ldHdvcmtpbmcuCisgICAgaWYgKFtyZXF1ZXN0VG9TZXJpYWxpemUgSFRUUEJvZHld
IHx8IFtyZXF1ZXN0VG9TZXJpYWxpemUgSFRUUEJvZHlTdHJlYW1dKSB7CisgICAgICAgIGF1dG8g
bXV0YWJsZVJlcXVlc3QgPSBhZG9wdE5TKFtyZXF1ZXN0VG9TZXJpYWxpemUgbXV0YWJsZUNvcHld
KTsKKyAgICAgICAgW211dGFibGVSZXF1ZXN0IHNldEhUVFBCb2R5Om5pbF07CisgICAgICAgIFtt
dXRhYmxlUmVxdWVzdCBzZXRIVFRQQm9keVN0cmVhbTpuaWxdOworICAgICAgICByZXF1ZXN0VG9T
ZXJpYWxpemUgPSBXVEZNb3ZlKG11dGFibGVSZXF1ZXN0KTsKKyAgICB9CisKKyAgICBJUEM6OmVu
Y29kZShlbmNvZGVyLCByZXF1ZXN0VG9TZXJpYWxpemUuZ2V0KCkpOworCisgICAgZW5jb2RlciA8
PCByZXNvdXJjZVJlcXVlc3QucmVxdWVzdGVyKCk7CisgICAgZW5jb2RlciA8PCByZXNvdXJjZVJl
cXVlc3QuaXNBcHBCb3VuZCgpOworfQorCitib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKERlY29kZXImIGRlY29kZXIsIFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQoreworICAgIGJvb2wgcmVxdWVz
dElzUHJlc2VudDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVlc3RJc1ByZXNlbnQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXJlcXVlc3RJc1ByZXNlbnQpIHsKKyAg
ICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0gV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KCk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGF1dG8gcmVxdWVzdCA9IElQQzo6ZGVjb2Rl
PE5TVVJMUmVxdWVzdD4oZGVjb2RlciwgTlNVUkxSZXF1ZXN0LmNsYXNzKTsKKyAgICBpZiAoIXJl
cXVlc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3Q6OlJlcXVlc3RlciByZXF1ZXN0ZXI7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXF1ZXN0ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGlzQXBwQm91bmQ7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc0FwcEJvdW5kKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmVzb3VyY2VSZXF1ZXN0ID0gV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KHJl
cXVlc3QtPmdldCgpKTsKKyAgICByZXNvdXJjZVJlcXVlc3Quc2V0UmVxdWVzdGVyKHJlcXVlc3Rl
cik7CisgICAgcmVzb3VyY2VSZXF1ZXN0LnNldElzQXBwQm91bmQoaXNBcHBCb3VuZCk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQppbmRleCAwZjYw
NWZhZDUyMTcyNTE0MTBlMjVkN2JiYzkxY2IxM2M4MTRlNTQ0Li5jNTk1MDY4YTZhNGM3N2QwNjEy
ODBhYTI1NzQ2NGQ2NmFhM2MxMDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9t
YWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KQEAgLTQyLDI0NSArNDIsMTQgQEAKICNp
bXBvcnQgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CiAjaW1wb3J0IDx3dGYvY2YvVHlwZUNhc3RzQ0Yu
aD4KIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW5jbHVkZSA8V2ViS2l0QWRkaXRp
b25zL1dlYkNvcmVBcmd1bWVudENvZGVyc01hY0FkZGl0aW9ucy5oPgotI2VuZGlmCi0KICNpZiBF
TkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogI2ltcG9ydCA8V2ViQ29yZS9NZWRpYVBs
YXliYWNrVGFyZ2V0Q29udGV4dC5oPgogI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAjaW1wb3J0
IDxwYWwvY29jb2EvQVZGb3VuZGF0aW9uU29mdExpbmsuaD4KICNlbmRpZgogCi0jaWZuZGVmIFdF
QkNPUkVfQVJHVU1FTlRDT0RFUlNfTUFDX0RFQ09ERV9BRERJVElPTlMKLSNkZWZpbmUgV0VCQ09S
RV9BUkdVTUVOVENPREVSU19NQUNfREVDT0RFX0FERElUSU9OUwotI2VuZGlmCi0KLSNpZm5kZWYg
V0VCQ09SRV9BUkdVTUVOVENPREVSU19NQUNfRU5DT0RFX0FERElUSU9OUwotI2RlZmluZSBXRUJD
T1JFX0FSR1VNRU5UQ09ERVJTX01BQ19FTkNPREVfQURESVRJT05TCi0jZW5kaWYKLQogbmFtZXNw
YWNlIElQQyB7CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3Jl
YXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oQ0ZJbmRleCB2ZXJzaW9uLCBDRlR5cGVSZWYq
IG9iamVjdHMsIENGSW5kZXggb2JqZWN0Q291bnQsIENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFBy
b3BlcnRpZXMsIENGTnVtYmVyUmVmIGV4cGVjdGVkQ29udGVudExlbmd0aCwgQ0ZTdHJpbmdSZWYg
bWltZVR5cGUsIENGVHlwZVJlZiB0b2tlbk51bGwpCi17Ci0gICAgYXV0byBhcmNoaXZlTGlzdEFy
cmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAw
LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0KLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkg
PCBvYmplY3RDb3VudDsgKytpKSB7Ci0gICAgICAgIENGVHlwZVJlZiBvYmplY3QgPSBvYmplY3Rz
W2ldOwotICAgICAgICBpZiAob2JqZWN0KSB7Ci0gICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFs
dWUoYXJjaGl2ZUxpc3RBcnJheS5nZXQoKSwgb2JqZWN0KTsKLSAgICAgICAgICAgIENGUmVsZWFz
ZShvYmplY3QpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQXBwZW5kIG91ciB0
b2tlbiBudWxsIHJlcHJlc2VudGF0aW9uLgotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVl
KGFyY2hpdmVMaXN0QXJyYXkuZ2V0KCksIHRva2VuTnVsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAm
a0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotCi0gICAgYXV0byB2ZXJzaW9uTnVt
YmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1i
ZXJDRkluZGV4VHlwZSwgJnZlcnNpb24pKTsKLSAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0
aW9uYXJ5LmdldCgpLCBDRlNUUigidmVyc2lvbiIpLCB2ZXJzaW9uTnVtYmVyLmdldCgpKTsKLSAg
ICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigiYXJjaGl2ZUxp
c3QiKSwgYXJjaGl2ZUxpc3RBcnJheS5nZXQoKSk7Ci0KLSAgICBpZiAocHJvdG9jb2xQcm9wZXJ0
aWVzKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rpb25hcnkuZ2V0KCksIENG
U1RSKCJwcm90b2NvbFByb3BlcnRpZXMiKSwgcHJvdG9jb2xQcm9wZXJ0aWVzKTsKLSAgICAgICAg
Q0ZSZWxlYXNlKHByb3RvY29sUHJvcGVydGllcyk7Ci0gICAgfQotCi0gICAgaWYgKGV4cGVjdGVk
Q29udGVudExlbmd0aCkgewotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5
LmdldCgpLCBDRlNUUigiZXhwZWN0ZWRDb250ZW50TGVuZ3RoIiksIGV4cGVjdGVkQ29udGVudExl
bmd0aCk7Ci0gICAgICAgIENGUmVsZWFzZShleHBlY3RlZENvbnRlbnRMZW5ndGgpOwotICAgIH0K
LQotICAgIGlmIChtaW1lVHlwZSkgewotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0
aW9uYXJ5LmdldCgpLCBDRlNUUigibWltZVR5cGUiKSwgbWltZVR5cGUpOwotICAgICAgICBDRlJl
bGVhc2UobWltZVR5cGUpOwotICAgIH0KLQotICAgIENGQWxsb2NhdG9yRGVhbGxvY2F0ZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBvYmplY3RzKTsKLQotICAgIHJldHVybiBkaWN0aW9uYXJ5OwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+IGJvb2wgZXh0cmFjdERpY3Rpb25hcnlWYWx1
ZShDRkRpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgQ0ZTdHJpbmdSZWYga2V5LCBWYWx1ZVR5cGUq
IHJlc3VsdCkKLXsKLSAgICBhdXRvIHVudHlwZWRWYWx1ZSA9IENGRGljdGlvbmFyeUdldFZhbHVl
KGRpY3Rpb25hcnksIGtleSk7Ci0gICAgYXV0byB2YWx1ZSA9IGR5bmFtaWNfY2ZfY2FzdDxWYWx1
ZVR5cGU+KHVudHlwZWRWYWx1ZSk7Ci0gICAgaWYgKHVudHlwZWRWYWx1ZSAmJiAhdmFsdWUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICAqcmVzdWx0ID0g
dmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0ZUFyY2hpdmVM
aXN0KENGRGljdGlvbmFyeVJlZiByZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRva2VuTnVsbCwg
Q0ZJbmRleCogdmVyc2lvbiwgQ0ZUeXBlUmVmKiogb2JqZWN0cywgQ0ZJbmRleCogb2JqZWN0Q291
bnQsIENGRGljdGlvbmFyeVJlZiogcHJvdG9jb2xQcm9wZXJ0aWVzLCBDRk51bWJlclJlZiogZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoLCBDRlN0cmluZ1JlZiogbWltZVR5cGUpCi17Ci0gICAgYXV0byB2
ZXJzaW9uTnVtYmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoInZlcnNpb24iKSkpOwotICAgIGlmICghdmVy
c2lvbk51bWJlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFDRk51bWJlckdl
dFZhbHVlKHZlcnNpb25OdW1iZXIsIGtDRk51bWJlckNGSW5kZXhUeXBlLCB2ZXJzaW9uKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBhcmNoaXZlTGlzdEFycmF5ID0gZHluYW1p
Y19jZl9jYXN0PENGQXJyYXlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJlcHJlc2VudGF0aW9u
LCBDRlNUUigiYXJjaGl2ZUxpc3QiKSkpOwotICAgIGlmICghYXJjaGl2ZUxpc3RBcnJheSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBhcmNoaXZlTGlzdEFycmF5Q291bnQgPSBD
RkFycmF5R2V0Q291bnQoYXJjaGl2ZUxpc3RBcnJheSk7Ci0gICAgaWYgKCFpc0luQm91bmRzPHNp
emVfdD4oYXJjaGl2ZUxpc3RBcnJheUNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYXV0byBidWZmZXJTaXplID0gQ2hlY2tlZFNpemUoc2l6ZW9mKENGVHlwZVJlZikpICogc3Rh
dGljX2Nhc3Q8c2l6ZV90PihhcmNoaXZlTGlzdEFycmF5Q291bnQpOwotICAgIGlmIChidWZmZXJT
aXplLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFl
eHRyYWN0RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigicHJvdG9jb2xQcm9w
ZXJ0aWVzIiksIHByb3RvY29sUHJvcGVydGllcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoIWV4dHJhY3REaWN0aW9uYXJ5VmFsdWUocmVwcmVzZW50YXRpb24sIENGU1RSKCJleHBl
Y3RlZENvbnRlbnRMZW5ndGgiKSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghZXh0cmFjdERpY3Rpb25hcnlWYWx1ZShyZXByZXNlbnRhdGlv
biwgQ0ZTVFIoIm1pbWVUeXBlIiksIG1pbWVUeXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgKm9iamVjdENvdW50ID0gYXJjaGl2ZUxpc3RBcnJheUNvdW50OwotICAgICpvYmplY3Rz
ID0gc3RhdGljX2Nhc3Q8Q0ZUeXBlUmVmKj4oZmFzdE1hbGxvYyhidWZmZXJTaXplLnVuc2FmZUdl
dCgpKSk7Ci0KLSAgICBDRkFycmF5R2V0VmFsdWVzKGFyY2hpdmVMaXN0QXJyYXksIENGUmFuZ2VN
YWtlKDAsICpvYmplY3RDb3VudCksICpvYmplY3RzKTsKLSAgICBmb3IgKENGSW5kZXggaSA9IDA7
IGkgPCAqb2JqZWN0Q291bnQ7ICsraSkgewotICAgICAgICBpZiAoKCpvYmplY3RzKVtpXSA9PSB0
b2tlbk51bGwpCi0gICAgICAgICAgICAoKm9iamVjdHMpW2ldID0gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKENGVVJMUmVxdWVzdFJlZiBjZlJlcXVl
c3QsIENGVHlwZVJlZiB0b2tlbk51bGwpCi17Ci0gICAgQ0ZJbmRleCB2ZXJzaW9uOwotICAgIENG
VHlwZVJlZiogb2JqZWN0czsKLSAgICBDRkluZGV4IG9iamVjdENvdW50OwotICAgIENGRGljdGlv
bmFyeVJlZiBwcm90b2NvbFByb3BlcnRpZXM7Ci0KLSAgICAvLyBGSVhNRSAoMTI4ODk1MTgpOiBE
byBub3Qgc2VyaWFsaXplIEhUVFAgbWVzc2FnZSBib2R5LgotICAgIC8vIDEuIEl0IGNhbiBiZSBs
YXJnZSBhbmQgdGh1cyBjb3N0bHkgdG8gc2VuZCBhY3Jvc3MuCi0gICAgLy8gMi4gSXQgaXMgbWlz
bGVhZGluZyB0byBwcm92aWRlIGEgYm9keSB3aXRoIHNvbWUgcmVxdWVzdHMsIHdoaWxlIG90aGVy
cyB1c2UgYm9keSBzdHJlYW1zLCB3aGljaCBjYW5ub3QgYmUgc2VyaWFsaXplZCBhdCBhbGwuCi0K
LSAgICBfQ0ZVUkxSZXF1ZXN0Q3JlYXRlQXJjaGl2ZUxpc3Qoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
Y2ZSZXF1ZXN0LCAmdmVyc2lvbiwgJm9iamVjdHMsICZvYmplY3RDb3VudCwgJnByb3RvY29sUHJv
cGVydGllcyk7Ci0KLSAgICAvLyBUaGlzIHdpbGwgZGVhbGxvY2F0ZSB0aGUgcGFzc2VkIGluIGFy
Z3VtZW50cy4KLSAgICByZXR1cm4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24odmVy
c2lvbiwgb2JqZWN0cywgb2JqZWN0Q291bnQsIHByb3RvY29sUHJvcGVydGllcywgbnVsbHB0ciwg
bnVsbHB0ciwgdG9rZW5OdWxsKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRlVSTFJlcXVlc3RS
ZWY+IGNyZWF0ZUNGVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihDRkRp
Y3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwpCi17Ci0gICAg
Q0ZJbmRleCB2ZXJzaW9uOwotICAgIENGVHlwZVJlZiogb2JqZWN0czsKLSAgICBDRkluZGV4IG9i
amVjdENvdW50OwotICAgIENGRGljdGlvbmFyeVJlZiBwcm90b2NvbFByb3BlcnRpZXM7Ci0KLSAg
ICBpZiAoIWNyZWF0ZUFyY2hpdmVMaXN0KHJlcHJlc2VudGF0aW9uLCB0b2tlbk51bGwsICZ2ZXJz
aW9uLCAmb2JqZWN0cywgJm9iamVjdENvdW50LCAmcHJvdG9jb2xQcm9wZXJ0aWVzLCBudWxscHRy
LCBudWxscHRyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGNmUmVxdWVz
dCA9IGFkb3B0Q0YoX0NGVVJMUmVxdWVzdENyZWF0ZUZyb21BcmNoaXZlTGlzdChrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCB2ZXJzaW9uLCBvYmplY3RzLCBvYmplY3RDb3VudCwgcHJvdG9jb2xQcm9wZXJ0
aWVzKSk7Ci0gICAgZmFzdEZyZWUob2JqZWN0cyk7Ci0gICAgcmV0dXJuIFdURk1vdmUoY2ZSZXF1
ZXN0KTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZVNlcmlh
bGl6YWJsZVJlcHJlc2VudGF0aW9uKE5TVVJMUmVxdWVzdCAqcmVxdWVzdCwgQ0ZUeXBlUmVmIHRv
a2VuTnVsbCkKLXsKLSAgICByZXR1cm4gY3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24o
W3JlcXVlc3QgX0NGVVJMUmVxdWVzdF0sIHRva2VuTnVsbCk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5Q
dHI8TlNVUkxSZXF1ZXN0PiBjcmVhdGVOU1VSTFJlcXVlc3RGcm9tU2VyaWFsaXphYmxlUmVwcmVz
ZW50YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIHJlcHJlc2VudGF0aW9uLCBDRlR5cGVSZWYgdG9rZW5O
dWxsKQotewotICAgIGF1dG8gY2ZSZXF1ZXN0ID0gY3JlYXRlQ0ZVUkxSZXF1ZXN0RnJvbVNlcmlh
bGl6YWJsZVJlcHJlc2VudGF0aW9uKHJlcHJlc2VudGF0aW9uLCB0b2tlbk51bGwpOwotICAgIGlm
ICghY2ZSZXF1ZXN0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICByZXR1cm4g
YWRvcHROUyhbW05TVVJMUmVxdWVzdCBhbGxvY10gX2luaXRXaXRoQ0ZVUkxSZXF1ZXN0OmNmUmVx
dWVzdC5nZXQoKV0pOwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQotewotICAgIFJldGFpblB0cjxO
U1VSTFJlcXVlc3Q+IHJlcXVlc3RUb1NlcmlhbGl6ZSA9IHJlc291cmNlUmVxdWVzdC5uc1VSTFJl
cXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkp
OwotCi0gICAgYm9vbCByZXF1ZXN0SXNQcmVzZW50ID0gcmVxdWVzdFRvU2VyaWFsaXplOwotICAg
IGVuY29kZXIgPDwgcmVxdWVzdElzUHJlc2VudDsKLQotICAgIGlmICghcmVxdWVzdElzUHJlc2Vu
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgZG9uJ3Qgc2VuZCBIVFRQIGJvZHkgb3Zl
ciBJUEMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KLSAgICAvLyBBbHNvLCBpdCdzIG5vdCBhbHdh
eXMgcG9zc2libGUgdG8gZG8sIGFzIHN0cmVhbXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBpbiBwcm9j
ZXNzIHRoYXQgZG9lcyBuZXR3b3JraW5nLgotICAgIGlmIChbcmVxdWVzdFRvU2VyaWFsaXplIEhU
VFBCb2R5XSB8fCBbcmVxdWVzdFRvU2VyaWFsaXplIEhUVFBCb2R5U3RyZWFtXSkgewotICAgICAg
ICByZXF1ZXN0VG9TZXJpYWxpemUgPSBhZG9wdE5TKFtyZXF1ZXN0VG9TZXJpYWxpemUgbXV0YWJs
ZUNvcHldKTsKLSAgICAgICAgWyhOU011dGFibGVVUkxSZXF1ZXN0ICopcmVxdWVzdFRvU2VyaWFs
aXplIHNldEhUVFBCb2R5Om5pbF07Ci0gICAgICAgIFsoTlNNdXRhYmxlVVJMUmVxdWVzdCAqKXJl
cXVlc3RUb1NlcmlhbGl6ZSBzZXRIVFRQQm9keVN0cmVhbTpuaWxdOwotICAgIH0KLQotICAgIGF1
dG8gZGljdGlvbmFyeSA9IGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKHJlcXVlc3RU
b1NlcmlhbGl6ZS5nZXQoKSwgSVBDOjp0b2tlbk51bGxwdHJUeXBlUmVmKCkpOwotICAgIElQQzo6
ZW5jb2RlKGVuY29kZXIsIGRpY3Rpb25hcnkuZ2V0KCkpOwotCi0gICAgV0VCQ09SRV9BUkdVTUVO
VENPREVSU19NQUNfRU5DT0RFX0FERElUSU9OUwotCi0gICAgLy8gVGhlIGZhbGxiYWNrIGFycmF5
IGlzIHBhcnQgb2YgTlNVUkxSZXF1ZXN0LCBidXQgaXQgaXMgbm90IGVuY29kZWQgYnkgV0tOU1VS
TFJlcXVlc3RDcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbi4KLSAgICBlbmNvZGVyIDw8
IHJlc291cmNlUmVxdWVzdC5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJh
Y2tBcnJheSgpOwotICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LnJlcXVlc3RlcigpOwot
ICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LmNhY2hlUG9saWN5KCk7Ci0gICAgZW5jb2Rl
ciA8PCByZXNvdXJjZVJlcXVlc3QuaXNBcHBCb3VuZCgpOwotfQotCi1ib29sIEFyZ3VtZW50Q29k
ZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKERlY29kZXIm
IGRlY29kZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQotewot
ICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVl
c3RJc1ByZXNlbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXJlcXVlc3RJ
c1ByZXNlbnQpIHsKLSAgICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0gV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IGRpY3Rpb25hcnk7Ci0gICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVy
LCBkaWN0aW9uYXJ5KSB8fCAhZGljdGlvbmFyeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYXV0byBuc1VSTFJlcXVlc3QgPSBjcmVhdGVOU1VSTFJlcXVlc3RGcm9tU2VyaWFsaXphYmxl
UmVwcmVzZW50YXRpb24oZGljdGlvbmFyeS5nZXQoKSwgSVBDOjp0b2tlbk51bGxwdHJUeXBlUmVm
KCkpOwotICAgIGlmICghbnNVUkxSZXF1ZXN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBXRUJDT1JFX0FSR1VNRU5UQ09ERVJTX01BQ19ERUNPREVfQURESVRJT05TCi0KLSAgICByZXNv
dXJjZVJlcXVlc3QgPSBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QobnNVUkxSZXF1ZXN0LmdldCgp
KTsKLSAgICAKLSAgICBWZWN0b3I8U3RyaW5nPiByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3BvbnNlQ29u
dGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmVzb3VyY2VSZXF1ZXN0LnNldFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9u
RW5jb2RpbmdGYWxsYmFja0FycmF5KAotICAgICAgICByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlv
bkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkgPiAwID8gcmVzcG9uc2VDb250ZW50RGlzcG9z
aXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMF0gOiBTdHJpbmcoKSwKLSAgICAgICAgcmVzcG9u
c2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpID4gMSA/IHJl
c3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5WzFdIDogU3RyaW5n
KCksCi0gICAgICAgIHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0Fy
cmF5LnNpemUoKSA+IDIgPyByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJh
Y2tBcnJheVsyXSA6IFN0cmluZygpCi0gICAgKTsKLQotICAgIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdDo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVl
c3RlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXNvdXJjZVJlcXVlc3Quc2V0UmVx
dWVzdGVyKHJlcXVlc3Rlcik7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RDYWNoZVBv
bGljeSBjYWNoZVBvbGljeTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNhY2hlUG9saWN5KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc291cmNlUmVxdWVzdC5zZXRDYWNoZVBvbGlj
eShjYWNoZVBvbGljeSk7Ci0KLSAgICBib29sIGlzQXBwQm91bmQ7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShpc0FwcEJvdW5kKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc291cmNl
UmVxdWVzdC5zZXRJc0FwcEJvdW5kKGlzQXBwQm91bmQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZp
Y2F0ZUluZm8pCiB7CiAgICAgZW5jb2RlciA8PCBjZXJ0aWZpY2F0ZUluZm8udHlwZSgpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDIxMGFmMWFi
ZjY5ZDVkYzA4NDMxYzJhMDEzMjEzYzQxMzhiNTliN2EuLmY0MDJmYmI4NGY4ZjM0OTRmY2RmNzBl
OWI4OWMzNDRhNDM0OGFiYzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMS0wMi0yMyAgQnJlbnQgRnVsZ2hhbSAg
PGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTZXJpYWxpemUgTlNVUkxSZXF1ZXN0IChy
YXRoZXIgdGhhbiBDRlVSTFJlcXVlc3QpIGluIElQQworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMTQ1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83
NDUwMDk2Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlciBhbmQgQWxleCBDaHJp
c3RlbnNlbi4KKworICAgICAgICBBZGQgYSBuZXcgdGVzdCB0byBlbnN1cmUgd2UgY2FuIHN1Y2Nl
c3NmdWxseSBsb2FkIFVSTHMgd2l0aCBhY2NlbnRlZCBjaGFyYWN0ZXJzLAorICAgICAgICBhbmQg
dG8gdGVzdCB0aGUgdXBkYXRlZCBJUEMgc2VyaWFsaXphdGlvbiBmb3IgTlNVUkxSZXF1ZXN0Lgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvQS8zMDMvMjQ3LzMwMy8yNDNv
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V0tXZWJWaWV3TG9hZEFQSXMubW06CisgICAgICAgIChURVNUKToKKwogMjAyMS0wMi0yNCAgSm9u
YXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdHNjbXB5
XSBBZGQgZmxhZyBmb3IgY2FsbGVyIHRvIG9wdCBvdXQgb2YgaWRlbnRpZmllciBjb21wdXRhdGlv
bgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dl
YlZpZXdMb2FkQVBJcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V0tXZWJWaWV3TG9hZEFQSXMubW0KaW5kZXggYmVkNTAwZWEzMzk0NWE4MWU2OGQ4ODgzN2ZhOTBh
ZjdjZTU3MjA4YS4uYzZlOGFjNDQ1NjZkNDVmNjI5NmFhOGE4NWZmOTIxZGE1YWE5NGVhYiAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdM
b2FkQVBJcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dL
V2ViVmlld0xvYWRBUElzLm1tCkBAIC0xMzIsMyArMTMyLDQyIEBAIFRFU1QoV0tXZWJWaWV3LCBM
b2FkU2ltdWxhdGVkUmVxdWVzdFVwZGF0ZXNCYWNrRm9yd2FyZExpc3QpCiAgICAgRVhQRUNUX1RS
VUUoIWxpc3QuZm9yd2FyZEl0ZW0pOwogICAgIEVYUEVDVF9XS19TVFJFUShleGFtcGxlVVJMU3Ry
aW5nLCBbbGlzdC5iYWNrSXRlbS5VUkwgYWJzb2x1dGVTdHJpbmddKTsKIH0KKworVEVTVChXS1dl
YlZpZXcsIExvYWRBY2NlbnRlZEZpbGVSZXF1ZXN0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCldKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdE5hdmlnYXRp
b25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxl
Z2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBjb25zdCBVSW50OCBieXRlc1s2XSA9IHsgJ0En
LCAweEMzLCAweEE3LCAweEMzLCAweEEzLCAnbycgfTsKKyAgICBhdXRvIGZpbGVOYW1lID0gYWRv
cHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmJ5dGVzIGxlbmd0aDo2IGVuY29k
aW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSk7CisKKyAgICAvLyBUaGlzIGF2b2lkcyBoYXZpbmcg
dG8gYWRkIHVuaWNvZGUgZmlsZW5hbWVzIHRvIGdpdC4KKyAgICBOU1VSTCAqb3JpZ2luYWxGaWxl
ID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4
dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07
CisgICAgRVhQRUNUX05PVF9OVUxMKG9yaWdpbmFsRmlsZSk7CisKKyAgICBOU1N0cmluZyAqdGVz
dERpcmVjdG9yeVN0cmluZyA9IFtOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5k
aW5nUGF0aENvbXBvbmVudDpbW05TVVVJRCBVVUlEXSBVVUlEU3RyaW5nXV07CisgICAgTlNVUkwg
KnRlc3REaXJlY3RvcnkgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOiB0ZXN0RGlyZWN0b3J5U3Ry
aW5nXTsKKworICAgIE5TU3RyaW5nICp0ZXN0RmlsZVN0cmluZyA9IFtbdGVzdERpcmVjdG9yeVN0
cmluZyBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6ZmlsZU5hbWUuZ2V0KCldIHN0cmlu
Z0J5QXBwZW5kaW5nUGF0aEV4dGVuc2lvbjpAImh0bWwiXTsKKyAgICBOU1VSTCAqdGVzdEZpbGUg
PSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnRlc3RGaWxlU3RyaW5nXTsKKworICAgIGF1dG8gZGVm
YXVsdE1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07CisgICAgW2RlZmF1
bHRNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDp0ZXN0RmlsZSBlcnJvcjpuaWxdOworICAgIFtkZWZh
dWx0TWFuYWdlciByZW1vdmVJdGVtQXRVUkw6dGVzdERpcmVjdG9yeSBlcnJvcjpuaWxdOworCisg
ICAgW2RlZmF1bHRNYW5hZ2VyIGNyZWF0ZURpcmVjdG9yeUF0VVJMOnRlc3REaXJlY3Rvcnkgd2l0
aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOllFUyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjpuaWxdOwor
CisgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgICAgW2RlZmF1bHRNYW5hZ2VyIGNvcHlJdGVt
QXRVUkw6b3JpZ2luYWxGaWxlIHRvVVJMOnRlc3RGaWxlIGVycm9yOiZlcnJvcl07CisgICAgRVhQ
RUNUX05VTEwoZXJyb3IpOworICAgIAorICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VS
TFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdEZpbGVdOworICAgIFt3ZWJWaWV3IGxvYWRGaWxl
UmVxdWVzdDpyZXF1ZXN0IGFsbG93aW5nUmVhZEFjY2Vzc1RvVVJMOnRlc3RGaWxlLlVSTEJ5RGVs
ZXRpbmdMYXN0UGF0aENvbXBvbmVudF07CisgICAgW2RlbGVnYXRlIHdhaXRGb3JEaWRGaW5pc2hO
YXZpZ2F0aW9uXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEod2ViVmlldy5nZXQoKS5fcmVzb3VyY2VE
aXJlY3RvcnlVUkwucGF0aCwgdGVzdEZpbGUuVVJMQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50
LnBhdGgpOworCisgICAgW2RlZmF1bHRNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDp0ZXN0RmlsZSBl
cnJvcjpuaWxdOworICAgIFtkZWZhdWx0TWFuYWdlciByZW1vdmVJdGVtQXRVUkw6dGVzdERpcmVj
dG9yeSBlcnJvcjpuaWxdOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421553</attachid>
            <date>2021-02-25 12:11:27 -0800</date>
            <delta_ts>2021-02-25 18:23:10 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-222145-20210225121126.patch</filename>
            <type>text/plain</type>
            <size>31834</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczNDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGY1ZDJlYzE3MjM2YThkNDQxN2JmODcz
MDBmODFjYjdhZjMxYzQ4ODIuLjY3ZThhZmQ5ZTgzNzU0YWVmMGRlY2Q1OWI1ZDY0ZDYwYWFkNmM1
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDItMjQgIEJyZW50IEZ1bGdoYW0gIDxiZnVs
Z2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVxdWVzdCAocmF0aGVy
IHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MDA5
NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgVVJMV2l0
aERhdGEgZG9lcyBhbiBlYXJseSByZXR1cm4gd2hlbiB0aGUgbGVhZGluZyBjaGFyYWN0ZXIgaW4g
dGhlIFVSTCBpcyAnLycsCisgICAgICAgIHNpZ25pZnlpbmcgYSBmaWxlIHBhdGguIEhvd2V2ZXIs
IFVSTHMgb2YgdGhlIGZvcm0gIi8vY2RuLmRvbWFpbi5jb20iIGFyZSBvZnRlbgorICAgICAgICBl
bmNvdW50ZXJlZCwgYW5kIFJGQyAzOTg2IGRvZXMgbm90IHByb2hpYml0IHRoZW0uIFdlIHNob3Vs
ZCBvbmx5IGRvIGFuIGVhcmx5CisgICAgICAgIHJldHVybiBpZiB0aGUgY2hhcmFjdGVyIGFmdGVy
IHRoZSBpbml0aWFsICcvJyBpcyBub3QgYWxzbyAnLycuCisKKyAgICAgICAgKiB3dGYvY29jb2Ev
TlNVUkxFeHRyYXMubW06CisgICAgICAgIChXVEY6OlVSTFdpdGhEYXRhKToKKwogMjAyMS0wMi0y
NCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHBsYXRmb3Jt
IGVuYWJsZSBmb3Igc2VwYXJhdGVkIG1vZGVsIGludmVzdGlnYXRpb24KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNzE5
NmUyZTA2YTIyOTNlMDFjMTQxYjIyZTU4MzYwOTM3NmM5NTU0OS4uZjAzNGM5NGMwOGM2OGI3ZmU4
NWM0Y2FjOWIzYjU4NzAxZjc5ODZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAyMS0w
Mi0yMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTZXJp
YWxpemUgTlNVUkxSZXF1ZXN0IChyYXRoZXIgdGhhbiBDRlVSTFJlcXVlc3QpIGluIElQQworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMTQ1CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS83NDUwMDk2Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlciBhbmQgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICBUZXN0ZWQgYnkgZXhpc3Rp
bmcgbGF5b3V0IGFuZCBXZWJLaXRBUEkgdGVzdHMuCisKKyAgICAgICAgUmV2aXNlIElQQyBzZXJp
YWxpemF0aW9uIHNvIHRoYXQgTlNVUkxDb25uZWN0aW9uIChtb2Rlcm4pIENvY29hIGJ1aWxkcyBz
ZXJpYWxpemUgdGhlCisgICAgICAgIE5TVVJMUmVxdWVzdCBvYmplY3QsIHJhdGhlciB0aGFuIGJy
aWRnaW5nIHRvIENGVVJMUmVxdWVzdCBhbmQgc2VyaWFsaXppbmcgdGhhdC4gVGhpcworICAgICAg
ICBlbnN1cmVzIHRoYXQgdGhlIGZ1bGwgc2V0IG9mIE5TVVJMUmVxdWVzdCBmZWF0dXJlcyBhcmUg
YWNjdXJhdGVseSByZWNvbnN0aXR1dGVkIG9uIHRoZQorICAgICAgICByZWNlaXZpbmcgc2lkZSBv
ZiB0aGUgY29ubmVjdGlvbi4KKworICAgICAgICBCZWNhdXNlIE5TVVJMIHNlcmlhbGl6YXRpb24g
ZG9lc24ndCBoYW5kbGUgc29tZSBlbmNvZGVkIHBhcmFtZXRlcnMgcHJvcGVybHksIHdlIGltcGxl
bWVudAorICAgICAgICBhbiBhcmNoaXZpbmcgZGVsZWdhdGUgdG8gYXJjaGl2ZSB0aGUgVVJMIGxp
a2Ugd2UgZG8gZm9yIENGVVJMLgorCisgICAgICAgICogU2hhcmVkL0NvY29hL0FyZ3VtZW50Q29k
ZXJzQ29jb2EubW06CisgICAgICAgICgtW1dLU2VjdXJlQ29kaW5nQXJjaGl2aW5nRGVsZWdhdGUg
YXJjaGl2ZXI6d2lsbEVuY29kZU9iamVjdDpdKTogQWRkZWQuCisgICAgICAgICgtW1dLU2VjdXJl
Q29kaW5nQXJjaGl2aW5nRGVsZWdhdGUgdW5hcmNoaXZlcjpkaWREZWNvZGVPYmplY3Q6XSk6IEFk
ZGVkLgorICAgICAgICAoK1tXS0VuY29kZWRVUkwgc3VwcG9ydHNTZWN1cmVDb2RpbmddKTogQWRk
ZWQuCisgICAgICAgICgtW1dLRW5jb2RlZFVSTCBlbmNvZGVXaXRoQ29kZXI6XSk6IEFkZGVkLgor
ICAgICAgICAoLVtXS0VuY29kZWRVUkwgaW5pdFdpdGhDb2RlcjpdKTogQWRkZWQuCisgICAgICAg
ICgtW1dLRW5jb2RlZFVSTCBpbml0V2l0aFVSTDpdKTogQWRkZWQuCisgICAgICAgIChJUEM6OmVu
Y29kZVNlY3VyZUNvZGluZ0ludGVybmFsKTogVXBkYXRlIHRvIHVzZSBuZXcgZGVsZWdhdGUuCisg
ICAgICAgIChJUEM6OmRlY29kZVNlY3VyZUNvZGluZ0ludGVybmFsKTogRGl0dG8uCisgICAgICAg
ICgtW1dLU2VjdXJlQ29kaW5nRm9udEF0dHJpYnV0ZU5vcm1hbGl6ZXIgYXJjaGl2ZXI6d2lsbEVu
Y29kZU9iamVjdDpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzQ29jb2EubW06CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogQWRkIE5TVVJMUmVxdWVz
dCBlbmNvZGluZy4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEpOiBBZGQgTlNVUkxSZXF1ZXN0IGRlY29kaW5n
LgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tOgorICAg
ICAgICAoSVBDOjpjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChJUEM6OmV4dHJhY3REaWN0aW9uYXJ5VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAo
SVBDOjpjcmVhdGVBcmNoaXZlTGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OmNyZWF0ZUNG
VVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChJUEM6OmNyZWF0ZU5TVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNlbnRhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURh
dGEpOiBEZWxldGVkLgorCiAyMDIxLTAyLTI0ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBHZXQgZGVmYXVsdCB2YWx1ZSBpbiB0aGUgVUkgcHJv
Y2VzcyBmb3Igd2hldGhlciBzeW5jaHJvbm91cyBYTUxIdHRwUmVxdWVzdCBhcmUgYWxsb3dlZCBk
dXJpbmcgdW5sb2FkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9OU1VSTEV4dHJh
cy5tbSBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJMRXh0cmFzLm1tCmluZGV4IDIwOWVhNWI4
NjY0YTFiYTMxOTJmOWVjMjM1MzllMzBjZTJjOTdhODIuLmMwMDY0NmJmYmNmNTMzYjcwM2UzMWYy
YjM3NDJmYTAzZGQwZDVhMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJM
RXh0cmFzLm1tCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJMRXh0cmFzLm1tCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE2NCw4ICsxNjQsMTIgQEAgTlNVUkwgKlVSTFdpdGhEYXRhKE5TRGF0YSAqZGF0YSwg
TlNVUkwgKmJhc2VVUkwpCiAgICAgICAgIGNvbnN0IFVJbnQ4ICpieXRlcyA9IHN0YXRpY19jYXN0
PGNvbnN0IFVJbnQ4Kj4oW2RhdGEgYnl0ZXNdKTsKICAgICAgICAgCiAgICAgICAgIC8vIENGVVJM
Q3JlYXRlQWJzb2x1dGVVUkxXaXRoQnl0ZXMgd291bGQgY29tcGxhaW4gdG8gY29uc29sZSBpZiB3
ZSBwYXNzZWQgYSBwYXRoIHRvIGl0LgotICAgICAgICBpZiAoYnl0ZXNbMF0gPT0gJy8nICYmICFi
YXNlVVJMKQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgaWYgKGJ5dGVzWzBdID09
ICcvJyAmJiAhYmFzZVVSTCkgeworICAgICAgICAgICAgLy8gQSBVUkwgc3RhcnRpbmcgd2l0aCAn
Ly8nIGlzIHZhbGlkIChhbiBhdXRob3JpdHkgd2l0aG91dCBhIHNjaGVtZSksIGFuZCBpcyBub3Qg
YSBmaWxlIHBhdGguCisgICAgICAgICAgICAvLyBTbyBvbmx5IHJldHVybiBlYXJseSBpZiB0aGUg
Y2hhcmFjdGVyIGFmdGVyIHRoZSBzbGFzaCBpcyBzb21ldGhpbmcgZWxzZS4KKyAgICAgICAgICAg
IGlmIChsZW5ndGggPT0gMSB8fCBieXRlc1sxXSAhPSAnLycpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gTk9URTogV2UgdXNlIFVU
Ri04IGhlcmUgc2luY2UgdGhpcyBlbmNvZGluZyBpcyB1c2VkIHdoZW4gY29tcHV0aW5nIHN0cmlu
Z3Mgd2hlbiByZXR1cm5pbmcgVVJMIGNvbXBvbmVudHMKICAgICAgICAgLy8gKGUuZyBjYWxscyB0
byBOU1VSTCAtcGF0aCkuIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gaXMgbm90IHRvbGVyYW50IG9m
IGlsbGVnYWwgVVRGLTggc2VxdWVuY2VzLCB3aGljaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvQ29jb2EvQXJndW1lbnRDb2RlcnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0NvY29hL0FyZ3VtZW50Q29kZXJzQ29jb2EubW0KaW5kZXggYmQzYWVjMzFjMzNkYjU3ZjZm
ODIyN2UzNTY5MWFhM2I4NzQwZjg3YS4uODY4NWRiZjg2ZTFkMGZjY2QwYWQzOThlYjdmODAxMTlm
MmQ0YzNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQXJndW1lbnRD
b2RlcnNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9Bcmd1bWVudENv
ZGVyc0NvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCwg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDggQEAKICNpbXBvcnQgPENvcmVUZXh0L0NURm9u
dERlc2NyaXB0b3IuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CiAjaW1w
b3J0IDx3dGYvSGFzaFNldC5oPgorI2ltcG9ydCA8d3RmL2NmL0NGVVJMRXh0cmFzLmg+CisjaW1w
b3J0IDx3dGYvY29jb2EvTlNVUkxFeHRyYXMuaD4KIAogI2lmIFVTRShBUFBLSVQpCiAjaW1wb3J0
IDxXZWJDb3JlL0NvbG9yTWFjLmg+CkBAIC00OSwyOCArNTEsMTExIEBACiAjaW1wb3J0IDxVSUtp
dC9VSUZvbnREZXNjcmlwdG9yLmg+CiAjZW5kaWYKIAotI2lmIEhBVkUoTlNGT05UX1dJVEhfT1BU
SUNBTF9TSVpJTkdfQlVHKQorTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKworQGludGVyZmFjZSBX
S1NlY3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlIDogTlNPYmplY3QgPE5TS2V5ZWRBcmNoaXZl
ckRlbGVnYXRlLCBOU0tleWVkVW5hcmNoaXZlckRlbGVnYXRlPgorQGVuZAogCi1AaW50ZXJmYWNl
IFdLU2VjdXJlQ29kaW5nRm9udEF0dHJpYnV0ZU5vcm1hbGl6ZXIgOiBOU09iamVjdCA8TlNLZXll
ZEFyY2hpdmVyRGVsZWdhdGU+CitAaW50ZXJmYWNlIFdLU2VjdXJlQ29kaW5nVVJMV3JhcHBlciA6
IE5TT2JqZWN0IDxOU1NlY3VyZUNvZGluZz4KKy0gKGluc3RhbmNldHlwZSBfTnVsbGFibGUpaW5p
dFdpdGhVUkw6KE5TVVJMICopd3JhcHBlZFVSTDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgTlNVUkwgKiB3cmFwcGVkVVJMOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gV0tTZWN1
cmVDb2RpbmdGb250QXR0cmlidXRlTm9ybWFsaXplcgorQGltcGxlbWVudGF0aW9uIFdLU2VjdXJl
Q29kaW5nQXJjaGl2aW5nRGVsZWdhdGUKIAotLSAoaWQpYXJjaGl2ZXI6KE5TS2V5ZWRBcmNoaXZl
ciAqKWFyY2hpdmVyIHdpbGxFbmNvZGVPYmplY3Q6KGlkKW9iamVjdAorLSAobnVsbGFibGUgaWQp
YXJjaGl2ZXI6KE5TS2V5ZWRBcmNoaXZlciAqKWFyY2hpdmVyIHdpbGxFbmNvZGVPYmplY3Q6KGlk
KW9iamVjdAogewotICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TRm9udCBjbGFzc11d
KSB7Ci0gICAgICAgIE5TRm9udCAqZm9udCA9IHN0YXRpY19jYXN0PE5TRm9udCAqPihvYmplY3Qp
OworI2lmIEhBVkUoTlNGT05UX1dJVEhfT1BUSUNBTF9TSVpJTkdfQlVHKQorICAgIGlmIChhdXRv
IGZvbnQgPSBkeW5hbWljX29iamNfY2FzdDxOU0ZvbnQ+KG9iamVjdCkpIHsKICAgICAgICAgLy8g
UmVjcmVhdGUgYW55IHNlcmlhbGl6ZWQgZm9udHMgYWZ0ZXIgbm9ybWFsaXppbmcgdGhlCiAgICAg
ICAgIC8vIGZvbnQgYXR0cmlidXRlcyB0byB3b3JrIGFyb3VuZCA8cmRhcjovL3Byb2JsZW0vNTE2
NTc4ODA+LgogICAgICAgICByZXR1cm4gV2ViS2l0Ojpmb250V2l0aEF0dHJpYnV0ZXMoZm9udC5m
b250RGVzY3JpcHRvci5mb250QXR0cmlidXRlcywgMCk7CiAgICAgfQorI2VuZGlmCisKKyAgICBp
ZiAoYXV0byB1bndyYXBwZWRVUkwgPSBkeW5hbWljX29iamNfY2FzdDxOU1VSTD4ob2JqZWN0KSkK
KyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tXS1NlY3VyZUNvZGluZ1VSTFdyYXBwZXIgYWxsb2Nd
IGluaXRXaXRoVVJMOnVud3JhcHBlZFVSTF0pLmF1dG9yZWxlYXNlKCk7CiAKICAgICByZXR1cm4g
b2JqZWN0OwogfQogCistIChpZCBfTnVsbGFibGUpdW5hcmNoaXZlcjooTlNLZXllZFVuYXJjaGl2
ZXIgKil1bmFyY2hpdmVyIGRpZERlY29kZU9iamVjdDooaWQgX051bGxhYmxlKSBOU19SRUxFQVNF
U19BUkdVTUVOVCBvYmplY3QgTlNfUkVUVVJOU19SRVRBSU5FRAoreworICAgIGF1dG8gYWRvcHRl
ZE9iamVjdCA9IGFkb3B0TlMob2JqZWN0KTsKKyAgICBpZiAoYXV0byB3cmFwcGVyID0gZHluYW1p
Y19vYmpjX2Nhc3Q8V0tTZWN1cmVDb2RpbmdVUkxXcmFwcGVyPihhZG9wdGVkT2JqZWN0LmdldCgp
KSkKKyAgICAgICAgcmV0dXJuIHJldGFpblB0cih3cmFwcGVyLndyYXBwZWRVUkwpLmxlYWtSZWYo
KTsKKworICAgIHJldHVybiBhZG9wdGVkT2JqZWN0LmxlYWtSZWYoKTsKK30KKwogQGVuZAogCi0j
ZW5kaWYKK0BpbXBsZW1lbnRhdGlvbiBXS1NlY3VyZUNvZGluZ1VSTFdyYXBwZXIgeworICAgIFJl
dGFpblB0cjxOU1VSTD4gbV93cmFwcGVkVVJMOworfQorCistIChOU1VSTCAqKXdyYXBwZWRVUkwK
K3sKKyAgICByZXR1cm4gbV93cmFwcGVkVVJMLmdldCgpOworfQorCisrIChCT09MKXN1cHBvcnRz
U2VjdXJlQ29kaW5nCit7CisgICAgcmV0dXJuIFlFUzsKK30KKworc3RhdGljIGNvbnN0ZXhwciBO
U1N0cmluZyAqYmFzZVVSTEtleSA9IEAiV0suYmFzZVVSTCI7CisKKy0gKHZvaWQpZW5jb2RlV2l0
aENvZGVyOihOU0NvZGVyICopY29kZXIKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3dyYXBwZWRV
UkwpOworICAgIGF1dG8gYmFzZVVSTCA9IG1fd3JhcHBlZFVSTC5nZXQoKS5iYXNlVVJMOworICAg
IEJPT0wgaGFzQmFzZVVSTCA9ICEhYmFzZVVSTDsKKworICAgIFtjb2RlciBlbmNvZGVWYWx1ZU9m
T2JqQ1R5cGU6ImMiIGF0OiZoYXNCYXNlVVJMXTsKKyAgICBpZiAoaGFzQmFzZVVSTCkKKyAgICAg
ICAgW2NvZGVyIGVuY29kZU9iamVjdDpiYXNlVVJMIGZvcktleTpiYXNlVVJMS2V5XTsKKworICAg
IFdURjo6VVJMQ2hhckJ1ZmZlciB1cmxCeXRlczsKKyAgICBXVEY6OmdldFVSTEJ5dGVzKChfX2Jy
aWRnZSBDRlVSTFJlZiltX3dyYXBwZWRVUkwuZ2V0KCksIHVybEJ5dGVzKTsKKyAgICBbY29kZXIg
ZW5jb2RlQnl0ZXM6dXJsQnl0ZXMuZGF0YSgpIGxlbmd0aDp1cmxCeXRlcy5zaXplKCldOworfQor
CistIChfTnVsbGFibGUgaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29kZXI6KE5TQ29kZXIgKiljb2Rl
cgoreworICAgIGF1dG8gc2VsZlB0ciA9IGFkb3B0TlMoW3N1cGVyIGluaXRdKTsKKyAgICBpZiAo
IXNlbGZQdHIpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBCT09MIGhhc0Jhc2VVUkw7Cisg
ICAgW2NvZGVyIGRlY29kZVZhbHVlT2ZPYmpDVHlwZToiYyIgYXQ6Jmhhc0Jhc2VVUkwgc2l6ZTpz
aXplb2YoaGFzQmFzZVVSTCldOworCisgICAgUmV0YWluUHRyPE5TVVJMPiBiYXNlVVJMOworICAg
IGlmIChoYXNCYXNlVVJMKQorICAgICAgICBiYXNlVVJMID0gKE5TVVJMICopW2NvZGVyIGRlY29k
ZU9iamVjdE9mQ2xhc3M6TlNVUkwuY2xhc3MgZm9yS2V5OmJhc2VVUkxLZXldOworCisgICAgTlNV
SW50ZWdlciBsZW5ndGg7CisgICAgaWYgKGF1dG8gYnl0ZXMgPSAodWludDhfdCAqKVtjb2RlciBk
ZWNvZGVCeXRlc1dpdGhSZXR1cm5lZExlbmd0aDombGVuZ3RoXSkgeworICAgICAgICBtX3dyYXBw
ZWRVUkwgPSBXVEY6OlVSTFdpdGhEYXRhKFtOU0RhdGEgZGF0YVdpdGhCeXRlc05vQ29weTpieXRl
cyBsZW5ndGg6bGVuZ3RoIGZyZWVXaGVuRG9uZTpOT10sIGJhc2VVUkwuZ2V0KCkpOworICAgICAg
ICBpZiAoIW1fd3JhcHBlZFVSTCkKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRl
Y29kZSBOU1VSTCBkdWUgdG8gaW52YWxpZCBlbmNvZGluZyBvZiBsZW5ndGggJWQuIFN1YnN0aXR1
dGluZyBhIGJsYW5rIFVSTCIsIGxlbmd0aCk7CisgICAgfQorCisgICAgaWYgKCFtX3dyYXBwZWRV
UkwpCisgICAgICAgIG1fd3JhcHBlZFVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiIl07CisK
KyAgICByZXR1cm4gc2VsZlB0ci5sZWFrUmVmKCk7Cit9CisKKy0gKF9OdWxsYWJsZSBpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhVUkw6KE5TVVJMICopdXJsCit7CisgICAgaWYgKHNlbGYgPSBbc3VwZXIg
aW5pdF0pCisgICAgICAgIG1fd3JhcHBlZFVSTCA9IHVybDsKKworICAgIHJldHVybiBzZWxmOwor
fQorCitAZW5kCiAKIG5hbWVzcGFjZSBJUEMgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBA
IC0zNDYsMTcgKzQzMSwxMiBAQCBzdGF0aWMgdm9pZCBlbmNvZGVTZWN1cmVDb2RpbmdJbnRlcm5h
bChFbmNvZGVyJiBlbmNvZGVyLCBpZCA8TlNPYmplY3QsIE5TU2VjdXJlQwogewogICAgIGF1dG8g
YXJjaGl2ZXIgPSBhZG9wdE5TKFtbTlNLZXllZEFyY2hpdmVyIGFsbG9jXSBpbml0UmVxdWlyaW5n
U2VjdXJlQ29kaW5nOllFU10pOwogCi0jaWYgSEFWRShOU0ZPTlRfV0lUSF9PUFRJQ0FMX1NJWklO
R19CVUcpCi0gICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS1NlY3VyZUNvZGluZ0ZvbnRB
dHRyaWJ1dGVOb3JtYWxpemVyIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFk
b3B0TlMoW1tXS1NlY3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlIGFsbG9jXSBpbml0XSk7CiAg
ICAgW2FyY2hpdmVyIHNldERlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKLSNlbmRpZgogCiAgICAg
W2FyY2hpdmVyIGVuY29kZU9iamVjdDpvYmplY3QgZm9yS2V5Ok5TS2V5ZWRBcmNoaXZlUm9vdE9i
amVjdEtleV07CiAgICAgW2FyY2hpdmVyIGZpbmlzaEVuY29kaW5nXTsKLQotI2lmIEhBVkUoTlNG
T05UX1dJVEhfT1BUSUNBTF9TSVpJTkdfQlVHKQogICAgIFthcmNoaXZlciBzZXREZWxlZ2F0ZTpu
aWxdOwotI2VuZGlmCiAKICAgICBlbmNvZGUoZW5jb2RlciwgKF9fYnJpZGdlIENGRGF0YVJlZilb
YXJjaGl2ZXIgZW5jb2RlZERhdGFdKTsKIH0KQEAgLTM3Myw4ICs0NTMsMTUgQEAgc3RhdGljIE9w
dGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZVNlY3VyZUNvZGluZ0ludGVybmFsKERlY29kZXIm
IGRlY29kZXIsIE5TQXIKIAogICAgIGF1dG8gdW5hcmNoaXZlciA9IGFkb3B0TlMoW1tOU0tleWVk
VW5hcmNoaXZlciBhbGxvY10gaW5pdEZvclJlYWRpbmdGcm9tRGF0YTooX19icmlkZ2UgTlNEYXRh
ICopZGF0YS5nZXQoKSBlcnJvcjpudWxscHRyXSk7CiAgICAgdW5hcmNoaXZlci5nZXQoKS5kZWNv
ZGluZ0ZhaWx1cmVQb2xpY3kgPSBOU0RlY29kaW5nRmFpbHVyZVBvbGljeVJhaXNlRXhjZXB0aW9u
OworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS1NlY3VyZUNvZGluZ0FyY2hpdmlu
Z0RlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgdW5hcmNoaXZlci5nZXQoKS5kZWxlZ2F0ZSA9
IGRlbGVnYXRlLmdldCgpOworCisgICAgYXV0byBhbGxvd2VkQ2xhc3NTZXQgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlU2V0IGFsbG9jXSBpbml0V2l0aEFycmF5OmFsbG93ZWRDbGFzc2VzXSk7CisgICAg
W2FsbG93ZWRDbGFzc1NldCBhZGRPYmplY3Q6V0tTZWN1cmVDb2RpbmdVUkxXcmFwcGVyLmNsYXNz
XTsKKyAgICAKICAgICBAdHJ5IHsKLSAgICAgICAgaWQgcmVzdWx0ID0gW3VuYXJjaGl2ZXIgZGVj
b2RlT2JqZWN0T2ZDbGFzc2VzOltOU1NldCBzZXRXaXRoQXJyYXk6YWxsb3dlZENsYXNzZXNdIGZv
cktleTpOU0tleWVkQXJjaGl2ZVJvb3RPYmplY3RLZXldOworICAgICAgICBpZCByZXN1bHQgPSBb
dW5hcmNoaXZlciBkZWNvZGVPYmplY3RPZkNsYXNzZXM6YWxsb3dlZENsYXNzU2V0LmdldCgpIGZv
cktleTpOU0tleWVkQXJjaGl2ZVJvb3RPYmplY3RLZXldOwogICAgICAgICBBU1NFUlQoIXJlc3Vs
dCB8fCBbcmVzdWx0IGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woTlNTZWN1cmVDb2Rpbmcp
XSk7CiAgICAgICAgIHJldHVybiB7IHJlc3VsdCB9OwogICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlv
biAqZXhjZXB0aW9uKSB7CkBAIC0zODIsNiArNDY5LDcgQEAgc3RhdGljIE9wdGlvbmFsPFJldGFp
blB0cjxpZD4+IGRlY29kZVNlY3VyZUNvZGluZ0ludGVybmFsKERlY29kZXImIGRlY29kZXIsIE5T
QXIKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9IEBmaW5hbGx5IHsKICAgICAg
ICAgW3VuYXJjaGl2ZXIgZmluaXNoRGVjb2RpbmddOworICAgICAgICB1bmFyY2hpdmVyLmdldCgp
LmRlbGVnYXRlID0gbmlsOwogICAgIH0KIH0KIApAQCAtNTI2LDQgKzYxNCw2IEBAIHRlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8SVBDOjpOU1R5cGU+IHsKIH07CiB9IC8vIG5hbWVzcGFjZSBX
VEYKIAorTlNfQVNTVU1FX05PTk5VTExfRU5ECisKICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENv
ZGVyc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzQ29jb2EubW0KaW5kZXggNzZhZmI3MmZmMmZkNGY5N2I1Y2YwMTMyZWVhOWIzMzdmYTQ0
YWI0My4uMmI2YTc1NWRmNzBmOTE4ZmQwMDQ3YzdiNjcwYjdhNDZkMTY2YjI0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
Q29jb2EubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnQuaD4KICNp
bXBvcnQgPFdlYkNvcmUvRm9udEF0dHJpYnV0ZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4K
ICNpbXBvcnQgPHBhbC9zcGkvY2YvQ29yZVRleHRTUEkuaD4KIAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCkBAIC01NDMsNCArNTQ0LDU5IEBAIE9wdGlvbmFsPEZvbnRQbGF0Zm9ybURhdGE+IEFy
Z3VtZW50Q29kZXI8UmVmPEZvbnQ+Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKERlY29kZXImCiAgICAg
cmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoY3RGb250LmdldCgpLCBzaXplLnZhbHVlKCksIHN5bnRo
ZXRpY0JvbGQudmFsdWUoKSwgc3ludGhldGljT2JsaXF1ZS52YWx1ZSgpLCBvcmllbnRhdGlvbi52
YWx1ZSgpLCB3aWR0aFZhcmlhbnQudmFsdWUoKSwgdGV4dFJlbmRlcmluZ01vZGUudmFsdWUoKSk7
CiB9CiAKK3ZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjplbmNv
ZGVQbGF0Zm9ybURhdGEoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCit7CisgICAgYXV0byByZXF1ZXN0VG9TZXJpYWxpemUg
PSByZXRhaW5QdHIocmVzb3VyY2VSZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9k
eVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSkpOworCisgICAgYm9vbCByZXF1ZXN0
SXNQcmVzZW50ID0gcmVxdWVzdFRvU2VyaWFsaXplOworICAgIGVuY29kZXIgPDwgcmVxdWVzdElz
UHJlc2VudDsKKworICAgIGlmICghcmVxdWVzdElzUHJlc2VudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gV2UgZG9uJ3Qgc2VuZCBIVFRQIGJvZHkgb3ZlciBJUEMgZm9yIGJldHRlciBwZXJm
b3JtYW5jZS4KKyAgICAvLyBBbHNvLCBpdCdzIG5vdCBhbHdheXMgcG9zc2libGUgdG8gZG8sIGFz
IHN0cmVhbXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBpbiBwcm9jZXNzIHRoYXQgZG9lcyBuZXR3b3Jr
aW5nLgorICAgIGlmIChbcmVxdWVzdFRvU2VyaWFsaXplIEhUVFBCb2R5XSB8fCBbcmVxdWVzdFRv
U2VyaWFsaXplIEhUVFBCb2R5U3RyZWFtXSkgeworICAgICAgICBhdXRvIG11dGFibGVSZXF1ZXN0
ID0gYWRvcHROUyhbcmVxdWVzdFRvU2VyaWFsaXplIG11dGFibGVDb3B5XSk7CisgICAgICAgIFtt
dXRhYmxlUmVxdWVzdCBzZXRIVFRQQm9keTpuaWxdOworICAgICAgICBbbXV0YWJsZVJlcXVlc3Qg
c2V0SFRUUEJvZHlTdHJlYW06bmlsXTsKKyAgICAgICAgcmVxdWVzdFRvU2VyaWFsaXplID0gV1RG
TW92ZShtdXRhYmxlUmVxdWVzdCk7CisgICAgfQorCisgICAgSVBDOjplbmNvZGUoZW5jb2Rlciwg
cmVxdWVzdFRvU2VyaWFsaXplLmdldCgpKTsKKworICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1
ZXN0LnJlcXVlc3RlcigpOworICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LmlzQXBwQm91
bmQoKTsKK30KKworYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46
OmRlY29kZVBsYXRmb3JtRGF0YShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlc291cmNlUmVxdWVzdCkKK3sKKyAgICBib29sIHJlcXVlc3RJc1ByZXNlbnQ7Cisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXF1ZXN0SXNQcmVzZW50KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFyZXF1ZXN0SXNQcmVzZW50KSB7CisgICAgICAgIHJlc291cmNl
UmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCgpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBhdXRvIHJlcXVlc3QgPSBJUEM6OmRlY29kZTxOU1VSTFJlcXVlc3Q+
KGRlY29kZXIsIE5TVVJMUmVxdWVzdC5jbGFzcyk7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXF1
ZXN0ZXIgcmVxdWVzdGVyOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVxdWVzdGVyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBpc0FwcEJvdW5kOworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoaXNBcHBCb3VuZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
c291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdChyZXF1ZXN0LT5nZXQoKSk7
CisgICAgcmVzb3VyY2VSZXF1ZXN0LnNldFJlcXVlc3RlcihyZXF1ZXN0ZXIpOworICAgIHJlc291
cmNlUmVxdWVzdC5zZXRJc0FwcEJvdW5kKGlzQXBwQm91bmQpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KaW5kZXggMGY2MDVmYWQ1MjE3MjUxNDEw
ZTI1ZDdiYmM5MWNiMTNjODE0ZTU0NC4uYzU5NTA2OGE2YTRjNzdkMDYxMjgwYWEyNTc0NjRkNjZh
YTNjMTAxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1
bWVudENvZGVyc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzTWFjLm1tCkBAIC00MiwyNDUgKzQyLDE0IEBACiAjaW1wb3J0IDx3dGYvTWFj
aFNlbmRSaWdodC5oPgogI2ltcG9ydCA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+CiAKLSNpZiBVU0Uo
QVBQTEVfSU5URVJOQUxfU0RLKQotI2luY2x1ZGUgPFdlYktpdEFkZGl0aW9ucy9XZWJDb3JlQXJn
dW1lbnRDb2RlcnNNYWNBZGRpdGlvbnMuaD4KLSNlbmRpZgotCiAjaWYgRU5BQkxFKFdJUkVMRVNT
X1BMQVlCQUNLX1RBUkdFVCkKICNpbXBvcnQgPFdlYkNvcmUvTWVkaWFQbGF5YmFja1RhcmdldENv
bnRleHQuaD4KICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgogI2ltcG9ydCA8cGFsL2NvY29hL0FW
Rm91bmRhdGlvblNvZnRMaW5rLmg+CiAjZW5kaWYKIAotI2lmbmRlZiBXRUJDT1JFX0FSR1VNRU5U
Q09ERVJTX01BQ19ERUNPREVfQURESVRJT05TCi0jZGVmaW5lIFdFQkNPUkVfQVJHVU1FTlRDT0RF
UlNfTUFDX0RFQ09ERV9BRERJVElPTlMKLSNlbmRpZgotCi0jaWZuZGVmIFdFQkNPUkVfQVJHVU1F
TlRDT0RFUlNfTUFDX0VOQ09ERV9BRERJVElPTlMKLSNkZWZpbmUgV0VCQ09SRV9BUkdVTUVOVENP
REVSU19NQUNfRU5DT0RFX0FERElUSU9OUwotI2VuZGlmCi0KIG5hbWVzcGFjZSBJUEMgewogCi1z
dGF0aWMgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IGNyZWF0ZVNlcmlhbGl6YWJs
ZVJlcHJlc2VudGF0aW9uKENGSW5kZXggdmVyc2lvbiwgQ0ZUeXBlUmVmKiBvYmplY3RzLCBDRklu
ZGV4IG9iamVjdENvdW50LCBDRkRpY3Rpb25hcnlSZWYgcHJvdG9jb2xQcm9wZXJ0aWVzLCBDRk51
bWJlclJlZiBleHBlY3RlZENvbnRlbnRMZW5ndGgsIENGU3RyaW5nUmVmIG1pbWVUeXBlLCBDRlR5
cGVSZWYgdG9rZW5OdWxsKQotewotICAgIGF1dG8gYXJjaGl2ZUxpc3RBcnJheSA9IGFkb3B0Q0Yo
Q0ZBcnJheUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVBcnJh
eUNhbGxCYWNrcykpOwotCi0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgb2JqZWN0Q291bnQ7
ICsraSkgewotICAgICAgICBDRlR5cGVSZWYgb2JqZWN0ID0gb2JqZWN0c1tpXTsKLSAgICAgICAg
aWYgKG9iamVjdCkgewotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFyY2hpdmVMaXN0
QXJyYXkuZ2V0KCksIG9iamVjdCk7Ci0gICAgICAgICAgICBDRlJlbGVhc2Uob2JqZWN0KTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEFwcGVuZCBvdXIgdG9rZW4gbnVsbCByZXBy
ZXNlbnRhdGlvbi4KLSAgICAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcmNoaXZlTGlzdEFy
cmF5LmdldCgpLCB0b2tlbk51bGwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBkaWN0
aW9uYXJ5ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MpKTsKLQotICAgIGF1dG8gdmVyc2lvbk51bWJlciA9IGFkb3B0Q0Yo
Q0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyQ0ZJbmRleFR5cGUs
ICZ2ZXJzaW9uKSk7Ci0gICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwg
Q0ZTVFIoInZlcnNpb24iKSwgdmVyc2lvbk51bWJlci5nZXQoKSk7Ci0gICAgQ0ZEaWN0aW9uYXJ5
U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIoImFyY2hpdmVMaXN0IiksIGFyY2hpdmVM
aXN0QXJyYXkuZ2V0KCkpOwotCi0gICAgaWYgKHByb3RvY29sUHJvcGVydGllcykgewotICAgICAg
ICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNUUigicHJvdG9jb2xQ
cm9wZXJ0aWVzIiksIHByb3RvY29sUHJvcGVydGllcyk7Ci0gICAgICAgIENGUmVsZWFzZShwcm90
b2NvbFByb3BlcnRpZXMpOwotICAgIH0KLQotICAgIGlmIChleHBlY3RlZENvbnRlbnRMZW5ndGgp
IHsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIo
ImV4cGVjdGVkQ29udGVudExlbmd0aCIpLCBleHBlY3RlZENvbnRlbnRMZW5ndGgpOwotICAgICAg
ICBDRlJlbGVhc2UoZXhwZWN0ZWRDb250ZW50TGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBpZiAobWlt
ZVR5cGUpIHsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwg
Q0ZTVFIoIm1pbWVUeXBlIiksIG1pbWVUeXBlKTsKLSAgICAgICAgQ0ZSZWxlYXNlKG1pbWVUeXBl
KTsKLSAgICB9Ci0KLSAgICBDRkFsbG9jYXRvckRlYWxsb2NhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgb2JqZWN0cyk7Ci0KLSAgICByZXR1cm4gZGljdGlvbmFyeTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVmFsdWVUeXBlPiBib29sIGV4dHJhY3REaWN0aW9uYXJ5VmFsdWUoQ0ZEaWN0aW9uYXJ5
UmVmIGRpY3Rpb25hcnksIENGU3RyaW5nUmVmIGtleSwgVmFsdWVUeXBlKiByZXN1bHQpCi17Ci0g
ICAgYXV0byB1bnR5cGVkVmFsdWUgPSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShkaWN0aW9uYXJ5LCBr
ZXkpOwotICAgIGF1dG8gdmFsdWUgPSBkeW5hbWljX2NmX2Nhc3Q8VmFsdWVUeXBlPih1bnR5cGVk
VmFsdWUpOwotICAgIGlmICh1bnR5cGVkVmFsdWUgJiYgIXZhbHVlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IHZhbHVlOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBjcmVhdGVBcmNoaXZlTGlzdChDRkRpY3Rpb25h
cnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwsIENGSW5kZXgqIHZlcnNp
b24sIENGVHlwZVJlZioqIG9iamVjdHMsIENGSW5kZXgqIG9iamVjdENvdW50LCBDRkRpY3Rpb25h
cnlSZWYqIHByb3RvY29sUHJvcGVydGllcywgQ0ZOdW1iZXJSZWYqIGV4cGVjdGVkQ29udGVudExl
bmd0aCwgQ0ZTdHJpbmdSZWYqIG1pbWVUeXBlKQotewotICAgIGF1dG8gdmVyc2lvbk51bWJlciA9
IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocmVwcmVz
ZW50YXRpb24sIENGU1RSKCJ2ZXJzaW9uIikpKTsKLSAgICBpZiAoIXZlcnNpb25OdW1iZXIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghQ0ZOdW1iZXJHZXRWYWx1ZSh2ZXJzaW9u
TnVtYmVyLCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwgdmVyc2lvbikpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8gYXJjaGl2ZUxpc3RBcnJheSA9IGR5bmFtaWNfY2ZfY2FzdDxDRkFy
cmF5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoImFyY2hp
dmVMaXN0IikpKTsKLSAgICBpZiAoIWFyY2hpdmVMaXN0QXJyYXkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8gYXJjaGl2ZUxpc3RBcnJheUNvdW50ID0gQ0ZBcnJheUdldENvdW50
KGFyY2hpdmVMaXN0QXJyYXkpOwotICAgIGlmICghaXNJbkJvdW5kczxzaXplX3Q+KGFyY2hpdmVM
aXN0QXJyYXlDb3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gYnVmZmVy
U2l6ZSA9IENoZWNrZWRTaXplKHNpemVvZihDRlR5cGVSZWYpKSAqIHN0YXRpY19jYXN0PHNpemVf
dD4oYXJjaGl2ZUxpc3RBcnJheUNvdW50KTsKLSAgICBpZiAoYnVmZmVyU2l6ZS5oYXNPdmVyZmxv
d2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZXh0cmFjdERpY3Rpb25h
cnlWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoInByb3RvY29sUHJvcGVydGllcyIpLCBwcm90
b2NvbFByb3BlcnRpZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFleHRyYWN0
RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigiZXhwZWN0ZWRDb250ZW50TGVu
Z3RoIiksIGV4cGVjdGVkQ29udGVudExlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoIWV4dHJhY3REaWN0aW9uYXJ5VmFsdWUocmVwcmVzZW50YXRpb24sIENGU1RSKCJtaW1l
VHlwZSIpLCBtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICpvYmplY3RD
b3VudCA9IGFyY2hpdmVMaXN0QXJyYXlDb3VudDsKLSAgICAqb2JqZWN0cyA9IHN0YXRpY19jYXN0
PENGVHlwZVJlZio+KGZhc3RNYWxsb2MoYnVmZmVyU2l6ZS51bnNhZmVHZXQoKSkpOwotCi0gICAg
Q0ZBcnJheUdldFZhbHVlcyhhcmNoaXZlTGlzdEFycmF5LCBDRlJhbmdlTWFrZSgwLCAqb2JqZWN0
Q291bnQpLCAqb2JqZWN0cyk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgKm9iamVjdENv
dW50OyArK2kpIHsKLSAgICAgICAgaWYgKCgqb2JqZWN0cylbaV0gPT0gdG9rZW5OdWxsKQotICAg
ICAgICAgICAgKCpvYmplY3RzKVtpXSA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjcmVhdGVTZXJpYWxp
emFibGVSZXByZXNlbnRhdGlvbihDRlVSTFJlcXVlc3RSZWYgY2ZSZXF1ZXN0LCBDRlR5cGVSZWYg
dG9rZW5OdWxsKQotewotICAgIENGSW5kZXggdmVyc2lvbjsKLSAgICBDRlR5cGVSZWYqIG9iamVj
dHM7Ci0gICAgQ0ZJbmRleCBvYmplY3RDb3VudDsKLSAgICBDRkRpY3Rpb25hcnlSZWYgcHJvdG9j
b2xQcm9wZXJ0aWVzOwotCi0gICAgLy8gRklYTUUgKDEyODg5NTE4KTogRG8gbm90IHNlcmlhbGl6
ZSBIVFRQIG1lc3NhZ2UgYm9keS4KLSAgICAvLyAxLiBJdCBjYW4gYmUgbGFyZ2UgYW5kIHRodXMg
Y29zdGx5IHRvIHNlbmQgYWNyb3NzLgotICAgIC8vIDIuIEl0IGlzIG1pc2xlYWRpbmcgdG8gcHJv
dmlkZSBhIGJvZHkgd2l0aCBzb21lIHJlcXVlc3RzLCB3aGlsZSBvdGhlcnMgdXNlIGJvZHkgc3Ry
ZWFtcywgd2hpY2ggY2Fubm90IGJlIHNlcmlhbGl6ZWQgYXQgYWxsLgotCi0gICAgX0NGVVJMUmVx
dWVzdENyZWF0ZUFyY2hpdmVMaXN0KGtDRkFsbG9jYXRvckRlZmF1bHQsIGNmUmVxdWVzdCwgJnZl
cnNpb24sICZvYmplY3RzLCAmb2JqZWN0Q291bnQsICZwcm90b2NvbFByb3BlcnRpZXMpOwotCi0g
ICAgLy8gVGhpcyB3aWxsIGRlYWxsb2NhdGUgdGhlIHBhc3NlZCBpbiBhcmd1bWVudHMuCi0gICAg
cmV0dXJuIGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKHZlcnNpb24sIG9iamVjdHMs
IG9iamVjdENvdW50LCBwcm90b2NvbFByb3BlcnRpZXMsIG51bGxwdHIsIG51bGxwdHIsIHRva2Vu
TnVsbCk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZVUkxSZXF1ZXN0UmVmPiBjcmVhdGVDRlVS
TFJlcXVlc3RGcm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oQ0ZEaWN0aW9uYXJ5UmVmIHJl
cHJlc2VudGF0aW9uLCBDRlR5cGVSZWYgdG9rZW5OdWxsKQotewotICAgIENGSW5kZXggdmVyc2lv
bjsKLSAgICBDRlR5cGVSZWYqIG9iamVjdHM7Ci0gICAgQ0ZJbmRleCBvYmplY3RDb3VudDsKLSAg
ICBDRkRpY3Rpb25hcnlSZWYgcHJvdG9jb2xQcm9wZXJ0aWVzOwotCi0gICAgaWYgKCFjcmVhdGVB
cmNoaXZlTGlzdChyZXByZXNlbnRhdGlvbiwgdG9rZW5OdWxsLCAmdmVyc2lvbiwgJm9iamVjdHMs
ICZvYmplY3RDb3VudCwgJnByb3RvY29sUHJvcGVydGllcywgbnVsbHB0ciwgbnVsbHB0cikpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBjZlJlcXVlc3QgPSBhZG9wdENGKF9D
RlVSTFJlcXVlc3RDcmVhdGVGcm9tQXJjaGl2ZUxpc3Qoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdmVy
c2lvbiwgb2JqZWN0cywgb2JqZWN0Q291bnQsIHByb3RvY29sUHJvcGVydGllcykpOwotICAgIGZh
c3RGcmVlKG9iamVjdHMpOwotICAgIHJldHVybiBXVEZNb3ZlKGNmUmVxdWVzdCk7Ci19Ci0KLXN0
YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNl
bnRhdGlvbihOU1VSTFJlcXVlc3QgKnJlcXVlc3QsIENGVHlwZVJlZiB0b2tlbk51bGwpCi17Ci0g
ICAgcmV0dXJuIGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKFtyZXF1ZXN0IF9DRlVS
TFJlcXVlc3RdLCB0b2tlbk51bGwpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPE5TVVJMUmVxdWVz
dD4gY3JlYXRlTlNVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKENGRGlj
dGlvbmFyeVJlZiByZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRva2VuTnVsbCkKLXsKLSAgICBh
dXRvIGNmUmVxdWVzdCA9IGNyZWF0ZUNGVVJMUmVxdWVzdEZyb21TZXJpYWxpemFibGVSZXByZXNl
bnRhdGlvbihyZXByZXNlbnRhdGlvbiwgdG9rZW5OdWxsKTsKLSAgICBpZiAoIWNmUmVxdWVzdCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgcmV0dXJuIGFkb3B0TlMoW1tOU1VS
TFJlcXVlc3QgYWxsb2NdIF9pbml0V2l0aENGVVJMUmVxdWVzdDpjZlJlcXVlc3QuZ2V0KCldKTsK
LX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmVuY29k
ZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlc291cmNlUmVxdWVzdCkKLXsKLSAgICBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiBy
ZXF1ZXN0VG9TZXJpYWxpemUgPSByZXNvdXJjZVJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6
OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KTsKLQotICAgIGJvb2wg
cmVxdWVzdElzUHJlc2VudCA9IHJlcXVlc3RUb1NlcmlhbGl6ZTsKLSAgICBlbmNvZGVyIDw8IHJl
cXVlc3RJc1ByZXNlbnQ7Ci0KLSAgICBpZiAoIXJlcXVlc3RJc1ByZXNlbnQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFdlIGRvbid0IHNlbmQgSFRUUCBib2R5IG92ZXIgSVBDIGZvciBiZXR0
ZXIgcGVyZm9ybWFuY2UuCi0gICAgLy8gQWxzbywgaXQncyBub3QgYWx3YXlzIHBvc3NpYmxlIHRv
IGRvLCBhcyBzdHJlYW1zIGNhbiBvbmx5IGJlIGNyZWF0ZWQgaW4gcHJvY2VzcyB0aGF0IGRvZXMg
bmV0d29ya2luZy4KLSAgICBpZiAoW3JlcXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9keV0gfHwgW3Jl
cXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9keVN0cmVhbV0pIHsKLSAgICAgICAgcmVxdWVzdFRvU2Vy
aWFsaXplID0gYWRvcHROUyhbcmVxdWVzdFRvU2VyaWFsaXplIG11dGFibGVDb3B5XSk7Ci0gICAg
ICAgIFsoTlNNdXRhYmxlVVJMUmVxdWVzdCAqKXJlcXVlc3RUb1NlcmlhbGl6ZSBzZXRIVFRQQm9k
eTpuaWxdOwotICAgICAgICBbKE5TTXV0YWJsZVVSTFJlcXVlc3QgKilyZXF1ZXN0VG9TZXJpYWxp
emUgc2V0SFRUUEJvZHlTdHJlYW06bmlsXTsKLSAgICB9Ci0KLSAgICBhdXRvIGRpY3Rpb25hcnkg
PSBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihyZXF1ZXN0VG9TZXJpYWxpemUuZ2V0
KCksIElQQzo6dG9rZW5OdWxscHRyVHlwZVJlZigpKTsKLSAgICBJUEM6OmVuY29kZShlbmNvZGVy
LCBkaWN0aW9uYXJ5LmdldCgpKTsKLQotICAgIFdFQkNPUkVfQVJHVU1FTlRDT0RFUlNfTUFDX0VO
Q09ERV9BRERJVElPTlMKLQotICAgIC8vIFRoZSBmYWxsYmFjayBhcnJheSBpcyBwYXJ0IG9mIE5T
VVJMUmVxdWVzdCwgYnV0IGl0IGlzIG5vdCBlbmNvZGVkIGJ5IFdLTlNVUkxSZXF1ZXN0Q3JlYXRl
U2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24uCi0gICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVl
c3QucmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkoKTsKLSAg
ICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXF1ZXN0ZXIoKTsKLSAgICBlbmNvZGVyIDw8
IHJlc291cmNlUmVxdWVzdC5jYWNoZVBvbGljeSgpOwotICAgIGVuY29kZXIgPDwgcmVzb3VyY2VS
ZXF1ZXN0LmlzQXBwQm91bmQoKTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0YShEZWNvZGVyJiBkZWNvZGVyLCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKLXsKLSAgICBib29sIHJlcXVl
c3RJc1ByZXNlbnQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXF1ZXN0SXNQcmVzZW50KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFyZXF1ZXN0SXNQcmVzZW50KSB7Ci0g
ICAgICAgIHJlc291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCgpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBkaWN0aW9uYXJ5OwotICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgZGljdGlvbmFyeSkg
fHwgIWRpY3Rpb25hcnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gbnNVUkxS
ZXF1ZXN0ID0gY3JlYXRlTlNVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9u
KGRpY3Rpb25hcnkuZ2V0KCksIElQQzo6dG9rZW5OdWxscHRyVHlwZVJlZigpKTsKLSAgICBpZiAo
IW5zVVJMUmVxdWVzdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV0VCQ09SRV9BUkdV
TUVOVENPREVSU19NQUNfREVDT0RFX0FERElUSU9OUwotCi0gICAgcmVzb3VyY2VSZXF1ZXN0ID0g
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KG5zVVJMUmVxdWVzdC5nZXQoKSk7Ci0gICAgCi0gICAg
VmVjdG9yPFN0cmluZz4gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXNwb25zZUNvbnRlbnREaXNwb3NpdGlv
bkVuY29kaW5nRmFsbGJhY2tBcnJheSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
c291cmNlUmVxdWVzdC5zZXRSZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJh
Y2tBcnJheSgKLSAgICAgICAgcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxi
YWNrQXJyYXkuc2l6ZSgpID4gMCA/IHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdG
YWxsYmFja0FycmF5WzBdIDogU3RyaW5nKCksCi0gICAgICAgIHJlc3BvbnNlQ29udGVudERpc3Bv
c2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnNpemUoKSA+IDEgPyByZXNwb25zZUNvbnRlbnRE
aXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVsxXSA6IFN0cmluZygpLAotICAgICAgICBy
ZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkgPiAy
ID8gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXlbMl0gOiBT
dHJpbmcoKQotICAgICk7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3Rl
ciByZXF1ZXN0ZXI7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXF1ZXN0ZXIpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzb3VyY2VSZXF1ZXN0LnNldFJlcXVlc3RlcihyZXF1ZXN0
ZXIpOwotCi0gICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVQb2xp
Y3k7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjYWNoZVBvbGljeSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXNvdXJjZVJlcXVlc3Quc2V0Q2FjaGVQb2xpY3koY2FjaGVQb2xpY3kp
OwotCi0gICAgYm9vbCBpc0FwcEJvdW5kOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNBcHBC
b3VuZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXNvdXJjZVJlcXVlc3Quc2V0SXNB
cHBCb3VuZChpc0FwcEJvdW5kKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIEFyZ3Vt
ZW50Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQogewog
ICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGVJbmZvLnR5cGUoKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMTBhZjFhYmY2OWQ1ZGMwODQzMWMy
YTAxMzIxM2M0MTM4YjU5YjdhLi5mNDAyZmJiODRmOGYzNDk0ZmNkZjcwZTliODljMzQ0YTQzNDhh
YmM5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTggQEAKKzIwMjEtMDItMjMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVxdWVzdCAocmF0aGVyIHRoYW4gQ0ZV
UkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MDA5NjM+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAg
ICAgICAgQWRkIGEgbmV3IHRlc3QgdG8gZW5zdXJlIHdlIGNhbiBzdWNjZXNzZnVsbHkgbG9hZCBV
UkxzIHdpdGggYWNjZW50ZWQgY2hhcmFjdGVycywKKyAgICAgICAgYW5kIHRvIHRlc3QgdGhlIHVw
ZGF0ZWQgSVBDIHNlcmlhbGl6YXRpb24gZm9yIE5TVVJMUmVxdWVzdC4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0EvMzAzLzI0Ny8zMDMvMjQzby5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0xvYWRB
UElzLm1tOgorICAgICAgICAoVEVTVCk6CisKIDIwMjEtMDItMjQgIEpvbmF0aGFuIEJlZGFyZCAg
PGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFt3ZWJraXRzY21weV0gQWRkIGZsYWcgZm9y
IGNhbGxlciB0byBvcHQgb3V0IG9mIGlkZW50aWZpZXIgY29tcHV0YXRpb24KZGlmZiAtLWdpdCBh
L1Rvb2xzL01pbmlCcm93c2VyL01pbmlCcm93c2VyLnhjb2RlcHJvai94Y3NoYXJlZGRhdGEveGNz
Y2hlbWVzL01pbmlCcm93c2VyLnhjc2NoZW1lIGIvVG9vbHMvTWluaUJyb3dzZXIvTWluaUJyb3dz
ZXIueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvTWluaUJyb3dzZXIueGNzY2hlbWUK
aW5kZXggMDNjNWIyMWE4ZTBjYmVlMzUzMjE0YWIzMzFlNDdhODQ0ZTVkN2I5ZC4uNmNjMzIxYzgz
OTU5MjRlYzNlM2FjOWUxODAzYmM2MDhlYjJlZGZlNCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJy
b3dzZXIvTWluaUJyb3dzZXIueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvTWluaUJy
b3dzZXIueGNzY2hlbWUKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvTWluaUJyb3dzZXIueGNvZGVw
cm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvTWluaUJyb3dzZXIueGNzY2hlbWUKQEAgLTM0LDYg
KzM0LDggQEAKICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJEZWJ1ZyIKICAgICAgIHNlbGVj
dGVkRGVidWdnZXJJZGVudGlmaWVyID0gIlhjb2RlLkRlYnVnZ2VyRm91bmRhdGlvbi5EZWJ1Z2dl
ci5MTERCIgogICAgICAgc2VsZWN0ZWRMYXVuY2hlcklkZW50aWZpZXIgPSAiWGNvZGUuRGVidWdn
ZXJGb3VuZGF0aW9uLkxhdW5jaGVyLkxMREIiCisgICAgICBlbmFibGVBZGRyZXNzU2FuaXRpemVy
ID0gIllFUyIKKyAgICAgIGVuYWJsZUFTYW5TdGFja1VzZUFmdGVyUmV0dXJuID0gIllFUyIKICAg
ICAgIGxhdW5jaFN0eWxlID0gIjAiCiAgICAgICB1c2VDdXN0b21Xb3JraW5nRGlyZWN0b3J5ID0g
Ik5PIgogICAgICAgaWdub3Jlc1BlcnNpc3RlbnRTdGF0ZU9uTGF1bmNoID0gIk5PIgpAQCAtNTAs
NiArNTIsMTggQEAKICAgICAgICAgICAgIFJlZmVyZW5jZWRDb250YWluZXIgPSAiY29udGFpbmVy
Ok1pbmlCcm93c2VyLnhjb2RlcHJvaiI+CiAgICAgICAgICA8L0J1aWxkYWJsZVJlZmVyZW5jZT4K
ICAgICAgIDwvQnVpbGRhYmxlUHJvZHVjdFJ1bm5hYmxlPgorICAgICAgPEFkZGl0aW9uYWxPcHRp
b25zPgorICAgICAgICAgPEFkZGl0aW9uYWxPcHRpb24KKyAgICAgICAgICAgIGtleSA9ICJOU1pv
bWJpZUVuYWJsZWQiCisgICAgICAgICAgICB2YWx1ZSA9ICJZRVMiCisgICAgICAgICAgICBpc0Vu
YWJsZWQgPSAiWUVTIj4KKyAgICAgICAgIDwvQWRkaXRpb25hbE9wdGlvbj4KKyAgICAgICAgIDxB
ZGRpdGlvbmFsT3B0aW9uCisgICAgICAgICAgICBrZXkgPSAiTWFsbG9jU2NyaWJibGUiCisgICAg
ICAgICAgICB2YWx1ZSA9ICIiCisgICAgICAgICAgICBpc0VuYWJsZWQgPSAiWUVTIj4KKyAgICAg
ICAgIDwvQWRkaXRpb25hbE9wdGlvbj4KKyAgICAgIDwvQWRkaXRpb25hbE9wdGlvbnM+CiAgICA8
L0xhdW5jaEFjdGlvbj4KICAgIDxQcm9maWxlQWN0aW9uCiAgICAgICBidWlsZENvbmZpZ3VyYXRp
b24gPSAiUmVsZWFzZSIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9UZXN0V2ViS2l0QVBJLnhjc2No
ZW1lIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai94Y3NoYXJl
ZGRhdGEveGNzY2hlbWVzL1Rlc3RXZWJLaXRBUEkueGNzY2hlbWUKaW5kZXggNWY1ZWMyZTRhZWMz
OWVkYzM5ZmM3Zjg1YzdkOTY3ZTVjNDk0Njk0ZS4uNDZmOTE0Yjk2N2UwNDk3NzY3ZmI5MjE0ZjJi
YTJlZmMxODM3YTFmNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1Rlc3RXZWJLaXRBUEkueGNzY2hl
bWUKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai94Y3No
YXJlZGRhdGEveGNzY2hlbWVzL1Rlc3RXZWJLaXRBUEkueGNzY2hlbWUKQEAgLTM0LDYgKzM0LDcg
QEAKICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJEZWJ1ZyIKICAgICAgIHNlbGVjdGVkRGVi
dWdnZXJJZGVudGlmaWVyID0gIlhjb2RlLkRlYnVnZ2VyRm91bmRhdGlvbi5EZWJ1Z2dlci5MTERC
IgogICAgICAgc2VsZWN0ZWRMYXVuY2hlcklkZW50aWZpZXIgPSAiWGNvZGUuRGVidWdnZXJGb3Vu
ZGF0aW9uLkxhdW5jaGVyLkxMREIiCisgICAgICBlbmFibGVBZGRyZXNzU2FuaXRpemVyID0gIllF
UyIKICAgICAgIGxhdW5jaFN0eWxlID0gIjAiCiAgICAgICB1c2VDdXN0b21Xb3JraW5nRGlyZWN0
b3J5ID0gIk5PIgogICAgICAgaWdub3Jlc1BlcnNpc3RlbnRTdGF0ZU9uTGF1bmNoID0gIk5PIgpA
QCAtNTAsNiArNTEsMTIgQEAKICAgICAgICAgICAgIFJlZmVyZW5jZWRDb250YWluZXIgPSAiY29u
dGFpbmVyOlRlc3RXZWJLaXRBUEkueGNvZGVwcm9qIj4KICAgICAgICAgIDwvQnVpbGRhYmxlUmVm
ZXJlbmNlPgogICAgICAgPC9CdWlsZGFibGVQcm9kdWN0UnVubmFibGU+CisgICAgICA8Q29tbWFu
ZExpbmVBcmd1bWVudHM+CisgICAgICAgICA8Q29tbWFuZExpbmVBcmd1bWVudAorICAgICAgICAg
ICAgYXJndW1lbnQgPSAiLS1ndGVzdF9maWx0ZXI9V0tXZWJWaWV3LkxvYWRTaW11bGF0ZWRSZXF1
ZXN0VXNpbmdCYXNlVVJMUmVzcG9uc2VIVE1MU3RyaW5nIgorICAgICAgICAgICAgaXNFbmFibGVk
ID0gIllFUyI+CisgICAgICAgICA8L0NvbW1hbmRMaW5lQXJndW1lbnQ+CisgICAgICA8L0NvbW1h
bmRMaW5lQXJndW1lbnRzPgogICAgPC9MYXVuY2hBY3Rpb24+CiAgICA8UHJvZmlsZUFjdGlvbgog
ICAgICAgYnVpbGRDb25maWd1cmF0aW9uID0gIlJlbGVhc2UiCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0xvYWRBUElzLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdMb2FkQVBJcy5tbQpp
bmRleCBiZWQ1MDBlYTMzOTQ1YTgxZTY4ZDg4ODM3ZmE5MGFmN2NlNTcyMDhhLi4wY2M3YTI2NGFh
ZWRjZDUwYjc2YTAyNTUxYTQ5MWRlZjllOGRhYjQ4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0xvYWRBUElzLm1tCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3TG9hZEFQSXMubW0KQEAg
LTEzMiwzICsxMzIsNTYgQEAgVEVTVChXS1dlYlZpZXcsIExvYWRTaW11bGF0ZWRSZXF1ZXN0VXBk
YXRlc0JhY2tGb3J3YXJkTGlzdCkKICAgICBFWFBFQ1RfVFJVRSghbGlzdC5mb3J3YXJkSXRlbSk7
CiAgICAgRVhQRUNUX1dLX1NUUkVRKGV4YW1wbGVVUkxTdHJpbmcsIFtsaXN0LmJhY2tJdGVtLlVS
TCBhYnNvbHV0ZVN0cmluZ10pOwogfQorCitURVNUKFdLV2ViVmlldywgTG9hZEFjY2VudGVkRmls
ZVJlcXVlc3QpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKV0pOworCisgICAgYXV0
byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0TmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0
XSk7CisgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsK
KworICAgIGNvbnN0IFVJbnQ4IGJ5dGVzWzZdID0geyAnQScsIDB4QzMsIDB4QTcsIDB4QzMsIDB4
QTMsICdvJyB9OworICAgIGF1dG8gZmlsZU5hbWUgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2Nd
IGluaXRXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOjYgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmddKTsKKworICAgIC8vIFRoaXMgYXZvaWRzIGhhdmluZyB0byBhZGQgdW5pY29kZSBmaWxlbmFt
ZXMgdG8gZ2l0LgorICAgIE5TVVJMICpvcmlnaW5hbEZpbGUgPSBbW05TQnVuZGxlIG1haW5CdW5k
bGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGly
ZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKyAgICBFWFBFQ1RfTk9UX05VTEwo
b3JpZ2luYWxGaWxlKTsKKworICAgIE5TU3RyaW5nICp0ZXN0RGlyZWN0b3J5U3RyaW5nID0gW05T
VGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OltbTlNV
VUlEIFVVSURdIFVVSURTdHJpbmddXTsKKyAgICBOU1VSTCAqdGVzdERpcmVjdG9yeSA9IFtOU1VS
TCBmaWxlVVJMV2l0aFBhdGg6IHRlc3REaXJlY3RvcnlTdHJpbmddOworCisgICAgTlNTdHJpbmcg
KnRlc3RGaWxlU3RyaW5nID0gW1t0ZXN0RGlyZWN0b3J5U3RyaW5nIHN0cmluZ0J5QXBwZW5kaW5n
UGF0aENvbXBvbmVudDpmaWxlTmFtZS5nZXQoKV0gc3RyaW5nQnlBcHBlbmRpbmdQYXRoRXh0ZW5z
aW9uOkAiaHRtbCJdOworICAgIE5TVVJMICp0ZXN0RmlsZSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBh
dGg6dGVzdEZpbGVTdHJpbmddOworCisgICAgYXV0byBkZWZhdWx0TWFuYWdlciA9IFtOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKKyAgICBbZGVmYXVsdE1hbmFnZXIgcmVtb3ZlSXRlbUF0
VVJMOnRlc3RGaWxlIGVycm9yOm5pbF07CisgICAgW2RlZmF1bHRNYW5hZ2VyIHJlbW92ZUl0ZW1B
dFVSTDp0ZXN0RGlyZWN0b3J5IGVycm9yOm5pbF07CisKKyAgICBbZGVmYXVsdE1hbmFnZXIgY3Jl
YXRlRGlyZWN0b3J5QXRVUkw6dGVzdERpcmVjdG9yeSB3aXRoSW50ZXJtZWRpYXRlRGlyZWN0b3Jp
ZXM6WUVTIGF0dHJpYnV0ZXM6bmlsIGVycm9yOm5pbF07CisKKyAgICBOU0Vycm9yICplcnJvciA9
IG5pbDsKKyAgICBbZGVmYXVsdE1hbmFnZXIgY29weUl0ZW1BdFVSTDpvcmlnaW5hbEZpbGUgdG9V
Ukw6dGVzdEZpbGUgZXJyb3I6JmVycm9yXTsKKyAgICBFWFBFQ1RfTlVMTChlcnJvcik7CisgICAg
CisgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDp0ZXN0RmlsZV07CisgICAgW3dlYlZpZXcgbG9hZEZpbGVSZXF1ZXN0OnJlcXVlc3QgYWxsb3dp
bmdSZWFkQWNjZXNzVG9VUkw6dGVzdEZpbGUuVVJMQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50
XTsKKyAgICBbZGVsZWdhdGUgd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIEVYUEVD
VF9XS19TVFJFUSh3ZWJWaWV3LmdldCgpLl9yZXNvdXJjZURpcmVjdG9yeVVSTC5wYXRoLCB0ZXN0
RmlsZS5VUkxCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnQucGF0aCk7CisKKyAgICBbZGVmYXVs
dE1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOnRlc3RGaWxlIGVycm9yOm5pbF07CisgICAgW2RlZmF1
bHRNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDp0ZXN0RGlyZWN0b3J5IGVycm9yOm5pbF07Cit9CisK
K1RFU1QoV0tXZWJWaWV3LCBMb2FkU2ltdWxhdGVkUmVxdWVzdFVzaW5nQmFzZVVSTFJlc3BvbnNl
SFRNTFN0cmluZykKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisKKyAgICBh
dXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGlu
aXRdKTsKKyAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCld
OworCisgICAgYXV0byB0ZXN0VVJMID0gYWRvcHROUyhbW05TVVJMIGFsbG9jXSBpbml0V2l0aFN0
cmluZzpAInN1YmRvbWFpbiIgcmVsYXRpdmVUb1VSTDpleGFtcGxlVVJMXSk7CisgICAgTlNVUkxS
ZXF1ZXN0ICpsb2FkUmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVS
TC5nZXQoKV07CisKKyAgICBbd2ViVmlldyBsb2FkU2ltdWxhdGVkUmVxdWVzdDpsb2FkUmVxdWVz
dCB3aXRoUmVzcG9uc2VIVE1MU3RyaW5nOmh0bWxTdHJpbmddOworICAgIFtkZWxlZ2F0ZSB3YWl0
Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421592</attachid>
            <date>2021-02-25 18:23:13 -0800</date>
            <delta_ts>2021-02-25 21:06:53 -0800</delta_ts>
            <desc>Patch to address Blob test</desc>
            <filename>bug-222145-20210225182312.patch</filename>
            <type>text/plain</type>
            <size>22623</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczNDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDcxOTZlMmUwNmEyMjkzZTAx
YzE0MWIyMmU1ODM2MDkzNzZjOTU1NDkuLmYwMzRjOTRjMDhjNjhiN2ZlODVjNGNhYzliM2I1ODcw
MWY3OTg2ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMjEtMDItMjMgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2VyaWFsaXplIE5TVVJMUmVx
dWVzdCAocmF0aGVyIHRoYW4gQ0ZVUkxSZXF1ZXN0KSBpbiBJUEMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjE0NQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzQ1MDA5NjM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIEFs
ZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5nIGxheW91dCBhbmQg
V2ViS2l0QVBJIHRlc3RzLgorCisgICAgICAgIFJldmlzZSBJUEMgc2VyaWFsaXphdGlvbiBzbyB0
aGF0IE5TVVJMQ29ubmVjdGlvbiAobW9kZXJuKSBDb2NvYSBidWlsZHMgc2VyaWFsaXplIHRoZQor
ICAgICAgICBOU1VSTFJlcXVlc3Qgb2JqZWN0LCByYXRoZXIgdGhhbiBicmlkZ2luZyB0byBDRlVS
TFJlcXVlc3QgYW5kIHNlcmlhbGl6aW5nIHRoYXQuIFRoaXMKKyAgICAgICAgZW5zdXJlcyB0aGF0
IHRoZSBmdWxsIHNldCBvZiBOU1VSTFJlcXVlc3QgZmVhdHVyZXMgYXJlIGFjY3VyYXRlbHkgcmVj
b25zdGl0dXRlZCBvbiB0aGUKKyAgICAgICAgcmVjZWl2aW5nIHNpZGUgb2YgdGhlIGNvbm5lY3Rp
b24uCisKKyAgICAgICAgQmVjYXVzZSBOU1VSTCBzZXJpYWxpemF0aW9uIGRvZXNuJ3QgaGFuZGxl
IHNvbWUgZW5jb2RlZCBwYXJhbWV0ZXJzIHByb3Blcmx5LCB3ZSBpbXBsZW1lbnQKKyAgICAgICAg
YW4gYXJjaGl2aW5nIGRlbGVnYXRlIHRvIGFyY2hpdmUgdGhlIFVSTCBsaWtlIHdlIGRvIGZvciBD
RlVSTC4KKworICAgICAgICAqIFNoYXJlZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tOgor
ICAgICAgICAoLVtXS1NlY3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlIGFyY2hpdmVyOndpbGxF
bmNvZGVPYmplY3Q6XSk6IEFkZGVkLgorICAgICAgICAoLVtXS1NlY3VyZUNvZGluZ0FyY2hpdmlu
Z0RlbGVnYXRlIHVuYXJjaGl2ZXI6ZGlkRGVjb2RlT2JqZWN0Ol0pOiBBZGRlZC4KKyAgICAgICAg
KCtbV0tFbmNvZGVkVVJMIHN1cHBvcnRzU2VjdXJlQ29kaW5nXSk6IEFkZGVkLgorICAgICAgICAo
LVtXS0VuY29kZWRVUkwgZW5jb2RlV2l0aENvZGVyOl0pOiBBZGRlZC4KKyAgICAgICAgKC1bV0tF
bmNvZGVkVVJMIGluaXRXaXRoQ29kZXI6XSk6IEFkZGVkLgorICAgICAgICAoLVtXS0VuY29kZWRV
UkwgaW5pdFdpdGhVUkw6XSk6IEFkZGVkLgorICAgICAgICAoSVBDOjplbmNvZGVTZWN1cmVDb2Rp
bmdJbnRlcm5hbCk6IFVwZGF0ZSB0byB1c2UgbmV3IGRlbGVnYXRlLgorICAgICAgICAoSVBDOjpk
ZWNvZGVTZWN1cmVDb2RpbmdJbnRlcm5hbCk6IERpdHRvLgorICAgICAgICAoLVtXS1NlY3VyZUNv
ZGluZ0ZvbnRBdHRyaWJ1dGVOb3JtYWxpemVyIGFyY2hpdmVyOndpbGxFbmNvZGVPYmplY3Q6XSk6
IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0Nv
Y29hLm1tOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YSk6IEFkZCBOU1VSTFJlcXVlc3QgZW5jb2RpbmcuCisg
ICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVj
b2RlUGxhdGZvcm1EYXRhKTogQWRkIE5TVVJMUmVxdWVzdCBkZWNvZGluZy4KKyAgICAgICAgKiBT
aGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbToKKyAgICAgICAgKElQQzo6Y3Jl
YXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpl
eHRyYWN0RGljdGlvbmFyeVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6Y3JlYXRlQXJj
aGl2ZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpjcmVhdGVDRlVSTFJlcXVlc3RGcm9t
U2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpjcmVh
dGVOU1VSTFJlcXVlc3RGcm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmVu
Y29kZVBsYXRmb3JtRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKTogRGVsZXRlZC4K
KwogMjAyMS0wMi0yNCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgW2lPU10gR2V0IGRlZmF1bHQgdmFsdWUgaW4gdGhlIFVJIHByb2Nlc3MgZm9yIHdoZXRo
ZXIgc3luY2hyb25vdXMgWE1MSHR0cFJlcXVlc3QgYXJlIGFsbG93ZWQgZHVyaW5nIHVubG9hZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQXJndW1lbnRDb2RlcnNDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0FyZ3VtZW50Q29kZXJzQ29jb2EubW0K
aW5kZXggYmQzYWVjMzFjMzNkYjU3ZjZmODIyN2UzNTY5MWFhM2I4NzQwZjg3YS4uNDI0NWFhZjYy
YjI3M2JiZjI4ZTc4NzY3MjE2MTgyMzk3MTUxZmZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvQ29jb2EvQXJndW1lbnRDb2RlcnNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOCwgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDggQEAK
ICNpbXBvcnQgPENvcmVUZXh0L0NURm9udERlc2NyaXB0b3IuaD4KICNpbXBvcnQgPHd0Zi9CbG9j
a09iakNFeGNlcHRpb25zLmg+CiAjaW1wb3J0IDx3dGYvSGFzaFNldC5oPgorI2ltcG9ydCA8d3Rm
L2NmL0NGVVJMRXh0cmFzLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvTlNVUkxFeHRyYXMuaD4KIAog
I2lmIFVTRShBUFBLSVQpCiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+CkBAIC00OSwyOCAr
NTEsMTExIEBACiAjaW1wb3J0IDxVSUtpdC9VSUZvbnREZXNjcmlwdG9yLmg+CiAjZW5kaWYKIAot
I2lmIEhBVkUoTlNGT05UX1dJVEhfT1BUSUNBTF9TSVpJTkdfQlVHKQorTlNfQVNTVU1FX05PTk5V
TExfQkVHSU4KKworQGludGVyZmFjZSBXS1NlY3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlIDog
TlNPYmplY3QgPE5TS2V5ZWRBcmNoaXZlckRlbGVnYXRlLCBOU0tleWVkVW5hcmNoaXZlckRlbGVn
YXRlPgorQGVuZAogCi1AaW50ZXJmYWNlIFdLU2VjdXJlQ29kaW5nRm9udEF0dHJpYnV0ZU5vcm1h
bGl6ZXIgOiBOU09iamVjdCA8TlNLZXllZEFyY2hpdmVyRGVsZWdhdGU+CitAaW50ZXJmYWNlIFdL
U2VjdXJlQ29kaW5nVVJMV3JhcHBlciA6IE5TT2JqZWN0IDxOU1NlY3VyZUNvZGluZz4KKy0gKGlu
c3RhbmNldHlwZSBfTnVsbGFibGUpaW5pdFdpdGhVUkw6KE5TVVJMICopd3JhcHBlZFVSTDsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNVUkwgKiB3cmFwcGVkVVJMOwogQGVuZAog
Ci1AaW1wbGVtZW50YXRpb24gV0tTZWN1cmVDb2RpbmdGb250QXR0cmlidXRlTm9ybWFsaXplcgor
QGltcGxlbWVudGF0aW9uIFdLU2VjdXJlQ29kaW5nQXJjaGl2aW5nRGVsZWdhdGUKIAotLSAoaWQp
YXJjaGl2ZXI6KE5TS2V5ZWRBcmNoaXZlciAqKWFyY2hpdmVyIHdpbGxFbmNvZGVPYmplY3Q6KGlk
KW9iamVjdAorLSAobnVsbGFibGUgaWQpYXJjaGl2ZXI6KE5TS2V5ZWRBcmNoaXZlciAqKWFyY2hp
dmVyIHdpbGxFbmNvZGVPYmplY3Q6KGlkKW9iamVjdAogewotICAgIGlmIChbb2JqZWN0IGlzS2lu
ZE9mQ2xhc3M6W05TRm9udCBjbGFzc11dKSB7Ci0gICAgICAgIE5TRm9udCAqZm9udCA9IHN0YXRp
Y19jYXN0PE5TRm9udCAqPihvYmplY3QpOworI2lmIEhBVkUoTlNGT05UX1dJVEhfT1BUSUNBTF9T
SVpJTkdfQlVHKQorICAgIGlmIChhdXRvIGZvbnQgPSBkeW5hbWljX29iamNfY2FzdDxOU0ZvbnQ+
KG9iamVjdCkpIHsKICAgICAgICAgLy8gUmVjcmVhdGUgYW55IHNlcmlhbGl6ZWQgZm9udHMgYWZ0
ZXIgbm9ybWFsaXppbmcgdGhlCiAgICAgICAgIC8vIGZvbnQgYXR0cmlidXRlcyB0byB3b3JrIGFy
b3VuZCA8cmRhcjovL3Byb2JsZW0vNTE2NTc4ODA+LgogICAgICAgICByZXR1cm4gV2ViS2l0Ojpm
b250V2l0aEF0dHJpYnV0ZXMoZm9udC5mb250RGVzY3JpcHRvci5mb250QXR0cmlidXRlcywgMCk7
CiAgICAgfQorI2VuZGlmCisKKyAgICBpZiAoYXV0byB1bndyYXBwZWRVUkwgPSBkeW5hbWljX29i
amNfY2FzdDxOU1VSTD4ob2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tXS1NlY3Vy
ZUNvZGluZ1VSTFdyYXBwZXIgYWxsb2NdIGluaXRXaXRoVVJMOnVud3JhcHBlZFVSTF0pLmF1dG9y
ZWxlYXNlKCk7CiAKICAgICByZXR1cm4gb2JqZWN0OwogfQogCistIChpZCBfTnVsbGFibGUpdW5h
cmNoaXZlcjooTlNLZXllZFVuYXJjaGl2ZXIgKil1bmFyY2hpdmVyIGRpZERlY29kZU9iamVjdDoo
aWQgX051bGxhYmxlKSBOU19SRUxFQVNFU19BUkdVTUVOVCBvYmplY3QgTlNfUkVUVVJOU19SRVRB
SU5FRAoreworICAgIGF1dG8gYWRvcHRlZE9iamVjdCA9IGFkb3B0TlMob2JqZWN0KTsKKyAgICBp
ZiAoYXV0byB3cmFwcGVyID0gZHluYW1pY19vYmpjX2Nhc3Q8V0tTZWN1cmVDb2RpbmdVUkxXcmFw
cGVyPihhZG9wdGVkT2JqZWN0LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIHJldGFpblB0cih3cmFw
cGVyLndyYXBwZWRVUkwpLmxlYWtSZWYoKTsKKworICAgIHJldHVybiBhZG9wdGVkT2JqZWN0Lmxl
YWtSZWYoKTsKK30KKwogQGVuZAogCi0jZW5kaWYKK0BpbXBsZW1lbnRhdGlvbiBXS1NlY3VyZUNv
ZGluZ1VSTFdyYXBwZXIgeworICAgIFJldGFpblB0cjxOU1VSTD4gbV93cmFwcGVkVVJMOworfQor
CistIChOU1VSTCAqKXdyYXBwZWRVUkwKK3sKKyAgICByZXR1cm4gbV93cmFwcGVkVVJMLmdldCgp
OworfQorCisrIChCT09MKXN1cHBvcnRzU2VjdXJlQ29kaW5nCit7CisgICAgcmV0dXJuIFlFUzsK
K30KKworc3RhdGljIGNvbnN0ZXhwciBOU1N0cmluZyAqYmFzZVVSTEtleSA9IEAiV0suYmFzZVVS
TCI7CisKKy0gKHZvaWQpZW5jb2RlV2l0aENvZGVyOihOU0NvZGVyICopY29kZXIKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChtX3dyYXBwZWRVUkwpOworICAgIGF1dG8gYmFzZVVSTCA9IG1fd3JhcHBl
ZFVSTC5nZXQoKS5iYXNlVVJMOworICAgIEJPT0wgaGFzQmFzZVVSTCA9ICEhYmFzZVVSTDsKKwor
ICAgIFtjb2RlciBlbmNvZGVWYWx1ZU9mT2JqQ1R5cGU6ImMiIGF0OiZoYXNCYXNlVVJMXTsKKyAg
ICBpZiAoaGFzQmFzZVVSTCkKKyAgICAgICAgW2NvZGVyIGVuY29kZU9iamVjdDpiYXNlVVJMIGZv
cktleTpiYXNlVVJMS2V5XTsKKworICAgIFdURjo6VVJMQ2hhckJ1ZmZlciB1cmxCeXRlczsKKyAg
ICBXVEY6OmdldFVSTEJ5dGVzKChfX2JyaWRnZSBDRlVSTFJlZiltX3dyYXBwZWRVUkwuZ2V0KCks
IHVybEJ5dGVzKTsKKyAgICBbY29kZXIgZW5jb2RlQnl0ZXM6dXJsQnl0ZXMuZGF0YSgpIGxlbmd0
aDp1cmxCeXRlcy5zaXplKCldOworfQorCistIChfTnVsbGFibGUgaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29kZXI6KE5TQ29kZXIgKiljb2RlcgoreworICAgIGF1dG8gc2VsZlB0ciA9IGFkb3B0TlMo
W3N1cGVyIGluaXRdKTsKKyAgICBpZiAoIXNlbGZQdHIpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBCT09MIGhhc0Jhc2VVUkw7CisgICAgW2NvZGVyIGRlY29kZVZhbHVlT2ZPYmpDVHlwZToi
YyIgYXQ6Jmhhc0Jhc2VVUkwgc2l6ZTpzaXplb2YoaGFzQmFzZVVSTCldOworCisgICAgUmV0YWlu
UHRyPE5TVVJMPiBiYXNlVVJMOworICAgIGlmIChoYXNCYXNlVVJMKQorICAgICAgICBiYXNlVVJM
ID0gKE5TVVJMICopW2NvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3M6TlNVUkwuY2xhc3MgZm9yS2V5
OmJhc2VVUkxLZXldOworCisgICAgTlNVSW50ZWdlciBsZW5ndGg7CisgICAgaWYgKGF1dG8gYnl0
ZXMgPSAoVUludDggKilbY29kZXIgZGVjb2RlQnl0ZXNXaXRoUmV0dXJuZWRMZW5ndGg6Jmxlbmd0
aF0pIHsKKyAgICAgICAgbV93cmFwcGVkVVJMID0gYWRvcHROUygoX19icmlkZ2UgTlNVUkwqKUNG
VVJMQ3JlYXRlQWJzb2x1dGVVUkxXaXRoQnl0ZXMobnVsbHB0ciwgYnl0ZXMsIGxlbmd0aCwga0NG
U3RyaW5nRW5jb2RpbmdVVEY4LCAoX19icmlkZ2UgQ0ZVUkxSZWYpYmFzZVVSTC5nZXQoKSwgdHJ1
ZSkpOworICAgICAgICBpZiAoIW1fd3JhcHBlZFVSTCkKKyAgICAgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIGRlY29kZSBOU1VSTCBkdWUgdG8gaW52YWxpZCBlbmNvZGluZyBvZiBsZW5ndGgg
JWQuIFN1YnN0aXR1dGluZyBhIGJsYW5rIFVSTCIsIGxlbmd0aCk7CisgICAgfQorCisgICAgaWYg
KCFtX3dyYXBwZWRVUkwpCisgICAgICAgIG1fd3JhcHBlZFVSTCA9IFtOU1VSTCBVUkxXaXRoU3Ry
aW5nOkAiIl07CisKKyAgICByZXR1cm4gc2VsZlB0ci5sZWFrUmVmKCk7Cit9CisKKy0gKF9OdWxs
YWJsZSBpbnN0YW5jZXR5cGUpaW5pdFdpdGhVUkw6KE5TVVJMICopdXJsCit7CisgICAgaWYgKHNl
bGYgPSBbc3VwZXIgaW5pdF0pCisgICAgICAgIG1fd3JhcHBlZFVSTCA9IHVybDsKKworICAgIHJl
dHVybiBzZWxmOworfQorCitAZW5kCiAKIG5hbWVzcGFjZSBJUEMgewogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CkBAIC0zNDYsMTcgKzQzMSwxMiBAQCBzdGF0aWMgdm9pZCBlbmNvZGVTZWN1cmVD
b2RpbmdJbnRlcm5hbChFbmNvZGVyJiBlbmNvZGVyLCBpZCA8TlNPYmplY3QsIE5TU2VjdXJlQwog
ewogICAgIGF1dG8gYXJjaGl2ZXIgPSBhZG9wdE5TKFtbTlNLZXllZEFyY2hpdmVyIGFsbG9jXSBp
bml0UmVxdWlyaW5nU2VjdXJlQ29kaW5nOllFU10pOwogCi0jaWYgSEFWRShOU0ZPTlRfV0lUSF9P
UFRJQ0FMX1NJWklOR19CVUcpCi0gICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS1NlY3Vy
ZUNvZGluZ0ZvbnRBdHRyaWJ1dGVOb3JtYWxpemVyIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS1NlY3VyZUNvZGluZ0FyY2hpdmluZ0RlbGVnYXRlIGFsbG9j
XSBpbml0XSk7CiAgICAgW2FyY2hpdmVyIHNldERlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKLSNl
bmRpZgogCiAgICAgW2FyY2hpdmVyIGVuY29kZU9iamVjdDpvYmplY3QgZm9yS2V5Ok5TS2V5ZWRB
cmNoaXZlUm9vdE9iamVjdEtleV07CiAgICAgW2FyY2hpdmVyIGZpbmlzaEVuY29kaW5nXTsKLQot
I2lmIEhBVkUoTlNGT05UX1dJVEhfT1BUSUNBTF9TSVpJTkdfQlVHKQogICAgIFthcmNoaXZlciBz
ZXREZWxlZ2F0ZTpuaWxdOwotI2VuZGlmCiAKICAgICBlbmNvZGUoZW5jb2RlciwgKF9fYnJpZGdl
IENGRGF0YVJlZilbYXJjaGl2ZXIgZW5jb2RlZERhdGFdKTsKIH0KQEAgLTM3Myw4ICs0NTMsMTUg
QEAgc3RhdGljIE9wdGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZVNlY3VyZUNvZGluZ0ludGVy
bmFsKERlY29kZXImIGRlY29kZXIsIE5TQXIKIAogICAgIGF1dG8gdW5hcmNoaXZlciA9IGFkb3B0
TlMoW1tOU0tleWVkVW5hcmNoaXZlciBhbGxvY10gaW5pdEZvclJlYWRpbmdGcm9tRGF0YTooX19i
cmlkZ2UgTlNEYXRhICopZGF0YS5nZXQoKSBlcnJvcjpudWxscHRyXSk7CiAgICAgdW5hcmNoaXZl
ci5nZXQoKS5kZWNvZGluZ0ZhaWx1cmVQb2xpY3kgPSBOU0RlY29kaW5nRmFpbHVyZVBvbGljeVJh
aXNlRXhjZXB0aW9uOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS1NlY3VyZUNv
ZGluZ0FyY2hpdmluZ0RlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgdW5hcmNoaXZlci5nZXQo
KS5kZWxlZ2F0ZSA9IGRlbGVnYXRlLmdldCgpOworCisgICAgYXV0byBhbGxvd2VkQ2xhc3NTZXQg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlU2V0IGFsbG9jXSBpbml0V2l0aEFycmF5OmFsbG93ZWRDbGFz
c2VzXSk7CisgICAgW2FsbG93ZWRDbGFzc1NldCBhZGRPYmplY3Q6V0tTZWN1cmVDb2RpbmdVUkxX
cmFwcGVyLmNsYXNzXTsKKyAgICAKICAgICBAdHJ5IHsKLSAgICAgICAgaWQgcmVzdWx0ID0gW3Vu
YXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzc2VzOltOU1NldCBzZXRXaXRoQXJyYXk6YWxsb3dl
ZENsYXNzZXNdIGZvcktleTpOU0tleWVkQXJjaGl2ZVJvb3RPYmplY3RLZXldOworICAgICAgICBp
ZCByZXN1bHQgPSBbdW5hcmNoaXZlciBkZWNvZGVPYmplY3RPZkNsYXNzZXM6YWxsb3dlZENsYXNz
U2V0LmdldCgpIGZvcktleTpOU0tleWVkQXJjaGl2ZVJvb3RPYmplY3RLZXldOwogICAgICAgICBB
U1NFUlQoIXJlc3VsdCB8fCBbcmVzdWx0IGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woTlNT
ZWN1cmVDb2RpbmcpXSk7CiAgICAgICAgIHJldHVybiB7IHJlc3VsdCB9OwogICAgIH0gQGNhdGNo
IChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7CkBAIC0zODIsNiArNDY5LDcgQEAgc3RhdGljIE9w
dGlvbmFsPFJldGFpblB0cjxpZD4+IGRlY29kZVNlY3VyZUNvZGluZ0ludGVybmFsKERlY29kZXIm
IGRlY29kZXIsIE5TQXIKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9IEBmaW5h
bGx5IHsKICAgICAgICAgW3VuYXJjaGl2ZXIgZmluaXNoRGVjb2RpbmddOworICAgICAgICB1bmFy
Y2hpdmVyLmdldCgpLmRlbGVnYXRlID0gbmlsOwogICAgIH0KIH0KIApAQCAtNTI2LDQgKzYxNCw2
IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8SVBDOjpOU1R5cGU+IHsKIH07CiB9IC8v
IG5hbWVzcGFjZSBXVEYKIAorTlNfQVNTVU1FX05PTk5VTExfRU5ECisKICNlbmRpZiAvLyBQTEFU
Rk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNv
cmVBcmd1bWVudENvZGVyc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW0KaW5kZXggNzZhZmI3MmZmMmZkNGY5N2I1Y2YwMTMy
ZWVhOWIzMzdmYTQ0YWI0My4uMmI2YTc1NWRmNzBmOTE4ZmQwMDQ3YzdiNjcwYjdhNDZkMTY2YjI0
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzQ29jb2EubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0IDxXZWJDb3Jl
L0ZvbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9udEF0dHJpYnV0ZXMuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJj
ZVJlcXVlc3QuaD4KICNpbXBvcnQgPHBhbC9zcGkvY2YvQ29yZVRleHRTUEkuaD4KIAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCkBAIC01NDMsNCArNTQ0LDU5IEBAIE9wdGlvbmFsPEZvbnRQbGF0
Zm9ybURhdGE+IEFyZ3VtZW50Q29kZXI8UmVmPEZvbnQ+Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKERl
Y29kZXImCiAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoY3RGb250LmdldCgpLCBzaXplLnZh
bHVlKCksIHN5bnRoZXRpY0JvbGQudmFsdWUoKSwgc3ludGhldGljT2JsaXF1ZS52YWx1ZSgpLCBv
cmllbnRhdGlvbi52YWx1ZSgpLCB3aWR0aFZhcmlhbnQudmFsdWUoKSwgdGV4dFJlbmRlcmluZ01v
ZGUudmFsdWUoKSk7CiB9CiAKK3ZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCit7CisgICAgYXV0byByZXF1ZXN0
VG9TZXJpYWxpemUgPSByZXRhaW5QdHIocmVzb3VyY2VSZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJD
b3JlOjpIVFRQQm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSkpOworCisgICAg
Ym9vbCByZXF1ZXN0SXNQcmVzZW50ID0gcmVxdWVzdFRvU2VyaWFsaXplOworICAgIGVuY29kZXIg
PDwgcmVxdWVzdElzUHJlc2VudDsKKworICAgIGlmICghcmVxdWVzdElzUHJlc2VudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gV2UgZG9uJ3Qgc2VuZCBIVFRQIGJvZHkgb3ZlciBJUEMgZm9y
IGJldHRlciBwZXJmb3JtYW5jZS4KKyAgICAvLyBBbHNvLCBpdCdzIG5vdCBhbHdheXMgcG9zc2li
bGUgdG8gZG8sIGFzIHN0cmVhbXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBpbiBwcm9jZXNzIHRoYXQg
ZG9lcyBuZXR3b3JraW5nLgorICAgIGlmIChbcmVxdWVzdFRvU2VyaWFsaXplIEhUVFBCb2R5XSB8
fCBbcmVxdWVzdFRvU2VyaWFsaXplIEhUVFBCb2R5U3RyZWFtXSkgeworICAgICAgICBhdXRvIG11
dGFibGVSZXF1ZXN0ID0gYWRvcHROUyhbcmVxdWVzdFRvU2VyaWFsaXplIG11dGFibGVDb3B5XSk7
CisgICAgICAgIFttdXRhYmxlUmVxdWVzdCBzZXRIVFRQQm9keTpuaWxdOworICAgICAgICBbbXV0
YWJsZVJlcXVlc3Qgc2V0SFRUUEJvZHlTdHJlYW06bmlsXTsKKyAgICAgICAgcmVxdWVzdFRvU2Vy
aWFsaXplID0gV1RGTW92ZShtdXRhYmxlUmVxdWVzdCk7CisgICAgfQorCisgICAgSVBDOjplbmNv
ZGUoZW5jb2RlciwgcmVxdWVzdFRvU2VyaWFsaXplLmdldCgpKTsKKworICAgIGVuY29kZXIgPDwg
cmVzb3VyY2VSZXF1ZXN0LnJlcXVlc3RlcigpOworICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1
ZXN0LmlzQXBwQm91bmQoKTsKK30KKworYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0YShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKK3sKKyAgICBib29sIHJlcXVlc3RJ
c1ByZXNlbnQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXF1ZXN0SXNQcmVzZW50KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFyZXF1ZXN0SXNQcmVzZW50KSB7CisgICAg
ICAgIHJlc291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCgpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBhdXRvIHJlcXVlc3QgPSBJUEM6OmRlY29kZTxO
U1VSTFJlcXVlc3Q+KGRlY29kZXIsIE5TVVJMUmVxdWVzdC5jbGFzcyk7CisgICAgaWYgKCFyZXF1
ZXN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0OjpSZXF1ZXN0ZXIgcmVxdWVzdGVyOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVx
dWVzdGVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBpc0FwcEJvdW5kOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNBcHBCb3VuZCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJlc291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdChyZXF1
ZXN0LT5nZXQoKSk7CisgICAgcmVzb3VyY2VSZXF1ZXN0LnNldFJlcXVlc3RlcihyZXF1ZXN0ZXIp
OworICAgIHJlc291cmNlUmVxdWVzdC5zZXRJc0FwcEJvdW5kKGlzQXBwQm91bmQpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbSBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0KaW5kZXggMGY2MDVm
YWQ1MjE3MjUxNDEwZTI1ZDdiYmM5MWNiMTNjODE0ZTU0NC4uYzU5NTA2OGE2YTRjNzdkMDYxMjgw
YWEyNTc0NjRkNjZhYTNjMTAxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9t
YWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCkBAIC00MiwyNDUgKzQyLDE0IEBACiAjaW1w
b3J0IDx3dGYvTWFjaFNlbmRSaWdodC5oPgogI2ltcG9ydCA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+
CiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2luY2x1ZGUgPFdlYktpdEFkZGl0aW9u
cy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWNBZGRpdGlvbnMuaD4KLSNlbmRpZgotCiAjaWYgRU5B
QkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICNpbXBvcnQgPFdlYkNvcmUvTWVkaWFQbGF5
YmFja1RhcmdldENvbnRleHQuaD4KICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgogI2ltcG9ydCA8
cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CiAjZW5kaWYKIAotI2lmbmRlZiBXRUJD
T1JFX0FSR1VNRU5UQ09ERVJTX01BQ19ERUNPREVfQURESVRJT05TCi0jZGVmaW5lIFdFQkNPUkVf
QVJHVU1FTlRDT0RFUlNfTUFDX0RFQ09ERV9BRERJVElPTlMKLSNlbmRpZgotCi0jaWZuZGVmIFdF
QkNPUkVfQVJHVU1FTlRDT0RFUlNfTUFDX0VOQ09ERV9BRERJVElPTlMKLSNkZWZpbmUgV0VCQ09S
RV9BUkdVTUVOVENPREVSU19NQUNfRU5DT0RFX0FERElUSU9OUwotI2VuZGlmCi0KIG5hbWVzcGFj
ZSBJUEMgewogCi1zdGF0aWMgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IGNyZWF0
ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKENGSW5kZXggdmVyc2lvbiwgQ0ZUeXBlUmVmKiBv
YmplY3RzLCBDRkluZGV4IG9iamVjdENvdW50LCBDRkRpY3Rpb25hcnlSZWYgcHJvdG9jb2xQcm9w
ZXJ0aWVzLCBDRk51bWJlclJlZiBleHBlY3RlZENvbnRlbnRMZW5ndGgsIENGU3RyaW5nUmVmIG1p
bWVUeXBlLCBDRlR5cGVSZWYgdG9rZW5OdWxsKQotewotICAgIGF1dG8gYXJjaGl2ZUxpc3RBcnJh
eSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwg
JmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwotCi0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwg
b2JqZWN0Q291bnQ7ICsraSkgewotICAgICAgICBDRlR5cGVSZWYgb2JqZWN0ID0gb2JqZWN0c1tp
XTsKLSAgICAgICAgaWYgKG9iamVjdCkgewotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVl
KGFyY2hpdmVMaXN0QXJyYXkuZ2V0KCksIG9iamVjdCk7Ci0gICAgICAgICAgICBDRlJlbGVhc2Uo
b2JqZWN0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEFwcGVuZCBvdXIgdG9r
ZW4gbnVsbCByZXByZXNlbnRhdGlvbi4KLSAgICAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShh
cmNoaXZlTGlzdEFycmF5LmdldCgpLCB0b2tlbk51bGwpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgYXV0byBkaWN0aW9uYXJ5ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtD
RlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLQotICAgIGF1dG8gdmVyc2lvbk51bWJl
ciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVy
Q0ZJbmRleFR5cGUsICZ2ZXJzaW9uKSk7Ci0gICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlv
bmFyeS5nZXQoKSwgQ0ZTVFIoInZlcnNpb24iKSwgdmVyc2lvbk51bWJlci5nZXQoKSk7Ci0gICAg
Q0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlvbmFyeS5nZXQoKSwgQ0ZTVFIoImFyY2hpdmVMaXN0
IiksIGFyY2hpdmVMaXN0QXJyYXkuZ2V0KCkpOwotCi0gICAgaWYgKHByb3RvY29sUHJvcGVydGll
cykgewotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5LmdldCgpLCBDRlNU
UigicHJvdG9jb2xQcm9wZXJ0aWVzIiksIHByb3RvY29sUHJvcGVydGllcyk7Ci0gICAgICAgIENG
UmVsZWFzZShwcm90b2NvbFByb3BlcnRpZXMpOwotICAgIH0KLQotICAgIGlmIChleHBlY3RlZENv
bnRlbnRMZW5ndGgpIHsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlvbmFyeS5n
ZXQoKSwgQ0ZTVFIoImV4cGVjdGVkQ29udGVudExlbmd0aCIpLCBleHBlY3RlZENvbnRlbnRMZW5n
dGgpOwotICAgICAgICBDRlJlbGVhc2UoZXhwZWN0ZWRDb250ZW50TGVuZ3RoKTsKLSAgICB9Ci0K
LSAgICBpZiAobWltZVR5cGUpIHsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZGljdGlv
bmFyeS5nZXQoKSwgQ0ZTVFIoIm1pbWVUeXBlIiksIG1pbWVUeXBlKTsKLSAgICAgICAgQ0ZSZWxl
YXNlKG1pbWVUeXBlKTsKLSAgICB9Ci0KLSAgICBDRkFsbG9jYXRvckRlYWxsb2NhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgb2JqZWN0cyk7Ci0KLSAgICByZXR1cm4gZGljdGlvbmFyeTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPiBib29sIGV4dHJhY3REaWN0aW9uYXJ5VmFsdWUo
Q0ZEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIENGU3RyaW5nUmVmIGtleSwgVmFsdWVUeXBlKiBy
ZXN1bHQpCi17Ci0gICAgYXV0byB1bnR5cGVkVmFsdWUgPSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShk
aWN0aW9uYXJ5LCBrZXkpOwotICAgIGF1dG8gdmFsdWUgPSBkeW5hbWljX2NmX2Nhc3Q8VmFsdWVU
eXBlPih1bnR5cGVkVmFsdWUpOwotICAgIGlmICh1bnR5cGVkVmFsdWUgJiYgIXZhbHVlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IHZh
bHVlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBjcmVhdGVBcmNoaXZlTGlz
dChDRkRpY3Rpb25hcnlSZWYgcmVwcmVzZW50YXRpb24sIENGVHlwZVJlZiB0b2tlbk51bGwsIENG
SW5kZXgqIHZlcnNpb24sIENGVHlwZVJlZioqIG9iamVjdHMsIENGSW5kZXgqIG9iamVjdENvdW50
LCBDRkRpY3Rpb25hcnlSZWYqIHByb3RvY29sUHJvcGVydGllcywgQ0ZOdW1iZXJSZWYqIGV4cGVj
dGVkQ29udGVudExlbmd0aCwgQ0ZTdHJpbmdSZWYqIG1pbWVUeXBlKQotewotICAgIGF1dG8gdmVy
c2lvbk51bWJlciA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUocmVwcmVzZW50YXRpb24sIENGU1RSKCJ2ZXJzaW9uIikpKTsKLSAgICBpZiAoIXZlcnNp
b25OdW1iZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghQ0ZOdW1iZXJHZXRW
YWx1ZSh2ZXJzaW9uTnVtYmVyLCBrQ0ZOdW1iZXJDRkluZGV4VHlwZSwgdmVyc2lvbikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gYXJjaGl2ZUxpc3RBcnJheSA9IGR5bmFtaWNf
Y2ZfY2FzdDxDRkFycmF5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShyZXByZXNlbnRhdGlvbiwg
Q0ZTVFIoImFyY2hpdmVMaXN0IikpKTsKLSAgICBpZiAoIWFyY2hpdmVMaXN0QXJyYXkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gYXJjaGl2ZUxpc3RBcnJheUNvdW50ID0gQ0ZB
cnJheUdldENvdW50KGFyY2hpdmVMaXN0QXJyYXkpOwotICAgIGlmICghaXNJbkJvdW5kczxzaXpl
X3Q+KGFyY2hpdmVMaXN0QXJyYXlDb3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGF1dG8gYnVmZmVyU2l6ZSA9IENoZWNrZWRTaXplKHNpemVvZihDRlR5cGVSZWYpKSAqIHN0YXRp
Y19jYXN0PHNpemVfdD4oYXJjaGl2ZUxpc3RBcnJheUNvdW50KTsKLSAgICBpZiAoYnVmZmVyU2l6
ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZXh0
cmFjdERpY3Rpb25hcnlWYWx1ZShyZXByZXNlbnRhdGlvbiwgQ0ZTVFIoInByb3RvY29sUHJvcGVy
dGllcyIpLCBwcm90b2NvbFByb3BlcnRpZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKCFleHRyYWN0RGljdGlvbmFyeVZhbHVlKHJlcHJlc2VudGF0aW9uLCBDRlNUUigiZXhwZWN0
ZWRDb250ZW50TGVuZ3RoIiksIGV4cGVjdGVkQ29udGVudExlbmd0aCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIWV4dHJhY3REaWN0aW9uYXJ5VmFsdWUocmVwcmVzZW50YXRpb24s
IENGU1RSKCJtaW1lVHlwZSIpLCBtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICpvYmplY3RDb3VudCA9IGFyY2hpdmVMaXN0QXJyYXlDb3VudDsKLSAgICAqb2JqZWN0cyA9
IHN0YXRpY19jYXN0PENGVHlwZVJlZio+KGZhc3RNYWxsb2MoYnVmZmVyU2l6ZS51bnNhZmVHZXQo
KSkpOwotCi0gICAgQ0ZBcnJheUdldFZhbHVlcyhhcmNoaXZlTGlzdEFycmF5LCBDRlJhbmdlTWFr
ZSgwLCAqb2JqZWN0Q291bnQpLCAqb2JqZWN0cyk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBp
IDwgKm9iamVjdENvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKCgqb2JqZWN0cylbaV0gPT0gdG9r
ZW5OdWxsKQotICAgICAgICAgICAgKCpvYmplY3RzKVtpXSA9IG51bGxwdHI7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBj
cmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihDRlVSTFJlcXVlc3RSZWYgY2ZSZXF1ZXN0
LCBDRlR5cGVSZWYgdG9rZW5OdWxsKQotewotICAgIENGSW5kZXggdmVyc2lvbjsKLSAgICBDRlR5
cGVSZWYqIG9iamVjdHM7Ci0gICAgQ0ZJbmRleCBvYmplY3RDb3VudDsKLSAgICBDRkRpY3Rpb25h
cnlSZWYgcHJvdG9jb2xQcm9wZXJ0aWVzOwotCi0gICAgLy8gRklYTUUgKDEyODg5NTE4KTogRG8g
bm90IHNlcmlhbGl6ZSBIVFRQIG1lc3NhZ2UgYm9keS4KLSAgICAvLyAxLiBJdCBjYW4gYmUgbGFy
Z2UgYW5kIHRodXMgY29zdGx5IHRvIHNlbmQgYWNyb3NzLgotICAgIC8vIDIuIEl0IGlzIG1pc2xl
YWRpbmcgdG8gcHJvdmlkZSBhIGJvZHkgd2l0aCBzb21lIHJlcXVlc3RzLCB3aGlsZSBvdGhlcnMg
dXNlIGJvZHkgc3RyZWFtcywgd2hpY2ggY2Fubm90IGJlIHNlcmlhbGl6ZWQgYXQgYWxsLgotCi0g
ICAgX0NGVVJMUmVxdWVzdENyZWF0ZUFyY2hpdmVMaXN0KGtDRkFsbG9jYXRvckRlZmF1bHQsIGNm
UmVxdWVzdCwgJnZlcnNpb24sICZvYmplY3RzLCAmb2JqZWN0Q291bnQsICZwcm90b2NvbFByb3Bl
cnRpZXMpOwotCi0gICAgLy8gVGhpcyB3aWxsIGRlYWxsb2NhdGUgdGhlIHBhc3NlZCBpbiBhcmd1
bWVudHMuCi0gICAgcmV0dXJuIGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKHZlcnNp
b24sIG9iamVjdHMsIG9iamVjdENvdW50LCBwcm90b2NvbFByb3BlcnRpZXMsIG51bGxwdHIsIG51
bGxwdHIsIHRva2VuTnVsbCk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZVUkxSZXF1ZXN0UmVm
PiBjcmVhdGVDRlVSTFJlcXVlc3RGcm9tU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24oQ0ZEaWN0
aW9uYXJ5UmVmIHJlcHJlc2VudGF0aW9uLCBDRlR5cGVSZWYgdG9rZW5OdWxsKQotewotICAgIENG
SW5kZXggdmVyc2lvbjsKLSAgICBDRlR5cGVSZWYqIG9iamVjdHM7Ci0gICAgQ0ZJbmRleCBvYmpl
Y3RDb3VudDsKLSAgICBDRkRpY3Rpb25hcnlSZWYgcHJvdG9jb2xQcm9wZXJ0aWVzOwotCi0gICAg
aWYgKCFjcmVhdGVBcmNoaXZlTGlzdChyZXByZXNlbnRhdGlvbiwgdG9rZW5OdWxsLCAmdmVyc2lv
biwgJm9iamVjdHMsICZvYmplY3RDb3VudCwgJnByb3RvY29sUHJvcGVydGllcywgbnVsbHB0ciwg
bnVsbHB0cikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBjZlJlcXVlc3Qg
PSBhZG9wdENGKF9DRlVSTFJlcXVlc3RDcmVhdGVGcm9tQXJjaGl2ZUxpc3Qoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgdmVyc2lvbiwgb2JqZWN0cywgb2JqZWN0Q291bnQsIHByb3RvY29sUHJvcGVydGll
cykpOwotICAgIGZhc3RGcmVlKG9iamVjdHMpOwotICAgIHJldHVybiBXVEZNb3ZlKGNmUmVxdWVz
dCk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjcmVhdGVTZXJpYWxp
emFibGVSZXByZXNlbnRhdGlvbihOU1VSTFJlcXVlc3QgKnJlcXVlc3QsIENGVHlwZVJlZiB0b2tl
bk51bGwpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKFty
ZXF1ZXN0IF9DRlVSTFJlcXVlc3RdLCB0b2tlbk51bGwpOwotfQotCi1zdGF0aWMgUmV0YWluUHRy
PE5TVVJMUmVxdWVzdD4gY3JlYXRlTlNVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJlcHJlc2Vu
dGF0aW9uKENGRGljdGlvbmFyeVJlZiByZXByZXNlbnRhdGlvbiwgQ0ZUeXBlUmVmIHRva2VuTnVs
bCkKLXsKLSAgICBhdXRvIGNmUmVxdWVzdCA9IGNyZWF0ZUNGVVJMUmVxdWVzdEZyb21TZXJpYWxp
emFibGVSZXByZXNlbnRhdGlvbihyZXByZXNlbnRhdGlvbiwgdG9rZW5OdWxsKTsKLSAgICBpZiAo
IWNmUmVxdWVzdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgcmV0dXJuIGFk
b3B0TlMoW1tOU1VSTFJlcXVlc3QgYWxsb2NdIF9pbml0V2l0aENGVVJMUmVxdWVzdDpjZlJlcXVl
c3QuZ2V0KCldKTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKLXsKLSAgICBSZXRhaW5QdHI8TlNV
UkxSZXF1ZXN0PiByZXF1ZXN0VG9TZXJpYWxpemUgPSByZXNvdXJjZVJlcXVlc3QubnNVUkxSZXF1
ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KTsK
LQotICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudCA9IHJlcXVlc3RUb1NlcmlhbGl6ZTsKLSAgICBl
bmNvZGVyIDw8IHJlcXVlc3RJc1ByZXNlbnQ7Ci0KLSAgICBpZiAoIXJlcXVlc3RJc1ByZXNlbnQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIGRvbid0IHNlbmQgSFRUUCBib2R5IG92ZXIg
SVBDIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCi0gICAgLy8gQWxzbywgaXQncyBub3QgYWx3YXlz
IHBvc3NpYmxlIHRvIGRvLCBhcyBzdHJlYW1zIGNhbiBvbmx5IGJlIGNyZWF0ZWQgaW4gcHJvY2Vz
cyB0aGF0IGRvZXMgbmV0d29ya2luZy4KLSAgICBpZiAoW3JlcXVlc3RUb1NlcmlhbGl6ZSBIVFRQ
Qm9keV0gfHwgW3JlcXVlc3RUb1NlcmlhbGl6ZSBIVFRQQm9keVN0cmVhbV0pIHsKLSAgICAgICAg
cmVxdWVzdFRvU2VyaWFsaXplID0gYWRvcHROUyhbcmVxdWVzdFRvU2VyaWFsaXplIG11dGFibGVD
b3B5XSk7Ci0gICAgICAgIFsoTlNNdXRhYmxlVVJMUmVxdWVzdCAqKXJlcXVlc3RUb1NlcmlhbGl6
ZSBzZXRIVFRQQm9keTpuaWxdOwotICAgICAgICBbKE5TTXV0YWJsZVVSTFJlcXVlc3QgKilyZXF1
ZXN0VG9TZXJpYWxpemUgc2V0SFRUUEJvZHlTdHJlYW06bmlsXTsKLSAgICB9Ci0KLSAgICBhdXRv
IGRpY3Rpb25hcnkgPSBjcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihyZXF1ZXN0VG9T
ZXJpYWxpemUuZ2V0KCksIElQQzo6dG9rZW5OdWxscHRyVHlwZVJlZigpKTsKLSAgICBJUEM6OmVu
Y29kZShlbmNvZGVyLCBkaWN0aW9uYXJ5LmdldCgpKTsKLQotICAgIFdFQkNPUkVfQVJHVU1FTlRD
T0RFUlNfTUFDX0VOQ09ERV9BRERJVElPTlMKLQotICAgIC8vIFRoZSBmYWxsYmFjayBhcnJheSBp
cyBwYXJ0IG9mIE5TVVJMUmVxdWVzdCwgYnV0IGl0IGlzIG5vdCBlbmNvZGVkIGJ5IFdLTlNVUkxS
ZXF1ZXN0Q3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50YXRpb24uCi0gICAgZW5jb2RlciA8PCBy
ZXNvdXJjZVJlcXVlc3QucmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXkoKTsKLSAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5yZXF1ZXN0ZXIoKTsKLSAg
ICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5jYWNoZVBvbGljeSgpOwotICAgIGVuY29kZXIg
PDwgcmVzb3VyY2VSZXF1ZXN0LmlzQXBwQm91bmQoKTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0YShEZWNvZGVyJiBk
ZWNvZGVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKLXsKLSAg
ICBib29sIHJlcXVlc3RJc1ByZXNlbnQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXF1ZXN0
SXNQcmVzZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFyZXF1ZXN0SXNQ
cmVzZW50KSB7Ci0gICAgICAgIHJlc291cmNlUmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBkaWN0aW9uYXJ5OwotICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2Rlciwg
ZGljdGlvbmFyeSkgfHwgIWRpY3Rpb25hcnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGF1dG8gbnNVUkxSZXF1ZXN0ID0gY3JlYXRlTlNVUkxSZXF1ZXN0RnJvbVNlcmlhbGl6YWJsZVJl
cHJlc2VudGF0aW9uKGRpY3Rpb25hcnkuZ2V0KCksIElQQzo6dG9rZW5OdWxscHRyVHlwZVJlZigp
KTsKLSAgICBpZiAoIW5zVVJMUmVxdWVzdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
V0VCQ09SRV9BUkdVTUVOVENPREVSU19NQUNfREVDT0RFX0FERElUSU9OUwotCi0gICAgcmVzb3Vy
Y2VSZXF1ZXN0ID0gV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KG5zVVJMUmVxdWVzdC5nZXQoKSk7
Ci0gICAgCi0gICAgVmVjdG9yPFN0cmluZz4gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNv
ZGluZ0ZhbGxiYWNrQXJyYXk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXNwb25zZUNvbnRl
bnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJlc291cmNlUmVxdWVzdC5zZXRSZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheSgKLSAgICAgICAgcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25F
bmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpID4gMCA/IHJlc3BvbnNlQ29udGVudERpc3Bvc2l0
aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5WzBdIDogU3RyaW5nKCksCi0gICAgICAgIHJlc3BvbnNl
Q29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnNpemUoKSA+IDEgPyByZXNw
b25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVsxXSA6IFN0cmluZygp
LAotICAgICAgICByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJh
eS5zaXplKCkgPiAyID8gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXlbMl0gOiBTdHJpbmcoKQotICAgICk7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3Q6OlJlcXVlc3RlciByZXF1ZXN0ZXI7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXF1ZXN0
ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzb3VyY2VSZXF1ZXN0LnNldFJlcXVl
c3RlcihyZXF1ZXN0ZXIpOwotCi0gICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xp
Y3kgY2FjaGVQb2xpY3k7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjYWNoZVBvbGljeSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXNvdXJjZVJlcXVlc3Quc2V0Q2FjaGVQb2xpY3ko
Y2FjaGVQb2xpY3kpOwotCi0gICAgYm9vbCBpc0FwcEJvdW5kOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoaXNBcHBCb3VuZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXNvdXJjZVJl
cXVlc3Quc2V0SXNBcHBCb3VuZChpc0FwcEJvdW5kKTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
CiB2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNh
dGVJbmZvKQogewogICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGVJbmZvLnR5cGUoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>