<?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>213556</bug_id>
          
          <creation_ts>2020-06-24 07:10:46 -0700</creation_ts>
          <short_desc>JavaScript cannot be injected into iframes</short_desc>
          <delta_ts>2020-06-30 10:57:14 -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 API</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ali Juma">ajuma</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>eugenebut</cc>
    
    <cc>ggaren</cc>
    
    <cc>kc</cc>
    
    <cc>rohitrao</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1665722</commentid>
    <comment_count>0</comment_count>
    <who name="Ali Juma">ajuma</who>
    <bug_when>2020-06-24 07:10:46 -0700</bug_when>
    <thetext>WKWebView now allows injecting JavaScript into isolated worlds using evaluateJavaScript, but doesn&apos;t expose a way to inject WKUserScripts into isolated worlds.

WKUserScripts have important functionality that is missing from evaluateJavaScript. In particular, WKUserScripts can be injected into *all frames* rather than just the main frame, and can be automatically injected when the frame is loaded.

We&apos;d love to move most of our JS injection into isolated worlds, but we need to be able to inject into non-main frames.

One approach to fixing this would be to add a public WKUserScript constructor that takes a WKContentWorld argument (there&apos;s already such a constructor in WKUserScriptPrivate.h).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665725</commentid>
    <comment_count>1</comment_count>
    <who name="Ali Juma">ajuma</who>
    <bug_when>2020-06-24 07:16:53 -0700</bug_when>
    <thetext>I&apos;ve also filed FB7772359 for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665771</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2020-06-24 09:41:15 -0700</bug_when>
    <thetext>rdar://problem/64700590</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665782</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-06-24 10:13:26 -0700</bug_when>
    <thetext>I&apos;m wondering if these SPIs would meet your needs?

- (void)_evaluateJavaScript:(NSString *)javaScriptString inFrame:(WKFrameInfo *)frame inContentWorld:(WKContentWorld *)contentWorld completionHandler:(void (^)(id, NSError * error))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
...
- (void)_callAsyncJavaScript:(NSString *)functionBody arguments:(NSDictionary&lt;NSString *, id&gt; *)arguments inFrame:(WKFrameInfo *)frame inContentWorld:(WKContentWorld *)contentWorld completionHandler:(void (^)(id, NSError *error))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
...
- (void)_frames:(void (^)(_WKFrameTreeNode *))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665880</commentid>
    <comment_count>4</comment_count>
    <who name="Ali Juma">ajuma</who>
    <bug_when>2020-06-24 14:51:39 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #3)
&gt; I&apos;m wondering if these SPIs would meet your needs?
&gt; 
&gt; - (void)_evaluateJavaScript:(NSString *)javaScriptString
&gt; inFrame:(WKFrameInfo *)frame inContentWorld:(WKContentWorld *)contentWorld
&gt; completionHandler:(void (^)(id, NSError * error))completionHandler
&gt; WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
&gt; ...
&gt; - (void)_callAsyncJavaScript:(NSString *)functionBody
&gt; arguments:(NSDictionary&lt;NSString *, id&gt; *)arguments inFrame:(WKFrameInfo
&gt; *)frame inContentWorld:(WKContentWorld *)contentWorld
&gt; completionHandler:(void (^)(id, NSError *error))completionHandler
&gt; WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
&gt; ...
&gt; - (void)_frames:(void (^)(_WKFrameTreeNode *))completionHandler
&gt; WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));

My main concerns with this approach are how we would find out about new frames appearing in _frames, and how early we would be able to inject script into a new frame. We don&apos;t currently get much by way of navigation callbacks for subframes in public API -- decidePolicyForNavigationAction has a targetFrame, but it&apos;s presumably too early to inject at that point, and decidePolicyForNavigationResponse tells us whether the response is for a subframe, but doesn&apos;t include a WKFrameInfo. Periodically polling _frames doesn&apos;t seem like a great solution.

As a concrete example, we inject logic for form autofill. This code adds event listeners on |document| for events that could be related to a form being edited (like &apos;focus&apos;, &apos;blur&apos;, &apos;change&apos;). It&apos;s important that this gets reliably injected before the user interacts with the page, so using a WKUserScript with WKUserScriptInjectionTimeAtDocumentStart works well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667318</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-06-29 15:39:16 -0700</bug_when>
    <thetext>Retitling to a more general &quot;JavaScript cannot be injected into iframes&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667330</commentid>
    <comment_count>6</comment_count>
      <attachid>403128</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-06-29 16:02:55 -0700</bug_when>
    <thetext>Created attachment 403128
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667338</commentid>
    <comment_count>7</comment_count>
      <attachid>403128</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-06-29 16:14:49 -0700</bug_when>
    <thetext>Comment on attachment 403128
Patch

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

&gt; Source/WebKit/UIProcess/API/Cocoa/WKUserScript.mm:44
&gt; +    API::Object::constructInWrapper&lt;API::UserScript&gt;(self, WebCore::UserScript { source, API::UserScript::generateUniqueURL(), { }, { }, API::toWebCoreUserScriptInjectionTime(injectionTime), forMainFrameOnly ? WebCore::UserContentInjectedFrames::InjectInTopFrameOnly : WebCore::UserContentInjectedFrames::InjectInAllFrames, WebCore::WaitForNotificationBeforeInjecting::No }, contentWorld ? *contentWorld-&gt;_contentWorld : API::ContentWorld::pageContentWorld());

contentWorld is non-null, so this check and fallback should be unused.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:876
&gt; +    if (details.type == WebCore::ExceptionDetails::Type::InvalidTargetFrame)

This should probably be a switch statement.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:882
&gt; +    [userInfo setObject:static_cast&lt;NSString *&gt;(details.message) forKey:_WKJavaScriptExceptionMessageErrorKey];

I think this static_cast is syntactically unnecessary because of WTF::String::operator NSString *</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667339</commentid>
    <comment_count>8</comment_count>
      <attachid>403128</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-29 16:18:38 -0700</bug_when>
    <thetext>Comment on attachment 403128
Patch

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

Should wait for EWS until I set review+, but looks good

&gt; Source/WebCore/bindings/js/ExceptionDetails.h:46
&gt;      // This bizarre explicit initialization of String is because older compilers (like on High Sierra)
&gt;      // don&apos;t properly handle partial initialization lists unless every struct member has an explicit default value.
&gt;      // Once we stop building on those platforms we can remove this.

I don’t think we need this any more.

&gt; Source/WebKit/Shared/WebCoreArgumentCoders.h:32
&gt; +#include &lt;WebCore/ExceptionDetails.h&gt;

This seems quite unfortunate. Why do we need to include this here now, instead of in the places that invoke the encode/decode for ExceptionDetails?

&gt; Source/WebKit/UIProcess/API/Cocoa/WKError.mm:78
&gt; +        return WEB_UI_STRING(&quot;JavaScript execution was targetted at a frame that can no longer be targetted&quot;, &quot;WKErrorJavaScriptMissingFrameTarget description&quot;);

Looked up the spelling to be sure: it&apos;s &quot;targeted&quot; with only the two &quot;t&quot;s.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:824
&gt;      [self _evaluateJavaScript:javaScriptString asAsyncFunction:NO withSourceURL:nil withArguments:nil forceUserGesture:YES inFrame:nil inWorld:contentWorld completionHandler:completionHandler];

Why aren’t we removing this? It’s no longer mentioned in the header.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:873
&gt; +    RetainPtr&lt;NSMutableDictionary&gt; userInfo = adoptNS([[NSMutableDictionary alloc] init]);

I suggest using auto here.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:887
&gt; +    [userInfo setObject:localizedDescriptionForErrorCode(errorCode) forKey:NSLocalizedDescriptionKey];
&gt; +    [userInfo setObject:static_cast&lt;NSString *&gt;(details.message) forKey:_WKJavaScriptExceptionMessageErrorKey];
&gt; +    [userInfo setObject:@(details.lineNumber) forKey:_WKJavaScriptExceptionLineNumberErrorKey];
&gt; +    [userInfo setObject:@(details.columnNumber) forKey:_WKJavaScriptExceptionColumnNumberErrorKey];
&gt; +
&gt; +    if (!details.sourceURL.isEmpty())
&gt; +        [userInfo setObject:[NSURL _web_URLWithWTFString:details.sourceURL] forKey:_WKJavaScriptExceptionSourceURLErrorKey];

Things like this are so much nicer when they use dictionary literals; easier to read and more efficient. But the sourceURL part of this would be hard to do that way; it would have to be two literals. Or a mutation of a copy of the literal.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:959
&gt; +            auto error = nsErrorFromExceptionDetails(*details);
&gt; +            rawHandler(nil, error.get());

I think this would read better as a one-liner without the local variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667340</commentid>
    <comment_count>9</comment_count>
      <attachid>403128</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-06-29 16:20:42 -0700</bug_when>
    <thetext>Comment on attachment 403128
Patch

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

r=me

&gt; Source/WebKit/UIProcess/API/Cocoa/WKError.mm:77
&gt; +    case WKErrorJavaScriptMissingFrameTarget:

Let&apos;s call this WKErrorJavaScriptInvalidFrameTarget since &quot;invalid&quot; is the word you used in headerdoc.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKError.mm:78
&gt; +        return WEB_UI_STRING(&quot;JavaScript execution was targetted at a frame that can no longer be targetted&quot;, &quot;WKErrorJavaScriptMissingFrameTarget description&quot;);

targetted =&gt; targeted

But also, maybe we can be clearer: JavaScript execution targeted an invalid frame.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.h:237
&gt; + Passing `nil` for the frame argument is equivalent to passing in a value representing the main frame of the WKWebView.

=&gt; Pass nil to target the main frame.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.h:287
&gt; + Passing `nil` for the frame argument is equivalent to passing in a value representing the main frame of the WKWebView.

=&gt; Pass nil to target the main frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667380</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-06-29 17:49:03 -0700</bug_when>
    <thetext>Oh boy, do I have news for you all about the use of the misspelled &quot;targetted&quot; in WebKit... :)

(Will still fix it here)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667382</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-06-29 17:53:09 -0700</bug_when>
    <thetext>
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.h:237
&gt; &gt; + Passing `nil` for the frame argument is equivalent to passing in a value representing the main frame of the WKWebView.
&gt; 
&gt; =&gt; Pass nil to target the main frame.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.h:287
&gt; &gt; + Passing `nil` for the frame argument is equivalent to passing in a value representing the main frame of the WKWebView.
&gt; 
&gt; =&gt; Pass nil to target the main frame.

Not quite accurate, since you can also target the main frame with a valid WKFrameInfo targeting the main frame.

But I changed it to &quot;Passing nil is equivalent to targeting the main frame.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667392</commentid>
    <comment_count>12</comment_count>
      <attachid>403149</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-06-29 18:12:49 -0700</bug_when>
    <thetext>Created attachment 403149
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667416</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-06-29 18:57:32 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Comment on attachment 403128 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=403128&amp;action=review
&gt; 
&gt; Should wait for EWS until I set review+, but looks good
&gt; 
&gt; &gt; Source/WebCore/bindings/js/ExceptionDetails.h:46
&gt; &gt;      // This bizarre explicit initialization of String is because older compilers (like on High Sierra)
&gt; &gt;      // don&apos;t properly handle partial initialization lists unless every struct member has an explicit default value.
&gt; &gt;      // Once we stop building on those platforms we can remove this.
&gt; 
&gt; I don’t think we need this any more.

The build bot errors with this patch are because I removed this 😭</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667417</commentid>
    <comment_count>14</comment_count>
      <attachid>403158</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-06-29 18:59:17 -0700</bug_when>
    <thetext>Created attachment 403158
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667419</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-06-29 18:59:36 -0700</bug_when>
    <thetext>(In reply to Brady Eidson from comment #13)
&gt; (In reply to Darin Adler from comment #8)
&gt; &gt; Comment on attachment 403128 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=403128&amp;action=review
&gt; &gt; 
&gt; &gt; Should wait for EWS until I set review+, but looks good
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/bindings/js/ExceptionDetails.h:46
&gt; &gt; &gt;      // This bizarre explicit initialization of String is because older compilers (like on High Sierra)
&gt; &gt; &gt;      // don&apos;t properly handle partial initialization lists unless every struct member has an explicit default value.
&gt; &gt; &gt;      // Once we stop building on those platforms we can remove this.
&gt; &gt; 
&gt; &gt; I don’t think we need this any more.
&gt; 
&gt; The build bot errors with this patch are because I removed this 😭

E.g. https://ews-build.webkit.org/#/builders/22/builds/21940/steps/7/logs/errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667477</commentid>
    <comment_count>16</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-06-29 22:38:50 -0700</bug_when>
    <thetext>*** Bug 204557 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667478</commentid>
    <comment_count>17</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-29 22:43:23 -0700</bug_when>
    <thetext>Committed r263727: &lt;https://trac.webkit.org/changeset/263727&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 403158.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667624</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-30 10:57:14 -0700</bug_when>
    <thetext>(In reply to Brady Eidson from comment #15)
&gt; (In reply to Brady Eidson from comment #13)
&gt; &gt; (In reply to Darin Adler from comment #8)
&gt; &gt; &gt; &gt; Source/WebCore/bindings/js/ExceptionDetails.h:46
&gt; &gt; &gt; &gt;      // This bizarre explicit initialization of String is because older compilers (like on High Sierra)
&gt; &gt; &gt; &gt;      // don&apos;t properly handle partial initialization lists unless every struct member has an explicit default value.
&gt; &gt; &gt; &gt;      // Once we stop building on those platforms we can remove this.
&gt; &gt; &gt; 
&gt; &gt; &gt; I don’t think we need this any more.
&gt; &gt; 
&gt; &gt; The build bot errors with this patch are because I removed this 😭
&gt; 
&gt; E.g.
&gt; https://ews-build.webkit.org/#/builders/22/builds/21940/steps/7/logs/errors

Seems like the comment is inaccurate because whatever the problem is, it&apos;s not about &quot;older compilers&quot;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403128</attachid>
            <date>2020-06-29 16:02:55 -0700</date>
            <delta_ts>2020-06-29 18:12:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213556-20200629160254.patch</filename>
            <type>text/plain</type>
            <size>70940</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzMDk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDc1ZDNkMTE0MDFhYjY5
M2Y1ODU1MzU1NGFiZjJhZjhkMDc4NGViYy4uZmRmZTA1OGRkYzdhMTg4MGNiMjQ5MTk3ZTdlYWIz
OWExZDNjN2UwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTA2LTI5ICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBKYXZhU2NyaXB0IGNhbm5v
dCBiZSBpbmplY3RlZCBpbnRvIGlmcmFtZXMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU0MTY4
OTQ2PiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzU1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvdmVyZWQg
YnkgQVBJIHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3MvanMvRXhjZXB0aW9uRGV0YWlscy5o
OiBTdGFydCBhIGNvbGxlY3Rpb24gb2YgImV4Y2VwdGlvbiB0eXBlcyIgdGhhdCB3aWxsIGdyb3cg
cXVpY2tseSwKKyAgICAgICAgICBiZWdpbm5pbmcgd2l0aCB0aGUgc3BlY2lhbGl6ZWQgIm1pc3Np
bmcgZnJhbWUiIHR5cGUuCisKIDIwMjAtMDYtMTYgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNo
QGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogPGFkZHJlc3M+IGVsZW1lbnQgc2hvdWxkIG5vIGxv
bmdlciBtYXAgdG8gQVJJQSBgY29udGVudGluZm9gIHJvbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMWVkNmI0NzA1
MjdlNTY1MGVjOTNmZWI3ZmEwNTQ3MTE0ODgwZTkzNi4uNjA5ZDc2NGYyNzA4ZGU1ZmQ0NGNhYzI4
YThmZDAxNWE5YzBlYjBjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAyMC0wNi0yOSAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgSmF2YVNjcmlwdCBj
YW5ub3QgYmUgaW5qZWN0ZWQgaW50byBpZnJhbWVzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81
NDE2ODk0Nj4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM1
NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgYWRkcyBhIGZldyBtZWNoYW5pc21zOgorICAgICAgICAtIEFsbG93cyBmb3IgV0tV
c2VyU2NyaXB0cyB0byBoYXZlIGEgdGFyZ2V0IGNvbnRlbnQgd29ybGQKKyAgICAgICAgLSBBbGxv
d3MgImV2YWx1YXRlSmF2YVNjcmlwdCIgYW5kICJjYWxsQXN5bmNKYXZhU2NyaXB0IiB0byB0YXJn
ZXQgYSBzcGVjaWZpYyBmcmFtZQorICAgICAgICAtIEFsbG93cyBmb3IgdGhlIGNvbXBsZXRpb24g
aGFuZGxlcnMgb2YgdGhvc2UgbWV0aG9kcyB0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIAorICAg
ICAgICAgIGZhaWx1cmUtZHVlLXRvLW1pc3NpbmctZnJhbWUuCisKKyAgICAgICAgKiBTaGFyZWQv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxF
eGNlcHRpb25EZXRhaWxzPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxF
eGNlcHRpb25EZXRhaWxzPjo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmg6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IubW06CisgICAgICAgIChsb2Nh
bGl6ZWREZXNjcmlwdGlvbkZvckVycm9yQ29kZSk6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLVXNlclNjcmlwdC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tV
c2VyU2NyaXB0Lm1tOgorICAgICAgICAoLVtXS1VzZXJTY3JpcHQgaW5pdFdpdGhTb3VyY2U6aW5q
ZWN0aW9uVGltZTpmb3JNYWluRnJhbWVPbmx5Ol0pOgorICAgICAgICAoLVtXS1VzZXJTY3JpcHQg
aW5pdFdpdGhTb3VyY2U6aW5qZWN0aW9uVGltZTpmb3JNYWluRnJhbWVPbmx5OmluQ29udGVudFdv
cmxkOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lmg6CisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDppbkZyYW1lOmluQ29udGVudFdvcmxkOmNvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDph
cmd1bWVudHM6aW5GcmFtZTppbkNvbnRlbnRXb3JsZDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAg
ICAgICAgKG5zRXJyb3JGcm9tRXhjZXB0aW9uRGV0YWlscyk6CisgICAgICAgICgtW1dLV2ViVmll
dyBfZXZhbHVhdGVKYXZhU2NyaXB0OmFzQXN5bmNGdW5jdGlvbjp3aXRoU291cmNlVVJMOndpdGhB
cmd1bWVudHM6Zm9yY2VVc2VyR2VzdHVyZTppbkZyYW1lOmluV29ybGQ6Y29tcGxldGlvbkhhbmRs
ZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmFyZ3VtZW50
czppbkNvbnRlbnRXb3JsZDpjb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6cnVuSmF2YVNjcmlwdCk6CisKIDIwMjAtMDYtMTYgIENoYXJsaWUgVHVybmVyICA8Y3R1
cm5lckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIERpc2FibGUgdmlkZW8gYXV0b3BsYXkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4Y2VwdGlvbkRldGFpbHMu
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4Y2VwdGlvbkRldGFpbHMuaAppbmRleCA0
OTI0MTE4NTA5YTQ3MmQwM2EzOGJlNDYwZjU3Yjc3ZmZhYjRiZDNiLi5iNmYwMGI0YjU0NGJlZmMz
OGE2MDRiN2E3MTNhMTgxZDg3MmVhNGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9FeGNlcHRpb25EZXRhaWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvRXhjZXB0aW9uRGV0YWlscy5oCkBAIC0zMCw5ICszMCwxNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBzdHJ1Y3QgRXhjZXB0aW9uRGV0YWlscyB7CisgICAgZW51bSBjbGFzcyBUeXBlIDog
dWludDhfdCB7CisgICAgICAgIFNjcmlwdCwKKyAgICAgICAgSW52YWxpZFRhcmdldEZyYW1lLAor
ICAgIH07CisKICAgICBTdHJpbmcgbWVzc2FnZTsKICAgICBpbnQgbGluZU51bWJlciB7IDAgfTsK
ICAgICBpbnQgY29sdW1uTnVtYmVyIHsgMCB9OworCisgICAgVHlwZSB0eXBlIHsgVHlwZTo6U2Ny
aXB0IH07CisKICAgICAvLyBUaGlzIGJpemFycmUgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24gb2Yg
U3RyaW5nIGlzIGJlY2F1c2Ugb2xkZXIgY29tcGlsZXJzIChsaWtlIG9uIEhpZ2ggU2llcnJhKQog
ICAgIC8vIGRvbid0IHByb3Blcmx5IGhhbmRsZSBwYXJ0aWFsIGluaXRpYWxpemF0aW9uIGxpc3Rz
IHVubGVzcyBldmVyeSBzdHJ1Y3QgbWVtYmVyIGhhcyBhbiBleHBsaWNpdCBkZWZhdWx0IHZhbHVl
LgogICAgIC8vIE9uY2Ugd2Ugc3RvcCBidWlsZGluZyBvbiB0aG9zZSBwbGF0Zm9ybXMgd2UgY2Fu
IHJlbW92ZSB0aGlzLgpAQCAtNDAsMyArNDgsMTMgQEAgc3RydWN0IEV4Y2VwdGlvbkRldGFpbHMg
ewogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKK3RlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RXhjZXB0aW9uRGV0YWlsczo6VHlwZT4g
eworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkRldGFpbHM6OlR5cGUsCisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkRldGFpbHM6OlR5
cGU6OlNjcmlwdCwKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uRGV0YWlsczo6VHlwZTo6SW52
YWxpZFRhcmdldEZyYW1lCisgICAgPjsKK307Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAppbmRleCA1NDQ3ZmNhNzYzNTI4YTRlOTliNDMzZTRk
ZmViOGRiZjU0NDE3NWYzLi4zYTBkNGI4NzE4ZTNlZDY0ZDljZmEyMjI0MWQzYzYxNmQyMzhjMTc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAK
QEAgLTI2NTksNiArMjY1OSw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxFeGNlcHRpb25EZXRhaWxz
Pjo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlciwgY29uc3QgRXhjZXB0CiAgICAgZW5jb2Rl
ciA8PCBpbmZvLm1lc3NhZ2U7CiAgICAgZW5jb2RlciA8PCBpbmZvLmxpbmVOdW1iZXI7CiAgICAg
ZW5jb2RlciA8PCBpbmZvLmNvbHVtbk51bWJlcjsKKyAgICBlbmNvZGVyIDw8IGluZm8udHlwZTsK
ICAgICBlbmNvZGVyIDw8IGluZm8uc291cmNlVVJMOwogfQogCkBAIC0yNjczLDYgKzI2NzQsOSBA
QCBib29sIEFyZ3VtZW50Q29kZXI8RXhjZXB0aW9uRGV0YWlscz46OmRlY29kZShJUEM6OkRlY29k
ZXImIGRlY29kZXIsIEV4Y2VwdGlvbkRldAogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmNvbHVtbk51bWJlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LnR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zb3VyY2VVUkwpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKaW5kZXgg
YTlmODZkMjhmODg4YjVkMGE4YjA4NzQzOTdlOTQ0MTZhNjhiNDYyYy4uY2FjMWRiYjcwZGNiNDY1
NDdiMDc2ZjIxOTVmNTAzZDg1ODE0NzM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L0F1dG9wbGF5RXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25EZXRhaWxzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVz
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZURhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lu
ZGV4ZWREQi5oPgpAQCAtMTI5LDcgKzEzMCw2IEBAIHN0cnVjdCBDb21wb3NpdGlvblVuZGVybGlu
ZTsKIHN0cnVjdCBEaWN0YXRpb25BbHRlcm5hdGl2ZTsKIHN0cnVjdCBEaWN0aW9uYXJ5UG9wdXBJ
bmZvOwogc3RydWN0IEV2ZW50VHJhY2tpbmdSZWdpb25zOwotc3RydWN0IEV4Y2VwdGlvbkRldGFp
bHM7CiBzdHJ1Y3QgRm9udEF0dHJpYnV0ZXM7CiBzdHJ1Y3QgRmlsZUNob29zZXJTZXR0aW5nczsK
IHN0cnVjdCBSYXdGaWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLRXJyb3IuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vy
cm9yLmgKaW5kZXggMTQwZDY2ZmJmZWQ2MjdmMmJjNzQyYjNiZjgzMmNmYTZlZDNhMWM1Yi4uOGYz
NTY1NzBiYjlkZjZlYjlhZTMxY2ExMjM0MzE5MTY4YzQ4MjQ1ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5oCkBAIC01OCw2ICs1OCw3IEBAIHR5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIFdLRXJyb3JDb2RlKSB7CiAgICAgV0tFcnJvckNvbnRlbnRSdWxl
TGlzdFN0b3JlVmVyc2lvbk1pc21hdGNoIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpLCBp
b3MoMTEuMCkpLAogICAgIFdLRXJyb3JBdHRyaWJ1dGVkU3RyaW5nQ29udGVudEZhaWxlZFRvTG9h
ZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKSwKICAgICBXS0Vycm9y
QXR0cmlidXRlZFN0cmluZ0NvbnRlbnRMb2FkVGltZWRPdXQgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xNSksIGlvcygxMy4wKSksCisgICAgV0tFcnJvckphdmFTY3JpcHRNaXNzaW5nRnJhbWVU
YXJnZXQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KSwKIH0gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMCksIGlvcyg4LjApKTsKIAogTlNfQVNT
VU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tFcnJvci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vy
cm9yLm1tCmluZGV4IDM2ZTFmNGJkNjg5MWU4OTAyMWIzNWIxZjhiYjhiM2EwNGFmNzU4ZDcuLjVj
OGYyYTZjYzUxMzRiY2U1Y2VmNzE4YTA0ZjlkMTI3MzY1NDk4NWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vycm9yLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vycm9yLm1tCkBAIC03Myw2ICs3Myw5IEBAIE5TU3Ry
aW5nICpsb2NhbGl6ZWREZXNjcmlwdGlvbkZvckVycm9yQ29kZShXS0Vycm9yQ29kZSBlcnJvckNv
ZGUpCiAKICAgICBjYXNlIFdLRXJyb3JBdHRyaWJ1dGVkU3RyaW5nQ29udGVudExvYWRUaW1lZE91
dDoKICAgICAgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkcoIlRpbWVkIG91dCB3aGlsZSBsb2FkaW5n
IGF0dHJpYnV0ZWQgc3RyaW5nIGNvbnRlbnQiLCAiV0tFcnJvckF0dHJpYnV0ZWRTdHJpbmdDb250
ZW50TG9hZFRpbWVkT3V0IGRlc2NyaXB0aW9uIik7CisKKyAgICBjYXNlIFdLRXJyb3JKYXZhU2Ny
aXB0TWlzc2luZ0ZyYW1lVGFyZ2V0OgorICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklORygiSmF2
YVNjcmlwdCBleGVjdXRpb24gd2FzIHRhcmdldHRlZCBhdCBhIGZyYW1lIHRoYXQgY2FuIG5vIGxv
bmdlciBiZSB0YXJnZXR0ZWQiLCAiV0tFcnJvckphdmFTY3JpcHRNaXNzaW5nRnJhbWVUYXJnZXQg
ZGVzY3JpcHRpb24iKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJTY3JpcHQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1VzZXJTY3JpcHQuaAppbmRleCA0MDEyZjg4YmRjNDg2ZDczMmZlMjk3MGRh
YTllMGIyOTAzY2M1OWIzLi4wYzVjNmRjNmQ3Y2E0ZWQ0NDczN2MyMDY5MmI4OGViM2RlM2I4MWI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyU2Ny
aXB0LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlclNjcmlw
dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTU3LDkgKzU3LDE4IEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvcygxMC4xMCksIGlvcyg4
LjApKQogIEBwYXJhbSBzb3VyY2UgVGhlIHNjcmlwdCBzb3VyY2UuCiAgQHBhcmFtIGluamVjdGlv
blRpbWUgV2hlbiB0aGUgc2NyaXB0IHNob3VsZCBiZSBpbmplY3RlZC4KICBAcGFyYW0gZm9yTWFp
bkZyYW1lT25seSBXaGV0aGVyIHRoZSBzY3JpcHQgc2hvdWxkIGJlIGluamVjdGVkIGludG8gYWxs
IGZyYW1lcyBvciBqdXN0IHRoZSBtYWluIGZyYW1lLgorIEBkaXNjdXNzaW9uIENhbGxpbmcgdGhp
cyBtZXRob2QgaXMgdGhlIHNhbWUgYXMgY2FsbGluZyBgaW5pdFdpdGhTb3VyY2U6aW5qZWN0aW9u
VGltZTpmb3JNYWluRnJhbWVPbmx5OmluQ29udGVudFdvcmxkOmAgd2l0aCBhIGBjb250ZW50V29y
bGRgIHZhbHVlIG9mIGBXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGRgCiAgKi8KIC0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgaW5qZWN0aW9uVGltZTooV0tV
c2VyU2NyaXB0SW5qZWN0aW9uVGltZSlpbmplY3Rpb25UaW1lIGZvck1haW5GcmFtZU9ubHk6KEJP
T0wpZm9yTWFpbkZyYW1lT25seTsKIAorLyohIEBhYnN0cmFjdCBSZXR1cm5zIGFuIGluaXRpYWxp
emVkIHVzZXIgc2NyaXB0IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgQGxpbmsgV0tVc2VyQ29udGVu
dENvbnRyb2xsZXIgQC9saW5rLgorIEBwYXJhbSBzb3VyY2UgVGhlIHNjcmlwdCBzb3VyY2UuCisg
QHBhcmFtIGluamVjdGlvblRpbWUgV2hlbiB0aGUgc2NyaXB0IHNob3VsZCBiZSBpbmplY3RlZC4K
KyBAcGFyYW0gZm9yTWFpbkZyYW1lT25seSBXaGV0aGVyIHRoZSBzY3JpcHQgc2hvdWxkIGJlIGlu
amVjdGVkIGludG8gYWxsIGZyYW1lcyBvciBqdXN0IHRoZSBtYWluIGZyYW1lLgorIEBwYXJhbSBj
b250ZW50V29ybGQgVGhlIFdLQ29udGVudFdvcmxkIGluIHdoaWNoIHRvIGluamVjdCB0aGUgc2Ny
aXB0LgorICovCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291
cmNlIGluamVjdGlvblRpbWU6KFdLVXNlclNjcmlwdEluamVjdGlvblRpbWUpaW5qZWN0aW9uVGlt
ZSBmb3JNYWluRnJhbWVPbmx5OihCT09MKWZvck1haW5GcmFtZU9ubHkgaW5Db250ZW50V29ybGQ6
KFdLQ29udGVudFdvcmxkICopY29udGVudFdvcmxkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1FX05PTk5VTExf
RU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2Vy
U2NyaXB0Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlclNjcmlw
dC5tbQppbmRleCA4NDZmOTI5NDIzMWU0NjUxN2Q3YWRhNGM3YTgwYzZhMmI3ZmRiNzZiLi44ZTlm
MzllYTJkNDkzMDA0ZmYwNjhhZjBjY2JkYWE4NjMxOGIxZGJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyU2NyaXB0Lm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJTY3JpcHQubW0KQEAgLTMyLDExICszMiwx
NiBAQAogQGltcGxlbWVudGF0aW9uIFdLVXNlclNjcmlwdAogCiAtIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluamVjdGlvblRpbWU6KFdLVXNlclNjcmlw
dEluamVjdGlvblRpbWUpaW5qZWN0aW9uVGltZSBmb3JNYWluRnJhbWVPbmx5OihCT09MKWZvck1h
aW5GcmFtZU9ubHkKK3sKKyAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhTb3VyY2U6c291cmNlIGlu
amVjdGlvblRpbWU6aW5qZWN0aW9uVGltZSBmb3JNYWluRnJhbWVPbmx5OmZvck1haW5GcmFtZU9u
bHkgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkXTsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBpbmplY3Rpb25UaW1l
OihXS1VzZXJTY3JpcHRJbmplY3Rpb25UaW1lKWluamVjdGlvblRpbWUgZm9yTWFpbkZyYW1lT25s
eTooQk9PTClmb3JNYWluRnJhbWVPbmx5IGluQ29udGVudFdvcmxkOihXS0NvbnRlbnRXb3JsZCAq
KWNvbnRlbnRXb3JsZAogewogICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQogICAgICAg
ICByZXR1cm4gbmlsOwogCi0gICAgQVBJOjpPYmplY3Q6OmNvbnN0cnVjdEluV3JhcHBlcjxBUEk6
OlVzZXJTY3JpcHQ+KHNlbGYsIFdlYkNvcmU6OlVzZXJTY3JpcHQgeyBzb3VyY2UsIEFQSTo6VXNl
clNjcmlwdDo6Z2VuZXJhdGVVbmlxdWVVUkwoKSwgeyB9LCB7IH0sIEFQSTo6dG9XZWJDb3JlVXNl
clNjcmlwdEluamVjdGlvblRpbWUoaW5qZWN0aW9uVGltZSksIGZvck1haW5GcmFtZU9ubHkgPyBX
ZWJDb3JlOjpVc2VyQ29udGVudEluamVjdGVkRnJhbWVzOjpJbmplY3RJblRvcEZyYW1lT25seSA6
IFdlYkNvcmU6OlVzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXM6OkluamVjdEluQWxsRnJhbWVzLCBX
ZWJDb3JlOjpXYWl0Rm9yTm90aWZpY2F0aW9uQmVmb3JlSW5qZWN0aW5nOjpObyB9LCBBUEk6OkNv
bnRlbnRXb3JsZDo6cGFnZUNvbnRlbnRXb3JsZCgpKTsKKyAgICBBUEk6Ok9iamVjdDo6Y29uc3Ry
dWN0SW5XcmFwcGVyPEFQSTo6VXNlclNjcmlwdD4oc2VsZiwgV2ViQ29yZTo6VXNlclNjcmlwdCB7
IHNvdXJjZSwgQVBJOjpVc2VyU2NyaXB0OjpnZW5lcmF0ZVVuaXF1ZVVSTCgpLCB7IH0sIHsgfSwg
QVBJOjp0b1dlYkNvcmVVc2VyU2NyaXB0SW5qZWN0aW9uVGltZShpbmplY3Rpb25UaW1lKSwgZm9y
TWFpbkZyYW1lT25seSA/IFdlYkNvcmU6OlVzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXM6OkluamVj
dEluVG9wRnJhbWVPbmx5IDogV2ViQ29yZTo6VXNlckNvbnRlbnRJbmplY3RlZEZyYW1lczo6SW5q
ZWN0SW5BbGxGcmFtZXMsIFdlYkNvcmU6OldhaXRGb3JOb3RpZmljYXRpb25CZWZvcmVJbmplY3Rp
bmc6Ok5vIH0sIGNvbnRlbnRXb3JsZCA/ICpjb250ZW50V29ybGQtPl9jb250ZW50V29ybGQgOiBB
UEk6OkNvbnRlbnRXb3JsZDo6cGFnZUNvbnRlbnRXb3JsZCgpKTsKIAogICAgIHJldHVybiBzZWxm
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5oCmlu
ZGV4IDZjODJhNjhlNDI4MzY3NDUxMzMxYjY5MjczMGU5MjI5NWM1MDExZmYuLmYxZjdjZGRlMzRj
OTg5ODdjOWRhOTE4ODIwOGUyN2NlNmM4Mzc3OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3LmgKQEAgLTM4LDYgKzM4LDcgQEAgTlNfQVNTVU1FX05P
Tk5VTExfQkVHSU4KIEBjbGFzcyBXS0NvbnRlbnRXb3JsZDsKIEBjbGFzcyBXS0ZpbmRDb25maWd1
cmF0aW9uOwogQGNsYXNzIFdLRmluZFJlc3VsdDsKK0BjbGFzcyBXS0ZyYW1lSW5mbzsKIEBjbGFz
cyBXS05hdmlnYXRpb247CiBAY2xhc3MgV0tQREZDb25maWd1cmF0aW9uOwogQGNsYXNzIFdLU25h
cHNob3RDb25maWd1cmF0aW9uOwpAQCAtMjIwLDE0ICsyMjEsMjUgQEAgV0tfQ0xBU1NfQVZBSUxB
QkxFKG1hY29zKDEwLjEwKSwgaW9zKDguMCkpCiAgQHBhcmFtIGphdmFTY3JpcHRTdHJpbmcgVGhl
IEphdmFTY3JpcHQgc3RyaW5nIHRvIGV2YWx1YXRlLgogIEBwYXJhbSBjb21wbGV0aW9uSGFuZGxl
ciBBIGJsb2NrIHRvIGludm9rZSB3aGVuIHNjcmlwdCBldmFsdWF0aW9uIGNvbXBsZXRlcyBvciBm
YWlscy4KICBAZGlzY3Vzc2lvbiBUaGUgY29tcGxldGlvbkhhbmRsZXIgaXMgcGFzc2VkIHRoZSBy
ZXN1bHQgb2YgdGhlIHNjcmlwdCBldmFsdWF0aW9uIG9yIGFuIGVycm9yLgorIENhbGxpbmcgdGhp
cyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIGBldmFsdWF0ZUphdmFTY3JpcHQ6aW5G
cmFtZTppbkNvbnRlbnRXb3JsZDpjb21wbGV0aW9uSGFuZGxlcjpgIHdpdGg6CisgICAtIEEgYGZy
YW1lYCB2YWx1ZSBvZiBgbmlsYCB0byByZXByZXNlbnQgdGhlIG1haW4gZnJhbWUKKyAgIC0gQSBg
Y29udGVudFdvcmxkYCB2YWx1ZSBvZiBgV0tDb250ZW50V29ybGQucGFnZVdvcmxkYAogKi8KIC0g
KHZvaWQpZXZhbHVhdGVKYXZhU2NyaXB0OihOU1N0cmluZyAqKWphdmFTY3JpcHRTdHJpbmcgY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4gX051bGxhYmxlKShfTnVsbGFibGUgaWQsIE5TRXJyb3Ig
KiBfTnVsbGFibGUgZXJyb3IpKWNvbXBsZXRpb25IYW5kbGVyOwogCiAvKiBAYWJzdHJhY3QgRXZh
bHVhdGVzIHRoZSBnaXZlbiBKYXZhU2NyaXB0IHN0cmluZy4KICBAcGFyYW0gamF2YVNjcmlwdFN0
cmluZyBUaGUgSmF2YVNjcmlwdCBzdHJpbmcgdG8gZXZhbHVhdGUuCisgQHBhcmFtIGZyYW1lIEEg
V0tGcmFtZUluZm8gaWRlbnRpZnlpbmcgdGhlIGZyYW1lIGluIHdoaWNoIHRvIGV2YWx1YXRlIHRo
ZSBKYXZhU2NyaXB0IHN0cmluZy4KICBAcGFyYW0gY29udGVudFdvcmxkIFRoZSBXS0NvbnRlbnRX
b3JsZCBpbiB3aGljaCB0byBldmFsdWF0ZSB0aGUgSmF2YVNjcmlwdCBzdHJpbmcuCiAgQHBhcmFt
IGNvbXBsZXRpb25IYW5kbGVyIEEgYmxvY2sgdG8gaW52b2tlIHdoZW4gc2NyaXB0IGV2YWx1YXRp
b24gY29tcGxldGVzIG9yIGZhaWxzLgogIEBkaXNjdXNzaW9uIFRoZSBjb21wbGV0aW9uSGFuZGxl
ciBpcyBwYXNzZWQgdGhlIHJlc3VsdCBvZiB0aGUgc2NyaXB0IGV2YWx1YXRpb24gb3IgYW4gZXJy
b3IuCisKKyBQYXNzaW5nIGBuaWxgIGZvciB0aGUgZnJhbWUgYXJndW1lbnQgaXMgZXF1aXZhbGVu
dCB0byBwYXNzaW5nIGluIGEgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBtYWluIGZyYW1lIG9mIHRo
ZSBXS1dlYlZpZXcuCisgSWYgdGhlIGZyYW1lIGFyZ3VtZW50IG5vIGxvbmdlciByZXByZXNlbnRz
IGEgdmFsaWQgZnJhbWUgYnkgdGhlIHRpbWUgV2ViS2l0IGF0dGVtcHRzIHRvIGNhbGwgdGhlIEph
dmFTY3JpcHQgZnVuY3Rpb24geW91ciBjb21wbGV0aW9uIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQg
d2l0aCBhIFdLRXJyb3JKYXZhU2NyaXB0TWlzc2luZ0ZyYW1lVGFyZ2V0IGVycm9yLgorIFRoaXMg
bWlnaHQgaGFwcGVuIGZvciBhIG51bWJlciBvZiByZWFzb25zLCBpbmNsdWRpbmcgYnV0IG5vdCBs
aW1pdGVkIHRvOgorICAgICAtIFRoZSB0YXJnZXQgZnJhbWUgaGFzIGJlZW4gcmVtb3ZlZCBmcm9t
IHRoZSBET00gdmlhIEphdmFTY3JpcHQKKyAgICAgLSBBIHBhcmVudCBmcmFtZSBoYXMgbmF2aWdh
dGVkLCBkZXN0cm95aW5nIGFsbCBvZiBpdHMgcHJldmlvdXMgY2hpbGQgZnJhbWVzCisKICBObyBt
YXR0ZXIgd2hpY2ggV0tDb250ZW50V29ybGQgeW91IHVzZSB0byBldmFsdWF0ZSB5b3VyIEphdmFT
Y3JpcHQgc3RyaW5nLCB5b3UgY2FuIG1ha2UgY2hhbmdlcyB0byB0aGUgdW5kZXJseWluZyB3ZWIg
Y29udGVudC4gKGUuZy4gdGhlIERvY3VtZW50IGFuZCBpdHMgRE9NIHN0cnVjdHVyZSkKICBTdWNo
IGNoYW5nZXMgd2lsbCBiZSB2aXNpYmxlIHRvIHNjcmlwdCBleGVjdXRpbmcgaW4gYWxsIFdLQ29u
dGVudFdvcmxkcy4KICBFdmFsdWF0aW5nIHlvdXIgSmF2YVNjcmlwdCBzdHJpbmcgY2FuIGxlYXZl
IGJlaGluZCBvdGhlciBjaGFuZ2VzIHRvIGdsb2JhbCBzdGF0ZSB2aXNpYmlsZSB0byBKYXZhU2Ny
aXB0LiAoZS5nLiBgd2luZG93Lm15VmFyaWFibGUgPSAxO2ApCkBAIC0yMzUsMTEgKzI0NywxMiBA
QCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoMTAuMTApLCBpb3MoOC4wKSkKICBldmFsdWF0ZUph
dmFTY3JpcHQ6IGlzIGEgZ3JlYXQgd2F5IHRvIHNldCB1cCBnbG9iYWwgc3RhdGUgZm9yIGZ1dHVy
ZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBpbiBhIGdpdmVuIHdvcmxkLiAoZS5nLiBJbXBvcnRpbmcg
bGlicmFyaWVzL3V0aWxpdGllcyB0aGF0IGZ1dHVyZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbiB3aWxs
IHJlbHkgb24pCiAgT25jZSB5b3VyIGdsb2JhbCBzdGF0ZSBpcyBzZXQgdXAsIGNvbnNpZGVyIHVz
aW5nIGNhbGxBc3luY0phdmFTY3JpcHQ6IGZvciBtb3JlIGZsZXhpYmxlIGludGVyYWN0aW9uIHdp
dGggdGhlIEphdmFTY3JpcHQgcHJvZ3JhbW1pbmcgbW9kZWwuCiAqLwotLSAodm9pZClldmFsdWF0
ZUphdmFTY3JpcHQ6KE5TU3RyaW5nICopamF2YVNjcmlwdFN0cmluZyBpbkNvbnRlbnRXb3JsZDoo
V0tDb250ZW50V29ybGQgKiljb250ZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4g
X051bGxhYmxlKShfTnVsbGFibGUgaWQsIE5TRXJyb3IgKiBfTnVsbGFibGUgZXJyb3IpKWNvbXBs
ZXRpb25IYW5kbGVyIE5TX1JFRklORURfRk9SX1NXSUZUIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKWV2YWx1YXRlSmF2YVNjcmlw
dDooTlNTdHJpbmcgKilqYXZhU2NyaXB0U3RyaW5nIGluRnJhbWU6KG51bGxhYmxlIFdLRnJhbWVJ
bmZvICopZnJhbWUgaW5Db250ZW50V29ybGQ6KFdLQ29udGVudFdvcmxkICopY29udGVudFdvcmxk
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheIF9OdWxsYWJsZSkoX051bGxhYmxlIGlkLCBOU0Vy
cm9yICogX051bGxhYmxlIGVycm9yKSljb21wbGV0aW9uSGFuZGxlciBOU19SRUZJTkVEX0ZPUl9T
V0lGVCBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OwogCiAvKiBAYWJzdHJhY3QgQ2FsbHMgdGhlIGdpdmVuIEphdmFTY3JpcHQgc3RyaW5nIGFzIGFu
IGFzeW5jIEphdmFTY3JpcHQgZnVuY3Rpb24sIHBhc3NpbmcgdGhlIGdpdmVuIG5hbWVkIGFyZ3Vt
ZW50cyB0byB0aGF0IGZ1bmN0aW9uLgogIEBwYXJhbSBmdW5jdGlvbkJvZHkgVGhlIEphdmFTY3Jp
cHQgc3RyaW5nIHRvIHVzZSBhcyB0aGUgZnVuY3Rpb24gYm9keS4KICBAcGFyYW0gYXJndW1lbnRz
IEEgZGljdGlvbmFyeSByZXByZXNlbnRpbmcgdGhlIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8g
dGhlIGZ1bmN0aW9uIGNhbGwuCisgQHBhcmFtIGZyYW1lIEEgV0tGcmFtZUluZm8gaWRlbnRpZnlp
bmcgdGhlIGZyYW1lIGluIHdoaWNoIHRvIGNhbGwgdGhlIEphdmFTY3JpcHQgZnVuY3Rpb24uCiAg
QHBhcmFtIGNvbnRlbnRXb3JsZCBUaGUgV0tDb250ZW50V29ybGQgaW4gd2hpY2ggdG8gY2FsbCB0
aGUgSmF2YVNjcmlwdCBmdW5jdGlvbi4KICBAcGFyYW0gY29tcGxldGlvbkhhbmRsZXIgQSBibG9j
ayB0byBpbnZva2Ugd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBjYWxsLCBv
ciB3aXRoIHRoZSBhc3luY2hyb25vdXMgcmVzb2x1dGlvbiBvZiB0aGUgZnVuY3Rpb24ncyByZXR1
cm4gdmFsdWUuCiAgQGRpc2N1c3Npb24gVGhlIGZ1bmN0aW9uQm9keSBzdHJpbmcgaXMgdHJlYXRl
ZCBhcyBhbiBhbm9ueW1vdXMgSmF2YVNjcmlwdCBmdW5jdGlvbiBib2R5IHRoYXQgY2FuIGJlIGNh
bGxlZCB3aXRoIG5hbWVkIGFyZ3VtZW50cy4KQEAgLTI3MSw2ICsyODQsMTIgQEAgV0tfQ0xBU1Nf
QVZBSUxBQkxFKG1hY29zKDEwLjEwKSwgaW9zKDguMCkpCiAgTlNOdW1iZXIsIE5TU3RyaW5nLCBO
U0RhdGUsIE5TQXJyYXksIE5TRGljdGlvbmFyeSwgYW5kIE5TTnVsbC4KICBBbnkgTlNBcnJheSBv
ciBOU0RpY3Rpb25hcnkgY29udGFpbmVycyBjYW4gb25seSBjb250YWluIG9iamVjdHMgb2YgdGhv
c2UgdHlwZXMuCiAKKyBQYXNzaW5nIGBuaWxgIGZvciB0aGUgZnJhbWUgYXJndW1lbnQgaXMgZXF1
aXZhbGVudCB0byBwYXNzaW5nIGluIGEgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBtYWluIGZyYW1l
IG9mIHRoZSBXS1dlYlZpZXcuCisgSWYgdGhlIGZyYW1lIGFyZ3VtZW50IG5vIGxvbmdlciByZXBy
ZXNlbnRzIGEgdmFsaWQgZnJhbWUgYnkgdGhlIHRpbWUgV2ViS2l0IGF0dGVtcHRzIHRvIGNhbGwg
dGhlIEphdmFTY3JpcHQgZnVuY3Rpb24geW91ciBjb21wbGV0aW9uIGhhbmRsZXIgd2lsbCBiZSBj
YWxsZWQgd2l0aCBhIFdLRXJyb3JKYXZhU2NyaXB0TWlzc2luZ0ZyYW1lVGFyZ2V0IGVycm9yLgor
IFRoaXMgbWlnaHQgaGFwcGVuIGZvciBhIG51bWJlciBvZiByZWFzb25zLCBpbmNsdWRpbmcgYnV0
IG5vdCBsaW1pdGVkIHRvOgorICAgICAtIFRoZSB0YXJnZXQgZnJhbWUgaGFzIGJlZW4gcmVtb3Zl
ZCBmcm9tIHRoZSBET00gdmlhIEphdmFTY3JpcHQKKyAgICAgLSBBIHBhcmVudCBmcmFtZSBoYXMg
bmF2aWdhdGVkLCBkZXN0cm95aW5nIGFsbCBvZiBpdHMgcHJldmlvdXMgY2hpbGQgZnJhbWVzCisK
ICBObyBtYXR0ZXIgd2hpY2ggV0tDb250ZW50V29ybGQgeW91IHVzZSB0byBjYWxsIHlvdXIgSmF2
YVNjcmlwdCBmdW5jdGlvbiwgeW91IGNhbiBtYWtlIGNoYW5nZXMgdG8gdGhlIHVuZGVybHlpbmcg
d2ViIGNvbnRlbnQuIChlLmcuIHRoZSBEb2N1bWVudCBhbmQgaXRzIERPTSBzdHJ1Y3R1cmUpCiAg
U3VjaCBjaGFuZ2VzIHdpbGwgYmUgdmlzaWJsZSB0byBzY3JpcHQgZXhlY3V0aW5nIGluIGFsbCBX
S0NvbnRlbnRXb3JsZHMuCiAgQ2FsbGluZyB5b3VyIEphdmFTY3JpcHQgZnVuY3Rpb24gY2FuIGxl
YXZlIGJlaGluZCBvdGhlciBjaGFuZ2VzIHRvIGdsb2JhbCBzdGF0ZSB2aXNpYmlsZSB0byBKYXZh
U2NyaXB0LiAoZS5nLiBgd2luZG93Lm15VmFyaWFibGUgPSAxO2ApCkBAIC0zMDAsNyArMzE5LDcg
QEAgV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKDEwLjEwKSwgaW9zKDguMCkpCiAKICBUaGUgYWJv
dmUgZnVuY3Rpb24gdGV4dCB3aWxsIGNyZWF0ZSBhIHByb21pc2UgdGhhdCB3aWxsIGZ1bGZ1bGwg
d2l0aCB0aGUgdmFsdWUgNDIgYWZ0ZXIgYSBvbmUgc2Vjb25kIGRlbGF5LCB3YWl0IGZvciBpdCB0
byByZXNvbHZlLCB0aGVuIHJldHVybiB0aGUgZnVsZmlsbG1lbnQgdmFsdWUgb2YgNDIuCiAqLwot
LSAodm9pZCljYWxsQXN5bmNKYXZhU2NyaXB0OihOU1N0cmluZyAqKWZ1bmN0aW9uQm9keSBhcmd1
bWVudHM6KG51bGxhYmxlIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilhcmd1bWVudHMg
aW5Db250ZW50V29ybGQ6KFdLQ29udGVudFdvcmxkICopY29udGVudFdvcmxkIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheIF9OdWxsYWJsZSkoX051bGxhYmxlIGlkLCBOU0Vycm9yICogX051bGxh
YmxlIGVycm9yKSljb21wbGV0aW9uSGFuZGxlciBOU19SRUZJTkVEX0ZPUl9TV0lGVCBXS19BUElf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClj
YWxsQXN5bmNKYXZhU2NyaXB0OihOU1N0cmluZyAqKWZ1bmN0aW9uQm9keSBhcmd1bWVudHM6KG51
bGxhYmxlIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilhcmd1bWVudHMgaW5GcmFtZToo
bnVsbGFibGUgV0tGcmFtZUluZm8gKilmcmFtZSBpbkNvbnRlbnRXb3JsZDooV0tDb250ZW50V29y
bGQgKiljb250ZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4gX051bGxhYmxlKShf
TnVsbGFibGUgaWQsIE5TRXJyb3IgKiBfTnVsbGFibGUgZXJyb3IpKWNvbXBsZXRpb25IYW5kbGVy
IE5TX1JFRklORURfRk9SX1NXSUZUIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CiAKIC8qISBAYWJzdHJhY3QgR2V0IGEgc25hcHNob3QgZm9yIHRo
ZSB2aXNpYmxlIHZpZXdwb3J0IG9mIFdLV2ViVmlldy4KICBAcGFyYW0gc25hcHNob3RDb25maWd1
cmF0aW9uIEFuIG9iamVjdCB0aGF0IHNwZWNpZmllcyBob3cgdGhlIHNuYXBzaG90IGlzIGNvbmZp
Z3VyZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5t
bQppbmRleCAxMjg4NGFlMDE0YzU4MDI1ODZhYmI3YzcyMTA1ZWQ5YTU2N2FiODM5Li40YTNlMGE1
NTE4MmE2NTlhOTU4MWJkZGE1NGY0ZWUxMTAzZDdlMzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KQEAgLTgyNCw5ICs4MjQsMTQgQEAgLSAo
dm9pZClldmFsdWF0ZUphdmFTY3JpcHQ6KE5TU3RyaW5nICopamF2YVNjcmlwdFN0cmluZyBpbkNv
bnRlbnRXb3JsZDooV0tDb250ZW4KICAgICBbc2VsZiBfZXZhbHVhdGVKYXZhU2NyaXB0OmphdmFT
Y3JpcHRTdHJpbmcgYXNBc3luY0Z1bmN0aW9uOk5PIHdpdGhTb3VyY2VVUkw6bmlsIHdpdGhBcmd1
bWVudHM6bmlsIGZvcmNlVXNlckdlc3R1cmU6WUVTIGluRnJhbWU6bmlsIGluV29ybGQ6Y29udGVu
dFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKIH0KIAotLSAodm9p
ZCljYWxsQXN5bmNKYXZhU2NyaXB0OihOU1N0cmluZyAqKWphdmFTY3JpcHRTdHJpbmcgYXJndW1l
bnRzOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopYXJndW1lbnRzIGluQ29udGVudFdv
cmxkOihXS0NvbnRlbnRXb3JsZCAqKWNvbnRlbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikoaWQsIE5TRXJyb3IgKmVycm9yKSljb21wbGV0aW9uSGFuZGxlcgorLSAodm9pZClldmFs
dWF0ZUphdmFTY3JpcHQ6KE5TU3RyaW5nICopamF2YVNjcmlwdFN0cmluZyBpbkZyYW1lOihXS0Zy
YW1lSW5mbyAqKWZyYW1lIGluQ29udGVudFdvcmxkOihXS0NvbnRlbnRXb3JsZCAqKWNvbnRlbnRX
b3JsZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoaWQsIE5TRXJyb3IgKikpY29tcGxldGlv
bkhhbmRsZXIKIHsKLSAgICBbc2VsZiBfZXZhbHVhdGVKYXZhU2NyaXB0OmphdmFTY3JpcHRTdHJp
bmcgYXNBc3luY0Z1bmN0aW9uOllFUyB3aXRoU291cmNlVVJMOm5pbCB3aXRoQXJndW1lbnRzOmFy
Z3VtZW50cyBmb3JjZVVzZXJHZXN0dXJlOllFUyBpbkZyYW1lOm5pbCBpbldvcmxkOmNvbnRlbnRX
b3JsZCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CisgICAgW3NlbGYgX2V2
YWx1YXRlSmF2YVNjcmlwdDpqYXZhU2NyaXB0U3RyaW5nIGFzQXN5bmNGdW5jdGlvbjpOTyB3aXRo
U291cmNlVVJMOm5pbCB3aXRoQXJndW1lbnRzOm5pbCBmb3JjZVVzZXJHZXN0dXJlOllFUyBpbkZy
YW1lOmZyYW1lIGluV29ybGQ6Y29udGVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRp
b25IYW5kbGVyXTsKK30KKworLSAodm9pZCljYWxsQXN5bmNKYXZhU2NyaXB0OihOU1N0cmluZyAq
KWphdmFTY3JpcHRTdHJpbmcgYXJndW1lbnRzOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopYXJndW1lbnRzIGluRnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgaW5Db250ZW50V29ybGQ6
KFdLQ29udGVudFdvcmxkICopY29udGVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShpZCwgTlNFcnJvciAqZXJyb3IpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgW3NlbGYgX2V2
YWx1YXRlSmF2YVNjcmlwdDpqYXZhU2NyaXB0U3RyaW5nIGFzQXN5bmNGdW5jdGlvbjpZRVMgd2l0
aFNvdXJjZVVSTDpuaWwgd2l0aEFyZ3VtZW50czphcmd1bWVudHMgZm9yY2VVc2VyR2VzdHVyZTpZ
RVMgaW5GcmFtZTpmcmFtZSBpbldvcmxkOmNvbnRlbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpj
b21wbGV0aW9uSGFuZGxlcl07CiB9CiAKIHN0YXRpYyBib29sIHZhbGlkYXRlQXJndW1lbnQoaWQg
YXJndW1lbnQpCkBAIC04NjMsNiArODY4LDI3IEBAIHN0YXRpYyBib29sIHZhbGlkYXRlQXJndW1l
bnQoaWQgYXJndW1lbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgUmV0YWluUHRy
PE5TRXJyb3I+IG5zRXJyb3JGcm9tRXhjZXB0aW9uRGV0YWlscyhjb25zdCBXZWJDb3JlOjpFeGNl
cHRpb25EZXRhaWxzJiBkZXRhaWxzKQoreworICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9u
YXJ5PiB1c2VySW5mbyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0
XSk7CisKKyAgICBXS0Vycm9yQ29kZSBlcnJvckNvZGU7CisgICAgaWYgKGRldGFpbHMudHlwZSA9
PSBXZWJDb3JlOjpFeGNlcHRpb25EZXRhaWxzOjpUeXBlOjpJbnZhbGlkVGFyZ2V0RnJhbWUpCisg
ICAgICAgIGVycm9yQ29kZSA9IFdLRXJyb3JKYXZhU2NyaXB0TWlzc2luZ0ZyYW1lVGFyZ2V0Owor
ICAgIGVsc2UKKyAgICAgICAgZXJyb3JDb2RlID0gV0tFcnJvckphdmFTY3JpcHRFeGNlcHRpb25P
Y2N1cnJlZDsKKworICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6bG9jYWxpemVkRGVzY3JpcHRpb25G
b3JFcnJvckNvZGUoZXJyb3JDb2RlKSBmb3JLZXk6TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleV07
CisgICAgW3VzZXJJbmZvIHNldE9iamVjdDpzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihkZXRhaWxz
Lm1lc3NhZ2UpIGZvcktleTpfV0tKYXZhU2NyaXB0RXhjZXB0aW9uTWVzc2FnZUVycm9yS2V5XTsK
KyAgICBbdXNlckluZm8gc2V0T2JqZWN0OkAoZGV0YWlscy5saW5lTnVtYmVyKSBmb3JLZXk6X1dL
SmF2YVNjcmlwdEV4Y2VwdGlvbkxpbmVOdW1iZXJFcnJvcktleV07CisgICAgW3VzZXJJbmZvIHNl
dE9iamVjdDpAKGRldGFpbHMuY29sdW1uTnVtYmVyKSBmb3JLZXk6X1dLSmF2YVNjcmlwdEV4Y2Vw
dGlvbkNvbHVtbk51bWJlckVycm9yS2V5XTsKKworICAgIGlmICghZGV0YWlscy5zb3VyY2VVUkwu
aXNFbXB0eSgpKQorICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0OltOU1VSTCBfd2ViX1VSTFdp
dGhXVEZTdHJpbmc6ZGV0YWlscy5zb3VyY2VVUkxdIGZvcktleTpfV0tKYXZhU2NyaXB0RXhjZXB0
aW9uU291cmNlVVJMRXJyb3JLZXldOworCisgICAgcmV0dXJuIGFkb3B0TlMoW1tOU0Vycm9yIGFs
bG9jXSBpbml0V2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6ZXJyb3JDb2RlIHVzZXJJbmZv
OnVzZXJJbmZvLmdldCgpXSk7Cit9CisKIC0gKHZvaWQpX2V2YWx1YXRlSmF2YVNjcmlwdDooTlNT
dHJpbmcgKilqYXZhU2NyaXB0U3RyaW5nIGFzQXN5bmNGdW5jdGlvbjooQk9PTClhc0FzeW5jRnVu
Y3Rpb24gd2l0aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VVUkwgd2l0aEFyZ3VtZW50czooTlNE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKWFyZ3VtZW50cyBmb3JjZVVzZXJHZXN0dXJlOihC
T09MKWZvcmNlVXNlckdlc3R1cmUgaW5GcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBpbldvcmxk
OihXS0NvbnRlbnRXb3JsZCAqKXdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShpZCwg
TlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewogICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0
TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKQEAgLTkyOSwxOCArOTU1LDggQEAgLSAodm9p
ZClfZXZhbHVhdGVKYXZhU2NyaXB0OihOU1N0cmluZyAqKWphdmFTY3JpcHRTdHJpbmcgYXNBc3lu
Y0Z1bmN0aW9uOihCT09MKWEKICAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKGlk
LCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CiAgICAgICAgIGlmIChkZXRhaWxzKSB7CiAgICAg
ICAgICAgICBBU1NFUlQoIXNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk7Ci0KLSAgICAgICAgICAgIFJl
dGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiB1c2VySW5mbyA9IGFkb3B0TlMoW1tOU011dGFi
bGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0KLSAgICAgICAgICAgIFt1c2VySW5mbyBzZXRP
YmplY3Q6bG9jYWxpemVkRGVzY3JpcHRpb25Gb3JFcnJvckNvZGUoV0tFcnJvckphdmFTY3JpcHRF
eGNlcHRpb25PY2N1cnJlZCkgZm9yS2V5Ok5TTG9jYWxpemVkRGVzY3JpcHRpb25LZXldOwotICAg
ICAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDpzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihkZXRh
aWxzLT5tZXNzYWdlKSBmb3JLZXk6X1dLSmF2YVNjcmlwdEV4Y2VwdGlvbk1lc3NhZ2VFcnJvcktl
eV07Ci0gICAgICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0OkAoZGV0YWlscy0+bGluZU51bWJl
cikgZm9yS2V5Ol9XS0phdmFTY3JpcHRFeGNlcHRpb25MaW5lTnVtYmVyRXJyb3JLZXldOwotICAg
ICAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDpAKGRldGFpbHMtPmNvbHVtbk51bWJlcikgZm9y
S2V5Ol9XS0phdmFTY3JpcHRFeGNlcHRpb25Db2x1bW5OdW1iZXJFcnJvcktleV07Ci0KLSAgICAg
ICAgICAgIGlmICghZGV0YWlscy0+c291cmNlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICBbdXNlckluZm8gc2V0T2JqZWN0OltOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6ZGV0YWls
cy0+c291cmNlVVJMXSBmb3JLZXk6X1dLSmF2YVNjcmlwdEV4Y2VwdGlvblNvdXJjZVVSTEVycm9y
S2V5XTsKLQotICAgICAgICAgICAgcmF3SGFuZGxlcihuaWwsIGFkb3B0TlMoW1tOU0Vycm9yIGFs
bG9jXSBpbml0V2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6V0tFcnJvckphdmFTY3JpcHRF
eGNlcHRpb25PY2N1cnJlZCB1c2VySW5mbzp1c2VySW5mby5nZXQoKV0pLmdldCgpKTsKKyAgICAg
ICAgICAgIGF1dG8gZXJyb3IgPSBuc0Vycm9yRnJvbUV4Y2VwdGlvbkRldGFpbHMoKmRldGFpbHMp
OworICAgICAgICAgICAgcmF3SGFuZGxlcihuaWwsIGVycm9yLmdldCgpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCmluZGV4IDA5NjVkMmMwMDcyMGUxNTcwMzMxZDMwZTEwOGU1ZTFkYmFiMzU1
OTEuLmM3YzkxZWE4YmUyYWJhNzZmYmJkNzNlZmFmZWExMTU0ZTc5MWRjMzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zNDEyLDcgKzM0MTIs
NyBAQCB2b2lkIFdlYlBhZ2U6OnJ1bkphdmFTY3JpcHQoV2ViRnJhbWUqIGZyYW1lLCBSdW5KYXZh
U2NyaXB0UGFyYW1ldGVycyYmIHBhcmFtZXRlcgogICAgIC8vIGRpc2FwcGVhciBkdXJpbmcgc2Ny
aXB0IGV4ZWN1dGlvbi4KIAogICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5jb3JlRnJhbWUoKSkg
ewotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNjcmlwdFZhbHVlQ2FsbGJh
Y2soeyB9LCBFeGNlcHRpb25EZXRhaWxzIHsgIlVuYWJsZSB0byBleGVjdXRlIEphdmFTY3JpcHQ6
IFBhZ2UgaXMgaW4gaW52YWxpZCBzdGF0ZSJfcyB9LCBjYWxsYmFja0lEKSk7CisgICAgICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2NyaXB0VmFsdWVDYWxsYmFjayh7IH0sIEV4Y2Vw
dGlvbkRldGFpbHMgeyAiVW5hYmxlIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdDogVGFyZ2V0IGZyYW1l
IGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcGFnZSJfcywgMCwgMCwgRXhjZXB0aW9uRGV0YWls
czo6VHlwZTo6SW52YWxpZFRhcmdldEZyYW1lIH0sIGNhbGxiYWNrSUQpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDY0ZTcyZjhjMmUzZDE0YjJjNTU5OGU3ODY1MzUxODBhZjg2M2VhNDQuLmMxYmM0
NDhmZmEwOWJhYTljZTAxNGQyNmY3ZDc5ODlhYjA1YzRlMWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAyMC0wNi0y
OSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgSmF2YVNjcmlw
dCBjYW5ub3QgYmUgaW5qZWN0ZWQgaW50byBpZnJhbWVzCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS81NDE2ODk0Nj4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTM1NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQXN5bmNGdW5jdGlvbi5tbToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvVXNlckNvbnRlbnRDb250cm9sbGVyLm1tOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1VSTFNjaGVtZUhhbmRs
ZXItMS5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2Vi
Vmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAoLVtG
cmFtZXNNZXNzYWdlSGFuZGxlciB1c2VyQ29udGVudENvbnRyb2xsZXI6ZGlkUmVjZWl2ZVNjcmlw
dE1lc3NhZ2U6XSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3
Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgb2JqZWN0QnlDYWxsaW5nQXN5bmNGdW5jdGlvbjp3
aXRoQXJndW1lbnRzOmVycm9yOl0pOgorCiAyMDIwLTA2LTE2ICBDaGFybGllIFR1cm5lciAgPGN0
dXJuZXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBEaXNhYmxlIHZpZGVvIGF1dG9wbGF5
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0FzeW5j
RnVuY3Rpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0FzeW5j
RnVuY3Rpb24ubW0KaW5kZXggZWJiNWI4NWVmN2Y0ZjdjMmZiZjExNjcwZmYwYzEwM2JlZDVjYzZh
ZS4uYTQ5Mjc1NzgzZDhhZGIwMWEyMWE0NGRjNTdhNDE2NGYwMDEzMDRlMSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Bc3luY0Z1bmN0aW9uLm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQXN5bmNGdW5jdGlvbi5t
bQpAQCAtMTgzLDEyICsxODMsMTIgQEAgVEVTVChBc3luY0Z1bmN0aW9uLCBQcm9taXNlKQogewog
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CiAKLSAgICBbd2ViVmlldyBjYWxs
QXN5bmNKYXZhU2NyaXB0OkAic2hvdWxkbid0IGNyYXNoIiBhcmd1bWVudHM6QHsgQCJpbnZhbGlk
cGFyYW1ldGVyIiA6IHdlYlZpZXcuZ2V0KCkgfSBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3Js
ZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyAgICBbd2ViVmlldyBjYWxsQXN5
bmNKYXZhU2NyaXB0OkAic2hvdWxkbid0IGNyYXNoIiBhcmd1bWVudHM6QHsgQCJpbnZhbGlkcGFy
YW1ldGVyIiA6IHdlYlZpZXcuZ2V0KCkgfSBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0Nv
bnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKIAogICAgIE5TU3Ry
aW5nICpmdW5jdGlvbkJvZHkgPSBAInJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZl
LCByZWplY3QpIHsgc2V0VGltZW91dChmdW5jdGlvbigpeyByZXNvbHZlKDQyKSB9LCAwKTsgfSki
OwogCiAgICAgYm9vbCBkb25lID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNj
cmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRX
b3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3Ig
KmVycm9yKSB7CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkg
YXJndW1lbnRzOm5pbCBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5w
YWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9y
KSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jl
c3VsdCBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKTsKICAgICAgICAgRVhQRUNUX1RS
VUUoW3Jlc3VsdCBpc0VxdWFsVG9OdW1iZXI6QDQyXSk7CkBAIC0yMDAsNyArMjAwLDcgQEAgVEVT
VChBc3luY0Z1bmN0aW9uLCBQcm9taXNlKQogICAgIGZ1bmN0aW9uQm9keSA9IEAicmV0dXJuIG5l
dyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCl7IHJlamVjdCgnUmVqZWN0ZWQhJykgfSwgMCk7IH0pIjsKIAogICAgIGRvbmUgPSBmYWxzZTsK
LSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6
bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFu
ZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxs
QXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluRnJhbWU6bmlsIGlu
Q29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpb
Jl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwocmVz
dWx0KTsKICAgICAgICAgRVhQRUNUX1RSVUUoZXJyb3IgIT0gbmlsKTsKICAgICAgICAgRVhQRUNU
X1RSVUUoW1tlcnJvciBkZXNjcmlwdGlvbl0gY29udGFpbnNTdHJpbmc6QCJSZWplY3RlZCEiXSk7
CkBAIC0yMTEsNyArMjExLDcgQEAgVEVTVChBc3luY0Z1bmN0aW9uLCBQcm9taXNlKQogICAgIGZ1
bmN0aW9uQm9keSA9IEAibGV0IHAgPSBuZXcgUHJveHkoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0
KSB7IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHJlc29sdmUoNDIpOyB9LCAwKTsgfSwgeyB9KTsg
cmV0dXJuIHsgdGhlbjogcCB9OyI7CiAKICAgICBkb25lID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcg
Y2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5pbCBpbkNvbnRlbnRX
b3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCBy
ZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlw
dDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5pbCBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpX
S0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQs
IE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKICAgICAgICAg
RVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKTsKICAg
ICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9OdW1iZXI6QDQyXSk7CkBAIC0yMjIs
NyArMjIyLDcgQEAgVEVTVChBc3luY0Z1bmN0aW9uLCBQcm9taXNlKQogICAgIGZ1bmN0aW9uQm9k
eSA9IEAibGV0IHAgPSBuZXcgUHJveHkoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7IHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7IHJlamVjdCgnUmVqZWN0ZWQhJyk7IH0sIDApOyB9LCB7IH0pOyBy
ZXR1cm4geyB0aGVuOiBwIH07IjsKIAogICAgIGRvbmUgPSBmYWxzZTsKLSAgICBbd2ViVmlldyBj
YWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluQ29udGVudFdv
cmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJl
c3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0
OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOldL
Q29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwg
TlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwocmVzdWx0KTsKICAgICAgICAg
RVhQRUNUX1RSVUUoZXJyb3IgIT0gbmlsKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW1tlcnJvciBk
ZXNjcmlwdGlvbl0gY29udGFpbnNTdHJpbmc6QCJSZWplY3RlZCEiXSk7CkBAIC0yMzQsNyArMjM0
LDcgQEAgVEVTVChBc3luY0Z1bmN0aW9uLCBQcm9taXNlKQogICAgIGZ1bmN0aW9uQm9keSA9IEAi
dmFyIHIgPSAwOyB2YXIgcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKGZ1bGZpbGwsIHJlamVjdCkg
eyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHIgPSA0MjsgZnVsZmlsbCgpOyB9LCA1KTt9KTsgYXdh
aXQgcDsgcmV0dXJuIHI7IjsKIAogICAgIGRvbmUgPSBmYWxzZTsKLSAgICBbd2ViVmlldyBjYWxs
QXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluQ29udGVudFdvcmxk
OldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3Vs
dCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1
bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOldLQ29u
dGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNF
cnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwogICAgICAgICBFWFBF
Q1RfVFJVRShbcmVzdWx0IGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pOwogICAgICAg
ICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb051bWJlcjpANDJdKTsKQEAgLTI0Niw3ICsy
NDYsNyBAQCBURVNUKEFzeW5jRnVuY3Rpb24sIFByb21pc2UpCiAgICAgZnVuY3Rpb25Cb2R5ID0g
QCJ2YXIgcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKGZ1bGZpbGwsIHJlamVjdCkgeyBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCl7IGZ1bGZpbGwoJ0Z1bGZpbGxlZCEnKSB9LCA1KTt9KTsgYXdhaXQgcDsg
cmV0dXJuIHA7IjsKIAogICAgIGRvbmUgPSBmYWxzZTsKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNK
YXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluQ29udGVudFdvcmxkOldLQ29u
dGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNF
cnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9u
Qm9keSBhcmd1bWVudHM6bmlsIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdv
cmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAq
ZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwogICAgICAgICBFWFBFQ1RfVFJV
RShbcmVzdWx0IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOwogICAgICAgICBFWFBF
Q1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb1N0cmluZzpAIkZ1bGZpbGxlZCEiXSk7CkBAIC0yNTgs
NyArMjU4LDcgQEAgVEVTVChBc3luY0Z1bmN0aW9uLCBQcm9taXNlKQogICAgIGZ1bmN0aW9uQm9k
eSA9IEAidmFyIHAgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocikgeyByKG5ldyBQcm9taXNlKGZ1
bmN0aW9uIChyKSB7IHIoNDIpOyB9KSk7IH0pOyBhd2FpdCBwOyByZXR1cm4gJ0RvbmUnOyI7CiAK
ICAgICBkb25lID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5j
dGlvbkJvZHkgYXJndW1lbnRzOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdl
V29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7
CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRz
Om5pbCBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQg
Y29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAg
ICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0tp
bmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3Vs
dCBpc0VxdWFsVG9TdHJpbmc6QCJEb25lIl0pOwpAQCAtMjcwLDcgKzI3MCw3IEBAIFRFU1QoQXN5
bmNGdW5jdGlvbiwgUHJvbWlzZSkKICAgICBkb25lID0gZmFsc2U7CiAgICAgZnVuY3Rpb25Cb2R5
ID0gQCJyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7IH0pIjsK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDUwMDsgKytpKSB7Ci0gICAgICAgIFt3ZWJWaWV3IGNh
bGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpuaWwgaW5Db250ZW50V29y
bGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVz
dWx0LCBOU0Vycm9yICplcnJvcikgeworICAgICAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2Ny
aXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxk
OldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3Vs
dCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgICAgIEVYUEVDVF9OVUxMKHJlc3VsdCk7CiAg
ICAgICAgICAgICBFWFBFQ1RfVFJVRShlcnJvciAhPSBuaWwpOwogICAgICAgICAgICAgRVhQRUNU
X1RSVUUoW1tlcnJvciBkZXNjcmlwdGlvbl0gY29udGFpbnNTdHJpbmc6QCJubyBsb25nZXIgcmVh
Y2hhYmxlIl0pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Vc2VyQ29udGVudENvbnRyb2xsZXIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1VzZXJDb250ZW50Q29udHJvbGxlci5tbQppbmRleCA0MjM3ZTEyMzNiM2Yw
NDhhYTkwM2EzNmVmYjhlMGYzN2Q0YTNmMGJmLi4xNWE5M2RhYmVmMjMxZDQ1YmViMDYyM2RlZTdl
ZDYxZGUyMGUzMDFhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1VzZXJDb250ZW50Q29udHJvbGxlci5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1VzZXJDb250ZW50Q29udHJvbGxlci5tbQpAQCAtMjIxLDcgKzIy
MSw3IEBAIFRFU1QoV0tVc2VyQ29udGVudENvbnRyb2xsZXIsIFNjcmlwdE1lc3NhZ2VIYW5kbGVy
Q2FsbFJlbW92ZWRIYW5kbGVyKQogCiAgICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKICAg
ICAvLyBUZXN0IHRoYXQgd2UgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHlvdSB0cnkgdG8gdXNlIGEg
bWVzc2FnZSBoYW5kbGVyIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZC4KLSAgICBbd2ViVmlldyBjYWxs
QXN5bmNKYXZhU2NyaXB0OkAicmV0dXJuIGhhbmRsZXJUb1JlbW92ZS5wb3N0TWVzc2FnZSgnRkFJ
TCcpIiBhcmd1bWVudHM6bmlsIGluQ29udGVudFdvcmxkOltXS0NvbnRlbnRXb3JsZCBwYWdlV29y
bGRdIGNvbXBsZXRpb25IYW5kbGVyOl4gKGlkIHZhbHVlLCBOU0Vycm9yICogZXJyb3IpIHsKKyAg
ICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OkAicmV0dXJuIGhhbmRsZXJUb1JlbW92ZS5w
b3N0TWVzc2FnZSgnRkFJTCcpIiBhcmd1bWVudHM6bmlsIGluRnJhbWU6bmlsIGluQ29udGVudFdv
cmxkOltXS0NvbnRlbnRXb3JsZCBwYWdlV29ybGRdIGNvbXBsZXRpb25IYW5kbGVyOl4gKGlkIHZh
bHVlLCBOU0Vycm9yICogZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwodmFsdWUpOwogICAg
ICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOwogICAgICAgICBFWFBFQ1RfVFJVRShbW2Vycm9y
IGRlc2NyaXB0aW9uXSBjb250YWluc1N0cmluZzpAIkludmFsaWRBY2Nlc3NFcnJvciJdKTsKQEAg
LTEwMTIsNyArMTAxMiw3IEBAIFRFU1QoV0tVc2VyQ29udGVudENvbnRyb2xsZXIsIE1lc3NhZ2VI
YW5kbGVyQVBJKQogICAgIE5TU3RyaW5nICpmdW5jdGlvbkJvZHkgPSBAInZhciBwID0gd2luZG93
LndlYmtpdC5tZXNzYWdlSGFuZGxlcnNbaGFuZGxlcl0ucG9zdE1lc3NhZ2UoYXJnKTsgYXdhaXQg
cDsgcmV0dXJuIHA7IjsKIAogICAgIC8vIHBhZ2VXb3JsZCBpcyB3aGVyZSB0ZXN0aGFuZGxlcjEg
bGl2ZXMKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1
bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhhbmRsZXIxIiwgQCJhcmciIDogQDEgfSBpbkNv
bnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZd
IChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2
YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxlciIgOiBAInRlc3RIYW5k
bGVyMSIsIEAiYXJnIiA6IEAxIH0gaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50
V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9y
ICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CiAgICAgICAgIEVYUEVDVF9U
UlVFKFtyZXN1bHQgaXNFcXVhbFRvTnVtYmVyOkAxXSk7CiAgICAgICAgIGRvbmUgPSB0cnVlOwpA
QCAtMTAyMSw3ICsxMDIxLDcgQEAgVEVTVChXS1VzZXJDb250ZW50Q29udHJvbGxlciwgTWVzc2Fn
ZUhhbmRsZXJBUEkpCiAgICAgZG9uZSA9IGZhbHNlOwogCiAgICAgLy8gVHJ5aW5nIHRvIGZpbmQg
dGVzdEhhbmRsZXIxIGluIHRoZSBkZWZhdWx0Q2xpZW50V29ybGQgc2hvdWxkIGZhaWwKLSAgICBb
d2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6QHsgQCJo
YW5kbGVyIiA6IEAidGVzdEhhbmRsZXIxIiwgQCJhcmciIDogQDEgfSBpbkNvbnRlbnRXb3JsZDpX
S0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChp
ZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNj
cmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxlciIgOiBAInRlc3RIYW5kbGVy
MSIsIEAiYXJnIiA6IEAxIH0gaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29y
bGQuZGVmYXVsdENsaWVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBO
U0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChyZXN1bHQpOwogICAgICAgICBF
WFBFQ1RfTk9UX05VTEwoZXJyb3IpOwogICAgICAgICBkb25lID0gdHJ1ZTsKQEAgLTEwMzAsNyAr
MTAzMCw3IEBAIFRFU1QoV0tVc2VyQ29udGVudENvbnRyb2xsZXIsIE1lc3NhZ2VIYW5kbGVyQVBJ
KQogICAgIGRvbmUgPSBmYWxzZTsKIAogICAgIC8vIGRlZmF1bHRDbGllbnRXb3JsZCBpcyB3aGVy
ZSB0ZXN0aGFuZGxlcjIgbGl2ZXMKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1
bmN0aW9uQm9keSBhcmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhhbmRsZXIyIiwgQCJh
cmciIDogQDEgfSBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29y
bGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7Cisg
ICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7
IEAiaGFuZGxlciIgOiBAInRlc3RIYW5kbGVyMiIsIEAiYXJnIiA6IEAxIH0gaW5GcmFtZTpuaWwg
aW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQuZGVmYXVsdENsaWVudFdvcmxkIGNvbXBsZXRp
b25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBF
Q1RfTlVMTChlcnJvcik7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRvTnVt
YmVyOkAxXSk7CiAgICAgICAgIGRvbmUgPSB0cnVlOwpAQCAtMTA0MCw3ICsxMDQwLDcgQEAgVEVT
VChXS1VzZXJDb250ZW50Q29udHJvbGxlciwgTWVzc2FnZUhhbmRsZXJBUEkpCiAKICAgICAvLyBC
dXQgaWYgd2UgcmVtdm9lIGl0LCBpdCBzaG91bGQgbm8gbG9uZ2VyIGxpdmUgdGhlcmUsIGFuZCB1
c2luZyBpdCBzaG91bGQgY2F1c2UgYW4gZXJyb3IuCiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJD
b250ZW50Q29udHJvbGxlcl0gcmVtb3ZlU2NyaXB0TWVzc2FnZUhhbmRsZXJGb3JOYW1lOkAidGVz
dEhhbmRsZXIyIiBjb250ZW50V29ybGQ6V0tDb250ZW50V29ybGQuZGVmYXVsdENsaWVudFdvcmxk
XTsKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVu
dHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhhbmRsZXIyIiwgQCJhcmciIDogQDEgfSBpbkNvbnRl
bnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGQgY29tcGxldGlvbkhhbmRs
ZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcgY2FsbEFz
eW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxlciIgOiBAInRl
c3RIYW5kbGVyMiIsIEAiYXJnIiA6IEAxIH0gaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6V0tD
b250ZW50V29ybGQuZGVmYXVsdENsaWVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQg
cmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChyZXN1bHQpOwog
ICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOwogICAgICAgICBkb25lID0gdHJ1ZTsKQEAg
LTEwNDksMTUgKzEwNDksMTUgQEAgVEVTVChXS1VzZXJDb250ZW50Q29udHJvbGxlciwgTWVzc2Fn
ZUhhbmRsZXJBUEkpCiAgICAgZG9uZSA9IGZhbHNlOwogCiAgICAgLy8gVmVyaWZ5IGhhbmRsZXJz
IDMsIDQsIGFuZCA1IGFyZSBhbGwgaW4gdGhlIGN1c3RvbSB3b3JsZC4KLSAgICBbd2ViVmlldyBj
YWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6
IEAidGVzdEhhbmRsZXIzIiwgQCJhcmciIDogQDEgfSBpbkNvbnRlbnRXb3JsZDp3b3JsZCBjb21w
bGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2Vi
VmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6QHsgQCJoYW5k
bGVyIiA6IEAidGVzdEhhbmRsZXIzIiwgQCJhcmciIDogQDEgfSBpbkZyYW1lOm5pbCBpbkNvbnRl
bnRXb3JsZDp3b3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAq
ZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwogICAgICAgICBFWFBFQ1RfVFJV
RShbcmVzdWx0IGlzRXF1YWxUb051bWJlcjpAMV0pOwogICAgIH1dOwotICAgIFt3ZWJWaWV3IGNh
bGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpAeyBAImhhbmRsZXIiIDog
QCJ0ZXN0SGFuZGxlcjQiLCBAImFyZyIgOiBAMSB9IGluQ29udGVudFdvcmxkOndvcmxkIGNvbXBs
ZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJW
aWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpAeyBAImhhbmRs
ZXIiIDogQCJ0ZXN0SGFuZGxlcjQiLCBAImFyZyIgOiBAMSB9IGluRnJhbWU6bmlsIGluQ29udGVu
dFdvcmxkOndvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICpl
cnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CiAgICAgICAgIEVYUEVDVF9UUlVF
KFtyZXN1bHQgaXNFcXVhbFRvTnVtYmVyOkAxXSk7CiAgICAgfV07Ci0gICAgW3dlYlZpZXcgY2Fs
bEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxlciIgOiBA
InRlc3RIYW5kbGVyNSIsIEAiYXJnIiA6IEAxIH0gaW5Db250ZW50V29ybGQ6d29ybGQgY29tcGxl
dGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZp
ZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxl
ciIgOiBAInRlc3RIYW5kbGVyNSIsIEAiYXJnIiA6IEAxIH0gaW5GcmFtZTpuaWwgaW5Db250ZW50
V29ybGQ6d29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVy
cm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKICAgICAgICAgRVhQRUNUX1RSVUUo
W3Jlc3VsdCBpc0VxdWFsVG9OdW1iZXI6QDFdKTsKICAgICAgICAgZG9uZSA9IHRydWU7CkBAIC0x
MDY3LDcgKzEwNjcsNyBAQCBURVNUKFdLVXNlckNvbnRlbnRDb250cm9sbGVyLCBNZXNzYWdlSGFu
ZGxlckFQSSkKIAogICAgIC8vIFJlbW92ZSAzIGZyb20gdGhlIHdyb25nIHdvcmxkLCB2ZXJpZnkg
aXQgaXMgc3RpbGwgdGhlcmUgaW4gdGhlIGN1c3RvbSB3b3JsZC4KICAgICBbW2NvbmZpZ3VyYXRp
b24gdXNlckNvbnRlbnRDb250cm9sbGVyXSByZW1vdmVTY3JpcHRNZXNzYWdlSGFuZGxlckZvck5h
bWU6QCJ0ZXN0SGFuZGxlcjMiIGNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xp
ZW50V29ybGRdOwotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5
IGFyZ3VtZW50czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjMiLCBAImFyZyIgOiBAMSB9
IGluQ29udGVudFdvcmxkOndvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBO
U0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rp
b25Cb2R5IGFyZ3VtZW50czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjMiLCBAImFyZyIg
OiBAMSB9IGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOndvcmxkIGNvbXBsZXRpb25IYW5kbGVy
OlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChl
cnJvcik7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRvTnVtYmVyOkAxXSk7
CiAgICAgICAgIGRvbmUgPSB0cnVlOwpAQCAtMTA3NywxNSArMTA3NywxNSBAQCBURVNUKFdLVXNl
ckNvbnRlbnRDb250cm9sbGVyLCBNZXNzYWdlSGFuZGxlckFQSSkKIAogICAgIC8vIFJlbW92ZSAz
IGZyb20gdGhlIGNvcnJlY3Qgd29ybGQsIHZlcmlmeSBpdCBpcyBnb25lLCBidXQgNCBhbmQgNSBh
cmUgc3RpbGwgdGhlcmUuCiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxl
cl0gcmVtb3ZlU2NyaXB0TWVzc2FnZUhhbmRsZXJGb3JOYW1lOkAidGVzdEhhbmRsZXIzIiBjb250
ZW50V29ybGQ6d29ybGRdOwotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rp
b25Cb2R5IGFyZ3VtZW50czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjMiLCBAImFyZyIg
OiBAMSB9IGluQ29udGVudFdvcmxkOndvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVz
dWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6
ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjMiLCBA
ImFyZyIgOiBAMSB9IGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOndvcmxkIGNvbXBsZXRpb25I
YW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1Rf
TlVMTChyZXN1bHQpOwogICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOwogICAgIH1dOwot
ICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpA
eyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjQiLCBAImFyZyIgOiBAMSB9IGluQ29udGVudFdv
cmxkOndvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJv
cikgeworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3Vt
ZW50czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjQiLCBAImFyZyIgOiBAMSB9IGluRnJh
bWU6bmlsIGluQ29udGVudFdvcmxkOndvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVz
dWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CiAgICAg
ICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRvTnVtYmVyOkAxXSk7CiAgICAgfV07Ci0g
ICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7
IEAiaGFuZGxlciIgOiBAInRlc3RIYW5kbGVyNSIsIEAiYXJnIiA6IEAxIH0gaW5Db250ZW50V29y
bGQ6d29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9y
KSB7CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1l
bnRzOkB7IEAiaGFuZGxlciIgOiBAInRlc3RIYW5kbGVyNSIsIEAiYXJnIiA6IEAxIH0gaW5GcmFt
ZTpuaWwgaW5Db250ZW50V29ybGQ6d29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1
bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKICAgICAg
ICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9OdW1iZXI6QDFdKTsKICAgICAgICAgZG9u
ZSA9IHRydWU7CkBAIC0xMDk1LDExICsxMDk1LDExIEBAIFRFU1QoV0tVc2VyQ29udGVudENvbnRy
b2xsZXIsIE1lc3NhZ2VIYW5kbGVyQVBJKQogCiAgICAgLy8gUmVtb3ZlICJhbGwiIGluIHRoZSBj
dXN0b20gd29ybGQsIHZlcmlmeSA0IGFuZCA1IGFyZSBub3cgZ29uZS4KICAgICBbW2NvbmZpZ3Vy
YXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSByZW1vdmVBbGxTY3JpcHRNZXNzYWdlSGFuZGxl
cnNGcm9tQ29udGVudFdvcmxkOndvcmxkXTsKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2Ny
aXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhhbmRsZXI0
IiwgQCJhcmciIDogQDEgfSBpbkNvbnRlbnRXb3JsZDp3b3JsZCBjb21wbGV0aW9uSGFuZGxlcjpb
Jl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNK
YXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhh
bmRsZXI0IiwgQCJhcmciIDogQDEgfSBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDp3b3JsZCBj
b21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAg
ICAgRVhQRUNUX05VTEwocmVzdWx0KTsKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsK
ICAgICB9XTsKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBh
cmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhhbmRsZXI1IiwgQCJhcmciIDogQDEgfSBp
bkNvbnRlbnRXb3JsZDp3b3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNF
cnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9u
Qm9keSBhcmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhhbmRsZXI1IiwgQCJhcmciIDog
QDEgfSBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDp3b3JsZCBjb21wbGV0aW9uSGFuZGxlcjpb
Jl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwocmVz
dWx0KTsKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKICAgICAgICAgZG9uZSA9IHRy
dWU7CkBAIC0xMTE4LDcgKzExMTgsNyBAQCBURVNUKFdLVXNlckNvbnRlbnRDb250cm9sbGVyLCBB
c3luY1NjcmlwdE1lc3NhZ2VIYW5kbGVyQmFzaWNQb3N0KQogCiAgICAgYm9vbCBkb25lID0gZmFs
c2U7CiAgICAgTlNTdHJpbmcgKmZ1bmN0aW9uQm9keSA9IEAidmFyIHAgPSB3aW5kb3cud2Via2l0
Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgnRnVsZmlsbCcpOyBhd2Fp
dCBwOyByZXR1cm4gcDsiOwotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rp
b25Cb2R5IGFyZ3VtZW50czpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdv
cmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewor
ICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpu
aWwgaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNv
bXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAg
ICBFWFBFQ1RfTlVMTChlcnJvcik7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNLaW5k
T2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQg
aXNFcXVhbFRvU3RyaW5nOkAiRnVsZmlsbGVkISJdKTsKQEAgLTExMjksNyArMTEyOSw3IEBAIFRF
U1QoV0tVc2VyQ29udGVudENvbnRyb2xsZXIsIEFzeW5jU2NyaXB0TWVzc2FnZUhhbmRsZXJCYXNp
Y1Bvc3QpCiAKICAgICBkb25lID0gZmFsc2U7CiAgICAgZnVuY3Rpb25Cb2R5ID0gQCJ2YXIgcCA9
IHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKCdS
ZWplY3QnKTsgYXdhaXQgcDsgcmV0dXJuIHA7IjsKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZh
U2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVu
dFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJv
ciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9k
eSBhcmd1bWVudHM6bmlsIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxk
LnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJy
b3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwocmVzdWx0KTsKICAgICAgICAgRVhQRUNUX1RSVUUo
ISFlcnJvcik7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtbZXJyb3IgZGVzY3JpcHRpb25dIGNvbnRh
aW5zU3RyaW5nOkAiUmVqZWN0ZWQhIl0pOwpAQCAtMTE0MSw3ICsxMTQxLDcgQEAgVEVTVChXS1Vz
ZXJDb250ZW50Q29udHJvbGxlciwgQXN5bmNTY3JpcHRNZXNzYWdlSGFuZGxlckJhc2ljUG9zdCkK
IAogICAgIGRvbmUgPSBmYWxzZTsKICAgICBmdW5jdGlvbkJvZHkgPSBAInZhciBwID0gd2luZG93
LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1lc3NhZ2UoJ1VuZGVmaW5l
ZCcpOyB2YXIgcmVzdWx0ID0gYXdhaXQgcDsgcmV0dXJuIHJlc3VsdCA9PSB1bmRlZmluZWQgPyAn
WWVzJyA6ICdObyciOwotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25C
b2R5IGFyZ3VtZW50czpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxk
IGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAg
IFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpuaWwg
aW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBs
ZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBF
WFBFQ1RfTlVMTChlcnJvcik7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNLaW5kT2ZD
bGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNF
cXVhbFRvU3RyaW5nOkAiWWVzIl0pOwpAQCAtMTE1Myw3ICsxMTUzLDcgQEAgVEVTVChXS1VzZXJD
b250ZW50Q29udHJvbGxlciwgQXN5bmNTY3JpcHRNZXNzYWdlSGFuZGxlckJhc2ljUG9zdCkKIAog
ICAgIGRvbmUgPSBmYWxzZTsKICAgICBmdW5jdGlvbkJvZHkgPSBAInZhciBwID0gd2luZG93Lndl
YmtpdC5tZXNzYWdlSGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1lc3NhZ2UoJ0RvIG5vdGhpbmcn
KTsgYXdhaXQgcDsgcmV0dXJuIHA7IjsKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0
OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxk
LnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJy
b3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1
bWVudHM6bmlsIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VX
b3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsK
ICAgICAgICAgRVhQRUNUX05VTEwocmVzdWx0KTsKICAgICAgICAgRVhQRUNUX1RSVUUoISFlcnJv
cik7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtbZXJyb3IgZGVzY3JpcHRpb25dIGNvbnRhaW5zU3Ry
aW5nOkAiZGlkIG5vdCByZXNwb25kIHRvIHRoaXMgcG9zdE1lc3NhZ2UiXSk7CkBAIC0xMTY1LDcg
KzExNjUsNyBAQCBURVNUKFdLVXNlckNvbnRlbnRDb250cm9sbGVyLCBBc3luY1NjcmlwdE1lc3Nh
Z2VIYW5kbGVyQmFzaWNQb3N0KQogCiAgICAgZG9uZSA9IGZhbHNlOwogICAgIGZ1bmN0aW9uQm9k
eSA9IEAidmFyIHAgPSB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5w
b3N0TWVzc2FnZSgnSW52YWxpZCByZXBseScpOyBhd2FpdCBwOyByZXR1cm4gcDsiOwotICAgIFt3
ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpuaWwgaW5D
b250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsm
XSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0ph
dmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpuaWwgaW5GcmFtZTpuaWwgaW5Db250ZW50
V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQg
cmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChyZXN1bHQpOwog
ICAgICAgICBFWFBFQ1RfVFJVRSghIWVycm9yKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW1tlcnJv
ciBkZXNjcmlwdGlvbl0gY29udGFpbnNTdHJpbmc6QCJ1bmFibGUgdG8gYmUgc2VyaWFsaXplZCJd
KTsKQEAgLTExODcsNyArMTE4Nyw3IEBAIFRFU1QoV0tVc2VyQ29udGVudENvbnRyb2xsZXIsIFdv
cmxkTGlmZXRpbWUpCiAKICAgICAvLyBTZXQgYSB2YXJpYWJsZSBpbiB0aGUgd29ybGQuCiAgICAg
Ym9vbCBkb25lID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAidmFy
IGZvbyA9ICdiYXInIiBpbkNvbnRlbnRXb3JsZDp3b3JsZC5nZXQoKSBjb21wbGV0aW9uSGFuZGxl
cjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBldmFsdWF0
ZUphdmFTY3JpcHQ6QCJ2YXIgZm9vID0gJ2JhciciIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxk
OndvcmxkLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICpl
cnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CiAgICAgICAgIGRvbmUgPSB0cnVl
OwogICAgIH1dOwpAQCAtMTE5Niw3ICsxMTk2LDcgQEAgVEVTVChXS1VzZXJDb250ZW50Q29udHJv
bGxlciwgV29ybGRMaWZldGltZSkKIAogICAgIC8vIEhhdmUgdGhlIG1lc3NhZ2UgaGFuZGxlciBi
b3VuY2UgYmFjayB0aGF0IHZhbHVlLgogICAgIE5TU3RyaW5nICpmdW5jdGlvbkJvZHkgPSBAInZh
ciBwID0gd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1lc3Nh
Z2UoZm9vKTsgYXdhaXQgcDsgcmV0dXJuIHA7IjsKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZh
U2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluQ29udGVudFdvcmxkOndvcmxkLmdl
dCgpIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewor
ICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpu
aWwgaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6d29ybGQuZ2V0KCkgY29tcGxldGlvbkhhbmRs
ZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxM
KGVycm9yKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0tpbmRPZkNsYXNzOltOU1N0
cmluZyBjbGFzc11dKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9TdHJp
bmc6QCJiYXIiXSk7CkBAIC0xMjA4LDcgKzEyMDgsNyBAQCBURVNUKFdLVXNlckNvbnRlbnRDb250
cm9sbGVyLCBXb3JsZExpZmV0aW1lKQogICAgIC8vIFJlbW92ZSB0aGUgbWVzc2FnZSBoYW5kbGVy
LCB3aGljaCB1c2VkIHRvIGNhdXNlIHRoZSB3b3JsZCB0byBiZSBkZXN0cm95ZWQgaW4gdGhlIHdl
YiBwcm9jZXNzLgogICAgIC8vIEJ1dCBieSBldmFsdWF0aW5nIEpTIG1ha2Ugc3VyZSB0aGUgdmFs
dWUgaXMgc3RpbGwgdGhlcmUuCiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJv
bGxlcl0gcmVtb3ZlQWxsU2NyaXB0TWVzc2FnZUhhbmRsZXJzRnJvbUNvbnRlbnRXb3JsZDp3b3Js
ZC5nZXQoKV07Ci0gICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAiZm9vIiBpbkNvbnRl
bnRXb3JsZDp3b3JsZC5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNF
cnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJmb28iIGlu
RnJhbWU6bmlsIGluQ29udGVudFdvcmxkOndvcmxkLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOlsm
XSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChlcnJv
cik7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcg
Y2xhc3NdXSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRvU3RyaW5nOkAi
YmFyIl0pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbQppbmRleCA3YTI5
N2NmY2IyN2IwNTVjYWMyZDYyOTM4NGQwZjhmZGE3NDg5NDgzLi4zODM3ZjYxMGMzZTJkN2RlOTVm
YjM2YzM4ODMxNWViOTBlYmViN2YxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0V2YWx1YXRlSmF2YVNj
cmlwdC5tbQpAQCAtMTU4LDcgKzE1OCw3IEBAIFRFU1QoV0tXZWJWaWV3LCBFdmFsdWF0ZUphdmFT
Y3JpcHRJbldvcmxkcykKICAgICBpc0RvbmUgPSBmYWxzZTsKIAogICAgIC8vIFZlcmlmeSB0aGF0
IHZhbHVlIGlzIHZpc2libGUgd2hlbiBldmFsdWF0aW5nIGluIHRoZSBwYWdlV29ybGQKLSAgICBb
d2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJmb28iIGluQ29udGVudFdvcmxkOldLQ29udGVu
dFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAq
ZXJyb3IpIHsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJmb28iIGluRnJhbWU6
bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFu
ZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX1RSVUUo
W3Jlc3VsdCBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKICAgICAgICAgRVhQRUNU
X1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9TdHJpbmc6QCJiYXIiXSk7CiAgICAgICAgIGlzRG9uZSA9
IHRydWU7CkBAIC0xNjgsNyArMTY4LDcgQEAgVEVTVChXS1dlYlZpZXcsIEV2YWx1YXRlSmF2YVNj
cmlwdEluV29ybGRzKQogICAgIGlzRG9uZSA9IGZhbHNlOwogCiAgICAgLy8gVmVyaWZ5IHRoYXQg
dmFsdWUgaXMgbm90IHZpc2libGUgd2hlbiBldmFsdWF0aW5nIGluIHRoZSBkZWZhdWx0Q2xpZW50
V29ybGQKLSAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJmb28iIGluQ29udGVudFdv
cmxkOldLQ29udGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpe
KGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFT
Y3JpcHQ6QCJmb28iIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLmRl
ZmF1bHRDbGllbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAq
ZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwocmVzdWx0KTsKICAgICAgICAgaXNEb25lID0g
dHJ1ZTsKICAgICAgICAgdGVzdHNQYXNzZWQrKzsKQEAgLTE3Nyw3ICsxNzcsNyBAQCBURVNUKFdL
V2ViVmlldywgRXZhbHVhdGVKYXZhU2NyaXB0SW5Xb3JsZHMpCiAgICAgaXNEb25lID0gZmFsc2U7
CiAKICAgICAvLyBWZXJpZnkgdGhhdCB2YWx1ZSBpcyB2aXNpYmxlIHdoZW4gY2FsbGluZyBhIGZ1
bmN0aW9uIGluIHRoZSBwYWdlV29ybGQKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0
OkAicmV0dXJuIGZvbyIgYXJndW1lbnRzOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3Js
ZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9y
KSB7CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpAInJldHVybiBmb28iIGFyZ3Vt
ZW50czpuaWwgaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdv
cmxkIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAg
ICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0p
OwogICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb1N0cmluZzpAImJhciJdKTsK
ICAgICAgICAgaXNEb25lID0gdHJ1ZTsKQEAgLTE4Nyw3ICsxODcsNyBAQCBURVNUKFdLV2ViVmll
dywgRXZhbHVhdGVKYXZhU2NyaXB0SW5Xb3JsZHMpCiAgICAgaXNEb25lID0gZmFsc2U7CiAKICAg
ICAvLyBWZXJpZnkgdGhhdCB2YWx1ZSBpcyBub3QgdmlzaWJsZSB3aGVuIGNhbGxpbmcgYSBmdW5j
dGlvbiBpbiB0aGUgZGVmYXVsdENsaWVudFdvcmxkCi0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2
YVNjcmlwdDpAInJldHVybiBmb28iIGFyZ3VtZW50czpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250
ZW50V29ybGQuZGVmYXVsdENsaWVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0
LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6QCJy
ZXR1cm4gZm9vIiBhcmd1bWVudHM6bmlsIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOldLQ29u
dGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3Vs
dCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwocmVzdWx0KTsKICAgICAg
ICAgaXNEb25lID0gdHJ1ZTsKICAgICAgICAgdGVzdHNQYXNzZWQrKzsKQEAgLTIwMSw3ICsyMDEs
NyBAQCBURVNUKFdLV2ViVmlldywgRXZhbHVhdGVKYXZhU2NyaXB0SW5Xb3JsZHMpCiAgICAgW3dl
YlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgX2FkZFNjcmlw
dE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIgbmFtZTpAInRlc3RIYW5kbGVyTmFtZSIgdXNlckNvbnRl
bnRXb3JsZDpuYW1lZFdvcmxkLmdldCgpLl91c2VyQ29udGVudFdvcmxkXTsKIAogICAgIC8vIFNl
dCBhIHZhcmlhYmxlIHZhbHVlIGluIHRoYXQgbmFtZWQgd29ybGQuCi0gICAgW3dlYlZpZXcgZXZh
bHVhdGVKYXZhU2NyaXB0OkAidmFyIGJhciA9ICdiYXonIiBpbkNvbnRlbnRXb3JsZDpuYW1lZFdv
cmxkLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikg
eworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAInZhciBiYXIgPSAnYmF6JyIgaW5G
cmFtZTpuaWwgaW5Db250ZW50V29ybGQ6bmFtZWRXb3JsZC5nZXQoKSBjb21wbGV0aW9uSGFuZGxl
cjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwocmVz
dWx0KTsKICAgICAgICAgaXNEb25lID0gdHJ1ZTsKICAgICAgICAgdGVzdHNQYXNzZWQrKzsKQEAg
LTIxMCw3ICsyMTAsNyBAQCBURVNUKFdLV2ViVmlldywgRXZhbHVhdGVKYXZhU2NyaXB0SW5Xb3Js
ZHMpCiAgICAgaXNEb25lID0gZmFsc2U7CiAKICAgICAvLyBTZXQgYSBnbG9iYWwgdmFyaWFibGUg
dmFsdWUgaW4gdGhhdCBuYW1lZCB3b3JsZCB2aWEgYSBmdW5jdGlvbiBjYWxsLgotICAgIFt3ZWJW
aWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6QCJ3aW5kb3cuYmF6ID0gJ2JhdCciIGFyZ3VtZW50czpu
aWwgaW5Db250ZW50V29ybGQ6bmFtZWRXb3JsZC5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpeKGlk
IHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2Ny
aXB0OkAid2luZG93LmJheiA9ICdiYXQnIiBhcmd1bWVudHM6bmlsIGluRnJhbWU6bmlsIGluQ29u
dGVudFdvcmxkOm5hbWVkV29ybGQuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQs
IE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKHJlc3VsdCk7CiAgICAgICAg
IEVYUEVDVF9OVUxMKGVycm9yKTsKICAgICAgICAgaXNEb25lID0gdHJ1ZTsKQEAgLTIyMyw3ICsy
MjMsNyBAQCBURVNUKFdLV2ViVmlldywgRXZhbHVhdGVKYXZhU2NyaXB0SW5Xb3JsZHMpCiAgICAg
W3dlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgX3JlbW92
ZVNjcmlwdE1lc3NhZ2VIYW5kbGVyRm9yTmFtZTpAInRlc3RIYW5kbGVyTmFtZSIgdXNlckNvbnRl
bnRXb3JsZDpuYW1lZFdvcmxkLmdldCgpLl91c2VyQ29udGVudFdvcmxkXTsKIAogICAgIC8vIFZl
cmlmeSB0aGUgdmFyaWFibGVzIHdlIHNldCBhcmUgdGhlcmUgaW4gdGhhdCBuYW1lZCB3b3JsZC4K
LSAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJiYXIiIGluQ29udGVudFdvcmxkOm5h
bWVkV29ybGQuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVy
cm9yKSB7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAiYmFyIiBpbkZyYW1lOm5p
bCBpbkNvbnRlbnRXb3JsZDpuYW1lZFdvcmxkLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQg
cmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlz
S2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOwogICAgICAgICBFWFBFQ1RfVFJVRShbcmVz
dWx0IGlzRXF1YWxUb1N0cmluZzpAImJheiJdKTsKICAgICAgICAgaXNEb25lID0gdHJ1ZTsKQEAg
LTIzMiw3ICsyMzIsNyBAQCBURVNUKFdLV2ViVmlldywgRXZhbHVhdGVKYXZhU2NyaXB0SW5Xb3Js
ZHMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc0RvbmUpOwogICAgIGlzRG9uZSA9
IGZhbHNlOwogCi0gICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2luZG93LmJheiIg
aW5Db250ZW50V29ybGQ6bmFtZWRXb3JsZC5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJl
c3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6
QCJ3aW5kb3cuYmF6IiBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpuYW1lZFdvcmxkLmdldCgp
IGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAg
ICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOwog
ICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb1N0cmluZzpAImJhdCJdKTsKICAg
ICAgICAgaXNEb25lID0gdHJ1ZTsKQEAgLTI0Miw3ICsyNDIsNyBAQCBURVNUKFdLV2ViVmlldywg
RXZhbHVhdGVKYXZhU2NyaXB0SW5Xb3JsZHMpCiAgICAgaXNEb25lID0gZmFsc2U7CiAKICAgICAv
LyBWZXJpZnkgdGhleSBhcmVuJ3QgdGhlcmUgaW4gdGhlIGRlZmF1bHRDbGllbnRXb3JsZC4KLSAg
ICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJiYXIiIGluQ29udGVudFdvcmxkOldLQ29u
dGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3Vs
dCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJi
YXIiIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLmRlZmF1bHRDbGll
bnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsK
ICAgICAgICAgRVhQRUNUX05VTEwocmVzdWx0KTsKICAgICAgICAgaXNEb25lID0gdHJ1ZTsKICAg
ICAgICAgdGVzdHNQYXNzZWQrKzsKQEAgLTI1MCw3ICsyNTAsNyBAQCBURVNUKFdLV2ViVmlldywg
RXZhbHVhdGVKYXZhU2NyaXB0SW5Xb3JsZHMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZpc0RvbmUpOwogICAgIGlzRG9uZSA9IGZhbHNlOwogCi0gICAgW3dlYlZpZXcgZXZhbHVhdGVK
YXZhU2NyaXB0OkAid2luZG93LmJheiIgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQuZGVm
YXVsdENsaWVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICpl
cnJvcikgeworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAIndpbmRvdy5iYXoiIGlu
RnJhbWU6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3Js
ZCBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAg
ICAgRVhQRUNUX05VTEwocmVzdWx0KTsKICAgICAgICAgaXNEb25lID0gdHJ1ZTsKICAgICAgICAg
dGVzdHNQYXNzZWQrKzsKQEAgLTI1OSw3ICsyNTksNyBAQCBURVNUKFdLV2ViVmlldywgRXZhbHVh
dGVKYXZhU2NyaXB0SW5Xb3JsZHMpCiAgICAgaXNEb25lID0gZmFsc2U7CiAKICAgICAvLyBWZXJp
ZnkgdGhleSBhcmVuJ3QgdGhlcmUgaW4gdGhlIHBhZ2VXb3JsZC4KLSAgICBbd2ViVmlldyBldmFs
dWF0ZUphdmFTY3JpcHQ6QCJiYXIiIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VX
b3JsZCBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAg
ICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJiYXIiIGluRnJhbWU6bmlsIGluQ29udGVu
dFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJl
c3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwocmVzdWx0KTsKICAg
ICAgICAgaXNEb25lID0gdHJ1ZTsKICAgICAgICAgdGVzdHNQYXNzZWQrKzsKQEAgLTI2Nyw3ICsy
NjcsNyBAQCBURVNUKFdLV2ViVmlldywgRXZhbHVhdGVKYXZhU2NyaXB0SW5Xb3JsZHMpCiAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc0RvbmUpOwogICAgIGlzRG9uZSA9IGZhbHNlOwog
Ci0gICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2luZG93LmJheiIgaW5Db250ZW50
V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVz
dWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpA
IndpbmRvdy5iYXoiIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBh
Z2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsK
ICAgICAgICAgRVhQRUNUX05VTEwocmVzdWx0KTsKICAgICAgICAgaXNEb25lID0gdHJ1ZTsKICAg
ICAgICAgdGVzdHNQYXNzZWQrKzsKQEAgLTI4NSw3ICsyODUsNyBAQCBURVNUKFdLV2ViVmlldywg
RXZhbHVhdGVKYXZhU2NyaXB0SW5Xb3JsZHNXaXRoR2xvYmFsT2JqZWN0QXZhaWxhYmxlKQogICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjxodG1sPjwvaHRtbD4iXTsK
IAogICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcgZXZhbHVhdGVK
YXZhU2NyaXB0OkAid2luZG93LndvcmxkTmFtZSIgaW5Db250ZW50V29ybGQ6W1dLQ29udGVudFdv
cmxkIHdvcmxkV2l0aE5hbWU6QCJ0ZXN0TmFtZSJdIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVz
dWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpA
IndpbmRvdy53b3JsZE5hbWUiIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOltXS0NvbnRlbnRX
b3JsZCB3b3JsZFdpdGhOYW1lOkAidGVzdE5hbWUiXSBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJl
c3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdCwg
InRlc3ROYW1lIik7CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwpAQCAtNDcyLDMgKzQ3
MiwzMzcgQEAgVEVTVChXZWJLaXQsIFNQSUphdmFzY3JpcHRNYXJrdXBWc0FQSUNvbnRlbnRKYXZh
U2NyaXB0KQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiAKIH0KKworc3Rh
dGljIE5TTXV0YWJsZVNldDxXS0ZyYW1lSW5mbyAqPiAqYWxsRnJhbWVzOworQGludGVyZmFjZSBG
cmFtZXNNZXNzYWdlSGFuZGxlciA6IE5TT2JqZWN0IDxXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyPgor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gRnJhbWVzTWVzc2FnZUhhbmRsZXIKKy0gKHZvaWQpdXNl
ckNvbnRlbnRDb250cm9sbGVyOihXS1VzZXJDb250ZW50Q29udHJvbGxlciAqKXVzZXJDb250ZW50
Q29udHJvbGxlciBkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTooV0tTY3JpcHRNZXNzYWdlICopbWVz
c2FnZQoreworICAgIEVYUEVDVF9UUlVFKG1lc3NhZ2Uud29ybGQgPT0gV0tDb250ZW50V29ybGQu
ZGVmYXVsdENsaWVudFdvcmxkKTsKKyAgICBbYWxsRnJhbWVzIGFkZE9iamVjdDptZXNzYWdlLmZy
YW1lSW5mb107Cit9CitAZW5kCisKK3N0YXRpYyBjb25zdCBjaGFyKiBmcmFtZXNNYWluUmVzb3Vy
Y2UgPSBSIkZSQU1FU1JFU09VUkNFKAorSGVsbG8gd29ybGQ8YnI+Cis8aWZyYW1lIGlkPSd0aGVG
cmFtZScgc3JjPSdvdGhlcnByb3RvY29sOi8vdGVzdC9pbmRleC5odG1sJz48L2lmcmFtZT4KKylG
UkFNRVNSRVNPVVJDRSI7CisKK3N0YXRpYyBOU1N0cmluZyAqdXNlclNjcmlwdFNvdXJjZSA9IEAi
d2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMuZnJhbWVzVGVzdGVyLnBvc3RNZXNzYWdlKCdo
aScpOyI7CisKKy8vIFRoaXMgdGVzdCBsb2FkcyBhIGRvY3VtZW50IHVuZGVyIG9uZSBwcm90b2Nv
bC4KKy8vIFRoYXQgZG9jdW1lbnQgZW1iZWRzIGFuIGlmcmFtZSB1bmRlciBhIGRpZmZlcmVudCBw
cm90b2NvbAorLy8gKGVuc3VyaW5nIHRoZXkgY2Fubm90IGFjY2VzcyBlYWNoIG90aGVyIHVuZGVy
IHRoZSBjcm9zcy1vcmlnaW4gcnVsZXMgb2YgdGhlIHdlYiBzZWN1cml0eSBtb2RlbCkKKy8vIEl0
IHVzZXMgYSBXS1VzZXJTY3JpcHQgdG8gY29sbGVjdCBhbGwgb2YgdGhlIGZyYW1lcyBvbiB0aGUg
cGFnZSwgYW5kIHRoZW4gdXNlcyBuZXcgZm9ybXMgb2YgZXZhbHVhdGVKYXZhU2NyaXB0CisvLyBh
bmQgY2FsbEFzeW5jSmF2YVNjcmlwdCB0byBjb25maXJtIHRoYXQgaXQgY2FuIGV4ZWN1dGUgSlMg
ZGlyZWN0bHkgaW4gZWFjaCBvZiB0aG9zZSBmcmFtZXMuCitURVNUKEV2YWx1YXRlSmF2YVNjcmlw
dCwgSmF2YVNjcmlwdEluRnJhbWVzRnJvbVBvc3RNZXNzYWdlKQoreworICAgIGFsbEZyYW1lcyA9
IFtbTlNNdXRhYmxlU2V0PFdLRnJhbWVJbmZvICo+IGFsbG9jXSBpbml0XTsKKyAgICBhdXRvIG1l
c3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW0ZyYW1lc01lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0
XSk7CisgICAgYXV0byB1c2VyU2NyaXB0ID0gYWRvcHROUyhbW1dLVXNlclNjcmlwdCBhbGxvY10g
aW5pdFdpdGhTb3VyY2U6dXNlclNjcmlwdFNvdXJjZSBpbmplY3Rpb25UaW1lOldLVXNlclNjcmlw
dEluamVjdGlvblRpbWVBdERvY3VtZW50U3RhcnQgZm9yTWFpbkZyYW1lT25seTpOTyBpbkNvbnRl
bnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGRdKTsKKworICAgIFdLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1tXS1dlYlZpZXdDb25maWd1cmF0
aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgW2NvbmZpZ3VyYXRpb24udXNlckNv
bnRlbnRDb250cm9sbGVyIGFkZFVzZXJTY3JpcHQ6dXNlclNjcmlwdC5nZXQoKV07CisgICAgW2Nv
bmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVy
Om1lc3NhZ2VIYW5kbGVyLmdldCgpIGNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0
Q2xpZW50V29ybGQgbmFtZTpAImZyYW1lc1Rlc3RlciJdOworCisgICAgYXV0byBoYW5kbGVyID0g
YWRvcHROUyhbW1Rlc3RVUkxTY2hlbWVIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2hhbmRs
ZXIgc2V0U3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxlcjpbJl0oV0tXZWJWaWV3ICosIGlkPFdLVVJM
U2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBpZiAoW3Rhc2sucmVxdWVzdC5VUkwuYWJzb2x1
dGVTdHJpbmcgaXNFcXVhbFRvU3RyaW5nOkAiZnJhbWVzdGVzdDovL3Rlc3QvaW5kZXguaHRtbCJd
KSB7CisgICAgICAgICAgICBOU0RhdGEgKmRhdGEgPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIlcyIsIGZyYW1lc01haW5SZXNvdXJjZV0gZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3Ry
aW5nRW5jb2RpbmddOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOltbW05T
VVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6
QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDpkYXRhLmxlbmd0aCB0ZXh0RW5jb2Rp
bmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVE
YXRhOmRhdGFdOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfSBlbHNl
IGlmIChbdGFzay5yZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZyBpc0VxdWFsVG9TdHJpbmc6QCJv
dGhlcnByb3RvY29sOi8vdGVzdC9pbmRleC5odG1sIl0pIHsKKyAgICAgICAgICAgIFt0YXNrIGRp
ZFJlY2VpdmVSZXNwb25zZTpbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNr
LnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6
MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdXTsKKyAgICAgICAgICAgIFt0YXNr
IGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfV07CisKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVy
OmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAiZnJhbWVzdGVzdCJdOworICAgIFtjb25maWd1
cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJv
dGhlcnByb3RvY29sIl07CisKKyAgICBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3Qo
MCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0pOworICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJM
OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiZnJhbWVzdGVzdDovL3Rlc3QvaW5kZXguaHRtbCJdXV07
CisKKyAgICBFWFBFQ1RfRVEoYWxsRnJhbWVzLmNvdW50LCAydSk7CisKKyAgICBzdGF0aWMgc2l6
ZV90IGZpbmlzaGVkRnJhbWVzID0gMDsKKyAgICBzdGF0aWMgYm9vbCBpc0RvbmUgPSBmYWxzZTsK
KworICAgIGZvciAoV0tGcmFtZUluZm8gKmZyYW1lIGluIGFsbEZyYW1lcykgeworICAgICAgICBi
b29sIGlzTWFpbkZyYW1lID0gZnJhbWUuaXNNYWluRnJhbWU7CisgICAgICAgIFt3ZWJWaWV3IGNh
bGxBc3luY0phdmFTY3JpcHQ6QCJyZXR1cm4gbG9jYXRpb24uaHJlZjsiIGFyZ3VtZW50czpuaWwg
aW5GcmFtZTpmcmFtZSBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50
V29ybGQgY29tcGxldGlvbkhhbmRsZXI6W2lzTWFpbkZyYW1lXSAoaWQgcmVzdWx0LCBOU0Vycm9y
ICplcnJvcikgeworICAgICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOworICAgICAgICAgICAg
RVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKKwor
ICAgICAgICAgICAgaWYgKGlzTWFpbkZyYW1lKQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVF
KFtyZXN1bHQgaXNFcXVhbFRvU3RyaW5nOkAiZnJhbWVzdGVzdDovL3Rlc3QvaW5kZXguaHRtbCJd
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0
IGlzRXF1YWxUb1N0cmluZzpAIm90aGVycHJvdG9jb2w6Ly90ZXN0L2luZGV4Lmh0bWwiXSk7CisK
KyAgICAgICAgICAgIGlmICgrK2ZpbmlzaGVkRnJhbWVzID09IGFsbEZyYW1lcy5jb3VudCAqIDIp
CisgICAgICAgICAgICAgICAgaXNEb25lID0gdHJ1ZTsKKyAgICAgICAgfV07CisKKworICAgICAg
ICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJsb2NhdGlvbi5ocmVmOyIgaW5GcmFtZTpm
cmFtZSBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGQgY29t
cGxldGlvbkhhbmRsZXI6W2lzTWFpbkZyYW1lXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikg
eworICAgICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOworICAgICAgICAgICAgRVhQRUNUX1RS
VUUoW3Jlc3VsdCBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKKworICAgICAgICAg
ICAgaWYgKGlzTWFpbkZyYW1lKQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQg
aXNFcXVhbFRvU3RyaW5nOkAiZnJhbWVzdGVzdDovL3Rlc3QvaW5kZXguaHRtbCJdKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxU
b1N0cmluZzpAIm90aGVycHJvdG9jb2w6Ly90ZXN0L2luZGV4Lmh0bWwiXSk7CisKKyAgICAgICAg
ICAgIGlmICgrK2ZpbmlzaGVkRnJhbWVzID09IGFsbEZyYW1lcy5jb3VudCAqIDIpCisgICAgICAg
ICAgICAgICAgaXNEb25lID0gdHJ1ZTsKKyAgICAgICAgfV07CisgICAgfQorCisgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZpc0RvbmUpOworfQorCisvLyBUaGlzIHRlc3QgbG9hZHMgYSBk
b2N1bWVudCB1bmRlciBvbmUgcHJvdG9jb2wuCisvLyBUaGF0IGRvY3VtZW50IGVtYmVkcyBhbiBp
ZnJhbWUgdW5kZXIgYSBkaWZmZXJlbnQgcHJvdG9jb2wKKy8vIChlbnN1cmluZyB0aGV5IGNhbm5v
dCBhY2Nlc3MgZWFjaCBvdGhlciB1bmRlciB0aGUgY3Jvc3Mtb3JpZ2luIHJ1bGVzIG9mIHRoZSB3
ZWIgc2VjdXJpdHkgbW9kZWwpCisvLyBJdCBjb2xsZWN0cyBhbGwgdGhlIGZyYW1lcyBzZWVuIGR1
cmluZyBuYXZpZ2F0aW9uIGRlbGVnYXRlIGNhbGxiYWNrcywgYW5kIHRoZW4gdXNlcyBuZXcgZm9y
bXMgb2YgZXZhbHVhdGVKYXZhU2NyaXB0CisvLyBhbmQgY2FsbEFzeW5jSmF2YVNjcmlwdCB0byBj
b25maXJtIHRoYXQgaXQgY2FuIGV4ZWN1dGUgSlMgZGlyZWN0bHkgaW4gZWFjaCBvZiB0aG9zZSBm
cmFtZXMuCitURVNUKEV2YWx1YXRlSmF2YVNjcmlwdCwgSmF2YVNjcmlwdEluRnJhbWVzRnJvbU5h
dmlnYXRpb25EZWxlZ2F0ZSkKK3sKKyAgICBhbGxGcmFtZXMgPSBbW05TTXV0YWJsZVNldDxXS0Zy
YW1lSW5mbyAqPiBhbGxvY10gaW5pdF07CisKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtb
VGVzdFVSTFNjaGVtZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbaGFuZGxlciBzZXRTdGFy
dFVSTFNjaGVtZVRhc2tIYW5kbGVyOlsmXShXS1dlYlZpZXcgKiwgaWQ8V0tVUkxTY2hlbWVUYXNr
PiB0YXNrKSB7CisgICAgICAgIGlmIChbdGFzay5yZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZyBp
c0VxdWFsVG9TdHJpbmc6QCJmcmFtZXN0ZXN0Oi8vdGVzdC9pbmRleC5odG1sIl0pIHsKKyAgICAg
ICAgICAgIE5TRGF0YSAqZGF0YSA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzIiwg
ZnJhbWVzTWFpblJlc291cmNlXSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z107CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6W1tbTlNVUkxSZXNwb25z
ZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRt
bCIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOmRhdGEubGVuZ3RoIHRleHRFbmNvZGluZ05hbWU6bmls
XSBhdXRvcmVsZWFzZV1dOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6ZGF0YV07
CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9IGVsc2UgaWYgKFt0YXNr
LnJlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nIGlzRXF1YWxUb1N0cmluZzpAIm90aGVycHJvdG9j
b2w6Ly90ZXN0L2luZGV4Lmh0bWwiXSkgeworICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gW0Ai
Rm9vQmFyQmF6IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAg
ICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6W1tbTlNVUkxSZXNwb25zZSBhbGxvY10g
aW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0
ZWRDb250ZW50TGVuZ3RoOjAgdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXV07Cisg
ICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpkYXRhXTsKKyAgICAgICAgICAgIFt0YXNr
IGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfV07CisKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0
aW9uID0gW1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
OworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBm
b3JVUkxTY2hlbWU6QCJmcmFtZXN0ZXN0Il07CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2No
ZW1lSGFuZGxlcjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAIm90aGVycHJvdG9jb2wiXTsK
KworICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25m
aWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsKKworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRl
ID0gYWRvcHROUyhbW1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKworICAg
IF9fYmxvY2sgYm9vbCBkaWRGaW5pc2hOYXZpZ2F0aW9uID0gZmFsc2U7CisgICAgW25hdmlnYXRp
b25EZWxlZ2F0ZSBzZXREaWRGaW5pc2hOYXZpZ2F0aW9uOl4oV0tXZWJWaWV3ICosIFdLTmF2aWdh
dGlvbiAqKSB7CisgICAgICAgIGRpZEZpbmlzaE5hdmlnYXRpb24gPSB0cnVlOworICAgIH1dOwor
CisgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSBzZXREZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0
aW9uOlsmXSAoV0tOYXZpZ2F0aW9uQWN0aW9uICphY3Rpb24sIHZvaWQgKF5kZWNpc2lvbkhhbmRs
ZXIpKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSkpIHsKKyAgICAgICAgaWYgKGFjdGlvbi50YXJn
ZXRGcmFtZSkKKyAgICAgICAgICAgIFthbGxGcmFtZXMgYWRkT2JqZWN0OmFjdGlvbi50YXJnZXRG
cmFtZV07CisKKyAgICAgICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGlj
eUFsbG93KTsKKyAgICB9XTsKKworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpu
YXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VS
TFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJmcmFtZXN0ZXN0
Oi8vdGVzdC9pbmRleC5odG1sIl1dXTsKKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZGlkRmluaXNoTmF2aWdhdGlvbik7CisKKyAgICBFWFBFQ1RfRVEoYWxsRnJhbWVzLmNvdW50LCAy
dSk7CisKKyAgICBzdGF0aWMgc2l6ZV90IGZpbmlzaGVkRnJhbWVzID0gMDsKKyAgICBzdGF0aWMg
Ym9vbCBpc0RvbmUgPSBmYWxzZTsKKworICAgIGZvciAoV0tGcmFtZUluZm8gKmZyYW1lIGluIGFs
bEZyYW1lcykgeworICAgICAgICBib29sIGlzTWFpbkZyYW1lID0gZnJhbWUuaXNNYWluRnJhbWU7
CisgICAgICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6QCJyZXR1cm4gbG9jYXRpb24u
aHJlZjsiIGFyZ3VtZW50czpuaWwgaW5GcmFtZTpmcmFtZSBpbkNvbnRlbnRXb3JsZDpXS0NvbnRl
bnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6W2lzTWFpbkZyYW1l
XSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgICAgICAgICAgRVhQRUNUX05VTEwo
ZXJyb3IpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0tpbmRPZkNsYXNzOltO
U1N0cmluZyBjbGFzc11dKTsKKworICAgICAgICAgICAgaWYgKGlzTWFpbkZyYW1lKQorICAgICAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRvU3RyaW5nOkAiZnJhbWVzdGVz
dDovL3Rlc3QvaW5kZXguaHRtbCJdKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb1N0cmluZzpAIm90aGVycHJvdG9jb2w6Ly90
ZXN0L2luZGV4Lmh0bWwiXSk7CisKKyAgICAgICAgICAgIGlmICgrK2ZpbmlzaGVkRnJhbWVzID09
IGFsbEZyYW1lcy5jb3VudCAqIDIpCisgICAgICAgICAgICAgICAgaXNEb25lID0gdHJ1ZTsKKyAg
ICAgICAgfV07CisKKworICAgICAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJsb2Nh
dGlvbi5ocmVmOyIgaW5GcmFtZTpmcmFtZSBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5k
ZWZhdWx0Q2xpZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6W2lzTWFpbkZyYW1lXSAoaWQgcmVz
dWx0LCBOU0Vycm9yICplcnJvcikgeworICAgICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwor
ICAgICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBj
bGFzc11dKTsKKworICAgICAgICAgICAgaWYgKGlzTWFpbkZyYW1lKQorICAgICAgICAgICAgICAg
IEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRvU3RyaW5nOkAiZnJhbWVzdGVzdDovL3Rlc3Qv
aW5kZXguaHRtbCJdKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBFWFBFQ1Rf
VFJVRShbcmVzdWx0IGlzRXF1YWxUb1N0cmluZzpAIm90aGVycHJvdG9jb2w6Ly90ZXN0L2luZGV4
Lmh0bWwiXSk7CisKKyAgICAgICAgICAgIGlmICgrK2ZpbmlzaGVkRnJhbWVzID09IGFsbEZyYW1l
cy5jb3VudCAqIDIpCisgICAgICAgICAgICAgICAgaXNEb25lID0gdHJ1ZTsKKyAgICAgICAgfV07
CisgICAgfQorCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc0RvbmUpOworfQorCisv
LyBUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBldmFsdWF0aW5nIEphdmFTY3JpcHQgaW4gYSBmcmFt
ZSB0aGF0IGhhcyBzaW5jZSBnb25lIG1pc3NpbmcKKy8vIGR1ZSB0byByZW1vdmFsIGZyb20gdGhl
IERPTSByZXN1bHRzIGluIGFuIGFwcHJvcHJpYXRlIGVycm9yCitURVNUKEV2YWx1YXRlSmF2YVNj
cmlwdCwgSmF2YVNjcmlwdEluTWlzc2luZ0ZyYW1lRXJyb3IpCit7CisgICAgYWxsRnJhbWVzID0g
W1tOU011dGFibGVTZXQ8V0tGcmFtZUluZm8gKj4gYWxsb2NdIGluaXRdOworCisgICAgYXV0byBo
YW5kbGVyID0gYWRvcHROUyhbW1Rlc3RVUkxTY2hlbWVIYW5kbGVyIGFsbG9jXSBpbml0XSk7Cisg
ICAgW2hhbmRsZXIgc2V0U3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxlcjpbJl0oV0tXZWJWaWV3ICos
IGlkPFdLVVJMU2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBpZiAoW3Rhc2sucmVxdWVzdC5V
UkwuYWJzb2x1dGVTdHJpbmcgaXNFcXVhbFRvU3RyaW5nOkAiZnJhbWVzdGVzdDovL3Rlc3QvaW5k
ZXguaHRtbCJdKSB7CisgICAgICAgICAgICBOU0RhdGEgKmRhdGEgPSBbW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIlcyIsIGZyYW1lc01haW5SZXNvdXJjZV0gZGF0YVVzaW5nRW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3Bv
bnNlOltbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwg
TUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDpkYXRhLmxlbmd0aCB0
ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdXTsKKyAgICAgICAgICAgIFt0YXNrIGRp
ZFJlY2VpdmVEYXRhOmRhdGFdOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAg
ICAgfSBlbHNlIGlmIChbdGFzay5yZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZyBpc0VxdWFsVG9T
dHJpbmc6QCJvdGhlcnByb3RvY29sOi8vdGVzdC9pbmRleC5odG1sIl0pIHsKKyAgICAgICAgICAg
IE5TRGF0YSAqZGF0YSA9IFtAIkZvb0JhckJheiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3Ry
aW5nRW5jb2RpbmddOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOltbW05T
VVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6
QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDowIHRleHRFbmNvZGluZ05hbWU6bmls
XSBhdXRvcmVsZWFzZV1dOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6ZGF0YV07
CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH1dOworCisgICAgV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2Nd
IGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5k
bGVyOmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAiZnJhbWVzdGVzdCJdOworICAgIFtjb25m
aWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6
QCJvdGhlcnByb3RvY29sIl07CisKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSk7CisKKyAgICBhdXRv
IG5hdmlnYXRpb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0TmF2aWdhdGlvbkRlbGVnYXRlIGFs
bG9jXSBpbml0XSk7CisKKyAgICBfX2Jsb2NrIGJvb2wgZGlkRmluaXNoTmF2aWdhdGlvbiA9IGZh
bHNlOworICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgc2V0RGlkRmluaXNoTmF2aWdhdGlvbjpeKFdL
V2ViVmlldyAqLCBXS05hdmlnYXRpb24gKikgeworICAgICAgICBkaWRGaW5pc2hOYXZpZ2F0aW9u
ID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgc2V0RGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjpbJl0gKFdLTmF2aWdhdGlvbkFjdGlvbiAqYWN0aW9uLCB2
b2lkICheZGVjaXNpb25IYW5kbGVyKShXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3kpKSB7CisgICAg
ICAgIGlmIChhY3Rpb24udGFyZ2V0RnJhbWUpCisgICAgICAgICAgICBbYWxsRnJhbWVzIGFkZE9i
amVjdDphY3Rpb24udGFyZ2V0RnJhbWVdOworCisgICAgICAgIGRlY2lzaW9uSGFuZGxlcihXS05h
dmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdyk7CisgICAgfV07CisKKyAgICBbd2ViVmlldyBzZXRO
YXZpZ2F0aW9uRGVsZWdhdGU6bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiZnJhbWVzdGVzdDovL3Rlc3QvaW5kZXguaHRtbCJdXV07CisKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRpZEZpbmlzaE5hdmlnYXRpb24pOworCisgICAgRVhQRUNUX0VR
KGFsbEZyYW1lcy5jb3VudCwgMnUpOworCisgICAgc3RhdGljIGJvb2wgaXNEb25lID0gZmFsc2U7
CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAidmFyIGZyYW1lID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3RoZUZyYW1lJyk7IGZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
ZnJhbWUpOyIgaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQuZGVmYXVs
dENsaWVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOltdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVy
cm9yKSB7CisgICAgICAgIGlzRG9uZSA9IHRydWU7CisgICAgfV07CisKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmlzRG9uZSk7CisgICAgaXNEb25lID0gZmFsc2U7CisKKyAgICBmb3Ig
KFdLRnJhbWVJbmZvICpmcmFtZSBpbiBhbGxGcmFtZXMpIHsKKyAgICAgICAgaWYgKGZyYW1lLmlz
TWFpbkZyYW1lKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgW3dlYlZpZXcgY2Fs
bEFzeW5jSmF2YVNjcmlwdDpAInJldHVybiBsb2NhdGlvbi5ocmVmOyIgYXJndW1lbnRzOm5pbCBp
bkZyYW1lOmZyYW1lIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLmRlZmF1bHRDbGllbnRX
b3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewor
ICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGVycm9yID09IG5pbCk7CisgICAgICAgICAgICBFWFBF
Q1RfVFJVRShlcnJvci5kb21haW4gPT0gV0tFcnJvckRvbWFpbik7CisgICAgICAgICAgICBFWFBF
Q1RfVFJVRShlcnJvci5jb2RlID09IFdLRXJyb3JKYXZhU2NyaXB0TWlzc2luZ0ZyYW1lVGFyZ2V0
KTsKKyAgICAgICAgICAgIGlzRG9uZSA9IHRydWU7CisgICAgICAgIH1dOworICAgIH0KKworICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmaXNEb25lKTsKK30KKworLy8gVGhpcyB0ZXN0IHZl
cmlmaWVzIHRoYXQgZXZhbHVhdGluZyBKYXZhU2NyaXB0IGluIGEgZnJhbWUgZnJvbSB0aGUgcHJl
dmlvdXMgbWFpbiBuYXZpZ2F0aW9uIHJlc3VsdHMgaW4gYW4gZXJyb3IKK1RFU1QoRXZhbHVhdGVK
YXZhU2NyaXB0LCBKYXZhU2NyaXB0SW5NaXNzaW5nRnJhbWVBZnRlck5hdmlnYXRpb25FcnJvcikK
K3sKKyAgICBhbGxGcmFtZXMgPSBbW05TTXV0YWJsZVNldDxXS0ZyYW1lSW5mbyAqPiBhbGxvY10g
aW5pdF07CisKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbVGVzdFVSTFNjaGVtZUhhbmRs
ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbaGFuZGxlciBzZXRTdGFydFVSTFNjaGVtZVRhc2tIYW5k
bGVyOlsmXShXS1dlYlZpZXcgKiwgaWQ8V0tVUkxTY2hlbWVUYXNrPiB0YXNrKSB7CisgICAgICAg
IGlmIChbdGFzay5yZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZyBpc0VxdWFsVG9TdHJpbmc6QCJm
cmFtZXN0ZXN0Oi8vdGVzdC9pbmRleC5odG1sIl0pIHsKKyAgICAgICAgICAgIE5TRGF0YSAqZGF0
YSA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzIiwgZnJhbWVzTWFpblJlc291cmNl
XSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAgICAgICAgICBb
dGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6W1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhV
Ukw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50
TGVuZ3RoOmRhdGEubGVuZ3RoIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV1dOwor
ICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6ZGF0YV07CisgICAgICAgICAgICBbdGFz
ayBkaWRGaW5pc2hdOworICAgICAgICB9IGVsc2UgaWYgKFt0YXNrLnJlcXVlc3QuVVJMLmFic29s
dXRlU3RyaW5nIGlzRXF1YWxUb1N0cmluZzpAIm90aGVycHJvdG9jb2w6Ly90ZXN0L2luZGV4Lmh0
bWwiXSkgeworICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gW0AiRm9vQmFyQmF6IiBkYXRhVXNp
bmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAgICAgICAgICBbdGFzayBkaWRS
ZWNlaXZlUmVzcG9uc2U6W1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5y
ZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOjAg
dGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXV07CisgICAgICAgICAgICBbdGFzayBk
aWRSZWNlaXZlRGF0YTpkYXRhXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAg
ICAgIH0gZWxzZSBpZiAoW3Rhc2sucmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcgaXNFcXVhbFRv
U3RyaW5nOkAiZnJhbWVzdGVzdDovL2luZGV4Mi5odG1sIl0pIHsKKyAgICAgICAgICAgIE5TRGF0
YSAqZGF0YSA9IFtAIkhpIiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107
CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6W1tbTlNVUkxSZXNwb25zZSBh
bGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIg
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoOjAgdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNl
XV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpkYXRhXTsKKyAgICAgICAgICAg
IFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfV07CisKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25m
aWd1cmF0aW9uID0gW1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlci5n
ZXQoKSBmb3JVUkxTY2hlbWU6QCJmcmFtZXN0ZXN0Il07CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0
VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAIm90aGVycHJvdG9j
b2wiXTsKKworICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAw
KSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsKKworICAgIGF1dG8gbmF2aWdhdGlvbkRl
bGVnYXRlID0gYWRvcHROUyhbW1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsK
KworICAgIF9fYmxvY2sgYm9vbCBkaWRGaW5pc2hOYXZpZ2F0aW9uID0gZmFsc2U7CisgICAgW25h
dmlnYXRpb25EZWxlZ2F0ZSBzZXREaWRGaW5pc2hOYXZpZ2F0aW9uOl4oV0tXZWJWaWV3ICosIFdL
TmF2aWdhdGlvbiAqKSB7CisgICAgICAgIGRpZEZpbmlzaE5hdmlnYXRpb24gPSB0cnVlOworICAg
IH1dOworCisgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSBzZXREZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uOlsmXSAoV0tOYXZpZ2F0aW9uQWN0aW9uICphY3Rpb24sIHZvaWQgKF5kZWNpc2lv
bkhhbmRsZXIpKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSkpIHsKKyAgICAgICAgaWYgKGFjdGlv
bi50YXJnZXRGcmFtZSkKKyAgICAgICAgICAgIFthbGxGcmFtZXMgYWRkT2JqZWN0OmFjdGlvbi50
YXJnZXRGcmFtZV07CisKKyAgICAgICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlv
blBvbGljeUFsbG93KTsKKyAgICB9XTsKKworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxl
Z2F0ZTpuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0
OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJmcmFt
ZXN0ZXN0Oi8vdGVzdC9pbmRleC5odG1sIl1dXTsKKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZGlkRmluaXNoTmF2aWdhdGlvbik7CisgICAgZGlkRmluaXNoTmF2aWdhdGlvbiA9IGZh
bHNlOworCisgICAgRVhQRUNUX0VRKGFsbEZyYW1lcy5jb3VudCwgMnUpOworCisgICAgUmV0YWlu
UHRyPFdLRnJhbWVJbmZvPiBpZnJhbWU7CisgICAgZm9yIChXS0ZyYW1lSW5mbyAqZnJhbWUgaW4g
YWxsRnJhbWVzKSB7CisgICAgICAgIGlmIChmcmFtZS5pc01haW5GcmFtZSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBpZnJhbWUgPSBmcmFtZTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgRVhQRUNUX05PVF9OVUxMKGlmcmFtZSk7CisKKyAgICAvLyBHZXQgcmlkIG9mIHRo
ZSBmcmFtZSBieSBuYXZpZ2F0aW5nCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVx
dWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImZyYW1lc3Rlc3Q6Ly9p
bmRleDIuaHRtbCJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkaWRGaW5pc2hO
YXZpZ2F0aW9uKTsKKyAgICBkaWRGaW5pc2hOYXZpZ2F0aW9uID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgYm9vbCBpc0RvbmUgPSBmYWxzZTsKKworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3Jp
cHQ6QCJyZXR1cm4gbG9jYXRpb24uaHJlZjsiIGFyZ3VtZW50czpuaWwgaW5GcmFtZTppZnJhbWUu
Z2V0KCkgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQuZGVmYXVsdENsaWVudFdvcmxkIGNv
bXBsZXRpb25IYW5kbGVyOltdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAg
IEVYUEVDVF9GQUxTRShlcnJvciA9PSBuaWwpOworICAgICAgICBFWFBFQ1RfVFJVRShlcnJvci5k
b21haW4gPT0gV0tFcnJvckRvbWFpbik7CisgICAgICAgIEVYUEVDVF9UUlVFKGVycm9yLmNvZGUg
PT0gV0tFcnJvckphdmFTY3JpcHRNaXNzaW5nRnJhbWVUYXJnZXQpOworICAgICAgICBpc0RvbmUg
PSB0cnVlOworICAgIH1dOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc0RvbmUp
OworICAgIGlzRG9uZSA9IGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9jb2NvYS9UZXN0V0tXZWJWaWV3Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0
V0tXZWJWaWV3Lm1tCmluZGV4IGUyMzU3YTlhYmQzMGVkMzdmMjQ3YmQ3NDk1NTIyNWEzMDA1ZWUx
ZTcuLjU4ODg5MTg3ZTVjMmQ1ODY3MGY5MTY5Yjg5YjdlMTBhYWI3OTIwNGIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcubW0KQEAgLTE5OCw3ICsxOTgsNyBAQCAt
IChpZClvYmplY3RCeUNhbGxpbmdBc3luY0Z1bmN0aW9uOihOU1N0cmluZyAqKXNjcmlwdCB3aXRo
QXJndW1lbnRzOihOU0RpY3Rpb25hcgogICAgICAgICAqZXJyb3JPdXQgPSBuaWw7CiAKICAgICBS
ZXRhaW5QdHI8aWQ+IGV2YWxSZXN1bHQ7Ci0gICAgW3NlbGYgY2FsbEFzeW5jSmF2YVNjcmlwdDpz
Y3JpcHQgYXJndW1lbnRzOmFyZ3VtZW50cyBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5w
YWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9y
KSB7CisgICAgW3NlbGYgY2FsbEFzeW5jSmF2YVNjcmlwdDpzY3JpcHQgYXJndW1lbnRzOmFyZ3Vt
ZW50cyBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQg
Y29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAg
ICAgIGV2YWxSZXN1bHQgPSByZXN1bHQ7CiAgICAgICAgIGlmIChlcnJvck91dCkKICAgICAgICAg
ICAgICplcnJvck91dCA9IFtlcnJvciByZXRhaW5dOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403149</attachid>
            <date>2020-06-29 18:12:49 -0700</date>
            <delta_ts>2020-06-29 18:59:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213556-20200629181248.patch</filename>
            <type>text/plain</type>
            <size>70288</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzMDk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDc1ZDNkMTE0MDFhYjY5
M2Y1ODU1MzU1NGFiZjJhZjhkMDc4NGViYy4uNDliYjFkY2JjNmRhYWMzYjYzZjU1MDFjNDU4YWYy
ZDBjNjViNzZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTA2LTI5ICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBKYXZhU2NyaXB0IGNhbm5v
dCBiZSBpbmplY3RlZCBpbnRvIGlmcmFtZXMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU0MTY4
OTQ2PiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzU1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgorCisgICAgICAgIENvdmVyZWQgYnkg
QVBJIHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3MvanMvRXhjZXB0aW9uRGV0YWlscy5oOiBT
dGFydCBhIGNvbGxlY3Rpb24gb2YgImV4Y2VwdGlvbiB0eXBlcyIgdGhhdCB3aWxsIGdyb3cgcXVp
Y2tseSwKKyAgICAgICAgICBiZWdpbm5pbmcgd2l0aCB0aGUgc3BlY2lhbGl6ZWQgIm1pc3Npbmcg
ZnJhbWUiIHR5cGUuCisKIDIwMjAtMDYtMTYgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KIAogICAgICAgICBBWDogPGFkZHJlc3M+IGVsZW1lbnQgc2hvdWxkIG5vIGxvbmdl
ciBtYXAgdG8gQVJJQSBgY29udGVudGluZm9gIHJvbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMWVkNmI0NzA1Mjdl
NTY1MGVjOTNmZWI3ZmEwNTQ3MTE0ODgwZTkzNi4uNDYzZjQzMjE0MzU0ZDU2N2ZkOGJiODA0NDc2
NjVmNGFjN2IwNGFlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAyMC0wNi0yOSAgQnJh
ZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgSmF2YVNjcmlwdCBjYW5u
b3QgYmUgaW5qZWN0ZWQgaW50byBpZnJhbWVzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NDE2
ODk0Nj4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM1NTYK
KworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgYWRkcyBhIGZldyBtZWNoYW5pc21zOgorICAgICAgICAtIEFsbG93cyBmb3IgV0tVc2VyU2Ny
aXB0cyB0byBoYXZlIGEgdGFyZ2V0IGNvbnRlbnQgd29ybGQKKyAgICAgICAgLSBBbGxvd3MgImV2
YWx1YXRlSmF2YVNjcmlwdCIgYW5kICJjYWxsQXN5bmNKYXZhU2NyaXB0IiB0byB0YXJnZXQgYSBz
cGVjaWZpYyBmcmFtZQorICAgICAgICAtIEFsbG93cyBmb3IgdGhlIGNvbXBsZXRpb24gaGFuZGxl
cnMgb2YgdGhvc2UgbWV0aG9kcyB0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIAorICAgICAgICAg
IGZhaWx1cmUtZHVlLXRvLW1pc3NpbmctZnJhbWUuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxFeGNlcHRp
b25EZXRhaWxzPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxFeGNlcHRp
b25EZXRhaWxzPjo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmg6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IubW06CisgICAgICAgIChsb2NhbGl6ZWRE
ZXNjcmlwdGlvbkZvckVycm9yQ29kZSk6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLVXNlclNjcmlwdC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyU2Ny
aXB0Lm1tOgorICAgICAgICAoLVtXS1VzZXJTY3JpcHQgaW5pdFdpdGhTb3VyY2U6aW5qZWN0aW9u
VGltZTpmb3JNYWluRnJhbWVPbmx5Ol0pOgorICAgICAgICAoLVtXS1VzZXJTY3JpcHQgaW5pdFdp
dGhTb3VyY2U6aW5qZWN0aW9uVGltZTpmb3JNYWluRnJhbWVPbmx5OmluQ29udGVudFdvcmxkOl0p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lmg6CisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IGV2YWx1YXRlSmF2YVNjcmlwdDppbkZyYW1lOmluQ29udGVudFdvcmxkOmNvbXBsZXRpb25IYW5k
bGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDphcmd1bWVu
dHM6aW5GcmFtZTppbkNvbnRlbnRXb3JsZDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAg
KG5zRXJyb3JGcm9tRXhjZXB0aW9uRGV0YWlscyk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZXZh
bHVhdGVKYXZhU2NyaXB0OmFzQXN5bmNGdW5jdGlvbjp3aXRoU291cmNlVVJMOndpdGhBcmd1bWVu
dHM6Zm9yY2VVc2VyR2VzdHVyZTppbkZyYW1lOmluV29ybGQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmFyZ3VtZW50czppbkNv
bnRlbnRXb3JsZDpjb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
cnVuSmF2YVNjcmlwdCk6CisKIDIwMjAtMDYtMTYgIENoYXJsaWUgVHVybmVyICA8Y3R1cm5lckBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIERpc2FibGUgdmlkZW8gYXV0b3BsYXkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4Y2VwdGlvbkRldGFpbHMuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4Y2VwdGlvbkRldGFpbHMuaAppbmRleCA0OTI0MTE4
NTA5YTQ3MmQwM2EzOGJlNDYwZjU3Yjc3ZmZhYjRiZDNiLi5kZDlmZmVkNDRmOTI3ZGZmNGQ0M2Qz
MDE3YjM1Njc4ZGViYzQwNmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9FeGNlcHRpb25EZXRhaWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRXhj
ZXB0aW9uRGV0YWlscy5oCkBAIC0zMCwxMyArMzAsMjYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogc3RydWN0IEV4Y2VwdGlvbkRldGFpbHMgeworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4
X3QgeworICAgICAgICBTY3JpcHQsCisgICAgICAgIEludmFsaWRUYXJnZXRGcmFtZSwKKyAgICB9
OworCiAgICAgU3RyaW5nIG1lc3NhZ2U7CiAgICAgaW50IGxpbmVOdW1iZXIgeyAwIH07CiAgICAg
aW50IGNvbHVtbk51bWJlciB7IDAgfTsKLSAgICAvLyBUaGlzIGJpemFycmUgZXhwbGljaXQgaW5p
dGlhbGl6YXRpb24gb2YgU3RyaW5nIGlzIGJlY2F1c2Ugb2xkZXIgY29tcGlsZXJzIChsaWtlIG9u
IEhpZ2ggU2llcnJhKQotICAgIC8vIGRvbid0IHByb3Blcmx5IGhhbmRsZSBwYXJ0aWFsIGluaXRp
YWxpemF0aW9uIGxpc3RzIHVubGVzcyBldmVyeSBzdHJ1Y3QgbWVtYmVyIGhhcyBhbiBleHBsaWNp
dCBkZWZhdWx0IHZhbHVlLgotICAgIC8vIE9uY2Ugd2Ugc3RvcCBidWlsZGluZyBvbiB0aG9zZSBw
bGF0Zm9ybXMgd2UgY2FuIHJlbW92ZSB0aGlzLgotICAgIFN0cmluZyBzb3VyY2VVUkwgeyB9Owor
ICAgIFR5cGUgdHlwZSB7IFR5cGU6OlNjcmlwdCB9OworICAgIFN0cmluZyBzb3VyY2VVUkw7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgewordGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpFeGNlcHRpb25EZXRhaWxzOjpUeXBlPiB7Cisg
ICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
RGV0YWlsczo6VHlwZSwKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uRGV0YWlsczo6VHlwZTo6
U2NyaXB0LAorICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25EZXRhaWxzOjpUeXBlOjpJbnZhbGlk
VGFyZ2V0RnJhbWUKKyAgICA+OworfTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IDU0NDdmY2E3NjM1MjhhNGU5OWI0MzNlNGRmZWI4
ZGJmNTQ0MTc1ZjMuLjNhMGQ0Yjg3MThlM2VkNjRkOWNmYTIyMjQxZDNjNjE2ZDIzOGMxNzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAt
MjY1OSw2ICsyNjU5LDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPEV4Y2VwdGlvbkRldGFpbHM+Ojpl
bmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBFeGNlcHQKICAgICBlbmNvZGVyIDw8
IGluZm8ubWVzc2FnZTsKICAgICBlbmNvZGVyIDw8IGluZm8ubGluZU51bWJlcjsKICAgICBlbmNv
ZGVyIDw8IGluZm8uY29sdW1uTnVtYmVyOworICAgIGVuY29kZXIgPDwgaW5mby50eXBlOwogICAg
IGVuY29kZXIgPDwgaW5mby5zb3VyY2VVUkw7CiB9CiAKQEAgLTI2NzMsNiArMjY3NCw5IEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxFeGNlcHRpb25EZXRhaWxzPjo6ZGVjb2RlKElQQzo6RGVjb2RlciYg
ZGVjb2RlciwgRXhjZXB0aW9uRGV0CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29s
dW1uTnVtYmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQudHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LnNvdXJjZVVSTCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vycm9yLmgKaW5kZXggMTQwZDY2
ZmJmZWQ2MjdmMmJjNzQyYjNiZjgzMmNmYTZlZDNhMWM1Yi4uODFhNjY5MWQxMmY3MzRhZDdkY2E4
NTMyOTFhNDMxMmQ4NGY5MzI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLRXJyb3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tFcnJvci5oCkBAIC01OCw2ICs1OCw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFdLRXJyb3JDb2RlKSB7CiAgICAgV0tFcnJvckNvbnRlbnRSdWxlTGlzdFN0b3JlVmVyc2lvbk1p
c21hdGNoIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpLCBpb3MoMTEuMCkpLAogICAgIFdL
RXJyb3JBdHRyaWJ1dGVkU3RyaW5nQ29udGVudEZhaWxlZFRvTG9hZCBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKSwKICAgICBXS0Vycm9yQXR0cmlidXRlZFN0cmluZ0Nv
bnRlbnRMb2FkVGltZWRPdXQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4w
KSksCisgICAgV0tFcnJvckphdmFTY3JpcHRJbnZhbGlkRnJhbWVUYXJnZXQgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKSwKIH0gV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMCksIGlvcyg4LjApKTsKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vycm9yLm1tCmluZGV4IDM2ZTFm
NGJkNjg5MWU4OTAyMWIzNWIxZjhiYjhiM2EwNGFmNzU4ZDcuLmVlYzc2ZGE4MDRjNzdiNmQ5YTJm
ZDg2YjQ2ODkwMzE1NmVjMDcwOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS0Vycm9yLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS0Vycm9yLm1tCkBAIC03Myw2ICs3Myw5IEBAIE5TU3RyaW5nICpsb2NhbGl6ZWREZXNj
cmlwdGlvbkZvckVycm9yQ29kZShXS0Vycm9yQ29kZSBlcnJvckNvZGUpCiAKICAgICBjYXNlIFdL
RXJyb3JBdHRyaWJ1dGVkU3RyaW5nQ29udGVudExvYWRUaW1lZE91dDoKICAgICAgICAgcmV0dXJu
IFdFQl9VSV9TVFJJTkcoIlRpbWVkIG91dCB3aGlsZSBsb2FkaW5nIGF0dHJpYnV0ZWQgc3RyaW5n
IGNvbnRlbnQiLCAiV0tFcnJvckF0dHJpYnV0ZWRTdHJpbmdDb250ZW50TG9hZFRpbWVkT3V0IGRl
c2NyaXB0aW9uIik7CisKKyAgICBjYXNlIFdLRXJyb3JKYXZhU2NyaXB0SW52YWxpZEZyYW1lVGFy
Z2V0OgorICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklORygiSmF2YVNjcmlwdCBleGVjdXRpb24g
dGFyZ2V0ZWQgYW4gaW52YWxpZCBmcmFtZSIsICJXS0Vycm9ySmF2YVNjcmlwdEludmFsaWRGcmFt
ZVRhcmdldCBkZXNjcmlwdGlvbiIpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlclNjcmlwdC5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlclNjcmlwdC5oCmluZGV4IDQwMTJmODhiZGM0ODZkNzMy
ZmUyOTcwZGFhOWUwYjI5MDNjYzU5YjMuLjBjNWM2ZGM2ZDdjYTRlZDQ0NzM3YzIwNjkyYjg4ZWIz
ZGUzYjgxYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1VzZXJTY3JpcHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tV
c2VyU2NyaXB0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTcsOSArNTcsMTggQEAgV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKDEwLjEw
KSwgaW9zKDguMCkpCiAgQHBhcmFtIHNvdXJjZSBUaGUgc2NyaXB0IHNvdXJjZS4KICBAcGFyYW0g
aW5qZWN0aW9uVGltZSBXaGVuIHRoZSBzY3JpcHQgc2hvdWxkIGJlIGluamVjdGVkLgogIEBwYXJh
bSBmb3JNYWluRnJhbWVPbmx5IFdoZXRoZXIgdGhlIHNjcmlwdCBzaG91bGQgYmUgaW5qZWN0ZWQg
aW50byBhbGwgZnJhbWVzIG9yIGp1c3QgdGhlIG1haW4gZnJhbWUuCisgQGRpc2N1c3Npb24gQ2Fs
bGluZyB0aGlzIG1ldGhvZCBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIGBpbml0V2l0aFNvdXJjZTpp
bmplY3Rpb25UaW1lOmZvck1haW5GcmFtZU9ubHk6aW5Db250ZW50V29ybGQ6YCB3aXRoIGEgYGNv
bnRlbnRXb3JsZGAgdmFsdWUgb2YgYFdLQ29udGVudFdvcmxkLnBhZ2VXb3JsZGAKICAqLwogLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBpbmplY3Rpb25U
aW1lOihXS1VzZXJTY3JpcHRJbmplY3Rpb25UaW1lKWluamVjdGlvblRpbWUgZm9yTWFpbkZyYW1l
T25seTooQk9PTClmb3JNYWluRnJhbWVPbmx5OwogCisvKiEgQGFic3RyYWN0IFJldHVybnMgYW4g
aW5pdGlhbGl6ZWQgdXNlciBzY3JpcHQgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBAbGluayBXS1Vz
ZXJDb250ZW50Q29udHJvbGxlciBAL2xpbmsuCisgQHBhcmFtIHNvdXJjZSBUaGUgc2NyaXB0IHNv
dXJjZS4KKyBAcGFyYW0gaW5qZWN0aW9uVGltZSBXaGVuIHRoZSBzY3JpcHQgc2hvdWxkIGJlIGlu
amVjdGVkLgorIEBwYXJhbSBmb3JNYWluRnJhbWVPbmx5IFdoZXRoZXIgdGhlIHNjcmlwdCBzaG91
bGQgYmUgaW5qZWN0ZWQgaW50byBhbGwgZnJhbWVzIG9yIGp1c3QgdGhlIG1haW4gZnJhbWUuCisg
QHBhcmFtIGNvbnRlbnRXb3JsZCBUaGUgV0tDb250ZW50V29ybGQgaW4gd2hpY2ggdG8gaW5qZWN0
IHRoZSBzY3JpcHQuCisgKi8KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNvdXJjZTooTlNTdHJp
bmcgKilzb3VyY2UgaW5qZWN0aW9uVGltZTooV0tVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSlpbmpl
Y3Rpb25UaW1lIGZvck1haW5GcmFtZU9ubHk6KEJPT0wpZm9yTWFpbkZyYW1lT25seSBpbkNvbnRl
bnRXb3JsZDooV0tDb250ZW50V29ybGQgKiljb250ZW50V29ybGQgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogQGVuZAogCiBOU19BU1NVTUVf
Tk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1VzZXJTY3JpcHQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tV
c2VyU2NyaXB0Lm1tCmluZGV4IDg0NmY5Mjk0MjMxZTQ2NTE3ZDdhZGE0YzdhODBjNmEyYjdmZGI3
NmIuLjAzZWIwYzBlYWE3MzdmNTg2OWQ0Mjc1ZTQ3ZTc4ODA3NDNkMzMyMTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJTY3JpcHQubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlclNjcmlwdC5tbQpAQCAtMzIs
MTEgKzMyLDE2IEBACiBAaW1wbGVtZW50YXRpb24gV0tVc2VyU2NyaXB0CiAKIC0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgaW5qZWN0aW9uVGltZTooV0tV
c2VyU2NyaXB0SW5qZWN0aW9uVGltZSlpbmplY3Rpb25UaW1lIGZvck1haW5GcmFtZU9ubHk6KEJP
T0wpZm9yTWFpbkZyYW1lT25seQoreworICAgIHJldHVybiBbc2VsZiBpbml0V2l0aFNvdXJjZTpz
b3VyY2UgaW5qZWN0aW9uVGltZTppbmplY3Rpb25UaW1lIGZvck1haW5GcmFtZU9ubHk6Zm9yTWFp
bkZyYW1lT25seSBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGRdOworfQor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluamVj
dGlvblRpbWU6KFdLVXNlclNjcmlwdEluamVjdGlvblRpbWUpaW5qZWN0aW9uVGltZSBmb3JNYWlu
RnJhbWVPbmx5OihCT09MKWZvck1haW5GcmFtZU9ubHkgaW5Db250ZW50V29ybGQ6KFdLQ29udGVu
dFdvcmxkICopY29udGVudFdvcmxkCiB7CiAgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBBUEk6Ok9iamVjdDo6Y29uc3RydWN0SW5XcmFw
cGVyPEFQSTo6VXNlclNjcmlwdD4oc2VsZiwgV2ViQ29yZTo6VXNlclNjcmlwdCB7IHNvdXJjZSwg
QVBJOjpVc2VyU2NyaXB0OjpnZW5lcmF0ZVVuaXF1ZVVSTCgpLCB7IH0sIHsgfSwgQVBJOjp0b1dl
YkNvcmVVc2VyU2NyaXB0SW5qZWN0aW9uVGltZShpbmplY3Rpb25UaW1lKSwgZm9yTWFpbkZyYW1l
T25seSA/IFdlYkNvcmU6OlVzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXM6OkluamVjdEluVG9wRnJh
bWVPbmx5IDogV2ViQ29yZTo6VXNlckNvbnRlbnRJbmplY3RlZEZyYW1lczo6SW5qZWN0SW5BbGxG
cmFtZXMsIFdlYkNvcmU6OldhaXRGb3JOb3RpZmljYXRpb25CZWZvcmVJbmplY3Rpbmc6Ok5vIH0s
IEFQSTo6Q29udGVudFdvcmxkOjpwYWdlQ29udGVudFdvcmxkKCkpOworICAgIEFQSTo6T2JqZWN0
Ojpjb25zdHJ1Y3RJbldyYXBwZXI8QVBJOjpVc2VyU2NyaXB0PihzZWxmLCBXZWJDb3JlOjpVc2Vy
U2NyaXB0IHsgc291cmNlLCBBUEk6OlVzZXJTY3JpcHQ6OmdlbmVyYXRlVW5pcXVlVVJMKCksIHsg
fSwgeyB9LCBBUEk6OnRvV2ViQ29yZVVzZXJTY3JpcHRJbmplY3Rpb25UaW1lKGluamVjdGlvblRp
bWUpLCBmb3JNYWluRnJhbWVPbmx5ID8gV2ViQ29yZTo6VXNlckNvbnRlbnRJbmplY3RlZEZyYW1l
czo6SW5qZWN0SW5Ub3BGcmFtZU9ubHkgOiBXZWJDb3JlOjpVc2VyQ29udGVudEluamVjdGVkRnJh
bWVzOjpJbmplY3RJbkFsbEZyYW1lcywgV2ViQ29yZTo6V2FpdEZvck5vdGlmaWNhdGlvbkJlZm9y
ZUluamVjdGluZzo6Tm8gfSwgKmNvbnRlbnRXb3JsZC0+X2NvbnRlbnRXb3JsZCk7CiAKICAgICBy
ZXR1cm4gc2VsZjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcuaAppbmRleCA2YzgyYTY4ZTQyODM2NzQ1MTMzMWI2OTI3MzBlOTIyOTVjNTAxMWZmLi40
NjU5YmYzMDEyOTA1MDE0NjQ5YzY1MWY0ZjBjZTFmZmQ2MWIyMDk2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3LmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5oCkBAIC0zOCw2ICszOCw3IEBAIE5T
X0FTU1VNRV9OT05OVUxMX0JFR0lOCiBAY2xhc3MgV0tDb250ZW50V29ybGQ7CiBAY2xhc3MgV0tG
aW5kQ29uZmlndXJhdGlvbjsKIEBjbGFzcyBXS0ZpbmRSZXN1bHQ7CitAY2xhc3MgV0tGcmFtZUlu
Zm87CiBAY2xhc3MgV0tOYXZpZ2F0aW9uOwogQGNsYXNzIFdLUERGQ29uZmlndXJhdGlvbjsKIEBj
bGFzcyBXS1NuYXBzaG90Q29uZmlndXJhdGlvbjsKQEAgLTIyMCwxNCArMjIxLDI1IEBAIFdLX0NM
QVNTX0FWQUlMQUJMRShtYWNvcygxMC4xMCksIGlvcyg4LjApKQogIEBwYXJhbSBqYXZhU2NyaXB0
U3RyaW5nIFRoZSBKYXZhU2NyaXB0IHN0cmluZyB0byBldmFsdWF0ZS4KICBAcGFyYW0gY29tcGxl
dGlvbkhhbmRsZXIgQSBibG9jayB0byBpbnZva2Ugd2hlbiBzY3JpcHQgZXZhbHVhdGlvbiBjb21w
bGV0ZXMgb3IgZmFpbHMuCiAgQGRpc2N1c3Npb24gVGhlIGNvbXBsZXRpb25IYW5kbGVyIGlzIHBh
c3NlZCB0aGUgcmVzdWx0IG9mIHRoZSBzY3JpcHQgZXZhbHVhdGlvbiBvciBhbiBlcnJvci4KKyBD
YWxsaW5nIHRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBgZXZhbHVhdGVKYXZh
U2NyaXB0OmluRnJhbWU6aW5Db250ZW50V29ybGQ6Y29tcGxldGlvbkhhbmRsZXI6YCB3aXRoOgor
ICAgLSBBIGBmcmFtZWAgdmFsdWUgb2YgYG5pbGAgdG8gcmVwcmVzZW50IHRoZSBtYWluIGZyYW1l
CisgICAtIEEgYGNvbnRlbnRXb3JsZGAgdmFsdWUgb2YgYFdLQ29udGVudFdvcmxkLnBhZ2VXb3Js
ZGAKICovCiAtICh2b2lkKWV2YWx1YXRlSmF2YVNjcmlwdDooTlNTdHJpbmcgKilqYXZhU2NyaXB0
U3RyaW5nIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheIF9OdWxsYWJsZSkoX051bGxhYmxlIGlk
LCBOU0Vycm9yICogX051bGxhYmxlIGVycm9yKSljb21wbGV0aW9uSGFuZGxlcjsKIAogLyogQGFi
c3RyYWN0IEV2YWx1YXRlcyB0aGUgZ2l2ZW4gSmF2YVNjcmlwdCBzdHJpbmcuCiAgQHBhcmFtIGph
dmFTY3JpcHRTdHJpbmcgVGhlIEphdmFTY3JpcHQgc3RyaW5nIHRvIGV2YWx1YXRlLgorIEBwYXJh
bSBmcmFtZSBBIFdLRnJhbWVJbmZvIGlkZW50aWZ5aW5nIHRoZSBmcmFtZSBpbiB3aGljaCB0byBl
dmFsdWF0ZSB0aGUgSmF2YVNjcmlwdCBzdHJpbmcuCiAgQHBhcmFtIGNvbnRlbnRXb3JsZCBUaGUg
V0tDb250ZW50V29ybGQgaW4gd2hpY2ggdG8gZXZhbHVhdGUgdGhlIEphdmFTY3JpcHQgc3RyaW5n
LgogIEBwYXJhbSBjb21wbGV0aW9uSGFuZGxlciBBIGJsb2NrIHRvIGludm9rZSB3aGVuIHNjcmlw
dCBldmFsdWF0aW9uIGNvbXBsZXRlcyBvciBmYWlscy4KICBAZGlzY3Vzc2lvbiBUaGUgY29tcGxl
dGlvbkhhbmRsZXIgaXMgcGFzc2VkIHRoZSByZXN1bHQgb2YgdGhlIHNjcmlwdCBldmFsdWF0aW9u
IG9yIGFuIGVycm9yLgorCisgUGFzc2luZyBuaWwgaXMgZXF1aXZhbGVudCB0byB0YXJnZXRpbmcg
dGhlIG1haW4gZnJhbWUuCisgSWYgdGhlIGZyYW1lIGFyZ3VtZW50IG5vIGxvbmdlciByZXByZXNl
bnRzIGEgdmFsaWQgZnJhbWUgYnkgdGhlIHRpbWUgV2ViS2l0IGF0dGVtcHRzIHRvIGNhbGwgdGhl
IEphdmFTY3JpcHQgZnVuY3Rpb24geW91ciBjb21wbGV0aW9uIGhhbmRsZXIgd2lsbCBiZSBjYWxs
ZWQgd2l0aCBhIFdLRXJyb3JKYXZhU2NyaXB0SW52YWxpZEZyYW1lVGFyZ2V0IGVycm9yLgorIFRo
aXMgbWlnaHQgaGFwcGVuIGZvciBhIG51bWJlciBvZiByZWFzb25zLCBpbmNsdWRpbmcgYnV0IG5v
dCBsaW1pdGVkIHRvOgorICAgICAtIFRoZSB0YXJnZXQgZnJhbWUgaGFzIGJlZW4gcmVtb3ZlZCBm
cm9tIHRoZSBET00gdmlhIEphdmFTY3JpcHQKKyAgICAgLSBBIHBhcmVudCBmcmFtZSBoYXMgbmF2
aWdhdGVkLCBkZXN0cm95aW5nIGFsbCBvZiBpdHMgcHJldmlvdXMgY2hpbGQgZnJhbWVzCisKICBO
byBtYXR0ZXIgd2hpY2ggV0tDb250ZW50V29ybGQgeW91IHVzZSB0byBldmFsdWF0ZSB5b3VyIEph
dmFTY3JpcHQgc3RyaW5nLCB5b3UgY2FuIG1ha2UgY2hhbmdlcyB0byB0aGUgdW5kZXJseWluZyB3
ZWIgY29udGVudC4gKGUuZy4gdGhlIERvY3VtZW50IGFuZCBpdHMgRE9NIHN0cnVjdHVyZSkKICBT
dWNoIGNoYW5nZXMgd2lsbCBiZSB2aXNpYmxlIHRvIHNjcmlwdCBleGVjdXRpbmcgaW4gYWxsIFdL
Q29udGVudFdvcmxkcy4KICBFdmFsdWF0aW5nIHlvdXIgSmF2YVNjcmlwdCBzdHJpbmcgY2FuIGxl
YXZlIGJlaGluZCBvdGhlciBjaGFuZ2VzIHRvIGdsb2JhbCBzdGF0ZSB2aXNpYmlsZSB0byBKYXZh
U2NyaXB0LiAoZS5nLiBgd2luZG93Lm15VmFyaWFibGUgPSAxO2ApCkBAIC0yMzUsMTEgKzI0Nywx
MiBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoMTAuMTApLCBpb3MoOC4wKSkKICBldmFsdWF0
ZUphdmFTY3JpcHQ6IGlzIGEgZ3JlYXQgd2F5IHRvIHNldCB1cCBnbG9iYWwgc3RhdGUgZm9yIGZ1
dHVyZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBpbiBhIGdpdmVuIHdvcmxkLiAoZS5nLiBJbXBvcnRp
bmcgbGlicmFyaWVzL3V0aWxpdGllcyB0aGF0IGZ1dHVyZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbiB3
aWxsIHJlbHkgb24pCiAgT25jZSB5b3VyIGdsb2JhbCBzdGF0ZSBpcyBzZXQgdXAsIGNvbnNpZGVy
IHVzaW5nIGNhbGxBc3luY0phdmFTY3JpcHQ6IGZvciBtb3JlIGZsZXhpYmxlIGludGVyYWN0aW9u
IHdpdGggdGhlIEphdmFTY3JpcHQgcHJvZ3JhbW1pbmcgbW9kZWwuCiAqLwotLSAodm9pZClldmFs
dWF0ZUphdmFTY3JpcHQ6KE5TU3RyaW5nICopamF2YVNjcmlwdFN0cmluZyBpbkNvbnRlbnRXb3Js
ZDooV0tDb250ZW50V29ybGQgKiljb250ZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4gX051bGxhYmxlKShfTnVsbGFibGUgaWQsIE5TRXJyb3IgKiBfTnVsbGFibGUgZXJyb3IpKWNv
bXBsZXRpb25IYW5kbGVyIE5TX1JFRklORURfRk9SX1NXSUZUIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKWV2YWx1YXRlSmF2YVNj
cmlwdDooTlNTdHJpbmcgKilqYXZhU2NyaXB0U3RyaW5nIGluRnJhbWU6KG51bGxhYmxlIFdLRnJh
bWVJbmZvICopZnJhbWUgaW5Db250ZW50V29ybGQ6KFdLQ29udGVudFdvcmxkICopY29udGVudFdv
cmxkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheIF9OdWxsYWJsZSkoX051bGxhYmxlIGlkLCBO
U0Vycm9yICogX051bGxhYmxlIGVycm9yKSljb21wbGV0aW9uSGFuZGxlciBOU19SRUZJTkVEX0ZP
Ul9TV0lGVCBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpOwogCiAvKiBAYWJzdHJhY3QgQ2FsbHMgdGhlIGdpdmVuIEphdmFTY3JpcHQgc3RyaW5nIGFz
IGFuIGFzeW5jIEphdmFTY3JpcHQgZnVuY3Rpb24sIHBhc3NpbmcgdGhlIGdpdmVuIG5hbWVkIGFy
Z3VtZW50cyB0byB0aGF0IGZ1bmN0aW9uLgogIEBwYXJhbSBmdW5jdGlvbkJvZHkgVGhlIEphdmFT
Y3JpcHQgc3RyaW5nIHRvIHVzZSBhcyB0aGUgZnVuY3Rpb24gYm9keS4KICBAcGFyYW0gYXJndW1l
bnRzIEEgZGljdGlvbmFyeSByZXByZXNlbnRpbmcgdGhlIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQg
dG8gdGhlIGZ1bmN0aW9uIGNhbGwuCisgQHBhcmFtIGZyYW1lIEEgV0tGcmFtZUluZm8gaWRlbnRp
ZnlpbmcgdGhlIGZyYW1lIGluIHdoaWNoIHRvIGNhbGwgdGhlIEphdmFTY3JpcHQgZnVuY3Rpb24u
CiAgQHBhcmFtIGNvbnRlbnRXb3JsZCBUaGUgV0tDb250ZW50V29ybGQgaW4gd2hpY2ggdG8gY2Fs
bCB0aGUgSmF2YVNjcmlwdCBmdW5jdGlvbi4KICBAcGFyYW0gY29tcGxldGlvbkhhbmRsZXIgQSBi
bG9jayB0byBpbnZva2Ugd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBjYWxs
LCBvciB3aXRoIHRoZSBhc3luY2hyb25vdXMgcmVzb2x1dGlvbiBvZiB0aGUgZnVuY3Rpb24ncyBy
ZXR1cm4gdmFsdWUuCiAgQGRpc2N1c3Npb24gVGhlIGZ1bmN0aW9uQm9keSBzdHJpbmcgaXMgdHJl
YXRlZCBhcyBhbiBhbm9ueW1vdXMgSmF2YVNjcmlwdCBmdW5jdGlvbiBib2R5IHRoYXQgY2FuIGJl
IGNhbGxlZCB3aXRoIG5hbWVkIGFyZ3VtZW50cy4KQEAgLTI3MSw2ICsyODQsMTIgQEAgV0tfQ0xB
U1NfQVZBSUxBQkxFKG1hY29zKDEwLjEwKSwgaW9zKDguMCkpCiAgTlNOdW1iZXIsIE5TU3RyaW5n
LCBOU0RhdGUsIE5TQXJyYXksIE5TRGljdGlvbmFyeSwgYW5kIE5TTnVsbC4KICBBbnkgTlNBcnJh
eSBvciBOU0RpY3Rpb25hcnkgY29udGFpbmVycyBjYW4gb25seSBjb250YWluIG9iamVjdHMgb2Yg
dGhvc2UgdHlwZXMuCiAKKyBQYXNzaW5nIG5pbCBpcyBlcXVpdmFsZW50IHRvIHRhcmdldGluZyB0
aGUgbWFpbiBmcmFtZS4KKyBJZiB0aGUgZnJhbWUgYXJndW1lbnQgbm8gbG9uZ2VyIHJlcHJlc2Vu
dHMgYSB2YWxpZCBmcmFtZSBieSB0aGUgdGltZSBXZWJLaXQgYXR0ZW1wdHMgdG8gY2FsbCB0aGUg
SmF2YVNjcmlwdCBmdW5jdGlvbiB5b3VyIGNvbXBsZXRpb24gaGFuZGxlciB3aWxsIGJlIGNhbGxl
ZCB3aXRoIGEgV0tFcnJvckphdmFTY3JpcHRJbnZhbGlkRnJhbWVUYXJnZXQgZXJyb3IuCisgVGhp
cyBtaWdodCBoYXBwZW4gZm9yIGEgbnVtYmVyIG9mIHJlYXNvbnMsIGluY2x1ZGluZyBidXQgbm90
IGxpbWl0ZWQgdG86CisgICAgIC0gVGhlIHRhcmdldCBmcmFtZSBoYXMgYmVlbiByZW1vdmVkIGZy
b20gdGhlIERPTSB2aWEgSmF2YVNjcmlwdAorICAgICAtIEEgcGFyZW50IGZyYW1lIGhhcyBuYXZp
Z2F0ZWQsIGRlc3Ryb3lpbmcgYWxsIG9mIGl0cyBwcmV2aW91cyBjaGlsZCBmcmFtZXMKKwogIE5v
IG1hdHRlciB3aGljaCBXS0NvbnRlbnRXb3JsZCB5b3UgdXNlIHRvIGNhbGwgeW91ciBKYXZhU2Ny
aXB0IGZ1bmN0aW9uLCB5b3UgY2FuIG1ha2UgY2hhbmdlcyB0byB0aGUgdW5kZXJseWluZyB3ZWIg
Y29udGVudC4gKGUuZy4gdGhlIERvY3VtZW50IGFuZCBpdHMgRE9NIHN0cnVjdHVyZSkKICBTdWNo
IGNoYW5nZXMgd2lsbCBiZSB2aXNpYmxlIHRvIHNjcmlwdCBleGVjdXRpbmcgaW4gYWxsIFdLQ29u
dGVudFdvcmxkcy4KICBDYWxsaW5nIHlvdXIgSmF2YVNjcmlwdCBmdW5jdGlvbiBjYW4gbGVhdmUg
YmVoaW5kIG90aGVyIGNoYW5nZXMgdG8gZ2xvYmFsIHN0YXRlIHZpc2liaWxlIHRvIEphdmFTY3Jp
cHQuIChlLmcuIGB3aW5kb3cubXlWYXJpYWJsZSA9IDE7YCkKQEAgLTMwMCw3ICszMTksNyBAQCBX
S19DTEFTU19BVkFJTEFCTEUobWFjb3MoMTAuMTApLCBpb3MoOC4wKSkKIAogIFRoZSBhYm92ZSBm
dW5jdGlvbiB0ZXh0IHdpbGwgY3JlYXRlIGEgcHJvbWlzZSB0aGF0IHdpbGwgZnVsZnVsbCB3aXRo
IHRoZSB2YWx1ZSA0MiBhZnRlciBhIG9uZSBzZWNvbmQgZGVsYXksIHdhaXQgZm9yIGl0IHRvIHJl
c29sdmUsIHRoZW4gcmV0dXJuIHRoZSBmdWxmaWxsbWVudCB2YWx1ZSBvZiA0Mi4KICovCi0tICh2
b2lkKWNhbGxBc3luY0phdmFTY3JpcHQ6KE5TU3RyaW5nICopZnVuY3Rpb25Cb2R5IGFyZ3VtZW50
czoobnVsbGFibGUgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKWFyZ3VtZW50cyBpbkNv
bnRlbnRXb3JsZDooV0tDb250ZW50V29ybGQgKiljb250ZW50V29ybGQgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4gX051bGxhYmxlKShfTnVsbGFibGUgaWQsIE5TRXJyb3IgKiBfTnVsbGFibGUg
ZXJyb3IpKWNvbXBsZXRpb25IYW5kbGVyIE5TX1JFRklORURfRk9SX1NXSUZUIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKWNhbGxB
c3luY0phdmFTY3JpcHQ6KE5TU3RyaW5nICopZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czoobnVsbGFi
bGUgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKWFyZ3VtZW50cyBpbkZyYW1lOihudWxs
YWJsZSBXS0ZyYW1lSW5mbyAqKWZyYW1lIGluQ29udGVudFdvcmxkOihXS0NvbnRlbnRXb3JsZCAq
KWNvbnRlbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiBfTnVsbGFibGUpKF9OdWxs
YWJsZSBpZCwgTlNFcnJvciAqIF9OdWxsYWJsZSBlcnJvcikpY29tcGxldGlvbkhhbmRsZXIgTlNf
UkVGSU5FRF9GT1JfU1dJRlQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKIAogLyohIEBhYnN0cmFjdCBHZXQgYSBzbmFwc2hvdCBmb3IgdGhlIHZp
c2libGUgdmlld3BvcnQgb2YgV0tXZWJWaWV3LgogIEBwYXJhbSBzbmFwc2hvdENvbmZpZ3VyYXRp
b24gQW4gb2JqZWN0IHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgc25hcHNob3QgaXMgY29uZmlndXJl
ZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmlu
ZGV4IDEyODg0YWUwMTRjNTgwMjU4NmFiYjdjNzIxMDVlZDlhNTY3YWI4MzkuLjY3MGYzYTE5MzA2
ZWU3OTczYzAxZjY0YzQyZThhMjg0ZjdmMThmZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtODE5LDE0ICs4MTksMTQgQEAgLSAodm9p
ZClldmFsdWF0ZUphdmFTY3JpcHQ6KE5TU3RyaW5nICopamF2YVNjcmlwdFN0cmluZyBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZAogICAgIFtzZWxmIF9ldmFsdWF0ZUphdmFTY3JpcHQ6amF2YVNjcmlw
dFN0cmluZyBhc0FzeW5jRnVuY3Rpb246Tk8gd2l0aFNvdXJjZVVSTDpuaWwgd2l0aEFyZ3VtZW50
czpuaWwgZm9yY2VVc2VyR2VzdHVyZTpZRVMgaW5GcmFtZTpuaWwgaW5Xb3JsZDpXS0NvbnRlbnRX
b3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwogfQog
Ci0tICh2b2lkKWV2YWx1YXRlSmF2YVNjcmlwdDooTlNTdHJpbmcgKilqYXZhU2NyaXB0U3RyaW5n
IGluQ29udGVudFdvcmxkOihXS0NvbnRlbnRXb3JsZCAqKWNvbnRlbnRXb3JsZCBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikoaWQsIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZv
aWQpZXZhbHVhdGVKYXZhU2NyaXB0OihOU1N0cmluZyAqKWphdmFTY3JpcHRTdHJpbmcgaW5GcmFt
ZTooV0tGcmFtZUluZm8gKilmcmFtZSBpbkNvbnRlbnRXb3JsZDooV0tDb250ZW50V29ybGQgKilj
b250ZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKGlkLCBOU0Vycm9yICopKWNv
bXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgW3NlbGYgX2V2YWx1YXRlSmF2YVNjcmlwdDpqYXZhU2Ny
aXB0U3RyaW5nIGFzQXN5bmNGdW5jdGlvbjpOTyB3aXRoU291cmNlVVJMOm5pbCB3aXRoQXJndW1l
bnRzOm5pbCBmb3JjZVVzZXJHZXN0dXJlOllFUyBpbkZyYW1lOm5pbCBpbldvcmxkOmNvbnRlbnRX
b3JsZCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CisgICAgW3NlbGYgX2V2
YWx1YXRlSmF2YVNjcmlwdDpqYXZhU2NyaXB0U3RyaW5nIGFzQXN5bmNGdW5jdGlvbjpOTyB3aXRo
U291cmNlVVJMOm5pbCB3aXRoQXJndW1lbnRzOm5pbCBmb3JjZVVzZXJHZXN0dXJlOllFUyBpbkZy
YW1lOmZyYW1lIGluV29ybGQ6Y29udGVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRp
b25IYW5kbGVyXTsKIH0KIAotLSAodm9pZCljYWxsQXN5bmNKYXZhU2NyaXB0OihOU1N0cmluZyAq
KWphdmFTY3JpcHRTdHJpbmcgYXJndW1lbnRzOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopYXJndW1lbnRzIGluQ29udGVudFdvcmxkOihXS0NvbnRlbnRXb3JsZCAqKWNvbnRlbnRXb3Js
ZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoaWQsIE5TRXJyb3IgKmVycm9yKSljb21wbGV0
aW9uSGFuZGxlcgorLSAodm9pZCljYWxsQXN5bmNKYXZhU2NyaXB0OihOU1N0cmluZyAqKWphdmFT
Y3JpcHRTdHJpbmcgYXJndW1lbnRzOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopYXJn
dW1lbnRzIGluRnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgaW5Db250ZW50V29ybGQ6KFdLQ29u
dGVudFdvcmxkICopY29udGVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShpZCwg
TlNFcnJvciAqZXJyb3IpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgW3NlbGYgX2V2YWx1YXRl
SmF2YVNjcmlwdDpqYXZhU2NyaXB0U3RyaW5nIGFzQXN5bmNGdW5jdGlvbjpZRVMgd2l0aFNvdXJj
ZVVSTDpuaWwgd2l0aEFyZ3VtZW50czphcmd1bWVudHMgZm9yY2VVc2VyR2VzdHVyZTpZRVMgaW5G
cmFtZTpuaWwgaW5Xb3JsZDpjb250ZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlv
bkhhbmRsZXJdOworICAgIFtzZWxmIF9ldmFsdWF0ZUphdmFTY3JpcHQ6amF2YVNjcmlwdFN0cmlu
ZyBhc0FzeW5jRnVuY3Rpb246WUVTIHdpdGhTb3VyY2VVUkw6bmlsIHdpdGhBcmd1bWVudHM6YXJn
dW1lbnRzIGZvcmNlVXNlckdlc3R1cmU6WUVTIGluRnJhbWU6ZnJhbWUgaW5Xb3JsZDpjb250ZW50
V29ybGQgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwogfQogCiBzdGF0aWMg
Ym9vbCB2YWxpZGF0ZUFyZ3VtZW50KGlkIGFyZ3VtZW50KQpAQCAtODYzLDYgKzg2MywzMSBAQCBz
dGF0aWMgYm9vbCB2YWxpZGF0ZUFyZ3VtZW50KGlkIGFyZ3VtZW50KQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAorc3RhdGljIFJldGFpblB0cjxOU0Vycm9yPiBuc0Vycm9yRnJvbUV4Y2VwdGlvbkRl
dGFpbHMoY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGV0YWlscyYgZGV0YWlscykKK3sKKyAgICBh
dXRvIHVzZXJJbmZvID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRd
KTsKKworICAgIFdLRXJyb3JDb2RlIGVycm9yQ29kZTsKKyAgICBzd2l0Y2ggKGRldGFpbHMudHlw
ZSkgeworICAgIGNhc2UgV2ViQ29yZTo6RXhjZXB0aW9uRGV0YWlsczo6VHlwZTo6SW52YWxpZFRh
cmdldEZyYW1lOgorICAgICAgICBlcnJvckNvZGUgPSBXS0Vycm9ySmF2YVNjcmlwdEludmFsaWRG
cmFtZVRhcmdldDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJDb3JlOjpFeGNlcHRpb25E
ZXRhaWxzOjpUeXBlOjpTY3JpcHQ6CisgICAgICAgIGVycm9yQ29kZSA9IFdLRXJyb3JKYXZhU2Ny
aXB0RXhjZXB0aW9uT2NjdXJyZWQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIFt1c2Vy
SW5mbyBzZXRPYmplY3Q6bG9jYWxpemVkRGVzY3JpcHRpb25Gb3JFcnJvckNvZGUoZXJyb3JDb2Rl
KSBmb3JLZXk6TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleV07CisgICAgW3VzZXJJbmZvIHNldE9i
amVjdDpkZXRhaWxzLm1lc3NhZ2UgZm9yS2V5Ol9XS0phdmFTY3JpcHRFeGNlcHRpb25NZXNzYWdl
RXJyb3JLZXldOworICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6QChkZXRhaWxzLmxpbmVOdW1iZXIp
IGZvcktleTpfV0tKYXZhU2NyaXB0RXhjZXB0aW9uTGluZU51bWJlckVycm9yS2V5XTsKKyAgICBb
dXNlckluZm8gc2V0T2JqZWN0OkAoZGV0YWlscy5jb2x1bW5OdW1iZXIpIGZvcktleTpfV0tKYXZh
U2NyaXB0RXhjZXB0aW9uQ29sdW1uTnVtYmVyRXJyb3JLZXldOworCisgICAgaWYgKCFkZXRhaWxz
LnNvdXJjZVVSTC5pc0VtcHR5KCkpCisgICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6W05TVVJM
IF93ZWJfVVJMV2l0aFdURlN0cmluZzpkZXRhaWxzLnNvdXJjZVVSTF0gZm9yS2V5Ol9XS0phdmFT
Y3JpcHRFeGNlcHRpb25Tb3VyY2VVUkxFcnJvcktleV07CisKKyAgICByZXR1cm4gYWRvcHROUyhb
W05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOldLRXJyb3JEb21haW4gY29kZTplcnJvckNv
ZGUgdXNlckluZm86dXNlckluZm8uZ2V0KCldKTsKK30KKwogLSAodm9pZClfZXZhbHVhdGVKYXZh
U2NyaXB0OihOU1N0cmluZyAqKWphdmFTY3JpcHRTdHJpbmcgYXNBc3luY0Z1bmN0aW9uOihCT09M
KWFzQXN5bmNGdW5jdGlvbiB3aXRoU291cmNlVVJMOihOU1VSTCAqKXNvdXJjZVVSTCB3aXRoQXJn
dW1lbnRzOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopYXJndW1lbnRzIGZvcmNlVXNl
ckdlc3R1cmU6KEJPT0wpZm9yY2VVc2VyR2VzdHVyZSBpbkZyYW1lOihXS0ZyYW1lSW5mbyAqKWZy
YW1lIGluV29ybGQ6KFdLQ29udGVudFdvcmxkICopd29ybGQgY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQgKF4pKGlkLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7CiAgICAgYXV0byBoYW5k
bGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOwpAQCAtOTI5LDE4ICs5NTQs
NyBAQCAtICh2b2lkKV9ldmFsdWF0ZUphdmFTY3JpcHQ6KE5TU3RyaW5nICopamF2YVNjcmlwdFN0
cmluZyBhc0FzeW5jRnVuY3Rpb246KEJPT0wpYQogICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAo
dm9pZCAoXikoaWQsIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKICAgICAgICAgaWYgKGRldGFp
bHMpIHsKICAgICAgICAgICAgIEFTU0VSVCghc2VyaWFsaXplZFNjcmlwdFZhbHVlKTsKLQotICAg
ICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHVzZXJJbmZvID0gYWRvcHRO
UyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLQotICAgICAgICAgICAgW3Vz
ZXJJbmZvIHNldE9iamVjdDpsb2NhbGl6ZWREZXNjcmlwdGlvbkZvckVycm9yQ29kZShXS0Vycm9y
SmF2YVNjcmlwdEV4Y2VwdGlvbk9jY3VycmVkKSBmb3JLZXk6TlNMb2NhbGl6ZWREZXNjcmlwdGlv
bktleV07Ci0gICAgICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0OnN0YXRpY19jYXN0PE5TU3Ry
aW5nICo+KGRldGFpbHMtPm1lc3NhZ2UpIGZvcktleTpfV0tKYXZhU2NyaXB0RXhjZXB0aW9uTWVz
c2FnZUVycm9yS2V5XTsKLSAgICAgICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6QChkZXRhaWxz
LT5saW5lTnVtYmVyKSBmb3JLZXk6X1dLSmF2YVNjcmlwdEV4Y2VwdGlvbkxpbmVOdW1iZXJFcnJv
cktleV07Ci0gICAgICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0OkAoZGV0YWlscy0+Y29sdW1u
TnVtYmVyKSBmb3JLZXk6X1dLSmF2YVNjcmlwdEV4Y2VwdGlvbkNvbHVtbk51bWJlckVycm9yS2V5
XTsKLQotICAgICAgICAgICAgaWYgKCFkZXRhaWxzLT5zb3VyY2VVUkwuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0
cmluZzpkZXRhaWxzLT5zb3VyY2VVUkxdIGZvcktleTpfV0tKYXZhU2NyaXB0RXhjZXB0aW9uU291
cmNlVVJMRXJyb3JLZXldOwotCi0gICAgICAgICAgICByYXdIYW5kbGVyKG5pbCwgYWRvcHROUyhb
W05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOldLRXJyb3JEb21haW4gY29kZTpXS0Vycm9y
SmF2YVNjcmlwdEV4Y2VwdGlvbk9jY3VycmVkIHVzZXJJbmZvOnVzZXJJbmZvLmdldCgpXSkuZ2V0
KCkpOworICAgICAgICAgICAgcmF3SGFuZGxlcihuaWwsIG5zRXJyb3JGcm9tRXhjZXB0aW9uRGV0
YWlscygqZGV0YWlscykuZ2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggMDk2
NWQyYzAwNzIwZTE1NzAzMzFkMzBlMTA4ZTVlMWRiYWIzNTU5MS4uYzdjOTFlYThiZTJhYmE3NmZi
YmQ3M2VmYWZlYTExNTRlNzkxZGMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTM0MTIsNyArMzQxMiw3IEBAIHZvaWQgV2ViUGFnZTo6cnVu
SmF2YVNjcmlwdChXZWJGcmFtZSogZnJhbWUsIFJ1bkphdmFTY3JpcHRQYXJhbWV0ZXJzJiYgcGFy
YW1ldGVyCiAgICAgLy8gZGlzYXBwZWFyIGR1cmluZyBzY3JpcHQgZXhlY3V0aW9uLgogCiAgICAg
aWYgKCFmcmFtZSB8fCAhZnJhbWUtPmNvcmVGcmFtZSgpKSB7Ci0gICAgICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6U2NyaXB0VmFsdWVDYWxsYmFjayh7IH0sIEV4Y2VwdGlvbkRldGFp
bHMgeyAiVW5hYmxlIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdDogUGFnZSBpcyBpbiBpbnZhbGlkIHN0
YXRlIl9zIH0sIGNhbGxiYWNrSUQpKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpTY3JpcHRWYWx1ZUNhbGxiYWNrKHsgfSwgRXhjZXB0aW9uRGV0YWlscyB7ICJVbmFibGUg
dG8gZXhlY3V0ZSBKYXZhU2NyaXB0OiBUYXJnZXQgZnJhbWUgY291bGQgbm90IGJlIGZvdW5kIGlu
IHRoZSBwYWdlIl9zLCAwLCAwLCBFeGNlcHRpb25EZXRhaWxzOjpUeXBlOjpJbnZhbGlkVGFyZ2V0
RnJhbWUgfSwgY2FsbGJhY2tJRCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjRlNzJmOGMyZTNk
MTRiMmM1NTk4ZTc4NjUzNTE4MGFmODYzZWE0NC4uOGZjYzQ5ZDg4Zjc2M2MxZGUxZTRiNDUzOGU1
MjNiNzU5NmE5ODMyYiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDIwLTA2LTI5ICBCcmFkeSBFaWRzb24gIDxiZWlk
c29uQGFwcGxlLmNvbT4KKworICAgICAgICBKYXZhU2NyaXB0IGNhbm5vdCBiZSBpbmplY3RlZCBp
bnRvIGlmcmFtZXMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU0MTY4OTQ2PiBhbmQgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzU1NgorCisgICAgICAgIFJldmll
d2VkIGJ5IEdlb2ZmIEdhcmVuLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9Bc3luY0Z1bmN0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Vc2VyQ29udGVudENv
bnRyb2xsZXIubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLVVJMU2NoZW1lSGFuZGxlci0xLm1tOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1t
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgICgtW0ZyYW1lc01lc3NhZ2VIYW5kbGVyIHVzZXJD
b250ZW50Q29udHJvbGxlcjpkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmll
dyBvYmplY3RCeUNhbGxpbmdBc3luY0Z1bmN0aW9uOndpdGhBcmd1bWVudHM6ZXJyb3I6XSk6CisK
IDIwMjAtMDYtMTYgIENoYXJsaWUgVHVybmVyICA8Y3R1cm5lckBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFtHVEtdIERpc2FibGUgdmlkZW8gYXV0b3BsYXkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQXN5bmNGdW5jdGlvbi5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQXN5bmNGdW5jdGlvbi5tbQppbmRleCBlYmI1Yjg1
ZWY3ZjRmN2MyZmJmMTE2NzBmZjBjMTAzYmVkNWNjNmFlLi5hNDkyNzU3ODNkOGFkYjAxYTIxYTQ0
ZGM1N2E0MTY0ZjAwMTMwNGUxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0FzeW5jRnVuY3Rpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Bc3luY0Z1bmN0aW9uLm1tCkBAIC0xODMsMTIgKzE4MywxMiBAQCBU
RVNUKEFzeW5jRnVuY3Rpb24sIFByb21pc2UpCiB7CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCldKTsKIAotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6QCJzaG91bGRu
J3QgY3Jhc2giIGFyZ3VtZW50czpAeyBAImludmFsaWRwYXJhbWV0ZXIiIDogd2ViVmlldy5nZXQo
KSB9IGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFu
ZGxlcjpuaWxdOworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6QCJzaG91bGRuJ3Qg
Y3Jhc2giIGFyZ3VtZW50czpAeyBAImludmFsaWRwYXJhbWV0ZXIiIDogd2ViVmlldy5nZXQoKSB9
IGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21w
bGV0aW9uSGFuZGxlcjpuaWxdOwogCiAgICAgTlNTdHJpbmcgKmZ1bmN0aW9uQm9keSA9IEAicmV0
dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeyBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCl7IHJlc29sdmUoNDIpIH0sIDApOyB9KSI7CiAKICAgICBib29sIGRvbmUgPSBmYWxz
ZTsKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVu
dHM6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9u
SGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBj
YWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluRnJhbWU6bmls
IGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxl
cjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwo
ZXJyb3IpOwogICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzS2luZE9mQ2xhc3M6W05TTnVt
YmVyIGNsYXNzXV0pOwogICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb051bWJl
cjpANDJdKTsKQEAgLTIwMCw3ICsyMDAsNyBAQCBURVNUKEFzeW5jRnVuY3Rpb24sIFByb21pc2Up
CiAgICAgZnVuY3Rpb25Cb2R5ID0gQCJyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2
ZSwgcmVqZWN0KSB7IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgcmVqZWN0KCdSZWplY3RlZCEnKSB9
LCAwKTsgfSkiOwogCiAgICAgZG9uZSA9IGZhbHNlOwotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0ph
dmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250
ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vy
cm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25C
b2R5IGFyZ3VtZW50czpuaWwgaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29y
bGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICpl
cnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChyZXN1bHQpOwogICAgICAgICBFWFBFQ1RfVFJV
RShlcnJvciAhPSBuaWwpOwogICAgICAgICBFWFBFQ1RfVFJVRShbW2Vycm9yIGRlc2NyaXB0aW9u
XSBjb250YWluc1N0cmluZzpAIlJlamVjdGVkISJdKTsKQEAgLTIxMSw3ICsyMTEsNyBAQCBURVNU
KEFzeW5jRnVuY3Rpb24sIFByb21pc2UpCiAgICAgZnVuY3Rpb25Cb2R5ID0gQCJsZXQgcCA9IG5l
dyBQcm94eShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsgc2V0VGltZW91dChmdW5jdGlvbigp
IHsgcmVzb2x2ZSg0Mik7IH0sIDApOyB9LCB7IH0pOyByZXR1cm4geyB0aGVuOiBwIH07IjsKIAog
ICAgIGRvbmUgPSBmYWxzZTsKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0
aW9uQm9keSBhcmd1bWVudHM6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VX
b3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsK
KyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6
bmlsIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBj
b21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAg
ICAgRVhQRUNUX05VTEwoZXJyb3IpOwogICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzS2lu
ZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pOwogICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0
IGlzRXF1YWxUb051bWJlcjpANDJdKTsKQEAgLTIyMiw3ICsyMjIsNyBAQCBURVNUKEFzeW5jRnVu
Y3Rpb24sIFByb21pc2UpCiAgICAgZnVuY3Rpb25Cb2R5ID0gQCJsZXQgcCA9IG5ldyBQcm94eShm
dW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsgc2V0VGltZW91dChmdW5jdGlvbigpIHsgcmVqZWN0
KCdSZWplY3RlZCEnKTsgfSwgMCk7IH0sIHsgfSk7IHJldHVybiB7IHRoZW46IHAgfTsiOwogCiAg
ICAgZG9uZSA9IGZhbHNlOwotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rp
b25Cb2R5IGFyZ3VtZW50czpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdv
cmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewor
ICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpu
aWwgaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNv
bXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAg
ICBFWFBFQ1RfTlVMTChyZXN1bHQpOwogICAgICAgICBFWFBFQ1RfVFJVRShlcnJvciAhPSBuaWwp
OwogICAgICAgICBFWFBFQ1RfVFJVRShbW2Vycm9yIGRlc2NyaXB0aW9uXSBjb250YWluc1N0cmlu
ZzpAIlJlamVjdGVkISJdKTsKQEAgLTIzNCw3ICsyMzQsNyBAQCBURVNUKEFzeW5jRnVuY3Rpb24s
IFByb21pc2UpCiAgICAgZnVuY3Rpb25Cb2R5ID0gQCJ2YXIgciA9IDA7IHZhciBwID0gbmV3IFBy
b21pc2UoZnVuY3Rpb24oZnVsZmlsbCwgcmVqZWN0KSB7IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsg
ciA9IDQyOyBmdWxmaWxsKCk7IH0sIDUpO30pOyBhd2FpdCBwOyByZXR1cm4gcjsiOwogCiAgICAg
ZG9uZSA9IGZhbHNlOwotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25C
b2R5IGFyZ3VtZW50czpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxk
IGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAg
IFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpuaWwg
aW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBs
ZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBF
WFBFQ1RfTlVMTChlcnJvcik7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNLaW5kT2ZD
bGFzczpbTlNOdW1iZXIgY2xhc3NdXSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNF
cXVhbFRvTnVtYmVyOkA0Ml0pOwpAQCAtMjQ2LDcgKzI0Niw3IEBAIFRFU1QoQXN5bmNGdW5jdGlv
biwgUHJvbWlzZSkKICAgICBmdW5jdGlvbkJvZHkgPSBAInZhciBwID0gbmV3IFByb21pc2UoZnVu
Y3Rpb24oZnVsZmlsbCwgcmVqZWN0KSB7IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgZnVsZmlsbCgn
RnVsZmlsbGVkIScpIH0sIDUpO30pOyBhd2FpdCBwOyByZXR1cm4gcDsiOwogCiAgICAgZG9uZSA9
IGZhbHNlOwotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFy
Z3VtZW50czpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBs
ZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJW
aWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpuaWwgaW5GcmFt
ZTpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25I
YW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1Rf
TlVMTChlcnJvcik7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNLaW5kT2ZDbGFzczpb
TlNTdHJpbmcgY2xhc3NdXSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRv
U3RyaW5nOkAiRnVsZmlsbGVkISJdKTsKQEAgLTI1OCw3ICsyNTgsNyBAQCBURVNUKEFzeW5jRnVu
Y3Rpb24sIFByb21pc2UpCiAgICAgZnVuY3Rpb25Cb2R5ID0gQCJ2YXIgcCA9IG5ldyBQcm9taXNl
KGZ1bmN0aW9uIChyKSB7IHIobmV3IFByb21pc2UoZnVuY3Rpb24gKHIpIHsgcig0Mik7IH0pKTsg
fSk7IGF3YWl0IHA7IHJldHVybiAnRG9uZSc7IjsKIAogICAgIGRvbmUgPSBmYWxzZTsKLSAgICBb
d2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGlu
Q29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpb
Jl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNK
YXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluRnJhbWU6bmlsIGluQ29udGVu
dFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlk
IHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwog
ICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNz
XV0pOwogICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb1N0cmluZzpAIkRvbmUi
XSk7CkBAIC0yNzAsNyArMjcwLDcgQEAgVEVTVChBc3luY0Z1bmN0aW9uLCBQcm9taXNlKQogICAg
IGRvbmUgPSBmYWxzZTsKICAgICBmdW5jdGlvbkJvZHkgPSBAInJldHVybiBuZXcgUHJvbWlzZShm
dW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsgfSkiOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
NTAwOyArK2kpIHsKLSAgICAgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlv
bkJvZHkgYXJndW1lbnRzOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29y
bGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7Cisg
ICAgICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50
czpuaWwgaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxk
IGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAg
ICAgICAgICAgRVhQRUNUX05VTEwocmVzdWx0KTsKICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGVy
cm9yICE9IG5pbCk7CiAgICAgICAgICAgICBFWFBFQ1RfVFJVRShbW2Vycm9yIGRlc2NyaXB0aW9u
XSBjb250YWluc1N0cmluZzpAIm5vIGxvbmdlciByZWFjaGFibGUiXSk7CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VzZXJDb250ZW50Q29udHJvbGxl
ci5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVXNlckNvbnRlbnRD
b250cm9sbGVyLm1tCmluZGV4IDQyMzdlMTIzM2IzZjA0OGFhOTAzYTM2ZWZiOGUwZjM3ZDRhM2Yw
YmYuLjE1YTkzZGFiZWYyMzFkNDViZWIwNjIzZGVlN2VkNjFkZTIwZTMwMWEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVXNlckNvbnRlbnRDb250cm9s
bGVyLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVXNlckNv
bnRlbnRDb250cm9sbGVyLm1tCkBAIC0yMjEsNyArMjIxLDcgQEAgVEVTVChXS1VzZXJDb250ZW50
Q29udHJvbGxlciwgU2NyaXB0TWVzc2FnZUhhbmRsZXJDYWxsUmVtb3ZlZEhhbmRsZXIpCiAKICAg
ICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOwogICAgIC8vIFRlc3QgdGhhdCB3ZSB0aHJvdyBh
biBleGNlcHRpb24gaWYgeW91IHRyeSB0byB1c2UgYSBtZXNzYWdlIGhhbmRsZXIgdGhhdCBoYXMg
YmVlbiByZW1vdmVkLgotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6QCJyZXR1cm4g
aGFuZGxlclRvUmVtb3ZlLnBvc3RNZXNzYWdlKCdGQUlMJykiIGFyZ3VtZW50czpuaWwgaW5Db250
ZW50V29ybGQ6W1dLQ29udGVudFdvcmxkIHBhZ2VXb3JsZF0gY29tcGxldGlvbkhhbmRsZXI6XiAo
aWQgdmFsdWUsIE5TRXJyb3IgKiBlcnJvcikgeworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFT
Y3JpcHQ6QCJyZXR1cm4gaGFuZGxlclRvUmVtb3ZlLnBvc3RNZXNzYWdlKCdGQUlMJykiIGFyZ3Vt
ZW50czpuaWwgaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6W1dLQ29udGVudFdvcmxkIHBhZ2VX
b3JsZF0gY29tcGxldGlvbkhhbmRsZXI6XiAoaWQgdmFsdWUsIE5TRXJyb3IgKiBlcnJvcikgewog
ICAgICAgICBFWFBFQ1RfTlVMTCh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJv
cik7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtbZXJyb3IgZGVzY3JpcHRpb25dIGNvbnRhaW5zU3Ry
aW5nOkAiSW52YWxpZEFjY2Vzc0Vycm9yIl0pOwpAQCAtMTAxMiw3ICsxMDEyLDcgQEAgVEVTVChX
S1VzZXJDb250ZW50Q29udHJvbGxlciwgTWVzc2FnZUhhbmRsZXJBUEkpCiAgICAgTlNTdHJpbmcg
KmZ1bmN0aW9uQm9keSA9IEAidmFyIHAgPSB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVyc1to
YW5kbGVyXS5wb3N0TWVzc2FnZShhcmcpOyBhd2FpdCBwOyByZXR1cm4gcDsiOwogCiAgICAgLy8g
cGFnZVdvcmxkIGlzIHdoZXJlIHRlc3RoYW5kbGVyMSBsaXZlcwotICAgIFt3ZWJWaWV3IGNhbGxB
c3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpAeyBAImhhbmRsZXIiIDogQCJ0
ZXN0SGFuZGxlcjEiLCBAImFyZyIgOiBAMSB9IGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxk
LnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJy
b3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1
bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhhbmRsZXIxIiwgQCJhcmciIDogQDEgfSBpbkZy
YW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlv
bkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVD
VF9OVUxMKGVycm9yKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9OdW1i
ZXI6QDFdKTsKICAgICAgICAgZG9uZSA9IHRydWU7CkBAIC0xMDIxLDcgKzEwMjEsNyBAQCBURVNU
KFdLVXNlckNvbnRlbnRDb250cm9sbGVyLCBNZXNzYWdlSGFuZGxlckFQSSkKICAgICBkb25lID0g
ZmFsc2U7CiAKICAgICAvLyBUcnlpbmcgdG8gZmluZCB0ZXN0SGFuZGxlcjEgaW4gdGhlIGRlZmF1
bHRDbGllbnRXb3JsZCBzaG91bGQgZmFpbAotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3Jp
cHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjEi
LCBAImFyZyIgOiBAMSB9IGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLmRlZmF1bHRDbGll
bnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3Ip
IHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVu
dHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhhbmRsZXIxIiwgQCJhcmciIDogQDEgfSBpbkZyYW1l
Om5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGQgY29t
cGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAg
IEVYUEVDVF9OVUxMKHJlc3VsdCk7CiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7CiAg
ICAgICAgIGRvbmUgPSB0cnVlOwpAQCAtMTAzMCw3ICsxMDMwLDcgQEAgVEVTVChXS1VzZXJDb250
ZW50Q29udHJvbGxlciwgTWVzc2FnZUhhbmRsZXJBUEkpCiAgICAgZG9uZSA9IGZhbHNlOwogCiAg
ICAgLy8gZGVmYXVsdENsaWVudFdvcmxkIGlzIHdoZXJlIHRlc3RoYW5kbGVyMiBsaXZlcwotICAg
IFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpAeyBA
ImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjIiLCBAImFyZyIgOiBAMSB9IGluQ29udGVudFdvcmxk
OldLQ29udGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0g
KGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZh
U2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhhbmRs
ZXIyIiwgQCJhcmciIDogQDEgfSBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRX
b3JsZC5kZWZhdWx0Q2xpZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQs
IE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKICAgICAgICAg
RVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9OdW1iZXI6QDFdKTsKICAgICAgICAgZG9uZSA9
IHRydWU7CkBAIC0xMDQwLDcgKzEwNDAsNyBAQCBURVNUKFdLVXNlckNvbnRlbnRDb250cm9sbGVy
LCBNZXNzYWdlSGFuZGxlckFQSSkKIAogICAgIC8vIEJ1dCBpZiB3ZSByZW12b2UgaXQsIGl0IHNo
b3VsZCBubyBsb25nZXIgbGl2ZSB0aGVyZSwgYW5kIHVzaW5nIGl0IHNob3VsZCBjYXVzZSBhbiBl
cnJvci4KICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSByZW1vdmVT
Y3JpcHRNZXNzYWdlSGFuZGxlckZvck5hbWU6QCJ0ZXN0SGFuZGxlcjIiIGNvbnRlbnRXb3JsZDpX
S0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGRdOwotICAgIFt3ZWJWaWV3IGNhbGxBc3lu
Y0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0
SGFuZGxlcjIiLCBAImFyZyIgOiBAMSB9IGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLmRl
ZmF1bHRDbGllbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJv
ciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9k
eSBhcmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhhbmRsZXIyIiwgQCJhcmciIDogQDEg
fSBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50
V29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7
CiAgICAgICAgIEVYUEVDVF9OVUxMKHJlc3VsdCk7CiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChl
cnJvcik7CiAgICAgICAgIGRvbmUgPSB0cnVlOwpAQCAtMTA0OSwxNSArMTA0OSwxNSBAQCBURVNU
KFdLVXNlckNvbnRlbnRDb250cm9sbGVyLCBNZXNzYWdlSGFuZGxlckFQSSkKICAgICBkb25lID0g
ZmFsc2U7CiAKICAgICAvLyBWZXJpZnkgaGFuZGxlcnMgMywgNCwgYW5kIDUgYXJlIGFsbCBpbiB0
aGUgY3VzdG9tIHdvcmxkLgotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rp
b25Cb2R5IGFyZ3VtZW50czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjMiLCBAImFyZyIg
OiBAMSB9IGluQ29udGVudFdvcmxkOndvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVz
dWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6
ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjMiLCBA
ImFyZyIgOiBAMSB9IGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOndvcmxkIGNvbXBsZXRpb25I
YW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1Rf
TlVMTChlcnJvcik7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRvTnVtYmVy
OkAxXSk7CiAgICAgfV07Ci0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlv
bkJvZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxlciIgOiBAInRlc3RIYW5kbGVyNCIsIEAiYXJnIiA6
IEAxIH0gaW5Db250ZW50V29ybGQ6d29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1
bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpm
dW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxlciIgOiBAInRlc3RIYW5kbGVyNCIsIEAi
YXJnIiA6IEAxIH0gaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6d29ybGQgY29tcGxldGlvbkhh
bmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9O
VUxMKGVycm9yKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9OdW1iZXI6
QDFdKTsKICAgICB9XTsKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9u
Qm9keSBhcmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhhbmRsZXI1IiwgQCJhcmciIDog
QDEgfSBpbkNvbnRlbnRXb3JsZDp3b3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3Vs
dCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1
bmN0aW9uQm9keSBhcmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhhbmRsZXI1IiwgQCJh
cmciIDogQDEgfSBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDp3b3JsZCBjb21wbGV0aW9uSGFu
ZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05V
TEwoZXJyb3IpOwogICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb051bWJlcjpA
MV0pOwogICAgICAgICBkb25lID0gdHJ1ZTsKQEAgLTEwNjcsNyArMTA2Nyw3IEBAIFRFU1QoV0tV
c2VyQ29udGVudENvbnRyb2xsZXIsIE1lc3NhZ2VIYW5kbGVyQVBJKQogCiAgICAgLy8gUmVtb3Zl
IDMgZnJvbSB0aGUgd3Jvbmcgd29ybGQsIHZlcmlmeSBpdCBpcyBzdGlsbCB0aGVyZSBpbiB0aGUg
Y3VzdG9tIHdvcmxkLgogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJd
IHJlbW92ZVNjcmlwdE1lc3NhZ2VIYW5kbGVyRm9yTmFtZTpAInRlc3RIYW5kbGVyMyIgY29udGVu
dFdvcmxkOldLQ29udGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3JsZF07Ci0gICAgW3dlYlZpZXcg
Y2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxlciIg
OiBAInRlc3RIYW5kbGVyMyIsIEAiYXJnIiA6IEAxIH0gaW5Db250ZW50V29ybGQ6d29ybGQgY29t
cGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dl
YlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFu
ZGxlciIgOiBAInRlc3RIYW5kbGVyMyIsIEAiYXJnIiA6IEAxIH0gaW5GcmFtZTpuaWwgaW5Db250
ZW50V29ybGQ6d29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3Ig
KmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKICAgICAgICAgRVhQRUNUX1RS
VUUoW3Jlc3VsdCBpc0VxdWFsVG9OdW1iZXI6QDFdKTsKICAgICAgICAgZG9uZSA9IHRydWU7CkBA
IC0xMDc3LDE1ICsxMDc3LDE1IEBAIFRFU1QoV0tVc2VyQ29udGVudENvbnRyb2xsZXIsIE1lc3Nh
Z2VIYW5kbGVyQVBJKQogCiAgICAgLy8gUmVtb3ZlIDMgZnJvbSB0aGUgY29ycmVjdCB3b3JsZCwg
dmVyaWZ5IGl0IGlzIGdvbmUsIGJ1dCA0IGFuZCA1IGFyZSBzdGlsbCB0aGVyZS4KICAgICBbW2Nv
bmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSByZW1vdmVTY3JpcHRNZXNzYWdlSGFu
ZGxlckZvck5hbWU6QCJ0ZXN0SGFuZGxlcjMiIGNvbnRlbnRXb3JsZDp3b3JsZF07Ci0gICAgW3dl
YlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFu
ZGxlciIgOiBAInRlc3RIYW5kbGVyMyIsIEAiYXJnIiA6IEAxIH0gaW5Db250ZW50V29ybGQ6d29y
bGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7Cisg
ICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7
IEAiaGFuZGxlciIgOiBAInRlc3RIYW5kbGVyMyIsIEAiYXJnIiA6IEAxIH0gaW5GcmFtZTpuaWwg
aW5Db250ZW50V29ybGQ6d29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5T
RXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKHJlc3VsdCk7CiAgICAgICAgIEVY
UEVDVF9OT1RfTlVMTChlcnJvcik7CiAgICAgfV07Ci0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2
YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxlciIgOiBAInRlc3RIYW5k
bGVyNCIsIEAiYXJnIiA6IEAxIH0gaW5Db250ZW50V29ybGQ6d29ybGQgY29tcGxldGlvbkhhbmRs
ZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcgY2FsbEFz
eW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxlciIgOiBAInRl
c3RIYW5kbGVyNCIsIEAiYXJnIiA6IEAxIH0gaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6d29y
bGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAg
ICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBp
c0VxdWFsVG9OdW1iZXI6QDFdKTsKICAgICB9XTsKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZh
U2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhhbmRs
ZXI1IiwgQCJhcmciIDogQDEgfSBpbkNvbnRlbnRXb3JsZDp3b3JsZCBjb21wbGV0aW9uSGFuZGxl
cjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5
bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVz
dEhhbmRsZXI1IiwgQCJhcmciIDogQDEgfSBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDp3b3Js
ZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAg
ICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwogICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlz
RXF1YWxUb051bWJlcjpAMV0pOwogICAgICAgICBkb25lID0gdHJ1ZTsKQEAgLTEwOTUsMTEgKzEw
OTUsMTEgQEAgVEVTVChXS1VzZXJDb250ZW50Q29udHJvbGxlciwgTWVzc2FnZUhhbmRsZXJBUEkp
CiAKICAgICAvLyBSZW1vdmUgImFsbCIgaW4gdGhlIGN1c3RvbSB3b3JsZCwgdmVyaWZ5IDQgYW5k
IDUgYXJlIG5vdyBnb25lLgogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xs
ZXJdIHJlbW92ZUFsbFNjcmlwdE1lc3NhZ2VIYW5kbGVyc0Zyb21Db250ZW50V29ybGQ6d29ybGRd
OwotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50
czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjQiLCBAImFyZyIgOiBAMSB9IGluQ29udGVu
dFdvcmxkOndvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICpl
cnJvcikgeworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFy
Z3VtZW50czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjQiLCBAImFyZyIgOiBAMSB9IGlu
RnJhbWU6bmlsIGluQ29udGVudFdvcmxkOndvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQg
cmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChyZXN1bHQpOwog
ICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOwogICAgIH1dOwotICAgIFt3ZWJWaWV3IGNh
bGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpAeyBAImhhbmRsZXIiIDog
QCJ0ZXN0SGFuZGxlcjUiLCBAImFyZyIgOiBAMSB9IGluQ29udGVudFdvcmxkOndvcmxkIGNvbXBs
ZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJW
aWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpAeyBAImhhbmRs
ZXIiIDogQCJ0ZXN0SGFuZGxlcjUiLCBAImFyZyIgOiBAMSB9IGluRnJhbWU6bmlsIGluQ29udGVu
dFdvcmxkOndvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICpl
cnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChyZXN1bHQpOwogICAgICAgICBFWFBFQ1RfTk9U
X05VTEwoZXJyb3IpOwogICAgICAgICBkb25lID0gdHJ1ZTsKQEAgLTExMTgsNyArMTExOCw3IEBA
IFRFU1QoV0tVc2VyQ29udGVudENvbnRyb2xsZXIsIEFzeW5jU2NyaXB0TWVzc2FnZUhhbmRsZXJC
YXNpY1Bvc3QpCiAKICAgICBib29sIGRvbmUgPSBmYWxzZTsKICAgICBOU1N0cmluZyAqZnVuY3Rp
b25Cb2R5ID0gQCJ2YXIgcCA9IHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5k
bGVyLnBvc3RNZXNzYWdlKCdGdWxmaWxsJyk7IGF3YWl0IHA7IHJldHVybiBwOyI7Ci0gICAgW3dl
YlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5pbCBpbkNv
bnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZd
IChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2
YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5pbCBpbkZyYW1lOm5pbCBpbkNvbnRlbnRX
b3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCBy
ZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKICAg
ICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11d
KTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9TdHJpbmc6QCJGdWxmaWxs
ZWQhIl0pOwpAQCAtMTEyOSw3ICsxMTI5LDcgQEAgVEVTVChXS1VzZXJDb250ZW50Q29udHJvbGxl
ciwgQXN5bmNTY3JpcHRNZXNzYWdlSGFuZGxlckJhc2ljUG9zdCkKIAogICAgIGRvbmUgPSBmYWxz
ZTsKICAgICBmdW5jdGlvbkJvZHkgPSBAInZhciBwID0gd2luZG93LndlYmtpdC5tZXNzYWdlSGFu
ZGxlcnMudGVzdEhhbmRsZXIucG9zdE1lc3NhZ2UoJ1JlamVjdCcpOyBhd2FpdCBwOyByZXR1cm4g
cDsiOwotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3Vt
ZW50czpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRp
b25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3
IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpuaWwgaW5GcmFtZTpu
aWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5k
bGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTlVM
TChyZXN1bHQpOwogICAgICAgICBFWFBFQ1RfVFJVRSghIWVycm9yKTsKICAgICAgICAgRVhQRUNU
X1RSVUUoW1tlcnJvciBkZXNjcmlwdGlvbl0gY29udGFpbnNTdHJpbmc6QCJSZWplY3RlZCEiXSk7
CkBAIC0xMTQxLDcgKzExNDEsNyBAQCBURVNUKFdLVXNlckNvbnRlbnRDb250cm9sbGVyLCBBc3lu
Y1NjcmlwdE1lc3NhZ2VIYW5kbGVyQmFzaWNQb3N0KQogCiAgICAgZG9uZSA9IGZhbHNlOwogICAg
IGZ1bmN0aW9uQm9keSA9IEAidmFyIHAgPSB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50
ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgnVW5kZWZpbmVkJyk7IHZhciByZXN1bHQgPSBhd2FpdCBw
OyByZXR1cm4gcmVzdWx0ID09IHVuZGVmaW5lZCA/ICdZZXMnIDogJ05vJyI7Ci0gICAgW3dlYlZp
ZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5pbCBpbkNvbnRl
bnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChp
ZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNj
cmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5pbCBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3Js
ZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1
bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKICAgICAg
ICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsK
ICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9TdHJpbmc6QCJZZXMiXSk7CkBA
IC0xMTUzLDcgKzExNTMsNyBAQCBURVNUKFdLVXNlckNvbnRlbnRDb250cm9sbGVyLCBBc3luY1Nj
cmlwdE1lc3NhZ2VIYW5kbGVyQmFzaWNQb3N0KQogCiAgICAgZG9uZSA9IGZhbHNlOwogICAgIGZ1
bmN0aW9uQm9keSA9IEAidmFyIHAgPSB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0
SGFuZGxlci5wb3N0TWVzc2FnZSgnRG8gbm90aGluZycpOyBhd2FpdCBwOyByZXR1cm4gcDsiOwot
ICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpu
aWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5k
bGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGNhbGxB
c3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpuaWwgaW5GcmFtZTpuaWwgaW5D
b250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsm
XSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChyZXN1
bHQpOwogICAgICAgICBFWFBFQ1RfVFJVRSghIWVycm9yKTsKICAgICAgICAgRVhQRUNUX1RSVUUo
W1tlcnJvciBkZXNjcmlwdGlvbl0gY29udGFpbnNTdHJpbmc6QCJkaWQgbm90IHJlc3BvbmQgdG8g
dGhpcyBwb3N0TWVzc2FnZSJdKTsKQEAgLTExNjUsNyArMTE2NSw3IEBAIFRFU1QoV0tVc2VyQ29u
dGVudENvbnRyb2xsZXIsIEFzeW5jU2NyaXB0TWVzc2FnZUhhbmRsZXJCYXNpY1Bvc3QpCiAKICAg
ICBkb25lID0gZmFsc2U7CiAgICAgZnVuY3Rpb25Cb2R5ID0gQCJ2YXIgcCA9IHdpbmRvdy53ZWJr
aXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKCdJbnZhbGlkIHJlcGx5
Jyk7IGF3YWl0IHA7IHJldHVybiBwOyI7Ci0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlw
dDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3Js
ZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVy
cm9yKSB7CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJn
dW1lbnRzOm5pbCBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdl
V29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7
CiAgICAgICAgIEVYUEVDVF9OVUxMKHJlc3VsdCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKCEhZXJy
b3IpOwogICAgICAgICBFWFBFQ1RfVFJVRShbW2Vycm9yIGRlc2NyaXB0aW9uXSBjb250YWluc1N0
cmluZzpAInVuYWJsZSB0byBiZSBzZXJpYWxpemVkIl0pOwpAQCAtMTE4Nyw3ICsxMTg3LDcgQEAg
VEVTVChXS1VzZXJDb250ZW50Q29udHJvbGxlciwgV29ybGRMaWZldGltZSkKIAogICAgIC8vIFNl
dCBhIHZhcmlhYmxlIGluIHRoZSB3b3JsZC4KICAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAgICBb
d2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ2YXIgZm9vID0gJ2JhciciIGluQ29udGVudFdv
cmxkOndvcmxkLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9y
ICplcnJvcikgeworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAInZhciBmb28gPSAn
YmFyJyIgaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6d29ybGQuZ2V0KCkgY29tcGxldGlvbkhh
bmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9O
VUxMKGVycm9yKTsKICAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgfV07CkBAIC0xMTk2LDcgKzEx
OTYsNyBAQCBURVNUKFdLVXNlckNvbnRlbnRDb250cm9sbGVyLCBXb3JsZExpZmV0aW1lKQogCiAg
ICAgLy8gSGF2ZSB0aGUgbWVzc2FnZSBoYW5kbGVyIGJvdW5jZSBiYWNrIHRoYXQgdmFsdWUuCiAg
ICAgTlNTdHJpbmcgKmZ1bmN0aW9uQm9keSA9IEAidmFyIHAgPSB3aW5kb3cud2Via2l0Lm1lc3Nh
Z2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZShmb28pOyBhd2FpdCBwOyByZXR1cm4g
cDsiOwotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3Vt
ZW50czpuaWwgaW5Db250ZW50V29ybGQ6d29ybGQuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6WyZd
IChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2
YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5pbCBpbkZyYW1lOm5pbCBpbkNvbnRlbnRX
b3JsZDp3b3JsZC5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJv
ciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwogICAgICAgICBFWFBFQ1Rf
VFJVRShbcmVzdWx0IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOwogICAgICAgICBF
WFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb1N0cmluZzpAImJhciJdKTsKQEAgLTEyMDgsNyAr
MTIwOCw3IEBAIFRFU1QoV0tVc2VyQ29udGVudENvbnRyb2xsZXIsIFdvcmxkTGlmZXRpbWUpCiAg
ICAgLy8gUmVtb3ZlIHRoZSBtZXNzYWdlIGhhbmRsZXIsIHdoaWNoIHVzZWQgdG8gY2F1c2UgdGhl
IHdvcmxkIHRvIGJlIGRlc3Ryb3llZCBpbiB0aGUgd2ViIHByb2Nlc3MuCiAgICAgLy8gQnV0IGJ5
IGV2YWx1YXRpbmcgSlMgbWFrZSBzdXJlIHRoZSB2YWx1ZSBpcyBzdGlsbCB0aGVyZS4KICAgICBb
W2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSByZW1vdmVBbGxTY3JpcHRNZXNz
YWdlSGFuZGxlcnNGcm9tQ29udGVudFdvcmxkOndvcmxkLmdldCgpXTsKLSAgICBbd2ViVmlldyBl
dmFsdWF0ZUphdmFTY3JpcHQ6QCJmb28iIGluQ29udGVudFdvcmxkOndvcmxkLmdldCgpIGNvbXBs
ZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJW
aWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImZvbyIgaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6
d29ybGQuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVy
cm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKICAgICAgICAgRVhQRUNUX1RSVUUo
W3Jlc3VsdCBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKICAgICAgICAgRVhQRUNU
X1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9TdHJpbmc6QCJiYXIiXSk7CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0V2YWx1YXRlSmF2YVNj
cmlwdC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3
RXZhbHVhdGVKYXZhU2NyaXB0Lm1tCmluZGV4IDdhMjk3Y2ZjYjI3YjA1NWNhYzJkNjI5Mzg0ZDBm
OGZkYTc0ODk0ODMuLmQyMzAzZTY3ZTlmM2VjMzdjY2VhNmI3ZTA3MjIxNzhlNjViNTRhZGIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3
RXZhbHVhdGVKYXZhU2NyaXB0Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tCkBAIC0xNTgsNyArMTU4LDcg
QEAgVEVTVChXS1dlYlZpZXcsIEV2YWx1YXRlSmF2YVNjcmlwdEluV29ybGRzKQogICAgIGlzRG9u
ZSA9IGZhbHNlOwogCiAgICAgLy8gVmVyaWZ5IHRoYXQgdmFsdWUgaXMgdmlzaWJsZSB3aGVuIGV2
YWx1YXRpbmcgaW4gdGhlIHBhZ2VXb3JsZAotICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlw
dDpAImZvbyIgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRp
b25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGV2
YWx1YXRlSmF2YVNjcmlwdDpAImZvbyIgaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250
ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9y
ICplcnJvcikgewogICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzS2luZE9mQ2xhc3M6W05T
U3RyaW5nIGNsYXNzXV0pOwogICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb1N0
cmluZzpAImJhciJdKTsKICAgICAgICAgaXNEb25lID0gdHJ1ZTsKQEAgLTE2OCw3ICsxNjgsNyBA
QCBURVNUKFdLV2ViVmlldywgRXZhbHVhdGVKYXZhU2NyaXB0SW5Xb3JsZHMpCiAgICAgaXNEb25l
ID0gZmFsc2U7CiAKICAgICAvLyBWZXJpZnkgdGhhdCB2YWx1ZSBpcyBub3QgdmlzaWJsZSB3aGVu
IGV2YWx1YXRpbmcgaW4gdGhlIGRlZmF1bHRDbGllbnRXb3JsZAotICAgIFt3ZWJWaWV3IGV2YWx1
YXRlSmF2YVNjcmlwdDpAImZvbyIgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQuZGVmYXVs
dENsaWVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJv
cikgeworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImZvbyIgaW5GcmFtZTpuaWwg
aW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQuZGVmYXVsdENsaWVudFdvcmxkIGNvbXBsZXRp
b25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1Rf
TlVMTChyZXN1bHQpOwogICAgICAgICBpc0RvbmUgPSB0cnVlOwogICAgICAgICB0ZXN0c1Bhc3Nl
ZCsrOwpAQCAtMTc3LDcgKzE3Nyw3IEBAIFRFU1QoV0tXZWJWaWV3LCBFdmFsdWF0ZUphdmFTY3Jp
cHRJbldvcmxkcykKICAgICBpc0RvbmUgPSBmYWxzZTsKIAogICAgIC8vIFZlcmlmeSB0aGF0IHZh
bHVlIGlzIHZpc2libGUgd2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24gaW4gdGhlIHBhZ2VXb3JsZAot
ICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6QCJyZXR1cm4gZm9vIiBhcmd1bWVudHM6
bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFu
ZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5
bmNKYXZhU2NyaXB0OkAicmV0dXJuIGZvbyIgYXJndW1lbnRzOm5pbCBpbkZyYW1lOm5pbCBpbkNv
bnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6Xihp
ZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQg
aXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKFty
ZXN1bHQgaXNFcXVhbFRvU3RyaW5nOkAiYmFyIl0pOwogICAgICAgICBpc0RvbmUgPSB0cnVlOwpA
QCAtMTg3LDcgKzE4Nyw3IEBAIFRFU1QoV0tXZWJWaWV3LCBFdmFsdWF0ZUphdmFTY3JpcHRJbldv
cmxkcykKICAgICBpc0RvbmUgPSBmYWxzZTsKIAogICAgIC8vIFZlcmlmeSB0aGF0IHZhbHVlIGlz
IG5vdCB2aXNpYmxlIHdoZW4gY2FsbGluZyBhIGZ1bmN0aW9uIGluIHRoZSBkZWZhdWx0Q2xpZW50
V29ybGQKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OkAicmV0dXJuIGZvbyIgYXJn
dW1lbnRzOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29y
bGQgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAg
W3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpAInJldHVybiBmb28iIGFyZ3VtZW50czpuaWwg
aW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQuZGVmYXVsdENsaWVudFdv
cmxkIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAg
ICAgICBFWFBFQ1RfTlVMTChyZXN1bHQpOwogICAgICAgICBpc0RvbmUgPSB0cnVlOwogICAgICAg
ICB0ZXN0c1Bhc3NlZCsrOwpAQCAtMjAxLDcgKzIwMSw3IEBAIFRFU1QoV0tXZWJWaWV3LCBFdmFs
dWF0ZUphdmFTY3JpcHRJbldvcmxkcykKICAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0aW9u
LnVzZXJDb250ZW50Q29udHJvbGxlciBfYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlciBu
YW1lOkAidGVzdEhhbmRsZXJOYW1lIiB1c2VyQ29udGVudFdvcmxkOm5hbWVkV29ybGQuZ2V0KCku
X3VzZXJDb250ZW50V29ybGRdOwogCiAgICAgLy8gU2V0IGEgdmFyaWFibGUgdmFsdWUgaW4gdGhh
dCBuYW1lZCB3b3JsZC4KLSAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ2YXIgYmFy
ID0gJ2JheiciIGluQ29udGVudFdvcmxkOm5hbWVkV29ybGQuZ2V0KCkgY29tcGxldGlvbkhhbmRs
ZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVK
YXZhU2NyaXB0OkAidmFyIGJhciA9ICdiYXonIiBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpu
YW1lZFdvcmxkLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICpl
cnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChyZXN1bHQpOwogICAgICAgICBpc0RvbmUgPSB0
cnVlOwogICAgICAgICB0ZXN0c1Bhc3NlZCsrOwpAQCAtMjEwLDcgKzIxMCw3IEBAIFRFU1QoV0tX
ZWJWaWV3LCBFdmFsdWF0ZUphdmFTY3JpcHRJbldvcmxkcykKICAgICBpc0RvbmUgPSBmYWxzZTsK
IAogICAgIC8vIFNldCBhIGdsb2JhbCB2YXJpYWJsZSB2YWx1ZSBpbiB0aGF0IG5hbWVkIHdvcmxk
IHZpYSBhIGZ1bmN0aW9uIGNhbGwuCi0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpA
IndpbmRvdy5iYXogPSAnYmF0JyIgYXJndW1lbnRzOm5pbCBpbkNvbnRlbnRXb3JsZDpuYW1lZFdv
cmxkLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikg
eworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6QCJ3aW5kb3cuYmF6ID0gJ2JhdCci
IGFyZ3VtZW50czpuaWwgaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6bmFtZWRXb3JsZC5nZXQo
KSBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAg
ICAgRVhQRUNUX05VTEwocmVzdWx0KTsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwogICAg
ICAgICBpc0RvbmUgPSB0cnVlOwpAQCAtMjIzLDcgKzIyMyw3IEBAIFRFU1QoV0tXZWJWaWV3LCBF
dmFsdWF0ZUphdmFTY3JpcHRJbldvcmxkcykKICAgICBbd2ViVmlldy5nZXQoKS5jb25maWd1cmF0
aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciBfcmVtb3ZlU2NyaXB0TWVzc2FnZUhhbmRsZXJGb3JO
YW1lOkAidGVzdEhhbmRsZXJOYW1lIiB1c2VyQ29udGVudFdvcmxkOm5hbWVkV29ybGQuZ2V0KCku
X3VzZXJDb250ZW50V29ybGRdOwogCiAgICAgLy8gVmVyaWZ5IHRoZSB2YXJpYWJsZXMgd2Ugc2V0
IGFyZSB0aGVyZSBpbiB0aGF0IG5hbWVkIHdvcmxkLgotICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2
YVNjcmlwdDpAImJhciIgaW5Db250ZW50V29ybGQ6bmFtZWRXb3JsZC5nZXQoKSBjb21wbGV0aW9u
SGFuZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBldmFs
dWF0ZUphdmFTY3JpcHQ6QCJiYXIiIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOm5hbWVkV29y
bGQuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7
CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xh
c3NdXSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRvU3RyaW5nOkAiYmF6
Il0pOwogICAgICAgICBpc0RvbmUgPSB0cnVlOwpAQCAtMjMyLDcgKzIzMiw3IEBAIFRFU1QoV0tX
ZWJWaWV3LCBFdmFsdWF0ZUphdmFTY3JpcHRJbldvcmxkcykKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmlzRG9uZSk7CiAgICAgaXNEb25lID0gZmFsc2U7CiAKLSAgICBbd2ViVmlldyBl
dmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aW5kb3cuYmF6IiBpbkNvbnRlbnRXb3JsZDpuYW1lZFdvcmxk
LmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewor
ICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAIndpbmRvdy5iYXoiIGluRnJhbWU6bmls
IGluQ29udGVudFdvcmxkOm5hbWVkV29ybGQuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihpZCBy
ZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNL
aW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1
bHQgaXNFcXVhbFRvU3RyaW5nOkAiYmF0Il0pOwogICAgICAgICBpc0RvbmUgPSB0cnVlOwpAQCAt
MjQyLDcgKzI0Miw3IEBAIFRFU1QoV0tXZWJWaWV3LCBFdmFsdWF0ZUphdmFTY3JpcHRJbldvcmxk
cykKICAgICBpc0RvbmUgPSBmYWxzZTsKIAogICAgIC8vIFZlcmlmeSB0aGV5IGFyZW4ndCB0aGVy
ZSBpbiB0aGUgZGVmYXVsdENsaWVudFdvcmxkLgotICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNj
cmlwdDpAImJhciIgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQuZGVmYXVsdENsaWVudFdv
cmxkIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAg
IFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImJhciIgaW5GcmFtZTpuaWwgaW5Db250ZW50
V29ybGQ6V0tDb250ZW50V29ybGQuZGVmYXVsdENsaWVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVy
Ol4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChyZXN1
bHQpOwogICAgICAgICBpc0RvbmUgPSB0cnVlOwogICAgICAgICB0ZXN0c1Bhc3NlZCsrOwpAQCAt
MjUwLDcgKzI1MCw3IEBAIFRFU1QoV0tXZWJWaWV3LCBFdmFsdWF0ZUphdmFTY3JpcHRJbldvcmxk
cykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmlzRG9uZSk7CiAgICAgaXNEb25lID0g
ZmFsc2U7CiAKLSAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aW5kb3cuYmF6IiBp
bkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGQgY29tcGxldGlv
bkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcgZXZh
bHVhdGVKYXZhU2NyaXB0OkAid2luZG93LmJheiIgaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6
V0tDb250ZW50V29ybGQuZGVmYXVsdENsaWVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQg
cmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChyZXN1bHQpOwog
ICAgICAgICBpc0RvbmUgPSB0cnVlOwogICAgICAgICB0ZXN0c1Bhc3NlZCsrOwpAQCAtMjU5LDcg
KzI1OSw3IEBAIFRFU1QoV0tXZWJWaWV3LCBFdmFsdWF0ZUphdmFTY3JpcHRJbldvcmxkcykKICAg
ICBpc0RvbmUgPSBmYWxzZTsKIAogICAgIC8vIFZlcmlmeSB0aGV5IGFyZW4ndCB0aGVyZSBpbiB0
aGUgcGFnZVdvcmxkLgotICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImJhciIgaW5D
b250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOl4o
aWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNj
cmlwdDpAImJhciIgaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFn
ZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewog
ICAgICAgICBFWFBFQ1RfTlVMTChyZXN1bHQpOwogICAgICAgICBpc0RvbmUgPSB0cnVlOwogICAg
ICAgICB0ZXN0c1Bhc3NlZCsrOwpAQCAtMjY3LDcgKzI2Nyw3IEBAIFRFU1QoV0tXZWJWaWV3LCBF
dmFsdWF0ZUphdmFTY3JpcHRJbldvcmxkcykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmlzRG9uZSk7CiAgICAgaXNEb25lID0gZmFsc2U7CiAKLSAgICBbd2ViVmlldyBldmFsdWF0ZUph
dmFTY3JpcHQ6QCJ3aW5kb3cuYmF6IiBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdl
V29ybGQgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7Cisg
ICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2luZG93LmJheiIgaW5GcmFtZTpuaWwg
aW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVy
Ol4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChyZXN1
bHQpOwogICAgICAgICBpc0RvbmUgPSB0cnVlOwogICAgICAgICB0ZXN0c1Bhc3NlZCsrOwpAQCAt
Mjg1LDcgKzI4NSw3IEBAIFRFU1QoV0tXZWJWaWV3LCBFdmFsdWF0ZUphdmFTY3JpcHRJbldvcmxk
c1dpdGhHbG9iYWxPYmplY3RBdmFpbGFibGUpCiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxv
YWRIVE1MU3RyaW5nOkAiPGh0bWw+PC9odG1sPiJdOwogCiAgICAgX19ibG9jayBib29sIGRvbmUg
PSBmYWxzZTsKLSAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aW5kb3cud29ybGRO
YW1lIiBpbkNvbnRlbnRXb3JsZDpbV0tDb250ZW50V29ybGQgd29ybGRXaXRoTmFtZTpAInRlc3RO
YW1lIl0gY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7Cisg
ICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2luZG93LndvcmxkTmFtZSIgaW5GcmFt
ZTpuaWwgaW5Db250ZW50V29ybGQ6W1dLQ29udGVudFdvcmxkIHdvcmxkV2l0aE5hbWU6QCJ0ZXN0
TmFtZSJdIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewog
ICAgICAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LCAidGVzdE5hbWUiKTsKICAgICAgICAgZG9u
ZSA9IHRydWU7CiAgICAgfV07CkBAIC00NzIsMyArNDcyLDMzNyBAQCBURVNUKFdlYktpdCwgU1BJ
SmF2YXNjcmlwdE1hcmt1cFZzQVBJQ29udGVudEphdmFTY3JpcHQpCiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lKTsKIAogfQorCitzdGF0aWMgTlNNdXRhYmxlU2V0PFdLRnJhbWVJ
bmZvICo+ICphbGxGcmFtZXM7CitAaW50ZXJmYWNlIEZyYW1lc01lc3NhZ2VIYW5kbGVyIDogTlNP
YmplY3QgPFdLU2NyaXB0TWVzc2FnZUhhbmRsZXI+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBG
cmFtZXNNZXNzYWdlSGFuZGxlcgorLSAodm9pZCl1c2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNl
ckNvbnRlbnRDb250cm9sbGVyICopdXNlckNvbnRlbnRDb250cm9sbGVyIGRpZFJlY2VpdmVTY3Jp
cHRNZXNzYWdlOihXS1NjcmlwdE1lc3NhZ2UgKiltZXNzYWdlCit7CisgICAgRVhQRUNUX1RSVUUo
bWVzc2FnZS53b3JsZCA9PSBXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGQpOworICAg
IFthbGxGcmFtZXMgYWRkT2JqZWN0Om1lc3NhZ2UuZnJhbWVJbmZvXTsKK30KK0BlbmQKKworc3Rh
dGljIGNvbnN0IGNoYXIqIGZyYW1lc01haW5SZXNvdXJjZSA9IFIiRlJBTUVTUkVTT1VSQ0UoCitI
ZWxsbyB3b3JsZDxicj4KKzxpZnJhbWUgaWQ9J3RoZUZyYW1lJyBzcmM9J290aGVycHJvdG9jb2w6
Ly90ZXN0L2luZGV4Lmh0bWwnPjwvaWZyYW1lPgorKUZSQU1FU1JFU09VUkNFIjsKKworc3RhdGlj
IE5TU3RyaW5nICp1c2VyU2NyaXB0U291cmNlID0gQCJ3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5k
bGVycy5mcmFtZXNUZXN0ZXIucG9zdE1lc3NhZ2UoJ2hpJyk7IjsKKworLy8gVGhpcyB0ZXN0IGxv
YWRzIGEgZG9jdW1lbnQgdW5kZXIgb25lIHByb3RvY29sLgorLy8gVGhhdCBkb2N1bWVudCBlbWJl
ZHMgYW4gaWZyYW1lIHVuZGVyIGEgZGlmZmVyZW50IHByb3RvY29sCisvLyAoZW5zdXJpbmcgdGhl
eSBjYW5ub3QgYWNjZXNzIGVhY2ggb3RoZXIgdW5kZXIgdGhlIGNyb3NzLW9yaWdpbiBydWxlcyBv
ZiB0aGUgd2ViIHNlY3VyaXR5IG1vZGVsKQorLy8gSXQgdXNlcyBhIFdLVXNlclNjcmlwdCB0byBj
b2xsZWN0IGFsbCBvZiB0aGUgZnJhbWVzIG9uIHRoZSBwYWdlLCBhbmQgdGhlbiB1c2VzIG5ldyBm
b3JtcyBvZiBldmFsdWF0ZUphdmFTY3JpcHQKKy8vIGFuZCBjYWxsQXN5bmNKYXZhU2NyaXB0IHRv
IGNvbmZpcm0gdGhhdCBpdCBjYW4gZXhlY3V0ZSBKUyBkaXJlY3RseSBpbiBlYWNoIG9mIHRob3Nl
IGZyYW1lcy4KK1RFU1QoRXZhbHVhdGVKYXZhU2NyaXB0LCBKYXZhU2NyaXB0SW5GcmFtZXNGcm9t
UG9zdE1lc3NhZ2UpCit7CisgICAgYWxsRnJhbWVzID0gW1tOU011dGFibGVTZXQ8V0tGcmFtZUlu
Zm8gKj4gYWxsb2NdIGluaXRdOworICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtb
RnJhbWVzTWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHVzZXJTY3JpcHQg
PSBhZG9wdE5TKFtbV0tVc2VyU2NyaXB0IGFsbG9jXSBpbml0V2l0aFNvdXJjZTp1c2VyU2NyaXB0
U291cmNlIGluamVjdGlvblRpbWU6V0tVc2VyU2NyaXB0SW5qZWN0aW9uVGltZUF0RG9jdW1lbnRT
dGFydCBmb3JNYWluRnJhbWVPbmx5Ok5PIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLmRl
ZmF1bHRDbGllbnRXb3JsZF0pOworCisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmln
dXJhdGlvbiA9IFtbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxl
YXNlXTsKKyAgICBbY29uZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgYWRkVXNlclNj
cmlwdDp1c2VyU2NyaXB0LmdldCgpXTsKKyAgICBbY29uZmlndXJhdGlvbi51c2VyQ29udGVudENv
bnRyb2xsZXIgYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgY29u
dGVudFdvcmxkOldLQ29udGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3JsZCBuYW1lOkAiZnJhbWVz
VGVzdGVyIl07CisKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbVGVzdFVSTFNjaGVtZUhh
bmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbaGFuZGxlciBzZXRTdGFydFVSTFNjaGVtZVRhc2tI
YW5kbGVyOlsmXShXS1dlYlZpZXcgKiwgaWQ8V0tVUkxTY2hlbWVUYXNrPiB0YXNrKSB7CisgICAg
ICAgIGlmIChbdGFzay5yZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZyBpc0VxdWFsVG9TdHJpbmc6
QCJmcmFtZXN0ZXN0Oi8vdGVzdC9pbmRleC5odG1sIl0pIHsKKyAgICAgICAgICAgIE5TRGF0YSAq
ZGF0YSA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzIiwgZnJhbWVzTWFpblJlc291
cmNlXSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAgICAgICAg
ICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6W1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdp
dGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250
ZW50TGVuZ3RoOmRhdGEubGVuZ3RoIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV1d
OworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6ZGF0YV07CisgICAgICAgICAgICBb
dGFzayBkaWRGaW5pc2hdOworICAgICAgICB9IGVsc2UgaWYgKFt0YXNrLnJlcXVlc3QuVVJMLmFi
c29sdXRlU3RyaW5nIGlzRXF1YWxUb1N0cmluZzpAIm90aGVycHJvdG9jb2w6Ly90ZXN0L2luZGV4
Lmh0bWwiXSkgeworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOltbW05TVVJM
UmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJ0
ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDowIHRleHRFbmNvZGluZ05hbWU6bmlsXSBh
dXRvcmVsZWFzZV1dOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9XTsKKworICAgIFtj
b25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxTY2hl
bWU6QCJmcmFtZXN0ZXN0Il07CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxl
cjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAIm90aGVycHJvdG9jb2wiXTsKKworICAgIFJl
dGFpblB0cjxUZXN0V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJh
dGlvbjpjb25maWd1cmF0aW9uXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRSZXF1
ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJm
cmFtZXN0ZXN0Oi8vdGVzdC9pbmRleC5odG1sIl1dXTsKKworICAgIEVYUEVDVF9FUShhbGxGcmFt
ZXMuY291bnQsIDJ1KTsKKworICAgIHN0YXRpYyBzaXplX3QgZmluaXNoZWRGcmFtZXMgPSAwOwor
ICAgIHN0YXRpYyBib29sIGlzRG9uZSA9IGZhbHNlOworCisgICAgZm9yIChXS0ZyYW1lSW5mbyAq
ZnJhbWUgaW4gYWxsRnJhbWVzKSB7CisgICAgICAgIGJvb2wgaXNNYWluRnJhbWUgPSBmcmFtZS5p
c01haW5GcmFtZTsKKyAgICAgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpAInJldHVy
biBsb2NhdGlvbi5ocmVmOyIgYXJndW1lbnRzOm5pbCBpbkZyYW1lOmZyYW1lIGluQ29udGVudFdv
cmxkOldLQ29udGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpb
aXNNYWluRnJhbWVdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgICAgICBF
WFBFQ1RfTlVMTChlcnJvcik7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzS2lu
ZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOworCisgICAgICAgICAgICBpZiAoaXNNYWluRnJh
bWUpCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9TdHJpbmc6
QCJmcmFtZXN0ZXN0Oi8vdGVzdC9pbmRleC5odG1sIl0pOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRvU3RyaW5nOkAib3RoZXJw
cm90b2NvbDovL3Rlc3QvaW5kZXguaHRtbCJdKTsKKworICAgICAgICAgICAgaWYgKCsrZmluaXNo
ZWRGcmFtZXMgPT0gYWxsRnJhbWVzLmNvdW50ICogMikKKyAgICAgICAgICAgICAgICBpc0RvbmUg
PSB0cnVlOworICAgICAgICB9XTsKKworCisgICAgICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNj
cmlwdDpAImxvY2F0aW9uLmhyZWY7IiBpbkZyYW1lOmZyYW1lIGluQ29udGVudFdvcmxkOldLQ29u
dGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbaXNNYWluRnJh
bWVdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgICAgICBFWFBFQ1RfTlVM
TChlcnJvcik7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzS2luZE9mQ2xhc3M6
W05TU3RyaW5nIGNsYXNzXV0pOworCisgICAgICAgICAgICBpZiAoaXNNYWluRnJhbWUpCisgICAg
ICAgICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9TdHJpbmc6QCJmcmFtZXN0
ZXN0Oi8vdGVzdC9pbmRleC5odG1sIl0pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRvU3RyaW5nOkAib3RoZXJwcm90b2NvbDov
L3Rlc3QvaW5kZXguaHRtbCJdKTsKKworICAgICAgICAgICAgaWYgKCsrZmluaXNoZWRGcmFtZXMg
PT0gYWxsRnJhbWVzLmNvdW50ICogMikKKyAgICAgICAgICAgICAgICBpc0RvbmUgPSB0cnVlOwor
ICAgICAgICB9XTsKKyAgICB9CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmlzRG9u
ZSk7Cit9CisKKy8vIFRoaXMgdGVzdCBsb2FkcyBhIGRvY3VtZW50IHVuZGVyIG9uZSBwcm90b2Nv
bC4KKy8vIFRoYXQgZG9jdW1lbnQgZW1iZWRzIGFuIGlmcmFtZSB1bmRlciBhIGRpZmZlcmVudCBw
cm90b2NvbAorLy8gKGVuc3VyaW5nIHRoZXkgY2Fubm90IGFjY2VzcyBlYWNoIG90aGVyIHVuZGVy
IHRoZSBjcm9zcy1vcmlnaW4gcnVsZXMgb2YgdGhlIHdlYiBzZWN1cml0eSBtb2RlbCkKKy8vIEl0
IGNvbGxlY3RzIGFsbCB0aGUgZnJhbWVzIHNlZW4gZHVyaW5nIG5hdmlnYXRpb24gZGVsZWdhdGUg
Y2FsbGJhY2tzLCBhbmQgdGhlbiB1c2VzIG5ldyBmb3JtcyBvZiBldmFsdWF0ZUphdmFTY3JpcHQK
Ky8vIGFuZCBjYWxsQXN5bmNKYXZhU2NyaXB0IHRvIGNvbmZpcm0gdGhhdCBpdCBjYW4gZXhlY3V0
ZSBKUyBkaXJlY3RseSBpbiBlYWNoIG9mIHRob3NlIGZyYW1lcy4KK1RFU1QoRXZhbHVhdGVKYXZh
U2NyaXB0LCBKYXZhU2NyaXB0SW5GcmFtZXNGcm9tTmF2aWdhdGlvbkRlbGVnYXRlKQoreworICAg
IGFsbEZyYW1lcyA9IFtbTlNNdXRhYmxlU2V0PFdLRnJhbWVJbmZvICo+IGFsbG9jXSBpbml0XTsK
KworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0VVJMU2NoZW1lSGFuZGxlciBhbGxv
Y10gaW5pdF0pOworICAgIFtoYW5kbGVyIHNldFN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXI6WyZd
KFdLV2ViVmlldyAqLCBpZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgaWYgKFt0
YXNrLnJlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nIGlzRXF1YWxUb1N0cmluZzpAImZyYW1lc3Rl
c3Q6Ly90ZXN0L2luZGV4Lmh0bWwiXSkgeworICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gW1tO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXMiLCBmcmFtZXNNYWluUmVzb3VyY2VdIGRhdGFV
c2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICAgICAgICAgIFt0YXNrIGRp
ZFJlY2VpdmVSZXNwb25zZTpbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNr
LnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6
ZGF0YS5sZW5ndGggdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXV07CisgICAgICAg
ICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpkYXRhXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZp
bmlzaF07CisgICAgICAgIH0gZWxzZSBpZiAoW3Rhc2sucmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJp
bmcgaXNFcXVhbFRvU3RyaW5nOkAib3RoZXJwcm90b2NvbDovL3Rlc3QvaW5kZXguaHRtbCJdKSB7
CisgICAgICAgICAgICBOU0RhdGEgKmRhdGEgPSBbQCJGb29CYXJCYXoiIGRhdGFVc2luZ0VuY29k
aW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVS
ZXNwb25zZTpbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3Qu
VVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0ZXh0RW5j
b2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2Vp
dmVEYXRhOmRhdGFdOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9XTsKKworICAgIFdL
V2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0
VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAImZyYW1lc3Rlc3Qi
XTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIuZ2V0KCkg
Zm9yVVJMU2NoZW1lOkAib3RoZXJwcm90b2NvbCJdOworCisgICAgUmV0YWluUHRyPFdLV2ViVmll
dz4gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0p
OworCisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdE5hdmlnYXRp
b25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworCisgICAgX19ibG9jayBib29sIGRpZEZpbmlzaE5h
dmlnYXRpb24gPSBmYWxzZTsKKyAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHNldERpZEZpbmlzaE5h
dmlnYXRpb246XihXS1dlYlZpZXcgKiwgV0tOYXZpZ2F0aW9uICopIHsKKyAgICAgICAgZGlkRmlu
aXNoTmF2aWdhdGlvbiA9IHRydWU7CisgICAgfV07CisKKyAgICBbbmF2aWdhdGlvbkRlbGVnYXRl
IHNldERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246WyZdIChXS05hdmlnYXRpb25BY3Rp
b24gKmFjdGlvbiwgdm9pZCAoXmRlY2lzaW9uSGFuZGxlcikoV0tOYXZpZ2F0aW9uQWN0aW9uUG9s
aWN5KSkgeworICAgICAgICBpZiAoYWN0aW9uLnRhcmdldEZyYW1lKQorICAgICAgICAgICAgW2Fs
bEZyYW1lcyBhZGRPYmplY3Q6YWN0aW9uLnRhcmdldEZyYW1lXTsKKworICAgICAgICBkZWNpc2lv
bkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3cpOworICAgIH1dOworCisgICAg
W3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOm5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKV07
CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpb
TlNVUkwgVVJMV2l0aFN0cmluZzpAImZyYW1lc3Rlc3Q6Ly90ZXN0L2luZGV4Lmh0bWwiXV1dOwor
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkaWRGaW5pc2hOYXZpZ2F0aW9uKTsKKwor
ICAgIEVYUEVDVF9FUShhbGxGcmFtZXMuY291bnQsIDJ1KTsKKworICAgIHN0YXRpYyBzaXplX3Qg
ZmluaXNoZWRGcmFtZXMgPSAwOworICAgIHN0YXRpYyBib29sIGlzRG9uZSA9IGZhbHNlOworCisg
ICAgZm9yIChXS0ZyYW1lSW5mbyAqZnJhbWUgaW4gYWxsRnJhbWVzKSB7CisgICAgICAgIGJvb2wg
aXNNYWluRnJhbWUgPSBmcmFtZS5pc01haW5GcmFtZTsKKyAgICAgICAgW3dlYlZpZXcgY2FsbEFz
eW5jSmF2YVNjcmlwdDpAInJldHVybiBsb2NhdGlvbi5ocmVmOyIgYXJndW1lbnRzOm5pbCBpbkZy
YW1lOmZyYW1lIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3Js
ZCBjb21wbGV0aW9uSGFuZGxlcjpbaXNNYWluRnJhbWVdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVy
cm9yKSB7CisgICAgICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CisgICAgICAgICAgICBFWFBF
Q1RfVFJVRShbcmVzdWx0IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOworCisgICAg
ICAgICAgICBpZiAoaXNNYWluRnJhbWUpCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoW3Jl
c3VsdCBpc0VxdWFsVG9TdHJpbmc6QCJmcmFtZXN0ZXN0Oi8vdGVzdC9pbmRleC5odG1sIl0pOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNF
cXVhbFRvU3RyaW5nOkAib3RoZXJwcm90b2NvbDovL3Rlc3QvaW5kZXguaHRtbCJdKTsKKworICAg
ICAgICAgICAgaWYgKCsrZmluaXNoZWRGcmFtZXMgPT0gYWxsRnJhbWVzLmNvdW50ICogMikKKyAg
ICAgICAgICAgICAgICBpc0RvbmUgPSB0cnVlOworICAgICAgICB9XTsKKworCisgICAgICAgIFt3
ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImxvY2F0aW9uLmhyZWY7IiBpbkZyYW1lOmZyYW1l
IGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3JsZCBjb21wbGV0
aW9uSGFuZGxlcjpbaXNNYWluRnJhbWVdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7Cisg
ICAgICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShb
cmVzdWx0IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOworCisgICAgICAgICAgICBp
ZiAoaXNNYWluRnJhbWUpCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0Vx
dWFsVG9TdHJpbmc6QCJmcmFtZXN0ZXN0Oi8vdGVzdC9pbmRleC5odG1sIl0pOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRvU3Ry
aW5nOkAib3RoZXJwcm90b2NvbDovL3Rlc3QvaW5kZXguaHRtbCJdKTsKKworICAgICAgICAgICAg
aWYgKCsrZmluaXNoZWRGcmFtZXMgPT0gYWxsRnJhbWVzLmNvdW50ICogMikKKyAgICAgICAgICAg
ICAgICBpc0RvbmUgPSB0cnVlOworICAgICAgICB9XTsKKyAgICB9CisKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmlzRG9uZSk7Cit9CisKKy8vIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0
IGV2YWx1YXRpbmcgSmF2YVNjcmlwdCBpbiBhIGZyYW1lIHRoYXQgaGFzIHNpbmNlIGdvbmUgbWlz
c2luZworLy8gZHVlIHRvIHJlbW92YWwgZnJvbSB0aGUgRE9NIHJlc3VsdHMgaW4gYW4gYXBwcm9w
cmlhdGUgZXJyb3IKK1RFU1QoRXZhbHVhdGVKYXZhU2NyaXB0LCBKYXZhU2NyaXB0SW5NaXNzaW5n
RnJhbWVFcnJvcikKK3sKKyAgICBhbGxGcmFtZXMgPSBbW05TTXV0YWJsZVNldDxXS0ZyYW1lSW5m
byAqPiBhbGxvY10gaW5pdF07CisKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbVGVzdFVS
TFNjaGVtZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbaGFuZGxlciBzZXRTdGFydFVSTFNj
aGVtZVRhc2tIYW5kbGVyOlsmXShXS1dlYlZpZXcgKiwgaWQ8V0tVUkxTY2hlbWVUYXNrPiB0YXNr
KSB7CisgICAgICAgIGlmIChbdGFzay5yZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZyBpc0VxdWFs
VG9TdHJpbmc6QCJmcmFtZXN0ZXN0Oi8vdGVzdC9pbmRleC5odG1sIl0pIHsKKyAgICAgICAgICAg
IE5TRGF0YSAqZGF0YSA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzIiwgZnJhbWVz
TWFpblJlc291cmNlXSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Cisg
ICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6W1tbTlNVUkxSZXNwb25zZSBhbGxv
Y10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoOmRhdGEubGVuZ3RoIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRv
cmVsZWFzZV1dOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6ZGF0YV07CisgICAg
ICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9IGVsc2UgaWYgKFt0YXNrLnJlcXVl
c3QuVVJMLmFic29sdXRlU3RyaW5nIGlzRXF1YWxUb1N0cmluZzpAIm90aGVycHJvdG9jb2w6Ly90
ZXN0L2luZGV4Lmh0bWwiXSkgeworICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gW0AiRm9vQmFy
QmF6IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAgICAgICAg
ICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6W1tbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdp
dGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250
ZW50TGVuZ3RoOjAgdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXV07CisgICAgICAg
ICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpkYXRhXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZp
bmlzaF07CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfV07CisKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0g
W1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAg
IFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxT
Y2hlbWU6QCJmcmFtZXN0ZXN0Il07CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFu
ZGxlcjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAIm90aGVycHJvdG9jb2wiXTsKKworICAg
IFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0
aW9uOmNvbmZpZ3VyYXRpb25dKTsKKworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gYWRv
cHROUyhbW1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKworICAgIF9fYmxv
Y2sgYm9vbCBkaWRGaW5pc2hOYXZpZ2F0aW9uID0gZmFsc2U7CisgICAgW25hdmlnYXRpb25EZWxl
Z2F0ZSBzZXREaWRGaW5pc2hOYXZpZ2F0aW9uOl4oV0tXZWJWaWV3ICosIFdLTmF2aWdhdGlvbiAq
KSB7CisgICAgICAgIGRpZEZpbmlzaE5hdmlnYXRpb24gPSB0cnVlOworICAgIH1dOworCisgICAg
W25hdmlnYXRpb25EZWxlZ2F0ZSBzZXREZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOlsm
XSAoV0tOYXZpZ2F0aW9uQWN0aW9uICphY3Rpb24sIHZvaWQgKF5kZWNpc2lvbkhhbmRsZXIpKFdL
TmF2aWdhdGlvbkFjdGlvblBvbGljeSkpIHsKKyAgICAgICAgaWYgKGFjdGlvbi50YXJnZXRGcmFt
ZSkKKyAgICAgICAgICAgIFthbGxGcmFtZXMgYWRkT2JqZWN0OmFjdGlvbi50YXJnZXRGcmFtZV07
CisKKyAgICAgICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93
KTsKKyAgICB9XTsKKworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpuYXZpZ2F0
aW9uRGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVl
c3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJmcmFtZXN0ZXN0Oi8vdGVz
dC9pbmRleC5odG1sIl1dXTsKKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZGlkRmlu
aXNoTmF2aWdhdGlvbik7CisKKyAgICBFWFBFQ1RfRVEoYWxsRnJhbWVzLmNvdW50LCAydSk7CisK
KyAgICBzdGF0aWMgYm9vbCBpc0RvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUph
dmFTY3JpcHQ6QCJ2YXIgZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGhlRnJhbWUn
KTsgZnJhbWUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmcmFtZSk7IiBpbkZyYW1lOm5pbCBpbkNv
bnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGQgY29tcGxldGlvbkhh
bmRsZXI6W10gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgaXNEb25lID0g
dHJ1ZTsKKyAgICB9XTsKKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmaXNEb25lKTsK
KyAgICBpc0RvbmUgPSBmYWxzZTsKKworICAgIGZvciAoV0tGcmFtZUluZm8gKmZyYW1lIGluIGFs
bEZyYW1lcykgeworICAgICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OkAicmV0dXJu
IGxvY2F0aW9uLmhyZWY7IiBhcmd1bWVudHM6bmlsIGluRnJhbWU6ZnJhbWUgaW5Db250ZW50V29y
bGQ6V0tDb250ZW50V29ybGQuZGVmYXVsdENsaWVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOltd
IChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uo
ZXJyb3IgPT0gbmlsKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGVycm9yLmRvbWFpbiA9PSBX
S0Vycm9yRG9tYWluKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGVycm9yLmNvZGUgPT0gV0tF
cnJvckphdmFTY3JpcHRJbnZhbGlkRnJhbWVUYXJnZXQpOworICAgICAgICAgICAgaXNEb25lID0g
dHJ1ZTsKKyAgICAgICAgfV07CisgICAgfQorCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZpc0RvbmUpOworfQorCisvLyBUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBldmFsdWF0aW5nIEph
dmFTY3JpcHQgaW4gYSBmcmFtZSBmcm9tIHRoZSBwcmV2aW91cyBtYWluIG5hdmlnYXRpb24gcmVz
dWx0cyBpbiBhbiBlcnJvcgorVEVTVChFdmFsdWF0ZUphdmFTY3JpcHQsIEphdmFTY3JpcHRJbk1p
c3NpbmdGcmFtZUFmdGVyTmF2aWdhdGlvbkVycm9yKQoreworICAgIGFsbEZyYW1lcyA9IFtbTlNN
dXRhYmxlU2V0PFdLRnJhbWVJbmZvICo+IGFsbG9jXSBpbml0XTsKKworICAgIGF1dG8gaGFuZGxl
ciA9IGFkb3B0TlMoW1tUZXN0VVJMU2NoZW1lSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgIFto
YW5kbGVyIHNldFN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXI6WyZdKFdLV2ViVmlldyAqLCBpZDxX
S1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgaWYgKFt0YXNrLnJlcXVlc3QuVVJMLmFi
c29sdXRlU3RyaW5nIGlzRXF1YWxUb1N0cmluZzpAImZyYW1lc3Rlc3Q6Ly90ZXN0L2luZGV4Lmh0
bWwiXSkgeworICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gW1tOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiJXMiLCBmcmFtZXNNYWluUmVzb3VyY2VdIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRG
OFN0cmluZ0VuY29kaW5nXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpb
W1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVU
eXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6ZGF0YS5sZW5ndGggdGV4dEVu
Y29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNl
aXZlRGF0YTpkYXRhXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0g
ZWxzZSBpZiAoW3Rhc2sucmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcgaXNFcXVhbFRvU3RyaW5n
OkAib3RoZXJwcm90b2NvbDovL3Rlc3QvaW5kZXguaHRtbCJdKSB7CisgICAgICAgICAgICBOU0Rh
dGEgKmRhdGEgPSBbQCJGb29CYXJCYXoiIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0Vu
Y29kaW5nXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpbW1tOU1VSTFJl
c3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4
dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0
b3JlbGVhc2VdXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOmRhdGFdOworICAg
ICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfSBlbHNlIGlmIChbdGFzay5yZXF1
ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZyBpc0VxdWFsVG9TdHJpbmc6QCJmcmFtZXN0ZXN0Oi8vaW5k
ZXgyLmh0bWwiXSkgeworICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gW0AiSGkiIGRhdGFVc2lu
Z0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJl
Y2VpdmVSZXNwb25zZTpbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJl
cXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0
ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdXTsKKyAgICAgICAgICAgIFt0YXNrIGRp
ZFJlY2VpdmVEYXRhOmRhdGFdOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9XTsKKwor
ICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1tXS1dlYlZpZXdD
b25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgW2NvbmZpZ3VyYXRp
b24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAImZyYW1l
c3Rlc3QiXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIu
Z2V0KCkgZm9yVVJMU2NoZW1lOkAib3RoZXJwcm90b2NvbCJdOworCisgICAgUmV0YWluUHRyPFdL
V2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbl0pOworCisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdE5h
dmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworCisgICAgX19ibG9jayBib29sIGRpZEZp
bmlzaE5hdmlnYXRpb24gPSBmYWxzZTsKKyAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHNldERpZEZp
bmlzaE5hdmlnYXRpb246XihXS1dlYlZpZXcgKiwgV0tOYXZpZ2F0aW9uICopIHsKKyAgICAgICAg
ZGlkRmluaXNoTmF2aWdhdGlvbiA9IHRydWU7CisgICAgfV07CisKKyAgICBbbmF2aWdhdGlvbkRl
bGVnYXRlIHNldERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246WyZdIChXS05hdmlnYXRp
b25BY3Rpb24gKmFjdGlvbiwgdm9pZCAoXmRlY2lzaW9uSGFuZGxlcikoV0tOYXZpZ2F0aW9uQWN0
aW9uUG9saWN5KSkgeworICAgICAgICBpZiAoYWN0aW9uLnRhcmdldEZyYW1lKQorICAgICAgICAg
ICAgW2FsbEZyYW1lcyBhZGRPYmplY3Q6YWN0aW9uLnRhcmdldEZyYW1lXTsKKworICAgICAgICBk
ZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3cpOworICAgIH1dOwor
CisgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOm5hdmlnYXRpb25EZWxlZ2F0ZS5n
ZXQoKV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0
aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImZyYW1lc3Rlc3Q6Ly90ZXN0L2luZGV4Lmh0bWwi
XV1dOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkaWRGaW5pc2hOYXZpZ2F0aW9u
KTsKKyAgICBkaWRGaW5pc2hOYXZpZ2F0aW9uID0gZmFsc2U7CisKKyAgICBFWFBFQ1RfRVEoYWxs
RnJhbWVzLmNvdW50LCAydSk7CisKKyAgICBSZXRhaW5QdHI8V0tGcmFtZUluZm8+IGlmcmFtZTsK
KyAgICBmb3IgKFdLRnJhbWVJbmZvICpmcmFtZSBpbiBhbGxGcmFtZXMpIHsKKyAgICAgICAgaWYg
KGZyYW1lLmlzTWFpbkZyYW1lKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmcmFt
ZSA9IGZyYW1lOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBFWFBFQ1RfTk9UX05VTEwo
aWZyYW1lKTsKKworICAgIC8vIEdldCByaWQgb2YgdGhlIGZyYW1lIGJ5IG5hdmlnYXRpbmcKKyAg
ICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiZnJhbWVzdGVzdDovL2luZGV4Mi5odG1sIl1dXTsKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRpZEZpbmlzaE5hdmlnYXRpb24pOworICAgIGRpZEZpbmlz
aE5hdmlnYXRpb24gPSBmYWxzZTsKKworICAgIHN0YXRpYyBib29sIGlzRG9uZSA9IGZhbHNlOwor
CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpAInJldHVybiBsb2NhdGlvbi5ocmVm
OyIgYXJndW1lbnRzOm5pbCBpbkZyYW1lOmlmcmFtZS5nZXQoKSBpbkNvbnRlbnRXb3JsZDpXS0Nv
bnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6W10gKGlkIHJl
c3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGVycm9yID09IG5p
bCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGVycm9yLmRvbWFpbiA9PSBXS0Vycm9yRG9tYWluKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUoZXJyb3IuY29kZSA9PSBXS0Vycm9ySmF2YVNjcmlwdEludmFs
aWRGcmFtZVRhcmdldCk7CisgICAgICAgIGlzRG9uZSA9IHRydWU7CisgICAgfV07CisKKyAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmlzRG9uZSk7CisgICAgaXNEb25lID0gZmFsc2U7Cit9
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcubW0KaW5kZXggZTIzNTdh
OWFiZDMwZWQzN2YyNDdiZDc0OTU1MjI1YTMwMDVlZTFlNy4uNTg4ODkxODdlNWMyZDU4NjcwZjkx
NjliODliN2UxMGFhYjc5MjA0YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2Nv
YS9UZXN0V0tXZWJWaWV3Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdL
V2ViVmlldy5tbQpAQCAtMTk4LDcgKzE5OCw3IEBAIC0gKGlkKW9iamVjdEJ5Q2FsbGluZ0FzeW5j
RnVuY3Rpb246KE5TU3RyaW5nICopc2NyaXB0IHdpdGhBcmd1bWVudHM6KE5TRGljdGlvbmFyCiAg
ICAgICAgICplcnJvck91dCA9IG5pbDsKIAogICAgIFJldGFpblB0cjxpZD4gZXZhbFJlc3VsdDsK
LSAgICBbc2VsZiBjYWxsQXN5bmNKYXZhU2NyaXB0OnNjcmlwdCBhcmd1bWVudHM6YXJndW1lbnRz
IGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxl
cjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbc2VsZiBjYWxsQXN5bmNK
YXZhU2NyaXB0OnNjcmlwdCBhcmd1bWVudHM6YXJndW1lbnRzIGluRnJhbWU6bmlsIGluQ29udGVu
dFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlk
IHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgZXZhbFJlc3VsdCA9IHJlc3VsdDsK
ICAgICAgICAgaWYgKGVycm9yT3V0KQogICAgICAgICAgICAgKmVycm9yT3V0ID0gW2Vycm9yIHJl
dGFpbl07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403158</attachid>
            <date>2020-06-29 18:59:17 -0700</date>
            <delta_ts>2020-06-29 22:43:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213556-20200629185917.patch</filename>
            <type>text/plain</type>
            <size>70284</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzMDk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDc1ZDNkMTE0MDFhYjY5
M2Y1ODU1MzU1NGFiZjJhZjhkMDc4NGViYy4uNDliYjFkY2JjNmRhYWMzYjYzZjU1MDFjNDU4YWYy
ZDBjNjViNzZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTA2LTI5ICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBKYXZhU2NyaXB0IGNhbm5v
dCBiZSBpbmplY3RlZCBpbnRvIGlmcmFtZXMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU0MTY4
OTQ2PiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzU1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgorCisgICAgICAgIENvdmVyZWQgYnkg
QVBJIHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3MvanMvRXhjZXB0aW9uRGV0YWlscy5oOiBT
dGFydCBhIGNvbGxlY3Rpb24gb2YgImV4Y2VwdGlvbiB0eXBlcyIgdGhhdCB3aWxsIGdyb3cgcXVp
Y2tseSwKKyAgICAgICAgICBiZWdpbm5pbmcgd2l0aCB0aGUgc3BlY2lhbGl6ZWQgIm1pc3Npbmcg
ZnJhbWUiIHR5cGUuCisKIDIwMjAtMDYtMTYgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KIAogICAgICAgICBBWDogPGFkZHJlc3M+IGVsZW1lbnQgc2hvdWxkIG5vIGxvbmdl
ciBtYXAgdG8gQVJJQSBgY29udGVudGluZm9gIHJvbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMWVkNmI0NzA1Mjdl
NTY1MGVjOTNmZWI3ZmEwNTQ3MTE0ODgwZTkzNi4uNDYzZjQzMjE0MzU0ZDU2N2ZkOGJiODA0NDc2
NjVmNGFjN2IwNGFlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAyMC0wNi0yOSAgQnJh
ZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgSmF2YVNjcmlwdCBjYW5u
b3QgYmUgaW5qZWN0ZWQgaW50byBpZnJhbWVzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NDE2
ODk0Nj4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM1NTYK
KworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgYWRkcyBhIGZldyBtZWNoYW5pc21zOgorICAgICAgICAtIEFsbG93cyBmb3IgV0tVc2VyU2Ny
aXB0cyB0byBoYXZlIGEgdGFyZ2V0IGNvbnRlbnQgd29ybGQKKyAgICAgICAgLSBBbGxvd3MgImV2
YWx1YXRlSmF2YVNjcmlwdCIgYW5kICJjYWxsQXN5bmNKYXZhU2NyaXB0IiB0byB0YXJnZXQgYSBz
cGVjaWZpYyBmcmFtZQorICAgICAgICAtIEFsbG93cyBmb3IgdGhlIGNvbXBsZXRpb24gaGFuZGxl
cnMgb2YgdGhvc2UgbWV0aG9kcyB0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIAorICAgICAgICAg
IGZhaWx1cmUtZHVlLXRvLW1pc3NpbmctZnJhbWUuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxFeGNlcHRp
b25EZXRhaWxzPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxFeGNlcHRp
b25EZXRhaWxzPjo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmg6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IubW06CisgICAgICAgIChsb2NhbGl6ZWRE
ZXNjcmlwdGlvbkZvckVycm9yQ29kZSk6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLVXNlclNjcmlwdC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyU2Ny
aXB0Lm1tOgorICAgICAgICAoLVtXS1VzZXJTY3JpcHQgaW5pdFdpdGhTb3VyY2U6aW5qZWN0aW9u
VGltZTpmb3JNYWluRnJhbWVPbmx5Ol0pOgorICAgICAgICAoLVtXS1VzZXJTY3JpcHQgaW5pdFdp
dGhTb3VyY2U6aW5qZWN0aW9uVGltZTpmb3JNYWluRnJhbWVPbmx5OmluQ29udGVudFdvcmxkOl0p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lmg6CisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3
IGV2YWx1YXRlSmF2YVNjcmlwdDppbkZyYW1lOmluQ29udGVudFdvcmxkOmNvbXBsZXRpb25IYW5k
bGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDphcmd1bWVu
dHM6aW5GcmFtZTppbkNvbnRlbnRXb3JsZDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAg
KG5zRXJyb3JGcm9tRXhjZXB0aW9uRGV0YWlscyk6CisgICAgICAgICgtW1dLV2ViVmlldyBfZXZh
bHVhdGVKYXZhU2NyaXB0OmFzQXN5bmNGdW5jdGlvbjp3aXRoU291cmNlVVJMOndpdGhBcmd1bWVu
dHM6Zm9yY2VVc2VyR2VzdHVyZTppbkZyYW1lOmluV29ybGQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmFyZ3VtZW50czppbkNv
bnRlbnRXb3JsZDpjb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
cnVuSmF2YVNjcmlwdCk6CisKIDIwMjAtMDYtMTYgIENoYXJsaWUgVHVybmVyICA8Y3R1cm5lckBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIERpc2FibGUgdmlkZW8gYXV0b3BsYXkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4Y2VwdGlvbkRldGFpbHMuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4Y2VwdGlvbkRldGFpbHMuaAppbmRleCA0OTI0MTE4
NTA5YTQ3MmQwM2EzOGJlNDYwZjU3Yjc3ZmZhYjRiZDNiLi5iZDNiZDczZGRiMjEwMjVmYzU0ZmVk
ZWQyMzA4ODEzNjNkNzhiNWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9FeGNlcHRpb25EZXRhaWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRXhj
ZXB0aW9uRGV0YWlscy5oCkBAIC0zMCw5ICszMCwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBzdHJ1Y3QgRXhjZXB0aW9uRGV0YWlscyB7CisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhf
dCB7CisgICAgICAgIFNjcmlwdCwKKyAgICAgICAgSW52YWxpZFRhcmdldEZyYW1lLAorICAgIH07
CisKICAgICBTdHJpbmcgbWVzc2FnZTsKICAgICBpbnQgbGluZU51bWJlciB7IDAgfTsKICAgICBp
bnQgY29sdW1uTnVtYmVyIHsgMCB9OworICAgIFR5cGUgdHlwZSB7IFR5cGU6OlNjcmlwdCB9Owor
CiAgICAgLy8gVGhpcyBiaXphcnJlIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIFN0cmluZyBp
cyBiZWNhdXNlIG9sZGVyIGNvbXBpbGVycyAobGlrZSBvbiBIaWdoIFNpZXJyYSkKICAgICAvLyBk
b24ndCBwcm9wZXJseSBoYW5kbGUgcGFydGlhbCBpbml0aWFsaXphdGlvbiBsaXN0cyB1bmxlc3Mg
ZXZlcnkgc3RydWN0IG1lbWJlciBoYXMgYW4gZXhwbGljaXQgZGVmYXVsdCB2YWx1ZS4KICAgICAv
LyBPbmNlIHdlIHN0b3AgYnVpbGRpbmcgb24gdGhvc2UgcGxhdGZvcm1zIHdlIGNhbiByZW1vdmUg
dGhpcy4KQEAgLTQwLDMgKzQ3LDEzIEBAIHN0cnVjdCBFeGNlcHRpb25EZXRhaWxzIHsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkV4Y2VwdGlvbkRldGFpbHM6OlR5cGU+IHsKKyAgICB1
c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25EZXRh
aWxzOjpUeXBlLAorICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25EZXRhaWxzOjpUeXBlOjpTY3Jp
cHQsCisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkRldGFpbHM6OlR5cGU6OkludmFsaWRUYXJn
ZXRGcmFtZQorICAgID47Cit9OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5jcHAKaW5kZXggNTQ0N2ZjYTc2MzUyOGE0ZTk5YjQzM2U0ZGZlYjhkYmY1
NDQxNzVmMy4uM2EwZDRiODcxOGUzZWQ2NGQ5Y2ZhMjIyNDFkM2M2MTZkMjM4YzE3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBAIC0yNjU5
LDYgKzI2NTksNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8RXhjZXB0aW9uRGV0YWlscz46OmVuY29k
ZShJUEM6OkVuY29kZXImIGVuY29kZXIsIGNvbnN0IEV4Y2VwdAogICAgIGVuY29kZXIgPDwgaW5m
by5tZXNzYWdlOwogICAgIGVuY29kZXIgPDwgaW5mby5saW5lTnVtYmVyOwogICAgIGVuY29kZXIg
PDwgaW5mby5jb2x1bW5OdW1iZXI7CisgICAgZW5jb2RlciA8PCBpbmZvLnR5cGU7CiAgICAgZW5j
b2RlciA8PCBpbmZvLnNvdXJjZVVSTDsKIH0KIApAQCAtMjY3Myw2ICsyNjc0LDkgQEAgYm9vbCBB
cmd1bWVudENvZGVyPEV4Y2VwdGlvbkRldGFpbHM+OjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNv
ZGVyLCBFeGNlcHRpb25EZXQKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb2x1bW5O
dW1iZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC50eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuc291cmNlVVJMKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IuaAppbmRleCAxNDBkNjZmYmZl
ZDYyN2YyYmM3NDJiM2JmODMyY2ZhNmVkM2ExYzViLi44MWE2NjkxZDEyZjczNGFkN2RjYTg1MzI5
MWE0MzEyZDg0ZjkzMjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tFcnJvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S0Vycm9yLmgKQEAgLTU4LDYgKzU4LDcgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgV0tF
cnJvckNvZGUpIHsKICAgICBXS0Vycm9yQ29udGVudFJ1bGVMaXN0U3RvcmVWZXJzaW9uTWlzbWF0
Y2ggV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMyksIGlvcygxMS4wKSksCiAgICAgV0tFcnJv
ckF0dHJpYnV0ZWRTdHJpbmdDb250ZW50RmFpbGVkVG9Mb2FkIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTUpLCBpb3MoMTMuMCkpLAogICAgIFdLRXJyb3JBdHRyaWJ1dGVkU3RyaW5nQ29udGVu
dExvYWRUaW1lZE91dCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKSwK
KyAgICBXS0Vycm9ySmF2YVNjcmlwdEludmFsaWRGcmFtZVRhcmdldCBXS19BUElfQVZBSUxBQkxF
KG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpLAogfSBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjEwKSwgaW9zKDguMCkpOwogCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vycm9yLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IubW0KaW5kZXggMzZlMWY0YmQ2
ODkxZTg5MDIxYjM1YjFmOGJiOGIzYTA0YWY3NThkNy4uZWVjNzZkYTgwNGM3N2I2ZDlhMmZkODZi
NDY4OTAzMTU2ZWMwNzA5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLRXJyb3IubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLRXJyb3IubW0KQEAgLTczLDYgKzczLDkgQEAgTlNTdHJpbmcgKmxvY2FsaXplZERlc2NyaXB0
aW9uRm9yRXJyb3JDb2RlKFdLRXJyb3JDb2RlIGVycm9yQ29kZSkKIAogICAgIGNhc2UgV0tFcnJv
ckF0dHJpYnV0ZWRTdHJpbmdDb250ZW50TG9hZFRpbWVkT3V0OgogICAgICAgICByZXR1cm4gV0VC
X1VJX1NUUklORygiVGltZWQgb3V0IHdoaWxlIGxvYWRpbmcgYXR0cmlidXRlZCBzdHJpbmcgY29u
dGVudCIsICJXS0Vycm9yQXR0cmlidXRlZFN0cmluZ0NvbnRlbnRMb2FkVGltZWRPdXQgZGVzY3Jp
cHRpb24iKTsKKworICAgIGNhc2UgV0tFcnJvckphdmFTY3JpcHRJbnZhbGlkRnJhbWVUYXJnZXQ6
CisgICAgICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJKYXZhU2NyaXB0IGV4ZWN1dGlvbiB0YXJn
ZXRlZCBhbiBpbnZhbGlkIGZyYW1lIiwgIldLRXJyb3JKYXZhU2NyaXB0SW52YWxpZEZyYW1lVGFy
Z2V0IGRlc2NyaXB0aW9uIik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyU2NyaXB0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tVc2VyU2NyaXB0LmgKaW5kZXggNDAxMmY4OGJkYzQ4NmQ3MzJmZTI5
NzBkYWE5ZTBiMjkwM2NjNTliMy4uMGM1YzZkYzZkN2NhNGVkNDQ3MzdjMjA2OTJiODhlYjNkZTNi
ODFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNl
clNjcmlwdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJT
Y3JpcHQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01Nyw5ICs1NywxOCBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoMTAuMTApLCBp
b3MoOC4wKSkKICBAcGFyYW0gc291cmNlIFRoZSBzY3JpcHQgc291cmNlLgogIEBwYXJhbSBpbmpl
Y3Rpb25UaW1lIFdoZW4gdGhlIHNjcmlwdCBzaG91bGQgYmUgaW5qZWN0ZWQuCiAgQHBhcmFtIGZv
ck1haW5GcmFtZU9ubHkgV2hldGhlciB0aGUgc2NyaXB0IHNob3VsZCBiZSBpbmplY3RlZCBpbnRv
IGFsbCBmcmFtZXMgb3IganVzdCB0aGUgbWFpbiBmcmFtZS4KKyBAZGlzY3Vzc2lvbiBDYWxsaW5n
IHRoaXMgbWV0aG9kIGlzIHRoZSBzYW1lIGFzIGNhbGxpbmcgYGluaXRXaXRoU291cmNlOmluamVj
dGlvblRpbWU6Zm9yTWFpbkZyYW1lT25seTppbkNvbnRlbnRXb3JsZDpgIHdpdGggYSBgY29udGVu
dFdvcmxkYCB2YWx1ZSBvZiBgV0tDb250ZW50V29ybGQucGFnZVdvcmxkYAogICovCiAtIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluamVjdGlvblRpbWU6
KFdLVXNlclNjcmlwdEluamVjdGlvblRpbWUpaW5qZWN0aW9uVGltZSBmb3JNYWluRnJhbWVPbmx5
OihCT09MKWZvck1haW5GcmFtZU9ubHk7CiAKKy8qISBAYWJzdHJhY3QgUmV0dXJucyBhbiBpbml0
aWFsaXplZCB1c2VyIHNjcmlwdCB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIEBsaW5rIFdLVXNlckNv
bnRlbnRDb250cm9sbGVyIEAvbGluay4KKyBAcGFyYW0gc291cmNlIFRoZSBzY3JpcHQgc291cmNl
LgorIEBwYXJhbSBpbmplY3Rpb25UaW1lIFdoZW4gdGhlIHNjcmlwdCBzaG91bGQgYmUgaW5qZWN0
ZWQuCisgQHBhcmFtIGZvck1haW5GcmFtZU9ubHkgV2hldGhlciB0aGUgc2NyaXB0IHNob3VsZCBi
ZSBpbmplY3RlZCBpbnRvIGFsbCBmcmFtZXMgb3IganVzdCB0aGUgbWFpbiBmcmFtZS4KKyBAcGFy
YW0gY29udGVudFdvcmxkIFRoZSBXS0NvbnRlbnRXb3JsZCBpbiB3aGljaCB0byBpbmplY3QgdGhl
IHNjcmlwdC4KKyAqLworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU291cmNlOihOU1N0cmluZyAq
KXNvdXJjZSBpbmplY3Rpb25UaW1lOihXS1VzZXJTY3JpcHRJbmplY3Rpb25UaW1lKWluamVjdGlv
blRpbWUgZm9yTWFpbkZyYW1lT25seTooQk9PTClmb3JNYWluRnJhbWVPbmx5IGluQ29udGVudFdv
cmxkOihXS0NvbnRlbnRXb3JsZCAqKWNvbnRlbnRXb3JsZCBXS19BUElfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCiBAZW5kCiAKIE5TX0FTU1VNRV9OT05O
VUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
VXNlclNjcmlwdC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJT
Y3JpcHQubW0KaW5kZXggODQ2ZjkyOTQyMzFlNDY1MTdkN2FkYTRjN2E4MGM2YTJiN2ZkYjc2Yi4u
MDNlYjBjMGVhYTczN2Y1ODY5ZDQyNzVlNDdlNzg4MDc0M2QzMzIxNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlclNjcmlwdC5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyU2NyaXB0Lm1tCkBAIC0zMiwxMSAr
MzIsMTYgQEAKIEBpbXBsZW1lbnRhdGlvbiBXS1VzZXJTY3JpcHQKIAogLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBpbmplY3Rpb25UaW1lOihXS1VzZXJT
Y3JpcHRJbmplY3Rpb25UaW1lKWluamVjdGlvblRpbWUgZm9yTWFpbkZyYW1lT25seTooQk9PTClm
b3JNYWluRnJhbWVPbmx5Cit7CisgICAgcmV0dXJuIFtzZWxmIGluaXRXaXRoU291cmNlOnNvdXJj
ZSBpbmplY3Rpb25UaW1lOmluamVjdGlvblRpbWUgZm9yTWFpbkZyYW1lT25seTpmb3JNYWluRnJh
bWVPbmx5IGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZF07Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgaW5qZWN0aW9u
VGltZTooV0tVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSlpbmplY3Rpb25UaW1lIGZvck1haW5GcmFt
ZU9ubHk6KEJPT0wpZm9yTWFpbkZyYW1lT25seSBpbkNvbnRlbnRXb3JsZDooV0tDb250ZW50V29y
bGQgKiljb250ZW50V29ybGQKIHsKICAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEFQSTo6T2JqZWN0Ojpjb25zdHJ1Y3RJbldyYXBwZXI8
QVBJOjpVc2VyU2NyaXB0PihzZWxmLCBXZWJDb3JlOjpVc2VyU2NyaXB0IHsgc291cmNlLCBBUEk6
OlVzZXJTY3JpcHQ6OmdlbmVyYXRlVW5pcXVlVVJMKCksIHsgfSwgeyB9LCBBUEk6OnRvV2ViQ29y
ZVVzZXJTY3JpcHRJbmplY3Rpb25UaW1lKGluamVjdGlvblRpbWUpLCBmb3JNYWluRnJhbWVPbmx5
ID8gV2ViQ29yZTo6VXNlckNvbnRlbnRJbmplY3RlZEZyYW1lczo6SW5qZWN0SW5Ub3BGcmFtZU9u
bHkgOiBXZWJDb3JlOjpVc2VyQ29udGVudEluamVjdGVkRnJhbWVzOjpJbmplY3RJbkFsbEZyYW1l
cywgV2ViQ29yZTo6V2FpdEZvck5vdGlmaWNhdGlvbkJlZm9yZUluamVjdGluZzo6Tm8gfSwgQVBJ
OjpDb250ZW50V29ybGQ6OnBhZ2VDb250ZW50V29ybGQoKSk7CisgICAgQVBJOjpPYmplY3Q6OmNv
bnN0cnVjdEluV3JhcHBlcjxBUEk6OlVzZXJTY3JpcHQ+KHNlbGYsIFdlYkNvcmU6OlVzZXJTY3Jp
cHQgeyBzb3VyY2UsIEFQSTo6VXNlclNjcmlwdDo6Z2VuZXJhdGVVbmlxdWVVUkwoKSwgeyB9LCB7
IH0sIEFQSTo6dG9XZWJDb3JlVXNlclNjcmlwdEluamVjdGlvblRpbWUoaW5qZWN0aW9uVGltZSks
IGZvck1haW5GcmFtZU9ubHkgPyBXZWJDb3JlOjpVc2VyQ29udGVudEluamVjdGVkRnJhbWVzOjpJ
bmplY3RJblRvcEZyYW1lT25seSA6IFdlYkNvcmU6OlVzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXM6
OkluamVjdEluQWxsRnJhbWVzLCBXZWJDb3JlOjpXYWl0Rm9yTm90aWZpY2F0aW9uQmVmb3JlSW5q
ZWN0aW5nOjpObyB9LCAqY29udGVudFdvcmxkLT5fY29udGVudFdvcmxkKTsKIAogICAgIHJldHVy
biBzZWxmOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
dy5oCmluZGV4IDZjODJhNjhlNDI4MzY3NDUxMzMxYjY5MjczMGU5MjI5NWM1MDExZmYuLjQ2NTli
ZjMwMTI5MDUwMTQ2NDljNjUxZjRmMGNlMWZmZDYxYjIwOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3LmgKQEAgLTM4LDYgKzM4LDcgQEAgTlNfQVNT
VU1FX05PTk5VTExfQkVHSU4KIEBjbGFzcyBXS0NvbnRlbnRXb3JsZDsKIEBjbGFzcyBXS0ZpbmRD
b25maWd1cmF0aW9uOwogQGNsYXNzIFdLRmluZFJlc3VsdDsKK0BjbGFzcyBXS0ZyYW1lSW5mbzsK
IEBjbGFzcyBXS05hdmlnYXRpb247CiBAY2xhc3MgV0tQREZDb25maWd1cmF0aW9uOwogQGNsYXNz
IFdLU25hcHNob3RDb25maWd1cmF0aW9uOwpAQCAtMjIwLDE0ICsyMjEsMjUgQEAgV0tfQ0xBU1Nf
QVZBSUxBQkxFKG1hY29zKDEwLjEwKSwgaW9zKDguMCkpCiAgQHBhcmFtIGphdmFTY3JpcHRTdHJp
bmcgVGhlIEphdmFTY3JpcHQgc3RyaW5nIHRvIGV2YWx1YXRlLgogIEBwYXJhbSBjb21wbGV0aW9u
SGFuZGxlciBBIGJsb2NrIHRvIGludm9rZSB3aGVuIHNjcmlwdCBldmFsdWF0aW9uIGNvbXBsZXRl
cyBvciBmYWlscy4KICBAZGlzY3Vzc2lvbiBUaGUgY29tcGxldGlvbkhhbmRsZXIgaXMgcGFzc2Vk
IHRoZSByZXN1bHQgb2YgdGhlIHNjcmlwdCBldmFsdWF0aW9uIG9yIGFuIGVycm9yLgorIENhbGxp
bmcgdGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIGBldmFsdWF0ZUphdmFTY3Jp
cHQ6aW5GcmFtZTppbkNvbnRlbnRXb3JsZDpjb21wbGV0aW9uSGFuZGxlcjpgIHdpdGg6CisgICAt
IEEgYGZyYW1lYCB2YWx1ZSBvZiBgbmlsYCB0byByZXByZXNlbnQgdGhlIG1haW4gZnJhbWUKKyAg
IC0gQSBgY29udGVudFdvcmxkYCB2YWx1ZSBvZiBgV0tDb250ZW50V29ybGQucGFnZVdvcmxkYAog
Ki8KIC0gKHZvaWQpZXZhbHVhdGVKYXZhU2NyaXB0OihOU1N0cmluZyAqKWphdmFTY3JpcHRTdHJp
bmcgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4gX051bGxhYmxlKShfTnVsbGFibGUgaWQsIE5T
RXJyb3IgKiBfTnVsbGFibGUgZXJyb3IpKWNvbXBsZXRpb25IYW5kbGVyOwogCiAvKiBAYWJzdHJh
Y3QgRXZhbHVhdGVzIHRoZSBnaXZlbiBKYXZhU2NyaXB0IHN0cmluZy4KICBAcGFyYW0gamF2YVNj
cmlwdFN0cmluZyBUaGUgSmF2YVNjcmlwdCBzdHJpbmcgdG8gZXZhbHVhdGUuCisgQHBhcmFtIGZy
YW1lIEEgV0tGcmFtZUluZm8gaWRlbnRpZnlpbmcgdGhlIGZyYW1lIGluIHdoaWNoIHRvIGV2YWx1
YXRlIHRoZSBKYXZhU2NyaXB0IHN0cmluZy4KICBAcGFyYW0gY29udGVudFdvcmxkIFRoZSBXS0Nv
bnRlbnRXb3JsZCBpbiB3aGljaCB0byBldmFsdWF0ZSB0aGUgSmF2YVNjcmlwdCBzdHJpbmcuCiAg
QHBhcmFtIGNvbXBsZXRpb25IYW5kbGVyIEEgYmxvY2sgdG8gaW52b2tlIHdoZW4gc2NyaXB0IGV2
YWx1YXRpb24gY29tcGxldGVzIG9yIGZhaWxzLgogIEBkaXNjdXNzaW9uIFRoZSBjb21wbGV0aW9u
SGFuZGxlciBpcyBwYXNzZWQgdGhlIHJlc3VsdCBvZiB0aGUgc2NyaXB0IGV2YWx1YXRpb24gb3Ig
YW4gZXJyb3IuCisKKyBQYXNzaW5nIG5pbCBpcyBlcXVpdmFsZW50IHRvIHRhcmdldGluZyB0aGUg
bWFpbiBmcmFtZS4KKyBJZiB0aGUgZnJhbWUgYXJndW1lbnQgbm8gbG9uZ2VyIHJlcHJlc2VudHMg
YSB2YWxpZCBmcmFtZSBieSB0aGUgdGltZSBXZWJLaXQgYXR0ZW1wdHMgdG8gY2FsbCB0aGUgSmF2
YVNjcmlwdCBmdW5jdGlvbiB5b3VyIGNvbXBsZXRpb24gaGFuZGxlciB3aWxsIGJlIGNhbGxlZCB3
aXRoIGEgV0tFcnJvckphdmFTY3JpcHRJbnZhbGlkRnJhbWVUYXJnZXQgZXJyb3IuCisgVGhpcyBt
aWdodCBoYXBwZW4gZm9yIGEgbnVtYmVyIG9mIHJlYXNvbnMsIGluY2x1ZGluZyBidXQgbm90IGxp
bWl0ZWQgdG86CisgICAgIC0gVGhlIHRhcmdldCBmcmFtZSBoYXMgYmVlbiByZW1vdmVkIGZyb20g
dGhlIERPTSB2aWEgSmF2YVNjcmlwdAorICAgICAtIEEgcGFyZW50IGZyYW1lIGhhcyBuYXZpZ2F0
ZWQsIGRlc3Ryb3lpbmcgYWxsIG9mIGl0cyBwcmV2aW91cyBjaGlsZCBmcmFtZXMKKwogIE5vIG1h
dHRlciB3aGljaCBXS0NvbnRlbnRXb3JsZCB5b3UgdXNlIHRvIGV2YWx1YXRlIHlvdXIgSmF2YVNj
cmlwdCBzdHJpbmcsIHlvdSBjYW4gbWFrZSBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIHdlYiBj
b250ZW50LiAoZS5nLiB0aGUgRG9jdW1lbnQgYW5kIGl0cyBET00gc3RydWN0dXJlKQogIFN1Y2gg
Y2hhbmdlcyB3aWxsIGJlIHZpc2libGUgdG8gc2NyaXB0IGV4ZWN1dGluZyBpbiBhbGwgV0tDb250
ZW50V29ybGRzLgogIEV2YWx1YXRpbmcgeW91ciBKYXZhU2NyaXB0IHN0cmluZyBjYW4gbGVhdmUg
YmVoaW5kIG90aGVyIGNoYW5nZXMgdG8gZ2xvYmFsIHN0YXRlIHZpc2liaWxlIHRvIEphdmFTY3Jp
cHQuIChlLmcuIGB3aW5kb3cubXlWYXJpYWJsZSA9IDE7YCkKQEAgLTIzNSwxMSArMjQ3LDEyIEBA
IFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvcygxMC4xMCksIGlvcyg4LjApKQogIGV2YWx1YXRlSmF2
YVNjcmlwdDogaXMgYSBncmVhdCB3YXkgdG8gc2V0IHVwIGdsb2JhbCBzdGF0ZSBmb3IgZnV0dXJl
IEphdmFTY3JpcHQgZXhlY3V0aW9uIGluIGEgZ2l2ZW4gd29ybGQuIChlLmcuIEltcG9ydGluZyBs
aWJyYXJpZXMvdXRpbGl0aWVzIHRoYXQgZnV0dXJlIEphdmFTY3JpcHQgZXhlY3V0aW9uIHdpbGwg
cmVseSBvbikKICBPbmNlIHlvdXIgZ2xvYmFsIHN0YXRlIGlzIHNldCB1cCwgY29uc2lkZXIgdXNp
bmcgY2FsbEFzeW5jSmF2YVNjcmlwdDogZm9yIG1vcmUgZmxleGlibGUgaW50ZXJhY3Rpb24gd2l0
aCB0aGUgSmF2YVNjcmlwdCBwcm9ncmFtbWluZyBtb2RlbC4KICovCi0tICh2b2lkKWV2YWx1YXRl
SmF2YVNjcmlwdDooTlNTdHJpbmcgKilqYXZhU2NyaXB0U3RyaW5nIGluQ29udGVudFdvcmxkOihX
S0NvbnRlbnRXb3JsZCAqKWNvbnRlbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiBf
TnVsbGFibGUpKF9OdWxsYWJsZSBpZCwgTlNFcnJvciAqIF9OdWxsYWJsZSBlcnJvcikpY29tcGxl
dGlvbkhhbmRsZXIgTlNfUkVGSU5FRF9GT1JfU1dJRlQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpZXZhbHVhdGVKYXZhU2NyaXB0
OihOU1N0cmluZyAqKWphdmFTY3JpcHRTdHJpbmcgaW5GcmFtZToobnVsbGFibGUgV0tGcmFtZUlu
Zm8gKilmcmFtZSBpbkNvbnRlbnRXb3JsZDooV0tDb250ZW50V29ybGQgKiljb250ZW50V29ybGQg
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4gX051bGxhYmxlKShfTnVsbGFibGUgaWQsIE5TRXJy
b3IgKiBfTnVsbGFibGUgZXJyb3IpKWNvbXBsZXRpb25IYW5kbGVyIE5TX1JFRklORURfRk9SX1NX
SUZUIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CiAKIC8qIEBhYnN0cmFjdCBDYWxscyB0aGUgZ2l2ZW4gSmF2YVNjcmlwdCBzdHJpbmcgYXMgYW4g
YXN5bmMgSmF2YVNjcmlwdCBmdW5jdGlvbiwgcGFzc2luZyB0aGUgZ2l2ZW4gbmFtZWQgYXJndW1l
bnRzIHRvIHRoYXQgZnVuY3Rpb24uCiAgQHBhcmFtIGZ1bmN0aW9uQm9keSBUaGUgSmF2YVNjcmlw
dCBzdHJpbmcgdG8gdXNlIGFzIHRoZSBmdW5jdGlvbiBib2R5LgogIEBwYXJhbSBhcmd1bWVudHMg
QSBkaWN0aW9uYXJ5IHJlcHJlc2VudGluZyB0aGUgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0
aGUgZnVuY3Rpb24gY2FsbC4KKyBAcGFyYW0gZnJhbWUgQSBXS0ZyYW1lSW5mbyBpZGVudGlmeWlu
ZyB0aGUgZnJhbWUgaW4gd2hpY2ggdG8gY2FsbCB0aGUgSmF2YVNjcmlwdCBmdW5jdGlvbi4KICBA
cGFyYW0gY29udGVudFdvcmxkIFRoZSBXS0NvbnRlbnRXb3JsZCBpbiB3aGljaCB0byBjYWxsIHRo
ZSBKYXZhU2NyaXB0IGZ1bmN0aW9uLgogIEBwYXJhbSBjb21wbGV0aW9uSGFuZGxlciBBIGJsb2Nr
IHRvIGludm9rZSB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIGNhbGwsIG9y
IHdpdGggdGhlIGFzeW5jaHJvbm91cyByZXNvbHV0aW9uIG9mIHRoZSBmdW5jdGlvbidzIHJldHVy
biB2YWx1ZS4KICBAZGlzY3Vzc2lvbiBUaGUgZnVuY3Rpb25Cb2R5IHN0cmluZyBpcyB0cmVhdGVk
IGFzIGFuIGFub255bW91cyBKYXZhU2NyaXB0IGZ1bmN0aW9uIGJvZHkgdGhhdCBjYW4gYmUgY2Fs
bGVkIHdpdGggbmFtZWQgYXJndW1lbnRzLgpAQCAtMjcxLDYgKzI4NCwxMiBAQCBXS19DTEFTU19B
VkFJTEFCTEUobWFjb3MoMTAuMTApLCBpb3MoOC4wKSkKICBOU051bWJlciwgTlNTdHJpbmcsIE5T
RGF0ZSwgTlNBcnJheSwgTlNEaWN0aW9uYXJ5LCBhbmQgTlNOdWxsLgogIEFueSBOU0FycmF5IG9y
IE5TRGljdGlvbmFyeSBjb250YWluZXJzIGNhbiBvbmx5IGNvbnRhaW4gb2JqZWN0cyBvZiB0aG9z
ZSB0eXBlcy4KIAorIFBhc3NpbmcgbmlsIGlzIGVxdWl2YWxlbnQgdG8gdGFyZ2V0aW5nIHRoZSBt
YWluIGZyYW1lLgorIElmIHRoZSBmcmFtZSBhcmd1bWVudCBubyBsb25nZXIgcmVwcmVzZW50cyBh
IHZhbGlkIGZyYW1lIGJ5IHRoZSB0aW1lIFdlYktpdCBhdHRlbXB0cyB0byBjYWxsIHRoZSBKYXZh
U2NyaXB0IGZ1bmN0aW9uIHlvdXIgY29tcGxldGlvbiBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIHdp
dGggYSBXS0Vycm9ySmF2YVNjcmlwdEludmFsaWRGcmFtZVRhcmdldCBlcnJvci4KKyBUaGlzIG1p
Z2h0IGhhcHBlbiBmb3IgYSBudW1iZXIgb2YgcmVhc29ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGlt
aXRlZCB0bzoKKyAgICAgLSBUaGUgdGFyZ2V0IGZyYW1lIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0
aGUgRE9NIHZpYSBKYXZhU2NyaXB0CisgICAgIC0gQSBwYXJlbnQgZnJhbWUgaGFzIG5hdmlnYXRl
ZCwgZGVzdHJveWluZyBhbGwgb2YgaXRzIHByZXZpb3VzIGNoaWxkIGZyYW1lcworCiAgTm8gbWF0
dGVyIHdoaWNoIFdLQ29udGVudFdvcmxkIHlvdSB1c2UgdG8gY2FsbCB5b3VyIEphdmFTY3JpcHQg
ZnVuY3Rpb24sIHlvdSBjYW4gbWFrZSBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIHdlYiBjb250
ZW50LiAoZS5nLiB0aGUgRG9jdW1lbnQgYW5kIGl0cyBET00gc3RydWN0dXJlKQogIFN1Y2ggY2hh
bmdlcyB3aWxsIGJlIHZpc2libGUgdG8gc2NyaXB0IGV4ZWN1dGluZyBpbiBhbGwgV0tDb250ZW50
V29ybGRzLgogIENhbGxpbmcgeW91ciBKYXZhU2NyaXB0IGZ1bmN0aW9uIGNhbiBsZWF2ZSBiZWhp
bmQgb3RoZXIgY2hhbmdlcyB0byBnbG9iYWwgc3RhdGUgdmlzaWJpbGUgdG8gSmF2YVNjcmlwdC4g
KGUuZy4gYHdpbmRvdy5teVZhcmlhYmxlID0gMTtgKQpAQCAtMzAwLDcgKzMxOSw3IEBAIFdLX0NM
QVNTX0FWQUlMQUJMRShtYWNvcygxMC4xMCksIGlvcyg4LjApKQogCiAgVGhlIGFib3ZlIGZ1bmN0
aW9uIHRleHQgd2lsbCBjcmVhdGUgYSBwcm9taXNlIHRoYXQgd2lsbCBmdWxmdWxsIHdpdGggdGhl
IHZhbHVlIDQyIGFmdGVyIGEgb25lIHNlY29uZCBkZWxheSwgd2FpdCBmb3IgaXQgdG8gcmVzb2x2
ZSwgdGhlbiByZXR1cm4gdGhlIGZ1bGZpbGxtZW50IHZhbHVlIG9mIDQyLgogKi8KLS0gKHZvaWQp
Y2FsbEFzeW5jSmF2YVNjcmlwdDooTlNTdHJpbmcgKilmdW5jdGlvbkJvZHkgYXJndW1lbnRzOihu
dWxsYWJsZSBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopYXJndW1lbnRzIGluQ29udGVu
dFdvcmxkOihXS0NvbnRlbnRXb3JsZCAqKWNvbnRlbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXiBfTnVsbGFibGUpKF9OdWxsYWJsZSBpZCwgTlNFcnJvciAqIF9OdWxsYWJsZSBlcnJv
cikpY29tcGxldGlvbkhhbmRsZXIgTlNfUkVGSU5FRF9GT1JfU1dJRlQgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpY2FsbEFzeW5j
SmF2YVNjcmlwdDooTlNTdHJpbmcgKilmdW5jdGlvbkJvZHkgYXJndW1lbnRzOihudWxsYWJsZSBO
U0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopYXJndW1lbnRzIGluRnJhbWU6KG51bGxhYmxl
IFdLRnJhbWVJbmZvICopZnJhbWUgaW5Db250ZW50V29ybGQ6KFdLQ29udGVudFdvcmxkICopY29u
dGVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheIF9OdWxsYWJsZSkoX051bGxhYmxl
IGlkLCBOU0Vycm9yICogX051bGxhYmxlIGVycm9yKSljb21wbGV0aW9uSGFuZGxlciBOU19SRUZJ
TkVEX0ZPUl9TV0lGVCBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwogCiAvKiEgQGFic3RyYWN0IEdldCBhIHNuYXBzaG90IGZvciB0aGUgdmlzaWJs
ZSB2aWV3cG9ydCBvZiBXS1dlYlZpZXcuCiAgQHBhcmFtIHNuYXBzaG90Q29uZmlndXJhdGlvbiBB
biBvYmplY3QgdGhhdCBzcGVjaWZpZXMgaG93IHRoZSBzbmFwc2hvdCBpcyBjb25maWd1cmVkLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXgg
MTI4ODRhZTAxNGM1ODAyNTg2YWJiN2M3MjEwNWVkOWE1NjdhYjgzOS4uNjcwZjNhMTkzMDZlZTc5
NzNjMDFmNjRjNDJlOGEyODRmN2YxOGZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC04MTksMTQgKzgxOSwxNCBAQCAtICh2b2lkKWV2
YWx1YXRlSmF2YVNjcmlwdDooTlNTdHJpbmcgKilqYXZhU2NyaXB0U3RyaW5nIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkCiAgICAgW3NlbGYgX2V2YWx1YXRlSmF2YVNjcmlwdDpqYXZhU2NyaXB0U3Ry
aW5nIGFzQXN5bmNGdW5jdGlvbjpOTyB3aXRoU291cmNlVVJMOm5pbCB3aXRoQXJndW1lbnRzOm5p
bCBmb3JjZVVzZXJHZXN0dXJlOllFUyBpbkZyYW1lOm5pbCBpbldvcmxkOldLQ29udGVudFdvcmxk
LnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CiB9CiAKLS0g
KHZvaWQpZXZhbHVhdGVKYXZhU2NyaXB0OihOU1N0cmluZyAqKWphdmFTY3JpcHRTdHJpbmcgaW5D
b250ZW50V29ybGQ6KFdLQ29udGVudFdvcmxkICopY29udGVudFdvcmxkIGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkICheKShpZCwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgorLSAodm9pZCll
dmFsdWF0ZUphdmFTY3JpcHQ6KE5TU3RyaW5nICopamF2YVNjcmlwdFN0cmluZyBpbkZyYW1lOihX
S0ZyYW1lSW5mbyAqKWZyYW1lIGluQ29udGVudFdvcmxkOihXS0NvbnRlbnRXb3JsZCAqKWNvbnRl
bnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoaWQsIE5TRXJyb3IgKikpY29tcGxl
dGlvbkhhbmRsZXIKIHsKLSAgICBbc2VsZiBfZXZhbHVhdGVKYXZhU2NyaXB0OmphdmFTY3JpcHRT
dHJpbmcgYXNBc3luY0Z1bmN0aW9uOk5PIHdpdGhTb3VyY2VVUkw6bmlsIHdpdGhBcmd1bWVudHM6
bmlsIGZvcmNlVXNlckdlc3R1cmU6WUVTIGluRnJhbWU6bmlsIGluV29ybGQ6Y29udGVudFdvcmxk
IGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBbc2VsZiBfZXZhbHVh
dGVKYXZhU2NyaXB0OmphdmFTY3JpcHRTdHJpbmcgYXNBc3luY0Z1bmN0aW9uOk5PIHdpdGhTb3Vy
Y2VVUkw6bmlsIHdpdGhBcmd1bWVudHM6bmlsIGZvcmNlVXNlckdlc3R1cmU6WUVTIGluRnJhbWU6
ZnJhbWUgaW5Xb3JsZDpjb250ZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhh
bmRsZXJdOwogfQogCi0tICh2b2lkKWNhbGxBc3luY0phdmFTY3JpcHQ6KE5TU3RyaW5nICopamF2
YVNjcmlwdFN0cmluZyBhcmd1bWVudHM6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilh
cmd1bWVudHMgaW5Db250ZW50V29ybGQ6KFdLQ29udGVudFdvcmxkICopY29udGVudFdvcmxkIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShpZCwgTlNFcnJvciAqZXJyb3IpKWNvbXBsZXRpb25I
YW5kbGVyCistICh2b2lkKWNhbGxBc3luY0phdmFTY3JpcHQ6KE5TU3RyaW5nICopamF2YVNjcmlw
dFN0cmluZyBhcmd1bWVudHM6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilhcmd1bWVu
dHMgaW5GcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBpbkNvbnRlbnRXb3JsZDooV0tDb250ZW50
V29ybGQgKiljb250ZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKGlkLCBOU0Vy
cm9yICplcnJvcikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBbc2VsZiBfZXZhbHVhdGVKYXZh
U2NyaXB0OmphdmFTY3JpcHRTdHJpbmcgYXNBc3luY0Z1bmN0aW9uOllFUyB3aXRoU291cmNlVVJM
Om5pbCB3aXRoQXJndW1lbnRzOmFyZ3VtZW50cyBmb3JjZVVzZXJHZXN0dXJlOllFUyBpbkZyYW1l
Om5pbCBpbldvcmxkOmNvbnRlbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFu
ZGxlcl07CisgICAgW3NlbGYgX2V2YWx1YXRlSmF2YVNjcmlwdDpqYXZhU2NyaXB0U3RyaW5nIGFz
QXN5bmNGdW5jdGlvbjpZRVMgd2l0aFNvdXJjZVVSTDpuaWwgd2l0aEFyZ3VtZW50czphcmd1bWVu
dHMgZm9yY2VVc2VyR2VzdHVyZTpZRVMgaW5GcmFtZTpmcmFtZSBpbldvcmxkOmNvbnRlbnRXb3Js
ZCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CiB9CiAKIHN0YXRpYyBib29s
IHZhbGlkYXRlQXJndW1lbnQoaWQgYXJndW1lbnQpCkBAIC04NjMsNiArODYzLDMxIEBAIHN0YXRp
YyBib29sIHZhbGlkYXRlQXJndW1lbnQoaWQgYXJndW1lbnQpCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCitzdGF0aWMgUmV0YWluUHRyPE5TRXJyb3I+IG5zRXJyb3JGcm9tRXhjZXB0aW9uRGV0YWls
cyhjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EZXRhaWxzJiBkZXRhaWxzKQoreworICAgIGF1dG8g
dXNlckluZm8gPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwor
CisgICAgV0tFcnJvckNvZGUgZXJyb3JDb2RlOworICAgIHN3aXRjaCAoZGV0YWlscy50eXBlKSB7
CisgICAgY2FzZSBXZWJDb3JlOjpFeGNlcHRpb25EZXRhaWxzOjpUeXBlOjpJbnZhbGlkVGFyZ2V0
RnJhbWU6CisgICAgICAgIGVycm9yQ29kZSA9IFdLRXJyb3JKYXZhU2NyaXB0SW52YWxpZEZyYW1l
VGFyZ2V0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkNvcmU6OkV4Y2VwdGlvbkRldGFp
bHM6OlR5cGU6OlNjcmlwdDoKKyAgICAgICAgZXJyb3JDb2RlID0gV0tFcnJvckphdmFTY3JpcHRF
eGNlcHRpb25PY2N1cnJlZDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgW3VzZXJJbmZv
IHNldE9iamVjdDpsb2NhbGl6ZWREZXNjcmlwdGlvbkZvckVycm9yQ29kZShlcnJvckNvZGUpIGZv
cktleTpOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5XTsKKyAgICBbdXNlckluZm8gc2V0T2JqZWN0
OmRldGFpbHMubWVzc2FnZSBmb3JLZXk6X1dLSmF2YVNjcmlwdEV4Y2VwdGlvbk1lc3NhZ2VFcnJv
cktleV07CisgICAgW3VzZXJJbmZvIHNldE9iamVjdDpAKGRldGFpbHMubGluZU51bWJlcikgZm9y
S2V5Ol9XS0phdmFTY3JpcHRFeGNlcHRpb25MaW5lTnVtYmVyRXJyb3JLZXldOworICAgIFt1c2Vy
SW5mbyBzZXRPYmplY3Q6QChkZXRhaWxzLmNvbHVtbk51bWJlcikgZm9yS2V5Ol9XS0phdmFTY3Jp
cHRFeGNlcHRpb25Db2x1bW5OdW1iZXJFcnJvcktleV07CisKKyAgICBpZiAoIWRldGFpbHMuc291
cmNlVVJMLmlzRW1wdHkoKSkKKyAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDpbTlNVUkwgX3dl
Yl9VUkxXaXRoV1RGU3RyaW5nOmRldGFpbHMuc291cmNlVVJMXSBmb3JLZXk6X1dLSmF2YVNjcmlw
dEV4Y2VwdGlvblNvdXJjZVVSTEVycm9yS2V5XTsKKworICAgIHJldHVybiBhZG9wdE5TKFtbTlNF
cnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOmVycm9yQ29kZSB1
c2VySW5mbzp1c2VySW5mby5nZXQoKV0pOworfQorCiAtICh2b2lkKV9ldmFsdWF0ZUphdmFTY3Jp
cHQ6KE5TU3RyaW5nICopamF2YVNjcmlwdFN0cmluZyBhc0FzeW5jRnVuY3Rpb246KEJPT0wpYXNB
c3luY0Z1bmN0aW9uIHdpdGhTb3VyY2VVUkw6KE5TVVJMICopc291cmNlVVJMIHdpdGhBcmd1bWVu
dHM6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilhcmd1bWVudHMgZm9yY2VVc2VyR2Vz
dHVyZTooQk9PTClmb3JjZVVzZXJHZXN0dXJlIGluRnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUg
aW5Xb3JsZDooV0tDb250ZW50V29ybGQgKil3b3JsZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoaWQsIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKICAgICBhdXRvIGhhbmRsZXIg
PSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7CkBAIC05MjksMTggKzk1NCw3IEBA
IC0gKHZvaWQpX2V2YWx1YXRlSmF2YVNjcmlwdDooTlNTdHJpbmcgKilqYXZhU2NyaXB0U3RyaW5n
IGFzQXN5bmNGdW5jdGlvbjooQk9PTClhCiAgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lk
ICheKShpZCwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwogICAgICAgICBpZiAoZGV0YWlscykg
ewogICAgICAgICAgICAgQVNTRVJUKCFzZXJpYWxpemVkU2NyaXB0VmFsdWUpOwotCi0gICAgICAg
ICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gdXNlckluZm8gPSBhZG9wdE5TKFtb
TlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotCi0gICAgICAgICAgICBbdXNlcklu
Zm8gc2V0T2JqZWN0OmxvY2FsaXplZERlc2NyaXB0aW9uRm9yRXJyb3JDb2RlKFdLRXJyb3JKYXZh
U2NyaXB0RXhjZXB0aW9uT2NjdXJyZWQpIGZvcktleTpOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5
XTsKLSAgICAgICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6c3RhdGljX2Nhc3Q8TlNTdHJpbmcg
Kj4oZGV0YWlscy0+bWVzc2FnZSkgZm9yS2V5Ol9XS0phdmFTY3JpcHRFeGNlcHRpb25NZXNzYWdl
RXJyb3JLZXldOwotICAgICAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDpAKGRldGFpbHMtPmxp
bmVOdW1iZXIpIGZvcktleTpfV0tKYXZhU2NyaXB0RXhjZXB0aW9uTGluZU51bWJlckVycm9yS2V5
XTsKLSAgICAgICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6QChkZXRhaWxzLT5jb2x1bW5OdW1i
ZXIpIGZvcktleTpfV0tKYXZhU2NyaXB0RXhjZXB0aW9uQ29sdW1uTnVtYmVyRXJyb3JLZXldOwot
Ci0gICAgICAgICAgICBpZiAoIWRldGFpbHMtPnNvdXJjZVVSTC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDpbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5n
OmRldGFpbHMtPnNvdXJjZVVSTF0gZm9yS2V5Ol9XS0phdmFTY3JpcHRFeGNlcHRpb25Tb3VyY2VV
UkxFcnJvcktleV07Ci0KLSAgICAgICAgICAgIHJhd0hhbmRsZXIobmlsLCBhZG9wdE5TKFtbTlNF
cnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOldLRXJyb3JKYXZh
U2NyaXB0RXhjZXB0aW9uT2NjdXJyZWQgdXNlckluZm86dXNlckluZm8uZ2V0KCldKS5nZXQoKSk7
CisgICAgICAgICAgICByYXdIYW5kbGVyKG5pbCwgbnNFcnJvckZyb21FeGNlcHRpb25EZXRhaWxz
KCpkZXRhaWxzKS5nZXQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAwOTY1ZDJj
MDA3MjBlMTU3MDMzMWQzMGUxMDhlNWUxZGJhYjM1NTkxLi5jN2M5MWVhOGJlMmFiYTc2ZmJiZDcz
ZWZhZmVhMTE1NGU3OTFkYzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcApAQCAtMzQxMiw3ICszNDEyLDcgQEAgdm9pZCBXZWJQYWdlOjpydW5KYXZh
U2NyaXB0KFdlYkZyYW1lKiBmcmFtZSwgUnVuSmF2YVNjcmlwdFBhcmFtZXRlcnMmJiBwYXJhbWV0
ZXIKICAgICAvLyBkaXNhcHBlYXIgZHVyaW5nIHNjcmlwdCBleGVjdXRpb24uCiAKICAgICBpZiAo
IWZyYW1lIHx8ICFmcmFtZS0+Y29yZUZyYW1lKCkpIHsKLSAgICAgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpTY3JpcHRWYWx1ZUNhbGxiYWNrKHsgfSwgRXhjZXB0aW9uRGV0YWlscyB7
ICJVbmFibGUgdG8gZXhlY3V0ZSBKYXZhU2NyaXB0OiBQYWdlIGlzIGluIGludmFsaWQgc3RhdGUi
X3MgfSwgY2FsbGJhY2tJRCkpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlNjcmlwdFZhbHVlQ2FsbGJhY2soeyB9LCBFeGNlcHRpb25EZXRhaWxzIHsgIlVuYWJsZSB0byBl
eGVjdXRlIEphdmFTY3JpcHQ6IFRhcmdldCBmcmFtZSBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhl
IHBhZ2UiX3MsIDAsIDAsIEV4Y2VwdGlvbkRldGFpbHM6OlR5cGU6OkludmFsaWRUYXJnZXRGcmFt
ZSB9LCBjYWxsYmFja0lEKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2NGU3MmY4YzJlM2QxNGIy
YzU1OThlNzg2NTM1MTgwYWY4NjNlYTQ0Li44ZmNjNDlkODhmNzYzYzFkZTFlNGI0NTM4ZTUyM2I3
NTk2YTk4MzJiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjAtMDYtMjkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgorCisgICAgICAgIEphdmFTY3JpcHQgY2Fubm90IGJlIGluamVjdGVkIGludG8g
aWZyYW1lcworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTQxNjg5NDY+IGFuZCBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNTU2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgR2VvZmYgR2FyZW4uCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0FzeW5jRnVuY3Rpb24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VzZXJDb250ZW50Q29udHJv
bGxlci5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV0tVUkxTY2hlbWVIYW5kbGVyLTEubW06CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW06Cisg
ICAgICAgIChURVNUKToKKyAgICAgICAgKC1bRnJhbWVzTWVzc2FnZUhhbmRsZXIgdXNlckNvbnRl
bnRDb250cm9sbGVyOmRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOl0pOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG9i
amVjdEJ5Q2FsbGluZ0FzeW5jRnVuY3Rpb246d2l0aEFyZ3VtZW50czplcnJvcjpdKToKKwogMjAy
MC0wNi0xNiAgQ2hhcmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gRGlzYWJsZSB2aWRlbyBhdXRvcGxheQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Bc3luY0Z1bmN0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Bc3luY0Z1bmN0aW9uLm1tCmluZGV4IGViYjViODVlZjdm
NGY3YzJmYmYxMTY3MGZmMGMxMDNiZWQ1Y2M2YWUuLmE0OTI3NTc4M2Q4YWRiMDFhMjFhNDRkYzU3
YTQxNjRmMDAxMzA0ZTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvQXN5bmNGdW5jdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0FzeW5jRnVuY3Rpb24ubW0KQEAgLTE4MywxMiArMTgzLDEyIEBAIFRFU1Qo
QXN5bmNGdW5jdGlvbiwgUHJvbWlzZSkKIHsKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwg
NjAwKV0pOwogCi0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpAInNob3VsZG4ndCBj
cmFzaCIgYXJndW1lbnRzOkB7IEAiaW52YWxpZHBhcmFtZXRlciIgOiB3ZWJWaWV3LmdldCgpIH0g
aW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVy
Om5pbF07CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpAInNob3VsZG4ndCBjcmFz
aCIgYXJndW1lbnRzOkB7IEAiaW52YWxpZHBhcmFtZXRlciIgOiB3ZWJWaWV3LmdldCgpIH0gaW5G
cmFtZTpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRp
b25IYW5kbGVyOm5pbF07CiAKICAgICBOU1N0cmluZyAqZnVuY3Rpb25Cb2R5ID0gQCJyZXR1cm4g
bmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7IHNldFRpbWVvdXQoZnVuY3Rp
b24oKXsgcmVzb2x2ZSg0MikgfSwgMCk7IH0pIjsKIAogICAgIGJvb2wgZG9uZSA9IGZhbHNlOwot
ICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpu
aWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5k
bGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGNhbGxB
c3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpuaWwgaW5GcmFtZTpuaWwgaW5D
b250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsm
XSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChlcnJv
cik7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIg
Y2xhc3NdXSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRvTnVtYmVyOkA0
Ml0pOwpAQCAtMjAwLDcgKzIwMCw3IEBAIFRFU1QoQXN5bmNGdW5jdGlvbiwgUHJvbWlzZSkKICAg
ICBmdW5jdGlvbkJvZHkgPSBAInJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCBy
ZWplY3QpIHsgc2V0VGltZW91dChmdW5jdGlvbigpeyByZWplY3QoJ1JlamVjdGVkIScpIH0sIDAp
OyB9KSI7CiAKICAgICBkb25lID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNj
cmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRX
b3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3Ig
KmVycm9yKSB7CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkg
YXJndW1lbnRzOm5pbCBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5w
YWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9y
KSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKHJlc3VsdCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKGVy
cm9yICE9IG5pbCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtbZXJyb3IgZGVzY3JpcHRpb25dIGNv
bnRhaW5zU3RyaW5nOkAiUmVqZWN0ZWQhIl0pOwpAQCAtMjExLDcgKzIxMSw3IEBAIFRFU1QoQXN5
bmNGdW5jdGlvbiwgUHJvbWlzZSkKICAgICBmdW5jdGlvbkJvZHkgPSBAImxldCBwID0gbmV3IFBy
b3h5KGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBy
ZXNvbHZlKDQyKTsgfSwgMCk7IH0sIHsgfSk7IHJldHVybiB7IHRoZW46IHAgfTsiOwogCiAgICAg
ZG9uZSA9IGZhbHNlOwotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25C
b2R5IGFyZ3VtZW50czpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxk
IGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAg
IFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpuaWwg
aW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBs
ZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBF
WFBFQ1RfTlVMTChlcnJvcik7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNLaW5kT2ZD
bGFzczpbTlNOdW1iZXIgY2xhc3NdXSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNF
cXVhbFRvTnVtYmVyOkA0Ml0pOwpAQCAtMjIyLDcgKzIyMiw3IEBAIFRFU1QoQXN5bmNGdW5jdGlv
biwgUHJvbWlzZSkKICAgICBmdW5jdGlvbkJvZHkgPSBAImxldCBwID0gbmV3IFByb3h5KGZ1bmN0
aW9uKHJlc29sdmUsIHJlamVjdCkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyByZWplY3QoJ1Jl
amVjdGVkIScpOyB9LCAwKTsgfSwgeyB9KTsgcmV0dXJuIHsgdGhlbjogcCB9OyI7CiAKICAgICBk
b25lID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJv
ZHkgYXJndW1lbnRzOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQg
Y29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAg
W3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5pbCBp
bkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxl
dGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVY
UEVDVF9OVUxMKHJlc3VsdCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKGVycm9yICE9IG5pbCk7CiAg
ICAgICAgIEVYUEVDVF9UUlVFKFtbZXJyb3IgZGVzY3JpcHRpb25dIGNvbnRhaW5zU3RyaW5nOkAi
UmVqZWN0ZWQhIl0pOwpAQCAtMjM0LDcgKzIzNCw3IEBAIFRFU1QoQXN5bmNGdW5jdGlvbiwgUHJv
bWlzZSkKICAgICBmdW5jdGlvbkJvZHkgPSBAInZhciByID0gMDsgdmFyIHAgPSBuZXcgUHJvbWlz
ZShmdW5jdGlvbihmdWxmaWxsLCByZWplY3QpIHsgc2V0VGltZW91dChmdW5jdGlvbigpeyByID0g
NDI7IGZ1bGZpbGwoKTsgfSwgNSk7fSk7IGF3YWl0IHA7IHJldHVybiByOyI7CiAKICAgICBkb25l
ID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkg
YXJndW1lbnRzOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29t
cGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dl
YlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5pbCBpbkZy
YW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlv
bkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVD
VF9OVUxMKGVycm9yKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0tpbmRPZkNsYXNz
OltOU051bWJlciBjbGFzc11dKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFs
VG9OdW1iZXI6QDQyXSk7CkBAIC0yNDYsNyArMjQ2LDcgQEAgVEVTVChBc3luY0Z1bmN0aW9uLCBQ
cm9taXNlKQogICAgIGZ1bmN0aW9uQm9keSA9IEAidmFyIHAgPSBuZXcgUHJvbWlzZShmdW5jdGlv
bihmdWxmaWxsLCByZWplY3QpIHsgc2V0VGltZW91dChmdW5jdGlvbigpeyBmdWxmaWxsKCdGdWxm
aWxsZWQhJykgfSwgNSk7fSk7IGF3YWl0IHA7IHJldHVybiBwOyI7CiAKICAgICBkb25lID0gZmFs
c2U7Ci0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1l
bnRzOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlv
bkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcg
Y2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5pbCBpbkZyYW1lOm5p
bCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRs
ZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxM
KGVycm9yKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0tpbmRPZkNsYXNzOltOU1N0
cmluZyBjbGFzc11dKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9TdHJp
bmc6QCJGdWxmaWxsZWQhIl0pOwpAQCAtMjU4LDcgKzI1OCw3IEBAIFRFU1QoQXN5bmNGdW5jdGlv
biwgUHJvbWlzZSkKICAgICBmdW5jdGlvbkJvZHkgPSBAInZhciBwID0gbmV3IFByb21pc2UoZnVu
Y3Rpb24gKHIpIHsgcihuZXcgUHJvbWlzZShmdW5jdGlvbiAocikgeyByKDQyKTsgfSkpOyB9KTsg
YXdhaXQgcDsgcmV0dXJuICdEb25lJzsiOwogCiAgICAgZG9uZSA9IGZhbHNlOwotICAgIFt3ZWJW
aWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpuaWwgaW5Db250
ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAo
aWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFT
Y3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpuaWwgaW5GcmFtZTpuaWwgaW5Db250ZW50V29y
bGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVz
dWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CiAgICAg
ICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7
CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRvU3RyaW5nOkAiRG9uZSJdKTsK
QEAgLTI3MCw3ICsyNzAsNyBAQCBURVNUKEFzeW5jRnVuY3Rpb24sIFByb21pc2UpCiAgICAgZG9u
ZSA9IGZhbHNlOwogICAgIGZ1bmN0aW9uQm9keSA9IEAicmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0
aW9uKHJlc29sdmUsIHJlamVjdCkgeyB9KSI7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1MDA7
ICsraSkgewotICAgICAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9k
eSBhcmd1bWVudHM6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBj
b21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAg
ICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5p
bCBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29t
cGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAg
ICAgICBFWFBFQ1RfTlVMTChyZXN1bHQpOwogICAgICAgICAgICAgRVhQRUNUX1RSVUUoZXJyb3Ig
IT0gbmlsKTsKICAgICAgICAgICAgIEVYUEVDVF9UUlVFKFtbZXJyb3IgZGVzY3JpcHRpb25dIGNv
bnRhaW5zU3RyaW5nOkAibm8gbG9uZ2VyIHJlYWNoYWJsZSJdKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVXNlckNvbnRlbnRDb250cm9sbGVyLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Vc2VyQ29udGVudENvbnRy
b2xsZXIubW0KaW5kZXggNDIzN2UxMjMzYjNmMDQ4YWE5MDNhMzZlZmI4ZTBmMzdkNGEzZjBiZi4u
MTVhOTNkYWJlZjIzMWQ0NWJlYjA2MjNkZWU3ZWQ2MWRlMjBlMzAxYSAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Vc2VyQ29udGVudENvbnRyb2xsZXIu
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Vc2VyQ29udGVu
dENvbnRyb2xsZXIubW0KQEAgLTIyMSw3ICsyMjEsNyBAQCBURVNUKFdLVXNlckNvbnRlbnRDb250
cm9sbGVyLCBTY3JpcHRNZXNzYWdlSGFuZGxlckNhbGxSZW1vdmVkSGFuZGxlcikKIAogICAgIF9f
YmxvY2sgYm9vbCBkb25lID0gZmFsc2U7CiAgICAgLy8gVGVzdCB0aGF0IHdlIHRocm93IGFuIGV4
Y2VwdGlvbiBpZiB5b3UgdHJ5IHRvIHVzZSBhIG1lc3NhZ2UgaGFuZGxlciB0aGF0IGhhcyBiZWVu
IHJlbW92ZWQuCi0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpAInJldHVybiBoYW5k
bGVyVG9SZW1vdmUucG9zdE1lc3NhZ2UoJ0ZBSUwnKSIgYXJndW1lbnRzOm5pbCBpbkNvbnRlbnRX
b3JsZDpbV0tDb250ZW50V29ybGQgcGFnZVdvcmxkXSBjb21wbGV0aW9uSGFuZGxlcjpeIChpZCB2
YWx1ZSwgTlNFcnJvciAqIGVycm9yKSB7CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlw
dDpAInJldHVybiBoYW5kbGVyVG9SZW1vdmUucG9zdE1lc3NhZ2UoJ0ZBSUwnKSIgYXJndW1lbnRz
Om5pbCBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpbV0tDb250ZW50V29ybGQgcGFnZVdvcmxk
XSBjb21wbGV0aW9uSGFuZGxlcjpeIChpZCB2YWx1ZSwgTlNFcnJvciAqIGVycm9yKSB7CiAgICAg
ICAgIEVYUEVDVF9OVUxMKHZhbHVlKTsKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsK
ICAgICAgICAgRVhQRUNUX1RSVUUoW1tlcnJvciBkZXNjcmlwdGlvbl0gY29udGFpbnNTdHJpbmc6
QCJJbnZhbGlkQWNjZXNzRXJyb3IiXSk7CkBAIC0xMDEyLDcgKzEwMTIsNyBAQCBURVNUKFdLVXNl
ckNvbnRlbnRDb250cm9sbGVyLCBNZXNzYWdlSGFuZGxlckFQSSkKICAgICBOU1N0cmluZyAqZnVu
Y3Rpb25Cb2R5ID0gQCJ2YXIgcCA9IHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzW2hhbmRs
ZXJdLnBvc3RNZXNzYWdlKGFyZyk7IGF3YWl0IHA7IHJldHVybiBwOyI7CiAKICAgICAvLyBwYWdl
V29ybGQgaXMgd2hlcmUgdGVzdGhhbmRsZXIxIGxpdmVzCi0gICAgW3dlYlZpZXcgY2FsbEFzeW5j
SmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxlciIgOiBAInRlc3RI
YW5kbGVyMSIsIEAiYXJnIiA6IEAxIH0gaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFn
ZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikg
eworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50
czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjEiLCBAImFyZyIgOiBAMSB9IGluRnJhbWU6
bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFu
ZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05V
TEwoZXJyb3IpOwogICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb051bWJlcjpA
MV0pOwogICAgICAgICBkb25lID0gdHJ1ZTsKQEAgLTEwMjEsNyArMTAyMSw3IEBAIFRFU1QoV0tV
c2VyQ29udGVudENvbnRyb2xsZXIsIE1lc3NhZ2VIYW5kbGVyQVBJKQogICAgIGRvbmUgPSBmYWxz
ZTsKIAogICAgIC8vIFRyeWluZyB0byBmaW5kIHRlc3RIYW5kbGVyMSBpbiB0aGUgZGVmYXVsdENs
aWVudFdvcmxkIHNob3VsZCBmYWlsCi0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpm
dW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxlciIgOiBAInRlc3RIYW5kbGVyMSIsIEAi
YXJnIiA6IEAxIH0gaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQuZGVmYXVsdENsaWVudFdv
cmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewor
ICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpA
eyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjEiLCBAImFyZyIgOiBAMSB9IGluRnJhbWU6bmls
IGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3JsZCBjb21wbGV0
aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQ
RUNUX05VTEwocmVzdWx0KTsKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKICAgICAg
ICAgZG9uZSA9IHRydWU7CkBAIC0xMDMwLDcgKzEwMzAsNyBAQCBURVNUKFdLVXNlckNvbnRlbnRD
b250cm9sbGVyLCBNZXNzYWdlSGFuZGxlckFQSSkKICAgICBkb25lID0gZmFsc2U7CiAKICAgICAv
LyBkZWZhdWx0Q2xpZW50V29ybGQgaXMgd2hlcmUgdGVzdGhhbmRsZXIyIGxpdmVzCi0gICAgW3dl
YlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFu
ZGxlciIgOiBAInRlc3RIYW5kbGVyMiIsIEAiYXJnIiA6IEAxIH0gaW5Db250ZW50V29ybGQ6V0tD
b250ZW50V29ybGQuZGVmYXVsdENsaWVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQg
cmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3Jp
cHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjIi
LCBAImFyZyIgOiBAMSB9IGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxk
LmRlZmF1bHRDbGllbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNF
cnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwogICAgICAgICBFWFBF
Q1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb051bWJlcjpAMV0pOwogICAgICAgICBkb25lID0gdHJ1
ZTsKQEAgLTEwNDAsNyArMTA0MCw3IEBAIFRFU1QoV0tVc2VyQ29udGVudENvbnRyb2xsZXIsIE1l
c3NhZ2VIYW5kbGVyQVBJKQogCiAgICAgLy8gQnV0IGlmIHdlIHJlbXZvZSBpdCwgaXQgc2hvdWxk
IG5vIGxvbmdlciBsaXZlIHRoZXJlLCBhbmQgdXNpbmcgaXQgc2hvdWxkIGNhdXNlIGFuIGVycm9y
LgogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIHJlbW92ZVNjcmlw
dE1lc3NhZ2VIYW5kbGVyRm9yTmFtZTpAInRlc3RIYW5kbGVyMiIgY29udGVudFdvcmxkOldLQ29u
dGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3JsZF07Ci0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2
YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxlciIgOiBAInRlc3RIYW5k
bGVyMiIsIEAiYXJnIiA6IEAxIH0gaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQuZGVmYXVs
dENsaWVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICpl
cnJvcikgeworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFy
Z3VtZW50czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjIiLCBAImFyZyIgOiBAMSB9IGlu
RnJhbWU6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3Js
ZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAg
ICAgICAgRVhQRUNUX05VTEwocmVzdWx0KTsKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9y
KTsKICAgICAgICAgZG9uZSA9IHRydWU7CkBAIC0xMDQ5LDE1ICsxMDQ5LDE1IEBAIFRFU1QoV0tV
c2VyQ29udGVudENvbnRyb2xsZXIsIE1lc3NhZ2VIYW5kbGVyQVBJKQogICAgIGRvbmUgPSBmYWxz
ZTsKIAogICAgIC8vIFZlcmlmeSBoYW5kbGVycyAzLCA0LCBhbmQgNSBhcmUgYWxsIGluIHRoZSBj
dXN0b20gd29ybGQuCi0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJv
ZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxlciIgOiBAInRlc3RIYW5kbGVyMyIsIEAiYXJnIiA6IEAx
IH0gaW5Db250ZW50V29ybGQ6d29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQs
IE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5j
dGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxlciIgOiBAInRlc3RIYW5kbGVyMyIsIEAiYXJn
IiA6IEAxIH0gaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6d29ybGQgY29tcGxldGlvbkhhbmRs
ZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxM
KGVycm9yKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9OdW1iZXI6QDFd
KTsKICAgICB9XTsKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9k
eSBhcmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhhbmRsZXI0IiwgQCJhcmciIDogQDEg
fSBpbkNvbnRlbnRXb3JsZDp3b3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwg
TlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0
aW9uQm9keSBhcmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhhbmRsZXI0IiwgQCJhcmci
IDogQDEgfSBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDp3b3JsZCBjb21wbGV0aW9uSGFuZGxl
cjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwo
ZXJyb3IpOwogICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb051bWJlcjpAMV0p
OwogICAgIH1dOwotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5
IGFyZ3VtZW50czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjUiLCBAImFyZyIgOiBAMSB9
IGluQ29udGVudFdvcmxkOndvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBO
U0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6ZnVuY3Rp
b25Cb2R5IGFyZ3VtZW50czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjUiLCBAImFyZyIg
OiBAMSB9IGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOndvcmxkIGNvbXBsZXRpb25IYW5kbGVy
OlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChl
cnJvcik7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRvTnVtYmVyOkAxXSk7
CiAgICAgICAgIGRvbmUgPSB0cnVlOwpAQCAtMTA2Nyw3ICsxMDY3LDcgQEAgVEVTVChXS1VzZXJD
b250ZW50Q29udHJvbGxlciwgTWVzc2FnZUhhbmRsZXJBUEkpCiAKICAgICAvLyBSZW1vdmUgMyBm
cm9tIHRoZSB3cm9uZyB3b3JsZCwgdmVyaWZ5IGl0IGlzIHN0aWxsIHRoZXJlIGluIHRoZSBjdXN0
b20gd29ybGQuCiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gcmVt
b3ZlU2NyaXB0TWVzc2FnZUhhbmRsZXJGb3JOYW1lOkAidGVzdEhhbmRsZXIzIiBjb250ZW50V29y
bGQ6V0tDb250ZW50V29ybGQuZGVmYXVsdENsaWVudFdvcmxkXTsKLSAgICBbd2ViVmlldyBjYWxs
QXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAi
dGVzdEhhbmRsZXIzIiwgQCJhcmciIDogQDEgfSBpbkNvbnRlbnRXb3JsZDp3b3JsZCBjb21wbGV0
aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmll
dyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6QHsgQCJoYW5kbGVy
IiA6IEAidGVzdEhhbmRsZXIzIiwgQCJhcmciIDogQDEgfSBpbkZyYW1lOm5pbCBpbkNvbnRlbnRX
b3JsZDp3b3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJy
b3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwogICAgICAgICBFWFBFQ1RfVFJVRShb
cmVzdWx0IGlzRXF1YWxUb051bWJlcjpAMV0pOwogICAgICAgICBkb25lID0gdHJ1ZTsKQEAgLTEw
NzcsMTUgKzEwNzcsMTUgQEAgVEVTVChXS1VzZXJDb250ZW50Q29udHJvbGxlciwgTWVzc2FnZUhh
bmRsZXJBUEkpCiAKICAgICAvLyBSZW1vdmUgMyBmcm9tIHRoZSBjb3JyZWN0IHdvcmxkLCB2ZXJp
ZnkgaXQgaXMgZ29uZSwgYnV0IDQgYW5kIDUgYXJlIHN0aWxsIHRoZXJlLgogICAgIFtbY29uZmln
dXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIHJlbW92ZVNjcmlwdE1lc3NhZ2VIYW5kbGVy
Rm9yTmFtZTpAInRlc3RIYW5kbGVyMyIgY29udGVudFdvcmxkOndvcmxkXTsKLSAgICBbd2ViVmll
dyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6QHsgQCJoYW5kbGVy
IiA6IEAidGVzdEhhbmRsZXIzIiwgQCJhcmciIDogQDEgfSBpbkNvbnRlbnRXb3JsZDp3b3JsZCBj
b21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBb
d2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6QHsgQCJo
YW5kbGVyIiA6IEAidGVzdEhhbmRsZXIzIiwgQCJhcmciIDogQDEgfSBpbkZyYW1lOm5pbCBpbkNv
bnRlbnRXb3JsZDp3b3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJv
ciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwocmVzdWx0KTsKICAgICAgICAgRVhQRUNU
X05PVF9OVUxMKGVycm9yKTsKICAgICB9XTsKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2Ny
aXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhhbmRsZXI0
IiwgQCJhcmciIDogQDEgfSBpbkNvbnRlbnRXb3JsZDp3b3JsZCBjb21wbGV0aW9uSGFuZGxlcjpb
Jl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNK
YXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6QHsgQCJoYW5kbGVyIiA6IEAidGVzdEhh
bmRsZXI0IiwgQCJhcmciIDogQDEgfSBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDp3b3JsZCBj
b21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAg
ICAgRVhQRUNUX05VTEwoZXJyb3IpOwogICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1
YWxUb051bWJlcjpAMV0pOwogICAgIH1dOwotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3Jp
cHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFuZGxlcjUi
LCBAImFyZyIgOiBAMSB9IGluQ29udGVudFdvcmxkOndvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsm
XSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0ph
dmFTY3JpcHQ6ZnVuY3Rpb25Cb2R5IGFyZ3VtZW50czpAeyBAImhhbmRsZXIiIDogQCJ0ZXN0SGFu
ZGxlcjUiLCBAImFyZyIgOiBAMSB9IGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOndvcmxkIGNv
bXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAg
ICBFWFBFQ1RfTlVMTChlcnJvcik7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVh
bFRvTnVtYmVyOkAxXSk7CiAgICAgICAgIGRvbmUgPSB0cnVlOwpAQCAtMTA5NSwxMSArMTA5NSwx
MSBAQCBURVNUKFdLVXNlckNvbnRlbnRDb250cm9sbGVyLCBNZXNzYWdlSGFuZGxlckFQSSkKIAog
ICAgIC8vIFJlbW92ZSAiYWxsIiBpbiB0aGUgY3VzdG9tIHdvcmxkLCB2ZXJpZnkgNCBhbmQgNSBh
cmUgbm93IGdvbmUuCiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0g
cmVtb3ZlQWxsU2NyaXB0TWVzc2FnZUhhbmRsZXJzRnJvbUNvbnRlbnRXb3JsZDp3b3JsZF07Ci0g
ICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7
IEAiaGFuZGxlciIgOiBAInRlc3RIYW5kbGVyNCIsIEAiYXJnIiA6IEAxIH0gaW5Db250ZW50V29y
bGQ6d29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9y
KSB7CisgICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1l
bnRzOkB7IEAiaGFuZGxlciIgOiBAInRlc3RIYW5kbGVyNCIsIEAiYXJnIiA6IEAxIH0gaW5GcmFt
ZTpuaWwgaW5Db250ZW50V29ybGQ6d29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1
bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKHJlc3VsdCk7CiAgICAg
ICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7CiAgICAgfV07Ci0gICAgW3dlYlZpZXcgY2FsbEFz
eW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxlciIgOiBAInRl
c3RIYW5kbGVyNSIsIEAiYXJnIiA6IEAxIH0gaW5Db250ZW50V29ybGQ6d29ybGQgY29tcGxldGlv
bkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcg
Y2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOkB7IEAiaGFuZGxlciIg
OiBAInRlc3RIYW5kbGVyNSIsIEAiYXJnIiA6IEAxIH0gaW5GcmFtZTpuaWwgaW5Db250ZW50V29y
bGQ6d29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9y
KSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKHJlc3VsdCk7CiAgICAgICAgIEVYUEVDVF9OT1RfTlVM
TChlcnJvcik7CiAgICAgICAgIGRvbmUgPSB0cnVlOwpAQCAtMTExOCw3ICsxMTE4LDcgQEAgVEVT
VChXS1VzZXJDb250ZW50Q29udHJvbGxlciwgQXN5bmNTY3JpcHRNZXNzYWdlSGFuZGxlckJhc2lj
UG9zdCkKIAogICAgIGJvb2wgZG9uZSA9IGZhbHNlOwogICAgIE5TU3RyaW5nICpmdW5jdGlvbkJv
ZHkgPSBAInZhciBwID0gd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMudGVzdEhhbmRsZXIu
cG9zdE1lc3NhZ2UoJ0Z1bGZpbGwnKTsgYXdhaXQgcDsgcmV0dXJuIHA7IjsKLSAgICBbd2ViVmll
dyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluQ29udGVu
dFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlk
IHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2Ny
aXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxk
OldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3Vs
dCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwogICAgICAg
ICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOwog
ICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb1N0cmluZzpAIkZ1bGZpbGxlZCEi
XSk7CkBAIC0xMTI5LDcgKzExMjksNyBAQCBURVNUKFdLVXNlckNvbnRlbnRDb250cm9sbGVyLCBB
c3luY1NjcmlwdE1lc3NhZ2VIYW5kbGVyQmFzaWNQb3N0KQogCiAgICAgZG9uZSA9IGZhbHNlOwog
ICAgIGZ1bmN0aW9uQm9keSA9IEAidmFyIHAgPSB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVy
cy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgnUmVqZWN0Jyk7IGF3YWl0IHA7IHJldHVybiBwOyI7
Ci0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRz
Om5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhh
bmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcgY2Fs
bEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5pbCBpbkZyYW1lOm5pbCBp
bkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6
WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKHJl
c3VsdCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKCEhZXJyb3IpOwogICAgICAgICBFWFBFQ1RfVFJV
RShbW2Vycm9yIGRlc2NyaXB0aW9uXSBjb250YWluc1N0cmluZzpAIlJlamVjdGVkISJdKTsKQEAg
LTExNDEsNyArMTE0MSw3IEBAIFRFU1QoV0tVc2VyQ29udGVudENvbnRyb2xsZXIsIEFzeW5jU2Ny
aXB0TWVzc2FnZUhhbmRsZXJCYXNpY1Bvc3QpCiAKICAgICBkb25lID0gZmFsc2U7CiAgICAgZnVu
Y3Rpb25Cb2R5ID0gQCJ2YXIgcCA9IHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RI
YW5kbGVyLnBvc3RNZXNzYWdlKCdVbmRlZmluZWQnKTsgdmFyIHJlc3VsdCA9IGF3YWl0IHA7IHJl
dHVybiByZXN1bHQgPT0gdW5kZWZpbmVkID8gJ1llcycgOiAnTm8nIjsKLSAgICBbd2ViVmlldyBj
YWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluQ29udGVudFdv
cmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJl
c3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0
OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOldL
Q29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwg
TlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwogICAgICAgICBF
WFBFQ1RfVFJVRShbcmVzdWx0IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOwogICAg
ICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb1N0cmluZzpAIlllcyJdKTsKQEAgLTEx
NTMsNyArMTE1Myw3IEBAIFRFU1QoV0tVc2VyQ29udGVudENvbnRyb2xsZXIsIEFzeW5jU2NyaXB0
TWVzc2FnZUhhbmRsZXJCYXNpY1Bvc3QpCiAKICAgICBkb25lID0gZmFsc2U7CiAgICAgZnVuY3Rp
b25Cb2R5ID0gQCJ2YXIgcCA9IHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5k
bGVyLnBvc3RNZXNzYWdlKCdEbyBub3RoaW5nJyk7IGF3YWl0IHA7IHJldHVybiBwOyI7Ci0gICAg
W3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5pbCBp
bkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6
WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcgY2FsbEFzeW5j
SmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRzOm5pbCBpbkZyYW1lOm5pbCBpbkNvbnRl
bnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChp
ZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKHJlc3VsdCk7
CiAgICAgICAgIEVYUEVDVF9UUlVFKCEhZXJyb3IpOwogICAgICAgICBFWFBFQ1RfVFJVRShbW2Vy
cm9yIGRlc2NyaXB0aW9uXSBjb250YWluc1N0cmluZzpAImRpZCBub3QgcmVzcG9uZCB0byB0aGlz
IHBvc3RNZXNzYWdlIl0pOwpAQCAtMTE2NSw3ICsxMTY1LDcgQEAgVEVTVChXS1VzZXJDb250ZW50
Q29udHJvbGxlciwgQXN5bmNTY3JpcHRNZXNzYWdlSGFuZGxlckJhc2ljUG9zdCkKIAogICAgIGRv
bmUgPSBmYWxzZTsKICAgICBmdW5jdGlvbkJvZHkgPSBAInZhciBwID0gd2luZG93LndlYmtpdC5t
ZXNzYWdlSGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1lc3NhZ2UoJ0ludmFsaWQgcmVwbHknKTsg
YXdhaXQgcDsgcmV0dXJuIHA7IjsKLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1
bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBh
Z2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3Ip
IHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVu
dHM6bmlsIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3Js
ZCBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAg
ICAgICAgRVhQRUNUX05VTEwocmVzdWx0KTsKICAgICAgICAgRVhQRUNUX1RSVUUoISFlcnJvcik7
CiAgICAgICAgIEVYUEVDVF9UUlVFKFtbZXJyb3IgZGVzY3JpcHRpb25dIGNvbnRhaW5zU3RyaW5n
OkAidW5hYmxlIHRvIGJlIHNlcmlhbGl6ZWQiXSk7CkBAIC0xMTg3LDcgKzExODcsNyBAQCBURVNU
KFdLVXNlckNvbnRlbnRDb250cm9sbGVyLCBXb3JsZExpZmV0aW1lKQogCiAgICAgLy8gU2V0IGEg
dmFyaWFibGUgaW4gdGhlIHdvcmxkLgogICAgIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgIFt3ZWJW
aWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAInZhciBmb28gPSAnYmFyJyIgaW5Db250ZW50V29ybGQ6
d29ybGQuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVy
cm9yKSB7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAidmFyIGZvbyA9ICdiYXIn
IiBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDp3b3JsZC5nZXQoKSBjb21wbGV0aW9uSGFuZGxl
cjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05VTEwo
ZXJyb3IpOwogICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKQEAgLTExOTYsNyArMTE5Niw3
IEBAIFRFU1QoV0tVc2VyQ29udGVudENvbnRyb2xsZXIsIFdvcmxkTGlmZXRpbWUpCiAKICAgICAv
LyBIYXZlIHRoZSBtZXNzYWdlIGhhbmRsZXIgYm91bmNlIGJhY2sgdGhhdCB2YWx1ZS4KICAgICBO
U1N0cmluZyAqZnVuY3Rpb25Cb2R5ID0gQCJ2YXIgcCA9IHdpbmRvdy53ZWJraXQubWVzc2FnZUhh
bmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKGZvbyk7IGF3YWl0IHA7IHJldHVybiBwOyI7
Ci0gICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpmdW5jdGlvbkJvZHkgYXJndW1lbnRz
Om5pbCBpbkNvbnRlbnRXb3JsZDp3b3JsZC5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlk
IHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2Ny
aXB0OmZ1bmN0aW9uQm9keSBhcmd1bWVudHM6bmlsIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxk
OndvcmxkLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICpl
cnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CiAgICAgICAgIEVYUEVDVF9UUlVF
KFtyZXN1bHQgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7CiAgICAgICAgIEVYUEVD
VF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRvU3RyaW5nOkAiYmFyIl0pOwpAQCAtMTIwOCw3ICsxMjA4
LDcgQEAgVEVTVChXS1VzZXJDb250ZW50Q29udHJvbGxlciwgV29ybGRMaWZldGltZSkKICAgICAv
LyBSZW1vdmUgdGhlIG1lc3NhZ2UgaGFuZGxlciwgd2hpY2ggdXNlZCB0byBjYXVzZSB0aGUgd29y
bGQgdG8gYmUgZGVzdHJveWVkIGluIHRoZSB3ZWIgcHJvY2Vzcy4KICAgICAvLyBCdXQgYnkgZXZh
bHVhdGluZyBKUyBtYWtlIHN1cmUgdGhlIHZhbHVlIGlzIHN0aWxsIHRoZXJlLgogICAgIFtbY29u
ZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIHJlbW92ZUFsbFNjcmlwdE1lc3NhZ2VI
YW5kbGVyc0Zyb21Db250ZW50V29ybGQ6d29ybGQuZ2V0KCldOwotICAgIFt3ZWJWaWV3IGV2YWx1
YXRlSmF2YVNjcmlwdDpAImZvbyIgaW5Db250ZW50V29ybGQ6d29ybGQuZ2V0KCkgY29tcGxldGlv
bkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcg
ZXZhbHVhdGVKYXZhU2NyaXB0OkAiZm9vIiBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDp3b3Js
ZC5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpbJl0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3Ip
IHsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwogICAgICAgICBFWFBFQ1RfVFJVRShbcmVz
dWx0IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOwogICAgICAgICBFWFBFQ1RfVFJV
RShbcmVzdWx0IGlzRXF1YWxUb1N0cmluZzpAImJhciJdKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdFdmFs
dWF0ZUphdmFTY3JpcHQubW0KaW5kZXggN2EyOTdjZmNiMjdiMDU1Y2FjMmQ2MjkzODRkMGY4ZmRh
NzQ4OTQ4My4uZDIzMDNlNjdlOWYzZWMzN2NjZWE2YjdlMDcyMjE3OGU2NWI1NGFkYiAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdFdmFs
dWF0ZUphdmFTY3JpcHQubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0KQEAgLTE1OCw3ICsxNTgsNyBAQCBU
RVNUKFdLV2ViVmlldywgRXZhbHVhdGVKYXZhU2NyaXB0SW5Xb3JsZHMpCiAgICAgaXNEb25lID0g
ZmFsc2U7CiAKICAgICAvLyBWZXJpZnkgdGhhdCB2YWx1ZSBpcyB2aXNpYmxlIHdoZW4gZXZhbHVh
dGluZyBpbiB0aGUgcGFnZVdvcmxkCi0gICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAi
Zm9vIiBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhh
bmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcgZXZhbHVh
dGVKYXZhU2NyaXB0OkAiZm9vIiBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRX
b3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVy
cm9yKSB7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNLaW5kT2ZDbGFzczpbTlNTdHJp
bmcgY2xhc3NdXSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVhbFRvU3RyaW5n
OkAiYmFyIl0pOwogICAgICAgICBpc0RvbmUgPSB0cnVlOwpAQCAtMTY4LDcgKzE2OCw3IEBAIFRF
U1QoV0tXZWJWaWV3LCBFdmFsdWF0ZUphdmFTY3JpcHRJbldvcmxkcykKICAgICBpc0RvbmUgPSBm
YWxzZTsKIAogICAgIC8vIFZlcmlmeSB0aGF0IHZhbHVlIGlzIG5vdCB2aXNpYmxlIHdoZW4gZXZh
bHVhdGluZyBpbiB0aGUgZGVmYXVsdENsaWVudFdvcmxkCi0gICAgW3dlYlZpZXcgZXZhbHVhdGVK
YXZhU2NyaXB0OkAiZm9vIiBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xp
ZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7
CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAiZm9vIiBpbkZyYW1lOm5pbCBpbkNv
bnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGQgY29tcGxldGlvbkhh
bmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxM
KHJlc3VsdCk7CiAgICAgICAgIGlzRG9uZSA9IHRydWU7CiAgICAgICAgIHRlc3RzUGFzc2VkKys7
CkBAIC0xNzcsNyArMTc3LDcgQEAgVEVTVChXS1dlYlZpZXcsIEV2YWx1YXRlSmF2YVNjcmlwdElu
V29ybGRzKQogICAgIGlzRG9uZSA9IGZhbHNlOwogCiAgICAgLy8gVmVyaWZ5IHRoYXQgdmFsdWUg
aXMgdmlzaWJsZSB3aGVuIGNhbGxpbmcgYSBmdW5jdGlvbiBpbiB0aGUgcGFnZVdvcmxkCi0gICAg
W3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpAInJldHVybiBmb28iIGFyZ3VtZW50czpuaWwg
aW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVy
Ol4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGNhbGxBc3luY0ph
dmFTY3JpcHQ6QCJyZXR1cm4gZm9vIiBhcmd1bWVudHM6bmlsIGluRnJhbWU6bmlsIGluQ29udGVu
dFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJl
c3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0tp
bmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3Vs
dCBpc0VxdWFsVG9TdHJpbmc6QCJiYXIiXSk7CiAgICAgICAgIGlzRG9uZSA9IHRydWU7CkBAIC0x
ODcsNyArMTg3LDcgQEAgVEVTVChXS1dlYlZpZXcsIEV2YWx1YXRlSmF2YVNjcmlwdEluV29ybGRz
KQogICAgIGlzRG9uZSA9IGZhbHNlOwogCiAgICAgLy8gVmVyaWZ5IHRoYXQgdmFsdWUgaXMgbm90
IHZpc2libGUgd2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24gaW4gdGhlIGRlZmF1bHRDbGllbnRXb3Js
ZAotICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6QCJyZXR1cm4gZm9vIiBhcmd1bWVu
dHM6bmlsIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3JsZCBj
b21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2Vi
VmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OkAicmV0dXJuIGZvbyIgYXJndW1lbnRzOm5pbCBpbkZy
YW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGQg
Y29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAg
IEVYUEVDVF9OVUxMKHJlc3VsdCk7CiAgICAgICAgIGlzRG9uZSA9IHRydWU7CiAgICAgICAgIHRl
c3RzUGFzc2VkKys7CkBAIC0yMDEsNyArMjAxLDcgQEAgVEVTVChXS1dlYlZpZXcsIEV2YWx1YXRl
SmF2YVNjcmlwdEluV29ybGRzKQogICAgIFt3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24udXNl
ckNvbnRlbnRDb250cm9sbGVyIF9hZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyIG5hbWU6
QCJ0ZXN0SGFuZGxlck5hbWUiIHVzZXJDb250ZW50V29ybGQ6bmFtZWRXb3JsZC5nZXQoKS5fdXNl
ckNvbnRlbnRXb3JsZF07CiAKICAgICAvLyBTZXQgYSB2YXJpYWJsZSB2YWx1ZSBpbiB0aGF0IG5h
bWVkIHdvcmxkLgotICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAInZhciBiYXIgPSAn
YmF6JyIgaW5Db250ZW50V29ybGQ6bmFtZWRXb3JsZC5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpe
KGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFT
Y3JpcHQ6QCJ2YXIgYmFyID0gJ2JheiciIGluRnJhbWU6bmlsIGluQ29udGVudFdvcmxkOm5hbWVk
V29ybGQuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9y
KSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKHJlc3VsdCk7CiAgICAgICAgIGlzRG9uZSA9IHRydWU7
CiAgICAgICAgIHRlc3RzUGFzc2VkKys7CkBAIC0yMTAsNyArMjEwLDcgQEAgVEVTVChXS1dlYlZp
ZXcsIEV2YWx1YXRlSmF2YVNjcmlwdEluV29ybGRzKQogICAgIGlzRG9uZSA9IGZhbHNlOwogCiAg
ICAgLy8gU2V0IGEgZ2xvYmFsIHZhcmlhYmxlIHZhbHVlIGluIHRoYXQgbmFtZWQgd29ybGQgdmlh
IGEgZnVuY3Rpb24gY2FsbC4KLSAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OkAid2lu
ZG93LmJheiA9ICdiYXQnIiBhcmd1bWVudHM6bmlsIGluQ29udGVudFdvcmxkOm5hbWVkV29ybGQu
Z2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7Cisg
ICAgW3dlYlZpZXcgY2FsbEFzeW5jSmF2YVNjcmlwdDpAIndpbmRvdy5iYXogPSAnYmF0JyIgYXJn
dW1lbnRzOm5pbCBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpuYW1lZFdvcmxkLmdldCgpIGNv
bXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBF
WFBFQ1RfTlVMTChyZXN1bHQpOwogICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CiAgICAgICAg
IGlzRG9uZSA9IHRydWU7CkBAIC0yMjMsNyArMjIzLDcgQEAgVEVTVChXS1dlYlZpZXcsIEV2YWx1
YXRlSmF2YVNjcmlwdEluV29ybGRzKQogICAgIFt3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24u
dXNlckNvbnRlbnRDb250cm9sbGVyIF9yZW1vdmVTY3JpcHRNZXNzYWdlSGFuZGxlckZvck5hbWU6
QCJ0ZXN0SGFuZGxlck5hbWUiIHVzZXJDb250ZW50V29ybGQ6bmFtZWRXb3JsZC5nZXQoKS5fdXNl
ckNvbnRlbnRXb3JsZF07CiAKICAgICAvLyBWZXJpZnkgdGhlIHZhcmlhYmxlcyB3ZSBzZXQgYXJl
IHRoZXJlIGluIHRoYXQgbmFtZWQgd29ybGQuCi0gICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2Ny
aXB0OkAiYmFyIiBpbkNvbnRlbnRXb3JsZDpuYW1lZFdvcmxkLmdldCgpIGNvbXBsZXRpb25IYW5k
bGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFt3ZWJWaWV3IGV2YWx1YXRl
SmF2YVNjcmlwdDpAImJhciIgaW5GcmFtZTpuaWwgaW5Db250ZW50V29ybGQ6bmFtZWRXb3JsZC5n
ZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKICAg
ICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11d
KTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9TdHJpbmc6QCJiYXoiXSk7
CiAgICAgICAgIGlzRG9uZSA9IHRydWU7CkBAIC0yMzIsNyArMjMyLDcgQEAgVEVTVChXS1dlYlZp
ZXcsIEV2YWx1YXRlSmF2YVNjcmlwdEluV29ybGRzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmaXNEb25lKTsKICAgICBpc0RvbmUgPSBmYWxzZTsKIAotICAgIFt3ZWJWaWV3IGV2YWx1
YXRlSmF2YVNjcmlwdDpAIndpbmRvdy5iYXoiIGluQ29udGVudFdvcmxkOm5hbWVkV29ybGQuZ2V0
KCkgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAg
W3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2luZG93LmJheiIgaW5GcmFtZTpuaWwgaW5D
b250ZW50V29ybGQ6bmFtZWRXb3JsZC5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3Vs
dCwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0tpbmRP
ZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBp
c0VxdWFsVG9TdHJpbmc6QCJiYXQiXSk7CiAgICAgICAgIGlzRG9uZSA9IHRydWU7CkBAIC0yNDIs
NyArMjQyLDcgQEAgVEVTVChXS1dlYlZpZXcsIEV2YWx1YXRlSmF2YVNjcmlwdEluV29ybGRzKQog
ICAgIGlzRG9uZSA9IGZhbHNlOwogCiAgICAgLy8gVmVyaWZ5IHRoZXkgYXJlbid0IHRoZXJlIGlu
IHRoZSBkZWZhdWx0Q2xpZW50V29ybGQuCi0gICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0
OkAiYmFyIiBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGQg
Y29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dl
YlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAiYmFyIiBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3Js
ZDpXS0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6Xihp
ZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKHJlc3VsdCk7
CiAgICAgICAgIGlzRG9uZSA9IHRydWU7CiAgICAgICAgIHRlc3RzUGFzc2VkKys7CkBAIC0yNTAs
NyArMjUwLDcgQEAgVEVTVChXS1dlYlZpZXcsIEV2YWx1YXRlSmF2YVNjcmlwdEluV29ybGRzKQog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmaXNEb25lKTsKICAgICBpc0RvbmUgPSBmYWxz
ZTsKIAotICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAIndpbmRvdy5iYXoiIGluQ29u
dGVudFdvcmxkOldLQ29udGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3JsZCBjb21wbGV0aW9uSGFu
ZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbd2ViVmlldyBldmFsdWF0
ZUphdmFTY3JpcHQ6QCJ3aW5kb3cuYmF6IiBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0Nv
bnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1
bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKHJlc3VsdCk7CiAgICAg
ICAgIGlzRG9uZSA9IHRydWU7CiAgICAgICAgIHRlc3RzUGFzc2VkKys7CkBAIC0yNTksNyArMjU5
LDcgQEAgVEVTVChXS1dlYlZpZXcsIEV2YWx1YXRlSmF2YVNjcmlwdEluV29ybGRzKQogICAgIGlz
RG9uZSA9IGZhbHNlOwogCiAgICAgLy8gVmVyaWZ5IHRoZXkgYXJlbid0IHRoZXJlIGluIHRoZSBw
YWdlV29ybGQuCi0gICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAiYmFyIiBpbkNvbnRl
bnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6XihpZCBy
ZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0
OkAiYmFyIiBpbkZyYW1lOm5pbCBpbkNvbnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29y
bGQgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAg
ICAgIEVYUEVDVF9OVUxMKHJlc3VsdCk7CiAgICAgICAgIGlzRG9uZSA9IHRydWU7CiAgICAgICAg
IHRlc3RzUGFzc2VkKys7CkBAIC0yNjcsNyArMjY3LDcgQEAgVEVTVChXS1dlYlZpZXcsIEV2YWx1
YXRlSmF2YVNjcmlwdEluV29ybGRzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmaXNE
b25lKTsKICAgICBpc0RvbmUgPSBmYWxzZTsKIAotICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNj
cmlwdDpAIndpbmRvdy5iYXoiIGluQ29udGVudFdvcmxkOldLQ29udGVudFdvcmxkLnBhZ2VXb3Js
ZCBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBb
d2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aW5kb3cuYmF6IiBpbkZyYW1lOm5pbCBpbkNv
bnRlbnRXb3JsZDpXS0NvbnRlbnRXb3JsZC5wYWdlV29ybGQgY29tcGxldGlvbkhhbmRsZXI6Xihp
ZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKHJlc3VsdCk7
CiAgICAgICAgIGlzRG9uZSA9IHRydWU7CiAgICAgICAgIHRlc3RzUGFzc2VkKys7CkBAIC0yODUs
NyArMjg1LDcgQEAgVEVTVChXS1dlYlZpZXcsIEV2YWx1YXRlSmF2YVNjcmlwdEluV29ybGRzV2l0
aEdsb2JhbE9iamVjdEF2YWlsYWJsZSkKICAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6QCI8aHRtbD48L2h0bWw+Il07CiAKICAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZh
bHNlOwotICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAIndpbmRvdy53b3JsZE5hbWUi
IGluQ29udGVudFdvcmxkOltXS0NvbnRlbnRXb3JsZCB3b3JsZFdpdGhOYW1lOkAidGVzdE5hbWUi
XSBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBb
d2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aW5kb3cud29ybGROYW1lIiBpbkZyYW1lOm5p
bCBpbkNvbnRlbnRXb3JsZDpbV0tDb250ZW50V29ybGQgd29ybGRXaXRoTmFtZTpAInRlc3ROYW1l
Il0gY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAg
ICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQsICJ0ZXN0TmFtZSIpOwogICAgICAgICBkb25lID0g
dHJ1ZTsKICAgICB9XTsKQEAgLTQ3MiwzICs0NzIsMzM3IEBAIFRFU1QoV2ViS2l0LCBTUElKYXZh
c2NyaXB0TWFya3VwVnNBUElDb250ZW50SmF2YVNjcmlwdCkKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmRvbmUpOwogCiB9CisKK3N0YXRpYyBOU011dGFibGVTZXQ8V0tGcmFtZUluZm8g
Kj4gKmFsbEZyYW1lczsKK0BpbnRlcmZhY2UgRnJhbWVzTWVzc2FnZUhhbmRsZXIgOiBOU09iamVj
dCA8V0tTY3JpcHRNZXNzYWdlSGFuZGxlcj4KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEZyYW1l
c01lc3NhZ2VIYW5kbGVyCistICh2b2lkKXVzZXJDb250ZW50Q29udHJvbGxlcjooV0tVc2VyQ29u
dGVudENvbnRyb2xsZXIgKil1c2VyQ29udGVudENvbnRyb2xsZXIgZGlkUmVjZWl2ZVNjcmlwdE1l
c3NhZ2U6KFdLU2NyaXB0TWVzc2FnZSAqKW1lc3NhZ2UKK3sKKyAgICBFWFBFQ1RfVFJVRShtZXNz
YWdlLndvcmxkID09IFdLQ29udGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3JsZCk7CisgICAgW2Fs
bEZyYW1lcyBhZGRPYmplY3Q6bWVzc2FnZS5mcmFtZUluZm9dOworfQorQGVuZAorCitzdGF0aWMg
Y29uc3QgY2hhciogZnJhbWVzTWFpblJlc291cmNlID0gUiJGUkFNRVNSRVNPVVJDRSgKK0hlbGxv
IHdvcmxkPGJyPgorPGlmcmFtZSBpZD0ndGhlRnJhbWUnIHNyYz0nb3RoZXJwcm90b2NvbDovL3Rl
c3QvaW5kZXguaHRtbCc+PC9pZnJhbWU+CispRlJBTUVTUkVTT1VSQ0UiOworCitzdGF0aWMgTlNT
dHJpbmcgKnVzZXJTY3JpcHRTb3VyY2UgPSBAIndpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJz
LmZyYW1lc1Rlc3Rlci5wb3N0TWVzc2FnZSgnaGknKTsiOworCisvLyBUaGlzIHRlc3QgbG9hZHMg
YSBkb2N1bWVudCB1bmRlciBvbmUgcHJvdG9jb2wuCisvLyBUaGF0IGRvY3VtZW50IGVtYmVkcyBh
biBpZnJhbWUgdW5kZXIgYSBkaWZmZXJlbnQgcHJvdG9jb2wKKy8vIChlbnN1cmluZyB0aGV5IGNh
bm5vdCBhY2Nlc3MgZWFjaCBvdGhlciB1bmRlciB0aGUgY3Jvc3Mtb3JpZ2luIHJ1bGVzIG9mIHRo
ZSB3ZWIgc2VjdXJpdHkgbW9kZWwpCisvLyBJdCB1c2VzIGEgV0tVc2VyU2NyaXB0IHRvIGNvbGxl
Y3QgYWxsIG9mIHRoZSBmcmFtZXMgb24gdGhlIHBhZ2UsIGFuZCB0aGVuIHVzZXMgbmV3IGZvcm1z
IG9mIGV2YWx1YXRlSmF2YVNjcmlwdAorLy8gYW5kIGNhbGxBc3luY0phdmFTY3JpcHQgdG8gY29u
ZmlybSB0aGF0IGl0IGNhbiBleGVjdXRlIEpTIGRpcmVjdGx5IGluIGVhY2ggb2YgdGhvc2UgZnJh
bWVzLgorVEVTVChFdmFsdWF0ZUphdmFTY3JpcHQsIEphdmFTY3JpcHRJbkZyYW1lc0Zyb21Qb3N0
TWVzc2FnZSkKK3sKKyAgICBhbGxGcmFtZXMgPSBbW05TTXV0YWJsZVNldDxXS0ZyYW1lSW5mbyAq
PiBhbGxvY10gaW5pdF07CisgICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tGcmFt
ZXNNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gdXNlclNjcmlwdCA9IGFk
b3B0TlMoW1tXS1VzZXJTY3JpcHQgYWxsb2NdIGluaXRXaXRoU291cmNlOnVzZXJTY3JpcHRTb3Vy
Y2UgaW5qZWN0aW9uVGltZTpXS1VzZXJTY3JpcHRJbmplY3Rpb25UaW1lQXREb2N1bWVudFN0YXJ0
IGZvck1haW5GcmFtZU9ubHk6Tk8gaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQuZGVmYXVs
dENsaWVudFdvcmxkXSk7CisKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0
aW9uID0gW1tbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
OworICAgIFtjb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciBhZGRVc2VyU2NyaXB0
OnVzZXJTY3JpcHQuZ2V0KCldOworICAgIFtjb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJv
bGxlciBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBjb250ZW50
V29ybGQ6V0tDb250ZW50V29ybGQuZGVmYXVsdENsaWVudFdvcmxkIG5hbWU6QCJmcmFtZXNUZXN0
ZXIiXTsKKworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0VVJMU2NoZW1lSGFuZGxl
ciBhbGxvY10gaW5pdF0pOworICAgIFtoYW5kbGVyIHNldFN0YXJ0VVJMU2NoZW1lVGFza0hhbmRs
ZXI6WyZdKFdLV2ViVmlldyAqLCBpZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAg
aWYgKFt0YXNrLnJlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nIGlzRXF1YWxUb1N0cmluZzpAImZy
YW1lc3Rlc3Q6Ly90ZXN0L2luZGV4Lmh0bWwiXSkgeworICAgICAgICAgICAgTlNEYXRhICpkYXRh
ID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXMiLCBmcmFtZXNNYWluUmVzb3VyY2Vd
IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICAgICAgICAgIFt0
YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVS
TDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRM
ZW5ndGg6ZGF0YS5sZW5ndGggdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxlYXNlXV07Cisg
ICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpkYXRhXTsKKyAgICAgICAgICAgIFt0YXNr
IGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxzZSBpZiAoW3Rhc2sucmVxdWVzdC5VUkwuYWJzb2x1
dGVTdHJpbmcgaXNFcXVhbFRvU3RyaW5nOkAib3RoZXJwcm90b2NvbDovL3Rlc3QvaW5kZXguaHRt
bCJdKSB7CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6W1tbTlNVUkxSZXNw
b25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQv
aHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOjAgdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9y
ZWxlYXNlXV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH1dOworCisgICAgW2NvbmZp
Z3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpA
ImZyYW1lc3Rlc3QiXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhh
bmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAib3RoZXJwcm90b2NvbCJdOworCisgICAgUmV0YWlu
UHRyPFRlc3RXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb25dKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFJlcXVlc3Q6
W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImZyYW1l
c3Rlc3Q6Ly90ZXN0L2luZGV4Lmh0bWwiXV1dOworCisgICAgRVhQRUNUX0VRKGFsbEZyYW1lcy5j
b3VudCwgMnUpOworCisgICAgc3RhdGljIHNpemVfdCBmaW5pc2hlZEZyYW1lcyA9IDA7CisgICAg
c3RhdGljIGJvb2wgaXNEb25lID0gZmFsc2U7CisKKyAgICBmb3IgKFdLRnJhbWVJbmZvICpmcmFt
ZSBpbiBhbGxGcmFtZXMpIHsKKyAgICAgICAgYm9vbCBpc01haW5GcmFtZSA9IGZyYW1lLmlzTWFp
bkZyYW1lOworICAgICAgICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OkAicmV0dXJuIGxv
Y2F0aW9uLmhyZWY7IiBhcmd1bWVudHM6bmlsIGluRnJhbWU6ZnJhbWUgaW5Db250ZW50V29ybGQ6
V0tDb250ZW50V29ybGQuZGVmYXVsdENsaWVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOltpc01h
aW5GcmFtZV0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgICAgIEVYUEVD
VF9OVUxMKGVycm9yKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNLaW5kT2ZD
bGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7CisKKyAgICAgICAgICAgIGlmIChpc01haW5GcmFtZSkK
KyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb1N0cmluZzpAImZy
YW1lc3Rlc3Q6Ly90ZXN0L2luZGV4Lmh0bWwiXSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9TdHJpbmc6QCJvdGhlcnByb3Rv
Y29sOi8vdGVzdC9pbmRleC5odG1sIl0pOworCisgICAgICAgICAgICBpZiAoKytmaW5pc2hlZEZy
YW1lcyA9PSBhbGxGcmFtZXMuY291bnQgKiAyKQorICAgICAgICAgICAgICAgIGlzRG9uZSA9IHRy
dWU7CisgICAgICAgIH1dOworCisKKyAgICAgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0
OkAibG9jYXRpb24uaHJlZjsiIGluRnJhbWU6ZnJhbWUgaW5Db250ZW50V29ybGQ6V0tDb250ZW50
V29ybGQuZGVmYXVsdENsaWVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOltpc01haW5GcmFtZV0g
KGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgICAgIEVYUEVDVF9OVUxMKGVy
cm9yKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNLaW5kT2ZDbGFzczpbTlNT
dHJpbmcgY2xhc3NdXSk7CisKKyAgICAgICAgICAgIGlmIChpc01haW5GcmFtZSkKKyAgICAgICAg
ICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxUb1N0cmluZzpAImZyYW1lc3Rlc3Q6
Ly90ZXN0L2luZGV4Lmh0bWwiXSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
RVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9TdHJpbmc6QCJvdGhlcnByb3RvY29sOi8vdGVz
dC9pbmRleC5odG1sIl0pOworCisgICAgICAgICAgICBpZiAoKytmaW5pc2hlZEZyYW1lcyA9PSBh
bGxGcmFtZXMuY291bnQgKiAyKQorICAgICAgICAgICAgICAgIGlzRG9uZSA9IHRydWU7CisgICAg
ICAgIH1dOworICAgIH0KKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmaXNEb25lKTsK
K30KKworLy8gVGhpcyB0ZXN0IGxvYWRzIGEgZG9jdW1lbnQgdW5kZXIgb25lIHByb3RvY29sLgor
Ly8gVGhhdCBkb2N1bWVudCBlbWJlZHMgYW4gaWZyYW1lIHVuZGVyIGEgZGlmZmVyZW50IHByb3Rv
Y29sCisvLyAoZW5zdXJpbmcgdGhleSBjYW5ub3QgYWNjZXNzIGVhY2ggb3RoZXIgdW5kZXIgdGhl
IGNyb3NzLW9yaWdpbiBydWxlcyBvZiB0aGUgd2ViIHNlY3VyaXR5IG1vZGVsKQorLy8gSXQgY29s
bGVjdHMgYWxsIHRoZSBmcmFtZXMgc2VlbiBkdXJpbmcgbmF2aWdhdGlvbiBkZWxlZ2F0ZSBjYWxs
YmFja3MsIGFuZCB0aGVuIHVzZXMgbmV3IGZvcm1zIG9mIGV2YWx1YXRlSmF2YVNjcmlwdAorLy8g
YW5kIGNhbGxBc3luY0phdmFTY3JpcHQgdG8gY29uZmlybSB0aGF0IGl0IGNhbiBleGVjdXRlIEpT
IGRpcmVjdGx5IGluIGVhY2ggb2YgdGhvc2UgZnJhbWVzLgorVEVTVChFdmFsdWF0ZUphdmFTY3Jp
cHQsIEphdmFTY3JpcHRJbkZyYW1lc0Zyb21OYXZpZ2F0aW9uRGVsZWdhdGUpCit7CisgICAgYWxs
RnJhbWVzID0gW1tOU011dGFibGVTZXQ8V0tGcmFtZUluZm8gKj4gYWxsb2NdIGluaXRdOworCisg
ICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RVUkxTY2hlbWVIYW5kbGVyIGFsbG9jXSBp
bml0XSk7CisgICAgW2hhbmRsZXIgc2V0U3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxlcjpbJl0oV0tX
ZWJWaWV3ICosIGlkPFdLVVJMU2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBpZiAoW3Rhc2su
cmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcgaXNFcXVhbFRvU3RyaW5nOkAiZnJhbWVzdGVzdDov
L3Rlc3QvaW5kZXguaHRtbCJdKSB7CisgICAgICAgICAgICBOU0RhdGEgKmRhdGEgPSBbW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlcyIsIGZyYW1lc01haW5SZXNvdXJjZV0gZGF0YVVzaW5n
RW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVj
ZWl2ZVJlc3BvbnNlOltbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVx
dWVzdC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDpkYXRh
Lmxlbmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdXTsKKyAgICAgICAgICAg
IFt0YXNrIGRpZFJlY2VpdmVEYXRhOmRhdGFdOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNo
XTsKKyAgICAgICAgfSBlbHNlIGlmIChbdGFzay5yZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZyBp
c0VxdWFsVG9TdHJpbmc6QCJvdGhlcnByb3RvY29sOi8vdGVzdC9pbmRleC5odG1sIl0pIHsKKyAg
ICAgICAgICAgIE5TRGF0YSAqZGF0YSA9IFtAIkZvb0JhckJheiIgZGF0YVVzaW5nRW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3Bv
bnNlOltbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwg
TUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDowIHRleHRFbmNvZGlu
Z05hbWU6bmlsXSBhdXRvcmVsZWFzZV1dOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURh
dGE6ZGF0YV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH1dOworCisgICAgV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtbW1dLV2ViVmlld0NvbmZpZ3VyYXRp
b24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxT
Y2hlbWVIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAiZnJhbWVzdGVzdCJdOwor
ICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBmb3JV
UkxTY2hlbWU6QCJvdGhlcnByb3RvY29sIl07CisKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNN
YWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSk7CisK
KyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0TmF2aWdhdGlvbkRl
bGVnYXRlIGFsbG9jXSBpbml0XSk7CisKKyAgICBfX2Jsb2NrIGJvb2wgZGlkRmluaXNoTmF2aWdh
dGlvbiA9IGZhbHNlOworICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgc2V0RGlkRmluaXNoTmF2aWdh
dGlvbjpeKFdLV2ViVmlldyAqLCBXS05hdmlnYXRpb24gKikgeworICAgICAgICBkaWRGaW5pc2hO
YXZpZ2F0aW9uID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgc2V0
RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjpbJl0gKFdLTmF2aWdhdGlvbkFjdGlvbiAq
YWN0aW9uLCB2b2lkICheZGVjaXNpb25IYW5kbGVyKShXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3kp
KSB7CisgICAgICAgIGlmIChhY3Rpb24udGFyZ2V0RnJhbWUpCisgICAgICAgICAgICBbYWxsRnJh
bWVzIGFkZE9iamVjdDphY3Rpb24udGFyZ2V0RnJhbWVdOworCisgICAgICAgIGRlY2lzaW9uSGFu
ZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdyk7CisgICAgfV07CisKKyAgICBbd2Vi
VmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpXTsKKyAg
ICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiZnJhbWVzdGVzdDovL3Rlc3QvaW5kZXguaHRtbCJdXV07CisKKyAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRpZEZpbmlzaE5hdmlnYXRpb24pOworCisgICAg
RVhQRUNUX0VRKGFsbEZyYW1lcy5jb3VudCwgMnUpOworCisgICAgc3RhdGljIHNpemVfdCBmaW5p
c2hlZEZyYW1lcyA9IDA7CisgICAgc3RhdGljIGJvb2wgaXNEb25lID0gZmFsc2U7CisKKyAgICBm
b3IgKFdLRnJhbWVJbmZvICpmcmFtZSBpbiBhbGxGcmFtZXMpIHsKKyAgICAgICAgYm9vbCBpc01h
aW5GcmFtZSA9IGZyYW1lLmlzTWFpbkZyYW1lOworICAgICAgICBbd2ViVmlldyBjYWxsQXN5bmNK
YXZhU2NyaXB0OkAicmV0dXJuIGxvY2F0aW9uLmhyZWY7IiBhcmd1bWVudHM6bmlsIGluRnJhbWU6
ZnJhbWUgaW5Db250ZW50V29ybGQ6V0tDb250ZW50V29ybGQuZGVmYXVsdENsaWVudFdvcmxkIGNv
bXBsZXRpb25IYW5kbGVyOltpc01haW5GcmFtZV0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3Ip
IHsKKyAgICAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKyAgICAgICAgICAgIEVYUEVDVF9U
UlVFKFtyZXN1bHQgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7CisKKyAgICAgICAg
ICAgIGlmIChpc01haW5GcmFtZSkKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0
IGlzRXF1YWxUb1N0cmluZzpAImZyYW1lc3Rlc3Q6Ly90ZXN0L2luZGV4Lmh0bWwiXSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFs
VG9TdHJpbmc6QCJvdGhlcnByb3RvY29sOi8vdGVzdC9pbmRleC5odG1sIl0pOworCisgICAgICAg
ICAgICBpZiAoKytmaW5pc2hlZEZyYW1lcyA9PSBhbGxGcmFtZXMuY291bnQgKiAyKQorICAgICAg
ICAgICAgICAgIGlzRG9uZSA9IHRydWU7CisgICAgICAgIH1dOworCisKKyAgICAgICAgW3dlYlZp
ZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAibG9jYXRpb24uaHJlZjsiIGluRnJhbWU6ZnJhbWUgaW5D
b250ZW50V29ybGQ6V0tDb250ZW50V29ybGQuZGVmYXVsdENsaWVudFdvcmxkIGNvbXBsZXRpb25I
YW5kbGVyOltpc01haW5GcmFtZV0gKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAg
ICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1
bHQgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7CisKKyAgICAgICAgICAgIGlmIChp
c01haW5GcmFtZSkKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGlzRXF1YWxU
b1N0cmluZzpAImZyYW1lc3Rlc3Q6Ly90ZXN0L2luZGV4Lmh0bWwiXSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBpc0VxdWFsVG9TdHJpbmc6
QCJvdGhlcnByb3RvY29sOi8vdGVzdC9pbmRleC5odG1sIl0pOworCisgICAgICAgICAgICBpZiAo
KytmaW5pc2hlZEZyYW1lcyA9PSBhbGxGcmFtZXMuY291bnQgKiAyKQorICAgICAgICAgICAgICAg
IGlzRG9uZSA9IHRydWU7CisgICAgICAgIH1dOworICAgIH0KKworICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmaXNEb25lKTsKK30KKworLy8gVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgZXZh
bHVhdGluZyBKYXZhU2NyaXB0IGluIGEgZnJhbWUgdGhhdCBoYXMgc2luY2UgZ29uZSBtaXNzaW5n
CisvLyBkdWUgdG8gcmVtb3ZhbCBmcm9tIHRoZSBET00gcmVzdWx0cyBpbiBhbiBhcHByb3ByaWF0
ZSBlcnJvcgorVEVTVChFdmFsdWF0ZUphdmFTY3JpcHQsIEphdmFTY3JpcHRJbk1pc3NpbmdGcmFt
ZUVycm9yKQoreworICAgIGFsbEZyYW1lcyA9IFtbTlNNdXRhYmxlU2V0PFdLRnJhbWVJbmZvICo+
IGFsbG9jXSBpbml0XTsKKworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0VVJMU2No
ZW1lSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgIFtoYW5kbGVyIHNldFN0YXJ0VVJMU2NoZW1l
VGFza0hhbmRsZXI6WyZdKFdLV2ViVmlldyAqLCBpZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsK
KyAgICAgICAgaWYgKFt0YXNrLnJlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nIGlzRXF1YWxUb1N0
cmluZzpAImZyYW1lc3Rlc3Q6Ly90ZXN0L2luZGV4Lmh0bWwiXSkgeworICAgICAgICAgICAgTlNE
YXRhICpkYXRhID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXMiLCBmcmFtZXNNYWlu
UmVzb3VyY2VdIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICAg
ICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBp
bml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3Rl
ZENvbnRlbnRMZW5ndGg6ZGF0YS5sZW5ndGggdGV4dEVuY29kaW5nTmFtZTpuaWxdIGF1dG9yZWxl
YXNlXV07CisgICAgICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpkYXRhXTsKKyAgICAgICAg
ICAgIFt0YXNrIGRpZEZpbmlzaF07CisgICAgICAgIH0gZWxzZSBpZiAoW3Rhc2sucmVxdWVzdC5V
UkwuYWJzb2x1dGVTdHJpbmcgaXNFcXVhbFRvU3RyaW5nOkAib3RoZXJwcm90b2NvbDovL3Rlc3Qv
aW5kZXguaHRtbCJdKSB7CisgICAgICAgICAgICBOU0RhdGEgKmRhdGEgPSBbQCJGb29CYXJCYXoi
IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICAgICAgICAgIFt0
YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVS
TDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRM
ZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdXTsKKyAgICAgICAgICAg
IFt0YXNrIGRpZFJlY2VpdmVEYXRhOmRhdGFdOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNo
XTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9XTsKKworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1tX
S1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgW2Nv
bmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVt
ZTpAImZyYW1lc3Rlc3QiXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVy
OmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAib3RoZXJwcm90b2NvbCJdOworCisgICAgUmV0
YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246
Y29uZmlndXJhdGlvbl0pOworCisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBhZG9wdE5T
KFtbVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworCisgICAgX19ibG9jayBi
b29sIGRpZEZpbmlzaE5hdmlnYXRpb24gPSBmYWxzZTsKKyAgICBbbmF2aWdhdGlvbkRlbGVnYXRl
IHNldERpZEZpbmlzaE5hdmlnYXRpb246XihXS1dlYlZpZXcgKiwgV0tOYXZpZ2F0aW9uICopIHsK
KyAgICAgICAgZGlkRmluaXNoTmF2aWdhdGlvbiA9IHRydWU7CisgICAgfV07CisKKyAgICBbbmF2
aWdhdGlvbkRlbGVnYXRlIHNldERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246WyZdIChX
S05hdmlnYXRpb25BY3Rpb24gKmFjdGlvbiwgdm9pZCAoXmRlY2lzaW9uSGFuZGxlcikoV0tOYXZp
Z2F0aW9uQWN0aW9uUG9saWN5KSkgeworICAgICAgICBpZiAoYWN0aW9uLnRhcmdldEZyYW1lKQor
ICAgICAgICAgICAgW2FsbEZyYW1lcyBhZGRPYmplY3Q6YWN0aW9uLnRhcmdldEZyYW1lXTsKKwor
ICAgICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3cpOwor
ICAgIH1dOworCisgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOm5hdmlnYXRpb25E
ZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCBy
ZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImZyYW1lc3Rlc3Q6Ly90ZXN0L2lu
ZGV4Lmh0bWwiXV1dOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkaWRGaW5pc2hO
YXZpZ2F0aW9uKTsKKworICAgIEVYUEVDVF9FUShhbGxGcmFtZXMuY291bnQsIDJ1KTsKKworICAg
IHN0YXRpYyBib29sIGlzRG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNj
cmlwdDpAInZhciBmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aGVGcmFtZScpOyBm
cmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGZyYW1lKTsiIGluRnJhbWU6bmlsIGluQ29udGVu
dFdvcmxkOldLQ29udGVudFdvcmxkLmRlZmF1bHRDbGllbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxl
cjpbXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgICAgICBpc0RvbmUgPSB0cnVl
OworICAgIH1dOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc0RvbmUpOworICAg
IGlzRG9uZSA9IGZhbHNlOworCisgICAgZm9yIChXS0ZyYW1lSW5mbyAqZnJhbWUgaW4gYWxsRnJh
bWVzKSB7CisgICAgICAgIGlmIChmcmFtZS5pc01haW5GcmFtZSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIFt3ZWJWaWV3IGNhbGxBc3luY0phdmFTY3JpcHQ6QCJyZXR1cm4gbG9j
YXRpb24uaHJlZjsiIGFyZ3VtZW50czpuaWwgaW5GcmFtZTpmcmFtZSBpbkNvbnRlbnRXb3JsZDpX
S0NvbnRlbnRXb3JsZC5kZWZhdWx0Q2xpZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6W10gKGlk
IHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShlcnJv
ciA9PSBuaWwpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUoZXJyb3IuZG9tYWluID09IFdLRXJy
b3JEb21haW4pOworICAgICAgICAgICAgRVhQRUNUX1RSVUUoZXJyb3IuY29kZSA9PSBXS0Vycm9y
SmF2YVNjcmlwdEludmFsaWRGcmFtZVRhcmdldCk7CisgICAgICAgICAgICBpc0RvbmUgPSB0cnVl
OworICAgICAgICB9XTsKKyAgICB9CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmlz
RG9uZSk7Cit9CisKKy8vIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGV2YWx1YXRpbmcgSmF2YVNj
cmlwdCBpbiBhIGZyYW1lIGZyb20gdGhlIHByZXZpb3VzIG1haW4gbmF2aWdhdGlvbiByZXN1bHRz
IGluIGFuIGVycm9yCitURVNUKEV2YWx1YXRlSmF2YVNjcmlwdCwgSmF2YVNjcmlwdEluTWlzc2lu
Z0ZyYW1lQWZ0ZXJOYXZpZ2F0aW9uRXJyb3IpCit7CisgICAgYWxsRnJhbWVzID0gW1tOU011dGFi
bGVTZXQ8V0tGcmFtZUluZm8gKj4gYWxsb2NdIGluaXRdOworCisgICAgYXV0byBoYW5kbGVyID0g
YWRvcHROUyhbW1Rlc3RVUkxTY2hlbWVIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2hhbmRs
ZXIgc2V0U3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxlcjpbJl0oV0tXZWJWaWV3ICosIGlkPFdLVVJM
U2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBpZiAoW3Rhc2sucmVxdWVzdC5VUkwuYWJzb2x1
dGVTdHJpbmcgaXNFcXVhbFRvU3RyaW5nOkAiZnJhbWVzdGVzdDovL3Rlc3QvaW5kZXguaHRtbCJd
KSB7CisgICAgICAgICAgICBOU0RhdGEgKmRhdGEgPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIlcyIsIGZyYW1lc01haW5SZXNvdXJjZV0gZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3Ry
aW5nRW5jb2RpbmddOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOltbW05T
VVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6
QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDpkYXRhLmxlbmd0aCB0ZXh0RW5jb2Rp
bmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdXTsKKyAgICAgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVE
YXRhOmRhdGFdOworICAgICAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICAgICAgfSBlbHNl
IGlmIChbdGFzay5yZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZyBpc0VxdWFsVG9TdHJpbmc6QCJv
dGhlcnByb3RvY29sOi8vdGVzdC9pbmRleC5odG1sIl0pIHsKKyAgICAgICAgICAgIE5TRGF0YSAq
ZGF0YSA9IFtAIkZvb0JhckJheiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmddOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOltbW05TVVJMUmVzcG9u
c2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0
bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDowIHRleHRFbmNvZGluZ05hbWU6bmlsXSBhdXRvcmVs
ZWFzZV1dOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6ZGF0YV07CisgICAgICAg
ICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9IGVsc2UgaWYgKFt0YXNrLnJlcXVlc3Qu
VVJMLmFic29sdXRlU3RyaW5nIGlzRXF1YWxUb1N0cmluZzpAImZyYW1lc3Rlc3Q6Ly9pbmRleDIu
aHRtbCJdKSB7CisgICAgICAgICAgICBOU0RhdGEgKmRhdGEgPSBbQCJIaSIgZGF0YVVzaW5nRW5j
b2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVjZWl2
ZVJlc3BvbnNlOltbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVz
dC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDowIHRleHRF
bmNvZGluZ05hbWU6bmlsXSBhdXRvcmVsZWFzZV1dOworICAgICAgICAgICAgW3Rhc2sgZGlkUmVj
ZWl2ZURhdGE6ZGF0YV07CisgICAgICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH1dOworCisgICAg
V0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtbW1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICBbY29uZmlndXJhdGlvbiBz
ZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAiZnJhbWVzdGVz
dCJdOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQo
KSBmb3JVUkxTY2hlbWU6QCJvdGhlcnByb3RvY29sIl07CisKKyAgICBSZXRhaW5QdHI8V0tXZWJW
aWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9u
XSk7CisKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0TmF2aWdh
dGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisKKyAgICBfX2Jsb2NrIGJvb2wgZGlkRmluaXNo
TmF2aWdhdGlvbiA9IGZhbHNlOworICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgc2V0RGlkRmluaXNo
TmF2aWdhdGlvbjpeKFdLV2ViVmlldyAqLCBXS05hdmlnYXRpb24gKikgeworICAgICAgICBkaWRG
aW5pc2hOYXZpZ2F0aW9uID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIFtuYXZpZ2F0aW9uRGVsZWdh
dGUgc2V0RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjpbJl0gKFdLTmF2aWdhdGlvbkFj
dGlvbiAqYWN0aW9uLCB2b2lkICheZGVjaXNpb25IYW5kbGVyKShXS05hdmlnYXRpb25BY3Rpb25Q
b2xpY3kpKSB7CisgICAgICAgIGlmIChhY3Rpb24udGFyZ2V0RnJhbWUpCisgICAgICAgICAgICBb
YWxsRnJhbWVzIGFkZE9iamVjdDphY3Rpb24udGFyZ2V0RnJhbWVdOworCisgICAgICAgIGRlY2lz
aW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdyk7CisgICAgfV07CisKKyAg
ICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgp
XTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJM
OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiZnJhbWVzdGVzdDovL3Rlc3QvaW5kZXguaHRtbCJdXV07
CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRpZEZpbmlzaE5hdmlnYXRpb24pOwor
ICAgIGRpZEZpbmlzaE5hdmlnYXRpb24gPSBmYWxzZTsKKworICAgIEVYUEVDVF9FUShhbGxGcmFt
ZXMuY291bnQsIDJ1KTsKKworICAgIFJldGFpblB0cjxXS0ZyYW1lSW5mbz4gaWZyYW1lOworICAg
IGZvciAoV0tGcmFtZUluZm8gKmZyYW1lIGluIGFsbEZyYW1lcykgeworICAgICAgICBpZiAoZnJh
bWUuaXNNYWluRnJhbWUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWZyYW1lID0g
ZnJhbWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEVYUEVDVF9OT1RfTlVMTChpZnJh
bWUpOworCisgICAgLy8gR2V0IHJpZCBvZiB0aGUgZnJhbWUgYnkgbmF2aWdhdGluZworICAgIFt3
ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVS
TFdpdGhTdHJpbmc6QCJmcmFtZXN0ZXN0Oi8vaW5kZXgyLmh0bWwiXV1dOworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZGlkRmluaXNoTmF2aWdhdGlvbik7CisgICAgZGlkRmluaXNoTmF2
aWdhdGlvbiA9IGZhbHNlOworCisgICAgc3RhdGljIGJvb2wgaXNEb25lID0gZmFsc2U7CisKKyAg
ICBbd2ViVmlldyBjYWxsQXN5bmNKYXZhU2NyaXB0OkAicmV0dXJuIGxvY2F0aW9uLmhyZWY7IiBh
cmd1bWVudHM6bmlsIGluRnJhbWU6aWZyYW1lLmdldCgpIGluQ29udGVudFdvcmxkOldLQ29udGVu
dFdvcmxkLmRlZmF1bHRDbGllbnRXb3JsZCBjb21wbGV0aW9uSGFuZGxlcjpbXSAoaWQgcmVzdWx0
LCBOU0Vycm9yICplcnJvcikgeworICAgICAgICBFWFBFQ1RfRkFMU0UoZXJyb3IgPT0gbmlsKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUoZXJyb3IuZG9tYWluID09IFdLRXJyb3JEb21haW4pOworICAg
ICAgICBFWFBFQ1RfVFJVRShlcnJvci5jb2RlID09IFdLRXJyb3JKYXZhU2NyaXB0SW52YWxpZEZy
YW1lVGFyZ2V0KTsKKyAgICAgICAgaXNEb25lID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmaXNEb25lKTsKKyAgICBpc0RvbmUgPSBmYWxzZTsKK30KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5tbQppbmRleCBlMjM1N2E5YWJk
MzBlZDM3ZjI0N2JkNzQ5NTUyMjVhMzAwNWVlMWU3Li41ODg4OTE4N2U1YzJkNTg2NzBmOTE2OWI4
OWI3ZTEwYWFiNzkyMDRiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rl
c3RXS1dlYlZpZXcubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJW
aWV3Lm1tCkBAIC0xOTgsNyArMTk4LDcgQEAgLSAoaWQpb2JqZWN0QnlDYWxsaW5nQXN5bmNGdW5j
dGlvbjooTlNTdHJpbmcgKilzY3JpcHQgd2l0aEFyZ3VtZW50czooTlNEaWN0aW9uYXIKICAgICAg
ICAgKmVycm9yT3V0ID0gbmlsOwogCiAgICAgUmV0YWluUHRyPGlkPiBldmFsUmVzdWx0OwotICAg
IFtzZWxmIGNhbGxBc3luY0phdmFTY3JpcHQ6c2NyaXB0IGFyZ3VtZW50czphcmd1bWVudHMgaW5D
b250ZW50V29ybGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsm
XSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgIFtzZWxmIGNhbGxBc3luY0phdmFT
Y3JpcHQ6c2NyaXB0IGFyZ3VtZW50czphcmd1bWVudHMgaW5GcmFtZTpuaWwgaW5Db250ZW50V29y
bGQ6V0tDb250ZW50V29ybGQucGFnZVdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVz
dWx0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBldmFsUmVzdWx0ID0gcmVzdWx0OwogICAg
ICAgICBpZiAoZXJyb3JPdXQpCiAgICAgICAgICAgICAqZXJyb3JPdXQgPSBbZXJyb3IgcmV0YWlu
XTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>