<?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>162901</bug_id>
          
          <creation_ts>2016-10-04 05:13:36 -0700</creation_ts>
          <short_desc>[GStreamer][MSE] Playback pipeline</short_desc>
          <delta_ts>2016-10-26 01:45:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>157314</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrique Ocaña">eocanha</reporter>
          <assigned_to name="Enrique Ocaña">eocanha</assigned_to>
          <cc>calvaris</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1236138</commentid>
    <comment_count>0</comment_count>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-04 05:13:36 -0700</bug_when>
    <thetext>Encapsulate the responsibility to interact with the GStreamer playback pipeline and the different streams managed by the WebKitMediaSrc element into a new PlaybackPipeline class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236141</commentid>
    <comment_count>1</comment_count>
      <attachid>290595</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-04 05:41:11 -0700</bug_when>
    <thetext>Created attachment 290595
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236164</commentid>
    <comment_count>2</comment_count>
      <attachid>290595</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-04 07:08:27 -0700</bug_when>
    <thetext>Comment on attachment 290595
Patch

Wait until all the patches in 157314 are ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236610</commentid>
    <comment_count>3</comment_count>
      <attachid>290595</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2016-10-05 06:12:45 -0700</bug_when>
    <thetext>Comment on attachment 290595
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:40
&gt; +#include &lt;wtf/MainThread.h&gt;
&gt; +#include &lt;wtf/RefCounted.h&gt;
&gt; +#include &lt;wtf/glib/GMutexLocker.h&gt;
&gt; +#include &lt;wtf/glib/GRefPtr.h&gt;
&gt; +#include &lt;wtf/glib/GUniquePtr.h&gt;

These lines are not sorted

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:72
&gt; +    GstBuffer* buffer;
&gt; +    GstCaps* caps;

Move these variables to the first place they are used.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:128
&gt; +    GST_DEBUG_OBJECT(m_webKitMediaSrc.get(), &quot;State %d&quot;, (int)GST_STATE(m_webKitMediaSrc.get()));

Do not use C-like casts, please.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:147
&gt; +    gst_app_src_set_callbacks(GST_APP_SRC(stream-&gt;appsrc), &amp;enabledAppsrcCallbacks, stream-&gt;parent, 0);

0 -&gt; nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:180
&gt; +    Deque&lt;Stream*&gt;::iterator streamPosition = priv-&gt;streams.begin();
&gt; +
&gt; +    while (streamPosition != priv-&gt;streams.end()) {
&gt; +        if ((*streamPosition)-&gt;sourceBuffer == sourceBufferPrivate.get()) {
&gt; +            stream = *streamPosition;
&gt; +            break;
&gt; +        }
&gt; +        ++streamPosition;
&gt; +    }

I think it is better to use a for loop and if possible a C++11 one.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:192
&gt; +    Stream* stream = nullptr;

You don&apos;t need to initialize Stream here. Actually you can declare it when you assign it later.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:193
&gt; +    unsigned padId = 0;

Ditto

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:194
&gt; +    const gchar* mediaType = gst_structure_get_name(structure);

Move to before it is used.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:207
&gt; +    GUniquePtr&lt;gchar&gt; parserBinName(g_strdup_printf(&quot;streamparser%u&quot;, padId));

Declare this after the GST_DEBUG_OBJECT

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:215
&gt; +        GstElement* parser;
&gt; +        GstElement* capsfilter;
&gt; +        GstPad* pad = nullptr;
&gt; +        GRefPtr&lt;GstCaps&gt; filterCaps = adoptGRef(gst_caps_new_simple(&quot;video/x-h264&quot;, &quot;alignment&quot;, G_TYPE_STRING, &quot;au&quot;, nullptr));

Declare these when used. pad should be a GRefPtr.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:236
&gt; +        GstElement* parser;
&gt; +        GstElement* capsfilter;
&gt; +        GstPad* pad = nullptr;
&gt; +        GRefPtr&lt;GstCaps&gt; filterCaps = adoptGRef(gst_caps_new_simple(&quot;video/x-h265&quot;, &quot;alignment&quot;, G_TYPE_STRING, &quot;au&quot;, nullptr));

Declare these when used. pad should be a GRefPtr.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:256
&gt; +        GstElement* parser;
&gt; +        GstPad* pad = nullptr;

Declare these when used. pad should be a GRefPtr.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:261
&gt; +        if (mpegversion == 1) {
&gt; +            parser = gst_element_factory_make(&quot;mpegaudioparse&quot;, nullptr);
&gt; +        } else if (mpegversion == 2 || mpegversion == 4)

You don&apos;t need the { }

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:352
&gt; +    ASSERT(stream);
&gt; +    ASSERT(stream-&gt;type != Invalid);

You don&apos;t need the first ASSERT. Either you shortcircuit with stream &amp;&amp; ... or you just use the second cause a segmentation fault is going to have almost the same result as the assertion.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:357
&gt; +    // gst_app_src_set_caps(GST_APP_SRC(stream-&gt;appsrc), caps);

Why is this commented out? If it is not useful, then we can remove it.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:364
&gt; +#if (!(LOG_DISABLED || GST_DISABLE_GST_DEBUG))

You don&apos;t need LOG_DISABLED here as we don&apos;t use LOG_* anymore.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:366
&gt; +        gchar* stroldcaps = gst_caps_to_string(oldAppsrcCaps.get());
&gt; +        gchar* strnewcaps = gst_caps_to_string(appsrcCaps.get());

GUniquePtr

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:430
&gt; +    for (Vector&lt;GstAppSrc*&gt;::iterator iterator = appsrcs.begin(); iterator != appsrcs.end(); ++iterator)
&gt; +        gst_app_src_end_of_stream(*iterator);

Use C++11 for if possible?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:468
&gt; +    for (Vector&lt;RefPtr&lt;MediaSample&gt;&gt;::iterator iterator = samples.begin(); iterator != samples.end(); ++iterator) {

Use C++11 for if possible?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:496
&gt; +    GST_TRACE(&quot;enqueing sample trackId=%s PTS=%f presentationSize=%.0fx%.0f at %&quot; GST_TIME_FORMAT &quot; duration: %&quot; GST_TIME_FORMAT, trackId.string().utf8().data(), protectedPrSample-&gt;presentationTime().toFloat(), protectedPrSample-&gt;presentationSize().width(), protectedPrSample-&gt;presentationSize().height(), GST_TIME_ARGS(WebCore::toGstClockTime(protectedPrSample-&gt;presentationTime().toDouble())), GST_TIME_ARGS(WebCore::toGstClockTime(protectedPrSample-&gt;duration().toDouble())));

In WebKit we accept long times, but this is probably too much :)

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:515
&gt; +        GstSample* gstSample = gst_sample_ref(sample-&gt;sample());

GRefPtr

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.h:32
&gt; +

Remove extra line

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.h:65
&gt; +    // From MediaSourceGStreamer
&gt; +    void markEndOfStream(MediaSourcePrivate::EndOfStreamStatus);
&gt; +
&gt; +    // From SourceBufferPrivateGStreamer

Periods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240765</commentid>
    <comment_count>4</comment_count>
      <attachid>291764</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-16 12:07:19 -0700</bug_when>
    <thetext>Created attachment 291764
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242800</commentid>
    <comment_count>5</comment_count>
      <attachid>291764</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-10-21 00:56:16 -0700</bug_when>
    <thetext>Comment on attachment 291764
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:94
&gt; +PassRefPtr&lt;PlaybackPipeline&gt; PlaybackPipeline::create()
&gt; +{
&gt; +    return adoptRef(new PlaybackPipeline());
&gt; +}

Return Ref&lt;&gt;. This is usually implemented in the header.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:99
&gt; +PlaybackPipeline::PlaybackPipeline()
&gt; +    : RefCounted&lt;PlaybackPipeline&gt;()
&gt; +{
&gt; +}

The RefCounted&lt;&gt; initialization is always implicit. This constructor definition can be defaulted:

PlaybackPipeline::PlaybackPipeline() = default;

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:103
&gt; +PlaybackPipeline::~PlaybackPipeline()
&gt; +{
&gt; +}

Destructor can be defaulted as well.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:191
&gt; +    GST_OBJECT_LOCK(webKitMediaSrc);
&gt; +    Stream* stream = getStreamBySourceBufferPrivate(webKitMediaSrc, sourceBufferPrivate.get());
&gt; +    GST_OBJECT_UNLOCK(webKitMediaSrc);

I don&apos;t think scoped locks are used much with GstObject locks in the current GStreamer code, but IMO they should be. Something for a follow-up patch.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:314
&gt; +    if (g_str_has_prefix(mediaType, &quot;audio&quot;)) {
&gt; +        GST_OBJECT_LOCK(webKitMediaSrc);
&gt; +        stream-&gt;type = Audio;
&gt; +        stream-&gt;parent-&gt;priv-&gt;numberOfAudioStreams++;
&gt; +        GST_OBJECT_UNLOCK(webKitMediaSrc);
&gt; +        signal = SIGNAL_AUDIO_CHANGED;
&gt; +
&gt; +        stream-&gt;audioTrack = RefPtr&lt;WebCore::AudioTrackPrivateGStreamer&gt;(static_cast&lt;WebCore::AudioTrackPrivateGStreamer*&gt;(trackPrivate.get()));
&gt; +    } else if (g_str_has_prefix(mediaType, &quot;video&quot;)) {
&gt; +        GST_OBJECT_LOCK(webKitMediaSrc);
&gt; +        stream-&gt;type = Video;
&gt; +        stream-&gt;parent-&gt;priv-&gt;numberOfVideoStreams++;
&gt; +        GST_OBJECT_UNLOCK(webKitMediaSrc);
&gt; +        signal = SIGNAL_VIDEO_CHANGED;
&gt; +
&gt; +        stream-&gt;videoTrack = RefPtr&lt;WebCore::VideoTrackPrivateGStreamer&gt;(static_cast&lt;WebCore::VideoTrackPrivateGStreamer*&gt;(trackPrivate.get()));
&gt; +    } else if (g_str_has_prefix(mediaType, &quot;text&quot;)) {
&gt; +        GST_OBJECT_LOCK(webKitMediaSrc);
&gt; +        stream-&gt;type = Text;
&gt; +        stream-&gt;parent-&gt;priv-&gt;numberOfTextStreams++;
&gt; +        GST_OBJECT_UNLOCK(webKitMediaSrc);
&gt; +        signal = SIGNAL_TEXT_CHANGED;
&gt; +
&gt; +        // FIXME: Support text tracks.
&gt; +    }

Can the webKitMediaSrc object lock be held for this whole block?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:350
&gt; +    GRefPtr&lt;GstCaps&gt; oldAppsrcCaps = adoptGRef(gst_app_src_get_caps(GST_APP_SRC(stream-&gt;appsrc)));
&gt; +    // The caps change is managed by gst_appsrc_push_sample() in enqueueSample() and
&gt; +    // flushAndEnqueueNonDisplayingSamples(), so the caps aren&apos;t set from here.
&gt; +    GRefPtr&lt;GstCaps&gt; appsrcCaps = adoptGRef(gst_app_src_get_caps(GST_APP_SRC(stream-&gt;appsrc)));
&gt; +    const gchar* mediaType = gst_structure_get_name(gst_caps_get_structure(appsrcCaps.get(), 0));
&gt; +
&gt; +    if (!gst_caps_is_equal(oldAppsrcCaps.get(), appsrcCaps.get())) {
&gt; +        GST_DEBUG(&quot;Caps have changed, but reconstructing the sequence of elements is not supported yet&quot;);
&gt; +
&gt; +#ifndef GST_DISABLE_GST_DEBUG
&gt; +        GUniquePtr&lt;gchar&gt; stroldcaps(gst_caps_to_string(oldAppsrcCaps.get()));
&gt; +        GUniquePtr&lt;gchar&gt; strnewcaps(gst_caps_to_string(appsrcCaps.get()));
&gt; +        GST_DEBUG(&quot;oldcaps: %s&quot;, stroldcaps.get());
&gt; +        GST_DEBUG(&quot;newcaps: %s&quot;, strnewcaps.get());
&gt; +#endif
&gt; +    }

What&apos;s the point of this? How can the appsrc caps change between the two gst_app_src_get_caps() calls?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:471
&gt; +    RefPtr&lt;MediaSample&gt; protectedPrSample = prSample;

The method should be receiving RefPtr&lt;&gt; as an argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243099</commentid>
    <comment_count>6</comment_count>
      <attachid>292410</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-21 14:27:33 -0700</bug_when>
    <thetext>Created attachment 292410
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243109</commentid>
    <comment_count>7</comment_count>
      <attachid>292415</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-21 14:39:18 -0700</bug_when>
    <thetext>Created attachment 292415
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244291</commentid>
    <comment_count>8</comment_count>
      <attachid>292782</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-25 11:04:31 -0700</bug_when>
    <thetext>Created attachment 292782
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244677</commentid>
    <comment_count>9</comment_count>
      <attachid>292895</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-26 01:21:21 -0700</bug_when>
    <thetext>Created attachment 292895
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244712</commentid>
    <comment_count>10</comment_count>
      <attachid>292895</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-26 01:45:31 -0700</bug_when>
    <thetext>Comment on attachment 292895
Patch

Clearing flags on attachment: 292895

Committed r207882: &lt;http://trac.webkit.org/changeset/207882&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244713</commentid>
    <comment_count>11</comment_count>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-26 01:45:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290595</attachid>
            <date>2016-10-04 05:41:11 -0700</date>
            <delta_ts>2016-10-16 12:07:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162901-20161004123759.patch</filename>
            <type>text/plain</type>
            <size>27142</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2NTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDYxOTAyOGExZGUxYzAz
