<?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>120611</bug_id>
          
          <creation_ts>2013-09-02 16:33:33 -0700</creation_ts>
          <short_desc>Cut down on double hashing and code needlessly using hash table iterators</short_desc>
          <delta_ts>2013-09-03 15:36:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>120620</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>kling</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>923815</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-02 16:33:33 -0700</bug_when>
    <thetext>Cut down on double hashing and code needlessly using hash table iterators</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923818</commentid>
    <comment_count>1</comment_count>
      <attachid>210314</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-02 16:58:32 -0700</bug_when>
    <thetext>Created attachment 210314
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923823</commentid>
    <comment_count>2</comment_count>
      <attachid>210314</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-02 17:16:59 -0700</bug_when>
    <thetext>Comment on attachment 210314
Patch

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

These all look good.

&gt; Source/WebCore/bridge/NP_jsobject.cpp:74
&gt; +        ASSERT(m_map.contains(rootObject));
&gt; +        m_map.remove(rootObject);

It would be cool if we could think of a better pattern that would let us avoid the contains() in debug builds.

&gt; Source/WebCore/inspector/InspectorProfilerAgent.cpp:318
&gt;      if (type == CPUProfileType) {
&gt; -        if (m_profiles.contains(uid))
&gt; -            m_profiles.remove(uid);
&gt; +        m_profiles.remove(uid);
&gt;      } else if (type == HeapProfileType) {
&gt; -        if (m_snapshots.contains(uid))
&gt; -            m_snapshots.remove(uid);
&gt; +        m_snapshots.remove(uid);
&gt;      }

Looks like we don&apos;t need curly braces here anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923831</commentid>
    <comment_count>3</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-02 19:44:25 -0700</bug_when>
    <thetext>There&apos;s a bug in the DocumentEventQueue change:

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.WebCore             	0x0000000109fe854c WTF::RefPtr&lt;WebCore::EventTarget&gt;::get() const + 12 (RefPtr.h:64)
1   com.apple.WebCore             	0x0000000109fe6d1c WebCore::Event::target() const + 28 (Event.h:99)
2   com.apple.WebCore             	0x000000010a468660 WebCore::DocumentEventQueue::dispatchEvent(WTF::PassRefPtr&lt;WebCore::Event&gt;) + 32 (DocumentEventQueue.cpp:144)
3   com.apple.WebCore             	0x000000010a46860d WebCore::DocumentEventQueue::pendingEventTimerFired() + 525 (DocumentEventQueue.cpp:139)
4   com.apple.WebCore             	0x000000010a46c212 WebCore::DocumentEventQueueTimer::fired() + 98 (DocumentEventQueue.cpp:57)
5   com.apple.WebCore             	0x000000010b86d4b3 WebCore::ThreadTimers::sharedTimerFiredInternal() + 307 (ThreadTimers.cpp:132)
6   com.apple.WebCore             	0x000000010b86d1c9 WebCore::ThreadTimers::sharedTimerFired() + 25 (ThreadTimers.cpp:106)
7   com.apple.WebCore             	0x000000010b606313 WebCore::timerFired(__CFRunLoopTimer*, void*) + 67 (SharedTimerMac.mm:134)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923832</commentid>
    <comment_count>4</comment_count>
      <attachid>210314</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-02 19:47:43 -0700</bug_when>
    <thetext>Comment on attachment 210314
Patch

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

&gt; Source/WebCore/dom/DocumentEventQueue.cpp:138
&gt; -    while (!m_queuedEvents.isEmpty()) {
&gt; -        ListHashSet&lt;RefPtr&lt;Event&gt;, 16&gt;::iterator iter = m_queuedEvents.begin();
&gt; -        RefPtr&lt;Event&gt; event = *iter;
&gt; -        m_queuedEvents.remove(iter);
&gt; -        if (!event)
&gt; -            break;
&gt; -        dispatchEvent(event.get());
&gt; -    }
&gt; +    while (!m_queuedEvents.isEmpty())
&gt; +        dispatchEvent(m_queuedEvents.takeFirst().get());

Before this code runs, a null Event pointer is inserted in the queue, marking the place to stop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923850</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-02 22:51:38 -0700</bug_when>
    <thetext>I’ll land this without any DocumentEventQueue changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923851</commentid>
    <comment_count>6</comment_count>
      <attachid>210314</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-02 22:53:41 -0700</bug_when>
    <thetext>Comment on attachment 210314
Patch

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

&gt;&gt; Source/WebCore/dom/DocumentEventQueue.cpp:138
&gt;&gt; +        dispatchEvent(m_queuedEvents.takeFirst().get());
&gt; 
&gt; Before this code runs, a null Event pointer is inserted in the queue, marking the place to stop.

So funny that I missed that. So the while loop is nuts! It says while (!empty) but it’s never going to be empty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923853</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-02 22:59:41 -0700</bug_when>
    <thetext>Committed r154967: &lt;http://trac.webkit.org/changeset/154967&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924200</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-09-03 15:36:52 -0700</bug_when>
    <thetext>This cause terrible window resize performance: bug 120653.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210314</attachid>
            <date>2013-09-02 16:58:32 -0700</date>
            <delta_ts>2013-09-02 22:53:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-120611-20130902165831.patch</filename>
            <type>text/plain</type>
            <size>60452</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU0OTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGJiYmFlYTdmYTVkOTM3MmZmOGM3MDcz
