<?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>224796</bug_id>
          
          <creation_ts>2021-04-19 19:18:14 -0700</creation_ts>
          <short_desc>Parse `&quot;theme_color&quot;` in web application manifests and pass it along to `-[WKWebView themeColor]`</short_desc>
          <delta_ts>2021-04-23 01:56:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>bdakin</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>david_quesada</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>japhet</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1752096</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-04-19 19:18:14 -0700</bug_when>
    <thetext>https://w3c.github.io/manifest/#theme_color-member</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752101</commentid>
    <comment_count>1</comment_count>
      <attachid>426512</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-04-19 19:31:14 -0700</bug_when>
    <thetext>Created attachment 426512
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752126</commentid>
    <comment_count>2</comment_count>
      <attachid>426517</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-04-19 20:57:43 -0700</bug_when>
    <thetext>Created attachment 426517
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752129</commentid>
    <comment_count>3</comment_count>
      <attachid>426517</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-19 21:45:08 -0700</bug_when>
    <thetext>Comment on attachment 426517
Patch

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

&gt; Source/WebCore/dom/Document.cpp:3857
&gt; +    themeColorChanged();

Would be better to not call themeColorChanged() if m_metaElementThemeColor happens to be equal to the current m_applicationManifestThemeColor, but the new m_metaElementThemeColor is invalid.

An even better way to code this would be to check themeColor() before and after setting m_metaElementThemeColor to see if it changed or not. That way if it’s the same color for a different reason, we would not make a themeColorChanged() call.

&gt; Source/WebCore/dom/Document.cpp:3987
&gt; +    themeColorChanged();

Would be better to call themeColorChanged() only if m_metaElementThemeColor is not valid or doesn&apos;t happen to be equal to m_applicationManifestThemeColor.

An even better way to do this would be to check themeColor() before and after setting m_applicationManifestThemeColor to see if it changed or not. That way if it’s the same color for a different reason, we would not make a themeColorChanged() call.

&gt; Source/WebCore/dom/Document.cpp:3991
&gt; +}
&gt; +
&gt; +
&gt; +#endif // ENABLE(APPLICATION_MANIFEST)

Extra blank line here.

&gt; Source/WebCore/dom/Document.h:920
&gt; +#endif // ENABLE(APPLICATION_MANIFEST)

This comment is not helpful; in a case like this we don’t need to comment each endif (see above). I suggest omitting it.

&gt; Source/WebCore/loader/cache/CachedApplicationManifest.h:43
&gt; +    Optional&lt;struct ApplicationManifest&gt; process(const URL&amp; manifestURL, const URL&amp; documentURL, RefPtr&lt;Document&gt; = nullptr);

Not sure I understand why that argument is a RefPtr&lt;Document&gt; rather than a Document*.

&gt; Source/WebCore/page/ChromeClient.h:235
&gt; +    virtual void pageExtendedBackgroundColorDidChange() const { }

I don’t see the change to the code calling this function.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:38
&gt; +#endif // PLATFORM(IOS_FAMILY)

No need for a comment here.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm:42
&gt; +#endif // PLATFORM(MAC)

No need for a comment here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752364</commentid>
    <comment_count>4</comment_count>
      <attachid>426517</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-04-20 11:58:21 -0700</bug_when>
    <thetext>Comment on attachment 426517
Patch

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

Thanks for the review!

&gt;&gt; Source/WebCore/dom/Document.cpp:3857
&gt;&gt; +    themeColorChanged();
&gt; 
&gt; Would be better to not call themeColorChanged() if m_metaElementThemeColor happens to be equal to the current m_applicationManifestThemeColor, but the new m_metaElementThemeColor is invalid.
&gt; 
&gt; An even better way to code this would be to check themeColor() before and after setting m_metaElementThemeColor to see if it changed or not. That way if it’s the same color for a different reason, we would not make a themeColorChanged() call.

Ha!  I actually had this originally, but thought it would be more efficient to do what I did.  I totally forgot about the case where the color is invalidated.  Great catch!

&gt;&gt; Source/WebCore/loader/cache/CachedApplicationManifest.h:43
&gt;&gt; +    Optional&lt;struct ApplicationManifest&gt; process(const URL&amp; manifestURL, const URL&amp; documentURL, RefPtr&lt;Document&gt; = nullptr);
&gt; 
&gt; Not sure I understand why that argument is a RefPtr&lt;Document&gt; rather than a Document*.

I thought WebKit is making a push to use `Ref`/`RefPtr` instead of raw pointers more often (if not always) now?

&gt;&gt; Source/WebCore/page/ChromeClient.h:235
&gt;&gt; +    virtual void pageExtendedBackgroundColorDidChange() const { }
&gt; 
&gt; I don’t see the change to the code calling this function.

The first is called in `Document::themeColorChanged` (newly split out from the old `Document::processThemeColor`, now renamed `Document::processMetaElementThemeColor`).
The second is called in `RenderLayerCompositor::rootBackgroundColorOrTransparencyChanged`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752392</commentid>
    <comment_count>5</comment_count>
      <attachid>426517</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-20 13:03:04 -0700</bug_when>
    <thetext>Comment on attachment 426517
Patch

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

&gt;&gt;&gt; Source/WebCore/loader/cache/CachedApplicationManifest.h:43
&gt;&gt;&gt; +    Optional&lt;struct ApplicationManifest&gt; process(const URL&amp; manifestURL, const URL&amp; documentURL, RefPtr&lt;Document&gt; = nullptr);
&gt;&gt; 
&gt;&gt; Not sure I understand why that argument is a RefPtr&lt;Document&gt; rather than a Document*.
&gt; 
&gt; I thought WebKit is making a push to use `Ref`/`RefPtr` instead of raw pointers more often (if not always) now?

I believe that the answer to that is for local variables, yes. For function arguments, no. Talk to Ryosuke to find out our overall strategy and let’s make sure this is written down so we all understand it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752414</commentid>
    <comment_count>6</comment_count>
      <attachid>426517</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-04-20 14:14:38 -0700</bug_when>
    <thetext>Comment on attachment 426517
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/loader/cache/CachedApplicationManifest.h:43
&gt;&gt;&gt;&gt; +    Optional&lt;struct ApplicationManifest&gt; process(const URL&amp; manifestURL, const URL&amp; documentURL, RefPtr&lt;Document&gt; = nullptr);
&gt;&gt;&gt; 
&gt;&gt;&gt; Not sure I understand why that argument is a RefPtr&lt;Document&gt; rather than a Document*.
&gt;&gt; 
&gt;&gt; I thought WebKit is making a push to use `Ref`/`RefPtr` instead of raw pointers more often (if not always) now?
&gt; 
&gt; I believe that the answer to that is for local variables, yes. For function arguments, no. Talk to Ryosuke to find out our overall strategy and let’s make sure this is written down so we all understand it.

Had a chat with @Ryosuke Niwa offline and he pointed me to &lt;https://lists.webkit.org/pipermail/webkit-dev/2020-September/031386.html&gt;.  I&apos;ll change this to `Document*`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752423</commentid>
    <comment_count>7</comment_count>
      <attachid>426591</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-04-20 14:26:13 -0700</bug_when>
    <thetext>Created attachment 426591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752525</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-04-20 17:15:06 -0700</bug_when>
    <thetext>Committed r276333 (236813@main): &lt;https://commits.webkit.org/236813@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 426591.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753500</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-23 01:56:02 -0700</bug_when>
    <thetext>&lt;rdar://problem/77062361&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426512</attachid>
            <date>2021-04-19 19:31:14 -0700</date>
            <delta_ts>2021-04-19 20:57:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224796-20210419203113.patch</filename>
            <type>text/plain</type>
            <size>62844</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzOTUxZWY1ZmNhN2QxNTIwOGYzMmM4YWM3MDBlZmYzNDhjNjE1MmQzLi5l
MjcyOGE1MjU5YWU4YTUzMzA0ZDIyMzNhMjFhNTUzN2E3M2JmNzY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTQgQEAKKzIwMjEtMDQtMTkgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgorCisgICAgICAgIFBhcnNlIGB0aGVtZV9jb2xvcmAgaW4gd2ViIGFwcGxpY2F0aW9uIG1hbmlm
ZXN0cyBhbmQgcGFzcyBpdCBhbG9uZyB0byBgLVtXS1dlYlZpZXcgdGhlbWVDb2xvcl1gCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ3OTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvYXBw
bGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbk1hbmlmZXN0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbGljYXRpb25NYW5pZmVzdDo6ZGVjb2RlKToKKyAgICAgICAgQWRkIGBDb2xvciB0aGVtZUNv
bG9yYCBtZW1iZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBw
bGljYXRpb25NYW5pZmVzdFBhcnNlci5oOgorICAgICAgICAqIE1vZHVsZXMvYXBwbGljYXRpb25t
YW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VNYW5pZmVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpsb2dEZXZlbG9w
ZXJXYXJuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6
OnBhcnNlQ29sb3IpOiBBZGRlZC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkQXBwbGlj
YXRpb25NYW5pZmVzdC5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRBcHBsaWNhdGlv
bk1hbmlmZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEFwcGxpY2F0aW9uTWFuaWZl
c3Q6OnByb2Nlc3MpOgorICAgICAgICBQYXNzIGFuIGFjdHVhbCBgRG9jdW1lbnRgIGluc3RlYWQg
b2YgYSBgU2NyaXB0RXhlY3V0aW9uQ29udGV4dGAgc28gdGhhdCB3ZSBjYW4gbm90aWZ5IGl0Cisg
ICAgICAgIHdoZW4gZmluaXNoZWQgcGFyc2luZyB0aGUgSlNPTiAoYERvY3VtZW50Ojpwcm9jZXNz
QXBwbGljYXRpb25NYW5pZmVzdGApLgorCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dGhlbWVDb2xvciBjb25zdCk6CisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcm9jZXNzTWV0YUVs
ZW1lbnRUaGVtZUNvbG9yKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dGhl
bWVDb2xvckNoYW5nZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcm9j
ZXNzQXBwbGljYXRpb25NYW5pZmVzdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnByb2Nlc3NUaGVtZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgVXNlIHRoZSB0aGVtZSBj
b2xvciBmcm9tIGA8bWV0YSBuYW1lPSJ0aGVtZS1jb2xvciI+YCBpZiB2YWxpZCwgZmFsbGluZyBi
YWNrIHRvIHRoZSB0aGVtZQorICAgICAgICBjb2xvciBmcm9tIGB0aGVtZV9jb2xvcmAgaW4gdGhl
IHdlYiBhcHBsaWNhdGlvbiBtYW5pZmVzdCAoaWYgc3BlY2lmaWVkKS4gT25seSBub3RpZnkgdGhl
CisgICAgICAgIFVJUHJvY2VzcyBvZiBjaGFuZ2VzIHRvIGA8bWV0YSBuYW1lPSJ0aGVtZS1jb2xv
ciI+YCBvciB0aGUgYHRoZW1lX2NvbG9yYCBpbiB0aGUgd2ViCisgICAgICAgIGFwcGxpY2F0aW9u
IG1hbmlmZXN0IGlmIHRoZSBuZXcgdmFsdWUgaXMgdGhlIHZhbHVlIHRoYXQgd291bGQgYmUgdXNl
ZC4KKworICAgICAgICAqIGh0bWwvSFRNTE1ldGFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZXRhRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWV0YUVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1ldGFFbGVtZW50Ojpwcm9jZXNzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cm9vdEJhY2tncm91bmRDb2xvck9yVHJhbnNwYXJlbmN5Q2hhbmdlZCk6CisgICAgICAg
IERyaXZlLWJ5OiBSZW5hbWUgYERvY3VtZW50Ojpwcm9jZXNzVGhlbWVDb2xvcmAgdG8gYERvY3Vt
ZW50Ojpwcm9jZXNzTWV0YUVsZW1lbnRUaGVtZUNvbG9yYAorICAgICAgICBzbyB0aGF0IGl0J3Mg
bW9yZSBzcGVjaWZpYyB0byBgPG1ldGEgbmFtZT0idGhlbWUtY29sb3IiPmAuCisKKyAgICAgICAg
KiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Ojp0
aGVtZUNvbG9yQ2hhbmdlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6
OnBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvckRpZENoYW5nZSBjb25zdCk6CisgICAgICAgIERy
aXZlLWJ5OiBSZW1vdmUgdGhlIGBDb2xvcmAgcGFyYW1ldGVyIHNpbmNlIGl0J3Mgbm90IGFjdHVh
bGx5IHVzZWQgaW4gdGhlIFdlYlByb2Nlc3MuCisKIDIwMjEtMDQtMTkgIEFudHRpIEtvaXZpc3Rv
ICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIENTU1ZhbHVlUG9vbCBzaG91bGQgYmUgbm9u
LWNvcHlhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ0NzczMjUzNDRjNTc3OGRjNjQ1MGQ1Y2Q4NDg4ZjU0YzRi
ZjBkOTEuLjI0MzMzYTkyZGRlMThmYzliMjZkY2EzYWU3MjllZWYzZTc3MDQ4MjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjIgQEAKKzIwMjEtMDQtMTkgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBw
bGUuY29tPgorCisgICAgICAgIFBhcnNlIGB0aGVtZV9jb2xvcmAgaW4gd2ViIGFwcGxpY2F0aW9u
IG1hbmlmZXN0cyBhbmQgcGFzcyBpdCBhbG9uZyB0byBgLVtXS1dlYlZpZXcgdGhlbWVDb2xvcl1g
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ3OTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5tbToKKyAgICAgICAgKC1bX1dL
QXBwbGljYXRpb25NYW5pZmVzdCBpbml0V2l0aENvZGVyOl0pOgorICAgICAgICAoLVtfV0tBcHBs
aWNhdGlvbk1hbmlmZXN0IGVuY29kZVdpdGhDb2RlcjpdKToKKyAgICAgICAgKC1bX1dLQXBwbGlj
YXRpb25NYW5pZmVzdCB0aGVtZUNvbG9yXSk6IEFkZGVkLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNocm9tZUNsaWVudDo6dGhlbWVDb2xvckNoYW5nZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJDaHJvbWVDbGllbnQ6OnBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvckRpZENoYW5nZSBj
b25zdCk6CisgICAgICAgIERyaXZlLWJ5OiBSZW1vdmUgdGhlIGBDb2xvcmAgcGFyYW1ldGVyIHNp
bmNlIGl0J3Mgbm90IGFjdHVhbGx5IHVzZWQgaW4gdGhlIFdlYlByb2Nlc3MuCisKIDIwMjEtMDQt
MTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgbW9yZSBH
UFVQcm9jZXNzIHJlbGVhc2UgbG9nZ2luZyB0byBmYWNpbGl0YXRlIGRlYnVnZ2luZwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0
aW9uTWFuaWZlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVz
dC9BcHBsaWNhdGlvbk1hbmlmZXN0LmgKaW5kZXggNDQxYTJkODZhOWFkZGEyNjAyMGUwYzg5NTdj
YmVhMTEzZTc2MTFkZi4uN2JlMWEwZDFkZTMwODE2ODM4ZGM1NzJlNDRlNGU1Mzk1OWNiY2MwYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0Fw
cGxpY2F0aW9uTWFuaWZlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0
aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNp
ZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCiAKKyNpbmNsdWRlICJDb2xvci5oIgogI2lu
Y2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5j
bHVkZSA8d3RmL1VSTC5oPgpAQCAtNDcsNiArNDgsNyBAQCBzdHJ1Y3QgQXBwbGljYXRpb25NYW5p
ZmVzdCB7CiAgICAgVVJMIHNjb3BlOwogICAgIERpc3BsYXkgZGlzcGxheTsKICAgICBVUkwgc3Rh
cnRVUkw7CisgICAgQ29sb3IgdGhlbWVDb2xvcjsKIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8QXBwbGljYXRpb25NYW5pZmVzdD4gZGVjb2RlKERlY29kZXIm
KTsKQEAgLTU1LDcgKzU3LDcgQEAgc3RydWN0IEFwcGxpY2F0aW9uTWFuaWZlc3QgewogdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgQXBwbGljYXRpb25NYW5pZmVzdDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgZW5jb2RlciA8PCBuYW1lIDw8IHNob3J0TmFtZSA8
PCBkZXNjcmlwdGlvbiA8PCBzY29wZSA8PCBkaXNwbGF5IDw8IHN0YXJ0VVJMOworICAgIGVuY29k
ZXIgPDwgbmFtZSA8PCBzaG9ydE5hbWUgPDwgZGVzY3JpcHRpb24gPDwgc2NvcGUgPDwgZGlzcGxh
eSA8PCBzdGFydFVSTCA8PCB0aGVtZUNvbG9yOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgpAQCAtNzUsNiArNzcsOCBAQCBPcHRpb25hbDxBcHBsaWNhdGlvbk1hbmlmZXN0PiBBcHBsaWNh
dGlvbk1hbmlmZXN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zdGFydFVSTCkpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQudGhlbWVDb2xvcikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICByZXR1
cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNh
dGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIu
Y3BwCmluZGV4IGY4OGNhZGE2NjBmMzlhZGVmYTAwNmQwOTVlYzU4N2ZiMjkzNDYyMGYuLjRjYjBk
Zjc3MGNkOGFlZTI1NDdmYWFlMGI1ODBiZTE4ZmNjZTgxZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFy
c2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3Qv
QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAKQEAgLTI4LDE0ICsyOCwxNyBAQAogCiAjaWYg
RU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQogCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ29uc29sZU1lc3NhZ2UuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1BcHBsaWNhdGlvbk1hbmlmZXN0IEFwcGxpY2F0aW9u
TWFuaWZlc3RQYXJzZXI6OnBhcnNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBVUkwmIG1hbmlmZXN0VVJM
LCBjb25zdCBVUkwmIGRvY3VtZW50VVJMKQorQXBwbGljYXRpb25NYW5pZmVzdCBBcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyOjpwYXJzZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYg
c291cmNlLCBjb25zdCBVUkwmIG1hbmlmZXN0VVJMLCBjb25zdCBVUkwmIGRvY3VtZW50VVJMKQog
ewotICAgIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIgcGFyc2VyIHsgJnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQgfTsKKyAgICBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyIHBhcnNlciB7ICZkb2N1
bWVudCB9OwogICAgIHJldHVybiBwYXJzZXIucGFyc2VNYW5pZmVzdChzb3VyY2UsIG1hbmlmZXN0
VVJMLCBkb2N1bWVudFVSTCk7CiB9CiAKQEAgLTQ1LDggKzQ4LDggQEAgQXBwbGljYXRpb25NYW5p
ZmVzdCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZShjb25zdCBTdHJpbmcmIHNvdXJj
ZSwgY29uc3QKICAgICByZXR1cm4gcGFyc2VyLnBhcnNlTWFuaWZlc3Qoc291cmNlLCBtYW5pZmVz
dFVSTCwgZG9jdW1lbnRVUkwpOwogfQogCi1BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpBcHBs
aWNhdGlvbk1hbmlmZXN0UGFyc2VyKFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBjb25z
b2xlQ29udGV4dCkKLSAgICA6IG1fY29uc29sZUNvbnRleHQoY29uc29sZUNvbnRleHQpCitBcHBs
aWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyKFJlZlB0cjxE
b2N1bWVudD4gZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogewogfQogCkBA
IC03NCw2ICs3NywxMCBAQCBBcHBsaWNhdGlvbk1hbmlmZXN0IEFwcGxpY2F0aW9uTWFuaWZlc3RQ
YXJzZXI6OnBhcnNlTWFuaWZlc3QoY29uc3QgU3RyaW5nJiB0ZXh0LAogICAgIHBhcnNlZE1hbmlm
ZXN0LmRlc2NyaXB0aW9uID0gcGFyc2VEZXNjcmlwdGlvbigqbWFuaWZlc3QpOwogICAgIHBhcnNl
ZE1hbmlmZXN0LnNob3J0TmFtZSA9IHBhcnNlU2hvcnROYW1lKCptYW5pZmVzdCk7CiAgICAgcGFy
c2VkTWFuaWZlc3Quc2NvcGUgPSBwYXJzZVNjb3BlKCptYW5pZmVzdCwgZG9jdW1lbnRVUkwsIHBh
cnNlZE1hbmlmZXN0LnN0YXJ0VVJMKTsKKyAgICBwYXJzZWRNYW5pZmVzdC50aGVtZUNvbG9yID0g
cGFyc2VDb2xvcigqbWFuaWZlc3QsICJ0aGVtZV9jb2xvciJfcyk7CisKKyAgICBpZiAobV9kb2N1
bWVudCkKKyAgICAgICAgbV9kb2N1bWVudC0+cHJvY2Vzc0FwcGxpY2F0aW9uTWFuaWZlc3QocGFy
c2VkTWFuaWZlc3QpOwogCiAgICAgcmV0dXJuIHBhcnNlZE1hbmlmZXN0OwogfQpAQCAtOTAsOCAr
OTcsOCBAQCB2b2lkIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OmxvZ01hbmlmZXN0UHJvcGVy
dHlJbnZhbGlkVVJMKGNvbnN0IFN0cmluZyYgcHJvcAogCiB2b2lkIEFwcGxpY2F0aW9uTWFuaWZl
c3RQYXJzZXI6OmxvZ0RldmVsb3Blcldhcm5pbmcoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewot
ICAgIGlmIChtX2NvbnNvbGVDb250ZXh0KQotICAgICAgICBtX2NvbnNvbGVDb250ZXh0LT5hZGRD
b25zb2xlTWVzc2FnZShtYWtlVW5pcXVlPEluc3BlY3Rvcjo6Q29uc29sZU1lc3NhZ2U+KEpTQzo6
TWVzc2FnZVNvdXJjZTo6T3RoZXIsIEpTQzo6TWVzc2FnZVR5cGU6OkxvZywgSlNDOjpNZXNzYWdl
TGV2ZWw6Oldhcm5pbmcsIG1ha2VTdHJpbmcoIlBhcnNpbmcgYXBwbGljYXRpb24gbWFuaWZlc3Qg
Il9zLCBtX21hbmlmZXN0VVJMLnN0cmluZygpLCAiOiAiX3MsIG1lc3NhZ2UpKSk7CisgICAgaWYg
KG1fZG9jdW1lbnQpCisgICAgICAgIG1fZG9jdW1lbnQtPmFkZENvbnNvbGVNZXNzYWdlKG1ha2VV
bmlxdWU8SW5zcGVjdG9yOjpDb25zb2xlTWVzc2FnZT4oSlNDOjpNZXNzYWdlU291cmNlOjpPdGhl
ciwgSlNDOjpNZXNzYWdlVHlwZTo6TG9nLCBKU0M6Ok1lc3NhZ2VMZXZlbDo6V2FybmluZywgbWFr
ZVN0cmluZygiUGFyc2luZyBhcHBsaWNhdGlvbiBtYW5pZmVzdCAiX3MsIG1fbWFuaWZlc3RVUkwu
c3RyaW5nKCksICI6ICJfcywgbWVzc2FnZSkpKTsKIH0KIAogVVJMIEFwcGxpY2F0aW9uTWFuaWZl
c3RQYXJzZXI6OnBhcnNlU3RhcnRVUkwoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCwgY29u
c3QgVVJMJiBkb2N1bWVudFVSTCkKQEAgLTIyOSw2ICsyMzYsMTEgQEAgVVJMIEFwcGxpY2F0aW9u
TWFuaWZlc3RQYXJzZXI6OnBhcnNlU2NvcGUoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCwg
Y29uc3QgVVIKICAgICByZXR1cm4gc2NvcGVVUkw7CiB9CiAKK0NvbG9yIEFwcGxpY2F0aW9uTWFu
aWZlc3RQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCwgY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIENTU1BhcnNlcjo6cGFyc2VD
b2xvcihwYXJzZUdlbmVyaWNTdHJpbmcobWFuaWZlc3QsIHByb3BlcnR5TmFtZSkpOworfQorCiBT
dHJpbmcgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VHZW5lcmljU3RyaW5nKGNvbnN0
IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogewog
ICAgIGF1dG8gdmFsdWUgPSBtYW5pZmVzdC5nZXRWYWx1ZShwcm9wZXJ0eU5hbWUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0
aW9uTWFuaWZlc3RQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25t
YW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmgKaW5kZXggMjI1NDBmNzBkNTY2NWYw
ZDc0MGFlNTRkYzVjZDNmNzAwMmQxZGY2OS4uM2Y5NjJkYmE4MjIxM2UxZjg0NjQ5NzM0NTE3NGY5
NGZmODdhNTlmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlv
bm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5o
CkBAIC0yOCwxOCArMjgsMjAgQEAKICNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCiAK
ICNpbmNsdWRlICJBcHBsaWNhdGlvbk1hbmlmZXN0LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgQ29sb3I7CitjbGFzcyBEb2N1bWVudDsKKwogY2xhc3MgQXBwbGlj
YXRpb25NYW5pZmVzdFBhcnNlciB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IEFwcGxpY2F0aW9uTWFuaWZlc3QgcGFyc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFVSTCYgbWFuaWZlc3RVUkwsIGNvbnN0IFVSTCYgZG9jdW1lbnRVUkwp
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBBcHBsaWNhdGlvbk1hbmlmZXN0IHBhcnNlKERv
Y3VtZW50JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiBtYW5pZmVzdFVSTCwgY29uc3QgVVJM
JiBkb2N1bWVudFVSTCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEFwcGxpY2F0aW9uTWFu
aWZlc3QgcGFyc2UoY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiBtYW5pZmVzdFVSTCwgY29uc3Qg
VVJMJiBkb2N1bWVudFVSTCk7CiAKIHByaXZhdGU6Ci0gICAgQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlcihSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4pOworICAgIEFwcGxpY2F0aW9uTWFu
aWZlc3RQYXJzZXIoUmVmUHRyPERvY3VtZW50Pik7CiAgICAgQXBwbGljYXRpb25NYW5pZmVzdCBw
YXJzZU1hbmlmZXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYpOwogCiAg
ICAgVVJMIHBhcnNlU3RhcnRVUkwoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3QgVVJMJik7CkBA
IC00OSwxMyArNTEsMTQgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgcGFyc2VTaG9ydE5hbWUoY29u
c3QgSlNPTjo6T2JqZWN0Jik7CiAgICAgVVJMIHBhcnNlU2NvcGUoY29uc3QgSlNPTjo6T2JqZWN0
JiwgY29uc3QgVVJMJiwgY29uc3QgVVJMJik7CiAKKyAgICBDb2xvciBwYXJzZUNvbG9yKGNvbnN0
IEpTT046Ok9iamVjdCYsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKICAgICBTdHJpbmcg
cGFyc2VHZW5lcmljU3RyaW5nKGNvbnN0IEpTT046Ok9iamVjdCYsIGNvbnN0IFN0cmluZyYpOwog
CiAgICAgdm9pZCBsb2dNYW5pZmVzdFByb3BlcnR5Tm90QVN0cmluZyhjb25zdCBTdHJpbmcmKTsK
ICAgICB2b2lkIGxvZ01hbmlmZXN0UHJvcGVydHlJbnZhbGlkVVJMKGNvbnN0IFN0cmluZyYpOwog
ICAgIHZvaWQgbG9nRGV2ZWxvcGVyV2FybmluZyhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCi0g
ICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fY29uc29sZUNvbnRleHQ7CisgICAg
UmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIFVSTCBtX21hbmlmZXN0VVJMOwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggYjZjOGFlNDFlZmIzYmRkY2EyNzg1ZWY5ZDUy
ZDhkYzYxZDM5NWYzYi4uYzVlY2Y3NDIwNmY4ZGQwMTk5OWEwYTI5YjE1MzBlMTc3NGYzNjkyZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKIAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJBcHBsaWNh
dGlvbk1hbmlmZXN0LmgiCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkJlZm9yZVVubG9h
ZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCkBAIC0zODQ3LDE4ICszODQ4LDIx
IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVZpZXdwb3J0QXJndW1lbnRzKCkKICAgICB9CiB9CiAK
LXZvaWQgRG9jdW1lbnQ6OnByb2Nlc3NUaGVtZUNvbG9yKGNvbnN0IFN0cmluZyYgdGhlbWVDb2xv
clN0cmluZykKK3ZvaWQgRG9jdW1lbnQ6OnByb2Nlc3NNZXRhRWxlbWVudFRoZW1lQ29sb3IoY29u
c3QgU3RyaW5nJiB0aGVtZUNvbG9yU3RyaW5nKQogewotICAgIGF1dG8gdGhlbWVDb2xvciA9IENT
U1BhcnNlcjo6cGFyc2VDb2xvcih0aGVtZUNvbG9yU3RyaW5nKTsKLSAgICBpZiAodGhlbWVDb2xv
ciA9PSBtX3RoZW1lQ29sb3IpCisgICAgbV9tZXRhRWxlbWVudFRoZW1lQ29sb3IgPSBDU1NQYXJz
ZXI6OnBhcnNlQ29sb3IodGhlbWVDb2xvclN0cmluZyk7CisgICAgaWYgKG1fbWV0YUVsZW1lbnRU
aGVtZUNvbG9yICE9IHRoZW1lQ29sb3IoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV90aGVt
ZUNvbG9yID0gV1RGTW92ZSh0aGVtZUNvbG9yKTsKKyAgICB0aGVtZUNvbG9yQ2hhbmdlZCgpOwor
fQogCit2b2lkIERvY3VtZW50Ojp0aGVtZUNvbG9yQ2hhbmdlZCgpCit7CiAgICAgc2NoZWR1bGVS
ZW5kZXJpbmdVcGRhdGUoeyB9KTsKIAogICAgIGlmIChhdXRvKiBwYWdlID0gdGhpcy0+cGFnZSgp
KQotICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS50aGVtZUNvbG9yQ2hhbmdlZChtX3Ro
ZW1lQ29sb3IpOworICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS50aGVtZUNvbG9yQ2hh
bmdlZCgpOwogCiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgIGlmIChhdXRvKiB2aWV3
ID0gcmVuZGVyVmlldygpKSB7CkBAIC0zOTcyLDYgKzM5NzYsMjAgQEAgdm9pZCBEb2N1bWVudDo6
cHJvY2Vzc1JlZmVycmVyUG9saWN5KGNvbnN0IFN0cmluZyYgcG9saWN5LCBSZWZlcnJlclBvbGlj
eVNvdXJjZQogICAgIHNldFJlZmVycmVyUG9saWN5KHJlZmVycmVyUG9saWN5LnZhbHVlKCkpOwog
fQogCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQorCit2b2lkIERvY3VtZW50Ojpw
cm9jZXNzQXBwbGljYXRpb25NYW5pZmVzdChjb25zdCBBcHBsaWNhdGlvbk1hbmlmZXN0JiBhcHBs
aWNhdGlvbk1hbmlmZXN0KQoreworICAgIG1fYXBwbGljYXRpb25NYW5pZmVzdFRoZW1lQ29sb3Ig
PSBhcHBsaWNhdGlvbk1hbmlmZXN0LnRoZW1lQ29sb3I7CisgICAgaWYgKG1fYXBwbGljYXRpb25N
YW5pZmVzdFRoZW1lQ29sb3IgIT0gdGhlbWVDb2xvcigpKQorICAgICAgICByZXR1cm47CisKKyAg
ICB0aGVtZUNvbG9yQ2hhbmdlZCgpOworfQorCisKKyNlbmRpZiAvLyBFTkFCTEUoQVBQTElDQVRJ
T05fTUFOSUZFU1QpCisKIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMgRG9jdW1lbnQ6OnBy
ZXBhcmVNb3VzZUV2ZW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBMYXlv
dXRQb2ludCYgZG9jdW1lbnRQb2ludCwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkK
IHsKICAgICBpZiAoIWhhc0xpdmluZ1JlbmRlclRyZWUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5k
ZXggYmFlYWZiMTZjMzI3NGQ2MDVjZmNkNWViNWM0YTAwZWIxYTdkMmY4NS4uY2VjNDAxYzVlNzI3
OTc4MDgyNWIzZWVkNzQ2ZDEyZTE0Njc2NzQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTIz
NCw2ICsyMzQsNyBAQCBjbGFzcyBYUGF0aEV4cHJlc3Npb247CiBjbGFzcyBYUGF0aE5TUmVzb2x2
ZXI7CiBjbGFzcyBYUGF0aFJlc3VsdDsKIAorc3RydWN0IEFwcGxpY2F0aW9uTWFuaWZlc3Q7CiBz
dHJ1Y3QgQm91bmRhcnlQb2ludDsKIHN0cnVjdCBIaWdobGlnaHRSYW5nZURhdGE7CiBzdHJ1Y3Qg
SW50ZXJzZWN0aW9uT2JzZXJ2ZXJEYXRhOwpAQCAtNzQwLDcgKzc0MSw3IEBAIHB1YmxpYzoKICAg
ICBTZWNvbmRzIHRpbWVTaW5jZURvY3VtZW50Q3JlYXRpb24oKSBjb25zdCB7IHJldHVybiBNb25v
dG9uaWNUaW1lOjpub3coKSAtIG1fZG9jdW1lbnRDcmVhdGlvblRpbWU7IH07CiAjZW5kaWYKIAot
ICAgIGNvbnN0IENvbG9yJiB0aGVtZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV90aGVtZUNvbG9y
OyB9CisgICAgY29uc3QgQ29sb3ImIHRoZW1lQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX21ldGFF
bGVtZW50VGhlbWVDb2xvci5pc1ZhbGlkKCkgPyBtX21ldGFFbGVtZW50VGhlbWVDb2xvciA6IG1f
YXBwbGljYXRpb25NYW5pZmVzdFRoZW1lQ29sb3I7IH0KIAogICAgIHZvaWQgc2V0VGV4dENvbG9y
KGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX3RleHRDb2xvciA9IGNvbG9yOyB9CiAgICAgY29uc3Qg
Q29sb3ImIHRleHRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENvbG9yOyB9CkBAIC05MDgs
MTIgKzkwOSwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcm9jZXNzRGlzYWJsZWRBZGFwdGF0aW9u
cyhjb25zdCBTdHJpbmcmIGFkYXB0YXRpb25zKTsKICAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0QXJn
dW1lbnRzKCk7CiAgICAgdm9pZCBwcm9jZXNzUmVmZXJyZXJQb2xpY3koY29uc3QgU3RyaW5nJiBw
b2xpY3ksIFJlZmVycmVyUG9saWN5U291cmNlKTsKLSAgICB2b2lkIHByb2Nlc3NUaGVtZUNvbG9y
KGNvbnN0IFN0cmluZyYgdGhlbWVDb2xvcik7CisgICAgdm9pZCBwcm9jZXNzTWV0YUVsZW1lbnRU
aGVtZUNvbG9yKGNvbnN0IFN0cmluZyYgdGhlbWVDb2xvcik7CiAKICNpZiBFTkFCTEUoREFSS19N
T0RFX0NTUykKICAgICB2b2lkIHByb2Nlc3NDb2xvclNjaGVtZShjb25zdCBTdHJpbmcmIGNvbG9y
U2NoZW1lKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQorICAg
IHZvaWQgcHJvY2Vzc0FwcGxpY2F0aW9uTWFuaWZlc3QoY29uc3QgQXBwbGljYXRpb25NYW5pZmVz
dCYpOworI2VuZGlmIC8vIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKKwogICAgIC8vIFJl
dHVybnMgdGhlIG93bmluZyBlbGVtZW50IGluIHRoZSBwYXJlbnQgZG9jdW1lbnQuCiAgICAgLy8g
UmV0dXJucyBudWxscHRyIGlmIHRoaXMgaXMgdGhlIHRvcCBsZXZlbCBkb2N1bWVudC4KICAgICBX
RUJDT1JFX0VYUE9SVCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCgpIGNvbnN0
OwpAQCAtMTY2OSw2ICsxNjc0LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVRpdGxlKGNv
bnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mKTsKICAgICB2b2lkIHVwZGF0ZUJhc2VVUkwoKTsKIAor
ICAgIHZvaWQgdGhlbWVDb2xvckNoYW5nZWQoKTsKKwogICAgIHZvaWQgaW52YWxpZGF0ZUFjY2Vz
c0tleUNhY2hlU2xvd0Nhc2UoKTsKICAgICB2b2lkIGJ1aWxkQWNjZXNzS2V5Q2FjaGUoKTsKIApA
QCAtMTc4OSw3ICsxNzk2LDkgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGb3Jt
Q29udHJvbGxlcj4gbV9mb3JtQ29udHJvbGxlcjsKIAotICAgIENvbG9yIG1fdGhlbWVDb2xvcjsK
KyAgICBDb2xvciBtX21ldGFFbGVtZW50VGhlbWVDb2xvcjsKKyAgICBDb2xvciBtX2FwcGxpY2F0
aW9uTWFuaWZlc3RUaGVtZUNvbG9yOworCiAgICAgQ29sb3IgbV90ZXh0Q29sb3IgeyBDb2xvcjo6
YmxhY2sgfTsKICAgICBDb2xvciBtX2xpbmtDb2xvcjsKICAgICBDb2xvciBtX3Zpc2l0ZWRMaW5r
Q29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRhRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRhRWxlbWVudC5jcHAKaW5kZXggZDNjYzE0
N2E3MmI0MDliMzhmYjdiMzdiMTcxZDIzMzYxM2UxNjQzNS4uYzg5Y2Y4NTU3ZjYzNWQ2MDg1OTI3
MjJhMWE3NjM0ZTM2Nzg3MDE1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWV0YUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50
LmNwcApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIEhUTUxNZXRhRWxlbWVudDo6YXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaQogICAgIEhUTUxF
bGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSwgcmVhc29u
KTsKIAogICAgIGlmIChuYW1lID09IG5hbWVBdHRyICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKG9sZFZhbHVlLCAidGhlbWUtY29sb3IiKSAmJiAhZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UobmV3VmFsdWUsICJ0aGVtZS1jb2xvciIpKQotICAgICAgICBkb2N1bWVudCgpLnBy
b2Nlc3NUaGVtZUNvbG9yKGVtcHR5U3RyaW5nKCkpOworICAgICAgICBkb2N1bWVudCgpLnByb2Nl
c3NNZXRhRWxlbWVudFRoZW1lQ29sb3IoZW1wdHlTdHJpbmcoKSk7CiB9CiAKIHZvaWQgSFRNTE1l
dGFFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25z
dCBBdG9tU3RyaW5nJiB2YWx1ZSkKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBIVE1MTWV0YUVsZW1l
bnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5l
ck5vZGUKICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3RvcihyZW1vdmFsVHlwZSwg
b2xkUGFyZW50T2ZSZW1vdmVkVHJlZSk7CiAKICAgICBpZiAoIWlzQ29ubmVjdGVkKCkgJiYgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSgpLCAidGhlbWUtY29sb3IiKSkKLSAgICAg
ICAgb2xkUGFyZW50T2ZSZW1vdmVkVHJlZS5kb2N1bWVudCgpLnByb2Nlc3NUaGVtZUNvbG9yKGVt
cHR5U3RyaW5nKCkpOworICAgICAgICBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLmRvY3VtZW50KCku
cHJvY2Vzc01ldGFFbGVtZW50VGhlbWVDb2xvcihlbXB0eVN0cmluZygpKTsKIH0KIAogdm9pZCBI
VE1MTWV0YUVsZW1lbnQ6OnByb2Nlc3MoKQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgSFRNTE1l
dGFFbGVtZW50Ojpwcm9jZXNzKCkKICAgICAgICAgZG9jdW1lbnQoKS5wcm9jZXNzQ29sb3JTY2hl
bWUoY29udGVudFZhbHVlKTsKICNlbmRpZgogICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKG5hbWUoKSwgInRoZW1lLWNvbG9yIikpCi0gICAgICAgIGRvY3VtZW50KCku
cHJvY2Vzc1RoZW1lQ29sb3IoY29udGVudFZhbHVlKTsKKyAgICAgICAgZG9jdW1lbnQoKS5wcm9j
ZXNzTWV0YUVsZW1lbnRUaGVtZUNvbG9yKGNvbnRlbnRWYWx1ZSk7CiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1l
KCksICJmb3JtYXQtZGV0ZWN0aW9uIikpCiAgICAgICAgIGRvY3VtZW50KCkucHJvY2Vzc0Zvcm1h
dERldGVjdGlvbihjb250ZW50VmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZEFwcGxpY2F0aW9uTWFuaWZlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZEFwcGxpY2F0aW9uTWFuaWZlc3QuY3BwCmluZGV4IDAyYjllZDI2
YmE2YTlhMzg5N2I1ZWMxNGQwMjYwZTQ3Y2U0MWJhZDQuLjFhNmMyZGQ1NjdmNjQyZDQ1YTAxYzRh
MjI3NzcwNDhiZmViNzE1NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRBcHBsaWNhdGlvbk1hbmlmZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkQXBwbGljYXRpb25NYW5pZmVzdC5jcHAKQEAgLTU5LDEyICs1OSwxMiBA
QCBTdHJpbmcgQ2FjaGVkQXBwbGljYXRpb25NYW5pZmVzdDo6ZW5jb2RpbmcoKSBjb25zdAogICAg
IHJldHVybiBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpOwogfQogCi1PcHRpb25hbDxBcHBs
aWNhdGlvbk1hbmlmZXN0PiBDYWNoZWRBcHBsaWNhdGlvbk1hbmlmZXN0Ojpwcm9jZXNzKGNvbnN0
IFVSTCYgbWFuaWZlc3RVUkwsIGNvbnN0IFVSTCYgZG9jdW1lbnRVUkwsIFJlZlB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0PiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorT3B0aW9uYWw8QXBwbGlj
YXRpb25NYW5pZmVzdD4gQ2FjaGVkQXBwbGljYXRpb25NYW5pZmVzdDo6cHJvY2Vzcyhjb25zdCBV
UkwmIG1hbmlmZXN0VVJMLCBjb25zdCBVUkwmIGRvY3VtZW50VVJMLCBSZWZQdHI8RG9jdW1lbnQ+
IGRvY3VtZW50KQogewogICAgIGlmICghbV90ZXh0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQotICAgICAgICByZXR1cm4gQXBw
bGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2UoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsICpt
X3RleHQsIG1hbmlmZXN0VVJMLCBkb2N1bWVudFVSTCk7CisgICAgaWYgKGRvY3VtZW50KQorICAg
ICAgICByZXR1cm4gQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2UoKmRvY3VtZW50LCAq
bV90ZXh0LCBtYW5pZmVzdFVSTCwgZG9jdW1lbnRVUkwpOwogICAgIHJldHVybiBBcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyOjpwYXJzZSgqbV90ZXh0LCBtYW5pZmVzdFVSTCwgZG9jdW1lbnRVUkwp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQXBw
bGljYXRpb25NYW5pZmVzdC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEFw
cGxpY2F0aW9uTWFuaWZlc3QuaAppbmRleCA1ZWFjMTBlMjJmNWMwNTgwNzY0NjFkZTQ1OGExNTkx
OTA0YWRmZjljLi5kMjc2ZjQxMzFkMjY0NTU1OTE1MThiNTRlZGZkMzEyMzEwNjU5YTU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQXBwbGljYXRpb25NYW5p
ZmVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRBcHBsaWNhdGlv
bk1hbmlmZXN0LmgKQEAgLTMzLDE0ICszMywxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIFRl
eHRSZXNvdXJjZURlY29kZXI7CiAKIGNsYXNzIENhY2hlZEFwcGxpY2F0aW9uTWFuaWZlc3QgZmlu
YWwgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UgewogcHVibGljOgogICAgIENhY2hlZEFwcGxpY2F0
aW9uTWFuaWZlc3QoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0IFBBTDo6U2Vzc2lvbklE
JiwgY29uc3QgQ29va2llSmFyKik7CiAKLSAgICBPcHRpb25hbDxzdHJ1Y3QgQXBwbGljYXRpb25N
YW5pZmVzdD4gcHJvY2Vzcyhjb25zdCBVUkwmIG1hbmlmZXN0VVJMLCBjb25zdCBVUkwmIGRvY3Vt
ZW50VVJMLCBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gPSBudWxscHRyKTsKKyAgICBP
cHRpb25hbDxzdHJ1Y3QgQXBwbGljYXRpb25NYW5pZmVzdD4gcHJvY2Vzcyhjb25zdCBVUkwmIG1h
bmlmZXN0VVJMLCBjb25zdCBVUkwmIGRvY3VtZW50VVJMLCBSZWZQdHI8RG9jdW1lbnQ+ID0gbnVs
bHB0cik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlcios
IGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKaW5kZXggZGY0YzljMWY4NGVjYTIwZTdiMWZiZDM3YzE0MzhjNWUwYWJiMGQ1OS4u
Y2YxNmFlNmVhNDc1YmJmYzZiNTllNDQzMjc0NGIzOTUwYjgxYTA4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZUNsaWVudC5oCkBAIC0yMzEsOCArMjMxLDggQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBDb2xvciB1bmRlcmxheUNvbG9yKCkgY29uc3QgeyByZXR1cm4gQ29sb3IoKTsgfQogCi0gICAg
dmlydHVhbCB2b2lkIHRoZW1lQ29sb3JDaGFuZ2VkKENvbG9yKSBjb25zdCB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yRGlkQ2hhbmdlKENvbG9yKSBjb25z
dCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDb2xvckNoYW5nZWQoKSBjb25zdCB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yRGlkQ2hhbmdlKCkgY29u
c3QgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lJiwg
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIERhdGFiYXNlRGV0YWlscykgPSAwOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmlu
ZGV4IGU1MmFhNzljM2E1ODBkZjYyOGMyOGJlY2MyOWQzMzBkN2ZlNjEzYTYuLjE3NDYzNjNiM2Vl
Y2M3MWI2ZGNiNDkyZTIzNTBiZjMwYzNkYjcwMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC00MDA4LDcgKzQwMDgsNyBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cm9vdEJhY2tncm91bmRDb2xvck9yVHJhbnNw
YXJlbmN5Q2hhbmdlZCgpCiAgICAgbV9yb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IgPSBleHRl
bmRlZEJhY2tncm91bmRDb2xvcjsKICAgICAKICAgICBpZiAoZXh0ZW5kZWRCYWNrZ3JvdW5kQ29s
b3JDaGFuZ2VkKSB7Ci0gICAgICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5wYWdlRXh0ZW5k
ZWRCYWNrZ3JvdW5kQ29sb3JEaWRDaGFuZ2UobV9yb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3Ip
OworICAgICAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkucGFnZUV4dGVuZGVkQmFja2dyb3Vu
ZENvbG9yRGlkQ2hhbmdlKCk7CiAgICAgICAgIAogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykK
ICAgICAgICAgdXBkYXRlTGF5ZXJGb3JPdmVyaGFuZ0FyZWFzQmFja2dyb3VuZENvbG9yKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRp
b25NYW5pZmVzdC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxp
Y2F0aW9uTWFuaWZlc3QuaAppbmRleCBiY2U4NDY2OTY2YmQ3MTRjNTg1YjEyOTZiZjY1ZDk1MjQ4
MWQyZjJlLi45OGFlNmUzZDAyOTk0MzY1ZjM0ZTQ1YTIxYmNkM2QxNTRiMDgyYjEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5p
ZmVzdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNh
dGlvbk1hbmlmZXN0LmgKQEAgLTQ1LDYgKzQ1LDEyIEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNv
cygxMC4xMy40KSwgaW9zKDExLjMpKQogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBj
b3B5KSBOU1VSTCAqc3RhcnRVUkw7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIF9X
S0FwcGxpY2F0aW9uTWFuaWZlc3REaXNwbGF5TW9kZSBkaXNwbGF5TW9kZTsKIAorI2lmIFRBUkdF
VF9PU19JUEhPTkUKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgbnVsbGFibGUsIGNv
cHkpIFVJQ29sb3IgKnRoZW1lQ29sb3IgV0tfQVBJX0FWQUlMQUJMRShpb3MoV0tfSU9TX1RCQSkp
OworI2Vsc2UKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgbnVsbGFibGUsIGNvcHkp
IE5TQ29sb3IgKnRoZW1lQ29sb3IgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSk7
CisjZW5kaWYKKwogKyAoX1dLQXBwbGljYXRpb25NYW5pZmVzdCAqKWFwcGxpY2F0aW9uTWFuaWZl
c3RGcm9tSlNPTjooTlNTdHJpbmcgKilqc29uIG1hbmlmZXN0VVJMOihudWxsYWJsZSBOU1VSTCAq
KW1hbmlmZXN0VVJMIGRvY3VtZW50VVJMOihudWxsYWJsZSBOU1VSTCAqKWRvY3VtZW50VVJMOwog
CiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
QXBwbGljYXRpb25NYW5pZmVzdC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0Lm1tCmluZGV4IGY1NDA3ODMyNWRhMWJmZmY4ZDU3YWUw
NjYyMzc4NzM0NTEzZWE5NjUuLjE1MTkxM2RhOWI0OTZiZTg0N2JiOWI3M2RkZDVjNzBmNWNhYWJl
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBs
aWNhdGlvbk1hbmlmZXN0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0Lm1tCkBAIC0yNiw4ICsyNiwxMSBAQAogI2ltcG9ydCAi
Y29uZmlnLmgiCiAjaW1wb3J0ICJfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SW50ZXJuYWwuaCIKIAor
I2ltcG9ydCAiQ29jb2FDb2xvci5oIgogI2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlm
ZXN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29sb3JDb2NvYS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgogCiBAaW1wbGVtZW50YXRpb24g
X1dLQXBwbGljYXRpb25NYW5pZmVzdApAQCAtNDcsNiArNTAsNyBAQCAtIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb2RlcjooTlNDb2RlciAqKWFEZWNvZGVyCiAgICAgTlNVUkwgKnNjb3BlVVJMID0g
W2FEZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNzXSBmb3JLZXk6QCJzY29w
ZSJdOwogICAgIE5TSW50ZWdlciBkaXNwbGF5ID0gW2FEZWNvZGVyIGRlY29kZUludGVnZXJGb3JL
ZXk6QCJkaXNwbGF5Il07CiAgICAgTlNVUkwgKnN0YXJ0VVJMID0gW2FEZWNvZGVyIGRlY29kZU9i
amVjdE9mQ2xhc3M6W05TVVJMIGNsYXNzXSBmb3JLZXk6QCJzdGFydF91cmwiXTsKKyAgICBDb2Nv
YUNvbG9yICp0aGVtZUNvbG9yID0gW2FEZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W0NvY29h
Q29sb3IgY2xhc3NdIGZvcktleTpAInRoZW1lX2NvbG9yIl07CiAKICAgICBXZWJDb3JlOjpBcHBs
aWNhdGlvbk1hbmlmZXN0IGNvcmVBcHBsaWNhdGlvbk1hbmlmZXN0IHsKICAgICAgICAgV1RGOjpT
dHJpbmcobmFtZSksCkBAIC01NCw3ICs1OCw4IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
ZGVyOihOU0NvZGVyICopYURlY29kZXIKICAgICAgICAgV1RGOjpTdHJpbmcoZGVzY3JpcHRpb24p
LAogICAgICAgICBVUkwoc2NvcGVVUkwpLAogICAgICAgICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpB
cHBsaWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5PihkaXNwbGF5KSwKLSAgICAgICAgVVJMKHN0YXJ0
VVJMKQorICAgICAgICBVUkwoc3RhcnRVUkwpLAorICAgICAgICBXZWJDb3JlOjpDb2xvcih0aGVt
ZUNvbG9yLkNHQ29sb3IpLAogICAgIH07CiAKICAgICBBUEk6Ok9iamVjdDo6Y29uc3RydWN0SW5X
cmFwcGVyPEFQSTo6QXBwbGljYXRpb25NYW5pZmVzdD4oc2VsZiwgV1RGTW92ZShjb3JlQXBwbGlj
YXRpb25NYW5pZmVzdCkpOwpAQCAtODAsNiArODUsNyBAQCAtICh2b2lkKWVuY29kZVdpdGhDb2Rl
cjooTlNDb2RlciAqKWFDb2RlcgogICAgIFthQ29kZXIgZW5jb2RlT2JqZWN0OnNlbGYuc2NvcGUg
Zm9yS2V5OkAic2NvcGUiXTsKICAgICBbYUNvZGVyIGVuY29kZUludGVnZXI6c3RhdGljX2Nhc3Q8
TlNJbnRlZ2VyPihfYXBwbGljYXRpb25NYW5pZmVzdC0+YXBwbGljYXRpb25NYW5pZmVzdCgpLmRp
c3BsYXkpIGZvcktleTpAImRpc3BsYXkiXTsKICAgICBbYUNvZGVyIGVuY29kZU9iamVjdDpzZWxm
LnN0YXJ0VVJMIGZvcktleTpAInN0YXJ0X3VybCJdOworICAgIFthQ29kZXIgZW5jb2RlT2JqZWN0
OnNlbGYudGhlbWVDb2xvciBmb3JLZXk6QCJ0aGVtZV9jb2xvciJdOwogfQogCiArIChfV0tBcHBs
aWNhdGlvbk1hbmlmZXN0ICopYXBwbGljYXRpb25NYW5pZmVzdEZyb21KU09OOihOU1N0cmluZyAq
KWpzb24gbWFuaWZlc3RVUkw6KE5TVVJMICopbWFuaWZlc3RVUkwgZG9jdW1lbnRVUkw6KE5TVVJM
ICopZG9jdW1lbnRVUkwKQEAgLTEyMyw2ICsxMjksMTEgQEAgLSAoTlNVUkwgKilzdGFydFVSTAog
ICAgIHJldHVybiBfYXBwbGljYXRpb25NYW5pZmVzdC0+YXBwbGljYXRpb25NYW5pZmVzdCgpLnN0
YXJ0VVJMOwogfQogCistIChDb2NvYUNvbG9yICopdGhlbWVDb2xvcgoreworICAgIHJldHVybiBX
ZWJDb3JlOjpwbGF0Zm9ybUNvbG9yKF9hcHBsaWNhdGlvbk1hbmlmZXN0LT5hcHBsaWNhdGlvbk1h
bmlmZXN0KCkudGhlbWVDb2xvcik7Cit9CisKIC0gKF9XS0FwcGxpY2F0aW9uTWFuaWZlc3REaXNw
bGF5TW9kZSlkaXNwbGF5TW9kZQogewogICAgIHN3aXRjaCAoX2FwcGxpY2F0aW9uTWFuaWZlc3Qt
PmFwcGxpY2F0aW9uTWFuaWZlc3QoKS5kaXNwbGF5KSB7CkBAIC0xODYsNiArMTk3LDExIEBAIC0g
KE5TVVJMICopc3RhcnRVUkwKICAgICByZXR1cm4gbmlsOwogfQogCistIChDb2NvYUNvbG9yICop
dGhlbWVDb2xvcgoreworICAgIHJldHVybiBuaWw7Cit9CisKIC0gKF9XS0FwcGxpY2F0aW9uTWFu
aWZlc3REaXNwbGF5TW9kZSlkaXNwbGF5TW9kZQogewogICAgIHJldHVybiBfV0tBcHBsaWNhdGlv
bk1hbmlmZXN0RGlzcGxheU1vZGVCcm93c2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAppbmRleCBiNmFmNjc4OTk2NjA2MTg2YzVjMzIxMTA3OGQ2MDA2YjQ3NGY1MTkxLi5i
NWNkOTk2YzBkOTExMWU2MmFlNzA3MTBmMWQ5YTU4ZTY4NDc5NzIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNjU0LDcgKzY1NCw3IEBAIHB1YmxpYzoKICAgICBm
bG9hdCB0b3BDb250ZW50SW5zZXQoKSBjb25zdCB7IHJldHVybiBtX3RvcENvbnRlbnRJbnNldDsg
fQogICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0KGZsb2F0KTsKIAotICAgIC8vIENvcnJlc3Bv
bmRzIHRvIHRoZSB3ZWIgY29udGVudCdzIGA8bWV0YSBuYW1lPSJ0aGVtZS1jb2xvciIgY29udGVu
dD0iLi4uIj5gLgorICAgIC8vIENvcnJlc3BvbmRzIHRvIHRoZSB3ZWIgY29udGVudCdzIGA8bWV0
YSBuYW1lPSJ0aGVtZS1jb2xvciI+YCBvciBhcHBsaWNhdGlvbiBtYW5pZmVzdCdzIGAidGhlbWVf
Y29sb3IiYC4KICAgICBXZWJDb3JlOjpDb2xvciB0aGVtZUNvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV90aGVtZUNvbG9yOyB9CiAKICAgICBXZWJDb3JlOjpDb2xvciB1bmRlcmxheUNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV91bmRlcmxheUNvbG9yOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4
IDVmYzg1NTYzNzYwZWE3NWVjMTJlZDE0YTllMjczNjgxZjI1MWMwOTMuLjcwYzZlYWI4MWY5YTJk
MThiMmE4ZDhlOTZkYTk1YTk4YjgxYzU5NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC0x
MTU0LDEyICsxMTU0LDEyIEBAIENvbG9yIFdlYkNocm9tZUNsaWVudDo6dW5kZXJsYXlDb2xvcigp
IGNvbnN0CiAgICAgcmV0dXJuIG1fcGFnZS51bmRlcmxheUNvbG9yKCk7CiB9CiAKLXZvaWQgV2Vi
Q2hyb21lQ2xpZW50Ojp0aGVtZUNvbG9yQ2hhbmdlZChDb2xvciAvKiB0aGVtZUNvbG9yICovKSBj
b25zdAordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnRoZW1lQ29sb3JDaGFuZ2VkKCkgY29uc3QKIHsK
ICAgICBtX3BhZ2UudGhlbWVDb2xvckNoYW5nZWQoKTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGll
bnQ6OnBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvckRpZENoYW5nZShDb2xvciAvKiBiYWNrZ3Jv
dW5kQ29sb3IgKi8pIGNvbnN0Cit2b2lkIFdlYkNocm9tZUNsaWVudDo6cGFnZUV4dGVuZGVkQmFj
a2dyb3VuZENvbG9yRGlkQ2hhbmdlKCkgY29uc3QKIHsKICAgICBtX3BhZ2UucGFnZUV4dGVuZGVk
QmFja2dyb3VuZENvbG9yRGlkQ2hhbmdlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggNTZj
ZjZiOTJlZDlhMTAzNmRiZDdkMDY0ODYzYzRlNzY4MTQyY2RlZi4uMWUzNjBlMzBkMzRhNjEyNTAy
ZGFiN2IyMTZiMzZlOGUxYjNiOTYzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMzI4LDggKzMy
OCw4IEBAIHByaXZhdGU6CiAKICAgICBXZWJDb3JlOjpDb2xvciB1bmRlcmxheUNvbG9yKCkgY29u
c3QgZmluYWw7CiAKLSAgICB2b2lkIHRoZW1lQ29sb3JDaGFuZ2VkKFdlYkNvcmU6OkNvbG9yKSBj
b25zdCBmaW5hbDsKLSAgICB2b2lkIHBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvckRpZENoYW5n
ZShXZWJDb3JlOjpDb2xvcikgY29uc3QgZmluYWw7CisgICAgdm9pZCB0aGVtZUNvbG9yQ2hhbmdl
ZCgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yRGlk
Q2hhbmdlKCkgY29uc3QgZmluYWw7CiAgICAgCiAgICAgdm9pZCB3aGVlbEV2ZW50SGFuZGxlcnND
aGFuZ2VkKGJvb2wpIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29s
cy9DaGFuZ2VMb2cKaW5kZXggMDk2NjViODM0NWJiNDIxOTg3MWQ5ZmVkMDIyMDFmNzVmYjM3ZDAy
NC4uOGRhZjY0M2QyMGJlMjBlYmRmYWNmNDI0YzVjMTdiZDQzN2M4Yzc5ZCAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisy
MDIxLTA0LTE5ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBQ
YXJzZSBgdGhlbWVfY29sb3JgIGluIHdlYiBhcHBsaWNhdGlvbiBtYW5pZmVzdHMgYW5kIHBhc3Mg
aXQgYWxvbmcgdG8gYC1bV0tXZWJWaWV3IHRoZW1lQ29sb3JdYAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0Nzk2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChBcHBsaWNhdGlvbk1h
bmlmZXN0UGFyc2VyVGVzdDo6dGVzdFRoZW1lQ29sb3IpOiBBZGRlZC4KKyAgICAgICAgKFRFU1Rf
Ri5BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdC5UaGVtZUNvbG9yKTogQWRkZWQuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0FwcGxpY2F0aW9uTWFuaWZl
c3QubW06CisgICAgICAgIChURVNULkFwcGxpY2F0aW9uTWFuaWZlc3RCYXNpYyk6CisgICAgICAg
IChURVNULkFwcGxpY2F0aW9uTWFuaWZlc3RDb2RpbmcpOgorCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdUaGVtZUNvbG9yLm1tOiBSZW5hbWVkIGZy
b20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9IVE1MTWV0YVRoZW1lQ29s
b3IubW0uCisgICAgICAgIChURVNULldLV2ViVmlld1RoZW1lQ29sb3IuQXBwbGljYXRpb25NYW5p
ZmVzdCk6CisgICAgICAgIChURVNULldLV2ViVmlld1RoZW1lQ29sb3IuTWV0YUVsZW1lbnRPdmVy
cmlkZXNBcHBsaWNhdGlvbk1hbmlmZXN0KToKKyAgICAgICAgUmVuYW1lIHRoaXMgZmlsZSBub3cg
dGhhdCBpdCBhbHNvIGRlYWxzIHdpdGggd2ViIGFwcGxpY2F0aW9uIG1hbmlmZXN0IChpbiBhZGRp
dGlvbiB0byBgPG1ldGEgbmFtZT0idGhlbWUtY29sb3IiPmApLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjEt
MDQtMTkgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIFdQRSBNaW5pYnJvd3NlciBidWlsZCB3YXJuaW5nIGZpeC4KZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggNDMxM2E5NzhmMGQ1MjUwOTFiM2EyYTI2N2MwMzI4MTFiMGM3ZDc1
YS4uMjRiZjdhODVkNjlkMWM1MTU4YjY2NzYxOGUzMGRmMWE3ODI2N2Q5NCAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTg2Niw3ICs4NjYsNyBAQAogCQk5M0Y3RTg2RjE0REM4RTVDMDBDODRB
OTkgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0RnJhbWVzX0J1bmRsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y3RTg2RTE0REM4
RTVCMDBDODRBOTkgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0RnJhbWVzX0J1bmRs
ZS5jcHAgKi87IH07CiAJCTk1MEU0Q0MxMjUyRTc1MjQwMDcxNjU5RiAvKiBpT1NTdHlsdXNTdXBw
b3J0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTUw
RTRDQzAyNTJFNzUyMzAwNzE2NTlGIC8qIGlPU1N0eWx1c1N1cHBvcnQubW0gKi87IH07CiAJCTk1
M0FCQjM1MjVDMEQ2ODIwMDRDOEI3MyAvKiBQYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NTNBQkIzNDI1
QzBENjgxMDA0QzhCNzMgLyogUGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yLm1tICovOyB9Owot
CQk5NUE1MjQ5NTI1ODFBMTBEMDA0NjFGRTkgLyogSFRNTE1ldGFUaGVtZUNvbG9yLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTVBNTI0OTQyNTgxQTEw
RDAwNDYxRkU5IC8qIEhUTUxNZXRhVGhlbWVDb2xvci5tbSAqLzsgfTsKKwkJOTVBNTI0OTUyNTgx
QTEwRDAwNDYxRkU5IC8qIFdLV2ViVmlld1RoZW1lQ29sb3IubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NUE1MjQ5NDI1ODFBMTBEMDA0NjFGRTkgLyog
V0tXZWJWaWV3VGhlbWVDb2xvci5tbSAqLzsgfTsKIAkJOTVCNkIzQjcyNTFFQkYyRjAwRkM0Mzgy
IC8qIE1lZGlhRG9jdW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5NUI2QjNCNjI1MUVCRjJGMDBGQzQzODIgLyogTWVkaWFEb2N1bWVudC5tbSAq
LzsgfTsKIAkJOTk4NEZBQ0MxQ0ZGQUY2MDAwOEQxOThDIC8qIFdLV2ViVmlld1RleHRJbnB1dC5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5ODRGQUNB
MUNGRkFFRUUwMDhEMTk4QyAvKiBXS1dlYlZpZXdUZXh0SW5wdXQubW0gKi87IH07CiAJCTk5ODRG
QUNFMUNGRkIwOTAwMDhEMTk4QyAvKiBlZGl0YWJsZS1ib2R5Lmh0bWwgaW4gQ29weSBSZXNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk4NEZBQ0QxQ0ZGQjAzODAw
OEQxOThDIC8qIGVkaXRhYmxlLWJvZHkuaHRtbCAqLzsgfTsKQEAgLTI1NTMsNyArMjU1Myw3IEBA
CiAJCTkzRjdFODZFMTREQzhFNUIwMEM4NEE5OSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlM
YXlvdXRGcmFtZXNfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZyYW1lc19CdW5kbGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NTBFNENDMDI1MkU3NTIzMDA3MTY1OUYgLyogaU9T
U3R5bHVzU3VwcG9ydC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IGlPU1N0eWx1c1N1cHBvcnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk1M0FC
QjM0MjVDMEQ2ODEwMDRDOEI3MyAvKiBQYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQYWdlRXh0ZW5kZWRCYWNrZ3Jv
dW5kQ29sb3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk1QTUyNDk0MjU4MUEx
MEQwMDQ2MUZFOSAvKiBIVE1MTWV0YVRoZW1lQ29sb3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBIVE1MTWV0YVRoZW1lQ29sb3IubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTk1QTUyNDk0MjU4MUExMEQwMDQ2MUZFOSAvKiBXS1dlYlZpZXdUaGVt
ZUNvbG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJW
aWV3VGhlbWVDb2xvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTVCNkIzQjYy
NTFFQkYyRjAwRkM0MzgyIC8qIE1lZGlhRG9jdW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBNZWRpYURvY3VtZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5OTg0RkFDQTFDRkZBRUVFMDA4RDE5OEMgLyogV0tXZWJWaWV3VGV4dElucHV0
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3VGV4
dElucHV0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTg0RkFDRDFDRkZCMDM4
MDA4RDE5OEMgLyogZWRpdGFibGUtYm9keS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRo
ID0gImVkaXRhYmxlLWJvZHkuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0z
NDA4LDcgKzM0MDgsNiBAQAogCQkJCTA3RTFGNkEwMUZGQzNBMDgwMDk2QzdFQyAvKiBHZXREaXNw
bGF5TWVkaWEubW0gKi8sCiAJCQkJMkRBREYyNjIyMUNCOEYzMjAwM0QzRTNBIC8qIEdldFJlc291
cmNlRGF0YS5tbSAqLywKIAkJCQk0NjVFMjgwNjI1NUIyQTY5MDA2M0E3ODcgLyogR1BVUHJvY2Vz
cy5tbSAqLywKLQkJCQk5NUE1MjQ5NDI1ODFBMTBEMDA0NjFGRTkgLyogSFRNTE1ldGFUaGVtZUNv
bG9yLm1tICovLAogCQkJCTUxQUYyM0RFMUVGMUEzNzIwMDcyRjI4MSAvKiBJY29uTG9hZGluZ0Rl
bGVnYXRlLm1tICovLAogCQkJCUVCMjMwRDNFMjQ1RTcyNjMwMEM2NkFEMSAvKiBJREJDaGVja3Bv
aW50V0FMLm1tICovLAogCQkJCTUxMDQ3Nzc1MUQyOThFMDMwMDk3NDdFQiAvKiBJREJEZWxldGVS
ZWNvdmVyeS5tbSAqLywKQEAgLTM2MDcsNiArMzYwNiw3IEBACiAJCQkJOTNGNTZEQTgxRTVGOTE4
MTAwM0VERTg0IC8qIFdLV2ViVmlld1NuYXBzaG90Lm1tICovLAogCQkJCUNEN0Y4OURCMjJBODZD
REEwMEQ2ODNBRSAvKiBXS1dlYlZpZXdTdXNwZW5kQWxsTWVkaWFQbGF5YmFjay5tbSAqLywKIAkJ
CQk5OTg0RkFDQTFDRkZBRUVFMDA4RDE5OEMgLyogV0tXZWJWaWV3VGV4dElucHV0Lm1tICovLAor
CQkJCTk1QTUyNDk0MjU4MUExMEQwMDQ2MUZFOSAvKiBXS1dlYlZpZXdUaGVtZUNvbG9yLm1tICov
LAogCQkJKTsKIAkJCW5hbWUgPSAiV2ViS2l0IENvY29hIjsKIAkJCXBhdGggPSBXZWJLaXRDb2Nv
YTsKQEAgLTU0MjksNyArNTQyOSw2IEBACiAJCQkJN0NDRTdFRkExQTQxMUFFNjAwNDQ3QzRDIC8q
IEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUMx
MUE0MTFBN0UwMDQ0N0M0QyAvKiBIVE1MQ29sbGVjdGlvbk5hbWVkSXRlbS5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDQ0U3RUMyMUE0MTFBN0UwMDQ0N0M0QyAvKiBIVE1MRm9ybUNvbGxlY3Rpb25O
YW1lZEl0ZW0ubW0gaW4gU291cmNlcyAqLywKLQkJCQk5NUE1MjQ5NTI1ODFBMTBEMDA0NjFGRTkg
LyogSFRNTE1ldGFUaGVtZUNvbG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0UwNTAxRDBB
NjQxODAwRkVCQ0YzIC8qIEhUTUxQYXJzZXJJZGlvbXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NUNBMURFQzgxRjcxRjcwMTAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0NkZBMkZFRTIzODQ2Q0E1MDAwQ0NCMEMgLyogSFRUUEhlYWRlck1hcC5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTU4MjksNiArNTgyOCw3IEBACiAJCQkJOTNGNTZEQTkxRTVGOTE5
RDAwM0VERTg0IC8qIFdLV2ViVmlld1NuYXBzaG90Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q3
Rjg5REMyMkE4NkNEQTAwRDY4M0FFIC8qIFdLV2ViVmlld1N1c3BlbmRBbGxNZWRpYVBsYXliYWNr
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTk4NEZBQ0MxQ0ZGQUY2MDAwOEQxOThDIC8qIFdLV2Vi
Vmlld1RleHRJbnB1dC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTk1QTUyNDk1MjU4MUExMEQwMDQ2
MUZFOSAvKiBXS1dlYlZpZXdUaGVtZUNvbG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M3NEM4
RkEyMkRGQkE5NjAwREEyREFCIC8qIFdURlN0cmluZ1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDMTREMzA0NjI0QjRDM0JBMDA0ODAzODcgLyogWFBDRW5kcG9pbnQubW0gaW4gU291
cmNlcyAqLywKIAkJCQk5QzY0REMzMjFENzYxOThBMDA0QjU5OEUgLyogWW91VHViZVBsdWdpblJl
cGxhY2VtZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3Bw
CmluZGV4IGUwZTViYjUyODM3MTYwMWY3NGNiYzA4YTIzZTU0MjUyN2E0ZDAzNzAuLmMzOTk2NTQ0
NjUyMDM2YjQ1ZWU2YzQ5NTc1MzFkNzJjMzg0ODFjMzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlci5jcHAKQEAgLTEyNyw2ICsxMjcsMTMgQEAgcHVibGljOgogICAgICAgICB0ZXN0U2NvcGUo
cmF3SlNPTiwgU3RyaW5nKCksIGV4cGVjdGVkVmFsdWUpOwogICAgIH0KIAorICAgIHZvaWQgdGVz
dFRoZW1lQ29sb3IoY29uc3QgU3RyaW5nJiByYXdKU09OLCBjb25zdCBDb2xvciYgZXhwZWN0ZWRW
YWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8gbWFuaWZlc3QgPSBwYXJzZVRvcExldmVsUHJvcGVy
dHkoInRoZW1lX2NvbG9yIiwgcmF3SlNPTik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBtYW5pZmVz
dC50aGVtZUNvbG9yOworICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRWYWx1ZSwgdmFsdWUpOwor
ICAgIH0KKwogfTsKIAogc3RhdGljIHZvaWQgYXNzZXJ0TWFuaWZlc3RIYXNEZWZhdWx0VmFsdWVz
KGNvbnN0IFVSTCYgbWFuaWZlc3RVUkwsIGNvbnN0IFVSTCYgZG9jdW1lbnRVUkwsIGNvbnN0IEFw
cGxpY2F0aW9uTWFuaWZlc3QmIG1hbmlmZXN0KQpAQCAtMjg5LDYgKzI5NiwyNiBAQCBURVNUX0Yo
QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlclRlc3QsIFNjb3BlKQogICAgIHRlc3RTY29wZSgiXCJo
dHRwczovL2V4YW1wbGUuY29tL290aGVyXCIiLCBTdHJpbmcoImh0dHBzOi8vZXhhbXBsZS5jb20v
b3RoZXIvc3RhcnQtdXJsIiksICJodHRwczovL2V4YW1wbGUuY29tL290aGVyIik7CiB9CiAKK1RF
U1RfRihBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdCwgVGhlbWVDb2xvcikKK3sKKyAgICB0
ZXN0VGhlbWVDb2xvcigiMTIzIiwgQ29sb3IoKSk7CisgICAgdGVzdFRoZW1lQ29sb3IoIm51bGwi
LCBDb2xvcigpKTsKKyAgICB0ZXN0VGhlbWVDb2xvcigidHJ1ZSIsIENvbG9yKCkpOworICAgIHRl
c3RUaGVtZUNvbG9yKCJ7IH0iLCBDb2xvcigpKTsKKyAgICB0ZXN0VGhlbWVDb2xvcigiWyBdIiwg
Q29sb3IoKSk7CisgICAgdGVzdFRoZW1lQ29sb3IoIlwiXCIiLCBDb2xvcigpKTsKKyAgICB0ZXN0
VGhlbWVDb2xvcigiXCJnYXJiYWdlIHN0cmluZ1wiIiwgQ29sb3IoKSk7CisKKyAgICB0ZXN0VGhl
bWVDb2xvcigiXCJyZWRcIiIsIENvbG9yOjpyZWQpOworICAgIHRlc3RUaGVtZUNvbG9yKCJcIiNm
MDBcIiIsIENvbG9yOjpyZWQpOworICAgIHRlc3RUaGVtZUNvbG9yKCJcIiNmZjAwMDBcIiIsIENv
bG9yOjpyZWQpOworICAgIHRlc3RUaGVtZUNvbG9yKCJcIiNmZjAwMDBmZlwiIiwgQ29sb3I6OnJl
ZCk7CisgICAgdGVzdFRoZW1lQ29sb3IoIlwicmdiKDI1NSwgMCwgMClcIiIsIENvbG9yOjpyZWQp
OworICAgIHRlc3RUaGVtZUNvbG9yKCJcInJnYmEoMjU1LCAwLCAwLCAxKVwiIiwgQ29sb3I6OnJl
ZCk7CisgICAgdGVzdFRoZW1lQ29sb3IoIlwiaHNsKDAsIDEwMCUsIDUwJSlcIiIsIENvbG9yOjpy
ZWQpOworICAgIHRlc3RUaGVtZUNvbG9yKCJcImhzbGEoMCwgMTAwJSwgNTAlLCAxKVwiIiwgQ29s
b3I6OnJlZCk7Cit9CisKIFRFU1RfRihBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdCwgV2hp
dGVzcGFjZSkKIHsKICAgICBhdXRvIG1hbmlmZXN0ID0gcGFyc2VTdHJpbmcoIiAgeyBcIm5hbWVc
IjogXCJQQVNTXCIgfVxuIl9zKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvQXBwbGljYXRpb25NYW5pZmVzdC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvQXBwbGljYXRpb25NYW5pZmVzdC5tbQppbmRleCBiNWNkOGE2
NjM1YmNlZTU2OGUwZjI4NzYxMzkxN2FjMTRiNThkMDlmLi5hMjQ3M2I2MmIwZmVmNDk2ZmYzMWNh
MjIxNzQ1NjE1YTRhMmMyMGZiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0FwcGxpY2F0aW9uTWFuaWZlc3QubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9BcHBsaWNhdGlvbk1hbmlmZXN0Lm1tCkBAIC0zNyw5ICsz
NywxMSBAQAogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKK2NvbnN0ZXhwciBDR0Zsb2F0
IHJlZENvbG9yQ29tcG9uZW50c1s0XSA9IHsgMSwgMCwgMCwgMSB9OworCiBURVNUKFdlYktpdCwg
QXBwbGljYXRpb25NYW5pZmVzdENvZGluZykKIHsKLSAgICBhdXRvIGpzb25TdHJpbmcgPSBAInsg
XCJuYW1lXCI6IFwiVGVzdE5hbWVcIiwgXCJzaG9ydF9uYW1lXCI6IFwiVGVzdFNob3J0TmFtZVwi
LCBcImRlc2NyaXB0aW9uXCI6IFwiVGVzdERlc2NyaXB0aW9uXCIsIFwic2NvcGVcIjogXCJodHRw
czovL3Rlc3QuY29tL2FwcFwiLCBcInN0YXJ0X3VybFwiOiBcImh0dHBzOi8vdGVzdC5jb20vYXBw
L2luZGV4Lmh0bWxcIiwgXCJkaXNwbGF5XCI6IFwibWluaW1hbC11aVwiIH0iOworICAgIGF1dG8g
anNvblN0cmluZyA9IEAieyBcIm5hbWVcIjogXCJUZXN0TmFtZVwiLCBcInNob3J0X25hbWVcIjog
XCJUZXN0U2hvcnROYW1lXCIsIFwiZGVzY3JpcHRpb25cIjogXCJUZXN0RGVzY3JpcHRpb25cIiwg
XCJzY29wZVwiOiBcImh0dHBzOi8vdGVzdC5jb20vYXBwXCIsIFwic3RhcnRfdXJsXCI6IFwiaHR0
cHM6Ly90ZXN0LmNvbS9hcHAvaW5kZXguaHRtbFwiLCBcImRpc3BsYXlcIjogXCJtaW5pbWFsLXVp
XCIsIFwidGhlbWVfY29sb3JcIjogXCJyZWRcIiB9IjsKICAgICBSZXRhaW5QdHI8X1dLQXBwbGlj
YXRpb25NYW5pZmVzdD4gbWFuaWZlc3QgeyBbX1dLQXBwbGljYXRpb25NYW5pZmVzdCBhcHBsaWNh
dGlvbk1hbmlmZXN0RnJvbUpTT046anNvblN0cmluZyBtYW5pZmVzdFVSTDpbTlNVUkwgVVJMV2l0
aFN0cmluZzpAImh0dHBzOi8vdGVzdC5jb20vbWFuaWZlc3QuanNvbiJdIGRvY3VtZW50VVJMOltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly90ZXN0LmNvbS8iXV0gfTsKIAogICAgIE5TRGF0
YSAqZGF0YSA9IFtOU0tleWVkQXJjaGl2ZXIgYXJjaGl2ZWREYXRhV2l0aFJvb3RPYmplY3Q6bWFu
aWZlc3QuZ2V0KCkgcmVxdWlyaW5nU2VjdXJlQ29kaW5nOllFUyBlcnJvcjpudWxscHRyXTsKQEAg
LTUyLDYgKzU0LDEwIEBAIFRFU1QoV2ViS2l0LCBBcHBsaWNhdGlvbk1hbmlmZXN0Q29kaW5nKQog
ICAgIEVYUEVDVF9TVFJFUSgiaHR0cHM6Ly90ZXN0LmNvbS9hcHAiLCBtYW5pZmVzdC5nZXQoKS5z
Y29wZS5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKICAgICBFWFBFQ1RfU1RSRVEoImh0dHBz
Oi8vdGVzdC5jb20vYXBwL2luZGV4Lmh0bWwiLCBtYW5pZmVzdC5nZXQoKS5zdGFydFVSTC5hYnNv
bHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKICAgICBFWFBFQ1RfRVEoX1dLQXBwbGljYXRpb25NYW5p
ZmVzdERpc3BsYXlNb2RlTWluaW1hbFVJLCAgbWFuaWZlc3QuZ2V0KCkuZGlzcGxheU1vZGUpOwor
CisgICAgYXV0byBzUkdCQ29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0
aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0IpKTsKKyAgICBhdXRvIHJlZENvbG9yID0gYWRvcHRDRihD
R0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlLmdldCgpLCByZWRDb2xvckNvbXBvbmVudHMpKTsK
KyAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKG1hbmlmZXN0LmdldCgpLnRoZW1l
Q29sb3IuQ0dDb2xvciwgcmVkQ29sb3IuZ2V0KCkpKTsKIH0KIAogVEVTVChXZWJLaXQsIEFwcGxp
Y2F0aW9uTWFuaWZlc3RCYXNpYykKQEAgLTkwLDYgKzk2LDcgQEAgVEVTVChXZWJLaXQsIEFwcGxp
Y2F0aW9uTWFuaWZlc3RCYXNpYykKICAgICAgICAgQCJkZXNjcmlwdGlvbiI6IEAiSGVsbG8uIiwK
ICAgICAgICAgQCJzdGFydF91cmwiOiBAImh0dHA6Ly9leGFtcGxlLmNvbS9hcHAvc3RhcnQiLAog
ICAgICAgICBAInNjb3BlIjogQCJodHRwOi8vZXhhbXBsZS5jb20vYXBwIiwKKyAgICAgICAgQCJ0
aGVtZV9jb2xvciI6IEAicmVkIiwKICAgICB9OwogICAgIE5TU3RyaW5nICpodG1sU3RyaW5nID0g
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8bGluayByZWw9XCJtYW5pZmVzdFwiIGhyZWY9
XCJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtODtiYXNlNjQsJUBcIj4iLCBbW05TSlNPTlNl
cmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0Om1hbmlmZXN0T2JqZWN0IG9wdGlvbnM6MCBl
cnJvcjpuaWxdIGJhc2U2NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9uczowXV07CiAgICAgW3dlYlZp
ZXcgbG9hZEhUTUxTdHJpbmc6aHRtbFN0cmluZyBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5n
OkAiaHR0cDovL2V4YW1wbGUuY29tL2FwcC9pbmRleCJdXTsKQEAgLTEwMCw2ICsxMDcsMTEgQEAg
VEVTVChXZWJLaXQsIEFwcGxpY2F0aW9uTWFuaWZlc3RCYXNpYykKICAgICAgICAgRVhQRUNUX1RS
VUUoW21hbmlmZXN0LmFwcGxpY2F0aW9uRGVzY3JpcHRpb24gaXNFcXVhbFRvU3RyaW5nOkAiSGVs
bG8uIl0pOwogICAgICAgICBFWFBFQ1RfVFJVRShbbWFuaWZlc3Quc3RhcnRVUkwgaXNFcXVhbDpb
TlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly9leGFtcGxlLmNvbS9hcHAvc3RhcnQiXV0pOwog
ICAgICAgICBFWFBFQ1RfVFJVRShbbWFuaWZlc3Quc2NvcGUgaXNFcXVhbDpbTlNVUkwgVVJMV2l0
aFN0cmluZzpAImh0dHA6Ly9leGFtcGxlLmNvbS9hcHAiXV0pOworCisgICAgICAgIGF1dG8gc1JH
QkNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9y
U3BhY2VTUkdCKSk7CisgICAgICAgIGF1dG8gcmVkQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVh
dGUoc1JHQkNvbG9yU3BhY2UuZ2V0KCksIHJlZENvbG9yQ29tcG9uZW50cykpOworICAgICAgICBF
WFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKG1hbmlmZXN0LnRoZW1lQ29sb3IuQ0dDb2xv
ciwgcmVkQ29sb3IuZ2V0KCkpKTsKKwogICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKICAg
ICBVdGlsOjpydW4oJmRvbmUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9IVE1MTWV0YVRoZW1lQ29sb3IubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0hUTUxNZXRhVGhlbWVDb2xvci5tbQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOGIwYmNjY2E1Yjc2MDI3NjEzYWJkZGMzMDU5ZDlkYzYxNTIxY2Y3Ni4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0hUTUxNZXRhVGhlbWVDb2xvci5tbQorKysgL2Rl
di9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgi
Ci0KLSNpbXBvcnQgIkNvY29hQ29sb3IuaCIKLSNpbXBvcnQgIlRlc3RDb2NvYS5oIgotI2ltcG9y
dCAiVGVzdFdLV2ViVmlldy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRl
Lmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0
L19XS0ludGVybmFsRGVidWdGZWF0dXJlLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0K
LSNkZWZpbmUgRVhQRUNUX05TU1RSSU5HX0VRKGV4cGVjdGVkLCBhY3R1YWwpIFwKLSAgICBFWFBF
Q1RfVFJVRShbYWN0dWFsIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOyBcCi0gICAg
RVhQRUNUX1dLX1NUUkVRKGV4cGVjdGVkLCAoTlNTdHJpbmcgKilhY3R1YWwpOwotCi1jb25zdGV4
cHIgQ0dGbG9hdCByZWRDb2xvckNvbXBvbmVudHNbNF0gPSB7IDEsIDAsIDAsIDEgfTsKLWNvbnN0
ZXhwciBDR0Zsb2F0IGJsdWVDb2xvckNvbXBvbmVudHNbNF0gPSB7IDAsIDAsIDEsIDEgfTsKLQot
VEVTVChIVE1MTWV0YVRoZW1lQ29sb3IsIE9uTG9hZCkKLXsKLSAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDgwMCwgNjAwKV0pOwotICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlldyB0aGVtZUNvbG9yXSk7
Ci0KLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxB
bGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPG1ldGEgbmFtZT0ndGhlbWUtY29sb3InIGNv
bnRlbnQ9J3JlZCc+Il07Ci0KLSAgICBhdXRvIHNSR0JDb2xvclNwYWNlID0gYWRvcHRDRihDR0Nv
bG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwotICAgIGF1dG8gcmVk
Q29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2UuZ2V0KCksIHJlZENv
bG9yQ29tcG9uZW50cykpOwotICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dl
YlZpZXcgdGhlbWVDb2xvcl0uQ0dDb2xvciwgcmVkQ29sb3IuZ2V0KCkpKTsKLQotICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNo
aWxkRnJhbWVzUGFpbnQ6QCI8bWV0YSBuYW1lPSdub3QtdGhlbWUtY29sb3InIGNvbnRlbnQ9J3Jl
ZCc+Il07Ci0KLSAgICBFWFBFQ1RfVFJVRSghW3dlYlZpZXcgdGhlbWVDb2xvcl0pOwotfQotCi1U
RVNUKEhUTUxNZXRhVGhlbWVDb2xvciwgTXVsdGlwbGVUYWdzKQotewotICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJl
Y3QoMCwgMCwgODAwLCA2MDApXSk7Ci0gICAgRVhQRUNUX1RSVUUoIVt3ZWJWaWV3IHRoZW1lQ29s
b3JdKTsKLQotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRV
bnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8bWV0YSBuYW1lPSd0aGVtZS1jb2xv
cicgY29udGVudD0ncmVkJz48bWV0YSBuYW1lPSd0aGVtZS1jb2xvcicgY29udGVudD0nYmx1ZSc+
Il07Ci0KLSAgICBhdXRvIHNSR0JDb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVh
dGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwotICAgIGF1dG8gYmx1ZUNvbG9yID0gYWRv
cHRDRihDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlLmdldCgpLCBibHVlQ29sb3JDb21wb25l
bnRzKSk7Ci0gICAgRVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFsVG9Db2xvcihbd2ViVmlldyB0aGVt
ZUNvbG9yXS5DR0NvbG9yLCBibHVlQ29sb3IuZ2V0KCkpKTsKLX0KLQotQGludGVyZmFjZSBXS1dl
YlZpZXdUaGVtZUNvbG9yT2JzZXJ2ZXIgOiBOU09iamVjdAotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3OwotCi1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIFdLV2ViVmlldyAqd2ViVmlldzsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBj
b3B5KSBOU1N0cmluZyAqc3RhdGU7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLV2ViVmll
d1RoZW1lQ29sb3JPYnNlcnZlcgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihX
S1dlYlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfc3RhdGUgPSBAImJlZm9yZS1pbml0IjsKLQotICAg
IF93ZWJWaWV3ID0gd2ViVmlldzsKLSAgICBbX3dlYlZpZXcgYWRkT2JzZXJ2ZXI6c2VsZiBmb3JL
ZXlQYXRoOkAidGhlbWVDb2xvciIgb3B0aW9uczpOU0tleVZhbHVlT2JzZXJ2aW5nT3B0aW9uSW5p
dGlhbCBjb250ZXh0Om5pbF07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClvYnNl
cnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBhdGggb2ZPYmplY3Q6KGlkKW9iamVj
dCBjaGFuZ2U6KE5TRGljdGlvbmFyeSAqKWNoYW5nZSBjb250ZXh0Oih2b2lkICopY29udGV4dAot
ewotICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1pbml0Il0pIHsKLSAg
ICAgICAgX3N0YXRlID0gQCJhZnRlci1pbml0IjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1sb2FkIl0pIHsKLSAgICAg
ICAgX3N0YXRlID0gQCJhZnRlci1sb2FkIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1jb250ZW50LWNoYW5nZSJdKSB7
Ci0gICAgICAgIF9zdGF0ZSA9IEAiYWZ0ZXItY29udGVudC1jaGFuZ2UiOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKFtfc3RhdGUgaXNFcXVhbFRvU3RyaW5nOkAiYmVmb3JlLW5h
bWUtY2hhbmdlLW5vdC10aGVtZS1jb2xvciJdKSB7Ci0gICAgICAgIF9zdGF0ZSA9IEAiYWZ0ZXIt
bmFtZS1jaGFuZ2Utbm90LXRoZW1lLWNvbG9yIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1uYW1lLWNoYW5nZS10aGVt
ZS1jb2xvciJdKSB7Ci0gICAgICAgIF9zdGF0ZSA9IEAiYWZ0ZXItbmFtZS1jaGFuZ2UtdGhlbWUt
Y29sb3IiOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKFtfc3RhdGUgaXNFcXVh
bFRvU3RyaW5nOkAiYmVmb3JlLW5vZGUtcmVtb3ZlZCJdKSB7Ci0gICAgICAgIF9zdGF0ZSA9IEAi
YWZ0ZXItbm9kZS1yZW1vdmVkIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLUBlbmQKLQotVEVTVChIVE1MTWV0YVRoZW1l
Q29sb3IsIEtWTykKLXsKLSAgICBhdXRvIHNSR0JDb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9y
U3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwotICAgIGF1dG8gcmVkQ29s
b3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2UuZ2V0KCksIHJlZENvbG9y
Q29tcG9uZW50cykpOwotICAgIGF1dG8gYmx1ZUNvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRl
KHNSR0JDb2xvclNwYWNlLmdldCgpLCBibHVlQ29sb3JDb21wb25lbnRzKSk7Ci0KLSAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKV0pOwotICAgIGF1dG8gdGhlbWVDb2xvck9ic2VydmVy
ID0gYWRvcHROUyhbW1dLV2ViVmlld1RoZW1lQ29sb3JPYnNlcnZlciBhbGxvY10gaW5pdFdpdGhX
ZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBFWFBFQ1RfTlNTVFJJTkdfRVEoImFmdGVyLWlu
aXQiLCBbdGhlbWVDb2xvck9ic2VydmVyIHN0YXRlXSk7Ci0gICAgRVhQRUNUX1RSVUUoIVt3ZWJW
aWV3IHRoZW1lQ29sb3JdKTsKLQotICAgIFt0aGVtZUNvbG9yT2JzZXJ2ZXIgc2V0U3RhdGU6QCJi
ZWZvcmUtbG9hZCJdOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0Fu
ZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8bWV0YSBuYW1lPSd0aGVt
ZS1jb2xvcicgY29udGVudD0ncmVkJz4iXTsKLSAgICBFWFBFQ1RfTlNTVFJJTkdfRVEoImFmdGVy
LWxvYWQiLCBbdGhlbWVDb2xvck9ic2VydmVyIHN0YXRlXSk7Ci0gICAgRVhQRUNUX1RSVUUoQ0dD
b2xvckVxdWFsVG9Db2xvcihbd2ViVmlldyB0aGVtZUNvbG9yXS5DR0NvbG9yLCByZWRDb2xvci5n
ZXQoKSkpOwotCi0gICAgW3RoZW1lQ29sb3JPYnNlcnZlciBzZXRTdGF0ZTpAImJlZm9yZS1jb250
ZW50LWNoYW5nZSJdOwotICAgIFt3ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhJykuc2V0QXR0cmlidXRlKCdjb250ZW50Jywg
J2JsdWUnKSJdOwotICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsK
LSAgICBFWFBFQ1RfTlNTVFJJTkdfRVEoImFmdGVyLWNvbnRlbnQtY2hhbmdlIiwgW3RoZW1lQ29s
b3JPYnNlcnZlciBzdGF0ZV0pOwotICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3Io
W3dlYlZpZXcgdGhlbWVDb2xvcl0uQ0dDb2xvciwgYmx1ZUNvbG9yLmdldCgpKSk7Ci0KLSAgICBb
dGhlbWVDb2xvck9ic2VydmVyIHNldFN0YXRlOkAiYmVmb3JlLW5hbWUtY2hhbmdlLW5vdC10aGVt
ZS1jb2xvciJdOwotICAgIFt3ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJk
b2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhJykuc2V0QXR0cmlidXRlKCduYW1lJywgJ25vdC10
aGVtZS1jb2xvcicpIl07Ci0gICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRpb25VcGRh
dGVdOwotICAgIEVYUEVDVF9OU1NUUklOR19FUSgiYWZ0ZXItbmFtZS1jaGFuZ2Utbm90LXRoZW1l
LWNvbG9yIiwgW3RoZW1lQ29sb3JPYnNlcnZlciBzdGF0ZV0pOwotICAgIEVYUEVDVF9UUlVFKCFb
d2ViVmlldyB0aGVtZUNvbG9yXSk7Ci0KLSAgICBbdGhlbWVDb2xvck9ic2VydmVyIHNldFN0YXRl
OkAiYmVmb3JlLW5hbWUtY2hhbmdlLXRoZW1lLWNvbG9yIl07Ci0gICAgW3dlYlZpZXcgb2JqZWN0
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGEnKS5z
ZXRBdHRyaWJ1dGUoJ25hbWUnLCAndGhlbWUtY29sb3InKSJdOwotICAgIFt3ZWJWaWV3IHdhaXRG
b3JOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKLSAgICBFWFBFQ1RfTlNTVFJJTkdfRVEoImFmdGVy
LW5hbWUtY2hhbmdlLXRoZW1lLWNvbG9yIiwgW3RoZW1lQ29sb3JPYnNlcnZlciBzdGF0ZV0pOwot
ICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXcgdGhlbWVDb2xvcl0u
Q0dDb2xvciwgYmx1ZUNvbG9yLmdldCgpKSk7Ci0KLSAgICBbdGhlbWVDb2xvck9ic2VydmVyIHNl
dFN0YXRlOkAiYmVmb3JlLW5vZGUtcmVtb3ZlZCJdOwotICAgIFt3ZWJWaWV3IG9iamVjdEJ5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhJykucmVtb3Zl
KCkiXTsKLSAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07Ci0gICAg
RVhQRUNUX05TU1RSSU5HX0VRKCJhZnRlci1ub2RlLXJlbW92ZWQiLCBbdGhlbWVDb2xvck9ic2Vy
dmVyIHN0YXRlXSk7Ci0gICAgRVhQRUNUX1RSVUUoIVt3ZWJWaWV3IHRoZW1lQ29sb3JdKTsKLX0K
LQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLS8vIFRoZXJlJ3Mgbm8gQVBJL1NQSSB0byBn
ZXQgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHNjcm9sbCBhcmVhIG9uIG1hY09TLgotCi1l
bnVtIGNsYXNzIFVzZVRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIDogYm9v
bCB7IFllcywgTm8gfTsKLXN0YXRpYyBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gY3JlYXRlV2Vi
VmlldyhVc2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciB1c2VUaGVtZUNv
bG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvcikKLXsKLSAgICBhdXRvIGNvbmZpZ3VyYXRp
b24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwotICAg
IGZvciAoX1dLSW50ZXJuYWxEZWJ1Z0ZlYXR1cmUgKmZlYXR1cmUgaW4gW1dLUHJlZmVyZW5jZXMg
X2ludGVybmFsRGVidWdGZWF0dXJlc10pIHsKLSAgICAgICAgaWYgKFtmZWF0dXJlLmtleSBpc0Vx
dWFsVG9TdHJpbmc6QCJVc2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciJd
KSB7Ci0gICAgICAgICAgICBbW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRFbmFibGVk
Oih1c2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciA9PSBVc2VUaGVtZUNv
bG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvcjo6WWVzKSBmb3JJbnRlcm5hbERlYnVnRmVh
dHVyZTpmZWF0dXJlXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNH
UmVjdE1ha2UoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQo
KV0pOwotfQotCi1URVNUKEhUTUxNZXRhVGhlbWVDb2xvciwgRXhwZXJpbWVudGFsVXNlVGhlbWVD
b2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3IpCi17Ci0gICAgYXV0byBzUkdCQ29sb3JT
cGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNS
R0IpKTsKLSAgICBhdXRvIHJlZENvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKHNSR0JDb2xv
clNwYWNlLmdldCgpLCByZWRDb2xvckNvbXBvbmVudHMpKTsKLSAgICBhdXRvIGJsdWVDb2xvciA9
IGFkb3B0Q0YoQ0dDb2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZS5nZXQoKSwgYmx1ZUNvbG9yQ29t
cG9uZW50cykpOwotCi0gICAgYXV0byB3ZWJWaWV3V2l0aG91dFRoZW1lQ29sb3JGb3JTY3JvbGxB
cmVhQmFja2dyb3VuZENvbG9yID0gY3JlYXRlV2ViVmlldyhVc2VUaGVtZUNvbG9yRm9yU2Nyb2xs
QXJlYUJhY2tncm91bmRDb2xvcjo6Tm8pOwotICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlld1dpdGhv
dXRUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciB0aGVtZUNvbG9yXSk7Ci0K
LSAgICBbd2ViVmlld1dpdGhvdXRUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xv
ciBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGls
ZEZyYW1lc1BhaW50OkAiPGJvZHkgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IGJsdWUnPiJdOwot
ICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlld1dpdGhvdXRUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJh
Y2tncm91bmRDb2xvciB0aGVtZUNvbG9yXSk7Ci0gICAgRVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFs
VG9Db2xvcihbd2ViVmlld1dpdGhvdXRUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRD
b2xvciBzY3JvbGxWaWV3XS5iYWNrZ3JvdW5kQ29sb3IuQ0dDb2xvciwgYmx1ZUNvbG9yLmdldCgp
KSk7Ci0KLSAgICBbd2ViVmlld1dpdGhvdXRUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91
bmRDb2xvciBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlh
dGVDaGlsZEZyYW1lc1BhaW50OkAiPG1ldGEgbmFtZT0ndGhlbWUtY29sb3InIGNvbnRlbnQ9J3Jl
ZCc+PGJvZHkgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IGJsdWUnPiJdOwotICAgIEVYUEVDVF9U
UlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXdXaXRob3V0VGhlbWVDb2xvckZvclNjcm9s
bEFyZWFCYWNrZ3JvdW5kQ29sb3IgdGhlbWVDb2xvcl0uQ0dDb2xvciwgcmVkQ29sb3IuZ2V0KCkp
KTsKLSAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKFt3ZWJWaWV3V2l0aG91dFRo
ZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIHNjcm9sbFZpZXddLmJhY2tncm91
bmRDb2xvci5DR0NvbG9yLCBibHVlQ29sb3IuZ2V0KCkpKTsKLQotICAgIGF1dG8gd2ViVmlld1dp
dGhUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciA9IGNyZWF0ZVdlYlZpZXco
VXNlVGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3I6Olllcyk7Ci0gICAgRVhQ
RUNUX1RSVUUoIVt3ZWJWaWV3V2l0aFRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENv
bG9yIHRoZW1lQ29sb3JdKTsKLQotICAgIFt3ZWJWaWV3V2l0aFRoZW1lQ29sb3JGb3JTY3JvbGxB
cmVhQmFja2dyb3VuZENvbG9yIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRp
bEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8Ym9keSBzdHlsZT0nYmFja2dyb3VuZC1j
b2xvcjogYmx1ZSc+Il07Ci0gICAgRVhQRUNUX1RSVUUoIVt3ZWJWaWV3V2l0aFRoZW1lQ29sb3JG
b3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIHRoZW1lQ29sb3JdKTsKLSAgICBFWFBFQ1RfVFJV
RShDR0NvbG9yRXF1YWxUb0NvbG9yKFt3ZWJWaWV3V2l0aFRoZW1lQ29sb3JGb3JTY3JvbGxBcmVh
QmFja2dyb3VuZENvbG9yIHNjcm9sbFZpZXddLmJhY2tncm91bmRDb2xvci5DR0NvbG9yLCBibHVl
Q29sb3IuZ2V0KCkpKTsKLQotICAgIFt3ZWJWaWV3V2l0aFRoZW1lQ29sb3JGb3JTY3JvbGxBcmVh
QmFja2dyb3VuZENvbG9yIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRpbEFs
bEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8bWV0YSBuYW1lPSd0aGVtZS1jb2xvcicgY29u
dGVudD0ncmVkJz48Ym9keSBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjogYmx1ZSc+Il07Ci0gICAg
RVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFsVG9Db2xvcihbd2ViVmlld1dpdGhUaGVtZUNvbG9yRm9y
U2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciB0aGVtZUNvbG9yXS5DR0NvbG9yLCByZWRDb2xvci5n
ZXQoKSkpOwotICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXdXaXRo
VGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3Igc2Nyb2xsVmlld10uYmFja2dy
b3VuZENvbG9yLkNHQ29sb3IsIHJlZENvbG9yLmdldCgpKSk7Ci19Ci0KLSNlbmRpZiAvLyBQTEFU
Rk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XS1dlYlZpZXdUaGVtZUNvbG9yLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdUaGVtZUNvbG9yLm1tCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmMmE2
ZjBlNGQxMzUzYTg3ZDZmNjU3MmQyNjU2OTY0ZTMyMzJkMGMKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld1RoZW1lQ29sb3Iu
bW0KQEAgLTAsMCArMSwyNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKwor
I2ltcG9ydCAiQ29jb2FDb2xvci5oIgorI2ltcG9ydCAiVGVzdENvY29hLmgiCisjaW1wb3J0ICJU
ZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4K
KyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dL
QXBwbGljYXRpb25NYW5pZmVzdC5oPgorI2ltcG9ydCA8V2ViS2l0L19XS0ludGVybmFsRGVidWdG
ZWF0dXJlLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKKyNkZWZpbmUgRVhQRUNUX05T
U1RSSU5HX0VRKGV4cGVjdGVkLCBhY3R1YWwpIFwKKyAgICBFWFBFQ1RfVFJVRShbYWN0dWFsIGlz
S2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOyBcCisgICAgRVhQRUNUX1dLX1NUUkVRKGV4
cGVjdGVkLCAoTlNTdHJpbmcgKilhY3R1YWwpOworCitjb25zdGV4cHIgQ0dGbG9hdCByZWRDb2xv
ckNvbXBvbmVudHNbNF0gPSB7IDEsIDAsIDAsIDEgfTsKK2NvbnN0ZXhwciBDR0Zsb2F0IGJsdWVD
b2xvckNvbXBvbmVudHNbNF0gPSB7IDAsIDAsIDEsIDEgfTsKKworVEVTVChXS1dlYlZpZXdUaGVt
ZUNvbG9yLCBNZXRhRWxlbWVudE9uTG9hZCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgw
MCwgNjAwKV0pOworICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlldyB0aGVtZUNvbG9yXSk7CisKKyAg
ICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1l
ZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPG1ldGEgbmFtZT0ndGhlbWUtY29sb3InIGNvbnRlbnQ9
J3JlZCc+Il07CisKKyAgICBhdXRvIHNSR0JDb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3Bh
Y2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOworICAgIGF1dG8gcmVkQ29sb3Ig
PSBhZG9wdENGKENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2UuZ2V0KCksIHJlZENvbG9yQ29t
cG9uZW50cykpOworICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXcg
dGhlbWVDb2xvcl0uQ0dDb2xvciwgcmVkQ29sb3IuZ2V0KCkpKTsKKworICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJh
bWVzUGFpbnQ6QCI8bWV0YSBuYW1lPSdub3QtdGhlbWUtY29sb3InIGNvbnRlbnQ9J3JlZCc+Il07
CisKKyAgICBFWFBFQ1RfVFJVRSghW3dlYlZpZXcgdGhlbWVDb2xvcl0pOworfQorCitURVNUKFdL
V2ViVmlld1RoZW1lQ29sb3IsIE11bHRpcGxlTWV0YUVsZW1lbnRzKQoreworICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisgICAgRVhQRUNUX1RSVUUoIVt3ZWJWaWV3IHRoZW1l
Q29sb3JdKTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdh
aXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8bWV0YSBuYW1lPSd0aGVtZS1j
b2xvcicgY29udGVudD0ncmVkJz48bWV0YSBuYW1lPSd0aGVtZS1jb2xvcicgY29udGVudD0nYmx1
ZSc+Il07CisKKyAgICBhdXRvIHNSR0JDb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VD
cmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOworICAgIGF1dG8gYmx1ZUNvbG9yID0g
YWRvcHRDRihDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlLmdldCgpLCBibHVlQ29sb3JDb21w
b25lbnRzKSk7CisgICAgRVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFsVG9Db2xvcihbd2ViVmlldyB0
aGVtZUNvbG9yXS5DR0NvbG9yLCBibHVlQ29sb3IuZ2V0KCkpKTsKK30KKworQGludGVyZmFjZSBX
S1dlYlZpZXdUaGVtZUNvbG9yT2JzZXJ2ZXIgOiBOU09iamVjdAorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3OworCitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIFdLV2ViVmlldyAqd2ViVmlldzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSBOU1N0cmluZyAqc3RhdGU7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLV2Vi
Vmlld1RoZW1lQ29sb3JPYnNlcnZlcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3
OihXS1dlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfc3RhdGUgPSBAImJlZm9yZS1pbml0IjsKKwor
ICAgIF93ZWJWaWV3ID0gd2ViVmlldzsKKyAgICBbX3dlYlZpZXcgYWRkT2JzZXJ2ZXI6c2VsZiBm
b3JLZXlQYXRoOkAidGhlbWVDb2xvciIgb3B0aW9uczpOU0tleVZhbHVlT2JzZXJ2aW5nT3B0aW9u
SW5pdGlhbCBjb250ZXh0Om5pbF07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClv
YnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBhdGggb2ZPYmplY3Q6KGlkKW9i
amVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeSAqKWNoYW5nZSBjb250ZXh0Oih2b2lkICopY29udGV4
dAoreworICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1pbml0Il0pIHsK
KyAgICAgICAgX3N0YXRlID0gQCJhZnRlci1pbml0IjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1sb2FkIl0pIHsKKyAg
ICAgICAgX3N0YXRlID0gQCJhZnRlci1sb2FkIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1jb250ZW50LWNoYW5nZSJd
KSB7CisgICAgICAgIF9zdGF0ZSA9IEAiYWZ0ZXItY29udGVudC1jaGFuZ2UiOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKFtfc3RhdGUgaXNFcXVhbFRvU3RyaW5nOkAiYmVmb3Jl
LW5hbWUtY2hhbmdlLW5vdC10aGVtZS1jb2xvciJdKSB7CisgICAgICAgIF9zdGF0ZSA9IEAiYWZ0
ZXItbmFtZS1jaGFuZ2Utbm90LXRoZW1lLWNvbG9yIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1uYW1lLWNoYW5nZS10
aGVtZS1jb2xvciJdKSB7CisgICAgICAgIF9zdGF0ZSA9IEAiYWZ0ZXItbmFtZS1jaGFuZ2UtdGhl
bWUtY29sb3IiOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFtfc3RhdGUgaXNF
cXVhbFRvU3RyaW5nOkAiYmVmb3JlLW5vZGUtcmVtb3ZlZCJdKSB7CisgICAgICAgIF9zdGF0ZSA9
IEAiYWZ0ZXItbm9kZS1yZW1vdmVkIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0BlbmQKKworVEVTVChXS1dlYlZpZXdU
aGVtZUNvbG9yLCBLVk8pCit7CisgICAgYXV0byBzUkdCQ29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dD
b2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0IpKTsKKyAgICBhdXRvIHJl
ZENvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlLmdldCgpLCByZWRD
b2xvckNvbXBvbmVudHMpKTsKKyAgICBhdXRvIGJsdWVDb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNy
ZWF0ZShzUkdCQ29sb3JTcGFjZS5nZXQoKSwgYmx1ZUNvbG9yQ29tcG9uZW50cykpOworCisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsKKyAgICBhdXRvIHRoZW1lQ29sb3JPYnNl
cnZlciA9IGFkb3B0TlMoW1tXS1dlYlZpZXdUaGVtZUNvbG9yT2JzZXJ2ZXIgYWxsb2NdIGluaXRX
aXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgRVhQRUNUX05TU1RSSU5HX0VRKCJhZnRl
ci1pbml0IiwgW3RoZW1lQ29sb3JPYnNlcnZlciBzdGF0ZV0pOworICAgIEVYUEVDVF9UUlVFKCFb
d2ViVmlldyB0aGVtZUNvbG9yXSk7CisKKyAgICBbdGhlbWVDb2xvck9ic2VydmVyIHNldFN0YXRl
OkAiYmVmb3JlLWxvYWQiXTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJp
bmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPG1ldGEgbmFtZT0n
dGhlbWUtY29sb3InIGNvbnRlbnQ9J3JlZCc+Il07CisgICAgRVhQRUNUX05TU1RSSU5HX0VRKCJh
ZnRlci1sb2FkIiwgW3RoZW1lQ29sb3JPYnNlcnZlciBzdGF0ZV0pOworICAgIEVYUEVDVF9UUlVF
KENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXcgdGhlbWVDb2xvcl0uQ0dDb2xvciwgcmVkQ29s
b3IuZ2V0KCkpKTsKKworICAgIFt0aGVtZUNvbG9yT2JzZXJ2ZXIgc2V0U3RhdGU6QCJiZWZvcmUt
Y29udGVudC1jaGFuZ2UiXTsKKyAgICBbd2ViVmlldyBvYmplY3RCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YScpLnNldEF0dHJpYnV0ZSgnY29udGVu
dCcsICdibHVlJykiXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0
ZV07CisgICAgRVhQRUNUX05TU1RSSU5HX0VRKCJhZnRlci1jb250ZW50LWNoYW5nZSIsIFt0aGVt
ZUNvbG9yT2JzZXJ2ZXIgc3RhdGVdKTsKKyAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0Nv
bG9yKFt3ZWJWaWV3IHRoZW1lQ29sb3JdLkNHQ29sb3IsIGJsdWVDb2xvci5nZXQoKSkpOworCisg
ICAgW3RoZW1lQ29sb3JPYnNlcnZlciBzZXRTdGF0ZTpAImJlZm9yZS1uYW1lLWNoYW5nZS1ub3Qt
dGhlbWUtY29sb3IiXTsKKyAgICBbd2ViVmlldyBvYmplY3RCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YScpLnNldEF0dHJpYnV0ZSgnbmFtZScsICdu
b3QtdGhlbWUtY29sb3InKSJdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9u
VXBkYXRlXTsKKyAgICBFWFBFQ1RfTlNTVFJJTkdfRVEoImFmdGVyLW5hbWUtY2hhbmdlLW5vdC10
aGVtZS1jb2xvciIsIFt0aGVtZUNvbG9yT2JzZXJ2ZXIgc3RhdGVdKTsKKyAgICBFWFBFQ1RfVFJV
RSghW3dlYlZpZXcgdGhlbWVDb2xvcl0pOworCisgICAgW3RoZW1lQ29sb3JPYnNlcnZlciBzZXRT
dGF0ZTpAImJlZm9yZS1uYW1lLWNoYW5nZS10aGVtZS1jb2xvciJdOworICAgIFt3ZWJWaWV3IG9i
amVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRh
Jykuc2V0QXR0cmlidXRlKCduYW1lJywgJ3RoZW1lLWNvbG9yJykiXTsKKyAgICBbd2ViVmlldyB3
YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07CisgICAgRVhQRUNUX05TU1RSSU5HX0VRKCJh
ZnRlci1uYW1lLWNoYW5nZS10aGVtZS1jb2xvciIsIFt0aGVtZUNvbG9yT2JzZXJ2ZXIgc3RhdGVd
KTsKKyAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKFt3ZWJWaWV3IHRoZW1lQ29s
b3JdLkNHQ29sb3IsIGJsdWVDb2xvci5nZXQoKSkpOworCisgICAgW3RoZW1lQ29sb3JPYnNlcnZl
ciBzZXRTdGF0ZTpAImJlZm9yZS1ub2RlLXJlbW92ZWQiXTsKKyAgICBbd2ViVmlldyBvYmplY3RC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YScpLnJl
bW92ZSgpIl07CisgICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRpb25VcGRhdGVdOwor
ICAgIEVYUEVDVF9OU1NUUklOR19FUSgiYWZ0ZXItbm9kZS1yZW1vdmVkIiwgW3RoZW1lQ29sb3JP
YnNlcnZlciBzdGF0ZV0pOworICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlldyB0aGVtZUNvbG9yXSk7
Cit9CisKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCisKK1RFU1QoV0tXZWJWaWV3
VGhlbWVDb2xvciwgQXBwbGljYXRpb25NYW5pZmVzdCkKK3sKKyAgICBhdXRvIHNSR0JDb2xvclNw
YWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JH
QikpOworICAgIGF1dG8gcmVkQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoc1JHQkNvbG9y
U3BhY2UuZ2V0KCksIHJlZENvbG9yQ29tcG9uZW50cykpOworCisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCldKTsKKyAgICBFWFBFQ1RfVFJVRSghW3dlYlZpZXcgdGhlbWVDb2xvcl0p
OworCisgICAgTlNEaWN0aW9uYXJ5ICptYW5pZmVzdE9iamVjdCA9IEB7IEAibmFtZSI6IEAiVGVz
dCIsIEAidGhlbWVfY29sb3IiOiBAInJlZCIgfTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5
TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OltO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPGxpbmsgcmVsPSdtYW5pZmVzdCcgaHJlZj0nZGF0
YTphcHBsaWNhdGlvbi9tYW5pZmVzdCtqc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCVAJz4iLCBb
W05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0Om1hbmlmZXN0T2JqZWN0IG9w
dGlvbnM6MCBlcnJvcjpuaWxdIGJhc2U2NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9uczowXV1dOwor
CisgICAgc3RhdGljIGJvb2wgZGlkR2V0QXBwbGljYXRpb25NYW5pZmVzdCA9IGZhbHNlOworICAg
IFt3ZWJWaWV3IF9nZXRBcHBsaWNhdGlvbk1hbmlmZXN0V2l0aENvbXBsZXRpb25IYW5kbGVyOlsm
XSAoX1dLQXBwbGljYXRpb25NYW5pZmVzdCAqbWFuaWZlc3QpIHsKKyAgICAgICAgRVhQRUNUX1RS
VUUoQ0dDb2xvckVxdWFsVG9Db2xvcihtYW5pZmVzdC50aGVtZUNvbG9yLkNHQ29sb3IsIHJlZENv
bG9yLmdldCgpKSk7CisKKyAgICAgICAgZGlkR2V0QXBwbGljYXRpb25NYW5pZmVzdCA9IHRydWU7
CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkaWRHZXRBcHBsaWNhdGlv
bk1hbmlmZXN0KTsKKworICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9uVXBkYXRl
XTsKKyAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKFt3ZWJWaWV3IHRoZW1lQ29s
b3JdLkNHQ29sb3IsIHJlZENvbG9yLmdldCgpKSk7Cit9CisKK1RFU1QoV0tXZWJWaWV3VGhlbWVD
b2xvciwgTWV0YUVsZW1lbnRPdmVycmlkZXNBcHBsaWNhdGlvbk1hbmlmZXN0KQoreworICAgIGF1
dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisgICAgRVhQRUNUX1RSVUUoIVt3ZWJWaWV3
IHRoZW1lQ29sb3JdKTsKKworICAgIE5TRGljdGlvbmFyeSAqbWFuaWZlc3RPYmplY3QgPSBAeyBA
Im5hbWUiOiBAIlRlc3QiLCBAInRoZW1lX2NvbG9yIjogQCJibHVlIiB9OworICAgIFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxk
RnJhbWVzUGFpbnQ6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8bGluayByZWw9J21hbmlm
ZXN0JyBocmVmPSdkYXRhOmFwcGxpY2F0aW9uL21hbmlmZXN0K2pzb247Y2hhcnNldD11dGYtODti
YXNlNjQsJUAnPjxtZXRhIG5hbWU9J3RoZW1lLWNvbG9yJyBjb250ZW50PSdyZWQnPiIsIFtbTlNK
U09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05PYmplY3Q6bWFuaWZlc3RPYmplY3Qgb3B0aW9u
czowIGVycm9yOm5pbF0gYmFzZTY0RW5jb2RlZFN0cmluZ1dpdGhPcHRpb25zOjBdXV07CisKKyAg
ICBhdXRvIHNSR0JDb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFt
ZShrQ0dDb2xvclNwYWNlU1JHQikpOworICAgIGF1dG8gcmVkQ29sb3IgPSBhZG9wdENGKENHQ29s
b3JDcmVhdGUoc1JHQkNvbG9yU3BhY2UuZ2V0KCksIHJlZENvbG9yQ29tcG9uZW50cykpOworICAg
IEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXcgdGhlbWVDb2xvcl0uQ0dD
b2xvciwgcmVkQ29sb3IuZ2V0KCkpKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShBUFBMSUNBVElP
Tl9NQU5JRkVTVCkKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKKy8vIFRoZXJlJ3Mgbm8g
QVBJL1NQSSB0byBnZXQgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHNjcm9sbCBhcmVhIG9u
IG1hY09TLgorCitlbnVtIGNsYXNzIFVzZVRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3Vu
ZENvbG9yIDogYm9vbCB7IFllcywgTm8gfTsKK3N0YXRpYyBSZXRhaW5QdHI8VGVzdFdLV2ViVmll
dz4gY3JlYXRlV2ViVmlldyhVc2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xv
ciB1c2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvcikKK3sKKyAgICBhdXRv
IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10g
aW5pdF0pOworICAgIGZvciAoX1dLSW50ZXJuYWxEZWJ1Z0ZlYXR1cmUgKmZlYXR1cmUgaW4gW1dL
UHJlZmVyZW5jZXMgX2ludGVybmFsRGVidWdGZWF0dXJlc10pIHsKKyAgICAgICAgaWYgKFtmZWF0
dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJVc2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tn
cm91bmRDb2xvciJdKSB7CisgICAgICAgICAgICBbW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNd
IF9zZXRFbmFibGVkOih1c2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciA9
PSBVc2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvcjo6WWVzKSBmb3JJbnRl
cm5hbERlYnVnRmVhdHVyZTpmZWF0dXJlXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOworfQorCitURVNUKFdLV2ViVmlld1RoZW1lQ29sb3IsIEV4cGVyaW1l
bnRhbFVzZVRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yKQoreworICAgIGF1
dG8gc1JHQkNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtD
R0NvbG9yU3BhY2VTUkdCKSk7CisgICAgYXV0byByZWRDb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNy
ZWF0ZShzUkdCQ29sb3JTcGFjZS5nZXQoKSwgcmVkQ29sb3JDb21wb25lbnRzKSk7CisgICAgYXV0
byBibHVlQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2UuZ2V0KCks
IGJsdWVDb2xvckNvbXBvbmVudHMpKTsKKworICAgIGF1dG8gd2ViVmlld1dpdGhvdXRUaGVtZUNv
bG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciA9IGNyZWF0ZVdlYlZpZXcoVXNlVGhlbWVD
b2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3I6Ok5vKTsKKyAgICBFWFBFQ1RfVFJVRSgh
W3dlYlZpZXdXaXRob3V0VGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3IgdGhl
bWVDb2xvcl0pOworCisgICAgW3dlYlZpZXdXaXRob3V0VGhlbWVDb2xvckZvclNjcm9sbEFyZWFC
YWNrZ3JvdW5kQ29sb3Igc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nQW5kV2FpdFVudGlsQWxs
SW1tZWRpYXRlQ2hpbGRGcmFtZXNQYWludDpAIjxib2R5IHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9y
OiBibHVlJz4iXTsKKyAgICBFWFBFQ1RfVFJVRSghW3dlYlZpZXdXaXRob3V0VGhlbWVDb2xvckZv
clNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3IgdGhlbWVDb2xvcl0pOworICAgIEVYUEVDVF9UUlVF
KENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXdXaXRob3V0VGhlbWVDb2xvckZvclNjcm9sbEFy
ZWFCYWNrZ3JvdW5kQ29sb3Igc2Nyb2xsVmlld10uYmFja2dyb3VuZENvbG9yLkNHQ29sb3IsIGJs
dWVDb2xvci5nZXQoKSkpOworCisgICAgW3dlYlZpZXdXaXRob3V0VGhlbWVDb2xvckZvclNjcm9s
bEFyZWFCYWNrZ3JvdW5kQ29sb3Igc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nQW5kV2FpdFVu
dGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFtZXNQYWludDpAIjxtZXRhIG5hbWU9J3RoZW1lLWNvbG9y
JyBjb250ZW50PSdyZWQnPjxib2R5IHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiBibHVlJz4iXTsK
KyAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKFt3ZWJWaWV3V2l0aG91dFRoZW1l
Q29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIHRoZW1lQ29sb3JdLkNHQ29sb3IsIHJl
ZENvbG9yLmdldCgpKSk7CisgICAgRVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFsVG9Db2xvcihbd2Vi
Vmlld1dpdGhvdXRUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciBzY3JvbGxW
aWV3XS5iYWNrZ3JvdW5kQ29sb3IuQ0dDb2xvciwgYmx1ZUNvbG9yLmdldCgpKSk7CisKKyAgICBh
dXRvIHdlYlZpZXdXaXRoVGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3IgPSBj
cmVhdGVXZWJWaWV3KFVzZVRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yOjpZ
ZXMpOworICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlld1dpdGhUaGVtZUNvbG9yRm9yU2Nyb2xsQXJl
YUJhY2tncm91bmRDb2xvciB0aGVtZUNvbG9yXSk7CisKKyAgICBbd2ViVmlld1dpdGhUaGVtZUNv
bG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJp
bmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPGJvZHkgc3R5bGU9
J2JhY2tncm91bmQtY29sb3I6IGJsdWUnPiJdOworICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlld1dp
dGhUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciB0aGVtZUNvbG9yXSk7Cisg
ICAgRVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFsVG9Db2xvcihbd2ViVmlld1dpdGhUaGVtZUNvbG9y
Rm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciBzY3JvbGxWaWV3XS5iYWNrZ3JvdW5kQ29sb3Iu
Q0dDb2xvciwgYmx1ZUNvbG9yLmdldCgpKSk7CisKKyAgICBbd2ViVmlld1dpdGhUaGVtZUNvbG9y
Rm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmdB
bmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPG1ldGEgbmFtZT0ndGhl
bWUtY29sb3InIGNvbnRlbnQ9J3JlZCc+PGJvZHkgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IGJs
dWUnPiJdOworICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXdXaXRo
VGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3IgdGhlbWVDb2xvcl0uQ0dDb2xv
ciwgcmVkQ29sb3IuZ2V0KCkpKTsKKyAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9y
KFt3ZWJWaWV3V2l0aFRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIHNjcm9s
bFZpZXddLmJhY2tncm91bmRDb2xvci5DR0NvbG9yLCByZWRDb2xvci5nZXQoKSkpOworfQorCisj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426517</attachid>
            <date>2021-04-19 20:57:43 -0700</date>
            <delta_ts>2021-04-20 14:26:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224796-20210419215742.patch</filename>
            <type>text/plain</type>
            <size>63252</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzOTUxZWY1ZmNhN2QxNTIwOGYzMmM4YWM3MDBlZmYzNDhjNjE1MmQzLi45
YmQxMmFiMTgyZjM5Y2FhNDdjMjRkN2QxYjljNjNhYTQ3ZDdiYWRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTMgQEAKKzIwMjEtMDQtMTkgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgorCisgICAgICAgIFBhcnNlIGAidGhlbWVfY29sb3IiYCBpbiB3ZWIgYXBwbGljYXRpb24gbWFu
aWZlc3RzIGFuZCBwYXNzIGl0IGFsb25nIHRvIGAtW1dLV2ViVmlldyB0aGVtZUNvbG9yXWAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDc5NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy9h
cHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3QuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpkZWNvZGUpOgorCisgICAgICAgICogTW9kdWxlcy9hcHBs
aWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaDoKKyAgICAgICAgKiBN
b2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpBcHBsaWNhdGlvbk1h
bmlmZXN0UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJz
ZXI6OnBhcnNlTWFuaWZlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVz
dFBhcnNlcjo6bG9nRGV2ZWxvcGVyV2FybmluZyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNh
dGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZUNvbG9yKTogQWRkZWQuCisgICAgICAgICogbG9hZGVy
L2NhY2hlL0NhY2hlZEFwcGxpY2F0aW9uTWFuaWZlc3QuaDoKKyAgICAgICAgKiBsb2FkZXIvY2Fj
aGUvQ2FjaGVkQXBwbGljYXRpb25NYW5pZmVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRBcHBsaWNhdGlvbk1hbmlmZXN0Ojpwcm9jZXNzKToKKyAgICAgICAgUGFzcyBhbiBhY3R1YWwg
YERvY3VtZW50YCBpbnN0ZWFkIG9mIGEgYFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRgIHNvIHRoYXQg
d2UgY2FuIG5vdGlmeSBpdAorICAgICAgICB3aGVuIGZpbmlzaGVkIHBhcnNpbmcgdGhlIEpTT04g
KGBEb2N1bWVudDo6cHJvY2Vzc0FwcGxpY2F0aW9uTWFuaWZlc3RgKS4KKworICAgICAgICAqIGRv
bS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRoZW1lQ29sb3IgY29u
c3QpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6cHJvY2Vzc01ldGFFbGVtZW50VGhlbWVDb2xvcik6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OnRoZW1lQ29sb3JDaGFuZ2VkKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6cHJvY2Vzc0FwcGxpY2F0aW9uTWFuaWZlc3QpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwcm9jZXNzVGhlbWVDb2xvcik6IERlbGV0ZWQuCisgICAg
ICAgIFVzZSB0aGUgdGhlbWUgY29sb3IgZnJvbSBgPG1ldGEgbmFtZT0idGhlbWUtY29sb3IiPmAg
aWYgdmFsaWQsIGZhbGxpbmcgYmFjayB0byB0aGUgdGhlbWUKKyAgICAgICAgY29sb3IgZnJvbSBg
InRoZW1lX2NvbG9yImAgaW4gdGhlIHdlYiBhcHBsaWNhdGlvbiBtYW5pZmVzdCAoaWYgc3BlY2lm
aWVkKS4gT25seSBub3RpZnkgdGhlCisgICAgICAgIFVJUHJvY2VzcyBvZiBjaGFuZ2VzIHRvIGA8
bWV0YSBuYW1lPSJ0aGVtZS1jb2xvciI+YCBvciB0aGUgYCJ0aGVtZV9jb2xvciJgIGluIHRoZSB3
ZWIKKyAgICAgICAgYXBwbGljYXRpb24gbWFuaWZlc3QgaWYgdGhlIG5ldyB2YWx1ZSBpcyB0aGUg
dmFsdWUgdGhhdCB3b3VsZCBiZSB1c2VkLgorCisgICAgICAgICogaHRtbC9IVE1MTWV0YUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50OjphdHRyaWJ1dGVDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNl
c3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQ6OnByb2Nlc3MpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyb290QmFja2dyb3VuZENvbG9yT3JUcmFuc3Bh
cmVuY3lDaGFuZ2VkKToKKyAgICAgICAgRHJpdmUtYnk6IFJlbmFtZSBgRG9jdW1lbnQ6OnByb2Nl
c3NUaGVtZUNvbG9yYCB0byBgRG9jdW1lbnQ6OnByb2Nlc3NNZXRhRWxlbWVudFRoZW1lQ29sb3Jg
CisgICAgICAgIHNvIHRoYXQgaXQncyBtb3JlIHNwZWNpZmljIHRvIGA8bWV0YSBuYW1lPSJ0aGVt
ZS1jb2xvciI+YC4KKworICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWVDbGllbnQ6OnRoZW1lQ29sb3JDaGFuZ2VkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9tZUNsaWVudDo6cGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yRGlkQ2hh
bmdlIGNvbnN0KToKKyAgICAgICAgRHJpdmUtYnk6IFJlbW92ZSB0aGUgYENvbG9yYCBwYXJhbWV0
ZXIgc2luY2UgaXQncyBub3QgYWN0dWFsbHkgdXNlZCBpbiB0aGUgV2ViUHJvY2Vzcy4KKwogMjAy
MS0wNC0xOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQ1NT
VmFsdWVQb29sIHNob3VsZCBiZSBub24tY29weWFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNDQ3NzMyNTM0NGM1
Nzc4ZGM2NDUwZDVjZDg0ODhmNTRjNGJmMGQ5MS4uMjQzMzNhOTJkZGUxOGZjOWIyNmRjYTNhZTcy
OWVlZjNlNzcwNDgyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMS0wNC0xOSAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgUGFyc2UgYHRoZW1lX2Nv
bG9yYCBpbiB3ZWIgYXBwbGljYXRpb24gbWFuaWZlc3RzIGFuZCBwYXNzIGl0IGFsb25nIHRvIGAt
W1dLV2ViVmlldyB0aGVtZUNvbG9yXWAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNDc5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlm
ZXN0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlm
ZXN0Lm1tOgorICAgICAgICAoLVtfV0tBcHBsaWNhdGlvbk1hbmlmZXN0IGluaXRXaXRoQ29kZXI6
XSk6CisgICAgICAgICgtW19XS0FwcGxpY2F0aW9uTWFuaWZlc3QgZW5jb2RlV2l0aENvZGVyOl0p
OgorICAgICAgICAoLVtfV0tBcHBsaWNhdGlvbk1hbmlmZXN0IHRoZW1lQ29sb3JdKTogQWRkZWQu
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50Ojp0aGVtZUNvbG9yQ2hhbmdlZCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cGFnZUV4dGVuZGVkQmFj
a2dyb3VuZENvbG9yRGlkQ2hhbmdlIGNvbnN0KToKKyAgICAgICAgRHJpdmUtYnk6IFJlbW92ZSB0
aGUgYENvbG9yYCBwYXJhbWV0ZXIgc2luY2UgaXQncyBub3QgYWN0dWFsbHkgdXNlZCBpbiB0aGUg
V2ViUHJvY2Vzcy4KKwogMjAyMS0wNC0xOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBtb3JlIEdQVVByb2Nlc3MgcmVsZWFzZSBsb2dnaW5nIHRvIGZhY2ls
aXRhdGUgZGVidWdnaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxp
Y2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3QuaAppbmRleCA0NDFh
MmQ4NmE5YWRkYTI2MDIwZTBjODk1N2NiZWExMTNlNzYxMWRmLi43YmUxYTBkMWRlMzA4MTY4Mzhk
YzU3MmU0NGU0ZTUzOTU5Y2JjYzBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0LmgK
QEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKIAor
I2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CkBAIC00Nyw2ICs0OCw3IEBA
IHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0IHsKICAgICBVUkwgc2NvcGU7CiAgICAgRGlzcGxh
eSBkaXNwbGF5OwogICAgIFVSTCBzdGFydFVSTDsKKyAgICBDb2xvciB0aGVtZUNvbG9yOwogCiAg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owog
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxBcHBsaWNhdGlvbk1h
bmlmZXN0PiBkZWNvZGUoRGVjb2RlciYpOwpAQCAtNTUsNyArNTcsNyBAQCBzdHJ1Y3QgQXBwbGlj
YXRpb25NYW5pZmVzdCB7CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBBcHBsaWNhdGlv
bk1hbmlmZXN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVy
IDw8IG5hbWUgPDwgc2hvcnROYW1lIDw8IGRlc2NyaXB0aW9uIDw8IHNjb3BlIDw8IGRpc3BsYXkg
PDwgc3RhcnRVUkw7CisgICAgZW5jb2RlciA8PCBuYW1lIDw8IHNob3J0TmFtZSA8PCBkZXNjcmlw
dGlvbiA8PCBzY29wZSA8PCBkaXNwbGF5IDw8IHN0YXJ0VVJMIDw8IHRoZW1lQ29sb3I7CiB9CiAK
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC03NSw2ICs3Nyw4IEBAIE9wdGlvbmFsPEFwcGxp
Y2F0aW9uTWFuaWZlc3Q+IEFwcGxpY2F0aW9uTWFuaWZlc3Q6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LnN0YXJ0VVJMKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50aGVtZUNvbG9yKSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBw
bGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAKaW5kZXggZjg4Y2FkYTY2MGYzOWFkZWZhMDA2ZDA5
NWVjNTg3ZmIyOTM0NjIwZi4uNGNiMGRmNzcwY2Q4YWVlMjU0N2ZhYWUwYjU4MGJlMThmY2NlODFl
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0
L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcApAQCAt
MjgsMTQgKzI4LDE3IEBACiAKICNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCiAKKyNp
bmNsdWRlICJDU1NQYXJzZXIuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9Db25zb2xlTWVzc2FnZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUFwcGxpY2F0
aW9uTWFuaWZlc3QgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2UoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiBzb3VyY2Us
IGNvbnN0IFVSTCYgbWFuaWZlc3RVUkwsIGNvbnN0IFVSTCYgZG9jdW1lbnRVUkwpCitBcHBsaWNh
dGlvbk1hbmlmZXN0IEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlKERvY3VtZW50JiBk
b2N1bWVudCwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFVSTCYgbWFuaWZlc3RVUkwsIGNv
bnN0IFVSTCYgZG9jdW1lbnRVUkwpCiB7Ci0gICAgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlciBw
YXJzZXIgeyAmc2NyaXB0RXhlY3V0aW9uQ29udGV4dCB9OworICAgIEFwcGxpY2F0aW9uTWFuaWZl
c3RQYXJzZXIgcGFyc2VyIHsgJmRvY3VtZW50IH07CiAgICAgcmV0dXJuIHBhcnNlci5wYXJzZU1h
bmlmZXN0KHNvdXJjZSwgbWFuaWZlc3RVUkwsIGRvY3VtZW50VVJMKTsKIH0KIApAQCAtNDUsOCAr
NDgsOCBAQCBBcHBsaWNhdGlvbk1hbmlmZXN0IEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBh
cnNlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdAogICAgIHJldHVybiBwYXJzZXIucGFyc2VN
YW5pZmVzdChzb3VyY2UsIG1hbmlmZXN0VVJMLCBkb2N1bWVudFVSTCk7CiB9CiAKLUFwcGxpY2F0
aW9uTWFuaWZlc3RQYXJzZXI6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIoUmVmUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ+IGNvbnNvbGVDb250ZXh0KQotICAgIDogbV9jb25zb2xlQ29udGV4
dChjb25zb2xlQ29udGV4dCkKK0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OkFwcGxpY2F0aW9u
TWFuaWZlc3RQYXJzZXIoUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1l
bnQoZG9jdW1lbnQpCiB7CiB9CiAKQEAgLTc0LDYgKzc3LDEwIEBAIEFwcGxpY2F0aW9uTWFuaWZl
c3QgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VNYW5pZmVzdChjb25zdCBTdHJpbmcm
IHRleHQsCiAgICAgcGFyc2VkTWFuaWZlc3QuZGVzY3JpcHRpb24gPSBwYXJzZURlc2NyaXB0aW9u
KCptYW5pZmVzdCk7CiAgICAgcGFyc2VkTWFuaWZlc3Quc2hvcnROYW1lID0gcGFyc2VTaG9ydE5h
bWUoKm1hbmlmZXN0KTsKICAgICBwYXJzZWRNYW5pZmVzdC5zY29wZSA9IHBhcnNlU2NvcGUoKm1h
bmlmZXN0LCBkb2N1bWVudFVSTCwgcGFyc2VkTWFuaWZlc3Quc3RhcnRVUkwpOworICAgIHBhcnNl
ZE1hbmlmZXN0LnRoZW1lQ29sb3IgPSBwYXJzZUNvbG9yKCptYW5pZmVzdCwgInRoZW1lX2NvbG9y
Il9zKTsKKworICAgIGlmIChtX2RvY3VtZW50KQorICAgICAgICBtX2RvY3VtZW50LT5wcm9jZXNz
QXBwbGljYXRpb25NYW5pZmVzdChwYXJzZWRNYW5pZmVzdCk7CiAKICAgICByZXR1cm4gcGFyc2Vk
TWFuaWZlc3Q7CiB9CkBAIC05MCw4ICs5Nyw4IEBAIHZvaWQgQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlcjo6bG9nTWFuaWZlc3RQcm9wZXJ0eUludmFsaWRVUkwoY29uc3QgU3RyaW5nJiBwcm9wCiAK
IHZvaWQgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6bG9nRGV2ZWxvcGVyV2FybmluZyhjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgaWYgKG1fY29uc29sZUNvbnRleHQpCi0gICAgICAg
IG1fY29uc29sZUNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKG1ha2VVbmlxdWU8SW5zcGVjdG9y
OjpDb25zb2xlTWVzc2FnZT4oSlNDOjpNZXNzYWdlU291cmNlOjpPdGhlciwgSlNDOjpNZXNzYWdl
VHlwZTo6TG9nLCBKU0M6Ok1lc3NhZ2VMZXZlbDo6V2FybmluZywgbWFrZVN0cmluZygiUGFyc2lu
ZyBhcHBsaWNhdGlvbiBtYW5pZmVzdCAiX3MsIG1fbWFuaWZlc3RVUkwuc3RyaW5nKCksICI6ICJf
cywgbWVzc2FnZSkpKTsKKyAgICBpZiAobV9kb2N1bWVudCkKKyAgICAgICAgbV9kb2N1bWVudC0+
YWRkQ29uc29sZU1lc3NhZ2UobWFrZVVuaXF1ZTxJbnNwZWN0b3I6OkNvbnNvbGVNZXNzYWdlPihK
U0M6Ok1lc3NhZ2VTb3VyY2U6Ok90aGVyLCBKU0M6Ok1lc3NhZ2VUeXBlOjpMb2csIEpTQzo6TWVz
c2FnZUxldmVsOjpXYXJuaW5nLCBtYWtlU3RyaW5nKCJQYXJzaW5nIGFwcGxpY2F0aW9uIG1hbmlm
ZXN0ICJfcywgbV9tYW5pZmVzdFVSTC5zdHJpbmcoKSwgIjogIl9zLCBtZXNzYWdlKSkpOwogfQog
CiBVUkwgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VTdGFydFVSTChjb25zdCBKU09O
OjpPYmplY3QmIG1hbmlmZXN0LCBjb25zdCBVUkwmIGRvY3VtZW50VVJMKQpAQCAtMjI5LDYgKzIz
NiwxMSBAQCBVUkwgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VTY29wZShjb25zdCBK
U09OOjpPYmplY3QmIG1hbmlmZXN0LCBjb25zdCBVUgogICAgIHJldHVybiBzY29wZVVSTDsKIH0K
IAorQ29sb3IgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VDb2xvcihjb25zdCBKU09O
OjpPYmplY3QmIG1hbmlmZXN0LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBy
ZXR1cm4gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHBhcnNlR2VuZXJpY1N0cmluZyhtYW5pZmVzdCwg
cHJvcGVydHlOYW1lKSk7Cit9CisKIFN0cmluZyBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpw
YXJzZUdlbmVyaWNTdHJpbmcoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCwgY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0LmdldFZhbHVl
KHByb3BlcnR5TmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxp
Y2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIu
aAppbmRleCAyMjU0MGY3MGQ1NjY1ZjBkNzQwYWU1NGRjNWNkM2Y3MDAyZDFkZjY5Li4zZjk2MmRi
YTgyMjEzZTFmODQ2NDk3MzQ1MTc0Zjk0ZmY4N2E1OWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBs
aWNhdGlvbk1hbmlmZXN0UGFyc2VyLmgKQEAgLTI4LDE4ICsyOCwyMCBAQAogI2lmIEVOQUJMRShB
UFBMSUNBVElPTl9NQU5JRkVTVCkKIAogI2luY2x1ZGUgIkFwcGxpY2F0aW9uTWFuaWZlc3QuaCIK
LSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDb2xvcjsKK2NsYXNzIERv
Y3VtZW50OworCiBjbGFzcyBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyIHsKIHB1YmxpYzoKLSAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgQXBwbGljYXRpb25NYW5pZmVzdCBwYXJzZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiBtYW5pZmVzdFVSTCwg
Y29uc3QgVVJMJiBkb2N1bWVudFVSTCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEFwcGxp
Y2F0aW9uTWFuaWZlc3QgcGFyc2UoRG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBVUkwm
IG1hbmlmZXN0VVJMLCBjb25zdCBVUkwmIGRvY3VtZW50VVJMKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgQXBwbGljYXRpb25NYW5pZmVzdCBwYXJzZShjb25zdCBTdHJpbmcmLCBjb25zdCBV
UkwmIG1hbmlmZXN0VVJMLCBjb25zdCBVUkwmIGRvY3VtZW50VVJMKTsKIAogcHJpdmF0ZToKLSAg
ICBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyKFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
Pik7CisgICAgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcihSZWZQdHI8RG9jdW1lbnQ+KTsKICAg
ICBBcHBsaWNhdGlvbk1hbmlmZXN0IHBhcnNlTWFuaWZlc3QoY29uc3QgU3RyaW5nJiwgY29uc3Qg
VVJMJiwgY29uc3QgVVJMJik7CiAKICAgICBVUkwgcGFyc2VTdGFydFVSTChjb25zdCBKU09OOjpP
YmplY3QmLCBjb25zdCBVUkwmKTsKQEAgLTQ5LDEzICs1MSwxNCBAQCBwcml2YXRlOgogICAgIFN0
cmluZyBwYXJzZVNob3J0TmFtZShjb25zdCBKU09OOjpPYmplY3QmKTsKICAgICBVUkwgcGFyc2VT
Y29wZShjb25zdCBKU09OOjpPYmplY3QmLCBjb25zdCBVUkwmLCBjb25zdCBVUkwmKTsKIAorICAg
IENvbG9yIHBhcnNlQ29sb3IoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpOwogICAgIFN0cmluZyBwYXJzZUdlbmVyaWNTdHJpbmcoY29uc3QgSlNPTjo6T2Jq
ZWN0JiwgY29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lkIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RB
U3RyaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgbG9nTWFuaWZlc3RQcm9wZXJ0eUludmFs
aWRVUkwoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBsb2dEZXZlbG9wZXJXYXJuaW5nKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSk7CiAKLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4g
bV9jb25zb2xlQ29udGV4dDsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAg
VVJMIG1fbWFuaWZlc3RVUkw7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBiNmM4
YWU0MWVmYjNiZGRjYTI3ODVlZjlkNTJkOGRjNjFkMzk1ZjNiLi5jNWVjZjc0MjA2ZjhkZDAxOTk5
YTBhMjliMTUzMGUxNzc0ZjM2OTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNo
ZS5oIgorI2luY2x1ZGUgIkFwcGxpY2F0aW9uTWFuaWZlc3QuaCIKICNpbmNsdWRlICJBdHRyLmgi
CiAjaW5jbHVkZSAiQmVmb3JlVW5sb2FkRXZlbnQuaCIKICNpbmNsdWRlICJDREFUQVNlY3Rpb24u
aCIKQEAgLTM4NDcsMTggKzM4NDgsMjEgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlVmlld3BvcnRB
cmd1bWVudHMoKQogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudDo6cHJvY2Vzc1RoZW1lQ29sb3Io
Y29uc3QgU3RyaW5nJiB0aGVtZUNvbG9yU3RyaW5nKQordm9pZCBEb2N1bWVudDo6cHJvY2Vzc01l
dGFFbGVtZW50VGhlbWVDb2xvcihjb25zdCBTdHJpbmcmIHRoZW1lQ29sb3JTdHJpbmcpCiB7Ci0g
ICAgYXV0byB0aGVtZUNvbG9yID0gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHRoZW1lQ29sb3JTdHJp
bmcpOwotICAgIGlmICh0aGVtZUNvbG9yID09IG1fdGhlbWVDb2xvcikKKyAgICBtX21ldGFFbGVt
ZW50VGhlbWVDb2xvciA9IENTU1BhcnNlcjo6cGFyc2VDb2xvcih0aGVtZUNvbG9yU3RyaW5nKTsK
KyAgICBpZiAobV9tZXRhRWxlbWVudFRoZW1lQ29sb3IgIT0gdGhlbWVDb2xvcigpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3RoZW1lQ29sb3IgPSBXVEZNb3ZlKHRoZW1lQ29sb3IpOworICAg
IHRoZW1lQ29sb3JDaGFuZ2VkKCk7Cit9CiAKK3ZvaWQgRG9jdW1lbnQ6OnRoZW1lQ29sb3JDaGFu
Z2VkKCkKK3sKICAgICBzY2hlZHVsZVJlbmRlcmluZ1VwZGF0ZSh7IH0pOwogCiAgICAgaWYgKGF1
dG8qIHBhZ2UgPSB0aGlzLT5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgp
LnRoZW1lQ29sb3JDaGFuZ2VkKG1fdGhlbWVDb2xvcik7CisgICAgICAgIHBhZ2UtPmNocm9tZSgp
LmNsaWVudCgpLnRoZW1lQ29sb3JDaGFuZ2VkKCk7CiAKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJ
TkcpCiAgICAgaWYgKGF1dG8qIHZpZXcgPSByZW5kZXJWaWV3KCkpIHsKQEAgLTM5NzIsNiArMzk3
NiwyMCBAQCB2b2lkIERvY3VtZW50Ojpwcm9jZXNzUmVmZXJyZXJQb2xpY3koY29uc3QgU3RyaW5n
JiBwb2xpY3ksIFJlZmVycmVyUG9saWN5U291cmNlCiAgICAgc2V0UmVmZXJyZXJQb2xpY3kocmVm
ZXJyZXJQb2xpY3kudmFsdWUoKSk7CiB9CiAKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZF
U1QpCisKK3ZvaWQgRG9jdW1lbnQ6OnByb2Nlc3NBcHBsaWNhdGlvbk1hbmlmZXN0KGNvbnN0IEFw
cGxpY2F0aW9uTWFuaWZlc3QmIGFwcGxpY2F0aW9uTWFuaWZlc3QpCit7CisgICAgbV9hcHBsaWNh
dGlvbk1hbmlmZXN0VGhlbWVDb2xvciA9IGFwcGxpY2F0aW9uTWFuaWZlc3QudGhlbWVDb2xvcjsK
KyAgICBpZiAobV9hcHBsaWNhdGlvbk1hbmlmZXN0VGhlbWVDb2xvciAhPSB0aGVtZUNvbG9yKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIHRoZW1lQ29sb3JDaGFuZ2VkKCk7Cit9CisKKworI2Vu
ZGlmIC8vIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKKwogTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cyBEb2N1bWVudDo6cHJlcGFyZU1vdXNlRXZlbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IExheW91dFBvaW50JiBkb2N1bWVudFBvaW50LCBjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogewogICAgIGlmICghaGFzTGl2aW5nUmVuZGVyVHJlZSgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAppbmRleCBiYWVhZmIxNmMzMjc0ZDYwNWNmY2Q1ZWI1YzRhMDBl
YjFhN2QyZjg1Li5jZWM0MDFjNWU3Mjc5NzgwODI1YjNlZWQ3NDZkMTJlMTQ2NzY3NDIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaApAQCAtMjM0LDYgKzIzNCw3IEBAIGNsYXNzIFhQYXRoRXhwcmVzc2lv
bjsKIGNsYXNzIFhQYXRoTlNSZXNvbHZlcjsKIGNsYXNzIFhQYXRoUmVzdWx0OwogCitzdHJ1Y3Qg
QXBwbGljYXRpb25NYW5pZmVzdDsKIHN0cnVjdCBCb3VuZGFyeVBvaW50Owogc3RydWN0IEhpZ2hs
aWdodFJhbmdlRGF0YTsKIHN0cnVjdCBJbnRlcnNlY3Rpb25PYnNlcnZlckRhdGE7CkBAIC03NDAs
NyArNzQxLDcgQEAgcHVibGljOgogICAgIFNlY29uZHMgdGltZVNpbmNlRG9jdW1lbnRDcmVhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kb2N1bWVudENyZWF0
aW9uVGltZTsgfTsKICNlbmRpZgogCi0gICAgY29uc3QgQ29sb3ImIHRoZW1lQ29sb3IoKSBjb25z
dCB7IHJldHVybiBtX3RoZW1lQ29sb3I7IH0KKyAgICBjb25zdCBDb2xvciYgdGhlbWVDb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fbWV0YUVsZW1lbnRUaGVtZUNvbG9yLmlzVmFsaWQoKSA/IG1fbWV0
YUVsZW1lbnRUaGVtZUNvbG9yIDogbV9hcHBsaWNhdGlvbk1hbmlmZXN0VGhlbWVDb2xvcjsgfQog
CiAgICAgdm9pZCBzZXRUZXh0Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fdGV4dENvbG9y
ID0gY29sb3I7IH0KICAgICBjb25zdCBDb2xvciYgdGV4dENvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0Q29sb3I7IH0KQEAgLTkwOCwxMiArOTA5LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIHBy
b2Nlc3NEaXNhYmxlZEFkYXB0YXRpb25zKGNvbnN0IFN0cmluZyYgYWRhcHRhdGlvbnMpOwogICAg
IHZvaWQgdXBkYXRlVmlld3BvcnRBcmd1bWVudHMoKTsKICAgICB2b2lkIHByb2Nlc3NSZWZlcnJl
clBvbGljeShjb25zdCBTdHJpbmcmIHBvbGljeSwgUmVmZXJyZXJQb2xpY3lTb3VyY2UpOwotICAg
IHZvaWQgcHJvY2Vzc1RoZW1lQ29sb3IoY29uc3QgU3RyaW5nJiB0aGVtZUNvbG9yKTsKKyAgICB2
b2lkIHByb2Nlc3NNZXRhRWxlbWVudFRoZW1lQ29sb3IoY29uc3QgU3RyaW5nJiB0aGVtZUNvbG9y
KTsKIAogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKQogICAgIHZvaWQgcHJvY2Vzc0NvbG9yU2No
ZW1lKGNvbnN0IFN0cmluZyYgY29sb3JTY2hlbWUpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQVBQ
TElDQVRJT05fTUFOSUZFU1QpCisgICAgdm9pZCBwcm9jZXNzQXBwbGljYXRpb25NYW5pZmVzdChj
b25zdCBBcHBsaWNhdGlvbk1hbmlmZXN0Jik7CisjZW5kaWYgLy8gRU5BQkxFKEFQUExJQ0FUSU9O
X01BTklGRVNUKQorCiAgICAgLy8gUmV0dXJucyB0aGUgb3duaW5nIGVsZW1lbnQgaW4gdGhlIHBh
cmVudCBkb2N1bWVudC4KICAgICAvLyBSZXR1cm5zIG51bGxwdHIgaWYgdGhpcyBpcyB0aGUgdG9w
IGxldmVsIGRvY3VtZW50LgogICAgIFdFQkNPUkVfRVhQT1JUIEhUTUxGcmFtZU93bmVyRWxlbWVu
dCogb3duZXJFbGVtZW50KCkgY29uc3Q7CkBAIC0xNjY5LDYgKzE2NzQsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgdXBkYXRlVGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpOwogICAgIHZv
aWQgdXBkYXRlQmFzZVVSTCgpOwogCisgICAgdm9pZCB0aGVtZUNvbG9yQ2hhbmdlZCgpOworCiAg
ICAgdm9pZCBpbnZhbGlkYXRlQWNjZXNzS2V5Q2FjaGVTbG93Q2FzZSgpOwogICAgIHZvaWQgYnVp
bGRBY2Nlc3NLZXlDYWNoZSgpOwogCkBAIC0xNzg5LDcgKzE3OTYsOSBAQCBwcml2YXRlOgogCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEZvcm1Db250cm9sbGVyPiBtX2Zvcm1Db250cm9sbGVyOwogCi0g
ICAgQ29sb3IgbV90aGVtZUNvbG9yOworICAgIENvbG9yIG1fbWV0YUVsZW1lbnRUaGVtZUNvbG9y
OworICAgIENvbG9yIG1fYXBwbGljYXRpb25NYW5pZmVzdFRoZW1lQ29sb3I7CisKICAgICBDb2xv
ciBtX3RleHRDb2xvciB7IENvbG9yOjpibGFjayB9OwogICAgIENvbG9yIG1fbGlua0NvbG9yOwog
ICAgIENvbG9yIG1fdmlzaXRlZExpbmtDb2xvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1ldGFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGFF
bGVtZW50LmNwcAppbmRleCBkM2NjMTQ3YTcyYjQwOWIzOGZiN2IzN2IxNzFkMjMzNjEzZTE2NDM1
Li5jODljZjg1NTdmNjM1ZDYwODU5MjcyMmExYTc2MzRlMzY3ODcwMTViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWV0YUVsZW1lbnQuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgSFRNTE1l
dGFFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNv
bnN0IEF0b21TdHJpCiAgICAgSFRNTEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQobmFtZSwgb2xk
VmFsdWUsIG5ld1ZhbHVlLCByZWFzb24pOwogCiAgICAgaWYgKG5hbWUgPT0gbmFtZUF0dHIgJiYg
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uob2xkVmFsdWUsICJ0aGVtZS1jb2xvciIpICYm
ICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuZXdWYWx1ZSwgInRoZW1lLWNvbG9yIikp
Ci0gICAgICAgIGRvY3VtZW50KCkucHJvY2Vzc1RoZW1lQ29sb3IoZW1wdHlTdHJpbmcoKSk7Cisg
ICAgICAgIGRvY3VtZW50KCkucHJvY2Vzc01ldGFFbGVtZW50VGhlbWVDb2xvcihlbXB0eVN0cmlu
ZygpKTsKIH0KIAogdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQpAQCAtOTAsNyArOTAs
NyBAQCB2b2lkIEhUTUxNZXRhRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3RvcihSZW1vdmFsVHlw
ZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZQogICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJv
bUFuY2VzdG9yKHJlbW92YWxUeXBlLCBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlKTsKIAogICAgIGlm
ICghaXNDb25uZWN0ZWQoKSAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lKCks
ICJ0aGVtZS1jb2xvciIpKQotICAgICAgICBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlLmRvY3VtZW50
KCkucHJvY2Vzc1RoZW1lQ29sb3IoZW1wdHlTdHJpbmcoKSk7CisgICAgICAgIG9sZFBhcmVudE9m
UmVtb3ZlZFRyZWUuZG9jdW1lbnQoKS5wcm9jZXNzTWV0YUVsZW1lbnRUaGVtZUNvbG9yKGVtcHR5
U3RyaW5nKCkpOwogfQogCiB2b2lkIEhUTUxNZXRhRWxlbWVudDo6cHJvY2VzcygpCkBAIC0xMTIs
NyArMTEyLDcgQEAgdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnByb2Nlc3MoKQogICAgICAgICBkb2N1
bWVudCgpLnByb2Nlc3NDb2xvclNjaGVtZShjb250ZW50VmFsdWUpOwogI2VuZGlmCiAgICAgZWxz
ZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSgpLCAidGhlbWUtY29sb3Ii
KSkKLSAgICAgICAgZG9jdW1lbnQoKS5wcm9jZXNzVGhlbWVDb2xvcihjb250ZW50VmFsdWUpOwor
ICAgICAgICBkb2N1bWVudCgpLnByb2Nlc3NNZXRhRWxlbWVudFRoZW1lQ29sb3IoY29udGVudFZh
bHVlKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUoKSwgImZvcm1hdC1kZXRlY3Rpb24iKSkKICAgICAgICAg
ZG9jdW1lbnQoKS5wcm9jZXNzRm9ybWF0RGV0ZWN0aW9uKGNvbnRlbnRWYWx1ZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQXBwbGljYXRpb25NYW5pZmVz
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQXBwbGljYXRpb25NYW5p
ZmVzdC5jcHAKaW5kZXggMDJiOWVkMjZiYTZhOWEzODk3YjVlYzE0ZDAyNjBlNDdjZTQxYmFkNC4u
MWE2YzJkZDU2N2Y2NDJkNDVhMDFjNGEyMjc3NzA0OGJmZWI3MTU2MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEFwcGxpY2F0aW9uTWFuaWZlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRBcHBsaWNhdGlvbk1hbmlmZXN0
LmNwcApAQCAtNTksMTIgKzU5LDEyIEBAIFN0cmluZyBDYWNoZWRBcHBsaWNhdGlvbk1hbmlmZXN0
OjplbmNvZGluZygpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1l
KCk7CiB9CiAKLU9wdGlvbmFsPEFwcGxpY2F0aW9uTWFuaWZlc3Q+IENhY2hlZEFwcGxpY2F0aW9u
TWFuaWZlc3Q6OnByb2Nlc3MoY29uc3QgVVJMJiBtYW5pZmVzdFVSTCwgY29uc3QgVVJMJiBkb2N1
bWVudFVSTCwgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpCitPcHRpb25hbDxBcHBsaWNhdGlvbk1hbmlmZXN0PiBDYWNoZWRBcHBsaWNhdGlvbk1h
bmlmZXN0Ojpwcm9jZXNzKGNvbnN0IFVSTCYgbWFuaWZlc3RVUkwsIGNvbnN0IFVSTCYgZG9jdW1l
bnRVUkwsIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFtX3RleHQpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpCi0gICAgICAgIHJldHVybiBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZSgqc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgKm1fdGV4dCwgbWFuaWZlc3RVUkwsIGRvY3VtZW50VVJMKTsK
KyAgICBpZiAoZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBBcHBsaWNhdGlvbk1hbmlmZXN0UGFy
c2VyOjpwYXJzZSgqZG9jdW1lbnQsICptX3RleHQsIG1hbmlmZXN0VVJMLCBkb2N1bWVudFVSTCk7
CiAgICAgcmV0dXJuIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlKCptX3RleHQsIG1h
bmlmZXN0VVJMLCBkb2N1bWVudFVSTCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRBcHBsaWNhdGlvbk1hbmlmZXN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQXBwbGljYXRpb25NYW5pZmVzdC5oCmluZGV4IDVlYWMxMGUy
MmY1YzA1ODA3NjQ2MWRlNDU4YTE1OTE5MDRhZGZmOWMuLmQyNzZmNDEzMWQyNjQ1NTU5MTUxOGI1
NGVkZmQzMTIzMTA2NTlhNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRBcHBsaWNhdGlvbk1hbmlmZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZEFwcGxpY2F0aW9uTWFuaWZlc3QuaApAQCAtMzMsMTQgKzMzLDE0IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2Ns
YXNzIERvY3VtZW50OwogY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKIAogY2xhc3MgQ2FjaGVk
QXBwbGljYXRpb25NYW5pZmVzdCBmaW5hbCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7CiBwdWJs
aWM6CiAgICAgQ2FjaGVkQXBwbGljYXRpb25NYW5pZmVzdChDYWNoZWRSZXNvdXJjZVJlcXVlc3Qm
JiwgY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBjb25zdCBDb29raWVKYXIqKTsKIAotICAgIE9wdGlv
bmFsPHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0PiBwcm9jZXNzKGNvbnN0IFVSTCYgbWFuaWZl
c3RVUkwsIGNvbnN0IFVSTCYgZG9jdW1lbnRVUkwsIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250
ZXh0PiA9IG51bGxwdHIpOworICAgIE9wdGlvbmFsPHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0
PiBwcm9jZXNzKGNvbnN0IFVSTCYgbWFuaWZlc3RVUkwsIGNvbnN0IFVSTCYgZG9jdW1lbnRVUkws
IFJlZlB0cjxEb2N1bWVudD4gPSBudWxscHRyKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGZpbmlz
aExvYWRpbmcoU2hhcmVkQnVmZmVyKiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJikgb3ZlcnJp
ZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCBkZjRjOWMxZjg0ZWNhMjBlN2Ix
ZmJkMzdjMTQzOGM1ZTBhYmIwZDU5Li5jZjE2YWU2ZWE0NzViYmZjNmI1OWU0NDMyNzQ0YjM5NTBi
ODFhMDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTIzMSw4ICsyMzEsOCBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIENvbG9yIHVuZGVybGF5Q29sb3IoKSBjb25zdCB7IHJl
dHVybiBDb2xvcigpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDb2xvckNoYW5nZWQoQ29s
b3IpIGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29s
b3JEaWRDaGFuZ2UoQ29sb3IpIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNvbG9y
Q2hhbmdlZCgpIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWdlRXh0ZW5kZWRCYWNrZ3Jv
dW5kQ29sb3JEaWRDaGFuZ2UoKSBjb25zdCB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBleGNlZWRl
ZERhdGFiYXNlUXVvdGEoRnJhbWUmLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgRGF0YWJh
c2VEZXRhaWxzKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggZTUyYWE3OWMzYTU4MGRmNjI4YzI4YmVjYzI5ZDMz
MGQ3ZmU2MTNhNi4uMTc0NjM2M2IzZWVjYzcxYjZkY2I0OTJlMjM1MGJmMzBjM2RiNzAwYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAKQEAgLTQwMDgsNyArNDAwOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyb290
QmFja2dyb3VuZENvbG9yT3JUcmFuc3BhcmVuY3lDaGFuZ2VkKCkKICAgICBtX3Jvb3RFeHRlbmRl
ZEJhY2tncm91bmRDb2xvciA9IGV4dGVuZGVkQmFja2dyb3VuZENvbG9yOwogICAgIAogICAgIGlm
IChleHRlbmRlZEJhY2tncm91bmRDb2xvckNoYW5nZWQpIHsKLSAgICAgICAgcGFnZSgpLmNocm9t
ZSgpLmNsaWVudCgpLnBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvckRpZENoYW5nZShtX3Jvb3RF
eHRlbmRlZEJhY2tncm91bmRDb2xvcik7CisgICAgICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQo
KS5wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3JEaWRDaGFuZ2UoKTsKICAgICAgICAgCiAjaWYg
RU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgICAgICB1cGRhdGVMYXllckZvck92ZXJoYW5nQXJl
YXNCYWNrZ3JvdW5kQ29sb3IoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oCmluZGV4IGJjZTg0NjY5NjZi
ZDcxNGM1ODViMTI5NmJmNjVkOTUyNDgxZDJmMmUuLmExMjAzNzBlMmY1ODBlNjM0M2QzODMzYjE3
NmQ0MTQ2ZjRkMTkwODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaApAQCAtMjYsNiArMjYsMTIgQEAK
ICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L1dLRm91
bmRhdGlvbi5oPgogCisjaWYgVEFSR0VUX09TX0lQSE9ORQorQGNsYXNzIFVJQ29sb3I7CisjZWxz
ZQorQGNsYXNzIE5TQ29sb3I7CisjZW5kaWYKKwogTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KIAog
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLQXBwbGljYXRpb25NYW5pZmVzdERpc3BsYXlN
b2RlKSB7CkBAIC00NSw2ICs1MSwxMiBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoMTAuMTMu
NCksIGlvcygxMS4zKSkKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNV
UkwgKnN0YXJ0VVJMOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tBcHBsaWNh
dGlvbk1hbmlmZXN0RGlzcGxheU1vZGUgZGlzcGxheU1vZGU7CiAKKyNpZiBUQVJHRVRfT1NfSVBI
T05FCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIG51bGxhYmxlLCBjb3B5KSBVSUNv
bG9yICp0aGVtZUNvbG9yIFdLX0FQSV9BVkFJTEFCTEUoaW9zKFdLX0lPU19UQkEpKTsKKyNlbHNl
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIG51bGxhYmxlLCBjb3B5KSBOU0NvbG9y
ICp0aGVtZUNvbG9yIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSkpOworI2VuZGlm
CisKICsgKF9XS0FwcGxpY2F0aW9uTWFuaWZlc3QgKilhcHBsaWNhdGlvbk1hbmlmZXN0RnJvbUpT
T046KE5TU3RyaW5nICopanNvbiBtYW5pZmVzdFVSTDoobnVsbGFibGUgTlNVUkwgKiltYW5pZmVz
dFVSTCBkb2N1bWVudFVSTDoobnVsbGFibGUgTlNVUkwgKilkb2N1bWVudFVSTDsKIAogQGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FwcGxpY2F0
aW9uTWFuaWZlc3QubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBw
bGljYXRpb25NYW5pZmVzdC5tbQppbmRleCBmNTQwNzgzMjVkYTFiZmZmOGQ1N2FlMDY2MjM3ODcz
NDUxM2VhOTY1Li43MmU3ZGRmNWJhNGFjM2NkMWU3MGI1YjBmYTk2ODNiN2E3YzBjNGMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25N
YW5pZmVzdC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBw
bGljYXRpb25NYW5pZmVzdC5tbQpAQCAtMjYsMTAgKzI2LDIxIEBACiAjaW1wb3J0ICJjb25maWcu
aCIKICNpbXBvcnQgIl9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJbnRlcm5hbC5oIgogCisjaW1wb3J0
ICJDb2NvYUNvbG9yLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0FwcGxpY2F0aW9uTWFuaWZlc3QuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5oPgorI2ltcG9ydCA8
V2ViQ29yZS9Db2xvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db2xvckNvY29hLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorI2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQor
CisjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9ydCAiQXBwS2l0U1BJLmgiCisjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQorCiBAaW1wbGVtZW50YXRpb24gX1dLQXBwbGljYXRpb25NYW5pZmVzdAogCiAj
aWYgRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQpAQCAtNDcsNiArNTgsNyBAQCAtIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb2RlcjooTlNDb2RlciAqKWFEZWNvZGVyCiAgICAgTlNVUkwgKnNj
b3BlVVJMID0gW2FEZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNzXSBmb3JL
ZXk6QCJzY29wZSJdOwogICAgIE5TSW50ZWdlciBkaXNwbGF5ID0gW2FEZWNvZGVyIGRlY29kZUlu
dGVnZXJGb3JLZXk6QCJkaXNwbGF5Il07CiAgICAgTlNVUkwgKnN0YXJ0VVJMID0gW2FEZWNvZGVy
IGRlY29kZU9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNzXSBmb3JLZXk6QCJzdGFydF91cmwiXTsK
KyAgICBDb2NvYUNvbG9yICp0aGVtZUNvbG9yID0gW2FEZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xh
c3M6W0NvY29hQ29sb3IgY2xhc3NdIGZvcktleTpAInRoZW1lX2NvbG9yIl07CiAKICAgICBXZWJD
b3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0IGNvcmVBcHBsaWNhdGlvbk1hbmlmZXN0IHsKICAgICAg
ICAgV1RGOjpTdHJpbmcobmFtZSksCkBAIC01NCw3ICs2Niw4IEBAIC0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvZGVyOihOU0NvZGVyICopYURlY29kZXIKICAgICAgICAgV1RGOjpTdHJpbmcoZGVz
Y3JpcHRpb24pLAogICAgICAgICBVUkwoc2NvcGVVUkwpLAogICAgICAgICBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5PihkaXNwbGF5KSwKLSAgICAgICAg
VVJMKHN0YXJ0VVJMKQorICAgICAgICBVUkwoc3RhcnRVUkwpLAorICAgICAgICBXZWJDb3JlOjpD
b2xvcih0aGVtZUNvbG9yLkNHQ29sb3IpLAogICAgIH07CiAKICAgICBBUEk6Ok9iamVjdDo6Y29u
c3RydWN0SW5XcmFwcGVyPEFQSTo6QXBwbGljYXRpb25NYW5pZmVzdD4oc2VsZiwgV1RGTW92ZShj
b3JlQXBwbGljYXRpb25NYW5pZmVzdCkpOwpAQCAtODAsNiArOTMsNyBAQCAtICh2b2lkKWVuY29k
ZVdpdGhDb2RlcjooTlNDb2RlciAqKWFDb2RlcgogICAgIFthQ29kZXIgZW5jb2RlT2JqZWN0OnNl
bGYuc2NvcGUgZm9yS2V5OkAic2NvcGUiXTsKICAgICBbYUNvZGVyIGVuY29kZUludGVnZXI6c3Rh
dGljX2Nhc3Q8TlNJbnRlZ2VyPihfYXBwbGljYXRpb25NYW5pZmVzdC0+YXBwbGljYXRpb25NYW5p
ZmVzdCgpLmRpc3BsYXkpIGZvcktleTpAImRpc3BsYXkiXTsKICAgICBbYUNvZGVyIGVuY29kZU9i
amVjdDpzZWxmLnN0YXJ0VVJMIGZvcktleTpAInN0YXJ0X3VybCJdOworICAgIFthQ29kZXIgZW5j
b2RlT2JqZWN0OnNlbGYudGhlbWVDb2xvciBmb3JLZXk6QCJ0aGVtZV9jb2xvciJdOwogfQogCiAr
IChfV0tBcHBsaWNhdGlvbk1hbmlmZXN0ICopYXBwbGljYXRpb25NYW5pZmVzdEZyb21KU09OOihO
U1N0cmluZyAqKWpzb24gbWFuaWZlc3RVUkw6KE5TVVJMICopbWFuaWZlc3RVUkwgZG9jdW1lbnRV
Ukw6KE5TVVJMICopZG9jdW1lbnRVUkwKQEAgLTEyMyw2ICsxMzcsMTEgQEAgLSAoTlNVUkwgKilz
dGFydFVSTAogICAgIHJldHVybiBfYXBwbGljYXRpb25NYW5pZmVzdC0+YXBwbGljYXRpb25NYW5p
ZmVzdCgpLnN0YXJ0VVJMOwogfQogCistIChDb2NvYUNvbG9yICopdGhlbWVDb2xvcgoreworICAg
IHJldHVybiBXZWJDb3JlOjpwbGF0Zm9ybUNvbG9yKF9hcHBsaWNhdGlvbk1hbmlmZXN0LT5hcHBs
aWNhdGlvbk1hbmlmZXN0KCkudGhlbWVDb2xvcik7Cit9CisKIC0gKF9XS0FwcGxpY2F0aW9uTWFu
aWZlc3REaXNwbGF5TW9kZSlkaXNwbGF5TW9kZQogewogICAgIHN3aXRjaCAoX2FwcGxpY2F0aW9u
TWFuaWZlc3QtPmFwcGxpY2F0aW9uTWFuaWZlc3QoKS5kaXNwbGF5KSB7CkBAIC0xODYsNiArMjA1
LDExIEBAIC0gKE5TVVJMICopc3RhcnRVUkwKICAgICByZXR1cm4gbmlsOwogfQogCistIChDb2Nv
YUNvbG9yICopdGhlbWVDb2xvcgoreworICAgIHJldHVybiBuaWw7Cit9CisKIC0gKF9XS0FwcGxp
Y2F0aW9uTWFuaWZlc3REaXNwbGF5TW9kZSlkaXNwbGF5TW9kZQogewogICAgIHJldHVybiBfV0tB
cHBsaWNhdGlvbk1hbmlmZXN0RGlzcGxheU1vZGVCcm93c2VyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAppbmRleCBiNmFmNjc4OTk2NjA2MTg2YzVjMzIxMTA3OGQ2MDA2YjQ3
NGY1MTkxLi5iNWNkOTk2YzBkOTExMWU2MmFlNzA3MTBmMWQ5YTU4ZTY4NDc5NzIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNjU0LDcgKzY1NCw3IEBAIHB1Ymxp
YzoKICAgICBmbG9hdCB0b3BDb250ZW50SW5zZXQoKSBjb25zdCB7IHJldHVybiBtX3RvcENvbnRl
bnRJbnNldDsgfQogICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0KGZsb2F0KTsKIAotICAgIC8v
IENvcnJlc3BvbmRzIHRvIHRoZSB3ZWIgY29udGVudCdzIGA8bWV0YSBuYW1lPSJ0aGVtZS1jb2xv
ciIgY29udGVudD0iLi4uIj5gLgorICAgIC8vIENvcnJlc3BvbmRzIHRvIHRoZSB3ZWIgY29udGVu
dCdzIGA8bWV0YSBuYW1lPSJ0aGVtZS1jb2xvciI+YCBvciBhcHBsaWNhdGlvbiBtYW5pZmVzdCdz
IGAidGhlbWVfY29sb3IiYC4KICAgICBXZWJDb3JlOjpDb2xvciB0aGVtZUNvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV90aGVtZUNvbG9yOyB9CiAKICAgICBXZWJDb3JlOjpDb2xvciB1bmRlcmxheUNv
bG9yKCkgY29uc3QgeyByZXR1cm4gbV91bmRlcmxheUNvbG9yOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCmluZGV4IDVmYzg1NTYzNzYwZWE3NWVjMTJlZDE0YTllMjczNjgxZjI1MWMwOTMuLjcwYzZl
YWI4MWY5YTJkMThiMmE4ZDhlOTZkYTk1YTk4YjgxYzU5NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCkBAIC0xMTU0LDEyICsxMTU0LDEyIEBAIENvbG9yIFdlYkNocm9tZUNsaWVudDo6dW5kZXJs
YXlDb2xvcigpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGFnZS51bmRlcmxheUNvbG9yKCk7CiB9CiAK
LXZvaWQgV2ViQ2hyb21lQ2xpZW50Ojp0aGVtZUNvbG9yQ2hhbmdlZChDb2xvciAvKiB0aGVtZUNv
bG9yICovKSBjb25zdAordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnRoZW1lQ29sb3JDaGFuZ2VkKCkg
Y29uc3QKIHsKICAgICBtX3BhZ2UudGhlbWVDb2xvckNoYW5nZWQoKTsKIH0KIAotdm9pZCBXZWJD
aHJvbWVDbGllbnQ6OnBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvckRpZENoYW5nZShDb2xvciAv
KiBiYWNrZ3JvdW5kQ29sb3IgKi8pIGNvbnN0Cit2b2lkIFdlYkNocm9tZUNsaWVudDo6cGFnZUV4
dGVuZGVkQmFja2dyb3VuZENvbG9yRGlkQ2hhbmdlKCkgY29uc3QKIHsKICAgICBtX3BhZ2UucGFn
ZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yRGlkQ2hhbmdlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgK
aW5kZXggNTZjZjZiOTJlZDlhMTAzNmRiZDdkMDY0ODYzYzRlNzY4MTQyY2RlZi4uMWUzNjBlMzBk
MzRhNjEyNTAyZGFiN2IyMTZiMzZlOGUxYjNiOTYzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAt
MzI4LDggKzMyOCw4IEBAIHByaXZhdGU6CiAKICAgICBXZWJDb3JlOjpDb2xvciB1bmRlcmxheUNv
bG9yKCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIHRoZW1lQ29sb3JDaGFuZ2VkKFdlYkNvcmU6
OkNvbG9yKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIHBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xv
ckRpZENoYW5nZShXZWJDb3JlOjpDb2xvcikgY29uc3QgZmluYWw7CisgICAgdm9pZCB0aGVtZUNv
bG9yQ2hhbmdlZCgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgcGFnZUV4dGVuZGVkQmFja2dyb3Vu
ZENvbG9yRGlkQ2hhbmdlKCkgY29uc3QgZmluYWw7CiAgICAgCiAgICAgdm9pZCB3aGVlbEV2ZW50
SGFuZGxlcnNDaGFuZ2VkKGJvb2wpIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDk2NjViODM0NWJiNDIxOTg3MWQ5ZmVkMDIyMDFm
NzVmYjM3ZDAyNC4uOGRhZjY0M2QyMGJlMjBlYmRmYWNmNDI0YzVjMTdiZDQzN2M4Yzc5ZCAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI1IEBACisyMDIxLTA0LTE5ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBQYXJzZSBgdGhlbWVfY29sb3JgIGluIHdlYiBhcHBsaWNhdGlvbiBtYW5pZmVzdHMg
YW5kIHBhc3MgaXQgYWxvbmcgdG8gYC1bV0tXZWJWaWV3IHRoZW1lQ29sb3JdYAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0Nzk2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChBcHBs
aWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6dGVzdFRoZW1lQ29sb3IpOiBBZGRlZC4KKyAgICAg
ICAgKFRFU1RfRi5BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdC5UaGVtZUNvbG9yKTogQWRk
ZWQuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0FwcGxpY2F0
aW9uTWFuaWZlc3QubW06CisgICAgICAgIChURVNULkFwcGxpY2F0aW9uTWFuaWZlc3RCYXNpYyk6
CisgICAgICAgIChURVNULkFwcGxpY2F0aW9uTWFuaWZlc3RDb2RpbmcpOgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdUaGVtZUNvbG9yLm1tOiBS
ZW5hbWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9IVE1MTWV0
YVRoZW1lQ29sb3IubW0uCisgICAgICAgIChURVNULldLV2ViVmlld1RoZW1lQ29sb3IuQXBwbGlj
YXRpb25NYW5pZmVzdCk6CisgICAgICAgIChURVNULldLV2ViVmlld1RoZW1lQ29sb3IuTWV0YUVs
ZW1lbnRPdmVycmlkZXNBcHBsaWNhdGlvbk1hbmlmZXN0KToKKyAgICAgICAgUmVuYW1lIHRoaXMg
ZmlsZSBub3cgdGhhdCBpdCBhbHNvIGRlYWxzIHdpdGggd2ViIGFwcGxpY2F0aW9uIG1hbmlmZXN0
IChpbiBhZGRpdGlvbiB0byBgPG1ldGEgbmFtZT0idGhlbWUtY29sb3IiPmApLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisKIDIwMjEtMDQtMTkgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIFdQRSBNaW5pYnJvd3NlciBidWlsZCB3YXJuaW5nIGZpeC4K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDMxM2E5NzhmMGQ1MjUwOTFiM2EyYTI2N2MwMzI4
MTFiMGM3ZDc1YS4uMjRiZjdhODVkNjlkMWM1MTU4YjY2NzYxOGUzMGRmMWE3ODI2N2Q5NCAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg2Niw3ICs4NjYsNyBAQAogCQk5M0Y3RTg2RjE0REM4
RTVDMDBDODRBOTkgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0RnJhbWVzX0J1bmRs
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y3
RTg2RTE0REM4RTVCMDBDODRBOTkgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0RnJh
bWVzX0J1bmRsZS5jcHAgKi87IH07CiAJCTk1MEU0Q0MxMjUyRTc1MjQwMDcxNjU5RiAvKiBpT1NT
dHlsdXNTdXBwb3J0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTUwRTRDQzAyNTJFNzUyMzAwNzE2NTlGIC8qIGlPU1N0eWx1c1N1cHBvcnQubW0gKi87
IH07CiAJCTk1M0FCQjM1MjVDMEQ2ODIwMDRDOEI3MyAvKiBQYWdlRXh0ZW5kZWRCYWNrZ3JvdW5k
Q29sb3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NTNBQkIzNDI1QzBENjgxMDA0QzhCNzMgLyogUGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yLm1t
ICovOyB9OwotCQk5NUE1MjQ5NTI1ODFBMTBEMDA0NjFGRTkgLyogSFRNTE1ldGFUaGVtZUNvbG9y
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTVBNTI0
OTQyNTgxQTEwRDAwNDYxRkU5IC8qIEhUTUxNZXRhVGhlbWVDb2xvci5tbSAqLzsgfTsKKwkJOTVB
NTI0OTUyNTgxQTEwRDAwNDYxRkU5IC8qIFdLV2ViVmlld1RoZW1lQ29sb3IubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NUE1MjQ5NDI1ODFBMTBEMDA0
NjFGRTkgLyogV0tXZWJWaWV3VGhlbWVDb2xvci5tbSAqLzsgfTsKIAkJOTVCNkIzQjcyNTFFQkYy
RjAwRkM0MzgyIC8qIE1lZGlhRG9jdW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NUI2QjNCNjI1MUVCRjJGMDBGQzQzODIgLyogTWVkaWFEb2N1
bWVudC5tbSAqLzsgfTsKIAkJOTk4NEZBQ0MxQ0ZGQUY2MDAwOEQxOThDIC8qIFdLV2ViVmlld1Rl
eHRJbnB1dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk5ODRGQUNBMUNGRkFFRUUwMDhEMTk4QyAvKiBXS1dlYlZpZXdUZXh0SW5wdXQubW0gKi87IH07
CiAJCTk5ODRGQUNFMUNGRkIwOTAwMDhEMTk4QyAvKiBlZGl0YWJsZS1ib2R5Lmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk4NEZBQ0Qx
Q0ZGQjAzODAwOEQxOThDIC8qIGVkaXRhYmxlLWJvZHkuaHRtbCAqLzsgfTsKQEAgLTI1NTMsNyAr
MjU1Myw3IEBACiAJCTkzRjdFODZFMTREQzhFNUIwMEM4NEE5OSAvKiBOZXdGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXRGcmFtZXNfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZyYW1lc19CdW5kbGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NTBFNENDMDI1MkU3NTIzMDA3MTY1
OUYgLyogaU9TU3R5bHVzU3VwcG9ydC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IGlPU1N0eWx1c1N1cHBvcnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTk1M0FCQjM0MjVDMEQ2ODEwMDRDOEI3MyAvKiBQYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29s
b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQYWdlRXh0ZW5k
ZWRCYWNrZ3JvdW5kQ29sb3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk1QTUy
NDk0MjU4MUExMEQwMDQ2MUZFOSAvKiBIVE1MTWV0YVRoZW1lQ29sb3IubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBIVE1MTWV0YVRoZW1lQ29sb3IubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk1QTUyNDk0MjU4MUExMEQwMDQ2MUZFOSAvKiBXS1dl
YlZpZXdUaGVtZUNvbG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV0tXZWJWaWV3VGhlbWVDb2xvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTVCNkIzQjYyNTFFQkYyRjAwRkM0MzgyIC8qIE1lZGlhRG9jdW1lbnQubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNZWRpYURvY3VtZW50Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5OTg0RkFDQTFDRkZBRUVFMDA4RDE5OEMgLyogV0tXZWJWaWV3
VGV4dElucHV0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tX
ZWJWaWV3VGV4dElucHV0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTg0RkFD
RDFDRkZCMDM4MDA4RDE5OEMgLyogZWRpdGFibGUtYm9keS5odG1sICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5o
dG1sOyBwYXRoID0gImVkaXRhYmxlLWJvZHkuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0zNDA4LDcgKzM0MDgsNiBAQAogCQkJCTA3RTFGNkEwMUZGQzNBMDgwMDk2QzdFQyAv
KiBHZXREaXNwbGF5TWVkaWEubW0gKi8sCiAJCQkJMkRBREYyNjIyMUNCOEYzMjAwM0QzRTNBIC8q
IEdldFJlc291cmNlRGF0YS5tbSAqLywKIAkJCQk0NjVFMjgwNjI1NUIyQTY5MDA2M0E3ODcgLyog
R1BVUHJvY2Vzcy5tbSAqLywKLQkJCQk5NUE1MjQ5NDI1ODFBMTBEMDA0NjFGRTkgLyogSFRNTE1l
dGFUaGVtZUNvbG9yLm1tICovLAogCQkJCTUxQUYyM0RFMUVGMUEzNzIwMDcyRjI4MSAvKiBJY29u
TG9hZGluZ0RlbGVnYXRlLm1tICovLAogCQkJCUVCMjMwRDNFMjQ1RTcyNjMwMEM2NkFEMSAvKiBJ
REJDaGVja3BvaW50V0FMLm1tICovLAogCQkJCTUxMDQ3Nzc1MUQyOThFMDMwMDk3NDdFQiAvKiBJ
REJEZWxldGVSZWNvdmVyeS5tbSAqLywKQEAgLTM2MDcsNiArMzYwNiw3IEBACiAJCQkJOTNGNTZE
QTgxRTVGOTE4MTAwM0VERTg0IC8qIFdLV2ViVmlld1NuYXBzaG90Lm1tICovLAogCQkJCUNEN0Y4
OURCMjJBODZDREEwMEQ2ODNBRSAvKiBXS1dlYlZpZXdTdXNwZW5kQWxsTWVkaWFQbGF5YmFjay5t
bSAqLywKIAkJCQk5OTg0RkFDQTFDRkZBRUVFMDA4RDE5OEMgLyogV0tXZWJWaWV3VGV4dElucHV0
Lm1tICovLAorCQkJCTk1QTUyNDk0MjU4MUExMEQwMDQ2MUZFOSAvKiBXS1dlYlZpZXdUaGVtZUNv
bG9yLm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSAiV2ViS2l0IENvY29hIjsKIAkJCXBhdGggPSBX
ZWJLaXRDb2NvYTsKQEAgLTU0MjksNyArNTQyOSw2IEBACiAJCQkJN0NDRTdFRkExQTQxMUFFNjAw
NDQ3QzRDIC8qIEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTdDQ0U3RUMxMUE0MTFBN0UwMDQ0N0M0QyAvKiBIVE1MQ29sbGVjdGlvbk5hbWVkSXRlbS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUMyMUE0MTFBN0UwMDQ0N0M0QyAvKiBIVE1MRm9ybUNv
bGxlY3Rpb25OYW1lZEl0ZW0ubW0gaW4gU291cmNlcyAqLywKLQkJCQk5NUE1MjQ5NTI1ODFBMTBE
MDA0NjFGRTkgLyogSFRNTE1ldGFUaGVtZUNvbG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4
M0UwNTAxRDBBNjQxODAwRkVCQ0YzIC8qIEhUTUxQYXJzZXJJZGlvbXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUNBMURFQzgxRjcxRjcwMTAwRTcxQkQzIC8qIEhUVFBIZWFkZXJGaWVsZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0NkZBMkZFRTIzODQ2Q0E1MDAwQ0NCMEMgLyogSFRUUEhlYWRl
ck1hcC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTU4MjksNiArNTgyOCw3IEBACiAJCQkJOTNGNTZE
QTkxRTVGOTE5RDAwM0VERTg0IC8qIFdLV2ViVmlld1NuYXBzaG90Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQ0Q3Rjg5REMyMkE4NkNEQTAwRDY4M0FFIC8qIFdLV2ViVmlld1N1c3BlbmRBbGxNZWRp
YVBsYXliYWNrLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTk4NEZBQ0MxQ0ZGQUY2MDAwOEQxOThD
IC8qIFdLV2ViVmlld1RleHRJbnB1dC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTk1QTUyNDk1MjU4
MUExMEQwMDQ2MUZFOSAvKiBXS1dlYlZpZXdUaGVtZUNvbG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0M3NEM4RkEyMkRGQkE5NjAwREEyREFCIC8qIFdURlN0cmluZ1V0aWxpdGllcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDMTREMzA0NjI0QjRDM0JBMDA0ODAzODcgLyogWFBDRW5kcG9pbnQu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk5QzY0REMzMjFENzYxOThBMDA0QjU5OEUgLyogWW91VHVi
ZVBsdWdpblJlcGxhY2VtZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0aW9uTWFuaWZlc3RQ
YXJzZXIuY3BwCmluZGV4IGUwZTViYjUyODM3MTYwMWY3NGNiYzA4YTIzZTU0MjUyN2E0ZDAzNzAu
LmMzOTk2NTQ0NjUyMDM2YjQ1ZWU2YzQ5NTc1MzFkNzJjMzg0ODFjMzYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRpb25N
YW5pZmVzdFBhcnNlci5jcHAKQEAgLTEyNyw2ICsxMjcsMTMgQEAgcHVibGljOgogICAgICAgICB0
ZXN0U2NvcGUocmF3SlNPTiwgU3RyaW5nKCksIGV4cGVjdGVkVmFsdWUpOwogICAgIH0KIAorICAg
IHZvaWQgdGVzdFRoZW1lQ29sb3IoY29uc3QgU3RyaW5nJiByYXdKU09OLCBjb25zdCBDb2xvciYg
ZXhwZWN0ZWRWYWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8gbWFuaWZlc3QgPSBwYXJzZVRvcExl
dmVsUHJvcGVydHkoInRoZW1lX2NvbG9yIiwgcmF3SlNPTik7CisgICAgICAgIGF1dG8gdmFsdWUg
PSBtYW5pZmVzdC50aGVtZUNvbG9yOworICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRWYWx1ZSwg
dmFsdWUpOworICAgIH0KKwogfTsKIAogc3RhdGljIHZvaWQgYXNzZXJ0TWFuaWZlc3RIYXNEZWZh
dWx0VmFsdWVzKGNvbnN0IFVSTCYgbWFuaWZlc3RVUkwsIGNvbnN0IFVSTCYgZG9jdW1lbnRVUkws
IGNvbnN0IEFwcGxpY2F0aW9uTWFuaWZlc3QmIG1hbmlmZXN0KQpAQCAtMjg5LDYgKzI5NiwyNiBA
QCBURVNUX0YoQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlclRlc3QsIFNjb3BlKQogICAgIHRlc3RT
Y29wZSgiXCJodHRwczovL2V4YW1wbGUuY29tL290aGVyXCIiLCBTdHJpbmcoImh0dHBzOi8vZXhh
bXBsZS5jb20vb3RoZXIvc3RhcnQtdXJsIiksICJodHRwczovL2V4YW1wbGUuY29tL290aGVyIik7
CiB9CiAKK1RFU1RfRihBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdCwgVGhlbWVDb2xvcikK
K3sKKyAgICB0ZXN0VGhlbWVDb2xvcigiMTIzIiwgQ29sb3IoKSk7CisgICAgdGVzdFRoZW1lQ29s
b3IoIm51bGwiLCBDb2xvcigpKTsKKyAgICB0ZXN0VGhlbWVDb2xvcigidHJ1ZSIsIENvbG9yKCkp
OworICAgIHRlc3RUaGVtZUNvbG9yKCJ7IH0iLCBDb2xvcigpKTsKKyAgICB0ZXN0VGhlbWVDb2xv
cigiWyBdIiwgQ29sb3IoKSk7CisgICAgdGVzdFRoZW1lQ29sb3IoIlwiXCIiLCBDb2xvcigpKTsK
KyAgICB0ZXN0VGhlbWVDb2xvcigiXCJnYXJiYWdlIHN0cmluZ1wiIiwgQ29sb3IoKSk7CisKKyAg
ICB0ZXN0VGhlbWVDb2xvcigiXCJyZWRcIiIsIENvbG9yOjpyZWQpOworICAgIHRlc3RUaGVtZUNv
bG9yKCJcIiNmMDBcIiIsIENvbG9yOjpyZWQpOworICAgIHRlc3RUaGVtZUNvbG9yKCJcIiNmZjAw
MDBcIiIsIENvbG9yOjpyZWQpOworICAgIHRlc3RUaGVtZUNvbG9yKCJcIiNmZjAwMDBmZlwiIiwg
Q29sb3I6OnJlZCk7CisgICAgdGVzdFRoZW1lQ29sb3IoIlwicmdiKDI1NSwgMCwgMClcIiIsIENv
bG9yOjpyZWQpOworICAgIHRlc3RUaGVtZUNvbG9yKCJcInJnYmEoMjU1LCAwLCAwLCAxKVwiIiwg
Q29sb3I6OnJlZCk7CisgICAgdGVzdFRoZW1lQ29sb3IoIlwiaHNsKDAsIDEwMCUsIDUwJSlcIiIs
IENvbG9yOjpyZWQpOworICAgIHRlc3RUaGVtZUNvbG9yKCJcImhzbGEoMCwgMTAwJSwgNTAlLCAx
KVwiIiwgQ29sb3I6OnJlZCk7Cit9CisKIFRFU1RfRihBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
VGVzdCwgV2hpdGVzcGFjZSkKIHsKICAgICBhdXRvIG1hbmlmZXN0ID0gcGFyc2VTdHJpbmcoIiAg
eyBcIm5hbWVcIjogXCJQQVNTXCIgfVxuIl9zKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQXBwbGljYXRpb25NYW5pZmVzdC5tbSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQXBwbGljYXRpb25NYW5pZmVzdC5tbQppbmRl
eCBiNWNkOGE2NjM1YmNlZTU2OGUwZjI4NzYxMzkxN2FjMTRiNThkMDlmLi5hMjQ3M2I2MmIwZmVm
NDk2ZmYzMWNhMjIxNzQ1NjE1YTRhMmMyMGZiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0FwcGxpY2F0aW9uTWFuaWZlc3QubW0KKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9BcHBsaWNhdGlvbk1hbmlmZXN0Lm1tCkBA
IC0zNyw5ICszNywxMSBAQAogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKK2NvbnN0ZXhw
ciBDR0Zsb2F0IHJlZENvbG9yQ29tcG9uZW50c1s0XSA9IHsgMSwgMCwgMCwgMSB9OworCiBURVNU
KFdlYktpdCwgQXBwbGljYXRpb25NYW5pZmVzdENvZGluZykKIHsKLSAgICBhdXRvIGpzb25TdHJp
bmcgPSBAInsgXCJuYW1lXCI6IFwiVGVzdE5hbWVcIiwgXCJzaG9ydF9uYW1lXCI6IFwiVGVzdFNo
b3J0TmFtZVwiLCBcImRlc2NyaXB0aW9uXCI6IFwiVGVzdERlc2NyaXB0aW9uXCIsIFwic2NvcGVc
IjogXCJodHRwczovL3Rlc3QuY29tL2FwcFwiLCBcInN0YXJ0X3VybFwiOiBcImh0dHBzOi8vdGVz
dC5jb20vYXBwL2luZGV4Lmh0bWxcIiwgXCJkaXNwbGF5XCI6IFwibWluaW1hbC11aVwiIH0iOwor
ICAgIGF1dG8ganNvblN0cmluZyA9IEAieyBcIm5hbWVcIjogXCJUZXN0TmFtZVwiLCBcInNob3J0
X25hbWVcIjogXCJUZXN0U2hvcnROYW1lXCIsIFwiZGVzY3JpcHRpb25cIjogXCJUZXN0RGVzY3Jp
cHRpb25cIiwgXCJzY29wZVwiOiBcImh0dHBzOi8vdGVzdC5jb20vYXBwXCIsIFwic3RhcnRfdXJs
XCI6IFwiaHR0cHM6Ly90ZXN0LmNvbS9hcHAvaW5kZXguaHRtbFwiLCBcImRpc3BsYXlcIjogXCJt
aW5pbWFsLXVpXCIsIFwidGhlbWVfY29sb3JcIjogXCJyZWRcIiB9IjsKICAgICBSZXRhaW5QdHI8
X1dLQXBwbGljYXRpb25NYW5pZmVzdD4gbWFuaWZlc3QgeyBbX1dLQXBwbGljYXRpb25NYW5pZmVz
dCBhcHBsaWNhdGlvbk1hbmlmZXN0RnJvbUpTT046anNvblN0cmluZyBtYW5pZmVzdFVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vdGVzdC5jb20vbWFuaWZlc3QuanNvbiJdIGRvY3Vt
ZW50VVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly90ZXN0LmNvbS8iXV0gfTsKIAog
ICAgIE5TRGF0YSAqZGF0YSA9IFtOU0tleWVkQXJjaGl2ZXIgYXJjaGl2ZWREYXRhV2l0aFJvb3RP
YmplY3Q6bWFuaWZlc3QuZ2V0KCkgcmVxdWlyaW5nU2VjdXJlQ29kaW5nOllFUyBlcnJvcjpudWxs
cHRyXTsKQEAgLTUyLDYgKzU0LDEwIEBAIFRFU1QoV2ViS2l0LCBBcHBsaWNhdGlvbk1hbmlmZXN0
Q29kaW5nKQogICAgIEVYUEVDVF9TVFJFUSgiaHR0cHM6Ly90ZXN0LmNvbS9hcHAiLCBtYW5pZmVz
dC5nZXQoKS5zY29wZS5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKICAgICBFWFBFQ1RfU1RS
RVEoImh0dHBzOi8vdGVzdC5jb20vYXBwL2luZGV4Lmh0bWwiLCBtYW5pZmVzdC5nZXQoKS5zdGFy
dFVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKICAgICBFWFBFQ1RfRVEoX1dLQXBwbGlj
YXRpb25NYW5pZmVzdERpc3BsYXlNb2RlTWluaW1hbFVJLCAgbWFuaWZlc3QuZ2V0KCkuZGlzcGxh
eU1vZGUpOworCisgICAgYXV0byBzUkdCQ29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNl
Q3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0IpKTsKKyAgICBhdXRvIHJlZENvbG9yID0g
YWRvcHRDRihDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlLmdldCgpLCByZWRDb2xvckNvbXBv
bmVudHMpKTsKKyAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKG1hbmlmZXN0Lmdl
dCgpLnRoZW1lQ29sb3IuQ0dDb2xvciwgcmVkQ29sb3IuZ2V0KCkpKTsKIH0KIAogVEVTVChXZWJL
aXQsIEFwcGxpY2F0aW9uTWFuaWZlc3RCYXNpYykKQEAgLTkwLDYgKzk2LDcgQEAgVEVTVChXZWJL
aXQsIEFwcGxpY2F0aW9uTWFuaWZlc3RCYXNpYykKICAgICAgICAgQCJkZXNjcmlwdGlvbiI6IEAi
SGVsbG8uIiwKICAgICAgICAgQCJzdGFydF91cmwiOiBAImh0dHA6Ly9leGFtcGxlLmNvbS9hcHAv
c3RhcnQiLAogICAgICAgICBAInNjb3BlIjogQCJodHRwOi8vZXhhbXBsZS5jb20vYXBwIiwKKyAg
ICAgICAgQCJ0aGVtZV9jb2xvciI6IEAicmVkIiwKICAgICB9OwogICAgIE5TU3RyaW5nICpodG1s
U3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8bGluayByZWw9XCJtYW5pZmVz
dFwiIGhyZWY9XCJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtODtiYXNlNjQsJUBcIj4iLCBb
W05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0Om1hbmlmZXN0T2JqZWN0IG9w
dGlvbnM6MCBlcnJvcjpuaWxdIGJhc2U2NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9uczowXV07CiAg
ICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6aHRtbFN0cmluZyBiYXNlVVJMOltOU1VSTCBVUkxX
aXRoU3RyaW5nOkAiaHR0cDovL2V4YW1wbGUuY29tL2FwcC9pbmRleCJdXTsKQEAgLTEwMCw2ICsx
MDcsMTEgQEAgVEVTVChXZWJLaXQsIEFwcGxpY2F0aW9uTWFuaWZlc3RCYXNpYykKICAgICAgICAg
RVhQRUNUX1RSVUUoW21hbmlmZXN0LmFwcGxpY2F0aW9uRGVzY3JpcHRpb24gaXNFcXVhbFRvU3Ry
aW5nOkAiSGVsbG8uIl0pOwogICAgICAgICBFWFBFQ1RfVFJVRShbbWFuaWZlc3Quc3RhcnRVUkwg
aXNFcXVhbDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly9leGFtcGxlLmNvbS9hcHAvc3Rh
cnQiXV0pOwogICAgICAgICBFWFBFQ1RfVFJVRShbbWFuaWZlc3Quc2NvcGUgaXNFcXVhbDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly9leGFtcGxlLmNvbS9hcHAiXV0pOworCisgICAgICAg
IGF1dG8gc1JHQkNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1l
KGtDR0NvbG9yU3BhY2VTUkdCKSk7CisgICAgICAgIGF1dG8gcmVkQ29sb3IgPSBhZG9wdENGKENH
Q29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2UuZ2V0KCksIHJlZENvbG9yQ29tcG9uZW50cykpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKG1hbmlmZXN0LnRoZW1lQ29s
b3IuQ0dDb2xvciwgcmVkQ29sb3IuZ2V0KCkpKTsKKwogICAgICAgICBkb25lID0gdHJ1ZTsKICAg
ICB9XTsKICAgICBVdGlsOjpydW4oJmRvbmUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9IVE1MTWV0YVRoZW1lQ29sb3IubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0hUTUxNZXRhVGhlbWVDb2xvci5tbQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIwYmNjY2E1Yjc2MDI3NjEzYWJkZGMzMDU5ZDlkYzYx
NTIxY2Y3Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0hUTUxNZXRhVGhlbWVDb2xvci5t
bQorKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0KLSNpbXBvcnQgIkNvY29hQ29sb3IuaCIKLSNpbXBvcnQgIlRlc3RDb2NvYS5o
IgotI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5j
ZXNQcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgotI2ltcG9y
dCA8V2ViS2l0L19XS0ludGVybmFsRGVidWdGZWF0dXJlLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+Ci0KLSNkZWZpbmUgRVhQRUNUX05TU1RSSU5HX0VRKGV4cGVjdGVkLCBhY3R1YWwpIFwK
LSAgICBFWFBFQ1RfVFJVRShbYWN0dWFsIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0p
OyBcCi0gICAgRVhQRUNUX1dLX1NUUkVRKGV4cGVjdGVkLCAoTlNTdHJpbmcgKilhY3R1YWwpOwot
Ci1jb25zdGV4cHIgQ0dGbG9hdCByZWRDb2xvckNvbXBvbmVudHNbNF0gPSB7IDEsIDAsIDAsIDEg
fTsKLWNvbnN0ZXhwciBDR0Zsb2F0IGJsdWVDb2xvckNvbXBvbmVudHNbNF0gPSB7IDAsIDAsIDEs
IDEgfTsKLQotVEVTVChIVE1MTWV0YVRoZW1lQ29sb3IsIE9uTG9hZCkKLXsKLSAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDgwMCwgNjAwKV0pOwotICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlldyB0aGVt
ZUNvbG9yXSk7Ci0KLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmdBbmRX
YWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPG1ldGEgbmFtZT0ndGhlbWUt
Y29sb3InIGNvbnRlbnQ9J3JlZCc+Il07Ci0KLSAgICBhdXRvIHNSR0JDb2xvclNwYWNlID0gYWRv
cHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwotICAg
IGF1dG8gcmVkQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2UuZ2V0
KCksIHJlZENvbG9yQ29tcG9uZW50cykpOwotICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRv
Q29sb3IoW3dlYlZpZXcgdGhlbWVDb2xvcl0uQ0dDb2xvciwgcmVkQ29sb3IuZ2V0KCkpKTsKLQot
ICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRpbEFsbElt
bWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8bWV0YSBuYW1lPSdub3QtdGhlbWUtY29sb3InIGNv
bnRlbnQ9J3JlZCc+Il07Ci0KLSAgICBFWFBFQ1RfVFJVRSghW3dlYlZpZXcgdGhlbWVDb2xvcl0p
OwotfQotCi1URVNUKEhUTUxNZXRhVGhlbWVDb2xvciwgTXVsdGlwbGVUYWdzKQotewotICAgIGF1
dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7Ci0gICAgRVhQRUNUX1RSVUUoIVt3ZWJWaWV3
IHRoZW1lQ29sb3JdKTsKLQotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmlu
Z0FuZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8bWV0YSBuYW1lPSd0
aGVtZS1jb2xvcicgY29udGVudD0ncmVkJz48bWV0YSBuYW1lPSd0aGVtZS1jb2xvcicgY29udGVu
dD0nYmx1ZSc+Il07Ci0KLSAgICBhdXRvIHNSR0JDb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9y
U3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwotICAgIGF1dG8gYmx1ZUNv
bG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlLmdldCgpLCBibHVlQ29s
b3JDb21wb25lbnRzKSk7Ci0gICAgRVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFsVG9Db2xvcihbd2Vi
VmlldyB0aGVtZUNvbG9yXS5DR0NvbG9yLCBibHVlQ29sb3IuZ2V0KCkpKTsKLX0KLQotQGludGVy
ZmFjZSBXS1dlYlZpZXdUaGVtZUNvbG9yT2JzZXJ2ZXIgOiBOU09iamVjdAotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3OwotCi1AcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFdLV2ViVmlldyAqd2ViVmlldzsKLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RhdGU7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IFdLV2ViVmlld1RoZW1lQ29sb3JPYnNlcnZlcgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhX
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfc3RhdGUgPSBAImJlZm9yZS1pbml0
IjsKLQotICAgIF93ZWJWaWV3ID0gd2ViVmlldzsKLSAgICBbX3dlYlZpZXcgYWRkT2JzZXJ2ZXI6
c2VsZiBmb3JLZXlQYXRoOkAidGhlbWVDb2xvciIgb3B0aW9uczpOU0tleVZhbHVlT2JzZXJ2aW5n
T3B0aW9uSW5pdGlhbCBjb250ZXh0Om5pbF07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
dm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBhdGggb2ZPYmplY3Q6
KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeSAqKWNoYW5nZSBjb250ZXh0Oih2b2lkICop
Y29udGV4dAotewotICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1pbml0
Il0pIHsKLSAgICAgICAgX3N0YXRlID0gQCJhZnRlci1pbml0IjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1sb2FkIl0p
IHsKLSAgICAgICAgX3N0YXRlID0gQCJhZnRlci1sb2FkIjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1jb250ZW50LWNo
YW5nZSJdKSB7Ci0gICAgICAgIF9zdGF0ZSA9IEAiYWZ0ZXItY29udGVudC1jaGFuZ2UiOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKFtfc3RhdGUgaXNFcXVhbFRvU3RyaW5nOkAi
YmVmb3JlLW5hbWUtY2hhbmdlLW5vdC10aGVtZS1jb2xvciJdKSB7Ci0gICAgICAgIF9zdGF0ZSA9
IEAiYWZ0ZXItbmFtZS1jaGFuZ2Utbm90LXRoZW1lLWNvbG9yIjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1uYW1lLWNo
YW5nZS10aGVtZS1jb2xvciJdKSB7Ci0gICAgICAgIF9zdGF0ZSA9IEAiYWZ0ZXItbmFtZS1jaGFu
Z2UtdGhlbWUtY29sb3IiOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKFtfc3Rh
dGUgaXNFcXVhbFRvU3RyaW5nOkAiYmVmb3JlLW5vZGUtcmVtb3ZlZCJdKSB7Ci0gICAgICAgIF9z
dGF0ZSA9IEAiYWZ0ZXItbm9kZS1yZW1vdmVkIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLUBlbmQKLQotVEVTVChIVE1M
TWV0YVRoZW1lQ29sb3IsIEtWTykKLXsKLSAgICBhdXRvIHNSR0JDb2xvclNwYWNlID0gYWRvcHRD
RihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwotICAgIGF1
dG8gcmVkQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2UuZ2V0KCks
IHJlZENvbG9yQ29tcG9uZW50cykpOwotICAgIGF1dG8gYmx1ZUNvbG9yID0gYWRvcHRDRihDR0Nv
bG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlLmdldCgpLCBibHVlQ29sb3JDb21wb25lbnRzKSk7Ci0K
LSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKV0pOwotICAgIGF1dG8gdGhlbWVDb2xv
ck9ic2VydmVyID0gYWRvcHROUyhbW1dLV2ViVmlld1RoZW1lQ29sb3JPYnNlcnZlciBhbGxvY10g
aW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBFWFBFQ1RfTlNTVFJJTkdfRVEo
ImFmdGVyLWluaXQiLCBbdGhlbWVDb2xvck9ic2VydmVyIHN0YXRlXSk7Ci0gICAgRVhQRUNUX1RS
VUUoIVt3ZWJWaWV3IHRoZW1lQ29sb3JdKTsKLQotICAgIFt0aGVtZUNvbG9yT2JzZXJ2ZXIgc2V0
U3RhdGU6QCJiZWZvcmUtbG9hZCJdOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRN
TFN0cmluZ0FuZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8bWV0YSBu
YW1lPSd0aGVtZS1jb2xvcicgY29udGVudD0ncmVkJz4iXTsKLSAgICBFWFBFQ1RfTlNTVFJJTkdf
RVEoImFmdGVyLWxvYWQiLCBbdGhlbWVDb2xvck9ic2VydmVyIHN0YXRlXSk7Ci0gICAgRVhQRUNU
X1RSVUUoQ0dDb2xvckVxdWFsVG9Db2xvcihbd2ViVmlldyB0aGVtZUNvbG9yXS5DR0NvbG9yLCBy
ZWRDb2xvci5nZXQoKSkpOwotCi0gICAgW3RoZW1lQ29sb3JPYnNlcnZlciBzZXRTdGF0ZTpAImJl
Zm9yZS1jb250ZW50LWNoYW5nZSJdOwotICAgIFt3ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhJykuc2V0QXR0cmlidXRlKCdj
b250ZW50JywgJ2JsdWUnKSJdOwotICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9u
VXBkYXRlXTsKLSAgICBFWFBFQ1RfTlNTVFJJTkdfRVEoImFmdGVyLWNvbnRlbnQtY2hhbmdlIiwg
W3RoZW1lQ29sb3JPYnNlcnZlciBzdGF0ZV0pOwotICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVh
bFRvQ29sb3IoW3dlYlZpZXcgdGhlbWVDb2xvcl0uQ0dDb2xvciwgYmx1ZUNvbG9yLmdldCgpKSk7
Ci0KLSAgICBbdGhlbWVDb2xvck9ic2VydmVyIHNldFN0YXRlOkAiYmVmb3JlLW5hbWUtY2hhbmdl
LW5vdC10aGVtZS1jb2xvciJdOwotICAgIFt3ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhJykuc2V0QXR0cmlidXRlKCduYW1l
JywgJ25vdC10aGVtZS1jb2xvcicpIl07Ci0gICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50
YXRpb25VcGRhdGVdOwotICAgIEVYUEVDVF9OU1NUUklOR19FUSgiYWZ0ZXItbmFtZS1jaGFuZ2Ut
bm90LXRoZW1lLWNvbG9yIiwgW3RoZW1lQ29sb3JPYnNlcnZlciBzdGF0ZV0pOwotICAgIEVYUEVD
VF9UUlVFKCFbd2ViVmlldyB0aGVtZUNvbG9yXSk7Ci0KLSAgICBbdGhlbWVDb2xvck9ic2VydmVy
IHNldFN0YXRlOkAiYmVmb3JlLW5hbWUtY2hhbmdlLXRoZW1lLWNvbG9yIl07Ci0gICAgW3dlYlZp
ZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Io
J21ldGEnKS5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAndGhlbWUtY29sb3InKSJdOwotICAgIFt3ZWJW
aWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKLSAgICBFWFBFQ1RfTlNTVFJJTkdf
RVEoImFmdGVyLW5hbWUtY2hhbmdlLXRoZW1lLWNvbG9yIiwgW3RoZW1lQ29sb3JPYnNlcnZlciBz
dGF0ZV0pOwotICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXcgdGhl
bWVDb2xvcl0uQ0dDb2xvciwgYmx1ZUNvbG9yLmdldCgpKSk7Ci0KLSAgICBbdGhlbWVDb2xvck9i
c2VydmVyIHNldFN0YXRlOkAiYmVmb3JlLW5vZGUtcmVtb3ZlZCJdOwotICAgIFt3ZWJWaWV3IG9i
amVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRh
JykucmVtb3ZlKCkiXTsKLSAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0
ZV07Ci0gICAgRVhQRUNUX05TU1RSSU5HX0VRKCJhZnRlci1ub2RlLXJlbW92ZWQiLCBbdGhlbWVD
b2xvck9ic2VydmVyIHN0YXRlXSk7Ci0gICAgRVhQRUNUX1RSVUUoIVt3ZWJWaWV3IHRoZW1lQ29s
b3JdKTsKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLS8vIFRoZXJlJ3Mgbm8gQVBJ
L1NQSSB0byBnZXQgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHNjcm9sbCBhcmVhIG9uIG1h
Y09TLgotCi1lbnVtIGNsYXNzIFVzZVRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENv
bG9yIDogYm9vbCB7IFllcywgTm8gfTsKLXN0YXRpYyBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4g
Y3JlYXRlV2ViVmlldyhVc2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciB1
c2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvcikKLXsKLSAgICBhdXRvIGNv
bmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5p
dF0pOwotICAgIGZvciAoX1dLSW50ZXJuYWxEZWJ1Z0ZlYXR1cmUgKmZlYXR1cmUgaW4gW1dLUHJl
ZmVyZW5jZXMgX2ludGVybmFsRGVidWdGZWF0dXJlc10pIHsKLSAgICAgICAgaWYgKFtmZWF0dXJl
LmtleSBpc0VxdWFsVG9TdHJpbmc6QCJVc2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91
bmRDb2xvciJdKSB7Ci0gICAgICAgICAgICBbW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9z
ZXRFbmFibGVkOih1c2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciA9PSBV
c2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvcjo6WWVzKSBmb3JJbnRlcm5h
bERlYnVnRmVhdHVyZTpmZWF0dXJlXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbi5nZXQoKV0pOwotfQotCi1URVNUKEhUTUxNZXRhVGhlbWVDb2xvciwgRXhwZXJpbWVudGFs
VXNlVGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3IpCi17Ci0gICAgYXV0byBz
UkdCQ29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29s
b3JTcGFjZVNSR0IpKTsKLSAgICBhdXRvIHJlZENvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRl
KHNSR0JDb2xvclNwYWNlLmdldCgpLCByZWRDb2xvckNvbXBvbmVudHMpKTsKLSAgICBhdXRvIGJs
dWVDb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZS5nZXQoKSwgYmx1
ZUNvbG9yQ29tcG9uZW50cykpOwotCi0gICAgYXV0byB3ZWJWaWV3V2l0aG91dFRoZW1lQ29sb3JG
b3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yID0gY3JlYXRlV2ViVmlldyhVc2VUaGVtZUNvbG9y
Rm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvcjo6Tm8pOwotICAgIEVYUEVDVF9UUlVFKCFbd2Vi
Vmlld1dpdGhvdXRUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciB0aGVtZUNv
bG9yXSk7Ci0KLSAgICBbd2ViVmlld1dpdGhvdXRUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tn
cm91bmRDb2xvciBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1l
ZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPGJvZHkgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IGJs
dWUnPiJdOwotICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlld1dpdGhvdXRUaGVtZUNvbG9yRm9yU2Ny
b2xsQXJlYUJhY2tncm91bmRDb2xvciB0aGVtZUNvbG9yXSk7Ci0gICAgRVhQRUNUX1RSVUUoQ0dD
b2xvckVxdWFsVG9Db2xvcihbd2ViVmlld1dpdGhvdXRUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJh
Y2tncm91bmRDb2xvciBzY3JvbGxWaWV3XS5iYWNrZ3JvdW5kQ29sb3IuQ0dDb2xvciwgYmx1ZUNv
bG9yLmdldCgpKSk7Ci0KLSAgICBbd2ViVmlld1dpdGhvdXRUaGVtZUNvbG9yRm9yU2Nyb2xsQXJl
YUJhY2tncm91bmRDb2xvciBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxB
bGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPG1ldGEgbmFtZT0ndGhlbWUtY29sb3InIGNv
bnRlbnQ9J3JlZCc+PGJvZHkgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IGJsdWUnPiJdOwotICAg
IEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXdXaXRob3V0VGhlbWVDb2xv
ckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3IgdGhlbWVDb2xvcl0uQ0dDb2xvciwgcmVkQ29s
b3IuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKFt3ZWJWaWV3
V2l0aG91dFRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIHNjcm9sbFZpZXdd
LmJhY2tncm91bmRDb2xvci5DR0NvbG9yLCBibHVlQ29sb3IuZ2V0KCkpKTsKLQotICAgIGF1dG8g
d2ViVmlld1dpdGhUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciA9IGNyZWF0
ZVdlYlZpZXcoVXNlVGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3I6Olllcyk7
Ci0gICAgRVhQRUNUX1RSVUUoIVt3ZWJWaWV3V2l0aFRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFj
a2dyb3VuZENvbG9yIHRoZW1lQ29sb3JdKTsKLQotICAgIFt3ZWJWaWV3V2l0aFRoZW1lQ29sb3JG
b3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0Fu
ZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8Ym9keSBzdHlsZT0nYmFj
a2dyb3VuZC1jb2xvcjogYmx1ZSc+Il07Ci0gICAgRVhQRUNUX1RSVUUoIVt3ZWJWaWV3V2l0aFRo
ZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIHRoZW1lQ29sb3JdKTsKLSAgICBF
WFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKFt3ZWJWaWV3V2l0aFRoZW1lQ29sb3JGb3JT
Y3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIHNjcm9sbFZpZXddLmJhY2tncm91bmRDb2xvci5DR0Nv
bG9yLCBibHVlQ29sb3IuZ2V0KCkpKTsKLQotICAgIFt3ZWJWaWV3V2l0aFRoZW1lQ29sb3JGb3JT
Y3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdh
aXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8bWV0YSBuYW1lPSd0aGVtZS1j
b2xvcicgY29udGVudD0ncmVkJz48Ym9keSBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjogYmx1ZSc+
Il07Ci0gICAgRVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFsVG9Db2xvcihbd2ViVmlld1dpdGhUaGVt
ZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciB0aGVtZUNvbG9yXS5DR0NvbG9yLCBy
ZWRDb2xvci5nZXQoKSkpOwotICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dl
YlZpZXdXaXRoVGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3Igc2Nyb2xsVmll
d10uYmFja2dyb3VuZENvbG9yLkNHQ29sb3IsIHJlZENvbG9yLmdldCgpKSk7Ci19Ci0KLSNlbmRp
ZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdUaGVtZUNvbG9yLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdUaGVtZUNvbG9yLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJmMmE2ZjBlNGQxMzUzYTg3ZDZmNjU3MmQyNjU2OTY0ZTMyMzJkMGMKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld1Ro
ZW1lQ29sb3IubW0KQEAgLTAsMCArMSwyNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKworI2ltcG9ydCAiQ29jb2FDb2xvci5oIgorI2ltcG9ydCAiVGVzdENvY29hLmgiCisj
aW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1By
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oPgorI2ltcG9ydCA8V2ViS2l0L19XS0ludGVy
bmFsRGVidWdGZWF0dXJlLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKKyNkZWZpbmUg
RVhQRUNUX05TU1RSSU5HX0VRKGV4cGVjdGVkLCBhY3R1YWwpIFwKKyAgICBFWFBFQ1RfVFJVRShb
YWN0dWFsIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOyBcCisgICAgRVhQRUNUX1dL
X1NUUkVRKGV4cGVjdGVkLCAoTlNTdHJpbmcgKilhY3R1YWwpOworCitjb25zdGV4cHIgQ0dGbG9h
dCByZWRDb2xvckNvbXBvbmVudHNbNF0gPSB7IDEsIDAsIDAsIDEgfTsKK2NvbnN0ZXhwciBDR0Zs
b2F0IGJsdWVDb2xvckNvbXBvbmVudHNbNF0gPSB7IDAsIDAsIDEsIDEgfTsKKworVEVTVChXS1dl
YlZpZXdUaGVtZUNvbG9yLCBNZXRhRWxlbWVudE9uTG9hZCkKK3sKKyAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0
KDAsIDAsIDgwMCwgNjAwKV0pOworICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlldyB0aGVtZUNvbG9y
XSk7CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50
aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPG1ldGEgbmFtZT0ndGhlbWUtY29sb3In
IGNvbnRlbnQ9J3JlZCc+Il07CisKKyAgICBhdXRvIHNSR0JDb2xvclNwYWNlID0gYWRvcHRDRihD
R0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOworICAgIGF1dG8g
cmVkQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2UuZ2V0KCksIHJl
ZENvbG9yQ29tcG9uZW50cykpOworICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3Io
W3dlYlZpZXcgdGhlbWVDb2xvcl0uQ0dDb2xvciwgcmVkQ29sb3IuZ2V0KCkpKTsKKworICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRpbEFsbEltbWVkaWF0
ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8bWV0YSBuYW1lPSdub3QtdGhlbWUtY29sb3InIGNvbnRlbnQ9
J3JlZCc+Il07CisKKyAgICBFWFBFQ1RfVFJVRSghW3dlYlZpZXcgdGhlbWVDb2xvcl0pOworfQor
CitURVNUKFdLV2ViVmlld1RoZW1lQ29sb3IsIE11bHRpcGxlTWV0YUVsZW1lbnRzKQoreworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisgICAgRVhQRUNUX1RSVUUoIVt3ZWJW
aWV3IHRoZW1lQ29sb3JdKTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0
cmluZ0FuZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8bWV0YSBuYW1l
PSd0aGVtZS1jb2xvcicgY29udGVudD0ncmVkJz48bWV0YSBuYW1lPSd0aGVtZS1jb2xvcicgY29u
dGVudD0nYmx1ZSc+Il07CisKKyAgICBhdXRvIHNSR0JDb2xvclNwYWNlID0gYWRvcHRDRihDR0Nv
bG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOworICAgIGF1dG8gYmx1
ZUNvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlLmdldCgpLCBibHVl
Q29sb3JDb21wb25lbnRzKSk7CisgICAgRVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFsVG9Db2xvcihb
d2ViVmlldyB0aGVtZUNvbG9yXS5DR0NvbG9yLCBibHVlQ29sb3IuZ2V0KCkpKTsKK30KKworQGlu
dGVyZmFjZSBXS1dlYlZpZXdUaGVtZUNvbG9yT2JzZXJ2ZXIgOiBOU09iamVjdAorCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3OworCitAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLV2ViVmlldyAqd2ViVmlldzsKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RhdGU7CisKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFdLV2ViVmlld1RoZW1lQ29sb3JPYnNlcnZlcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfc3RhdGUgPSBAImJlZm9yZS1p
bml0IjsKKworICAgIF93ZWJWaWV3ID0gd2ViVmlldzsKKyAgICBbX3dlYlZpZXcgYWRkT2JzZXJ2
ZXI6c2VsZiBmb3JLZXlQYXRoOkAidGhlbWVDb2xvciIgb3B0aW9uczpOU0tleVZhbHVlT2JzZXJ2
aW5nT3B0aW9uSW5pdGlhbCBjb250ZXh0Om5pbF07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBhdGggb2ZPYmpl
Y3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeSAqKWNoYW5nZSBjb250ZXh0Oih2b2lk
ICopY29udGV4dAoreworICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1p
bml0Il0pIHsKKyAgICAgICAgX3N0YXRlID0gQCJhZnRlci1pbml0IjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1sb2Fk
Il0pIHsKKyAgICAgICAgX3N0YXRlID0gQCJhZnRlci1sb2FkIjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1jb250ZW50
LWNoYW5nZSJdKSB7CisgICAgICAgIF9zdGF0ZSA9IEAiYWZ0ZXItY29udGVudC1jaGFuZ2UiOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFtfc3RhdGUgaXNFcXVhbFRvU3RyaW5n
OkAiYmVmb3JlLW5hbWUtY2hhbmdlLW5vdC10aGVtZS1jb2xvciJdKSB7CisgICAgICAgIF9zdGF0
ZSA9IEAiYWZ0ZXItbmFtZS1jaGFuZ2Utbm90LXRoZW1lLWNvbG9yIjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1uYW1l
LWNoYW5nZS10aGVtZS1jb2xvciJdKSB7CisgICAgICAgIF9zdGF0ZSA9IEAiYWZ0ZXItbmFtZS1j
aGFuZ2UtdGhlbWUtY29sb3IiOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFtf
c3RhdGUgaXNFcXVhbFRvU3RyaW5nOkAiYmVmb3JlLW5vZGUtcmVtb3ZlZCJdKSB7CisgICAgICAg
IF9zdGF0ZSA9IEAiYWZ0ZXItbm9kZS1yZW1vdmVkIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0BlbmQKKworVEVTVChX
S1dlYlZpZXdUaGVtZUNvbG9yLCBLVk8pCit7CisgICAgYXV0byBzUkdCQ29sb3JTcGFjZSA9IGFk
b3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0IpKTsKKyAg
ICBhdXRvIHJlZENvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlLmdl
dCgpLCByZWRDb2xvckNvbXBvbmVudHMpKTsKKyAgICBhdXRvIGJsdWVDb2xvciA9IGFkb3B0Q0Yo
Q0dDb2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZS5nZXQoKSwgYmx1ZUNvbG9yQ29tcG9uZW50cykp
OworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsKKyAgICBhdXRvIHRoZW1l
Q29sb3JPYnNlcnZlciA9IGFkb3B0TlMoW1tXS1dlYlZpZXdUaGVtZUNvbG9yT2JzZXJ2ZXIgYWxs
b2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgRVhQRUNUX05TU1RSSU5H
X0VRKCJhZnRlci1pbml0IiwgW3RoZW1lQ29sb3JPYnNlcnZlciBzdGF0ZV0pOworICAgIEVYUEVD
VF9UUlVFKCFbd2ViVmlldyB0aGVtZUNvbG9yXSk7CisKKyAgICBbdGhlbWVDb2xvck9ic2VydmVy
IHNldFN0YXRlOkAiYmVmb3JlLWxvYWQiXTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9h
ZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPG1l
dGEgbmFtZT0ndGhlbWUtY29sb3InIGNvbnRlbnQ9J3JlZCc+Il07CisgICAgRVhQRUNUX05TU1RS
SU5HX0VRKCJhZnRlci1sb2FkIiwgW3RoZW1lQ29sb3JPYnNlcnZlciBzdGF0ZV0pOworICAgIEVY
UEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXcgdGhlbWVDb2xvcl0uQ0dDb2xv
ciwgcmVkQ29sb3IuZ2V0KCkpKTsKKworICAgIFt0aGVtZUNvbG9yT2JzZXJ2ZXIgc2V0U3RhdGU6
QCJiZWZvcmUtY29udGVudC1jaGFuZ2UiXTsKKyAgICBbd2ViVmlldyBvYmplY3RCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YScpLnNldEF0dHJpYnV0
ZSgnY29udGVudCcsICdibHVlJykiXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRh
dGlvblVwZGF0ZV07CisgICAgRVhQRUNUX05TU1RSSU5HX0VRKCJhZnRlci1jb250ZW50LWNoYW5n
ZSIsIFt0aGVtZUNvbG9yT2JzZXJ2ZXIgc3RhdGVdKTsKKyAgICBFWFBFQ1RfVFJVRShDR0NvbG9y
RXF1YWxUb0NvbG9yKFt3ZWJWaWV3IHRoZW1lQ29sb3JdLkNHQ29sb3IsIGJsdWVDb2xvci5nZXQo
KSkpOworCisgICAgW3RoZW1lQ29sb3JPYnNlcnZlciBzZXRTdGF0ZTpAImJlZm9yZS1uYW1lLWNo
YW5nZS1ub3QtdGhlbWUtY29sb3IiXTsKKyAgICBbd2ViVmlldyBvYmplY3RCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YScpLnNldEF0dHJpYnV0ZSgn
bmFtZScsICdub3QtdGhlbWUtY29sb3InKSJdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJl
c2VudGF0aW9uVXBkYXRlXTsKKyAgICBFWFBFQ1RfTlNTVFJJTkdfRVEoImFmdGVyLW5hbWUtY2hh
bmdlLW5vdC10aGVtZS1jb2xvciIsIFt0aGVtZUNvbG9yT2JzZXJ2ZXIgc3RhdGVdKTsKKyAgICBF
WFBFQ1RfVFJVRSghW3dlYlZpZXcgdGhlbWVDb2xvcl0pOworCisgICAgW3RoZW1lQ29sb3JPYnNl
cnZlciBzZXRTdGF0ZTpAImJlZm9yZS1uYW1lLWNoYW5nZS10aGVtZS1jb2xvciJdOworICAgIFt3
ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVj
dG9yKCdtZXRhJykuc2V0QXR0cmlidXRlKCduYW1lJywgJ3RoZW1lLWNvbG9yJykiXTsKKyAgICBb
d2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07CisgICAgRVhQRUNUX05TU1RS
SU5HX0VRKCJhZnRlci1uYW1lLWNoYW5nZS10aGVtZS1jb2xvciIsIFt0aGVtZUNvbG9yT2JzZXJ2
ZXIgc3RhdGVdKTsKKyAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKFt3ZWJWaWV3
IHRoZW1lQ29sb3JdLkNHQ29sb3IsIGJsdWVDb2xvci5nZXQoKSkpOworCisgICAgW3RoZW1lQ29s
b3JPYnNlcnZlciBzZXRTdGF0ZTpAImJlZm9yZS1ub2RlLXJlbW92ZWQiXTsKKyAgICBbd2ViVmll
dyBvYmplY3RCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3Rvcign
bWV0YScpLnJlbW92ZSgpIl07CisgICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRpb25V
cGRhdGVdOworICAgIEVYUEVDVF9OU1NUUklOR19FUSgiYWZ0ZXItbm9kZS1yZW1vdmVkIiwgW3Ro
ZW1lQ29sb3JPYnNlcnZlciBzdGF0ZV0pOworICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlldyB0aGVt
ZUNvbG9yXSk7Cit9CisKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCisKK1RFU1Qo
V0tXZWJWaWV3VGhlbWVDb2xvciwgQXBwbGljYXRpb25NYW5pZmVzdCkKK3sKKyAgICBhdXRvIHNS
R0JDb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xv
clNwYWNlU1JHQikpOworICAgIGF1dG8gcmVkQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUo
c1JHQkNvbG9yU3BhY2UuZ2V0KCksIHJlZENvbG9yQ29tcG9uZW50cykpOworCisgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNN
YWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsKKyAgICBFWFBFQ1RfVFJVRSghW3dlYlZpZXcgdGhl
bWVDb2xvcl0pOworCisgICAgTlNEaWN0aW9uYXJ5ICptYW5pZmVzdE9iamVjdCA9IEB7IEAibmFt
ZSI6IEAiVGVzdCIsIEAidGhlbWVfY29sb3IiOiBAInJlZCIgfTsKKyAgICBbd2ViVmlldyBzeW5j
aHJvbm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1l
c1BhaW50OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPGxpbmsgcmVsPSdtYW5pZmVzdCcg
aHJlZj0nZGF0YTphcHBsaWNhdGlvbi9tYW5pZmVzdCtqc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0
LCVAJz4iLCBbW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0Om1hbmlmZXN0
T2JqZWN0IG9wdGlvbnM6MCBlcnJvcjpuaWxdIGJhc2U2NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9u
czowXV1dOworCisgICAgc3RhdGljIGJvb2wgZGlkR2V0QXBwbGljYXRpb25NYW5pZmVzdCA9IGZh
bHNlOworICAgIFt3ZWJWaWV3IF9nZXRBcHBsaWNhdGlvbk1hbmlmZXN0V2l0aENvbXBsZXRpb25I
YW5kbGVyOlsmXSAoX1dLQXBwbGljYXRpb25NYW5pZmVzdCAqbWFuaWZlc3QpIHsKKyAgICAgICAg
RVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFsVG9Db2xvcihtYW5pZmVzdC50aGVtZUNvbG9yLkNHQ29s
b3IsIHJlZENvbG9yLmdldCgpKSk7CisKKyAgICAgICAgZGlkR2V0QXBwbGljYXRpb25NYW5pZmVz
dCA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkaWRHZXRB
cHBsaWNhdGlvbk1hbmlmZXN0KTsKKworICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0
aW9uVXBkYXRlXTsKKyAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKFt3ZWJWaWV3
IHRoZW1lQ29sb3JdLkNHQ29sb3IsIHJlZENvbG9yLmdldCgpKSk7Cit9CisKK1RFU1QoV0tXZWJW
aWV3VGhlbWVDb2xvciwgTWV0YUVsZW1lbnRPdmVycmlkZXNBcHBsaWNhdGlvbk1hbmlmZXN0KQor
eworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisgICAgRVhQRUNUX1RSVUUo
IVt3ZWJWaWV3IHRoZW1lQ29sb3JdKTsKKworICAgIE5TRGljdGlvbmFyeSAqbWFuaWZlc3RPYmpl
Y3QgPSBAeyBAIm5hbWUiOiBAIlRlc3QiLCBAInRoZW1lX2NvbG9yIjogQCJibHVlIiB9OworICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRpbEFsbEltbWVk
aWF0ZUNoaWxkRnJhbWVzUGFpbnQ6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8bGluayBy
ZWw9J21hbmlmZXN0JyBocmVmPSdkYXRhOmFwcGxpY2F0aW9uL21hbmlmZXN0K2pzb247Y2hhcnNl
dD11dGYtODtiYXNlNjQsJUAnPjxtZXRhIG5hbWU9J3RoZW1lLWNvbG9yJyBjb250ZW50PSdyZWQn
PiIsIFtbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05PYmplY3Q6bWFuaWZlc3RPYmpl
Y3Qgb3B0aW9uczowIGVycm9yOm5pbF0gYmFzZTY0RW5jb2RlZFN0cmluZ1dpdGhPcHRpb25zOjBd
XV07CisKKyAgICBhdXRvIHNSR0JDb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVh
dGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOworICAgIGF1dG8gcmVkQ29sb3IgPSBhZG9w
dENGKENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2UuZ2V0KCksIHJlZENvbG9yQ29tcG9uZW50
cykpOworICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXcgdGhlbWVD
b2xvcl0uQ0dDb2xvciwgcmVkQ29sb3IuZ2V0KCkpKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShB
UFBMSUNBVElPTl9NQU5JRkVTVCkKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKKy8vIFRo
ZXJlJ3Mgbm8gQVBJL1NQSSB0byBnZXQgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHNjcm9s
bCBhcmVhIG9uIG1hY09TLgorCitlbnVtIGNsYXNzIFVzZVRoZW1lQ29sb3JGb3JTY3JvbGxBcmVh
QmFja2dyb3VuZENvbG9yIDogYm9vbCB7IFllcywgTm8gfTsKK3N0YXRpYyBSZXRhaW5QdHI8VGVz
dFdLV2ViVmlldz4gY3JlYXRlV2ViVmlldyhVc2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tn
cm91bmRDb2xvciB1c2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvcikKK3sK
KyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlv
biBhbGxvY10gaW5pdF0pOworICAgIGZvciAoX1dLSW50ZXJuYWxEZWJ1Z0ZlYXR1cmUgKmZlYXR1
cmUgaW4gW1dLUHJlZmVyZW5jZXMgX2ludGVybmFsRGVidWdGZWF0dXJlc10pIHsKKyAgICAgICAg
aWYgKFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJVc2VUaGVtZUNvbG9yRm9yU2Nyb2xs
QXJlYUJhY2tncm91bmRDb2xvciJdKSB7CisgICAgICAgICAgICBbW2NvbmZpZ3VyYXRpb24gcHJl
ZmVyZW5jZXNdIF9zZXRFbmFibGVkOih1c2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91
bmRDb2xvciA9PSBVc2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvcjo6WWVz
KSBmb3JJbnRlcm5hbERlYnVnRmVhdHVyZTpmZWF0dXJlXTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworfQorCitURVNUKFdLV2ViVmlld1RoZW1lQ29sb3Is
IEV4cGVyaW1lbnRhbFVzZVRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yKQor
eworICAgIGF1dG8gc1JHQkNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdp
dGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdCKSk7CisgICAgYXV0byByZWRDb2xvciA9IGFkb3B0Q0Yo
Q0dDb2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZS5nZXQoKSwgcmVkQ29sb3JDb21wb25lbnRzKSk7
CisgICAgYXV0byBibHVlQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3Bh
Y2UuZ2V0KCksIGJsdWVDb2xvckNvbXBvbmVudHMpKTsKKworICAgIGF1dG8gd2ViVmlld1dpdGhv
dXRUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciA9IGNyZWF0ZVdlYlZpZXco
VXNlVGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3I6Ok5vKTsKKyAgICBFWFBF
Q1RfVFJVRSghW3dlYlZpZXdXaXRob3V0VGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5k
Q29sb3IgdGhlbWVDb2xvcl0pOworCisgICAgW3dlYlZpZXdXaXRob3V0VGhlbWVDb2xvckZvclNj
cm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3Igc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nQW5kV2Fp
dFVudGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFtZXNQYWludDpAIjxib2R5IHN0eWxlPSdiYWNrZ3Jv
dW5kLWNvbG9yOiBibHVlJz4iXTsKKyAgICBFWFBFQ1RfVFJVRSghW3dlYlZpZXdXaXRob3V0VGhl
bWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3IgdGhlbWVDb2xvcl0pOworICAgIEVY
UEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXdXaXRob3V0VGhlbWVDb2xvckZv
clNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3Igc2Nyb2xsVmlld10uYmFja2dyb3VuZENvbG9yLkNH
Q29sb3IsIGJsdWVDb2xvci5nZXQoKSkpOworCisgICAgW3dlYlZpZXdXaXRob3V0VGhlbWVDb2xv
ckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3Igc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5n
QW5kV2FpdFVudGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFtZXNQYWludDpAIjxtZXRhIG5hbWU9J3Ro
ZW1lLWNvbG9yJyBjb250ZW50PSdyZWQnPjxib2R5IHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiBi
bHVlJz4iXTsKKyAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKFt3ZWJWaWV3V2l0
aG91dFRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIHRoZW1lQ29sb3JdLkNH
Q29sb3IsIHJlZENvbG9yLmdldCgpKSk7CisgICAgRVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFsVG9D
b2xvcihbd2ViVmlld1dpdGhvdXRUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xv
ciBzY3JvbGxWaWV3XS5iYWNrZ3JvdW5kQ29sb3IuQ0dDb2xvciwgYmx1ZUNvbG9yLmdldCgpKSk7
CisKKyAgICBhdXRvIHdlYlZpZXdXaXRoVGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5k
Q29sb3IgPSBjcmVhdGVXZWJWaWV3KFVzZVRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3Vu
ZENvbG9yOjpZZXMpOworICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlld1dpdGhUaGVtZUNvbG9yRm9y
U2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciB0aGVtZUNvbG9yXSk7CisKKyAgICBbd2ViVmlld1dp
dGhUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciBzeW5jaHJvbm91c2x5TG9h
ZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPGJv
ZHkgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IGJsdWUnPiJdOworICAgIEVYUEVDVF9UUlVFKCFb
d2ViVmlld1dpdGhUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciB0aGVtZUNv
bG9yXSk7CisgICAgRVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFsVG9Db2xvcihbd2ViVmlld1dpdGhU
aGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciBzY3JvbGxWaWV3XS5iYWNrZ3Jv
dW5kQ29sb3IuQ0dDb2xvciwgYmx1ZUNvbG9yLmdldCgpKSk7CisKKyAgICBbd2ViVmlld1dpdGhU
aGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPG1ldGEg
bmFtZT0ndGhlbWUtY29sb3InIGNvbnRlbnQ9J3JlZCc+PGJvZHkgc3R5bGU9J2JhY2tncm91bmQt
Y29sb3I6IGJsdWUnPiJdOworICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dl
YlZpZXdXaXRoVGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3IgdGhlbWVDb2xv
cl0uQ0dDb2xvciwgcmVkQ29sb3IuZ2V0KCkpKTsKKyAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1
YWxUb0NvbG9yKFt3ZWJWaWV3V2l0aFRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENv
bG9yIHNjcm9sbFZpZXddLmJhY2tncm91bmRDb2xvci5DR0NvbG9yLCByZWRDb2xvci5nZXQoKSkp
OworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426591</attachid>
            <date>2021-04-20 14:26:13 -0700</date>
            <delta_ts>2021-04-20 17:15:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224796-20210420152612.patch</filename>
            <type>text/plain</type>
            <size>63204</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzOTUxZWY1ZmNhN2QxNTIwOGYzMmM4YWM3MDBlZmYzNDhjNjE1MmQzLi4w
YmVjZTE5ODEzNDZlZDc5N2IxNjNhZGNmNjliNDlmMGVlOTE0Mzk5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTMgQEAKKzIwMjEtMDQtMjAgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgorCisgICAgICAgIFBhcnNlIGB0aGVtZV9jb2xvcmAgaW4gd2ViIGFwcGxpY2F0aW9uIG1hbmlm
ZXN0cyBhbmQgcGFzcyBpdCBhbG9uZyB0byBgLVtXS1dlYlZpZXcgdGhlbWVDb2xvcl1gCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ3OTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIE1vZHVsZXMvYXBwbGlj
YXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpB
cHBsaWNhdGlvbk1hbmlmZXN0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25NYW5pZmVzdDo6ZGVjb2RlKToKKworICAgICAgICAqIE1vZHVsZXMvYXBwbGljYXRp
b25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmg6CisgICAgICAgICogTW9kdWxl
cy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6QXBwbGljYXRpb25NYW5pZmVz
dFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpw
YXJzZU1hbmlmZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJz
ZXI6OmxvZ0RldmVsb3Blcldhcm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25N
YW5pZmVzdFBhcnNlcjo6cGFyc2VDb2xvcik6IEFkZGVkLgorICAgICAgICAqIGxvYWRlci9jYWNo
ZS9DYWNoZWRBcHBsaWNhdGlvbk1hbmlmZXN0Lmg6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0Nh
Y2hlZEFwcGxpY2F0aW9uTWFuaWZlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkQXBw
bGljYXRpb25NYW5pZmVzdDo6cHJvY2Vzcyk6CisgICAgICAgIFBhc3MgYW4gYWN0dWFsIGBEb2N1
bWVudGAgaW5zdGVhZCBvZiBhIGBTY3JpcHRFeGVjdXRpb25Db250ZXh0YCBzbyB0aGF0IHdlIGNh
biBub3RpZnkgaXQKKyAgICAgICAgd2hlbiBmaW5pc2hlZCBwYXJzaW5nIHRoZSBKU09OIChgRG9j
dW1lbnQ6OnByb2Nlc3NBcHBsaWNhdGlvbk1hbmlmZXN0YCkuCisKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0aGVtZUNvbG9yIGNvbnN0KToK
KyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OnByb2Nlc3NNZXRhRWxlbWVudFRoZW1lQ29sb3IpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50Ojp0aGVtZUNvbG9yQ2hhbmdlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnByb2Nlc3NBcHBsaWNhdGlvbk1hbmlmZXN0KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6cHJvY2Vzc1RoZW1lQ29sb3IpOiBEZWxldGVkLgorICAgICAgICBV
c2UgdGhlIHRoZW1lIGNvbG9yIGZyb20gYDxtZXRhIG5hbWU9InRoZW1lLWNvbG9yIj5gIGlmIHZh
bGlkLCBmYWxsaW5nIGJhY2sgdG8gdGhlIHRoZW1lCisgICAgICAgIGNvbG9yIGZyb20gYCJ0aGVt
ZV9jb2xvciJgIGluIHRoZSB3ZWIgYXBwbGljYXRpb24gbWFuaWZlc3QgKGlmIHNwZWNpZmllZCku
IE9ubHkgbm90aWZ5IHRoZQorICAgICAgICBVSVByb2Nlc3Mgb2YgY2hhbmdlcyB0byBgPG1ldGEg
bmFtZT0idGhlbWUtY29sb3IiPmAgb3IgdGhlIGAidGhlbWVfY29sb3IiYCBpbiB0aGUgd2ViCisg
ICAgICAgIGFwcGxpY2F0aW9uIG1hbmlmZXN0IGlmIHRoZSBuZXcgdmFsdWUgaXMgdGhlIHZhbHVl
IHRoYXQgd291bGQgYmUgdXNlZC4KKworICAgICAgICAqIGh0bWwvSFRNTE1ldGFFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50Ojpwcm9jZXNzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cm9vdEJhY2tncm91bmRDb2xvck9yVHJhbnNwYXJlbmN5
Q2hhbmdlZCk6CisgICAgICAgIERyaXZlLWJ5OiBSZW5hbWUgYERvY3VtZW50Ojpwcm9jZXNzVGhl
bWVDb2xvcmAgdG8gYERvY3VtZW50Ojpwcm9jZXNzTWV0YUVsZW1lbnRUaGVtZUNvbG9yYAorICAg
ICAgICBzbyB0aGF0IGl0J3MgbW9yZSBzcGVjaWZpYyB0byBgPG1ldGEgbmFtZT0idGhlbWUtY29s
b3IiPmAuCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21lQ2xpZW50Ojp0aGVtZUNvbG9yQ2hhbmdlZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWVDbGllbnQ6OnBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvckRpZENoYW5nZSBj
b25zdCk6CisgICAgICAgIERyaXZlLWJ5OiBSZW1vdmUgdGhlIGBDb2xvcmAgcGFyYW1ldGVyIHNp
bmNlIGl0J3Mgbm90IGFjdHVhbGx5IHVzZWQgaW4gdGhlIFdlYlByb2Nlc3MuCisKIDIwMjEtMDQt
MTkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIENTU1ZhbHVl
UG9vbCBzaG91bGQgYmUgbm9uLWNvcHlhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ0NzczMjUzNDRjNTc3OGRj
NjQ1MGQ1Y2Q4NDg4ZjU0YzRiZjBkOTEuLjdjNWIzMzljNDFmNTY1N2UzMmYxMTIzODkzMTU2ZTQ1
YzY0OTg3OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjEtMDQtMjAgIERldmluIFJv
dXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFBhcnNlIGB0aGVtZV9jb2xvcmAg
aW4gd2ViIGFwcGxpY2F0aW9uIG1hbmlmZXN0cyBhbmQgcGFzcyBpdCBhbG9uZyB0byBgLVtXS1dl
YlZpZXcgdGhlbWVDb2xvcl1gCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjQ3OTYKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5tbToK
KyAgICAgICAgKC1bX1dLQXBwbGljYXRpb25NYW5pZmVzdCBpbml0V2l0aENvZGVyOl0pOgorICAg
ICAgICAoLVtfV0tBcHBsaWNhdGlvbk1hbmlmZXN0IGVuY29kZVdpdGhDb2RlcjpdKToKKyAgICAg
ICAgKC1bX1dLQXBwbGljYXRpb25NYW5pZmVzdCB0aGVtZUNvbG9yXSk6IEFkZGVkLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6dGhlbWVDb2xvckNoYW5nZWQgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnBhZ2VFeHRlbmRlZEJhY2tncm91bmRD
b2xvckRpZENoYW5nZSBjb25zdCk6CisgICAgICAgIERyaXZlLWJ5OiBSZW1vdmUgdGhlIGBDb2xv
cmAgcGFyYW1ldGVyIHNpbmNlIGl0J3Mgbm90IGFjdHVhbGx5IHVzZWQgaW4gdGhlIFdlYlByb2Nl
c3MuCisKIDIwMjEtMDQtMTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZGQgbW9yZSBHUFVQcm9jZXNzIHJlbGVhc2UgbG9nZ2luZyB0byBmYWNpbGl0YXRlIGRl
YnVnZ2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1h
bmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBw
bGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0LmgKaW5kZXggNDQxYTJkODZhOWFk
ZGEyNjAyMGUwYzg5NTdjYmVhMTEzZTc2MTFkZi4uN2JlMWEwZDFkZTMwODE2ODM4ZGM1NzJlNDRl
NGU1Mzk1OWNiY2MwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNh
dGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdC5oCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCiAKKyNpbmNsdWRl
ICJDb2xvci5oIgogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgpAQCAtNDcsNiArNDgsNyBAQCBzdHJ1Y3Qg
QXBwbGljYXRpb25NYW5pZmVzdCB7CiAgICAgVVJMIHNjb3BlOwogICAgIERpc3BsYXkgZGlzcGxh
eTsKICAgICBVUkwgc3RhcnRVUkw7CisgICAgQ29sb3IgdGhlbWVDb2xvcjsKIAogICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8QXBwbGljYXRpb25NYW5pZmVzdD4g
ZGVjb2RlKERlY29kZXImKTsKQEAgLTU1LDcgKzU3LDcgQEAgc3RydWN0IEFwcGxpY2F0aW9uTWFu
aWZlc3QgewogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgQXBwbGljYXRpb25NYW5pZmVz
dDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgZW5jb2RlciA8PCBuYW1l
IDw8IHNob3J0TmFtZSA8PCBkZXNjcmlwdGlvbiA8PCBzY29wZSA8PCBkaXNwbGF5IDw8IHN0YXJ0
VVJMOworICAgIGVuY29kZXIgPDwgbmFtZSA8PCBzaG9ydE5hbWUgPDwgZGVzY3JpcHRpb24gPDwg
c2NvcGUgPDwgZGlzcGxheSA8PCBzdGFydFVSTCA8PCB0aGVtZUNvbG9yOwogfQogCiB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgpAQCAtNzUsNiArNzcsOCBAQCBPcHRpb25hbDxBcHBsaWNhdGlvbk1h
bmlmZXN0PiBBcHBsaWNhdGlvbk1hbmlmZXN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5zdGFydFVSTCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQudGhlbWVDb2xvcikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9u
TWFuaWZlc3RQYXJzZXIuY3BwCmluZGV4IGY4OGNhZGE2NjBmMzlhZGVmYTAwNmQwOTVlYzU4N2Zi
MjkzNDYyMGYuLjRjYjBkZjc3MGNkOGFlZTI1NDdmYWFlMGI1ODBiZTE4ZmNjZTgxZTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNh
dGlvbk1hbmlmZXN0UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxp
Y2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAKQEAgLTI4LDE0ICsy
OCwxNyBAQAogCiAjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQogCisjaW5jbHVkZSAi
Q1NTUGFyc2VyLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ29u
c29sZU1lc3NhZ2UuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1BcHBsaWNhdGlvbk1hbmlm
ZXN0IEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBV
UkwmIG1hbmlmZXN0VVJMLCBjb25zdCBVUkwmIGRvY3VtZW50VVJMKQorQXBwbGljYXRpb25NYW5p
ZmVzdCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZShEb2N1bWVudCYgZG9jdW1lbnQs
IGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBVUkwmIG1hbmlmZXN0VVJMLCBjb25zdCBVUkwm
IGRvY3VtZW50VVJMKQogewotICAgIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIgcGFyc2VyIHsg
JnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgfTsKKyAgICBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
IHBhcnNlciB7ICZkb2N1bWVudCB9OwogICAgIHJldHVybiBwYXJzZXIucGFyc2VNYW5pZmVzdChz
b3VyY2UsIG1hbmlmZXN0VVJMLCBkb2N1bWVudFVSTCk7CiB9CiAKQEAgLTQ1LDggKzQ4LDggQEAg
QXBwbGljYXRpb25NYW5pZmVzdCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZShjb25z
dCBTdHJpbmcmIHNvdXJjZSwgY29uc3QKICAgICByZXR1cm4gcGFyc2VyLnBhcnNlTWFuaWZlc3Qo
c291cmNlLCBtYW5pZmVzdFVSTCwgZG9jdW1lbnRVUkwpOwogfQogCi1BcHBsaWNhdGlvbk1hbmlm
ZXN0UGFyc2VyOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyKFJlZlB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0PiBjb25zb2xlQ29udGV4dCkKLSAgICA6IG1fY29uc29sZUNvbnRleHQoY29uc29s
ZUNvbnRleHQpCitBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpBcHBsaWNhdGlvbk1hbmlmZXN0
UGFyc2VyKFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3Vt
ZW50KQogewogfQogCkBAIC03NCw2ICs3NywxMCBAQCBBcHBsaWNhdGlvbk1hbmlmZXN0IEFwcGxp
Y2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlTWFuaWZlc3QoY29uc3QgU3RyaW5nJiB0ZXh0LAog
ICAgIHBhcnNlZE1hbmlmZXN0LmRlc2NyaXB0aW9uID0gcGFyc2VEZXNjcmlwdGlvbigqbWFuaWZl
c3QpOwogICAgIHBhcnNlZE1hbmlmZXN0LnNob3J0TmFtZSA9IHBhcnNlU2hvcnROYW1lKCptYW5p
ZmVzdCk7CiAgICAgcGFyc2VkTWFuaWZlc3Quc2NvcGUgPSBwYXJzZVNjb3BlKCptYW5pZmVzdCwg
ZG9jdW1lbnRVUkwsIHBhcnNlZE1hbmlmZXN0LnN0YXJ0VVJMKTsKKyAgICBwYXJzZWRNYW5pZmVz
dC50aGVtZUNvbG9yID0gcGFyc2VDb2xvcigqbWFuaWZlc3QsICJ0aGVtZV9jb2xvciJfcyk7CisK
KyAgICBpZiAobV9kb2N1bWVudCkKKyAgICAgICAgbV9kb2N1bWVudC0+cHJvY2Vzc0FwcGxpY2F0
aW9uTWFuaWZlc3QocGFyc2VkTWFuaWZlc3QpOwogCiAgICAgcmV0dXJuIHBhcnNlZE1hbmlmZXN0
OwogfQpAQCAtOTAsOCArOTcsOCBAQCB2b2lkIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6Omxv
Z01hbmlmZXN0UHJvcGVydHlJbnZhbGlkVVJMKGNvbnN0IFN0cmluZyYgcHJvcAogCiB2b2lkIEFw
cGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OmxvZ0RldmVsb3Blcldhcm5pbmcoY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQogewotICAgIGlmIChtX2NvbnNvbGVDb250ZXh0KQotICAgICAgICBtX2NvbnNv
bGVDb250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShtYWtlVW5pcXVlPEluc3BlY3Rvcjo6Q29uc29s
ZU1lc3NhZ2U+KEpTQzo6TWVzc2FnZVNvdXJjZTo6T3RoZXIsIEpTQzo6TWVzc2FnZVR5cGU6Okxv
ZywgSlNDOjpNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsIG1ha2VTdHJpbmcoIlBhcnNpbmcgYXBwbGlj
YXRpb24gbWFuaWZlc3QgIl9zLCBtX21hbmlmZXN0VVJMLnN0cmluZygpLCAiOiAiX3MsIG1lc3Nh
Z2UpKSk7CisgICAgaWYgKG1fZG9jdW1lbnQpCisgICAgICAgIG1fZG9jdW1lbnQtPmFkZENvbnNv
bGVNZXNzYWdlKG1ha2VVbmlxdWU8SW5zcGVjdG9yOjpDb25zb2xlTWVzc2FnZT4oSlNDOjpNZXNz
YWdlU291cmNlOjpPdGhlciwgSlNDOjpNZXNzYWdlVHlwZTo6TG9nLCBKU0M6Ok1lc3NhZ2VMZXZl
bDo6V2FybmluZywgbWFrZVN0cmluZygiUGFyc2luZyBhcHBsaWNhdGlvbiBtYW5pZmVzdCAiX3Ms
IG1fbWFuaWZlc3RVUkwuc3RyaW5nKCksICI6ICJfcywgbWVzc2FnZSkpKTsKIH0KIAogVVJMIEFw
cGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU3RhcnRVUkwoY29uc3QgSlNPTjo6T2JqZWN0
JiBtYW5pZmVzdCwgY29uc3QgVVJMJiBkb2N1bWVudFVSTCkKQEAgLTIyOSw2ICsyMzYsMTEgQEAg
VVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU2NvcGUoY29uc3QgSlNPTjo6T2Jq
ZWN0JiBtYW5pZmVzdCwgY29uc3QgVVIKICAgICByZXR1cm4gc2NvcGVVUkw7CiB9CiAKK0NvbG9y
IEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgSlNPTjo6T2JqZWN0
JiBtYW5pZmVzdCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIENT
U1BhcnNlcjo6cGFyc2VDb2xvcihwYXJzZUdlbmVyaWNTdHJpbmcobWFuaWZlc3QsIHByb3BlcnR5
TmFtZSkpOworfQorCiBTdHJpbmcgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VHZW5l
cmljU3RyaW5nKGNvbnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFN0cmluZyYgcHJv
cGVydHlOYW1lKQogewogICAgIGF1dG8gdmFsdWUgPSBtYW5pZmVzdC5nZXRWYWx1ZShwcm9wZXJ0
eU5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1h
bmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmgKaW5kZXgg
MjI1NDBmNzBkNTY2NWYwZDc0MGFlNTRkYzVjZDNmNzAwMmQxZGY2OS4uM2Y5NjJkYmE4MjIxM2Ux
Zjg0NjQ5NzM0NTE3NGY5NGZmODdhNTlmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25N
YW5pZmVzdFBhcnNlci5oCkBAIC0yOCwxOCArMjgsMjAgQEAKICNpZiBFTkFCTEUoQVBQTElDQVRJ
T05fTUFOSUZFU1QpCiAKICNpbmNsdWRlICJBcHBsaWNhdGlvbk1hbmlmZXN0LmgiCi0jaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ29sb3I7CitjbGFzcyBEb2N1bWVudDsK
KwogY2xhc3MgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlciB7CiBwdWJsaWM6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIEFwcGxpY2F0aW9uTWFuaWZlc3QgcGFyc2UoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYgbWFuaWZlc3RVUkwsIGNvbnN0IFVS
TCYgZG9jdW1lbnRVUkwpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBBcHBsaWNhdGlvbk1h
bmlmZXN0IHBhcnNlKERvY3VtZW50JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiBtYW5pZmVz
dFVSTCwgY29uc3QgVVJMJiBkb2N1bWVudFVSTCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IEFwcGxpY2F0aW9uTWFuaWZlc3QgcGFyc2UoY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJiBtYW5p
ZmVzdFVSTCwgY29uc3QgVVJMJiBkb2N1bWVudFVSTCk7CiAKIHByaXZhdGU6Ci0gICAgQXBwbGlj
YXRpb25NYW5pZmVzdFBhcnNlcihSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4pOworICAg
IEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIoUmVmUHRyPERvY3VtZW50Pik7CiAgICAgQXBwbGlj
YXRpb25NYW5pZmVzdCBwYXJzZU1hbmlmZXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYsIGNv
bnN0IFVSTCYpOwogCiAgICAgVVJMIHBhcnNlU3RhcnRVUkwoY29uc3QgSlNPTjo6T2JqZWN0Jiwg
Y29uc3QgVVJMJik7CkBAIC00OSwxMyArNTEsMTQgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgcGFy
c2VTaG9ydE5hbWUoY29uc3QgSlNPTjo6T2JqZWN0Jik7CiAgICAgVVJMIHBhcnNlU2NvcGUoY29u
c3QgSlNPTjo6T2JqZWN0JiwgY29uc3QgVVJMJiwgY29uc3QgVVJMJik7CiAKKyAgICBDb2xvciBw
YXJzZUNvbG9yKGNvbnN0IEpTT046Ok9iamVjdCYsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
KTsKICAgICBTdHJpbmcgcGFyc2VHZW5lcmljU3RyaW5nKGNvbnN0IEpTT046Ok9iamVjdCYsIGNv
bnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBsb2dNYW5pZmVzdFByb3BlcnR5Tm90QVN0cmluZyhj
b25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGxvZ01hbmlmZXN0UHJvcGVydHlJbnZhbGlkVVJMKGNv
bnN0IFN0cmluZyYpOwogICAgIHZvaWQgbG9nRGV2ZWxvcGVyV2FybmluZyhjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOwogCi0gICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fY29uc29s
ZUNvbnRleHQ7CisgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIFVSTCBtX21h
bmlmZXN0VVJMOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggYjZjOGFlNDFlZmIz
YmRkY2EyNzg1ZWY5ZDUyZDhkYzYxZDM5NWYzYi4uZTYxZjdkNmYwMGYxYWQ5ZWZmNzdlNmU0ZjJh
OTE4YTc1MWNlMmYzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKIAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNp
bmNsdWRlICJBcHBsaWNhdGlvbk1hbmlmZXN0LmgiCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1
ZGUgIkJlZm9yZVVubG9hZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCkBAIC0z
ODQ3LDE4ICszODQ4LDIyIEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVZpZXdwb3J0QXJndW1lbnRz
KCkKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnByb2Nlc3NUaGVtZUNvbG9yKGNvbnN0IFN0
cmluZyYgdGhlbWVDb2xvclN0cmluZykKK3ZvaWQgRG9jdW1lbnQ6OnByb2Nlc3NNZXRhRWxlbWVu
dFRoZW1lQ29sb3IoY29uc3QgU3RyaW5nJiB0aGVtZUNvbG9yU3RyaW5nKQogewotICAgIGF1dG8g
dGhlbWVDb2xvciA9IENTU1BhcnNlcjo6cGFyc2VDb2xvcih0aGVtZUNvbG9yU3RyaW5nKTsKLSAg
ICBpZiAodGhlbWVDb2xvciA9PSBtX3RoZW1lQ29sb3IpCisgICAgYXV0byBvbGRUaGVtZUNvbG9y
ID0gdGhlbWVDb2xvcigpOworICAgIG1fbWV0YUVsZW1lbnRUaGVtZUNvbG9yID0gQ1NTUGFyc2Vy
OjpwYXJzZUNvbG9yKHRoZW1lQ29sb3JTdHJpbmcpOworICAgIGlmICh0aGVtZUNvbG9yKCkgPT0g
b2xkVGhlbWVDb2xvcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV90aGVtZUNvbG9yID0gV1RG
TW92ZSh0aGVtZUNvbG9yKTsKKyAgICB0aGVtZUNvbG9yQ2hhbmdlZCgpOworfQogCit2b2lkIERv
Y3VtZW50Ojp0aGVtZUNvbG9yQ2hhbmdlZCgpCit7CiAgICAgc2NoZWR1bGVSZW5kZXJpbmdVcGRh
dGUoeyB9KTsKIAogICAgIGlmIChhdXRvKiBwYWdlID0gdGhpcy0+cGFnZSgpKQotICAgICAgICBw
YWdlLT5jaHJvbWUoKS5jbGllbnQoKS50aGVtZUNvbG9yQ2hhbmdlZChtX3RoZW1lQ29sb3IpOwor
ICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS50aGVtZUNvbG9yQ2hhbmdlZCgpOwogCiAj
aWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgIGlmIChhdXRvKiB2aWV3ID0gcmVuZGVyVmll
dygpKSB7CkBAIC0zOTcyLDYgKzM5NzcsMjAgQEAgdm9pZCBEb2N1bWVudDo6cHJvY2Vzc1JlZmVy
cmVyUG9saWN5KGNvbnN0IFN0cmluZyYgcG9saWN5LCBSZWZlcnJlclBvbGljeVNvdXJjZQogICAg
IHNldFJlZmVycmVyUG9saWN5KHJlZmVycmVyUG9saWN5LnZhbHVlKCkpOwogfQogCisjaWYgRU5B
QkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQorCit2b2lkIERvY3VtZW50Ojpwcm9jZXNzQXBwbGlj
YXRpb25NYW5pZmVzdChjb25zdCBBcHBsaWNhdGlvbk1hbmlmZXN0JiBhcHBsaWNhdGlvbk1hbmlm
ZXN0KQoreworICAgIGF1dG8gb2xkVGhlbWVDb2xvciA9IHRoZW1lQ29sb3IoKTsKKyAgICBtX2Fw
cGxpY2F0aW9uTWFuaWZlc3RUaGVtZUNvbG9yID0gYXBwbGljYXRpb25NYW5pZmVzdC50aGVtZUNv
bG9yOworICAgIGlmICh0aGVtZUNvbG9yKCkgPT0gb2xkVGhlbWVDb2xvcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgdGhlbWVDb2xvckNoYW5nZWQoKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShB
UFBMSUNBVElPTl9NQU5JRkVTVCkKKwogTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyBEb2N1
bWVudDo6cHJlcGFyZU1vdXNlRXZlbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IExheW91dFBvaW50JiBkb2N1bWVudFBvaW50LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IGV2ZW50KQogewogICAgIGlmICghaGFzTGl2aW5nUmVuZGVyVHJlZSgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAppbmRleCBiYWVhZmIxNmMzMjc0ZDYwNWNmY2Q1ZWI1YzRhMDBlYjFhN2QyZjg1Li43OTk1
NmM5YjhjYTRmYTQ4NTIzMzY5MzU2NzczM2E4ODlhZmM0MGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aApAQCAtMjM0LDYgKzIzNCw3IEBAIGNsYXNzIFhQYXRoRXhwcmVzc2lvbjsKIGNsYXNzIFhQYXRo
TlNSZXNvbHZlcjsKIGNsYXNzIFhQYXRoUmVzdWx0OwogCitzdHJ1Y3QgQXBwbGljYXRpb25NYW5p
ZmVzdDsKIHN0cnVjdCBCb3VuZGFyeVBvaW50Owogc3RydWN0IEhpZ2hsaWdodFJhbmdlRGF0YTsK
IHN0cnVjdCBJbnRlcnNlY3Rpb25PYnNlcnZlckRhdGE7CkBAIC03NDAsNyArNzQxLDcgQEAgcHVi
bGljOgogICAgIFNlY29uZHMgdGltZVNpbmNlRG9jdW1lbnRDcmVhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9kb2N1bWVudENyZWF0aW9uVGltZTsgfTsKICNl
bmRpZgogCi0gICAgY29uc3QgQ29sb3ImIHRoZW1lQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3Ro
ZW1lQ29sb3I7IH0KKyAgICBjb25zdCBDb2xvciYgdGhlbWVDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IG1fbWV0YUVsZW1lbnRUaGVtZUNvbG9yLmlzVmFsaWQoKSA/IG1fbWV0YUVsZW1lbnRUaGVtZUNv
bG9yIDogbV9hcHBsaWNhdGlvbk1hbmlmZXN0VGhlbWVDb2xvcjsgfQogCiAgICAgdm9pZCBzZXRU
ZXh0Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fdGV4dENvbG9yID0gY29sb3I7IH0KICAg
ICBjb25zdCBDb2xvciYgdGV4dENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q29sb3I7IH0K
QEAgLTkwOCwxMiArOTA5LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIHByb2Nlc3NEaXNhYmxlZEFk
YXB0YXRpb25zKGNvbnN0IFN0cmluZyYgYWRhcHRhdGlvbnMpOwogICAgIHZvaWQgdXBkYXRlVmll
d3BvcnRBcmd1bWVudHMoKTsKICAgICB2b2lkIHByb2Nlc3NSZWZlcnJlclBvbGljeShjb25zdCBT
dHJpbmcmIHBvbGljeSwgUmVmZXJyZXJQb2xpY3lTb3VyY2UpOwotICAgIHZvaWQgcHJvY2Vzc1Ro
ZW1lQ29sb3IoY29uc3QgU3RyaW5nJiB0aGVtZUNvbG9yKTsKKyAgICB2b2lkIHByb2Nlc3NNZXRh
RWxlbWVudFRoZW1lQ29sb3IoY29uc3QgU3RyaW5nJiB0aGVtZUNvbG9yKTsKIAogI2lmIEVOQUJM
RShEQVJLX01PREVfQ1NTKQogICAgIHZvaWQgcHJvY2Vzc0NvbG9yU2NoZW1lKGNvbnN0IFN0cmlu
ZyYgY29sb3JTY2hlbWUpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZF
U1QpCisgICAgdm9pZCBwcm9jZXNzQXBwbGljYXRpb25NYW5pZmVzdChjb25zdCBBcHBsaWNhdGlv
bk1hbmlmZXN0Jik7CisjZW5kaWYKKwogICAgIC8vIFJldHVybnMgdGhlIG93bmluZyBlbGVtZW50
IGluIHRoZSBwYXJlbnQgZG9jdW1lbnQuCiAgICAgLy8gUmV0dXJucyBudWxscHRyIGlmIHRoaXMg
aXMgdGhlIHRvcCBsZXZlbCBkb2N1bWVudC4KICAgICBXRUJDT1JFX0VYUE9SVCBIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG93bmVyRWxlbWVudCgpIGNvbnN0OwpAQCAtMTY2OSw2ICsxNjc0LDggQEAg
cHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24m
KTsKICAgICB2b2lkIHVwZGF0ZUJhc2VVUkwoKTsKIAorICAgIHZvaWQgdGhlbWVDb2xvckNoYW5n
ZWQoKTsKKwogICAgIHZvaWQgaW52YWxpZGF0ZUFjY2Vzc0tleUNhY2hlU2xvd0Nhc2UoKTsKICAg
ICB2b2lkIGJ1aWxkQWNjZXNzS2V5Q2FjaGUoKTsKIApAQCAtMTc4OSw3ICsxNzk2LDkgQEAgcHJp
dmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGb3JtQ29udHJvbGxlcj4gbV9mb3JtQ29udHJv
bGxlcjsKIAotICAgIENvbG9yIG1fdGhlbWVDb2xvcjsKKyAgICBDb2xvciBtX21ldGFFbGVtZW50
VGhlbWVDb2xvcjsKKyAgICBDb2xvciBtX2FwcGxpY2F0aW9uTWFuaWZlc3RUaGVtZUNvbG9yOwor
CiAgICAgQ29sb3IgbV90ZXh0Q29sb3IgeyBDb2xvcjo6YmxhY2sgfTsKICAgICBDb2xvciBtX2xp
bmtDb2xvcjsKICAgICBDb2xvciBtX3Zpc2l0ZWRMaW5rQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZXRhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZXRhRWxlbWVudC5jcHAKaW5kZXggZDNjYzE0N2E3MmI0MDliMzhmYjdiMzdiMTcxZDIz
MzYxM2UxNjQzNS4uYzg5Y2Y4NTU3ZjYzNWQ2MDg1OTI3MjJhMWE3NjM0ZTM2Nzg3MDE1YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0YUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50LmNwcApAQCAtNTcsNyArNTcsNyBAQCB2
b2lkIEhUTUxNZXRhRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBjb25zdCBBdG9tU3RyaQogICAgIEhUTUxFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2Vk
KG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSwgcmVhc29uKTsKIAogICAgIGlmIChuYW1lID09IG5h
bWVBdHRyICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG9sZFZhbHVlLCAidGhlbWUt
Y29sb3IiKSAmJiAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmV3VmFsdWUsICJ0aGVt
ZS1jb2xvciIpKQotICAgICAgICBkb2N1bWVudCgpLnByb2Nlc3NUaGVtZUNvbG9yKGVtcHR5U3Ry
aW5nKCkpOworICAgICAgICBkb2N1bWVudCgpLnByb2Nlc3NNZXRhRWxlbWVudFRoZW1lQ29sb3Io
ZW1wdHlTdHJpbmcoKSk7CiB9CiAKIHZvaWQgSFRNTE1ldGFFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKQEAg
LTkwLDcgKzkwLDcgQEAgdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3Io
UmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUKICAgICBIVE1MRWxlbWVudDo6
cmVtb3ZlZEZyb21BbmNlc3RvcihyZW1vdmFsVHlwZSwgb2xkUGFyZW50T2ZSZW1vdmVkVHJlZSk7
CiAKICAgICBpZiAoIWlzQ29ubmVjdGVkKCkgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UobmFtZSgpLCAidGhlbWUtY29sb3IiKSkKLSAgICAgICAgb2xkUGFyZW50T2ZSZW1vdmVkVHJl
ZS5kb2N1bWVudCgpLnByb2Nlc3NUaGVtZUNvbG9yKGVtcHR5U3RyaW5nKCkpOworICAgICAgICBv
bGRQYXJlbnRPZlJlbW92ZWRUcmVlLmRvY3VtZW50KCkucHJvY2Vzc01ldGFFbGVtZW50VGhlbWVD
b2xvcihlbXB0eVN0cmluZygpKTsKIH0KIAogdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnByb2Nlc3Mo
KQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgSFRNTE1ldGFFbGVtZW50Ojpwcm9jZXNzKCkKICAg
ICAgICAgZG9jdW1lbnQoKS5wcm9jZXNzQ29sb3JTY2hlbWUoY29udGVudFZhbHVlKTsKICNlbmRp
ZgogICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUoKSwgInRo
ZW1lLWNvbG9yIikpCi0gICAgICAgIGRvY3VtZW50KCkucHJvY2Vzc1RoZW1lQ29sb3IoY29udGVu
dFZhbHVlKTsKKyAgICAgICAgZG9jdW1lbnQoKS5wcm9jZXNzTWV0YUVsZW1lbnRUaGVtZUNvbG9y
KGNvbnRlbnRWYWx1ZSk7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBlbHNlIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lKCksICJmb3JtYXQtZGV0ZWN0aW9uIikp
CiAgICAgICAgIGRvY3VtZW50KCkucHJvY2Vzc0Zvcm1hdERldGVjdGlvbihjb250ZW50VmFsdWUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEFwcGxpY2F0
aW9uTWFuaWZlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEFwcGxp
Y2F0aW9uTWFuaWZlc3QuY3BwCmluZGV4IDAyYjllZDI2YmE2YTlhMzg5N2I1ZWMxNGQwMjYwZTQ3
Y2U0MWJhZDQuLjUxZDhkMGE4NmM0YWFhYzNkYWQxYWM2OTNlZDE0NWM4MDVmYTgwNzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRBcHBsaWNhdGlvbk1hbmlm
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQXBwbGljYXRp
b25NYW5pZmVzdC5jcHAKQEAgLTU5LDEyICs1OSwxMiBAQCBTdHJpbmcgQ2FjaGVkQXBwbGljYXRp
b25NYW5pZmVzdDo6ZW5jb2RpbmcoKSBjb25zdAogICAgIHJldHVybiBtX2RlY29kZXItPmVuY29k
aW5nKCkubmFtZSgpOwogfQogCi1PcHRpb25hbDxBcHBsaWNhdGlvbk1hbmlmZXN0PiBDYWNoZWRB
cHBsaWNhdGlvbk1hbmlmZXN0Ojpwcm9jZXNzKGNvbnN0IFVSTCYgbWFuaWZlc3RVUkwsIGNvbnN0
IFVSTCYgZG9jdW1lbnRVUkwsIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KQorT3B0aW9uYWw8QXBwbGljYXRpb25NYW5pZmVzdD4gQ2FjaGVkQXBw
bGljYXRpb25NYW5pZmVzdDo6cHJvY2Vzcyhjb25zdCBVUkwmIG1hbmlmZXN0VVJMLCBjb25zdCBV
UkwmIGRvY3VtZW50VVJMLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFtX3RleHQp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpCi0gICAgICAgIHJldHVybiBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZSgq
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgKm1fdGV4dCwgbWFuaWZlc3RVUkwsIGRvY3VtZW50VVJM
KTsKKyAgICBpZiAoZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBBcHBsaWNhdGlvbk1hbmlmZXN0
UGFyc2VyOjpwYXJzZSgqZG9jdW1lbnQsICptX3RleHQsIG1hbmlmZXN0VVJMLCBkb2N1bWVudFVS
TCk7CiAgICAgcmV0dXJuIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlKCptX3RleHQs
IG1hbmlmZXN0VVJMLCBkb2N1bWVudFVSTCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRBcHBsaWNhdGlvbk1hbmlmZXN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQXBwbGljYXRpb25NYW5pZmVzdC5oCmluZGV4IDVlYWMx
MGUyMmY1YzA1ODA3NjQ2MWRlNDU4YTE1OTE5MDRhZGZmOWMuLjhmYTg2Y2FjOGJjNWNkZDI2MWE3
OTMzNzc3N2U2ZThhZTZlZGVmYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRBcHBsaWNhdGlvbk1hbmlmZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZEFwcGxpY2F0aW9uTWFuaWZlc3QuaApAQCAtMzMsMTQgKzMzLDE0IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
K2NsYXNzIERvY3VtZW50OwogY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKIAogY2xhc3MgQ2Fj
aGVkQXBwbGljYXRpb25NYW5pZmVzdCBmaW5hbCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7CiBw
dWJsaWM6CiAgICAgQ2FjaGVkQXBwbGljYXRpb25NYW5pZmVzdChDYWNoZWRSZXNvdXJjZVJlcXVl
c3QmJiwgY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBjb25zdCBDb29raWVKYXIqKTsKIAotICAgIE9w
dGlvbmFsPHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlmZXN0PiBwcm9jZXNzKGNvbnN0IFVSTCYgbWFu
aWZlc3RVUkwsIGNvbnN0IFVSTCYgZG9jdW1lbnRVUkwsIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25D
b250ZXh0PiA9IG51bGxwdHIpOworICAgIE9wdGlvbmFsPHN0cnVjdCBBcHBsaWNhdGlvbk1hbmlm
ZXN0PiBwcm9jZXNzKGNvbnN0IFVSTCYgbWFuaWZlc3RVUkwsIGNvbnN0IFVSTCYgZG9jdW1lbnRV
UkwsIERvY3VtZW50KiA9IG51bGxwdHIpOwogCiBwcml2YXRlOgogICAgIHZvaWQgZmluaXNoTG9h
ZGluZyhTaGFyZWRCdWZmZXIqLCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKSBvdmVycmlkZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IGRmNGM5YzFmODRlY2EyMGU3YjFmYmQz
N2MxNDM4YzVlMGFiYjBkNTkuLmNmMTZhZTZlYTQ3NWJiZmM2YjU5ZTQ0MzI3NDRiMzk1MGI4MWEw
ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtMjMxLDggKzIzMSw4IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgQ29sb3IgdW5kZXJsYXlDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IENvbG9yKCk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNvbG9yQ2hhbmdlZChDb2xvcikg
Y29uc3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvckRp
ZENoYW5nZShDb2xvcikgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ29sb3JDaGFu
Z2VkKCkgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhZ2VFeHRlbmRlZEJhY2tncm91bmRD
b2xvckRpZENoYW5nZSgpIGNvbnN0IHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0
YWJhc2VRdW90YShGcmFtZSYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBEYXRhYmFzZURl
dGFpbHMpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcAppbmRleCBlNTJhYTc5YzNhNTgwZGY2MjhjMjhiZWNjMjlkMzMwZDdm
ZTYxM2E2Li4xNzQ2MzYzYjNlZWNjNzFiNmRjYjQ5MmUyMzUwYmYzMGMzZGI3MDBiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApA
QCAtNDAwOCw3ICs0MDA4LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJvb3RCYWNr
Z3JvdW5kQ29sb3JPclRyYW5zcGFyZW5jeUNoYW5nZWQoKQogICAgIG1fcm9vdEV4dGVuZGVkQmFj
a2dyb3VuZENvbG9yID0gZXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3I7CiAgICAgCiAgICAgaWYgKGV4
dGVuZGVkQmFja2dyb3VuZENvbG9yQ2hhbmdlZCkgewotICAgICAgICBwYWdlKCkuY2hyb21lKCku
Y2xpZW50KCkucGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yRGlkQ2hhbmdlKG1fcm9vdEV4dGVu
ZGVkQmFja2dyb3VuZENvbG9yKTsKKyAgICAgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLnBh
Z2VFeHRlbmRlZEJhY2tncm91bmRDb2xvckRpZENoYW5nZSgpOwogICAgICAgICAKICNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgICAgIHVwZGF0ZUxheWVyRm9yT3ZlcmhhbmdBcmVhc0Jh
Y2tncm91bmRDb2xvcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmgKaW5kZXggYmNlODQ2Njk2NmJkNzE0
YzU4NWIxMjk2YmY2NWQ5NTI0ODFkMmYyZS4uYTEyMDM3MGUyZjU4MGU2MzQzZDM4MzNiMTc2ZDQx
NDZmNGQxOTA4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oCkBAIC0yNiw2ICsyNiwxMiBAQAogI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0
aW9uLmg+CiAKKyNpZiBUQVJHRVRfT1NfSVBIT05FCitAY2xhc3MgVUlDb2xvcjsKKyNlbHNlCitA
Y2xhc3MgTlNDb2xvcjsKKyNlbmRpZgorCiBOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgogCiB0eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0RGlzcGxheU1vZGUp
IHsKQEAgLTQ1LDYgKzUxLDEyIEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwg
aW9zKDExLjMpKQogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1VSTCAq
c3RhcnRVUkw7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIF9XS0FwcGxpY2F0aW9u
TWFuaWZlc3REaXNwbGF5TW9kZSBkaXNwbGF5TW9kZTsKIAorI2lmIFRBUkdFVF9PU19JUEhPTkUK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgbnVsbGFibGUsIGNvcHkpIFVJQ29sb3Ig
KnRoZW1lQ29sb3IgV0tfQVBJX0FWQUlMQUJMRShpb3MoV0tfSU9TX1RCQSkpOworI2Vsc2UKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgbnVsbGFibGUsIGNvcHkpIE5TQ29sb3IgKnRo
ZW1lQ29sb3IgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSk7CisjZW5kaWYKKwog
KyAoX1dLQXBwbGljYXRpb25NYW5pZmVzdCAqKWFwcGxpY2F0aW9uTWFuaWZlc3RGcm9tSlNPTjoo
TlNTdHJpbmcgKilqc29uIG1hbmlmZXN0VVJMOihudWxsYWJsZSBOU1VSTCAqKW1hbmlmZXN0VVJM
IGRvY3VtZW50VVJMOihudWxsYWJsZSBOU1VSTCAqKWRvY3VtZW50VVJMOwogCiBAZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXBwbGljYXRpb25N
YW5pZmVzdC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNh
dGlvbk1hbmlmZXN0Lm1tCmluZGV4IGY1NDA3ODMyNWRhMWJmZmY4ZDU3YWUwNjYyMzc4NzM0NTEz
ZWE5NjUuLmI1NjJmYTRhMDgzYWY1OThmNjc3MzliNWI2OWI5MDY1OTY3MWIzNjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNhdGlvbk1hbmlm
ZXN0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBcHBsaWNh
dGlvbk1hbmlmZXN0Lm1tCkBAIC0yNiwxMCArMjYsMjEgQEAKICNpbXBvcnQgImNvbmZpZy5oIgog
I2ltcG9ydCAiX1dLQXBwbGljYXRpb25NYW5pZmVzdEludGVybmFsLmgiCiAKKyNpbXBvcnQgIkNv
Y29hQ29sb3IuaCIKICNpbXBvcnQgPFdlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0NvbG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbG9yQ29jb2EuaD4KICNpbXBvcnQgPFdl
YkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisj
aW1wb3J0ICJVSUtpdFNQSS5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0
ICJBcHBLaXRTUEkuaCIKKyNlbmRpZgorCiBAaW1wbGVtZW50YXRpb24gX1dLQXBwbGljYXRpb25N
YW5pZmVzdAogCiAjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQpAQCAtNDcsNiArNTgs
NyBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2RlcjooTlNDb2RlciAqKWFEZWNvZGVyCiAg
ICAgTlNVUkwgKnNjb3BlVVJMID0gW2FEZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W05TVVJM
IGNsYXNzXSBmb3JLZXk6QCJzY29wZSJdOwogICAgIE5TSW50ZWdlciBkaXNwbGF5ID0gW2FEZWNv
ZGVyIGRlY29kZUludGVnZXJGb3JLZXk6QCJkaXNwbGF5Il07CiAgICAgTlNVUkwgKnN0YXJ0VVJM
ID0gW2FEZWNvZGVyIGRlY29kZU9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNzXSBmb3JLZXk6QCJz
dGFydF91cmwiXTsKKyAgICBDb2NvYUNvbG9yICp0aGVtZUNvbG9yID0gW2FEZWNvZGVyIGRlY29k
ZU9iamVjdE9mQ2xhc3M6W0NvY29hQ29sb3IgY2xhc3NdIGZvcktleTpAInRoZW1lX2NvbG9yIl07
CiAKICAgICBXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0IGNvcmVBcHBsaWNhdGlvbk1hbmlm
ZXN0IHsKICAgICAgICAgV1RGOjpTdHJpbmcobmFtZSksCkBAIC01NCw3ICs2Niw4IEBAIC0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvZGVyOihOU0NvZGVyICopYURlY29kZXIKICAgICAgICAgV1RG
OjpTdHJpbmcoZGVzY3JpcHRpb24pLAogICAgICAgICBVUkwoc2NvcGVVUkwpLAogICAgICAgICBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5PihkaXNwbGF5
KSwKLSAgICAgICAgVVJMKHN0YXJ0VVJMKQorICAgICAgICBVUkwoc3RhcnRVUkwpLAorICAgICAg
ICBXZWJDb3JlOjpDb2xvcih0aGVtZUNvbG9yLkNHQ29sb3IpLAogICAgIH07CiAKICAgICBBUEk6
Ok9iamVjdDo6Y29uc3RydWN0SW5XcmFwcGVyPEFQSTo6QXBwbGljYXRpb25NYW5pZmVzdD4oc2Vs
ZiwgV1RGTW92ZShjb3JlQXBwbGljYXRpb25NYW5pZmVzdCkpOwpAQCAtODAsNiArOTMsNyBAQCAt
ICh2b2lkKWVuY29kZVdpdGhDb2RlcjooTlNDb2RlciAqKWFDb2RlcgogICAgIFthQ29kZXIgZW5j
b2RlT2JqZWN0OnNlbGYuc2NvcGUgZm9yS2V5OkAic2NvcGUiXTsKICAgICBbYUNvZGVyIGVuY29k
ZUludGVnZXI6c3RhdGljX2Nhc3Q8TlNJbnRlZ2VyPihfYXBwbGljYXRpb25NYW5pZmVzdC0+YXBw
bGljYXRpb25NYW5pZmVzdCgpLmRpc3BsYXkpIGZvcktleTpAImRpc3BsYXkiXTsKICAgICBbYUNv
ZGVyIGVuY29kZU9iamVjdDpzZWxmLnN0YXJ0VVJMIGZvcktleTpAInN0YXJ0X3VybCJdOworICAg
IFthQ29kZXIgZW5jb2RlT2JqZWN0OnNlbGYudGhlbWVDb2xvciBmb3JLZXk6QCJ0aGVtZV9jb2xv
ciJdOwogfQogCiArIChfV0tBcHBsaWNhdGlvbk1hbmlmZXN0ICopYXBwbGljYXRpb25NYW5pZmVz
dEZyb21KU09OOihOU1N0cmluZyAqKWpzb24gbWFuaWZlc3RVUkw6KE5TVVJMICopbWFuaWZlc3RV
UkwgZG9jdW1lbnRVUkw6KE5TVVJMICopZG9jdW1lbnRVUkwKQEAgLTEyMyw2ICsxMzcsMTEgQEAg
LSAoTlNVUkwgKilzdGFydFVSTAogICAgIHJldHVybiBfYXBwbGljYXRpb25NYW5pZmVzdC0+YXBw
bGljYXRpb25NYW5pZmVzdCgpLnN0YXJ0VVJMOwogfQogCistIChDb2NvYUNvbG9yICopdGhlbWVD
b2xvcgoreworICAgIHJldHVybiBXZWJDb3JlOjpwbGF0Zm9ybUNvbG9yKF9hcHBsaWNhdGlvbk1h
bmlmZXN0LT5hcHBsaWNhdGlvbk1hbmlmZXN0KCkudGhlbWVDb2xvcik7Cit9CisKIC0gKF9XS0Fw
cGxpY2F0aW9uTWFuaWZlc3REaXNwbGF5TW9kZSlkaXNwbGF5TW9kZQogewogICAgIHN3aXRjaCAo
X2FwcGxpY2F0aW9uTWFuaWZlc3QtPmFwcGxpY2F0aW9uTWFuaWZlc3QoKS5kaXNwbGF5KSB7CkBA
IC0xODYsNiArMjA1LDExIEBAIC0gKE5TVVJMICopc3RhcnRVUkwKICAgICByZXR1cm4gbmlsOwog
fQogCistIChDb2NvYUNvbG9yICopdGhlbWVDb2xvcgoreworICAgIHJldHVybiBuaWw7Cit9CisK
IC0gKF9XS0FwcGxpY2F0aW9uTWFuaWZlc3REaXNwbGF5TW9kZSlkaXNwbGF5TW9kZQogewogICAg
IHJldHVybiBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0RGlzcGxheU1vZGVCcm93c2VyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBiNmFmNjc4OTk2NjA2MTg2YzVjMzIx
MTA3OGQ2MDA2YjQ3NGY1MTkxLi5iNWNkOTk2YzBkOTExMWU2MmFlNzA3MTBmMWQ5YTU4ZTY4NDc5
NzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNjU0LDcgKzY1
NCw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCB0b3BDb250ZW50SW5zZXQoKSBjb25zdCB7IHJldHVy
biBtX3RvcENvbnRlbnRJbnNldDsgfQogICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0KGZsb2F0
KTsKIAotICAgIC8vIENvcnJlc3BvbmRzIHRvIHRoZSB3ZWIgY29udGVudCdzIGA8bWV0YSBuYW1l
PSJ0aGVtZS1jb2xvciIgY29udGVudD0iLi4uIj5gLgorICAgIC8vIENvcnJlc3BvbmRzIHRvIHRo
ZSB3ZWIgY29udGVudCdzIGA8bWV0YSBuYW1lPSJ0aGVtZS1jb2xvciI+YCBvciBhcHBsaWNhdGlv
biBtYW5pZmVzdCdzIGAidGhlbWVfY29sb3IiYC4KICAgICBXZWJDb3JlOjpDb2xvciB0aGVtZUNv
bG9yKCkgY29uc3QgeyByZXR1cm4gbV90aGVtZUNvbG9yOyB9CiAKICAgICBXZWJDb3JlOjpDb2xv
ciB1bmRlcmxheUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV91bmRlcmxheUNvbG9yOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwCmluZGV4IDVmYzg1NTYzNzYwZWE3NWVjMTJlZDE0YTllMjczNjgxZjI1
MWMwOTMuLjcwYzZlYWI4MWY5YTJkMThiMmE4ZDhlOTZkYTk1YTk4YjgxYzU5NzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwCkBAIC0xMTU0LDEyICsxMTU0LDEyIEBAIENvbG9yIFdlYkNocm9tZUNs
aWVudDo6dW5kZXJsYXlDb2xvcigpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGFnZS51bmRlcmxheUNv
bG9yKCk7CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50Ojp0aGVtZUNvbG9yQ2hhbmdlZChDb2xv
ciAvKiB0aGVtZUNvbG9yICovKSBjb25zdAordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnRoZW1lQ29s
b3JDaGFuZ2VkKCkgY29uc3QKIHsKICAgICBtX3BhZ2UudGhlbWVDb2xvckNoYW5nZWQoKTsKIH0K
IAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvckRpZENo
YW5nZShDb2xvciAvKiBiYWNrZ3JvdW5kQ29sb3IgKi8pIGNvbnN0Cit2b2lkIFdlYkNocm9tZUNs
aWVudDo6cGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yRGlkQ2hhbmdlKCkgY29uc3QKIHsKICAg
ICBtX3BhZ2UucGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yRGlkQ2hhbmdlKCk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmgKaW5kZXggNTZjZjZiOTJlZDlhMTAzNmRiZDdkMDY0ODYzYzRlNzY4MTQyY2Rl
Zi4uMWUzNjBlMzBkMzRhNjEyNTAyZGFiN2IyMTZiMzZlOGUxYjNiOTYzMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaApAQCAtMzI4LDggKzMyOCw4IEBAIHByaXZhdGU6CiAKICAgICBXZWJDb3JlOjpDb2xv
ciB1bmRlcmxheUNvbG9yKCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIHRoZW1lQ29sb3JDaGFu
Z2VkKFdlYkNvcmU6OkNvbG9yKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIHBhZ2VFeHRlbmRlZEJh
Y2tncm91bmRDb2xvckRpZENoYW5nZShXZWJDb3JlOjpDb2xvcikgY29uc3QgZmluYWw7CisgICAg
dm9pZCB0aGVtZUNvbG9yQ2hhbmdlZCgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgcGFnZUV4dGVu
ZGVkQmFja2dyb3VuZENvbG9yRGlkQ2hhbmdlKCkgY29uc3QgZmluYWw7CiAgICAgCiAgICAgdm9p
ZCB3aGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKGJvb2wpIGZpbmFsOwogCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDk2NjViODM0NWJiNDIxOTg3
MWQ5ZmVkMDIyMDFmNzVmYjM3ZDAyNC4uNzRjMGNiZTY4ZTZhYTZlYTliZjYwOGNkMzgwMDllNGMw
YmMxMTE4YiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI1IEBACisyMDIxLTA0LTIwICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFw
cGxlLmNvbT4KKworICAgICAgICBQYXJzZSBgdGhlbWVfY29sb3JgIGluIHdlYiBhcHBsaWNhdGlv
biBtYW5pZmVzdHMgYW5kIHBhc3MgaXQgYWxvbmcgdG8gYC1bV0tXZWJWaWV3IHRoZW1lQ29sb3Jd
YAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0Nzk2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHA6CisgICAg
ICAgIChBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdDo6dGVzdFRoZW1lQ29sb3IpOiBBZGRl
ZC4KKyAgICAgICAgKFRFU1RfRi5BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdC5UaGVtZUNv
bG9yKTogQWRkZWQuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0FwcGxpY2F0aW9uTWFuaWZlc3QubW06CisgICAgICAgIChURVNULkFwcGxpY2F0aW9uTWFuaWZl
c3RCYXNpYyk6CisgICAgICAgIChURVNULkFwcGxpY2F0aW9uTWFuaWZlc3RDb2RpbmcpOgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdUaGVtZUNv
bG9yLm1tOiBSZW5hbWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9IVE1MTWV0YVRoZW1lQ29sb3IubW0uCisgICAgICAgIChURVNULldLV2ViVmlld1RoZW1lQ29s
b3IuQXBwbGljYXRpb25NYW5pZmVzdCk6CisgICAgICAgIChURVNULldLV2ViVmlld1RoZW1lQ29s
b3IuTWV0YUVsZW1lbnRPdmVycmlkZXNBcHBsaWNhdGlvbk1hbmlmZXN0KToKKyAgICAgICAgUmVu
YW1lIHRoaXMgZmlsZSBub3cgdGhhdCBpdCBhbHNvIGRlYWxzIHdpdGggd2ViIGFwcGxpY2F0aW9u
IG1hbmlmZXN0IChpbiBhZGRpdGlvbiB0byBgPG1ldGEgbmFtZT0idGhlbWUtY29sb3IiPmApLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKIDIwMjEtMDQtMTkgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIFdQRSBNaW5pYnJvd3NlciBidWlsZCB3YXJu
aW5nIGZpeC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDMxM2E5NzhmMGQ1MjUwOTFiM2Ey
YTI2N2MwMzI4MTFiMGM3ZDc1YS4uMjRiZjdhODVkNjlkMWM1MTU4YjY2NzYxOGUzMGRmMWE3ODI2
N2Q5NCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg2Niw3ICs4NjYsNyBAQAogCQk5M0Y3
RTg2RjE0REM4RTVDMDBDODRBOTkgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0RnJh
bWVzX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5M0Y3RTg2RTE0REM4RTVCMDBDODRBOTkgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0RnJhbWVzX0J1bmRsZS5jcHAgKi87IH07CiAJCTk1MEU0Q0MxMjUyRTc1MjQwMDcxNjU5
RiAvKiBpT1NTdHlsdXNTdXBwb3J0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTUwRTRDQzAyNTJFNzUyMzAwNzE2NTlGIC8qIGlPU1N0eWx1c1N1cHBv
cnQubW0gKi87IH07CiAJCTk1M0FCQjM1MjVDMEQ2ODIwMDRDOEI3MyAvKiBQYWdlRXh0ZW5kZWRC
YWNrZ3JvdW5kQ29sb3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NTNBQkIzNDI1QzBENjgxMDA0QzhCNzMgLyogUGFnZUV4dGVuZGVkQmFja2dyb3Vu
ZENvbG9yLm1tICovOyB9OwotCQk5NUE1MjQ5NTI1ODFBMTBEMDA0NjFGRTkgLyogSFRNTE1ldGFU
aGVtZUNvbG9yLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTVBNTI0OTQyNTgxQTEwRDAwNDYxRkU5IC8qIEhUTUxNZXRhVGhlbWVDb2xvci5tbSAqLzsg
fTsKKwkJOTVBNTI0OTUyNTgxQTEwRDAwNDYxRkU5IC8qIFdLV2ViVmlld1RoZW1lQ29sb3IubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NUE1MjQ5NDI1
ODFBMTBEMDA0NjFGRTkgLyogV0tXZWJWaWV3VGhlbWVDb2xvci5tbSAqLzsgfTsKIAkJOTVCNkIz
QjcyNTFFQkYyRjAwRkM0MzgyIC8qIE1lZGlhRG9jdW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NUI2QjNCNjI1MUVCRjJGMDBGQzQzODIgLyog
TWVkaWFEb2N1bWVudC5tbSAqLzsgfTsKIAkJOTk4NEZBQ0MxQ0ZGQUY2MDAwOEQxOThDIC8qIFdL
V2ViVmlld1RleHRJbnB1dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk5ODRGQUNBMUNGRkFFRUUwMDhEMTk4QyAvKiBXS1dlYlZpZXdUZXh0SW5wdXQu
bW0gKi87IH07CiAJCTk5ODRGQUNFMUNGRkIwOTAwMDhEMTk4QyAvKiBlZGl0YWJsZS1ib2R5Lmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTk4NEZBQ0QxQ0ZGQjAzODAwOEQxOThDIC8qIGVkaXRhYmxlLWJvZHkuaHRtbCAqLzsgfTsKQEAg
LTI1NTMsNyArMjU1Myw3IEBACiAJCTkzRjdFODZFMTREQzhFNUIwMEM4NEE5OSAvKiBOZXdGaXJz
dFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGcmFtZXNfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZyYW1l
c19CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NTBFNENDMDI1MkU3
NTIzMDA3MTY1OUYgLyogaU9TU3R5bHVzU3VwcG9ydC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IGlPU1N0eWx1c1N1cHBvcnQubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk1M0FCQjM0MjVDMEQ2ODEwMDRDOEI3MyAvKiBQYWdlRXh0ZW5kZWRCYWNr
Z3JvdW5kQ29sb3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQ
YWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTk1QTUyNDk0MjU4MUExMEQwMDQ2MUZFOSAvKiBIVE1MTWV0YVRoZW1lQ29sb3IubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBIVE1MTWV0YVRoZW1lQ29sb3Iu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk1QTUyNDk0MjU4MUExMEQwMDQ2MUZF
OSAvKiBXS1dlYlZpZXdUaGVtZUNvbG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV0tXZWJWaWV3VGhlbWVDb2xvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTVCNkIzQjYyNTFFQkYyRjAwRkM0MzgyIC8qIE1lZGlhRG9jdW1lbnQubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNZWRpYURvY3VtZW50Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTg0RkFDQTFDRkZBRUVFMDA4RDE5OEMgLyog
V0tXZWJWaWV3VGV4dElucHV0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV0tXZWJWaWV3VGV4dElucHV0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5OTg0RkFDRDFDRkZCMDM4MDA4RDE5OEMgLyogZWRpdGFibGUtYm9keS5odG1sICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC5odG1sOyBwYXRoID0gImVkaXRhYmxlLWJvZHkuaHRtbCI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zNDA4LDcgKzM0MDgsNiBAQAogCQkJCTA3RTFGNkEwMUZGQzNBMDgw
MDk2QzdFQyAvKiBHZXREaXNwbGF5TWVkaWEubW0gKi8sCiAJCQkJMkRBREYyNjIyMUNCOEYzMjAw
M0QzRTNBIC8qIEdldFJlc291cmNlRGF0YS5tbSAqLywKIAkJCQk0NjVFMjgwNjI1NUIyQTY5MDA2
M0E3ODcgLyogR1BVUHJvY2Vzcy5tbSAqLywKLQkJCQk5NUE1MjQ5NDI1ODFBMTBEMDA0NjFGRTkg
LyogSFRNTE1ldGFUaGVtZUNvbG9yLm1tICovLAogCQkJCTUxQUYyM0RFMUVGMUEzNzIwMDcyRjI4
MSAvKiBJY29uTG9hZGluZ0RlbGVnYXRlLm1tICovLAogCQkJCUVCMjMwRDNFMjQ1RTcyNjMwMEM2
NkFEMSAvKiBJREJDaGVja3BvaW50V0FMLm1tICovLAogCQkJCTUxMDQ3Nzc1MUQyOThFMDMwMDk3
NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5tbSAqLywKQEAgLTM2MDcsNiArMzYwNiw3IEBACiAJ
CQkJOTNGNTZEQTgxRTVGOTE4MTAwM0VERTg0IC8qIFdLV2ViVmlld1NuYXBzaG90Lm1tICovLAog
CQkJCUNEN0Y4OURCMjJBODZDREEwMEQ2ODNBRSAvKiBXS1dlYlZpZXdTdXNwZW5kQWxsTWVkaWFQ
bGF5YmFjay5tbSAqLywKIAkJCQk5OTg0RkFDQTFDRkZBRUVFMDA4RDE5OEMgLyogV0tXZWJWaWV3
VGV4dElucHV0Lm1tICovLAorCQkJCTk1QTUyNDk0MjU4MUExMEQwMDQ2MUZFOSAvKiBXS1dlYlZp
ZXdUaGVtZUNvbG9yLm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSAiV2ViS2l0IENvY29hIjsKIAkJ
CXBhdGggPSBXZWJLaXRDb2NvYTsKQEAgLTU0MjksNyArNTQyOSw2IEBACiAJCQkJN0NDRTdFRkEx
QTQxMUFFNjAwNDQ3QzRDIC8qIEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDQ0U3RUMxMUE0MTFBN0UwMDQ0N0M0QyAvKiBIVE1MQ29sbGVjdGlvbk5hbWVk
SXRlbS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUMyMUE0MTFBN0UwMDQ0N0M0QyAvKiBI
VE1MRm9ybUNvbGxlY3Rpb25OYW1lZEl0ZW0ubW0gaW4gU291cmNlcyAqLywKLQkJCQk5NUE1MjQ5
NTI1ODFBMTBEMDA0NjFGRTkgLyogSFRNTE1ldGFUaGVtZUNvbG9yLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0M4M0UwNTAxRDBBNjQxODAwRkVCQ0YzIC8qIEhUTUxQYXJzZXJJZGlvbXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUNBMURFQzgxRjcxRjcwMTAwRTcxQkQzIC8qIEhUVFBIZWFkZXJG
aWVsZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NkZBMkZFRTIzODQ2Q0E1MDAwQ0NCMEMgLyog
SFRUUEhlYWRlck1hcC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTU4MjksNiArNTgyOCw3IEBACiAJ
CQkJOTNGNTZEQTkxRTVGOTE5RDAwM0VERTg0IC8qIFdLV2ViVmlld1NuYXBzaG90Lm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQ0Q3Rjg5REMyMkE4NkNEQTAwRDY4M0FFIC8qIFdLV2ViVmlld1N1c3Bl
bmRBbGxNZWRpYVBsYXliYWNrLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTk4NEZBQ0MxQ0ZGQUY2
MDAwOEQxOThDIC8qIFdLV2ViVmlld1RleHRJbnB1dC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTk1
QTUyNDk1MjU4MUExMEQwMDQ2MUZFOSAvKiBXS1dlYlZpZXdUaGVtZUNvbG9yLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0M3NEM4RkEyMkRGQkE5NjAwREEyREFCIC8qIFdURlN0cmluZ1V0aWxpdGll
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMTREMzA0NjI0QjRDM0JBMDA0ODAzODcgLyogWFBD
RW5kcG9pbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk5QzY0REMzMjFENzYxOThBMDA0QjU5OEUg
LyogWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0aW9uTWFuaWZlc3RQ
YXJzZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0FwcGxpY2F0aW9u
TWFuaWZlc3RQYXJzZXIuY3BwCmluZGV4IGUwZTViYjUyODM3MTYwMWY3NGNiYzA4YTIzZTU0MjUy
N2E0ZDAzNzAuLmMzOTk2NTQ0NjUyMDM2YjQ1ZWU2YzQ5NTc1MzFkNzJjMzg0ODFjMzYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9BcHBsaWNhdGlvbk1hbmlm
ZXN0UGFyc2VyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQXBw
bGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAKQEAgLTEyNyw2ICsxMjcsMTMgQEAgcHVibGljOgog
ICAgICAgICB0ZXN0U2NvcGUocmF3SlNPTiwgU3RyaW5nKCksIGV4cGVjdGVkVmFsdWUpOwogICAg
IH0KIAorICAgIHZvaWQgdGVzdFRoZW1lQ29sb3IoY29uc3QgU3RyaW5nJiByYXdKU09OLCBjb25z
dCBDb2xvciYgZXhwZWN0ZWRWYWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8gbWFuaWZlc3QgPSBw
YXJzZVRvcExldmVsUHJvcGVydHkoInRoZW1lX2NvbG9yIiwgcmF3SlNPTik7CisgICAgICAgIGF1
dG8gdmFsdWUgPSBtYW5pZmVzdC50aGVtZUNvbG9yOworICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0
ZWRWYWx1ZSwgdmFsdWUpOworICAgIH0KKwogfTsKIAogc3RhdGljIHZvaWQgYXNzZXJ0TWFuaWZl
c3RIYXNEZWZhdWx0VmFsdWVzKGNvbnN0IFVSTCYgbWFuaWZlc3RVUkwsIGNvbnN0IFVSTCYgZG9j
dW1lbnRVUkwsIGNvbnN0IEFwcGxpY2F0aW9uTWFuaWZlc3QmIG1hbmlmZXN0KQpAQCAtMjg5LDYg
KzI5NiwyNiBAQCBURVNUX0YoQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlclRlc3QsIFNjb3BlKQog
ICAgIHRlc3RTY29wZSgiXCJodHRwczovL2V4YW1wbGUuY29tL290aGVyXCIiLCBTdHJpbmcoImh0
dHBzOi8vZXhhbXBsZS5jb20vb3RoZXIvc3RhcnQtdXJsIiksICJodHRwczovL2V4YW1wbGUuY29t
L290aGVyIik7CiB9CiAKK1RFU1RfRihBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyVGVzdCwgVGhl
bWVDb2xvcikKK3sKKyAgICB0ZXN0VGhlbWVDb2xvcigiMTIzIiwgQ29sb3IoKSk7CisgICAgdGVz
dFRoZW1lQ29sb3IoIm51bGwiLCBDb2xvcigpKTsKKyAgICB0ZXN0VGhlbWVDb2xvcigidHJ1ZSIs
IENvbG9yKCkpOworICAgIHRlc3RUaGVtZUNvbG9yKCJ7IH0iLCBDb2xvcigpKTsKKyAgICB0ZXN0
VGhlbWVDb2xvcigiWyBdIiwgQ29sb3IoKSk7CisgICAgdGVzdFRoZW1lQ29sb3IoIlwiXCIiLCBD
b2xvcigpKTsKKyAgICB0ZXN0VGhlbWVDb2xvcigiXCJnYXJiYWdlIHN0cmluZ1wiIiwgQ29sb3Io
KSk7CisKKyAgICB0ZXN0VGhlbWVDb2xvcigiXCJyZWRcIiIsIENvbG9yOjpyZWQpOworICAgIHRl
c3RUaGVtZUNvbG9yKCJcIiNmMDBcIiIsIENvbG9yOjpyZWQpOworICAgIHRlc3RUaGVtZUNvbG9y
KCJcIiNmZjAwMDBcIiIsIENvbG9yOjpyZWQpOworICAgIHRlc3RUaGVtZUNvbG9yKCJcIiNmZjAw
MDBmZlwiIiwgQ29sb3I6OnJlZCk7CisgICAgdGVzdFRoZW1lQ29sb3IoIlwicmdiKDI1NSwgMCwg
MClcIiIsIENvbG9yOjpyZWQpOworICAgIHRlc3RUaGVtZUNvbG9yKCJcInJnYmEoMjU1LCAwLCAw
LCAxKVwiIiwgQ29sb3I6OnJlZCk7CisgICAgdGVzdFRoZW1lQ29sb3IoIlwiaHNsKDAsIDEwMCUs
IDUwJSlcIiIsIENvbG9yOjpyZWQpOworICAgIHRlc3RUaGVtZUNvbG9yKCJcImhzbGEoMCwgMTAw
JSwgNTAlLCAxKVwiIiwgQ29sb3I6OnJlZCk7Cit9CisKIFRFU1RfRihBcHBsaWNhdGlvbk1hbmlm
ZXN0UGFyc2VyVGVzdCwgV2hpdGVzcGFjZSkKIHsKICAgICBhdXRvIG1hbmlmZXN0ID0gcGFyc2VT
dHJpbmcoIiAgeyBcIm5hbWVcIjogXCJQQVNTXCIgfVxuIl9zKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQXBwbGljYXRpb25NYW5pZmVzdC5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQXBwbGljYXRpb25NYW5pZmVz
dC5tbQppbmRleCBiNWNkOGE2NjM1YmNlZTU2OGUwZjI4NzYxMzkxN2FjMTRiNThkMDlmLi5hMjQ3
M2I2MmIwZmVmNDk2ZmYzMWNhMjIxNzQ1NjE1YTRhMmMyMGZiIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0FwcGxpY2F0aW9uTWFuaWZlc3QubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9BcHBsaWNhdGlvbk1hbmlm
ZXN0Lm1tCkBAIC0zNyw5ICszNywxMSBAQAogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAK
K2NvbnN0ZXhwciBDR0Zsb2F0IHJlZENvbG9yQ29tcG9uZW50c1s0XSA9IHsgMSwgMCwgMCwgMSB9
OworCiBURVNUKFdlYktpdCwgQXBwbGljYXRpb25NYW5pZmVzdENvZGluZykKIHsKLSAgICBhdXRv
IGpzb25TdHJpbmcgPSBAInsgXCJuYW1lXCI6IFwiVGVzdE5hbWVcIiwgXCJzaG9ydF9uYW1lXCI6
IFwiVGVzdFNob3J0TmFtZVwiLCBcImRlc2NyaXB0aW9uXCI6IFwiVGVzdERlc2NyaXB0aW9uXCIs
IFwic2NvcGVcIjogXCJodHRwczovL3Rlc3QuY29tL2FwcFwiLCBcInN0YXJ0X3VybFwiOiBcImh0
dHBzOi8vdGVzdC5jb20vYXBwL2luZGV4Lmh0bWxcIiwgXCJkaXNwbGF5XCI6IFwibWluaW1hbC11
aVwiIH0iOworICAgIGF1dG8ganNvblN0cmluZyA9IEAieyBcIm5hbWVcIjogXCJUZXN0TmFtZVwi
LCBcInNob3J0X25hbWVcIjogXCJUZXN0U2hvcnROYW1lXCIsIFwiZGVzY3JpcHRpb25cIjogXCJU
ZXN0RGVzY3JpcHRpb25cIiwgXCJzY29wZVwiOiBcImh0dHBzOi8vdGVzdC5jb20vYXBwXCIsIFwi
c3RhcnRfdXJsXCI6IFwiaHR0cHM6Ly90ZXN0LmNvbS9hcHAvaW5kZXguaHRtbFwiLCBcImRpc3Bs
YXlcIjogXCJtaW5pbWFsLXVpXCIsIFwidGhlbWVfY29sb3JcIjogXCJyZWRcIiB9IjsKICAgICBS
ZXRhaW5QdHI8X1dLQXBwbGljYXRpb25NYW5pZmVzdD4gbWFuaWZlc3QgeyBbX1dLQXBwbGljYXRp
b25NYW5pZmVzdCBhcHBsaWNhdGlvbk1hbmlmZXN0RnJvbUpTT046anNvblN0cmluZyBtYW5pZmVz
dFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vdGVzdC5jb20vbWFuaWZlc3QuanNv
biJdIGRvY3VtZW50VVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly90ZXN0LmNvbS8i
XV0gfTsKIAogICAgIE5TRGF0YSAqZGF0YSA9IFtOU0tleWVkQXJjaGl2ZXIgYXJjaGl2ZWREYXRh
V2l0aFJvb3RPYmplY3Q6bWFuaWZlc3QuZ2V0KCkgcmVxdWlyaW5nU2VjdXJlQ29kaW5nOllFUyBl
cnJvcjpudWxscHRyXTsKQEAgLTUyLDYgKzU0LDEwIEBAIFRFU1QoV2ViS2l0LCBBcHBsaWNhdGlv
bk1hbmlmZXN0Q29kaW5nKQogICAgIEVYUEVDVF9TVFJFUSgiaHR0cHM6Ly90ZXN0LmNvbS9hcHAi
LCBtYW5pZmVzdC5nZXQoKS5zY29wZS5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKICAgICBF
WFBFQ1RfU1RSRVEoImh0dHBzOi8vdGVzdC5jb20vYXBwL2luZGV4Lmh0bWwiLCBtYW5pZmVzdC5n
ZXQoKS5zdGFydFVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKICAgICBFWFBFQ1RfRVEo
X1dLQXBwbGljYXRpb25NYW5pZmVzdERpc3BsYXlNb2RlTWluaW1hbFVJLCAgbWFuaWZlc3QuZ2V0
KCkuZGlzcGxheU1vZGUpOworCisgICAgYXV0byBzUkdCQ29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dD
b2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0IpKTsKKyAgICBhdXRvIHJl
ZENvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlLmdldCgpLCByZWRD
b2xvckNvbXBvbmVudHMpKTsKKyAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKG1h
bmlmZXN0LmdldCgpLnRoZW1lQ29sb3IuQ0dDb2xvciwgcmVkQ29sb3IuZ2V0KCkpKTsKIH0KIAog
VEVTVChXZWJLaXQsIEFwcGxpY2F0aW9uTWFuaWZlc3RCYXNpYykKQEAgLTkwLDYgKzk2LDcgQEAg
VEVTVChXZWJLaXQsIEFwcGxpY2F0aW9uTWFuaWZlc3RCYXNpYykKICAgICAgICAgQCJkZXNjcmlw
dGlvbiI6IEAiSGVsbG8uIiwKICAgICAgICAgQCJzdGFydF91cmwiOiBAImh0dHA6Ly9leGFtcGxl
LmNvbS9hcHAvc3RhcnQiLAogICAgICAgICBAInNjb3BlIjogQCJodHRwOi8vZXhhbXBsZS5jb20v
YXBwIiwKKyAgICAgICAgQCJ0aGVtZV9jb2xvciI6IEAicmVkIiwKICAgICB9OwogICAgIE5TU3Ry
aW5nICpodG1sU3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8bGluayByZWw9
XCJtYW5pZmVzdFwiIGhyZWY9XCJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtODtiYXNlNjQs
JUBcIj4iLCBbW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0Om1hbmlmZXN0
T2JqZWN0IG9wdGlvbnM6MCBlcnJvcjpuaWxdIGJhc2U2NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9u
czowXV07CiAgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6aHRtbFN0cmluZyBiYXNlVVJMOltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2V4YW1wbGUuY29tL2FwcC9pbmRleCJdXTsKQEAg
LTEwMCw2ICsxMDcsMTEgQEAgVEVTVChXZWJLaXQsIEFwcGxpY2F0aW9uTWFuaWZlc3RCYXNpYykK
ICAgICAgICAgRVhQRUNUX1RSVUUoW21hbmlmZXN0LmFwcGxpY2F0aW9uRGVzY3JpcHRpb24gaXNF
cXVhbFRvU3RyaW5nOkAiSGVsbG8uIl0pOwogICAgICAgICBFWFBFQ1RfVFJVRShbbWFuaWZlc3Qu
c3RhcnRVUkwgaXNFcXVhbDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly9leGFtcGxlLmNv
bS9hcHAvc3RhcnQiXV0pOwogICAgICAgICBFWFBFQ1RfVFJVRShbbWFuaWZlc3Quc2NvcGUgaXNF
cXVhbDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly9leGFtcGxlLmNvbS9hcHAiXV0pOwor
CisgICAgICAgIGF1dG8gc1JHQkNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0
ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdCKSk7CisgICAgICAgIGF1dG8gcmVkQ29sb3IgPSBh
ZG9wdENGKENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2UuZ2V0KCksIHJlZENvbG9yQ29tcG9u
ZW50cykpOworICAgICAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKG1hbmlmZXN0
LnRoZW1lQ29sb3IuQ0dDb2xvciwgcmVkQ29sb3IuZ2V0KCkpKTsKKwogICAgICAgICBkb25lID0g
dHJ1ZTsKICAgICB9XTsKICAgICBVdGlsOjpydW4oJmRvbmUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9IVE1MTWV0YVRoZW1lQ29sb3IubW0gYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0hUTUxNZXRhVGhlbWVDb2xvci5t
bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIwYmNjY2E1Yjc2MDI3NjEzYWJkZGMz
MDU5ZDlkYzYxNTIxY2Y3Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0hUTUxNZXRhVGhl
bWVDb2xvci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpbXBvcnQgIkNvY29hQ29sb3IuaCIKLSNpbXBvcnQgIlRl
c3RDb2NvYS5oIgotI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotI2ltcG9ydCA8V2ViS2l0L1dL
UHJlZmVyZW5jZXNQcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5o
PgotI2ltcG9ydCA8V2ViS2l0L19XS0ludGVybmFsRGVidWdGZWF0dXJlLmg+Ci0jaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+Ci0KLSNkZWZpbmUgRVhQRUNUX05TU1RSSU5HX0VRKGV4cGVjdGVkLCBh
Y3R1YWwpIFwKLSAgICBFWFBFQ1RfVFJVRShbYWN0dWFsIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5n
IGNsYXNzXV0pOyBcCi0gICAgRVhQRUNUX1dLX1NUUkVRKGV4cGVjdGVkLCAoTlNTdHJpbmcgKilh
Y3R1YWwpOwotCi1jb25zdGV4cHIgQ0dGbG9hdCByZWRDb2xvckNvbXBvbmVudHNbNF0gPSB7IDEs
IDAsIDAsIDEgfTsKLWNvbnN0ZXhwciBDR0Zsb2F0IGJsdWVDb2xvckNvbXBvbmVudHNbNF0gPSB7
IDAsIDAsIDEsIDEgfTsKLQotVEVTVChIVE1MTWV0YVRoZW1lQ29sb3IsIE9uTG9hZCkKLXsKLSAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKV0pOwotICAgIEVYUEVDVF9UUlVFKCFbd2Vi
VmlldyB0aGVtZUNvbG9yXSk7Ci0KLSAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxT
dHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPG1ldGEgbmFt
ZT0ndGhlbWUtY29sb3InIGNvbnRlbnQ9J3JlZCc+Il07Ci0KLSAgICBhdXRvIHNSR0JDb2xvclNw
YWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JH
QikpOwotICAgIGF1dG8gcmVkQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoc1JHQkNvbG9y
U3BhY2UuZ2V0KCksIHJlZENvbG9yQ29tcG9uZW50cykpOwotICAgIEVYUEVDVF9UUlVFKENHQ29s
b3JFcXVhbFRvQ29sb3IoW3dlYlZpZXcgdGhlbWVDb2xvcl0uQ0dDb2xvciwgcmVkQ29sb3IuZ2V0
KCkpKTsKLQotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRV
bnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8bWV0YSBuYW1lPSdub3QtdGhlbWUt
Y29sb3InIGNvbnRlbnQ9J3JlZCc+Il07Ci0KLSAgICBFWFBFQ1RfVFJVRSghW3dlYlZpZXcgdGhl
bWVDb2xvcl0pOwotfQotCi1URVNUKEhUTUxNZXRhVGhlbWVDb2xvciwgTXVsdGlwbGVUYWdzKQot
ewotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7Ci0gICAgRVhQRUNUX1RSVUUo
IVt3ZWJWaWV3IHRoZW1lQ29sb3JdKTsKLQotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
SFRNTFN0cmluZ0FuZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8bWV0
YSBuYW1lPSd0aGVtZS1jb2xvcicgY29udGVudD0ncmVkJz48bWV0YSBuYW1lPSd0aGVtZS1jb2xv
cicgY29udGVudD0nYmx1ZSc+Il07Ci0KLSAgICBhdXRvIHNSR0JDb2xvclNwYWNlID0gYWRvcHRD
RihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwotICAgIGF1
dG8gYmx1ZUNvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlLmdldCgp
LCBibHVlQ29sb3JDb21wb25lbnRzKSk7Ci0gICAgRVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFsVG9D
b2xvcihbd2ViVmlldyB0aGVtZUNvbG9yXS5DR0NvbG9yLCBibHVlQ29sb3IuZ2V0KCkpKTsKLX0K
LQotQGludGVyZmFjZSBXS1dlYlZpZXdUaGVtZUNvbG9yT2JzZXJ2ZXIgOiBOU09iamVjdAotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3OwotCi1A
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLV2ViVmlldyAqd2ViVmlldzsKLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RhdGU7Ci0KLUBlbmQKLQotQGltcGxl
bWVudGF0aW9uIFdLV2ViVmlld1RoZW1lQ29sb3JPYnNlcnZlcgotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfc3RhdGUgPSBAImJl
Zm9yZS1pbml0IjsKLQotICAgIF93ZWJWaWV3ID0gd2ViVmlldzsKLSAgICBbX3dlYlZpZXcgYWRk
T2JzZXJ2ZXI6c2VsZiBmb3JLZXlQYXRoOkAidGhlbWVDb2xvciIgb3B0aW9uczpOU0tleVZhbHVl
T2JzZXJ2aW5nT3B0aW9uSW5pdGlhbCBjb250ZXh0Om5pbF07Ci0KLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBhdGgg
b2ZPYmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeSAqKWNoYW5nZSBjb250ZXh0
Oih2b2lkICopY29udGV4dAotewotICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJl
Zm9yZS1pbml0Il0pIHsKLSAgICAgICAgX3N0YXRlID0gQCJhZnRlci1pbml0IjsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9y
ZS1sb2FkIl0pIHsKLSAgICAgICAgX3N0YXRlID0gQCJhZnRlci1sb2FkIjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9yZS1j
b250ZW50LWNoYW5nZSJdKSB7Ci0gICAgICAgIF9zdGF0ZSA9IEAiYWZ0ZXItY29udGVudC1jaGFu
Z2UiOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKFtfc3RhdGUgaXNFcXVhbFRv
U3RyaW5nOkAiYmVmb3JlLW5hbWUtY2hhbmdlLW5vdC10aGVtZS1jb2xvciJdKSB7Ci0gICAgICAg
IF9zdGF0ZSA9IEAiYWZ0ZXItbmFtZS1jaGFuZ2Utbm90LXRoZW1lLWNvbG9yIjsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9y
ZS1uYW1lLWNoYW5nZS10aGVtZS1jb2xvciJdKSB7Ci0gICAgICAgIF9zdGF0ZSA9IEAiYWZ0ZXIt
bmFtZS1jaGFuZ2UtdGhlbWUtY29sb3IiOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKFtfc3RhdGUgaXNFcXVhbFRvU3RyaW5nOkAiYmVmb3JlLW5vZGUtcmVtb3ZlZCJdKSB7Ci0g
ICAgICAgIF9zdGF0ZSA9IEAiYWZ0ZXItbm9kZS1yZW1vdmVkIjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLUBlbmQKLQot
VEVTVChIVE1MTWV0YVRoZW1lQ29sb3IsIEtWTykKLXsKLSAgICBhdXRvIHNSR0JDb2xvclNwYWNl
ID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikp
OwotICAgIGF1dG8gcmVkQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3Bh
Y2UuZ2V0KCksIHJlZENvbG9yQ29tcG9uZW50cykpOwotICAgIGF1dG8gYmx1ZUNvbG9yID0gYWRv
cHRDRihDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlLmdldCgpLCBibHVlQ29sb3JDb21wb25l
bnRzKSk7Ci0KLSAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKV0pOwotICAgIGF1dG8g
dGhlbWVDb2xvck9ic2VydmVyID0gYWRvcHROUyhbW1dLV2ViVmlld1RoZW1lQ29sb3JPYnNlcnZl
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBFWFBFQ1RfTlNT
VFJJTkdfRVEoImFmdGVyLWluaXQiLCBbdGhlbWVDb2xvck9ic2VydmVyIHN0YXRlXSk7Ci0gICAg
RVhQRUNUX1RSVUUoIVt3ZWJWaWV3IHRoZW1lQ29sb3JdKTsKLQotICAgIFt0aGVtZUNvbG9yT2Jz
ZXJ2ZXIgc2V0U3RhdGU6QCJiZWZvcmUtbG9hZCJdOwotICAgIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6
QCI8bWV0YSBuYW1lPSd0aGVtZS1jb2xvcicgY29udGVudD0ncmVkJz4iXTsKLSAgICBFWFBFQ1Rf
TlNTVFJJTkdfRVEoImFmdGVyLWxvYWQiLCBbdGhlbWVDb2xvck9ic2VydmVyIHN0YXRlXSk7Ci0g
ICAgRVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFsVG9Db2xvcihbd2ViVmlldyB0aGVtZUNvbG9yXS5D
R0NvbG9yLCByZWRDb2xvci5nZXQoKSkpOwotCi0gICAgW3RoZW1lQ29sb3JPYnNlcnZlciBzZXRT
dGF0ZTpAImJlZm9yZS1jb250ZW50LWNoYW5nZSJdOwotICAgIFt3ZWJWaWV3IG9iamVjdEJ5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhJykuc2V0QXR0
cmlidXRlKCdjb250ZW50JywgJ2JsdWUnKSJdOwotICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJl
c2VudGF0aW9uVXBkYXRlXTsKLSAgICBFWFBFQ1RfTlNTVFJJTkdfRVEoImFmdGVyLWNvbnRlbnQt
Y2hhbmdlIiwgW3RoZW1lQ29sb3JPYnNlcnZlciBzdGF0ZV0pOwotICAgIEVYUEVDVF9UUlVFKENH
Q29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXcgdGhlbWVDb2xvcl0uQ0dDb2xvciwgYmx1ZUNvbG9y
LmdldCgpKSk7Ci0KLSAgICBbdGhlbWVDb2xvck9ic2VydmVyIHNldFN0YXRlOkAiYmVmb3JlLW5h
bWUtY2hhbmdlLW5vdC10aGVtZS1jb2xvciJdOwotICAgIFt3ZWJWaWV3IG9iamVjdEJ5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhJykuc2V0QXR0cmli
dXRlKCduYW1lJywgJ25vdC10aGVtZS1jb2xvcicpIl07Ci0gICAgW3dlYlZpZXcgd2FpdEZvck5l
eHRQcmVzZW50YXRpb25VcGRhdGVdOwotICAgIEVYUEVDVF9OU1NUUklOR19FUSgiYWZ0ZXItbmFt
ZS1jaGFuZ2Utbm90LXRoZW1lLWNvbG9yIiwgW3RoZW1lQ29sb3JPYnNlcnZlciBzdGF0ZV0pOwot
ICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlldyB0aGVtZUNvbG9yXSk7Ci0KLSAgICBbdGhlbWVDb2xv
ck9ic2VydmVyIHNldFN0YXRlOkAiYmVmb3JlLW5hbWUtY2hhbmdlLXRoZW1lLWNvbG9yIl07Ci0g
ICAgW3dlYlZpZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5
U2VsZWN0b3IoJ21ldGEnKS5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAndGhlbWUtY29sb3InKSJdOwot
ICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKLSAgICBFWFBFQ1Rf
TlNTVFJJTkdfRVEoImFmdGVyLW5hbWUtY2hhbmdlLXRoZW1lLWNvbG9yIiwgW3RoZW1lQ29sb3JP
YnNlcnZlciBzdGF0ZV0pOwotICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dl
YlZpZXcgdGhlbWVDb2xvcl0uQ0dDb2xvciwgYmx1ZUNvbG9yLmdldCgpKSk7Ci0KLSAgICBbdGhl
bWVDb2xvck9ic2VydmVyIHNldFN0YXRlOkAiYmVmb3JlLW5vZGUtcmVtb3ZlZCJdOwotICAgIFt3
ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVj
dG9yKCdtZXRhJykucmVtb3ZlKCkiXTsKLSAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRh
dGlvblVwZGF0ZV07Ci0gICAgRVhQRUNUX05TU1RSSU5HX0VRKCJhZnRlci1ub2RlLXJlbW92ZWQi
LCBbdGhlbWVDb2xvck9ic2VydmVyIHN0YXRlXSk7Ci0gICAgRVhQRUNUX1RSVUUoIVt3ZWJWaWV3
IHRoZW1lQ29sb3JdKTsKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLS8vIFRoZXJl
J3Mgbm8gQVBJL1NQSSB0byBnZXQgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHNjcm9sbCBh
cmVhIG9uIG1hY09TLgotCi1lbnVtIGNsYXNzIFVzZVRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFj
a2dyb3VuZENvbG9yIDogYm9vbCB7IFllcywgTm8gfTsKLXN0YXRpYyBSZXRhaW5QdHI8VGVzdFdL
V2ViVmlldz4gY3JlYXRlV2ViVmlldyhVc2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91
bmRDb2xvciB1c2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvcikKLXsKLSAg
ICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBh
bGxvY10gaW5pdF0pOwotICAgIGZvciAoX1dLSW50ZXJuYWxEZWJ1Z0ZlYXR1cmUgKmZlYXR1cmUg
aW4gW1dLUHJlZmVyZW5jZXMgX2ludGVybmFsRGVidWdGZWF0dXJlc10pIHsKLSAgICAgICAgaWYg
KFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJVc2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJl
YUJhY2tncm91bmRDb2xvciJdKSB7Ci0gICAgICAgICAgICBbW2NvbmZpZ3VyYXRpb24gcHJlZmVy
ZW5jZXNdIF9zZXRFbmFibGVkOih1c2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRD
b2xvciA9PSBVc2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvcjo6WWVzKSBm
b3JJbnRlcm5hbERlYnVnRmVhdHVyZTpmZWF0dXJlXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246
Y29uZmlndXJhdGlvbi5nZXQoKV0pOwotfQotCi1URVNUKEhUTUxNZXRhVGhlbWVDb2xvciwgRXhw
ZXJpbWVudGFsVXNlVGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3IpCi17Ci0g
ICAgYXV0byBzUkdCQ29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5h
bWUoa0NHQ29sb3JTcGFjZVNSR0IpKTsKLSAgICBhdXRvIHJlZENvbG9yID0gYWRvcHRDRihDR0Nv
bG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlLmdldCgpLCByZWRDb2xvckNvbXBvbmVudHMpKTsKLSAg
ICBhdXRvIGJsdWVDb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZS5n
ZXQoKSwgYmx1ZUNvbG9yQ29tcG9uZW50cykpOwotCi0gICAgYXV0byB3ZWJWaWV3V2l0aG91dFRo
ZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yID0gY3JlYXRlV2ViVmlldyhVc2VU
aGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvcjo6Tm8pOwotICAgIEVYUEVDVF9U
UlVFKCFbd2ViVmlld1dpdGhvdXRUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xv
ciB0aGVtZUNvbG9yXSk7Ci0KLSAgICBbd2ViVmlld1dpdGhvdXRUaGVtZUNvbG9yRm9yU2Nyb2xs
QXJlYUJhY2tncm91bmRDb2xvciBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50
aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPGJvZHkgc3R5bGU9J2JhY2tncm91bmQt
Y29sb3I6IGJsdWUnPiJdOwotICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlld1dpdGhvdXRUaGVtZUNv
bG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciB0aGVtZUNvbG9yXSk7Ci0gICAgRVhQRUNU
X1RSVUUoQ0dDb2xvckVxdWFsVG9Db2xvcihbd2ViVmlld1dpdGhvdXRUaGVtZUNvbG9yRm9yU2Ny
b2xsQXJlYUJhY2tncm91bmRDb2xvciBzY3JvbGxWaWV3XS5iYWNrZ3JvdW5kQ29sb3IuQ0dDb2xv
ciwgYmx1ZUNvbG9yLmdldCgpKSk7Ci0KLSAgICBbd2ViVmlld1dpdGhvdXRUaGVtZUNvbG9yRm9y
U2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmdBbmRX
YWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPG1ldGEgbmFtZT0ndGhlbWUt
Y29sb3InIGNvbnRlbnQ9J3JlZCc+PGJvZHkgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IGJsdWUn
PiJdOwotICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXdXaXRob3V0
VGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3IgdGhlbWVDb2xvcl0uQ0dDb2xv
ciwgcmVkQ29sb3IuZ2V0KCkpKTsKLSAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9y
KFt3ZWJWaWV3V2l0aG91dFRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIHNj
cm9sbFZpZXddLmJhY2tncm91bmRDb2xvci5DR0NvbG9yLCBibHVlQ29sb3IuZ2V0KCkpKTsKLQot
ICAgIGF1dG8gd2ViVmlld1dpdGhUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xv
ciA9IGNyZWF0ZVdlYlZpZXcoVXNlVGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29s
b3I6Olllcyk7Ci0gICAgRVhQRUNUX1RSVUUoIVt3ZWJWaWV3V2l0aFRoZW1lQ29sb3JGb3JTY3Jv
bGxBcmVhQmFja2dyb3VuZENvbG9yIHRoZW1lQ29sb3JdKTsKLQotICAgIFt3ZWJWaWV3V2l0aFRo
ZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIHN5bmNocm9ub3VzbHlMb2FkSFRN
TFN0cmluZ0FuZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8Ym9keSBz
dHlsZT0nYmFja2dyb3VuZC1jb2xvcjogYmx1ZSc+Il07Ci0gICAgRVhQRUNUX1RSVUUoIVt3ZWJW
aWV3V2l0aFRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIHRoZW1lQ29sb3Jd
KTsKLSAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKFt3ZWJWaWV3V2l0aFRoZW1l
Q29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIHNjcm9sbFZpZXddLmJhY2tncm91bmRD
b2xvci5DR0NvbG9yLCBibHVlQ29sb3IuZ2V0KCkpKTsKLQotICAgIFt3ZWJWaWV3V2l0aFRoZW1l
Q29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0
cmluZ0FuZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8bWV0YSBuYW1l
PSd0aGVtZS1jb2xvcicgY29udGVudD0ncmVkJz48Ym9keSBzdHlsZT0nYmFja2dyb3VuZC1jb2xv
cjogYmx1ZSc+Il07Ci0gICAgRVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFsVG9Db2xvcihbd2ViVmll
d1dpdGhUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciB0aGVtZUNvbG9yXS5D
R0NvbG9yLCByZWRDb2xvci5nZXQoKSkpOwotICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRv
Q29sb3IoW3dlYlZpZXdXaXRoVGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3Ig
c2Nyb2xsVmlld10uYmFja2dyb3VuZENvbG9yLkNHQ29sb3IsIHJlZENvbG9yLmdldCgpKSk7Ci19
Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdUaGVtZUNvbG9yLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdUaGVtZUNvbG9yLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmJmMmE2ZjBlNGQxMzUzYTg3ZDZmNjU3MmQyNjU2OTY0ZTMyMzJkMGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dL
V2ViVmlld1RoZW1lQ29sb3IubW0KQEAgLTAsMCArMSwyNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKworI2ltcG9ydCAiQ29jb2FDb2xvci5oIgorI2ltcG9ydCAiVGVzdENv
Y29hLmgiCisjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0IDxXZWJLaXQvV0tQcmVm
ZXJlbmNlc1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+Cisj
aW1wb3J0IDxXZWJLaXQvX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oPgorI2ltcG9ydCA8V2ViS2l0
L19XS0ludGVybmFsRGVidWdGZWF0dXJlLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisK
KyNkZWZpbmUgRVhQRUNUX05TU1RSSU5HX0VRKGV4cGVjdGVkLCBhY3R1YWwpIFwKKyAgICBFWFBF
Q1RfVFJVRShbYWN0dWFsIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOyBcCisgICAg
RVhQRUNUX1dLX1NUUkVRKGV4cGVjdGVkLCAoTlNTdHJpbmcgKilhY3R1YWwpOworCitjb25zdGV4
cHIgQ0dGbG9hdCByZWRDb2xvckNvbXBvbmVudHNbNF0gPSB7IDEsIDAsIDAsIDEgfTsKK2NvbnN0
ZXhwciBDR0Zsb2F0IGJsdWVDb2xvckNvbXBvbmVudHNbNF0gPSB7IDAsIDAsIDEsIDEgfTsKKwor
VEVTVChXS1dlYlZpZXdUaGVtZUNvbG9yLCBNZXRhRWxlbWVudE9uTG9hZCkKK3sKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKV0pOworICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlldyB0
aGVtZUNvbG9yXSk7CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmdB
bmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPG1ldGEgbmFtZT0ndGhl
bWUtY29sb3InIGNvbnRlbnQ9J3JlZCc+Il07CisKKyAgICBhdXRvIHNSR0JDb2xvclNwYWNlID0g
YWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwor
ICAgIGF1dG8gcmVkQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2Uu
Z2V0KCksIHJlZENvbG9yQ29tcG9uZW50cykpOworICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVh
bFRvQ29sb3IoW3dlYlZpZXcgdGhlbWVDb2xvcl0uQ0dDb2xvciwgcmVkQ29sb3IuZ2V0KCkpKTsK
KworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRpbEFs
bEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8bWV0YSBuYW1lPSdub3QtdGhlbWUtY29sb3In
IGNvbnRlbnQ9J3JlZCc+Il07CisKKyAgICBFWFBFQ1RfVFJVRSghW3dlYlZpZXcgdGhlbWVDb2xv
cl0pOworfQorCitURVNUKFdLV2ViVmlld1RoZW1lQ29sb3IsIE11bHRpcGxlTWV0YUVsZW1lbnRz
KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisgICAgRVhQRUNUX1RS
VUUoIVt3ZWJWaWV3IHRoZW1lQ29sb3JdKTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlM
b2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8
bWV0YSBuYW1lPSd0aGVtZS1jb2xvcicgY29udGVudD0ncmVkJz48bWV0YSBuYW1lPSd0aGVtZS1j
b2xvcicgY29udGVudD0nYmx1ZSc+Il07CisKKyAgICBhdXRvIHNSR0JDb2xvclNwYWNlID0gYWRv
cHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOworICAg
IGF1dG8gYmx1ZUNvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlLmdl
dCgpLCBibHVlQ29sb3JDb21wb25lbnRzKSk7CisgICAgRVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFs
VG9Db2xvcihbd2ViVmlldyB0aGVtZUNvbG9yXS5DR0NvbG9yLCBibHVlQ29sb3IuZ2V0KCkpKTsK
K30KKworQGludGVyZmFjZSBXS1dlYlZpZXdUaGVtZUNvbG9yT2JzZXJ2ZXIgOiBOU09iamVjdAor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3Owor
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLV2ViVmlldyAqd2ViVmlldzsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RhdGU7CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFdLV2ViVmlld1RoZW1lQ29sb3JPYnNlcnZlcgorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfc3RhdGUgPSBA
ImJlZm9yZS1pbml0IjsKKworICAgIF93ZWJWaWV3ID0gd2ViVmlldzsKKyAgICBbX3dlYlZpZXcg
YWRkT2JzZXJ2ZXI6c2VsZiBmb3JLZXlQYXRoOkAidGhlbWVDb2xvciIgb3B0aW9uczpOU0tleVZh
bHVlT2JzZXJ2aW5nT3B0aW9uSW5pdGlhbCBjb250ZXh0Om5pbF07CisKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBh
dGggb2ZPYmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeSAqKWNoYW5nZSBjb250
ZXh0Oih2b2lkICopY29udGV4dAoreworICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpA
ImJlZm9yZS1pbml0Il0pIHsKKyAgICAgICAgX3N0YXRlID0gQCJhZnRlci1pbml0IjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJl
Zm9yZS1sb2FkIl0pIHsKKyAgICAgICAgX3N0YXRlID0gQCJhZnRlci1sb2FkIjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJlZm9y
ZS1jb250ZW50LWNoYW5nZSJdKSB7CisgICAgICAgIF9zdGF0ZSA9IEAiYWZ0ZXItY29udGVudC1j
aGFuZ2UiOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFtfc3RhdGUgaXNFcXVh
bFRvU3RyaW5nOkAiYmVmb3JlLW5hbWUtY2hhbmdlLW5vdC10aGVtZS1jb2xvciJdKSB7CisgICAg
ICAgIF9zdGF0ZSA9IEAiYWZ0ZXItbmFtZS1jaGFuZ2Utbm90LXRoZW1lLWNvbG9yIjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChbX3N0YXRlIGlzRXF1YWxUb1N0cmluZzpAImJl
Zm9yZS1uYW1lLWNoYW5nZS10aGVtZS1jb2xvciJdKSB7CisgICAgICAgIF9zdGF0ZSA9IEAiYWZ0
ZXItbmFtZS1jaGFuZ2UtdGhlbWUtY29sb3IiOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKFtfc3RhdGUgaXNFcXVhbFRvU3RyaW5nOkAiYmVmb3JlLW5vZGUtcmVtb3ZlZCJdKSB7
CisgICAgICAgIF9zdGF0ZSA9IEAiYWZ0ZXItbm9kZS1yZW1vdmVkIjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0BlbmQK
KworVEVTVChXS1dlYlZpZXdUaGVtZUNvbG9yLCBLVk8pCit7CisgICAgYXV0byBzUkdCQ29sb3JT
cGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNS
R0IpKTsKKyAgICBhdXRvIHJlZENvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKHNSR0JDb2xv
clNwYWNlLmdldCgpLCByZWRDb2xvckNvbXBvbmVudHMpKTsKKyAgICBhdXRvIGJsdWVDb2xvciA9
IGFkb3B0Q0YoQ0dDb2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZS5nZXQoKSwgYmx1ZUNvbG9yQ29t
cG9uZW50cykpOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsKKyAgICBh
dXRvIHRoZW1lQ29sb3JPYnNlcnZlciA9IGFkb3B0TlMoW1tXS1dlYlZpZXdUaGVtZUNvbG9yT2Jz
ZXJ2ZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgRVhQRUNU
X05TU1RSSU5HX0VRKCJhZnRlci1pbml0IiwgW3RoZW1lQ29sb3JPYnNlcnZlciBzdGF0ZV0pOwor
ICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlldyB0aGVtZUNvbG9yXSk7CisKKyAgICBbdGhlbWVDb2xv
ck9ic2VydmVyIHNldFN0YXRlOkAiYmVmb3JlLWxvYWQiXTsKKyAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1Bh
aW50OkAiPG1ldGEgbmFtZT0ndGhlbWUtY29sb3InIGNvbnRlbnQ9J3JlZCc+Il07CisgICAgRVhQ
RUNUX05TU1RSSU5HX0VRKCJhZnRlci1sb2FkIiwgW3RoZW1lQ29sb3JPYnNlcnZlciBzdGF0ZV0p
OworICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXcgdGhlbWVDb2xv
cl0uQ0dDb2xvciwgcmVkQ29sb3IuZ2V0KCkpKTsKKworICAgIFt0aGVtZUNvbG9yT2JzZXJ2ZXIg
c2V0U3RhdGU6QCJiZWZvcmUtY29udGVudC1jaGFuZ2UiXTsKKyAgICBbd2ViVmlldyBvYmplY3RC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YScpLnNl
dEF0dHJpYnV0ZSgnY29udGVudCcsICdibHVlJykiXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4
dFByZXNlbnRhdGlvblVwZGF0ZV07CisgICAgRVhQRUNUX05TU1RSSU5HX0VRKCJhZnRlci1jb250
ZW50LWNoYW5nZSIsIFt0aGVtZUNvbG9yT2JzZXJ2ZXIgc3RhdGVdKTsKKyAgICBFWFBFQ1RfVFJV
RShDR0NvbG9yRXF1YWxUb0NvbG9yKFt3ZWJWaWV3IHRoZW1lQ29sb3JdLkNHQ29sb3IsIGJsdWVD
b2xvci5nZXQoKSkpOworCisgICAgW3RoZW1lQ29sb3JPYnNlcnZlciBzZXRTdGF0ZTpAImJlZm9y
ZS1uYW1lLWNoYW5nZS1ub3QtdGhlbWUtY29sb3IiXTsKKyAgICBbd2ViVmlldyBvYmplY3RCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YScpLnNldEF0
dHJpYnV0ZSgnbmFtZScsICdub3QtdGhlbWUtY29sb3InKSJdOworICAgIFt3ZWJWaWV3IHdhaXRG
b3JOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKKyAgICBFWFBFQ1RfTlNTVFJJTkdfRVEoImFmdGVy
LW5hbWUtY2hhbmdlLW5vdC10aGVtZS1jb2xvciIsIFt0aGVtZUNvbG9yT2JzZXJ2ZXIgc3RhdGVd
KTsKKyAgICBFWFBFQ1RfVFJVRSghW3dlYlZpZXcgdGhlbWVDb2xvcl0pOworCisgICAgW3RoZW1l
Q29sb3JPYnNlcnZlciBzZXRTdGF0ZTpAImJlZm9yZS1uYW1lLWNoYW5nZS10aGVtZS1jb2xvciJd
OworICAgIFt3ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5x
dWVyeVNlbGVjdG9yKCdtZXRhJykuc2V0QXR0cmlidXRlKCduYW1lJywgJ3RoZW1lLWNvbG9yJyki
XTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07CisgICAgRVhQ
RUNUX05TU1RSSU5HX0VRKCJhZnRlci1uYW1lLWNoYW5nZS10aGVtZS1jb2xvciIsIFt0aGVtZUNv
bG9yT2JzZXJ2ZXIgc3RhdGVdKTsKKyAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9y
KFt3ZWJWaWV3IHRoZW1lQ29sb3JdLkNHQ29sb3IsIGJsdWVDb2xvci5nZXQoKSkpOworCisgICAg
W3RoZW1lQ29sb3JPYnNlcnZlciBzZXRTdGF0ZTpAImJlZm9yZS1ub2RlLXJlbW92ZWQiXTsKKyAg
ICBbd2ViVmlldyBvYmplY3RCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlT
ZWxlY3RvcignbWV0YScpLnJlbW92ZSgpIl07CisgICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVz
ZW50YXRpb25VcGRhdGVdOworICAgIEVYUEVDVF9OU1NUUklOR19FUSgiYWZ0ZXItbm9kZS1yZW1v
dmVkIiwgW3RoZW1lQ29sb3JPYnNlcnZlciBzdGF0ZV0pOworICAgIEVYUEVDVF9UUlVFKCFbd2Vi
VmlldyB0aGVtZUNvbG9yXSk7Cit9CisKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1Qp
CisKK1RFU1QoV0tXZWJWaWV3VGhlbWVDb2xvciwgQXBwbGljYXRpb25NYW5pZmVzdCkKK3sKKyAg
ICBhdXRvIHNSR0JDb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFt
ZShrQ0dDb2xvclNwYWNlU1JHQikpOworICAgIGF1dG8gcmVkQ29sb3IgPSBhZG9wdENGKENHQ29s
b3JDcmVhdGUoc1JHQkNvbG9yU3BhY2UuZ2V0KCksIHJlZENvbG9yQ29tcG9uZW50cykpOworCisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsKKyAgICBFWFBFQ1RfVFJVRSghW3dl
YlZpZXcgdGhlbWVDb2xvcl0pOworCisgICAgTlNEaWN0aW9uYXJ5ICptYW5pZmVzdE9iamVjdCA9
IEB7IEAibmFtZSI6IEAiVGVzdCIsIEAidGhlbWVfY29sb3IiOiBAInJlZCIgfTsKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVD
aGlsZEZyYW1lc1BhaW50OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPGxpbmsgcmVsPSdt
YW5pZmVzdCcgaHJlZj0nZGF0YTphcHBsaWNhdGlvbi9tYW5pZmVzdCtqc29uO2NoYXJzZXQ9dXRm
LTg7YmFzZTY0LCVAJz4iLCBbW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0
Om1hbmlmZXN0T2JqZWN0IG9wdGlvbnM6MCBlcnJvcjpuaWxdIGJhc2U2NEVuY29kZWRTdHJpbmdX
aXRoT3B0aW9uczowXV1dOworCisgICAgc3RhdGljIGJvb2wgZGlkR2V0QXBwbGljYXRpb25NYW5p
ZmVzdCA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9nZXRBcHBsaWNhdGlvbk1hbmlmZXN0V2l0aENv
bXBsZXRpb25IYW5kbGVyOlsmXSAoX1dLQXBwbGljYXRpb25NYW5pZmVzdCAqbWFuaWZlc3QpIHsK
KyAgICAgICAgRVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFsVG9Db2xvcihtYW5pZmVzdC50aGVtZUNv
bG9yLkNHQ29sb3IsIHJlZENvbG9yLmdldCgpKSk7CisKKyAgICAgICAgZGlkR2V0QXBwbGljYXRp
b25NYW5pZmVzdCA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkaWRHZXRBcHBsaWNhdGlvbk1hbmlmZXN0KTsKKworICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0
UHJlc2VudGF0aW9uVXBkYXRlXTsKKyAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9y
KFt3ZWJWaWV3IHRoZW1lQ29sb3JdLkNHQ29sb3IsIHJlZENvbG9yLmdldCgpKSk7Cit9CisKK1RF
U1QoV0tXZWJWaWV3VGhlbWVDb2xvciwgTWV0YUVsZW1lbnRPdmVycmlkZXNBcHBsaWNhdGlvbk1h
bmlmZXN0KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisgICAgRVhQ
RUNUX1RSVUUoIVt3ZWJWaWV3IHRoZW1lQ29sb3JdKTsKKworICAgIE5TRGljdGlvbmFyeSAqbWFu
aWZlc3RPYmplY3QgPSBAeyBAIm5hbWUiOiBAIlRlc3QiLCBAInRoZW1lX2NvbG9yIjogQCJibHVl
IiB9OworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRp
bEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCI8bGluayByZWw9J21hbmlmZXN0JyBocmVmPSdkYXRhOmFwcGxpY2F0aW9uL21hbmlmZXN0K2pz
b247Y2hhcnNldD11dGYtODtiYXNlNjQsJUAnPjxtZXRhIG5hbWU9J3RoZW1lLWNvbG9yJyBjb250
ZW50PSdyZWQnPiIsIFtbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05PYmplY3Q6bWFu
aWZlc3RPYmplY3Qgb3B0aW9uczowIGVycm9yOm5pbF0gYmFzZTY0RW5jb2RlZFN0cmluZ1dpdGhP
cHRpb25zOjBdXV07CisKKyAgICBhdXRvIHNSR0JDb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9y
U3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOworICAgIGF1dG8gcmVkQ29s
b3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2UuZ2V0KCksIHJlZENvbG9y
Q29tcG9uZW50cykpOworICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZp
ZXcgdGhlbWVDb2xvcl0uQ0dDb2xvciwgcmVkQ29sb3IuZ2V0KCkpKTsKK30KKworI2VuZGlmIC8v
IEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisKKy8vIFRoZXJlJ3Mgbm8gQVBJL1NQSSB0byBnZXQgdGhlIGJhY2tncm91bmQgY29sb3Igb2Yg
dGhlIHNjcm9sbCBhcmVhIG9uIG1hY09TLgorCitlbnVtIGNsYXNzIFVzZVRoZW1lQ29sb3JGb3JT
Y3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIDogYm9vbCB7IFllcywgTm8gfTsKK3N0YXRpYyBSZXRh
aW5QdHI8VGVzdFdLV2ViVmlldz4gY3JlYXRlV2ViVmlldyhVc2VUaGVtZUNvbG9yRm9yU2Nyb2xs
QXJlYUJhY2tncm91bmRDb2xvciB1c2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRD
b2xvcikKK3sKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIGZvciAoX1dLSW50ZXJuYWxEZWJ1Z0ZlYXR1
cmUgKmZlYXR1cmUgaW4gW1dLUHJlZmVyZW5jZXMgX2ludGVybmFsRGVidWdGZWF0dXJlc10pIHsK
KyAgICAgICAgaWYgKFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJVc2VUaGVtZUNvbG9y
Rm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciJdKSB7CisgICAgICAgICAgICBbW2NvbmZpZ3Vy
YXRpb24gcHJlZmVyZW5jZXNdIF9zZXRFbmFibGVkOih1c2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJl
YUJhY2tncm91bmRDb2xvciA9PSBVc2VUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRD
b2xvcjo6WWVzKSBmb3JJbnRlcm5hbERlYnVnRmVhdHVyZTpmZWF0dXJlXTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0TlMoW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgODAwLCA2MDApIGNv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworfQorCitURVNUKFdLV2ViVmlld1Ro
ZW1lQ29sb3IsIEV4cGVyaW1lbnRhbFVzZVRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3Vu
ZENvbG9yKQoreworICAgIGF1dG8gc1JHQkNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFj
ZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdCKSk7CisgICAgYXV0byByZWRDb2xvciA9
IGFkb3B0Q0YoQ0dDb2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZS5nZXQoKSwgcmVkQ29sb3JDb21w
b25lbnRzKSk7CisgICAgYXV0byBibHVlQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoc1JH
QkNvbG9yU3BhY2UuZ2V0KCksIGJsdWVDb2xvckNvbXBvbmVudHMpKTsKKworICAgIGF1dG8gd2Vi
Vmlld1dpdGhvdXRUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciA9IGNyZWF0
ZVdlYlZpZXcoVXNlVGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3I6Ok5vKTsK
KyAgICBFWFBFQ1RfVFJVRSghW3dlYlZpZXdXaXRob3V0VGhlbWVDb2xvckZvclNjcm9sbEFyZWFC
YWNrZ3JvdW5kQ29sb3IgdGhlbWVDb2xvcl0pOworCisgICAgW3dlYlZpZXdXaXRob3V0VGhlbWVD
b2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3Igc3luY2hyb25vdXNseUxvYWRIVE1MU3Ry
aW5nQW5kV2FpdFVudGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFtZXNQYWludDpAIjxib2R5IHN0eWxl
PSdiYWNrZ3JvdW5kLWNvbG9yOiBibHVlJz4iXTsKKyAgICBFWFBFQ1RfVFJVRSghW3dlYlZpZXdX
aXRob3V0VGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3IgdGhlbWVDb2xvcl0p
OworICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRvQ29sb3IoW3dlYlZpZXdXaXRob3V0VGhl
bWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3Igc2Nyb2xsVmlld10uYmFja2dyb3Vu
ZENvbG9yLkNHQ29sb3IsIGJsdWVDb2xvci5nZXQoKSkpOworCisgICAgW3dlYlZpZXdXaXRob3V0
VGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3Igc3luY2hyb25vdXNseUxvYWRI
VE1MU3RyaW5nQW5kV2FpdFVudGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFtZXNQYWludDpAIjxtZXRh
IG5hbWU9J3RoZW1lLWNvbG9yJyBjb250ZW50PSdyZWQnPjxib2R5IHN0eWxlPSdiYWNrZ3JvdW5k
LWNvbG9yOiBibHVlJz4iXTsKKyAgICBFWFBFQ1RfVFJVRShDR0NvbG9yRXF1YWxUb0NvbG9yKFt3
ZWJWaWV3V2l0aG91dFRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFja2dyb3VuZENvbG9yIHRoZW1l
Q29sb3JdLkNHQ29sb3IsIHJlZENvbG9yLmdldCgpKSk7CisgICAgRVhQRUNUX1RSVUUoQ0dDb2xv
ckVxdWFsVG9Db2xvcihbd2ViVmlld1dpdGhvdXRUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tn
cm91bmRDb2xvciBzY3JvbGxWaWV3XS5iYWNrZ3JvdW5kQ29sb3IuQ0dDb2xvciwgYmx1ZUNvbG9y
LmdldCgpKSk7CisKKyAgICBhdXRvIHdlYlZpZXdXaXRoVGhlbWVDb2xvckZvclNjcm9sbEFyZWFC
YWNrZ3JvdW5kQ29sb3IgPSBjcmVhdGVXZWJWaWV3KFVzZVRoZW1lQ29sb3JGb3JTY3JvbGxBcmVh
QmFja2dyb3VuZENvbG9yOjpZZXMpOworICAgIEVYUEVDVF9UUlVFKCFbd2ViVmlld1dpdGhUaGVt
ZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciB0aGVtZUNvbG9yXSk7CisKKyAgICBb
d2ViVmlld1dpdGhUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciBzeW5jaHJv
bm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1Bh
aW50OkAiPGJvZHkgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IGJsdWUnPiJdOworICAgIEVYUEVD
VF9UUlVFKCFbd2ViVmlld1dpdGhUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xv
ciB0aGVtZUNvbG9yXSk7CisgICAgRVhQRUNUX1RSVUUoQ0dDb2xvckVxdWFsVG9Db2xvcihbd2Vi
Vmlld1dpdGhUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciBzY3JvbGxWaWV3
XS5iYWNrZ3JvdW5kQ29sb3IuQ0dDb2xvciwgYmx1ZUNvbG9yLmdldCgpKSk7CisKKyAgICBbd2Vi
Vmlld1dpdGhUaGVtZUNvbG9yRm9yU2Nyb2xsQXJlYUJhY2tncm91bmRDb2xvciBzeW5jaHJvbm91
c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50
OkAiPG1ldGEgbmFtZT0ndGhlbWUtY29sb3InIGNvbnRlbnQ9J3JlZCc+PGJvZHkgc3R5bGU9J2Jh
Y2tncm91bmQtY29sb3I6IGJsdWUnPiJdOworICAgIEVYUEVDVF9UUlVFKENHQ29sb3JFcXVhbFRv
Q29sb3IoW3dlYlZpZXdXaXRoVGhlbWVDb2xvckZvclNjcm9sbEFyZWFCYWNrZ3JvdW5kQ29sb3Ig
dGhlbWVDb2xvcl0uQ0dDb2xvciwgcmVkQ29sb3IuZ2V0KCkpKTsKKyAgICBFWFBFQ1RfVFJVRShD
R0NvbG9yRXF1YWxUb0NvbG9yKFt3ZWJWaWV3V2l0aFRoZW1lQ29sb3JGb3JTY3JvbGxBcmVhQmFj
a2dyb3VuZENvbG9yIHNjcm9sbFZpZXddLmJhY2tncm91bmRDb2xvci5DR0NvbG9yLCByZWRDb2xv
ci5nZXQoKSkpOworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>