MDY0YzgzNjUxODM5Nzc2MDIwMTk0ZDA5My4uYzdkOGMyNWMzZDZmMTU1YTA3N2NlNWIwYThkODZj
MzE5MjE4MzE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM1IEBACiAyMDE2LTEwLTA0ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXSBQbGF5YmFjayBwaXBlbGluZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5jYXBzdWxhdGUgdGhlIHJlc3BvbnNpYmlsaXR5IHRv
IGludGVyYWN0IHdpdGggdGhlIEdTdHJlYW1lciBwbGF5YmFjayBwaXBlbGluZSBhbmQgdGhlCisg
ICAgICAgIGRpZmZlcmVudCBzdHJlYW1zIG1hbmFnZWQgYnkgdGhlIFdlYktpdE1lZGlhU3JjIGVs
ZW1lbnQgaW50byBhIG5ldyBQbGF5YmFja1BpcGVsaW5lIGNsYXNzLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNwcDogQWRkZWQu
CisgICAgICAgIChnZXRTdHJlYW1CeVRyYWNrSWQpOgorICAgICAgICAoZ2V0U3RyZWFtQnlTb3Vy
Y2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKHB1c2hTYW1wbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxheWJhY2tQaXBlbGluZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNr
UGlwZWxpbmU6OlBsYXliYWNrUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQ
aXBlbGluZTo6flBsYXliYWNrUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQ
aXBlbGluZTo6c2V0V2ViS2l0TWVkaWFTcmMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQ
aXBlbGluZTo6d2ViS2l0TWVkaWFTcmMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQaXBl
bGluZTo6YWRkU291cmNlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrUGlwZWxp
bmU6OnJlbW92ZVNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1BpcGVs
aW5lOjphdHRhY2hUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1BpcGVsaW5lOjpy
ZWF0dGFjaFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrUGlwZWxpbmU6Om5vdGlm
eUR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1BpcGVsaW5lOjpt
YXJrRW5kT2ZTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQaXBlbGluZTo6Zmx1
c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tQaXBlbGluZTo6ZW5xdWV1ZVNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFj
a1BpcGVsaW5lOjpwaXBlbGluZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmg6IEFkZGVkLgorCisyMDE2LTEwLTA0ICBFbnJpcXVl
IE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dTdHJl
YW1lcl1bTVNFXVtFTUVdIE1TRSBzcGVjaWFsaXphdGlvbiBvZiBNZWRpYSBQbGF5ZXIgUHJpdmF0
ZSBmb3IgR1N0cmVhbWVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI5MDAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTVhYTFmN2MyMmE4MWI3OWVhMDk3Y2ZjM2NjN2MxMDYxMzk1YmYzNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvUGxheWJhY2tQaXBlbGluZS5jcHAKQEAgLTAsMCArMSw1MzkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQsIDIwMTUgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFy
LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICog
Q29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUGxheWJhY2tQaXBlbGluZS5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVB
TUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKQorCisjaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZh
dGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYVNhbXBsZS5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxlLmgiCisjaW5j
bHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlZpZGVvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgor
I2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR011dGV4TG9ja2VyLmg+
CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlx
dWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworc3RhdGljIFN0
cmVhbSogZ2V0U3RyZWFtQnlUcmFja0lkKFdlYktpdE1lZGlhU3JjKiwgQXRvbWljU3RyaW5nKTsK
K3N0YXRpYyBTdHJlYW0qIGdldFN0cmVhbUJ5U291cmNlQnVmZmVyUHJpdmF0ZShXZWJLaXRNZWRp
YVNyYyosIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIqKTsKKworc3RhdGlj
IFN0cmVhbSogZ2V0U3RyZWFtQnlUcmFja0lkKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIEF0b21p
Y1N0cmluZyB0cmFja0lkU3RyaW5nKQoreworICAgIC8vIFdlYktpdE1lZGlhU3JjIHNob3VsZCBi
ZSBsb2NrZWQgYXQgdGhpcyBwb2ludC4KKyAgICBmb3IgKFN0cmVhbSogc3RyZWFtIDogc291cmNl
LT5wcml2LT5zdHJlYW1zKSB7CisgICAgICAgIGlmIChzdHJlYW0tPnR5cGUgIT0gV2ViQ29yZTo6
SW52YWxpZAorICAgICAgICAgICAgJiYgKChzdHJlYW0tPmF1ZGlvVHJhY2sgJiYgc3RyZWFtLT5h
dWRpb1RyYWNrLT5pZCgpID09IHRyYWNrSWRTdHJpbmcpCisgICAgICAgICAgICAgICAgfHwgKHN0
cmVhbS0+dmlkZW9UcmFjayAmJiBzdHJlYW0tPnZpZGVvVHJhY2stPmlkKCkgPT0gdHJhY2tJZFN0
cmluZykgKSApIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJlYW07CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBTdHJlYW0qIGdldFN0cmVhbUJ5U291
cmNlQnVmZmVyUHJpdmF0ZShXZWJLaXRNZWRpYVNyYyogc291cmNlLCBXZWJDb3JlOjpTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyKiBzb3VyY2VCdWZmZXJQcml2YXRlKQoreworICAgIGZvciAo
U3RyZWFtKiBzdHJlYW0gOiBzb3VyY2UtPnByaXYtPnN0cmVhbXMpIHsKKyAgICAgICAgaWYgKHN0
cmVhbS0+c291cmNlQnVmZmVyID09IHNvdXJjZUJ1ZmZlclByaXZhdGUpCisgICAgICAgICAgICBy
ZXR1cm4gc3RyZWFtOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworLy8gRklYTUU6
IFVzZSBnc3RfYXBwX3NyY19wdXNoX3NhbXBsZSgpIGluc3RlYWQgd2hlbiB3ZSBzd2l0Y2ggdG8g
dGhlIGFwcHJvcHJpYXRlIEdTdHJlYW1lciB2ZXJzaW9uLgorc3RhdGljIEdzdEZsb3dSZXR1cm4g
cHVzaFNhbXBsZShHc3RBcHBTcmMqIGFwcHNyYywgR3N0U2FtcGxlKiBzYW1wbGUpCit7CisgICAg
R3N0QnVmZmVyKiBidWZmZXI7CisgICAgR3N0Q2FwcyogY2FwczsKKworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKEdTVF9JU19TQU1QTEUoc2FtcGxlKSwgR1NUX0ZMT1dfRVJST1IpOworCisgICAg
Y2FwcyA9IGdzdF9zYW1wbGVfZ2V0X2NhcHMoc2FtcGxlKTsKKyAgICBpZiAoY2FwcykKKyAgICAg
ICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMoYXBwc3JjLCBjYXBzKTsKKyAgICBlbHNlCisgICAgICAg
IEdTVF9XQVJOSU5HX09CSkVDVChhcHBzcmMsICJyZWNlaXZlZCBzYW1wbGUgd2l0aG91dCBjYXBz
Iik7CisKKyAgICBidWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoc2FtcGxlKTsKKyAgICBp
ZiAoVU5MSUtFTFkoIWJ1ZmZlcikpIHsKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKGFwcHNy
YywgInJlY2VpdmVkIHNhbXBsZSB3aXRob3V0IGJ1ZmZlciIpOworICAgICAgICByZXR1cm4gR1NU
X0ZMT1dfT0s7CisgICAgfQorCisgICAgLy8gZ3N0X2FwcF9zcmNfcHVzaF9idWZmZXIoKSBzdGVh
bHMgdGhlIHJlZmVyZW5jZSwgd2UgbmVlZCBhbiBhZGRpdGlvbmFsIG9uZS4KKyAgICByZXR1cm4g
Z3N0X2FwcF9zcmNfcHVzaF9idWZmZXIoYXBwc3JjLCBnc3RfYnVmZmVyX3JlZihidWZmZXIpKTsK
K30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFBsYXliYWNrUGlwZWxpbmU+
IFBsYXliYWNrUGlwZWxpbmU6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQ
bGF5YmFja1BpcGVsaW5lKCkpOworfQorCitQbGF5YmFja1BpcGVsaW5lOjpQbGF5YmFja1BpcGVs
aW5lKCkKKyAgICA6IFJlZkNvdW50ZWQ8UGxheWJhY2tQaXBlbGluZT4oKQoreworfQorCitQbGF5
YmFja1BpcGVsaW5lOjp+UGxheWJhY2tQaXBlbGluZSgpCit7Cit9CisKK3ZvaWQgUGxheWJhY2tQ
aXBlbGluZTo6c2V0V2ViS2l0TWVkaWFTcmMoV2ViS2l0TWVkaWFTcmMqIHdlYktpdE1lZGlhU3Jj
KQoreworICAgIEdTVF9ERUJVRygid2ViS2l0TWVkaWFTcmM9JXAiLCB3ZWJLaXRNZWRpYVNyYyk7
CisgICAgbV93ZWJLaXRNZWRpYVNyYyA9IHdlYktpdE1lZGlhU3JjOworfQorCitXZWJLaXRNZWRp
YVNyYyogUGxheWJhY2tQaXBlbGluZTo6d2ViS2l0TWVkaWFTcmMoKQoreworICAgIHJldHVybiBt
X3dlYktpdE1lZGlhU3JjLmdldCgpOworfQorCitNZWRpYVNvdXJjZVByaXZhdGU6OkFkZFN0YXR1
cyBQbGF5YmFja1BpcGVsaW5lOjphZGRTb3VyY2VCdWZmZXIoUmVmUHRyPFNvdXJjZUJ1ZmZlclBy
aXZhdGVHU3RyZWFtZXI+IHNvdXJjZUJ1ZmZlclByaXZhdGUpCit7CisgICAgV2ViS2l0TWVkaWFT
cmNQcml2YXRlKiBwcml2ID0gbV93ZWJLaXRNZWRpYVNyYy0+cHJpdjsKKworICAgIGlmIChwcml2
LT5hbGxUcmFja3NDb25maWd1cmVkKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QobV93ZWJL
aXRNZWRpYVNyYy5nZXQoKSwgIkFkZGluZyBuZXcgc291cmNlIGJ1ZmZlcnMgYWZ0ZXIgZmlyc3Qg
ZGF0YSBub3Qgc3VwcG9ydGVkIHlldCIpOworICAgICAgICByZXR1cm4gTWVkaWFTb3VyY2VQcml2
YXRlOjpOb3RTdXBwb3J0ZWQ7CisgICAgfQorCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3dlYktp
dE1lZGlhU3JjLmdldCgpLCAiU3RhdGUgJWQiLCAoaW50KUdTVF9TVEFURShtX3dlYktpdE1lZGlh
U3JjLmdldCgpKSk7CisKKyAgICBTdHJlYW0qIHN0cmVhbSA9IG5ldyBTdHJlYW0geyAwIH07Cisg
ICAgc3RyZWFtLT5wYXJlbnQgPSBtX3dlYktpdE1lZGlhU3JjLmdldCgpOworICAgIHN0cmVhbS0+
YXBwc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzcmMiLCBudWxscHRyKTsKKyAg
ICBzdHJlYW0tPmFwcHNyY05lZWREYXRhRmxhZyA9IGZhbHNlOworICAgIHN0cmVhbS0+c291cmNl
QnVmZmVyID0gc291cmNlQnVmZmVyUHJpdmF0ZS5nZXQoKTsKKworICAgIC8vIE5vIHRyYWNrIGhh
cyBiZWVuIGF0dGFjaGVkIHlldC4KKyAgICBzdHJlYW0tPnR5cGUgPSBJbnZhbGlkOworICAgIHN0
cmVhbS0+cGFyc2VyID0gbnVsbHB0cjsKKyAgICBzdHJlYW0tPmNhcHMgPSBudWxscHRyOworI2lm
IEVOQUJMRShWSURFT19UUkFDSykKKyAgICBzdHJlYW0tPmF1ZGlvVHJhY2sgPSBudWxscHRyOwor
ICAgIHN0cmVhbS0+dmlkZW9UcmFjayA9IG51bGxwdHI7CisjZW5kaWYKKyAgICBzdHJlYW0tPnBy
ZXNlbnRhdGlvblNpemUgPSBXZWJDb3JlOjpGbG9hdFNpemUoKTsKKyAgICBzdHJlYW0tPmxhc3RF
bnF1ZXVlZFRpbWUgPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisKKyAgICBnc3RfYXBwX3Ny
Y19zZXRfY2FsbGJhY2tzKEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSwgJmVuYWJsZWRBcHBz
cmNDYWxsYmFja3MsIHN0cmVhbS0+cGFyZW50LCAwKTsKKyAgICBnc3RfYXBwX3NyY19zZXRfZW1p
dF9zaWduYWxzKEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSwgRkFMU0UpOworICAgIGdzdF9h
cHBfc3JjX3NldF9zdHJlYW1fdHlwZShHU1RfQVBQX1NSQyhzdHJlYW0tPmFwcHNyYyksIEdTVF9B
UFBfU1RSRUFNX1RZUEVfU0VFS0FCTEUpOworCisgICAgZ3N0X2FwcF9zcmNfc2V0X21heF9ieXRl
cyhHU1RfQVBQX1NSQyhzdHJlYW0tPmFwcHNyYyksIDIgKiBXVEY6Ok1CKTsKKyAgICBnX29iamVj
dF9zZXQoR19PQkpFQ1Qoc3RyZWFtLT5hcHBzcmMpLCAiYmxvY2siLCBGQUxTRSwgIm1pbi1wZXJj
ZW50IiwgMjAsIG51bGxwdHIpOworCisgICAgR1NUX09CSkVDVF9MT0NLKG1fd2ViS2l0TWVkaWFT
cmMuZ2V0KCkpOworICAgIHByaXYtPnN0cmVhbXMucHJlcGVuZChzdHJlYW0pOworICAgIEdTVF9P
QkpFQ1RfVU5MT0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpOworCisgICAgZ3N0X2Jpbl9hZGQo
R1NUX0JJTihtX3dlYktpdE1lZGlhU3JjLmdldCgpKSwgc3RyZWFtLT5hcHBzcmMpOworICAgIGdz
dF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoc3RyZWFtLT5hcHBzcmMpOworCisgICAg
cmV0dXJuIE1lZGlhU291cmNlUHJpdmF0ZTo6T2s7Cit9CisKK3ZvaWQgUGxheWJhY2tQaXBlbGlu
ZTo6cmVtb3ZlU291cmNlQnVmZmVyKFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVy
PiBzb3VyY2VCdWZmZXJQcml2YXRlKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgp
KTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSwgIkVsZW1l
bnQgcmVtb3ZlZCBmcm9tIE1lZGlhU291cmNlIik7CisgICAgR1NUX09CSkVDVF9MT0NLKG1fd2Vi
S2l0TWVkaWFTcmMuZ2V0KCkpOworICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IG1f
d2ViS2l0TWVkaWFTcmMtPnByaXY7CisgICAgU3RyZWFtKiBzdHJlYW0gPSBudWxscHRyOworICAg
IERlcXVlPFN0cmVhbSo+OjppdGVyYXRvciBzdHJlYW1Qb3NpdGlvbiA9IHByaXYtPnN0cmVhbXMu
YmVnaW4oKTsKKworICAgIHdoaWxlIChzdHJlYW1Qb3NpdGlvbiAhPSBwcml2LT5zdHJlYW1zLmVu
ZCgpKSB7CisgICAgICAgIGlmICgoKnN0cmVhbVBvc2l0aW9uKS0+c291cmNlQnVmZmVyID09IHNv
dXJjZUJ1ZmZlclByaXZhdGUuZ2V0KCkpIHsKKyAgICAgICAgICAgIHN0cmVhbSA9ICpzdHJlYW1Q
b3NpdGlvbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICsrc3RyZWFt
UG9zaXRpb247CisgICAgfQorICAgIGlmIChzdHJlYW0pCisgICAgICAgIHByaXYtPnN0cmVhbXMu
cmVtb3ZlKHN0cmVhbVBvc2l0aW9uKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3dlYktpdE1l
ZGlhU3JjLmdldCgpKTsKKworICAgIGlmIChzdHJlYW0pCisgICAgICAgIHdlYktpdE1lZGlhU3Jj
RnJlZVN0cmVhbShtX3dlYktpdE1lZGlhU3JjLmdldCgpLCBzdHJlYW0pOworfQorCit2b2lkIFBs
YXliYWNrUGlwZWxpbmU6OmF0dGFjaFRyYWNrKFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0
cmVhbWVyPiBzb3VyY2VCdWZmZXJQcml2YXRlLCBSZWZQdHI8VHJhY2tQcml2YXRlQmFzZT4gdHJh
Y2tQcml2YXRlLCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR3N0Q2FwcyogY2FwcykKK3sKKyAg
ICBXZWJLaXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMgPSBtX3dlYktpdE1lZGlhU3JjLmdldCgp
OworICAgIFN0cmVhbSogc3RyZWFtID0gbnVsbHB0cjsKKyAgICB1bnNpZ25lZCBwYWRJZCA9IDA7
CisgICAgY29uc3QgZ2NoYXIqIG1lZGlhVHlwZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoc3Ry
dWN0dXJlKTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisgICAgc3Ry
ZWFtID0gZ2V0U3RyZWFtQnlTb3VyY2VCdWZmZXJQcml2YXRlKHdlYktpdE1lZGlhU3JjLCBzb3Vy
Y2VCdWZmZXJQcml2YXRlLmdldCgpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRp
YVNyYyk7CisKKyAgICBBU1NFUlQoc3RyZWFtKTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJL
aXRNZWRpYVNyYyk7CisgICAgcGFkSWQgPSBzdHJlYW0tPnBhcmVudC0+cHJpdi0+bnVtYmVyT2ZQ
YWRzOworICAgIHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1iZXJPZlBhZHMrKzsKKyAgICBHU1Rf
T0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiBw
YXJzZXJCaW5OYW1lKGdfc3RyZHVwX3ByaW50Zigic3RyZWFtcGFyc2VyJXUiLCBwYWRJZCkpOwor
CisgICAgR1NUX0RFQlVHX09CSkVDVCh3ZWJLaXRNZWRpYVNyYywgIkNvbmZpZ3VyZWQgdHJhY2sg
JXM6IGFwcHNyYz0lcywgcGFkSWQ9JXUsIG1lZGlhVHlwZT0lcyIsIHRyYWNrUHJpdmF0ZS0+aWQo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBHU1RfRUxFTUVOVF9OQU1FKHN0cmVhbS0+YXBwc3Jj
KSwgcGFkSWQsIG1lZGlhVHlwZSk7CisKKyAgICBpZiAoIWdfc3RyY21wMChtZWRpYVR5cGUsICJ2
aWRlby94LWgyNjQiKSkgeworICAgICAgICBHc3RFbGVtZW50KiBwYXJzZXI7CisgICAgICAgIEdz
dEVsZW1lbnQqIGNhcHNmaWx0ZXI7CisgICAgICAgIEdzdFBhZCogcGFkID0gbnVsbHB0cjsKKyAg
ICAgICAgR1JlZlB0cjxHc3RDYXBzPiBmaWx0ZXJDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25l
d19zaW1wbGUoInZpZGVvL3gtaDI2NCIsICJhbGlnbm1lbnQiLCBHX1RZUEVfU1RSSU5HLCAiYXUi
LCBudWxscHRyKSk7CisKKyAgICAgICAgcGFyc2VyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtl
KCJoMjY0cGFyc2UiLCBudWxscHRyKTsKKyAgICAgICAgY2Fwc2ZpbHRlciA9IGdzdF9lbGVtZW50
X2ZhY3RvcnlfbWFrZSgiY2Fwc2ZpbHRlciIsIG51bGxwdHIpOworICAgICAgICBnX29iamVjdF9z
ZXQoY2Fwc2ZpbHRlciwgImNhcHMiLCBmaWx0ZXJDYXBzLmdldCgpLCBudWxscHRyKTsKKworICAg
ICAgICBzdHJlYW0tPnBhcnNlciA9IGdzdF9iaW5fbmV3KHBhcnNlckJpbk5hbWUuZ2V0KCkpOwor
ICAgICAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4oc3RyZWFtLT5wYXJzZXIpLCBwYXJzZXIs
IGNhcHNmaWx0ZXIsIG51bGxwdHIpOworICAgICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHMocGFy
c2VyLCAic3JjIiwgY2Fwc2ZpbHRlciwgInNpbmsiKTsKKworICAgICAgICBwYWQgPSBnc3RfZWxl
bWVudF9nZXRfc3RhdGljX3BhZChwYXJzZXIsICJzaW5rIik7CisgICAgICAgIGdzdF9lbGVtZW50
X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgcGFkKSk7
CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocGFkKTsKKworICAgICAgICBwYWQgPSBnc3RfZWxl
bWVudF9nZXRfc3RhdGljX3BhZChjYXBzZmlsdGVyLCAic3JjIik7CisgICAgICAgIGdzdF9lbGVt
ZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3KCJzcmMiLCBwYWQp
KTsKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwYWQpOworICAgIH0gZWxzZSBpZiAoIWdfc3Ry
Y21wMChtZWRpYVR5cGUsICJ2aWRlby94LWgyNjUiKSkgeworICAgICAgICBHc3RFbGVtZW50KiBw
YXJzZXI7CisgICAgICAgIEdzdEVsZW1lbnQqIGNhcHNmaWx0ZXI7CisgICAgICAgIEdzdFBhZCog
cGFkID0gbnVsbHB0cjsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBmaWx0ZXJDYXBzID0gYWRv
cHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtaDI2NSIsICJhbGlnbm1lbnQiLCBH
X1RZUEVfU1RSSU5HLCAiYXUiLCBudWxscHRyKSk7CisKKyAgICAgICAgcGFyc2VyID0gZ3N0X2Vs
ZW1lbnRfZmFjdG9yeV9tYWtlKCJoMjY1cGFyc2UiLCBudWxscHRyKTsKKyAgICAgICAgY2Fwc2Zp
bHRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiY2Fwc2ZpbHRlciIsIG51bGxwdHIpOwor
ICAgICAgICBnX29iamVjdF9zZXQoY2Fwc2ZpbHRlciwgImNhcHMiLCBmaWx0ZXJDYXBzLmdldCgp
LCBudWxscHRyKTsKKworICAgICAgICBzdHJlYW0tPnBhcnNlciA9IGdzdF9iaW5fbmV3KHBhcnNl
ckJpbk5hbWUuZ2V0KCkpOworICAgICAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4oc3RyZWFt
LT5wYXJzZXIpLCBwYXJzZXIsIGNhcHNmaWx0ZXIsIG51bGxwdHIpOworICAgICAgICBnc3RfZWxl
bWVudF9saW5rX3BhZHMocGFyc2VyLCAic3JjIiwgY2Fwc2ZpbHRlciwgInNpbmsiKTsKKworICAg
ICAgICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChwYXJzZXIsICJzaW5rIik7Cisg
ICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRf
bmV3KCJzaW5rIiwgcGFkKSk7CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocGFkKTsKKworICAg
ICAgICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChjYXBzZmlsdGVyLCAic3JjIik7
CisgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9w
YWRfbmV3KCJzcmMiLCBwYWQpKTsKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwYWQpOworICAg
IH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZWRpYVR5cGUsICJhdWRpby9tcGVnIikpIHsKKyAgICAg
ICAgZ2ludCBtcGVndmVyc2lvbiA9IC0xOworICAgICAgICBHc3RFbGVtZW50KiBwYXJzZXI7Cisg
ICAgICAgIEdzdFBhZCogcGFkID0gbnVsbHB0cjsKKworICAgICAgICBnc3Rfc3RydWN0dXJlX2dl
dF9pbnQoc3RydWN0dXJlLCAibXBlZ3ZlcnNpb24iLCAmbXBlZ3ZlcnNpb24pOworICAgICAgICBp
ZiAobXBlZ3ZlcnNpb24gPT0gMSkgeworICAgICAgICAgICAgcGFyc2VyID0gZ3N0X2VsZW1lbnRf
ZmFjdG9yeV9tYWtlKCJtcGVnYXVkaW9wYXJzZSIsIG51bGxwdHIpOworICAgICAgICB9IGVsc2Ug
aWYgKG1wZWd2ZXJzaW9uID09IDIgfHwgbXBlZ3ZlcnNpb24gPT0gNCkKKyAgICAgICAgICAgIHBh
cnNlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYWFjcGFyc2UiLCBudWxscHRyKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAg
c3RyZWFtLT5wYXJzZXIgPSBnc3RfYmluX25ldyhwYXJzZXJCaW5OYW1lLmdldCgpKTsKKyAgICAg
ICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTihzdHJlYW0tPnBhcnNlciksIHBhcnNlcik7CisKKyAgICAg
ICAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocGFyc2VyLCAic2luayIpOworICAg
ICAgICBnc3RfZWxlbWVudF9hZGRfcGFkKHN0cmVhbS0+cGFyc2VyLCBnc3RfZ2hvc3RfcGFkX25l
dygic2luayIsIHBhZCkpOworICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHBhZCk7CisKKyAgICAg
ICAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocGFyc2VyLCAic3JjIik7CisgICAg
ICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3
KCJzcmMiLCBwYWQpKTsKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwYWQpOworICAgIH0gZWxz
ZSBpZiAoIWdfc3RyY21wMChtZWRpYVR5cGUsICJ2aWRlby94LXZwOSIpKQorICAgICAgICBzdHJl
YW0tPnBhcnNlciA9IG51bGxwdHI7CisgICAgZWxzZSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1Qoc3RyZWFtLT5wYXJlbnQsICJVbnN1cHBvcnRlZCBtZWRpYSBmb3JtYXQ6ICVzIiwgbWVkaWFU
eXBlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJL
aXRNZWRpYVNyYyk7CisgICAgc3RyZWFtLT50eXBlID0gVW5rbm93bjsKKyAgICBHU1RfT0JKRUNU
X1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBHUmVmUHRyPEdzdFBhZD4gc291cmNlUGFk
OworICAgIGlmIChzdHJlYW0tPnBhcnNlcikgeworICAgICAgICBnc3RfYmluX2FkZChHU1RfQklO
KHN0cmVhbS0+cGFyZW50KSwgc3RyZWFtLT5wYXJzZXIpOworICAgICAgICBnc3RfZWxlbWVudF9z
eW5jX3N0YXRlX3dpdGhfcGFyZW50KHN0cmVhbS0+cGFyc2VyKTsKKworICAgICAgICBHUmVmUHRy
PEdzdFBhZD4gc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChz
dHJlYW0tPnBhcnNlciwgInNpbmsiKSk7CisgICAgICAgIHNvdXJjZVBhZCA9IGFkb3B0R1JlZihn
c3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChzdHJlYW0tPmFwcHNyYywgInNyYyIpKTsKKyAgICAg
ICAgZ3N0X3BhZF9saW5rKHNvdXJjZVBhZC5nZXQoKSwgc2lua1BhZC5nZXQoKSk7CisgICAgICAg
IHNvdXJjZVBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChzdHJlYW0t
PnBhcnNlciwgInNyYyIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksICJTdHJlYW0gb2YgdHlwZSAlcyBkb2Vzbid0IHJlcXVp
cmUgYSBwYXJzZXIgYmluIiwgbWVkaWFUeXBlKTsKKyAgICAgICAgc291cmNlUGFkID0gYWRvcHRH
UmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHN0cmVhbS0+YXBwc3JjLCAic3JjIikpOwor
ICAgIH0KKyAgICBBU1NFUlQoc291cmNlUGFkKTsKKworICAgIC8vIEZJWE1FOiBJcyBwYWRJZCB0
aGUgYmVzdCB3YXkgdG8gaWRlbnRpZnkgdGhlIFN0cmVhbT8gV2hhdCBhYm91dCB0cmFja0lkPwor
ICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHNvdXJjZVBhZC5nZXQoKSksICJwYWRJZCIs
IEdJTlRfVE9fUE9JTlRFUihwYWRJZCkpOworICAgIHdlYktpdE1lZGlhU3JjTGlua1BhcnNlcihz
b3VyY2VQYWQuZ2V0KCksIGNhcHMsIHN0cmVhbSk7CisKKyAgICBBU1NFUlQoc3RyZWFtLT5wYXJl
bnQtPnByaXYtPm1lZGlhUGxheWVyUHJpdmF0ZSk7CisgICAgaW50IHNpZ25hbCA9IC0xOworICAg
IGlmIChnX3N0cl9oYXNfcHJlZml4KG1lZGlhVHlwZSwgImF1ZGlvIikpIHsKKyAgICAgICAgR1NU
X09CSkVDVF9MT0NLKHdlYktpdE1lZGlhU3JjKTsKKyAgICAgICAgc3RyZWFtLT50eXBlID0gQXVk
aW87CisgICAgICAgIHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1iZXJPZkF1ZGlvU3RyZWFtcysr
OworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisgICAgICAgIHNp
Z25hbCA9IFNJR05BTF9BVURJT19DSEFOR0VEOworCisgICAgICAgIHN0cmVhbS0+YXVkaW9UcmFj
ayA9IFJlZlB0cjxXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4oc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqPih0cmFja1ByaXZhdGUuZ2V0
KCkpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2hhc19wcmVmaXgobWVkaWFUeXBlLCAidmlkZW8i
KSkgeworICAgICAgICBHU1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVkaWFTcmMpOworICAgICAgICBz
dHJlYW0tPnR5cGUgPSBWaWRlbzsKKyAgICAgICAgc3RyZWFtLT5wYXJlbnQtPnByaXYtPm51bWJl
ck9mVmlkZW9TdHJlYW1zKys7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlh
U3JjKTsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX1ZJREVPX0NIQU5HRUQ7CisKKyAgICAgICAg
c3RyZWFtLT52aWRlb1RyYWNrID0gUmVmUHRyPFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0
cmVhbWVyPihzdGF0aWNfY2FzdDxXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcio+
KHRyYWNrUHJpdmF0ZS5nZXQoKSkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeCht
ZWRpYVR5cGUsICJ0ZXh0IikpIHsKKyAgICAgICAgR1NUX09CSkVDVF9MT0NLKHdlYktpdE1lZGlh
U3JjKTsKKyAgICAgICAgc3RyZWFtLT50eXBlID0gVGV4dDsKKyAgICAgICAgc3RyZWFtLT5wYXJl
bnQtPnByaXYtPm51bWJlck9mVGV4dFN0cmVhbXMrKzsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxP
Q0sod2ViS2l0TWVkaWFTcmMpOworICAgICAgICBzaWduYWwgPSBTSUdOQUxfVEVYVF9DSEFOR0VE
OworCisgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IHRleHQgdHJhY2tzLgorICAgIH0KKworICAg
IGlmIChzaWduYWwgIT0gLTEpCisgICAgICAgIGdfc2lnbmFsX2VtaXQoR19PQkpFQ1Qoc3RyZWFt
LT5wYXJlbnQpLCB3ZWJLaXRNZWRpYVNyY1NpZ25hbHNbc2lnbmFsXSwgMCwgbnVsbHB0cik7Cit9
CisKK3ZvaWQgUGxheWJhY2tQaXBlbGluZTo6cmVhdHRhY2hUcmFjayhSZWZQdHI8U291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZSwgUmVmUHRyPFRyYWNrUHJp
dmF0ZUJhc2U+IHRyYWNrUHJpdmF0ZSkKK3sKKyAgICBHU1RfREVCVUcoIlJlLWF0dGFjaGluZyB0
cmFjayIpOworCisgICAgLy8gRklYTUU6IE1heWJlIHJlbW92ZSB0aGlzIG1ldGhvZC4gTm93IHRo
ZSBjYXBzIGNoYW5nZSBpcyBtYW5hZ2VkIGJ5IGdzdF9hcHBzcmNfcHVzaF9zYW1wbGUoKSBpbiBl
bnF1ZXVlU2FtcGxlKCkKKyAgICAvLyBhbmQgZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1Nh
bXBsZXMoKS4KKworICAgIFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYyA9IG1fd2ViS2l0
TWVkaWFTcmMuZ2V0KCk7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVkaWFTcmMpOwor
ICAgIFN0cmVhbSogc3RyZWFtID0gZ2V0U3RyZWFtQnlTb3VyY2VCdWZmZXJQcml2YXRlKHdlYktp
dE1lZGlhU3JjLCBzb3VyY2VCdWZmZXJQcml2YXRlLmdldCgpKTsKKyAgICBHU1RfT0JKRUNUX1VO
TE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBBU1NFUlQoc3RyZWFtKTsKKyAgICBBU1NFUlQo
c3RyZWFtLT50eXBlICE9IEludmFsaWQpOworCisgICAgR1JlZlB0cjxHc3RDYXBzPiBvbGRBcHBz
cmNDYXBzID0gYWRvcHRHUmVmKGdzdF9hcHBfc3JjX2dldF9jYXBzKEdTVF9BUFBfU1JDKHN0cmVh
bS0+YXBwc3JjKSkpOworICAgIC8vIE5vdyB0aGUgY2FwcyBjaGFuZ2UgaXMgbWFuYWdlZCBieSBn
c3RfYXBwc3JjX3B1c2hfc2FtcGxlKCkgaW4gZW5xdWV1ZVNhbXBsZSgpIGFuZAorICAgIC8vIGZs
dXNoQW5kRW5xdWV1ZU5vbkRpc3BsYXlpbmdTYW1wbGVzKCkuCisgICAgLy8gZ3N0X2FwcF9zcmNf
c2V0X2NhcHMoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpLCBjYXBzKTsKKyAgICBHUmVmUHRy
PEdzdENhcHM+IGFwcHNyY0NhcHMgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zcmNfZ2V0X2NhcHMoR1NU
X0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpKSk7CisgICAgY29uc3QgZ2NoYXIqIG1lZGlhVHlwZSA9
IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShhcHBzcmNDYXBz
LmdldCgpLCAwKSk7CisKKyAgICBpZiAoIWdzdF9jYXBzX2lzX2VxdWFsKG9sZEFwcHNyY0NhcHMu
Z2V0KCksIGFwcHNyY0NhcHMuZ2V0KCkpKSB7CisgICAgICAgIEdTVF9ERUJVRygiQ2FwcyBoYXZl
IGNoYW5nZWQsIGJ1dCByZWNvbnN0cnVjdGluZyB0aGUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgaXMg
bm90IHN1cHBvcnRlZCB5ZXQiKTsKKworI2lmICghKExPR19ESVNBQkxFRCB8fCBHU1RfRElTQUJM
RV9HU1RfREVCVUcpKQorICAgICAgICBnY2hhciogc3Ryb2xkY2FwcyA9IGdzdF9jYXBzX3RvX3N0
cmluZyhvbGRBcHBzcmNDYXBzLmdldCgpKTsKKyAgICAgICAgZ2NoYXIqIHN0cm5ld2NhcHMgPSBn
c3RfY2Fwc190b19zdHJpbmcoYXBwc3JjQ2Fwcy5nZXQoKSk7CisgICAgICAgIEdTVF9ERUJVRygi
b2xkY2FwczogJXMiLCBzdHJvbGRjYXBzKTsKKyAgICAgICAgR1NUX0RFQlVHKCJuZXdjYXBzOiAl
cyIsIHN0cm5ld2NhcHMpOworICAgICAgICBnX2ZyZWUoc3Ryb2xkY2Fwcyk7CisgICAgICAgIGdf
ZnJlZShzdHJuZXdjYXBzKTsKKyNlbmRpZgorICAgIH0KKworICAgIGludCBzaWduYWwgPSAtMTsK
KworICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisgICAgaWYgKGdfc3RyX2hh
c19wcmVmaXgobWVkaWFUeXBlLCAiYXVkaW8iKSkgeworICAgICAgICBBU1NFUlQoc3RyZWFtLT50
eXBlID09IEF1ZGlvKTsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX0FVRElPX0NIQU5HRUQ7Cisg
ICAgICAgIHN0cmVhbS0+YXVkaW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpBdWRpb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXIqPih0cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2hhc19w
cmVmaXgobWVkaWFUeXBlLCAidmlkZW8iKSkgeworICAgICAgICBBU1NFUlQoc3RyZWFtLT50eXBl
ID09IFZpZGVvKTsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX1ZJREVPX0NIQU5HRUQ7CisgICAg
ICAgIHN0cmVhbS0+dmlkZW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFt
ZXIqPih0cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2hhc19wcmVm
aXgobWVkaWFUeXBlLCAidGV4dCIpKSB7CisgICAgICAgIEFTU0VSVChzdHJlYW0tPnR5cGUgPT0g
VGV4dCk7CisgICAgICAgIHNpZ25hbCA9IFNJR05BTF9URVhUX0NIQU5HRUQ7CisKKyAgICAgICAg
Ly8gRklYTUU6IFN1cHBvcnQgdGV4dCB0cmFja3MuCisgICAgfQorICAgIEdTVF9PQkpFQ1RfVU5M
T0NLKHdlYktpdE1lZGlhU3JjKTsKKworICAgIGlmIChzaWduYWwgIT0gLTEpCisgICAgICAgIGdf
c2lnbmFsX2VtaXQoR19PQkpFQ1Qoc3RyZWFtLT5wYXJlbnQpLCB3ZWJLaXRNZWRpYVNyY1NpZ25h
bHNbc2lnbmFsXSwgMCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgUGxheWJhY2tQaXBlbGluZTo6bm90
aWZ5RHVyYXRpb25DaGFuZ2VkKCkKK3sKKyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NU
X0VMRU1FTlQobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSksIGdzdF9tZXNzYWdlX25ld19kdXJhdGlv
bl9jaGFuZ2VkKEdTVF9PQkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSkpKTsKKyAgICAvLyBX
ZWJLaXRNZWRpYVNyYyB3aWxsIGFzayBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UgZm9y
IHRoZSBuZXcgZHVyYXRpb24gbGF0ZXIsIHdoZW4gc29tZWJvZHkgYXNrcyBmb3IgaXQuCit9CisK
K3ZvaWQgUGxheWJhY2tQaXBlbGluZTo6bWFya0VuZE9mU3RyZWFtKE1lZGlhU291cmNlUHJpdmF0
ZTo6RW5kT2ZTdHJlYW1TdGF0dXMpCit7CisgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2
ID0gbV93ZWJLaXRNZWRpYVNyYy0+cHJpdjsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV93ZWJL
aXRNZWRpYVNyYy5nZXQoKSwgIkhhdmUgRU9TIik7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93
ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgYm9vbCBhbGxUcmFja3NDb25maWd1cmVkID0gcHJp
di0+YWxsVHJhY2tzQ29uZmlndXJlZDsKKyAgICBpZiAoIWFsbFRyYWNrc0NvbmZpZ3VyZWQpCisg
ICAgICAgIHByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQgPSB0cnVlOworICAgIEdTVF9PQkpFQ1Rf
VU5MT0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpOworCisgICAgaWYgKCFhbGxUcmFja3NDb25m
aWd1cmVkKSB7CisgICAgICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyhHU1RfRUxFTUVOVCht
X3dlYktpdE1lZGlhU3JjLmdldCgpKSk7CisgICAgICAgIHdlYktpdE1lZGlhU3JjRG9Bc3luY0Rv
bmUobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgfQorCisgICAgVmVjdG9yPEdzdEFwcFNy
Yyo+IGFwcHNyY3M7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQo
KSk7CisgICAgZm9yIChTdHJlYW0qIHN0cmVhbSA6IHByaXYtPnN0cmVhbXMpIHsKKyAgICAgICAg
aWYgKHN0cmVhbS0+YXBwc3JjKQorICAgICAgICAgICAgYXBwc3Jjcy5hcHBlbmQoR1NUX0FQUF9T
UkMoc3RyZWFtLT5hcHBzcmMpKTsKKyAgICB9CisgICAgR1NUX09CSkVDVF9VTkxPQ0sobV93ZWJL
aXRNZWRpYVNyYy5nZXQoKSk7CisKKyAgICBmb3IgKFZlY3RvcjxHc3RBcHBTcmMqPjo6aXRlcmF0
b3IgaXRlcmF0b3IgPSBhcHBzcmNzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGFwcHNyY3MuZW5kKCk7
ICsraXRlcmF0b3IpCisgICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0oKml0ZXJhdG9y
KTsKK30KKwordm9pZCBQbGF5YmFja1BpcGVsaW5lOjpmbHVzaEFuZEVucXVldWVOb25EaXNwbGF5
aW5nU2FtcGxlcyhWZWN0b3I8UmVmUHRyPE1lZGlhU2FtcGxlPj4gc2FtcGxlcykKK3sKKyAgICBB
U1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIXNhbXBsZXMuc2l6ZSgpKSB7
CisgICAgICAgIEdTVF9ERUJVRygiTm8gc2FtcGxlcywgdHJhY2tJZCB1bmtub3duIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBdG9taWNTdHJpbmcgdHJhY2tJZCA9IHNhbXBsZXNb
MF0tPnRyYWNrSUQoKTsKKyAgICBHU1RfREVCVUcoImZsdXNoQW5kRW5xdWV1ZU5vbkRpc3BsYXlp
bmdTYW1wbGVzOiB0cmFja0lkPSVzIFBUU1swXT0lZiAuLi4gUFRTW25dPSVmIiwgdHJhY2tJZC5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzYW1wbGVzWzBdLT5wcmVzZW50YXRpb25UaW1lKCkudG9G
bG9hdCgpLCBzYW1wbGVzW3NhbXBsZXMuc2l6ZSgpLTFdLT5wcmVzZW50YXRpb25UaW1lKCkudG9G
bG9hdCgpKTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSwg
IkZsdXNoaW5nIGFuZCByZS1lbnF1ZWluZyAlenUgc2FtcGxlcyBmb3Igc3RyZWFtICVzIiwgc2Ft
cGxlcy5zaXplKCksIHRyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBHU1Rf
T0JKRUNUX0xPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgU3RyZWFtKiBzdHJlYW0g
PSBnZXRTdHJlYW1CeVRyYWNrSWQobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSwgdHJhY2tJZCk7CisK
KyAgICBpZiAoIXN0cmVhbSkgeworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3dlYktpdE1l
ZGlhU3JjLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3RyZWFt
LT5zb3VyY2VCdWZmZXItPmlzUmVhZHlGb3JNb3JlU2FtcGxlcyh0cmFja0lkKSkgeworICAgICAg
ICBHU1RfREVCVUcoImZsdXNoQW5kRW5xdWV1ZU5vbkRpc3BsYXlpbmdTYW1wbGVzOiBza2lwIGFk
ZGluZyBuZXcgc2FtcGxlIGZvciB0cmFja0lkPSVzLCBTQiBpcyBub3QgcmVhZHkgeWV0IiwgdHJh
Y2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0so
bV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBH
c3RFbGVtZW50KiBhcHBzcmMgPSBzdHJlYW0tPmFwcHNyYzsKKyAgICBNZWRpYVRpbWUgbGFzdEVu
cXVldWVkVGltZSA9IHN0cmVhbS0+bGFzdEVucXVldWVkVGltZTsKKyAgICBHU1RfT0JKRUNUX1VO
TE9DSyhtX3dlYktpdE1lZGlhU3JjLmdldCgpKTsKKworICAgIGlmICghbV93ZWJLaXRNZWRpYVNy
Yy0+cHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlLT5zZWVraW5nKCkpCisgICAgICAgIEdTVF9ERUJV
RygiZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXM6IHRyYWNrSWQ9JXMgcGlwZWxp
bmUgbmVlZHMgZmx1c2hpbmcuIiwgdHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKwor
ICAgIGZvciAoVmVjdG9yPFJlZlB0cjxNZWRpYVNhbXBsZT4+OjppdGVyYXRvciBpdGVyYXRvciA9
IHNhbXBsZXMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gc2FtcGxlcy5lbmQoKTsgKytpdGVyYXRvcikg
eworICAgICAgICBHU3RyZWFtZXJNZWRpYVNhbXBsZSogc2FtcGxlID0gc3RhdGljX2Nhc3Q8R1N0
cmVhbWVyTWVkaWFTYW1wbGUqPihpdGVyYXRvci0+Z2V0KCkpOworICAgICAgICBHc3RCdWZmZXIq
IGJ1ZmZlciA9IG51bGxwdHI7CisgICAgICAgIGlmIChzYW1wbGUtPnNhbXBsZSgpKQorICAgICAg
ICAgICAgYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKHNhbXBsZS0+c2FtcGxlKCkpOwor
ICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICBHc3RTYW1wbGUqIGdzdFNhbXBsZSA9
IGdzdF9zYW1wbGVfcmVmKHNhbXBsZS0+c2FtcGxlKCkpOworICAgICAgICAgICAgbGFzdEVucXVl
dWVkVGltZSA9IHNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpOworCisgICAgICAgICAgICBHU1Rf
QlVGRkVSX0ZMQUdfU0VUKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RFQ09ERV9PTkxZKTsKKyAg
ICAgICAgICAgIHB1c2hTYW1wbGUoR1NUX0FQUF9TUkMoYXBwc3JjKSwgZ3N0U2FtcGxlKTsKKyAg
ICAgICAgICAgIC8vIGdzdF9hcHBfc3JjX3B1c2hfc2FtcGxlKCkgdXNlcyB0cmFuc2Zlci1ub25l
IGZvciBnc3RTYW1wbGUuCisKKyAgICAgICAgICAgIGdzdF9zYW1wbGVfdW5yZWYoZ3N0U2FtcGxl
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJLaXRNZWRpYVNy
Yy5nZXQoKSk7CisgICAgc3RyZWFtLT5sYXN0RW5xdWV1ZWRUaW1lID0gbGFzdEVucXVldWVkVGlt
ZTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3dlYktpdE1lZGlhU3JjLmdldCgpKTsKK30KKwor
dm9pZCBQbGF5YmFja1BpcGVsaW5lOjplbnF1ZXVlU2FtcGxlKFBhc3NSZWZQdHI8TWVkaWFTYW1w
bGU+IHByU2FtcGxlKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAg
IFJlZlB0cjxNZWRpYVNhbXBsZT4gcHJvdGVjdGVkUHJTYW1wbGUgPSBwclNhbXBsZTsKKyAgICBB
dG9taWNTdHJpbmcgdHJhY2tJZCA9IHByb3RlY3RlZFByU2FtcGxlLT50cmFja0lEKCk7CisKKyAg
ICBHU1RfVFJBQ0UoImVucXVlaW5nIHNhbXBsZSB0cmFja0lkPSVzIFBUUz0lZiBwcmVzZW50YXRp
b25TaXplPSUuMGZ4JS4wZiBhdCAlIiBHU1RfVElNRV9GT1JNQVQgIiBkdXJhdGlvbjogJSIgR1NU
X1RJTUVfRk9STUFULCB0cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHByb3RlY3RlZFBy
U2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkudG9GbG9hdCgpLCBwcm90ZWN0ZWRQclNhbXBsZS0+
cHJlc2VudGF0aW9uU2l6ZSgpLndpZHRoKCksIHByb3RlY3RlZFByU2FtcGxlLT5wcmVzZW50YXRp
b25TaXplKCkuaGVpZ2h0KCksIEdTVF9USU1FX0FSR1MoV2ViQ29yZTo6dG9Hc3RDbG9ja1RpbWUo
cHJvdGVjdGVkUHJTYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKS50b0RvdWJsZSgpKSksIEdTVF9U
SU1FX0FSR1MoV2ViQ29yZTo6dG9Hc3RDbG9ja1RpbWUocHJvdGVjdGVkUHJTYW1wbGUtPmR1cmF0
aW9uKCkudG9Eb3VibGUoKSkpKTsKKworICAgIFN0cmVhbSogc3RyZWFtID0gZ2V0U3RyZWFtQnlU
cmFja0lkKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksIHRyYWNrSWQpOworCisgICAgaWYgKCFzdHJl
YW0pIHsKKyAgICAgICAgR1NUX1dBUk5JTkcoIk5vIHN0cmVhbSEiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghc3RyZWFtLT5zb3VyY2VCdWZmZXItPmlzUmVhZHlGb3JNb3Jl
U2FtcGxlcyh0cmFja0lkKSkgeworICAgICAgICBHU1RfREVCVUcoImVucXVldWVTYW1wbGU6IHNr
aXAgYWRkaW5nIG5ldyBzYW1wbGUgZm9yIHRyYWNrSWQ9JXMsIFNCIGlzIG5vdCByZWFkeSB5ZXQi
LCB0cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgR3N0RWxlbWVudCogYXBwc3JjID0gc3RyZWFtLT5hcHBzcmM7CisgICAgTWVkaWFU
aW1lIGxhc3RFbnF1ZXVlZFRpbWUgPSBzdHJlYW0tPmxhc3RFbnF1ZXVlZFRpbWU7CisKKyAgICBH
U3RyZWFtZXJNZWRpYVNhbXBsZSogc2FtcGxlID0gc3RhdGljX2Nhc3Q8R1N0cmVhbWVyTWVkaWFT
YW1wbGUqPihwcm90ZWN0ZWRQclNhbXBsZS5nZXQoKSk7CisgICAgaWYgKHNhbXBsZS0+c2FtcGxl
KCkgJiYgZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKHNhbXBsZS0+c2FtcGxlKCkpKSB7CisgICAgICAg
IEdzdFNhbXBsZSogZ3N0U2FtcGxlID0gZ3N0X3NhbXBsZV9yZWYoc2FtcGxlLT5zYW1wbGUoKSk7
CisgICAgICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKGdzdFNh
bXBsZSk7CisgICAgICAgIGxhc3RFbnF1ZXVlZFRpbWUgPSBzYW1wbGUtPnByZXNlbnRhdGlvblRp
bWUoKTsKKworICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQoYnVmZmVyLCBHU1RfQlVGRkVS
X0ZMQUdfREVDT0RFX09OTFkpOworICAgICAgICBwdXNoU2FtcGxlKEdTVF9BUFBfU1JDKGFwcHNy
YyksIGdzdFNhbXBsZSk7CisgICAgICAgIC8vIGdzdF9hcHBfc3JjX3B1c2hfc2FtcGxlKCkgdXNl
cyB0cmFuc2Zlci1ub25lIGZvciBnc3RTYW1wbGUuCisKKyAgICAgICAgZ3N0X3NhbXBsZV91bnJl
Zihnc3RTYW1wbGUpOworCisgICAgICAgIHN0cmVhbS0+bGFzdEVucXVldWVkVGltZSA9IGxhc3RF
bnF1ZXVlZFRpbWU7CisgICAgfQorfQorCitHc3RFbGVtZW50KiBQbGF5YmFja1BpcGVsaW5lOjpw
aXBlbGluZSgpCit7CisgICAgaWYgKCFtX3dlYktpdE1lZGlhU3JjIHx8ICFHU1RfRUxFTUVOVF9Q
QVJFTlQoR1NUX0VMRU1FTlQobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSkpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBHU1RfRUxFTUVOVF9QQVJFTlQoR1NUX0VMRU1FTlRf
UEFSRU5UKEdTVF9FTEVNRU5UKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUuCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFj
a1BpcGVsaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL1BsYXliYWNrUGlwZWxpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZTBlMTI4MWI5ZjQzOGVkZjk3Yzc5
OGFhM2ZkNjk1MzUxMzc0OTlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmgKQEAgLTAsMCAr
MSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFBsYXliYWNrUGlwZWxp
bmVfaAorI2RlZmluZSBQbGF5YmFja1BpcGVsaW5lX2gKKworI2lmIEVOQUJMRShWSURFTykgJiYg
VVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKworLy8gUGxheWJhY2tQaXBl
bGluZSBpcyAoc29ydCBvZikgYSBmcmllbmQgY2xhc3Mgb2YgV2ViS2l0TWVkaWFTb3VyY2VHU3Ry
ZWFtZXIuCisKKyNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1
ZGUgIldlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8Z3N0
L2dzdC5oPgorCisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9nbGli
L0dSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0ZTw+IEdSZWZQdHI8V2ViS2l0
TWVkaWFTcmM+IGFkb3B0R1JlZihXZWJLaXRNZWRpYVNyYyopOwordGVtcGxhdGU8PiBXZWJLaXRN
ZWRpYVNyYyogcmVmR1B0cjxXZWJLaXRNZWRpYVNyYz4oV2ViS2l0TWVkaWFTcmMqKTsKK3RlbXBs
YXRlPD4gdm9pZCBkZXJlZkdQdHI8V2ViS2l0TWVkaWFTcmM+KFdlYktpdE1lZGlhU3JjKik7Cit9
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRlbnRUeXBlOworY2xhc3MgU291
cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjsKK2NsYXNzIE1lZGlhU291cmNlR1N0cmVhbWVyOwor
CitjbGFzcyBQbGF5YmFja1BpcGVsaW5lOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1BpcGVs
aW5lPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGxheWJhY2tQaXBlbGluZT4g
Y3JlYXRlKCk7CisgICAgdmlydHVhbCB+UGxheWJhY2tQaXBlbGluZSgpOworCisgICAgdm9pZCBz
ZXRXZWJLaXRNZWRpYVNyYyhXZWJLaXRNZWRpYVNyYyopOworICAgIFdlYktpdE1lZGlhU3JjKiB3
ZWJLaXRNZWRpYVNyYygpOworCisgICAgTWVkaWFTb3VyY2VQcml2YXRlOjpBZGRTdGF0dXMgYWRk
U291cmNlQnVmZmVyKFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPik7CisgICAg
dm9pZCByZW1vdmVTb3VyY2VCdWZmZXIoUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXI+KTsKKyAgICB2b2lkIGF0dGFjaFRyYWNrKFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0
cmVhbWVyPiwgUmVmUHRyPFRyYWNrUHJpdmF0ZUJhc2U+LCBHc3RTdHJ1Y3R1cmUqLCBHc3RDYXBz
Kik7CisgICAgdm9pZCByZWF0dGFjaFRyYWNrKFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0
cmVhbWVyPiwgUmVmUHRyPFRyYWNrUHJpdmF0ZUJhc2U+KTsKKyAgICB2b2lkIG5vdGlmeUR1cmF0
aW9uQ2hhbmdlZCgpOworCisgICAgLy8gRnJvbSBNZWRpYVNvdXJjZUdTdHJlYW1lcgorICAgIHZv
aWQgbWFya0VuZE9mU3RyZWFtKE1lZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMp
OworCisgICAgLy8gRnJvbSBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyCisgICAgdm9pZCBm
bHVzaEFuZEVucXVldWVOb25EaXNwbGF5aW5nU2FtcGxlcyhWZWN0b3I8UmVmUHRyPE1lZGlhU2Ft
cGxlPj4pOworICAgIHZvaWQgZW5xdWV1ZVNhbXBsZShQYXNzUmVmUHRyPE1lZGlhU2FtcGxlPik7
CisKKyAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpOworcHJpdmF0ZToKKyAgICBQbGF5YmFja1Bp
cGVsaW5lKCk7CisgICAgR1JlZlB0cjxXZWJLaXRNZWRpYVNyYz4gbV93ZWJLaXRNZWRpYVNyYzsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUuCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVS
KQorI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291764</attachid>
            <date>2016-10-16 12:07:19 -0700</date>
            <delta_ts>2016-10-21 14:27:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162901-20161016190346.patch</filename>
            <type>text/plain</type>
            <size>26656</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3MzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGI0NDAyMTVhODg3ODE2