YzM5YWI5MTJiNGU5ODg5NzkuLjQzOTU4NzgwZWY1MTRjZDJlZGYwNjE4MTRiYzY4NTY4ZTg0ZTI3
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTMtMDktMDIgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIEN1dCBkb3duIG9uIGRvdWJsZSBoYXNoaW5nIGFuZCBjb2Rl
IG5lZWRsZXNzbHkgdXNpbmcgaGFzaCB0YWJsZSBpdGVyYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDYxMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERvdWJsZSBoYXNoaW5nIGlzIGNvbW1vbiBp
biBjb2RlIHRoYXQgbmVlZHMgdG8gY29tYmluZSBhIHJlbW92ZSB3aXRoIHNvbWUKKyAgICAgICAg
YWN0aW9uIHRvIG9ubHkgYmUgZG9uZSBpZiB0aGUgY29kZSBpcyByZW1vdmVkLiBUaGUgb25seSB3
YXkgdG8gYXZvaWQgaXQgaXMKKyAgICAgICAgdG8gd3JpdGUgY29kZSB1c2luZyBmaW5kIGFuZCBh
IGhhc2ggdGFibGUgaXRlcmF0b3IuIFRvIGhlbHAgd2l0aCB0aGlzLCBhZGQKKyAgICAgICAgYSBi
b29sZWFuIHJldHVybiB2YWx1ZSB0byByZW1vdmUgZnVuY3Rpb25zIHRvIGluZGljYXRlIGlmIGFu
eXRoaW5nIHdhcyByZW1vdmVkLgorCisgICAgICAgIERvdWJsZSBoYXNoaW5nIGFsc28gaGFwcGVu
cyBpbiBjb2RlIHRoYXQgZG9lcyBhIGdldCBmb2xsb3dlZCBieSBhIHJlbW92ZS4KKyAgICAgICAg
VGhlIHRha2UgZnVuY3Rpb24gaXMgaGVscGZ1bCBpbiB0aGlzIGNhc2UuIFRvIGhlbHAgd2l0aCB0
aGlzLCBhZGQgYSB0YWtlRmlyc3QKKyAgICAgICAgZnVuY2l0b24gdG8gTGlzdEhhc2hTZXQuCisK
KyAgICAgICAgKiB3dGYvSGFzaENvdW50ZWRTZXQuaDoKKyAgICAgICAgKFdURjo6SGFzaENvdW50
ZWRTZXQ6OnJlbW92ZUFsbCk6IEFkZGVkIGEgYm9vbGVhbiByZXR1cm4gdmFsdWUsIGFuYWxvZ291
cyB0byB0aGUgb25lCisgICAgICAgIHRoYXQgdGhlIEhhc2hDb3VudGVkU2V0OjpyZW1vdmUgZnVu
Y3Rpb24gYWxyZWFkeSBoYXMuCisKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAgICAo
V1RGOjpIYXNoTWFwOjpyZW1vdmUpOiBBZGRlZCBhIGJvb2xlYW4gcmV0dXJuIHZhbHVlLCB0cnVl
IGlmIHNvbWV0aGluZyB3YXMgcmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvSGFzaFNldC5oOgorICAg
ICAgICAoV1RGOjpIYXNoU2V0OjpyZW1vdmUpOiBEaXR0by4KKyAgICAgICAgKiB3dGYvUmVmUHRy
SGFzaE1hcC5oOgorICAgICAgICAoV1RGOjpSZWZQdHJIYXNoTWFwOjpyZW1vdmUpOiBEaXR0by4K
KworICAgICAgICAqIHd0Zi9MaXN0SGFzaFNldC5oOgorICAgICAgICAoV1RGOjpMaXN0SGFzaFNl
dDo6dGFrZUZpcnN0KTogQWRkZWQuCisgICAgICAgIChXVEY6Okxpc3RIYXNoU2V0Ojp0YWtlTGFz
dCk6IEFkZGVkLgorICAgICAgICAoV1RGOjpMaXN0SGFzaFNldDo6cmVtb3ZlKTogQWRkZWQgYSBi
b29sZWFuIHJldHVybiB2YWx1ZSwgdHJ1ZSBpZiBzb21ldGhpbmcgd2FzIHJlbW92ZWQuCisKKyAg
ICAgICAgKiB3dGYvV1RGVGhyZWFkRGF0YS5oOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyVGFi
bGU6OnJlbW92ZSk6IFVzZSB0aGUgbmV3IHJlbW92ZSByZXR1cm4gdmFsdWUgdG8gZ2V0IHJpZCBv
ZiBtb3N0IG9mCisgICAgICAgIHRoZSBjb2RlIGluIHRoaXMgZnVuY3Rpb24uCisKIDIwMTMtMDgt
MzAgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIEpTVmFs
dWUgYm9vbCBjb252ZXJzaW9uIGxlc3MgZGFuZ2Vyb3VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzVmODYzNjg4
ZDFhNjk0YWJkZGM0MWFhNGI3NTYyYTdhNGI3MGI0My4uYmNmNTk5ZGIwNTJkMTUzYjBiYjY1YWYx
NTczODlkNmE1NzlkMTY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OSBAQAorMjAxMy0wOS0w
MiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ3V0IGRvd24gb24g
ZG91YmxlIGhhc2hpbmcgYW5kIGNvZGUgbmVlZGxlc3NseSB1c2luZyBoYXNoIHRhYmxlIGl0ZXJh
dG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIw
NjExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU29t
ZSBvZiB0aGVzZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgY29kZSBjbGVhbnVwLCBidXQgb3RoZXJz
IGNvdWxkIHByb3ZpZGUKKyAgICAgICAgYSBzbWFsbCBjb2RlIHNpemUgYW5kIHNwZWVkIGltcHJv
dmVtZW50IGJ5IGF2b2lkaW5nIGV4dHJhIGhhc2hpbmcuCisKKyAgICAgICAgKiBNb2R1bGVzL2dl
b2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9u
OjpXYXRjaGVyczo6ZmluZCk6IFVzZSBnZXQgaW5zdGVhZCBvZiBmaW5kLgorICAgICAgICAoV2Vi
Q29yZTo6R2VvbG9jYXRpb246OldhdGNoZXJzOjpyZW1vdmUpOiBVc2UgdGFrZSBpbnN0ZWFkIG9m
IGZpbmQuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6bWFrZUNhY2hlZFBvc2l0aW9u
Q2FsbGJhY2tzKTogVXNlIHRoZSByZXR1cm4KKyAgICAgICAgdmFsdWUgZnJvbSByZW1vdmUgdG8g
YXZvaWQgaGFzaGluZyB0d2ljZS4KKworICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6YWRkQXV0b21hdGlj
UHVsbE5vZGUpOiBVc2UgdGhlIHJldHVybiB2YWx1ZSBmcm9tCisgICAgICAgIGFkZCB0byBhdm9p
ZCBoYXNoaW5nIHR3aWNlLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpyZW1vdmVB
dXRvbWF0aWNQdWxsTm9kZSk6IFVzZSB0aGUgcmV0dXJuIHZhbHVlCisgICAgICAgIGZyb20gcmVt
b3ZlIHRvIGF2b2lkIGhhc2hpbmcgdHdpY2UuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvTm9kZUlucHV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZUlucHV0Ojpj
b25uZWN0KTogVXNlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBhZGQgdG8gYXZvaWQKKyAgICAgICAg
aGFzaGluZyB0d2ljZS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZUlucHV0OjpkaXNjb25u
ZWN0KTogVXNlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSByZW1vdmUKKyAgICAgICAgdG8gYXZvaWQg
aGFzaGluZyB0d2ljZS4KKworICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtOjpjb25uZWN0KTogVXNlIHRoZSByZXR1
cm4gdmFsdWUgZnJvbSBhZGQgdG8gYXZvaWQKKyAgICAgICAgaGFzaGluZyB0d2ljZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW06OmRpc2Nvbm5lY3QpOiBVc2UgdGhlIHJldHVybiB2YWx1
ZSBmcm9tIHJlbW92ZSB0bworICAgICAgICBhdm9pZCBoYXNoaW5nIHR3aWNlLgorCisgICAgICAg
ICogYnJpZGdlL05QX2pzb2JqZWN0LmNwcDoKKyAgICAgICAgKE9iamVjdE1hcDo6cmVtb3ZlKTog
VXNlIHJlbW92ZSBpbnN0ZWFkIG9mIGZpbmQvcmVtb3ZlLgorCisgICAgICAgICogZG9tL0RvY3Vt
ZW50RXZlbnRRdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudEV2ZW50UXVldWU6
OmNhbmNlbEV2ZW50KTogVXNlIHRoZSByZXR1cm4gdmFsdWUgZnJvbQorICAgICAgICByZW1vdmUg
aW5zdGVhZCBvZiBmaW5kL3JlbW92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50RXZlbnRR
dWV1ZTo6cGVuZGluZ0V2ZW50VGltZXJGaXJlZCk6IFVzZSB0YWtlRmlyc3QKKyAgICAgICAgdG8g
Z3JlYXRseSBzaW1wbGlmeSB0aGUgbG9vcCBpbiB0aGlzIGZ1bmN0aW9uLgorCisgICAgICAgICog
ZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6fk5vZGUpOiBVc2UgdGhlIHJl
dHVybiB2YWx1ZSBmcm9tIHJlbW92ZSBpbnN0ZWFkIG9mCisgICAgICAgIGZpbmQvcmVtb3ZlLgor
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6cmVtb3ZlUHJvZmlsZSk6IFJlbW92
ZSBuZWVkbGVzcworICAgICAgICBjYWxscyB0byBjb250YWlucy4KKworICAgICAgICAqIGxvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6
cmVtb3ZlU3VicmVzb3VyY2VMb2FkZXIpOiBVc2UgdGhlIHJldHVybgorICAgICAgICB2YWx1ZSBm
cm9tIHJlbW92ZSBpbnN0ZWFkIG9mIGZpbmQvcmVtb3ZlLgorCisgICAgICAgICogbG9hZGVyL1Jl
c291cmNlTG9hZFNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6cmVtb3ZlKTogVXNlIHRoZQorICAgICAgICByZXR1
cm4gdmFsdWUgZnJvbSByZW1vdmUgdG8gYXZvaWQgaGFzaGluZyB0d2ljZS4KKworICAgICAgICAq
IGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaXNhc3NvY2lhdGVEb2N1bWVudExvYWRlcik6
IFVzZQorICAgICAgICByZW1vdmUgaW5zdGVhZCBvZiBmaW5kL3JlbW92ZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2FjaGVEZXN0cm95ZWQpOiBSZW1vdmVkIGEg
bmVlZGxlc3MKKyAgICAgICAgY2FsbCB0byBjb250YWlucyB0byBhdm9pZCBoYXNoaW5nIHR3aWNl
LiBJdCdzIGZpbmUgdG8gZG8gdGhlIGNoZWNrCisgICAgICAgIGZvciBhbiBlbXB0eSBoYXNoIHRh
YmxlIHVuY29uZGl0aW9uYWxseS4KKworICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmFkZFVubG9hZEV2ZW50TGlzdGVuZXIpOiBFbGltaW5hdGVkIGEgbG9j
YWwgdmFyaWFibGUgZm9yIGNsYXJpdHkuCisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVVbmxvYWRF
dmVudExpc3RlbmVyKTogRGl0dG8uIEFsc28gdXNlIHJlbW92ZSBpbnN0ZWFkCisgICAgICAgIG9m
IGZpbmQvcmVtb3ZlLgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlQWxsVW5sb2FkRXZlbnRMaXN0
ZW5lcnMpOiBEaXR0by4gQWxzbyB1c2UgcmVtb3ZlQWxsIGluc3RlYWQKKyAgICAgICAgb2YgZmlu
ZC9yZW1vdmVBbGwuCisgICAgICAgIChXZWJDb3JlOjphZGRCZWZvcmVVbmxvYWRFdmVudExpc3Rl
bmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVCZWZvcmVVbmxvYWRFdmVudExp
c3RlbmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVBbGxCZWZvcmVVbmxvYWRF
dmVudExpc3RlbmVycyk6IERpdHRvLgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZW1vdmVWaWV3cG9ydENvbnN0cmFpbmVkT2Jq
ZWN0KTogVXNlIHRoZSByZXR1cm4KKyAgICAgICAgdmFsdWUgZnJvbSByZW1vdmUgdG8gYXZvaWQg
aGFzaGluZyB0d2ljZS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cmVtb3ZlU2Nyb2xs
YWJsZUFyZWEpOiBVc2UgdGhlIHJldHVybiB2YWx1ZSBmcm9tCisgICAgICAgIHJlbW92ZSBpbnN0
ZWFkIG9mIGZpbmQvcmVtb3ZlLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpjb250YWlu
c1Njcm9sbGFibGVBcmVhKTogVXNlICYmIGluc3RlYWQgb2YgYW4gaWYKKyAgICAgICAgc3RhdGVt
ZW50IGluIGEgd2F5IHRoYXQgaXMgaWRpb21hdGljIGZvciB0aGlzIGtpbmQgb2YgZnVuY3Rpb24u
CisKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6YWRk
UmVsZXZhbnRSZXBhaW50ZWRPYmplY3QpOiBVc2UgdGhlIHJldHVybiB2YWx1ZSBmcm9tCisgICAg
ICAgIHJlbW92ZSBpbnN0ZWFkIG9mIGZpbmQvcmVtb3ZlLgorCisgICAgICAgICogcGFnZS9QYWdl
R3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjpyZW1vdmVVc2VyU2NyaXB0
c0Zyb21Xb3JsZCk6IFVzZSByZW1vdmUgaW5zdGVhZAorICAgICAgICBvZiBmaW5kL3JlbW92ZS4K
KyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6cmVtb3ZlVXNlclN0eWxlU2hlZXRzRnJvbVdv
cmxkKTogVXNlIHRoZSByZXR1cm4KKyAgICAgICAgdmFsdWUgZnJvbSByZW1vdmUgaW5zdGVhZCBv
ZiBmaW5kL3JlbW92ZS4KKworICAgICAgICAqIHBhZ2UvUGVyZm9ybWFuY2VVc2VyVGltaW5nLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyUGVmb3JtYW5jZUVudHJpZXMpOiBSZW1vdmVkIGEg
bmVlZGxlc3MgY2FsbCB0byBjb250YWlucy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5UmVm
cmVzaE1vbml0b3I6OnJlbW92ZUNsaWVudCk6IFVzZSB0aGUgcmV0dXJuIHZhbHVlCisgICAgICAg
IGZyb20gcmVtb3ZlIGluc3RlYWQgb2YgZmluZC9yZW1vdmUuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyOjpkaXNwbGF5RGlkUmVmcmVzaCk6IFVzZSByZW1v
dmUKKyAgICAgICAgaW5zdGVhZCBvZiBmaW5kL3JlbW92ZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyOjpyZW1vdmVMYXllcik6IFVzZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20g
cmVtb3ZlCisgICAgICAgIGluc3RlYWQgb2YgZmluZC9yZW1vdmUuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS93aW4vV2luZG93TWVzc2FnZUJyb2FkY2FzdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6cmVtb3ZlTGlzdGVuZXIpOiBVc2UgcmVtb3ZlIGlu
c3RlYWQKKyAgICAgICAgb2YgZmluZC9yZW1vdmUuIEl0J3MgZmluZSB0byBkbyB0aGUgY2hlY2sg
Zm9yIGFuIGVtcHR5IGhhc2ggdGFibGUgdW5jb25kaXRpb25hbGx5LgorCisgICAgICAgICogcGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFz
ZTo6cmVtb3ZlRGlzYWJsZWRQbHVnaW5GaWxlKTogVXNlIHRoZSByZXR1cm4gdmFsdWUKKyAgICAg
ICAgZnJvbSByZW1vdmUgaW5zdGVhZCBvZiBmaW5kL3JlbW92ZS4KKworICAgICAgICAqIHJlbmRl
cmluZy9zdHlsZS9TdHlsZUN1c3RvbUZpbHRlclByb2dyYW1DYWNoZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUN1c3RvbUZpbHRlclByb2dyYW1DYWNoZTo6bG9va3VwKTogVXNlIGdldCBp
bnN0ZWFkIG9mIGZpbmQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUN1c3RvbUZpbHRlclByb2dy
YW1DYWNoZTo6YWRkKTogVXNlIGNvbnRhaW5zIGluc3RlYWQgb2YgZmluZAorICAgICAgICBpbiBh
biBhc3NlcnRpb24uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUN1c3RvbUZpbHRlclByb2dyYW1D
YWNoZTo6cmVtb3ZlKTogVXNlIHJlbW92ZSBpbnN0ZWFkIG9mCisgICAgICAgIGZpbmQvcmVtb3Zl
LgorCisgICAgICAgICogc3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQ3Vyc29yRWxlbWVudDo6cmVtb3ZlQ2xpZW50KTogVXNlIHRoZSByZXR1cm4gdmFsdWUg
ZnJvbSByZW1vdmUKKyAgICAgICAgaW5zdGVhZCBvZiBmaW5kL3JlbW92ZS4KKworICAgICAgICAq
IHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9j
dW1lbnRFeHRlbnNpb25zOjpyZW1vdmVSZXNvdXJjZSk6IFJlbW92ZWQgYW4gdW5uZWVkZWQgY2Fs
bAorICAgICAgICB0byBjb250YWlucy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0
ZW5zaW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQpOiBVc2UKKyAgICAg
ICAgcmVtb3ZlIGluc3RlYWQgb2YgZmluZC9yZW1vdmUuIEl0J3MgZmluZSB0byBkbyB0aGUgY2hl
Y2sgZm9yIGFuIGVtcHR5IGhhc2gKKyAgICAgICAgdGFibGUgdW5jb25kaXRpb25hbGx5LgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxFbGVtZW50UmVm
ZXJlbmNlc0ZvclRhcmdldCk6IFVzZQorICAgICAgICByZW1vdmUgaW5zdGVhZCBvZiBmaW5kL3Jl
bW92ZS4gQWxzbyByZW1vdmVkIHVuaGVscGZ1bCBhc3NlcnRpb25zLiBPbmUgaXMKKyAgICAgICAg
YWxyZWFkeSBkb25lIGJ5IEhhc2hNYXAsIGFuZCB0aGUgb3RoZXIgaXMganVzdCBjaGVja2luZyBh
IGJhc2ljIGludmFyaWFudAorICAgICAgICBvZiBldmVyeSBIYXNoTWFwIHRoYXQgZG9lc24ndCBu
ZWVkIHRvIGJlIGNoZWNrZWQuCisKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNo
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNhY2hlOjpyZW1vdmVDbGllbnRGcm9t
Q2FjaGUpOiBSZW1vdmVkIGFuIHVubmVlZGVkIGNhbGwKKyAgICAgICAgdG8gY29udGFpbnMuCisK
KyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJvcGVydHk6On5TVkdBbmltYXRlZFByb3BlcnR5KTog
VXNlIHRoZSB2ZXJzaW9uIG9mCisgICAgICAgIHJlbW92ZSB0aGF0IHRha2VzIGFuIGl0ZXJhdG9y
IHJhdGhlciB0aGFuIHRoZSBvbmUgdGhhdCB0YWtlcyBhIGtleSwgc28KKyAgICAgICAgd2UgZG9u
J3QgbmVlZCB0byByZWRvIHRoZSBoYXNoaW5nLgorCiAyMDEzLTA5LTAyICBBbmRyZWFzIEtsaW5n
ICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBTaW1wbGlmeSBEb2N1bWVudFR5cGUgaGFu
ZGxpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjJlODNlMzZmZjYxNGYzNWY5NGYzNTUyZjA4M2NlM2ZlNjJi
ZDljYS4uYWJiYjZiNjk2OWM0MmZmNWQyNjBjMjE4OTZjMDJmMGY0MTQwMDEzMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDM2IEBACisyMDEzLTA5LTAyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KKworICAgICAgICBDdXQgZG93biBvbiBkb3VibGUgaGFzaGluZyBhbmQgY29kZSBuZWVk
bGVzc2x5IHVzaW5nIGhhc2ggdGFibGUgaXRlcmF0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjA2MTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5j
cHA6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZSk6IFVzZSB0
YWtlIGluc3RlYWQgb2YgZmluZC9yZW1vdmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJl
ZmVyZW5jZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmVmZXJlbmNlczo6cmVtb3ZlUGFn
ZUdyb3VwKTogVXNlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSByZW1vdmUKKyAgICAgICAgaW5zdGVh
ZCBvZiBmaW5kL3JlbW92ZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR2VvbG9jYXRpb24vR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6Y2FuY2VsUmVxdWVzdEZvckdlb2xv
Y2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1h
bmFnZXI6OmRpZFJlY2VpdmVHZW9sb2NhdGlvblBlcm1pc3Npb25EZWNpc2lvbik6CisgICAgICAg
IFVzZSB0YWtlIGluc3RlYWQgb2YgZmluZC9yZW1vdmUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwOgorICAgICAgICAoV2ViS2l0OjpO
ZXRzY2FwZVBsdWdpbjo6ZnJhbWVEaWRGaW5pc2hMb2FkaW5nKTogVXNlIHRha2UgaW5zdGVhZCBv
ZiBmaW5kL3JlbW92ZS4KKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OmZyYW1lRGlk
RmFpbCk6IFVzZSB0YWtlIGluc3RlYWQgb2YgZmluZC9yZW1vdmUuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6cmVtb3ZlSXRlbSk6IFVzZSB0YWtlIGluc3Rl
YWQgb2YgZmluZC9yZW1vdmUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpZEZpbmlzaENoZWNraW5nVGV4dCk6
IFVzZSB0YWtlIGluc3RlYWQgb2YgZ2V0L3JlbW92ZSBzbyB3ZQorICAgICAgICBoYXNoIG9ubHkg
b25jZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkQ2FuY2VsQ2hlY2tpbmdUZXh0KTog
RGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnN0b3BFeHRlbmRpbmdJbmNyZW1lbnRh
bFJlbmRlcmluZ1N1cHByZXNzaW9uKTogVXNlIHRoZSByZXR1cm4KKyAgICAgICAgdmFsdWUgZnJv
bSByZW1vdmUgaW5zdGVhZCBvZiBjb250YWlucy9yZW1vdmUgc28gd2UgaGFzaCBvbmx5IG9uY2Uu
CisKIDIwMTMtMDktMDIgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSRUdSRVNTSU9OKHIxNTQ5MDkpOiBjYXVzZWQgbWFueSBjcmFzaGVzIG9uIFF0IFdL
MiwgRUZMIFdLMgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaCBi
L1NvdXJjZS9XVEYvd3RmL0hhc2hDb3VudGVkU2V0LmgKaW5kZXggZWZmNGEyOTNlOWM3MzliMTJj
NDNiNjg5MTI2ZDBjODQ1MGJjZDAwYS4uMzY3MzY4ODAxMDFhZTcwYjgyMTAzZDI5NTE1NWIxOWIz
NDZhMjFhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC02OCw4ICs2OCw4
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBib29sIHJlbW92ZShpdGVyYXRvcik7CiAgCiAg
ICAgICAgIC8vIFJlbW92ZXMgdGhlIHZhbHVlLCByZWdhcmRsZXNzIG9mIGl0cyBjb3VudC4KLSAg
ICAgICAgdm9pZCByZW1vdmVBbGwoaXRlcmF0b3IpOwotICAgICAgICB2b2lkIHJlbW92ZUFsbChj
b25zdCBWYWx1ZVR5cGUmKTsKKyAgICAgICAgYm9vbCByZW1vdmVBbGwoaXRlcmF0b3IpOworICAg
ICAgICBib29sIHJlbW92ZUFsbChjb25zdCBWYWx1ZVR5cGUmKTsKIAogICAgICAgICAvLyBDbGVh
cnMgdGhlIHdob2xlIHNldC4KICAgICAgICAgdm9pZCBjbGVhcigpOwpAQCAtMTgzLDE4ICsxODMs
MTkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Ci0gICAgaW5s
aW5lIHZvaWQgSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnJl
bW92ZUFsbChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQorICAgIGlubGluZSBib29sIEhhc2hDb3Vu
dGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpyZW1vdmVBbGwoY29uc3QgVmFs
dWVUeXBlJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJlbW92ZUFsbChmaW5kKHZhbHVlKSk7Cisg
ICAgICAgIHJldHVybiByZW1vdmVBbGwoZmluZCh2YWx1ZSkpOwogICAgIH0KICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzPgotICAgIGlubGluZSB2b2lkIEhhc2hDb3VudGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHM+OjpyZW1vdmVBbGwoaXRlcmF0b3IgaXQpCisgICAgaW5saW5lIGJvb2wgSGFz
aENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnJlbW92ZUFsbChpdGVy
YXRvciBpdCkKICAgICB7CiAgICAgICAgIGlmIChpdCA9PSBlbmQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBtX2ltcGwucmVtb3Zl
KGl0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNo
TWFwLmgKaW5kZXggNzA4ZThkODM4MzdjMDAxY2ZiZGVlZDFhMzE1MTEyZDIwZWYwMDJmMC4uMDM3
YmFmMWVjOWYxYWY0YWRkMDYwZWE0MTU0ZGQ2NGU4ZDgzZWJjNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTA2LDggKzEwNiw4IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICAvLyBhbmQgYSBib29sZWFuIHRoYXQncyB0cnVlIGlmIGEgbmV3IHZhbHVl
IHdhcyBhY3R1YWxseSBhZGRlZAogICAgICAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IEtleVR5cGUm
LCBNYXBwZWRQYXNzSW5UeXBlKTsKIAotICAgICAgICB2b2lkIHJlbW92ZShjb25zdCBLZXlUeXBl
Jik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICAgICAgYm9vbCByZW1vdmUo
Y29uc3QgS2V5VHlwZSYpOworICAgICAgICBib29sIHJlbW92ZShpdGVyYXRvcik7CiAgICAgICAg
IHZvaWQgY2xlYXIoKTsKIAogICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSB0YWtlKGNvbnN0IEtl
eVR5cGUmKTsgLy8gZWZmaWNpZW50IGNvbWJpbmF0aW9uIG9mIGdldCB3aXRoIHJlbW92ZQpAQCAt
MzgwLDE4ICszODAsMTkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WD4KLSAgICBpbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmUoaXRlcmF0
b3IgaXQpCisgICAgaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGl0
ZXJhdG9yIGl0KQogICAgIHsKICAgICAgICAgaWYgKGl0Lm1faW1wbCA9PSBtX2ltcGwuZW5kKCkp
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IG1faW1wbC5pbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogICAgICAgICBtX2ltcGwu
cmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdC5tX2ltcGwpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotICAgIGlubGluZSB2b2lkIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCisgICAgaW5s
aW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtl
eSkKICAgICB7Ci0gICAgICAgIHJlbW92ZShmaW5kKGtleSkpOworICAgICAgICByZXR1cm4gcmVt
b3ZlKGZpbmQoa2V5KSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL0hhc2hTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAppbmRleCAy
MDg1NTJkYTg4YWJhZjE0MjNjMmYwNGE4ZmIzNGQ1MzQwOWVmZjBiLi42MDdiNmJjZjMwZGNhNDRj
OTQ0YTY1NTJlNjM5Mzg5YjhhM2M5MzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNo
U2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaFNldC5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC04OCw4ICs4OCw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+CiAgICAgICAgIGJvb2wgYWRkKEl0ZXJhdG9y
VHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCk7CiAKLSAgICAgICAgdm9pZCByZW1vdmUoY29u
c3QgVmFsdWVUeXBlJik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICAgICAg
Ym9vbCByZW1vdmUoY29uc3QgVmFsdWVUeXBlJik7CisgICAgICAgIGJvb2wgcmVtb3ZlKGl0ZXJh
dG9yKTsKICAgICAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzVmFs
aWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmKTsKQEAgLTIwNCwxOCArMjA0LDE5IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+Ci0gICAgaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGl0ZXJh
dG9yIGl0KQorICAgIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRv
ciBpdCkKICAgICB7CiAgICAgICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQotICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBtX2lt
cGwuaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICAgICAgbV9pbXBsLnJlbW92
ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXQubV9pbXBsKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KLSAgICBpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoY29uc3Qg
VmFsdWVUeXBlJiB2YWx1ZSkKKyAgICBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1v
dmUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJlbW92ZShmaW5kKHZh
bHVlKSk7CisgICAgICAgIHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkpOwogICAgIH0KIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9MaXN0SGFzaFNldC5oIGIvU291cmNlL1dURi93dGYvTGlzdEhhc2hT
ZXQuaAppbmRleCA3ODYzOWI0MDY3YzEzN2Q3ZGYzNjhkNDlmYzEyOGY1OWU4OWFkNzIyLi4wNzMy
MTYwNDcxN2NmOWExZWEzMjc3M2M1MzM0YTJjOTMxYjM5ZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9MaXN0SGFzaFNldC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0xpc3RIYXNoU2V0LmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEJlbmphbWlu
IFBvdWxhaW4gPGlraXBvdUBnbWFpbC5jb20+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTA3LDEwICsxMDcs
MTIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIFZhbHVlVHlwZSYgZmlyc3QoKTsKICAgICAg
ICAgY29uc3QgVmFsdWVUeXBlJiBmaXJzdCgpIGNvbnN0OwogICAgICAgICB2b2lkIHJlbW92ZUZp
cnN0KCk7CisgICAgICAgIFZhbHVlVHlwZSB0YWtlRmlyc3QoKTsKIAogICAgICAgICBWYWx1ZVR5
cGUmIGxhc3QoKTsKICAgICAgICAgY29uc3QgVmFsdWVUeXBlJiBsYXN0KCkgY29uc3Q7CiAgICAg
ICAgIHZvaWQgcmVtb3ZlTGFzdCgpOworICAgICAgICBWYWx1ZVR5cGUgdGFrZUxhc3QoKTsKIAog
ICAgICAgICBpdGVyYXRvciBmaW5kKGNvbnN0IFZhbHVlVHlwZSYpOwogICAgICAgICBjb25zdF9p
dGVyYXRvciBmaW5kKGNvbnN0IFZhbHVlVHlwZSYpIGNvbnN0OwpAQCAtMTQwLDggKzE0Miw4IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICBBZGRSZXN1bHQgaW5zZXJ0QmVmb3JlKGNvbnN0IFZh
bHVlVHlwZSYgYmVmb3JlVmFsdWUsIGNvbnN0IFZhbHVlVHlwZSYgbmV3VmFsdWUpOwogICAgICAg
ICBBZGRSZXN1bHQgaW5zZXJ0QmVmb3JlKGl0ZXJhdG9yLCBjb25zdCBWYWx1ZVR5cGUmKTsKIAot
ICAgICAgICB2b2lkIHJlbW92ZShjb25zdCBWYWx1ZVR5cGUmKTsKLSAgICAgICAgdm9pZCByZW1v
dmUoaXRlcmF0b3IpOworICAgICAgICBib29sIHJlbW92ZShjb25zdCBWYWx1ZVR5cGUmKTsKKyAg
ICAgICAgYm9vbCByZW1vdmUoaXRlcmF0b3IpOwogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKICAg
ICBwcml2YXRlOgpAQCAtNjI5LDYgKzYzMSwxNCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IFU+CisgICAgaW5saW5lIFQgTGlzdEhhc2hTZXQ8VCwgaW5saW5lQ2FwYWNpdHksIFU+Ojp0YWtl
Rmlyc3QoKQorICAgIHsKKyAgICAgICAgVCByZXN1bHQgPSBmaXJzdCgpOworICAgICAgICByZW1v
dmVGaXJzdCgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgVT4KICAgICBpbmxp
bmUgY29uc3QgVCYgTGlzdEhhc2hTZXQ8VCwgaW5saW5lQ2FwYWNpdHksIFU+OjpmaXJzdCgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CkBAIC02NTgsNiArNjY4LDE0
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgVT4KKyAgICBpbmxpbmUgVCBMaXN0SGFzaFNl
dDxULCBpbmxpbmVDYXBhY2l0eSwgVT46OnRha2VMYXN0KCkKKyAgICB7CisgICAgICAgIFQgcmVz
dWx0ID0gbGFzdCgpOworICAgICAgICByZW1vdmVMYXN0KCk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBVPgogICAgIGlubGluZSB0eXBlbmFtZSBMaXN0SGFzaFNldDxULCBpbmxp
bmVDYXBhY2l0eSwgVT46Oml0ZXJhdG9yIExpc3RIYXNoU2V0PFQsIGlubGluZUNhcGFjaXR5LCBV
Pjo6ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogICAgIHsKICAgICAgICAgSW1wbFR5cGVJ
dGVyYXRvciBpdCA9IG1faW1wbC50ZW1wbGF0ZSBmaW5kPEJhc2VUcmFuc2xhdG9yPih2YWx1ZSk7
CkBAIC03NjEsMTggKzc3OSwxOSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIFU+Ci0gICAg
aW5saW5lIHZvaWQgTGlzdEhhc2hTZXQ8VCwgaW5saW5lQ2FwYWNpdHksIFU+OjpyZW1vdmUoaXRl
cmF0b3IgaXQpCisgICAgaW5saW5lIGJvb2wgTGlzdEhhc2hTZXQ8VCwgaW5saW5lQ2FwYWNpdHks
IFU+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiAgICAgewogICAgICAgICBpZiAoaXQgPT0gZW5kKCkp
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IG1faW1wbC5yZW1vdmUoaXQubm9kZSgpKTsKICAgICAgICAgdW5saW5rQW5kRGVsZXRlKGl0Lm5v
ZGUoKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgVT4KLSAgICBpbmxpbmUgdm9p
ZCBMaXN0SGFzaFNldDxULCBpbmxpbmVDYXBhY2l0eSwgVT46OnJlbW92ZShjb25zdCBWYWx1ZVR5
cGUmIHZhbHVlKQorICAgIGlubGluZSBib29sIExpc3RIYXNoU2V0PFQsIGlubGluZUNhcGFjaXR5
LCBVPjo6cmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiAgICAgewotICAgICAgICByZW1v
dmUoZmluZCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gcmVtb3ZlKGZpbmQodmFsdWUpKTsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIFU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHJIYXNoTWFwLmggYi9T
b3VyY2UvV1RGL3d0Zi9SZWZQdHJIYXNoTWFwLmgKaW5kZXggOTU0MTgzN2UyYTZmMjliOWYwNmMz
Yzk1NjJhMTMzNDZiMDFkNGNlMS4uMDFjY2U2ZTQxMjZiNThiNzYwNjYxNmFjNjMxZjliNjVhYzkx
MjlmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVmUHRySGFzaE1hcC5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1JlZlB0ckhhc2hNYXAuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtOTYsOSArOTYsOSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgQWRkUmVzdWx0
IGFkZChjb25zdCBLZXlUeXBlJiwgTWFwcGVkUGFzc0luVHlwZSk7CiAgICAgICAgIEFkZFJlc3Vs
dCBhZGQoUmF3S2V5VHlwZSwgTWFwcGVkUGFzc0luVHlwZSk7CiAKLSAgICAgICAgdm9pZCByZW1v
dmUoY29uc3QgS2V5VHlwZSYpOwotICAgICAgICB2b2lkIHJlbW92ZShSYXdLZXlUeXBlKTsKLSAg
ICAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IpOworICAgICAgICBib29sIHJlbW92ZShjb25zdCBL
ZXlUeXBlJik7CisgICAgICAgIGJvb2wgcmVtb3ZlKFJhd0tleVR5cGUpOworICAgICAgICBib29s
IHJlbW92ZShpdGVyYXRvcik7CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKIAogICAgICAgICBNYXBw
ZWRQYXNzT3V0VHlwZSB0YWtlKGNvbnN0IEtleVR5cGUmKTsgLy8gZWZmaWNpZW50IGNvbWJpbmF0
aW9uIG9mIGdldCB3aXRoIHJlbW92ZQpAQCAtMjc1LDI0ICsyNzUsMjUgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLSAgICBpbmxpbmUgdm9pZCBIYXNoTWFwPFJl
ZlB0cjxUPiwgVSwgViwgVywgWD46OnJlbW92ZShpdGVyYXRvciBpdCkKKyAgICBpbmxpbmUgYm9v
bCBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgWD46OnJlbW92ZShpdGVyYXRvciBpdCkKICAg
ICB7CiAgICAgICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBtX2ltcGwuaW50ZXJu
YWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICAgICAgbV9pbXBsLnJlbW92ZVdpdGhvdXRF
bnRyeUNvbnNpc3RlbmN5Q2hlY2soaXQubV9pbXBsKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLSAgICBpbmxpbmUgdm9pZCBIYXNoTWFwPFJlZlB0cjxU
PiwgVSwgViwgVywgWD46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCisgICAgaW5saW5lIGJv
b2wgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIFg+OjpyZW1vdmUoY29uc3QgS2V5VHlwZSYg
a2V5KQogICAgIHsKLSAgICAgICAgcmVtb3ZlKGZpbmQoa2V5KSk7CisgICAgICAgIHJldHVybiBy
ZW1vdmUoZmluZChrZXkpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotICAgIGlubGluZSB2
b2lkIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBYPjo6cmVtb3ZlKFJhd0tleVR5cGUga2V5
KQorICAgIGlubGluZSBib29sIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBYPjo6cmVtb3Zl
KFJhd0tleVR5cGUga2V5KQogICAgIHsKLSAgICAgICAgcmVtb3ZlKGZpbmQoa2V5KSk7CisgICAg
ICAgIHJldHVybiByZW1vdmUoZmluZChrZXkpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oIGIvU291cmNlL1dURi93
dGYvV1RGVGhyZWFkRGF0YS5oCmluZGV4IGZhMTU3ZTk3ODk2NzUzMjc2MmFkMjdjYTFkZjFiMDlm
ZWNmNWI1NjQuLjBjNmE1NGQ0MzBjOTYyZTAyNzljZjE1NjgzZWZmNDdhNDhmYzEwODUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9XVEZUaHJlYWREYXRhLmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlIDx3dGYvVGhyZWFk
U3BlY2lmaWMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKLS8vIEZJWE1FOiBUaGlz
IGlzIGEgdGVtcG9yYXJ5IGxheWVyaW5nIHZpb2xhdGlvbiB3aGlsZSB3ZSBtb3ZlIG1vcmUgc3Ry
aW5nIGNvZGUgdG8gV1RGLgorLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgbGF5ZXJpbmcg
dmlvbGF0aW9uIHVudGlsIHdlIG1vdmUgbW9yZSBvZiB0aGUgc3RyaW5nIGNvZGUgZnJvbSBKYXZh
U2NyaXB0Q29yZSB0byBXVEYuCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSWRlbnRpZmllclRh
YmxlIHsKQEAgLTQ0LDE4ICs0NCwxMCBAQCBjbGFzcyBJZGVudGlmaWVyVGFibGUgewogcHVibGlj
OgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+SWRlbnRpZmllclRhYmxlKCk7CiAKLSAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgSGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGQoU3RyaW5n
SW1wbCogdmFsdWUpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci0gICAg
SGFzaFNldDxTdHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGQoVSB2YWx1ZSk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkKFN0cmluZ0lt
cGwqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBIYXNoU2V0PFN0cmlu
Z0ltcGwqPjo6QWRkUmVzdWx0IGFkZChVKTsKIAotICAgIGJvb2wgcmVtb3ZlKFN0cmluZ0ltcGwq
IHIpCi0gICAgewotICAgICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IgaXRlciA9
IG1fdGFibGUuZmluZChyKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV90YWJsZS5yZW1vdmUoaXRlcik7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBib29sIHJlbW92ZShTdHJpbmdJbXBsKiBp
ZGVudGlmaWVyKSB7IHJldHVybiBtX3RhYmxlLnJlbW92ZShpZGVudGlmaWVyKTsgfQogCiBwcml2
YXRlOgogICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+IG1fdGFibGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCmluZGV4IGM3YTY1Yzcy
NmUwZTA2Yzk0MjEwYTg0MWU5ZTY3YzQ2ZWM1ODJhMjcuLmMxMzM3MmYxMTRkNjg0ZWVlOTI4OGYw
MTBmNjZhMDlhYjA4MzZlZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2Vv
bG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2Vv
bG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCkBAIC0xODcsMjkgKzE4NywyMCBAQCBib29sIEdlb2xv
Y2F0aW9uOjpXYXRjaGVyczo6YWRkKGludCBpZCwgUGFzc1JlZlB0cjxHZW9Ob3RpZmllcj4gcHJw
Tm90aWZpZXIpCiBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXIqIEdlb2xvY2F0aW9uOjpXYXRjaGVy
czo6ZmluZChpbnQgaWQpCiB7CiAgICAgQVNTRVJUKGlkID4gMCk7Ci0gICAgSWRUb05vdGlmaWVy
TWFwOjppdGVyYXRvciBpdGVyID0gbV9pZFRvTm90aWZpZXJNYXAuZmluZChpZCk7Ci0gICAgaWYg
KGl0ZXIgPT0gbV9pZFRvTm90aWZpZXJNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBpdGVyLT52YWx1ZS5nZXQoKTsKKyAgICByZXR1cm4gbV9pZFRvTm90aWZpZXJNYXAu
Z2V0KGlkKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZShpbnQgaWQp
CiB7CiAgICAgQVNTRVJUKGlkID4gMCk7Ci0gICAgSWRUb05vdGlmaWVyTWFwOjppdGVyYXRvciBp
dGVyID0gbV9pZFRvTm90aWZpZXJNYXAuZmluZChpZCk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9pZFRv
Tm90aWZpZXJNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX25vdGlmaWVyVG9JZE1h
cC5yZW1vdmUoaXRlci0+dmFsdWUpOwotICAgIG1faWRUb05vdGlmaWVyTWFwLnJlbW92ZShpdGVy
KTsKKyAgICBpZiAoYXV0byBub3RpZmllciA9IG1faWRUb05vdGlmaWVyTWFwLnRha2UoaWQpKQor
ICAgICAgICBtX25vdGlmaWVyVG9JZE1hcC5yZW1vdmUobm90aWZpZXIpOwogfQogCiB2b2lkIEdl
b2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKEdlb05vdGlmaWVyKiBub3RpZmllcikKIHsKLSAg
ICBOb3RpZmllclRvSWRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX25vdGlmaWVyVG9JZE1hcC5maW5k
KG5vdGlmaWVyKTsKLSAgICBpZiAoaXRlciA9PSBtX25vdGlmaWVyVG9JZE1hcC5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1faWRUb05vdGlmaWVyTWFwLnJlbW92ZShpdGVyLT52YWx1ZSk7
Ci0gICAgbV9ub3RpZmllclRvSWRNYXAucmVtb3ZlKGl0ZXIpOworICAgIGlmIChhdXRvIGlkZW50
aWZpZXIgPSBtX25vdGlmaWVyVG9JZE1hcC50YWtlKG5vdGlmaWVyKSkKKyAgICAgICAgbV9pZFRv
Tm90aWZpZXJNYXAucmVtb3ZlKGlkZW50aWZpZXIpOwogfQogCiBib29sIEdlb2xvY2F0aW9uOjpX
YXRjaGVyczo6Y29udGFpbnMoR2VvTm90aWZpZXIqIG5vdGlmaWVyKSBjb25zdApAQCAtMzc5LDkg
KzM3MCw3IEBAIHZvaWQgR2VvbG9jYXRpb246Om1ha2VDYWNoZWRQb3NpdGlvbkNhbGxiYWNrcygp
CiAKICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIG9uZS1zaG90IHJlcXVlc3QsIHN0b3AgaXQuIE90
aGVyd2lzZSwgaWYgdGhlIHdhdGNoIHN0aWxsCiAgICAgICAgIC8vIGV4aXN0cywgc3RhcnQgdGhl
IHNlcnZpY2UgdG8gZ2V0IHVwZGF0ZXMuCi0gICAgICAgIGlmIChtX29uZVNob3RzLmNvbnRhaW5z
KG5vdGlmaWVyKSkKLSAgICAgICAgICAgIG1fb25lU2hvdHMucmVtb3ZlKG5vdGlmaWVyKTsKLSAg
ICAgICAgZWxzZSBpZiAobV93YXRjaGVycy5jb250YWlucyhub3RpZmllcikpIHsKKyAgICAgICAg
aWYgKCFtX29uZVNob3RzLnJlbW92ZShub3RpZmllcikgJiYgbV93YXRjaGVycy5jb250YWlucyhu
b3RpZmllcikpIHsKICAgICAgICAgICAgIGlmIChub3RpZmllci0+aGFzWmVyb1RpbWVvdXQoKSB8
fCBzdGFydFVwZGF0aW5nKG5vdGlmaWVyKSkKICAgICAgICAgICAgICAgICBub3RpZmllci0+c3Rh
cnRUaW1lcklmTmVlZGVkKCk7CiAgICAgICAgICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggOGEwZThkNWIyYjYxNTBl
ZGNkMjRjNGRmY2MwNWIzZmZmYzliN2VlNi4uMWU3Zjk3MjZjZDIwNjZmYjVhZjYyZDBmYTZiNzg3
MDg3OGVkOTA2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Db250ZXh0LmNwcApAQCAtOTExLDIwICs5MTEsMTYgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmFk
ZEF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFw
aE93bmVyKCkpOwogCi0gICAgaWYgKCFtX2F1dG9tYXRpY1B1bGxOb2Rlcy5jb250YWlucyhub2Rl
KSkgewotICAgICAgICBtX2F1dG9tYXRpY1B1bGxOb2Rlcy5hZGQobm9kZSk7CisgICAgaWYgKG1f
YXV0b21hdGljUHVsbE5vZGVzLmFkZChub2RlKS5pc05ld0VudHJ5KQogICAgICAgICBtX2F1dG9t
YXRpY1B1bGxOb2Rlc05lZWRVcGRhdGluZyA9IHRydWU7Ci0gICAgfQogfQogCiB2b2lkIEF1ZGlv
Q29udGV4dDo6cmVtb3ZlQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlKiBub2RlKQogewogICAg
IEFTU0VSVChpc0dyYXBoT3duZXIoKSk7CiAKLSAgICBpZiAobV9hdXRvbWF0aWNQdWxsTm9kZXMu
Y29udGFpbnMobm9kZSkpIHsKLSAgICAgICAgbV9hdXRvbWF0aWNQdWxsTm9kZXMucmVtb3ZlKG5v
ZGUpOworICAgIGlmIChtX2F1dG9tYXRpY1B1bGxOb2Rlcy5yZW1vdmUobm9kZSkpCiAgICAgICAg
IG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKLSAgICB9CiB9CiAKIHZv
aWQgQXVkaW9Db250ZXh0Ojp1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcAppbmRleCA1MjEz
NjUwM2JkZmI5NGRkNmJjZjZkY2VjNmRkN2M5NjhhNTc1NjIxLi42YTJlNWRkM2I0MmUzMGQxNWI1
ZTcxM2ZjZTJlNDU0NjNmNzEzODUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcApAQCAtNTQsMTEgKzU0LDEwIEBAIHZvaWQgQXVk
aW9Ob2RlSW5wdXQ6OmNvbm5lY3QoQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIENoZWNrIGlmIHdlJ3JlIGFscmVhZHkgY29ubmVjdGVkIHRvIHRoaXMg
b3V0cHV0LgotICAgIGlmIChtX291dHB1dHMuY29udGFpbnMob3V0cHV0KSkKKyAgICBpZiAoIW1f
b3V0cHV0cy5hZGQob3V0cHV0KS5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIG91dHB1dC0+YWRkSW5wdXQodGhpcyk7Ci0gICAgbV9vdXRwdXRzLmFkZChvdXRwdXQp
OwogICAgIGNoYW5nZWRPdXRwdXRzKCk7CiAKICAgICAvLyBTb21ib2R5IGhhcyBqdXN0IGNvbm5l
Y3RlZCB0byB1cywgc28gY291bnQgaXQgYXMgYSByZWZlcmVuY2UuCkBAIC03NCw4ICs3Myw3IEBA
IHZvaWQgQXVkaW9Ob2RlSW5wdXQ6OmRpc2Nvbm5lY3QoQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZpcnN0IHRyeSB0byBkaXNjb25uZWN0IGZyb20g
ImFjdGl2ZSIgY29ubmVjdGlvbnMuCi0gICAgaWYgKG1fb3V0cHV0cy5jb250YWlucyhvdXRwdXQp
KSB7Ci0gICAgICAgIG1fb3V0cHV0cy5yZW1vdmUob3V0cHV0KTsKKyAgICBpZiAobV9vdXRwdXRz
LnJlbW92ZShvdXRwdXQpKSB7CiAgICAgICAgIGNoYW5nZWRPdXRwdXRzKCk7CiAgICAgICAgIG91
dHB1dC0+cmVtb3ZlSW5wdXQodGhpcyk7CiAgICAgICAgIG5vZGUoKS0+ZGVyZWYoQXVkaW9Ob2Rl
OjpSZWZUeXBlQ29ubmVjdGlvbik7IC8vIE5vdGU6IGl0J3MgaW1wb3J0YW50IHRvIHJldHVybiBp
bW1lZGlhdGVseSBhZnRlciBhbGwgZGVyZWYoKSBjYWxscyBzaW5jZSB0aGUgbm9kZSBtYXkgYmUg
ZGVsZXRlZC4KQEAgLTgzLDggKzgxLDcgQEAgdm9pZCBBdWRpb05vZGVJbnB1dDo6ZGlzY29ubmVj
dChBdWRpb05vZGVPdXRwdXQqIG91dHB1dCkKICAgICB9CiAgICAgCiAgICAgLy8gT3RoZXJ3aXNl
LCB0cnkgdG8gZGlzY29ubmVjdCBmcm9tIGRpc2FibGVkIGNvbm5lY3Rpb25zLgotICAgIGlmICht
X2Rpc2FibGVkT3V0cHV0cy5jb250YWlucyhvdXRwdXQpKSB7Ci0gICAgICAgIG1fZGlzYWJsZWRP
dXRwdXRzLnJlbW92ZShvdXRwdXQpOworICAgIGlmIChtX2Rpc2FibGVkT3V0cHV0cy5yZW1vdmUo
b3V0cHV0KSkgewogICAgICAgICBvdXRwdXQtPnJlbW92ZUlucHV0KHRoaXMpOwogICAgICAgICBu
b2RlKCktPmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOyAvLyBOb3RlOiBpdCdz
IGltcG9ydGFudCB0byByZXR1cm4gaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsIGRlcmVmKCkgY2FsbHMg
c2luY2UgdGhlIG5vZGUgbWF5IGJlIGRlbGV0ZWQuCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwCmluZGV4IDJiZTUwMzkx
ZTgyOWM2YTE2OTljNWRhYmRmYzQ2ZmNmYTA0OTUwNjQuLjNlNDg5OWY1MGUzOWMzOGIxN2U1MGI0
NTg1YTJiNjQ4MWJiNjBhYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9QYXJhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb1BhcmFtLmNwcApAQCAtMTcyLDExICsxNzIsMTAgQEAgdm9pZCBBdWRpb1BhcmFtOjpj
b25uZWN0KEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0KQogICAgIGlmICghb3V0cHV0KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobV9vdXRwdXRzLmNvbnRhaW5zKG91dHB1dCkpCisgICAgaWYg
KCFtX291dHB1dHMuYWRkKG91dHB1dCkuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgb3V0cHV0LT5hZGRQYXJhbSh0aGlzKTsKLSAgICBtX291dHB1dHMuYWRkKG91dHB1dCk7CiAg
ICAgY2hhbmdlZE91dHB1dHMoKTsKIH0KIApAQCAtMTg4LDggKzE4Nyw3IEBAIHZvaWQgQXVkaW9Q
YXJhbTo6ZGlzY29ubmVjdChBdWRpb05vZGVPdXRwdXQqIG91dHB1dCkKICAgICBpZiAoIW91dHB1
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fb3V0cHV0cy5jb250YWlucyhvdXRwdXQp
KSB7Ci0gICAgICAgIG1fb3V0cHV0cy5yZW1vdmUob3V0cHV0KTsKKyAgICBpZiAobV9vdXRwdXRz
LnJlbW92ZShvdXRwdXQpKSB7CiAgICAgICAgIGNoYW5nZWRPdXRwdXRzKCk7CiAgICAgICAgIG91
dHB1dC0+cmVtb3ZlUGFyYW0odGhpcyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29i
amVjdC5jcHAKaW5kZXggN2VhZGQ5ZGExYmMxZTYwNWM4NzU0NjljYTc4YzVlZWNlY2M2MTUwZS4u
OWU2ZjY4NDFlYTBmNDg2MmJhZWYwNTBhNWJiYzQ1ODE5NmI2MmRkZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvTlBfanNvYmplY3QuY3BwCkBAIC03MCw5ICs3MCw4IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgcmVtb3ZlKFJvb3RPYmplY3QqIHJvb3RPYmplY3QpCiAgICAgewotICAgICAgICBIYXNoTWFw
PFJvb3RPYmplY3QqLCBKU1RvTlBPYmplY3RNYXA+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmlu
ZChyb290T2JqZWN0KTsKLSAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9tYXAuZW5kKCkpOwotICAg
ICAgICBtX21hcC5yZW1vdmUoaXRlcik7CisgICAgICAgIEFTU0VSVChtX21hcC5jb250YWlucyhy
b290T2JqZWN0KSk7CisgICAgICAgIG1fbWFwLnJlbW92ZShyb290T2JqZWN0KTsKICAgICB9CiAK
ICAgICB2b2lkIHJlbW92ZShSb290T2JqZWN0KiByb290T2JqZWN0LCBKU09iamVjdCoganNPYmpl
Y3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuY3BwCmluZGV4IDlkMDdl
ZjJmODBhOGM3ZDY1NDljZjY1YTQxNGQwOTlhNzhiYjllNzguLmQzZDhhMjMyNjIwNmNlNjdiOTcx
YTllMjIxOTBmMTk4ZTgyZTUxMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudEV2ZW50UXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50
UXVldWUuY3BwCkBAIC0xMDcsMTAgKzEwNyw3IEBAIHZvaWQgRG9jdW1lbnRFdmVudFF1ZXVlOjpl
bnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2ZW50KFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBTCiAK
IGJvb2wgRG9jdW1lbnRFdmVudFF1ZXVlOjpjYW5jZWxFdmVudChFdmVudCogZXZlbnQpCiB7Ci0g
ICAgTGlzdEhhc2hTZXQ8UmVmUHRyPEV2ZW50PiwgMTY+OjppdGVyYXRvciBpdCA9IG1fcXVldWVk
RXZlbnRzLmZpbmQoZXZlbnQpOwotICAgIGJvb2wgZm91bmQgPSBpdCAhPSBtX3F1ZXVlZEV2ZW50
cy5lbmQoKTsKLSAgICBpZiAoZm91bmQpCi0gICAgICAgIG1fcXVldWVkRXZlbnRzLnJlbW92ZShp
dCk7CisgICAgYm9vbCBmb3VuZCA9IG1fcXVldWVkRXZlbnRzLnJlbW92ZShldmVudCk7CiAgICAg
aWYgKG1fcXVldWVkRXZlbnRzLmlzRW1wdHkoKSkKICAgICAgICAgbV9wZW5kaW5nRXZlbnRUaW1l
ci0+Y2FuY2VsKCk7CiAgICAgcmV0dXJuIGZvdW5kOwpAQCAtMTM3LDE0ICsxMzQsOCBAQCB2b2lk
IERvY3VtZW50RXZlbnRRdWV1ZTo6cGVuZGluZ0V2ZW50VGltZXJGaXJlZCgpCiAKICAgICBSZWZQ
dHI8RG9jdW1lbnRFdmVudFF1ZXVlPiBwcm90ZWN0b3IodGhpcyk7CiAKLSAgICB3aGlsZSAoIW1f
cXVldWVkRXZlbnRzLmlzRW1wdHkoKSkgewotICAgICAgICBMaXN0SGFzaFNldDxSZWZQdHI8RXZl
bnQ+LCAxNj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3F1ZXVlZEV2ZW50cy5iZWdpbigpOwotICAgICAg
ICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gKml0ZXI7Ci0gICAgICAgIG1fcXVldWVkRXZlbnRzLnJl
bW92ZShpdGVyKTsKLSAgICAgICAgaWYgKCFldmVudCkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpKTsKLSAgICB9CisgICAgd2hpbGUgKCFtX3F1
ZXVlZEV2ZW50cy5pc0VtcHR5KCkpCisgICAgICAgIGRpc3BhdGNoRXZlbnQobV9xdWV1ZWRFdmVu
dHMudGFrZUZpcnN0KCkuZ2V0KCkpOwogfQogCiB2b2lkIERvY3VtZW50RXZlbnRRdWV1ZTo6ZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBj
MThlNDhiNDJiZTFlODZlZDdlNWE2NTc5MDM5ZDc3MjAyOTEzMGE4Li5hY2Y5MWM1MmZlZTI2MTIz
MDIxOGQ2ZDJkNGU4NGU0OGJiMDY3NDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0zMzYsMTAgKzMz
Niw3IEBAIHZvaWQgTm9kZTo6dHJhY2tGb3JEZWJ1Z2dpbmcoKQogTm9kZTo6fk5vZGUoKQogewog
I2lmbmRlZiBOREVCVUcKLSAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXQgPSBpZ25vcmVT
ZXQuZmluZCh0aGlzKTsKLSAgICBpZiAoaXQgIT0gaWdub3JlU2V0LmVuZCgpKQotICAgICAgICBp
Z25vcmVTZXQucmVtb3ZlKGl0KTsKLSAgICBlbHNlCisgICAgaWYgKGlnbm9yZVNldC5yZW1vdmUo
dGhpcykpCiAgICAgICAgIG5vZGVDb3VudGVyLmRlY3JlbWVudCgpOwogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcApp
bmRleCAzMjJlYjk5ZTRhYTA2NzUxNWI5NWUyYWY2NjZkYWZiZTgyZGYzNTA3Li5mMzQ0ODVlZjAx
OWQwZjFkN2U3NzU0NWM4MThlNDZhMzczZWYxYTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC0zMTIsMTEgKzMxMiw5
IEBAIHZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6cmVtb3ZlUHJvZmlsZShFcnJvclN0cmlu
ZyosIGNvbnN0IFN0cmluZyYgdHlwZSwgaW50CiB7CiAgICAgdW5zaWduZWQgdWlkID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHJhd1VpZCk7CiAgICAgaWYgKHR5cGUgPT0gQ1BVUHJvZmlsZVR5cGUp
IHsKLSAgICAgICAgaWYgKG1fcHJvZmlsZXMuY29udGFpbnModWlkKSkKLSAgICAgICAgICAgIG1f
cHJvZmlsZXMucmVtb3ZlKHVpZCk7CisgICAgICAgIG1fcHJvZmlsZXMucmVtb3ZlKHVpZCk7CiAg
ICAgfSBlbHNlIGlmICh0eXBlID09IEhlYXBQcm9maWxlVHlwZSkgewotICAgICAgICBpZiAobV9z
bmFwc2hvdHMuY29udGFpbnModWlkKSkKLSAgICAgICAgICAgIG1fc25hcHNob3RzLnJlbW92ZSh1
aWQpOworICAgICAgICBtX3NuYXBzaG90cy5yZW1vdmUodWlkKTsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCmluZGV4IDhkZjI1YWVjNzIzNTI0Y2Nl
OTE3MmQ0ZTg0YmM4YWM4NGFmZTNkYmQuLjk0OWQ0ZmUzZmM1NGM0NmRiYjczYTdmMzBiN2M5ZTBl
ZThkMzM3YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcApAQCAt
MTMxMCwxMCArMTMxMCw4IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OmFkZFN1YnJlc291cmNlTG9h
ZGVyKFJlc291cmNlTG9hZGVyKiBsb2FkZXIpCiAKIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnJlbW92
ZVN1YnJlc291cmNlTG9hZGVyKFJlc291cmNlTG9hZGVyKiBsb2FkZXIpCiB7Ci0gICAgUmVzb3Vy
Y2VMb2FkZXJTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9zdWJyZXNvdXJjZUxvYWRlcnMuZmluZChsb2Fk
ZXIpOwotICAgIGlmIChpdCA9PSBtX3N1YnJlc291cmNlTG9hZGVycy5lbmQoKSkKKyAgICBpZiAo
IW1fc3VicmVzb3VyY2VMb2FkZXJzLnJlbW92ZShsb2FkZXIpKQogICAgICAgICByZXR1cm47Ci0g
ICAgbV9zdWJyZXNvdXJjZUxvYWRlcnMucmVtb3ZlKGl0KTsKICAgICBjaGVja0xvYWRDb21wbGV0
ZSgpOwogICAgIGlmIChGcmFtZSogZnJhbWUgPSBtX2ZyYW1lKQogICAgICAgICBmcmFtZS0+bG9h
ZGVyKCkuY2hlY2tMb2FkQ29tcGxldGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZFNjaGVkdWxlci5jcHAKaW5kZXggMWVkNmJmNzcwYjZjNTY3MDhkNjk1NzE2NzRl
MWJlMWMzZmU3N2NhOC4uMWQyNDNiNTVkNWUyNGVkMTM4OWU0Mzk4NjM1MDVkZDNiZjQ4NjA5NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAK
QEAgLTI3OCwxMCArMjc4LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZv
cm1hdGlvbjo6YWRkTG9hZEluUHJvZ3Jlc3MoUmVzb3VyY2VMb2FkZXIqIHIKICAgICAKIHZvaWQg
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnJlbW92ZShSZXNvdXJjZUxv
YWRlciogcmVzb3VyY2VMb2FkZXIpCiB7Ci0gICAgaWYgKG1fcmVxdWVzdHNMb2FkaW5nLmNvbnRh
aW5zKHJlc291cmNlTG9hZGVyKSkgewotICAgICAgICBtX3JlcXVlc3RzTG9hZGluZy5yZW1vdmUo
cmVzb3VyY2VMb2FkZXIpOworICAgIGlmIChtX3JlcXVlc3RzTG9hZGluZy5yZW1vdmUocmVzb3Vy
Y2VMb2FkZXIpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIAogICAgIGZvciAoaW50IHBy
aW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0OyBwcmlvcml0eSA+PSBSZXNvdXJj
ZUxvYWRQcmlvcml0eUxvd2VzdDsgLS1wcmlvcml0eSkgeyAgCiAgICAgICAgIFJlcXVlc3RRdWV1
ZTo6aXRlcmF0b3IgZW5kID0gbV9yZXF1ZXN0c1BlbmRpbmdbcHJpb3JpdHldLmVuZCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVH
cm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUdyb3VwLmNwcAppbmRleCA4M2RmNjBiMGZlY2UzY2M2MTExMDhlZGQ5NjdkNTUwOWNmOTg4Njgz
Li4zY2JlMTMyMDc5ODQzMjlmOWQxM2JkMWM0NzlmMzhkODc1NTYyMzFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3Vw
LmNwcApAQCAtMzYyLDEwICszNjIsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c3Rv
cExvYWRpbmcoKQogCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlzYXNzb2NpYXRlRG9j
dW1lbnRMb2FkZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKLSAgICBIYXNoU2V0PERvY3Vt
ZW50TG9hZGVyKj46Oml0ZXJhdG9yIGl0ID0gbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmZp
bmQobG9hZGVyKTsKLSAgICBpZiAoaXQgIT0gbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmVu
ZCgpKQotICAgICAgICBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMucmVtb3ZlKGl0KTsKLQor
ICAgIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycy5yZW1vdmUobG9hZGVyKTsKICAgICBtX3Bl
bmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMucmVtb3ZlKGxvYWRlcik7CiAKICAgICBsb2FkZXIt
PmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNldEFwcGxpY2F0aW9uQ2FjaGUoMCk7IC8vIFdpbGwg
c2V0IGNhbmRpZGF0ZSB0byAwLCB0b28uCkBAIC0zOTAsMTEgKzM4Nyw3IEBAIHZvaWQgQXBwbGlj
YXRpb25DYWNoZUdyb3VwOjpkaXNhc3NvY2lhdGVEb2N1bWVudExvYWRlcihEb2N1bWVudExvYWRl
ciogbG9hZGVyKQogCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2FjaGVEZXN0cm95ZWQo
QXBwbGljYXRpb25DYWNoZSogY2FjaGUpCiB7Ci0gICAgaWYgKCFtX2NhY2hlcy5jb250YWlucyhj
YWNoZSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKICAgICBtX2NhY2hlcy5yZW1vdmUoY2FjaGUp
OwotCiAgICAgaWYgKG1fY2FjaGVzLmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQobV9hc3Nv
Y2lhdGVkRG9jdW1lbnRMb2FkZXJzLmlzRW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVChtX3BlbmRp
bmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMuaXNFbXB0eSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAppbmRleCA1ZmZhZmY0OGZiZmQ0YTEyNGM0YWMyNWY4MjgyZTY3MTM1OGQ5NzcyLi4xNWJh
OTg0YmI3ZTA1MDdlOTU0NzIyYWY5YjcyYzkxMDRjNTM2MTY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuY3BwCkBAIC0xNzQsNTIgKzE3NCwzOCBAQCBzdGF0aWMgRE9NV2luZG93U2V0JiB3aW5k
b3dzV2l0aEJlZm9yZVVubG9hZEV2ZW50TGlzdGVuZXJzKCkKIAogc3RhdGljIHZvaWQgYWRkVW5s
b2FkRXZlbnRMaXN0ZW5lcihET01XaW5kb3cqIGRvbVdpbmRvdykKIHsKLSAgICBET01XaW5kb3dT
ZXQmIHNldCA9IHdpbmRvd3NXaXRoVW5sb2FkRXZlbnRMaXN0ZW5lcnMoKTsKLSAgICBpZiAoc2V0
LmFkZChkb21XaW5kb3cpLmlzTmV3RW50cnkpCisgICAgaWYgKHdpbmRvd3NXaXRoVW5sb2FkRXZl
bnRMaXN0ZW5lcnMoKS5hZGQoZG9tV2luZG93KS5pc05ld0VudHJ5KQogICAgICAgICBkb21XaW5k
b3ctPmRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOwogfQogCiBzdGF0aWMgdm9pZCByZW1vdmVV
bmxvYWRFdmVudExpc3RlbmVyKERPTVdpbmRvdyogZG9tV2luZG93KQogewotICAgIERPTVdpbmRv
d1NldCYgc2V0ID0gd2luZG93c1dpdGhVbmxvYWRFdmVudExpc3RlbmVycygpOwotICAgIERPTVdp
bmRvd1NldDo6aXRlcmF0b3IgaXQgPSBzZXQuZmluZChkb21XaW5kb3cpOwotICAgIGlmIChzZXQu
cmVtb3ZlKGl0KSkKKyAgICBpZiAod2luZG93c1dpdGhVbmxvYWRFdmVudExpc3RlbmVycygpLnJl
bW92ZShkb21XaW5kb3cpKQogICAgICAgICBkb21XaW5kb3ctPmVuYWJsZVN1ZGRlblRlcm1pbmF0
aW9uKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbW92ZUFsbFVubG9hZEV2ZW50TGlzdGVuZXJzKERP
TVdpbmRvdyogZG9tV2luZG93KQogewotICAgIERPTVdpbmRvd1NldCYgc2V0ID0gd2luZG93c1dp
dGhVbmxvYWRFdmVudExpc3RlbmVycygpOwotICAgIERPTVdpbmRvd1NldDo6aXRlcmF0b3IgaXQg
PSBzZXQuZmluZChkb21XaW5kb3cpOwotICAgIGlmIChpdCA9PSBzZXQuZW5kKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBzZXQucmVtb3ZlQWxsKGl0KTsKLSAgICBkb21XaW5kb3ctPmVuYWJsZVN1
ZGRlblRlcm1pbmF0aW9uKCk7CisgICAgaWYgKHdpbmRvd3NXaXRoVW5sb2FkRXZlbnRMaXN0ZW5l
cnMoKS5yZW1vdmVBbGwoZG9tV2luZG93KSkKKyAgICAgICAgZG9tV2luZG93LT5lbmFibGVTdWRk
ZW5UZXJtaW5hdGlvbigpOwogfQogCiBzdGF0aWMgdm9pZCBhZGRCZWZvcmVVbmxvYWRFdmVudExp
c3RlbmVyKERPTVdpbmRvdyogZG9tV2luZG93KQogewotICAgIERPTVdpbmRvd1NldCYgc2V0ID0g
d2luZG93c1dpdGhCZWZvcmVVbmxvYWRFdmVudExpc3RlbmVycygpOwotICAgIGlmIChzZXQuYWRk
KGRvbVdpbmRvdykuaXNOZXdFbnRyeSkKKyAgICBpZiAod2luZG93c1dpdGhCZWZvcmVVbmxvYWRF
dmVudExpc3RlbmVycygpLmFkZChkb21XaW5kb3cpLmlzTmV3RW50cnkpCiAgICAgICAgIGRvbVdp
bmRvdy0+ZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbW92
ZUJlZm9yZVVubG9hZEV2ZW50TGlzdGVuZXIoRE9NV2luZG93KiBkb21XaW5kb3cpCiB7Ci0gICAg
RE9NV2luZG93U2V0JiBzZXQgPSB3aW5kb3dzV2l0aEJlZm9yZVVubG9hZEV2ZW50TGlzdGVuZXJz
KCk7Ci0gICAgRE9NV2luZG93U2V0OjppdGVyYXRvciBpdCA9IHNldC5maW5kKGRvbVdpbmRvdyk7
Ci0gICAgaWYgKHNldC5yZW1vdmUoaXQpKQorICAgIGlmICh3aW5kb3dzV2l0aEJlZm9yZVVubG9h
ZEV2ZW50TGlzdGVuZXJzKCkucmVtb3ZlKGRvbVdpbmRvdykpCiAgICAgICAgIGRvbVdpbmRvdy0+
ZW5hYmxlU3VkZGVuVGVybWluYXRpb24oKTsKIH0KIAogc3RhdGljIHZvaWQgcmVtb3ZlQWxsQmVm
b3JlVW5sb2FkRXZlbnRMaXN0ZW5lcnMoRE9NV2luZG93KiBkb21XaW5kb3cpCiB7Ci0gICAgRE9N
V2luZG93U2V0JiBzZXQgPSB3aW5kb3dzV2l0aEJlZm9yZVVubG9hZEV2ZW50TGlzdGVuZXJzKCk7
Ci0gICAgRE9NV2luZG93U2V0OjppdGVyYXRvciBpdCA9IHNldC5maW5kKGRvbVdpbmRvdyk7Ci0g
ICAgaWYgKGl0ID09IHNldC5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHNldC5yZW1vdmVB
bGwoaXQpOwotICAgIGRvbVdpbmRvdy0+ZW5hYmxlU3VkZGVuVGVybWluYXRpb24oKTsKKyAgICBp
ZiAod2luZG93c1dpdGhCZWZvcmVVbmxvYWRFdmVudExpc3RlbmVycygpLnJlbW92ZUFsbChkb21X
aW5kb3cpKQorICAgICAgICBkb21XaW5kb3ctPmVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CiB9
CiAKIHN0YXRpYyBib29sIGFsbG93c0JlZm9yZVVubG9hZExpc3RlbmVycyhET01XaW5kb3cqIHdp
bmRvdykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBiZmZlYWIwNzc2MGU4Mjk5NTBh
ZTJmYTJiN2M2ZGJmNTkzMTAxODkyLi5lZmFiMzRjNTI0ZmE2NWIyZmI4MDAxYjJiNDhmOTc1OTY0
MTUxMWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0xNTYxLDggKzE1NjEsNyBA
QCB2b2lkIEZyYW1lVmlldzo6YWRkVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdChSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKIAogdm9pZCBGcmFtZVZpZXc6OnJlbW92ZVZpZXdwb3J0Q29uc3RyYWluZWRP
YmplY3QoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgaWYgKG1fdmlld3BvcnRDb25zdHJh
aW5lZE9iamVjdHMgJiYgbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cy0+Y29udGFpbnMob2Jq
ZWN0KSkgewotICAgICAgICBtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzLT5yZW1vdmUob2Jq
ZWN0KTsKKyAgICBpZiAobV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cyAmJiBtX3ZpZXdwb3J0
Q29uc3RyYWluZWRPYmplY3RzLT5yZW1vdmUob2JqZWN0KSkgewogICAgICAgICBpZiAoUGFnZSog
cGFnZSA9IGZyYW1lKCkucGFnZSgpKSB7CiAgICAgICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRp
bmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KSkKICAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZnJhbWVWaWV3Rml4ZWRP
YmplY3RzRGlkQ2hhbmdlKHRoaXMpOwpAQCAtNDA1OSwyMiArNDA1OCwxMiBAQCBib29sIEZyYW1l
Vmlldzo6YWRkU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQog
CiBib29sIEZyYW1lVmlldzo6cmVtb3ZlU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEqIHNj
cm9sbGFibGVBcmVhKQogewotICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYXMpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIFNjcm9sbGFibGVBcmVhU2V0OjppdGVyYXRvciBpdCA9IG1fc2Ny
b2xsYWJsZUFyZWFzLT5maW5kKHNjcm9sbGFibGVBcmVhKTsKLSAgICBpZiAoaXQgPT0gbV9zY3Jv
bGxhYmxlQXJlYXMtPmVuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3Njcm9s
bGFibGVBcmVhcy0+cmVtb3ZlKGl0KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbV9z
Y3JvbGxhYmxlQXJlYXMgJiYgbV9zY3JvbGxhYmxlQXJlYXMtPnJlbW92ZShzY3JvbGxhYmxlQXJl
YSk7CiB9CiAKIGJvb2wgRnJhbWVWaWV3Ojpjb250YWluc1Njcm9sbGFibGVBcmVhKFNjcm9sbGFi
bGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkgY29uc3QKIHsKLSAgICBpZiAoIW1fc2Nyb2xsYWJsZUFy
ZWFzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWFz
LT5jb250YWlucyhzY3JvbGxhYmxlQXJlYSk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWFz
ICYmIG1fc2Nyb2xsYWJsZUFyZWFzLT5jb250YWlucyhzY3JvbGxhYmxlQXJlYSk7CiB9CiAKIHZv
aWQgRnJhbWVWaWV3OjpyZW1vdmVDaGlsZChXaWRnZXQqIHdpZGdldCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
CmluZGV4IDg5MDhlMDZlNjVhODRhM2I0MmQ2MmY5MThlMTFjZDgyMGMyZTA5MjYuLmRkOTVkNjUz
OThmZDkyNzE1YTA5MzU0NmYwN2ZhNmRmNWFiZWQwYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAt
MTQxMCwxMSArMTQxMCw4IEBAIHZvaWQgUGFnZTo6YWRkUmVsZXZhbnRSZXBhaW50ZWRPYmplY3Qo
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IExheW91dFJlY3QmIG9iCiAKICAgICAvLyBJZiB0
aGlzIG9iamVjdCB3YXMgcHJldmlvdXNseSBjb3VudGVkIGFzIGFuIHVucGFpbnRlZCBvYmplY3Qs
IHJlbW92ZSBpdCBmcm9tIHRoYXQgSGFzaFNldAogICAgIC8vIGFuZCBjb3JyZXNwb25kaW5nIFJl
Z2lvbi4gRklYTUU6IFRoaXMgZG9lc24ndCBkbyB0aGUgcmlnaHQgdGhpbmcgaWYgdGhlIG9iamVj
dHMgb3ZlcmxhcC4KLSAgICBIYXNoU2V0PFJlbmRlck9iamVjdCo+OjppdGVyYXRvciBpdCA9IG1f
cmVsZXZhbnRVbnBhaW50ZWRSZW5kZXJPYmplY3RzLmZpbmQob2JqZWN0KTsKLSAgICBpZiAoaXQg
IT0gbV9yZWxldmFudFVucGFpbnRlZFJlbmRlck9iamVjdHMuZW5kKCkpIHsKLSAgICAgICAgbV9y
ZWxldmFudFVucGFpbnRlZFJlbmRlck9iamVjdHMucmVtb3ZlKGl0KTsKKyAgICBpZiAobV9yZWxl
dmFudFVucGFpbnRlZFJlbmRlck9iamVjdHMucmVtb3ZlKG9iamVjdCkpCiAgICAgICAgIG1fcmVs
ZXZhbnRVbnBhaW50ZWRSZWdpb24uc3VidHJhY3Qoc25hcHBlZFBhaW50UmVjdCk7Ci0gICAgfQog
CiAgICAgLy8gU3BsaXQgdGhlIHJlbGV2YW50UmVjdCBpbnRvIGEgdG9wIGhhbGYgYW5kIGEgYm90
dG9tIGhhbGYuIE1ha2luZyBzdXJlIHdlIGhhdmUgY292ZXJhZ2UgaW4KICAgICAvLyBib3RoIGhh
bHZlcyBoZWxwcyB0byBwcmV2ZW50IGNhc2VzIHdoZXJlIHdlIGhhdmUgYSBmdWxseSBsb2FkZWQg
bWVudSBiYXIgb3IgbWFzdGhlYWQgd2l0aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlR3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCmluZGV4
IDIyOGM4Mzk2ZTBkYTliMzZiMDVkYzBjZmY1MWMxYzUzOGM0YjdiMjguLjQ4MjBhODEyMTU4Mjlm
YWI1ZTk2NWYwMGJhNGMyNWQxNjczMTQ0YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZUdyb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAK
QEAgLTM2NSwxMSArMzY1LDcgQEAgdm9pZCBQYWdlR3JvdXA6OnJlbW92ZVVzZXJTY3JpcHRzRnJv
bVdvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiAgICAgaWYgKCFtX3VzZXJTY3JpcHRzKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBVc2VyU2NyaXB0TWFwOjppdGVyYXRvciBpdCA9IG1fdXNl
clNjcmlwdHMtPmZpbmQod29ybGQpOwotICAgIGlmIChpdCA9PSBtX3VzZXJTY3JpcHRzLT5lbmQo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgIAotICAgIG1fdXNlclNjcmlwdHMtPnJlbW92ZShp
dCk7CisgICAgbV91c2VyU2NyaXB0cy0+cmVtb3ZlKHdvcmxkKTsKIH0KIAogdm9pZCBQYWdlR3Jv
dXA6OnJlbW92ZVVzZXJTdHlsZVNoZWV0c0Zyb21Xb3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxk
KQpAQCAtMzc4LDEyICszNzQsOSBAQCB2b2lkIFBhZ2VHcm91cDo6cmVtb3ZlVXNlclN0eWxlU2hl
ZXRzRnJvbVdvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiAKICAgICBpZiAoIW1fdXNlclN0
eWxlU2hlZXRzKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgVXNlclN0eWxlU2hlZXRNYXA6
Oml0ZXJhdG9yIGl0ID0gbV91c2VyU3R5bGVTaGVldHMtPmZpbmQod29ybGQpOwotICAgIGlmIChp
dCA9PSBtX3VzZXJTdHlsZVNoZWV0cy0+ZW5kKCkpCisKKyAgICBpZiAoIW1fdXNlclN0eWxlU2hl
ZXRzLT5yZW1vdmUod29ybGQpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV91c2VyU3R5
bGVTaGVldHMtPnJlbW92ZShpdCk7CiAKICAgICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0
Q2FjaGVJbkFsbEZyYW1lcygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Q
ZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5j
ZVVzZXJUaW1pbmcuY3BwCmluZGV4IGY1NTE2ZmFlYzFjZTllZDdhOWQxODE5Mjc3NzM3YzViM2U0
YWQ3ZjYuLmUyYWY0M2VkODQxZTdlNjk2YzdlOTljNDQ4ODE5ZTgwOTJiNTE1YWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VVc2VyVGltaW5nLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHAKQEAgLTk1LDggKzk1
LDcgQEAgc3RhdGljIHZvaWQgY2xlYXJQZWZvcm1hbmNlRW50cmllcyhQZXJmb3JtYW5jZUVudHJ5
TWFwJiBwZXJmb3JtYW5jZUVudHJ5TWFwLCBjb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChwZXJmb3JtYW5jZUVudHJ5TWFwLmNvbnRhaW5zKG5hbWUpKQotICAgICAgICBwZXJm
b3JtYW5jZUVudHJ5TWFwLnJlbW92ZShuYW1lKTsKKyAgICBwZXJmb3JtYW5jZUVudHJ5TWFwLnJl
bW92ZShuYW1lKTsKIH0KIAogdm9pZCBVc2VyVGltaW5nOjptYXJrKGNvbnN0IFN0cmluZyYgbWFy
a05hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAKaW5kZXggNDIzZDE0
NzI2YWFkYzNmMjNlNGFjYzY1YTEwZjFkNzkxYzhkZWQ5Yy4uODBkN2ZmYTk2YTYyNmU4ODgyOTg5
Y2U5OTVmMzg1NGEwOWRlZDg0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwCkBAIC04MSwxMiArODEs
NyBAQCB2b2lkIERpc3BsYXlSZWZyZXNoTW9uaXRvcjo6YWRkQ2xpZW50KERpc3BsYXlSZWZyZXNo
TW9uaXRvckNsaWVudCogY2xpZW50KQogCiBib29sIERpc3BsYXlSZWZyZXNoTW9uaXRvcjo6cmVt
b3ZlQ2xpZW50KERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudCogY2xpZW50KQogewotICAgIERp
c3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudFNldDo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudHMuZmlu
ZChjbGllbnQpOwotICAgIGlmIChpdCAhPSBtX2NsaWVudHMuZW5kKCkpIHsKLSAgICAgICAgbV9j
bGllbnRzLnJlbW92ZShpdCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fY2xpZW50cy5yZW1vdmUoY2xpZW50KTsKIH0KIAogdm9p
ZCBEaXNwbGF5UmVmcmVzaE1vbml0b3I6OmRpc3BsYXlEaWRSZWZyZXNoKCkKQEAgLTE3OCw5ICsx
NzMsOCBAQCBib29sIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXI6OnNjaGVkdWxlQW5pbWF0
aW9uKERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudAogdm9pZCBEaXNwbGF5UmVmcmVzaE1vbml0
b3JNYW5hZ2VyOjpkaXNwbGF5RGlkUmVmcmVzaChEaXNwbGF5UmVmcmVzaE1vbml0b3IqIG1vbml0
b3IpCiB7CiAgICAgaWYgKG1vbml0b3ItPnNob3VsZEJlVGVybWluYXRlZCgpKSB7Ci0gICAgICAg
IERpc3BsYXlSZWZyZXNoTW9uaXRvck1hcDo6aXRlcmF0b3IgaXQgPSBtX21vbml0b3JzLmZpbmQo
bW9uaXRvci0+ZGlzcGxheUlEKCkpOwotICAgICAgICBBU1NFUlQoaXQgIT0gbV9tb25pdG9ycy5l
bmQoKSk7Ci0gICAgICAgIG1fbW9uaXRvcnMucmVtb3ZlKGl0KTsKKyAgICAgICAgQVNTRVJUKG1f
bW9uaXRvcnMuY29udGFpbnMobW9uaXRvci0+ZGlzcGxheUlEKCkpKTsKKyAgICAgICAgbV9tb25p
dG9ycy5yZW1vdmUobW9uaXRvci0+ZGlzcGxheUlEKCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRl
cmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJSZW5kZXJlci5jcHAKaW5kZXggMjRhODA2Zjc0ZGVhN2M4ZDUwMzliMGZhNzQ2ODkyN2U3Y2U0
ZmFhMy4uYTIwZDQ0YWI3MjEwN2VkZjE4OWUyMDllY2ZmNWZkMGVjM2IyYzJmZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRl
cmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyUmVuZGVyZXIuY3BwCkBAIC01MTAsMTEgKzUxMCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJl
cjo6YWRkTGF5ZXIoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIpCiAKIGJvb2wgTGF5ZXJS
ZW5kZXJlcjo6cmVtb3ZlTGF5ZXIoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIpCiB7Ci0g
ICAgTGF5ZXJTZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtX2xheWVycy5maW5kKGxheWVyKTsKLSAgICBp
ZiAoaXRlciA9PSBtX2xheWVycy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
bGF5ZXJzLnJlbW92ZShsYXllcik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG1fbGF5
ZXJzLnJlbW92ZShsYXllcik7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlcjo6YWRkTGF5ZXJUb1Jl
bGVhc2VUZXh0dXJlUmVzb3VyY2VzTGlzdChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaW5kb3dNZXNzYWdlQnJv
YWRjYXN0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VC
cm9hZGNhc3Rlci5jcHAKaW5kZXggNzA4ODk5NTI4ZmYzNDVjMmYxZDI2ZmFkZGFhYjRiOTdlZDRk
OTk2Zi4uZDJlMWQ0NzBhOTNhZmQ5NWYyYTYwMWU2Mjk2NzZhYzFkNTM4NjliNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpbmRvd01lc3NhZ2VCcm9hZGNh
c3Rlci5jcHAKQEAgLTg1LDEyICs4NSw3IEBAIHZvaWQgV2luZG93TWVzc2FnZUJyb2FkY2FzdGVy
OjphZGRMaXN0ZW5lcihXaW5kb3dNZXNzYWdlTGlzdGVuZXIqIGxpc3RlbmVyKQogCiB2b2lkIFdp
bmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6cmVtb3ZlTGlzdGVuZXIoV2luZG93TWVzc2FnZUxpc3Rl
bmVyKiBsaXN0ZW5lcikKIHsKLSAgICBMaXN0ZW5lclNldDo6aXRlcmF0b3IgZm91bmQgPSBtX2xp
c3RlbmVycy5maW5kKGxpc3RlbmVyKTsKLSAgICBpZiAoZm91bmQgPT0gbV9saXN0ZW5lcnMuZW5k
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGlzdGVuZXJzLnJlbW92ZShmb3VuZCk7Ci0K
KyAgICBtX2xpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOwogICAgIGlmIChtX2xpc3RlbmVycy5p
c0VtcHR5KCkpCiAgICAgICAgIGRlc3Ryb3koKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZS5jcHAKaW5kZXggMmQxN2FiYzI2ZTIwN2NlYTUyMzFiZWZhYjRmZmI0Y2Ri
NGMxNjMyNy4uZjhjYzAxMzg4YTgzZmNmMGZmY2VmNDBiNGRiMWVmMDNjNWY0NGJmYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKQEAgLTM3MSwxMSArMzcxLDcg
QEAgdm9pZCBQbHVnaW5EYXRhYmFzZTo6Y2xlYXIoKQogCiBib29sIFBsdWdpbkRhdGFiYXNlOjpy
ZW1vdmVEaXNhYmxlZFBsdWdpbkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKIHsKLSAgICBp
ZiAoIW1fZGlzYWJsZWRQbHVnaW5GaWxlcy5jb250YWlucyhmaWxlTmFtZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIG1fZGlzYWJsZWRQbHVnaW5GaWxlcy5yZW1vdmUoZmlsZU5hbWUp
OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBtX2Rpc2FibGVkUGx1Z2luRmlsZXMucmVt
b3ZlKGZpbGVOYW1lKTsKIH0KIAogYm9vbCBQbHVnaW5EYXRhYmFzZTo6YWRkRGlzYWJsZWRQbHVn
aW5GaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbUNhY2hl
LmNwcAppbmRleCAxNmI1NzlmNDk4MmQ2YzM4MzYzYmVlZmM1M2NjOWE1NmIzMmQ2MGIyLi44NmE3
MjRkMjJmZTQ4ODAxNzJhMmI1MzRmMDQ1ZGZkMzg3YzFjNDM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1c3RvbUZpbHRlclBy
b2dyYW1DYWNoZS5jcHAKQEAgLTU4LDggKzU4LDcgQEAgU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFt
Q2FjaGU6On5TdHlsZUN1c3RvbUZpbHRlclByb2dyYW1DYWNoZSgpCiAKIFN0eWxlQ3VzdG9tRmls
dGVyUHJvZ3JhbSogU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGU6Omxvb2t1cChjb25zdCBD
dXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8pIGNvbnN0CiB7Ci0gICAgQ2FjaGVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2NhY2hlLmZpbmQocHJvZ3JhbUluZm8pOwotICAg
IHJldHVybiBpdGVyICE9IG1fY2FjaGUuZW5kKCkgPyBpdGVyLT52YWx1ZSA6IDA7CisgICAgcmV0
dXJuIG1fY2FjaGUuZ2V0KHByb2dyYW1JbmZvKTsKIH0KIAogU3R5bGVDdXN0b21GaWx0ZXJQcm9n
cmFtKiBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW1DYWNoZTo6bG9va3VwKFN0eWxlQ3VzdG9tRmls
dGVyUHJvZ3JhbSogcHJvZ3JhbSkgY29uc3QKQEAgLTY5LDIxICs2OCwxNyBAQCBTdHlsZUN1c3Rv
bUZpbHRlclByb2dyYW0qIFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbUNhY2hlOjpsb29rdXAoU3R5
bGVDdXN0b21GaWx0ZQogCiB2b2lkIFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbUNhY2hlOjphZGQo
U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtKiBwcm9ncmFtKQogewotICAgIEN1c3RvbUZpbHRlclBy
b2dyYW1JbmZvIGtleSA9IHByb2dyYW1DYWNoZUtleShwcm9ncmFtKTsKLSAgICBBU1NFUlQobV9j
YWNoZS5maW5kKGtleSkgPT0gbV9jYWNoZS5lbmQoKSk7Ci0gICAgbV9jYWNoZS5zZXQoa2V5LCBw
cm9ncmFtKTsKKyAgICBBU1NFUlQoIW1fY2FjaGUuY29udGFpbnMocHJvZ3JhbUNhY2hlS2V5KHBy
b2dyYW0pKSk7CisgICAgbV9jYWNoZS5zZXQocHJvZ3JhbUNhY2hlS2V5KHByb2dyYW0pLCBwcm9n
cmFtKTsKICAgICBwcm9ncmFtLT5zZXRDYWNoZSh0aGlzKTsKIH0KIAogdm9pZCBTdHlsZUN1c3Rv
bUZpbHRlclByb2dyYW1DYWNoZTo6cmVtb3ZlKFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbSogcHJv
Z3JhbSkKIHsKLSAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY2FjaGUuZmluZChwcm9n
cmFtQ2FjaGVLZXkocHJvZ3JhbSkpOwotICAgIEFTU0VSVChpdGVyICE9IG1fY2FjaGUuZW5kKCkp
OwotICAgIG1fY2FjaGUucmVtb3ZlKGl0ZXIpOworICAgIEFTU0VSVChtX2NhY2hlLmNvbnRhaW5z
KHByb2dyYW1DYWNoZUtleShwcm9ncmFtKSkpOworICAgIG1fY2FjaGUucmVtb3ZlKHByb2dyYW1D
YWNoZUtleShwcm9ncmFtKSk7CiB9CiAKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ3Vyc29yRWxl
bWVudC5jcHAKaW5kZXggYWNjOTQwYTE4MjVmOGI5ODQzOWNmNTM3NzhjYWE1NmU4YzBjYTk5My4u
ZmNhMTQyOTJiNjAyMzUwNzcxYjQ3ZmRkZjJjNTI2ZGUzNTVjYjEwMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcApAQCAtMTA2LDExICsxMDYsOCBAQCB2b2lkIFNWR0N1
cnNvckVsZW1lbnQ6OmFkZENsaWVudChTVkdFbGVtZW50KiBlbGVtZW50KQogCiB2b2lkIFNWR0N1
cnNvckVsZW1lbnQ6OnJlbW92ZUNsaWVudChTVkdFbGVtZW50KiBlbGVtZW50KQogewotICAgIEhh
c2hTZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5maW5kKGVsZW1lbnQp
OwotICAgIGlmIChpdCAhPSBtX2NsaWVudHMuZW5kKCkpIHsKLSAgICAgICAgbV9jbGllbnRzLnJl
bW92ZShpdCk7CisgICAgaWYgKG1fY2xpZW50cy5yZW1vdmUoZWxlbWVudCkpCiAgICAgICAgIGVs
ZW1lbnQtPmN1cnNvckVsZW1lbnRSZW1vdmVkKCk7Ci0gICAgfQogfQogCiB2b2lkIFNWR0N1cnNv
ckVsZW1lbnQ6OnJlbW92ZVJlZmVyZW5jZWRFbGVtZW50KFNWR0VsZW1lbnQqIGVsZW1lbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCmluZGV4IDZiN2Vj
YTZhYmUwY2M1ODRiM2I4MWY4YWY1NjhjMmZiOTJkYmM3YmEuLjllZTYyNTBlZDcwZDhhYTg1ZWNk
N2E1YzQyYjI0Mzk4YmU4ODc3M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdE
b2N1bWVudEV4dGVuc2lvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVu
dEV4dGVuc2lvbnMuY3BwCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjphZGRSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBSZW5kZXJTVkdSZXNvdXJj
CiAKIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVSZXNvdXJjZShjb25zdCBBdG9t
aWNTdHJpbmcmIGlkKQogewotICAgIGlmIChpZC5pc0VtcHR5KCkgfHwgIW1fcmVzb3VyY2VzLmNv
bnRhaW5zKGlkKSkKKyAgICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBtX3Jlc291cmNlcy5yZW1vdmUoaWQpOwpAQCAtMzIyLDE2ICszMjIsMTIgQEAgdm9pZCBTVkdE
b2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KFNW
R0VsZW1lbnQqIHJlZmUKIHsKICAgICBWZWN0b3I8U1ZHRWxlbWVudCo+IHRvQmVSZW1vdmVkOwog
Ci0gICAgSGFzaE1hcDxTVkdFbGVtZW50KiwgT3duUHRyPEhhc2hTZXQ8U1ZHRWxlbWVudCo+ID4g
Pjo6aXRlcmF0b3IgZW5kID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpOwotICAgIGZvciAo
SGFzaE1hcDxTVkdFbGVtZW50KiwgT3duUHRyPEhhc2hTZXQ8U1ZHRWxlbWVudCo+ID4gPjo6aXRl
cmF0b3IgaXQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgYXV0byBlbmQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZW5kKCk7CisgICAgZm9y
IChhdXRvIGl0ID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5rZXk7Ci0g
ICAgICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnZh
bHVlLmdldCgpOwotICAgICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3Igc2V0SXQg
PSByZWZlcmVuY2luZ0VsZW1lbnRzLT5maW5kKHJlZmVyZW5jaW5nRWxlbWVudCk7Ci0gICAgICAg
IGlmIChzZXRJdCA9PSByZWZlcmVuY2luZ0VsZW1lbnRzLT5lbmQoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIHJlZmVyZW5jaW5nRWxlbWVudHMtPnJlbW92ZShzZXRJdCk7Ci0g
ICAgICAgIGlmIChyZWZlcmVuY2luZ0VsZW1lbnRzLT5pc0VtcHR5KCkpCisgICAgICAgIEhhc2hT
ZXQ8U1ZHRWxlbWVudCo+JiByZWZlcmVuY2luZ0VsZW1lbnRzID0gKml0LT52YWx1ZTsKKyAgICAg
ICAgcmVmZXJlbmNpbmdFbGVtZW50cy5yZW1vdmUocmVmZXJlbmNpbmdFbGVtZW50KTsKKyAgICAg
ICAgaWYgKHJlZmVyZW5jaW5nRWxlbWVudHMuaXNFbXB0eSgpKQogICAgICAgICAgICAgdG9CZVJl
bW92ZWQuYXBwZW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICB9CiAKQEAgLTM2NywxMyArMzYz
LDcgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlYnVpbGRBbGxFbGVtZW50UmVmZXJl
bmNlc0ZvclRhcmdldChTVkdFbGVtZW50KiByZWYKIAogdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lv
bnM6OnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVy
ZW5jZWRFbGVtZW50KQogewotICAgIEFTU0VSVChyZWZlcmVuY2VkRWxlbWVudCk7Ci0gICAgSGFz
aE1hcDxTVkdFbGVtZW50KiwgT3duUHRyPEhhc2hTZXQ8U1ZHRWxlbWVudCo+ID4gPjo6aXRlcmF0
b3IgaXQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZmluZChyZWZlcmVuY2VkRWxlbWVudCk7Ci0g
ICAgaWYgKGl0ID09IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbmQoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIEFTU0VSVChpdC0+a2V5ID09IHJlZmVyZW5jZWRFbGVtZW50KTsKLQotICAgIG1fZWxl
bWVudERlcGVuZGVuY2llcy5yZW1vdmUoaXQpOworICAgIG1fZWxlbWVudERlcGVuZGVuY2llcy5y
ZW1vdmUocmVmZXJlbmNlZEVsZW1lbnQpOwogfQogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcAppbmRleCA3Yzk4
ZTFiODYxMzk5NDhhN2FjM2E3YjgzYjY0OWJhODk2NThlYzM1Li5lM2E4OWZkM2JjMDUxNTBmNTU1
NDU5NWQ4YWRiZGI1ZDU1YzY5YTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlQ2FjaGUuY3BwCkBAIC00Nyw4ICs0Nyw3IEBAIHZvaWQgU1ZHSW1hZ2VDYWNoZTo6
cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKGNvbnN0IENhY2hlZEltYWdlQ2xpZW50KiBjbGllbnQpCiB7
CiAgICAgQVNTRVJUKGNsaWVudCk7CiAKLSAgICBpZiAobV9pbWFnZUZvckNvbnRhaW5lck1hcC5j
b250YWlucyhjbGllbnQpKQotICAgICAgICBtX2ltYWdlRm9yQ29udGFpbmVyTWFwLnJlbW92ZShj
bGllbnQpOworICAgIG1faW1hZ2VGb3JDb250YWluZXJNYXAucmVtb3ZlKGNsaWVudCk7CiB9CiAK
IHZvaWQgU1ZHSW1hZ2VDYWNoZTo6c2V0Q29udGFpbmVyU2l6ZUZvclJlbmRlcmVyKGNvbnN0IENh
Y2hlZEltYWdlQ2xpZW50KiBjbGllbnQsIGNvbnN0IEludFNpemUmIGNvbnRhaW5lclNpemUsIGZs
b2F0IGNvbnRhaW5lclpvb20pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuY3BwCmluZGV4IGU1ZmVlNWFhZWI3YzZlMDYwYmIwMDFi
YjEwZDBiM2MzMmI4MzI3NzMuLjYwZmFlNWJiZjc3MWQ5Zjk0MmYwMjczYTZiZTgyMDQ5ODZkNzAy
MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVk
UHJvcGVydHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGVkUHJvcGVydHkuY3BwCkBAIC0zOSwxMSArMzksMTAgQEAgU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6
U1ZHQW5pbWF0ZWRQcm9wZXJ0eShTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgY29uc3QgUXVh
bGkKIFNWR0FuaW1hdGVkUHJvcGVydHk6On5TVkdBbmltYXRlZFByb3BlcnR5KCkKIHsKICAgICAv
LyBSZW1vdmUgd3JhcHBlciBmcm9tIGNhY2hlLgotICAgIENhY2hlKiBjYWNoZSA9IGFuaW1hdGVk
UHJvcGVydHlDYWNoZSgpOwotICAgIGNvbnN0IENhY2hlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBj
YWNoZS0+ZW5kKCk7Ci0gICAgZm9yIChDYWNoZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjYWNoZS0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgQ2FjaGUmIGNhY2hlID0gKmFuaW1hdGVk
UHJvcGVydHlDYWNoZSgpOworICAgIGZvciAoYXV0byBpdCA9IGNhY2hlLmJlZ2luKCksIGVuZCA9
IGNhY2hlLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKGl0LT52YWx1ZSA9
PSB0aGlzKSB7Ci0gICAgICAgICAgICBjYWNoZS0+cmVtb3ZlKGl0LT5rZXkpOworICAgICAgICAg
ICAgY2FjaGUucmVtb3ZlKGl0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAKaW5k
ZXggMTcwZWMzMjUxYjc2NDBjZDM3MDg4NmZlYzRmM2YxYWRmMmVmOWZmNy4uODlmMDZiNTU3ZGY2
ODFjOWMwZTk3YTBiMzRhMzJiNDgzYmRhM2FlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwCkBAIC00MTcsMTMgKzQxNyw4IEBAIFBhc3NPd25Q
dHI8TWVzc2FnZURlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JNZXNzYWdlKFN0cmluZ1JlZmVy
ZW5jZSBtZXNzYWdlUmVjCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fd2FpdEZvck1lc3NhZ2VNdXRleCk7CiAKLSAgICAgICAgSGFzaE1hcDxzdGQ6OnBh
aXI8c3RkOjpwYWlyPFN0cmluZ1JlZmVyZW5jZSwgU3RyaW5nUmVmZXJlbmNlPiwgdWludDY0X3Q+
LCBPd25QdHI8TWVzc2FnZURlY29kZXI+Pjo6aXRlcmF0b3IgaXQgPSBtX3dhaXRGb3JNZXNzYWdl
TWFwLmZpbmQobWVzc2FnZUFuZERlc3RpbmF0aW9uKTsKLSAgICAgICAgaWYgKGl0LT52YWx1ZSkg
ewotICAgICAgICAgICAgT3duUHRyPE1lc3NhZ2VEZWNvZGVyPiBkZWNvZGVyID0gaXQtPnZhbHVl
LnJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1fd2FpdEZvck1lc3NhZ2VNYXAucmVtb3ZlKGl0KTsK
LQorICAgICAgICBpZiAoT3duUHRyPE1lc3NhZ2VEZWNvZGVyPiBkZWNvZGVyID0gbV93YWl0Rm9y
TWVzc2FnZU1hcC50YWtlKG1lc3NhZ2VBbmREZXN0aW5hdGlvbikpCiAgICAgICAgICAgICByZXR1
cm4gZGVjb2Rlci5yZWxlYXNlKCk7Ci0gICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIE5v
dyB3ZSB3YWl0LgogICAgICAgICBpZiAoIW1fd2FpdEZvck1lc3NhZ2VDb25kaXRpb24udGltZWRX
YWl0KG1fd2FpdEZvck1lc3NhZ2VNdXRleCwgYWJzb2x1dGVUaW1lKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByZWZlcmVuY2VzLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQcmVmZXJlbmNlcy5jcHAKaW5kZXggNDc2OGYyOGJmZjE5MDdiOTUz
ZDE4Zjg2ZGM3YTM1YWVhMmY4YmM2OS4uYTRjNGI3OTZhZjM1OWY0MTFhMjM2ZjMwNDI5MDdmZGYy
NDRiMjhiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByZWZlcmVu
Y2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJlZmVyZW5jZXMuY3Bw
CkBAIC03MCwxMyArNzAsOCBAQCB2b2lkIFdlYlByZWZlcmVuY2VzOjphZGRQYWdlR3JvdXAoV2Vi
UGFnZUdyb3VwKiBwYWdlR3JvdXApCiAKIHZvaWQgV2ViUHJlZmVyZW5jZXM6OnJlbW92ZVBhZ2VH
cm91cChXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCkKIHsKLSAgICBIYXNoU2V0PFdlYlBhZ2VHcm91
cCo+OjppdGVyYXRvciBpdGVyID0gbV9wYWdlR3JvdXBzLmZpbmQocGFnZUdyb3VwKTsKLSAgICBp
ZiAoaXRlciA9PSBtX3BhZ2VHcm91cHMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
cGFnZUdyb3Vwcy5yZW1vdmUoaXRlcik7Ci0KLSAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZCgpKSB7CisgICAgYm9vbCBkaWRSZW1vdmVQYWdlR3JvdXAgPSBtX3BhZ2VHcm91cHMucmVtb3Zl
KHBhZ2VHcm91cCk7CisgICAgaWYgKGRpZFJlbW92ZVBhZ2VHcm91cCAmJiBwcml2YXRlQnJvd3Np
bmdFbmFibGVkKCkpIHsKICAgICAgICAgLS1wcml2YXRlQnJvd3NpbmdQYWdlR3JvdXBDb3VudDsK
ICAgICAgICAgaWYgKCFwcml2YXRlQnJvd3NpbmdQYWdlR3JvdXBDb3VudCkKICAgICAgICAgICAg
IFdlYkNvbnRleHQ6OndpbGxTdG9wVXNpbmdQcml2YXRlQnJvd3NpbmcoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2Nh
dGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXggNmIwNWY3
ZmI4OWVhZjNlNjFjZTM0NDI0MTZiZTE3MjMyNDUwMjM3Ny4uYzQwY2Y2NjgxZDYwMjU5MGQyNzkw
YzU1NTgyZDlhMzA3YzMwNjk4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTU5LDcgKzU5LDYgQEAgdm9pZCBHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6c3RhcnRSZXF1ZXN0Rm9yR2VvbG9jYXRpb24oR2Vv
bG9jYXRpb24KICAgICBtX2dlb2xvY2F0aW9uVG9JRE1hcC5zZXQoZ2VvbG9jYXRpb24sIGdlb2xv
Y2F0aW9uSUQpOwogICAgIG1faWRUb0dlb2xvY2F0aW9uTWFwLnNldChnZW9sb2NhdGlvbklELCBn
ZW9sb2NhdGlvbik7CiAKLQogICAgIEZyYW1lKiBmcmFtZSA9IGdlb2xvY2F0aW9uLT5mcmFtZSgp
OwogCiAgICAgV2ViRnJhbWVMb2FkZXJDbGllbnQqIHdlYkZyYW1lTG9hZGVyQ2xpZW50ID0gdG9X
ZWJGcmFtZUxvYWRlckNsaWVudChmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkpOwpAQCAtNzMsMjYg
KzcyLDIwIEBAIHZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnN0YXJ0
UmVxdWVzdEZvckdlb2xvY2F0aW9uKEdlb2xvY2F0aW9uCiAKIHZvaWQgR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXI6OmNhbmNlbFJlcXVlc3RGb3JHZW9sb2NhdGlvbihHZW9sb2Nh
dGlvbiogZ2VvbG9jYXRpb24pCiB7Ci0gICAgR2VvbG9jYXRpb25Ub0lETWFwOjppdGVyYXRvciBp
dCA9IG1fZ2VvbG9jYXRpb25Ub0lETWFwLmZpbmQoZ2VvbG9jYXRpb24pOwotICAgIGlmIChpdCA9
PSBtX2dlb2xvY2F0aW9uVG9JRE1hcC5lbmQoKSkKKyAgICB1aW50NjRfdCBnZW9sb2NhdGlvbklE
ID0gbV9nZW9sb2NhdGlvblRvSURNYXAudGFrZShnZW9sb2NhdGlvbik7CisgICAgaWYgKCFnZW9s
b2NhdGlvbklEKQogICAgICAgICByZXR1cm47Ci0KLSAgICB1aW50NjRfdCBnZW9sb2NhdGlvbklE
ID0gaXQtPnZhbHVlOwotICAgIG1fZ2VvbG9jYXRpb25Ub0lETWFwLnJlbW92ZShpdCk7CiAgICAg
bV9pZFRvR2VvbG9jYXRpb25NYXAucmVtb3ZlKGdlb2xvY2F0aW9uSUQpOwogfQogCiB2b2lkIEdl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpkaWRSZWNlaXZlR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uRGVjaXNpb24odWludDY0X3QgZ2VvbG9jYXRpb25JRCwgYm9vbCBhbGxvd2VkKQog
ewotICAgIElEVG9HZW9sb2NhdGlvbk1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9HZW9sb2NhdGlv
bk1hcC5maW5kKGdlb2xvY2F0aW9uSUQpOwotICAgIGlmIChpdCA9PSBtX2lkVG9HZW9sb2NhdGlv
bk1hcC5lbmQoKSkKKyAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBtX2lkVG9HZW9sb2Nh
dGlvbk1hcC50YWtlKGdlb2xvY2F0aW9uSUQpOworICAgIGlmICghZ2VvbG9jYXRpb24pCiAgICAg
ICAgIHJldHVybjsKKyAgICBtX2dlb2xvY2F0aW9uVG9JRE1hcC5yZW1vdmUoZ2VvbG9jYXRpb24p
OwogCi0gICAgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uID0gaXQtPnZhbHVlOwogICAgIGdlb2xv
Y2F0aW9uLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7Ci0KLSAgICBtX2lkVG9HZW9sb2NhdGlvbk1h
cC5yZW1vdmUoaXQpOwotICAgIG1fZ2VvbG9jYXRpb25Ub0lETWFwLnJlbW92ZShnZW9sb2NhdGlv
bik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAK
aW5kZXggZWZjZjE5M2RjZjVlNDdjMmU0NGNlZjBmYjU0NTRjODNjMzBjMzhlNC4uMjA1NGRmOTIy
ZWZkMTU2MTFiMzc2MjdlZjI2M2JiMTcwN2ZhMjY4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4u
Y3BwCkBAIC03NjQsMzIgKzc2NCwyMiBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luOjpmcmFtZURpZEZp
bmlzaExvYWRpbmcodWludDY0X3QgcmVxdWVzdElEKQogewogICAgIEFTU0VSVChtX2lzU3RhcnRl
ZCk7CiAgICAgCi0gICAgUGVuZGluZ1VSTE5vdGlmeU1hcDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRp
bmdVUkxOb3RpZmljYXRpb25zLmZpbmQocmVxdWVzdElEKTsKLSAgICBpZiAoaXQgPT0gbV9wZW5k
aW5nVVJMTm90aWZpY2F0aW9ucy5lbmQoKSkKKyAgICBhdXRvIG5vdGlmaWNhdGlvbiA9IG1fcGVu
ZGluZ1VSTE5vdGlmaWNhdGlvbnMudGFrZShyZXF1ZXN0SUQpOworICAgIGlmIChub3RpZmljYXRp
b24uZmlyc3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgdXJsID0g
aXQtPnZhbHVlLmZpcnN0OwotICAgIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+dmFsdWUu
c2Vjb25kOwotCi0gICAgbV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5yZW1vdmUoaXQpOwotICAg
IAotICAgIE5QUF9VUkxOb3RpZnkodXJsLnV0ZjgoKS5kYXRhKCksIE5QUkVTX0RPTkUsIG5vdGlm
aWNhdGlvbkRhdGEpOworICAgIE5QUF9VUkxOb3RpZnkobm90aWZpY2F0aW9uLmZpcnN0LnV0Zjgo
KS5kYXRhKCksIE5QUkVTX0RPTkUsIG5vdGlmaWNhdGlvbi5zZWNvbmQpOwogfQogCiB2b2lkIE5l
dHNjYXBlUGx1Z2luOjpmcmFtZURpZEZhaWwodWludDY0X3QgcmVxdWVzdElELCBib29sIHdhc0Nh
bmNlbGxlZCkKIHsKICAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwogICAgIAotICAgIFBlbmRpbmdV
UkxOb3RpZnlNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5maW5k
KHJlcXVlc3RJRCk7Ci0gICAgaWYgKGl0ID09IG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnMuZW5k
KCkpCisgICAgYXV0byBub3RpZmljYXRpb24gPSBtX3BlbmRpbmdVUkxOb3RpZmljYXRpb25zLnRh
a2UocmVxdWVzdElEKTsKKyAgICBpZiAobm90aWZpY2F0aW9uLmZpcnN0LmlzTnVsbCgpKQogICAg
ICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgdXJsID0gaXQtPnZhbHVlLmZpcnN0OwotICAgIHZv
aWQqIG5vdGlmaWNhdGlvbkRhdGEgPSBpdC0+dmFsdWUuc2Vjb25kOwotCi0gICAgbV9wZW5kaW5n
VVJMTm90aWZpY2F0aW9ucy5yZW1vdmUoaXQpOwogICAgIAotICAgIE5QUF9VUkxOb3RpZnkodXJs
LnV0ZjgoKS5kYXRhKCksIHdhc0NhbmNlbGxlZCA/IE5QUkVTX1VTRVJfQlJFQUsgOiBOUFJFU19O
RVRXT1JLX0VSUiwgbm90aWZpY2F0aW9uRGF0YSk7CisgICAgTlBQX1VSTE5vdGlmeShub3RpZmlj
YXRpb24uZmlyc3QudXRmOCgpLmRhdGEoKSwgd2FzQ2FuY2VsbGVkID8gTlBSRVNfVVNFUl9CUkVB
SyA6IE5QUkVTX05FVFdPUktfRVJSLCBub3RpZmljYXRpb24uc2Vjb25kKTsKIH0KIAogdm9pZCBO
ZXRzY2FwZVBsdWdpbjo6ZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwg
Y29uc3QgU3RyaW5nJiByZXN1bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAppbmRleCBjOTcx
ZTBkZWFlMmUzZWJhNzg0YThjNWQ0ZDI5M2U0OGVmNzZmYmNjLi4zZjkxY2UxOWFjZjliZTAwYzMw
M2UzMmY4ZTMwOWQ2YWZhODg1NjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKQEAgLTEy
NiwxNCArMTI2LDEyIEBAIHVpbnQ2NF90IFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjppZEZvckl0
ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCiAKIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJl
bW92ZUl0ZW0odWludDY0X3QgaXRlbUlEKQogewotICAgIElEVG9IaXN0b3J5SXRlbU1hcDo6aXRl
cmF0b3IgaXQgPSBpZFRvSGlzdG9yeUl0ZW1NYXAoKS5maW5kKGl0ZW1JRCk7Ci0gICAgaWYgKGl0
ID09IGlkVG9IaXN0b3J5SXRlbU1hcCgpLmVuZCgpKQorICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4g
aXRlbSA9IGlkVG9IaXN0b3J5SXRlbU1hcCgpLnRha2UoaXRlbUlEKTsKKyAgICBpZiAoIWl0ZW0p
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgV2ViQ29yZTo6cGFnZUNhY2hlKCktPnJl
bW92ZShpdC0+dmFsdWUuZ2V0KCkpOwotCi0gICAgaGlzdG9yeUl0ZW1Ub0lETWFwKCkucmVtb3Zl
KGl0LT52YWx1ZSk7Ci0gICAgaWRUb0hpc3RvcnlJdGVtTWFwKCkucmVtb3ZlKGl0KTsKKyAgICBw
YWdlQ2FjaGUoKS0+cmVtb3ZlKGl0ZW0uZ2V0KCkpOworICAgIGhpc3RvcnlJdGVtVG9JRE1hcCgp
LnJlbW92ZShpdGVtKTsKIH0KIAogV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OldlYkJhY2tGb3J3
YXJkTGlzdFByb3h5KFdlYlBhZ2UqIHBhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggYWNhMThmM2YxYWQxZjlhZGFjZDYzYjU2YzljMjBj
NDE2N2E5NWI1My4uM2FkNGM0MDg5NzRhMDkxODBhMGU0YTZlYWIxNzMzOGY3ZDMzMGM2MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMzk1
NywyMiArMzk1NywyMCBAQCB2b2lkIFdlYlBhZ2U6OmFkZFRleHRDaGVja2luZ1JlcXVlc3QodWlu
dDY0X3QgcmVxdWVzdElELCBQYXNzUmVmUHRyPFRleHRDaGVja2luZwogCiB2b2lkIFdlYlBhZ2U6
OmRpZEZpbmlzaENoZWNraW5nVGV4dCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHQpCiB7Ci0gICAgVGV4dENoZWNraW5nUmVxdWVzdCog
cmVxdWVzdCA9IG1fcGVuZGluZ1RleHRDaGVja2luZ1JlcXVlc3RNYXAuZ2V0KHJlcXVlc3RJRCk7
CisgICAgUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+IHJlcXVlc3QgPSBtX3BlbmRpbmdUZXh0
Q2hlY2tpbmdSZXF1ZXN0TWFwLnRha2UocmVxdWVzdElEKTsKICAgICBpZiAoIXJlcXVlc3QpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIHJlcXVlc3QtPmRpZFN1Y2NlZWQocmVzdWx0KTsKLSAgICBt
X3BlbmRpbmdUZXh0Q2hlY2tpbmdSZXF1ZXN0TWFwLnJlbW92ZShyZXF1ZXN0SUQpOwogfQogCiB2
b2lkIFdlYlBhZ2U6OmRpZENhbmNlbENoZWNraW5nVGV4dCh1aW50NjRfdCByZXF1ZXN0SUQpCiB7
Ci0gICAgVGV4dENoZWNraW5nUmVxdWVzdCogcmVxdWVzdCA9IG1fcGVuZGluZ1RleHRDaGVja2lu
Z1JlcXVlc3RNYXAuZ2V0KHJlcXVlc3RJRCk7CisgICAgUmVmUHRyPFRleHRDaGVja2luZ1JlcXVl
c3Q+IHJlcXVlc3QgPSBtX3BlbmRpbmdUZXh0Q2hlY2tpbmdSZXF1ZXN0TWFwLnRha2UocmVxdWVz
dElEKTsKICAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIHJlcXVlc3Qt
PmRpZENhbmNlbCgpOwotICAgIG1fcGVuZGluZ1RleHRDaGVja2luZ1JlcXVlc3RNYXAucmVtb3Zl
KHJlcXVlc3RJRCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6ZGlkQ29tbWl0TG9hZChXZWJGcmFtZSog
ZnJhbWUpCkBAIC00MTgyLDEwICs0MTgwLDkgQEAgdW5zaWduZWQgV2ViUGFnZTo6ZXh0ZW5kSW5j
cmVtZW50YWxSZW5kZXJpbmdTdXBwcmVzc2lvbigpCiAKIHZvaWQgV2ViUGFnZTo6c3RvcEV4dGVu
ZGluZ0luY3JlbWVudGFsUmVuZGVyaW5nU3VwcHJlc3Npb24odW5zaWduZWQgdG9rZW4pCiB7Ci0g
ICAgaWYgKCFtX2FjdGl2ZVJlbmRlcmluZ1N1cHByZXNzaW9uVG9rZW5zLmNvbnRhaW5zKHRva2Vu
KSkKKyAgICBpZiAoIW1fYWN0aXZlUmVuZGVyaW5nU3VwcHJlc3Npb25Ub2tlbnMucmVtb3ZlKHRv
a2VuKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9hY3RpdmVSZW5kZXJpbmdTdXBwcmVzc2lv
blRva2Vucy5yZW1vdmUodG9rZW4pOwogICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5z
ZXRWaXN1YWxVcGRhdGVzQWxsb3dlZEJ5Q2xpZW50KCFzaG91bGRFeHRlbmRJbmNyZW1lbnRhbFJl
bmRlcmluZ1N1cHByZXNzaW9uKCkpOwogfQogICAgIAo=
</data>
<flag name="review"
          id="232411"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>