<?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>182530</bug_id>
          
          <creation_ts>2018-02-06 03:13:09 -0800</creation_ts>
          <short_desc>[GStreamer] Playbin3 support</short_desc>
          <delta_ts>2018-02-19 01:00:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>182531</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1396756</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-02-06 03:13:09 -0800</bug_when>
    <thetext>The player should react to the stream collection messages emitted by playbin3 when the USE_PLAYBIN3 env var is set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396766</commentid>
    <comment_count>1</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-02-06 04:22:50 -0800</bug_when>
    <thetext>This will imply almost a rewrite of the Track support in the backend... fun</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399489</commentid>
    <comment_count>2</comment_count>
      <attachid>333908</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-02-15 09:52:01 -0800</bug_when>
    <thetext>Created attachment 333908
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399491</commentid>
    <comment_count>3</comment_count>
      <attachid>333910</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-02-15 09:57:07 -0800</bug_when>
    <thetext>Created attachment 333910
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399512</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-02-15 10:41:36 -0800</bug_when>
    <thetext>GTK and WPE EWS are both red.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399837</commentid>
    <comment_count>5</comment_count>
      <attachid>333910</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2018-02-16 00:47:24 -0800</bug_when>
    <thetext>Comment on attachment 333910
Patch

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

Unless I am mistaken, there are some leaks that need to be plugged.

&gt; Source/WebCore/platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:37
&gt; +AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer(WeakPtr&lt;MediaPlayerPrivateGStreamer&gt; player, gint index, GRefPtr&lt;GstPad&gt; pad)

We should consider using move semantics for the pad and stream in the overload in these methods, specially because of the way they are used, Though I agree this can be done in a new bug.

&gt; Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp:356
&gt; +#if USE(GSTREAMER_PLAYBIN3)

I have doubts about this. These are needed now only because of the playbin3 code but I think they could end up being useful for regular code too, so I would unflag them for playbin3 but I leave the final decision to you.

&gt; Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.h:46
&gt; +#if USE(GSTREAMER_PLAYBIN3)

ditto

&gt; Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.h:135
&gt; +#if USE(GSTREAMER_PLAYBIN3)

ditto

&gt; Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:62
&gt; +    : InbandTextTrackPrivate(WebVTT), TrackPrivateBaseGStreamer(this, index, stream)

You can move , TrackPrivate... to a new line

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:680
&gt; +    GST_INFO(&quot;Media has %u video tracks, %u audio tracks and %u text tracks&quot;, validVideoStreams.size(),
&gt; +        validAudioStreams.size(), validTextStreams.size());

You can use a single line

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:715
&gt; +    case TrackPrivateBaseGStreamer::TrackType::Audio: {

You don&apos;t need variable block allocation, you can remove the { }

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:769
&gt; +    if (selectedStreams)
&gt; +        g_list_free(selectedStreams);

I think we&apos;re leaking the strings inside the GList, aren&apos;t we? I think we can avoid the g_strdup in the g_list_append.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1298
&gt; +            GRefPtr&lt;GstStream&gt; stream = gst_message_streams_selected_get_stream(message, i);

gst_message_streams_selected_get_stream is transfer full, you need to adopt here.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:213
&gt; +        StreamCollectionChanged = 1 &lt;&lt; 7

If looks like you can flag this for playbin3 only

&gt; Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:52
&gt; +#if USE(GSTREAMER_PLAYBIN3)
&gt; +    , m_stream(nullptr)
&gt; +#endif

not needed

&gt; Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:69
&gt; +    , m_pad(nullptr)

not needed

&gt; Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:76
&gt; +    // We can&apos;t call notifyTrackOfTagsChanged() directly, because we need tagsChanged()
&gt; +    // to setup m_tags.

Single line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399847</commentid>
    <comment_count>6</comment_count>
      <attachid>334026</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-02-16 02:07:12 -0800</bug_when>
    <thetext>Created attachment 334026
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399848</commentid>
    <comment_count>7</comment_count>
      <attachid>333910</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-02-16 02:07:40 -0800</bug_when>
    <thetext>Comment on attachment 333910
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:37
&gt;&gt; +AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer(WeakPtr&lt;MediaPlayerPrivateGStreamer&gt; player, gint index, GRefPtr&lt;GstPad&gt; pad)
&gt; 
&gt; We should consider using move semantics for the pad and stream in the overload in these methods, specially because of the way they are used, Though I agree this can be done in a new bug.

I can try to apply this in this patch.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp:356
&gt;&gt; +#if USE(GSTREAMER_PLAYBIN3)
&gt; 
&gt; I have doubts about this. These are needed now only because of the playbin3 code but I think they could end up being useful for regular code too, so I would unflag them for playbin3 but I leave the final decision to you.

I actually tried to enable those only for gst 1.10.x but I was getting crashes in gst-mpegts (wtf?) that were fixed in git already. Since we use GstStream* only for playbin3 I thought I&apos;d guard this code accordingly.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:62
&gt;&gt; +    : InbandTextTrackPrivate(WebVTT), TrackPrivateBaseGStreamer(this, index, stream)
&gt; 
&gt; You can move , TrackPrivate... to a new line

True, I just copied the other constructor :)

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:680
&gt;&gt; +        validAudioStreams.size(), validTextStreams.size());
&gt; 
&gt; You can use a single line

Ok

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:715
&gt;&gt; +    case TrackPrivateBaseGStreamer::TrackType::Audio: {
&gt; 
&gt; You don&apos;t need variable block allocation, you can remove the { }

Sure

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:769
&gt;&gt; +        g_list_free(selectedStreams);
&gt; 
&gt; I think we&apos;re leaking the strings inside the GList, aren&apos;t we? I think we can avoid the g_strdup in the g_list_append.

Avoiding the strdup was my first attempt yes but: error: invalid conversion from ‘const void*’ to ‘gpointer {aka void*}’ [-fpermissive]
             selectedStreams = g_list_append(selectedStreams, m_currentVideoStreamId.utf8().data());
                                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1298
&gt;&gt; +            GRefPtr&lt;GstStream&gt; stream = gst_message_streams_selected_get_stream(message, i);
&gt; 
&gt; gst_message_streams_selected_get_stream is transfer full, you need to adopt here.

Ooops

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:213
&gt;&gt; +        StreamCollectionChanged = 1 &lt;&lt; 7
&gt; 
&gt; If looks like you can flag this for playbin3 only

Indeed.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:52
&gt;&gt; +#endif
&gt; 
&gt; not needed

Sure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400278</commentid>
    <comment_count>8</comment_count>
      <attachid>334026</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2018-02-19 00:11:13 -0800</bug_when>
    <thetext>Comment on attachment 334026
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:738
&gt; +    case TrackPrivateBaseGStreamer::TrackType::Unknown:

You could event default: here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400286</commentid>
    <comment_count>9</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-02-19 00:58:29 -0800</bug_when>
    <thetext>Committed r228617: &lt;https://trac.webkit.org/changeset/228617&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400288</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-02-19 01:00:11 -0800</bug_when>
    <thetext>&lt;rdar://problem/37663471&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333908</attachid>
            <date>2018-02-15 09:52:01 -0800</date>
            <delta_ts>2018-02-15 09:57:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182530-20180215175159.patch</filename>
            <type>text/plain</type>
            <size>63468</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI4NTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2RjMDBhZTFlYWE4MzQw
NGJiOTYxOTI1ZjM2Y2Q4MjMwYjUyYzExYi4uNjBjMzhkNDkxZGIwZjFlZTMzMDhmZTY5MTJkZTEy
NjVjNDUzNmExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMSBAQAorMjAxOC0wMi0xNSAgUGhp
bGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1l
cl0gUGxheWJpbjMgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTgyNTMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9wdC1pbiBzdXBwb3J0IGZvciB0aGUg
cGxheWJpbjMgR1N0cmVhbWVyCisgICAgICAgIGVsZW1lbnQuIFRoaXMgbmV3IHBsYXliYWNrIGVs
ZW1lbnQgaXMgc3RpbGwgY29uc2lkZXJlZAorICAgICAgICBleHBlcmltZW50YWwgYnV0IGl0IGNh
biBzdGlsbCBiZSB2ZXJ5IHVzZWZ1bCBmb3IgbWVkaWEgYXNzZXRzCisgICAgICAgIGNvbnRhaW5p
bmcgbXVsdGlwbGUgdHJhY2tzIG9mIHRoZSBzYW1lIHR5cGUuIEluIHN1Y2ggc2NlbmFyaW8KKyAg
ICAgICAgYXVkaW8vdmlkZW8gZGVjb2RlcnMgd291bGQgYmUgY3JlYXRlZCBvbmx5IGZvciB0aGUg
c2VsZWN0ZWQgdHJhY2tzCisgICAgICAgIHdoZXJlYXMgcGxheWJpbjIgY3JlYXRlcyBkZWNvZGVy
IGZvciBlYWNoIHRyYWNrLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcDogVGFrZQorICAgICAgICBhIHdlYWsgcG9p
bnRlciBvZiB0aGUgbWVkaWEgcGxheWVyIGluc3RlYWQgb2YgcGxheWJpbiBhbmQgY2FsbCB0aGUK
KyAgICAgICAgcGxheWVyIHdoZW4gZW5hYmxpbmcgdHJhY2tzLiBBbHNvIHVzZSB0aGUgR3N0U3Ry
ZWFtIEFQSSBpbnN0ZWFkIG9mCisgICAgICAgIGluc3BlY3RpbmcgdGhlIHBhZCB3aGVuIHBsYXli
aW4zIGlzIHVzZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
cjo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9U
cmFja1ByaXZhdGVHU3RyZWFtZXI6OmRpc2Nvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6Om1hcmtBc0FjdGl2ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6c2V0RW5hYmxlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3Bw
OiBHc3RTdHJlYW0gYW5kCisgICAgICAgIEdzdFN0cmVhbUNvbGxlY3Rpb24gc21hcnQgcG9pbnRl
ciBzdXBwb3J0LgorICAgICAgICAoV1RGOjphZG9wdEdSZWYpOgorICAgICAgICAoV1RGOjpyZWZH
UHRyPEdzdFN0cmVhbT4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8R3N0U3RyZWFtPik6Cisg
ICAgICAgIChXVEY6OnJlZkdQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4pOgorICAgICAgICAoV1RG
OjpkZXJlZkdQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwOgor
ICAgICAgICBVc2UgdGhlIEdzdFN0cmVhbSBBUEkgaW5zdGVhZCBvZiBpbnNwZWN0aW5nIHRoZSBw
YWQgd2hlbiBwbGF5YmluMworICAgICAgICBpcyB1c2VkLgorICAgICAgICAoV2ViQ29yZTo6SW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJl
YW1lcik6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
OjpkaXNjb25uZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcik6CisgICAgICAgIG1fe2F1ZGlvLHZpZGVvLHRleHR9VHJhY2tzIGFyZSBu
b3cgaGFzaG1hcHMsIHdoaWNoIGlzIGEgYml0IG1vcmUKKyAgICAgICAgY29udmVuaWVudCB0byB1
c2UgdGhhbiBWZWN0b3JzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp1cGRhdGVUcmFja3MpOiBVcGRhdGUgb3VyCisgICAgICAgIHRyYWNrcyBpbXBsZW1l
bnRhdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBzdHJlYW1zIHN0b3JlZCBpbiB0aGUKKyAgICAgICAg
Y29sbGVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6ZW5hYmxlVHJhY2spOiBBY3RpdmF0ZSB0aGUKKyAgICAgICAgZ2l2ZW4gdHJhY2suIFRoaXMg
bWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgVHJhY2tQcml2YXRlCisgICAgICAgIGltcGxlbWVudGF0
aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5UGxheWVyT2ZWaWRlbyk6CisgICAgICAgIFJlZmFjdG9yZWQgbGVnYWN5IChwbGF5YmluMikg
c3VwcG9ydCBmb3IgdHJhY2sgaGFzaG1hcCBzdG9yYWdlLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXll
ck9mVGV4dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpuZXdUZXh0U2FtcGxlKTogVXNlIHRyYWNrIGhhc2htYXAgc3RvcmFnZS4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZSk6
IFJlYWN0IG9uCisgICAgICAgIHBsYXliaW4zIEdzdFN0cmVhbSBtZXNzYWdlcywgc3RvcmUgdGhl
IGNvbGxlY3Rpb24gcHJvdmlkZWQgYW5kCisgICAgICAgIGFjdGl2YXRlIHRoZSBnaXZlbiBzZWxl
Y3RlZCBzdHJlYW1zIGFjY29yZGluZ2x5LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpwdXJnZUludmFsaWRBdWRpb1RyYWNrcyk6IEludmFsaWRhdGUgdHJh
Y2tzIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZFZpZGVvVHJhY2tzKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZFRleHRUcmFj
a3MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c291cmNlU2V0dXBDYWxsYmFjayk6CisgICAgICAgIFJlZmFjdG9yaW5nLCB1c2Ugc291cmNl
LXNldHVwIHNpZ25hbCBpbnN0ZWFkIG9mIHRoZSBzb3VyY2UKKyAgICAgICAgcHJvcGVydHkgd2hp
Y2ggaXMgbm90IHN1cHBvcnRlZCBpbiBwbGF5YmluMy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJhY2sp
OgorICAgICAgICBQcm9tb3RlZCBsb2dnaW5nIG1lc3NhZ2VzLCBHU1RfVFJBQ0Ugc2hvdWxkIGJl
IHVzZWQgZm9yIHZlcnkKKyAgICAgICAgZnJlcXVlbnQgYW5kIGxlc3MgaW50ZXJlc3RpbmcgbWVz
c2FnZXMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRv
d25sb2FkQnVmZmVyRmlsZUNyZWF0ZWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VTZXR1cCk6IENhbGxlZCBieSB0
aGUgc291cmNlLXNldHVwIHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXREb3dubG9hZEJ1ZmZlcmluZyk6IERlYnVnZ2luZyBt
ZXNzYWdlIGFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzZXRQcmVsb2FkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4pOiBDcmVhdGUgYQorICAgICAgICBwbGF5
YmluMyBlbGVtZW50IGlmIFVTRShHU1RSRUFNRVJfUExBWUJJTjMpIHdhcyBlbmFibGVkIGFuZAor
ICAgICAgICBjb25uZWN0IHRvIHBsYXliaW4yIHNpZ25hbHMgb3RoZXJ3aXNlLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRl
V2Vha1B0cik6IFByb21vdGVkIHRvIHB1YmxpYy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oOgorICAgICAgICBO
ZXcgU3RyZWFtQ29sbGVjdGlvbkNoYW5nZWQgbm90aWZpY2F0aW9uIHR5cGUsIHVzZWQgdGhlIHN1
Yi1jbGFzcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2
YXRlQmFzZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNl
R1N0cmVhbWVyOjpUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKTogU3VwcG9ydCBmb3IgR3N0U3Ry
ZWFtIEFQSS4KKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OmRp
c2Nvbm5lY3QpOiBDbGVhciBHc3RTdHJlYW0gdG9vLgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lcjo6dGFnc0NoYW5nZWQpOiBHZXQgdGFncyBmcm9tIEdzdFN0cmVh
bS4KKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRy
YWNrT2ZBY3RpdmVDaGFuZ2VkKTogTm8gbmVlZCB0byBjaGVjayBtX3BhZCB0d2ljZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZUYWdz
Q2hhbmdlZCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9U
cmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcDogVGFrZQorICAgICAgICBh
IHdlYWsgcG9pbnRlciBvZiB0aGUgbWVkaWEgcGxheWVyIGluc3RlYWQgb2YgcGxheWJpbiBhbmQg
Y2FsbCB0aGUKKyAgICAgICAgcGxheWVyIHdoZW4gZW5hYmxpbmcgdHJhY2tzLiBBbHNvIHVzZSB0
aGUgR3N0U3RyZWFtIEFQSSBpbnN0ZWFkIG9mCisgICAgICAgIGluc3BlY3RpbmcgdGhlIHBhZCB3
aGVuIHBsYXliaW4zIGlzIHVzZWQuCisgICAgICAgIChXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lcjo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmRpc2Nvbm5lY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6Om1hcmtBc0FjdGl2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6c2V0U2VsZWN0ZWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJl
YW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5k
UGlwZWxpbmUuY3BwOiBQYXNzIHBsYXllciBwb2ludGVyIHRvIHRyYWNrIGNvbnN0cnVjdG9yLgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9B
cHBzaW5rKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHA6IFNvdXJjZS1zZXR1cCBzaWduYWwgaGFuZGxl
ci4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c291
cmNlU2V0dXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmg6CisKIDIwMTgtMDItMTUgIFphbiBEb2JlcnNl
ayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIENsZWFuIHVwIEhhcmZCdXp6RmFj
ZUNhaXJvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcApp
bmRleCBmYzJkNjc0NzE5YTM1NjI5Y2NhYmMzZWM3ZjA2ZDEwOWMxYzBiMTQ2Li5hNWEwZDY4ZWFm
MGIyYWNiYjMwNjVhZWFiYzkzODg4OGViNTBjM2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9BdWRp
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTI5LDMzICsyOSw0OSBAQAogCiAjaW5jbHVk
ZSAiQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKIAorI2luY2x1ZGUgIk1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OkF1ZGlvVHJhY2tQcml2
YXRlR1N0cmVhbWVyKEdSZWZQdHI8R3N0RWxlbWVudD4gcGxheWJpbiwgZ2ludCBpbmRleCwgR1Jl
ZlB0cjxHc3RQYWQ+IHBhZCkKK0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpBdWRpb1RyYWNr
UHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4gcGxh
eWVyLCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFBhZD4gcGFkKQogICAgIDogVHJhY2tQcml2YXRl
QmFzZUdTdHJlYW1lcih0aGlzLCBpbmRleCwgcGFkKQotICAgICwgbV9wbGF5YmluKHBsYXliaW4p
CisgICAgLCBtX3BsYXllcihwbGF5ZXIpCiB7CiAgICAgLy8gRklYTUU6IEdldCBhIHJlYWwgSUQg
ZnJvbSB0aGUgdGtoZCBhdG9tLgogICAgIG1faWQgPSAiQSIgKyBTdHJpbmc6Om51bWJlcihpbmRl
eCk7CiAgICAgbm90aWZ5VHJhY2tPZkFjdGl2ZUNoYW5nZWQoKTsKIH0KIAorI2lmIFVTRShHU1RS
RUFNRVJfUExBWUJJTjMpCitBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6QXVkaW9UcmFja1By
aXZhdGVHU3RyZWFtZXIoV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI+IHBsYXll
ciwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSkKKyAgICA6IFRyYWNrUHJp
dmF0ZUJhc2VHU3RyZWFtZXIodGhpcywgaW5kZXgsIHN0cmVhbSkKKyAgICAsIG1fcGxheWVyKHBs
YXllcikKK3sKKyAgICBtX2lkID0gZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQo
KSk7CisgICAgbm90aWZ5VHJhY2tPZkFjdGl2ZUNoYW5nZWQoKTsKK30KKyNlbmRpZgorCiB2b2lk
IEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpkaXNjb25uZWN0KCkKIHsKLSAgICBtX3BsYXli
aW4uY2xlYXIoKTsKKyAgICBtX3BsYXllciA9IG51bGxwdHI7CiAgICAgVHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcjo6ZGlzY29ubmVjdCgpOwogfQogCit2b2lkIEF1ZGlvVHJhY2tQcml2YXRlR1N0
cmVhbWVyOjptYXJrQXNBY3RpdmUoKQoreworICAgIEF1ZGlvVHJhY2tQcml2YXRlOjpzZXRFbmFi
bGVkKHRydWUpOworfQorCiB2b2lkIEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpzZXRFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBpZiAoZW5hYmxlZCA9PSB0aGlzLT5lbmFibGVkKCkp
CiAgICAgICAgIHJldHVybjsKICAgICBBdWRpb1RyYWNrUHJpdmF0ZTo6c2V0RW5hYmxlZChlbmFi
bGVkKTsKIAotICAgIGlmIChlbmFibGVkICYmIG1fcGxheWJpbikKLSAgICAgICAgZ19vYmplY3Rf
c2V0KG1fcGxheWJpbi5nZXQoKSwgImN1cnJlbnQtYXVkaW8iLCBtX2luZGV4LCBudWxscHRyKTsK
KyAgICBpZiAoZW5hYmxlZCAmJiBtX3BsYXllcikKKyAgICAgICAgbV9wbGF5ZXItPmVuYWJsZVRy
YWNrKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6QXVkaW8sIG1faW5kZXgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9BdWRpb1RyYWNr
UHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDQ3MmFhN2RkZGQ1ZjM0OTRlZWMzNDk2YjQ4YjczZmJm
MTAyZGFjM2QuLjQ3YThhOWVlNzhhODc3NDUxNmIzYTAyNzg3YWRkNjFiZTM0MjVlNzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9BdWRpb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9BdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0yMywyNyArMjMs
MzcgQEAKICAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXJf
aAotI2RlZmluZSBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcl9oCisjcHJhZ21hIG9uY2UKIAog
I2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKFZJREVPX1RSQUNL
KQogCiAjaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZhdGUuaCIKICNpbmNsdWRlICJHUmVmUHRyR1N0
cmVhbWVyLmgiCiAjaW5jbHVkZSAiVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oIgorI2luY2x1
ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI7CiAKIGNsYXNzIEF1ZGlv
VHJhY2tQcml2YXRlR1N0cmVhbWVyIGZpbmFsIDogcHVibGljIEF1ZGlvVHJhY2tQcml2YXRlLCBw
dWJsaWMgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gY3JlYXRlKEdSZWZQdHI8R3N0RWxlbWVu
dD4gcGxheWJpbiwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RQYWQ+IHBhZCkKKyAgICBzdGF0aWMg
UmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiBjcmVhdGUoV2Vha1B0cjxNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI+LCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFBhZD4gcGFkKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXVkaW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXIocGxheWJpbiwgaW5kZXgsIHBhZCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihwbGF5ZXIsIGluZGV4LCBwYWQpKTsKICAgICB9
CiAKKyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKQorICAgIHN0YXRpYyBSZWZQdHI8QXVkaW9U
cmFja1ByaXZhdGVHU3RyZWFtZXI+IGNyZWF0ZShXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcj4sIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW0pCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihw
bGF5ZXIsIGluZGV4LCBzdHJlYW0pKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHZvaWQgZGlzY29u
bmVjdCgpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpIG92ZXJyaWRlOwor
ICAgIHZvaWQgbWFya0FzQWN0aXZlKCk7CiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCBlbmFibGVk
KSBvdmVycmlkZSB7IHNldEVuYWJsZWQoZW5hYmxlZCk7IH0KIAogICAgIGludCB0cmFja0luZGV4
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pbmRleDsgfQpAQCAtNTMsMTQgKzYzLDE1IEBA
IHB1YmxpYzoKICAgICBBdG9taWNTdHJpbmcgbGFuZ3VhZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2xhbmd1YWdlOyB9CiAKIHByaXZhdGU6Ci0gICAgQXVkaW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXIoR1JlZlB0cjxHc3RFbGVtZW50PiBwbGF5YmluLCBnaW50IGluZGV4LCBHUmVmUHRyPEdz
dFBhZD4pOworICAgIEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyKFdlYWtQdHI8TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyPiwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RQYWQ+KTsKKyNpZiBV
U0UoR1NUUkVBTUVSX1BMQVlCSU4zKQorICAgIEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyKFdl
YWtQdHI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyPiwgZ2ludCBpbmRleCwgR1JlZlB0cjxH
c3RTdHJlYW0+KTsKKyNlbmRpZgogCiAgICAgQXRvbWljU3RyaW5nIG1faWQ7Ci0gICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBtX3BsYXliaW47CisgICAgV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI+IG1fcGxheWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoVklERU9fVFJB
Q0spCi0KLSNlbmRpZiAvLyBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJl
YW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1Jl
ZlB0ckdTdHJlYW1lci5jcHAKaW5kZXggYTc2NTRjYzQ2YzYwODE4NzUxYzNhZTg4OGMzN2RiYTYz
OTdlNWJmNi4uZWVhZWQ4ZmY1MTI2MGRmOWQwZjAxYzU4YjM4Mjg2NTlkMWQ2ZWNiZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJH
U3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcApAQCAtMzUzLDYgKzM1Myw0OCBAQCB0ZW1wbGF0ZSA8
PiB2b2lkIGRlcmVmR1B0cjxHc3RRdWVyeT4oR3N0UXVlcnkqIHB0cikKICAgICAgICAgZ3N0X3F1
ZXJ5X3VucmVmKHB0cik7CiB9CiAKKyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKQordGVtcGxh
dGUgPD4gR1JlZlB0cjxHc3RTdHJlYW0+IGFkb3B0R1JlZihHc3RTdHJlYW0qIHB0cikKK3sKKyAg
ICBBU1NFUlQoIXB0ciB8fCAhZ19vYmplY3RfaXNfZmxvYXRpbmcocHRyKSk7CisgICAgcmV0dXJu
IEdSZWZQdHI8R3N0U3RyZWFtPihwdHIsIEdSZWZQdHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+
IEdzdFN0cmVhbSogcmVmR1B0cjxHc3RTdHJlYW0+KEdzdFN0cmVhbSogcHRyKQoreworICAgIGlm
IChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfcmVmX3NpbmsoR1NUX09CSkVDVF9DQVNUKHB0cikp
OworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0
U3RyZWFtPihHc3RTdHJlYW0qIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2Jq
ZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVj
dGlvbj4gYWRvcHRHUmVmKEdzdFN0cmVhbUNvbGxlY3Rpb24qIHB0cikKK3sKKyAgICBBU1NFUlQo
IXB0ciB8fCAhZ19vYmplY3RfaXNfZmxvYXRpbmcocHRyKSk7CisgICAgcmV0dXJuIEdSZWZQdHI8
R3N0U3RyZWFtQ29sbGVjdGlvbj4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8
PiBHc3RTdHJlYW1Db2xsZWN0aW9uKiByZWZHUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+KEdzdFN0
cmVhbUNvbGxlY3Rpb24qIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0
X3JlZl9zaW5rKEdTVF9PQkpFQ1RfQ0FTVChwdHIpKTsKKworICAgIHJldHVybiBwdHI7Cit9CisK
K3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+KEdzdFN0cmVh
bUNvbGxlY3Rpb24qIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3Vu
cmVmKHB0cik7Cit9CisjZW5kaWYKKwogdGVtcGxhdGUgPD4gR1JlZlB0cjxXZWJLaXRWaWRlb1Np
bms+IGFkb3B0R1JlZihXZWJLaXRWaWRlb1NpbmsqIHB0cikKIHsKICAgICBBU1NFUlQoIXB0ciB8
fCAhZ19vYmplY3RfaXNfZmxvYXRpbmcocHRyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaApp
bmRleCBhMzg4Y2EzNmM3NTgwMTRhNmZhNjYzMjBhYzIzMzJiYmRkMTJiNGEzLi44M2JmZGVjMTI4
NTE2NzMzNzc0NTUwY2U0NTJhZGMwYmZhNTg4YjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVy
LmgKQEAgLTE3LDggKzE3LDggQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAq
LwogCi0jaWZuZGVmIEdSZWZQdHJHU3RyZWFtZXJfaAotI2RlZmluZSBHUmVmUHRyR1N0cmVhbWVy
X2gKKyNwcmFnbWEgb25jZQorCiAjaWYgVVNFKEdTVFJFQU1FUikKIAogI2luY2x1ZGUgPHd0Zi9n
bGliL0dSZWZQdHIuaD4KQEAgLTQzLDYgKzQzLDExIEBAIHR5cGVkZWYgc3RydWN0IF9Hc3RRdWVy
eSBHc3RRdWVyeTsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWRlb1NpbmsgV2ViS2l0VmlkZW9T
aW5rOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlNyYyBXZWJLaXRXZWJTcmM7CiAKKyNpZiBV
U0UoR1NUUkVBTUVSX1BMQVlCSU4zKQordHlwZWRlZiBzdHJ1Y3QgX0dzdFN0cmVhbSBHc3RTdHJl
YW07Cit0eXBlZGVmIHN0cnVjdCBfR3N0U3RyZWFtQ29sbGVjdGlvbiBHc3RTdHJlYW1Db2xsZWN0
aW9uOworI2VuZGlmCisKICNpZiBVU0UoR1NUUkVBTUVSX0dMKQogdHlwZWRlZiBzdHJ1Y3QgX0dz
dEdMRGlzcGxheSBHc3RHTERpc3BsYXk7CiB0eXBlZGVmIHN0cnVjdCBfR3N0R0xDb250ZXh0IEdz
dEdMQ29udGV4dDsKQEAgLTEyNyw2ICsxMzIsMTYgQEAgR1JlZlB0cjxXZWJLaXRXZWJTcmM+IGVu
c3VyZUdSZWYoV2ViS2l0V2ViU3JjKiBwdHIpOwogdGVtcGxhdGU8PiBXZWJLaXRXZWJTcmMqIHJl
ZkdQdHI8V2ViS2l0V2ViU3JjPihXZWJLaXRXZWJTcmMqIHB0cik7CiB0ZW1wbGF0ZTw+IHZvaWQg
ZGVyZWZHUHRyPFdlYktpdFdlYlNyYz4oV2ViS2l0V2ViU3JjKiBwdHIpOwogCisjaWYgVVNFKEdT
VFJFQU1FUl9QTEFZQklOMykKK3RlbXBsYXRlPD4gR1JlZlB0cjxHc3RTdHJlYW0+IGFkb3B0R1Jl
ZihHc3RTdHJlYW0qKTsKK3RlbXBsYXRlPD4gR3N0U3RyZWFtKiByZWZHUHRyPEdzdFN0cmVhbT4o
R3N0U3RyZWFtKik7Cit0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPEdzdFN0cmVhbT4oR3N0U3Ry
ZWFtKik7CisKK3RlbXBsYXRlPD4gR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBhZG9wdEdS
ZWYoR3N0U3RyZWFtQ29sbGVjdGlvbiopOwordGVtcGxhdGU8PiBHc3RTdHJlYW1Db2xsZWN0aW9u
KiByZWZHUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+KEdzdFN0cmVhbUNvbGxlY3Rpb24qKTsKK3Rl
bXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4oR3N0U3RyZWFtQ29s
bGVjdGlvbiopOworI2VuZGlmCisKICNpZiBVU0UoR1NUUkVBTUVSX0dMKQogdGVtcGxhdGU8PiBH
UmVmUHRyPEdzdEdMRGlzcGxheT4gYWRvcHRHUmVmKEdzdEdMRGlzcGxheSogcHRyKTsKIHRlbXBs
YXRlPD4gR3N0R0xEaXNwbGF5KiByZWZHUHRyPEdzdEdMRGlzcGxheT4oR3N0R0xEaXNwbGF5KiBw
dHIpOwpAQCAtMTQwLDUgKzE1NSwzIEBAIHRlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0R0xD
b250ZXh0PihHc3RHTENvbnRleHQqIHB0cik7CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVIpCi0KLSNlbmRpZiAvLyBHUmVmUHRyR1N0cmVhbWVyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRU
ZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRl
eCAyNGU1OGYxNjA3NDhmZGQ5YmUxNGJhODc2MjNjMjMxMDgzY2E2OWY5Li42ODJmZmMzODczZDE3
OWJiZmExMTVmMTg0NjhlNDIwMGMyYzU2YmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0lu
YmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC01NywxMiArNTcsMTkgQEAgSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJl
YW1lcihnaW50IGluZGV4LCBHUmUKICAgICBub3RpZnlUcmFja09mU3RyZWFtQ2hhbmdlZCgpOwog
fQogCi12b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmRpc2Nvbm5lY3QoKQor
I2lmIFVTRShHU1RSRUFNRVJfUExBWUJJTjMpCitJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVh
bWVyOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyKGdpbnQgaW5kZXgsIEdSZWZQdHI8
R3N0U3RyZWFtPiBzdHJlYW0pCisgICAgOiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlKFdlYlZUVCks
IFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIodGhpcywgaW5kZXgsIHN0cmVhbSkKIHsKLSAgICBp
ZiAoIW1fcGFkKQotICAgICAgICByZXR1cm47CisgICAgbV9zdHJlYW1JZCA9IGdzdF9zdHJlYW1f
Z2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkpOworICAgIEdTVF9JTkZPKCJUcmFjayAlZCBnb3Qg
c3RyZWFtIHN0YXJ0IGZvciBzdHJlYW0gJXMuIiwgbV9pbmRleCwgbV9zdHJlYW1JZC51dGY4KCku
ZGF0YSgpKTsKK30KKyNlbmRpZgogCi0gICAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUobV9wYWQuZ2V0
KCksIG1fZXZlbnRQcm9iZSk7Cit2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6
OmRpc2Nvbm5lY3QoKQoreworICAgIGlmIChtX3BhZCkKKyAgICAgICAgZ3N0X3BhZF9yZW1vdmVf
cHJvYmUobV9wYWQuZ2V0KCksIG1fZXZlbnRQcm9iZSk7CiAKICAgICBUcmFja1ByaXZhdGVCYXNl
R1N0cmVhbWVyOjpkaXNjb25uZWN0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRl
eHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaAppbmRleCA2YTkwNzQ0ZTU5MDkwMTkzOTBlYWI3ZTdl
OGQ2OTk4OGFlNDExNmJmLi4zMjRhMjcwOGFiZmNkMGM0OGE0YWE0Y2RlZDQ2NzQwNmFlNWZiZDFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
LmgKQEAgLTIzLDIwICsyMywxOSBAQAogICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBJbmJhbmRUZXh0
VHJhY2tQcml2YXRlR1N0cmVhbWVyX2gKLSNkZWZpbmUgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdT
dHJlYW1lcl9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJF
QU1FUikgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQogCiAjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1l
ci5oIgogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGUuaCIKICNpbmNsdWRlICJUcmFj
a1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgogI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFNhbXBsZSBHc3RTYW1wbGU7CiAK
IGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIgOiBwdWJsaWMgSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZSwgcHVibGljIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIgewogcHVibGlj
OgpAQCAtNDUsNiArNDQsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyKGluZGV4LCBwYWQpKTsKICAgICB9CiAK
KyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKQorICAgIHN0YXRpYyBSZWY8SW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUdTdHJlYW1lcj4gY3JlYXRlKGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0U3RyZWFt
PiBzdHJlYW0pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbmJhbmRUZXh0
VHJhY2tQcml2YXRlR1N0cmVhbWVyKGluZGV4LCBzdHJlYW0pKTsKKyAgICB9CisjZW5kaWYKKwog
ICAgIHZvaWQgZGlzY29ubmVjdCgpIG92ZXJyaWRlOwogCiAgICAgQXRvbWljU3RyaW5nIGxhYmVs
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9sYWJlbDsgfQpAQCAtNTcsNiArNjMsOSBAQCBw
dWJsaWM6CiAKIHByaXZhdGU6CiAgICAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcihn
aW50IGluZGV4LCBHUmVmUHRyPEdzdFBhZD4pOworI2lmIFVTRShHU1RSRUFNRVJfUExBWUJJTjMp
CisgICAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcihnaW50IGluZGV4LCBHUmVmUHRy
PEdzdFN0cmVhbT4pOworI2VuZGlmCiAKICAgICB2b2lkIHN0cmVhbUNoYW5nZWQoKTsKIApAQCAt
NjQsNyArNzMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgbm90aWZ5VHJhY2tPZlN0cmVhbUNoYW5n
ZWQoKTsKIAogICAgIGd1bG9uZyBtX2V2ZW50UHJvYmU7Ci0gICAgVmVjdG9yPEdSZWZQdHI8R3N0
U2FtcGxlPiA+IG1fcGVuZGluZ1NhbXBsZXM7CisgICAgVmVjdG9yPEdSZWZQdHI8R3N0U2FtcGxl
Pj4gbV9wZW5kaW5nU2FtcGxlczsKICAgICBTdHJpbmcgbV9zdHJlYW1JZDsKICAgICBMb2NrIG1f
c2FtcGxlTXV0ZXg7CiB9OwpAQCAtNzIsNSArODEsMyBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAm
JiBFTkFCTEUoVklERU9fVFJBQ0spCi0KLSNlbmRpZiAvLyBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
R1N0cmVhbWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5jcHAKaW5kZXggZTRkN2IxZjMyMTc5MTc2ODhlOGY2NDBkM2FmZTUyMjVkMzUxZWIwMC4uODBj
MDUzYTZjZjJiM2E2ZmMyMmYzZTcxMjNhOGIzOWQ1YjBmMmYwOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTE2NiwxNCArMTY2LDE0IEBA
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
KE1lZGlhUGxheWVyKiBwbGF5ZXIpCiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6On5NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIoKQogewogI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXVkaW9UcmFja3Muc2l6ZSgpOyArK2kpCi0gICAg
ICAgIG1fYXVkaW9UcmFja3NbaV0tPmRpc2Nvbm5lY3QoKTsKKyAgICBmb3IgKGF1dG8mIHRyYWNr
IDogbV9hdWRpb1RyYWNrcy52YWx1ZXMoKSkKKyAgICAgICAgdHJhY2stPmRpc2Nvbm5lY3QoKTsK
IAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0VHJhY2tzLnNpemUoKTsgKytpKQot
ICAgICAgICBtX3RleHRUcmFja3NbaV0tPmRpc2Nvbm5lY3QoKTsKKyAgICBmb3IgKGF1dG8mIHRy
YWNrIDogbV90ZXh0VHJhY2tzLnZhbHVlcygpKQorICAgICAgICB0cmFjay0+ZGlzY29ubmVjdCgp
OwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZpZGVvVHJhY2tzLnNpemUoKTsgKytp
KQotICAgICAgICBtX3ZpZGVvVHJhY2tzW2ldLT5kaXNjb25uZWN0KCk7CisgICAgZm9yIChhdXRv
JiB0cmFjayA6IG1fdmlkZW9UcmFja3MudmFsdWVzKCkpCisgICAgICAgIHRyYWNrLT5kaXNjb25u
ZWN0KCk7CiAjZW5kaWYKICAgICBpZiAobV9maWxsVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAg
bV9maWxsVGltZXIuc3RvcCgpOwpAQCAtNjEyLDYgKzYxMiwxNjMgQEAgYm9vbCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnNlZWtpbmcoKSBjb25zdAogICAgIHJldHVybiBtX3NlZWtpbmc7
CiB9CiAKKyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNrcygpCit7CisgICAgQVNTRVJUKCFtX2lzTGVnYWN5UGxh
eWJpbik7CisKKyAgICBib29sIHVzZU1lZGlhU291cmNlID0gaXNNZWRpYVNvdXJjZSgpOworICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc2l6ZShtX3N0cmVh
bUNvbGxlY3Rpb24uZ2V0KCkpOworICAgIFZlY3RvcjxTdHJpbmc+IHZhbGlkQXVkaW9TdHJlYW1z
OworICAgIFZlY3RvcjxTdHJpbmc+IHZhbGlkVmlkZW9TdHJlYW1zOworICAgIFZlY3RvcjxTdHJp
bmc+IHZhbGlkVGV4dFN0cmVhbXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICAgIEdSZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW0gPSBnc3Rfc3RyZWFt
X2NvbGxlY3Rpb25fZ2V0X3N0cmVhbShtX3N0cmVhbUNvbGxlY3Rpb24uZ2V0KCksIGkpOworICAg
ICAgICBTdHJpbmcgc3RyZWFtSWQoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQo
KSkpOworICAgICAgICBHc3RTdHJlYW1UeXBlIHR5cGUgPSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1f
dHlwZShzdHJlYW0uZ2V0KCkpOworICAgICAgICBHU1RfREVCVUcoIkluc3BlY3RpbmcgJXMgdHJh
Y2sgd2l0aCBJRCAlcyIsIGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZSh0eXBlKSwgc3RyZWFtSWQu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX0FVRElP
KSB7CisgICAgICAgICAgICB2YWxpZEF1ZGlvU3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOworI2lm
IEVOQUJMRShWSURFT19UUkFDSykKKyAgICAgICAgICAgIGlmICghdXNlTWVkaWFTb3VyY2UpIHsK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb2NhbEluZGV4ID0gaSAtIHZhbGlkVmlkZW9TdHJl
YW1zLnNpemUoKSAtIHZhbGlkVGV4dFN0cmVhbXMuc2l6ZSgpOworICAgICAgICAgICAgICAgIGlm
IChsb2NhbEluZGV4IDwgbV9hdWRpb1RyYWNrcy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fYXVkaW9UcmFja3MuY29udGFpbnMoc3RyZWFtSWQpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
UmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IEF1ZGlvVHJhY2tQcml2
YXRlR1N0cmVhbWVyOjpjcmVhdGUoY3JlYXRlV2Vha1B0cigpLCBpLCBzdHJlYW0pOworICAgICAg
ICAgICAgICAgIG1fYXVkaW9UcmFja3MuYWRkKHRyYWNrLT5pZCgpLCB0cmFjayk7CisgICAgICAg
ICAgICAgICAgbV9wbGF5ZXItPmFkZEF1ZGlvVHJhY2soKnRyYWNrKTsKKyAgICAgICAgICAgIH0K
KyNlbmRpZgorICAgICAgICB9IGVsc2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVklERU8p
IHsKKyAgICAgICAgICAgIHZhbGlkVmlkZW9TdHJlYW1zLmFwcGVuZChzdHJlYW1JZCk7CisjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQorICAgICAgICAgICAgaWYgKCF1c2VNZWRpYVNvdXJjZSkgewor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvY2FsSW5kZXggPSBpIC0gdmFsaWRBdWRpb1N0cmVh
bXMuc2l6ZSgpIC0gdmFsaWRUZXh0U3RyZWFtcy5zaXplKCk7CisgICAgICAgICAgICAgICAgaWYg
KGxvY2FsSW5kZXggPCBtX3ZpZGVvVHJhY2tzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAobV92aWRlb1RyYWNrcy5jb250YWlucyhzdHJlYW1JZCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBS
ZWZQdHI8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gVmlkZW9UcmFja1ByaXZh
dGVHU3RyZWFtZXI6OmNyZWF0ZShjcmVhdGVXZWFrUHRyKCksIGksIHN0cmVhbSk7CisgICAgICAg
ICAgICAgICAgbV92aWRlb1RyYWNrcy5hZGQodHJhY2stPmlkKCksIHRyYWNrKTsKKyAgICAgICAg
ICAgICAgICBtX3BsYXllci0+YWRkVmlkZW9UcmFjaygqdHJhY2spOworICAgICAgICAgICAgfQor
I2VuZGlmCisgICAgICAgIH0gZWxzZSBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9URVhUKSB7
CisgICAgICAgICAgICB2YWxpZFRleHRTdHJlYW1zLmFwcGVuZChzdHJlYW1JZCk7CisjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQorICAgICAgICAgICAgaWYgKCF1c2VNZWRpYVNvdXJjZSkgeworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGxvY2FsSW5kZXggPSBpIC0gdmFsaWRWaWRlb1N0cmVhbXMu
c2l6ZSgpIC0gdmFsaWRBdWRpb1N0cmVhbXMuc2l6ZSgpOworICAgICAgICAgICAgICAgIGlmIChs
b2NhbEluZGV4IDwgbV90ZXh0VHJhY2tzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAobV90ZXh0VHJhY2tzLmNvbnRhaW5zKHN0cmVhbUlkKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFJlZlB0
cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IEluYmFuZFRleHRUcmFj
a1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShsb2NhbEluZGV4LCBzdHJlYW0pOworICAgICAgICAg
ICAgICAgIG1fdGV4dFRyYWNrcy5hZGQoc3RyZWFtSWQsIHRyYWNrKTsKKyAgICAgICAgICAgICAg
ICBtX3BsYXllci0+YWRkVGV4dFRyYWNrKCp0cmFjayk7CisgICAgICAgICAgICB9CisjZW5kaWYK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBHU1RfV0FSTklORygiVW5rbm93biB0cmFjayB0
eXBlIGZvdW5kIGZvciBzdHJlYW0gJXMiLCBzdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKKyAgICB9
CisKKyAgICBHU1RfSU5GTygiTWVkaWEgaGFzICV1IHZpZGVvIHRyYWNrcywgJXUgYXVkaW8gdHJh
Y2tzIGFuZCAldSB0ZXh0IHRyYWNrcyIsIHZhbGlkVmlkZW9TdHJlYW1zLnNpemUoKSwKKyAgICAg
ICAgdmFsaWRBdWRpb1N0cmVhbXMuc2l6ZSgpLCB2YWxpZFRleHRTdHJlYW1zLnNpemUoKSk7CisK
KyAgICBib29sIG9sZEhhc0F1ZGlvID0gbV9oYXNBdWRpbzsKKyAgICBib29sIG9sZEhhc1ZpZGVv
ID0gbV9oYXNWaWRlbzsKKyAgICBtX2hhc0F1ZGlvID0gIXZhbGlkQXVkaW9TdHJlYW1zLmlzRW1w
dHkoKTsKKyAgICBtX2hhc1ZpZGVvID0gIXZhbGlkVmlkZW9TdHJlYW1zLmlzRW1wdHkoKTsKKyAg
ICBpZiAoKG9sZEhhc1ZpZGVvICE9IG1faGFzVmlkZW8pIHx8IChvbGRIYXNBdWRpbyAhPSBtX2hh
c0F1ZGlvKSkKKyAgICAgICAgbV9wbGF5ZXItPmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpOworCisg
ICAgaWYgKG1faGFzVmlkZW8pCisgICAgICAgIG1fcGxheWVyLT5zaXplQ2hhbmdlZCgpOworCisg
ICAgaWYgKHVzZU1lZGlhU291cmNlKSB7CisgICAgICAgIEdTVF9ERUJVRygiVHJhY2tzIG1hbmFn
ZWQgYnkgc291cmNlIGVsZW1lbnQuIEJhaWxpbmcgb3V0IG5vdy4iKTsKKyAgICAgICAgbV9wbGF5
ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyRW5naW5lVXBkYXRlZChtX3BsYXllcik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgcHVyZ2VJbnZh
bGlkQXVkaW9UcmFja3ModmFsaWRBdWRpb1N0cmVhbXMpOworICAgIHB1cmdlSW52YWxpZFZpZGVv
VHJhY2tzKHZhbGlkVmlkZW9TdHJlYW1zKTsKKyAgICBwdXJnZUludmFsaWRUZXh0VHJhY2tzKHZh
bGlkVGV4dFN0cmVhbXMpOworI2VuZGlmCisKKyAgICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQ
bGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKK30KKyNlbmRpZgorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5hYmxlVHJhY2soVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1l
cjo6VHJhY2tUeXBlIHRyYWNrVHlwZSwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgY29uc3QgY2hh
ciogcHJvcGVydHlOYW1lOworICAgIGNvbnN0IGNoYXIqIHRyYWNrVHlwZUFzU3RyaW5nOworICAg
IEdMaXN0KiBzZWxlY3RlZFN0cmVhbXMgPSBudWxscHRyOworCisgICAgc3dpdGNoICh0cmFja1R5
cGUpIHsKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6QXVk
aW86IHsKKyAgICAgICAgcHJvcGVydHlOYW1lID0gImN1cnJlbnQtYXVkaW8iOworICAgICAgICB0
cmFja1R5cGVBc1N0cmluZyA9ICJhdWRpbyI7CisgICAgICAgIGlmICghbV9jdXJyZW50VGV4dFN0
cmVhbUlkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcyA9IGdfbGlzdF9h
cHBlbmQoc2VsZWN0ZWRTdHJlYW1zLCBnX3N0cmR1cChtX2N1cnJlbnRUZXh0U3RyZWFtSWQudXRm
OCgpLmRhdGEoKSkpOworICAgICAgICBpZiAoIW1fY3VycmVudFZpZGVvU3RyZWFtSWQuaXNFbXB0
eSgpKQorICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zID0gZ19saXN0X2FwcGVuZChzZWxlY3Rl
ZFN0cmVhbXMsIGdfc3RyZHVwKG1fY3VycmVudFZpZGVvU3RyZWFtSWQudXRmOCgpLmRhdGEoKSkp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVh
bWVyOjpUcmFja1R5cGU6OlZpZGVvOiB7CisgICAgICAgIHByb3BlcnR5TmFtZSA9ICJjdXJyZW50
LXZpZGVvIjsKKyAgICAgICAgdHJhY2tUeXBlQXNTdHJpbmcgPSAidmlkZW8iOworICAgICAgICBp
ZiAoIW1fY3VycmVudEF1ZGlvU3RyZWFtSWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2VsZWN0
ZWRTdHJlYW1zID0gZ19saXN0X2FwcGVuZChzZWxlY3RlZFN0cmVhbXMsIGdfc3RyZHVwKG1fY3Vy
cmVudEF1ZGlvU3RyZWFtSWQudXRmOCgpLmRhdGEoKSkpOworICAgICAgICBpZiAoIW1fY3VycmVu
dFRleHRTdHJlYW1JZC5pc0VtcHR5KCkpCisgICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMgPSBn
X2xpc3RfYXBwZW5kKHNlbGVjdGVkU3RyZWFtcywgZ19zdHJkdXAobV9jdXJyZW50VGV4dFN0cmVh
bUlkLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVHJh
Y2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpUZXh0OiB7CisgICAgICAgIHByb3Bl
cnR5TmFtZSA9ICJjdXJyZW50LXRleHQiOworICAgICAgICB0cmFja1R5cGVBc1N0cmluZyA9ICJ0
ZXh0IjsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRBdWRpb1N0cmVhbUlkLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcyA9IGdfbGlzdF9hcHBlbmQoc2VsZWN0ZWRTdHJlYW1z
LCBnX3N0cmR1cChtX2N1cnJlbnRBdWRpb1N0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAg
ICAgaWYgKCFtX2N1cnJlbnRWaWRlb1N0cmVhbUlkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNl
bGVjdGVkU3RyZWFtcyA9IGdfbGlzdF9hcHBlbmQoc2VsZWN0ZWRTdHJlYW1zLCBnX3N0cmR1cCht
X2N1cnJlbnRWaWRlb1N0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpVbmtu
b3duOiB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgfQorCisgICAgR1NUX0lORk8oIkVuYWJsaW5nICVzIHRyYWNrIHdpdGggaW5kZXg6
ICVsdSIsIHRyYWNrVHlwZUFzU3RyaW5nLCBpbmRleCk7CisgICAgLy8gRklYTUU6IFJlbW92ZSBp
c01lZGlhU291cmNlKCkgdGVzdCBiZWxvdyB3aGVuIGZpeGluZyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyNTMxCisgICAgaWYgKG1faXNMZWdhY3lQbGF5YmluIHx8
IGlzTWVkaWFTb3VyY2UoKSkgeworICAgICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gaXNNZWRp
YVNvdXJjZSgpID8gbV9zb3VyY2UuZ2V0KCkgOiBtX3BpcGVsaW5lLmdldCgpOworICAgICAgICBn
X29iamVjdF9zZXQoZWxlbWVudCwgcHJvcGVydHlOYW1lLCBpbmRleCwgbnVsbHB0cik7CisgICAg
fQorI2lmIFVTRShHU1RSRUFNRVJfUExBWUJJTjMpCisgICAgZWxzZSB7CisgICAgICAgIEdzdFN0
cmVhbSogc3RyZWFtID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0obV9zdHJlYW1D
b2xsZWN0aW9uLmdldCgpLCBpbmRleCk7CisgICAgICAgIGlmIChzdHJlYW0pIHsKKyAgICAgICAg
ICAgIFN0cmluZyBzdHJlYW1JZCA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0pOwor
ICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zID0gZ19saXN0X2FwcGVuZChzZWxlY3RlZFN0cmVh
bXMsIGdfc3RyZHVwKHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBHU1RfV0FSTklORygiJXMgc3RyZWFtICVsdSBub3QgZm91bmQiLCB0cmFja1R5
cGVBc1N0cmluZywgaW5kZXgpOworCisgICAgICAgIC8vIFRPRE86IE1TRSBHc3RTdHJlYW0gQVBJ
IHN1cHBvcnQ6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI1MzEK
KyAgICAgICAgZ3N0X2VsZW1lbnRfc2VuZF9ldmVudChtX3BpcGVsaW5lLmdldCgpLCBnc3RfZXZl
bnRfbmV3X3NlbGVjdF9zdHJlYW1zKHNlbGVjdGVkU3RyZWFtcykpOworICAgIH0KKyNlbmRpZgor
CisgICAgaWYgKHNlbGVjdGVkU3RyZWFtcykKKyAgICAgICAgZ19saXN0X2ZyZWUoc2VsZWN0ZWRT
dHJlYW1zKTsKK30KKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZpZGVvQ2hh
bmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQogewogICAg
IHBsYXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OlZpZGVv
Q2hhbmdlZCwgW3BsYXllcl0geyBwbGF5ZXItPm5vdGlmeVBsYXllck9mVmlkZW8oKTsgfSk7CkBA
IC02MjIsNiArNzc5LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlm
eVBsYXllck9mVmlkZW8oKQogICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCAhbV9zb3Vy
Y2UpKQogICAgICAgICByZXR1cm47CiAKKyAgICBBU1NFUlQobV9pc0xlZ2FjeVBsYXliaW4gfHwg
aXNNZWRpYVNvdXJjZSgpKTsKKwogICAgIGdpbnQgbnVtVHJhY2tzID0gMDsKICAgICBib29sIHVz
ZU1lZGlhU291cmNlID0gaXNNZWRpYVNvdXJjZSgpOwogICAgIEdzdEVsZW1lbnQqIGVsZW1lbnQg
PSB1c2VNZWRpYVNvdXJjZSA/IG1fc291cmNlLmdldCgpIDogbV9waXBlbGluZS5nZXQoKTsKQEAg
LTY0NCwyOSArODAzLDMwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3Rp
ZnlQbGF5ZXJPZlZpZGVvKCkKICAgICB9CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAg
VmVjdG9yPFN0cmluZz4gdmFsaWRWaWRlb1N0cmVhbXM7CiAgICAgZm9yIChnaW50IGkgPSAwOyBp
IDwgbnVtVHJhY2tzOyArK2kpIHsKICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZDsKICAgICAg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fcGlwZWxpbmUuZ2V0KCksICJnZXQtdmlkZW8tcGFk
IiwgaSwgJnBhZC5vdXRQdHIoKSwgbnVsbHB0cik7CiAgICAgICAgIEFTU0VSVChwYWQpOwogCisg
ICAgICAgIFN0cmluZyBzdHJlYW1JZCA9ICJWIiArIFN0cmluZzo6bnVtYmVyKGkpOworICAgICAg
ICB2YWxpZFZpZGVvU3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOwogICAgICAgICBpZiAoaSA8IHN0
YXRpY19jYXN0PGdpbnQ+KG1fdmlkZW9UcmFja3Muc2l6ZSgpKSkgewotICAgICAgICAgICAgUmVm
UHRyPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiBleGlzdGluZ1RyYWNrID0gbV92aWRlb1Ry
YWNrc1tpXTsKLSAgICAgICAgICAgIGV4aXN0aW5nVHJhY2stPnNldEluZGV4KGkpOwotICAgICAg
ICAgICAgaWYgKGV4aXN0aW5nVHJhY2stPnBhZCgpID09IHBhZCkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4g
ZXhpc3RpbmdUcmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0KHN0cmVhbUlkKTsKKyAgICAgICAgICAg
IGlmIChleGlzdGluZ1RyYWNrKSB7CisgICAgICAgICAgICAgICAgZXhpc3RpbmdUcmFjay0+c2V0
SW5kZXgoaSk7CisgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nVHJhY2stPnBhZCgpID09IHBh
ZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAotICAgICAgICBSZWZQdHI8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0g
VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShtX3BpcGVsaW5lLCBpLCBwYWQpOwot
ICAgICAgICBtX3ZpZGVvVHJhY2tzLmFwcGVuZCh0cmFjayk7CisgICAgICAgIFJlZlB0cjxWaWRl
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
cjo6Y3JlYXRlKGNyZWF0ZVdlYWtQdHIoKSwgaSwgcGFkKTsKKyAgICAgICAgQVNTRVJUKHN0cmVh
bUlkID09IHRyYWNrLT5pZCgpKTsKKyAgICAgICAgbV92aWRlb1RyYWNrcy5hZGQoc3RyZWFtSWQs
IHRyYWNrKTsKICAgICAgICAgbV9wbGF5ZXItPmFkZFZpZGVvVHJhY2soKnRyYWNrKTsKICAgICB9
CiAKLSAgICB3aGlsZSAoc3RhdGljX2Nhc3Q8Z2ludD4obV92aWRlb1RyYWNrcy5zaXplKCkpID4g
bnVtVHJhY2tzKSB7Ci0gICAgICAgIFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4g
dHJhY2sgPSBtX3ZpZGVvVHJhY2tzLmxhc3QoKTsKLSAgICAgICAgdHJhY2stPmRpc2Nvbm5lY3Qo
KTsKLSAgICAgICAgbV92aWRlb1RyYWNrcy5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIG1fcGxheWVy
LT5yZW1vdmVWaWRlb1RyYWNrKCp0cmFjayk7Ci0gICAgfQorICAgIHB1cmdlSW52YWxpZFZpZGVv
VHJhY2tzKHZhbGlkVmlkZW9TdHJlYW1zKTsKICNlbmRpZgogCiAgICAgbV9wbGF5ZXItPmNsaWVu
dCgpLm1lZGlhUGxheWVyRW5naW5lVXBkYXRlZChtX3BsYXllcik7CkBAIC02OTMsNiArODUzLDgg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mQXVkaW8o
KQogICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCAhbV9zb3VyY2UpKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBBU1NFUlQobV9pc0xlZ2FjeVBsYXliaW4gfHwgaXNNZWRpYVNvdXJjZSgp
KTsKKwogICAgIGdpbnQgbnVtVHJhY2tzID0gMDsKICAgICBib29sIHVzZU1lZGlhU291cmNlID0g
aXNNZWRpYVNvdXJjZSgpOwogICAgIEdzdEVsZW1lbnQqIGVsZW1lbnQgPSB1c2VNZWRpYVNvdXJj
ZSA/IG1fc291cmNlLmdldCgpIDogbV9waXBlbGluZS5nZXQoKTsKQEAgLTcxMSwyOSArODczLDMw
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlv
KCkKICAgICB9CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgVmVjdG9yPFN0cmluZz4g
dmFsaWRBdWRpb1N0cmVhbXM7CiAgICAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtVHJhY2tzOyAr
K2kpIHsKICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZDsKICAgICAgICAgZ19zaWduYWxfZW1p
dF9ieV9uYW1lKG1fcGlwZWxpbmUuZ2V0KCksICJnZXQtYXVkaW8tcGFkIiwgaSwgJnBhZC5vdXRQ
dHIoKSwgbnVsbHB0cik7CiAgICAgICAgIEFTU0VSVChwYWQpOwogCisgICAgICAgIFN0cmluZyBz
dHJlYW1JZCA9ICJBIiArIFN0cmluZzo6bnVtYmVyKGkpOworICAgICAgICB2YWxpZEF1ZGlvU3Ry
ZWFtcy5hcHBlbmQoc3RyZWFtSWQpOwogICAgICAgICBpZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+
KG1fYXVkaW9UcmFja3Muc2l6ZSgpKSkgewotICAgICAgICAgICAgUmVmUHRyPEF1ZGlvVHJhY2tQ
cml2YXRlR1N0cmVhbWVyPiBleGlzdGluZ1RyYWNrID0gbV9hdWRpb1RyYWNrc1tpXTsKLSAgICAg
ICAgICAgIGV4aXN0aW5nVHJhY2stPnNldEluZGV4KGkpOwotICAgICAgICAgICAgaWYgKGV4aXN0
aW5nVHJhY2stPnBhZCgpID09IHBhZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIFJlZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gZXhpc3RpbmdUcmFjayA9
IG1fYXVkaW9UcmFja3MuZ2V0KHN0cmVhbUlkKTsKKyAgICAgICAgICAgIGlmIChleGlzdGluZ1Ry
YWNrKSB7CisgICAgICAgICAgICAgICAgZXhpc3RpbmdUcmFjay0+c2V0SW5kZXgoaSk7CisgICAg
ICAgICAgICAgICAgaWYgKGV4aXN0aW5nVHJhY2stPnBhZCgpID09IHBhZCkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBS
ZWZQdHI8QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gQXVkaW9UcmFja1ByaXZh
dGVHU3RyZWFtZXI6OmNyZWF0ZShtX3BpcGVsaW5lLCBpLCBwYWQpOwotICAgICAgICBtX2F1ZGlv
VHJhY2tzLmluc2VydChpLCB0cmFjayk7CisgICAgICAgIFJlZlB0cjxBdWRpb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lcj4gdHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKGNy
ZWF0ZVdlYWtQdHIoKSwgaSwgcGFkKTsKKyAgICAgICAgQVNTRVJUKHN0cmVhbUlkID09IHRyYWNr
LT5pZCgpKTsKKyAgICAgICAgbV9hdWRpb1RyYWNrcy5hZGQoc3RyZWFtSWQsIHRyYWNrKTsKICAg
ICAgICAgbV9wbGF5ZXItPmFkZEF1ZGlvVHJhY2soKnRyYWNrKTsKICAgICB9CiAKLSAgICB3aGls
ZSAoc3RhdGljX2Nhc3Q8Z2ludD4obV9hdWRpb1RyYWNrcy5zaXplKCkpID4gbnVtVHJhY2tzKSB7
Ci0gICAgICAgIFJlZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBtX2F1
ZGlvVHJhY2tzLmxhc3QoKTsKLSAgICAgICAgdHJhY2stPmRpc2Nvbm5lY3QoKTsKLSAgICAgICAg
bV9hdWRpb1RyYWNrcy5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIG1fcGxheWVyLT5yZW1vdmVBdWRp
b1RyYWNrKCp0cmFjayk7Ci0gICAgfQorICAgIHB1cmdlSW52YWxpZEF1ZGlvVHJhY2tzKHZhbGlk
QXVkaW9TdHJlYW1zKTsKICNlbmRpZgogCiAgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxh
eWVyRW5naW5lVXBkYXRlZChtX3BsYXllcik7CkBAIC03NTAsNiArOTEzLDggQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVGV4dCgpCiAgICAgaWYgKFVO
TElLRUxZKCFtX3BpcGVsaW5lIHx8ICFtX3NvdXJjZSkpCiAgICAgICAgIHJldHVybjsKIAorICAg
IEFTU0VSVChtX2lzTGVnYWN5UGxheWJpbiB8fCBpc01lZGlhU291cmNlKCkpOworCiAgICAgZ2lu
dCBudW1UcmFja3MgPSAwOwogICAgIGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291cmNl
KCk7CiAgICAgR3N0RWxlbWVudCogZWxlbWVudCA9IHVzZU1lZGlhU291cmNlID8gbV9zb3VyY2Uu
Z2V0KCkgOiBtX3BpcGVsaW5lLmdldCgpOwpAQCAtNzYwLDI5ICs5MjUsMzUgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVGV4dCgpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWxpZFRleHRTdHJlYW1zOwogICAg
IGZvciAoZ2ludCBpID0gMDsgaSA8IG51bVRyYWNrczsgKytpKSB7CiAgICAgICAgIEdSZWZQdHI8
R3N0UGFkPiBwYWQ7CiAgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3BpcGVsaW5lLmdl
dCgpLCAiZ2V0LXRleHQtcGFkIiwgaSwgJnBhZC5vdXRQdHIoKSwgbnVsbHB0cik7CiAgICAgICAg
IEFTU0VSVChwYWQpOwogCisgICAgICAgIEdSZWZQdHI8R3N0RXZlbnQ+IGV2ZW50ID0gYWRvcHRH
UmVmKGdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudChwYWQuZ2V0KCksIEdTVF9FVkVOVF9TVFJFQU1f
U1RBUlQsIDApKTsKKyAgICAgICAgaWYgKCFldmVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGNvbnN0IGNoYXIqIHN0cmVhbUlkOworICAgICAgICBnc3RfZXZlbnRfcGFyc2Vf
c3RyZWFtX3N0YXJ0KGV2ZW50LmdldCgpLCAmc3RyZWFtSWQpOworCisgICAgICAgIHZhbGlkVGV4
dFN0cmVhbXMuYXBwZW5kKHN0cmVhbUlkKTsKICAgICAgICAgaWYgKGkgPCBzdGF0aWNfY2FzdDxn
aW50PihtX3RleHRUcmFja3Muc2l6ZSgpKSkgewotICAgICAgICAgICAgUmVmUHRyPEluYmFuZFRl
eHRUcmFja1ByaXZhdGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sgPSBtX3RleHRUcmFja3NbaV07
Ci0gICAgICAgICAgICBleGlzdGluZ1RyYWNrLT5zZXRJbmRleChpKTsKLSAgICAgICAgICAgIGlm
IChleGlzdGluZ1RyYWNrLT5wYWQoKSA9PSBwYWQpCi0gICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gZXhp
c3RpbmdUcmFjayA9IG1fdGV4dFRyYWNrcy5nZXQoc3RyZWFtSWQpOworICAgICAgICAgICAgaWYg
KGV4aXN0aW5nVHJhY2spIHsKKyAgICAgICAgICAgICAgICBleGlzdGluZ1RyYWNrLT5zZXRJbmRl
eChpKTsKKyAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjay0+cGFkKCkgPT0gcGFkKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
CiAgICAgICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9
IEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShpLCBwYWQpOwotICAgICAg
ICBtX3RleHRUcmFja3MuaW5zZXJ0KGksIHRyYWNrKTsKKyAgICAgICAgbV90ZXh0VHJhY2tzLmFk
ZChzdHJlYW1JZCwgdHJhY2spOwogICAgICAgICBtX3BsYXllci0+YWRkVGV4dFRyYWNrKCp0cmFj
ayk7CiAgICAgfQogCi0gICAgd2hpbGUgKHN0YXRpY19jYXN0PGdpbnQ+KG1fdGV4dFRyYWNrcy5z
aXplKCkpID4gbnVtVHJhY2tzKSB7Ci0gICAgICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2
YXRlR1N0cmVhbWVyPiB0cmFjayA9IG1fdGV4dFRyYWNrcy5sYXN0KCk7Ci0gICAgICAgIHRyYWNr
LT5kaXNjb25uZWN0KCk7Ci0gICAgICAgIG1fdGV4dFRyYWNrcy5yZW1vdmVMYXN0KCk7Ci0gICAg
ICAgIG1fcGxheWVyLT5yZW1vdmVUZXh0VHJhY2soKnRyYWNrKTsKLSAgICB9CisgICAgcHVyZ2VJ
bnZhbGlkVGV4dFRyYWNrcyh2YWxpZFRleHRTdHJlYW1zKTsKIH0KIAogR3N0Rmxvd1JldHVybiBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1RleHRTYW1wbGVDYWxsYmFjayhNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKQEAgLTgwOCw4ICs5NzksOCBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3VGV4dFNhbXBsZSgpCiAgICAgICAgIGNvbnN0
IGdjaGFyKiBpZDsKICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFydChzdHJlYW1T
dGFydEV2ZW50LmdldCgpLCAmaWQpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
dGV4dFRyYWNrcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEluYmFuZFRleHRU
cmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gbV90ZXh0VHJhY2tzW2ldOwotICAgICAgICAg
ICAgaWYgKHRyYWNrLT5zdHJlYW1JZCgpID09IGlkKSB7CisgICAgICAgICAgICBSZWZQdHI8SW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBtX3RleHRUcmFja3MuZ2V0KGlk
KTsKKyAgICAgICAgICAgIGlmICh0cmFjaykgewogICAgICAgICAgICAgICAgIHRyYWNrLT5oYW5k
bGVTYW1wbGUoc2FtcGxlKTsKICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMDk3LDYgKzEyNjgsNjEgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAg
ICAgZ3N0X3RhZ19saXN0X3VucmVmKHRhZ3MpOwogICAgICAgICBicmVhazsKICAgICB9CisjaWYg
VVNFKEdTVFJFQU1FUl9QTEFZQklOMykKKyAgICBjYXNlIEdTVF9NRVNTQUdFX1NUUkVBTV9DT0xM
RUNUSU9OOiB7CisgICAgICAgIEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gY29sbGVjdGlv
bjsKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtX2NvbGxlY3Rpb24obWVzc2FnZSwg
JmNvbGxlY3Rpb24ub3V0UHRyKCkpOworCisgICAgICAgIGlmIChjb2xsZWN0aW9uKSB7CisgICAg
ICAgICAgICBtX3N0cmVhbUNvbGxlY3Rpb24uc3dhcChjb2xsZWN0aW9uKTsKKyAgICAgICAgICAg
IG1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpTdHJlYW1Db2xsZWN0
aW9uQ2hhbmdlZCwgW3RoaXNdIHsKKyAgICAgICAgICAgICAgICB0aGlzLT51cGRhdGVUcmFja3Mo
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEdTVF9NRVNTQUdFX1NUUkVBTVNfU0VMRUNURUQ6IHsKKyAgICAgICAgR1JlZlB0cjxH
c3RTdHJlYW1Db2xsZWN0aW9uPiBjb2xsZWN0aW9uOworICAgICAgICBnc3RfbWVzc2FnZV9wYXJz
ZV9zdHJlYW1zX3NlbGVjdGVkKG1lc3NhZ2UsICZjb2xsZWN0aW9uLm91dFB0cigpKTsKKworICAg
ICAgICBpZiAoIWNvbGxlY3Rpb24pCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBtX3N0
cmVhbUNvbGxlY3Rpb24uc3dhcChjb2xsZWN0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QXVkaW9T
dHJlYW1JZCA9ICIiOworICAgICAgICBtX2N1cnJlbnRWaWRlb1N0cmVhbUlkID0gIiI7CisgICAg
ICAgIG1fY3VycmVudFRleHRTdHJlYW1JZCA9ICIiOworCisgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3NpemUobWVzc2FnZSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
R1JlZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSA9IGdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRf
Z2V0X3N0cmVhbShtZXNzYWdlLCBpKTsKKyAgICAgICAgICAgIGlmICghc3RyZWFtKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgR3N0U3RyZWFtVHlwZSB0eXBlID0gZ3N0
X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtLmdldCgpKTsKKyAgICAgICAgICAgIFN0cmlu
ZyBzdHJlYW1JZChnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKSk7CisKKyAg
ICAgICAgICAgIEdTVF9ERUJVRygiU2VsZWN0aW5nICVzIHRyYWNrIHdpdGggSUQ6ICVzIiwgZ3N0
X3N0cmVhbV90eXBlX2dldF9uYW1lKHR5cGUpLCBzdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIC8vIFBsYXliaW4zIGNhbiBzZW5kIG1vcmUgdGhhbiBvbmUgc2VsZWN0ZWQgc3Ry
ZWFtIG9mIHRoZSBzYW1lIHR5cGUKKyAgICAgICAgICAgIC8vIGJ1dCB0aGVyZSdzIG5vIHByaW9y
aXR5IG9yIG9yZGVyaW5nIHN5c3RlbSBpbiBwbGFjZSwgc28gd2UgYXNzdW1lCisgICAgICAgICAg
ICAvLyB0aGUgc2VsZWN0ZWQgc3RyZWFtIGlzIHRoZSBsYXN0IG9uZSBhcyByZXBvcnRlZCBieSBw
bGF5YmluMy4KKyAgICAgICAgICAgIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX0FVRElPKSB7
CisgICAgICAgICAgICAgICAgbV9jdXJyZW50QXVkaW9TdHJlYW1JZCA9IHN0cmVhbUlkOworICAg
ICAgICAgICAgICAgIGF1dG8gdHJhY2sgPSBtX2F1ZGlvVHJhY2tzLmdldChtX2N1cnJlbnRBdWRp
b1N0cmVhbUlkKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodHJhY2spOworICAgICAgICAgICAg
ICAgIHRyYWNrLT5tYXJrQXNBY3RpdmUoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSAm
IEdTVF9TVFJFQU1fVFlQRV9WSURFTykgeworICAgICAgICAgICAgICAgIG1fY3VycmVudFZpZGVv
U3RyZWFtSWQgPSBzdHJlYW1JZDsKKyAgICAgICAgICAgICAgICBhdXRvIHRyYWNrID0gbV92aWRl
b1RyYWNrcy5nZXQobV9jdXJyZW50VmlkZW9TdHJlYW1JZCk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKHRyYWNrKTsKKyAgICAgICAgICAgICAgICB0cmFjay0+bWFya0FzQWN0aXZlKCk7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVEVYVCkKKyAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRUZXh0U3RyZWFtSWQgPSBzdHJlYW1JZDsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBHU1RfV0FSTklORygiVW5rbm93biBzdHJlYW0gdHlwZSB3aXRo
IHN0cmVhbS1pZCAlcyIsIHN0cmVhbUlkKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9CisjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICBHU1RfREVCVUcoIlVuaGFuZGxlZCBH
U3RyZWFtZXIgbWVzc2FnZSB0eXBlOiAlcyIsIEdTVF9NRVNTQUdFX1RZUEVfTkFNRShtZXNzYWdl
KSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTIxMyw2ICsxNDM5LDQyIEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzVGFibGVPZkNvbnRlbnRzRW50cnkoR3N0VG9jRW50
cnkqIGVudHJ5CiAgICAgZm9yIChHTGlzdCogaSA9IGdzdF90b2NfZW50cnlfZ2V0X3N1Yl9lbnRy
aWVzKGVudHJ5KTsgaTsgaSA9IGktPm5leHQpCiAgICAgICAgIHByb2Nlc3NUYWJsZU9mQ29udGVu
dHNFbnRyeShzdGF0aWNfY2FzdDxHc3RUb2NFbnRyeSo+KGktPmRhdGEpKTsKIH0KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZEF1ZGlvVHJhY2tzKFZlY3Rv
cjxTdHJpbmc+IHZhbGlkVHJhY2tJZHMpCit7CisgICAgZm9yIChhdXRvIGF1ZGlvVHJhY2tJZCA6
IG1fYXVkaW9UcmFja3Mua2V5cygpKSB7CisgICAgICAgIGlmICh2YWxpZFRyYWNrSWRzLmNvbnRh
aW5zKGF1ZGlvVHJhY2tJZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXV0byB0
cmFjayA9IG1fYXVkaW9UcmFja3MuZ2V0KGF1ZGlvVHJhY2tJZCk7CisgICAgICAgIHRyYWNrLT5k
aXNjb25uZWN0KCk7CisgICAgICAgIG1fcGxheWVyLT5yZW1vdmVBdWRpb1RyYWNrKCp0cmFjayk7
CisgICAgICAgIG1fYXVkaW9UcmFja3MucmVtb3ZlKGF1ZGlvVHJhY2tJZCk7CisgICAgfQorfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VJbnZhbGlkVmlkZW9UcmFj
a3MoVmVjdG9yPFN0cmluZz4gdmFsaWRUcmFja0lkcykKK3sKKyAgICBmb3IgKGF1dG8gdmlkZW9U
cmFja0lkIDogbV92aWRlb1RyYWNrcy5rZXlzKCkpIHsKKyAgICAgICAgaWYgKHZhbGlkVHJhY2tJ
ZHMuY29udGFpbnModmlkZW9UcmFja0lkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBhdXRvIHRyYWNrID0gbV92aWRlb1RyYWNrcy5nZXQodmlkZW9UcmFja0lkKTsKKyAgICAgICAg
dHJhY2stPmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgbV9wbGF5ZXItPnJlbW92ZVZpZGVvVHJhY2so
KnRyYWNrKTsKKyAgICAgICAgbV92aWRlb1RyYWNrcy5yZW1vdmUodmlkZW9UcmFja0lkKTsKKyAg
ICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZUludmFsaWRU
ZXh0VHJhY2tzKFZlY3RvcjxTdHJpbmc+IHZhbGlkVHJhY2tJZHMpCit7CisgICAgZm9yIChhdXRv
IHRleHRUcmFja0lkIDogbV90ZXh0VHJhY2tzLmtleXMoKSkgeworICAgICAgICBpZiAodmFsaWRU
cmFja0lkcy5jb250YWlucyh0ZXh0VHJhY2tJZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgYXV0byB0cmFjayA9IG1fdGV4dFRyYWNrcy5nZXQodGV4dFRyYWNrSWQpOworICAgICAg
ICB0cmFjay0+ZGlzY29ubmVjdCgpOworICAgICAgICBtX3BsYXllci0+cmVtb3ZlVGV4dFRyYWNr
KCp0cmFjayk7CisgICAgICAgIG1fdGV4dFRyYWNrcy5yZW1vdmUodGV4dFRyYWNrSWQpOworICAg
IH0KK30KICNlbmRpZgogCiBzdGF0aWMgaW50IGZpbmRITFNRdWV1ZShjb25zdCBHVmFsdWUqIGl0
ZW0pCkBAIC0xNDAwLDkgKzE2NjIsOSBAQCB1bnNpZ25lZCBsb25nIGxvbmcgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjp0b3RhbEJ5dGVzKCkgY29uc3QKICAgICByZXR1cm4gbV90b3RhbEJ5
dGVzOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlQ2hhbmdl
ZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQordm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZVNldHVwQ2FsbGJhY2soTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIsIEdzdEVsZW1lbnQqIHNvdXJjZUVsZW1lbnQpCiB7Ci0g
ICAgcGxheWVyLT5zb3VyY2VDaGFuZ2VkKCk7CisgICAgcGxheWVyLT5zb3VyY2VTZXR1cChzb3Vy
Y2VFbGVtZW50KTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVyaURl
Y29kZUJpbkVsZW1lbnRBZGRlZENhbGxiYWNrKEdzdEJpbiogYmluLCBHc3RFbGVtZW50KiBlbGVt
ZW50LCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKQEAgLTE0MTksNyArMTY4
MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cmlEZWNvZGVCaW5FbGVt
ZW50QWRkZWRDYWxsYmFjayhHc3RCaW4qIGJpbiwKIAogICAgIEdVbmlxdWVQdHI8Y2hhcj4gbmV3
RG93bmxvYWRUZW1wbGF0ZShnX2J1aWxkX2ZpbGVuYW1lKEdfRElSX1NFUEFSQVRPUl9TLCAidmFy
IiwgInRtcCIsICJXZWJLaXQtTWVkaWEtWFhYWFhYIiwgbnVsbHB0cikpOwogICAgIGdfb2JqZWN0
X3NldChlbGVtZW50LCAidGVtcC10ZW1wbGF0ZSIsIG5ld0Rvd25sb2FkVGVtcGxhdGUuZ2V0KCks
IG51bGxwdHIpOwotICAgIEdTVF9UUkFDRSgiUmVjb25maWd1cmVkIGZpbGUgZG93bmxvYWQgdGVt
cGxhdGUgZnJvbSAnJXMnIHRvICclcyciLCBvbGREb3dubG9hZFRlbXBsYXRlLmdldCgpLCBuZXdE
b3dubG9hZFRlbXBsYXRlLmdldCgpKTsKKyAgICBHU1RfREVCVUcoIlJlY29uZmlndXJlZCBmaWxl
IGRvd25sb2FkIHRlbXBsYXRlIGZyb20gJyVzJyB0byAnJXMnIiwgb2xkRG93bmxvYWRUZW1wbGF0
ZS5nZXQoKSwgbmV3RG93bmxvYWRUZW1wbGF0ZS5nZXQoKSk7CiAKICAgICBwbGF5ZXItPnB1cmdl
T2xkRG93bmxvYWRGaWxlcyhvbGREb3dubG9hZFRlbXBsYXRlLmdldCgpKTsKIH0KQEAgLTE0Mzks
NyArMTcwMSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkb3dubG9hZEJ1
ZmZlckZpbGVDcmVhdGVkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBHU1RfVFJBQ0UoIlVubGlua2VkIG1lZGlhIHRlbXBvcmFyeSBmaWxlICVzIGFm
dGVyIGNyZWF0aW9uIiwgZG93bmxvYWRGaWxlLmdldCgpKTsKKyAgICBHU1RfREVCVUcoIlVubGlu
a2VkIG1lZGlhIHRlbXBvcmFyeSBmaWxlICVzIGFmdGVyIGNyZWF0aW9uIiwgZG93bmxvYWRGaWxl
LmdldCgpKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlT2xk
RG93bmxvYWRGaWxlcyhjb25zdCBjaGFyKiBkb3dubG9hZEZpbGVUZW1wbGF0ZSkKQEAgLTE0NjEs
MTMgKzE3MjMsMTQgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlT2xk
RG93bmxvYWRGaWxlcyhjb25zdCBjaGFyKiBkb3dubG9hZEZpbGUKICAgICB9CiB9CiAKLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VDaGFuZ2VkKCkKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VTZXR1cChHc3RFbGVtZW50KiBzb3VyY2VFbGVt
ZW50KQogeworICAgIEdTVF9ERUJVRygiU291cmNlIGVsZW1lbnQgc2V0LXVwIGZvciAlcyIsIEdT
VF9FTEVNRU5UX05BTUUoc291cmNlRWxlbWVudCkpOworCiAgICAgaWYgKFdFQktJVF9JU19XRUJf
U1JDKG1fc291cmNlLmdldCgpKSAmJiBHU1RfT0JKRUNUX1BBUkVOVChtX3NvdXJjZS5nZXQoKSkp
CiAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHU1RfRUxFTUVO
VF9QQVJFTlQobV9zb3VyY2UuZ2V0KCkpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPih1cmlE
ZWNvZGVCaW5FbGVtZW50QWRkZWRDYWxsYmFjayksIHRoaXMpOwogCi0gICAgbV9zb3VyY2UuY2xl
YXIoKTsKLSAgICBnX29iamVjdF9nZXQobV9waXBlbGluZS5nZXQoKSwgInNvdXJjZSIsICZtX3Nv
dXJjZS5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgbV9zb3VyY2UgPSBzb3VyY2VFbGVtZW50Owog
CiAgICAgaWYgKFdFQktJVF9JU19XRUJfU1JDKG1fc291cmNlLmdldCgpKSkgewogICAgICAgICB3
ZWJLaXRXZWJTcmNTZXRNZWRpYVBsYXllcihXRUJLSVRfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSks
IG1fcGxheWVyKTsKQEAgLTIwMTksOCArMjI4MiwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6c2V0RG93bmxvYWRCdWZmZXJpbmcoKQogICAgIHVuc2lnbmVkIGZsYWdEb3du
bG9hZCA9IGdldEdzdFBsYXlGbGFnKCJkb3dubG9hZCIpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBzdG9wIGRvd25sb2FkaW5nIGlmIHdlIGFscmVhZHkgc3RhcnRlZCBpdC4KLSAgICBpZiAo
ZmxhZ3MgJiBmbGFnRG93bmxvYWQgJiYgbV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVO
b3RoaW5nICYmICFtX3Jlc2V0UGlwZWxpbmUpCisgICAgaWYgKGZsYWdzICYgZmxhZ0Rvd25sb2Fk
ICYmIG1fcmVhZHlTdGF0ZSA+IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZyAmJiAhbV9yZXNldFBp
cGVsaW5lKSB7CisgICAgICAgIEdTVF9ERUJVRygiRG93bmxvYWQgYWxyZWFkeSBzdGFydGVkLCBu
b3Qgc3RhcnRpbmcgYWdhaW4iKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGJvb2wg
c2hvdWxkRG93bmxvYWQgPSAhaXNMaXZlU3RyZWFtKCkgJiYgbV9wcmVsb2FkID09IE1lZGlhUGxh
eWVyOjpBdXRvOwogICAgIGlmIChzaG91bGREb3dubG9hZCkgewpAQCAtMjAzNiw2ICsyMzAxLDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldERvd25sb2FkQnVmZmVyaW5n
KCkKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFByZWxvYWQoTWVkaWFQ
bGF5ZXI6OlByZWxvYWQgcHJlbG9hZCkKIHsKKyAgICBHU1RfREVCVUcoIlNldHRpbmcgcHJlbG9h
ZCB0byAlcyIsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKHByZWxvYWQpLnV0ZjgoKS5kYXRh
KCkpOwogICAgIGlmIChwcmVsb2FkID09IE1lZGlhUGxheWVyOjpBdXRvICYmIGlzTGl2ZVN0cmVh
bSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTIxNDAsOSArMjQwNiwxNyBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbigpCiAKICAgICAvLyBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoKSByZXR1cm5zIGEgZmxvYXRpbmcgcmVmZXJlbmNlIHNvCiAg
ICAgLy8gd2Ugc2hvdWxkIG5vdCBhZG9wdC4KKyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKQor
ICAgIG1faXNMZWdhY3lQbGF5YmluID0gZmFsc2U7CisgICAgc2V0UGlwZWxpbmUoZ3N0X2VsZW1l
bnRfZmFjdG9yeV9tYWtlKCJwbGF5YmluMyIsICJwbGF5IikpOworI2Vsc2UKKyAgICBtX2lzTGVn
YWN5UGxheWJpbiA9IHRydWU7CiAgICAgc2V0UGlwZWxpbmUoZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJwbGF5YmluIiwgInBsYXkiKSk7CisjZW5kaWYKICAgICBzZXRTdHJlYW1Wb2x1bWVFbGVt
ZW50KEdTVF9TVFJFQU1fVk9MVU1FKG1fcGlwZWxpbmUuZ2V0KCkpKTsKIAorICAgIEdTVF9JTkZP
KCJVc2luZyBsZWdhY3kgcGxheWJpbiBlbGVtZW50OiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2lz
TGVnYWN5UGxheWJpbikpOworCiAgICAgLy8gTGV0IGFsc28gb3RoZXIgbGlzdGVuZXJzIHN1YnNj
cmliZSB0byAoYXBwbGljYXRpb24pIG1lc3NhZ2VzIGluIHRoaXMgYnVzLgogICAgIEdSZWZQdHI8
R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5F
KG1fcGlwZWxpbmUuZ2V0KCkpKSk7CiAgICAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGwo
YnVzLmdldCgpLCBSdW5Mb29wU291cmNlUHJpb3JpdHk6OlJ1bkxvb3BEaXNwYXRjaGVyKTsKQEAg
LTIxNTAsMTEgKzI0MjQsMTUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNy
ZWF0ZUdTVFBsYXlCaW4oKQogCiAgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJt
dXRlIiwgbV9wbGF5ZXItPm11dGVkKCksIG51bGxwdHIpOwogCi0gICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKG1fcGlwZWxpbmUuZ2V0KCksICJub3RpZnk6OnNvdXJjZSIsIEdfQ0FMTEJBQ0so
c291cmNlQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdF9zd2Fw
cGVkKG1fcGlwZWxpbmUuZ2V0KCksICJ2aWRlby1jaGFuZ2VkIiwgR19DQUxMQkFDSyh2aWRlb0No
YW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3Bp
cGVsaW5lLmdldCgpLCAiYXVkaW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0soYXVkaW9DaGFuZ2VkQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5n
ZXQoKSwgInNvdXJjZS1zZXR1cCIsIEdfQ0FMTEJBQ0soc291cmNlU2V0dXBDYWxsYmFjayksIHRo
aXMpOworICAgIGlmIChtX2lzTGVnYWN5UGxheWJpbikgeworICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0X3N3YXBwZWQobV9waXBlbGluZS5nZXQoKSwgInZpZGVvLWNoYW5nZWQiLCBHX0NBTExCQUNL
KHZpZGVvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rf
c3dhcHBlZChtX3BpcGVsaW5lLmdldCgpLCAiYXVkaW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0soYXVk
aW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKICNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCi0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fcGlwZWxpbmUuZ2V0KCksICJ0ZXh0
LWNoYW5nZWQiLCBHX0NBTExCQUNLKHRleHRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBp
ZiAobV9pc0xlZ2FjeVBsYXliaW4pCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZCht
X3BpcGVsaW5lLmdldCgpLCAidGV4dC1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENh
bGxiYWNrKSwgdGhpcyk7CiAKICAgICBHc3RFbGVtZW50KiB0ZXh0Q29tYmluZXIgPSB3ZWJraXRU
ZXh0Q29tYmluZXJOZXcoKTsKICAgICBBU1NFUlQodGV4dENvbWJpbmVyKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCBlMzdhNDRlMjk1NmNlMGQ5
ZDUyOTExMTdmMDdkZWQ1ZjJlZjZlNjA5Li42ZjUwM2QzNTA2YmE4M2E0ZTU3Yjg2ZWJkNDg4NGIz
MGNhOGIyNGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5oCkBAIC0yMiw4ICsyMiw4IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAq
LwogCi0jaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcl9oCi0jZGVmaW5lIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcl9oCisjcHJhZ21hIG9uY2UKKwogI2lmIEVOQUJMRShWSURF
TykgJiYgVVNFKEdTVFJFQU1FUikKIAogI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKQEAg
LTM2LDEzICszNiwxMSBAQAogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KIAotI2lmIEVOQUJMRShWSURFT19UUkFDSykgJiYgVVNFKEdTVFJFQU1FUl9N
UEVHVFMpCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorI2luY2x1ZGUgIlRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CiAj
ZW5kaWYKIAotdHlwZWRlZiBzdHJ1Y3QgX0dzdEJ1ZmZlciBHc3RCdWZmZXI7Ci10eXBlZGVmIHN0
cnVjdCBfR3N0TWVzc2FnZSBHc3RNZXNzYWdlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnQg
R3N0RWxlbWVudDsKIHR5cGVkZWYgc3RydWN0IF9Hc3RNcGVndHNTZWN0aW9uIEdzdE1wZWd0c1Nl
Y3Rpb247CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY3LDYgKzY1LDggQEAgcHVibGljOgog
ICAgIGV4cGxpY2l0IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcihNZWRpYVBsYXllciopOwog
ICAgIHZpcnR1YWwgfk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcigpOwogCisgICAgV2Vha1B0
cjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBt
X3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKnRoaXMpOyB9CisKICAgICBzdGF0aWMgdm9p
ZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKICAgICB2b2lkIGhh
bmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSopOwogICAgIHZvaWQgaGFuZGxlUGx1Z2luSW5zdGFsbGVy
UmVzdWx0KEdzdEluc3RhbGxQbHVnaW5zUmV0dXJuKTsKQEAgLTExNiw3ICsxMTYsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpOwogICAgIHZvaWQgbG9hZGlu
Z0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlKTsKIAotICAgIHZpcnR1YWwgdm9pZCBz
b3VyY2VDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHNvdXJjZVNldHVwKEdzdEVsZW1lbnQq
KTsKIAogICAgIEdzdEVsZW1lbnQqIGF1ZGlvU2luaygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBjb25maWd1cmVQbGF5U2luaygpIHsgfQpAQCAtMTMxLDE0ICsxMzEsMTQgQEAg
cHVibGljOgogCiAgICAgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX2lzU3RyZWFtaW5nOyB9CiAKKyAgICB2b2lkIGVuYWJsZVRyYWNrKFRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXI6OlRyYWNrVHlwZSwgdW5zaWduZWQgaW5kZXgpOworCiBwcml2YXRlOgogICAg
IHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJ
bnNlbnNpdGl2ZUhhc2g+Jik7CiAgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUg
c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmKTsKIAogICAg
IHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CiAKLSAgICBXZWFrUHRyPE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcj4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vha1B0ckZhY3Rvcnku
Y3JlYXRlV2Vha1B0cigqdGhpcyk7IH0KLQogICAgIEdzdEVsZW1lbnQqIGNyZWF0ZUF1ZGlvU2lu
aygpIG92ZXJyaWRlOwogCiAgICAgTWVkaWFUaW1lIHBsYXliYWNrUG9zaXRpb24oKSBjb25zdDsK
QEAgLTE1MywxMiArMTUzLDE3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0RG93
bmxvYWRCdWZmZXJpbmcoKTsKICAgICB2b2lkIHByb2Nlc3NCdWZmZXJpbmdTdGF0cyhHc3RNZXNz
YWdlKik7Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKSAmJiBVU0UoR1NUUkVBTUVSX01QRUdUUykK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisjaWYgVVNFKEdTVFJFQU1FUl9NUEVHVFMpCiAgICAg
dm9pZCBwcm9jZXNzTXBlZ1RzU2VjdGlvbihHc3RNcGVndHNTZWN0aW9uKik7CiAjZW5kaWYKLSNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisKICAgICB2b2lkIHByb2Nlc3NUYWJsZU9mQ29udGVudHMo
R3N0TWVzc2FnZSopOwogICAgIHZvaWQgcHJvY2Vzc1RhYmxlT2ZDb250ZW50c0VudHJ5KEdzdFRv
Y0VudHJ5Kik7CisKKyAgICB2b2lkIHB1cmdlSW52YWxpZEF1ZGlvVHJhY2tzKFZlY3RvcjxTdHJp
bmc+IHZhbGlkVHJhY2tJZHMpOworICAgIHZvaWQgcHVyZ2VJbnZhbGlkVmlkZW9UcmFja3MoVmVj
dG9yPFN0cmluZz4gdmFsaWRUcmFja0lkcyk7CisgICAgdm9pZCBwdXJnZUludmFsaWRUZXh0VHJh
Y2tzKFZlY3RvcjxTdHJpbmc+IHZhbGlkVHJhY2tJZHMpOwogI2VuZGlmCiAgICAgdmlydHVhbCBi
b29sIGRvU2Vlayhjb25zdCBNZWRpYVRpbWUmIHBvc2l0aW9uLCBmbG9hdCByYXRlLCBHc3RTZWVr
RmxhZ3Mgc2Vla1R5cGUpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQbGF5YmFja1JhdGUoKTsK
QEAgLTE3Myw2ICsxNzgsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0UGxheWJpblVSTChj
b25zdCBVUkwmIHVybFN0cmluZyk7CiAKKyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKQorICAg
IHZvaWQgdXBkYXRlVHJhY2tzKCk7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgY2Fj
aGVEdXJhdGlvbigpOwogCkBAIC0yMTQsNyArMjIzLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgc3Rh
dGljIHZvaWQgc2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyKiwgR09iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgc291cmNlQ2hhbmdl
ZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOworICAgIHN0YXRpYyB2b2lk
IHNvdXJjZVNldHVwQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiwgR3N0RWxl
bWVudCopOwogICAgIHN0YXRpYyB2b2lkIHZpZGVvQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lciopOwogICAgIHN0YXRpYyB2b2lkIHZpZGVvU2lua0NhcHNDaGFuZ2Vk
Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CiAgICAgc3RhdGljIHZvaWQg
YXVkaW9DaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CkBAIC0y
NDcsNiArMjU2LDEzIEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBsb25nIGxvbmcg
bV90b3RhbEJ5dGVzOwogICAgIFVSTCBtX3VybDsKICAgICBib29sIG1fcHJlc2VydmVzUGl0Y2g7
CisgICAgYm9vbCBtX2lzTGVnYWN5UGxheWJpbjsKKyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4z
KQorICAgIEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gbV9zdHJlYW1Db2xsZWN0aW9uOwor
I2VuZGlmCisgICAgU3RyaW5nIG1fY3VycmVudEF1ZGlvU3RyZWFtSWQ7CisgICAgU3RyaW5nIG1f
Y3VycmVudFZpZGVvU3RyZWFtSWQ7CisgICAgU3RyaW5nIG1fY3VycmVudFRleHRTdHJlYW1JZDsK
ICNpZiBFTkFCTEUoV0VCX0FVRElPKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb1NvdXJjZVBy
b3ZpZGVyR1N0cmVhbWVyPiBtX2F1ZGlvU291cmNlUHJvdmlkZXI7CiAjZW5kaWYKQEAgLTI1NCwx
NyArMjcwLDE2IEBAIHByaXZhdGU6CiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2Rvd25sb2Fk
QnVmZmVyOwogICAgIFJlZlB0cjxNZWRpYVBsYXllclJlcXVlc3RJbnN0YWxsTWlzc2luZ1BsdWdp
bnNDYWxsYmFjaz4gbV9taXNzaW5nUGx1Z2luc0NhbGxiYWNrOwogI2lmIEVOQUJMRShWSURFT19U
UkFDSykKLSAgICBWZWN0b3I8UmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyPj4gbV9h
dWRpb1RyYWNrczsKLSAgICBWZWN0b3I8UmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3Ry
ZWFtZXI+PiBtX3RleHRUcmFja3M7Ci0gICAgVmVjdG9yPFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lcj4+IG1fdmlkZW9UcmFja3M7CisgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJl
ZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4+IG1fYXVkaW9UcmFja3M7CisgICAgSGFz
aE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
Pj4gbV90ZXh0VHJhY2tzOworICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8VmlkZW9U
cmFja1ByaXZhdGVHU3RyZWFtZXI+PiBtX3ZpZGVvVHJhY2tzOwogICAgIFJlZlB0cjxJbmJhbmRN
ZXRhZGF0YVRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI+IG1fY2hhcHRlcnNUcmFjazsKLSNlbmRp
ZgotI2lmIEVOQUJMRShWSURFT19UUkFDSykgJiYgVVNFKEdTVFJFQU1FUl9NUEVHVFMpCisjaWYg
VVNFKEdTVFJFQU1FUl9NUEVHVFMpCiAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxJ
bmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI+PiBtX21ldGFkYXRhVHJhY2tz
OworI2VuZGlmCiAjZW5kaWYKICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYVNvdXJjZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiB9OwogfQogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
LmgKaW5kZXggMDNmZWRlYTk3NTkyYWMyNWU3ODA0YTRlZDlkYjZhZjk5MWU2OTAzZS4uYWViMmVi
NGZlMjRjZDM3YzdhNDk4NTZlZWJiNzliYWE4YmQ5OGM5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oCkBAIC0yMDksNyArMjA5LDggQEAg
cHJvdGVjdGVkOgogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICAgICAgVGV4dENoYW5nZWQg
PSAxIDw8IDUsCiAjZW5kaWYKLSAgICAgICAgU2l6ZUNoYW5nZWQgPSAxIDw8IDYKKyAgICAgICAg
U2l6ZUNoYW5nZWQgPSAxIDw8IDYsCisgICAgICAgIFN0cmVhbUNvbGxlY3Rpb25DaGFuZ2VkID0g
MSA8PCA3CiAgICAgfTsKIAogICAgIFdlYWtQdHJGYWN0b3J5PE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2U+IG1fd2Vha1B0ckZhY3Rvcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2
YXRlQmFzZUdTdHJlYW1lci5jcHAKaW5kZXggYWYwNjhjYjA4ZTU4Y2ZkYWM3MGVmMzE0NjRmN2I1
NDk4OTZjYWQ5Yi4uOGNhMmY4Zjc0YzUwMTcxODQ0OGNjMzU3MjYzOTI4ZDZiMjY3NTdhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNr
UHJpdmF0ZUJhc2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmNwcApAQCAtNDcsNiAr
NDcsOSBAQCBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1ByaXZhdGVCYXNlR1N0cmVh
bWVyKFRyYWNrUHJpdmF0ZUJhc2UqIG93bmVyLCBnaQogICAgIDogbV9ub3RpZmllcihNYWluVGhy
ZWFkTm90aWZpZXI8TWFpblRocmVhZE5vdGlmaWNhdGlvbj46OmNyZWF0ZSgpKQogICAgICwgbV9p
bmRleChpbmRleCkKICAgICAsIG1fcGFkKHBhZCkKKyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4z
KQorICAgICwgbV9zdHJlYW0obnVsbHB0cikKKyNlbmRpZgogICAgICwgbV9vd25lcihvd25lcikK
IHsKICAgICBBU1NFUlQobV9wYWQpOwpAQCAtNTksNiArNjIsMjIgQEAgVHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcjo6VHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcihUcmFja1ByaXZhdGVCYXNlKiBv
d25lciwgZ2kKICAgICB0YWdzQ2hhbmdlZCgpOwogfQogCisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZ
QklOMykKK1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXIoVHJhY2tQcml2YXRlQmFzZSogb3duZXIsIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0U3RyZWFt
PiBzdHJlYW0pCisgICAgOiBtX25vdGlmaWVyKE1haW5UaHJlYWROb3RpZmllcjxNYWluVGhyZWFk
Tm90aWZpY2F0aW9uPjo6Y3JlYXRlKCkpCisgICAgLCBtX2luZGV4KGluZGV4KQorICAgICwgbV9w
YWQobnVsbHB0cikKKyAgICAsIG1fc3RyZWFtKHN0cmVhbSkKKyAgICAsIG1fb3duZXIob3duZXIp
Cit7CisgICAgQVNTRVJUKG1fc3RyZWFtKTsKKworICAgIC8vIFdlIGNhbid0IGNhbGwgbm90aWZ5
VHJhY2tPZlRhZ3NDaGFuZ2VkKCkgZGlyZWN0bHksIGJlY2F1c2Ugd2UgbmVlZCB0YWdzQ2hhbmdl
ZCgpCisgICAgLy8gdG8gc2V0dXAgbV90YWdzLgorICAgIHRhZ3NDaGFuZ2VkKCk7Cit9CisjZW5k
aWYKKwogVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6flRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXIoKQogewogICAgIGRpc2Nvbm5lY3QoKTsKQEAgLTY3LDE0ICs4NiwyMCBAQCBUcmFja1ByaXZh
dGVCYXNlR1N0cmVhbWVyOjp+VHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcigpCiAKIHZvaWQgVHJh
Y2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6ZGlzY29ubmVjdCgpCiB7CisgICAgbV90YWdzLmNsZWFy
KCk7CisKKyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKQorICAgIGlmIChtX3N0cmVhbSkKKyAg
ICAgICAgbV9zdHJlYW0uY2xlYXIoKTsKKyNlbmRpZgorCisgICAgbV9ub3RpZmllci0+Y2FuY2Vs
UGVuZGluZ05vdGlmaWNhdGlvbnMoKTsKKwogICAgIGlmICghbV9wYWQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fbm90aWZpZXItPmNhbmNlbFBlbmRpbmdOb3RpZmljYXRpb25zKCk7CiAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fcGFkLmdldCgpLCBHX1NJR05B
TF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKLQogICAgIG1fcGFk
LmNsZWFyKCk7Ci0gICAgbV90YWdzLmNsZWFyKCk7CiB9CiAKIHZvaWQgVHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcjo6YWN0aXZlQ2hhbmdlZENhbGxiYWNrKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXIqIHRyYWNrKQpAQCAtOTAsMTEgKzExNSwyMCBAQCB2b2lkIFRyYWNrUHJpdmF0ZUJhc2VHU3Ry
ZWFtZXI6OnRhZ3NDaGFuZ2VkQ2FsbGJhY2soVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lciogdAog
dm9pZCBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjp0YWdzQ2hhbmdlZCgpCiB7CiAgICAgR1Jl
ZlB0cjxHc3RUYWdMaXN0PiB0YWdzOwotICAgIGlmIChnX29iamVjdF9jbGFzc19maW5kX3Byb3Bl
cnR5KEdfT0JKRUNUX0dFVF9DTEFTUyhtX3BhZC5nZXQoKSksICJ0YWdzIikpCi0gICAgICAgIGdf
b2JqZWN0X2dldChtX3BhZC5nZXQoKSwgInRhZ3MiLCAmdGFncy5vdXRQdHIoKSwgbnVsbHB0cik7
CisgICAgaWYgKG1fcGFkKSB7CisgICAgICAgIGlmIChnX29iamVjdF9jbGFzc19maW5kX3Byb3Bl
cnR5KEdfT0JKRUNUX0dFVF9DTEFTUyhtX3BhZC5nZXQoKSksICJ0YWdzIikpCisgICAgICAgICAg
ICBnX29iamVjdF9nZXQobV9wYWQuZ2V0KCksICJ0YWdzIiwgJnRhZ3Mub3V0UHRyKCksIG51bGxw
dHIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0YWdzID0gYWRvcHRHUmVmKGdzdF90YWdf
bGlzdF9uZXdfZW1wdHkoKSk7CisgICAgfQorI2lmIFVTRShHU1RSRUFNRVJfUExBWUJJTjMpCisg
ICAgZWxzZSBpZiAobV9zdHJlYW0pCisgICAgICAgIHRhZ3MgPSBhZG9wdEdSZWYoZ3N0X3N0cmVh
bV9nZXRfdGFncyhtX3N0cmVhbS5nZXQoKSkpOworI2VuZGlmCiAgICAgZWxzZQogICAgICAgICB0
YWdzID0gYWRvcHRHUmVmKGdzdF90YWdfbGlzdF9uZXdfZW1wdHkoKSk7CiAKKyAgICBHU1RfREVC
VUcoIkluc3BlY3RpbmcgdHJhY2sgYXQgaW5kZXggJWQgd2l0aCB0YWdzOiAlIiBHU1RfUFRSX0ZP
Uk1BVCwgbV9pbmRleCwgdGFncy5nZXQoKSk7CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxv
Y2sobV90YWdNdXRleCk7CiAgICAgICAgIG1fdGFncy5zd2FwKHRhZ3MpOwpAQCAtMTA5LDcgKzE0
Myw3IEBAIHZvaWQgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZkFjdGl2
ZUNoYW5nZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBnYm9vbGVhbiBhY3RpdmUgPSBmYWxz
ZTsKLSAgICBpZiAobV9wYWQgJiYgZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eShHX09CSkVD
VF9HRVRfQ0xBU1MobV9wYWQuZ2V0KCkpLCAiYWN0aXZlIikpCisgICAgaWYgKGdfb2JqZWN0X2Ns
YXNzX2ZpbmRfcHJvcGVydHkoR19PQkpFQ1RfR0VUX0NMQVNTKG1fcGFkLmdldCgpKSwgImFjdGl2
ZSIpKQogICAgICAgICBnX29iamVjdF9nZXQobV9wYWQuZ2V0KCksICJhY3RpdmUiLCAmYWN0aXZl
LCBudWxscHRyKTsKIAogICAgIHNldEFjdGl2ZShhY3RpdmUpOwpAQCAtMTQzLDkgKzE3Nyw2IEBA
IGJvb2wgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6Z2V0VGFnKEdzdFRhZ0xpc3QqIHRhZ3Ms
IGNvbnN0IGdjaGFyKiB0YWdOYW1lLCBTCiAKIHZvaWQgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1l
cjo6bm90aWZ5VHJhY2tPZlRhZ3NDaGFuZ2VkKCkKIHsKLSAgICBpZiAoIW1fcGFkKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBUcmFja1ByaXZhdGVCYXNlQ2xpZW50KiBjbGllbnQgPSBtX293bmVy
LT5jbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0
ZUJhc2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgKaW5kZXggMWJiOWJkYTI4NDUzNTdmMTlk
M2UxYjNlYjAzZDRjYzRlOTJiMTA1ZS4uZDU0ODQ3MmU1YjNjNjQ3ZTdkYmZhMDIyNDEyYzZkMTFh
NWY3ODExYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oCkBA
IC0yMywxMyArMjMsMTMgQEAKICAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgVHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcl9oCi0jZGVmaW5lIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXJfaAorI3ByYWdt
YSBvbmNlCiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShW
SURFT19UUkFDSykKIAogI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJN
YWluVGhyZWFkTm90aWZpZXIuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8d3Rm
L0xvY2suaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDEsNiArNDEs
MTMgQEAgY2xhc3MgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lciB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+VHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcigpOwogCisgICAgZW51bSBUcmFja1R5cGUg
eworICAgICAgICBBdWRpbywKKyAgICAgICAgVmlkZW8sCisgICAgICAgIFRleHQsCisgICAgICAg
IFVua25vd24KKyAgICB9OworCiAgICAgR3N0UGFkKiBwYWQoKSBjb25zdCB7IHJldHVybiBtX3Bh
ZC5nZXQoKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3QoKTsKQEAgLTUxLDcgKzU4
LDkgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1l
cihUcmFja1ByaXZhdGVCYXNlKiBvd25lciwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RQYWQ+KTsK
LQorI2lmIFVTRShHU1RSRUFNRVJfUExBWUJJTjMpCisgICAgVHJhY2tQcml2YXRlQmFzZUdTdHJl
YW1lcihUcmFja1ByaXZhdGVCYXNlKiBvd25lciwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RTdHJl
YW0+KTsKKyNlbmRpZgogICAgIHZvaWQgbm90aWZ5VHJhY2tPZkFjdGl2ZUNoYW5nZWQoKTsKICAg
ICB2b2lkIG5vdGlmeVRyYWNrT2ZUYWdzQ2hhbmdlZCgpOwogCkBAIC02Nyw2ICs3Niw5IEBAIHBy
b3RlY3RlZDoKICAgICBBdG9taWNTdHJpbmcgbV9sYWJlbDsKICAgICBBdG9taWNTdHJpbmcgbV9s
YW5ndWFnZTsKICAgICBHUmVmUHRyPEdzdFBhZD4gbV9wYWQ7CisjaWYgVVNFKEdTVFJFQU1FUl9Q
TEFZQklOMykKKyAgICBHUmVmUHRyPEdzdFN0cmVhbT4gbV9zdHJlYW07CisjZW5kaWYKIAogcHJp
dmF0ZToKICAgICBib29sIGdldExhbmd1YWdlQ29kZShHc3RUYWdMaXN0KiB0YWdzLCBBdG9taWNT
dHJpbmcmIHZhbHVlKTsKQEAgLTg3LDUgKzk5LDMgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYg
RU5BQkxFKFZJREVPX1RSQUNLKQotCi0jZW5kaWYgLy8gVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1l
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRl
eCBhNmY5NGI4MmMwODk4ZWQ4ZjJkYWZjMzgzZGFkZjZmNjQ3NzEyMDJjLi43MWExNDkwNDZkZWVj
ZDAzZTM2NDIyNDJlNThhNWU5YzIyOThlYTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTI5LDMzICsyOSw0OSBAQAogCiAjaW5jbHVkZSAi
VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKIAorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OlZpZGVvVHJhY2tQcml2YXRl
R1N0cmVhbWVyKEdSZWZQdHI8R3N0RWxlbWVudD4gcGxheWJpbiwgZ2ludCBpbmRleCwgR1JlZlB0
cjxHc3RQYWQ+IHBhZCkKK1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpWaWRlb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4gcGxheWVy
LCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFBhZD4gcGFkKQogICAgIDogVHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcih0aGlzLCBpbmRleCwgcGFkKQotICAgICwgbV9wbGF5YmluKHBsYXliaW4pCisg
ICAgLCBtX3BsYXllcihwbGF5ZXIpCiB7CiAgICAgLy8gRklYTUU6IEdldCBhIHJlYWwgSUQgZnJv
bSB0aGUgdGtoZCBhdG9tLgogICAgIG1faWQgPSAiViIgKyBTdHJpbmc6Om51bWJlcihpbmRleCk7
CiAgICAgbm90aWZ5VHJhY2tPZkFjdGl2ZUNoYW5nZWQoKTsKIH0KIAorI2lmIFVTRShHU1RSRUFN
RVJfUExBWUJJTjMpCitWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6VmlkZW9UcmFja1ByaXZh
dGVHU3RyZWFtZXIoV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI+IHBsYXllciwg
Z2ludCBpbmRleCwgR1JlZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSkKKyAgICA6IFRyYWNrUHJpdmF0
ZUJhc2VHU3RyZWFtZXIodGhpcywgaW5kZXgsIHN0cmVhbSkKKyAgICAsIG1fcGxheWVyKHBsYXll
cikKK3sKKyAgICBtX2lkID0gZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQoKSk7
CisgICAgbm90aWZ5VHJhY2tPZkFjdGl2ZUNoYW5nZWQoKTsKK30KKyNlbmRpZgorCiB2b2lkIFZp
ZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpkaXNjb25uZWN0KCkKIHsKLSAgICBtX3BsYXliaW4u
Y2xlYXIoKTsKKyAgICBtX3BsYXllciA9IG51bGxwdHI7CiAgICAgVHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lcjo6ZGlzY29ubmVjdCgpOwogfQogCit2b2lkIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVh
bWVyOjptYXJrQXNBY3RpdmUoKQoreworICAgIFZpZGVvVHJhY2tQcml2YXRlOjpzZXRTZWxlY3Rl
ZCh0cnVlKTsKK30KKwogdm9pZCBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6c2V0U2VsZWN0
ZWQoYm9vbCBzZWxlY3RlZCkKIHsKICAgICBpZiAoc2VsZWN0ZWQgPT0gdGhpcy0+c2VsZWN0ZWQo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIFZpZGVvVHJhY2tQcml2YXRlOjpzZXRTZWxlY3RlZChz
ZWxlY3RlZCk7CiAKLSAgICBpZiAoc2VsZWN0ZWQgJiYgbV9wbGF5YmluKQotICAgICAgICBnX29i
amVjdF9zZXQobV9wbGF5YmluLmdldCgpLCAiY3VycmVudC12aWRlbyIsIG1faW5kZXgsIG51bGxw
dHIpOworICAgIGlmIChzZWxlY3RlZCAmJiBtX3BsYXllcikKKyAgICAgICAgbV9wbGF5ZXItPmVu
YWJsZVRyYWNrKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VmlkZW8sIG1f
aW5kZXgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRl
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDVlYTc2ZTNmZWExM2RjODdhMmNhYzU3OWIz
YzhlNjI2MmNlMzc4ZmUuLmJiMTlkMzE0NzIwYTQ2NGE1ZjcwOGRjM2Q1ZTNkNzk3YzI1ZDE2NmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9W
aWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0yMyw4
ICsyMyw3IEBACiAgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVh
bWVyX2gKLSNkZWZpbmUgVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXJfaAorI3ByYWdtYSBvbmNl
CiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShWSURFT19U
UkFDSykKIApAQCAtMzIsMTcgKzMxLDI4IEBACiAjaW5jbHVkZSAiVHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lci5oIgogI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlLmgiCiAKKyNpbmNsdWRlIDxn
c3QvZ3N0Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOwogCiBjbGFzcyBWaWRlb1RyYWNr
UHJpdmF0ZUdTdHJlYW1lciBmaW5hbCA6IHB1YmxpYyBWaWRlb1RyYWNrUHJpdmF0ZSwgcHVibGlj
IFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Vmlk
ZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGNyZWF0ZShHUmVmUHRyPEdzdEVsZW1lbnQ+IHBsYXli
aW4sIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0UGFkPiBwYWQpCisgICAgc3RhdGljIFJlZjxWaWRl
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gY3JlYXRlKFdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyPiBwbGF5ZXIsIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0UGFkPiBwYWQpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
cihwbGF5ZXIsIGluZGV4LCBwYWQpKTsKKyAgICB9CisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklO
MykKKyAgICBzdGF0aWMgUmVmPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiBjcmVhdGUoV2Vh
a1B0cjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI+IHBsYXllciwgZ2ludCBpbmRleCwgR1Jl
ZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyKHBsYXliaW4sIGluZGV4LCBwYWQpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIocGxh
eWVyLCBpbmRleCwgc3RyZWFtKSk7CiAgICAgfQorI2VuZGlmCiAKICAgICB2b2lkIGRpc2Nvbm5l
Y3QoKSBvdmVycmlkZTsKIAorICAgIHZvaWQgbWFya0FzQWN0aXZlKCk7CiAgICAgdm9pZCBzZXRT
ZWxlY3RlZChib29sKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEFjdGl2ZShib29sIGVuYWJsZWQp
IG92ZXJyaWRlIHsgc2V0U2VsZWN0ZWQoZW5hYmxlZCk7IH0KIApAQCAtNTMsMTQgKzYzLDE0IEBA
IHB1YmxpYzoKICAgICBBdG9taWNTdHJpbmcgbGFuZ3VhZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2xhbmd1YWdlOyB9CiAKIHByaXZhdGU6Ci0gICAgVmlkZW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXIoR1JlZlB0cjxHc3RFbGVtZW50PiBwbGF5YmluLCBnaW50IGluZGV4LCBHUmVmUHRyPEdz
dFBhZD4pOwotCisgICAgVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIoV2Vha1B0cjxNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI+LCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFBhZD4pOworI2lm
IFVTRShHU1RSRUFNRVJfUExBWUJJTjMpCisgICAgVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIo
V2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI+LCBnaW50IGluZGV4LCBHUmVmUHRy
PEdzdFN0cmVhbT4pOworI2VuZGlmCiAgICAgQXRvbWljU3RyaW5nIG1faWQ7Ci0gICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBtX3BsYXliaW47CisgICAgV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI+IG1fcGxheWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoVklERU9fVFJB
Q0spCi0KLSNlbmRpZiAvLyBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBp
cGVsaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvQXBwZW5kUGlwZWxpbmUuY3BwCmluZGV4IGE1MzAwOWI5MTk0ZmMwNDEyMTcyNjZlZGE2ZTE4
MmY1MmRmNDhmYTMuLjljZDNjZjY0ZDVmMWUyNjM1MWUxYmU3YzdlMmMyZmM2Y2UxM2Y3YWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
QXBwZW5kUGlwZWxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuY3BwCkBAIC0xMDczLDExICsxMDczLDExIEBA
IHZvaWQgQXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rKEdzdFBh
ZCogZGVtdXhlclNyY1BhZCkKICAgICBzd2l0Y2ggKG1fc3RyZWFtVHlwZSkgewogICAgIGNhc2Ug
V2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpBdWRpbzoKICAgICAgICAg
aWYgKG1fcGxheWVyUHJpdmF0ZSkKLSAgICAgICAgICAgIG1fdHJhY2sgPSBXZWJDb3JlOjpBdWRp
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1fcGxheWVyUHJpdmF0ZS0+cGlwZWxpbmUo
KSwgaWQoKSwgc2lua1NpbmtQYWQuZ2V0KCkpOworICAgICAgICAgICAgbV90cmFjayA9IFdlYkNv
cmU6OkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobV9wbGF5ZXJQcml2YXRlLT5j
cmVhdGVXZWFrUHRyKCksIGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlZpZGVv
OgogICAgICAgICBpZiAobV9wbGF5ZXJQcml2YXRlKQotICAgICAgICAgICAgbV90cmFjayA9IFdl
YkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobV9wbGF5ZXJQcml2YXRl
LT5waXBlbGluZSgpLCBpZCgpLCBzaW5rU2lua1BhZC5nZXQoKSk7CisgICAgICAgICAgICBtX3Ry
YWNrID0gV2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShtX3BsYXll
clByaXZhdGUtPmNyZWF0ZVdlYWtQdHIoKSwgaWQoKSwgc2lua1NpbmtQYWQuZ2V0KCkpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJl
YW1lcjo6VGV4dDoKICAgICAgICAgbV90cmFjayA9IFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1By
aXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShpZCgpLCBzaW5rU2lua1BhZC5nZXQoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAK
aW5kZXggOTE4YzQyNzY3Y2NiY2MzYzJjYTg4ODYyZTM5MDY4Y2MxOWNkOWE2Ny4uNDBlYWU5YTFl
MTZlNjdkNzdjMWZhYjAwZWI5NzY3MWFmMjY2ZDQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcApAQCAtNDg2LDEwICs0
ODYsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0U6OmJ1ZmZlcmVkKCkgYwogICAgIHJldHVybiBtX21lZGlhU291cmNl
ID8gbV9tZWRpYVNvdXJjZS0+YnVmZmVyZWQoKSA6IHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1U
aW1lUmFuZ2VzPigpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
c291cmNlQ2hhbmdlZCgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c291
cmNlU2V0dXAoR3N0RWxlbWVudCogc291cmNlRWxlbWVudCkKIHsKLSAgICBtX3NvdXJjZSA9IG51
bGxwdHI7Ci0gICAgZ19vYmplY3RfZ2V0KG1fcGlwZWxpbmUuZ2V0KCksICJzb3VyY2UiLCAmbV9z
b3VyY2Uub3V0UHRyKCksIG51bGxwdHIpOworICAgIG1fc291cmNlID0gc291cmNlRWxlbWVudDsK
IAogICAgIEFTU0VSVChXRUJLSVRfSVNfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5o
CmluZGV4IGUzNWMwNjRiNDBjZmVjYzQ3YzNmMmM2YjNhNmUxY2MxMTMwMTAyNGQuLjE4MWU0MzI5
MWJiNmQwOWNiZDM3N2QzY2MxYTQ3ZmE1Njg0ZGMyODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaApAQCAtNzEsNyArNzEsNyBA
QCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVy
ZWQoKSBjb25zdCBvdmVycmlkZTsKICAgICBNZWRpYVRpbWUgbWF4TWVkaWFUaW1lU2Vla2FibGUo
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgc291cmNlQ2hhbmdlZCgpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc291cmNlU2V0dXAoR3N0RWxlbWVudCopIG92ZXJyaWRlOwogCiAgICAgdm9pZCBz
ZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlKTsKICAgICB2b2lkIHdhaXRGb3JT
ZWVrQ29tcGxldGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVmaW5p
dGlvbnMuY21ha2UgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVmaW5pdGlvbnMuY21ha2UKaW5k
ZXggMDM5MzhjODc3NGU2ZmU3NWExY2VjNjBjZmNjZmNmNjdlZGRiYjQ5Yy4uNjJhNjlkODhjOGU1
YTc5NTgzY2Y1NThjYTkxMWNkOGUyMGZmNzI1YyAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL0dT
dHJlYW1lckRlZmluaXRpb25zLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZWZp
bml0aW9ucy5jbWFrZQpAQCAtNSwzICs1LDQgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX01FRElBX1NPVVJDRSBQUklWQVRFIE9OKQogCiBXRUJLSVRfT1BUSU9OX0RF
RklORShVU0VfR1NUUkVBTUVSX0dMICJXaGV0aGVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBHU3Ry
ZWFtZXIgR0wiIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RFRklORShVU0VfR1NUUkVBTUVS
X01QRUdUUyAiV2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgTVBFRy1UUyIgUFJJVkFURSBP
RkYpCitXRUJLSVRfT1BUSU9OX0RFRklORShVU0VfR1NUUkVBTUVSX1BMQVlCSU4zICJXaGV0aGVy
IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBHU3RyZWFtZXIncyBwbGF5YmluMyBlbGVtZW50IiBQUklW
QVRFIE9GRikKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3YmRjODky
MWJjYTg0NWRmNzNjZmMyMmM5OGFmMGU5OTFjZGM1NWE4Li5mNDI0MzZlOTI5ODQxMzBhNGJlZTcz
YWM4ZWRmMGMyNjFmMDU2MmE2IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTgtMDItMTUgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFu
ZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIFBsYXliaW4zIHN1cHBvcnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjUzMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlL2Nt
YWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlOiBOZXcKKyAgICAgICAgVVNFKEdTVFJFQU1F
Ul9QTEFZQklOMykgZmVhdHVyZS4gVGhpcyBzaG91bGQgYmUgZW5hYmxlZCBvbmx5IGZvcgorICAg
ICAgICB2ZXJ5IHJlY2VudCB2ZXJzaW9ucyBvZiBHU3RyZWFtZXIgKDEuMTQgYXQgbGVhc3QpIGFu
ZCBpcyBvcHRpb25hbCwgZm9yIG5vdy4KKwogMjAxOC0wMi0wOSAgUm9zcyBLaXJzbGluZyAgPHJv
c3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgU2ltcGxpZnkgLmdpdGlnbm9yZSdzIFdl
YktpdExpYnJhcmllcy93aW4gc2VjdGlvbi4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333910</attachid>
            <date>2018-02-15 09:57:07 -0800</date>
            <delta_ts>2018-02-18 23:58:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182530-20180215175705.patch</filename>
            <type>text/plain</type>
            <size>63469</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI4NTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWVhY2JiOWIzN2Q1MTgw
OTkwODhhNjM0ZGU3YjY1MGNkMDAyZjJjMy4uMTM1NjgwYWNkNWNlYzJjNmM1ZTNhNGMzNmRiNGM4
YzJlYTA1NWRhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMSBAQAorMjAxOC0wMi0xNSAgUGhp
bGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1l
cl0gUGxheWJpbjMgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTgyNTMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9wdC1pbiBzdXBwb3J0IGZvciB0aGUg
cGxheWJpbjMgR1N0cmVhbWVyCisgICAgICAgIGVsZW1lbnQuIFRoaXMgbmV3IHBsYXliYWNrIGVs
ZW1lbnQgaXMgc3RpbGwgY29uc2lkZXJlZAorICAgICAgICBleHBlcmltZW50YWwgYnV0IGl0IGNh
biBzdGlsbCBiZSB2ZXJ5IHVzZWZ1bCBmb3IgbWVkaWEgYXNzZXRzCisgICAgICAgIGNvbnRhaW5p
bmcgbXVsdGlwbGUgdHJhY2tzIG9mIHRoZSBzYW1lIHR5cGUuIEluIHN1Y2ggc2NlbmFyaW8KKyAg
ICAgICAgYXVkaW8vdmlkZW8gZGVjb2RlcnMgd291bGQgYmUgY3JlYXRlZCBvbmx5IGZvciB0aGUg
c2VsZWN0ZWQgdHJhY2tzCisgICAgICAgIHdoZXJlYXMgcGxheWJpbjIgY3JlYXRlcyBkZWNvZGVy
IGZvciBlYWNoIHRyYWNrLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcDogVGFrZQorICAgICAgICBhIHdlYWsgcG9p
bnRlciBvZiB0aGUgbWVkaWEgcGxheWVyIGluc3RlYWQgb2YgcGxheWJpbiBhbmQgY2FsbCB0aGUK
KyAgICAgICAgcGxheWVyIHdoZW4gZW5hYmxpbmcgdHJhY2tzLiBBbHNvIHVzZSB0aGUgR3N0U3Ry
ZWFtIEFQSSBpbnN0ZWFkIG9mCisgICAgICAgIGluc3BlY3RpbmcgdGhlIHBhZCB3aGVuIHBsYXli
aW4zIGlzIHVzZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
cjo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9U
cmFja1ByaXZhdGVHU3RyZWFtZXI6OmRpc2Nvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6Om1hcmtBc0FjdGl2ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6c2V0RW5hYmxlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3Bw
OiBHc3RTdHJlYW0gYW5kCisgICAgICAgIEdzdFN0cmVhbUNvbGxlY3Rpb24gc21hcnQgcG9pbnRl
ciBzdXBwb3J0LgorICAgICAgICAoV1RGOjphZG9wdEdSZWYpOgorICAgICAgICAoV1RGOjpyZWZH
UHRyPEdzdFN0cmVhbT4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8R3N0U3RyZWFtPik6Cisg
ICAgICAgIChXVEY6OnJlZkdQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4pOgorICAgICAgICAoV1RG
OjpkZXJlZkdQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwOgor
ICAgICAgICBVc2UgdGhlIEdzdFN0cmVhbSBBUEkgaW5zdGVhZCBvZiBpbnNwZWN0aW5nIHRoZSBw
YWQgd2hlbiBwbGF5YmluMworICAgICAgICBpcyB1c2VkLgorICAgICAgICAoV2ViQ29yZTo6SW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJl
YW1lcik6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
OjpkaXNjb25uZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcik6CisgICAgICAgIG1fe2F1ZGlvLHZpZGVvLHRleHR9VHJhY2tzIGFyZSBu
b3cgaGFzaG1hcHMsIHdoaWNoIGlzIGEgYml0IG1vcmUKKyAgICAgICAgY29udmVuaWVudCB0byB1
c2UgdGhhbiBWZWN0b3JzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp1cGRhdGVUcmFja3MpOiBVcGRhdGUgb3VyCisgICAgICAgIHRyYWNrcyBpbXBsZW1l
bnRhdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBzdHJlYW1zIHN0b3JlZCBpbiB0aGUKKyAgICAgICAg
Y29sbGVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6ZW5hYmxlVHJhY2spOiBBY3RpdmF0ZSB0aGUKKyAgICAgICAgZ2l2ZW4gdHJhY2suIFRoaXMg
bWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgVHJhY2tQcml2YXRlCisgICAgICAgIGltcGxlbWVudGF0
aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5UGxheWVyT2ZWaWRlbyk6CisgICAgICAgIFJlZmFjdG9yZWQgbGVnYWN5IChwbGF5YmluMikg
c3VwcG9ydCBmb3IgdHJhY2sgaGFzaG1hcCBzdG9yYWdlLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXll
ck9mVGV4dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpuZXdUZXh0U2FtcGxlKTogVXNlIHRyYWNrIGhhc2htYXAgc3RvcmFnZS4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZSk6
IFJlYWN0IG9uCisgICAgICAgIHBsYXliaW4zIEdzdFN0cmVhbSBtZXNzYWdlcywgc3RvcmUgdGhl
IGNvbGxlY3Rpb24gcHJvdmlkZWQgYW5kCisgICAgICAgIGFjdGl2YXRlIHRoZSBnaXZlbiBzZWxl
Y3RlZCBzdHJlYW1zIGFjY29yZGluZ2x5LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpwdXJnZUludmFsaWRBdWRpb1RyYWNrcyk6IEludmFsaWRhdGUgdHJh
Y2tzIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZFZpZGVvVHJhY2tzKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZFRleHRUcmFj
a3MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c291cmNlU2V0dXBDYWxsYmFjayk6CisgICAgICAgIFJlZmFjdG9yaW5nLCB1c2Ugc291cmNl
LXNldHVwIHNpZ25hbCBpbnN0ZWFkIG9mIHRoZSBzb3VyY2UKKyAgICAgICAgcHJvcGVydHkgd2hp
Y2ggaXMgbm90IHN1cHBvcnRlZCBpbiBwbGF5YmluMy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJhY2sp
OgorICAgICAgICBQcm9tb3RlZCBsb2dnaW5nIG1lc3NhZ2VzLCBHU1RfVFJBQ0Ugc2hvdWxkIGJl
IHVzZWQgZm9yIHZlcnkKKyAgICAgICAgZnJlcXVlbnQgYW5kIGxlc3MgaW50ZXJlc3RpbmcgbWVz
c2FnZXMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRv
d25sb2FkQnVmZmVyRmlsZUNyZWF0ZWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VTZXR1cCk6IENhbGxlZCBieSB0
aGUgc291cmNlLXNldHVwIHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXREb3dubG9hZEJ1ZmZlcmluZyk6IERlYnVnZ2luZyBt
ZXNzYWdlIGFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzZXRQcmVsb2FkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4pOiBDcmVhdGUgYQorICAgICAgICBwbGF5
YmluMyBlbGVtZW50IGlmIFVTRShHU1RSRUFNRVJfUExBWUJJTjMpIHdhcyBlbmFibGVkIGFuZAor
ICAgICAgICBjb25uZWN0IHRvIHBsYXliaW4yIHNpZ25hbHMgb3RoZXJ3aXNlLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRl
V2Vha1B0cik6IFByb21vdGVkIHRvIHB1YmxpYy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oOgorICAgICAgICBO
ZXcgU3RyZWFtQ29sbGVjdGlvbkNoYW5nZWQgbm90aWZpY2F0aW9uIHR5cGUsIHVzZWQgdGhlIHN1
Yi1jbGFzcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2
YXRlQmFzZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNl
R1N0cmVhbWVyOjpUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKTogU3VwcG9ydCBmb3IgR3N0U3Ry
ZWFtIEFQSS4KKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OmRp
c2Nvbm5lY3QpOiBDbGVhciBHc3RTdHJlYW0gdG9vLgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lcjo6dGFnc0NoYW5nZWQpOiBHZXQgdGFncyBmcm9tIEdzdFN0cmVh
bS4KKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRy
YWNrT2ZBY3RpdmVDaGFuZ2VkKTogTm8gbmVlZCB0byBjaGVjayBtX3BhZCB0d2ljZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZUYWdz
Q2hhbmdlZCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9U
cmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcDogVGFrZQorICAgICAgICBh
IHdlYWsgcG9pbnRlciBvZiB0aGUgbWVkaWEgcGxheWVyIGluc3RlYWQgb2YgcGxheWJpbiBhbmQg
Y2FsbCB0aGUKKyAgICAgICAgcGxheWVyIHdoZW4gZW5hYmxpbmcgdHJhY2tzLiBBbHNvIHVzZSB0
aGUgR3N0U3RyZWFtIEFQSSBpbnN0ZWFkIG9mCisgICAgICAgIGluc3BlY3RpbmcgdGhlIHBhZCB3
aGVuIHBsYXliaW4zIGlzIHVzZWQuCisgICAgICAgIChXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lcjo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmRpc2Nvbm5lY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6Om1hcmtBc0FjdGl2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6c2V0U2VsZWN0ZWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJl
YW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5k
UGlwZWxpbmUuY3BwOiBQYXNzIHBsYXllciBwb2ludGVyIHRvIHRyYWNrIGNvbnN0cnVjdG9yLgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9B
cHBzaW5rKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHA6IFNvdXJjZS1zZXR1cCBzaWduYWwgaGFuZGxl
ci4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c291
cmNlU2V0dXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmg6CisKIDIwMTgtMDItMTUgIE1hdHQgTGV3aXMg
IDxqbGV3aXMzQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCBy
MjI4NDk1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9BdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAK
aW5kZXggZmMyZDY3NDcxOWEzNTYyOWNjYWJjM2VjN2YwNmQxMDljMWMwYjE0Ni4uYTVhMGQ2OGVh
ZjBiMmFjYmIzMDY1YWVhYmM5Mzg4ODhlYjUwYzNjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVk
aW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0yOSwzMyArMjksNDkgQEAKIAogI2luY2x1
ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCiAKKyNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpBdWRpb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcihHUmVmUHRyPEdzdEVsZW1lbnQ+IHBsYXliaW4sIGdpbnQgaW5kZXgsIEdS
ZWZQdHI8R3N0UGFkPiBwYWQpCitBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6QXVkaW9UcmFj
a1ByaXZhdGVHU3RyZWFtZXIoV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI+IHBs
YXllciwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RQYWQ+IHBhZCkKICAgICA6IFRyYWNrUHJpdmF0
ZUJhc2VHU3RyZWFtZXIodGhpcywgaW5kZXgsIHBhZCkKLSAgICAsIG1fcGxheWJpbihwbGF5Ymlu
KQorICAgICwgbV9wbGF5ZXIocGxheWVyKQogewogICAgIC8vIEZJWE1FOiBHZXQgYSByZWFsIElE
IGZyb20gdGhlIHRraGQgYXRvbS4KICAgICBtX2lkID0gIkEiICsgU3RyaW5nOjpudW1iZXIoaW5k
ZXgpOwogICAgIG5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2VkKCk7CiB9CiAKKyNpZiBVU0UoR1NU
UkVBTUVSX1BMQVlCSU4zKQorQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OkF1ZGlvVHJhY2tQ
cml2YXRlR1N0cmVhbWVyKFdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyPiBwbGF5
ZXIsIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW0pCisgICAgOiBUcmFja1By
aXZhdGVCYXNlR1N0cmVhbWVyKHRoaXMsIGluZGV4LCBzdHJlYW0pCisgICAgLCBtX3BsYXllcihw
bGF5ZXIpCit7CisgICAgbV9pZCA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0
KCkpOworICAgIG5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2VkKCk7Cit9CisjZW5kaWYKKwogdm9p
ZCBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6ZGlzY29ubmVjdCgpCiB7Ci0gICAgbV9wbGF5
YmluLmNsZWFyKCk7CisgICAgbV9wbGF5ZXIgPSBudWxscHRyOwogICAgIFRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXI6OmRpc2Nvbm5lY3QoKTsKIH0KIAordm9pZCBBdWRpb1RyYWNrUHJpdmF0ZUdT
dHJlYW1lcjo6bWFya0FzQWN0aXZlKCkKK3sKKyAgICBBdWRpb1RyYWNrUHJpdmF0ZTo6c2V0RW5h
YmxlZCh0cnVlKTsKK30KKwogdm9pZCBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6c2V0RW5h
YmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKGVuYWJsZWQgPT0gdGhpcy0+ZW5hYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAgICAgQXVkaW9UcmFja1ByaXZhdGU6OnNldEVuYWJsZWQoZW5h
YmxlZCk7CiAKLSAgICBpZiAoZW5hYmxlZCAmJiBtX3BsYXliaW4pCi0gICAgICAgIGdfb2JqZWN0
X3NldChtX3BsYXliaW4uZ2V0KCksICJjdXJyZW50LWF1ZGlvIiwgbV9pbmRleCwgbnVsbHB0cik7
CisgICAgaWYgKGVuYWJsZWQgJiYgbV9wbGF5ZXIpCisgICAgICAgIG1fcGxheWVyLT5lbmFibGVU
cmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OkF1ZGlvLCBtX2luZGV4
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFj
a1ByaXZhdGVHU3RyZWFtZXIuaAppbmRleCA0NzJhYTdkZGRkNWYzNDk0ZWVjMzQ5NmI0OGI3M2Zi
ZjEwMmRhYzNkLi40N2E4YTllZTc4YTg3NzQ1MTZiM2EwMjc4N2FkZDYxYmUzNDI1ZTczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9U
cmFja1ByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaApAQCAtMjMsMjcgKzIz
LDM3IEBACiAgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVy
X2gKLSNkZWZpbmUgQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXJfaAorI3ByYWdtYSBvbmNlCiAK
ICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShWSURFT19UUkFD
SykKIAogI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlLmgiCiAjaW5jbHVkZSAiR1JlZlB0ckdT
dHJlYW1lci5oIgogI2luY2x1ZGUgIlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOwogCiBjbGFzcyBBdWRp
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lciBmaW5hbCA6IHB1YmxpYyBBdWRpb1RyYWNrUHJpdmF0ZSwg
cHVibGljIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWZQdHI8QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGNyZWF0ZShHUmVmUHRyPEdzdEVsZW1l
bnQ+IHBsYXliaW4sIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0UGFkPiBwYWQpCisgICAgc3RhdGlj
IFJlZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gY3JlYXRlKFdlYWtQdHI8TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyPiwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RQYWQ+IHBhZCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEF1ZGlvVHJhY2tQcml2YXRlR1N0
cmVhbWVyKHBsYXliaW4sIGluZGV4LCBwYWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIocGxheWVyLCBpbmRleCwgcGFkKSk7CiAgICAg
fQogCisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklOMykKKyAgICBzdGF0aWMgUmVmUHRyPEF1ZGlv
VHJhY2tQcml2YXRlR1N0cmVhbWVyPiBjcmVhdGUoV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI+LCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFtKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIo
cGxheWVyLCBpbmRleCwgc3RyZWFtKSk7CisgICAgfQorI2VuZGlmCisKICAgICB2b2lkIGRpc2Nv
bm5lY3QoKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0RW5hYmxlZChib29sKSBvdmVycmlkZTsK
KyAgICB2b2lkIG1hcmtBc0FjdGl2ZSgpOwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wgZW5hYmxl
ZCkgb3ZlcnJpZGUgeyBzZXRFbmFibGVkKGVuYWJsZWQpOyB9CiAKICAgICBpbnQgdHJhY2tJbmRl
eCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faW5kZXg7IH0KQEAgLTUzLDE0ICs2MywxNSBA
QCBwdWJsaWM6CiAgICAgQXRvbWljU3RyaW5nIGxhbmd1YWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9sYW5ndWFnZTsgfQogCiBwcml2YXRlOgotICAgIEF1ZGlvVHJhY2tQcml2YXRlR1N0
cmVhbWVyKEdSZWZQdHI8R3N0RWxlbWVudD4gcGxheWJpbiwgZ2ludCBpbmRleCwgR1JlZlB0cjxH
c3RQYWQ+KTsKKyAgICBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcj4sIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0UGFkPik7CisjaWYg
VVNFKEdTVFJFQU1FUl9QTEFZQklOMykKKyAgICBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihX
ZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4sIGdpbnQgaW5kZXgsIEdSZWZQdHI8
R3N0U3RyZWFtPik7CisjZW5kaWYKIAogICAgIEF0b21pY1N0cmluZyBtX2lkOwotICAgIEdSZWZQ
dHI8R3N0RWxlbWVudD4gbV9wbGF5YmluOworICAgIFdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyPiBtX3BsYXllcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKFZJREVPX1RS
QUNLKQotCi0jZW5kaWYgLy8gQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXJfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3Ry
ZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dS
ZWZQdHJHU3RyZWFtZXIuY3BwCmluZGV4IGE3NjU0Y2M0NmM2MDgxODc1MWMzYWU4ODhjMzdkYmE2
Mzk3ZTViZjYuLmVlYWVkOGZmNTEyNjBkZjlkMGYwMWM1OGIzODI4NjU5ZDFkNmVjYmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRy
R1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKQEAgLTM1Myw2ICszNTMsNDggQEAgdGVtcGxhdGUg
PD4gdm9pZCBkZXJlZkdQdHI8R3N0UXVlcnk+KEdzdFF1ZXJ5KiBwdHIpCiAgICAgICAgIGdzdF9x
dWVyeV91bnJlZihwdHIpOwogfQogCisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklOMykKK3RlbXBs
YXRlIDw+IEdSZWZQdHI8R3N0U3RyZWFtPiBhZG9wdEdSZWYoR3N0U3RyZWFtKiBwdHIpCit7Cisg
ICAgQVNTRVJUKCFwdHIgfHwgIWdfb2JqZWN0X2lzX2Zsb2F0aW5nKHB0cikpOworICAgIHJldHVy
biBHUmVmUHRyPEdzdFN0cmVhbT4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8
PiBHc3RTdHJlYW0qIHJlZkdQdHI8R3N0U3RyZWFtPihHc3RTdHJlYW0qIHB0cikKK3sKKyAgICBp
ZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZl9zaW5rKEdTVF9PQkpFQ1RfQ0FTVChwdHIp
KTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdz
dFN0cmVhbT4oR3N0U3RyZWFtKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29i
amVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFN0cmVhbUNvbGxl
Y3Rpb24+IGFkb3B0R1JlZihHc3RTdHJlYW1Db2xsZWN0aW9uKiBwdHIpCit7CisgICAgQVNTRVJU
KCFwdHIgfHwgIWdfb2JqZWN0X2lzX2Zsb2F0aW5nKHB0cikpOworICAgIHJldHVybiBHUmVmUHRy
PEdzdFN0cmVhbUNvbGxlY3Rpb24+KHB0ciwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVtcGxhdGUg
PD4gR3N0U3RyZWFtQ29sbGVjdGlvbiogcmVmR1B0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPihHc3RT
dHJlYW1Db2xsZWN0aW9uKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVj
dF9yZWZfc2luayhHU1RfT0JKRUNUX0NBU1QocHRyKSk7CisKKyAgICByZXR1cm4gcHRyOworfQor
Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPihHc3RTdHJl
YW1Db2xsZWN0aW9uKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91
bnJlZihwdHIpOworfQorI2VuZGlmCisKIHRlbXBsYXRlIDw+IEdSZWZQdHI8V2ViS2l0VmlkZW9T
aW5rPiBhZG9wdEdSZWYoV2ViS2l0VmlkZW9TaW5rKiBwdHIpCiB7CiAgICAgQVNTRVJUKCFwdHIg
fHwgIWdfb2JqZWN0X2lzX2Zsb2F0aW5nKHB0cikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmgK
aW5kZXggYTM4OGNhMzZjNzU4MDE0YTZmYTY2MzIwYWMyMzMyYmJkZDEyYjRhMy4uODNiZmRlYzEy
ODUxNjczMzc3NDU1MGNlNDUyYWRjMGJmYTU4OGI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1l
ci5oCkBAIC0xNyw4ICsxNyw4IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAg
Ki8KIAotI2lmbmRlZiBHUmVmUHRyR1N0cmVhbWVyX2gKLSNkZWZpbmUgR1JlZlB0ckdTdHJlYW1l
cl9oCisjcHJhZ21hIG9uY2UKKwogI2lmIFVTRShHU1RSRUFNRVIpCiAKICNpbmNsdWRlIDx3dGYv
Z2xpYi9HUmVmUHRyLmg+CkBAIC00Myw2ICs0MywxMSBAQCB0eXBlZGVmIHN0cnVjdCBfR3N0UXVl
cnkgR3N0UXVlcnk7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rIFdlYktpdFZpZGVv
U2luazsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJTcmMgV2ViS2l0V2ViU3JjOwogCisjaWYg
VVNFKEdTVFJFQU1FUl9QTEFZQklOMykKK3R5cGVkZWYgc3RydWN0IF9Hc3RTdHJlYW0gR3N0U3Ry
ZWFtOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFN0cmVhbUNvbGxlY3Rpb24gR3N0U3RyZWFtQ29sbGVj
dGlvbjsKKyNlbmRpZgorCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKIHR5cGVkZWYgc3RydWN0IF9H
c3RHTERpc3BsYXkgR3N0R0xEaXNwbGF5OwogdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMQ29udGV4dCBH
c3RHTENvbnRleHQ7CkBAIC0xMjcsNiArMTMyLDE2IEBAIEdSZWZQdHI8V2ViS2l0V2ViU3JjPiBl
bnN1cmVHUmVmKFdlYktpdFdlYlNyYyogcHRyKTsKIHRlbXBsYXRlPD4gV2ViS2l0V2ViU3JjKiBy
ZWZHUHRyPFdlYktpdFdlYlNyYz4oV2ViS2l0V2ViU3JjKiBwdHIpOwogdGVtcGxhdGU8PiB2b2lk
IGRlcmVmR1B0cjxXZWJLaXRXZWJTcmM+KFdlYktpdFdlYlNyYyogcHRyKTsKIAorI2lmIFVTRShH
U1RSRUFNRVJfUExBWUJJTjMpCit0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0U3RyZWFtPiBhZG9wdEdS
ZWYoR3N0U3RyZWFtKik7Cit0ZW1wbGF0ZTw+IEdzdFN0cmVhbSogcmVmR1B0cjxHc3RTdHJlYW0+
KEdzdFN0cmVhbSopOwordGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxHc3RTdHJlYW0+KEdzdFN0
cmVhbSopOworCit0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gYWRvcHRH
UmVmKEdzdFN0cmVhbUNvbGxlY3Rpb24qKTsKK3RlbXBsYXRlPD4gR3N0U3RyZWFtQ29sbGVjdGlv
biogcmVmR1B0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPihHc3RTdHJlYW1Db2xsZWN0aW9uKik7Cit0
ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+KEdzdFN0cmVhbUNv
bGxlY3Rpb24qKTsKKyNlbmRpZgorCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKIHRlbXBsYXRlPD4g
R1JlZlB0cjxHc3RHTERpc3BsYXk+IGFkb3B0R1JlZihHc3RHTERpc3BsYXkqIHB0cik7CiB0ZW1w
bGF0ZTw+IEdzdEdMRGlzcGxheSogcmVmR1B0cjxHc3RHTERpc3BsYXk+KEdzdEdMRGlzcGxheSog
cHRyKTsKQEAgLTE0MCw1ICsxNTUsMyBAQCB0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPEdzdEdM
Q29udGV4dD4oR3N0R0xDb250ZXh0KiBwdHIpOwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRp
ZiAvLyBVU0UoR1NUUkVBTUVSKQotCi0jZW5kaWYgLy8gR1JlZlB0ckdTdHJlYW1lcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5k
ZXggMjRlNThmMTYwNzQ4ZmRkOWJlMTRiYTg3NjIzYzIzMTA4M2NhNjlmOS4uNjgyZmZjMzg3M2Qx
NzliYmZhMTE1ZjE4NDY4ZTQyMDBjMmM1NmJmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFt
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9J
bmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNTcsMTIgKzU3LDE5IEBAIElu
YmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3Ry
ZWFtZXIoZ2ludCBpbmRleCwgR1JlCiAgICAgbm90aWZ5VHJhY2tPZlN0cmVhbUNoYW5nZWQoKTsK
IH0KIAotdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpkaXNjb25uZWN0KCkK
KyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKQorSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJl
YW1lcjo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcihnaW50IGluZGV4LCBHUmVmUHRy
PEdzdFN0cmVhbT4gc3RyZWFtKQorICAgIDogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZShXZWJWVFQp
LCBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKHRoaXMsIGluZGV4LCBzdHJlYW0pCiB7Ci0gICAg
aWYgKCFtX3BhZCkKLSAgICAgICAgcmV0dXJuOworICAgIG1fc3RyZWFtSWQgPSBnc3Rfc3RyZWFt
X2dldF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKTsKKyAgICBHU1RfSU5GTygiVHJhY2sgJWQgZ290
IHN0cmVhbSBzdGFydCBmb3Igc3RyZWFtICVzLiIsIG1faW5kZXgsIG1fc3RyZWFtSWQudXRmOCgp
LmRhdGEoKSk7Cit9CisjZW5kaWYKIAotICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlKG1fcGFkLmdl
dCgpLCBtX2V2ZW50UHJvYmUpOwordm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
OjpkaXNjb25uZWN0KCkKK3sKKyAgICBpZiAobV9wYWQpCisgICAgICAgIGdzdF9wYWRfcmVtb3Zl
X3Byb2JlKG1fcGFkLmdldCgpLCBtX2V2ZW50UHJvYmUpOwogCiAgICAgVHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcjo6ZGlzY29ubmVjdCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFt
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRU
ZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggNmE5MDc0NGU1OTA5MDE5MzkwZWFiN2U3
ZThkNjk5ODhhZTQxMTZiZi4uMzI0YTI3MDhhYmZjZDBjNDhhNGFhNGNkZWQ0Njc0MDZhZTVmYmQx
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1l
ci5oCkBAIC0yMywyMCArMjMsMTkgQEAKICAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcl9oCi0jZGVmaW5lIEluYmFuZFRleHRUcmFja1ByaXZhdGVH
U3RyZWFtZXJfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RS
RUFNRVIpICYmIEVOQUJMRShWSURFT19UUkFDSykKIAogI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFt
ZXIuaCIKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmgiCiAjaW5jbHVkZSAiVHJh
Y2tQcml2YXRlQmFzZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRl
IDx3dGYvTG9jay5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTYW1wbGUgR3N0U2FtcGxlOwog
CiBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyIDogcHVibGljIEluYmFuZFRl
eHRUcmFja1ByaXZhdGUsIHB1YmxpYyBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyIHsKIHB1Ymxp
YzoKQEAgLTQ1LDYgKzQ0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcihpbmRleCwgcGFkKSk7CiAgICAgfQog
CisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklOMykKKyAgICBzdGF0aWMgUmVmPEluYmFuZFRleHRU
cmFja1ByaXZhdGVHU3RyZWFtZXI+IGNyZWF0ZShnaW50IGluZGV4LCBHUmVmUHRyPEdzdFN0cmVh
bT4gc3RyZWFtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcihpbmRleCwgc3RyZWFtKSk7CisgICAgfQorI2VuZGlmCisK
ICAgICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsKIAogICAgIEF0b21pY1N0cmluZyBsYWJl
bCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fbGFiZWw7IH0KQEAgLTU3LDYgKzYzLDkgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIo
Z2ludCBpbmRleCwgR1JlZlB0cjxHc3RQYWQ+KTsKKyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4z
KQorICAgIEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIoZ2ludCBpbmRleCwgR1JlZlB0
cjxHc3RTdHJlYW0+KTsKKyNlbmRpZgogCiAgICAgdm9pZCBzdHJlYW1DaGFuZ2VkKCk7CiAKQEAg
LTY0LDcgKzczLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeVRyYWNrT2ZTdHJlYW1DaGFu
Z2VkKCk7CiAKICAgICBndWxvbmcgbV9ldmVudFByb2JlOwotICAgIFZlY3RvcjxHUmVmUHRyPEdz
dFNhbXBsZT4gPiBtX3BlbmRpbmdTYW1wbGVzOworICAgIFZlY3RvcjxHUmVmUHRyPEdzdFNhbXBs
ZT4+IG1fcGVuZGluZ1NhbXBsZXM7CiAgICAgU3RyaW5nIG1fc3RyZWFtSWQ7CiAgICAgTG9jayBt
X3NhbXBsZU11dGV4OwogfTsKQEAgLTcyLDUgKzgxLDMgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikg
JiYgRU5BQkxFKFZJREVPX1RSQUNLKQotCi0jZW5kaWYgLy8gSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUdTdHJlYW1lcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuY3BwCmluZGV4IGU0ZDdiMWYzMjE3OTE3Njg4ZThmNjQwZDNhZmU1MjI1ZDM1MWViMDAuLjgw
YzA1M2E2Y2YyYjNhNmZjMjJmM2U3MTIzYThiMzlkNWIwZjJmMDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0xNjYsMTQgKzE2NiwxNCBA
QCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cihNZWRpYVBsYXllciogcGxheWVyKQogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKCkKIHsKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2F1ZGlvVHJhY2tzLnNpemUoKTsgKytpKQotICAg
ICAgICBtX2F1ZGlvVHJhY2tzW2ldLT5kaXNjb25uZWN0KCk7CisgICAgZm9yIChhdXRvJiB0cmFj
ayA6IG1fYXVkaW9UcmFja3MudmFsdWVzKCkpCisgICAgICAgIHRyYWNrLT5kaXNjb25uZWN0KCk7
CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGV4dFRyYWNrcy5zaXplKCk7ICsraSkK
LSAgICAgICAgbV90ZXh0VHJhY2tzW2ldLT5kaXNjb25uZWN0KCk7CisgICAgZm9yIChhdXRvJiB0
cmFjayA6IG1fdGV4dFRyYWNrcy52YWx1ZXMoKSkKKyAgICAgICAgdHJhY2stPmRpc2Nvbm5lY3Qo
KTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92aWRlb1RyYWNrcy5zaXplKCk7ICsr
aSkKLSAgICAgICAgbV92aWRlb1RyYWNrc1tpXS0+ZGlzY29ubmVjdCgpOworICAgIGZvciAoYXV0
byYgdHJhY2sgOiBtX3ZpZGVvVHJhY2tzLnZhbHVlcygpKQorICAgICAgICB0cmFjay0+ZGlzY29u
bmVjdCgpOwogI2VuZGlmCiAgICAgaWYgKG1fZmlsbFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAg
IG1fZmlsbFRpbWVyLnN0b3AoKTsKQEAgLTYxMiw2ICs2MTIsMTYzIEBAIGJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpzZWVraW5nKCkgY29uc3QKICAgICByZXR1cm4gbV9zZWVraW5n
OwogfQogCisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklOMykKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFja3MoKQoreworICAgIEFTU0VSVCghbV9pc0xlZ2FjeVBs
YXliaW4pOworCisgICAgYm9vbCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFTb3VyY2UoKTsKKyAg
ICB1bnNpZ25lZCBsZW5ndGggPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3NpemUobV9zdHJl
YW1Db2xsZWN0aW9uLmdldCgpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWxpZEF1ZGlvU3RyZWFt
czsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWxpZFZpZGVvU3RyZWFtczsKKyAgICBWZWN0b3I8U3Ry
aW5nPiB2YWxpZFRleHRTdHJlYW1zOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgeworICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFtID0gZ3N0X3N0cmVh
bV9jb2xsZWN0aW9uX2dldF9zdHJlYW0obV9zdHJlYW1Db2xsZWN0aW9uLmdldCgpLCBpKTsKKyAg
ICAgICAgU3RyaW5nIHN0cmVhbUlkKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0
KCkpKTsKKyAgICAgICAgR3N0U3RyZWFtVHlwZSB0eXBlID0gZ3N0X3N0cmVhbV9nZXRfc3RyZWFt
X3R5cGUoc3RyZWFtLmdldCgpKTsKKyAgICAgICAgR1NUX0RFQlVHKCJJbnNwZWN0aW5nICVzIHRy
YWNrIHdpdGggSUQgJXMiLCBnc3Rfc3RyZWFtX3R5cGVfZ2V0X25hbWUodHlwZSksIHN0cmVhbUlk
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9BVURJ
TykgeworICAgICAgICAgICAgdmFsaWRBdWRpb1N0cmVhbXMuYXBwZW5kKHN0cmVhbUlkKTsKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgICAgICAgICBpZiAoIXVzZU1lZGlhU291cmNlKSB7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9jYWxJbmRleCA9IGkgLSB2YWxpZFZpZGVvU3Ry
ZWFtcy5zaXplKCkgLSB2YWxpZFRleHRTdHJlYW1zLnNpemUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAobG9jYWxJbmRleCA8IG1fYXVkaW9UcmFja3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2F1ZGlvVHJhY2tzLmNvbnRhaW5zKHN0cmVhbUlkKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IFJlZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBBdWRpb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKGNyZWF0ZVdlYWtQdHIoKSwgaSwgc3RyZWFtKTsKKyAgICAg
ICAgICAgICAgICBtX2F1ZGlvVHJhY2tzLmFkZCh0cmFjay0+aWQoKSwgdHJhY2spOworICAgICAg
ICAgICAgICAgIG1fcGxheWVyLT5hZGRBdWRpb1RyYWNrKCp0cmFjayk7CisgICAgICAgICAgICB9
CisjZW5kaWYKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX1ZJREVP
KSB7CisgICAgICAgICAgICB2YWxpZFZpZGVvU3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOworI2lm
IEVOQUJMRShWSURFT19UUkFDSykKKyAgICAgICAgICAgIGlmICghdXNlTWVkaWFTb3VyY2UpIHsK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb2NhbEluZGV4ID0gaSAtIHZhbGlkQXVkaW9TdHJl
YW1zLnNpemUoKSAtIHZhbGlkVGV4dFN0cmVhbXMuc2l6ZSgpOworICAgICAgICAgICAgICAgIGlm
IChsb2NhbEluZGV4IDwgbV92aWRlb1RyYWNrcy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fdmlkZW9UcmFja3MuY29udGFpbnMoc3RyZWFtSWQpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
UmVmUHRyPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IFZpZGVvVHJhY2tQcml2
YXRlR1N0cmVhbWVyOjpjcmVhdGUoY3JlYXRlV2Vha1B0cigpLCBpLCBzdHJlYW0pOworICAgICAg
ICAgICAgICAgIG1fdmlkZW9UcmFja3MuYWRkKHRyYWNrLT5pZCgpLCB0cmFjayk7CisgICAgICAg
ICAgICAgICAgbV9wbGF5ZXItPmFkZFZpZGVvVHJhY2soKnRyYWNrKTsKKyAgICAgICAgICAgIH0K
KyNlbmRpZgorICAgICAgICB9IGVsc2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVEVYVCkg
eworICAgICAgICAgICAgdmFsaWRUZXh0U3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOworI2lmIEVO
QUJMRShWSURFT19UUkFDSykKKyAgICAgICAgICAgIGlmICghdXNlTWVkaWFTb3VyY2UpIHsKKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsb2NhbEluZGV4ID0gaSAtIHZhbGlkVmlkZW9TdHJlYW1z
LnNpemUoKSAtIHZhbGlkQXVkaW9TdHJlYW1zLnNpemUoKTsKKyAgICAgICAgICAgICAgICBpZiAo
bG9jYWxJbmRleCA8IG1fdGV4dFRyYWNrcy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1fdGV4dFRyYWNrcy5jb250YWlucyhzdHJlYW1JZCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBSZWZQ
dHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobG9jYWxJbmRleCwgc3RyZWFtKTsKKyAgICAgICAg
ICAgICAgICBtX3RleHRUcmFja3MuYWRkKHN0cmVhbUlkLCB0cmFjayk7CisgICAgICAgICAgICAg
ICAgbV9wbGF5ZXItPmFkZFRleHRUcmFjaygqdHJhY2spOworICAgICAgICAgICAgfQorI2VuZGlm
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVua25vd24gdHJhY2sg
dHlwZSBmb3VuZCBmb3Igc3RyZWFtICVzIiwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7CisgICAg
fQorCisgICAgR1NUX0lORk8oIk1lZGlhIGhhcyAldSB2aWRlbyB0cmFja3MsICV1IGF1ZGlvIHRy
YWNrcyBhbmQgJXUgdGV4dCB0cmFja3MiLCB2YWxpZFZpZGVvU3RyZWFtcy5zaXplKCksCisgICAg
ICAgIHZhbGlkQXVkaW9TdHJlYW1zLnNpemUoKSwgdmFsaWRUZXh0U3RyZWFtcy5zaXplKCkpOwor
CisgICAgYm9vbCBvbGRIYXNBdWRpbyA9IG1faGFzQXVkaW87CisgICAgYm9vbCBvbGRIYXNWaWRl
byA9IG1faGFzVmlkZW87CisgICAgbV9oYXNBdWRpbyA9ICF2YWxpZEF1ZGlvU3RyZWFtcy5pc0Vt
cHR5KCk7CisgICAgbV9oYXNWaWRlbyA9ICF2YWxpZFZpZGVvU3RyZWFtcy5pc0VtcHR5KCk7Cisg
ICAgaWYgKChvbGRIYXNWaWRlbyAhPSBtX2hhc1ZpZGVvKSB8fCAob2xkSGFzQXVkaW8gIT0gbV9o
YXNBdWRpbykpCisgICAgICAgIG1fcGxheWVyLT5jaGFyYWN0ZXJpc3RpY0NoYW5nZWQoKTsKKwor
ICAgIGlmIChtX2hhc1ZpZGVvKQorICAgICAgICBtX3BsYXllci0+c2l6ZUNoYW5nZWQoKTsKKwor
ICAgIGlmICh1c2VNZWRpYVNvdXJjZSkgeworICAgICAgICBHU1RfREVCVUcoIlRyYWNrcyBtYW5h
Z2VkIGJ5IHNvdXJjZSBlbGVtZW50LiBCYWlsaW5nIG91dCBub3cuIik7CisgICAgICAgIG1fcGxh
eWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHB1cmdlSW52
YWxpZEF1ZGlvVHJhY2tzKHZhbGlkQXVkaW9TdHJlYW1zKTsKKyAgICBwdXJnZUludmFsaWRWaWRl
b1RyYWNrcyh2YWxpZFZpZGVvU3RyZWFtcyk7CisgICAgcHVyZ2VJbnZhbGlkVGV4dFRyYWNrcyh2
YWxpZFRleHRTdHJlYW1zKTsKKyNlbmRpZgorCisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlh
UGxheWVyRW5naW5lVXBkYXRlZChtX3BsYXllcik7Cit9CisjZW5kaWYKKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmVuYWJsZVRyYWNrKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXI6OlRyYWNrVHlwZSB0cmFja1R5cGUsIHVuc2lnbmVkIGluZGV4KQoreworICAgIGNvbnN0IGNo
YXIqIHByb3BlcnR5TmFtZTsKKyAgICBjb25zdCBjaGFyKiB0cmFja1R5cGVBc1N0cmluZzsKKyAg
ICBHTGlzdCogc2VsZWN0ZWRTdHJlYW1zID0gbnVsbHB0cjsKKworICAgIHN3aXRjaCAodHJhY2tU
eXBlKSB7CisgICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OkF1
ZGlvOiB7CisgICAgICAgIHByb3BlcnR5TmFtZSA9ICJjdXJyZW50LWF1ZGlvIjsKKyAgICAgICAg
dHJhY2tUeXBlQXNTdHJpbmcgPSAiYXVkaW8iOworICAgICAgICBpZiAoIW1fY3VycmVudFRleHRT
dHJlYW1JZC5pc0VtcHR5KCkpCisgICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMgPSBnX2xpc3Rf
YXBwZW5kKHNlbGVjdGVkU3RyZWFtcywgZ19zdHJkdXAobV9jdXJyZW50VGV4dFN0cmVhbUlkLnV0
ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRWaWRlb1N0cmVhbUlkLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcyA9IGdfbGlzdF9hcHBlbmQoc2VsZWN0
ZWRTdHJlYW1zLCBnX3N0cmR1cChtX2N1cnJlbnRWaWRlb1N0cmVhbUlkLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVHJhY2tQcml2YXRlQmFzZUdTdHJl
YW1lcjo6VHJhY2tUeXBlOjpWaWRlbzogeworICAgICAgICBwcm9wZXJ0eU5hbWUgPSAiY3VycmVu
dC12aWRlbyI7CisgICAgICAgIHRyYWNrVHlwZUFzU3RyaW5nID0gInZpZGVvIjsKKyAgICAgICAg
aWYgKCFtX2N1cnJlbnRBdWRpb1N0cmVhbUlkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNlbGVj
dGVkU3RyZWFtcyA9IGdfbGlzdF9hcHBlbmQoc2VsZWN0ZWRTdHJlYW1zLCBnX3N0cmR1cChtX2N1
cnJlbnRBdWRpb1N0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgaWYgKCFtX2N1cnJl
bnRUZXh0U3RyZWFtSWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zID0g
Z19saXN0X2FwcGVuZChzZWxlY3RlZFN0cmVhbXMsIGdfc3RyZHVwKG1fY3VycmVudFRleHRTdHJl
YW1JZC51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFRy
YWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VGV4dDogeworICAgICAgICBwcm9w
ZXJ0eU5hbWUgPSAiY3VycmVudC10ZXh0IjsKKyAgICAgICAgdHJhY2tUeXBlQXNTdHJpbmcgPSAi
dGV4dCI7CisgICAgICAgIGlmICghbV9jdXJyZW50QXVkaW9TdHJlYW1JZC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMgPSBnX2xpc3RfYXBwZW5kKHNlbGVjdGVkU3RyZWFt
cywgZ19zdHJkdXAobV9jdXJyZW50QXVkaW9TdHJlYW1JZC51dGY4KCkuZGF0YSgpKSk7CisgICAg
ICAgIGlmICghbV9jdXJyZW50VmlkZW9TdHJlYW1JZC5pc0VtcHR5KCkpCisgICAgICAgICAgICBz
ZWxlY3RlZFN0cmVhbXMgPSBnX2xpc3RfYXBwZW5kKHNlbGVjdGVkU3RyZWFtcywgZ19zdHJkdXAo
bV9jdXJyZW50VmlkZW9TdHJlYW1JZC51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VW5r
bm93bjogeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIH0KKworICAgIEdTVF9JTkZPKCJFbmFibGluZyAlcyB0cmFjayB3aXRoIGluZGV4
OiAlbHUiLCB0cmFja1R5cGVBc1N0cmluZywgaW5kZXgpOworICAgIC8vIEZJWE1FOiBSZW1vdmUg
aXNNZWRpYVNvdXJjZSgpIHRlc3QgYmVsb3cgd2hlbiBmaXhpbmcgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjUzMQorICAgIGlmIChtX2lzTGVnYWN5UGxheWJpbiB8
fCBpc01lZGlhU291cmNlKCkpIHsKKyAgICAgICAgR3N0RWxlbWVudCogZWxlbWVudCA9IGlzTWVk
aWFTb3VyY2UoKSA/IG1fc291cmNlLmdldCgpIDogbV9waXBlbGluZS5nZXQoKTsKKyAgICAgICAg
Z19vYmplY3Rfc2V0KGVsZW1lbnQsIHByb3BlcnR5TmFtZSwgaW5kZXgsIG51bGxwdHIpOworICAg
IH0KKyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKQorICAgIGVsc2UgeworICAgICAgICBHc3RT
dHJlYW0qIHN0cmVhbSA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc3RyZWFtKG1fc3RyZWFt
Q29sbGVjdGlvbi5nZXQoKSwgaW5kZXgpOworICAgICAgICBpZiAoc3RyZWFtKSB7CisgICAgICAg
ICAgICBTdHJpbmcgc3RyZWFtSWQgPSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtKTsK
KyAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcyA9IGdfbGlzdF9hcHBlbmQoc2VsZWN0ZWRTdHJl
YW1zLCBnX3N0cmR1cChzdHJlYW1JZC51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgR1NUX1dBUk5JTkcoIiVzIHN0cmVhbSAlbHUgbm90IGZvdW5kIiwgdHJhY2tU
eXBlQXNTdHJpbmcsIGluZGV4KTsKKworICAgICAgICAvLyBUT0RPOiBNU0UgR3N0U3RyZWFtIEFQ
SSBzdXBwb3J0OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyNTMx
CisgICAgICAgIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQobV9waXBlbGluZS5nZXQoKSwgZ3N0X2V2
ZW50X25ld19zZWxlY3Rfc3RyZWFtcyhzZWxlY3RlZFN0cmVhbXMpKTsKKyAgICB9CisjZW5kaWYK
KworICAgIGlmIChzZWxlY3RlZFN0cmVhbXMpCisgICAgICAgIGdfbGlzdF9mcmVlKHNlbGVjdGVk
U3RyZWFtcyk7Cit9CisKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2aWRlb0No
YW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKIHsKICAg
ICBwbGF5ZXItPm1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpWaWRl
b0NoYW5nZWQsIFtwbGF5ZXJdIHsgcGxheWVyLT5ub3RpZnlQbGF5ZXJPZlZpZGVvKCk7IH0pOwpA
QCAtNjIyLDYgKzc3OSw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3Rp
ZnlQbGF5ZXJPZlZpZGVvKCkKICAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgIW1fc291
cmNlKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgQVNTRVJUKG1faXNMZWdhY3lQbGF5YmluIHx8
IGlzTWVkaWFTb3VyY2UoKSk7CisKICAgICBnaW50IG51bVRyYWNrcyA9IDA7CiAgICAgYm9vbCB1
c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFTb3VyY2UoKTsKICAgICBHc3RFbGVtZW50KiBlbGVtZW50
ID0gdXNlTWVkaWFTb3VyY2UgPyBtX3NvdXJjZS5nZXQoKSA6IG1fcGlwZWxpbmUuZ2V0KCk7CkBA
IC02NDQsMjkgKzgwMywzMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5UGxheWVyT2ZWaWRlbygpCiAgICAgfQogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAg
IFZlY3RvcjxTdHJpbmc+IHZhbGlkVmlkZW9TdHJlYW1zOwogICAgIGZvciAoZ2ludCBpID0gMDsg
aSA8IG51bVRyYWNrczsgKytpKSB7CiAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7CiAgICAg
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3BpcGVsaW5lLmdldCgpLCAiZ2V0LXZpZGVvLXBh
ZCIsIGksICZwYWQub3V0UHRyKCksIG51bGxwdHIpOwogICAgICAgICBBU1NFUlQocGFkKTsKIAor
ICAgICAgICBTdHJpbmcgc3RyZWFtSWQgPSAiViIgKyBTdHJpbmc6Om51bWJlcihpKTsKKyAgICAg
ICAgdmFsaWRWaWRlb1N0cmVhbXMuYXBwZW5kKHN0cmVhbUlkKTsKICAgICAgICAgaWYgKGkgPCBz
dGF0aWNfY2FzdDxnaW50PihtX3ZpZGVvVHJhY2tzLnNpemUoKSkpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gZXhpc3RpbmdUcmFjayA9IG1fdmlkZW9U
cmFja3NbaV07Ci0gICAgICAgICAgICBleGlzdGluZ1RyYWNrLT5zZXRJbmRleChpKTsKLSAgICAg
ICAgICAgIGlmIChleGlzdGluZ1RyYWNrLT5wYWQoKSA9PSBwYWQpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBSZWZQdHI8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+
IGV4aXN0aW5nVHJhY2sgPSBtX3ZpZGVvVHJhY2tzLmdldChzdHJlYW1JZCk7CisgICAgICAgICAg
ICBpZiAoZXhpc3RpbmdUcmFjaykgeworICAgICAgICAgICAgICAgIGV4aXN0aW5nVHJhY2stPnNl
dEluZGV4KGkpOworICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNrLT5wYWQoKSA9PSBw
YWQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAg
ICB9CiAKLSAgICAgICAgUmVmUHRyPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9
IFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobV9waXBlbGluZSwgaSwgcGFkKTsK
LSAgICAgICAgbV92aWRlb1RyYWNrcy5hcHBlbmQodHJhY2spOworICAgICAgICBSZWZQdHI8Vmlk
ZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFt
ZXI6OmNyZWF0ZShjcmVhdGVXZWFrUHRyKCksIGksIHBhZCk7CisgICAgICAgIEFTU0VSVChzdHJl
YW1JZCA9PSB0cmFjay0+aWQoKSk7CisgICAgICAgIG1fdmlkZW9UcmFja3MuYWRkKHN0cmVhbUlk
LCB0cmFjayk7CiAgICAgICAgIG1fcGxheWVyLT5hZGRWaWRlb1RyYWNrKCp0cmFjayk7CiAgICAg
fQogCi0gICAgd2hpbGUgKHN0YXRpY19jYXN0PGdpbnQ+KG1fdmlkZW9UcmFja3Muc2l6ZSgpKSA+
IG51bVRyYWNrcykgewotICAgICAgICBSZWZQdHI8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+
IHRyYWNrID0gbV92aWRlb1RyYWNrcy5sYXN0KCk7Ci0gICAgICAgIHRyYWNrLT5kaXNjb25uZWN0
KCk7Ci0gICAgICAgIG1fdmlkZW9UcmFja3MucmVtb3ZlTGFzdCgpOwotICAgICAgICBtX3BsYXll
ci0+cmVtb3ZlVmlkZW9UcmFjaygqdHJhY2spOwotICAgIH0KKyAgICBwdXJnZUludmFsaWRWaWRl
b1RyYWNrcyh2YWxpZFZpZGVvU3RyZWFtcyk7CiAjZW5kaWYKIAogICAgIG1fcGxheWVyLT5jbGll
bnQoKS5tZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOwpAQCAtNjkzLDYgKzg1Myw4
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlv
KCkKICAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgIW1fc291cmNlKSkKICAgICAgICAg
cmV0dXJuOwogCisgICAgQVNTRVJUKG1faXNMZWdhY3lQbGF5YmluIHx8IGlzTWVkaWFTb3VyY2Uo
KSk7CisKICAgICBnaW50IG51bVRyYWNrcyA9IDA7CiAgICAgYm9vbCB1c2VNZWRpYVNvdXJjZSA9
IGlzTWVkaWFTb3VyY2UoKTsKICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gdXNlTWVkaWFTb3Vy
Y2UgPyBtX3NvdXJjZS5nZXQoKSA6IG1fcGlwZWxpbmUuZ2V0KCk7CkBAIC03MTEsMjkgKzg3Mywz
MCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRp
bygpCiAgICAgfQogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFZlY3RvcjxTdHJpbmc+
IHZhbGlkQXVkaW9TdHJlYW1zOwogICAgIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bVRyYWNrczsg
KytpKSB7CiAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7CiAgICAgICAgIGdfc2lnbmFsX2Vt
aXRfYnlfbmFtZShtX3BpcGVsaW5lLmdldCgpLCAiZ2V0LWF1ZGlvLXBhZCIsIGksICZwYWQub3V0
UHRyKCksIG51bGxwdHIpOwogICAgICAgICBBU1NFUlQocGFkKTsKIAorICAgICAgICBTdHJpbmcg
c3RyZWFtSWQgPSAiQSIgKyBTdHJpbmc6Om51bWJlcihpKTsKKyAgICAgICAgdmFsaWRBdWRpb1N0
cmVhbXMuYXBwZW5kKHN0cmVhbUlkKTsKICAgICAgICAgaWYgKGkgPCBzdGF0aWNfY2FzdDxnaW50
PihtX2F1ZGlvVHJhY2tzLnNpemUoKSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxBdWRpb1RyYWNr
UHJpdmF0ZUdTdHJlYW1lcj4gZXhpc3RpbmdUcmFjayA9IG1fYXVkaW9UcmFja3NbaV07Ci0gICAg
ICAgICAgICBleGlzdGluZ1RyYWNrLT5zZXRJbmRleChpKTsKLSAgICAgICAgICAgIGlmIChleGlz
dGluZ1RyYWNrLT5wYWQoKSA9PSBwYWQpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBSZWZQdHI8QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sg
PSBtX2F1ZGlvVHJhY2tzLmdldChzdHJlYW1JZCk7CisgICAgICAgICAgICBpZiAoZXhpc3RpbmdU
cmFjaykgeworICAgICAgICAgICAgICAgIGV4aXN0aW5nVHJhY2stPnNldEluZGV4KGkpOworICAg
ICAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNrLT5wYWQoKSA9PSBwYWQpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAg
UmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IEF1ZGlvVHJhY2tQcml2
YXRlR1N0cmVhbWVyOjpjcmVhdGUobV9waXBlbGluZSwgaSwgcGFkKTsKLSAgICAgICAgbV9hdWRp
b1RyYWNrcy5pbnNlcnQoaSwgdHJhY2spOworICAgICAgICBSZWZQdHI8QXVkaW9UcmFja1ByaXZh
dGVHU3RyZWFtZXI+IHRyYWNrID0gQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShj
cmVhdGVXZWFrUHRyKCksIGksIHBhZCk7CisgICAgICAgIEFTU0VSVChzdHJlYW1JZCA9PSB0cmFj
ay0+aWQoKSk7CisgICAgICAgIG1fYXVkaW9UcmFja3MuYWRkKHN0cmVhbUlkLCB0cmFjayk7CiAg
ICAgICAgIG1fcGxheWVyLT5hZGRBdWRpb1RyYWNrKCp0cmFjayk7CiAgICAgfQogCi0gICAgd2hp
bGUgKHN0YXRpY19jYXN0PGdpbnQ+KG1fYXVkaW9UcmFja3Muc2l6ZSgpKSA+IG51bVRyYWNrcykg
ewotICAgICAgICBSZWZQdHI8QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gbV9h
dWRpb1RyYWNrcy5sYXN0KCk7Ci0gICAgICAgIHRyYWNrLT5kaXNjb25uZWN0KCk7Ci0gICAgICAg
IG1fYXVkaW9UcmFja3MucmVtb3ZlTGFzdCgpOwotICAgICAgICBtX3BsYXllci0+cmVtb3ZlQXVk
aW9UcmFjaygqdHJhY2spOwotICAgIH0KKyAgICBwdXJnZUludmFsaWRBdWRpb1RyYWNrcyh2YWxp
ZEF1ZGlvU3RyZWFtcyk7CiAjZW5kaWYKIAogICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBs
YXllckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOwpAQCAtNzUwLDYgKzkxMyw4IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlRleHQoKQogICAgIGlmIChV
TkxJS0VMWSghbV9waXBlbGluZSB8fCAhbV9zb3VyY2UpKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBBU1NFUlQobV9pc0xlZ2FjeVBsYXliaW4gfHwgaXNNZWRpYVNvdXJjZSgpKTsKKwogICAgIGdp
bnQgbnVtVHJhY2tzID0gMDsKICAgICBib29sIHVzZU1lZGlhU291cmNlID0gaXNNZWRpYVNvdXJj
ZSgpOwogICAgIEdzdEVsZW1lbnQqIGVsZW1lbnQgPSB1c2VNZWRpYVNvdXJjZSA/IG1fc291cmNl
LmdldCgpIDogbV9waXBlbGluZS5nZXQoKTsKQEAgLTc2MCwyOSArOTI1LDM1IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlRleHQoKQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCisgICAgVmVjdG9yPFN0cmluZz4gdmFsaWRUZXh0U3RyZWFtczsKICAg
ICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgewogICAgICAgICBHUmVmUHRy
PEdzdFBhZD4gcGFkOwogICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9waXBlbGluZS5n
ZXQoKSwgImdldC10ZXh0LXBhZCIsIGksICZwYWQub3V0UHRyKCksIG51bGxwdHIpOwogICAgICAg
ICBBU1NFUlQocGFkKTsKIAorICAgICAgICBHUmVmUHRyPEdzdEV2ZW50PiBldmVudCA9IGFkb3B0
R1JlZihnc3RfcGFkX2dldF9zdGlja3lfZXZlbnQocGFkLmdldCgpLCBHU1RfRVZFTlRfU1RSRUFN
X1NUQVJULCAwKSk7CisgICAgICAgIGlmICghZXZlbnQpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBjb25zdCBjaGFyKiBzdHJlYW1JZDsKKyAgICAgICAgZ3N0X2V2ZW50X3BhcnNl
X3N0cmVhbV9zdGFydChldmVudC5nZXQoKSwgJnN0cmVhbUlkKTsKKworICAgICAgICB2YWxpZFRl
eHRTdHJlYW1zLmFwcGVuZChzdHJlYW1JZCk7CiAgICAgICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8
Z2ludD4obV90ZXh0VHJhY2tzLnNpemUoKSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyPiBleGlzdGluZ1RyYWNrID0gbV90ZXh0VHJhY2tzW2ld
OwotICAgICAgICAgICAgZXhpc3RpbmdUcmFjay0+c2V0SW5kZXgoaSk7Ci0gICAgICAgICAgICBp
ZiAoZXhpc3RpbmdUcmFjay0+cGFkKCkgPT0gcGFkKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI+IGV4
aXN0aW5nVHJhY2sgPSBtX3RleHRUcmFja3MuZ2V0KHN0cmVhbUlkKTsKKyAgICAgICAgICAgIGlm
IChleGlzdGluZ1RyYWNrKSB7CisgICAgICAgICAgICAgICAgZXhpc3RpbmdUcmFjay0+c2V0SW5k
ZXgoaSk7CisgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nVHJhY2stPnBhZCgpID09IHBhZCkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAogICAgICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sg
PSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoaSwgcGFkKTsKLSAgICAg
ICAgbV90ZXh0VHJhY2tzLmluc2VydChpLCB0cmFjayk7CisgICAgICAgIG1fdGV4dFRyYWNrcy5h
ZGQoc3RyZWFtSWQsIHRyYWNrKTsKICAgICAgICAgbV9wbGF5ZXItPmFkZFRleHRUcmFjaygqdHJh
Y2spOwogICAgIH0KIAotICAgIHdoaWxlIChzdGF0aWNfY2FzdDxnaW50PihtX3RleHRUcmFja3Mu
c2l6ZSgpKSA+IG51bVRyYWNrcykgewotICAgICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBtX3RleHRUcmFja3MubGFzdCgpOwotICAgICAgICB0cmFj
ay0+ZGlzY29ubmVjdCgpOwotICAgICAgICBtX3RleHRUcmFja3MucmVtb3ZlTGFzdCgpOwotICAg
ICAgICBtX3BsYXllci0+cmVtb3ZlVGV4dFRyYWNrKCp0cmFjayk7Ci0gICAgfQorICAgIHB1cmdl
SW52YWxpZFRleHRUcmFja3ModmFsaWRUZXh0U3RyZWFtcyk7CiB9CiAKIEdzdEZsb3dSZXR1cm4g
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXdUZXh0U2FtcGxlQ2FsbGJhY2soTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCkBAIC04MDgsOCArOTc5LDggQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1RleHRTYW1wbGUoKQogICAgICAgICBjb25z
dCBnY2hhciogaWQ7CiAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fc3RhcnQoc3RyZWFt
U3RhcnRFdmVudC5nZXQoKSwgJmlkKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3RleHRUcmFja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbmJhbmRUZXh0
VHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IG1fdGV4dFRyYWNrc1tpXTsKLSAgICAgICAg
ICAgIGlmICh0cmFjay0+c3RyZWFtSWQoKSA9PSBpZCkgeworICAgICAgICAgICAgUmVmUHRyPElu
YmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gbV90ZXh0VHJhY2tzLmdldChp
ZCk7CisgICAgICAgICAgICBpZiAodHJhY2spIHsKICAgICAgICAgICAgICAgICB0cmFjay0+aGFu
ZGxlU2FtcGxlKHNhbXBsZSk7CiAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTA5Nyw2ICsxMjY4LDYxIEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAg
ICAgIGdzdF90YWdfbGlzdF91bnJlZih0YWdzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorI2lm
IFVTRShHU1RSRUFNRVJfUExBWUJJTjMpCisgICAgY2FzZSBHU1RfTUVTU0FHRV9TVFJFQU1fQ09M
TEVDVElPTjogeworICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IGNvbGxlY3Rp
b247CisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uKG1lc3NhZ2Us
ICZjb2xsZWN0aW9uLm91dFB0cigpKTsKKworICAgICAgICBpZiAoY29sbGVjdGlvbikgeworICAg
ICAgICAgICAgbV9zdHJlYW1Db2xsZWN0aW9uLnN3YXAoY29sbGVjdGlvbik7CisgICAgICAgICAg
ICBtX25vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6U3RyZWFtQ29sbGVj
dGlvbkNoYW5nZWQsIFt0aGlzXSB7CisgICAgICAgICAgICAgICAgdGhpcy0+dXBkYXRlVHJhY2tz
KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBHU1RfTUVTU0FHRV9TVFJFQU1TX1NFTEVDVEVEOiB7CisgICAgICAgIEdSZWZQdHI8
R3N0U3RyZWFtQ29sbGVjdGlvbj4gY29sbGVjdGlvbjsKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFy
c2Vfc3RyZWFtc19zZWxlY3RlZChtZXNzYWdlLCAmY29sbGVjdGlvbi5vdXRQdHIoKSk7CisKKyAg
ICAgICAgaWYgKCFjb2xsZWN0aW9uKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgbV9z
dHJlYW1Db2xsZWN0aW9uLnN3YXAoY29sbGVjdGlvbik7CisgICAgICAgIG1fY3VycmVudEF1ZGlv
U3RyZWFtSWQgPSAiIjsKKyAgICAgICAgbV9jdXJyZW50VmlkZW9TdHJlYW1JZCA9ICIiOworICAg
ICAgICBtX2N1cnJlbnRUZXh0U3RyZWFtSWQgPSAiIjsKKworICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zaXplKG1lc3NhZ2UpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IEdSZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW0gPSBnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVk
X2dldF9zdHJlYW0obWVzc2FnZSwgaSk7CisgICAgICAgICAgICBpZiAoIXN0cmVhbSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEdzdFN0cmVhbVR5cGUgdHlwZSA9IGdz
dF9zdHJlYW1fZ2V0X3N0cmVhbV90eXBlKHN0cmVhbS5nZXQoKSk7CisgICAgICAgICAgICBTdHJp
bmcgc3RyZWFtSWQoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQoKSkpOworCisg
ICAgICAgICAgICBHU1RfREVCVUcoIlNlbGVjdGluZyAlcyB0cmFjayB3aXRoIElEOiAlcyIsIGdz
dF9zdHJlYW1fdHlwZV9nZXRfbmFtZSh0eXBlKSwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICAvLyBQbGF5YmluMyBjYW4gc2VuZCBtb3JlIHRoYW4gb25lIHNlbGVjdGVkIHN0
cmVhbSBvZiB0aGUgc2FtZSB0eXBlCisgICAgICAgICAgICAvLyBidXQgdGhlcmUncyBubyBwcmlv
cml0eSBvciBvcmRlcmluZyBzeXN0ZW0gaW4gcGxhY2UsIHNvIHdlIGFzc3VtZQorICAgICAgICAg
ICAgLy8gdGhlIHNlbGVjdGVkIHN0cmVhbSBpcyB0aGUgbGFzdCBvbmUgYXMgcmVwb3J0ZWQgYnkg
cGxheWJpbjMuCisgICAgICAgICAgICBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9BVURJTykg
eworICAgICAgICAgICAgICAgIG1fY3VycmVudEF1ZGlvU3RyZWFtSWQgPSBzdHJlYW1JZDsKKyAg
ICAgICAgICAgICAgICBhdXRvIHRyYWNrID0gbV9hdWRpb1RyYWNrcy5nZXQobV9jdXJyZW50QXVk
aW9TdHJlYW1JZCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHRyYWNrKTsKKyAgICAgICAgICAg
ICAgICB0cmFjay0+bWFya0FzQWN0aXZlKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUg
JiBHU1RfU1RSRUFNX1RZUEVfVklERU8pIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRWaWRl
b1N0cmVhbUlkID0gc3RyZWFtSWQ7CisgICAgICAgICAgICAgICAgYXV0byB0cmFjayA9IG1fdmlk
ZW9UcmFja3MuZ2V0KG1fY3VycmVudFZpZGVvU3RyZWFtSWQpOworICAgICAgICAgICAgICAgIEFT
U0VSVCh0cmFjayk7CisgICAgICAgICAgICAgICAgdHJhY2stPm1hcmtBc0FjdGl2ZSgpOworICAg
ICAgICAgICAgfSBlbHNlIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX1RFWFQpCisgICAgICAg
ICAgICAgICAgbV9jdXJyZW50VGV4dFN0cmVhbUlkID0gc3RyZWFtSWQ7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVua25vd24gc3RyZWFtIHR5cGUgd2l0
aCBzdHJlYW0taWQgJXMiLCBzdHJlYW1JZCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorI2VuZGlmCiAgICAgZGVmYXVsdDoKICAgICAgICAgR1NUX0RFQlVHKCJVbmhhbmRsZWQg
R1N0cmVhbWVyIG1lc3NhZ2UgdHlwZTogJXMiLCBHU1RfTUVTU0FHRV9UWVBFX05BTUUobWVzc2Fn
ZSkpOwogICAgICAgICBicmVhazsKQEAgLTEyMTMsNiArMTQzOSw0MiBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc1RhYmxlT2ZDb250ZW50c0VudHJ5KEdzdFRvY0Vu
dHJ5KiBlbnRyeQogICAgIGZvciAoR0xpc3QqIGkgPSBnc3RfdG9jX2VudHJ5X2dldF9zdWJfZW50
cmllcyhlbnRyeSk7IGk7IGkgPSBpLT5uZXh0KQogICAgICAgICBwcm9jZXNzVGFibGVPZkNvbnRl
bnRzRW50cnkoc3RhdGljX2Nhc3Q8R3N0VG9jRW50cnkqPihpLT5kYXRhKSk7CiB9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZUludmFsaWRBdWRpb1RyYWNrcyhWZWN0
b3I8U3RyaW5nPiB2YWxpZFRyYWNrSWRzKQoreworICAgIGZvciAoYXV0byBhdWRpb1RyYWNrSWQg
OiBtX2F1ZGlvVHJhY2tzLmtleXMoKSkgeworICAgICAgICBpZiAodmFsaWRUcmFja0lkcy5jb250
YWlucyhhdWRpb1RyYWNrSWQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1dG8g
dHJhY2sgPSBtX2F1ZGlvVHJhY2tzLmdldChhdWRpb1RyYWNrSWQpOworICAgICAgICB0cmFjay0+
ZGlzY29ubmVjdCgpOworICAgICAgICBtX3BsYXllci0+cmVtb3ZlQXVkaW9UcmFjaygqdHJhY2sp
OworICAgICAgICBtX2F1ZGlvVHJhY2tzLnJlbW92ZShhdWRpb1RyYWNrSWQpOworICAgIH0KK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZFZpZGVvVHJh
Y2tzKFZlY3RvcjxTdHJpbmc+IHZhbGlkVHJhY2tJZHMpCit7CisgICAgZm9yIChhdXRvIHZpZGVv
VHJhY2tJZCA6IG1fdmlkZW9UcmFja3Mua2V5cygpKSB7CisgICAgICAgIGlmICh2YWxpZFRyYWNr
SWRzLmNvbnRhaW5zKHZpZGVvVHJhY2tJZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgYXV0byB0cmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0KHZpZGVvVHJhY2tJZCk7CisgICAgICAg
IHRyYWNrLT5kaXNjb25uZWN0KCk7CisgICAgICAgIG1fcGxheWVyLT5yZW1vdmVWaWRlb1RyYWNr
KCp0cmFjayk7CisgICAgICAgIG1fdmlkZW9UcmFja3MucmVtb3ZlKHZpZGVvVHJhY2tJZCk7Cisg
ICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VJbnZhbGlk
VGV4dFRyYWNrcyhWZWN0b3I8U3RyaW5nPiB2YWxpZFRyYWNrSWRzKQoreworICAgIGZvciAoYXV0
byB0ZXh0VHJhY2tJZCA6IG1fdGV4dFRyYWNrcy5rZXlzKCkpIHsKKyAgICAgICAgaWYgKHZhbGlk
VHJhY2tJZHMuY29udGFpbnModGV4dFRyYWNrSWQpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGF1dG8gdHJhY2sgPSBtX3RleHRUcmFja3MuZ2V0KHRleHRUcmFja0lkKTsKKyAgICAg
ICAgdHJhY2stPmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgbV9wbGF5ZXItPnJlbW92ZVRleHRUcmFj
aygqdHJhY2spOworICAgICAgICBtX3RleHRUcmFja3MucmVtb3ZlKHRleHRUcmFja0lkKTsKKyAg
ICB9Cit9CiAjZW5kaWYKIAogc3RhdGljIGludCBmaW5kSExTUXVldWUoY29uc3QgR1ZhbHVlKiBp
dGVtKQpAQCAtMTQwMCw5ICsxNjYyLDkgQEAgdW5zaWduZWQgbG9uZyBsb25nIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fdG90YWxC
eXRlczsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZUNoYW5n
ZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VTZXR1cENhbGxiYWNrKE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lciogcGxheWVyLCBHc3RFbGVtZW50KiBzb3VyY2VFbGVtZW50KQogewot
ICAgIHBsYXllci0+c291cmNlQ2hhbmdlZCgpOworICAgIHBsYXllci0+c291cmNlU2V0dXAoc291
cmNlRWxlbWVudCk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cmlE
ZWNvZGVCaW5FbGVtZW50QWRkZWRDYWxsYmFjayhHc3RCaW4qIGJpbiwgR3N0RWxlbWVudCogZWxl
bWVudCwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCkBAIC0xNDE5LDcgKzE2
ODEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXJpRGVjb2RlQmluRWxl
bWVudEFkZGVkQ2FsbGJhY2soR3N0QmluKiBiaW4sCiAKICAgICBHVW5pcXVlUHRyPGNoYXI+IG5l
d0Rvd25sb2FkVGVtcGxhdGUoZ19idWlsZF9maWxlbmFtZShHX0RJUl9TRVBBUkFUT1JfUywgInZh
ciIsICJ0bXAiLCAiV2ViS2l0LU1lZGlhLVhYWFhYWCIsIG51bGxwdHIpKTsKICAgICBnX29iamVj
dF9zZXQoZWxlbWVudCwgInRlbXAtdGVtcGxhdGUiLCBuZXdEb3dubG9hZFRlbXBsYXRlLmdldCgp
LCBudWxscHRyKTsKLSAgICBHU1RfVFJBQ0UoIlJlY29uZmlndXJlZCBmaWxlIGRvd25sb2FkIHRl
bXBsYXRlIGZyb20gJyVzJyB0byAnJXMnIiwgb2xkRG93bmxvYWRUZW1wbGF0ZS5nZXQoKSwgbmV3
RG93bmxvYWRUZW1wbGF0ZS5nZXQoKSk7CisgICAgR1NUX0RFQlVHKCJSZWNvbmZpZ3VyZWQgZmls
ZSBkb3dubG9hZCB0ZW1wbGF0ZSBmcm9tICclcycgdG8gJyVzJyIsIG9sZERvd25sb2FkVGVtcGxh
dGUuZ2V0KCksIG5ld0Rvd25sb2FkVGVtcGxhdGUuZ2V0KCkpOwogCiAgICAgcGxheWVyLT5wdXJn
ZU9sZERvd25sb2FkRmlsZXMob2xkRG93bmxvYWRUZW1wbGF0ZS5nZXQoKSk7CiB9CkBAIC0xNDM5
LDcgKzE3MDEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZG93bmxvYWRC
dWZmZXJGaWxlQ3JlYXRlZENhbGxiYWNrKE1lZGlhUGxheWVyUAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgR1NUX1RSQUNFKCJVbmxpbmtlZCBtZWRpYSB0ZW1wb3JhcnkgZmlsZSAlcyBh
ZnRlciBjcmVhdGlvbiIsIGRvd25sb2FkRmlsZS5nZXQoKSk7CisgICAgR1NUX0RFQlVHKCJVbmxp
bmtlZCBtZWRpYSB0ZW1wb3JhcnkgZmlsZSAlcyBhZnRlciBjcmVhdGlvbiIsIGRvd25sb2FkRmls
ZS5nZXQoKSk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZU9s
ZERvd25sb2FkRmlsZXMoY29uc3QgY2hhciogZG93bmxvYWRGaWxlVGVtcGxhdGUpCkBAIC0xNDYx
LDEzICsxNzIzLDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZU9s
ZERvd25sb2FkRmlsZXMoY29uc3QgY2hhciogZG93bmxvYWRGaWxlCiAgICAgfQogfQogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlQ2hhbmdlZCgpCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlU2V0dXAoR3N0RWxlbWVudCogc291cmNlRWxl
bWVudCkKIHsKKyAgICBHU1RfREVCVUcoIlNvdXJjZSBlbGVtZW50IHNldC11cCBmb3IgJXMiLCBH
U1RfRUxFTUVOVF9OQU1FKHNvdXJjZUVsZW1lbnQpKTsKKwogICAgIGlmIChXRUJLSVRfSVNfV0VC
X1NSQyhtX3NvdXJjZS5nZXQoKSkgJiYgR1NUX09CSkVDVF9QQVJFTlQobV9zb3VyY2UuZ2V0KCkp
KQogICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoR1NUX0VMRU1F
TlRfUEFSRU5UKG1fc291cmNlLmdldCgpKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4odXJp
RGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJhY2spLCB0aGlzKTsKIAotICAgIG1fc291cmNlLmNs
ZWFyKCk7Ci0gICAgZ19vYmplY3RfZ2V0KG1fcGlwZWxpbmUuZ2V0KCksICJzb3VyY2UiLCAmbV9z
b3VyY2Uub3V0UHRyKCksIG51bGxwdHIpOworICAgIG1fc291cmNlID0gc291cmNlRWxlbWVudDsK
IAogICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkpIHsKICAgICAgICAg
d2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIoV0VCS0lUX1dFQl9TUkMobV9zb3VyY2UuZ2V0KCkp
LCBtX3BsYXllcik7CkBAIC0yMDE5LDggKzIyODIsMTAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnNldERvd25sb2FkQnVmZmVyaW5nKCkKICAgICB1bnNpZ25lZCBmbGFnRG93
bmxvYWQgPSBnZXRHc3RQbGF5RmxhZygiZG93bmxvYWQiKTsKIAogICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gc3RvcCBkb3dubG9hZGluZyBpZiB3ZSBhbHJlYWR5IHN0YXJ0ZWQgaXQuCi0gICAgaWYg
KGZsYWdzICYgZmxhZ0Rvd25sb2FkICYmIG1fcmVhZHlTdGF0ZSA+IE1lZGlhUGxheWVyOjpIYXZl
Tm90aGluZyAmJiAhbV9yZXNldFBpcGVsaW5lKQorICAgIGlmIChmbGFncyAmIGZsYWdEb3dubG9h
ZCAmJiBtX3JlYWR5U3RhdGUgPiBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcgJiYgIW1fcmVzZXRQ
aXBlbGluZSkgeworICAgICAgICBHU1RfREVCVUcoIkRvd25sb2FkIGFscmVhZHkgc3RhcnRlZCwg
bm90IHN0YXJ0aW5nIGFnYWluIik7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBib29s
IHNob3VsZERvd25sb2FkID0gIWlzTGl2ZVN0cmVhbSgpICYmIG1fcHJlbG9hZCA9PSBNZWRpYVBs
YXllcjo6QXV0bzsKICAgICBpZiAoc2hvdWxkRG93bmxvYWQpIHsKQEAgLTIwMzYsNiArMjMwMSw3
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXREb3dubG9hZEJ1ZmZlcmlu
ZygpCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQcmVsb2FkKE1lZGlh
UGxheWVyOjpQcmVsb2FkIHByZWxvYWQpCiB7CisgICAgR1NUX0RFQlVHKCJTZXR0aW5nIHByZWxv
YWQgdG8gJXMiLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhwcmVsb2FkKS51dGY4KCkuZGF0
YSgpKTsKICAgICBpZiAocHJlbG9hZCA9PSBNZWRpYVBsYXllcjo6QXV0byAmJiBpc0xpdmVTdHJl
YW0oKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMTQwLDkgKzI0MDYsMTcgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oKQogCiAgICAgLy8gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCkgcmV0dXJucyBhIGZsb2F0aW5nIHJlZmVyZW5jZSBzbwog
ICAgIC8vIHdlIHNob3VsZCBub3QgYWRvcHQuCisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklOMykK
KyAgICBtX2lzTGVnYWN5UGxheWJpbiA9IGZhbHNlOworICAgIHNldFBpcGVsaW5lKGdzdF9lbGVt
ZW50X2ZhY3RvcnlfbWFrZSgicGxheWJpbjMiLCAicGxheSIpKTsKKyNlbHNlCisgICAgbV9pc0xl
Z2FjeVBsYXliaW4gPSB0cnVlOwogICAgIHNldFBpcGVsaW5lKGdzdF9lbGVtZW50X2ZhY3Rvcnlf
bWFrZSgicGxheWJpbiIsICJwbGF5IikpOworI2VuZGlmCiAgICAgc2V0U3RyZWFtVm9sdW1lRWxl
bWVudChHU1RfU1RSRUFNX1ZPTFVNRShtX3BpcGVsaW5lLmdldCgpKSk7CiAKKyAgICBHU1RfSU5G
TygiVXNpbmcgbGVnYWN5IHBsYXliaW4gZWxlbWVudDogJXMiLCBib29sRm9yUHJpbnRpbmcobV9p
c0xlZ2FjeVBsYXliaW4pKTsKKwogICAgIC8vIExldCBhbHNvIG90aGVyIGxpc3RlbmVycyBzdWJz
Y3JpYmUgdG8gKGFwcGxpY2F0aW9uKSBtZXNzYWdlcyBpbiB0aGlzIGJ1cy4KICAgICBHUmVmUHRy
PEdzdEJ1cz4gYnVzID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9nZXRfYnVzKEdTVF9QSVBFTElO
RShtX3BpcGVsaW5lLmdldCgpKSkpOwogICAgIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxs
KGJ1cy5nZXQoKSwgUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpSdW5Mb29wRGlzcGF0Y2hlcik7CkBA
IC0yMTUwLDExICsyNDI0LDE1IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpj
cmVhdGVHU1RQbGF5QmluKCkKIAogICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAi
bXV0ZSIsIG1fcGxheWVyLT5tdXRlZCgpLCBudWxscHRyKTsKIAotICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZChtX3BpcGVsaW5lLmdldCgpLCAibm90aWZ5Ojpzb3VyY2UiLCBHX0NBTExCQUNL
KHNvdXJjZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dh
cHBlZChtX3BpcGVsaW5lLmdldCgpLCAidmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodmlkZW9D
aGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9w
aXBlbGluZS5nZXQoKSwgImF1ZGlvLWNoYW5nZWQiLCBHX0NBTExCQUNLKGF1ZGlvQ2hhbmdlZENh
bGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fcGlwZWxpbmUu
Z2V0KCksICJzb3VyY2Utc2V0dXAiLCBHX0NBTExCQUNLKHNvdXJjZVNldHVwQ2FsbGJhY2spLCB0
aGlzKTsKKyAgICBpZiAobV9pc0xlZ2FjeVBsYXliaW4pIHsKKyAgICAgICAgZ19zaWduYWxfY29u
bmVjdF9zd2FwcGVkKG1fcGlwZWxpbmUuZ2V0KCksICJ2aWRlby1jaGFuZ2VkIiwgR19DQUxMQkFD
Syh2aWRlb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
X3N3YXBwZWQobV9waXBlbGluZS5nZXQoKSwgImF1ZGlvLWNoYW5nZWQiLCBHX0NBTExCQUNLKGF1
ZGlvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCiAjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5lLmdldCgpLCAidGV4
dC1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAg
aWYgKG1faXNMZWdhY3lQbGF5YmluKQorICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
bV9waXBlbGluZS5nZXQoKSwgInRleHQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRD
YWxsYmFjayksIHRoaXMpOwogCiAgICAgR3N0RWxlbWVudCogdGV4dENvbWJpbmVyID0gd2Via2l0
VGV4dENvbWJpbmVyTmV3KCk7CiAgICAgQVNTRVJUKHRleHRDb21iaW5lcik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggZTM3YTQ0ZTI5NTZjZTBk
OWQ1MjkxMTE3ZjA3ZGVkNWYyZWY2ZTYwOS4uNmY1MDNkMzUwNmJhODNhNGU1N2I4NmViZDQ4ODRi
MzBjYThiMjRkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuaApAQCAtMjIsOCArMjIsOCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAg
Ki8KIAotI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJfaAotI2RlZmluZSBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJfaAorI3ByYWdtYSBvbmNlCisKICNpZiBFTkFCTEUoVklE
RU8pICYmIFVTRShHU1RSRUFNRVIpCiAKICNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCkBA
IC0zNiwxMyArMzYsMTEgQEAKICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CiAKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYmIFVTRShHU1RSRUFNRVJf
TVBFR1RTKQorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyNpbmNsdWRlICJUcmFja1ByaXZhdGVC
YXNlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgog
I2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXIgR3N0QnVmZmVyOwotdHlwZWRlZiBz
dHJ1Y3QgX0dzdE1lc3NhZ2UgR3N0TWVzc2FnZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RFbGVtZW50
IEdzdEVsZW1lbnQ7CiB0eXBlZGVmIHN0cnVjdCBfR3N0TXBlZ3RzU2VjdGlvbiBHc3RNcGVndHNT
ZWN0aW9uOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Nyw2ICs2NSw4IEBAIHB1YmxpYzoK
ICAgICBleHBsaWNpdCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqKTsK
ICAgICB2aXJ0dWFsIH5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoKTsKIAorICAgIFdlYWtQ
dHI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyPiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1cm4g
bV93ZWFrUHRyRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCp0aGlzKTsgfQorCiAgICAgc3RhdGljIHZv
aWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7CiAgICAgdm9pZCBo
YW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKICAgICB2b2lkIGhhbmRsZVBsdWdpbkluc3RhbGxl
clJlc3VsdChHc3RJbnN0YWxsUGx1Z2luc1JldHVybik7CkBAIC0xMTYsNyArMTE2LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKTsKICAgICB2b2lkIGxvYWRp
bmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
c291cmNlQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VTZXR1cChHc3RFbGVtZW50
Kik7CiAKICAgICBHc3RFbGVtZW50KiBhdWRpb1NpbmsoKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgY29uZmlndXJlUGxheVNpbmsoKSB7IH0KQEAgLTEzMSwxNCArMTMxLDE0IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaXNMaXZlU3RyZWFtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9pc1N0cmVhbWluZzsgfQogCisgICAgdm9pZCBlbmFibGVUcmFjayhUcmFja1ByaXZhdGVC
YXNlR1N0cmVhbWVyOjpUcmFja1R5cGUsIHVuc2lnbmVkIGluZGV4KTsKKwogcHJpdmF0ZToKICAg
ICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPiYpOwogICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBl
IHN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJik7CiAKICAg
ICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwogCi0gICAgV2Vha1B0cjxNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5
LmNyZWF0ZVdlYWtQdHIoKnRoaXMpOyB9Ci0KICAgICBHc3RFbGVtZW50KiBjcmVhdGVBdWRpb1Np
bmsoKSBvdmVycmlkZTsKIAogICAgIE1lZGlhVGltZSBwbGF5YmFja1Bvc2l0aW9uKCkgY29uc3Q7
CkBAIC0xNTMsMTIgKzE1MywxNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHNldERv
d25sb2FkQnVmZmVyaW5nKCk7CiAgICAgdm9pZCBwcm9jZXNzQnVmZmVyaW5nU3RhdHMoR3N0TWVz
c2FnZSopOwotI2lmIEVOQUJMRShWSURFT19UUkFDSykgJiYgVVNFKEdTVFJFQU1FUl9NUEVHVFMp
CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorI2lmIFVTRShHU1RSRUFNRVJfTVBFR1RTKQogICAg
IHZvaWQgcHJvY2Vzc01wZWdUc1NlY3Rpb24oR3N0TXBlZ3RzU2VjdGlvbiopOwogI2VuZGlmCi0j
aWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCiAgICAgdm9pZCBwcm9jZXNzVGFibGVPZkNvbnRlbnRz
KEdzdE1lc3NhZ2UqKTsKICAgICB2b2lkIHByb2Nlc3NUYWJsZU9mQ29udGVudHNFbnRyeShHc3RU
b2NFbnRyeSopOworCisgICAgdm9pZCBwdXJnZUludmFsaWRBdWRpb1RyYWNrcyhWZWN0b3I8U3Ry
aW5nPiB2YWxpZFRyYWNrSWRzKTsKKyAgICB2b2lkIHB1cmdlSW52YWxpZFZpZGVvVHJhY2tzKFZl
Y3RvcjxTdHJpbmc+IHZhbGlkVHJhY2tJZHMpOworICAgIHZvaWQgcHVyZ2VJbnZhbGlkVGV4dFRy
YWNrcyhWZWN0b3I8U3RyaW5nPiB2YWxpZFRyYWNrSWRzKTsKICNlbmRpZgogICAgIHZpcnR1YWwg
Ym9vbCBkb1NlZWsoY29uc3QgTWVkaWFUaW1lJiBwb3NpdGlvbiwgZmxvYXQgcmF0ZSwgR3N0U2Vl
a0ZsYWdzIHNlZWtUeXBlKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUGxheWJhY2tSYXRlKCk7
CkBAIC0xNzMsNiArMTc4LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldFBsYXliaW5VUkwo
Y29uc3QgVVJMJiB1cmxTdHJpbmcpOwogCisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklOMykKKyAg
ICB2b2lkIHVwZGF0ZVRyYWNrcygpOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICB2b2lkIGNh
Y2hlRHVyYXRpb24oKTsKIApAQCAtMjE0LDcgKzIyMyw3IEBAIHByb3RlY3RlZDoKIAogICAgIHN0
YXRpYyB2b2lkIHNldEF1ZGlvU3RyZWFtUHJvcGVydGllc0NhbGxiYWNrKE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lciosIEdPYmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHNvdXJjZUNoYW5n
ZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICBzdGF0aWMgdm9p
ZCBzb3VyY2VTZXR1cENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciosIEdzdEVs
ZW1lbnQqKTsKICAgICBzdGF0aWMgdm9pZCB2aWRlb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIqKTsKICAgICBzdGF0aWMgdm9pZCB2aWRlb1NpbmtDYXBzQ2hhbmdl
ZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOwogICAgIHN0YXRpYyB2b2lk
IGF1ZGlvQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOwpAQCAt
MjQ3LDYgKzI1NiwxMyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgdW5zaWduZWQgbG9uZyBsb25n
IG1fdG90YWxCeXRlczsKICAgICBVUkwgbV91cmw7CiAgICAgYm9vbCBtX3ByZXNlcnZlc1BpdGNo
OworICAgIGJvb2wgbV9pc0xlZ2FjeVBsYXliaW47CisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklO
MykKKyAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IG1fc3RyZWFtQ29sbGVjdGlvbjsK
KyNlbmRpZgorICAgIFN0cmluZyBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkOworICAgIFN0cmluZyBt
X2N1cnJlbnRWaWRlb1N0cmVhbUlkOworICAgIFN0cmluZyBtX2N1cnJlbnRUZXh0U3RyZWFtSWQ7
CiAjaWYgRU5BQkxFKFdFQl9BVURJTykKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9Tb3VyY2VQ
cm92aWRlckdTdHJlYW1lcj4gbV9hdWRpb1NvdXJjZVByb3ZpZGVyOwogI2VuZGlmCkBAIC0yNTQs
MTcgKzI3MCwxNiBAQCBwcml2YXRlOgogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9kb3dubG9h
ZEJ1ZmZlcjsKICAgICBSZWZQdHI8TWVkaWFQbGF5ZXJSZXF1ZXN0SW5zdGFsbE1pc3NpbmdQbHVn
aW5zQ2FsbGJhY2s+IG1fbWlzc2luZ1BsdWdpbnNDYWxsYmFjazsKICNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCi0gICAgVmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4+IG1f
YXVkaW9UcmFja3M7Ci0gICAgVmVjdG9yPFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0
cmVhbWVyPj4gbV90ZXh0VHJhY2tzOwotICAgIFZlY3RvcjxSZWZQdHI8VmlkZW9UcmFja1ByaXZh
dGVHU3RyZWFtZXI+PiBtX3ZpZGVvVHJhY2tzOworICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBS
ZWZQdHI8QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+PiBtX2F1ZGlvVHJhY2tzOworICAgIEhh
c2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1l
cj4+IG1fdGV4dFRyYWNrczsKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPFZpZGVv
VHJhY2tQcml2YXRlR1N0cmVhbWVyPj4gbV92aWRlb1RyYWNrczsKICAgICBSZWZQdHI8SW5iYW5k
TWV0YWRhdGFUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyPiBtX2NoYXB0ZXJzVHJhY2s7Ci0jZW5k
aWYKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYmIFVTRShHU1RSRUFNRVJfTVBFR1RTKQorI2lm
IFVTRShHU1RSRUFNRVJfTVBFR1RTKQogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8
SW5iYW5kTWV0YWRhdGFUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyPj4gbV9tZXRhZGF0YVRyYWNr
czsKKyNlbmRpZgogI2VuZGlmCiAgICAgdmlydHVhbCBib29sIGlzTWVkaWFTb3VyY2UoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogfTsKIH0KIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZS5oCmluZGV4IDAzZmVkZWE5NzU5MmFjMjVlNzgwNGE0ZWQ5ZGI2YWY5OTFlNjkwM2UuLmFlYjJl
YjRmZTI0Y2QzN2M3YTQ5ODU2ZWViYjc5YmFhOGJkOThjOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaApAQCAtMjA5LDcgKzIwOSw4IEBA
IHByb3RlY3RlZDoKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgICAgIFRleHRDaGFuZ2Vk
ID0gMSA8PCA1LAogI2VuZGlmCi0gICAgICAgIFNpemVDaGFuZ2VkID0gMSA8PCA2CisgICAgICAg
IFNpemVDaGFuZ2VkID0gMSA8PCA2LAorICAgICAgICBTdHJlYW1Db2xsZWN0aW9uQ2hhbmdlZCA9
IDEgPDwgNwogICAgIH07CiAKICAgICBXZWFrUHRyRmFjdG9yeTxNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlPiBtX3dlYWtQdHJGYWN0b3J5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJp
dmF0ZUJhc2VHU3RyZWFtZXIuY3BwCmluZGV4IGFmMDY4Y2IwOGU1OGNmZGFjNzBlZjMxNDY0Zjdi
NTQ5ODk2Y2FkOWIuLjhjYTJmOGY3NGM1MDE3MTg0NDhjYzM1NzI2MzkyOGQ2YjI2NzU3YWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFj
a1ByaXZhdGVCYXNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5jcHAKQEAgLTQ3LDYg
KzQ3LDkgQEAgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tQcml2YXRlQmFzZUdTdHJl
YW1lcihUcmFja1ByaXZhdGVCYXNlKiBvd25lciwgZ2kKICAgICA6IG1fbm90aWZpZXIoTWFpblRo
cmVhZE5vdGlmaWVyPE1haW5UaHJlYWROb3RpZmljYXRpb24+OjpjcmVhdGUoKSkKICAgICAsIG1f
aW5kZXgoaW5kZXgpCiAgICAgLCBtX3BhZChwYWQpCisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklO
MykKKyAgICAsIG1fc3RyZWFtKG51bGxwdHIpCisjZW5kaWYKICAgICAsIG1fb3duZXIob3duZXIp
CiB7CiAgICAgQVNTRVJUKG1fcGFkKTsKQEAgLTU5LDYgKzYyLDIyIEBAIFRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXI6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIoVHJhY2tQcml2YXRlQmFzZSog
b3duZXIsIGdpCiAgICAgdGFnc0NoYW5nZWQoKTsKIH0KIAorI2lmIFVTRShHU1RSRUFNRVJfUExB
WUJJTjMpCitUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1ByaXZhdGVCYXNlR1N0cmVh
bWVyKFRyYWNrUHJpdmF0ZUJhc2UqIG93bmVyLCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFN0cmVh
bT4gc3RyZWFtKQorICAgIDogbV9ub3RpZmllcihNYWluVGhyZWFkTm90aWZpZXI8TWFpblRocmVh
ZE5vdGlmaWNhdGlvbj46OmNyZWF0ZSgpKQorICAgICwgbV9pbmRleChpbmRleCkKKyAgICAsIG1f
cGFkKG51bGxwdHIpCisgICAgLCBtX3N0cmVhbShzdHJlYW0pCisgICAgLCBtX293bmVyKG93bmVy
KQoreworICAgIEFTU0VSVChtX3N0cmVhbSk7CisKKyAgICAvLyBXZSBjYW4ndCBjYWxsIG5vdGlm
eVRyYWNrT2ZUYWdzQ2hhbmdlZCgpIGRpcmVjdGx5LCBiZWNhdXNlIHdlIG5lZWQgdGFnc0NoYW5n
ZWQoKQorICAgIC8vIHRvIHNldHVwIG1fdGFncy4KKyAgICB0YWdzQ2hhbmdlZCgpOworfQorI2Vu
ZGlmCisKIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6On5UcmFja1ByaXZhdGVCYXNlR1N0cmVh
bWVyKCkKIHsKICAgICBkaXNjb25uZWN0KCk7CkBAIC02NywxNCArODYsMjAgQEAgVHJhY2tQcml2
YXRlQmFzZUdTdHJlYW1lcjo6flRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIoKQogCiB2b2lkIFRy
YWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OmRpc2Nvbm5lY3QoKQogeworICAgIG1fdGFncy5jbGVh
cigpOworCisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklOMykKKyAgICBpZiAobV9zdHJlYW0pCisg
ICAgICAgIG1fc3RyZWFtLmNsZWFyKCk7CisjZW5kaWYKKworICAgIG1fbm90aWZpZXItPmNhbmNl
bFBlbmRpbmdOb3RpZmljYXRpb25zKCk7CisKICAgICBpZiAoIW1fcGFkKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX25vdGlmaWVyLT5jYW5jZWxQZW5kaW5nTm90aWZpY2F0aW9ucygpOwogICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3BhZC5nZXQoKSwgR19TSUdO
QUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7Ci0KICAgICBtX3Bh
ZC5jbGVhcigpOwotICAgIG1fdGFncy5jbGVhcigpOwogfQogCiB2b2lkIFRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXI6OmFjdGl2ZUNoYW5nZWRDYWxsYmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVh
bWVyKiB0cmFjaykKQEAgLTkwLDExICsxMTUsMjAgQEAgdm9pZCBUcmFja1ByaXZhdGVCYXNlR1N0
cmVhbWVyOjp0YWdzQ2hhbmdlZENhbGxiYWNrKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIqIHQK
IHZvaWQgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6dGFnc0NoYW5nZWQoKQogewogICAgIEdS
ZWZQdHI8R3N0VGFnTGlzdD4gdGFnczsKLSAgICBpZiAoZ19vYmplY3RfY2xhc3NfZmluZF9wcm9w
ZXJ0eShHX09CSkVDVF9HRVRfQ0xBU1MobV9wYWQuZ2V0KCkpLCAidGFncyIpKQotICAgICAgICBn
X29iamVjdF9nZXQobV9wYWQuZ2V0KCksICJ0YWdzIiwgJnRhZ3Mub3V0UHRyKCksIG51bGxwdHIp
OworICAgIGlmIChtX3BhZCkgeworICAgICAgICBpZiAoZ19vYmplY3RfY2xhc3NfZmluZF9wcm9w
ZXJ0eShHX09CSkVDVF9HRVRfQ0xBU1MobV9wYWQuZ2V0KCkpLCAidGFncyIpKQorICAgICAgICAg
ICAgZ19vYmplY3RfZ2V0KG1fcGFkLmdldCgpLCAidGFncyIsICZ0YWdzLm91dFB0cigpLCBudWxs
cHRyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGFncyA9IGFkb3B0R1JlZihnc3RfdGFn
X2xpc3RfbmV3X2VtcHR5KCkpOworICAgIH0KKyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKQor
ICAgIGVsc2UgaWYgKG1fc3RyZWFtKQorICAgICAgICB0YWdzID0gYWRvcHRHUmVmKGdzdF9zdHJl
YW1fZ2V0X3RhZ3MobV9zdHJlYW0uZ2V0KCkpKTsKKyNlbmRpZgogICAgIGVsc2UKICAgICAgICAg
dGFncyA9IGFkb3B0R1JlZihnc3RfdGFnX2xpc3RfbmV3X2VtcHR5KCkpOwogCisgICAgR1NUX0RF
QlVHKCJJbnNwZWN0aW5nIHRyYWNrIGF0IGluZGV4ICVkIHdpdGggdGFnczogJSIgR1NUX1BUUl9G
T1JNQVQsIG1faW5kZXgsIHRhZ3MuZ2V0KCkpOwogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBs
b2NrKG1fdGFnTXV0ZXgpOwogICAgICAgICBtX3RhZ3Muc3dhcCh0YWdzKTsKQEAgLTEwOSw3ICsx
NDMsNyBAQCB2b2lkIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZBY3Rp
dmVDaGFuZ2VkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2Jvb2xlYW4gYWN0aXZlID0gZmFs
c2U7Ci0gICAgaWYgKG1fcGFkICYmIGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkoR19PQkpF
Q1RfR0VUX0NMQVNTKG1fcGFkLmdldCgpKSwgImFjdGl2ZSIpKQorICAgIGlmIChnX29iamVjdF9j
bGFzc19maW5kX3Byb3BlcnR5KEdfT0JKRUNUX0dFVF9DTEFTUyhtX3BhZC5nZXQoKSksICJhY3Rp
dmUiKSkKICAgICAgICAgZ19vYmplY3RfZ2V0KG1fcGFkLmdldCgpLCAiYWN0aXZlIiwgJmFjdGl2
ZSwgbnVsbHB0cik7CiAKICAgICBzZXRBY3RpdmUoYWN0aXZlKTsKQEAgLTE0Myw5ICsxNzcsNiBA
QCBib29sIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OmdldFRhZyhHc3RUYWdMaXN0KiB0YWdz
LCBjb25zdCBnY2hhciogdGFnTmFtZSwgUwogCiB2b2lkIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXI6Om5vdGlmeVRyYWNrT2ZUYWdzQ2hhbmdlZCgpCiB7Ci0gICAgaWYgKCFtX3BhZCkKLSAgICAg
ICAgcmV0dXJuOwotCiAgICAgVHJhY2tQcml2YXRlQmFzZUNsaWVudCogY2xpZW50ID0gbV9vd25l
ci0+Y2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZh
dGVCYXNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oCmluZGV4IDFiYjliZGEyODQ1MzU3ZjE5
ZDNlMWIzZWIwM2Q0Y2M0ZTkyYjEwNWUuLmQ1NDg0NzJlNWIzYzY0N2U3ZGJmYTAyMjQxMmM2ZDEx
YTVmNzgxMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuaApA
QCAtMjMsMTMgKzIzLDEzIEBACiAgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXJfaAotI2RlZmluZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyX2gKKyNwcmFn
bWEgb25jZQogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUo
VklERU9fVFJBQ0spCiAKICNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAi
TWFpblRocmVhZE5vdGlmaWVyLmgiCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgogI2luY2x1ZGUgPHd0
Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQxLDYgKzQx
LDEzIEBAIGNsYXNzIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIgewogcHVibGljOgogICAgIHZp
cnR1YWwgflRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIoKTsKIAorICAgIGVudW0gVHJhY2tUeXBl
IHsKKyAgICAgICAgQXVkaW8sCisgICAgICAgIFZpZGVvLAorICAgICAgICBUZXh0LAorICAgICAg
ICBVbmtub3duCisgICAgfTsKKwogICAgIEdzdFBhZCogcGFkKCkgY29uc3QgeyByZXR1cm4gbV9w
YWQuZ2V0KCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KCk7CkBAIC01MSw3ICs1
OCw5IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXIoVHJhY2tQcml2YXRlQmFzZSogb3duZXIsIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0UGFkPik7
Ci0KKyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKQorICAgIFRyYWNrUHJpdmF0ZUJhc2VHU3Ry
ZWFtZXIoVHJhY2tQcml2YXRlQmFzZSogb3duZXIsIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0U3Ry
ZWFtPik7CisjZW5kaWYKICAgICB2b2lkIG5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2VkKCk7CiAg
ICAgdm9pZCBub3RpZnlUcmFja09mVGFnc0NoYW5nZWQoKTsKIApAQCAtNjcsNiArNzYsOSBAQCBw
cm90ZWN0ZWQ6CiAgICAgQXRvbWljU3RyaW5nIG1fbGFiZWw7CiAgICAgQXRvbWljU3RyaW5nIG1f
bGFuZ3VhZ2U7CiAgICAgR1JlZlB0cjxHc3RQYWQ+IG1fcGFkOworI2lmIFVTRShHU1RSRUFNRVJf
UExBWUJJTjMpCisgICAgR1JlZlB0cjxHc3RTdHJlYW0+IG1fc3RyZWFtOworI2VuZGlmCiAKIHBy
aXZhdGU6CiAgICAgYm9vbCBnZXRMYW5ndWFnZUNvZGUoR3N0VGFnTGlzdCogdGFncywgQXRvbWlj
U3RyaW5nJiB2YWx1ZSk7CkBAIC04Nyw1ICs5OSwzIEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYm
IEVOQUJMRShWSURFT19UUkFDSykKLQotI2VuZGlmIC8vIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5k
ZXggYTZmOTRiODJjMDg5OGVkOGYyZGFmYzM4M2RhZGY2ZjY0NzcxMjAyYy4uNzFhMTQ5MDQ2ZGVl
Y2QwM2UzNjQyMjQyZTU4YTVlOWMyMjk4ZWE0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9U
cmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0yOSwzMyArMjksNDkgQEAKIAogI2luY2x1ZGUg
IlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCiAKKyNpbmNsdWRlICJNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpWaWRlb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lcihHUmVmUHRyPEdzdEVsZW1lbnQ+IHBsYXliaW4sIGdpbnQgaW5kZXgsIEdSZWZQ
dHI8R3N0UGFkPiBwYWQpCitWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6VmlkZW9UcmFja1By
aXZhdGVHU3RyZWFtZXIoV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI+IHBsYXll
ciwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RQYWQ+IHBhZCkKICAgICA6IFRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXIodGhpcywgaW5kZXgsIHBhZCkKLSAgICAsIG1fcGxheWJpbihwbGF5YmluKQor
ICAgICwgbV9wbGF5ZXIocGxheWVyKQogewogICAgIC8vIEZJWE1FOiBHZXQgYSByZWFsIElEIGZy
b20gdGhlIHRraGQgYXRvbS4KICAgICBtX2lkID0gIlYiICsgU3RyaW5nOjpudW1iZXIoaW5kZXgp
OwogICAgIG5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2VkKCk7CiB9CiAKKyNpZiBVU0UoR1NUUkVB
TUVSX1BMQVlCSU4zKQorVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OlZpZGVvVHJhY2tQcml2
YXRlR1N0cmVhbWVyKFdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyPiBwbGF5ZXIs
IGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW0pCisgICAgOiBUcmFja1ByaXZh
dGVCYXNlR1N0cmVhbWVyKHRoaXMsIGluZGV4LCBzdHJlYW0pCisgICAgLCBtX3BsYXllcihwbGF5
ZXIpCit7CisgICAgbV9pZCA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkp
OworICAgIG5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2VkKCk7Cit9CisjZW5kaWYKKwogdm9pZCBW
aWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6ZGlzY29ubmVjdCgpCiB7Ci0gICAgbV9wbGF5Ymlu
LmNsZWFyKCk7CisgICAgbV9wbGF5ZXIgPSBudWxscHRyOwogICAgIFRyYWNrUHJpdmF0ZUJhc2VH
U3RyZWFtZXI6OmRpc2Nvbm5lY3QoKTsKIH0KIAordm9pZCBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJl
YW1lcjo6bWFya0FzQWN0aXZlKCkKK3sKKyAgICBWaWRlb1RyYWNrUHJpdmF0ZTo6c2V0U2VsZWN0
ZWQodHJ1ZSk7Cit9CisKIHZvaWQgVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OnNldFNlbGVj
dGVkKGJvb2wgc2VsZWN0ZWQpCiB7CiAgICAgaWYgKHNlbGVjdGVkID09IHRoaXMtPnNlbGVjdGVk
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBWaWRlb1RyYWNrUHJpdmF0ZTo6c2V0U2VsZWN0ZWQo
c2VsZWN0ZWQpOwogCi0gICAgaWYgKHNlbGVjdGVkICYmIG1fcGxheWJpbikKLSAgICAgICAgZ19v
YmplY3Rfc2V0KG1fcGxheWJpbi5nZXQoKSwgImN1cnJlbnQtdmlkZW8iLCBtX2luZGV4LCBudWxs
cHRyKTsKKyAgICBpZiAoc2VsZWN0ZWQgJiYgbV9wbGF5ZXIpCisgICAgICAgIG1fcGxheWVyLT5l
bmFibGVUcmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlZpZGVvLCBt
X2luZGV4KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0
cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlk
ZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaAppbmRleCA1ZWE3NmUzZmVhMTNkYzg3YTJjYWM1Nzli
M2M4ZTYyNjJjZTM3OGZlLi5iYjE5ZDMxNDcyMGE0NjRhNWY3MDhkYzNkNWUzZDc5N2MyNWQxNjZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaApAQCAtMjMs
OCArMjMsNyBAQAogICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJl
YW1lcl9oCi0jZGVmaW5lIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyX2gKKyNwcmFnbWEgb25j
ZQogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoVklERU9f
VFJBQ0spCiAKQEAgLTMyLDE3ICszMSwyOCBAQAogI2luY2x1ZGUgIlRyYWNrUHJpdmF0ZUJhc2VH
U3RyZWFtZXIuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZS5oIgogCisjaW5jbHVkZSA8
Z3N0L2dzdC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjsKIAogY2xhc3MgVmlkZW9UcmFj
a1ByaXZhdGVHU3RyZWFtZXIgZmluYWwgOiBwdWJsaWMgVmlkZW9UcmFja1ByaXZhdGUsIHB1Ymxp
YyBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFZp
ZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiBjcmVhdGUoR1JlZlB0cjxHc3RFbGVtZW50PiBwbGF5
YmluLCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFBhZD4gcGFkKQorICAgIHN0YXRpYyBSZWY8Vmlk
ZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGNyZWF0ZShXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcj4gcGxheWVyLCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFBhZD4gcGFkKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFt
ZXIocGxheWVyLCBpbmRleCwgcGFkKSk7CisgICAgfQorI2lmIFVTRShHU1RSRUFNRVJfUExBWUJJ
TjMpCisgICAgc3RhdGljIFJlZjxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gY3JlYXRlKFdl
YWtQdHI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyPiBwbGF5ZXIsIGdpbnQgaW5kZXgsIEdS
ZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW0pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihwbGF5YmluLCBpbmRleCwgcGFkKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyKHBs
YXllciwgaW5kZXgsIHN0cmVhbSkpOwogICAgIH0KKyNlbmRpZgogCiAgICAgdm9pZCBkaXNjb25u
ZWN0KCkgb3ZlcnJpZGU7CiAKKyAgICB2b2lkIG1hcmtBc0FjdGl2ZSgpOwogICAgIHZvaWQgc2V0
U2VsZWN0ZWQoYm9vbCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCBlbmFibGVk
KSBvdmVycmlkZSB7IHNldFNlbGVjdGVkKGVuYWJsZWQpOyB9CiAKQEAgLTUzLDE0ICs2MywxNCBA
QCBwdWJsaWM6CiAgICAgQXRvbWljU3RyaW5nIGxhbmd1YWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9sYW5ndWFnZTsgfQogCiBwcml2YXRlOgotICAgIFZpZGVvVHJhY2tQcml2YXRlR1N0
cmVhbWVyKEdSZWZQdHI8R3N0RWxlbWVudD4gcGxheWJpbiwgZ2ludCBpbmRleCwgR1JlZlB0cjxH
c3RQYWQ+KTsKLQorICAgIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyKFdlYWtQdHI8TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyPiwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RQYWQ+KTsKKyNp
ZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKQorICAgIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVy
KFdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyPiwgZ2ludCBpbmRleCwgR1JlZlB0
cjxHc3RTdHJlYW0+KTsKKyNlbmRpZgogICAgIEF0b21pY1N0cmluZyBtX2lkOwotICAgIEdSZWZQ
dHI8R3N0RWxlbWVudD4gbV9wbGF5YmluOworICAgIFdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyPiBtX3BsYXllcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKFZJREVPX1RS
QUNLKQotCi0jZW5kaWYgLy8gVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXJfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQ
aXBlbGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL0FwcGVuZFBpcGVsaW5lLmNwcAppbmRleCBhNTMwMDliOTE5NGZjMDQxMjE3MjY2ZWRhNmUx
ODJmNTJkZjQ4ZmEzLi45Y2QzY2Y2NGQ1ZjFlMjYzNTFlMWJlN2M3ZTJjMmZjNmNlMTNmN2FjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L0FwcGVuZFBpcGVsaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcApAQCAtMTA3MywxMSArMTA3MywxMSBA
QCB2b2lkIEFwcGVuZFBpcGVsaW5lOjpjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2luayhHc3RQ
YWQqIGRlbXV4ZXJTcmNQYWQpCiAgICAgc3dpdGNoIChtX3N0cmVhbVR5cGUpIHsKICAgICBjYXNl
IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW86CiAgICAgICAg
IGlmIChtX3BsYXllclByaXZhdGUpCi0gICAgICAgICAgICBtX3RyYWNrID0gV2ViQ29yZTo6QXVk
aW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShtX3BsYXllclByaXZhdGUtPnBpcGVsaW5l
KCksIGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKKyAgICAgICAgICAgIG1fdHJhY2sgPSBXZWJD
b3JlOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1fcGxheWVyUHJpdmF0ZS0+
Y3JlYXRlV2Vha1B0cigpLCBpZCgpLCBzaW5rU2lua1BhZC5nZXQoKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRl
bzoKICAgICAgICAgaWYgKG1fcGxheWVyUHJpdmF0ZSkKLSAgICAgICAgICAgIG1fdHJhY2sgPSBX
ZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1fcGxheWVyUHJpdmF0
ZS0+cGlwZWxpbmUoKSwgaWQoKSwgc2lua1NpbmtQYWQuZ2V0KCkpOworICAgICAgICAgICAgbV90
cmFjayA9IFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobV9wbGF5
ZXJQcml2YXRlLT5jcmVhdGVXZWFrUHRyKCksIGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3Ry
ZWFtZXI6OlRleHQ6CiAgICAgICAgIG1fdHJhY2sgPSBXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoaWQoKSwgc2lua1NpbmtQYWQuZ2V0KCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3Bw
CmluZGV4IDkxOGM0Mjc2N2NjYmNjM2MyY2E4ODg2MmUzOTA2OGNjMTljZDlhNjcuLjQwZWFlOWEx
ZTE2ZTY3ZDc3YzFmYWIwMGViOTc2NzFhZjI2NmQ0MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKQEAgLTQ4NiwxMCAr
NDg2LDkgQEAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjpidWZmZXJlZCgpIGMKICAgICByZXR1cm4gbV9tZWRpYVNvdXJj
ZSA/IG1fbWVkaWFTb3VyY2UtPmJ1ZmZlcmVkKCkgOiBzdGQ6Om1ha2VfdW5pcXVlPFBsYXRmb3Jt
VGltZVJhbmdlcz4oKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OnNvdXJjZUNoYW5nZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNv
dXJjZVNldHVwKEdzdEVsZW1lbnQqIHNvdXJjZUVsZW1lbnQpCiB7Ci0gICAgbV9zb3VyY2UgPSBu
dWxscHRyOwotICAgIGdfb2JqZWN0X2dldChtX3BpcGVsaW5lLmdldCgpLCAic291cmNlIiwgJm1f
c291cmNlLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBtX3NvdXJjZSA9IHNvdXJjZUVsZW1lbnQ7
CiAKICAgICBBU1NFUlQoV0VCS0lUX0lTX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSkpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0Uu
aAppbmRleCBlMzVjMDY0YjQwY2ZlY2M0N2MzZjJjNmIzYTZlMWNjMTEzMDEwMjRkLi4xODFlNDMy
OTFiYjZkMDljYmQzNzdkM2NjMWE0N2ZhNTY4NGRjMjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKQEAgLTcxLDcgKzcxLDcg
QEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZl
cmVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgTWVkaWFUaW1lIG1heE1lZGlhVGltZVNlZWthYmxl
KCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNvdXJjZUNoYW5nZWQoKSBvdmVycmlkZTsK
KyAgICB2b2lkIHNvdXJjZVNldHVwKEdzdEVsZW1lbnQqKSBvdmVycmlkZTsKIAogICAgIHZvaWQg
c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7CiAgICAgdm9pZCB3YWl0Rm9y
U2Vla0NvbXBsZXRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmlu
aXRpb25zLmNtYWtlIGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlCmlu
ZGV4IDAzOTM4Yzg3NzRlNmZlNzVhMWNlYzYwY2ZjY2ZjZjY3ZWRkYmI0OWMuLjYyYTY5ZDg4Yzhl
NWE3OTU4M2NmNTU4Y2E5MTFjZDhlMjBmZjcyNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9H
U3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVm
aW5pdGlvbnMuY21ha2UKQEAgLTUsMyArNSw0IEBAIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9NRURJQV9TT1VSQ0UgUFJJVkFURSBPTikKIAogV0VCS0lUX09QVElPTl9E
RUZJTkUoVVNFX0dTVFJFQU1FUl9HTCAiV2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgR1N0
cmVhbWVyIEdMIiBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1F
Ul9NUEVHVFMgIldoZXRoZXIgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIE1QRUctVFMiIFBSSVZBVEUg
T0ZGKQorV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9QTEFZQklOMyAiV2hldGhl
ciB0byBlbmFibGUgc3VwcG9ydCBmb3IgR1N0cmVhbWVyJ3MgcGxheWJpbjMgZWxlbWVudCIgUFJJ
VkFURSBPRkYpCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggN2JkYzg5
MjFiY2E4NDVkZjczY2ZjMjJjOThhZjBlOTkxY2RjNTVhOC4uZjQyNDM2ZTkyOTg0MTMwYTRiZWU3
M2FjOGVkZjBjMjYxZjA1NjJhNiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDE4LTAyLTE1ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1h
bmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBQbGF5YmluMyBzdXBwb3J0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI1MzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9j
bWFrZS9HU3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZTogTmV3CisgICAgICAgIFVTRShHU1RSRUFN
RVJfUExBWUJJTjMpIGZlYXR1cmUuIFRoaXMgc2hvdWxkIGJlIGVuYWJsZWQgb25seSBmb3IKKyAg
ICAgICAgdmVyeSByZWNlbnQgdmVyc2lvbnMgb2YgR1N0cmVhbWVyICgxLjE0IGF0IGxlYXN0KSBh
bmQgaXMgb3B0aW9uYWwsIGZvciBub3cuCisKIDIwMTgtMDItMDkgIFJvc3MgS2lyc2xpbmcgIDxy
b3NzLmtpcnNsaW5nQHNvbnkuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IC5naXRpZ25vcmUncyBX
ZWJLaXRMaWJyYXJpZXMvd2luIHNlY3Rpb24uCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>334026</attachid>
            <date>2018-02-16 02:07:12 -0800</date>
            <delta_ts>2018-02-19 00:11:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182530-20180216100711.patch</filename>
            <type>text/plain</type>
            <size>64253</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI4NTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTcwMWNhZDRkMGFiMDlk
OTY2NTNhMmNjMjllZDlhMzM3NTlmNjZlNC4uMTA0MmUxNzM0Nzc4ZTgyNDBjOWE4MDRhMzlhZDc3
MjcxYjdiNmZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMSBAQAorMjAxOC0wMi0xNSAgUGhp
bGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1l
cl0gUGxheWJpbjMgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTgyNTMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9wdC1pbiBzdXBwb3J0IGZvciB0aGUg
cGxheWJpbjMgR1N0cmVhbWVyCisgICAgICAgIGVsZW1lbnQuIFRoaXMgbmV3IHBsYXliYWNrIGVs
ZW1lbnQgaXMgc3RpbGwgY29uc2lkZXJlZAorICAgICAgICBleHBlcmltZW50YWwgYnV0IGl0IGNh
biBzdGlsbCBiZSB2ZXJ5IHVzZWZ1bCBmb3IgbWVkaWEgYXNzZXRzCisgICAgICAgIGNvbnRhaW5p
bmcgbXVsdGlwbGUgdHJhY2tzIG9mIHRoZSBzYW1lIHR5cGUuIEluIHN1Y2ggc2NlbmFyaW8KKyAg
ICAgICAgYXVkaW8vdmlkZW8gZGVjb2RlcnMgd291bGQgYmUgY3JlYXRlZCBvbmx5IGZvciB0aGUg
c2VsZWN0ZWQgdHJhY2tzCisgICAgICAgIHdoZXJlYXMgcGxheWJpbjIgY3JlYXRlcyBkZWNvZGVy
IGZvciBlYWNoIHRyYWNrLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcDogVGFrZQorICAgICAgICBhIHdlYWsgcG9p
bnRlciBvZiB0aGUgbWVkaWEgcGxheWVyIGluc3RlYWQgb2YgcGxheWJpbiBhbmQgY2FsbCB0aGUK
KyAgICAgICAgcGxheWVyIHdoZW4gZW5hYmxpbmcgdHJhY2tzLiBBbHNvIHVzZSB0aGUgR3N0U3Ry
ZWFtIEFQSSBpbnN0ZWFkIG9mCisgICAgICAgIGluc3BlY3RpbmcgdGhlIHBhZCB3aGVuIHBsYXli
aW4zIGlzIHVzZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
cjo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9U
cmFja1ByaXZhdGVHU3RyZWFtZXI6OmRpc2Nvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6Om1hcmtBc0FjdGl2ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6c2V0RW5hYmxlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3Bw
OiBHc3RTdHJlYW0gYW5kCisgICAgICAgIEdzdFN0cmVhbUNvbGxlY3Rpb24gc21hcnQgcG9pbnRl
ciBzdXBwb3J0LgorICAgICAgICAoV1RGOjphZG9wdEdSZWYpOgorICAgICAgICAoV1RGOjpyZWZH
UHRyPEdzdFN0cmVhbT4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8R3N0U3RyZWFtPik6Cisg
ICAgICAgIChXVEY6OnJlZkdQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4pOgorICAgICAgICAoV1RG
OjpkZXJlZkdQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwOgor
ICAgICAgICBVc2UgdGhlIEdzdFN0cmVhbSBBUEkgaW5zdGVhZCBvZiBpbnNwZWN0aW5nIHRoZSBw
YWQgd2hlbiBwbGF5YmluMworICAgICAgICBpcyB1c2VkLgorICAgICAgICAoV2ViQ29yZTo6SW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJl
YW1lcik6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
OjpkaXNjb25uZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcik6CisgICAgICAgIG1fe2F1ZGlvLHZpZGVvLHRleHR9VHJhY2tzIGFyZSBu
b3cgaGFzaG1hcHMsIHdoaWNoIGlzIGEgYml0IG1vcmUKKyAgICAgICAgY29udmVuaWVudCB0byB1
c2UgdGhhbiBWZWN0b3JzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp1cGRhdGVUcmFja3MpOiBVcGRhdGUgb3VyCisgICAgICAgIHRyYWNrcyBpbXBsZW1l
bnRhdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBzdHJlYW1zIHN0b3JlZCBpbiB0aGUKKyAgICAgICAg
Y29sbGVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6ZW5hYmxlVHJhY2spOiBBY3RpdmF0ZSB0aGUKKyAgICAgICAgZ2l2ZW4gdHJhY2suIFRoaXMg
bWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgVHJhY2tQcml2YXRlCisgICAgICAgIGltcGxlbWVudGF0
aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5UGxheWVyT2ZWaWRlbyk6CisgICAgICAgIFJlZmFjdG9yZWQgbGVnYWN5IChwbGF5YmluMikg
c3VwcG9ydCBmb3IgdHJhY2sgaGFzaG1hcCBzdG9yYWdlLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXll
ck9mVGV4dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpuZXdUZXh0U2FtcGxlKTogVXNlIHRyYWNrIGhhc2htYXAgc3RvcmFnZS4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZSk6
IFJlYWN0IG9uCisgICAgICAgIHBsYXliaW4zIEdzdFN0cmVhbSBtZXNzYWdlcywgc3RvcmUgdGhl
IGNvbGxlY3Rpb24gcHJvdmlkZWQgYW5kCisgICAgICAgIGFjdGl2YXRlIHRoZSBnaXZlbiBzZWxl
Y3RlZCBzdHJlYW1zIGFjY29yZGluZ2x5LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpwdXJnZUludmFsaWRBdWRpb1RyYWNrcyk6IEludmFsaWRhdGUgdHJh
Y2tzIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZFZpZGVvVHJhY2tzKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZFRleHRUcmFj
a3MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c291cmNlU2V0dXBDYWxsYmFjayk6CisgICAgICAgIFJlZmFjdG9yaW5nLCB1c2Ugc291cmNl
LXNldHVwIHNpZ25hbCBpbnN0ZWFkIG9mIHRoZSBzb3VyY2UKKyAgICAgICAgcHJvcGVydHkgd2hp
Y2ggaXMgbm90IHN1cHBvcnRlZCBpbiBwbGF5YmluMy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJhY2sp
OgorICAgICAgICBQcm9tb3RlZCBsb2dnaW5nIG1lc3NhZ2VzLCBHU1RfVFJBQ0Ugc2hvdWxkIGJl
IHVzZWQgZm9yIHZlcnkKKyAgICAgICAgZnJlcXVlbnQgYW5kIGxlc3MgaW50ZXJlc3RpbmcgbWVz
c2FnZXMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRv
d25sb2FkQnVmZmVyRmlsZUNyZWF0ZWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VTZXR1cCk6IENhbGxlZCBieSB0
aGUgc291cmNlLXNldHVwIHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXREb3dubG9hZEJ1ZmZlcmluZyk6IERlYnVnZ2luZyBt
ZXNzYWdlIGFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzZXRQcmVsb2FkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4pOiBDcmVhdGUgYQorICAgICAgICBwbGF5
YmluMyBlbGVtZW50IGlmIFVTRShHU1RSRUFNRVJfUExBWUJJTjMpIHdhcyBlbmFibGVkIGFuZAor
ICAgICAgICBjb25uZWN0IHRvIHBsYXliaW4yIHNpZ25hbHMgb3RoZXJ3aXNlLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRl
V2Vha1B0cik6IFByb21vdGVkIHRvIHB1YmxpYy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oOgorICAgICAgICBO
ZXcgU3RyZWFtQ29sbGVjdGlvbkNoYW5nZWQgbm90aWZpY2F0aW9uIHR5cGUsIHVzZWQgdGhlIHN1
Yi1jbGFzcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2
YXRlQmFzZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNl
R1N0cmVhbWVyOjpUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKTogU3VwcG9ydCBmb3IgR3N0U3Ry
ZWFtIEFQSS4KKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OmRp
c2Nvbm5lY3QpOiBDbGVhciBHc3RTdHJlYW0gdG9vLgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lcjo6dGFnc0NoYW5nZWQpOiBHZXQgdGFncyBmcm9tIEdzdFN0cmVh
bS4KKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRy
YWNrT2ZBY3RpdmVDaGFuZ2VkKTogTm8gbmVlZCB0byBjaGVjayBtX3BhZCB0d2ljZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZUYWdz
Q2hhbmdlZCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9U
cmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcDogVGFrZQorICAgICAgICBh
IHdlYWsgcG9pbnRlciBvZiB0aGUgbWVkaWEgcGxheWVyIGluc3RlYWQgb2YgcGxheWJpbiBhbmQg
Y2FsbCB0aGUKKyAgICAgICAgcGxheWVyIHdoZW4gZW5hYmxpbmcgdHJhY2tzLiBBbHNvIHVzZSB0
aGUgR3N0U3RyZWFtIEFQSSBpbnN0ZWFkIG9mCisgICAgICAgIGluc3BlY3RpbmcgdGhlIHBhZCB3
aGVuIHBsYXliaW4zIGlzIHVzZWQuCisgICAgICAgIChXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lcjo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmRpc2Nvbm5lY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6Om1hcmtBc0FjdGl2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6c2V0U2VsZWN0ZWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJl
YW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5k
UGlwZWxpbmUuY3BwOiBQYXNzIHBsYXllciBwb2ludGVyIHRvIHRyYWNrIGNvbnN0cnVjdG9yLgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9B
cHBzaW5rKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHA6IFNvdXJjZS1zZXR1cCBzaWduYWwgaGFuZGxl
ci4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c291
cmNlU2V0dXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmg6CisKIDIwMTgtMDItMTYgIFphbiBEb2JlcnNl
ayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEhhcmZCdXp6RmFjZSBzaG91bGQg
b3BlcmF0ZSB3aXRoIGEgRm9udFBsYXRmb3JtRGF0YSByZWZlcmVuY2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9BdWRpb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IGZjMmQ2NzQ3MTlhMzU2Mjlj
Y2FiYzNlYzdmMDZkMTA5YzFjMGIxNDYuLmE1YTBkNjhlYWYwYjJhY2JiMzA2NWFlYWJjOTM4ODg4
ZWI1MGMzY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9BdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVy
LmNwcApAQCAtMjksMzMgKzI5LDQ5IEBACiAKICNpbmNsdWRlICJBdWRpb1RyYWNrUHJpdmF0ZUdT
dHJlYW1lci5oIgogCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCiAj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1BdWRpb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lcjo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIoR1JlZlB0cjxH
c3RFbGVtZW50PiBwbGF5YmluLCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFBhZD4gcGFkKQorQXVk
aW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyKFdlYWtQ
dHI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyPiBwbGF5ZXIsIGdpbnQgaW5kZXgsIEdSZWZQ
dHI8R3N0UGFkPiBwYWQpCiAgICAgOiBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKHRoaXMsIGlu
ZGV4LCBwYWQpCi0gICAgLCBtX3BsYXliaW4ocGxheWJpbikKKyAgICAsIG1fcGxheWVyKHBsYXll
cikKIHsKICAgICAvLyBGSVhNRTogR2V0IGEgcmVhbCBJRCBmcm9tIHRoZSB0a2hkIGF0b20uCiAg
ICAgbV9pZCA9ICJBIiArIFN0cmluZzo6bnVtYmVyKGluZGV4KTsKICAgICBub3RpZnlUcmFja09m
QWN0aXZlQ2hhbmdlZCgpOwogfQogCisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklOMykKK0F1ZGlv
VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRy
PE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4gcGxheWVyLCBnaW50IGluZGV4LCBHUmVmUHRy
PEdzdFN0cmVhbT4gc3RyZWFtKQorICAgIDogVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcih0aGlz
LCBpbmRleCwgc3RyZWFtKQorICAgICwgbV9wbGF5ZXIocGxheWVyKQoreworICAgIG1faWQgPSBn
c3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKTsKKyAgICBub3RpZnlUcmFja09m
QWN0aXZlQ2hhbmdlZCgpOworfQorI2VuZGlmCisKIHZvaWQgQXVkaW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXI6OmRpc2Nvbm5lY3QoKQogewotICAgIG1fcGxheWJpbi5jbGVhcigpOworICAgIG1fcGxh
eWVyID0gbnVsbHB0cjsKICAgICBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpkaXNjb25uZWN0
KCk7CiB9CiAKK3ZvaWQgQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6Om1hcmtBc0FjdGl2ZSgp
Cit7CisgICAgQXVkaW9UcmFja1ByaXZhdGU6OnNldEVuYWJsZWQodHJ1ZSk7Cit9CisKIHZvaWQg
QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQogewog
ICAgIGlmIChlbmFibGVkID09IHRoaXMtPmVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IEF1ZGlvVHJhY2tQcml2YXRlOjpzZXRFbmFibGVkKGVuYWJsZWQpOwogCi0gICAgaWYgKGVuYWJs
ZWQgJiYgbV9wbGF5YmluKQotICAgICAgICBnX29iamVjdF9zZXQobV9wbGF5YmluLmdldCgpLCAi
Y3VycmVudC1hdWRpbyIsIG1faW5kZXgsIG51bGxwdHIpOworICAgIGlmIChlbmFibGVkICYmIG1f
cGxheWVyKQorICAgICAgICBtX3BsYXllci0+ZW5hYmxlVHJhY2soVHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lcjo6VHJhY2tUeXBlOjpBdWRpbywgbV9pbmRleCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9BdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgKaW5k
ZXggNDcyYWE3ZGRkZDVmMzQ5NGVlYzM0OTZiNDhiNzNmYmYxMDJkYWMzZC4uM2ZkZDZlNjhkZTU3
NzdjNWU4NjIyZTM3NmZmMDQ3N2Y0MzRiYmFmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTIzLDI3ICsyMywzNyBAQAogICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcl9oCi0jZGVmaW5lIEF1ZGlvVHJhY2tQ
cml2YXRlR1N0cmVhbWVyX2gKKyNwcmFnbWEgb25jZQogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBV
U0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCiAKICNpbmNsdWRlICJBdWRpb1Ry
YWNrUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJU
cmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1
ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjsKIAogY2xhc3MgQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIg
ZmluYWwgOiBwdWJsaWMgQXVkaW9UcmFja1ByaXZhdGUsIHB1YmxpYyBUcmFja1ByaXZhdGVCYXNl
R1N0cmVhbWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRl
R1N0cmVhbWVyPiBjcmVhdGUoR1JlZlB0cjxHc3RFbGVtZW50PiBwbGF5YmluLCBnaW50IGluZGV4
LCBHUmVmUHRyPEdzdFBhZD4gcGFkKQorICAgIHN0YXRpYyBSZWZQdHI8QXVkaW9UcmFja1ByaXZh
dGVHU3RyZWFtZXI+IGNyZWF0ZShXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4g
cGxheWVyLCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFBhZD4gcGFkKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIocGxheWJpbiwg
aW5kZXgsIHBhZCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBdWRpb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcihwbGF5ZXIsIGluZGV4LCBwYWQpKTsKICAgICB9CiAKKyNpZiBVU0UoR1NU
UkVBTUVSX1BMQVlCSU4zKQorICAgIHN0YXRpYyBSZWZQdHI8QXVkaW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXI+IGNyZWF0ZShXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4gcGxheWVy
LCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFtKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIocGxheWVyLCBp
bmRleCwgc3RyZWFtKSk7CisgICAgfQorI2VuZGlmCisKICAgICB2b2lkIGRpc2Nvbm5lY3QoKSBv
dmVycmlkZTsKIAogICAgIHZvaWQgc2V0RW5hYmxlZChib29sKSBvdmVycmlkZTsKKyAgICB2b2lk
IG1hcmtBc0FjdGl2ZSgpOwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wgZW5hYmxlZCkgb3ZlcnJp
ZGUgeyBzZXRFbmFibGVkKGVuYWJsZWQpOyB9CiAKICAgICBpbnQgdHJhY2tJbmRleCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1faW5kZXg7IH0KQEAgLTUzLDE0ICs2MywxNSBAQCBwdWJsaWM6
CiAgICAgQXRvbWljU3RyaW5nIGxhbmd1YWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9s
YW5ndWFnZTsgfQogCiBwcml2YXRlOgotICAgIEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyKEdS
ZWZQdHI8R3N0RWxlbWVudD4gcGxheWJpbiwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RQYWQ+KTsK
KyAgICBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcj4sIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0UGFkPik7CisjaWYgVVNFKEdTVFJF
QU1FUl9QTEFZQklOMykKKyAgICBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4sIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0U3RyZWFt
Pik7CisjZW5kaWYKIAogICAgIEF0b21pY1N0cmluZyBtX2lkOwotICAgIEdSZWZQdHI8R3N0RWxl
bWVudD4gbV9wbGF5YmluOworICAgIFdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
PiBtX3BsYXllcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQotCi0j
ZW5kaWYgLy8gQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXJfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3Ry
ZWFtZXIuY3BwCmluZGV4IGE3NjU0Y2M0NmM2MDgxODc1MWMzYWU4ODhjMzdkYmE2Mzk3ZTViZjYu
LmVlYWVkOGZmNTEyNjBkZjlkMGYwMWM1OGIzODI4NjU5ZDFkNmVjYmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1Jl
ZlB0ckdTdHJlYW1lci5jcHAKQEAgLTM1Myw2ICszNTMsNDggQEAgdGVtcGxhdGUgPD4gdm9pZCBk
ZXJlZkdQdHI8R3N0UXVlcnk+KEdzdFF1ZXJ5KiBwdHIpCiAgICAgICAgIGdzdF9xdWVyeV91bnJl
ZihwdHIpOwogfQogCisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklOMykKK3RlbXBsYXRlIDw+IEdS
ZWZQdHI8R3N0U3RyZWFtPiBhZG9wdEdSZWYoR3N0U3RyZWFtKiBwdHIpCit7CisgICAgQVNTRVJU
KCFwdHIgfHwgIWdfb2JqZWN0X2lzX2Zsb2F0aW5nKHB0cikpOworICAgIHJldHVybiBHUmVmUHRy
PEdzdFN0cmVhbT4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RTdHJl
YW0qIHJlZkdQdHI8R3N0U3RyZWFtPihHc3RTdHJlYW0qIHB0cikKK3sKKyAgICBpZiAocHRyKQor
ICAgICAgICBnc3Rfb2JqZWN0X3JlZl9zaW5rKEdTVF9PQkpFQ1RfQ0FTVChwdHIpKTsKKworICAg
IHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFN0cmVhbT4o
R3N0U3RyZWFtKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJl
ZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IGFk
b3B0R1JlZihHc3RTdHJlYW1Db2xsZWN0aW9uKiBwdHIpCit7CisgICAgQVNTRVJUKCFwdHIgfHwg
IWdfb2JqZWN0X2lzX2Zsb2F0aW5nKHB0cikpOworICAgIHJldHVybiBHUmVmUHRyPEdzdFN0cmVh
bUNvbGxlY3Rpb24+KHB0ciwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVtcGxhdGUgPD4gR3N0U3Ry
ZWFtQ29sbGVjdGlvbiogcmVmR1B0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPihHc3RTdHJlYW1Db2xs
ZWN0aW9uKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF9yZWZfc2lu
ayhHU1RfT0JKRUNUX0NBU1QocHRyKSk7CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0
ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPihHc3RTdHJlYW1Db2xsZWN0
aW9uKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIp
OworfQorI2VuZGlmCisKIHRlbXBsYXRlIDw+IEdSZWZQdHI8V2ViS2l0VmlkZW9TaW5rPiBhZG9w
dEdSZWYoV2ViS2l0VmlkZW9TaW5rKiBwdHIpCiB7CiAgICAgQVNTRVJUKCFwdHIgfHwgIWdfb2Jq
ZWN0X2lzX2Zsb2F0aW5nKHB0cikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKaW5kZXggYTM4
OGNhMzZjNzU4MDE0YTZmYTY2MzIwYWMyMzMyYmJkZDEyYjRhMy4uODNiZmRlYzEyODUxNjczMzc3
NDU1MGNlNDUyYWRjMGJmYTU4OGI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oCkBAIC0x
Nyw4ICsxNyw4IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lm
bmRlZiBHUmVmUHRyR1N0cmVhbWVyX2gKLSNkZWZpbmUgR1JlZlB0ckdTdHJlYW1lcl9oCisjcHJh
Z21hIG9uY2UKKwogI2lmIFVTRShHU1RSRUFNRVIpCiAKICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVm
UHRyLmg+CkBAIC00Myw2ICs0MywxMSBAQCB0eXBlZGVmIHN0cnVjdCBfR3N0UXVlcnkgR3N0UXVl
cnk7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rIFdlYktpdFZpZGVvU2luazsKIHR5
cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJTcmMgV2ViS2l0V2ViU3JjOwogCisjaWYgVVNFKEdTVFJF
QU1FUl9QTEFZQklOMykKK3R5cGVkZWYgc3RydWN0IF9Hc3RTdHJlYW0gR3N0U3RyZWFtOwordHlw
ZWRlZiBzdHJ1Y3QgX0dzdFN0cmVhbUNvbGxlY3Rpb24gR3N0U3RyZWFtQ29sbGVjdGlvbjsKKyNl
bmRpZgorCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKIHR5cGVkZWYgc3RydWN0IF9Hc3RHTERpc3Bs
YXkgR3N0R0xEaXNwbGF5OwogdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMQ29udGV4dCBHc3RHTENvbnRl
eHQ7CkBAIC0xMjcsNiArMTMyLDE2IEBAIEdSZWZQdHI8V2ViS2l0V2ViU3JjPiBlbnN1cmVHUmVm
KFdlYktpdFdlYlNyYyogcHRyKTsKIHRlbXBsYXRlPD4gV2ViS2l0V2ViU3JjKiByZWZHUHRyPFdl
YktpdFdlYlNyYz4oV2ViS2l0V2ViU3JjKiBwdHIpOwogdGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0
cjxXZWJLaXRXZWJTcmM+KFdlYktpdFdlYlNyYyogcHRyKTsKIAorI2lmIFVTRShHU1RSRUFNRVJf
UExBWUJJTjMpCit0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0U3RyZWFtPiBhZG9wdEdSZWYoR3N0U3Ry
ZWFtKik7Cit0ZW1wbGF0ZTw+IEdzdFN0cmVhbSogcmVmR1B0cjxHc3RTdHJlYW0+KEdzdFN0cmVh
bSopOwordGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxHc3RTdHJlYW0+KEdzdFN0cmVhbSopOwor
Cit0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gYWRvcHRHUmVmKEdzdFN0
cmVhbUNvbGxlY3Rpb24qKTsKK3RlbXBsYXRlPD4gR3N0U3RyZWFtQ29sbGVjdGlvbiogcmVmR1B0
cjxHc3RTdHJlYW1Db2xsZWN0aW9uPihHc3RTdHJlYW1Db2xsZWN0aW9uKik7Cit0ZW1wbGF0ZTw+
IHZvaWQgZGVyZWZHUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+KEdzdFN0cmVhbUNvbGxlY3Rpb24q
KTsKKyNlbmRpZgorCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKIHRlbXBsYXRlPD4gR1JlZlB0cjxH
c3RHTERpc3BsYXk+IGFkb3B0R1JlZihHc3RHTERpc3BsYXkqIHB0cik7CiB0ZW1wbGF0ZTw+IEdz
dEdMRGlzcGxheSogcmVmR1B0cjxHc3RHTERpc3BsYXk+KEdzdEdMRGlzcGxheSogcHRyKTsKQEAg
LTE0MCw1ICsxNTUsMyBAQCB0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPEdzdEdMQ29udGV4dD4o
R3N0R0xDb250ZXh0KiBwdHIpOwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0Uo
R1NUUkVBTUVSKQotCi0jZW5kaWYgLy8gR1JlZlB0ckdTdHJlYW1lcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggMjRlNThm
MTYwNzQ4ZmRkOWJlMTRiYTg3NjIzYzIzMTA4M2NhNjlmOS4uMzRjZTgzMDg5NDU5ZjQ5YzI0MzE5
MDQ4ODU5NTcwYTMyMmY3M2ZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0
VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNDAsNyArNDAsOCBAQCBHU1RfREVCVUdfQ0FU
RUdPUllfRVhURVJOKHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcpOwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlR1N0cmVhbWVyKGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0UGFkPiBwYWQpCi0gICAgOiBJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlKFdlYlZUVCksIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIo
dGhpcywgaW5kZXgsIHBhZCkKKyAgICA6IEluYmFuZFRleHRUcmFja1ByaXZhdGUoV2ViVlRUKQor
ICAgICwgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcih0aGlzLCBpbmRleCwgcGFkKQogewogICAg
IG1fZXZlbnRQcm9iZSA9IGdzdF9wYWRfYWRkX3Byb2JlKG1fcGFkLmdldCgpLCBHU1RfUEFEX1BS
T0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSwgW10gKEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyog
aW5mbywgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IEdzdFBhZFByb2JlUmV0dXJuIHsKICAgICAgICAg
YXV0byogdHJhY2sgPSBzdGF0aWNfY2FzdDxJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
Kj4odXNlckRhdGEpOwpAQCAtNTcsMTIgKzU4LDIwIEBAIEluYmFuZFRleHRUcmFja1ByaXZhdGVH
U3RyZWFtZXI6OkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIoZ2ludCBpbmRleCwgR1Jl
CiAgICAgbm90aWZ5VHJhY2tPZlN0cmVhbUNoYW5nZWQoKTsKIH0KIAotdm9pZCBJbmJhbmRUZXh0
VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpkaXNjb25uZWN0KCkKKyNpZiBVU0UoR1NUUkVBTUVSX1BM
QVlCSU4zKQorSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6SW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUdTdHJlYW1lcihnaW50IGluZGV4LCBHUmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFtKQor
ICAgIDogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZShXZWJWVFQpCisgICAgLCBUcmFja1ByaXZhdGVC
YXNlR1N0cmVhbWVyKHRoaXMsIGluZGV4LCBzdHJlYW0pCiB7Ci0gICAgaWYgKCFtX3BhZCkKLSAg
ICAgICAgcmV0dXJuOworICAgIG1fc3RyZWFtSWQgPSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQo
c3RyZWFtLmdldCgpKTsKKyAgICBHU1RfSU5GTygiVHJhY2sgJWQgZ290IHN0cmVhbSBzdGFydCBm
b3Igc3RyZWFtICVzLiIsIG1faW5kZXgsIG1fc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7Cit9Cisj
ZW5kaWYKIAotICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlKG1fcGFkLmdldCgpLCBtX2V2ZW50UHJv
YmUpOwordm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpkaXNjb25uZWN0KCkK
K3sKKyAgICBpZiAobV9wYWQpCisgICAgICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlKG1fcGFkLmdl
dCgpLCBtX2V2ZW50UHJvYmUpOwogCiAgICAgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6ZGlz
Y29ubmVjdCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRl
R1N0cmVhbWVyLmgKaW5kZXggNmE5MDc0NGU1OTA5MDE5MzkwZWFiN2U3ZThkNjk5ODhhZTQxMTZi
Zi4uMzI0YTI3MDhhYmZjZDBjNDhhNGFhNGNkZWQ0Njc0MDZhZTVmYmQxZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFj
a1ByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0yMywyMCAr
MjMsMTkgQEAKICAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdT
dHJlYW1lcl9oCi0jZGVmaW5lIEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXJfaAorI3By
YWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJM
RShWSURFT19UUkFDSykKIAogI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKICNpbmNsdWRl
ICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmgiCiAjaW5jbHVkZSAiVHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lci5oIgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTYW1wbGUgR3N0U2FtcGxlOwogCiBjbGFzcyBJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyIDogcHVibGljIEluYmFuZFRleHRUcmFja1ByaXZhdGUs
IHB1YmxpYyBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyIHsKIHB1YmxpYzoKQEAgLTQ1LDYgKzQ0
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUdTdHJlYW1lcihpbmRleCwgcGFkKSk7CiAgICAgfQogCisjaWYgVVNFKEdTVFJF
QU1FUl9QTEFZQklOMykKKyAgICBzdGF0aWMgUmVmPEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3Ry
ZWFtZXI+IGNyZWF0ZShnaW50IGluZGV4LCBHUmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFtKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdT
dHJlYW1lcihpbmRleCwgc3RyZWFtKSk7CisgICAgfQorI2VuZGlmCisKICAgICB2b2lkIGRpc2Nv
bm5lY3QoKSBvdmVycmlkZTsKIAogICAgIEF0b21pY1N0cmluZyBsYWJlbCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fbGFiZWw7IH0KQEAgLTU3LDYgKzYzLDkgQEAgcHVibGljOgogCiBwcml2
YXRlOgogICAgIEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIoZ2ludCBpbmRleCwgR1Jl
ZlB0cjxHc3RQYWQ+KTsKKyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKQorICAgIEluYmFuZFRl
eHRUcmFja1ByaXZhdGVHU3RyZWFtZXIoZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RTdHJlYW0+KTsK
KyNlbmRpZgogCiAgICAgdm9pZCBzdHJlYW1DaGFuZ2VkKCk7CiAKQEAgLTY0LDcgKzczLDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeVRyYWNrT2ZTdHJlYW1DaGFuZ2VkKCk7CiAKICAgICBn
dWxvbmcgbV9ldmVudFByb2JlOwotICAgIFZlY3RvcjxHUmVmUHRyPEdzdFNhbXBsZT4gPiBtX3Bl
bmRpbmdTYW1wbGVzOworICAgIFZlY3RvcjxHUmVmUHRyPEdzdFNhbXBsZT4+IG1fcGVuZGluZ1Nh
bXBsZXM7CiAgICAgU3RyaW5nIG1fc3RyZWFtSWQ7CiAgICAgTG9jayBtX3NhbXBsZU11dGV4Owog
fTsKQEAgLTcyLDUgKzgxLDMgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKFZJREVP
X1RSQUNLKQotCi0jZW5kaWYgLy8gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IGU0
ZDdiMWYzMjE3OTE3Njg4ZThmNjQwZDNhZmU1MjI1ZDM1MWViMDAuLmI5ZDk5OGM1OTIwN2JmODQx
YjFkNWM3NmNjZTAyMTc4MzAwOTkzNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0xNjYsMTQgKzE2NiwxNCBAQCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcihNZWRpYVBsYXllciog
cGxheWVyKQogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyKCkKIHsKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2F1ZGlvVHJhY2tzLnNpemUoKTsgKytpKQotICAgICAgICBtX2F1ZGlvVHJh
Y2tzW2ldLT5kaXNjb25uZWN0KCk7CisgICAgZm9yIChhdXRvJiB0cmFjayA6IG1fYXVkaW9UcmFj
a3MudmFsdWVzKCkpCisgICAgICAgIHRyYWNrLT5kaXNjb25uZWN0KCk7CiAKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fdGV4dFRyYWNrcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV90ZXh0
VHJhY2tzW2ldLT5kaXNjb25uZWN0KCk7CisgICAgZm9yIChhdXRvJiB0cmFjayA6IG1fdGV4dFRy
YWNrcy52YWx1ZXMoKSkKKyAgICAgICAgdHJhY2stPmRpc2Nvbm5lY3QoKTsKIAotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV92aWRlb1RyYWNrcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV92
aWRlb1RyYWNrc1tpXS0+ZGlzY29ubmVjdCgpOworICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX3Zp
ZGVvVHJhY2tzLnZhbHVlcygpKQorICAgICAgICB0cmFjay0+ZGlzY29ubmVjdCgpOwogI2VuZGlm
CiAgICAgaWYgKG1fZmlsbFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fZmlsbFRpbWVyLnN0
b3AoKTsKQEAgLTYxMiw2ICs2MTIsMTU3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzZWVraW5nKCkgY29uc3QKICAgICByZXR1cm4gbV9zZWVraW5nOwogfQogCisjaWYgVVNF
KEdTVFJFQU1FUl9QTEFZQklOMykKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1
cGRhdGVUcmFja3MoKQoreworICAgIEFTU0VSVCghbV9pc0xlZ2FjeVBsYXliaW4pOworCisgICAg
Ym9vbCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFTb3VyY2UoKTsKKyAgICB1bnNpZ25lZCBsZW5n
dGggPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3NpemUobV9zdHJlYW1Db2xsZWN0aW9uLmdl
dCgpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWxpZEF1ZGlvU3RyZWFtczsKKyAgICBWZWN0b3I8
U3RyaW5nPiB2YWxpZFZpZGVvU3RyZWFtczsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWxpZFRleHRT
dHJlYW1zOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAg
ICAgICBHUmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFtID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dl
dF9zdHJlYW0obV9zdHJlYW1Db2xsZWN0aW9uLmdldCgpLCBpKTsKKyAgICAgICAgU3RyaW5nIHN0
cmVhbUlkKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkpKTsKKyAgICAgICAg
R3N0U3RyZWFtVHlwZSB0eXBlID0gZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtLmdl
dCgpKTsKKyAgICAgICAgR1NUX0RFQlVHKCJJbnNwZWN0aW5nICVzIHRyYWNrIHdpdGggSUQgJXMi
LCBnc3Rfc3RyZWFtX3R5cGVfZ2V0X25hbWUodHlwZSksIHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9BVURJTykgeworICAgICAgICAg
ICAgdmFsaWRBdWRpb1N0cmVhbXMuYXBwZW5kKHN0cmVhbUlkKTsKKyNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCisgICAgICAgICAgICBpZiAoIXVzZU1lZGlhU291cmNlKSB7CisgICAgICAgICAgICAg
ICAgdW5zaWduZWQgbG9jYWxJbmRleCA9IGkgLSB2YWxpZFZpZGVvU3RyZWFtcy5zaXplKCkgLSB2
YWxpZFRleHRTdHJlYW1zLnNpemUoKTsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWxJbmRleCA8
IG1fYXVkaW9UcmFja3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2F1ZGlv
VHJhY2tzLmNvbnRhaW5zKHN0cmVhbUlkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFJlZlB0cjxBdWRpb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6
Y3JlYXRlKGNyZWF0ZVdlYWtQdHIoKSwgaSwgc3RyZWFtKTsKKyAgICAgICAgICAgICAgICBtX2F1
ZGlvVHJhY2tzLmFkZCh0cmFjay0+aWQoKSwgdHJhY2spOworICAgICAgICAgICAgICAgIG1fcGxh
eWVyLT5hZGRBdWRpb1RyYWNrKCp0cmFjayk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAg
ICAgfSBlbHNlIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX1ZJREVPKSB7CisgICAgICAgICAg
ICB2YWxpZFZpZGVvU3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOworI2lmIEVOQUJMRShWSURFT19U
UkFDSykKKyAgICAgICAgICAgIGlmICghdXNlTWVkaWFTb3VyY2UpIHsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsb2NhbEluZGV4ID0gaSAtIHZhbGlkQXVkaW9TdHJlYW1zLnNpemUoKSAtIHZh
bGlkVGV4dFN0cmVhbXMuc2l6ZSgpOworICAgICAgICAgICAgICAgIGlmIChsb2NhbEluZGV4IDwg
bV92aWRlb1RyYWNrcy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmlkZW9U
cmFja3MuY29udGFpbnMoc3RyZWFtSWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgUmVmUHRyPFZpZGVvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpj
cmVhdGUoY3JlYXRlV2Vha1B0cigpLCBpLCBzdHJlYW0pOworICAgICAgICAgICAgICAgIG1fdmlk
ZW9UcmFja3MuYWRkKHRyYWNrLT5pZCgpLCB0cmFjayk7CisgICAgICAgICAgICAgICAgbV9wbGF5
ZXItPmFkZFZpZGVvVHJhY2soKnRyYWNrKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAg
ICB9IGVsc2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVEVYVCkgeworICAgICAgICAgICAg
dmFsaWRUZXh0U3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOworI2lmIEVOQUJMRShWSURFT19UUkFD
SykKKyAgICAgICAgICAgIGlmICghdXNlTWVkaWFTb3VyY2UpIHsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsb2NhbEluZGV4ID0gaSAtIHZhbGlkVmlkZW9TdHJlYW1zLnNpemUoKSAtIHZhbGlk
QXVkaW9TdHJlYW1zLnNpemUoKTsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWxJbmRleCA8IG1f
dGV4dFRyYWNrcy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fdGV4dFRyYWNr
cy5jb250YWlucyhzdHJlYW1JZCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBSZWZQdHI8SW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVh
bWVyOjpjcmVhdGUobG9jYWxJbmRleCwgc3RyZWFtKTsKKyAgICAgICAgICAgICAgICBtX3RleHRU
cmFja3MuYWRkKHN0cmVhbUlkLCB0cmFjayk7CisgICAgICAgICAgICAgICAgbV9wbGF5ZXItPmFk
ZFRleHRUcmFjaygqdHJhY2spOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVua25vd24gdHJhY2sgdHlwZSBmb3VuZCBmb3Ig
c3RyZWFtICVzIiwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgR1NUX0lO
Rk8oIk1lZGlhIGhhcyAldSB2aWRlbyB0cmFja3MsICV1IGF1ZGlvIHRyYWNrcyBhbmQgJXUgdGV4
dCB0cmFja3MiLCB2YWxpZFZpZGVvU3RyZWFtcy5zaXplKCksIHZhbGlkQXVkaW9TdHJlYW1zLnNp
emUoKSwgdmFsaWRUZXh0U3RyZWFtcy5zaXplKCkpOworCisgICAgYm9vbCBvbGRIYXNBdWRpbyA9
IG1faGFzQXVkaW87CisgICAgYm9vbCBvbGRIYXNWaWRlbyA9IG1faGFzVmlkZW87CisgICAgbV9o
YXNBdWRpbyA9ICF2YWxpZEF1ZGlvU3RyZWFtcy5pc0VtcHR5KCk7CisgICAgbV9oYXNWaWRlbyA9
ICF2YWxpZFZpZGVvU3RyZWFtcy5pc0VtcHR5KCk7CisgICAgaWYgKChvbGRIYXNWaWRlbyAhPSBt
X2hhc1ZpZGVvKSB8fCAob2xkSGFzQXVkaW8gIT0gbV9oYXNBdWRpbykpCisgICAgICAgIG1fcGxh
eWVyLT5jaGFyYWN0ZXJpc3RpY0NoYW5nZWQoKTsKKworICAgIGlmIChtX2hhc1ZpZGVvKQorICAg
ICAgICBtX3BsYXllci0+c2l6ZUNoYW5nZWQoKTsKKworICAgIGlmICh1c2VNZWRpYVNvdXJjZSkg
eworICAgICAgICBHU1RfREVCVUcoIlRyYWNrcyBtYW5hZ2VkIGJ5IHNvdXJjZSBlbGVtZW50LiBC
YWlsaW5nIG91dCBub3cuIik7CisgICAgICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXll
ckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHB1cmdlSW52YWxpZEF1ZGlvVHJhY2tzKHZhbGlkQXVk
aW9TdHJlYW1zKTsKKyAgICBwdXJnZUludmFsaWRWaWRlb1RyYWNrcyh2YWxpZFZpZGVvU3RyZWFt
cyk7CisgICAgcHVyZ2VJbnZhbGlkVGV4dFRyYWNrcyh2YWxpZFRleHRTdHJlYW1zKTsKKyNlbmRp
ZgorCisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyRW5naW5lVXBkYXRlZChtX3Bs
YXllcik7Cit9CisjZW5kaWYKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmVu
YWJsZVRyYWNrKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZSB0cmFja1R5cGUs
IHVuc2lnbmVkIGluZGV4KQoreworICAgIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZTsKKyAgICBj
b25zdCBjaGFyKiB0cmFja1R5cGVBc1N0cmluZzsKKyAgICBHTGlzdCogc2VsZWN0ZWRTdHJlYW1z
ID0gbnVsbHB0cjsKKworICAgIHN3aXRjaCAodHJhY2tUeXBlKSB7CisgICAgY2FzZSBUcmFja1By
aXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OkF1ZGlvOgorICAgICAgICBwcm9wZXJ0eU5h
bWUgPSAiY3VycmVudC1hdWRpbyI7CisgICAgICAgIHRyYWNrVHlwZUFzU3RyaW5nID0gImF1ZGlv
IjsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRUZXh0U3RyZWFtSWQuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgc2VsZWN0ZWRTdHJlYW1zID0gZ19saXN0X2FwcGVuZChzZWxlY3RlZFN0cmVhbXMsIGdf
c3RyZHVwKG1fY3VycmVudFRleHRTdHJlYW1JZC51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIGlm
ICghbV9jdXJyZW50VmlkZW9TdHJlYW1JZC5pc0VtcHR5KCkpCisgICAgICAgICAgICBzZWxlY3Rl
ZFN0cmVhbXMgPSBnX2xpc3RfYXBwZW5kKHNlbGVjdGVkU3RyZWFtcywgZ19zdHJkdXAobV9jdXJy
ZW50VmlkZW9TdHJlYW1JZC51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpWaWRlbzoKKyAgICAgICAg
cHJvcGVydHlOYW1lID0gImN1cnJlbnQtdmlkZW8iOworICAgICAgICB0cmFja1R5cGVBc1N0cmlu
ZyA9ICJ2aWRlbyI7CisgICAgICAgIGlmICghbV9jdXJyZW50QXVkaW9TdHJlYW1JZC5pc0VtcHR5
KCkpCisgICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMgPSBnX2xpc3RfYXBwZW5kKHNlbGVjdGVk
U3RyZWFtcywgZ19zdHJkdXAobV9jdXJyZW50QXVkaW9TdHJlYW1JZC51dGY4KCkuZGF0YSgpKSk7
CisgICAgICAgIGlmICghbV9jdXJyZW50VGV4dFN0cmVhbUlkLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHNlbGVjdGVkU3RyZWFtcyA9IGdfbGlzdF9hcHBlbmQoc2VsZWN0ZWRTdHJlYW1zLCBnX3N0
cmR1cChtX2N1cnJlbnRUZXh0U3RyZWFtSWQudXRmOCgpLmRhdGEoKSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VGV4dDoK
KyAgICAgICAgcHJvcGVydHlOYW1lID0gImN1cnJlbnQtdGV4dCI7CisgICAgICAgIHRyYWNrVHlw
ZUFzU3RyaW5nID0gInRleHQiOworICAgICAgICBpZiAoIW1fY3VycmVudEF1ZGlvU3RyZWFtSWQu
aXNFbXB0eSgpKQorICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zID0gZ19saXN0X2FwcGVuZChz
ZWxlY3RlZFN0cmVhbXMsIGdfc3RyZHVwKG1fY3VycmVudEF1ZGlvU3RyZWFtSWQudXRmOCgpLmRh
dGEoKSkpOworICAgICAgICBpZiAoIW1fY3VycmVudFZpZGVvU3RyZWFtSWQuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zID0gZ19saXN0X2FwcGVuZChzZWxlY3RlZFN0cmVh
bXMsIGdfc3RyZHVwKG1fY3VycmVudFZpZGVvU3RyZWFtSWQudXRmOCgpLmRhdGEoKSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlw
ZTo6VW5rbm93bjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
R1NUX0lORk8oIkVuYWJsaW5nICVzIHRyYWNrIHdpdGggaW5kZXg6ICVsdSIsIHRyYWNrVHlwZUFz
U3RyaW5nLCBpbmRleCk7CisgICAgLy8gRklYTUU6IFJlbW92ZSBpc01lZGlhU291cmNlKCkgdGVz
dCBiZWxvdyB3aGVuIGZpeGluZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTgyNTMxCisgICAgaWYgKG1faXNMZWdhY3lQbGF5YmluIHx8IGlzTWVkaWFTb3VyY2UoKSkg
eworICAgICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gaXNNZWRpYVNvdXJjZSgpID8gbV9zb3Vy
Y2UuZ2V0KCkgOiBtX3BpcGVsaW5lLmdldCgpOworICAgICAgICBnX29iamVjdF9zZXQoZWxlbWVu
dCwgcHJvcGVydHlOYW1lLCBpbmRleCwgbnVsbHB0cik7CisgICAgfQorI2lmIFVTRShHU1RSRUFN
RVJfUExBWUJJTjMpCisgICAgZWxzZSB7CisgICAgICAgIEdzdFN0cmVhbSogc3RyZWFtID0gZ3N0
X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0obV9zdHJlYW1Db2xsZWN0aW9uLmdldCgpLCBp
bmRleCk7CisgICAgICAgIGlmIChzdHJlYW0pIHsKKyAgICAgICAgICAgIFN0cmluZyBzdHJlYW1J
ZCA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0pOworICAgICAgICAgICAgc2VsZWN0
ZWRTdHJlYW1zID0gZ19saXN0X2FwcGVuZChzZWxlY3RlZFN0cmVhbXMsIGdfc3RyZHVwKHN0cmVh
bUlkLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBHU1RfV0FS
TklORygiJXMgc3RyZWFtICVsdSBub3QgZm91bmQiLCB0cmFja1R5cGVBc1N0cmluZywgaW5kZXgp
OworCisgICAgICAgIC8vIFRPRE86IE1TRSBHc3RTdHJlYW0gQVBJIHN1cHBvcnQ6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI1MzEKKyAgICAgICAgZ3N0X2VsZW1l
bnRfc2VuZF9ldmVudChtX3BpcGVsaW5lLmdldCgpLCBnc3RfZXZlbnRfbmV3X3NlbGVjdF9zdHJl
YW1zKHNlbGVjdGVkU3RyZWFtcykpOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHNlbGVjdGVk
U3RyZWFtcykKKyAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChzZWxlY3RlZFN0cmVhbXMsIHJlaW50
ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfZnJlZSkpOworfQorCiB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCiB7CiAgICAgcGxheWVyLT5tX25vdGlmaWVyLT5ub3RpZnko
TWFpblRocmVhZE5vdGlmaWNhdGlvbjo6VmlkZW9DaGFuZ2VkLCBbcGxheWVyXSB7IHBsYXllci0+
bm90aWZ5UGxheWVyT2ZWaWRlbygpOyB9KTsKQEAgLTYyMiw2ICs3NzMsOCBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlbygpCiAgICAgaWYgKFVO
TElLRUxZKCFtX3BpcGVsaW5lIHx8ICFtX3NvdXJjZSkpCiAgICAgICAgIHJldHVybjsKIAorICAg
IEFTU0VSVChtX2lzTGVnYWN5UGxheWJpbiB8fCBpc01lZGlhU291cmNlKCkpOworCiAgICAgZ2lu
dCBudW1UcmFja3MgPSAwOwogICAgIGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291cmNl
KCk7CiAgICAgR3N0RWxlbWVudCogZWxlbWVudCA9IHVzZU1lZGlhU291cmNlID8gbV9zb3VyY2Uu
Z2V0KCkgOiBtX3BpcGVsaW5lLmdldCgpOwpAQCAtNjQ0LDI5ICs3OTcsMzAgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW8oKQogICAgIH0KIAog
I2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWxpZFZpZGVvU3Ry
ZWFtczsKICAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgewogICAgICAg
ICBHUmVmUHRyPEdzdFBhZD4gcGFkOwogICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9w
aXBlbGluZS5nZXQoKSwgImdldC12aWRlby1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBudWxscHRy
KTsKICAgICAgICAgQVNTRVJUKHBhZCk7CiAKKyAgICAgICAgU3RyaW5nIHN0cmVhbUlkID0gIlYi
ICsgU3RyaW5nOjpudW1iZXIoaSk7CisgICAgICAgIHZhbGlkVmlkZW9TdHJlYW1zLmFwcGVuZChz
dHJlYW1JZCk7CiAgICAgICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4obV92aWRlb1RyYWNr
cy5zaXplKCkpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFt
ZXI+IGV4aXN0aW5nVHJhY2sgPSBtX3ZpZGVvVHJhY2tzW2ldOwotICAgICAgICAgICAgZXhpc3Rp
bmdUcmFjay0+c2V0SW5kZXgoaSk7Ci0gICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjay0+cGFk
KCkgPT0gcGFkKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgUmVmUHRy
PFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiBleGlzdGluZ1RyYWNrID0gbV92aWRlb1RyYWNr
cy5nZXQoc3RyZWFtSWQpOworICAgICAgICAgICAgaWYgKGV4aXN0aW5nVHJhY2spIHsKKyAgICAg
ICAgICAgICAgICBleGlzdGluZ1RyYWNrLT5zZXRJbmRleChpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZXhpc3RpbmdUcmFjay0+cGFkKCkgPT0gcGFkKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxWaWRlb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6
Y3JlYXRlKG1fcGlwZWxpbmUsIGksIHBhZCk7Ci0gICAgICAgIG1fdmlkZW9UcmFja3MuYXBwZW5k
KHRyYWNrKTsKKyAgICAgICAgUmVmUHRyPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFj
ayA9IFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoY3JlYXRlV2Vha1B0cigpLCBp
LCBwYWQpOworICAgICAgICBBU1NFUlQoc3RyZWFtSWQgPT0gdHJhY2stPmlkKCkpOworICAgICAg
ICBtX3ZpZGVvVHJhY2tzLmFkZChzdHJlYW1JZCwgdHJhY2spOwogICAgICAgICBtX3BsYXllci0+
YWRkVmlkZW9UcmFjaygqdHJhY2spOwogICAgIH0KIAotICAgIHdoaWxlIChzdGF0aWNfY2FzdDxn
aW50PihtX3ZpZGVvVHJhY2tzLnNpemUoKSkgPiBudW1UcmFja3MpIHsKLSAgICAgICAgUmVmUHRy
PFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IG1fdmlkZW9UcmFja3MubGFzdCgp
OwotICAgICAgICB0cmFjay0+ZGlzY29ubmVjdCgpOwotICAgICAgICBtX3ZpZGVvVHJhY2tzLnJl
bW92ZUxhc3QoKTsKLSAgICAgICAgbV9wbGF5ZXItPnJlbW92ZVZpZGVvVHJhY2soKnRyYWNrKTsK
LSAgICB9CisgICAgcHVyZ2VJbnZhbGlkVmlkZW9UcmFja3ModmFsaWRWaWRlb1N0cmVhbXMpOwog
I2VuZGlmCiAKICAgICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVk
KG1fcGxheWVyKTsKQEAgLTY5Myw2ICs4NDcsOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRpbygpCiAgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVs
aW5lIHx8ICFtX3NvdXJjZSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIEFTU0VSVChtX2lzTGVn
YWN5UGxheWJpbiB8fCBpc01lZGlhU291cmNlKCkpOworCiAgICAgZ2ludCBudW1UcmFja3MgPSAw
OwogICAgIGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291cmNlKCk7CiAgICAgR3N0RWxl
bWVudCogZWxlbWVudCA9IHVzZU1lZGlhU291cmNlID8gbV9zb3VyY2UuZ2V0KCkgOiBtX3BpcGVs
aW5lLmdldCgpOwpAQCAtNzExLDI5ICs4NjcsMzAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6Om5vdGlmeVBsYXllck9mQXVkaW8oKQogICAgIH0KIAogI2lmIEVOQUJMRShWSURF
T19UUkFDSykKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWxpZEF1ZGlvU3RyZWFtczsKICAgICBmb3Ig
KGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgewogICAgICAgICBHUmVmUHRyPEdzdFBh
ZD4gcGFkOwogICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9waXBlbGluZS5nZXQoKSwg
ImdldC1hdWRpby1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBudWxscHRyKTsKICAgICAgICAgQVNT
RVJUKHBhZCk7CiAKKyAgICAgICAgU3RyaW5nIHN0cmVhbUlkID0gIkEiICsgU3RyaW5nOjpudW1i
ZXIoaSk7CisgICAgICAgIHZhbGlkQXVkaW9TdHJlYW1zLmFwcGVuZChzdHJlYW1JZCk7CiAgICAg
ICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4obV9hdWRpb1RyYWNrcy5zaXplKCkpKSB7Ci0g
ICAgICAgICAgICBSZWZQdHI8QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJh
Y2sgPSBtX2F1ZGlvVHJhY2tzW2ldOwotICAgICAgICAgICAgZXhpc3RpbmdUcmFjay0+c2V0SW5k
ZXgoaSk7Ci0gICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjay0+cGFkKCkgPT0gcGFkKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgUmVmUHRyPEF1ZGlvVHJhY2tQcml2
YXRlR1N0cmVhbWVyPiBleGlzdGluZ1RyYWNrID0gbV9hdWRpb1RyYWNrcy5nZXQoc3RyZWFtSWQp
OworICAgICAgICAgICAgaWYgKGV4aXN0aW5nVHJhY2spIHsKKyAgICAgICAgICAgICAgICBleGlz
dGluZ1RyYWNrLT5zZXRJbmRleChpKTsKKyAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFj
ay0+cGFkKCkgPT0gcGFkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJl
YW1lcj4gdHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1fcGlwZWxp
bmUsIGksIHBhZCk7Ci0gICAgICAgIG1fYXVkaW9UcmFja3MuaW5zZXJ0KGksIHRyYWNrKTsKKyAg
ICAgICAgUmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IEF1ZGlvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoY3JlYXRlV2Vha1B0cigpLCBpLCBwYWQpOworICAg
ICAgICBBU1NFUlQoc3RyZWFtSWQgPT0gdHJhY2stPmlkKCkpOworICAgICAgICBtX2F1ZGlvVHJh
Y2tzLmFkZChzdHJlYW1JZCwgdHJhY2spOwogICAgICAgICBtX3BsYXllci0+YWRkQXVkaW9UcmFj
aygqdHJhY2spOwogICAgIH0KIAotICAgIHdoaWxlIChzdGF0aWNfY2FzdDxnaW50PihtX2F1ZGlv
VHJhY2tzLnNpemUoKSkgPiBudW1UcmFja3MpIHsKLSAgICAgICAgUmVmUHRyPEF1ZGlvVHJhY2tQ
cml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IG1fYXVkaW9UcmFja3MubGFzdCgpOwotICAgICAgICB0
cmFjay0+ZGlzY29ubmVjdCgpOwotICAgICAgICBtX2F1ZGlvVHJhY2tzLnJlbW92ZUxhc3QoKTsK
LSAgICAgICAgbV9wbGF5ZXItPnJlbW92ZUF1ZGlvVHJhY2soKnRyYWNrKTsKLSAgICB9CisgICAg
cHVyZ2VJbnZhbGlkQXVkaW9UcmFja3ModmFsaWRBdWRpb1N0cmVhbXMpOwogI2VuZGlmCiAKICAg
ICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsK
QEAgLTc1MCw2ICs5MDcsOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5UGxheWVyT2ZUZXh0KCkKICAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgIW1fc291
cmNlKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgQVNTRVJUKG1faXNMZWdhY3lQbGF5YmluIHx8
IGlzTWVkaWFTb3VyY2UoKSk7CisKICAgICBnaW50IG51bVRyYWNrcyA9IDA7CiAgICAgYm9vbCB1
c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFTb3VyY2UoKTsKICAgICBHc3RFbGVtZW50KiBlbGVtZW50
ID0gdXNlTWVkaWFTb3VyY2UgPyBtX3NvdXJjZS5nZXQoKSA6IG1fcGlwZWxpbmUuZ2V0KCk7CkBA
IC03NjAsMjkgKzkxOSwzNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5UGxheWVyT2ZUZXh0KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIFZlY3RvcjxT
dHJpbmc+IHZhbGlkVGV4dFN0cmVhbXM7CiAgICAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtVHJh
Y2tzOyArK2kpIHsKICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZDsKICAgICAgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKG1fcGlwZWxpbmUuZ2V0KCksICJnZXQtdGV4dC1wYWQiLCBpLCAmcGFk
Lm91dFB0cigpLCBudWxscHRyKTsKICAgICAgICAgQVNTRVJUKHBhZCk7CiAKKyAgICAgICAgR1Jl
ZlB0cjxHc3RFdmVudD4gZXZlbnQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50
KHBhZC5nZXQoKSwgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwgMCkpOworICAgICAgICBpZiAoIWV2
ZW50KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3QgY2hhciogc3RyZWFt
SWQ7CisgICAgICAgIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fc3RhcnQoZXZlbnQuZ2V0KCksICZz
dHJlYW1JZCk7CisKKyAgICAgICAgdmFsaWRUZXh0U3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOwog
ICAgICAgICBpZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG1fdGV4dFRyYWNrcy5zaXplKCkpKSB7
Ci0gICAgICAgICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gZXhp
c3RpbmdUcmFjayA9IG1fdGV4dFRyYWNrc1tpXTsKLSAgICAgICAgICAgIGV4aXN0aW5nVHJhY2st
PnNldEluZGV4KGkpOwotICAgICAgICAgICAgaWYgKGV4aXN0aW5nVHJhY2stPnBhZCgpID09IHBh
ZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFJlZlB0cjxJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyPiBleGlzdGluZ1RyYWNrID0gbV90ZXh0VHJhY2tzLmdl
dChzdHJlYW1JZCk7CisgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjaykgeworICAgICAgICAg
ICAgICAgIGV4aXN0aW5nVHJhY2stPnNldEluZGV4KGkpOworICAgICAgICAgICAgICAgIGlmIChl
eGlzdGluZ1RyYWNrLT5wYWQoKSA9PSBwYWQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgUmVmUHRyPEluYmFuZFRleHRU
cmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJl
YW1lcjo6Y3JlYXRlKGksIHBhZCk7Ci0gICAgICAgIG1fdGV4dFRyYWNrcy5pbnNlcnQoaSwgdHJh
Y2spOworICAgICAgICBtX3RleHRUcmFja3MuYWRkKHN0cmVhbUlkLCB0cmFjayk7CiAgICAgICAg
IG1fcGxheWVyLT5hZGRUZXh0VHJhY2soKnRyYWNrKTsKICAgICB9CiAKLSAgICB3aGlsZSAoc3Rh
dGljX2Nhc3Q8Z2ludD4obV90ZXh0VHJhY2tzLnNpemUoKSkgPiBudW1UcmFja3MpIHsKLSAgICAg
ICAgUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gbV90ZXh0
VHJhY2tzLmxhc3QoKTsKLSAgICAgICAgdHJhY2stPmRpc2Nvbm5lY3QoKTsKLSAgICAgICAgbV90
ZXh0VHJhY2tzLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgbV9wbGF5ZXItPnJlbW92ZVRleHRUcmFj
aygqdHJhY2spOwotICAgIH0KKyAgICBwdXJnZUludmFsaWRUZXh0VHJhY2tzKHZhbGlkVGV4dFN0
cmVhbXMpOwogfQogCiBHc3RGbG93UmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bmV3VGV4dFNhbXBsZUNhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVy
KQpAQCAtODA4LDggKzk3Myw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpu
ZXdUZXh0U2FtcGxlKCkKICAgICAgICAgY29uc3QgZ2NoYXIqIGlkOwogICAgICAgICBnc3RfZXZl
bnRfcGFyc2Vfc3RyZWFtX3N0YXJ0KHN0cmVhbVN0YXJ0RXZlbnQuZ2V0KCksICZpZCk7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0VHJhY2tzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sg
PSBtX3RleHRUcmFja3NbaV07Ci0gICAgICAgICAgICBpZiAodHJhY2stPnN0cmVhbUlkKCkgPT0g
aWQpIHsKKyAgICAgICAgICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
PiB0cmFjayA9IG1fdGV4dFRyYWNrcy5nZXQoaWQpOworICAgICAgICAgICAgaWYgKHRyYWNrKSB7
CiAgICAgICAgICAgICAgICAgdHJhY2stPmhhbmRsZVNhbXBsZShzYW1wbGUpOwogICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEwOTcsNiAr
MTI2Miw2MSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2Fn
ZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICBnc3RfdGFnX2xpc3RfdW5yZWYodGFncyk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKQorICAg
IGNhc2UgR1NUX01FU1NBR0VfU1RSRUFNX0NPTExFQ1RJT046IHsKKyAgICAgICAgR1JlZlB0cjxH
c3RTdHJlYW1Db2xsZWN0aW9uPiBjb2xsZWN0aW9uOworICAgICAgICBnc3RfbWVzc2FnZV9wYXJz
ZV9zdHJlYW1fY29sbGVjdGlvbihtZXNzYWdlLCAmY29sbGVjdGlvbi5vdXRQdHIoKSk7CisKKyAg
ICAgICAgaWYgKGNvbGxlY3Rpb24pIHsKKyAgICAgICAgICAgIG1fc3RyZWFtQ29sbGVjdGlvbi5z
d2FwKGNvbGxlY3Rpb24pOworICAgICAgICAgICAgbV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJl
YWROb3RpZmljYXRpb246OlN0cmVhbUNvbGxlY3Rpb25DaGFuZ2VkLCBbdGhpc10geworICAgICAg
ICAgICAgICAgIHRoaXMtPnVwZGF0ZVRyYWNrcygpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX01FU1NBR0VfU1RSRUFNU19T
RUxFQ1RFRDogeworICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IGNvbGxlY3Rp
b247CisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbXNfc2VsZWN0ZWQobWVzc2FnZSwg
JmNvbGxlY3Rpb24ub3V0UHRyKCkpOworCisgICAgICAgIGlmICghY29sbGVjdGlvbikKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIG1fc3RyZWFtQ29sbGVjdGlvbi5zd2FwKGNvbGxlY3Rp
b24pOworICAgICAgICBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkID0gIiI7CisgICAgICAgIG1fY3Vy
cmVudFZpZGVvU3RyZWFtSWQgPSAiIjsKKyAgICAgICAgbV9jdXJyZW50VGV4dFN0cmVhbUlkID0g
IiI7CisKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxl
Y3RlZF9nZXRfc2l6ZShtZXNzYWdlKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFtID0g
YWRvcHRHUmVmKGdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3N0cmVhbShtZXNzYWdl
LCBpKSk7CisgICAgICAgICAgICBpZiAoIXN0cmVhbSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIEdzdFN0cmVhbVR5cGUgdHlwZSA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVh
bV90eXBlKHN0cmVhbS5nZXQoKSk7CisgICAgICAgICAgICBTdHJpbmcgc3RyZWFtSWQoZ3N0X3N0
cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQoKSkpOworCisgICAgICAgICAgICBHU1RfREVC
VUcoIlNlbGVjdGluZyAlcyB0cmFjayB3aXRoIElEOiAlcyIsIGdzdF9zdHJlYW1fdHlwZV9nZXRf
bmFtZSh0eXBlKSwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAvLyBQbGF5
YmluMyBjYW4gc2VuZCBtb3JlIHRoYW4gb25lIHNlbGVjdGVkIHN0cmVhbSBvZiB0aGUgc2FtZSB0
eXBlCisgICAgICAgICAgICAvLyBidXQgdGhlcmUncyBubyBwcmlvcml0eSBvciBvcmRlcmluZyBz
eXN0ZW0gaW4gcGxhY2UsIHNvIHdlIGFzc3VtZQorICAgICAgICAgICAgLy8gdGhlIHNlbGVjdGVk
IHN0cmVhbSBpcyB0aGUgbGFzdCBvbmUgYXMgcmVwb3J0ZWQgYnkgcGxheWJpbjMuCisgICAgICAg
ICAgICBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9BVURJTykgeworICAgICAgICAgICAgICAg
IG1fY3VycmVudEF1ZGlvU3RyZWFtSWQgPSBzdHJlYW1JZDsKKyAgICAgICAgICAgICAgICBhdXRv
IHRyYWNrID0gbV9hdWRpb1RyYWNrcy5nZXQobV9jdXJyZW50QXVkaW9TdHJlYW1JZCk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKHRyYWNrKTsKKyAgICAgICAgICAgICAgICB0cmFjay0+bWFya0Fz
QWN0aXZlKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVf
VklERU8pIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRWaWRlb1N0cmVhbUlkID0gc3RyZWFt
SWQ7CisgICAgICAgICAgICAgICAgYXV0byB0cmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0KG1fY3Vy
cmVudFZpZGVvU3RyZWFtSWQpOworICAgICAgICAgICAgICAgIEFTU0VSVCh0cmFjayk7CisgICAg
ICAgICAgICAgICAgdHJhY2stPm1hcmtBc0FjdGl2ZSgpOworICAgICAgICAgICAgfSBlbHNlIGlm
ICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX1RFWFQpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50
VGV4dFN0cmVhbUlkID0gc3RyZWFtSWQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgR1NUX1dBUk5JTkcoIlVua25vd24gc3RyZWFtIHR5cGUgd2l0aCBzdHJlYW0taWQgJXMiLCBz
dHJlYW1JZCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCiAgICAg
ZGVmYXVsdDoKICAgICAgICAgR1NUX0RFQlVHKCJVbmhhbmRsZWQgR1N0cmVhbWVyIG1lc3NhZ2Ug
dHlwZTogJXMiLCBHU1RfTUVTU0FHRV9UWVBFX05BTUUobWVzc2FnZSkpOwogICAgICAgICBicmVh
azsKQEAgLTEyMTMsNiArMTQzMyw0MiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6cHJvY2Vzc1RhYmxlT2ZDb250ZW50c0VudHJ5KEdzdFRvY0VudHJ5KiBlbnRyeQogICAgIGZv
ciAoR0xpc3QqIGkgPSBnc3RfdG9jX2VudHJ5X2dldF9zdWJfZW50cmllcyhlbnRyeSk7IGk7IGkg
PSBpLT5uZXh0KQogICAgICAgICBwcm9jZXNzVGFibGVPZkNvbnRlbnRzRW50cnkoc3RhdGljX2Nh
c3Q8R3N0VG9jRW50cnkqPihpLT5kYXRhKSk7CiB9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpwdXJnZUludmFsaWRBdWRpb1RyYWNrcyhWZWN0b3I8U3RyaW5nPiB2YWxpZFRy
YWNrSWRzKQoreworICAgIGZvciAoYXV0byBhdWRpb1RyYWNrSWQgOiBtX2F1ZGlvVHJhY2tzLmtl
eXMoKSkgeworICAgICAgICBpZiAodmFsaWRUcmFja0lkcy5jb250YWlucyhhdWRpb1RyYWNrSWQp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1dG8gdHJhY2sgPSBtX2F1ZGlvVHJh
Y2tzLmdldChhdWRpb1RyYWNrSWQpOworICAgICAgICB0cmFjay0+ZGlzY29ubmVjdCgpOworICAg
ICAgICBtX3BsYXllci0+cmVtb3ZlQXVkaW9UcmFjaygqdHJhY2spOworICAgICAgICBtX2F1ZGlv
VHJhY2tzLnJlbW92ZShhdWRpb1RyYWNrSWQpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZFZpZGVvVHJhY2tzKFZlY3RvcjxTdHJpbmc+
IHZhbGlkVHJhY2tJZHMpCit7CisgICAgZm9yIChhdXRvIHZpZGVvVHJhY2tJZCA6IG1fdmlkZW9U
cmFja3Mua2V5cygpKSB7CisgICAgICAgIGlmICh2YWxpZFRyYWNrSWRzLmNvbnRhaW5zKHZpZGVv
VHJhY2tJZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXV0byB0cmFjayA9IG1f
dmlkZW9UcmFja3MuZ2V0KHZpZGVvVHJhY2tJZCk7CisgICAgICAgIHRyYWNrLT5kaXNjb25uZWN0
KCk7CisgICAgICAgIG1fcGxheWVyLT5yZW1vdmVWaWRlb1RyYWNrKCp0cmFjayk7CisgICAgICAg
IG1fdmlkZW9UcmFja3MucmVtb3ZlKHZpZGVvVHJhY2tJZCk7CisgICAgfQorfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VJbnZhbGlkVGV4dFRyYWNrcyhWZWN0b3I8
U3RyaW5nPiB2YWxpZFRyYWNrSWRzKQoreworICAgIGZvciAoYXV0byB0ZXh0VHJhY2tJZCA6IG1f
dGV4dFRyYWNrcy5rZXlzKCkpIHsKKyAgICAgICAgaWYgKHZhbGlkVHJhY2tJZHMuY29udGFpbnMo
dGV4dFRyYWNrSWQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1dG8gdHJhY2sg
PSBtX3RleHRUcmFja3MuZ2V0KHRleHRUcmFja0lkKTsKKyAgICAgICAgdHJhY2stPmRpc2Nvbm5l
Y3QoKTsKKyAgICAgICAgbV9wbGF5ZXItPnJlbW92ZVRleHRUcmFjaygqdHJhY2spOworICAgICAg
ICBtX3RleHRUcmFja3MucmVtb3ZlKHRleHRUcmFja0lkKTsKKyAgICB9Cit9CiAjZW5kaWYKIAog
c3RhdGljIGludCBmaW5kSExTUXVldWUoY29uc3QgR1ZhbHVlKiBpdGVtKQpAQCAtMTQwMCw5ICsx
NjU2LDkgQEAgdW5zaWduZWQgbG9uZyBsb25nIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
dG90YWxCeXRlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fdG90YWxCeXRlczsKIH0KIAotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZUNoYW5nZWRDYWxsYmFjayhNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzb3VyY2VTZXR1cENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciog
cGxheWVyLCBHc3RFbGVtZW50KiBzb3VyY2VFbGVtZW50KQogewotICAgIHBsYXllci0+c291cmNl
Q2hhbmdlZCgpOworICAgIHBsYXllci0+c291cmNlU2V0dXAoc291cmNlRWxlbWVudCk7CiB9CiAK
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cmlEZWNvZGVCaW5FbGVtZW50QWRk
ZWRDYWxsYmFjayhHc3RCaW4qIGJpbiwgR3N0RWxlbWVudCogZWxlbWVudCwgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCkBAIC0xNDE5LDcgKzE2NzUsNyBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJhY2so
R3N0QmluKiBiaW4sCiAKICAgICBHVW5pcXVlUHRyPGNoYXI+IG5ld0Rvd25sb2FkVGVtcGxhdGUo
Z19idWlsZF9maWxlbmFtZShHX0RJUl9TRVBBUkFUT1JfUywgInZhciIsICJ0bXAiLCAiV2ViS2l0
LU1lZGlhLVhYWFhYWCIsIG51bGxwdHIpKTsKICAgICBnX29iamVjdF9zZXQoZWxlbWVudCwgInRl
bXAtdGVtcGxhdGUiLCBuZXdEb3dubG9hZFRlbXBsYXRlLmdldCgpLCBudWxscHRyKTsKLSAgICBH
U1RfVFJBQ0UoIlJlY29uZmlndXJlZCBmaWxlIGRvd25sb2FkIHRlbXBsYXRlIGZyb20gJyVzJyB0
byAnJXMnIiwgb2xkRG93bmxvYWRUZW1wbGF0ZS5nZXQoKSwgbmV3RG93bmxvYWRUZW1wbGF0ZS5n
ZXQoKSk7CisgICAgR1NUX0RFQlVHKCJSZWNvbmZpZ3VyZWQgZmlsZSBkb3dubG9hZCB0ZW1wbGF0
ZSBmcm9tICclcycgdG8gJyVzJyIsIG9sZERvd25sb2FkVGVtcGxhdGUuZ2V0KCksIG5ld0Rvd25s
b2FkVGVtcGxhdGUuZ2V0KCkpOwogCiAgICAgcGxheWVyLT5wdXJnZU9sZERvd25sb2FkRmlsZXMo
b2xkRG93bmxvYWRUZW1wbGF0ZS5nZXQoKSk7CiB9CkBAIC0xNDM5LDcgKzE2OTUsNyBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZG93bmxvYWRCdWZmZXJGaWxlQ3JlYXRlZENh
bGxiYWNrKE1lZGlhUGxheWVyUAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR1NUX1RS
QUNFKCJVbmxpbmtlZCBtZWRpYSB0ZW1wb3JhcnkgZmlsZSAlcyBhZnRlciBjcmVhdGlvbiIsIGRv
d25sb2FkRmlsZS5nZXQoKSk7CisgICAgR1NUX0RFQlVHKCJVbmxpbmtlZCBtZWRpYSB0ZW1wb3Jh
cnkgZmlsZSAlcyBhZnRlciBjcmVhdGlvbiIsIGRvd25sb2FkRmlsZS5nZXQoKSk7CiB9CiAKIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZU9sZERvd25sb2FkRmlsZXMoY29u
c3QgY2hhciogZG93bmxvYWRGaWxlVGVtcGxhdGUpCkBAIC0xNDYxLDEzICsxNzE3LDE0IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZU9sZERvd25sb2FkRmlsZXMoY29u
c3QgY2hhciogZG93bmxvYWRGaWxlCiAgICAgfQogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6c291cmNlQ2hhbmdlZCgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6c291cmNlU2V0dXAoR3N0RWxlbWVudCogc291cmNlRWxlbWVudCkKIHsKKyAgICBHU1Rf
REVCVUcoIlNvdXJjZSBlbGVtZW50IHNldC11cCBmb3IgJXMiLCBHU1RfRUxFTUVOVF9OQU1FKHNv
dXJjZUVsZW1lbnQpKTsKKwogICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQo
KSkgJiYgR1NUX09CSkVDVF9QQVJFTlQobV9zb3VyY2UuZ2V0KCkpKQogICAgICAgICBnX3NpZ25h
bF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoR1NUX0VMRU1FTlRfUEFSRU5UKG1fc291cmNl
LmdldCgpKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4odXJpRGVjb2RlQmluRWxlbWVudEFk
ZGVkQ2FsbGJhY2spLCB0aGlzKTsKIAotICAgIG1fc291cmNlLmNsZWFyKCk7Ci0gICAgZ19vYmpl
Y3RfZ2V0KG1fcGlwZWxpbmUuZ2V0KCksICJzb3VyY2UiLCAmbV9zb3VyY2Uub3V0UHRyKCksIG51
bGxwdHIpOworICAgIG1fc291cmNlID0gc291cmNlRWxlbWVudDsKIAogICAgIGlmIChXRUJLSVRf
SVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkpIHsKICAgICAgICAgd2ViS2l0V2ViU3JjU2V0TWVk
aWFQbGF5ZXIoV0VCS0lUX1dFQl9TUkMobV9zb3VyY2UuZ2V0KCkpLCBtX3BsYXllcik7CkBAIC0y
MDE5LDggKzIyNzYsMTAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldERv
d25sb2FkQnVmZmVyaW5nKCkKICAgICB1bnNpZ25lZCBmbGFnRG93bmxvYWQgPSBnZXRHc3RQbGF5
RmxhZygiZG93bmxvYWQiKTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc3RvcCBkb3dubG9h
ZGluZyBpZiB3ZSBhbHJlYWR5IHN0YXJ0ZWQgaXQuCi0gICAgaWYgKGZsYWdzICYgZmxhZ0Rvd25s
b2FkICYmIG1fcmVhZHlTdGF0ZSA+IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZyAmJiAhbV9yZXNl
dFBpcGVsaW5lKQorICAgIGlmIChmbGFncyAmIGZsYWdEb3dubG9hZCAmJiBtX3JlYWR5U3RhdGUg
PiBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcgJiYgIW1fcmVzZXRQaXBlbGluZSkgeworICAgICAg
ICBHU1RfREVCVUcoIkRvd25sb2FkIGFscmVhZHkgc3RhcnRlZCwgbm90IHN0YXJ0aW5nIGFnYWlu
Iik7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBib29sIHNob3VsZERvd25sb2FkID0g
IWlzTGl2ZVN0cmVhbSgpICYmIG1fcHJlbG9hZCA9PSBNZWRpYVBsYXllcjo6QXV0bzsKICAgICBp
ZiAoc2hvdWxkRG93bmxvYWQpIHsKQEAgLTIwMzYsNiArMjI5NSw3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXREb3dubG9hZEJ1ZmZlcmluZygpCiAKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpQcmVsb2FkIHBy
ZWxvYWQpCiB7CisgICAgR1NUX0RFQlVHKCJTZXR0aW5nIHByZWxvYWQgdG8gJXMiLCBjb252ZXJ0
RW51bWVyYXRpb25Ub1N0cmluZyhwcmVsb2FkKS51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAocHJl
bG9hZCA9PSBNZWRpYVBsYXllcjo6QXV0byAmJiBpc0xpdmVTdHJlYW0oKSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC0yMTQwLDkgKzI0MDAsMTcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oKQogCiAgICAgLy8gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCkgcmV0dXJucyBhIGZsb2F0aW5nIHJlZmVyZW5jZSBzbwogICAgIC8vIHdlIHNob3VsZCBu
b3QgYWRvcHQuCisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklOMykKKyAgICBtX2lzTGVnYWN5UGxh
eWJpbiA9IGZhbHNlOworICAgIHNldFBpcGVsaW5lKGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgi
cGxheWJpbjMiLCAicGxheSIpKTsKKyNlbHNlCisgICAgbV9pc0xlZ2FjeVBsYXliaW4gPSB0cnVl
OwogICAgIHNldFBpcGVsaW5lKGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicGxheWJpbiIsICJw
bGF5IikpOworI2VuZGlmCiAgICAgc2V0U3RyZWFtVm9sdW1lRWxlbWVudChHU1RfU1RSRUFNX1ZP
TFVNRShtX3BpcGVsaW5lLmdldCgpKSk7CiAKKyAgICBHU1RfSU5GTygiVXNpbmcgbGVnYWN5IHBs
YXliaW4gZWxlbWVudDogJXMiLCBib29sRm9yUHJpbnRpbmcobV9pc0xlZ2FjeVBsYXliaW4pKTsK
KwogICAgIC8vIExldCBhbHNvIG90aGVyIGxpc3RlbmVycyBzdWJzY3JpYmUgdG8gKGFwcGxpY2F0
aW9uKSBtZXNzYWdlcyBpbiB0aGlzIGJ1cy4KICAgICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gYWRv
cHRHUmVmKGdzdF9waXBlbGluZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgp
KSkpOwogICAgIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsKGJ1cy5nZXQoKSwgUnVuTG9v
cFNvdXJjZVByaW9yaXR5OjpSdW5Mb29wRGlzcGF0Y2hlcik7CkBAIC0yMTUwLDExICsyNDE4LDE1
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKCkK
IAogICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAibXV0ZSIsIG1fcGxheWVyLT5t
dXRlZCgpLCBudWxscHRyKTsKIAotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVs
aW5lLmdldCgpLCAibm90aWZ5Ojpzb3VyY2UiLCBHX0NBTExCQUNLKHNvdXJjZUNoYW5nZWRDYWxs
YmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5lLmdl
dCgpLCAidmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodmlkZW9DaGFuZ2VkQ2FsbGJhY2spLCB0
aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5nZXQoKSwgImF1
ZGlvLWNoYW5nZWQiLCBHX0NBTExCQUNLKGF1ZGlvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fcGlwZWxpbmUuZ2V0KCksICJzb3VyY2Utc2V0
dXAiLCBHX0NBTExCQUNLKHNvdXJjZVNldHVwQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBpZiAobV9p
c0xlZ2FjeVBsYXliaW4pIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fcGlw
ZWxpbmUuZ2V0KCksICJ2aWRlby1jaGFuZ2VkIiwgR19DQUxMQkFDSyh2aWRlb0NoYW5nZWRDYWxs
YmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGlu
ZS5nZXQoKSwgImF1ZGlvLWNoYW5nZWQiLCBHX0NBTExCQUNLKGF1ZGlvQ2hhbmdlZENhbGxiYWNr
KSwgdGhpcyk7CisgICAgfQorCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5lLmdldCgpLCAidGV4dC1jaGFuZ2VkIiwgR19DQUxM
QkFDSyh0ZXh0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgaWYgKG1faXNMZWdhY3lQbGF5
YmluKQorICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5nZXQoKSwg
InRleHQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYWxsYmFjayksIHRoaXMpOwog
CiAgICAgR3N0RWxlbWVudCogdGV4dENvbWJpbmVyID0gd2Via2l0VGV4dENvbWJpbmVyTmV3KCk7
CiAgICAgQVNTRVJUKHRleHRDb21iaW5lcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmgKaW5kZXggZTM3YTQ0ZTI5NTZjZTBkOWQ1MjkxMTE3ZjA3ZGVkNWYy
ZWY2ZTYwOS4uNmY1MDNkMzUwNmJhODNhNGU1N2I4NmViZDQ4ODRiMzBjYThiMjRkOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApAQCAtMjIsOCArMjIs
OCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJfaAotI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJfaAorI3ByYWdtYSBvbmNlCisKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFN
RVIpCiAKICNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCkBAIC0zNiwxMyArMzYsMTEgQEAK
ICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKLSNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spICYmIFVTRShHU1RSRUFNRVJfTVBFR1RTKQorI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKyNpbmNsdWRlICJUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgogI2VuZGlmCiAKLXR5cGVkZWYg
c3RydWN0IF9Hc3RCdWZmZXIgR3N0QnVmZmVyOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE1lc3NhZ2Ug
R3N0TWVzc2FnZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RFbGVtZW50IEdzdEVsZW1lbnQ7CiB0eXBl
ZGVmIHN0cnVjdCBfR3N0TXBlZ3RzU2VjdGlvbiBHc3RNcGVndHNTZWN0aW9uOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC02Nyw2ICs2NSw4IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqKTsKICAgICB2aXJ0dWFsIH5NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIoKTsKIAorICAgIFdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyPiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5j
cmVhdGVXZWFrUHRyKCp0aGlzKTsgfQorCiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVu
Z2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7CiAgICAgdm9pZCBoYW5kbGVNZXNzYWdlKEdzdE1l
c3NhZ2UqKTsKICAgICB2b2lkIGhhbmRsZVBsdWdpbkluc3RhbGxlclJlc3VsdChHc3RJbnN0YWxs
UGx1Z2luc1JldHVybik7CkBAIC0xMTYsNyArMTE2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBkdXJhdGlvbkNoYW5nZWQoKTsKICAgICB2b2lkIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5
ZXI6Ok5ldHdvcmtTdGF0ZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc291cmNlQ2hhbmdlZCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VTZXR1cChHc3RFbGVtZW50Kik7CiAKICAgICBHc3RFbGVt
ZW50KiBhdWRpb1NpbmsoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY29uZmln
dXJlUGxheVNpbmsoKSB7IH0KQEAgLTEzMSwxNCArMTMxLDE0IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgaXNMaXZlU3RyZWFtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc1N0cmVhbWluZzsg
fQogCisgICAgdm9pZCBlbmFibGVUcmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFj
a1R5cGUsIHVuc2lnbmVkIGluZGV4KTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBnZXRT
dXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYp
OwogICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25z
dCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJik7CiAKICAgICBzdGF0aWMgYm9vbCBpc0F2
YWlsYWJsZSgpOwogCi0gICAgV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI+IGNy
ZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKnRo
aXMpOyB9Ci0KICAgICBHc3RFbGVtZW50KiBjcmVhdGVBdWRpb1NpbmsoKSBvdmVycmlkZTsKIAog
ICAgIE1lZGlhVGltZSBwbGF5YmFja1Bvc2l0aW9uKCkgY29uc3Q7CkBAIC0xNTMsMTIgKzE1Mywx
NyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHNldERvd25sb2FkQnVmZmVyaW5nKCk7
CiAgICAgdm9pZCBwcm9jZXNzQnVmZmVyaW5nU3RhdHMoR3N0TWVzc2FnZSopOwotI2lmIEVOQUJM
RShWSURFT19UUkFDSykgJiYgVVNFKEdTVFJFQU1FUl9NUEVHVFMpCisjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQorI2lmIFVTRShHU1RSRUFNRVJfTVBFR1RTKQogICAgIHZvaWQgcHJvY2Vzc01wZWdU
c1NlY3Rpb24oR3N0TXBlZ3RzU2VjdGlvbiopOwogI2VuZGlmCi0jaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQorCiAgICAgdm9pZCBwcm9jZXNzVGFibGVPZkNvbnRlbnRzKEdzdE1lc3NhZ2UqKTsKICAg
ICB2b2lkIHByb2Nlc3NUYWJsZU9mQ29udGVudHNFbnRyeShHc3RUb2NFbnRyeSopOworCisgICAg
dm9pZCBwdXJnZUludmFsaWRBdWRpb1RyYWNrcyhWZWN0b3I8U3RyaW5nPiB2YWxpZFRyYWNrSWRz
KTsKKyAgICB2b2lkIHB1cmdlSW52YWxpZFZpZGVvVHJhY2tzKFZlY3RvcjxTdHJpbmc+IHZhbGlk
VHJhY2tJZHMpOworICAgIHZvaWQgcHVyZ2VJbnZhbGlkVGV4dFRyYWNrcyhWZWN0b3I8U3RyaW5n
PiB2YWxpZFRyYWNrSWRzKTsKICNlbmRpZgogICAgIHZpcnR1YWwgYm9vbCBkb1NlZWsoY29uc3Qg
TWVkaWFUaW1lJiBwb3NpdGlvbiwgZmxvYXQgcmF0ZSwgR3N0U2Vla0ZsYWdzIHNlZWtUeXBlKTsK
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUGxheWJhY2tSYXRlKCk7CkBAIC0xNzMsNiArMTc4LDEw
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldFBsYXliaW5VUkwoY29uc3QgVVJMJiB1cmxTdHJp
bmcpOwogCisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklOMykKKyAgICB2b2lkIHVwZGF0ZVRyYWNr
cygpOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICB2b2lkIGNhY2hlRHVyYXRpb24oKTsKIApA
QCAtMjE0LDcgKzIyMyw3IEBAIHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyB2b2lkIHNldEF1ZGlv
U3RyZWFtUHJvcGVydGllc0NhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciosIEdP
YmplY3QqKTsKIAotICAgIHN0YXRpYyB2b2lkIHNvdXJjZUNoYW5nZWRDYWxsYmFjayhNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBzb3VyY2VTZXR1cENhbGxi
YWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciosIEdzdEVsZW1lbnQqKTsKICAgICBzdGF0
aWMgdm9pZCB2aWRlb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIq
KTsKICAgICBzdGF0aWMgdm9pZCB2aWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lciopOwogICAgIHN0YXRpYyB2b2lkIGF1ZGlvQ2hhbmdlZENhbGxi
YWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOwpAQCAtMjQ3LDYgKzI1NiwxMyBAQCBw
cml2YXRlOgogICAgIG11dGFibGUgdW5zaWduZWQgbG9uZyBsb25nIG1fdG90YWxCeXRlczsKICAg
ICBVUkwgbV91cmw7CiAgICAgYm9vbCBtX3ByZXNlcnZlc1BpdGNoOworICAgIGJvb2wgbV9pc0xl
Z2FjeVBsYXliaW47CisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklOMykKKyAgICBHUmVmUHRyPEdz
dFN0cmVhbUNvbGxlY3Rpb24+IG1fc3RyZWFtQ29sbGVjdGlvbjsKKyNlbmRpZgorICAgIFN0cmlu
ZyBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkOworICAgIFN0cmluZyBtX2N1cnJlbnRWaWRlb1N0cmVh
bUlkOworICAgIFN0cmluZyBtX2N1cnJlbnRUZXh0U3RyZWFtSWQ7CiAjaWYgRU5BQkxFKFdFQl9B
VURJTykKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcj4g
bV9hdWRpb1NvdXJjZVByb3ZpZGVyOwogI2VuZGlmCkBAIC0yNTQsMTcgKzI3MCwxNiBAQCBwcml2
YXRlOgogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9kb3dubG9hZEJ1ZmZlcjsKICAgICBSZWZQ
dHI8TWVkaWFQbGF5ZXJSZXF1ZXN0SW5zdGFsbE1pc3NpbmdQbHVnaW5zQ2FsbGJhY2s+IG1fbWlz
c2luZ1BsdWdpbnNDYWxsYmFjazsKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgVmVjdG9y
PFJlZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4+IG1fYXVkaW9UcmFja3M7Ci0gICAg
VmVjdG9yPFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyPj4gbV90ZXh0VHJh
Y2tzOwotICAgIFZlY3RvcjxSZWZQdHI8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+PiBtX3Zp
ZGVvVHJhY2tzOworICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8QXVkaW9UcmFja1By
aXZhdGVHU3RyZWFtZXI+PiBtX2F1ZGlvVHJhY2tzOworICAgIEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcj4+IG1fdGV4dFRyYWNrczsK
KyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVh
bWVyPj4gbV92aWRlb1RyYWNrczsKICAgICBSZWZQdHI8SW5iYW5kTWV0YWRhdGFUZXh0VHJhY2tQ
cml2YXRlR1N0cmVhbWVyPiBtX2NoYXB0ZXJzVHJhY2s7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spICYmIFVTRShHU1RSRUFNRVJfTVBFR1RTKQorI2lmIFVTRShHU1RSRUFNRVJfTVBF
R1RTKQogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8SW5iYW5kTWV0YWRhdGFUZXh0
VHJhY2tQcml2YXRlR1N0cmVhbWVyPj4gbV9tZXRhZGF0YVRyYWNrczsKKyNlbmRpZgogI2VuZGlm
CiAgICAgdmlydHVhbCBib29sIGlzTWVkaWFTb3VyY2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogfTsKIH0KIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oCmluZGV4IDAzZmVkZWE5
NzU5MmFjMjVlNzgwNGE0ZWQ5ZGI2YWY5OTFlNjkwM2UuLjdmYjExYTFhZDJlMTc2ZDc4YzY4MjQ2
OTE5ODBhZTRmOTNjYTYxZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuaApAQCAtMjA5LDcgKzIwOSwxMCBAQCBwcm90ZWN0ZWQ6CiAjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQogICAgICAgICBUZXh0Q2hhbmdlZCA9IDEgPDwgNSwKICNlbmRp
ZgotICAgICAgICBTaXplQ2hhbmdlZCA9IDEgPDwgNgorICAgICAgICBTaXplQ2hhbmdlZCA9IDEg
PDwgNiwKKyNpZiBFTkFCTEUoR1NUUkVBTUVSX1BMQVlCSU4zKQorICAgICAgICBTdHJlYW1Db2xs
ZWN0aW9uQ2hhbmdlZCA9IDEgPDwgNworI2VuZGlmCiAgICAgfTsKIAogICAgIFdlYWtQdHJGYWN0
b3J5PE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U+IG1fd2Vha1B0ckZhY3Rvcnk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJh
Y2tQcml2YXRlQmFzZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5jcHAKaW5kZXggYWYwNjhj
YjA4ZTU4Y2ZkYWM3MGVmMzE0NjRmN2I1NDk4OTZjYWQ5Yi4uYjBkMjk1N2MwMTE1YjY3ZWQxOTU5
OTBlNzE0OTVmOTY1YWI3MmExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNl
R1N0cmVhbWVyLmNwcApAQCAtNTQsMTEgKzU0LDI0IEBAIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXI6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIoVHJhY2tQcml2YXRlQmFzZSogb3duZXIsIGdp
CiAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fcGFkLmdldCgpLCAibm90aWZ5OjphY3Rp
dmUiLCBHX0NBTExCQUNLKGFjdGl2ZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogICAgIGdfc2ln
bmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BhZC5nZXQoKSwgIm5vdGlmeTo6dGFncyIsIEdfQ0FMTEJB
Q0sodGFnc0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogCi0gICAgLy8gV2UgY2FuJ3QgY2FsbCBu
b3RpZnlUcmFja09mVGFnc0NoYW5nZWQoKSBkaXJlY3RseSwgYmVjYXVzZSB3ZSBuZWVkIHRhZ3ND
aGFuZ2VkKCkKLSAgICAvLyB0byBzZXR1cCBtX3RhZ3MuCisgICAgLy8gV2UgY2FuJ3QgY2FsbCBu
b3RpZnlUcmFja09mVGFnc0NoYW5nZWQoKSBkaXJlY3RseSwgYmVjYXVzZSB3ZSBuZWVkIHRhZ3ND
aGFuZ2VkKCkgdG8gc2V0dXAgbV90YWdzLgogICAgIHRhZ3NDaGFuZ2VkKCk7CiB9CiAKKyNpZiBV
U0UoR1NUUkVBTUVSX1BMQVlCSU4zKQorVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lcihUcmFja1ByaXZhdGVCYXNlKiBvd25lciwgZ2ludCBpbmRleCwg
R1JlZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSkKKyAgICA6IG1fbm90aWZpZXIoTWFpblRocmVhZE5v
dGlmaWVyPE1haW5UaHJlYWROb3RpZmljYXRpb24+OjpjcmVhdGUoKSkKKyAgICAsIG1faW5kZXgo
aW5kZXgpCisgICAgLCBtX3N0cmVhbShzdHJlYW0pCisgICAgLCBtX293bmVyKG93bmVyKQorewor
ICAgIEFTU0VSVChtX3N0cmVhbSk7CisKKyAgICAvLyBXZSBjYW4ndCBjYWxsIG5vdGlmeVRyYWNr
T2ZUYWdzQ2hhbmdlZCgpIGRpcmVjdGx5LCBiZWNhdXNlIHdlIG5lZWQgdGFnc0NoYW5nZWQoKSB0
byBzZXR1cCBtX3RhZ3MuCisgICAgdGFnc0NoYW5nZWQoKTsKK30KKyNlbmRpZgorCiBUcmFja1By
aXZhdGVCYXNlR1N0cmVhbWVyOjp+VHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcigpCiB7CiAgICAg
ZGlzY29ubmVjdCgpOwpAQCAtNjcsMTQgKzgwLDIwIEBAIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXI6On5UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKCkKIAogdm9pZCBUcmFja1ByaXZhdGVCYXNl
R1N0cmVhbWVyOjpkaXNjb25uZWN0KCkKIHsKKyAgICBtX3RhZ3MuY2xlYXIoKTsKKworI2lmIFVT
RShHU1RSRUFNRVJfUExBWUJJTjMpCisgICAgaWYgKG1fc3RyZWFtKQorICAgICAgICBtX3N0cmVh
bS5jbGVhcigpOworI2VuZGlmCisKKyAgICBtX25vdGlmaWVyLT5jYW5jZWxQZW5kaW5nTm90aWZp
Y2F0aW9ucygpOworCiAgICAgaWYgKCFtX3BhZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9u
b3RpZmllci0+Y2FuY2VsUGVuZGluZ05vdGlmaWNhdGlvbnMoKTsKICAgICBnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9wYWQuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEs
IDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOwotCiAgICAgbV9wYWQuY2xlYXIoKTsKLSAg
ICBtX3RhZ3MuY2xlYXIoKTsKIH0KIAogdm9pZCBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjph
Y3RpdmVDaGFuZ2VkQ2FsbGJhY2soVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lciogdHJhY2spCkBA
IC05MCwxMSArMTA5LDIwIEBAIHZvaWQgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6dGFnc0No
YW5nZWRDYWxsYmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKiB0CiB2b2lkIFRyYWNrUHJp
dmF0ZUJhc2VHU3RyZWFtZXI6OnRhZ3NDaGFuZ2VkKCkKIHsKICAgICBHUmVmUHRyPEdzdFRhZ0xp
c3Q+IHRhZ3M7Ci0gICAgaWYgKGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkoR19PQkpFQ1Rf
R0VUX0NMQVNTKG1fcGFkLmdldCgpKSwgInRhZ3MiKSkKLSAgICAgICAgZ19vYmplY3RfZ2V0KG1f
cGFkLmdldCgpLCAidGFncyIsICZ0YWdzLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBpZiAobV9w
YWQpIHsKKyAgICAgICAgaWYgKGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkoR19PQkpFQ1Rf
R0VUX0NMQVNTKG1fcGFkLmdldCgpKSwgInRhZ3MiKSkKKyAgICAgICAgICAgIGdfb2JqZWN0X2dl
dChtX3BhZC5nZXQoKSwgInRhZ3MiLCAmdGFncy5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHRhZ3MgPSBhZG9wdEdSZWYoZ3N0X3RhZ19saXN0X25ld19lbXB0
eSgpKTsKKyAgICB9CisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklOMykKKyAgICBlbHNlIGlmICht
X3N0cmVhbSkKKyAgICAgICAgdGFncyA9IGFkb3B0R1JlZihnc3Rfc3RyZWFtX2dldF90YWdzKG1f
c3RyZWFtLmdldCgpKSk7CisjZW5kaWYKICAgICBlbHNlCiAgICAgICAgIHRhZ3MgPSBhZG9wdEdS
ZWYoZ3N0X3RhZ19saXN0X25ld19lbXB0eSgpKTsKIAorICAgIEdTVF9ERUJVRygiSW5zcGVjdGlu
ZyB0cmFjayBhdCBpbmRleCAlZCB3aXRoIHRhZ3M6ICUiIEdTVF9QVFJfRk9STUFULCBtX2luZGV4
LCB0YWdzLmdldCgpKTsKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX3RhZ011dGV4
KTsKICAgICAgICAgbV90YWdzLnN3YXAodGFncyk7CkBAIC0xMDksNyArMTM3LDcgQEAgdm9pZCBU
cmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpub3RpZnlUcmFja09mQWN0aXZlQ2hhbmdlZCgpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGdib29sZWFuIGFjdGl2ZSA9IGZhbHNlOwotICAgIGlmICht
X3BhZCAmJiBnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5KEdfT0JKRUNUX0dFVF9DTEFTUyht
X3BhZC5nZXQoKSksICJhY3RpdmUiKSkKKyAgICBpZiAoZ19vYmplY3RfY2xhc3NfZmluZF9wcm9w
ZXJ0eShHX09CSkVDVF9HRVRfQ0xBU1MobV9wYWQuZ2V0KCkpLCAiYWN0aXZlIikpCiAgICAgICAg
IGdfb2JqZWN0X2dldChtX3BhZC5nZXQoKSwgImFjdGl2ZSIsICZhY3RpdmUsIG51bGxwdHIpOwog
CiAgICAgc2V0QWN0aXZlKGFjdGl2ZSk7CkBAIC0xNDMsOSArMTcxLDYgQEAgYm9vbCBUcmFja1By
aXZhdGVCYXNlR1N0cmVhbWVyOjpnZXRUYWcoR3N0VGFnTGlzdCogdGFncywgY29uc3QgZ2NoYXIq
IHRhZ05hbWUsIFMKIAogdm9pZCBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpub3RpZnlUcmFj
a09mVGFnc0NoYW5nZWQoKQogewotICAgIGlmICghbV9wYWQpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIFRyYWNrUHJpdmF0ZUJhc2VDbGllbnQqIGNsaWVudCA9IG1fb3duZXItPmNsaWVudCgpOwog
ICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJp
dmF0ZUJhc2VHU3RyZWFtZXIuaAppbmRleCAxYmI5YmRhMjg0NTM1N2YxOWQzZTFiM2ViMDNkNGNj
NGU5MmIxMDVlLi5kNTQ4NDcyZTViM2M2NDdlN2RiZmEwMjI0MTJjNmQxMWE1Zjc4MTFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgKQEAgLTIzLDEzICsyMywx
MyBAQAogICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyX2gK
LSNkZWZpbmUgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcl9oCisjcHJhZ21hIG9uY2UKIAogI2lm
IEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQog
CiAjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgogI2luY2x1ZGUgIk1haW5UaHJlYWROb3Rp
Zmllci5oIgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC00MSw2ICs0MSwxMyBAQCBjbGFzcyBU
cmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5UcmFja1By
aXZhdGVCYXNlR1N0cmVhbWVyKCk7CiAKKyAgICBlbnVtIFRyYWNrVHlwZSB7CisgICAgICAgIEF1
ZGlvLAorICAgICAgICBWaWRlbywKKyAgICAgICAgVGV4dCwKKyAgICAgICAgVW5rbm93bgorICAg
IH07CisKICAgICBHc3RQYWQqIHBhZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFkLmdldCgpOyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdCgpOwpAQCAtNTEsNyArNTgsOSBAQCBwdWJsaWM6
CiAKIHByb3RlY3RlZDoKICAgICBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKFRyYWNrUHJpdmF0
ZUJhc2UqIG93bmVyLCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFBhZD4pOwotCisjaWYgVVNFKEdT
VFJFQU1FUl9QTEFZQklOMykKKyAgICBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKFRyYWNrUHJp
dmF0ZUJhc2UqIG93bmVyLCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFN0cmVhbT4pOworI2VuZGlm
CiAgICAgdm9pZCBub3RpZnlUcmFja09mQWN0aXZlQ2hhbmdlZCgpOwogICAgIHZvaWQgbm90aWZ5
VHJhY2tPZlRhZ3NDaGFuZ2VkKCk7CiAKQEAgLTY3LDYgKzc2LDkgQEAgcHJvdGVjdGVkOgogICAg
IEF0b21pY1N0cmluZyBtX2xhYmVsOwogICAgIEF0b21pY1N0cmluZyBtX2xhbmd1YWdlOwogICAg
IEdSZWZQdHI8R3N0UGFkPiBtX3BhZDsKKyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKQorICAg
IEdSZWZQdHI8R3N0U3RyZWFtPiBtX3N0cmVhbTsKKyNlbmRpZgogCiBwcml2YXRlOgogICAgIGJv
b2wgZ2V0TGFuZ3VhZ2VDb2RlKEdzdFRhZ0xpc3QqIHRhZ3MsIEF0b21pY1N0cmluZyYgdmFsdWUp
OwpAQCAtODcsNSArOTksMyBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoVklERU9f
VFJBQ0spCi0KLSNlbmRpZiAvLyBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNr
UHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IGE2Zjk0YjgyYzA4
OThlZDhmMmRhZmMzODNkYWRmNmY2NDc3MTIwMmMuLjcxYTE0OTA0NmRlZWNkMDNlMzY0MjI0MmU1
OGE1ZTljMjI5OGVhNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0
cmVhbWVyLmNwcApAQCAtMjksMzMgKzI5LDQ5IEBACiAKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lci5oIgogCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmgiCiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1W
aWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIoR1Jl
ZlB0cjxHc3RFbGVtZW50PiBwbGF5YmluLCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFBhZD4gcGFk
KQorVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVy
KFdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyPiBwbGF5ZXIsIGdpbnQgaW5kZXgs
IEdSZWZQdHI8R3N0UGFkPiBwYWQpCiAgICAgOiBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKHRo
aXMsIGluZGV4LCBwYWQpCi0gICAgLCBtX3BsYXliaW4ocGxheWJpbikKKyAgICAsIG1fcGxheWVy
KHBsYXllcikKIHsKICAgICAvLyBGSVhNRTogR2V0IGEgcmVhbCBJRCBmcm9tIHRoZSB0a2hkIGF0
b20uCiAgICAgbV9pZCA9ICJWIiArIFN0cmluZzo6bnVtYmVyKGluZGV4KTsKICAgICBub3RpZnlU
cmFja09mQWN0aXZlQ2hhbmdlZCgpOwogfQogCisjaWYgVVNFKEdTVFJFQU1FUl9QTEFZQklOMykK
K1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihX
ZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4gcGxheWVyLCBnaW50IGluZGV4LCBH
UmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFtKQorICAgIDogVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1l
cih0aGlzLCBpbmRleCwgc3RyZWFtKQorICAgICwgbV9wbGF5ZXIocGxheWVyKQoreworICAgIG1f
aWQgPSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKTsKKyAgICBub3RpZnlU
cmFja09mQWN0aXZlQ2hhbmdlZCgpOworfQorI2VuZGlmCisKIHZvaWQgVmlkZW9UcmFja1ByaXZh
dGVHU3RyZWFtZXI6OmRpc2Nvbm5lY3QoKQogewotICAgIG1fcGxheWJpbi5jbGVhcigpOworICAg
IG1fcGxheWVyID0gbnVsbHB0cjsKICAgICBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpkaXNj
b25uZWN0KCk7CiB9CiAKK3ZvaWQgVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6Om1hcmtBc0Fj
dGl2ZSgpCit7CisgICAgVmlkZW9UcmFja1ByaXZhdGU6OnNldFNlbGVjdGVkKHRydWUpOworfQor
CiB2b2lkIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpzZXRTZWxlY3RlZChib29sIHNlbGVj
dGVkKQogewogICAgIGlmIChzZWxlY3RlZCA9PSB0aGlzLT5zZWxlY3RlZCgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgVmlkZW9UcmFja1ByaXZhdGU6OnNldFNlbGVjdGVkKHNlbGVjdGVkKTsKIAot
ICAgIGlmIChzZWxlY3RlZCAmJiBtX3BsYXliaW4pCi0gICAgICAgIGdfb2JqZWN0X3NldChtX3Bs
YXliaW4uZ2V0KCksICJjdXJyZW50LXZpZGVvIiwgbV9pbmRleCwgbnVsbHB0cik7CisgICAgaWYg
KHNlbGVjdGVkICYmIG1fcGxheWVyKQorICAgICAgICBtX3BsYXllci0+ZW5hYmxlVHJhY2soVHJh
Y2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpWaWRlbywgbV9pbmRleCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRl
R1N0cmVhbWVyLmgKaW5kZXggNWVhNzZlM2ZlYTEzZGM4N2EyY2FjNTc5YjNjOGU2MjYyY2UzNzhm
ZS4uYmIxOWQzMTQ3MjBhNDY0YTVmNzA4ZGMzZDVlM2Q3OTdjMjVkMTY2YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2
YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTIzLDggKzIzLDcgQEAKICAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXJfaAotI2RlZmlu
ZSBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcl9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJM
RShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQogCkBAIC0z
MiwxNyArMzEsMjggQEAKICNpbmNsdWRlICJUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgiCiAj
aW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGUuaCIKIAorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNp
bmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI7CiAKIGNsYXNzIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVh
bWVyIGZpbmFsIDogcHVibGljIFZpZGVvVHJhY2tQcml2YXRlLCBwdWJsaWMgVHJhY2tQcml2YXRl
QmFzZUdTdHJlYW1lciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxWaWRlb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lcj4gY3JlYXRlKEdSZWZQdHI8R3N0RWxlbWVudD4gcGxheWJpbiwgZ2ludCBpbmRl
eCwgR1JlZlB0cjxHc3RQYWQ+IHBhZCkKKyAgICBzdGF0aWMgUmVmPFZpZGVvVHJhY2tQcml2YXRl
R1N0cmVhbWVyPiBjcmVhdGUoV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI+IHBs
YXllciwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RQYWQ+IHBhZCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyKHBsYXllciwgaW5k
ZXgsIHBhZCkpOworICAgIH0KKyNpZiBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKQorICAgIHN0YXRp
YyBSZWY8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGNyZWF0ZShXZWFrUHRyPE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcj4gcGxheWVyLCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFN0cmVh
bT4gc3RyZWFtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9UcmFj
a1ByaXZhdGVHU3RyZWFtZXIocGxheWJpbiwgaW5kZXgsIHBhZCkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihwbGF5ZXIsIGluZGV4LCBz
dHJlYW0pKTsKICAgICB9CisjZW5kaWYKIAogICAgIHZvaWQgZGlzY29ubmVjdCgpIG92ZXJyaWRl
OwogCisgICAgdm9pZCBtYXJrQXNBY3RpdmUoKTsKICAgICB2b2lkIHNldFNlbGVjdGVkKGJvb2wp
IG92ZXJyaWRlOwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wgZW5hYmxlZCkgb3ZlcnJpZGUgeyBz
ZXRTZWxlY3RlZChlbmFibGVkKTsgfQogCkBAIC01MywxNCArNjMsMTQgQEAgcHVibGljOgogICAg
IEF0b21pY1N0cmluZyBsYW5ndWFnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fbGFuZ3Vh
Z2U7IH0KIAogcHJpdmF0ZToKLSAgICBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihHUmVmUHRy
PEdzdEVsZW1lbnQ+IHBsYXliaW4sIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0UGFkPik7Ci0KKyAg
ICBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcj4sIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0UGFkPik7CisjaWYgVVNFKEdTVFJFQU1F
Ul9QTEFZQklOMykKKyAgICBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4sIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0U3RyZWFtPik7
CisjZW5kaWYKICAgICBBdG9taWNTdHJpbmcgbV9pZDsKLSAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IG1fcGxheWJpbjsKKyAgICBXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4gbV9w
bGF5ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
VklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShWSURFT19UUkFDSykKLQotI2VuZGlm
IC8vIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBl
bGluZS5jcHAKaW5kZXggYTUzMDA5YjkxOTRmYzA0MTIxNzI2NmVkYTZlMTgyZjUyZGY0OGZhMy4u
OWNkM2NmNjRkNWYxZTI2MzUxZTFiZTdjN2UyYzJmYzZjZTEzZjdhYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGlu
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9BcHBlbmRQaXBlbGluZS5jcHAKQEAgLTEwNzMsMTEgKzEwNzMsMTEgQEAgdm9pZCBBcHBlbmRQ
aXBlbGluZTo6Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsoR3N0UGFkKiBkZW11eGVyU3Jj
UGFkKQogICAgIHN3aXRjaCAobV9zdHJlYW1UeXBlKSB7CiAgICAgY2FzZSBXZWJDb3JlOjpNZWRp
YVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkF1ZGlvOgogICAgICAgICBpZiAobV9wbGF5ZXJQ
cml2YXRlKQotICAgICAgICAgICAgbV90cmFjayA9IFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRl
R1N0cmVhbWVyOjpjcmVhdGUobV9wbGF5ZXJQcml2YXRlLT5waXBlbGluZSgpLCBpZCgpLCBzaW5r
U2lua1BhZC5nZXQoKSk7CisgICAgICAgICAgICBtX3RyYWNrID0gV2ViQ29yZTo6QXVkaW9UcmFj
a1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShtX3BsYXllclByaXZhdGUtPmNyZWF0ZVdlYWtQdHIo
KSwgaWQoKSwgc2lua1NpbmtQYWQuZ2V0KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdl
YkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VmlkZW86CiAgICAgICAgIGlm
IChtX3BsYXllclByaXZhdGUpCi0gICAgICAgICAgICBtX3RyYWNrID0gV2ViQ29yZTo6VmlkZW9U
cmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShtX3BsYXllclByaXZhdGUtPnBpcGVsaW5lKCks
IGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKKyAgICAgICAgICAgIG1fdHJhY2sgPSBXZWJDb3Jl
OjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1fcGxheWVyUHJpdmF0ZS0+Y3Jl
YXRlV2Vha1B0cigpLCBpZCgpLCBzaW5rU2lua1BhZC5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0Ogog
ICAgICAgICBtX3RyYWNrID0gV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1l
cjo6Y3JlYXRlKGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcAppbmRleCA5MThjNDI3
NjdjY2JjYzNjMmNhODg4NjJlMzkwNjhjYzE5Y2Q5YTY3Li40MGVhZTlhMWUxNmU2N2Q3N2MxZmFi
MDBlYjk3NjcxYWYyNjZkNDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwCkBAIC00ODYsMTAgKzQ4Niw5IEBAIHN0ZDo6
dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6YnVmZmVyZWQoKSBjCiAgICAgcmV0dXJuIG1fbWVkaWFTb3VyY2UgPyBtX21lZGlhU291
cmNlLT5idWZmZXJlZCgpIDogc3RkOjptYWtlX3VuaXF1ZTxQbGF0Zm9ybVRpbWVSYW5nZXM+KCk7
CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzb3VyY2VDaGFuZ2Vk
KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzb3VyY2VTZXR1cChHc3RF
bGVtZW50KiBzb3VyY2VFbGVtZW50KQogewotICAgIG1fc291cmNlID0gbnVsbHB0cjsKLSAgICBn
X29iamVjdF9nZXQobV9waXBlbGluZS5nZXQoKSwgInNvdXJjZSIsICZtX3NvdXJjZS5vdXRQdHIo
KSwgbnVsbHB0cik7CisgICAgbV9zb3VyY2UgPSBzb3VyY2VFbGVtZW50OwogCiAgICAgQVNTRVJU
KFdFQktJVF9JU19NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKaW5kZXggZTM1YzA2
NGI0MGNmZWNjNDdjM2YyYzZiM2E2ZTFjYzExMzAxMDI0ZC4uMTgxZTQzMjkxYmI2ZDA5Y2JkMzc3
ZDNjYzFhNDdmYTU2ODRkYzI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJlZCgpIGNvbnN0IG92
ZXJyaWRlOwogICAgIE1lZGlhVGltZSBtYXhNZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdm9pZCBzb3VyY2VDaGFuZ2VkKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzb3Vy
Y2VTZXR1cChHc3RFbGVtZW50Kikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldFJlYWR5U3RhdGUo
TWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUpOwogICAgIHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZSBi
L1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZQppbmRleCAwMzkzOGM4Nzc0
ZTZmZTc1YTFjZWM2MGNmY2NmY2Y2N2VkZGJiNDljLi42MmE2OWQ4OGM4ZTVhNzk1ODNjZjU1OGNh
OTExY2Q4ZTIwZmY3MjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVmaW5p
dGlvbnMuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtl
CkBAIC01LDMgKzUsNCBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
TUVESUFfU09VUkNFIFBSSVZBVEUgT04pCiAKIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9HU1RS
RUFNRVJfR0wgIldoZXRoZXIgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIEdTdHJlYW1lciBHTCIgUFJJ
VkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9HU1RSRUFNRVJfTVBFR1RTICJXaGV0
aGVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBNUEVHLVRTIiBQUklWQVRFIE9GRikKK1dFQktJVF9P
UFRJT05fREVGSU5FKFVTRV9HU1RSRUFNRVJfUExBWUJJTjMgIldoZXRoZXIgdG8gZW5hYmxlIHN1
cHBvcnQgZm9yIEdTdHJlYW1lcidzIHBsYXliaW4zIGVsZW1lbnQiIFBSSVZBVEUgT0ZGKQpkaWZm
IC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDdiZGM4OTIxYmNhODQ1ZGY3M2Nm
YzIyYzk4YWYwZTk5MWNkYzU1YTguLmY0MjQzNmU5Mjk4NDEzMGE0YmVlNzNhYzhlZGYwYzI2MWYw
NTYyYTYgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NCBAQAorMjAxOC0wMi0xNSAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+
CisKKyAgICAgICAgW0dTdHJlYW1lcl0gUGxheWJpbjMgc3VwcG9ydAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyNTMwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvR1N0cmVhbWVy
RGVmaW5pdGlvbnMuY21ha2U6IE5ldworICAgICAgICBVU0UoR1NUUkVBTUVSX1BMQVlCSU4zKSBm
ZWF0dXJlLiBUaGlzIHNob3VsZCBiZSBlbmFibGVkIG9ubHkgZm9yCisgICAgICAgIHZlcnkgcmVj
ZW50IHZlcnNpb25zIG9mIEdTdHJlYW1lciAoMS4xNCBhdCBsZWFzdCkgYW5kIGlzIG9wdGlvbmFs
LCBmb3Igbm93LgorCiAyMDE4LTAyLTA5ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bz
b255LmNvbT4KIAogICAgICAgICBTaW1wbGlmeSAuZ2l0aWdub3JlJ3MgV2ViS2l0TGlicmFyaWVz
L3dpbiBzZWN0aW9uLgo=
</data>
<flag name="review"
          id="352827"
          type_id="1"
          status="+"
          setter="calvaris"
    />
          </attachment>
      

    </bug>

</bugzilla>