MTdhZTMzNzhlMTkyYTk4MGJmMTBjOTg3Ny4uN2QwYTFjZjY3NmQ3NmUxNjI3MzM2ODFlMzAxMDBj
YmNlMWFjNTc1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM1IEBACiAyMDE2LTEwLTA0ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXSBQbGF5YmFjayBwaXBlbGluZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5jYXBzdWxhdGUgdGhlIHJlc3BvbnNpYmlsaXR5IHRv
IGludGVyYWN0IHdpdGggdGhlIEdTdHJlYW1lciBwbGF5YmFjayBwaXBlbGluZSBhbmQgdGhlCisg
ICAgICAgIGRpZmZlcmVudCBzdHJlYW1zIG1hbmFnZWQgYnkgdGhlIFdlYktpdE1lZGlhU3JjIGVs
ZW1lbnQgaW50byBhIG5ldyBQbGF5YmFja1BpcGVsaW5lIGNsYXNzLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNwcDogQWRkZWQu
CisgICAgICAgIChnZXRTdHJlYW1CeVRyYWNrSWQpOgorICAgICAgICAoZ2V0U3RyZWFtQnlTb3Vy
Y2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKHB1c2hTYW1wbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxheWJhY2tQaXBlbGluZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNr
UGlwZWxpbmU6OlBsYXliYWNrUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQ
aXBlbGluZTo6flBsYXliYWNrUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQ
aXBlbGluZTo6c2V0V2ViS2l0TWVkaWFTcmMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQ
aXBlbGluZTo6d2ViS2l0TWVkaWFTcmMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQaXBl
bGluZTo6YWRkU291cmNlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrUGlwZWxp
bmU6OnJlbW92ZVNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1BpcGVs
aW5lOjphdHRhY2hUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1BpcGVsaW5lOjpy
ZWF0dGFjaFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrUGlwZWxpbmU6Om5vdGlm
eUR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1BpcGVsaW5lOjpt
YXJrRW5kT2ZTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQaXBlbGluZTo6Zmx1
c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tQaXBlbGluZTo6ZW5xdWV1ZVNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFj
a1BpcGVsaW5lOjpwaXBlbGluZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmg6IEFkZGVkLgorCisyMDE2LTEwLTA0ICBFbnJpcXVl
IE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dTdHJl
YW1lcl1bTVNFXVtFTUVdIE1TRSBzcGVjaWFsaXphdGlvbiBvZiBNZWRpYSBQbGF5ZXIgUHJpdmF0
ZSBmb3IgR1N0cmVhbWVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI5MDAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzhhYTAwZTJlZGFlZTMyYzM0YzJlOTE1NGVlMDExM2IwODFkNzk1OQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvUGxheWJhY2tQaXBlbGluZS5jcHAKQEAgLTAsMCArMSw1MTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQsIDIwMTUgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFy
LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICog
Q29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUGxheWJhY2tQaXBlbGluZS5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVB
TUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKQorCisjaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZh
dGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYVNhbXBsZS5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxlLmgiCisjaW5j
bHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlZpZGVvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgor
I2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR011dGV4TG9ja2VyLmg+
CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlx
dWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworc3RhdGljIFN0
cmVhbSogZ2V0U3RyZWFtQnlUcmFja0lkKFdlYktpdE1lZGlhU3JjKiwgQXRvbWljU3RyaW5nKTsK
K3N0YXRpYyBTdHJlYW0qIGdldFN0cmVhbUJ5U291cmNlQnVmZmVyUHJpdmF0ZShXZWJLaXRNZWRp
YVNyYyosIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIqKTsKKworc3RhdGlj
IFN0cmVhbSogZ2V0U3RyZWFtQnlUcmFja0lkKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIEF0b21p
Y1N0cmluZyB0cmFja0lkU3RyaW5nKQoreworICAgIC8vIFdlYktpdE1lZGlhU3JjIHNob3VsZCBi
ZSBsb2NrZWQgYXQgdGhpcyBwb2ludC4KKyAgICBmb3IgKFN0cmVhbSogc3RyZWFtIDogc291cmNl
LT5wcml2LT5zdHJlYW1zKSB7CisgICAgICAgIGlmIChzdHJlYW0tPnR5cGUgIT0gV2ViQ29yZTo6
SW52YWxpZAorICAgICAgICAgICAgJiYgKChzdHJlYW0tPmF1ZGlvVHJhY2sgJiYgc3RyZWFtLT5h
dWRpb1RyYWNrLT5pZCgpID09IHRyYWNrSWRTdHJpbmcpCisgICAgICAgICAgICAgICAgfHwgKHN0
cmVhbS0+dmlkZW9UcmFjayAmJiBzdHJlYW0tPnZpZGVvVHJhY2stPmlkKCkgPT0gdHJhY2tJZFN0
cmluZykgKSApIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJlYW07CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBTdHJlYW0qIGdldFN0cmVhbUJ5U291
cmNlQnVmZmVyUHJpdmF0ZShXZWJLaXRNZWRpYVNyYyogc291cmNlLCBXZWJDb3JlOjpTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyKiBzb3VyY2VCdWZmZXJQcml2YXRlKQoreworICAgIGZvciAo
U3RyZWFtKiBzdHJlYW0gOiBzb3VyY2UtPnByaXYtPnN0cmVhbXMpIHsKKyAgICAgICAgaWYgKHN0
cmVhbS0+c291cmNlQnVmZmVyID09IHNvdXJjZUJ1ZmZlclByaXZhdGUpCisgICAgICAgICAgICBy
ZXR1cm4gc3RyZWFtOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworLy8gRklYTUU6
IFVzZSBnc3RfYXBwX3NyY19wdXNoX3NhbXBsZSgpIGluc3RlYWQgd2hlbiB3ZSBzd2l0Y2ggdG8g
dGhlIGFwcHJvcHJpYXRlIEdTdHJlYW1lciB2ZXJzaW9uLgorc3RhdGljIEdzdEZsb3dSZXR1cm4g
cHVzaFNhbXBsZShHc3RBcHBTcmMqIGFwcHNyYywgR3N0U2FtcGxlKiBzYW1wbGUpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoR1NUX0lTX1NBTVBMRShzYW1wbGUpLCBHU1RfRkxPV19FUlJP
Uik7CisKKyAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X3NhbXBsZV9nZXRfY2FwcyhzYW1wbGUpOwor
ICAgIGlmIChjYXBzKQorICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2FwcyhhcHBzcmMsIGNhcHMp
OworICAgIGVsc2UKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKGFwcHNyYywgInJlY2VpdmVk
IHNhbXBsZSB3aXRob3V0IGNhcHMiKTsKKworICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X3Nh
bXBsZV9nZXRfYnVmZmVyKHNhbXBsZSk7CisgICAgaWYgKFVOTElLRUxZKCFidWZmZXIpKSB7Cisg
ICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChhcHBzcmMsICJyZWNlaXZlZCBzYW1wbGUgd2l0aG91
dCBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0KKworICAgIC8v
IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKCkgc3RlYWxzIHRoZSByZWZlcmVuY2UsIHdlIG5lZWQg
YW4gYWRkaXRpb25hbCBvbmUuCisgICAgcmV0dXJuIGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKGFw
cHNyYywgZ3N0X2J1ZmZlcl9yZWYoYnVmZmVyKSk7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGFzc1JlZlB0cjxQbGF5YmFja1BpcGVsaW5lPiBQbGF5YmFja1BpcGVsaW5lOjpjcmVhdGUo
KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxheWJhY2tQaXBlbGluZSgpKTsKK30KKwor
UGxheWJhY2tQaXBlbGluZTo6UGxheWJhY2tQaXBlbGluZSgpCisgICAgOiBSZWZDb3VudGVkPFBs
YXliYWNrUGlwZWxpbmU+KCkKK3sKK30KKworUGxheWJhY2tQaXBlbGluZTo6flBsYXliYWNrUGlw
ZWxpbmUoKQoreworfQorCit2b2lkIFBsYXliYWNrUGlwZWxpbmU6OnNldFdlYktpdE1lZGlhU3Jj
KFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYykKK3sKKyAgICBHU1RfREVCVUcoIndlYktp
dE1lZGlhU3JjPSVwIiwgd2ViS2l0TWVkaWFTcmMpOworICAgIG1fd2ViS2l0TWVkaWFTcmMgPSB3
ZWJLaXRNZWRpYVNyYzsKK30KKworV2ViS2l0TWVkaWFTcmMqIFBsYXliYWNrUGlwZWxpbmU6Ondl
YktpdE1lZGlhU3JjKCkKK3sKKyAgICByZXR1cm4gbV93ZWJLaXRNZWRpYVNyYy5nZXQoKTsKK30K
KworTWVkaWFTb3VyY2VQcml2YXRlOjpBZGRTdGF0dXMgUGxheWJhY2tQaXBlbGluZTo6YWRkU291
cmNlQnVmZmVyKFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiBzb3VyY2VCdWZm
ZXJQcml2YXRlKQoreworICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IG1fd2ViS2l0
TWVkaWFTcmMtPnByaXY7CisKKyAgICBpZiAocHJpdi0+YWxsVHJhY2tzQ29uZmlndXJlZCkgewor
ICAgICAgICBHU1RfRVJST1JfT0JKRUNUKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksICJBZGRpbmcg
bmV3IHNvdXJjZSBidWZmZXJzIGFmdGVyIGZpcnN0IGRhdGEgbm90IHN1cHBvcnRlZCB5ZXQiKTsK
KyAgICAgICAgcmV0dXJuIE1lZGlhU291cmNlUHJpdmF0ZTo6Tm90U3VwcG9ydGVkOworICAgIH0K
KworICAgIEdTVF9ERUJVR19PQkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSwgIlN0YXRlICVk
IiwgaW50KEdTVF9TVEFURShtX3dlYktpdE1lZGlhU3JjLmdldCgpKSkpOworCisgICAgU3RyZWFt
KiBzdHJlYW0gPSBuZXcgU3RyZWFtIHsgMCB9OworICAgIHN0cmVhbS0+cGFyZW50ID0gbV93ZWJL
aXRNZWRpYVNyYy5nZXQoKTsKKyAgICBzdHJlYW0tPmFwcHNyYyA9IGdzdF9lbGVtZW50X2ZhY3Rv
cnlfbWFrZSgiYXBwc3JjIiwgbnVsbHB0cik7CisgICAgc3RyZWFtLT5hcHBzcmNOZWVkRGF0YUZs
YWcgPSBmYWxzZTsKKyAgICBzdHJlYW0tPnNvdXJjZUJ1ZmZlciA9IHNvdXJjZUJ1ZmZlclByaXZh
dGUuZ2V0KCk7CisKKyAgICAvLyBObyB0cmFjayBoYXMgYmVlbiBhdHRhY2hlZCB5ZXQuCisgICAg
c3RyZWFtLT50eXBlID0gSW52YWxpZDsKKyAgICBzdHJlYW0tPnBhcnNlciA9IG51bGxwdHI7Cisg
ICAgc3RyZWFtLT5jYXBzID0gbnVsbHB0cjsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAg
c3RyZWFtLT5hdWRpb1RyYWNrID0gbnVsbHB0cjsKKyAgICBzdHJlYW0tPnZpZGVvVHJhY2sgPSBu
dWxscHRyOworI2VuZGlmCisgICAgc3RyZWFtLT5wcmVzZW50YXRpb25TaXplID0gV2ViQ29yZTo6
RmxvYXRTaXplKCk7CisgICAgc3RyZWFtLT5sYXN0RW5xdWV1ZWRUaW1lID0gTWVkaWFUaW1lOjpp
bnZhbGlkVGltZSgpOworCisgICAgZ3N0X2FwcF9zcmNfc2V0X2NhbGxiYWNrcyhHU1RfQVBQX1NS
QyhzdHJlYW0tPmFwcHNyYyksICZlbmFibGVkQXBwc3JjQ2FsbGJhY2tzLCBzdHJlYW0tPnBhcmVu
dCwgbnVsbHB0cik7CisgICAgZ3N0X2FwcF9zcmNfc2V0X2VtaXRfc2lnbmFscyhHU1RfQVBQX1NS
QyhzdHJlYW0tPmFwcHNyYyksIEZBTFNFKTsKKyAgICBnc3RfYXBwX3NyY19zZXRfc3RyZWFtX3R5
cGUoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpLCBHU1RfQVBQX1NUUkVBTV9UWVBFX1NFRUtB
QkxFKTsKKworICAgIGdzdF9hcHBfc3JjX3NldF9tYXhfYnl0ZXMoR1NUX0FQUF9TUkMoc3RyZWFt
LT5hcHBzcmMpLCAyICogV1RGOjpNQik7CisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHN0cmVh
bS0+YXBwc3JjKSwgImJsb2NrIiwgRkFMU0UsICJtaW4tcGVyY2VudCIsIDIwLCBudWxscHRyKTsK
KworICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3dlYktpdE1lZGlhU3JjLmdldCgpKTsKKyAgICBwcml2
LT5zdHJlYW1zLnByZXBlbmQoc3RyZWFtKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3dlYktp
dE1lZGlhU3JjLmdldCgpKTsKKworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV93ZWJLaXRNZWRp
YVNyYy5nZXQoKSksIHN0cmVhbS0+YXBwc3JjKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRl
X3dpdGhfcGFyZW50KHN0cmVhbS0+YXBwc3JjKTsKKworICAgIHJldHVybiBNZWRpYVNvdXJjZVBy
aXZhdGU6Ok9rOworfQorCit2b2lkIFBsYXliYWNrUGlwZWxpbmU6OnJlbW92ZVNvdXJjZUJ1ZmZl
cihSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0
ZSkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICBHU1RfREVCVUdf
T0JKRUNUKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksICJFbGVtZW50IHJlbW92ZWQgZnJvbSBNZWRp
YVNvdXJjZSIpOworICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3dlYktpdE1lZGlhU3JjLmdldCgpKTsK
KyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3dlYktpdE1lZGlhU3JjLT5wcml2
OworICAgIFN0cmVhbSogc3RyZWFtID0gbnVsbHB0cjsKKyAgICBEZXF1ZTxTdHJlYW0qPjo6aXRl
cmF0b3Igc3RyZWFtUG9zaXRpb24gPSBwcml2LT5zdHJlYW1zLmJlZ2luKCk7CisKKyAgICBmb3Ig
KDsgc3RyZWFtUG9zaXRpb24gIT0gcHJpdi0+c3RyZWFtcy5lbmQoKTsgKytzdHJlYW1Qb3NpdGlv
bikgeworICAgICAgICBpZiAoKCpzdHJlYW1Qb3NpdGlvbiktPnNvdXJjZUJ1ZmZlciA9PSBzb3Vy
Y2VCdWZmZXJQcml2YXRlLmdldCgpKSB7CisgICAgICAgICAgICBzdHJlYW0gPSAqc3RyZWFtUG9z
aXRpb247CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc3Ry
ZWFtKQorICAgICAgICBwcml2LT5zdHJlYW1zLnJlbW92ZShzdHJlYW1Qb3NpdGlvbik7CisgICAg
R1NUX09CSkVDVF9VTkxPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisKKyAgICBpZiAoc3Ry
ZWFtKQorICAgICAgICB3ZWJLaXRNZWRpYVNyY0ZyZWVTdHJlYW0obV93ZWJLaXRNZWRpYVNyYy5n
ZXQoKSwgc3RyZWFtKTsKK30KKwordm9pZCBQbGF5YmFja1BpcGVsaW5lOjphdHRhY2hUcmFjayhS
ZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZSwg
UmVmUHRyPFRyYWNrUHJpdmF0ZUJhc2U+IHRyYWNrUHJpdmF0ZSwgR3N0U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEdzdENhcHMqIGNhcHMpCit7CisgICAgV2ViS2l0TWVkaWFTcmMqIHdlYktpdE1lZGlh
U3JjID0gbV93ZWJLaXRNZWRpYVNyYy5nZXQoKTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJL
aXRNZWRpYVNyYyk7CisgICAgU3RyZWFtKiBzdHJlYW0gPSBnZXRTdHJlYW1CeVNvdXJjZUJ1ZmZl
clByaXZhdGUod2ViS2l0TWVkaWFTcmMsIHNvdXJjZUJ1ZmZlclByaXZhdGUuZ2V0KCkpOworICAg
IEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlhU3JjKTsKKworICAgIEFTU0VSVChzdHJlYW0p
OworCisgICAgR1NUX09CSkVDVF9MT0NLKHdlYktpdE1lZGlhU3JjKTsKKyAgICB1bnNpZ25lZCBw
YWRJZCA9IHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1iZXJPZlBhZHM7CisgICAgc3RyZWFtLT5w
YXJlbnQtPnByaXYtPm51bWJlck9mUGFkcysrOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktp
dE1lZGlhU3JjKTsKKworICAgIGNvbnN0IGdjaGFyKiBtZWRpYVR5cGUgPSBnc3Rfc3RydWN0dXJl
X2dldF9uYW1lKHN0cnVjdHVyZSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKHdlYktpdE1lZGlh
U3JjLCAiQ29uZmlndXJlZCB0cmFjayAlczogYXBwc3JjPSVzLCBwYWRJZD0ldSwgbWVkaWFUeXBl
PSVzIiwgdHJhY2tQcml2YXRlLT5pZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIEdTVF9FTEVN
RU5UX05BTUUoc3RyZWFtLT5hcHBzcmMpLCBwYWRJZCwgbWVkaWFUeXBlKTsKKworICAgIEdVbmlx
dWVQdHI8Z2NoYXI+IHBhcnNlckJpbk5hbWUoZ19zdHJkdXBfcHJpbnRmKCJzdHJlYW1wYXJzZXIl
dSIsIHBhZElkKSk7CisKKyAgICBpZiAoIWdfc3RyY21wMChtZWRpYVR5cGUsICJ2aWRlby94LWgy
NjQiKSkgeworICAgICAgICBHUmVmUHRyPEdzdENhcHM+IGZpbHRlckNhcHMgPSBhZG9wdEdSZWYo
Z3N0X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1oMjY0IiwgImFsaWdubWVudCIsIEdfVFlQRV9T
VFJJTkcsICJhdSIsIG51bGxwdHIpKTsKKyAgICAgICAgR3N0RWxlbWVudCogY2Fwc2ZpbHRlciA9
IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiY2Fwc2ZpbHRlciIsIG51bGxwdHIpOworICAgICAg
ICBnX29iamVjdF9zZXQoY2Fwc2ZpbHRlciwgImNhcHMiLCBmaWx0ZXJDYXBzLmdldCgpLCBudWxs
cHRyKTsKKworICAgICAgICBzdHJlYW0tPnBhcnNlciA9IGdzdF9iaW5fbmV3KHBhcnNlckJpbk5h
bWUuZ2V0KCkpOworCisgICAgICAgIEdzdEVsZW1lbnQqIHBhcnNlciA9IGdzdF9lbGVtZW50X2Zh
Y3RvcnlfbWFrZSgiaDI2NHBhcnNlIiwgbnVsbHB0cik7CisgICAgICAgIGdzdF9iaW5fYWRkX21h
bnkoR1NUX0JJTihzdHJlYW0tPnBhcnNlciksIHBhcnNlciwgY2Fwc2ZpbHRlciwgbnVsbHB0cik7
CisgICAgICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkcyhwYXJzZXIsICJzcmMiLCBjYXBzZmlsdGVy
LCAic2luayIpOworCisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0
X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocGFyc2VyLCAic2luayIpKTsKKyAgICAgICAgZ3N0X2Vs
ZW1lbnRfYWRkX3BhZChzdHJlYW0tPnBhcnNlciwgZ3N0X2dob3N0X3BhZF9uZXcoInNpbmsiLCBw
YWQuZ2V0KCkpKTsKKworICAgICAgICBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0
YXRpY19wYWQoY2Fwc2ZpbHRlciwgInNyYyIpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfYWRkX3Bh
ZChzdHJlYW0tPnBhcnNlciwgZ3N0X2dob3N0X3BhZF9uZXcoInNyYyIsIHBhZC5nZXQoKSkpOwor
ICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZWRpYVR5cGUsICJ2aWRlby94LWgyNjUiKSkgewor
ICAgICAgICBHUmVmUHRyPEdzdENhcHM+IGZpbHRlckNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNf
bmV3X3NpbXBsZSgidmlkZW8veC1oMjY1IiwgImFsaWdubWVudCIsIEdfVFlQRV9TVFJJTkcsICJh
dSIsIG51bGxwdHIpKTsKKyAgICAgICAgR3N0RWxlbWVudCogY2Fwc2ZpbHRlciA9IGdzdF9lbGVt
ZW50X2ZhY3RvcnlfbWFrZSgiY2Fwc2ZpbHRlciIsIG51bGxwdHIpOworICAgICAgICBnX29iamVj
dF9zZXQoY2Fwc2ZpbHRlciwgImNhcHMiLCBmaWx0ZXJDYXBzLmdldCgpLCBudWxscHRyKTsKKwor
ICAgICAgICBzdHJlYW0tPnBhcnNlciA9IGdzdF9iaW5fbmV3KHBhcnNlckJpbk5hbWUuZ2V0KCkp
OworCisgICAgICAgIEdzdEVsZW1lbnQqIHBhcnNlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFr
ZSgiaDI2NXBhcnNlIiwgbnVsbHB0cik7CisgICAgICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJ
TihzdHJlYW0tPnBhcnNlciksIHBhcnNlciwgY2Fwc2ZpbHRlciwgbnVsbHB0cik7CisgICAgICAg
IGdzdF9lbGVtZW50X2xpbmtfcGFkcyhwYXJzZXIsICJzcmMiLCBjYXBzZmlsdGVyLCAic2luayIp
OworCisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQocGFyc2VyLCAic2luayIpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfYWRk
X3BhZChzdHJlYW0tPnBhcnNlciwgZ3N0X2dob3N0X3BhZF9uZXcoInNpbmsiLCBwYWQuZ2V0KCkp
KTsKKworICAgICAgICBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQo
Y2Fwc2ZpbHRlciwgInNyYyIpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChzdHJlYW0t
PnBhcnNlciwgZ3N0X2dob3N0X3BhZF9uZXcoInNyYyIsIHBhZC5nZXQoKSkpOworICAgIH0gZWxz
ZSBpZiAoIWdfc3RyY21wMChtZWRpYVR5cGUsICJhdWRpby9tcGVnIikpIHsKKyAgICAgICAgZ2lu
dCBtcGVndmVyc2lvbiA9IC0xOworICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0
dXJlLCAibXBlZ3ZlcnNpb24iLCAmbXBlZ3ZlcnNpb24pOworCisgICAgICAgIEdzdEVsZW1lbnQq
IHBhcnNlcjsKKyAgICAgICAgaWYgKG1wZWd2ZXJzaW9uID09IDEpCisgICAgICAgICAgICBwYXJz
ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIm1wZWdhdWRpb3BhcnNlIiwgbnVsbHB0cik7
CisgICAgICAgIGVsc2UgaWYgKG1wZWd2ZXJzaW9uID09IDIgfHwgbXBlZ3ZlcnNpb24gPT0gNCkK
KyAgICAgICAgICAgIHBhcnNlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYWFjcGFyc2Ui
LCBudWxscHRyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisKKyAgICAgICAgc3RyZWFtLT5wYXJzZXIgPSBnc3RfYmluX25ldyhwYXJzZXJCaW5OYW1l
LmdldCgpKTsKKyAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTihzdHJlYW0tPnBhcnNlciksIHBh
cnNlcik7CisKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxl
bWVudF9nZXRfc3RhdGljX3BhZChwYXJzZXIsICJzaW5rIikpOworICAgICAgICBnc3RfZWxlbWVu
dF9hZGRfcGFkKHN0cmVhbS0+cGFyc2VyLCBnc3RfZ2hvc3RfcGFkX25ldygic2luayIsIHBhZC5n
ZXQoKSkpOworCisgICAgICAgIHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGlj
X3BhZChwYXJzZXIsICJzcmMiKSk7CisgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc3RyZWFt
LT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3KCJzcmMiLCBwYWQuZ2V0KCkpKTsKKyAgICB9IGVs
c2UgaWYgKCFnX3N0cmNtcDAobWVkaWFUeXBlLCAidmlkZW8veC12cDkiKSkKKyAgICAgICAgc3Ry
ZWFtLT5wYXJzZXIgPSBudWxscHRyOworICAgIGVsc2UgeworICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHN0cmVhbS0+cGFyZW50LCAiVW5zdXBwb3J0ZWQgbWVkaWEgZm9ybWF0OiAlcyIsIG1lZGlh
VHlwZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sod2Vi
S2l0TWVkaWFTcmMpOworICAgIHN0cmVhbS0+dHlwZSA9IFVua25vd247CisgICAgR1NUX09CSkVD
VF9VTkxPQ0sod2ViS2l0TWVkaWFTcmMpOworCisgICAgR1JlZlB0cjxHc3RQYWQ+IHNvdXJjZVBh
ZDsKKyAgICBpZiAoc3RyZWFtLT5wYXJzZXIpIHsKKyAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJ
TihzdHJlYW0tPnBhcmVudCksIHN0cmVhbS0+cGFyc2VyKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRf
c3luY19zdGF0ZV93aXRoX3BhcmVudChzdHJlYW0tPnBhcnNlcik7CisKKyAgICAgICAgR1JlZlB0
cjxHc3RQYWQ+IHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQo
c3RyZWFtLT5wYXJzZXIsICJzaW5rIikpOworICAgICAgICBzb3VyY2VQYWQgPSBhZG9wdEdSZWYo
Z3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoc3RyZWFtLT5hcHBzcmMsICJzcmMiKSk7CisgICAg
ICAgIGdzdF9wYWRfbGluayhzb3VyY2VQYWQuZ2V0KCksIHNpbmtQYWQuZ2V0KCkpOworICAgICAg
ICBzb3VyY2VQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoc3RyZWFt
LT5wYXJzZXIsICJzcmMiKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCAiU3RyZWFtIG9mIHR5cGUgJXMgZG9lc24ndCByZXF1
aXJlIGEgcGFyc2VyIGJpbiIsIG1lZGlhVHlwZSk7CisgICAgICAgIHNvdXJjZVBhZCA9IGFkb3B0
R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChzdHJlYW0tPmFwcHNyYywgInNyYyIpKTsK
KyAgICB9CisgICAgQVNTRVJUKHNvdXJjZVBhZCk7CisKKyAgICAvLyBGSVhNRTogSXMgcGFkSWQg
dGhlIGJlc3Qgd2F5IHRvIGlkZW50aWZ5IHRoZSBTdHJlYW0/IFdoYXQgYWJvdXQgdHJhY2tJZD8K
KyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChzb3VyY2VQYWQuZ2V0KCkpLCAicGFkSWQi
LCBHSU5UX1RPX1BPSU5URVIocGFkSWQpKTsKKyAgICB3ZWJLaXRNZWRpYVNyY0xpbmtQYXJzZXIo
c291cmNlUGFkLmdldCgpLCBjYXBzLCBzdHJlYW0pOworCisgICAgQVNTRVJUKHN0cmVhbS0+cGFy
ZW50LT5wcml2LT5tZWRpYVBsYXllclByaXZhdGUpOworICAgIGludCBzaWduYWwgPSAtMTsKKyAg
ICBpZiAoZ19zdHJfaGFzX3ByZWZpeChtZWRpYVR5cGUsICJhdWRpbyIpKSB7CisgICAgICAgIEdT
VF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisgICAgICAgIHN0cmVhbS0+dHlwZSA9IEF1
ZGlvOworICAgICAgICBzdHJlYW0tPnBhcmVudC0+cHJpdi0+bnVtYmVyT2ZBdWRpb1N0cmVhbXMr
KzsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sod2ViS2l0TWVkaWFTcmMpOworICAgICAgICBz
aWduYWwgPSBTSUdOQUxfQVVESU9fQ0hBTkdFRDsKKworICAgICAgICBzdHJlYW0tPmF1ZGlvVHJh
Y2sgPSBSZWZQdHI8V2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+KHN0YXRpY19j
YXN0PFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyKj4odHJhY2tQcml2YXRlLmdl
dCgpKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9oYXNfcHJlZml4KG1lZGlhVHlwZSwgInZpZGVv
IikpIHsKKyAgICAgICAgR1NUX09CSkVDVF9MT0NLKHdlYktpdE1lZGlhU3JjKTsKKyAgICAgICAg
c3RyZWFtLT50eXBlID0gVmlkZW87CisgICAgICAgIHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1i
ZXJPZlZpZGVvU3RyZWFtcysrOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRp
YVNyYyk7CisgICAgICAgIHNpZ25hbCA9IFNJR05BTF9WSURFT19DSEFOR0VEOworCisgICAgICAg
IHN0cmVhbS0+dmlkZW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdT
dHJlYW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIq
Pih0cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2hhc19wcmVmaXgo
bWVkaWFUeXBlLCAidGV4dCIpKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRp
YVNyYyk7CisgICAgICAgIHN0cmVhbS0+dHlwZSA9IFRleHQ7CisgICAgICAgIHN0cmVhbS0+cGFy
ZW50LT5wcml2LT5udW1iZXJPZlRleHRTdHJlYW1zKys7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5M
T0NLKHdlYktpdE1lZGlhU3JjKTsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX1RFWFRfQ0hBTkdF
RDsKKworICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCB0ZXh0IHRyYWNrcy4KKyAgICB9CisKKyAg
ICBpZiAoc2lnbmFsICE9IC0xKQorICAgICAgICBnX3NpZ25hbF9lbWl0KEdfT0JKRUNUKHN0cmVh
bS0+cGFyZW50KSwgd2ViS2l0TWVkaWFTcmNTaWduYWxzW3NpZ25hbF0sIDAsIG51bGxwdHIpOwor
fQorCit2b2lkIFBsYXliYWNrUGlwZWxpbmU6OnJlYXR0YWNoVHJhY2soUmVmUHRyPFNvdXJjZUJ1
ZmZlclByaXZhdGVHU3RyZWFtZXI+IHNvdXJjZUJ1ZmZlclByaXZhdGUsIFJlZlB0cjxUcmFja1By
aXZhdGVCYXNlPiB0cmFja1ByaXZhdGUpCit7CisgICAgR1NUX0RFQlVHKCJSZS1hdHRhY2hpbmcg
dHJhY2siKTsKKworICAgIC8vIEZJWE1FOiBNYXliZSByZW1vdmUgdGhpcyBtZXRob2QuIE5vdyB0
aGUgY2FwcyBjaGFuZ2UgaXMgbWFuYWdlZCBieSBnc3RfYXBwc3JjX3B1c2hfc2FtcGxlKCkgaW4g
ZW5xdWV1ZVNhbXBsZSgpCisgICAgLy8gYW5kIGZsdXNoQW5kRW5xdWV1ZU5vbkRpc3BsYXlpbmdT
YW1wbGVzKCkuCisKKyAgICBXZWJLaXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMgPSBtX3dlYktp
dE1lZGlhU3JjLmdldCgpOworCisgICAgR1NUX09CSkVDVF9MT0NLKHdlYktpdE1lZGlhU3JjKTsK
KyAgICBTdHJlYW0qIHN0cmVhbSA9IGdldFN0cmVhbUJ5U291cmNlQnVmZmVyUHJpdmF0ZSh3ZWJL
aXRNZWRpYVNyYywgc291cmNlQnVmZmVyUHJpdmF0ZS5nZXQoKSk7CisgICAgR1NUX09CSkVDVF9V
TkxPQ0sod2ViS2l0TWVkaWFTcmMpOworCisgICAgQVNTRVJUKHN0cmVhbSAmJiBzdHJlYW0tPnR5
cGUgIT0gSW52YWxpZCk7CisKKyAgICBHUmVmUHRyPEdzdENhcHM+IG9sZEFwcHNyY0NhcHMgPSBh
ZG9wdEdSZWYoZ3N0X2FwcF9zcmNfZ2V0X2NhcHMoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMp
KSk7CisgICAgLy8gVGhlIGNhcHMgY2hhbmdlIGlzIG1hbmFnZWQgYnkgZ3N0X2FwcHNyY19wdXNo
X3NhbXBsZSgpIGluIGVucXVldWVTYW1wbGUoKSBhbmQKKyAgICAvLyBmbHVzaEFuZEVucXVldWVO
b25EaXNwbGF5aW5nU2FtcGxlcygpLCBzbyB0aGUgY2FwcyBhcmVuJ3Qgc2V0IGZyb20gaGVyZS4K
KyAgICBHUmVmUHRyPEdzdENhcHM+IGFwcHNyY0NhcHMgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zcmNf
Z2V0X2NhcHMoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpKSk7CisgICAgY29uc3QgZ2NoYXIq
IG1lZGlhVHlwZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVy
ZShhcHBzcmNDYXBzLmdldCgpLCAwKSk7CisKKyAgICBpZiAoIWdzdF9jYXBzX2lzX2VxdWFsKG9s
ZEFwcHNyY0NhcHMuZ2V0KCksIGFwcHNyY0NhcHMuZ2V0KCkpKSB7CisgICAgICAgIEdTVF9ERUJV
RygiQ2FwcyBoYXZlIGNoYW5nZWQsIGJ1dCByZWNvbnN0cnVjdGluZyB0aGUgc2VxdWVuY2Ugb2Yg
ZWxlbWVudHMgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTsKKworI2lmbmRlZiBHU1RfRElTQUJMRV9H
U1RfREVCVUcKKyAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gc3Ryb2xkY2Fwcyhnc3RfY2Fwc190
b19zdHJpbmcob2xkQXBwc3JjQ2Fwcy5nZXQoKSkpOworICAgICAgICBHVW5pcXVlUHRyPGdjaGFy
PiBzdHJuZXdjYXBzKGdzdF9jYXBzX3RvX3N0cmluZyhhcHBzcmNDYXBzLmdldCgpKSk7CisgICAg
ICAgIEdTVF9ERUJVRygib2xkY2FwczogJXMiLCBzdHJvbGRjYXBzLmdldCgpKTsKKyAgICAgICAg
R1NUX0RFQlVHKCJuZXdjYXBzOiAlcyIsIHN0cm5ld2NhcHMuZ2V0KCkpOworI2VuZGlmCisgICAg
fQorCisgICAgaW50IHNpZ25hbCA9IC0xOworCisgICAgR1NUX09CSkVDVF9MT0NLKHdlYktpdE1l
ZGlhU3JjKTsKKyAgICBpZiAoZ19zdHJfaGFzX3ByZWZpeChtZWRpYVR5cGUsICJhdWRpbyIpKSB7
CisgICAgICAgIEFTU0VSVChzdHJlYW0tPnR5cGUgPT0gQXVkaW8pOworICAgICAgICBzaWduYWwg
PSBTSUdOQUxfQVVESU9fQ0hBTkdFRDsKKyAgICAgICAgc3RyZWFtLT5hdWRpb1RyYWNrID0gUmVm
UHRyPFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyPihzdGF0aWNfY2FzdDxXZWJD
b3JlOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KHRyYWNrUHJpdmF0ZS5nZXQoKSkpOwor
ICAgIH0gZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeChtZWRpYVR5cGUsICJ2aWRlbyIpKSB7Cisg
ICAgICAgIEFTU0VSVChzdHJlYW0tPnR5cGUgPT0gVmlkZW8pOworICAgICAgICBzaWduYWwgPSBT
SUdOQUxfVklERU9fQ0hBTkdFRDsKKyAgICAgICAgc3RyZWFtLT52aWRlb1RyYWNrID0gUmVmUHRy
PFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPihzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KHRyYWNrUHJpdmF0ZS5nZXQoKSkpOworICAg
IH0gZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeChtZWRpYVR5cGUsICJ0ZXh0IikpIHsKKyAgICAg
ICAgQVNTRVJUKHN0cmVhbS0+dHlwZSA9PSBUZXh0KTsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFM
X1RFWFRfQ0hBTkdFRDsKKworICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCB0ZXh0IHRyYWNrcy4K
KyAgICB9CisgICAgR1NUX09CSkVDVF9VTkxPQ0sod2ViS2l0TWVkaWFTcmMpOworCisgICAgaWYg
KHNpZ25hbCAhPSAtMSkKKyAgICAgICAgZ19zaWduYWxfZW1pdChHX09CSkVDVChzdHJlYW0tPnBh
cmVudCksIHdlYktpdE1lZGlhU3JjU2lnbmFsc1tzaWduYWxdLCAwLCBudWxscHRyKTsKK30KKwor
dm9pZCBQbGF5YmFja1BpcGVsaW5lOjpub3RpZnlEdXJhdGlvbkNoYW5nZWQoKQoreworICAgIGdz
dF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChtX3dlYktpdE1lZGlhU3JjLmdldCgp
KSwgZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uX2NoYW5nZWQoR1NUX09CSkVDVChtX3dlYktpdE1l
ZGlhU3JjLmdldCgpKSkpOworICAgIC8vIFdlYktpdE1lZGlhU3JjIHdpbGwgYXNrIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRSBmb3IgdGhlIG5ldyBkdXJhdGlvbiBsYXRlciwgd2hlbiBz
b21lYm9keSBhc2tzIGZvciBpdC4KK30KKwordm9pZCBQbGF5YmFja1BpcGVsaW5lOjptYXJrRW5k
T2ZTdHJlYW0oTWVkaWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0YXR1cykKK3sKKyAgICBX
ZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3dlYktpdE1lZGlhU3JjLT5wcml2OworCisg
ICAgR1NUX0RFQlVHX09CSkVDVChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCAiSGF2ZSBFT1MiKTsK
KworICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3dlYktpdE1lZGlhU3JjLmdldCgpKTsKKyAgICBib29s
IGFsbFRyYWNrc0NvbmZpZ3VyZWQgPSBwcml2LT5hbGxUcmFja3NDb25maWd1cmVkOworICAgIGlm
ICghYWxsVHJhY2tzQ29uZmlndXJlZCkKKyAgICAgICAgcHJpdi0+YWxsVHJhY2tzQ29uZmlndXJl
ZCA9IHRydWU7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7
CisKKyAgICBpZiAoIWFsbFRyYWNrc0NvbmZpZ3VyZWQpIHsKKyAgICAgICAgZ3N0X2VsZW1lbnRf
bm9fbW9yZV9wYWRzKEdTVF9FTEVNRU5UKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpKTsKKyAgICAg
ICAgd2ViS2l0TWVkaWFTcmNEb0FzeW5jRG9uZShtX3dlYktpdE1lZGlhU3JjLmdldCgpKTsKKyAg
ICB9CisKKyAgICBWZWN0b3I8R3N0QXBwU3JjKj4gYXBwc3JjczsKKworICAgIEdTVF9PQkpFQ1Rf
TE9DSyhtX3dlYktpdE1lZGlhU3JjLmdldCgpKTsKKyAgICBmb3IgKFN0cmVhbSogc3RyZWFtIDog
cHJpdi0+c3RyZWFtcykgeworICAgICAgICBpZiAoc3RyZWFtLT5hcHBzcmMpCisgICAgICAgICAg
ICBhcHBzcmNzLmFwcGVuZChHU1RfQVBQX1NSQyhzdHJlYW0tPmFwcHNyYykpOworICAgIH0KKyAg
ICBHU1RfT0JKRUNUX1VOTE9DSyhtX3dlYktpdE1lZGlhU3JjLmdldCgpKTsKKworICAgIGZvciAo
R3N0QXBwU3JjKiBhcHBzcmMgOiBhcHBzcmNzKQorICAgICAgICBnc3RfYXBwX3NyY19lbmRfb2Zf
c3RyZWFtKGFwcHNyYyk7Cit9CisKK3ZvaWQgUGxheWJhY2tQaXBlbGluZTo6Zmx1c2hBbmRFbnF1
ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMoVmVjdG9yPFJlZlB0cjxNZWRpYVNhbXBsZT4+IHNhbXBs
ZXMpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKCFzYW1w
bGVzLnNpemUoKSkgeworICAgICAgICBHU1RfREVCVUcoIk5vIHNhbXBsZXMsIHRyYWNrSWQgdW5r
bm93biIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQXRvbWljU3RyaW5nIHRyYWNr
SWQgPSBzYW1wbGVzWzBdLT50cmFja0lEKCk7CisgICAgR1NUX0RFQlVHKCJmbHVzaEFuZEVucXVl
dWVOb25EaXNwbGF5aW5nU2FtcGxlczogdHJhY2tJZD0lcyBQVFNbMF09JWYgLi4uIFBUU1tuXT0l
ZiIsIHRyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc2FtcGxlc1swXS0+cHJlc2VudGF0
aW9uVGltZSgpLnRvRmxvYXQoKSwgc2FtcGxlc1tzYW1wbGVzLnNpemUoKS0xXS0+cHJlc2VudGF0
aW9uVGltZSgpLnRvRmxvYXQoKSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fd2ViS2l0TWVk
aWFTcmMuZ2V0KCksICJGbHVzaGluZyBhbmQgcmUtZW5xdWVpbmcgJXp1IHNhbXBsZXMgZm9yIHN0
cmVhbSAlcyIsIHNhbXBsZXMuc2l6ZSgpLCB0cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworCisgICAgR1NUX09CSkVDVF9MT0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpOworICAgIFN0
cmVhbSogc3RyZWFtID0gZ2V0U3RyZWFtQnlUcmFja0lkKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCks
IHRyYWNrSWQpOworCisgICAgaWYgKCFzdHJlYW0pIHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxP
Q0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoIXN0cmVhbS0+c291cmNlQnVmZmVyLT5pc1JlYWR5Rm9yTW9yZVNhbXBsZXModHJhY2tJ
ZCkpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJmbHVzaEFuZEVucXVldWVOb25EaXNwbGF5aW5nU2Ft
cGxlczogc2tpcCBhZGRpbmcgbmV3IHNhbXBsZSBmb3IgdHJhY2tJZD0lcywgU0IgaXMgbm90IHJl
YWR5IHlldCIsIHRyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIEdTVF9P
QkpFQ1RfVU5MT0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgR3N0RWxlbWVudCogYXBwc3JjID0gc3RyZWFtLT5hcHBzcmM7CisgICAgTWVk
aWFUaW1lIGxhc3RFbnF1ZXVlZFRpbWUgPSBzdHJlYW0tPmxhc3RFbnF1ZXVlZFRpbWU7CisgICAg
R1NUX09CSkVDVF9VTkxPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisKKyAgICBpZiAoIW1f
d2ViS2l0TWVkaWFTcmMtPnByaXYtPm1lZGlhUGxheWVyUHJpdmF0ZS0+c2Vla2luZygpKQorICAg
ICAgICBHU1RfREVCVUcoImZsdXNoQW5kRW5xdWV1ZU5vbkRpc3BsYXlpbmdTYW1wbGVzOiB0cmFj
a0lkPSVzIHBpcGVsaW5lIG5lZWRzIGZsdXNoaW5nLiIsIHRyYWNrSWQuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisKKyAgICBmb3IgKGNvbnN0IFJlZlB0cjxNZWRpYVNhbXBsZT4mIHNhbXBsZSA6
IHNhbXBsZXMpIHsKKyAgICAgICAgR1N0cmVhbWVyTWVkaWFTYW1wbGUqIGdTdHJlYW1lck1lZGlh
U2FtcGxlID0gc3RhdGljX2Nhc3Q8R1N0cmVhbWVyTWVkaWFTYW1wbGUqPihzYW1wbGUuZ2V0KCkp
OworICAgICAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IG51bGxwdHI7CisgICAgICAgIGlmIChnU3Ry
ZWFtZXJNZWRpYVNhbXBsZS0+c2FtcGxlKCkpCisgICAgICAgICAgICBidWZmZXIgPSBnc3Rfc2Ft
cGxlX2dldF9idWZmZXIoZ1N0cmVhbWVyTWVkaWFTYW1wbGUtPnNhbXBsZSgpKTsKKyAgICAgICAg
aWYgKGJ1ZmZlcikgeworICAgICAgICAgICAgR3N0U2FtcGxlKiBnc3RTYW1wbGUgPSBnc3Rfc2Ft
cGxlX3JlZihnU3RyZWFtZXJNZWRpYVNhbXBsZS0+c2FtcGxlKCkpOworICAgICAgICAgICAgbGFz
dEVucXVldWVkVGltZSA9IGdTdHJlYW1lck1lZGlhU2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCk7
CisKKyAgICAgICAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQoYnVmZmVyLCBHU1RfQlVGRkVSX0ZM
QUdfREVDT0RFX09OTFkpOworICAgICAgICAgICAgcHVzaFNhbXBsZShHU1RfQVBQX1NSQyhhcHBz
cmMpLCBnc3RTYW1wbGUpOworICAgICAgICAgICAgLy8gZ3N0X2FwcF9zcmNfcHVzaF9zYW1wbGUo
KSB1c2VzIHRyYW5zZmVyLW5vbmUgZm9yIGdzdFNhbXBsZS4KKworICAgICAgICAgICAgZ3N0X3Nh
bXBsZV91bnJlZihnc3RTYW1wbGUpOworICAgICAgICB9CisgICAgfQorICAgIEdTVF9PQkpFQ1Rf
TE9DSyhtX3dlYktpdE1lZGlhU3JjLmdldCgpKTsKKyAgICBzdHJlYW0tPmxhc3RFbnF1ZXVlZFRp
bWUgPSBsYXN0RW5xdWV1ZWRUaW1lOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fd2ViS2l0TWVk
aWFTcmMuZ2V0KCkpOworfQorCit2b2lkIFBsYXliYWNrUGlwZWxpbmU6OmVucXVldWVTYW1wbGUo
UGFzc1JlZlB0cjxNZWRpYVNhbXBsZT4gcHJTYW1wbGUpCit7CisgICAgQVNTRVJUKFdURjo6aXNN
YWluVGhyZWFkKCkpOworCisgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBwcm90ZWN0ZWRQclNhbXBs
ZSA9IHByU2FtcGxlOworICAgIEF0b21pY1N0cmluZyB0cmFja0lkID0gcHJvdGVjdGVkUHJTYW1w
bGUtPnRyYWNrSUQoKTsKKworICAgIEdTVF9UUkFDRSgiZW5xdWVpbmcgc2FtcGxlIHRyYWNrSWQ9
JXMgUFRTPSVmIHByZXNlbnRhdGlvblNpemU9JS4wZnglLjBmIGF0ICUiIEdTVF9USU1FX0ZPUk1B
VCAiIGR1cmF0aW9uOiAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgIHRyYWNrSWQuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgcHJvdGVjdGVkUHJTYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKS50
b0Zsb2F0KCksCisgICAgICAgIHByb3RlY3RlZFByU2FtcGxlLT5wcmVzZW50YXRpb25TaXplKCku
d2lkdGgoKSwgcHJvdGVjdGVkUHJTYW1wbGUtPnByZXNlbnRhdGlvblNpemUoKS5oZWlnaHQoKSwK
KyAgICAgICAgR1NUX1RJTUVfQVJHUyhXZWJDb3JlOjp0b0dzdENsb2NrVGltZShwcm90ZWN0ZWRQ
clNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpLnRvRG91YmxlKCkpKSwKKyAgICAgICAgR1NUX1RJ
TUVfQVJHUyhXZWJDb3JlOjp0b0dzdENsb2NrVGltZShwcm90ZWN0ZWRQclNhbXBsZS0+ZHVyYXRp
b24oKS50b0RvdWJsZSgpKSkpOworCisgICAgU3RyZWFtKiBzdHJlYW0gPSBnZXRTdHJlYW1CeVRy
YWNrSWQobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSwgdHJhY2tJZCk7CisKKyAgICBpZiAoIXN0cmVh
bSkgeworICAgICAgICBHU1RfV0FSTklORygiTm8gc3RyZWFtISIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCFzdHJlYW0tPnNvdXJjZUJ1ZmZlci0+aXNSZWFkeUZvck1vcmVT
YW1wbGVzKHRyYWNrSWQpKSB7CisgICAgICAgIEdTVF9ERUJVRygiZW5xdWV1ZVNhbXBsZTogc2tp
cCBhZGRpbmcgbmV3IHNhbXBsZSBmb3IgdHJhY2tJZD0lcywgU0IgaXMgbm90IHJlYWR5IHlldCIs
IHRyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBHc3RFbGVtZW50KiBhcHBzcmMgPSBzdHJlYW0tPmFwcHNyYzsKKyAgICBNZWRpYVRp
bWUgbGFzdEVucXVldWVkVGltZSA9IHN0cmVhbS0+bGFzdEVucXVldWVkVGltZTsKKworICAgIEdT
dHJlYW1lck1lZGlhU2FtcGxlKiBzYW1wbGUgPSBzdGF0aWNfY2FzdDxHU3RyZWFtZXJNZWRpYVNh
bXBsZSo+KHByb3RlY3RlZFByU2FtcGxlLmdldCgpKTsKKyAgICBpZiAoc2FtcGxlLT5zYW1wbGUo
KSAmJiBnc3Rfc2FtcGxlX2dldF9idWZmZXIoc2FtcGxlLT5zYW1wbGUoKSkpIHsKKyAgICAgICAg
R1JlZlB0cjxHc3RTYW1wbGU+IGdzdFNhbXBsZSA9IHNhbXBsZS0+c2FtcGxlKCk7CisgICAgICAg
IEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKGdzdFNhbXBsZS5nZXQo
KSk7CisgICAgICAgIGxhc3RFbnF1ZXVlZFRpbWUgPSBzYW1wbGUtPnByZXNlbnRhdGlvblRpbWUo
KTsKKworICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQoYnVmZmVyLCBHU1RfQlVGRkVSX0ZM
QUdfREVDT0RFX09OTFkpOworICAgICAgICBwdXNoU2FtcGxlKEdTVF9BUFBfU1JDKGFwcHNyYyks
IGdzdFNhbXBsZS5nZXQoKSk7CisgICAgICAgIC8vIGdzdF9hcHBfc3JjX3B1c2hfc2FtcGxlKCkg
dXNlcyB0cmFuc2Zlci1ub25lIGZvciBnc3RTYW1wbGUuCisKKyAgICAgICAgc3RyZWFtLT5sYXN0
RW5xdWV1ZWRUaW1lID0gbGFzdEVucXVldWVkVGltZTsKKyAgICB9Cit9CisKK0dzdEVsZW1lbnQq
IFBsYXliYWNrUGlwZWxpbmU6OnBpcGVsaW5lKCkKK3sKKyAgICBpZiAoIW1fd2ViS2l0TWVkaWFT
cmMgfHwgIUdTVF9FTEVNRU5UX1BBUkVOVChHU1RfRUxFTUVOVChtX3dlYktpdE1lZGlhU3JjLmdl
dCgpKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIEdTVF9FTEVNRU5U
X1BBUkVOVChHU1RfRUxFTUVOVF9QQVJFTlQoR1NUX0VMRU1FTlQobV93ZWJLaXRNZWRpYVNyYy5n
ZXQoKSkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KKworI2VuZGlmIC8vIFVTRShH
U1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvbXNlL1BsYXliYWNrUGlwZWxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0
YWQxYmY5NmRiOWI4MTVjYzYwNzRjOWY5MTk5YzI0NDRjYzgyYTEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXliYWNr
UGlwZWxpbmUuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IE1l
dHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFC
TEUoTUVESUFfU09VUkNFKQorCisvLyBQbGF5YmFja1BpcGVsaW5lIGlzIChzb3J0IG9mKSBhIGZy
aWVuZCBjbGFzcyBvZiBXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci4KKworI2luY2x1ZGUgIldl
YktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VH
U3RyZWFtZXJQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8d3Rm
L0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdURiB7Cit0ZW1wbGF0ZTw+IEdSZWZQdHI8V2ViS2l0TWVkaWFTcmM+IGFkb3B0R1JlZihXZWJL
aXRNZWRpYVNyYyopOwordGVtcGxhdGU8PiBXZWJLaXRNZWRpYVNyYyogcmVmR1B0cjxXZWJLaXRN
ZWRpYVNyYz4oV2ViS2l0TWVkaWFTcmMqKTsKK3RlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8V2Vi
S2l0TWVkaWFTcmM+KFdlYktpdE1lZGlhU3JjKik7Cit9OworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENvbnRlbnRUeXBlOworY2xhc3MgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1l
cjsKK2NsYXNzIE1lZGlhU291cmNlR1N0cmVhbWVyOworCitjbGFzcyBQbGF5YmFja1BpcGVsaW5l
OiBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1BpcGVsaW5lPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8UGxheWJhY2tQaXBlbGluZT4gY3JlYXRlKCk7CisgICAgdmlydHVhbCB+
UGxheWJhY2tQaXBlbGluZSgpOworCisgICAgdm9pZCBzZXRXZWJLaXRNZWRpYVNyYyhXZWJLaXRN
ZWRpYVNyYyopOworICAgIFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYygpOworCisgICAg
TWVkaWFTb3VyY2VQcml2YXRlOjpBZGRTdGF0dXMgYWRkU291cmNlQnVmZmVyKFJlZlB0cjxTb3Vy
Y2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPik7CisgICAgdm9pZCByZW1vdmVTb3VyY2VCdWZmZXIo
UmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+KTsKKyAgICB2b2lkIGF0dGFjaFRy
YWNrKFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiwgUmVmUHRyPFRyYWNrUHJp
dmF0ZUJhc2U+LCBHc3RTdHJ1Y3R1cmUqLCBHc3RDYXBzKik7CisgICAgdm9pZCByZWF0dGFjaFRy
YWNrKFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiwgUmVmUHRyPFRyYWNrUHJp
dmF0ZUJhc2U+KTsKKyAgICB2b2lkIG5vdGlmeUR1cmF0aW9uQ2hhbmdlZCgpOworCisgICAgLy8g
RnJvbSBNZWRpYVNvdXJjZUdTdHJlYW1lci4KKyAgICB2b2lkIG1hcmtFbmRPZlN0cmVhbShNZWRp
YVNvdXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzKTsKKworICAgIC8vIEZyb20gU291cmNl
QnVmZmVyUHJpdmF0ZUdTdHJlYW1lci4KKyAgICB2b2lkIGZsdXNoQW5kRW5xdWV1ZU5vbkRpc3Bs
YXlpbmdTYW1wbGVzKFZlY3RvcjxSZWZQdHI8TWVkaWFTYW1wbGU+Pik7CisgICAgdm9pZCBlbnF1
ZXVlU2FtcGxlKFBhc3NSZWZQdHI8TWVkaWFTYW1wbGU+KTsKKworICAgIEdzdEVsZW1lbnQqIHBp
cGVsaW5lKCk7Citwcml2YXRlOgorICAgIFBsYXliYWNrUGlwZWxpbmUoKTsKKyAgICBHUmVmUHRy
PFdlYktpdE1lZGlhU3JjPiBtX3dlYktpdE1lZGlhU3JjOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZS4KKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292410</attachid>
            <date>2016-10-21 14:27:33 -0700</date>
            <delta_ts>2016-10-21 14:39:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162901-20161021212352.patch</filename>
            <type>text/plain</type>
            <size>25584</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NjM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZThiODhiYjM0M2I1NTBi
