<?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>230250</bug_id>
          
          <creation_ts>2021-09-14 04:08:43 -0700</creation_ts>
          <short_desc>[GLib] Media session manager unable to handle more than one session</short_desc>
          <delta_ts>2022-12-05 13:21:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=231811</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=247527</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>aperez</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>crzwdjk</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>peng.liu6</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1793250</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-09-14 04:08:43 -0700</bug_when>
    <thetext>The dbus name it tries to acquire is unique to the app PID. We need some session id there, and the manager should handle more than one dbus object then, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794855</commentid>
    <comment_count>1</comment_count>
      <attachid>438586</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-09-19 03:21:42 -0700</bug_when>
    <thetext>Created attachment 438586
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796102</commentid>
    <comment_count>2</comment_count>
      <attachid>438586</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2021-09-22 09:34:25 -0700</bug_when>
    <thetext>Comment on attachment 438586
Patch

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

&gt; Source/WebCore/platform/audio/glib/MediaSessionGLib.cpp:50
&gt; +        return { };

Do you mean `return std::nullopt;` here?

&gt; Source/WebCore/platform/audio/glib/MediaSessionGLib.cpp:117
&gt; +        return { };

Ditto.

&gt; Source/WebCore/platform/audio/glib/MediaSessionGLib.h:37
&gt; +    explicit MediaSessionGLib(MediaSessionManagerGLib&amp;, GRefPtr&lt;GDBusConnection&gt;&amp;&amp;, MediaSessionIdentifier);

Do we need explicit here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796106</commentid>
    <comment_count>3</comment_count>
      <attachid>438586</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-09-22 09:38:14 -0700</bug_when>
    <thetext>Comment on attachment 438586
Patch

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

&gt;&gt; Source/WebCore/platform/audio/glib/MediaSessionGLib.cpp:50
&gt;&gt; +        return { };
&gt; 
&gt; Do you mean `return std::nullopt;` here?

Why? What would be the difference?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796112</commentid>
    <comment_count>4</comment_count>
      <attachid>438586</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2021-09-22 09:49:53 -0700</bug_when>
    <thetext>Comment on attachment 438586
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/audio/glib/MediaSessionGLib.cpp:50
&gt;&gt;&gt; +        return { };
&gt;&gt; 
&gt;&gt; Do you mean `return std::nullopt;` here?
&gt; 
&gt; Why? What would be the difference?

Just a style thing. I have seen a lot of usages of `std::nullopt`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799009</commentid>
    <comment_count>5</comment_count>
      <attachid>438586</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2021-09-30 13:22:39 -0700</bug_when>
    <thetext>Comment on attachment 438586
Patch

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

&gt;&gt; Source/WebCore/platform/audio/glib/MediaSessionGLib.h:37
&gt;&gt; +    explicit MediaSessionGLib(MediaSessionManagerGLib&amp;, GRefPtr&lt;GDBusConnection&gt;&amp;&amp;, MediaSessionIdentifier);
&gt; 
&gt; Do we need explicit here?

Never hurts :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799720</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-02 02:07:19 -0700</bug_when>
    <thetext>Committed r283437 (242424@main): &lt;https://commits.webkit.org/242424@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 438586.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799721</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-02 02:08:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/83795322&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802191</commentid>
    <comment_count>8</comment_count>
    <who name="Arcady Goldmints-Orlov">crzwdjk</who>
    <bug_when>2021-10-08 12:20:07 -0700</bug_when>
    <thetext>This appears to have caused a number of regressions, (list filtered to what I think could be related to the change):

Regressions: Unexpected text-only failures

	media/audio-background-playback-playlist.html [ Failure ]
	media/media-session/actionHandlerInternalMappings.html [ Failure ]
	media/media-session/default-actionHandlers.html [ Failure ]
	media/video-background-playback.html [ Failure ]
	media/video-concurrent-playback.html [ Failure ]
	media/video-interruption-with-resume-not-allowing-play.html [ Failure ]
	media/video-multiple-concurrent-playback.html [ Failure ]
	media/webaudio-background-playback.html [ Failure ]
	webrtc/concurrentVideoPlayback2.html [ Failure ]

Regressions: Unexpected timeouts
	media/media-session/callActionHandler.html [ Timeout ]
	media/media-session/play-after-seek.html [ Timeout ]
	media/remote-control-command-is-user-gesture.html [ Timeout ]
	media/remote-control-command-scrubbing.html [ Timeout ]
	media/remote-control-command-seek.html [ Timeout ]
	media/video-inactive-playback.html [ Timeout ]
	media/video-interruption-with-resume-allowing-play.html [ Timeout ]
	media/video-isplayingtoautomotiveheadunit.html [ Timeout ]
	media/video-system-sleep.html [ Timeout ]
	webaudio/audiocontext-state-interrupted.html [ Timeout ]
	webaudio/suspend-context-while-interrupted.html [ Timeout ]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802371</commentid>
    <comment_count>9</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-10-09 02:07:11 -0700</bug_when>
    <thetext>I can&apos;t reproduce this on my desktop...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804849</commentid>
    <comment_count>10</comment_count>
    <who name="Arcady Goldmints-Orlov">crzwdjk</who>
    <bug_when>2021-10-15 09:31:06 -0700</bug_when>
    <thetext>I can&apos;t reproduce it locally either but it seems to happen consistently on the bots, e.g. https://build.webkit.org/results/GTK-Linux-64-bit-Release-Skip-Failing-Tests/r284248%20(2041)/results.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438586</attachid>
            <date>2021-09-19 03:21:42 -0700</date>
            <delta_ts>2021-10-02 02:07:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230250-20210919032140.patch</filename>
            <type>text/plain</type>
            <size>45573</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyNzM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGJlNWE3ZGFiOWVmYjM1ZTQxM2YzZDg4
