<?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>100261</bug_id>
          
          <creation_ts>2012-10-24 09:08:15 -0700</creation_ts>
          <short_desc>[GStreamer] MediaPlayer&apos;s code is not easily reusable by other GStreamer-based players</short_desc>
          <delta_ts>2013-02-09 20:48:24 -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>WebKitGTK</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>87514</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Danilo de Paula">danilo.eu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>jonathon</cc>
    
    <cc>menard</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>rakuco</cc>
    
    <cc>s.choi</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>749726</commentid>
    <comment_count>0</comment_count>
    <who name="Danilo de Paula">danilo.eu</who>
    <bug_when>2012-10-24 09:08:15 -0700</bug_when>
    <thetext>This patch should complete https://bugs.webkit.org/show_bug.cgi?id=94373, which adds the API for the GTK getUserMedia API.

It also contains part of the archtecture for the PeerConnection API,l which will be pushed on the following days.

A more complete patch, with commit message, latter.

Current tests should cover the API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749727</commentid>
    <comment_count>1</comment_count>
      <attachid>170410</attachid>
    <who name="Danilo de Paula">danilo.eu</who>
    <bug_when>2012-10-24 09:09:15 -0700</bug_when>
    <thetext>Created attachment 170410
core patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749732</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-24 09:13:23 -0700</bug_when>
    <thetext>Attachment 170410 did not pass style-queue:

Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:37:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:124:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:125:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:127:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:128:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:129:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:130:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:131:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:132:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:134:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:135:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:136:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:137:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:138:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:139:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:140:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:141:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.cpp:414:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.cpp:618:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:92:  Declaration has space between type name and * in MediaStreamComponent *component  [whitespace/declaration] [3]
Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:93:  Declaration has space between type name and * in MediaStreamSource *source  [wFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/GNUmakefile.am&apos;, u&apos;Source/W...&quot; exit_code: 1
hitespace/declaration] [3]
Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:100:  Declaration has space between type name and * in MediaStreamComponent *component  [whitespace/declaration] [3]
Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:101:  Declaration has space between type name and * in MediaStreamSource *source  [whitespace/declaration] [3]
Total errors found: 25 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749744</commentid>
    <comment_count>3</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-10-24 09:27:22 -0700</bug_when>
    <thetext>Do you plan to factor the copy-pasted code from the mediaplayer to some common module?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749746</commentid>
    <comment_count>4</comment_count>
    <who name="Danilo de Paula">danilo.eu</who>
    <bug_when>2012-10-24 09:34:20 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Do you plan to factor the copy-pasted code from the mediaplayer to some common module?

philippe: actually I think that StreamMediaPlayer and the regular MediaPlayer could be merged in a near future.

But I want to do it in a safe way.
My idea is to push it as a different player now, keep a bug to reminds me/us to remove it in the near future. The thing is that I don&apos;t want to mess up with the current working mediaplayer without testing StreamMediaPlayer pieces in the real world.

What do you think about that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749747</commentid>
    <comment_count>5</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-10-24 09:41:22 -0700</bug_when>
    <thetext>We have buildbots reasonably testing the current player. If possible it&apos;d be better to merge both players now already, in my opinion.

Or minimize the size of that new player, in that state i&apos;m afraid we can&apos;t accept it like that. My humble opinion again :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749763</commentid>
    <comment_count>6</comment_count>
    <who name="Danilo de Paula">danilo.eu</who>
    <bug_when>2012-10-24 10:09:07 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; We have buildbots reasonably testing the current player. If possible it&apos;d be better to merge both players now already, in my opinion.
&gt; 
&gt; Or minimize the size of that new player, in that state i&apos;m afraid we can&apos;t accept it like that. My humble opinion again :)

I quite agree with you, but I&apos;m afraid that reduce the player might not be possible. Maybe the right way to go is to merge them now. I will work on it.

Also, my concern is about the CentralPipeLine unit. Is a global/static unit that controls/splits the gst elements thought the units who might use it. Might looks bloat to getUserMedia API, but it&apos;s a important component for the PeerConnection API. Is it ok to keep static/global units on webkit1?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749784</commentid>
    <comment_count>7</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-10-24 10:23:19 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; Also, my concern is about the CentralPipeLine unit. Is a global/static unit that controls/splits the gst elements thought the units who might use it. Might looks bloat to getUserMedia API, but it&apos;s a important component for the PeerConnection API. Is it ok to keep static/global units on webkit1?

Hum I&apos;m not familiar enough with those APIs to answer that question properly I think... How is it implemented in chromium?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749861</commentid>
    <comment_count>8</comment_count>
      <attachid>170410</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-10-24 11:31:20 -0700</bug_when>
    <thetext>Comment on attachment 170410
core patch

Attachment 170410 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/14546306</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820580</commentid>
    <comment_count>9</comment_count>
      <attachid>185577</attachid>
    <who name="Jonathon Jongsma (jonner)">jonathon</who>
    <bug_when>2013-01-30 14:32:22 -0800</bug_when>
    <thetext>Created attachment 185577
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821145</commentid>
    <comment_count>10</comment_count>
      <attachid>185577</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-01-30 23:48:14 -0800</bug_when>
    <thetext>Comment on attachment 185577
Patch

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

Ok it looks good but I haven&apos;t made a full review because the patch is not based on ToT. Can you rebase it please? There were several changes recently including audio pitch preservation and native fullscreen support (with GStreamerGWorld). Having a rebased patch will also allow the EWS to chew this up :)

&gt; Source/WebCore/ChangeLog:9
&gt; +        [gtk] Refactor the media player implementation so more of the
&gt; +        internal functionality can be shared between the current media
&gt; +        backend and the mediastream player backend.  Common code is
&gt; +        broken out into a MediaPlayerPrivateGStreamerBase, and both
&gt; +        MediaPlayerPrivateGStreamer and
&gt; +        StreamMediaPlayerPrivateGStreamer inherit from this base class.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=100261

The change description is ok but doesn&apos;t comply with the ChangeLog format :) Usually it&apos;s:

bug title
bug url

Reviewed by ....

change description

&gt; Source/WebCore/ChangeLog:13
&gt; +        No new tests (OOPS!).

You can remove this line or simply state existing media tests cover this patch.

&gt; Source/WebCore/GNUmakefile.list.am:6065
&gt; +	Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp \
&gt; +	Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h \

The Qt and EFL build systems need similar changes.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:262
&gt; +#if 0 // implementation from StreamMediaPlayer

Perhaps this block can be removed for now

&gt; Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:28
&gt; +typedef struct _WebKitVideoSink WebKitVideoSink;

You can remove this I think

&gt; Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:35
&gt; +class GStreamerGWorld;

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824681</commentid>
    <comment_count>11</comment_count>
      <attachid>186444</attachid>
    <who name="Jonathon Jongsma (jonner)">jonathon</who>
    <bug_when>2013-02-04 13:11:40 -0800</bug_when>
    <thetext>Created attachment 186444
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824688</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-04 13:14:54 -0800</bug_when>
    <thetext>Attachment 186444 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/PlatformEfl.cmake&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCore/platform/graphics/MediaPlayer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gstreamer/FullscreenVideoControllerGStreamer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gstreamer/FullscreenVideoControllerGStreamer.h&apos;, u&apos;Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h&apos;, u&apos;Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h&apos;, u&apos;Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h&apos;, u&apos;Source/WebCore/platform/graphics/gtk/FullscreenVideoControllerGtk.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gtk/FullscreenVideoControllerGtk.h&apos;, u&apos;configure.ac&apos;]&quot; exit_code: 1
Source/WebCore/platform/graphics/gstreamer/FullscreenVideoControllerGStreamer.h:38:  The parameter name &quot;player&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824986</commentid>
    <comment_count>13</comment_count>
      <attachid>186444</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-04 18:13:02 -0800</bug_when>
    <thetext>Comment on attachment 186444
Patch

Attachment 186444 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16375453</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825039</commentid>
    <comment_count>14</comment_count>
      <attachid>186444</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-04 19:36:48 -0800</bug_when>
    <thetext>Comment on attachment 186444
Patch

Attachment 186444 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16375482</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825447</commentid>
    <comment_count>15</comment_count>
      <attachid>186444</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-02-05 06:45:41 -0800</bug_when>
    <thetext>Comment on attachment 186444
Patch

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

Looks good overall, the Stream player seems quite incomplete though, I wonder if it&apos;d make sense to have only the refactoring in this patch and keep a minimal-working stream player for a separate patch?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:156
&gt; +            guint m_videoCapsHandler;

This doesn&apos;t seem used anywhere?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:283
&gt; +    // FIXME: use implementation from StreamMediaPlayer??

I don&apos;t understand this FIXME, is it a left-over from a previous version of the patch?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:368
&gt; +// creates and initializes a bunch of internal internal variables, and returns a

Double &quot;internal&quot; :) Also comments should be full sentences.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:110
&gt; +    GRefPtr&lt;GstStreamVolume&gt; m_volume;

This name could be confusing, what about m_volumeElement? Also, OOC don&apos;t we need a GRefPtr specific implementation for GstStreamVolume, which is an interface, I&apos;m not sure how it combines with GRefPtr in this patch.

&gt; Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.cpp:126
&gt; +        // go go go

Hum :)

&gt; Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:89
&gt; +    GstElement* m_videoSinkBin;
&gt; +    GstElement* m_audioSinkBin;

Why not reuse the ones from the base class?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825505</commentid>
    <comment_count>16</comment_count>
    <who name="Jonathon Jongsma (jonner)">jonathon</who>
    <bug_when>2013-02-05 08:42:49 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Looks good overall, the Stream player seems quite incomplete though, I wonder if it&apos;d make sense to have only the refactoring in this patch and keep a minimal-working stream player for a separate patch?

Yeah, I was debating that as well.  I can do that if you&apos;d like.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:156
&gt; &gt; +            guint m_videoCapsHandler;
&gt; 
&gt; This doesn&apos;t seem used anywhere?

Oops, left over from a different approach 

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:283
&gt; &gt; +    // FIXME: use implementation from StreamMediaPlayer??
&gt; 
&gt; I don&apos;t understand this FIXME, is it a left-over from a previous version of the patch?

yeah, I&apos;ll remove.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:110
&gt; &gt; +    GRefPtr&lt;GstStreamVolume&gt; m_volume;
&gt; 
&gt; This name could be confusing, what about m_volumeElement? Also, OOC don&apos;t we need a GRefPtr specific implementation for GstStreamVolume, which is an interface, I&apos;m not sure how it combines with GRefPtr in this patch.

Well, since there&apos;s no template specialization for GstStreamVolume, it should just use the un-specialized implementation (GRefPtr&lt;T&gt;), which is the implementation for GObject (g_object_ref_sink/g_object_unref).  Since GstStreamVolume has &apos;GObject&apos; as its only prerequisite, this is probably correct behavior, right?

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.cpp:126
&gt; &gt; +        // go go go
&gt; 
&gt; Hum :)

Hmm, left over from the implementation.  if I remove the stream player from this patch, we can deal with that later :)

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/StreamMediaPlayerPrivateGStreamer.h:89
&gt; &gt; +    GstElement* m_videoSinkBin;
&gt; &gt; +    GstElement* m_audioSinkBin;
&gt; 
&gt; Why not reuse the ones from the base class?

Oops, thanks for catching that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825510</commentid>
    <comment_count>17</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-02-05 08:55:39 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; Looks good overall, the Stream player seems quite incomplete though, I wonder if it&apos;d make sense to have only the refactoring in this patch and keep a minimal-working stream player for a separate patch?
&gt; 
&gt; Yeah, I was debating that as well.  I can do that if you&apos;d like.
&gt; 

Yes please!

Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:110
&gt; &gt; &gt; +    GRefPtr&lt;GstStreamVolume&gt; m_volume;
&gt; &gt; 
&gt; &gt; This name could be confusing, what about m_volumeElement? Also, OOC don&apos;t we need a GRefPtr specific implementation for GstStreamVolume, which is an interface, I&apos;m not sure how it combines with GRefPtr in this patch.
&gt; 
&gt; Well, since there&apos;s no template specialization for GstStreamVolume, it should just use the un-specialized implementation (GRefPtr&lt;T&gt;), which is the implementation for GObject (g_object_ref_sink/g_object_unref).  Since GstStreamVolume has &apos;GObject&apos; as its only prerequisite, this is probably correct behavior, right?
&gt; 

Ah right indeed. Thanks for clarifying :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825767</commentid>
    <comment_count>18</comment_count>
      <attachid>186691</attachid>
    <who name="Jonathon Jongsma (jonner)">jonathon</who>
    <bug_when>2013-02-05 13:23:44 -0800</bug_when>
    <thetext>Created attachment 186691
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826157</commentid>
    <comment_count>19</comment_count>
      <attachid>186691</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-02-06 00:18:54 -0800</bug_when>
    <thetext>Comment on attachment 186691
Patch

Ok it looks good but then the bug title doesn&apos;t make sense anymore since the patch is now a pure refactoring, can you retitle and update ChangeLogs accordingly before landing this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826481</commentid>
    <comment_count>20</comment_count>
      <attachid>186864</attachid>
    <who name="Jonathon Jongsma (jonner)">jonathon</who>
    <bug_when>2013-02-06 08:49:50 -0800</bug_when>
    <thetext>Created attachment 186864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826490</commentid>
    <comment_count>21</comment_count>
      <attachid>186864</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-02-06 09:06:28 -0800</bug_when>
    <thetext>Comment on attachment 186864
Patch

No need for r+ I think since you&apos;ve set the Reviewed by field already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826523</commentid>
    <comment_count>22</comment_count>
      <attachid>186864</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-06 10:17:07 -0800</bug_when>
    <thetext>Comment on attachment 186864
Patch

Clearing flags on attachment: 186864

Committed r142005: &lt;http://trac.webkit.org/changeset/142005&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826524</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-06 10:17:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170410</attachid>
            <date>2012-10-24 09:09:15 -0700</date>
            <delta_ts>2013-02-06 09:12:47 -0800</delta_ts>
            <desc>core patch</desc>
            <filename>webkit.patch</filename>
            <type>text/plain</type>
            <size>83765</size>
            <attacher name="Danilo de Paula">danilo.eu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMGRhYzQzYzAuLmY5ODg3OTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCkBAIC0xMTYsNiArMTE2LDcgQEAgd2ViY29yZWd0a19jcHBmbGFncyArPSBcCiAJLUkk
KHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIFwKIAkt
SSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsgXAogCS1JJChz
cmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ayBcCisJLUkkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAgXAogCS1JJChzcmNkaXIpL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZW5jaGFudAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQppbmRleCA3YTY0YTE4Li45ZGE2MWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KQEAgLTQ2MzYsOCArNDYzNiw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDVm9pZFJlcXVlc3QuaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvci5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Nlc3Npb25EZXNjcmlw
dGlvbkRlc2NyaXB0b3IuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVh
bWVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svRGV2aWNlTW90aW9uQ2xpZW50
TW9jay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svRGV2aWNlTW90aW9uQ2xp
ZW50TW9jay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0RldmljZU9yaWVudGF0
aW9uQ2xpZW50TW9jay5jcHAgXApAQCAtNTkyNiw2ICs1OTI0LDggQEAgd2ViY29yZWd0a19zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1h
Z2VHU3RyZWFtZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBc
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1N0cmVhbU1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9TdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtVmlkZW9X
aW5kb3dHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvUGxhdGZvcm1WaWRlb1dpbmRvdy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBcCkBAIC02MDExLDcgKzYwMTEs
MTQgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvU291bmRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3Rr
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRl
eHQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29u
dGV4dC5oCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRl
eHQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0Nl
bnRyYWxQaXBlbGluZVVuaXQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0NlbnRyYWxQaXBlbGluZVVuaXQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVk
aWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJl
YW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1NvdXJjZUZhY3RvcnkuaAogCiBpZiBUQVJHRVRfWDExCiB3
ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDM3N2U4ZGMuLjZjODFmODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTQ2LDYg
KzQ2LDkgQEAKIAogI2lmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmgiCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNpbmNsdWRlICJTdHJl
YW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCIKKyNlbmRpZgogI2RlZmluZSBQbGF0Zm9y
bU1lZGlhRW5naW5lQ2xhc3NOYW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcgogI2VuZGlm
CiAKQEAgLTIwOSw2ICsyMTIsMTAgQEAgc3RhdGljIFZlY3RvcjxNZWRpYVBsYXllckZhY3Rvcnkq
PiYgaW5zdGFsbGVkTWVkaWFFbmdpbmVzKCkKICAgICBpZiAoIWVuZ2luZXNRdWVyaWVkKSB7CiAg
ICAgICAgIGVuZ2luZXNRdWVyaWVkID0gdHJ1ZTsKIAorI2lmIFVTRShHU1RSRUFNRVIpICYmIEVO
QUJMRShNRURJQV9TVFJFQU0pCisgICAgICAgIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CisjZW5kaWYKKwogI2lm
IFVTRShBVkZPVU5EQVRJT04pCiAgICAgICAgIGlmIChTZXR0aW5nczo6aXNBVkZvdW5kYXRpb25F
bmFibGVkKCkpIHsKICNpZiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9T
dHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmY2ZDFkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcApAQCAtMCwwICsxLDY2NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIg
Q29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIlN0cmVhbU1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAiQ2VudHJhbFBpcGVsaW5lVW5pdC5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lckdXb3JsZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkltYWdlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIk1lZGlhU3Ry
ZWFtUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIKKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIHN0
cmVhbU1lZGlhUGxheWVyUHJpdmF0ZVZvbHVtZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiBlbGVt
ZW50LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSk7Cit2b2lkIHN0cmVhbU1lZGlh
UGxheWVyUHJpdmF0ZU11dGVDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCogZWxlbWVudCwgR1BhcmFt
U3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpOworZ2Jvb2xlYW4gc3RyZWFtTWVkaWFQbGF5ZXJQ
cml2YXRlVm9sdW1lQ2hhbmdlVGltZW91dENhbGxiYWNrKFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lciopOworZ2Jvb2xlYW4gc3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlTXV0ZUNoYW5n
ZVRpbWVvdXRDYWxsYmFjayhTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKKwor
CitzdGF0aWMgYm9vbCBkb0dzdEluaXQoKTsKKworc3RhdGljIGludCBncmVhdGVzdENvbW1vbkRp
dmlzb3IoaW50IGEsIGludCBiKQoreworICAgIHdoaWxlIChiKSB7CisgICAgICAgIGludCB0ZW1w
ID0gYTsKKyAgICAgICAgYSA9IGI7CisgICAgICAgIGIgPSB0ZW1wICUgYjsKKyAgICB9CisKKyAg
ICByZXR1cm4gQUJTKGEpOworfQorCit2b2lkIHN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZVZvbHVt
ZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0ICplbGVtZW50LCBHUGFyYW1TcGVjICpwc3BlYywgZ3Bv
aW50ZXIgZGF0YSkKK3sKKyAgICBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIG1w
ID0gcmVpbnRlcnByZXRfY2FzdDxTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqPihk
YXRhKTsKKyAgICBtcC0+dm9sdW1lQ2hhbmdlZCgpOworfQorCitnYm9vbGVhbiBzdHJlYW1NZWRp
YVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2VUaW1lb3V0Q2FsbGJhY2soU3RyZWFtTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7CisgICAgcGxheWVyLT5ub3RpZnlQbGF5ZXJP
ZlZvbHVtZUNoYW5nZSgpOworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBzdHJlYW1NZWRp
YVBsYXllclByaXZhdGVNdXRlQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QgKmVsZW1lbnQsIEdQYXJh
bVNwZWMgKnBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAgIFN0cmVhbU1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lciogbXAgPSByZWludGVycHJldF9jYXN0PFN0cmVhbU1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcio+KGRhdGEpOworICAgIG1wLT5tdXRlQ2hhbmdlZCgpOworfQorCitnYm9v
bGVhbiBzdHJlYW1NZWRpYVBsYXllclByaXZhdGVNdXRlQ2hhbmdlVGltZW91dENhbGxiYWNrKFN0
cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQoreworICAgIHBsYXllci0+
bm90aWZ5UGxheWVyT2ZNdXRlKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCisKK1N0cmVhbU1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKE1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBtX3BsYXllcihwbGF5ZXIpCisgICAgLCBt
X3dlYmtpdFZpZGVvU2luaygwKQorICAgICwgbV92aWRlb1NpbmtCaW4oMCkKKyAgICAsIG1fYXVk
aW9TaW5rQmluKDApCisgICAgLCBtX3ZvbHVtZSgwKQorICAgICwgbV9idWZmZXIoMCkKKyAgICAs
IG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpFbXB0eSkKKyAgICAsIG1fcmVhZHlTdGF0ZShN
ZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCisgICAgLCBtX3BhdXNlZCh0cnVlKQorICAgICwgbV9z
dG9wcGVkKHRydWUpCisgICAgLCBtX3ZvbHVtZVRpbWVySGFuZGxlcigwKQorICAgICwgbV9tdXRl
VGltZXJIYW5kbGVyKDApCisgICAgLCBtX3JlcGFpbnRDYWxsYmFja0hhbmRsZXJJZCgwKQorewor
ICAgIExPRyhNZWRpYSwgIlNyZWFtTWVkaWFQbGF5ZXIgLSBDcmVhdGluZyBTdHJlYW0gbWVkaWEg
cGxheWVyIik7CisKKyAgICBpZiAoZG9Hc3RJbml0KCkpIHsKKyAgICAgICAgY3JlYXRlR1NUVmlk
ZW9TaW5rQmluKCk7CisgICAgICAgIGNyZWF0ZUdTVEF1ZGlvU2lua0JpbigpOworICAgIH0KK30K
KworU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+U3RyZWFtTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyKCkKK3sKKyAgICBMT0coTWVkaWEsICJTdHJlYW1NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIgZGVzdHJ1Y3RvciBjYWxsZWQuIik7CisKKyAgICBnX3NpZ25hbF9oYW5k
bGVyX2Rpc2Nvbm5lY3QobV93ZWJraXRWaWRlb1NpbmssIG1fcmVwYWludENhbGxiYWNrSGFuZGxl
cklkKTsKKworICAgIGlmIChtX2J1ZmZlcikKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihtX2J1
ZmZlcik7CisgICAgbV9idWZmZXIgPSAwOworCisgICAgc3RvcCgpOworCisgICAgaWYgKG1fYXVk
aW9TaW5rQmluKSB7CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYobV9hdWRpb1NpbmtCaW4pOwor
ICAgICAgICBtX2F1ZGlvU2lua0JpbiA9IDA7CisgICAgfQorCisgICAgaWYgKG1fdmlkZW9TaW5r
QmluKSB7CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYobV92aWRlb1NpbmtCaW4pOworICAgICAg
ICBtX3ZpZGVvU2lua0JpbiA9IDA7CisgICAgfQorCisgICAgaWYgKG1fdm9sdW1lKSB7CisgICAg
ICAgIGdzdF9vYmplY3RfdW5yZWYobV92b2x1bWUpOworICAgICAgICBtX3ZvbHVtZSA9IDA7Cisg
ICAgfQorCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCisKKyAgICBpZiAobV93ZWJraXRWaWRl
b1NpbmspIHsKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihtX3dlYmtpdFZpZGVvU2luayk7Cisg
ICAgICAgIG1fd2Via2l0VmlkZW9TaW5rID0gMDsKKyAgICB9CisjZW5kaWYKKworICAgIG1fcGxh
eWVyID0gMDsKKworICAgIGlmIChtX211dGVUaW1lckhhbmRsZXIpCisgICAgICAgIGdfc291cmNl
X3JlbW92ZShtX211dGVUaW1lckhhbmRsZXIpOworCisgICAgaWYgKG1fdm9sdW1lVGltZXJIYW5k
bGVyKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV92b2x1bWVUaW1lckhhbmRsZXIpOworfQor
Cit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxheSgpCit7CisgICAg
TE9HKE1lZGlhLCAiU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5KCkgY2Fs
bGVkLiIpOworCisgICAgaWYgKCFtX3N0cmVhbURlc2NyaXB0b3IgfHwgbV9zdHJlYW1EZXNjcmlw
dG9yLT5lbmRlZCgpKSB7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZl
Tm90aGluZzsKKyAgICAgICAgbG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6RW1wdHkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wYXVzZWQgPSBmYWxzZTsKKyAgICBpbnRlcm5h
bExvYWQoKTsKK30KKwordm9pZCBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBh
dXNlKCkKK3sKKyAgICBMT0coTWVkaWEsICJTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnBhdXNlKCkgY2FsbGVkLiIpOworICAgIG1fcGF1c2VkID0gdHJ1ZTsKKyAgICBzdG9wKCk7
Cit9CisKKworYm9vbCBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Omhhc1ZpZGVv
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fdmlkZW9Tb3VyY2VJZC5pc0VtcHR5KCk7Cit9CisK
K2Jvb2wgU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYXNBdWRpbygpIGNvbnN0
Cit7CisgICAgcmV0dXJuICFtX2F1ZGlvU291cmNlSWQuaXNFbXB0eSgpOworfQorCit2b2lkIFN0
cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkK
K3sKKyAgICBpZiAoIW1fdm9sdW1lKQorICAgICAgICByZXR1cm47CisgICAgZ19vYmplY3Rfc2V0
KG1fdm9sdW1lLCAidm9sdW1lIiwgc3RhdGljX2Nhc3Q8ZG91YmxlPih2b2x1bWUpLCBOVUxMKTsK
K30KKwordm9pZCBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXll
ck9mVm9sdW1lQ2hhbmdlKCkKK3sKKyAgICBtX3ZvbHVtZVRpbWVySGFuZGxlciA9IDA7CisKKyAg
ICBpZiAoIW1fcGxheWVyIHx8ICFtX3ZvbHVtZSkKKyAgICAgICAgcmV0dXJuOworICAgIGRvdWJs
ZSB2b2x1bWU7CisgICAgZ19vYmplY3RfZ2V0KG1fdm9sdW1lLCAidm9sdW1lIiwgJnZvbHVtZSwg
TlVMTCk7CisgICAgbV9wbGF5ZXItPnZvbHVtZUNoYW5nZWQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZv
bHVtZSkpOworfQorCit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dm9s
dW1lQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fdm9sdW1lVGltZXJIYW5kbGVyKQorICAgICAgICBn
X3NvdXJjZV9yZW1vdmUobV92b2x1bWVUaW1lckhhbmRsZXIpOworICAgIG1fdm9sdW1lVGltZXJI
YW5kbGVyID0gZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihz
dHJlYW1NZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2VUaW1lb3V0Q2FsbGJhY2spLCB0aGlz
KTsKK30KKworCitib29sIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9y
dHNNdXRpbmcoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFN0cmVhbU1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3sKKyAgICBp
ZiAoIW1fdm9sdW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBnX29iamVjdF9zZXQobV92b2x1
bWUsICJtdXRlIiwgbXV0ZWQsIE5VTEwpOworfQorCit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZNdXRlKCkKK3sKKyAgICBtX211dGVUaW1lckhh
bmRsZXIgPSAwOworCisgICAgaWYgKCFtX3BsYXllciB8fCAhbV92b2x1bWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGdib29sZWFuIG11dGVkOworICAgIGdfb2JqZWN0X2dldChtX3ZvbHVtZSwg
Im11dGUiLCAmbXV0ZWQsIE5VTEwpOworICAgIG1fcGxheWVyLT5tdXRlQ2hhbmdlZChzdGF0aWNf
Y2FzdDxib29sPihtdXRlZCkpOworfQorCit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6bXV0ZUNoYW5nZWQoKQoreworICAgIGlmIChtX211dGVUaW1lckhhbmRsZXIpCisg
ICAgICAgIGdfc291cmNlX3JlbW92ZShtX211dGVUaW1lckhhbmRsZXIpOworICAgIG1fbXV0ZVRp
bWVySGFuZGxlciA9IGdfdGltZW91dF9hZGQoMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVu
Yz4oc3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlTXV0ZUNoYW5nZVRpbWVvdXRDYWxsYmFjayksIHRo
aXMpOworfQorCisKK3ZvaWQgU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2Fk
KGNvbnN0IFN0cmluZyAmdXJsKQoreworICAgIExPRyhNZWRpYSwgIlN0cmVhbUFQSSAtIFN0cmVh
bSBtZWRpYSBwbGF5ZXIgLSBsb2FkICVzIiwgdXJsLnV0ZjgoKS5kYXRhKCkpOworCisgICAgbV9z
dHJlYW1EZXNjcmlwdG9yID0gTWVkaWFTdHJlYW1SZWdpc3RyeTo6cmVnaXN0cnkoKS5sb29rdXBN
ZWRpYVN0cmVhbURlc2NyaXB0b3IodXJsKTsKKyAgICBpZiAoIW1fc3RyZWFtRGVzY3JpcHRvciB8
fCBtX3N0cmVhbURlc2NyaXB0b3ItPmVuZGVkKCkpIHsKKyAgICAgICAgbG9hZGluZ0ZhaWxlZChN
ZWRpYVBsYXllcjo6TmV0d29ya0Vycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICBtX25ldHdvcmtT
dGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVD
aGFuZ2VkKCk7CisgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisKKyAgICBpZiAo
IWludGVybmFsTG9hZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzVmlkZW8oKSkg
eworICAgICAgICAvLyBXYWl0IGZvciBmaXJzdCB2aWRlbyBmcmFtZSB0byBzZXQgSGF2ZUVub3Vn
aERhdGEKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGdvIGdvIGdvCisgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICB9CisKKyAgICBtX3BsYXllci0+cmVh
ZHlTdGF0ZUNoYW5nZWQoKTsKKworfQorCit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6bG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKQor
eworCisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IGVycm9yKSB7CisgICAgICAgIG1fbmV0d29y
a1N0YXRlID0gZXJyb3I7CisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7
CisgICAgfQorICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5n
KSB7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAg
ICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgfQorfQorCitib29sIFN0
cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdHJlYW1NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmludGVybmFsTG9hZCgpCit7CisgICAgaWYgKG1fc3RvcHBlZCkgeworICAg
ICAgICBtX3N0b3BwZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFtX3N0cmVhbURlc2NyaXB0b3Ig
fHwgbV9zdHJlYW1EZXNjcmlwdG9yLT5lbmRlZCgpKSB7CisgICAgICAgICAgICBsb2FkaW5nRmFp
bGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBjb25uZWN0VG9HU1RMaXZlU3RyZWFtKG1fc3Ry
ZWFtRGVzY3JpcHRvci5nZXQoKSk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN0b3AoKQoreworICAgIGlmICgh
bV9zdG9wcGVkKSB7CisgICAgICAgIG1fc3RvcHBlZCA9IHRydWU7CisgICAgICAgIENlbnRyYWxQ
aXBlbGluZVVuaXQmIGNwdSA9IGNlbnRyYWxQaXBlbGluZVVuaXQoKTsKKyAgICAgICAgaWYgKCFt
X2F1ZGlvU291cmNlSWQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBMT0coTWVkaWEsICJTdHJl
YW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgc3RvcDogZGlzY29ubmVjdGluZyBhdWRpbyIp
OworICAgICAgICAgICAgY3B1LmRpc2Nvbm5lY3RGcm9tU291cmNlKG1fYXVkaW9Tb3VyY2VJZCwg
bV9hdWRpb1NpbmtCaW4pOworICAgICAgICB9CisgICAgICAgIGlmICghbV92aWRlb1NvdXJjZUlk
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTE9HKE1lZGlhLCAiU3RyZWFtTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyIHN0b3A6IGRpc2Nvbm5lY3RpbmcgdmlkZW8iKTsKKyAgICAgICAgICAg
IGNwdS5kaXNjb25uZWN0RnJvbVNvdXJjZShtX3ZpZGVvU291cmNlSWQsIG1fdmlkZW9TaW5rQmlu
KTsKKyAgICAgICAgfQorICAgICAgICBtX2F1ZGlvU291cmNlSWQgPSAiIjsKKyAgICAgICAgbV92
aWRlb1NvdXJjZUlkID0gIiI7CisgICAgfQorfQorCisKK3ZvaWQgbWVkaWFQbGF5ZXJQcml2YXRl
UmVwYWludENhbGxiYWNrKFdlYktpdFZpZGVvU2luayosIEdzdEJ1ZmZlciAqYnVmZmVyLCBTdHJl
YW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllclByaXZhdGUpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChHU1RfSVNfQlVGRkVSKGJ1ZmZlcikpOworCisgICAgaWYgKCFwbGF5ZXJQ
cml2YXRlLT5tX2J1ZmZlcikgeworICAgICAgICBwbGF5ZXJQcml2YXRlLT5tX3JlYWR5U3RhdGUg
PSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAgIHBsYXllclByaXZhdGUtPm1f
cGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIH0KKworICAgIGlmICghcGxheWVyUHJp
dmF0ZS0+bV9wYXVzZWQgfHwgIXBsYXllclByaXZhdGUtPm1fYnVmZmVyKSB7CisgICAgICAgIGdz
dF9idWZmZXJfcmVwbGFjZSgmcGxheWVyUHJpdmF0ZS0+bV9idWZmZXIsIGJ1ZmZlcik7CisKKyAg
ICAgICAgSW50U2l6ZSBzaXplID0gcGxheWVyUHJpdmF0ZS0+Y2FsY3VsYXRlU2l6ZSgpOworICAg
ICAgICBwbGF5ZXJQcml2YXRlLT51cGRhdGVDdXJyZW50U2l6ZShzaXplKTsKKworICAgICAgICBw
bGF5ZXJQcml2YXRlLT5yZXBhaW50KCk7CisgICAgfQorfQorCisKK1Bhc3NPd25QdHI8TWVkaWFQ
bGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcg
U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKHBsYXllcikpOworfQorCit2b2lkIFN0
cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRp
YUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgaWYgKGlzQXZhaWxhYmxlKCkpCisg
ICAgICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUs
IDAsIDAsIDApOworfQorCit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcykKK3sKKyAgICB0eXBlcy5h
ZGQoU3RyaW5nKCJ2aWRlby94LXJhdy15dXYiKSk7CisgICAgdHlwZXMuYWRkKFN0cmluZygiYXVk
aW8veC1yYXctaW50IikpOworfQorCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIFN0cmVhbU1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlw
ZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBVTlVTRURf
UEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKGNvZGVjcyk7CisKKyAgICBpZiAodXJsLmlz
TnVsbCgpIHx8IHVybC5pc0VtcHR5KCkgfHwgIXVybC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
biBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICByZXR1cm4gTWVkaWFTdHJlYW1S
ZWdpc3RyeTo6cmVnaXN0cnkoKS5sb29rdXBNZWRpYVN0cmVhbURlc2NyaXB0b3IodXJsLnN0cmlu
ZygpKSA/IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJc05vdFN1cHBv
cnRlZDsKK30KKworc3RhdGljIGJvb2wgZ3N0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworc3RhdGlj
IGJvb2wgZG9Hc3RJbml0KCkKK3sKKyAgICBpZiAoIWdzdEluaXRpYWxpemVkKSB7CisgICAgICAg
IEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgZ3N0SW5pdGlhbGl6ZWQgPSBnc3RfaW5p
dF9jaGVjaygwLCAwLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIH0KKyAgICByZXR1cm4gZ3N0SW5p
dGlhbGl6ZWQ7Cit9CisKKworYm9vbCBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmlzQXZhaWxhYmxlKCkKK3sKKworICAgIGlmICghZG9Hc3RJbml0KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCisKK3ZvaWQgU3RyZWFtTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpyZXBhaW50KCkKK3sKKyAgICBtX3BsYXllci0+cmVwYWludCgp
OworfQorCit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChj
b250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bV9wbGF5ZXItPnZpc2libGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9idWZmZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIEdzdENhcHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9j
YXBzKG1fYnVmZmVyKTsKKyAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0gSW1h
Z2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKG1fYnVmZmVyLCBjYXBzKTsKKyAgICBnc3RfY2Fwc191
bnJlZihjYXBzKTsKKyAgICBpZiAoIWdzdEltYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBj
b250ZXh0LT5kcmF3SW1hZ2UocmVpbnRlcnByZXRfY2FzdDxJbWFnZSo+KGdzdEltYWdlLT5pbWFn
ZSgpLmdldCgpKSwgQ29sb3JTcGFjZVNSR0IsCisgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qs
IENvbXBvc2l0ZUNvcHksIFdlYkNvcmU6OkRvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24sIGZh
bHNlKTsKK30KKworCisvLyBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB2aWRlbworSW50U2l6ZSBT
dHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9jdXJyZW50U2l6ZTsKK30KKworYm9vbCBTdHJlYW1NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitQbGF0Zm9ybU1lZGlhIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6cGxhdGZvcm1NZWRpYSgpIGNvbnN0Cit7CisgICAgUGxhdGZvcm1NZWRpYSBwOworICAg
IHAudHlwZSA9IFBsYXRmb3JtTWVkaWE6OkdTdHJlYW1lckdXb3JsZFR5cGU7CisgICAgcC5tZWRp
YS5nc3RyZWFtZXJHV29ybGQgPSBtX2dzdEdXb3JsZC5nZXQoKTsKKyAgICByZXR1cm4gcDsKK30K
KworCit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUVmlk
ZW9TaW5rQmluKCkKK3sKKyAgICBMT0coTWVkaWEsICJjcmVhdGVHU1RWaWRlb1NpbmtCaW4gY2Fs
bGVkIik7CisgICAgR3N0RWxlbWVudCogcGlwZWxpbmUgPSBjZW50cmFsUGlwZWxpbmVVbml0KCku
cGlwZWxpbmUoKTsKKyAgICBtX2dzdEdXb3JsZCA9IEdTdHJlYW1lckdXb3JsZDo6Y3JlYXRlR1dv
cmxkKHBpcGVsaW5lKTsKKyAgICBtX3dlYmtpdFZpZGVvU2luayA9IHdlYmtpdFZpZGVvU2lua05l
dyhtX2dzdEdXb3JsZC5nZXQoKSk7CisKKyAgICBnY2hhciogbmFtZSA9IGdzdF9lbGVtZW50X2dl
dF9uYW1lKG1fd2Via2l0VmlkZW9TaW5rKTsKKyAgICBMT0coTWVkaWEsICJtX3dlYmtpdFZpZGVv
U2luaz0lcCBuYW1lPSVzIiwgbV93ZWJraXRWaWRlb1NpbmssIG5hbWUpOworCisgICAgbV9yZXBh
aW50Q2FsbGJhY2tIYW5kbGVySWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fd2Via2l0VmlkZW9TaW5r
LCAicmVwYWludC1yZXF1ZXN0ZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVJlcGFp
bnRDYWxsYmFjayksIHRoaXMpOworCisgICAgbV92aWRlb1NpbmtCaW4gPSBnc3RfYmluX25ldygw
KTsKKyAgICBHc3RFbGVtZW50KiBjb2xvcnNwYWNlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtl
KCJmZm1wZWdjb2xvcnNwYWNlIiwgMCk7CisgICAgR3N0RWxlbWVudCogdmlkZW9UZWUgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoInRlZSIsICJ2aWRlb1RlZSIpOworICAgIEdzdEVsZW1lbnQq
IHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIDApOworICAgIEdzdEVs
ZW1lbnQqIGlkZW50aXR5ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJpZGVudGl0eSIsICJ2
aWRlb1ZhbHZlIik7CisKKyAgICAvLyBUYWtlIG93bmVyc2hpcC4KKyAgICBnc3Rfb2JqZWN0X3Jl
Zl9zaW5rKG1fdmlkZW9TaW5rQmluKTsKKworICAgIC8vIEJ1aWxkIGEgbmV3IHZpZGVvIHNpbmsg
Y29uc2lzdGluZyBvZiBhIGJpbiBjb250YWluaW5nIGEgdGVlCisgICAgLy8gKG1lYW50IHRvIGRp
c3RyaWJ1dGUgZGF0YSB0byBtdWx0aXBsZSB2aWRlbyBzaW5rcykgYW5kIG91cgorICAgIC8vIGlu
dGVybmFsIHZpZGVvIHNpbmsuIEZvciBmdWxsc2NyZWVuIHdlIGNyZWF0ZSBhbiBhdXRvdmlkZW9z
aW5rCisgICAgLy8gYW5kIGluaXRpYWxseSBibG9jayB0aGUgZGF0YSBmbG93IHRvd2FyZHMgaXQg
YW5kIGNvbmZpZ3VyZSBpdAorCisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKG1fdmlkZW9T
aW5rQmluKSwgY29sb3JzcGFjZSwgdmlkZW9UZWUsIHF1ZXVlLCBpZGVudGl0eSwgbV93ZWJraXRW
aWRlb1NpbmssIE5VTEwpOworCisgICAgZ3N0X2VsZW1lbnRfbGluayhjb2xvcnNwYWNlLCB2aWRl
b1RlZSk7CisgICAgLy8gTGluayBhIG5ldyBzcmMgcGFkIGZyb20gdGVlIHRvIHF1ZXVlMS4KKyAg
ICBHc3RQYWQqIHNyY1BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCh2aWRlb1RlZSwg
InNyYyVkIik7CisgICAgR3N0UGFkKiBzaW5rUGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQocXVldWUsICJzaW5rIik7CisgICAgZ3N0X3BhZF9saW5rKHNyY1BhZCwgc2lua1BhZCk7Cisg
ICAgZ3N0X29iamVjdF91bnJlZihHU1RfT0JKRUNUKHNyY1BhZCkpOworICAgIGdzdF9vYmplY3Rf
dW5yZWYoR1NUX09CSkVDVChzaW5rUGFkKSk7CisgICAgZ3N0X2VsZW1lbnRfbGlua19tYW55KHF1
ZXVlLCBpZGVudGl0eSwgbV93ZWJraXRWaWRlb1NpbmssIE5VTEwpOworCisgICAgZ19vYmplY3Rf
c2V0KG1fd2Via2l0VmlkZW9TaW5rLCAiYXN5bmMiLCBGQUxTRSwgTlVMTCk7CisKKyAgICAvLyBB
ZGQgYSBnaG9zdHBhZCB0byB0aGUgYmluIHNvIGl0IGNhbiBwcm94eSB0byB0ZWUuCisgICAgR3N0
UGFkKiBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChjb2xvcnNwYWNlLCAic2luayIp
OworICAgIGdzdF9lbGVtZW50X2FkZF9wYWQobV92aWRlb1NpbmtCaW4sIGdzdF9naG9zdF9wYWRf
bmV3KCJzaW5rIiwgcGFkKSk7CisgICAgZ3N0X29iamVjdF91bnJlZihHU1RfT0JKRUNUKHBhZCkp
OworCit9CisKK3ZvaWQgU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVH
U1RBdWRpb1NpbmtCaW4oKQoreworCisgICAgbV9hdWRpb1NpbmtCaW4gPSBnc3RfYmluX25ldygw
KTsKKyAgICBnc3Rfb2JqZWN0X3JlZl9zaW5rKG1fYXVkaW9TaW5rQmluKTsKKworICAgIG1fdm9s
dW1lID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2b2x1bWUiLCAidm9sdW1lIik7CisKKyAg
ICBnX29iamVjdF9zZXQobV92b2x1bWUsICJtdXRlIiwgbV9wbGF5ZXItPm11dGVkKCksICJ2b2x1
bWUiLCBtX3BsYXllci0+dm9sdW1lKCksIE5VTEwpOworCisgICAgZ19zaWduYWxfY29ubmVjdCht
X3ZvbHVtZSwgIm5vdGlmeTo6dm9sdW1lIiwgR19DQUxMQkFDSyhzdHJlYW1NZWRpYVBsYXllclBy
aXZhdGVWb2x1bWVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KG1fdm9sdW1lLCAibm90aWZ5OjptdXRlIiwgR19DQUxMQkFDSyhzdHJlYW1NZWRpYVBsYXllclBy
aXZhdGVNdXRlQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisKKworICAgIEdzdEVsZW1lbnQqIGF1
ZGlvU2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXV0b2F1ZGlvc2luayIsIDApOwor
ICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihtX2F1ZGlvU2lua0JpbiksIG1fdm9sdW1lLCBh
dWRpb1NpbmssIE5VTEwpOworICAgIGdzdF9lbGVtZW50X2xpbmtfbWFueShtX3ZvbHVtZSwgYXVk
aW9TaW5rLCBOVUxMKTsKKworICAgIEdzdFBhZCogcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRp
Y19wYWQobV92b2x1bWUsICJzaW5rIik7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChtX2F1ZGlv
U2lua0JpbiwgZ3N0X2dob3N0X3BhZF9uZXcoInNpbmsiLCBwYWQpKTsKKyAgICBnc3Rfb2JqZWN0
X3VucmVmKEdTVF9PQkpFQ1QocGFkKSk7Cit9CisKK3ZvaWQgU3RyZWFtTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpzb3VyY2VDaGFuZ2VkU3RhdGUoKQoreworICAgIExPRyhNZWRpYSwgInNv
dXJjZUNoYW5nZWRTdGF0ZSIpOworCisgICAgQ2VudHJhbFBpcGVsaW5lVW5pdCYgY3B1ID0gY2Vu
dHJhbFBpcGVsaW5lVW5pdCgpOworICAgIGlmICghbV9zdHJlYW1EZXNjcmlwdG9yIHx8IG1fc3Ry
ZWFtRGVzY3JpcHRvci0+ZW5kZWQoKSkKKyAgICAgICAgc3RvcCgpOworCisgICAgLy8gY2hlY2sg
aWYgdGhlIHNvdXJjZSBzaG91bGQgYmUgZW5kZWQKKyAgICBpZiAoIW1fYXVkaW9Tb3VyY2VJZC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RyZWFtRGVz
Y3JpcHRvci0+bnVtYmVyT2ZBdWRpb0NvbXBvbmVudHMoKTsgaSsrKSB7CisgICAgICAgICAgICBN
ZWRpYVN0cmVhbUNvbXBvbmVudCogY29tcG9uZW50ID0gbV9zdHJlYW1EZXNjcmlwdG9yLT5hdWRp
b0NvbXBvbmVudChpKTsKKyAgICAgICAgICAgIGlmICghY29tcG9uZW50LT5lbmFibGVkKCkgJiYg
Y29tcG9uZW50LT5zb3VyY2UoKS0+aWQoKSA9PSBtX2F1ZGlvU291cmNlSWQpIHsKKyAgICAgICAg
ICAgICAgICBjcHUuZGlzY29ubmVjdEZyb21Tb3VyY2UobV9hdWRpb1NvdXJjZUlkLCBtX2F1ZGlv
U2lua0Jpbik7CisgICAgICAgICAgICAgICAgbV9hdWRpb1NvdXJjZUlkID0gIiI7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBTYW1lIGNoZWNrIGZvciB2aWRlbworICAgIGlmICghbV92aWRlb1NvdXJjZUlkLmlzRW1wdHko
KSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdHJlYW1EZXNjcmlwdG9y
LT5udW1iZXJPZlZpZGVvQ29tcG9uZW50cygpOyBpKyspIHsKKyAgICAgICAgICAgIE1lZGlhU3Ry
ZWFtQ29tcG9uZW50KiBjb21wb25lbnQgPSBtX3N0cmVhbURlc2NyaXB0b3ItPnZpZGVvQ29tcG9u
ZW50KGkpOworICAgICAgICAgICAgaWYgKCFjb21wb25lbnQtPmVuYWJsZWQoKSAmJiBjb21wb25l
bnQtPnNvdXJjZSgpLT5pZCgpID09IG1fdmlkZW9Tb3VyY2VJZCkgeworICAgICAgICAgICAgICAg
IGNwdS5kaXNjb25uZWN0RnJvbVNvdXJjZShtX3ZpZGVvU291cmNlSWQsIG1fdmlkZW9TaW5rQmlu
KTsKKyAgICAgICAgICAgICAgICBtX3ZpZGVvU291cmNlSWQgPSAiIjsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBTdHJl
YW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvbm5lY3RUb0dTVExpdmVTdHJlYW0oTWVk
aWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9yKQoreworICAgIExPRyhNZWRpYSwg
ImNvbm5lY3RUb0dTVExpdmVTdHJlYW0gY2FsbGVkIik7CisgICAgaWYgKCFzdHJlYW1EZXNjcmlw
dG9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogRXJyb3IgaGFuZGxp
bmcuLiB0aGlzIGNvdWxkIGZhaWwuLiBhbmQgdGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucyBmYWxz
ZS4KKworICAgIENlbnRyYWxQaXBlbGluZVVuaXQmIGNwdSA9IGNlbnRyYWxQaXBlbGluZVVuaXQo
KTsKKworICAgIGlmICghbV9hdWRpb1NvdXJjZUlkLmlzRW1wdHkoKSkgeworICAgICAgICBjcHUu
ZGlzY29ubmVjdEZyb21Tb3VyY2UobV9hdWRpb1NvdXJjZUlkLCBtX2F1ZGlvU2lua0Jpbik7Cisg
ICAgICAgIG1fYXVkaW9Tb3VyY2VJZCA9ICIiOworICAgIH0KKworICAgIGlmICghbV92aWRlb1Nv
dXJjZUlkLmlzRW1wdHkoKSkgeworICAgICAgICBjcHUuZGlzY29ubmVjdEZyb21Tb3VyY2UobV92
aWRlb1NvdXJjZUlkLCBtX3ZpZGVvU2lua0Jpbik7CisgICAgICAgIG1fdmlkZW9Tb3VyY2VJZCA9
ICIiOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHJlYW1EZXNjcmlw
dG9yLT5udW1iZXJPZkF1ZGlvQ29tcG9uZW50cygpOyBpKyspIHsKKyAgICAgICAgTWVkaWFTdHJl
YW1Db21wb25lbnQqIGNvbXBvbmVudCA9IHN0cmVhbURlc2NyaXB0b3ItPmF1ZGlvQ29tcG9uZW50
KGkpOworICAgICAgICBpZiAoIWNvbXBvbmVudC0+ZW5hYmxlZCgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSA9IGNvbXBvbmVudC0+
c291cmNlKCk7CisgICAgICAgIGlmIChzb3VyY2UtPnR5cGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJj
ZTo6VHlwZUF1ZGlvKSB7CisgICAgICAgICAgICBpZiAoY3B1LmNvbm5lY3RUb1NvdXJjZShzb3Vy
Y2UtPmlkKCksIG1fYXVkaW9TaW5rQmluKSkgeworICAgICAgICAgICAgICAgIG1fYXVkaW9Tb3Vy
Y2VJZCA9IHNvdXJjZS0+aWQoKTsKKyAgICAgICAgICAgICAgICBzb3VyY2UtPmFkZE9ic2VydmVy
KHRoaXMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0cmVhbURlc2NyaXB0b3It
Pm51bWJlck9mVmlkZW9Db21wb25lbnRzKCk7IGkrKykgeworICAgICAgICBNZWRpYVN0cmVhbUNv
bXBvbmVudCogY29tcG9uZW50ID0gc3RyZWFtRGVzY3JpcHRvci0+dmlkZW9Db21wb25lbnQoaSk7
CisgICAgICAgIGlmICghY29tcG9uZW50LT5lbmFibGVkKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlID0gY29tcG9uZW50LT5zb3Vy
Y2UoKTsKKyAgICAgICAgaWYgKHNvdXJjZS0+dHlwZSgpID09IE1lZGlhU3RyZWFtU291cmNlOjpU
eXBlVmlkZW8pIHsKKyAgICAgICAgICAgIGlmIChjcHUuY29ubmVjdFRvU291cmNlKHNvdXJjZS0+
aWQoKSwgbV92aWRlb1NpbmtCaW4pKSB7CisgICAgICAgICAgICAgICAgbV92aWRlb1NvdXJjZUlk
ID0gc291cmNlLT5pZCgpOworICAgICAgICAgICAgICAgIHNvdXJjZS0+YWRkT2JzZXJ2ZXIodGhp
cyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSW50U2l6ZSBTdHJlYW1NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmNhbGN1bGF0ZVNpemUoKQoreworCisgICAgaWYgKCFoYXNWaWRlbygp
KQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgR3N0UGFkKiBwYWQgPSBnc3RfZWxl
bWVudF9nZXRfc3RhdGljX3BhZChtX3dlYmtpdFZpZGVvU2luaywgInNpbmsiKTsKKyAgICBpZiAo
IXBhZCkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIGd1aW50NjQgd2lkdGggPSAw
LCBoZWlnaHQgPSAwOworICAgIEdzdENhcHMqIGNhcHMgPSBHU1RfUEFEX0NBUFMocGFkKTsKKyAg
ICBpbnQgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5h
dG9yOworICAgIGludCBkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWlnaHQsIGRpc3BsYXlBc3BlY3RS
YXRpb0dDRDsKKyAgICBpbnQgb3JpZ2luYWxXaWR0aCA9IDAsIG9yaWdpbmFsSGVpZ2h0ID0gMDsK
KworICAgIC8vIFRPRE86IGhhbmRsZSBwb3NzaWJsZSBjbGVhbiBhcGVydHVyZSBkYXRhLiBTZWUK
KyAgICAvLyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2NTcx
CisgICAgLy8gVE9ETzogaGFuZGxlIHBvc3NpYmxlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4gU2Vl
CisgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU5NjMy
NgorCisgICAgLy8gR2V0IHRoZSB2aWRlbyBQQVIgYW5kIG9yaWdpbmFsIHNpemUuCisgICAgaWYg
KCFHU1RfSVNfQ0FQUyhjYXBzKSB8fCAhZ3N0X2NhcHNfaXNfZml4ZWQoY2FwcykKKyAgICAgICAg
fHwgIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAwLCAmb3JpZ2luYWxXaWR0aCwg
Jm9yaWdpbmFsSGVpZ2h0KQorICAgICAgICB8fCAhZ3N0X3ZpZGVvX3BhcnNlX2NhcHNfcGl4ZWxf
YXNwZWN0X3JhdGlvKGNhcHMsICZwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaXhlbEFzcGVjdFJh
dGlvRGVub21pbmF0b3IpKSB7CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoR1NUX09CSkVDVChw
YWQpKTsKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKyAgICB9CisKKyAgICBnc3Rfb2JqZWN0
X3VucmVmKEdTVF9PQkpFQ1QocGFkKSk7CisKKyAgICAvLyBMT0dfVkVSQk9TRShNZWRpYSwgIk9y
aWdpbmFsIHZpZGVvIHNpemU6ICVkeCVkIiwgb3JpZ2luYWxXaWR0aCwgb3JpZ2luYWxIZWlnaHQp
OworICAgIC8vIExPR19WRVJCT1NFKE1lZGlhLCAiUGl4ZWwgYXNwZWN0IHJhdGlvOiAlZC8lZCIs
IHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvcik7
CisKKyAgICAvLyBDYWxjdWxhdGUgREFSIGJhc2VkIG9uIFBBUiBhbmQgdmlkZW8gc2l6ZS4KKyAg
ICBkaXNwbGF5V2lkdGggPSBvcmlnaW5hbFdpZHRoICogcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRv
cjsKKyAgICBkaXNwbGF5SGVpZ2h0ID0gb3JpZ2luYWxIZWlnaHQgKiBwaXhlbEFzcGVjdFJhdGlv
RGVub21pbmF0b3I7CisKKyAgICAvLyBEaXZpZGUgZGlzcGxheSB3aWR0aCBhbmQgaGVpZ2h0IGJ5
IHRoZWlyIEdDRCB0byBhdm9pZCBwb3NzaWJsZSBvdmVyZmxvd3MuCisgICAgZGlzcGxheUFzcGVj
dFJhdGlvR0NEID0gZ3JlYXRlc3RDb21tb25EaXZpc29yKGRpc3BsYXlXaWR0aCwgZGlzcGxheUhl
aWdodCk7CisgICAgZGlzcGxheVdpZHRoIC89IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKKyAgICBk
aXNwbGF5SGVpZ2h0IC89IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKKworICAgIC8vIEFwcGx5IERB
UiB0byBvcmlnaW5hbCB2aWRlbyBzaXplLiBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIGlu
IHh2aW1hZ2VzaW5rJ3Mgc2V0Y2FwcyBmdW5jdGlvbi4KKyAgICBpZiAoIShvcmlnaW5hbEhlaWdo
dCAlIGRpc3BsYXlIZWlnaHQpKSB7CisgICAgICAgIC8vIExPR19WRVJCT1NFKE1lZGlhLCAiS2Vl
cGluZyB2aWRlbyBvcmlnaW5hbCBoZWlnaHQiKTsKKyAgICAgICAgd2lkdGggPSBnc3RfdXRpbF91
aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsSGVpZ2h0LCBkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWln
aHQpOworICAgICAgICBoZWlnaHQgPSBzdGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbEhlaWdo
dCk7CisgICAgfSBlbHNlIGlmICghKG9yaWdpbmFsV2lkdGggJSBkaXNwbGF5V2lkdGgpKSB7Cisg
ICAgICAgIC8vIExPR19WRVJCT1NFKE1lZGlhLCAiS2VlcGluZyB2aWRlbyBvcmlnaW5hbCB3aWR0
aCIpOworICAgICAgICBoZWlnaHQgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFs
V2lkdGgsIGRpc3BsYXlIZWlnaHQsIGRpc3BsYXlXaWR0aCk7CisgICAgICAgIHdpZHRoID0gc3Rh
dGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxXaWR0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gTE9HX1ZFUkJPU0UoTWVkaWEsICJBcHByb3hpbWF0aW5nIHdoaWxlIGtlZXBpbmcgb3JpZ2lu
YWwgdmlkZW8gaGVpZ2h0Iik7CisgICAgICAgIHdpZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxl
X2ludChvcmlnaW5hbEhlaWdodCwgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKKyAgICAg
ICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxIZWlnaHQpOworICAgIH0K
KworICAgIC8vIExPR19WRVJCT1NFKE1lZGlhLCAiTmF0dXJhbCBzaXplOiAlIiBHX0dVSU5UNjRf
Rk9STUFUICJ4JSIgR19HVUlOVDY0X0ZPUk1BVCwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJu
IEludFNpemUoc3RhdGljX2Nhc3Q8aW50Pih3aWR0aCksIHN0YXRpY19jYXN0PGludD4oaGVpZ2h0
KSk7Cit9CisKK3ZvaWQgU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVD
dXJyZW50U2l6ZShJbnRTaXplJiBzaXplKQoreworICAgIG1fY3VycmVudFNpemUuc2V0V2lkdGgo
c2l6ZS53aWR0aCgpKTsKKyAgICBtX2N1cnJlbnRTaXplLnNldEhlaWdodChzaXplLmhlaWdodCgp
KTsKKyAgICBtX3BsYXllci0+c2l6ZUNoYW5nZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9T
dHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9TdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzg3YjJmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1N0cmVh
bU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBTdHJlYW1NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJfaAorI2RlZmluZSBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKKwor
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgi
CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5r
IFdlYktpdFZpZGVvU2luazsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLVVJMOwor
Y2xhc3MgU3RyZWFtQ29tcG9uZW50OworY2xhc3MgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOworY2xh
c3MgR1N0cmVhbWVyR1dvcmxkOworCitjbGFzcyBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlLCBwcml2YXRlIE1lZGlh
U3RyZWFtU291cmNlOjpPYnNlcnZlcnsKKyAgICBmcmllbmQgdm9pZCBtZWRpYVBsYXllclByaXZh
dGVSZXBhaW50Q2FsbGJhY2soV2ViS2l0VmlkZW9TaW5rKiwgR3N0QnVmZmVyKiwgU3RyZWFtTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CitwdWJsaWM6CisgICAgflN0cmVhbU1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcigpOworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdp
bmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOworCisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChjb25z
dCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsTG9hZCgpIHsgfQorCisgICAgdmly
dHVhbCB2b2lkIHByZXBhcmVUb1BsYXkoKSB7IH0KKyAgICB2b2lkIHBsYXkoKTsKKyAgICB2b2lk
IHBhdXNlKCk7CisKKyAgICBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Q7CisKKyAgICBib29s
IGhhc1ZpZGVvKCkgY29uc3Q7CisgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OworCisgICAgdmly
dHVhbCB2b2lkIHNldFZpc2libGUoYm9vbCkgeyB9CisKKyAgICB2aXJ0dWFsIGZsb2F0IGR1cmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBmbG9hdCBjdXJyZW50VGlt
ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2VlayhmbG9hdCkgeyB9
CisgICAgdmlydHVhbCBib29sIHNlZWtpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisg
ICAgdmlydHVhbCB2b2lkIHNldFJhdGUoZmxvYXQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRQ
cmVzZXJ2ZXNQaXRjaChib29sKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGF1c2VkKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXVzZWQ7IH0KKworICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KTsKKyAgICB2
b2lkIHZvbHVtZUNoYW5nZWQoKTsKKyAgICB2b2lkIG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdl
KCk7CisKKyAgICBib29sIHN1cHBvcnRzTXV0aW5nKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNdXRl
ZChib29sKTsKKyAgICB2b2lkIG11dGVDaGFuZ2VkKCk7CisgICAgdm9pZCBub3RpZnlQbGF5ZXJP
Zk11dGUoKTsKKworCisgICAgdmlydHVhbCBib29sIGhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xvc2VkQ2FwdGlvbnNWaXNp
YmxlKGJvb2wpIHsgfTsKKworICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBu
ZXR3b3JrU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX25ldHdvcmtTdGF0ZTsgfQorICAgIHZpcnR1
YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVhZHlTdGF0ZTsgfQorCisgICAgdmlydHVhbCBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25z
dCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZl
cmVkKCkgY29uc3QgeyByZXR1cm4gVGltZVJhbmdlczo6Y3JlYXRlKCk7IH0KKyAgICBib29sIGRp
ZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCB0b3RhbEJ5
dGVzKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZXNMb2Fk
ZWQoKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25z
dCBJbnRTaXplJikgeyB9CisKKyAgICB2b2lkIHJlcGFpbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCBi
b29sIGNhbkxvYWRQb3N0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXRQb3N0ZXIoY29uc3QgU3RyaW5nJikgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
U2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29s
IHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0OworICAgIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1N
ZWRpYSgpIGNvbnN0OworCisgICAgdm9pZCBzb3VyY2VDaGFuZ2VkU3RhdGUoKTsKKworcHJpdmF0
ZToKKyAgICBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqKTsK
KworICAgIHN0YXRpYyBQYXNzT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4gY3Jl
YXRlKE1lZGlhUGxheWVyKik7CisKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhI
YXNoU2V0PFN0cmluZz4mKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBz
dXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcywgY29u
c3QgS1VSTCYpOworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisgICAgdm9pZCBjcmVh
dGVHU1RBdWRpb1NpbmtCaW4oKTsKKyAgICB2b2lkIGNyZWF0ZUdTVFZpZGVvU2lua0JpbigpOwor
ICAgIGJvb2wgY29ubmVjdFRvR1NUTGl2ZVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqKTsK
KyAgICB2b2lkIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcik7
CisgICAgYm9vbCBpbnRlcm5hbExvYWQoKTsKKyAgICB2b2lkIHN0b3AoKTsKKyAgICBJbnRTaXpl
IGNhbGN1bGF0ZVNpemUoKTsKKyAgICB2b2lkIHVwZGF0ZUN1cnJlbnRTaXplKEludFNpemUmKTsK
KworcHJpdmF0ZToKKyAgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOworICAgICBHc3RFbGVtZW50
KiBtX3dlYmtpdFZpZGVvU2luazsKKyAgICAgR3N0RWxlbWVudCogbV92aWRlb1NpbmtCaW47Cisg
ICAgIEdzdEVsZW1lbnQqIG1fYXVkaW9TaW5rQmluOworICAgICBHc3RFbGVtZW50KiBtX3ZvbHVt
ZTsKKyAgICAgR3N0QnVmZmVyKiBtX2J1ZmZlcjsKKyAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtT
dGF0ZSBtX25ldHdvcmtTdGF0ZTsKKyAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFk
eVN0YXRlOworICAgICBib29sIG1fcGF1c2VkOworICAgICBib29sIG1fc3RvcHBlZDsKKyAgICAg
UmVmUHRyPEdTdHJlYW1lckdXb3JsZD4gbV9nc3RHV29ybGQ7CisgICAgIGd1aW50IG1fdm9sdW1l
VGltZXJIYW5kbGVyOworICAgICBndWludCBtX211dGVUaW1lckhhbmRsZXI7CisgICAgIFN0cmlu
ZyBtX3ZpZGVvU291cmNlSWQ7CisgICAgIFN0cmluZyBtX2F1ZGlvU291cmNlSWQ7CisgICAgIFJl
ZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IG1fc3RyZWFtRGVzY3JpcHRvcjsKKyAgICAgSW50
U2l6ZSBtX2N1cnJlbnRTaXplOworICAgICBndWxvbmcgbV9yZXBhaW50Q2FsbGJhY2tIYW5kbGVy
SWQ7Cit9OworCisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKKworI2VuZGlmIC8vIFN0cmVhbU1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5l
VW5pdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU0YWJiOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmNwcApAQCAtMCwwICsxLDcyNSBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJDZW50cmFsUGlwZWxpbmVVbml0Lmgi
CisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU291cmNlRmFjdG9yeS5oIgorCisj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIGdib29sZWFuIG1lc3NhZ2VDYWxsYmFjayhHc3RCdXMqLCBHc3RNZXNzYWdl
KiwgZ3BvaW50ZXIgZGF0YSk7CitzdGF0aWMgU3RyaW5nIGdlbmVyYXRlRWxlbWVudFBhZElkKEdz
dEVsZW1lbnQqLCBHc3RQYWQqKTsKKworQ2VudHJhbFBpcGVsaW5lVW5pdCYgY2VudHJhbFBpcGVs
aW5lVW5pdCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKENlbnRyYWxQaXBlbGluZVVuaXQsIGluc3RhbmNlLCAoKSk7CisgICAgcmV0dXJu
IGluc3RhbmNlOworfQorCitDZW50cmFsUGlwZWxpbmVVbml0OjpDZW50cmFsUGlwZWxpbmVVbml0
KCkKK3sKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZ2Jvb2xlYW4gZ3N0SW5pdGlh
bGl6ZWQgPSBnc3RfaW5pdF9jaGVjaygwLCAwLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNz
ZXJ0KGdzdEluaXRpYWxpemVkKTsKKworICAgIG1fcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3
KCJtZWRpYXN0cmVhbV9waXBlbGluZSIpOworICAgIEdzdEJ1cyogYnVzID0gZ3N0X3BpcGVsaW5l
X2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUpKTsKKyAgICBpZiAoYnVzKSB7CisgICAg
ICAgIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaChidXMpOworICAgICAgICBnc3RfYnVzX3NldF9z
eW5jX2hhbmRsZXIoYnVzLCBnc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRsZXIsIDApOworICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KGJ1cywgInN5bmMtbWVzc2FnZSIsIEdfQ0FMTEJBQ0sobWVzc2Fn
ZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoYnVzKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihtX3BpcGVsaW5lKTsKKyAgICBnc3RfZWxl
bWVudF9zZXRfc3RhdGUobV9waXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworfQorCitDZW50
cmFsUGlwZWxpbmVVbml0Ojp+Q2VudHJhbFBpcGVsaW5lVW5pdCgpCit7Cit9CisKK3ZvaWQgQ2Vu
dHJhbFBpcGVsaW5lVW5pdDo6cmVnaXN0ZXJTb3VyY2VGYWN0b3J5KFNvdXJjZUZhY3RvcnkqIGZh
Y3RvcnksIGNvbnN0IFN0cmluZyYgc291cmNlSWQpCit7CisgICAgbV9zb3VyY2VGYWN0b3J5TWFw
LmFkZChzb3VyY2VJZCwgZmFjdG9yeSk7Cit9CisKK3ZvaWQgQ2VudHJhbFBpcGVsaW5lVW5pdDo6
ZGVyZWdpc3RlclNvdXJjZUZhY3RvcnkoY29uc3QgU3RyaW5nJiBzb3VyY2VJZCkKK3sKKyAgICBt
X3NvdXJjZUZhY3RvcnlNYXAucmVtb3ZlKHNvdXJjZUlkKTsKK30KKworYm9vbCBDZW50cmFsUGlw
ZWxpbmVVbml0Ojpjb25uZWN0QW5kR2V0U291cmNlRWxlbWVudChjb25zdCBTdHJpbmcmIHNvdXJj
ZUlkLCBHc3RFbGVtZW50Kiogc291cmNlRWxlbWVudCwgR3N0UGFkKiogc291cmNlUGFkKQorewor
ICAgIExPRyhNZWRpYSwgIkNvbm5lY3RpbmcgdG8gc291cmNlIGVsZW1lbnQgJXMiLCBzb3VyY2VJ
ZC5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBDZW50cmFsUGlwZWxpbmVVbml0OjpQaXBlbGluZU1h
cDo6aXRlcmF0b3Igc291cmNlSXQgPSBtX3BpcGVsaW5lTWFwLmZpbmQoc291cmNlSWQpOworICAg
IGlmIChzb3VyY2VJdCAhPSBtX3BpcGVsaW5lTWFwLmVuZCgpKSB7CisgICAgICAgIFNvdXJjZSYg
c291cmNlID0gc291cmNlSXQtPnZhbHVlOworICAgICAgICBMT0coTWVkaWEsICJTb3VyY2UgZWxl
bWVudCAlcyBhbHJlYWR5IGluIHBpcGVsaW5lLCB1c2luZyBpdC4iLCBzb3VyY2VJZC5hc2NpaSgp
LmRhdGEoKSk7CisgICAgICAgICpzb3VyY2VFbGVtZW50ID0gc291cmNlLm1fc291cmNlRWxlbWVu
dC5nZXQoKTsKKyAgICAgICAgKnNvdXJjZVBhZCA9IHNvdXJjZS5tX3NvdXJjZVBhZC5nZXQoKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQ2VudHJhbFBpcGVsaW5lVW5pdDo6
U291cmNlRmFjdG9yeU1hcDo6aXRlcmF0b3Igc291cmNlRmFjdG9yeUl0ID0gbV9zb3VyY2VGYWN0
b3J5TWFwLmZpbmQoc291cmNlSWQpOworICAgIGlmIChzb3VyY2VGYWN0b3J5SXQgIT0gbV9zb3Vy
Y2VGYWN0b3J5TWFwLmVuZCgpKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkZvdW5kIGEgU291cmNl
RmFjdG9yeS4gQ3JlYXRpbmcgc291cmNlIGVsZW1lbnQgJXMiLCBzb3VyY2VJZC5hc2NpaSgpLmRh
dGEoKSk7CisgICAgICAgIFNvdXJjZUZhY3RvcnkqIHNvdXJjZUZhY3RvcnkgPSBzb3VyY2VGYWN0
b3J5SXQtPnZhbHVlOworICAgICAgICAqc291cmNlRWxlbWVudCA9IHNvdXJjZUZhY3RvcnktPmNy
ZWF0ZVNvdXJjZShzb3VyY2VJZCwgc291cmNlUGFkKTsKKyAgICAgICAgaWYgKCEqc291cmNlRWxl
bWVudCkgeworICAgICAgICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIHVuYWJsZSB0byBjcmVhdGUg
c291cmNlIGVsZW1lbnQiKTsKKyAgICAgICAgICAgICpzb3VyY2VFbGVtZW50ID0gMDsKKyAgICAg
ICAgICAgICpzb3VyY2VQYWQgPSAwOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCEqc291cmNlUGFkKSB7CisgICAgICAgICAgICBMT0coTWVkaWEs
ICJTb3VyY2VGYWN0b3J5IGNvdWxkIG5vdCBjcmVhdGUgYSBzb3VyY2UgcGFkLCB0cnlpbmcgdGhl
IGVsZW1lbnQgc3RhdGljIFwic3JjXCIgcGFkIik7CisgICAgICAgICAgICAqc291cmNlUGFkID0g
Z3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoKnNvdXJjZUVsZW1lbnQsICJzcmMiKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghKnNvdXJjZVBhZCkgeworICAgICAgICAgICAgTE9HKE1lZGlh
LCAiRVJST1IsIHVuYWJsZSB0byByZXRyaWV2ZSBlbGVtZW50IHNvdXJjZSBwYWQiKTsKKyAgICAg
ICAgICAgIGdzdF9vYmplY3RfdW5yZWYoKnNvdXJjZUVsZW1lbnQpOworICAgICAgICAgICAgKnNv
dXJjZUVsZW1lbnQgPSAwOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgR3N0RWxlbWVudCogdGVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ0ZWUi
LCBOVUxMKTsKKyAgICAgICAgaWYgKCF0ZWUpIHsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkVS
Uk9SLCBHb3Qgbm8gdGVlIGVsZW1lbnQiKTsKKyAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYo
KnNvdXJjZUVsZW1lbnQpOworICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZigqc291cmNlUGFk
KTsKKyAgICAgICAgICAgICpzb3VyY2VFbGVtZW50ID0gMDsKKyAgICAgICAgICAgICpzb3VyY2VQ
YWQgPSAwOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
Z3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKG1fcGlwZWxpbmUpLCAqc291cmNlRWxlbWVudCwgdGVl
LCBOVUxMKTsKKworICAgICAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KCpz
b3VyY2VFbGVtZW50KTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVu
dCh0ZWUpOworCisgICAgICAgIEdzdFBhZCogc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0
aWNfcGFkKHRlZSwgInNpbmsiKTsKKyAgICAgICAgZ3N0X3BhZF9saW5rKCpzb3VyY2VQYWQsIHNp
bmtwYWQpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ2VudHJhbFBpcGVs
aW5lVW5pdDo6Y29ubmVjdFRvU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSWQsIEdzdEVsZW1l
bnQqIHNpbmssIEdzdFBhZCogc2lua3BhZCkKK3sKKyAgICBMT0coTWVkaWEsICJDb25uZWN0aW5n
IHRvIHNvdXJjZSB3aXRoIGlkPSVzLCBzaW5rPSVwLCBzaW5rcGFkPSVwIiwgc291cmNlSWQuYXNj
aWkoKS5kYXRhKCksIHNpbmssIHNpbmtwYWQpOworCisgICAgaWYgKCFzaW5rIHx8IHNvdXJjZUlk
LmlzRW1wdHkoKSkgeworICAgICAgICBMT0coTWVkaWEsICJFUlJPUiwgTm8gc2luayBwcm92aWRl
ZCBvciBlbXB0eSBzb3VyY2UgaWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmICghc2lua3BhZCkgeworICAgICAgICBMT0coTWVkaWEsICJObyBwYWQgd2FzIGdpdmVu
IGFzIGFyZ3VtZW50LCB0cnlpbmcgdGhlIGVsZW1lbnQgc3RhdGljIFwic2lua1wiIHBhZC4iKTsK
KyAgICAgICAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHNpbmssICJzaW5r
Iik7CisgICAgICAgIGlmICghc2lua3BhZCkgeworICAgICAgICAgICAgTE9HKE1lZGlhLCAiRVJS
T1IsIFVuYWJsZSB0byByZXRyaWV2ZSBlbGVtZW50IHNpbmsgcGFkIik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHc3RFbGVtZW50KiBzb3VyY2VF
bGVtZW50ID0gMDsKKyAgICBHc3RQYWQqIHNvdXJjZVBhZCA9IDA7CisKKyAgICBib29sIGhhdmVT
b3VyY2VzID0gY29ubmVjdEFuZEdldFNvdXJjZUVsZW1lbnQoc291cmNlSWQsICZzb3VyY2VFbGVt
ZW50LCAmc291cmNlUGFkKTsKKyAgICBpZiAoIXNvdXJjZUVsZW1lbnQpIHsKKyAgICAgICAgTE9H
KE1lZGlhLCAiRVJST1IsIFVuYWJsZSB0byBnZXQgc291cmNlIGVsZW1lbnQiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEdzdEVsZW1lbnQqIHF1ZXVlID0gZ3N0X2VsZW1l
bnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIE5VTEwpOworICAgIGlmICghcXVldWUpIHsKKyAgICAg
ICAgTE9HKE1lZGlhLCAiRVJST1IsIEdvdCBubyBxdWV1ZSBlbGVtZW50Iik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBHc3RFbGVtZW50KiBzaW5rUGFyZW50ID0gR1NUX0VM
RU1FTlQoZ3N0X2VsZW1lbnRfZ2V0X3BhcmVudChzaW5rKSk7CisgICAgaWYgKCFzaW5rUGFyZW50
KSB7CisgICAgICAgIExPRyhNZWRpYSwgIlNpbmsgbm90IGluIHBpcGVsaW5lLCBhZGRpbmcuIik7
CisgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV9waXBlbGluZSksIHNpbmspOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmIChzaW5rUGFyZW50ICE9IG1fcGlwZWxpbmUpIHsKKyAgICAgICAg
ICAgIGdzdF9vYmplY3RfdW5yZWYocXVldWUpOworICAgICAgICAgICAgZ3N0X29iamVjdF91bnJl
ZihzaW5rUGFyZW50KTsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkVSUk9SLCBTaW5rIGFscmVh
ZHkgYWRkZWQgdG8gYW5vdGhlciBlbGVtZW50LiBQaXBlbGluZSBpcyBub3cgYnJva2VuISIpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGdzdF9vYmplY3Rf
dW5yZWYoc2lua1BhcmVudCk7CisgICAgfQorCisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTihtX3Bp
cGVsaW5lKSwgcXVldWUpOworCisgICAgR3N0UGFkKiB0ZWVTaW5rUGFkID0gZ3N0X3BhZF9nZXRf
cGVlcihzb3VyY2VQYWQpOworICAgIEdzdEVsZW1lbnQqIHRlZSA9IGdzdF9wYWRfZ2V0X3BhcmVu
dF9lbGVtZW50KHRlZVNpbmtQYWQpOworICAgIGdzdF9vYmplY3RfdW5yZWYodGVlU2lua1BhZCk7
CisKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KHNpbmspOworICAgIGdz
dF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocXVldWUpOworCisgICAgR3N0UGFkKiB0
ZWVTcmNQYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQodGVlLCAic3JjJWQiKTsKKyAg
ICBHc3RQYWQqIHF1ZXVlU2lua1BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHF1ZXVl
LCAic2luayIpOworICAgIEdzdFBhZCogcXVldWVTcmNQYWQgPSBnc3RfZWxlbWVudF9nZXRfc3Rh
dGljX3BhZChxdWV1ZSwgInNyYyIpOworICAgIGdzdF9wYWRfbGluayh0ZWVTcmNQYWQsIHF1ZXVl
U2lua1BhZCk7CisgICAgZ3N0X3BhZF9saW5rKHF1ZXVlU3JjUGFkLCBzaW5rcGFkKTsKKyAgICBn
c3Rfb2JqZWN0X3VucmVmKHRlZVNyY1BhZCk7CisgICAgZ3N0X29iamVjdF91bnJlZihxdWV1ZVNp
bmtQYWQpOworICAgIGdzdF9vYmplY3RfdW5yZWYocXVldWVTcmNQYWQpOworICAgIGdzdF9vYmpl
Y3RfdW5yZWYodGVlKTsKKworICAgIGlmICghaGF2ZVNvdXJjZXMpIHsKKyAgICAgICAgbV9waXBl
bGluZU1hcC5hZGQoc291cmNlSWQsIFNvdXJjZShzb3VyY2VFbGVtZW50LCBzb3VyY2VQYWQsIDAs
IHRydWUpKTsKKyAgICAgICAgbV9zb3VyY2VJZExvb2t1cE1hcC5hZGQoZ2VuZXJhdGVFbGVtZW50
UGFkSWQoc291cmNlRWxlbWVudCwgc291cmNlUGFkKSwgc291cmNlSWQpOworICAgIH0KKworICAg
IGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDZW50cmFsUGlwZWxpbmVVbml0OjpkaXNjb25u
ZWN0RnJvbVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlkLCBHc3RFbGVtZW50KiBzaW5rLCBH
c3RQYWQqIHNpbmtwYWQpCit7CisgICAgTE9HKE1lZGlhLCAiRGlzY29ubmVjdGluZyBmcm9tIHNv
dXJjZSB3aXRoIGlkPSVzLCBzaW5rPSVwLCBzaW5rcGFkPSVwIiwgc291cmNlSWQuYXNjaWkoKS5k
YXRhKCksIHNpbmssIHNpbmtwYWQpOworCisgICAgaWYgKCFzaW5rIHx8IHNvdXJjZUlkLmlzRW1w
dHkoKSkgeworICAgICAgICBMT0coTWVkaWEsICJFUlJPUiwgTm8gc2luayBwcm92aWRlZCBvciBl
bXB0eSBzb3VyY2UgaWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFBp
cGVsaW5lTWFwOjppdGVyYXRvciBzb3VyY2VJdCA9IG1fcGlwZWxpbmVNYXAuZmluZChzb3VyY2VJ
ZCk7CisgICAgaWYgKHNvdXJjZUl0ID09IG1fcGlwZWxpbmVNYXAuZW5kKCkpIHsKKyAgICAgICAg
TE9HKE1lZGlhLCAiQ291bGQgbm90IGZpbmQgc291cmNlIHdpdGggaWQ9JXMiLCBzb3VyY2VJZC5h
c2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
IXNpbmtwYWQpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiTm8gcGFkIHdhcyBnaXZlbiBhcyBhcmd1
bWVudCwgdHJ5aW5nIHRoZSBlbGVtZW50IHN0YXRpYyBcInNpbmtcIiBwYWQuIik7CisgICAgICAg
IHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChzaW5rLCAic2luayIpOworICAg
ICAgICBpZiAoIXNpbmtwYWQpIHsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkVSUk9SLCBVbmFi
bGUgdG8gcmV0cmlldmUgZWxlbWVudCBzaW5rIHBhZCIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgR3N0UGFkKiBsUXVldWVTcmNQYWQgPSBnc3Rf
cGFkX2dldF9wZWVyKHNpbmtwYWQpOworICAgIEdzdEVsZW1lbnQqIGxRdWV1ZSA9IGdzdF9wYWRf
Z2V0X3BhcmVudF9lbGVtZW50KGxRdWV1ZVNyY1BhZCk7CisgICAgZ3N0X29iamVjdF91bnJlZihs
UXVldWVTcmNQYWQpOworICAgIEdzdFBhZCogbFF1ZXVlU2lua1BhZCA9IGdzdF9lbGVtZW50X2dl
dF9zdGF0aWNfcGFkKGxRdWV1ZSwgInNpbmsiKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmKGxRdWV1
ZSk7CisgICAgR3N0UGFkKiBsVGVlU3JjUGFkID0gZ3N0X3BhZF9nZXRfcGVlcihsUXVldWVTaW5r
UGFkKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmKGxRdWV1ZVNpbmtQYWQpOworICAgIEdzdEVsZW1l
bnQqIGxUZWUgPSBnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudChsVGVlU3JjUGFkKTsKKyAgICBn
c3Rfb2JqZWN0X3VucmVmKGxUZWVTcmNQYWQpOworICAgIEdzdFBhZCogbFRlZVNpbmtQYWQgPSBn
c3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChsVGVlLCAic2luayIpOworICAgIGdzdF9vYmplY3Rf
dW5yZWYobFRlZSk7CisgICAgR3N0UGFkKiBzb3VyY2VTcmNQYWQgPSBnc3RfcGFkX2dldF9wZWVy
KGxUZWVTaW5rUGFkKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmKGxUZWVTaW5rUGFkKTsKKyAgICBH
c3RFbGVtZW50KiBzb3VyY2VFbGVtZW50ID0gZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQoc291
cmNlU3JjUGFkKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmKHNvdXJjZVNyY1BhZCk7CisKKyAgICAv
LyBkaXNjb25uZWN0IHBhZCBhbmQgcmVtb3ZlIHRoZSBzaW5rIGlmIGl0IGhhcyBubyBtb3JlIHBh
ZHMuCisgICAgZ3VpbnQgbnVtU291cmNlVGVlUGFkcyA9IGRpc2Nvbm5lY3RTaW5rRnJvbVRlZShs
VGVlLCBzaW5rLCBzaW5rcGFkKTsKKyAgICBpZiAoIW51bVNvdXJjZVRlZVBhZHMpCisgICAgICAg
IHJlbW92ZVNvdXJjZUV4dGVuc2lvbkZyb21CZWhpbmQoc291cmNlRWxlbWVudCk7CisKKyAgICBn
c3Rfb2JqZWN0X3VucmVmKHNvdXJjZUVsZW1lbnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K0dzdEVsZW1lbnQqIENlbnRyYWxQaXBlbGluZVVuaXQ6OnBpcGVsaW5lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9waXBlbGluZTsKK30KKworZ3VpbnQgQ2VudHJhbFBpcGVsaW5lVW5pdDo6ZGlz
Y29ubmVjdFNpbmtGcm9tUGlwZWxpbmUoR3N0RWxlbWVudCogc2luaykKK3sKKyAgICBnc3RfZWxl
bWVudF9zZXRfc3RhdGUoc2luaywgR1NUX1NUQVRFX05VTEwpOworICAgIGdzdF9iaW5fcmVtb3Zl
KEdTVF9CSU4obV9waXBlbGluZSksIHNpbmspOworICAgIEdzdFBhZCogdW5saW5rZWRRdWV1ZVNy
Y1BhZCA9IGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQoR1NUX0JJTihtX3BpcGVsaW5lKSwgR1NU
X1BBRF9TUkMpOworCisgICAgR3N0RWxlbWVudCogcXVldWUgPSBnc3RfcGFkX2dldF9wYXJlbnRf
ZWxlbWVudCh1bmxpbmtlZFF1ZXVlU3JjUGFkKTsKKyAgICBHc3RQYWQqIHF1ZXVlU2lua1BhZCA9
IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHF1ZXVlLCAic2luayIpOworICAgIEdzdFBhZCog
dGVlU3JjUGFkID0gZ3N0X3BhZF9nZXRfcGVlcihxdWV1ZVNpbmtQYWQpOworICAgIEdzdEVsZW1l
bnQqIHRlZSA9IGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50KHRlZVNyY1BhZCk7CisKKyAgICBn
c3RfZWxlbWVudF9zZXRfc3RhdGUocXVldWUsIEdTVF9TVEFURV9OVUxMKTsKKyAgICBnc3RfcGFk
X3NldF9hY3RpdmUodGVlU3JjUGFkLCBGQUxTRSk7CisgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJ
TihtX3BpcGVsaW5lKSwgcXVldWUpOworCisgICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0
X3BhZCh0ZWUsIHRlZVNyY1BhZCk7CisgICAgZ3N0X29iamVjdF91bnJlZih0ZWVTcmNQYWQpOwor
ICAgIExPRyhNZWRpYSwgInJlbW92aW5nIHN0dWZmIGRvbmUiKTsKKworICAgIGd1aW50IHNyY3Bh
ZHMgPSAtMTsKKyAgICBnX29iamVjdF9nZXQodGVlLCAibnVtLXNyYy1wYWRzIiwgJnNyY3BhZHMs
IE5VTEwpOworCisgICAgZ3N0X29iamVjdF91bnJlZihxdWV1ZVNpbmtQYWQpOworICAgIGdzdF9v
YmplY3RfdW5yZWYodGVlU3JjUGFkKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmKHRlZSk7CisKKyAg
ICB1bmxpbmtlZFF1ZXVlU3JjUGFkID0gMDsKKyAgICB1bmxpbmtlZFF1ZXVlU3JjUGFkID0gZ3N0
X2Jpbl9maW5kX3VubGlua2VkX3BhZChHU1RfQklOKG1fcGlwZWxpbmUpLCBHU1RfUEFEX1NSQyk7
CisKKyAgICByZXR1cm4gc3JjcGFkczsKK30KKwordm9pZCBDZW50cmFsUGlwZWxpbmVVbml0Ojpy
ZW1vdmVTb3VyY2VFeHRlbnNpb25Gcm9tQmVoaW5kKEdzdEVsZW1lbnQqIHNvdXJjZUV4dGVuc2lv
bikKK3sKKyAgICAvLyBHZXQgcmlnaHQgaGFuZCBzaWRlIGVsZW1lbnRzCisgICAgR3N0UGFkKiBz
ZVNyY1BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHNvdXJjZUV4dGVuc2lvbiwgInNy
YyIpOworICAgIEdzdFBhZCogclRlZVNpbmtQYWQgPSBnc3RfcGFkX2dldF9wZWVyKHNlU3JjUGFk
KTsKKyAgICBHc3RFbGVtZW50KiByVGVlID0gZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQoclRl
ZVNpbmtQYWQpOworICAgIGdzdF9vYmplY3RfdW5yZWYoclRlZVNpbmtQYWQpOworCisgICAgLy8g
R2V0IGxlZnQgaGFuZCBzaWRlIGVsZW1lbnRzCisgICAgR3N0UGFkKiBzZVNpbmtQYWQgPSBnc3Rf
ZWxlbWVudF9nZXRfc3RhdGljX3BhZChzb3VyY2VFeHRlbnNpb24sICJzaW5rIik7CisgICAgaWYg
KCFzZVNpbmtQYWQpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAic291cmNlIGV4dGVuc2lvbiBkaWQg
bm90IGhhdmUgYW55IHNpbmsgcGFkcy4gQXNzdW1pbmcgaXQncyBhIHNvdXJjZS4gQ2hlY2sgaWYg
d2Ugc2hvdWxkIHJlbW92ZSBpdC4iKTsKKworICAgICAgICAvLyBOZWVkIHRvIGl0ZXJhdGUgb3Ig
c29tZXRoaW5nLi4KKyAgICAgICAgU291cmNlSWRMb29rdXBNYXA6Oml0ZXJhdG9yIHNpZEl0ID0g
bV9zb3VyY2VJZExvb2t1cE1hcC5maW5kKGdlbmVyYXRlRWxlbWVudFBhZElkKHNvdXJjZUV4dGVu
c2lvbiwgc2VTcmNQYWQpKTsKKyAgICAgICAgaWYgKHNpZEl0ICE9IG1fc291cmNlSWRMb29rdXBN
YXAuZW5kKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBzb3VyY2VJZCA9IHNpZEl0LT52YWx1ZTsK
KworICAgICAgICAgICAgUGlwZWxpbmVNYXA6Oml0ZXJhdG9yIHNpSXQgPSBtX3BpcGVsaW5lTWFw
LmZpbmQoc291cmNlSWQpOworICAgICAgICAgICAgaWYgKHNpSXQgIT0gbV9waXBlbGluZU1hcC5l
bmQoKSkgeworICAgICAgICAgICAgICAgIFNvdXJjZSBzb3VyY2VJbmZvID0gc2lJdC0+dmFsdWU7
CisKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlSW5mby5tX3JlbW92ZVdoZW5Ob3RVc2VkKSB7
CisgICAgICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIlJlbW92aW5nIHNvdXJjZSAlcCB3aXRo
IGlkPSVzIiwgc291cmNlRXh0ZW5zaW9uLCBzb3VyY2VJZC5hc2NpaSgpLmRhdGEoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShzb3VyY2VFeHRlbnNpb24sIEdT
VF9TVEFURV9OVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRl
KHJUZWUsIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgZ3N0X2Jpbl9yZW1v
dmUoR1NUX0JJTihtX3BpcGVsaW5lKSwgc291cmNlRXh0ZW5zaW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTihtX3BpcGVsaW5lKSwgclRlZSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgbV9waXBlbGluZU1hcC5yZW1vdmUoc291cmNlSWQpOworICAgICAgICAg
ICAgICAgICAgICBtX3NvdXJjZUlkTG9va3VwTWFwLnJlbW92ZShnZW5lcmF0ZUVsZW1lbnRQYWRJ
ZChzb3VyY2VFeHRlbnNpb24sIHNvdXJjZUluZm8ubV9zb3VyY2VQYWQuZ2V0KCkpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBnc3Rfb2Jq
ZWN0X3VucmVmKHNlU3JjUGFkKTsKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihyVGVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdzdFBhZCogbFF1ZXVlU3JjUGFkID0gZ3N0X3Bh
ZF9nZXRfcGVlcihzZVNpbmtQYWQpOworICAgIGdzdF9vYmplY3RfdW5yZWYoc2VTaW5rUGFkKTsK
KyAgICBHc3RFbGVtZW50KiBsUXVldWUgPSBnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudChsUXVl
dWVTcmNQYWQpOworICAgIGdzdF9vYmplY3RfdW5yZWYobFF1ZXVlU3JjUGFkKTsKKyAgICBHc3RQ
YWQqIGxRdWV1ZVNpbmtQYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChsUXVldWUsICJz
aW5rIik7CisgICAgZ3N0X29iamVjdF91bnJlZihsUXVldWUpOworICAgIEdzdFBhZCogbFRlZVNy
Y1BhZCA9IGdzdF9wYWRfZ2V0X3BlZXIobFF1ZXVlU2lua1BhZCk7CisgICAgZ3N0X29iamVjdF91
bnJlZihsUXVldWVTaW5rUGFkKTsKKyAgICBHc3RFbGVtZW50KiBsVGVlID0gZ3N0X3BhZF9nZXRf
cGFyZW50X2VsZW1lbnQobFRlZVNyY1BhZCk7CisgICAgZ3N0X29iamVjdF91bnJlZihsVGVlU3Jj
UGFkKTsKKyAgICBHc3RQYWQqIGxUZWVTaW5rUGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQobFRlZSwgInNpbmsiKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmKGxUZWUpOworICAgIEdzdFBh
ZCogc291cmNlU3JjUGFkID0gZ3N0X3BhZF9nZXRfcGVlcihsVGVlU2lua1BhZCk7CisgICAgZ3N0
X29iamVjdF91bnJlZihsVGVlU2lua1BhZCk7CisgICAgR3N0RWxlbWVudCogc291cmNlRWxlbWVu
dCA9IGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50KHNvdXJjZVNyY1BhZCk7CisgICAgZ3N0X29i
amVjdF91bnJlZihzb3VyY2VTcmNQYWQpOworCisgICAgLy8gcmVtb3ZlIHNvdXJjZSBleHRlbnNp
b24KKyAgICBTdHJpbmcgc291cmNlRXh0ZW5zaW9uQW5kUGFkSWQgPSBnZW5lcmF0ZUVsZW1lbnRQ
YWRJZChzb3VyY2VFeHRlbnNpb24sIHNlU3JjUGFkKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3Rh
dGUoclRlZSwgR1NUX1NUQVRFX05VTEwpOworICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU4obV9w
aXBlbGluZSksIHJUZWUpOworICAgIGdzdF9vYmplY3RfdW5yZWYoc2VTcmNQYWQpOworICAgIGdz
dF9vYmplY3RfdW5yZWYoclRlZSk7CisKKyAgICBndWludCBudW1Tb3VyY2VUZWVQYWRzID0gZGlz
Y29ubmVjdFNpbmtGcm9tVGVlKGxUZWUsIHNvdXJjZUV4dGVuc2lvbiwgMCk7CisgICAgTE9HKE1l
ZGlhLCAic291cmNlLXRlZSBzb3VyY2UgcGFkczogJWQiLCBudW1Tb3VyY2VUZWVQYWRzKTsKKyAg
ICBpZiAoIW51bVNvdXJjZVRlZVBhZHMpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAic291cmNlLXRl
ZSBvZiBzb3VyY2UgZXh0ZW5zaW9uIGRpZCBub3QgaGF2ZSBhbnkgc291cmNlIHBhZHMuIFNlZSBp
ZiB3ZSBzaG91bGQgcmVtb3ZlIGl0LiIpOworICAgICAgICBTb3VyY2VJZExvb2t1cE1hcDo6aXRl
cmF0b3Igc2lkSXQgPSBtX3NvdXJjZUlkTG9va3VwTWFwLmZpbmQoZ2VuZXJhdGVFbGVtZW50UGFk
SWQoc291cmNlRWxlbWVudCwgc291cmNlU3JjUGFkKSk7CisgICAgICAgIFN0cmluZyBzb3VyY2VJ
ZCA9IHNpZEl0LT52YWx1ZTsKKyAgICAgICAgUGlwZWxpbmVNYXA6Oml0ZXJhdG9yIHNpSXQgPSBt
X3BpcGVsaW5lTWFwLmZpbmQoc291cmNlSWQpOworICAgICAgICBTb3VyY2Ugc291cmNlSW5mbyA9
IHNpSXQtPnZhbHVlOworICAgICAgICBpZiAoc291cmNlSW5mby5tX3JlbW92ZVdoZW5Ob3RVc2Vk
KQorICAgICAgICAgICAgcmVtb3ZlU291cmNlRXh0ZW5zaW9uRnJvbUJlaGluZChzb3VyY2VFbGVt
ZW50KTsKKyAgICB9CisKKyAgICAvLyBzaW5jZSBkaXNjb25uZWN0U2lua0Zyb21UZWUgd2FzIHVz
ZWQgdG8gcmVtb3ZlIHRoZSBzb3VyY2VFeHRlbnNpb24KKyAgICBTb3VyY2VJZExvb2t1cE1hcDo6
aXRlcmF0b3Igc2lkSXQgPSBtX3NvdXJjZUlkTG9va3VwTWFwLmZpbmQoc291cmNlRXh0ZW5zaW9u
QW5kUGFkSWQpOworICAgIGlmIChzaWRJdCAhPSBtX3NvdXJjZUlkTG9va3VwTWFwLmVuZCgpKSB7
CisgICAgICAgIFN0cmluZyBzb3VyY2VJZCA9IHNpZEl0LT52YWx1ZTsKKyAgICAgICAgTE9HKE1l
ZGlhLCAiUmVtb3Zpbmcgc291cmNlRXh0ZW5zaW9uIHdpdGggaWQgJXMiLCBzb3VyY2VJZC5hc2Np
aSgpLmRhdGEoKSk7CisgICAgICAgIG1fcGlwZWxpbmVNYXAucmVtb3ZlKHNvdXJjZUlkKTsKKyAg
ICAgICAgbV9zb3VyY2VJZExvb2t1cE1hcC5yZW1vdmUoc291cmNlRXh0ZW5zaW9uQW5kUGFkSWQp
OworICAgIH0KKworICAgIGdzdF9vYmplY3RfdW5yZWYoc291cmNlRWxlbWVudCk7Cit9CisKK2dp
bnQgQ2VudHJhbFBpcGVsaW5lVW5pdDo6ZGlzY29ubmVjdFNpbmtGcm9tVGVlKEdzdEVsZW1lbnQq
IHRlZSwgR3N0RWxlbWVudCogc2luaywgR3N0UGFkKiBwYWQpCit7CisgICAgZ3VpbnQgc3JjcGFk
cyA9IC0xOworICAgIEdzdFBhZCogc2lua1NpbmtQYWQgPSBwYWQ7CisgICAgYm9vbCBkb1JlbGVh
c2VTaW5rUGFkID0gZmFsc2U7CisgICAgaWYgKCFwYWQpIHsKKyAgICAgICAgc2lua1NpbmtQYWQg
PSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChzaW5rLCAic2luayIpOworICAgICAgICBkb1Jl
bGVhc2VTaW5rUGFkID0gdHJ1ZTsKKyAgICB9CisgICAgR3N0UGFkKiBxdWV1ZVNvdXJjZVBhZCA9
IGdzdF9wYWRfZ2V0X3BlZXIoc2lua1NpbmtQYWQpOworICAgIEdzdEVsZW1lbnQqIHF1ZXVlID0g
Z3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQocXVldWVTb3VyY2VQYWQpOworICAgIEdzdFBhZCog
cXVldWVTaW5rUGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocXVldWUsICJzaW5rIik7
CisgICAgR3N0UGFkKiB0ZWVTb3VyY2VQYWQgPSBnc3RfcGFkX2dldF9wZWVyKHF1ZXVlU2lua1Bh
ZCk7CisKKyAgICBnc3RfcGFkX3NldF9hY3RpdmUodGVlU291cmNlUGFkLCBGQUxTRSk7CisgICAg
Z3N0X2Jpbl9yZW1vdmUoR1NUX0JJTihtX3BpcGVsaW5lKSwgcXVldWUpOworICAgIGdzdF9lbGVt
ZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQodGVlLCB0ZWVTb3VyY2VQYWQpOworCisgICAgaW50IG5Q
YWRzID0gMDsKKyAgICBncG9pbnRlciBpdGVtOworICAgIEdzdEl0ZXJhdG9yKiBwYWRzSXQgPSBn
c3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyhzaW5rKTsKKyAgICBib29sIGRvbmUgPSBmYWxz
ZTsKKyAgICBib29sIGRvUmVtb3ZlU2luayA9IHRydWU7CisgICAgd2hpbGUgKCFkb25lKSB7Cisg
ICAgICAgIEdzdEl0ZXJhdG9yUmVzdWx0IGl0ID0gZ3N0X2l0ZXJhdG9yX25leHQocGFkc0l0LCAm
aXRlbSk7CisgICAgICAgIHN3aXRjaCAoaXQpIHsKKyAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1Jf
T0s6IHsKKyAgICAgICAgICAgIG5QYWRzKys7CisgICAgICAgICAgICBHc3RQYWQqIHBhZCA9IChH
c3RQYWQqKWl0ZW07CisgICAgICAgICAgICBHc3RQYWQqIHBlZXIgPSBnc3RfcGFkX2dldF9wZWVy
KHBhZCk7CisgICAgICAgICAgICBpZiAocGVlcikgeworICAgICAgICAgICAgICAgIGRvUmVtb3Zl
U2luayA9IGZhbHNlOworICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGdzdF9vYmplY3RfdW5yZWYocGVlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBn
c3Rfb2JqZWN0X3VucmVmKHBhZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6CisgICAgICAgICAgICBnc3RfaXRlcmF0b3Jf
cmVzeW5jKHBhZHNJdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHU1RfSVRF
UkFUT1JfRE9ORToKKyAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgorICAgICAgICAgICAgTE9HKE1lZGlh
LCAiRVJST1IsIEl0ZXJhdGluZyEiKTsKKyAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFN0cmluZyBzb3VyY2VBbmRQYWRJZCA9IGdlbmVyYXRlRWxlbWVu
dFBhZElkKHNpbmssIDApOworICAgIFNvdXJjZUlkTG9va3VwTWFwOjppdGVyYXRvciBzaWRJdCA9
IG1fc291cmNlSWRMb29rdXBNYXAuZmluZChnZW5lcmF0ZUVsZW1lbnRQYWRJZChzaW5rLCAwKSk7
CisgICAgaWYgKHNpZEl0ICE9IG1fc291cmNlSWRMb29rdXBNYXAuZW5kKCkpIHsKKyAgICAgICAg
U3RyaW5nIHNvdXJjZUlkID0gc2lkSXQtPnZhbHVlOworICAgICAgICBQaXBlbGluZU1hcDo6aXRl
cmF0b3Igc2lJdCA9IG1fcGlwZWxpbmVNYXAuZmluZChzb3VyY2VJZCk7CisgICAgICAgIGlmIChz
aUl0ICE9IG1fcGlwZWxpbmVNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIFNvdXJjZSBzb3VyY2VJ
bmZvID0gc2lJdC0+dmFsdWU7CisgICAgICAgICAgICBkb1JlbW92ZVNpbmsgPSBzb3VyY2VJbmZv
Lm1fcmVtb3ZlV2hlbk5vdFVzZWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZG9SZW1v
dmVTaW5rKSB7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShzaW5rLCBHU1RfU1RBVEVf
TlVMTCk7CisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU4obV9waXBlbGluZSksIHNpbmsp
OworICAgICAgICBMT0coTWVkaWEsICJTaW5rIHJlbW92ZWQiKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgTE9HKE1lZGlhLCAiRGlkIG5vdCByZW1vdmUgdGhlIHNpbmsiKTsKKworICAgIGdzdF9pdGVy
YXRvcl9mcmVlKHBhZHNJdCk7CisKKyAgICBpZiAoZG9SZWxlYXNlU2lua1BhZCkKKyAgICAgICAg
Z3N0X29iamVjdF91bnJlZihzaW5rU2lua1BhZCk7CisgICAgZ3N0X29iamVjdF91bnJlZihxdWV1
ZVNvdXJjZVBhZCk7CisgICAgZ3N0X29iamVjdF91bnJlZihxdWV1ZVNpbmtQYWQpOworICAgIGdz
dF9vYmplY3RfdW5yZWYodGVlU291cmNlUGFkKTsKKworICAgIGdfb2JqZWN0X2dldCh0ZWUsICJu
dW0tc3JjLXBhZHMiLCAmc3JjcGFkcywgTlVMTCk7CisKKyAgICByZXR1cm4gc3JjcGFkczsKK30K
Kwordm9pZCBDZW50cmFsUGlwZWxpbmVVbml0OjpyZW1vdmVTb3VyY2VGYWN0b3J5Rm9yU291cmNl
KEdzdEVsZW1lbnQqIHNvdXJjZSkKK3sKKyAgICBncG9pbnRlciBpdGVtOworICAgIEdzdEl0ZXJh
dG9yKiBwYWRzSXQgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzKHNvdXJjZSk7CisgICAg
Ym9vbCBkb25lID0gZmFsc2U7CisgICAgd2hpbGUgKCFkb25lKSB7CisgICAgR3N0SXRlcmF0b3JS
ZXN1bHQgaXQgPSBnc3RfaXRlcmF0b3JfbmV4dChwYWRzSXQsICZpdGVtKTsKKyAgICBzd2l0Y2gg
KGl0KSB7CisgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6IHsKKyAgICAgICAgR3N0UGFkKiBzcmNw
YWQgPSAoR3N0UGFkKilpdGVtOworICAgICAgICBTdHJpbmcgZWxQYWRJZCA9IGdlbmVyYXRlRWxl
bWVudFBhZElkKHNvdXJjZSwgc3JjcGFkKTsKKyAgICAgICAgU291cmNlSWRMb29rdXBNYXA6Oml0
ZXJhdG9yIHNpZEl0ID0gbV9zb3VyY2VJZExvb2t1cE1hcC5maW5kKGVsUGFkSWQpOworICAgICAg
ICBpZiAoc2lkSXQgPT0gbV9zb3VyY2VJZExvb2t1cE1hcC5lbmQoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIFN0cmluZyBzb3VyY2VJZCA9IHNpZEl0LT52YWx1ZTsKKworICAg
ICAgICBQaXBlbGluZU1hcDo6aXRlcmF0b3Igc2lJdCA9IG1fcGlwZWxpbmVNYXAuZmluZChzb3Vy
Y2VJZCk7CisgICAgICAgIGlmIChzaUl0ID09IG1fcGlwZWxpbmVNYXAuZW5kKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBTb3VyY2UmIHNvdXJjZUluZm8gPSBzaUl0LT52YWx1
ZTsKKyAgICAgICAgc291cmNlSW5mby5tX3NvdXJjZUZhY3RvcnkgPSAwOworICAgICAgICBnc3Rf
b2JqZWN0X3VucmVmKHNyY3BhZCk7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgY2Fz
ZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgorICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKHBhZHNJ
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6CisgICAgICAg
IGRvbmUgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJP
UjoKKyAgICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIEl0ZXJhdGluZyEiKTsKKyAgICAgICAgZG9u
ZSA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmcgZWxQYWRJZCA9IGdlbmVyYXRlRWxlbWVudFBhZElk
KHNvdXJjZSwgMCk7CisgICAgU291cmNlSWRMb29rdXBNYXA6Oml0ZXJhdG9yIHNpZEl0ID0gbV9z
b3VyY2VJZExvb2t1cE1hcC5maW5kKGVsUGFkSWQpOworICAgIGlmIChzaWRJdCA9PSBtX3NvdXJj
ZUlkTG9va3VwTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgc291cmNl
SWQgPSBzaWRJdC0+dmFsdWU7CisKKyAgICBQaXBlbGluZU1hcDo6aXRlcmF0b3Igc2lJdCA9IG1f
cGlwZWxpbmVNYXAuZmluZChzb3VyY2VJZCk7CisgICAgaWYgKHNpSXQgPT0gbV9waXBlbGluZU1h
cC5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU291cmNlJiBzb3VyY2VJbmZvID0gc2lJ
dC0+dmFsdWU7CisgICAgc291cmNlSW5mby5tX3NvdXJjZUZhY3RvcnkgPSAwOworfQorCit2b2lk
IENlbnRyYWxQaXBlbGluZVVuaXQ6OmRpc2Nvbm5lY3RTb3VyY2VGcm9tUGlwZWxpbmUoR3N0RWxl
bWVudCogc291cmNlLCBHc3RQYWQqIHNvdXJjZVBhZCkKK3sKKyAgICBTb3VyY2VJZExvb2t1cE1h
cDo6aXRlcmF0b3Igc2lkSXQgPSBtX3NvdXJjZUlkTG9va3VwTWFwLmZpbmQoZ2VuZXJhdGVFbGVt
ZW50UGFkSWQoc291cmNlLCBzb3VyY2VQYWQpKTsKKyAgICBpZiAoc2lkSXQgPT0gbV9zb3VyY2VJ
ZExvb2t1cE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIHNvdXJjZUlk
ID0gc2lkSXQtPnZhbHVlOworCisgICAgUGlwZWxpbmVNYXA6Oml0ZXJhdG9yIHNpSXQgPSBtX3Bp
cGVsaW5lTWFwLmZpbmQoc291cmNlSWQpOworICAgIGlmIChzaUl0ID09IG1fcGlwZWxpbmVNYXAu
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNvdXJjZSBzb3VyY2VJbmZvID0gc2lJdC0+
dmFsdWU7CisKKyAgICAvLyBGSVhNRTogZG8gYmxvY2sgcHJvcGVybHkgYXN5bmMKKyAgICBnc3Rf
cGFkX3NldF9ibG9ja2VkX2FzeW5jKHNvdXJjZVBhZCwgVFJVRSwgMCwgMCk7CisgICAgR3N0UGFk
KiB0ZWVTaW5rUGFkID0gZ3N0X3BhZF9nZXRfcGVlcihzb3VyY2VQYWQpOworICAgIEdzdEVsZW1l
bnQqIHRlZSA9IGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50KHRlZVNpbmtQYWQpOworICAgIGdz
dF9vYmplY3RfdW5yZWYodGVlU2lua1BhZCk7CisKKyAgICBncG9pbnRlciBpdGVtOworICAgIEdz
dEl0ZXJhdG9yKiBwYWRzSXQgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzKHRlZSk7Cisg
ICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgd2hpbGUgKCFkb25lKSB7CisgICAgICAgIEdzdEl0
ZXJhdG9yUmVzdWx0IGl0ID0gZ3N0X2l0ZXJhdG9yX25leHQocGFkc0l0LCAmaXRlbSk7CisgICAg
ICAgIHN3aXRjaCAoaXQpIHsKKyAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6IHsKKyAgICAg
ICAgICAgIEdzdFBhZCogdGVlU3JjUGFkID0gKEdzdFBhZCopaXRlbTsKKyAgICAgICAgICAgIEdz
dFBhZCogcXVldWVTaW5rUGFkID0gZ3N0X3BhZF9nZXRfcGVlcih0ZWVTcmNQYWQpOworICAgICAg
ICAgICAgR3N0RWxlbWVudCogcXVldWUgPSBnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudChxdWV1
ZVNpbmtQYWQpOworICAgICAgICAgICAgLy8gcXVldWUgbWlnaHQgYWN0dWFsbHkgYmUgYSBmYWtl
c2luaworICAgICAgICAgICAgZ2NoYXIqIHFOYW1lID0gZ3N0X2VsZW1lbnRfZ2V0X25hbWUocXVl
dWUpOworICAgICAgICAgICAgaWYgKFN0cmluZyhxTmFtZSkuc3RhcnRzV2l0aCgiZmFrZXNpbmsi
KSkgeworICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShxdWV1ZSwgR1NUX1NU
QVRFX05VTEwpOworICAgICAgICAgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU4obV9waXBl
bGluZSksIHF1ZXVlKTsKKyAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVl
c3RfcGFkKHRlZSwgdGVlU3JjUGFkKTsKKyAgICAgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVm
KHRlZVNyY1BhZCk7CisgICAgICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZihxdWV1ZVNpbmtQ
YWQpOworICAgICAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocXVldWUpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHc3RQYWQqIHF1ZXVl
U3JjUGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocXVldWUsICJzcmMiKTsKKyAgICAg
ICAgICAgIEdzdFBhZCogc2lua1NpbmtQYWQgPSBnc3RfcGFkX2dldF9wZWVyKHF1ZXVlU3JjUGFk
KTsKKyAgICAgICAgICAgIEdzdEVsZW1lbnQqIHNpbmsgPSBnc3RfcGFkX2dldF9wYXJlbnRfZWxl
bWVudChzaW5rU2lua1BhZCk7CisgICAgICAgICAgICBHc3RFbGVtZW50KiBwYXJlbnQgPSAoR3N0
RWxlbWVudCopZ3N0X2VsZW1lbnRfZ2V0X3BhcmVudChzaW5rKTsKKyAgICAgICAgICAgIGdjaGFy
KiBwYXJlbnROYW1lID0gZ3N0X2VsZW1lbnRfZ2V0X25hbWUocGFyZW50KTsKKyAgICAgICAgICAg
IEdzdEVsZW1lbnQqIHNpbmtCaW4gPSAwOworICAgICAgICAgICAgaWYgKCFzdHJjbXAocGFyZW50
TmFtZSwgIm1lZGlhc3RyZWFtX3BpcGVsaW5lIikpCisgICAgICAgICAgICAgICAgc2lua0JpbiA9
IHNpbms7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2lua0JpbiA9IHBhcmVu
dDsKKyAgICAgICAgICAgIGdjaGFyKiBzaW5rQmluTmFtZSA9IGdzdF9lbGVtZW50X2dldF9uYW1l
KHNpbmtCaW4pOworICAgICAgICAgICAgZ19mcmVlKHNpbmtCaW5OYW1lKTsKKworICAgICAgICAg
ICAgR3N0UGFkKiBzaW5rU3JjUGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoc2lua0Jp
biwgInNyYyIpOworICAgICAgICAgICAgU291cmNlSWRMb29rdXBNYXA6Oml0ZXJhdG9yIHNpZEl0
ID0gbV9zb3VyY2VJZExvb2t1cE1hcC5maW5kKGdlbmVyYXRlRWxlbWVudFBhZElkKHNpbmtCaW4s
IHNpbmtTcmNQYWQpKTsKKyAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoc2lua1NyY1BhZCk7
CisgICAgICAgICAgICBpZiAoc2lkSXQgIT0gbV9zb3VyY2VJZExvb2t1cE1hcC5lbmQoKSkgewor
ICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIlNpbmsgZWxlbWVudCB3YXMgYSBzb3VyY2UgZXh0
ZW5zaW9uLiBSZWN1cnNpdmVseSBjYWxsaW5nIGRpc2Nvbm5lY3RTb3VyY2VGcm9tUGlwZWxpbmUg
dG8gcmVtb3ZlIGl0Iik7CisgICAgICAgICAgICAgICAgR3N0UGFkKiBzcmNwYWQgPSBnc3RfZWxl
bWVudF9nZXRfc3RhdGljX3BhZChzaW5rQmluLCAic3JjIik7CisgICAgICAgICAgICAgICAgZGlz
Y29ubmVjdFNvdXJjZUZyb21QaXBlbGluZShzaW5rQmluLCBzcmNwYWQpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgZGlzY29ubmVjdFNpbmtGcm9tUGlwZWxpbmUoc2lua0Jp
bik7CisKKyAgICAgICAgICAgIGdfZnJlZShwYXJlbnROYW1lKTsKKyAgICAgICAgICAgIGdzdF9v
YmplY3RfdW5yZWYodGVlU3JjUGFkKTsKKyAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocXVl
dWVTaW5rUGFkKTsKKyAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocXVldWVTcmNQYWQpOwor
ICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZihzaW5rU2lua1BhZCk7CisgICAgICAgICAgICBn
c3Rfb2JqZWN0X3VucmVmKHF1ZXVlKTsKKyAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoc2lu
ayk7CisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHBhcmVudCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6CisgICAg
ICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKHBhZHNJdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKKyAgICAgICAgICAgIGRvbmUgPSB0cnVl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgor
ICAgICAgICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIEl0ZXJhdGluZyEiKTsKKyAgICAgICAgICAg
IGRvbmUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdzdF9wYWRfc2V0X2Jsb2Nr
ZWRfYXN5bmMoc291cmNlUGFkLCBGQUxTRSwgTlVMTCwgMCk7CisKKyAgICAvLyBTaW5jZSBub3Ro
aW5nIGlzIG5vdyBjb25uZWN0ZWQgdG8gdGhpcyBzb3VyY2UsIHdlIHJlbW92ZSBpdCBhbmQgZWFy
bGllciBzb3VyY2VzIHRoYXQgZG9lcyBub3QgaGF2ZSBjb25uZWN0aW9ucworICAgIEdzdFBhZCog
c291cmNlU2lua1BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHNvdXJjZSwgInNpbmsi
KTsKKyAgICBpZiAoc291cmNlU2lua1BhZCkgeworICAgICAgICAvLyBzb3VyY2UgaXMgYSBzb3Vy
Y2UgZXh0ZW5zaW9uCisgICAgICAgIHJlbW92ZVNvdXJjZUV4dGVuc2lvbkZyb21CZWhpbmQoc291
cmNlKTsKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZih0ZWUpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIGlmIG5vdCBhIHNvdXJjZSBleHRlbnNpb24sIHRoZXJlIHdpbGwgYmUgYSBsb29zZSB0
ZWUgdGhhdCB3ZSBuZWVkIHRvIHJlbW92ZQorICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUo
dGVlLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU4obV9w
aXBlbGluZSksIHRlZSk7CisgICAgfQorCisgICAgZ3N0X29iamVjdF91bnJlZihzb3VyY2VQYWQp
OworfQorCit2b2lkIENlbnRyYWxQaXBlbGluZVVuaXQ6OmRpc2Nvbm5lY3RTb3VyY2VXaXRoTXVs
dGlwbGVQYWRzRnJvbVBpcGVsaW5lKEdzdEVsZW1lbnQqIHNvdXJjZSkKK3sKKyAgICBTdHJpbmcg
ZWxlbWVudFBhZElkID0gZ2VuZXJhdGVFbGVtZW50UGFkSWQoc291cmNlLCAwKTsKKyAgICBTb3Vy
Y2VJZExvb2t1cE1hcDo6aXRlcmF0b3Igc2lkSXQgPSBtX3NvdXJjZUlkTG9va3VwTWFwLmZpbmQo
ZWxlbWVudFBhZElkKTsKKyAgICBpZiAoc2lkSXQgPT0gbV9zb3VyY2VJZExvb2t1cE1hcC5lbmQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIHNvdXJjZUlkID0gc2lkSXQtPnZhbHVl
OworCisgICAgZ3BvaW50ZXIgaXRlbTsKKyAgICBHc3RJdGVyYXRvciogcGFkc0l0ID0gZ3N0X2Vs
ZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyhzb3VyY2UpOworICAgIGJvb2wgZG9uZSA9IGZhbHNlOwor
ICAgIHdoaWxlICghZG9uZSkgeworICAgIEdzdEl0ZXJhdG9yUmVzdWx0IGl0ID0gZ3N0X2l0ZXJh
dG9yX25leHQocGFkc0l0LCAmaXRlbSk7CisgICAgc3dpdGNoIChpdCkgeworICAgIGNhc2UgR1NU
X0lURVJBVE9SX09LOiB7CisgICAgICAgIEdzdFBhZCogc3JjcGFkID0gKEdzdFBhZCopaXRlbTsK
KyAgICAgICAgR3N0UGFkKiBwZWVyUGFkID0gZ3N0X3BhZF9nZXRfcGVlcihzcmNwYWQpOworICAg
ICAgICBpZiAoIXBlZXJQYWQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZ3N0X29i
amVjdF91bnJlZihwZWVyUGFkKTsKKworICAgICAgICBkaXNjb25uZWN0U291cmNlRnJvbVBpcGVs
aW5lKHNvdXJjZSwgc3JjcGFkKTsKKworICAgICAgICAvLyBkaXNjb25uZWN0U291cmNlRnJvbVBp
cGVsaW5lIGRvZXMgbm90IHJlbW92ZSB0aGUgdGVlCisgICAgICAgIEdzdFBhZCogdGVlU2lua1Bh
ZCA9IGdzdF9wYWRfZ2V0X3BlZXIoc3JjcGFkKTsKKyAgICAgICAgR3N0RWxlbWVudCogdGVlID0g
Z3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQodGVlU2lua1BhZCk7CisgICAgICAgIGdzdF9lbGVt
ZW50X3NldF9zdGF0ZSh0ZWUsIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgZ3N0X2Jpbl9yZW1v
dmUoR1NUX0JJTihtX3BpcGVsaW5lKSwgdGVlKTsKKworICAgICAgICBnc3Rfb2JqZWN0X3VucmVm
KHNyY3BhZCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9JVEVSQVRPUl9S
RVNZTkM6CisgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMocGFkc0l0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKKyAgICAgICAgZG9uZSA9IHRydWU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgorICAgICAgICBMT0co
TWVkaWEsICJFUlJPUiwgSXRlcmF0aW5nISIpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKwor
ICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShzb3VyY2UsIEdTVF9TVEFURV9OVUxMKTsKKyAgICBn
c3RfYmluX3JlbW92ZShHU1RfQklOKG1fcGlwZWxpbmUpLCBzb3VyY2UpOworCisgICAgbV9waXBl
bGluZU1hcC5yZW1vdmUoc291cmNlSWQpOworICAgIG1fc291cmNlSWRMb29rdXBNYXAucmVtb3Zl
KGVsZW1lbnRQYWRJZCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBtZXNzYWdlQ2FsbGJhY2soR3N0
QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCit7CisgICAgR0Vy
cm9yKiBlcnIgPSAwOworICAgIGdjaGFyKiBkZWJ1ZyA9IDA7CisKKyAgICBzd2l0Y2ggKEdTVF9N
RVNTQUdFX1RZUEUobWVzc2FnZSkpIHsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOiB7Cisg
ICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yKG1lc3NhZ2UsICZlcnIsICZkZWJ1Zyk7Cisg
ICAgICAgIExPRyhNZWRpYSwgIkVSUk9SLCBtZWRpYSBlcnJvcjogJWQsICVzIiwgZXJyLT5jb2Rl
LCBlcnItPm1lc3NhZ2UpOworICAgICAgICBHc3RFbGVtZW50KiBzb3VyY2UgPSAoR3N0RWxlbWVu
dCopIEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKTsKKyAgICAgICAgR3N0RWxlbWVudCogcGFyZW50
ID0gKEdzdEVsZW1lbnQqKSBnc3RfZWxlbWVudF9nZXRfcGFyZW50KHNvdXJjZSk7CisKKyAgICAg
ICAgZ3N0X29iamVjdF91bnJlZihwYXJlbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGVycikKKyAgICAgICAg
Z19lcnJvcl9mcmVlKGVycik7CisgICAgaWYgKGRlYnVnKQorICAgICAgICBnX2ZyZWUoZGVidWcp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2VuZXJhdGVFbGVtZW50
UGFkSWQoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0UGFkKiBwYWQpCit7CisgICAgU3RyaW5nIGlk
KFN0cmluZzo6bnVtYmVyKGd1bG9uZyhlbGVtZW50KSkpOworICAgIGlkLmFwcGVuZCgiXyIpOwor
ICAgIGlkLmFwcGVuZChTdHJpbmc6Om51bWJlcihndWxvbmcocGFkKSkpOworICAgIHJldHVybiBp
ZDsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlw
ZWxpbmVVbml0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmExNGIwMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5oCkBAIC0wLDAgKzEsMTE5
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworCisjaWZuZGVmIENl
bnRyYWxQaXBlbGluZVVuaXRfaAorI2RlZmluZSBDZW50cmFsUGlwZWxpbmVVbml0X2gKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVk
ZWYgdm9pZCAoKlNvdXJjZUluc2VydGVkQ2FsbGJhY2spKEdzdEVsZW1lbnQqIHNvdXJjZSwgR3N0
UGFkKiBwYWQsIGdwb2ludGVyIHVzZXJEYXRhKTsKKworY2xhc3MgU291cmNlRmFjdG9yeTsKK2Ns
YXNzIFNvdXJjZUV4dGVuc2lvbkZhY3Rvcnk7CisKK2NsYXNzIENlbnRyYWxQaXBlbGluZVVuaXQg
eworcHVibGljOgorICAgIENlbnRyYWxQaXBlbGluZVVuaXQoKTsKKyAgICB2aXJ0dWFsIH5DZW50
cmFsUGlwZWxpbmVVbml0KCk7CisKKyAgICB2b2lkIHJlZ2lzdGVyU291cmNlRmFjdG9yeShTb3Vy
Y2VGYWN0b3J5KiwgY29uc3QgU3RyaW5nJiBzb3VyY2VJZCk7CisgICAgdm9pZCBkZXJlZ2lzdGVy
U291cmNlRmFjdG9yeShjb25zdCBTdHJpbmcmIHNvdXJjZUlkKTsKKyAgICBib29sIGNvbm5lY3RU
b1NvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlkLCBHc3RFbGVtZW50KiBzaW5rLCBHc3RQYWQq
IHNpbmtQYWQgPSAwKTsKKyAgICBib29sIGRpc2Nvbm5lY3RGcm9tU291cmNlKGNvbnN0IFN0cmlu
ZyYgc291cmNlSWQsIEdzdEVsZW1lbnQqIHNpbmssIEdzdFBhZCogc2lua1BhZCA9IDApOworCisg
ICAgR3N0RWxlbWVudCogcGlwZWxpbmUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBT
b3VyY2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgU291cmNlKCkgOiBtX3NvdXJjZUVsZW1lbnQo
MCksIG1fc291cmNlUGFkKDApLCBtX3NvdXJjZUZhY3RvcnkoMCksIG1fcmVtb3ZlV2hlbk5vdFVz
ZWQodHJ1ZSkgeyB9CisgICAgICAgIFNvdXJjZShHc3RFbGVtZW50KiBzb3VyY2VFbGVtZW50LCBH
c3RQYWQqIHNvdXJjZVBhZCwgU291cmNlRmFjdG9yeSogc291cmNlRmFjdG9yeSwgYm9vbCByZW1v
dmVXaGVuTm90VXNlZCkgOiBtX3NvdXJjZUVsZW1lbnQoc291cmNlRWxlbWVudCksIG1fc291cmNl
UGFkKHNvdXJjZVBhZCksIG1fc291cmNlRmFjdG9yeShzb3VyY2VGYWN0b3J5KSwgbV9yZW1vdmVX
aGVuTm90VXNlZChyZW1vdmVXaGVuTm90VXNlZCkgeyB9CisKKyAgICAgICAgR1JlZlB0cjxHc3RF
bGVtZW50PiBtX3NvdXJjZUVsZW1lbnQ7CisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBtX3NvdXJj
ZVBhZDsKKyAgICAgICAgU291cmNlRmFjdG9yeSogbV9zb3VyY2VGYWN0b3J5OworICAgICAgICBi
b29sIG1fcmVtb3ZlV2hlbk5vdFVzZWQ7CisgICAgfTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIFNvdXJjZT4gUGlwZWxpbmVNYXA7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IFNvdXJjZUlkTG9va3VwTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFNvdXJjZUZhY3RvcnkqPiBTb3VyY2VGYWN0b3J5TWFwOworICAgIHR5cGVkZWYgc3RydWN0IHsK
KyAgICAgICAgU291cmNlRXh0ZW5zaW9uRmFjdG9yeSogc291cmNlRXh0ZW5zaW9uRmFjdG9yeTsK
KyAgICAgICAgU3RyaW5nIHNvdXJjZVRvRXh0ZW5kOworICAgIH0gU291cmNlRXh0ZW5zaW9uRmFj
dG9yeUluZm87CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU291cmNlRXh0ZW5zaW9uRmFj
dG9yeUluZm8+IFNvdXJjZUV4dGVuc2lvbkZhY3RvcnlNYXA7CisKKyAgICB0eXBlZGVmIHN0cnVj
dCB7CisgICAgICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gZXh0ZW5zaW9uOworICAgICAgICBTdHJp
bmcgc291cmNlVG9FeHRlbmQ7CisgICAgfSBTb3VyY2VFeHRlbnNpb25JbmZvOworICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUV4dGVuc2lvbkluZm8+IFNvdXJjZUV4dGVuc2lvbk1h
cDsKKworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIENvbm5lY3RUb1NvdXJjZSwKKyAgICAg
ICAgRGlzY29ubmVjdEZyb21Tb3VyY2UsCisgICAgICAgIFJlbW92ZVNvdXJjZSwKKyAgICAgICAg
SW5zZXJ0U291cmNlCisgICAgfSBUYXNrVHlwZTsKKworICAgIHR5cGVkZWYgc3RydWN0IHsKKyAg
ICAgICAgU3RyaW5nIHNvdXJjZUlkOworICAgICAgICBUYXNrVHlwZSB0eXBlOworICAgICAgICBH
c3RFbGVtZW50KiBzaW5rOworICAgICAgICBHc3RFbGVtZW50KiBzb3VyY2U7CisgICAgICAgIFNv
dXJjZUZhY3RvcnkqIHNvdXJjZUZhY3Rvcnk7CisgICAgICAgIFNvdXJjZUluc2VydGVkQ2FsbGJh
Y2sgY2FsbGJhY2s7CisgICAgICAgIGdwb2ludGVyIHVzZXJEYXRhOworICAgICAgICBHc3RQYWQq
IHBhZDsKKyAgICAgICAgYm9vbCBzb3VyY2VGYWN0b3J5UmVtb3ZlZDsKKyAgICB9IFBpcGVsaW5l
VGFzazsKKyAgICB0eXBlZGVmIFZlY3RvcjxQaXBlbGluZVRhc2sqPiBQaXBlbGluZVRhc2tWZWN0
b3I7CisKKyAgICBib29sIGNvbm5lY3RBbmRHZXRTb3VyY2VFbGVtZW50KGNvbnN0IFN0cmluZyYg
c291cmNlSWQsIEdzdEVsZW1lbnQqKiBzb3VyY2VFbGVtZW50LCBHc3RQYWQqKiBzb3VyY2VQYWQp
OworICAgIHZvaWQgZGlzY29ubmVjdFNvdXJjZUZyb21QaXBlbGluZShHc3RFbGVtZW50KiBzb3Vy
Y2UsIEdzdFBhZCogc291cmNlUGFkKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RTb3VyY2VXaXRoTXVs
dGlwbGVQYWRzRnJvbVBpcGVsaW5lKEdzdEVsZW1lbnQqIHNvdXJjZSk7CisgICAgZ3VpbnQgZGlz
Y29ubmVjdFNpbmtGcm9tUGlwZWxpbmUoR3N0RWxlbWVudCogc2luayk7CisgICAgdm9pZCByZW1v
dmVTb3VyY2VFeHRlbnNpb25Gcm9tQmVoaW5kKEdzdEVsZW1lbnQqIHNvdXJjZUV4dGVuc2lvbik7
CisKKyAgICBnaW50IGRpc2Nvbm5lY3RTaW5rRnJvbVRlZShHc3RFbGVtZW50KiB0ZWUsIEdzdEVs
ZW1lbnQqIHNpbmssIEdzdFBhZCopOworCisgICAgdm9pZCByZW1vdmVTb3VyY2VGYWN0b3J5Rm9y
U291cmNlKEdzdEVsZW1lbnQqIHNvdXJjZSk7CisKKyAgICBHc3RFbGVtZW50KiBtX3BpcGVsaW5l
OworICAgIFBpcGVsaW5lTWFwIG1fcGlwZWxpbmVNYXA7CisgICAgU291cmNlSWRMb29rdXBNYXAg
bV9zb3VyY2VJZExvb2t1cE1hcDsKKyAgICBTb3VyY2VGYWN0b3J5TWFwIG1fc291cmNlRmFjdG9y
eU1hcDsKK307CisKK0NlbnRyYWxQaXBlbGluZVVuaXQmIGNlbnRyYWxQaXBlbGluZVVuaXQoKTsK
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIENlbnRy
YWxQaXBlbGluZVVuaXRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRl
ckdTdHJlYW1lci5jcHAKaW5kZXggODMwODRlMS4uZTYwM2JhZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVy
R1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuY3BwCkBAIC0zNCw2ICszNCw3IEBA
CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVy
R1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVy
LmgiCiAKICNpbmNsdWRlICJJY2VDYW5kaWRhdGVEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiTWVk
aWFTdHJlYW1EZXNjcmlwdG9yLmgiCkBAIC01Miw2ICs1Myw3IEBAIE1lZGlhU3RyZWFtQ2VudGVy
JiBNZWRpYVN0cmVhbUNlbnRlcjo6aW5zdGFuY2UoKQogCiBNZWRpYVN0cmVhbUNlbnRlckdTdHJl
YW1lcjo6TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIoKQogeworICAgIG1fcHJpdmF0ZSA9IE1l
ZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKCk7CiB9CiAKIE1lZGlhU3Ry
ZWFtQ2VudGVyR1N0cmVhbWVyOjp+TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIoKQpAQCAtNjAs
MTIgKzYyLDEyIEBAIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjp+TWVkaWFTdHJlYW1DZW50
ZXJHU3RyZWFtZXIoKQogCiB2b2lkIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjpxdWVyeU1l
ZGlhU3RyZWFtU291cmNlcyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50
PiBjbGllbnQpCiB7Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgYXVkaW9Tb3VyY2VzLCB2
aWRlb1NvdXJjZXM7Ci0gICAgY2xpZW50LT5kaWRDb21wbGV0ZVF1ZXJ5KGF1ZGlvU291cmNlcywg
dmlkZW9Tb3VyY2VzKTsKKyAgICBtX3ByaXZhdGUtPnF1ZXJ5TWVkaWFTdHJlYW1Tb3VyY2VzKGNs
aWVudCk7CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OmRpZFNldE1lZGlh
U3RyZWFtVHJhY2tFbmFibGVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciosIE1lZGlhU3RyZWFtQ29t
cG9uZW50KikKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OmRpZFNldE1lZGlhU3Ry
ZWFtVHJhY2tFbmFibGVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtRGVzY3JpcHRvciwg
TWVkaWFTdHJlYW1Db21wb25lbnQqIGNvbXBvbmVudCkKIHsKKyAgICBtX3ByaXZhdGUtPmRpZFNl
dE1lZGlhU3RyZWFtVHJhY2tFbmFibGVkKHN0cmVhbURlc2NyaXB0b3IsIGNvbXBvbmVudCk7CiB9
CiAKIGJvb2wgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OmRpZEFkZE1lZGlhU3RyZWFtVHJh
Y2soTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiwgTWVkaWFTdHJlYW1Db21wb25lbnQqKQpAQCAtNzgs
OCArODAsMTAgQEAgYm9vbCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6ZGlkUmVtb3ZlTWVk
aWFTdHJlYW1UcmFjayhNZWRpYVN0cmVhbURlc2NyaXB0b3IKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OmRpZFN0b3BMb2NhbE1lZGlhU3Ry
ZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopCit2b2lkIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVh
bWVyOjpkaWRTdG9wTG9jYWxNZWRpYVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVh
bURlc2NyaXB0b3IpCiB7CisgICAgbV9wcml2YXRlLT5kaWRTdG9wTG9jYWxNZWRpYVN0cmVhbShz
dHJlYW1EZXNjcmlwdG9yKTsKKyAgICBlbmRMb2NhbE1lZGlhU3RyZWFtKHN0cmVhbURlc2NyaXB0
b3IpOwogfQogCiB2b2lkIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjpkaWRDcmVhdGVNZWRp
YVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVh
bWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVk
aWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuaAppbmRleCAxYjI2MDQwLi5lMTcyNmMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFT
dHJlYW1DZW50ZXJHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuaApAQCAtNDYsNiAr
NDYsNyBAQCBjbGFzcyBNZWRpYVN0cmVhbUNvbXBvbmVudDsKIGNsYXNzIE1lZGlhU3RyZWFtRGVz
Y3JpcHRvcjsKIGNsYXNzIE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50OwogY2xhc3MgU2Vz
c2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvcjsKK2NsYXNzIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0
ZUdTdHJlYW1lcjsKIAogY2xhc3MgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIgOiBwdWJsaWMg
TWVkaWFTdHJlYW1DZW50ZXIgewogcHVibGljOgpAQCAtNjEsNiArNjIsOSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZU1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRv
ciopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgU3RyaW5nIGNvbnN0cnVjdFNEUChJY2VDYW5kaWRh
dGVEZXNjcmlwdG9yKikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTdHJpbmcgY29uc3RydWN0U0RQ
KFNlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IqKSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAg
ICBPd25QdHI8TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyPiBtX3ByaXZhdGU7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmM0OGYwZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDM5MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTIgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIu
aCIKKworI2luY2x1ZGUgIkNlbnRyYWxQaXBlbGluZVVuaXQuaCIKKyNpbmNsdWRlICJMb2dnaW5n
LmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiTWVkaWFT
dHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVk
ZSA8Z3N0L2ludGVyZmFjZXMvcHJvcGVydHlwcm9iZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgR3N0RWxlbWVudCogZmlu
ZFZpZGVvRGV2aWNlU291cmNlKCk7CitzdGF0aWMgR3N0RWxlbWVudCogZmluZEF1ZGlvRGV2aWNl
U291cmNlKCk7CitzdGF0aWMgR3N0RWxlbWVudCogZmluZERldmljZVNvdXJjZShHc3RFbGVtZW50
KiBhdXRvU3JjKTsKK3N0YXRpYyB2b2lkIHByb2JlU291cmNlKEdzdEVsZW1lbnQqIHNvdXJjZSwg
Y29uc3QgU3RyaW5nJiBrZXksIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlLCBNZWRpYVN0cmVhbVNv
dXJjZVZlY3RvciYgc291cmNlcyk7CitzdGF0aWMgU3RyaW5nIGZpbHRlckF1ZGlvU291cmNlTmFt
ZShjb25zdCBTdHJpbmcmIGRldmljZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUpOworc3RhdGljIFN0
cmluZyBnZXREZXZpY2VTdHJpbmdGcm9tRGV2aWNlSWRTdHJpbmcoY29uc3QgU3RyaW5nJik7Citz
dGF0aWMgU3RyaW5nIGdldEZhY3RvcnlOYW1lRnJvbURldmljZUlkU3RyaW5nKGNvbnN0IFN0cmlu
ZyYpOworc3RhdGljIGdjaGFyKiBjcmVhdGVVbmlxdWVOYW1lKGNvbnN0IGdjaGFyKiBwcmVmaXgp
Oworc3RhdGljIEdzdEVsZW1lbnQqIGNyZWF0ZUF1ZGlvU291cmNlQmluKEdzdEVsZW1lbnQqIHNv
dXJjZSk7CitzdGF0aWMgR3N0RWxlbWVudCogY3JlYXRlVmlkZW9Tb3VyY2VCaW4oR3N0RWxlbWVu
dCogc291cmNlKTsKKwordm9pZCBNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI6OnF1
ZXJ5TWVkaWFTdHJlYW1Tb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlD
bGllbnQ+IHBycENsaWVudCkKK3sKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlD
bGllbnQ+IGNsaWVudCA9IHBycENsaWVudDsKKyAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBh
dWRpb1NvdXJjZXM7CisgICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgdmlkZW9Tb3VyY2VzOwor
CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGlmICghZ3N0X2luaXRfY2hlY2soMCwg
MCwgJmVycm9yLm91dFB0cigpKSkgeworICAgICAgICBjbGllbnQtPmRpZENvbXBsZXRlUXVlcnko
YXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGNsaWVudC0+YXVkaW8oKSkgeworICAgICAgICBHc3RFbGVtZW50KiBhdWRpb1NyYyA9
IGZpbmRBdWRpb0RldmljZVNvdXJjZSgpOworICAgICAgICBpZiAoYXVkaW9TcmMpIHsKKyAgICAg
ICAgICAgIFN0cmluZyBrZXkgPSBzdG9yZUVsZW1lbnRGYWN0b3J5Rm9yRWxlbWVudChhdWRpb1Ny
Yyk7CisgICAgICAgICAgICBwcm9iZVNvdXJjZShhdWRpb1NyYywga2V5LCBNZWRpYVN0cmVhbVNv
dXJjZTo6VHlwZUF1ZGlvLCBhdWRpb1NvdXJjZXMpOworICAgICAgICAgICAgZ3N0X29iamVjdF91
bnJlZihhdWRpb1NyYyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2xpZW50LT52aWRl
bygpKSB7CisgICAgICAgIEdzdEVsZW1lbnQqIHZpZGVvU3JjID0gZmluZFZpZGVvRGV2aWNlU291
cmNlKCk7CisgICAgICAgIGlmICh2aWRlb1NyYykgeworICAgICAgICAgICAgU3RyaW5nIGtleSA9
IHN0b3JlRWxlbWVudEZhY3RvcnlGb3JFbGVtZW50KHZpZGVvU3JjKTsKKyAgICAgICAgICAgIHBy
b2JlU291cmNlKHZpZGVvU3JjLCBrZXksIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlVmlkZW8sIHZp
ZGVvU291cmNlcyk7CisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHZpZGVvU3JjKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJlZ2lzdGVyU291cmNlRmFjdG9yaWVzKGF1ZGlvU291cmNl
cyk7CisgICAgcmVnaXN0ZXJTb3VyY2VGYWN0b3JpZXModmlkZW9Tb3VyY2VzKTsKKworICAgIGNs
aWVudC0+ZGlkQ29tcGxldGVRdWVyeShhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcyk7Cit9CisK
K3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRTZXRNZWRpYVN0cmVh
bVRyYWNrRW5hYmxlZChNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbURlc2NyaXB0b3IsIE1l
ZGlhU3RyZWFtQ29tcG9uZW50KiBjb21wb25lbnQpCit7CisgICAgTE9HKE1lZGlhLCAiZW5hYmxl
ZDogJWQiLCBjb21wb25lbnQtPmVuYWJsZWQoKSk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1DZW50
ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRTdG9wTG9jYWxNZWRpYVN0cmVhbShNZWRpYVN0cmVhbURl
c2NyaXB0b3IqIHN0cmVhbURlc2NyaXB0b3IpCit7CisgICAgTE9HKE1lZGlhLCAiZGlkU3RvcExv
Y2FsTWVkaWFTdHJlYW0gJXMiLCBzdHJlYW1EZXNjcmlwdG9yLT5sYWJlbCgpLnV0ZjgoKS5kYXRh
KCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0cmVhbURlc2NyaXB0b3ItPm51
bWJlck9mVmlkZW9Db21wb25lbnRzKCk7IGkrKykgeworICAgICAgICBNZWRpYVN0cmVhbUNvbXBv
bmVudCAqY29tcG9uZW50ID0gc3RyZWFtRGVzY3JpcHRvci0+dmlkZW9Db21wb25lbnQoaSk7Cisg
ICAgICAgIE1lZGlhU3RyZWFtU291cmNlICpzb3VyY2UgPSBjb21wb25lbnQtPnNvdXJjZSgpOwor
CisgICAgICAgIGNvbXBvbmVudC0+c2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIHNvdXJjZS0+
c2V0UmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZUVuZGVkKTsKKyAgICB9
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RyZWFtRGVzY3JpcHRvci0+bnVtYmVy
T2ZBdWRpb0NvbXBvbmVudHMoKTsgaSsrKSB7CisgICAgICAgIE1lZGlhU3RyZWFtQ29tcG9uZW50
ICpjb21wb25lbnQgPSBzdHJlYW1EZXNjcmlwdG9yLT5hdWRpb0NvbXBvbmVudChpKTsKKyAgICAg
ICAgTWVkaWFTdHJlYW1Tb3VyY2UgKnNvdXJjZSA9IGNvbXBvbmVudC0+c291cmNlKCk7CisKKyAg
ICAgICAgY29tcG9uZW50LT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgc291cmNlLT5zZXRS
ZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291cmNlOjpSZWFkeVN0YXRlRW5kZWQpOworICAgIH0KK30K
Kwordm9pZCBNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI6OnJlZ2lzdGVyU291cmNl
RmFjdG9yaWVzKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2VzKQoreworICAg
IENlbnRyYWxQaXBlbGluZVVuaXQmIGNwdSA9IGNlbnRyYWxQaXBlbGluZVVuaXQoKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNlcy5zaXplKCk7IGkrKykgeworICAgICAgICBT
dHJpbmcgaWQgPSBzb3VyY2VzW2ldLT5pZCgpOworICAgICAgICBTdHJpbmcgZGV2aWNlU3RyaW5n
ID0gZ2V0RGV2aWNlU3RyaW5nRnJvbURldmljZUlkU3RyaW5nKGlkKTsKKyAgICAgICAgU3RyaW5n
IGZhY3RvcnlTdHJpbmcgPSBnZXRGYWN0b3J5TmFtZUZyb21EZXZpY2VJZFN0cmluZyhpZCk7CisK
KyAgICAgICAgU3RyaW5nIHNvdXJjZUlkID0gc3RvcmVTb3VyY2VJbmZvKHNvdXJjZXNbaV0tPnR5
cGUoKSwgZmFjdG9yeVN0cmluZywgZGV2aWNlU3RyaW5nKTsKKyAgICAgICAgTE9HKE1lZGlhLCAi
UmVnaXN0ZXJpbmcgc291cmNlIGZhY3RvcnkgZm9yIHNvdXJjZSB3aXRoIGlkPSVzIiwgc291cmNl
SWQuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBjcHUucmVnaXN0ZXJTb3VyY2VGYWN0b3J5KHRo
aXMsIHNvdXJjZUlkKTsKKyAgICB9Cit9CisKK1N0cmluZyBNZWRpYVN0cmVhbUNlbnRlclByaXZh
dGVHU3RyZWFtZXI6OnN0b3JlRWxlbWVudEZhY3RvcnlGb3JFbGVtZW50KEdzdEVsZW1lbnQqIHNv
dXJjZSkKK3sKKyAgICBHc3RFbGVtZW50RmFjdG9yeSogZWxlbWVudEZhY3RvcnkgPSBnc3RfZWxl
bWVudF9nZXRfZmFjdG9yeShzb3VyY2UpOworICAgIGdjaGFyKiBmYWN0b3J5TmFtZSA9IGdzdF9l
bGVtZW50X2dldF9uYW1lKGVsZW1lbnRGYWN0b3J5KTsKKyAgICBTdHJpbmcgc3RyRmFjdG9yeU5h
bWUoZmFjdG9yeU5hbWUpOworICAgIGdfZnJlZShmYWN0b3J5TmFtZSk7CisKKyAgICBFbGVtZW50
RmFjdG9yeU1hcDo6aXRlcmF0b3IgZWxlbWVudEZhY3RvcnlJdCA9IG1fZWxlbWVudEZhY3RvcnlN
YXAuZmluZChzdHJGYWN0b3J5TmFtZSk7CisgICAgaWYgKGVsZW1lbnRGYWN0b3J5SXQgPT0gbV9l
bGVtZW50RmFjdG9yeU1hcC5lbmQoKSkKKyAgICAgICAgbV9lbGVtZW50RmFjdG9yeU1hcC5hZGQo
c3RyRmFjdG9yeU5hbWUsIGVsZW1lbnRGYWN0b3J5KTsKKworICAgIHJldHVybiBzdHJGYWN0b3J5
TmFtZTsKK30KKworR3N0RWxlbWVudEZhY3RvcnkqIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdT
dHJlYW1lcjo6c3RvcmVkRWxlbWVudEZhY3RvcnkoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAg
R3N0RWxlbWVudEZhY3RvcnkqIGVsZW1lbnRGYWN0b3J5ID0gMDsKKyAgICBFbGVtZW50RmFjdG9y
eU1hcDo6aXRlcmF0b3IgZWxlbWVudEZhY3RvcnlJdCA9IG1fZWxlbWVudEZhY3RvcnlNYXAuZmlu
ZChrZXkpOworICAgIGlmIChlbGVtZW50RmFjdG9yeUl0ICE9IG1fZWxlbWVudEZhY3RvcnlNYXAu
ZW5kKCkpCisgICAgICAgIGVsZW1lbnRGYWN0b3J5ID0gKGVsZW1lbnRGYWN0b3J5SXQtPnZhbHVl
KS5nZXQoKTsKKyAgICByZXR1cm4gZWxlbWVudEZhY3Rvcnk7Cit9CisKK1N0cmluZyBNZWRpYVN0
cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI6OnN0b3JlU291cmNlSW5mbyhNZWRpYVN0cmVhbVNv
dXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGZhY3RvcnlLZXksIGNvbnN0IFN0cmluZyYg
ZGV2aWNlKQoreworICAgIFN0cmluZyBrZXkgPSBTdHJpbmcoZmFjdG9yeUtleSk7CisgICAga2V5
LmFwcGVuZCgiOyIpOworICAgIGtleS5hcHBlbmQoZGV2aWNlKTsKKworICAgIFNvdXJjZUluZm9N
YXA6Oml0ZXJhdG9yIHNvdXJjZUluZm9JdCA9IG1fc291cmNlSW5mb01hcC5maW5kKGtleSk7Cisg
ICAgaWYgKHNvdXJjZUluZm9JdCAhPSBtX3NvdXJjZUluZm9NYXAuZW5kKCkpCisgICAgICAgIHJl
dHVybiBzb3VyY2VJbmZvSXQtPmtleTsKKworICAgIFNvdXJjZUluZm8gc291cmNlSW5mbyA9IHtm
YWN0b3J5S2V5LCB0eXBlLCBkZXZpY2V9OworICAgIFNvdXJjZUluZm9NYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX3NvdXJjZUluZm9NYXAuYWRkKGtleSwgc291cmNlSW5mbyk7CisKKyAgICByZXR1
cm4ga2V5OworfQorCitHc3RFbGVtZW50KiBNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFt
ZXI6OmNyZWF0ZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlkLCBHc3RQYWQqKiBzcmNQYWQp
Cit7CisgICAgTE9HKE1lZGlhLCAiQ3JlYXRpbmcgc291cmNlIHdpdGggaWQ9JXMiLCBzb3VyY2VJ
ZC5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBTb3VyY2VJbmZvTWFwOjppdGVyYXRvciBzb3VyY2VJ
bmZvSXQgPSBtX3NvdXJjZUluZm9NYXAuZmluZChzb3VyY2VJZCk7CisgICAgaWYgKHNvdXJjZUlu
Zm9JdCA9PSBtX3NvdXJjZUluZm9NYXAuZW5kKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
U291cmNlSW5mbyBzb3VyY2VJbmZvID0gc291cmNlSW5mb0l0LT52YWx1ZTsKKworICAgIEdzdEVs
ZW1lbnRGYWN0b3J5KiBmYWN0b3J5ID0gc3RvcmVkRWxlbWVudEZhY3Rvcnkoc291cmNlSW5mby5t
X2ZhY3RvcnlLZXkpOworICAgIGlmICghZmFjdG9yeSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBHc3RFbGVtZW50KiBzb3VyY2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZShmYWN0b3J5
LCAiZGV2aWNlX3NvdXJjZSIpOworICAgIGlmICghc291cmNlKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIExPRyhNZWRpYSwgInNvdXJjZUluZm8ubV9kZXZpY2U9JXMiLCBzb3VyY2VJbmZvLm1f
ZGV2aWNlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAvLyBkbyBub3Qgc2V0IGRldmljZSBmb3IgdGVz
dCBzb3VyY2VzCisgICAgaWYgKHNvdXJjZUluZm8ubV9kZXZpY2UgIT0gInRlc3RzcmNfYXVkaW8i
CisgICAgICAgICYmIHNvdXJjZUluZm8ubV9kZXZpY2UgIT0gInRlc3RzcmNfdmlkZW8iKQorICAg
ICAgICBnX29iamVjdF9zZXQoc291cmNlLCAiZGV2aWNlIiwgc291cmNlSW5mby5tX2RldmljZS5h
c2NpaSgpLmRhdGEoKSwgTlVMTCk7CisKKyAgICBpZiAoc291cmNlSW5mby5tX3R5cGUgPT0gTWVk
aWFTdHJlYW1Tb3VyY2U6OlR5cGVBdWRpbykKKyAgICAgICAgc291cmNlID0gY3JlYXRlQXVkaW9T
b3VyY2VCaW4oc291cmNlKTsKKyAgICBlbHNlIGlmIChzb3VyY2VJbmZvLm1fdHlwZSA9PSBNZWRp
YVN0cmVhbVNvdXJjZTo6VHlwZVZpZGVvKQorICAgICAgICBzb3VyY2UgPSBjcmVhdGVWaWRlb1Nv
dXJjZUJpbihzb3VyY2UpOworCisgICAgaWYgKHNyY1BhZCkKKyAgICAgICAgKnNyY1BhZCA9IGdz
dF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHNvdXJjZSwgInNyYyIpOworCisgICAgcmV0dXJuIHNv
dXJjZTsKK30KKworc3RhdGljIEdzdEVsZW1lbnQqIGZpbmRBdWRpb0RldmljZVNvdXJjZSgpCit7
CisgICAgR3N0RWxlbWVudCogYXV0b1NyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXV0
b2F1ZGlvc3JjIiwgImF1dG9zcmMiKTsKKyAgICBpZiAoIWF1dG9TcmMpCisgICAgICAgIHJldHVy
biAwOworICAgIEdzdEVsZW1lbnQqIGF1ZGlvU3JjID0gZmluZERldmljZVNvdXJjZShhdXRvU3Jj
KTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmKGF1dG9TcmMpOworICAgIHJldHVybiBhdWRpb1NyYzsK
K30KKworc3RhdGljIEdzdEVsZW1lbnQqIGZpbmRWaWRlb0RldmljZVNvdXJjZSgpCit7CisgICAg
R3N0RWxlbWVudCogYXV0b1NyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXV0b3ZpZGVv
c3JjIiwgImF1dG9zcmMiKTsKKyAgICBpZiAoIWF1dG9TcmMpCisgICAgICAgIHJldHVybiAwOwor
ICAgIEdzdEVsZW1lbnQqIHZpZGVvU3JjID0gZmluZERldmljZVNvdXJjZShhdXRvU3JjKTsKKyAg
ICBnc3Rfb2JqZWN0X3VucmVmKGF1dG9TcmMpOworICAgIHJldHVybiB2aWRlb1NyYzsKK30KKwor
c3RhdGljIEdzdEVsZW1lbnQqIGZpbmREZXZpY2VTb3VyY2UoR3N0RWxlbWVudCogYXV0b1NyYykK
K3sKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzdGF0ZUNoYW5nZVJlc3VsdCA9IGdzdF9lbGVt
ZW50X3NldF9zdGF0ZShhdXRvU3JjLCBHU1RfU1RBVEVfUkVBRFkpOworICAgIGlmIChzdGF0ZUNo
YW5nZVJlc3VsdCAhPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiAw
OworCisgICAgR3N0Q2hpbGRQcm94eSogY2hpbGRQcm94eSA9IEdTVF9DSElMRF9QUk9YWShhdXRv
U3JjKTsKKyAgICBpZiAoIWNoaWxkUHJveHkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR3N0
RWxlbWVudCogZGV2aWNlU3JjID0gMDsKKyAgICBndWludCBjaGlsZENvdW50ID0gZ3N0X2NoaWxk
X3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudChjaGlsZFByb3h5KTsKKyAgICBpZiAoY2hpbGRDb3Vu
dCkgeworICAgICAgICBHc3RPYmplY3QqIGNoaWxkID0gZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGls
ZF9ieV9pbmRleChjaGlsZFByb3h5LCAwKTsKKyAgICAgICAgZGV2aWNlU3JjID0gR1NUX0VMRU1F
TlQoY2hpbGQpOworICAgIH0KKworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShhdXRvU3JjLCBH
U1RfU1RBVEVfTlVMTCk7CisgICAgcmV0dXJuIGRldmljZVNyYzsKK30KKworc3RhdGljIHZvaWQg
cHJvYmVTb3VyY2UoR3N0RWxlbWVudCogc291cmNlLCBjb25zdCBTdHJpbmcmIGtleSwgTWVkaWFT
dHJlYW1Tb3VyY2U6OlR5cGUgdHlwZSwgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHNvdXJjZXMp
Cit7CisgICAgR3N0UHJvcGVydHlQcm9iZSogcHJvYmUgPSBHU1RfUFJPUEVSVFlfUFJPQkUoc291
cmNlKTsKKyAgICBpZiAoIXByb2JlKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBHUGFy
YW1TcGVjKiBwc3BlYyA9IGdzdF9wcm9wZXJ0eV9wcm9iZV9nZXRfcHJvcGVydHkocHJvYmUsICJk
ZXZpY2UiKTsKKyAgICBpZiAoIXBzcGVjKQorICAgICAgICByZXR1cm47CisKKyAgICBHVmFsdWVB
cnJheSogYXJyYXkgPSBnc3RfcHJvcGVydHlfcHJvYmVfcHJvYmVfYW5kX2dldF92YWx1ZXMocHJv
YmUsIHBzcGVjKTsKKyAgICBpZiAoYXJyYXkpIHsKKyAgICAgICAgR1ZhbHVlKiB2YWx1ZSA9IDA7
CisgICAgICAgIGdjaGFyKiBkZXZpY2VOYW1lID0gMDsKKworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IChpbnQpYXJyYXktPm5fdmFsdWVzOyBpKyspIHsKKyAgICAgICAgICAgIHZhbHVlID0g
Z192YWx1ZV9hcnJheV9nZXRfbnRoKGFycmF5LCBpKTsKKyAgICAgICAgICAgIGNvbnN0IGdjaGFy
KiBkZXZpY2UgPSBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpOworICAgICAgICAgICAgZ19vYmpl
Y3Rfc2V0KHNvdXJjZSwgImRldmljZSIsIGRldmljZSwgTlVMTCk7CisgICAgICAgICAgICBnX29i
amVjdF9nZXQoc291cmNlLCAiZGV2aWNlLW5hbWUiLCAmZGV2aWNlTmFtZSwgTlVMTCk7CisgICAg
ICAgICAgICBTdHJpbmcgc291cmNlTmFtZSA9IFN0cmluZyhkZXZpY2VOYW1lKTsKKworICAgICAg
ICAgICAgU3RyaW5nIGRldmljZUlkID0ga2V5OworICAgICAgICAgICAgZGV2aWNlSWQuYXBwZW5k
KCI7Iik7CisgICAgICAgICAgICBkZXZpY2VJZC5hcHBlbmQoZGV2aWNlKTsKKworICAgICAgICAg
ICAgZ2NoYXIqIHNvdXJjZUVsZW1lbnROYW1lID0gZ3N0X2VsZW1lbnRfZ2V0X25hbWUoc291cmNl
KTsKKyAgICAgICAgICAgIGlmICghZ19zdHJjbXAwKHNvdXJjZUVsZW1lbnROYW1lLCAiYXV0b3Ny
Yy1hY3R1YWwtc3JjLXB1bHMiKSkKKyAgICAgICAgICAgICAgICBzb3VyY2VOYW1lID0gZmlsdGVy
QXVkaW9Tb3VyY2VOYW1lKGRldmljZUlkLCBzb3VyY2VOYW1lKTsKKyAgICAgICAgICAgIGdfZnJl
ZShzb3VyY2VFbGVtZW50TmFtZSk7CisKKyAgICAgICAgICAgIGlmICghc291cmNlTmFtZS5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgc291cmNlcy5hcHBlbmQoTWVkaWFTdHJlYW1Tb3VyY2U6
OmNyZWF0ZShkZXZpY2VJZCwgdHlwZSwgc291cmNlTmFtZSkpOworICAgICAgICAgICAgZ19mcmVl
KGRldmljZU5hbWUpOworICAgICAgICB9CisgICAgICAgIGdfdmFsdWVfYXJyYXlfZnJlZShhcnJh
eSk7CisgICAgfQorfQorCitzdGF0aWMgU3RyaW5nIGZpbHRlckF1ZGlvU291cmNlTmFtZShjb25z
dCBTdHJpbmcmIGRldmljZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgLy8gYXV0b3Ny
Yy1hY3R1YWwtc3JjLXB1bHMgcmV0dXJucyBvdXRwdXQgZGV2aWNlcywgYW5kIGRvZXMgbm90IHN1
cHBseSBkZXZpY2VOYW1lLiBUaGlzCisgICAgLy8gcmVtb3ZlcyB0aGUgb3V0cHV0IGFuZCBwYXJz
ZXMgYSBzb21ld2hhdCByZWFkYWJsZSBkaXNwbGF5IG5hbWUgZnJvbSB0aGUgImRldmljZSBpZCIu
CisgICAgaWYgKGRldmljZUlkLmNvbnRhaW5zKCJhbHNhX291dHB1dCIsIGZhbHNlKSkKKyAgICAg
ICAgcmV0dXJuICIiOworCisgICAgZ3VpbnQgbGVuZ3RoID0gZGV2aWNlSWQubGVuZ3RoKCk7Cisg
ICAgc2l6ZV90IHBvc2l0aW9uID0gZGV2aWNlSWQuZmluZCgiYWxzYV9pbnB1dC4iKTsKKyAgICBp
ZiAocG9zaXRpb24gIT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybiBkZXZpY2VJZC5zdWJzdHJp
bmcocG9zaXRpb24gKyAxMSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gbmFtZTsKK30KKworc3RhdGlj
IFN0cmluZyBnZXREZXZpY2VTdHJpbmdGcm9tRGV2aWNlSWRTdHJpbmcoY29uc3QgU3RyaW5nJiBk
ZXZpY2VJZCkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBkZXZpY2VJZC5maW5kKCI7Iik7CisgICAg
U3RyaW5nIGRldmljZVN0ciA9IGRldmljZUlkLnN1YnN0cmluZyhpbmRleCsxLCBkZXZpY2VJZC5s
ZW5ndGgoKSk7CisgICAgcmV0dXJuIGRldmljZVN0cjsKK30KKworc3RhdGljIFN0cmluZyBnZXRG
YWN0b3J5TmFtZUZyb21EZXZpY2VJZFN0cmluZyhjb25zdCBTdHJpbmcmIGRldmljZUlkKQorewor
ICAgIHNpemVfdCBpbmRleCA9IGRldmljZUlkLmZpbmQoIjsiKTsKKyAgICBTdHJpbmcgZGV2aWNl
U3RyID0gZGV2aWNlSWQubGVmdChpbmRleCk7CisgICAgcmV0dXJuIGRldmljZVN0cjsKK30KKwor
c3RhdGljIGdjaGFyKiBjcmVhdGVVbmlxdWVOYW1lKGNvbnN0IGdjaGFyKiBwcmVmaXgpCit7Cisg
ICAgc3RhdGljIGludCBjb3VudCA9IDA7CisgICAgZ2NoYXIqIHVuaXF1ZU5hbWUgPSBnX3N0cmR1
cF9wcmludGYoIiVzJWQiLCBwcmVmaXgsIGNvdW50KyspOworICAgIHJldHVybiB1bmlxdWVOYW1l
OworfQorCitzdGF0aWMgR3N0RWxlbWVudCogY3JlYXRlQXVkaW9Tb3VyY2VCaW4oR3N0RWxlbWVu
dCogc291cmNlKQoreworICAgIEdzdEVsZW1lbnQqIGF1ZGlvY29udmVydCA9IGdzdF9lbGVtZW50
X2ZhY3RvcnlfbWFrZSgiYXVkaW9jb252ZXJ0IiwgImF1ZGlvY29udmVydCIpOworICAgIGlmICgh
YXVkaW9jb252ZXJ0KSB7CisgICAgICAgIExPRyhNZWRpYSwgIkVSUk9SLCBHb3Qgbm8gYXVkaW9j
b252ZXJ0IGVsZW1lbnQgZm9yIGF1ZGlvIHNvdXJjZSBwaXBlbGluZSIpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBHc3RDYXBzKiBhdWRpb2NhcHMgPSBnc3RfY2Fwc19uZXdfc2lt
cGxlKCJhdWRpby94LXJhdy1pbnQiLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAxLCBOVUxMKTsK
KyAgICBpZiAoIWF1ZGlvY2FwcykgeworICAgICAgICBMT0coTWVkaWEsICJFUlJPUiwgVW5hYmxl
IHRvIGNyZWF0ZSBmaWx0ZXIgY2FwcyBmb3IgYXVkaW8gc291cmNlIHBpcGVsaW5lIik7CisgICAg
ICAgIGdzdF9vYmplY3RfdW5yZWYoYXVkaW9jb252ZXJ0KTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgZ2NoYXIqIGJpbk5hbWUgPSBjcmVhdGVVbmlxdWVOYW1lKCJTdHJlYW1EZXZp
Y2VfQXVkaW9UZXN0U291cmNlQmluIik7CisgICAgR3N0RWxlbWVudCogYXVkaW9Tb3VyY2VCaW4g
PSBnc3RfYmluX25ldyhiaW5OYW1lKTsKKyAgICBnX2ZyZWUoYmluTmFtZSk7CisKKyAgICBnc3Rf
YmluX2FkZF9tYW55KEdTVF9CSU4oYXVkaW9Tb3VyY2VCaW4pLCBzb3VyY2UsIGF1ZGlvY29udmVy
dCwgTlVMTCk7CisKKyAgICBpZiAoIWdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQoc291cmNlLCBh
dWRpb2NvbnZlcnQsIGF1ZGlvY2FwcykpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIENh
bm5vdCBsaW5rIGF1ZGlvIHNvdXJjZSBlbGVtZW50cyIpOworICAgICAgICBnc3RfY2Fwc191bnJl
ZihhdWRpb2NhcHMpOworICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKGF1ZGlvU291cmNlQmluKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGdzdF9jYXBzX3VucmVmKGF1ZGlvY2Fwcyk7
CisKKyAgICBHc3RQYWQqIHNyY1BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGF1ZGlv
Y29udmVydCwgInNyYyIpOworICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoYXVkaW9Tb3VyY2VCaW4s
IGdzdF9naG9zdF9wYWRfbmV3KCJzcmMiLCBzcmNQYWQpKTsKKworICAgIHJldHVybiBhdWRpb1Nv
dXJjZUJpbjsKK30KKworc3RhdGljIEdzdEVsZW1lbnQqIGNyZWF0ZVZpZGVvU291cmNlQmluKEdz
dEVsZW1lbnQgKnNvdXJjZSkKK3sKKyAgICBHc3RFbGVtZW50KiBjb2xvcnNwYWNlID0gZ3N0X2Vs
ZW1lbnRfZmFjdG9yeV9tYWtlKCJmZm1wZWdjb2xvcnNwYWNlIiwgImNvbG9yc3BhY2UiKTsKKyAg
ICBpZiAoIWNvbG9yc3BhY2UpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIEdvdCBubyBm
Zm1wZWdjb2xvcnNwYWNlIGVsZW1lbnQgZm9yIHZpZGVvIHNvdXJjZSBwaXBlbGluZSIpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgR3N0RWxlbWVudCogdmlkZW9zY2FsZSA9IGdzdF9l
bGVtZW50X2ZhY3RvcnlfbWFrZSgidmlkZW9zY2FsZSIsICJ2aWRlb3NjYWxlIik7CisgICAgaWYg
KCF2aWRlb3NjYWxlKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkVSUk9SLCBHb3Qgbm8gdmlkZW9z
Y2FsZSBlbGVtZW50IGZvciB2aWRlbyBzb3VyY2UgcGlwZWxpbmUiKTsKKyAgICAgICAgZ3N0X29i
amVjdF91bnJlZihjb2xvcnNwYWNlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
R3N0Q2FwcyogdmlkZW9jYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1yYXcteXV2
IiwgIndpZHRoIiwgR19UWVBFX0lOVCwgMzIwLCAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgMjQwLCBO
VUxMKTsKKyAgICBpZiAoIXZpZGVvY2FwcykgeworICAgICAgICBMT0coTWVkaWEsICJFUlJPUiwg
VW5hYmxlIHRvIGNyZWF0ZSBmaWx0ZXIgY2FwcyBmb3IgdmlkZW8gc291cmNlIHBpcGVsaW5lIik7
CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoY29sb3JzcGFjZSk7CisgICAgICAgIGdzdF9vYmpl
Y3RfdW5yZWYodmlkZW9zY2FsZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGdj
aGFyKiBiaW5OYW1lID0gY3JlYXRlVW5pcXVlTmFtZSgiU3RyZWFtRGV2aWNlX1ZpZGVvVGVzdFNv
dXJjZUJpbiIpOworICAgIEdzdEVsZW1lbnQqIHZpZGVvU291cmNlQmluID0gZ3N0X2Jpbl9uZXco
YmluTmFtZSk7CisgICAgZ19mcmVlKGJpbk5hbWUpOworCisgICAgZ3N0X2Jpbl9hZGRfbWFueShH
U1RfQklOKHZpZGVvU291cmNlQmluKSwgc291cmNlLCB2aWRlb3NjYWxlLCBjb2xvcnNwYWNlLCBO
VUxMKTsKKworICAgIGlmICghZ3N0X2VsZW1lbnRfbGlua19tYW55KHNvdXJjZSwgdmlkZW9zY2Fs
ZSwgTlVMTCkKKyAgICAgICAgfHwgIWdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQodmlkZW9zY2Fs
ZSwgY29sb3JzcGFjZSwgdmlkZW9jYXBzKSkgeworICAgICAgICBMT0coTWVkaWEsICJFUlJPUiwg
Q2Fubm90IGxpbmsgdmlkZW8gc291cmNlIGVsZW1lbnRzIik7CisgICAgICAgIGdzdF9jYXBzX3Vu
cmVmKHZpZGVvY2Fwcyk7CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYodmlkZW9Tb3VyY2VCaW4p
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZ3N0X2NhcHNfdW5yZWYodmlkZW9jYXBz
KTsKKworICAgIEdzdFBhZCogc3JjUGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoY29s
b3JzcGFjZSwgInNyYyIpOworICAgIGdzdF9lbGVtZW50X2FkZF9wYWQodmlkZW9Tb3VyY2VCaW4s
IGdzdF9naG9zdF9wYWRfbmV3KCJzcmMiLCBzcmNQYWQpKTsKKworICAgIHJldHVybiB2aWRlb1Nv
dXJjZUJpbjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNl
bnRlclByaXZhdGVHU3RyZWFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zNzU4YzU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5oCkBA
IC0wLDAgKzEsODUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisK
KyNpZm5kZWYgTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyX2gKKyNkZWZpbmUgTWVk
aWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgorI2luY2x1ZGUgIlNvdXJjZUZh
Y3RvcnkuaCIKKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVN0cmVhbUNlbnRlcjsKK2NsYXNzIE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjsKK2NsYXNzIE1lZGlhU3RyZWFtQ29tcG9uZW50OworY2xhc3MgTWVkaWFT
dHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQ7CisKK2NsYXNzIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0
ZUdTdHJlYW1lciA6IHByaXZhdGUgU291cmNlRmFjdG9yeSB7Citwcml2YXRlOgorICAgIHR5cGVk
ZWYgc3RydWN0IHsKKyAgICAgICAgU3RyaW5nIG1fZmFjdG9yeUtleTsKKyAgICAgICAgTWVkaWFT
dHJlYW1Tb3VyY2U6OlR5cGUgbV90eXBlOworICAgICAgICBTdHJpbmcgbV9kZXZpY2U7CisgICAg
fSBTb3VyY2VJbmZvOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU291cmNlSW5mbz4g
U291cmNlSW5mb01hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRyPEdzdEVs
ZW1lbnRGYWN0b3J5PiA+IEVsZW1lbnRGYWN0b3J5TWFwOworCitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyPiBjcmVhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNZWRpYVN0cmVhbUNlbnRlclByaXZh
dGVHU3RyZWFtZXIoKSk7CisgICAgfQorCisgICAgdm9pZCBxdWVyeU1lZGlhU3RyZWFtU291cmNl
cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50Pik7CisKKyAgICB2b2lk
IGRpZFNldE1lZGlhU3RyZWFtVHJhY2tFbmFibGVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciosIE1l
ZGlhU3RyZWFtQ29tcG9uZW50Kik7CisgICAgdm9pZCBkaWRTdG9wTG9jYWxNZWRpYVN0cmVhbShN
ZWRpYVN0cmVhbURlc2NyaXB0b3IqKTsKKworcHJpdmF0ZToKKyAgICBNZWRpYVN0cmVhbUNlbnRl
clByaXZhdGVHU3RyZWFtZXIoKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJlZ2lzdGVyU291
cmNlRmFjdG9yaWVzKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJik7CisgICAgU3RyaW5n
IHN0b3JlRWxlbWVudEZhY3RvcnlGb3JFbGVtZW50KEdzdEVsZW1lbnQqIHNvdXJjZSk7CisgICAg
R3N0RWxlbWVudEZhY3RvcnkgKnN0b3JlZEVsZW1lbnRGYWN0b3J5KGNvbnN0IFN0cmluZyYga2V5
KTsKKyAgICBTdHJpbmcgc3RvcmVTb3VyY2VJbmZvKE1lZGlhU3RyZWFtU291cmNlOjpUeXBlLCBj
b25zdCBTdHJpbmcmIGZhY3RvcnlLZXksIGNvbnN0IFN0cmluZyYgZGV2aWNlKTsKKworICAgIC8v
IFNvdXJjZUZhY3RvcnkKKyAgICBHc3RFbGVtZW50KiBjcmVhdGVTb3VyY2UoY29uc3QgU3RyaW5n
JiBzb3VyY2VJZCwgR3N0UGFkKiogc3JjUGFkKTsKKworICAgIEVsZW1lbnRGYWN0b3J5TWFwIG1f
ZWxlbWVudEZhY3RvcnlNYXA7CisgICAgU291cmNlSW5mb01hcCBtX3NvdXJjZUluZm9NYXA7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RS
RUFNKQorCisjZW5kaWYgLy8gTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9T
b3VyY2VGYWN0b3J5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvU291cmNlRmFjdG9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjI5MDBhNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvU291cmNlRmFjdG9yeS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFNvdXJjZUZhY3Rvcnlf
aAorI2RlZmluZSBTb3VyY2VGYWN0b3J5X2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisK
KyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU291cmNlRmFjdG9yeSB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCBHc3RFbGVtZW50KiBjcmVhdGVTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJ
ZCwgR3N0UGFkKiogc3JjUGFkKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5Tb3Vy
Y2VGYWN0b3J5KCkgeyB9Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEVEKE1FRElBX1NUUkVB
TSkKKworI2VuZGlmIC8vIFNvdXJjZUZhY3RvcnlfaAo=
</data>
<flag name="commit-queue"
          id="184043"
          type_id="3"
          status="-"
          setter="gtk-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185577</attachid>
            <date>2013-01-30 14:32:22 -0800</date>
            <delta_ts>2013-02-04 13:11:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100261-20130130162906.patch</filename>
            <type>text/plain</type>
            <size>77199</size>
            <attacher name="Jonathon Jongsma (jonner)">jonathon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGVlMDljZjY3NDJiNjMz
MDdiZGQxYmJhNTEyNmFkNzYyOTdkMjQ0OS4uZDhjOWE2OWNiNzA4YWI4ZjI3NWRmZjkwMjlkN2Iw
OTg5YjBlNjFjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAxMy0wMS0zMCAgSm9u
YXRob24gSm9uZ3NtYSAgPGpvbmF0aG9uLmpvbmdzbWFAY29sbGFib3JhLmNvbT4KKworICAgICAg
ICBbZ3RrXSBSZWZhY3RvciB0aGUgbWVkaWEgcGxheWVyIGltcGxlbWVudGF0aW9uIHNvIG1vcmUg
b2YgdGhlCisgICAgICAgIGludGVybmFsIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIHNoYXJlZCBiZXR3
ZWVuIHRoZSBjdXJyZW50IG1lZGlhCisgICAgICAgIGJhY2tlbmQgYW5kIHRoZSBtZWRpYXN0cmVh
bSBwbGF5ZXIgYmFja2VuZC4gIENvbW1vbiBjb2RlIGlzCisgICAgICAgIGJyb2tlbiBvdXQgaW50
byBhIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UsIGFuZCBib3RoCisgICAgICAgIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciBhbmQKKyAgICAgICAgU3RyZWFtTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyIGluaGVyaXQgZnJvbSB0aGlzIGJhc2UgY2xhc3MuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyNjEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMh
KS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5zdGFsbGVkTWVk
aWFFbmdpbmVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpwbGF5YmFja1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW8pOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlv
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZl
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFu
ZGxlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmZpbGxUaW1lckZpcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgIChNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjppc0xpdmVTdHJlYW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmdyZWF0ZXN0Q29tbW9uRGl2aXNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjptZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2VkQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFQbGF5ZXJQcml2YXRlVm9sdW1lQ2hhbmdlVGltZW91
dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhUGxheWVyUHJpdmF0ZU11dGVDaGFu
Z2VkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFQbGF5ZXJQcml2YXRlTXV0ZUNo
YW5nZVRpbWVvdXRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjptZWRpYVBsYXllclByaXZh
dGVSZXBhaW50Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp+TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlOjpuYXR1cmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRWb2x1bWUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6
dm9sdW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZTo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRNdXRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpub3RpZnlQbGF5ZXJP
Zk11dGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6bXV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6dHJpZ2dlclJlcGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzdXBwb3J0c0Z1bGxzY3JlZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cGxhdGZvcm1N
ZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
Ojptb3ZpZUxvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2U6OmNyZWF0ZVZpZGVvU2luayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRTdHJlYW1Wb2x1bWVFbGVtZW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlOjpzdXBwb3J0c011dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Omhhc1NpbmdsZVNlY3VyaXR5
T3JpZ2luKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvU3RyZWFtTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6U3Ry
ZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmVh
bU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6flN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Omhhc1ZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmVhbU1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFzQXVkaW8pOgorICAgICAgICAoV2ViQ29yZTo6U3Ry
ZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZExvYWRp
bmdQcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmludGVybmFsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6U3RyZWFtTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3Ry
ZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWdpc3Rlck1lZGlhRW5naW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Z2V0U3Vw
cG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U3RyZWFtTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZUNoYW5nZWRTdGF0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1N0cmVhbU1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU3Ry
ZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmVh
bU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuY2VsTG9hZCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByZXBhcmVUb1BsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkdXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmVhbU1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6c2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnNlZWtpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3RyZWFtTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRSYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJlc2VydmVzUGl0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVzZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpo
YXNDbG9zZWRDYXB0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnNldENsb3NlZENhcHRpb25zVmlzaWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om1heFRpbWVTZWVrYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1
ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6dG90YWxCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmJ5dGVzTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmVhbU1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuTG9hZFBvc3Rlcik6CisgICAgICAgIChXZWJD
b3JlOjpTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFBvc3Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmlzTGl2ZVN0
cmVhbSk6CisKIDIwMTMtMDEtMTggIENocmlzIEhvcG1hbiAgPGNqaG9wbWFuQGdvb2dsZS5jb20+
CiAKICAgICAgICAgRml4IHNjcm9sbFJlY3RUb1Zpc2libGUgaW4gdGhlIHByZXNlbmNlIG9mIHRy
YW5zZm9ybXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0g
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDlkY2RmMDM4ZjI4MDEz
OGJlZDUzZDA3MDUyNzRmM2E5OTRmMzYwNzEuLjVmYTE4NDIxOGRmOTFmYmVlYjY4ZWJkMDg1NjQ4
YjdhOTc3NWM0ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjA2MSw4ICs2
MDYxLDEyIEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckdXb3JsZC5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1l
ci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9TdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0Zm9ybVZpZGVvV2luZG93R3RrLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtVmlkZW9X
aW5kb3cuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1Zp
ZGVvU2lua0dTdHJlYW1lci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDRiNzA0YWIwNTkzOWU3ODVmMTI3M2Q1NWY3ZTBh
NWYyMTMzNWEwNWEuLjdjNDFjMzRhZThmZGFmMjk4ZWU1MzA1NGIzZDY3ODVmNmU5N2VjNzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAK
QEAgLTUwLDYgKzUwLDkgQEAKIAogI2lmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNpbmNs
dWRlICJTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCIKKyNlbmRpZgogI2RlZmlu
ZSBQbGF0Zm9ybU1lZGlhRW5naW5lQ2xhc3NOYW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cgogI2VuZGlmCiAKQEAgLTIxOCw2ICsyMjEsMTAgQEAgc3RhdGljIFZlY3RvcjxNZWRpYVBsYXll
ckZhY3RvcnkqPiYgaW5zdGFsbGVkTWVkaWFFbmdpbmVzKFJlcXVlcnlFbmdpbmVPcHRpb25zIHIK
ICAgICBpZiAoIWVuZ2luZXNRdWVyaWVkKSB7CiAgICAgICAgIGVuZ2luZXNRdWVyaWVkID0gdHJ1
ZTsKIAorI2lmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgICAg
IFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVnaXN0ZXJNZWRpYUVuZ2luZShh
ZGRNZWRpYUVuZ2luZSk7CisjZW5kaWYKKwogI2lmIFVTRShBVkZPVU5EQVRJT04pCiAgICAgICAg
IGlmIChTZXR0aW5nczo6aXNBVkZvdW5kYXRpb25FbmFibGVkKCkpIHsKICNpZiBQTEFURk9STShN
QUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmlu
ZGV4IDc0ZTUwNjI1NWRjMjg0ZTc3ZmQ3NjZjYTJiYmZkNWY3YWQ0MzQ1Y2YuLjEzNmNmMDFlYzZi
ZmRmYThkYjg5N2NiN2I2OGU5Njg0YzNjODBlNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0yNiw0MCArMjYsMTkgQEAKIAogI2lmIEVO
QUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKIAotI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCi0jaW5jbHVkZSAiR1N0cmVhbWVyR1dvcmxkLmgiCiAjaW5jbHVkZSAiR1N0cmVh
bWVyVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR1N0cmVhbWVyVmVyc2lvbmluZy5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNs
dWRlICJJbWFnZUdTdHJlYW1lci5oIgotI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKLSNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIu
aCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgotI2luY2x1ZGUgIlZpZGVvU2lua0dTdHJlYW1l
ci5oIgogI2luY2x1ZGUgIldlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgPGdz
dC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KICNpbmNsdWRlIDxsaW1pdHM+
Ci0jaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLSNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQot
I2luY2x1ZGUgPGdzdC9hdWRpby9zdHJlYW12b2x1bWUuaD4KLSNlbHNlCi0jaW5jbHVkZSA8Z3N0
L2ludGVyZmFjZXMvc3RyZWFtdm9sdW1lLmg+Ci0jZW5kaWYKLQogLy8gR3N0UGxheUZsYWdzIGZs
YWdzIGZyb20gcGxheWJpbjIuIEl0IGlzIHRoZSBwb2xpY3kgb2YgR1N0cmVhbWVyIHRvCiAvLyBu
b3QgcHVibGljbHkgZXhwb3NlIGVsZW1lbnQtc3BlY2lmaWMgZW51bXMuIFRoYXQncyB3aHkgdGhp
cwogLy8gR3N0UGxheUZsYWdzIGVudW0gaGFzIGJlZW4gY29waWVkIGhlcmUuCkBAIC05NSwxNyAr
NzQsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBpbnQgZ3JlYXRlc3RDb21tb25EaXZpc29yKGludCBhLCBpbnQgYikKLXsKLSAgICB3aGls
ZSAoYikgewotICAgICAgICBpbnQgdGVtcCA9IGE7Ci0gICAgICAgIGEgPSBiOwotICAgICAgICBi
ID0gdGVtcCAlIGI7Ci0gICAgfQotCi0gICAgcmV0dXJuIEFCUyhhKTsKLX0KLQogc3RhdGljIGdi
b29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZU1lc3NhZ2VDYWxsYmFjayhHc3RCdXMqLCBHc3RNZXNz
YWdlKiBtZXNzYWdlLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKIHsKICAg
ICByZXR1cm4gcGxheWVyLT5oYW5kbGVNZXNzYWdlKG1lc3NhZ2UpOwpAQCAtMTE2LDMyICs4NCw2
IEBAIHN0YXRpYyB2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZVNvdXJjZUNoYW5nZWRDYWxsYmFjayhH
T2JqZWN0KiwgR1BhcmFtU3BlYyosIE1lZGlhCiAgICAgcGxheWVyLT5zb3VyY2VDaGFuZ2VkKCk7
CiB9CiAKLXN0YXRpYyB2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZVZvbHVtZUNoYW5nZWRDYWxsYmFj
ayhHT2JqZWN0KiwgR1BhcmFtU3BlYyosIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxh
eWVyKQotewotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gcGxheWJpbiByZWNlaXZlcyB0aGUg
bm90aWZ5Ojp2b2x1bWUgc2lnbmFsLgotICAgIHBsYXllci0+dm9sdW1lQ2hhbmdlZCgpOwotfQot
Ci1zdGF0aWMgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlVm9sdW1lQ2hhbmdlVGltZW91dENh
bGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQotewotICAgIC8vIFRo
aXMgaXMgdGhlIGNhbGxiYWNrIG9mIHRoZSB0aW1lb3V0IHNvdXJjZSBjcmVhdGVkIGluIDo6dm9s
dW1lQ2hhbmdlZC4KLSAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7Ci0g
ICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBtZWRpYVBsYXllclByaXZhdGVNdXRl
Q2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyKiBwbGF5ZXIpCi17Ci0gICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBwbGF5Ymlu
IHJlY2VpdmVzIHRoZSBub3RpZnk6Om11dGUgc2lnbmFsLgotICAgIHBsYXllci0+bXV0ZUNoYW5n
ZWQoKTsKLX0KLQotc3RhdGljIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZU11dGVDaGFuZ2VU
aW1lb3V0Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCi17Ci0g
ICAgLy8gVGhpcyBpcyB0aGUgY2FsbGJhY2sgb2YgdGhlIHRpbWVvdXQgc291cmNlIGNyZWF0ZWQg
aW4gOjptdXRlQ2hhbmdlZC4KLSAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mTXV0ZSgpOwotICAg
IHJldHVybiBGQUxTRTsKLX0KLQogc3RhdGljIHZvaWQgbWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9T
aW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyosIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQogewogICAgIHBsYXllci0+dmlkZW9DaGFuZ2VkKCk7
CkBAIC0xNzEsMTEgKzExMyw2IEBAIHN0YXRpYyBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVW
aWRlb0NoYW5nZVRpbWVvdXRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHCiAgICAgcmV0dXJu
IEZBTFNFOwogfQogCi1zdGF0aWMgdm9pZCBtZWRpYVBsYXllclByaXZhdGVSZXBhaW50Q2FsbGJh
Y2soV2ViS2l0VmlkZW9TaW5rKiwgR3N0QnVmZmVyICpidWZmZXIsIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lciogcGxheWVyUHJpdmF0ZSkKLXsKLSAgICBwbGF5ZXJQcml2YXRlLT50cmlnZ2Vy
UmVwYWludChidWZmZXIpOwotfQotCiBQYXNzT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVy
ZmFjZT4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoTWVkaWFQbGF5ZXIqIHBs
YXllcikKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcihwbGF5ZXIpKTsKQEAgLTIxMSwyMCArMTQ4LDE0IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjppc0F2YWlsYWJsZSgpCiB9CiAKIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKE1lZGlhUGxheWVyKiBwbGF5ZXIpCi0g
ICAgOiBtX3BsYXllcihwbGF5ZXIpCi0gICAgLCBtX3BsYXlCaW4oMCkKLSAgICAsIG1fd2Via2l0
VmlkZW9TaW5rKDApCisgICAgOiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKHBsYXll
cikKICAgICAsIG1fZnBzU2luaygwKQogICAgICwgbV9zb3VyY2UoMCkKICAgICAsIG1fc2Vla1Rp
bWUoMCkKICAgICAsIG1fY2hhbmdpbmdSYXRlKGZhbHNlKQogICAgICwgbV9lbmRUaW1lKG51bWVy
aWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkKICAgICAsIG1faXNFbmRSZWFjaGVkKGZhbHNl
KQotICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQotICAgICwgbV9yZWFk
eVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKICAgICAsIG1faXNTdHJlYW1pbmcoZmFs
c2UpCi0gICAgLCBtX3NpemUoSW50U2l6ZSgpKQotICAgICwgbV9idWZmZXIoMCkKICAgICAsIG1f
bWVkaWFMb2NhdGlvbnMoMCkKICAgICAsIG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleCgwKQog
ICAgICwgbV9yZXNldFBpcGVsaW5lKGZhbHNlKQpAQCAtMjQyLDggKzE3Myw2IEBAIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKE1lZGlhUGxh
eWVyKiBwbGF5ZXIpCiAgICAgLCBtX2RlbGF5aW5nTG9hZChmYWxzZSkKICAgICAsIG1fbWVkaWFE
dXJhdGlvbktub3duKHRydWUpCiAgICAgLCBtX21heFRpbWVMb2FkZWRBdExhc3REaWRMb2FkaW5n
UHJvZ3Jlc3MoMCkKLSAgICAsIG1fdm9sdW1lVGltZXJIYW5kbGVyKDApCi0gICAgLCBtX211dGVU
aW1lckhhbmRsZXIoMCkKICAgICAsIG1faGFzVmlkZW8oZmFsc2UpCiAgICAgLCBtX2hhc0F1ZGlv
KGZhbHNlKQogICAgICwgbV9hdWRpb1RpbWVySGFuZGxlcigwKQpAQCAtMjU5LDQxICsxODgsMjgg
QEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKCkKICAgICBpZiAobV9maWxsVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9maWxsVGlt
ZXIuc3RvcCgpOwogCi0gICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBnc3RfYnVmZmVyX3VucmVm
KG1fYnVmZmVyKTsKLSAgICBtX2J1ZmZlciA9IDA7Ci0KLSAgICBpZiAobV9tZWRpYUxvY2F0aW9u
cykgewotICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUobV9tZWRpYUxvY2F0aW9ucyk7Ci0gICAg
ICAgIG1fbWVkaWFMb2NhdGlvbnMgPSAwOwotICAgIH0KLQotI2lmbmRlZiBHU1RfQVBJX1ZFUlNJ
T05fMQotICAgIGlmIChtX3ZpZGVvU2lua0JpbikgewotICAgICAgICBnc3Rfb2JqZWN0X3VucmVm
KG1fdmlkZW9TaW5rQmluKTsKLSAgICAgICAgbV92aWRlb1NpbmtCaW4gPSAwOwotICAgIH0KLSNl
bmRpZgotCi0gICAgaWYgKG1fcGxheUJpbikgewotICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3Rh
dGUobV9wbGF5QmluLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYo
R1NUX09CSkVDVChtX3BsYXlCaW4pKTsKLSAgICAgICAgbV9wbGF5QmluID0gMDsKLSAgICB9Ci0K
LSAgICBtX3BsYXllciA9IDA7Ci0KLSAgICBpZiAobV9tdXRlVGltZXJIYW5kbGVyKQotICAgICAg
ICBnX3NvdXJjZV9yZW1vdmUobV9tdXRlVGltZXJIYW5kbGVyKTsKLQotICAgIGlmIChtX3ZvbHVt
ZVRpbWVySGFuZGxlcikKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fdm9sdW1lVGltZXJIYW5k
bGVyKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gdmlkZW9TaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9l
bGVtZW50X2dldF9zdGF0aWNfcGFkKG1fd2Via2l0VmlkZW9TaW5rLmdldCgpLCAic2luayIpKTsK
KyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmModmlkZW9TaW5rUGFkLmdl
dCgpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihtZWRpYVBsYXllclByaXZhdGVWaWRlb1Np
bmtDYXBzQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgR3N0QnVzKiBidXMgPSBnc3RfcGlw
ZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9wbGF5QmluLmdldCgpKSk7CisgICAgZ19zaWdu
YWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKGJ1cywgcmVpbnRlcnByZXRfY2FzdDxncG9p
bnRlcj4obWVkaWFQbGF5ZXJQcml2YXRlTWVzc2FnZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19v
YmplY3RfdW5yZWYoYnVzKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1
bmMobV9wbGF5QmluLmdldCgpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihtZWRpYVBsYXll
clByaXZhdGVTb3VyY2VDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9wbGF5QmluLmdldCgpLCByZWludGVycHJldF9jYXN0
PGdwb2ludGVyPihtZWRpYVBsYXllclByaXZhdGVWaWRlb0NoYW5nZWRDYWxsYmFjayksIHRoaXMp
OworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3BsYXlCaW4uZ2V0
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KG1lZGlhUGxheWVyUHJpdmF0ZUF1ZGlvQ2hh
bmdlZENhbGxiYWNrKSwgdGhpcyk7CiAKICAgICBpZiAobV92aWRlb1RpbWVySGFuZGxlcikKICAg
ICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fdmlkZW9UaW1lckhhbmRsZXIpOwogCiAgICAgaWYgKG1f
YXVkaW9UaW1lckhhbmRsZXIpCiAgICAgICAgIGdfc291cmNlX3JlbW92ZShtX2F1ZGlvVGltZXJI
YW5kbGVyKTsKKworICAgIGlmIChtX21lZGlhTG9jYXRpb25zKSB7CisgICAgICAgIGdzdF9zdHJ1
Y3R1cmVfZnJlZShtX21lZGlhTG9jYXRpb25zKTsKKyAgICAgICAgbV9tZWRpYUxvY2F0aW9ucyA9
IDA7CisgICAgfQorCisgICAgaWYgKG1fcGxheUJpbikKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0
X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOwogfQogCiB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKQEAgLTMxNiw3
ICsyMzIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZChjb25zdCBT
dHJpbmcmIHVybCkKICAgICBBU1NFUlQobV9wbGF5QmluKTsKIAogICAgIG1fdXJsID0gS1VSTChL
VVJMKCksIGNsZWFuVXJsKTsKLSAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAidXJpIiwgY2xl
YW5VcmwudXRmOCgpLmRhdGEoKSwgTlVMTCk7CisgICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbi5n
ZXQoKSwgInVyaSIsIGNsZWFuVXJsLnV0ZjgoKS5kYXRhKCksIE5VTEwpOwogCiAgICAgTE9HX01F
RElBX01FU1NBR0UoIkxvYWQgJXMiLCBjbGVhblVybC51dGY4KCkuZGF0YSgpKTsKIApAQCAtMzM1
LDcgKzI1MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkKGNvbnN0
IFN0cmluZyYgdXJsKQogCiAgICAgLy8gR1N0cmVhbWVyIG5lZWRzIHRvIGhhdmUgdGhlIHBpcGVs
aW5lIHNldCB0byBhIHBhdXNlZCBzdGF0ZSB0bwogICAgIC8vIHN0YXJ0IHByb3ZpZGluZyBhbnl0
aGluZyB1c2VmdWwuCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJpbiwgR1NUX1NU
QVRFX1BBVVNFRCk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwg
R1NUX1NUQVRFX1BBVVNFRCk7CiAKICAgICBpZiAoIW1fZGVsYXlpbmdMb2FkKQogICAgICAgICBj
b21taXRMb2FkKCk7CkBAIC0zNjQsNyArMjgwLDcgQEAgZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpwbGF5YmFja1Bvc2l0aW9uKCkgY29uc3QKICAgICBmbG9hdCByZXQgPSAwLjBm
OwogCiAgICAgR3N0UXVlcnkqIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbihHU1RfRk9S
TUFUX1RJTUUpOwotICAgIGlmICghZ3N0X2VsZW1lbnRfcXVlcnkobV9wbGF5QmluLCBxdWVyeSkp
IHsKKyAgICBpZiAoIWdzdF9lbGVtZW50X3F1ZXJ5KG1fcGxheUJpbi5nZXQoKSwgcXVlcnkpKSB7
CiAgICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJQb3NpdGlvbiBxdWVyeSBmYWlsZWQuLi4iKTsK
ICAgICAgICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsKICAgICAgICAgcmV0dXJuIHJldDsKQEAg
LTM5MiwxMiArMzA4LDEyIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjaGFu
Z2VQaXBlbGluZVN0YXRlKEdzdFN0YXRlIG5ld1N0YXRlKQogICAgIEdzdFN0YXRlIGN1cnJlbnRT
dGF0ZTsKICAgICBHc3RTdGF0ZSBwZW5kaW5nOwogCi0gICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRl
KG1fcGxheUJpbiwgJmN1cnJlbnRTdGF0ZSwgJnBlbmRpbmcsIDApOworICAgIGdzdF9lbGVtZW50
X2dldF9zdGF0ZShtX3BsYXlCaW4uZ2V0KCksICZjdXJyZW50U3RhdGUsICZwZW5kaW5nLCAwKTsK
ICAgICBMT0dfTUVESUFfTUVTU0FHRSgiQ3VycmVudCBzdGF0ZTogJXMsIHBlbmRpbmc6ICVzIiwg
Z3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3Rh
dGVfZ2V0X25hbWUocGVuZGluZykpOwogICAgIGlmIChjdXJyZW50U3RhdGUgPT0gbmV3U3RhdGUg
fHwgcGVuZGluZyA9PSBuZXdTdGF0ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBHc3RT
dGF0ZUNoYW5nZVJldHVybiBzZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSht
X3BsYXlCaW4sIG5ld1N0YXRlKTsKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzZXRTdGF0ZVJl
c3VsdCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4uZ2V0KCksIG5ld1N0YXRlKTsK
ICAgICBHc3RTdGF0ZSBwYXVzZWRPclBsYXlpbmcgPSBuZXdTdGF0ZSA9PSBHU1RfU1RBVEVfUExB
WUlORyA/IEdTVF9TVEFURV9QQVVTRUQgOiBHU1RfU1RBVEVfUExBWUlORzsKICAgICBpZiAoY3Vy
cmVudFN0YXRlICE9IHBhdXNlZE9yUGxheWluZyAmJiBzZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RB
VEVfQ0hBTkdFX0ZBSUxVUkUpIHsKICAgICAgICAgbG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6
RW1wdHkpOwpAQCAtNDUzLDkgKzM2OSw5IEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6ZHVyYXRpb24oKSBjb25zdAogICAgIGdpbnQ2NCB0aW1lTGVuZ3RoID0gMDsKIAogI2lm
ZGVmIEdTVF9BUElfVkVSU0lPTl8xCi0gICAgYm9vbCBmYWlsdXJlID0gIWdzdF9lbGVtZW50X3F1
ZXJ5X2R1cmF0aW9uKG1fcGxheUJpbiwgdGltZUZvcm1hdCwgJnRpbWVMZW5ndGgpIHx8IHN0YXRp
Y19jYXN0PGd1aW50NjQ+KHRpbWVMZW5ndGgpID09IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAg
Ym9vbCBmYWlsdXJlID0gIWdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1fcGxheUJpbi5nZXQo
KSwgdGltZUZvcm1hdCwgJnRpbWVMZW5ndGgpIHx8IHN0YXRpY19jYXN0PGd1aW50NjQ+KHRpbWVM
ZW5ndGgpID09IEdTVF9DTE9DS19USU1FX05PTkU7CiAjZWxzZQotICAgIGJvb2wgZmFpbHVyZSA9
ICFnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbihtX3BsYXlCaW4sICZ0aW1lRm9ybWF0LCAmdGlt
ZUxlbmd0aCkgfHwgdGltZUZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUgfHwgc3RhdGljX2Nhc3Q8
Z3VpbnQ2ND4odGltZUxlbmd0aCkgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICBib29sIGZh
aWx1cmUgPSAhZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24obV9wbGF5QmluLmdldCgpLCAmdGlt
ZUZvcm1hdCwgJnRpbWVMZW5ndGgpIHx8IHRpbWVGb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1FIHx8
IHN0YXRpY19jYXN0PGd1aW50NjQ+KHRpbWVMZW5ndGgpID09IEdTVF9DTE9DS19USU1FX05PTkU7
CiAjZW5kaWYKICAgICBpZiAoZmFpbHVyZSkgewogICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgi
VGltZSBkdXJhdGlvbiBxdWVyeSBmYWlsZWQgZm9yICVzIiwgbV91cmwuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CkBAIC01MTgsNyArNDM0LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnNlZWsoZmxvYXQgdGltZSkKICAgICBHc3RDbG9ja1RpbWUgY2xvY2tUaW1lID0gR1NU
X1RJTUVWQUxfVE9fVElNRSh0aW1lVmFsdWUpOwogICAgIExPR19NRURJQV9NRVNTQUdFKCJTZWVr
OiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MoY2xvY2tUaW1lKSk7CiAKLSAgICBp
ZiAoIWdzdF9lbGVtZW50X3NlZWsobV9wbGF5QmluLCBtX3BsYXllci0+cmF0ZSgpLAorICAgIGlm
ICghZ3N0X2VsZW1lbnRfc2VlayhtX3BsYXlCaW4uZ2V0KCksIG1fcGxheWVyLT5yYXRlKCksCiAg
ICAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsCiAgICAgICAgICAgICAoR3N0U2Vla0ZsYWdzKShH
U1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSksCiAgICAgICAgICAg
ICBHU1RfU0VFS19UWVBFX1NFVCwgY2xvY2tUaW1lLApAQCAtNTM4LDcgKzQ1NCw3IEBAIGJvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVzZWQoKSBjb25zdAogICAgIH0KIAogICAg
IEdzdFN0YXRlIHN0YXRlOwotICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BsYXlCaW4sICZz
dGF0ZSwgMCwgMCk7CisgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwg
JnN0YXRlLCAwLCAwKTsKICAgICByZXR1cm4gc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRDsKIH0K
IApAQCAtNTQ3LDY2ICs0NjMsNiBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
c2Vla2luZygpIGNvbnN0CiAgICAgcmV0dXJuIG1fc2Vla2luZzsKIH0KIAotLy8gUmV0dXJucyB0
aGUgc2l6ZSBvZiB0aGUgdmlkZW8KLUludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpuYXR1cmFsU2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFoYXNWaWRlbygpKQotICAgICAgICBy
ZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgaWYgKCFtX3ZpZGVvU2l6ZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBtX3ZpZGVvU2l6ZTsKLQotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IHdl
YmtpdEdzdEdldFBhZENhcHMobV92aWRlb1NpbmtQYWQuZ2V0KCkpOwotICAgIGlmICghY2FwcykK
LSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotCi0gICAgLy8gVE9ETzogaGFuZGxlIHBvc3Np
YmxlIGNsZWFuIGFwZXJ0dXJlIGRhdGEuIFNlZQotICAgIC8vIGh0dHBzOi8vYnVnemlsbGEuZ25v
bWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTY1NzEKLSAgICAvLyBUT0RPOiBoYW5kbGUgcG9zc2li
bGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBTZWUKLSAgICAvLyBodHRwczovL2J1Z3ppbGxhLmdu
b21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2MzI2Ci0KLSAgICAvLyBHZXQgdGhlIHZpZGVvIFBB
UiBhbmQgb3JpZ2luYWwgc2l6ZSwgaWYgdGhpcyBmYWlscyB0aGUKLSAgICAvLyB2aWRlby1zaW5r
IGhhcyBsaWtlbHkgbm90IHlldCBuZWdvdGlhdGVkIGl0cyBjYXBzLgotICAgIGludCBwaXhlbEFz
cGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IsIHN0cmlkZTsK
LSAgICBJbnRTaXplIG9yaWdpbmFsU2l6ZTsKLSAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7Ci0g
ICAgaWYgKCFnZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2FwcyhjYXBzLmdldCgpLCBvcmlnaW5h
bFNpemUsIGZvcm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRp
b0Rlbm9taW5hdG9yLCBzdHJpZGUpKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAg
TE9HX01FRElBX01FU1NBR0UoIk9yaWdpbmFsIHZpZGVvIHNpemU6ICVkeCVkIiwgb3JpZ2luYWxT
aXplLndpZHRoKCksIG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgTE9HX01FRElBX01FU1NB
R0UoIlBpeGVsIGFzcGVjdCByYXRpbzogJWQvJWQiLCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9y
LCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IpOwotCi0gICAgLy8gQ2FsY3VsYXRlIERBUiBi
YXNlZCBvbiBQQVIgYW5kIHZpZGVvIHNpemUuCi0gICAgaW50IGRpc3BsYXlXaWR0aCA9IG9yaWdp
bmFsU2l6ZS53aWR0aCgpICogcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvcjsKLSAgICBpbnQgZGlz
cGxheUhlaWdodCA9IG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAqIHBpeGVsQXNwZWN0UmF0aW9EZW5v
bWluYXRvcjsKLQotICAgIC8vIERpdmlkZSBkaXNwbGF5IHdpZHRoIGFuZCBoZWlnaHQgYnkgdGhl
aXIgR0NEIHRvIGF2b2lkIHBvc3NpYmxlIG92ZXJmbG93cy4KLSAgICBpbnQgZGlzcGxheUFzcGVj
dFJhdGlvR0NEID0gZ3JlYXRlc3RDb21tb25EaXZpc29yKGRpc3BsYXlXaWR0aCwgZGlzcGxheUhl
aWdodCk7Ci0gICAgZGlzcGxheVdpZHRoIC89IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKLSAgICBk
aXNwbGF5SGVpZ2h0IC89IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKLQotICAgIC8vIEFwcGx5IERB
UiB0byBvcmlnaW5hbCB2aWRlbyBzaXplLiBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIGlu
IHh2aW1hZ2VzaW5rJ3Mgc2V0Y2FwcyBmdW5jdGlvbi4KLSAgICBndWludDY0IHdpZHRoID0gMCwg
aGVpZ2h0ID0gMDsKLSAgICBpZiAoIShvcmlnaW5hbFNpemUuaGVpZ2h0KCkgJSBkaXNwbGF5SGVp
Z2h0KSkgewotICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgiS2VlcGluZyB2aWRlbyBvcmlnaW5h
bCBoZWlnaHQiKTsKLSAgICAgICAgd2lkdGggPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9y
aWdpbmFsU2l6ZS5oZWlnaHQoKSwgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKLSAgICAg
ICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLmhlaWdodCgpKTsK
LSAgICB9IGVsc2UgaWYgKCEob3JpZ2luYWxTaXplLndpZHRoKCkgJSBkaXNwbGF5V2lkdGgpKSB7
Ci0gICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJLZWVwaW5nIHZpZGVvIG9yaWdpbmFsIHdpZHRo
Iik7Ci0gICAgICAgIGhlaWdodCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxT
aXplLndpZHRoKCksIGRpc3BsYXlIZWlnaHQsIGRpc3BsYXlXaWR0aCk7Ci0gICAgICAgIHdpZHRo
ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLndpZHRoKCkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJBcHByb3hpbWF0aW5nIHdoaWxlIGtlZXBp
bmcgb3JpZ2luYWwgdmlkZW8gaGVpZ2h0Iik7Ci0gICAgICAgIHdpZHRoID0gZ3N0X3V0aWxfdWlu
dDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0KCksIGRpc3BsYXlXaWR0aCwgZGlzcGxh
eUhlaWdodCk7Ci0gICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFs
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgTE9HX01FRElBX01FU1NBR0UoIk5hdHVyYWwg
c2l6ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCAieCUiIEdfR1VJTlQ2NF9GT1JNQVQsIHdpZHRoLCBo
ZWlnaHQpOwotICAgIG1fdmlkZW9TaXplID0gSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHdpZHRo
KSwgc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQpKTsKLSAgICByZXR1cm4gbV92aWRlb1NpemU7Ci19
Ci0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2aWRlb0NoYW5nZWQoKQogewog
ICAgIGlmIChtX3ZpZGVvVGltZXJIYW5kbGVyKQpAQCAtNjIwLDcgKzQ3Niw3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvKCkKIAogICAgIGdp
bnQgdmlkZW9UcmFja3MgPSAwOwogICAgIGlmIChtX3BsYXlCaW4pCi0gICAgICAgIGdfb2JqZWN0
X2dldChtX3BsYXlCaW4sICJuLXZpZGVvIiwgJnZpZGVvVHJhY2tzLCBOVUxMKTsKKyAgICAgICAg
Z19vYmplY3RfZ2V0KG1fcGxheUJpbi5nZXQoKSwgIm4tdmlkZW8iLCAmdmlkZW9UcmFja3MsIE5V
TEwpOwogCiAgICAgbV9oYXNWaWRlbyA9IHZpZGVvVHJhY2tzID4gMDsKIApAQCAtNjQyLDQyICs0
OTgsMTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9m
QXVkaW8oKQogCiAgICAgZ2ludCBhdWRpb1RyYWNrcyA9IDA7CiAgICAgaWYgKG1fcGxheUJpbikK
LSAgICAgICAgZ19vYmplY3RfZ2V0KG1fcGxheUJpbiwgIm4tYXVkaW8iLCAmYXVkaW9UcmFja3Ms
IE5VTEwpOworICAgICAgICBnX29iamVjdF9nZXQobV9wbGF5QmluLmdldCgpLCAibi1hdWRpbyIs
ICZhdWRpb1RyYWNrcywgTlVMTCk7CiAgICAgbV9oYXNBdWRpbyA9IGF1ZGlvVHJhY2tzID4gMDsK
ICAgICBtX3BsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJFbmdpbmVVcGRh
dGVkKG1fcGxheWVyKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNl
dFZvbHVtZShmbG9hdCB2b2x1bWUpCi17Ci0gICAgaWYgKCFtX3BsYXlCaW4pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGdzdF9zdHJlYW1fdm9sdW1lX3NldF92b2x1bWUoR1NUX1NUUkVBTV9WT0xV
TUUobV9wbGF5QmluKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0NVQklDLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPih2b2x1bWUpKTsKLX0K
LQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVm9sdW1l
Q2hhbmdlKCkKLXsKLSAgICBtX3ZvbHVtZVRpbWVySGFuZGxlciA9IDA7Ci0KLSAgICBpZiAoIW1f
cGxheWVyIHx8ICFtX3BsYXlCaW4pCi0gICAgICAgIHJldHVybjsKLSAgICBkb3VibGUgdm9sdW1l
OwotICAgIHZvbHVtZSA9IGdzdF9zdHJlYW1fdm9sdW1lX2dldF92b2x1bWUoR1NUX1NUUkVBTV9W
T0xVTUUobV9wbGF5QmluKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0NVQklDKTsKLSAgICAv
LyBnZXRfdm9sdW1lKCkgY2FuIHJldHVybiB2YWx1ZXMgc3VwZXJpb3IgdG8gMS4wIGlmIHRoZSB1
c2VyCi0gICAgLy8gYXBwbGllcyBzb2Z0d2FyZSB1c2VyIGdhaW4gdmlhIHRoaXJkIHBhcnR5IGFw
cGxpY2F0aW9uIChHTk9NRQotICAgIC8vIHZvbHVtZSBjb250cm9sIGZvciBpbnN0YW5jZSkuCi0g
ICAgdm9sdW1lID0gQ0xBTVAodm9sdW1lLCAwLjAsIDEuMCk7Ci0gICAgbV9wbGF5ZXItPnZvbHVt
ZUNoYW5nZWQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZvbHVtZSkpOwotfQotCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dm9sdW1lQ2hhbmdlZCgpCi17Ci0gICAgaWYgKG1fdm9sdW1l
VGltZXJIYW5kbGVyKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV92b2x1bWVUaW1lckhhbmRs
ZXIpOwotICAgIG1fdm9sdW1lVGltZXJIYW5kbGVyID0gZ190aW1lb3V0X2FkZCgwLCByZWludGVy
cHJldF9jYXN0PEdTb3VyY2VGdW5jPihtZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2VUaW1l
b3V0Q2FsbGJhY2spLCB0aGlzKTsKLX0KLQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnNldFJhdGUoZmxvYXQgcmF0ZSkKIHsKICAgICAvLyBBdm9pZCB1c2VsZXNzIHBsYXliYWNr
IHJhdGUgdXBkYXRlLgpAQCAtNjg3LDcgKzUxMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpzZXRSYXRlKGZsb2F0IHJhdGUpCiAgICAgR3N0U3RhdGUgc3RhdGU7CiAgICAg
R3N0U3RhdGUgcGVuZGluZzsKIAotICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BsYXlCaW4s
ICZzdGF0ZSwgJnBlbmRpbmcsIDApOworICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BsYXlC
aW4uZ2V0KCksICZzdGF0ZSwgJnBlbmRpbmcsIDApOwogICAgIGlmICgoc3RhdGUgIT0gR1NUX1NU
QVRFX1BMQVlJTkcgJiYgc3RhdGUgIT0gR1NUX1NUQVRFX1BBVVNFRCkKICAgICAgICAgfHwgKHBl
bmRpbmcgPT0gR1NUX1NUQVRFX1BBVVNFRCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY5OSw3ICs1
MjQsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmF0ZShmbG9hdCBy
YXRlKQogICAgIG1fY2hhbmdpbmdSYXRlID0gdHJ1ZTsKIAogICAgIGlmICghcmF0ZSkgewotICAg
ICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5QmluLCBHU1RfU1RBVEVfUEFVU0VEKTsK
KyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwgR1NUX1NUQVRF
X1BBVVNFRCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTcyOSwyMiArNTU0LDEyIEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRSYXRlKGZsb2F0IHJhdGUpCiAK
ICAgICBMT0dfTUVESUFfTUVTU0FHRSgiTmVlZCB0byBtdXRlIGF1ZGlvOiAlZCIsIChpbnQpIG11
dGUpOwogCi0gICAgaWYgKCFnc3RfZWxlbWVudF9zZWVrKG1fcGxheUJpbiwgcmF0ZSwgR1NUX0ZP
Uk1BVF9USU1FLCBmbGFncywKKyAgICBpZiAoIWdzdF9lbGVtZW50X3NlZWsobV9wbGF5QmluLmdl
dCgpLCByYXRlLCBHU1RfRk9STUFUX1RJTUUsIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBHU1RfU0VFS19UWVBFX1NFVCwgc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdTVF9TRUVLX1RZUEVfU0VULCBlbmQpKQogICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgiU2V0
IHJhdGUgdG8gJWYgZmFpbGVkIiwgcmF0ZSk7CiAgICAgZWxzZQotICAgICAgICBnX29iamVjdF9z
ZXQobV9wbGF5QmluLCAibXV0ZSIsIG11dGUsIE5VTEwpOwotfQotCi1NZWRpYVBsYXllcjo6TmV0
d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV0d29ya1N0YXRlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9uZXR3b3JrU3RhdGU7Ci19Ci0KLU1lZGlhUGxheWVyOjpSZWFk
eVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVhZHlTdGF0ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGxheUJp
bi5nZXQoKSwgIm11dGUiLCBtdXRlLCBOVUxMKTsKIH0KIAogUGFzc1JlZlB0cjxUaW1lUmFuZ2Vz
PiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkKCkgY29uc3QKQEAgLTc2MCw3
ICs1NzUsNyBAQCBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6YnVmZmVyZWQoKSBjb25zdAogCiAgICAgR3N0UXVlcnkqIHF1ZXJ5ID0gZ3N0X3F1ZXJ5
X25ld19idWZmZXJpbmcoR1NUX0ZPUk1BVF9QRVJDRU5UKTsKIAotICAgIGlmICghZ3N0X2VsZW1l
bnRfcXVlcnkobV9wbGF5QmluLCBxdWVyeSkpIHsKKyAgICBpZiAoIWdzdF9lbGVtZW50X3F1ZXJ5
KG1fcGxheUJpbi5nZXQoKSwgcXVlcnkpKSB7CiAgICAgICAgIGdzdF9xdWVyeV91bnJlZihxdWVy
eSk7CiAgICAgICAgIHJldHVybiB0aW1lUmFuZ2VzLnJlbGVhc2UoKTsKICAgICB9CkBAIC04MTUs
NyArNjMwLDcgQEAgZ2Jvb2xlYW4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVN
ZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vy
cm9yKG1lc3NhZ2UsICZlcnIub3V0UHRyKCksICZkZWJ1Zy5vdXRQdHIoKSk7CiAgICAgICAgIExP
R19NRURJQV9NRVNTQUdFKCJFcnJvciAlZDogJXMgKHVybD0lcykiLCBlcnItPmNvZGUsIGVyci0+
bWVzc2FnZSwgbV91cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICAgICAgR1NUX0RF
QlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9wbGF5QmluKSwgR1NUX0RFQlVH
X0dSQVBIX1NIT1dfQUxMLCAid2Via2l0LXZpZGVvLmVycm9yIik7CisgICAgICAgIEdTVF9ERUJV
R19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGxheUJpbi5nZXQoKSksIEdTVF9E
RUJVR19HUkFQSF9TSE9XX0FMTCwgIndlYmtpdC12aWRlby5lcnJvciIpOwogCiAgICAgICAgIGVy
cm9yID0gTWVkaWFQbGF5ZXI6OkVtcHR5OwogICAgICAgICBpZiAoZXJyLT5jb2RlID09IEdTVF9T
VFJFQU1fRVJST1JfQ09ERUNfTk9UX0ZPVU5ECkBAIC04NTYsNyArNjcxLDcgQEAgZ2Jvb2xlYW4g
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1l
c3NhZ2UpCiAKICAgICAgICAgLy8gSWdub3JlIHN0YXRlIGNoYW5nZXMgZnJvbSBpbnRlcm5hbCBl
bGVtZW50cy4gVGhleSBhcmUKICAgICAgICAgLy8gZm9yd2FyZGVkIHRvIHBsYXliaW4yIGFueXdh
eS4KLSAgICAgICAgaWYgKEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKSA9PSByZWludGVycHJldF9j
YXN0PEdzdE9iamVjdCo+KG1fcGxheUJpbikpIHsKKyAgICAgICAgaWYgKEdTVF9NRVNTQUdFX1NS
QyhtZXNzYWdlKSA9PSByZWludGVycHJldF9jYXN0PEdzdE9iamVjdCo+KG1fcGxheUJpbi5nZXQo
KSkpIHsKICAgICAgICAgICAgIHVwZGF0ZVN0YXRlcygpOwogCiAgICAgICAgICAgICAvLyBDb25z
dHJ1Y3QgYSBmaWxlbmFtZSBmb3IgdGhlIGdyYXBodml6IGRvdCBmaWxlIG91dHB1dC4KQEAgLTg2
Nyw3ICs2ODIsNyBAQCBnYm9vbGVhbiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRs
ZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShvbGRTdGF0
ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0
X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3RhdGUpKS51dGY4KCk7CiAKLSAgICAgICAgICAg
IEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGxheUJpbiksIEdT
VF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZG90RmlsZU5hbWUuZGF0YSgpKTsKKyAgICAgICAgICAg
IEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGxheUJpbi5nZXQo
KSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZG90RmlsZU5hbWUuZGF0YSgpKTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdTVF9NRVNTQUdFX0JVRkZFUklORzoKQEAg
LTkyNCw3ICs3MzksNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZmlsbFRp
bWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbQogewogICAgIEdzdFF1ZXJ5
KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nKEdTVF9GT1JNQVRfUEVSQ0VOVCk7CiAK
LSAgICBpZiAoIWdzdF9lbGVtZW50X3F1ZXJ5KG1fcGxheUJpbiwgcXVlcnkpKSB7CisgICAgaWYg
KCFnc3RfZWxlbWVudF9xdWVyeShtX3BsYXlCaW4uZ2V0KCksIHF1ZXJ5KSkgewogICAgICAgICBn
c3RfcXVlcnlfdW5yZWYocXVlcnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTEwOSw3
ICs5MjQsNyBAQCB1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZpZGVvRGVj
b2RlZEJ5dGVDb3VudCgpIGNvbnN0CiAgICAgR3N0UXVlcnkqIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25l
d19wb3NpdGlvbihHU1RfRk9STUFUX0JZVEVTKTsKICAgICBnaW50NjQgcG9zaXRpb24gPSAwOwog
Ci0gICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5KG1fd2Via2l0VmlkZW9TaW5rLCBxdWVyeSkpCisg
ICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5KG1fd2Via2l0VmlkZW9TaW5rLmdldCgpLCBxdWVyeSkp
CiAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsK
IAogICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CkBAIC0xMTIzLDcgKzkzOCw3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVBdWRpb1NpbmsoKQogCiAgICAgR3N0
RWxlbWVudCogc2lua1B0ciA9IDA7CiAKLSAgICBnX29iamVjdF9nZXQobV9wbGF5QmluLCAiYXVk
aW8tc2luayIsICZzaW5rUHRyLCBOVUxMKTsKKyAgICBnX29iamVjdF9nZXQobV9wbGF5QmluLmdl
dCgpLCAiYXVkaW8tc2luayIsICZzaW5rUHRyLCBOVUxMKTsKICAgICBtX3dlYmtpdEF1ZGlvU2lu
ayA9IGFkb3B0R1JlZihzaW5rUHRyKTsKIAogfQpAQCAtMTEzMyw3ICs5NDgsNyBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlQ2hhbmdlZCgpCiB7CiAgICAgR3N0RWxl
bWVudCogc3JjUHRyID0gMDsKIAotICAgIGdfb2JqZWN0X2dldChtX3BsYXlCaW4sICJzb3VyY2Ui
LCAmc3JjUHRyLCBOVUxMKTsKKyAgICBnX29iamVjdF9nZXQobV9wbGF5QmluLmdldCgpLCAic291
cmNlIiwgJnNyY1B0ciwgTlVMTCk7CiAgICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoc3JjUHRyKTsK
IAogICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkpCkBAIC0xMTQ2LDcg
Kzk2MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYW5jZWxMb2FkKCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fcGxheUJpbikKLSAgICAgICAgZ3N0X2VsZW1l
bnRfc2V0X3N0YXRlKG1fcGxheUJpbiwgR1NUX1NUQVRFX05VTEwpOworICAgICAgICBnc3RfZWxl
bWVudF9zZXRfc3RhdGUobV9wbGF5QmluLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CiB9CiAKIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQpAQCAtMTE2Miw3
ICs5NzcsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVz
KCkKICAgICBHc3RTdGF0ZSBzdGF0ZTsKICAgICBHc3RTdGF0ZSBwZW5kaW5nOwogCi0gICAgR3N0
U3RhdGVDaGFuZ2VSZXR1cm4gcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGxheUJpbiwK
KyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9w
bGF5QmluLmdldCgpLAogICAgICAgICAmc3RhdGUsICZwZW5kaW5nLCAyNTAgKiBHU1RfTlNFQ09O
RCk7CiAKICAgICBib29sIHNob3VsZFVwZGF0ZUFmdGVyU2VlayA9IGZhbHNlOwpAQCAtMTIxOCw3
ICsxMDMzLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRl
cygpCiAKICAgICAgICAgICAgICAgICBpZiAoIW1fcGF1c2VkKSB7CiAgICAgICAgICAgICAgICAg
ICAgIExPR19NRURJQV9NRVNTQUdFKCJbQnVmZmVyaW5nXSBSZXN0YXJ0aW5nIHBsYXliYWNrLiIp
OwotICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5QmluLCBH
U1RfU1RBVEVfUExBWUlORyk7CisgICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9z
dGF0ZShtX3BsYXlCaW4uZ2V0KCksIEdTVF9TVEFURV9QTEFZSU5HKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtX2J1ZmZlcmluZyAmJiAoY3VycmVudFRpbWUo
KSA8IGR1cmF0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOwpAQCAt
MTIzMyw3ICsxMDQ4LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0
ZVN0YXRlcygpCiAKICAgICAgICAgICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgiW0J1ZmZlcmlu
Z10gUGF1c2luZyBzdHJlYW0gZm9yIGJ1ZmZlcmluZy4iKTsKIAotICAgICAgICAgICAgICAgIGdz
dF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4sIEdTVF9TVEFURV9QQVVTRUQpOworICAgICAg
ICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4uZ2V0KCksIEdTVF9TVEFU
RV9QQVVTRUQpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1f
cGF1c2VkID0gdHJ1ZTsKQEAgLTEyNjQsMTQgKzEwNzksMTQgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcygpCiAgICAgICAgIC8vIHBpcGVsaW5lLgogICAg
ICAgICBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZICYmIGlzTGl2ZVN0cmVhbSgpICYmIG1f
cHJlbG9hZCA9PSBNZWRpYVBsYXllcjo6QXV0bykgewogICAgICAgICAgICAgc2V0UHJlbG9hZChN
ZWRpYVBsYXllcjo6Tm9uZSk7Ci0gICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9w
bGF5QmluLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3Rh
dGUobV9wbGF5QmluLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50
X3NldF9zdGF0ZShtX3BsYXlCaW4uZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgICAg
IGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4uZ2V0KCksIEdTVF9TVEFURV9QQVVTRUQp
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gQSBsaXZlIHN0cmVhbSB3YXMgcGF1c2VkLCByZXNl
dCB0aGUgcGlwZWxpbmUuCiAgICAgICAgIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEICYm
IHBlbmRpbmcgPT0gR1NUX1NUQVRFX1BMQVlJTkcgJiYgaXNMaXZlU3RyZWFtKCkpIHsKLSAgICAg
ICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4sIEdTVF9TVEFURV9OVUxMKTsK
LSAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4sIEdTVF9TVEFURV9Q
TEFZSU5HKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4uZ2V0
KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSht
X3BsYXlCaW4uZ2V0KCksIEdTVF9TVEFURV9QTEFZSU5HKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmICghaXNMaXZlU3RyZWFtKCkgJiYgIW1fYnVmZmVyaW5nKQpAQCAtMTMwNyw5ICsxMTIyLDkg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcygpCiAgICAg
ICAgICAgICBzaG91bGRVcGRhdGVBZnRlclNlZWsgPSB0cnVlOwogICAgICAgICAgICAgbV9zZWVr
aW5nID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoIW1fcGF1c2VkKQotICAgICAgICAgICAgICAg
IGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAg
ICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5QmluLmdldCgpLCBHU1Rf
U1RBVEVfUExBWUlORyk7CiAgICAgICAgIH0gZWxzZSBpZiAoIW1fcGF1c2VkKQotICAgICAgICAg
ICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOwor
ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwgR1NUX1NU
QVRFX1BMQVlJTkcpOwogCiAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6Okxv
YWRpbmc7CiAgICAgICAgIGJyZWFrOwpAQCAtMTM5NSw3ICsxMjEwLDcgQEAgYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWROZXh0TG9jYXRpb24oKQogICAgICAgICAvLyBhcHBl
bmQgdGhlIHZhbHVlIG9mIG5ldy1sb2NhdGlvbiB0byBpdC4KIAogICAgICAgICBnY2hhciogY3Vy
cmVudExvY2F0aW9uID0gMDsKLSAgICAgICAgZ19vYmplY3RfZ2V0KG1fcGxheUJpbiwgInVyaSIs
ICZjdXJyZW50TG9jYXRpb24sIE5VTEwpOworICAgICAgICBnX29iamVjdF9nZXQobV9wbGF5Qmlu
LmdldCgpLCAidXJpIiwgJmN1cnJlbnRMb2NhdGlvbiwgTlVMTCk7CiAKICAgICAgICAgS1VSTCBj
dXJyZW50VXJsKEtVUkwoKSwgY3VycmVudExvY2F0aW9uKTsKICAgICAgICAgZ19mcmVlKGN1cnJl
bnRMb2NhdGlvbik7CkBAIC0xNDE5LDE0ICsxMjM0LDE0IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpsb2FkTmV4dExvY2F0aW9uKCkKIAogICAgICAgICAgICAgLy8gUmVzZXQg
cGlwZWxpbmUgc3RhdGUuCiAgICAgICAgICAgICBtX3Jlc2V0UGlwZWxpbmUgPSB0cnVlOwotICAg
ICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJpbiwgR1NUX1NUQVRFX1JFQURZ
KTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4uZ2V0KCksIEdT
VF9TVEFURV9SRUFEWSk7CiAKICAgICAgICAgICAgIEdzdFN0YXRlIHN0YXRlOwotICAgICAgICAg
ICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGxheUJpbiwgJnN0YXRlLCAwLCAwKTsKKyAgICAg
ICAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BsYXlCaW4uZ2V0KCksICZzdGF0ZSwgMCwg
MCk7CiAgICAgICAgICAgICBpZiAoc3RhdGUgPD0gR1NUX1NUQVRFX1JFQURZKSB7CiAgICAgICAg
ICAgICAgICAgLy8gU2V0IHRoZSBuZXcgdXJpIGFuZCBzdGFydCBwbGF5aW5nLgotICAgICAgICAg
ICAgICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJ1cmkiLCBuZXdVcmwuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRl
KG1fcGxheUJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOworICAgICAgICAgICAgICAgIGdfb2JqZWN0
X3NldChtX3BsYXlCaW4uZ2V0KCksICJ1cmkiLCBuZXdVcmwuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgTlVMTCk7CisgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJp
bi5nZXQoKSwgR1NUX1NUQVRFX1BMQVlJTkcpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNDQxLDExICsxMjU2LDYgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRTdGF0ZUNoYW5nZWQoKQogICAgIHVwZGF0
ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2l6ZUNo
YW5nZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjp0aW1lQ2hhbmdlZCgpCiB7CiAgICAgdXBkYXRlU3RhdGVzKCk7CkBA
IC0xNDY5LDcgKzEyNzksNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlk
RW5kKCkKIAogICAgIGlmICghbV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxh
eWVySXNMb29waW5nKCkpIHsKICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOwotICAgICAgICBnc3Rf
ZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5QmluLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgICAgIGdz
dF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4uZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKICAg
ICB9CiB9CiAKQEAgLTE0ODAsNyArMTI5MCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpjYWNoZUR1cmF0aW9uKCkKIAogICAgIC8vIEFuZCByZS1jYWNoZSBpdCBpZiBwb3Nz
aWJsZS4KICAgICBHc3RTdGF0ZSBzdGF0ZTsKLSAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9w
bGF5QmluLCAmc3RhdGUsIDAsIDApOworICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BsYXlC
aW4uZ2V0KCksICZzdGF0ZSwgMCwgMCk7CiAgICAgZmxvYXQgbmV3RHVyYXRpb24gPSBkdXJhdGlv
bigpOwogCiAgICAgaWYgKHN0YXRlIDw9IEdTVF9TVEFURV9SRUFEWSkgewpAQCAtMTUxNCw0NCAr
MTMyNCwxMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZHVyYXRpb25DaGFu
Z2VkKCkKICAgICAgICAgbV90b3RhbEJ5dGVzID0gLTE7CiAgICAgICAgIGlmICh0b3RhbEJ5dGVz
KCkgJiYgIWlzTGl2ZVN0cmVhbSgpKSB7CiAgICAgICAgICAgICBzZXRQcmVsb2FkKE1lZGlhUGxh
eWVyOjpBdXRvKTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4s
IEdTVF9TVEFURV9OVUxMKTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3Bs
YXlCaW4sIEdTVF9TVEFURV9QQVVTRUQpOworICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0
YXRlKG1fcGxheUJpbi5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworICAgICAgICAgICAgZ3N0X2Vs
ZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwgR1NUX1NUQVRFX1BBVVNFRCk7CiAgICAg
ICAgIH0KICAgICB9CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBw
b3J0c011dGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRNdXRlZChib29sIG11dGVkKQotewotICAgIGlmICgh
bV9wbGF5QmluKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnX29iamVjdF9zZXQobV9wbGF5Qmlu
LCAibXV0ZSIsIG11dGVkLCBOVUxMKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6Om5vdGlmeVBsYXllck9mTXV0ZSgpCi17Ci0gICAgbV9tdXRlVGltZXJIYW5kbGVyID0g
MDsKLQotICAgIGlmICghbV9wbGF5ZXIgfHwgIW1fcGxheUJpbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZ2Jvb2xlYW4gbXV0ZWQ7Ci0gICAgZ19vYmplY3RfZ2V0KG1fcGxheUJpbiwgIm11dGUi
LCAmbXV0ZWQsIE5VTEwpOwotICAgIG1fcGxheWVyLT5tdXRlQ2hhbmdlZChzdGF0aWNfY2FzdDxi
b29sPihtdXRlZCkpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bXV0
ZUNoYW5nZWQoKQotewotICAgIGlmIChtX211dGVUaW1lckhhbmRsZXIpCi0gICAgICAgIGdfc291
cmNlX3JlbW92ZShtX211dGVUaW1lckhhbmRsZXIpOwotICAgIG1fbXV0ZVRpbWVySGFuZGxlciA9
IGdfdGltZW91dF9hZGQoMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4obWVkaWFQbGF5
ZXJQcml2YXRlTXV0ZUNoYW5nZVRpbWVvdXRDYWxsYmFjayksIHRoaXMpOwotfQotCiB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0
d29ya1N0YXRlIGVycm9yKQogewogICAgIG1fZXJyb3JPY2N1cmVkID0gdHJ1ZTsKQEAgLTE1NjUs
NDYgKzEzNDMsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0Zh
aWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKQogICAgIH0KIH0KIAotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
LXsKLSAgICBtX3NpemUgPSBzaXplOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6c2V0VmlzaWJsZShib29sKQotewotfQotCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp0cmlnZ2VyUmVwYWludChHc3RCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKEdTVF9JU19CVUZGRVIoYnVmZmVyKSk7Ci0gICAgZ3N0X2J1ZmZlcl9yZXBs
YWNlKCZtX2J1ZmZlciwgYnVmZmVyKTsKLSAgICBtX3BsYXllci0+cmVwYWludCgpOwotfQotCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChjb250ZXh0LT5wYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9wbGF5ZXItPnZpc2li
bGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2J1ZmZlcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gd2Via2l0R3N0R2V0UGFkQ2Fwcyht
X3ZpZGVvU2lua1BhZC5nZXQoKSk7Ci0gICAgaWYgKCFjYXBzKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0gSW1hZ2VHU3RyZWFtZXI6OmNy
ZWF0ZUltYWdlKG1fYnVmZmVyLCBjYXBzLmdldCgpKTsKLSAgICBpZiAoIWdzdEltYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVpbnRlcnByZXRfY2FzdDxJ
bWFnZSo+KGdzdEltYWdlLT5pbWFnZSgpLmdldCgpKSwgQ29sb3JTcGFjZVNSR0IsCi0gICAgICAg
ICAgICAgICAgICAgICAgIHJlY3QsIGdzdEltYWdlLT5yZWN0KCksIENvbXBvc2l0ZUNvcHksIERv
Tm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24sIGZhbHNlKTsKLX0KLQogc3RhdGljIEhhc2hTZXQ8
U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkKIHsKICAgICBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVn
aXN0ZXJXZWJLaXRFbGVtZW50cygpOwpAQCAtMTcyNSw1NSArMTQ2MywxOSBAQCBNZWRpYVBsYXll
cjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBl
KGNvbnN0IFN0cmluZwogICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiB9
CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYXNTaW5nbGVTZWN1cml0eU9y
aWdpbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdAotewotI2lmIFBMQVRG
T1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA9PSAxMDUwCi0gICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS83Mzg5OTQ1PgotICAgIHJl
dHVybiBmYWxzZTsKLSNlbHNlCi0gICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLX0KLQotUGxhdGZv
cm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXRmb3JtTWVkaWEoKSBjb25z
dAotewotICAgIFBsYXRmb3JtTWVkaWEgcDsKLSNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKLSAg
ICBwLnR5cGUgPSBQbGF0Zm9ybU1lZGlhOjpHU3RyZWFtZXJHV29ybGRUeXBlOwotICAgIHAubWVk
aWEuZ3N0cmVhbWVyR1dvcmxkID0gbV9nc3RHV29ybGQuZ2V0KCk7Ci0jZW5kaWYKLSAgICByZXR1
cm4gcDsKLX0KLQotTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjptb3ZpZUxvYWRUeXBlKCkgY29uc3QKLXsKLSAgICBpZiAobV9yZWFkeVN0YXRl
ID09IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVy
OjpVbmtub3duOwotCi0gICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQotICAgICAgICByZXR1cm4gTWVk
aWFQbGF5ZXI6OkxpdmVTdHJlYW07Ci0KLSAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkRvd25sb2Fk
OwotfQotCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0RG93bmxvYWRCdWZm
ZXJpbmcoKQogewogICAgIGlmICghbV9wbGF5QmluKQogICAgICAgICByZXR1cm47CiAKICAgICBH
c3RQbGF5RmxhZ3MgZmxhZ3M7Ci0gICAgZ19vYmplY3RfZ2V0KG1fcGxheUJpbiwgImZsYWdzIiwg
JmZsYWdzLCBOVUxMKTsKKyAgICBnX29iamVjdF9nZXQobV9wbGF5QmluLmdldCgpLCAiZmxhZ3Mi
LCAmZmxhZ3MsIE5VTEwpOwogICAgIGlmIChtX3ByZWxvYWQgPT0gTWVkaWFQbGF5ZXI6OkF1dG8p
IHsKICAgICAgICAgTE9HX01FRElBX01FU1NBR0UoIkVuYWJsaW5nIG9uLWRpc2sgYnVmZmVyaW5n
Iik7Ci0gICAgICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJmbGFncyIsIGZsYWdzIHwgR1NU
X1BMQVlfRkxBR19ET1dOTE9BRCwgTlVMTCk7CisgICAgICAgIGdfb2JqZWN0X3NldChtX3BsYXlC
aW4uZ2V0KCksICJmbGFncyIsIGZsYWdzIHwgR1NUX1BMQVlfRkxBR19ET1dOTE9BRCwgTlVMTCk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgTE9HX01FRElBX01FU1NBR0UoIkRpc2FibGluZyBvbi1k
aXNrIGJ1ZmZlcmluZyIpOwotICAgICAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAiZmxhZ3Mi
LCBmbGFncyAmIH5HU1RfUExBWV9GTEFHX0RPV05MT0FELCBOVUxMKTsKKyAgICAgICAgZ19vYmpl
Y3Rfc2V0KG1fcGxheUJpbi5nZXQoKSwgImZsYWdzIiwgZmxhZ3MgJiB+R1NUX1BMQVlfRkxBR19E
T1dOTE9BRCwgTlVMTCk7CiAgICAgfQogfQogCkBAIC0xNzk1LDMzICsxNDk3LDIwIEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKCkKIHsKICAgICBB
U1NFUlQoIW1fcGxheUJpbik7CiAgICAgbV9wbGF5QmluID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKGdQbGF5YmluTmFtZSwgInBsYXkiKTsKKyAgICBzZXRTdHJlYW1Wb2x1bWVFbGVtZW50KEdT
VF9TVFJFQU1fVk9MVU1FKG1fcGxheUJpbi5nZXQoKSkpOwogCi0jaWZuZGVmIEdTVF9BUElfVkVS
U0lPTl8xCi0gICAgbV9nc3RHV29ybGQgPSBHU3RyZWFtZXJHV29ybGQ6OmNyZWF0ZUdXb3JsZCht
X3BsYXlCaW4pOwotI2VuZGlmCi0KLSAgICBHc3RCdXMqIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRf
YnVzKEdTVF9QSVBFTElORShtX3BsYXlCaW4pKTsKKyAgICBHc3RCdXMqIGJ1cyA9IGdzdF9waXBl
bGluZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3BsYXlCaW4uZ2V0KCkpKTsKICAgICBnc3RfYnVz
X2FkZF9zaWduYWxfd2F0Y2goYnVzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cywgIm1lc3Nh
Z2UiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZU1lc3NhZ2VDYWxsYmFjayksIHRoaXMp
OwogICAgIGdzdF9vYmplY3RfdW5yZWYoYnVzKTsKIAotICAgIGdfb2JqZWN0X3NldChtX3BsYXlC
aW4sICJtdXRlIiwgbV9wbGF5ZXItPm11dGVkKCksIE5VTEwpOworICAgIGdfb2JqZWN0X3NldCht
X3BsYXlCaW4uZ2V0KCksICJtdXRlIiwgbV9wbGF5ZXItPm11dGVkKCksIE5VTEwpOwogCi0gICAg
Z19zaWduYWxfY29ubmVjdChtX3BsYXlCaW4sICJub3RpZnk6OnZvbHVtZSIsIEdfQ0FMTEJBQ0so
bWVkaWFQbGF5ZXJQcml2YXRlVm9sdW1lQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdChtX3BsYXlCaW4sICJub3RpZnk6OnNvdXJjZSIsIEdfQ0FMTEJBQ0sobWVk
aWFQbGF5ZXJQcml2YXRlU291cmNlQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChtX3BsYXlCaW4sICJub3RpZnk6Om11dGUiLCBHX0NBTExCQUNLKG1lZGlhUGxh
eWVyUHJpdmF0ZU11dGVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fcGxheUJpbiwgInZpZGVvLWNoYW5nZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJp
dmF0ZVZpZGVvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCht
X3BsYXlCaW4sICJhdWRpby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVB
dWRpb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotCi0jaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8x
Ci0gICAgbV93ZWJraXRWaWRlb1NpbmsgPSB3ZWJraXRWaWRlb1NpbmtOZXcobV9nc3RHV29ybGQu
Z2V0KCkpOwotI2Vsc2UKLSAgICBtX3dlYmtpdFZpZGVvU2luayA9IHdlYmtpdFZpZGVvU2lua05l
dygpOwotI2VuZGlmCi0gICAgbV92aWRlb1NpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQobV93ZWJraXRWaWRlb1NpbmssICJzaW5rIikpOwotCi0gICAgZ19zaWdu
YWxfY29ubmVjdChtX3dlYmtpdFZpZGVvU2luaywgInJlcGFpbnQtcmVxdWVzdGVkIiwgR19DQUxM
QkFDSyhtZWRpYVBsYXllclByaXZhdGVSZXBhaW50Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0KG1fcGxheUJpbi5nZXQoKSwgIm5vdGlmeTo6c291cmNlIiwgR19DQUxMQkFD
SyhtZWRpYVBsYXllclByaXZhdGVTb3VyY2VDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbi5nZXQoKSwgInZpZGVvLWNoYW5nZWQiLCBHX0NBTExC
QUNLKG1lZGlhUGxheWVyUHJpdmF0ZVZpZGVvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAg
Z19zaWduYWxfY29ubmVjdChtX3BsYXlCaW4uZ2V0KCksICJhdWRpby1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhtZWRpYVBsYXllclByaXZhdGVBdWRpb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogCisg
ICAgY3JlYXRlVmlkZW9TaW5rKG1fcGxheUJpbi5nZXQoKSk7CiAKICNpZm5kZWYgR1NUX0FQSV9W
RVJTSU9OXzEKICAgICBtX3ZpZGVvU2lua0JpbiA9IGdzdF9iaW5fbmV3KCJzaW5rIik7CkBAIC0x
ODI5LDE1ICsxNTE4LDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVh
dGVHU1RQbGF5QmluKCkKICAgICBHc3RFbGVtZW50KiB2aWRlb1RlZSA9IGdzdF9lbGVtZW50X2Zh
Y3RvcnlfbWFrZSgidGVlIiwgInZpZGVvVGVlIik7CiAgICAgR3N0RWxlbWVudCogcXVldWUgPSBn
c3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInF1ZXVlIiwgMCk7CiAKLSAgICAvLyBUYWtlIG93bmVy
c2hpcC4KLSAgICBnc3Rfb2JqZWN0X3JlZl9zaW5rKG1fdmlkZW9TaW5rQmluKTsKLQogICAgIC8v
IEJ1aWxkIGEgbmV3IHZpZGVvIHNpbmsgY29uc2lzdGluZyBvZiBhIGJpbiBjb250YWluaW5nIGEg
dGVlCiAgICAgLy8gKG1lYW50IHRvIGRpc3RyaWJ1dGUgZGF0YSB0byBtdWx0aXBsZSB2aWRlbyBz
aW5rcykgYW5kIG91cgogICAgIC8vIGludGVybmFsIHZpZGVvIHNpbmsuIEZvciBmdWxsc2NyZWVu
IHdlIGNyZWF0ZSBhbiBhdXRvdmlkZW9zaW5rCiAgICAgLy8gYW5kIGluaXRpYWxseSBibG9jayB0
aGUgZGF0YSBmbG93IHRvd2FyZHMgaXQgYW5kIGNvbmZpZ3VyZSBpdAogCi0gICAgZ3N0X2Jpbl9h
ZGRfbWFueShHU1RfQklOKG1fdmlkZW9TaW5rQmluKSwgdmlkZW9UZWUsIHF1ZXVlLCBOVUxMKTsK
KyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4obV92aWRlb1NpbmtCaW4uZ2V0KCkpLCB2aWRl
b1RlZSwgcXVldWUsIE5VTEwpOwogCiAgICAgLy8gTGluayBhIG5ldyBzcmMgcGFkIGZyb20gdGVl
IHRvIHF1ZXVlMS4KICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCh2aWRlb1RlZSwgMCwg
cXVldWUsICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwpAQCAtMTg2Myw5ICsx
NTQ5LDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlC
aW4oKQogI2VuZGlmIC8vIExPR19ESVNBQkxFRAogCiAgICAgICAgICAgICBpZiAoZ19vYmplY3Rf
Y2xhc3NfZmluZF9wcm9wZXJ0eShHX09CSkVDVF9HRVRfQ0xBU1MobV9mcHNTaW5rKSwgInZpZGVv
LXNpbmsiKSkgewotICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2Zwc1NpbmssICJ2aWRl
by1zaW5rIiwgbV93ZWJraXRWaWRlb1NpbmssIE5VTEwpOworICAgICAgICAgICAgICAgIGdfb2Jq
ZWN0X3NldChtX2Zwc1NpbmssICJ2aWRlby1zaW5rIiwgbV93ZWJraXRWaWRlb1NpbmsuZ2V0KCks
IE5VTEwpOwogI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQotICAgICAgICAgICAgICAgIGdzdF9i
aW5fYWRkKEdTVF9CSU4obV92aWRlb1NpbmtCaW4pLCBtX2Zwc1NpbmspOworICAgICAgICAgICAg
ICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV92aWRlb1NpbmtCaW4uZ2V0KCkpLCBtX2Zwc1Npbmsp
OwogI2VuZGlmCiAgICAgICAgICAgICAgICAgYWN0dWFsVmlkZW9TaW5rID0gbV9mcHNTaW5rOwog
ICAgICAgICAgICAgfSBlbHNlCkBAIC0xODc2LDkgKzE1NjIsOSBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbigpCiAKICAgICBpZiAoIW1fZnBzU2lu
aykgewogI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQotICAgICAgICBnc3RfYmluX2FkZChHU1Rf
QklOKG1fdmlkZW9TaW5rQmluKSwgbV93ZWJraXRWaWRlb1NpbmspOworICAgICAgICBnc3RfYmlu
X2FkZChHU1RfQklOKG1fdmlkZW9TaW5rQmluLmdldCgpKSwgbV93ZWJraXRWaWRlb1NpbmsuZ2V0
KCkpOwogI2VuZGlmCi0gICAgICAgIGFjdHVhbFZpZGVvU2luayA9IG1fd2Via2l0VmlkZW9TaW5r
OworICAgICAgICBhY3R1YWxWaWRlb1NpbmsgPSBtX3dlYmtpdFZpZGVvU2luay5nZXQoKTsKICAg
ICB9CiAKICAgICBBU1NFUlQoYWN0dWFsVmlkZW9TaW5rKTsKQEAgLTE4ODksMTUgKzE1NzUsMTUg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oKQog
CiAgICAgLy8gQWRkIGEgZ2hvc3RwYWQgdG8gdGhlIGJpbiBzbyBpdCBjYW4gcHJveHkgdG8gdGVl
LgogICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0
YXRpY19wYWQodmlkZW9UZWUsICJzaW5rIikpOwotICAgIGdzdF9lbGVtZW50X2FkZF9wYWQobV92
aWRlb1NpbmtCaW4sIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgcGFkLmdldCgpKSk7CisgICAg
Z3N0X2VsZW1lbnRfYWRkX3BhZChtX3ZpZGVvU2lua0Jpbi5nZXQoKSwgZ3N0X2dob3N0X3BhZF9u
ZXcoInNpbmsiLCBwYWQuZ2V0KCkpKTsKIAogICAgIC8vIFNldCB0aGUgYmluIGFzIHZpZGVvIHNp
bmsgb2YgcGxheWJpbi4KLSAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAidmlkZW8tc2luayIs
IG1fdmlkZW9TaW5rQmluLCBOVUxMKTsKKyAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLmdldCgp
LCAidmlkZW8tc2luayIsIG1fdmlkZW9TaW5rQmluLmdldCgpLCBOVUxMKTsKICNlbHNlCi0gICAg
Z19vYmplY3Rfc2V0KG1fcGxheUJpbiwgInZpZGVvLXNpbmsiLCBhY3R1YWxWaWRlb1NpbmssIE5V
TEwpOworICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4uZ2V0KCksICJ2aWRlby1zaW5rIiwgYWN0
dWFsVmlkZW9TaW5rLCBOVUxMKTsKICNlbmRpZgogCi0gICAgR1JlZlB0cjxHc3RQYWQ+IHZpZGVv
U2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3dlYmtpdFZp
ZGVvU2luaywgInNpbmsiKSk7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHZpZGVvU2lua1BhZCA9IGFk
b3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3dlYmtpdFZpZGVvU2luay5nZXQo
KSwgInNpbmsiKSk7CiAgICAgaWYgKHZpZGVvU2lua1BhZCkKICAgICAgICAgZ19zaWduYWxfY29u
bmVjdCh2aWRlb1NpbmtQYWQuZ2V0KCksICJub3RpZnk6OmNhcHMiLCBHX0NBTExCQUNLKG1lZGlh
UGxheWVyUHJpdmF0ZVZpZGVvU2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDdiZWMxNDM2
YWJmNjJkYjg3YmVmN2IwYmI0M2JiY2Q4NzYwODNiY2MuLjg4YTk4YjRmZTQ3ODc4MTE3MjBkN2Zk
MWNjNTcyZTQ1OGVhMzI5NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVIpCiAKICNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAKICNpbmNsdWRlIDxnbGliLmg+CkBAIC00NSwx
NCArNDUsMTMgQEAgY2xhc3MgSW50UmVjdDsKIGNsYXNzIEdTdHJlYW1lckdXb3JsZDsKIGNsYXNz
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjsKIAotY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CitjbGFzcyBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZSB7CiAKICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgfk1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcigpOwogICAgICAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRp
YUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7CiAgICAgICAgICAgICBnYm9vbGVhbiBoYW5k
bGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKIAotICAgICAgICAgICAgSW50U2l6ZSBuYXR1cmFsU2l6
ZSgpIGNvbnN0OwogICAgICAgICAgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzVmlkZW87IH0KICAgICAgICAgICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdCB7IHJldHVybiBt
X2hhc0F1ZGlvOyB9CiAKQEAgLTczLDQ1ICs3MiwyMCBAQCBjbGFzcyBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKIAogICAg
ICAgICAgICAgdm9pZCBzZXRSYXRlKGZsb2F0KTsKIAotICAgICAgICAgICAgdm9pZCBzZXRWb2x1
bWUoZmxvYXQpOwotICAgICAgICAgICAgdm9pZCB2b2x1bWVDaGFuZ2VkKCk7Ci0gICAgICAgICAg
ICB2b2lkIG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7Ci0KLSAgICAgICAgICAgIGJvb2wg
c3VwcG9ydHNNdXRpbmcoKSBjb25zdDsKLSAgICAgICAgICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCk7
Ci0gICAgICAgICAgICB2b2lkIG11dGVDaGFuZ2VkKCk7Ci0gICAgICAgICAgICB2b2lkIG5vdGlm
eVBsYXllck9mTXV0ZSgpOwotCiAgICAgICAgICAgICB2b2lkIHNldFByZWxvYWQoTWVkaWFQbGF5
ZXI6OlByZWxvYWQpOwogICAgICAgICAgICAgdm9pZCBmaWxsVGltZXJGaXJlZChUaW1lcjxNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI+Kik7CiAKLSAgICAgICAgICAgIE1lZGlhUGxheWVyOjpO
ZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Q7Ci0gICAgICAgICAgICBNZWRpYVBsYXll
cjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7Ci0KICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdDsKICAgICAgICAgICAgIGZsb2F0IG1heFRp
bWVTZWVrYWJsZSgpIGNvbnN0OwogICAgICAgICAgICAgYm9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3Mo
KSBjb25zdDsKICAgICAgICAgICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKIAotICAg
ICAgICAgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwotICAgICAgICAgICAgdm9pZCBzZXRTaXpl
KGNvbnN0IEludFNpemUmKTsKLQogICAgICAgICAgICAgdm9pZCBsb2FkU3RhdGVDaGFuZ2VkKCk7
Ci0gICAgICAgICAgICB2b2lkIHNpemVDaGFuZ2VkKCk7CiAgICAgICAgICAgICB2b2lkIHRpbWVD
aGFuZ2VkKCk7CiAgICAgICAgICAgICB2b2lkIGRpZEVuZCgpOwogICAgICAgICAgICAgdm9pZCBk
dXJhdGlvbkNoYW5nZWQoKTsKICAgICAgICAgICAgIHZvaWQgbG9hZGluZ0ZhaWxlZChNZWRpYVBs
YXllcjo6TmV0d29ya1N0YXRlKTsKIAotICAgICAgICAgICAgdm9pZCB0cmlnZ2VyUmVwYWludChH
c3RCdWZmZXIqKTsKLSAgICAgICAgICAgIHZvaWQgcmVwYWludCgpOwotICAgICAgICAgICAgdm9p
ZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgICAg
IGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKLQotICAgICAgICAgICAgYm9v
bCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdDsKLSAgICAgICAgICAgIFBsYXRmb3JtTWVkaWEg
cGxhdGZvcm1NZWRpYSgpIGNvbnN0OwotCiAgICAgICAgICAgICB2b2lkIHZpZGVvQ2hhbmdlZCgp
OwogICAgICAgICAgICAgdm9pZCBhdWRpb0NoYW5nZWQoKTsKICAgICAgICAgICAgIHZvaWQgbm90
aWZ5UGxheWVyT2ZWaWRlbygpOwpAQCAtMTI0LDggKzk4LDYgQEAgY2xhc3MgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CiAg
ICAgICAgICAgICB1bnNpZ25lZCBhdWRpb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdDsKICAgICAg
ICAgICAgIHVuc2lnbmVkIHZpZGVvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0OwogCi0gICAgICAg
ICAgICBNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBtb3ZpZUxvYWRUeXBlKCkgY29uc3Q7Ci0K
ICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cihNZWRpYVBsYXllciopOwogCkBAIC0xNTQsMjQgKzEyNiwxOCBAQCBjbGFzcyBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsK
ICAgICAgICAgICAgIHZvaWQgcHJvY2Vzc0J1ZmZlcmluZ1N0YXRzKEdzdE1lc3NhZ2UqKTsKIAog
ICAgICAgICAgICAgdmlydHVhbCBTdHJpbmcgZW5naW5lRGVzY3JpcHRpb24oKSBjb25zdCB7IHJl
dHVybiAiR1N0cmVhbWVyIjsgfQotICAgICAgICAgICAgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25z
dCB7IHJldHVybiBtX2lzU3RyZWFtaW5nOyB9CisgICAgICAgICAgICB2aXJ0dWFsIGJvb2wgaXNM
aXZlU3RyZWFtKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0cmVhbWluZzsgfQogCiAgICAgICAgIHBy
aXZhdGU6Ci0gICAgICAgICAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7Ci0gICAgICAgICAgICBH
c3RFbGVtZW50KiBtX3BsYXlCaW47Ci0gICAgICAgICAgICBHc3RFbGVtZW50KiBtX3dlYmtpdFZp
ZGVvU2luazsKLSAgICAgICAgICAgIEdzdEVsZW1lbnQqIG1fdmlkZW9TaW5rQmluOworICAgICAg
ICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3BsYXlCaW47CisgICAgICAgICAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IG1fdmlkZW9TaW5rQmluOwogICAgICAgICAgICAgR3N0RWxlbWVudCogbV9m
cHNTaW5rOwogICAgICAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3NvdXJjZTsKICAgICAg
ICAgICAgIGZsb2F0IG1fc2Vla1RpbWU7CiAgICAgICAgICAgICBib29sIG1fY2hhbmdpbmdSYXRl
OwogICAgICAgICAgICAgZmxvYXQgbV9lbmRUaW1lOwogICAgICAgICAgICAgYm9vbCBtX2lzRW5k
UmVhY2hlZDsKLSAgICAgICAgICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3Jr
U3RhdGU7Ci0gICAgICAgICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7
CiAgICAgICAgICAgICBtdXRhYmxlIGJvb2wgbV9pc1N0cmVhbWluZzsKLSAgICAgICAgICAgIElu
dFNpemUgbV9zaXplOwotICAgICAgICAgICAgR3N0QnVmZmVyKiBtX2J1ZmZlcjsKICAgICAgICAg
ICAgIEdzdFN0cnVjdHVyZSogbV9tZWRpYUxvY2F0aW9uczsKICAgICAgICAgICAgIGludCBtX21l
ZGlhTG9jYXRpb25DdXJyZW50SW5kZXg7CiAgICAgICAgICAgICBib29sIG1fcmVzZXRQaXBlbGlu
ZTsKQEAgLTE4OSwyMCArMTU1LDE0IEBAIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ciA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogICAgICAgICAgICAgYm9v
bCBtX2RlbGF5aW5nTG9hZDsKICAgICAgICAgICAgIGJvb2wgbV9tZWRpYUR1cmF0aW9uS25vd247
CiAgICAgICAgICAgICBtdXRhYmxlIGZsb2F0IG1fbWF4VGltZUxvYWRlZEF0TGFzdERpZExvYWRp
bmdQcm9ncmVzczsKLSNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKLSAgICAgICAgICAgIFJlZlB0
cjxHU3RyZWFtZXJHV29ybGQ+IG1fZ3N0R1dvcmxkOwotI2VuZGlmCi0gICAgICAgICAgICBndWlu
dCBtX3ZvbHVtZVRpbWVySGFuZGxlcjsKLSAgICAgICAgICAgIGd1aW50IG1fbXV0ZVRpbWVySGFu
ZGxlcjsKICAgICAgICAgICAgIGJvb2wgbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQ7CiAgICAg
ICAgICAgICBib29sIG1faGFzVmlkZW87CiAgICAgICAgICAgICBib29sIG1faGFzQXVkaW87CiAg
ICAgICAgICAgICBndWludCBtX2F1ZGlvVGltZXJIYW5kbGVyOwogICAgICAgICAgICAgZ3VpbnQg
bV92aWRlb1RpbWVySGFuZGxlcjsKKyAgICAgICAgICAgIGd1aW50IG1fdmlkZW9DYXBzSGFuZGxl
cjsKICAgICAgICAgICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV93ZWJraXRBdWRpb1Npbms7CiAg
ICAgICAgICAgICBtdXRhYmxlIGxvbmcgbV90b3RhbEJ5dGVzOwotICAgICAgICAgICAgR1JlZlB0
cjxHc3RQYWQ+IG1fdmlkZW9TaW5rUGFkOwotICAgICAgICAgICAgbXV0YWJsZSBJbnRTaXplIG1f
dmlkZW9TaXplOwogICAgICAgICAgICAgS1VSTCBtX3VybDsKICAgICAgICAgICAgIGJvb2wgbV9v
cmlnaW5hbFByZWxvYWRXYXNBdXRvQW5kV2FzT3ZlcnJpZGRlbjsKICAgICB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjYyNDI1MjY2MDk0Zjc5ZDJiNjUxYjU3Y2JlM2E1YmJjOWYzYWQ1YjEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKQEAgLTAsMCArMSwzNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCIKKworI2lmIEVO
QUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIK
KyNpbmNsdWRlICJHU3RyZWFtZXJHV29ybGQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIkltYWdl
R1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgorI2luY2x1ZGUgIklu
dFJlY3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlZpZGVvU2lua0dTdHJlYW1l
ci5oIgorI2luY2x1ZGUgIldlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgPGdz
dC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlhX3Bs
YXllcl9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFfcGxheWVy
X2RlYnVnCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIGludCBncmVhdGVzdENvbW1vbkRpdmlzb3IoaW50IGEsIGludCBiKQoreworICAgIHdo
aWxlIChiKSB7CisgICAgICAgIGludCB0ZW1wID0gYTsKKyAgICAgICAgYSA9IGI7CisgICAgICAg
IGIgPSB0ZW1wICUgYjsKKyAgICB9CisKKyAgICByZXR1cm4gQUJTKGEpOworfQorCitzdGF0aWMg
dm9pZCBtZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCosIEdQ
YXJhbVNwZWMqLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIpCit7Cisg
ICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBtX3ZvbHVtZSByZWNlaXZlcyB0aGUgbm90aWZ5Ojp2
b2x1bWUgc2lnbmFsLgorICAgIHBsYXllci0+dm9sdW1lQ2hhbmdlZCgpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlVm9sdW1lQ2hhbmdlVGltZW91dENhbGxiYWNrKE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllcikKK3sKKyAgICAvLyBUaGlzIGlz
IHRoZSBjYWxsYmFjayBvZiB0aGUgdGltZW91dCBzb3VyY2UgY3JlYXRlZCBpbiA6OnZvbHVtZUNo
YW5nZWQuCisgICAgcGxheWVyLT5ub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgpOworICAgIHJl
dHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgbWVkaWFQbGF5ZXJQcml2YXRlTXV0ZUNoYW5n
ZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyosIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2UqIHBsYXllcikKK3sKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIG1fdm9sdW1l
IHJlY2VpdmVzIHRoZSBub3RpZnk6Om11dGUgc2lnbmFsLgorICAgIHBsYXllci0+bXV0ZUNoYW5n
ZWQoKTsKK30KKworc3RhdGljIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZU11dGVDaGFuZ2VU
aW1lb3V0Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyKQor
eworICAgIC8vIFRoaXMgaXMgdGhlIGNhbGxiYWNrIG9mIHRoZSB0aW1lb3V0IHNvdXJjZSBjcmVh
dGVkIGluIDo6bXV0ZUNoYW5nZWQuCisgICAgcGxheWVyLT5ub3RpZnlQbGF5ZXJPZk11dGUoKTsK
KyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZVJl
cGFpbnRDYWxsYmFjayhXZWJLaXRWaWRlb1NpbmsqLCBHc3RCdWZmZXIgKmJ1ZmZlciwgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyUHJpdmF0ZSkKK3sKKyAgICBwbGF5ZXJQ
cml2YXRlLT50cmlnZ2VyUmVwYWludChidWZmZXIpOworfQorCitNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKE1lZGlhUGxheWVy
KiBwbGF5ZXIpCisgICAgOiBtX3BsYXllcihwbGF5ZXIpCisgICAgLCBtX3JlYWR5U3RhdGUoTWVk
aWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6
OkVtcHR5KQorICAgICwgbV9idWZmZXIoMCkKKyAgICAsIG1fdm9sdW1lVGltZXJIYW5kbGVyKDAp
CisgICAgLCBtX211dGVUaW1lckhhbmRsZXIoMCkKK3sKK30KKworTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UoKQoreworICAg
IGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3dlYmtpdFZpZGVvU2luay5nZXQoKSwgbV9y
ZXBhaW50SGFuZGxlcik7CisKKyAgICBpZiAobV9idWZmZXIpCisgICAgICAgIGdzdF9idWZmZXJf
dW5yZWYobV9idWZmZXIpOworICAgIG1fYnVmZmVyID0gMDsKKworICAgIG1fcGxheWVyID0gMDsK
KworICAgIGlmIChtX211dGVUaW1lckhhbmRsZXIpCisgICAgICAgIGdfc291cmNlX3JlbW92ZSht
X211dGVUaW1lckhhbmRsZXIpOworCisgICAgaWYgKG1fdm9sdW1lVGltZXJIYW5kbGVyKQorICAg
ICAgICBnX3NvdXJjZV9yZW1vdmUobV92b2x1bWVUaW1lckhhbmRsZXIpOworfQorCisvLyBSZXR1
cm5zIHRoZSBzaXplIG9mIHRoZSB2aWRlbworSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjpuYXR1cmFsU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNWaWRlbygpKQor
ICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgaWYgKCFtX3ZpZGVvU2l6ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBtX3ZpZGVvU2l6ZTsKKworICAgIEdSZWZQdHI8R3N0Q2Fwcz4g
Y2FwcyA9IHdlYmtpdEdzdEdldFBhZENhcHMobV92aWRlb1NpbmtQYWQuZ2V0KCkpOworICAgIGlm
ICghY2FwcykKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworCisgICAgLy8gVE9ETzogaGFu
ZGxlIHBvc3NpYmxlIGNsZWFuIGFwZXJ0dXJlIGRhdGEuIFNlZQorICAgIC8vIGh0dHBzOi8vYnVn
emlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTY1NzEKKyAgICAvLyBUT0RPOiBoYW5k
bGUgcG9zc2libGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBTZWUKKyAgICAvLyBodHRwczovL2J1
Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2MzI2CisKKyAgICAvLyBHZXQgdGhl
IHZpZGVvIFBBUiBhbmQgb3JpZ2luYWwgc2l6ZSwgaWYgdGhpcyBmYWlscyB0aGUKKyAgICAvLyB2
aWRlby1zaW5rIGhhcyBsaWtlbHkgbm90IHlldCBuZWdvdGlhdGVkIGl0cyBjYXBzLgorICAgIGlu
dCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3Is
IHN0cmlkZTsKKyAgICBJbnRTaXplIG9yaWdpbmFsU2l6ZTsKKyAgICBHc3RWaWRlb0Zvcm1hdCBm
b3JtYXQ7CisgICAgaWYgKCFnZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2FwcyhjYXBzLmdldCgp
LCBvcmlnaW5hbFNpemUsIGZvcm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxB
c3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJpZGUpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgp
OworCisgICAgTE9HX01FRElBX01FU1NBR0UoIk9yaWdpbmFsIHZpZGVvIHNpemU6ICVkeCVkIiwg
b3JpZ2luYWxTaXplLndpZHRoKCksIG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgTE9HX01F
RElBX01FU1NBR0UoIlBpeGVsIGFzcGVjdCByYXRpbzogJWQvJWQiLCBwaXhlbEFzcGVjdFJhdGlv
TnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IpOworCisgICAgLy8gQ2FsY3Vs
YXRlIERBUiBiYXNlZCBvbiBQQVIgYW5kIHZpZGVvIHNpemUuCisgICAgaW50IGRpc3BsYXlXaWR0
aCA9IG9yaWdpbmFsU2l6ZS53aWR0aCgpICogcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvcjsKKyAg
ICBpbnQgZGlzcGxheUhlaWdodCA9IG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAqIHBpeGVsQXNwZWN0
UmF0aW9EZW5vbWluYXRvcjsKKworICAgIC8vIERpdmlkZSBkaXNwbGF5IHdpZHRoIGFuZCBoZWln
aHQgYnkgdGhlaXIgR0NEIHRvIGF2b2lkIHBvc3NpYmxlIG92ZXJmbG93cy4KKyAgICBpbnQgZGlz
cGxheUFzcGVjdFJhdGlvR0NEID0gZ3JlYXRlc3RDb21tb25EaXZpc29yKGRpc3BsYXlXaWR0aCwg
ZGlzcGxheUhlaWdodCk7CisgICAgZGlzcGxheVdpZHRoIC89IGRpc3BsYXlBc3BlY3RSYXRpb0dD
RDsKKyAgICBkaXNwbGF5SGVpZ2h0IC89IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKKworICAgIC8v
IEFwcGx5IERBUiB0byBvcmlnaW5hbCB2aWRlbyBzaXplLiBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2
aW9yIGFzIGluIHh2aW1hZ2VzaW5rJ3Mgc2V0Y2FwcyBmdW5jdGlvbi4KKyAgICBndWludDY0IHdp
ZHRoID0gMCwgaGVpZ2h0ID0gMDsKKyAgICBpZiAoIShvcmlnaW5hbFNpemUuaGVpZ2h0KCkgJSBk
aXNwbGF5SGVpZ2h0KSkgeworICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgiS2VlcGluZyB2aWRl
byBvcmlnaW5hbCBoZWlnaHQiKTsKKyAgICAgICAgd2lkdGggPSBnc3RfdXRpbF91aW50NjRfc2Nh
bGVfaW50KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSwgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0
KTsKKyAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLmhl
aWdodCgpKTsKKyAgICB9IGVsc2UgaWYgKCEob3JpZ2luYWxTaXplLndpZHRoKCkgJSBkaXNwbGF5
V2lkdGgpKSB7CisgICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJLZWVwaW5nIHZpZGVvIG9yaWdp
bmFsIHdpZHRoIik7CisgICAgICAgIGhlaWdodCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQo
b3JpZ2luYWxTaXplLndpZHRoKCksIGRpc3BsYXlIZWlnaHQsIGRpc3BsYXlXaWR0aCk7CisgICAg
ICAgIHdpZHRoID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLndpZHRoKCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJBcHByb3hpbWF0aW5nIHdo
aWxlIGtlZXBpbmcgb3JpZ2luYWwgdmlkZW8gaGVpZ2h0Iik7CisgICAgICAgIHdpZHRoID0gZ3N0
X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0KCksIGRpc3BsYXlXaWR0
aCwgZGlzcGxheUhlaWdodCk7CisgICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+
KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgfQorCisgICAgTE9HX01FRElBX01FU1NBR0Uo
Ik5hdHVyYWwgc2l6ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCAieCUiIEdfR1VJTlQ2NF9GT1JNQVQs
IHdpZHRoLCBoZWlnaHQpOworICAgIG1fdmlkZW9TaXplID0gSW50U2l6ZShzdGF0aWNfY2FzdDxp
bnQ+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQpKTsKKyAgICByZXR1cm4gbV92aWRl
b1NpemU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0Vm9s
dW1lKGZsb2F0IHZvbHVtZSkKK3sKKyAgICBpZiAoIW1fdm9sdW1lKQorICAgICAgICByZXR1cm47
CisKKyAgICBnc3Rfc3RyZWFtX3ZvbHVtZV9zZXRfdm9sdW1lKG1fdm9sdW1lLmdldCgpLCBHU1Rf
U1RSRUFNX1ZPTFVNRV9GT1JNQVRfQ1VCSUMsIHN0YXRpY19jYXN0PGRvdWJsZT4odm9sdW1lKSk7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bm90aWZ5UGxheWVy
T2ZWb2x1bWVDaGFuZ2UoKQoreworICAgIG1fdm9sdW1lVGltZXJIYW5kbGVyID0gMDsKKworICAg
IGlmICghbV9wbGF5ZXIgfHwgIW1fdm9sdW1lKQorICAgICAgICByZXR1cm47CisgICAgZG91Ymxl
IHZvbHVtZTsKKyAgICB2b2x1bWUgPSBnc3Rfc3RyZWFtX3ZvbHVtZV9nZXRfdm9sdW1lKG1fdm9s
dW1lLmdldCgpLCBHU1RfU1RSRUFNX1ZPTFVNRV9GT1JNQVRfQ1VCSUMpOworICAgIC8vIGdldF92
b2x1bWUoKSBjYW4gcmV0dXJuIHZhbHVlcyBzdXBlcmlvciB0byAxLjAgaWYgdGhlIHVzZXIKKyAg
ICAvLyBhcHBsaWVzIHNvZnR3YXJlIHVzZXIgZ2FpbiB2aWEgdGhpcmQgcGFydHkgYXBwbGljYXRp
b24gKEdOT01FCisgICAgLy8gdm9sdW1lIGNvbnRyb2wgZm9yIGluc3RhbmNlKS4KKyAgICB2b2x1
bWUgPSBDTEFNUCh2b2x1bWUsIDAuMCwgMS4wKTsKKyAgICBtX3BsYXllci0+dm9sdW1lQ2hhbmdl
ZChzdGF0aWNfY2FzdDxmbG9hdD4odm9sdW1lKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6dm9sdW1lQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fdm9sdW1lVGlt
ZXJIYW5kbGVyKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV92b2x1bWVUaW1lckhhbmRsZXIp
OworICAgIG1fdm9sdW1lVGltZXJIYW5kbGVyID0gZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJl
dF9jYXN0PEdTb3VyY2VGdW5jPihtZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2VUaW1lb3V0
Q2FsbGJhY2spLCB0aGlzKTsKK30KKworTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuZXR3b3JrU3RhdGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX25ldHdvcmtTdGF0ZTsKK30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcmVhZHlTdGF0ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlOjpzaXplQ2hhbmdlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRNdXRlZChib29sIG11dGVkKQorewor
ICAgIGlmICghbV92b2x1bWUpCisgICAgICAgIHJldHVybjsKKworICAgIGdfb2JqZWN0X3NldCht
X3ZvbHVtZS5nZXQoKSwgIm11dGUiLCBtdXRlZCwgTlVMTCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bm90aWZ5UGxheWVyT2ZNdXRlKCkKK3sKKyAgICBtX211
dGVUaW1lckhhbmRsZXIgPSAwOworCisgICAgaWYgKCFtX3BsYXllciB8fCAhbV92b2x1bWUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdib29sZWFuIG11dGVkOworICAgIGdfb2JqZWN0X2dldCht
X3ZvbHVtZS5nZXQoKSwgIm11dGUiLCAmbXV0ZWQsIE5VTEwpOworICAgIG1fcGxheWVyLT5tdXRl
Q2hhbmdlZChzdGF0aWNfY2FzdDxib29sPihtdXRlZCkpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6Om11dGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9tdXRlVGlt
ZXJIYW5kbGVyKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9tdXRlVGltZXJIYW5kbGVyKTsK
KyAgICBtX211dGVUaW1lckhhbmRsZXIgPSBnX3RpbWVvdXRfYWRkKDAsIHJlaW50ZXJwcmV0X2Nh
c3Q8R1NvdXJjZUZ1bmM+KG1lZGlhUGxheWVyUHJpdmF0ZU11dGVDaGFuZ2VUaW1lb3V0Q2FsbGJh
Y2spLCB0aGlzKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp0
cmlnZ2VyUmVwYWludChHc3RCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICAvLyBGSVhNRTogdXNlIGlt
cGxlbWVudGF0aW9uIGZyb20gU3RyZWFtTWVkaWFQbGF5ZXI/PworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoR1NUX0lTX0JVRkZFUihidWZmZXIpKTsKKyAgICBnc3RfYnVmZmVyX3JlcGxhY2UoJm1fYnVm
ZmVyLCBidWZmZXIpOworICAgIG1fcGxheWVyLT5yZXBhaW50KCk7CisKKyNpZiAwIC8vIGltcGxl
bWVudGF0aW9uIGZyb20gU3RyZWFtTWVkaWFQbGF5ZXIKKyAgICBnX3JldHVybl9pZl9mYWlsKEdT
VF9JU19CVUZGRVIoYnVmZmVyKSk7CisKKyAgICBpZiAoIXBsYXllclByaXZhdGUtPm1fYnVmZmVy
KSB7CisgICAgICAgIHBsYXllclByaXZhdGUtPm1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpI
YXZlRW5vdWdoRGF0YTsKKyAgICAgICAgcGxheWVyUHJpdmF0ZS0+bV9wbGF5ZXItPnJlYWR5U3Rh
dGVDaGFuZ2VkKCk7CisgICAgfQorCisgICAgaWYgKCFwbGF5ZXJQcml2YXRlLT5tX3BhdXNlZCB8
fCAhcGxheWVyUHJpdmF0ZS0+bV9idWZmZXIpIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl9yZXBsYWNl
KCZwbGF5ZXJQcml2YXRlLT5tX2J1ZmZlciwgYnVmZmVyKTsKKworICAgICAgICBJbnRTaXplIHNp
emUgPSBwbGF5ZXJQcml2YXRlLT5jYWxjdWxhdGVTaXplKCk7CisgICAgICAgIHBsYXllclByaXZh
dGUtPnVwZGF0ZUN1cnJlbnRTaXplKHNpemUpOworCisgICAgICAgIHBsYXllclByaXZhdGUtPnJl
cGFpbnQoKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgbV9zaXplID0g
c2l6ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpwYWludChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYg
KGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFtX3BsYXllci0+dmlzaWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fYnVm
ZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMgPSB3ZWJr
aXRHc3RHZXRQYWRDYXBzKG1fdmlkZW9TaW5rUGFkLmdldCgpKTsKKyAgICBpZiAoIWNhcHMpCisg
ICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJbWFnZUdTdHJlYW1lcj4gZ3N0SW1hZ2UgPSBJ
bWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UobV9idWZmZXIsIGNhcHMuZ2V0KCkpOworICAgIGlm
ICghZ3N0SW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnRleHQtPmRyYXdJbWFnZShy
ZWludGVycHJldF9jYXN0PEltYWdlKj4oZ3N0SW1hZ2UtPmltYWdlKCkuZ2V0KCkpLCBDb2xvclNw
YWNlU1JHQiwKKyAgICAgICAgcmVjdCwgZ3N0SW1hZ2UtPnJlY3QoKSwgQ29tcG9zaXRlQ29weSwg
RG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgZmFsc2UpOworfQorCitib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0Cit7Cisj
aWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID09IDEwNTAKKyAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzczODk5NDU+
CisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQor
CitQbGF0Zm9ybU1lZGlhIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnBsYXRmb3Jt
TWVkaWEoKSBjb25zdAoreworICAgIFBsYXRmb3JtTWVkaWEgcDsKKyNpZm5kZWYgR1NUX0FQSV9W
RVJTSU9OXzEKKyAgICBwLnR5cGUgPSBQbGF0Zm9ybU1lZGlhOjpHU3RyZWFtZXJHV29ybGRUeXBl
OworICAgIHAubWVkaWEuZ3N0cmVhbWVyR1dvcmxkID0gbV9nc3RHV29ybGQuZ2V0KCk7CisjZW5k
aWYKKyAgICByZXR1cm4gcDsKK30KKworTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bW92aWVMb2FkVHlwZSgpIGNvbnN0Cit7CisgICAg
aWYgKG1fcmVhZHlTdGF0ZSA9PSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCisgICAgICAgIHJl
dHVybiBNZWRpYVBsYXllcjo6VW5rbm93bjsKKworICAgIGlmIChpc0xpdmVTdHJlYW0oKSkKKyAg
ICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpMaXZlU3RyZWFtOworCisgICAgcmV0dXJuIE1lZGlh
UGxheWVyOjpEb3dubG9hZDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlOjpjcmVhdGVWaWRlb1NpbmsoR3N0RWxlbWVudCogcGlwZWxpbmUpCit7CisgICAgaWYgKCFp
bml0aWFsaXplR1N0cmVhbWVyKCkpCisgICAgICAgIHJldHVybjsKKworI2lmbmRlZiBHU1RfQVBJ
X1ZFUlNJT05fMQorICAgIG1fZ3N0R1dvcmxkID0gR1N0cmVhbWVyR1dvcmxkOjpjcmVhdGVHV29y
bGQocGlwZWxpbmUpOworICAgIG1fd2Via2l0VmlkZW9TaW5rID0gd2Via2l0VmlkZW9TaW5rTmV3
KG1fZ3N0R1dvcmxkLmdldCgpKTsKKyNlbHNlCisgICAgbV93ZWJraXRWaWRlb1NpbmsgPSB3ZWJr
aXRWaWRlb1NpbmtOZXcoKTsKKyNlbmRpZgorICAgIG1fdmlkZW9TaW5rUGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fd2Via2l0VmlkZW9TaW5rLmdldCgpLCAic2lu
ayIpKTsKKworICAgIG1fcmVwYWludEhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KG1fd2Via2l0
VmlkZW9TaW5rLmdldCgpLCAicmVwYWludC1yZXF1ZXN0ZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxh
eWVyUHJpdmF0ZVJlcGFpbnRDYWxsYmFjayksIHRoaXMpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6OnNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR3N0U3RyZWFtVm9s
dW1lKiB2b2x1bWUpCit7CisgICAgQVNTRVJUKCFtX3ZvbHVtZSk7CisgICAgbV92b2x1bWUgPSB2
b2x1bWU7CisKKyAgICBnX29iamVjdF9zZXQobV92b2x1bWUuZ2V0KCksICJtdXRlIiwgbV9wbGF5
ZXItPm11dGVkKCksICJ2b2x1bWUiLCBtX3BsYXllci0+dm9sdW1lKCksIE5VTEwpOworCisgICAg
Z19zaWduYWxfY29ubmVjdChtX3ZvbHVtZS5nZXQoKSwgIm5vdGlmeTo6dm9sdW1lIiwgR19DQUxM
QkFDSyhtZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fdm9sdW1lLmdldCgpLCAibm90aWZ5OjptdXRlIiwgR19DQUxM
QkFDSyhtZWRpYVBsYXllclByaXZhdGVNdXRlQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Cit9CisK
K30KKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNWY4ZWE3OGRiZmJhNDA3
YjVmMTUzZTZhNjA4ZmUxMDYxYzIzNzVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3
IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MCBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlX2gKKyNk
ZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZV9oCisjaWYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1
ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCisjaWZkZWYgR1NUX0FQ
SV9WRVJTSU9OXzEKKyNpbmNsdWRlIDxnc3QvYXVkaW8vc3RyZWFtdm9sdW1lLmg+CisjZWxzZQor
I2luY2x1ZGUgPGdzdC9pbnRlcmZhY2VzL3N0cmVhbXZvbHVtZS5oPgorI2VuZGlmCisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRWaWRlb1NpbmsgV2ViS2l0VmlkZW9TaW5rOwordHlwZWRlZiBzdHJ1
Y3QgX0dzdEJ1ZmZlciBHc3RCdWZmZXI7Cit0eXBlZGVmIHN0cnVjdCBfR3N0TWVzc2FnZSBHc3RN
ZXNzYWdlOwordHlwZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnQgR3N0RWxlbWVudDsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnRTaXplOwor
Y2xhc3MgSW50UmVjdDsKK2NsYXNzIEdTdHJlYW1lckdXb3JsZDsKKworY2xhc3MgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZh
Y2UgeworCitwdWJsaWM6CisgICAgfk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UoKTsK
KworICAgIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdDsKKworICAgIHZvaWQgc2V0Vm9sdW1l
KGZsb2F0KTsKKyAgICB2b2lkIHZvbHVtZUNoYW5nZWQoKTsKKyAgICB2b2lkIG5vdGlmeVBsYXll
ck9mVm9sdW1lQ2hhbmdlKCk7CisKKyAgICBib29sIHN1cHBvcnRzTXV0aW5nKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCk7CisgICAgdm9pZCBtdXRlQ2hh
bmdlZCgpOworICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZNdXRlKCk7CisKKyAgICBNZWRpYVBsYXll
cjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0OworICAgIE1lZGlhUGxheWVyOjpS
ZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKKworICAgIHZvaWQgc2V0VmlzaWJsZShib29s
KSB7IH0KKyAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgc2l6ZUNo
YW5nZWQoKTsKKworICAgIHZvaWQgdHJpZ2dlclJlcGFpbnQoR3N0QnVmZmVyKik7CisgICAgdm9p
ZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisK
KyAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0OworICAgIFBsYXRmb3JtTWVkaWEg
cGxhdGZvcm1NZWRpYSgpIGNvbnN0OworCisgICAgTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUg
bW92aWVMb2FkVHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0xpdmVTdHJlYW0oKSBj
b25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlKE1lZGlhUGxheWVyKik7CisgICAgdm9pZCBjcmVhdGVWaWRlb1NpbmsoR3N0RWxlbWVudCog
cGlwZWxpbmUpOworICAgIHZvaWQgc2V0U3RyZWFtVm9sdW1lRWxlbWVudChHc3RTdHJlYW1Wb2x1
bWUqKTsKKworICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKKyAgICBHUmVmUHRyPEdzdFN0cmVh
bVZvbHVtZT4gbV92b2x1bWU7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3dlYmtpdFZpZGVv
U2luazsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CisgICAgTWVk
aWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKKyAgICBJbnRTaXplIG1fc2l6
ZTsKKyAgICBHc3RCdWZmZXIqIG1fYnVmZmVyOworI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQor
ICAgIFJlZlB0cjxHU3RyZWFtZXJHV29ybGQ+IG1fZ3N0R1dvcmxkOworI2VuZGlmCisgICAgZ3Vp
bnQgbV92b2x1bWVUaW1lckhhbmRsZXI7CisgICAgZ3VpbnQgbV9tdXRlVGltZXJIYW5kbGVyOwor
ICAgIGd1aW50IG1fcmVwYWludEhhbmRsZXI7CisgICAgR1JlZlB0cjxHc3RQYWQ+IG1fdmlkZW9T
aW5rUGFkOworICAgIG11dGFibGUgSW50U2l6ZSBtX3ZpZGVvU2l6ZTsKK307Cit9CisKKyNlbmRp
ZiAvLyBVU0UoR1NUUkVBTUVSKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9TdHJl
YW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlZmU2ZDNkNGI0
ZDAwOGNmZWVmZGQ4Y2NjYzNlOWE1YjQ1ZGY5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvU3RyZWFtTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTIgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIlN0cmVhbU1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVyR1dvcmxkLmgiCisj
aW5jbHVkZSAiR1N0cmVhbWVyVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiSW1hZ2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiTWVk
aWFTdHJlYW1SZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiVmlkZW9TaW5rR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqIHBsYXll
cikKKyAgICA6IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UocGxheWVyKQorICAgICwg
bV92aWRlb1NpbmtCaW4oMCkKKyAgICAsIG1fYXVkaW9TaW5rQmluKDApCisgICAgLCBtX3BhdXNl
ZCh0cnVlKQorICAgICwgbV9zdG9wcGVkKHRydWUpCit7CisgICAgTE9HKE1lZGlhLCAiU3RyZWFt
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIC0gQ3JlYXRpbmcgU3RyZWFtIG1lZGlhIHBsYXll
ciIpOworfQorCitTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6On5TdHJlYW1NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIoKQoreworICAgIExPRyhNZWRpYSwgIlN0cmVhbU1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lciBkZXN0cnVjdG9yIGNhbGxlZC4iKTsKKworICAgIGlmICht
X2J1ZmZlcikKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihtX2J1ZmZlcik7CisgICAgbV9idWZm
ZXIgPSAwOworCisgICAgc3RvcCgpOworCisgICAgaWYgKG1fYXVkaW9TaW5rQmluKSB7CisgICAg
ICAgIGdzdF9vYmplY3RfdW5yZWYobV9hdWRpb1NpbmtCaW4pOworICAgICAgICBtX2F1ZGlvU2lu
a0JpbiA9IDA7CisgICAgfQorCisgICAgaWYgKG1fdmlkZW9TaW5rQmluKSB7CisgICAgICAgIGdz
dF9vYmplY3RfdW5yZWYobV92aWRlb1NpbmtCaW4pOworICAgICAgICBtX3ZpZGVvU2lua0JpbiA9
IDA7CisgICAgfQorfQorCit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
cGxheSgpCit7CisgICAgTE9HKE1lZGlhLCAiU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpwbGF5KCkgY2FsbGVkLiIpOworCisgICAgaWYgKCFtX3N0cmVhbURlc2NyaXB0b3IgfHwg
bV9zdHJlYW1EZXNjcmlwdG9yLT5lbmRlZCgpKSB7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgbG9hZGluZ0ZhaWxlZChNZWRpYVBsYXll
cjo6RW1wdHkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wYXVzZWQgPSBmYWxz
ZTsKKyAgICBpbnRlcm5hbExvYWQoKTsKK30KKwordm9pZCBTdHJlYW1NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnBhdXNlKCkKK3sKKyAgICBMT0coTWVkaWEsICJTdHJlYW1NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnBhdXNlKCkgY2FsbGVkLiIpOworICAgIG1fcGF1c2VkID0gdHJ1
ZTsKKyAgICBzdG9wKCk7Cit9CisKKworYm9vbCBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6Omhhc1ZpZGVvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fdmlkZW9Tb3VyY2VJZC5p
c0VtcHR5KCk7Cit9CisKK2Jvb2wgU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpo
YXNBdWRpbygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2F1ZGlvU291cmNlSWQuaXNFbXB0eSgp
OworfQorCit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZChjb25z
dCBTdHJpbmcgJnVybCkKK3sKKyAgICBMT0coTWVkaWEsICJTdHJlYW1NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIgLSBsb2FkICVzIiwgdXJsLnV0ZjgoKS5kYXRhKCkpOworCisgICAgbV9zdHJl
YW1EZXNjcmlwdG9yID0gTWVkaWFTdHJlYW1SZWdpc3RyeTo6cmVnaXN0cnkoKS5sb29rdXBNZWRp
YVN0cmVhbURlc2NyaXB0b3IodXJsKTsKKyAgICBpZiAoIW1fc3RyZWFtRGVzY3JpcHRvciB8fCBt
X3N0cmVhbURlc2NyaXB0b3ItPmVuZGVkKCkpIHsKKyAgICAgICAgbG9hZGluZ0ZhaWxlZChNZWRp
YVBsYXllcjo6TmV0d29ya0Vycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
cmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICBtX25ldHdvcmtTdGF0
ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFu
Z2VkKCk7CisgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisKKyAgICBpZiAoIWlu
dGVybmFsTG9hZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzVmlkZW8oKSkgewor
ICAgICAgICAvLyBXYWl0IGZvciBmaXJzdCB2aWRlbyBmcmFtZSB0byBzZXQgSGF2ZUVub3VnaERh
dGEKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIGdvIGdvIGdvCisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICB9CisKKyAgICBtX3BsYXllci0+cmVhZHlT
dGF0ZUNoYW5nZWQoKTsKKworfQorCit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKQorewor
CisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IGVycm9yKSB7CisgICAgICAgIG1fbmV0d29ya1N0
YXRlID0gZXJyb3I7CisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Cisg
ICAgfQorICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKSB7
CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAg
ICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgfQorfQorCitib29sIFN0cmVh
bU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmludGVybmFsTG9hZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpzdG9wKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK1Bhc3NPd25QdHI8TWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKQoreworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKHBsYXllcikpOworfQorCit2b2lk
IFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVnaXN0ZXJNZWRpYUVuZ2luZShN
ZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgaWYgKGlzQXZhaWxhYmxlKCkp
CisgICAgICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5
cGUsIDAsIDAsIDApOworfQorCit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcykKK3sKKyAgICB0eXBl
cy5hZGQoU3RyaW5nKCJ2aWRlby94LXJhdy15dXYiKSk7CisgICAgdHlwZXMuYWRkKFN0cmluZygi
YXVkaW8veC1yYXctaW50IikpOworfQorCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIFN0cmVh
bU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBVTlVT
RURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKGNvZGVjcyk7CisKKyAgICBpZiAodXJs
LmlzTnVsbCgpIHx8IHVybC5pc0VtcHR5KCkgfHwgIXVybC5pc1ZhbGlkKCkpCisgICAgICAgIHJl
dHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICByZXR1cm4gTWVkaWFTdHJl
YW1SZWdpc3RyeTo6cmVnaXN0cnkoKS5sb29rdXBNZWRpYVN0cmVhbURlc2NyaXB0b3IodXJsLnN0
cmluZygpKSA/IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJc05vdFN1
cHBvcnRlZDsKK30KKworYm9vbCBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Omlz
QXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4gaW5pdGlhbGl6ZUdTdHJlYW1lcigpOworfQorCit2
b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlQ2hhbmdlZFN0YXRl
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1N0cmVh
bU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1N0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdmODJiOWUxZDY5NjQwMzdjZjEyZmM2OGZiNGVkZmIxNWY5YzBlZmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFN0cmVhbU1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcl9oCisjZGVmaW5lIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcl9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVS
KQorCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIgorI2luY2x1
ZGUgIk1lZGlhU3RyZWFtLmgiCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0VmlkZW9TaW5rIFdlYktpdFZpZGVvU2luazsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBLVVJMOworY2xhc3MgU3RyZWFtQ29tcG9uZW50OworY2xhc3MgTWVkaWFTdHJl
YW1EZXNjcmlwdG9yOworY2xhc3MgR1N0cmVhbWVyR1dvcmxkOworCitjbGFzcyBTdHJlYW1NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZSwgcHJpdmF0ZSBNZWRpYVN0cmVhbVNvdXJjZTo6T2JzZXJ2ZXIgeworICAgIGZyaWVu
ZCB2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZVJlcGFpbnRDYWxsYmFjayhXZWJLaXRWaWRlb1Npbmsq
LCBHc3RCdWZmZXIqLCBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKK3B1Ymxp
YzoKKyAgICB+U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKCk7CisgICAgc3RhdGlj
IHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7CisKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2Vs
TG9hZCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1BsYXkoKSB7IH0KKyAgICB2
b2lkIHBsYXkoKTsKKyAgICB2b2lkIHBhdXNlKCk7CisKKyAgICBib29sIGhhc1ZpZGVvKCkgY29u
c3Q7CisgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OworCisgICAgdmlydHVhbCBmbG9hdCBkdXJh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgZmxvYXQgY3VycmVudFRp
bWUoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lkIHNlZWsoZmxvYXQpIHsg
fQorICAgIHZpcnR1YWwgYm9vbCBzZWVraW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRlKGZsb2F0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
UHJlc2VydmVzUGl0Y2goYm9vbCkgeyB9CisgICAgdmlydHVhbCBib29sIHBhdXNlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGF1c2VkOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQ2xvc2VkQ2FwdGlv
bnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDbG9zZWRD
YXB0aW9uc1Zpc2libGUoYm9vbCkgeyB9OworCisgICAgdmlydHVhbCBmbG9hdCBtYXhUaW1lU2Vl
a2FibGUoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRpbWVS
YW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3QgeyByZXR1cm4gVGltZVJhbmdlczo6Y3JlYXRlKCk7IH0K
KyAgICBib29sIGRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNp
Z25lZCB0b3RhbEJ5dGVzKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdW5zaWdu
ZWQgYnl0ZXNMb2FkZWQoKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
Y2FuTG9hZFBvc3RlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lk
IHNldFBvc3Rlcihjb25zdCBTdHJpbmcmKSB7IH0KKworICAgIHZvaWQgc291cmNlQ2hhbmdlZFN0
YXRlKCk7CisgICAgdmlydHVhbCBib29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KKworcHJpdmF0ZToKKyAgICBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIo
TWVkaWFQbGF5ZXIqKTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0
ZUludGVyZmFjZT4gY3JlYXRlKE1lZGlhUGxheWVyKik7CisKKyAgICBzdGF0aWMgdm9pZCBnZXRT
dXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6
OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJp
bmcmIGNvZGVjcywgY29uc3QgS1VSTCYpOworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7
CisgICAgdm9pZCBsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgZXJyb3Ip
OworICAgIGJvb2wgaW50ZXJuYWxMb2FkKCk7CisgICAgdm9pZCBzdG9wKCk7CisKK3ByaXZhdGU6
CisgICAgR3N0RWxlbWVudCogbV92aWRlb1NpbmtCaW47CisgICAgR3N0RWxlbWVudCogbV9hdWRp
b1NpbmtCaW47CisgICAgYm9vbCBtX3BhdXNlZDsKKyAgICBib29sIG1fc3RvcHBlZDsKKyAgICBT
dHJpbmcgbV92aWRlb1NvdXJjZUlkOworICAgIFN0cmluZyBtX2F1ZGlvU291cmNlSWQ7CisgICAg
UmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gbV9zdHJlYW1EZXNjcmlwdG9yOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgVVNFKEdTVFJFQU1FUikKKworI2VuZGlmIC8vIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcl9oCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggYmQwN2Ex
ODUwYWE4YzgyMDMzYTY5YTI3YmRkNjVkMzMyYWQxMGM3Zi4uNjcxYWExMTk4MTU0MmNlYjg1Zjhh
YTdjY2NkY2ZhYzJkYTJiN2JmMSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDEzLTAxLTMwICBKb25hdGhvbiBKb25nc21hICA8am9uYXRo
b24uam9uZ3NtYUBjb2xsYWJvcmEuY29tPgorCisgICAgICAgIFtndGtdIGNvcmUgaW1wbGVtZW50
YXRpb24gZm9yIGdldFVzZXJNZWRpYSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMDI2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogY29uZmlndXJlLmFjOiByZW1vdmUgZmFyc3RyZWFtIHJlcXVp
cmVtZW50IGZvciBub3cgc2luY2UgaXQncworICAgICAgICBub3QgYWN0dWFsbHkgdXNlZCB5ZXQg
YW5kIG1ha2VzIGl0IG1vcmUgZGlmZmljdWx0IHRvIGJ1aWxkIGFuZAorICAgICAgICB0ZXN0CisK
IDIwMTMtMDEtMTggIFN1ZGFyc2FuYSBOYWdpbmVuaSAgPHN1ZGFyc2FuYS5uYWdpbmVuaUBpbnRl
bC5jb20+CiAKICAgICAgICAgW0NNYWtlXSBGaXggQ01ha2Ugd2FybmluZ3MKZGlmZiAtLWdpdCBh
L2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBkNDVkM2M4NjQ3ODZjNTBmYjZkMmY1
ZmIwNTYxZTY1YWU4OGNkMDdjLi4xODIxYzM5YmY3YmI4NTkzMDIxNTM4NWMzYmQwMTE2OThkMWRh
ZWI5IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC05ODgs
MjEgKzk4OCw2IEBAIGlmIHRlc3QgIiRlbmFibGVfdmlkZW8iID0gInllcyIgfHwgdGVzdCAiJGVu
YWJsZV93ZWJfYXVkaW8iID0gInllcyI7IHRoZW4KICAgIEFDX1NVQlNUKFtHU1RSRUFNRVJfTElC
U10pCiBmaQogCi0jIGZhcnN0cmVhbS0wLjEgZGVwZW5kcyBvbiBnc3RyZWFtZXIgMC4xMCBjdXJy
ZW50bHkuIERpc2FibGUKLSMgbWVkaWFfc3RyZWFtIGlmIGdzdHJlYW1lciAxLjAgYnVpbGQgc3Vw
cG9ydCBpcyBlbmFibGVkLgotaWYgdGVzdCAiJGhhdmVfZ3N0cmVhbWVyIiAhPSAieWVzIiB8fCB0
ZXN0ICIkR1NUX0FQSV9WRVJTSU9OIiA9ICIxLjAiOyB0aGVuCi0gICBpZiB0ZXN0ICIkZW5hYmxl
X21lZGlhX3N0cmVhbSIgPSAieWVzIjsgdGhlbgotICAgICAgQUNfTVNHX1dBUk4oW0Rpc2FibGlu
ZyBNZWRpYSBTdHJlYW0gYmVjYXVzZSBubyBHU3RyZWFtZXIgMC4xMCBzdXBwb3J0IGlzIGVuYWJs
ZWRdKQotICAgZmkKLSAgIGVuYWJsZV9tZWRpYV9zdHJlYW09ZmFsc2UKLWZpCi1pZiB0ZXN0ICIk
ZW5hYmxlX21lZGlhX3N0cmVhbSIgPSAieWVzIjsgdGhlbgotICAgUEtHX0NIRUNLX01PRFVMRVMo
W0ZBUlNUUkVBTV0sIFtmYXJzdHJlYW0tMC4xXSwKLSAgICAgICAgICAgICAgICAgICAgIFtoYXZl
X2ZhcnN0cmVhbT15ZXNdLCBbZW5hYmxlX21lZGlhX3N0cmVhbT1mYWxzZV0pCi0gICBBQ19TVUJT
VChbRkFSU1RSRUFNX0NGTEFHU10pCi0gICBBQ19TVUJTVChbRkFSU1RSRUFNX0xJQlNdKQotZmkK
LQogYWNjZWxlcmF0aW9uX2JhY2tlbmRfZGVzY3JpcHRpb249JHdpdGhfYWNjZWxlcmF0aW9uX2Jh
Y2tlbmQKIGlmIHRlc3QgIiR3aXRoX2FjY2VsZXJhdGlvbl9iYWNrZW5kIiA9ICJjbHV0dGVyIjsg
dGhlbgogICAgUEtHX0NIRUNLX01PRFVMRVMoQ0xVVFRFUiwgY2x1dHRlci0xLjAgPj0gJENMVVRU
RVJfUkVRVUlSRURfVkVSU0lPTikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186444</attachid>
            <date>2013-02-04 13:11:40 -0800</date>
            <delta_ts>2013-02-05 13:23:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100261-20130204150819.patch</filename>
            <type>text/plain</type>
            <size>79551</size>
            <attacher name="Jonathon Jongsma (jonner)">jonathon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZmZDU4NGJjNWY3ODQx
YjViMWJmMWJiMmMzNGNiNzQyMWIwMDg3ZC4uYmYxZTkzZWI4OTkyZDE5ZDhjYzBkMTM3YjhiMDI5
NTg4N2RjNzAwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNyBAQAorMjAxMy0wMi0wNCAgSm9u
YXRob24gSm9uZ3NtYSAgPGpvbmF0aG9uLmpvbmdzbWFAY29sbGFib3JhLmNvbT4KKworICAgICAg
ICBbZ3RrXSBjb3JlIGltcGxlbWVudGF0aW9uIGZvciBnZXRVc2VyTWVkaWEgQVBJCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyNjEKKworICAgICAg
ICBSZWZhY3RvciB0aGUgbWVkaWEgcGxheWVyIGltcGxlbWVudGF0aW9uIHNvIHRoYXQgbW9yZSBv
ZiB0aGUKKyAgICAgICAgaW50ZXJuYWwgZnVuY3Rpb25hbGl0eSBjYW4gYmUgc2hhcmVkIGJldHdl
ZW4gdGhlIGN1cnJlbnQgbWVkaWEKKyAgICAgICAgYmFja2VuZCBhbmQgdGhlIG1lZGlhc3RyZWFt
IHBsYXllciBiYWNrZW5kLiAgQ29tbW9uIGNvZGUgaXMKKyAgICAgICAgYnJva2VuIG91dCBpbnRv
IGEgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSBjbGFzcywgYW5kCisgICAgICAgIGJv
dGggTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIGFuZAorICAgICAgICBTdHJlYW1NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIgaW5oZXJpdCBmcm9tIHRoaXMgYmFzZSBjbGFzcy4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
c2luY2UgZnVuY3Rpb25hbGl0eSBpcyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIG1lZGlhIHRlc3RzCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5zdGFsbGVkTWVkaWFFbmdpbmVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlckdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR1N0cmVhbWVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RnVsbHNj
cmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcjo6RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdT
dHJlYW1lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0Z1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6On5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaDoKKyAg
ICAgICAgKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmlzTGl2ZVN0cmVhbSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Uu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z3JlYXRl
c3RDb21tb25EaXZpc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhUGxheWVyUHJpdmF0ZVZv
bHVtZUNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjptZWRpYVBsYXllclByaXZh
dGVWb2x1bWVDaGFuZ2VUaW1lb3V0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFQ
bGF5ZXJQcml2YXRlTXV0ZUNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjptZWRp
YVBsYXllclByaXZhdGVNdXRlQ2hhbmdlVGltZW91dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6Om1lZGlhUGxheWVyUHJpdmF0ZVJlcGFpbnRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6On5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5hdHVyYWxTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnNldFZvbHVtZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp2b2x1
bWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6
bm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6dm9sdW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuZXR3b3JrU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cmVhZHlTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzaXpl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjptdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjpub3RpZnlQbGF5ZXJPZk11dGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bXV0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6dHJpZ2dlclJlcGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpw
YWludCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
OjplbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c3VwcG9ydHNGdWxsc2NyZWVuKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnBsYXRmb3JtTWVkaWEp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bW92
aWVMb2FkVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpjcmVhdGVWaWRlb1NpbmspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0U3RyZWFtVm9sdW1lRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpkZWNvZGVkRnJhbWVDb3Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpk
cm9wcGVkRnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjphdWRpb0RlY29kZWRCeXRlQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6dmlkZW9EZWNvZGVkQnl0ZUNvdW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzdXBwb3J0c011dGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRWaXNpYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Omhhc1NpbmdsZVNl
Y3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6Om1heFRpbWVMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZTo6Y2FuRW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om1lZGlhUGxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmF1ZGlvU2luayk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1N0cmVhbU1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OlN0cmVhbU1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6On5TdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpw
bGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6cGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpoYXNWaWRlbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Omhhc0F1ZGlvKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmVhbU1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRpbmdGYWlsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRMb2FkaW5nUHJvZ3Jl
c3MpOgorICAgICAgICAoV2ViQ29yZTo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjppbnRlcm5hbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmVhbU1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmVhbU1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmdldFN1cHBvcnRlZFR5
cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmVhbU1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6aXNBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U3RyZWFtTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VDaGFuZ2VkU3RhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9TdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFN0cmVhbU1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNhbmNlbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3Ry
ZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcmVwYXJlVG9QbGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZHVyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjdXJy
ZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnNlZWspOgorICAgICAgICAoV2ViQ29yZTo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpzZWVraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmVhbU1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFByZXNlcnZlc1BpdGNoKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFzQ2xvc2Vk
Q2FwdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6U3Ry
ZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptYXhUaW1lU2Vla2FibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpidWZmZXJlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRv
dGFsQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpieXRlc0xvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHJlYW1NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmNhbkxvYWRQb3N0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3Ry
ZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQb3N0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppc0xpdmVTdHJlYW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVy
R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6
OkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGspOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmg6CisgICAgICAgIChGdWxsc2Ny
ZWVuVmlkZW9Db250cm9sbGVyR3RrKToKKwogMjAxMy0wMi0wNCAgVG9tIFNlcGV6ICA8dHNlcGV6
QGNocm9taWl1bS5vcmc+CiAKICAgICAgICAgWFNTIEF1ZGl0b3IgYnlwYXNzIHZpYSBzdmcgdGFn
cyBhbmQgeGxpbms6aHJlZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMTczMTY1
NTA1NjJiNzI1NjNlMGViNDJmMTJkNDI4ZWRkOWFiNWQwYi4uNGJlYjcyZWZmMjIzMmYxMDY2MzA2
YmYxYjA3N2NmNDg4NDcwZmJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC02
MDc1LDggKzYwNzUsMTIgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyR1dvcmxkLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJv
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdl
R1N0cmVhbWVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2UuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBcCisJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1N0cmVhbU1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9TdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtVmlkZW9XaW5kb3dHdGsu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZv
cm1WaWRlb1dpbmRvdy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmlu
ZGV4IDViMTY4ZDM5OWYyMTE4OGFhOTUzNzY3MDNlMDIyY2NjZWZjMmE3YWEuLmUxOGJkYjUyNmE3
Mzk0NTVjNTViZThiMzJiNWMwNDk1YTIwOGM1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CkBAIC0xMjEsNiArMTIxLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lvbmluZy5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0Zm9ybVZpZGVv
V2luZG93RWZsLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtH
U3RyZWFtZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBlOGY2ZmMxNjJkMzk5NDVjNDQxYjBlNmM0Mjk5
MzBkY2FkN2QwYjY1Li4yN2U1MjllNmU0NzllODBkZjUwZGVkYzQyZDBmZjU0MWI5MzBlOGQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKQEAgLTMzNTAsNiArMzM1MCw3IEBAIGVuYWJsZT8oVklERU8pIHsKICAgICB9
IGVsc2U6IHVzZT8oR1NUUkVBTUVSKSB7CiAgICAgICAgIEhFQURFUlMgKz0gXAogICAgICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckdXb3JsZC5oIFwKKyAgICAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlLmggXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIFwKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCBcCiAgICAgICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmggXApAQCAtMzM1
OCw2ICszMzU5LDcgQEAgZW5hYmxlPyhWSURFTykgewogICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmgKICAgICAgICAgU09VUkNFUyArPSBcCiAg
ICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyR1dvcmxkLmNw
cCBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZS5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgXAogICAgICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgXAogICAg
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJl
YW1lci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXIuY3BwCmluZGV4IDRiNzA0YWIwNTkzOWU3ODVmMTI3M2Q1NWY3ZTBhNWYyMTMzNWEwNWEu
LjdjNDFjMzRhZThmZGFmMjk4ZWU1MzA1NGIzZDY3ODVmNmU5N2VjNzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTUwLDYgKzUw
LDkgQEAKIAogI2lmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmgiCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNpbmNsdWRlICJTdHJlYW1N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCIKKyNlbmRpZgogI2RlZmluZSBQbGF0Zm9ybU1l
ZGlhRW5naW5lQ2xhc3NOYW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcgogI2VuZGlmCiAK
QEAgLTIxOCw2ICsyMjEsMTAgQEAgc3RhdGljIFZlY3RvcjxNZWRpYVBsYXllckZhY3RvcnkqPiYg
aW5zdGFsbGVkTWVkaWFFbmdpbmVzKFJlcXVlcnlFbmdpbmVPcHRpb25zIHIKICAgICBpZiAoIWVu
Z2luZXNRdWVyaWVkKSB7CiAgICAgICAgIGVuZ2luZXNRdWVyaWVkID0gdHJ1ZTsKIAorI2lmIFVT
RShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgICAgIFN0cmVhbU1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2lu
ZSk7CisjZW5kaWYKKwogI2lmIFVTRShBVkZPVU5EQVRJT04pCiAgICAgICAgIGlmIChTZXR0aW5n
czo6aXNBVkZvdW5kYXRpb25FbmFibGVkKCkpIHsKICNpZiBQTEFURk9STShNQUMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRnVsbHNjcmVl
blZpZGVvQ29udHJvbGxlckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lci5jcHAK
aW5kZXggOWI4NjAwN2NmM2ExODc3OWQ2ZTRkM2I4OTM2ZmU0ZTQxMDMzNjQzMC4uN2NmMWEzMWM1
ODNjYjBiMjQzZGMyNTlmM2E5N2NiYmE4Y2FmMGNiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJH
U3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyLmNwcApAQCAtMjksNyArMjks
NyBAQAogCiAjaW5jbHVkZSAiR1N0cmVhbWVyR1dvcmxkLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5
ZXIuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRl
ICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgiCiAjaW5jbHVkZSA8Z3N0L2dzdC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNDgsNyArNDgsNyBAQCB2b2lk
IHBsYXllck11dGVDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCAqZWxlbWVudCwgR1BhcmFtU3BlYyAq
cHNwZWMsIEZ1bGxzY3JlZW5WaQogICAgIGNvbnRyb2xsZXItPm11dGVDaGFuZ2VkKCk7CiB9CiAK
LVBhc3NPd25QdHI8RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcj4gRnVsbHNjcmVl
blZpZGVvQ29udHJvbGxlckdTdHJlYW1lcjo6Y3JlYXRlKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lciogcGxheWVyKQorUGFzc093blB0cjxGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVh
bWVyPiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyOjpjcmVhdGUoTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyKQogewogI2lmIFBMQVRGT1JNKEdUSykKICAg
IHJldHVybiBhZG9wdFB0cihuZXcgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayhwbGF5ZXIp
KTsKQEAgLTU3LDcgKzU3LDcgQEAgUGFzc093blB0cjxGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVy
R1N0cmVhbWVyPiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWUKICNlbmRpZgogfQog
Ci1GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyOjpGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR1N0cmVhbWVyKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQorRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcjo6RnVsbHNjcmVlblZpZGVvQ29udHJvbGxl
ckdTdHJlYW1lcihNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIpCiAgICAg
OiBtX3BsYXllcihwbGF5ZXIpCiAgICAgLCBtX2NsaWVudChwbGF5ZXItPm1lZGlhUGxheWVyKCkt
Pm1lZGlhUGxheWVyQ2xpZW50KCkpCiAgICAgLCBtX2dzdHJlYW1lckdXb3JsZChwbGF5ZXItPnBs
YXRmb3JtTWVkaWEoKS5tZWRpYS5nc3RyZWFtZXJHV29ybGQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRnVsbHNjcmVlblZpZGVvQ29udHJv
bGxlckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIuaAppbmRleCA0ODQ0YzdmYzg5
ZTY5ZGMxZTMwNjEwZWFkZTY1NDE1MTFkMDg0MzMyLi44MzI3NTAwZDhmZDI0ZGJmNjVhZGViOWEz
NGNiYWRiOTY3NTI5YmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9GdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR1N0cmVhbWVyLmgKQEAgLTI5LDE0ICsyOSwxNCBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBHU3RyZWFtZXJHV29ybGQ7Ci1jbGFzcyBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI7CitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOwogY2xh
c3MgTWVkaWFQbGF5ZXJDbGllbnQ7CiAKIGNsYXNzIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJH
U3RyZWFtZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZ1bGxzY3JlZW5WaWRlb0NvbnRy
b2xsZXJHU3RyZWFtZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEZ1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXI+IGNyZWF0ZShNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIqIHBsYXllcik7Ci0gICAgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcihN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxGdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyPiBjcmVhdGUoTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZSogcGxheWVyKTsKKyAgICBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0
cmVhbWVyKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqKTsKICAgICB2aXJ0dWFsIH5G
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyKCk7CiAKICAgICB2b2lkIGVudGVyRnVs
bHNjcmVlbigpOwpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgU3Ry
aW5nIHRpbWVUb1N0cmluZyhmbG9hdCB0aW1lKTsKIAotICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lciogbV9wbGF5ZXI7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSog
bV9wbGF5ZXI7CiAgICAgTWVkaWFQbGF5ZXJDbGllbnQqIG1fY2xpZW50OwogICAgIEdTdHJlYW1l
ckdXb3JsZCogbV9nc3RyZWFtZXJHV29ybGQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggMTYxNmY5MTMxZmM2YjViNzA1OWYyYzI4ZTI4
OWM0NzVlYmJmYzNkMi4uMjQxYzMyYzllN2E4ZmQzZjY2NmU0MzQ2MTMxNDU0YjliOWExZmMwYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAg
LTI2LDQxICsyNiwyMCBAQAogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQog
Ci0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJGdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSAiR1N0cmVhbWVyR1dvcmxkLmgi
CiAjaW5jbHVkZSAiR1N0cmVhbWVyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyVmVy
c2lvbmluZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZUdTdHJlYW1lci5oIgotI2luY2x1ZGUgIkltYWdl
T3JpZW50YXRpb24uaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgog
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5j
bHVkZSAiTWVkaWFQbGF5ZXIuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgotI2luY2x1ZGUg
IlZpZGVvU2lua0dTdHJlYW1lci5oIgogI2luY2x1ZGUgIldlYktpdFdlYlNvdXJjZUdTdHJlYW1l
ci5oIgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4K
ICNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLSNpZmRlZiBH
U1RfQVBJX1ZFUlNJT05fMQotI2luY2x1ZGUgPGdzdC9hdWRpby9zdHJlYW12b2x1bWUuaD4KLSNl
bHNlCi0jaW5jbHVkZSA8Z3N0L2ludGVyZmFjZXMvc3RyZWFtdm9sdW1lLmg+Ci0jZW5kaWYKLQog
Ly8gR3N0UGxheUZsYWdzIGZsYWdzIGZyb20gcGxheWJpbjIuIEl0IGlzIHRoZSBwb2xpY3kgb2Yg
R1N0cmVhbWVyIHRvCiAvLyBub3QgcHVibGljbHkgZXhwb3NlIGVsZW1lbnQtc3BlY2lmaWMgZW51
bXMuIFRoYXQncyB3aHkgdGhpcwogLy8gR3N0UGxheUZsYWdzIGVudW0gaGFzIGJlZW4gY29waWVk
IGhlcmUuCkBAIC05NiwxNyArNzUsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbnQgZ3JlYXRlc3RDb21tb25EaXZpc29yKGludCBhLCBp
bnQgYikKLXsKLSAgICB3aGlsZSAoYikgewotICAgICAgICBpbnQgdGVtcCA9IGE7Ci0gICAgICAg
IGEgPSBiOwotICAgICAgICBiID0gdGVtcCAlIGI7Ci0gICAgfQotCi0gICAgcmV0dXJuIEFCUyhh
KTsKLX0KLQogc3RhdGljIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZU1lc3NhZ2VDYWxsYmFj
ayhHc3RCdXMqLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIqIHBsYXllcikKIHsKICAgICByZXR1cm4gcGxheWVyLT5oYW5kbGVNZXNzYWdlKG1lc3NhZ2Up
OwpAQCAtMTE3LDMyICs4NSw2IEBAIHN0YXRpYyB2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZVNvdXJj
ZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyosIE1lZGlhCiAgICAgcGxheWVy
LT5zb3VyY2VDaGFuZ2VkKCk7CiB9CiAKLXN0YXRpYyB2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZVZv
bHVtZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyosIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lciogcGxheWVyKQotewotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gcGxh
eWJpbiByZWNlaXZlcyB0aGUgbm90aWZ5Ojp2b2x1bWUgc2lnbmFsLgotICAgIHBsYXllci0+dm9s
dW1lQ2hhbmdlZCgpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlVm9s
dW1lQ2hhbmdlVGltZW91dENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxh
eWVyKQotewotICAgIC8vIFRoaXMgaXMgdGhlIGNhbGxiYWNrIG9mIHRoZSB0aW1lb3V0IHNvdXJj
ZSBjcmVhdGVkIGluIDo6dm9sdW1lQ2hhbmdlZC4KLSAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9m
Vm9sdW1lQ2hhbmdlKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBtZWRp
YVBsYXllclByaXZhdGVNdXRlQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCi17Ci0gICAgLy8gVGhpcyBpcyBj
YWxsZWQgd2hlbiBwbGF5YmluIHJlY2VpdmVzIHRoZSBub3RpZnk6Om11dGUgc2lnbmFsLgotICAg
IHBsYXllci0+bXV0ZUNoYW5nZWQoKTsKLX0KLQotc3RhdGljIGdib29sZWFuIG1lZGlhUGxheWVy
UHJpdmF0ZU11dGVDaGFuZ2VUaW1lb3V0Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKiBwbGF5ZXIpCi17Ci0gICAgLy8gVGhpcyBpcyB0aGUgY2FsbGJhY2sgb2YgdGhlIHRpbWVv
dXQgc291cmNlIGNyZWF0ZWQgaW4gOjptdXRlQ2hhbmdlZC4KLSAgICBwbGF5ZXItPm5vdGlmeVBs
YXllck9mTXV0ZSgpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQogc3RhdGljIHZvaWQgbWVkaWFQ
bGF5ZXJQcml2YXRlVmlkZW9TaW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFt
U3BlYyosIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQogewogICAgIHBsYXll
ci0+dmlkZW9DaGFuZ2VkKCk7CkBAIC0xNzIsMTEgKzExNCw2IEBAIHN0YXRpYyBnYm9vbGVhbiBt
ZWRpYVBsYXllclByaXZhdGVWaWRlb0NoYW5nZVRpbWVvdXRDYWxsYmFjayhNZWRpYVBsYXllclBy
aXZhdGVHCiAgICAgcmV0dXJuIEZBTFNFOwogfQogCi1zdGF0aWMgdm9pZCBtZWRpYVBsYXllclBy
aXZhdGVSZXBhaW50Q2FsbGJhY2soV2ViS2l0VmlkZW9TaW5rKiwgR3N0QnVmZmVyICpidWZmZXIs
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyUHJpdmF0ZSkKLXsKLSAgICBwbGF5
ZXJQcml2YXRlLT50cmlnZ2VyUmVwYWludChidWZmZXIpOwotfQotCiBQYXNzT3duUHRyPE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZT4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVh
dGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcihwbGF5ZXIpKTsKQEAgLTIxMiwxOSArMTQ5LDEzIEBAIGJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppc0F2YWlsYWJsZSgpCiB9CiAKIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKE1lZGlh
UGxheWVyKiBwbGF5ZXIpCi0gICAgOiBtX3BsYXllcihwbGF5ZXIpCi0gICAgLCBtX3dlYmtpdFZp
ZGVvU2luaygwKQotICAgICwgbV9mcHNTaW5rKDApCisgICAgOiBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlKHBsYXllcikKICAgICAsIG1fc291cmNlKDApCiAgICAgLCBtX3NlZWtUaW1l
KDApCiAgICAgLCBtX2NoYW5naW5nUmF0ZShmYWxzZSkKICAgICAsIG1fZW5kVGltZShudW1lcmlj
X2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkpCiAgICAgLCBtX2lzRW5kUmVhY2hlZChmYWxzZSkK
LSAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpFbXB0eSkKLSAgICAsIG1fcmVhZHlT
dGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCiAgICAgLCBtX2lzU3RyZWFtaW5nKGZhbHNl
KQotICAgICwgbV9zaXplKEludFNpemUoKSkKLSAgICAsIG1fYnVmZmVyKDApCiAgICAgLCBtX21l
ZGlhTG9jYXRpb25zKDApCiAgICAgLCBtX21lZGlhTG9jYXRpb25DdXJyZW50SW5kZXgoMCkKICAg
ICAsIG1fcmVzZXRQaXBlbGluZShmYWxzZSkKQEAgLTI0Miw4ICsxNzMsNiBAQCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcihNZWRpYVBsYXll
ciogcGxheWVyKQogICAgICwgbV9kZWxheWluZ0xvYWQoZmFsc2UpCiAgICAgLCBtX21lZGlhRHVy
YXRpb25Lbm93bih0cnVlKQogICAgICwgbV9tYXhUaW1lTG9hZGVkQXRMYXN0RGlkTG9hZGluZ1By
b2dyZXNzKDApCi0gICAgLCBtX3ZvbHVtZVRpbWVySGFuZGxlcigwKQotICAgICwgbV9tdXRlVGlt
ZXJIYW5kbGVyKDApCiAgICAgLCBtX2hhc1ZpZGVvKGZhbHNlKQogICAgICwgbV9oYXNBdWRpbyhm
YWxzZSkKICAgICAsIG1fYXVkaW9UaW1lckhhbmRsZXIoMCkKQEAgLTI2MCw0MiArMTg5LDI3IEBA
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cigpCiAgICAgaWYgKG1fZmlsbFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fZmlsbFRpbWVy
LnN0b3AoKTsKIAotICAgIGlmIChtX2J1ZmZlcikKLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiht
X2J1ZmZlcik7Ci0gICAgbV9idWZmZXIgPSAwOwotCiAgICAgaWYgKG1fbWVkaWFMb2NhdGlvbnMp
IHsKICAgICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlKG1fbWVkaWFMb2NhdGlvbnMpOwogICAgICAg
ICBtX21lZGlhTG9jYXRpb25zID0gMDsKICAgICB9CiAKLSNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JF
RU5fVklERU8pCi0gICAgaWYgKG1fZnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcikKLSAgICAgICAg
ZXhpdEZ1bGxzY3JlZW4oKTsKLQotICAgIGlmIChtX3ZpZGVvU2lua0JpbikgewotICAgICAgICBn
c3Rfb2JqZWN0X3VucmVmKG1fdmlkZW9TaW5rQmluKTsKLSAgICAgICAgbV92aWRlb1NpbmtCaW4g
PSAwOwotICAgIH0KLSNlbmRpZgotCiAgICAgaWYgKG1fcGxheUJpbikgewogICAgICAgICBHUmVm
UHRyPEdzdEJ1cz4gYnVzID0gd2Via2l0R3N0UGlwZWxpbmVHZXRCdXMoR1NUX1BJUEVMSU5FKG1f
cGxheUJpbi5nZXQoKSkpOwogICAgICAgICBBU1NFUlQoYnVzKTsKICAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKGJ1cy5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxn
cG9pbnRlcj4obWVkaWFQbGF5ZXJQcml2YXRlTWVzc2FnZUNhbGxiYWNrKSwgdGhpcyk7CiAgICAg
ICAgIGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaChidXMuZ2V0KCkpOwogCisgICAgICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3BsYXlCaW4uZ2V0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KG1lZGlhUGxheWVyUHJpdmF0ZVNvdXJjZUNoYW5nZWRDYWxs
YmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1
bmMobV9wbGF5QmluLmdldCgpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihtZWRpYVBsYXll
clByaXZhdGVWaWRlb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9wbGF5QmluLmdldCgpLCByZWludGVycHJldF9j
YXN0PGdwb2ludGVyPihtZWRpYVBsYXllclByaXZhdGVBdWRpb0NoYW5nZWRDYWxsYmFjayksIHRo
aXMpOworCiAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4uZ2V0KCksIEdT
VF9TVEFURV9OVUxMKTsKLSAgICAgICAgbV9wbGF5QmluID0gMDsKKyAgICAgICAgbV9wbGF5Qmlu
LmNsZWFyKCk7CiAgICAgfQogCi0gICAgbV9wbGF5ZXIgPSAwOwotCi0gICAgaWYgKG1fbXV0ZVRp
bWVySGFuZGxlcikKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fbXV0ZVRpbWVySGFuZGxlcik7
Ci0KLSAgICBpZiAobV92b2x1bWVUaW1lckhhbmRsZXIpCi0gICAgICAgIGdfc291cmNlX3JlbW92
ZShtX3ZvbHVtZVRpbWVySGFuZGxlcik7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHZpZGVvU2lua1Bh
ZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3dlYmtpdFZpZGVvU2lu
ay5nZXQoKSwgInNpbmsiKSk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9m
dW5jKHZpZGVvU2lua1BhZC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4obWVkaWFQ
bGF5ZXJQcml2YXRlVmlkZW9TaW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogCiAgICAg
aWYgKG1fdmlkZW9UaW1lckhhbmRsZXIpCiAgICAgICAgIGdfc291cmNlX3JlbW92ZShtX3ZpZGVv
VGltZXJIYW5kbGVyKTsKQEAgLTU3Miw2NiArNDg2LDYgQEAgYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnNlZWtpbmcoKSBjb25zdAogICAgIHJldHVybiBtX3NlZWtpbmc7CiB9CiAK
LS8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHZpZGVvCi1JbnRTaXplIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUoKSBjb25zdAotewotICAgIGlmICghaGFzVmlkZW8o
KSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIGlmICghbV92aWRlb1NpemUuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gbV92aWRlb1NpemU7Ci0KLSAgICBHUmVmUHRyPEdzdENh
cHM+IGNhcHMgPSB3ZWJraXRHc3RHZXRQYWRDYXBzKG1fdmlkZW9TaW5rUGFkLmdldCgpKTsKLSAg
ICBpZiAoIWNhcHMpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLQotICAgIC8vIFRPRE86
IGhhbmRsZSBwb3NzaWJsZSBjbGVhbiBhcGVydHVyZSBkYXRhLiBTZWUKLSAgICAvLyBodHRwczov
L2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2NTcxCi0gICAgLy8gVE9ETzog
aGFuZGxlIHBvc3NpYmxlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4gU2VlCi0gICAgLy8gaHR0cHM6
Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU5NjMyNgotCi0gICAgLy8gR2V0
IHRoZSB2aWRlbyBQQVIgYW5kIG9yaWdpbmFsIHNpemUsIGlmIHRoaXMgZmFpbHMgdGhlCi0gICAg
Ly8gdmlkZW8tc2luayBoYXMgbGlrZWx5IG5vdCB5ZXQgbmVnb3RpYXRlZCBpdHMgY2Fwcy4KLSAg
ICBpbnQgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5h
dG9yLCBzdHJpZGU7Ci0gICAgSW50U2l6ZSBvcmlnaW5hbFNpemU7Ci0gICAgR3N0VmlkZW9Gb3Jt
YXQgZm9ybWF0OwotICAgIGlmICghZ2V0VmlkZW9TaXplQW5kRm9ybWF0RnJvbUNhcHMoY2Fwcy5n
ZXQoKSwgb3JpZ2luYWxTaXplLCBmb3JtYXQsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBp
eGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciwgc3RyaWRlKSkKLSAgICAgICAgcmV0dXJuIEludFNp
emUoKTsKLQotICAgIExPR19NRURJQV9NRVNTQUdFKCJPcmlnaW5hbCB2aWRlbyBzaXplOiAlZHgl
ZCIsIG9yaWdpbmFsU2l6ZS53aWR0aCgpLCBvcmlnaW5hbFNpemUuaGVpZ2h0KCkpOwotICAgIExP
R19NRURJQV9NRVNTQUdFKCJQaXhlbCBhc3BlY3QgcmF0aW86ICVkLyVkIiwgcGl4ZWxBc3BlY3RS
YXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKTsKLQotICAgIC8vIENh
bGN1bGF0ZSBEQVIgYmFzZWQgb24gUEFSIGFuZCB2aWRlbyBzaXplLgotICAgIGludCBkaXNwbGF5
V2lkdGggPSBvcmlnaW5hbFNpemUud2lkdGgoKSAqIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3I7
Ci0gICAgaW50IGRpc3BsYXlIZWlnaHQgPSBvcmlnaW5hbFNpemUuaGVpZ2h0KCkgKiBwaXhlbEFz
cGVjdFJhdGlvRGVub21pbmF0b3I7Ci0KLSAgICAvLyBEaXZpZGUgZGlzcGxheSB3aWR0aCBhbmQg
aGVpZ2h0IGJ5IHRoZWlyIEdDRCB0byBhdm9pZCBwb3NzaWJsZSBvdmVyZmxvd3MuCi0gICAgaW50
IGRpc3BsYXlBc3BlY3RSYXRpb0dDRCA9IGdyZWF0ZXN0Q29tbW9uRGl2aXNvcihkaXNwbGF5V2lk
dGgsIGRpc3BsYXlIZWlnaHQpOwotICAgIGRpc3BsYXlXaWR0aCAvPSBkaXNwbGF5QXNwZWN0UmF0
aW9HQ0Q7Ci0gICAgZGlzcGxheUhlaWdodCAvPSBkaXNwbGF5QXNwZWN0UmF0aW9HQ0Q7Ci0KLSAg
ICAvLyBBcHBseSBEQVIgdG8gb3JpZ2luYWwgdmlkZW8gc2l6ZS4gVGhpcyBpcyB0aGUgc2FtZSBi
ZWhhdmlvciBhcyBpbiB4dmltYWdlc2luaydzIHNldGNhcHMgZnVuY3Rpb24uCi0gICAgZ3VpbnQ2
NCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgaWYgKCEob3JpZ2luYWxTaXplLmhlaWdodCgp
ICUgZGlzcGxheUhlaWdodCkpIHsKLSAgICAgICAgTE9HX01FRElBX01FU1NBR0UoIktlZXBpbmcg
dmlkZW8gb3JpZ2luYWwgaGVpZ2h0Iik7Ci0gICAgICAgIHdpZHRoID0gZ3N0X3V0aWxfdWludDY0
X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0KCksIGRpc3BsYXlXaWR0aCwgZGlzcGxheUhl
aWdodCk7Ci0gICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6
ZS5oZWlnaHQoKSk7Ci0gICAgfSBlbHNlIGlmICghKG9yaWdpbmFsU2l6ZS53aWR0aCgpICUgZGlz
cGxheVdpZHRoKSkgewotICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgiS2VlcGluZyB2aWRlbyBv
cmlnaW5hbCB3aWR0aCIpOwotICAgICAgICBoZWlnaHQgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVf
aW50KG9yaWdpbmFsU2l6ZS53aWR0aCgpLCBkaXNwbGF5SGVpZ2h0LCBkaXNwbGF5V2lkdGgpOwot
ICAgICAgICB3aWR0aCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS53aWR0aCgp
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgiQXBwcm94aW1hdGlu
ZyB3aGlsZSBrZWVwaW5nIG9yaWdpbmFsIHZpZGVvIGhlaWdodCIpOwotICAgICAgICB3aWR0aCA9
IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxTaXplLmhlaWdodCgpLCBkaXNwbGF5
V2lkdGgsIGRpc3BsYXlIZWlnaHQpOwotICAgICAgICBoZWlnaHQgPSBzdGF0aWNfY2FzdDxndWlu
dDY0PihvcmlnaW5hbFNpemUuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIExPR19NRURJQV9NRVNT
QUdFKCJOYXR1cmFsIHNpemU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgInglIiBHX0dVSU5UNjRfRk9S
TUFULCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBtX3ZpZGVvU2l6ZSA9IEludFNpemUoc3RhdGljX2Nh
c3Q8aW50Pih3aWR0aCksIHN0YXRpY19jYXN0PGludD4oaGVpZ2h0KSk7Ci0gICAgcmV0dXJuIG1f
dmlkZW9TaXplOwotfQotCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9D
aGFuZ2VkKCkKIHsKICAgICBpZiAobV92aWRlb1RpbWVySGFuZGxlcikKQEAgLTY3Miw0NSArNTI2
LDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mQXVk
aW8oKQogICAgIG1fcGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllckVuZ2lu
ZVVwZGF0ZWQobV9wbGF5ZXIpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKLXsKLSAgICBpZiAoIW1fcGxheUJpbikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZ3N0X3N0cmVhbV92b2x1bWVfc2V0X3ZvbHVtZShHU1RfU1RSRUFN
X1ZPTFVNRShtX3BsYXlCaW4uZ2V0KCkpLCBHU1RfU1RSRUFNX1ZPTFVNRV9GT1JNQVRfQ1VCSUMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KHZv
bHVtZSkpOwotfQotCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZvbHVtZSgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BsYXlCaW4pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIGdzdF9zdHJlYW1fdm9sdW1lX2dldF92b2x1bWUoR1NUX1NUUkVBTV9WT0xVTUUobV9w
bGF5QmluLmdldCgpKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0NVQklDKTsKLX0KLQotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdl
KCkKLXsKLSAgICBtX3ZvbHVtZVRpbWVySGFuZGxlciA9IDA7Ci0KLSAgICBpZiAoIW1fcGxheWVy
IHx8ICFtX3BsYXlCaW4pCi0gICAgICAgIHJldHVybjsKLSAgICBkb3VibGUgdm9sdW1lOwotICAg
IHZvbHVtZSA9IGdzdF9zdHJlYW1fdm9sdW1lX2dldF92b2x1bWUoR1NUX1NUUkVBTV9WT0xVTUUo
bV9wbGF5QmluLmdldCgpKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0NVQklDKTsKLSAgICAv
LyBnZXRfdm9sdW1lKCkgY2FuIHJldHVybiB2YWx1ZXMgc3VwZXJpb3IgdG8gMS4wIGlmIHRoZSB1
c2VyCi0gICAgLy8gYXBwbGllcyBzb2Z0d2FyZSB1c2VyIGdhaW4gdmlhIHRoaXJkIHBhcnR5IGFw
cGxpY2F0aW9uIChHTk9NRQotICAgIC8vIHZvbHVtZSBjb250cm9sIGZvciBpbnN0YW5jZSkuCi0g
ICAgdm9sdW1lID0gQ0xBTVAodm9sdW1lLCAwLjAsIDEuMCk7Ci0gICAgbV9wbGF5ZXItPnZvbHVt
ZUNoYW5nZWQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZvbHVtZSkpOwotfQotCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dm9sdW1lQ2hhbmdlZCgpCi17Ci0gICAgaWYgKG1fdm9sdW1l
VGltZXJIYW5kbGVyKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV92b2x1bWVUaW1lckhhbmRs
ZXIpOwotICAgIG1fdm9sdW1lVGltZXJIYW5kbGVyID0gZ190aW1lb3V0X2FkZCgwLCByZWludGVy
cHJldF9jYXN0PEdTb3VyY2VGdW5jPihtZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2VUaW1l
b3V0Q2FsbGJhY2spLCB0aGlzKTsKLX0KLQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnNldFJhdGUoZmxvYXQgcmF0ZSkKIHsKICAgICAvLyBBdm9pZCB1c2VsZXNzIHBsYXliYWNr
IHJhdGUgdXBkYXRlLgpAQCAtNzc1LDE2ICs1OTAsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6c2V0UHJlc2VydmVzUGl0Y2goYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKICAgICBt
X3ByZXNlcnZlc1BpdGNoID0gcHJlc2VydmVzUGl0Y2g7CiB9CiAKLU1lZGlhUGxheWVyOjpOZXR3
b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXR3b3JrU3RhdGUoKSBjb25z
dAotewotICAgIHJldHVybiBtX25ldHdvcmtTdGF0ZTsKLX0KLQotTWVkaWFQbGF5ZXI6OlJlYWR5
U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVN0YXRlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9yZWFkeVN0YXRlOwotfQotCiBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YnVmZmVyZWQoKSBjb25zdAogewogICAgIFJlZlB0
cjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gVGltZVJhbmdlczo6Y3JlYXRlKCk7CkBAIC0xMTE0
LDQ2ICs5MTksNiBAQCB1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRvdGFs
Qnl0ZXMoKSBjb25zdAogICAgIHJldHVybiBtX3RvdGFsQnl0ZXM7CiB9CiAKLXVuc2lnbmVkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGVjb2RlZEZyYW1lQ291bnQoKSBjb25zdAotewot
ICAgIGd1aW50NjQgZGVjb2RlZEZyYW1lcyA9IDA7Ci0gICAgaWYgKG1fZnBzU2luaykKLSAgICAg
ICAgZ19vYmplY3RfZ2V0KG1fZnBzU2luaywgImZyYW1lcy1yZW5kZXJlZCIsICZkZWNvZGVkRnJh
bWVzLCBOVUxMKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlY29kZWRGcmFt
ZXMpOwotfQotCi11bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRyb3BwZWRG
cmFtZUNvdW50KCkgY29uc3QKLXsKLSAgICBndWludDY0IGZyYW1lc0Ryb3BwZWQgPSAwOwotICAg
IGlmIChtX2Zwc1NpbmspCi0gICAgICAgIGdfb2JqZWN0X2dldChtX2Zwc1NpbmssICJmcmFtZXMt
ZHJvcHBlZCIsICZmcmFtZXNEcm9wcGVkLCBOVUxMKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGZyYW1lc0Ryb3BwZWQpOwotfQotCi11bnNpZ25lZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmF1ZGlvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0Ci17Ci0gICAgR3N0UXVl
cnkqIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbihHU1RfRk9STUFUX0JZVEVTKTsKLSAg
ICBnaW50NjQgcG9zaXRpb24gPSAwOwotCi0gICAgaWYgKG1fd2Via2l0QXVkaW9TaW5rICYmIGdz
dF9lbGVtZW50X3F1ZXJ5KG1fd2Via2l0QXVkaW9TaW5rLmdldCgpLCBxdWVyeSkpCi0gICAgICAg
IGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKLQotICAgIGdz
dF9xdWVyeV91bnJlZihxdWVyeSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihw
b3NpdGlvbik7Ci19Ci0KLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlk
ZW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3QKLXsKLSAgICBHc3RRdWVyeSogcXVlcnkgPSBnc3Rf
cXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRfQllURVMpOwotICAgIGdpbnQ2NCBwb3NpdGlv
biA9IDA7Ci0KLSAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkobV93ZWJraXRWaWRlb1NpbmssIHF1
ZXJ5KSkKLSAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRp
b24pOwotCi0gICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHBvc2l0aW9uKTsKLX0KLQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnVwZGF0ZUF1ZGlvU2luaygpCiB7CiAgICAgaWYgKCFtX3BsYXlCaW4pCkBAIC0xMTY2
LDYgKzkzMSwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlQXVk
aW9TaW5rKCkKIAogfQogCitHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmF1ZGlvU2luaygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2Via2l0QXVkaW9TaW5rLmdldCgp
OworfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlQ2hhbmdlZCgp
CiB7CkBAIC0xNDcyLDExICsxMjQxLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmxvYWRTdGF0ZUNoYW5nZWQoKQogICAgIHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2l6ZUNoYW5nZWQoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0aW1lQ2hh
bmdlZCgpCiB7CiAgICAgdXBkYXRlU3RhdGVzKCk7CkBAIC0xNTUxLDQ4ICsxMzE1LDYgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uQ2hhbmdlZCgpCiAgICAgfQog
fQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNNdXRpbmcoKSBj
b25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKLXsKLSAgICBpZiAoIW1fcGxheUJpbikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbi5nZXQoKSwgIm11dGUi
LCBtdXRlZCwgTlVMTCk7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpt
dXRlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BsYXlCaW4pCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGJvb2wgbXV0ZWQ7Ci0gICAgZ19vYmplY3RfZ2V0KG1fcGxheUJpbi5nZXQoKSwg
Im11dGUiLCAmbXV0ZWQsIE5VTEwpOwotICAgIHJldHVybiBtdXRlZDsKLX0KLQotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mTXV0ZSgpCi17Ci0gICAgbV9t
dXRlVGltZXJIYW5kbGVyID0gMDsKLQotICAgIGlmICghbV9wbGF5ZXIgfHwgIW1fcGxheUJpbikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2Jvb2xlYW4gbXV0ZWQ7Ci0gICAgZ19vYmplY3RfZ2V0
KG1fcGxheUJpbi5nZXQoKSwgIm11dGUiLCAmbXV0ZWQsIE5VTEwpOwotICAgIG1fcGxheWVyLT5t
dXRlQ2hhbmdlZChzdGF0aWNfY2FzdDxib29sPihtdXRlZCkpOwotfQotCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bXV0ZUNoYW5nZWQoKQotewotICAgIGlmIChtX211dGVUaW1l
ckhhbmRsZXIpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZShtX211dGVUaW1lckhhbmRsZXIpOwot
ICAgIG1fbXV0ZVRpbWVySGFuZGxlciA9IGdfdGltZW91dF9hZGQoMCwgcmVpbnRlcnByZXRfY2Fz
dDxHU291cmNlRnVuYz4obWVkaWFQbGF5ZXJQcml2YXRlTXV0ZUNoYW5nZVRpbWVvdXRDYWxsYmFj
ayksIHRoaXMpOwotfQotCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGlu
Z0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKQogewogICAgIG1fZXJyb3JP
Y2N1cmVkID0gdHJ1ZTsKQEAgLTE2MDYsNDYgKzEzMjgsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVy
cm9yKQogICAgIH0KIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFNp
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3NpemUgPSBzaXplOwotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0VmlzaWJsZShib29sKQotewotfQotCi0K
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0cmlnZ2VyUmVwYWludChHc3RCdWZm
ZXIqIGJ1ZmZlcikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKEdTVF9JU19CVUZGRVIoYnVmZmVy
KSk7Ci0gICAgZ3N0X2J1ZmZlcl9yZXBsYWNlKCZtX2J1ZmZlciwgYnVmZmVyKTsKLSAgICBtX3Bs
YXllci0+cmVwYWludCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewot
ICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghbV9wbGF5ZXItPnZpc2libGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFtX2J1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBz
ID0gd2Via2l0R3N0R2V0UGFkQ2FwcyhtX3ZpZGVvU2lua1BhZC5nZXQoKSk7Ci0gICAgaWYgKCFj
YXBzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdElt
YWdlID0gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKG1fYnVmZmVyLCBjYXBzLmdldCgpKTsK
LSAgICBpZiAoIWdzdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb250ZXh0LT5kcmF3
SW1hZ2UocmVpbnRlcnByZXRfY2FzdDxJbWFnZSo+KGdzdEltYWdlLT5pbWFnZSgpLmdldCgpKSwg
Q29sb3JTcGFjZVNSR0IsCi0gICAgICAgICAgICAgICAgICAgICAgIHJlY3QsIGdzdEltYWdlLT5y
ZWN0KCksIENvbXBvc2l0ZUNvcHksIERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24sIGZhbHNl
KTsKLX0KLQogc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkKIHsKICAgICBp
bml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cygpOwpAQCAtMTc2Nyw2
MiArMTQ0OSw2IEBAIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nCiAgICAgcmV0dXJuIE1lZGlhUGxh
eWVyOjpJc05vdFN1cHBvcnRlZDsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6Omhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjplbnRlckZ1bGxzY3JlZW4oKQotewotICAgIEFTU0VSVCghbV9mdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyKTsKLSAgICBtX2Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIg
PSBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyOjpjcmVhdGUodGhpcyk7Ci0gICAg
aWYgKG1fZnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcikKLSAgICAgICAgbV9mdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyLT5lbnRlckZ1bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmV4aXRGdWxsc2NyZWVuKCkKLXsKLSAgICBpZiAoIW1fZnVsbHNjcmVl
blZpZGVvQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlci0+ZXhpdEZ1bGxzY3JlZW4oKTsKLSAgICBtX2Z1bGxzY3JlZW5WaWRlb0NvbnRy
b2xsZXIucmVsZWFzZSgpOwotfQotI2VuZGlmCi0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdAotewotI2lmIFBMQVRGT1JNKE1BQykg
JiYgIVBMQVRGT1JNKElPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA9PSAx
MDUwCi0gICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS83Mzg5OTQ1PgotICAgIHJldHVybiBmYWxz
ZTsKLSNlbHNlCi0gICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLX0KLQotUGxhdGZvcm1NZWRpYSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXRmb3JtTWVkaWEoKSBjb25zdAotewotI2lm
IFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKLSAgICBQbGF0Zm9ybU1lZGlhIHA7Ci0gICAg
cC50eXBlID0gUGxhdGZvcm1NZWRpYTo6R1N0cmVhbWVyR1dvcmxkVHlwZTsKLSAgICBwLm1lZGlh
LmdzdHJlYW1lckdXb3JsZCA9IG1fZ3N0R1dvcmxkLmdldCgpOwotICAgIHJldHVybiBwOwotI2Vs
c2UKLSAgICByZXR1cm4gTm9QbGF0Zm9ybU1lZGlhOwotI2VuZGlmCi19Ci0KLU1lZGlhUGxheWVy
OjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bW92aWVMb2FkVHlw
ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBNZWRpYVBsYXllcjo6SGF2ZU5v
dGhpbmcpCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6VW5rbm93bjsKLQotICAgIGlmIChp
c0xpdmVTdHJlYW0oKSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpMaXZlU3RyZWFtOwot
Ci0gICAgcmV0dXJuIE1lZGlhUGxheWVyOjpEb3dubG9hZDsKLX0KLQogdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnNldERvd25sb2FkQnVmZmVyaW5nKCkKIHsKICAgICBpZiAoIW1f
cGxheUJpbikKQEAgLTE4OTQsNiArMTUyMCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKCkKICAgICAvLyBnc3RfZWxlbWVudF9mYWN0b3J5X21h
a2UoKSByZXR1cm5zIGEgZmxvYXRpbmcgcmVmZXJlbmNlIHNvCiAgICAgLy8gd2Ugc2hvdWxkIG5v
dCBhZG9wdC4KICAgICBtX3BsYXlCaW4gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoZ1BsYXli
aW5OYW1lLCAicGxheSIpOworICAgIHNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR1NUX1NUUkVBTV9W
T0xVTUUobV9wbGF5QmluLmdldCgpKSk7CiAKICAgICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gd2Vi
a2l0R3N0UGlwZWxpbmVHZXRCdXMoR1NUX1BJUEVMSU5FKG1fcGxheUJpbi5nZXQoKSkpOwogICAg
IGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaChidXMuZ2V0KCkpOwpAQCAtMTkwMSwxMDMgKzE1Mjgs
MTUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4o
KQogCiAgICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbi5nZXQoKSwgIm11dGUiLCBtX3BsYXllci0+
bXV0ZWQoKSwgTlVMTCk7CiAKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbi5nZXQoKSwg
Im5vdGlmeTo6dm9sdW1lIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFu
Z2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbi5nZXQo
KSwgIm5vdGlmeTo6c291cmNlIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVTb3VyY2VD
aGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbi5n
ZXQoKSwgIm5vdGlmeTo6bXV0ZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlTXV0ZUNo
YW5nZWRDYWxsYmFjayksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLmdl
dCgpLCAidmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9D
aGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbi5n
ZXQoKSwgImF1ZGlvLWNoYW5nZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZUF1ZGlv
Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAKLSNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklE
RU8pCi0gICAgbV9nc3RHV29ybGQgPSBHU3RyZWFtZXJHV29ybGQ6OmNyZWF0ZUdXb3JsZChtX3Bs
YXlCaW4uZ2V0KCkpOwotICAgIG1fd2Via2l0VmlkZW9TaW5rID0gd2Via2l0VmlkZW9TaW5rTmV3
KG1fZ3N0R1dvcmxkLmdldCgpKTsKLSNlbHNlCi0gICAgbV93ZWJraXRWaWRlb1NpbmsgPSB3ZWJr
aXRWaWRlb1NpbmtOZXcoKTsKLSNlbmRpZgotICAgIG1fdmlkZW9TaW5rUGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fd2Via2l0VmlkZW9TaW5rLCAic2luayIpKTsK
LQotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJraXRWaWRlb1NpbmssICJyZXBhaW50LXJlcXVl
c3RlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlUmVwYWludENhbGxiYWNrKSwgdGhp
cyk7CisgICAgR3N0RWxlbWVudCogdmlkZW9FbGVtZW50ID0gY3JlYXRlVmlkZW9TaW5rKG1fcGxh
eUJpbi5nZXQoKSk7CiAKKyAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLmdldCgpLCAidmlkZW8t
c2luayIsIHZpZGVvRWxlbWVudCwgTlVMTCk7CiAKLSNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5f
VklERU8pCi0gICAgLy8gQnVpbGQgYSBuZXcgdmlkZW8gc2luayBjb25zaXN0aW5nIG9mIGEgYmlu
IGNvbnRhaW5pbmcgYSB0ZWUKLSAgICAvLyAobWVhbnQgdG8gZGlzdHJpYnV0ZSBkYXRhIHRvIG11
bHRpcGxlIHZpZGVvIHNpbmtzKSBhbmQgb3VyCi0gICAgLy8gaW50ZXJuYWwgdmlkZW8gc2luay4g
Rm9yIGZ1bGxzY3JlZW4gd2UgY3JlYXRlIGFuIGF1dG92aWRlb3NpbmsKLSAgICAvLyBhbmQgaW5p
dGlhbGx5IGJsb2NrIHRoZSBkYXRhIGZsb3cgdG93YXJkcyBpdCBhbmQgY29uZmlndXJlIGl0Ci0K
LSAgICBtX3ZpZGVvU2lua0JpbiA9IGdzdF9iaW5fbmV3KCJ2aWRlby1zaW5rIik7Ci0KLSAgICAv
LyBUYWtlIG93bmVyc2hpcC4KLSAgICBnc3Rfb2JqZWN0X3JlZl9zaW5rKG1fdmlkZW9TaW5rQmlu
KTsKLQotICAgIEdzdEVsZW1lbnQqIHZpZGVvVGVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtl
KCJ0ZWUiLCAidmlkZW9UZWUiKTsKLSAgICBHc3RFbGVtZW50KiBxdWV1ZSA9IGdzdF9lbGVtZW50
X2ZhY3RvcnlfbWFrZSgicXVldWUiLCAwKTsKLQotI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCi0g
ICAgR1JlZlB0cjxHc3RQYWQ+IHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0
YXRpY19wYWQodmlkZW9UZWUsICJzaW5rIikpOwotICAgIEdTVF9PQkpFQ1RfRkxBR19TRVQoR1NU
X09CSkVDVChzaW5rUGFkLmdldCgpKSwgR1NUX1BBRF9GTEFHX1BST1hZX0FMTE9DQVRJT04pOwot
I2VuZGlmCi0KLSAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4obV92aWRlb1NpbmtCaW4pLCB2
aWRlb1RlZSwgcXVldWUsIE5VTEwpOwotCi0gICAgLy8gTGluayBhIG5ldyBzcmMgcGFkIGZyb20g
dGVlIHRvIHF1ZXVlMS4KLSAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCh2aWRlb1RlZSwg
MCwgcXVldWUsICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwotI2VuZGlmCi0K
LSAgICBHc3RFbGVtZW50KiBhY3R1YWxWaWRlb1NpbmsgPSAwOwotICAgIG1fZnBzU2luayA9IGdz
dF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZnBzZGlzcGxheXNpbmsiLCAic2luayIpOwotICAgIGlm
IChtX2Zwc1NpbmspIHsKLSAgICAgICAgLy8gVGhlIHZlcmJvc2UgcHJvcGVydHkgaGFzIGJlZW4g
YWRkZWQgaW4gLWJhZCAwLjEwLjIyLiBNYWtpbmcKLSAgICAgICAgLy8gdGhpcyB3aG9sZSBjb2Rl
IGRlcGVuZCBvbiBpdCBiZWNhdXNlIHdlIGRvbid0IHdhbnQKLSAgICAgICAgLy8gZnBzZGlwbGF5
c2luayB0byBzcGl0IGRhdGEgb24gc3Rkb3V0LgotICAgICAgICBHc3RFbGVtZW50RmFjdG9yeSog
ZmFjdG9yeSA9IEdTVF9FTEVNRU5UX0ZBQ1RPUlkoR1NUX0VMRU1FTlRfR0VUX0NMQVNTKG1fZnBz
U2luayktPmVsZW1lbnRmYWN0b3J5KTsKLSAgICAgICAgaWYgKGdzdF9wbHVnaW5fZmVhdHVyZV9j
aGVja192ZXJzaW9uKEdTVF9QTFVHSU5fRkVBVFVSRShmYWN0b3J5KSwgMCwgMTAsIDIyKSkgewot
ICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fZnBzU2luaywgInNpbGVudCIsIFRSVUUgLCBOVUxM
KTsKLQotICAgICAgICAgICAgLy8gVHVybiBvZmYgdGV4dCBvdmVybGF5IHVubGVzcyBsb2dnaW5n
IGlzIGVuYWJsZWQuCi0jaWYgTE9HX0RJU0FCTEVECi0gICAgICAgICAgICBnX29iamVjdF9zZXQo
bV9mcHNTaW5rLCAidGV4dC1vdmVybGF5IiwgRkFMU0UgLCBOVUxMKTsKLSNlbHNlCi0gICAgICAg
ICAgICBXVEZMb2dDaGFubmVsKiBjaGFubmVsID0gZ2V0Q2hhbm5lbEZyb21OYW1lKCJNZWRpYSIp
OwotICAgICAgICAgICAgaWYgKGNoYW5uZWwtPnN0YXRlICE9IFdURkxvZ0NoYW5uZWxPbikKLSAg
ICAgICAgICAgICAgICBnX29iamVjdF9zZXQobV9mcHNTaW5rLCAidGV4dC1vdmVybGF5IiwgRkFM
U0UgLCBOVUxMKTsKLSNlbmRpZiAvLyBMT0dfRElTQUJMRUQKLQotICAgICAgICAgICAgaWYgKGdf
b2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkoR19PQkpFQ1RfR0VUX0NMQVNTKG1fZnBzU2luayks
ICJ2aWRlby1zaW5rIikpIHsKLSAgICAgICAgICAgICAgICBnX29iamVjdF9zZXQobV9mcHNTaW5r
LCAidmlkZW8tc2luayIsIG1fd2Via2l0VmlkZW9TaW5rLCBOVUxMKTsKLSNpZiBVU0UoTkFUSVZF
X0ZVTExTQ1JFRU5fVklERU8pCi0gICAgICAgICAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTiht
X3ZpZGVvU2lua0JpbiksIG1fZnBzU2luayk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBhY3R1
YWxWaWRlb1NpbmsgPSBtX2Zwc1Npbms7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICBtX2Zwc1NpbmsgPSAwOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fZnBzU2lu
ayA9IDA7Ci0gICAgfQotCi0gICAgaWYgKCFtX2Zwc1NpbmspIHsKLSNpZiBVU0UoTkFUSVZFX0ZV
TExTQ1JFRU5fVklERU8pCi0gICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV92aWRlb1NpbmtC
aW4pLCBtX3dlYmtpdFZpZGVvU2luayk7Ci0jZW5kaWYKLSAgICAgICAgYWN0dWFsVmlkZW9TaW5r
ID0gbV93ZWJraXRWaWRlb1Npbms7Ci0gICAgfQotCi0gICAgQVNTRVJUKGFjdHVhbFZpZGVvU2lu
ayk7Ci0KLSNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCi0gICAgLy8gRmFzdGVyIGVs
ZW1lbnRzIGxpbmtpbmcuCi0gICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwocXVldWUsICJz
cmMiLCBhY3R1YWxWaWRlb1NpbmssICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcp
OwotCi0gICAgLy8gQWRkIGEgZ2hvc3RwYWQgdG8gdGhlIGJpbiBzbyBpdCBjYW4gcHJveHkgdG8g
dGVlLgotICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRpY19wYWQodmlkZW9UZWUsICJzaW5rIikpOwotICAgIGdzdF9lbGVtZW50X2FkZF9wYWQo
bV92aWRlb1NpbmtCaW4sIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgcGFkLmdldCgpKSk7Ci0K
LSAgICAvLyBTZXQgdGhlIGJpbiBhcyB2aWRlbyBzaW5rIG9mIHBsYXliaW4uCi0gICAgZ19vYmpl
Y3Rfc2V0KG1fcGxheUJpbi5nZXQoKSwgInZpZGVvLXNpbmsiLCBtX3ZpZGVvU2lua0JpbiwgTlVM
TCk7Ci0jZWxzZQotICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4uZ2V0KCksICJ2aWRlby1zaW5r
IiwgYWN0dWFsVmlkZW9TaW5rLCBOVUxMKTsKLSNlbmRpZgotCi0gICAgR1JlZlB0cjxHc3RQYWQ+
IHZpZGVvU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3dl
YmtpdFZpZGVvU2luaywgInNpbmsiKSk7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHZpZGVvU2lua1Bh
ZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3dlYmtpdFZpZGVvU2lu
ay5nZXQoKSwgInNpbmsiKSk7CiAgICAgaWYgKHZpZGVvU2lua1BhZCkKICAgICAgICAgZ19zaWdu
YWxfY29ubmVjdCh2aWRlb1NpbmtQYWQuZ2V0KCksICJub3RpZnk6OmNhcHMiLCBHX0NBTExCQUNL
KG1lZGlhUGxheWVyUHJpdmF0ZVZpZGVvU2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IGZk
MzdkODNiZDM1YmUxY2I1NjcwM2QxZTkxYjM3N2RkNGMyYTZjOGMuLjQ1OTAxN2NhY2Y0ZTdiMmQ2
ZmZiZDM4YjVjZDA1MzAwMTE3MDYyOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmgKQEAgLTI1LDM1ICsyNSwyNiBAQAogI2lmIEVOQUJMRShWSURFTykg
JiYgVVNFKEdTVFJFQU1FUikKIAogI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKLSNpbmNs
dWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKIAogI2luY2x1ZGUgPGdsaWIuaD4K
ICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAotdHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdFZpZGVvU2luayBXZWJLaXRWaWRlb1Npbms7CiB0eXBlZGVmIHN0cnVj
dCBfR3N0QnVmZmVyIEdzdEJ1ZmZlcjsKIHR5cGVkZWYgc3RydWN0IF9Hc3RNZXNzYWdlIEdzdE1l
c3NhZ2U7CiB0eXBlZGVmIHN0cnVjdCBfR3N0RWxlbWVudCBHc3RFbGVtZW50OwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXI7
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBJbnRTaXplOwotY2xhc3MgSW50UmVjdDsK
LWNsYXNzIEdTdHJlYW1lckdXb3JsZDsKLWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjsKLQotY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIDogcHVibGljIE1lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZSB7CitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIg
OiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSB7CiAKICAgICAgICAgcHVi
bGljOgogICAgICAgICAgICAgfk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcigpOwogICAgICAg
ICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJh
cik7CiAgICAgICAgICAgICBnYm9vbGVhbiBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKIAot
ICAgICAgICAgICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0OwogICAgICAgICAgICAgYm9v
bCBoYXNWaWRlbygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmlkZW87IH0KICAgICAgICAgICAgIGJv
b2wgaGFzQXVkaW8oKSBjb25zdCB7IHJldHVybiBtX2hhc0F1ZGlvOyB9CiAKQEAgLTc1LDY5ICs2
NiwyOCBAQCBjbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFQ
bGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKICAgICAgICAgICAgIHZvaWQgc2V0UmF0ZShmbG9hdCk7
CiAgICAgICAgICAgICB2b2lkIHNldFByZXNlcnZlc1BpdGNoKGJvb2wpOwogCi0gICAgICAgICAg
ICB2b2lkIHNldFZvbHVtZShmbG9hdCk7Ci0gICAgICAgICAgICBmbG9hdCB2b2x1bWUoKSBjb25z
dDsKLSAgICAgICAgICAgIHZvaWQgdm9sdW1lQ2hhbmdlZCgpOwotICAgICAgICAgICAgdm9pZCBu
b3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgpOwotCi0gICAgICAgICAgICBib29sIHN1cHBvcnRz
TXV0aW5nKCkgY29uc3Q7Ci0gICAgICAgICAgICB2b2lkIHNldE11dGVkKGJvb2wpOwotICAgICAg
ICAgICAgYm9vbCBtdXRlZCgpIGNvbnN0OwotICAgICAgICAgICAgdm9pZCBtdXRlQ2hhbmdlZCgp
OwotICAgICAgICAgICAgdm9pZCBub3RpZnlQbGF5ZXJPZk11dGUoKTsKLQogICAgICAgICAgICAg
dm9pZCBzZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpQcmVsb2FkKTsKICAgICAgICAgICAgIHZvaWQg
ZmlsbFRpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyPiopOwogCi0g
ICAgICAgICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0
OwotICAgICAgICAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0
OwotCiAgICAgICAgICAgICBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3Q7
CiAgICAgICAgICAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdDsKICAgICAgICAgICAg
IGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3Q7CiAgICAgICAgICAgICB1bnNpZ25lZCB0
b3RhbEJ5dGVzKCkgY29uc3Q7CiAgICAgICAgICAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCkgY29u
c3Q7CiAKLSAgICAgICAgICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKLSAgICAgICAgICAgIHZv
aWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJik7Ci0KICAgICAgICAgICAgIHZvaWQgbG9hZFN0YXRl
Q2hhbmdlZCgpOwotICAgICAgICAgICAgdm9pZCBzaXplQ2hhbmdlZCgpOwogICAgICAgICAgICAg
dm9pZCB0aW1lQ2hhbmdlZCgpOwogICAgICAgICAgICAgdm9pZCBkaWRFbmQoKTsKICAgICAgICAg
ICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCk7CiAgICAgICAgICAgICB2b2lkIGxvYWRpbmdGYWls
ZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSk7CiAKLSAgICAgICAgICAgIHZvaWQgdHJpZ2dl
clJlcGFpbnQoR3N0QnVmZmVyKik7Ci0gICAgICAgICAgICB2b2lkIHJlcGFpbnQoKTsKLSAgICAg
ICAgICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotCi0g
ICAgICAgICAgICBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7Ci0KLSNpZiBV
U0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCi0gICAgICAgICAgICB2b2lkIGVudGVyRnVsbHNj
cmVlbigpOwotICAgICAgICAgICAgdm9pZCBleGl0RnVsbHNjcmVlbigpOwotICAgICAgICAgICAg
Ym9vbCBjYW5FbnRlckZ1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYK
LQotICAgICAgICAgICAgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdDsKLSAgICAgICAg
ICAgIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNvbnN0OwotCiAgICAgICAgICAgICB2
b2lkIHZpZGVvQ2hhbmdlZCgpOwogICAgICAgICAgICAgdm9pZCBhdWRpb0NoYW5nZWQoKTsKICAg
ICAgICAgICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZWaWRlbygpOwogICAgICAgICAgICAgdm9pZCBu
b3RpZnlQbGF5ZXJPZkF1ZGlvKCk7CiAKICAgICAgICAgICAgIHZvaWQgc291cmNlQ2hhbmdlZCgp
OwotCi0gICAgICAgICAgICB1bnNpZ25lZCBkZWNvZGVkRnJhbWVDb3VudCgpIGNvbnN0OwotICAg
ICAgICAgICAgdW5zaWduZWQgZHJvcHBlZEZyYW1lQ291bnQoKSBjb25zdDsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGF1ZGlvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0OwotICAgICAgICAgICAgdW5z
aWduZWQgdmlkZW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3Q7Ci0KLSAgICAgICAgICAgIE1lZGlh
UGxheWVyOjpNb3ZpZUxvYWRUeXBlIG1vdmllTG9hZFR5cGUoKSBjb25zdDsKLQotICAgICAgICAg
ICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5ZXI7IH0K
KyAgICAgICAgICAgIEdzdEVsZW1lbnQqIGF1ZGlvU2luaygpIGNvbnN0OwogCiAgICAgICAgICAg
ICBzdGF0aWMgS1VSTCBjb252ZXJ0UGxheWJpblVSTChjb25zdCBnY2hhciogdXJpKTsKIApAQCAt
MTcxLDI0ICsxMjEsMTYgQEAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIDogcHVi
bGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CiAgICAgICAgICAgICB2b2lkIHByb2Nl
c3NCdWZmZXJpbmdTdGF0cyhHc3RNZXNzYWdlKik7CiAKICAgICAgICAgICAgIHZpcnR1YWwgU3Ry
aW5nIGVuZ2luZURlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gIkdTdHJlYW1lciI7IH0KLSAg
ICAgICAgICAgIGJvb2wgaXNMaXZlU3RyZWFtKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0cmVhbWlu
ZzsgfQorICAgICAgICAgICAgdmlydHVhbCBib29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0IHsgcmV0
dXJuIG1faXNTdHJlYW1pbmc7IH0KIAogICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgTWVk
aWFQbGF5ZXIqIG1fcGxheWVyOwogICAgICAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3Bs
YXlCaW47Ci0gICAgICAgICAgICBHc3RFbGVtZW50KiBtX3dlYmtpdFZpZGVvU2luazsKLSAgICAg
ICAgICAgIEdzdEVsZW1lbnQqIG1fdmlkZW9TaW5rQmluOwotICAgICAgICAgICAgR3N0RWxlbWVu
dCogbV9mcHNTaW5rOwogICAgICAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3NvdXJjZTsK
ICAgICAgICAgICAgIGZsb2F0IG1fc2Vla1RpbWU7CiAgICAgICAgICAgICBib29sIG1fY2hhbmdp
bmdSYXRlOwogICAgICAgICAgICAgZmxvYXQgbV9lbmRUaW1lOwogICAgICAgICAgICAgYm9vbCBt
X2lzRW5kUmVhY2hlZDsKLSAgICAgICAgICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9u
ZXR3b3JrU3RhdGU7Ci0gICAgICAgICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5
U3RhdGU7CiAgICAgICAgICAgICBtdXRhYmxlIGJvb2wgbV9pc1N0cmVhbWluZzsKLSAgICAgICAg
ICAgIEludFNpemUgbV9zaXplOwotICAgICAgICAgICAgR3N0QnVmZmVyKiBtX2J1ZmZlcjsKICAg
ICAgICAgICAgIEdzdFN0cnVjdHVyZSogbV9tZWRpYUxvY2F0aW9uczsKICAgICAgICAgICAgIGlu
dCBtX21lZGlhTG9jYXRpb25DdXJyZW50SW5kZXg7CiAgICAgICAgICAgICBib29sIG1fcmVzZXRQ
aXBlbGluZTsKQEAgLTIwNiwyMSArMTQ4LDE0IEBAIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lciA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogICAgICAgICAg
ICAgYm9vbCBtX2RlbGF5aW5nTG9hZDsKICAgICAgICAgICAgIGJvb2wgbV9tZWRpYUR1cmF0aW9u
S25vd247CiAgICAgICAgICAgICBtdXRhYmxlIGZsb2F0IG1fbWF4VGltZUxvYWRlZEF0TGFzdERp
ZExvYWRpbmdQcm9ncmVzczsKLSNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCi0gICAg
ICAgICAgICBSZWZQdHI8R1N0cmVhbWVyR1dvcmxkPiBtX2dzdEdXb3JsZDsKLSAgICAgICAgICAg
IE93blB0cjxGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyPiBtX2Z1bGxzY3JlZW5W
aWRlb0NvbnRyb2xsZXI7Ci0jZW5kaWYKLSAgICAgICAgICAgIGd1aW50IG1fdm9sdW1lVGltZXJI
YW5kbGVyOwotICAgICAgICAgICAgZ3VpbnQgbV9tdXRlVGltZXJIYW5kbGVyOwogICAgICAgICAg
ICAgYm9vbCBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZDsKICAgICAgICAgICAgIGJvb2wgbV9o
YXNWaWRlbzsKICAgICAgICAgICAgIGJvb2wgbV9oYXNBdWRpbzsKICAgICAgICAgICAgIGd1aW50
IG1fYXVkaW9UaW1lckhhbmRsZXI7CiAgICAgICAgICAgICBndWludCBtX3ZpZGVvVGltZXJIYW5k
bGVyOworICAgICAgICAgICAgZ3VpbnQgbV92aWRlb0NhcHNIYW5kbGVyOwogICAgICAgICAgICAg
R1JlZlB0cjxHc3RFbGVtZW50PiBtX3dlYmtpdEF1ZGlvU2luazsKICAgICAgICAgICAgIG11dGFi
bGUgbG9uZyBtX3RvdGFsQnl0ZXM7Ci0gICAgICAgICAgICBHUmVmUHRyPEdzdFBhZD4gbV92aWRl
b1NpbmtQYWQ7Ci0gICAgICAgICAgICBtdXRhYmxlIEludFNpemUgbV92aWRlb1NpemU7CiAgICAg
ICAgICAgICBLVVJMIG1fdXJsOwogICAgICAgICAgICAgYm9vbCBtX29yaWdpbmFsUHJlbG9hZFdh
c0F1dG9BbmRXYXNPdmVycmlkZGVuOwogICAgICAgICAgICAgYm9vbCBtX3ByZXNlcnZlc1BpdGNo
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjEzZGQ1MTVjZmZlMDRhNWYxNTgzNjlhNTI1ZTcyZGVhYjAwY2EyOTkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKQEAgLTAsMCArMSw1MTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEgTHRkLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9r
ZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25z
QGdub21lLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Uu
aCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkNv
bG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVy
LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyR1dvcmxkLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJJ
bWFnZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVy
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJWaWRlb1NpbmtHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRl
IDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRp
YV9wbGF5ZXJfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21lZGlhX3Bs
YXllcl9kZWJ1ZworCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyBpbnQgZ3JlYXRlc3RDb21tb25EaXZpc29yKGludCBhLCBpbnQgYikKK3sKKyAg
ICB3aGlsZSAoYikgeworICAgICAgICBpbnQgdGVtcCA9IGE7CisgICAgICAgIGEgPSBiOworICAg
ICAgICBiID0gdGVtcCAlIGI7CisgICAgfQorCisgICAgcmV0dXJuIEFCUyhhKTsKK30KKworc3Rh
dGljIHZvaWQgbWVkaWFQbGF5ZXJQcml2YXRlVm9sdW1lQ2hhbmdlZENhbGxiYWNrKEdPYmplY3Qq
LCBHUGFyYW1TcGVjKiwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyKQor
eworICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gbV92b2x1bWUgcmVjZWl2ZXMgdGhlIG5vdGlm
eTo6dm9sdW1lIHNpZ25hbC4KKyAgICBwbGF5ZXItPnZvbHVtZUNoYW5nZWQoKTsKK30KKworc3Rh
dGljIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZVZvbHVtZUNoYW5nZVRpbWVvdXRDYWxsYmFj
ayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIpCit7CisgICAgLy8gVGhp
cyBpcyB0aGUgY2FsbGJhY2sgb2YgdGhlIHRpbWVvdXQgc291cmNlIGNyZWF0ZWQgaW4gOjp2b2x1
bWVDaGFuZ2VkLgorICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKTsKKyAg
ICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZU11dGVD
aGFuZ2VkQ2FsbGJhY2soR09iamVjdCosIEdQYXJhbVNwZWMqLCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlKiBwbGF5ZXIpCit7CisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBtX3Zv
bHVtZSByZWNlaXZlcyB0aGUgbm90aWZ5OjptdXRlIHNpZ25hbC4KKyAgICBwbGF5ZXItPm11dGVD
aGFuZ2VkKCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVNdXRlQ2hh
bmdlVGltZW91dENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXll
cikKK3sKKyAgICAvLyBUaGlzIGlzIHRoZSBjYWxsYmFjayBvZiB0aGUgdGltZW91dCBzb3VyY2Ug
Y3JlYXRlZCBpbiA6Om11dGVDaGFuZ2VkLgorICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZNdXRl
KCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBtZWRpYVBsYXllclByaXZh
dGVSZXBhaW50Q2FsbGJhY2soV2ViS2l0VmlkZW9TaW5rKiwgR3N0QnVmZmVyICpidWZmZXIsIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllclByaXZhdGUpCit7CisgICAgcGxh
eWVyUHJpdmF0ZS0+dHJpZ2dlclJlcGFpbnQoYnVmZmVyKTsKK30KKworTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZShNZWRpYVBs
YXllciogcGxheWVyKQorICAgIDogbV9wbGF5ZXIocGxheWVyKQorICAgICwgbV9mcHNTaW5rKDAp
CisgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorICAgICwgbV9u
ZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQorICAgICwgbV9idWZmZXIoMCkKKyAgICAs
IG1fdm9sdW1lVGltZXJIYW5kbGVyKDApCisgICAgLCBtX211dGVUaW1lckhhbmRsZXIoMCkKK3sK
K30KKworTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6fk1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2UoKQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3dl
YmtpdFZpZGVvU2luay5nZXQoKSwgbV9yZXBhaW50SGFuZGxlcik7CisKKyAgICBpZiAobV9idWZm
ZXIpCisgICAgICAgIGdzdF9idWZmZXJfdW5yZWYobV9idWZmZXIpOworICAgIG1fYnVmZmVyID0g
MDsKKworICAgIG1fcGxheWVyID0gMDsKKworICAgIGlmIChtX211dGVUaW1lckhhbmRsZXIpCisg
ICAgICAgIGdfc291cmNlX3JlbW92ZShtX211dGVUaW1lckhhbmRsZXIpOworCisgICAgaWYgKG1f
dm9sdW1lVGltZXJIYW5kbGVyKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV92b2x1bWVUaW1l
ckhhbmRsZXIpOworCisjaWYgVVNFKE5BVElWRV9GVUxMU0NSRUVOX1ZJREVPKQorICAgIGlmICht
X2Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIpCisgICAgICAgIGV4aXRGdWxsc2NyZWVuKCk7Cisj
ZW5kaWYKK30KKworLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8KK0ludFNpemUgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bmF0dXJhbFNpemUoKSBjb25zdAoreworICAg
IGlmICghaGFzVmlkZW8oKSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIGlmICgh
bV92aWRlb1NpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV92aWRlb1NpemU7CisKKyAg
ICBHUmVmUHRyPEdzdENhcHM+IGNhcHMgPSB3ZWJraXRHc3RHZXRQYWRDYXBzKG1fdmlkZW9TaW5r
UGFkLmdldCgpKTsKKyAgICBpZiAoIWNhcHMpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisK
KworICAgIC8vIFRPRE86IGhhbmRsZSBwb3NzaWJsZSBjbGVhbiBhcGVydHVyZSBkYXRhLiBTZWUK
KyAgICAvLyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2NTcx
CisgICAgLy8gVE9ETzogaGFuZGxlIHBvc3NpYmxlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4gU2Vl
CisgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU5NjMy
NgorCisgICAgLy8gR2V0IHRoZSB2aWRlbyBQQVIgYW5kIG9yaWdpbmFsIHNpemUsIGlmIHRoaXMg
ZmFpbHMgdGhlCisgICAgLy8gdmlkZW8tc2luayBoYXMgbGlrZWx5IG5vdCB5ZXQgbmVnb3RpYXRl
ZCBpdHMgY2Fwcy4KKyAgICBpbnQgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3Bl
Y3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJpZGU7CisgICAgSW50U2l6ZSBvcmlnaW5hbFNpemU7Cisg
ICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OworICAgIGlmICghZ2V0VmlkZW9TaXplQW5kRm9ybWF0
RnJvbUNhcHMoY2Fwcy5nZXQoKSwgb3JpZ2luYWxTaXplLCBmb3JtYXQsIHBpeGVsQXNwZWN0UmF0
aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciwgc3RyaWRlKSkKKyAgICAg
ICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIExPR19NRURJQV9NRVNTQUdFKCJPcmlnaW5hbCB2
aWRlbyBzaXplOiAlZHglZCIsIG9yaWdpbmFsU2l6ZS53aWR0aCgpLCBvcmlnaW5hbFNpemUuaGVp
Z2h0KCkpOworICAgIExPR19NRURJQV9NRVNTQUdFKCJQaXhlbCBhc3BlY3QgcmF0aW86ICVkLyVk
IiwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9y
KTsKKworICAgIC8vIENhbGN1bGF0ZSBEQVIgYmFzZWQgb24gUEFSIGFuZCB2aWRlbyBzaXplLgor
ICAgIGludCBkaXNwbGF5V2lkdGggPSBvcmlnaW5hbFNpemUud2lkdGgoKSAqIHBpeGVsQXNwZWN0
UmF0aW9OdW1lcmF0b3I7CisgICAgaW50IGRpc3BsYXlIZWlnaHQgPSBvcmlnaW5hbFNpemUuaGVp
Z2h0KCkgKiBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3I7CisKKyAgICAvLyBEaXZpZGUgZGlz
cGxheSB3aWR0aCBhbmQgaGVpZ2h0IGJ5IHRoZWlyIEdDRCB0byBhdm9pZCBwb3NzaWJsZSBvdmVy
Zmxvd3MuCisgICAgaW50IGRpc3BsYXlBc3BlY3RSYXRpb0dDRCA9IGdyZWF0ZXN0Q29tbW9uRGl2
aXNvcihkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWlnaHQpOworICAgIGRpc3BsYXlXaWR0aCAvPSBk
aXNwbGF5QXNwZWN0UmF0aW9HQ0Q7CisgICAgZGlzcGxheUhlaWdodCAvPSBkaXNwbGF5QXNwZWN0
UmF0aW9HQ0Q7CisKKyAgICAvLyBBcHBseSBEQVIgdG8gb3JpZ2luYWwgdmlkZW8gc2l6ZS4gVGhp
cyBpcyB0aGUgc2FtZSBiZWhhdmlvciBhcyBpbiB4dmltYWdlc2luaydzIHNldGNhcHMgZnVuY3Rp
b24uCisgICAgZ3VpbnQ2NCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CisgICAgaWYgKCEob3JpZ2lu
YWxTaXplLmhlaWdodCgpICUgZGlzcGxheUhlaWdodCkpIHsKKyAgICAgICAgTE9HX01FRElBX01F
U1NBR0UoIktlZXBpbmcgdmlkZW8gb3JpZ2luYWwgaGVpZ2h0Iik7CisgICAgICAgIHdpZHRoID0g
Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0KCksIGRpc3BsYXlX
aWR0aCwgZGlzcGxheUhlaWdodCk7CisgICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50
NjQ+KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgfSBlbHNlIGlmICghKG9yaWdpbmFsU2l6
ZS53aWR0aCgpICUgZGlzcGxheVdpZHRoKSkgeworICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgi
S2VlcGluZyB2aWRlbyBvcmlnaW5hbCB3aWR0aCIpOworICAgICAgICBoZWlnaHQgPSBnc3RfdXRp
bF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS53aWR0aCgpLCBkaXNwbGF5SGVpZ2h0LCBk
aXNwbGF5V2lkdGgpOworICAgICAgICB3aWR0aCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdp
bmFsU2l6ZS53aWR0aCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBMT0dfTUVESUFfTUVTU0FH
RSgiQXBwcm94aW1hdGluZyB3aGlsZSBrZWVwaW5nIG9yaWdpbmFsIHZpZGVvIGhlaWdodCIpOwor
ICAgICAgICB3aWR0aCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxTaXplLmhl
aWdodCgpLCBkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWlnaHQpOworICAgICAgICBoZWlnaHQgPSBz
dGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbFNpemUuaGVpZ2h0KCkpOworICAgIH0KKworICAg
IExPR19NRURJQV9NRVNTQUdFKCJOYXR1cmFsIHNpemU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIngl
IiBHX0dVSU5UNjRfRk9STUFULCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX3ZpZGVvU2l6ZSA9IElu
dFNpemUoc3RhdGljX2Nhc3Q8aW50Pih3aWR0aCksIHN0YXRpY19jYXN0PGludD4oaGVpZ2h0KSk7
CisgICAgcmV0dXJuIG1fdmlkZW9TaXplOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2U6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCit7CisgICAgaWYgKCFtX3ZvbHVt
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ3N0X3N0cmVhbV92b2x1bWVfc2V0X3ZvbHVtZSht
X3ZvbHVtZS5nZXQoKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0NVQklDLCBzdGF0aWNfY2Fz
dDxkb3VibGU+KHZvbHVtZSkpOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjp2b2x1bWUoKSBjb25zdAoreworICAgIGlmICghbV92b2x1bWUpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIGdzdF9zdHJlYW1fdm9sdW1lX2dldF92b2x1bWUobV92b2x1
bWUuZ2V0KCksIEdTVF9TVFJFQU1fVk9MVU1FX0ZPUk1BVF9DVUJJQyk7Cit9CisKKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5n
ZSgpCit7CisgICAgbV92b2x1bWVUaW1lckhhbmRsZXIgPSAwOworCisgICAgaWYgKCFtX3BsYXll
ciB8fCAhbV92b2x1bWUpCisgICAgICAgIHJldHVybjsKKyAgICBkb3VibGUgdm9sdW1lOworICAg
IHZvbHVtZSA9IGdzdF9zdHJlYW1fdm9sdW1lX2dldF92b2x1bWUobV92b2x1bWUuZ2V0KCksIEdT
VF9TVFJFQU1fVk9MVU1FX0ZPUk1BVF9DVUJJQyk7CisgICAgLy8gZ2V0X3ZvbHVtZSgpIGNhbiBy
ZXR1cm4gdmFsdWVzIHN1cGVyaW9yIHRvIDEuMCBpZiB0aGUgdXNlcgorICAgIC8vIGFwcGxpZXMg
c29mdHdhcmUgdXNlciBnYWluIHZpYSB0aGlyZCBwYXJ0eSBhcHBsaWNhdGlvbiAoR05PTUUKKyAg
ICAvLyB2b2x1bWUgY29udHJvbCBmb3IgaW5zdGFuY2UpLgorICAgIHZvbHVtZSA9IENMQU1QKHZv
bHVtZSwgMC4wLCAxLjApOworICAgIG1fcGxheWVyLT52b2x1bWVDaGFuZ2VkKHN0YXRpY19jYXN0
PGZsb2F0Pih2b2x1bWUpKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlOjp2b2x1bWVDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV92b2x1bWVUaW1lckhhbmRsZXIpCisg
ICAgICAgIGdfc291cmNlX3JlbW92ZShtX3ZvbHVtZVRpbWVySGFuZGxlcik7CisgICAgbV92b2x1
bWVUaW1lckhhbmRsZXIgPSBnX3RpbWVvdXRfYWRkKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJj
ZUZ1bmM+KG1lZGlhUGxheWVyUHJpdmF0ZVZvbHVtZUNoYW5nZVRpbWVvdXRDYWxsYmFjayksIHRo
aXMpOworfQorCitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2U6Om5ldHdvcmtTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV0d29y
a1N0YXRlOworfQorCitNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWFkeVN0
YXRlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnNpemVDaGFu
Z2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2U6OnNldE11dGVkKGJvb2wgbXV0ZWQpCit7CisgICAgaWYgKCFtX3Zv
bHVtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19vYmplY3Rfc2V0KG1fdm9sdW1lLmdldCgp
LCAibXV0ZSIsIG11dGVkLCBOVUxMKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjptdXRlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ZvbHVtZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBtdXRlZDsKKyAgICBnX29iamVjdF9nZXQobV92b2x1
bWUuZ2V0KCksICJtdXRlIiwgJm11dGVkLCBOVUxMKTsKKyAgICByZXR1cm4gbXV0ZWQ7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bm90aWZ5UGxheWVyT2ZNdXRl
KCkKK3sKKyAgICBtX211dGVUaW1lckhhbmRsZXIgPSAwOworCisgICAgaWYgKCFtX3BsYXllciB8
fCAhbV92b2x1bWUpCisgICAgICAgIHJldHVybjsKKworICAgIGdib29sZWFuIG11dGVkOworICAg
IGdfb2JqZWN0X2dldChtX3ZvbHVtZS5nZXQoKSwgIm11dGUiLCAmbXV0ZWQsIE5VTEwpOworICAg
IG1fcGxheWVyLT5tdXRlQ2hhbmdlZChzdGF0aWNfY2FzdDxib29sPihtdXRlZCkpOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om11dGVDaGFuZ2VkKCkKK3sKKyAg
ICBpZiAobV9tdXRlVGltZXJIYW5kbGVyKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9tdXRl
VGltZXJIYW5kbGVyKTsKKyAgICBtX211dGVUaW1lckhhbmRsZXIgPSBnX3RpbWVvdXRfYWRkKDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KG1lZGlhUGxheWVyUHJpdmF0ZU11dGVDaGFu
Z2VUaW1lb3V0Q2FsbGJhY2spLCB0aGlzKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjp0cmlnZ2VyUmVwYWludChHc3RCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICAv
LyBGSVhNRTogdXNlIGltcGxlbWVudGF0aW9uIGZyb20gU3RyZWFtTWVkaWFQbGF5ZXI/PworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoR1NUX0lTX0JVRkZFUihidWZmZXIpKTsKKyAgICBnc3RfYnVmZmVy
X3JlcGxhY2UoJm1fYnVmZmVyLCBidWZmZXIpOworICAgIG1fcGxheWVyLT5yZXBhaW50KCk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0U2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplKQoreworICAgIG1fc2l6ZSA9IHNpemU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9wbGF5ZXItPnZpc2libGUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gd2Via2l0R3N0R2V0UGFkQ2FwcyhtX3ZpZGVvU2lu
a1BhZC5nZXQoKSk7CisgICAgaWYgKCFjYXBzKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQ
dHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdl
KG1fYnVmZmVyLCBjYXBzLmdldCgpKTsKKyAgICBpZiAoIWdzdEltYWdlKQorICAgICAgICByZXR1
cm47CisKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVpbnRlcnByZXRfY2FzdDxJbWFnZSo+KGdz
dEltYWdlLT5pbWFnZSgpLmdldCgpKSwgQ29sb3JTcGFjZVNSR0IsCisgICAgICAgIHJlY3QsIGdz
dEltYWdlLT5yZWN0KCksIENvbXBvc2l0ZUNvcHksIERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRp
b24sIGZhbHNlKTsKK30KKworI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZW50ZXJGdWxsc2NyZWVuKCkKK3sKKyAg
ICBBU1NFUlQoIW1fZnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcik7CisgICAgbV9mdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyID0gRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcjo6Y3Jl
YXRlKHRoaXMpOworICAgIGlmIChtX2Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIpCisgICAgICAg
IG1fZnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci0+ZW50ZXJGdWxsc2NyZWVuKCk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZXhpdEZ1bGxzY3JlZW4oKQorewor
ICAgIGlmICghbV9mdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9mdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLT5leGl0RnVsbHNjcmVlbigpOworICAgIG1f
ZnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5yZWxlYXNlKCk7Cit9CisjZW5kaWYKKworYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25z
dAoreworI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykgJiYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA9PSAxMDUwCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS83
Mzg5OTQ1PgorICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5k
aWYKK30KKworUGxhdGZvcm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpw
bGF0Zm9ybU1lZGlhKCkgY29uc3QKK3sKKyNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8p
CisgICAgUGxhdGZvcm1NZWRpYSBwOworICAgIHAudHlwZSA9IFBsYXRmb3JtTWVkaWE6OkdTdHJl
YW1lckdXb3JsZFR5cGU7CisgICAgcC5tZWRpYS5nc3RyZWFtZXJHV29ybGQgPSBtX2dzdEdXb3Js
ZC5nZXQoKTsKKyAgICByZXR1cm4gcDsKKyNlbHNlCisgICAgcmV0dXJuIE5vUGxhdGZvcm1NZWRp
YTsKKyNlbmRpZgorfQorCitNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlOjptb3ZpZUxvYWRUeXBlKCkgY29uc3QKK3sKKyAgICBpZiAobV9y
ZWFkeVN0YXRlID09IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKKyAgICAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyOjpVbmtub3duOworCisgICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQorICAgICAgICBy
ZXR1cm4gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW07CisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6
OkRvd25sb2FkOworfQorCisvLyBjcmVhdGVzIGFuZCBpbml0aWFsaXplcyBhIGJ1bmNoIG9mIGlu
dGVybmFsIGludGVybmFsIHZhcmlhYmxlcywgYW5kIHJldHVybnMgYQorLy8gcG9pbnRlciB0byB0
aGUgZWxlbWVudCB0aGF0IHNob3VsZCByZWNlaXZlIHRoZSBkYXRhIGZsb3cgZmlyc3QKK0dzdEVs
ZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZVZpZGVvU2luayhH
c3RFbGVtZW50KiBwaXBlbGluZSkKK3sKKyAgICBpZiAoIWluaXRpYWxpemVHU3RyZWFtZXIoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCisg
ICAgbV9nc3RHV29ybGQgPSBHU3RyZWFtZXJHV29ybGQ6OmNyZWF0ZUdXb3JsZChwaXBlbGluZSk7
CisgICAgbV93ZWJraXRWaWRlb1NpbmsgPSB3ZWJraXRWaWRlb1NpbmtOZXcobV9nc3RHV29ybGQu
Z2V0KCkpOworI2Vsc2UKKyAgICBtX3dlYmtpdFZpZGVvU2luayA9IHdlYmtpdFZpZGVvU2lua05l
dygpOworI2VuZGlmCisgICAgbV92aWRlb1NpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQobV93ZWJraXRWaWRlb1NpbmsuZ2V0KCksICJzaW5rIikpOworCisgICAg
bV9yZXBhaW50SGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJraXRWaWRlb1NpbmsuZ2V0
KCksICJyZXBhaW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlUmVw
YWludENhbGxiYWNrKSwgdGhpcyk7CisKKyNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8p
CisgICAgLy8gQnVpbGQgYSBuZXcgdmlkZW8gc2luayBjb25zaXN0aW5nIG9mIGEgYmluIGNvbnRh
aW5pbmcgYSB0ZWUKKyAgICAvLyAobWVhbnQgdG8gZGlzdHJpYnV0ZSBkYXRhIHRvIG11bHRpcGxl
IHZpZGVvIHNpbmtzKSBhbmQgb3VyCisgICAgLy8gaW50ZXJuYWwgdmlkZW8gc2luay4gRm9yIGZ1
bGxzY3JlZW4gd2UgY3JlYXRlIGFuIGF1dG92aWRlb3NpbmsKKyAgICAvLyBhbmQgaW5pdGlhbGx5
IGJsb2NrIHRoZSBkYXRhIGZsb3cgdG93YXJkcyBpdCBhbmQgY29uZmlndXJlIGl0CisKKyAgICBt
X3ZpZGVvU2lua0JpbiA9IGdzdF9iaW5fbmV3KCJ2aWRlby1zaW5rIik7CisKKyAgICBHc3RFbGVt
ZW50KiB2aWRlb1RlZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgidGVlIiwgInZpZGVvVGVl
Iik7CisgICAgR3N0RWxlbWVudCogcXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInF1
ZXVlIiwgMCk7CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIEdSZWZQdHI8R3N0UGFk
PiBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHZpZGVvVGVl
LCAic2luayIpKTsKKyAgICBHU1RfT0JKRUNUX0ZMQUdfU0VUKEdTVF9PQkpFQ1Qoc2lua1BhZC5n
ZXQoKSksIEdTVF9QQURfRkxBR19QUk9YWV9BTExPQ0FUSU9OKTsKKyNlbmRpZgorCisgICAgZ3N0
X2Jpbl9hZGRfbWFueShHU1RfQklOKG1fdmlkZW9TaW5rQmluLmdldCgpKSwgdmlkZW9UZWUsIHF1
ZXVlLCBOVUxMKTsKKworICAgIC8vIExpbmsgYSBuZXcgc3JjIHBhZCBmcm9tIHRlZSB0byBxdWV1
ZTEuCisgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwodmlkZW9UZWUsIDAsIHF1ZXVlLCAi
c2luayIsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKKyNlbmRpZgorCisgICAgR3N0RWxl
bWVudCogYWN0dWFsVmlkZW9TaW5rID0gMDsKKyAgICBtX2Zwc1NpbmsgPSBnc3RfZWxlbWVudF9m
YWN0b3J5X21ha2UoImZwc2Rpc3BsYXlzaW5rIiwgInNpbmsiKTsKKyAgICBpZiAobV9mcHNTaW5r
KSB7CisgICAgICAgIC8vIFRoZSB2ZXJib3NlIHByb3BlcnR5IGhhcyBiZWVuIGFkZGVkIGluIC1i
YWQgMC4xMC4yMi4gTWFraW5nCisgICAgICAgIC8vIHRoaXMgd2hvbGUgY29kZSBkZXBlbmQgb24g
aXQgYmVjYXVzZSB3ZSBkb24ndCB3YW50CisgICAgICAgIC8vIGZwc2RpcGxheXNpbmsgdG8gc3Bp
dCBkYXRhIG9uIHN0ZG91dC4KKyAgICAgICAgR3N0RWxlbWVudEZhY3RvcnkqIGZhY3RvcnkgPSBH
U1RfRUxFTUVOVF9GQUNUT1JZKEdTVF9FTEVNRU5UX0dFVF9DTEFTUyhtX2Zwc1NpbmspLT5lbGVt
ZW50ZmFjdG9yeSk7CisgICAgICAgIGlmIChnc3RfcGx1Z2luX2ZlYXR1cmVfY2hlY2tfdmVyc2lv
bihHU1RfUExVR0lOX0ZFQVRVUkUoZmFjdG9yeSksIDAsIDEwLCAyMikpIHsKKyAgICAgICAgICAg
IGdfb2JqZWN0X3NldChtX2Zwc1NpbmssICJzaWxlbnQiLCBUUlVFICwgTlVMTCk7CisKKyAgICAg
ICAgICAgIC8vIFR1cm4gb2ZmIHRleHQgb3ZlcmxheSB1bmxlc3MgbG9nZ2luZyBpcyBlbmFibGVk
LgorI2lmIExPR19ESVNBQkxFRAorICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fZnBzU2luaywg
InRleHQtb3ZlcmxheSIsIEZBTFNFICwgTlVMTCk7CisjZWxzZQorICAgICAgICAgICAgV1RGTG9n
Q2hhbm5lbCogY2hhbm5lbCA9IGdldENoYW5uZWxGcm9tTmFtZSgiTWVkaWEiKTsKKyAgICAgICAg
ICAgIGlmIChjaGFubmVsLT5zdGF0ZSAhPSBXVEZMb2dDaGFubmVsT24pCisgICAgICAgICAgICAg
ICAgZ19vYmplY3Rfc2V0KG1fZnBzU2luaywgInRleHQtb3ZlcmxheSIsIEZBTFNFICwgTlVMTCk7
CisjZW5kaWYgLy8gTE9HX0RJU0FCTEVECisKKyAgICAgICAgICAgIGlmIChnX29iamVjdF9jbGFz
c19maW5kX3Byb3BlcnR5KEdfT0JKRUNUX0dFVF9DTEFTUyhtX2Zwc1NpbmspLCAidmlkZW8tc2lu
ayIpKSB7CisgICAgICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fZnBzU2luaywgInZpZGVvLXNp
bmsiLCBtX3dlYmtpdFZpZGVvU2luay5nZXQoKSwgTlVMTCk7CisjaWYgVVNFKE5BVElWRV9GVUxM
U0NSRUVOX1ZJREVPKQorICAgICAgICAgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV92aWRl
b1NpbmtCaW4uZ2V0KCkpLCBtX2Zwc1NpbmspOworI2VuZGlmCisgICAgICAgICAgICAgICAgYWN0
dWFsVmlkZW9TaW5rID0gbV9mcHNTaW5rOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgbV9mcHNTaW5rID0gMDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2Zwc1Np
bmsgPSAwOworICAgIH0KKworICAgIGlmICghbV9mcHNTaW5rKSB7CisjaWYgVVNFKE5BVElWRV9G
VUxMU0NSRUVOX1ZJREVPKQorICAgICAgICBnc3RfYmluX2FkZChHU1RfQklOKG1fdmlkZW9TaW5r
QmluLmdldCgpKSwgbV93ZWJraXRWaWRlb1NpbmsuZ2V0KCkpOworI2VuZGlmCisgICAgICAgIGFj
dHVhbFZpZGVvU2luayA9IG1fd2Via2l0VmlkZW9TaW5rLmdldCgpOworICAgIH0KKworICAgIEFT
U0VSVChhY3R1YWxWaWRlb1NpbmspOworCisjaWYgVVNFKE5BVElWRV9GVUxMU0NSRUVOX1ZJREVP
KQorICAgIC8vIEZhc3RlciBlbGVtZW50cyBsaW5raW5nLgorICAgIGdzdF9lbGVtZW50X2xpbmtf
cGFkc19mdWxsKHF1ZXVlLCAic3JjIiwgYWN0dWFsVmlkZW9TaW5rLCAic2luayIsIEdTVF9QQURf
TElOS19DSEVDS19OT1RISU5HKTsKKworICAgIC8vIEFkZCBhIGdob3N0cGFkIHRvIHRoZSBiaW4g
c28gaXQgY2FuIHByb3h5IHRvIHRlZS4KKyAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRH
UmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHZpZGVvVGVlLCAic2luayIpKTsKKyAgICBn
c3RfZWxlbWVudF9hZGRfcGFkKG1fdmlkZW9TaW5rQmluLmdldCgpLCBnc3RfZ2hvc3RfcGFkX25l
dygic2luayIsIHBhZC5nZXQoKSkpOworCisgICAgLy8gU2V0IHRoZSBiaW4gYXMgdmlkZW8gc2lu
ayBvZiBwbGF5YmluLgorICAgIHJldHVybiBtX3ZpZGVvU2lua0Jpbi5nZXQoKTsKKyNlbHNlCisg
ICAgcmV0dXJuIGFjdHVhbFZpZGVvU2luazsKKyNlbmRpZgorfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6OnNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR3N0U3RyZWFtVm9s
dW1lKiB2b2x1bWUpCit7CisgICAgQVNTRVJUKCFtX3ZvbHVtZSk7CisgICAgbV92b2x1bWUgPSB2
b2x1bWU7CisKKyAgICBnX29iamVjdF9zZXQobV92b2x1bWUuZ2V0KCksICJtdXRlIiwgbV9wbGF5
ZXItPm11dGVkKCksICJ2b2x1bWUiLCBtX3BsYXllci0+dm9sdW1lKCksIE5VTEwpOworCisgICAg
Z19zaWduYWxfY29ubmVjdChtX3ZvbHVtZS5nZXQoKSwgIm5vdGlmeTo6dm9sdW1lIiwgR19DQUxM
QkFDSyhtZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fdm9sdW1lLmdldCgpLCAibm90aWZ5OjptdXRlIiwgR19DQUxM
QkFDSyhtZWRpYVBsYXllclByaXZhdGVNdXRlQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Cit9CisK
K3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmRlY29kZWRGcmFtZUNv
dW50KCkgY29uc3QKK3sKKyAgICBndWludDY0IGRlY29kZWRGcmFtZXMgPSAwOworICAgIGlmICht
X2Zwc1NpbmspCisgICAgICAgIGdfb2JqZWN0X2dldChtX2Zwc1NpbmssICJmcmFtZXMtcmVuZGVy
ZWQiLCAmZGVjb2RlZEZyYW1lcywgTlVMTCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihkZWNvZGVkRnJhbWVzKTsKK30KKwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6ZHJvcHBlZEZyYW1lQ291bnQoKSBjb25zdAoreworICAgIGd1aW50NjQgZnJh
bWVzRHJvcHBlZCA9IDA7CisgICAgaWYgKG1fZnBzU2luaykKKyAgICAgICAgZ19vYmplY3RfZ2V0
KG1fZnBzU2luaywgImZyYW1lcy1kcm9wcGVkIiwgJmZyYW1lc0Ryb3BwZWQsIE5VTEwpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJhbWVzRHJvcHBlZCk7Cit9CisKK3Vuc2ln
bmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmF1ZGlvRGVjb2RlZEJ5dGVDb3Vu
dCgpIGNvbnN0Cit7CisgICAgR3N0UXVlcnkqIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlv
bihHU1RfRk9STUFUX0JZVEVTKTsKKyAgICBnaW50NjQgcG9zaXRpb24gPSAwOworCisgICAgaWYg
KGF1ZGlvU2luaygpICYmIGdzdF9lbGVtZW50X3F1ZXJ5KGF1ZGlvU2luaygpLCBxdWVyeSkpCisg
ICAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKKwor
ICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihwb3NpdGlvbik7Cit9CisKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6OnZpZGVvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0Cit7CisgICAgR3N0UXVlcnkqIHF1
ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbihHU1RfRk9STUFUX0JZVEVTKTsKKyAgICBnaW50
NjQgcG9zaXRpb24gPSAwOworCisgICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5KG1fd2Via2l0Vmlk
ZW9TaW5rLmdldCgpLCBxdWVyeSkpCisgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbihx
dWVyeSwgMCwgJnBvc2l0aW9uKTsKKworICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbik7Cit9CisKK30KKworI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTc5ZmU4ODhkMDYzZTgzY2I5NThiZTFmOTg1
ZWRmOWE4ZWZiMjliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaApAQCAt
MCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2Vy
IDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5M
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlX2gKKyNkZWZpbmUgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZV9oCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NU
UkVBTUVSKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1lZGlh
UGxheWVyUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdzdC9nc3Qu
aD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEK
KyNpbmNsdWRlIDxnc3QvYXVkaW8vc3RyZWFtdm9sdW1lLmg+CisjZWxzZQorI2luY2x1ZGUgPGdz
dC9pbnRlcmZhY2VzL3N0cmVhbXZvbHVtZS5oPgorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRWaWRlb1NpbmsgV2ViS2l0VmlkZW9TaW5rOwordHlwZWRlZiBzdHJ1Y3QgX0dzdEJ1ZmZl
ciBHc3RCdWZmZXI7Cit0eXBlZGVmIHN0cnVjdCBfR3N0TWVzc2FnZSBHc3RNZXNzYWdlOwordHlw
ZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnQgR3N0RWxlbWVudDsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyOworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBHU3Ry
ZWFtZXJHV29ybGQ7CisKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UgOiBw
dWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKKworcHVibGljOgorICAgIH5NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKCk7CisKKyAgICBJbnRTaXplIG5hdHVyYWxTaXpl
KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFZvbHVtZShmbG9hdCk7CisgICAgZmxvYXQgdm9sdW1l
KCkgY29uc3Q7CisgICAgdm9pZCB2b2x1bWVDaGFuZ2VkKCk7CisgICAgdm9pZCBub3RpZnlQbGF5
ZXJPZlZvbHVtZUNoYW5nZSgpOworCisgICAgYm9vbCBzdXBwb3J0c011dGluZygpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIHNldE11dGVkKGJvb2wpOworICAgIGJvb2wgbXV0ZWQo
KSBjb25zdDsKKyAgICB2b2lkIG11dGVDaGFuZ2VkKCk7CisgICAgdm9pZCBub3RpZnlQbGF5ZXJP
Zk11dGUoKTsKKworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkg
Y29uc3Q7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0Owor
CisgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIHsgfQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJ
bnRTaXplJik7CisgICAgdm9pZCBzaXplQ2hhbmdlZCgpOworCisgICAgdm9pZCB0cmlnZ2VyUmVw
YWludChHc3RCdWZmZXIqKTsKKyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGZsb2F0IG1heFRpbWVMb2FkZWQo
KSBjb25zdCB7IHJldHVybiAwLjA7IH0KKworI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURF
TykKKyAgICB2b2lkIGVudGVyRnVsbHNjcmVlbigpOworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4o
KTsKKyAgICBib29sIGNhbkVudGVyRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KyNlbmRpZgorCisgICAgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdDsKKyAgICBQbGF0
Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEoKSBjb25zdDsKKworICAgIE1lZGlhUGxheWVyOjpNb3Zp
ZUxvYWRUeXBlIG1vdmllTG9hZFR5cGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNMaXZl
U3RyZWFtKCkgY29uc3QgPSAwOworCisgICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyKCkgY29u
c3QgeyByZXR1cm4gbV9wbGF5ZXI7IH0KKworICAgIHVuc2lnbmVkIGRlY29kZWRGcmFtZUNvdW50
KCkgY29uc3Q7CisgICAgdW5zaWduZWQgZHJvcHBlZEZyYW1lQ291bnQoKSBjb25zdDsKKyAgICB1
bnNpZ25lZCBhdWRpb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdDsKKyAgICB1bnNpZ25lZCB2aWRl
b0RlY29kZWRCeXRlQ291bnQoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2UoTWVkaWFQbGF5ZXIqKTsKKyAgICBHc3RFbGVtZW50KiBjcmVh
dGVWaWRlb1NpbmsoR3N0RWxlbWVudCogcGlwZWxpbmUpOworICAgIHZvaWQgc2V0U3RyZWFtVm9s
dW1lRWxlbWVudChHc3RTdHJlYW1Wb2x1bWUqKTsKKyAgICB2aXJ0dWFsIEdzdEVsZW1lbnQqIGF1
ZGlvU2luaygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIE1lZGlhUGxheWVyKiBtX3BsYXll
cjsKKyAgICBHUmVmUHRyPEdzdFN0cmVhbVZvbHVtZT4gbV92b2x1bWU7CisgICAgR1JlZlB0cjxH
c3RFbGVtZW50PiBtX3dlYmtpdFZpZGVvU2luazsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1f
dmlkZW9TaW5rQmluOworICAgIEdzdEVsZW1lbnQqIG1fZnBzU2luazsKKyAgICBNZWRpYVBsYXll
cjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CisgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0
ZSBtX25ldHdvcmtTdGF0ZTsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBHc3RCdWZmZXIqIG1f
YnVmZmVyOworI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKKyAgICBSZWZQdHI8R1N0
cmVhbWVyR1dvcmxkPiBtX2dzdEdXb3JsZDsKKyAgICBPd25QdHI8RnVsbHNjcmVlblZpZGVvQ29u
dHJvbGxlckdTdHJlYW1lcj4gbV9mdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOworI2VuZGlmCisg
ICAgZ3VpbnQgbV92b2x1bWVUaW1lckhhbmRsZXI7CisgICAgZ3VpbnQgbV9tdXRlVGltZXJIYW5k
bGVyOworICAgIGd1aW50IG1fcmVwYWludEhhbmRsZXI7CisgICAgR1JlZlB0cjxHc3RQYWQ+IG1f
dmlkZW9TaW5rUGFkOworICAgIG11dGFibGUgSW50U2l6ZSBtX3ZpZGVvU2l6ZTsKK307Cit9CisK
KyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9TdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlZmU2
ZDNkNGI0ZDAwOGNmZWVmZGQ4Y2NjYzNlOWE1YjQ1ZGY5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvU3RyZWFtTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIlN0cmVhbU1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVyR1dvcmxk
LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJLVVJMLmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVk
ZSAiTWVkaWFTdHJlYW1SZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSAiVmlkZW9TaW5rR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIq
IHBsYXllcikKKyAgICA6IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UocGxheWVyKQor
ICAgICwgbV92aWRlb1NpbmtCaW4oMCkKKyAgICAsIG1fYXVkaW9TaW5rQmluKDApCisgICAgLCBt
X3BhdXNlZCh0cnVlKQorICAgICwgbV9zdG9wcGVkKHRydWUpCit7CisgICAgTE9HKE1lZGlhLCAi
U3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIC0gQ3JlYXRpbmcgU3RyZWFtIG1lZGlh
IHBsYXllciIpOworfQorCitTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6On5TdHJl
YW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoKQoreworICAgIExPRyhNZWRpYSwgIlN0cmVh
bU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciBkZXN0cnVjdG9yIGNhbGxlZC4iKTsKKworICAg
IGlmIChtX2J1ZmZlcikKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihtX2J1ZmZlcik7CisgICAg
bV9idWZmZXIgPSAwOworCisgICAgc3RvcCgpOworCisgICAgaWYgKG1fYXVkaW9TaW5rQmluKSB7
CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYobV9hdWRpb1NpbmtCaW4pOworICAgICAgICBtX2F1
ZGlvU2lua0JpbiA9IDA7CisgICAgfQorCisgICAgaWYgKG1fdmlkZW9TaW5rQmluKSB7CisgICAg
ICAgIGdzdF9vYmplY3RfdW5yZWYobV92aWRlb1NpbmtCaW4pOworICAgICAgICBtX3ZpZGVvU2lu
a0JpbiA9IDA7CisgICAgfQorfQorCit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6cGxheSgpCit7CisgICAgTE9HKE1lZGlhLCAiU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpwbGF5KCkgY2FsbGVkLiIpOworCisgICAgaWYgKCFtX3N0cmVhbURlc2NyaXB0
b3IgfHwgbV9zdHJlYW1EZXNjcmlwdG9yLT5lbmRlZCgpKSB7CisgICAgICAgIG1fcmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgbG9hZGluZ0ZhaWxlZChNZWRp
YVBsYXllcjo6RW1wdHkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wYXVzZWQg
PSBmYWxzZTsKKyAgICBpbnRlcm5hbExvYWQoKTsKK30KKwordm9pZCBTdHJlYW1NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnBhdXNlKCkKK3sKKyAgICBMT0coTWVkaWEsICJTdHJlYW1NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhdXNlKCkgY2FsbGVkLiIpOworICAgIG1fcGF1c2Vk
ID0gdHJ1ZTsKKyAgICBzdG9wKCk7Cit9CisKKworYm9vbCBTdHJlYW1NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6Omhhc1ZpZGVvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fdmlkZW9Tb3Vy
Y2VJZC5pc0VtcHR5KCk7Cit9CisKK2Jvb2wgU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpoYXNBdWRpbygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2F1ZGlvU291cmNlSWQuaXNF
bXB0eSgpOworfQorCit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9h
ZChjb25zdCBTdHJpbmcgJnVybCkKK3sKKyAgICBMT0coTWVkaWEsICJTdHJlYW1NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIgLSBsb2FkICVzIiwgdXJsLnV0ZjgoKS5kYXRhKCkpOworCisgICAg
bV9zdHJlYW1EZXNjcmlwdG9yID0gTWVkaWFTdHJlYW1SZWdpc3RyeTo6cmVnaXN0cnkoKS5sb29r
dXBNZWRpYVN0cmVhbURlc2NyaXB0b3IodXJsKTsKKyAgICBpZiAoIW1fc3RyZWFtRGVzY3JpcHRv
ciB8fCBtX3N0cmVhbURlc2NyaXB0b3ItPmVuZGVkKCkpIHsKKyAgICAgICAgbG9hZGluZ0ZhaWxl
ZChNZWRpYVBsYXllcjo6TmV0d29ya0Vycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgIG1fcGxheWVyLT5uZXR3b3JrU3Rh
dGVDaGFuZ2VkKCk7CisgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisKKyAgICBp
ZiAoIWludGVybmFsTG9hZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzVmlkZW8o
KSkgeworICAgICAgICAvLyBXYWl0IGZvciBmaXJzdCB2aWRlbyBmcmFtZSB0byBzZXQgSGF2ZUVu
b3VnaERhdGEKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5n
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGdvIGdvIGdvCisgICAgICAgIG1fcmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICB9CisKKyAgICBtX3BsYXllci0+
cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKworfQorCit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9y
KQoreworCisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IGVycm9yKSB7CisgICAgICAgIG1fbmV0
d29ya1N0YXRlID0gZXJyb3I7CisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2Vk
KCk7CisgICAgfQorICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVOb3Ro
aW5nKSB7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsK
KyAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgfQorfQorCitib29s
IFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdHJlYW1NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmludGVybmFsTG9hZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzdG9wKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK1Bhc3NPd25Q
dHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKQoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKHBsYXllcikpOworfQor
Cit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVnaXN0ZXJNZWRpYUVu
Z2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgaWYgKGlzQXZhaWxh
YmxlKCkpCisgICAgICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBw
b3J0c1R5cGUsIDAsIDAsIDApOworfQorCit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcykKK3sKKyAg
ICB0eXBlcy5hZGQoU3RyaW5nKCJ2aWRlby94LXJhdy15dXYiKSk7CisgICAgdHlwZXMuYWRkKFN0
cmluZygiYXVkaW8veC1yYXctaW50IikpOworfQorCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBl
IFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKGNvZGVjcyk7CisKKyAgICBp
ZiAodXJsLmlzTnVsbCgpIHx8IHVybC5pc0VtcHR5KCkgfHwgIXVybC5pc1ZhbGlkKCkpCisgICAg
ICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICByZXR1cm4gTWVk
aWFTdHJlYW1SZWdpc3RyeTo6cmVnaXN0cnkoKS5sb29rdXBNZWRpYVN0cmVhbURlc2NyaXB0b3Io
dXJsLnN0cmluZygpKSA/IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJ
c05vdFN1cHBvcnRlZDsKK30KKworYm9vbCBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmlzQXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4gaW5pdGlhbGl6ZUdTdHJlYW1lcigpOwor
fQorCit2b2lkIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlQ2hhbmdl
ZFN0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1N0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1N0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmM1NzIwYWEzZWQ3OTRlYzZiOTE1OWVmZmY3Yjc4MjBhNmJmMDdhMWYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvU3RyZWFtTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSwxMDEg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFN0cmVh
bU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcl9oCisjZGVmaW5lIFN0cmVhbU1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcl9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NU
UkVBTUVSKQorCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIgor
I2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEtVUkw7CitjbGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3I7
CisKK2NsYXNzIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciA6IHB1YmxpYyBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLCBwcml2YXRlIE1lZGlhU3RyZWFtU291cmNlOjpP
YnNlcnZlciB7CisgICAgZnJpZW5kIHZvaWQgbWVkaWFQbGF5ZXJQcml2YXRlUmVwYWludENhbGxi
YWNrKFdlYktpdFZpZGVvU2luayosIEdzdEJ1ZmZlciosIFN0cmVhbU1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lciopOworcHVibGljOgorICAgIH5TdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIoKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5l
UmVnaXN0cmFyKTsKKworICAgIHZpcnR1YWwgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYpOworICAg
IHZpcnR1YWwgdm9pZCBjYW5jZWxMb2FkKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFy
ZVRvUGxheSgpIHsgfQorICAgIHZvaWQgcGxheSgpOworICAgIHZvaWQgcGF1c2UoKTsKKworICAg
IGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKKyAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIGZsb2F0IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdmly
dHVhbCBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc2VlayhmbG9hdCkgeyB9CisgICAgdmlydHVhbCBib29sIHNlZWtpbmcoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFJhdGUoZmxvYXQpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZXNQaXRjaChib29sKSB7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgcGF1c2VkKCkgY29uc3QgeyByZXR1cm4gbV9wYXVzZWQ7IH0KKworICAgIHZpcnR1YWwg
Ym9vbCBoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCB2b2lkIHNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sKSB7IH07CisKKyAgICB2aXJ0
dWFsIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCB7IHJldHVybiBUaW1l
UmFuZ2VzOjpjcmVhdGUoKTsgfQorICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdCB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
KworICAgIHZpcnR1YWwgYm9vbCBjYW5Mb2FkUG9zdGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zdGVyKGNvbnN0IFN0cmluZyYpIHsgfQorCisgICAg
dm9pZCBzb3VyY2VDaGFuZ2VkU3RhdGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNMaXZlU3RyZWFt
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCitwcml2YXRlOgorICAgIFN0cmVhbU1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcihNZWRpYVBsYXllciopOworCisgICAgc3RhdGljIFBhc3NPd25Q
dHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBjcmVhdGUoTWVkaWFQbGF5ZXIqKTsKKwor
ICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYpOworICAg
IHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBTdHJp
bmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzLCBjb25zdCBLVVJMJik7CisgICAgc3RhdGlj
IGJvb2wgaXNBdmFpbGFibGUoKTsKKyAgICB2b2lkIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6
Ok5ldHdvcmtTdGF0ZSBlcnJvcik7CisgICAgYm9vbCBpbnRlcm5hbExvYWQoKTsKKyAgICB2b2lk
IHN0b3AoKTsKKworcHJpdmF0ZToKKyAgICBHc3RFbGVtZW50KiBtX3ZpZGVvU2lua0JpbjsKKyAg
ICBHc3RFbGVtZW50KiBtX2F1ZGlvU2lua0JpbjsKKyAgICBib29sIG1fcGF1c2VkOworICAgIGJv
b2wgbV9zdG9wcGVkOworICAgIFN0cmluZyBtX3ZpZGVvU291cmNlSWQ7CisgICAgU3RyaW5nIG1f
YXVkaW9Tb3VyY2VJZDsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBtX3N0cmVh
bURlc2NyaXB0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjZW5kaWYgLy8gU3RyZWFt
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR3RrLmNwcAppbmRleCA1NDg4MWZlNjIxODllMmIzNGFmMDk5MTJkOGYxMTllYjJiMzI3
MzhjLi40NmU4MWNjZWM4OTJhZTgxMzUzOWY5NmUwOWEzYjMwNTc0NDVhNjYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRnVsbHNjcmVlblZpZGVvQ29u
dHJvbGxlckd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5j
bHVkZSAiR1N0cmVhbWVyR1dvcmxkLmgiCiAjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgogI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyLmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIgogCiAj
aW5jbHVkZSA8Z2RrL2dkay5oPgogI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CkBAIC0xMjQs
NyArMTI0LDcgQEAgc3RhdGljIHZvaWQgdm9sdW1lVmFsdWVDaGFuZ2VkKEd0a1NjYWxlQnV0dG9u
ICpidXR0b24sIGdkb3VibGUgdmFsdWUsIEZ1bGxzY3JlZW4KIH0KIAogCi1GdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR3RrOjpGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQorRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlKiBwbGF5ZXIpCiAgICAgOiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyKHBs
YXllcikKICAgICAsIG1faHVkVGltZW91dElkKDApCiAgICAgLCBtX3Byb2dyZXNzQmFyVXBkYXRl
SWQoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5oCmluZGV4IDRiOWYzZWIy
Mjg4YmEwODQ1ODNkYTg4YTRiZjI5YTBkZmU2N2Q5NDkuLmQ1NzcwYzU5ODg2NjQ3NGJhOTU0ODVi
M2Y0MWIyYzQzYjY5MTQ0YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsu
aApAQCAtMjgsNyArMjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZ1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXJHdGsgOiBwdWJsaWMgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdT
dHJlYW1lciB7CiBwdWJsaWM6Ci0gICAgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayhNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVy
R3RrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqKTsKIAogICAgIHZvaWQgZ3RrQ29u
ZmlndXJlKEdka0V2ZW50Q29uZmlndXJlKik7CiAKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0No
YW5nZUxvZwppbmRleCAzYjcwNTcwNTQzMWUxODQyOTZjOTBmYzNkMDBiYWFkOWMxNDI3MjJhLi5k
YjVjZWFmMGJlNTEyOTQ0ODczYzEzOGRlNGQ5MThjOGEzNjI4Yjg2IDEwMDY0NAotLS0gYS9DaGFu
Z2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTMtMDItMDQgIEpvbmF0
aG9uIEpvbmdzbWEgIDxqb25hdGhvbi5qb25nc21hQGNvbGxhYm9yYS5jb20+CisKKyAgICAgICAg
W2d0a10gY29yZSBpbXBsZW1lbnRhdGlvbiBmb3IgZ2V0VXNlck1lZGlhIEFQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMjYxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6IHJl
bW92ZWQgZmFyc3RyZWFtIHJlcXVpcmVtZW50IGZvciBub3cgc2luY2UgaXQncworICAgICAgICBu
b3QgYWN0dWFsbHkgdXNlZCB5ZXQgYW5kIG1ha2VzIGl0IG1vcmUgZGlmZmljdWx0IHRvIGJ1aWxk
IGFuZCB0ZXN0CisKIDIwMTMtMDItMDIgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgW0NNYWtlXSBBZG9wdCB0aGUgV2luQ0UgcG9ydCB0byBuZXcgQ01h
a2UKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCA4NWZmNTU1
ODEzN2EyOWJhZTllNjk3ZTMxYzEwNzg1YzY2MTVmMzgwLi4zMWZiNDA0Y2UyMDE3NGQ3OTMwZGM5
NDUzNjk5YWFmMzI3M2I1ZTI0IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmln
dXJlLmFjCkBAIC05OTIsMjEgKzk5Miw2IEBAIGlmIHRlc3QgIiRlbmFibGVfdmlkZW8iID0gInll
cyIgfHwgdGVzdCAiJGVuYWJsZV93ZWJfYXVkaW8iID0gInllcyI7IHRoZW4KICAgIEFDX1NVQlNU
KFtHU1RSRUFNRVJfTElCU10pCiBmaQogCi0jIGZhcnN0cmVhbS0wLjEgZGVwZW5kcyBvbiBnc3Ry
ZWFtZXIgMC4xMCBjdXJyZW50bHkuIERpc2FibGUKLSMgbWVkaWFfc3RyZWFtIGlmIGdzdHJlYW1l
ciAxLjAgYnVpbGQgc3VwcG9ydCBpcyBlbmFibGVkLgotaWYgdGVzdCAiJGhhdmVfZ3N0cmVhbWVy
IiAhPSAieWVzIiB8fCB0ZXN0ICIkR1NUX0FQSV9WRVJTSU9OIiA9ICIxLjAiOyB0aGVuCi0gICBp
ZiB0ZXN0ICIkZW5hYmxlX21lZGlhX3N0cmVhbSIgPSAieWVzIjsgdGhlbgotICAgICAgQUNfTVNH
X1dBUk4oW0Rpc2FibGluZyBNZWRpYSBTdHJlYW0gYmVjYXVzZSBubyBHU3RyZWFtZXIgMC4xMCBz
dXBwb3J0IGlzIGVuYWJsZWRdKQotICAgZmkKLSAgIGVuYWJsZV9tZWRpYV9zdHJlYW09ZmFsc2UK
LWZpCi1pZiB0ZXN0ICIkZW5hYmxlX21lZGlhX3N0cmVhbSIgPSAieWVzIjsgdGhlbgotICAgUEtH
X0NIRUNLX01PRFVMRVMoW0ZBUlNUUkVBTV0sIFtmYXJzdHJlYW0tMC4xXSwKLSAgICAgICAgICAg
ICAgICAgICAgIFtoYXZlX2ZhcnN0cmVhbT15ZXNdLCBbZW5hYmxlX21lZGlhX3N0cmVhbT1mYWxz
ZV0pCi0gICBBQ19TVUJTVChbRkFSU1RSRUFNX0NGTEFHU10pCi0gICBBQ19TVUJTVChbRkFSU1RS
RUFNX0xJQlNdKQotZmkKLQogYWNjZWxlcmF0aW9uX2JhY2tlbmRfZGVzY3JpcHRpb249JHdpdGhf
YWNjZWxlcmF0aW9uX2JhY2tlbmQKIGlmIHRlc3QgIiR3aXRoX2FjY2VsZXJhdGlvbl9iYWNrZW5k
IiA9ICJjbHV0dGVyIjsgdGhlbgogICAgUEtHX0NIRUNLX01PRFVMRVMoQ0xVVFRFUiwgY2x1dHRl
ci0xLjAgPj0gJENMVVRURVJfUkVRVUlSRURfVkVSU0lPTikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186691</attachid>
            <date>2013-02-05 13:23:44 -0800</date>
            <delta_ts>2013-02-06 08:49:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100261-20130205152021.patch</filename>
            <type>text/plain</type>
            <size>65633</size>
            <attacher name="Jonathon Jongsma (jonner)">jonathon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZmZDU4NGJjNWY3ODQx
YjViMWJmMWJiMmMzNGNiNzQyMWIwMDg3ZC4uZWEzZDI5NmVkODFjZDZkZmI1OGZhYzE0OTU3ZTUx
ZmZjOGIwMTIyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDEzLTAyLTA1ICBKb25h
dGhvbiBKb25nc21hICA8am9uYXRob24uam9uZ3NtYUBjb2xsYWJvcmEuY29tPgorCisgICAgICAg
IFtndGtdIGNvcmUgaW1wbGVtZW50YXRpb24gZm9yIGdldFVzZXJNZWRpYSBBUEkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDI2MQorCisgICAgICAg
IFJlZmFjdG9yIHRoZSBtZWRpYSBwbGF5ZXIgaW1wbGVtZW50YXRpb24gc28gdGhhdCBtb3JlIG9m
IHRoZQorICAgICAgICBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5IGNhbiBiZSBzaGFyZWQgYmV0d2Vl
biB0aGUgY3VycmVudCBtZWRpYQorICAgICAgICBiYWNrZW5kIGFuZCB0aGUgbWVkaWFzdHJlYW0g
cGxheWVyIGJhY2tlbmQuICBDb21tb24gY29kZSBpcworICAgICAgICBicm9rZW4gb3V0IGludG8g
YSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlIGNsYXNzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNpbmNlIGZ1bmN0
aW9uYWxpdHkgaXMgY292ZXJlZCBieSBleGlzdGluZyBtZWRpYSB0ZXN0cworCisgICAgICAgICog
R05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9G
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyOjpGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lci5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5oOgorICAgICAgICAoTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aXNMaXZlU3RyZWFtKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpncmVhdGVzdENvbW1vbkRpdmlzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFQ
bGF5ZXJQcml2YXRlVm9sdW1lQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Om1l
ZGlhUGxheWVyUHJpdmF0ZVZvbHVtZUNoYW5nZVRpbWVvdXRDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjptZWRpYVBsYXllclByaXZhdGVNdXRlQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6Om1lZGlhUGxheWVyUHJpdmF0ZU11dGVDaGFuZ2VUaW1lb3V0Q2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6bWVkaWFQbGF5ZXJQcml2YXRlUmVwYWludENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZTo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bmF0dXJh
bFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6c2V0Vm9sdW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6OnZvbHVtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjpub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp2b2x1bWVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5ldHdvcmtT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
OjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6OnNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2U6OnNldE11dGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om11dGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5vdGlmeVBsYXllck9mTXV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjptdXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp0cmln
Z2VyUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2U6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OmVudGVyRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzdXBwb3J0c0Z1bGxzY3Jl
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6
cGxhdGZvcm1NZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjptb3ZpZUxvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZVZpZGVvU2luayk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRTdHJlYW1Wb2x1bWVFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmRl
Y29kZWRGcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2U6OmRyb3BwZWRGcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmF1ZGlvRGVjb2RlZEJ5dGVDb3VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp2aWRlb0RlY29k
ZWRCeXRlQ291bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnN1cHBvcnRzTXV0aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnNldFZp
c2libGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bWF4VGltZUxvYWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpjYW5FbnRlckZ1bGxzY3JlZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bWVkaWFQ
bGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6YXVkaW9TaW5rKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRnVsbHNjcmVl
blZpZGVvQ29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR3RrOjpGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5oOgor
ICAgICAgICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayk6CisKIDIwMTMtMDItMDQgIFRv
bSBTZXBleiAgPHRzZXBlekBjaHJvbWlpdW0ub3JnPgogCiAgICAgICAgIFhTUyBBdWRpdG9yIGJ5
cGFzcyB2aWEgc3ZnIHRhZ3MgYW5kIHhsaW5rOmhyZWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCmluZGV4IDE3MzE2NTUwNTYyYjcyNTYzZTBlYjQyZjEyZDQyOGVkZDlhYjVkMGIuLjMyMmRl
OTEwNGVjMDNkZWRjN2VhMDljMjJmOGU2ODI4NWQzZDIxYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQpAQCAtNjA3NSw2ICs2MDc1LDggQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyR1dv
cmxkLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFn
ZUdTdHJlYW1lckNhaXJvLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRm
b3JtVmlkZW9XaW5kb3dHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNWIx
NjhkMzk5ZjIxMTg4YWE5NTM3NjcwM2UwMjJjY2NlZmMyYTdhYS4uZTE4YmRiNTI2YTczOTQ1NWM1
NWJlOGIzMmI1YzA0OTVhMjA4YzVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEy
MSw2ICsxMjEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtVmlkZW9XaW5kb3dF
ZmwuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1l
ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCmluZGV4IGU4ZjZmYzE2MmQzOTk0NWM0NDFiMGU2YzQyOTkzMGRjYWQ3
ZDBiNjUuLjI3ZTUyOWU2ZTQ3OWU4MGRmNTBkZWRjNDJkMGZmNTQxYjkzMGU4ZDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQpAQCAtMzM1MCw2ICszMzUwLDcgQEAgZW5hYmxlPyhWSURFTykgewogICAgIH0gZWxzZTog
dXNlPyhHU1RSRUFNRVIpIHsKICAgICAgICAgSEVBREVSUyArPSBcCiAgICAgICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyR1dvcmxkLmggXAorICAgICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2UuaCBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmggXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oIFwKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuaCBcCkBAIC0zMzU4LDYgKzMz
NTksNyBAQCBlbmFibGU/KFZJREVPKSB7CiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaAogICAgICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJHV29ybGQuY3BwIFwKKyAg
ICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlLmNwcCBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBcCiAgICAgICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBcCiAgICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNw
cCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdT
dHJlYW1lci5jcHAKaW5kZXggOWI4NjAwN2NmM2ExODc3OWQ2ZTRkM2I4OTM2ZmU0ZTQxMDMzNjQz
MC4uN2NmMWEzMWM1ODNjYjBiMjQzZGMyNTlmM2E5N2NiYmE4Y2FmMGNiOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0Z1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyLmNwcApA
QCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiR1N0cmVhbWVyR1dvcmxkLmgiCiAjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXIuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
aCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgiCiAjaW5jbHVk
ZSA8Z3N0L2dzdC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNDgsNyAr
NDgsNyBAQCB2b2lkIHBsYXllck11dGVDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCAqZWxlbWVudCwg
R1BhcmFtU3BlYyAqcHNwZWMsIEZ1bGxzY3JlZW5WaQogICAgIGNvbnRyb2xsZXItPm11dGVDaGFu
Z2VkKCk7CiB9CiAKLVBhc3NPd25QdHI8RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1l
cj4gRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcjo6Y3JlYXRlKE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQorUGFzc093blB0cjxGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR1N0cmVhbWVyPiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyOjpjcmVh
dGUoTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyKQogewogI2lmIFBMQVRG
T1JNKEdUSykKICAgIHJldHVybiBhZG9wdFB0cihuZXcgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxl
ckd0ayhwbGF5ZXIpKTsKQEAgLTU3LDcgKzU3LDcgQEAgUGFzc093blB0cjxGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR1N0cmVhbWVyPiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWUK
ICNlbmRpZgogfQogCi1GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyOjpGdWxsc2Ny
ZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciog
cGxheWVyKQorRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcjo6RnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlckdTdHJlYW1lcihNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBw
bGF5ZXIpCiAgICAgOiBtX3BsYXllcihwbGF5ZXIpCiAgICAgLCBtX2NsaWVudChwbGF5ZXItPm1l
ZGlhUGxheWVyKCktPm1lZGlhUGxheWVyQ2xpZW50KCkpCiAgICAgLCBtX2dzdHJlYW1lckdXb3Js
ZChwbGF5ZXItPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5nc3RyZWFtZXJHV29ybGQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRnVsbHNjcmVl
blZpZGVvQ29udHJvbGxlckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIuaAppbmRl
eCA0ODQ0YzdmYzg5ZTY5ZGMxZTMwNjEwZWFkZTY1NDE1MTFkMDg0MzMyLi45ZTE5Nzk5MGM4Nzdl
YmVmYTc0MmNiMWJjNzk5ZDUzNDA2NzFhNTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJl
YW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9G
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyLmgKQEAgLTI5LDE0ICsyOSwxNCBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHU3RyZWFtZXJHV29ybGQ7Ci1jbGFzcyBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI7CitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOwogY2xhc3MgTWVkaWFQbGF5ZXJDbGllbnQ7CiAKIGNsYXNzIEZ1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXJHU3RyZWFtZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZ1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXI+IGNyZWF0ZShNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIqIHBsYXllcik7Ci0gICAgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxl
ckdTdHJlYW1lcihNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICBzdGF0aWMgUGFz
c093blB0cjxGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyPiBjcmVhdGUoTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSopOworICAgIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xs
ZXJHU3RyZWFtZXIoTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSopOwogICAgIHZpcnR1
YWwgfkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIoKTsKIAogICAgIHZvaWQgZW50
ZXJGdWxsc2NyZWVuKCk7CkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAg
ICBTdHJpbmcgdGltZVRvU3RyaW5nKGZsb2F0IHRpbWUpOwogCi0gICAgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyKiBtX3BsYXllcjsKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlKiBtX3BsYXllcjsKICAgICBNZWRpYVBsYXllckNsaWVudCogbV9jbGllbnQ7CiAgICAgR1N0
cmVhbWVyR1dvcmxkKiBtX2dzdHJlYW1lckdXb3JsZDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCAxNjE2ZjkxMzFmYzZiNWI3MDU5ZjJj
MjhlMjg5YzQ3NWViYmZjM2QyLi4yNDFjMzJjOWU3YThmZDNmNjY2ZTQzNDYxMzE0NTRiOWI5YTFm
YzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNw
cApAQCAtMjYsNDEgKzI2LDIwIEBACiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFN
RVIpCiAKLSNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIuaCIKLSNpbmNsdWRlICJHU3RyZWFtZXJHV29y
bGQuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHU3RyZWFt
ZXJWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIkltYWdlR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSAi
SW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJLVVJM
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
ICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCi0jaW5j
bHVkZSAiVmlkZW9TaW5rR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViU291cmNlR1N0
cmVhbWVyLmgiCiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRl
by5oPgogI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotI2lm
ZGVmIEdTVF9BUElfVkVSU0lPTl8xCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL3N0cmVhbXZvbHVtZS5o
PgotI2Vsc2UKLSNpbmNsdWRlIDxnc3QvaW50ZXJmYWNlcy9zdHJlYW12b2x1bWUuaD4KLSNlbmRp
ZgotCiAvLyBHc3RQbGF5RmxhZ3MgZmxhZ3MgZnJvbSBwbGF5YmluMi4gSXQgaXMgdGhlIHBvbGlj
eSBvZiBHU3RyZWFtZXIgdG8KIC8vIG5vdCBwdWJsaWNseSBleHBvc2UgZWxlbWVudC1zcGVjaWZp
YyBlbnVtcy4gVGhhdCdzIHdoeSB0aGlzCiAvLyBHc3RQbGF5RmxhZ3MgZW51bSBoYXMgYmVlbiBj
b3BpZWQgaGVyZS4KQEAgLTk2LDE3ICs3NSw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGludCBncmVhdGVzdENvbW1vbkRpdmlzb3IoaW50
IGEsIGludCBiKQotewotICAgIHdoaWxlIChiKSB7Ci0gICAgICAgIGludCB0ZW1wID0gYTsKLSAg
ICAgICAgYSA9IGI7Ci0gICAgICAgIGIgPSB0ZW1wICUgYjsKLSAgICB9Ci0KLSAgICByZXR1cm4g
QUJTKGEpOwotfQotCiBzdGF0aWMgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlTWVzc2FnZUNh
bGxiYWNrKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lciogcGxheWVyKQogewogICAgIHJldHVybiBwbGF5ZXItPmhhbmRsZU1lc3NhZ2UobWVz
c2FnZSk7CkBAIC0xMTcsMzIgKzg1LDYgQEAgc3RhdGljIHZvaWQgbWVkaWFQbGF5ZXJQcml2YXRl
U291cmNlQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgTWVkaWEKICAgICBw
bGF5ZXItPnNvdXJjZUNoYW5nZWQoKTsKIH0KIAotc3RhdGljIHZvaWQgbWVkaWFQbGF5ZXJQcml2
YXRlVm9sdW1lQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCi17Ci0gICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hl
biBwbGF5YmluIHJlY2VpdmVzIHRoZSBub3RpZnk6OnZvbHVtZSBzaWduYWwuCi0gICAgcGxheWVy
LT52b2x1bWVDaGFuZ2VkKCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZh
dGVWb2x1bWVDaGFuZ2VUaW1lb3V0Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
KiBwbGF5ZXIpCi17Ci0gICAgLy8gVGhpcyBpcyB0aGUgY2FsbGJhY2sgb2YgdGhlIHRpbWVvdXQg
c291cmNlIGNyZWF0ZWQgaW4gOjp2b2x1bWVDaGFuZ2VkLgotICAgIHBsYXllci0+bm90aWZ5UGxh
eWVyT2ZWb2x1bWVDaGFuZ2UoKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lk
IG1lZGlhUGxheWVyUHJpdmF0ZU11dGVDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCosIEdQYXJhbVNw
ZWMqLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKLXsKLSAgICAvLyBUaGlz
IGlzIGNhbGxlZCB3aGVuIHBsYXliaW4gcmVjZWl2ZXMgdGhlIG5vdGlmeTo6bXV0ZSBzaWduYWwu
Ci0gICAgcGxheWVyLT5tdXRlQ2hhbmdlZCgpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbWVkaWFQ
bGF5ZXJQcml2YXRlTXV0ZUNoYW5nZVRpbWVvdXRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIqIHBsYXllcikKLXsKLSAgICAvLyBUaGlzIGlzIHRoZSBjYWxsYmFjayBvZiB0aGUg
dGltZW91dCBzb3VyY2UgY3JlYXRlZCBpbiA6Om11dGVDaGFuZ2VkLgotICAgIHBsYXllci0+bm90
aWZ5UGxheWVyT2ZNdXRlKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCiBzdGF0aWMgdm9pZCBt
ZWRpYVBsYXllclByaXZhdGVWaWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBH
UGFyYW1TcGVjKiwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCiB7CiAgICAg
cGxheWVyLT52aWRlb0NoYW5nZWQoKTsKQEAgLTE3MiwxMSArMTE0LDYgQEAgc3RhdGljIGdib29s
ZWFuIG1lZGlhUGxheWVyUHJpdmF0ZVZpZGVvQ2hhbmdlVGltZW91dENhbGxiYWNrKE1lZGlhUGxh
eWVyUHJpdmF0ZUcKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKLXN0YXRpYyB2b2lkIG1lZGlhUGxh
eWVyUHJpdmF0ZVJlcGFpbnRDYWxsYmFjayhXZWJLaXRWaWRlb1NpbmsqLCBHc3RCdWZmZXIgKmJ1
ZmZlciwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXJQcml2YXRlKQotewotICAg
IHBsYXllclByaXZhdGUtPnRyaWdnZXJSZXBhaW50KGJ1ZmZlcik7Ci19Ci0KIFBhc3NPd25QdHI8
TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKHBsYXllcikpOwpAQCAtMjEyLDE5ICsxNDksMTMg
QEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmlzQXZhaWxhYmxlKCkKIH0KIAog
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIo
TWVkaWFQbGF5ZXIqIHBsYXllcikKLSAgICA6IG1fcGxheWVyKHBsYXllcikKLSAgICAsIG1fd2Vi
a2l0VmlkZW9TaW5rKDApCi0gICAgLCBtX2Zwc1NpbmsoMCkKKyAgICA6IE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UocGxheWVyKQogICAgICwgbV9zb3VyY2UoMCkKICAgICAsIG1fc2Vl
a1RpbWUoMCkKICAgICAsIG1fY2hhbmdpbmdSYXRlKGZhbHNlKQogICAgICwgbV9lbmRUaW1lKG51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkKICAgICAsIG1faXNFbmRSZWFjaGVkKGZh
bHNlKQotICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQotICAgICwgbV9y
ZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKICAgICAsIG1faXNTdHJlYW1pbmco
ZmFsc2UpCi0gICAgLCBtX3NpemUoSW50U2l6ZSgpKQotICAgICwgbV9idWZmZXIoMCkKICAgICAs
IG1fbWVkaWFMb2NhdGlvbnMoMCkKICAgICAsIG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleCgw
KQogICAgICwgbV9yZXNldFBpcGVsaW5lKGZhbHNlKQpAQCAtMjQyLDggKzE3Myw2IEBAIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKE1lZGlh
UGxheWVyKiBwbGF5ZXIpCiAgICAgLCBtX2RlbGF5aW5nTG9hZChmYWxzZSkKICAgICAsIG1fbWVk
aWFEdXJhdGlvbktub3duKHRydWUpCiAgICAgLCBtX21heFRpbWVMb2FkZWRBdExhc3REaWRMb2Fk
aW5nUHJvZ3Jlc3MoMCkKLSAgICAsIG1fdm9sdW1lVGltZXJIYW5kbGVyKDApCi0gICAgLCBtX211
dGVUaW1lckhhbmRsZXIoMCkKICAgICAsIG1faGFzVmlkZW8oZmFsc2UpCiAgICAgLCBtX2hhc0F1
ZGlvKGZhbHNlKQogICAgICwgbV9hdWRpb1RpbWVySGFuZGxlcigwKQpAQCAtMjYwLDQyICsxODks
MjcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyKCkKICAgICBpZiAobV9maWxsVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9maWxs
VGltZXIuc3RvcCgpOwogCi0gICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBnc3RfYnVmZmVyX3Vu
cmVmKG1fYnVmZmVyKTsKLSAgICBtX2J1ZmZlciA9IDA7Ci0KICAgICBpZiAobV9tZWRpYUxvY2F0
aW9ucykgewogICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUobV9tZWRpYUxvY2F0aW9ucyk7CiAg
ICAgICAgIG1fbWVkaWFMb2NhdGlvbnMgPSAwOwogICAgIH0KIAotI2lmIFVTRShOQVRJVkVfRlVM
TFNDUkVFTl9WSURFTykKLSAgICBpZiAobV9mdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyKQotICAg
ICAgICBleGl0RnVsbHNjcmVlbigpOwotCi0gICAgaWYgKG1fdmlkZW9TaW5rQmluKSB7Ci0gICAg
ICAgIGdzdF9vYmplY3RfdW5yZWYobV92aWRlb1NpbmtCaW4pOwotICAgICAgICBtX3ZpZGVvU2lu
a0JpbiA9IDA7Ci0gICAgfQotI2VuZGlmCi0KICAgICBpZiAobV9wbGF5QmluKSB7CiAgICAgICAg
IEdSZWZQdHI8R3N0QnVzPiBidXMgPSB3ZWJraXRHc3RQaXBlbGluZUdldEJ1cyhHU1RfUElQRUxJ
TkUobV9wbGF5QmluLmdldCgpKSk7CiAgICAgICAgIEFTU0VSVChidXMpOwogICAgICAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoYnVzLmdldCgpLCByZWludGVycHJldF9j
YXN0PGdwb2ludGVyPihtZWRpYVBsYXllclByaXZhdGVNZXNzYWdlQ2FsbGJhY2spLCB0aGlzKTsK
ICAgICAgICAgZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoKGJ1cy5nZXQoKSk7CiAKKyAgICAg
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fcGxheUJpbi5nZXQoKSwg
cmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4obWVkaWFQbGF5ZXJQcml2YXRlU291cmNlQ2hhbmdl
ZENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
YnlfZnVuYyhtX3BsYXlCaW4uZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KG1lZGlh
UGxheWVyUHJpdmF0ZVZpZGVvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3BsYXlCaW4uZ2V0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Z3BvaW50ZXI+KG1lZGlhUGxheWVyUHJpdmF0ZUF1ZGlvQ2hhbmdlZENhbGxiYWNr
KSwgdGhpcyk7CisKICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJpbi5nZXQo
KSwgR1NUX1NUQVRFX05VTEwpOwotICAgICAgICBtX3BsYXlCaW4gPSAwOworICAgICAgICBtX3Bs
YXlCaW4uY2xlYXIoKTsKICAgICB9CiAKLSAgICBtX3BsYXllciA9IDA7Ci0KLSAgICBpZiAobV9t
dXRlVGltZXJIYW5kbGVyKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9tdXRlVGltZXJIYW5k
bGVyKTsKLQotICAgIGlmIChtX3ZvbHVtZVRpbWVySGFuZGxlcikKLSAgICAgICAgZ19zb3VyY2Vf
cmVtb3ZlKG1fdm9sdW1lVGltZXJIYW5kbGVyKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gdmlkZW9T
aW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fd2Via2l0Vmlk
ZW9TaW5rLmdldCgpLCAic2luayIpKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X2J5X2Z1bmModmlkZW9TaW5rUGFkLmdldCgpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPiht
ZWRpYVBsYXllclByaXZhdGVWaWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAK
ICAgICBpZiAobV92aWRlb1RpbWVySGFuZGxlcikKICAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1f
dmlkZW9UaW1lckhhbmRsZXIpOwpAQCAtNTcyLDY2ICs0ODYsNiBAQCBib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c2Vla2luZygpIGNvbnN0CiAgICAgcmV0dXJuIG1fc2Vla2luZzsK
IH0KIAotLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8KLUludFNpemUgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFoYXNW
aWRlbygpKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgaWYgKCFtX3ZpZGVvU2l6
ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3ZpZGVvU2l6ZTsKLQotICAgIEdSZWZQdHI8
R3N0Q2Fwcz4gY2FwcyA9IHdlYmtpdEdzdEdldFBhZENhcHMobV92aWRlb1NpbmtQYWQuZ2V0KCkp
OwotICAgIGlmICghY2FwcykKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotCi0gICAgLy8g
VE9ETzogaGFuZGxlIHBvc3NpYmxlIGNsZWFuIGFwZXJ0dXJlIGRhdGEuIFNlZQotICAgIC8vIGh0
dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTY1NzEKLSAgICAvLyBU
T0RPOiBoYW5kbGUgcG9zc2libGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBTZWUKLSAgICAvLyBo
dHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2MzI2Ci0KLSAgICAv
LyBHZXQgdGhlIHZpZGVvIFBBUiBhbmQgb3JpZ2luYWwgc2l6ZSwgaWYgdGhpcyBmYWlscyB0aGUK
LSAgICAvLyB2aWRlby1zaW5rIGhhcyBsaWtlbHkgbm90IHlldCBuZWdvdGlhdGVkIGl0cyBjYXBz
LgotICAgIGludCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVu
b21pbmF0b3IsIHN0cmlkZTsKLSAgICBJbnRTaXplIG9yaWdpbmFsU2l6ZTsKLSAgICBHc3RWaWRl
b0Zvcm1hdCBmb3JtYXQ7Ci0gICAgaWYgKCFnZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2Fwcyhj
YXBzLmdldCgpLCBvcmlnaW5hbFNpemUsIGZvcm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRv
ciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJpZGUpKQotICAgICAgICByZXR1cm4g
SW50U2l6ZSgpOwotCi0gICAgTE9HX01FRElBX01FU1NBR0UoIk9yaWdpbmFsIHZpZGVvIHNpemU6
ICVkeCVkIiwgb3JpZ2luYWxTaXplLndpZHRoKCksIG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgTE9HX01FRElBX01FU1NBR0UoIlBpeGVsIGFzcGVjdCByYXRpbzogJWQvJWQiLCBwaXhlbEFz
cGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IpOwotCi0gICAg
Ly8gQ2FsY3VsYXRlIERBUiBiYXNlZCBvbiBQQVIgYW5kIHZpZGVvIHNpemUuCi0gICAgaW50IGRp
c3BsYXlXaWR0aCA9IG9yaWdpbmFsU2l6ZS53aWR0aCgpICogcGl4ZWxBc3BlY3RSYXRpb051bWVy
YXRvcjsKLSAgICBpbnQgZGlzcGxheUhlaWdodCA9IG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAqIHBp
eGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvcjsKLQotICAgIC8vIERpdmlkZSBkaXNwbGF5IHdpZHRo
IGFuZCBoZWlnaHQgYnkgdGhlaXIgR0NEIHRvIGF2b2lkIHBvc3NpYmxlIG92ZXJmbG93cy4KLSAg
ICBpbnQgZGlzcGxheUFzcGVjdFJhdGlvR0NEID0gZ3JlYXRlc3RDb21tb25EaXZpc29yKGRpc3Bs
YXlXaWR0aCwgZGlzcGxheUhlaWdodCk7Ci0gICAgZGlzcGxheVdpZHRoIC89IGRpc3BsYXlBc3Bl
Y3RSYXRpb0dDRDsKLSAgICBkaXNwbGF5SGVpZ2h0IC89IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsK
LQotICAgIC8vIEFwcGx5IERBUiB0byBvcmlnaW5hbCB2aWRlbyBzaXplLiBUaGlzIGlzIHRoZSBz
YW1lIGJlaGF2aW9yIGFzIGluIHh2aW1hZ2VzaW5rJ3Mgc2V0Y2FwcyBmdW5jdGlvbi4KLSAgICBn
dWludDY0IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBpZiAoIShvcmlnaW5hbFNpemUuaGVp
Z2h0KCkgJSBkaXNwbGF5SGVpZ2h0KSkgewotICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgiS2Vl
cGluZyB2aWRlbyBvcmlnaW5hbCBoZWlnaHQiKTsKLSAgICAgICAgd2lkdGggPSBnc3RfdXRpbF91
aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSwgZGlzcGxheVdpZHRoLCBkaXNw
bGF5SGVpZ2h0KTsKLSAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2lu
YWxTaXplLmhlaWdodCgpKTsKLSAgICB9IGVsc2UgaWYgKCEob3JpZ2luYWxTaXplLndpZHRoKCkg
JSBkaXNwbGF5V2lkdGgpKSB7Ci0gICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJLZWVwaW5nIHZp
ZGVvIG9yaWdpbmFsIHdpZHRoIik7Ci0gICAgICAgIGhlaWdodCA9IGdzdF91dGlsX3VpbnQ2NF9z
Y2FsZV9pbnQob3JpZ2luYWxTaXplLndpZHRoKCksIGRpc3BsYXlIZWlnaHQsIGRpc3BsYXlXaWR0
aCk7Ci0gICAgICAgIHdpZHRoID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLndp
ZHRoKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJBcHByb3hp
bWF0aW5nIHdoaWxlIGtlZXBpbmcgb3JpZ2luYWwgdmlkZW8gaGVpZ2h0Iik7Ci0gICAgICAgIHdp
ZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0KCksIGRp
c3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7Ci0gICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0
PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgTE9HX01FRElB
X01FU1NBR0UoIk5hdHVyYWwgc2l6ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCAieCUiIEdfR1VJTlQ2
NF9GT1JNQVQsIHdpZHRoLCBoZWlnaHQpOwotICAgIG1fdmlkZW9TaXplID0gSW50U2l6ZShzdGF0
aWNfY2FzdDxpbnQ+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQpKTsKLSAgICByZXR1
cm4gbV92aWRlb1NpemU7Ci19Ci0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2
aWRlb0NoYW5nZWQoKQogewogICAgIGlmIChtX3ZpZGVvVGltZXJIYW5kbGVyKQpAQCAtNjcyLDQ1
ICs1MjYsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVy
T2ZBdWRpbygpCiAgICAgbV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVy
RW5naW5lVXBkYXRlZChtX3BsYXllcik7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQotewotICAgIGlmICghbV9wbGF5QmluKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBnc3Rfc3RyZWFtX3ZvbHVtZV9zZXRfdm9sdW1lKEdTVF9T
VFJFQU1fVk9MVU1FKG1fcGxheUJpbi5nZXQoKSksIEdTVF9TVFJFQU1fVk9MVU1FX0ZPUk1BVF9D
VUJJQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJs
ZT4odm9sdW1lKSk7Ci19Ci0KLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dm9s
dW1lKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGxheUJpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICByZXR1cm4gZ3N0X3N0cmVhbV92b2x1bWVfZ2V0X3ZvbHVtZShHU1RfU1RSRUFNX1ZPTFVN
RShtX3BsYXlCaW4uZ2V0KCkpLCBHU1RfU1RSRUFNX1ZPTFVNRV9GT1JNQVRfQ1VCSUMpOwotfQot
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWb2x1bWVD
aGFuZ2UoKQotewotICAgIG1fdm9sdW1lVGltZXJIYW5kbGVyID0gMDsKLQotICAgIGlmICghbV9w
bGF5ZXIgfHwgIW1fcGxheUJpbikKLSAgICAgICAgcmV0dXJuOwotICAgIGRvdWJsZSB2b2x1bWU7
Ci0gICAgdm9sdW1lID0gZ3N0X3N0cmVhbV92b2x1bWVfZ2V0X3ZvbHVtZShHU1RfU1RSRUFNX1ZP
TFVNRShtX3BsYXlCaW4uZ2V0KCkpLCBHU1RfU1RSRUFNX1ZPTFVNRV9GT1JNQVRfQ1VCSUMpOwot
ICAgIC8vIGdldF92b2x1bWUoKSBjYW4gcmV0dXJuIHZhbHVlcyBzdXBlcmlvciB0byAxLjAgaWYg
dGhlIHVzZXIKLSAgICAvLyBhcHBsaWVzIHNvZnR3YXJlIHVzZXIgZ2FpbiB2aWEgdGhpcmQgcGFy
dHkgYXBwbGljYXRpb24gKEdOT01FCi0gICAgLy8gdm9sdW1lIGNvbnRyb2wgZm9yIGluc3RhbmNl
KS4KLSAgICB2b2x1bWUgPSBDTEFNUCh2b2x1bWUsIDAuMCwgMS4wKTsKLSAgICBtX3BsYXllci0+
dm9sdW1lQ2hhbmdlZChzdGF0aWNfY2FzdDxmbG9hdD4odm9sdW1lKSk7Ci19Ci0KLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2b2x1bWVDaGFuZ2VkKCkKLXsKLSAgICBpZiAobV92
b2x1bWVUaW1lckhhbmRsZXIpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZShtX3ZvbHVtZVRpbWVy
SGFuZGxlcik7Ci0gICAgbV92b2x1bWVUaW1lckhhbmRsZXIgPSBnX3RpbWVvdXRfYWRkKDAsIHJl
aW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KG1lZGlhUGxheWVyUHJpdmF0ZVZvbHVtZUNoYW5n
ZVRpbWVvdXRDYWxsYmFjayksIHRoaXMpOwotfQotCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6c2V0UmF0ZShmbG9hdCByYXRlKQogewogICAgIC8vIEF2b2lkIHVzZWxlc3MgcGxh
eWJhY2sgcmF0ZSB1cGRhdGUuCkBAIC03NzUsMTYgKzU5MCw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sIHByZXNlcnZlc1BpdGNoKQog
ICAgIG1fcHJlc2VydmVzUGl0Y2ggPSBwcmVzZXJ2ZXNQaXRjaDsKIH0KIAotTWVkaWFQbGF5ZXI6
Ok5ldHdvcmtTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ldHdvcmtTdGF0ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1N0YXRlOwotfQotCi1NZWRpYVBsYXllcjo6
UmVhZHlTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlYWR5U3RhdGUoKSBjb25z
dAotewotICAgIHJldHVybiBtX3JlYWR5U3RhdGU7Ci19Ci0KIFBhc3NSZWZQdHI8VGltZVJhbmdl
cz4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpidWZmZXJlZCgpIGNvbnN0CiB7CiAgICAg
UmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKQEAg
LTExMTQsNDYgKzkxOSw2IEBAIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
dG90YWxCeXRlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fdG90YWxCeXRlczsKIH0KIAotdW5zaWdu
ZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkZWNvZGVkRnJhbWVDb3VudCgpIGNvbnN0
Ci17Ci0gICAgZ3VpbnQ2NCBkZWNvZGVkRnJhbWVzID0gMDsKLSAgICBpZiAobV9mcHNTaW5rKQot
ICAgICAgICBnX29iamVjdF9nZXQobV9mcHNTaW5rLCAiZnJhbWVzLXJlbmRlcmVkIiwgJmRlY29k
ZWRGcmFtZXMsIE5VTEwpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVjb2Rl
ZEZyYW1lcyk7Ci19Ci0KLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZHJv
cHBlZEZyYW1lQ291bnQoKSBjb25zdAotewotICAgIGd1aW50NjQgZnJhbWVzRHJvcHBlZCA9IDA7
Ci0gICAgaWYgKG1fZnBzU2luaykKLSAgICAgICAgZ19vYmplY3RfZ2V0KG1fZnBzU2luaywgImZy
YW1lcy1kcm9wcGVkIiwgJmZyYW1lc0Ryb3BwZWQsIE5VTEwpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZnJhbWVzRHJvcHBlZCk7Ci19Ci0KLXVuc2lnbmVkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3QKLXsKLSAgICBH
c3RRdWVyeSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRfQllURVMp
OwotICAgIGdpbnQ2NCBwb3NpdGlvbiA9IDA7Ci0KLSAgICBpZiAobV93ZWJraXRBdWRpb1Npbmsg
JiYgZ3N0X2VsZW1lbnRfcXVlcnkobV93ZWJraXRBdWRpb1NpbmsuZ2V0KCksIHF1ZXJ5KSkKLSAg
ICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOwotCi0g
ICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHBvc2l0aW9uKTsKLX0KLQotdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojp2aWRlb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdAotewotICAgIEdzdFF1ZXJ5KiBxdWVyeSA9
IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gICAgZ2ludDY0IHBv
c2l0aW9uID0gMDsKLQotICAgIGlmIChnc3RfZWxlbWVudF9xdWVyeShtX3dlYmtpdFZpZGVvU2lu
aywgcXVlcnkpKQotICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZw
b3NpdGlvbik7Ci0KLSAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pOwotfQotCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6dXBkYXRlQXVkaW9TaW5rKCkKIHsKICAgICBpZiAoIW1fcGxheUJpbikKQEAg
LTExNjYsNiArOTMxLDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRh
dGVBdWRpb1NpbmsoKQogCiB9CiAKK0dzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6YXVkaW9TaW5rKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJraXRBdWRpb1Npbmsu
Z2V0KCk7Cit9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VDaGFu
Z2VkKCkKIHsKQEAgLTE0NzIsMTEgKzEyNDEsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6bG9hZFN0YXRlQ2hhbmdlZCgpCiAgICAgdXBkYXRlU3RhdGVzKCk7CiB9CiAKLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzaXplQ2hhbmdlZCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRp
bWVDaGFuZ2VkKCkKIHsKICAgICB1cGRhdGVTdGF0ZXMoKTsKQEAgLTE1NTEsNDggKzEzMTUsNiBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZHVyYXRpb25DaGFuZ2VkKCkKICAg
ICB9CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c011dGlu
ZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpzZXRNdXRlZChib29sIG11dGVkKQotewotICAgIGlmICghbV9wbGF5Qmlu
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLmdldCgpLCAi
bXV0ZSIsIG11dGVkLCBOVUxMKTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6Om11dGVkKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGxheUJpbikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYm9vbCBtdXRlZDsKLSAgICBnX29iamVjdF9nZXQobV9wbGF5QmluLmdl
dCgpLCAibXV0ZSIsICZtdXRlZCwgTlVMTCk7Ci0gICAgcmV0dXJuIG11dGVkOwotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZNdXRlKCkKLXsKLSAg
ICBtX211dGVUaW1lckhhbmRsZXIgPSAwOwotCi0gICAgaWYgKCFtX3BsYXllciB8fCAhbV9wbGF5
QmluKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnYm9vbGVhbiBtdXRlZDsKLSAgICBnX29iamVj
dF9nZXQobV9wbGF5QmluLmdldCgpLCAibXV0ZSIsICZtdXRlZCwgTlVMTCk7Ci0gICAgbV9wbGF5
ZXItPm11dGVDaGFuZ2VkKHN0YXRpY19jYXN0PGJvb2w+KG11dGVkKSk7Ci19Ci0KLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptdXRlQ2hhbmdlZCgpCi17Ci0gICAgaWYgKG1fbXV0
ZVRpbWVySGFuZGxlcikKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fbXV0ZVRpbWVySGFuZGxl
cik7Ci0gICAgbV9tdXRlVGltZXJIYW5kbGVyID0gZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJl
dF9jYXN0PEdTb3VyY2VGdW5jPihtZWRpYVBsYXllclByaXZhdGVNdXRlQ2hhbmdlVGltZW91dENh
bGxiYWNrKSwgdGhpcyk7Ci19Ci0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjps
b2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgZXJyb3IpCiB7CiAgICAgbV9l
cnJvck9jY3VyZWQgPSB0cnVlOwpAQCAtMTYwNiw0NiArMTMyOCw2IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrU3Rh
dGUgZXJyb3IpCiAgICAgfQogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIG1fc2l6ZSA9IHNpemU7Ci19Ci0K
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRWaXNpYmxlKGJvb2wpCi17Ci19
Ci0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRyaWdnZXJSZXBhaW50KEdz
dEJ1ZmZlciogYnVmZmVyKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoR1NUX0lTX0JVRkZFUihi
dWZmZXIpKTsKLSAgICBnc3RfYnVmZmVyX3JlcGxhY2UoJm1fYnVmZmVyLCBidWZmZXIpOwotICAg
IG1fcGxheWVyLT5yZXBhaW50KCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3Qp
Ci17Ci0gICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFtX3BsYXllci0+dmlzaWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIW1fYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHUmVmUHRyPEdzdENhcHM+
IGNhcHMgPSB3ZWJraXRHc3RHZXRQYWRDYXBzKG1fdmlkZW9TaW5rUGFkLmdldCgpKTsKLSAgICBp
ZiAoIWNhcHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZUdTdHJlYW1lcj4g
Z3N0SW1hZ2UgPSBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UobV9idWZmZXIsIGNhcHMuZ2V0
KCkpOwotICAgIGlmICghZ3N0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnRleHQt
PmRyYXdJbWFnZShyZWludGVycHJldF9jYXN0PEltYWdlKj4oZ3N0SW1hZ2UtPmltYWdlKCkuZ2V0
KCkpLCBDb2xvclNwYWNlU1JHQiwKLSAgICAgICAgICAgICAgICAgICAgICAgcmVjdCwgZ3N0SW1h
Z2UtPnJlY3QoKSwgQ29tcG9zaXRlQ29weSwgRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwg
ZmFsc2UpOwotfQotCiBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQogewog
ICAgIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCk7CkBAIC0x
NzY3LDYyICsxNDQ5LDYgQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcKICAgICByZXR1cm4gTWVk
aWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdAotewotICAgIHJldHVybiB0
cnVlOwotfQotCi0jaWYgVVNFKE5BVElWRV9GVUxMU0NSRUVOX1ZJREVPKQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmVudGVyRnVsbHNjcmVlbigpCi17Ci0gICAgQVNTRVJUKCFt
X2Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIpOwotICAgIG1fZnVsbHNjcmVlblZpZGVvQ29udHJv
bGxlciA9IEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXI6OmNyZWF0ZSh0aGlzKTsK
LSAgICBpZiAobV9mdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyKQotICAgICAgICBtX2Z1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXItPmVudGVyRnVsbHNjcmVlbigpOwotfQotCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZXhpdEZ1bGxzY3JlZW4oKQotewotICAgIGlmICghbV9mdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9mdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyLT5leGl0RnVsbHNjcmVlbigpOwotICAgIG1fZnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlci5yZWxlYXNlKCk7Ci19Ci0jZW5kaWYKLQotYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0Ci17Ci0jaWYgUExBVEZPUk0o
TUFDKSAmJiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID09IDEwNTAKLSAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzczODk5NDU+Ci0gICAgcmV0dXJu
IGZhbHNlOwotI2Vsc2UKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotfQotCi1QbGF0Zm9ybU1l
ZGlhIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxhdGZvcm1NZWRpYSgpIGNvbnN0Ci17
Ci0jaWYgVVNFKE5BVElWRV9GVUxMU0NSRUVOX1ZJREVPKQotICAgIFBsYXRmb3JtTWVkaWEgcDsK
LSAgICBwLnR5cGUgPSBQbGF0Zm9ybU1lZGlhOjpHU3RyZWFtZXJHV29ybGRUeXBlOwotICAgIHAu
bWVkaWEuZ3N0cmVhbWVyR1dvcmxkID0gbV9nc3RHV29ybGQuZ2V0KCk7Ci0gICAgcmV0dXJuIHA7
Ci0jZWxzZQotICAgIHJldHVybiBOb1BsYXRmb3JtTWVkaWE7Ci0jZW5kaWYKLX0KLQotTWVkaWFQ
bGF5ZXI6Ok1vdmllTG9hZFR5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptb3ZpZUxv
YWRUeXBlKCkgY29uc3QKLXsKLSAgICBpZiAobV9yZWFkeVN0YXRlID09IE1lZGlhUGxheWVyOjpI
YXZlTm90aGluZykKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpVbmtub3duOwotCi0gICAg
aWYgKGlzTGl2ZVN0cmVhbSgpKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkxpdmVTdHJl
YW07Ci0KLSAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkRvd25sb2FkOwotfQotCiB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0RG93bmxvYWRCdWZmZXJpbmcoKQogewogICAgIGlm
ICghbV9wbGF5QmluKQpAQCAtMTg5NCw2ICsxNTIwLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oKQogICAgIC8vIGdzdF9lbGVtZW50X2ZhY3Rv
cnlfbWFrZSgpIHJldHVybnMgYSBmbG9hdGluZyByZWZlcmVuY2Ugc28KICAgICAvLyB3ZSBzaG91
bGQgbm90IGFkb3B0LgogICAgIG1fcGxheUJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZShn
UGxheWJpbk5hbWUsICJwbGF5Iik7CisgICAgc2V0U3RyZWFtVm9sdW1lRWxlbWVudChHU1RfU1RS
RUFNX1ZPTFVNRShtX3BsYXlCaW4uZ2V0KCkpKTsKIAogICAgIEdSZWZQdHI8R3N0QnVzPiBidXMg
PSB3ZWJraXRHc3RQaXBlbGluZUdldEJ1cyhHU1RfUElQRUxJTkUobV9wbGF5QmluLmdldCgpKSk7
CiAgICAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoKGJ1cy5nZXQoKSk7CkBAIC0xOTAxLDEwMyAr
MTUyOCwxNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxh
eUJpbigpCiAKICAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLmdldCgpLCAibXV0ZSIsIG1fcGxh
eWVyLT5tdXRlZCgpLCBOVUxMKTsKIAotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLmdl
dCgpLCAibm90aWZ5Ojp2b2x1bWUiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVZvbHVt
ZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5Qmlu
LmdldCgpLCAibm90aWZ5Ojpzb3VyY2UiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVNv
dXJjZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5
QmluLmdldCgpLCAibm90aWZ5OjptdXRlIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVN
dXRlQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3BsYXlC
aW4uZ2V0KCksICJ2aWRlby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVW
aWRlb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5
QmluLmdldCgpLCAiYXVkaW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRl
QXVkaW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKIAotI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVF
Tl9WSURFTykKLSAgICBtX2dzdEdXb3JsZCA9IEdTdHJlYW1lckdXb3JsZDo6Y3JlYXRlR1dvcmxk
KG1fcGxheUJpbi5nZXQoKSk7Ci0gICAgbV93ZWJraXRWaWRlb1NpbmsgPSB3ZWJraXRWaWRlb1Np
bmtOZXcobV9nc3RHV29ybGQuZ2V0KCkpOwotI2Vsc2UKLSAgICBtX3dlYmtpdFZpZGVvU2luayA9
IHdlYmtpdFZpZGVvU2lua05ldygpOwotI2VuZGlmCi0gICAgbV92aWRlb1NpbmtQYWQgPSBhZG9w
dEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV93ZWJraXRWaWRlb1NpbmssICJzaW5r
IikpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChtX3dlYmtpdFZpZGVvU2luaywgInJlcGFpbnQt
cmVxdWVzdGVkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVSZXBhaW50Q2FsbGJhY2sp
LCB0aGlzKTsKKyAgICBHc3RFbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBjcmVhdGVWaWRlb1Npbmso
bV9wbGF5QmluLmdldCgpKTsKIAorICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4uZ2V0KCksICJ2
aWRlby1zaW5rIiwgdmlkZW9FbGVtZW50LCBOVUxMKTsKIAotI2lmIFVTRShOQVRJVkVfRlVMTFND
UkVFTl9WSURFTykKLSAgICAvLyBCdWlsZCBhIG5ldyB2aWRlbyBzaW5rIGNvbnNpc3Rpbmcgb2Yg
YSBiaW4gY29udGFpbmluZyBhIHRlZQotICAgIC8vIChtZWFudCB0byBkaXN0cmlidXRlIGRhdGEg
dG8gbXVsdGlwbGUgdmlkZW8gc2lua3MpIGFuZCBvdXIKLSAgICAvLyBpbnRlcm5hbCB2aWRlbyBz
aW5rLiBGb3IgZnVsbHNjcmVlbiB3ZSBjcmVhdGUgYW4gYXV0b3ZpZGVvc2luawotICAgIC8vIGFu
ZCBpbml0aWFsbHkgYmxvY2sgdGhlIGRhdGEgZmxvdyB0b3dhcmRzIGl0IGFuZCBjb25maWd1cmUg
aXQKLQotICAgIG1fdmlkZW9TaW5rQmluID0gZ3N0X2Jpbl9uZXcoInZpZGVvLXNpbmsiKTsKLQot
ICAgIC8vIFRha2Ugb3duZXJzaGlwLgotICAgIGdzdF9vYmplY3RfcmVmX3NpbmsobV92aWRlb1Np
bmtCaW4pOwotCi0gICAgR3N0RWxlbWVudCogdmlkZW9UZWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5
X21ha2UoInRlZSIsICJ2aWRlb1RlZSIpOwotICAgIEdzdEVsZW1lbnQqIHF1ZXVlID0gZ3N0X2Vs
ZW1lbnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIDApOwotCi0jaWZkZWYgR1NUX0FQSV9WRVJTSU9O
XzEKLSAgICBHUmVmUHRyPEdzdFBhZD4gc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9n
ZXRfc3RhdGljX3BhZCh2aWRlb1RlZSwgInNpbmsiKSk7Ci0gICAgR1NUX09CSkVDVF9GTEFHX1NF
VChHU1RfT0JKRUNUKHNpbmtQYWQuZ2V0KCkpLCBHU1RfUEFEX0ZMQUdfUFJPWFlfQUxMT0NBVElP
Tik7Ci0jZW5kaWYKLQotICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihtX3ZpZGVvU2lua0Jp
biksIHZpZGVvVGVlLCBxdWV1ZSwgTlVMTCk7Ci0KLSAgICAvLyBMaW5rIGEgbmV3IHNyYyBwYWQg
ZnJvbSB0ZWUgdG8gcXVldWUxLgotICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsKHZpZGVv
VGVlLCAwLCBxdWV1ZSwgInNpbmsiLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7Ci0jZW5k
aWYKLQotICAgIEdzdEVsZW1lbnQqIGFjdHVhbFZpZGVvU2luayA9IDA7Ci0gICAgbV9mcHNTaW5r
ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJmcHNkaXNwbGF5c2luayIsICJzaW5rIik7Ci0g
ICAgaWYgKG1fZnBzU2luaykgewotICAgICAgICAvLyBUaGUgdmVyYm9zZSBwcm9wZXJ0eSBoYXMg
YmVlbiBhZGRlZCBpbiAtYmFkIDAuMTAuMjIuIE1ha2luZwotICAgICAgICAvLyB0aGlzIHdob2xl
IGNvZGUgZGVwZW5kIG9uIGl0IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudAotICAgICAgICAvLyBmcHNk
aXBsYXlzaW5rIHRvIHNwaXQgZGF0YSBvbiBzdGRvdXQuCi0gICAgICAgIEdzdEVsZW1lbnRGYWN0
b3J5KiBmYWN0b3J5ID0gR1NUX0VMRU1FTlRfRkFDVE9SWShHU1RfRUxFTUVOVF9HRVRfQ0xBU1Mo
bV9mcHNTaW5rKS0+ZWxlbWVudGZhY3RvcnkpOwotICAgICAgICBpZiAoZ3N0X3BsdWdpbl9mZWF0
dXJlX2NoZWNrX3ZlcnNpb24oR1NUX1BMVUdJTl9GRUFUVVJFKGZhY3RvcnkpLCAwLCAxMCwgMjIp
KSB7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQobV9mcHNTaW5rLCAic2lsZW50IiwgVFJVRSAs
IE5VTEwpOwotCi0gICAgICAgICAgICAvLyBUdXJuIG9mZiB0ZXh0IG92ZXJsYXkgdW5sZXNzIGxv
Z2dpbmcgaXMgZW5hYmxlZC4KLSNpZiBMT0dfRElTQUJMRUQKLSAgICAgICAgICAgIGdfb2JqZWN0
X3NldChtX2Zwc1NpbmssICJ0ZXh0LW92ZXJsYXkiLCBGQUxTRSAsIE5VTEwpOwotI2Vsc2UKLSAg
ICAgICAgICAgIFdURkxvZ0NoYW5uZWwqIGNoYW5uZWwgPSBnZXRDaGFubmVsRnJvbU5hbWUoIk1l
ZGlhIik7Ci0gICAgICAgICAgICBpZiAoY2hhbm5lbC0+c3RhdGUgIT0gV1RGTG9nQ2hhbm5lbE9u
KQotICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2Zwc1NpbmssICJ0ZXh0LW92ZXJsYXki
LCBGQUxTRSAsIE5VTEwpOwotI2VuZGlmIC8vIExPR19ESVNBQkxFRAotCi0gICAgICAgICAgICBp
ZiAoZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eShHX09CSkVDVF9HRVRfQ0xBU1MobV9mcHNT
aW5rKSwgInZpZGVvLXNpbmsiKSkgewotICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2Zw
c1NpbmssICJ2aWRlby1zaW5rIiwgbV93ZWJraXRWaWRlb1NpbmssIE5VTEwpOwotI2lmIFVTRShO
QVRJVkVfRlVMTFNDUkVFTl9WSURFTykKLSAgICAgICAgICAgICAgICBnc3RfYmluX2FkZChHU1Rf
QklOKG1fdmlkZW9TaW5rQmluKSwgbV9mcHNTaW5rKTsKLSNlbmRpZgotICAgICAgICAgICAgICAg
IGFjdHVhbFZpZGVvU2luayA9IG1fZnBzU2luazsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIG1fZnBzU2luayA9IDA7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9m
cHNTaW5rID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZnBzU2luaykgewotI2lmIFVTRShOQVRJ
VkVfRlVMTFNDUkVFTl9WSURFTykKLSAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTihtX3ZpZGVv
U2lua0JpbiksIG1fd2Via2l0VmlkZW9TaW5rKTsKLSNlbmRpZgotICAgICAgICBhY3R1YWxWaWRl
b1NpbmsgPSBtX3dlYmtpdFZpZGVvU2luazsKLSAgICB9Ci0KLSAgICBBU1NFUlQoYWN0dWFsVmlk
ZW9TaW5rKTsKLQotI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKLSAgICAvLyBGYXN0
ZXIgZWxlbWVudHMgbGlua2luZy4KLSAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbChxdWV1
ZSwgInNyYyIsIGFjdHVhbFZpZGVvU2luaywgInNpbmsiLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9U
SElORyk7Ci0KLSAgICAvLyBBZGQgYSBnaG9zdHBhZCB0byB0aGUgYmluIHNvIGl0IGNhbiBwcm94
eSB0byB0ZWUuCi0gICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVu
dF9nZXRfc3RhdGljX3BhZCh2aWRlb1RlZSwgInNpbmsiKSk7Ci0gICAgZ3N0X2VsZW1lbnRfYWRk
X3BhZChtX3ZpZGVvU2lua0JpbiwgZ3N0X2dob3N0X3BhZF9uZXcoInNpbmsiLCBwYWQuZ2V0KCkp
KTsKLQotICAgIC8vIFNldCB0aGUgYmluIGFzIHZpZGVvIHNpbmsgb2YgcGxheWJpbi4KLSAgICBn
X29iamVjdF9zZXQobV9wbGF5QmluLmdldCgpLCAidmlkZW8tc2luayIsIG1fdmlkZW9TaW5rQmlu
LCBOVUxMKTsKLSNlbHNlCi0gICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbi5nZXQoKSwgInZpZGVv
LXNpbmsiLCBhY3R1YWxWaWRlb1NpbmssIE5VTEwpOwotI2VuZGlmCi0KLSAgICBHUmVmUHRyPEdz
dFBhZD4gdmlkZW9TaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KG1fd2Via2l0VmlkZW9TaW5rLCAic2luayIpKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gdmlkZW9T
aW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fd2Via2l0Vmlk
ZW9TaW5rLmdldCgpLCAic2luayIpKTsKICAgICBpZiAodmlkZW9TaW5rUGFkKQogICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KHZpZGVvU2lua1BhZC5nZXQoKSwgIm5vdGlmeTo6Y2FwcyIsIEdfQ0FM
TEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9TaW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayksIHRo
aXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5k
ZXggZmQzN2Q4M2JkMzViZTFjYjU2NzAzZDFlOTFiMzc3ZGQ0YzJhNmM4Yy4uMzEzZTczM2UyNmVk
ZGY2ZjcyZTM3NDNmY2EzMGMwYzRiMzI2ZmQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuaApAQCAtMjUsMzUgKzI1LDI2IEBACiAjaWYgRU5BQkxFKFZJ
REVPKSAmJiBVU0UoR1NUUkVBTUVSKQogCiAjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgot
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuaCIKICNpbmNsdWRlICJUaW1lci5oIgogCiAjaW5jbHVkZSA8Z2xp
Yi5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCi10
eXBlZGVmIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rIFdlYktpdFZpZGVvU2luazsKIHR5cGVkZWYg
c3RydWN0IF9Hc3RCdWZmZXIgR3N0QnVmZmVyOwogdHlwZWRlZiBzdHJ1Y3QgX0dzdE1lc3NhZ2Ug
R3N0TWVzc2FnZTsKIHR5cGVkZWYgc3RydWN0IF9Hc3RFbGVtZW50IEdzdEVsZW1lbnQ7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJl
YW1lcjsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBJbnRS
ZWN0OwotY2xhc3MgR1N0cmVhbWVyR1dvcmxkOwotY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOwotCi1jbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgOiBwdWJsaWMgTWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lciA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlIHsKIAogICAgICAg
ICBwdWJsaWM6CiAgICAgICAgICAgICB+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKCk7CiAg
ICAgICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVn
aXN0cmFyKTsKICAgICAgICAgICAgIGdib29sZWFuIGhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSop
OwogCi0gICAgICAgICAgICBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Q7CiAgICAgICAgICAg
ICBib29sIGhhc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWaWRlbzsgfQogICAgICAgICAg
ICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQXVkaW87IH0KIApAQCAtNzUs
NjkgKzY2LDI4IEBAIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciA6IHB1YmxpYyBN
ZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogICAgICAgICAgICAgdm9pZCBzZXRSYXRlKGZs
b2F0KTsKICAgICAgICAgICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCk7CiAKLSAgICAg
ICAgICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KTsKLSAgICAgICAgICAgIGZsb2F0IHZvbHVtZSgp
IGNvbnN0OwotICAgICAgICAgICAgdm9pZCB2b2x1bWVDaGFuZ2VkKCk7Ci0gICAgICAgICAgICB2
b2lkIG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7Ci0KLSAgICAgICAgICAgIGJvb2wgc3Vw
cG9ydHNNdXRpbmcoKSBjb25zdDsKLSAgICAgICAgICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCk7Ci0g
ICAgICAgICAgICBib29sIG11dGVkKCkgY29uc3Q7Ci0gICAgICAgICAgICB2b2lkIG11dGVDaGFu
Z2VkKCk7Ci0gICAgICAgICAgICB2b2lkIG5vdGlmeVBsYXllck9mTXV0ZSgpOwotCiAgICAgICAg
ICAgICB2b2lkIHNldFByZWxvYWQoTWVkaWFQbGF5ZXI6OlByZWxvYWQpOwogICAgICAgICAgICAg
dm9pZCBmaWxsVGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI+Kik7
CiAKLSAgICAgICAgICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkg
Y29uc3Q7Ci0gICAgICAgICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkg
Y29uc3Q7Ci0KICAgICAgICAgICAgIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBj
b25zdDsKICAgICAgICAgICAgIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNvbnN0OwogICAgICAg
ICAgICAgYm9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdDsKICAgICAgICAgICAgIHVuc2ln
bmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKICAgICAgICAgICAgIGZsb2F0IG1heFRpbWVMb2FkZWQo
KSBjb25zdDsKIAotICAgICAgICAgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwotICAgICAgICAg
ICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKTsKLQogICAgICAgICAgICAgdm9pZCBsb2Fk
U3RhdGVDaGFuZ2VkKCk7Ci0gICAgICAgICAgICB2b2lkIHNpemVDaGFuZ2VkKCk7CiAgICAgICAg
ICAgICB2b2lkIHRpbWVDaGFuZ2VkKCk7CiAgICAgICAgICAgICB2b2lkIGRpZEVuZCgpOwogICAg
ICAgICAgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKTsKICAgICAgICAgICAgIHZvaWQgbG9hZGlu
Z0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlKTsKIAotICAgICAgICAgICAgdm9pZCB0
cmlnZ2VyUmVwYWludChHc3RCdWZmZXIqKTsKLSAgICAgICAgICAgIHZvaWQgcmVwYWludCgpOwot
ICAgICAgICAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7
Ci0KLSAgICAgICAgICAgIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKLQot
I2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKLSAgICAgICAgICAgIHZvaWQgZW50ZXJG
dWxsc2NyZWVuKCk7Ci0gICAgICAgICAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgICAg
ICAgICBib29sIGNhbkVudGVyRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSNl
bmRpZgotCi0gICAgICAgICAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0OwotICAg
ICAgICAgICAgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlhKCkgY29uc3Q7Ci0KICAgICAgICAg
ICAgIHZvaWQgdmlkZW9DaGFuZ2VkKCk7CiAgICAgICAgICAgICB2b2lkIGF1ZGlvQ2hhbmdlZCgp
OwogICAgICAgICAgICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZpZGVvKCk7CiAgICAgICAgICAgICB2
b2lkIG5vdGlmeVBsYXllck9mQXVkaW8oKTsKIAogICAgICAgICAgICAgdm9pZCBzb3VyY2VDaGFu
Z2VkKCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGRlY29kZWRGcmFtZUNvdW50KCkgY29uc3Q7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBkcm9wcGVkRnJhbWVDb3VudCgpIGNvbnN0OwotICAgICAg
ICAgICAgdW5zaWduZWQgYXVkaW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3Q7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCB2aWRlb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdDsKLQotICAgICAgICAgICAg
TWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgbW92aWVMb2FkVHlwZSgpIGNvbnN0OwotCi0gICAg
ICAgICAgICBNZWRpYVBsYXllciogbWVkaWFQbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXll
cjsgfQorICAgICAgICAgICAgR3N0RWxlbWVudCogYXVkaW9TaW5rKCkgY29uc3Q7CiAKICAgICAg
ICAgICAgIHN0YXRpYyBLVVJMIGNvbnZlcnRQbGF5YmluVVJMKGNvbnN0IGdjaGFyKiB1cmkpOwog
CkBAIC0xNzEsMjQgKzEyMSwxNiBAQCBjbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIg
OiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKICAgICAgICAgICAgIHZvaWQg
cHJvY2Vzc0J1ZmZlcmluZ1N0YXRzKEdzdE1lc3NhZ2UqKTsKIAogICAgICAgICAgICAgdmlydHVh
bCBTdHJpbmcgZW5naW5lRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiAiR1N0cmVhbWVyIjsg
fQotICAgICAgICAgICAgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCB7IHJldHVybiBtX2lzU3Ry
ZWFtaW5nOyB9CisgICAgICAgICAgICB2aXJ0dWFsIGJvb2wgaXNMaXZlU3RyZWFtKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1N0cmVhbWluZzsgfQogCiAgICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAg
ICBNZWRpYVBsYXllciogbV9wbGF5ZXI7CiAgICAgICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IG1fcGxheUJpbjsKLSAgICAgICAgICAgIEdzdEVsZW1lbnQqIG1fd2Via2l0VmlkZW9TaW5rOwot
ICAgICAgICAgICAgR3N0RWxlbWVudCogbV92aWRlb1NpbmtCaW47Ci0gICAgICAgICAgICBHc3RF
bGVtZW50KiBtX2Zwc1Npbms7CiAgICAgICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc291
cmNlOwogICAgICAgICAgICAgZmxvYXQgbV9zZWVrVGltZTsKICAgICAgICAgICAgIGJvb2wgbV9j
aGFuZ2luZ1JhdGU7CiAgICAgICAgICAgICBmbG9hdCBtX2VuZFRpbWU7CiAgICAgICAgICAgICBi
b29sIG1faXNFbmRSZWFjaGVkOwotICAgICAgICAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0
ZSBtX25ldHdvcmtTdGF0ZTsKLSAgICAgICAgICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1f
cmVhZHlTdGF0ZTsKICAgICAgICAgICAgIG11dGFibGUgYm9vbCBtX2lzU3RyZWFtaW5nOwotICAg
ICAgICAgICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgICAgICAgICBHc3RCdWZmZXIqIG1fYnVmZmVy
OwogICAgICAgICAgICAgR3N0U3RydWN0dXJlKiBtX21lZGlhTG9jYXRpb25zOwogICAgICAgICAg
ICAgaW50IG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleDsKICAgICAgICAgICAgIGJvb2wgbV9y
ZXNldFBpcGVsaW5lOwpAQCAtMjA2LDEyICsxNDgsNiBAQCBjbGFzcyBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKICAgICAg
ICAgICAgIGJvb2wgbV9kZWxheWluZ0xvYWQ7CiAgICAgICAgICAgICBib29sIG1fbWVkaWFEdXJh
dGlvbktub3duOwogICAgICAgICAgICAgbXV0YWJsZSBmbG9hdCBtX21heFRpbWVMb2FkZWRBdExh
c3REaWRMb2FkaW5nUHJvZ3Jlc3M7Ci0jaWYgVVNFKE5BVElWRV9GVUxMU0NSRUVOX1ZJREVPKQot
ICAgICAgICAgICAgUmVmUHRyPEdTdHJlYW1lckdXb3JsZD4gbV9nc3RHV29ybGQ7Ci0gICAgICAg
ICAgICBPd25QdHI8RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcj4gbV9mdWxsc2Ny
ZWVuVmlkZW9Db250cm9sbGVyOwotI2VuZGlmCi0gICAgICAgICAgICBndWludCBtX3ZvbHVtZVRp
bWVySGFuZGxlcjsKLSAgICAgICAgICAgIGd1aW50IG1fbXV0ZVRpbWVySGFuZGxlcjsKICAgICAg
ICAgICAgIGJvb2wgbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQ7CiAgICAgICAgICAgICBib29s
IG1faGFzVmlkZW87CiAgICAgICAgICAgICBib29sIG1faGFzQXVkaW87CkBAIC0yMTksOCArMTU1
LDYgQEAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIDogcHVibGljIE1lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZSB7CiAgICAgICAgICAgICBndWludCBtX3ZpZGVvVGltZXJIYW5k
bGVyOwogICAgICAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3dlYmtpdEF1ZGlvU2luazsK
ICAgICAgICAgICAgIG11dGFibGUgbG9uZyBtX3RvdGFsQnl0ZXM7Ci0gICAgICAgICAgICBHUmVm
UHRyPEdzdFBhZD4gbV92aWRlb1NpbmtQYWQ7Ci0gICAgICAgICAgICBtdXRhYmxlIEludFNpemUg
bV92aWRlb1NpemU7CiAgICAgICAgICAgICBLVVJMIG1fdXJsOwogICAgICAgICAgICAgYm9vbCBt
X29yaWdpbmFsUHJlbG9hZFdhc0F1dG9BbmRXYXNPdmVycmlkZGVuOwogICAgICAgICAgICAgYm9v
bCBtX3ByZXNlcnZlc1BpdGNoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiYmQwZTYwMWVjMmE5YjA5NjIyZWNk
ZTFjNjNlMzcyODZlOGUyZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5j
cHAKQEAgLTAsMCArMSw1MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xs
YWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBB
bHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8g
Tm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MCBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuaCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1F
UikKKworI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyR1dvcmxkLmgiCisjaW5j
bHVkZSAiR1N0cmVhbWVyVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVmVyc2lvbmlu
Zy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlw
ZXMuaCIKKyNpbmNsdWRlICJJbWFnZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkltYWdlT3JpZW50
YXRpb24uaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJTb3VyY2VHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVv
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitHU1RfREVCVUdfQ0FURUdPUllf
U1RBVElDKHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFV
TFQgd2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZworCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbnQgZ3JlYXRlc3RDb21tb25EaXZpc29yKGlu
dCBhLCBpbnQgYikKK3sKKyAgICB3aGlsZSAoYikgeworICAgICAgICBpbnQgdGVtcCA9IGE7Cisg
ICAgICAgIGEgPSBiOworICAgICAgICBiID0gdGVtcCAlIGI7CisgICAgfQorCisgICAgcmV0dXJu
IEFCUyhhKTsKK30KKworc3RhdGljIHZvaWQgbWVkaWFQbGF5ZXJQcml2YXRlVm9sdW1lQ2hhbmdl
ZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZSogcGxheWVyKQoreworICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gbV92b2x1bWVF
bGVtZW50IHJlY2VpdmVzIHRoZSBub3RpZnk6OnZvbHVtZSBzaWduYWwuCisgICAgcGxheWVyLT52
b2x1bWVDaGFuZ2VkKCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVW
b2x1bWVDaGFuZ2VUaW1lb3V0Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZSogcGxheWVyKQoreworICAgIC8vIFRoaXMgaXMgdGhlIGNhbGxiYWNrIG9mIHRoZSB0aW1lb3V0
IHNvdXJjZSBjcmVhdGVkIGluIDo6dm9sdW1lQ2hhbmdlZC4KKyAgICBwbGF5ZXItPm5vdGlmeVBs
YXllck9mVm9sdW1lQ2hhbmdlKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9p
ZCBtZWRpYVBsYXllclByaXZhdGVNdXRlQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1T
cGVjKiwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyKQoreworICAgIC8v
IFRoaXMgaXMgY2FsbGVkIHdoZW4gbV92b2x1bWVFbGVtZW50IHJlY2VpdmVzIHRoZSBub3RpZnk6
Om11dGUgc2lnbmFsLgorICAgIHBsYXllci0+bXV0ZUNoYW5nZWQoKTsKK30KKworc3RhdGljIGdi
b29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZU11dGVDaGFuZ2VUaW1lb3V0Q2FsbGJhY2soTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyKQoreworICAgIC8vIFRoaXMgaXMgdGhl
IGNhbGxiYWNrIG9mIHRoZSB0aW1lb3V0IHNvdXJjZSBjcmVhdGVkIGluIDo6bXV0ZUNoYW5nZWQu
CisgICAgcGxheWVyLT5ub3RpZnlQbGF5ZXJPZk11dGUoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9
CisKK3N0YXRpYyB2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZVJlcGFpbnRDYWxsYmFjayhXZWJLaXRW
aWRlb1NpbmsqLCBHc3RCdWZmZXIgKmJ1ZmZlciwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZSogcGxheWVyUHJpdmF0ZSkKK3sKKyAgICBwbGF5ZXJQcml2YXRlLT50cmlnZ2VyUmVwYWlu
dChidWZmZXIpOworfQorCitNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBtX3Bs
YXllcihwbGF5ZXIpCisgICAgLCBtX2Zwc1NpbmsoMCkKKyAgICAsIG1fcmVhZHlTdGF0ZShNZWRp
YVBsYXllcjo6SGF2ZU5vdGhpbmcpCisgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6
RW1wdHkpCisgICAgLCBtX2J1ZmZlcigwKQorICAgICwgbV92b2x1bWVUaW1lckhhbmRsZXIoMCkK
KyAgICAsIG1fbXV0ZVRpbWVySGFuZGxlcigwKQoreworfQorCitNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSgpCit7CisgICAg
Z19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fd2Via2l0VmlkZW9TaW5rLmdldCgpLCBtX3Jl
cGFpbnRIYW5kbGVyKTsKKworICAgIGlmIChtX2J1ZmZlcikKKyAgICAgICAgZ3N0X2J1ZmZlcl91
bnJlZihtX2J1ZmZlcik7CisgICAgbV9idWZmZXIgPSAwOworCisgICAgbV9wbGF5ZXIgPSAwOwor
CisgICAgaWYgKG1fbXV0ZVRpbWVySGFuZGxlcikKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1f
bXV0ZVRpbWVySGFuZGxlcik7CisKKyAgICBpZiAobV92b2x1bWVUaW1lckhhbmRsZXIpCisgICAg
ICAgIGdfc291cmNlX3JlbW92ZShtX3ZvbHVtZVRpbWVySGFuZGxlcik7CisKKyNpZiBVU0UoTkFU
SVZFX0ZVTExTQ1JFRU5fVklERU8pCisgICAgaWYgKG1fZnVsbHNjcmVlblZpZGVvQ29udHJvbGxl
cikKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW4oKTsKKyNlbmRpZgorfQorCisvLyBSZXR1cm5zIHRo
ZSBzaXplIG9mIHRoZSB2aWRlbworSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlOjpuYXR1cmFsU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNWaWRlbygpKQorICAgICAg
ICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgaWYgKCFtX3ZpZGVvU2l6ZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBtX3ZpZGVvU2l6ZTsKKworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9
IHdlYmtpdEdzdEdldFBhZENhcHMobV92aWRlb1NpbmtQYWQuZ2V0KCkpOworICAgIGlmICghY2Fw
cykKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworCisgICAgLy8gVE9ETzogaGFuZGxlIHBv
c3NpYmxlIGNsZWFuIGFwZXJ0dXJlIGRhdGEuIFNlZQorICAgIC8vIGh0dHBzOi8vYnVnemlsbGEu
Z25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTY1NzEKKyAgICAvLyBUT0RPOiBoYW5kbGUgcG9z
c2libGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBTZWUKKyAgICAvLyBodHRwczovL2J1Z3ppbGxh
Lmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2MzI2CisKKyAgICAvLyBHZXQgdGhlIHZpZGVv
IFBBUiBhbmQgb3JpZ2luYWwgc2l6ZSwgaWYgdGhpcyBmYWlscyB0aGUKKyAgICAvLyB2aWRlby1z
aW5rIGhhcyBsaWtlbHkgbm90IHlldCBuZWdvdGlhdGVkIGl0cyBjYXBzLgorICAgIGludCBwaXhl
bEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IsIHN0cmlk
ZTsKKyAgICBJbnRTaXplIG9yaWdpbmFsU2l6ZTsKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7
CisgICAgaWYgKCFnZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2FwcyhjYXBzLmdldCgpLCBvcmln
aW5hbFNpemUsIGZvcm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RS
YXRpb0Rlbm9taW5hdG9yLCBzdHJpZGUpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisg
ICAgTE9HX01FRElBX01FU1NBR0UoIk9yaWdpbmFsIHZpZGVvIHNpemU6ICVkeCVkIiwgb3JpZ2lu
YWxTaXplLndpZHRoKCksIG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgTE9HX01FRElBX01F
U1NBR0UoIlBpeGVsIGFzcGVjdCByYXRpbzogJWQvJWQiLCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJh
dG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IpOworCisgICAgLy8gQ2FsY3VsYXRlIERB
UiBiYXNlZCBvbiBQQVIgYW5kIHZpZGVvIHNpemUuCisgICAgaW50IGRpc3BsYXlXaWR0aCA9IG9y
aWdpbmFsU2l6ZS53aWR0aCgpICogcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvcjsKKyAgICBpbnQg
ZGlzcGxheUhlaWdodCA9IG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAqIHBpeGVsQXNwZWN0UmF0aW9E
ZW5vbWluYXRvcjsKKworICAgIC8vIERpdmlkZSBkaXNwbGF5IHdpZHRoIGFuZCBoZWlnaHQgYnkg
dGhlaXIgR0NEIHRvIGF2b2lkIHBvc3NpYmxlIG92ZXJmbG93cy4KKyAgICBpbnQgZGlzcGxheUFz
cGVjdFJhdGlvR0NEID0gZ3JlYXRlc3RDb21tb25EaXZpc29yKGRpc3BsYXlXaWR0aCwgZGlzcGxh
eUhlaWdodCk7CisgICAgZGlzcGxheVdpZHRoIC89IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKKyAg
ICBkaXNwbGF5SGVpZ2h0IC89IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKKworICAgIC8vIEFwcGx5
IERBUiB0byBvcmlnaW5hbCB2aWRlbyBzaXplLiBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2aW9yIGFz
IGluIHh2aW1hZ2VzaW5rJ3Mgc2V0Y2FwcyBmdW5jdGlvbi4KKyAgICBndWludDY0IHdpZHRoID0g
MCwgaGVpZ2h0ID0gMDsKKyAgICBpZiAoIShvcmlnaW5hbFNpemUuaGVpZ2h0KCkgJSBkaXNwbGF5
SGVpZ2h0KSkgeworICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgiS2VlcGluZyB2aWRlbyBvcmln
aW5hbCBoZWlnaHQiKTsKKyAgICAgICAgd2lkdGggPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50
KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSwgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKKyAg
ICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLmhlaWdodCgp
KTsKKyAgICB9IGVsc2UgaWYgKCEob3JpZ2luYWxTaXplLndpZHRoKCkgJSBkaXNwbGF5V2lkdGgp
KSB7CisgICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJLZWVwaW5nIHZpZGVvIG9yaWdpbmFsIHdp
ZHRoIik7CisgICAgICAgIGhlaWdodCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2lu
YWxTaXplLndpZHRoKCksIGRpc3BsYXlIZWlnaHQsIGRpc3BsYXlXaWR0aCk7CisgICAgICAgIHdp
ZHRoID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLndpZHRoKCkpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJBcHByb3hpbWF0aW5nIHdoaWxlIGtl
ZXBpbmcgb3JpZ2luYWwgdmlkZW8gaGVpZ2h0Iik7CisgICAgICAgIHdpZHRoID0gZ3N0X3V0aWxf
dWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0KCksIGRpc3BsYXlXaWR0aCwgZGlz
cGxheUhlaWdodCk7CisgICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdp
bmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgfQorCisgICAgTE9HX01FRElBX01FU1NBR0UoIk5hdHVy
YWwgc2l6ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCAieCUiIEdfR1VJTlQ2NF9GT1JNQVQsIHdpZHRo
LCBoZWlnaHQpOworICAgIG1fdmlkZW9TaXplID0gSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHdp
ZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQpKTsKKyAgICByZXR1cm4gbV92aWRlb1NpemU7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0Vm9sdW1lKGZs
b2F0IHZvbHVtZSkKK3sKKyAgICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZ3N0X3N0cmVhbV92b2x1bWVfc2V0X3ZvbHVtZShtX3ZvbHVtZUVsZW1lbnQuZ2V0
KCksIEdTVF9TVFJFQU1fVk9MVU1FX0ZPUk1BVF9DVUJJQywgc3RhdGljX2Nhc3Q8ZG91YmxlPih2
b2x1bWUpKTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6dm9s
dW1lKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gZ3N0X3N0cmVhbV92b2x1bWVfZ2V0X3ZvbHVtZShtX3ZvbHVtZUVs
ZW1lbnQuZ2V0KCksIEdTVF9TVFJFQU1fVk9MVU1FX0ZPUk1BVF9DVUJJQyk7Cit9CisKKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpub3RpZnlQbGF5ZXJPZlZvbHVtZUNo
YW5nZSgpCit7CisgICAgbV92b2x1bWVUaW1lckhhbmRsZXIgPSAwOworCisgICAgaWYgKCFtX3Bs
YXllciB8fCAhbV92b2x1bWVFbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgZG91YmxlIHZv
bHVtZTsKKyAgICB2b2x1bWUgPSBnc3Rfc3RyZWFtX3ZvbHVtZV9nZXRfdm9sdW1lKG1fdm9sdW1l
RWxlbWVudC5nZXQoKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0NVQklDKTsKKyAgICAvLyBn
ZXRfdm9sdW1lKCkgY2FuIHJldHVybiB2YWx1ZXMgc3VwZXJpb3IgdG8gMS4wIGlmIHRoZSB1c2Vy
CisgICAgLy8gYXBwbGllcyBzb2Z0d2FyZSB1c2VyIGdhaW4gdmlhIHRoaXJkIHBhcnR5IGFwcGxp
Y2F0aW9uIChHTk9NRQorICAgIC8vIHZvbHVtZSBjb250cm9sIGZvciBpbnN0YW5jZSkuCisgICAg
dm9sdW1lID0gQ0xBTVAodm9sdW1lLCAwLjAsIDEuMCk7CisgICAgbV9wbGF5ZXItPnZvbHVtZUNo
YW5nZWQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZvbHVtZSkpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6OnZvbHVtZUNoYW5nZWQoKQoreworICAgIGlmIChtX3ZvbHVt
ZVRpbWVySGFuZGxlcikKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fdm9sdW1lVGltZXJIYW5k
bGVyKTsKKyAgICBtX3ZvbHVtZVRpbWVySGFuZGxlciA9IGdfdGltZW91dF9hZGQoMCwgcmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4obWVkaWFQbGF5ZXJQcml2YXRlVm9sdW1lQ2hhbmdlVGlt
ZW91dENhbGxiYWNrKSwgdGhpcyk7Cit9CisKK01lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bmV0d29ya1N0YXRlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9uZXR3b3JrU3RhdGU7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlYWR5U3RhdGUoKSBjb25zdAoreworICAg
IHJldHVybiBtX3JlYWR5U3RhdGU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6c2l6ZUNoYW5nZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkK
K3sKKyAgICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19v
YmplY3Rfc2V0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm11dGUiLCBtdXRlZCwgTlVMTCk7Cit9
CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bXV0ZWQoKSBjb25zdAor
eworICAgIGlmICghbV92b2x1bWVFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBib29sIG11dGVkOworICAgIGdfb2JqZWN0X2dldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJt
dXRlIiwgJm11dGVkLCBOVUxMKTsKKyAgICByZXR1cm4gbXV0ZWQ7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bm90aWZ5UGxheWVyT2ZNdXRlKCkKK3sKKyAgICBt
X211dGVUaW1lckhhbmRsZXIgPSAwOworCisgICAgaWYgKCFtX3BsYXllciB8fCAhbV92b2x1bWVF
bGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBnYm9vbGVhbiBtdXRlZDsKKyAgICBnX29i
amVjdF9nZXQobV92b2x1bWVFbGVtZW50LmdldCgpLCAibXV0ZSIsICZtdXRlZCwgTlVMTCk7Cisg
ICAgbV9wbGF5ZXItPm11dGVDaGFuZ2VkKHN0YXRpY19jYXN0PGJvb2w+KG11dGVkKSk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bXV0ZUNoYW5nZWQoKQorewor
ICAgIGlmIChtX211dGVUaW1lckhhbmRsZXIpCisgICAgICAgIGdfc291cmNlX3JlbW92ZShtX211
dGVUaW1lckhhbmRsZXIpOworICAgIG1fbXV0ZVRpbWVySGFuZGxlciA9IGdfdGltZW91dF9hZGQo
MCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4obWVkaWFQbGF5ZXJQcml2YXRlTXV0ZUNo
YW5nZVRpbWVvdXRDYWxsYmFjayksIHRoaXMpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OnRyaWdnZXJSZXBhaW50KEdzdEJ1ZmZlciogYnVmZmVyKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoR1NUX0lTX0JVRkZFUihidWZmZXIpKTsKKyAgICBnc3RfYnVmZmVy
X3JlcGxhY2UoJm1fYnVmZmVyLCBidWZmZXIpOworICAgIG1fcGxheWVyLT5yZXBhaW50KCk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0U2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplKQoreworICAgIG1fc2l6ZSA9IHNpemU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9wbGF5ZXItPnZpc2libGUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gd2Via2l0R3N0R2V0UGFkQ2FwcyhtX3ZpZGVvU2lu
a1BhZC5nZXQoKSk7CisgICAgaWYgKCFjYXBzKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQ
dHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdl
KG1fYnVmZmVyLCBjYXBzLmdldCgpKTsKKyAgICBpZiAoIWdzdEltYWdlKQorICAgICAgICByZXR1
cm47CisKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVpbnRlcnByZXRfY2FzdDxJbWFnZSo+KGdz
dEltYWdlLT5pbWFnZSgpLmdldCgpKSwgQ29sb3JTcGFjZVNSR0IsCisgICAgICAgIHJlY3QsIGdz
dEltYWdlLT5yZWN0KCksIENvbXBvc2l0ZUNvcHksIERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRp
b24sIGZhbHNlKTsKK30KKworI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZW50ZXJGdWxsc2NyZWVuKCkKK3sKKyAg
ICBBU1NFUlQoIW1fZnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcik7CisgICAgbV9mdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyID0gRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcjo6Y3Jl
YXRlKHRoaXMpOworICAgIGlmIChtX2Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIpCisgICAgICAg
IG1fZnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci0+ZW50ZXJGdWxsc2NyZWVuKCk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZXhpdEZ1bGxzY3JlZW4oKQorewor
ICAgIGlmICghbV9mdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9mdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLT5leGl0RnVsbHNjcmVlbigpOworICAgIG1f
ZnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5yZWxlYXNlKCk7Cit9CisjZW5kaWYKKworYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25z
dAoreworI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykgJiYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA9PSAxMDUwCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS83
Mzg5OTQ1PgorICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5k
aWYKK30KKworUGxhdGZvcm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpw
bGF0Zm9ybU1lZGlhKCkgY29uc3QKK3sKKyNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8p
CisgICAgUGxhdGZvcm1NZWRpYSBwOworICAgIHAudHlwZSA9IFBsYXRmb3JtTWVkaWE6OkdTdHJl
YW1lckdXb3JsZFR5cGU7CisgICAgcC5tZWRpYS5nc3RyZWFtZXJHV29ybGQgPSBtX2dzdEdXb3Js
ZC5nZXQoKTsKKyAgICByZXR1cm4gcDsKKyNlbHNlCisgICAgcmV0dXJuIE5vUGxhdGZvcm1NZWRp
YTsKKyNlbmRpZgorfQorCitNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlOjptb3ZpZUxvYWRUeXBlKCkgY29uc3QKK3sKKyAgICBpZiAobV9y
ZWFkeVN0YXRlID09IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKKyAgICAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyOjpVbmtub3duOworCisgICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQorICAgICAgICBy
ZXR1cm4gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW07CisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6
OkRvd25sb2FkOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW5kIGluaXRpYWxpemVz
IHNvbWUgaW50ZXJuYWwgdmFyaWFibGVzLCBhbmQgcmV0dXJucyBhCisvLyBwb2ludGVyIHRvIHRo
ZSBlbGVtZW50IHRoYXQgc2hvdWxkIHJlY2VpdmUgdGhlIGRhdGEgZmxvdyBmaXJzdAorR3N0RWxl
bWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y3JlYXRlVmlkZW9TaW5rKEdz
dEVsZW1lbnQqIHBpcGVsaW5lKQoreworICAgIGlmICghaW5pdGlhbGl6ZUdTdHJlYW1lcigpKQor
ICAgICAgICByZXR1cm4gMDsKKworI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKKyAg
ICBtX2dzdEdXb3JsZCA9IEdTdHJlYW1lckdXb3JsZDo6Y3JlYXRlR1dvcmxkKHBpcGVsaW5lKTsK
KyAgICBtX3dlYmtpdFZpZGVvU2luayA9IHdlYmtpdFZpZGVvU2lua05ldyhtX2dzdEdXb3JsZC5n
ZXQoKSk7CisjZWxzZQorICAgIG1fd2Via2l0VmlkZW9TaW5rID0gd2Via2l0VmlkZW9TaW5rTmV3
KCk7CisjZW5kaWYKKyAgICBtX3ZpZGVvU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9n
ZXRfc3RhdGljX3BhZChtX3dlYmtpdFZpZGVvU2luay5nZXQoKSwgInNpbmsiKSk7CisKKyAgICBt
X3JlcGFpbnRIYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdChtX3dlYmtpdFZpZGVvU2luay5nZXQo
KSwgInJlcGFpbnQtcmVxdWVzdGVkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVSZXBh
aW50Q2FsbGJhY2spLCB0aGlzKTsKKworI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykK
KyAgICAvLyBCdWlsZCBhIG5ldyB2aWRlbyBzaW5rIGNvbnNpc3Rpbmcgb2YgYSBiaW4gY29udGFp
bmluZyBhIHRlZQorICAgIC8vIChtZWFudCB0byBkaXN0cmlidXRlIGRhdGEgdG8gbXVsdGlwbGUg
dmlkZW8gc2lua3MpIGFuZCBvdXIKKyAgICAvLyBpbnRlcm5hbCB2aWRlbyBzaW5rLiBGb3IgZnVs
bHNjcmVlbiB3ZSBjcmVhdGUgYW4gYXV0b3ZpZGVvc2luaworICAgIC8vIGFuZCBpbml0aWFsbHkg
YmxvY2sgdGhlIGRhdGEgZmxvdyB0b3dhcmRzIGl0IGFuZCBjb25maWd1cmUgaXQKKworICAgIG1f
dmlkZW9TaW5rQmluID0gZ3N0X2Jpbl9uZXcoInZpZGVvLXNpbmsiKTsKKworICAgIEdzdEVsZW1l
bnQqIHZpZGVvVGVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ0ZWUiLCAidmlkZW9UZWUi
KTsKKyAgICBHc3RFbGVtZW50KiBxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVl
dWUiLCAwKTsKKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgR1JlZlB0cjxHc3RQYWQ+
IHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQodmlkZW9UZWUs
ICJzaW5rIikpOworICAgIEdTVF9PQkpFQ1RfRkxBR19TRVQoR1NUX09CSkVDVChzaW5rUGFkLmdl
dCgpKSwgR1NUX1BBRF9GTEFHX1BST1hZX0FMTE9DQVRJT04pOworI2VuZGlmCisKKyAgICBnc3Rf
YmluX2FkZF9tYW55KEdTVF9CSU4obV92aWRlb1NpbmtCaW4uZ2V0KCkpLCB2aWRlb1RlZSwgcXVl
dWUsIE5VTEwpOworCisgICAgLy8gTGluayBhIG5ldyBzcmMgcGFkIGZyb20gdGVlIHRvIHF1ZXVl
MS4KKyAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCh2aWRlb1RlZSwgMCwgcXVldWUsICJz
aW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOworI2VuZGlmCisKKyAgICBHc3RFbGVt
ZW50KiBhY3R1YWxWaWRlb1NpbmsgPSAwOworICAgIG1fZnBzU2luayA9IGdzdF9lbGVtZW50X2Zh
Y3RvcnlfbWFrZSgiZnBzZGlzcGxheXNpbmsiLCAic2luayIpOworICAgIGlmIChtX2Zwc1Npbmsp
IHsKKyAgICAgICAgLy8gVGhlIHZlcmJvc2UgcHJvcGVydHkgaGFzIGJlZW4gYWRkZWQgaW4gLWJh
ZCAwLjEwLjIyLiBNYWtpbmcKKyAgICAgICAgLy8gdGhpcyB3aG9sZSBjb2RlIGRlcGVuZCBvbiBp
dCBiZWNhdXNlIHdlIGRvbid0IHdhbnQKKyAgICAgICAgLy8gZnBzZGlwbGF5c2luayB0byBzcGl0
IGRhdGEgb24gc3Rkb3V0LgorICAgICAgICBHc3RFbGVtZW50RmFjdG9yeSogZmFjdG9yeSA9IEdT
VF9FTEVNRU5UX0ZBQ1RPUlkoR1NUX0VMRU1FTlRfR0VUX0NMQVNTKG1fZnBzU2luayktPmVsZW1l
bnRmYWN0b3J5KTsKKyAgICAgICAgaWYgKGdzdF9wbHVnaW5fZmVhdHVyZV9jaGVja192ZXJzaW9u
KEdTVF9QTFVHSU5fRkVBVFVSRShmYWN0b3J5KSwgMCwgMTAsIDIyKSkgeworICAgICAgICAgICAg
Z19vYmplY3Rfc2V0KG1fZnBzU2luaywgInNpbGVudCIsIFRSVUUgLCBOVUxMKTsKKworICAgICAg
ICAgICAgLy8gVHVybiBvZmYgdGV4dCBvdmVybGF5IHVubGVzcyBsb2dnaW5nIGlzIGVuYWJsZWQu
CisjaWYgTE9HX0RJU0FCTEVECisgICAgICAgICAgICBnX29iamVjdF9zZXQobV9mcHNTaW5rLCAi
dGV4dC1vdmVybGF5IiwgRkFMU0UgLCBOVUxMKTsKKyNlbHNlCisgICAgICAgICAgICBXVEZMb2dD
aGFubmVsKiBjaGFubmVsID0gZ2V0Q2hhbm5lbEZyb21OYW1lKCJNZWRpYSIpOworICAgICAgICAg
ICAgaWYgKGNoYW5uZWwtPnN0YXRlICE9IFdURkxvZ0NoYW5uZWxPbikKKyAgICAgICAgICAgICAg
ICBnX29iamVjdF9zZXQobV9mcHNTaW5rLCAidGV4dC1vdmVybGF5IiwgRkFMU0UgLCBOVUxMKTsK
KyNlbmRpZiAvLyBMT0dfRElTQUJMRUQKKworICAgICAgICAgICAgaWYgKGdfb2JqZWN0X2NsYXNz
X2ZpbmRfcHJvcGVydHkoR19PQkpFQ1RfR0VUX0NMQVNTKG1fZnBzU2luayksICJ2aWRlby1zaW5r
IikpIHsKKyAgICAgICAgICAgICAgICBnX29iamVjdF9zZXQobV9mcHNTaW5rLCAidmlkZW8tc2lu
ayIsIG1fd2Via2l0VmlkZW9TaW5rLmdldCgpLCBOVUxMKTsKKyNpZiBVU0UoTkFUSVZFX0ZVTExT
Q1JFRU5fVklERU8pCisgICAgICAgICAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTihtX3ZpZGVv
U2lua0Jpbi5nZXQoKSksIG1fZnBzU2luayk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBhY3R1
YWxWaWRlb1NpbmsgPSBtX2Zwc1Npbms7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICBtX2Zwc1NpbmsgPSAwOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fZnBzU2lu
ayA9IDA7CisgICAgfQorCisgICAgaWYgKCFtX2Zwc1NpbmspIHsKKyNpZiBVU0UoTkFUSVZFX0ZV
TExTQ1JFRU5fVklERU8pCisgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV92aWRlb1NpbmtC
aW4uZ2V0KCkpLCBtX3dlYmtpdFZpZGVvU2luay5nZXQoKSk7CisjZW5kaWYKKyAgICAgICAgYWN0
dWFsVmlkZW9TaW5rID0gbV93ZWJraXRWaWRlb1NpbmsuZ2V0KCk7CisgICAgfQorCisgICAgQVNT
RVJUKGFjdHVhbFZpZGVvU2luayk7CisKKyNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8p
CisgICAgLy8gRmFzdGVyIGVsZW1lbnRzIGxpbmtpbmcuCisgICAgZ3N0X2VsZW1lbnRfbGlua19w
YWRzX2Z1bGwocXVldWUsICJzcmMiLCBhY3R1YWxWaWRlb1NpbmssICJzaW5rIiwgR1NUX1BBRF9M
SU5LX0NIRUNLX05PVEhJTkcpOworCisgICAgLy8gQWRkIGEgZ2hvc3RwYWQgdG8gdGhlIGJpbiBz
byBpdCBjYW4gcHJveHkgdG8gdGVlLgorICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdS
ZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQodmlkZW9UZWUsICJzaW5rIikpOworICAgIGdz
dF9lbGVtZW50X2FkZF9wYWQobV92aWRlb1NpbmtCaW4uZ2V0KCksIGdzdF9naG9zdF9wYWRfbmV3
KCJzaW5rIiwgcGFkLmdldCgpKSk7CisKKyAgICAvLyBTZXQgdGhlIGJpbiBhcyB2aWRlbyBzaW5r
IG9mIHBsYXliaW4uCisgICAgcmV0dXJuIG1fdmlkZW9TaW5rQmluLmdldCgpOworI2Vsc2UKKyAg
ICByZXR1cm4gYWN0dWFsVmlkZW9TaW5rOworI2VuZGlmCit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0U3RyZWFtVm9sdW1lRWxlbWVudChHc3RTdHJlYW1Wb2x1
bWUqIHZvbHVtZSkKK3sKKyAgICBBU1NFUlQoIW1fdm9sdW1lRWxlbWVudCk7CisgICAgbV92b2x1
bWVFbGVtZW50ID0gdm9sdW1lOworCisgICAgZ19vYmplY3Rfc2V0KG1fdm9sdW1lRWxlbWVudC5n
ZXQoKSwgIm11dGUiLCBtX3BsYXllci0+bXV0ZWQoKSwgInZvbHVtZSIsIG1fcGxheWVyLT52b2x1
bWUoKSwgTlVMTCk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fdm9sdW1lRWxlbWVudC5nZXQo
KSwgIm5vdGlmeTo6dm9sdW1lIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVWb2x1bWVD
aGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fdm9sdW1lRWxl
bWVudC5nZXQoKSwgIm5vdGlmeTo6bXV0ZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRl
TXV0ZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOworfQorCit1bnNpZ25lZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlOjpkZWNvZGVkRnJhbWVDb3VudCgpIGNvbnN0Cit7CisgICAgZ3Vp
bnQ2NCBkZWNvZGVkRnJhbWVzID0gMDsKKyAgICBpZiAobV9mcHNTaW5rKQorICAgICAgICBnX29i
amVjdF9nZXQobV9mcHNTaW5rLCAiZnJhbWVzLXJlbmRlcmVkIiwgJmRlY29kZWRGcmFtZXMsIE5V
TEwpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVjb2RlZEZyYW1lcyk7Cit9
CisKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmRyb3BwZWRGcmFt
ZUNvdW50KCkgY29uc3QKK3sKKyAgICBndWludDY0IGZyYW1lc0Ryb3BwZWQgPSAwOworICAgIGlm
IChtX2Zwc1NpbmspCisgICAgICAgIGdfb2JqZWN0X2dldChtX2Zwc1NpbmssICJmcmFtZXMtZHJv
cHBlZCIsICZmcmFtZXNEcm9wcGVkLCBOVUxMKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGZyYW1lc0Ryb3BwZWQpOworfQorCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjphdWRpb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdAoreworICAgIEdzdFF1
ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9CWVRFUyk7Cisg
ICAgZ2ludDY0IHBvc2l0aW9uID0gMDsKKworICAgIGlmIChhdWRpb1NpbmsoKSAmJiBnc3RfZWxl
bWVudF9xdWVyeShhdWRpb1NpbmsoKSwgcXVlcnkpKQorICAgICAgICBnc3RfcXVlcnlfcGFyc2Vf
cG9zaXRpb24ocXVlcnksIDAsICZwb3NpdGlvbik7CisKKyAgICBnc3RfcXVlcnlfdW5yZWYocXVl
cnkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pOworfQorCit1
bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp2aWRlb0RlY29kZWRCeXRl
Q291bnQoKSBjb25zdAoreworICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9z
aXRpb24oR1NUX0ZPUk1BVF9CWVRFUyk7CisgICAgZ2ludDY0IHBvc2l0aW9uID0gMDsKKworICAg
IGlmIChnc3RfZWxlbWVudF9xdWVyeShtX3dlYmtpdFZpZGVvU2luay5nZXQoKSwgcXVlcnkpKQor
ICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZwb3NpdGlvbik7CisK
KyAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocG9zaXRpb24pOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWNlNDNlY2I5NmIwZTdmNjVlMDEyOWMwNmM2N2JjMTM2ZTU1Y2Y5NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgSWdhbGlhIFMuTAorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZV9oCisjZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2VfaAorI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdS
ZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKworI2lu
Y2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisjaW5jbHVkZSA8Z3N0L2F1ZGlvL3N0
cmVhbXZvbHVtZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxnc3QvaW50ZXJmYWNlcy9zdHJlYW12b2x1
bWUuaD4KKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rIFdlYktpdFZp
ZGVvU2luazsKK3R5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXIgR3N0QnVmZmVyOwordHlwZWRlZiBz
dHJ1Y3QgX0dzdE1lc3NhZ2UgR3N0TWVzc2FnZTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RFbGVtZW50
IEdzdEVsZW1lbnQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlckdTdHJlYW1lcjsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIElu
dFNpemU7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgR1N0cmVhbWVyR1dvcmxkOworCitjbGFzcyBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0
ZUludGVyZmFjZSB7CisKK3B1YmxpYzoKKyAgICB+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZSgpOworCisgICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0OworCisgICAgdm9pZCBz
ZXRWb2x1bWUoZmxvYXQpOworICAgIGZsb2F0IHZvbHVtZSgpIGNvbnN0OworICAgIHZvaWQgdm9s
dW1lQ2hhbmdlZCgpOworICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKTsKKwor
ICAgIGJvb2wgc3VwcG9ydHNNdXRpbmcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdm9p
ZCBzZXRNdXRlZChib29sKTsKKyAgICBib29sIG11dGVkKCkgY29uc3Q7CisgICAgdm9pZCBtdXRl
Q2hhbmdlZCgpOworICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZNdXRlKCk7CisKKyAgICBNZWRpYVBs
YXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0OworICAgIE1lZGlhUGxheWVy
OjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKKworICAgIHZvaWQgc2V0VmlzaWJsZShi
b29sKSB7IH0KKyAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgc2l6
ZUNoYW5nZWQoKTsKKworICAgIHZvaWQgdHJpZ2dlclJlcGFpbnQoR3N0QnVmZmVyKik7CisgICAg
dm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBmbG9hdCBtYXhUaW1lTG9hZGVkKCkgY29uc3QgeyByZXR1cm4gMC4wOyB9
CisKKyNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCisgICAgdm9pZCBlbnRlckZ1bGxz
Y3JlZW4oKTsKKyAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7CisgICAgYm9vbCBjYW5FbnRlckZ1
bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisjZW5kaWYKKworICAgIGJvb2wgc3Vw
cG9ydHNGdWxsc2NyZWVuKCkgY29uc3Q7CisgICAgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlh
KCkgY29uc3Q7CisKKyAgICBNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBtb3ZpZUxvYWRUeXBl
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0ID0gMDsKKwor
ICAgIE1lZGlhUGxheWVyKiBtZWRpYVBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWVyOyB9
CisKKyAgICB1bnNpZ25lZCBkZWNvZGVkRnJhbWVDb3VudCgpIGNvbnN0OworICAgIHVuc2lnbmVk
IGRyb3BwZWRGcmFtZUNvdW50KCkgY29uc3Q7CisgICAgdW5zaWduZWQgYXVkaW9EZWNvZGVkQnl0
ZUNvdW50KCkgY29uc3Q7CisgICAgdW5zaWduZWQgdmlkZW9EZWNvZGVkQnl0ZUNvdW50KCkgY29u
c3Q7CisKK3Byb3RlY3RlZDoKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKE1l
ZGlhUGxheWVyKik7CisgICAgR3N0RWxlbWVudCogY3JlYXRlVmlkZW9TaW5rKEdzdEVsZW1lbnQq
IHBpcGVsaW5lKTsKKyAgICB2b2lkIHNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR3N0U3RyZWFtVm9s
dW1lKik7CisgICAgdmlydHVhbCBHc3RFbGVtZW50KiBhdWRpb1NpbmsoKSBjb25zdCB7IHJldHVy
biAwOyB9CisKKyAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7CisgICAgR1JlZlB0cjxHc3RTdHJl
YW1Wb2x1bWU+IG1fdm9sdW1lRWxlbWVudDsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fd2Vi
a2l0VmlkZW9TaW5rOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV92aWRlb1NpbmtCaW47Cisg
ICAgR3N0RWxlbWVudCogbV9mcHNTaW5rOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1f
cmVhZHlTdGF0ZTsKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRl
OworICAgIEludFNpemUgbV9zaXplOworICAgIEdzdEJ1ZmZlciogbV9idWZmZXI7CisjaWYgVVNF
KE5BVElWRV9GVUxMU0NSRUVOX1ZJREVPKQorICAgIFJlZlB0cjxHU3RyZWFtZXJHV29ybGQ+IG1f
Z3N0R1dvcmxkOworICAgIE93blB0cjxGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVy
PiBtX2Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI7CisjZW5kaWYKKyAgICBndWludCBtX3ZvbHVt
ZVRpbWVySGFuZGxlcjsKKyAgICBndWludCBtX211dGVUaW1lckhhbmRsZXI7CisgICAgZ3VpbnQg
bV9yZXBhaW50SGFuZGxlcjsKKyAgICBHUmVmUHRyPEdzdFBhZD4gbV92aWRlb1NpbmtQYWQ7Cisg
ICAgbXV0YWJsZSBJbnRTaXplIG1fdmlkZW9TaXplOworfTsKK30KKworI2VuZGlmIC8vIFVTRShH
U1RSRUFNRVIpCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmNw
cAppbmRleCA1NDg4MWZlNjIxODllMmIzNGFmMDk5MTJkOGYxMTllYjJiMzI3MzhjLi40NmU4MWNj
ZWM4OTJhZTgxMzUzOWY5NmUwOWEzYjMwNTc0NDVhNjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5W
aWRlb0NvbnRyb2xsZXJHdGsuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiR1N0cmVh
bWVyR1dvcmxkLmgiCiAjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgogI2luY2x1ZGUgIk1lZGlh
UGxheWVyLmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIgogCiAjaW5jbHVkZSA8Z2Rr
L2dkay5oPgogI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CkBAIC0xMjQsNyArMTI0LDcgQEAg
c3RhdGljIHZvaWQgdm9sdW1lVmFsdWVDaGFuZ2VkKEd0a1NjYWxlQnV0dG9uICpidXR0b24sIGdk
b3VibGUgdmFsdWUsIEZ1bGxzY3JlZW4KIH0KIAogCi1GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVy
R3RrOjpGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lciogcGxheWVyKQorRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6RnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlckd0ayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIp
CiAgICAgOiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyKHBsYXllcikKICAgICAs
IG1faHVkVGltZW91dElkKDApCiAgICAgLCBtX3Byb2dyZXNzQmFyVXBkYXRlSWQoMCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5oCmluZGV4IDRiOWYzZWIyMjg4YmEwODQ1ODNk
YTg4YTRiZjI5YTBkZmU2N2Q5NDkuLmQ1NzcwYzU5ODg2NjQ3NGJhOTU0ODViM2Y0MWIyYzQzYjY5
MTQ0YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuaApAQCAtMjgsNyAr
MjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZ1bGxzY3JlZW5WaWRlb0NvbnRy
b2xsZXJHdGsgOiBwdWJsaWMgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lciB7CiBw
dWJsaWM6Ci0gICAgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayhNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIqKTsKKyAgICBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqKTsKIAogICAgIHZvaWQgZ3RrQ29uZmlndXJlKEdka0V2
ZW50Q29uZmlndXJlKik7CiAKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRl
eCAzYjcwNTcwNTQzMWUxODQyOTZjOTBmYzNkMDBiYWFkOWMxNDI3MjJhLi4zZDhkYmI1YjFhNTBi
MDM4YzE1NjZhY2E4ODYxZWJlMDgzNmIzY2I2IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMDItMDUgIEpvbmF0aG9uIEpvbmdzbWEg
IDxqb25hdGhvbi5qb25nc21hQGNvbGxhYm9yYS5jb20+CisKKyAgICAgICAgW2d0a10gY29yZSBp
bXBsZW1lbnRhdGlvbiBmb3IgZ2V0VXNlck1lZGlhIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMjYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6IHJlbW92ZWQgZmFyc3Ry
ZWFtIHJlcXVpcmVtZW50IGZvciBub3cgc2luY2UgaXQncworICAgICAgICBub3QgYWN0dWFsbHkg
dXNlZCB5ZXQgYW5kIG1ha2VzIGl0IG1vcmUgZGlmZmljdWx0IHRvIGJ1aWxkIGFuZCB0ZXN0CisK
KwogMjAxMy0wMi0wMiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBbQ01ha2VdIEFkb3B0IHRoZSBXaW5DRSBwb3J0IHRvIG5ldyBDTWFrZQpkaWZmIC0t
Z2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDg1ZmY1NTU4MTM3YTI5YmFl
OWU2OTdlMzFjMTA3ODVjNjYxNWYzODAuLjMxZmI0MDRjZTIwMTc0ZDc5MzBkYzk0NTM2OTlhYWYz
MjczYjVlMjQgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAg
LTk5MiwyMSArOTkyLDYgQEAgaWYgdGVzdCAiJGVuYWJsZV92aWRlbyIgPSAieWVzIiB8fCB0ZXN0
ICIkZW5hYmxlX3dlYl9hdWRpbyIgPSAieWVzIjsgdGhlbgogICAgQUNfU1VCU1QoW0dTVFJFQU1F
Ul9MSUJTXSkKIGZpCiAKLSMgZmFyc3RyZWFtLTAuMSBkZXBlbmRzIG9uIGdzdHJlYW1lciAwLjEw
IGN1cnJlbnRseS4gRGlzYWJsZQotIyBtZWRpYV9zdHJlYW0gaWYgZ3N0cmVhbWVyIDEuMCBidWls
ZCBzdXBwb3J0IGlzIGVuYWJsZWQuCi1pZiB0ZXN0ICIkaGF2ZV9nc3RyZWFtZXIiICE9ICJ5ZXMi
IHx8IHRlc3QgIiRHU1RfQVBJX1ZFUlNJT04iID0gIjEuMCI7IHRoZW4KLSAgIGlmIHRlc3QgIiRl
bmFibGVfbWVkaWFfc3RyZWFtIiA9ICJ5ZXMiOyB0aGVuCi0gICAgICBBQ19NU0dfV0FSTihbRGlz
YWJsaW5nIE1lZGlhIFN0cmVhbSBiZWNhdXNlIG5vIEdTdHJlYW1lciAwLjEwIHN1cHBvcnQgaXMg
ZW5hYmxlZF0pCi0gICBmaQotICAgZW5hYmxlX21lZGlhX3N0cmVhbT1mYWxzZQotZmkKLWlmIHRl
c3QgIiRlbmFibGVfbWVkaWFfc3RyZWFtIiA9ICJ5ZXMiOyB0aGVuCi0gICBQS0dfQ0hFQ0tfTU9E
VUxFUyhbRkFSU1RSRUFNXSwgW2ZhcnN0cmVhbS0wLjFdLAotICAgICAgICAgICAgICAgICAgICAg
W2hhdmVfZmFyc3RyZWFtPXllc10sIFtlbmFibGVfbWVkaWFfc3RyZWFtPWZhbHNlXSkKLSAgIEFD
X1NVQlNUKFtGQVJTVFJFQU1fQ0ZMQUdTXSkKLSAgIEFDX1NVQlNUKFtGQVJTVFJFQU1fTElCU10p
Ci1maQotCiBhY2NlbGVyYXRpb25fYmFja2VuZF9kZXNjcmlwdGlvbj0kd2l0aF9hY2NlbGVyYXRp
b25fYmFja2VuZAogaWYgdGVzdCAiJHdpdGhfYWNjZWxlcmF0aW9uX2JhY2tlbmQiID0gImNsdXR0
ZXIiOyB0aGVuCiAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhDTFVUVEVSLCBjbHV0dGVyLTEuMCA+PSAk
Q0xVVFRFUl9SRVFVSVJFRF9WRVJTSU9OKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186864</attachid>
            <date>2013-02-06 08:49:50 -0800</date>
            <delta_ts>2013-02-06 10:17:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100261-20130206104627.patch</filename>
            <type>text/plain</type>
            <size>65837</size>
            <attacher name="Jonathon Jongsma (jonner)">jonathon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZmZDU4NGJjNWY3ODQx
YjViMWJmMWJiMmMzNGNiNzQyMWIwMDg3ZC4uOGJkMmQzZTQyY2Q0OWUxYjYyOWU3OGE2YTFkMjgw
NjNjOWQ1NjU4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDEzLTAyLTA2ICBKb25h
dGhvbiBKb25nc21hICA8am9uYXRob24uam9uZ3NtYUBjb2xsYWJvcmEuY29tPgorCisgICAgICAg
IFtHU3RyZWFtZXJdIE1lZGlhUGxheWVyJ3MgY29kZSBpcyBub3QgZWFzaWx5IHJldXNhYmxlIGJ5
IG90aGVyIEdTdHJlYW1lci1iYXNlZCBwbGF5ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAyNjEKKworICAgICAgICBSZWZhY3RvciB0aGUgbWVk
aWEgcGxheWVyIGltcGxlbWVudGF0aW9uIHNvIHRoYXQgbW9yZSBvZiB0aGUKKyAgICAgICAgaW50
ZXJuYWwgZnVuY3Rpb25hbGl0eSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gdGhlIGN1cnJlbnQgbWVk
aWEKKyAgICAgICAgYmFja2VuZCBhbmQgdGhlIG1lZGlhc3RyZWFtIHBsYXllciBiYWNrZW5kLiAg
Q29tbW9uIGNvZGUgaXMKKyAgICAgICAgYnJva2VuIG91dCBpbnRvIGEgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZSBjbGFzcywgYW5kCisgICAgICAgIGJvdGggTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyIGFuZAorICAgICAgICBTdHJlYW1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIgaW5oZXJpdCBmcm9tIHRoaXMgYmFzZSBjbGFzcy4KKworICAgICAgICBSZXZpZXdlZCBieSBQ
aGlsaXBwZSBOb3JtYW5kCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNpbmNlIGZ1bmN0aW9uYWxp
dHkgaXMgY292ZXJlZCBieSBleGlzdGluZyBtZWRpYSB0ZXN0cworCisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBU
YXJnZXQucHJpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9GdWxsc2Ny
ZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyOjpGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lci5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5oOgorICAgICAgICAoTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aXNMaXZlU3RyZWFtKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpncmVhdGVzdENvbW1vbkRpdmlzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFQbGF5ZXJQ
cml2YXRlVm9sdW1lQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhUGxh
eWVyUHJpdmF0ZVZvbHVtZUNoYW5nZVRpbWVvdXRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjptZWRpYVBsYXllclByaXZhdGVNdXRlQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6Om1lZGlhUGxheWVyUHJpdmF0ZU11dGVDaGFuZ2VUaW1lb3V0Q2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6bWVkaWFQbGF5ZXJQcml2YXRlUmVwYWludENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bmF0dXJhbFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0
Vm9sdW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2U6OnZvbHVtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp2b2x1bWVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5ldHdvcmtTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpyZWFk
eVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2U6OnNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2U6OnNldE11dGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2U6Om11dGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5vdGlmeVBsYXllck9mTXV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjptdXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp0cmlnZ2VyUmVw
YWludCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
OjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6OmVudGVyRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlOjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzdXBwb3J0c0Z1bGxzY3JlZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cGxhdGZv
cm1NZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlOjptb3ZpZUxvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZVZpZGVvU2luayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRTdHJlYW1Wb2x1bWVFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmRlY29kZWRG
cmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6OmRyb3BwZWRGcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6OmF1ZGlvRGVjb2RlZEJ5dGVDb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp2aWRlb0RlY29kZWRCeXRl
Q291bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnN1cHBvcnRzTXV0aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnNldFZpc2libGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6aGFz
U2luZ2xlU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6bWF4VGltZUxvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpjYW5FbnRlckZ1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bWVkaWFQbGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6YXVk
aW9TaW5rKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR3RrOjpGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5oOgorICAgICAg
ICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayk6CisKIDIwMTMtMDItMDQgIFRvbSBTZXBl
eiAgPHRzZXBlekBjaHJvbWlpdW0ub3JnPgogCiAgICAgICAgIFhTUyBBdWRpdG9yIGJ5cGFzcyB2
aWEgc3ZnIHRhZ3MgYW5kIHhsaW5rOmhyZWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmlu
ZGV4IDE3MzE2NTUwNTYyYjcyNTYzZTBlYjQyZjEyZDQyOGVkZDlhYjVkMGIuLjMyMmRlOTEwNGVj
MDNkZWRjN2VhMDljMjJmOGU2ODI4NWQzZDIxYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQpAQCAtNjA3NSw2ICs2MDc1LDggQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyR1dvcmxkLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJl
YW1lckNhaXJvLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0ltYWdlR1N0cmVhbWVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtVmlk
ZW9XaW5kb3dHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZs
LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNWIxNjhkMzk5
ZjIxMTg4YWE5NTM3NjcwM2UwMjJjY2NlZmMyYTdhYS4uZTE4YmRiNTI2YTczOTQ1NWM1NWJlOGIz
MmI1YzA0OTVhMjA4YzVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwu
Y21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEyMSw2ICsx
MjEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtVmlkZW9XaW5kb3dFZmwuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCmluZGV4IGU4ZjZmYzE2MmQzOTk0NWM0NDFiMGU2YzQyOTkzMGRjYWQ3ZDBiNjUu
LjI3ZTUyOWU2ZTQ3OWU4MGRmNTBkZWRjNDJkMGZmNTQxYjkzMGU4ZDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpA
QCAtMzM1MCw2ICszMzUwLDcgQEAgZW5hYmxlPyhWSURFTykgewogICAgIH0gZWxzZTogdXNlPyhH
U1RSRUFNRVIpIHsKICAgICAgICAgSEVBREVSUyArPSBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyR1dvcmxkLmggXAorICAgICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCBc
CiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmggXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1ZpZGVvU2lua0dTdHJlYW1lci5oIFwKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuaCBcCkBAIC0zMzU4LDYgKzMzNTksNyBA
QCBlbmFibGU/KFZJREVPKSB7CiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvSW1hZ2VHU3RyZWFtZXIuaAogICAgICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJHV29ybGQuY3BwIFwKKyAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlLmNwcCBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBcCiAgICAgICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1l
ci5jcHAKaW5kZXggOWI4NjAwN2NmM2ExODc3OWQ2ZTRkM2I4OTM2ZmU0ZTQxMDMzNjQzMC4uN2Nm
MWEzMWM1ODNjYjBiMjQzZGMyNTlmM2E5N2NiYmE4Y2FmMGNiOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0Z1bGxzY3JlZW5WaWRlb0NvbnRy
b2xsZXJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyLmNwcApAQCAtMjks
NyArMjksNyBAQAogCiAjaW5jbHVkZSAiR1N0cmVhbWVyR1dvcmxkLmgiCiAjaW5jbHVkZSAiTWVk
aWFQbGF5ZXIuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCIKKyNp
bmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgiCiAjaW5jbHVkZSA8Z3N0
L2dzdC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNDgsNyArNDgsNyBA
QCB2b2lkIHBsYXllck11dGVDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCAqZWxlbWVudCwgR1BhcmFt
U3BlYyAqcHNwZWMsIEZ1bGxzY3JlZW5WaQogICAgIGNvbnRyb2xsZXItPm11dGVDaGFuZ2VkKCk7
CiB9CiAKLVBhc3NPd25QdHI8RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcj4gRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcjo6Y3JlYXRlKE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lciogcGxheWVyKQorUGFzc093blB0cjxGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVy
R1N0cmVhbWVyPiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyOjpjcmVhdGUoTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyKQogewogI2lmIFBMQVRGT1JNKEdU
SykKICAgIHJldHVybiBhZG9wdFB0cihuZXcgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayhw
bGF5ZXIpKTsKQEAgLTU3LDcgKzU3LDcgQEAgUGFzc093blB0cjxGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR1N0cmVhbWVyPiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWUKICNlbmRp
ZgogfQogCi1GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyOjpGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR1N0cmVhbWVyKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVy
KQorRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcjo6RnVsbHNjcmVlblZpZGVvQ29u
dHJvbGxlckdTdHJlYW1lcihNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIp
CiAgICAgOiBtX3BsYXllcihwbGF5ZXIpCiAgICAgLCBtX2NsaWVudChwbGF5ZXItPm1lZGlhUGxh
eWVyKCktPm1lZGlhUGxheWVyQ2xpZW50KCkpCiAgICAgLCBtX2dzdHJlYW1lckdXb3JsZChwbGF5
ZXItPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5nc3RyZWFtZXJHV29ybGQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIuaAppbmRleCA0ODQ0
YzdmYzg5ZTY5ZGMxZTMwNjEwZWFkZTY1NDE1MTFkMDg0MzMyLi45ZTE5Nzk5MGM4NzdlYmVmYTc0
MmNiMWJjNzk5ZDUzNDA2NzFhNTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9GdWxsc2Ny
ZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyLmgKQEAgLTI5LDE0ICsyOSwxNCBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBHU3RyZWFtZXJHV29ybGQ7Ci1jbGFzcyBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI7CitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
OwogY2xhc3MgTWVkaWFQbGF5ZXJDbGllbnQ7CiAKIGNsYXNzIEZ1bGxzY3JlZW5WaWRlb0NvbnRy
b2xsZXJHU3RyZWFtZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZ1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXJHU3RyZWFtZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXI+IGNyZWF0ZShNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIqIHBsYXllcik7Ci0gICAgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJl
YW1lcihNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICBzdGF0aWMgUGFzc093blB0
cjxGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyPiBjcmVhdGUoTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZSopOworICAgIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3Ry
ZWFtZXIoTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSopOwogICAgIHZpcnR1YWwgfkZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIoKTsKIAogICAgIHZvaWQgZW50ZXJGdWxs
c2NyZWVuKCk7CkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBTdHJp
bmcgdGltZVRvU3RyaW5nKGZsb2F0IHRpbWUpOwogCi0gICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyKiBtX3BsYXllcjsKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBt
X3BsYXllcjsKICAgICBNZWRpYVBsYXllckNsaWVudCogbV9jbGllbnQ7CiAgICAgR1N0cmVhbWVy
R1dvcmxkKiBtX2dzdHJlYW1lckdXb3JsZDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCAxNjE2ZjkxMzFmYzZiNWI3MDU5ZjJjMjhlMjg5
YzQ3NWViYmZjM2QyLi4yNDFjMzJjOWU3YThmZDNmNjY2ZTQzNDYxMzE0NTRiOWI5YTFmYzBhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAt
MjYsNDEgKzI2LDIwIEBACiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCiAK
LSNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkZ1bGxzY3JlZW5W
aWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIuaCIKLSNpbmNsdWRlICJHU3RyZWFtZXJHV29ybGQuaCIK
ICNpbmNsdWRlICJHU3RyZWFtZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJWZXJz
aW9uaW5nLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlcy5oIgotI2luY2x1ZGUgIkltYWdlR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VP
cmllbnRhdGlvbi5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNs
dWRlICJNZWRpYVBsYXllci5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCi0jaW5jbHVkZSAi
VmlkZW9TaW5rR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViU291cmNlR1N0cmVhbWVy
LmgiCiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgog
I2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotI2lmZGVmIEdT
VF9BUElfVkVSU0lPTl8xCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL3N0cmVhbXZvbHVtZS5oPgotI2Vs
c2UKLSNpbmNsdWRlIDxnc3QvaW50ZXJmYWNlcy9zdHJlYW12b2x1bWUuaD4KLSNlbmRpZgotCiAv
LyBHc3RQbGF5RmxhZ3MgZmxhZ3MgZnJvbSBwbGF5YmluMi4gSXQgaXMgdGhlIHBvbGljeSBvZiBH
U3RyZWFtZXIgdG8KIC8vIG5vdCBwdWJsaWNseSBleHBvc2UgZWxlbWVudC1zcGVjaWZpYyBlbnVt
cy4gVGhhdCdzIHdoeSB0aGlzCiAvLyBHc3RQbGF5RmxhZ3MgZW51bSBoYXMgYmVlbiBjb3BpZWQg
aGVyZS4KQEAgLTk2LDE3ICs3NSw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotc3RhdGljIGludCBncmVhdGVzdENvbW1vbkRpdmlzb3IoaW50IGEsIGlu
dCBiKQotewotICAgIHdoaWxlIChiKSB7Ci0gICAgICAgIGludCB0ZW1wID0gYTsKLSAgICAgICAg
YSA9IGI7Ci0gICAgICAgIGIgPSB0ZW1wICUgYjsKLSAgICB9Ci0KLSAgICByZXR1cm4gQUJTKGEp
OwotfQotCiBzdGF0aWMgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlTWVzc2FnZUNhbGxiYWNr
KEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ciogcGxheWVyKQogewogICAgIHJldHVybiBwbGF5ZXItPmhhbmRsZU1lc3NhZ2UobWVzc2FnZSk7
CkBAIC0xMTcsMzIgKzg1LDYgQEAgc3RhdGljIHZvaWQgbWVkaWFQbGF5ZXJQcml2YXRlU291cmNl
Q2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgTWVkaWEKICAgICBwbGF5ZXIt
PnNvdXJjZUNoYW5nZWQoKTsKIH0KIAotc3RhdGljIHZvaWQgbWVkaWFQbGF5ZXJQcml2YXRlVm9s
dW1lQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCi17Ci0gICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBwbGF5
YmluIHJlY2VpdmVzIHRoZSBub3RpZnk6OnZvbHVtZSBzaWduYWwuCi0gICAgcGxheWVyLT52b2x1
bWVDaGFuZ2VkKCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVWb2x1
bWVDaGFuZ2VUaW1lb3V0Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5
ZXIpCi17Ci0gICAgLy8gVGhpcyBpcyB0aGUgY2FsbGJhY2sgb2YgdGhlIHRpbWVvdXQgc291cmNl
IGNyZWF0ZWQgaW4gOjp2b2x1bWVDaGFuZ2VkLgotICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZW
b2x1bWVDaGFuZ2UoKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lZGlh
UGxheWVyUHJpdmF0ZU11dGVDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCosIEdQYXJhbVNwZWMqLCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKLXsKLSAgICAvLyBUaGlzIGlzIGNh
bGxlZCB3aGVuIHBsYXliaW4gcmVjZWl2ZXMgdGhlIG5vdGlmeTo6bXV0ZSBzaWduYWwuCi0gICAg
cGxheWVyLT5tdXRlQ2hhbmdlZCgpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQ
cml2YXRlTXV0ZUNoYW5nZVRpbWVvdXRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIqIHBsYXllcikKLXsKLSAgICAvLyBUaGlzIGlzIHRoZSBjYWxsYmFjayBvZiB0aGUgdGltZW91
dCBzb3VyY2UgY3JlYXRlZCBpbiA6Om11dGVDaGFuZ2VkLgotICAgIHBsYXllci0+bm90aWZ5UGxh
eWVyT2ZNdXRlKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCiBzdGF0aWMgdm9pZCBtZWRpYVBs
YXllclByaXZhdGVWaWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1T
cGVjKiwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCiB7CiAgICAgcGxheWVy
LT52aWRlb0NoYW5nZWQoKTsKQEAgLTE3MiwxMSArMTE0LDYgQEAgc3RhdGljIGdib29sZWFuIG1l
ZGlhUGxheWVyUHJpdmF0ZVZpZGVvQ2hhbmdlVGltZW91dENhbGxiYWNrKE1lZGlhUGxheWVyUHJp
dmF0ZUcKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKLXN0YXRpYyB2b2lkIG1lZGlhUGxheWVyUHJp
dmF0ZVJlcGFpbnRDYWxsYmFjayhXZWJLaXRWaWRlb1NpbmsqLCBHc3RCdWZmZXIgKmJ1ZmZlciwg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXJQcml2YXRlKQotewotICAgIHBsYXll
clByaXZhdGUtPnRyaWdnZXJSZXBhaW50KGJ1ZmZlcik7Ci19Ci0KIFBhc3NPd25QdHI8TWVkaWFQ
bGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0
ZShNZWRpYVBsYXllciogcGxheWVyKQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyKHBsYXllcikpOwpAQCAtMjEyLDE5ICsxNDksMTMgQEAgYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmlzQXZhaWxhYmxlKCkKIH0KIAogTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQ
bGF5ZXIqIHBsYXllcikKLSAgICA6IG1fcGxheWVyKHBsYXllcikKLSAgICAsIG1fd2Via2l0Vmlk
ZW9TaW5rKDApCi0gICAgLCBtX2Zwc1NpbmsoMCkKKyAgICA6IE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UocGxheWVyKQogICAgICwgbV9zb3VyY2UoMCkKICAgICAsIG1fc2Vla1RpbWUo
MCkKICAgICAsIG1fY2hhbmdpbmdSYXRlKGZhbHNlKQogICAgICwgbV9lbmRUaW1lKG51bWVyaWNf
bGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkKICAgICAsIG1faXNFbmRSZWFjaGVkKGZhbHNlKQot
ICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQotICAgICwgbV9yZWFkeVN0
YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKICAgICAsIG1faXNTdHJlYW1pbmcoZmFsc2Up
Ci0gICAgLCBtX3NpemUoSW50U2l6ZSgpKQotICAgICwgbV9idWZmZXIoMCkKICAgICAsIG1fbWVk
aWFMb2NhdGlvbnMoMCkKICAgICAsIG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleCgwKQogICAg
ICwgbV9yZXNldFBpcGVsaW5lKGZhbHNlKQpAQCAtMjQyLDggKzE3Myw2IEBAIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKE1lZGlhUGxheWVy
KiBwbGF5ZXIpCiAgICAgLCBtX2RlbGF5aW5nTG9hZChmYWxzZSkKICAgICAsIG1fbWVkaWFEdXJh
dGlvbktub3duKHRydWUpCiAgICAgLCBtX21heFRpbWVMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJv
Z3Jlc3MoMCkKLSAgICAsIG1fdm9sdW1lVGltZXJIYW5kbGVyKDApCi0gICAgLCBtX211dGVUaW1l
ckhhbmRsZXIoMCkKICAgICAsIG1faGFzVmlkZW8oZmFsc2UpCiAgICAgLCBtX2hhc0F1ZGlvKGZh
bHNlKQogICAgICwgbV9hdWRpb1RpbWVySGFuZGxlcigwKQpAQCAtMjYwLDQyICsxODksMjcgQEAg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
KCkKICAgICBpZiAobV9maWxsVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9maWxsVGltZXIu
c3RvcCgpOwogCi0gICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBnc3RfYnVmZmVyX3VucmVmKG1f
YnVmZmVyKTsKLSAgICBtX2J1ZmZlciA9IDA7Ci0KICAgICBpZiAobV9tZWRpYUxvY2F0aW9ucykg
ewogICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUobV9tZWRpYUxvY2F0aW9ucyk7CiAgICAgICAg
IG1fbWVkaWFMb2NhdGlvbnMgPSAwOwogICAgIH0KIAotI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVF
Tl9WSURFTykKLSAgICBpZiAobV9mdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyKQotICAgICAgICBl
eGl0RnVsbHNjcmVlbigpOwotCi0gICAgaWYgKG1fdmlkZW9TaW5rQmluKSB7Ci0gICAgICAgIGdz
dF9vYmplY3RfdW5yZWYobV92aWRlb1NpbmtCaW4pOwotICAgICAgICBtX3ZpZGVvU2lua0JpbiA9
IDA7Ci0gICAgfQotI2VuZGlmCi0KICAgICBpZiAobV9wbGF5QmluKSB7CiAgICAgICAgIEdSZWZQ
dHI8R3N0QnVzPiBidXMgPSB3ZWJraXRHc3RQaXBlbGluZUdldEJ1cyhHU1RfUElQRUxJTkUobV9w
bGF5QmluLmdldCgpKSk7CiAgICAgICAgIEFTU0VSVChidXMpOwogICAgICAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoYnVzLmdldCgpLCByZWludGVycHJldF9jYXN0PGdw
b2ludGVyPihtZWRpYVBsYXllclByaXZhdGVNZXNzYWdlQ2FsbGJhY2spLCB0aGlzKTsKICAgICAg
ICAgZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoKGJ1cy5nZXQoKSk7CiAKKyAgICAgICAgZ19z
aWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fcGxheUJpbi5nZXQoKSwgcmVpbnRl
cnByZXRfY2FzdDxncG9pbnRlcj4obWVkaWFQbGF5ZXJQcml2YXRlU291cmNlQ2hhbmdlZENhbGxi
YWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVu
YyhtX3BsYXlCaW4uZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KG1lZGlhUGxheWVy
UHJpdmF0ZVZpZGVvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3BsYXlCaW4uZ2V0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8Z3BvaW50ZXI+KG1lZGlhUGxheWVyUHJpdmF0ZUF1ZGlvQ2hhbmdlZENhbGxiYWNrKSwgdGhp
cyk7CisKICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwgR1NU
X1NUQVRFX05VTEwpOwotICAgICAgICBtX3BsYXlCaW4gPSAwOworICAgICAgICBtX3BsYXlCaW4u
Y2xlYXIoKTsKICAgICB9CiAKLSAgICBtX3BsYXllciA9IDA7Ci0KLSAgICBpZiAobV9tdXRlVGlt
ZXJIYW5kbGVyKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9tdXRlVGltZXJIYW5kbGVyKTsK
LQotICAgIGlmIChtX3ZvbHVtZVRpbWVySGFuZGxlcikKLSAgICAgICAgZ19zb3VyY2VfcmVtb3Zl
KG1fdm9sdW1lVGltZXJIYW5kbGVyKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gdmlkZW9TaW5rUGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fd2Via2l0VmlkZW9TaW5r
LmdldCgpLCAic2luayIpKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1
bmModmlkZW9TaW5rUGFkLmdldCgpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihtZWRpYVBs
YXllclByaXZhdGVWaWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAKICAgICBp
ZiAobV92aWRlb1RpbWVySGFuZGxlcikKICAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fdmlkZW9U
aW1lckhhbmRsZXIpOwpAQCAtNTcyLDY2ICs0ODYsNiBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6c2Vla2luZygpIGNvbnN0CiAgICAgcmV0dXJuIG1fc2Vla2luZzsKIH0KIAot
Ly8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8KLUludFNpemUgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFoYXNWaWRlbygp
KQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgaWYgKCFtX3ZpZGVvU2l6ZS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBtX3ZpZGVvU2l6ZTsKLQotICAgIEdSZWZQdHI8R3N0Q2Fw
cz4gY2FwcyA9IHdlYmtpdEdzdEdldFBhZENhcHMobV92aWRlb1NpbmtQYWQuZ2V0KCkpOwotICAg
IGlmICghY2FwcykKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotCi0gICAgLy8gVE9ETzog
aGFuZGxlIHBvc3NpYmxlIGNsZWFuIGFwZXJ0dXJlIGRhdGEuIFNlZQotICAgIC8vIGh0dHBzOi8v
YnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTY1NzEKLSAgICAvLyBUT0RPOiBo
YW5kbGUgcG9zc2libGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBTZWUKLSAgICAvLyBodHRwczov
L2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2MzI2Ci0KLSAgICAvLyBHZXQg
dGhlIHZpZGVvIFBBUiBhbmQgb3JpZ2luYWwgc2l6ZSwgaWYgdGhpcyBmYWlscyB0aGUKLSAgICAv
LyB2aWRlby1zaW5rIGhhcyBsaWtlbHkgbm90IHlldCBuZWdvdGlhdGVkIGl0cyBjYXBzLgotICAg
IGludCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0
b3IsIHN0cmlkZTsKLSAgICBJbnRTaXplIG9yaWdpbmFsU2l6ZTsKLSAgICBHc3RWaWRlb0Zvcm1h
dCBmb3JtYXQ7Ci0gICAgaWYgKCFnZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2FwcyhjYXBzLmdl
dCgpLCBvcmlnaW5hbFNpemUsIGZvcm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4
ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJpZGUpKQotICAgICAgICByZXR1cm4gSW50U2l6
ZSgpOwotCi0gICAgTE9HX01FRElBX01FU1NBR0UoIk9yaWdpbmFsIHZpZGVvIHNpemU6ICVkeCVk
Iiwgb3JpZ2luYWxTaXplLndpZHRoKCksIG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgTE9H
X01FRElBX01FU1NBR0UoIlBpeGVsIGFzcGVjdCByYXRpbzogJWQvJWQiLCBwaXhlbEFzcGVjdFJh
dGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IpOwotCi0gICAgLy8gQ2Fs
Y3VsYXRlIERBUiBiYXNlZCBvbiBQQVIgYW5kIHZpZGVvIHNpemUuCi0gICAgaW50IGRpc3BsYXlX
aWR0aCA9IG9yaWdpbmFsU2l6ZS53aWR0aCgpICogcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvcjsK
LSAgICBpbnQgZGlzcGxheUhlaWdodCA9IG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAqIHBpeGVsQXNw
ZWN0UmF0aW9EZW5vbWluYXRvcjsKLQotICAgIC8vIERpdmlkZSBkaXNwbGF5IHdpZHRoIGFuZCBo
ZWlnaHQgYnkgdGhlaXIgR0NEIHRvIGF2b2lkIHBvc3NpYmxlIG92ZXJmbG93cy4KLSAgICBpbnQg
ZGlzcGxheUFzcGVjdFJhdGlvR0NEID0gZ3JlYXRlc3RDb21tb25EaXZpc29yKGRpc3BsYXlXaWR0
aCwgZGlzcGxheUhlaWdodCk7Ci0gICAgZGlzcGxheVdpZHRoIC89IGRpc3BsYXlBc3BlY3RSYXRp
b0dDRDsKLSAgICBkaXNwbGF5SGVpZ2h0IC89IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKLQotICAg
IC8vIEFwcGx5IERBUiB0byBvcmlnaW5hbCB2aWRlbyBzaXplLiBUaGlzIGlzIHRoZSBzYW1lIGJl
aGF2aW9yIGFzIGluIHh2aW1hZ2VzaW5rJ3Mgc2V0Y2FwcyBmdW5jdGlvbi4KLSAgICBndWludDY0
IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBpZiAoIShvcmlnaW5hbFNpemUuaGVpZ2h0KCkg
JSBkaXNwbGF5SGVpZ2h0KSkgewotICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgiS2VlcGluZyB2
aWRlbyBvcmlnaW5hbCBoZWlnaHQiKTsKLSAgICAgICAgd2lkdGggPSBnc3RfdXRpbF91aW50NjRf
c2NhbGVfaW50KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSwgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVp
Z2h0KTsKLSAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXpl
LmhlaWdodCgpKTsKLSAgICB9IGVsc2UgaWYgKCEob3JpZ2luYWxTaXplLndpZHRoKCkgJSBkaXNw
bGF5V2lkdGgpKSB7Ci0gICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJLZWVwaW5nIHZpZGVvIG9y
aWdpbmFsIHdpZHRoIik7Ci0gICAgICAgIGhlaWdodCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9p
bnQob3JpZ2luYWxTaXplLndpZHRoKCksIGRpc3BsYXlIZWlnaHQsIGRpc3BsYXlXaWR0aCk7Ci0g
ICAgICAgIHdpZHRoID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLndpZHRoKCkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJBcHByb3hpbWF0aW5n
IHdoaWxlIGtlZXBpbmcgb3JpZ2luYWwgdmlkZW8gaGVpZ2h0Iik7Ci0gICAgICAgIHdpZHRoID0g
Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0KCksIGRpc3BsYXlX
aWR0aCwgZGlzcGxheUhlaWdodCk7Ci0gICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50
NjQ+KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgTE9HX01FRElBX01FU1NB
R0UoIk5hdHVyYWwgc2l6ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCAieCUiIEdfR1VJTlQ2NF9GT1JN
QVQsIHdpZHRoLCBoZWlnaHQpOwotICAgIG1fdmlkZW9TaXplID0gSW50U2l6ZShzdGF0aWNfY2Fz
dDxpbnQ+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQpKTsKLSAgICByZXR1cm4gbV92
aWRlb1NpemU7Ci19Ci0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2aWRlb0No
YW5nZWQoKQogewogICAgIGlmIChtX3ZpZGVvVGltZXJIYW5kbGVyKQpAQCAtNjcyLDQ1ICs1MjYs
NiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRp
bygpCiAgICAgbV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyRW5naW5l
VXBkYXRlZChtX3BsYXllcik7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQotewotICAgIGlmICghbV9wbGF5QmluKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBnc3Rfc3RyZWFtX3ZvbHVtZV9zZXRfdm9sdW1lKEdTVF9TVFJFQU1f
Vk9MVU1FKG1fcGxheUJpbi5nZXQoKSksIEdTVF9TVFJFQU1fVk9MVU1FX0ZPUk1BVF9DVUJJQywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4odm9s
dW1lKSk7Ci19Ci0KLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dm9sdW1lKCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fcGxheUJpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZXR1cm4gZ3N0X3N0cmVhbV92b2x1bWVfZ2V0X3ZvbHVtZShHU1RfU1RSRUFNX1ZPTFVNRShtX3Bs
YXlCaW4uZ2V0KCkpLCBHU1RfU1RSRUFNX1ZPTFVNRV9GT1JNQVRfQ1VCSUMpOwotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2Uo
KQotewotICAgIG1fdm9sdW1lVGltZXJIYW5kbGVyID0gMDsKLQotICAgIGlmICghbV9wbGF5ZXIg
fHwgIW1fcGxheUJpbikKLSAgICAgICAgcmV0dXJuOwotICAgIGRvdWJsZSB2b2x1bWU7Ci0gICAg
dm9sdW1lID0gZ3N0X3N0cmVhbV92b2x1bWVfZ2V0X3ZvbHVtZShHU1RfU1RSRUFNX1ZPTFVNRSht
X3BsYXlCaW4uZ2V0KCkpLCBHU1RfU1RSRUFNX1ZPTFVNRV9GT1JNQVRfQ1VCSUMpOwotICAgIC8v
IGdldF92b2x1bWUoKSBjYW4gcmV0dXJuIHZhbHVlcyBzdXBlcmlvciB0byAxLjAgaWYgdGhlIHVz
ZXIKLSAgICAvLyBhcHBsaWVzIHNvZnR3YXJlIHVzZXIgZ2FpbiB2aWEgdGhpcmQgcGFydHkgYXBw
bGljYXRpb24gKEdOT01FCi0gICAgLy8gdm9sdW1lIGNvbnRyb2wgZm9yIGluc3RhbmNlKS4KLSAg
ICB2b2x1bWUgPSBDTEFNUCh2b2x1bWUsIDAuMCwgMS4wKTsKLSAgICBtX3BsYXllci0+dm9sdW1l
Q2hhbmdlZChzdGF0aWNfY2FzdDxmbG9hdD4odm9sdW1lKSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjp2b2x1bWVDaGFuZ2VkKCkKLXsKLSAgICBpZiAobV92b2x1bWVU
aW1lckhhbmRsZXIpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZShtX3ZvbHVtZVRpbWVySGFuZGxl
cik7Ci0gICAgbV92b2x1bWVUaW1lckhhbmRsZXIgPSBnX3RpbWVvdXRfYWRkKDAsIHJlaW50ZXJw
cmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KG1lZGlhUGxheWVyUHJpdmF0ZVZvbHVtZUNoYW5nZVRpbWVv
dXRDYWxsYmFjayksIHRoaXMpOwotfQotCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0UmF0ZShmbG9hdCByYXRlKQogewogICAgIC8vIEF2b2lkIHVzZWxlc3MgcGxheWJhY2sg
cmF0ZSB1cGRhdGUuCkBAIC03NzUsMTYgKzU5MCw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sIHByZXNlcnZlc1BpdGNoKQogICAgIG1f
cHJlc2VydmVzUGl0Y2ggPSBwcmVzZXJ2ZXNQaXRjaDsKIH0KIAotTWVkaWFQbGF5ZXI6Ok5ldHdv
cmtTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ldHdvcmtTdGF0ZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1N0YXRlOwotfQotCi1NZWRpYVBsYXllcjo6UmVhZHlT
dGF0ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlYWR5U3RhdGUoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3JlYWR5U3RhdGU7Ci19Ci0KIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpidWZmZXJlZCgpIGNvbnN0CiB7CiAgICAgUmVmUHRy
PFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKQEAgLTExMTQs
NDYgKzkxOSw2IEBAIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxC
eXRlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fdG90YWxCeXRlczsKIH0KIAotdW5zaWduZWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkZWNvZGVkRnJhbWVDb3VudCgpIGNvbnN0Ci17Ci0g
ICAgZ3VpbnQ2NCBkZWNvZGVkRnJhbWVzID0gMDsKLSAgICBpZiAobV9mcHNTaW5rKQotICAgICAg
ICBnX29iamVjdF9nZXQobV9mcHNTaW5rLCAiZnJhbWVzLXJlbmRlcmVkIiwgJmRlY29kZWRGcmFt
ZXMsIE5VTEwpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVjb2RlZEZyYW1l
cyk7Ci19Ci0KLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZHJvcHBlZEZy
YW1lQ291bnQoKSBjb25zdAotewotICAgIGd1aW50NjQgZnJhbWVzRHJvcHBlZCA9IDA7Ci0gICAg
aWYgKG1fZnBzU2luaykKLSAgICAgICAgZ19vYmplY3RfZ2V0KG1fZnBzU2luaywgImZyYW1lcy1k
cm9wcGVkIiwgJmZyYW1lc0Ryb3BwZWQsIE5VTEwpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oZnJhbWVzRHJvcHBlZCk7Ci19Ci0KLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6YXVkaW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3QKLXsKLSAgICBHc3RRdWVy
eSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRfQllURVMpOwotICAg
IGdpbnQ2NCBwb3NpdGlvbiA9IDA7Ci0KLSAgICBpZiAobV93ZWJraXRBdWRpb1NpbmsgJiYgZ3N0
X2VsZW1lbnRfcXVlcnkobV93ZWJraXRBdWRpb1NpbmsuZ2V0KCksIHF1ZXJ5KSkKLSAgICAgICAg
Z3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOwotCi0gICAgZ3N0
X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBv
c2l0aW9uKTsKLX0KLQotdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2aWRl
b0RlY29kZWRCeXRlQ291bnQoKSBjb25zdAotewotICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9x
dWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gICAgZ2ludDY0IHBvc2l0aW9u
ID0gMDsKLQotICAgIGlmIChnc3RfZWxlbWVudF9xdWVyeShtX3dlYmtpdFZpZGVvU2luaywgcXVl
cnkpKQotICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZwb3NpdGlv
bik7Ci0KLSAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ocG9zaXRpb24pOwotfQotCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6dXBkYXRlQXVkaW9TaW5rKCkKIHsKICAgICBpZiAoIW1fcGxheUJpbikKQEAgLTExNjYs
NiArOTMxLDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVBdWRp
b1NpbmsoKQogCiB9CiAKK0dzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
YXVkaW9TaW5rKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJraXRBdWRpb1NpbmsuZ2V0KCk7
Cit9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VDaGFuZ2VkKCkK
IHsKQEAgLTE0NzIsMTEgKzEyNDEsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6bG9hZFN0YXRlQ2hhbmdlZCgpCiAgICAgdXBkYXRlU3RhdGVzKCk7CiB9CiAKLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzaXplQ2hhbmdlZCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRpbWVDaGFu
Z2VkKCkKIHsKICAgICB1cGRhdGVTdGF0ZXMoKTsKQEAgLTE1NTEsNDggKzEzMTUsNiBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZHVyYXRpb25DaGFuZ2VkKCkKICAgICB9CiB9
CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c011dGluZygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzZXRNdXRlZChib29sIG11dGVkKQotewotICAgIGlmICghbV9wbGF5QmluKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLmdldCgpLCAibXV0ZSIs
IG11dGVkLCBOVUxMKTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om11
dGVkKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGxheUJpbikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYm9vbCBtdXRlZDsKLSAgICBnX29iamVjdF9nZXQobV9wbGF5QmluLmdldCgpLCAi
bXV0ZSIsICZtdXRlZCwgTlVMTCk7Ci0gICAgcmV0dXJuIG11dGVkOwotfQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZNdXRlKCkKLXsKLSAgICBtX211
dGVUaW1lckhhbmRsZXIgPSAwOwotCi0gICAgaWYgKCFtX3BsYXllciB8fCAhbV9wbGF5QmluKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBnYm9vbGVhbiBtdXRlZDsKLSAgICBnX29iamVjdF9nZXQo
bV9wbGF5QmluLmdldCgpLCAibXV0ZSIsICZtdXRlZCwgTlVMTCk7Ci0gICAgbV9wbGF5ZXItPm11
dGVDaGFuZ2VkKHN0YXRpY19jYXN0PGJvb2w+KG11dGVkKSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjptdXRlQ2hhbmdlZCgpCi17Ci0gICAgaWYgKG1fbXV0ZVRpbWVy
SGFuZGxlcikKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fbXV0ZVRpbWVySGFuZGxlcik7Ci0g
ICAgbV9tdXRlVGltZXJIYW5kbGVyID0gZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPihtZWRpYVBsYXllclByaXZhdGVNdXRlQ2hhbmdlVGltZW91dENhbGxiYWNr
KSwgdGhpcyk7Ci19Ci0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkaW5n
RmFpbGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgZXJyb3IpCiB7CiAgICAgbV9lcnJvck9j
Y3VyZWQgPSB0cnVlOwpAQCAtMTYwNiw0NiArMTMyOCw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgZXJy
b3IpCiAgICAgfQogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0U2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIG1fc2l6ZSA9IHNpemU7Ci19Ci0KLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRWaXNpYmxlKGJvb2wpCi17Ci19Ci0KLQot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRyaWdnZXJSZXBhaW50KEdzdEJ1ZmZl
ciogYnVmZmVyKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoR1NUX0lTX0JVRkZFUihidWZmZXIp
KTsKLSAgICBnc3RfYnVmZmVyX3JlcGxhY2UoJm1fYnVmZmVyLCBidWZmZXIpOwotICAgIG1fcGxh
eWVyLT5yZXBhaW50KCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpw
YWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFtX3BsYXllci0+dmlzaWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IW1fYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMg
PSB3ZWJraXRHc3RHZXRQYWRDYXBzKG1fdmlkZW9TaW5rUGFkLmdldCgpKTsKLSAgICBpZiAoIWNh
cHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZUdTdHJlYW1lcj4gZ3N0SW1h
Z2UgPSBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UobV9idWZmZXIsIGNhcHMuZ2V0KCkpOwot
ICAgIGlmICghZ3N0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnRleHQtPmRyYXdJ
bWFnZShyZWludGVycHJldF9jYXN0PEltYWdlKj4oZ3N0SW1hZ2UtPmltYWdlKCkuZ2V0KCkpLCBD
b2xvclNwYWNlU1JHQiwKLSAgICAgICAgICAgICAgICAgICAgICAgcmVjdCwgZ3N0SW1hZ2UtPnJl
Y3QoKSwgQ29tcG9zaXRlQ29weSwgRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgZmFsc2Up
OwotfQotCiBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQogewogICAgIGlu
aXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCk7CkBAIC0xNzY3LDYy
ICsxNDQ5LDYgQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcKICAgICByZXR1cm4gTWVkaWFQbGF5
ZXI6OklzTm90U3VwcG9ydGVkOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwot
fQotCi0jaWYgVVNFKE5BVElWRV9GVUxMU0NSRUVOX1ZJREVPKQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmVudGVyRnVsbHNjcmVlbigpCi17Ci0gICAgQVNTRVJUKCFtX2Z1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXIpOwotICAgIG1fZnVsbHNjcmVlblZpZGVvQ29udHJvbGxlciA9
IEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBp
ZiAobV9mdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyKQotICAgICAgICBtX2Z1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXItPmVudGVyRnVsbHNjcmVlbigpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6ZXhpdEZ1bGxzY3JlZW4oKQotewotICAgIGlmICghbV9mdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9mdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyLT5leGl0RnVsbHNjcmVlbigpOwotICAgIG1fZnVsbHNjcmVlblZpZGVvQ29udHJv
bGxlci5yZWxlYXNlKCk7Ci19Ci0jZW5kaWYKLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0Ci17Ci0jaWYgUExBVEZPUk0oTUFDKSAm
JiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID09IDEw
NTAKLSAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzczODk5NDU+Ci0gICAgcmV0dXJuIGZhbHNl
OwotI2Vsc2UKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotfQotCi1QbGF0Zm9ybU1lZGlhIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxhdGZvcm1NZWRpYSgpIGNvbnN0Ci17Ci0jaWYg
VVNFKE5BVElWRV9GVUxMU0NSRUVOX1ZJREVPKQotICAgIFBsYXRmb3JtTWVkaWEgcDsKLSAgICBw
LnR5cGUgPSBQbGF0Zm9ybU1lZGlhOjpHU3RyZWFtZXJHV29ybGRUeXBlOwotICAgIHAubWVkaWEu
Z3N0cmVhbWVyR1dvcmxkID0gbV9nc3RHV29ybGQuZ2V0KCk7Ci0gICAgcmV0dXJuIHA7Ci0jZWxz
ZQotICAgIHJldHVybiBOb1BsYXRmb3JtTWVkaWE7Ci0jZW5kaWYKLX0KLQotTWVkaWFQbGF5ZXI6
Ok1vdmllTG9hZFR5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptb3ZpZUxvYWRUeXBl
KCkgY29uc3QKLXsKLSAgICBpZiAobV9yZWFkeVN0YXRlID09IE1lZGlhUGxheWVyOjpIYXZlTm90
aGluZykKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpVbmtub3duOwotCi0gICAgaWYgKGlz
TGl2ZVN0cmVhbSgpKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW07Ci0K
LSAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkRvd25sb2FkOwotfQotCiB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c2V0RG93bmxvYWRCdWZmZXJpbmcoKQogewogICAgIGlmICghbV9w
bGF5QmluKQpAQCAtMTg5NCw2ICsxNTIwLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oKQogICAgIC8vIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFr
ZSgpIHJldHVybnMgYSBmbG9hdGluZyByZWZlcmVuY2Ugc28KICAgICAvLyB3ZSBzaG91bGQgbm90
IGFkb3B0LgogICAgIG1fcGxheUJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZShnUGxheWJp
bk5hbWUsICJwbGF5Iik7CisgICAgc2V0U3RyZWFtVm9sdW1lRWxlbWVudChHU1RfU1RSRUFNX1ZP
TFVNRShtX3BsYXlCaW4uZ2V0KCkpKTsKIAogICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSB3ZWJr
aXRHc3RQaXBlbGluZUdldEJ1cyhHU1RfUElQRUxJTkUobV9wbGF5QmluLmdldCgpKSk7CiAgICAg
Z3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoKGJ1cy5nZXQoKSk7CkBAIC0xOTAxLDEwMyArMTUyOCwx
NSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbigp
CiAKICAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLmdldCgpLCAibXV0ZSIsIG1fcGxheWVyLT5t
dXRlZCgpLCBOVUxMKTsKIAotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLmdldCgpLCAi
bm90aWZ5Ojp2b2x1bWUiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVZvbHVtZUNoYW5n
ZWRDYWxsYmFjayksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLmdldCgp
LCAibm90aWZ5Ojpzb3VyY2UiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVNvdXJjZUNo
YW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLmdl
dCgpLCAibm90aWZ5OjptdXRlIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVNdXRlQ2hh
bmdlZENhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3BsYXlCaW4uZ2V0
KCksICJ2aWRlby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVWaWRlb0No
YW5nZWRDYWxsYmFjayksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLmdl
dCgpLCAiYXVkaW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlQXVkaW9D
aGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKIAotI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURF
TykKLSAgICBtX2dzdEdXb3JsZCA9IEdTdHJlYW1lckdXb3JsZDo6Y3JlYXRlR1dvcmxkKG1fcGxh
eUJpbi5nZXQoKSk7Ci0gICAgbV93ZWJraXRWaWRlb1NpbmsgPSB3ZWJraXRWaWRlb1NpbmtOZXco
bV9nc3RHV29ybGQuZ2V0KCkpOwotI2Vsc2UKLSAgICBtX3dlYmtpdFZpZGVvU2luayA9IHdlYmtp
dFZpZGVvU2lua05ldygpOwotI2VuZGlmCi0gICAgbV92aWRlb1NpbmtQYWQgPSBhZG9wdEdSZWYo
Z3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV93ZWJraXRWaWRlb1NpbmssICJzaW5rIikpOwot
Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX3dlYmtpdFZpZGVvU2luaywgInJlcGFpbnQtcmVxdWVz
dGVkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVSZXBhaW50Q2FsbGJhY2spLCB0aGlz
KTsKKyAgICBHc3RFbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBjcmVhdGVWaWRlb1NpbmsobV9wbGF5
QmluLmdldCgpKTsKIAorICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4uZ2V0KCksICJ2aWRlby1z
aW5rIiwgdmlkZW9FbGVtZW50LCBOVUxMKTsKIAotI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9W
SURFTykKLSAgICAvLyBCdWlsZCBhIG5ldyB2aWRlbyBzaW5rIGNvbnNpc3Rpbmcgb2YgYSBiaW4g
Y29udGFpbmluZyBhIHRlZQotICAgIC8vIChtZWFudCB0byBkaXN0cmlidXRlIGRhdGEgdG8gbXVs
dGlwbGUgdmlkZW8gc2lua3MpIGFuZCBvdXIKLSAgICAvLyBpbnRlcm5hbCB2aWRlbyBzaW5rLiBG
b3IgZnVsbHNjcmVlbiB3ZSBjcmVhdGUgYW4gYXV0b3ZpZGVvc2luawotICAgIC8vIGFuZCBpbml0
aWFsbHkgYmxvY2sgdGhlIGRhdGEgZmxvdyB0b3dhcmRzIGl0IGFuZCBjb25maWd1cmUgaXQKLQot
ICAgIG1fdmlkZW9TaW5rQmluID0gZ3N0X2Jpbl9uZXcoInZpZGVvLXNpbmsiKTsKLQotICAgIC8v
IFRha2Ugb3duZXJzaGlwLgotICAgIGdzdF9vYmplY3RfcmVmX3NpbmsobV92aWRlb1NpbmtCaW4p
OwotCi0gICAgR3N0RWxlbWVudCogdmlkZW9UZWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2Uo
InRlZSIsICJ2aWRlb1RlZSIpOwotICAgIEdzdEVsZW1lbnQqIHF1ZXVlID0gZ3N0X2VsZW1lbnRf
ZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIDApOwotCi0jaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKLSAg
ICBHUmVmUHRyPEdzdFBhZD4gc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3Rh
dGljX3BhZCh2aWRlb1RlZSwgInNpbmsiKSk7Ci0gICAgR1NUX09CSkVDVF9GTEFHX1NFVChHU1Rf
T0JKRUNUKHNpbmtQYWQuZ2V0KCkpLCBHU1RfUEFEX0ZMQUdfUFJPWFlfQUxMT0NBVElPTik7Ci0j
ZW5kaWYKLQotICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihtX3ZpZGVvU2lua0JpbiksIHZp
ZGVvVGVlLCBxdWV1ZSwgTlVMTCk7Ci0KLSAgICAvLyBMaW5rIGEgbmV3IHNyYyBwYWQgZnJvbSB0
ZWUgdG8gcXVldWUxLgotICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsKHZpZGVvVGVlLCAw
LCBxdWV1ZSwgInNpbmsiLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7Ci0jZW5kaWYKLQot
ICAgIEdzdEVsZW1lbnQqIGFjdHVhbFZpZGVvU2luayA9IDA7Ci0gICAgbV9mcHNTaW5rID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJmcHNkaXNwbGF5c2luayIsICJzaW5rIik7Ci0gICAgaWYg
KG1fZnBzU2luaykgewotICAgICAgICAvLyBUaGUgdmVyYm9zZSBwcm9wZXJ0eSBoYXMgYmVlbiBh
ZGRlZCBpbiAtYmFkIDAuMTAuMjIuIE1ha2luZwotICAgICAgICAvLyB0aGlzIHdob2xlIGNvZGUg
ZGVwZW5kIG9uIGl0IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudAotICAgICAgICAvLyBmcHNkaXBsYXlz
aW5rIHRvIHNwaXQgZGF0YSBvbiBzdGRvdXQuCi0gICAgICAgIEdzdEVsZW1lbnRGYWN0b3J5KiBm
YWN0b3J5ID0gR1NUX0VMRU1FTlRfRkFDVE9SWShHU1RfRUxFTUVOVF9HRVRfQ0xBU1MobV9mcHNT
aW5rKS0+ZWxlbWVudGZhY3RvcnkpOwotICAgICAgICBpZiAoZ3N0X3BsdWdpbl9mZWF0dXJlX2No
ZWNrX3ZlcnNpb24oR1NUX1BMVUdJTl9GRUFUVVJFKGZhY3RvcnkpLCAwLCAxMCwgMjIpKSB7Ci0g
ICAgICAgICAgICBnX29iamVjdF9zZXQobV9mcHNTaW5rLCAic2lsZW50IiwgVFJVRSAsIE5VTEwp
OwotCi0gICAgICAgICAgICAvLyBUdXJuIG9mZiB0ZXh0IG92ZXJsYXkgdW5sZXNzIGxvZ2dpbmcg
aXMgZW5hYmxlZC4KLSNpZiBMT0dfRElTQUJMRUQKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldCht
X2Zwc1NpbmssICJ0ZXh0LW92ZXJsYXkiLCBGQUxTRSAsIE5VTEwpOwotI2Vsc2UKLSAgICAgICAg
ICAgIFdURkxvZ0NoYW5uZWwqIGNoYW5uZWwgPSBnZXRDaGFubmVsRnJvbU5hbWUoIk1lZGlhIik7
Ci0gICAgICAgICAgICBpZiAoY2hhbm5lbC0+c3RhdGUgIT0gV1RGTG9nQ2hhbm5lbE9uKQotICAg
ICAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2Zwc1NpbmssICJ0ZXh0LW92ZXJsYXkiLCBGQUxT
RSAsIE5VTEwpOwotI2VuZGlmIC8vIExPR19ESVNBQkxFRAotCi0gICAgICAgICAgICBpZiAoZ19v
YmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eShHX09CSkVDVF9HRVRfQ0xBU1MobV9mcHNTaW5rKSwg
InZpZGVvLXNpbmsiKSkgewotICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2Zwc1Npbmss
ICJ2aWRlby1zaW5rIiwgbV93ZWJraXRWaWRlb1NpbmssIE5VTEwpOwotI2lmIFVTRShOQVRJVkVf
RlVMTFNDUkVFTl9WSURFTykKLSAgICAgICAgICAgICAgICBnc3RfYmluX2FkZChHU1RfQklOKG1f
dmlkZW9TaW5rQmluKSwgbV9mcHNTaW5rKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGFjdHVh
bFZpZGVvU2luayA9IG1fZnBzU2luazsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIG1fZnBzU2luayA9IDA7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9mcHNTaW5r
ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZnBzU2luaykgewotI2lmIFVTRShOQVRJVkVfRlVM
TFNDUkVFTl9WSURFTykKLSAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTihtX3ZpZGVvU2lua0Jp
biksIG1fd2Via2l0VmlkZW9TaW5rKTsKLSNlbmRpZgotICAgICAgICBhY3R1YWxWaWRlb1Npbmsg
PSBtX3dlYmtpdFZpZGVvU2luazsKLSAgICB9Ci0KLSAgICBBU1NFUlQoYWN0dWFsVmlkZW9TaW5r
KTsKLQotI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKLSAgICAvLyBGYXN0ZXIgZWxl
bWVudHMgbGlua2luZy4KLSAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbChxdWV1ZSwgInNy
YyIsIGFjdHVhbFZpZGVvU2luaywgInNpbmsiLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7
Ci0KLSAgICAvLyBBZGQgYSBnaG9zdHBhZCB0byB0aGUgYmluIHNvIGl0IGNhbiBwcm94eSB0byB0
ZWUuCi0gICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRf
c3RhdGljX3BhZCh2aWRlb1RlZSwgInNpbmsiKSk7Ci0gICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCht
X3ZpZGVvU2lua0JpbiwgZ3N0X2dob3N0X3BhZF9uZXcoInNpbmsiLCBwYWQuZ2V0KCkpKTsKLQot
ICAgIC8vIFNldCB0aGUgYmluIGFzIHZpZGVvIHNpbmsgb2YgcGxheWJpbi4KLSAgICBnX29iamVj
dF9zZXQobV9wbGF5QmluLmdldCgpLCAidmlkZW8tc2luayIsIG1fdmlkZW9TaW5rQmluLCBOVUxM
KTsKLSNlbHNlCi0gICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbi5nZXQoKSwgInZpZGVvLXNpbmsi
LCBhY3R1YWxWaWRlb1NpbmssIE5VTEwpOwotI2VuZGlmCi0KLSAgICBHUmVmUHRyPEdzdFBhZD4g
dmlkZW9TaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fd2Vi
a2l0VmlkZW9TaW5rLCAic2luayIpKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gdmlkZW9TaW5rUGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fd2Via2l0VmlkZW9TaW5r
LmdldCgpLCAic2luayIpKTsKICAgICBpZiAodmlkZW9TaW5rUGFkKQogICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KHZpZGVvU2lua1BhZC5nZXQoKSwgIm5vdGlmeTo6Y2FwcyIsIEdfQ0FMTEJBQ0so
bWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9TaW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggZmQz
N2Q4M2JkMzViZTFjYjU2NzAzZDFlOTFiMzc3ZGQ0YzJhNmM4Yy4uMzEzZTczM2UyNmVkZGY2Zjcy
ZTM3NDNmY2EzMGMwYzRiMzI2ZmQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaApAQCAtMjUsMzUgKzI1LDI2IEBACiAjaWYgRU5BQkxFKFZJREVPKSAm
JiBVU0UoR1NUUkVBTUVSKQogCiAjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgotI2luY2x1
ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UuaCIKICNpbmNsdWRlICJUaW1lci5oIgogCiAjaW5jbHVkZSA8Z2xpYi5oPgog
I2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCi10eXBlZGVm
IHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rIFdlYktpdFZpZGVvU2luazsKIHR5cGVkZWYgc3RydWN0
IF9Hc3RCdWZmZXIgR3N0QnVmZmVyOwogdHlwZWRlZiBzdHJ1Y3QgX0dzdE1lc3NhZ2UgR3N0TWVz
c2FnZTsKIHR5cGVkZWYgc3RydWN0IF9Hc3RFbGVtZW50IEdzdEVsZW1lbnQ7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcjsK
LWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBJbnRSZWN0Owot
Y2xhc3MgR1N0cmVhbWVyR1dvcmxkOwotY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OwotCi1jbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFQbGF5
ZXJQcml2YXRlSW50ZXJmYWNlIHsKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciA6
IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlIHsKIAogICAgICAgICBwdWJs
aWM6CiAgICAgICAgICAgICB+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKCk7CiAgICAgICAg
ICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFy
KTsKICAgICAgICAgICAgIGdib29sZWFuIGhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSopOwogCi0g
ICAgICAgICAgICBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Q7CiAgICAgICAgICAgICBib29s
IGhhc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWaWRlbzsgfQogICAgICAgICAgICAgYm9v
bCBoYXNBdWRpbygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQXVkaW87IH0KIApAQCAtNzUsNjkgKzY2
LDI4IEBAIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciA6IHB1YmxpYyBNZWRpYVBs
YXllclByaXZhdGVJbnRlcmZhY2UgewogICAgICAgICAgICAgdm9pZCBzZXRSYXRlKGZsb2F0KTsK
ICAgICAgICAgICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCk7CiAKLSAgICAgICAgICAg
IHZvaWQgc2V0Vm9sdW1lKGZsb2F0KTsKLSAgICAgICAgICAgIGZsb2F0IHZvbHVtZSgpIGNvbnN0
OwotICAgICAgICAgICAgdm9pZCB2b2x1bWVDaGFuZ2VkKCk7Ci0gICAgICAgICAgICB2b2lkIG5v
dGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7Ci0KLSAgICAgICAgICAgIGJvb2wgc3VwcG9ydHNN
dXRpbmcoKSBjb25zdDsKLSAgICAgICAgICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCk7Ci0gICAgICAg
ICAgICBib29sIG11dGVkKCkgY29uc3Q7Ci0gICAgICAgICAgICB2b2lkIG11dGVDaGFuZ2VkKCk7
Ci0gICAgICAgICAgICB2b2lkIG5vdGlmeVBsYXllck9mTXV0ZSgpOwotCiAgICAgICAgICAgICB2
b2lkIHNldFByZWxvYWQoTWVkaWFQbGF5ZXI6OlByZWxvYWQpOwogICAgICAgICAgICAgdm9pZCBm
aWxsVGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI+Kik7CiAKLSAg
ICAgICAgICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Q7
Ci0gICAgICAgICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7
Ci0KICAgICAgICAgICAgIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdDsK
ICAgICAgICAgICAgIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNvbnN0OwogICAgICAgICAgICAg
Ym9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdDsKICAgICAgICAgICAgIHVuc2lnbmVkIHRv
dGFsQnl0ZXMoKSBjb25zdDsKICAgICAgICAgICAgIGZsb2F0IG1heFRpbWVMb2FkZWQoKSBjb25z
dDsKIAotICAgICAgICAgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwotICAgICAgICAgICAgdm9p
ZCBzZXRTaXplKGNvbnN0IEludFNpemUmKTsKLQogICAgICAgICAgICAgdm9pZCBsb2FkU3RhdGVD
aGFuZ2VkKCk7Ci0gICAgICAgICAgICB2b2lkIHNpemVDaGFuZ2VkKCk7CiAgICAgICAgICAgICB2
b2lkIHRpbWVDaGFuZ2VkKCk7CiAgICAgICAgICAgICB2b2lkIGRpZEVuZCgpOwogICAgICAgICAg
ICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKTsKICAgICAgICAgICAgIHZvaWQgbG9hZGluZ0ZhaWxl
ZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlKTsKIAotICAgICAgICAgICAgdm9pZCB0cmlnZ2Vy
UmVwYWludChHc3RCdWZmZXIqKTsKLSAgICAgICAgICAgIHZvaWQgcmVwYWludCgpOwotICAgICAg
ICAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAg
ICAgICAgICAgIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKLQotI2lmIFVT
RShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKLSAgICAgICAgICAgIHZvaWQgZW50ZXJGdWxsc2Ny
ZWVuKCk7Ci0gICAgICAgICAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgICAgICAgICBi
b29sIGNhbkVudGVyRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgot
Ci0gICAgICAgICAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0OwotICAgICAgICAg
ICAgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlhKCkgY29uc3Q7Ci0KICAgICAgICAgICAgIHZv
aWQgdmlkZW9DaGFuZ2VkKCk7CiAgICAgICAgICAgICB2b2lkIGF1ZGlvQ2hhbmdlZCgpOwogICAg
ICAgICAgICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZpZGVvKCk7CiAgICAgICAgICAgICB2b2lkIG5v
dGlmeVBsYXllck9mQXVkaW8oKTsKIAogICAgICAgICAgICAgdm9pZCBzb3VyY2VDaGFuZ2VkKCk7
Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGRlY29kZWRGcmFtZUNvdW50KCkgY29uc3Q7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBkcm9wcGVkRnJhbWVDb3VudCgpIGNvbnN0OwotICAgICAgICAgICAg
dW5zaWduZWQgYXVkaW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3Q7Ci0gICAgICAgICAgICB1bnNp
Z25lZCB2aWRlb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdDsKLQotICAgICAgICAgICAgTWVkaWFQ
bGF5ZXI6Ok1vdmllTG9hZFR5cGUgbW92aWVMb2FkVHlwZSgpIGNvbnN0OwotCi0gICAgICAgICAg
ICBNZWRpYVBsYXllciogbWVkaWFQbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXllcjsgfQor
ICAgICAgICAgICAgR3N0RWxlbWVudCogYXVkaW9TaW5rKCkgY29uc3Q7CiAKICAgICAgICAgICAg
IHN0YXRpYyBLVVJMIGNvbnZlcnRQbGF5YmluVVJMKGNvbnN0IGdjaGFyKiB1cmkpOwogCkBAIC0x
NzEsMjQgKzEyMSwxNiBAQCBjbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgOiBwdWJs
aWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKICAgICAgICAgICAgIHZvaWQgcHJvY2Vz
c0J1ZmZlcmluZ1N0YXRzKEdzdE1lc3NhZ2UqKTsKIAogICAgICAgICAgICAgdmlydHVhbCBTdHJp
bmcgZW5naW5lRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiAiR1N0cmVhbWVyIjsgfQotICAg
ICAgICAgICAgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCB7IHJldHVybiBtX2lzU3RyZWFtaW5n
OyB9CisgICAgICAgICAgICB2aXJ0dWFsIGJvb2wgaXNMaXZlU3RyZWFtKCkgY29uc3QgeyByZXR1
cm4gbV9pc1N0cmVhbWluZzsgfQogCiAgICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICBNZWRp
YVBsYXllciogbV9wbGF5ZXI7CiAgICAgICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGxh
eUJpbjsKLSAgICAgICAgICAgIEdzdEVsZW1lbnQqIG1fd2Via2l0VmlkZW9TaW5rOwotICAgICAg
ICAgICAgR3N0RWxlbWVudCogbV92aWRlb1NpbmtCaW47Ci0gICAgICAgICAgICBHc3RFbGVtZW50
KiBtX2Zwc1Npbms7CiAgICAgICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc291cmNlOwog
ICAgICAgICAgICAgZmxvYXQgbV9zZWVrVGltZTsKICAgICAgICAgICAgIGJvb2wgbV9jaGFuZ2lu
Z1JhdGU7CiAgICAgICAgICAgICBmbG9hdCBtX2VuZFRpbWU7CiAgICAgICAgICAgICBib29sIG1f
aXNFbmRSZWFjaGVkOwotICAgICAgICAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25l
dHdvcmtTdGF0ZTsKLSAgICAgICAgICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlT
dGF0ZTsKICAgICAgICAgICAgIG11dGFibGUgYm9vbCBtX2lzU3RyZWFtaW5nOwotICAgICAgICAg
ICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgICAgICAgICBHc3RCdWZmZXIqIG1fYnVmZmVyOwogICAg
ICAgICAgICAgR3N0U3RydWN0dXJlKiBtX21lZGlhTG9jYXRpb25zOwogICAgICAgICAgICAgaW50
IG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleDsKICAgICAgICAgICAgIGJvb2wgbV9yZXNldFBp
cGVsaW5lOwpAQCAtMjA2LDEyICsxNDgsNiBAQCBjbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKICAgICAgICAgICAg
IGJvb2wgbV9kZWxheWluZ0xvYWQ7CiAgICAgICAgICAgICBib29sIG1fbWVkaWFEdXJhdGlvbktu
b3duOwogICAgICAgICAgICAgbXV0YWJsZSBmbG9hdCBtX21heFRpbWVMb2FkZWRBdExhc3REaWRM
b2FkaW5nUHJvZ3Jlc3M7Ci0jaWYgVVNFKE5BVElWRV9GVUxMU0NSRUVOX1ZJREVPKQotICAgICAg
ICAgICAgUmVmUHRyPEdTdHJlYW1lckdXb3JsZD4gbV9nc3RHV29ybGQ7Ci0gICAgICAgICAgICBP
d25QdHI8RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcj4gbV9mdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyOwotI2VuZGlmCi0gICAgICAgICAgICBndWludCBtX3ZvbHVtZVRpbWVySGFu
ZGxlcjsKLSAgICAgICAgICAgIGd1aW50IG1fbXV0ZVRpbWVySGFuZGxlcjsKICAgICAgICAgICAg
IGJvb2wgbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQ7CiAgICAgICAgICAgICBib29sIG1faGFz
VmlkZW87CiAgICAgICAgICAgICBib29sIG1faGFzQXVkaW87CkBAIC0yMTksOCArMTU1LDYgQEAg
Y2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIDogcHVibGljIE1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZSB7CiAgICAgICAgICAgICBndWludCBtX3ZpZGVvVGltZXJIYW5kbGVyOwog
ICAgICAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3dlYmtpdEF1ZGlvU2luazsKICAgICAg
ICAgICAgIG11dGFibGUgbG9uZyBtX3RvdGFsQnl0ZXM7Ci0gICAgICAgICAgICBHUmVmUHRyPEdz
dFBhZD4gbV92aWRlb1NpbmtQYWQ7Ci0gICAgICAgICAgICBtdXRhYmxlIEludFNpemUgbV92aWRl
b1NpemU7CiAgICAgICAgICAgICBLVVJMIG1fdXJsOwogICAgICAgICAgICAgYm9vbCBtX29yaWdp
bmFsUHJlbG9hZFdhc0F1dG9BbmRXYXNPdmVycmlkZGVuOwogICAgICAgICAgICAgYm9vbCBtX3By
ZXNlcnZlc1BpdGNoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiYmQwZTYwMWVjMmE5YjA5NjIyZWNkZTFjNjNl
MzcyODZlOGUyZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKQEAg
LTAsMCArMSw1MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEg
THRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9r
ZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25o
YSBTaWx2YSA8Z25zQGdub21lLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2Fs
aWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UuaCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKKwor
I2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGdWxsc2NyZWVuVmlkZW9Db250cm9s
bGVyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyR1dvcmxkLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVmVyc2lvbmluZy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIK
KyNpbmNsdWRlICJJbWFnZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24u
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUg
Ik1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJW
aWRlb1NpbmtHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIu
aCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElD
KHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Vi
a2l0X21lZGlhX3BsYXllcl9kZWJ1ZworCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbnQgZ3JlYXRlc3RDb21tb25EaXZpc29yKGludCBhLCBp
bnQgYikKK3sKKyAgICB3aGlsZSAoYikgeworICAgICAgICBpbnQgdGVtcCA9IGE7CisgICAgICAg
IGEgPSBiOworICAgICAgICBiID0gdGVtcCAlIGI7CisgICAgfQorCisgICAgcmV0dXJuIEFCUyhh
KTsKK30KKworc3RhdGljIHZvaWQgbWVkaWFQbGF5ZXJQcml2YXRlVm9sdW1lQ2hhbmdlZENhbGxi
YWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZSogcGxheWVyKQoreworICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gbV92b2x1bWVFbGVtZW50
IHJlY2VpdmVzIHRoZSBub3RpZnk6OnZvbHVtZSBzaWduYWwuCisgICAgcGxheWVyLT52b2x1bWVD
aGFuZ2VkKCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVWb2x1bWVD
aGFuZ2VUaW1lb3V0Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxh
eWVyKQoreworICAgIC8vIFRoaXMgaXMgdGhlIGNhbGxiYWNrIG9mIHRoZSB0aW1lb3V0IHNvdXJj
ZSBjcmVhdGVkIGluIDo6dm9sdW1lQ2hhbmdlZC4KKyAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9m
Vm9sdW1lQ2hhbmdlKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBtZWRp
YVBsYXllclByaXZhdGVNdXRlQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyKQoreworICAgIC8vIFRoaXMg
aXMgY2FsbGVkIHdoZW4gbV92b2x1bWVFbGVtZW50IHJlY2VpdmVzIHRoZSBub3RpZnk6Om11dGUg
c2lnbmFsLgorICAgIHBsYXllci0+bXV0ZUNoYW5nZWQoKTsKK30KKworc3RhdGljIGdib29sZWFu
IG1lZGlhUGxheWVyUHJpdmF0ZU11dGVDaGFuZ2VUaW1lb3V0Q2FsbGJhY2soTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyKQoreworICAgIC8vIFRoaXMgaXMgdGhlIGNhbGxi
YWNrIG9mIHRoZSB0aW1lb3V0IHNvdXJjZSBjcmVhdGVkIGluIDo6bXV0ZUNoYW5nZWQuCisgICAg
cGxheWVyLT5ub3RpZnlQbGF5ZXJPZk11dGUoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0
YXRpYyB2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZVJlcGFpbnRDYWxsYmFjayhXZWJLaXRWaWRlb1Np
bmsqLCBHc3RCdWZmZXIgKmJ1ZmZlciwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSog
cGxheWVyUHJpdmF0ZSkKK3sKKyAgICBwbGF5ZXJQcml2YXRlLT50cmlnZ2VyUmVwYWludChidWZm
ZXIpOworfQorCitNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBtX3BsYXllcihw
bGF5ZXIpCisgICAgLCBtX2Zwc1NpbmsoMCkKKyAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXll
cjo6SGF2ZU5vdGhpbmcpCisgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkp
CisgICAgLCBtX2J1ZmZlcigwKQorICAgICwgbV92b2x1bWVUaW1lckhhbmRsZXIoMCkKKyAgICAs
IG1fbXV0ZVRpbWVySGFuZGxlcigwKQoreworfQorCitNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSgpCit7CisgICAgZ19zaWdu
YWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fd2Via2l0VmlkZW9TaW5rLmdldCgpLCBtX3JlcGFpbnRI
YW5kbGVyKTsKKworICAgIGlmIChtX2J1ZmZlcikKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiht
X2J1ZmZlcik7CisgICAgbV9idWZmZXIgPSAwOworCisgICAgbV9wbGF5ZXIgPSAwOworCisgICAg
aWYgKG1fbXV0ZVRpbWVySGFuZGxlcikKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fbXV0ZVRp
bWVySGFuZGxlcik7CisKKyAgICBpZiAobV92b2x1bWVUaW1lckhhbmRsZXIpCisgICAgICAgIGdf
c291cmNlX3JlbW92ZShtX3ZvbHVtZVRpbWVySGFuZGxlcik7CisKKyNpZiBVU0UoTkFUSVZFX0ZV
TExTQ1JFRU5fVklERU8pCisgICAgaWYgKG1fZnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcikKKyAg
ICAgICAgZXhpdEZ1bGxzY3JlZW4oKTsKKyNlbmRpZgorfQorCisvLyBSZXR1cm5zIHRoZSBzaXpl
IG9mIHRoZSB2aWRlbworSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpu
YXR1cmFsU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNWaWRlbygpKQorICAgICAgICByZXR1
cm4gSW50U2l6ZSgpOworCisgICAgaWYgKCFtX3ZpZGVvU2l6ZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBtX3ZpZGVvU2l6ZTsKKworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IHdlYmtp
dEdzdEdldFBhZENhcHMobV92aWRlb1NpbmtQYWQuZ2V0KCkpOworICAgIGlmICghY2FwcykKKyAg
ICAgICAgcmV0dXJuIEludFNpemUoKTsKKworCisgICAgLy8gVE9ETzogaGFuZGxlIHBvc3NpYmxl
IGNsZWFuIGFwZXJ0dXJlIGRhdGEuIFNlZQorICAgIC8vIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUu
b3JnL3Nob3dfYnVnLmNnaT9pZD01OTY1NzEKKyAgICAvLyBUT0RPOiBoYW5kbGUgcG9zc2libGUg
dHJhbnNmb3JtYXRpb24gbWF0cml4LiBTZWUKKyAgICAvLyBodHRwczovL2J1Z3ppbGxhLmdub21l
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2MzI2CisKKyAgICAvLyBHZXQgdGhlIHZpZGVvIFBBUiBh
bmQgb3JpZ2luYWwgc2l6ZSwgaWYgdGhpcyBmYWlscyB0aGUKKyAgICAvLyB2aWRlby1zaW5rIGhh
cyBsaWtlbHkgbm90IHlldCBuZWdvdGlhdGVkIGl0cyBjYXBzLgorICAgIGludCBwaXhlbEFzcGVj
dFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IsIHN0cmlkZTsKKyAg
ICBJbnRTaXplIG9yaWdpbmFsU2l6ZTsKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7CisgICAg
aWYgKCFnZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2FwcyhjYXBzLmdldCgpLCBvcmlnaW5hbFNp
emUsIGZvcm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rl
bm9taW5hdG9yLCBzdHJpZGUpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgTE9H
X01FRElBX01FU1NBR0UoIk9yaWdpbmFsIHZpZGVvIHNpemU6ICVkeCVkIiwgb3JpZ2luYWxTaXpl
LndpZHRoKCksIG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgTE9HX01FRElBX01FU1NBR0Uo
IlBpeGVsIGFzcGVjdCByYXRpbzogJWQvJWQiLCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBw
aXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IpOworCisgICAgLy8gQ2FsY3VsYXRlIERBUiBiYXNl
ZCBvbiBQQVIgYW5kIHZpZGVvIHNpemUuCisgICAgaW50IGRpc3BsYXlXaWR0aCA9IG9yaWdpbmFs
U2l6ZS53aWR0aCgpICogcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvcjsKKyAgICBpbnQgZGlzcGxh
eUhlaWdodCA9IG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAqIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWlu
YXRvcjsKKworICAgIC8vIERpdmlkZSBkaXNwbGF5IHdpZHRoIGFuZCBoZWlnaHQgYnkgdGhlaXIg
R0NEIHRvIGF2b2lkIHBvc3NpYmxlIG92ZXJmbG93cy4KKyAgICBpbnQgZGlzcGxheUFzcGVjdFJh
dGlvR0NEID0gZ3JlYXRlc3RDb21tb25EaXZpc29yKGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdo
dCk7CisgICAgZGlzcGxheVdpZHRoIC89IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKKyAgICBkaXNw
bGF5SGVpZ2h0IC89IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKKworICAgIC8vIEFwcGx5IERBUiB0
byBvcmlnaW5hbCB2aWRlbyBzaXplLiBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIGluIHh2
aW1hZ2VzaW5rJ3Mgc2V0Y2FwcyBmdW5jdGlvbi4KKyAgICBndWludDY0IHdpZHRoID0gMCwgaGVp
Z2h0ID0gMDsKKyAgICBpZiAoIShvcmlnaW5hbFNpemUuaGVpZ2h0KCkgJSBkaXNwbGF5SGVpZ2h0
KSkgeworICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgiS2VlcGluZyB2aWRlbyBvcmlnaW5hbCBo
ZWlnaHQiKTsKKyAgICAgICAgd2lkdGggPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdp
bmFsU2l6ZS5oZWlnaHQoKSwgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKKyAgICAgICAg
aGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLmhlaWdodCgpKTsKKyAg
ICB9IGVsc2UgaWYgKCEob3JpZ2luYWxTaXplLndpZHRoKCkgJSBkaXNwbGF5V2lkdGgpKSB7Cisg
ICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJLZWVwaW5nIHZpZGVvIG9yaWdpbmFsIHdpZHRoIik7
CisgICAgICAgIGhlaWdodCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxTaXpl
LndpZHRoKCksIGRpc3BsYXlIZWlnaHQsIGRpc3BsYXlXaWR0aCk7CisgICAgICAgIHdpZHRoID0g
c3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLndpZHRoKCkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJBcHByb3hpbWF0aW5nIHdoaWxlIGtlZXBpbmcg
b3JpZ2luYWwgdmlkZW8gaGVpZ2h0Iik7CisgICAgICAgIHdpZHRoID0gZ3N0X3V0aWxfdWludDY0
X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0KCksIGRpc3BsYXlXaWR0aCwgZGlzcGxheUhl
aWdodCk7CisgICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6
ZS5oZWlnaHQoKSk7CisgICAgfQorCisgICAgTE9HX01FRElBX01FU1NBR0UoIk5hdHVyYWwgc2l6
ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCAieCUiIEdfR1VJTlQ2NF9GT1JNQVQsIHdpZHRoLCBoZWln
aHQpOworICAgIG1fdmlkZW9TaXplID0gSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHdpZHRoKSwg
c3RhdGljX2Nhc3Q8aW50PihoZWlnaHQpKTsKKyAgICByZXR1cm4gbV92aWRlb1NpemU7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0Vm9sdW1lKGZsb2F0IHZv
bHVtZSkKK3sKKyAgICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZ3N0X3N0cmVhbV92b2x1bWVfc2V0X3ZvbHVtZShtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksIEdT
VF9TVFJFQU1fVk9MVU1FX0ZPUk1BVF9DVUJJQywgc3RhdGljX2Nhc3Q8ZG91YmxlPih2b2x1bWUp
KTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6dm9sdW1lKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICByZXR1cm4gZ3N0X3N0cmVhbV92b2x1bWVfZ2V0X3ZvbHVtZShtX3ZvbHVtZUVsZW1lbnQu
Z2V0KCksIEdTVF9TVFJFQU1fVk9MVU1FX0ZPUk1BVF9DVUJJQyk7Cit9CisKKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgp
Cit7CisgICAgbV92b2x1bWVUaW1lckhhbmRsZXIgPSAwOworCisgICAgaWYgKCFtX3BsYXllciB8
fCAhbV92b2x1bWVFbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgZG91YmxlIHZvbHVtZTsK
KyAgICB2b2x1bWUgPSBnc3Rfc3RyZWFtX3ZvbHVtZV9nZXRfdm9sdW1lKG1fdm9sdW1lRWxlbWVu
dC5nZXQoKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0NVQklDKTsKKyAgICAvLyBnZXRfdm9s
dW1lKCkgY2FuIHJldHVybiB2YWx1ZXMgc3VwZXJpb3IgdG8gMS4wIGlmIHRoZSB1c2VyCisgICAg
Ly8gYXBwbGllcyBzb2Z0d2FyZSB1c2VyIGdhaW4gdmlhIHRoaXJkIHBhcnR5IGFwcGxpY2F0aW9u
IChHTk9NRQorICAgIC8vIHZvbHVtZSBjb250cm9sIGZvciBpbnN0YW5jZSkuCisgICAgdm9sdW1l
ID0gQ0xBTVAodm9sdW1lLCAwLjAsIDEuMCk7CisgICAgbV9wbGF5ZXItPnZvbHVtZUNoYW5nZWQo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHZvbHVtZSkpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OnZvbHVtZUNoYW5nZWQoKQoreworICAgIGlmIChtX3ZvbHVtZVRpbWVy
SGFuZGxlcikKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fdm9sdW1lVGltZXJIYW5kbGVyKTsK
KyAgICBtX3ZvbHVtZVRpbWVySGFuZGxlciA9IGdfdGltZW91dF9hZGQoMCwgcmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4obWVkaWFQbGF5ZXJQcml2YXRlVm9sdW1lQ2hhbmdlVGltZW91dENh
bGxiYWNrKSwgdGhpcyk7Cit9CisKK01lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bmV0d29ya1N0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9uZXR3b3JrU3RhdGU7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlYWR5U3RhdGUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3JlYWR5U3RhdGU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6c2l6ZUNoYW5nZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3sKKyAg
ICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19vYmplY3Rf
c2V0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm11dGUiLCBtdXRlZCwgTlVMTCk7Cit9CisKK2Jv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bXV0ZWQoKSBjb25zdAoreworICAg
IGlmICghbV92b2x1bWVFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29s
IG11dGVkOworICAgIGdfb2JqZWN0X2dldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwg
Jm11dGVkLCBOVUxMKTsKKyAgICByZXR1cm4gbXV0ZWQ7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZTo6bm90aWZ5UGxheWVyT2ZNdXRlKCkKK3sKKyAgICBtX211dGVU
aW1lckhhbmRsZXIgPSAwOworCisgICAgaWYgKCFtX3BsYXllciB8fCAhbV92b2x1bWVFbGVtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBnYm9vbGVhbiBtdXRlZDsKKyAgICBnX29iamVjdF9n
ZXQobV92b2x1bWVFbGVtZW50LmdldCgpLCAibXV0ZSIsICZtdXRlZCwgTlVMTCk7CisgICAgbV9w
bGF5ZXItPm11dGVDaGFuZ2VkKHN0YXRpY19jYXN0PGJvb2w+KG11dGVkKSk7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bXV0ZUNoYW5nZWQoKQoreworICAgIGlm
IChtX211dGVUaW1lckhhbmRsZXIpCisgICAgICAgIGdfc291cmNlX3JlbW92ZShtX211dGVUaW1l
ckhhbmRsZXIpOworICAgIG1fbXV0ZVRpbWVySGFuZGxlciA9IGdfdGltZW91dF9hZGQoMCwgcmVp
bnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4obWVkaWFQbGF5ZXJQcml2YXRlTXV0ZUNoYW5nZVRp
bWVvdXRDYWxsYmFjayksIHRoaXMpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6OnRyaWdnZXJSZXBhaW50KEdzdEJ1ZmZlciogYnVmZmVyKQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoR1NUX0lTX0JVRkZFUihidWZmZXIpKTsKKyAgICBnc3RfYnVmZmVyX3JlcGxh
Y2UoJm1fYnVmZmVyLCBidWZmZXIpOworICAgIG1fcGxheWVyLT5yZXBhaW50KCk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0U2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKQoreworICAgIG1fc2l6ZSA9IHNpemU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9wbGF5ZXItPnZpc2libGUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgR1Jl
ZlB0cjxHc3RDYXBzPiBjYXBzID0gd2Via2l0R3N0R2V0UGFkQ2FwcyhtX3ZpZGVvU2lua1BhZC5n
ZXQoKSk7CisgICAgaWYgKCFjYXBzKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1h
Z2VHU3RyZWFtZXI+IGdzdEltYWdlID0gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKG1fYnVm
ZmVyLCBjYXBzLmdldCgpKTsKKyAgICBpZiAoIWdzdEltYWdlKQorICAgICAgICByZXR1cm47CisK
KyAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVpbnRlcnByZXRfY2FzdDxJbWFnZSo+KGdzdEltYWdl
LT5pbWFnZSgpLmdldCgpKSwgQ29sb3JTcGFjZVNSR0IsCisgICAgICAgIHJlY3QsIGdzdEltYWdl
LT5yZWN0KCksIENvbXBvc2l0ZUNvcHksIERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24sIGZh
bHNlKTsKK30KKworI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZW50ZXJGdWxsc2NyZWVuKCkKK3sKKyAgICBBU1NF
UlQoIW1fZnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcik7CisgICAgbV9mdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyID0gRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcjo6Y3JlYXRlKHRo
aXMpOworICAgIGlmIChtX2Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIpCisgICAgICAgIG1fZnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlci0+ZW50ZXJGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZXhpdEZ1bGxzY3JlZW4oKQoreworICAgIGlm
ICghbV9mdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyKQorICAgICAgICByZXR1cm47CisgICAgbV9m
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLT5leGl0RnVsbHNjcmVlbigpOworICAgIG1fZnVsbHNj
cmVlblZpZGVvQ29udHJvbGxlci5yZWxlYXNlKCk7Cit9CisjZW5kaWYKKworYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdAorewor
I2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA9PSAxMDUwCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS83Mzg5OTQ1
PgorICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30K
KworUGxhdGZvcm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpwbGF0Zm9y
bU1lZGlhKCkgY29uc3QKK3sKKyNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCisgICAg
UGxhdGZvcm1NZWRpYSBwOworICAgIHAudHlwZSA9IFBsYXRmb3JtTWVkaWE6OkdTdHJlYW1lckdX
b3JsZFR5cGU7CisgICAgcC5tZWRpYS5nc3RyZWFtZXJHV29ybGQgPSBtX2dzdEdXb3JsZC5nZXQo
KTsKKyAgICByZXR1cm4gcDsKKyNlbHNlCisgICAgcmV0dXJuIE5vUGxhdGZvcm1NZWRpYTsKKyNl
bmRpZgorfQorCitNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjptb3ZpZUxvYWRUeXBlKCkgY29uc3QKK3sKKyAgICBpZiAobV9yZWFkeVN0
YXRlID09IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxh
eWVyOjpVbmtub3duOworCisgICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQorICAgICAgICByZXR1cm4g
TWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW07CisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkRvd25s
b2FkOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW5kIGluaXRpYWxpemVzIHNvbWUg
aW50ZXJuYWwgdmFyaWFibGVzLCBhbmQgcmV0dXJucyBhCisvLyBwb2ludGVyIHRvIHRoZSBlbGVt
ZW50IHRoYXQgc2hvdWxkIHJlY2VpdmUgdGhlIGRhdGEgZmxvdyBmaXJzdAorR3N0RWxlbWVudCog
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y3JlYXRlVmlkZW9TaW5rKEdzdEVsZW1l
bnQqIHBpcGVsaW5lKQoreworICAgIGlmICghaW5pdGlhbGl6ZUdTdHJlYW1lcigpKQorICAgICAg
ICByZXR1cm4gMDsKKworI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKKyAgICBtX2dz
dEdXb3JsZCA9IEdTdHJlYW1lckdXb3JsZDo6Y3JlYXRlR1dvcmxkKHBpcGVsaW5lKTsKKyAgICBt
X3dlYmtpdFZpZGVvU2luayA9IHdlYmtpdFZpZGVvU2lua05ldyhtX2dzdEdXb3JsZC5nZXQoKSk7
CisjZWxzZQorICAgIG1fd2Via2l0VmlkZW9TaW5rID0gd2Via2l0VmlkZW9TaW5rTmV3KCk7Cisj
ZW5kaWYKKyAgICBtX3ZpZGVvU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3Rh
dGljX3BhZChtX3dlYmtpdFZpZGVvU2luay5nZXQoKSwgInNpbmsiKSk7CisKKyAgICBtX3JlcGFp
bnRIYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdChtX3dlYmtpdFZpZGVvU2luay5nZXQoKSwgInJl
cGFpbnQtcmVxdWVzdGVkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVSZXBhaW50Q2Fs
bGJhY2spLCB0aGlzKTsKKworI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKKyAgICAv
LyBCdWlsZCBhIG5ldyB2aWRlbyBzaW5rIGNvbnNpc3Rpbmcgb2YgYSBiaW4gY29udGFpbmluZyBh
IHRlZQorICAgIC8vIChtZWFudCB0byBkaXN0cmlidXRlIGRhdGEgdG8gbXVsdGlwbGUgdmlkZW8g
c2lua3MpIGFuZCBvdXIKKyAgICAvLyBpbnRlcm5hbCB2aWRlbyBzaW5rLiBGb3IgZnVsbHNjcmVl
biB3ZSBjcmVhdGUgYW4gYXV0b3ZpZGVvc2luaworICAgIC8vIGFuZCBpbml0aWFsbHkgYmxvY2sg
dGhlIGRhdGEgZmxvdyB0b3dhcmRzIGl0IGFuZCBjb25maWd1cmUgaXQKKworICAgIG1fdmlkZW9T
aW5rQmluID0gZ3N0X2Jpbl9uZXcoInZpZGVvLXNpbmsiKTsKKworICAgIEdzdEVsZW1lbnQqIHZp
ZGVvVGVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ0ZWUiLCAidmlkZW9UZWUiKTsKKyAg
ICBHc3RFbGVtZW50KiBxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCAw
KTsKKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgR1JlZlB0cjxHc3RQYWQ+IHNpbmtQ
YWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQodmlkZW9UZWUsICJzaW5r
IikpOworICAgIEdTVF9PQkpFQ1RfRkxBR19TRVQoR1NUX09CSkVDVChzaW5rUGFkLmdldCgpKSwg
R1NUX1BBRF9GTEFHX1BST1hZX0FMTE9DQVRJT04pOworI2VuZGlmCisKKyAgICBnc3RfYmluX2Fk
ZF9tYW55KEdTVF9CSU4obV92aWRlb1NpbmtCaW4uZ2V0KCkpLCB2aWRlb1RlZSwgcXVldWUsIE5V
TEwpOworCisgICAgLy8gTGluayBhIG5ldyBzcmMgcGFkIGZyb20gdGVlIHRvIHF1ZXVlMS4KKyAg
ICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCh2aWRlb1RlZSwgMCwgcXVldWUsICJzaW5rIiwg
R1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOworI2VuZGlmCisKKyAgICBHc3RFbGVtZW50KiBh
Y3R1YWxWaWRlb1NpbmsgPSAwOworICAgIG1fZnBzU2luayA9IGdzdF9lbGVtZW50X2ZhY3Rvcnlf
bWFrZSgiZnBzZGlzcGxheXNpbmsiLCAic2luayIpOworICAgIGlmIChtX2Zwc1NpbmspIHsKKyAg
ICAgICAgLy8gVGhlIHZlcmJvc2UgcHJvcGVydHkgaGFzIGJlZW4gYWRkZWQgaW4gLWJhZCAwLjEw
LjIyLiBNYWtpbmcKKyAgICAgICAgLy8gdGhpcyB3aG9sZSBjb2RlIGRlcGVuZCBvbiBpdCBiZWNh
dXNlIHdlIGRvbid0IHdhbnQKKyAgICAgICAgLy8gZnBzZGlwbGF5c2luayB0byBzcGl0IGRhdGEg
b24gc3Rkb3V0LgorICAgICAgICBHc3RFbGVtZW50RmFjdG9yeSogZmFjdG9yeSA9IEdTVF9FTEVN
RU5UX0ZBQ1RPUlkoR1NUX0VMRU1FTlRfR0VUX0NMQVNTKG1fZnBzU2luayktPmVsZW1lbnRmYWN0
b3J5KTsKKyAgICAgICAgaWYgKGdzdF9wbHVnaW5fZmVhdHVyZV9jaGVja192ZXJzaW9uKEdTVF9Q
TFVHSU5fRkVBVFVSRShmYWN0b3J5KSwgMCwgMTAsIDIyKSkgeworICAgICAgICAgICAgZ19vYmpl
Y3Rfc2V0KG1fZnBzU2luaywgInNpbGVudCIsIFRSVUUgLCBOVUxMKTsKKworICAgICAgICAgICAg
Ly8gVHVybiBvZmYgdGV4dCBvdmVybGF5IHVubGVzcyBsb2dnaW5nIGlzIGVuYWJsZWQuCisjaWYg
TE9HX0RJU0FCTEVECisgICAgICAgICAgICBnX29iamVjdF9zZXQobV9mcHNTaW5rLCAidGV4dC1v
dmVybGF5IiwgRkFMU0UgLCBOVUxMKTsKKyNlbHNlCisgICAgICAgICAgICBXVEZMb2dDaGFubmVs
KiBjaGFubmVsID0gZ2V0Q2hhbm5lbEZyb21OYW1lKCJNZWRpYSIpOworICAgICAgICAgICAgaWYg
KGNoYW5uZWwtPnN0YXRlICE9IFdURkxvZ0NoYW5uZWxPbikKKyAgICAgICAgICAgICAgICBnX29i
amVjdF9zZXQobV9mcHNTaW5rLCAidGV4dC1vdmVybGF5IiwgRkFMU0UgLCBOVUxMKTsKKyNlbmRp
ZiAvLyBMT0dfRElTQUJMRUQKKworICAgICAgICAgICAgaWYgKGdfb2JqZWN0X2NsYXNzX2ZpbmRf
cHJvcGVydHkoR19PQkpFQ1RfR0VUX0NMQVNTKG1fZnBzU2luayksICJ2aWRlby1zaW5rIikpIHsK
KyAgICAgICAgICAgICAgICBnX29iamVjdF9zZXQobV9mcHNTaW5rLCAidmlkZW8tc2luayIsIG1f
d2Via2l0VmlkZW9TaW5rLmdldCgpLCBOVUxMKTsKKyNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5f
VklERU8pCisgICAgICAgICAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTihtX3ZpZGVvU2lua0Jp
bi5nZXQoKSksIG1fZnBzU2luayk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBhY3R1YWxWaWRl
b1NpbmsgPSBtX2Zwc1Npbms7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBt
X2Zwc1NpbmsgPSAwOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fZnBzU2luayA9IDA7
CisgICAgfQorCisgICAgaWYgKCFtX2Zwc1NpbmspIHsKKyNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JF
RU5fVklERU8pCisgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV92aWRlb1NpbmtCaW4uZ2V0
KCkpLCBtX3dlYmtpdFZpZGVvU2luay5nZXQoKSk7CisjZW5kaWYKKyAgICAgICAgYWN0dWFsVmlk
ZW9TaW5rID0gbV93ZWJraXRWaWRlb1NpbmsuZ2V0KCk7CisgICAgfQorCisgICAgQVNTRVJUKGFj
dHVhbFZpZGVvU2luayk7CisKKyNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCisgICAg
Ly8gRmFzdGVyIGVsZW1lbnRzIGxpbmtpbmcuCisgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1
bGwocXVldWUsICJzcmMiLCBhY3R1YWxWaWRlb1NpbmssICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NI
RUNLX05PVEhJTkcpOworCisgICAgLy8gQWRkIGEgZ2hvc3RwYWQgdG8gdGhlIGJpbiBzbyBpdCBj
YW4gcHJveHkgdG8gdGVlLgorICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0
X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQodmlkZW9UZWUsICJzaW5rIikpOworICAgIGdzdF9lbGVt
ZW50X2FkZF9wYWQobV92aWRlb1NpbmtCaW4uZ2V0KCksIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5r
IiwgcGFkLmdldCgpKSk7CisKKyAgICAvLyBTZXQgdGhlIGJpbiBhcyB2aWRlbyBzaW5rIG9mIHBs
YXliaW4uCisgICAgcmV0dXJuIG1fdmlkZW9TaW5rQmluLmdldCgpOworI2Vsc2UKKyAgICByZXR1
cm4gYWN0dWFsVmlkZW9TaW5rOworI2VuZGlmCit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6c2V0U3RyZWFtVm9sdW1lRWxlbWVudChHc3RTdHJlYW1Wb2x1bWUqIHZv
bHVtZSkKK3sKKyAgICBBU1NFUlQoIW1fdm9sdW1lRWxlbWVudCk7CisgICAgbV92b2x1bWVFbGVt
ZW50ID0gdm9sdW1lOworCisgICAgZ19vYmplY3Rfc2V0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwg
Im11dGUiLCBtX3BsYXllci0+bXV0ZWQoKSwgInZvbHVtZSIsIG1fcGxheWVyLT52b2x1bWUoKSwg
TlVMTCk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm5v
dGlmeTo6dm9sdW1lIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVWb2x1bWVDaGFuZ2Vk
Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fdm9sdW1lRWxlbWVudC5n
ZXQoKSwgIm5vdGlmeTo6bXV0ZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlTXV0ZUNo
YW5nZWRDYWxsYmFjayksIHRoaXMpOworfQorCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjpkZWNvZGVkRnJhbWVDb3VudCgpIGNvbnN0Cit7CisgICAgZ3VpbnQ2NCBk
ZWNvZGVkRnJhbWVzID0gMDsKKyAgICBpZiAobV9mcHNTaW5rKQorICAgICAgICBnX29iamVjdF9n
ZXQobV9mcHNTaW5rLCAiZnJhbWVzLXJlbmRlcmVkIiwgJmRlY29kZWRGcmFtZXMsIE5VTEwpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVjb2RlZEZyYW1lcyk7Cit9CisKK3Vu
c2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmRyb3BwZWRGcmFtZUNvdW50
KCkgY29uc3QKK3sKKyAgICBndWludDY0IGZyYW1lc0Ryb3BwZWQgPSAwOworICAgIGlmIChtX2Zw
c1NpbmspCisgICAgICAgIGdfb2JqZWN0X2dldChtX2Zwc1NpbmssICJmcmFtZXMtZHJvcHBlZCIs
ICZmcmFtZXNEcm9wcGVkLCBOVUxMKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGZyYW1lc0Ryb3BwZWQpOworfQorCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjphdWRpb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdAoreworICAgIEdzdFF1ZXJ5KiBx
dWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9CWVRFUyk7CisgICAgZ2lu
dDY0IHBvc2l0aW9uID0gMDsKKworICAgIGlmIChhdWRpb1NpbmsoKSAmJiBnc3RfZWxlbWVudF9x
dWVyeShhdWRpb1NpbmsoKSwgcXVlcnkpKQorICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRp
b24ocXVlcnksIDAsICZwb3NpdGlvbik7CisKKyAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pOworfQorCit1bnNpZ25l
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp2aWRlb0RlY29kZWRCeXRlQ291bnQo
KSBjb25zdAoreworICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24o
R1NUX0ZPUk1BVF9CWVRFUyk7CisgICAgZ2ludDY0IHBvc2l0aW9uID0gMDsKKworICAgIGlmIChn
c3RfZWxlbWVudF9xdWVyeShtX3dlYmtpdFZpZGVvU2luay5nZXQoKSwgcXVlcnkpKQorICAgICAg
ICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZwb3NpdGlvbik7CisKKyAgICBn
c3RfcXVlcnlfdW5yZWYocXVlcnkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
cG9zaXRpb24pOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWNlNDNlY2I5NmIwZTdmNjVlMDEyOWMwNmM2N2JjMTM2ZTU1Y2Y5NQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlLmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTAgSWdhbGlhIFMuTAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZV9oCisjZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2VfaAor
I2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdSZWZQdHJH
U3RyZWFtZXIuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKworI2luY2x1ZGUg
PGdsaWIuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisjaW5jbHVkZSA8Z3N0L2F1ZGlvL3N0cmVhbXZv
bHVtZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxnc3QvaW50ZXJmYWNlcy9zdHJlYW12b2x1bWUuaD4K
KyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rIFdlYktpdFZpZGVvU2lu
azsKK3R5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXIgR3N0QnVmZmVyOwordHlwZWRlZiBzdHJ1Y3Qg
X0dzdE1lc3NhZ2UgR3N0TWVzc2FnZTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RFbGVtZW50IEdzdEVs
ZW1lbnQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnVsbHNjcmVlblZpZGVvQ29u
dHJvbGxlckdTdHJlYW1lcjsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEludFNpemU7
CitjbGFzcyBJbnRSZWN0OworY2xhc3MgR1N0cmVhbWVyR1dvcmxkOworCitjbGFzcyBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVy
ZmFjZSB7CisKK3B1YmxpYzoKKyAgICB+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSgp
OworCisgICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0OworCisgICAgdm9pZCBzZXRWb2x1
bWUoZmxvYXQpOworICAgIGZsb2F0IHZvbHVtZSgpIGNvbnN0OworICAgIHZvaWQgdm9sdW1lQ2hh
bmdlZCgpOworICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKTsKKworICAgIGJv
b2wgc3VwcG9ydHNNdXRpbmcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBzZXRN
dXRlZChib29sKTsKKyAgICBib29sIG11dGVkKCkgY29uc3Q7CisgICAgdm9pZCBtdXRlQ2hhbmdl
ZCgpOworICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZNdXRlKCk7CisKKyAgICBNZWRpYVBsYXllcjo6
TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0OworICAgIE1lZGlhUGxheWVyOjpSZWFk
eVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKKworICAgIHZvaWQgc2V0VmlzaWJsZShib29sKSB7
IH0KKyAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgc2l6ZUNoYW5n
ZWQoKTsKKworICAgIHZvaWQgdHJpZ2dlclJlcGFpbnQoR3N0QnVmZmVyKik7CisgICAgdm9pZCBw
YWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBmbG9hdCBtYXhUaW1lTG9hZGVkKCkgY29uc3QgeyByZXR1cm4gMC4wOyB9CisKKyNp
ZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCisgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4o
KTsKKyAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7CisgICAgYm9vbCBjYW5FbnRlckZ1bGxzY3Jl
ZW4oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisjZW5kaWYKKworICAgIGJvb2wgc3VwcG9ydHNG
dWxsc2NyZWVuKCkgY29uc3Q7CisgICAgUGxhdGZvcm1NZWRpYSBwbGF0Zm9ybU1lZGlhKCkgY29u
c3Q7CisKKyAgICBNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBtb3ZpZUxvYWRUeXBlKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0ID0gMDsKKworICAgIE1l
ZGlhUGxheWVyKiBtZWRpYVBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWVyOyB9CisKKyAg
ICB1bnNpZ25lZCBkZWNvZGVkRnJhbWVDb3VudCgpIGNvbnN0OworICAgIHVuc2lnbmVkIGRyb3Bw
ZWRGcmFtZUNvdW50KCkgY29uc3Q7CisgICAgdW5zaWduZWQgYXVkaW9EZWNvZGVkQnl0ZUNvdW50
KCkgY29uc3Q7CisgICAgdW5zaWduZWQgdmlkZW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3Q7CisK
K3Byb3RlY3RlZDoKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKE1lZGlhUGxh
eWVyKik7CisgICAgR3N0RWxlbWVudCogY3JlYXRlVmlkZW9TaW5rKEdzdEVsZW1lbnQqIHBpcGVs
aW5lKTsKKyAgICB2b2lkIHNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR3N0U3RyZWFtVm9sdW1lKik7
CisgICAgdmlydHVhbCBHc3RFbGVtZW50KiBhdWRpb1NpbmsoKSBjb25zdCB7IHJldHVybiAwOyB9
CisKKyAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7CisgICAgR1JlZlB0cjxHc3RTdHJlYW1Wb2x1
bWU+IG1fdm9sdW1lRWxlbWVudDsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fd2Via2l0Vmlk
ZW9TaW5rOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV92aWRlb1NpbmtCaW47CisgICAgR3N0
RWxlbWVudCogbV9mcHNTaW5rOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlT
dGF0ZTsKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOworICAg
IEludFNpemUgbV9zaXplOworICAgIEdzdEJ1ZmZlciogbV9idWZmZXI7CisjaWYgVVNFKE5BVElW
RV9GVUxMU0NSRUVOX1ZJREVPKQorICAgIFJlZlB0cjxHU3RyZWFtZXJHV29ybGQ+IG1fZ3N0R1dv
cmxkOworICAgIE93blB0cjxGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyPiBtX2Z1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI7CisjZW5kaWYKKyAgICBndWludCBtX3ZvbHVtZVRpbWVy
SGFuZGxlcjsKKyAgICBndWludCBtX211dGVUaW1lckhhbmRsZXI7CisgICAgZ3VpbnQgbV9yZXBh
aW50SGFuZGxlcjsKKyAgICBHUmVmUHRyPEdzdFBhZD4gbV92aWRlb1NpbmtQYWQ7CisgICAgbXV0
YWJsZSBJbnRTaXplIG1fdmlkZW9TaXplOworfTsKK30KKworI2VuZGlmIC8vIFVTRShHU1RSRUFN
RVIpCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmNwcAppbmRl
eCA1NDg4MWZlNjIxODllMmIzNGFmMDk5MTJkOGYxMTllYjJiMzI3MzhjLi40NmU4MWNjZWM4OTJh
ZTgxMzUzOWY5NmUwOWEzYjMwNTc0NDVhNjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXJHdGsuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiR1N0cmVhbWVyR1dv
cmxkLmgiCiAjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVy
LmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAi
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIgogCiAjaW5jbHVkZSA8Z2RrL2dkay5o
PgogI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGlj
IHZvaWQgdm9sdW1lVmFsdWVDaGFuZ2VkKEd0a1NjYWxlQnV0dG9uICpidXR0b24sIGdkb3VibGUg
dmFsdWUsIEZ1bGxzY3JlZW4KIH0KIAogCi1GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjpG
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciog
cGxheWVyKQorRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6RnVsbHNjcmVlblZpZGVvQ29u
dHJvbGxlckd0ayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIpCiAgICAg
OiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyKHBsYXllcikKICAgICAsIG1faHVk
VGltZW91dElkKDApCiAgICAgLCBtX3Byb2dyZXNzQmFyVXBkYXRlSWQoMCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRnVsbHNj
cmVlblZpZGVvQ29udHJvbGxlckd0ay5oCmluZGV4IDRiOWYzZWIyMjg4YmEwODQ1ODNkYTg4YTRi
ZjI5YTBkZmU2N2Q5NDkuLmQ1NzcwYzU5ODg2NjQ3NGJhOTU0ODViM2Y0MWIyYzQzYjY5MTQ0YmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxsc2Ny
ZWVuVmlkZW9Db250cm9sbGVyR3RrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuaApAQCAtMjgsNyArMjgsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJH
dGsgOiBwdWJsaWMgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lciB7CiBwdWJsaWM6
Ci0gICAgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayhNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIqKTsKKyAgICBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UqKTsKIAogICAgIHZvaWQgZ3RrQ29uZmlndXJlKEdka0V2ZW50Q29u
ZmlndXJlKik7CiAKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzYjcw
NTcwNTQzMWUxODQyOTZjOTBmYzNkMDBiYWFkOWMxNDI3MjJhLi4zOWQyNjYzYjU5YjYwM2NmZDU0
MDRmODM4YjcwOWVhOWFjNWJlMDIzIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTMtMDItMDYgIEpvbmF0aG9uIEpvbmdzbWEgIDxqb25h
dGhvbi5qb25nc21hQGNvbGxhYm9yYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gTWVkaWFQ
bGF5ZXIncyBjb2RlIGlzIG5vdCBlYXNpbHkgcmV1c2FibGUgYnkgb3RoZXIgR1N0cmVhbWVyLWJh
c2VkIHBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMDI2MQorCisgICAgICAgIFJldmlld2VkIGJ5IFBoaWxpcHBlIE5vcm1hbmQKKworICAg
ICAgICAqIGNvbmZpZ3VyZS5hYzogcmVtb3ZlZCBmYXJzdHJlYW0gcmVxdWlyZW1lbnQgZm9yIG5v
dyBzaW5jZSBpdCdzCisgICAgICAgIG5vdCBhY3R1YWxseSB1c2VkIHlldCBhbmQgbWFrZXMgaXQg
bW9yZSBkaWZmaWN1bHQgdG8gYnVpbGQgYW5kIHRlc3QKKwogMjAxMy0wMi0wMiAgUGF0cmljayBH
YW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBbQ01ha2VdIEFkb3B0IHRo
ZSBXaW5DRSBwb3J0IHRvIG5ldyBDTWFrZQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29u
ZmlndXJlLmFjCmluZGV4IDg1ZmY1NTU4MTM3YTI5YmFlOWU2OTdlMzFjMTA3ODVjNjYxNWYzODAu
LjMxZmI0MDRjZTIwMTc0ZDc5MzBkYzk0NTM2OTlhYWYzMjczYjVlMjQgMTAwNjQ0Ci0tLSBhL2Nv
bmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTk5MiwyMSArOTkyLDYgQEAgaWYgdGVz
dCAiJGVuYWJsZV92aWRlbyIgPSAieWVzIiB8fCB0ZXN0ICIkZW5hYmxlX3dlYl9hdWRpbyIgPSAi
eWVzIjsgdGhlbgogICAgQUNfU1VCU1QoW0dTVFJFQU1FUl9MSUJTXSkKIGZpCiAKLSMgZmFyc3Ry
ZWFtLTAuMSBkZXBlbmRzIG9uIGdzdHJlYW1lciAwLjEwIGN1cnJlbnRseS4gRGlzYWJsZQotIyBt
ZWRpYV9zdHJlYW0gaWYgZ3N0cmVhbWVyIDEuMCBidWlsZCBzdXBwb3J0IGlzIGVuYWJsZWQuCi1p
ZiB0ZXN0ICIkaGF2ZV9nc3RyZWFtZXIiICE9ICJ5ZXMiIHx8IHRlc3QgIiRHU1RfQVBJX1ZFUlNJ
T04iID0gIjEuMCI7IHRoZW4KLSAgIGlmIHRlc3QgIiRlbmFibGVfbWVkaWFfc3RyZWFtIiA9ICJ5
ZXMiOyB0aGVuCi0gICAgICBBQ19NU0dfV0FSTihbRGlzYWJsaW5nIE1lZGlhIFN0cmVhbSBiZWNh
dXNlIG5vIEdTdHJlYW1lciAwLjEwIHN1cHBvcnQgaXMgZW5hYmxlZF0pCi0gICBmaQotICAgZW5h
YmxlX21lZGlhX3N0cmVhbT1mYWxzZQotZmkKLWlmIHRlc3QgIiRlbmFibGVfbWVkaWFfc3RyZWFt
IiA9ICJ5ZXMiOyB0aGVuCi0gICBQS0dfQ0hFQ0tfTU9EVUxFUyhbRkFSU1RSRUFNXSwgW2ZhcnN0
cmVhbS0wLjFdLAotICAgICAgICAgICAgICAgICAgICAgW2hhdmVfZmFyc3RyZWFtPXllc10sIFtl
bmFibGVfbWVkaWFfc3RyZWFtPWZhbHNlXSkKLSAgIEFDX1NVQlNUKFtGQVJTVFJFQU1fQ0ZMQUdT
XSkKLSAgIEFDX1NVQlNUKFtGQVJTVFJFQU1fTElCU10pCi1maQotCiBhY2NlbGVyYXRpb25fYmFj
a2VuZF9kZXNjcmlwdGlvbj0kd2l0aF9hY2NlbGVyYXRpb25fYmFja2VuZAogaWYgdGVzdCAiJHdp
dGhfYWNjZWxlcmF0aW9uX2JhY2tlbmQiID0gImNsdXR0ZXIiOyB0aGVuCiAgICBQS0dfQ0hFQ0tf
TU9EVUxFUyhDTFVUVEVSLCBjbHV0dGVyLTEuMCA+PSAkQ0xVVFRFUl9SRVFVSVJFRF9WRVJTSU9O
KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>