ZGRmZGU1YjY2NjZlMWIyMDVmNmM5YmQ1Ni4uNTA5MGE5YjdkZTI5NzY4YzBlYzUwN2I1YjhjZTk3
Mjg4YzVkNzE3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM1IEBACiAyMDE2LTEwLTA0ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXSBQbGF5YmFjayBwaXBlbGluZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5jYXBzdWxhdGUgdGhlIHJlc3BvbnNpYmlsaXR5IHRv
IGludGVyYWN0IHdpdGggdGhlIEdTdHJlYW1lciBwbGF5YmFjayBwaXBlbGluZSBhbmQgdGhlCisg
ICAgICAgIGRpZmZlcmVudCBzdHJlYW1zIG1hbmFnZWQgYnkgdGhlIFdlYktpdE1lZGlhU3JjIGVs
ZW1lbnQgaW50byBhIG5ldyBQbGF5YmFja1BpcGVsaW5lIGNsYXNzLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNwcDogQWRkZWQu
CisgICAgICAgIChnZXRTdHJlYW1CeVRyYWNrSWQpOgorICAgICAgICAoZ2V0U3RyZWFtQnlTb3Vy
Y2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKHB1c2hTYW1wbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxheWJhY2tQaXBlbGluZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNr
UGlwZWxpbmU6OlBsYXliYWNrUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQ
aXBlbGluZTo6flBsYXliYWNrUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQ
aXBlbGluZTo6c2V0V2ViS2l0TWVkaWFTcmMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQ
aXBlbGluZTo6d2ViS2l0TWVkaWFTcmMpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQaXBl
bGluZTo6YWRkU291cmNlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrUGlwZWxp
bmU6OnJlbW92ZVNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1BpcGVs
aW5lOjphdHRhY2hUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1BpcGVsaW5lOjpy
ZWF0dGFjaFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrUGlwZWxpbmU6Om5vdGlm
eUR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1BpcGVsaW5lOjpt
YXJrRW5kT2ZTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQaXBlbGluZTo6Zmx1
c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tQaXBlbGluZTo6ZW5xdWV1ZVNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFj
a1BpcGVsaW5lOjpwaXBlbGluZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmg6IEFkZGVkLgorCisyMDE2LTEwLTA0ICBFbnJpcXVl
IE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dTdHJl
YW1lcl1bTVNFXVtFTUVdIE1TRSBzcGVjaWFsaXphdGlvbiBvZiBNZWRpYSBQbGF5ZXIgUHJpdmF0
ZSBmb3IgR1N0cmVhbWVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI5MDAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjFjOGFiYTUwZTlmYTMyNjM1ODU1M2E0ZmY1YjE5NzNiN2VkNTNlZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvUGxheWJhY2tQaXBlbGluZS5jcHAKQEAgLTAsMCArMSw0ODQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQsIDIwMTUgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFy
LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICog
Q29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUGxheWJhY2tQaXBlbGluZS5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVB
TUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKQorCisjaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZh
dGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYVNhbXBsZS5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxlLmgiCisjaW5j
bHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlZpZGVvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgor
I2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR011dGV4TG9ja2VyLmg+
CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlx
dWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworc3RhdGljIFN0
cmVhbSogZ2V0U3RyZWFtQnlUcmFja0lkKFdlYktpdE1lZGlhU3JjKiwgQXRvbWljU3RyaW5nKTsK
K3N0YXRpYyBTdHJlYW0qIGdldFN0cmVhbUJ5U291cmNlQnVmZmVyUHJpdmF0ZShXZWJLaXRNZWRp
YVNyYyosIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIqKTsKKworc3RhdGlj
IFN0cmVhbSogZ2V0U3RyZWFtQnlUcmFja0lkKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIEF0b21p
Y1N0cmluZyB0cmFja0lkU3RyaW5nKQoreworICAgIC8vIFdlYktpdE1lZGlhU3JjIHNob3VsZCBi
ZSBsb2NrZWQgYXQgdGhpcyBwb2ludC4KKyAgICBmb3IgKFN0cmVhbSogc3RyZWFtIDogc291cmNl
LT5wcml2LT5zdHJlYW1zKSB7CisgICAgICAgIGlmIChzdHJlYW0tPnR5cGUgIT0gV2ViQ29yZTo6
SW52YWxpZAorICAgICAgICAgICAgJiYgKChzdHJlYW0tPmF1ZGlvVHJhY2sgJiYgc3RyZWFtLT5h
dWRpb1RyYWNrLT5pZCgpID09IHRyYWNrSWRTdHJpbmcpCisgICAgICAgICAgICAgICAgfHwgKHN0
cmVhbS0+dmlkZW9UcmFjayAmJiBzdHJlYW0tPnZpZGVvVHJhY2stPmlkKCkgPT0gdHJhY2tJZFN0
cmluZykgKSApIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJlYW07CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBTdHJlYW0qIGdldFN0cmVhbUJ5U291
cmNlQnVmZmVyUHJpdmF0ZShXZWJLaXRNZWRpYVNyYyogc291cmNlLCBXZWJDb3JlOjpTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyKiBzb3VyY2VCdWZmZXJQcml2YXRlKQoreworICAgIGZvciAo
U3RyZWFtKiBzdHJlYW0gOiBzb3VyY2UtPnByaXYtPnN0cmVhbXMpIHsKKyAgICAgICAgaWYgKHN0
cmVhbS0+c291cmNlQnVmZmVyID09IHNvdXJjZUJ1ZmZlclByaXZhdGUpCisgICAgICAgICAgICBy
ZXR1cm4gc3RyZWFtOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworLy8gRklYTUU6
IFVzZSBnc3RfYXBwX3NyY19wdXNoX3NhbXBsZSgpIGluc3RlYWQgd2hlbiB3ZSBzd2l0Y2ggdG8g
dGhlIGFwcHJvcHJpYXRlIEdTdHJlYW1lciB2ZXJzaW9uLgorc3RhdGljIEdzdEZsb3dSZXR1cm4g
cHVzaFNhbXBsZShHc3RBcHBTcmMqIGFwcHNyYywgR3N0U2FtcGxlKiBzYW1wbGUpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoR1NUX0lTX1NBTVBMRShzYW1wbGUpLCBHU1RfRkxPV19FUlJP
Uik7CisKKyAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X3NhbXBsZV9nZXRfY2FwcyhzYW1wbGUpOwor
ICAgIGlmIChjYXBzKQorICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2FwcyhhcHBzcmMsIGNhcHMp
OworICAgIGVsc2UKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKGFwcHNyYywgInJlY2VpdmVk
IHNhbXBsZSB3aXRob3V0IGNhcHMiKTsKKworICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X3Nh
bXBsZV9nZXRfYnVmZmVyKHNhbXBsZSk7CisgICAgaWYgKFVOTElLRUxZKCFidWZmZXIpKSB7Cisg
ICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChhcHBzcmMsICJyZWNlaXZlZCBzYW1wbGUgd2l0aG91
dCBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0KKworICAgIC8v
IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKCkgc3RlYWxzIHRoZSByZWZlcmVuY2UsIHdlIG5lZWQg
YW4gYWRkaXRpb25hbCBvbmUuCisgICAgcmV0dXJuIGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKGFw
cHNyYywgZ3N0X2J1ZmZlcl9yZWYoYnVmZmVyKSk7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kwordm9pZCBQbGF5YmFja1BpcGVsaW5lOjpzZXRXZWJLaXRNZWRpYVNyYyhXZWJLaXRNZWRpYVNy
Yyogd2ViS2l0TWVkaWFTcmMpCit7CisgICAgR1NUX0RFQlVHKCJ3ZWJLaXRNZWRpYVNyYz0lcCIs
IHdlYktpdE1lZGlhU3JjKTsKKyAgICBtX3dlYktpdE1lZGlhU3JjID0gd2ViS2l0TWVkaWFTcmM7
Cit9CisKK1dlYktpdE1lZGlhU3JjKiBQbGF5YmFja1BpcGVsaW5lOjp3ZWJLaXRNZWRpYVNyYygp
Cit7CisgICAgcmV0dXJuIG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCk7Cit9CisKK01lZGlhU291cmNl
UHJpdmF0ZTo6QWRkU3RhdHVzIFBsYXliYWNrUGlwZWxpbmU6OmFkZFNvdXJjZUJ1ZmZlcihSZWZQ
dHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZSkKK3sK
KyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3dlYktpdE1lZGlhU3JjLT5wcml2
OworCisgICAgaWYgKHByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQpIHsKKyAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCAiQWRkaW5nIG5ldyBzb3VyY2UgYnVm
ZmVycyBhZnRlciBmaXJzdCBkYXRhIG5vdCBzdXBwb3J0ZWQgeWV0Iik7CisgICAgICAgIHJldHVy
biBNZWRpYVNvdXJjZVByaXZhdGU6Ok5vdFN1cHBvcnRlZDsKKyAgICB9CisKKyAgICBHU1RfREVC
VUdfT0JKRUNUKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksICJTdGF0ZSAlZCIsIGludChHU1RfU1RB
VEUobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSkpKTsKKworICAgIFN0cmVhbSogc3RyZWFtID0gbmV3
IFN0cmVhbSB7IDAgfTsKKyAgICBzdHJlYW0tPnBhcmVudCA9IG1fd2ViS2l0TWVkaWFTcmMuZ2V0
KCk7CisgICAgc3RyZWFtLT5hcHBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNy
YyIsIG51bGxwdHIpOworICAgIHN0cmVhbS0+YXBwc3JjTmVlZERhdGFGbGFnID0gZmFsc2U7Cisg
ICAgc3RyZWFtLT5zb3VyY2VCdWZmZXIgPSBzb3VyY2VCdWZmZXJQcml2YXRlLmdldCgpOworCisg
ICAgLy8gTm8gdHJhY2sgaGFzIGJlZW4gYXR0YWNoZWQgeWV0LgorICAgIHN0cmVhbS0+dHlwZSA9
IEludmFsaWQ7CisgICAgc3RyZWFtLT5wYXJzZXIgPSBudWxscHRyOworICAgIHN0cmVhbS0+Y2Fw
cyA9IG51bGxwdHI7CisgICAgc3RyZWFtLT5hdWRpb1RyYWNrID0gbnVsbHB0cjsKKyAgICBzdHJl
YW0tPnZpZGVvVHJhY2sgPSBudWxscHRyOworICAgIHN0cmVhbS0+cHJlc2VudGF0aW9uU2l6ZSA9
IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOworICAgIHN0cmVhbS0+bGFzdEVucXVldWVkVGltZSA9IE1l
ZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKworICAgIGdzdF9hcHBfc3JjX3NldF9jYWxsYmFja3Mo
R1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpLCAmZW5hYmxlZEFwcHNyY0NhbGxiYWNrcywgc3Ry
ZWFtLT5wYXJlbnQsIG51bGxwdHIpOworICAgIGdzdF9hcHBfc3JjX3NldF9lbWl0X3NpZ25hbHMo
R1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpLCBGQUxTRSk7CisgICAgZ3N0X2FwcF9zcmNfc2V0
X3N0cmVhbV90eXBlKEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSwgR1NUX0FQUF9TVFJFQU1f
VFlQRV9TRUVLQUJMRSk7CisKKyAgICBnc3RfYXBwX3NyY19zZXRfbWF4X2J5dGVzKEdTVF9BUFBf
U1JDKHN0cmVhbS0+YXBwc3JjKSwgMiAqIFdURjo6TUIpOworICAgIGdfb2JqZWN0X3NldChHX09C
SkVDVChzdHJlYW0tPmFwcHNyYyksICJibG9jayIsIEZBTFNFLCAibWluLXBlcmNlbnQiLCAyMCwg
bnVsbHB0cik7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7
CisgICAgcHJpdi0+c3RyZWFtcy5wcmVwZW5kKHN0cmVhbSk7CisgICAgR1NUX09CSkVDVF9VTkxP
Q0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisKKyAgICBnc3RfYmluX2FkZChHU1RfQklOKG1f
d2ViS2l0TWVkaWFTcmMuZ2V0KCkpLCBzdHJlYW0tPmFwcHNyYyk7CisgICAgZ3N0X2VsZW1lbnRf
c3luY19zdGF0ZV93aXRoX3BhcmVudChzdHJlYW0tPmFwcHNyYyk7CisKKyAgICByZXR1cm4gTWVk
aWFTb3VyY2VQcml2YXRlOjpPazsKK30KKwordm9pZCBQbGF5YmFja1BpcGVsaW5lOjpyZW1vdmVT
b3VyY2VCdWZmZXIoUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IHNvdXJjZUJ1
ZmZlclByaXZhdGUpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAg
R1NUX0RFQlVHX09CSkVDVChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCAiRWxlbWVudCByZW1vdmVk
IGZyb20gTWVkaWFTb3VyY2UiKTsKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJLaXRNZWRpYVNy
Yy5nZXQoKSk7CisgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gbV93ZWJLaXRNZWRp
YVNyYy0+cHJpdjsKKyAgICBTdHJlYW0qIHN0cmVhbSA9IG51bGxwdHI7CisgICAgRGVxdWU8U3Ry
ZWFtKj46Oml0ZXJhdG9yIHN0cmVhbVBvc2l0aW9uID0gcHJpdi0+c3RyZWFtcy5iZWdpbigpOwor
CisgICAgZm9yICg7IHN0cmVhbVBvc2l0aW9uICE9IHByaXYtPnN0cmVhbXMuZW5kKCk7ICsrc3Ry
ZWFtUG9zaXRpb24pIHsKKyAgICAgICAgaWYgKCgqc3RyZWFtUG9zaXRpb24pLT5zb3VyY2VCdWZm
ZXIgPT0gc291cmNlQnVmZmVyUHJpdmF0ZS5nZXQoKSkgeworICAgICAgICAgICAgc3RyZWFtID0g
KnN0cmVhbVBvc2l0aW9uOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgaWYgKHN0cmVhbSkKKyAgICAgICAgcHJpdi0+c3RyZWFtcy5yZW1vdmUoc3RyZWFtUG9zaXRp
b24pOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpOworCisg
ICAgaWYgKHN0cmVhbSkKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNGcmVlU3RyZWFtKG1fd2ViS2l0
TWVkaWFTcmMuZ2V0KCksIHN0cmVhbSk7Cit9CisKK3ZvaWQgUGxheWJhY2tQaXBlbGluZTo6YXR0
YWNoVHJhY2soUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IHNvdXJjZUJ1ZmZl
clByaXZhdGUsIFJlZlB0cjxUcmFja1ByaXZhdGVCYXNlPiB0cmFja1ByaXZhdGUsIEdzdFN0cnVj
dHVyZSogc3RydWN0dXJlLCBHc3RDYXBzKiBjYXBzKQoreworICAgIFdlYktpdE1lZGlhU3JjKiB3
ZWJLaXRNZWRpYVNyYyA9IG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCk7CisKKyAgICBHU1RfT0JKRUNU
X0xPQ0sod2ViS2l0TWVkaWFTcmMpOworICAgIFN0cmVhbSogc3RyZWFtID0gZ2V0U3RyZWFtQnlT
b3VyY2VCdWZmZXJQcml2YXRlKHdlYktpdE1lZGlhU3JjLCBzb3VyY2VCdWZmZXJQcml2YXRlLmdl
dCgpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBBU1NF
UlQoc3RyZWFtKTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisgICAg
dW5zaWduZWQgcGFkSWQgPSBzdHJlYW0tPnBhcmVudC0+cHJpdi0+bnVtYmVyT2ZQYWRzOworICAg
IHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1iZXJPZlBhZHMrKzsKKyAgICBHU1RfT0JKRUNUX1VO
TE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBjb25zdCBnY2hhciogbWVkaWFUeXBlID0gZ3N0
X3N0cnVjdHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOworCisgICAgR1NUX0RFQlVHX09CSkVDVCh3
ZWJLaXRNZWRpYVNyYywgIkNvbmZpZ3VyZWQgdHJhY2sgJXM6IGFwcHNyYz0lcywgcGFkSWQ9JXUs
IG1lZGlhVHlwZT0lcyIsIHRyYWNrUHJpdmF0ZS0+aWQoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCBHU1RfRUxFTUVOVF9OQU1FKHN0cmVhbS0+YXBwc3JjKSwgcGFkSWQsIG1lZGlhVHlwZSk7CisK
KyAgICBHVW5pcXVlUHRyPGdjaGFyPiBwYXJzZXJCaW5OYW1lKGdfc3RyZHVwX3ByaW50Zigic3Ry
ZWFtcGFyc2VyJXUiLCBwYWRJZCkpOworCisgICAgaWYgKCFnX3N0cmNtcDAobWVkaWFUeXBlLCAi
dmlkZW8veC1oMjY0IikpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBmaWx0ZXJDYXBzID0g
YWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtaDI2NCIsICJhbGlnbm1lbnQi
LCBHX1RZUEVfU1RSSU5HLCAiYXUiLCBudWxscHRyKSk7CisgICAgICAgIEdzdEVsZW1lbnQqIGNh
cHNmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImNhcHNmaWx0ZXIiLCBudWxscHRy
KTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KGNhcHNmaWx0ZXIsICJjYXBzIiwgZmlsdGVyQ2Fwcy5n
ZXQoKSwgbnVsbHB0cik7CisKKyAgICAgICAgc3RyZWFtLT5wYXJzZXIgPSBnc3RfYmluX25ldyhw
YXJzZXJCaW5OYW1lLmdldCgpKTsKKworICAgICAgICBHc3RFbGVtZW50KiBwYXJzZXIgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoImgyNjRwYXJzZSIsIG51bGxwdHIpOworICAgICAgICBnc3Rf
YmluX2FkZF9tYW55KEdTVF9CSU4oc3RyZWFtLT5wYXJzZXIpLCBwYXJzZXIsIGNhcHNmaWx0ZXIs
IG51bGxwdHIpOworICAgICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHMocGFyc2VyLCAic3JjIiwg
Y2Fwc2ZpbHRlciwgInNpbmsiKTsKKworICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRv
cHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHBhcnNlciwgInNpbmsiKSk7CisgICAg
ICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3
KCJzaW5rIiwgcGFkLmdldCgpKSk7CisKKyAgICAgICAgcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVt
ZW50X2dldF9zdGF0aWNfcGFkKGNhcHNmaWx0ZXIsICJzcmMiKSk7CisgICAgICAgIGdzdF9lbGVt
ZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3KCJzcmMiLCBwYWQu
Z2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWVkaWFUeXBlLCAidmlkZW8veC1o
MjY1IikpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBmaWx0ZXJDYXBzID0gYWRvcHRHUmVm
KGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtaDI2NSIsICJhbGlnbm1lbnQiLCBHX1RZUEVf
U1RSSU5HLCAiYXUiLCBudWxscHRyKSk7CisgICAgICAgIEdzdEVsZW1lbnQqIGNhcHNmaWx0ZXIg
PSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImNhcHNmaWx0ZXIiLCBudWxscHRyKTsKKyAgICAg
ICAgZ19vYmplY3Rfc2V0KGNhcHNmaWx0ZXIsICJjYXBzIiwgZmlsdGVyQ2Fwcy5nZXQoKSwgbnVs
bHB0cik7CisKKyAgICAgICAgc3RyZWFtLT5wYXJzZXIgPSBnc3RfYmluX25ldyhwYXJzZXJCaW5O
YW1lLmdldCgpKTsKKworICAgICAgICBHc3RFbGVtZW50KiBwYXJzZXIgPSBnc3RfZWxlbWVudF9m
YWN0b3J5X21ha2UoImgyNjVwYXJzZSIsIG51bGxwdHIpOworICAgICAgICBnc3RfYmluX2FkZF9t
YW55KEdTVF9CSU4oc3RyZWFtLT5wYXJzZXIpLCBwYXJzZXIsIGNhcHNmaWx0ZXIsIG51bGxwdHIp
OworICAgICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHMocGFyc2VyLCAic3JjIiwgY2Fwc2ZpbHRl
ciwgInNpbmsiKTsKKworICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdz
dF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHBhcnNlciwgInNpbmsiKSk7CisgICAgICAgIGdzdF9l
bGVtZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwg
cGFkLmdldCgpKSk7CisKKyAgICAgICAgcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9z
dGF0aWNfcGFkKGNhcHNmaWx0ZXIsICJzcmMiKSk7CisgICAgICAgIGdzdF9lbGVtZW50X2FkZF9w
YWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3KCJzcmMiLCBwYWQuZ2V0KCkpKTsK
KyAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWVkaWFUeXBlLCAiYXVkaW8vbXBlZyIpKSB7Cisg
ICAgICAgIGdpbnQgbXBlZ3ZlcnNpb24gPSAtMTsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRf
aW50KHN0cnVjdHVyZSwgIm1wZWd2ZXJzaW9uIiwgJm1wZWd2ZXJzaW9uKTsKKworICAgICAgICBH
c3RFbGVtZW50KiBwYXJzZXI7CisgICAgICAgIGlmIChtcGVndmVyc2lvbiA9PSAxKQorICAgICAg
ICAgICAgcGFyc2VyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJtcGVnYXVkaW9wYXJzZSIs
IG51bGxwdHIpOworICAgICAgICBlbHNlIGlmIChtcGVndmVyc2lvbiA9PSAyIHx8IG1wZWd2ZXJz
aW9uID09IDQpCisgICAgICAgICAgICBwYXJzZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2Uo
ImFhY3BhcnNlIiwgbnVsbHB0cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworCisgICAgICAgIHN0cmVhbS0+cGFyc2VyID0gZ3N0X2Jpbl9uZXcocGFy
c2VyQmluTmFtZS5nZXQoKSk7CisgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4oc3RyZWFtLT5w
YXJzZXIpLCBwYXJzZXIpOworCisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdS
ZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocGFyc2VyLCAic2luayIpKTsKKyAgICAgICAg
Z3N0X2VsZW1lbnRfYWRkX3BhZChzdHJlYW0tPnBhcnNlciwgZ3N0X2dob3N0X3BhZF9uZXcoInNp
bmsiLCBwYWQuZ2V0KCkpKTsKKworICAgICAgICBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQocGFyc2VyLCAic3JjIikpOworICAgICAgICBnc3RfZWxlbWVudF9hZGRf
cGFkKHN0cmVhbS0+cGFyc2VyLCBnc3RfZ2hvc3RfcGFkX25ldygic3JjIiwgcGFkLmdldCgpKSk7
CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1lZGlhVHlwZSwgInZpZGVvL3gtdnA5IikpCisg
ICAgICAgIHN0cmVhbS0+cGFyc2VyID0gbnVsbHB0cjsKKyAgICBlbHNlIHsKKyAgICAgICAgR1NU
X0VSUk9SX09CSkVDVChzdHJlYW0tPnBhcmVudCwgIlVuc3VwcG9ydGVkIG1lZGlhIGZvcm1hdDog
JXMiLCBtZWRpYVR5cGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1NUX09CSkVD
VF9MT0NLKHdlYktpdE1lZGlhU3JjKTsKKyAgICBzdHJlYW0tPnR5cGUgPSBVbmtub3duOworICAg
IEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlhU3JjKTsKKworICAgIEdSZWZQdHI8R3N0UGFk
PiBzb3VyY2VQYWQ7CisgICAgaWYgKHN0cmVhbS0+cGFyc2VyKSB7CisgICAgICAgIGdzdF9iaW5f
YWRkKEdTVF9CSU4oc3RyZWFtLT5wYXJlbnQpLCBzdHJlYW0tPnBhcnNlcik7CisgICAgICAgIGdz
dF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoc3RyZWFtLT5wYXJzZXIpOworCisgICAg
ICAgIEdSZWZQdHI8R3N0UGFkPiBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9z
dGF0aWNfcGFkKHN0cmVhbS0+cGFyc2VyLCAic2luayIpKTsKKyAgICAgICAgc291cmNlUGFkID0g
YWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHN0cmVhbS0+YXBwc3JjLCAic3Jj
IikpOworICAgICAgICBnc3RfcGFkX2xpbmsoc291cmNlUGFkLmdldCgpLCBzaW5rUGFkLmdldCgp
KTsKKyAgICAgICAgc291cmNlUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNf
cGFkKHN0cmVhbS0+cGFyc2VyLCAic3JjIikpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSwgIlN0cmVhbSBvZiB0eXBlICVzIGRv
ZXNuJ3QgcmVxdWlyZSBhIHBhcnNlciBiaW4iLCBtZWRpYVR5cGUpOworICAgICAgICBzb3VyY2VQ
YWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoc3RyZWFtLT5hcHBzcmMs
ICJzcmMiKSk7CisgICAgfQorICAgIEFTU0VSVChzb3VyY2VQYWQpOworCisgICAgLy8gRklYTUU6
IElzIHBhZElkIHRoZSBiZXN0IHdheSB0byBpZGVudGlmeSB0aGUgU3RyZWFtPyBXaGF0IGFib3V0
IHRyYWNrSWQ/CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qoc291cmNlUGFkLmdldCgp
KSwgInBhZElkIiwgR0lOVF9UT19QT0lOVEVSKHBhZElkKSk7CisgICAgd2ViS2l0TWVkaWFTcmNM
aW5rUGFyc2VyKHNvdXJjZVBhZC5nZXQoKSwgY2Fwcywgc3RyZWFtKTsKKworICAgIEFTU0VSVChz
dHJlYW0tPnBhcmVudC0+cHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlKTsKKyAgICBpbnQgc2lnbmFs
ID0gLTE7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVkaWFTcmMpOworICAgIGlmIChn
X3N0cl9oYXNfcHJlZml4KG1lZGlhVHlwZSwgImF1ZGlvIikpIHsKKyAgICAgICAgc3RyZWFtLT50
eXBlID0gQXVkaW87CisgICAgICAgIHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1iZXJPZkF1ZGlv
U3RyZWFtcysrOworICAgICAgICBzaWduYWwgPSBTSUdOQUxfQVVESU9fQ0hBTkdFRDsKKyAgICAg
ICAgc3RyZWFtLT5hdWRpb1RyYWNrID0gUmVmUHRyPFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRl
R1N0cmVhbWVyPihzdGF0aWNfY2FzdDxXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
cio+KHRyYWNrUHJpdmF0ZS5nZXQoKSkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZp
eChtZWRpYVR5cGUsICJ2aWRlbyIpKSB7CisgICAgICAgIHN0cmVhbS0+dHlwZSA9IFZpZGVvOwor
ICAgICAgICBzdHJlYW0tPnBhcmVudC0+cHJpdi0+bnVtYmVyT2ZWaWRlb1N0cmVhbXMrKzsKKyAg
ICAgICAgc2lnbmFsID0gU0lHTkFMX1ZJREVPX0NIQU5HRUQ7CisgICAgICAgIHN0cmVhbS0+dmlk
ZW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4oc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqPih0cmFja1ByaXZh
dGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2hhc19wcmVmaXgobWVkaWFUeXBlLCAi
dGV4dCIpKSB7CisgICAgICAgIHN0cmVhbS0+dHlwZSA9IFRleHQ7CisgICAgICAgIHN0cmVhbS0+
cGFyZW50LT5wcml2LT5udW1iZXJPZlRleHRTdHJlYW1zKys7CisgICAgICAgIHNpZ25hbCA9IFNJ
R05BTF9URVhUX0NIQU5HRUQ7CisKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgdGV4dCB0cmFj
a3MuCisgICAgfQorICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlhU3JjKTsKKworICAg
IGlmIChzaWduYWwgIT0gLTEpCisgICAgICAgIGdfc2lnbmFsX2VtaXQoR19PQkpFQ1Qoc3RyZWFt
LT5wYXJlbnQpLCB3ZWJLaXRNZWRpYVNyY1NpZ25hbHNbc2lnbmFsXSwgMCwgbnVsbHB0cik7Cit9
CisKK3ZvaWQgUGxheWJhY2tQaXBlbGluZTo6cmVhdHRhY2hUcmFjayhSZWZQdHI8U291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZSwgUmVmUHRyPFRyYWNrUHJp
dmF0ZUJhc2U+IHRyYWNrUHJpdmF0ZSkKK3sKKyAgICBHU1RfREVCVUcoIlJlLWF0dGFjaGluZyB0
cmFjayIpOworCisgICAgLy8gRklYTUU6IE1heWJlIHJlbW92ZSB0aGlzIG1ldGhvZC4gTm93IHRo
ZSBjYXBzIGNoYW5nZSBpcyBtYW5hZ2VkIGJ5IGdzdF9hcHBzcmNfcHVzaF9zYW1wbGUoKSBpbiBl
bnF1ZXVlU2FtcGxlKCkKKyAgICAvLyBhbmQgZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1Nh
bXBsZXMoKS4KKworICAgIFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYyA9IG1fd2ViS2l0
TWVkaWFTcmMuZ2V0KCk7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVkaWFTcmMpOwor
ICAgIFN0cmVhbSogc3RyZWFtID0gZ2V0U3RyZWFtQnlTb3VyY2VCdWZmZXJQcml2YXRlKHdlYktp
dE1lZGlhU3JjLCBzb3VyY2VCdWZmZXJQcml2YXRlLmdldCgpKTsKKyAgICBHU1RfT0JKRUNUX1VO
TE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBBU1NFUlQoc3RyZWFtICYmIHN0cmVhbS0+dHlw
ZSAhPSBJbnZhbGlkKTsKKworICAgIC8vIFRoZSBjYXBzIGNoYW5nZSBpcyBtYW5hZ2VkIGJ5IGdz
dF9hcHBzcmNfcHVzaF9zYW1wbGUoKSBpbiBlbnF1ZXVlU2FtcGxlKCkgYW5kCisgICAgLy8gZmx1
c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMoKSwgc28gdGhlIGNhcHMgYXJlbid0IHNl
dCBmcm9tIGhlcmUuCisgICAgR1JlZlB0cjxHc3RDYXBzPiBhcHBzcmNDYXBzID0gYWRvcHRHUmVm
KGdzdF9hcHBfc3JjX2dldF9jYXBzKEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSkpOworICAg
IGNvbnN0IGdjaGFyKiBtZWRpYVR5cGUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKGdzdF9jYXBz
X2dldF9zdHJ1Y3R1cmUoYXBwc3JjQ2Fwcy5nZXQoKSwgMCkpOworICAgIGludCBzaWduYWwgPSAt
MTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisgICAgaWYgKGdfc3Ry
X2hhc19wcmVmaXgobWVkaWFUeXBlLCAiYXVkaW8iKSkgeworICAgICAgICBBU1NFUlQoc3RyZWFt
LT50eXBlID09IEF1ZGlvKTsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX0FVRElPX0NIQU5HRUQ7
CisgICAgICAgIHN0cmVhbS0+YXVkaW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpBdWRpb1RyYWNr
UHJpdmF0ZUdTdHJlYW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVH
U3RyZWFtZXIqPih0cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2hh
c19wcmVmaXgobWVkaWFUeXBlLCAidmlkZW8iKSkgeworICAgICAgICBBU1NFUlQoc3RyZWFtLT50
eXBlID09IFZpZGVvKTsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX1ZJREVPX0NIQU5HRUQ7Cisg
ICAgICAgIHN0cmVhbS0+dmlkZW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpWaWRlb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXIqPih0cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2hhc19w
cmVmaXgobWVkaWFUeXBlLCAidGV4dCIpKSB7CisgICAgICAgIEFTU0VSVChzdHJlYW0tPnR5cGUg
PT0gVGV4dCk7CisgICAgICAgIHNpZ25hbCA9IFNJR05BTF9URVhUX0NIQU5HRUQ7CisKKyAgICAg
ICAgLy8gRklYTUU6IFN1cHBvcnQgdGV4dCB0cmFja3MuCisgICAgfQorICAgIEdTVF9PQkpFQ1Rf
VU5MT0NLKHdlYktpdE1lZGlhU3JjKTsKKworICAgIGlmIChzaWduYWwgIT0gLTEpCisgICAgICAg
IGdfc2lnbmFsX2VtaXQoR19PQkpFQ1Qoc3RyZWFtLT5wYXJlbnQpLCB3ZWJLaXRNZWRpYVNyY1Np
Z25hbHNbc2lnbmFsXSwgMCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgUGxheWJhY2tQaXBlbGluZTo6
bm90aWZ5RHVyYXRpb25DaGFuZ2VkKCkKK3sKKyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2Uo
R1NUX0VMRU1FTlQobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSksIGdzdF9tZXNzYWdlX25ld19kdXJh
dGlvbl9jaGFuZ2VkKEdTVF9PQkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSkpKTsKKyAgICAv
LyBXZWJLaXRNZWRpYVNyYyB3aWxsIGFzayBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0Ug
Zm9yIHRoZSBuZXcgZHVyYXRpb24gbGF0ZXIsIHdoZW4gc29tZWJvZHkgYXNrcyBmb3IgaXQuCit9
CisKK3ZvaWQgUGxheWJhY2tQaXBlbGluZTo6bWFya0VuZE9mU3RyZWFtKE1lZGlhU291cmNlUHJp
dmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMpCit7CisgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBw
cml2ID0gbV93ZWJLaXRNZWRpYVNyYy0+cHJpdjsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV93
ZWJLaXRNZWRpYVNyYy5nZXQoKSwgIkhhdmUgRU9TIik7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0so
bV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgYm9vbCBhbGxUcmFja3NDb25maWd1cmVkID0g
cHJpdi0+YWxsVHJhY2tzQ29uZmlndXJlZDsKKyAgICBpZiAoIWFsbFRyYWNrc0NvbmZpZ3VyZWQp
CisgICAgICAgIHByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQgPSB0cnVlOworICAgIEdTVF9PQkpF
Q1RfVU5MT0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpOworCisgICAgaWYgKCFhbGxUcmFja3ND
b25maWd1cmVkKSB7CisgICAgICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyhHU1RfRUxFTUVO
VChtX3dlYktpdE1lZGlhU3JjLmdldCgpKSk7CisgICAgICAgIHdlYktpdE1lZGlhU3JjRG9Bc3lu
Y0RvbmUobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgfQorCisgICAgVmVjdG9yPEdzdEFw
cFNyYyo+IGFwcHNyY3M7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJLaXRNZWRpYVNyYy5n
ZXQoKSk7CisgICAgZm9yIChTdHJlYW0qIHN0cmVhbSA6IHByaXYtPnN0cmVhbXMpIHsKKyAgICAg
ICAgaWYgKHN0cmVhbS0+YXBwc3JjKQorICAgICAgICAgICAgYXBwc3Jjcy5hcHBlbmQoR1NUX0FQ
UF9TUkMoc3RyZWFtLT5hcHBzcmMpKTsKKyAgICB9CisgICAgR1NUX09CSkVDVF9VTkxPQ0sobV93
ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisKKyAgICBmb3IgKEdzdEFwcFNyYyogYXBwc3JjIDogYXBw
c3JjcykKKyAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShhcHBzcmMpOworfQorCit2
b2lkIFBsYXliYWNrUGlwZWxpbmU6OmZsdXNoQW5kRW5xdWV1ZU5vbkRpc3BsYXlpbmdTYW1wbGVz
KFZlY3RvcjxSZWZQdHI8TWVkaWFTYW1wbGU+PiBzYW1wbGVzKQoreworICAgIEFTU0VSVChXVEY6
OmlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghc2FtcGxlcy5zaXplKCkpIHsKKyAgICAgICAg
R1NUX0RFQlVHKCJObyBzYW1wbGVzLCB0cmFja0lkIHVua25vd24iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEF0b21pY1N0cmluZyB0cmFja0lkID0gc2FtcGxlc1swXS0+dHJhY2tJ
RCgpOworICAgIEdTVF9ERUJVRygiZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXM6
IHRyYWNrSWQ9JXMgUFRTWzBdPSVmIC4uLiBQVFNbbl09JWYiLCB0cmFja0lkLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCksIHNhbXBsZXNbMF0tPnByZXNlbnRhdGlvblRpbWUoKS50b0Zsb2F0KCksIHNh
bXBsZXNbc2FtcGxlcy5zaXplKCktMV0tPnByZXNlbnRhdGlvblRpbWUoKS50b0Zsb2F0KCkpOwor
CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCAiRmx1c2hpbmcg
YW5kIHJlLWVucXVlaW5nICV6dSBzYW1wbGVzIGZvciBzdHJlYW0gJXMiLCBzYW1wbGVzLnNpemUo
KSwgdHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIEdTVF9PQkpFQ1RfTE9D
SyhtX3dlYktpdE1lZGlhU3JjLmdldCgpKTsKKyAgICBTdHJlYW0qIHN0cmVhbSA9IGdldFN0cmVh
bUJ5VHJhY2tJZChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCB0cmFja0lkKTsKKworICAgIGlmICgh
c3RyZWFtKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFzdHJlYW0tPnNvdXJjZUJ1
ZmZlci0+aXNSZWFkeUZvck1vcmVTYW1wbGVzKHRyYWNrSWQpKSB7CisgICAgICAgIEdTVF9ERUJV
RygiZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXM6IHNraXAgYWRkaW5nIG5ldyBz
YW1wbGUgZm9yIHRyYWNrSWQ9JXMsIFNCIGlzIG5vdCByZWFkeSB5ZXQiLCB0cmFja0lkLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3dlYktpdE1l
ZGlhU3JjLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdzdEVsZW1lbnQq
IGFwcHNyYyA9IHN0cmVhbS0+YXBwc3JjOworICAgIE1lZGlhVGltZSBsYXN0RW5xdWV1ZWRUaW1l
ID0gc3RyZWFtLT5sYXN0RW5xdWV1ZWRUaW1lOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fd2Vi
S2l0TWVkaWFTcmMuZ2V0KCkpOworCisgICAgaWYgKCFtX3dlYktpdE1lZGlhU3JjLT5wcml2LT5t
ZWRpYVBsYXllclByaXZhdGUtPnNlZWtpbmcoKSkKKyAgICAgICAgR1NUX0RFQlVHKCJmbHVzaEFu
ZEVucXVldWVOb25EaXNwbGF5aW5nU2FtcGxlczogdHJhY2tJZD0lcyBwaXBlbGluZSBuZWVkcyBm
bHVzaGluZy4iLCB0cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgZm9yIChj
b25zdCBSZWZQdHI8TWVkaWFTYW1wbGU+JiBzYW1wbGUgOiBzYW1wbGVzKSB7CisgICAgICAgIEdT
dHJlYW1lck1lZGlhU2FtcGxlKiBnU3RyZWFtZXJNZWRpYVNhbXBsZSA9IHN0YXRpY19jYXN0PEdT
dHJlYW1lck1lZGlhU2FtcGxlKj4oc2FtcGxlLmdldCgpKTsKKyAgICAgICAgR3N0QnVmZmVyKiBi
dWZmZXIgPSBudWxscHRyOworICAgICAgICBpZiAoZ1N0cmVhbWVyTWVkaWFTYW1wbGUtPnNhbXBs
ZSgpKQorICAgICAgICAgICAgYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKGdTdHJlYW1l
ck1lZGlhU2FtcGxlLT5zYW1wbGUoKSk7CisgICAgICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAg
ICAgIEdzdFNhbXBsZSogZ3N0U2FtcGxlID0gZ3N0X3NhbXBsZV9yZWYoZ1N0cmVhbWVyTWVkaWFT
YW1wbGUtPnNhbXBsZSgpKTsKKyAgICAgICAgICAgIGxhc3RFbnF1ZXVlZFRpbWUgPSBnU3RyZWFt
ZXJNZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpOworCisgICAgICAgICAgICBHU1RfQlVG
RkVSX0ZMQUdfU0VUKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RFQ09ERV9PTkxZKTsKKyAgICAg
ICAgICAgIHB1c2hTYW1wbGUoR1NUX0FQUF9TUkMoYXBwc3JjKSwgZ3N0U2FtcGxlKTsKKyAgICAg
ICAgICAgIC8vIGdzdF9hcHBfc3JjX3B1c2hfc2FtcGxlKCkgdXNlcyB0cmFuc2Zlci1ub25lIGZv
ciBnc3RTYW1wbGUuCisKKyAgICAgICAgICAgIGdzdF9zYW1wbGVfdW5yZWYoZ3N0U2FtcGxlKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJLaXRNZWRpYVNyYy5n
ZXQoKSk7CisgICAgc3RyZWFtLT5sYXN0RW5xdWV1ZWRUaW1lID0gbGFzdEVucXVldWVkVGltZTsK
KyAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3dlYktpdE1lZGlhU3JjLmdldCgpKTsKK30KKwordm9p
ZCBQbGF5YmFja1BpcGVsaW5lOjplbnF1ZXVlU2FtcGxlKFJlZlB0cjxNZWRpYVNhbXBsZT4gbWVk
aWFTYW1wbGUpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgQXRv
bWljU3RyaW5nIHRyYWNrSWQgPSBtZWRpYVNhbXBsZS0+dHJhY2tJRCgpOworCisgICAgR1NUX1RS
QUNFKCJlbnF1ZWluZyBzYW1wbGUgdHJhY2tJZD0lcyBQVFM9JWYgcHJlc2VudGF0aW9uU2l6ZT0l
LjBmeCUuMGYgYXQgJSIgR1NUX1RJTUVfRk9STUFUICIgZHVyYXRpb246ICUiIEdTVF9USU1FX0ZP
Uk1BVCwKKyAgICAgICAgdHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtZWRpYVNhbXBs
ZS0+cHJlc2VudGF0aW9uVGltZSgpLnRvRmxvYXQoKSwKKyAgICAgICAgbWVkaWFTYW1wbGUtPnBy
ZXNlbnRhdGlvblNpemUoKS53aWR0aCgpLCBtZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uU2l6ZSgp
LmhlaWdodCgpLAorICAgICAgICBHU1RfVElNRV9BUkdTKFdlYkNvcmU6OnRvR3N0Q2xvY2tUaW1l
KG1lZGlhU2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkudG9Eb3VibGUoKSkpLAorICAgICAgICBH
U1RfVElNRV9BUkdTKFdlYkNvcmU6OnRvR3N0Q2xvY2tUaW1lKG1lZGlhU2FtcGxlLT5kdXJhdGlv
bigpLnRvRG91YmxlKCkpKSk7CisKKyAgICBTdHJlYW0qIHN0cmVhbSA9IGdldFN0cmVhbUJ5VHJh
Y2tJZChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCB0cmFja0lkKTsKKworICAgIGlmICghc3RyZWFt
KSB7CisgICAgICAgIEdTVF9XQVJOSU5HKCJObyBzdHJlYW0hIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIXN0cmVhbS0+c291cmNlQnVmZmVyLT5pc1JlYWR5Rm9yTW9yZVNh
bXBsZXModHJhY2tJZCkpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJlbnF1ZXVlU2FtcGxlOiBza2lw
IGFkZGluZyBuZXcgc2FtcGxlIGZvciB0cmFja0lkPSVzLCBTQiBpcyBub3QgcmVhZHkgeWV0Iiwg
dHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEdzdEVsZW1lbnQqIGFwcHNyYyA9IHN0cmVhbS0+YXBwc3JjOworICAgIE1lZGlhVGlt
ZSBsYXN0RW5xdWV1ZWRUaW1lID0gc3RyZWFtLT5sYXN0RW5xdWV1ZWRUaW1lOworCisgICAgR1N0
cmVhbWVyTWVkaWFTYW1wbGUqIHNhbXBsZSA9IHN0YXRpY19jYXN0PEdTdHJlYW1lck1lZGlhU2Ft
cGxlKj4obWVkaWFTYW1wbGUuZ2V0KCkpOworICAgIGlmIChzYW1wbGUtPnNhbXBsZSgpICYmIGdz
dF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUtPnNhbXBsZSgpKSkgeworICAgICAgICBHUmVmUHRy
PEdzdFNhbXBsZT4gZ3N0U2FtcGxlID0gc2FtcGxlLT5zYW1wbGUoKTsKKyAgICAgICAgR3N0QnVm
ZmVyKiBidWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoZ3N0U2FtcGxlLmdldCgpKTsKKyAg
ICAgICAgbGFzdEVucXVldWVkVGltZSA9IHNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpOworCisg
ICAgICAgIEdTVF9CVUZGRVJfRkxBR19VTlNFVChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ERUNP
REVfT05MWSk7CisgICAgICAgIHB1c2hTYW1wbGUoR1NUX0FQUF9TUkMoYXBwc3JjKSwgZ3N0U2Ft
cGxlLmdldCgpKTsKKyAgICAgICAgLy8gZ3N0X2FwcF9zcmNfcHVzaF9zYW1wbGUoKSB1c2VzIHRy
YW5zZmVyLW5vbmUgZm9yIGdzdFNhbXBsZS4KKworICAgICAgICBzdHJlYW0tPmxhc3RFbnF1ZXVl
ZFRpbWUgPSBsYXN0RW5xdWV1ZWRUaW1lOworICAgIH0KK30KKworR3N0RWxlbWVudCogUGxheWJh
Y2tQaXBlbGluZTo6cGlwZWxpbmUoKQoreworICAgIGlmICghbV93ZWJLaXRNZWRpYVNyYyB8fCAh
R1NUX0VMRU1FTlRfUEFSRU5UKEdTVF9FTEVNRU5UKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gR1NUX0VMRU1FTlRfUEFSRU5U
KEdTVF9FTEVNRU5UX1BBUkVOVChHU1RfRUxFTUVOVChtX3dlYktpdE1lZGlhU3JjLmdldCgpKSkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1F
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9tc2UvUGxheWJhY2tQaXBlbGluZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODEwZmIxM2Nm
YjY3ZDMwM2YzMzY2NGJiMDUyNmQ3YjY1ZjllYzFmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGlu
ZS5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJ
QV9TT1VSQ0UpCisKKy8vIFBsYXliYWNrUGlwZWxpbmUgaXMgKHNvcnQgb2YpIGEgZnJpZW5kIGNs
YXNzIG9mIFdlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLgorCisjaW5jbHVkZSAiV2ViS2l0TWVk
aWFTb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1l
clByaXZhdGUuaCIKKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0
aW9uLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCituYW1lc3BhY2UgV1RGIHsK
K3RlbXBsYXRlPD4gR1JlZlB0cjxXZWJLaXRNZWRpYVNyYz4gYWRvcHRHUmVmKFdlYktpdE1lZGlh
U3JjKik7Cit0ZW1wbGF0ZTw+IFdlYktpdE1lZGlhU3JjKiByZWZHUHRyPFdlYktpdE1lZGlhU3Jj
PihXZWJLaXRNZWRpYVNyYyopOwordGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxXZWJLaXRNZWRp
YVNyYz4oV2ViS2l0TWVkaWFTcmMqKTsKK307CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ29udGVudFR5cGU7CitjbGFzcyBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOworY2xh
c3MgTWVkaWFTb3VyY2VHU3RyZWFtZXI7CisKK2NsYXNzIFBsYXliYWNrUGlwZWxpbmU6IHB1Ymxp
YyBSZWZDb3VudGVkPFBsYXliYWNrUGlwZWxpbmU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PFBsYXliYWNrUGlwZWxpbmU+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBQbGF5YmFja1BpcGVsaW5lKCkpOworICAgIH0KKworICAgIHZpcnR1YWwgflBsYXli
YWNrUGlwZWxpbmUoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHNldFdlYktpdE1lZGlhU3JjKFdl
YktpdE1lZGlhU3JjKik7CisgICAgV2ViS2l0TWVkaWFTcmMqIHdlYktpdE1lZGlhU3JjKCk7CisK
KyAgICBNZWRpYVNvdXJjZVByaXZhdGU6OkFkZFN0YXR1cyBhZGRTb3VyY2VCdWZmZXIoUmVmUHRy
PFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+KTsKKyAgICB2b2lkIHJlbW92ZVNvdXJjZUJ1
ZmZlcihSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4pOworICAgIHZvaWQgYXR0
YWNoVHJhY2soUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+LCBSZWZQdHI8VHJh
Y2tQcml2YXRlQmFzZT4sIEdzdFN0cnVjdHVyZSosIEdzdENhcHMqKTsKKyAgICB2b2lkIHJlYXR0
YWNoVHJhY2soUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+LCBSZWZQdHI8VHJh
Y2tQcml2YXRlQmFzZT4pOworICAgIHZvaWQgbm90aWZ5RHVyYXRpb25DaGFuZ2VkKCk7CisKKyAg
ICAvLyBGcm9tIE1lZGlhU291cmNlR1N0cmVhbWVyLgorICAgIHZvaWQgbWFya0VuZE9mU3RyZWFt
KE1lZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMpOworCisgICAgLy8gRnJvbSBT
b3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLgorICAgIHZvaWQgZmx1c2hBbmRFbnF1ZXVlTm9u
RGlzcGxheWluZ1NhbXBsZXMoVmVjdG9yPFJlZlB0cjxNZWRpYVNhbXBsZT4+KTsKKyAgICB2b2lk
IGVucXVldWVTYW1wbGUoUmVmUHRyPE1lZGlhU2FtcGxlPik7CisKKyAgICBHc3RFbGVtZW50KiBw
aXBlbGluZSgpOworcHJpdmF0ZToKKyAgICBQbGF5YmFja1BpcGVsaW5lKCkgPSBkZWZhdWx0Owor
ICAgIEdSZWZQdHI8V2ViS2l0TWVkaWFTcmM+IG1fd2ViS2l0TWVkaWFTcmM7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlLgorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292415</attachid>
            <date>2016-10-21 14:39:18 -0700</date>
            <delta_ts>2016-10-25 11:04:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162901-20161021213538.patch</filename>
            <type>text/plain</type>
            <size>25593</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NjM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZThiODhiYjM0M2I1NTBi