YmVmMDczZTNmNjhjMDA2MTYuLmZmMmYxNTgwYjkwOTcyNGViNWRhZjUwOTI2NzhmNTRkYmQzYWU5
OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjEtMDktMTkgIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHTGliXSBNZWRpYSBzZXNzaW9uIG1hbmFn
ZXIgdW5hYmxlIHRvIGhhbmRsZSBtb3JlIHRoYW4gb25lIHNlc3Npb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDI1MAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL2dsaWIvR1JlZlB0ci5oOiBG
b3J3YXJkLWRlY2xhcmUgR0RCdXNDb25uZWN0aW9uLgorCiAyMDIxLTA5LTE4ICBNeWxlcyBDLiBN
YXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPUyBGYW1pbHldIERl
bGV0ZSBsZXR0ZXJwcmVzcyBzdXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDFiYjQxNzNlNTgzOWU2YmMx
OTFkZTA1NmQ1MzdhMDlmYWFjNjAyOC4uYjZkZmY3ZTNmMDRjMmE2ZWZhZjRkZmUwMDVhZTA3ZmQ2
ODI5ZGRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIxLTA5LTE5ICBQaGlsaXBw
ZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0xpYl0gTWVkaWEg
c2Vzc2lvbiBtYW5hZ2VyIHVuYWJsZSB0byBoYW5kbGUgbW9yZSB0aGFuIG9uZSBzZXNzaW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzAyNTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFYWNoIHNlc3Np
b24gbm93IG1haW50YWlucyBpdHMgb3duIGNvbm5lY3Rpb24gdG8gdGhlIEQtQnVzIHNlc3Npb24s
IGFsbG93aW5nIHRvIHNhZmVseQorICAgICAgICBleHBvc2UgdGhlIGNvcnJlc3BvbmRpbmcgTVBS
SVMgb2JqZWNzIG9uIHRoZSBidXMuIE1vc3Qgb2YgdGhlIEQtQnVzIGFuZCBHVmFyaWFudCBoYW5k
bGluZworICAgICAgICBoYXMgYmVlbiByZWZhY3RvcmVkIHRvIHRoZSBuZXcgTWVkaWFTZXNzaW9u
R0xpYiBtb2R1bGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzR0xpYi50eHQ6CisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vZ2xpYi9NZWRpYVNlc3Npb25HTGliLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpnZXRDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZU1l
dGhvZENhbGwpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TXByaXNQcm9wZXJ0eSk6CisgICAgICAg
IChXZWJDb3JlOjpoYW5kbGVHZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVT
ZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25HTGliOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uR0xpYjo6TWVkaWFTZXNzaW9uR0xpYik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25HTGliOjp+TWVkaWFTZXNzaW9uR0xpYik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25HTGliOjpuYW1lTG9zdCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVNlc3Npb25HTGliOjplbWl0UG9zaXRpb25DaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbkdMaWI6OnVwZGF0ZU5vd1BsYXlpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uR0xpYjo6Z2V0TWV0YWRhdGFBc0dWYXJpYW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbkdMaWI6OmdldFBsYXliYWNrU3RhdHVzQXNHVmFy
aWFudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25HTGliOjplbWl0UHJvcGVydGll
c0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uR0xpYjo6cGxheWJhY2tT
dGF0dXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbkdMaWI6OmdldEFj
dGl2ZVNlc3Npb25Qb3NpdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ2xpYi9NZWRp
YVNlc3Npb25HTGliLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uR0xp
Yjo6bWFuYWdlciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ2xpYi9NZWRpYVNl
c3Npb25NYW5hZ2VyR0xpYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhU2Vz
c2lvbk1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25NYW5h
Z2VyR0xpYjo6TWVkaWFTZXNzaW9uTWFuYWdlckdMaWIpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTZXNzaW9uTWFuYWdlckdMaWI6OmFkZFNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTZXNzaW9uTWFuYWdlckdMaWI6OnJlbW92ZVNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTZXNzaW9uTWFuYWdlckdMaWI6OnNlc3Npb25TdGF0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTZXNzaW9uTWFuYWdlckdMaWI6OmNsaWVudENoYXJhY3RlcmlzdGljc0No
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uTWFuYWdlckdMaWI6OnVwZGF0
ZU5vd1BsYXlpbmdJbmZvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nbGliL01lZGlhU2Vz
c2lvbk1hbmFnZXJHTGliLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25NYW5hZ2Vy
R0xpYjo6bXByaXNJbnRlcmZhY2UgY29uc3QpOgorCiAyMDIxLTA5LTE4ICBNeWxlcyBDLiBNYXhm
aWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBBZGQgIlNoYXBp
bmciIGxvZyBjaGFubmVsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIu
aCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oCmluZGV4IDE3Y2VmYjMxZDQ2MjZhMDMz
YTdmODNmZTY2OTE5NzljYzVlZjlkNDQuLmU3MjFmZDU1ZjQyYWMzZDc2YjQwMTc2MGUwYTE5Yjk5
ZmUzZTBmOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSA8d3RmL0hhc2hUcmFpdHMuaD4KIAogZXh0ZXJuICJDIiB7CisgICAgdHlwZWRlZiBzdHJ1Y3Qg
X0dEQnVzQ29ubmVjdGlvbiBHREJ1c0Nvbm5lY3Rpb247CiAgICAgdHlwZWRlZiBzdHJ1Y3QgX0dE
QnVzTm9kZUluZm8gR0RCdXNOb2RlSW5mbzsKICAgICBHREJ1c05vZGVJbmZvKiBnX2RidXNfbm9k
ZV9pbmZvX3JlZihHREJ1c05vZGVJbmZvKik7CiAgICAgdm9pZCBnX2RidXNfbm9kZV9pbmZvX3Vu
cmVmKEdEQnVzTm9kZUluZm8qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NvdXJjZXNHTGliLnR4dCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNHTGliLnR4
dAppbmRleCBkYzk1ZGUyYjMxN2E1ZGVlMGVjNzhmNWJmMDBiMDU2N2EzNTkxODUzLi41M2Y0OGJh
OGFkOTkzNjQ2ODA0NTdkYWY0ZGNiYWU2MzIzNjBiZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Tb3VyY2VzR0xpYi50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU291cmNlc0dMaWIudHh0CkBAIC0yMiw2ICsyMiw3IEBACiAvLyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAKIHBsYXRmb3JtL2F1ZGlvL2dsaWIvQXVkaW9CdXNHTGliLmNwcAor
cGxhdGZvcm0vYXVkaW8vZ2xpYi9NZWRpYVNlc3Npb25HTGliLmNwcAogcGxhdGZvcm0vYXVkaW8v
Z2xpYi9NZWRpYVNlc3Npb25NYW5hZ2VyR0xpYi5jcHAKIAogcGxhdGZvcm0vZ2xpYi9BcHBsaWNh
dGlvbkdMaWIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9n
bGliL01lZGlhU2Vzc2lvbkdMaWIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
Z2xpYi9NZWRpYVNlc3Npb25HTGliLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xN2U4MTQ5NzEyMjg0ZjM3Nzhi
ZDdlYjZjNTVhNGFmODBkMmE2YTk0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vZ2xpYi9NZWRpYVNlc3Npb25HTGliLmNwcApAQCAtMCwwICsxLDM3OSBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTAorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlhU2Vz
c2lvbkdMaWIuaCIKKworI2lmIFVTRShHTElCKSAmJiBFTkFCTEUoTUVESUFfU0VTU0lPTikKKwor
I2luY2x1ZGUgIkFwcGxpY2F0aW9uR0xpYi5oIgorI2luY2x1ZGUgIk1lZGlhU2Vzc2lvbk1hbmFn
ZXJHTGliLmgiCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHd0Zi9Tb3J0ZWRBcnJh
eU1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNkZWZpbmUgREJVU19NUFJJU19PQkpF
Q1RfUEFUSCAiL29yZy9tcHJpcy9NZWRpYVBsYXllcjIiCisjZGVmaW5lIERCVVNfTVBSSVNfUExB
WUVSX0lOVEVSRkFDRSAib3JnLm1wcmlzLk1lZGlhUGxheWVyMi5QbGF5ZXIiCisjZGVmaW5lIERC
VVNfTVBSSVNfVFJBQ0tfUEFUSCAiL29yZy9tcHJpcy9NZWRpYVBsYXllcjIvd2Via2l0IgorCitz
dGF0aWMgc3RkOjpvcHRpb25hbDxQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UmVtb3RlQ29udHJvbENv
bW1hbmRUeXBlPiBnZXRDb21tYW5kKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgc3RhdGljIGNv
bnN0IHN0ZDo6cGFpcjxDb21wYXJhYmxlQVNDSUlMaXRlcmFsLCBQbGF0Zm9ybU1lZGlhU2Vzc2lv
bjo6UmVtb3RlQ29udHJvbENvbW1hbmRUeXBlPiBjb21tYW5kTGlzdFtdID0geworICAgICAgICB7
ICJOZXh0IiwgUGxhdGZvcm1NZWRpYVNlc3Npb246Ok5leHRUcmFja0NvbW1hbmQgfSwKKyAgICAg
ICAgeyAiUGF1c2UiLCBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UGF1c2VDb21tYW5kIH0sCisgICAg
ICAgIHsgIlBsYXkiLCBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UGxheUNvbW1hbmQgfSwKKyAgICAg
ICAgeyAiUGxheVBhdXNlIiwgUGxhdGZvcm1NZWRpYVNlc3Npb246OlRvZ2dsZVBsYXlQYXVzZUNv
bW1hbmQgfSwKKyAgICAgICAgeyAiUHJldmlvdXMiLCBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UHJl
dmlvdXNUcmFja0NvbW1hbmQgfSwKKyAgICAgICAgeyAiU2VlayIsIFBsYXRmb3JtTWVkaWFTZXNz
aW9uOjpTZWVrVG9QbGF5YmFja1Bvc2l0aW9uQ29tbWFuZCB9LAorICAgICAgICB7ICJTdG9wIiwg
UGxhdGZvcm1NZWRpYVNlc3Npb246OlN0b3BDb21tYW5kIH0KKyAgICB9OworCisgICAgc3RhdGlj
IGNvbnN0IFNvcnRlZEFycmF5TWFwIG1hcCB7IGNvbW1hbmRMaXN0IH07CisgICAgYXV0byB2YWx1
ZSA9IG1hcC5nZXQobmFtZSwgUGxhdGZvcm1NZWRpYVNlc3Npb246OlJlbW90ZUNvbnRyb2xDb21t
YW5kVHlwZTo6Tm9Db21tYW5kKTsKKyAgICBpZiAodmFsdWUgPT0gUGxhdGZvcm1NZWRpYVNlc3Np
b246OlJlbW90ZUNvbnRyb2xDb21tYW5kVHlwZTo6Tm9Db21tYW5kKQorICAgICAgICByZXR1cm4g
eyB9OworICAgIHJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlTWV0aG9kQ2Fs
bChHREJ1c0Nvbm5lY3Rpb24qIC8qIGNvbm5lY3Rpb24gKi8sIGNvbnN0IGNoYXIqIC8qIHNlbmRl
ciAqLywgY29uc3QgY2hhciogb2JqZWN0UGF0aCwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogbWV0aG9kTmFtZSwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9k
SW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBhdXRvIGNvbW1hbmQgPSBnZXRDb21tYW5kKG1ldGhvZE5h
bWUpOworICAgIGlmICghY29tbWFuZCkgeworICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRp
b25fcmV0dXJuX2Vycm9yKGludm9jYXRpb24sIEdfREJVU19FUlJPUiwgR19EQlVTX0VSUk9SX0ZB
SUxFRCwgIiVzLiVzLiVzIGlzIG5vdCBhdmFpbGFibGUgbm93Iiwgb2JqZWN0UGF0aCwgaW50ZXJm
YWNlTmFtZSwgbWV0aG9kTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXV0byYg
c2Vzc2lvbiA9ICpyZWludGVycHJldF9jYXN0PE1lZGlhU2Vzc2lvbkdMaWIqPih1c2VyRGF0YSk7
CisgICAgYXV0byYgbWFuYWdlciA9IHNlc3Npb24ubWFuYWdlcigpOworICAgIFBsYXRmb3JtTWVk
aWFTZXNzaW9uOjpSZW1vdGVDb21tYW5kQXJndW1lbnQgYXJndW1lbnQ7CisgICAgaWYgKCpjb21t
YW5kID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpTZWVrVG9QbGF5YmFja1Bvc2l0aW9uQ29tbWFu
ZCkgeworICAgICAgICBpbnQ2NF90IG9mZnNldDsKKyAgICAgICAgZ192YXJpYW50X2dldChwYXJh
bWV0ZXJzLCAiKHgpIiwgJm9mZnNldCk7CisgICAgICAgIGFyZ3VtZW50LnRpbWUgPSBvZmZzZXQg
LyAxMDAwMDAwOworICAgIH0KKyAgICBtYW5hZ2VyLmRpc3BhdGNoKCpjb21tYW5kLCBhcmd1bWVu
dCk7CisgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9u
LCBudWxscHRyKTsKK30KKworZW51bSBjbGFzcyBNcHJpc1Byb3BlcnR5IDogdWludDhfdCB7Cisg
ICAgTm9Qcm9wZXJ0eSwKKyAgICBDYW5Db250cm9sLAorICAgIENhbkdvTmV4dCwKKyAgICBDYW5H
b1ByZXZpb3VzLAorICAgIENhblBhdXNlLAorICAgIENhblBsYXksCisgICAgQ2FuUXVpdCwKKyAg
ICBDYW5SYWlzZSwKKyAgICBDYW5TZWVrLAorICAgIERlc2t0b3BFbnRyeSwKKyAgICBHZXRNZXRh
ZGF0YSwKKyAgICBHZXRQbGF5YmFja1N0YXR1cywKKyAgICBHZXRQb3NpdGlvbiwKKyAgICBIYXNU
cmFja0xpc3QsCisgICAgSWRlbnRpdHksCisgICAgU3VwcG9ydGVkTWltZVR5cGVzLAorICAgIFN1
cHBvcnRlZFVyaVNjaGVtZXMsCit9OworCitzdGF0aWMgc3RkOjpvcHRpb25hbDxNcHJpc1Byb3Bl
cnR5PiBnZXRNcHJpc1Byb3BlcnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSkKK3sKKyAgICBz
dGF0aWMgY29uc3RleHByIHN0ZDo6cGFpcjxDb21wYXJhYmxlQVNDSUlMaXRlcmFsLCBNcHJpc1By
b3BlcnR5PiBwcm9wZXJ0aWVzTGlzdFtdIHsKKyAgICAgICAgeyAiQ2FuQ29udHJvbCIsIE1wcmlz
UHJvcGVydHk6OkNhbkNvbnRyb2wgfSwKKyAgICAgICAgeyAiQ2FuR29OZXh0IiwgTXByaXNQcm9w
ZXJ0eTo6Q2FuR29OZXh0IH0sCisgICAgICAgIHsgIkNhbkdvUHJldmlvdXMiLCBNcHJpc1Byb3Bl
cnR5OjpDYW5Hb1ByZXZpb3VzIH0sCisgICAgICAgIHsgIkNhblBhdXNlIiwgTXByaXNQcm9wZXJ0
eTo6Q2FuUGF1c2UgfSwKKyAgICAgICAgeyAiQ2FuUGxheSIsIE1wcmlzUHJvcGVydHk6OkNhblBs
YXkgfSwKKyAgICAgICAgeyAiQ2FuUXVpdCIsIE1wcmlzUHJvcGVydHk6OkNhblF1aXQgfSwKKyAg
ICAgICAgeyAiQ2FuUmFpc2UiLCBNcHJpc1Byb3BlcnR5OjpDYW5SYWlzZSB9LAorICAgICAgICB7
ICJDYW5TZWVrIiwgTXByaXNQcm9wZXJ0eTo6Q2FuU2VlayB9LAorICAgICAgICB7ICJEZXNrdG9w
RW50cnkiLCBNcHJpc1Byb3BlcnR5OjpEZXNrdG9wRW50cnkgfSwKKyAgICAgICAgeyAiSGFzVHJh
Y2tMaXN0IiwgTXByaXNQcm9wZXJ0eTo6SGFzVHJhY2tMaXN0IH0sCisgICAgICAgIHsgIklkZW50
aXR5IiwgTXByaXNQcm9wZXJ0eTo6SWRlbnRpdHkgfSwKKyAgICAgICAgeyAiTWV0YWRhdGEiLCBN
cHJpc1Byb3BlcnR5OjpHZXRNZXRhZGF0YSB9LAorICAgICAgICB7ICJQbGF5YmFja1N0YXR1cyIs
IE1wcmlzUHJvcGVydHk6OkdldFBsYXliYWNrU3RhdHVzIH0sCisgICAgICAgIHsgIlBvc2l0aW9u
IiwgTXByaXNQcm9wZXJ0eTo6R2V0UG9zaXRpb24gfSwKKyAgICAgICAgeyAiU3VwcG9ydGVkTWlt
ZVR5cGVzIiwgTXByaXNQcm9wZXJ0eTo6U3VwcG9ydGVkTWltZVR5cGVzIH0sCisgICAgICAgIHsg
IlN1cHBvcnRlZFVyaVNjaGVtZXMiLCBNcHJpc1Byb3BlcnR5OjpTdXBwb3J0ZWRVcmlTY2hlbWVz
IH0KKyAgICB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgU29ydGVkQXJyYXlNYXAgbWFwIHsgcHJv
cGVydGllc0xpc3QgfTsKKyAgICBhdXRvIHZhbHVlID0gbWFwLmdldChwcm9wZXJ0eU5hbWUsIE1w
cmlzUHJvcGVydHk6Ok5vUHJvcGVydHkpOworICAgIGlmICh2YWx1ZSA9PSBNcHJpc1Byb3BlcnR5
OjpOb1Byb3BlcnR5KQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiB2YWx1ZTsKK30K
Kworc3RhdGljIEdWYXJpYW50KiBoYW5kbGVHZXRQcm9wZXJ0eShHREJ1c0Nvbm5lY3Rpb24qLCBj
b25zdCBjaGFyKiAvKiBzZW5kZXIgKi8sIGNvbnN0IGNoYXIqIG9iamVjdFBhdGgsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgR0Vycm9yKiogZXJy
b3IsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgYXV0byBwcm9wZXJ0eSA9IGdldE1wcmlzUHJvcGVydHkocHJvcGVydHlOYW1lKTsKKyAgICBp
ZiAoIXByb3BlcnR5KSB7CisgICAgICAgIGdfc2V0X2Vycm9yKGVycm9yLCBHX0RCVVNfRVJST1Is
IEdfREJVU19FUlJPUl9OT1RfU1VQUE9SVEVELCAiJXMuJXMgJXMgaXMgbm90IHN1cHBvcnRlZCIs
IG9iamVjdFBhdGgsIGludGVyZmFjZU5hbWUsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIGF1dG8mIHNlc3Npb24gPSAqcmVpbnRlcnByZXRfY2Fz
dDxNZWRpYVNlc3Npb25HTGliKj4odXNlckRhdGEpOworICAgIHN3aXRjaCAocHJvcGVydHkudmFs
dWUoKSkgeworICAgIGNhc2UgTXByaXNQcm9wZXJ0eTo6Tm9Qcm9wZXJ0eToKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBNcHJpc1Byb3BlcnR5OjpTdXBwb3J0ZWRVcmlTY2hlbWVzOgorICAgIGNh
c2UgTXByaXNQcm9wZXJ0eTo6U3VwcG9ydGVkTWltZVR5cGVzOgorICAgICAgICByZXR1cm4gZ192
YXJpYW50X25ld19zdHJ2KG51bGxwdHIsIDApOworICAgIGNhc2UgTXByaXNQcm9wZXJ0eTo6R2V0
UGxheWJhY2tTdGF0dXM6CisgICAgICAgIHJldHVybiBzZXNzaW9uLmdldFBsYXliYWNrU3RhdHVz
QXNHVmFyaWFudCh7IH0pOworICAgIGNhc2UgTXByaXNQcm9wZXJ0eTo6R2V0TWV0YWRhdGE6Cisg
ICAgICAgIHJldHVybiBzZXNzaW9uLmdldE1ldGFkYXRhQXNHVmFyaWFudCh7IH0pOworICAgIGNh
c2UgTXByaXNQcm9wZXJ0eTo6R2V0UG9zaXRpb246CisgICAgICAgIHJldHVybiBzZXNzaW9uLmdl
dFBvc2l0aW9uQXNHVmFyaWFudCgpOworICAgIGNhc2UgTXByaXNQcm9wZXJ0eTo6SWRlbnRpdHk6
CisgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfbmV3X3N0cmluZyhnZXRBcHBsaWNhdGlvbk5hbWUo
KSk7CisgICAgY2FzZSBNcHJpc1Byb3BlcnR5OjpEZXNrdG9wRW50cnk6CisgICAgICAgIHJldHVy
biBnX3ZhcmlhbnRfbmV3X3N0cmluZygiIik7CisgICAgY2FzZSBNcHJpc1Byb3BlcnR5OjpDYW5T
ZWVrOgorICAgICAgICByZXR1cm4gc2Vzc2lvbi5jYW5TZWVrQXNHVmFyaWFudCgpOworICAgIGNh
c2UgTXByaXNQcm9wZXJ0eTo6SGFzVHJhY2tMaXN0OgorICAgIGNhc2UgTXByaXNQcm9wZXJ0eTo6
Q2FuUXVpdDoKKyAgICBjYXNlIE1wcmlzUHJvcGVydHk6OkNhblJhaXNlOgorICAgICAgICByZXR1
cm4gZ192YXJpYW50X25ld19ib29sZWFuKGZhbHNlKTsKKyAgICBjYXNlIE1wcmlzUHJvcGVydHk6
OkNhbkNvbnRyb2w6CisgICAgY2FzZSBNcHJpc1Byb3BlcnR5OjpDYW5Hb05leHQ6CisgICAgY2Fz
ZSBNcHJpc1Byb3BlcnR5OjpDYW5Hb1ByZXZpb3VzOgorICAgIGNhc2UgTXByaXNQcm9wZXJ0eTo6
Q2FuUGxheToKKyAgICBjYXNlIE1wcmlzUHJvcGVydHk6OkNhblBhdXNlOgorICAgICAgICByZXR1
cm4gZ192YXJpYW50X25ld19ib29sZWFuKHRydWUpOworICAgIH0KKworICAgIHJldHVybiBudWxs
cHRyOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gaGFuZGxlU2V0UHJvcGVydHkoR0RCdXNDb25uZWN0
aW9uKiwgY29uc3QgY2hhciogLyogc2VuZGVyICovLCBjb25zdCBjaGFyKiAvKiBvYmplY3RQYXRo
ICovLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUs
IEdWYXJpYW50KiwgR0Vycm9yKiogZXJyb3IsIGdwb2ludGVyKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgZ19zZXRfZXJyb3IoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJS
T1JfRkFJTEVELCAiJXM6JXMgc2V0dGluZyBpcyBub3Qgc3VwcG9ydGVkIiwgaW50ZXJmYWNlTmFt
ZSwgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBjb25zdCBH
REJ1c0ludGVyZmFjZVZUYWJsZSBnSW50ZXJmYWNlVlRhYmxlID0geworICAgIGhhbmRsZU1ldGhv
ZENhbGwsIGhhbmRsZUdldFByb3BlcnR5LCBoYW5kbGVTZXRQcm9wZXJ0eSwgeyBudWxscHRyIH0K
K307CisKK3N0ZDo6dW5pcXVlX3B0cjxNZWRpYVNlc3Npb25HTGliPiBNZWRpYVNlc3Npb25HTGli
OjpjcmVhdGUoTWVkaWFTZXNzaW9uTWFuYWdlckdMaWImIG1hbmFnZXIsIE1lZGlhU2Vzc2lvbklk
ZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7
CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBhZGRyZXNzKGdfZGJ1c19hZGRyZXNzX2dldF9mb3JfYnVz
X3N5bmMoR19CVVNfVFlQRV9TRVNTSU9OLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAg
ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgZ193YXJuaW5nKCJVbmFibGUgdG8gZ2V0IHNlc3Npb24g
RC1CdXMgYWRkcmVzczogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKyAgICBhdXRvIGNvbm5lY3Rpb24gPSBhZG9wdEdSZWYocmVpbnRlcnByZXRf
Y2FzdDxHREJ1c0Nvbm5lY3Rpb24qPihnX29iamVjdF9uZXcoR19UWVBFX0RCVVNfQ09OTkVDVElP
TiwKKyAgICAgICAgImFkZHJlc3MiLCBhZGRyZXNzLmdldCgpLAorICAgICAgICAiZmxhZ3MiLCBH
X0RCVVNfQ09OTkVDVElPTl9GTEFHU19BVVRIRU5USUNBVElPTl9DTElFTlQgfCBHX0RCVVNfQ09O
TkVDVElPTl9GTEFHU19NRVNTQUdFX0JVU19DT05ORUNUSU9OLAorICAgICAgICAiZXhpdC1vbi1j
bG9zZSIsIFRSVUUsIG51bGxwdHIpKSk7CisgICAgZ19pbml0YWJsZV9pbml0KEdfSU5JVEFCTEUo
Y29ubmVjdGlvbi5nZXQoKSksIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgaWYgKGVy
cm9yKSB7CisgICAgICAgIGdfd2FybmluZygiVW5hYmxlIHRvIGNvbm5lY3QgdG8gRC1CdXMgc2Vz
c2lvbiBidXM6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8TWVkaWFTZXNzaW9uR0xpYj4obWFuYWdlciwg
V1RGTW92ZShjb25uZWN0aW9uKSwgaWRlbnRpZmllcik7Cit9CisKK01lZGlhU2Vzc2lvbkdMaWI6
Ok1lZGlhU2Vzc2lvbkdMaWIoTWVkaWFTZXNzaW9uTWFuYWdlckdMaWImIG1hbmFnZXIsIEdSZWZQ
dHI8R0RCdXNDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24sIE1lZGlhU2Vzc2lvbklkZW50aWZpZXIg
aWRlbnRpZmllcikKKyAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgICwgbV9tYW5h
Z2VyKG1hbmFnZXIpCisgICAgLCBtX2Nvbm5lY3Rpb24oV1RGTW92ZShjb25uZWN0aW9uKSkKK3sK
KyAgICBjb25zdCBhdXRvJiBtcHJpc0ludGVyZmFjZSA9IG1fbWFuYWdlci5tcHJpc0ludGVyZmFj
ZSgpOworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBtX3Jvb3RSZWdpc3Ry
YXRpb25JZCA9IGdfZGJ1c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdChtX2Nvbm5lY3Rpb24u
Z2V0KCksIERCVVNfTVBSSVNfT0JKRUNUX1BBVEgsIG1wcmlzSW50ZXJmYWNlLT5pbnRlcmZhY2Vz
WzBdLAorICAgICAgICAmZ0ludGVyZmFjZVZUYWJsZSwgdGhpcywgbnVsbHB0ciwgJmVycm9yLm91
dFB0cigpKTsKKworICAgIGlmICghbV9yb290UmVnaXN0cmF0aW9uSWQpIHsKKyAgICAgICAgZ193
YXJuaW5nKCJGYWlsZWQgdG8gcmVnaXN0ZXIgTVBSSVMgRC1CdXMgb2JqZWN0OiAlcyIsIGVycm9y
LT5tZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcGxheWVyUmVnaXN0
cmF0aW9uSWQgPSBnX2RidXNfY29ubmVjdGlvbl9yZWdpc3Rlcl9vYmplY3QobV9jb25uZWN0aW9u
LmdldCgpLCBEQlVTX01QUklTX09CSkVDVF9QQVRILCBtcHJpc0ludGVyZmFjZS0+aW50ZXJmYWNl
c1sxXSwKKyAgICAgICAgJmdJbnRlcmZhY2VWVGFibGUsIHRoaXMsIG51bGxwdHIsICZlcnJvci5v
dXRQdHIoKSk7CisKKyAgICBpZiAoIW1fcGxheWVyUmVnaXN0cmF0aW9uSWQpIHsKKyAgICAgICAg
Z193YXJuaW5nKCJGYWlsZWQgYXQgTVBSSVMgb2JqZWN0IHJlZ2lzdHJhdGlvbjogJXMiLCBlcnJv
ci0+bWVzc2FnZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBhdXRvJiBh
cHBsaWNhdGlvbklEID0gZ2V0QXBwbGljYXRpb25JRCgpOworICAgIG1faW5zdGFuY2VJZCA9IGFw
cGxpY2F0aW9uSUQuaXNFbXB0eSgpID8gbWFrZVN0cmluZygib3JnLm1wcmlzLk1lZGlhUGxheWVy
Mi53ZWJraXQuaW5zdGFuY2UiLCBnZXRwaWQoKSwgIi0iLCBpZGVudGlmaWVyLnRvVUludDY0KCkp
IDogbWFrZVN0cmluZygib3JnLm1wcmlzLk1lZGlhUGxheWVyMi4iLCBhcHBsaWNhdGlvbklELmFz
Y2lpKCkuZGF0YSgpLCAiLSIsIGlkZW50aWZpZXIudG9VSW50NjQoKSk7CisKKyAgICBtX293bmVy
SWQgPSBnX2J1c19vd25fbmFtZV9vbl9jb25uZWN0aW9uKG1fY29ubmVjdGlvbi5nZXQoKSwgbV9p
bnN0YW5jZUlkLmFzY2lpKCkuZGF0YSgpLCBHX0JVU19OQU1FX09XTkVSX0ZMQUdTX05PTkUsIG51
bGxwdHIsCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0J1c05hbWVMb3N0Q2FsbGJhY2s+KCtb
XShHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqLCBncG9pbnRlciB1c2Vy
RGF0YSkgeworICAgICAgICAgICAgYXV0byYgc2Vzc2lvbiA9ICpyZWludGVycHJldF9jYXN0PE1l
ZGlhU2Vzc2lvbkdMaWIqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBzZXNzaW9uLm5hbWVMb3N0
KGNvbm5lY3Rpb24pOworICAgICAgICB9KSwgdGhpcywgbnVsbHB0cik7Cit9CisKK01lZGlhU2Vz
c2lvbkdMaWI6On5NZWRpYVNlc3Npb25HTGliKCkKK3sKKyAgICBpZiAobV9vd25lcklkKQorICAg
ICAgICBnX2J1c191bm93bl9uYW1lKG1fb3duZXJJZCk7Cit9CisKK3ZvaWQgTWVkaWFTZXNzaW9u
R0xpYjo6bmFtZUxvc3QoR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uKQoreworICAgIGlmIChV
TkxJS0VMWSghbV9jb25uZWN0aW9uKSkgeworICAgICAgICBnX3dhcm5pbmcoIlVuYWJsZSB0byBh
Y3F1aXJlIE1QUklTIEQtQnVzIHNlc3Npb24gb3duZXJzaGlwIGZvciBuYW1lICVzIiwgbV9pbnN0
YW5jZUlkLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
Y29ubmVjdGlvbiA9IG51bGxwdHI7CisgICAgaWYgKCFtX3Jvb3RSZWdpc3RyYXRpb25JZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGdfZGJ1c19jb25uZWN0aW9uX3VucmVnaXN0ZXJfb2Jq
ZWN0KGNvbm5lY3Rpb24sIG1fcm9vdFJlZ2lzdHJhdGlvbklkKSkKKyAgICAgICAgbV9yb290UmVn
aXN0cmF0aW9uSWQgPSAwOworICAgIGVsc2UKKyAgICAgICAgZ193YXJuaW5nKCJVbmFibGUgdG8g
dW5yZWdpc3RlciBNUFJJUyBELUJ1cyBvYmplY3QuIik7CisKKyAgICBpZiAoIW1fcGxheWVyUmVn
aXN0cmF0aW9uSWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChnX2RidXNfY29ubmVjdGlv
bl91bnJlZ2lzdGVyX29iamVjdChjb25uZWN0aW9uLCBtX3BsYXllclJlZ2lzdHJhdGlvbklkKSkK
KyAgICAgICAgbV9wbGF5ZXJSZWdpc3RyYXRpb25JZCA9IDA7CisgICAgZWxzZQorICAgICAgICBn
X3dhcm5pbmcoIlVuYWJsZSB0byB1bnJlZ2lzdGVyIE1QUklTIEQtQnVzIHBsYXllciBvYmplY3Qu
Iik7Cit9CisKK3ZvaWQgTWVkaWFTZXNzaW9uR0xpYjo6ZW1pdFBvc2l0aW9uQ2hhbmdlZChkb3Vi
bGUgdGltZSkKK3sKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgaW50NjRf
dCBwb3NpdGlvbiA9IHRpbWUgKiAxMDAwMDAwOworICAgIGlmICghZ19kYnVzX2Nvbm5lY3Rpb25f
ZW1pdF9zaWduYWwobV9jb25uZWN0aW9uLmdldCgpLCBudWxscHRyLCBEQlVTX01QUklTX09CSkVD
VF9QQVRILCBEQlVTX01QUklTX1BMQVlFUl9JTlRFUkZBQ0UsICJTZWVrZWQiLCBnX3ZhcmlhbnRf
bmV3KCIoeCkiLCBwb3NpdGlvbiksICZlcnJvci5vdXRQdHIoKSkpCisgICAgICAgIGdfd2Fybmlu
ZygiRmFpbGVkIHRvIGVtaXQgTVBSSVMgU2Vla2VkIHNpZ25hbDogJXMiLCBlcnJvci0+bWVzc2Fn
ZSk7Cit9CisKK3ZvaWQgTWVkaWFTZXNzaW9uR0xpYjo6dXBkYXRlTm93UGxheWluZyhOb3dQbGF5
aW5nSW5mbyYgbm93UGxheWluZ0luZm8pCit7CisgICAgR1ZhcmlhbnRCdWlsZGVyIHByb3BlcnRp
ZXNCdWlsZGVyOworICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJnByb3BlcnRpZXNCdWlsZGVy
LCBHX1ZBUklBTlRfVFlQRSgiYXtzdn0iKSk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZw
cm9wZXJ0aWVzQnVpbGRlciwgIntzdn0iLCAiTWV0YWRhdGEiLCBnZXRNZXRhZGF0YUFzR1Zhcmlh
bnQobm93UGxheWluZ0luZm8pKTsKKyAgICBlbWl0UHJvcGVydGllc0NoYW5nZWQoZ192YXJpYW50
X25ldygiKHNhe3N2fWFzKSIsIERCVVNfTVBSSVNfUExBWUVSX0lOVEVSRkFDRSwgJnByb3BlcnRp
ZXNCdWlsZGVyLCBudWxscHRyKSk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfY2xlYXIoJnByb3Bl
cnRpZXNCdWlsZGVyKTsKK30KKworR1ZhcmlhbnQqIE1lZGlhU2Vzc2lvbkdMaWI6OmdldE1ldGFk
YXRhQXNHVmFyaWFudChzdGQ6Om9wdGlvbmFsPE5vd1BsYXlpbmdJbmZvPiBpbmZvKQoreworICAg
IGlmICghaW5mbykKKyAgICAgICAgaW5mbyA9IG5vd1BsYXlpbmdJbmZvKCk7CisKKyAgICBHVmFy
aWFudEJ1aWxkZXIgYnVpbGRlcjsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVy
LCBHX1ZBUklBTlRfVFlQRSgiYXtzdn0iKSk7CisKKyAgICBpZiAoIWluZm8pCisgICAgICAgIHJl
dHVybiBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpOworCisgICAgZ192YXJpYW50X2J1
aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJtcHJpczp0cmFja2lkIiwgZ192YXJpYW50X25l
dygibyIsIERCVVNfTVBSSVNfVFJBQ0tfUEFUSCkpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2Fk
ZCgmYnVpbGRlciwgIntzdn0iLCAibXByaXM6bGVuZ3RoIiwgZ192YXJpYW50X25ld19pbnQ2NChp
bmZvLT5kdXJhdGlvbiAqIDEwMDAwMDApKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1
aWxkZXIsICJ7c3Z9IiwgInhlc2FtOnRpdGxlIiwgZ192YXJpYW50X25ld19zdHJpbmcoaW5mby0+
dGl0bGUudXRmOCgpLmRhdGEoKSkpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRl
ciwgIntzdn0iLCAieGVzYW06YWxidW0iLCBnX3ZhcmlhbnRfbmV3X3N0cmluZyhpbmZvLT5hbGJ1
bS51dGY4KCkuZGF0YSgpKSk7CisgICAgaWYgKGluZm8tPmFydHdvcmspCisgICAgICAgIGdfdmFy
aWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAibXByaXM6YXJ0VXJsIiwgZ192YXJp
YW50X25ld19zdHJpbmcoaW5mby0+YXJ0d29yay0+c3JjLnV0ZjgoKS5kYXRhKCkpKTsKKworICAg
IEdWYXJpYW50QnVpbGRlciBhcnRpc3RCdWlsZGVyOworICAgIGdfdmFyaWFudF9idWlsZGVyX2lu
aXQoJmFydGlzdEJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFKCJhcyIpKTsKKyAgICBnX3ZhcmlhbnRf
YnVpbGRlcl9hZGQoJmFydGlzdEJ1aWxkZXIsICJzIiwgaW5mby0+YXJ0aXN0LnV0ZjgoKS5kYXRh
KCkpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAieGVzYW06
YXJ0aXN0IiwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZhcnRpc3RCdWlsZGVyKSk7CisKKyAgICBy
ZXR1cm4gZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKTsKK30KKworR1ZhcmlhbnQqIE1l
ZGlhU2Vzc2lvbkdMaWI6OmdldFBsYXliYWNrU3RhdHVzQXNHVmFyaWFudChzdGQ6Om9wdGlvbmFs
PGNvbnN0IFBsYXRmb3JtTWVkaWFTZXNzaW9uKj4gc2Vzc2lvbikKK3sKKyAgICBhdXRvIHN0YXRl
ID0gW3RoaXMsIHNlc3Npb24gPSBXVEZNb3ZlKHNlc3Npb24pXSgpIC0+IFBsYXRmb3JtTWVkaWFT
ZXNzaW9uOjpTdGF0ZSB7CisgICAgICAgIGlmIChzZXNzaW9uKQorICAgICAgICAgICAgcmV0dXJu
IHNlc3Npb24udmFsdWUoKS0+c3RhdGUoKTsKKworICAgICAgICBhdXRvKiBub3dQbGF5aW5nU2Vz
c2lvbiA9IG1fbWFuYWdlci5ub3dQbGF5aW5nRWxpZ2libGVTZXNzaW9uKCk7CisgICAgICAgIGlm
IChub3dQbGF5aW5nU2Vzc2lvbikKKyAgICAgICAgICAgIHJldHVybiBub3dQbGF5aW5nU2Vzc2lv
bi0+c3RhdGUoKTsKKworICAgICAgICByZXR1cm4gUGxhdGZvcm1NZWRpYVNlc3Npb246OlN0YXRl
OjpJZGxlOworICAgIH0oKTsKKworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIFBsYXRm
b3JtTWVkaWFTZXNzaW9uOjpTdGF0ZTo6QXV0b3BsYXlpbmc6CisgICAgY2FzZSBQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbjo6U3RhdGU6OlBsYXlpbmc6CisgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfbmV3
X3N0cmluZygiUGxheWluZyIpOworICAgIGNhc2UgUGxhdGZvcm1NZWRpYVNlc3Npb246OlN0YXRl
OjpQYXVzZWQ6CisgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfbmV3X3N0cmluZygiUGF1c2VkIik7
CisgICAgY2FzZSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6U3RhdGU6OklkbGU6CisgICAgY2FzZSBQ
bGF0Zm9ybU1lZGlhU2Vzc2lvbjo6U3RhdGU6OkludGVycnVwdGVkOgorICAgICAgICByZXR1cm4g
Z192YXJpYW50X25ld19zdHJpbmcoIlN0b3BwZWQiKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgTWVkaWFTZXNzaW9uR0xp
Yjo6ZW1pdFByb3BlcnRpZXNDaGFuZ2VkKEdWYXJpYW50KiBwYXJhbWV0ZXJzKQoreworICAgIGlm
ICghbV9jb25uZWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBHVW5pcXVlT3V0UHRyPEdF
cnJvcj4gZXJyb3I7CisgICAgaWYgKCFnX2RidXNfY29ubmVjdGlvbl9lbWl0X3NpZ25hbChtX2Nv
bm5lY3Rpb24uZ2V0KCksIG51bGxwdHIsIERCVVNfTVBSSVNfT0JKRUNUX1BBVEgsICJvcmcuZnJl
ZWRlc2t0b3AuREJ1cy5Qcm9wZXJ0aWVzIiwgIlByb3BlcnRpZXNDaGFuZ2VkIiwgcGFyYW1ldGVy
cywgJmVycm9yLm91dFB0cigpKSkKKyAgICAgICAgZ193YXJuaW5nKCJGYWlsZWQgdG8gZW1pdCBN
UFJJUyBwcm9wZXJ0aWVzIGNoYW5nZWQ6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworfQorCit2b2lk
IE1lZGlhU2Vzc2lvbkdMaWI6OnBsYXliYWNrU3RhdHVzQ2hhbmdlZChQbGF0Zm9ybU1lZGlhU2Vz
c2lvbiYgcGxhdGZvcm1TZXNzaW9uKQoreworICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyOwor
ICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFKCJhe3N2
fSIpKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgIlBsYXli
YWNrU3RhdHVzIiwgZ2V0UGxheWJhY2tTdGF0dXNBc0dWYXJpYW50KCZwbGF0Zm9ybVNlc3Npb24p
KTsKKyAgICBlbWl0UHJvcGVydGllc0NoYW5nZWQoZ192YXJpYW50X25ldygiKHNhe3N2fWFzKSIs
IERCVVNfTVBSSVNfUExBWUVSX0lOVEVSRkFDRSwgJmJ1aWxkZXIsIG51bGxwdHIpKTsKKyAgICBn
X3ZhcmlhbnRfYnVpbGRlcl9jbGVhcigmYnVpbGRlcik7Cit9CisKK3N0ZDo6b3B0aW9uYWw8Tm93
UGxheWluZ0luZm8+IE1lZGlhU2Vzc2lvbkdMaWI6Om5vd1BsYXlpbmdJbmZvKCkKK3sKKyAgICBz
dGQ6Om9wdGlvbmFsPE5vd1BsYXlpbmdJbmZvPiBub3dQbGF5aW5nSW5mbzsKKyAgICBtX21hbmFn
ZXIuZm9yRWFjaE1hdGNoaW5nU2Vzc2lvbihbJl0oYXV0byYgc2Vzc2lvbikgeworICAgICAgICBy
ZXR1cm4gc2Vzc2lvbi5tZWRpYVNlc3Npb25JZGVudGlmaWVyKCkgPT0gbV9pZGVudGlmaWVyOwor
ICAgIH0sIFsmXShhdXRvJiBzZXNzaW9uKSB7CisgICAgICAgIG5vd1BsYXlpbmdJbmZvID0gc2Vz
c2lvbi5ub3dQbGF5aW5nSW5mbygpOworICAgIH0pOworICAgIHJldHVybiBub3dQbGF5aW5nSW5m
bzsKK30KKworR1ZhcmlhbnQqIE1lZGlhU2Vzc2lvbkdMaWI6OmdldFBvc2l0aW9uQXNHVmFyaWFu
dCgpCit7CisgICAgYXV0byBpbmZvID0gbm93UGxheWluZ0luZm8oKTsKKyAgICByZXR1cm4gZ192
YXJpYW50X25ld19pbnQ2NChpbmZvID8gaW5mby0+Y3VycmVudFRpbWUgKiAxMDAwMDAwIDogMCk7
Cit9CisKK0dWYXJpYW50KiBNZWRpYVNlc3Npb25HTGliOjpjYW5TZWVrQXNHVmFyaWFudCgpCit7
CisgICAgYm9vbCBjYW5TZWVrID0gZmFsc2U7CisgICAgbV9tYW5hZ2VyLmZvckVhY2hNYXRjaGlu
Z1Nlc3Npb24oWyZdKGF1dG8mIHNlc3Npb24pIHsKKyAgICAgICAgcmV0dXJuIHNlc3Npb24ubWVk
aWFTZXNzaW9uSWRlbnRpZmllcigpID09IG1faWRlbnRpZmllcjsKKyAgICB9LCBbJl0oYXV0byYg
c2Vzc2lvbikgeworICAgICAgICBjYW5TZWVrID0gc2Vzc2lvbi5zdXBwb3J0c1NlZWtpbmcoKTsK
KyAgICB9KTsKKworICAgIHJldHVybiBnX3ZhcmlhbnRfbmV3X2Jvb2xlYW4oY2FuU2Vlayk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHTElCKSAmJiBFTkFC
TEUoTUVESUFfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2dsaWIvTWVkaWFTZXNzaW9uR0xpYi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vZ2xpYi9NZWRpYVNlc3Npb25HTGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjdiNGZlZmNlYWE0NGE4ODcz
ODlhYjdiZDVmM2FiOGQ2YWVhY2FlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2dsaWIvTWVkaWFTZXNzaW9uR0xpYi5oCkBAIC0wLDAgKzEsNjcgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdMSUIpICYmIEVOQUJMRShN
RURJQV9TRVNTSU9OKQorCisjaW5jbHVkZSAiTWVkaWFTZXNzaW9uSWRlbnRpZmllci5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtTWVkaWFTZXNzaW9uLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhU2Vzc2lvbk1hbmFnZXJH
TGliOworCitjbGFzcyBNZWRpYVNlc3Npb25HTGliIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFTZXNzaW9u
R0xpYj4gY3JlYXRlKE1lZGlhU2Vzc2lvbk1hbmFnZXJHTGliJiwgTWVkaWFTZXNzaW9uSWRlbnRp
Zmllcik7CisKKyAgICBleHBsaWNpdCBNZWRpYVNlc3Npb25HTGliKE1lZGlhU2Vzc2lvbk1hbmFn
ZXJHTGliJiwgR1JlZlB0cjxHREJ1c0Nvbm5lY3Rpb24+JiYsIE1lZGlhU2Vzc2lvbklkZW50aWZp
ZXIpOworICAgIH5NZWRpYVNlc3Npb25HTGliKCk7CisKKyAgICBNZWRpYVNlc3Npb25NYW5hZ2Vy
R0xpYiYgbWFuYWdlcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFuYWdlcjsgfQorCisgICAgR1Zhcmlh
bnQqIGdldFBsYXliYWNrU3RhdHVzQXNHVmFyaWFudChzdGQ6Om9wdGlvbmFsPGNvbnN0IFBsYXRm
b3JtTWVkaWFTZXNzaW9uKj4pOworICAgIEdWYXJpYW50KiBnZXRNZXRhZGF0YUFzR1ZhcmlhbnQo
c3RkOjpvcHRpb25hbDxOb3dQbGF5aW5nSW5mbz4pOworICAgIEdWYXJpYW50KiBnZXRQb3NpdGlv
bkFzR1ZhcmlhbnQoKTsKKyAgICBHVmFyaWFudCogY2FuU2Vla0FzR1ZhcmlhbnQoKTsKKworICAg
IHZvaWQgbmFtZUxvc3QoR0RCdXNDb25uZWN0aW9uKik7CisgICAgdm9pZCBlbWl0UG9zaXRpb25D
aGFuZ2VkKGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIHVwZGF0ZU5vd1BsYXlpbmcoTm93UGxheWlu
Z0luZm8mKTsKKyAgICB2b2lkIHBsYXliYWNrU3RhdHVzQ2hhbmdlZChQbGF0Zm9ybU1lZGlhU2Vz
c2lvbiYpOworCitwcml2YXRlOgorICAgIHZvaWQgZW1pdFByb3BlcnRpZXNDaGFuZ2VkKEdWYXJp
YW50Kik7CisgICAgc3RkOjpvcHRpb25hbDxOb3dQbGF5aW5nSW5mbz4gbm93UGxheWluZ0luZm8o
KTsKKworICAgIE1lZGlhU2Vzc2lvbklkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIE1lZGlh
U2Vzc2lvbk1hbmFnZXJHTGliJiBtX21hbmFnZXI7CisgICAgR1JlZlB0cjxHREJ1c0Nvbm5lY3Rp
b24+IG1fY29ubmVjdGlvbjsKKyAgICBTdHJpbmcgbV9pbnN0YW5jZUlkOworICAgIHVuc2lnbmVk
IG1fb3duZXJJZCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX3Jvb3RSZWdpc3RyYXRpb25JZCB7IDAg
fTsKKyAgICB1bnNpZ25lZCBtX3BsYXllclJlZ2lzdHJhdGlvbklkIHsgMCB9OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdMSUIpICYmIEVOQUJMRShNRURJ
QV9TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ2xp
Yi9NZWRpYVNlc3Npb25NYW5hZ2VyR0xpYi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9nbGliL01lZGlhU2Vzc2lvbk1hbmFnZXJHTGliLmNwcAppbmRleCBjNzJlZTFhMWRlODJk
YjRhYzFmOWUwYzU2ZTU4YjZlNDE2ZDdhNmNhLi41NWZhOTg1NzZiNTc2NjFlYjFmZDA4MWM5ODAw
NmQ3YTMzMTZlZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9n
bGliL01lZGlhU2Vzc2lvbk1hbmFnZXJHTGliLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9nbGliL01lZGlhU2Vzc2lvbk1hbmFnZXJHTGliLmNwcApAQCAtMjEsNyArMjEs
NiBAQAogCiAjaWYgVVNFKEdMSUIpICYmIEVOQUJMRShNRURJQV9TRVNTSU9OKQogCi0jaW5jbHVk
ZSAiQXBwbGljYXRpb25HTGliLmgiCiAjaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCiAjaW5jbHVk
ZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCkBAIC0zMSw3
ICszMCw2IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAKICNpbmNsdWRlIDxn
aW8vZ2lvLmg+Ci0jaW5jbHVkZSA8d3RmL1NvcnRlZEFycmF5TWFwLmg+CiAKIC8vIGh0dHBzOi8v
c3BlY2lmaWNhdGlvbnMuZnJlZWRlc2t0b3Aub3JnL21wcmlzLXNwZWMvbGF0ZXN0Lwogc3RhdGlj
IGNvbnN0IGNoYXIgc19tcHJpc0ludGVyZmFjZVtdID0KQEAgLTExMCwyNDQgKzEwOCwyNiBAQCBz
dGF0aWMgY29uc3QgY2hhciBzX21wcmlzSW50ZXJmYWNlW10gPQogICAgICAgICAiPC9pbnRlcmZh
Y2U+IgogICAgICI8L25vZGU+IjsKIAotI2RlZmluZSBEQlVTX01QUklTX09CSkVDVF9QQVRIICIv
b3JnL21wcmlzL01lZGlhUGxheWVyMiIKLSNkZWZpbmUgREJVU19NUFJJU19QTEFZRVJfSU5URVJG
QUNFICJvcmcubXByaXMuTWVkaWFQbGF5ZXIyLlBsYXllciIKLSNkZWZpbmUgREJVU19NUFJJU19U
UkFDS19QQVRIICIvb3JnL21wcmlzL01lZGlhUGxheWVyMi93ZWJraXQiCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcj4g
UGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjpjcmVhdGUoKQogewotICAgIHJldHVybiBtYWtl
VW5pcXVlPE1lZGlhU2Vzc2lvbk1hbmFnZXJHTGliPigpOwotfQotCi1NZWRpYVNlc3Npb25NYW5h
Z2VyR0xpYjo6TWVkaWFTZXNzaW9uTWFuYWdlckdMaWIoKQotICAgIDogbV9ub3dQbGF5aW5nTWFu
YWdlcihwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bWVkaWFTdHJhdGVneSgpLmNyZWF0ZU5vd1BsYXlp
bmdNYW5hZ2VyKCkpCi17Ci19Ci0KLU1lZGlhU2Vzc2lvbk1hbmFnZXJHTGliOjp+TWVkaWFTZXNz
aW9uTWFuYWdlckdMaWIoKQotewotICAgIGlmIChtX293bmVySWQpCi0gICAgICAgIGdfYnVzX3Vu
b3duX25hbWUobV9vd25lcklkKTsKLX0KLQotc3RhdGljIHN0ZDo6b3B0aW9uYWw8UGxhdGZvcm1N
ZWRpYVNlc3Npb246OlJlbW90ZUNvbnRyb2xDb21tYW5kVHlwZT4gZ2V0Q29tbWFuZChjb25zdCBj
aGFyKiBuYW1lKQotewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnBhaXI8Q29tcGFyYWJsZUFTQ0lJ
TGl0ZXJhbCwgUGxhdGZvcm1NZWRpYVNlc3Npb246OlJlbW90ZUNvbnRyb2xDb21tYW5kVHlwZT4g
Y29tbWFuZExpc3RbXSA9IHsKLSAgICAgICAgeyAiTmV4dCIsIFBsYXRmb3JtTWVkaWFTZXNzaW9u
OjpOZXh0VHJhY2tDb21tYW5kIH0sCi0gICAgICAgIHsgIlBhdXNlIiwgUGxhdGZvcm1NZWRpYVNl
c3Npb246OlBhdXNlQ29tbWFuZCB9LAotICAgICAgICB7ICJQbGF5IiwgUGxhdGZvcm1NZWRpYVNl
c3Npb246OlBsYXlDb21tYW5kIH0sCi0gICAgICAgIHsgIlBsYXlQYXVzZSIsIFBsYXRmb3JtTWVk
aWFTZXNzaW9uOjpUb2dnbGVQbGF5UGF1c2VDb21tYW5kIH0sCi0gICAgICAgIHsgIlByZXZpb3Vz
IiwgUGxhdGZvcm1NZWRpYVNlc3Npb246OlByZXZpb3VzVHJhY2tDb21tYW5kIH0sCi0gICAgICAg
IHsgIlNlZWsiLCBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6U2Vla1RvUGxheWJhY2tQb3NpdGlvbkNv
bW1hbmQgfSwKLSAgICAgICAgeyAiU3RvcCIsIFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpTdG9wQ29t
bWFuZCB9Ci0gICAgfTsKLQotICAgIHN0YXRpYyBjb25zdCBTb3J0ZWRBcnJheU1hcCBtYXAgeyBj
b21tYW5kTGlzdCB9OwotICAgIGF1dG8gdmFsdWUgPSBtYXAuZ2V0KG5hbWUsIFBsYXRmb3JtTWVk
aWFTZXNzaW9uOjpSZW1vdGVDb250cm9sQ29tbWFuZFR5cGU6Ok5vQ29tbWFuZCk7Ci0gICAgaWYg
KHZhbHVlID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpSZW1vdGVDb250cm9sQ29tbWFuZFR5cGU6
Ok5vQ29tbWFuZCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0K
LXN0YXRpYyB2b2lkIGhhbmRsZU1ldGhvZENhbGwoR0RCdXNDb25uZWN0aW9uKiAvKiBjb25uZWN0
aW9uICovLCBjb25zdCBjaGFyKiAvKiBzZW5kZXIgKi8sIGNvbnN0IGNoYXIqIG9iamVjdFBhdGgs
IGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUsIEdWYXJp
YW50KiBwYXJhbWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRpb24sIGdwb2lu
dGVyIHVzZXJEYXRhKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgYXV0byBj
b21tYW5kID0gZ2V0Q29tbWFuZChtZXRob2ROYW1lKTsKLSAgICBpZiAoIWNvbW1hbmQpIHsKLSAg
ICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl9lcnJvcihpbnZvY2F0aW9uLCBH
X0RCVVNfRVJST1IsIEdfREJVU19FUlJPUl9GQUlMRUQsICIlcy4lcy4lcyBpcyBub3QgYXZhaWxh
YmxlIG5vdyIsIG9iamVjdFBhdGgsIGludGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGF1dG8mIG1hbmFnZXIgPSAqcmVpbnRlcnByZXRfY2FzdDxN
ZWRpYVNlc3Npb25NYW5hZ2VyR0xpYio+KHVzZXJEYXRhKTsKLSAgICBQbGF0Zm9ybU1lZGlhU2Vz
c2lvbjo6UmVtb3RlQ29tbWFuZEFyZ3VtZW50IGFyZ3VtZW50OwotICAgIGlmICgqY29tbWFuZCA9
PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6U2Vla1RvUGxheWJhY2tQb3NpdGlvbkNvbW1hbmQpIHsK
LSAgICAgICAgaW50NjRfdCBvZmZzZXQ7Ci0gICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVy
cywgIih4KSIsICZvZmZzZXQpOwotICAgICAgICBhcmd1bWVudC50aW1lID0gb2Zmc2V0IC8gMTAw
MDAwMDsKLSAgICB9Ci0gICAgbWFuYWdlci5kaXNwYXRjaCgqY29tbWFuZCwgYXJndW1lbnQpOwot
ICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgbnVs
bHB0cik7Ci19Ci0KLWVudW0gY2xhc3MgTXByaXNQcm9wZXJ0eSA6IHVpbnQ4X3QgewotICAgIE5v
UHJvcGVydHksCi0gICAgQ2FuQ29udHJvbCwKLSAgICBDYW5Hb05leHQsCi0gICAgQ2FuR29QcmV2
aW91cywKLSAgICBDYW5QYXVzZSwKLSAgICBDYW5QbGF5LAotICAgIENhblF1aXQsCi0gICAgQ2Fu
UmFpc2UsCi0gICAgQ2FuU2VlaywKLSAgICBEZXNrdG9wRW50cnksCi0gICAgR2V0TWV0YWRhdGEs
Ci0gICAgR2V0UGxheWJhY2tTdGF0dXMsCi0gICAgR2V0UG9zaXRpb24sCi0gICAgSGFzVHJhY2tM
aXN0LAotICAgIElkZW50aXR5LAotICAgIFN1cHBvcnRlZE1pbWVUeXBlcywKLSAgICBTdXBwb3J0
ZWRVcmlTY2hlbWVzLAotfTsKLQotc3RhdGljIHN0ZDo6b3B0aW9uYWw8TXByaXNQcm9wZXJ0eT4g
Z2V0TXByaXNQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBzdGQ6OnBhaXI8Q29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCwgTXByaXNQcm9wZXJ0
eT4gcHJvcGVydGllc0xpc3RbXSB7Ci0gICAgICAgIHsgIkNhbkNvbnRyb2wiLCBNcHJpc1Byb3Bl
cnR5OjpDYW5Db250cm9sIH0sCi0gICAgICAgIHsgIkNhbkdvTmV4dCIsIE1wcmlzUHJvcGVydHk6
OkNhbkdvTmV4dCB9LAotICAgICAgICB7ICJDYW5Hb1ByZXZpb3VzIiwgTXByaXNQcm9wZXJ0eTo6
Q2FuR29QcmV2aW91cyB9LAotICAgICAgICB7ICJDYW5QYXVzZSIsIE1wcmlzUHJvcGVydHk6OkNh
blBhdXNlIH0sCi0gICAgICAgIHsgIkNhblBsYXkiLCBNcHJpc1Byb3BlcnR5OjpDYW5QbGF5IH0s
Ci0gICAgICAgIHsgIkNhblF1aXQiLCBNcHJpc1Byb3BlcnR5OjpDYW5RdWl0IH0sCi0gICAgICAg
IHsgIkNhblJhaXNlIiwgTXByaXNQcm9wZXJ0eTo6Q2FuUmFpc2UgfSwKLSAgICAgICAgeyAiQ2Fu
U2VlayIsIE1wcmlzUHJvcGVydHk6OkNhblNlZWsgfSwKLSAgICAgICAgeyAiRGVza3RvcEVudHJ5
IiwgTXByaXNQcm9wZXJ0eTo6RGVza3RvcEVudHJ5IH0sCi0gICAgICAgIHsgIkhhc1RyYWNrTGlz
dCIsIE1wcmlzUHJvcGVydHk6Okhhc1RyYWNrTGlzdCB9LAotICAgICAgICB7ICJJZGVudGl0eSIs
IE1wcmlzUHJvcGVydHk6OklkZW50aXR5IH0sCi0gICAgICAgIHsgIk1ldGFkYXRhIiwgTXByaXNQ
cm9wZXJ0eTo6R2V0TWV0YWRhdGEgfSwKLSAgICAgICAgeyAiUGxheWJhY2tTdGF0dXMiLCBNcHJp
c1Byb3BlcnR5OjpHZXRQbGF5YmFja1N0YXR1cyB9LAotICAgICAgICB7ICJQb3NpdGlvbiIsIE1w
cmlzUHJvcGVydHk6OkdldFBvc2l0aW9uIH0sCi0gICAgICAgIHsgIlN1cHBvcnRlZE1pbWVUeXBl
cyIsIE1wcmlzUHJvcGVydHk6OlN1cHBvcnRlZE1pbWVUeXBlcyB9LAotICAgICAgICB7ICJTdXBw
b3J0ZWRVcmlTY2hlbWVzIiwgTXByaXNQcm9wZXJ0eTo6U3VwcG9ydGVkVXJpU2NoZW1lcyB9Ci0g
ICAgfTsKLSAgICBzdGF0aWMgY29uc3RleHByIFNvcnRlZEFycmF5TWFwIG1hcCB7IHByb3BlcnRp
ZXNMaXN0IH07Ci0gICAgYXV0byB2YWx1ZSA9IG1hcC5nZXQocHJvcGVydHlOYW1lLCBNcHJpc1By
b3BlcnR5OjpOb1Byb3BlcnR5KTsKLSAgICBpZiAodmFsdWUgPT0gTXByaXNQcm9wZXJ0eTo6Tm9Q
cm9wZXJ0eSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXN0
YXRpYyBHVmFyaWFudCogaGFuZGxlR2V0UHJvcGVydHkoR0RCdXNDb25uZWN0aW9uKiwgY29uc3Qg
Y2hhciogLyogc2VuZGVyICovLCBjb25zdCBjaGFyKiBvYmplY3RQYXRoLCBjb25zdCBjaGFyKiBp
bnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEdFcnJvcioqIGVycm9yLCBn
cG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGF1
dG8gcHJvcGVydHkgPSBnZXRNcHJpc1Byb3BlcnR5KHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFw
cm9wZXJ0eSkgewotICAgICAgICBnX3NldF9lcnJvcihlcnJvciwgR19EQlVTX0VSUk9SLCBHX0RC
VVNfRVJST1JfTk9UX1NVUFBPUlRFRCwgIiVzLiVzICVzIGlzIG5vdCBzdXBwb3J0ZWQiLCBvYmpl
Y3RQYXRoLCBpbnRlcmZhY2VOYW1lLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0KLSAgICBhdXRvJiBtYW5hZ2VyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8TWVk
aWFTZXNzaW9uTWFuYWdlckdMaWIqPih1c2VyRGF0YSk7Ci0gICAgc3dpdGNoIChwcm9wZXJ0eS52
YWx1ZSgpKSB7Ci0gICAgY2FzZSBNcHJpc1Byb3BlcnR5OjpOb1Byb3BlcnR5OgotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIE1wcmlzUHJvcGVydHk6OlN1cHBvcnRlZFVyaVNjaGVtZXM6Ci0gICAg
Y2FzZSBNcHJpc1Byb3BlcnR5OjpTdXBwb3J0ZWRNaW1lVHlwZXM6Ci0gICAgICAgIHJldHVybiBn
X3ZhcmlhbnRfbmV3X3N0cnYobnVsbHB0ciwgMCk7Ci0gICAgY2FzZSBNcHJpc1Byb3BlcnR5OjpH
ZXRQbGF5YmFja1N0YXR1czoKLSAgICAgICAgcmV0dXJuIG1hbmFnZXIuZ2V0UGxheWJhY2tTdGF0
dXNBc0dWYXJpYW50KHsgfSk7Ci0gICAgY2FzZSBNcHJpc1Byb3BlcnR5OjpHZXRNZXRhZGF0YTog
ewotICAgICAgICBhdXRvKiB2YXJpYW50ID0gbWFuYWdlci5nZXRNZXRhZGF0YUFzR1ZhcmlhbnQo
KTsKLSAgICAgICAgaWYgKCF2YXJpYW50KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgIHJldHVybiBnX3ZhcmlhbnRfcmVmKHZhcmlhbnQpOwotICAgIH0KLSAgICBjYXNlIE1w
cmlzUHJvcGVydHk6OkdldFBvc2l0aW9uOgotICAgICAgICByZXR1cm4gbWFuYWdlci5nZXRBY3Rp
dmVTZXNzaW9uUG9zaXRpb24oKTsKLSAgICBjYXNlIE1wcmlzUHJvcGVydHk6OklkZW50aXR5Ogot
ICAgICAgICByZXR1cm4gZ192YXJpYW50X25ld19zdHJpbmcoZ2V0QXBwbGljYXRpb25OYW1lKCkp
OwotICAgIGNhc2UgTXByaXNQcm9wZXJ0eTo6RGVza3RvcEVudHJ5OgotICAgICAgICByZXR1cm4g
Z192YXJpYW50X25ld19zdHJpbmcoIiIpOwotICAgIGNhc2UgTXByaXNQcm9wZXJ0eTo6SGFzVHJh
Y2tMaXN0OgotICAgIGNhc2UgTXByaXNQcm9wZXJ0eTo6Q2FuUXVpdDoKLSAgICBjYXNlIE1wcmlz
UHJvcGVydHk6OkNhblJhaXNlOgotICAgICAgICByZXR1cm4gZ192YXJpYW50X25ld19ib29sZWFu
KGZhbHNlKTsKLSAgICBjYXNlIE1wcmlzUHJvcGVydHk6OkNhblNlZWs6Ci0gICAgY2FzZSBNcHJp
c1Byb3BlcnR5OjpDYW5Db250cm9sOgotICAgIGNhc2UgTXByaXNQcm9wZXJ0eTo6Q2FuR29OZXh0
OgotICAgIGNhc2UgTXByaXNQcm9wZXJ0eTo6Q2FuR29QcmV2aW91czoKLSAgICBjYXNlIE1wcmlz
UHJvcGVydHk6OkNhblBsYXk6Ci0gICAgY2FzZSBNcHJpc1Byb3BlcnR5OjpDYW5QYXVzZToKLSAg
ICAgICAgcmV0dXJuIGdfdmFyaWFudF9uZXdfYm9vbGVhbih0cnVlKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIGdib29sZWFuIGhhbmRsZVNldFByb3BlcnR5KEdE
QnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqIC8qIHNlbmRlciAqLywgY29uc3QgY2hhciogLyog
b2JqZWN0UGF0aCAqLywgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogcHJv
cGVydHlOYW1lLCBHVmFyaWFudCosIEdFcnJvcioqIGVycm9yLCBncG9pbnRlcikKLXsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGdfc2V0X2Vycm9yKGVycm9yLCBHX0lPX0VSUk9S
LCBHX0lPX0VSUk9SX0ZBSUxFRCwgIiVzOiVzIHNldHRpbmcgaXMgbm90IHN1cHBvcnRlZCIsIGlu
dGVyZmFjZU5hbWUsIHByb3BlcnR5TmFtZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0
aWMgY29uc3QgR0RCdXNJbnRlcmZhY2VWVGFibGUgZ0ludGVyZmFjZVZUYWJsZSA9IHsKLSAgICBo
YW5kbGVNZXRob2RDYWxsLCBoYW5kbGVHZXRQcm9wZXJ0eSwgaGFuZGxlU2V0UHJvcGVydHksIHsg
bnVsbHB0ciB9Ci19OwotCi1ib29sIE1lZGlhU2Vzc2lvbk1hbmFnZXJHTGliOjpzZXR1cE1wcmlz
KCkKLXsKLSAgICBpZiAobV9vd25lcklkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNv
bnN0IGF1dG8mIGFwcGxpY2F0aW9uSUQgPSBnZXRBcHBsaWNhdGlvbklEKCk7Ci0gICAgbV9pbnN0
YW5jZUlkID0gYXBwbGljYXRpb25JRC5pc0VtcHR5KCkgPyBtYWtlU3RyaW5nKCJvcmcubXByaXMu
TWVkaWFQbGF5ZXIyLndlYmtpdC5pbnN0YW5jZSIsIGdldHBpZCgpKSA6IG1ha2VTdHJpbmcoIm9y
Zy5tcHJpcy5NZWRpYVBsYXllcjIuIiwgYXBwbGljYXRpb25JRC5hc2NpaSgpLmRhdGEoKSk7Ci0K
LSAgICBtX293bmVySWQgPSBnX2J1c19vd25fbmFtZShHX0JVU19UWVBFX1NFU1NJT04sIG1faW5z
dGFuY2VJZC5hc2NpaSgpLmRhdGEoKSwKLSAgICAgICAgR19CVVNfTkFNRV9PV05FUl9GTEFHU19O
T05FLCByZWludGVycHJldF9jYXN0PEdCdXNBY3F1aXJlZENhbGxiYWNrPigrW10oR0RCdXNDb25u
ZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBnY2hhciosIGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0g
ICAgICAgICAgICBhdXRvJiBtYW5hZ2VyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFTZXNzaW9u
TWFuYWdlckdMaWIqPih1c2VyRGF0YSk7Ci0gICAgICAgICAgICBtYW5hZ2VyLmJ1c0FjcXVpcmVk
KGNvbm5lY3Rpb24pOwotICAgICAgICB9KSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQnVz
TmFtZUFjcXVpcmVkQ2FsbGJhY2s+KCtbXShHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNv
bnN0IGNoYXIqLCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICAgICAgYXV0byYgbWFuYWdl
ciA9ICpyZWludGVycHJldF9jYXN0PE1lZGlhU2Vzc2lvbk1hbmFnZXJHTGliKj4odXNlckRhdGEp
OwotICAgICAgICAgICAgbWFuYWdlci5uYW1lQWNxdWlyZWQoY29ubmVjdGlvbik7Ci0gICAgICAg
IH0pLAotICAgICAgICByZWludGVycHJldF9jYXN0PEdCdXNOYW1lTG9zdENhbGxiYWNrPigrW10o
R0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiwgZ3BvaW50ZXIgdXNlckRh
dGEpIHsKLSAgICAgICAgICAgIGF1dG8mIG1hbmFnZXIgPSAqcmVpbnRlcnByZXRfY2FzdDxNZWRp
YVNlc3Npb25NYW5hZ2VyR0xpYio+KHVzZXJEYXRhKTsKLSAgICAgICAgICAgIG1hbmFnZXIubmFt
ZUxvc3QoY29ubmVjdGlvbik7Ci0gICAgICAgIH0pLCB0aGlzLCBudWxscHRyKTsKLQogICAgIEdV
bmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBtX21wcmlzSW50ZXJmYWNlID0gYWRvcHRH
UmVmKGdfZGJ1c19ub2RlX2luZm9fbmV3X2Zvcl94bWwoc19tcHJpc0ludGVyZmFjZSwgJmVycm9y
Lm91dFB0cigpKSk7Ci0gICAgaWYgKCFtX21wcmlzSW50ZXJmYWNlKSB7CisgICAgYXV0byBtcHJp
c0ludGVyZmFjZSA9IGFkb3B0R1JlZihnX2RidXNfbm9kZV9pbmZvX25ld19mb3JfeG1sKHNfbXBy
aXNJbnRlcmZhY2UsICZlcnJvci5vdXRQdHIoKSkpOworICAgIGlmICghbXByaXNJbnRlcmZhY2Up
IHsKICAgICAgICAgZ193YXJuaW5nKCJGYWlsZWQgYXQgcGFyc2luZyBYTUwgSW50ZXJmYWNlIGRl
ZmluaXRpb246ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBtYWtlVW5pcXVlPE1lZGlhU2Vzc2lvbk1hbmFnZXJHTGliPihXVEZNb3ZlKG1wcmlzSW50
ZXJmYWNlKSk7CiB9CiAKLXZvaWQgTWVkaWFTZXNzaW9uTWFuYWdlckdMaWI6OmJ1c0FjcXVpcmVk
KEdEQnVzQ29ubmVjdGlvbiogY29ubmVjdGlvbikKK01lZGlhU2Vzc2lvbk1hbmFnZXJHTGliOjpN
ZWRpYVNlc3Npb25NYW5hZ2VyR0xpYihHUmVmUHRyPEdEQnVzTm9kZUluZm8+JiYgbXByaXNJbnRl
cmZhY2UpCisgICAgOiBtX21wcmlzSW50ZXJmYWNlKFdURk1vdmUobXByaXNJbnRlcmZhY2UpKQor
ICAgICwgbV9ub3dQbGF5aW5nTWFuYWdlcihwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bWVkaWFTdHJh
dGVneSgpLmNyZWF0ZU5vd1BsYXlpbmdNYW5hZ2VyKCkpCiB7Ci0gICAgR1VuaXF1ZU91dFB0cjxH
RXJyb3I+IGVycm9yOwotICAgIG1fcm9vdFJlZ2lzdHJhdGlvbklkID0gZ19kYnVzX2Nvbm5lY3Rp
b25fcmVnaXN0ZXJfb2JqZWN0KGNvbm5lY3Rpb24sIERCVVNfTVBSSVNfT0JKRUNUX1BBVEgsIG1f
bXByaXNJbnRlcmZhY2UtPmludGVyZmFjZXNbMF0sCi0gICAgICAgICZnSW50ZXJmYWNlVlRhYmxl
LCB0aGlzLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpOwotCi0gICAgaWYgKCFtX3Jvb3RSZWdp
c3RyYXRpb25JZCkgewotICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byByZWdpc3RlciBNUFJJ
UyBELUJ1cyBvYmplY3Q6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9wbGF5ZXJSZWdpc3RyYXRpb25JZCA9IGdfZGJ1c19jb25uZWN0aW9uX3Jl
Z2lzdGVyX29iamVjdChjb25uZWN0aW9uLCBEQlVTX01QUklTX09CSkVDVF9QQVRILCBtX21wcmlz
SW50ZXJmYWNlLT5pbnRlcmZhY2VzWzFdLAotICAgICAgICAmZ0ludGVyZmFjZVZUYWJsZSwgdGhp
cywgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKTsKLQotICAgIGlmICghbV9wbGF5ZXJSZWdpc3Ry
YXRpb25JZCkKLSAgICAgICAgZ193YXJuaW5nKCJGYWlsZWQgYXQgTVBSSVMgb2JqZWN0IHJlZ2lz
dHJhdGlvbjogJXMiLCBlcnJvci0+bWVzc2FnZSk7CiB9CiAKLXZvaWQgTWVkaWFTZXNzaW9uTWFu
YWdlckdMaWI6Om5hbWVMb3N0KEdEQnVzQ29ubmVjdGlvbiogY29ubmVjdGlvbikKLXsKLSAgICBp
ZiAoVU5MSUtFTFkoIW1fY29ubmVjdGlvbikpIHsKLSAgICAgICAgZ193YXJuaW5nKCJVbmFibGUg
dG8gYWNxdWlyZSBNUFJJUyBELUJ1cyBzZXNzaW9uIG93bmVyc2hpcCBmb3IgbmFtZSAlcyIsIG1f
aW5zdGFuY2VJZC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX2Nvbm5lY3Rpb24gPSBudWxscHRyOwotICAgIGlmICghbV9yb290UmVnaXN0cmF0aW9uSWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChnX2RidXNfY29ubmVjdGlvbl91bnJlZ2lzdGVy
X29iamVjdChjb25uZWN0aW9uLCBtX3Jvb3RSZWdpc3RyYXRpb25JZCkpCi0gICAgICAgIG1fcm9v
dFJlZ2lzdHJhdGlvbklkID0gMDsKLSAgICBlbHNlCi0gICAgICAgIGdfd2FybmluZygiVW5hYmxl
IHRvIHVucmVnaXN0ZXIgTVBSSVMgRC1CdXMgb2JqZWN0LiIpOwotCi0gICAgaWYgKCFtX3BsYXll
clJlZ2lzdHJhdGlvbklkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZ19kYnVzX2Nvbm5l
Y3Rpb25fdW5yZWdpc3Rlcl9vYmplY3QoY29ubmVjdGlvbiwgbV9wbGF5ZXJSZWdpc3RyYXRpb25J
ZCkpCi0gICAgICAgIG1fcGxheWVyUmVnaXN0cmF0aW9uSWQgPSAwOwotICAgIGVsc2UKLSAgICAg
ICAgZ193YXJuaW5nKCJVbmFibGUgdG8gdW5yZWdpc3RlciBNUFJJUyBELUJ1cyBwbGF5ZXIgb2Jq
ZWN0LiIpOwotfQorTWVkaWFTZXNzaW9uTWFuYWdlckdMaWI6On5NZWRpYVNlc3Npb25NYW5hZ2Vy
R0xpYigpID0gZGVmYXVsdDsKIAogdm9pZCBNZWRpYVNlc3Npb25NYW5hZ2VyR0xpYjo6YmVnaW5J
bnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVycnVwdGlvblR5cGUgdHlwZSkK
IHsKQEAgLTM4NiwyNiArMTY2LDI3IEBAIHZvaWQgTWVkaWFTZXNzaW9uTWFuYWdlckdMaWI6OnNl
c3Npb25EaWRFbmRSZW1vdGVTY3J1YmJpbmcoUGxhdGZvcm1NZWRpYVNlc3Npb24mCiAgICAgc2No
ZWR1bGVTZXNzaW9uU3RhdHVzVXBkYXRlKCk7CiB9CiAKLXZvaWQgTWVkaWFTZXNzaW9uTWFuYWdl
ckdMaWI6OmFkZFNlc3Npb24oUGxhdGZvcm1NZWRpYVNlc3Npb24mIHNlc3Npb24pCit2b2lkIE1l
ZGlhU2Vzc2lvbk1hbmFnZXJHTGliOjphZGRTZXNzaW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uJiBw
bGF0Zm9ybVNlc3Npb24pCiB7Ci0gICAgaWYgKCFzZXR1cE1wcmlzKCkpCisgICAgYXV0byBpZGVu
dGlmaWVyID0gcGxhdGZvcm1TZXNzaW9uLm1lZGlhU2Vzc2lvbklkZW50aWZpZXIoKTsKKyAgICBh
dXRvIHNlc3Npb24gPSBNZWRpYVNlc3Npb25HTGliOjpjcmVhdGUoKnRoaXMsIGlkZW50aWZpZXIp
OworICAgIGlmICghc2Vzc2lvbikKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9zZXNzaW9ucy5h
ZGQoaWRlbnRpZmllciwgV1RGTW92ZShzZXNzaW9uKSk7CiAgICAgbV9ub3dQbGF5aW5nTWFuYWdl
ci0+YWRkQ2xpZW50KCp0aGlzKTsKIAotICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6
YWRkU2Vzc2lvbihzZXNzaW9uKTsKKyAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OmFk
ZFNlc3Npb24ocGxhdGZvcm1TZXNzaW9uKTsKIH0KIAogdm9pZCBNZWRpYVNlc3Npb25NYW5hZ2Vy
R0xpYjo6cmVtb3ZlU2Vzc2lvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbiYgc2Vzc2lvbikKIHsKICAg
ICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZVNlc3Npb24oc2Vzc2lvbik7CiAK
LSAgICBpZiAoaGFzTm9TZXNzaW9uKCkpIHsKKyAgICBtX3Nlc3Npb25zLnJlbW92ZShzZXNzaW9u
Lm1lZGlhU2Vzc2lvbklkZW50aWZpZXIoKSk7CisgICAgaWYgKGhhc05vU2Vzc2lvbigpKQogICAg
ICAgICBtX25vd1BsYXlpbmdNYW5hZ2VyLT5yZW1vdmVDbGllbnQoKnRoaXMpOwotICAgICAgICBp
ZiAobV9vd25lcklkKQotICAgICAgICAgICAgZ19idXNfdW5vd25fbmFtZShtX293bmVySWQpOwot
ICAgICAgICBtX293bmVySWQgPSAwOwotICAgIH0KKwogICAgIHNjaGVkdWxlU2Vzc2lvblN0YXR1
c1VwZGF0ZSgpOwogfQogCkBAIC00MzQsMjYgKzIxNSwyNCBAQCB2b2lkIE1lZGlhU2Vzc2lvbk1h
bmFnZXJHTGliOjpzZXNzaW9uV2lsbEVuZFBsYXliYWNrKFBsYXRmb3JtTWVkaWFTZXNzaW9uJiBz
ZXNzaQogICAgIH0KIH0KIAotdm9pZCBNZWRpYVNlc3Npb25NYW5hZ2VyR0xpYjo6c2Vzc2lvblN0
YXRlQ2hhbmdlZChQbGF0Zm9ybU1lZGlhU2Vzc2lvbiYgc2Vzc2lvbikKK3ZvaWQgTWVkaWFTZXNz
aW9uTWFuYWdlckdMaWI6OnNlc3Npb25TdGF0ZUNoYW5nZWQoUGxhdGZvcm1NZWRpYVNlc3Npb24m
IHBsYXRmb3JtU2Vzc2lvbikKIHsKLSAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNl
c3Npb25TdGF0ZUNoYW5nZWQoc2Vzc2lvbik7CisgICAgUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5h
Z2VyOjpzZXNzaW9uU3RhdGVDaGFuZ2VkKHBsYXRmb3JtU2Vzc2lvbik7CiAKLSAgICBHVmFyaWFu
dEJ1aWxkZXIgYnVpbGRlcjsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBH
X1ZBUklBTlRfVFlQRSgiYXtzdn0iKSk7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWls
ZGVyLCAie3N2fSIsICJQbGF5YmFja1N0YXR1cyIsIGdldFBsYXliYWNrU3RhdHVzQXNHVmFyaWFu
dCgmc2Vzc2lvbikpOwotICAgIGVtaXRQcm9wZXJ0aWVzQ2hhbmdlZChnX3ZhcmlhbnRfbmV3KCIo
c2F7c3Z9YXMpIiwgREJVU19NUFJJU19QTEFZRVJfSU5URVJGQUNFLCAmYnVpbGRlciwgbnVsbHB0
cikpOwotICAgIGdfdmFyaWFudF9idWlsZGVyX2NsZWFyKCZidWlsZGVyKTsKKyAgICBhdXRvIHNl
c3Npb24gPSBtX3Nlc3Npb25zLmdldChwbGF0Zm9ybVNlc3Npb24ubWVkaWFTZXNzaW9uSWRlbnRp
ZmllcigpKTsKKyAgICBpZiAoIXNlc3Npb24pCisgICAgICAgIHJldHVybjsKKworICAgIHNlc3Np
b24tPnBsYXliYWNrU3RhdHVzQ2hhbmdlZChwbGF0Zm9ybVNlc3Npb24pOwogfQogCi12b2lkIE1l
ZGlhU2Vzc2lvbk1hbmFnZXJHTGliOjpjbGllbnRDaGFyYWN0ZXJpc3RpY3NDaGFuZ2VkKFBsYXRm
b3JtTWVkaWFTZXNzaW9uJiBzZXNzaW9uKQordm9pZCBNZWRpYVNlc3Npb25NYW5hZ2VyR0xpYjo6
Y2xpZW50Q2hhcmFjdGVyaXN0aWNzQ2hhbmdlZChQbGF0Zm9ybU1lZGlhU2Vzc2lvbiYgcGxhdGZv
cm1TZXNzaW9uKQogewotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgc2Vzc2lvbi5sb2dJ
ZGVudGlmaWVyKCkpOworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgcGxhdGZvcm1TZXNz
aW9uLmxvZ0lkZW50aWZpZXIoKSk7CiAgICAgaWYgKG1faXNTZWVraW5nKSB7CiAgICAgICAgIG1f
aXNTZWVraW5nID0gZmFsc2U7Ci0gICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsK
LSAgICAgICAgaW50NjRfdCBwb3NpdGlvbiA9IHNlc3Npb24ubm93UGxheWluZ0luZm8oKS0+Y3Vy
cmVudFRpbWUgKiAxMDAwMDAwOwotICAgICAgICBpZiAoIWdfZGJ1c19jb25uZWN0aW9uX2VtaXRf
c2lnbmFsKG1fY29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwgREJVU19NUFJJU19PQkpFQ1RfUEFU
SCwgREJVU19NUFJJU19QTEFZRVJfSU5URVJGQUNFLCAiU2Vla2VkIiwgZ192YXJpYW50X25ldygi
KHgpIiwgcG9zaXRpb24pLCAmZXJyb3Iub3V0UHRyKCkpKQotICAgICAgICAgICAgZ193YXJuaW5n
KCJGYWlsZWQgdG8gZW1pdCBNUFJJUyBTZWVrZWQgc2lnbmFsOiAlcyIsIGVycm9yLT5tZXNzYWdl
KTsKKyAgICAgICAgYXV0byBzZXNzaW9uID0gbV9zZXNzaW9ucy5nZXQocGxhdGZvcm1TZXNzaW9u
Lm1lZGlhU2Vzc2lvbklkZW50aWZpZXIoKSk7CisgICAgICAgIHNlc3Npb24tPmVtaXRQb3NpdGlv
bkNoYW5nZWQocGxhdGZvcm1TZXNzaW9uLm5vd1BsYXlpbmdJbmZvKCktPmN1cnJlbnRUaW1lKTsK
ICAgICB9CiAgICAgc2NoZWR1bGVTZXNzaW9uU3RhdHVzVXBkYXRlKCk7CiB9CkBAIC00OTEsMTEg
KzI3MCw4IEBAIFBsYXRmb3JtTWVkaWFTZXNzaW9uKiBNZWRpYVNlc3Npb25NYW5hZ2VyR0xpYjo6
bm93UGxheWluZ0VsaWdpYmxlU2Vzc2lvbigpCiAKIHZvaWQgTWVkaWFTZXNzaW9uTWFuYWdlckdM
aWI6OnVwZGF0ZU5vd1BsYXlpbmdJbmZvKCkKIHsKLSAgICBzdGQ6Om9wdGlvbmFsPE5vd1BsYXlp
bmdJbmZvPiBub3dQbGF5aW5nSW5mbzsKLSAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5vd1BsYXlp
bmdFbGlnaWJsZVNlc3Npb24oKSkKLSAgICAgICAgbm93UGxheWluZ0luZm8gPSBzZXNzaW9uLT5u
b3dQbGF5aW5nSW5mbygpOwotCi0gICAgaWYgKCFub3dQbGF5aW5nSW5mbykgeworICAgIGF1dG8q
IHBsYXRmb3JtU2Vzc2lvbiA9IG5vd1BsYXlpbmdFbGlnaWJsZVNlc3Npb24oKTsKKyAgICBpZiAo
IXBsYXRmb3JtU2Vzc2lvbikgewogICAgICAgICBpZiAobV9yZWdpc3RlcmVkQXNOb3dQbGF5aW5n
QXBwbGljYXRpb24pIHsKICAgICAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgImNs
ZWFyaW5nIG5vdyBwbGF5aW5nIGluZm8iKTsKICAgICAgICAgICAgIG1fbm93UGxheWluZ01hbmFn
ZXItPmNsZWFyTm93UGxheWluZ0luZm8oKTsKQEAgLTUwNywxMCArMjgzLDEzIEBAIHZvaWQgTWVk
aWFTZXNzaW9uTWFuYWdlckdMaWI6OnVwZGF0ZU5vd1BsYXlpbmdJbmZvKCkKICAgICAgICAgbV9s
YXN0VXBkYXRlZE5vd1BsYXlpbmdEdXJhdGlvbiA9IE5BTjsKICAgICAgICAgbV9sYXN0VXBkYXRl
ZE5vd1BsYXlpbmdFbGFwc2VkVGltZSA9IE5BTjsKICAgICAgICAgbV9sYXN0VXBkYXRlZE5vd1Bs
YXlpbmdJbmZvVW5pcXVlSWRlbnRpZmllciA9IHsgfTsKLSAgICAgICAgbV9ub3dQbGF5aW5nSW5m
by5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgYXV0byBub3dQbGF5aW5n
SW5mbyA9IHBsYXRmb3JtU2Vzc2lvbi0+bm93UGxheWluZ0luZm8oKTsKKyAgICBpZiAoIW5vd1Bs
YXlpbmdJbmZvKQorICAgICAgICByZXR1cm47CisKICAgICBtX2hhdmVFdmVyUmVnaXN0ZXJlZEFz
Tm93UGxheWluZ0FwcGxpY2F0aW9uID0gdHJ1ZTsKIAogICAgIGlmIChtX25vd1BsYXlpbmdNYW5h
Z2VyLT5zZXROb3dQbGF5aW5nSW5mbygqbm93UGxheWluZ0luZm8pKQpAQCAtNTM2LDYwICszMTUs
OCBAQCB2b2lkIE1lZGlhU2Vzc2lvbk1hbmFnZXJHTGliOjp1cGRhdGVOb3dQbGF5aW5nSW5mbygp
CiAKICAgICBtX25vd1BsYXlpbmdBY3RpdmUgPSBub3dQbGF5aW5nSW5mby0+YWxsb3dzTm93UGxh
eWluZ0NvbnRyb2xzVmlzaWJpbGl0eTsKIAotICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyOwot
ICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFKCJhe3N2
fSIpKTsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgIm1wcmlz
OnRyYWNraWQiLCBnX3ZhcmlhbnRfbmV3KCJvIiwgREJVU19NUFJJU19UUkFDS19QQVRIKSk7Ci0g
ICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJtcHJpczpsZW5ndGgi
LCBnX3ZhcmlhbnRfbmV3X2ludDY0KG5vd1BsYXlpbmdJbmZvLT5kdXJhdGlvbiAqIDEwMDAwMDAp
KTsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInhlc2FtOnRp
dGxlIiwgZ192YXJpYW50X25ld19zdHJpbmcobm93UGxheWluZ0luZm8tPnRpdGxlLnV0ZjgoKS5k
YXRhKCkpKTsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInhl
c2FtOmFsYnVtIiwgZ192YXJpYW50X25ld19zdHJpbmcobm93UGxheWluZ0luZm8tPmFsYnVtLnV0
ZjgoKS5kYXRhKCkpKTsKLSAgICBpZiAobm93UGxheWluZ0luZm8tPmFydHdvcmspCi0gICAgICAg
IGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAibXByaXM6YXJ0VXJsIiwg
Z192YXJpYW50X25ld19zdHJpbmcobm93UGxheWluZ0luZm8tPmFydHdvcmstPnNyYy51dGY4KCku
ZGF0YSgpKSk7Ci0KLSAgICBHVmFyaWFudEJ1aWxkZXIgYXJ0aXN0QnVpbGRlcjsKLSAgICBnX3Zh
cmlhbnRfYnVpbGRlcl9pbml0KCZhcnRpc3RCdWlsZGVyLCBHX1ZBUklBTlRfVFlQRSgiYXMiKSk7
Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZhcnRpc3RCdWlsZGVyLCAicyIsIG5vd1BsYXlp
bmdJbmZvLT5hcnRpc3QudXRmOCgpLmRhdGEoKSk7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRk
KCZidWlsZGVyLCAie3N2fSIsICJ4ZXNhbTphcnRpc3QiLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQo
JmFydGlzdEJ1aWxkZXIpKTsKLQotICAgIG1fbm93UGxheWluZ0luZm8gPSBnX3ZhcmlhbnRfYnVp
bGRlcl9lbmQoJmJ1aWxkZXIpOwotCi0gICAgR1ZhcmlhbnRCdWlsZGVyIHByb3BlcnRpZXNCdWls
ZGVyOwotICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJnByb3BlcnRpZXNCdWlsZGVyLCBHX1ZB
UklBTlRfVFlQRSgiYXtzdn0iKSk7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZwcm9wZXJ0
aWVzQnVpbGRlciwgIntzdn0iLCAiTWV0YWRhdGEiLCBtX25vd1BsYXlpbmdJbmZvLmdldCgpKTsK
LSAgICBlbWl0UHJvcGVydGllc0NoYW5nZWQoZ192YXJpYW50X25ldygiKHNhe3N2fWFzKSIsIERC
VVNfTVBSSVNfUExBWUVSX0lOVEVSRkFDRSwgJnByb3BlcnRpZXNCdWlsZGVyLCBudWxscHRyKSk7
Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfY2xlYXIoJnByb3BlcnRpZXNCdWlsZGVyKTsKLX0KLQot
R1ZhcmlhbnQqIE1lZGlhU2Vzc2lvbk1hbmFnZXJHTGliOjpnZXRQbGF5YmFja1N0YXR1c0FzR1Zh
cmlhbnQoc3RkOjpvcHRpb25hbDxjb25zdCBQbGF0Zm9ybU1lZGlhU2Vzc2lvbio+IHNlc3Npb24p
Ci17Ci0gICAgYXV0byBzdGF0ZSA9IFt0aGlzLCBzZXNzaW9uID0gV1RGTW92ZShzZXNzaW9uKV0o
KSAtPiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6U3RhdGUgewotICAgICAgICBpZiAoc2Vzc2lvbikK
LSAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLnZhbHVlKCktPnN0YXRlKCk7Ci0KLSAgICAgICAg
YXV0byogbm93UGxheWluZ1Nlc3Npb24gPSBub3dQbGF5aW5nRWxpZ2libGVTZXNzaW9uKCk7Ci0g
ICAgICAgIGlmIChub3dQbGF5aW5nU2Vzc2lvbikKLSAgICAgICAgICAgIHJldHVybiBub3dQbGF5
aW5nU2Vzc2lvbi0+c3RhdGUoKTsKLQotICAgICAgICByZXR1cm4gUGxhdGZvcm1NZWRpYVNlc3Np
b246OlN0YXRlOjpJZGxlOwotICAgIH0oKTsKLQotICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICBj
YXNlIFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpTdGF0ZTo6QXV0b3BsYXlpbmc6Ci0gICAgY2FzZSBQ
bGF0Zm9ybU1lZGlhU2Vzc2lvbjo6U3RhdGU6OlBsYXlpbmc6Ci0gICAgICAgIHJldHVybiBnX3Zh
cmlhbnRfbmV3X3N0cmluZygiUGxheWluZyIpOwotICAgIGNhc2UgUGxhdGZvcm1NZWRpYVNlc3Np
b246OlN0YXRlOjpQYXVzZWQ6Ci0gICAgICAgIHJldHVybiBnX3ZhcmlhbnRfbmV3X3N0cmluZygi
UGF1c2VkIik7Ci0gICAgY2FzZSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6U3RhdGU6OklkbGU6Ci0g
ICAgY2FzZSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6U3RhdGU6OkludGVycnVwdGVkOgotICAgICAg
ICByZXR1cm4gZ192YXJpYW50X25ld19zdHJpbmcoIlN0b3BwZWQiKTsKLSAgICB9Ci0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUdWYXJpYW50KiBN
ZWRpYVNlc3Npb25NYW5hZ2VyR0xpYjo6Z2V0QWN0aXZlU2Vzc2lvblBvc2l0aW9uKCkKLXsKLSAg
ICBhdXRvKiBzZXNzaW9uID0gbm93UGxheWluZ0VsaWdpYmxlU2Vzc2lvbigpOwotICAgIHJldHVy
biBnX3ZhcmlhbnRfbmV3X2ludDY0KHNlc3Npb24gPyBzZXNzaW9uLT5ub3dQbGF5aW5nSW5mbygp
LT5jdXJyZW50VGltZSAqIDEwMDAwMDAgOiAwKTsKKyAgICBhdXRvIHNlc3Npb24gPSBtX3Nlc3Np
b25zLmdldChwbGF0Zm9ybVNlc3Npb24tPm1lZGlhU2Vzc2lvbklkZW50aWZpZXIoKSk7CisgICAg
c2Vzc2lvbi0+dXBkYXRlTm93UGxheWluZygqbm93UGxheWluZ0luZm8pOwogfQogCiB2b2lkIE1l
ZGlhU2Vzc2lvbk1hbmFnZXJHTGliOjpkaXNwYXRjaChQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UmVt
b3RlQ29udHJvbENvbW1hbmRUeXBlIHBsYXRmb3JtQ29tbWFuZCwgUGxhdGZvcm1NZWRpYVNlc3Np
b246OlJlbW90ZUNvbW1hbmRBcmd1bWVudCBhcmd1bWVudCkKQEAgLTU5OCwxNiArMzI1LDYgQEAg
dm9pZCBNZWRpYVNlc3Npb25NYW5hZ2VyR0xpYjo6ZGlzcGF0Y2goUGxhdGZvcm1NZWRpYVNlc3Np
b246OlJlbW90ZUNvbnRyb2xDb21tYW4KICAgICBtX25vd1BsYXlpbmdNYW5hZ2VyLT5kaWRSZWNl
aXZlUmVtb3RlQ29udHJvbENvbW1hbmQocGxhdGZvcm1Db21tYW5kLCBhcmd1bWVudCk7CiB9CiAK
LXZvaWQgTWVkaWFTZXNzaW9uTWFuYWdlckdMaWI6OmVtaXRQcm9wZXJ0aWVzQ2hhbmdlZChHVmFy
aWFudCogcGFyYW1ldGVycykKLXsKLSAgICBpZiAoIW1fY29ubmVjdGlvbikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwotICAgIGlmICghZ19kYnVz
X2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwobV9jb25uZWN0aW9uLmdldCgpLCBudWxscHRyLCBEQlVT
X01QUklTX09CSkVDVF9QQVRILCAib3JnLmZyZWVkZXNrdG9wLkRCdXMuUHJvcGVydGllcyIsICJQ
cm9wZXJ0aWVzQ2hhbmdlZCIsIHBhcmFtZXRlcnMsICZlcnJvci5vdXRQdHIoKSkpCi0gICAgICAg
IGdfd2FybmluZygiRmFpbGVkIHRvIGVtaXQgTVBSSVMgcHJvcGVydGllcyBjaGFuZ2VkOiAlcyIs
IGVycm9yLT5tZXNzYWdlKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYg
Ly8gVVNFKEdMSUIpCisjZW5kaWYgLy8gVVNFKEdMSUIpICYmIEVOQUJMRShNRURJQV9TRVNTSU9O
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ2xpYi9NZWRpYVNl
c3Npb25NYW5hZ2VyR0xpYi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ2xpYi9N
ZWRpYVNlc3Npb25NYW5hZ2VyR0xpYi5oCmluZGV4IDliNjQxYjJiMzE2MzUyMzFiYjZhYzNhY2Vh
MTY1MDg0NTliN2M1YWEuLjgwOTBiNzZiMjEwYWZhZGE5ZjhjN2Q0ZTg1N2U2ODkwMDZhYWZkMTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dsaWIvTWVkaWFTZXNz
aW9uTWFuYWdlckdMaWIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nbGli
L01lZGlhU2Vzc2lvbk1hbmFnZXJHTGliLmgKQEAgLTIwLDYgKzIwLDcgQEAKIAogI2lmIFVTRShH
TElCKSAmJiBFTkFCTEUoTUVESUFfU0VTU0lPTikKIAorI2luY2x1ZGUgIk1lZGlhU2Vzc2lvbklk
ZW50aWZpZXIuaCIKICNpbmNsdWRlICJOb3dQbGF5aW5nTWFuYWdlci5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5oIgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIu
aD4KQEAgLTI3LDE3ICsyOCwxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgTm93
UGxheWluZ0luZm87CitjbGFzcyBNZWRpYVNlc3Npb25HTGliOwogCiBjbGFzcyBNZWRpYVNlc3Np
b25NYW5hZ2VyR0xpYgogICAgIDogcHVibGljIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcgog
ICAgICwgcHJpdmF0ZSBOb3dQbGF5aW5nTWFuYWdlcjo6Q2xpZW50IHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBNZWRpYVNlc3Npb25NYW5hZ2VyR0xpYigpOwor
ICAgIE1lZGlhU2Vzc2lvbk1hbmFnZXJHTGliKEdSZWZQdHI8R0RCdXNOb2RlSW5mbz4mJik7CiAg
ICAgfk1lZGlhU2Vzc2lvbk1hbmFnZXJHTGliKCk7CiAKLSAgICBib29sIHNldHVwTXByaXMoKTsK
LQogICAgIHZvaWQgYmVnaW5JbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVy
cnVwdGlvblR5cGUpIGZpbmFsOwogCiAgICAgYm9vbCBoYXNBY3RpdmVOb3dQbGF5aW5nU2Vzc2lv
bigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbm93UGxheWluZ0FjdGl2ZTsgfQpAQCAtNDgsMTQg
KzQ4LDExIEBAIHB1YmxpYzoKICAgICBib29sIHJlZ2lzdGVyZWRBc05vd1BsYXlpbmdBcHBsaWNh
dGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcmVnaXN0ZXJlZEFzTm93UGxheWluZ0FwcGxp
Y2F0aW9uOyB9CiAgICAgYm9vbCBoYXZlRXZlclJlZ2lzdGVyZWRBc05vd1BsYXlpbmdBcHBsaWNh
dGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faGF2ZUV2ZXJSZWdpc3RlcmVkQXNOb3dQbGF5
aW5nQXBwbGljYXRpb247IH0KIAotICAgIHZvaWQgYnVzQWNxdWlyZWQoR0RCdXNDb25uZWN0aW9u
Kik7Ci0gICAgdm9pZCBuYW1lQWNxdWlyZWQoR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uKSB7
IG1fY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247IH0KLSAgICB2b2lkIG5hbWVMb3N0KEdEQnVzQ29u
bmVjdGlvbiopOwotICAgIEdWYXJpYW50KiBnZXRNZXRhZGF0YUFzR1ZhcmlhbnQoKSBjb25zdCB7
IHJldHVybiBtX25vd1BsYXlpbmdJbmZvLmdldCgpOyB9Ci0gICAgR1ZhcmlhbnQqIGdldFBsYXli
YWNrU3RhdHVzQXNHVmFyaWFudChzdGQ6Om9wdGlvbmFsPGNvbnN0IFBsYXRmb3JtTWVkaWFTZXNz
aW9uKj4pOwotICAgIEdWYXJpYW50KiBnZXRBY3RpdmVTZXNzaW9uUG9zaXRpb24oKTsKICAgICB2
b2lkIGRpc3BhdGNoKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpSZW1vdGVDb250cm9sQ29tbWFuZFR5
cGUsIFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpSZW1vdGVDb21tYW5kQXJndW1lbnQpOwogCisgICAg
Y29uc3QgR1JlZlB0cjxHREJ1c05vZGVJbmZvPiYgbXByaXNJbnRlcmZhY2UoKSBjb25zdCB7IHJl
dHVybiBtX21wcmlzSW50ZXJmYWNlOyB9CisgICAgUGxhdGZvcm1NZWRpYVNlc3Npb24qIG5vd1Bs
YXlpbmdFbGlnaWJsZVNlc3Npb24oKTsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgc2NoZWR1bGVT
ZXNzaW9uU3RhdHVzVXBkYXRlKCkgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVOb3dQbGF5aW5nSW5m
bygpOwpAQCAtNzMsOCArNzAsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIHZvaWQgcHJv
dmlkZVByZXNlbnRpbmdBcHBsaWNhdGlvblBJRElmTmVjZXNzYXJ5KCkgeyB9CiAKLSAgICBQbGF0
Zm9ybU1lZGlhU2Vzc2lvbiogbm93UGxheWluZ0VsaWdpYmxlU2Vzc2lvbigpOwotCiAgICAgdm9p
ZCBhZGRTdXBwb3J0ZWRDb21tYW5kKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpSZW1vdGVDb250cm9s
Q29tbWFuZFR5cGUpIGZpbmFsOwogICAgIHZvaWQgcmVtb3ZlU3VwcG9ydGVkQ29tbWFuZChQbGF0
Zm9ybU1lZGlhU2Vzc2lvbjo6UmVtb3RlQ29udHJvbENvbW1hbmRUeXBlKSBmaW5hbDsKICAgICBS
ZW1vdGVDb21tYW5kTGlzdGVuZXI6OlJlbW90ZUNvbW1hbmRzU2V0IHN1cHBvcnRlZENvbW1hbmRz
KCkgY29uc3QgZmluYWw7CkBAIC04Miw4ICs3Nyw2IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHJl
c2V0SGF2ZUV2ZXJSZWdpc3RlcmVkQXNOb3dQbGF5aW5nQXBwbGljYXRpb25Gb3JUZXN0aW5nKCkg
ZmluYWwgeyBtX2hhdmVFdmVyUmVnaXN0ZXJlZEFzTm93UGxheWluZ0FwcGxpY2F0aW9uID0gZmFs
c2U7IH07CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBlbWl0UHJvcGVydGllc0NoYW5nZWQoR1Zhcmlh
bnQqKTsKLQogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIGNvbnN0IGNoYXIqIGxvZ0Ns
YXNzTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJNZWRpYVNlc3Npb25NYW5hZ2VyR0xp
YiI7IH0KICNlbmRpZgpAQCAtOTEsMTQgKzg0LDggQEAgcHJpdmF0ZToKICAgICAvLyBOb3dQbGF5
aW5nTWFuYWdlcjo6Q2xpZW50CiAgICAgdm9pZCBkaWRSZWNlaXZlUmVtb3RlQ29udHJvbENvbW1h
bmQoUGxhdGZvcm1NZWRpYVNlc3Npb246OlJlbW90ZUNvbnRyb2xDb21tYW5kVHlwZSB0eXBlLCBj
b25zdCBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UmVtb3RlQ29tbWFuZEFyZ3VtZW50JiBhcmd1bWVu
dCkgZmluYWwgeyBwcm9jZXNzRGlkUmVjZWl2ZVJlbW90ZUNvbnRyb2xDb21tYW5kKHR5cGUsIGFy
Z3VtZW50KTsgfQogCi0gICAgU3RyaW5nIG1faW5zdGFuY2VJZDsKLSAgICB1bnNpZ25lZCBtX293
bmVySWQgeyAwIH07Ci0gICAgdW5zaWduZWQgbV9yb290UmVnaXN0cmF0aW9uSWQgeyAwIH07Ci0g
ICAgdW5zaWduZWQgbV9wbGF5ZXJSZWdpc3RyYXRpb25JZCB7IDAgfTsKICAgICBib29sIG1faXNT
ZWVraW5nIHsgZmFsc2UgfTsKLSAgICBHUmVmUHRyPEdEQnVzQ29ubmVjdGlvbj4gbV9jb25uZWN0
aW9uOwogICAgIEdSZWZQdHI8R0RCdXNOb2RlSW5mbz4gbV9tcHJpc0ludGVyZmFjZTsKLSAgICBH
UmVmUHRyPEdWYXJpYW50PiBtX25vd1BsYXlpbmdJbmZvOwogCiAgICAgYm9vbCBtX25vd1BsYXlp
bmdBY3RpdmUgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNOb3dQbGF5aW5nQXBw
bGljYXRpb24geyBmYWxzZSB9OwpAQCAtMTExLDggKzk4LDkgQEAgcHJpdmF0ZToKICAgICBNZWRp
YVVuaXF1ZUlkZW50aWZpZXIgbV9sYXN0VXBkYXRlZE5vd1BsYXlpbmdJbmZvVW5pcXVlSWRlbnRp
ZmllcjsKIAogICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxOb3dQbGF5aW5nTWFuYWdlcj4gbV9u
b3dQbGF5aW5nTWFuYWdlcjsKKyAgICBIYXNoTWFwPE1lZGlhU2Vzc2lvbklkZW50aWZpZXIsIHN0
ZDo6dW5pcXVlX3B0cjxNZWRpYVNlc3Npb25HTGliPj4gbV9zZXNzaW9uczsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFVTRShHTElCKQorI2VuZGlmIC8vIFVTRShH
TElCKSAmJiBFTkFCTEUoTUVESUFfU0VTU0lPTikK
</data>

          </attachment>
      

    </bug>

</bugzilla>