<?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>123378</bug_id>
          
          <creation_ts>2013-10-25 17:39:09 -0700</creation_ts>
          <short_desc>[MSE][Mac] Add a new MSE-compatible MediaPlayerPrivate implementation, MediaPlayerPrivateMediaSourceAVFObjC</short_desc>
          <delta_ts>2013-12-06 14:41:12 -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>New Bugs</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>
          <dependson>124422</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>943830</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-10-25 17:39:09 -0700</bug_when>
    <thetext>[MSE][Mac] Add a new MSE-compatible MediaPlayerPrivate implementation, MediaPlayerPrivateMediaSourceAVFObjC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951304</commentid>
    <comment_count>1</comment_count>
      <attachid>217110</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-11-15 17:43:02 -0800</bug_when>
    <thetext>Created attachment 217110
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951309</commentid>
    <comment_count>2</comment_count>
      <attachid>217110</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-15 18:16:50 -0800</bug_when>
    <thetext>Comment on attachment 217110
Patch

Attachment 217110 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/24738002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951311</commentid>
    <comment_count>3</comment_count>
      <attachid>217110</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-15 18:47:18 -0800</bug_when>
    <thetext>Comment on attachment 217110
Patch

Attachment 217110 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/23628262</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951314</commentid>
    <comment_count>4</comment_count>
      <attachid>217110</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-15 19:55:34 -0800</bug_when>
    <thetext>Comment on attachment 217110
Patch

Attachment 217110 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/24728032</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951431</commentid>
    <comment_count>5</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-11-17 12:24:57 -0800</bug_when>
    <thetext>The compilation errors are due to the dependency on bug #124422.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955637</commentid>
    <comment_count>6</comment_count>
      <attachid>218225</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-12-02 15:27:33 -0800</bug_when>
    <thetext>Created attachment 218225
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955647</commentid>
    <comment_count>7</comment_count>
      <attachid>218225</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-12-02 15:34:21 -0800</bug_when>
    <thetext>Comment on attachment 218225
Patch

Attachment 218225 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/42178065</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955665</commentid>
    <comment_count>8</comment_count>
      <attachid>218225</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-12-02 16:11:09 -0800</bug_when>
    <thetext>Comment on attachment 218225
Patch

Attachment 218225 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/39688042</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955691</commentid>
    <comment_count>9</comment_count>
      <attachid>218240</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-12-02 16:47:44 -0800</bug_when>
    <thetext>Created attachment 218240
Patch

Fix release build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955900</commentid>
    <comment_count>10</comment_count>
      <attachid>218240</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-12-03 08:20:29 -0800</bug_when>
    <thetext>Comment on attachment 218240
Patch

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

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:28
&gt; +

#if ENABLE(MEDIA_SOURCE) &amp;&amp; USE(AVFOUNDATION)

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:137
&gt; +void MediaPlayerPrivateMediaSourceAVFObjC::load(const String&amp;)
&gt; +{
&gt; +    ASSERT_NOT_REACHED();
&gt; +}
&gt; +
&gt; +void MediaPlayerPrivateMediaSourceAVFObjC::load(const String&amp; url, PassRefPtr&lt;HTMLMediaSource&gt; source)

Nit: can you change load() take a class/union rather than adding another version (we will need another variant for MediaStream soon enough)?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:149
&gt; +

Nit: unneeded blank line.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:155
&gt; +

Ditto.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:208
&gt; +IntSize MediaPlayerPrivateMediaSourceAVFObjC::naturalSize() const
&gt; +{
&gt; +    return IntSize();
&gt; +}

Is this correct - shouldn&apos;t it return the intrinsic size of the track(s)?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:309
&gt; +    // No-op

Nit: missing period.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:314
&gt; +    // FIXME: paint()

Nit: bug number?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:319
&gt; +    // FIXME: implement paintCurrentFrameInContext()

Ditto.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:335
&gt; +    if (supportsAcceleratedRendering() &amp;&amp; m_player-&gt;mediaPlayerClient()-&gt;mediaPlayerRenderingCanBeAccelerated(m_player))

Nit: is there really any reason to call supportsAcceleratedRendering()?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:349
&gt; +    // No-op

Nit: missing period.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:360
&gt; +    // FIXME: implement languageOfPrimaryAudioTrack()

Nit: bug number?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:401
&gt; +    MediaPlayer::NetworkState oldNetworkState = m_networkState;
&gt; +    MediaPlayer::ReadyState oldReadyState = m_readyState;
&gt; +
&gt; +    UNUSED_PARAM(oldNetworkState);
&gt; +    UNUSED_PARAM(oldReadyState);

???

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:429
&gt; +    m_sampleBufferDisplayLayer = displayLayer;
&gt; +    [m_sampleBufferDisplayLayer setControlTimebase:m_clock-&gt;timebase()];
&gt; +    m_player-&gt;mediaPlayerClient()-&gt;mediaPlayerRenderingModeChanged(m_player);

Is it legal to pass a NULL displayLayer? If not, it is probably worth adding an ASSERT.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:432
&gt; +    // FIXME: move this somewhere appropriate:
&gt; +    m_player-&gt;firstVideoFrameAvailable();

&quot;appropriate:&quot; ?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:49
&gt; +class MediaSourcePrivateAVFObjC : public MediaSourcePrivate {

Can this be marked FINAL?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:51
&gt; +    static RefPtr&lt;MediaSourcePrivateAVFObjC&gt; create(MediaPlayerPrivateMediaSourceAVFObjC*);

Can this return a std::unique_ptr&lt;&gt;?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:104
&gt; +    // FIXME: implement markEndOfStream()

Nit: bug number?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:110
&gt; +    // FIXME: implement unmarkEndOfStream()

Ditto.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:57
&gt; +class SourceBufferPrivateAVFObjC : public SourceBufferPrivate {

Can this be marked FINAL?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:107
&gt; +    bool m_parsingSucceeded;
&gt; +    int m_enabledVideoTrackID;
&gt; +
&gt; +    Vector&lt;RefPtr&lt;VideoTrackPrivate&gt;&gt; m_videoTracks;
&gt; +    Vector&lt;RefPtr&lt;AudioTrackPrivate&gt;&gt; m_audioTracks;

Nit: ordering these by size may make the object slightly smaller.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:246
&gt; +class MediaDescriptionAVFObjC : public MediaDescription {

FINAL?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:265
&gt; +            FourCharCode codec = CMFormatDescriptionGetMediaSubType(description);

Wow, FourCharCode!

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:266
&gt; +            m_codec = AtomicString(reinterpret_cast&lt;LChar*&gt;(&amp;codec), 4);

What will happen on a Big Endian machine ;-O

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:301
&gt; +SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC()
&gt; +{
&gt; +    if (m_displayLayer) {
&gt; +        m_parent-&gt;player()-&gt;removeDisplayLayer(m_displayLayer.get());
&gt; +        [m_displayLayer flushAndRemoveImage];
&gt; +        [m_displayLayer stopRequestingMediaData];
&gt; +        m_displayLayer = nullptr;
&gt; +    }
&gt; +}

Is there any chance the parser delegate will be called (eg. on another queue/thread) after this? IOW, should WebAVStreamDataParserListener an explicit &quot;disconnect&quot;?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:306
&gt; +

Nit: you can skip a lot of unnecessary work by returning immediately if m_client is NULL.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:307
&gt; +    m_asset = asset;

Nit: why retain the asset?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:325
&gt; +        // FIXME: Add TextTrack support

Nit: bug number?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:350
&gt; +    ProcessCodedFrameInfo* info = (ProcessCodedFrameInfo*)refcon;

Nit: C-style cast?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:374
&gt; +    notImplemented();

Nit: bug number?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:397
&gt; +    notImplemented();

Ditto.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:424
&gt; +    notImplemented();

Ditto.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:429
&gt; +    notImplemented();

Ditto.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:483
&gt; +    for (CFIndex i = 0; i &lt; CFArrayGetCount(attachmentsArray); ++i) {

Nit: the attachments array won&apos;t change size, so you can set a local variable in the init-expression.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:505
&gt; +        PlatformSample platformSample = mediaSample-&gt;platformSample();
&gt; +        if (platformSample.type != PlatformSample::CMSampleBufferType)
&gt; +            return;

Can the vector have samples of different types? IOW, should this be &quot;continue&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955982</commentid>
    <comment_count>11</comment_count>
      <attachid>218240</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-12-03 10:54:42 -0800</bug_when>
    <thetext>Comment on attachment 218240
Patch

Attachment 218240 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/42828083</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956418</commentid>
    <comment_count>12</comment_count>
      <attachid>218240</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-12-04 09:57:03 -0800</bug_when>
    <thetext>Comment on attachment 218240
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:28
&gt;&gt; +
&gt; 
&gt; #if ENABLE(MEDIA_SOURCE) &amp;&amp; USE(AVFOUNDATION)

Added.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:137
&gt;&gt; +void MediaPlayerPrivateMediaSourceAVFObjC::load(const String&amp; url, PassRefPtr&lt;HTMLMediaSource&gt; source)
&gt; 
&gt; Nit: can you change load() take a class/union rather than adding another version (we will need another variant for MediaStream soon enough)?

Sure, but I&apos;ll do that in a separate bug. &lt;http://webkit.org/b/125154&gt;

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:149
&gt;&gt; +
&gt; 
&gt; Nit: unneeded blank line.

Deleted.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:155
&gt;&gt; +
&gt; 
&gt; Ditto.

Deleted.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:208
&gt;&gt; +}
&gt; 
&gt; Is this correct - shouldn&apos;t it return the intrinsic size of the track(s)?

It probably should.  I&apos;ll hook this up in a future bug. &lt;http://webkit.org/b/125156&gt;

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:314
&gt;&gt; +    // FIXME: paint()
&gt; 
&gt; Nit: bug number?

Added. &lt;http://webkit.org/b/125157&gt;

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:319
&gt;&gt; +    // FIXME: implement paintCurrentFrameInContext()
&gt; 
&gt; Ditto.

Ditto.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:335
&gt;&gt; +    if (supportsAcceleratedRendering() &amp;&amp; m_player-&gt;mediaPlayerClient()-&gt;mediaPlayerRenderingCanBeAccelerated(m_player))
&gt; 
&gt; Nit: is there really any reason to call supportsAcceleratedRendering()?

Not really. :)

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:349
&gt;&gt; +    // No-op
&gt; 
&gt; Nit: missing period.

Added.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:360
&gt;&gt; +    // FIXME: implement languageOfPrimaryAudioTrack()
&gt; 
&gt; Nit: bug number?

Added. &lt;http://webkit.org/b/125158&gt;

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:401
&gt;&gt; +    UNUSED_PARAM(oldReadyState);
&gt; 
&gt; ???

This is crazy, and just dead code; I&apos;ll remove it.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:429
&gt;&gt; +    m_player-&gt;mediaPlayerClient()-&gt;mediaPlayerRenderingModeChanged(m_player);
&gt; 
&gt; Is it legal to pass a NULL displayLayer? If not, it is probably worth adding an ASSERT.

Added.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:432
&gt;&gt; +    m_player-&gt;firstVideoFrameAvailable();
&gt; 
&gt; &quot;appropriate:&quot; ?

Yeah, just because a layer was added, that doesn&apos;t mean a decoded video frame is actually available.  Unfortunately, we don&apos;t have any insight into when AVSampleBufferDisplayLayer actually has decoded a frame of video.  Hence, &quot;Move this somewhere (more) appropriate.&quot;

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:49
&gt;&gt; +class MediaSourcePrivateAVFObjC : public MediaSourcePrivate {
&gt; 
&gt; Can this be marked FINAL?

Sure.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:51
&gt;&gt; +    static RefPtr&lt;MediaSourcePrivateAVFObjC&gt; create(MediaPlayerPrivateMediaSourceAVFObjC*);
&gt; 
&gt; Can this return a std::unique_ptr&lt;&gt;?

No, this is a refcounted class.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:104
&gt;&gt; +    // FIXME: implement markEndOfStream()
&gt; 
&gt; Nit: bug number?

Added. &lt;http://webkit.org/b/125159&gt;

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:110
&gt;&gt; +    // FIXME: implement unmarkEndOfStream()
&gt; 
&gt; Ditto.

Ditto.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:57
&gt;&gt; +class SourceBufferPrivateAVFObjC : public SourceBufferPrivate {
&gt; 
&gt; Can this be marked FINAL?

Sure.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:107
&gt;&gt; +    Vector&lt;RefPtr&lt;AudioTrackPrivate&gt;&gt; m_audioTracks;
&gt; 
&gt; Nit: ordering these by size may make the object slightly smaller.

Ordered.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:246
&gt;&gt; +class MediaDescriptionAVFObjC : public MediaDescription {
&gt; 
&gt; FINAL?

Sure.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:265
&gt;&gt; +            FourCharCode codec = CMFormatDescriptionGetMediaSubType(description);
&gt; 
&gt; Wow, FourCharCode!

I no rite!?

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:266
&gt;&gt; +            m_codec = AtomicString(reinterpret_cast&lt;LChar*&gt;(&amp;codec), 4);
&gt; 
&gt; What will happen on a Big Endian machine ;-O

It&apos;ll get the 4CC backward. But it will at least be /consistently/ wrong. :)

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:301
&gt;&gt; +}
&gt; 
&gt; Is there any chance the parser delegate will be called (eg. on another queue/thread) after this? IOW, should WebAVStreamDataParserListener an explicit &quot;disconnect&quot;?

No, the parser is not threaded.  It&apos;s delegate methods will explicitly only be called from within appendStreamData:.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:306
&gt;&gt; +
&gt; 
&gt; Nit: you can skip a lot of unnecessary work by returning immediately if m_client is NULL.

Good point.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:307
&gt;&gt; +    m_asset = asset;
&gt; 
&gt; Nit: why retain the asset?

I&apos;ll use it later. :)

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:325
&gt;&gt; +        // FIXME: Add TextTrack support
&gt; 
&gt; Nit: bug number?

Added. &lt;http://webkit.org/b/125161&gt;

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:350
&gt;&gt; +    ProcessCodedFrameInfo* info = (ProcessCodedFrameInfo*)refcon;
&gt; 
&gt; Nit: C-style cast?

I&apos;ll turn this into a static_cast.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:374
&gt;&gt; +    notImplemented();
&gt; 
&gt; Nit: bug number?

There may be nothing to do here. The &quot;End of stream&quot; algorithm is only for decode errors, not for when the end of a stream (or track) is reached.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:483
&gt;&gt; +    for (CFIndex i = 0; i &lt; CFArrayGetCount(attachmentsArray); ++i) {
&gt; 
&gt; Nit: the attachments array won&apos;t change size, so you can set a local variable in the init-expression.

Ok.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:505
&gt;&gt; +            return;
&gt; 
&gt; Can the vector have samples of different types? IOW, should this be &quot;continue&quot;?

No, in fact this may even be an ASSERT situation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956421</commentid>
    <comment_count>13</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-12-04 09:58:43 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 218240 [details])
&gt; Attachment 218240 [details] did not pass efl-wk2-ews (efl-wk2):
&gt; Output: http://webkit-queues.appspot.com/results/42828083

The EFL error:

Last 500 characters of output:
Core/CMakeFiles/WebCore.dir/__/__/DerivedSources/WebCore/JSHTMLElementWrapperFactory.cpp.o
c++: internal compiler error: Killed (program cc1plus)

I don&apos;t think this build error has anything to do with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>957401</commentid>
    <comment_count>14</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-12-06 14:41:12 -0800</bug_when>
    <thetext>Committed r160251: &lt;http://trac.webkit.org/changeset/160251&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217110</attachid>
            <date>2013-11-15 17:43:02 -0800</date>
            <delta_ts>2013-12-02 15:27:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-123378-20131115174300.patch</filename>
            <type>text/plain</type>
            <size>106767</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5MzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODI0MmY4MTM5ZTQ5YWQ5
OTA2NjllNzA4YzQyMGY4N2Q3YmE2ODUwZC4uMWM1M2YyMWI3YWIzZjcyNDE0MDgyNGM3YzdmNDc2
NTEyMDI0OTE1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE3OCBAQAogMjAxMy0xMS0xNSAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAorICAgICAgICBbTVNFXVtNYWNdIEFkZCBh
IG5ldyBNU0UtY29tcGF0aWJsZSBNZWRpYVBsYXllclByaXZhdGUgaW1wbGVtZW50YXRpb24sIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMzc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIEFWRm91bmRhdGlvbiBpbXBsZW1lbnRh
dGlvbiBvZiBNZWRpYVBsYXllclByaXZhdGUgd2hpY2ggY3JlYXRlcyBhbmQgdXNlcworICAgICAg
ICBNZWRpYVNvdXJjZVByaXZhdGUgYW5kIFNvdXJjZUJ1ZmZlclByaXZhdGUgc3ViY2xhc3Nlcy4K
KworICAgICAgICBBZGQgdGhlIG5ldyBtZWRpYSBlbmdpbmUgdG8gdGhlIGxpc3Qgb2YgaW5zdGFs
bGVkIGVuZ2luZXM6CisgICAgICAgICogcGxhdGZvcm0vTWVkaWFTYW1wbGUuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpp
bnN0YWxsZWRNZWRpYUVuZ2luZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmg6CisKKyAgICAgICAgQWRkIHRoZSBuZXcgZmlsZXMgdG8gdGhlIHByb2plY3Q6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgIERy
aXZlIGJ5IGZpeCBmb3IgcG9ydHMgd2hvIGltcGxlbWVudCBzZWVrRG91YmxlKCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmg6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OnNlZWtXaXRoVG9sZXJhbmNlKToKKwor
ICAgICAgICBBZGQgbmV3IFZpZGVvIGFuZCBBdWRpb1RyYWNrUHJpdmF0ZSB0eXBlcyB3aGljaCBo
YW5kbGUgdGhlaXIgb3duIGVuYWJsZSBzdGF0ZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9BdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5j
cHA6IEFkZGVkCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6QXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnJlc2V0UHJvcGVy
dGllc0Zyb21UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6c2V0QXNzZXRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1Ry
YWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6YXNzZXRUcmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0RW5hYmxlZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQXVkaW9UcmFja1By
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDogQWRkZWQKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9WaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakM6OlZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpyZXNldFBy
b3BlcnRpZXNGcm9tVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakM6OnNldEFzc2V0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Vmlk
ZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmFzc2V0VHJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldFNlbGVjdGVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9WaWRlb1Ry
YWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOiBBZGRlZC4KKworICAgICAgICBBZGQgYSBu
ZXcgTWVkaWFQbGF5ZXJQcml2YXRlIHdoaWNoIGNhbiBoYW5kbGUgTWVkaWFTb3VyY2Ugb2JqZWN0
czoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQzo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qzo6fk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnJlZ2lzdGVyTWVkaWFF
bmdpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjppc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjptaW1lVHlw
ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpsb2FkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y2FuY2Vs
TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnByZXBhcmVUb1BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwbGF0Zm9ybU1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cGxhdGZvcm1MYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjpwbGF5SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBhdXNlSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwYXVzZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdXBw
b3J0c1NjYW5uaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6bmF0dXJhbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpoYXNWaWRlbyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6Omhhc0F1ZGlvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0Vmlz
aWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OmR1cmF0aW9uRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y3VycmVudFRpbWVEb3VibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdGFydFRpbWVEb3Vi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjppbml0aWFsVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtXaXRoVG9sZXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vla0ludGVybmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vl
a2luZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnNldFJhdGVEb3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpyZWFkeVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vla2Fi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjptYXhUaW1lU2Vla2FibGVEb3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjptaW5UaW1lU2Vla2FibGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpidWZmZXJlZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6
OmRpZExvYWRpbmdQcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBhaW50Q3VycmVudEZyYW1l
SW5Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6aGFzQXZhaWxhYmxlVmlkZW9GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN1cHBvcnRzQWNjZWxlcmF0ZWRS
ZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6Om1vdmllTG9hZFR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjpwcmVwYXJlRm9yUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6ZW5naW5lRGVzY3JpcHRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpsYW5ndWFnZU9m
UHJpbWFyeUF1ZGlvVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjpleHRyYU1lbW9yeUNvc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjplbnN1cmVMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmRlc3Ry
b3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OnVwZGF0ZUR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0UmVhZHlTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6
OnNldE5ldHdvcmtTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakM6OmFkZERpc3BsYXlMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnJlbW92ZURpc3BsYXlMYXllcik6
CisKKyAgICAgICAgQWRkIGEgbmV3IE1lZGlhU291cmNlUHJpdmF0ZSBpbXBsZW1lbnRhdGlvbjoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQzo6cGxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakM6OmFjdGl2ZVNvdXJjZUJ1ZmZlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW06IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6Ok1lZGlhU291
cmNlUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6fk1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6YWRkU291cmNlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6OnJlbW92ZVNvdXJjZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpkdXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzZXREdXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjptYXJrRW5kT2ZT
dHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6dW5t
YXJrRW5kT2ZTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZG
T2JqQzo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDOjpzZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakM6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRDaGFuZ2VBY3RpdmVTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDSGFzQXVkaW8pOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6aGFzQXVkaW8pOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQ0hhc1ZpZGVvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6Omhhc1ZpZGVvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6OnNlZWtUb1RpbWUpOgorCisg
ICAgICAgIEFkZCBhIG5ldyBTb3VyY2VCdWZmZXJQcml2YXRlIGltcGxlbWVudGF0aW9uOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tOiBBZGRlZC4KKyAgICAg
ICAgKC1bV2ViQVZTdHJlYW1EYXRhUGFyc2VyTGlzdGVuZXIgaW5pdFdpdGhQYXJzZXI6cGFyZW50
OldlYkNvcmU6Ol0pOgorICAgICAgICAoLVtXZWJBVlN0cmVhbURhdGFQYXJzZXJMaXN0ZW5lciBk
ZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkFWU3RyZWFtRGF0YVBhcnNlckxpc3RlbmVyIHN0cmVh
bURhdGFQYXJzZXI6ZGlkUGFyc2VTdHJlYW1EYXRhQXNBc3NldDpdKToKKyAgICAgICAgKC1bV2Vi
QVZTdHJlYW1EYXRhUGFyc2VyTGlzdGVuZXIgc3RyZWFtRGF0YVBhcnNlcjpkaWRGYWlsVG9QYXJz
ZVN0cmVhbURhdGFXaXRoRXJyb3I6XSk6CisgICAgICAgICgtW1dlYkFWU3RyZWFtRGF0YVBhcnNl
ckxpc3RlbmVyIHN0cmVhbURhdGFQYXJzZXI6ZGlkUHJvdmlkZU1lZGlhRGF0YTpmb3JUcmFja0lE
Om1lZGlhVHlwZTpmbGFnczpdKToKKyAgICAgICAgKC1bV2ViQVZTdHJlYW1EYXRhUGFyc2VyTGlz
dGVuZXIgc3RyZWFtRGF0YVBhcnNlcjpkaWRSZWFjaEVuZE9mVHJhY2tXaXRoVHJhY2tJRDptZWRp
YVR5cGU6XSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakM6On5NZWRpYVNhbXBsZUFWRk9i
akMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVBVkZPYmpDOjpNZWRpYVNhbXBsZUFW
Rk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVBVkZPYmpDOjpwbGF0Zm9ybVNh
bXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpDTVNhbXBsZUJ1ZmZlcklzUmFuZG9tQWNjZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlQVZGT2JqQzo6ZmxhZ3MpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFEZXNjcmlwdGlvbkFWRk9iakM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYURlc2NyaXB0aW9uQVZGT2JqQzo6fk1lZGlhRGVzY3JpcHRpb25BVkZPYmpDKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRGVzY3JpcHRpb25BVkZPYmpDOjpNZWRpYURlc2NyaXB0
aW9uQVZGT2JqQyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2Jq
Qzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
OjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQzo6flNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpkaWRQYXJzZVN0cmVhbURh
dGFBc0Fzc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
OjpkaWRGYWlsVG9QYXJzZVN0cmVhbURhdGFXaXRoRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6
Y2FsbFByb2Nlc3NDb2RlZEZyYW1lRm9yRWFjaFNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZGlkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNrSUQp
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnByb2Nlc3ND
b2RlZEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
OjpkaWRSZWFjaEVuZE9mVHJhY2tXaXRoVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpyZW1vdmVkRnJvbU1lZGlhU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpyZWFkeVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpldmljdENvZGVk
RnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpp
c0Z1bGwpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6Omhh
c1ZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpo
YXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6
dHJhY2tEaWRDaGFuZ2VFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU5vbkRpc3Bs
YXlpbmdDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
OjpmbHVzaEFuZEVucXVldWVOb25EaXNwbGF5aW5nU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZW5xdWV1ZVNhbXBsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6aXNSZWFkeUZvck1vcmVTYW1wbGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpzZXRBY3Rp
dmUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmZhc3RT
ZWVrVGltZUZvck1lZGlhVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQzo6c2Vla1RvVGltZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXRmb3Jt
Q2xvY2tDTS5oOgorCisgICAgICAgIEFkZCBhIFNPRlRfTElOS19DTEFTU19PUFRJT05BTCBtYWNy
bzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaDoKKworMjAxMy0xMS0xNSAg
SmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKwogICAgICAgICBbTVNFXSBTdXBwb3J0
IGZhc3RTZWVrKCkgaW4gTWVkaWFTb3VyY2UuCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ0MjIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCmluZGV4IDA2YzU1Y2RkNjMxN2UxYmUy
ZmZmMzUwNWU4MmY4MzMyZmJmNzc1ZGUuLmNmNmUwZjdkNmZlODkzYTA4NzNlODQzNGU0NDRjYTNl
ZTIyZWJmYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
U291cmNlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L1NvdXJjZUJ1ZmZlci5jcHAKQEAgLTk5MiwxMiArOTkyLDEyIEBAIHZvaWQgU291cmNlQnVmZmVy
Ojpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZVNhbXBsZShTb3VyY2VCdWZmZXJQcml2YXRl
KiwgUGFzCiAKIGJvb2wgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlSGFzQXVkaW8o
Y29uc3QgU291cmNlQnVmZmVyUHJpdmF0ZSopIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYXVkaW9U
cmFja3MtPmxlbmd0aCgpOworICAgIHJldHVybiBtX2F1ZGlvVHJhY2tzICYmIG1fYXVkaW9UcmFj
a3MtPmxlbmd0aCgpOwogfQogCiBib29sIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0
ZUhhc1ZpZGVvKGNvbnN0IFNvdXJjZUJ1ZmZlclByaXZhdGUqKSBjb25zdAogewotICAgIHJldHVy
biBtX3ZpZGVvVHJhY2tzLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gbV92aWRlb1RyYWNrcyAmJiBt
X3ZpZGVvVHJhY2tzLT5sZW5ndGgoKTsKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXI6OnZpZGVvVHJh
Y2tTZWxlY3RlZENoYW5nZWQoVmlkZW9UcmFjayogdHJhY2spCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzQ3NzhmMTM1NzhhMDE2
MDNlYjA3MTBjNTU2ZGQ2ODFkYzQzOGEyMS4uODM4ZTI0NWI3YjM4NGJhNDQxYjk4NmVhZDE5ZjEy
MjhlNjA2ZmI2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtNTMzMyw2ICs1MzMzLDggQEAKIAkJQ0Q0QUM1MkExNDk2QUU5QTAw
ODdDNEVGIC8qIENvbXBvc2l0ZS53YXYgaW4gQ29weSBBdWRpbyBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q0QUM1MjgxNDk2QUUyRjAwODdDNEVGIC8qIENv
bXBvc2l0ZS53YXYgKi87IH07CiAJCUNENTM5M0QzMTc1RTAxODYwMEMwNzEyMyAvKiBKU01lbW9y
eUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0Q1MzkzRDExNzVFMDE4NjAwQzA3MTIzIC8qIEpTTWVtb3J5SW5mby5jcHAgKi87IH07CiAJCUNE
NTM5M0Q0MTc1RTAxODYwMEMwNzEyMyAvKiBKU01lbW9yeUluZm8uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENTM5M0QyMTc1RTAxODYwMEMwNzEyMyAv
KiBKU01lbW9yeUluZm8uaCAqLzsgfTsKKwkJQ0Q1NEE3NjIxODBGOUY3MDAwQjA3NkM5IC8qIEF1
ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENTRBNzYwMTgwRjlGNzAwMEIwNzZDOSAvKiBB
dWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5jcHAgKi87IH07CisJCUNENTRBNzYz
MTgwRjlGNzAwMEIwNzZDOSAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q1NEE3NjEx
ODBGOUY3MDAwQjA3NkM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgg
Ki87IH07CiAJCUNENTRERTQ3MTc0NjhCNkYwMDVFNUIzNiAvKiBBdWRpb1Nlc3Npb25NYW5hZ2Vy
TWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
NTRERTQ1MTc0NjhCNkYwMDVFNUIzNiAvKiBBdWRpb1Nlc3Npb25NYW5hZ2VyTWFjLmNwcCAqLzsg
fTsKIAkJQ0Q1NERFNEIxNzQ2OUM2RDAwNUU1QjM2IC8qIEF1ZGlvU2Vzc2lvbk1hYy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDU0REU0OTE3NDY5
QzZEMDA1RTVCMzYgLyogQXVkaW9TZXNzaW9uTWFjLmNwcCAqLzsgfTsKIAkJQ0Q2MUZFNjcxNzk0
QUFEQjAwNDEwMUVCIC8qIE1lZGlhU291cmNlUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFBOTQyRTExNUI1Q0UyMjAwRDUyNUQxIC8q
IE1lZGlhU291cmNlUmVnaXN0cnkuY3BwICovOyB9OwpAQCAtNTM0OCw2ICs1MzUwLDggQEAKIAkJ
Q0Q4MjAzMEQxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0Nv
bnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRDgyMDMwOTEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93
Q29udHJvbGxlci5tbSAqLzsgfTsKIAkJQ0Q4MjAzMTAxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldp
bmRvd0FuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0Q4MjAzMEUxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEODIwMzEx
MTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5kb3dBbmltYXRpb24ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDgyMDMwRjEzOTVBQ0U3MDBGOTU2QzYg
LyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovOyB9OworCQlDRDhCNUE0MjE4MEQxNDlBMDA4QjhF
NjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QjVBNDAxODBEMTQ5QTAwOEI4
RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmNwcCAqLzsgfTsKKwkJ
Q0Q4QjVBNDMxODBEMTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RDhCNUE0MTE4MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMuaCAqLzsgfTsKIAkJQ0Q4QjVBNDYxODBERkY0RTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tN
ZWRpYVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0Q4QjVBNDUxODBERkY0RTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tNZWRpYVNvdXJjZS5oICov
OyB9OwogCQlDRDhCNUE0OTE4MEUxMzhCMDA4QjhFNjUgLyogVGV4dFRyYWNrTWVkaWFTb3VyY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEOEI1QTQ4
MTgwRTEzOEIwMDhCOEU2NSAvKiBUZXh0VHJhY2tNZWRpYVNvdXJjZS5oICovOyB9OwogCQlDRDhC
NUE0QzE4MEUxN0MwMDA4QjhFNjUgLyogQXVkaW9UcmFja01lZGlhU291cmNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhCNUE0QjE4MEUxN0MwMDA4
QjhFNjUgLyogQXVkaW9UcmFja01lZGlhU291cmNlLmggKi87IH07CkBAIC01MzkwLDYgKzUzOTQs
MTIgQEAKIAkJQ0RDNjlERDcxNjMyMDI2QzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2Fy
bmluZ1ZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREM2OURENTE2MzIwMjZDMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmll
dy5tbSAqLzsgfTsKIAkJQ0RDNjlEREExNjM3MUZENDAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2Ny
ZWVuUGxhY2Vob2xkZXJWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDREM2OUREODE2MzcxRkQzMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5Q
bGFjZWhvbGRlclZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlDREM2OUREQjE2MzcxRkQ0MDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5Q
bGFjZWhvbGRlclZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREM2OUREOTE2MzcxRkQzMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFj
ZWhvbGRlclZpZXcubW0gKi87IH07CisJCUNEQzhCNUEyMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM4QjVBMDE4MDQ2MzQ3MDAxNkU2ODUgLyogTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tICovOyB9OworCQlDREM4QjVBMzE4
MDQ2MzQ3MDAxNkU2ODUgLyogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM4QjVBMTE4
MDQ2MzQ3MDAxNkU2ODUgLyogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgg
Ki87IH07CisJCUNEQzhCNUE2MTgwNDc0RjcwMDE2RTY4NSAvKiBNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RDOEI1QTQxODA0NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0g
Ki87IH07CisJCUNEQzhCNUE3MTgwNDc0RjcwMDE2RTY4NSAvKiBNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REM4QjVBNTE4MDQ3NEY3MDAxNkU2ODUgLyogTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5oICov
OyB9OworCQlDREM4QjVBQTE4MDQ3RkYxMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REM4QjVBODE4MDQ3RkYxMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0g
Ki87IH07CisJCUNEQzhCNUFCMTgwNDdGRjEwMDE2RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRl
QVZGT2JqQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RDOEI1QTkxODA0N0ZGMTAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgg
Ki87IH07CiAJCUNEQzhCNUFEMTgwNEFFNUQwMDE2RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRl
Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REM4QjVBQzE4MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oICov
OyB9OwogCQlDREQ1MjVENzE0NUI2REQwMDA4RDIwNEQgLyogSlNIVE1MTWVkaWFFbGVtZW50Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
RjY1Q0NDMTQ1QjZBRkUwMEM0QzdBQSAvKiBKU0hUTUxNZWRpYUVsZW1lbnRDdXN0b20uY3BwICov
OyB9OwogCQlDREQ3MDg5NjE4MzU5RjZGMDAyQjNEQzYgLyogU2FtcGxlTWFwLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERDcwODk0MTgzNTlGNkUw
MDJCM0RDNiAvKiBTYW1wbGVNYXAuY3BwICovOyB9OwpAQCAtMTIzODEsNiArMTIzOTEsOCBAQAog
CQlDRDUzOTNEMTE3NUUwMTg2MDBDMDcxMjMgLyogSlNNZW1vcnlJbmZvLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVtb3J5SW5mby5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUNENTM5M0QyMTc1RTAxODYwMEMwNzEyMyAvKiBKU01lbW9yeUlu
Zm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZW1vcnlJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENTRBNzVFMTgwRjUzNTAwMEIwNzZDOSAvKiBN
ZWRpYVNvdXJjZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVk
aWFTb3VyY2VQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNENTRBNzYw
MTgwRjlGNzAwMEIwNzZDOSAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBdWRpb1RyYWNrUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQy5jcHA7IHBhdGggPSBvYmpjL0F1ZGlvVHJhY2tQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q1NEE3
NjExODBGOUY3MDAwQjA3NkM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEF1ZGlvVHJhY2tQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLmg7IHBhdGggPSBvYmpjL0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENTRERTQ1MTc0NjhC
NkYwMDVFNUIzNiAvKiBBdWRpb1Nlc3Npb25NYW5hZ2VyTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvU2Vzc2lvbk1hbmFnZXJNYWMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDRDU0REU0OTE3NDY5QzZEMDA1RTVCMzYgLyogQXVkaW9T
ZXNzaW9uTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlv
U2Vzc2lvbk1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENjQxRUIxMTgx
OEY1RUQwMEVFNEM0MSAvKiBNZWRpYVNvdXJjZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWVkaWFTb3VyY2VQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMjM5Niw2ICsxMjQwOCw4IEBACiAJCUNEODIwMzA5MTM5NUFCNkEwMEY5NTZD
NiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93
Q29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q4MjAzMEUxMzk1
QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJXaW5kb3dBbmltYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQ0Q4MjAzMEYxMzk1QUNFNzAwRjk1NkM2IC8qIFdlYldpbmRvd0FuaW1hdGlvbi5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYldpbmRvd0FuaW1h
dGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q4QjVBNDAxODBEMTQ5QTAw
OEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDLmNwcDsgcGF0aCA9IG9iamMvVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDhCNUE0MTE4MEQxNDlB
MDA4QjhFNjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMuaDsgcGF0aCA9IG9iamMvVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q4QjVBNDQxODBERDhENjAwOEI4RTY1
IC8qIFZpZGVvVHJhY2tNZWRpYVNvdXJjZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVmlkZW9UcmFja01lZGlhU291cmNl
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q4QjVBNDUxODBERkY0RTAwOEI4
RTY1IC8qIFZpZGVvVHJhY2tNZWRpYVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWaWRlb1RyYWNrTWVkaWFTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQ0Q4QjVBNDcxODBFMTM2MTAwOEI4RTY1IC8qIFRleHRUcmFja01lZGlhU291cmNlLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBUZXh0VHJhY2tNZWRpYVNvdXJjZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMjQ2OCw2ICsxMjQ4MiwxMiBAQAogCQlDREM2OURENTE2MzIwMjZDMDA3QzM4REYg
LyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzY5REQ4MTYzNzFGRDMwMDdDMzhERiAvKiBXZWJD
b3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDREM2OUREOTE2MzcxRkQzMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxT
Y3JlZW5QbGFjZWhvbGRlclZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDOEI1QTAxODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbTsgcGF0
aCA9IG9iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDREM4QjVBMTE4MDQ2MzQ3MDAxNkU2ODUgLyogTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBwYXRoID0g
b2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDOEI1QTQxODA0NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291cmNl
UHJpdmF0ZUFWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLm1tOyBwYXRoID0gb2JqYy9NZWRpYVNvdXJjZVBy
aXZhdGVBVkZPYmpDLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREM4QjVBNTE4
MDQ3NEY3MDAxNkU2ODUgLyogTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLmg7IHBhdGgg
PSBvYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0RDOEI1QTgxODA0N0ZGMTAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gU291cmNl
QnVmZmVyUHJpdmF0ZUFWRk9iakMubW07IHBhdGggPSBvYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREM4QjVBOTE4MDQ3RkYx
MDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaDsgcGF0aCA9IG9i
amMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQ0RDOEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlQnVmZmVyUHJpdmF0
ZUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRENFNUNEMDE0NjMzQkM5
MDBENDdDQ0EgLyogRXZlbnRUYXJnZXRGYWN0b3J5LmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IEV2ZW50VGFyZ2V0RmFjdG9yeS5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RE
MUU1MjUxNjdCQTU2NDAwQ0U4MjBCIC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRUcmFja1JlcHJlc2VudGF0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDM0NCwyMCArMjAzNjQsMzAgQEAKIAkJREY5
QUZENkYxM0ZDMzFCMDAwMTVGRUI3IC8qIG9iamMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAotCQkJCUNEMzM2RjVGMTdGOUY2NDcwMERERENEMCAvKiBBVlRyYWNr
UHJpdmF0ZUFWRk9iakNJbXBsLm1tICovLAotCQkJCUNEMzM2RjYwMTdGOUY2NDcwMERERENEMCAv
KiBBVlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsLmggKi8sCi0JCQkJQ0RFM0E4NTUxN0Y2MDIwNDAw
QzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5tbSAqLywKIAkJCQlDREUzQTg1NjE3
RjYwMjA0MDBDNUJFMjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLmggKi8sCisJCQkJQ0RF
M0E4NTUxN0Y2MDIwNDAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5tbSAqLywK
KwkJCQlDRDU0QTc2MDE4MEY5RjcwMDBCMDc2QzkgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakMuY3BwICovLAorCQkJCUNENTRBNzYxMTgwRjlGNzAwMEIwNzZDOSAvKiBBdWRp
b1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oICovLAorCQkJCUNEMzM2RjYwMTdGOUY2
NDcwMERERENEMCAvKiBBVlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsLmggKi8sCisJCQkJQ0QzMzZG
NUYxN0Y5RjY0NzAwREREQ0QwIC8qIEFWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGwubW0gKi8sCiAJ
CQkJMDdBQTZCNjkxNjZEMDE5NTAwRDQ1NjcxIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZP
YmpDLmggKi8sCiAJCQkJMDdBQTZCNkExNjZEMDE5NTAwRDQ1NjcxIC8qIEluYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkZPYmpDLm1tICovLAogCQkJCTA3MzY3REREMTcyQ0E2N0YwMEQ4NjFCOSAvKiBJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlTGVnYWN5QVZGT2JqQy5oICovLAogCQkJCTA3MzY3RERFMTcy
Q0E2N0YwMEQ4NjFCOSAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlTGVnYWN5QVZGT2JqQy5tbSAq
LywKIAkJCQlERjlBRkQ3MDEzRkMzMUQ4MDAxNUZFQjcgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQy5oICovLAogCQkJCURGOUFGRDcxMTNGQzMxRDgwMDE1RkVCNyAvKiBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tICovLAotCQkJCUNEN0UwNTIwMTY1MUE4
NDEwMEMxMjAxRiAvKiBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIuaCAqLywKLQkJCQlDRDdFMDUy
MTE2NTFBODQxMDBDMTIwMUYgLyogV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLm1tICovLAorCQkJ
CUNEQzhCNUExMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMuaCAqLywKKwkJCQlDREM4QjVBMDE4MDQ2MzQ3MDAxNkU2ODUgLyogTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tICovLAorCQkJCUNEQzhCNUE1MTgwNDc0Rjcw
MDE2RTY4NSAvKiBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLmggKi8sCisJCQkJQ0RDOEI1QTQx
ODA0NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0gKi8sCisJCQkJ
Q0RDOEI1QTkxODA0N0ZGMTAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgg
Ki8sCisJCQkJQ0RDOEI1QTgxODA0N0ZGMTAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDLm1tICovLAogCQkJCUNEMzM2RjY1MTdGQTBBQzYwMERERENEMCAvKiBWaWRlb1RyYWNr
UHJpdmF0ZUFWRk9iakMuY3BwICovLAogCQkJCUNEMzM2RjY2MTdGQTBBQzYwMERERENEMCAvKiBW
aWRlb1RyYWNrUHJpdmF0ZUFWRk9iakMuaCAqLywKKwkJCQlDRDhCNUE0MDE4MEQxNDlBMDA4QjhF
NjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwICovLAorCQkJCUNE
OEI1QTQxMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQy5oICovLAorCQkJCUNEN0UwNTIwMTY1MUE4NDEwMEMxMjAxRiAvKiBXZWJDb3JlQVZGUmVz
b3VyY2VMb2FkZXIuaCAqLywKKwkJCQlDRDdFMDUyMTE2NTFBODQxMDBDMTIwMUYgLyogV2ViQ29y
ZUFWRlJlc291cmNlTG9hZGVyLm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSBvYmpjOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTIyNTc2LDYgKzIyNjA2LDcgQEAKIAkJCQk4NUJDQkMx
MzBBQkJBODdEMDAzODExNjAgLyogRE9NSFRNTERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NUU3MTFBNjBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTERvY3VtZW50SW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTg1REYyRUVEMEFBMzg3Q0IwMEFENjRDNSAvKiBET01IVE1MRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RDOEI1QTcxODA0NzRGNzAwMTZFNjg1IC8qIE1l
ZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RTcxMUE3MEFD
NUQ1MzUwMDUzMjcwRiAvKiBET01IVE1MRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NTQwNzU2QTBBRDZDQkY5MDA2MjBDNTcgLyogRE9NSFRNTEVtYmVkRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODU1MjQ3RDAwQUQ4NTBCODAwMTIwOTNCIC8qIERPTUhUTUxFbWJl
ZEVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjg0Myw2ICsyMjg3NCw3IEBA
CiAJCQkJODUwMzFCNDIwQTQ0RUZDNzAwRjk5MkUwIC8qIEV2ZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MTM4RDMzNTEyNDQwNTQ4MDAzMjNEMzMgLyogRXZlbnRDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDREFCNkQyOTE3QzdERTZDMDBDNjBCMzQgLyogTWVkaWFDb250cm9sc0hvc3Qu
aCBpbiBIZWFkZXJzICovLAorCQkJCUNEQzhCNUEzMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxOEEw
NkQwMTMzQzA0RDUwMENEMzc5QyAvKiBFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDNjBEOTBDMEQyQTE3Q0UwMEI5OTE4RiAvKiBFdmVudEV4Y2VwdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE2NjBBQzYxODI4Qzg2MDAwMDc0Q0FEIC8qIElEQkJhY2tpbmdTdG9yZUN1
cnNvckludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzgyMyw2ICsyMzg1NSw3IEBACiAJ
CQkJMDc4RTA5MTUxN0QxNEQxQzAwNDIwQUExIC8qIE1lZGlhU3RyZWFtLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwQzQ1MzQyODEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzdFRjYyRjQxMkY5REI3NDAwQzc3QkQyIC8qIEpTV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RDOEI1QUIxODA0
N0ZGMTAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMUMwRkYzRTBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRBbmltYXRpb25FdmVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTJFOEFFMzgxNkE0OTg0MDAwNkJCM0FBIC8qIEpTV2Vi
S2l0Q1NTRmlsdGVyUnVsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwNjAzNzUxNDMyODE5QzAw
QUJGNEJBIC8qIEpTV2ViS2l0Q1NTRmlsdGVyVmFsdWUuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ0
ODYsNiArMjQ1MTksNyBAQAogCQkJCUU0QUZEMDBDMERBRjMzNTQwMEY1RjU1QyAvKiBTTUlMVGlt
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRBRkQwMEUwREFGMzM1NTAwRjVGNTVDIC8qIFNNSUxU
aW1lQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFCQUUxQjEwM0MxOEZGMDA4QzUy
NjAgLyogU29ja2V0U3RyZWFtRXJyb3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUNENTRBNzYzMTgw
RjlGNzAwMEIwNzZDOSAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTEwRDRBMzQxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVh
bUVycm9yQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQkFFMUUxMDNDMTkxMzAwOEM1MjYw
IC8qIFNvY2tldFN0cmVhbUhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFENzE5QkUxODEx
MDZFMDAwMTZEQzUxIC8qIElEQkNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDU0Miw2
ICsyNDU3Niw3IEBACiAJCQkJMUEyRTZFNUEwQ0M1NTIxMzAwNEEyMDYyIC8qIFNRTFZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk2MzA4MjQ1RTU5MDAxRTlBQkMgLyogU1NMS2V5R2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdGQTYyRDBEMUYwRUZGMDBEQjIyQTkgLyog
U3RhdGljTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEOEI1QTQzMTgwRDE0OUEwMDhC
OEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTVBRkIzNTAxMTUxNTFBNzAwQjA0NUNCIC8qIFN0ZXBSYW5nZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUFDMkQ4NDUxNzE3MzRBMTAwNjUyRkMwIC8qIFN0b3JhZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxQkUzN0UwMERBRUUwMEUwMDEwODVGQyAvKiBTdG9yYWdlQXJlYS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNjExOSw2ICsyNjE1NCw3IEBACiAJCQkJQTdDRkIzRDEwQjdFRDEw
QTAwNzBDMzJEIC8qIERyYWdJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NGQjNENTBC
N0VEMTE4MDA3MEMzMkQgLyogRHJhZ0ltYWdlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk4
NzcwREIxMjQyQzUzNTAwMjIyNkJBIC8qIERyYXdpbmdCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQ0RDOEI1QTYxODA0NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9i
akMubW0gaW4gU291cmNlcyAqLywKIAkJCQk0OTg3NzE1MzEyNDNGOUZBMDAyMjI2QkEgLyogRHJh
d2luZ0J1ZmZlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3OEUwOTEyMTdEMTRDRUUwMDQy
MEFBMSAvKiBVc2VyTWVkaWFDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENkVE
MkM3MTM2QjhFNjYwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3IuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0yNjE1NCw2ICsyNjE5MCw3IEBACiAJCQkJMDc5NjlEQjkxN0QxNDE1MTAwN0ZGODQy
IC8qIEpTUlRDUGVlckNvbm5lY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTBGRUYzNzJC
MjdDNTNFQUMxQzFGQkVFIC8qIEV2ZW50U291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUx
MkVEQkVBMEIzMDhFMEIwMDI3MDRCNiAvKiBFdmVudFRhcmdldC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlDRDhCNUE0MjE4MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2MEQ4RjIwRDJBMTFFMDAwQjk5
MThGIC8qIEV4Y2VwdGlvbkJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTczREM2M0YxNDVB
OTQwOTAwMjg0MkMyIC8qIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBN0NBQ0RCMTEzQ0U4NzVDMDBCQkJFM0YgLyogRXhjZXB0aW9uQ29kZVBsYWNlaG9s
ZGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjYyNTAsNiArMjYyODcsNyBAQAogCQkJCUY1MDY2
NEY3MTU3RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MTRDNzY2RjBDRTkyM0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMDg1QjkyQkEwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlDREM4QjVBQTE4MDQ3RkYxMDAxNkU2ODUgLyogU291cmNlQnVm
ZmVyUHJpdmF0ZUFWRk9iakMubW0gaW4gU291cmNlcyAqLywKIAkJCQlBODEzNkQzOTA5NzNBOEU3
MDBENzQ0NjMgLyogRm9ybURhdGFMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFRTY4NDY2
MTJEMjZFMzgwMEU3OTQxNSAvKiBGb3JtRGF0YVN0cmVhbUNGTmV0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxNEM3NjRGMENFOTIzNEUwMDdFRjNDRCAvKiBGb3JtRGF0YVN0cmVhbU1hYy5tbSBp
biBTb3VyY2VzICovLApAQCAtMjY2NjksNiArMjY3MDcsNyBAQAogCQkJCTY1REYzMUY5MDlEMUND
NjAwMDBCRTMyNSAvKiBKU0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyRUQ1NTUw
QzZCOUJEMzAwOTIwQkZGIC8qIEpTRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2NURGMzIyRjA5RDFEREJDMDAwQkUzMjUgLyogSlNFbnRpdHkuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQ0Q1NEE3NjIxODBGOUY3MDAwQjA3NkM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjlCNzc0MEJBNUZEREMwMDg1
NDA2NCAvKiBKU0VudGl0eVJlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRUNGN0FE
QzEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUYzRDQ2MTQ4MTE2MUQ1MzIwMENBMEQwOSAvKiBKU0Vycm9ySGFuZGxlci5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI3OTUzLDYgKzI3OTkyLDcgQEAKIAkJCQlCMjIyN0E1NjBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg0QzY3ODRD
MTIxNDgxNDcwMEE5MjkwMiAvKiBTVkdQYXRoQmxlbmRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NDc2QzlFQTExREY2QTI5MDA1NTVCMDIgLyogU1ZHUGF0aEJ1aWxkZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQ0RDOEI1QTIxODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg0MTlEMkE4MTIwRDky
RDAwMDE0MUY4RiAvKiBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODQxOUQyQUMxMjBEOTJGQzAwMTQxRjhGIC8qIFNWR1BhdGhCeXRlU3RyZWFtU291cmNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTU4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQ
YXRoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL01lZGlhU2FtcGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNh
bXBsZS5oCmluZGV4IDEwOTZmYjdiN2RiMWU4NTk4MDhkYjE1ZGViZjA3NzBlZmJlNTNiNjQuLjc0
NGQzYzc5YWI5MWY2YmI2NTJjYjU0OWU1NzM4ZDVhOTViZWYxYzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTWVkaWFTYW1wbGUuaApAQCAtMzMsMTQgKzMzLDE3IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIE1vY2tTYW1wbGVCb3g7Cit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBs
ZUJ1ZmZlciAqQ01TYW1wbGVCdWZmZXJSZWY7CiAKIHN0cnVjdCBQbGF0Zm9ybVNhbXBsZSB7CiAg
ICAgZW51bSB7CiAgICAgICAgIE5vbmUsCiAgICAgICAgIE1vY2tTYW1wbGVCb3hUeXBlLAorICAg
ICAgICBDTVNhbXBsZUJ1ZmZlclR5cGUsCiAgICAgfSB0eXBlOwogICAgIHVuaW9uIHsKICAgICAg
ICAgTW9ja1NhbXBsZUJveCogbW9ja1NhbXBsZUJveDsKKyAgICAgICAgQ01TYW1wbGVCdWZmZXJS
ZWYgY21TYW1wbGVCdWZmZXI7CiAgICAgfSBzYW1wbGU7CiB9OwogCkBAIC01Niw2ICs1OSw3IEBA
IHB1YmxpYzoKICAgICBlbnVtIFNhbXBsZUZsYWdzIHsKICAgICAgICAgTm9uZSA9IDAsCiAgICAg
ICAgIElzU3luYyA9IDEgPDwgMCwKKyAgICAgICAgTm9uRGlzcGxheWluZyA9IDEgPDwgMSwKICAg
ICB9OwogICAgIHZpcnR1YWwgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9ybVNhbXBsZSgpID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAppbmRleCBjNDhmYjhhYzBm
MGQ0MDRhMjVkNDJiN2VkMjNhMDEyYjUzNWZkNTk4Li5iOWYyNmEyZmQ1NjFmZDIyOWEwNjI3YjQz
ODJlZWI2MjJjZjMxMWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9NZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXIuY3BwCkBAIC01Nyw2ICs1Nyw5IEBACiAjaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXQuaCIKICNpZiBVU0UoQVZGT1VOREFUSU9OKQogI2luY2x1ZGUgIk1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCIKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNF
KQorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIgorI2Vu
ZGlmCiAjZW5kaWYKICNlbGlmIE9TKFdJTkNFKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0
ZVdpbkNFLmgiCkBAIC0yMTMsNiArMjE2LDkgQEAgc3RhdGljIFZlY3RvcjxNZWRpYVBsYXllckZh
Y3RvcnkqPiYgaW5zdGFsbGVkTWVkaWFFbmdpbmVzKFJlcXVlcnlFbmdpbmVPcHRpb25zIHIKICAg
ICAgICAgaWYgKFNldHRpbmdzOjppc0FWRm91bmRhdGlvbkVuYWJsZWQoKSkgewogI2lmIFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQogICAgICAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7Cisj
aWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7Cisj
ZW5kaWYKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbkNGOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgK
aW5kZXggZjYzZWViMWQxOTAzZjI4NWM4ODVhMDJiNWNjMWE1ZTQ2MTFlMTk4Mi4uNzQ2NjQ4NTA3
NzA1NjAxZGY1N2EzNDY1M2I0YzgyZTkzMjdkNDc1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCkBAIC00Miw4ICs0Miw5IEBACiAjaW5jbHVk
ZSA8cnVudGltZS9VaW50OEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvTWVkaWFUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgogCkBAIC01NSw2ICs1Niw3IEBACiAjaW5jbHVkZSAiUGxhdGZv
cm1UZXh0VHJhY2tNZW51LmgiCiAjZW5kaWYKIAorT0JKQ19DTEFTUyBBVkFzc2V0OwogT0JKQ19D
TEFTUyBBVlBsYXllcjsKIE9CSkNfQ0xBU1MgUVRNb3ZpZTsKIApAQCAtODUsNyArODcsOCBAQCBz
dHJ1Y3QgUGxhdGZvcm1NZWRpYSB7CiAgICAgICAgIENocm9taXVtTWVkaWFQbGF5ZXJUeXBlLAog
ICAgICAgICBRdE1lZGlhUGxheWVyVHlwZSwKICAgICAgICAgQVZGb3VuZGF0aW9uTWVkaWFQbGF5
ZXJUeXBlLAotICAgICAgICBBVkZvdW5kYXRpb25DRk1lZGlhUGxheWVyVHlwZQorICAgICAgICBB
VkZvdW5kYXRpb25DRk1lZGlhUGxheWVyVHlwZSwKKyAgICAgICAgQVZGb3VuZGF0aW9uQXNzZXRU
eXBlLAogICAgIH0gdHlwZTsKIAogICAgIHVuaW9uIHsKQEAgLTk2LDYgKzk5LDcgQEAgc3RydWN0
IFBsYXRmb3JtTWVkaWEgewogICAgICAgICBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIHF0
TWVkaWFQbGF5ZXI7CiAgICAgICAgIEFWUGxheWVyKiBhdmZNZWRpYVBsYXllcjsKICAgICAgICAg
QVZDRlBsYXllciogYXZjZk1lZGlhUGxheWVyOworICAgICAgICBBVkFzc2V0KiBhdmZBc3NldDsK
ICAgICB9IG1lZGlhOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAppbmRleCA0Zjk4YjU2MWJhYTFkMjUzNWU2YjZi
NjViMWNhZjIyNzNlMzE1ODBiLi45MzI1NmJiZjM3N2UxY2QxNDAyYzFkYmJlMmUzZTg4YjkxNzcy
NTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllclByaXZhdGUuaApAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHZvaWQgc2VlayhmbG9hdCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNlZWtEb3VibGUoZG91Ymxl
IHRpbWUpIHsgc2Vlayh0aW1lKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZWVrV2l0aFRvbGVyYW5j
ZShkb3VibGUgdGltZSwgZG91YmxlLCBkb3VibGUpIHsgc2Vlayh0aW1lKTsgfQorICAgIHZpcnR1
YWwgdm9pZCBzZWVrV2l0aFRvbGVyYW5jZShkb3VibGUgdGltZSwgZG91YmxlLCBkb3VibGUpIHsg
c2Vla0RvdWJsZSh0aW1lKTsgfQogCiAgICAgdmlydHVhbCBib29sIHNlZWtpbmcoKSBjb25zdCA9
IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0F1ZGlvVHJh
Y2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZGQ1NzczMGQyYTRl
ODM5N2VjNDA2ZWIxZjE1NDJiMTg5OTJjZjllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQXVkaW9UcmFja1ByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMuaCIKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVOQUJMRShWSURFT19UUkFD
SykKKworI2luY2x1ZGUgIkFWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGwuaCIKKyNpbmNsdWRlICJT
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0F1
ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpBdWRpb1RyYWNrUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQyhBVkFzc2V0VHJhY2sqIHRyYWNrLCBTb3VyY2VCdWZmZXJQcml2YXRlQVZG
T2JqQyogcGFyZW50KQorICAgIDogbV9pbXBsKHN0ZDo6bWFrZV91bmlxdWU8QVZUcmFja1ByaXZh
dGVBVkZPYmpDSW1wbD4odHJhY2spKQorICAgICwgbV9wYXJlbnQocGFyZW50KQorICAgICwgbV90
cmFja0lEKC0xKQorICAgICwgbV9lbmFibGVkKGZhbHNlKQoreworICAgIHJlc2V0UHJvcGVydGll
c0Zyb21UcmFjaygpOworfQorCit2b2lkIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjpyZXNldFByb3BlcnRpZXNGcm9tVHJhY2soKQoreworICAgIG1fdHJhY2tJRCA9IG1faW1w
bC0+dHJhY2tJRCgpOworCisgICAgc2V0S2luZChtX2ltcGwtPmF1ZGlvS2luZCgpKTsKKyAgICBz
ZXRJZChtX2ltcGwtPmlkKCkpOworICAgIHNldExhYmVsKG1faW1wbC0+bGFiZWwoKSk7CisgICAg
c2V0TGFuZ3VhZ2UobV9pbXBsLT5sYW5ndWFnZSgpKTsKK30KKwordm9pZCBBdWRpb1RyYWNrUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0QXNzZXRUcmFjayhBVkFzc2V0VHJhY2sgKnRyYWNr
KQoreworICAgIG1faW1wbCA9IHN0ZDo6bWFrZV91bmlxdWU8QVZUcmFja1ByaXZhdGVBVkZPYmpD
SW1wbD4odHJhY2spOworICAgIHJlc2V0UHJvcGVydGllc0Zyb21UcmFjaygpOworfQorCitBVkFz
c2V0VHJhY2sqIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjphc3NldFRyYWNr
KCkKK3sKKyAgICByZXR1cm4gbV9pbXBsLT5hc3NldFRyYWNrKCk7Cit9CisKK2Jvb2wgQXVkaW9U
cmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmVuYWJsZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2VuYWJsZWQ7Cit9CisKK3ZvaWQgQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtX2VuYWJsZWQgPT0g
ZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9lbmFibGVkID0gZW5hYmxlZDsKKyAg
ICBtX3BhcmVudC0+dHJhY2tEaWRDaGFuZ2VFbmFibGVkKHRoaXMpOworfQorCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0F1ZGlvVHJhY2tQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRiNDY5ZTI2YmIyZjFmZWFhZmE3
N2MxYmRmNDFkYzhkODYwOWFkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQXVkaW9U
cmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakNfaAorI2RlZmluZSBBdWRpb1RyYWNrUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQ19oCisKKyNpbmNsdWRlICJBdWRpb1RyYWNrUHJpdmF0ZUFWRi5o
IgorCisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQorCitP
QkpDX0NMQVNTIEFWQXNzZXRUcmFjazsKK09CSkNfQ0xBU1MgQVZQbGF5ZXJJdGVtVHJhY2s7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbDsK
K2NsYXNzIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOworCitjbGFzcyBBdWRpb1RyYWNrUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQyBGSU5BTCA6IHB1YmxpYyBBdWRpb1RyYWNrUHJpdmF0ZUFW
RiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMpCitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQz4gY3JlYXRlKEFWQXNzZXRUcmFjayogdHJhY2ssIFNvdXJjZUJ1ZmZl
clByaXZhdGVBVkZPYmpDKiBwYXJlbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKHRyYWNrLCBwYXJlbnQpKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpIE9WRVJSSURFOworCisgICAgdm9pZCBzZXRB
c3NldFRyYWNrKEFWQXNzZXRUcmFjayopOworICAgIEFWQXNzZXRUcmFjayogYXNzZXRUcmFjaygp
OworCisgICAgaW50IHRyYWNrSUQoKSB7IHJldHVybiBtX3RyYWNrSUQ7IH0KKworcHJpdmF0ZToK
KyAgICBleHBsaWNpdCBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyhBVkFzc2V0
VHJhY2sqLCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyogcGFyZW50KTsKKyAgICAKKyAgICB2
b2lkIHJlc2V0UHJvcGVydGllc0Zyb21UcmFjaygpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEFW
VHJhY2tQcml2YXRlQVZGT2JqQ0ltcGw+IG1faW1wbDsKKyAgICBTb3VyY2VCdWZmZXJQcml2YXRl
QVZGT2JqQyogbV9wYXJlbnQ7CisgICAgaW50IG1fdHJhY2tJRDsKKyAgICBib29sIG1fZW5hYmxl
ZDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVOQUJMRShW
SURFT19UUkFDSykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjVkOTcxNmI5ZTE0OGNkYjU2ODQ5OWZiMjg0YjU4OTQyZjY1YzJlNTgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaApAQCAtMCwwICsxLDE2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakNfaAor
I2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakNfaAorCisjaWYgRU5B
QkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2luY2x1ZGUgIk1lZGlh
UGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaCIK
KyNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CisKK09CSkNfQ0xBU1MgQVZBc3NldDsKK09CSkNf
Q0xBU1MgQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI7CisKK3R5cGVkZWYgc3RydWN0IE9wYXF1
ZUNNVGltZWJhc2UqIENNVGltZWJhc2VSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgUGxhdGZvcm1DbG9ja0NNOworY2xhc3MgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzsKKwor
Y2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDIDogcHVibGljIE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDKE1lZGlhUGxheWVyKik7CisgICAgdmlydHVhbCB+TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKCk7CisKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rl
ck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKKworICAgIHZvaWQgYWRkRGlzcGxh
eUxheWVyKEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKik7CisgICAgdm9pZCByZW1vdmVEaXNw
bGF5TGF5ZXIoQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIqKTsKKworICAgIHZpcnR1YWwgTWVk
aWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUoKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOworICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShN
ZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7CisgICAgdm9pZCBzZXROZXR3b3JrU3RhdGUoTWVkaWFQ
bGF5ZXI6Ok5ldHdvcmtTdGF0ZSk7CisKKyAgICB2b2lkIHNlZWtJbnRlcm5hbChkb3VibGUsIGRv
dWJsZSwgZG91YmxlKTsKKyAgICB2b2lkIHNldExvYWRpbmdQcm9ncmVzc3NlZChib29sIGZsYWcp
IHsgbV9sb2FkaW5nUHJvZ3Jlc3NlZCA9IGZsYWc7IH0KKyAgICB2b2lkIHNldEhhc0F2YWlsYWJs
ZVZpZGVvRnJhbWUoYm9vbCBmbGFnKSB7IG1faGFzQXZhaWxhYmxlVmlkZW9GcmFtZSA9IGZsYWc7
IH0KKworcHJpdmF0ZToKKyAgICAvLyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiB1cmwsIFBhc3NSZWZQdHI8SFRNTE1lZGlhU291cmNl
PikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbExvYWQoKSBPVkVSUklERTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9QbGF5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQ
bGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEoKSBjb25zdCBPVkVSUklERTsKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKCkgY29uc3QgT1ZFUlJJREU7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBwbGF5
KCkgT1ZFUlJJREU7CisgICAgdm9pZCBwbGF5SW50ZXJuYWwoKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBwYXVzZSgpIE9WRVJSSURFOworICAgIHZvaWQgcGF1c2VJbnRlcm5hbCgpOworCisgICAgdmly
dHVhbCBib29sIHBhdXNlZCgpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzU2Nhbm5pbmcoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgSW50U2l6ZSBu
YXR1cmFsU2l6ZSgpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIGhhc1ZpZGVv
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGhhc0F1ZGlvKCkgY29uc3QgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShib29sKSBPVkVSUklERTsKKwor
ICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uRG91YmxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBkb3VibGUgY3VycmVudFRpbWVEb3VibGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIGRvdWJsZSBzdGFydFRpbWVEb3VibGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGRvdWJsZSBpbml0aWFsVGltZSgpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCB2
b2lkIHNlZWtXaXRoVG9sZXJhbmNlKGRvdWJsZSB0aW1lLCBkb3VibGUgbmVnYXRpdmVUaHJlc2hv
bGQsIGRvdWJsZSBwb3NpdGl2ZVRocmVzaG9sZCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29s
IHNlZWtpbmcoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmF0ZURvdWJs
ZShkb3VibGUpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+
IHNlZWthYmxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBkb3VibGUgbWF4VGltZVNl
ZWthYmxlRG91YmxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBkb3VibGUgbWluVGlt
ZVNlZWthYmxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRpbWVS
YW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgZGlk
TG9hZGluZ1Byb2dyZXNzKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
U2l6ZShjb25zdCBJbnRTaXplJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQXZhaWxhYmxlVmlkZW9G
cmFtZSgpIGNvbnN0IE9WRVJSSURFOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgLy8gY2FsbGVkIHdoZW4gdGhlIHJlbmRlcmluZyBzeXN0ZW0gZmxpcHMg
dGhlIGludG8gb3Igb3V0IG9mIGFjY2VsZXJhdGVkIHJlbmRlcmluZyBtb2RlLgorICAgIHZpcnR1
YWwgdm9pZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpIE9WRVJSSURFOworI2Vu
ZGlmCisKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIG1vdmllTG9hZFR5
cGUoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yUmVuZGVy
aW5nKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBlbmdpbmVEZXNjcmlwdGlvbigp
IGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCBTdHJpbmcgbGFuZ3VhZ2VPZlByaW1hcnlB
dWRpb1RyYWNrKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHNpemVfdCBleHRyYU1l
bW9yeUNvc3QoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZvaWQgZW5zdXJlTGF5ZXIoKTsKKyAg
ICB2b2lkIGRlc3Ryb3lMYXllcigpOworICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCk7CisKKyAg
ICAvLyBNZWRpYVBsYXllciBGYWN0b3J5IE1ldGhvZHMKKyAgICBzdGF0aWMgUGFzc093blB0cjxN
ZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IGNyZWF0ZShNZWRpYVBsYXllciopOworICAgIHN0
YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlw
ZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcyk7CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBw
b3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMm
KTsKKworICAgIGZyaWVuZCBjbGFzcyBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOworCisgICAg
TWVkaWFQbGF5ZXIqIG1fcGxheWVyOworICAgIFJlZlB0cjxIVE1MTWVkaWFTb3VyY2U+IG1fbWVk
aWFTb3VyY2U7CisgICAgUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM+IG1fbWVkaWFT
b3VyY2VQcml2YXRlOworICAgIFJldGFpblB0cjxBVkFzc2V0PiBtX2Fzc2V0OworICAgIFJldGFp
blB0cjxBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcj4gbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5
ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ2xvY2tDTT4gbV9jbG9jazsKKyAgICBN
ZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOworICAgIE1lZGlhUGxheWVy
OjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKKyAgICBib29sIG1fc2Vla2luZzsKKyAgICBtdXRh
YmxlIGJvb2wgbV9sb2FkaW5nUHJvZ3Jlc3NlZDsKKyAgICBib29sIG1faGFzQXZhaWxhYmxlVmlk
ZW9GcmFtZTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVT
RShBVkZPVU5EQVRJT04pCisKKyNlbmRpZiAvLyBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakNfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzgwMmVi
ZjExODNlM2RhNGJkZWY4ZTc4MTlkYzI2MjUxOWZjYWUxNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQpAQCAtMCwwICsxLDQ0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmgiCisKKyNpbXBvcnQgIkhUTUxNZWRpYVNvdXJjZS5oIgorI2ltcG9ydCAi
TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5oIgorI2ltcG9ydCAiUGxhdGZvcm1DbG9ja0NNLmgi
CisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWU2FtcGxl
QnVmZmVyRGlzcGxheUxheWVyLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBc3NldC5oPgor
I2ltcG9ydCA8Q29yZU1lZGlhL0NNU3luYy5oPgorI2ltcG9ydCA8b2JqY19ydW50aW1lLmg+Cisj
aW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBvcnQgPHd0Zi9GdW5jdGlvbmFsLmg+
CisjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBt
YXJrIFNvZnQgTGlua2luZworCitTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWRm91bmRh
dGlvbikKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQ29yZU1lZGlhKQorCitTT0ZUX0xJ
TktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVkFzc2V0KQorU09GVF9MSU5LX0NMQVNT
X09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZVUkxBc3NldCkKK1NPRlRfTElOS19DTEFTU19PUFRJ
T05BTChBVkZvdW5kYXRpb24sIEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKQorU09GVF9MSU5L
X0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZTdHJlYW1EYXRhUGFyc2VyKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDCisKK01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKE1lZGlhUGxh
eWVyKiBwbGF5ZXIpCisgICAgOiBtX3BsYXllcihwbGF5ZXIpCisgICAgLCBtX2Nsb2NrKG5ldyBQ
bGF0Zm9ybUNsb2NrQ00oKSkKKyAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpFbXB0
eSkKKyAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCisgICAgLCBt
X3NlZWtpbmcoZmFsc2UpCisgICAgLCBtX2xvYWRpbmdQcm9ncmVzc2VkKGZhbHNlKQoreworfQor
CitNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6On5NZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMoKQoreworfQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBt
YXJrIE1lZGlhUGxheWVyIEZhY3RvcnkgTWV0aG9kcworCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQzo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lz
dHJhciByZWdpc3RyYXIpCit7CisgICAgaWYgKGlzQXZhaWxhYmxlKCkpCisgICAgICAgIHJlZ2lz
dHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUsIDAsIDAsIDApOwor
fQorCitQYXNzT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4gTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKK3sK
KyAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQyhwbGF5ZXIpKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OmlzQXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4gQVZGb3VuZGF0aW9uTGlicmFyeSgp
ICYmIENvcmVNZWRpYUxpYnJhcnkoKSAmJiBnZXRBVlN0cmVhbURhdGFQYXJzZXJDbGFzcygpOwor
fQorCitzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQoreworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdHJpbmc+LCBjYWNoZSwgKCkpOworICAgIHN0YXRpYyBi
b29sIHR5cGVMaXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIGlmICh0eXBlTGlzdEluaXRp
YWxpemVkKQorICAgICAgICByZXR1cm4gY2FjaGU7CisgICAgdHlwZUxpc3RJbml0aWFsaXplZCA9
IHRydWU7CisKKyAgICBOU0FycmF5ICp0eXBlcyA9IFtnZXRBVlVSTEFzc2V0Q2xhc3MoKSBhdWRp
b3Zpc3VhbE1JTUVUeXBlc107CisgICAgZm9yIChOU1N0cmluZyAqbWltZVR5cGUgaW4gdHlwZXMp
CisgICAgICAgIGNhY2hlLmFkZChtaW1lVHlwZSk7CisgICAgCisgICAgcmV0dXJuIGNhY2hlOwor
fSAKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmdldFN1cHBv
cnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCit7CisgICAgdHlwZXMgPSBtaW1lVHlw
ZUNhY2hlKCk7Cit9CisKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBw
b3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICAvLyBUaGlzIGVuZ2luZSBkb2VzIG5v
dCBzdXBwb3J0IG5vbi1tZWRpYS1zb3VyY2Ugc291cmNlcy4KKyAgICBpZiAoIXBhcmFtZXRlcnMu
aXNNZWRpYVNvdXJjZSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRl
ZDsKKworICAgIGlmICghbWltZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMudHlwZSkp
CisgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAvLyBU
aGUgc3BlYyBzYXlzOgorICAgIC8vICJJbXBsZW1lbnRvcnMgYXJlIGVuY291cmFnZWQgdG8gcmV0
dXJuICJtYXliZSIgdW5sZXNzIHRoZSB0eXBlIGNhbiBiZSBjb25maWRlbnRseSBlc3RhYmxpc2hl
ZCBhcyBiZWluZyBzdXBwb3J0ZWQgb3Igbm90LiIKKyAgICBpZiAocGFyYW1ldGVycy5jb2RlY3Mu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkOwor
CisgICAgTlNTdHJpbmcgKnR5cGVTdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IiVAOyBjb2RlY3M9XCIlQFwiIiwgKE5TU3RyaW5nICopcGFyYW1ldGVycy50eXBlLCAoTlNTdHJp
bmcgKilwYXJhbWV0ZXJzLmNvZGVjc107CisgICAgcmV0dXJuIFtnZXRBVlVSTEFzc2V0Q2xhc3Mo
KSBpc1BsYXlhYmxlRXh0ZW5kZWRNSU1FVHlwZTp0eXBlU3RyaW5nXSA/IE1lZGlhUGxheWVyOjpJ
c1N1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZDs7Cit9CisKKyNwcmFnbWEg
bWFyayAtCisjcHJhZ21hIG1hcmsgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIE92ZXJyaWRl
cworCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bG9hZChjb25z
dCBTdHJpbmcmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bG9hZChjb25zdCBTdHJpbmcmIHVybCwg
UGFzc1JlZlB0cjxIVE1MTWVkaWFTb3VyY2U+IHNvdXJjZSkKK3sKKyAgICBVTlVTRURfUEFSQU0o
dXJsKTsKKworICAgIG1fbWVkaWFTb3VyY2UgPSBzb3VyY2U7CisgICAgbV9tZWRpYVNvdXJjZVBy
aXZhdGUgPSBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpjcmVhdGUodGhpcyk7CisKKyAgICBt
X21lZGlhU291cmNlLT5zZXRQcml2YXRlQW5kT3BlbigqbV9tZWRpYVNvdXJjZVByaXZhdGUpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y2FuY2VsTG9h
ZCgpCit7CisKK30KKworCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qzo6cHJlcGFyZVRvUGxheSgpCit7CisKK30KKworUGxhdGZvcm1NZWRpYSBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBsYXRmb3JtTWVkaWEoKSBjb25zdAoreworICAgIFBs
YXRmb3JtTWVkaWEgcG07CisgICAgcG0udHlwZSA9IFBsYXRmb3JtTWVkaWE6OkFWRm91bmRhdGlv
bkFzc2V0VHlwZTsKKyAgICBwbS5tZWRpYS5hdmZBc3NldCA9IG1fYXNzZXQuZ2V0KCk7CisgICAg
cmV0dXJuIHBtOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorUGxhdGZv
cm1MYXllciogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwbGF0Zm9ybUxh
eWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuZ2V0
KCk7Cit9CisjZW5kaWYKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akM6OnBsYXkoKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQoV1RGOjpiaW5kKCZNZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBsYXlJbnRlcm5hbCwgdGhpcykpOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cGxheUludGVybmFsKCkK
K3sKKyAgICBtX2Nsb2NrLT5zdGFydCgpOworICAgIG1fcGxheWVyLT5yYXRlQ2hhbmdlZCgpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cGF1c2UoKQor
eworICAgIGNhbGxPbk1haW5UaHJlYWQoV1RGOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakM6OnBhdXNlSW50ZXJuYWwsIHRoaXMpKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBhdXNlSW50ZXJuYWwoKQoreworICAgIG1f
Y2xvY2stPnN0b3AoKTsKKyAgICBtX3BsYXllci0+cmF0ZUNoYW5nZWQoKTsKK30KKworYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBhdXNlZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICFtX2Nsb2NrLT5pc1J1bm5pbmcoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN1cHBvcnRzU2Nhbm5pbmcoKSBjb25zdAoreworICAg
IHJldHVybiB0cnVlOworfQorCitJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6bmF0dXJhbFNpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKCk7Cit9
CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpoYXNWaWRlbygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFTb3VyY2VQcml2YXRlLT5oYXNWaWRlbygpOwor
fQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6aGFzQXVkaW8o
KSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhU291cmNlUHJpdmF0ZS0+aGFzQXVkaW8oKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldFZpc2li
bGUoYm9vbCkKK3sKKyAgICAvLyBOby1vcC4KK30KKworZG91YmxlIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQzo6ZHVyYXRpb25Eb3VibGUoKSBjb25zdAoreworICAgIHJldHVy
biBtX21lZGlhU291cmNlLT5kdXJhdGlvbigpOworfQorCitkb3VibGUgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjdXJyZW50VGltZURvdWJsZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fY2xvY2stPmN1cnJlbnRUaW1lKCk7Cit9CisKK2RvdWJsZSBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN0YXJ0VGltZURvdWJsZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIDA7Cit9CisKK2RvdWJsZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akM6OmluaXRpYWxUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtXaXRoVG9sZXJhbmNlKGRvdWJs
ZSB0aW1lLCBkb3VibGUgbmVnYXRpdmVUaHJlc2hvbGQsIGRvdWJsZSBwb3NpdGl2ZVRocmVzaG9s
ZCkKK3sKKyAgICBtX3NlZWtpbmcgPSB0cnVlOworICAgIGNhbGxPbk1haW5UaHJlYWQoV1RGOjpi
aW5kKCZNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtJbnRlcm5hbCwg
dGhpcywgdGltZSwgbmVnYXRpdmVUaHJlc2hvbGQsIHBvc2l0aXZlVGhyZXNob2xkKSk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrSW50ZXJuYWwo
ZG91YmxlIHRpbWUsIGRvdWJsZSBuZWdhdGl2ZVRocmVzaG9sZCwgZG91YmxlIHBvc2l0aXZlVGhy
ZXNob2xkKQoreworICAgIE1lZGlhVGltZSBzZWVrVGltZSA9IG1fbWVkaWFTb3VyY2VQcml2YXRl
LT5zZWVrVG9UaW1lKE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSh0aW1lKSwgTWVkaWFUaW1l
OjpjcmVhdGVXaXRoRG91YmxlKHBvc2l0aXZlVGhyZXNob2xkKSwgTWVkaWFUaW1lOjpjcmVhdGVX
aXRoRG91YmxlKG5lZ2F0aXZlVGhyZXNob2xkKSk7CisgICAgbV9jbG9jay0+c2V0Q3VycmVudE1l
ZGlhVGltZShzZWVrVGltZSk7CisgICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAgbV9wbGF5ZXIt
PnRpbWVDaGFuZ2VkKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjpzZWVraW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWVraW5nOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0UmF0ZURvdWJsZShk
b3VibGUgcmF0ZSkKK3sKKyAgICBtX2Nsb2NrLT5zZXRQbGF5UmF0ZShyYXRlKTsKKyAgICBtX3Bs
YXllci0+cmF0ZUNoYW5nZWQoKTsKK30KKworTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6Om5ldHdvcmtTdGF0ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbmV0d29ya1N0YXRlOworfQorCitNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnJlYWR5U3RhdGUoKSBjb25z
dAoreworICAgIHJldHVybiBtX3JlYWR5U3RhdGU7Cit9CisKK1Bhc3NSZWZQdHI8VGltZVJhbmdl
cz4gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrYWJsZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFRpbWVSYW5nZXM6OmNyZWF0ZShtaW5UaW1lU2Vla2FibGUoKSwgbWF4
VGltZVNlZWthYmxlRG91YmxlKCkpOworfQorCitkb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjptYXhUaW1lU2Vla2FibGVEb3VibGUoKSBjb25zdAoreworICAgIHJl
dHVybiBkdXJhdGlvbkRvdWJsZSgpOworfQorCitkb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjptaW5UaW1lU2Vla2FibGUoKSBjb25zdAoreworICAgIHJldHVybiBz
dGFydFRpbWVEb3VibGUoKTsKK30KKworUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9tZWRpYVNvdXJjZS0+YnVmZmVyZWQoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakM6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0Cit7CisgICAg
Ym9vbCBsb2FkaW5nUHJvZ3Jlc3NlZCA9IG1fbG9hZGluZ1Byb2dyZXNzZWQ7CisgICAgbV9sb2Fk
aW5nUHJvZ3Jlc3NlZCA9IGZhbHNlOworICAgIHJldHVybiBsb2FkaW5nUHJvZ3Jlc3NlZDsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldFNpemUoY29u
c3QgSW50U2l6ZSYpCit7CisgICAgLy8gTm8tb3AKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakM6OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmKQoreworICAgIC8vIEZJWE1FOiBwYWludCgpCit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHBh
aW50Q3VycmVudEZyYW1lSW5Db250ZXh0KCkKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakM6Omhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoKSBjb25zdAoreworICAg
IHJldHVybiBtX2hhc0F2YWlsYWJsZVZpZGVvRnJhbWU7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qzo6c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjphY2Nl
bGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCit7CisgICAgaWYgKHN1cHBvcnRzQWNjZWxl
cmF0ZWRSZW5kZXJpbmcoKSAmJiBtX3BsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQ
bGF5ZXJSZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKG1fcGxheWVyKSkKKyAgICAgICAgZW5zdXJl
TGF5ZXIoKTsKKyAgICBlbHNlCisgICAgICAgIGRlc3Ryb3lMYXllcigpOworfQorI2VuZGlmCisK
K01lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6bW92aWVMb2FkVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE1lZGlhUGxheWVy
OjpTdG9yZWRTdHJlYW07Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjpwcmVwYXJlRm9yUmVuZGVyaW5nKCkKK3sKKyAgICAvLyBOby1vcAorfQorCitTdHJp
bmcgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjplbmdpbmVEZXNjcmlwdGlv
bigpIGNvbnN0Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZGVzY3JpcHRp
b24oQVNDSUlMaXRlcmFsKCJBVkZvdW5kYXRpb24gTWVkaWFTb3VyY2UgRW5naW5lIikpOworICAg
IHJldHVybiBkZXNjcmlwdGlvbjsKK30KKworU3RyaW5nIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6bGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IGxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjaygpCisgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisKK3NpemVfdCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakM6OmV4dHJhTWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7
Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgVXRpbGl0eSBNZXRob2RzCisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjplbnN1cmVMYXllcigpCit7
CisgICAgaWYgKG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciA9IGFkb3B0TlMoW1tnZXRBVlNhbXBsZUJ1
ZmZlckRpc3BsYXlMYXllckNsYXNzKCkgYWxsb2NdIGluaXRdKTsKKyAgICBbbV9zYW1wbGVCdWZm
ZXJEaXNwbGF5TGF5ZXIgc2V0Q29udHJvbFRpbWViYXNlOm1fY2xvY2stPnRpbWViYXNlKCldOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6ZGVzdHJveUxh
eWVyKCkKK3sKKyAgICBpZiAoIW1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBbbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgc2V0Q29udHJvbFRpbWVi
YXNlOjBdOworICAgIG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyID0gbnVsbHB0cjsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmR1cmF0aW9uQ2hhbmdl
ZCgpCit7CisgICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6dXBkYXRlU3RhdGVzKCkKK3sKKyAgICBN
ZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9sZE5ldHdvcmtTdGF0ZSA9IG1fbmV0d29ya1N0YXRl
OworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3Rh
dGU7CisKKyAgICBVTlVTRURfUEFSQU0ob2xkTmV0d29ya1N0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0ob2xkUmVhZHlTdGF0ZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3Rh
dGUpCit7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSByZWFkeVN0YXRlKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3JlYWR5U3RhdGUgPSByZWFkeVN0YXRlOworICAgIG1fcGxheWVyLT5yZWFk
eVN0YXRlQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6c2V0TmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29y
a1N0YXRlKQoreworICAgIGlmIChtX25ldHdvcmtTdGF0ZSA9PSBuZXR3b3JrU3RhdGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fbmV0d29ya1N0YXRlID0gbmV0d29ya1N0YXRlOworICAgIG1f
cGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjphZGREaXNwbGF5TGF5ZXIoQVZTYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXIqIGRpc3BsYXlMYXllcikKK3sKKyAgICBpZiAoZGlzcGxheUxheWVyID09IG1fc2Ft
cGxlQnVmZmVyRGlzcGxheUxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NhbXBsZUJ1
ZmZlckRpc3BsYXlMYXllciA9IGRpc3BsYXlMYXllcjsKKyAgICBbbV9zYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXIgc2V0Q29udHJvbFRpbWViYXNlOm1fY2xvY2stPnRpbWViYXNlKCldOworICAgIG1f
cGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBsYXllclJlbmRlcmluZ01vZGVDaGFu
Z2VkKG1fcGxheWVyKTsKKworICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMgc29tZXdoZXJlIGFwcHJv
cHJpYXRlOgorICAgIG1fcGxheWVyLT5maXJzdFZpZGVvRnJhbWVBdmFpbGFibGUoKTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnJlbW92ZURpc3BsYXlM
YXllcihBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciogZGlzcGxheUxheWVyKQoreworICAgIGlm
IChkaXNwbGF5TGF5ZXIgIT0gbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyID0gbnVsbHB0cjsKKyAgICBt
X3BsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hh
bmdlZChtX3BsYXllcik7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZTRlMjc1YWNiZWI5M2ZmZDk0
NzZiODBiNjQyODYwZThkOGEyNTNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZG
T2JqQy5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE1lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakNfaAorI2RlZmluZSBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDX2gKKworI2lm
IEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbmNsdWRlICJN
ZWRpYVNvdXJjZVByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCitPQkpDX0NMQVNTIEFWQXNzZXQ7CitPQkpDX0NMQVNTIEFWU3RyZWFtRGF0
YVBhcnNlcjsKK09CSkNfQ0xBU1MgTlNFcnJvcjsKK09CSkNfQ0xBU1MgTlNPYmplY3Q7Cit0eXBl
ZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1wbGVCdWZmZXJSZWY7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOworY2xhc3MgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM7CitjbGFzcyBUaW1lUmFu
Z2VzOworCitjbGFzcyBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDIDogcHVibGljIE1lZGlhU291
cmNlUHJpdmF0ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxNZWRpYVNvdXJjZVByaXZh
dGVBVkZPYmpDPiBjcmVhdGUoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKik7
CisgICAgdmlydHVhbCB+TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQygpOworCisgICAgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKiBwbGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X3BsYXllcjsgfQorICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyo+
JiBhY3RpdmVTb3VyY2VCdWZmZXJzKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVTb3VyY2VCdWZm
ZXJzOyB9CisKKyAgICB2aXJ0dWFsIEFkZFN0YXR1cyBhZGRTb3VyY2VCdWZmZXIoY29uc3QgQ29u
dGVudFR5cGUmLCBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZT4mKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRE
dXJhdGlvbihkb3VibGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBtYXJrRW5kT2ZTdHJl
YW0oRW5kT2ZTdHJlYW1TdGF0dXMpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB1bm1hcmtF
bmRPZlN0cmVhbSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUgcmVhZHlTdGF0ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRSZWFk
eVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlKSBPVkVSUklERTsKKworICAgIGJvb2wgaGFz
QXVkaW8oKSBjb25zdDsKKyAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CisKKyAgICBNZWRpYVRp
bWUgc2Vla1RvVGltZShNZWRpYVRpbWUsIE1lZGlhVGltZSBuZWdhdGl2ZVRocmVzaG9sZCwgTWVk
aWFUaW1lIHBvc2l0aXZlVGhyZXNob2xkKTsKKworcHJpdmF0ZToKKyAgICBNZWRpYVNvdXJjZVBy
aXZhdGVBVkZPYmpDKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyopOworCisg
ICAgdm9pZCBzb3VyY2VCdWZmZXJQcml2YXRlRGlkQ2hhbmdlQWN0aXZlU3RhdGUoU291cmNlQnVm
ZmVyUHJpdmF0ZUFWRk9iakMqLCBib29sIGFjdGl2ZSk7CisgICAgdm9pZCBzb3VyY2VCdWZmZXJQ
cml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChTb3VyY2VCdWZmZXJQcml2YXRl
QVZGT2JqQyopOworICAgIHZvaWQgbW9uaXRvclNvdXJjZUJ1ZmZlcnMoKTsKKyAgICB2b2lkIHJl
bW92ZVNvdXJjZUJ1ZmZlcihTb3VyY2VCdWZmZXJQcml2YXRlKik7CisKKyAgICBmcmllbmQgY2xh
c3MgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM7CisKKyAgICBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakMqIG1fcGxheWVyOworICAgIGRvdWJsZSBtX2R1cmF0aW9uOworICAg
IFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM+PiBtX3NvdXJjZUJ1ZmZl
cnM7CisgICAgVmVjdG9yPFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKj4gbV9hY3RpdmVTb3Vy
Y2VCdWZmZXJzOworICAgIGJvb2wgbV9pc0VuZGVkOworfTsKKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40ZWQ2MGEwY2FkYTIzY2VmNTJmZTgyNzc1ZjkwNWE1MDhlZmVjZGNlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbQpAQCAtMCwwICsxLDE3NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBVU0UoQVZGT1VOREFUSU9O
KQorCisjaW1wb3J0ICJDb250ZW50VHlwZS5oIgorI2ltcG9ydCAiRXhjZXB0aW9uQ29kZVBsYWNl
aG9sZGVyLmgiCisjaW1wb3J0ICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMu
aCIKKyNpbXBvcnQgIlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgiCisjaW1wb3J0ICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKKyNpbXBvcnQgPG9iamMvcnVu
dGltZS5oPgorI2ltcG9ydCA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW1wb3J0IDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI3ByYWdtYSBt
YXJrIC0KKyNwcmFnbWEgbWFyayBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDCisKK1JlZlB0cjxN
ZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDPiBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpjcmVh
dGUoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKiBwYXJlbnQpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKHBhcmVudCkpOwor
fQorCitNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpD
KE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyogcGFyZW50KQorICAgIDogbV9w
bGF5ZXIocGFyZW50KQorICAgICwgbV9kdXJhdGlvbihzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OnF1aWV0X05hTigpKQorICAgICwgbV9pc0VuZGVkKGZhbHNlKQoreworfQorCitNZWRpYVNv
dXJjZVByaXZhdGVBVkZPYmpDOjp+TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQygpCit7Cit9CisK
K01lZGlhU291cmNlUHJpdmF0ZTo6QWRkU3RhdHVzIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6
OmFkZFNvdXJjZUJ1ZmZlcihjb25zdCBDb250ZW50VHlwZSYgY29udGVudFR5cGUsIFJlZlB0cjxT
b3VyY2VCdWZmZXJQcml2YXRlPiYgb3V0UHJpdmF0ZSkKK3sKKyAgICBNZWRpYUVuZ2luZVN1cHBv
cnRQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy5pc01lZGlhU291cmNlID0g
dHJ1ZTsKKyAgICBwYXJhbWV0ZXJzLnR5cGUgPSBjb250ZW50VHlwZS50eXBlKCk7CisgICAgcGFy
YW1ldGVycy5jb2RlY3MgPSBjb250ZW50VHlwZS5wYXJhbWV0ZXIoQVNDSUlMaXRlcmFsKCJjb2Rl
Y3MiKSk7CisgICAgaWYgKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c3Vw
cG9ydHNUeXBlKHBhcmFtZXRlcnMpID09IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZCkKKyAg
ICAgICAgcmV0dXJuIE5vdFN1cHBvcnRlZDsKKworICAgIG1fc291cmNlQnVmZmVycy5hcHBlbmQo
U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmNyZWF0ZSh0aGlzKSk7CisgICAgb3V0UHJpdmF0
ZSA9IG1fc291cmNlQnVmZmVycy5sYXN0KCk7CisKKyAgICByZXR1cm4gT2s7Cit9CisKK3ZvaWQg
TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6cmVtb3ZlU291cmNlQnVmZmVyKFNvdXJjZUJ1ZmZl
clByaXZhdGUqIGJ1ZmZlcikKK3sKKyAgICBBU1NFUlQobV9zb3VyY2VCdWZmZXJzLmNvbnRhaW5z
KGJ1ZmZlcikpOworCisgICAgc2l6ZV90IHBvcyA9IG1fYWN0aXZlU291cmNlQnVmZmVycy5maW5k
KGJ1ZmZlcik7CisgICAgaWYgKHBvcyAhPSBub3RGb3VuZCkKKyAgICAgICAgbV9hY3RpdmVTb3Vy
Y2VCdWZmZXJzLnJlbW92ZShwb3MpOworCisgICAgcG9zID0gbV9zb3VyY2VCdWZmZXJzLmZpbmQo
YnVmZmVyKTsKKyAgICBtX3NvdXJjZUJ1ZmZlcnMucmVtb3ZlKHBvcyk7Cit9CisKK2RvdWJsZSBN
ZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpkdXJhdGlvbigpCit7CisgICAgcmV0dXJuIG1fZHVy
YXRpb247Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6c2V0RHVyYXRpb24o
ZG91YmxlIGR1cmF0aW9uKQoreworICAgIGlmIChkdXJhdGlvbiA9PSBtX2R1cmF0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2R1cmF0aW9uID0gZHVyYXRpb247Cit9CisKK3ZvaWQgTWVk
aWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6bWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVz
KSAKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IG1hcmtFbmRPZlN0cmVhbSgpCisgICAgbV9p
c0VuZGVkID0gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjp1bm1h
cmtFbmRPZlN0cmVhbSgpIAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdW5tYXJrRW5kT2ZT
dHJlYW0oKQorICAgIG1faXNFbmRlZCA9IGZhbHNlOworfQorCitNZWRpYVBsYXllcjo6UmVhZHlT
dGF0ZSBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wbGF5ZXItPnJlYWR5U3RhdGUoKTsKK30KKwordm9pZCBNZWRpYVNvdXJjZVBy
aXZhdGVBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5
U3RhdGUpCit7CisgICAgbV9wbGF5ZXItPnNldFJlYWR5U3RhdGUocmVhZHlTdGF0ZSk7Cit9CisK
K3ZvaWQgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6c291cmNlQnVmZmVyUHJpdmF0ZURpZENo
YW5nZUFjdGl2ZVN0YXRlKFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKiBidWZmZXIsIGJvb2wg
YWN0aXZlKQoreworICAgIGlmIChhY3RpdmUgJiYgIW1fYWN0aXZlU291cmNlQnVmZmVycy5jb250
YWlucyhidWZmZXIpKQorICAgICAgICBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMuYXBwZW5kKGJ1ZmZl
cik7CisKKyAgICBpZiAoIWFjdGl2ZSkgeworICAgICAgICBzaXplX3QgcG9zaXRpb24gPSBtX2Fj
dGl2ZVNvdXJjZUJ1ZmZlcnMuZmluZChidWZmZXIpOworICAgICAgICBpZiAocG9zaXRpb24gIT0g
bm90Rm91bmQpCisgICAgICAgICAgICBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMucmVtb3ZlKHBvc2l0
aW9uKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakNI
YXNBdWRpbyhQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDPiBwcnBTb3VyY2VC
dWZmZXIpCit7CisgICAgUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDPiBzb3VyY2VC
dWZmZXIgPSBwcnBTb3VyY2VCdWZmZXI7CisgICAgcmV0dXJuIHNvdXJjZUJ1ZmZlci0+aGFzQXVk
aW8oKTsKK30KKworYm9vbCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpoYXNBdWRpbygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6YW55X29mKG1fYWN0aXZlU291cmNlQnVmZmVycy5iZWdp
bigpLCBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMuZW5kKCksIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9i
akNIYXNBdWRpbyk7Cit9CisKK3N0YXRpYyBib29sIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakNI
YXNWaWRlbyhQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDPiBwcnBTb3VyY2VC
dWZmZXIpCit7CisgICAgUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDPiBzb3VyY2VC
dWZmZXIgPSBwcnBTb3VyY2VCdWZmZXI7CisgICAgcmV0dXJuIHNvdXJjZUJ1ZmZlci0+aGFzVmlk
ZW8oKTsKK30KKworYm9vbCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpoYXNWaWRlbygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6YW55X29mKG1fYWN0aXZlU291cmNlQnVmZmVycy5iZWdp
bigpLCBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMuZW5kKCksIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9i
akNIYXNWaWRlbyk7Cit9CisKK01lZGlhVGltZSBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpz
ZWVrVG9UaW1lKE1lZGlhVGltZSB0YXJnZXRUaW1lLCBNZWRpYVRpbWUgbmVnYXRpdmVUaHJlc2hv
bGQsIE1lZGlhVGltZSBwb3NpdGl2ZVRocmVzaG9sZCkKK3sKKyAgICBNZWRpYVRpbWUgc2Vla1Rp
bWUgPSB0YXJnZXRUaW1lOworICAgIGZvciAoYXV0byBpdCA9IG1fYWN0aXZlU291cmNlQnVmZmVy
cy5iZWdpbigpLCBlbmQgPSBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBNZWRpYVRpbWUgc291cmNlU2Vla1RpbWUgPSAoKml0KS0+ZmFzdFNl
ZWtUaW1lRm9yTWVkaWFUaW1lKHRhcmdldFRpbWUsIG5lZ2F0aXZlVGhyZXNob2xkLCBwb3NpdGl2
ZVRocmVzaG9sZCk7CisgICAgICAgIGlmIChhYnModGFyZ2V0VGltZSAtIHNvdXJjZVNlZWtUaW1l
KSA+IGFicyh0YXJnZXRUaW1lIC0gc2Vla1RpbWUpKQorICAgICAgICAgICAgc2Vla1RpbWUgPSBz
b3VyY2VTZWVrVGltZTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX2FjdGl2ZVNvdXJj
ZUJ1ZmZlcnMuYmVnaW4oKSwgZW5kID0gbV9hY3RpdmVTb3VyY2VCdWZmZXJzLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5zZWVrVG9UaW1lKHNlZWtUaW1lKTsKKworICAg
IHJldHVybiBzZWVrVGltZTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NPVVJD
RSkgJiYgVVNFKEFWRk9VTkRBVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9T
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZjk0ZTJlMjJjYzIwMTM4
MzEwY2EwMDQ0NTg3NmE1ZTViMjRjMmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRl
QVZGT2JqQy5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQ19oCisjZGVmaW5lIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDX2gK
KworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbmNs
dWRlICJTb3VyY2VCdWZmZXJQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisKK09CSkNf
Q0xBU1MgQVZBc3NldDsKK09CSkNfQ0xBU1MgQVZTdHJlYW1EYXRhUGFyc2VyOworT0JKQ19DTEFT
UyBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcjsKK09CSkNfQ0xBU1MgTlNFcnJvcjsKK09CSkNf
Q0xBU1MgTlNPYmplY3Q7Cit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01T
YW1wbGVCdWZmZXJSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2Ny
aXB0aW9uICpDTUZvcm1hdERlc2NyaXB0aW9uUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM7CitjbGFzcyBUaW1lUmFuZ2VzOworY2xh
c3MgQXVkaW9UcmFja1ByaXZhdGU7CitjbGFzcyBWaWRlb1RyYWNrUHJpdmF0ZTsKK2NsYXNzIEF1
ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOworY2xhc3MgVmlkZW9UcmFja1ByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakM7CisKK2NsYXNzIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
IDogcHVibGljIFNvdXJjZUJ1ZmZlclByaXZhdGUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQ
dHI8U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM+IGNyZWF0ZShNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDKik7CisgICAgdmlydHVhbCB+U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMoKTsKKwor
ICAgIC8vIEFWU3RyZWFtRGF0YVBhcnNlciBkZWxlZ2F0ZSBtZXRob2RzCisgICAgdm9pZCBkaWRQ
YXJzZVN0cmVhbURhdGFBc0Fzc2V0KEFWQXNzZXQqKTsKKyAgICB2b2lkIGRpZEZhaWxUb1BhcnNl
U3RyZWFtRGF0YVdpdGhFcnJvcihOU0Vycm9yKik7CisgICAgdm9pZCBkaWRQcm92aWRlTWVkaWFE
YXRhRm9yVHJhY2tJRChpbnQgdHJhY2tJRCwgQ01TYW1wbGVCdWZmZXJSZWYsIGNvbnN0IFN0cmlu
ZyYgbWVkaWFUeXBlLCB1bnNpZ25lZCBmbGFncyk7CisgICAgdm9pZCBkaWRSZWFjaEVuZE9mVHJh
Y2tXaXRoVHJhY2tJRChpbnQgdHJhY2tJRCwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUpOworCisg
ICAgYm9vbCBwcm9jZXNzQ29kZWRGcmFtZShpbnQgdHJhY2tJRCwgQ01TYW1wbGVCdWZmZXJSZWYs
IGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlKTsKKworICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsK
KyAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7CisKKyAgICB2b2lkIHRyYWNrRGlkQ2hhbmdlRW5h
YmxlZChWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyopOworICAgIHZvaWQgdHJh
Y2tEaWRDaGFuZ2VFbmFibGVkKEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKik7
CisKKyAgICB2b2lkIHNlZWtUb1RpbWUoTWVkaWFUaW1lKTsKKyAgICBNZWRpYVRpbWUgZmFzdFNl
ZWtUaW1lRm9yTWVkaWFUaW1lKE1lZGlhVGltZSwgTWVkaWFUaW1lIG5lZ2F0aXZlVGhyZXNob2xk
LCBNZWRpYVRpbWUgcG9zaXRpdmVUaHJlc2hvbGQpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMqKTsK
KworICAgIC8vIFNvdXJjZUJ1ZmZlclByaXZhdGUgb3ZlcnJpZGVzCisgICAgdmlydHVhbCB2b2lk
IHNldENsaWVudChTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50KikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBBcHBlbmRSZXN1bHQgYXBwZW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2ln
bmVkIGxlbmd0aCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFib3J0KCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tTWVkaWFTb3VyY2UoKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlT
dGF0ZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGV2aWN0Q29kZWRGcmFtZXMoKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNGdWxsKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGZsdXNoQW5kRW5xdWV1ZU5vbkRpc3BsYXlpbmdTYW1wbGVzKFZlY3RvcjxSZWZQdHI8TWVk
aWFTYW1wbGU+PiwgQXRvbWljU3RyaW5nIHRyYWNrSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBlbnF1ZXVlU2FtcGxlKFBhc3NSZWZQdHI8TWVkaWFTYW1wbGU+LCBBdG9taWNTdHJpbmcg
dHJhY2tJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzUmVhZHlGb3JNb3JlU2FtcGxl
cygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmUoYm9vbCkgT1ZFUlJJREU7
CisKKyAgICBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKiBtX3BhcmVudDsKKyAgICBTb3VyY2VC
dWZmZXJQcml2YXRlQ2xpZW50KiBtX2NsaWVudDsKKyAgICBSZXRhaW5QdHI8QVZTdHJlYW1EYXRh
UGFyc2VyPiBtX3BhcnNlcjsKKyAgICBSZXRhaW5QdHI8QVZBc3NldD4gbV9hc3NldDsKKyAgICBS
ZXRhaW5QdHI8QVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI+IG1fZGlzcGxheUxheWVyOworICAg
IFJldGFpblB0cjxOU09iamVjdD4gbV9kZWxlZ2F0ZTsKKworICAgIGJvb2wgbV9wYXJzaW5nU3Vj
Y2VlZGVkOworICAgIGludCBtX2VuYWJsZWRWaWRlb1RyYWNrSUQ7CisKKyAgICBWZWN0b3I8UmVm
UHRyPFZpZGVvVHJhY2tQcml2YXRlPj4gbV92aWRlb1RyYWNrczsKKyAgICBWZWN0b3I8UmVmUHRy
PEF1ZGlvVHJhY2tQcml2YXRlPj4gbV9hdWRpb1RyYWNrczsKK307CisKK30KKworI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mNWY4YTc1NDVhZmY0YmU3OTEwNjMxOThlYjRiNGViN2QzMWIzOWMzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0KQEAgLTAsMCArMSw1Mzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBVU0UoQVZGT1VO
REFUSU9OKQorCisjaW1wb3J0ICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKKyNpbXBvcnQg
IkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhRGVzY3JpcHRpb24uaCIKKyNpbXBvcnQgIk1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIgorI2ltcG9ydCAiTWVkaWFTYW1wbGUu
aCIKKyNpbXBvcnQgIk1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuaCIKKyNpbXBvcnQgIk1lZGlh
VGltZU1hYy5oIgorI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbXBvcnQgIlNvZnRMaW5r
aW5nLmgiCisjaW1wb3J0ICJTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmgiCisjaW1wb3J0ICJU
aW1lUmFuZ2VzLmgiCisjaW1wb3J0ICJBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qy5oIgorI2ltcG9ydCAiVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCIKKyNp
bXBvcnQgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZPYmpDLmgiCisjaW1wb3J0IDxBVkZvdW5k
YXRpb24vQVZBc3NldFRyYWNrLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZTYW1wbGVCdWZm
ZXJEaXNwbGF5TGF5ZXIuaD4KKyNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8d3Rm
L3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW1w
b3J0IDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrUHRyLmg+CisjaW1w
b3J0IDxtYXA+CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgU29mdCBMaW5raW5nCisK
K1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0ZS
QU1FV09SS19PUFRJT05BTChDb3JlTWVkaWEpCisKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRp
b24sIEFWQXNzZXRUcmFjaykKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWU3RyZWFt
RGF0YVBhcnNlcikKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWU2FtcGxlQnVmZmVy
RGlzcGxheUxheWVyKQorCitTT0ZUX0xJTktfUE9JTlRFUl9PUFRJT05BTChBVkZvdW5kYXRpb24s
IEFWTWVkaWFUeXBlVmlkZW8sIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUl9PUFRJT05B
TChBVkZvdW5kYXRpb24sIEFWTWVkaWFUeXBlQXVkaW8sIE5TU3RyaW5nICopCitTT0ZUX0xJTktf
UE9JTlRFUl9PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWTWVkaWFUeXBlVGV4dCwgTlNTdHJpbmcg
KikKKworU09GVF9MSU5LX0NPTlNUQU5UKENvcmVNZWRpYSwga0NNVGltZVplcm8sIENNVGltZSk7
CitTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01UaW1lSW52YWxpZCwgQ01UaW1lKTsK
K1NPRlRfTElOS19DT05TVEFOVChDb3JlTWVkaWEsIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfRG9O
b3REaXNwbGF5LCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFOVChDb3JlTWVkaWEsIGtD
TVNhbXBsZUF0dGFjaG1lbnRLZXlfTm90U3luYywgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfQ09O
U1RBTlQoQ29yZU1lZGlhLCBrQ01TYW1wbGVCdWZmZXJBdHRhY2htZW50S2V5X0RyYWluQWZ0ZXJE
ZWNvZGluZywgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01T
YW1wbGVCdWZmZXJBdHRhY2htZW50S2V5X1Jlc2V0RGVjb2RlckJlZm9yZURlY29kaW5nLCBDRlN0
cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFOVChDb3JlTWVkaWEsIGtDTVNhbXBsZUJ1ZmZlckF0
dGFjaG1lbnRLZXlfRW1wdHlNZWRpYSwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfQ09OU1RBTlQo
Q29yZU1lZGlhLCBrQ01TYW1wbGVCdWZmZXJBdHRhY2htZW50S2V5X0Rpc3BsYXlFbXB0eU1lZGlh
SW1tZWRpYXRlbHksIENGU3RyaW5nUmVmKQorCitTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0
aW9uLCBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNWaXN1YWwsIE5TU3RyaW5nKikKK1NPRlRfTElOS19D
T05TVEFOVChBVkZvdW5kYXRpb24sIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0F1ZGlibGUsIE5TU3Ry
aW5nKikKK1NPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFWTWVkaWFDaGFyYWN0ZXJp
c3RpY0xlZ2libGUsIE5TU3RyaW5nKikKKworU09GVF9MSU5LKENvcmVNZWRpYSwgQ01Gb3JtYXRE
ZXNjcmlwdGlvbkdldE1lZGlhVHlwZSwgQ01NZWRpYVR5cGUsIChDTUZvcm1hdERlc2NyaXB0aW9u
UmVmIGRlc2MpLCAoZGVzYykpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVNhbXBsZUJ1ZmZlckNy
ZWF0ZSwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENNQmxvY2tCdWZmZXJS
ZWYgZGF0YUJ1ZmZlciwgQm9vbGVhbiBkYXRhUmVhZHksIENNU2FtcGxlQnVmZmVyTWFrZURhdGFS
ZWFkeUNhbGxiYWNrIG1ha2VEYXRhUmVhZHlDYWxsYmFjaywgdm9pZCAqbWFrZURhdGFSZWFkeVJl
ZmNvbiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiwgQ01JdGVtQ291
bnQgbnVtU2FtcGxlcywgQ01JdGVtQ291bnQgbnVtU2FtcGxlVGltaW5nRW50cmllcywgY29uc3Qg
Q01TYW1wbGVUaW1pbmdJbmZvICpzYW1wbGVUaW1pbmdBcnJheSwgQ01JdGVtQ291bnQgbnVtU2Ft
cGxlU2l6ZUVudHJpZXMsIGNvbnN0IHNpemVfdCAqc2FtcGxlU2l6ZUFycmF5LCBDTVNhbXBsZUJ1
ZmZlclJlZiAqc0J1Zk91dCksIChhbGxvY2F0b3IsIGRhdGFCdWZmZXIsIGRhdGFSZWFkeSwgbWFr
ZURhdGFSZWFkeUNhbGxiYWNrLCBtYWtlRGF0YVJlYWR5UmVmY29uLCBmb3JtYXREZXNjcmlwdGlv
biwgbnVtU2FtcGxlcywgbnVtU2FtcGxlVGltaW5nRW50cmllcywgc2FtcGxlVGltaW5nQXJyYXks
IG51bVNhbXBsZVNpemVFbnRyaWVzLCBzYW1wbGVTaXplQXJyYXksIHNCdWZPdXQpKQorU09GVF9M
SU5LKENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJDcmVhdGVDb3B5LCBPU1N0YXR1cywgKENGQWxs
b2NhdG9yUmVmIGFsbG9jYXRvciwgQ01TYW1wbGVCdWZmZXJSZWYgc2J1ZiwgQ01TYW1wbGVCdWZm
ZXJSZWYgKnNidWZDb3B5T3V0KSwgKGFsbG9jYXRvciwgc2J1Ziwgc2J1ZkNvcHlPdXQpKQorU09G
VF9MSU5LKENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJDYWxsRm9yRWFjaFNhbXBsZSwgT1NTdGF0
dXMsIChDTVNhbXBsZUJ1ZmZlclJlZiBzYnVmLCBPU1N0YXR1cyAoKmNhbGxiYWNrKSggQ01TYW1w
bGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyLCBDTUl0ZW1Db3VudCBpbmRleCwgdm9pZCAqcmVmY29u
KSwgdm9pZCAqcmVmY29uKSwgKHNidWYsIGNhbGxiYWNrLCByZWZjb24pKQorU09GVF9MSU5LKENv
cmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJHZXREZWNvZGVUaW1lU3RhbXAsIENNVGltZSwgKENNU2Ft
cGxlQnVmZmVyUmVmIHNidWYpLCAoc2J1ZikpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVNhbXBs
ZUJ1ZmZlckdldER1cmF0aW9uLCBDTVRpbWUsIChDTVNhbXBsZUJ1ZmZlclJlZiBzYnVmKSwgKHNi
dWYpKQorU09GVF9MSU5LKENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJHZXRQcmVzZW50YXRpb25U
aW1lU3RhbXAsIENNVGltZSwgKENNU2FtcGxlQnVmZmVyUmVmIHNidWYpLCAoc2J1ZikpCitTT0ZU
X0xJTksoQ29yZU1lZGlhLCBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXks
IENGQXJyYXlSZWYsIChDTVNhbXBsZUJ1ZmZlclJlZiBzYnVmLCBCb29sZWFuIGNyZWF0ZUlmTmVj
ZXNzYXJ5KSwgKHNidWYsIGNyZWF0ZUlmTmVjZXNzYXJ5KSkKK1NPRlRfTElOSyhDb3JlTWVkaWEs
IENNRm9ybWF0RGVzY3JpcHRpb25HZXRNZWRpYVN1YlR5cGUsIEZvdXJDaGFyQ29kZSwgKENNRm9y
bWF0RGVzY3JpcHRpb25SZWYgZGVzYyksIChkZXNjKSkKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENN
U2V0QXR0YWNobWVudCwgdm9pZCwgKENNQXR0YWNobWVudEJlYXJlclJlZiB0YXJnZXQsIENGU3Ry
aW5nUmVmIGtleSwgQ0ZUeXBlUmVmIHZhbHVlLCBDTUF0dGFjaG1lbnRNb2RlIGF0dGFjaG1lbnRN
b2RlKSwgKHRhcmdldCwga2V5LCB2YWx1ZSwgYXR0YWNobWVudE1vZGUpKQorCisjZGVmaW5lIEFW
TWVkaWFUeXBlVmlkZW8gZ2V0QVZNZWRpYVR5cGVWaWRlbygpCisjZGVmaW5lIEFWTWVkaWFUeXBl
QXVkaW8gZ2V0QVZNZWRpYVR5cGVBdWRpbygpCisjZGVmaW5lIEFWTWVkaWFUeXBlVGV4dCBnZXRB
Vk1lZGlhVHlwZVRleHQoKQorI2RlZmluZSBrQ01UaW1lWmVybyBnZXRrQ01UaW1lWmVybygpCisj
ZGVmaW5lIGtDTVRpbWVJbnZhbGlkIGdldGtDTVRpbWVJbnZhbGlkKCkKKyNkZWZpbmUga0NNU2Ft
cGxlQXR0YWNobWVudEtleV9Ob3RTeW5jIGdldGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfTm90U3lu
YygpCisjZGVmaW5lIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfRG9Ob3REaXNwbGF5IGdldGtDTVNh
bXBsZUF0dGFjaG1lbnRLZXlfRG9Ob3REaXNwbGF5KCkKKyNkZWZpbmUga0NNU2FtcGxlQnVmZmVy
QXR0YWNobWVudEtleV9SZXNldERlY29kZXJCZWZvcmVEZWNvZGluZyBnZXRrQ01TYW1wbGVCdWZm
ZXJBdHRhY2htZW50S2V5X1Jlc2V0RGVjb2RlckJlZm9yZURlY29kaW5nKCkKKyNkZWZpbmUga0NN
U2FtcGxlQnVmZmVyQXR0YWNobWVudEtleV9EcmFpbkFmdGVyRGVjb2RpbmcgZ2V0a0NNU2FtcGxl
QnVmZmVyQXR0YWNobWVudEtleV9EcmFpbkFmdGVyRGVjb2RpbmcoKQorI2RlZmluZSBrQ01TYW1w
bGVCdWZmZXJBdHRhY2htZW50S2V5X0VtcHR5TWVkaWEgZ2V0a0NNU2FtcGxlQnVmZmVyQXR0YWNo
bWVudEtleV9FbXB0eU1lZGlhKCkKKyNkZWZpbmUga0NNU2FtcGxlQnVmZmVyQXR0YWNobWVudEtl
eV9EaXNwbGF5RW1wdHlNZWRpYUltbWVkaWF0ZWx5IGdldGtDTVNhbXBsZUJ1ZmZlckF0dGFjaG1l
bnRLZXlfRGlzcGxheUVtcHR5TWVkaWFJbW1lZGlhdGVseSgpCisKKyNkZWZpbmUgQVZNZWRpYUNo
YXJhY3RlcmlzdGljVmlzdWFsIGdldEFWTWVkaWFDaGFyYWN0ZXJpc3RpY1Zpc3VhbCgpCisjZGVm
aW5lIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0F1ZGlibGUgZ2V0QVZNZWRpYUNoYXJhY3RlcmlzdGlj
QXVkaWJsZSgpCisjZGVmaW5lIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0xlZ2libGUgZ2V0QVZNZWRp
YUNoYXJhY3RlcmlzdGljTGVnaWJsZSgpCisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsg
QVZTdHJlYW1EYXRhUGFyc2VyCitAY2xhc3MgQVZTdHJlYW1EYXRhUGFyc2VySW50ZXJuYWw7CisK
K05TX0NMQVNTX0FWQUlMQUJMRShUQkQsIFRCRCkKK0BpbnRlcmZhY2UgQVZTdHJlYW1EYXRhUGFy
c2VyIDogTlNPYmplY3QKKy0gKHZvaWQpc2V0RGVsZWdhdGU6KGlkKWRlbGVnYXRlOworLSAodm9p
ZClhcHBlbmRTdHJlYW1EYXRhOihOU0RhdGEgKilkYXRhOworLSAodm9pZClzZXRTaG91bGRQcm92
aWRlTWVkaWFEYXRhOihCT09MKXNob3VsZFByb3ZpZGVNZWRpYURhdGEgZm9yVHJhY2tJRDooQ01Q
ZXJzaXN0ZW50VHJhY2tJRCl0cmFja0lEOworLSAoQk9PTClzaG91bGRQcm92aWRlTWVkaWFEYXRh
Rm9yVHJhY2tJRDooQ01QZXJzaXN0ZW50VHJhY2tJRCl0cmFja0lEOworQGVuZAorCisjcHJhZ21h
IG1hcmsgLQorI3ByYWdtYSBtYXJrIFdlYkFWU3RyZWFtRGF0YVBhcnNlckxpc3RlbmVyCisKK0Bp
bnRlcmZhY2UgV2ViQVZTdHJlYW1EYXRhUGFyc2VyTGlzdGVuZXIgOiBOU09iamVjdCB7CisgICAg
V2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMqIF9wYXJlbnQ7CisgICAgQVZTdHJl
YW1EYXRhUGFyc2VyKiBfcGFyc2VyOworfQorLSAoaWQpaW5pdFdpdGhQYXJzZXI6KEFWU3RyZWFt
RGF0YVBhcnNlciopcGFyc2VyIHBhcmVudDooV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakMqKXBhcmVudDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkFWU3RyZWFtRGF0YVBh
cnNlckxpc3RlbmVyCistIChpZClpbml0V2l0aFBhcnNlcjooQVZTdHJlYW1EYXRhUGFyc2VyKilw
YXJzZXIgcGFyZW50OihXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyopcGFyZW50
Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBBU1NFUlQocGFyZW50KTsKKyAgICBfcGFyZW50ID0gcGFyZW50Owor
ICAgIF9wYXJzZXIgPSBwYXJzZXI7CisgICAgW19wYXJzZXIgc2V0RGVsZWdhdGU6c2VsZl07Cisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfcGFyc2VyIHNl
dERlbGVnYXRlOm5pbF07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXN0cmVh
bURhdGFQYXJzZXI6KEFWU3RyZWFtRGF0YVBhcnNlciAqKXN0cmVhbURhdGFQYXJzZXIgZGlkUGFy
c2VTdHJlYW1EYXRhQXNBc3NldDooQVZBc3NldCAqKWFzc2V0Cit7CisgICAgQVNTRVJUKHN0cmVh
bURhdGFQYXJzZXIgPT0gX3BhcnNlcik7CisgICAgX3BhcmVudC0+ZGlkUGFyc2VTdHJlYW1EYXRh
QXNBc3NldChhc3NldCk7Cit9CisKKy0gKHZvaWQpc3RyZWFtRGF0YVBhcnNlcjooQVZTdHJlYW1E
YXRhUGFyc2VyICopc3RyZWFtRGF0YVBhcnNlciBkaWRGYWlsVG9QYXJzZVN0cmVhbURhdGFXaXRo
RXJyb3I6KE5TRXJyb3IgKillcnJvcgoreworICAgIEFTU0VSVChzdHJlYW1EYXRhUGFyc2VyID09
IF9wYXJzZXIpOworICAgIF9wYXJlbnQtPmRpZEZhaWxUb1BhcnNlU3RyZWFtRGF0YVdpdGhFcnJv
cihlcnJvcik7Cit9CisKKy0gKHZvaWQpc3RyZWFtRGF0YVBhcnNlcjooQVZTdHJlYW1EYXRhUGFy
c2VyICopc3RyZWFtRGF0YVBhcnNlciBkaWRQcm92aWRlTWVkaWFEYXRhOihDTVNhbXBsZUJ1ZmZl
clJlZiltZWRpYURhdGEgZm9yVHJhY2tJRDooQ01QZXJzaXN0ZW50VHJhY2tJRCl0cmFja0lEIG1l
ZGlhVHlwZTooTlNTdHJpbmcgKiltZWRpYVR5cGUgZmxhZ3M6KE5TVUludGVnZXIpZmxhZ3MKK3sK
KyAgICBBU1NFUlQoc3RyZWFtRGF0YVBhcnNlciA9PSBfcGFyc2VyKTsKKyAgICBfcGFyZW50LT5k
aWRQcm92aWRlTWVkaWFEYXRhRm9yVHJhY2tJRCh0cmFja0lELCBtZWRpYURhdGEsIG1lZGlhVHlw
ZSwgZmxhZ3MpOworfQorCistICh2b2lkKXN0cmVhbURhdGFQYXJzZXI6KEFWU3RyZWFtRGF0YVBh
cnNlciAqKXN0cmVhbURhdGFQYXJzZXIgZGlkUmVhY2hFbmRPZlRyYWNrV2l0aFRyYWNrSUQ6KENN
UGVyc2lzdGVudFRyYWNrSUQpdHJhY2tJRCBtZWRpYVR5cGU6KE5TU3RyaW5nICopbWVkaWFUeXBl
Cit7CisgICAgQVNTRVJUKHN0cmVhbURhdGFQYXJzZXIgPT0gX3BhcnNlcik7CisgICAgX3BhcmVu
dC0+ZGlkUmVhY2hFbmRPZlRyYWNrV2l0aFRyYWNrSUQodHJhY2tJRCwgbWVkaWFUeXBlKTsKK30K
K0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBt
YXJrIE1lZGlhU2FtcGxlQVZGT2JqQworCitjbGFzcyBNZWRpYVNhbXBsZUFWRk9iakMgOiBwdWJs
aWMgTWVkaWFTYW1wbGUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFTYW1wbGVB
VkZPYmpDPiBjcmVhdGUoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlLCBpbnQgdHJhY2tJRCkgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU2FtcGxlQVZGT2JqQyhzYW1wbGUsIHRyYWNrSUQpKTsg
fQorICAgIHZpcnR1YWwgfk1lZGlhU2FtcGxlQVZGT2JqQygpIHsgfQorCisgICAgdmlydHVhbCBN
ZWRpYVRpbWUgcHJlc2VudGF0aW9uVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRvTWVk
aWFUaW1lKENNU2FtcGxlQnVmZmVyR2V0UHJlc2VudGF0aW9uVGltZVN0YW1wKG1fc2FtcGxlLmdl
dCgpKSk7IH0KKyAgICB2aXJ0dWFsIE1lZGlhVGltZSBkZWNvZGVUaW1lKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gdG9NZWRpYVRpbWUoQ01TYW1wbGVCdWZmZXJHZXREZWNvZGVUaW1lU3RhbXAo
bV9zYW1wbGUuZ2V0KCkpKTsgfQorICAgIHZpcnR1YWwgTWVkaWFUaW1lIGR1cmF0aW9uKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gdG9NZWRpYVRpbWUoQ01TYW1wbGVCdWZmZXJHZXREdXJhdGlv
bihtX3NhbXBsZS5nZXQoKSkpOyB9CisgICAgdmlydHVhbCBBdG9taWNTdHJpbmcgdHJhY2tJRCgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faWQ7IH0KKworICAgIHZpcnR1YWwgU2FtcGxlRmxh
Z3MgZmxhZ3MoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtU2FtcGxlIHBs
YXRmb3JtU2FtcGxlKCkgT1ZFUlJJREU7CisKK3Byb3RlY3RlZDoKKyAgICBNZWRpYVNhbXBsZUFW
Rk9iakMoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlLCBpbnQgdHJhY2tJRCkKKyAgICAgICAgOiBt
X3NhbXBsZShzYW1wbGUpCisgICAgICAgICwgbV9pZChTdHJpbmc6OmZvcm1hdCgiJWQiLCB0cmFj
a0lEKSkKKyAgICB7CisgICAgfQorCisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBt
X3NhbXBsZTsKKyAgICBBdG9taWNTdHJpbmcgbV9pZDsKK307CisKK1BsYXRmb3JtU2FtcGxlIE1l
ZGlhU2FtcGxlQVZGT2JqQzo6cGxhdGZvcm1TYW1wbGUoKQoreworICAgIFBsYXRmb3JtU2FtcGxl
IHNhbXBsZSA9IHsgUGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVyVHlwZSwgeyAuY21TYW1w
bGVCdWZmZXIgPSBtX3NhbXBsZS5nZXQoKSB9IH07CisgICAgcmV0dXJuIHNhbXBsZTsKK30KKwor
c3RhdGljIGJvb2wgQ01TYW1wbGVCdWZmZXJJc1JhbmRvbUFjY2VzcyhDTVNhbXBsZUJ1ZmZlclJl
ZiBzYW1wbGUpCit7CisgICAgQ0ZBcnJheVJlZiBhdHRhY2htZW50cyA9IENNU2FtcGxlQnVmZmVy
R2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1wbGUsIGZhbHNlKTsKKyAgICBmb3IgKENGSW5k
ZXggaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHMpOyArK2kpIHsKKyAgICAg
ICAgQ0ZEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnREaWN0ID0gKENGRGljdGlvbmFyeVJlZilDRkFy
cmF5R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1lbnRzLCBpKTsKKyAgICAgICAgaWYgKCFDRkRpY3Rp
b25hcnlDb250YWluc0tleShhdHRhY2htZW50RGljdCwga0NNU2FtcGxlQXR0YWNobWVudEtleV9O
b3RTeW5jKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK01lZGlhU2FtcGxlOjpTYW1wbGVGbGFncyBNZWRpYVNhbXBsZUFWRk9iakM6OmZs
YWdzKCkgY29uc3QKK3sKKyAgICBpbnQgcmV0dXJuVmFsdWUgPSBNZWRpYVNhbXBsZTo6Tm9uZTsK
KworICAgIGlmIChDTVNhbXBsZUJ1ZmZlcklzUmFuZG9tQWNjZXNzKG1fc2FtcGxlLmdldCgpKSkK
KyAgICAgICAgcmV0dXJuVmFsdWUgfD0gTWVkaWFTYW1wbGU6OklzU3luYzsKKworICAgIHJldHVy
biBTYW1wbGVGbGFncyhyZXR1cm5WYWx1ZSk7Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21h
IG1hcmsgTWVkaWFEZXNjcmlwdGlvbkFWRk9iakMKKworY2xhc3MgTWVkaWFEZXNjcmlwdGlvbkFW
Rk9iakMgOiBwdWJsaWMgTWVkaWFEZXNjcmlwdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZlB0cjxNZWRpYURlc2NyaXB0aW9uQVZGT2JqQz4gY3JlYXRlKEFWQXNzZXRUcmFjayogdHJhY2sp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYURlc2NyaXB0aW9uQVZGT2JqQyh0cmFjaykpOyB9
CisgICAgdmlydHVhbCB+TWVkaWFEZXNjcmlwdGlvbkFWRk9iakMoKSB7IH0KKworICAgIHZpcnR1
YWwgQXRvbWljU3RyaW5nIGNvZGVjKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9jb2RlYzsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1ZpZGVvKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9p
c1ZpZGVvOyB9CisgICAgdmlydHVhbCBib29sIGlzQXVkaW8oKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX2lzQXVkaW87IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0KCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gbV9pc1RleHQ7IH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBNZWRpYURlc2Ny
aXB0aW9uQVZGT2JqQyhBVkFzc2V0VHJhY2sqIHRyYWNrKQorICAgICAgICA6IG1faXNWaWRlbyhb
dHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWNWaXN1YWxd
KQorICAgICAgICAsIG1faXNBdWRpbyhbdHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1l
ZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlXSkKKyAgICAgICAgLCBtX2lzVGV4dChbdHJhY2sgaGFz
TWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWNMZWdpYmxlXSkKKyAgICB7
CisgICAgICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZGVzY3JpcHRpb24gPSAoQ01Gb3JtYXRE
ZXNjcmlwdGlvblJlZilbW3RyYWNrIGZvcm1hdERlc2NyaXB0aW9uc10gZmlyc3RPYmplY3RdOwor
ICAgICAgICBpZiAoZGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgIEZvdXJDaGFyQ29kZSBjb2Rl
YyA9IENNRm9ybWF0RGVzY3JpcHRpb25HZXRNZWRpYVN1YlR5cGUoZGVzY3JpcHRpb24pOworICAg
ICAgICAgICAgbV9jb2RlYyA9IEF0b21pY1N0cmluZyhyZWludGVycHJldF9jYXN0PExDaGFyKj4o
JmNvZGVjKSwgNCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBdG9taWNTdHJpbmcgbV9jb2Rl
YzsKKyAgICBib29sIG1faXNWaWRlbzsKKyAgICBib29sIG1faXNBdWRpbzsKKyAgICBib29sIG1f
aXNUZXh0OworfTsKKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBTb3VyY2VCdWZmZXJQ
cml2YXRlQVZGT2JqQworCitSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM+IFNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpjcmVhdGUoTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQyog
cGFyZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakMocGFyZW50KSk7Cit9CisKK1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpTb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQyhNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKiBwYXJlbnQpCisg
ICAgOiBtX3BhcmVudChwYXJlbnQpCisgICAgLCBtX2NsaWVudCgwKQorICAgICwgbV9wYXJzZXIo
YWRvcHROUyhbW2dldEFWU3RyZWFtRGF0YVBhcnNlckNsYXNzKCkgYWxsb2NdIGluaXRdKSkKKyAg
ICAsIG1fZGVsZWdhdGUoYWRvcHROUyhbW1dlYkFWU3RyZWFtRGF0YVBhcnNlckxpc3RlbmVyIGFs
bG9jXSBpbml0V2l0aFBhcnNlcjptX3BhcnNlci5nZXQoKSBwYXJlbnQ6dGhpc10pKQorICAgICwg
bV9wYXJzaW5nU3VjY2VlZGVkKHRydWUpCit7Cit9CisKK1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZP
YmpDOjp+U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMoKQoreworICAgIGlmIChtX2Rpc3BsYXlM
YXllcikgeworICAgICAgICBtX3BhcmVudC0+cGxheWVyKCktPnJlbW92ZURpc3BsYXlMYXllciht
X2Rpc3BsYXlMYXllci5nZXQoKSk7CisgICAgICAgIFttX2Rpc3BsYXlMYXllciBmbHVzaEFuZFJl
bW92ZUltYWdlXTsKKyAgICAgICAgW21fZGlzcGxheUxheWVyIHN0b3BSZXF1ZXN0aW5nTWVkaWFE
YXRhXTsKKyAgICAgICAgbV9kaXNwbGF5TGF5ZXIgPSBudWxscHRyOworICAgIH0KK30KKwordm9p
ZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZGlkUGFyc2VTdHJlYW1EYXRhQXNBc3NldChB
VkFzc2V0KiBhc3NldCkKK3sKKyAgICBMT0coTWVkaWEsICJTb3VyY2VCdWZmZXJQcml2YXRlQVZG
T2JqQzo6ZGlkUGFyc2VTdHJlYW1EYXRhQXNBc3NldCglcCkiLCB0aGlzKTsKKworICAgIG1fYXNz
ZXQgPSBhc3NldDsKKworICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0
aW9uU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQuZHVyYXRpb24gPSB0b01lZGlhVGltZShb
bV9hc3NldCBkdXJhdGlvbl0pOworCisgICAgZm9yIChBVkFzc2V0VHJhY2sqIHRyYWNrIGluIFtt
X2Fzc2V0IHRyYWNrc10pIHsKKyAgICAgICAgaWYgKFt0cmFjayBoYXNNZWRpYUNoYXJhY3Rlcmlz
dGljOkFWTWVkaWFDaGFyYWN0ZXJpc3RpY1Zpc3VhbF0pIHsKKyAgICAgICAgICAgIFNvdXJjZUJ1
ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6VmlkZW9UcmFja0luZm9y
bWF0aW9uIGluZm87CisgICAgICAgICAgICBpbmZvLnRyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakM6OmNyZWF0ZSh0cmFjaywgdGhpcyk7CisgICAgICAgICAgICBpbmZv
LmRlc2NyaXB0aW9uID0gTWVkaWFEZXNjcmlwdGlvbkFWRk9iakM6OmNyZWF0ZSh0cmFjayk7Cisg
ICAgICAgICAgICBzZWdtZW50LnZpZGVvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAgICAgfSBl
bHNlIGlmIChbdHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0
aWNBdWRpYmxlXSkgeworICAgICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5p
dGlhbGl6YXRpb25TZWdtZW50OjpBdWRpb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKKyAgICAgICAg
ICAgIGluZm8udHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y3Jl
YXRlKHRyYWNrLCB0aGlzKTsKKyAgICAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBNZWRpYURl
c2NyaXB0aW9uQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsKKyAgICAgICAgICAgIHNlZ21lbnQuYXVk
aW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEFk
ZCBUZXh0VHJhY2sgc3VwcG9ydAorICAgIH0KKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAg
bV9jbGllbnQtPnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdt
ZW50KHRoaXMsIHNlZ21lbnQpOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
OjpkaWRGYWlsVG9QYXJzZVN0cmVhbURhdGFXaXRoRXJyb3IoTlNFcnJvciogZXJyb3IpCit7Cisg
ICAgTE9HKE1lZGlhLCAiU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmRpZEZhaWxUb1BhcnNl
U3RyZWFtRGF0YVdpdGhFcnJvciglcCkgLSBlcnJvcjpcIiVzXCIiLCB0aGlzLCBTdHJpbmcoW2Vy
cm9yIGRlc2NyaXB0aW9uXSkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBtX3BhcnNpbmdTdWNjZWVk
ZWQgPSBmYWxzZTsKK30KKworc3RydWN0IFByb2Nlc3NDb2RlZEZyYW1lSW5mbyB7CisgICAgU291
cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMqIHNvdXJjZUJ1ZmZlcjsKKyAgICBpbnQgdHJhY2tJRDsK
KyAgICBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZTsKK307CisKK3N0YXRpYyBPU1N0YXR1cyBjYWxs
UHJvY2Vzc0NvZGVkRnJhbWVGb3JFYWNoU2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1
ZmZlciwgQ01JdGVtQ291bnQsIHZvaWQgKnJlZmNvbikKK3sKKyAgICBQcm9jZXNzQ29kZWRGcmFt
ZUluZm8qIGluZm8gPSAoUHJvY2Vzc0NvZGVkRnJhbWVJbmZvKilyZWZjb247CisgICAgcmV0dXJu
IGluZm8tPnNvdXJjZUJ1ZmZlci0+cHJvY2Vzc0NvZGVkRnJhbWUoaW5mby0+dHJhY2tJRCwgc2Ft
cGxlQnVmZmVyLCBpbmZvLT5tZWRpYVR5cGUpOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZh
dGVBVkZPYmpDOjpkaWRQcm92aWRlTWVkaWFEYXRhRm9yVHJhY2tJRChpbnQgdHJhY2tJRCwgQ01T
YW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyLCBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSwgdW5z
aWduZWQgZmxhZ3MpCit7CisgICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKKworICAgIFByb2Nlc3ND
b2RlZEZyYW1lSW5mbyBpbmZvID0ge3RoaXMsIHRyYWNrSUQsIG1lZGlhVHlwZX07CisgICAgQ01T
YW1wbGVCdWZmZXJDYWxsRm9yRWFjaFNhbXBsZShzYW1wbGVCdWZmZXIsICZjYWxsUHJvY2Vzc0Nv
ZGVkRnJhbWVGb3JFYWNoU2FtcGxlLCAmaW5mbyk7Cit9CisKK2Jvb2wgU291cmNlQnVmZmVyUHJp
dmF0ZUFWRk9iakM6OnByb2Nlc3NDb2RlZEZyYW1lKGludCB0cmFja0lELCBDTVNhbXBsZUJ1ZmZl
clJlZiBzYW1wbGVCdWZmZXIsIGNvbnN0IFN0cmluZyYpCit7CisgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVTYW1wbGUodGhp
cywgTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLCB0cmFja0lEKSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6
ZGlkUmVhY2hFbmRPZlRyYWNrV2l0aFRyYWNrSUQoaW50IHRyYWNrSUQsIGNvbnN0IFN0cmluZyYg
bWVkaWFUeXBlKQoreworICAgIFVOVVNFRF9QQVJBTShtZWRpYVR5cGUpOworICAgIFVOVVNFRF9Q
QVJBTSh0cmFja0lEKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNvdXJjZUJ1
ZmZlclByaXZhdGVBVkZPYmpDOjpzZXRDbGllbnQoU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudCog
Y2xpZW50KQoreworICAgIG1fY2xpZW50ID0gY2xpZW50OworfQorCitTb3VyY2VCdWZmZXJQcml2
YXRlOjpBcHBlbmRSZXN1bHQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmFwcGVuZChjb25z
dCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgbV9wYXJzaW5n
U3VjY2VlZGVkID0gdHJ1ZTsKKworICAgIExPRyhNZWRpYSwgIlNvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDOjphcHBlbmQoJXApIC0gZGF0YTolcCwgbGVuZ3RoOiVkIiwgdGhpcywgZGF0YSwgbGVu
Z3RoKTsKKyAgICBbbV9wYXJzZXIgYXBwZW5kU3RyZWFtRGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0
ZXM6ZGF0YSBsZW5ndGg6bGVuZ3RoXV07CisKKyAgICBpZiAobV9wYXJzaW5nU3VjY2VlZGVkKQor
ICAgICAgICBtX3BhcmVudC0+cGxheWVyKCktPnNldExvYWRpbmdQcm9ncmVzc3NlZCh0cnVlKTsK
KworICAgIHJldHVybiBtX3BhcnNpbmdTdWNjZWVkZWQgPyBBcHBlbmRTdWNjZWVkZWQgOiBQYXJz
aW5nRmFpbGVkOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjphYm9ydCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRl
QVZGT2JqQzo6cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSgpCit7CisgICAgaWYgKG1fZGlzcGxheUxh
eWVyKSB7CisgICAgICAgIG1fcGFyZW50LT5wbGF5ZXIoKS0+cmVtb3ZlRGlzcGxheUxheWVyKG1f
ZGlzcGxheUxheWVyLmdldCgpKTsKKyAgICAgICAgW21fZGlzcGxheUxheWVyIGZsdXNoXTsKKyAg
ICAgICAgW21fZGlzcGxheUxheWVyIHN0b3BSZXF1ZXN0aW5nTWVkaWFEYXRhXTsKKyAgICAgICAg
bV9kaXNwbGF5TGF5ZXIgPSBudWxscHRyOworICAgIH0KKworICAgIG1fcGFyZW50LT5yZW1vdmVT
b3VyY2VCdWZmZXIodGhpcyk7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIFNvdXJjZUJ1
ZmZlclByaXZhdGVBVkZPYmpDOjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
YXJlbnQtPnBsYXllcigpLT5yZWFkeVN0YXRlKCk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUHJp
dmF0ZUFWRk9iakM6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlT
dGF0ZSkKK3sKKyAgICBtX3BhcmVudC0+cGxheWVyKCktPnNldFJlYWR5U3RhdGUocmVhZHlTdGF0
ZSk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmV2aWN0Q29kZWRGcmFt
ZXMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgU291cmNlQnVmZmVyUHJp
dmF0ZUFWRk9iakM6OmlzRnVsbCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKKworYm9vbCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6aGFzVmlk
ZW8oKSBjb25zdAoreworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBtX2NsaWVudC0+c291cmNlQnVmZmVyUHJpdmF0ZUhhc1ZpZGVvKHRoaXMp
OworfQorCitib29sIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpoYXNBdWRpbygpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIG1fY2xpZW50LT5zb3VyY2VCdWZmZXJQcml2YXRlSGFzQXVkaW8odGhpcyk7Cit9CisKK3Zv
aWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnRyYWNrRGlkQ2hhbmdlRW5hYmxlZChWaWRl
b1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyogdHJhY2spCit7CisgICAgaW50IHRyYWNr
SUQgPSB0cmFjay0+dHJhY2tJRCgpOworICAgIGlmICghdHJhY2stPnNlbGVjdGVkKCkgJiYgbV9l
bmFibGVkVmlkZW9UcmFja0lEID09IHRyYWNrSUQpIHsKKyAgICAgICAgbV9lbmFibGVkVmlkZW9U
cmFja0lEID0gLTE7CisgICAgICAgIFttX3BhcnNlciBzZXRTaG91bGRQcm92aWRlTWVkaWFEYXRh
Ok5PIGZvclRyYWNrSUQ6dHJhY2tJRF07CisgICAgfSBlbHNlIGlmICh0cmFjay0+c2VsZWN0ZWQo
KSkgeworICAgICAgICBtX2VuYWJsZWRWaWRlb1RyYWNrSUQgPSB0cmFja0lEOworICAgICAgICBb
bV9wYXJzZXIgc2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YTpZRVMgZm9yVHJhY2tJRDp0cmFja0lE
XTsKKyAgICAgICAgaWYgKCFtX2Rpc3BsYXlMYXllcikgeworICAgICAgICAgICAgbV9kaXNwbGF5
TGF5ZXIgPSBbW2dldEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyQ2xhc3MoKSBhbGxvY10gaW5p
dF07CisgICAgICAgICAgICBbbV9kaXNwbGF5TGF5ZXIgcmVxdWVzdE1lZGlhRGF0YVdoZW5SZWFk
eU9uUXVldWU6ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSB1c2luZ0Jsb2NrOl57CisgICAgICAg
ICAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+c291
cmNlQnVmZmVyUHJpdmF0ZURpZEJlY29tZVJlYWR5Rm9yTW9yZVNhbXBsZXModGhpcyk7CisgICAg
ICAgICAgICB9XTsKKyAgICAgICAgICAgIG1fcGFyZW50LT5wbGF5ZXIoKS0+YWRkRGlzcGxheUxh
eWVyKG1fZGlzcGxheUxheWVyLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBT
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6dHJhY2tEaWRDaGFuZ2VFbmFibGVkKEF1ZGlvVHJh
Y2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKikKK3sKKyAgICAvLyBOby1vcC4KK30KKworc3Rh
dGljIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gY3JlYXRlTm9uRGlzcGxheWluZ0NvcHko
Q01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyKQoreworICAgIENNU2FtcGxlQnVmZmVyUmVm
IG5ld1NhbXBsZUJ1ZmZlciA9IDA7CisgICAgQ01TYW1wbGVCdWZmZXJDcmVhdGVDb3B5KGtDRkFs
bG9jYXRvckRlZmF1bHQsIHNhbXBsZUJ1ZmZlciwgJm5ld1NhbXBsZUJ1ZmZlcik7CisgICAgaWYg
KCFuZXdTYW1wbGVCdWZmZXIpCisgICAgICAgIHJldHVybiBzYW1wbGVCdWZmZXI7CisKKyAgICBD
RkFycmF5UmVmIGF0dGFjaG1lbnRzQXJyYXkgPSBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFj
aG1lbnRzQXJyYXkobmV3U2FtcGxlQnVmZmVyLCB0cnVlKTsKKyAgICBmb3IgKENGSW5kZXggaSA9
IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7ICsraSkgeworICAgICAg
ICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gKENGTXV0YWJsZURpY3Rpb25h
cnlSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBpKTsKKyAgICAg
ICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoYXR0YWNobWVudHMsIGtDTVNhbXBsZUF0dGFjaG1lbnRL
ZXlfRG9Ob3REaXNwbGF5LCBrQ0ZCb29sZWFuVHJ1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIGFk
b3B0Q0YobmV3U2FtcGxlQnVmZmVyKTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZG
T2JqQzo6Zmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMoVmVjdG9yPFJlZlB0cjxN
ZWRpYVNhbXBsZT4+IG1lZGlhU2FtcGxlcywgQXRvbWljU3RyaW5nIHRyYWNrSUQpCit7CisgICAg
aWYgKHRyYWNrSUQudG9JbnQoKSAhPSBtX2VuYWJsZWRWaWRlb1RyYWNrSUQpCisgICAgICAgIHJl
dHVybjsKKworICAgIExPRyhNZWRpYSwgIlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpmbHVz
aEFuZEVucXVldWVOb25EaXNwbGF5aW5nU2FtcGxlcyglcCkgc2FtcGxlczogJWQgc2FtcGxlcywg
dHJhY2tJZDogJWQiLCB0aGlzLCBtZWRpYVNhbXBsZXMuc2l6ZSgpLCB0cmFja0lELnRvSW50KCkp
OworCisgICAgW21fZGlzcGxheUxheWVyIGZsdXNoXTsKKworICAgIGZvciAoYXV0byBpdCA9IG1l
ZGlhU2FtcGxlcy5iZWdpbigpLCBlbmQgPSBtZWRpYVNhbXBsZXMuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBSZWZQdHI8TWVkaWFTYW1wbGU+JiBtZWRpYVNhbXBsZSA9ICppdDsK
KworICAgICAgICBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9ybVNhbXBsZSA9IG1lZGlhU2FtcGxlLT5w
bGF0Zm9ybVNhbXBsZSgpOworICAgICAgICBpZiAocGxhdGZvcm1TYW1wbGUudHlwZSAhPSBQbGF0
Zm9ybVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBlKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gc2FtcGxlQnVmZmVyID0gY3JlYXRl
Tm9uRGlzcGxheWluZ0NvcHkocGxhdGZvcm1TYW1wbGUuc2FtcGxlLmNtU2FtcGxlQnVmZmVyKTsK
KworICAgICAgICBbbV9kaXNwbGF5TGF5ZXIgZW5xdWV1ZVNhbXBsZUJ1ZmZlcjpzYW1wbGVCdWZm
ZXIuZ2V0KCldOworICAgIH0KKworICAgIG1fcGFyZW50LT5wbGF5ZXIoKS0+c2V0SGFzQXZhaWxh
YmxlVmlkZW9GcmFtZShmYWxzZSk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9i
akM6OmVucXVldWVTYW1wbGUoUGFzc1JlZlB0cjxNZWRpYVNhbXBsZT4gcHJwTWVkaWFTYW1wbGUs
IEF0b21pY1N0cmluZyB0cmFja0lEKQoreworICAgIGlmICh0cmFja0lELnRvSW50KCkgIT0gbV9l
bmFibGVkVmlkZW9UcmFja0lEKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8TWVkaWFT
YW1wbGU+IG1lZGlhU2FtcGxlID0gcHJwTWVkaWFTYW1wbGU7CisKKyAgICBQbGF0Zm9ybVNhbXBs
ZSBwbGF0Zm9ybVNhbXBsZSA9IG1lZGlhU2FtcGxlLT5wbGF0Zm9ybVNhbXBsZSgpOworICAgIGlm
IChwbGF0Zm9ybVNhbXBsZS50eXBlICE9IFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1ZmZlclR5
cGUpCisgICAgICAgIHJldHVybjsKKworICAgIFttX2Rpc3BsYXlMYXllciBlbnF1ZXVlU2FtcGxl
QnVmZmVyOnBsYXRmb3JtU2FtcGxlLnNhbXBsZS5jbVNhbXBsZUJ1ZmZlcl07CisgICAgbV9wYXJl
bnQtPnBsYXllcigpLT5zZXRIYXNBdmFpbGFibGVWaWRlb0ZyYW1lKHRydWUpOworfQorCitib29s
IFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjppc1JlYWR5Rm9yTW9yZVNhbXBsZXMoKQorewor
ICAgIHJldHVybiBbbV9kaXNwbGF5TGF5ZXIgaXNSZWFkeUZvck1vcmVNZWRpYURhdGFdOworfQor
Cit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpzZXRBY3RpdmUoYm9vbCBpc0FjdGl2
ZSkKK3sKKyAgICBtX3BhcmVudC0+c291cmNlQnVmZmVyUHJpdmF0ZURpZENoYW5nZUFjdGl2ZVN0
YXRlKHRoaXMsIGlzQWN0aXZlKTsKK30KKworTWVkaWFUaW1lIFNvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDOjpmYXN0U2Vla1RpbWVGb3JNZWRpYVRpbWUoTWVkaWFUaW1lIHRpbWUsIE1lZGlhVGlt
ZSBuZWdhdGl2ZVRocmVzaG9sZCwgTWVkaWFUaW1lIHBvc2l0aXZlVGhyZXNob2xkKQoreworICAg
IGlmIChtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LT5zb3VyY2VCdWZmZXJQcml2
YXRlRmFzdFNlZWtUaW1lRm9yTWVkaWFUaW1lKHRoaXMsIHRpbWUsIG5lZ2F0aXZlVGhyZXNob2xk
LCBwb3NpdGl2ZVRocmVzaG9sZCk7CisgICAgcmV0dXJuIHRpbWU7Cit9CisKK3ZvaWQgU291cmNl
QnVmZmVyUHJpdmF0ZUFWRk9iakM6OnNlZWtUb1RpbWUoTWVkaWFUaW1lIHRpbWUpCit7CisgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c291cmNlQnVmZmVyUHJpdmF0ZVNlZWtU
b1RpbWUodGhpcywgdGltZSk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TT1VS
Q0UpICYmIFVTRShBVkZPVU5EQVRJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9WaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9WaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTRiZDg4Yzg4OGIzODc3NzQ2MWNiMjgxMTk2YzQ1MTBiOTM4YzM0NAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL1ZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmNwcApAQCAtMCwwICsxLDgz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZpZGVvVHJhY2tQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKSAm
JiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJBVlRyYWNrUHJpdmF0ZUFWRk9iakNJ
bXBsLmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Vmlk
ZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoQVZBc3NldFRyYWNrKiB0cmFjaywgU291
cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMqIHBhcmVudCkKKyAgICA6IG1faW1wbChzdGQ6Om1ha2Vf
dW5pcXVlPEFWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGw+KHRyYWNrKSkKKyAgICAsIG1fcGFyZW50
KHBhcmVudCkKKyAgICAsIG1fdHJhY2tJRCgtMSkKKyAgICAsIG1fc2VsZWN0ZWQoZmFsc2UpCit7
CisgICAgcmVzZXRQcm9wZXJ0aWVzRnJvbVRyYWNrKCk7Cit9CisKK3ZvaWQgVmlkZW9UcmFja1By
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnJlc2V0UHJvcGVydGllc0Zyb21UcmFjaygpCit7Cisg
ICAgbV90cmFja0lEID0gbV9pbXBsLT50cmFja0lEKCk7CisKKyAgICBzZXRLaW5kKG1faW1wbC0+
dmlkZW9LaW5kKCkpOworICAgIHNldElkKG1faW1wbC0+aWQoKSk7CisgICAgc2V0TGFiZWwobV9p
bXBsLT5sYWJlbCgpKTsKKyAgICBzZXRMYW5ndWFnZShtX2ltcGwtPmxhbmd1YWdlKCkpOworfQor
Cit2b2lkIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZXRBc3NldFRyYWNr
KEFWQXNzZXRUcmFjayAqdHJhY2spCit7CisgICAgbV9pbXBsID0gc3RkOjptYWtlX3VuaXF1ZTxB
VlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsPih0cmFjayk7CisgICAgcmVzZXRQcm9wZXJ0aWVzRnJv
bVRyYWNrKCk7Cit9CisKK0FWQXNzZXRUcmFjayogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OmFzc2V0VHJhY2soKQoreworICAgIHJldHVybiBtX2ltcGwtPmFzc2V0VHJhY2so
KTsKK30KKworCitib29sIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWxl
Y3RlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2VsZWN0ZWQ7Cit9CisKK3ZvaWQgVmlkZW9U
cmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldFNlbGVjdGVkKGJvb2wgc2VsZWN0ZWQp
Cit7CisgICAgaWYgKG1fc2VsZWN0ZWQgPT0gc2VsZWN0ZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fc2VsZWN0ZWQgPSBzZWxlY3RlZDsKKyAgICBtX3BhcmVudC0+dHJhY2tEaWRDaGFuZ2VF
bmFibGVkKHRoaXMpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvVmlkZW9UcmFja1ByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL1ZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjMzNmUxYmJjZjc2YmI5YjY4YTVhNzFkNWRiYTQzOWFlMzY5NDI2YQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL1ZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKQEAgLTAsMCArMSw3
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akNfaAorI2RlZmluZSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQ19oCisKKyNp
bmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZUFWRi5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQorCitPQkpDX0NMQVNTIEFWQXNzZXRUcmFjazsKK09C
SkNfQ0xBU1MgQVZQbGF5ZXJJdGVtVHJhY2s7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbDsKK2NsYXNzIFNvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDOworCitjbGFzcyBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyBGSU5B
TCA6IHB1YmxpYyBWaWRlb1RyYWNrUHJpdmF0ZUFWRiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMpCitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQz4gY3JlYXRlKEFW
QXNzZXRUcmFjayogdHJhY2ssIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKiBwYXJlbnQpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDKHRyYWNrLCBwYXJlbnQpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
c2VsZWN0ZWQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWQo
Ym9vbCkgT1ZFUlJJREU7CisKKyAgICB2b2lkIHNldEFzc2V0VHJhY2soQVZBc3NldFRyYWNrKik7
CisgICAgQVZBc3NldFRyYWNrKiBhc3NldFRyYWNrKCk7CisKKyAgICBpbnQgdHJhY2tJRCgpIHsg
cmV0dXJuIG1fdHJhY2tJRDsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFZpZGVvVHJhY2tQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKEFWQXNzZXRUcmFjayosIFNvdXJjZUJ1ZmZlclByaXZh
dGVBVkZPYmpDKiBwYXJlbnQpOworICAgIAorICAgIHZvaWQgcmVzZXRQcm9wZXJ0aWVzRnJvbVRy
YWNrKCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbD4g
bV9pbXBsOworICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKiBtX3BhcmVudDsKKyAgICBp
bnQgbV90cmFja0lEOworICAgIGJvb2wgbV9zZWxlY3RlZDsKK307CisKK30KKworI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVOQUJMRShWSURFT19UUkFDSykKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1DbG9ja0NNLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1DbG9ja0NNLmgKaW5kZXggOWVl
NDlhNzZhZmM5OGIzMGI5NmZjOTA3NGFjNWQ1YzY3Mzc3Y2QwNy4uODdlNzJjODI3ZjBlMjAzZGE3
MjM4ZWFmYjRmZmNkOTBmNWRiZTBhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1BsYXRmb3JtQ2xvY2tDTS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9QbGF0Zm9ybUNsb2NrQ00uaApAQCAtNTUsNiArNTUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHN0b3AoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNSdW5uaW5nKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gbV9ydW5uaW5nOyB9CiAKKyAgICBDTVRpbWViYXNlUmVmIHRp
bWViYXNlKCkgY29uc3QgeyByZXR1cm4gbV90aW1lYmFzZS5nZXQoKTsgfQorCiBwcml2YXRlOgog
ICAgIHZvaWQgaW5pdGlhbGl6ZVdpdGhUaW1pbmdTb3VyY2UoQ01DbG9ja1JlZik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Tb2Z0TGlua2luZy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmgKaW5kZXggODFjNTEwYWZiOTJiY2Q3
NDBlMDk1ZWFlMGJhOGFlMWQ4OTg1M2I4OS4uNTU0MWIwMDkyNzZjZTU2NzkwYWYyMmMyYTRlMzEz
YjQzZTFhMTY0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRM
aW5raW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmgK
QEAgLTExOCw2ICsxMTgsMjQgQEAKICAgICAgICAgcmV0dXJuIGNsYXNzIyNjbGFzc05hbWU7IFwK
ICAgICB9CiAKKyNkZWZpbmUgU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKGZyYW1ld29yaywgY2xh
c3NOYW1lKSBcCisgICAgc3RhdGljIENsYXNzIGluaXQjI2NsYXNzTmFtZSgpOyBcCisgICAgc3Rh
dGljIENsYXNzICgqZ2V0IyNjbGFzc05hbWUjI0NsYXNzKSgpID0gaW5pdCMjY2xhc3NOYW1lOyBc
CisgICAgc3RhdGljIENsYXNzIGNsYXNzIyNjbGFzc05hbWU7IFwKKyAgICBcCisgICAgc3RhdGlj
IENsYXNzIGNsYXNzTmFtZSMjRnVuY3Rpb24oKSBcCisgICAgeyBcCisgICAgICAgIHJldHVybiBj
bGFzcyMjY2xhc3NOYW1lOyBcCisgICAgfVwKKyAgICBcCisgICAgc3RhdGljIENsYXNzIGluaXQj
I2NsYXNzTmFtZSgpIFwKKyAgICB7IFwKKyAgICAgICAgZnJhbWV3b3JrIyNMaWJyYXJ5KCk7IFwK
KyAgICAgICAgY2xhc3MjI2NsYXNzTmFtZSA9IG9iamNfZ2V0Q2xhc3MoI2NsYXNzTmFtZSk7IFwK
KyAgICAgICAgZ2V0IyNjbGFzc05hbWUjI0NsYXNzID0gY2xhc3NOYW1lIyNGdW5jdGlvbjsgXAor
ICAgICAgICByZXR1cm4gY2xhc3MjI2NsYXNzTmFtZTsgXAorICAgIH0KKwogI2RlZmluZSBTT0ZU
X0xJTktfUE9JTlRFUihmcmFtZXdvcmssIG5hbWUsIHR5cGUpIFwKICAgICBzdGF0aWMgdHlwZSBp
bml0IyNuYW1lKCk7IFwKICAgICBzdGF0aWMgdHlwZSAoKmdldCMjbmFtZSkoKSA9IGluaXQjI25h
bWU7IFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218225</attachid>
            <date>2013-12-02 15:27:33 -0800</date>
            <delta_ts>2013-12-02 16:47:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-123378-20131202152732.patch</filename>
            <type>text/plain</type>
            <size>106731</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5OTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhiNmJhMjBkYTY5MTcz
OGM1M2MzMDVjZjM3YWRkMTc0YzBjMWQwZi4uMDI5YzdiYWY3YzAxZDlkYjk3MWU4M2EzZjdiNmJl
M2YyZDNjZGE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3NiBAQAorMjAxMy0xMS0xNSAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAgICBbTVNFXVtNYWNdIEFkZCBh
IG5ldyBNU0UtY29tcGF0aWJsZSBNZWRpYVBsYXllclByaXZhdGUgaW1wbGVtZW50YXRpb24sIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMzc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIEFWRm91bmRhdGlvbiBpbXBsZW1lbnRh
dGlvbiBvZiBNZWRpYVBsYXllclByaXZhdGUgd2hpY2ggY3JlYXRlcyBhbmQgdXNlcworICAgICAg
ICBNZWRpYVNvdXJjZVByaXZhdGUgYW5kIFNvdXJjZUJ1ZmZlclByaXZhdGUgc3ViY2xhc3Nlcy4K
KworICAgICAgICBBZGQgdGhlIG5ldyBtZWRpYSBlbmdpbmUgdG8gdGhlIGxpc3Qgb2YgaW5zdGFs
bGVkIGVuZ2luZXM6CisgICAgICAgICogcGxhdGZvcm0vTWVkaWFTYW1wbGUuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpp
bnN0YWxsZWRNZWRpYUVuZ2luZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmg6CisKKyAgICAgICAgQWRkIHRoZSBuZXcgZmlsZXMgdG8gdGhlIHByb2plY3Q6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgIERy
aXZlIGJ5IGZpeCBmb3IgcG9ydHMgd2hvIGltcGxlbWVudCBzZWVrRG91YmxlKCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmg6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OnNlZWtXaXRoVG9sZXJhbmNlKToKKwor
ICAgICAgICBBZGQgbmV3IFZpZGVvIGFuZCBBdWRpb1RyYWNrUHJpdmF0ZSB0eXBlcyB3aGljaCBo
YW5kbGUgdGhlaXIgb3duIGVuYWJsZSBzdGF0ZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9BdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5j
cHA6IEFkZGVkCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6QXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnJlc2V0UHJvcGVy
dGllc0Zyb21UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6c2V0QXNzZXRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1Ry
YWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6YXNzZXRUcmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0RW5hYmxlZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQXVkaW9UcmFja1By
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDogQWRkZWQKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9WaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakM6OlZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpyZXNldFBy
b3BlcnRpZXNGcm9tVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakM6OnNldEFzc2V0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Vmlk
ZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmFzc2V0VHJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldFNlbGVjdGVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9WaWRlb1Ry
YWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOiBBZGRlZC4KKworICAgICAgICBBZGQgYSBu
ZXcgTWVkaWFQbGF5ZXJQcml2YXRlIHdoaWNoIGNhbiBoYW5kbGUgTWVkaWFTb3VyY2Ugb2JqZWN0
czoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQzo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qzo6fk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnJlZ2lzdGVyTWVkaWFF
bmdpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjppc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjptaW1lVHlw
ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpsb2FkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y2FuY2Vs
TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnByZXBhcmVUb1BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwbGF0Zm9ybU1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cGxhdGZvcm1MYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjpwbGF5SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBhdXNlSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwYXVzZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdXBw
b3J0c1NjYW5uaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6bmF0dXJhbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpoYXNWaWRlbyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6Omhhc0F1ZGlvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0Vmlz
aWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OmR1cmF0aW9uRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y3VycmVudFRpbWVEb3VibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdGFydFRpbWVEb3Vi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjppbml0aWFsVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtXaXRoVG9sZXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vla0ludGVybmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vl
a2luZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnNldFJhdGVEb3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpyZWFkeVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vla2Fi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjptYXhUaW1lU2Vla2FibGVEb3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjptaW5UaW1lU2Vla2FibGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpidWZmZXJlZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6
OmRpZExvYWRpbmdQcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBhaW50Q3VycmVudEZyYW1l
SW5Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6aGFzQXZhaWxhYmxlVmlkZW9GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN1cHBvcnRzQWNjZWxlcmF0ZWRS
ZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6Om1vdmllTG9hZFR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjpwcmVwYXJlRm9yUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6ZW5naW5lRGVzY3JpcHRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpsYW5ndWFnZU9m
UHJpbWFyeUF1ZGlvVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjpleHRyYU1lbW9yeUNvc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjplbnN1cmVMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmRlc3Ry
b3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OnVwZGF0ZUR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0UmVhZHlTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6
OnNldE5ldHdvcmtTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakM6OmFkZERpc3BsYXlMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnJlbW92ZURpc3BsYXlMYXllcik6
CisKKyAgICAgICAgQWRkIGEgbmV3IE1lZGlhU291cmNlUHJpdmF0ZSBpbXBsZW1lbnRhdGlvbjoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQzo6cGxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakM6OmFjdGl2ZVNvdXJjZUJ1ZmZlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW06IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6Ok1lZGlhU291
cmNlUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6fk1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6YWRkU291cmNlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6OnJlbW92ZVNvdXJjZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpkdXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzZXREdXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjptYXJrRW5kT2ZT
dHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6dW5t
YXJrRW5kT2ZTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZG
T2JqQzo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDOjpzZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakM6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRDaGFuZ2VBY3RpdmVTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDSGFzQXVkaW8pOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6aGFzQXVkaW8pOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQ0hhc1ZpZGVvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6Omhhc1ZpZGVvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6OnNlZWtUb1RpbWUpOgorCisg
ICAgICAgIEFkZCBhIG5ldyBTb3VyY2VCdWZmZXJQcml2YXRlIGltcGxlbWVudGF0aW9uOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tOiBBZGRlZC4KKyAgICAg
ICAgKC1bV2ViQVZTdHJlYW1EYXRhUGFyc2VyTGlzdGVuZXIgaW5pdFdpdGhQYXJzZXI6cGFyZW50
OldlYkNvcmU6Ol0pOgorICAgICAgICAoLVtXZWJBVlN0cmVhbURhdGFQYXJzZXJMaXN0ZW5lciBk
ZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkFWU3RyZWFtRGF0YVBhcnNlckxpc3RlbmVyIHN0cmVh
bURhdGFQYXJzZXI6ZGlkUGFyc2VTdHJlYW1EYXRhQXNBc3NldDpdKToKKyAgICAgICAgKC1bV2Vi
QVZTdHJlYW1EYXRhUGFyc2VyTGlzdGVuZXIgc3RyZWFtRGF0YVBhcnNlcjpkaWRGYWlsVG9QYXJz
ZVN0cmVhbURhdGFXaXRoRXJyb3I6XSk6CisgICAgICAgICgtW1dlYkFWU3RyZWFtRGF0YVBhcnNl
ckxpc3RlbmVyIHN0cmVhbURhdGFQYXJzZXI6ZGlkUHJvdmlkZU1lZGlhRGF0YTpmb3JUcmFja0lE
Om1lZGlhVHlwZTpmbGFnczpdKToKKyAgICAgICAgKC1bV2ViQVZTdHJlYW1EYXRhUGFyc2VyTGlz
dGVuZXIgc3RyZWFtRGF0YVBhcnNlcjpkaWRSZWFjaEVuZE9mVHJhY2tXaXRoVHJhY2tJRDptZWRp
YVR5cGU6XSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakM6On5NZWRpYVNhbXBsZUFWRk9i
akMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVBVkZPYmpDOjpNZWRpYVNhbXBsZUFW
Rk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVBVkZPYmpDOjpwbGF0Zm9ybVNh
bXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpDTVNhbXBsZUJ1ZmZlcklzUmFuZG9tQWNjZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlQVZGT2JqQzo6ZmxhZ3MpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFEZXNjcmlwdGlvbkFWRk9iakM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYURlc2NyaXB0aW9uQVZGT2JqQzo6fk1lZGlhRGVzY3JpcHRpb25BVkZPYmpDKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRGVzY3JpcHRpb25BVkZPYmpDOjpNZWRpYURlc2NyaXB0
aW9uQVZGT2JqQyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2Jq
Qzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
OjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQzo6flNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpkaWRQYXJzZVN0cmVhbURh
dGFBc0Fzc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
OjpkaWRGYWlsVG9QYXJzZVN0cmVhbURhdGFXaXRoRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6
Y2FsbFByb2Nlc3NDb2RlZEZyYW1lRm9yRWFjaFNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZGlkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNrSUQp
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnByb2Nlc3ND
b2RlZEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
OjpkaWRSZWFjaEVuZE9mVHJhY2tXaXRoVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpyZW1vdmVkRnJvbU1lZGlhU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpyZWFkeVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpldmljdENvZGVk
RnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpp
c0Z1bGwpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6Omhh
c1ZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpo
YXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6
dHJhY2tEaWRDaGFuZ2VFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU5vbkRpc3Bs
YXlpbmdDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
OjpmbHVzaEFuZEVucXVldWVOb25EaXNwbGF5aW5nU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZW5xdWV1ZVNhbXBsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6aXNSZWFkeUZvck1vcmVTYW1wbGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpzZXRBY3Rp
dmUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmZhc3RT
ZWVrVGltZUZvck1lZGlhVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQzo6c2Vla1RvVGltZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXRmb3Jt
Q2xvY2tDTS5oOgorCisgICAgICAgIEFkZCBhIFNPRlRfTElOS19DTEFTU19PUFRJT05BTCBtYWNy
bzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaDoKKwogMjAxMy0xMi0wMiAg
QmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgc2V0dGluZyB0
byBvcHQgaW50byBhIG1vZGUgd2hlcmUgdGhlIGJhY2tncm91bmQgZXh0ZW5kcyBhbmQgZml4ZWQg
ZWxlbWVudHMgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L1NvdXJjZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1Nv
dXJjZUJ1ZmZlci5jcHAKaW5kZXggNGVhZWVhNDZjZmNlNjI5OTM4YThhYmNmMjlkMGMyN2IxYTVl
ZDZlYi4uYWVmZDNiOWU5MDZhNTg1OTA0MDRhZTA3MmU4NmUwY2IyY2JkMDUwYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcApA
QCAtOTkzLDEyICs5OTMsMTIgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZh
dGVEaWRSZWNlaXZlU2FtcGxlKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBQYXMKIAogYm9vbCBTb3Vy
Y2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVIYXNBdWRpbyhjb25zdCBTb3VyY2VCdWZmZXJQ
cml2YXRlKikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9hdWRpb1RyYWNrcy0+bGVuZ3RoKCk7Cisg
ICAgcmV0dXJuIG1fYXVkaW9UcmFja3MgJiYgbV9hdWRpb1RyYWNrcy0+bGVuZ3RoKCk7CiB9CiAK
IGJvb2wgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlSGFzVmlkZW8oY29uc3QgU291
cmNlQnVmZmVyUHJpdmF0ZSopIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdmlkZW9UcmFja3MtPmxl
bmd0aCgpOworICAgIHJldHVybiBtX3ZpZGVvVHJhY2tzICYmIG1fdmlkZW9UcmFja3MtPmxlbmd0
aCgpOwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6dmlkZW9UcmFja1NlbGVjdGVkQ2hhbmdlZChW
aWRlb1RyYWNrKiB0cmFjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBjNWY0MDk1MzlkOTdlNTA1MzMyMzZiMDcyMzc4YTlkZTRh
OWY5YjE2Li45NGJkZjUzODE0MzIyYTcyNTUxMTQ5MGQ5NmVkOTQ1NmM0ZmU2NzdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01
MzM5LDYgKzUzMzksOCBAQAogCQlDRDRBQzUyQTE0OTZBRTlBMDA4N0M0RUYgLyogQ29tcG9zaXRl
LndhdiBpbiBDb3B5IEF1ZGlvIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRDRBQzUyODE0OTZBRTJGMDA4N0M0RUYgLyogQ29tcG9zaXRlLndhdiAqLzsgfTsK
IAkJQ0Q1MzkzRDMxNzVFMDE4NjAwQzA3MTIzIC8qIEpTTWVtb3J5SW5mby5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDUzOTNEMTE3NUUwMTg2MDBD
MDcxMjMgLyogSlNNZW1vcnlJbmZvLmNwcCAqLzsgfTsKIAkJQ0Q1MzkzRDQxNzVFMDE4NjAwQzA3
MTIzIC8qIEpTTWVtb3J5SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0Q1MzkzRDIxNzVFMDE4NjAwQzA3MTIzIC8qIEpTTWVtb3J5SW5mby5oICov
OyB9OworCQlDRDU0QTc2MjE4MEY5RjcwMDBCMDc2QzkgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0Q1NEE3NjAxODBGOUY3MDAwQjA3NkM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLmNwcCAqLzsgfTsKKwkJQ0Q1NEE3NjMxODBGOUY3MDAwQjA3NkM5IC8q
IEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDU0QTc2MTE4MEY5RjcwMDBCMDc2QzkgLyog
QXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLzsgfTsKIAkJQ0Q1NERFNDcx
NzQ2OEI2RjAwNUU1QjM2IC8qIEF1ZGlvU2Vzc2lvbk1hbmFnZXJNYWMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q1NERFNDUxNzQ2OEI2RjAwNUU1
QjM2IC8qIEF1ZGlvU2Vzc2lvbk1hbmFnZXJNYWMuY3BwICovOyB9OwogCQlDRDU0REU0QjE3NDY5
QzZEMDA1RTVCMzYgLyogQXVkaW9TZXNzaW9uTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENTRERTQ5MTc0NjlDNkQwMDVFNUIzNiAvKiBBdWRp
b1Nlc3Npb25NYWMuY3BwICovOyB9OwogCQlDRDYxRkU2NzE3OTRBQURCMDA0MTAxRUIgLyogTWVk
aWFTb3VyY2VSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMUE5NDJFMTE1QjVDRTIyMDBENTI1RDEgLyogTWVkaWFTb3VyY2VSZWdpc3Ry
eS5jcHAgKi87IH07CkBAIC01MzU0LDYgKzUzNTYsOCBAQAogCQlDRDgyMDMwRDEzOTVBQjZBMDBG
OTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEODIwMzA5MTM5NUFCNkEw
MEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tICovOyB9
OwogCQlDRDgyMDMxMDEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDgyMDMwRTEzOTVB
Q0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0Q4MjAzMTExMzk1QUNFNzAwRjk1NkM2IC8q
IFdlYldpbmRvd0FuaW1hdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEODIwMzBGMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5kb3dBbmltYXRp
b24ubW0gKi87IH07CisJCUNEOEI1QTQyMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDRDhCNUE0MDE4MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9UcmFja1By
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwICovOyB9OworCQlDRDhCNUE0MzE4MEQxNDlBMDA4
QjhFNjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEOEI1QTQxMTgwRDE0OUEwMDhC
OEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oICovOyB9OwogCQlD
RDhCNUE0NjE4MERGRjRFMDA4QjhFNjUgLyogVmlkZW9UcmFja01lZGlhU291cmNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhCNUE0NTE4MERGRjRF
MDA4QjhFNjUgLyogVmlkZW9UcmFja01lZGlhU291cmNlLmggKi87IH07CiAJCUNEOEI1QTQ5MTgw
RTEzOEIwMDhCOEU2NSAvKiBUZXh0VHJhY2tNZWRpYVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QjVBNDgxODBFMTM4QjAwOEI4RTY1IC8q
IFRleHRUcmFja01lZGlhU291cmNlLmggKi87IH07CiAJCUNEOEI1QTRDMTgwRTE3QzAwMDhCOEU2
NSAvKiBBdWRpb1RyYWNrTWVkaWFTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEOEI1QTRCMTgwRTE3QzAwMDhCOEU2NSAvKiBBdWRpb1RyYWNr
TWVkaWFTb3VyY2UuaCAqLzsgfTsKQEAgLTUzOTYsNiArNTQwMCwxMiBAQAogCQlDREM2OURENzE2
MzIwMjZDMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY5REQ1MTYzMjAyNkMw
MDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tICovOyB9OwogCQlDREM2
OUREQTE2MzcxRkQ0MDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY5REQ4
MTYzNzFGRDMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEQzY5RERC
MTYzNzFGRDQwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY5REQ5MTYz
NzFGRDMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSAqLzsg
fTsKKwkJQ0RDOEI1QTIxODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQzhCNUEwMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMubW0gKi87IH07CisJCUNEQzhCNUEzMTgwNDYzNDcwMDE2RTY4NSAvKiBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUExMTgwNDYzNDcwMDE2RTY4NSAvKiBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLzsgfTsKKwkJQ0RDOEI1QTYx
ODA0NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM4QjVBNDE4MDQ3NEY3MDAx
NkU2ODUgLyogTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbSAqLzsgfTsKKwkJQ0RDOEI1QTcx
ODA0NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUE1MTgwNDc0RjcwMDE2
RTY4NSAvKiBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLmggKi87IH07CisJCUNEQzhCNUFBMTgw
NDdGRjEwMDE2RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUE4MTgwNDdGRjEwMDE2
RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbSAqLzsgfTsKKwkJQ0RDOEI1QUIx
ODA0N0ZGMTAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM4QjVBOTE4MDQ3RkYxMDAx
NkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCAqLzsgfTsKIAkJQ0RDOEI1QUQx
ODA0QUU1RDAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUFDMTgwNEFFNUQwMDE2
RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmggKi87IH07CiAJCUNERDUyNUQ3MTQ1
QjZERDAwMDhEMjA0RCAvKiBKU0hUTUxNZWRpYUVsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RGNjVDQ0MxNDVCNkFGRTAwQzRD
N0FBIC8qIEpTSFRNTE1lZGlhRWxlbWVudEN1c3RvbS5jcHAgKi87IH07CiAJCUNERDcwODk2MTgz
NTlGNkYwMDJCM0RDNiAvKiBTYW1wbGVNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RENzA4OTQxODM1OUY2RTAwMkIzREM2IC8qIFNhbXBsZU1h
cC5jcHAgKi87IH07CkBAIC0xMjQwNSw2ICsxMjQxNSw4IEBACiAJCUNENTM5M0QxMTc1RTAxODYw
MEMwNzEyMyAvKiBKU01lbW9yeUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNNZW1vcnlJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0Q1MzkzRDIxNzVFMDE4NjAwQzA3MTIzIC8qIEpTTWVtb3J5SW5mby5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU01lbW9yeUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQ0Q1NEE3NUUxODBGNTM1MDAwQjA3NkM5IC8qIE1lZGlhU291cmNlUHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVNvdXJjZVByaXZhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q1NEE3NjAxODBGOUY3MDAwQjA3NkM5IC8q
IEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
LmNwcDsgcGF0aCA9IG9iamMvQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDU0QTc2MTE4MEY5RjcwMDBCMDc2Qzkg
LyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDsg
cGF0aCA9IG9iamMvQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q1NERFNDUxNzQ2OEI2RjAwNUU1QjM2IC8qIEF1ZGlv
U2Vzc2lvbk1hbmFnZXJNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQXVkaW9TZXNzaW9uTWFuYWdlck1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNENTRERTQ5MTc0NjlDNkQwMDVFNUIzNiAvKiBBdWRpb1Nlc3Npb25NYWMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9TZXNzaW9uTWFjLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q2NDFFQjExODE4RjVFRDAwRUU0QzQxIC8qIE1l
ZGlhU291cmNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRp
YVNvdXJjZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNDIwLDYg
KzEyNDMyLDggQEAKIAkJQ0Q4MjAzMDkxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNj
cmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2QzYgLyogV2Vi
V2luZG93QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYldp
bmRvd0FuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDgyMDMwRjEz
OTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViV2luZG93QW5pbWF0aW9uLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDRDhCNUE0MDE4MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9UcmFj
a1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwOyBwYXRo
ID0gb2JqYy9WaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEOEI1QTQxMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1Ry
YWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBwYXRoID0gb2Jq
Yy9WaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDRDhCNUE0NDE4MEREOEQ2MDA4QjhFNjUgLyogVmlkZW9UcmFja01lZGlh
U291cmNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBWaWRlb1RyYWNrTWVkaWFTb3VyY2UuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDRDhCNUE0NTE4MERGRjRFMDA4QjhFNjUgLyogVmlkZW9UcmFja01l
ZGlhU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvVHJhY2tN
ZWRpYVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDhCNUE0NzE4MEUx
MzYxMDA4QjhFNjUgLyogVGV4dFRyYWNrTWVkaWFTb3VyY2UuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFRleHRUcmFja01l
ZGlhU291cmNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNDkyLDYgKzEy
NTA2LDEyIEBACiAJCUNEQzY5REQ1MTYzMjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVl
bldhcm5pbmdWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQ0RDNjlERDgxNjM3MUZEMzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vo
b2xkZXJWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVGdWxs
U2NyZWVuUGxhY2Vob2xkZXJWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNE
QzY5REQ5MTYzNzFGRDMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmll
dy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVGdWxs
U2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
REM4QjVBMDE4MDQ2MzQ3MDAxNkU2ODUgLyogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tOyBwYXRoID0gb2JqYy9NZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUNEQzhCNUExMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg7IHBhdGggPSBvYmpjL01lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
REM4QjVBNDE4MDQ3NEY3MDAxNkU2ODUgLyogTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE1lZGlhU291cmNlUHJpdmF0
ZUFWRk9iakMubW07IHBhdGggPSBvYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQzhCNUE1MTgwNDc0RjcwMDE2RTY4NSAvKiBN
ZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuaDsgcGF0aCA9IG9iamMvTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREM4QjVBODE4
MDQ3RkYxMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2Jq
Qy5tbTsgcGF0aCA9IG9iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQzhCNUE5MTgwNDdGRjEwMDE2RTY4NSAvKiBTb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBT
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oOyBwYXRoID0gb2JqYy9Tb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREM4QjVBQzE4MDRB
RTVEMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQ0U1Q0QwMTQ2MzNCQzkwMEQ0N0NDQSAvKiBFdmVudFRh
cmdldEZhY3RvcnkuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRXZlbnRUYXJnZXRGYWN0b3J5
LmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREQxRTUyNTE2N0JBNTY0MDBDRTgy
MEIgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIwMzk3LDIwICsyMDQxNywzMCBAQAogCQlERjlBRkQ2RjEzRkMzMUIwMDAxNUZF
QjcgLyogb2JqYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0J
CQkJQ0QzMzZGNUYxN0Y5RjY0NzAwREREQ0QwIC8qIEFWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGwu
bW0gKi8sCi0JCQkJQ0QzMzZGNjAxN0Y5RjY0NzAwREREQ0QwIC8qIEFWVHJhY2tQcml2YXRlQVZG
T2JqQ0ltcGwuaCAqLywKLQkJCQlDREUzQTg1NTE3RjYwMjA0MDBDNUJFMjAgLyogQXVkaW9UcmFj
a1ByaXZhdGVBVkZPYmpDLm1tICovLAogCQkJCUNERTNBODU2MTdGNjAyMDQwMEM1QkUyMCAvKiBB
dWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMuaCAqLywKKwkJCQlDREUzQTg1NTE3RjYwMjA0MDBDNUJF
MjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLm1tICovLAorCQkJCUNENTRBNzYwMTgwRjlG
NzAwMEIwNzZDOSAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5jcHAgKi8s
CisJCQkJQ0Q1NEE3NjExODBGOUY3MDAwQjA3NkM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmggKi8sCisJCQkJQ0QzMzZGNjAxN0Y5RjY0NzAwREREQ0QwIC8qIEFWVHJh
Y2tQcml2YXRlQVZGT2JqQ0ltcGwuaCAqLywKKwkJCQlDRDMzNkY1RjE3RjlGNjQ3MDBERERDRDAg
LyogQVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbC5tbSAqLywKIAkJCQkwN0FBNkI2OTE2NkQwMTk1
MDBENDU2NzEgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRk9iakMuaCAqLywKIAkJCQkwN0FB
NkI2QTE2NkQwMTk1MDBENDU2NzEgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRk9iakMubW0g
Ki8sCiAJCQkJMDczNjdEREQxNzJDQTY3RjAwRDg2MUI5IC8qIEluYmFuZFRleHRUcmFja1ByaXZh
dGVMZWdhY3lBVkZPYmpDLmggKi8sCiAJCQkJMDczNjdEREUxNzJDQTY3RjAwRDg2MUI5IC8qIElu
YmFuZFRleHRUcmFja1ByaXZhdGVMZWdhY3lBVkZPYmpDLm1tICovLAogCQkJCURGOUFGRDcwMTNG
QzMxRDgwMDE1RkVCNyAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmggKi8s
CiAJCQkJREY5QUZENzExM0ZDMzFEODAwMTVGRUI3IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakMubW0gKi8sCi0JCQkJQ0Q3RTA1MjAxNjUxQTg0MTAwQzEyMDFGIC8qIFdlYkNv
cmVBVkZSZXNvdXJjZUxvYWRlci5oICovLAotCQkJCUNEN0UwNTIxMTY1MUE4NDEwMEMxMjAxRiAv
KiBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIubW0gKi8sCisJCQkJQ0RDOEI1QTExODA0NjM0NzAw
MTZFNjg1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oICovLAorCQkJ
CUNEQzhCNUEwMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMubW0gKi8sCisJCQkJQ0RDOEI1QTUxODA0NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291
cmNlUHJpdmF0ZUFWRk9iakMuaCAqLywKKwkJCQlDREM4QjVBNDE4MDQ3NEY3MDAxNkU2ODUgLyog
TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbSAqLywKKwkJCQlDREM4QjVBOTE4MDQ3RkYxMDAx
NkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCAqLywKKwkJCQlDREM4QjVBODE4
MDQ3RkYxMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0gKi8sCiAJCQkJ
Q0QzMzZGNjUxN0ZBMEFDNjAwREREQ0QwIC8qIFZpZGVvVHJhY2tQcml2YXRlQVZGT2JqQy5jcHAg
Ki8sCiAJCQkJQ0QzMzZGNjYxN0ZBMEFDNjAwREREQ0QwIC8qIFZpZGVvVHJhY2tQcml2YXRlQVZG
T2JqQy5oICovLAorCQkJCUNEOEI1QTQwMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5jcHAgKi8sCisJCQkJQ0Q4QjVBNDExODBEMTQ5QTAwOEI4
RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggKi8sCisJCQkJQ0Q3
RTA1MjAxNjUxQTg0MTAwQzEyMDFGIC8qIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5oICovLAor
CQkJCUNEN0UwNTIxMTY1MUE4NDEwMEMxMjAxRiAvKiBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIu
bW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IG9iamM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwpAQCAtMjI2NDMsNiArMjI2NzMsNyBAQAogCQkJCTg1QkNCQzEzMEFCQkE4N0QwMDM4MTE2MCAv
KiBET01IVE1MRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RTcxMUE2MEFDNUQ1MzUw
MDUzMjcwRiAvKiBET01IVE1MRG9jdW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODVERjJFRUQwQUEzODdDQjAwQUQ2NEM1IC8qIERPTUhUTUxFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKKwkJCQlDREM4QjVBNzE4MDQ3NEY3MDAxNkU2ODUgLyogTWVkaWFTb3VyY2VQcml2YXRlQVZG
T2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVFNzExQTcwQUM1RDUzNTAwNTMyNzBGIC8qIERP
TUhUTUxFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NDA3NTZBMEFENkNC
RjkwMDYyMEM1NyAvKiBET01IVE1MRW1iZWRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NTUyNDdEMDBBRDg1MEI4MDAxMjA5M0IgLyogRE9NSFRNTEVtYmVkRWxlbWVudEludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKQEAgLTIyOTExLDYgKzIyOTQyLDcgQEAKIAkJCQk4NTAzMUI0MjBBNDRF
RkM3MDBGOTkyRTAgLyogRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzhEMzM1MTI0NDA1
NDgwMDMyM0QzMyAvKiBFdmVudENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQUI2RDI5
MTdDN0RFNkMwMEM2MEIzNCAvKiBNZWRpYUNvbnRyb2xzSG9zdC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQ0RDOEI1QTMxODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4QTA2RDAxMzNDMDRENTAwQ0QzNzlD
IC8qIEV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2MEQ5MEMwRDJBMTdD
RTAwQjk5MThGIC8qIEV2ZW50RXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzY2NTAx
MzE0NEZBQTQyMDBGNkJCNTEgLyogRXZlbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKQEAgLTIz
ODkwLDYgKzIzOTIyLDcgQEAKIAkJCQkwNzhFMDkxNTE3RDE0RDFDMDA0MjBBQTEgLyogTWVkaWFT
dHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTBDNDUzNDI4MTBDREJCRkEwMDg2OTE1NyAvKiBK
U1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3N0VGNjJGNDEyRjlE
Qjc0MDBDNzdCRDIgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmggaW4gSGVhZGVycyAq
LywKKwkJCQlDREM4QjVBQjE4MDQ3RkYxMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxQzBGRjNFMEU0Q0VGQUMwMDdENkZFNSAvKiBK
U1dlYktpdEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMkU4QUUzODE2QTQ5
ODQwMDA2QkIzQUEgLyogSlNXZWJLaXRDU1NGaWx0ZXJSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTA2MDM3NTE0MzI4MTlDMDBBQkY0QkEgLyogSlNXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNDU1NCw2ICsyNDU4Nyw3IEBACiAJCQkJRTRBRkQwMEMwREFGMzM1
NDAwRjVGNTVDIC8qIFNNSUxUaW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEFGRDAwRTBEQUYz
MzU1MDBGNUY1NUMgLyogU01JTFRpbWVDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
QUJBRTFCMTAzQzE4RkYwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1FcnJvci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQ0Q1NEE3NjMxODBGOUY3MDAwQjA3NkM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTBENEEzNDEwMzE2NUVFMDA0
OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFC
QUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MUQ3MTlCRTE4MTEwNkUwMDAxNkRDNTEgLyogSURCQ2FsbGJhY2tzLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI0NjEwLDYgKzI0NjQ0LDcgQEAKIAkJCQkxQTJFNkU1QTBDQzU1MjEzMDA0
QTIwNjIgLyogU1FMVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTYzMDgyNDVFNTkw
MDFFOUFCQyAvKiBTU0xLZXlHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0ZBNjJE
MEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
Q0Q4QjVBNDMxODBEMTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUFGQjM1MDExNTE1MUE3MDBCMDQ1Q0IgLyog
U3RlcFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUMyRDg0NTE3MTczNEExMDA2NTJGQzAg
LyogU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFCRTM3RTAwREFFRTAwRTAwMTA4NUZD
IC8qIFN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLywKQEAgLTI2MTg2LDYgKzI2MjIxLDcgQEAK
IAkJCQlBN0NGQjNEMTBCN0VEMTBBMDA3MEMzMkQgLyogRHJhZ0ltYWdlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3Q0ZCM0Q1MEI3RUQxMTgwMDcwQzMyRCAvKiBEcmFnSW1hZ2VNYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCQk0OTg3NzBEQjEyNDJDNTM1MDAyMjI2QkEgLyogRHJhd2luZ0J1ZmZl
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDREM4QjVBNjE4MDQ3NEY3MDAxNkU2ODUgLyogTWVk
aWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ5ODc3MTUzMTI0
M0Y5RkEwMDIyMjZCQSAvKiBEcmF3aW5nQnVmZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MDc4RTA5MTIxN0QxNENFRTAwNDIwQUExIC8qIFVzZXJNZWRpYUNvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkQ2RUQyQzcxMzZCOEU2NjAwM0NGMDcyIC8qIER5bmFtaWNzQ29tcHJl
c3Nvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2MjIxLDYgKzI2MjU3LDcgQEAKIAkJCQkwNzk2
OURCOTE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENQZWVyQ29ubmVjdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFMEZFRjM3MkIyN0M1M0VBQzFDMUZCRUUgLyogRXZlbnRTb3VyY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTEyRURCRUEwQjMwOEUwQjAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNEOEI1QTQyMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRl
b1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzYwRDhGMjBEMkExMUUwMDBCOTkxOEYgLyogRXhjZXB0aW9uQmFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5NzNEQzYzRjE0NUE5NDA5MDAyODQyQzIgLyogRXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Q0FDREIxMTNDRTg3NUMwMEJCQkUzRiAvKiBF
eGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjMxOSw2ICsy
NjM1Niw3IEBACiAJCQkJRjUwNjY0RjcxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3NjZGMENFOTIzQTEwMDdFRjNDRCAvKiBGb3Jt
RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODVCOTJCQTBFRkRFNzNEMDBFNjEyM0MgLyog
Rm9ybURhdGFCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNEQzhCNUFBMTgwNDdGRjEw
MDE2RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUE4MTM2RDM5MDk3M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0VFNjg0NjYxMkQyNkUzODAwRTc5NDE1IC8qIEZvcm1EYXRhU3RyZWFtQ0ZO
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2NEYwQ0U5MjM0RTAwN0VGM0NEIC8qIEZv
cm1EYXRhU3RyZWFtTWFjLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0yNjczOSw2ICsyNjc3Nyw3IEBA
CiAJCQkJNjVERjMxRjkwOUQxQ0M2MDAwMEJFMzI1IC8qIEpTRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzJFRDU1NTBDNkI5QkQzMDA5MjBCRkYgLyogSlNFbGVtZW50Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTY1REYzMjJGMDlEMUREQkMwMDBCRTMyNSAvKiBKU0VudGl0
eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDRDU0QTc2MjE4MEY5RjcwMDBCMDc2QzkgLyogQXVk
aW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTNGOUI3NzQwQkE1RkREQzAwODU0MDY0IC8qIEpTRW50aXR5UmVmZXJlbmNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTJFQ0Y3QURDMTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9yRXZlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRjNENDYxNDgxMTYxRDUzMjAwQ0EwRDA5IC8qIEpTRXJyb3JI
YW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjgwMjYsNiArMjgwNjUsNyBAQAogCQkJCUIy
MjI3QTU2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXJzZXJVdGlsaXRpZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODRDNjc4NEMxMjE0ODE0NzAwQTkyOTAyIC8qIFNWR1BhdGhCbGVuZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg0NzZDOUVBMTFERjZBMjkwMDU1NUIwMiAvKiBTVkdQYXRo
QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDREM4QjVBMjE4MDQ2MzQ3MDAxNkU2ODUg
LyogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJODQxOUQyQTgxMjBEOTJEMDAwMTQxRjhGIC8qIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NDE5RDJBQzEyMEQ5MkZDMDAxNDFGOEYgLyogU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNTgwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVkaWFTYW1wbGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKaW5kZXggMTA5NmZiN2I3ZGIxZTg1OTgwOGRiMTVk
ZWJmMDc3MGVmYmU1M2I2NC4uNzQ0ZDNjNzlhYjkxZjZiYjY1MmNiNTQ5ZTU3MzhkNWE5NWJlZjFj
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVkaWFTYW1wbGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCkBAIC0zMywxNCArMzMsMTcg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTW9ja1NhbXBsZUJveDsKK3R5cGVkZWYg
c3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJlZjsKIAogc3RydWN0
IFBsYXRmb3JtU2FtcGxlIHsKICAgICBlbnVtIHsKICAgICAgICAgTm9uZSwKICAgICAgICAgTW9j
a1NhbXBsZUJveFR5cGUsCisgICAgICAgIENNU2FtcGxlQnVmZmVyVHlwZSwKICAgICB9IHR5cGU7
CiAgICAgdW5pb24gewogICAgICAgICBNb2NrU2FtcGxlQm94KiBtb2NrU2FtcGxlQm94OworICAg
ICAgICBDTVNhbXBsZUJ1ZmZlclJlZiBjbVNhbXBsZUJ1ZmZlcjsKICAgICB9IHNhbXBsZTsKIH07
CiAKQEAgLTU2LDYgKzU5LDcgQEAgcHVibGljOgogICAgIGVudW0gU2FtcGxlRmxhZ3MgewogICAg
ICAgICBOb25lID0gMCwKICAgICAgICAgSXNTeW5jID0gMSA8PCAwLAorICAgICAgICBOb25EaXNw
bGF5aW5nID0gMSA8PCAxLAogICAgIH07CiAgICAgdmlydHVhbCBTYW1wbGVGbGFncyBmbGFncygp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkg
PSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
Y3BwCmluZGV4IDIyNjQzMzM2MThjODBmODJmNDQxMzc2NGQ2N2E5MGZmNTRmMzA0YTEuLjY0NjU4
Zjc3YjRmY2Y4MGY1ZTQ5NjBmZjk1NmZmMTlmOTkzOWFkNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTU3LDYgKzU3LDkgQEAK
ICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVRVEtpdC5oIgogI2lmIFVTRShBVkZPVU5EQVRJ
T04pCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIgorI2lm
IEVOQUJMRShNRURJQV9TT1VSQ0UpCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmgiCisjZW5kaWYKICNlbmRpZgogI2VsaWYgT1MoV0lOQ0UpCiAjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlV2luQ0UuaCIKQEAgLTIxMyw2ICsyMTYsOSBAQCBzdGF0aWMg
VmVjdG9yPE1lZGlhUGxheWVyRmFjdG9yeSo+JiBpbnN0YWxsZWRNZWRpYUVuZ2luZXMoUmVxdWVy
eUVuZ2luZU9wdGlvbnMgcgogICAgICAgICBpZiAoU2V0dGluZ3M6OmlzQVZGb3VuZGF0aW9uRW5h
YmxlZCgpKSB7CiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCiAgICAgICAgICAg
ICBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpyZWdpc3Rlck1lZGlhRW5naW5l
KGFkZE1lZGlhRW5naW5lKTsKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgICAgICAgICAg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpyZWdpc3Rlck1lZGlhRW5naW5l
KGFkZE1lZGlhRW5naW5lKTsKKyNlbmRpZgogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgICAgICAg
ICAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnJlZ2lzdGVyTWVkaWFFbmdpbmUo
YWRkTWVkaWFFbmdpbmUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuaAppbmRleCA4ZGYwMWIxYTFjZWZmMzFjNzg4ZGVhYWVhZTQ3MDc4
MjgzMjQzYmM4Li5kNGUyMTkwM2M1NzY5ODhkNWM3ODg2Mzc4OWMwZTgxNTQzMGVkYzczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKQEAgLTQz
LDggKzQzLDkgQEAKICNpbmNsdWRlIDxydW50aW1lL1VpbnQ4QXJyYXkuaD4KICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTU2LDYgKzU3LDcg
QEAKICNpbmNsdWRlICJQbGF0Zm9ybVRleHRUcmFja01lbnUuaCIKICNlbmRpZgogCitPQkpDX0NM
QVNTIEFWQXNzZXQ7CiBPQkpDX0NMQVNTIEFWUGxheWVyOwogT0JKQ19DTEFTUyBRVE1vdmllOwog
CkBAIC04Niw3ICs4OCw4IEBAIHN0cnVjdCBQbGF0Zm9ybU1lZGlhIHsKICAgICAgICAgQ2hyb21p
dW1NZWRpYVBsYXllclR5cGUsCiAgICAgICAgIFF0TWVkaWFQbGF5ZXJUeXBlLAogICAgICAgICBB
VkZvdW5kYXRpb25NZWRpYVBsYXllclR5cGUsCi0gICAgICAgIEFWRm91bmRhdGlvbkNGTWVkaWFQ
bGF5ZXJUeXBlCisgICAgICAgIEFWRm91bmRhdGlvbkNGTWVkaWFQbGF5ZXJUeXBlLAorICAgICAg
ICBBVkZvdW5kYXRpb25Bc3NldFR5cGUsCiAgICAgfSB0eXBlOwogCiAgICAgdW5pb24gewpAQCAt
OTcsNiArMTAwLDcgQEAgc3RydWN0IFBsYXRmb3JtTWVkaWEgewogICAgICAgICBNZWRpYVBsYXll
clByaXZhdGVJbnRlcmZhY2UqIHF0TWVkaWFQbGF5ZXI7CiAgICAgICAgIEFWUGxheWVyKiBhdmZN
ZWRpYVBsYXllcjsKICAgICAgICAgQVZDRlBsYXllciogYXZjZk1lZGlhUGxheWVyOworICAgICAg
ICBBVkFzc2V0KiBhdmZBc3NldDsKICAgICB9IG1lZGlhOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAppbmRleCAz
ZmJkZTYzNGNlNWU3N2NkNDI4ZjBlZmVmYjhlZmQwZTY4MDhiNDFkLi40MzZjNjhiNGY2MjI3ZTRk
MzJmYjBhMmI3YTE2ZTRmYTVlZWY1MDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaApAQCAtNzksNyArNzksNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2VlayhmbG9hdCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHNlZWtEb3VibGUoZG91YmxlIHRpbWUpIHsgc2Vlayh0aW1lKTsgfQotICAgIHZpcnR1YWwg
dm9pZCBzZWVrV2l0aFRvbGVyYW5jZShkb3VibGUgdGltZSwgZG91YmxlLCBkb3VibGUpIHsgc2Vl
ayh0aW1lKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZWVrV2l0aFRvbGVyYW5jZShkb3VibGUgdGlt
ZSwgZG91YmxlLCBkb3VibGUpIHsgc2Vla0RvdWJsZSh0aW1lKTsgfQogCiAgICAgdmlydHVhbCBi
b29sIHNlZWtpbmcoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lZGQ1NzczMGQyYTRlODM5N2VjNDA2ZWIxZjE1NDJiMTg5OTJjZjllCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwCkBAIC0wLDAgKzEs
ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXVkaW9UcmFj
a1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCIKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0Up
ICYmIEVOQUJMRShWSURFT19UUkFDSykKKworI2luY2x1ZGUgIkFWVHJhY2tQcml2YXRlQVZGT2Jq
Q0ltcGwuaCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpB
dWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyhBVkFzc2V0VHJhY2sqIHRyYWNrLCBT
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyogcGFyZW50KQorICAgIDogbV9pbXBsKHN0ZDo6bWFr
ZV91bmlxdWU8QVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbD4odHJhY2spKQorICAgICwgbV9wYXJl
bnQocGFyZW50KQorICAgICwgbV90cmFja0lEKC0xKQorICAgICwgbV9lbmFibGVkKGZhbHNlKQor
eworICAgIHJlc2V0UHJvcGVydGllc0Zyb21UcmFjaygpOworfQorCit2b2lkIEF1ZGlvVHJhY2tQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpyZXNldFByb3BlcnRpZXNGcm9tVHJhY2soKQorewor
ICAgIG1fdHJhY2tJRCA9IG1faW1wbC0+dHJhY2tJRCgpOworCisgICAgc2V0S2luZChtX2ltcGwt
PmF1ZGlvS2luZCgpKTsKKyAgICBzZXRJZChtX2ltcGwtPmlkKCkpOworICAgIHNldExhYmVsKG1f
aW1wbC0+bGFiZWwoKSk7CisgICAgc2V0TGFuZ3VhZ2UobV9pbXBsLT5sYW5ndWFnZSgpKTsKK30K
Kwordm9pZCBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0QXNzZXRUcmFj
ayhBVkFzc2V0VHJhY2sgKnRyYWNrKQoreworICAgIG1faW1wbCA9IHN0ZDo6bWFrZV91bmlxdWU8
QVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbD4odHJhY2spOworICAgIHJlc2V0UHJvcGVydGllc0Zy
b21UcmFjaygpOworfQorCitBVkFzc2V0VHJhY2sqIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjphc3NldFRyYWNrKCkKK3sKKyAgICByZXR1cm4gbV9pbXBsLT5hc3NldFRyYWNr
KCk7Cit9CisKK2Jvb2wgQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmVuYWJs
ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2VuYWJsZWQ7Cit9CisKK3ZvaWQgQXVkaW9UcmFj
a1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQorewor
ICAgIGlmIChtX2VuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9l
bmFibGVkID0gZW5hYmxlZDsKKyAgICBtX3BhcmVudC0+dHJhY2tEaWRDaGFuZ2VFbmFibGVkKHRo
aXMpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTRiNDY5ZTI2YmIyZjFmZWFhZmE3N2MxYmRmNDFkYzhkODYwOWFkZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0F1
ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKQEAgLTAsMCArMSw3MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakNfaAorI2Rl
ZmluZSBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQ19oCisKKyNpbmNsdWRlICJB
dWRpb1RyYWNrUHJpdmF0ZUFWRi5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgRU5B
QkxFKFZJREVPX1RSQUNLKQorCitPQkpDX0NMQVNTIEFWQXNzZXRUcmFjazsKK09CSkNfQ0xBU1Mg
QVZQbGF5ZXJJdGVtVHJhY2s7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQVZUcmFj
a1ByaXZhdGVBVkZPYmpDSW1wbDsKK2NsYXNzIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOwor
CitjbGFzcyBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyBGSU5BTCA6IHB1Ymxp
YyBBdWRpb1RyYWNrUHJpdmF0ZUFWRiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXVkaW9U
cmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMpCitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0
cjxBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQz4gY3JlYXRlKEFWQXNzZXRUcmFj
ayogdHJhY2ssIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKiBwYXJlbnQpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDKHRyYWNrLCBwYXJlbnQpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpIE9WRVJS
SURFOworCisgICAgdm9pZCBzZXRBc3NldFRyYWNrKEFWQXNzZXRUcmFjayopOworICAgIEFWQXNz
ZXRUcmFjayogYXNzZXRUcmFjaygpOworCisgICAgaW50IHRyYWNrSUQoKSB7IHJldHVybiBtX3Ry
YWNrSUQ7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQyhBVkFzc2V0VHJhY2sqLCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyog
cGFyZW50KTsKKyAgICAKKyAgICB2b2lkIHJlc2V0UHJvcGVydGllc0Zyb21UcmFjaygpOworCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEFWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGw+IG1faW1wbDsKKyAg
ICBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyogbV9wYXJlbnQ7CisgICAgaW50IG1fdHJhY2tJ
RDsKKyAgICBib29sIG1fZW5hYmxlZDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TT1VSQ0UpICYmIEVOQUJMRShWSURFT19UUkFDSykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkOTcxNmI5ZTE0OGNkYjU2ODQ5OWZiMjg0YjU4OTQyZjY1
YzJlNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMu
aApAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakNfaAorI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakNfaAorCisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEFWRk9VTkRBVElP
TikKKworI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1
ZmZlclByaXZhdGVDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CisKK09CSkNf
Q0xBU1MgQVZBc3NldDsKK09CSkNfQ0xBU1MgQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI7CisK
K3R5cGVkZWYgc3RydWN0IE9wYXF1ZUNNVGltZWJhc2UqIENNVGltZWJhc2VSZWY7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1DbG9ja0NNOworY2xhc3MgTWVkaWFTb3Vy
Y2VQcml2YXRlQVZGT2JqQzsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CitwdWJsaWM6Cisg
ICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKE1lZGlhUGxheWVyKik7Cisg
ICAgdmlydHVhbCB+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKCk7CisKKyAg
ICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsK
KworICAgIHZvaWQgYWRkRGlzcGxheUxheWVyKEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKik7
CisgICAgdm9pZCByZW1vdmVEaXNwbGF5TGF5ZXIoQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIq
KTsKKworICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJl
YWR5U3RhdGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOworICAg
IHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7CisgICAgdm9pZCBz
ZXROZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSk7CisKKyAgICB2b2lkIHNl
ZWtJbnRlcm5hbChkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKKyAgICB2b2lkIHNldExvYWRpbmdQ
cm9ncmVzc3NlZChib29sIGZsYWcpIHsgbV9sb2FkaW5nUHJvZ3Jlc3NlZCA9IGZsYWc7IH0KKyAg
ICB2b2lkIHNldEhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoYm9vbCBmbGFnKSB7IG1faGFzQXZhaWxh
YmxlVmlkZW9GcmFtZSA9IGZsYWc7IH0KKworcHJpdmF0ZToKKyAgICAvLyBNZWRpYVBsYXllclBy
aXZhdGVJbnRlcmZhY2UKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiB1cmwsIFBhc3NS
ZWZQdHI8SFRNTE1lZGlhU291cmNlPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNhbmNl
bExvYWQoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9QbGF5KCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEoKSBjb25zdCBP
VkVSUklERTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCBQ
bGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgT1ZFUlJJREU7CisjZW5kaWYKKwor
ICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgT1ZFUlJJREU7CisgICAgdm9pZCBwbGF5SW50ZXJuYWwo
KTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpIE9WRVJSSURFOworICAgIHZvaWQgcGF1c2VJ
bnRlcm5hbCgpOworCisgICAgdmlydHVhbCBib29sIHBhdXNlZCgpIGNvbnN0IE9WRVJSSURFOwor
CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2Nhbm5pbmcoKSBjb25zdCBPVkVSUklERTsKKwor
ICAgIHZpcnR1YWwgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0IE9WRVJSSURFOworCisgICAg
dmlydHVhbCBib29sIGhhc1ZpZGVvKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29s
IGhhc0F1ZGlvKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJs
ZShib29sKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uRG91YmxlKCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBkb3VibGUgY3VycmVudFRpbWVEb3VibGUoKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBzdGFydFRpbWVEb3VibGUoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBpbml0aWFsVGltZSgpIGNvbnN0IE9WRVJS
SURFOworCisgICAgdmlydHVhbCB2b2lkIHNlZWtXaXRoVG9sZXJhbmNlKGRvdWJsZSB0aW1lLCBk
b3VibGUgbmVnYXRpdmVUaHJlc2hvbGQsIGRvdWJsZSBwb3NpdGl2ZVRocmVzaG9sZCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBib29sIHNlZWtpbmcoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0UmF0ZURvdWJsZShkb3VibGUpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFRpbWVSYW5nZXM+IHNlZWthYmxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBkb3VibGUgbWF4VGltZVNlZWthYmxlRG91YmxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBkb3VibGUgbWluVGltZVNlZWthYmxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3QgT1ZFUlJJREU7CisK
KyAgICB2aXJ0dWFsIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QgT1ZFUlJJREU7CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgT1ZFUlJJREU7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0IE9WRVJSSURFOworCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FjY2VsZXJh
dGVkUmVuZGVyaW5nKCkgY29uc3QgT1ZFUlJJREU7CisgICAgLy8gY2FsbGVkIHdoZW4gdGhlIHJl
bmRlcmluZyBzeXN0ZW0gZmxpcHMgdGhlIGludG8gb3Igb3V0IG9mIGFjY2VsZXJhdGVkIHJlbmRl
cmluZyBtb2RlLgorICAgIHZpcnR1YWwgdm9pZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hh
bmdlZCgpIE9WRVJSSURFOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpNb3Zp
ZUxvYWRUeXBlIG1vdmllTG9hZFR5cGUoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwg
dm9pZCBwcmVwYXJlRm9yUmVuZGVyaW5nKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCBTdHJp
bmcgbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2
aXJ0dWFsIHNpemVfdCBleHRyYU1lbW9yeUNvc3QoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZv
aWQgZW5zdXJlTGF5ZXIoKTsKKyAgICB2b2lkIGRlc3Ryb3lMYXllcigpOworICAgIHZvaWQgZHVy
YXRpb25DaGFuZ2VkKCk7CisKKyAgICAvLyBNZWRpYVBsYXllciBGYWN0b3J5IE1ldGhvZHMKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IGNyZWF0ZShN
ZWRpYVBsYXllciopOworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisgICAgc3RhdGlj
IHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcyk7CisgICAgc3Rh
dGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5n
aW5lU3VwcG9ydFBhcmFtZXRlcnMmKTsKKworICAgIGZyaWVuZCBjbGFzcyBNZWRpYVNvdXJjZVBy
aXZhdGVBVkZPYmpDOworCisgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOworICAgIFJlZlB0cjxI
VE1MTWVkaWFTb3VyY2U+IG1fbWVkaWFTb3VyY2U7CisgICAgUmVmUHRyPE1lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakM+IG1fbWVkaWFTb3VyY2VQcml2YXRlOworICAgIFJldGFpblB0cjxBVkFzc2V0
PiBtX2Fzc2V0OworICAgIFJldGFpblB0cjxBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcj4gbV9z
YW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ2xv
Y2tDTT4gbV9jbG9jazsKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0
YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKKyAgICBib29s
IG1fc2Vla2luZzsKKyAgICBtdXRhYmxlIGJvb2wgbV9sb2FkaW5nUHJvZ3Jlc3NlZDsKKyAgICBi
b29sIG1faGFzQXZhaWxhYmxlVmlkZW9GcmFtZTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNlbmRpZiAvLyBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakNfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMu
bW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzgwMmViZjExODNlM2RhNGJkZWY4ZTc4MTlkYzI2MjUxOWZjYWUxNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQpAQCAt
MCwwICsxLDQ0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgiCisKKyNpbXBvcnQgIkhUTUxNZWRp
YVNvdXJjZS5oIgorI2ltcG9ydCAiTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5oIgorI2ltcG9y
dCAiUGxhdGZvcm1DbG9ja0NNLmgiCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCA8
QVZGb3VuZGF0aW9uL0FWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmg+CisjaW1wb3J0IDxBVkZv
dW5kYXRpb24vQVZBc3NldC5oPgorI2ltcG9ydCA8Q29yZU1lZGlhL0NNU3luYy5oPgorI2ltcG9y
dCA8b2JqY19ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBv
cnQgPHd0Zi9GdW5jdGlvbmFsLmg+CisjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgorCisjcHJh
Z21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIFNvZnQgTGlua2luZworCitTT0ZUX0xJTktfRlJBTUVX
T1JLX09QVElPTkFMKEFWRm91bmRhdGlvbikKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwo
Q29yZU1lZGlhKQorCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVkFz
c2V0KQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZVUkxBc3NldCkK
K1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWU2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZTdHJl
YW1EYXRhUGFyc2VyKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNwcmFnbWEgbWFyayAtCisj
cHJhZ21hIG1hcmsgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDCisKK01lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDKE1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBtX3BsYXllcihwbGF5ZXIp
CisgICAgLCBtX2Nsb2NrKG5ldyBQbGF0Zm9ybUNsb2NrQ00oKSkKKyAgICAsIG1fbmV0d29ya1N0
YXRlKE1lZGlhUGxheWVyOjpFbXB0eSkKKyAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6
SGF2ZU5vdGhpbmcpCisgICAgLCBtX3NlZWtpbmcoZmFsc2UpCisgICAgLCBtX2xvYWRpbmdQcm9n
cmVzc2VkKGZhbHNlKQoreworfQorCitNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akM6On5NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoKQoreworfQorCisjcHJh
Z21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIE1lZGlhUGxheWVyIEZhY3RvcnkgTWV0aG9kcworCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cmVnaXN0ZXJNZWRpYUVu
Z2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgaWYgKGlzQXZhaWxh
YmxlKCkpCisgICAgICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBw
b3J0c1R5cGUsIDAsIDAsIDApOworfQorCitQYXNzT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUlu
dGVyZmFjZT4gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUoTWVk
aWFQbGF5ZXIqIHBsYXllcikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyhwbGF5ZXIpKTsKK30KKworYm9vbCBNZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmlzQXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4g
QVZGb3VuZGF0aW9uTGlicmFyeSgpICYmIENvcmVNZWRpYUxpYnJhcnkoKSAmJiBnZXRBVlN0cmVh
bURhdGFQYXJzZXJDbGFzcygpOworfQorCitzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBl
Q2FjaGUoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdHJpbmc+LCBjYWNo
ZSwgKCkpOworICAgIHN0YXRpYyBib29sIHR5cGVMaXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwor
ICAgIGlmICh0eXBlTGlzdEluaXRpYWxpemVkKQorICAgICAgICByZXR1cm4gY2FjaGU7CisgICAg
dHlwZUxpc3RJbml0aWFsaXplZCA9IHRydWU7CisKKyAgICBOU0FycmF5ICp0eXBlcyA9IFtnZXRB
VlVSTEFzc2V0Q2xhc3MoKSBhdWRpb3Zpc3VhbE1JTUVUeXBlc107CisgICAgZm9yIChOU1N0cmlu
ZyAqbWltZVR5cGUgaW4gdHlwZXMpCisgICAgICAgIGNhY2hlLmFkZChtaW1lVHlwZSk7CisgICAg
CisgICAgcmV0dXJuIGNhY2hlOworfSAKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakM6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCit7
CisgICAgdHlwZXMgPSBtaW1lVHlwZUNhY2hlKCk7Cit9CisKK01lZGlhUGxheWVyOjpTdXBwb3J0
c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdXBwb3J0c1R5cGUo
Y29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICAv
LyBUaGlzIGVuZ2luZSBkb2VzIG5vdCBzdXBwb3J0IG5vbi1tZWRpYS1zb3VyY2Ugc291cmNlcy4K
KyAgICBpZiAoIXBhcmFtZXRlcnMuaXNNZWRpYVNvdXJjZSkKKyAgICAgICAgcmV0dXJuIE1lZGlh
UGxheWVyOjpJc05vdFN1cHBvcnRlZDsKKworICAgIGlmICghbWltZVR5cGVDYWNoZSgpLmNvbnRh
aW5zKHBhcmFtZXRlcnMudHlwZSkpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RT
dXBwb3J0ZWQ7CisKKyAgICAvLyBUaGUgc3BlYyBzYXlzOgorICAgIC8vICJJbXBsZW1lbnRvcnMg
YXJlIGVuY291cmFnZWQgdG8gcmV0dXJuICJtYXliZSIgdW5sZXNzIHRoZSB0eXBlIGNhbiBiZSBj
b25maWRlbnRseSBlc3RhYmxpc2hlZCBhcyBiZWluZyBzdXBwb3J0ZWQgb3Igbm90LiIKKyAgICBp
ZiAocGFyYW1ldGVycy5jb2RlY3MuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5
ZXI6Ok1heUJlU3VwcG9ydGVkOworCisgICAgTlNTdHJpbmcgKnR5cGVTdHJpbmcgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOyBjb2RlY3M9XCIlQFwiIiwgKE5TU3RyaW5nICopcGFy
YW1ldGVycy50eXBlLCAoTlNTdHJpbmcgKilwYXJhbWV0ZXJzLmNvZGVjc107CisgICAgcmV0dXJu
IFtnZXRBVlVSTEFzc2V0Q2xhc3MoKSBpc1BsYXlhYmxlRXh0ZW5kZWRNSU1FVHlwZTp0eXBlU3Ry
aW5nXSA/IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBv
cnRlZDs7Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgTWVkaWFQbGF5ZXJQcml2
YXRlSW50ZXJmYWNlIE92ZXJyaWRlcworCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6bG9hZChjb25zdCBTdHJpbmcmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bG9h
ZChjb25zdCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxIVE1MTWVkaWFTb3VyY2U+IHNvdXJjZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0odXJsKTsKKworICAgIG1fbWVkaWFTb3VyY2UgPSBzb3VyY2U7
CisgICAgbV9tZWRpYVNvdXJjZVByaXZhdGUgPSBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpj
cmVhdGUodGhpcyk7CisKKyAgICBtX21lZGlhU291cmNlLT5zZXRQcml2YXRlQW5kT3BlbigqbV9t
ZWRpYVNvdXJjZVByaXZhdGUpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6Y2FuY2VsTG9hZCgpCit7CisKK30KKworCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cHJlcGFyZVRvUGxheSgpCit7CisKK30KKworUGxhdGZv
cm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBsYXRmb3JtTWVk
aWEoKSBjb25zdAoreworICAgIFBsYXRmb3JtTWVkaWEgcG07CisgICAgcG0udHlwZSA9IFBsYXRm
b3JtTWVkaWE6OkFWRm91bmRhdGlvbkFzc2V0VHlwZTsKKyAgICBwbS5tZWRpYS5hdmZBc3NldCA9
IG1fYXNzZXQuZ2V0KCk7CisgICAgcmV0dXJuIHBtOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorUGxhdGZvcm1MYXllciogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zYW1wbGVC
dWZmZXJEaXNwbGF5TGF5ZXIuZ2V0KCk7Cit9CisjZW5kaWYKKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBsYXkoKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQo
V1RGOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBsYXlJbnRl
cm5hbCwgdGhpcykpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6cGxheUludGVybmFsKCkKK3sKKyAgICBtX2Nsb2NrLT5zdGFydCgpOworICAgIG1fcGxh
eWVyLT5yYXRlQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6cGF1c2UoKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQoV1RGOjpiaW5kKCZN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBhdXNlSW50ZXJuYWwsIHRoaXMp
KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBhdXNl
SW50ZXJuYWwoKQoreworICAgIG1fY2xvY2stPnN0b3AoKTsKKyAgICBtX3BsYXllci0+cmF0ZUNo
YW5nZWQoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6
OnBhdXNlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2Nsb2NrLT5pc1J1bm5pbmcoKTsKK30K
KworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN1cHBvcnRzU2Nh
bm5pbmcoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitJbnRTaXplIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bmF0dXJhbFNpemUoKSBjb25zdAoreworICAg
IHJldHVybiBJbnRTaXplKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjpoYXNWaWRlbygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFTb3VyY2VQ
cml2YXRlLT5oYXNWaWRlbygpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6aGFzQXVkaW8oKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhU291cmNl
UHJpdmF0ZS0+aGFzQXVkaW8oKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakM6OnNldFZpc2libGUoYm9vbCkKK3sKKyAgICAvLyBOby1vcC4KK30KKworZG91
YmxlIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6ZHVyYXRpb25Eb3VibGUo
KSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhU291cmNlLT5kdXJhdGlvbigpOworfQorCitk
b3VibGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjdXJyZW50VGltZURv
dWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2xvY2stPmN1cnJlbnRUaW1lKCk7Cit9CisK
K2RvdWJsZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN0YXJ0VGltZURv
dWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJsZSBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmluaXRpYWxUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNl
ZWtXaXRoVG9sZXJhbmNlKGRvdWJsZSB0aW1lLCBkb3VibGUgbmVnYXRpdmVUaHJlc2hvbGQsIGRv
dWJsZSBwb3NpdGl2ZVRocmVzaG9sZCkKK3sKKyAgICBtX3NlZWtpbmcgPSB0cnVlOworICAgIGNh
bGxPbk1haW5UaHJlYWQoV1RGOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnNlZWtJbnRlcm5hbCwgdGhpcywgdGltZSwgbmVnYXRpdmVUaHJlc2hvbGQsIHBvc2l0
aXZlVGhyZXNob2xkKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjpzZWVrSW50ZXJuYWwoZG91YmxlIHRpbWUsIGRvdWJsZSBuZWdhdGl2ZVRocmVzaG9s
ZCwgZG91YmxlIHBvc2l0aXZlVGhyZXNob2xkKQoreworICAgIE1lZGlhVGltZSBzZWVrVGltZSA9
IG1fbWVkaWFTb3VyY2VQcml2YXRlLT5zZWVrVG9UaW1lKE1lZGlhVGltZTo6Y3JlYXRlV2l0aERv
dWJsZSh0aW1lKSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHBvc2l0aXZlVGhyZXNob2xk
KSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKG5lZ2F0aXZlVGhyZXNob2xkKSk7CisgICAg
bV9jbG9jay0+c2V0Q3VycmVudE1lZGlhVGltZShzZWVrVGltZSk7CisgICAgbV9zZWVraW5nID0g
ZmFsc2U7CisgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVraW5nKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zZWVraW5nOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6c2V0UmF0ZURvdWJsZShkb3VibGUgcmF0ZSkKK3sKKyAgICBtX2Nsb2NrLT5zZXRQbGF5
UmF0ZShyYXRlKTsKKyAgICBtX3BsYXllci0+cmF0ZUNoYW5nZWQoKTsKK30KKworTWVkaWFQbGF5
ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6Om5l
dHdvcmtTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV0d29ya1N0YXRlOworfQorCitN
ZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akM6OnJlYWR5U3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlYWR5U3RhdGU7Cit9CisK
K1Bhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjpzZWVrYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRpbWVSYW5nZXM6OmNyZWF0ZSht
aW5UaW1lU2Vla2FibGUoKSwgbWF4VGltZVNlZWthYmxlRG91YmxlKCkpOworfQorCitkb3VibGUg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjptYXhUaW1lU2Vla2FibGVEb3Vi
bGUoKSBjb25zdAoreworICAgIHJldHVybiBkdXJhdGlvbkRvdWJsZSgpOworfQorCitkb3VibGUg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjptaW5UaW1lU2Vla2FibGUoKSBj
b25zdAoreworICAgIHJldHVybiBzdGFydFRpbWVEb3VibGUoKTsKK30KKworUGFzc1JlZlB0cjxU
aW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmJ1ZmZlcmVk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYVNvdXJjZS0+YnVmZmVyZWQoKTsKK30KKwor
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmRpZExvYWRpbmdQcm9n
cmVzcygpIGNvbnN0Cit7CisgICAgYm9vbCBsb2FkaW5nUHJvZ3Jlc3NlZCA9IG1fbG9hZGluZ1By
b2dyZXNzZWQ7CisgICAgbV9sb2FkaW5nUHJvZ3Jlc3NlZCA9IGZhbHNlOworICAgIHJldHVybiBs
b2FkaW5nUHJvZ3Jlc3NlZDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OnNldFNpemUoY29uc3QgSW50U2l6ZSYpCit7CisgICAgLy8gTm8tb3AKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFJlY3QmKQoreworICAgIC8vIEZJWE1FOiBwYWludCgpCit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwYWludEN1cnJlbnRG
cmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICAv
LyBGSVhNRTogaW1wbGVtZW50IHBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KCkKK30KKworYm9v
bCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6Omhhc0F2YWlsYWJsZVZpZGVv
RnJhbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhc0F2YWlsYWJsZVZpZGVvRnJhbWU7Cit9
CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCitib29sIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCit7Cisg
ICAgaWYgKHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSAmJiBtX3BsYXllci0+bWVkaWFQ
bGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJSZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKG1fcGxh
eWVyKSkKKyAgICAgICAgZW5zdXJlTGF5ZXIoKTsKKyAgICBlbHNlCisgICAgICAgIGRlc3Ryb3lM
YXllcigpOworfQorI2VuZGlmCisKK01lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bW92aWVMb2FkVHlwZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIE1lZGlhUGxheWVyOjpTdG9yZWRTdHJlYW07Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwcmVwYXJlRm9yUmVuZGVyaW5nKCkKK3sKKyAg
ICAvLyBOby1vcAorfQorCitTdHJpbmcgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjplbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFN0cmluZz4gZGVzY3JpcHRpb24oQVNDSUlMaXRlcmFsKCJBVkZvdW5kYXRpb24gTWVkaWFT
b3VyY2UgRW5naW5lIikpOworICAgIHJldHVybiBkZXNjcmlwdGlvbjsKK30KKworU3RyaW5nIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bGFuZ3VhZ2VPZlByaW1hcnlBdWRp
b1RyYWNrKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IGxhbmd1YWdlT2ZQcmlt
YXJ5QXVkaW9UcmFjaygpCisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisKK3NpemVfdCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmV4dHJhTWVtb3J5Q29zdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsg
VXRpbGl0eSBNZXRob2RzCisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjplbnN1cmVMYXllcigpCit7CisgICAgaWYgKG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciA9IGFk
b3B0TlMoW1tnZXRBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllckNsYXNzKCkgYWxsb2NdIGluaXRd
KTsKKyAgICBbbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgc2V0Q29udHJvbFRpbWViYXNlOm1f
Y2xvY2stPnRpbWViYXNlKCldOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6ZGVzdHJveUxheWVyKCkKK3sKKyAgICBpZiAoIW1fc2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zYW1wbGVCdWZmZXJEaXNwbGF5
TGF5ZXIgc2V0Q29udHJvbFRpbWViYXNlOjBdOworICAgIG1fc2FtcGxlQnVmZmVyRGlzcGxheUxh
eWVyID0gbnVsbHB0cjsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OmR1cmF0aW9uQ2hhbmdlZCgpCit7CisgICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdl
ZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6dXBk
YXRlU3RhdGVzKCkKK3sKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9sZE5ldHdvcmtT
dGF0ZSA9IG1fbmV0d29ya1N0YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJl
YWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7CisKKyAgICBVTlVTRURfUEFSQU0ob2xkTmV0d29ya1N0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0ob2xkUmVhZHlTdGF0ZSk7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVy
OjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUpCit7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSByZWFk
eVN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlYWR5U3RhdGUgPSByZWFkeVN0YXRl
OworICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0TmV0d29ya1N0YXRlKE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKQoreworICAgIGlmIChtX25ldHdvcmtTdGF0ZSA9
PSBuZXR3b3JrU3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmV0d29ya1N0YXRlID0g
bmV0d29ya1N0YXRlOworICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjphZGREaXNwbGF5TGF5
ZXIoQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIqIGRpc3BsYXlMYXllcikKK3sKKyAgICBpZiAo
ZGlzcGxheUxheWVyID09IG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciA9IGRpc3BsYXlMYXllcjsKKyAg
ICBbbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgc2V0Q29udHJvbFRpbWViYXNlOm1fY2xvY2st
PnRpbWViYXNlKCldOworICAgIG1fcGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBs
YXllclJlbmRlcmluZ01vZGVDaGFuZ2VkKG1fcGxheWVyKTsKKworICAgIC8vIEZJWE1FOiBtb3Zl
IHRoaXMgc29tZXdoZXJlIGFwcHJvcHJpYXRlOgorICAgIG1fcGxheWVyLT5maXJzdFZpZGVvRnJh
bWVBdmFpbGFibGUoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnJlbW92ZURpc3BsYXlMYXllcihBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciogZGlz
cGxheUxheWVyKQoreworICAgIGlmIChkaXNwbGF5TGF5ZXIgIT0gbV9zYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2FtcGxlQnVmZmVyRGlzcGxheUxh
eWVyID0gbnVsbHB0cjsKKyAgICBtX3BsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQ
bGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXllcik7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
U291cmNlUHJpdmF0ZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jZTRlMjc1YWNiZWI5M2ZmZDk0NzZiODBiNjQyODYwZThkOGEyNTNkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakNfaAorI2RlZmluZSBNZWRpYVNvdXJjZVBy
aXZhdGVBVkZPYmpDX2gKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5E
QVRJT04pCisKKyNpbmNsdWRlICJNZWRpYVNvdXJjZVByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitPQkpDX0NMQVNTIEFWQXNzZXQ7CitP
QkpDX0NMQVNTIEFWU3RyZWFtRGF0YVBhcnNlcjsKK09CSkNfQ0xBU1MgTlNFcnJvcjsKK09CSkNf
Q0xBU1MgTlNPYmplY3Q7Cit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01T
YW1wbGVCdWZmZXJSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOworY2xhc3MgU291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakM7CitjbGFzcyBUaW1lUmFuZ2VzOworCitjbGFzcyBNZWRpYVNvdXJjZVByaXZhdGVBVkZP
YmpDIDogcHVibGljIE1lZGlhU291cmNlUHJpdmF0ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZlB0cjxNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDPiBjcmVhdGUoTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDKik7CisgICAgdmlydHVhbCB+TWVkaWFTb3VyY2VQcml2YXRlQVZG
T2JqQygpOworCisgICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKiBwbGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXllcjsgfQorICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQyo+JiBhY3RpdmVTb3VyY2VCdWZmZXJzKCkgY29uc3QgeyByZXR1
cm4gbV9hY3RpdmVTb3VyY2VCdWZmZXJzOyB9CisKKyAgICB2aXJ0dWFsIEFkZFN0YXR1cyBhZGRT
b3VyY2VCdWZmZXIoY29uc3QgQ29udGVudFR5cGUmLCBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0
ZT4mKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXREdXJhdGlvbihkb3VibGUpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBtYXJrRW5kT2ZTdHJlYW0oRW5kT2ZTdHJlYW1TdGF0dXMpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCB1bm1hcmtFbmRPZlN0cmVhbSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
TWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlKSBPVkVS
UklERTsKKworICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdDsKKyAgICBib29sIGhhc1ZpZGVvKCkg
Y29uc3Q7CisKKyAgICBNZWRpYVRpbWUgc2Vla1RvVGltZShNZWRpYVRpbWUsIE1lZGlhVGltZSBu
ZWdhdGl2ZVRocmVzaG9sZCwgTWVkaWFUaW1lIHBvc2l0aXZlVGhyZXNob2xkKTsKKworcHJpdmF0
ZToKKyAgICBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQyopOworCisgICAgdm9pZCBzb3VyY2VCdWZmZXJQcml2YXRlRGlkQ2hhbmdl
QWN0aXZlU3RhdGUoU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMqLCBib29sIGFjdGl2ZSk7Cisg
ICAgdm9pZCBzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVu
dChTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyopOworICAgIHZvaWQgbW9uaXRvclNvdXJjZUJ1
ZmZlcnMoKTsKKyAgICB2b2lkIHJlbW92ZVNvdXJjZUJ1ZmZlcihTb3VyY2VCdWZmZXJQcml2YXRl
Kik7CisKKyAgICBmcmllbmQgY2xhc3MgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM7CisKKyAg
ICBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqIG1fcGxheWVyOworICAgIGRv
dWJsZSBtX2R1cmF0aW9uOworICAgIFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakM+PiBtX3NvdXJjZUJ1ZmZlcnM7CisgICAgVmVjdG9yPFNvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDKj4gbV9hY3RpdmVTb3VyY2VCdWZmZXJzOworICAgIGJvb2wgbV9pc0VuZGVkOworfTsK
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEFWRk9VTkRBVElP
TikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZWQ2MGEwY2FkYTIzY2VmNTJmZTgyNzc1Zjkw
NWE1MDhlZmVjZGNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbQpA
QCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNF
KSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjaW1wb3J0ICJDb250ZW50VHlwZS5oIgorI2ltcG9y
dCAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCisjaW1wb3J0ICJNZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMuaCIKKyNpbXBvcnQgIlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZP
YmpDLmgiCisjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcu
aCIKKyNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL3RleHQvQXRvbWljU3Ry
aW5nLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBNZWRpYVNvdXJjZVByaXZh
dGVBVkZPYmpDCisKK1JlZlB0cjxNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDPiBNZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDOjpjcmVhdGUoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDKiBwYXJlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVNvdXJjZVByaXZh
dGVBVkZPYmpDKHBhcmVudCkpOworfQorCitNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpNZWRp
YVNvdXJjZVByaXZhdGVBVkZPYmpDKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
QyogcGFyZW50KQorICAgIDogbV9wbGF5ZXIocGFyZW50KQorICAgICwgbV9kdXJhdGlvbihzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpKQorICAgICwgbV9pc0VuZGVkKGZh
bHNlKQoreworfQorCitNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjp+TWVkaWFTb3VyY2VQcml2
YXRlQVZGT2JqQygpCit7Cit9CisKK01lZGlhU291cmNlUHJpdmF0ZTo6QWRkU3RhdHVzIE1lZGlh
U291cmNlUHJpdmF0ZUFWRk9iakM6OmFkZFNvdXJjZUJ1ZmZlcihjb25zdCBDb250ZW50VHlwZSYg
Y29udGVudFR5cGUsIFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiYgb3V0UHJpdmF0ZSkKK3sK
KyAgICBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1l
dGVycy5pc01lZGlhU291cmNlID0gdHJ1ZTsKKyAgICBwYXJhbWV0ZXJzLnR5cGUgPSBjb250ZW50
VHlwZS50eXBlKCk7CisgICAgcGFyYW1ldGVycy5jb2RlY3MgPSBjb250ZW50VHlwZS5wYXJhbWV0
ZXIoQVNDSUlMaXRlcmFsKCJjb2RlY3MiKSk7CisgICAgaWYgKE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzo6c3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMpID09IE1lZGlhUGxheWVy
OjpJc05vdFN1cHBvcnRlZCkKKyAgICAgICAgcmV0dXJuIE5vdFN1cHBvcnRlZDsKKworICAgIG1f
c291cmNlQnVmZmVycy5hcHBlbmQoU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmNyZWF0ZSh0
aGlzKSk7CisgICAgb3V0UHJpdmF0ZSA9IG1fc291cmNlQnVmZmVycy5sYXN0KCk7CisKKyAgICBy
ZXR1cm4gT2s7Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6cmVtb3ZlU291
cmNlQnVmZmVyKFNvdXJjZUJ1ZmZlclByaXZhdGUqIGJ1ZmZlcikKK3sKKyAgICBBU1NFUlQobV9z
b3VyY2VCdWZmZXJzLmNvbnRhaW5zKGJ1ZmZlcikpOworCisgICAgc2l6ZV90IHBvcyA9IG1fYWN0
aXZlU291cmNlQnVmZmVycy5maW5kKGJ1ZmZlcik7CisgICAgaWYgKHBvcyAhPSBub3RGb3VuZCkK
KyAgICAgICAgbV9hY3RpdmVTb3VyY2VCdWZmZXJzLnJlbW92ZShwb3MpOworCisgICAgcG9zID0g
bV9zb3VyY2VCdWZmZXJzLmZpbmQoYnVmZmVyKTsKKyAgICBtX3NvdXJjZUJ1ZmZlcnMucmVtb3Zl
KHBvcyk7Cit9CisKK2RvdWJsZSBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpkdXJhdGlvbigp
Cit7CisgICAgcmV0dXJuIG1fZHVyYXRpb247Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQoreworICAgIGlmIChkdXJhdGlv
biA9PSBtX2R1cmF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2R1cmF0aW9uID0gZHVy
YXRpb247Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6bWFya0VuZE9mU3Ry
ZWFtKEVuZE9mU3RyZWFtU3RhdHVzKSAKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IG1hcmtF
bmRPZlN0cmVhbSgpCisgICAgbV9pc0VuZGVkID0gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDOjp1bm1hcmtFbmRPZlN0cmVhbSgpIAoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQgdW5tYXJrRW5kT2ZTdHJlYW0oKQorICAgIG1faXNFbmRlZCA9IGZhbHNlOworfQor
CitNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpyZWFk
eVN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF5ZXItPnJlYWR5U3RhdGUoKTsKK30K
Kwordm9pZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxh
eWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUpCit7CisgICAgbV9wbGF5ZXItPnNldFJlYWR5U3Rh
dGUocmVhZHlTdGF0ZSk7Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6c291
cmNlQnVmZmVyUHJpdmF0ZURpZENoYW5nZUFjdGl2ZVN0YXRlKFNvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDKiBidWZmZXIsIGJvb2wgYWN0aXZlKQoreworICAgIGlmIChhY3RpdmUgJiYgIW1fYWN0
aXZlU291cmNlQnVmZmVycy5jb250YWlucyhidWZmZXIpKQorICAgICAgICBtX2FjdGl2ZVNvdXJj
ZUJ1ZmZlcnMuYXBwZW5kKGJ1ZmZlcik7CisKKyAgICBpZiAoIWFjdGl2ZSkgeworICAgICAgICBz
aXplX3QgcG9zaXRpb24gPSBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMuZmluZChidWZmZXIpOworICAg
ICAgICBpZiAocG9zaXRpb24gIT0gbm90Rm91bmQpCisgICAgICAgICAgICBtX2FjdGl2ZVNvdXJj
ZUJ1ZmZlcnMucmVtb3ZlKHBvc2l0aW9uKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIE1lZGlh
U291cmNlUHJpdmF0ZUFWRk9iakNIYXNBdWRpbyhQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZh
dGVBVkZPYmpDPiBwcnBTb3VyY2VCdWZmZXIpCit7CisgICAgUmVmUHRyPFNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDPiBzb3VyY2VCdWZmZXIgPSBwcnBTb3VyY2VCdWZmZXI7CisgICAgcmV0dXJu
IHNvdXJjZUJ1ZmZlci0+aGFzQXVkaW8oKTsKK30KKworYm9vbCBNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDOjpoYXNBdWRpbygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6YW55X29mKG1fYWN0
aXZlU291cmNlQnVmZmVycy5iZWdpbigpLCBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMuZW5kKCksIE1l
ZGlhU291cmNlUHJpdmF0ZUFWRk9iakNIYXNBdWRpbyk7Cit9CisKK3N0YXRpYyBib29sIE1lZGlh
U291cmNlUHJpdmF0ZUFWRk9iakNIYXNWaWRlbyhQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZh
dGVBVkZPYmpDPiBwcnBTb3VyY2VCdWZmZXIpCit7CisgICAgUmVmUHRyPFNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDPiBzb3VyY2VCdWZmZXIgPSBwcnBTb3VyY2VCdWZmZXI7CisgICAgcmV0dXJu
IHNvdXJjZUJ1ZmZlci0+aGFzVmlkZW8oKTsKK30KKworYm9vbCBNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDOjpoYXNWaWRlbygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6YW55X29mKG1fYWN0
aXZlU291cmNlQnVmZmVycy5iZWdpbigpLCBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMuZW5kKCksIE1l
ZGlhU291cmNlUHJpdmF0ZUFWRk9iakNIYXNWaWRlbyk7Cit9CisKK01lZGlhVGltZSBNZWRpYVNv
dXJjZVByaXZhdGVBVkZPYmpDOjpzZWVrVG9UaW1lKE1lZGlhVGltZSB0YXJnZXRUaW1lLCBNZWRp
YVRpbWUgbmVnYXRpdmVUaHJlc2hvbGQsIE1lZGlhVGltZSBwb3NpdGl2ZVRocmVzaG9sZCkKK3sK
KyAgICBNZWRpYVRpbWUgc2Vla1RpbWUgPSB0YXJnZXRUaW1lOworICAgIGZvciAoYXV0byBpdCA9
IG1fYWN0aXZlU291cmNlQnVmZmVycy5iZWdpbigpLCBlbmQgPSBtX2FjdGl2ZVNvdXJjZUJ1ZmZl
cnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBNZWRpYVRpbWUgc291cmNlU2Vl
a1RpbWUgPSAoKml0KS0+ZmFzdFNlZWtUaW1lRm9yTWVkaWFUaW1lKHRhcmdldFRpbWUsIG5lZ2F0
aXZlVGhyZXNob2xkLCBwb3NpdGl2ZVRocmVzaG9sZCk7CisgICAgICAgIGlmIChhYnModGFyZ2V0
VGltZSAtIHNvdXJjZVNlZWtUaW1lKSA+IGFicyh0YXJnZXRUaW1lIC0gc2Vla1RpbWUpKQorICAg
ICAgICAgICAgc2Vla1RpbWUgPSBzb3VyY2VTZWVrVGltZTsKKyAgICB9CisKKyAgICBmb3IgKGF1
dG8gaXQgPSBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMuYmVnaW4oKSwgZW5kID0gbV9hY3RpdmVTb3Vy
Y2VCdWZmZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5zZWVrVG9U
aW1lKHNlZWtUaW1lKTsKKworICAgIHJldHVybiBzZWVrVGltZTsKK30KKworfQorCisjZW5kaWYg
Ly8gRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEFWRk9VTkRBVElPTikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjZkZjk0ZTJlMjJjYzIwMTM4MzEwY2EwMDQ0NTg3NmE1ZTViMjRjMmQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQ19oCisjZGVmaW5lIFNvdXJjZUJ1
ZmZlclByaXZhdGVBVkZPYmpDX2gKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShB
VkZPVU5EQVRJT04pCisKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlLmgiCisjaW5jbHVk
ZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
TWVkaWFUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bWljU3RyaW5nLmg+CisKK09CSkNfQ0xBU1MgQVZBc3NldDsKK09CSkNfQ0xBU1MgQVZTdHJlYW1E
YXRhUGFyc2VyOworT0JKQ19DTEFTUyBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcjsKK09CSkNf
Q0xBU1MgTlNFcnJvcjsKK09CSkNfQ0xBU1MgTlNPYmplY3Q7Cit0eXBlZGVmIHN0cnVjdCBvcGFx
dWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1wbGVCdWZmZXJSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVj
dCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uICpDTUZvcm1hdERlc2NyaXB0aW9uUmVmOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM7Citj
bGFzcyBUaW1lUmFuZ2VzOworY2xhc3MgQXVkaW9UcmFja1ByaXZhdGU7CitjbGFzcyBWaWRlb1Ry
YWNrUHJpdmF0ZTsKK2NsYXNzIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOwor
Y2xhc3MgVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM7CisKK2NsYXNzIFNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDIDogcHVibGljIFNvdXJjZUJ1ZmZlclByaXZhdGUgeworcHVi
bGljOgorICAgIHN0YXRpYyBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM+IGNyZWF0
ZShNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKik7CisgICAgdmlydHVhbCB+U291cmNlQnVmZmVy
UHJpdmF0ZUFWRk9iakMoKTsKKworICAgIC8vIEFWU3RyZWFtRGF0YVBhcnNlciBkZWxlZ2F0ZSBt
ZXRob2RzCisgICAgdm9pZCBkaWRQYXJzZVN0cmVhbURhdGFBc0Fzc2V0KEFWQXNzZXQqKTsKKyAg
ICB2b2lkIGRpZEZhaWxUb1BhcnNlU3RyZWFtRGF0YVdpdGhFcnJvcihOU0Vycm9yKik7CisgICAg
dm9pZCBkaWRQcm92aWRlTWVkaWFEYXRhRm9yVHJhY2tJRChpbnQgdHJhY2tJRCwgQ01TYW1wbGVC
dWZmZXJSZWYsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlLCB1bnNpZ25lZCBmbGFncyk7CisgICAg
dm9pZCBkaWRSZWFjaEVuZE9mVHJhY2tXaXRoVHJhY2tJRChpbnQgdHJhY2tJRCwgY29uc3QgU3Ry
aW5nJiBtZWRpYVR5cGUpOworCisgICAgYm9vbCBwcm9jZXNzQ29kZWRGcmFtZShpbnQgdHJhY2tJ
RCwgQ01TYW1wbGVCdWZmZXJSZWYsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlKTsKKworICAgIGJv
b2wgaGFzVmlkZW8oKSBjb25zdDsKKyAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7CisKKyAgICB2
b2lkIHRyYWNrRGlkQ2hhbmdlRW5hYmxlZChWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQyopOworICAgIHZvaWQgdHJhY2tEaWRDaGFuZ2VFbmFibGVkKEF1ZGlvVHJhY2tQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDKik7CisKKyAgICB2b2lkIHNlZWtUb1RpbWUoTWVkaWFUaW1lKTsK
KyAgICBNZWRpYVRpbWUgZmFzdFNlZWtUaW1lRm9yTWVkaWFUaW1lKE1lZGlhVGltZSwgTWVkaWFU
aW1lIG5lZ2F0aXZlVGhyZXNob2xkLCBNZWRpYVRpbWUgcG9zaXRpdmVUaHJlc2hvbGQpOworCitw
cml2YXRlOgorICAgIGV4cGxpY2l0IFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKE1lZGlhU291
cmNlUHJpdmF0ZUFWRk9iakMqKTsKKworICAgIC8vIFNvdXJjZUJ1ZmZlclByaXZhdGUgb3ZlcnJp
ZGVzCisgICAgdmlydHVhbCB2b2lkIHNldENsaWVudChTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50
KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBBcHBlbmRSZXN1bHQgYXBwZW5kKGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGFib3J0KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tTWVkaWFT
b3VyY2UoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJl
YWR5U3RhdGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVhZHlTdGF0
ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGV2
aWN0Q29kZWRGcmFtZXMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNGdWxsKCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQW5kRW5xdWV1ZU5vbkRpc3BsYXlpbmdTYW1w
bGVzKFZlY3RvcjxSZWZQdHI8TWVkaWFTYW1wbGU+PiwgQXRvbWljU3RyaW5nIHRyYWNrSUQpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlU2FtcGxlKFBhc3NSZWZQdHI8TWVkaWFT
YW1wbGU+LCBBdG9taWNTdHJpbmcgdHJhY2tJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29s
IGlzUmVhZHlGb3JNb3JlU2FtcGxlcygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRB
Y3RpdmUoYm9vbCkgT1ZFUlJJREU7CisKKyAgICBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKiBt
X3BhcmVudDsKKyAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50KiBtX2NsaWVudDsKKyAgICBS
ZXRhaW5QdHI8QVZTdHJlYW1EYXRhUGFyc2VyPiBtX3BhcnNlcjsKKyAgICBSZXRhaW5QdHI8QVZB
c3NldD4gbV9hc3NldDsKKyAgICBSZXRhaW5QdHI8QVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI+
IG1fZGlzcGxheUxheWVyOworICAgIFJldGFpblB0cjxOU09iamVjdD4gbV9kZWxlZ2F0ZTsKKwor
ICAgIGJvb2wgbV9wYXJzaW5nU3VjY2VlZGVkOworICAgIGludCBtX2VuYWJsZWRWaWRlb1RyYWNr
SUQ7CisKKyAgICBWZWN0b3I8UmVmUHRyPFZpZGVvVHJhY2tQcml2YXRlPj4gbV92aWRlb1RyYWNr
czsKKyAgICBWZWN0b3I8UmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlPj4gbV9hdWRpb1RyYWNrczsK
K307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5E
QVRJT04pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNWY4YTc1NDVhZmY0YmU3OTEwNjMx
OThlYjRiNGViN2QzMWIzOWMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9i
akMubW0KQEAgLTAsMCArMSw1MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgiCisKKyNpZiBFTkFCTEUoTUVESUFf
U09VUkNFKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjaW1wb3J0ICJFeGNlcHRpb25Db2RlUGxh
Y2Vob2xkZXIuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhRGVzY3JpcHRp
b24uaCIKKyNpbXBvcnQgIk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIgor
I2ltcG9ydCAiTWVkaWFTYW1wbGUuaCIKKyNpbXBvcnQgIk1lZGlhU291cmNlUHJpdmF0ZUFWRk9i
akMuaCIKKyNpbXBvcnQgIk1lZGlhVGltZU1hYy5oIgorI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0ICJTb3VyY2VCdWZmZXJQcml2YXRl
Q2xpZW50LmgiCisjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCisjaW1wb3J0ICJBdWRpb1RyYWNrUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIgorI2ltcG9ydCAiVmlkZW9UcmFja1ByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMuaCIKKyNpbXBvcnQgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZPYmpD
LmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBc3NldFRyYWNrLmg+CisjaW1wb3J0IDxBVkZv
dW5kYXRpb24vQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuaD4KKyNpbXBvcnQgPG9iamMvcnVu
dGltZS5oPgorI2ltcG9ydCA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW1wb3J0IDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisjaW1wb3J0IDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKyNpbXBvcnQg
PHd0Zi9XZWFrUHRyLmg+CisjaW1wb3J0IDxtYXA+CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21h
IG1hcmsgU29mdCBMaW5raW5nCisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3Vu
ZGF0aW9uKQorU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChDb3JlTWVkaWEpCisKK1NPRlRf
TElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQXNzZXRUcmFjaykKK1NPRlRfTElOS19DTEFTUyhB
VkZvdW5kYXRpb24sIEFWU3RyZWFtRGF0YVBhcnNlcikKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5k
YXRpb24sIEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKQorCitTT0ZUX0xJTktfUE9JTlRFUl9P
UFRJT05BTChBVkZvdW5kYXRpb24sIEFWTWVkaWFUeXBlVmlkZW8sIE5TU3RyaW5nICopCitTT0ZU
X0xJTktfUE9JTlRFUl9PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWTWVkaWFUeXBlQXVkaW8sIE5T
U3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUl9PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWTWVk
aWFUeXBlVGV4dCwgTlNTdHJpbmcgKikKKworU09GVF9MSU5LX0NPTlNUQU5UKENvcmVNZWRpYSwg
a0NNVGltZVplcm8sIENNVGltZSk7CitTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01U
aW1lSW52YWxpZCwgQ01UaW1lKTsKK1NPRlRfTElOS19DT05TVEFOVChDb3JlTWVkaWEsIGtDTVNh
bXBsZUF0dGFjaG1lbnRLZXlfRG9Ob3REaXNwbGF5LCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19D
T05TVEFOVChDb3JlTWVkaWEsIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfTm90U3luYywgQ0ZTdHJp
bmdSZWYpCitTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01TYW1wbGVCdWZmZXJBdHRh
Y2htZW50S2V5X0RyYWluQWZ0ZXJEZWNvZGluZywgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfQ09O
U1RBTlQoQ29yZU1lZGlhLCBrQ01TYW1wbGVCdWZmZXJBdHRhY2htZW50S2V5X1Jlc2V0RGVjb2Rl
ckJlZm9yZURlY29kaW5nLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFOVChDb3JlTWVk
aWEsIGtDTVNhbXBsZUJ1ZmZlckF0dGFjaG1lbnRLZXlfRW1wdHlNZWRpYSwgQ0ZTdHJpbmdSZWYp
CitTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01TYW1wbGVCdWZmZXJBdHRhY2htZW50
S2V5X0Rpc3BsYXlFbXB0eU1lZGlhSW1tZWRpYXRlbHksIENGU3RyaW5nUmVmKQorCitTT0ZUX0xJ
TktfQ09OU1RBTlQoQVZGb3VuZGF0aW9uLCBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNWaXN1YWwsIE5T
U3RyaW5nKikKK1NPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFWTWVkaWFDaGFyYWN0
ZXJpc3RpY0F1ZGlibGUsIE5TU3RyaW5nKikKK1NPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRp
b24sIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0xlZ2libGUsIE5TU3RyaW5nKikKKworU09GVF9MSU5L
KENvcmVNZWRpYSwgQ01Gb3JtYXREZXNjcmlwdGlvbkdldE1lZGlhVHlwZSwgQ01NZWRpYVR5cGUs
IChDTUZvcm1hdERlc2NyaXB0aW9uUmVmIGRlc2MpLCAoZGVzYykpCitTT0ZUX0xJTksoQ29yZU1l
ZGlhLCBDTVNhbXBsZUJ1ZmZlckNyZWF0ZSwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxv
Y2F0b3IsIENNQmxvY2tCdWZmZXJSZWYgZGF0YUJ1ZmZlciwgQm9vbGVhbiBkYXRhUmVhZHksIENN
U2FtcGxlQnVmZmVyTWFrZURhdGFSZWFkeUNhbGxiYWNrIG1ha2VEYXRhUmVhZHlDYWxsYmFjaywg
dm9pZCAqbWFrZURhdGFSZWFkeVJlZmNvbiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXRE
ZXNjcmlwdGlvbiwgQ01JdGVtQ291bnQgbnVtU2FtcGxlcywgQ01JdGVtQ291bnQgbnVtU2FtcGxl
VGltaW5nRW50cmllcywgY29uc3QgQ01TYW1wbGVUaW1pbmdJbmZvICpzYW1wbGVUaW1pbmdBcnJh
eSwgQ01JdGVtQ291bnQgbnVtU2FtcGxlU2l6ZUVudHJpZXMsIGNvbnN0IHNpemVfdCAqc2FtcGxl
U2l6ZUFycmF5LCBDTVNhbXBsZUJ1ZmZlclJlZiAqc0J1Zk91dCksIChhbGxvY2F0b3IsIGRhdGFC
dWZmZXIsIGRhdGFSZWFkeSwgbWFrZURhdGFSZWFkeUNhbGxiYWNrLCBtYWtlRGF0YVJlYWR5UmVm
Y29uLCBmb3JtYXREZXNjcmlwdGlvbiwgbnVtU2FtcGxlcywgbnVtU2FtcGxlVGltaW5nRW50cmll
cywgc2FtcGxlVGltaW5nQXJyYXksIG51bVNhbXBsZVNpemVFbnRyaWVzLCBzYW1wbGVTaXplQXJy
YXksIHNCdWZPdXQpKQorU09GVF9MSU5LKENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJDcmVhdGVD
b3B5LCBPU1N0YXR1cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ01TYW1wbGVCdWZmZXJS
ZWYgc2J1ZiwgQ01TYW1wbGVCdWZmZXJSZWYgKnNidWZDb3B5T3V0KSwgKGFsbG9jYXRvciwgc2J1
Ziwgc2J1ZkNvcHlPdXQpKQorU09GVF9MSU5LKENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJDYWxs
Rm9yRWFjaFNhbXBsZSwgT1NTdGF0dXMsIChDTVNhbXBsZUJ1ZmZlclJlZiBzYnVmLCBPU1N0YXR1
cyAoKmNhbGxiYWNrKSggQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyLCBDTUl0ZW1Db3Vu
dCBpbmRleCwgdm9pZCAqcmVmY29uKSwgdm9pZCAqcmVmY29uKSwgKHNidWYsIGNhbGxiYWNrLCBy
ZWZjb24pKQorU09GVF9MSU5LKENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJHZXREZWNvZGVUaW1l
U3RhbXAsIENNVGltZSwgKENNU2FtcGxlQnVmZmVyUmVmIHNidWYpLCAoc2J1ZikpCitTT0ZUX0xJ
TksoQ29yZU1lZGlhLCBDTVNhbXBsZUJ1ZmZlckdldER1cmF0aW9uLCBDTVRpbWUsIChDTVNhbXBs
ZUJ1ZmZlclJlZiBzYnVmKSwgKHNidWYpKQorU09GVF9MSU5LKENvcmVNZWRpYSwgQ01TYW1wbGVC
dWZmZXJHZXRQcmVzZW50YXRpb25UaW1lU3RhbXAsIENNVGltZSwgKENNU2FtcGxlQnVmZmVyUmVm
IHNidWYpLCAoc2J1ZikpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVNhbXBsZUJ1ZmZlckdldFNh
bXBsZUF0dGFjaG1lbnRzQXJyYXksIENGQXJyYXlSZWYsIChDTVNhbXBsZUJ1ZmZlclJlZiBzYnVm
LCBCb29sZWFuIGNyZWF0ZUlmTmVjZXNzYXJ5KSwgKHNidWYsIGNyZWF0ZUlmTmVjZXNzYXJ5KSkK
K1NPRlRfTElOSyhDb3JlTWVkaWEsIENNRm9ybWF0RGVzY3JpcHRpb25HZXRNZWRpYVN1YlR5cGUs
IEZvdXJDaGFyQ29kZSwgKENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZGVzYyksIChkZXNjKSkKK1NP
RlRfTElOSyhDb3JlTWVkaWEsIENNU2V0QXR0YWNobWVudCwgdm9pZCwgKENNQXR0YWNobWVudEJl
YXJlclJlZiB0YXJnZXQsIENGU3RyaW5nUmVmIGtleSwgQ0ZUeXBlUmVmIHZhbHVlLCBDTUF0dGFj
aG1lbnRNb2RlIGF0dGFjaG1lbnRNb2RlKSwgKHRhcmdldCwga2V5LCB2YWx1ZSwgYXR0YWNobWVu
dE1vZGUpKQorCisjZGVmaW5lIEFWTWVkaWFUeXBlVmlkZW8gZ2V0QVZNZWRpYVR5cGVWaWRlbygp
CisjZGVmaW5lIEFWTWVkaWFUeXBlQXVkaW8gZ2V0QVZNZWRpYVR5cGVBdWRpbygpCisjZGVmaW5l
IEFWTWVkaWFUeXBlVGV4dCBnZXRBVk1lZGlhVHlwZVRleHQoKQorI2RlZmluZSBrQ01UaW1lWmVy
byBnZXRrQ01UaW1lWmVybygpCisjZGVmaW5lIGtDTVRpbWVJbnZhbGlkIGdldGtDTVRpbWVJbnZh
bGlkKCkKKyNkZWZpbmUga0NNU2FtcGxlQXR0YWNobWVudEtleV9Ob3RTeW5jIGdldGtDTVNhbXBs
ZUF0dGFjaG1lbnRLZXlfTm90U3luYygpCisjZGVmaW5lIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlf
RG9Ob3REaXNwbGF5IGdldGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfRG9Ob3REaXNwbGF5KCkKKyNk
ZWZpbmUga0NNU2FtcGxlQnVmZmVyQXR0YWNobWVudEtleV9SZXNldERlY29kZXJCZWZvcmVEZWNv
ZGluZyBnZXRrQ01TYW1wbGVCdWZmZXJBdHRhY2htZW50S2V5X1Jlc2V0RGVjb2RlckJlZm9yZURl
Y29kaW5nKCkKKyNkZWZpbmUga0NNU2FtcGxlQnVmZmVyQXR0YWNobWVudEtleV9EcmFpbkFmdGVy
RGVjb2RpbmcgZ2V0a0NNU2FtcGxlQnVmZmVyQXR0YWNobWVudEtleV9EcmFpbkFmdGVyRGVjb2Rp
bmcoKQorI2RlZmluZSBrQ01TYW1wbGVCdWZmZXJBdHRhY2htZW50S2V5X0VtcHR5TWVkaWEgZ2V0
a0NNU2FtcGxlQnVmZmVyQXR0YWNobWVudEtleV9FbXB0eU1lZGlhKCkKKyNkZWZpbmUga0NNU2Ft
cGxlQnVmZmVyQXR0YWNobWVudEtleV9EaXNwbGF5RW1wdHlNZWRpYUltbWVkaWF0ZWx5IGdldGtD
TVNhbXBsZUJ1ZmZlckF0dGFjaG1lbnRLZXlfRGlzcGxheUVtcHR5TWVkaWFJbW1lZGlhdGVseSgp
CisKKyNkZWZpbmUgQVZNZWRpYUNoYXJhY3RlcmlzdGljVmlzdWFsIGdldEFWTWVkaWFDaGFyYWN0
ZXJpc3RpY1Zpc3VhbCgpCisjZGVmaW5lIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0F1ZGlibGUgZ2V0
QVZNZWRpYUNoYXJhY3RlcmlzdGljQXVkaWJsZSgpCisjZGVmaW5lIEFWTWVkaWFDaGFyYWN0ZXJp
c3RpY0xlZ2libGUgZ2V0QVZNZWRpYUNoYXJhY3RlcmlzdGljTGVnaWJsZSgpCisKKyNwcmFnbWEg
bWFyayAtCisjcHJhZ21hIG1hcmsgQVZTdHJlYW1EYXRhUGFyc2VyCitAY2xhc3MgQVZTdHJlYW1E
YXRhUGFyc2VySW50ZXJuYWw7CisKK05TX0NMQVNTX0FWQUlMQUJMRShUQkQsIFRCRCkKK0BpbnRl
cmZhY2UgQVZTdHJlYW1EYXRhUGFyc2VyIDogTlNPYmplY3QKKy0gKHZvaWQpc2V0RGVsZWdhdGU6
KGlkKWRlbGVnYXRlOworLSAodm9pZClhcHBlbmRTdHJlYW1EYXRhOihOU0RhdGEgKilkYXRhOwor
LSAodm9pZClzZXRTaG91bGRQcm92aWRlTWVkaWFEYXRhOihCT09MKXNob3VsZFByb3ZpZGVNZWRp
YURhdGEgZm9yVHJhY2tJRDooQ01QZXJzaXN0ZW50VHJhY2tJRCl0cmFja0lEOworLSAoQk9PTClz
aG91bGRQcm92aWRlTWVkaWFEYXRhRm9yVHJhY2tJRDooQ01QZXJzaXN0ZW50VHJhY2tJRCl0cmFj
a0lEOworQGVuZAorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIFdlYkFWU3RyZWFtRGF0
YVBhcnNlckxpc3RlbmVyCisKK0BpbnRlcmZhY2UgV2ViQVZTdHJlYW1EYXRhUGFyc2VyTGlzdGVu
ZXIgOiBOU09iamVjdCB7CisgICAgV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMq
IF9wYXJlbnQ7CisgICAgQVZTdHJlYW1EYXRhUGFyc2VyKiBfcGFyc2VyOworfQorLSAoaWQpaW5p
dFdpdGhQYXJzZXI6KEFWU3RyZWFtRGF0YVBhcnNlciopcGFyc2VyIHBhcmVudDooV2ViQ29yZTo6
U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMqKXBhcmVudDsKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFdlYkFWU3RyZWFtRGF0YVBhcnNlckxpc3RlbmVyCistIChpZClpbml0V2l0aFBhcnNlcjoo
QVZTdHJlYW1EYXRhUGFyc2VyKilwYXJzZXIgcGFyZW50OihXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
cml2YXRlQVZGT2JqQyopcGFyZW50Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBp
ZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBBU1NFUlQocGFyZW50KTsKKyAg
ICBfcGFyZW50ID0gcGFyZW50OworICAgIF9wYXJzZXIgPSBwYXJzZXI7CisgICAgW19wYXJzZXIg
c2V0RGVsZWdhdGU6c2VsZl07CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxv
YworeworICAgIFtfcGFyc2VyIHNldERlbGVnYXRlOm5pbF07CisgICAgW3N1cGVyIGRlYWxsb2Nd
OworfQorCistICh2b2lkKXN0cmVhbURhdGFQYXJzZXI6KEFWU3RyZWFtRGF0YVBhcnNlciAqKXN0
cmVhbURhdGFQYXJzZXIgZGlkUGFyc2VTdHJlYW1EYXRhQXNBc3NldDooQVZBc3NldCAqKWFzc2V0
Cit7CisgICAgQVNTRVJUKHN0cmVhbURhdGFQYXJzZXIgPT0gX3BhcnNlcik7CisgICAgX3BhcmVu
dC0+ZGlkUGFyc2VTdHJlYW1EYXRhQXNBc3NldChhc3NldCk7Cit9CisKKy0gKHZvaWQpc3RyZWFt
RGF0YVBhcnNlcjooQVZTdHJlYW1EYXRhUGFyc2VyICopc3RyZWFtRGF0YVBhcnNlciBkaWRGYWls
VG9QYXJzZVN0cmVhbURhdGFXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgoreworICAgIEFTU0VS
VChzdHJlYW1EYXRhUGFyc2VyID09IF9wYXJzZXIpOworICAgIF9wYXJlbnQtPmRpZEZhaWxUb1Bh
cnNlU3RyZWFtRGF0YVdpdGhFcnJvcihlcnJvcik7Cit9CisKKy0gKHZvaWQpc3RyZWFtRGF0YVBh
cnNlcjooQVZTdHJlYW1EYXRhUGFyc2VyICopc3RyZWFtRGF0YVBhcnNlciBkaWRQcm92aWRlTWVk
aWFEYXRhOihDTVNhbXBsZUJ1ZmZlclJlZiltZWRpYURhdGEgZm9yVHJhY2tJRDooQ01QZXJzaXN0
ZW50VHJhY2tJRCl0cmFja0lEIG1lZGlhVHlwZTooTlNTdHJpbmcgKiltZWRpYVR5cGUgZmxhZ3M6
KE5TVUludGVnZXIpZmxhZ3MKK3sKKyAgICBBU1NFUlQoc3RyZWFtRGF0YVBhcnNlciA9PSBfcGFy
c2VyKTsKKyAgICBfcGFyZW50LT5kaWRQcm92aWRlTWVkaWFEYXRhRm9yVHJhY2tJRCh0cmFja0lE
LCBtZWRpYURhdGEsIG1lZGlhVHlwZSwgZmxhZ3MpOworfQorCistICh2b2lkKXN0cmVhbURhdGFQ
YXJzZXI6KEFWU3RyZWFtRGF0YVBhcnNlciAqKXN0cmVhbURhdGFQYXJzZXIgZGlkUmVhY2hFbmRP
ZlRyYWNrV2l0aFRyYWNrSUQ6KENNUGVyc2lzdGVudFRyYWNrSUQpdHJhY2tJRCBtZWRpYVR5cGU6
KE5TU3RyaW5nICopbWVkaWFUeXBlCit7CisgICAgQVNTRVJUKHN0cmVhbURhdGFQYXJzZXIgPT0g
X3BhcnNlcik7CisgICAgX3BhcmVudC0+ZGlkUmVhY2hFbmRPZlRyYWNrV2l0aFRyYWNrSUQodHJh
Y2tJRCwgbWVkaWFUeXBlKTsKK30KK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjcHJh
Z21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIE1lZGlhU2FtcGxlQVZGT2JqQworCitjbGFzcyBNZWRp
YVNhbXBsZUFWRk9iakMgOiBwdWJsaWMgTWVkaWFTYW1wbGUgeworcHVibGljOgorICAgIHN0YXRp
YyBSZWZQdHI8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGUoQ01TYW1wbGVCdWZmZXJSZWYgc2Ft
cGxlLCBpbnQgdHJhY2tJRCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU2FtcGxlQVZGT2Jq
QyhzYW1wbGUsIHRyYWNrSUQpKTsgfQorICAgIHZpcnR1YWwgfk1lZGlhU2FtcGxlQVZGT2JqQygp
IHsgfQorCisgICAgdmlydHVhbCBNZWRpYVRpbWUgcHJlc2VudGF0aW9uVGltZSgpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIHRvTWVkaWFUaW1lKENNU2FtcGxlQnVmZmVyR2V0UHJlc2VudGF0aW9u
VGltZVN0YW1wKG1fc2FtcGxlLmdldCgpKSk7IH0KKyAgICB2aXJ0dWFsIE1lZGlhVGltZSBkZWNv
ZGVUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdG9NZWRpYVRpbWUoQ01TYW1wbGVCdWZm
ZXJHZXREZWNvZGVUaW1lU3RhbXAobV9zYW1wbGUuZ2V0KCkpKTsgfQorICAgIHZpcnR1YWwgTWVk
aWFUaW1lIGR1cmF0aW9uKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdG9NZWRpYVRpbWUoQ01T
YW1wbGVCdWZmZXJHZXREdXJhdGlvbihtX3NhbXBsZS5nZXQoKSkpOyB9CisgICAgdmlydHVhbCBB
dG9taWNTdHJpbmcgdHJhY2tJRCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faWQ7IH0KKwor
ICAgIHZpcnR1YWwgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgT1ZFUlJJREU7CisKK3Byb3RlY3Rl
ZDoKKyAgICBNZWRpYVNhbXBsZUFWRk9iakMoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlLCBpbnQg
dHJhY2tJRCkKKyAgICAgICAgOiBtX3NhbXBsZShzYW1wbGUpCisgICAgICAgICwgbV9pZChTdHJp
bmc6OmZvcm1hdCgiJWQiLCB0cmFja0lEKSkKKyAgICB7CisgICAgfQorCisgICAgUmV0YWluUHRy
PENNU2FtcGxlQnVmZmVyUmVmPiBtX3NhbXBsZTsKKyAgICBBdG9taWNTdHJpbmcgbV9pZDsKK307
CisKK1BsYXRmb3JtU2FtcGxlIE1lZGlhU2FtcGxlQVZGT2JqQzo6cGxhdGZvcm1TYW1wbGUoKQor
eworICAgIFBsYXRmb3JtU2FtcGxlIHNhbXBsZSA9IHsgUGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxl
QnVmZmVyVHlwZSwgeyAuY21TYW1wbGVCdWZmZXIgPSBtX3NhbXBsZS5nZXQoKSB9IH07CisgICAg
cmV0dXJuIHNhbXBsZTsKK30KKworc3RhdGljIGJvb2wgQ01TYW1wbGVCdWZmZXJJc1JhbmRvbUFj
Y2VzcyhDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUpCit7CisgICAgQ0ZBcnJheVJlZiBhdHRhY2ht
ZW50cyA9IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1wbGUsIGZh
bHNlKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoYXR0YWNo
bWVudHMpOyArK2kpIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnREaWN0ID0g
KENGRGljdGlvbmFyeVJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1lbnRzLCBpKTsK
KyAgICAgICAgaWYgKCFDRkRpY3Rpb25hcnlDb250YWluc0tleShhdHRhY2htZW50RGljdCwga0NN
U2FtcGxlQXR0YWNobWVudEtleV9Ob3RTeW5jKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK01lZGlhU2FtcGxlOjpTYW1wbGVGbGFncyBN
ZWRpYVNhbXBsZUFWRk9iakM6OmZsYWdzKCkgY29uc3QKK3sKKyAgICBpbnQgcmV0dXJuVmFsdWUg
PSBNZWRpYVNhbXBsZTo6Tm9uZTsKKworICAgIGlmIChDTVNhbXBsZUJ1ZmZlcklzUmFuZG9tQWNj
ZXNzKG1fc2FtcGxlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuVmFsdWUgfD0gTWVkaWFTYW1wbGU6
OklzU3luYzsKKworICAgIHJldHVybiBTYW1wbGVGbGFncyhyZXR1cm5WYWx1ZSk7Cit9CisKKyNw
cmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgTWVkaWFEZXNjcmlwdGlvbkFWRk9iakMKKworY2xh
c3MgTWVkaWFEZXNjcmlwdGlvbkFWRk9iakMgOiBwdWJsaWMgTWVkaWFEZXNjcmlwdGlvbiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxNZWRpYURlc2NyaXB0aW9uQVZGT2JqQz4gY3JlYXRl
KEFWQXNzZXRUcmFjayogdHJhY2spIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYURlc2NyaXB0
aW9uQVZGT2JqQyh0cmFjaykpOyB9CisgICAgdmlydHVhbCB+TWVkaWFEZXNjcmlwdGlvbkFWRk9i
akMoKSB7IH0KKworICAgIHZpcnR1YWwgQXRvbWljU3RyaW5nIGNvZGVjKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gbV9jb2RlYzsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1ZpZGVvKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gbV9pc1ZpZGVvOyB9CisgICAgdmlydHVhbCBib29sIGlzQXVkaW8o
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzQXVkaW87IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc1RleHQ7IH0KKyAgICAKK3Byb3Rl
Y3RlZDoKKyAgICBNZWRpYURlc2NyaXB0aW9uQVZGT2JqQyhBVkFzc2V0VHJhY2sqIHRyYWNrKQor
ICAgICAgICA6IG1faXNWaWRlbyhbdHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlh
Q2hhcmFjdGVyaXN0aWNWaXN1YWxdKQorICAgICAgICAsIG1faXNBdWRpbyhbdHJhY2sgaGFzTWVk
aWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlXSkKKyAgICAgICAg
LCBtX2lzVGV4dChbdHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVy
aXN0aWNMZWdpYmxlXSkKKyAgICB7CisgICAgICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZGVz
Y3JpcHRpb24gPSAoQ01Gb3JtYXREZXNjcmlwdGlvblJlZilbW3RyYWNrIGZvcm1hdERlc2NyaXB0
aW9uc10gZmlyc3RPYmplY3RdOworICAgICAgICBpZiAoZGVzY3JpcHRpb24pIHsKKyAgICAgICAg
ICAgIEZvdXJDaGFyQ29kZSBjb2RlYyA9IENNRm9ybWF0RGVzY3JpcHRpb25HZXRNZWRpYVN1YlR5
cGUoZGVzY3JpcHRpb24pOworICAgICAgICAgICAgbV9jb2RlYyA9IEF0b21pY1N0cmluZyhyZWlu
dGVycHJldF9jYXN0PExDaGFyKj4oJmNvZGVjKSwgNCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBBdG9taWNTdHJpbmcgbV9jb2RlYzsKKyAgICBib29sIG1faXNWaWRlbzsKKyAgICBib29sIG1f
aXNBdWRpbzsKKyAgICBib29sIG1faXNUZXh0OworfTsKKworI3ByYWdtYSBtYXJrIC0KKyNwcmFn
bWEgbWFyayBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQworCitSZWZQdHI8U291cmNlQnVmZmVy
UHJpdmF0ZUFWRk9iakM+IFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpjcmVhdGUoTWVkaWFT
b3VyY2VQcml2YXRlQVZGT2JqQyogcGFyZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMocGFyZW50KSk7Cit9CisKK1NvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyhNZWRpYVNvdXJjZVByaXZh
dGVBVkZPYmpDKiBwYXJlbnQpCisgICAgOiBtX3BhcmVudChwYXJlbnQpCisgICAgLCBtX2NsaWVu
dCgwKQorICAgICwgbV9wYXJzZXIoYWRvcHROUyhbW2dldEFWU3RyZWFtRGF0YVBhcnNlckNsYXNz
KCkgYWxsb2NdIGluaXRdKSkKKyAgICAsIG1fZGVsZWdhdGUoYWRvcHROUyhbW1dlYkFWU3RyZWFt
RGF0YVBhcnNlckxpc3RlbmVyIGFsbG9jXSBpbml0V2l0aFBhcnNlcjptX3BhcnNlci5nZXQoKSBw
YXJlbnQ6dGhpc10pKQorICAgICwgbV9wYXJzaW5nU3VjY2VlZGVkKHRydWUpCit7Cit9CisKK1Nv
dXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjp+U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMoKQor
eworICAgIGlmIChtX2Rpc3BsYXlMYXllcikgeworICAgICAgICBtX3BhcmVudC0+cGxheWVyKCkt
PnJlbW92ZURpc3BsYXlMYXllcihtX2Rpc3BsYXlMYXllci5nZXQoKSk7CisgICAgICAgIFttX2Rp
c3BsYXlMYXllciBmbHVzaEFuZFJlbW92ZUltYWdlXTsKKyAgICAgICAgW21fZGlzcGxheUxheWVy
IHN0b3BSZXF1ZXN0aW5nTWVkaWFEYXRhXTsKKyAgICAgICAgbV9kaXNwbGF5TGF5ZXIgPSBudWxs
cHRyOworICAgIH0KK30KKwordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZGlkUGFy
c2VTdHJlYW1EYXRhQXNBc3NldChBVkFzc2V0KiBhc3NldCkKK3sKKyAgICBMT0coTWVkaWEsICJT
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZGlkUGFyc2VTdHJlYW1EYXRhQXNBc3NldCglcCki
LCB0aGlzKTsKKworICAgIG1fYXNzZXQgPSBhc3NldDsKKworICAgIFNvdXJjZUJ1ZmZlclByaXZh
dGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQuZHVy
YXRpb24gPSB0b01lZGlhVGltZShbbV9hc3NldCBkdXJhdGlvbl0pOworCisgICAgZm9yIChBVkFz
c2V0VHJhY2sqIHRyYWNrIGluIFttX2Fzc2V0IHRyYWNrc10pIHsKKyAgICAgICAgaWYgKFt0cmFj
ayBoYXNNZWRpYUNoYXJhY3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJpc3RpY1Zpc3VhbF0pIHsK
KyAgICAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2Vn
bWVudDo6VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87CisgICAgICAgICAgICBpbmZvLnRyYWNr
ID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNyZWF0ZSh0cmFjaywgdGhp
cyk7CisgICAgICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gTWVkaWFEZXNjcmlwdGlvbkFWRk9i
akM6OmNyZWF0ZSh0cmFjayk7CisgICAgICAgICAgICBzZWdtZW50LnZpZGVvVHJhY2tzLmFwcGVu
ZChpbmZvKTsKKyAgICAgICAgfSBlbHNlIGlmIChbdHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3Rp
YzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlXSkgeworICAgICAgICAgICAgU291cmNlQnVm
ZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpBdWRpb1RyYWNrSW5mb3Jt
YXRpb24gaW5mbzsKKyAgICAgICAgICAgIGluZm8udHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzo6Y3JlYXRlKHRyYWNrLCB0aGlzKTsKKyAgICAgICAgICAgIGluZm8u
ZGVzY3JpcHRpb24gPSBNZWRpYURlc2NyaXB0aW9uQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsKKyAg
ICAgICAgICAgIHNlZ21lbnQuYXVkaW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRklYTUU6IEFkZCBUZXh0VHJhY2sgc3VwcG9ydAorICAgIH0KKworICAgIGlm
IChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNl
aXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KHRoaXMsIHNlZ21lbnQpOworfQorCit2b2lkIFNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpkaWRGYWlsVG9QYXJzZVN0cmVhbURhdGFXaXRoRXJyb3Io
TlNFcnJvciogZXJyb3IpCit7CisgICAgTE9HKE1lZGlhLCAiU291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakM6OmRpZEZhaWxUb1BhcnNlU3RyZWFtRGF0YVdpdGhFcnJvciglcCkgLSBlcnJvcjpcIiVz
XCIiLCB0aGlzLCBTdHJpbmcoW2Vycm9yIGRlc2NyaXB0aW9uXSkudXRmOCgpLmRhdGEoKSk7CisK
KyAgICBtX3BhcnNpbmdTdWNjZWVkZWQgPSBmYWxzZTsKK30KKworc3RydWN0IFByb2Nlc3NDb2Rl
ZEZyYW1lSW5mbyB7CisgICAgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMqIHNvdXJjZUJ1ZmZl
cjsKKyAgICBpbnQgdHJhY2tJRDsKKyAgICBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZTsKK307CisK
K3N0YXRpYyBPU1N0YXR1cyBjYWxsUHJvY2Vzc0NvZGVkRnJhbWVGb3JFYWNoU2FtcGxlKENNU2Ft
cGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlciwgQ01JdGVtQ291bnQsIHZvaWQgKnJlZmNvbikKK3sK
KyAgICBQcm9jZXNzQ29kZWRGcmFtZUluZm8qIGluZm8gPSAoUHJvY2Vzc0NvZGVkRnJhbWVJbmZv
KilyZWZjb247CisgICAgcmV0dXJuIGluZm8tPnNvdXJjZUJ1ZmZlci0+cHJvY2Vzc0NvZGVkRnJh
bWUoaW5mby0+dHJhY2tJRCwgc2FtcGxlQnVmZmVyLCBpbmZvLT5tZWRpYVR5cGUpOworfQorCit2
b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpkaWRQcm92aWRlTWVkaWFEYXRhRm9yVHJh
Y2tJRChpbnQgdHJhY2tJRCwgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyLCBjb25zdCBT
dHJpbmcmIG1lZGlhVHlwZSwgdW5zaWduZWQgZmxhZ3MpCit7CisgICAgVU5VU0VEX1BBUkFNKGZs
YWdzKTsKKworICAgIFByb2Nlc3NDb2RlZEZyYW1lSW5mbyBpbmZvID0ge3RoaXMsIHRyYWNrSUQs
IG1lZGlhVHlwZX07CisgICAgQ01TYW1wbGVCdWZmZXJDYWxsRm9yRWFjaFNhbXBsZShzYW1wbGVC
dWZmZXIsICZjYWxsUHJvY2Vzc0NvZGVkRnJhbWVGb3JFYWNoU2FtcGxlLCAmaW5mbyk7Cit9CisK
K2Jvb2wgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnByb2Nlc3NDb2RlZEZyYW1lKGludCB0
cmFja0lELCBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXIsIGNvbnN0IFN0cmluZyYpCit7
CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c291cmNlQnVmZmVyUHJpdmF0
ZURpZFJlY2VpdmVTYW1wbGUodGhpcywgTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxl
QnVmZmVyLCB0cmFja0lEKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQzo6ZGlkUmVhY2hFbmRPZlRyYWNrV2l0aFRyYWNrSUQoaW50IHRy
YWNrSUQsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlKQoreworICAgIFVOVVNFRF9QQVJBTShtZWRp
YVR5cGUpOworICAgIFVOVVNFRF9QQVJBTSh0cmFja0lEKTsKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpzZXRDbGllbnQoU291cmNl
QnVmZmVyUHJpdmF0ZUNsaWVudCogY2xpZW50KQoreworICAgIG1fY2xpZW50ID0gY2xpZW50Owor
fQorCitTb3VyY2VCdWZmZXJQcml2YXRlOjpBcHBlbmRSZXN1bHQgU291cmNlQnVmZmVyUHJpdmF0
ZUFWRk9iakM6OmFwcGVuZChjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgbV9wYXJzaW5nU3VjY2VlZGVkID0gdHJ1ZTsKKworICAgIExPRyhNZWRpYSwg
IlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjphcHBlbmQoJXApIC0gZGF0YTolcCwgbGVuZ3Ro
OiVkIiwgdGhpcywgZGF0YSwgbGVuZ3RoKTsKKyAgICBbbV9wYXJzZXIgYXBwZW5kU3RyZWFtRGF0
YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YSBsZW5ndGg6bGVuZ3RoXV07CisKKyAgICBpZiAo
bV9wYXJzaW5nU3VjY2VlZGVkKQorICAgICAgICBtX3BhcmVudC0+cGxheWVyKCktPnNldExvYWRp
bmdQcm9ncmVzc3NlZCh0cnVlKTsKKworICAgIHJldHVybiBtX3BhcnNpbmdTdWNjZWVkZWQgPyBB
cHBlbmRTdWNjZWVkZWQgOiBQYXJzaW5nRmFpbGVkOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDOjphYm9ydCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSgpCit7
CisgICAgaWYgKG1fZGlzcGxheUxheWVyKSB7CisgICAgICAgIG1fcGFyZW50LT5wbGF5ZXIoKS0+
cmVtb3ZlRGlzcGxheUxheWVyKG1fZGlzcGxheUxheWVyLmdldCgpKTsKKyAgICAgICAgW21fZGlz
cGxheUxheWVyIGZsdXNoXTsKKyAgICAgICAgW21fZGlzcGxheUxheWVyIHN0b3BSZXF1ZXN0aW5n
TWVkaWFEYXRhXTsKKyAgICAgICAgbV9kaXNwbGF5TGF5ZXIgPSBudWxscHRyOworICAgIH0KKwor
ICAgIG1fcGFyZW50LT5yZW1vdmVTb3VyY2VCdWZmZXIodGhpcyk7Cit9CisKK01lZGlhUGxheWVy
OjpSZWFkeVN0YXRlIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpyZWFkeVN0YXRlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wYXJlbnQtPnBsYXllcigpLT5yZWFkeVN0YXRlKCk7Cit9CisK
K3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5
ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKK3sKKyAgICBtX3BhcmVudC0+cGxheWVyKCktPnNl
dFJlYWR5U3RhdGUocmVhZHlTdGF0ZSk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakM6OmV2aWN0Q29kZWRGcmFtZXMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K2Jvb2wgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmlzRnVsbCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKworYm9vbCBTb3VyY2VCdWZmZXJQ
cml2YXRlQVZGT2JqQzo6aGFzVmlkZW8oKSBjb25zdAoreworICAgIGlmICghbV9jbGllbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX2NsaWVudC0+c291cmNlQnVmZmVy
UHJpdmF0ZUhhc1ZpZGVvKHRoaXMpOworfQorCitib29sIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZP
YmpDOjpoYXNBdWRpbygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fY2xpZW50LT5zb3VyY2VCdWZmZXJQcml2YXRlSGFz
QXVkaW8odGhpcyk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnRyYWNr
RGlkQ2hhbmdlRW5hYmxlZChWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyogdHJh
Y2spCit7CisgICAgaW50IHRyYWNrSUQgPSB0cmFjay0+dHJhY2tJRCgpOworICAgIGlmICghdHJh
Y2stPnNlbGVjdGVkKCkgJiYgbV9lbmFibGVkVmlkZW9UcmFja0lEID09IHRyYWNrSUQpIHsKKyAg
ICAgICAgbV9lbmFibGVkVmlkZW9UcmFja0lEID0gLTE7CisgICAgICAgIFttX3BhcnNlciBzZXRT
aG91bGRQcm92aWRlTWVkaWFEYXRhOk5PIGZvclRyYWNrSUQ6dHJhY2tJRF07CisgICAgfSBlbHNl
IGlmICh0cmFjay0+c2VsZWN0ZWQoKSkgeworICAgICAgICBtX2VuYWJsZWRWaWRlb1RyYWNrSUQg
PSB0cmFja0lEOworICAgICAgICBbbV9wYXJzZXIgc2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YTpZ
RVMgZm9yVHJhY2tJRDp0cmFja0lEXTsKKyAgICAgICAgaWYgKCFtX2Rpc3BsYXlMYXllcikgewor
ICAgICAgICAgICAgbV9kaXNwbGF5TGF5ZXIgPSBbW2dldEFWU2FtcGxlQnVmZmVyRGlzcGxheUxh
eWVyQ2xhc3MoKSBhbGxvY10gaW5pdF07CisgICAgICAgICAgICBbbV9kaXNwbGF5TGF5ZXIgcmVx
dWVzdE1lZGlhRGF0YVdoZW5SZWFkeU9uUXVldWU6ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSB1
c2luZ0Jsb2NrOl57CisgICAgICAgICAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAg
ICAgICAgICBtX2NsaWVudC0+c291cmNlQnVmZmVyUHJpdmF0ZURpZEJlY29tZVJlYWR5Rm9yTW9y
ZVNhbXBsZXModGhpcyk7CisgICAgICAgICAgICB9XTsKKyAgICAgICAgICAgIG1fcGFyZW50LT5w
bGF5ZXIoKS0+YWRkRGlzcGxheUxheWVyKG1fZGlzcGxheUxheWVyLmdldCgpKTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6dHJhY2tEaWRD
aGFuZ2VFbmFibGVkKEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKikKK3sKKyAg
ICAvLyBOby1vcC4KK30KKworc3RhdGljIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gY3Jl
YXRlTm9uRGlzcGxheWluZ0NvcHkoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyKQorewor
ICAgIENNU2FtcGxlQnVmZmVyUmVmIG5ld1NhbXBsZUJ1ZmZlciA9IDA7CisgICAgQ01TYW1wbGVC
dWZmZXJDcmVhdGVDb3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIHNhbXBsZUJ1ZmZlciwgJm5ld1Nh
bXBsZUJ1ZmZlcik7CisgICAgaWYgKCFuZXdTYW1wbGVCdWZmZXIpCisgICAgICAgIHJldHVybiBz
YW1wbGVCdWZmZXI7CisKKyAgICBDRkFycmF5UmVmIGF0dGFjaG1lbnRzQXJyYXkgPSBDTVNhbXBs
ZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkobmV3U2FtcGxlQnVmZmVyLCB0cnVlKTsK
KyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNB
cnJheSk7ICsraSkgeworICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRz
ID0gKENGTXV0YWJsZURpY3Rpb25hcnlSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhdHRhY2ht
ZW50c0FycmF5LCBpKTsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoYXR0YWNobWVudHMs
IGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfRG9Ob3REaXNwbGF5LCBrQ0ZCb29sZWFuVHJ1ZSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGFkb3B0Q0YobmV3U2FtcGxlQnVmZmVyKTsKK30KKwordm9pZCBT
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6Zmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1Nh
bXBsZXMoVmVjdG9yPFJlZlB0cjxNZWRpYVNhbXBsZT4+IG1lZGlhU2FtcGxlcywgQXRvbWljU3Ry
aW5nIHRyYWNrSUQpCit7CisgICAgaWYgKHRyYWNrSUQudG9JbnQoKSAhPSBtX2VuYWJsZWRWaWRl
b1RyYWNrSUQpCisgICAgICAgIHJldHVybjsKKworICAgIExPRyhNZWRpYSwgIlNvdXJjZUJ1ZmZl
clByaXZhdGVBVkZPYmpDOjpmbHVzaEFuZEVucXVldWVOb25EaXNwbGF5aW5nU2FtcGxlcyglcCkg
c2FtcGxlczogJWQgc2FtcGxlcywgdHJhY2tJZDogJWQiLCB0aGlzLCBtZWRpYVNhbXBsZXMuc2l6
ZSgpLCB0cmFja0lELnRvSW50KCkpOworCisgICAgW21fZGlzcGxheUxheWVyIGZsdXNoXTsKKwor
ICAgIGZvciAoYXV0byBpdCA9IG1lZGlhU2FtcGxlcy5iZWdpbigpLCBlbmQgPSBtZWRpYVNhbXBs
ZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZWZQdHI8TWVkaWFTYW1wbGU+
JiBtZWRpYVNhbXBsZSA9ICppdDsKKworICAgICAgICBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9ybVNh
bXBsZSA9IG1lZGlhU2FtcGxlLT5wbGF0Zm9ybVNhbXBsZSgpOworICAgICAgICBpZiAocGxhdGZv
cm1TYW1wbGUudHlwZSAhPSBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBlKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4g
c2FtcGxlQnVmZmVyID0gY3JlYXRlTm9uRGlzcGxheWluZ0NvcHkocGxhdGZvcm1TYW1wbGUuc2Ft
cGxlLmNtU2FtcGxlQnVmZmVyKTsKKworICAgICAgICBbbV9kaXNwbGF5TGF5ZXIgZW5xdWV1ZVNh
bXBsZUJ1ZmZlcjpzYW1wbGVCdWZmZXIuZ2V0KCldOworICAgIH0KKworICAgIG1fcGFyZW50LT5w
bGF5ZXIoKS0+c2V0SGFzQXZhaWxhYmxlVmlkZW9GcmFtZShmYWxzZSk7Cit9CisKK3ZvaWQgU291
cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmVucXVldWVTYW1wbGUoUGFzc1JlZlB0cjxNZWRpYVNh
bXBsZT4gcHJwTWVkaWFTYW1wbGUsIEF0b21pY1N0cmluZyB0cmFja0lEKQoreworICAgIGlmICh0
cmFja0lELnRvSW50KCkgIT0gbV9lbmFibGVkVmlkZW9UcmFja0lEKQorICAgICAgICByZXR1cm47
CisKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IG1lZGlhU2FtcGxlID0gcHJwTWVkaWFTYW1wbGU7
CisKKyAgICBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9ybVNhbXBsZSA9IG1lZGlhU2FtcGxlLT5wbGF0
Zm9ybVNhbXBsZSgpOworICAgIGlmIChwbGF0Zm9ybVNhbXBsZS50eXBlICE9IFBsYXRmb3JtU2Ft
cGxlOjpDTVNhbXBsZUJ1ZmZlclR5cGUpCisgICAgICAgIHJldHVybjsKKworICAgIFttX2Rpc3Bs
YXlMYXllciBlbnF1ZXVlU2FtcGxlQnVmZmVyOnBsYXRmb3JtU2FtcGxlLnNhbXBsZS5jbVNhbXBs
ZUJ1ZmZlcl07CisgICAgbV9wYXJlbnQtPnBsYXllcigpLT5zZXRIYXNBdmFpbGFibGVWaWRlb0Zy
YW1lKHRydWUpOworfQorCitib29sIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjppc1JlYWR5
Rm9yTW9yZVNhbXBsZXMoKQoreworICAgIHJldHVybiBbbV9kaXNwbGF5TGF5ZXIgaXNSZWFkeUZv
ck1vcmVNZWRpYURhdGFdOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpz
ZXRBY3RpdmUoYm9vbCBpc0FjdGl2ZSkKK3sKKyAgICBtX3BhcmVudC0+c291cmNlQnVmZmVyUHJp
dmF0ZURpZENoYW5nZUFjdGl2ZVN0YXRlKHRoaXMsIGlzQWN0aXZlKTsKK30KKworTWVkaWFUaW1l
IFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpmYXN0U2Vla1RpbWVGb3JNZWRpYVRpbWUoTWVk
aWFUaW1lIHRpbWUsIE1lZGlhVGltZSBuZWdhdGl2ZVRocmVzaG9sZCwgTWVkaWFUaW1lIHBvc2l0
aXZlVGhyZXNob2xkKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuIG1fY2xp
ZW50LT5zb3VyY2VCdWZmZXJQcml2YXRlRmFzdFNlZWtUaW1lRm9yTWVkaWFUaW1lKHRoaXMsIHRp
bWUsIG5lZ2F0aXZlVGhyZXNob2xkLCBwb3NpdGl2ZVRocmVzaG9sZCk7CisgICAgcmV0dXJuIHRp
bWU7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnNlZWtUb1RpbWUoTWVk
aWFUaW1lIHRpbWUpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c291
cmNlQnVmZmVyUHJpdmF0ZVNlZWtUb1RpbWUodGhpcywgdGltZSk7Cit9CisKK30KKworI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5EQVRJT04pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9WaWRl
b1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9WaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRiZDg4Yzg4OGIzODc3NzQ2MWNiMjgxMTk2YzQ1
MTBiOTM4YzM0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1ZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDLmNwcApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgiCisKKyNpZiBF
TkFCTEUoTUVESUFfU09VUkNFKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJB
VlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsLmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0
ZUFWRk9iakMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWaWRlb1RyYWNrUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzo6VmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoQVZB
c3NldFRyYWNrKiB0cmFjaywgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMqIHBhcmVudCkKKyAg
ICA6IG1faW1wbChzdGQ6Om1ha2VfdW5pcXVlPEFWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGw+KHRy
YWNrKSkKKyAgICAsIG1fcGFyZW50KHBhcmVudCkKKyAgICAsIG1fdHJhY2tJRCgtMSkKKyAgICAs
IG1fc2VsZWN0ZWQoZmFsc2UpCit7CisgICAgcmVzZXRQcm9wZXJ0aWVzRnJvbVRyYWNrKCk7Cit9
CisKK3ZvaWQgVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnJlc2V0UHJvcGVy
dGllc0Zyb21UcmFjaygpCit7CisgICAgbV90cmFja0lEID0gbV9pbXBsLT50cmFja0lEKCk7CisK
KyAgICBzZXRLaW5kKG1faW1wbC0+dmlkZW9LaW5kKCkpOworICAgIHNldElkKG1faW1wbC0+aWQo
KSk7CisgICAgc2V0TGFiZWwobV9pbXBsLT5sYWJlbCgpKTsKKyAgICBzZXRMYW5ndWFnZShtX2lt
cGwtPmxhbmd1YWdlKCkpOworfQorCit2b2lkIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjpzZXRBc3NldFRyYWNrKEFWQXNzZXRUcmFjayAqdHJhY2spCit7CisgICAgbV9pbXBs
ID0gc3RkOjptYWtlX3VuaXF1ZTxBVlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsPih0cmFjayk7Cisg
ICAgcmVzZXRQcm9wZXJ0aWVzRnJvbVRyYWNrKCk7Cit9CisKK0FWQXNzZXRUcmFjayogVmlkZW9U
cmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmFzc2V0VHJhY2soKQoreworICAgIHJldHVy
biBtX2ltcGwtPmFzc2V0VHJhY2soKTsKK30KKworCitib29sIFZpZGVvVHJhY2tQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjpzZWxlY3RlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2VsZWN0
ZWQ7Cit9CisKK3ZvaWQgVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldFNl
bGVjdGVkKGJvb2wgc2VsZWN0ZWQpCit7CisgICAgaWYgKG1fc2VsZWN0ZWQgPT0gc2VsZWN0ZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fc2VsZWN0ZWQgPSBzZWxlY3RlZDsKKyAgICBtX3Bh
cmVudC0+dHJhY2tEaWRDaGFuZ2VFbmFibGVkKHRoaXMpOworfQorCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1ZpZGVvVHJhY2tQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjMzNmUxYmJjZjc2YmI5YjY4YTVhNzFkNWRi
YTQzOWFlMzY5NDI2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1ZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVmlkZW9UcmFja1By
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakNfaAorI2RlZmluZSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQ19oCisKKyNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZUFWRi5oIgorCisj
aWYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQorCitPQkpDX0NM
QVNTIEFWQXNzZXRUcmFjazsKK09CSkNfQ0xBU1MgQVZQbGF5ZXJJdGVtVHJhY2s7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbDsKK2NsYXNz
IFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOworCitjbGFzcyBWaWRlb1RyYWNrUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQyBGSU5BTCA6IHB1YmxpYyBWaWRlb1RyYWNrUHJpdmF0ZUFWRiB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akMpCitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQz4gY3JlYXRlKEFWQXNzZXRUcmFjayogdHJhY2ssIFNvdXJjZUJ1ZmZlclByaXZh
dGVBVkZPYmpDKiBwYXJlbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFZp
ZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKHRyYWNrLCBwYXJlbnQpKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0ZWQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbCkgT1ZFUlJJREU7CisKKyAgICB2b2lkIHNldEFzc2V0
VHJhY2soQVZBc3NldFRyYWNrKik7CisgICAgQVZBc3NldFRyYWNrKiBhc3NldFRyYWNrKCk7CisK
KyAgICBpbnQgdHJhY2tJRCgpIHsgcmV0dXJuIG1fdHJhY2tJRDsgfQorCitwcml2YXRlOgorICAg
IGV4cGxpY2l0IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKEFWQXNzZXRUcmFj
ayosIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKiBwYXJlbnQpOworICAgIAorICAgIHZvaWQg
cmVzZXRQcm9wZXJ0aWVzRnJvbVRyYWNrKCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVZUcmFj
a1ByaXZhdGVBVkZPYmpDSW1wbD4gbV9pbXBsOworICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZP
YmpDKiBtX3BhcmVudDsKKyAgICBpbnQgbV90cmFja0lEOworICAgIGJvb2wgbV9zZWxlY3RlZDsK
K307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVOQUJMRShWSURF
T19UUkFDSykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvUGxhdGZvcm1DbG9ja0NNLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZv
cm1DbG9ja0NNLmgKaW5kZXggOWVlNDlhNzZhZmM5OGIzMGI5NmZjOTA3NGFjNWQ1YzY3Mzc3Y2Qw
Ny4uODdlNzJjODI3ZjBlMjAzZGE3MjM4ZWFmYjRmZmNkOTBmNWRiZTBhZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtQ2xvY2tDTS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUNsb2NrQ00uaApAQCAtNTUsNiArNTUsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKSBPVkVSUklERTsKICAgICB2aXJ0dWFs
IGJvb2wgaXNSdW5uaW5nKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9ydW5uaW5nOyB9CiAK
KyAgICBDTVRpbWViYXNlUmVmIHRpbWViYXNlKCkgY29uc3QgeyByZXR1cm4gbV90aW1lYmFzZS5n
ZXQoKTsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZVdpdGhUaW1pbmdTb3VyY2Uo
Q01DbG9ja1JlZik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
b2Z0TGlua2luZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmgK
aW5kZXggODFjNTEwYWZiOTJiY2Q3NDBlMDk1ZWFlMGJhOGFlMWQ4OTg1M2I4OS4uNTU0MWIwMDky
NzZjZTU2NzkwYWYyMmMyYTRlMzEzYjQzZTFhMTY0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1NvZnRMaW5raW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1NvZnRMaW5raW5nLmgKQEAgLTExOCw2ICsxMTgsMjQgQEAKICAgICAgICAgcmV0dXJu
IGNsYXNzIyNjbGFzc05hbWU7IFwKICAgICB9CiAKKyNkZWZpbmUgU09GVF9MSU5LX0NMQVNTX09Q
VElPTkFMKGZyYW1ld29yaywgY2xhc3NOYW1lKSBcCisgICAgc3RhdGljIENsYXNzIGluaXQjI2Ns
YXNzTmFtZSgpOyBcCisgICAgc3RhdGljIENsYXNzICgqZ2V0IyNjbGFzc05hbWUjI0NsYXNzKSgp
ID0gaW5pdCMjY2xhc3NOYW1lOyBcCisgICAgc3RhdGljIENsYXNzIGNsYXNzIyNjbGFzc05hbWU7
IFwKKyAgICBcCisgICAgc3RhdGljIENsYXNzIGNsYXNzTmFtZSMjRnVuY3Rpb24oKSBcCisgICAg
eyBcCisgICAgICAgIHJldHVybiBjbGFzcyMjY2xhc3NOYW1lOyBcCisgICAgfVwKKyAgICBcCisg
ICAgc3RhdGljIENsYXNzIGluaXQjI2NsYXNzTmFtZSgpIFwKKyAgICB7IFwKKyAgICAgICAgZnJh
bWV3b3JrIyNMaWJyYXJ5KCk7IFwKKyAgICAgICAgY2xhc3MjI2NsYXNzTmFtZSA9IG9iamNfZ2V0
Q2xhc3MoI2NsYXNzTmFtZSk7IFwKKyAgICAgICAgZ2V0IyNjbGFzc05hbWUjI0NsYXNzID0gY2xh
c3NOYW1lIyNGdW5jdGlvbjsgXAorICAgICAgICByZXR1cm4gY2xhc3MjI2NsYXNzTmFtZTsgXAor
ICAgIH0KKwogI2RlZmluZSBTT0ZUX0xJTktfUE9JTlRFUihmcmFtZXdvcmssIG5hbWUsIHR5cGUp
IFwKICAgICBzdGF0aWMgdHlwZSBpbml0IyNuYW1lKCk7IFwKICAgICBzdGF0aWMgdHlwZSAoKmdl
dCMjbmFtZSkoKSA9IGluaXQjI25hbWU7IFwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218240</attachid>
            <date>2013-12-02 16:47:44 -0800</date>
            <delta_ts>2013-12-04 09:57:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-123378-20131202164744.patch</filename>
            <type>text/plain</type>
            <size>107143</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5OTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhiNmJhMjBkYTY5MTcz
OGM1M2MzMDVjZjM3YWRkMTc0YzBjMWQwZi4uMDI5YzdiYWY3YzAxZDlkYjk3MWU4M2EzZjdiNmJl
M2YyZDNjZGE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3NiBAQAorMjAxMy0xMS0xNSAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAgICBbTVNFXVtNYWNdIEFkZCBh
IG5ldyBNU0UtY29tcGF0aWJsZSBNZWRpYVBsYXllclByaXZhdGUgaW1wbGVtZW50YXRpb24sIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMzc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIEFWRm91bmRhdGlvbiBpbXBsZW1lbnRh
dGlvbiBvZiBNZWRpYVBsYXllclByaXZhdGUgd2hpY2ggY3JlYXRlcyBhbmQgdXNlcworICAgICAg
ICBNZWRpYVNvdXJjZVByaXZhdGUgYW5kIFNvdXJjZUJ1ZmZlclByaXZhdGUgc3ViY2xhc3Nlcy4K
KworICAgICAgICBBZGQgdGhlIG5ldyBtZWRpYSBlbmdpbmUgdG8gdGhlIGxpc3Qgb2YgaW5zdGFs
bGVkIGVuZ2luZXM6CisgICAgICAgICogcGxhdGZvcm0vTWVkaWFTYW1wbGUuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpp
bnN0YWxsZWRNZWRpYUVuZ2luZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmg6CisKKyAgICAgICAgQWRkIHRoZSBuZXcgZmlsZXMgdG8gdGhlIHByb2plY3Q6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgIERy
aXZlIGJ5IGZpeCBmb3IgcG9ydHMgd2hvIGltcGxlbWVudCBzZWVrRG91YmxlKCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmg6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OnNlZWtXaXRoVG9sZXJhbmNlKToKKwor
ICAgICAgICBBZGQgbmV3IFZpZGVvIGFuZCBBdWRpb1RyYWNrUHJpdmF0ZSB0eXBlcyB3aGljaCBo
YW5kbGUgdGhlaXIgb3duIGVuYWJsZSBzdGF0ZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9BdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5j
cHA6IEFkZGVkCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6QXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnJlc2V0UHJvcGVy
dGllc0Zyb21UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6c2V0QXNzZXRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1Ry
YWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6YXNzZXRUcmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0RW5hYmxlZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQXVkaW9UcmFja1By
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDogQWRkZWQKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9WaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakM6OlZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpyZXNldFBy
b3BlcnRpZXNGcm9tVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakM6OnNldEFzc2V0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Vmlk
ZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmFzc2V0VHJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldFNlbGVjdGVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9WaWRlb1Ry
YWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOiBBZGRlZC4KKworICAgICAgICBBZGQgYSBu
ZXcgTWVkaWFQbGF5ZXJQcml2YXRlIHdoaWNoIGNhbiBoYW5kbGUgTWVkaWFTb3VyY2Ugb2JqZWN0
czoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQzo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qzo6fk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnJlZ2lzdGVyTWVkaWFF
bmdpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjppc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjptaW1lVHlw
ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpsb2FkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y2FuY2Vs
TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnByZXBhcmVUb1BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwbGF0Zm9ybU1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cGxhdGZvcm1MYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjpwbGF5SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBhdXNlSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwYXVzZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdXBw
b3J0c1NjYW5uaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6bmF0dXJhbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpoYXNWaWRlbyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6Omhhc0F1ZGlvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0Vmlz
aWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OmR1cmF0aW9uRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y3VycmVudFRpbWVEb3VibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdGFydFRpbWVEb3Vi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjppbml0aWFsVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtXaXRoVG9sZXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vla0ludGVybmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vl
a2luZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnNldFJhdGVEb3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpyZWFkeVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vla2Fi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjptYXhUaW1lU2Vla2FibGVEb3VibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjptaW5UaW1lU2Vla2FibGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpidWZmZXJlZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6
OmRpZExvYWRpbmdQcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBhaW50Q3VycmVudEZyYW1l
SW5Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6aGFzQXZhaWxhYmxlVmlkZW9GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN1cHBvcnRzQWNjZWxlcmF0ZWRS
ZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6Om1vdmllTG9hZFR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjpwcmVwYXJlRm9yUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6ZW5naW5lRGVzY3JpcHRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpsYW5ndWFnZU9m
UHJpbWFyeUF1ZGlvVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjpleHRyYU1lbW9yeUNvc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjplbnN1cmVMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmRlc3Ry
b3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OnVwZGF0ZUR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0UmVhZHlTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6
OnNldE5ldHdvcmtTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakM6OmFkZERpc3BsYXlMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnJlbW92ZURpc3BsYXlMYXllcik6
CisKKyAgICAgICAgQWRkIGEgbmV3IE1lZGlhU291cmNlUHJpdmF0ZSBpbXBsZW1lbnRhdGlvbjoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQzo6cGxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakM6OmFjdGl2ZVNvdXJjZUJ1ZmZlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW06IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6Ok1lZGlhU291
cmNlUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6fk1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6YWRkU291cmNlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6OnJlbW92ZVNvdXJjZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpkdXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzZXREdXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjptYXJrRW5kT2ZT
dHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6dW5t
YXJrRW5kT2ZTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZG
T2JqQzo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDOjpzZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakM6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRDaGFuZ2VBY3RpdmVTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDSGFzQXVkaW8pOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6aGFzQXVkaW8pOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQ0hhc1ZpZGVvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6Omhhc1ZpZGVvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6OnNlZWtUb1RpbWUpOgorCisg
ICAgICAgIEFkZCBhIG5ldyBTb3VyY2VCdWZmZXJQcml2YXRlIGltcGxlbWVudGF0aW9uOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tOiBBZGRlZC4KKyAgICAg
ICAgKC1bV2ViQVZTdHJlYW1EYXRhUGFyc2VyTGlzdGVuZXIgaW5pdFdpdGhQYXJzZXI6cGFyZW50
OldlYkNvcmU6Ol0pOgorICAgICAgICAoLVtXZWJBVlN0cmVhbURhdGFQYXJzZXJMaXN0ZW5lciBk
ZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkFWU3RyZWFtRGF0YVBhcnNlckxpc3RlbmVyIHN0cmVh
bURhdGFQYXJzZXI6ZGlkUGFyc2VTdHJlYW1EYXRhQXNBc3NldDpdKToKKyAgICAgICAgKC1bV2Vi
QVZTdHJlYW1EYXRhUGFyc2VyTGlzdGVuZXIgc3RyZWFtRGF0YVBhcnNlcjpkaWRGYWlsVG9QYXJz
ZVN0cmVhbURhdGFXaXRoRXJyb3I6XSk6CisgICAgICAgICgtW1dlYkFWU3RyZWFtRGF0YVBhcnNl
ckxpc3RlbmVyIHN0cmVhbURhdGFQYXJzZXI6ZGlkUHJvdmlkZU1lZGlhRGF0YTpmb3JUcmFja0lE
Om1lZGlhVHlwZTpmbGFnczpdKToKKyAgICAgICAgKC1bV2ViQVZTdHJlYW1EYXRhUGFyc2VyTGlz
dGVuZXIgc3RyZWFtRGF0YVBhcnNlcjpkaWRSZWFjaEVuZE9mVHJhY2tXaXRoVHJhY2tJRDptZWRp
YVR5cGU6XSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakM6On5NZWRpYVNhbXBsZUFWRk9i
akMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVBVkZPYmpDOjpNZWRpYVNhbXBsZUFW
Rk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVBVkZPYmpDOjpwbGF0Zm9ybVNh
bXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpDTVNhbXBsZUJ1ZmZlcklzUmFuZG9tQWNjZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlQVZGT2JqQzo6ZmxhZ3MpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFEZXNjcmlwdGlvbkFWRk9iakM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYURlc2NyaXB0aW9uQVZGT2JqQzo6fk1lZGlhRGVzY3JpcHRpb25BVkZPYmpDKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRGVzY3JpcHRpb25BVkZPYmpDOjpNZWRpYURlc2NyaXB0
aW9uQVZGT2JqQyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2Jq
Qzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
OjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQzo6flNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpkaWRQYXJzZVN0cmVhbURh
dGFBc0Fzc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
OjpkaWRGYWlsVG9QYXJzZVN0cmVhbURhdGFXaXRoRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6
Y2FsbFByb2Nlc3NDb2RlZEZyYW1lRm9yRWFjaFNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZGlkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNrSUQp
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnByb2Nlc3ND
b2RlZEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
OjpkaWRSZWFjaEVuZE9mVHJhY2tXaXRoVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpyZW1vdmVkRnJvbU1lZGlhU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpyZWFkeVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpldmljdENvZGVk
RnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpp
c0Z1bGwpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6Omhh
c1ZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpo
YXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6
dHJhY2tEaWRDaGFuZ2VFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU5vbkRpc3Bs
YXlpbmdDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
OjpmbHVzaEFuZEVucXVldWVOb25EaXNwbGF5aW5nU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZW5xdWV1ZVNhbXBsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6aXNSZWFkeUZvck1vcmVTYW1wbGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpzZXRBY3Rp
dmUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmZhc3RT
ZWVrVGltZUZvck1lZGlhVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQzo6c2Vla1RvVGltZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXRmb3Jt
Q2xvY2tDTS5oOgorCisgICAgICAgIEFkZCBhIFNPRlRfTElOS19DTEFTU19PUFRJT05BTCBtYWNy
bzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaDoKKwogMjAxMy0xMi0wMiAg
QmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgc2V0dGluZyB0
byBvcHQgaW50byBhIG1vZGUgd2hlcmUgdGhlIGJhY2tncm91bmQgZXh0ZW5kcyBhbmQgZml4ZWQg
ZWxlbWVudHMgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L1NvdXJjZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1Nv
dXJjZUJ1ZmZlci5jcHAKaW5kZXggNGVhZWVhNDZjZmNlNjI5OTM4YThhYmNmMjlkMGMyN2IxYTVl
ZDZlYi4uYWVmZDNiOWU5MDZhNTg1OTA0MDRhZTA3MmU4NmUwY2IyY2JkMDUwYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcApA
QCAtOTkzLDEyICs5OTMsMTIgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZh
dGVEaWRSZWNlaXZlU2FtcGxlKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBQYXMKIAogYm9vbCBTb3Vy
Y2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVIYXNBdWRpbyhjb25zdCBTb3VyY2VCdWZmZXJQ
cml2YXRlKikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9hdWRpb1RyYWNrcy0+bGVuZ3RoKCk7Cisg
ICAgcmV0dXJuIG1fYXVkaW9UcmFja3MgJiYgbV9hdWRpb1RyYWNrcy0+bGVuZ3RoKCk7CiB9CiAK
IGJvb2wgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlSGFzVmlkZW8oY29uc3QgU291
cmNlQnVmZmVyUHJpdmF0ZSopIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdmlkZW9UcmFja3MtPmxl
bmd0aCgpOworICAgIHJldHVybiBtX3ZpZGVvVHJhY2tzICYmIG1fdmlkZW9UcmFja3MtPmxlbmd0
aCgpOwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6dmlkZW9UcmFja1NlbGVjdGVkQ2hhbmdlZChW
aWRlb1RyYWNrKiB0cmFjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBjNWY0MDk1MzlkOTdlNTA1MzMyMzZiMDcyMzc4YTlkZTRh
OWY5YjE2Li45NGJkZjUzODE0MzIyYTcyNTUxMTQ5MGQ5NmVkOTQ1NmM0ZmU2NzdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01
MzM5LDYgKzUzMzksOCBAQAogCQlDRDRBQzUyQTE0OTZBRTlBMDA4N0M0RUYgLyogQ29tcG9zaXRl
LndhdiBpbiBDb3B5IEF1ZGlvIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRDRBQzUyODE0OTZBRTJGMDA4N0M0RUYgLyogQ29tcG9zaXRlLndhdiAqLzsgfTsK
IAkJQ0Q1MzkzRDMxNzVFMDE4NjAwQzA3MTIzIC8qIEpTTWVtb3J5SW5mby5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDUzOTNEMTE3NUUwMTg2MDBD
MDcxMjMgLyogSlNNZW1vcnlJbmZvLmNwcCAqLzsgfTsKIAkJQ0Q1MzkzRDQxNzVFMDE4NjAwQzA3
MTIzIC8qIEpTTWVtb3J5SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0Q1MzkzRDIxNzVFMDE4NjAwQzA3MTIzIC8qIEpTTWVtb3J5SW5mby5oICov
OyB9OworCQlDRDU0QTc2MjE4MEY5RjcwMDBCMDc2QzkgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0Q1NEE3NjAxODBGOUY3MDAwQjA3NkM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLmNwcCAqLzsgfTsKKwkJQ0Q1NEE3NjMxODBGOUY3MDAwQjA3NkM5IC8q
IEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDU0QTc2MTE4MEY5RjcwMDBCMDc2QzkgLyog
QXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLzsgfTsKIAkJQ0Q1NERFNDcx
NzQ2OEI2RjAwNUU1QjM2IC8qIEF1ZGlvU2Vzc2lvbk1hbmFnZXJNYWMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q1NERFNDUxNzQ2OEI2RjAwNUU1
QjM2IC8qIEF1ZGlvU2Vzc2lvbk1hbmFnZXJNYWMuY3BwICovOyB9OwogCQlDRDU0REU0QjE3NDY5
QzZEMDA1RTVCMzYgLyogQXVkaW9TZXNzaW9uTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENTRERTQ5MTc0NjlDNkQwMDVFNUIzNiAvKiBBdWRp
b1Nlc3Npb25NYWMuY3BwICovOyB9OwogCQlDRDYxRkU2NzE3OTRBQURCMDA0MTAxRUIgLyogTWVk
aWFTb3VyY2VSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMUE5NDJFMTE1QjVDRTIyMDBENTI1RDEgLyogTWVkaWFTb3VyY2VSZWdpc3Ry
eS5jcHAgKi87IH07CkBAIC01MzU0LDYgKzUzNTYsOCBAQAogCQlDRDgyMDMwRDEzOTVBQjZBMDBG
OTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEODIwMzA5MTM5NUFCNkEw
MEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tICovOyB9
OwogCQlDRDgyMDMxMDEzOTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDgyMDMwRTEzOTVB
Q0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0Q4MjAzMTExMzk1QUNFNzAwRjk1NkM2IC8q
IFdlYldpbmRvd0FuaW1hdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEODIwMzBGMTM5NUFDRTcwMEY5NTZDNiAvKiBXZWJXaW5kb3dBbmltYXRp
b24ubW0gKi87IH07CisJCUNEOEI1QTQyMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDRDhCNUE0MDE4MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9UcmFja1By
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwICovOyB9OworCQlDRDhCNUE0MzE4MEQxNDlBMDA4
QjhFNjUgLyogVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEOEI1QTQxMTgwRDE0OUEwMDhC
OEU2NSAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oICovOyB9OwogCQlD
RDhCNUE0NjE4MERGRjRFMDA4QjhFNjUgLyogVmlkZW9UcmFja01lZGlhU291cmNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDhCNUE0NTE4MERGRjRF
MDA4QjhFNjUgLyogVmlkZW9UcmFja01lZGlhU291cmNlLmggKi87IH07CiAJCUNEOEI1QTQ5MTgw
RTEzOEIwMDhCOEU2NSAvKiBUZXh0VHJhY2tNZWRpYVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q4QjVBNDgxODBFMTM4QjAwOEI4RTY1IC8q
IFRleHRUcmFja01lZGlhU291cmNlLmggKi87IH07CiAJCUNEOEI1QTRDMTgwRTE3QzAwMDhCOEU2
NSAvKiBBdWRpb1RyYWNrTWVkaWFTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEOEI1QTRCMTgwRTE3QzAwMDhCOEU2NSAvKiBBdWRpb1RyYWNr
TWVkaWFTb3VyY2UuaCAqLzsgfTsKQEAgLTUzOTYsNiArNTQwMCwxMiBAQAogCQlDREM2OURENzE2
MzIwMjZDMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY5REQ1MTYzMjAyNkMw
MDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tICovOyB9OwogCQlDREM2
OUREQTE2MzcxRkQ0MDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY5REQ4
MTYzNzFGRDMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEQzY5RERC
MTYzNzFGRDQwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY5REQ5MTYz
NzFGRDMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSAqLzsg
fTsKKwkJQ0RDOEI1QTIxODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQzhCNUEwMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMubW0gKi87IH07CisJCUNEQzhCNUEzMTgwNDYzNDcwMDE2RTY4NSAvKiBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUExMTgwNDYzNDcwMDE2RTY4NSAvKiBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLzsgfTsKKwkJQ0RDOEI1QTYx
ODA0NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM4QjVBNDE4MDQ3NEY3MDAx
NkU2ODUgLyogTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbSAqLzsgfTsKKwkJQ0RDOEI1QTcx
ODA0NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUE1MTgwNDc0RjcwMDE2
RTY4NSAvKiBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLmggKi87IH07CisJCUNEQzhCNUFBMTgw
NDdGRjEwMDE2RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUE4MTgwNDdGRjEwMDE2
RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbSAqLzsgfTsKKwkJQ0RDOEI1QUIx
ODA0N0ZGMTAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM4QjVBOTE4MDQ3RkYxMDAx
NkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCAqLzsgfTsKIAkJQ0RDOEI1QUQx
ODA0QUU1RDAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUFDMTgwNEFFNUQwMDE2
RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmggKi87IH07CiAJCUNERDUyNUQ3MTQ1
QjZERDAwMDhEMjA0RCAvKiBKU0hUTUxNZWRpYUVsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RGNjVDQ0MxNDVCNkFGRTAwQzRD
N0FBIC8qIEpTSFRNTE1lZGlhRWxlbWVudEN1c3RvbS5jcHAgKi87IH07CiAJCUNERDcwODk2MTgz
NTlGNkYwMDJCM0RDNiAvKiBTYW1wbGVNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RENzA4OTQxODM1OUY2RTAwMkIzREM2IC8qIFNhbXBsZU1h
cC5jcHAgKi87IH07CkBAIC0xMjQwNSw2ICsxMjQxNSw4IEBACiAJCUNENTM5M0QxMTc1RTAxODYw
MEMwNzEyMyAvKiBKU01lbW9yeUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNNZW1vcnlJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0Q1MzkzRDIxNzVFMDE4NjAwQzA3MTIzIC8qIEpTTWVtb3J5SW5mby5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU01lbW9yeUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQ0Q1NEE3NUUxODBGNTM1MDAwQjA3NkM5IC8qIE1lZGlhU291cmNlUHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVNvdXJjZVByaXZhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q1NEE3NjAxODBGOUY3MDAwQjA3NkM5IC8q
IEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
LmNwcDsgcGF0aCA9IG9iamMvQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDU0QTc2MTE4MEY5RjcwMDBCMDc2Qzkg
LyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDsg
cGF0aCA9IG9iamMvQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q1NERFNDUxNzQ2OEI2RjAwNUU1QjM2IC8qIEF1ZGlv
U2Vzc2lvbk1hbmFnZXJNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQXVkaW9TZXNzaW9uTWFuYWdlck1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNENTRERTQ5MTc0NjlDNkQwMDVFNUIzNiAvKiBBdWRpb1Nlc3Npb25NYWMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9TZXNzaW9uTWFjLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q2NDFFQjExODE4RjVFRDAwRUU0QzQxIC8qIE1l
ZGlhU291cmNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRp
YVNvdXJjZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNDIwLDYg
KzEyNDMyLDggQEAKIAkJQ0Q4MjAzMDkxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNj
cmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDgyMDMwRTEzOTVBQ0U3MDBGOTU2QzYgLyogV2Vi
V2luZG93QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYldp
bmRvd0FuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDgyMDMwRjEz
OTVBQ0U3MDBGOTU2QzYgLyogV2ViV2luZG93QW5pbWF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViV2luZG93QW5pbWF0aW9uLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDRDhCNUE0MDE4MEQxNDlBMDA4QjhFNjUgLyogVmlkZW9UcmFj
a1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwOyBwYXRo
ID0gb2JqYy9WaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEOEI1QTQxMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1Ry
YWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBwYXRoID0gb2Jq
Yy9WaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDRDhCNUE0NDE4MEREOEQ2MDA4QjhFNjUgLyogVmlkZW9UcmFja01lZGlh
U291cmNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBWaWRlb1RyYWNrTWVkaWFTb3VyY2UuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDRDhCNUE0NTE4MERGRjRFMDA4QjhFNjUgLyogVmlkZW9UcmFja01l
ZGlhU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvVHJhY2tN
ZWRpYVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDhCNUE0NzE4MEUx
MzYxMDA4QjhFNjUgLyogVGV4dFRyYWNrTWVkaWFTb3VyY2UuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFRleHRUcmFja01l
ZGlhU291cmNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNDkyLDYgKzEy
NTA2LDEyIEBACiAJCUNEQzY5REQ1MTYzMjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVl
bldhcm5pbmdWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQ0RDNjlERDgxNjM3MUZEMzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vo
b2xkZXJWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVGdWxs
U2NyZWVuUGxhY2Vob2xkZXJWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNE
QzY5REQ5MTYzNzFGRDMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmll
dy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVGdWxs
U2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
REM4QjVBMDE4MDQ2MzQ3MDAxNkU2ODUgLyogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tOyBwYXRoID0gb2JqYy9NZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUNEQzhCNUExMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg7IHBhdGggPSBvYmpjL01lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
REM4QjVBNDE4MDQ3NEY3MDAxNkU2ODUgLyogTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE1lZGlhU291cmNlUHJpdmF0
ZUFWRk9iakMubW07IHBhdGggPSBvYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQzhCNUE1MTgwNDc0RjcwMDE2RTY4NSAvKiBN
ZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuaDsgcGF0aCA9IG9iamMvTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREM4QjVBODE4
MDQ3RkYxMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2Jq
Qy5tbTsgcGF0aCA9IG9iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQzhCNUE5MTgwNDdGRjEwMDE2RTY4NSAvKiBTb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBT
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oOyBwYXRoID0gb2JqYy9Tb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREM4QjVBQzE4MDRB
RTVEMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQ0U1Q0QwMTQ2MzNCQzkwMEQ0N0NDQSAvKiBFdmVudFRh
cmdldEZhY3RvcnkuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRXZlbnRUYXJnZXRGYWN0b3J5
LmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREQxRTUyNTE2N0JBNTY0MDBDRTgy
MEIgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIwMzk3LDIwICsyMDQxNywzMCBAQAogCQlERjlBRkQ2RjEzRkMzMUIwMDAxNUZF
QjcgLyogb2JqYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0J
CQkJQ0QzMzZGNUYxN0Y5RjY0NzAwREREQ0QwIC8qIEFWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGwu
bW0gKi8sCi0JCQkJQ0QzMzZGNjAxN0Y5RjY0NzAwREREQ0QwIC8qIEFWVHJhY2tQcml2YXRlQVZG
T2JqQ0ltcGwuaCAqLywKLQkJCQlDREUzQTg1NTE3RjYwMjA0MDBDNUJFMjAgLyogQXVkaW9UcmFj
a1ByaXZhdGVBVkZPYmpDLm1tICovLAogCQkJCUNERTNBODU2MTdGNjAyMDQwMEM1QkUyMCAvKiBB
dWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMuaCAqLywKKwkJCQlDREUzQTg1NTE3RjYwMjA0MDBDNUJF
MjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLm1tICovLAorCQkJCUNENTRBNzYwMTgwRjlG
NzAwMEIwNzZDOSAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5jcHAgKi8s
CisJCQkJQ0Q1NEE3NjExODBGOUY3MDAwQjA3NkM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmggKi8sCisJCQkJQ0QzMzZGNjAxN0Y5RjY0NzAwREREQ0QwIC8qIEFWVHJh
Y2tQcml2YXRlQVZGT2JqQ0ltcGwuaCAqLywKKwkJCQlDRDMzNkY1RjE3RjlGNjQ3MDBERERDRDAg
LyogQVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbC5tbSAqLywKIAkJCQkwN0FBNkI2OTE2NkQwMTk1
MDBENDU2NzEgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRk9iakMuaCAqLywKIAkJCQkwN0FB
NkI2QTE2NkQwMTk1MDBENDU2NzEgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRk9iakMubW0g
Ki8sCiAJCQkJMDczNjdEREQxNzJDQTY3RjAwRDg2MUI5IC8qIEluYmFuZFRleHRUcmFja1ByaXZh
dGVMZWdhY3lBVkZPYmpDLmggKi8sCiAJCQkJMDczNjdEREUxNzJDQTY3RjAwRDg2MUI5IC8qIElu
YmFuZFRleHRUcmFja1ByaXZhdGVMZWdhY3lBVkZPYmpDLm1tICovLAogCQkJCURGOUFGRDcwMTNG
QzMxRDgwMDE1RkVCNyAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmggKi8s
CiAJCQkJREY5QUZENzExM0ZDMzFEODAwMTVGRUI3IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakMubW0gKi8sCi0JCQkJQ0Q3RTA1MjAxNjUxQTg0MTAwQzEyMDFGIC8qIFdlYkNv
cmVBVkZSZXNvdXJjZUxvYWRlci5oICovLAotCQkJCUNEN0UwNTIxMTY1MUE4NDEwMEMxMjAxRiAv
KiBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIubW0gKi8sCisJCQkJQ0RDOEI1QTExODA0NjM0NzAw
MTZFNjg1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oICovLAorCQkJ
CUNEQzhCNUEwMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMubW0gKi8sCisJCQkJQ0RDOEI1QTUxODA0NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291
cmNlUHJpdmF0ZUFWRk9iakMuaCAqLywKKwkJCQlDREM4QjVBNDE4MDQ3NEY3MDAxNkU2ODUgLyog
TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbSAqLywKKwkJCQlDREM4QjVBOTE4MDQ3RkYxMDAx
NkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCAqLywKKwkJCQlDREM4QjVBODE4
MDQ3RkYxMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0gKi8sCiAJCQkJ
Q0QzMzZGNjUxN0ZBMEFDNjAwREREQ0QwIC8qIFZpZGVvVHJhY2tQcml2YXRlQVZGT2JqQy5jcHAg
Ki8sCiAJCQkJQ0QzMzZGNjYxN0ZBMEFDNjAwREREQ0QwIC8qIFZpZGVvVHJhY2tQcml2YXRlQVZG
T2JqQy5oICovLAorCQkJCUNEOEI1QTQwMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRlb1RyYWNrUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5jcHAgKi8sCisJCQkJQ0Q4QjVBNDExODBEMTQ5QTAwOEI4
RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggKi8sCisJCQkJQ0Q3
RTA1MjAxNjUxQTg0MTAwQzEyMDFGIC8qIFdlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5oICovLAor
CQkJCUNEN0UwNTIxMTY1MUE4NDEwMEMxMjAxRiAvKiBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIu
bW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IG9iamM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwpAQCAtMjI2NDMsNiArMjI2NzMsNyBAQAogCQkJCTg1QkNCQzEzMEFCQkE4N0QwMDM4MTE2MCAv
KiBET01IVE1MRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RTcxMUE2MEFDNUQ1MzUw
MDUzMjcwRiAvKiBET01IVE1MRG9jdW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODVERjJFRUQwQUEzODdDQjAwQUQ2NEM1IC8qIERPTUhUTUxFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKKwkJCQlDREM4QjVBNzE4MDQ3NEY3MDAxNkU2ODUgLyogTWVkaWFTb3VyY2VQcml2YXRlQVZG
T2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVFNzExQTcwQUM1RDUzNTAwNTMyNzBGIC8qIERP
TUhUTUxFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NDA3NTZBMEFENkNC
RjkwMDYyMEM1NyAvKiBET01IVE1MRW1iZWRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NTUyNDdEMDBBRDg1MEI4MDAxMjA5M0IgLyogRE9NSFRNTEVtYmVkRWxlbWVudEludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKQEAgLTIyOTExLDYgKzIyOTQyLDcgQEAKIAkJCQk4NTAzMUI0MjBBNDRF
RkM3MDBGOTkyRTAgLyogRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzhEMzM1MTI0NDA1
NDgwMDMyM0QzMyAvKiBFdmVudENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQUI2RDI5
MTdDN0RFNkMwMEM2MEIzNCAvKiBNZWRpYUNvbnRyb2xzSG9zdC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQ0RDOEI1QTMxODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4QTA2RDAxMzNDMDRENTAwQ0QzNzlD
IC8qIEV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2MEQ5MEMwRDJBMTdD
RTAwQjk5MThGIC8qIEV2ZW50RXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzY2NTAx
MzE0NEZBQTQyMDBGNkJCNTEgLyogRXZlbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKQEAgLTIz
ODkwLDYgKzIzOTIyLDcgQEAKIAkJCQkwNzhFMDkxNTE3RDE0RDFDMDA0MjBBQTEgLyogTWVkaWFT
dHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTBDNDUzNDI4MTBDREJCRkEwMDg2OTE1NyAvKiBK
U1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3N0VGNjJGNDEyRjlE
Qjc0MDBDNzdCRDIgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmggaW4gSGVhZGVycyAq
LywKKwkJCQlDREM4QjVBQjE4MDQ3RkYxMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxQzBGRjNFMEU0Q0VGQUMwMDdENkZFNSAvKiBK
U1dlYktpdEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMkU4QUUzODE2QTQ5
ODQwMDA2QkIzQUEgLyogSlNXZWJLaXRDU1NGaWx0ZXJSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTA2MDM3NTE0MzI4MTlDMDBBQkY0QkEgLyogSlNXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNDU1NCw2ICsyNDU4Nyw3IEBACiAJCQkJRTRBRkQwMEMwREFGMzM1
NDAwRjVGNTVDIC8qIFNNSUxUaW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEFGRDAwRTBEQUYz
MzU1MDBGNUY1NUMgLyogU01JTFRpbWVDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
QUJBRTFCMTAzQzE4RkYwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1FcnJvci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQ0Q1NEE3NjMxODBGOUY3MDAwQjA3NkM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTBENEEzNDEwMzE2NUVFMDA0
OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFC
QUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MUQ3MTlCRTE4MTEwNkUwMDAxNkRDNTEgLyogSURCQ2FsbGJhY2tzLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI0NjEwLDYgKzI0NjQ0LDcgQEAKIAkJCQkxQTJFNkU1QTBDQzU1MjEzMDA0
QTIwNjIgLyogU1FMVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTYzMDgyNDVFNTkw
MDFFOUFCQyAvKiBTU0xLZXlHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0ZBNjJE
MEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
Q0Q4QjVBNDMxODBEMTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUFGQjM1MDExNTE1MUE3MDBCMDQ1Q0IgLyog
U3RlcFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUMyRDg0NTE3MTczNEExMDA2NTJGQzAg
LyogU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFCRTM3RTAwREFFRTAwRTAwMTA4NUZD
IC8qIFN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLywKQEAgLTI2MTg2LDYgKzI2MjIxLDcgQEAK
IAkJCQlBN0NGQjNEMTBCN0VEMTBBMDA3MEMzMkQgLyogRHJhZ0ltYWdlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3Q0ZCM0Q1MEI3RUQxMTgwMDcwQzMyRCAvKiBEcmFnSW1hZ2VNYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCQk0OTg3NzBEQjEyNDJDNTM1MDAyMjI2QkEgLyogRHJhd2luZ0J1ZmZl
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDREM4QjVBNjE4MDQ3NEY3MDAxNkU2ODUgLyogTWVk
aWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ5ODc3MTUzMTI0
M0Y5RkEwMDIyMjZCQSAvKiBEcmF3aW5nQnVmZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MDc4RTA5MTIxN0QxNENFRTAwNDIwQUExIC8qIFVzZXJNZWRpYUNvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkQ2RUQyQzcxMzZCOEU2NjAwM0NGMDcyIC8qIER5bmFtaWNzQ29tcHJl
c3Nvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2MjIxLDYgKzI2MjU3LDcgQEAKIAkJCQkwNzk2
OURCOTE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENQZWVyQ29ubmVjdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFMEZFRjM3MkIyN0M1M0VBQzFDMUZCRUUgLyogRXZlbnRTb3VyY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTEyRURCRUEwQjMwOEUwQjAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNEOEI1QTQyMTgwRDE0OUEwMDhCOEU2NSAvKiBWaWRl
b1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzYwRDhGMjBEMkExMUUwMDBCOTkxOEYgLyogRXhjZXB0aW9uQmFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5NzNEQzYzRjE0NUE5NDA5MDAyODQyQzIgLyogRXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Q0FDREIxMTNDRTg3NUMwMEJCQkUzRiAvKiBF
eGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjMxOSw2ICsy
NjM1Niw3IEBACiAJCQkJRjUwNjY0RjcxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3NjZGMENFOTIzQTEwMDdFRjNDRCAvKiBGb3Jt
RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODVCOTJCQTBFRkRFNzNEMDBFNjEyM0MgLyog
Rm9ybURhdGFCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNEQzhCNUFBMTgwNDdGRjEw
MDE2RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUE4MTM2RDM5MDk3M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0VFNjg0NjYxMkQyNkUzODAwRTc5NDE1IC8qIEZvcm1EYXRhU3RyZWFtQ0ZO
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2NEYwQ0U5MjM0RTAwN0VGM0NEIC8qIEZv
cm1EYXRhU3RyZWFtTWFjLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0yNjczOSw2ICsyNjc3Nyw3IEBA
CiAJCQkJNjVERjMxRjkwOUQxQ0M2MDAwMEJFMzI1IC8qIEpTRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzJFRDU1NTBDNkI5QkQzMDA5MjBCRkYgLyogSlNFbGVtZW50Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTY1REYzMjJGMDlEMUREQkMwMDBCRTMyNSAvKiBKU0VudGl0
eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDRDU0QTc2MjE4MEY5RjcwMDBCMDc2QzkgLyogQXVk
aW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTNGOUI3NzQwQkE1RkREQzAwODU0MDY0IC8qIEpTRW50aXR5UmVmZXJlbmNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTJFQ0Y3QURDMTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9yRXZlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRjNENDYxNDgxMTYxRDUzMjAwQ0EwRDA5IC8qIEpTRXJyb3JI
YW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjgwMjYsNiArMjgwNjUsNyBAQAogCQkJCUIy
MjI3QTU2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXJzZXJVdGlsaXRpZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODRDNjc4NEMxMjE0ODE0NzAwQTkyOTAyIC8qIFNWR1BhdGhCbGVuZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg0NzZDOUVBMTFERjZBMjkwMDU1NUIwMiAvKiBTVkdQYXRo
QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDREM4QjVBMjE4MDQ2MzQ3MDAxNkU2ODUg
LyogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJODQxOUQyQTgxMjBEOTJEMDAwMTQxRjhGIC8qIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NDE5RDJBQzEyMEQ5MkZDMDAxNDFGOEYgLyogU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNTgwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVkaWFTYW1wbGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKaW5kZXggMTA5NmZiN2I3ZGIxZTg1OTgwOGRiMTVk
ZWJmMDc3MGVmYmU1M2I2NC4uNzQ0ZDNjNzlhYjkxZjZiYjY1MmNiNTQ5ZTU3MzhkNWE5NWJlZjFj
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVkaWFTYW1wbGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCkBAIC0zMywxNCArMzMsMTcg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTW9ja1NhbXBsZUJveDsKK3R5cGVkZWYg
c3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJlZjsKIAogc3RydWN0
IFBsYXRmb3JtU2FtcGxlIHsKICAgICBlbnVtIHsKICAgICAgICAgTm9uZSwKICAgICAgICAgTW9j
a1NhbXBsZUJveFR5cGUsCisgICAgICAgIENNU2FtcGxlQnVmZmVyVHlwZSwKICAgICB9IHR5cGU7
CiAgICAgdW5pb24gewogICAgICAgICBNb2NrU2FtcGxlQm94KiBtb2NrU2FtcGxlQm94OworICAg
ICAgICBDTVNhbXBsZUJ1ZmZlclJlZiBjbVNhbXBsZUJ1ZmZlcjsKICAgICB9IHNhbXBsZTsKIH07
CiAKQEAgLTU2LDYgKzU5LDcgQEAgcHVibGljOgogICAgIGVudW0gU2FtcGxlRmxhZ3MgewogICAg
ICAgICBOb25lID0gMCwKICAgICAgICAgSXNTeW5jID0gMSA8PCAwLAorICAgICAgICBOb25EaXNw
bGF5aW5nID0gMSA8PCAxLAogICAgIH07CiAgICAgdmlydHVhbCBTYW1wbGVGbGFncyBmbGFncygp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkg
PSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
Y3BwCmluZGV4IDIyNjQzMzM2MThjODBmODJmNDQxMzc2NGQ2N2E5MGZmNTRmMzA0YTEuLjY0NjU4
Zjc3YjRmY2Y4MGY1ZTQ5NjBmZjk1NmZmMTlmOTkzOWFkNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTU3LDYgKzU3LDkgQEAK
ICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVRVEtpdC5oIgogI2lmIFVTRShBVkZPVU5EQVRJ
T04pCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIgorI2lm
IEVOQUJMRShNRURJQV9TT1VSQ0UpCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmgiCisjZW5kaWYKICNlbmRpZgogI2VsaWYgT1MoV0lOQ0UpCiAjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlV2luQ0UuaCIKQEAgLTIxMyw2ICsyMTYsOSBAQCBzdGF0aWMg
VmVjdG9yPE1lZGlhUGxheWVyRmFjdG9yeSo+JiBpbnN0YWxsZWRNZWRpYUVuZ2luZXMoUmVxdWVy
eUVuZ2luZU9wdGlvbnMgcgogICAgICAgICBpZiAoU2V0dGluZ3M6OmlzQVZGb3VuZGF0aW9uRW5h
YmxlZCgpKSB7CiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCiAgICAgICAgICAg
ICBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpyZWdpc3Rlck1lZGlhRW5naW5l
KGFkZE1lZGlhRW5naW5lKTsKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgICAgICAgICAg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpyZWdpc3Rlck1lZGlhRW5naW5l
KGFkZE1lZGlhRW5naW5lKTsKKyNlbmRpZgogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgICAgICAg
ICAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnJlZ2lzdGVyTWVkaWFFbmdpbmUo
YWRkTWVkaWFFbmdpbmUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuaAppbmRleCA4ZGYwMWIxYTFjZWZmMzFjNzg4ZGVhYWVhZTQ3MDc4
MjgzMjQzYmM4Li5kNGUyMTkwM2M1NzY5ODhkNWM3ODg2Mzc4OWMwZTgxNTQzMGVkYzczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKQEAgLTQz
LDggKzQzLDkgQEAKICNpbmNsdWRlIDxydW50aW1lL1VpbnQ4QXJyYXkuaD4KICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTU2LDYgKzU3LDcg
QEAKICNpbmNsdWRlICJQbGF0Zm9ybVRleHRUcmFja01lbnUuaCIKICNlbmRpZgogCitPQkpDX0NM
QVNTIEFWQXNzZXQ7CiBPQkpDX0NMQVNTIEFWUGxheWVyOwogT0JKQ19DTEFTUyBRVE1vdmllOwog
CkBAIC04Niw3ICs4OCw4IEBAIHN0cnVjdCBQbGF0Zm9ybU1lZGlhIHsKICAgICAgICAgQ2hyb21p
dW1NZWRpYVBsYXllclR5cGUsCiAgICAgICAgIFF0TWVkaWFQbGF5ZXJUeXBlLAogICAgICAgICBB
VkZvdW5kYXRpb25NZWRpYVBsYXllclR5cGUsCi0gICAgICAgIEFWRm91bmRhdGlvbkNGTWVkaWFQ
bGF5ZXJUeXBlCisgICAgICAgIEFWRm91bmRhdGlvbkNGTWVkaWFQbGF5ZXJUeXBlLAorICAgICAg
ICBBVkZvdW5kYXRpb25Bc3NldFR5cGUsCiAgICAgfSB0eXBlOwogCiAgICAgdW5pb24gewpAQCAt
OTcsNiArMTAwLDcgQEAgc3RydWN0IFBsYXRmb3JtTWVkaWEgewogICAgICAgICBNZWRpYVBsYXll
clByaXZhdGVJbnRlcmZhY2UqIHF0TWVkaWFQbGF5ZXI7CiAgICAgICAgIEFWUGxheWVyKiBhdmZN
ZWRpYVBsYXllcjsKICAgICAgICAgQVZDRlBsYXllciogYXZjZk1lZGlhUGxheWVyOworICAgICAg
ICBBVkFzc2V0KiBhdmZBc3NldDsKICAgICB9IG1lZGlhOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAppbmRleCAz
ZmJkZTYzNGNlNWU3N2NkNDI4ZjBlZmVmYjhlZmQwZTY4MDhiNDFkLi40MzZjNjhiNGY2MjI3ZTRk
MzJmYjBhMmI3YTE2ZTRmYTVlZWY1MDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaApAQCAtNzksNyArNzksNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2VlayhmbG9hdCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHNlZWtEb3VibGUoZG91YmxlIHRpbWUpIHsgc2Vlayh0aW1lKTsgfQotICAgIHZpcnR1YWwg
dm9pZCBzZWVrV2l0aFRvbGVyYW5jZShkb3VibGUgdGltZSwgZG91YmxlLCBkb3VibGUpIHsgc2Vl
ayh0aW1lKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZWVrV2l0aFRvbGVyYW5jZShkb3VibGUgdGlt
ZSwgZG91YmxlLCBkb3VibGUpIHsgc2Vla0RvdWJsZSh0aW1lKTsgfQogCiAgICAgdmlydHVhbCBi
b29sIHNlZWtpbmcoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lZGQ1NzczMGQyYTRlODM5N2VjNDA2ZWIxZjE1NDJiMTg5OTJjZjllCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwCkBAIC0wLDAgKzEs
ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXVkaW9UcmFj
a1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCIKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0Up
ICYmIEVOQUJMRShWSURFT19UUkFDSykKKworI2luY2x1ZGUgIkFWVHJhY2tQcml2YXRlQVZGT2Jq
Q0ltcGwuaCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpB
dWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyhBVkFzc2V0VHJhY2sqIHRyYWNrLCBT
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyogcGFyZW50KQorICAgIDogbV9pbXBsKHN0ZDo6bWFr
ZV91bmlxdWU8QVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbD4odHJhY2spKQorICAgICwgbV9wYXJl
bnQocGFyZW50KQorICAgICwgbV90cmFja0lEKC0xKQorICAgICwgbV9lbmFibGVkKGZhbHNlKQor
eworICAgIHJlc2V0UHJvcGVydGllc0Zyb21UcmFjaygpOworfQorCit2b2lkIEF1ZGlvVHJhY2tQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpyZXNldFByb3BlcnRpZXNGcm9tVHJhY2soKQorewor
ICAgIG1fdHJhY2tJRCA9IG1faW1wbC0+dHJhY2tJRCgpOworCisgICAgc2V0S2luZChtX2ltcGwt
PmF1ZGlvS2luZCgpKTsKKyAgICBzZXRJZChtX2ltcGwtPmlkKCkpOworICAgIHNldExhYmVsKG1f
aW1wbC0+bGFiZWwoKSk7CisgICAgc2V0TGFuZ3VhZ2UobV9pbXBsLT5sYW5ndWFnZSgpKTsKK30K
Kwordm9pZCBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0QXNzZXRUcmFj
ayhBVkFzc2V0VHJhY2sgKnRyYWNrKQoreworICAgIG1faW1wbCA9IHN0ZDo6bWFrZV91bmlxdWU8
QVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbD4odHJhY2spOworICAgIHJlc2V0UHJvcGVydGllc0Zy
b21UcmFjaygpOworfQorCitBVkFzc2V0VHJhY2sqIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjphc3NldFRyYWNrKCkKK3sKKyAgICByZXR1cm4gbV9pbXBsLT5hc3NldFRyYWNr
KCk7Cit9CisKK2Jvb2wgQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmVuYWJs
ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2VuYWJsZWQ7Cit9CisKK3ZvaWQgQXVkaW9UcmFj
a1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQorewor
ICAgIGlmIChtX2VuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9l
bmFibGVkID0gZW5hYmxlZDsKKyAgICBtX3BhcmVudC0+dHJhY2tEaWRDaGFuZ2VFbmFibGVkKHRo
aXMpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTRiNDY5ZTI2YmIyZjFmZWFhZmE3N2MxYmRmNDFkYzhkODYwOWFkZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0F1
ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKQEAgLTAsMCArMSw3MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakNfaAorI2Rl
ZmluZSBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQ19oCisKKyNpbmNsdWRlICJB
dWRpb1RyYWNrUHJpdmF0ZUFWRi5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgRU5B
QkxFKFZJREVPX1RSQUNLKQorCitPQkpDX0NMQVNTIEFWQXNzZXRUcmFjazsKK09CSkNfQ0xBU1Mg
QVZQbGF5ZXJJdGVtVHJhY2s7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQVZUcmFj
a1ByaXZhdGVBVkZPYmpDSW1wbDsKK2NsYXNzIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOwor
CitjbGFzcyBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyBGSU5BTCA6IHB1Ymxp
YyBBdWRpb1RyYWNrUHJpdmF0ZUFWRiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXVkaW9U
cmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMpCitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0
cjxBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQz4gY3JlYXRlKEFWQXNzZXRUcmFj
ayogdHJhY2ssIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKiBwYXJlbnQpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDKHRyYWNrLCBwYXJlbnQpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpIE9WRVJS
SURFOworCisgICAgdm9pZCBzZXRBc3NldFRyYWNrKEFWQXNzZXRUcmFjayopOworICAgIEFWQXNz
ZXRUcmFjayogYXNzZXRUcmFjaygpOworCisgICAgaW50IHRyYWNrSUQoKSB7IHJldHVybiBtX3Ry
YWNrSUQ7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQyhBVkFzc2V0VHJhY2sqLCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyog
cGFyZW50KTsKKyAgICAKKyAgICB2b2lkIHJlc2V0UHJvcGVydGllc0Zyb21UcmFjaygpOworCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEFWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGw+IG1faW1wbDsKKyAg
ICBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyogbV9wYXJlbnQ7CisgICAgaW50IG1fdHJhY2tJ
RDsKKyAgICBib29sIG1fZW5hYmxlZDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TT1VSQ0UpICYmIEVOQUJMRShWSURFT19UUkFDSykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkOTcxNmI5ZTE0OGNkYjU2ODQ5OWZiMjg0YjU4OTQyZjY1
YzJlNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMu
aApAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakNfaAorI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakNfaAorCisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEFWRk9VTkRBVElP
TikKKworI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1
ZmZlclByaXZhdGVDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CisKK09CSkNf
Q0xBU1MgQVZBc3NldDsKK09CSkNfQ0xBU1MgQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI7CisK
K3R5cGVkZWYgc3RydWN0IE9wYXF1ZUNNVGltZWJhc2UqIENNVGltZWJhc2VSZWY7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1DbG9ja0NNOworY2xhc3MgTWVkaWFTb3Vy
Y2VQcml2YXRlQVZGT2JqQzsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CitwdWJsaWM6Cisg
ICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKE1lZGlhUGxheWVyKik7Cisg
ICAgdmlydHVhbCB+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKCk7CisKKyAg
ICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsK
KworICAgIHZvaWQgYWRkRGlzcGxheUxheWVyKEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKik7
CisgICAgdm9pZCByZW1vdmVEaXNwbGF5TGF5ZXIoQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIq
KTsKKworICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJl
YWR5U3RhdGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOworICAg
IHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7CisgICAgdm9pZCBz
ZXROZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSk7CisKKyAgICB2b2lkIHNl
ZWtJbnRlcm5hbChkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKKyAgICB2b2lkIHNldExvYWRpbmdQ
cm9ncmVzc3NlZChib29sIGZsYWcpIHsgbV9sb2FkaW5nUHJvZ3Jlc3NlZCA9IGZsYWc7IH0KKyAg
ICB2b2lkIHNldEhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoYm9vbCBmbGFnKSB7IG1faGFzQXZhaWxh
YmxlVmlkZW9GcmFtZSA9IGZsYWc7IH0KKworcHJpdmF0ZToKKyAgICAvLyBNZWRpYVBsYXllclBy
aXZhdGVJbnRlcmZhY2UKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiB1cmwsIFBhc3NS
ZWZQdHI8SFRNTE1lZGlhU291cmNlPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNhbmNl
bExvYWQoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9QbGF5KCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEoKSBjb25zdCBP
VkVSUklERTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCBQ
bGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgT1ZFUlJJREU7CisjZW5kaWYKKwor
ICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgT1ZFUlJJREU7CisgICAgdm9pZCBwbGF5SW50ZXJuYWwo
KTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpIE9WRVJSSURFOworICAgIHZvaWQgcGF1c2VJ
bnRlcm5hbCgpOworCisgICAgdmlydHVhbCBib29sIHBhdXNlZCgpIGNvbnN0IE9WRVJSSURFOwor
CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2Nhbm5pbmcoKSBjb25zdCBPVkVSUklERTsKKwor
ICAgIHZpcnR1YWwgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0IE9WRVJSSURFOworCisgICAg
dmlydHVhbCBib29sIGhhc1ZpZGVvKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29s
IGhhc0F1ZGlvKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJs
ZShib29sKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uRG91YmxlKCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBkb3VibGUgY3VycmVudFRpbWVEb3VibGUoKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBzdGFydFRpbWVEb3VibGUoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBpbml0aWFsVGltZSgpIGNvbnN0IE9WRVJS
SURFOworCisgICAgdmlydHVhbCB2b2lkIHNlZWtXaXRoVG9sZXJhbmNlKGRvdWJsZSB0aW1lLCBk
b3VibGUgbmVnYXRpdmVUaHJlc2hvbGQsIGRvdWJsZSBwb3NpdGl2ZVRocmVzaG9sZCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBib29sIHNlZWtpbmcoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0UmF0ZURvdWJsZShkb3VibGUpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFRpbWVSYW5nZXM+IHNlZWthYmxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBkb3VibGUgbWF4VGltZVNlZWthYmxlRG91YmxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBkb3VibGUgbWluVGltZVNlZWthYmxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3QgT1ZFUlJJREU7CisK
KyAgICB2aXJ0dWFsIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QgT1ZFUlJJREU7CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgT1ZFUlJJREU7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0IE9WRVJSSURFOworCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FjY2VsZXJh
dGVkUmVuZGVyaW5nKCkgY29uc3QgT1ZFUlJJREU7CisgICAgLy8gY2FsbGVkIHdoZW4gdGhlIHJl
bmRlcmluZyBzeXN0ZW0gZmxpcHMgdGhlIGludG8gb3Igb3V0IG9mIGFjY2VsZXJhdGVkIHJlbmRl
cmluZyBtb2RlLgorICAgIHZpcnR1YWwgdm9pZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hh
bmdlZCgpIE9WRVJSSURFOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpNb3Zp
ZUxvYWRUeXBlIG1vdmllTG9hZFR5cGUoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwg
dm9pZCBwcmVwYXJlRm9yUmVuZGVyaW5nKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCBTdHJp
bmcgbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2
aXJ0dWFsIHNpemVfdCBleHRyYU1lbW9yeUNvc3QoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZv
aWQgZW5zdXJlTGF5ZXIoKTsKKyAgICB2b2lkIGRlc3Ryb3lMYXllcigpOworICAgIHZvaWQgZHVy
YXRpb25DaGFuZ2VkKCk7CisKKyAgICAvLyBNZWRpYVBsYXllciBGYWN0b3J5IE1ldGhvZHMKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IGNyZWF0ZShN
ZWRpYVBsYXllciopOworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisgICAgc3RhdGlj
IHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcyk7CisgICAgc3Rh
dGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5n
aW5lU3VwcG9ydFBhcmFtZXRlcnMmKTsKKworICAgIGZyaWVuZCBjbGFzcyBNZWRpYVNvdXJjZVBy
aXZhdGVBVkZPYmpDOworCisgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOworICAgIFJlZlB0cjxI
VE1MTWVkaWFTb3VyY2U+IG1fbWVkaWFTb3VyY2U7CisgICAgUmVmUHRyPE1lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakM+IG1fbWVkaWFTb3VyY2VQcml2YXRlOworICAgIFJldGFpblB0cjxBVkFzc2V0
PiBtX2Fzc2V0OworICAgIFJldGFpblB0cjxBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcj4gbV9z
YW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ2xv
Y2tDTT4gbV9jbG9jazsKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0
YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKKyAgICBib29s
IG1fc2Vla2luZzsKKyAgICBtdXRhYmxlIGJvb2wgbV9sb2FkaW5nUHJvZ3Jlc3NlZDsKKyAgICBi
b29sIG1faGFzQXZhaWxhYmxlVmlkZW9GcmFtZTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNlbmRpZiAvLyBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakNfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMu
bW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzgwMmViZjExODNlM2RhNGJkZWY4ZTc4MTlkYzI2MjUxOWZjYWUxNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQpAQCAt
MCwwICsxLDQ0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgiCisKKyNpbXBvcnQgIkhUTUxNZWRp
YVNvdXJjZS5oIgorI2ltcG9ydCAiTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5oIgorI2ltcG9y
dCAiUGxhdGZvcm1DbG9ja0NNLmgiCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCA8
QVZGb3VuZGF0aW9uL0FWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmg+CisjaW1wb3J0IDxBVkZv
dW5kYXRpb24vQVZBc3NldC5oPgorI2ltcG9ydCA8Q29yZU1lZGlhL0NNU3luYy5oPgorI2ltcG9y
dCA8b2JqY19ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBv
cnQgPHd0Zi9GdW5jdGlvbmFsLmg+CisjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgorCisjcHJh
Z21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIFNvZnQgTGlua2luZworCitTT0ZUX0xJTktfRlJBTUVX
T1JLX09QVElPTkFMKEFWRm91bmRhdGlvbikKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwo
Q29yZU1lZGlhKQorCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVkFz
c2V0KQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZVUkxBc3NldCkK
K1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWU2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZTdHJl
YW1EYXRhUGFyc2VyKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNwcmFnbWEgbWFyayAtCisj
cHJhZ21hIG1hcmsgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDCisKK01lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDKE1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBtX3BsYXllcihwbGF5ZXIp
CisgICAgLCBtX2Nsb2NrKG5ldyBQbGF0Zm9ybUNsb2NrQ00oKSkKKyAgICAsIG1fbmV0d29ya1N0
YXRlKE1lZGlhUGxheWVyOjpFbXB0eSkKKyAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6
SGF2ZU5vdGhpbmcpCisgICAgLCBtX3NlZWtpbmcoZmFsc2UpCisgICAgLCBtX2xvYWRpbmdQcm9n
cmVzc2VkKGZhbHNlKQoreworfQorCitNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akM6On5NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoKQoreworfQorCisjcHJh
Z21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIE1lZGlhUGxheWVyIEZhY3RvcnkgTWV0aG9kcworCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cmVnaXN0ZXJNZWRpYUVu
Z2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgaWYgKGlzQXZhaWxh
YmxlKCkpCisgICAgICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBw
b3J0c1R5cGUsIDAsIDAsIDApOworfQorCitQYXNzT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUlu
dGVyZmFjZT4gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUoTWVk
aWFQbGF5ZXIqIHBsYXllcikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyhwbGF5ZXIpKTsKK30KKworYm9vbCBNZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmlzQXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4g
QVZGb3VuZGF0aW9uTGlicmFyeSgpICYmIENvcmVNZWRpYUxpYnJhcnkoKSAmJiBnZXRBVlN0cmVh
bURhdGFQYXJzZXJDbGFzcygpOworfQorCitzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBl
Q2FjaGUoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdHJpbmc+LCBjYWNo
ZSwgKCkpOworICAgIHN0YXRpYyBib29sIHR5cGVMaXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwor
ICAgIGlmICh0eXBlTGlzdEluaXRpYWxpemVkKQorICAgICAgICByZXR1cm4gY2FjaGU7CisgICAg
dHlwZUxpc3RJbml0aWFsaXplZCA9IHRydWU7CisKKyAgICBOU0FycmF5ICp0eXBlcyA9IFtnZXRB
VlVSTEFzc2V0Q2xhc3MoKSBhdWRpb3Zpc3VhbE1JTUVUeXBlc107CisgICAgZm9yIChOU1N0cmlu
ZyAqbWltZVR5cGUgaW4gdHlwZXMpCisgICAgICAgIGNhY2hlLmFkZChtaW1lVHlwZSk7CisgICAg
CisgICAgcmV0dXJuIGNhY2hlOworfSAKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakM6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCit7
CisgICAgdHlwZXMgPSBtaW1lVHlwZUNhY2hlKCk7Cit9CisKK01lZGlhUGxheWVyOjpTdXBwb3J0
c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdXBwb3J0c1R5cGUo
Y29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICAv
LyBUaGlzIGVuZ2luZSBkb2VzIG5vdCBzdXBwb3J0IG5vbi1tZWRpYS1zb3VyY2Ugc291cmNlcy4K
KyAgICBpZiAoIXBhcmFtZXRlcnMuaXNNZWRpYVNvdXJjZSkKKyAgICAgICAgcmV0dXJuIE1lZGlh
UGxheWVyOjpJc05vdFN1cHBvcnRlZDsKKworICAgIGlmICghbWltZVR5cGVDYWNoZSgpLmNvbnRh
aW5zKHBhcmFtZXRlcnMudHlwZSkpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RT
dXBwb3J0ZWQ7CisKKyAgICAvLyBUaGUgc3BlYyBzYXlzOgorICAgIC8vICJJbXBsZW1lbnRvcnMg
YXJlIGVuY291cmFnZWQgdG8gcmV0dXJuICJtYXliZSIgdW5sZXNzIHRoZSB0eXBlIGNhbiBiZSBj
b25maWRlbnRseSBlc3RhYmxpc2hlZCBhcyBiZWluZyBzdXBwb3J0ZWQgb3Igbm90LiIKKyAgICBp
ZiAocGFyYW1ldGVycy5jb2RlY3MuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5
ZXI6Ok1heUJlU3VwcG9ydGVkOworCisgICAgTlNTdHJpbmcgKnR5cGVTdHJpbmcgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOyBjb2RlY3M9XCIlQFwiIiwgKE5TU3RyaW5nICopcGFy
YW1ldGVycy50eXBlLCAoTlNTdHJpbmcgKilwYXJhbWV0ZXJzLmNvZGVjc107CisgICAgcmV0dXJu
IFtnZXRBVlVSTEFzc2V0Q2xhc3MoKSBpc1BsYXlhYmxlRXh0ZW5kZWRNSU1FVHlwZTp0eXBlU3Ry
aW5nXSA/IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBv
cnRlZDs7Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgTWVkaWFQbGF5ZXJQcml2
YXRlSW50ZXJmYWNlIE92ZXJyaWRlcworCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6bG9hZChjb25zdCBTdHJpbmcmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bG9h
ZChjb25zdCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxIVE1MTWVkaWFTb3VyY2U+IHNvdXJjZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0odXJsKTsKKworICAgIG1fbWVkaWFTb3VyY2UgPSBzb3VyY2U7
CisgICAgbV9tZWRpYVNvdXJjZVByaXZhdGUgPSBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpj
cmVhdGUodGhpcyk7CisKKyAgICBtX21lZGlhU291cmNlLT5zZXRQcml2YXRlQW5kT3BlbigqbV9t
ZWRpYVNvdXJjZVByaXZhdGUpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6Y2FuY2VsTG9hZCgpCit7CisKK30KKworCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cHJlcGFyZVRvUGxheSgpCit7CisKK30KKworUGxhdGZv
cm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBsYXRmb3JtTWVk
aWEoKSBjb25zdAoreworICAgIFBsYXRmb3JtTWVkaWEgcG07CisgICAgcG0udHlwZSA9IFBsYXRm
b3JtTWVkaWE6OkFWRm91bmRhdGlvbkFzc2V0VHlwZTsKKyAgICBwbS5tZWRpYS5hdmZBc3NldCA9
IG1fYXNzZXQuZ2V0KCk7CisgICAgcmV0dXJuIHBtOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorUGxhdGZvcm1MYXllciogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zYW1wbGVC
dWZmZXJEaXNwbGF5TGF5ZXIuZ2V0KCk7Cit9CisjZW5kaWYKKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBsYXkoKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQo
V1RGOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBsYXlJbnRl
cm5hbCwgdGhpcykpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6cGxheUludGVybmFsKCkKK3sKKyAgICBtX2Nsb2NrLT5zdGFydCgpOworICAgIG1fcGxh
eWVyLT5yYXRlQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6cGF1c2UoKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQoV1RGOjpiaW5kKCZN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBhdXNlSW50ZXJuYWwsIHRoaXMp
KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBhdXNl
SW50ZXJuYWwoKQoreworICAgIG1fY2xvY2stPnN0b3AoKTsKKyAgICBtX3BsYXllci0+cmF0ZUNo
YW5nZWQoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6
OnBhdXNlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2Nsb2NrLT5pc1J1bm5pbmcoKTsKK30K
KworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN1cHBvcnRzU2Nh
bm5pbmcoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitJbnRTaXplIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bmF0dXJhbFNpemUoKSBjb25zdAoreworICAg
IHJldHVybiBJbnRTaXplKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjpoYXNWaWRlbygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFTb3VyY2VQ
cml2YXRlLT5oYXNWaWRlbygpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6aGFzQXVkaW8oKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhU291cmNl
UHJpdmF0ZS0+aGFzQXVkaW8oKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakM6OnNldFZpc2libGUoYm9vbCkKK3sKKyAgICAvLyBOby1vcC4KK30KKworZG91
YmxlIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6ZHVyYXRpb25Eb3VibGUo
KSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhU291cmNlLT5kdXJhdGlvbigpOworfQorCitk
b3VibGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjdXJyZW50VGltZURv
dWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2xvY2stPmN1cnJlbnRUaW1lKCk7Cit9CisK
K2RvdWJsZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN0YXJ0VGltZURv
dWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJsZSBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmluaXRpYWxUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNl
ZWtXaXRoVG9sZXJhbmNlKGRvdWJsZSB0aW1lLCBkb3VibGUgbmVnYXRpdmVUaHJlc2hvbGQsIGRv
dWJsZSBwb3NpdGl2ZVRocmVzaG9sZCkKK3sKKyAgICBtX3NlZWtpbmcgPSB0cnVlOworICAgIGNh
bGxPbk1haW5UaHJlYWQoV1RGOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnNlZWtJbnRlcm5hbCwgdGhpcywgdGltZSwgbmVnYXRpdmVUaHJlc2hvbGQsIHBvc2l0
aXZlVGhyZXNob2xkKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjpzZWVrSW50ZXJuYWwoZG91YmxlIHRpbWUsIGRvdWJsZSBuZWdhdGl2ZVRocmVzaG9s
ZCwgZG91YmxlIHBvc2l0aXZlVGhyZXNob2xkKQoreworICAgIE1lZGlhVGltZSBzZWVrVGltZSA9
IG1fbWVkaWFTb3VyY2VQcml2YXRlLT5zZWVrVG9UaW1lKE1lZGlhVGltZTo6Y3JlYXRlV2l0aERv
dWJsZSh0aW1lKSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHBvc2l0aXZlVGhyZXNob2xk
KSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKG5lZ2F0aXZlVGhyZXNob2xkKSk7CisgICAg
bV9jbG9jay0+c2V0Q3VycmVudE1lZGlhVGltZShzZWVrVGltZSk7CisgICAgbV9zZWVraW5nID0g
ZmFsc2U7CisgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVraW5nKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zZWVraW5nOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6c2V0UmF0ZURvdWJsZShkb3VibGUgcmF0ZSkKK3sKKyAgICBtX2Nsb2NrLT5zZXRQbGF5
UmF0ZShyYXRlKTsKKyAgICBtX3BsYXllci0+cmF0ZUNoYW5nZWQoKTsKK30KKworTWVkaWFQbGF5
ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6Om5l
dHdvcmtTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV0d29ya1N0YXRlOworfQorCitN
ZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akM6OnJlYWR5U3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlYWR5U3RhdGU7Cit9CisK
K1Bhc3NSZWZQdHI8VGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjpzZWVrYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRpbWVSYW5nZXM6OmNyZWF0ZSht
aW5UaW1lU2Vla2FibGUoKSwgbWF4VGltZVNlZWthYmxlRG91YmxlKCkpOworfQorCitkb3VibGUg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjptYXhUaW1lU2Vla2FibGVEb3Vi
bGUoKSBjb25zdAoreworICAgIHJldHVybiBkdXJhdGlvbkRvdWJsZSgpOworfQorCitkb3VibGUg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjptaW5UaW1lU2Vla2FibGUoKSBj
b25zdAoreworICAgIHJldHVybiBzdGFydFRpbWVEb3VibGUoKTsKK30KKworUGFzc1JlZlB0cjxU
aW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmJ1ZmZlcmVk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tZWRpYVNvdXJjZS0+YnVmZmVyZWQoKTsKK30KKwor
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmRpZExvYWRpbmdQcm9n
cmVzcygpIGNvbnN0Cit7CisgICAgYm9vbCBsb2FkaW5nUHJvZ3Jlc3NlZCA9IG1fbG9hZGluZ1By
b2dyZXNzZWQ7CisgICAgbV9sb2FkaW5nUHJvZ3Jlc3NlZCA9IGZhbHNlOworICAgIHJldHVybiBs
b2FkaW5nUHJvZ3Jlc3NlZDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OnNldFNpemUoY29uc3QgSW50U2l6ZSYpCit7CisgICAgLy8gTm8tb3AKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFJlY3QmKQoreworICAgIC8vIEZJWE1FOiBwYWludCgpCit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwYWludEN1cnJlbnRG
cmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICAv
LyBGSVhNRTogaW1wbGVtZW50IHBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KCkKK30KKworYm9v
bCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6Omhhc0F2YWlsYWJsZVZpZGVv
RnJhbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhc0F2YWlsYWJsZVZpZGVvRnJhbWU7Cit9
CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCitib29sIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCit7Cisg
ICAgaWYgKHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSAmJiBtX3BsYXllci0+bWVkaWFQ
bGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJSZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKG1fcGxh
eWVyKSkKKyAgICAgICAgZW5zdXJlTGF5ZXIoKTsKKyAgICBlbHNlCisgICAgICAgIGRlc3Ryb3lM
YXllcigpOworfQorI2VuZGlmCisKK01lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bW92aWVMb2FkVHlwZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIE1lZGlhUGxheWVyOjpTdG9yZWRTdHJlYW07Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwcmVwYXJlRm9yUmVuZGVyaW5nKCkKK3sKKyAg
ICAvLyBOby1vcAorfQorCitTdHJpbmcgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjplbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFN0cmluZz4gZGVzY3JpcHRpb24oQVNDSUlMaXRlcmFsKCJBVkZvdW5kYXRpb24gTWVkaWFT
b3VyY2UgRW5naW5lIikpOworICAgIHJldHVybiBkZXNjcmlwdGlvbjsKK30KKworU3RyaW5nIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bGFuZ3VhZ2VPZlByaW1hcnlBdWRp
b1RyYWNrKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IGxhbmd1YWdlT2ZQcmlt
YXJ5QXVkaW9UcmFjaygpCisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisKK3NpemVfdCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmV4dHJhTWVtb3J5Q29zdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsg
VXRpbGl0eSBNZXRob2RzCisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjplbnN1cmVMYXllcigpCit7CisgICAgaWYgKG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciA9IGFk
b3B0TlMoW1tnZXRBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllckNsYXNzKCkgYWxsb2NdIGluaXRd
KTsKKyAgICBbbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgc2V0Q29udHJvbFRpbWViYXNlOm1f
Y2xvY2stPnRpbWViYXNlKCldOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6ZGVzdHJveUxheWVyKCkKK3sKKyAgICBpZiAoIW1fc2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zYW1wbGVCdWZmZXJEaXNwbGF5
TGF5ZXIgc2V0Q29udHJvbFRpbWViYXNlOjBdOworICAgIG1fc2FtcGxlQnVmZmVyRGlzcGxheUxh
eWVyID0gbnVsbHB0cjsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OmR1cmF0aW9uQ2hhbmdlZCgpCit7CisgICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdl
ZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6dXBk
YXRlU3RhdGVzKCkKK3sKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9sZE5ldHdvcmtT
dGF0ZSA9IG1fbmV0d29ya1N0YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJl
YWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7CisKKyAgICBVTlVTRURfUEFSQU0ob2xkTmV0d29ya1N0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0ob2xkUmVhZHlTdGF0ZSk7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVy
OjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUpCit7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSByZWFk
eVN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlYWR5U3RhdGUgPSByZWFkeVN0YXRl
OworICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0TmV0d29ya1N0YXRlKE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKQoreworICAgIGlmIChtX25ldHdvcmtTdGF0ZSA9
PSBuZXR3b3JrU3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmV0d29ya1N0YXRlID0g
bmV0d29ya1N0YXRlOworICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjphZGREaXNwbGF5TGF5
ZXIoQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIqIGRpc3BsYXlMYXllcikKK3sKKyAgICBpZiAo
ZGlzcGxheUxheWVyID09IG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciA9IGRpc3BsYXlMYXllcjsKKyAg
ICBbbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgc2V0Q29udHJvbFRpbWViYXNlOm1fY2xvY2st
PnRpbWViYXNlKCldOworICAgIG1fcGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5tZWRpYVBs
YXllclJlbmRlcmluZ01vZGVDaGFuZ2VkKG1fcGxheWVyKTsKKworICAgIC8vIEZJWE1FOiBtb3Zl
IHRoaXMgc29tZXdoZXJlIGFwcHJvcHJpYXRlOgorICAgIG1fcGxheWVyLT5maXJzdFZpZGVvRnJh
bWVBdmFpbGFibGUoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnJlbW92ZURpc3BsYXlMYXllcihBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciogZGlz
cGxheUxheWVyKQoreworICAgIGlmIChkaXNwbGF5TGF5ZXIgIT0gbV9zYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2FtcGxlQnVmZmVyRGlzcGxheUxh
eWVyID0gbnVsbHB0cjsKKyAgICBtX3BsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQ
bGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXllcik7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
U291cmNlUHJpdmF0ZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jZTRlMjc1YWNiZWI5M2ZmZDk0NzZiODBiNjQyODYwZThkOGEyNTNkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakNfaAorI2RlZmluZSBNZWRpYVNvdXJjZVBy
aXZhdGVBVkZPYmpDX2gKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5E
QVRJT04pCisKKyNpbmNsdWRlICJNZWRpYVNvdXJjZVByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitPQkpDX0NMQVNTIEFWQXNzZXQ7CitP
QkpDX0NMQVNTIEFWU3RyZWFtRGF0YVBhcnNlcjsKK09CSkNfQ0xBU1MgTlNFcnJvcjsKK09CSkNf
Q0xBU1MgTlNPYmplY3Q7Cit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01T
YW1wbGVCdWZmZXJSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOworY2xhc3MgU291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakM7CitjbGFzcyBUaW1lUmFuZ2VzOworCitjbGFzcyBNZWRpYVNvdXJjZVByaXZhdGVBVkZP
YmpDIDogcHVibGljIE1lZGlhU291cmNlUHJpdmF0ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZlB0cjxNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDPiBjcmVhdGUoTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDKik7CisgICAgdmlydHVhbCB+TWVkaWFTb3VyY2VQcml2YXRlQVZG
T2JqQygpOworCisgICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKiBwbGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXllcjsgfQorICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQyo+JiBhY3RpdmVTb3VyY2VCdWZmZXJzKCkgY29uc3QgeyByZXR1
cm4gbV9hY3RpdmVTb3VyY2VCdWZmZXJzOyB9CisKKyAgICB2aXJ0dWFsIEFkZFN0YXR1cyBhZGRT
b3VyY2VCdWZmZXIoY29uc3QgQ29udGVudFR5cGUmLCBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0
ZT4mKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXREdXJhdGlvbihkb3VibGUpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBtYXJrRW5kT2ZTdHJlYW0oRW5kT2ZTdHJlYW1TdGF0dXMpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCB1bm1hcmtFbmRPZlN0cmVhbSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
TWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlKSBPVkVS
UklERTsKKworICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdDsKKyAgICBib29sIGhhc1ZpZGVvKCkg
Y29uc3Q7CisKKyAgICBNZWRpYVRpbWUgc2Vla1RvVGltZShNZWRpYVRpbWUsIE1lZGlhVGltZSBu
ZWdhdGl2ZVRocmVzaG9sZCwgTWVkaWFUaW1lIHBvc2l0aXZlVGhyZXNob2xkKTsKKworcHJpdmF0
ZToKKyAgICBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQyopOworCisgICAgdm9pZCBzb3VyY2VCdWZmZXJQcml2YXRlRGlkQ2hhbmdl
QWN0aXZlU3RhdGUoU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMqLCBib29sIGFjdGl2ZSk7Cisg
ICAgdm9pZCBzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVu
dChTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyopOworICAgIHZvaWQgbW9uaXRvclNvdXJjZUJ1
ZmZlcnMoKTsKKyAgICB2b2lkIHJlbW92ZVNvdXJjZUJ1ZmZlcihTb3VyY2VCdWZmZXJQcml2YXRl
Kik7CisKKyAgICBmcmllbmQgY2xhc3MgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM7CisKKyAg
ICBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqIG1fcGxheWVyOworICAgIGRv
dWJsZSBtX2R1cmF0aW9uOworICAgIFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakM+PiBtX3NvdXJjZUJ1ZmZlcnM7CisgICAgVmVjdG9yPFNvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDKj4gbV9hY3RpdmVTb3VyY2VCdWZmZXJzOworICAgIGJvb2wgbV9pc0VuZGVkOworfTsK
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEFWRk9VTkRBVElP
TikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZWQ2MGEwY2FkYTIzY2VmNTJmZTgyNzc1Zjkw
NWE1MDhlZmVjZGNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbQpA
QCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNF
KSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjaW1wb3J0ICJDb250ZW50VHlwZS5oIgorI2ltcG9y
dCAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCisjaW1wb3J0ICJNZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMuaCIKKyNpbXBvcnQgIlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZP
YmpDLmgiCisjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcu
aCIKKyNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL3RleHQvQXRvbWljU3Ry
aW5nLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBNZWRpYVNvdXJjZVByaXZh
dGVBVkZPYmpDCisKK1JlZlB0cjxNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDPiBNZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDOjpjcmVhdGUoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDKiBwYXJlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVNvdXJjZVByaXZh
dGVBVkZPYmpDKHBhcmVudCkpOworfQorCitNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpNZWRp
YVNvdXJjZVByaXZhdGVBVkZPYmpDKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
QyogcGFyZW50KQorICAgIDogbV9wbGF5ZXIocGFyZW50KQorICAgICwgbV9kdXJhdGlvbihzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpKQorICAgICwgbV9pc0VuZGVkKGZh
bHNlKQoreworfQorCitNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjp+TWVkaWFTb3VyY2VQcml2
YXRlQVZGT2JqQygpCit7Cit9CisKK01lZGlhU291cmNlUHJpdmF0ZTo6QWRkU3RhdHVzIE1lZGlh
U291cmNlUHJpdmF0ZUFWRk9iakM6OmFkZFNvdXJjZUJ1ZmZlcihjb25zdCBDb250ZW50VHlwZSYg
Y29udGVudFR5cGUsIFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiYgb3V0UHJpdmF0ZSkKK3sK
KyAgICBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1l
dGVycy5pc01lZGlhU291cmNlID0gdHJ1ZTsKKyAgICBwYXJhbWV0ZXJzLnR5cGUgPSBjb250ZW50
VHlwZS50eXBlKCk7CisgICAgcGFyYW1ldGVycy5jb2RlY3MgPSBjb250ZW50VHlwZS5wYXJhbWV0
ZXIoQVNDSUlMaXRlcmFsKCJjb2RlY3MiKSk7CisgICAgaWYgKE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzo6c3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMpID09IE1lZGlhUGxheWVy
OjpJc05vdFN1cHBvcnRlZCkKKyAgICAgICAgcmV0dXJuIE5vdFN1cHBvcnRlZDsKKworICAgIG1f
c291cmNlQnVmZmVycy5hcHBlbmQoU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmNyZWF0ZSh0
aGlzKSk7CisgICAgb3V0UHJpdmF0ZSA9IG1fc291cmNlQnVmZmVycy5sYXN0KCk7CisKKyAgICBy
ZXR1cm4gT2s7Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6cmVtb3ZlU291
cmNlQnVmZmVyKFNvdXJjZUJ1ZmZlclByaXZhdGUqIGJ1ZmZlcikKK3sKKyAgICBBU1NFUlQobV9z
b3VyY2VCdWZmZXJzLmNvbnRhaW5zKGJ1ZmZlcikpOworCisgICAgc2l6ZV90IHBvcyA9IG1fYWN0
aXZlU291cmNlQnVmZmVycy5maW5kKGJ1ZmZlcik7CisgICAgaWYgKHBvcyAhPSBub3RGb3VuZCkK
KyAgICAgICAgbV9hY3RpdmVTb3VyY2VCdWZmZXJzLnJlbW92ZShwb3MpOworCisgICAgcG9zID0g
bV9zb3VyY2VCdWZmZXJzLmZpbmQoYnVmZmVyKTsKKyAgICBtX3NvdXJjZUJ1ZmZlcnMucmVtb3Zl
KHBvcyk7Cit9CisKK2RvdWJsZSBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpkdXJhdGlvbigp
Cit7CisgICAgcmV0dXJuIG1fZHVyYXRpb247Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQoreworICAgIGlmIChkdXJhdGlv
biA9PSBtX2R1cmF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2R1cmF0aW9uID0gZHVy
YXRpb247Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6bWFya0VuZE9mU3Ry
ZWFtKEVuZE9mU3RyZWFtU3RhdHVzKSAKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IG1hcmtF
bmRPZlN0cmVhbSgpCisgICAgbV9pc0VuZGVkID0gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDOjp1bm1hcmtFbmRPZlN0cmVhbSgpIAoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQgdW5tYXJrRW5kT2ZTdHJlYW0oKQorICAgIG1faXNFbmRlZCA9IGZhbHNlOworfQor
CitNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpyZWFk
eVN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF5ZXItPnJlYWR5U3RhdGUoKTsKK30K
Kwordm9pZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxh
eWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUpCit7CisgICAgbV9wbGF5ZXItPnNldFJlYWR5U3Rh
dGUocmVhZHlTdGF0ZSk7Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6c291
cmNlQnVmZmVyUHJpdmF0ZURpZENoYW5nZUFjdGl2ZVN0YXRlKFNvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDKiBidWZmZXIsIGJvb2wgYWN0aXZlKQoreworICAgIGlmIChhY3RpdmUgJiYgIW1fYWN0
aXZlU291cmNlQnVmZmVycy5jb250YWlucyhidWZmZXIpKQorICAgICAgICBtX2FjdGl2ZVNvdXJj
ZUJ1ZmZlcnMuYXBwZW5kKGJ1ZmZlcik7CisKKyAgICBpZiAoIWFjdGl2ZSkgeworICAgICAgICBz
aXplX3QgcG9zaXRpb24gPSBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMuZmluZChidWZmZXIpOworICAg
ICAgICBpZiAocG9zaXRpb24gIT0gbm90Rm91bmQpCisgICAgICAgICAgICBtX2FjdGl2ZVNvdXJj
ZUJ1ZmZlcnMucmVtb3ZlKHBvc2l0aW9uKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIE1lZGlh
U291cmNlUHJpdmF0ZUFWRk9iakNIYXNBdWRpbyhQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZh
dGVBVkZPYmpDPiBwcnBTb3VyY2VCdWZmZXIpCit7CisgICAgUmVmUHRyPFNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDPiBzb3VyY2VCdWZmZXIgPSBwcnBTb3VyY2VCdWZmZXI7CisgICAgcmV0dXJu
IHNvdXJjZUJ1ZmZlci0+aGFzQXVkaW8oKTsKK30KKworYm9vbCBNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDOjpoYXNBdWRpbygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6YW55X29mKG1fYWN0
aXZlU291cmNlQnVmZmVycy5iZWdpbigpLCBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMuZW5kKCksIE1l
ZGlhU291cmNlUHJpdmF0ZUFWRk9iakNIYXNBdWRpbyk7Cit9CisKK3N0YXRpYyBib29sIE1lZGlh
U291cmNlUHJpdmF0ZUFWRk9iakNIYXNWaWRlbyhQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZh
dGVBVkZPYmpDPiBwcnBTb3VyY2VCdWZmZXIpCit7CisgICAgUmVmUHRyPFNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDPiBzb3VyY2VCdWZmZXIgPSBwcnBTb3VyY2VCdWZmZXI7CisgICAgcmV0dXJu
IHNvdXJjZUJ1ZmZlci0+aGFzVmlkZW8oKTsKK30KKworYm9vbCBNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDOjpoYXNWaWRlbygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6YW55X29mKG1fYWN0
aXZlU291cmNlQnVmZmVycy5iZWdpbigpLCBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMuZW5kKCksIE1l
ZGlhU291cmNlUHJpdmF0ZUFWRk9iakNIYXNWaWRlbyk7Cit9CisKK01lZGlhVGltZSBNZWRpYVNv
dXJjZVByaXZhdGVBVkZPYmpDOjpzZWVrVG9UaW1lKE1lZGlhVGltZSB0YXJnZXRUaW1lLCBNZWRp
YVRpbWUgbmVnYXRpdmVUaHJlc2hvbGQsIE1lZGlhVGltZSBwb3NpdGl2ZVRocmVzaG9sZCkKK3sK
KyAgICBNZWRpYVRpbWUgc2Vla1RpbWUgPSB0YXJnZXRUaW1lOworICAgIGZvciAoYXV0byBpdCA9
IG1fYWN0aXZlU291cmNlQnVmZmVycy5iZWdpbigpLCBlbmQgPSBtX2FjdGl2ZVNvdXJjZUJ1ZmZl
cnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBNZWRpYVRpbWUgc291cmNlU2Vl
a1RpbWUgPSAoKml0KS0+ZmFzdFNlZWtUaW1lRm9yTWVkaWFUaW1lKHRhcmdldFRpbWUsIG5lZ2F0
aXZlVGhyZXNob2xkLCBwb3NpdGl2ZVRocmVzaG9sZCk7CisgICAgICAgIGlmIChhYnModGFyZ2V0
VGltZSAtIHNvdXJjZVNlZWtUaW1lKSA+IGFicyh0YXJnZXRUaW1lIC0gc2Vla1RpbWUpKQorICAg
ICAgICAgICAgc2Vla1RpbWUgPSBzb3VyY2VTZWVrVGltZTsKKyAgICB9CisKKyAgICBmb3IgKGF1
dG8gaXQgPSBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMuYmVnaW4oKSwgZW5kID0gbV9hY3RpdmVTb3Vy
Y2VCdWZmZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5zZWVrVG9U
aW1lKHNlZWtUaW1lKTsKKworICAgIHJldHVybiBzZWVrVGltZTsKK30KKworfQorCisjZW5kaWYg
Ly8gRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEFWRk9VTkRBVElPTikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjZkZjk0ZTJlMjJjYzIwMTM4MzEwY2EwMDQ0NTg3NmE1ZTViMjRjMmQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQ19oCisjZGVmaW5lIFNvdXJjZUJ1
ZmZlclByaXZhdGVBVkZPYmpDX2gKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShB
VkZPVU5EQVRJT04pCisKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlLmgiCisjaW5jbHVk
ZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
TWVkaWFUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bWljU3RyaW5nLmg+CisKK09CSkNfQ0xBU1MgQVZBc3NldDsKK09CSkNfQ0xBU1MgQVZTdHJlYW1E
YXRhUGFyc2VyOworT0JKQ19DTEFTUyBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcjsKK09CSkNf
Q0xBU1MgTlNFcnJvcjsKK09CSkNfQ0xBU1MgTlNPYmplY3Q7Cit0eXBlZGVmIHN0cnVjdCBvcGFx
dWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1wbGVCdWZmZXJSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVj
dCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uICpDTUZvcm1hdERlc2NyaXB0aW9uUmVmOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM7Citj
bGFzcyBUaW1lUmFuZ2VzOworY2xhc3MgQXVkaW9UcmFja1ByaXZhdGU7CitjbGFzcyBWaWRlb1Ry
YWNrUHJpdmF0ZTsKK2NsYXNzIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOwor
Y2xhc3MgVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM7CisKK2NsYXNzIFNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDIDogcHVibGljIFNvdXJjZUJ1ZmZlclByaXZhdGUgeworcHVi
bGljOgorICAgIHN0YXRpYyBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM+IGNyZWF0
ZShNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKik7CisgICAgdmlydHVhbCB+U291cmNlQnVmZmVy
UHJpdmF0ZUFWRk9iakMoKTsKKworICAgIC8vIEFWU3RyZWFtRGF0YVBhcnNlciBkZWxlZ2F0ZSBt
ZXRob2RzCisgICAgdm9pZCBkaWRQYXJzZVN0cmVhbURhdGFBc0Fzc2V0KEFWQXNzZXQqKTsKKyAg
ICB2b2lkIGRpZEZhaWxUb1BhcnNlU3RyZWFtRGF0YVdpdGhFcnJvcihOU0Vycm9yKik7CisgICAg
dm9pZCBkaWRQcm92aWRlTWVkaWFEYXRhRm9yVHJhY2tJRChpbnQgdHJhY2tJRCwgQ01TYW1wbGVC
dWZmZXJSZWYsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlLCB1bnNpZ25lZCBmbGFncyk7CisgICAg
dm9pZCBkaWRSZWFjaEVuZE9mVHJhY2tXaXRoVHJhY2tJRChpbnQgdHJhY2tJRCwgY29uc3QgU3Ry
aW5nJiBtZWRpYVR5cGUpOworCisgICAgYm9vbCBwcm9jZXNzQ29kZWRGcmFtZShpbnQgdHJhY2tJ
RCwgQ01TYW1wbGVCdWZmZXJSZWYsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlKTsKKworICAgIGJv
b2wgaGFzVmlkZW8oKSBjb25zdDsKKyAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7CisKKyAgICB2
b2lkIHRyYWNrRGlkQ2hhbmdlRW5hYmxlZChWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQyopOworICAgIHZvaWQgdHJhY2tEaWRDaGFuZ2VFbmFibGVkKEF1ZGlvVHJhY2tQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDKik7CisKKyAgICB2b2lkIHNlZWtUb1RpbWUoTWVkaWFUaW1lKTsK
KyAgICBNZWRpYVRpbWUgZmFzdFNlZWtUaW1lRm9yTWVkaWFUaW1lKE1lZGlhVGltZSwgTWVkaWFU
aW1lIG5lZ2F0aXZlVGhyZXNob2xkLCBNZWRpYVRpbWUgcG9zaXRpdmVUaHJlc2hvbGQpOworCitw
cml2YXRlOgorICAgIGV4cGxpY2l0IFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKE1lZGlhU291
cmNlUHJpdmF0ZUFWRk9iakMqKTsKKworICAgIC8vIFNvdXJjZUJ1ZmZlclByaXZhdGUgb3ZlcnJp
ZGVzCisgICAgdmlydHVhbCB2b2lkIHNldENsaWVudChTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50
KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBBcHBlbmRSZXN1bHQgYXBwZW5kKGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGFib3J0KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tTWVkaWFT
b3VyY2UoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJl
YWR5U3RhdGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVhZHlTdGF0
ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGV2
aWN0Q29kZWRGcmFtZXMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNGdWxsKCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQW5kRW5xdWV1ZU5vbkRpc3BsYXlpbmdTYW1w
bGVzKFZlY3RvcjxSZWZQdHI8TWVkaWFTYW1wbGU+PiwgQXRvbWljU3RyaW5nIHRyYWNrSUQpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlU2FtcGxlKFBhc3NSZWZQdHI8TWVkaWFT
YW1wbGU+LCBBdG9taWNTdHJpbmcgdHJhY2tJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29s
IGlzUmVhZHlGb3JNb3JlU2FtcGxlcygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRB
Y3RpdmUoYm9vbCkgT1ZFUlJJREU7CisKKyAgICBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKiBt
X3BhcmVudDsKKyAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50KiBtX2NsaWVudDsKKyAgICBS
ZXRhaW5QdHI8QVZTdHJlYW1EYXRhUGFyc2VyPiBtX3BhcnNlcjsKKyAgICBSZXRhaW5QdHI8QVZB
c3NldD4gbV9hc3NldDsKKyAgICBSZXRhaW5QdHI8QVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI+
IG1fZGlzcGxheUxheWVyOworICAgIFJldGFpblB0cjxOU09iamVjdD4gbV9kZWxlZ2F0ZTsKKwor
ICAgIGJvb2wgbV9wYXJzaW5nU3VjY2VlZGVkOworICAgIGludCBtX2VuYWJsZWRWaWRlb1RyYWNr
SUQ7CisKKyAgICBWZWN0b3I8UmVmUHRyPFZpZGVvVHJhY2tQcml2YXRlPj4gbV92aWRlb1RyYWNr
czsKKyAgICBWZWN0b3I8UmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlPj4gbV9hdWRpb1RyYWNrczsK
K307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5E
QVRJT04pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNzFjMzhjYmQwMTAyMWQ0ODE1ZmNl
OGQ2MjVhZjdmOGNkYzJjZjg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9i
akMubW0KQEAgLTAsMCArMSw1NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgiCisKKyNpZiBFTkFCTEUoTUVESUFf
U09VUkNFKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjaW1wb3J0ICJFeGNlcHRpb25Db2RlUGxh
Y2Vob2xkZXIuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhRGVzY3JpcHRp
b24uaCIKKyNpbXBvcnQgIk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIgor
I2ltcG9ydCAiTWVkaWFTYW1wbGUuaCIKKyNpbXBvcnQgIk1lZGlhU291cmNlUHJpdmF0ZUFWRk9i
akMuaCIKKyNpbXBvcnQgIk1lZGlhVGltZU1hYy5oIgorI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0ICJTb3VyY2VCdWZmZXJQcml2YXRl
Q2xpZW50LmgiCisjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCisjaW1wb3J0ICJBdWRpb1RyYWNrUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIgorI2ltcG9ydCAiVmlkZW9UcmFja1ByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMuaCIKKyNpbXBvcnQgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZPYmpD
LmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBc3NldFRyYWNrLmg+CisjaW1wb3J0IDxBVkZv
dW5kYXRpb24vQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuaD4KKyNpbXBvcnQgPG9iamMvcnVu
dGltZS5oPgorI2ltcG9ydCA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW1wb3J0IDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisjaW1wb3J0IDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKyNpbXBvcnQg
PHd0Zi9XZWFrUHRyLmg+CisjaW1wb3J0IDxtYXA+CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21h
IG1hcmsgU29mdCBMaW5raW5nCisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3Vu
ZGF0aW9uKQorU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChDb3JlTWVkaWEpCisKK1NPRlRf
TElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQXNzZXRUcmFjaykKK1NPRlRfTElOS19DTEFTUyhB
VkZvdW5kYXRpb24sIEFWU3RyZWFtRGF0YVBhcnNlcikKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5k
YXRpb24sIEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKQorCitTT0ZUX0xJTktfUE9JTlRFUl9P
UFRJT05BTChBVkZvdW5kYXRpb24sIEFWTWVkaWFUeXBlVmlkZW8sIE5TU3RyaW5nICopCitTT0ZU
X0xJTktfUE9JTlRFUl9PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWTWVkaWFUeXBlQXVkaW8sIE5T
U3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUl9PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWTWVk
aWFUeXBlVGV4dCwgTlNTdHJpbmcgKikKKworU09GVF9MSU5LX0NPTlNUQU5UKENvcmVNZWRpYSwg
a0NNVGltZVplcm8sIENNVGltZSk7CitTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01U
aW1lSW52YWxpZCwgQ01UaW1lKTsKK1NPRlRfTElOS19DT05TVEFOVChDb3JlTWVkaWEsIGtDTVNh
bXBsZUF0dGFjaG1lbnRLZXlfRG9Ob3REaXNwbGF5LCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19D
T05TVEFOVChDb3JlTWVkaWEsIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfTm90U3luYywgQ0ZTdHJp
bmdSZWYpCitTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01TYW1wbGVCdWZmZXJBdHRh
Y2htZW50S2V5X0RyYWluQWZ0ZXJEZWNvZGluZywgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfQ09O
U1RBTlQoQ29yZU1lZGlhLCBrQ01TYW1wbGVCdWZmZXJBdHRhY2htZW50S2V5X1Jlc2V0RGVjb2Rl
ckJlZm9yZURlY29kaW5nLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFOVChDb3JlTWVk
aWEsIGtDTVNhbXBsZUJ1ZmZlckF0dGFjaG1lbnRLZXlfRW1wdHlNZWRpYSwgQ0ZTdHJpbmdSZWYp
CitTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01TYW1wbGVCdWZmZXJBdHRhY2htZW50
S2V5X0Rpc3BsYXlFbXB0eU1lZGlhSW1tZWRpYXRlbHksIENGU3RyaW5nUmVmKQorCitTT0ZUX0xJ
TktfQ09OU1RBTlQoQVZGb3VuZGF0aW9uLCBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNWaXN1YWwsIE5T
U3RyaW5nKikKK1NPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFWTWVkaWFDaGFyYWN0
ZXJpc3RpY0F1ZGlibGUsIE5TU3RyaW5nKikKK1NPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRp
b24sIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0xlZ2libGUsIE5TU3RyaW5nKikKKworU09GVF9MSU5L
KENvcmVNZWRpYSwgQ01Gb3JtYXREZXNjcmlwdGlvbkdldE1lZGlhVHlwZSwgQ01NZWRpYVR5cGUs
IChDTUZvcm1hdERlc2NyaXB0aW9uUmVmIGRlc2MpLCAoZGVzYykpCitTT0ZUX0xJTksoQ29yZU1l
ZGlhLCBDTVNhbXBsZUJ1ZmZlckNyZWF0ZSwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxv
Y2F0b3IsIENNQmxvY2tCdWZmZXJSZWYgZGF0YUJ1ZmZlciwgQm9vbGVhbiBkYXRhUmVhZHksIENN
U2FtcGxlQnVmZmVyTWFrZURhdGFSZWFkeUNhbGxiYWNrIG1ha2VEYXRhUmVhZHlDYWxsYmFjaywg
dm9pZCAqbWFrZURhdGFSZWFkeVJlZmNvbiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXRE
ZXNjcmlwdGlvbiwgQ01JdGVtQ291bnQgbnVtU2FtcGxlcywgQ01JdGVtQ291bnQgbnVtU2FtcGxl
VGltaW5nRW50cmllcywgY29uc3QgQ01TYW1wbGVUaW1pbmdJbmZvICpzYW1wbGVUaW1pbmdBcnJh
eSwgQ01JdGVtQ291bnQgbnVtU2FtcGxlU2l6ZUVudHJpZXMsIGNvbnN0IHNpemVfdCAqc2FtcGxl
U2l6ZUFycmF5LCBDTVNhbXBsZUJ1ZmZlclJlZiAqc0J1Zk91dCksIChhbGxvY2F0b3IsIGRhdGFC
dWZmZXIsIGRhdGFSZWFkeSwgbWFrZURhdGFSZWFkeUNhbGxiYWNrLCBtYWtlRGF0YVJlYWR5UmVm
Y29uLCBmb3JtYXREZXNjcmlwdGlvbiwgbnVtU2FtcGxlcywgbnVtU2FtcGxlVGltaW5nRW50cmll
cywgc2FtcGxlVGltaW5nQXJyYXksIG51bVNhbXBsZVNpemVFbnRyaWVzLCBzYW1wbGVTaXplQXJy
YXksIHNCdWZPdXQpKQorU09GVF9MSU5LKENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJDcmVhdGVD
b3B5LCBPU1N0YXR1cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ01TYW1wbGVCdWZmZXJS
ZWYgc2J1ZiwgQ01TYW1wbGVCdWZmZXJSZWYgKnNidWZDb3B5T3V0KSwgKGFsbG9jYXRvciwgc2J1
Ziwgc2J1ZkNvcHlPdXQpKQorU09GVF9MSU5LKENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJDYWxs
Rm9yRWFjaFNhbXBsZSwgT1NTdGF0dXMsIChDTVNhbXBsZUJ1ZmZlclJlZiBzYnVmLCBPU1N0YXR1
cyAoKmNhbGxiYWNrKSggQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyLCBDTUl0ZW1Db3Vu
dCBpbmRleCwgdm9pZCAqcmVmY29uKSwgdm9pZCAqcmVmY29uKSwgKHNidWYsIGNhbGxiYWNrLCBy
ZWZjb24pKQorU09GVF9MSU5LKENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJHZXREZWNvZGVUaW1l
U3RhbXAsIENNVGltZSwgKENNU2FtcGxlQnVmZmVyUmVmIHNidWYpLCAoc2J1ZikpCitTT0ZUX0xJ
TksoQ29yZU1lZGlhLCBDTVNhbXBsZUJ1ZmZlckdldER1cmF0aW9uLCBDTVRpbWUsIChDTVNhbXBs
ZUJ1ZmZlclJlZiBzYnVmKSwgKHNidWYpKQorU09GVF9MSU5LKENvcmVNZWRpYSwgQ01TYW1wbGVC
dWZmZXJHZXRQcmVzZW50YXRpb25UaW1lU3RhbXAsIENNVGltZSwgKENNU2FtcGxlQnVmZmVyUmVm
IHNidWYpLCAoc2J1ZikpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVNhbXBsZUJ1ZmZlckdldFNh
bXBsZUF0dGFjaG1lbnRzQXJyYXksIENGQXJyYXlSZWYsIChDTVNhbXBsZUJ1ZmZlclJlZiBzYnVm
LCBCb29sZWFuIGNyZWF0ZUlmTmVjZXNzYXJ5KSwgKHNidWYsIGNyZWF0ZUlmTmVjZXNzYXJ5KSkK
K1NPRlRfTElOSyhDb3JlTWVkaWEsIENNRm9ybWF0RGVzY3JpcHRpb25HZXRNZWRpYVN1YlR5cGUs
IEZvdXJDaGFyQ29kZSwgKENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZGVzYyksIChkZXNjKSkKK1NP
RlRfTElOSyhDb3JlTWVkaWEsIENNU2V0QXR0YWNobWVudCwgdm9pZCwgKENNQXR0YWNobWVudEJl
YXJlclJlZiB0YXJnZXQsIENGU3RyaW5nUmVmIGtleSwgQ0ZUeXBlUmVmIHZhbHVlLCBDTUF0dGFj
aG1lbnRNb2RlIGF0dGFjaG1lbnRNb2RlKSwgKHRhcmdldCwga2V5LCB2YWx1ZSwgYXR0YWNobWVu
dE1vZGUpKQorCisjZGVmaW5lIEFWTWVkaWFUeXBlVmlkZW8gZ2V0QVZNZWRpYVR5cGVWaWRlbygp
CisjZGVmaW5lIEFWTWVkaWFUeXBlQXVkaW8gZ2V0QVZNZWRpYVR5cGVBdWRpbygpCisjZGVmaW5l
IEFWTWVkaWFUeXBlVGV4dCBnZXRBVk1lZGlhVHlwZVRleHQoKQorI2RlZmluZSBrQ01UaW1lWmVy
byBnZXRrQ01UaW1lWmVybygpCisjZGVmaW5lIGtDTVRpbWVJbnZhbGlkIGdldGtDTVRpbWVJbnZh
bGlkKCkKKyNkZWZpbmUga0NNU2FtcGxlQXR0YWNobWVudEtleV9Ob3RTeW5jIGdldGtDTVNhbXBs
ZUF0dGFjaG1lbnRLZXlfTm90U3luYygpCisjZGVmaW5lIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlf
RG9Ob3REaXNwbGF5IGdldGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfRG9Ob3REaXNwbGF5KCkKKyNk
ZWZpbmUga0NNU2FtcGxlQnVmZmVyQXR0YWNobWVudEtleV9SZXNldERlY29kZXJCZWZvcmVEZWNv
ZGluZyBnZXRrQ01TYW1wbGVCdWZmZXJBdHRhY2htZW50S2V5X1Jlc2V0RGVjb2RlckJlZm9yZURl
Y29kaW5nKCkKKyNkZWZpbmUga0NNU2FtcGxlQnVmZmVyQXR0YWNobWVudEtleV9EcmFpbkFmdGVy
RGVjb2RpbmcgZ2V0a0NNU2FtcGxlQnVmZmVyQXR0YWNobWVudEtleV9EcmFpbkFmdGVyRGVjb2Rp
bmcoKQorI2RlZmluZSBrQ01TYW1wbGVCdWZmZXJBdHRhY2htZW50S2V5X0VtcHR5TWVkaWEgZ2V0
a0NNU2FtcGxlQnVmZmVyQXR0YWNobWVudEtleV9FbXB0eU1lZGlhKCkKKyNkZWZpbmUga0NNU2Ft
cGxlQnVmZmVyQXR0YWNobWVudEtleV9EaXNwbGF5RW1wdHlNZWRpYUltbWVkaWF0ZWx5IGdldGtD
TVNhbXBsZUJ1ZmZlckF0dGFjaG1lbnRLZXlfRGlzcGxheUVtcHR5TWVkaWFJbW1lZGlhdGVseSgp
CisKKyNkZWZpbmUgQVZNZWRpYUNoYXJhY3RlcmlzdGljVmlzdWFsIGdldEFWTWVkaWFDaGFyYWN0
ZXJpc3RpY1Zpc3VhbCgpCisjZGVmaW5lIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0F1ZGlibGUgZ2V0
QVZNZWRpYUNoYXJhY3RlcmlzdGljQXVkaWJsZSgpCisjZGVmaW5lIEFWTWVkaWFDaGFyYWN0ZXJp
c3RpY0xlZ2libGUgZ2V0QVZNZWRpYUNoYXJhY3RlcmlzdGljTGVnaWJsZSgpCisKKyNwcmFnbWEg
bWFyayAtCisjcHJhZ21hIG1hcmsgQVZTdHJlYW1EYXRhUGFyc2VyCitAY2xhc3MgQVZTdHJlYW1E
YXRhUGFyc2VySW50ZXJuYWw7CisKK05TX0NMQVNTX0FWQUlMQUJMRShUQkQsIFRCRCkKK0BpbnRl
cmZhY2UgQVZTdHJlYW1EYXRhUGFyc2VyIDogTlNPYmplY3QKKy0gKHZvaWQpc2V0RGVsZWdhdGU6
KGlkKWRlbGVnYXRlOworLSAodm9pZClhcHBlbmRTdHJlYW1EYXRhOihOU0RhdGEgKilkYXRhOwor
LSAodm9pZClzZXRTaG91bGRQcm92aWRlTWVkaWFEYXRhOihCT09MKXNob3VsZFByb3ZpZGVNZWRp
YURhdGEgZm9yVHJhY2tJRDooQ01QZXJzaXN0ZW50VHJhY2tJRCl0cmFja0lEOworLSAoQk9PTClz
aG91bGRQcm92aWRlTWVkaWFEYXRhRm9yVHJhY2tJRDooQ01QZXJzaXN0ZW50VHJhY2tJRCl0cmFj
a0lEOworQGVuZAorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIFdlYkFWU3RyZWFtRGF0
YVBhcnNlckxpc3RlbmVyCisKK0BpbnRlcmZhY2UgV2ViQVZTdHJlYW1EYXRhUGFyc2VyTGlzdGVu
ZXIgOiBOU09iamVjdCB7CisgICAgV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMq
IF9wYXJlbnQ7CisgICAgQVZTdHJlYW1EYXRhUGFyc2VyKiBfcGFyc2VyOworfQorLSAoaWQpaW5p
dFdpdGhQYXJzZXI6KEFWU3RyZWFtRGF0YVBhcnNlciopcGFyc2VyIHBhcmVudDooV2ViQ29yZTo6
U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMqKXBhcmVudDsKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFdlYkFWU3RyZWFtRGF0YVBhcnNlckxpc3RlbmVyCistIChpZClpbml0V2l0aFBhcnNlcjoo
QVZTdHJlYW1EYXRhUGFyc2VyKilwYXJzZXIgcGFyZW50OihXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
cml2YXRlQVZGT2JqQyopcGFyZW50Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBp
ZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBBU1NFUlQocGFyZW50KTsKKyAg
ICBfcGFyZW50ID0gcGFyZW50OworICAgIF9wYXJzZXIgPSBwYXJzZXI7CisgICAgW19wYXJzZXIg
c2V0RGVsZWdhdGU6c2VsZl07CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxv
YworeworICAgIFtfcGFyc2VyIHNldERlbGVnYXRlOm5pbF07CisgICAgW3N1cGVyIGRlYWxsb2Nd
OworfQorCistICh2b2lkKXN0cmVhbURhdGFQYXJzZXI6KEFWU3RyZWFtRGF0YVBhcnNlciAqKXN0
cmVhbURhdGFQYXJzZXIgZGlkUGFyc2VTdHJlYW1EYXRhQXNBc3NldDooQVZBc3NldCAqKWFzc2V0
Cit7CisjaWYgQVNTRVJUX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKHN0cmVhbURhdGFQYXJz
ZXIpOworI2VuZGlmCisgICAgQVNTRVJUKHN0cmVhbURhdGFQYXJzZXIgPT0gX3BhcnNlcik7Cisg
ICAgX3BhcmVudC0+ZGlkUGFyc2VTdHJlYW1EYXRhQXNBc3NldChhc3NldCk7Cit9CisKKy0gKHZv
aWQpc3RyZWFtRGF0YVBhcnNlcjooQVZTdHJlYW1EYXRhUGFyc2VyICopc3RyZWFtRGF0YVBhcnNl
ciBkaWRGYWlsVG9QYXJzZVN0cmVhbURhdGFXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgorewor
I2lmIEFTU0VSVF9ESVNBQkxFRAorICAgIFVOVVNFRF9QQVJBTShzdHJlYW1EYXRhUGFyc2VyKTsK
KyNlbmRpZgorICAgIEFTU0VSVChzdHJlYW1EYXRhUGFyc2VyID09IF9wYXJzZXIpOworICAgIF9w
YXJlbnQtPmRpZEZhaWxUb1BhcnNlU3RyZWFtRGF0YVdpdGhFcnJvcihlcnJvcik7Cit9CisKKy0g
KHZvaWQpc3RyZWFtRGF0YVBhcnNlcjooQVZTdHJlYW1EYXRhUGFyc2VyICopc3RyZWFtRGF0YVBh
cnNlciBkaWRQcm92aWRlTWVkaWFEYXRhOihDTVNhbXBsZUJ1ZmZlclJlZiltZWRpYURhdGEgZm9y
VHJhY2tJRDooQ01QZXJzaXN0ZW50VHJhY2tJRCl0cmFja0lEIG1lZGlhVHlwZTooTlNTdHJpbmcg
KiltZWRpYVR5cGUgZmxhZ3M6KE5TVUludGVnZXIpZmxhZ3MKK3sKKyNpZiBBU1NFUlRfRElTQUJM
RUQKKyAgICBVTlVTRURfUEFSQU0oc3RyZWFtRGF0YVBhcnNlcik7CisjZW5kaWYKKyAgICBBU1NF
UlQoc3RyZWFtRGF0YVBhcnNlciA9PSBfcGFyc2VyKTsKKyAgICBfcGFyZW50LT5kaWRQcm92aWRl
TWVkaWFEYXRhRm9yVHJhY2tJRCh0cmFja0lELCBtZWRpYURhdGEsIG1lZGlhVHlwZSwgZmxhZ3Mp
OworfQorCistICh2b2lkKXN0cmVhbURhdGFQYXJzZXI6KEFWU3RyZWFtRGF0YVBhcnNlciAqKXN0
cmVhbURhdGFQYXJzZXIgZGlkUmVhY2hFbmRPZlRyYWNrV2l0aFRyYWNrSUQ6KENNUGVyc2lzdGVu
dFRyYWNrSUQpdHJhY2tJRCBtZWRpYVR5cGU6KE5TU3RyaW5nICopbWVkaWFUeXBlCit7CisjaWYg
QVNTRVJUX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKHN0cmVhbURhdGFQYXJzZXIpOworI2Vu
ZGlmCisgICAgQVNTRVJUKHN0cmVhbURhdGFQYXJzZXIgPT0gX3BhcnNlcik7CisgICAgX3BhcmVu
dC0+ZGlkUmVhY2hFbmRPZlRyYWNrV2l0aFRyYWNrSUQodHJhY2tJRCwgbWVkaWFUeXBlKTsKK30K
K0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBt
YXJrIE1lZGlhU2FtcGxlQVZGT2JqQworCitjbGFzcyBNZWRpYVNhbXBsZUFWRk9iakMgOiBwdWJs
aWMgTWVkaWFTYW1wbGUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFTYW1wbGVB
VkZPYmpDPiBjcmVhdGUoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlLCBpbnQgdHJhY2tJRCkgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU2FtcGxlQVZGT2JqQyhzYW1wbGUsIHRyYWNrSUQpKTsg
fQorICAgIHZpcnR1YWwgfk1lZGlhU2FtcGxlQVZGT2JqQygpIHsgfQorCisgICAgdmlydHVhbCBN
ZWRpYVRpbWUgcHJlc2VudGF0aW9uVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRvTWVk
aWFUaW1lKENNU2FtcGxlQnVmZmVyR2V0UHJlc2VudGF0aW9uVGltZVN0YW1wKG1fc2FtcGxlLmdl
dCgpKSk7IH0KKyAgICB2aXJ0dWFsIE1lZGlhVGltZSBkZWNvZGVUaW1lKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gdG9NZWRpYVRpbWUoQ01TYW1wbGVCdWZmZXJHZXREZWNvZGVUaW1lU3RhbXAo
bV9zYW1wbGUuZ2V0KCkpKTsgfQorICAgIHZpcnR1YWwgTWVkaWFUaW1lIGR1cmF0aW9uKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gdG9NZWRpYVRpbWUoQ01TYW1wbGVCdWZmZXJHZXREdXJhdGlv
bihtX3NhbXBsZS5nZXQoKSkpOyB9CisgICAgdmlydHVhbCBBdG9taWNTdHJpbmcgdHJhY2tJRCgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faWQ7IH0KKworICAgIHZpcnR1YWwgU2FtcGxlRmxh
Z3MgZmxhZ3MoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtU2FtcGxlIHBs
YXRmb3JtU2FtcGxlKCkgT1ZFUlJJREU7CisKK3Byb3RlY3RlZDoKKyAgICBNZWRpYVNhbXBsZUFW
Rk9iakMoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlLCBpbnQgdHJhY2tJRCkKKyAgICAgICAgOiBt
X3NhbXBsZShzYW1wbGUpCisgICAgICAgICwgbV9pZChTdHJpbmc6OmZvcm1hdCgiJWQiLCB0cmFj
a0lEKSkKKyAgICB7CisgICAgfQorCisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBt
X3NhbXBsZTsKKyAgICBBdG9taWNTdHJpbmcgbV9pZDsKK307CisKK1BsYXRmb3JtU2FtcGxlIE1l
ZGlhU2FtcGxlQVZGT2JqQzo6cGxhdGZvcm1TYW1wbGUoKQoreworICAgIFBsYXRmb3JtU2FtcGxl
IHNhbXBsZSA9IHsgUGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVyVHlwZSwgeyAuY21TYW1w
bGVCdWZmZXIgPSBtX3NhbXBsZS5nZXQoKSB9IH07CisgICAgcmV0dXJuIHNhbXBsZTsKK30KKwor
c3RhdGljIGJvb2wgQ01TYW1wbGVCdWZmZXJJc1JhbmRvbUFjY2VzcyhDTVNhbXBsZUJ1ZmZlclJl
ZiBzYW1wbGUpCit7CisgICAgQ0ZBcnJheVJlZiBhdHRhY2htZW50cyA9IENNU2FtcGxlQnVmZmVy
R2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1wbGUsIGZhbHNlKTsKKyAgICBmb3IgKENGSW5k
ZXggaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHMpOyArK2kpIHsKKyAgICAg
ICAgQ0ZEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnREaWN0ID0gKENGRGljdGlvbmFyeVJlZilDRkFy
cmF5R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1lbnRzLCBpKTsKKyAgICAgICAgaWYgKCFDRkRpY3Rp
b25hcnlDb250YWluc0tleShhdHRhY2htZW50RGljdCwga0NNU2FtcGxlQXR0YWNobWVudEtleV9O
b3RTeW5jKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK01lZGlhU2FtcGxlOjpTYW1wbGVGbGFncyBNZWRpYVNhbXBsZUFWRk9iakM6OmZs
YWdzKCkgY29uc3QKK3sKKyAgICBpbnQgcmV0dXJuVmFsdWUgPSBNZWRpYVNhbXBsZTo6Tm9uZTsK
KworICAgIGlmIChDTVNhbXBsZUJ1ZmZlcklzUmFuZG9tQWNjZXNzKG1fc2FtcGxlLmdldCgpKSkK
KyAgICAgICAgcmV0dXJuVmFsdWUgfD0gTWVkaWFTYW1wbGU6OklzU3luYzsKKworICAgIHJldHVy
biBTYW1wbGVGbGFncyhyZXR1cm5WYWx1ZSk7Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21h
IG1hcmsgTWVkaWFEZXNjcmlwdGlvbkFWRk9iakMKKworY2xhc3MgTWVkaWFEZXNjcmlwdGlvbkFW
Rk9iakMgOiBwdWJsaWMgTWVkaWFEZXNjcmlwdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZlB0cjxNZWRpYURlc2NyaXB0aW9uQVZGT2JqQz4gY3JlYXRlKEFWQXNzZXRUcmFjayogdHJhY2sp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYURlc2NyaXB0aW9uQVZGT2JqQyh0cmFjaykpOyB9
CisgICAgdmlydHVhbCB+TWVkaWFEZXNjcmlwdGlvbkFWRk9iakMoKSB7IH0KKworICAgIHZpcnR1
YWwgQXRvbWljU3RyaW5nIGNvZGVjKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9jb2RlYzsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1ZpZGVvKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9p
c1ZpZGVvOyB9CisgICAgdmlydHVhbCBib29sIGlzQXVkaW8oKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX2lzQXVkaW87IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0KCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gbV9pc1RleHQ7IH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBNZWRpYURlc2Ny
aXB0aW9uQVZGT2JqQyhBVkFzc2V0VHJhY2sqIHRyYWNrKQorICAgICAgICA6IG1faXNWaWRlbyhb
dHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWNWaXN1YWxd
KQorICAgICAgICAsIG1faXNBdWRpbyhbdHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1l
ZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlXSkKKyAgICAgICAgLCBtX2lzVGV4dChbdHJhY2sgaGFz
TWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWNMZWdpYmxlXSkKKyAgICB7
CisgICAgICAgIE5TQXJyYXkqIGZvcm1hdERlc2NyaXB0aW9ucyA9IFt0cmFjayBmb3JtYXREZXNj
cmlwdGlvbnNdOworICAgICAgICBDTUZvcm1hdERlc2NyaXB0aW9uUmVmIGRlc2NyaXB0aW9uID0g
W2Zvcm1hdERlc2NyaXB0aW9ucyBjb3VudF0gPyAoQ01Gb3JtYXREZXNjcmlwdGlvblJlZilbZm9y
bWF0RGVzY3JpcHRpb25zIG9iamVjdEF0SW5kZXg6MF0gOiAwOworICAgICAgICBpZiAoZGVzY3Jp
cHRpb24pIHsKKyAgICAgICAgICAgIEZvdXJDaGFyQ29kZSBjb2RlYyA9IENNRm9ybWF0RGVzY3Jp
cHRpb25HZXRNZWRpYVN1YlR5cGUoZGVzY3JpcHRpb24pOworICAgICAgICAgICAgbV9jb2RlYyA9
IEF0b21pY1N0cmluZyhyZWludGVycHJldF9jYXN0PExDaGFyKj4oJmNvZGVjKSwgNCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBBdG9taWNTdHJpbmcgbV9jb2RlYzsKKyAgICBib29sIG1faXNW
aWRlbzsKKyAgICBib29sIG1faXNBdWRpbzsKKyAgICBib29sIG1faXNUZXh0OworfTsKKworI3By
YWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQworCitS
ZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM+IFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZP
YmpDOjpjcmVhdGUoTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQyogcGFyZW50KQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMocGFyZW50KSk7Cit9
CisKK1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2Jq
QyhNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKiBwYXJlbnQpCisgICAgOiBtX3BhcmVudChwYXJl
bnQpCisgICAgLCBtX2NsaWVudCgwKQorICAgICwgbV9wYXJzZXIoYWRvcHROUyhbW2dldEFWU3Ry
ZWFtRGF0YVBhcnNlckNsYXNzKCkgYWxsb2NdIGluaXRdKSkKKyAgICAsIG1fZGVsZWdhdGUoYWRv
cHROUyhbW1dlYkFWU3RyZWFtRGF0YVBhcnNlckxpc3RlbmVyIGFsbG9jXSBpbml0V2l0aFBhcnNl
cjptX3BhcnNlci5nZXQoKSBwYXJlbnQ6dGhpc10pKQorICAgICwgbV9wYXJzaW5nU3VjY2VlZGVk
KHRydWUpCit7Cit9CisKK1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjp+U291cmNlQnVmZmVy
UHJpdmF0ZUFWRk9iakMoKQoreworICAgIGlmIChtX2Rpc3BsYXlMYXllcikgeworICAgICAgICBt
X3BhcmVudC0+cGxheWVyKCktPnJlbW92ZURpc3BsYXlMYXllcihtX2Rpc3BsYXlMYXllci5nZXQo
KSk7CisgICAgICAgIFttX2Rpc3BsYXlMYXllciBmbHVzaEFuZFJlbW92ZUltYWdlXTsKKyAgICAg
ICAgW21fZGlzcGxheUxheWVyIHN0b3BSZXF1ZXN0aW5nTWVkaWFEYXRhXTsKKyAgICAgICAgbV9k
aXNwbGF5TGF5ZXIgPSBudWxscHRyOworICAgIH0KK30KKwordm9pZCBTb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQzo6ZGlkUGFyc2VTdHJlYW1EYXRhQXNBc3NldChBVkFzc2V0KiBhc3NldCkKK3sK
KyAgICBMT0coTWVkaWEsICJTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZGlkUGFyc2VTdHJl
YW1EYXRhQXNBc3NldCglcCkiLCB0aGlzKTsKKworICAgIG1fYXNzZXQgPSBhc3NldDsKKworICAg
IFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudCBzZWdtZW50
OworICAgIHNlZ21lbnQuZHVyYXRpb24gPSB0b01lZGlhVGltZShbbV9hc3NldCBkdXJhdGlvbl0p
OworCisgICAgZm9yIChBVkFzc2V0VHJhY2sqIHRyYWNrIGluIFttX2Fzc2V0IHRyYWNrc10pIHsK
KyAgICAgICAgaWYgKFt0cmFjayBoYXNNZWRpYUNoYXJhY3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0
ZXJpc3RpY1Zpc3VhbF0pIHsKKyAgICAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6
OkluaXRpYWxpemF0aW9uU2VnbWVudDo6VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87CisgICAg
ICAgICAgICBpbmZvLnRyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6
OmNyZWF0ZSh0cmFjaywgdGhpcyk7CisgICAgICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gTWVk
aWFEZXNjcmlwdGlvbkFWRk9iakM6OmNyZWF0ZSh0cmFjayk7CisgICAgICAgICAgICBzZWdtZW50
LnZpZGVvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAgICAgfSBlbHNlIGlmIChbdHJhY2sgaGFz
TWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlXSkgeworICAg
ICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50
OjpBdWRpb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKKyAgICAgICAgICAgIGluZm8udHJhY2sgPSBB
dWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y3JlYXRlKHRyYWNrLCB0aGlzKTsK
KyAgICAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBNZWRpYURlc2NyaXB0aW9uQVZGT2JqQzo6
Y3JlYXRlKHRyYWNrKTsKKyAgICAgICAgICAgIHNlZ21lbnQuYXVkaW9UcmFja3MuYXBwZW5kKGlu
Zm8pOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEFkZCBUZXh0VHJhY2sgc3VwcG9y
dAorICAgIH0KKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnNvdXJjZUJ1
ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KHRoaXMsIHNlZ21lbnQp
OworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpkaWRGYWlsVG9QYXJzZVN0
cmVhbURhdGFXaXRoRXJyb3IoTlNFcnJvciogZXJyb3IpCit7CisjaWYgTE9HX0RJU0FCTEVECisg
ICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyNlbmRpZgorICAgIExPRyhNZWRpYSwgIlNvdXJjZUJ1
ZmZlclByaXZhdGVBVkZPYmpDOjpkaWRGYWlsVG9QYXJzZVN0cmVhbURhdGFXaXRoRXJyb3IoJXAp
IC0gZXJyb3I6XCIlc1wiIiwgdGhpcywgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlvbl0pLnV0Zjgo
KS5kYXRhKCkpOworCisgICAgbV9wYXJzaW5nU3VjY2VlZGVkID0gZmFsc2U7Cit9CisKK3N0cnVj
dCBQcm9jZXNzQ29kZWRGcmFtZUluZm8geworICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
KiBzb3VyY2VCdWZmZXI7CisgICAgaW50IHRyYWNrSUQ7CisgICAgY29uc3QgU3RyaW5nJiBtZWRp
YVR5cGU7Cit9OworCitzdGF0aWMgT1NTdGF0dXMgY2FsbFByb2Nlc3NDb2RlZEZyYW1lRm9yRWFj
aFNhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXIsIENNSXRlbUNvdW50LCB2b2lk
ICpyZWZjb24pCit7CisgICAgUHJvY2Vzc0NvZGVkRnJhbWVJbmZvKiBpbmZvID0gKFByb2Nlc3ND
b2RlZEZyYW1lSW5mbyopcmVmY29uOworICAgIHJldHVybiBpbmZvLT5zb3VyY2VCdWZmZXItPnBy
b2Nlc3NDb2RlZEZyYW1lKGluZm8tPnRyYWNrSUQsIHNhbXBsZUJ1ZmZlciwgaW5mby0+bWVkaWFU
eXBlKTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZGlkUHJvdmlkZU1l
ZGlhRGF0YUZvclRyYWNrSUQoaW50IHRyYWNrSUQsIENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1
ZmZlciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIHVuc2lnbmVkIGZsYWdzKQoreworICAgIFVO
VVNFRF9QQVJBTShmbGFncyk7CisKKyAgICBQcm9jZXNzQ29kZWRGcmFtZUluZm8gaW5mbyA9IHt0
aGlzLCB0cmFja0lELCBtZWRpYVR5cGV9OworICAgIENNU2FtcGxlQnVmZmVyQ2FsbEZvckVhY2hT
YW1wbGUoc2FtcGxlQnVmZmVyLCAmY2FsbFByb2Nlc3NDb2RlZEZyYW1lRm9yRWFjaFNhbXBsZSwg
JmluZm8pOworfQorCitib29sIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpwcm9jZXNzQ29k
ZWRGcmFtZShpbnQgdHJhY2tJRCwgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyLCBjb25z
dCBTdHJpbmcmKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnNvdXJj
ZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlU2FtcGxlKHRoaXMsIE1lZGlhU2FtcGxlQVZGT2JqQzo6
Y3JlYXRlKHNhbXBsZUJ1ZmZlciwgdHJhY2tJRCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmRpZFJlYWNoRW5kT2ZUcmFja1dpdGhU
cmFja0lEKGludCB0cmFja0lELCBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSkKK3sKKyAgICBVTlVT
RURfUEFSQU0obWVkaWFUeXBlKTsKKyAgICBVTlVTRURfUEFSQU0odHJhY2tJRCk7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6c2V0
Q2xpZW50KFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQqIGNsaWVudCkKK3sKKyAgICBtX2NsaWVu
dCA9IGNsaWVudDsKK30KKworU291cmNlQnVmZmVyUHJpdmF0ZTo6QXBwZW5kUmVzdWx0IFNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjphcHBlbmQoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIG1fcGFyc2luZ1N1Y2NlZWRlZCA9IHRydWU7CisKKyAg
ICBMT0coTWVkaWEsICJTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6YXBwZW5kKCVwKSAtIGRh
dGE6JXAsIGxlbmd0aDolZCIsIHRoaXMsIGRhdGEsIGxlbmd0aCk7CisgICAgW21fcGFyc2VyIGFw
cGVuZFN0cmVhbURhdGE6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEgbGVuZ3RoOmxlbmd0aF1d
OworCisgICAgaWYgKG1fcGFyc2luZ1N1Y2NlZWRlZCkKKyAgICAgICAgbV9wYXJlbnQtPnBsYXll
cigpLT5zZXRMb2FkaW5nUHJvZ3Jlc3NzZWQodHJ1ZSk7CisKKyAgICByZXR1cm4gbV9wYXJzaW5n
U3VjY2VlZGVkID8gQXBwZW5kU3VjY2VlZGVkIDogUGFyc2luZ0ZhaWxlZDsKK30KKwordm9pZCBT
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6YWJvcnQoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnJlbW92ZWRGcm9tTWVk
aWFTb3VyY2UoKQoreworICAgIGlmIChtX2Rpc3BsYXlMYXllcikgeworICAgICAgICBtX3BhcmVu
dC0+cGxheWVyKCktPnJlbW92ZURpc3BsYXlMYXllcihtX2Rpc3BsYXlMYXllci5nZXQoKSk7Cisg
ICAgICAgIFttX2Rpc3BsYXlMYXllciBmbHVzaF07CisgICAgICAgIFttX2Rpc3BsYXlMYXllciBz
dG9wUmVxdWVzdGluZ01lZGlhRGF0YV07CisgICAgICAgIG1fZGlzcGxheUxheWVyID0gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBtX3BhcmVudC0+cmVtb3ZlU291cmNlQnVmZmVyKHRoaXMpOworfQor
CitNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6cmVh
ZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFyZW50LT5wbGF5ZXIoKS0+cmVhZHlT
dGF0ZSgpOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpzZXRSZWFkeVN0
YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUpCit7CisgICAgbV9wYXJlbnQt
PnBsYXllcigpLT5zZXRSZWFkeVN0YXRlKHJlYWR5U3RhdGUpOworfQorCit2b2lkIFNvdXJjZUJ1
ZmZlclByaXZhdGVBVkZPYmpDOjpldmljdENvZGVkRnJhbWVzKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitib29sIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjppc0Z1bGwoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK2Jvb2wg
U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6Omhhc1ZpZGVvKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fY2xpZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9jbGllbnQt
PnNvdXJjZUJ1ZmZlclByaXZhdGVIYXNWaWRlbyh0aGlzKTsKK30KKworYm9vbCBTb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQzo6aGFzQXVkaW8oKSBjb25zdAoreworICAgIGlmICghbV9jbGllbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX2NsaWVudC0+c291cmNlQnVm
ZmVyUHJpdmF0ZUhhc0F1ZGlvKHRoaXMpOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDOjp0cmFja0RpZENoYW5nZUVuYWJsZWQoVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMqIHRyYWNrKQoreworICAgIGludCB0cmFja0lEID0gdHJhY2stPnRyYWNrSUQoKTsK
KyAgICBpZiAoIXRyYWNrLT5zZWxlY3RlZCgpICYmIG1fZW5hYmxlZFZpZGVvVHJhY2tJRCA9PSB0
cmFja0lEKSB7CisgICAgICAgIG1fZW5hYmxlZFZpZGVvVHJhY2tJRCA9IC0xOworICAgICAgICBb
bV9wYXJzZXIgc2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YTpOTyBmb3JUcmFja0lEOnRyYWNrSURd
OworICAgIH0gZWxzZSBpZiAodHJhY2stPnNlbGVjdGVkKCkpIHsKKyAgICAgICAgbV9lbmFibGVk
VmlkZW9UcmFja0lEID0gdHJhY2tJRDsKKyAgICAgICAgW21fcGFyc2VyIHNldFNob3VsZFByb3Zp
ZGVNZWRpYURhdGE6WUVTIGZvclRyYWNrSUQ6dHJhY2tJRF07CisgICAgICAgIGlmICghbV9kaXNw
bGF5TGF5ZXIpIHsKKyAgICAgICAgICAgIG1fZGlzcGxheUxheWVyID0gW1tnZXRBVlNhbXBsZUJ1
ZmZlckRpc3BsYXlMYXllckNsYXNzKCkgYWxsb2NdIGluaXRdOworICAgICAgICAgICAgW21fZGlz
cGxheUxheWVyIHJlcXVlc3RNZWRpYURhdGFXaGVuUmVhZHlPblF1ZXVlOmRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCkgdXNpbmdCbG9jazpeeworICAgICAgICAgICAgICAgIGlmIChtX2NsaWVudCkK
KyAgICAgICAgICAgICAgICAgICAgbV9jbGllbnQtPnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRCZWNv
bWVSZWFkeUZvck1vcmVTYW1wbGVzKHRoaXMpOworICAgICAgICAgICAgfV07CisgICAgICAgICAg
ICBtX3BhcmVudC0+cGxheWVyKCktPmFkZERpc3BsYXlMYXllcihtX2Rpc3BsYXlMYXllci5nZXQo
KSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9i
akM6OnRyYWNrRGlkQ2hhbmdlRW5hYmxlZChBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQyopCit7CisgICAgLy8gTm8tb3AuCit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q01TYW1wbGVC
dWZmZXJSZWY+IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KENNU2FtcGxlQnVmZmVyUmVmIHNhbXBs
ZUJ1ZmZlcikKK3sKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiBuZXdTYW1wbGVCdWZmZXIgPSAwOwor
ICAgIENNU2FtcGxlQnVmZmVyQ3JlYXRlQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzYW1wbGVC
dWZmZXIsICZuZXdTYW1wbGVCdWZmZXIpOworICAgIGlmICghbmV3U2FtcGxlQnVmZmVyKQorICAg
ICAgICByZXR1cm4gc2FtcGxlQnVmZmVyOworCisgICAgQ0ZBcnJheVJlZiBhdHRhY2htZW50c0Fy
cmF5ID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5KG5ld1NhbXBsZUJ1
ZmZlciwgdHJ1ZSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgQ0ZBcnJheUdldENvdW50
KGF0dGFjaG1lbnRzQXJyYXkpOyArK2kpIHsKKyAgICAgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJl
ZiBhdHRhY2htZW50cyA9IChDRk11dGFibGVEaWN0aW9uYXJ5UmVmKUNGQXJyYXlHZXRWYWx1ZUF0
SW5kZXgoYXR0YWNobWVudHNBcnJheSwgaSk7CisgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVl
KGF0dGFjaG1lbnRzLCBrQ01TYW1wbGVBdHRhY2htZW50S2V5X0RvTm90RGlzcGxheSwga0NGQm9v
bGVhblRydWUpOworICAgIH0KKworICAgIHJldHVybiBhZG9wdENGKG5ld1NhbXBsZUJ1ZmZlcik7
Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmZsdXNoQW5kRW5xdWV1ZU5v
bkRpc3BsYXlpbmdTYW1wbGVzKFZlY3RvcjxSZWZQdHI8TWVkaWFTYW1wbGU+PiBtZWRpYVNhbXBs
ZXMsIEF0b21pY1N0cmluZyB0cmFja0lEKQoreworICAgIGlmICh0cmFja0lELnRvSW50KCkgIT0g
bV9lbmFibGVkVmlkZW9UcmFja0lEKQorICAgICAgICByZXR1cm47CisKKyAgICBMT0coTWVkaWEs
ICJTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6Zmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWlu
Z1NhbXBsZXMoJXApIHNhbXBsZXM6ICVkIHNhbXBsZXMsIHRyYWNrSWQ6ICVkIiwgdGhpcywgbWVk
aWFTYW1wbGVzLnNpemUoKSwgdHJhY2tJRC50b0ludCgpKTsKKworICAgIFttX2Rpc3BsYXlMYXll
ciBmbHVzaF07CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtZWRpYVNhbXBsZXMuYmVnaW4oKSwgZW5k
ID0gbWVkaWFTYW1wbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVmUHRy
PE1lZGlhU2FtcGxlPiYgbWVkaWFTYW1wbGUgPSAqaXQ7CisKKyAgICAgICAgUGxhdGZvcm1TYW1w
bGUgcGxhdGZvcm1TYW1wbGUgPSBtZWRpYVNhbXBsZS0+cGxhdGZvcm1TYW1wbGUoKTsKKyAgICAg
ICAgaWYgKHBsYXRmb3JtU2FtcGxlLnR5cGUgIT0gUGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVm
ZmVyVHlwZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZXRhaW5QdHI8Q01TYW1w
bGVCdWZmZXJSZWY+IHNhbXBsZUJ1ZmZlciA9IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KHBsYXRm
b3JtU2FtcGxlLnNhbXBsZS5jbVNhbXBsZUJ1ZmZlcik7CisKKyAgICAgICAgW21fZGlzcGxheUxh
eWVyIGVucXVldWVTYW1wbGVCdWZmZXI6c2FtcGxlQnVmZmVyLmdldCgpXTsKKyAgICB9CisKKyAg
ICBtX3BhcmVudC0+cGxheWVyKCktPnNldEhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoZmFsc2UpOwor
fQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjplbnF1ZXVlU2FtcGxlKFBhc3NS
ZWZQdHI8TWVkaWFTYW1wbGU+IHBycE1lZGlhU2FtcGxlLCBBdG9taWNTdHJpbmcgdHJhY2tJRCkK
K3sKKyAgICBpZiAodHJhY2tJRC50b0ludCgpICE9IG1fZW5hYmxlZFZpZGVvVHJhY2tJRCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBtZWRpYVNhbXBsZSA9IHBy
cE1lZGlhU2FtcGxlOworCisgICAgUGxhdGZvcm1TYW1wbGUgcGxhdGZvcm1TYW1wbGUgPSBtZWRp
YVNhbXBsZS0+cGxhdGZvcm1TYW1wbGUoKTsKKyAgICBpZiAocGxhdGZvcm1TYW1wbGUudHlwZSAh
PSBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBlKQorICAgICAgICByZXR1cm47CisK
KyAgICBbbV9kaXNwbGF5TGF5ZXIgZW5xdWV1ZVNhbXBsZUJ1ZmZlcjpwbGF0Zm9ybVNhbXBsZS5z
YW1wbGUuY21TYW1wbGVCdWZmZXJdOworICAgIG1fcGFyZW50LT5wbGF5ZXIoKS0+c2V0SGFzQXZh
aWxhYmxlVmlkZW9GcmFtZSh0cnVlKTsKK30KKworYm9vbCBTb3VyY2VCdWZmZXJQcml2YXRlQVZG
T2JqQzo6aXNSZWFkeUZvck1vcmVTYW1wbGVzKCkKK3sKKyAgICByZXR1cm4gW21fZGlzcGxheUxh
eWVyIGlzUmVhZHlGb3JNb3JlTWVkaWFEYXRhXTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQzo6c2V0QWN0aXZlKGJvb2wgaXNBY3RpdmUpCit7CisgICAgbV9wYXJlbnQtPnNv
dXJjZUJ1ZmZlclByaXZhdGVEaWRDaGFuZ2VBY3RpdmVTdGF0ZSh0aGlzLCBpc0FjdGl2ZSk7Cit9
CisKK01lZGlhVGltZSBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZmFzdFNlZWtUaW1lRm9y
TWVkaWFUaW1lKE1lZGlhVGltZSB0aW1lLCBNZWRpYVRpbWUgbmVnYXRpdmVUaHJlc2hvbGQsIE1l
ZGlhVGltZSBwb3NpdGl2ZVRocmVzaG9sZCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAg
IHJldHVybiBtX2NsaWVudC0+c291cmNlQnVmZmVyUHJpdmF0ZUZhc3RTZWVrVGltZUZvck1lZGlh
VGltZSh0aGlzLCB0aW1lLCBuZWdhdGl2ZVRocmVzaG9sZCwgcG9zaXRpdmVUaHJlc2hvbGQpOwor
ICAgIHJldHVybiB0aW1lOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpz
ZWVrVG9UaW1lKE1lZGlhVGltZSB0aW1lKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAg
bV9jbGllbnQtPnNvdXJjZUJ1ZmZlclByaXZhdGVTZWVrVG9UaW1lKHRoaXMsIHRpbWUpOworfQor
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBVU0UoQVZGT1VOREFUSU9O
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvVmlkZW9UcmFja1By
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0YmQ4OGM4ODhiMzg3Nzc0
NjFjYjI4MTE5NmM0NTEwYjkzOGMzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9WaWRlb1RyYWNrUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQy5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQor
CisjaW5jbHVkZSAiQVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbC5oIgorI2luY2x1ZGUgIlNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVmlkZW9U
cmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OlZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDKEFWQXNzZXRUcmFjayogdHJhY2ssIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
KiBwYXJlbnQpCisgICAgOiBtX2ltcGwoc3RkOjptYWtlX3VuaXF1ZTxBVlRyYWNrUHJpdmF0ZUFW
Rk9iakNJbXBsPih0cmFjaykpCisgICAgLCBtX3BhcmVudChwYXJlbnQpCisgICAgLCBtX3RyYWNr
SUQoLTEpCisgICAgLCBtX3NlbGVjdGVkKGZhbHNlKQoreworICAgIHJlc2V0UHJvcGVydGllc0Zy
b21UcmFjaygpOworfQorCit2b2lkIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
OjpyZXNldFByb3BlcnRpZXNGcm9tVHJhY2soKQoreworICAgIG1fdHJhY2tJRCA9IG1faW1wbC0+
dHJhY2tJRCgpOworCisgICAgc2V0S2luZChtX2ltcGwtPnZpZGVvS2luZCgpKTsKKyAgICBzZXRJ
ZChtX2ltcGwtPmlkKCkpOworICAgIHNldExhYmVsKG1faW1wbC0+bGFiZWwoKSk7CisgICAgc2V0
TGFuZ3VhZ2UobV9pbXBsLT5sYW5ndWFnZSgpKTsKK30KKwordm9pZCBWaWRlb1RyYWNrUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0QXNzZXRUcmFjayhBVkFzc2V0VHJhY2sgKnRyYWNrKQor
eworICAgIG1faW1wbCA9IHN0ZDo6bWFrZV91bmlxdWU8QVZUcmFja1ByaXZhdGVBVkZPYmpDSW1w
bD4odHJhY2spOworICAgIHJlc2V0UHJvcGVydGllc0Zyb21UcmFjaygpOworfQorCitBVkFzc2V0
VHJhY2sqIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjphc3NldFRyYWNrKCkK
K3sKKyAgICByZXR1cm4gbV9pbXBsLT5hc3NldFRyYWNrKCk7Cit9CisKKworYm9vbCBWaWRlb1Ry
YWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2VsZWN0ZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3NlbGVjdGVkOworfQorCit2b2lkIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjpzZXRTZWxlY3RlZChib29sIHNlbGVjdGVkKQoreworICAgIGlmIChtX3NlbGVjdGVk
ID09IHNlbGVjdGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NlbGVjdGVkID0gc2VsZWN0
ZWQ7CisgICAgbV9wYXJlbnQtPnRyYWNrRGlkQ2hhbmdlRW5hYmxlZCh0aGlzKTsKK30KKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL1ZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9WaWRlb1Ry
YWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzMzZlMWJiY2Y3NmJi
OWI2OGE1YTcxZDVkYmE0MzlhZTM2OTQyNmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9WaWRlb1RyYWNrUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQy5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDX2gKKyNkZWZpbmUgVmlkZW9UcmFj
a1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakNfaAorCisjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZh
dGVBVkYuaCIKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVOQUJMRShWSURFT19UUkFD
SykKKworT0JKQ19DTEFTUyBBVkFzc2V0VHJhY2s7CitPQkpDX0NMQVNTIEFWUGxheWVySXRlbVRy
YWNrOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFWVHJhY2tQcml2YXRlQVZGT2Jq
Q0ltcGw7CitjbGFzcyBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzsKKworY2xhc3MgVmlkZW9U
cmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMgRklOQUwgOiBwdWJsaWMgVmlkZW9UcmFja1By
aXZhdGVBVkYgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZpZGVvVHJhY2tQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDKQorcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8VmlkZW9UcmFja1By
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakM+IGNyZWF0ZShBVkFzc2V0VHJhY2sqIHRyYWNrLCBTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQyogcGFyZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyh0cmFjaywgcGFy
ZW50KSk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHNlbGVjdGVkKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkKGJvb2wpIE9WRVJSSURFOworCisgICAg
dm9pZCBzZXRBc3NldFRyYWNrKEFWQXNzZXRUcmFjayopOworICAgIEFWQXNzZXRUcmFjayogYXNz
ZXRUcmFjaygpOworCisgICAgaW50IHRyYWNrSUQoKSB7IHJldHVybiBtX3RyYWNrSUQ7IH0KKwor
cHJpdmF0ZToKKyAgICBleHBsaWNpdCBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
QyhBVkFzc2V0VHJhY2sqLCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyogcGFyZW50KTsKKyAg
ICAKKyAgICB2b2lkIHJlc2V0UHJvcGVydGllc0Zyb21UcmFjaygpOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPEFWVHJhY2tQcml2YXRlQVZGT2JqQ0ltcGw+IG1faW1wbDsKKyAgICBTb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQyogbV9wYXJlbnQ7CisgICAgaW50IG1fdHJhY2tJRDsKKyAgICBib29s
IG1fc2VsZWN0ZWQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU09VUkNFKSAm
JiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtQ2xvY2tDTS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1BsYXRmb3JtQ2xvY2tDTS5oCmluZGV4IDllZTQ5YTc2YWZjOThiMzBiOTZmYzkwNzRh
YzVkNWM2NzM3N2NkMDcuLjg3ZTcyYzgyN2YwZTIwM2RhNzIzOGVhZmI0ZmZjZDkwZjVkYmUwYWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUNsb2NrQ00u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1DbG9ja0NNLmgKQEAg
LTU1LDYgKzU1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCBib29sIGlzUnVubmluZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
cnVubmluZzsgfQogCisgICAgQ01UaW1lYmFzZVJlZiB0aW1lYmFzZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGltZWJhc2UuZ2V0KCk7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVXaXRo
VGltaW5nU291cmNlKENNQ2xvY2tSZWYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU29mdExpbmtpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
b2Z0TGlua2luZy5oCmluZGV4IDgxYzUxMGFmYjkyYmNkNzQwZTA5NWVhZTBiYThhZTFkODk4NTNi
ODkuLjU1NDFiMDA5Mjc2Y2U1Njc5MGFmMjJjMmE0ZTMxM2I0M2UxYTE2NGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Tb2Z0TGlua2luZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9Tb2Z0TGlua2luZy5oCkBAIC0xMTgsNiArMTE4LDI0IEBACiAg
ICAgICAgIHJldHVybiBjbGFzcyMjY2xhc3NOYW1lOyBcCiAgICAgfQogCisjZGVmaW5lIFNPRlRf
TElOS19DTEFTU19PUFRJT05BTChmcmFtZXdvcmssIGNsYXNzTmFtZSkgXAorICAgIHN0YXRpYyBD
bGFzcyBpbml0IyNjbGFzc05hbWUoKTsgXAorICAgIHN0YXRpYyBDbGFzcyAoKmdldCMjY2xhc3NO
YW1lIyNDbGFzcykoKSA9IGluaXQjI2NsYXNzTmFtZTsgXAorICAgIHN0YXRpYyBDbGFzcyBjbGFz
cyMjY2xhc3NOYW1lOyBcCisgICAgXAorICAgIHN0YXRpYyBDbGFzcyBjbGFzc05hbWUjI0Z1bmN0
aW9uKCkgXAorICAgIHsgXAorICAgICAgICByZXR1cm4gY2xhc3MjI2NsYXNzTmFtZTsgXAorICAg
IH1cCisgICAgXAorICAgIHN0YXRpYyBDbGFzcyBpbml0IyNjbGFzc05hbWUoKSBcCisgICAgeyBc
CisgICAgICAgIGZyYW1ld29yayMjTGlicmFyeSgpOyBcCisgICAgICAgIGNsYXNzIyNjbGFzc05h
bWUgPSBvYmpjX2dldENsYXNzKCNjbGFzc05hbWUpOyBcCisgICAgICAgIGdldCMjY2xhc3NOYW1l
IyNDbGFzcyA9IGNsYXNzTmFtZSMjRnVuY3Rpb247IFwKKyAgICAgICAgcmV0dXJuIGNsYXNzIyNj
bGFzc05hbWU7IFwKKyAgICB9CisKICNkZWZpbmUgU09GVF9MSU5LX1BPSU5URVIoZnJhbWV3b3Jr
LCBuYW1lLCB0eXBlKSBcCiAgICAgc3RhdGljIHR5cGUgaW5pdCMjbmFtZSgpOyBcCiAgICAgc3Rh
dGljIHR5cGUgKCpnZXQjI25hbWUpKCkgPSBpbml0IyNuYW1lOyBcCg==
</data>
<flag name="review"
          id="241599"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
    <flag name="commit-queue"
          id="241686"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>