ZGRmZGU1YjY2NjZlMWIyMDVmNmM5YmQ1Ni4uNmJlZTEwOTZhNDdiYTc1ZTJkMWRiMjdmMGIwMjlh
Mzk2MWY4YTEzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM1IEBACiAyMDE2LTEwLTA0ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXSBQbGF5YmFjayBwaXBlbGluZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWGFi
aWVyIFJvZHJpZ3Vlei1DYWx2YXIuCisKKyAgICAgICAgRW5jYXBzdWxhdGUgdGhlIHJlc3BvbnNp
YmlsaXR5IHRvIGludGVyYWN0IHdpdGggdGhlIEdTdHJlYW1lciBwbGF5YmFjayBwaXBlbGluZSBh
bmQgdGhlCisgICAgICAgIGRpZmZlcmVudCBzdHJlYW1zIG1hbmFnZWQgYnkgdGhlIFdlYktpdE1l
ZGlhU3JjIGVsZW1lbnQgaW50byBhIG5ldyBQbGF5YmFja1BpcGVsaW5lIGNsYXNzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNw
cDogQWRkZWQuCisgICAgICAgIChnZXRTdHJlYW1CeVRyYWNrSWQpOgorICAgICAgICAoZ2V0U3Ry
ZWFtQnlTb3VyY2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKHB1c2hTYW1wbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxheWJhY2tQaXBlbGluZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrUGlwZWxpbmU6OlBsYXliYWNrUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tQaXBlbGluZTo6flBsYXliYWNrUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tQaXBlbGluZTo6c2V0V2ViS2l0TWVkaWFTcmMpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tQaXBlbGluZTo6d2ViS2l0TWVkaWFTcmMpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tQaXBlbGluZTo6YWRkU291cmNlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrUGlwZWxpbmU6OnJlbW92ZVNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5
YmFja1BpcGVsaW5lOjphdHRhY2hUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Bp
cGVsaW5lOjpyZWF0dGFjaFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrUGlwZWxp
bmU6Om5vdGlmeUR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Bp
cGVsaW5lOjptYXJrRW5kT2ZTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQaXBl
bGluZTo6Zmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxheWJhY2tQaXBlbGluZTo6ZW5xdWV1ZVNhbXBsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1BpcGVsaW5lOjpwaXBlbGluZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmg6IEFkZGVkLgorCisyMDE2LTEwLTA0
ICBFbnJpcXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CisKICAgICAg
ICAgW0dTdHJlYW1lcl1bTVNFXVtFTUVdIE1TRSBzcGVjaWFsaXphdGlvbiBvZiBNZWRpYSBQbGF5
ZXIgUHJpdmF0ZSBmb3IgR1N0cmVhbWVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjI5MDAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGlu
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjFjOGFiYTUwZTlmYTMyNjM1ODU1M2E0ZmY1YjE5NzNiN2VkNTNl
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5jcHAKQEAgLTAsMCArMSw0ODQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNl
bnRyaWN1bGFyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGxheWJhY2tQaXBlbGluZS5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBV
U0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKQorCisjaW5jbHVkZSAiQXVkaW9U
cmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYVNhbXBsZS5o
IgorI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxl
LmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUg
IlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFw
cHNyYy5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR011dGV4
TG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9n
bGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKwor
c3RhdGljIFN0cmVhbSogZ2V0U3RyZWFtQnlUcmFja0lkKFdlYktpdE1lZGlhU3JjKiwgQXRvbWlj
U3RyaW5nKTsKK3N0YXRpYyBTdHJlYW0qIGdldFN0cmVhbUJ5U291cmNlQnVmZmVyUHJpdmF0ZShX
ZWJLaXRNZWRpYVNyYyosIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIqKTsK
Kworc3RhdGljIFN0cmVhbSogZ2V0U3RyZWFtQnlUcmFja0lkKFdlYktpdE1lZGlhU3JjKiBzb3Vy
Y2UsIEF0b21pY1N0cmluZyB0cmFja0lkU3RyaW5nKQoreworICAgIC8vIFdlYktpdE1lZGlhU3Jj
IHNob3VsZCBiZSBsb2NrZWQgYXQgdGhpcyBwb2ludC4KKyAgICBmb3IgKFN0cmVhbSogc3RyZWFt
IDogc291cmNlLT5wcml2LT5zdHJlYW1zKSB7CisgICAgICAgIGlmIChzdHJlYW0tPnR5cGUgIT0g
V2ViQ29yZTo6SW52YWxpZAorICAgICAgICAgICAgJiYgKChzdHJlYW0tPmF1ZGlvVHJhY2sgJiYg
c3RyZWFtLT5hdWRpb1RyYWNrLT5pZCgpID09IHRyYWNrSWRTdHJpbmcpCisgICAgICAgICAgICAg
ICAgfHwgKHN0cmVhbS0+dmlkZW9UcmFjayAmJiBzdHJlYW0tPnZpZGVvVHJhY2stPmlkKCkgPT0g
dHJhY2tJZFN0cmluZykgKSApIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJlYW07CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBTdHJlYW0qIGdldFN0
cmVhbUJ5U291cmNlQnVmZmVyUHJpdmF0ZShXZWJLaXRNZWRpYVNyYyogc291cmNlLCBXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKiBzb3VyY2VCdWZmZXJQcml2YXRlKQorewor
ICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiBzb3VyY2UtPnByaXYtPnN0cmVhbXMpIHsKKyAgICAg
ICAgaWYgKHN0cmVhbS0+c291cmNlQnVmZmVyID09IHNvdXJjZUJ1ZmZlclByaXZhdGUpCisgICAg
ICAgICAgICByZXR1cm4gc3RyZWFtOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
Ly8gRklYTUU6IFVzZSBnc3RfYXBwX3NyY19wdXNoX3NhbXBsZSgpIGluc3RlYWQgd2hlbiB3ZSBz
d2l0Y2ggdG8gdGhlIGFwcHJvcHJpYXRlIEdTdHJlYW1lciB2ZXJzaW9uLgorc3RhdGljIEdzdEZs
b3dSZXR1cm4gcHVzaFNhbXBsZShHc3RBcHBTcmMqIGFwcHNyYywgR3N0U2FtcGxlKiBzYW1wbGUp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoR1NUX0lTX1NBTVBMRShzYW1wbGUpLCBHU1Rf
RkxPV19FUlJPUik7CisKKyAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X3NhbXBsZV9nZXRfY2Fwcyhz
YW1wbGUpOworICAgIGlmIChjYXBzKQorICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2FwcyhhcHBz
cmMsIGNhcHMpOworICAgIGVsc2UKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKGFwcHNyYywg
InJlY2VpdmVkIHNhbXBsZSB3aXRob3V0IGNhcHMiKTsKKworICAgIEdzdEJ1ZmZlciogYnVmZmVy
ID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKHNhbXBsZSk7CisgICAgaWYgKFVOTElLRUxZKCFidWZm
ZXIpKSB7CisgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChhcHBzcmMsICJyZWNlaXZlZCBzYW1w
bGUgd2l0aG91dCBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0K
KworICAgIC8vIGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKCkgc3RlYWxzIHRoZSByZWZlcmVuY2Us
IHdlIG5lZWQgYW4gYWRkaXRpb25hbCBvbmUuCisgICAgcmV0dXJuIGdzdF9hcHBfc3JjX3B1c2hf
YnVmZmVyKGFwcHNyYywgZ3N0X2J1ZmZlcl9yZWYoYnVmZmVyKSk7Cit9CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordm9pZCBQbGF5YmFja1BpcGVsaW5lOjpzZXRXZWJLaXRNZWRpYVNyYyhXZWJL
aXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMpCit7CisgICAgR1NUX0RFQlVHKCJ3ZWJLaXRNZWRp
YVNyYz0lcCIsIHdlYktpdE1lZGlhU3JjKTsKKyAgICBtX3dlYktpdE1lZGlhU3JjID0gd2ViS2l0
TWVkaWFTcmM7Cit9CisKK1dlYktpdE1lZGlhU3JjKiBQbGF5YmFja1BpcGVsaW5lOjp3ZWJLaXRN
ZWRpYVNyYygpCit7CisgICAgcmV0dXJuIG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCk7Cit9CisKK01l
ZGlhU291cmNlUHJpdmF0ZTo6QWRkU3RhdHVzIFBsYXliYWNrUGlwZWxpbmU6OmFkZFNvdXJjZUJ1
ZmZlcihSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJp
dmF0ZSkKK3sKKyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3dlYktpdE1lZGlh
U3JjLT5wcml2OworCisgICAgaWYgKHByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQpIHsKKyAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCAiQWRkaW5nIG5ldyBz
b3VyY2UgYnVmZmVycyBhZnRlciBmaXJzdCBkYXRhIG5vdCBzdXBwb3J0ZWQgeWV0Iik7CisgICAg
ICAgIHJldHVybiBNZWRpYVNvdXJjZVByaXZhdGU6Ok5vdFN1cHBvcnRlZDsKKyAgICB9CisKKyAg
ICBHU1RfREVCVUdfT0JKRUNUKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksICJTdGF0ZSAlZCIsIGlu
dChHU1RfU1RBVEUobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSkpKTsKKworICAgIFN0cmVhbSogc3Ry
ZWFtID0gbmV3IFN0cmVhbSB7IDAgfTsKKyAgICBzdHJlYW0tPnBhcmVudCA9IG1fd2ViS2l0TWVk
aWFTcmMuZ2V0KCk7CisgICAgc3RyZWFtLT5hcHBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21h
a2UoImFwcHNyYyIsIG51bGxwdHIpOworICAgIHN0cmVhbS0+YXBwc3JjTmVlZERhdGFGbGFnID0g
ZmFsc2U7CisgICAgc3RyZWFtLT5zb3VyY2VCdWZmZXIgPSBzb3VyY2VCdWZmZXJQcml2YXRlLmdl
dCgpOworCisgICAgLy8gTm8gdHJhY2sgaGFzIGJlZW4gYXR0YWNoZWQgeWV0LgorICAgIHN0cmVh
bS0+dHlwZSA9IEludmFsaWQ7CisgICAgc3RyZWFtLT5wYXJzZXIgPSBudWxscHRyOworICAgIHN0
cmVhbS0+Y2FwcyA9IG51bGxwdHI7CisgICAgc3RyZWFtLT5hdWRpb1RyYWNrID0gbnVsbHB0cjsK
KyAgICBzdHJlYW0tPnZpZGVvVHJhY2sgPSBudWxscHRyOworICAgIHN0cmVhbS0+cHJlc2VudGF0
aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOworICAgIHN0cmVhbS0+bGFzdEVucXVldWVk
VGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKworICAgIGdzdF9hcHBfc3JjX3NldF9j
YWxsYmFja3MoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpLCAmZW5hYmxlZEFwcHNyY0NhbGxi
YWNrcywgc3RyZWFtLT5wYXJlbnQsIG51bGxwdHIpOworICAgIGdzdF9hcHBfc3JjX3NldF9lbWl0
X3NpZ25hbHMoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpLCBGQUxTRSk7CisgICAgZ3N0X2Fw
cF9zcmNfc2V0X3N0cmVhbV90eXBlKEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSwgR1NUX0FQ
UF9TVFJFQU1fVFlQRV9TRUVLQUJMRSk7CisKKyAgICBnc3RfYXBwX3NyY19zZXRfbWF4X2J5dGVz
KEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSwgMiAqIFdURjo6TUIpOworICAgIGdfb2JqZWN0
X3NldChHX09CSkVDVChzdHJlYW0tPmFwcHNyYyksICJibG9jayIsIEZBTFNFLCAibWluLXBlcmNl
bnQiLCAyMCwgbnVsbHB0cik7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJLaXRNZWRpYVNy
Yy5nZXQoKSk7CisgICAgcHJpdi0+c3RyZWFtcy5wcmVwZW5kKHN0cmVhbSk7CisgICAgR1NUX09C
SkVDVF9VTkxPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisKKyAgICBnc3RfYmluX2FkZChH
U1RfQklOKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpLCBzdHJlYW0tPmFwcHNyYyk7CisgICAgZ3N0
X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChzdHJlYW0tPmFwcHNyYyk7CisKKyAgICBy
ZXR1cm4gTWVkaWFTb3VyY2VQcml2YXRlOjpPazsKK30KKwordm9pZCBQbGF5YmFja1BpcGVsaW5l
OjpyZW1vdmVTb3VyY2VCdWZmZXIoUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+
IHNvdXJjZUJ1ZmZlclByaXZhdGUpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkp
OworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCAiRWxlbWVu
dCByZW1vdmVkIGZyb20gTWVkaWFTb3VyY2UiKTsKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJL
aXRNZWRpYVNyYy5nZXQoKSk7CisgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gbV93
ZWJLaXRNZWRpYVNyYy0+cHJpdjsKKyAgICBTdHJlYW0qIHN0cmVhbSA9IG51bGxwdHI7CisgICAg
RGVxdWU8U3RyZWFtKj46Oml0ZXJhdG9yIHN0cmVhbVBvc2l0aW9uID0gcHJpdi0+c3RyZWFtcy5i
ZWdpbigpOworCisgICAgZm9yICg7IHN0cmVhbVBvc2l0aW9uICE9IHByaXYtPnN0cmVhbXMuZW5k
KCk7ICsrc3RyZWFtUG9zaXRpb24pIHsKKyAgICAgICAgaWYgKCgqc3RyZWFtUG9zaXRpb24pLT5z
b3VyY2VCdWZmZXIgPT0gc291cmNlQnVmZmVyUHJpdmF0ZS5nZXQoKSkgeworICAgICAgICAgICAg
c3RyZWFtID0gKnN0cmVhbVBvc2l0aW9uOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKHN0cmVhbSkKKyAgICAgICAgcHJpdi0+c3RyZWFtcy5yZW1vdmUoc3Ry
ZWFtUG9zaXRpb24pOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0
KCkpOworCisgICAgaWYgKHN0cmVhbSkKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNGcmVlU3RyZWFt
KG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksIHN0cmVhbSk7Cit9CisKK3ZvaWQgUGxheWJhY2tQaXBl
bGluZTo6YXR0YWNoVHJhY2soUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IHNv
dXJjZUJ1ZmZlclByaXZhdGUsIFJlZlB0cjxUcmFja1ByaXZhdGVCYXNlPiB0cmFja1ByaXZhdGUs
IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlLCBHc3RDYXBzKiBjYXBzKQoreworICAgIFdlYktpdE1l
ZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYyA9IG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCk7CisKKyAgICBH
U1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVkaWFTcmMpOworICAgIFN0cmVhbSogc3RyZWFtID0gZ2V0
U3RyZWFtQnlTb3VyY2VCdWZmZXJQcml2YXRlKHdlYktpdE1lZGlhU3JjLCBzb3VyY2VCdWZmZXJQ
cml2YXRlLmdldCgpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisK
KyAgICBBU1NFUlQoc3RyZWFtKTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNy
Yyk7CisgICAgdW5zaWduZWQgcGFkSWQgPSBzdHJlYW0tPnBhcmVudC0+cHJpdi0+bnVtYmVyT2ZQ
YWRzOworICAgIHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1iZXJPZlBhZHMrKzsKKyAgICBHU1Rf
T0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBjb25zdCBnY2hhciogbWVkaWFU
eXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOworCisgICAgR1NUX0RFQlVH
X09CSkVDVCh3ZWJLaXRNZWRpYVNyYywgIkNvbmZpZ3VyZWQgdHJhY2sgJXM6IGFwcHNyYz0lcywg
cGFkSWQ9JXUsIG1lZGlhVHlwZT0lcyIsIHRyYWNrUHJpdmF0ZS0+aWQoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBHU1RfRUxFTUVOVF9OQU1FKHN0cmVhbS0+YXBwc3JjKSwgcGFkSWQsIG1lZGlh
VHlwZSk7CisKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiBwYXJzZXJCaW5OYW1lKGdfc3RyZHVwX3By
aW50Zigic3RyZWFtcGFyc2VyJXUiLCBwYWRJZCkpOworCisgICAgaWYgKCFnX3N0cmNtcDAobWVk
aWFUeXBlLCAidmlkZW8veC1oMjY0IikpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBmaWx0
ZXJDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtaDI2NCIsICJh
bGlnbm1lbnQiLCBHX1RZUEVfU1RSSU5HLCAiYXUiLCBudWxscHRyKSk7CisgICAgICAgIEdzdEVs
ZW1lbnQqIGNhcHNmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImNhcHNmaWx0ZXIi
LCBudWxscHRyKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KGNhcHNmaWx0ZXIsICJjYXBzIiwgZmls
dGVyQ2Fwcy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICAgICAgc3RyZWFtLT5wYXJzZXIgPSBnc3Rf
YmluX25ldyhwYXJzZXJCaW5OYW1lLmdldCgpKTsKKworICAgICAgICBHc3RFbGVtZW50KiBwYXJz
ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImgyNjRwYXJzZSIsIG51bGxwdHIpOworICAg
ICAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4oc3RyZWFtLT5wYXJzZXIpLCBwYXJzZXIsIGNh
cHNmaWx0ZXIsIG51bGxwdHIpOworICAgICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHMocGFyc2Vy
LCAic3JjIiwgY2Fwc2ZpbHRlciwgInNpbmsiKTsKKworICAgICAgICBHUmVmUHRyPEdzdFBhZD4g
cGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHBhcnNlciwgInNpbmsi
KSk7CisgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9z
dF9wYWRfbmV3KCJzaW5rIiwgcGFkLmdldCgpKSk7CisKKyAgICAgICAgcGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGNhcHNmaWx0ZXIsICJzcmMiKSk7CisgICAgICAg
IGdzdF9lbGVtZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3KCJz
cmMiLCBwYWQuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWVkaWFUeXBlLCAi
dmlkZW8veC1oMjY1IikpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBmaWx0ZXJDYXBzID0g
YWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtaDI2NSIsICJhbGlnbm1lbnQi
LCBHX1RZUEVfU1RSSU5HLCAiYXUiLCBudWxscHRyKSk7CisgICAgICAgIEdzdEVsZW1lbnQqIGNh
cHNmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImNhcHNmaWx0ZXIiLCBudWxscHRy
KTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KGNhcHNmaWx0ZXIsICJjYXBzIiwgZmlsdGVyQ2Fwcy5n
ZXQoKSwgbnVsbHB0cik7CisKKyAgICAgICAgc3RyZWFtLT5wYXJzZXIgPSBnc3RfYmluX25ldyhw
YXJzZXJCaW5OYW1lLmdldCgpKTsKKworICAgICAgICBHc3RFbGVtZW50KiBwYXJzZXIgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoImgyNjVwYXJzZSIsIG51bGxwdHIpOworICAgICAgICBnc3Rf
YmluX2FkZF9tYW55KEdTVF9CSU4oc3RyZWFtLT5wYXJzZXIpLCBwYXJzZXIsIGNhcHNmaWx0ZXIs
IG51bGxwdHIpOworICAgICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHMocGFyc2VyLCAic3JjIiwg
Y2Fwc2ZpbHRlciwgInNpbmsiKTsKKworICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRv
cHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHBhcnNlciwgInNpbmsiKSk7CisgICAg
ICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3
KCJzaW5rIiwgcGFkLmdldCgpKSk7CisKKyAgICAgICAgcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVt
ZW50X2dldF9zdGF0aWNfcGFkKGNhcHNmaWx0ZXIsICJzcmMiKSk7CisgICAgICAgIGdzdF9lbGVt
ZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3KCJzcmMiLCBwYWQu
Z2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWVkaWFUeXBlLCAiYXVkaW8vbXBl
ZyIpKSB7CisgICAgICAgIGdpbnQgbXBlZ3ZlcnNpb24gPSAtMTsKKyAgICAgICAgZ3N0X3N0cnVj
dHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgIm1wZWd2ZXJzaW9uIiwgJm1wZWd2ZXJzaW9uKTsKKwor
ICAgICAgICBHc3RFbGVtZW50KiBwYXJzZXI7CisgICAgICAgIGlmIChtcGVndmVyc2lvbiA9PSAx
KQorICAgICAgICAgICAgcGFyc2VyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJtcGVnYXVk
aW9wYXJzZSIsIG51bGxwdHIpOworICAgICAgICBlbHNlIGlmIChtcGVndmVyc2lvbiA9PSAyIHx8
IG1wZWd2ZXJzaW9uID09IDQpCisgICAgICAgICAgICBwYXJzZXIgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UoImFhY3BhcnNlIiwgbnVsbHB0cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIHN0cmVhbS0+cGFyc2VyID0gZ3N0X2Jp
bl9uZXcocGFyc2VyQmluTmFtZS5nZXQoKSk7CisgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4o
c3RyZWFtLT5wYXJzZXIpLCBwYXJzZXIpOworCisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocGFyc2VyLCAic2luayIpKTsK
KyAgICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChzdHJlYW0tPnBhcnNlciwgZ3N0X2dob3N0X3Bh
ZF9uZXcoInNpbmsiLCBwYWQuZ2V0KCkpKTsKKworICAgICAgICBwYWQgPSBhZG9wdEdSZWYoZ3N0
X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocGFyc2VyLCAic3JjIikpOworICAgICAgICBnc3RfZWxl
bWVudF9hZGRfcGFkKHN0cmVhbS0+cGFyc2VyLCBnc3RfZ2hvc3RfcGFkX25ldygic3JjIiwgcGFk
LmdldCgpKSk7CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1lZGlhVHlwZSwgInZpZGVvL3gt
dnA5IikpCisgICAgICAgIHN0cmVhbS0+cGFyc2VyID0gbnVsbHB0cjsKKyAgICBlbHNlIHsKKyAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChzdHJlYW0tPnBhcmVudCwgIlVuc3VwcG9ydGVkIG1lZGlh
IGZvcm1hdDogJXMiLCBtZWRpYVR5cGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
R1NUX09CSkVDVF9MT0NLKHdlYktpdE1lZGlhU3JjKTsKKyAgICBzdHJlYW0tPnR5cGUgPSBVbmtu
b3duOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlhU3JjKTsKKworICAgIEdSZWZQ
dHI8R3N0UGFkPiBzb3VyY2VQYWQ7CisgICAgaWYgKHN0cmVhbS0+cGFyc2VyKSB7CisgICAgICAg
IGdzdF9iaW5fYWRkKEdTVF9CSU4oc3RyZWFtLT5wYXJlbnQpLCBzdHJlYW0tPnBhcnNlcik7Cisg
ICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoc3RyZWFtLT5wYXJzZXIp
OworCisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVt
ZW50X2dldF9zdGF0aWNfcGFkKHN0cmVhbS0+cGFyc2VyLCAic2luayIpKTsKKyAgICAgICAgc291
cmNlUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHN0cmVhbS0+YXBw
c3JjLCAic3JjIikpOworICAgICAgICBnc3RfcGFkX2xpbmsoc291cmNlUGFkLmdldCgpLCBzaW5r
UGFkLmdldCgpKTsKKyAgICAgICAgc291cmNlUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dl
dF9zdGF0aWNfcGFkKHN0cmVhbS0+cGFyc2VyLCAic3JjIikpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSwgIlN0cmVhbSBvZiB0
eXBlICVzIGRvZXNuJ3QgcmVxdWlyZSBhIHBhcnNlciBiaW4iLCBtZWRpYVR5cGUpOworICAgICAg
ICBzb3VyY2VQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoc3RyZWFt
LT5hcHBzcmMsICJzcmMiKSk7CisgICAgfQorICAgIEFTU0VSVChzb3VyY2VQYWQpOworCisgICAg
Ly8gRklYTUU6IElzIHBhZElkIHRoZSBiZXN0IHdheSB0byBpZGVudGlmeSB0aGUgU3RyZWFtPyBX
aGF0IGFib3V0IHRyYWNrSWQ/CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qoc291cmNl
UGFkLmdldCgpKSwgInBhZElkIiwgR0lOVF9UT19QT0lOVEVSKHBhZElkKSk7CisgICAgd2ViS2l0
TWVkaWFTcmNMaW5rUGFyc2VyKHNvdXJjZVBhZC5nZXQoKSwgY2Fwcywgc3RyZWFtKTsKKworICAg
IEFTU0VSVChzdHJlYW0tPnBhcmVudC0+cHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlKTsKKyAgICBp
bnQgc2lnbmFsID0gLTE7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVkaWFTcmMpOwor
ICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KG1lZGlhVHlwZSwgImF1ZGlvIikpIHsKKyAgICAgICAg
c3RyZWFtLT50eXBlID0gQXVkaW87CisgICAgICAgIHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1i
ZXJPZkF1ZGlvU3RyZWFtcysrOworICAgICAgICBzaWduYWwgPSBTSUdOQUxfQVVESU9fQ0hBTkdF
RDsKKyAgICAgICAgc3RyZWFtLT5hdWRpb1RyYWNrID0gUmVmUHRyPFdlYkNvcmU6OkF1ZGlvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyPihzdGF0aWNfY2FzdDxXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lcio+KHRyYWNrUHJpdmF0ZS5nZXQoKSkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJf
aGFzX3ByZWZpeChtZWRpYVR5cGUsICJ2aWRlbyIpKSB7CisgICAgICAgIHN0cmVhbS0+dHlwZSA9
IFZpZGVvOworICAgICAgICBzdHJlYW0tPnBhcmVudC0+cHJpdi0+bnVtYmVyT2ZWaWRlb1N0cmVh
bXMrKzsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX1ZJREVPX0NIQU5HRUQ7CisgICAgICAgIHN0
cmVhbS0+dmlkZW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJl
YW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqPih0
cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2hhc19wcmVmaXgobWVk
aWFUeXBlLCAidGV4dCIpKSB7CisgICAgICAgIHN0cmVhbS0+dHlwZSA9IFRleHQ7CisgICAgICAg
IHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1iZXJPZlRleHRTdHJlYW1zKys7CisgICAgICAgIHNp
Z25hbCA9IFNJR05BTF9URVhUX0NIQU5HRUQ7CisKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQg
dGV4dCB0cmFja3MuCisgICAgfQorICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlhU3Jj
KTsKKworICAgIGlmIChzaWduYWwgIT0gLTEpCisgICAgICAgIGdfc2lnbmFsX2VtaXQoR19PQkpF
Q1Qoc3RyZWFtLT5wYXJlbnQpLCB3ZWJLaXRNZWRpYVNyY1NpZ25hbHNbc2lnbmFsXSwgMCwgbnVs
bHB0cik7Cit9CisKK3ZvaWQgUGxheWJhY2tQaXBlbGluZTo6cmVhdHRhY2hUcmFjayhSZWZQdHI8
U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZSwgUmVmUHRy
PFRyYWNrUHJpdmF0ZUJhc2U+IHRyYWNrUHJpdmF0ZSkKK3sKKyAgICBHU1RfREVCVUcoIlJlLWF0
dGFjaGluZyB0cmFjayIpOworCisgICAgLy8gRklYTUU6IE1heWJlIHJlbW92ZSB0aGlzIG1ldGhv
ZC4gTm93IHRoZSBjYXBzIGNoYW5nZSBpcyBtYW5hZ2VkIGJ5IGdzdF9hcHBzcmNfcHVzaF9zYW1w
bGUoKSBpbiBlbnF1ZXVlU2FtcGxlKCkKKyAgICAvLyBhbmQgZmx1c2hBbmRFbnF1ZXVlTm9uRGlz
cGxheWluZ1NhbXBsZXMoKS4KKworICAgIFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYyA9
IG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCk7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVk
aWFTcmMpOworICAgIFN0cmVhbSogc3RyZWFtID0gZ2V0U3RyZWFtQnlTb3VyY2VCdWZmZXJQcml2
YXRlKHdlYktpdE1lZGlhU3JjLCBzb3VyY2VCdWZmZXJQcml2YXRlLmdldCgpKTsKKyAgICBHU1Rf
T0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBBU1NFUlQoc3RyZWFtICYmIHN0
cmVhbS0+dHlwZSAhPSBJbnZhbGlkKTsKKworICAgIC8vIFRoZSBjYXBzIGNoYW5nZSBpcyBtYW5h
Z2VkIGJ5IGdzdF9hcHBzcmNfcHVzaF9zYW1wbGUoKSBpbiBlbnF1ZXVlU2FtcGxlKCkgYW5kCisg
ICAgLy8gZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMoKSwgc28gdGhlIGNhcHMg
YXJlbid0IHNldCBmcm9tIGhlcmUuCisgICAgR1JlZlB0cjxHc3RDYXBzPiBhcHBzcmNDYXBzID0g
YWRvcHRHUmVmKGdzdF9hcHBfc3JjX2dldF9jYXBzKEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3Jj
KSkpOworICAgIGNvbnN0IGdjaGFyKiBtZWRpYVR5cGUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1l
KGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoYXBwc3JjQ2Fwcy5nZXQoKSwgMCkpOworICAgIGludCBz
aWduYWwgPSAtMTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisgICAg
aWYgKGdfc3RyX2hhc19wcmVmaXgobWVkaWFUeXBlLCAiYXVkaW8iKSkgeworICAgICAgICBBU1NF
UlQoc3RyZWFtLT50eXBlID09IEF1ZGlvKTsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX0FVRElP
X0NIQU5HRUQ7CisgICAgICAgIHN0cmVhbS0+YXVkaW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpB
dWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXVkaW9UcmFj
a1ByaXZhdGVHU3RyZWFtZXIqPih0cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYg
KGdfc3RyX2hhc19wcmVmaXgobWVkaWFUeXBlLCAidmlkZW8iKSkgeworICAgICAgICBBU1NFUlQo
c3RyZWFtLT50eXBlID09IFZpZGVvKTsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX1ZJREVPX0NI
QU5HRUQ7CisgICAgICAgIHN0cmVhbS0+dmlkZW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpWaWRl
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9UcmFja1By
aXZhdGVHU3RyZWFtZXIqPih0cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKGdf
c3RyX2hhc19wcmVmaXgobWVkaWFUeXBlLCAidGV4dCIpKSB7CisgICAgICAgIEFTU0VSVChzdHJl
YW0tPnR5cGUgPT0gVGV4dCk7CisgICAgICAgIHNpZ25hbCA9IFNJR05BTF9URVhUX0NIQU5HRUQ7
CisKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgdGV4dCB0cmFja3MuCisgICAgfQorICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlhU3JjKTsKKworICAgIGlmIChzaWduYWwgIT0gLTEp
CisgICAgICAgIGdfc2lnbmFsX2VtaXQoR19PQkpFQ1Qoc3RyZWFtLT5wYXJlbnQpLCB3ZWJLaXRN
ZWRpYVNyY1NpZ25hbHNbc2lnbmFsXSwgMCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgUGxheWJhY2tQ
aXBlbGluZTo6bm90aWZ5RHVyYXRpb25DaGFuZ2VkKCkKK3sKKyAgICBnc3RfZWxlbWVudF9wb3N0
X21lc3NhZ2UoR1NUX0VMRU1FTlQobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSksIGdzdF9tZXNzYWdl
X25ld19kdXJhdGlvbl9jaGFuZ2VkKEdTVF9PQkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSkp
KTsKKyAgICAvLyBXZWJLaXRNZWRpYVNyYyB3aWxsIGFzayBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0UgZm9yIHRoZSBuZXcgZHVyYXRpb24gbGF0ZXIsIHdoZW4gc29tZWJvZHkgYXNrcyBm
b3IgaXQuCit9CisKK3ZvaWQgUGxheWJhY2tQaXBlbGluZTo6bWFya0VuZE9mU3RyZWFtKE1lZGlh
U291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMpCit7CisgICAgV2ViS2l0TWVkaWFTcmNQ
cml2YXRlKiBwcml2ID0gbV93ZWJLaXRNZWRpYVNyYy0+cHJpdjsKKworICAgIEdTVF9ERUJVR19P
QkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSwgIkhhdmUgRU9TIik7CisKKyAgICBHU1RfT0JK
RUNUX0xPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgYm9vbCBhbGxUcmFja3NDb25m
aWd1cmVkID0gcHJpdi0+YWxsVHJhY2tzQ29uZmlndXJlZDsKKyAgICBpZiAoIWFsbFRyYWNrc0Nv
bmZpZ3VyZWQpCisgICAgICAgIHByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQgPSB0cnVlOworICAg
IEdTVF9PQkpFQ1RfVU5MT0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpOworCisgICAgaWYgKCFh
bGxUcmFja3NDb25maWd1cmVkKSB7CisgICAgICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyhH
U1RfRUxFTUVOVChtX3dlYktpdE1lZGlhU3JjLmdldCgpKSk7CisgICAgICAgIHdlYktpdE1lZGlh
U3JjRG9Bc3luY0RvbmUobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgfQorCisgICAgVmVj
dG9yPEdzdEFwcFNyYyo+IGFwcHNyY3M7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJLaXRN
ZWRpYVNyYy5nZXQoKSk7CisgICAgZm9yIChTdHJlYW0qIHN0cmVhbSA6IHByaXYtPnN0cmVhbXMp
IHsKKyAgICAgICAgaWYgKHN0cmVhbS0+YXBwc3JjKQorICAgICAgICAgICAgYXBwc3Jjcy5hcHBl
bmQoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpKTsKKyAgICB9CisgICAgR1NUX09CSkVDVF9V
TkxPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisKKyAgICBmb3IgKEdzdEFwcFNyYyogYXBw
c3JjIDogYXBwc3JjcykKKyAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShhcHBzcmMp
OworfQorCit2b2lkIFBsYXliYWNrUGlwZWxpbmU6OmZsdXNoQW5kRW5xdWV1ZU5vbkRpc3BsYXlp
bmdTYW1wbGVzKFZlY3RvcjxSZWZQdHI8TWVkaWFTYW1wbGU+PiBzYW1wbGVzKQoreworICAgIEFT
U0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghc2FtcGxlcy5zaXplKCkpIHsK
KyAgICAgICAgR1NUX0RFQlVHKCJObyBzYW1wbGVzLCB0cmFja0lkIHVua25vd24iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEF0b21pY1N0cmluZyB0cmFja0lkID0gc2FtcGxlc1sw
XS0+dHJhY2tJRCgpOworICAgIEdTVF9ERUJVRygiZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWlu
Z1NhbXBsZXM6IHRyYWNrSWQ9JXMgUFRTWzBdPSVmIC4uLiBQVFNbbl09JWYiLCB0cmFja0lkLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIHNhbXBsZXNbMF0tPnByZXNlbnRhdGlvblRpbWUoKS50b0Zs
b2F0KCksIHNhbXBsZXNbc2FtcGxlcy5zaXplKCktMV0tPnByZXNlbnRhdGlvblRpbWUoKS50b0Zs
b2F0KCkpOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCAi
Rmx1c2hpbmcgYW5kIHJlLWVucXVlaW5nICV6dSBzYW1wbGVzIGZvciBzdHJlYW0gJXMiLCBzYW1w
bGVzLnNpemUoKSwgdHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIEdTVF9P
QkpFQ1RfTE9DSyhtX3dlYktpdE1lZGlhU3JjLmdldCgpKTsKKyAgICBTdHJlYW0qIHN0cmVhbSA9
IGdldFN0cmVhbUJ5VHJhY2tJZChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCB0cmFja0lkKTsKKwor
ICAgIGlmICghc3RyZWFtKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fd2ViS2l0TWVk
aWFTcmMuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFzdHJlYW0t
PnNvdXJjZUJ1ZmZlci0+aXNSZWFkeUZvck1vcmVTYW1wbGVzKHRyYWNrSWQpKSB7CisgICAgICAg
IEdTVF9ERUJVRygiZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXM6IHNraXAgYWRk
aW5nIG5ldyBzYW1wbGUgZm9yIHRyYWNrSWQ9JXMsIFNCIGlzIG5vdCByZWFkeSB5ZXQiLCB0cmFj
a0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyht
X3dlYktpdE1lZGlhU3JjLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdz
dEVsZW1lbnQqIGFwcHNyYyA9IHN0cmVhbS0+YXBwc3JjOworICAgIE1lZGlhVGltZSBsYXN0RW5x
dWV1ZWRUaW1lID0gc3RyZWFtLT5sYXN0RW5xdWV1ZWRUaW1lOworICAgIEdTVF9PQkpFQ1RfVU5M
T0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpOworCisgICAgaWYgKCFtX3dlYktpdE1lZGlhU3Jj
LT5wcml2LT5tZWRpYVBsYXllclByaXZhdGUtPnNlZWtpbmcoKSkKKyAgICAgICAgR1NUX0RFQlVH
KCJmbHVzaEFuZEVucXVldWVOb25EaXNwbGF5aW5nU2FtcGxlczogdHJhY2tJZD0lcyBwaXBlbGlu
ZSBuZWVkcyBmbHVzaGluZy4iLCB0cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisg
ICAgZm9yIChjb25zdCBSZWZQdHI8TWVkaWFTYW1wbGU+JiBzYW1wbGUgOiBzYW1wbGVzKSB7Cisg
ICAgICAgIEdTdHJlYW1lck1lZGlhU2FtcGxlKiBnU3RyZWFtZXJNZWRpYVNhbXBsZSA9IHN0YXRp
Y19jYXN0PEdTdHJlYW1lck1lZGlhU2FtcGxlKj4oc2FtcGxlLmdldCgpKTsKKyAgICAgICAgR3N0
QnVmZmVyKiBidWZmZXIgPSBudWxscHRyOworICAgICAgICBpZiAoZ1N0cmVhbWVyTWVkaWFTYW1w
bGUtPnNhbXBsZSgpKQorICAgICAgICAgICAgYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVy
KGdTdHJlYW1lck1lZGlhU2FtcGxlLT5zYW1wbGUoKSk7CisgICAgICAgIGlmIChidWZmZXIpIHsK
KyAgICAgICAgICAgIEdzdFNhbXBsZSogZ3N0U2FtcGxlID0gZ3N0X3NhbXBsZV9yZWYoZ1N0cmVh
bWVyTWVkaWFTYW1wbGUtPnNhbXBsZSgpKTsKKyAgICAgICAgICAgIGxhc3RFbnF1ZXVlZFRpbWUg
PSBnU3RyZWFtZXJNZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpOworCisgICAgICAgICAg
ICBHU1RfQlVGRkVSX0ZMQUdfU0VUKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RFQ09ERV9PTkxZ
KTsKKyAgICAgICAgICAgIHB1c2hTYW1wbGUoR1NUX0FQUF9TUkMoYXBwc3JjKSwgZ3N0U2FtcGxl
KTsKKyAgICAgICAgICAgIC8vIGdzdF9hcHBfc3JjX3B1c2hfc2FtcGxlKCkgdXNlcyB0cmFuc2Zl
ci1ub25lIGZvciBnc3RTYW1wbGUuCisKKyAgICAgICAgICAgIGdzdF9zYW1wbGVfdW5yZWYoZ3N0
U2FtcGxlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJLaXRN
ZWRpYVNyYy5nZXQoKSk7CisgICAgc3RyZWFtLT5sYXN0RW5xdWV1ZWRUaW1lID0gbGFzdEVucXVl
dWVkVGltZTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3dlYktpdE1lZGlhU3JjLmdldCgpKTsK
K30KKwordm9pZCBQbGF5YmFja1BpcGVsaW5lOjplbnF1ZXVlU2FtcGxlKFJlZlB0cjxNZWRpYVNh
bXBsZT4gbWVkaWFTYW1wbGUpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOwor
CisgICAgQXRvbWljU3RyaW5nIHRyYWNrSWQgPSBtZWRpYVNhbXBsZS0+dHJhY2tJRCgpOworCisg
ICAgR1NUX1RSQUNFKCJlbnF1ZWluZyBzYW1wbGUgdHJhY2tJZD0lcyBQVFM9JWYgcHJlc2VudGF0
aW9uU2l6ZT0lLjBmeCUuMGYgYXQgJSIgR1NUX1RJTUVfRk9STUFUICIgZHVyYXRpb246ICUiIEdT
VF9USU1FX0ZPUk1BVCwKKyAgICAgICAgdHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBt
ZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpLnRvRmxvYXQoKSwKKyAgICAgICAgbWVkaWFT
YW1wbGUtPnByZXNlbnRhdGlvblNpemUoKS53aWR0aCgpLCBtZWRpYVNhbXBsZS0+cHJlc2VudGF0
aW9uU2l6ZSgpLmhlaWdodCgpLAorICAgICAgICBHU1RfVElNRV9BUkdTKFdlYkNvcmU6OnRvR3N0
Q2xvY2tUaW1lKG1lZGlhU2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkudG9Eb3VibGUoKSkpLAor
ICAgICAgICBHU1RfVElNRV9BUkdTKFdlYkNvcmU6OnRvR3N0Q2xvY2tUaW1lKG1lZGlhU2FtcGxl
LT5kdXJhdGlvbigpLnRvRG91YmxlKCkpKSk7CisKKyAgICBTdHJlYW0qIHN0cmVhbSA9IGdldFN0
cmVhbUJ5VHJhY2tJZChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCB0cmFja0lkKTsKKworICAgIGlm
ICghc3RyZWFtKSB7CisgICAgICAgIEdTVF9XQVJOSU5HKCJObyBzdHJlYW0hIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXN0cmVhbS0+c291cmNlQnVmZmVyLT5pc1JlYWR5
Rm9yTW9yZVNhbXBsZXModHJhY2tJZCkpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJlbnF1ZXVlU2Ft
cGxlOiBza2lwIGFkZGluZyBuZXcgc2FtcGxlIGZvciB0cmFja0lkPSVzLCBTQiBpcyBub3QgcmVh
ZHkgeWV0IiwgdHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEdzdEVsZW1lbnQqIGFwcHNyYyA9IHN0cmVhbS0+YXBwc3JjOworICAg
IE1lZGlhVGltZSBsYXN0RW5xdWV1ZWRUaW1lID0gc3RyZWFtLT5sYXN0RW5xdWV1ZWRUaW1lOwor
CisgICAgR1N0cmVhbWVyTWVkaWFTYW1wbGUqIHNhbXBsZSA9IHN0YXRpY19jYXN0PEdTdHJlYW1l
ck1lZGlhU2FtcGxlKj4obWVkaWFTYW1wbGUuZ2V0KCkpOworICAgIGlmIChzYW1wbGUtPnNhbXBs
ZSgpICYmIGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUtPnNhbXBsZSgpKSkgeworICAgICAg
ICBHUmVmUHRyPEdzdFNhbXBsZT4gZ3N0U2FtcGxlID0gc2FtcGxlLT5zYW1wbGUoKTsKKyAgICAg
ICAgR3N0QnVmZmVyKiBidWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoZ3N0U2FtcGxlLmdl
dCgpKTsKKyAgICAgICAgbGFzdEVucXVldWVkVGltZSA9IHNhbXBsZS0+cHJlc2VudGF0aW9uVGlt
ZSgpOworCisgICAgICAgIEdTVF9CVUZGRVJfRkxBR19VTlNFVChidWZmZXIsIEdTVF9CVUZGRVJf
RkxBR19ERUNPREVfT05MWSk7CisgICAgICAgIHB1c2hTYW1wbGUoR1NUX0FQUF9TUkMoYXBwc3Jj
KSwgZ3N0U2FtcGxlLmdldCgpKTsKKyAgICAgICAgLy8gZ3N0X2FwcF9zcmNfcHVzaF9zYW1wbGUo
KSB1c2VzIHRyYW5zZmVyLW5vbmUgZm9yIGdzdFNhbXBsZS4KKworICAgICAgICBzdHJlYW0tPmxh
c3RFbnF1ZXVlZFRpbWUgPSBsYXN0RW5xdWV1ZWRUaW1lOworICAgIH0KK30KKworR3N0RWxlbWVu
dCogUGxheWJhY2tQaXBlbGluZTo6cGlwZWxpbmUoKQoreworICAgIGlmICghbV93ZWJLaXRNZWRp
YVNyYyB8fCAhR1NUX0VMRU1FTlRfUEFSRU5UKEdTVF9FTEVNRU5UKG1fd2ViS2l0TWVkaWFTcmMu
Z2V0KCkpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gR1NUX0VMRU1F
TlRfUEFSRU5UKEdTVF9FTEVNRU5UX1BBUkVOVChHU1RfRUxFTUVOVChtX3dlYktpdE1lZGlhU3Jj
LmdldCgpKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgorCisjZW5kaWYgLy8gVVNF
KEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODEwZmIxM2NmYjY3ZDMwM2YzMzY2NGJiMDUyNmQ3YjY1ZjllYzFmYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxheWJh
Y2tQaXBlbGluZS5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5M
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVO
QUJMRShNRURJQV9TT1VSQ0UpCisKKy8vIFBsYXliYWNrUGlwZWxpbmUgaXMgKHNvcnQgb2YpIGEg
ZnJpZW5kIGNsYXNzIG9mIFdlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLgorCisjaW5jbHVkZSAi
V2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJj
ZUdTdHJlYW1lclByaXZhdGUuaCIKKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3
dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKK3RlbXBsYXRlPD4gR1JlZlB0cjxXZWJLaXRNZWRpYVNyYz4gYWRvcHRHUmVmKFdl
YktpdE1lZGlhU3JjKik7Cit0ZW1wbGF0ZTw+IFdlYktpdE1lZGlhU3JjKiByZWZHUHRyPFdlYktp
dE1lZGlhU3JjPihXZWJLaXRNZWRpYVNyYyopOwordGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxX
ZWJLaXRNZWRpYVNyYz4oV2ViS2l0TWVkaWFTcmMqKTsKK307CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ29udGVudFR5cGU7CitjbGFzcyBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyOworY2xhc3MgTWVkaWFTb3VyY2VHU3RyZWFtZXI7CisKK2NsYXNzIFBsYXliYWNrUGlwZWxp
bmU6IHB1YmxpYyBSZWZDb3VudGVkPFBsYXliYWNrUGlwZWxpbmU+IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPFBsYXliYWNrUGlwZWxpbmU+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBQbGF5YmFja1BpcGVsaW5lKCkpOworICAgIH0KKworICAgIHZpcnR1
YWwgflBsYXliYWNrUGlwZWxpbmUoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHNldFdlYktpdE1l
ZGlhU3JjKFdlYktpdE1lZGlhU3JjKik7CisgICAgV2ViS2l0TWVkaWFTcmMqIHdlYktpdE1lZGlh
U3JjKCk7CisKKyAgICBNZWRpYVNvdXJjZVByaXZhdGU6OkFkZFN0YXR1cyBhZGRTb3VyY2VCdWZm
ZXIoUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+KTsKKyAgICB2b2lkIHJlbW92
ZVNvdXJjZUJ1ZmZlcihSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4pOworICAg
IHZvaWQgYXR0YWNoVHJhY2soUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+LCBS
ZWZQdHI8VHJhY2tQcml2YXRlQmFzZT4sIEdzdFN0cnVjdHVyZSosIEdzdENhcHMqKTsKKyAgICB2
b2lkIHJlYXR0YWNoVHJhY2soUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+LCBS
ZWZQdHI8VHJhY2tQcml2YXRlQmFzZT4pOworICAgIHZvaWQgbm90aWZ5RHVyYXRpb25DaGFuZ2Vk
KCk7CisKKyAgICAvLyBGcm9tIE1lZGlhU291cmNlR1N0cmVhbWVyLgorICAgIHZvaWQgbWFya0Vu
ZE9mU3RyZWFtKE1lZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMpOworCisgICAg
Ly8gRnJvbSBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLgorICAgIHZvaWQgZmx1c2hBbmRF
bnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMoVmVjdG9yPFJlZlB0cjxNZWRpYVNhbXBsZT4+KTsK
KyAgICB2b2lkIGVucXVldWVTYW1wbGUoUmVmUHRyPE1lZGlhU2FtcGxlPik7CisKKyAgICBHc3RF
bGVtZW50KiBwaXBlbGluZSgpOworcHJpdmF0ZToKKyAgICBQbGF5YmFja1BpcGVsaW5lKCkgPSBk
ZWZhdWx0OworICAgIEdSZWZQdHI8V2ViS2l0TWVkaWFTcmM+IG1fd2ViS2l0TWVkaWFTcmM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292782</attachid>
            <date>2016-10-25 11:04:31 -0700</date>
            <delta_ts>2016-10-26 01:21:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162901-20161025180044.patch</filename>
            <type>text/plain</type>
            <size>23593</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3ODE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWRlNzgwYjE5NjM5ZGQ1
ZGE3MjAwODMyNTY2NDRkM2YyYmNjM2YwMC4uZDQ3MDYwZmRiNjI5MWJiYzlmYjc1MDViMWQ5N2Mw
YmM1NTdhOTcwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM1IEBACiAyMDE2LTEwLTA0ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXSBQbGF5YmFjayBwaXBlbGluZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWGFi
aWVyIFJvZHJpZ3Vlei1DYWx2YXIuCisKKyAgICAgICAgRW5jYXBzdWxhdGUgdGhlIHJlc3BvbnNp
YmlsaXR5IHRvIGludGVyYWN0IHdpdGggdGhlIEdTdHJlYW1lciBwbGF5YmFjayBwaXBlbGluZSBh
bmQgdGhlCisgICAgICAgIGRpZmZlcmVudCBzdHJlYW1zIG1hbmFnZWQgYnkgdGhlIFdlYktpdE1l
ZGlhU3JjIGVsZW1lbnQgaW50byBhIG5ldyBQbGF5YmFja1BpcGVsaW5lIGNsYXNzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNw
cDogQWRkZWQuCisgICAgICAgIChnZXRTdHJlYW1CeVRyYWNrSWQpOgorICAgICAgICAoZ2V0U3Ry
ZWFtQnlTb3VyY2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKHB1c2hTYW1wbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxheWJhY2tQaXBlbGluZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrUGlwZWxpbmU6OlBsYXliYWNrUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tQaXBlbGluZTo6flBsYXliYWNrUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tQaXBlbGluZTo6c2V0V2ViS2l0TWVkaWFTcmMpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tQaXBlbGluZTo6d2ViS2l0TWVkaWFTcmMpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tQaXBlbGluZTo6YWRkU291cmNlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrUGlwZWxpbmU6OnJlbW92ZVNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5
YmFja1BpcGVsaW5lOjphdHRhY2hUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Bp
cGVsaW5lOjpyZWF0dGFjaFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrUGlwZWxp
bmU6Om5vdGlmeUR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Bp
cGVsaW5lOjptYXJrRW5kT2ZTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQaXBl
bGluZTo6Zmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxheWJhY2tQaXBlbGluZTo6ZW5xdWV1ZVNhbXBsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1BpcGVsaW5lOjpwaXBlbGluZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmg6IEFkZGVkLgorCisyMDE2LTEwLTA0
ICBFbnJpcXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CisKICAgICAg
ICAgW0dTdHJlYW1lcl1bTVNFXVtFTUVdIE1TRSBzcGVjaWFsaXphdGlvbiBvZiBNZWRpYSBQbGF5
ZXIgUHJpdmF0ZSBmb3IgR1N0cmVhbWVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjI5MDAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGlu
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjJjOTI2MDM1MDc0MjhiYTFhNzk3YmIyYmU4NjdkMDRkNzEzOTNl
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5jcHAKQEAgLTAsMCArMSw0NDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNl
bnRyaWN1bGFyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGxheWJhY2tQaXBlbGluZS5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBV
U0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKQorCisjaW5jbHVkZSAiQXVkaW9U
cmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYVNhbXBsZS5o
IgorI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxl
LmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUg
IlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFw
cHNyYy5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR011dGV4
TG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9n
bGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKwor
c3RhdGljIFN0cmVhbSogZ2V0U3RyZWFtQnlUcmFja0lkKFdlYktpdE1lZGlhU3JjKiwgQXRvbWlj
U3RyaW5nKTsKK3N0YXRpYyBTdHJlYW0qIGdldFN0cmVhbUJ5U291cmNlQnVmZmVyUHJpdmF0ZShX
ZWJLaXRNZWRpYVNyYyosIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIqKTsK
Kworc3RhdGljIFN0cmVhbSogZ2V0U3RyZWFtQnlUcmFja0lkKFdlYktpdE1lZGlhU3JjKiBzb3Vy
Y2UsIEF0b21pY1N0cmluZyB0cmFja0lkU3RyaW5nKQoreworICAgIC8vIFdlYktpdE1lZGlhU3Jj
IHNob3VsZCBiZSBsb2NrZWQgYXQgdGhpcyBwb2ludC4KKyAgICBmb3IgKFN0cmVhbSogc3RyZWFt
IDogc291cmNlLT5wcml2LT5zdHJlYW1zKSB7CisgICAgICAgIGlmIChzdHJlYW0tPnR5cGUgIT0g
V2ViQ29yZTo6SW52YWxpZAorICAgICAgICAgICAgJiYgKChzdHJlYW0tPmF1ZGlvVHJhY2sgJiYg
c3RyZWFtLT5hdWRpb1RyYWNrLT5pZCgpID09IHRyYWNrSWRTdHJpbmcpCisgICAgICAgICAgICAg
ICAgfHwgKHN0cmVhbS0+dmlkZW9UcmFjayAmJiBzdHJlYW0tPnZpZGVvVHJhY2stPmlkKCkgPT0g
dHJhY2tJZFN0cmluZykgKSApIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJlYW07CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBTdHJlYW0qIGdldFN0
cmVhbUJ5U291cmNlQnVmZmVyUHJpdmF0ZShXZWJLaXRNZWRpYVNyYyogc291cmNlLCBXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKiBzb3VyY2VCdWZmZXJQcml2YXRlKQorewor
ICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiBzb3VyY2UtPnByaXYtPnN0cmVhbXMpIHsKKyAgICAg
ICAgaWYgKHN0cmVhbS0+c291cmNlQnVmZmVyID09IHNvdXJjZUJ1ZmZlclByaXZhdGUpCisgICAg
ICAgICAgICByZXR1cm4gc3RyZWFtOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
Ly8gRklYTUU6IFVzZSBnc3RfYXBwX3NyY19wdXNoX3NhbXBsZSgpIGluc3RlYWQgd2hlbiB3ZSBz
d2l0Y2ggdG8gdGhlIGFwcHJvcHJpYXRlIEdTdHJlYW1lciB2ZXJzaW9uLgorc3RhdGljIEdzdEZs
b3dSZXR1cm4gcHVzaFNhbXBsZShHc3RBcHBTcmMqIGFwcHNyYywgR3N0U2FtcGxlKiBzYW1wbGUp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoR1NUX0lTX1NBTVBMRShzYW1wbGUpLCBHU1Rf
RkxPV19FUlJPUik7CisKKyAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X3NhbXBsZV9nZXRfY2Fwcyhz
YW1wbGUpOworICAgIGlmIChjYXBzKQorICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2FwcyhhcHBz
cmMsIGNhcHMpOworICAgIGVsc2UKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKGFwcHNyYywg
InJlY2VpdmVkIHNhbXBsZSB3aXRob3V0IGNhcHMiKTsKKworICAgIEdzdEJ1ZmZlciogYnVmZmVy
ID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKHNhbXBsZSk7CisgICAgaWYgKFVOTElLRUxZKCFidWZm
ZXIpKSB7CisgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChhcHBzcmMsICJyZWNlaXZlZCBzYW1w
bGUgd2l0aG91dCBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0K
KworICAgIC8vIGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKCkgc3RlYWxzIHRoZSByZWZlcmVuY2Us
IHdlIG5lZWQgYW4gYWRkaXRpb25hbCBvbmUuCisgICAgcmV0dXJuIGdzdF9hcHBfc3JjX3B1c2hf
YnVmZmVyKGFwcHNyYywgZ3N0X2J1ZmZlcl9yZWYoYnVmZmVyKSk7Cit9CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordm9pZCBQbGF5YmFja1BpcGVsaW5lOjpzZXRXZWJLaXRNZWRpYVNyYyhXZWJL
aXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMpCit7CisgICAgR1NUX0RFQlVHKCJ3ZWJLaXRNZWRp
YVNyYz0lcCIsIHdlYktpdE1lZGlhU3JjKTsKKyAgICBtX3dlYktpdE1lZGlhU3JjID0gd2ViS2l0
TWVkaWFTcmM7Cit9CisKK1dlYktpdE1lZGlhU3JjKiBQbGF5YmFja1BpcGVsaW5lOjp3ZWJLaXRN
ZWRpYVNyYygpCit7CisgICAgcmV0dXJuIG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCk7Cit9CisKK01l
ZGlhU291cmNlUHJpdmF0ZTo6QWRkU3RhdHVzIFBsYXliYWNrUGlwZWxpbmU6OmFkZFNvdXJjZUJ1
ZmZlcihSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJp
dmF0ZSkKK3sKKyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3dlYktpdE1lZGlh
U3JjLT5wcml2OworCisgICAgaWYgKHByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQpIHsKKyAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCAiQWRkaW5nIG5ldyBz
b3VyY2UgYnVmZmVycyBhZnRlciBmaXJzdCBkYXRhIG5vdCBzdXBwb3J0ZWQgeWV0Iik7CisgICAg
ICAgIHJldHVybiBNZWRpYVNvdXJjZVByaXZhdGU6Ok5vdFN1cHBvcnRlZDsKKyAgICB9CisKKyAg
ICBHU1RfREVCVUdfT0JKRUNUKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksICJTdGF0ZSAlZCIsIGlu
dChHU1RfU1RBVEUobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSkpKTsKKworICAgIFN0cmVhbSogc3Ry
ZWFtID0gbmV3IFN0cmVhbSB7IDAgfTsKKyAgICBzdHJlYW0tPnBhcmVudCA9IG1fd2ViS2l0TWVk
aWFTcmMuZ2V0KCk7CisgICAgc3RyZWFtLT5hcHBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21h
a2UoImFwcHNyYyIsIG51bGxwdHIpOworICAgIHN0cmVhbS0+YXBwc3JjTmVlZERhdGFGbGFnID0g
ZmFsc2U7CisgICAgc3RyZWFtLT5zb3VyY2VCdWZmZXIgPSBzb3VyY2VCdWZmZXJQcml2YXRlLmdl
dCgpOworCisgICAgLy8gTm8gdHJhY2sgaGFzIGJlZW4gYXR0YWNoZWQgeWV0LgorICAgIHN0cmVh
bS0+dHlwZSA9IEludmFsaWQ7CisgICAgc3RyZWFtLT5wYXJzZXIgPSBudWxscHRyOworICAgIHN0
cmVhbS0+Y2FwcyA9IG51bGxwdHI7CisgICAgc3RyZWFtLT5hdWRpb1RyYWNrID0gbnVsbHB0cjsK
KyAgICBzdHJlYW0tPnZpZGVvVHJhY2sgPSBudWxscHRyOworICAgIHN0cmVhbS0+cHJlc2VudGF0
aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOworICAgIHN0cmVhbS0+bGFzdEVucXVldWVk
VGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKworICAgIGdzdF9hcHBfc3JjX3NldF9j
YWxsYmFja3MoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpLCAmZW5hYmxlZEFwcHNyY0NhbGxi
YWNrcywgc3RyZWFtLT5wYXJlbnQsIG51bGxwdHIpOworICAgIGdzdF9hcHBfc3JjX3NldF9lbWl0
X3NpZ25hbHMoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpLCBGQUxTRSk7CisgICAgZ3N0X2Fw
cF9zcmNfc2V0X3N0cmVhbV90eXBlKEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSwgR1NUX0FQ
UF9TVFJFQU1fVFlQRV9TRUVLQUJMRSk7CisKKyAgICBnc3RfYXBwX3NyY19zZXRfbWF4X2J5dGVz
KEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSwgMiAqIFdURjo6TUIpOworICAgIGdfb2JqZWN0
X3NldChHX09CSkVDVChzdHJlYW0tPmFwcHNyYyksICJibG9jayIsIEZBTFNFLCAibWluLXBlcmNl
bnQiLCAyMCwgbnVsbHB0cik7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJLaXRNZWRpYVNy
Yy5nZXQoKSk7CisgICAgcHJpdi0+c3RyZWFtcy5wcmVwZW5kKHN0cmVhbSk7CisgICAgR1NUX09C
SkVDVF9VTkxPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisKKyAgICBnc3RfYmluX2FkZChH
U1RfQklOKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpLCBzdHJlYW0tPmFwcHNyYyk7CisgICAgZ3N0
X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChzdHJlYW0tPmFwcHNyYyk7CisKKyAgICBy
ZXR1cm4gTWVkaWFTb3VyY2VQcml2YXRlOjpPazsKK30KKwordm9pZCBQbGF5YmFja1BpcGVsaW5l
OjpyZW1vdmVTb3VyY2VCdWZmZXIoUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+
IHNvdXJjZUJ1ZmZlclByaXZhdGUpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkp
OworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCAiRWxlbWVu
dCByZW1vdmVkIGZyb20gTWVkaWFTb3VyY2UiKTsKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJL
aXRNZWRpYVNyYy5nZXQoKSk7CisgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gbV93
ZWJLaXRNZWRpYVNyYy0+cHJpdjsKKyAgICBTdHJlYW0qIHN0cmVhbSA9IG51bGxwdHI7CisgICAg
RGVxdWU8U3RyZWFtKj46Oml0ZXJhdG9yIHN0cmVhbVBvc2l0aW9uID0gcHJpdi0+c3RyZWFtcy5i
ZWdpbigpOworCisgICAgZm9yICg7IHN0cmVhbVBvc2l0aW9uICE9IHByaXYtPnN0cmVhbXMuZW5k
KCk7ICsrc3RyZWFtUG9zaXRpb24pIHsKKyAgICAgICAgaWYgKCgqc3RyZWFtUG9zaXRpb24pLT5z
b3VyY2VCdWZmZXIgPT0gc291cmNlQnVmZmVyUHJpdmF0ZS5nZXQoKSkgeworICAgICAgICAgICAg
c3RyZWFtID0gKnN0cmVhbVBvc2l0aW9uOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKHN0cmVhbSkKKyAgICAgICAgcHJpdi0+c3RyZWFtcy5yZW1vdmUoc3Ry
ZWFtUG9zaXRpb24pOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0
KCkpOworCisgICAgaWYgKHN0cmVhbSkKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNGcmVlU3RyZWFt
KG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksIHN0cmVhbSk7Cit9CisKK3ZvaWQgUGxheWJhY2tQaXBl
bGluZTo6YXR0YWNoVHJhY2soUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IHNv
dXJjZUJ1ZmZlclByaXZhdGUsIFJlZlB0cjxUcmFja1ByaXZhdGVCYXNlPiB0cmFja1ByaXZhdGUs
IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlLCBHc3RDYXBzKiBjYXBzKQoreworICAgIFdlYktpdE1l
ZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYyA9IG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCk7CisKKyAgICBH
U1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVkaWFTcmMpOworICAgIFN0cmVhbSogc3RyZWFtID0gZ2V0
U3RyZWFtQnlTb3VyY2VCdWZmZXJQcml2YXRlKHdlYktpdE1lZGlhU3JjLCBzb3VyY2VCdWZmZXJQ
cml2YXRlLmdldCgpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisK
KyAgICBBU1NFUlQoc3RyZWFtKTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNy
Yyk7CisgICAgdW5zaWduZWQgcGFkSWQgPSBzdHJlYW0tPnBhcmVudC0+cHJpdi0+bnVtYmVyT2ZQ
YWRzOworICAgIHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1iZXJPZlBhZHMrKzsKKyAgICBHU1Rf
T0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBjb25zdCBnY2hhciogbWVkaWFU
eXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOworCisgICAgR1NUX0RFQlVH
X09CSkVDVCh3ZWJLaXRNZWRpYVNyYywgIkNvbmZpZ3VyZWQgdHJhY2sgJXM6IGFwcHNyYz0lcywg
cGFkSWQ9JXUsIG1lZGlhVHlwZT0lcyIsIHRyYWNrUHJpdmF0ZS0+aWQoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBHU1RfRUxFTUVOVF9OQU1FKHN0cmVhbS0+YXBwc3JjKSwgcGFkSWQsIG1lZGlh
VHlwZSk7CisKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiBwYXJzZXJCaW5OYW1lKGdfc3RyZHVwX3By
aW50Zigic3RyZWFtcGFyc2VyJXUiLCBwYWRJZCkpOworCisgICAgaWYgKCFnX3N0cmNtcDAobWVk
aWFUeXBlLCAidmlkZW8veC1oMjY0IikpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBmaWx0
ZXJDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtaDI2NCIsICJh
bGlnbm1lbnQiLCBHX1RZUEVfU1RSSU5HLCAiYXUiLCBudWxscHRyKSk7CisgICAgICAgIEdzdEVs
ZW1lbnQqIGNhcHNmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImNhcHNmaWx0ZXIi
LCBudWxscHRyKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KGNhcHNmaWx0ZXIsICJjYXBzIiwgZmls
dGVyQ2Fwcy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICAgICAgc3RyZWFtLT5wYXJzZXIgPSBnc3Rf
YmluX25ldyhwYXJzZXJCaW5OYW1lLmdldCgpKTsKKworICAgICAgICBHc3RFbGVtZW50KiBwYXJz
ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImgyNjRwYXJzZSIsIG51bGxwdHIpOworICAg
ICAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4oc3RyZWFtLT5wYXJzZXIpLCBwYXJzZXIsIGNh
cHNmaWx0ZXIsIG51bGxwdHIpOworICAgICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHMocGFyc2Vy
LCAic3JjIiwgY2Fwc2ZpbHRlciwgInNpbmsiKTsKKworICAgICAgICBHUmVmUHRyPEdzdFBhZD4g
cGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHBhcnNlciwgInNpbmsi
KSk7CisgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9z
dF9wYWRfbmV3KCJzaW5rIiwgcGFkLmdldCgpKSk7CisKKyAgICAgICAgcGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGNhcHNmaWx0ZXIsICJzcmMiKSk7CisgICAgICAg
IGdzdF9lbGVtZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3KCJz
cmMiLCBwYWQuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWVkaWFUeXBlLCAi
dmlkZW8veC1oMjY1IikpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBmaWx0ZXJDYXBzID0g
YWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtaDI2NSIsICJhbGlnbm1lbnQi
LCBHX1RZUEVfU1RSSU5HLCAiYXUiLCBudWxscHRyKSk7CisgICAgICAgIEdzdEVsZW1lbnQqIGNh
cHNmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImNhcHNmaWx0ZXIiLCBudWxscHRy
KTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KGNhcHNmaWx0ZXIsICJjYXBzIiwgZmlsdGVyQ2Fwcy5n
ZXQoKSwgbnVsbHB0cik7CisKKyAgICAgICAgc3RyZWFtLT5wYXJzZXIgPSBnc3RfYmluX25ldyhw
YXJzZXJCaW5OYW1lLmdldCgpKTsKKworICAgICAgICBHc3RFbGVtZW50KiBwYXJzZXIgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoImgyNjVwYXJzZSIsIG51bGxwdHIpOworICAgICAgICBnc3Rf
YmluX2FkZF9tYW55KEdTVF9CSU4oc3RyZWFtLT5wYXJzZXIpLCBwYXJzZXIsIGNhcHNmaWx0ZXIs
IG51bGxwdHIpOworICAgICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHMocGFyc2VyLCAic3JjIiwg
Y2Fwc2ZpbHRlciwgInNpbmsiKTsKKworICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRv
cHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHBhcnNlciwgInNpbmsiKSk7CisgICAg
ICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3
KCJzaW5rIiwgcGFkLmdldCgpKSk7CisKKyAgICAgICAgcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVt
ZW50X2dldF9zdGF0aWNfcGFkKGNhcHNmaWx0ZXIsICJzcmMiKSk7CisgICAgICAgIGdzdF9lbGVt
ZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3KCJzcmMiLCBwYWQu
Z2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWVkaWFUeXBlLCAiYXVkaW8vbXBl
ZyIpKSB7CisgICAgICAgIGdpbnQgbXBlZ3ZlcnNpb24gPSAtMTsKKyAgICAgICAgZ3N0X3N0cnVj
dHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgIm1wZWd2ZXJzaW9uIiwgJm1wZWd2ZXJzaW9uKTsKKwor
ICAgICAgICBHc3RFbGVtZW50KiBwYXJzZXI7CisgICAgICAgIGlmIChtcGVndmVyc2lvbiA9PSAx
KQorICAgICAgICAgICAgcGFyc2VyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJtcGVnYXVk
aW9wYXJzZSIsIG51bGxwdHIpOworICAgICAgICBlbHNlIGlmIChtcGVndmVyc2lvbiA9PSAyIHx8
IG1wZWd2ZXJzaW9uID09IDQpCisgICAgICAgICAgICBwYXJzZXIgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UoImFhY3BhcnNlIiwgbnVsbHB0cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIHN0cmVhbS0+cGFyc2VyID0gZ3N0X2Jp
bl9uZXcocGFyc2VyQmluTmFtZS5nZXQoKSk7CisgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4o
c3RyZWFtLT5wYXJzZXIpLCBwYXJzZXIpOworCisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocGFyc2VyLCAic2luayIpKTsK
KyAgICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChzdHJlYW0tPnBhcnNlciwgZ3N0X2dob3N0X3Bh
ZF9uZXcoInNpbmsiLCBwYWQuZ2V0KCkpKTsKKworICAgICAgICBwYWQgPSBhZG9wdEdSZWYoZ3N0
X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocGFyc2VyLCAic3JjIikpOworICAgICAgICBnc3RfZWxl
bWVudF9hZGRfcGFkKHN0cmVhbS0+cGFyc2VyLCBnc3RfZ2hvc3RfcGFkX25ldygic3JjIiwgcGFk
LmdldCgpKSk7CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1lZGlhVHlwZSwgInZpZGVvL3gt
dnA5IikpCisgICAgICAgIHN0cmVhbS0+cGFyc2VyID0gbnVsbHB0cjsKKyAgICBlbHNlIHsKKyAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChzdHJlYW0tPnBhcmVudCwgIlVuc3VwcG9ydGVkIG1lZGlh
IGZvcm1hdDogJXMiLCBtZWRpYVR5cGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
R1NUX09CSkVDVF9MT0NLKHdlYktpdE1lZGlhU3JjKTsKKyAgICBzdHJlYW0tPnR5cGUgPSBVbmtu
b3duOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlhU3JjKTsKKworICAgIEdSZWZQ
dHI8R3N0UGFkPiBzb3VyY2VQYWQ7CisgICAgaWYgKHN0cmVhbS0+cGFyc2VyKSB7CisgICAgICAg
IGdzdF9iaW5fYWRkKEdTVF9CSU4oc3RyZWFtLT5wYXJlbnQpLCBzdHJlYW0tPnBhcnNlcik7Cisg
ICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoc3RyZWFtLT5wYXJzZXIp
OworCisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVt
ZW50X2dldF9zdGF0aWNfcGFkKHN0cmVhbS0+cGFyc2VyLCAic2luayIpKTsKKyAgICAgICAgc291
cmNlUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHN0cmVhbS0+YXBw
c3JjLCAic3JjIikpOworICAgICAgICBnc3RfcGFkX2xpbmsoc291cmNlUGFkLmdldCgpLCBzaW5r
UGFkLmdldCgpKTsKKyAgICAgICAgc291cmNlUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dl
dF9zdGF0aWNfcGFkKHN0cmVhbS0+cGFyc2VyLCAic3JjIikpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSwgIlN0cmVhbSBvZiB0
eXBlICVzIGRvZXNuJ3QgcmVxdWlyZSBhIHBhcnNlciBiaW4iLCBtZWRpYVR5cGUpOworICAgICAg
ICBzb3VyY2VQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoc3RyZWFt
LT5hcHBzcmMsICJzcmMiKSk7CisgICAgfQorICAgIEFTU0VSVChzb3VyY2VQYWQpOworCisgICAg
Ly8gRklYTUU6IElzIHBhZElkIHRoZSBiZXN0IHdheSB0byBpZGVudGlmeSB0aGUgU3RyZWFtPyBX
aGF0IGFib3V0IHRyYWNrSWQ/CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qoc291cmNl
UGFkLmdldCgpKSwgInBhZElkIiwgR0lOVF9UT19QT0lOVEVSKHBhZElkKSk7CisgICAgd2ViS2l0
TWVkaWFTcmNMaW5rUGFyc2VyKHNvdXJjZVBhZC5nZXQoKSwgY2Fwcywgc3RyZWFtKTsKKworICAg
IEFTU0VSVChzdHJlYW0tPnBhcmVudC0+cHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlKTsKKyAgICBp
bnQgc2lnbmFsID0gLTE7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVkaWFTcmMpOwor
ICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KG1lZGlhVHlwZSwgImF1ZGlvIikpIHsKKyAgICAgICAg
c3RyZWFtLT50eXBlID0gQXVkaW87CisgICAgICAgIHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1i
ZXJPZkF1ZGlvU3RyZWFtcysrOworICAgICAgICBzaWduYWwgPSBTSUdOQUxfQVVESU9fQ0hBTkdF
RDsKKyAgICAgICAgc3RyZWFtLT5hdWRpb1RyYWNrID0gUmVmUHRyPFdlYkNvcmU6OkF1ZGlvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyPihzdGF0aWNfY2FzdDxXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lcio+KHRyYWNrUHJpdmF0ZS5nZXQoKSkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJf
aGFzX3ByZWZpeChtZWRpYVR5cGUsICJ2aWRlbyIpKSB7CisgICAgICAgIHN0cmVhbS0+dHlwZSA9
IFZpZGVvOworICAgICAgICBzdHJlYW0tPnBhcmVudC0+cHJpdi0+bnVtYmVyT2ZWaWRlb1N0cmVh
bXMrKzsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX1ZJREVPX0NIQU5HRUQ7CisgICAgICAgIHN0
cmVhbS0+dmlkZW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJl
YW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqPih0
cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2hhc19wcmVmaXgobWVk
aWFUeXBlLCAidGV4dCIpKSB7CisgICAgICAgIHN0cmVhbS0+dHlwZSA9IFRleHQ7CisgICAgICAg
IHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1iZXJPZlRleHRTdHJlYW1zKys7CisgICAgICAgIHNp
Z25hbCA9IFNJR05BTF9URVhUX0NIQU5HRUQ7CisKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQg
dGV4dCB0cmFja3MuCisgICAgfQorICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlhU3Jj
KTsKKworICAgIGlmIChzaWduYWwgIT0gLTEpCisgICAgICAgIGdfc2lnbmFsX2VtaXQoR19PQkpF
Q1Qoc3RyZWFtLT5wYXJlbnQpLCB3ZWJLaXRNZWRpYVNyY1NpZ25hbHNbc2lnbmFsXSwgMCwgbnVs
bHB0cik7Cit9CisKK3ZvaWQgUGxheWJhY2tQaXBlbGluZTo6cmVhdHRhY2hUcmFjayhSZWZQdHI8
U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZSwgUmVmUHRy
PFRyYWNrUHJpdmF0ZUJhc2U+IHRyYWNrUHJpdmF0ZSkKK3sKKyAgICBHU1RfREVCVUcoIlJlLWF0
dGFjaGluZyB0cmFjayIpOworCisgICAgLy8gRklYTUU6IE1heWJlIHJlbW92ZSB0aGlzIG1ldGhv
ZC4gTm93IHRoZSBjYXBzIGNoYW5nZSBpcyBtYW5hZ2VkIGJ5IGdzdF9hcHBzcmNfcHVzaF9zYW1w
bGUoKSBpbiBlbnF1ZXVlU2FtcGxlKCkKKyAgICAvLyBhbmQgZmx1c2hBbmRFbnF1ZXVlTm9uRGlz
cGxheWluZ1NhbXBsZXMoKS4KKworICAgIFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYyA9
IG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCk7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVk
aWFTcmMpOworICAgIFN0cmVhbSogc3RyZWFtID0gZ2V0U3RyZWFtQnlTb3VyY2VCdWZmZXJQcml2
YXRlKHdlYktpdE1lZGlhU3JjLCBzb3VyY2VCdWZmZXJQcml2YXRlLmdldCgpKTsKKyAgICBHU1Rf
T0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBBU1NFUlQoc3RyZWFtICYmIHN0
cmVhbS0+dHlwZSAhPSBJbnZhbGlkKTsKKworICAgIC8vIFRoZSBjYXBzIGNoYW5nZSBpcyBtYW5h
Z2VkIGJ5IGdzdF9hcHBzcmNfcHVzaF9zYW1wbGUoKSBpbiBlbnF1ZXVlU2FtcGxlKCkgYW5kCisg
ICAgLy8gZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMoKSwgc28gdGhlIGNhcHMg
YXJlbid0IHNldCBmcm9tIGhlcmUuCisgICAgR1JlZlB0cjxHc3RDYXBzPiBhcHBzcmNDYXBzID0g
YWRvcHRHUmVmKGdzdF9hcHBfc3JjX2dldF9jYXBzKEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3Jj
KSkpOworICAgIGNvbnN0IGdjaGFyKiBtZWRpYVR5cGUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1l
KGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoYXBwc3JjQ2Fwcy5nZXQoKSwgMCkpOworICAgIGludCBz
aWduYWwgPSAtMTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisgICAg
aWYgKGdfc3RyX2hhc19wcmVmaXgobWVkaWFUeXBlLCAiYXVkaW8iKSkgeworICAgICAgICBBU1NF
UlQoc3RyZWFtLT50eXBlID09IEF1ZGlvKTsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX0FVRElP
X0NIQU5HRUQ7CisgICAgICAgIHN0cmVhbS0+YXVkaW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpB
dWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXVkaW9UcmFj
a1ByaXZhdGVHU3RyZWFtZXIqPih0cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYg
KGdfc3RyX2hhc19wcmVmaXgobWVkaWFUeXBlLCAidmlkZW8iKSkgeworICAgICAgICBBU1NFUlQo
c3RyZWFtLT50eXBlID09IFZpZGVvKTsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX1ZJREVPX0NI
QU5HRUQ7CisgICAgICAgIHN0cmVhbS0+dmlkZW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpWaWRl
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9UcmFja1By
aXZhdGVHU3RyZWFtZXIqPih0cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKGdf
c3RyX2hhc19wcmVmaXgobWVkaWFUeXBlLCAidGV4dCIpKSB7CisgICAgICAgIEFTU0VSVChzdHJl
YW0tPnR5cGUgPT0gVGV4dCk7CisgICAgICAgIHNpZ25hbCA9IFNJR05BTF9URVhUX0NIQU5HRUQ7
CisKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgdGV4dCB0cmFja3MuCisgICAgfQorICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlhU3JjKTsKKworICAgIGlmIChzaWduYWwgIT0gLTEp
CisgICAgICAgIGdfc2lnbmFsX2VtaXQoR19PQkpFQ1Qoc3RyZWFtLT5wYXJlbnQpLCB3ZWJLaXRN
ZWRpYVNyY1NpZ25hbHNbc2lnbmFsXSwgMCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgUGxheWJhY2tQ
aXBlbGluZTo6bm90aWZ5RHVyYXRpb25DaGFuZ2VkKCkKK3sKKyAgICBnc3RfZWxlbWVudF9wb3N0
X21lc3NhZ2UoR1NUX0VMRU1FTlQobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSksIGdzdF9tZXNzYWdl
X25ld19kdXJhdGlvbl9jaGFuZ2VkKEdTVF9PQkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSkp
KTsKKyAgICAvLyBXZWJLaXRNZWRpYVNyYyB3aWxsIGFzayBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0UgZm9yIHRoZSBuZXcgZHVyYXRpb24gbGF0ZXIsIHdoZW4gc29tZWJvZHkgYXNrcyBm
b3IgaXQuCit9CisKK3ZvaWQgUGxheWJhY2tQaXBlbGluZTo6bWFya0VuZE9mU3RyZWFtKE1lZGlh
U291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMpCit7CisgICAgV2ViS2l0TWVkaWFTcmNQ
cml2YXRlKiBwcml2ID0gbV93ZWJLaXRNZWRpYVNyYy0+cHJpdjsKKworICAgIEdTVF9ERUJVR19P
QkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSwgIkhhdmUgRU9TIik7CisKKyAgICBHU1RfT0JK
RUNUX0xPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgYm9vbCBhbGxUcmFja3NDb25m
aWd1cmVkID0gcHJpdi0+YWxsVHJhY2tzQ29uZmlndXJlZDsKKyAgICBpZiAoIWFsbFRyYWNrc0Nv
bmZpZ3VyZWQpCisgICAgICAgIHByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQgPSB0cnVlOworICAg
IEdTVF9PQkpFQ1RfVU5MT0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpOworCisgICAgaWYgKCFh
bGxUcmFja3NDb25maWd1cmVkKSB7CisgICAgICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyhH
U1RfRUxFTUVOVChtX3dlYktpdE1lZGlhU3JjLmdldCgpKSk7CisgICAgICAgIHdlYktpdE1lZGlh
U3JjRG9Bc3luY0RvbmUobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgfQorCisgICAgVmVj
dG9yPEdzdEFwcFNyYyo+IGFwcHNyY3M7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJLaXRN
ZWRpYVNyYy5nZXQoKSk7CisgICAgZm9yIChTdHJlYW0qIHN0cmVhbSA6IHByaXYtPnN0cmVhbXMp
IHsKKyAgICAgICAgaWYgKHN0cmVhbS0+YXBwc3JjKQorICAgICAgICAgICAgYXBwc3Jjcy5hcHBl
bmQoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpKTsKKyAgICB9CisgICAgR1NUX09CSkVDVF9V
TkxPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisKKyAgICBmb3IgKEdzdEFwcFNyYyogYXBw
c3JjIDogYXBwc3JjcykKKyAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShhcHBzcmMp
OworfQorCit2b2lkIFBsYXliYWNrUGlwZWxpbmU6OmZsdXNoKEF0b21pY1N0cmluZyB0cmFja0lk
KQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIEdTVF9ERUJVRygi
Zmx1c2g6IHRyYWNrSWQ9JXMiLCB0cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisg
ICAgR1NUX09CSkVDVF9MT0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpOworICAgIFN0cmVhbSog
c3RyZWFtID0gZ2V0U3RyZWFtQnlUcmFja0lkKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksIHRyYWNr
SWQpOworCisgICAgaWYgKCFzdHJlYW0pIHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV93
ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdHJl
YW0tPmxhc3RFbnF1ZXVlZFRpbWUgPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisgICAgR1NU
X09CSkVDVF9VTkxPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7Cit9CisKK3ZvaWQgUGxheWJh
Y2tQaXBlbGluZTo6ZW5xdWV1ZVNhbXBsZShSZWZQdHI8TWVkaWFTYW1wbGU+IG1lZGlhU2FtcGxl
KQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIEF0b21pY1N0cmlu
ZyB0cmFja0lkID0gbWVkaWFTYW1wbGUtPnRyYWNrSUQoKTsKKworICAgIEdTVF9UUkFDRSgiZW5x
dWVpbmcgc2FtcGxlIHRyYWNrSWQ9JXMgUFRTPSVmIHByZXNlbnRhdGlvblNpemU9JS4wZnglLjBm
IGF0ICUiIEdTVF9USU1FX0ZPUk1BVCAiIGR1cmF0aW9uOiAlIiBHU1RfVElNRV9GT1JNQVQsCisg
ICAgICAgIHRyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbWVkaWFTYW1wbGUtPnByZXNl
bnRhdGlvblRpbWUoKS50b0Zsb2F0KCksCisgICAgICAgIG1lZGlhU2FtcGxlLT5wcmVzZW50YXRp
b25TaXplKCkud2lkdGgoKSwgbWVkaWFTYW1wbGUtPnByZXNlbnRhdGlvblNpemUoKS5oZWlnaHQo
KSwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyhXZWJDb3JlOjp0b0dzdENsb2NrVGltZShtZWRpYVNh
bXBsZS0+cHJlc2VudGF0aW9uVGltZSgpLnRvRG91YmxlKCkpKSwKKyAgICAgICAgR1NUX1RJTUVf
QVJHUyhXZWJDb3JlOjp0b0dzdENsb2NrVGltZShtZWRpYVNhbXBsZS0+ZHVyYXRpb24oKS50b0Rv
dWJsZSgpKSkpOworCisgICAgU3RyZWFtKiBzdHJlYW0gPSBnZXRTdHJlYW1CeVRyYWNrSWQobV93
ZWJLaXRNZWRpYVNyYy5nZXQoKSwgdHJhY2tJZCk7CisKKyAgICBpZiAoIXN0cmVhbSkgeworICAg
ICAgICBHU1RfV0FSTklORygiTm8gc3RyZWFtISIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFzdHJlYW0tPnNvdXJjZUJ1ZmZlci0+aXNSZWFkeUZvck1vcmVTYW1wbGVzKHRy
YWNrSWQpKSB7CisgICAgICAgIEdTVF9ERUJVRygiZW5xdWV1ZVNhbXBsZTogc2tpcCBhZGRpbmcg
bmV3IHNhbXBsZSBmb3IgdHJhY2tJZD0lcywgU0IgaXMgbm90IHJlYWR5IHlldCIsIHRyYWNrSWQu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBH
c3RFbGVtZW50KiBhcHBzcmMgPSBzdHJlYW0tPmFwcHNyYzsKKyAgICBNZWRpYVRpbWUgbGFzdEVu
cXVldWVkVGltZSA9IHN0cmVhbS0+bGFzdEVucXVldWVkVGltZTsKKworICAgIEdTdHJlYW1lck1l
ZGlhU2FtcGxlKiBzYW1wbGUgPSBzdGF0aWNfY2FzdDxHU3RyZWFtZXJNZWRpYVNhbXBsZSo+KG1l
ZGlhU2FtcGxlLmdldCgpKTsKKyAgICBpZiAoc2FtcGxlLT5zYW1wbGUoKSAmJiBnc3Rfc2FtcGxl
X2dldF9idWZmZXIoc2FtcGxlLT5zYW1wbGUoKSkpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RTYW1w
bGU+IGdzdFNhbXBsZSA9IHNhbXBsZS0+c2FtcGxlKCk7CisgICAgICAgIEdzdEJ1ZmZlciogYnVm
ZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKGdzdFNhbXBsZS5nZXQoKSk7CisgICAgICAgIGxh
c3RFbnF1ZXVlZFRpbWUgPSBzYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKTsKKworICAgICAgICBH
U1RfQlVGRkVSX0ZMQUdfVU5TRVQoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfREVDT0RFX09OTFkp
OworICAgICAgICBwdXNoU2FtcGxlKEdTVF9BUFBfU1JDKGFwcHNyYyksIGdzdFNhbXBsZS5nZXQo
KSk7CisgICAgICAgIC8vIGdzdF9hcHBfc3JjX3B1c2hfc2FtcGxlKCkgdXNlcyB0cmFuc2Zlci1u
b25lIGZvciBnc3RTYW1wbGUuCisKKyAgICAgICAgc3RyZWFtLT5sYXN0RW5xdWV1ZWRUaW1lID0g
bGFzdEVucXVldWVkVGltZTsKKyAgICB9Cit9CisKK0dzdEVsZW1lbnQqIFBsYXliYWNrUGlwZWxp
bmU6OnBpcGVsaW5lKCkKK3sKKyAgICBpZiAoIW1fd2ViS2l0TWVkaWFTcmMgfHwgIUdTVF9FTEVN
RU5UX1BBUkVOVChHU1RfRUxFTUVOVChtX3dlYktpdE1lZGlhU3JjLmdldCgpKSkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIEdTVF9FTEVNRU5UX1BBUkVOVChHU1RfRUxF
TUVOVF9QQVJFTlQoR1NUX0VMRU1FTlQobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSkpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1Bs
YXliYWNrUGlwZWxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4ZjBlNjBkMzMzMmY2ODEz
ZDEzODY2ZDI3MjZkZWI3YmU1ZWVmYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXliYWNrUGlwZWxpbmUuaApAQCAt
MCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNF
KQorCisvLyBQbGF5YmFja1BpcGVsaW5lIGlzIChzb3J0IG9mKSBhIGZyaWVuZCBjbGFzcyBvZiBX
ZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci4KKworI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNl
R1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXJQcml2YXRl
LmgiCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgor
I2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0
ZTw+IEdSZWZQdHI8V2ViS2l0TWVkaWFTcmM+IGFkb3B0R1JlZihXZWJLaXRNZWRpYVNyYyopOwor
dGVtcGxhdGU8PiBXZWJLaXRNZWRpYVNyYyogcmVmR1B0cjxXZWJLaXRNZWRpYVNyYz4oV2ViS2l0
TWVkaWFTcmMqKTsKK3RlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8V2ViS2l0TWVkaWFTcmM+KFdl
YktpdE1lZGlhU3JjKik7Cit9OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRl
bnRUeXBlOworY2xhc3MgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjsKK2NsYXNzIE1lZGlh
U291cmNlR1N0cmVhbWVyOworCitjbGFzcyBQbGF5YmFja1BpcGVsaW5lOiBwdWJsaWMgUmVmQ291
bnRlZDxQbGF5YmFja1BpcGVsaW5lPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxQbGF5YmFj
a1BpcGVsaW5lPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
UGxheWJhY2tQaXBlbGluZSgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1BpcGVs
aW5lKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCBzZXRXZWJLaXRNZWRpYVNyYyhXZWJLaXRNZWRp
YVNyYyopOworICAgIFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYygpOworCisgICAgTWVk
aWFTb3VyY2VQcml2YXRlOjpBZGRTdGF0dXMgYWRkU291cmNlQnVmZmVyKFJlZlB0cjxTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyPik7CisgICAgdm9pZCByZW1vdmVTb3VyY2VCdWZmZXIoUmVm
UHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+KTsKKyAgICB2b2lkIGF0dGFjaFRyYWNr
KFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiwgUmVmUHRyPFRyYWNrUHJpdmF0
ZUJhc2U+LCBHc3RTdHJ1Y3R1cmUqLCBHc3RDYXBzKik7CisgICAgdm9pZCByZWF0dGFjaFRyYWNr
KFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiwgUmVmUHRyPFRyYWNrUHJpdmF0
ZUJhc2U+KTsKKyAgICB2b2lkIG5vdGlmeUR1cmF0aW9uQ2hhbmdlZCgpOworCisgICAgLy8gRnJv
bSBNZWRpYVNvdXJjZUdTdHJlYW1lci4KKyAgICB2b2lkIG1hcmtFbmRPZlN0cmVhbShNZWRpYVNv
dXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzKTsKKworICAgIC8vIEZyb20gU291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lci4KKyAgICB2b2lkIGZsdXNoKEF0b21pY1N0cmluZyk7CisgICAg
dm9pZCBlbnF1ZXVlU2FtcGxlKFJlZlB0cjxNZWRpYVNhbXBsZT4pOworCisgICAgR3N0RWxlbWVu
dCogcGlwZWxpbmUoKTsKK3ByaXZhdGU6CisgICAgUGxheWJhY2tQaXBlbGluZSgpID0gZGVmYXVs
dDsKKyAgICBHUmVmUHRyPFdlYktpdE1lZGlhU3JjPiBtX3dlYktpdE1lZGlhU3JjOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292895</attachid>
            <date>2016-10-26 01:21:21 -0700</date>
            <delta_ts>2016-10-26 01:45:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162901-20161026081733.patch</filename>
            <type>text/plain</type>
            <size>23593</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3ODcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDk3N2RjNTIwY2UxMmE2
MzhmYWZlOGJkZWNiOWQ0MzBiM2M4M2Y4OS4uZWE0MzAwMzRlN2MzOGU2NDU2NDljZTczYzFlZjAx
ZjZhYzJjMDMwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM1IEBACiAyMDE2LTEwLTI2ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXSBQbGF5YmFjayBwaXBlbGluZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWGFi
aWVyIFJvZHJpZ3Vlei1DYWx2YXIuCisKKyAgICAgICAgRW5jYXBzdWxhdGUgdGhlIHJlc3BvbnNp
YmlsaXR5IHRvIGludGVyYWN0IHdpdGggdGhlIEdTdHJlYW1lciBwbGF5YmFjayBwaXBlbGluZSBh
bmQgdGhlCisgICAgICAgIGRpZmZlcmVudCBzdHJlYW1zIG1hbmFnZWQgYnkgdGhlIFdlYktpdE1l
ZGlhU3JjIGVsZW1lbnQgaW50byBhIG5ldyBQbGF5YmFja1BpcGVsaW5lIGNsYXNzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNw
cDogQWRkZWQuCisgICAgICAgIChnZXRTdHJlYW1CeVRyYWNrSWQpOgorICAgICAgICAoZ2V0U3Ry
ZWFtQnlTb3VyY2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKHB1c2hTYW1wbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxheWJhY2tQaXBlbGluZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXliYWNrUGlwZWxpbmU6OlBsYXliYWNrUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tQaXBlbGluZTo6flBsYXliYWNrUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tQaXBlbGluZTo6c2V0V2ViS2l0TWVkaWFTcmMpOgorICAgICAgICAoV2ViQ29yZTo6
UGxheWJhY2tQaXBlbGluZTo6d2ViS2l0TWVkaWFTcmMpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tQaXBlbGluZTo6YWRkU291cmNlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrUGlwZWxpbmU6OnJlbW92ZVNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF5
YmFja1BpcGVsaW5lOjphdHRhY2hUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Bp
cGVsaW5lOjpyZWF0dGFjaFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrUGlwZWxp
bmU6Om5vdGlmeUR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Bp
cGVsaW5lOjptYXJrRW5kT2ZTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQaXBl
bGluZTo6Zmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxheWJhY2tQaXBlbGluZTo6ZW5xdWV1ZVNhbXBsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1BpcGVsaW5lOjpwaXBlbGluZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmg6IEFkZGVkLgorCisyMDE2LTEwLTI2
ICBFbnJpcXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CisKICAgICAg
ICAgW0dTdHJlYW1lcl1bTVNFXVtFTUVdIE1TRSBzcGVjaWFsaXphdGlvbiBvZiBNZWRpYSBQbGF5
ZXIgUHJpdmF0ZSBmb3IgR1N0cmVhbWVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjI5MDAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGlu
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjJjOTI2MDM1MDc0MjhiYTFhNzk3YmIyYmU4NjdkMDRkNzEzOTNl
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5jcHAKQEAgLTAsMCArMSw0NDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNl
bnRyaWN1bGFyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGxheWJhY2tQaXBlbGluZS5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBV
U0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKQorCisjaW5jbHVkZSAiQXVkaW9U
cmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYVNhbXBsZS5o
IgorI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxl
LmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUg
IlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFw
cHNyYy5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR011dGV4
TG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9n
bGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKwor
c3RhdGljIFN0cmVhbSogZ2V0U3RyZWFtQnlUcmFja0lkKFdlYktpdE1lZGlhU3JjKiwgQXRvbWlj
U3RyaW5nKTsKK3N0YXRpYyBTdHJlYW0qIGdldFN0cmVhbUJ5U291cmNlQnVmZmVyUHJpdmF0ZShX
ZWJLaXRNZWRpYVNyYyosIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIqKTsK
Kworc3RhdGljIFN0cmVhbSogZ2V0U3RyZWFtQnlUcmFja0lkKFdlYktpdE1lZGlhU3JjKiBzb3Vy
Y2UsIEF0b21pY1N0cmluZyB0cmFja0lkU3RyaW5nKQoreworICAgIC8vIFdlYktpdE1lZGlhU3Jj
IHNob3VsZCBiZSBsb2NrZWQgYXQgdGhpcyBwb2ludC4KKyAgICBmb3IgKFN0cmVhbSogc3RyZWFt
IDogc291cmNlLT5wcml2LT5zdHJlYW1zKSB7CisgICAgICAgIGlmIChzdHJlYW0tPnR5cGUgIT0g
V2ViQ29yZTo6SW52YWxpZAorICAgICAgICAgICAgJiYgKChzdHJlYW0tPmF1ZGlvVHJhY2sgJiYg
c3RyZWFtLT5hdWRpb1RyYWNrLT5pZCgpID09IHRyYWNrSWRTdHJpbmcpCisgICAgICAgICAgICAg
ICAgfHwgKHN0cmVhbS0+dmlkZW9UcmFjayAmJiBzdHJlYW0tPnZpZGVvVHJhY2stPmlkKCkgPT0g
dHJhY2tJZFN0cmluZykgKSApIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJlYW07CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBTdHJlYW0qIGdldFN0
cmVhbUJ5U291cmNlQnVmZmVyUHJpdmF0ZShXZWJLaXRNZWRpYVNyYyogc291cmNlLCBXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKiBzb3VyY2VCdWZmZXJQcml2YXRlKQorewor
ICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiBzb3VyY2UtPnByaXYtPnN0cmVhbXMpIHsKKyAgICAg
ICAgaWYgKHN0cmVhbS0+c291cmNlQnVmZmVyID09IHNvdXJjZUJ1ZmZlclByaXZhdGUpCisgICAg
ICAgICAgICByZXR1cm4gc3RyZWFtOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
Ly8gRklYTUU6IFVzZSBnc3RfYXBwX3NyY19wdXNoX3NhbXBsZSgpIGluc3RlYWQgd2hlbiB3ZSBz
d2l0Y2ggdG8gdGhlIGFwcHJvcHJpYXRlIEdTdHJlYW1lciB2ZXJzaW9uLgorc3RhdGljIEdzdEZs
b3dSZXR1cm4gcHVzaFNhbXBsZShHc3RBcHBTcmMqIGFwcHNyYywgR3N0U2FtcGxlKiBzYW1wbGUp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoR1NUX0lTX1NBTVBMRShzYW1wbGUpLCBHU1Rf
RkxPV19FUlJPUik7CisKKyAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X3NhbXBsZV9nZXRfY2Fwcyhz
YW1wbGUpOworICAgIGlmIChjYXBzKQorICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2FwcyhhcHBz
cmMsIGNhcHMpOworICAgIGVsc2UKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKGFwcHNyYywg
InJlY2VpdmVkIHNhbXBsZSB3aXRob3V0IGNhcHMiKTsKKworICAgIEdzdEJ1ZmZlciogYnVmZmVy
ID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKHNhbXBsZSk7CisgICAgaWYgKFVOTElLRUxZKCFidWZm
ZXIpKSB7CisgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChhcHBzcmMsICJyZWNlaXZlZCBzYW1w
bGUgd2l0aG91dCBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0K
KworICAgIC8vIGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKCkgc3RlYWxzIHRoZSByZWZlcmVuY2Us
IHdlIG5lZWQgYW4gYWRkaXRpb25hbCBvbmUuCisgICAgcmV0dXJuIGdzdF9hcHBfc3JjX3B1c2hf
YnVmZmVyKGFwcHNyYywgZ3N0X2J1ZmZlcl9yZWYoYnVmZmVyKSk7Cit9CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordm9pZCBQbGF5YmFja1BpcGVsaW5lOjpzZXRXZWJLaXRNZWRpYVNyYyhXZWJL
aXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMpCit7CisgICAgR1NUX0RFQlVHKCJ3ZWJLaXRNZWRp
YVNyYz0lcCIsIHdlYktpdE1lZGlhU3JjKTsKKyAgICBtX3dlYktpdE1lZGlhU3JjID0gd2ViS2l0
TWVkaWFTcmM7Cit9CisKK1dlYktpdE1lZGlhU3JjKiBQbGF5YmFja1BpcGVsaW5lOjp3ZWJLaXRN
ZWRpYVNyYygpCit7CisgICAgcmV0dXJuIG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCk7Cit9CisKK01l
ZGlhU291cmNlUHJpdmF0ZTo6QWRkU3RhdHVzIFBsYXliYWNrUGlwZWxpbmU6OmFkZFNvdXJjZUJ1
ZmZlcihSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJp
dmF0ZSkKK3sKKyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3dlYktpdE1lZGlh
U3JjLT5wcml2OworCisgICAgaWYgKHByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQpIHsKKyAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCAiQWRkaW5nIG5ldyBz
b3VyY2UgYnVmZmVycyBhZnRlciBmaXJzdCBkYXRhIG5vdCBzdXBwb3J0ZWQgeWV0Iik7CisgICAg
ICAgIHJldHVybiBNZWRpYVNvdXJjZVByaXZhdGU6Ok5vdFN1cHBvcnRlZDsKKyAgICB9CisKKyAg
ICBHU1RfREVCVUdfT0JKRUNUKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksICJTdGF0ZSAlZCIsIGlu
dChHU1RfU1RBVEUobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSkpKTsKKworICAgIFN0cmVhbSogc3Ry
ZWFtID0gbmV3IFN0cmVhbSB7IDAgfTsKKyAgICBzdHJlYW0tPnBhcmVudCA9IG1fd2ViS2l0TWVk
aWFTcmMuZ2V0KCk7CisgICAgc3RyZWFtLT5hcHBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21h
a2UoImFwcHNyYyIsIG51bGxwdHIpOworICAgIHN0cmVhbS0+YXBwc3JjTmVlZERhdGFGbGFnID0g
ZmFsc2U7CisgICAgc3RyZWFtLT5zb3VyY2VCdWZmZXIgPSBzb3VyY2VCdWZmZXJQcml2YXRlLmdl
dCgpOworCisgICAgLy8gTm8gdHJhY2sgaGFzIGJlZW4gYXR0YWNoZWQgeWV0LgorICAgIHN0cmVh
bS0+dHlwZSA9IEludmFsaWQ7CisgICAgc3RyZWFtLT5wYXJzZXIgPSBudWxscHRyOworICAgIHN0
cmVhbS0+Y2FwcyA9IG51bGxwdHI7CisgICAgc3RyZWFtLT5hdWRpb1RyYWNrID0gbnVsbHB0cjsK
KyAgICBzdHJlYW0tPnZpZGVvVHJhY2sgPSBudWxscHRyOworICAgIHN0cmVhbS0+cHJlc2VudGF0
aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOworICAgIHN0cmVhbS0+bGFzdEVucXVldWVk
VGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKworICAgIGdzdF9hcHBfc3JjX3NldF9j
YWxsYmFja3MoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpLCAmZW5hYmxlZEFwcHNyY0NhbGxi
YWNrcywgc3RyZWFtLT5wYXJlbnQsIG51bGxwdHIpOworICAgIGdzdF9hcHBfc3JjX3NldF9lbWl0
X3NpZ25hbHMoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpLCBGQUxTRSk7CisgICAgZ3N0X2Fw
cF9zcmNfc2V0X3N0cmVhbV90eXBlKEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSwgR1NUX0FQ
UF9TVFJFQU1fVFlQRV9TRUVLQUJMRSk7CisKKyAgICBnc3RfYXBwX3NyY19zZXRfbWF4X2J5dGVz
KEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSwgMiAqIFdURjo6TUIpOworICAgIGdfb2JqZWN0
X3NldChHX09CSkVDVChzdHJlYW0tPmFwcHNyYyksICJibG9jayIsIEZBTFNFLCAibWluLXBlcmNl
bnQiLCAyMCwgbnVsbHB0cik7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJLaXRNZWRpYVNy
Yy5nZXQoKSk7CisgICAgcHJpdi0+c3RyZWFtcy5wcmVwZW5kKHN0cmVhbSk7CisgICAgR1NUX09C
SkVDVF9VTkxPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisKKyAgICBnc3RfYmluX2FkZChH
U1RfQklOKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpLCBzdHJlYW0tPmFwcHNyYyk7CisgICAgZ3N0
X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChzdHJlYW0tPmFwcHNyYyk7CisKKyAgICBy
ZXR1cm4gTWVkaWFTb3VyY2VQcml2YXRlOjpPazsKK30KKwordm9pZCBQbGF5YmFja1BpcGVsaW5l
OjpyZW1vdmVTb3VyY2VCdWZmZXIoUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+
IHNvdXJjZUJ1ZmZlclByaXZhdGUpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkp
OworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCAiRWxlbWVu
dCByZW1vdmVkIGZyb20gTWVkaWFTb3VyY2UiKTsKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJL
aXRNZWRpYVNyYy5nZXQoKSk7CisgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gbV93
ZWJLaXRNZWRpYVNyYy0+cHJpdjsKKyAgICBTdHJlYW0qIHN0cmVhbSA9IG51bGxwdHI7CisgICAg
RGVxdWU8U3RyZWFtKj46Oml0ZXJhdG9yIHN0cmVhbVBvc2l0aW9uID0gcHJpdi0+c3RyZWFtcy5i
ZWdpbigpOworCisgICAgZm9yICg7IHN0cmVhbVBvc2l0aW9uICE9IHByaXYtPnN0cmVhbXMuZW5k
KCk7ICsrc3RyZWFtUG9zaXRpb24pIHsKKyAgICAgICAgaWYgKCgqc3RyZWFtUG9zaXRpb24pLT5z
b3VyY2VCdWZmZXIgPT0gc291cmNlQnVmZmVyUHJpdmF0ZS5nZXQoKSkgeworICAgICAgICAgICAg
c3RyZWFtID0gKnN0cmVhbVBvc2l0aW9uOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKHN0cmVhbSkKKyAgICAgICAgcHJpdi0+c3RyZWFtcy5yZW1vdmUoc3Ry
ZWFtUG9zaXRpb24pOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0
KCkpOworCisgICAgaWYgKHN0cmVhbSkKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNGcmVlU3RyZWFt
KG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksIHN0cmVhbSk7Cit9CisKK3ZvaWQgUGxheWJhY2tQaXBl
bGluZTo6YXR0YWNoVHJhY2soUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IHNv
dXJjZUJ1ZmZlclByaXZhdGUsIFJlZlB0cjxUcmFja1ByaXZhdGVCYXNlPiB0cmFja1ByaXZhdGUs
IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlLCBHc3RDYXBzKiBjYXBzKQoreworICAgIFdlYktpdE1l
ZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYyA9IG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCk7CisKKyAgICBH
U1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVkaWFTcmMpOworICAgIFN0cmVhbSogc3RyZWFtID0gZ2V0
U3RyZWFtQnlTb3VyY2VCdWZmZXJQcml2YXRlKHdlYktpdE1lZGlhU3JjLCBzb3VyY2VCdWZmZXJQ
cml2YXRlLmdldCgpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisK
KyAgICBBU1NFUlQoc3RyZWFtKTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNy
Yyk7CisgICAgdW5zaWduZWQgcGFkSWQgPSBzdHJlYW0tPnBhcmVudC0+cHJpdi0+bnVtYmVyT2ZQ
YWRzOworICAgIHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1iZXJPZlBhZHMrKzsKKyAgICBHU1Rf
T0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBjb25zdCBnY2hhciogbWVkaWFU
eXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOworCisgICAgR1NUX0RFQlVH
X09CSkVDVCh3ZWJLaXRNZWRpYVNyYywgIkNvbmZpZ3VyZWQgdHJhY2sgJXM6IGFwcHNyYz0lcywg
cGFkSWQ9JXUsIG1lZGlhVHlwZT0lcyIsIHRyYWNrUHJpdmF0ZS0+aWQoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBHU1RfRUxFTUVOVF9OQU1FKHN0cmVhbS0+YXBwc3JjKSwgcGFkSWQsIG1lZGlh
VHlwZSk7CisKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiBwYXJzZXJCaW5OYW1lKGdfc3RyZHVwX3By
aW50Zigic3RyZWFtcGFyc2VyJXUiLCBwYWRJZCkpOworCisgICAgaWYgKCFnX3N0cmNtcDAobWVk
aWFUeXBlLCAidmlkZW8veC1oMjY0IikpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBmaWx0
ZXJDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtaDI2NCIsICJh
bGlnbm1lbnQiLCBHX1RZUEVfU1RSSU5HLCAiYXUiLCBudWxscHRyKSk7CisgICAgICAgIEdzdEVs
ZW1lbnQqIGNhcHNmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImNhcHNmaWx0ZXIi
LCBudWxscHRyKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KGNhcHNmaWx0ZXIsICJjYXBzIiwgZmls
dGVyQ2Fwcy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICAgICAgc3RyZWFtLT5wYXJzZXIgPSBnc3Rf
YmluX25ldyhwYXJzZXJCaW5OYW1lLmdldCgpKTsKKworICAgICAgICBHc3RFbGVtZW50KiBwYXJz
ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImgyNjRwYXJzZSIsIG51bGxwdHIpOworICAg
ICAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4oc3RyZWFtLT5wYXJzZXIpLCBwYXJzZXIsIGNh
cHNmaWx0ZXIsIG51bGxwdHIpOworICAgICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHMocGFyc2Vy
LCAic3JjIiwgY2Fwc2ZpbHRlciwgInNpbmsiKTsKKworICAgICAgICBHUmVmUHRyPEdzdFBhZD4g
cGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHBhcnNlciwgInNpbmsi
KSk7CisgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9z
dF9wYWRfbmV3KCJzaW5rIiwgcGFkLmdldCgpKSk7CisKKyAgICAgICAgcGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGNhcHNmaWx0ZXIsICJzcmMiKSk7CisgICAgICAg
IGdzdF9lbGVtZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3KCJz
cmMiLCBwYWQuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWVkaWFUeXBlLCAi
dmlkZW8veC1oMjY1IikpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBmaWx0ZXJDYXBzID0g
YWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtaDI2NSIsICJhbGlnbm1lbnQi
LCBHX1RZUEVfU1RSSU5HLCAiYXUiLCBudWxscHRyKSk7CisgICAgICAgIEdzdEVsZW1lbnQqIGNh
cHNmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImNhcHNmaWx0ZXIiLCBudWxscHRy
KTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KGNhcHNmaWx0ZXIsICJjYXBzIiwgZmlsdGVyQ2Fwcy5n
ZXQoKSwgbnVsbHB0cik7CisKKyAgICAgICAgc3RyZWFtLT5wYXJzZXIgPSBnc3RfYmluX25ldyhw
YXJzZXJCaW5OYW1lLmdldCgpKTsKKworICAgICAgICBHc3RFbGVtZW50KiBwYXJzZXIgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoImgyNjVwYXJzZSIsIG51bGxwdHIpOworICAgICAgICBnc3Rf
YmluX2FkZF9tYW55KEdTVF9CSU4oc3RyZWFtLT5wYXJzZXIpLCBwYXJzZXIsIGNhcHNmaWx0ZXIs
IG51bGxwdHIpOworICAgICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHMocGFyc2VyLCAic3JjIiwg
Y2Fwc2ZpbHRlciwgInNpbmsiKTsKKworICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRv
cHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHBhcnNlciwgInNpbmsiKSk7CisgICAg
ICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3
KCJzaW5rIiwgcGFkLmdldCgpKSk7CisKKyAgICAgICAgcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVt
ZW50X2dldF9zdGF0aWNfcGFkKGNhcHNmaWx0ZXIsICJzcmMiKSk7CisgICAgICAgIGdzdF9lbGVt
ZW50X2FkZF9wYWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3KCJzcmMiLCBwYWQu
Z2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWVkaWFUeXBlLCAiYXVkaW8vbXBl
ZyIpKSB7CisgICAgICAgIGdpbnQgbXBlZ3ZlcnNpb24gPSAtMTsKKyAgICAgICAgZ3N0X3N0cnVj
dHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgIm1wZWd2ZXJzaW9uIiwgJm1wZWd2ZXJzaW9uKTsKKwor
ICAgICAgICBHc3RFbGVtZW50KiBwYXJzZXI7CisgICAgICAgIGlmIChtcGVndmVyc2lvbiA9PSAx
KQorICAgICAgICAgICAgcGFyc2VyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJtcGVnYXVk
aW9wYXJzZSIsIG51bGxwdHIpOworICAgICAgICBlbHNlIGlmIChtcGVndmVyc2lvbiA9PSAyIHx8
IG1wZWd2ZXJzaW9uID09IDQpCisgICAgICAgICAgICBwYXJzZXIgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UoImFhY3BhcnNlIiwgbnVsbHB0cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIHN0cmVhbS0+cGFyc2VyID0gZ3N0X2Jp
bl9uZXcocGFyc2VyQmluTmFtZS5nZXQoKSk7CisgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4o
c3RyZWFtLT5wYXJzZXIpLCBwYXJzZXIpOworCisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocGFyc2VyLCAic2luayIpKTsK
KyAgICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChzdHJlYW0tPnBhcnNlciwgZ3N0X2dob3N0X3Bh
ZF9uZXcoInNpbmsiLCBwYWQuZ2V0KCkpKTsKKworICAgICAgICBwYWQgPSBhZG9wdEdSZWYoZ3N0
X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocGFyc2VyLCAic3JjIikpOworICAgICAgICBnc3RfZWxl
bWVudF9hZGRfcGFkKHN0cmVhbS0+cGFyc2VyLCBnc3RfZ2hvc3RfcGFkX25ldygic3JjIiwgcGFk
LmdldCgpKSk7CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1lZGlhVHlwZSwgInZpZGVvL3gt
dnA5IikpCisgICAgICAgIHN0cmVhbS0+cGFyc2VyID0gbnVsbHB0cjsKKyAgICBlbHNlIHsKKyAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChzdHJlYW0tPnBhcmVudCwgIlVuc3VwcG9ydGVkIG1lZGlh
IGZvcm1hdDogJXMiLCBtZWRpYVR5cGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
R1NUX09CSkVDVF9MT0NLKHdlYktpdE1lZGlhU3JjKTsKKyAgICBzdHJlYW0tPnR5cGUgPSBVbmtu
b3duOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlhU3JjKTsKKworICAgIEdSZWZQ
dHI8R3N0UGFkPiBzb3VyY2VQYWQ7CisgICAgaWYgKHN0cmVhbS0+cGFyc2VyKSB7CisgICAgICAg
IGdzdF9iaW5fYWRkKEdTVF9CSU4oc3RyZWFtLT5wYXJlbnQpLCBzdHJlYW0tPnBhcnNlcik7Cisg
ICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoc3RyZWFtLT5wYXJzZXIp
OworCisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVt
ZW50X2dldF9zdGF0aWNfcGFkKHN0cmVhbS0+cGFyc2VyLCAic2luayIpKTsKKyAgICAgICAgc291
cmNlUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHN0cmVhbS0+YXBw
c3JjLCAic3JjIikpOworICAgICAgICBnc3RfcGFkX2xpbmsoc291cmNlUGFkLmdldCgpLCBzaW5r
UGFkLmdldCgpKTsKKyAgICAgICAgc291cmNlUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dl
dF9zdGF0aWNfcGFkKHN0cmVhbS0+cGFyc2VyLCAic3JjIikpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSwgIlN0cmVhbSBvZiB0
eXBlICVzIGRvZXNuJ3QgcmVxdWlyZSBhIHBhcnNlciBiaW4iLCBtZWRpYVR5cGUpOworICAgICAg
ICBzb3VyY2VQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoc3RyZWFt
LT5hcHBzcmMsICJzcmMiKSk7CisgICAgfQorICAgIEFTU0VSVChzb3VyY2VQYWQpOworCisgICAg
Ly8gRklYTUU6IElzIHBhZElkIHRoZSBiZXN0IHdheSB0byBpZGVudGlmeSB0aGUgU3RyZWFtPyBX
aGF0IGFib3V0IHRyYWNrSWQ/CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qoc291cmNl
UGFkLmdldCgpKSwgInBhZElkIiwgR0lOVF9UT19QT0lOVEVSKHBhZElkKSk7CisgICAgd2ViS2l0
TWVkaWFTcmNMaW5rUGFyc2VyKHNvdXJjZVBhZC5nZXQoKSwgY2Fwcywgc3RyZWFtKTsKKworICAg
IEFTU0VSVChzdHJlYW0tPnBhcmVudC0+cHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlKTsKKyAgICBp
bnQgc2lnbmFsID0gLTE7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVkaWFTcmMpOwor
ICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KG1lZGlhVHlwZSwgImF1ZGlvIikpIHsKKyAgICAgICAg
c3RyZWFtLT50eXBlID0gQXVkaW87CisgICAgICAgIHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1i
ZXJPZkF1ZGlvU3RyZWFtcysrOworICAgICAgICBzaWduYWwgPSBTSUdOQUxfQVVESU9fQ0hBTkdF
RDsKKyAgICAgICAgc3RyZWFtLT5hdWRpb1RyYWNrID0gUmVmUHRyPFdlYkNvcmU6OkF1ZGlvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyPihzdGF0aWNfY2FzdDxXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lcio+KHRyYWNrUHJpdmF0ZS5nZXQoKSkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJf
aGFzX3ByZWZpeChtZWRpYVR5cGUsICJ2aWRlbyIpKSB7CisgICAgICAgIHN0cmVhbS0+dHlwZSA9
IFZpZGVvOworICAgICAgICBzdHJlYW0tPnBhcmVudC0+cHJpdi0+bnVtYmVyT2ZWaWRlb1N0cmVh
bXMrKzsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX1ZJREVPX0NIQU5HRUQ7CisgICAgICAgIHN0
cmVhbS0+dmlkZW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJl
YW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqPih0
cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2hhc19wcmVmaXgobWVk
aWFUeXBlLCAidGV4dCIpKSB7CisgICAgICAgIHN0cmVhbS0+dHlwZSA9IFRleHQ7CisgICAgICAg
IHN0cmVhbS0+cGFyZW50LT5wcml2LT5udW1iZXJPZlRleHRTdHJlYW1zKys7CisgICAgICAgIHNp
Z25hbCA9IFNJR05BTF9URVhUX0NIQU5HRUQ7CisKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQg
dGV4dCB0cmFja3MuCisgICAgfQorICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlhU3Jj
KTsKKworICAgIGlmIChzaWduYWwgIT0gLTEpCisgICAgICAgIGdfc2lnbmFsX2VtaXQoR19PQkpF
Q1Qoc3RyZWFtLT5wYXJlbnQpLCB3ZWJLaXRNZWRpYVNyY1NpZ25hbHNbc2lnbmFsXSwgMCwgbnVs
bHB0cik7Cit9CisKK3ZvaWQgUGxheWJhY2tQaXBlbGluZTo6cmVhdHRhY2hUcmFjayhSZWZQdHI8
U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZSwgUmVmUHRy
PFRyYWNrUHJpdmF0ZUJhc2U+IHRyYWNrUHJpdmF0ZSkKK3sKKyAgICBHU1RfREVCVUcoIlJlLWF0
dGFjaGluZyB0cmFjayIpOworCisgICAgLy8gRklYTUU6IE1heWJlIHJlbW92ZSB0aGlzIG1ldGhv
ZC4gTm93IHRoZSBjYXBzIGNoYW5nZSBpcyBtYW5hZ2VkIGJ5IGdzdF9hcHBzcmNfcHVzaF9zYW1w
bGUoKSBpbiBlbnF1ZXVlU2FtcGxlKCkKKyAgICAvLyBhbmQgZmx1c2hBbmRFbnF1ZXVlTm9uRGlz
cGxheWluZ1NhbXBsZXMoKS4KKworICAgIFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYyA9
IG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCk7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVk
aWFTcmMpOworICAgIFN0cmVhbSogc3RyZWFtID0gZ2V0U3RyZWFtQnlTb3VyY2VCdWZmZXJQcml2
YXRlKHdlYktpdE1lZGlhU3JjLCBzb3VyY2VCdWZmZXJQcml2YXRlLmdldCgpKTsKKyAgICBHU1Rf
T0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBBU1NFUlQoc3RyZWFtICYmIHN0
cmVhbS0+dHlwZSAhPSBJbnZhbGlkKTsKKworICAgIC8vIFRoZSBjYXBzIGNoYW5nZSBpcyBtYW5h
Z2VkIGJ5IGdzdF9hcHBzcmNfcHVzaF9zYW1wbGUoKSBpbiBlbnF1ZXVlU2FtcGxlKCkgYW5kCisg
ICAgLy8gZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMoKSwgc28gdGhlIGNhcHMg
YXJlbid0IHNldCBmcm9tIGhlcmUuCisgICAgR1JlZlB0cjxHc3RDYXBzPiBhcHBzcmNDYXBzID0g
YWRvcHRHUmVmKGdzdF9hcHBfc3JjX2dldF9jYXBzKEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3Jj
KSkpOworICAgIGNvbnN0IGdjaGFyKiBtZWRpYVR5cGUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1l
KGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoYXBwc3JjQ2Fwcy5nZXQoKSwgMCkpOworICAgIGludCBz
aWduYWwgPSAtMTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisgICAg
aWYgKGdfc3RyX2hhc19wcmVmaXgobWVkaWFUeXBlLCAiYXVkaW8iKSkgeworICAgICAgICBBU1NF
UlQoc3RyZWFtLT50eXBlID09IEF1ZGlvKTsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX0FVRElP
X0NIQU5HRUQ7CisgICAgICAgIHN0cmVhbS0+YXVkaW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpB
dWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXVkaW9UcmFj
a1ByaXZhdGVHU3RyZWFtZXIqPih0cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYg
KGdfc3RyX2hhc19wcmVmaXgobWVkaWFUeXBlLCAidmlkZW8iKSkgeworICAgICAgICBBU1NFUlQo
c3RyZWFtLT50eXBlID09IFZpZGVvKTsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX1ZJREVPX0NI
QU5HRUQ7CisgICAgICAgIHN0cmVhbS0+dmlkZW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpWaWRl
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9UcmFja1By
aXZhdGVHU3RyZWFtZXIqPih0cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKGdf
c3RyX2hhc19wcmVmaXgobWVkaWFUeXBlLCAidGV4dCIpKSB7CisgICAgICAgIEFTU0VSVChzdHJl
YW0tPnR5cGUgPT0gVGV4dCk7CisgICAgICAgIHNpZ25hbCA9IFNJR05BTF9URVhUX0NIQU5HRUQ7
CisKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgdGV4dCB0cmFja3MuCisgICAgfQorICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlhU3JjKTsKKworICAgIGlmIChzaWduYWwgIT0gLTEp
CisgICAgICAgIGdfc2lnbmFsX2VtaXQoR19PQkpFQ1Qoc3RyZWFtLT5wYXJlbnQpLCB3ZWJLaXRN
ZWRpYVNyY1NpZ25hbHNbc2lnbmFsXSwgMCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgUGxheWJhY2tQ
aXBlbGluZTo6bm90aWZ5RHVyYXRpb25DaGFuZ2VkKCkKK3sKKyAgICBnc3RfZWxlbWVudF9wb3N0
X21lc3NhZ2UoR1NUX0VMRU1FTlQobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSksIGdzdF9tZXNzYWdl
X25ld19kdXJhdGlvbl9jaGFuZ2VkKEdTVF9PQkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSkp
KTsKKyAgICAvLyBXZWJLaXRNZWRpYVNyYyB3aWxsIGFzayBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0UgZm9yIHRoZSBuZXcgZHVyYXRpb24gbGF0ZXIsIHdoZW4gc29tZWJvZHkgYXNrcyBm
b3IgaXQuCit9CisKK3ZvaWQgUGxheWJhY2tQaXBlbGluZTo6bWFya0VuZE9mU3RyZWFtKE1lZGlh
U291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMpCit7CisgICAgV2ViS2l0TWVkaWFTcmNQ
cml2YXRlKiBwcml2ID0gbV93ZWJLaXRNZWRpYVNyYy0+cHJpdjsKKworICAgIEdTVF9ERUJVR19P
QkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSwgIkhhdmUgRU9TIik7CisKKyAgICBHU1RfT0JK
RUNUX0xPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgYm9vbCBhbGxUcmFja3NDb25m
aWd1cmVkID0gcHJpdi0+YWxsVHJhY2tzQ29uZmlndXJlZDsKKyAgICBpZiAoIWFsbFRyYWNrc0Nv
bmZpZ3VyZWQpCisgICAgICAgIHByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQgPSB0cnVlOworICAg
IEdTVF9PQkpFQ1RfVU5MT0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpOworCisgICAgaWYgKCFh
bGxUcmFja3NDb25maWd1cmVkKSB7CisgICAgICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyhH
U1RfRUxFTUVOVChtX3dlYktpdE1lZGlhU3JjLmdldCgpKSk7CisgICAgICAgIHdlYktpdE1lZGlh
U3JjRG9Bc3luY0RvbmUobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgfQorCisgICAgVmVj
dG9yPEdzdEFwcFNyYyo+IGFwcHNyY3M7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93ZWJLaXRN
ZWRpYVNyYy5nZXQoKSk7CisgICAgZm9yIChTdHJlYW0qIHN0cmVhbSA6IHByaXYtPnN0cmVhbXMp
IHsKKyAgICAgICAgaWYgKHN0cmVhbS0+YXBwc3JjKQorICAgICAgICAgICAgYXBwc3Jjcy5hcHBl
bmQoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpKTsKKyAgICB9CisgICAgR1NUX09CSkVDVF9V
TkxPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisKKyAgICBmb3IgKEdzdEFwcFNyYyogYXBw
c3JjIDogYXBwc3JjcykKKyAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShhcHBzcmMp
OworfQorCit2b2lkIFBsYXliYWNrUGlwZWxpbmU6OmZsdXNoKEF0b21pY1N0cmluZyB0cmFja0lk
KQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIEdTVF9ERUJVRygi
Zmx1c2g6IHRyYWNrSWQ9JXMiLCB0cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisg
ICAgR1NUX09CSkVDVF9MT0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpOworICAgIFN0cmVhbSog
c3RyZWFtID0gZ2V0U3RyZWFtQnlUcmFja0lkKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksIHRyYWNr
SWQpOworCisgICAgaWYgKCFzdHJlYW0pIHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV93
ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdHJl
YW0tPmxhc3RFbnF1ZXVlZFRpbWUgPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisgICAgR1NU
X09CSkVDVF9VTkxPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7Cit9CisKK3ZvaWQgUGxheWJh
Y2tQaXBlbGluZTo6ZW5xdWV1ZVNhbXBsZShSZWZQdHI8TWVkaWFTYW1wbGU+IG1lZGlhU2FtcGxl
KQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIEF0b21pY1N0cmlu
ZyB0cmFja0lkID0gbWVkaWFTYW1wbGUtPnRyYWNrSUQoKTsKKworICAgIEdTVF9UUkFDRSgiZW5x
dWVpbmcgc2FtcGxlIHRyYWNrSWQ9JXMgUFRTPSVmIHByZXNlbnRhdGlvblNpemU9JS4wZnglLjBm
IGF0ICUiIEdTVF9USU1FX0ZPUk1BVCAiIGR1cmF0aW9uOiAlIiBHU1RfVElNRV9GT1JNQVQsCisg
ICAgICAgIHRyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbWVkaWFTYW1wbGUtPnByZXNl
bnRhdGlvblRpbWUoKS50b0Zsb2F0KCksCisgICAgICAgIG1lZGlhU2FtcGxlLT5wcmVzZW50YXRp
b25TaXplKCkud2lkdGgoKSwgbWVkaWFTYW1wbGUtPnByZXNlbnRhdGlvblNpemUoKS5oZWlnaHQo
KSwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyhXZWJDb3JlOjp0b0dzdENsb2NrVGltZShtZWRpYVNh
bXBsZS0+cHJlc2VudGF0aW9uVGltZSgpLnRvRG91YmxlKCkpKSwKKyAgICAgICAgR1NUX1RJTUVf
QVJHUyhXZWJDb3JlOjp0b0dzdENsb2NrVGltZShtZWRpYVNhbXBsZS0+ZHVyYXRpb24oKS50b0Rv
dWJsZSgpKSkpOworCisgICAgU3RyZWFtKiBzdHJlYW0gPSBnZXRTdHJlYW1CeVRyYWNrSWQobV93
ZWJLaXRNZWRpYVNyYy5nZXQoKSwgdHJhY2tJZCk7CisKKyAgICBpZiAoIXN0cmVhbSkgeworICAg
ICAgICBHU1RfV0FSTklORygiTm8gc3RyZWFtISIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFzdHJlYW0tPnNvdXJjZUJ1ZmZlci0+aXNSZWFkeUZvck1vcmVTYW1wbGVzKHRy
YWNrSWQpKSB7CisgICAgICAgIEdTVF9ERUJVRygiZW5xdWV1ZVNhbXBsZTogc2tpcCBhZGRpbmcg
bmV3IHNhbXBsZSBmb3IgdHJhY2tJZD0lcywgU0IgaXMgbm90IHJlYWR5IHlldCIsIHRyYWNrSWQu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBH
c3RFbGVtZW50KiBhcHBzcmMgPSBzdHJlYW0tPmFwcHNyYzsKKyAgICBNZWRpYVRpbWUgbGFzdEVu
cXVldWVkVGltZSA9IHN0cmVhbS0+bGFzdEVucXVldWVkVGltZTsKKworICAgIEdTdHJlYW1lck1l
ZGlhU2FtcGxlKiBzYW1wbGUgPSBzdGF0aWNfY2FzdDxHU3RyZWFtZXJNZWRpYVNhbXBsZSo+KG1l
ZGlhU2FtcGxlLmdldCgpKTsKKyAgICBpZiAoc2FtcGxlLT5zYW1wbGUoKSAmJiBnc3Rfc2FtcGxl
X2dldF9idWZmZXIoc2FtcGxlLT5zYW1wbGUoKSkpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RTYW1w
bGU+IGdzdFNhbXBsZSA9IHNhbXBsZS0+c2FtcGxlKCk7CisgICAgICAgIEdzdEJ1ZmZlciogYnVm
ZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKGdzdFNhbXBsZS5nZXQoKSk7CisgICAgICAgIGxh
c3RFbnF1ZXVlZFRpbWUgPSBzYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKTsKKworICAgICAgICBH
U1RfQlVGRkVSX0ZMQUdfVU5TRVQoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfREVDT0RFX09OTFkp
OworICAgICAgICBwdXNoU2FtcGxlKEdTVF9BUFBfU1JDKGFwcHNyYyksIGdzdFNhbXBsZS5nZXQo
KSk7CisgICAgICAgIC8vIGdzdF9hcHBfc3JjX3B1c2hfc2FtcGxlKCkgdXNlcyB0cmFuc2Zlci1u
b25lIGZvciBnc3RTYW1wbGUuCisKKyAgICAgICAgc3RyZWFtLT5sYXN0RW5xdWV1ZWRUaW1lID0g
bGFzdEVucXVldWVkVGltZTsKKyAgICB9Cit9CisKK0dzdEVsZW1lbnQqIFBsYXliYWNrUGlwZWxp
bmU6OnBpcGVsaW5lKCkKK3sKKyAgICBpZiAoIW1fd2ViS2l0TWVkaWFTcmMgfHwgIUdTVF9FTEVN
RU5UX1BBUkVOVChHU1RfRUxFTUVOVChtX3dlYktpdE1lZGlhU3JjLmdldCgpKSkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIEdTVF9FTEVNRU5UX1BBUkVOVChHU1RfRUxF
TUVOVF9QQVJFTlQoR1NUX0VMRU1FTlQobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSkpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1Bs
YXliYWNrUGlwZWxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4ZjBlNjBkMzMzMmY2ODEz
ZDEzODY2ZDI3MjZkZWI3YmU1ZWVmYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXliYWNrUGlwZWxpbmUuaApAQCAt
MCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNF
KQorCisvLyBQbGF5YmFja1BpcGVsaW5lIGlzIChzb3J0IG9mKSBhIGZyaWVuZCBjbGFzcyBvZiBX
ZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci4KKworI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNl
R1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXJQcml2YXRl
LmgiCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgor
I2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0
ZTw+IEdSZWZQdHI8V2ViS2l0TWVkaWFTcmM+IGFkb3B0R1JlZihXZWJLaXRNZWRpYVNyYyopOwor
dGVtcGxhdGU8PiBXZWJLaXRNZWRpYVNyYyogcmVmR1B0cjxXZWJLaXRNZWRpYVNyYz4oV2ViS2l0
TWVkaWFTcmMqKTsKK3RlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8V2ViS2l0TWVkaWFTcmM+KFdl
YktpdE1lZGlhU3JjKik7Cit9OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRl
bnRUeXBlOworY2xhc3MgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjsKK2NsYXNzIE1lZGlh
U291cmNlR1N0cmVhbWVyOworCitjbGFzcyBQbGF5YmFja1BpcGVsaW5lOiBwdWJsaWMgUmVmQ291
bnRlZDxQbGF5YmFja1BpcGVsaW5lPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxQbGF5YmFj
a1BpcGVsaW5lPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
UGxheWJhY2tQaXBlbGluZSgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5QbGF5YmFja1BpcGVs
aW5lKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCBzZXRXZWJLaXRNZWRpYVNyYyhXZWJLaXRNZWRp
YVNyYyopOworICAgIFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYygpOworCisgICAgTWVk
aWFTb3VyY2VQcml2YXRlOjpBZGRTdGF0dXMgYWRkU291cmNlQnVmZmVyKFJlZlB0cjxTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyPik7CisgICAgdm9pZCByZW1vdmVTb3VyY2VCdWZmZXIoUmVm
UHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+KTsKKyAgICB2b2lkIGF0dGFjaFRyYWNr
KFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiwgUmVmUHRyPFRyYWNrUHJpdmF0
ZUJhc2U+LCBHc3RTdHJ1Y3R1cmUqLCBHc3RDYXBzKik7CisgICAgdm9pZCByZWF0dGFjaFRyYWNr
KFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiwgUmVmUHRyPFRyYWNrUHJpdmF0
ZUJhc2U+KTsKKyAgICB2b2lkIG5vdGlmeUR1cmF0aW9uQ2hhbmdlZCgpOworCisgICAgLy8gRnJv
bSBNZWRpYVNvdXJjZUdTdHJlYW1lci4KKyAgICB2b2lkIG1hcmtFbmRPZlN0cmVhbShNZWRpYVNv
dXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzKTsKKworICAgIC8vIEZyb20gU291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lci4KKyAgICB2b2lkIGZsdXNoKEF0b21pY1N0cmluZyk7CisgICAg
dm9pZCBlbnF1ZXVlU2FtcGxlKFJlZlB0cjxNZWRpYVNhbXBsZT4pOworCisgICAgR3N0RWxlbWVu
dCogcGlwZWxpbmUoKTsKK3ByaXZhdGU6CisgICAgUGxheWJhY2tQaXBlbGluZSgpID0gZGVmYXVs
dDsKKyAgICBHUmVmUHRyPFdlYktpdE1lZGlhU3JjPiBtX3dlYktpdE1lZGlhU3JjOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>