<?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>84556</bug_id>
          
          <creation_ts>2012-04-22 18:13:54 -0700</creation_ts>
          <short_desc>[GTK] Rework IME handling to fix bugs and prepare for WebKit2</short_desc>
          <delta_ts>2012-05-04 12:06:05 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>64674</blocked>
    
    <blocked>84394</blocked>
    
    <blocked>39544</blocked>
    
    <blocked>65093</blocked>
    
    <blocked>84981</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>joone.hur</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>607412</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-04-22 18:13:54 -0700</bug_when>
    <thetext>The way IME handling works now it&apos;s quite complicated to deal with misbehaving input methods. It&apos;s also tightly integrated into the WebKit1 WebCoreSupport infrastructure. This bug tracks decoupling the logic from WebKit1 and fixing a few remaining bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608593</commentid>
    <comment_count>1</comment_count>
      <attachid>138547</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-04-24 06:15:18 -0700</bug_when>
    <thetext>Created attachment 138547
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610815</commentid>
    <comment_count>2</comment_count>
      <attachid>139043</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-04-26 12:28:10 -0700</bug_when>
    <thetext>Created attachment 139043
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610816</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-04-26 12:28:31 -0700</bug_when>
    <thetext>Carlos pointed out a memory leak and some small style mistakes. I&apos;ve fixed those and updated the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615641</commentid>
    <comment_count>4</comment_count>
      <attachid>139043</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-05-03 14:37:36 -0700</bug_when>
    <thetext>Comment on attachment 139043
Patch

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

I&apos;m going to dream of compositions and preedits, oh yeah. I only have a couple concerns over code flow I&apos;d like you to double check for sanity. I love how it&apos;s taken lots of complexity into a couple objects, though, I can see how this will help WebKit2 big time.

&gt; Source/WebCore/platform/gtk/GtkInputMethodFilter.cpp:66
&gt; +    ASSERT(!m_widget);

Should we also ASSERT that the widget is not realized? As with this other ASSERT it seems pretty much impossible given we are only doing this on the instance init, but I guess that&apos;d make the sanity checking complete.

&gt; Source/WebCore/platform/gtk/GtkInputMethodFilter.cpp:135
&gt; +        if (!m_composingTextCurrently &amp;&amp; !m_preeditChanged &amp;&amp; m_confirmedComposition.length() == 1) {
&gt; +            bool result = sendSimpleKeyEvent(event, m_confirmedComposition);
&gt; +            if (!m_confirmedComposition.isEmpty()) {
&gt; +                m_composingTextCurrently = false;
&gt; +                m_confirmedComposition = String();
&gt; +            }

I could not figure out in which case this condition will be false, is it a side effect?

&gt; Source/WebCore/platform/gtk/GtkInputMethodFilter.cpp:162
&gt; +    // If this keystroke was not filtered, but resulted in an updated composition
&gt; +    // or preedit, we send those before the key event. The following event sequence
&gt; +    // copied from the Chromium source code illustrates the reasoning:

This all sounds logical to me, but the way the code is structured it looks like we can fall in here even if filtered is true (since inside that if there are no unconditional returns). Does this still hold in that case or did I miss something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615787</commentid>
    <comment_count>5</comment_count>
      <attachid>139043</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-03 16:42:47 -0700</bug_when>
    <thetext>Comment on attachment 139043
Patch

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

&gt;&gt; Source/WebCore/platform/gtk/GtkInputMethodFilter.cpp:66
&gt;&gt; +    ASSERT(!m_widget);
&gt; 
&gt; Should we also ASSERT that the widget is not realized? As with this other ASSERT it seems pretty much impossible given we are only doing this on the instance init, but I guess that&apos;d make the sanity checking complete.

This is a good idea. I&apos;ll add the ASSERT.

&gt;&gt; Source/WebCore/platform/gtk/GtkInputMethodFilter.cpp:135
&gt;&gt; +            }
&gt; 
&gt; I could not figure out in which case this condition will be false, is it a side effect?

I think you&apos;re right, so I&apos;ll remove this check.

&gt;&gt; Source/WebCore/platform/gtk/GtkInputMethodFilter.cpp:162
&gt;&gt; +    // copied from the Chromium source code illustrates the reasoning:
&gt; 
&gt; This all sounds logical to me, but the way the code is structured it looks like we can fall in here even if filtered is true (since inside that if there are no unconditional returns). Does this still hold in that case or did I miss something?

It&apos;s a bit unclear, but we want keyup events that were filtered to be processed here as well.  I can try to make this clearer by changing the comment  below from:

    // We also treat key release events the same way, as the IME code in
    // EditorClient doesn&apos;t get to look at them, as for key press events.

to

    // We also treat filtered key release events  the same way, as the IME code in
    // EditorClient doesn&apos;t get to look at them, as for key press events.

I can also try to simplify the cases above to be like:

if (filtered &amp;&amp; !m_composingTextCurrently &amp;&amp; !m_preeditChanged &amp;&amp; m_confirmedComposition.length() == 1) {
...
}

if (filtered &amp;&amp; event-&gt;type == GDK_KEY_PRESS)
{
...
}

if (event-&gt;type == GDK_KEY_RELEASE &amp;&amp; lastFilteredKeyPressCodeWithNoResults == event-&gt;keyval)
    return true;

// Now we should only have unfiltered key events that produced results and filtered key up events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616324</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-04 09:48:47 -0700</bug_when>
    <thetext>Committed r116114: &lt;http://trac.webkit.org/changeset/116114&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616484</commentid>
    <comment_count>7</comment_count>
      <attachid>139043</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-05-04 11:56:12 -0700</bug_when>
    <thetext>Comment on attachment 139043
Patch

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

&gt; Source/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp:445
&gt; +    ASSERT(platformEvent-&gt;string().isNull());

It broke the GTK debug build:

../../Source/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp: In member function ‘bool WebKit::EditorClient::handleInputMethodKeyboardEvent(WebCore::KeyboardEvent*)’:
../../Source/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp:445: error: ‘const class WebCore::PlatformKeyboardEvent’ has no member named ‘string’</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616494</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-04 12:06:05 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 139043 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=139043&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp:445
&gt; &gt; +    ASSERT(platformEvent-&gt;string().isNull());
&gt; 
&gt; It broke the GTK debug build:
&gt; 
&gt; ../../Source/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp: In member function ‘bool WebKit::EditorClient::handleInputMethodKeyboardEvent(WebCore::KeyboardEvent*)’:
&gt; ../../Source/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp:445: error: ‘const class WebCore::PlatformKeyboardEvent’ has no member named ‘string’

Thanks for letting me know. I fixed the GTK+ build here: http://trac.webkit.org/changeset/116135</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138547</attachid>
            <date>2012-04-24 06:15:18 -0700</date>
            <delta_ts>2012-04-26 12:28:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84556-20120424061517.patch</filename>
            <type>text/plain</type>
            <size>62232</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0OTgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTYxMDVkMTczM2I3YzM2
YTA1ZTc0MTQ5ODUyMGRhOGQzODFlNDVmOC4uOTY3NDhhZjZiNDRiMDIwNjg2OGVkMjYxOGQ4ZmI4
YTE3YWEwYTA1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTA0LTIzICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBSZXdv
cmsgSU1FIGhhbmRsaW5nIHRvIGZpeCBidWdzIGFuZCBwcmVwYXJlIGZvciBXZWJLaXQyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDU1NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
VGhpcyBjaGFuZ2UgaXMgYWxyZWFkeSBjb3ZlcmVkIGJ5IGEgc3VpdGUgb2Yga2V5Ym9hcmQKKyAg
ICAgICAgaGFuZGxpbmcgdW5pdCB0ZXN0cyBpbiBXZWJLaXRHVEsrLiBUaGVyZSBhcmUgc29tZSBj
aGFuZ2VzIGluIGJlaGF2aW9yLAorICAgICAgICBidXQgdGhleSBhcmUgZGlmZmljdWx0IHRvIHRl
c3Qgd2l0aG91dCBtb2NraW5nIG91dCBhbiBlbnRpcmUgR3RrSU1Db250ZXh0LgorCisgICAgICAg
IEFkZCBhIHN0cnVjdCwgQ29tcG9zaXRpb25SZXN1bHRzLCB3aGljaCBpcyB1c2VkIGJ5IFBsYXRm
b3JtS2V5Ym9hcmRFdmVudAorICAgICAgICB0byBwYWNrYWdlIGNvbXBvc2l0aW9uIGluZm9ybWF0
aW9uIHdpdGggYSBrZXlib2FyZCBldmVudC4gQWxzbyBhZGQgc29tZSBsb2dpYworICAgICAgICB0
byBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgdG8gZ2l2ZSB0aGUgcmlnaHQgaW5mb3JtYXRpb24gd2hl
biBpdCBoYXMgY29tcG9zaXRpb24KKyAgICAgICAgcmVzdWx0cy4KKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmxpc3QuYW06IEFkZGVkIG5ldyBzb3VyY2VzIHRvIHRoZSBsaXN0LgorICAgICAgICAq
IHBsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oOiAgQWRkZWQgYSBuZXcgQ29tcG9zaXRp
b25SZXN1bHRzIG1lbWJlciwKKyAgICAgICAgZ2V0dGVyLCBhbmQgYXJndW1lbnQgdG8gdGhlIGNv
bnN0cnVjdG9yLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Db21wb3NpdGlvblJlc3VsdHMuaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmNwcDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3aW5kb3dzS2V5Q29k
ZUZvckdka0tleUNvZGUpOiBXaGVuCisgICAgICAgIHRoZSBrZXkgdmFsdWUgaXMgdm9pZCByZXR1
cm4gdGhlIFZLX1BST0NFU1Mga2V5Y29kZSwgd2hpY2ggaXMgdGhlIGtleWNvZGUKKyAgICAgICAg
dGhhdCB3ZWIgY29udGVudCBleHBlY3RzIHdpdGgga2V5c3Ryb2tlcyB0aGF0IHRyaWdnZXIgY29t
cG9zaXRpb24gZXZlbnRzLgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnRUeXBlRm9yR2RrS2V5RXZl
bnQpOiBBYnN0cmFjdCBvdXQgdGhpcyBoZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjptb2RpZmll
cnNGb3JHZGtLZXlFdmVudCk6IEFic3RyYWN0IG91dCB0aGlzIGhlbHBlci4KKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KTogV2hl
biBhIFBsYXRmb3JtS2V5RXZlbnQKKyAgICAgICAgaGFzIGNvbXBvc2l0aW9uIHJlc3VsdHMsIHVz
ZSBWS19QUk9DRVNTIGFzIHRoZSBrZXljb2RlIGZvciB0aGlzIGV2ZW50LgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQpOiBX
aGVuIHRoaXMgZXZlbnQgaXMKKyAgICAgICAgdHJhbnNmb3JtZWQgaW50byBhIENoYXIgZXZlbnQs
IHRoZSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgdXNlZCBmb3IgRE9NIGtleXByZXNzCisgICAgICAg
IGV2ZW50cywgYW5kIGl0IGhhcyBjb21wb3NpdGlvbiByZXN1bHRzIGNsZWFyIHRoZSB0ZXh0IG1l
bWJlcnMuIFRoaXMgZm9yY2VzIHRoZQorICAgICAgICBFdmVudEhhbmRsZXIgY29kZSB0byBkcm9w
IHRoZSBrZXlwcmVzcyBldmVudC4gUGxhdGZvcm0gZXZlbnRzIHRoYXQgY2hhbmdlIHRoZQorICAg
ICAgICBjb21wb3NpdGlvbiBzdGF0ZXMgZG8gbm90IGhhdmUgY29ycmVzcG9uZGluZyBrZXlwcmVz
cyBET00gZXZlbnRzIChvbmx5IGtleWRvd24KKyAgICAgICAgYW5kIGtleXVwIGV2ZW50cyksIHNv
IHRoaXMgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB3ZWIgY29tcGF0aWJpbGl0eS4KKwogMjAxMi0w
NC0yMiAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAg
UkVHUkVTU0lPTigxMTM2MDQpOiBbU291cF0gU29tZSBwYWdlcyB0aGF0IHVzZSBzeW5jaHJvbm91
cyBYTUxIdHRwUmVxdWVzdHMgZnJlZXplIHRoZSBicm93c2VyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXgg
NWViNTk4ZjZlNmNmMWJkYmZlZTIwYzkwY2Q0YWE1YmYzMzkxMTFkOS4uNzU3ZGRiMzcxOGUxODdl
YmE3N2RiOGQ5MWM5OWNmMjg5YTg3YzM0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4
IEBACisyMDEyLTA0LTIzICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXSBSZXdvcmsgSU1FIGhhbmRsaW5nIHRvIGZpeCBidWdzIGFuZCBwcmVw
YXJlIGZvciBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NDU1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFJld29yayBpbnB1dCBtZXRob2QgaGFuZGxpbmcgbG9naWMgaW50byBhIGNsYXNzIGNh
bGxlZCBHdGtJbnB1dE1ldGhvZEZpbHRlci4KKyAgICAgICAgVGhpcyBmaWx0ZXIgbm93IHJ1bnMg
YmVmb3JlIFdlYkNvcmUgZXZlbnQgaGFuZGxpbmcsIGFsbG93aW5nIHRoZSBjb2RlIHRvIG1vcmUK
KyAgICAgICAgZWFzaWx5IGZha2Ugc2ltcGxlIGNvbXBvc2l0aW9ucyB0aGF0IHNob3VsZCBiZSBz
ZWVuIGFzIGtleXN0cm9rZXMuIFdlIGNhbiBhbHNvCisgICAgICAgIGZpbHRlciBrZXlwcmVzc2Vz
IHRoYXQgc2hvdWxkIG5vdCBnbyB0byB3ZWIgY29udGVudCBhdCBhbGwsIHN1Y2ggYXMga2V5IHVw
IGV2ZW50cworICAgICAgICByZWxhdGVkIHRvIGtleSBkb3duIGV2ZW50cyB0aGF0IHdlcmUgZmls
dGVyZWQuCisKKyAgICAgICAgQWxzbyBhZGRlZCBpcyBhIFdlYlZpZXdJbnB1dE1ldGhvZEZpbHRl
ciB3aGljaCBpcyBhIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIEd0a0lucHV0
TWV0aG9kRmlsdGVyLiBUaGlzIGNsYXNzIGNvbnRhaW5zIGxvZ2ljIGZvciBhY3R1YWxseSBzZW5k
aW5nIGV2ZW50cyB0bworICAgICAgICBXZWJDb3JlLiBJbiBXZWJLaXQyIGFuIGltcGxlbWVudGF0
aW9uIG9mIEd0a0lucHV0TWV0aG9kRmlsdGVyIHdpbGwgc2VuZCBldmVudHMKKyAgICAgICAgYWNy
b3NzIHRoZSBJUEMgY2hhbm5lbC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3
IGZpbGVzIHRvIHRoZSBzb3VyY2UgbGlzdC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250
ZXh0TWVudUNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OmlucHV0TWV0aG9kc01lbnVJ
dGVtKTogQWNjZXNzIHRoZSBpbnB1dCBtZXRob2QgY29udGV4dCB2aWEgdGhlIGZpbHRlci4KKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwOiBSZW1vdmUgdGhlIHRy
aWNreSBsb2dpYyBvZiBpbnB1dCBtZXRob2QKKyAgICAgICAgZXZlbnRzIGZyb20gdGhpcyBjbGFz
cywgYmVjYXVzZSBpdCdzIG5vdyBpbiB0aGUgR3RrSW5wdXRNZXRob2RGaWx0ZXIuCisgICAgICAg
IChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2V0SW5wdXRNZXRob2RTdGF0ZSk6IENhbGwgaW50byB0
aGUgZmlsdGVyLgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRp
dGluZyk6IFdlIG5vIGxvbmdlciBuZWVkIHRvIHVwZGF0ZSB0aGUgY29tcG9zaXRpb24gaGVyZS4K
KyAgICAgICAgVGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBmb2N1cyBpbiBhbmQgZm9jdXMgb3V0IGxv
Z2ljIGluIHRoZSBmaWx0ZXIuCisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxk
RW5kRWRpdGluZyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24pOiBDYWxsIGludG8gdGhlIGZpbHRlciBub3cuCisgICAgICAg
IChXZWJLaXQ6OkVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlib2FyZEV2ZW50KTog
QWRkZWQgdGhpcyBoZWxwZXIgd2hpY2ggZXhlY3V0ZXMKKyAgICAgICAgYW55IHBlbmRpbmcgY29t
cG9zaXRpb24gY29uZmlybWF0aW9uIG9yIHByZWVkaXQgdXBkYXRlIGFjdGlvbnMgYXMgdGhlIGRl
ZmF1bHQgYWN0aW9uIG9mCisgICAgICAgIHRoZSBrZXlkb3duIGV2ZW50LgorICAgICAgICAoV2Vi
S2l0OjpFZGl0b3JDbGllbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQpOiBDYWxsIGhhbmRsZUlucHV0
TWV0aG9kS2V5Ym9hcmRFdmVudCB0byBkbworICAgICAgICBhbnkgcGVuZGluZyBjb21wb3NpdGlv
biBhY3Rpb24uCisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRo
b2RLZXlkb3duKTogUmVtb3ZlIGFsbCB0aGUgbG9naWMgZnJvbSB0aGlzIG1ldGhvZC4KKyAgICAg
ICAgS2V5cyBhcmUgZmlsdGVyZWQgYmVmb3JlIHRoZXkgYXJlIHNlbnQgdG8gV2ViQ29yZSBub3cg
YW5kIHRoZSBhY3R1YWwgYWN0aW9uIG9mIGlucHV0IG1ldGhvZAorICAgICAgICBldmVudHMgaGFw
cGVucyBpbiB0aGUga2V5ZG93biBkZWZhdWx0IGFjdGlvbiB0byBpbmNyZWFzZSBjb21wYXRpYmls
aXR5IHdpdGggb3RoZXIgYnJvd3NlcnMuCisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6
RWRpdG9yQ2xpZW50KTogUmVtb3ZlIGNvbnRleHQgc2lnbmFsIG1hbmFnZW1lbnQuCisgICAgICAg
IChXZWJLaXQ6OkVkaXRvckNsaWVudDo6fkVkaXRvckNsaWVudCk6IERpdHRvLgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5oOgorICAgICAgICAoRWRpdG9yQ2xpZW50
KTogTm8gbG9uZ2VyIGhhcyBzb21lIG1lbWJlcnMgdGhhdCB0cmFja2VkIElNRSBzdGF0dXMuCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmNwcDogQWRk
ZWQuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmg6
IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdl
YmtpdF93ZWJfdmlld19nZXRfcHJvcGVydHkpOiBHZXQgdGhlIGNvbnRleHQgZnJvbSB0aGUgZmls
dGVyIG5vdy4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19rZXlfcHJlc3NfZXZlbnQpOiBKdXN0
IHNlbmQgZXZlbnRzIHN0cmFpZ2h0IHRvIHRoZSBmaWx0ZXIuCisgICAgICAgIFRoZSBmaWx0ZXIg
d2lsbCBkZWNpZGUgd2hldGhlciBvciBub3QgdG8gc2VuZCB0aGVtIHRvIFdlYkNvcmUuCisgICAg
ICAgICh3ZWJraXRfd2ViX3ZpZXdfa2V5X3JlbGVhc2VfZXZlbnQpOiBEaXR0by4KKyAgICAgICAg
KHdlYmtpdF93ZWJfdmlld19idXR0b25fcHJlc3NfZXZlbnQpOiBVc2UgdGhlIGZpbHRlciB0byBo
YW5kbGUgYnV0dG9uIHByZXNzCisgICAgICAgIGV2ZW50cyByZWxhdGVkIHRvIElNRS4KKyAgICAg
ICAgKHdlYmtpdF93ZWJfdmlld19mb2N1c19pbl9ldmVudCk6IE5vdGlmeSB0aGUgZmlsdGVyIG5v
dy4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19mb2N1c19vdXRfZXZlbnQpOiBEaXR0by4KKyAg
ICAgICAgKHdlYmtpdF93ZWJfdmlld19yZWFsaXplKTogVGhlIGZpbHRlciB0YWtlcyBjYXJlIG9m
IGxpc3RlbmluZyBmb3IgcmVhbGl6ZSBub3cuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfaW5p
dCk6IFNldCB0aGUgV2ViVmlldyB3aWRnZXQgb24gdGhlIGZpbHRlci4KKyAgICAgICAgKiB3ZWJr
aXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaDogQ2hhbmdlIHRoZSBHdGtJTUNvbnRleHQgbWVtYmVy
IHRvIGJlIGEgR3RrSW5wdXRNZXRob2RGaWx0ZXIgbWVtYmVyLgorCiAyMDEyLTA0LTIyICBBZHJp
YW4gQnVuayAgPGJ1bmtAc3R1c3RhLmRlPgogCiAgICAgICAgIFtHVEtdIFJlbW92ZSB0aGUgb2Jz
b2xldGUgSGlsZG9uIFVJIGV4dGVuc2lvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmlu
ZGV4IDcwNjgzNmExNTNmNjMxYWRkOThhYTdmMWRmNTk4ZmM5MjJiODRlODQuLmMyYWI0OTMwNDRi
MzRhYTI5ODM3OTFjMzRkYTMwOWUyYWNkZTBjZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQpAQCAtNDY4Nyw2ICs0Njg3LDggQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmggXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtVdGlsaXRpZXMuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25Q
dHJHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
S2V5Ym9hcmRFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50LmgKaW5kZXggMWMxZGU2NTU3M2QyNjFmYTJhNzJmMDQ5Zjk1ZTNjYjU3YWQ3YTFkMC4u
NDI1NzdmOWU2YWU1NjkyOWUzYTYyMDgxZjRjNGM2NDc2ZjQ1ZDUwOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKQEAgLTQzLDYgKzQzLDcg
QEAgdHlwZWRlZiBsb25nIExQQVJBTTsKIAogI2lmIFBMQVRGT1JNKEdUSykKIHR5cGVkZWYgc3Ry
dWN0IF9HZGtFdmVudEtleSBHZGtFdmVudEtleTsKKyNpbmNsdWRlICJDb21wb3NpdGlvblJlc3Vs
dHMuaCIKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC0xNTEsOCArMTUyLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspCi0gICAgICAgIFBs
YXRmb3JtS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSopOwotICAgICAgICBHZGtFdmVudEtleSog
Z2RrRXZlbnRLZXkoKSBjb25zdDsKKyAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2
ZW50S2V5KiwgY29uc3QgQ29tcG9zaXRpb25SZXN1bHRzJik7CisgICAgICAgIEdka0V2ZW50S2V5
KiBnZGtFdmVudEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2RrRXZlbnRLZXk7IH0KKyAgICAgICAg
Y29uc3QgQ29tcG9zaXRpb25SZXN1bHRzJiBjb21wb3NpdGlvblJlc3VsdHMoKSBjb25zdCB7IHJl
dHVybiBtX2NvbXBvc2l0aW9uUmVzdWx0czsgfQogCiAgICAgICAgIC8vIFVzZWQgYnkgV2ViS2l0
MgogICAgICAgICBzdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKHVuc2ln
bmVkKTsKQEAgLTIwMCw2ICsyMDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKICNp
ZiBQTEFURk9STShHVEspCiAgICAgICAgIEdka0V2ZW50S2V5KiBtX2dka0V2ZW50S2V5OworICAg
ICAgICBDb21wb3NpdGlvblJlc3VsdHMgbV9jb21wb3NpdGlvblJlc3VsdHM7CiAjZW5kaWYKICNp
ZiBQTEFURk9STShRVCkKICAgICAgICAgUUtleUV2ZW50KiBtX3F0RXZlbnQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODdmNWJmN2M5Zjk1MzZmYTc3NTZjNjgwM2ZlZTE4MWYwYmIxZWQ1OAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db21wb3NpdGlvblJlc3VsdHMuaApAQCAt
MCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQ29tcG9zaXRpb25SZXN1bHRzX2gKKyNkZWZpbmUgQ29tcG9zaXRpb25SZXN1
bHRzX2gKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0cnVjdCBDb21wb3NpdGlvblJlc3VsdHMgeworICAgIENvbXBvc2l0aW9uUmVz
dWx0cygpCisgICAgICAgIDogcHJlZWRpdEN1cnNvck9mZnNldCgwKQorICAgIHsKKyAgICB9CisK
KyAgICBDb21wb3NpdGlvblJlc3VsdHMoU3RyaW5nIHNpbXBsZVN0cmluZykKKyAgICAgICAgOiBz
aW1wbGVTdHJpbmcoc2ltcGxlU3RyaW5nKQorICAgICAgICAsIHByZWVkaXRDdXJzb3JPZmZzZXQo
MCkKKyAgICB7CisgICAgfQorCisgICAgQ29tcG9zaXRpb25SZXN1bHRzKFN0cmluZyBjb25maXJt
ZWRDb21wb3NpdGlvbiwgU3RyaW5nIHByZWVkaXQsIGludCBwcmVlZGl0Q3Vyc29yT2Zmc2V0KQor
ICAgICAgICA6IGNvbmZpcm1lZENvbXBvc2l0aW9uKGNvbmZpcm1lZENvbXBvc2l0aW9uKQorICAg
ICAgICAsIHByZWVkaXQocHJlZWRpdCkKKyAgICAgICAgLCBwcmVlZGl0Q3Vyc29yT2Zmc2V0KHBy
ZWVkaXRDdXJzb3JPZmZzZXQpCisgICAgeworICAgIH0KKworICAgIGJvb2wgY29tcG9zaXRpb25V
cGRhdGVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhY29uZmlybWVkQ29tcG9zaXRp
b24uaXNOdWxsKCkgfHwgIXByZWVkaXQuaXNOdWxsKCk7CisgICAgfQorCisgICAgLy8gU29tZSBz
aW1wbGUgaW5wdXQgbWV0aG9kcyByZXR1cm4gYSBzdHJpbmcgZm9yIGFsbCBrZXlib2FyZCBldmVu
dHMuIFRoaXMKKyAgICAvLyB2YWx1ZSBzaG91bGQgYmUgdHJlYXRlZCBhcyB0aGUgc3RyaW5nIHJl
cHJlc2VudGF0aW9uIG9mIHRoZSBrZXljb2RlLgorICAgIFN0cmluZyBzaW1wbGVTdHJpbmc7CisK
KyAgICAvLyBJZiB0aGUgaW5wdXQgbWV0aG9kIGhhZCBhICJyZWFsIiBjb21wb3NpdGlvbiBpdCB3
aWxsIGJlIHN0b3JlZCBoZXJlLgorICAgIFN0cmluZyBjb25maXJtZWRDb21wb3NpdGlvbjsKKwor
ICAgIC8vIFRoZSBldmVudCBtYXkgaGF2ZSBjYXVzZWQgdGhlIHByZWVkaXQgdG8gdXBkYXRlLgor
ICAgIFN0cmluZyBwcmVlZGl0OworICAgIGludCBwcmVlZGl0Q3Vyc29yT2Zmc2V0OworfTsKKwor
fQorCisjZW5kaWYgLy8gQ29tcG9zaXRpb25SZXN1bHRzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkx
OGFkNTc0NGQyZTIzMzg2NjBjM2FmYjQyZTk3N2NmZGEzOWRkMWIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwCkBA
IC0wLDAgKzEsMzI4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkd0a0lucHV0TWV0aG9kRmlsdGVyLmgiCisKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5n
LmgiCisjaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+Cisj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRy
Lmg+CisKKy8vIFRoZSBXaW5kb3dzIGNvbXBvc2l0aW9uIGtleSBldmVudCBjb2RlIGlzIDI5OSBv
ciBWS19QUk9DRVNTS0VZLiBXZSBuZWVkIHRvCisvLyBlbWl0IHRoaXMgY29kZSBmb3Igd2ViIGNv
bXBhdGliaWxpdHkgcmVhc29ucyB3aGVuIGtleSBldmVudHMgdHJpZ2dlcgorLy8gY29tcG9zaXRp
b24gcmVzdWx0cy4gR0RLIGRvZXNuJ3QgaGF2ZSBhbiBlcXVpdmFsZW50LCBzbyB3ZSBzZW5kIFZv
aWRTeW1ib2wKKy8vIGhlcmUgdG8gV2ViQ29yZS4gUGxhdGZvcm1LZXlFdmVudCBrbm93cyB0byBj
b252ZXJ0IHRoaXMgY29kZSBpbnRvCisvLyBWS19QUk9DRVNTS0VZLgorY29uc3QgaW50IGdDb21w
b3NpdGlvbkV2ZW50S2V5Q29kZSA9IEdES19LRVlfVm9pZFN5bWJvbDsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgdm9pZCBoYW5kbGVDb21taXRDYWxsYmFjayhHdGtJTUNvbnRleHQq
LCBjb25zdCBjaGFyKiBjb21wb3NpdGlvblN0cmluZywgR3RrSW5wdXRNZXRob2RGaWx0ZXIqIGZp
bHRlcikKK3sKKyAgICBmaWx0ZXItPmhhbmRsZUNvbW1pdChjb21wb3NpdGlvblN0cmluZyk7Cit9
CisKK3N0YXRpYyB2b2lkIGhhbmRsZVByZWVkaXRTdGFydENhbGxiYWNrKEd0a0lNQ29udGV4dCos
IEd0a0lucHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgZmlsdGVyLT5oYW5kbGVQcmVl
ZGl0U3RhcnQoKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlUHJlZWRpdENoYW5nZWRDYWxsYmFj
ayhHdGtJTUNvbnRleHQqLCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQoreworICAgIGZp
bHRlci0+aGFuZGxlUHJlZWRpdENoYW5nZWQoKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlUHJl
ZWRpdEVuZENhbGxiYWNrKEd0a0lNQ29udGV4dCosIEd0a0lucHV0TWV0aG9kRmlsdGVyKiBmaWx0
ZXIpCit7CisgICAgZmlsdGVyLT5oYW5kbGVQcmVlZGl0RW5kKCk7Cit9CisKK3N0YXRpYyB2b2lk
IGhhbmRsZVdpZGdldFJlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0lucHV0TWV0aG9kRmls
dGVyKiBmaWx0ZXIpCit7CisgICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93
aW5kb3cod2lkZ2V0KTsKKyAgICBBU1NFUlQod2luZG93KTsKKyAgICBndGtfaW1fY29udGV4dF9z
ZXRfY2xpZW50X3dpbmRvdyhmaWx0ZXItPmNvbnRleHQoKSwgd2luZG93KTsKK30KKwordm9pZCBH
dGtJbnB1dE1ldGhvZEZpbHRlcjo6c2V0V2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KQoreworICAg
IEFTU0VSVCghbV93aWRnZXQpOworICAgIG1fd2lkZ2V0ID0gd2lkZ2V0OworICAgIGdfc2lnbmFs
X2Nvbm5lY3RfYWZ0ZXIod2lkZ2V0LCAicmVhbGl6ZSIsIEdfQ0FMTEJBQ0soaGFuZGxlV2lkZ2V0
UmVhbGl6ZSksIHRoaXMpOworfQorCitHdGtJbnB1dE1ldGhvZEZpbHRlcjo6R3RrSW5wdXRNZXRo
b2RGaWx0ZXIoKQorICAgIDogbV9jdXJzb3JPZmZzZXQoMCkKKyAgICAsIG1fY29udGV4dChhZG9w
dEdSZWYoZ3RrX2ltX211bHRpY29udGV4dF9uZXcoKSkpCisgICAgLCBtX3dpZGdldCgwKQorICAg
ICwgbV9lbmFibGVkKGZhbHNlKQorICAgICwgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5KGZhbHNl
KQorICAgICwgbV9maWx0ZXJpbmdLZXlFdmVudChmYWxzZSkKKyAgICAsIG1fcHJlZWRpdENoYW5n
ZWQoZmFsc2UpCisgICAgLCBtX3ByZXZlbnROZXh0Q29tbWl0KGZhbHNlKQorICAgICwgbV9qdXN0
U2VudEZha2VLZXlVcChmYWxzZSkKKyAgICAsIG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0
aE5vUmVzdWx0cyhHREtfS0VZX1ZvaWRTeW1ib2wpCit7CisgICAgZ19zaWduYWxfY29ubmVjdCht
X2NvbnRleHQuZ2V0KCksICJjb21taXQiLCBHX0NBTExCQUNLKGhhbmRsZUNvbW1pdENhbGxiYWNr
KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2NvbnRleHQuZ2V0KCksICJwcmVlZGl0
LXN0YXJ0IiwgR19DQUxMQkFDSyhoYW5kbGVQcmVlZGl0U3RhcnRDYWxsYmFjayksIHRoaXMpOwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAicHJlZWRpdC1jaGFuZ2VkIiwg
R19DQUxMQkFDSyhoYW5kbGVQcmVlZGl0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19z
aWduYWxfY29ubmVjdChtX2NvbnRleHQuZ2V0KCksICJwcmVlZGl0LWVuZCIsIEdfQ0FMTEJBQ0so
aGFuZGxlUHJlZWRpdEVuZENhbGxiYWNrKSwgdGhpcyk7Cit9CisKK0d0a0lucHV0TWV0aG9kRmls
dGVyOjp+R3RrSW5wdXRNZXRob2RGaWx0ZXIoKQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rp
c2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRleHQuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGhhbmRsZUNvbW1pdENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9mdW5jKG1fY29udGV4dC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
aGFuZGxlUHJlZWRpdFN0YXJ0Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2Z1bmMobV9jb250ZXh0LmdldCgpLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihoYW5kbGVQcmVlZGl0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY29udGV4dC5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oaGFuZGxlUHJlZWRpdEVuZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWdu
YWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fd2lkZ2V0LCByZWludGVycHJldF9jYXN0
PHZvaWQqPihoYW5kbGVXaWRnZXRSZWFsaXplKSwgdGhpcyk7Cit9CisKK3ZvaWQgR3RrSW5wdXRN
ZXRob2RGaWx0ZXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fZW5hYmxlZCA9
IGVuYWJsZWQ7CisgICAgaWYgKGVuYWJsZWQpCisgICAgICAgIGd0a19pbV9jb250ZXh0X2ZvY3Vz
X2luKG1fY29udGV4dC5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBndGtfaW1fY29udGV4dF9m
b2N1c19vdXQobV9jb250ZXh0LmdldCgpKTsKK30KKworYm9vbCBHdGtJbnB1dE1ldGhvZEZpbHRl
cjo6ZmlsdGVyS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQoreworICAgIGlmICghY2FuRWRp
dCgpKQorICAgICAgICByZXR1cm4gc2VuZFNpbXBsZUtleUV2ZW50KGV2ZW50KTsKKworICAgIG1f
cHJlZWRpdENoYW5nZWQgPSBmYWxzZTsKKyAgICBtX2ZpbHRlcmluZ0tleUV2ZW50ID0gdHJ1ZTsK
KworICAgIHVuc2lnbmVkIGludCBsYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRz
ID0gbV9sYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzOworICAgIG1fbGFzdEZp
bHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9IEdES19LRVlfVm9pZFN5bWJvbDsKKwor
ICAgIGJvb2wgZmlsdGVyZWQgPSBndGtfaW1fY29udGV4dF9maWx0ZXJfa2V5cHJlc3MobV9jb250
ZXh0LmdldCgpLCBldmVudCk7CisgICAgbV9maWx0ZXJpbmdLZXlFdmVudCA9IGZhbHNlOworCisg
ICAgYm9vbCBqdXN0U2VudEZha2VLZXlVcCA9IG1fanVzdFNlbnRGYWtlS2V5VXA7CisgICAgbV9q
dXN0U2VudEZha2VLZXlVcCA9IGZhbHNlOworICAgIGlmIChqdXN0U2VudEZha2VLZXlVcCAmJiBl
dmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgaWYgKGZpbHRlcmVkKSB7CisgICAgICAgIC8vIFNpbXBsZSBpbnB1dCBtZXRob2RzIHdvcmsg
c3VjaCB0aGF0IGV2ZW4gbm9ybWFsIGtleXN0cm9rZXMgZmlyZSB0aGUKKyAgICAgICAgLy8gY29t
bWl0IHNpZ25hbC4gV2UgZGV0ZWN0IHRob3NlIHNpdHVhdGlvbnMgYW5kIHRyZWF0IHRoZW0gYXMg
bm9ybWFsCisgICAgICAgIC8vIGtleSBldmVudHMsIHN1cHBseWluZyB0aGUgY29tbWl0IHN0cmlu
ZyBhcyB0aGUga2V5IGNoYXJhY3Rlci4KKyAgICAgICAgaWYgKCFtX2NvbXBvc2luZ1RleHRDdXJy
ZW50bHkgJiYgIW1fcHJlZWRpdENoYW5nZWQgJiYgbV9jb25maXJtZWRDb21wb3NpdGlvbi5sZW5n
dGgoKSA9PSAxKSB7CisgICAgICAgICAgICBib29sIHJlc3VsdCA9IHNlbmRTaW1wbGVLZXlFdmVu
dChldmVudCwgbV9jb25maXJtZWRDb21wb3NpdGlvbik7CisgICAgICAgICAgICBpZiAobV9jb25m
aXJtZWRDb21wb3NpdGlvbi5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBtX2NvbXBv
c2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBtX2NvbmZpcm1lZENv
bXBvc2l0aW9uID0gU3RyaW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19LRVlf
UFJFU1MpIHsKKyAgICAgICAgICAgIGlmICghbV9wcmVlZGl0Q2hhbmdlZCAmJiBtX2NvbmZpcm1l
ZENvbXBvc2l0aW9uLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgbV9jb21wb3NpbmdUZXh0
Q3VycmVudGx5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2xhc3RGaWx0ZXJlZEtleVByZXNz
Q29kZVdpdGhOb1Jlc3VsdHMgPSBldmVudC0+a2V5dmFsOworICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIHJlc3VsdCA9IHNlbmRL
ZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoZXZlbnQpOworICAgICAgICAgICAgaWYgKG1f
Y29uZmlybWVkQ29tcG9zaXRpb24ubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgbV9j
b21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbV9jb25maXJt
ZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHdlIHByZXZpb3VzbHkg
ZmlsdGVyZWQgYSBrZXkgcHJlc3MgZXZlbnQgYW5kIGl0IHlpZWxkZWQgbm8gcmVzdWx0cy4gU3Vw
cHJlc3MKKyAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBrZXkgcmVsZWFzZSBldmVudCB0byBhdm9p
ZCBjb25mdXNpbmcgdGhlIHdlYiBjb250ZW50LgorICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtf
S0VZX1JFTEVBU0UgJiYgbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9PSBl
dmVudC0+a2V5dmFsKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIElmIHRoaXMga2V5
c3Ryb2tlIHdhcyBub3QgZmlsdGVyZWQsIGJ1dCByZXN1bHRlZCBpbiBhbiB1cGRhdGVkIGNvbXBv
c2l0aW9uCisgICAgLy8gb3IgcHJlZWRpdCwgd2Ugc2VuZCB0aG9zZSBiZWZvcmUgdGhlIGtleSBl
dmVudC4gVGhlIGZvbGxvd2luZyBldmVudCBzZXF1ZW5jZQorICAgIC8vIGNvcGllZCBmcm9tIHRo
ZSBDaHJvbWl1bSBzb3VyY2UgY29kZSBpbGx1c3RyYXRlcyB0aGUgcmVhc29uaW5nOgorCisgICAg
Ly8gV2hlbiB1c2luZyBsYXRpbi1wb3N0IGlucHV0IG1ldGhvZCwgcHJlc3NpbmcgJ2EnIHRoZW4g
QmFja3NwYWNlLCBtYXkKKyAgICAvLyBnZW5lcmF0ZSBmb2xsb3dpbmcgZXZlbnRzIGluIHNlcXVl
bmNlOgorICAgIC8vICAxLiBrZXlkb3duICdhJyAoZmlsdGVyZWQpCisgICAgLy8gIDIuIHByZWVk
aXQgY2hhbmdlZCB0byAiYSIKKyAgICAvLyAgMy4ga2V5dXAgJ2EnICh1bmZpbHRlcmVkKQorICAg
IC8vICA0LiBrZXlkb3duIEJhY2tzcGFjZSAodW5maWx0ZXJlZCkKKyAgICAvLyAgNS4gY29tbWl0
ICJhIgorICAgIC8vICA2LiBwcmVlZGl0IGVuZAorCisgICAgLy8gV2UgYWxzbyB0cmVhdCBrZXkg
cmVsZWFzZSBldmVudHMgdGhlIHNhbWUgd2F5LCBhcyB0aGUgSU1FIGNvZGUgaW4KKyAgICAvLyBF
ZGl0b3JDbGllbnQgZG9lc24ndCBnZXQgdG8gbG9vayBhdCB0aGVtLCBhcyBmb3Iga2V5IHByZXNz
IGV2ZW50cy4KKyAgICBpZiAobV9jb25maXJtZWRDb21wb3NpdGlvbi5sZW5ndGgoKSkKKyAgICAg
ICAgY29uZmlybUNvbXBvc2l0aW9uKCk7CisgICAgaWYgKG1fcHJlZWRpdENoYW5nZWQpCisgICAg
ICAgIHVwZGF0ZVByZWVkaXQoKTsKKyAgICByZXR1cm4gc2VuZFNpbXBsZUtleUV2ZW50KGV2ZW50
KTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6bm90aWZ5TW91c2VCdXR0b25QcmVz
cygpCit7CisgICAgLy8gQ29uZmlybWluZyB0aGUgY29tcG9zaXRpb24gbWF5IHRyaWdnZXIgYSBz
ZWxlY3Rpb24gY2hhbmdlLCB3aGljaAorICAgIC8vIG1pZ2h0IHRyaWdnZXIgZnVydGhlciB1bndh
bnRlZCBhY3Rpb25zIG9uIHRoZSBjb250ZXh0LCBzbyB3ZSBwcmV2ZW50CisgICAgLy8gdGhhdCBi
eSBzZXR0aW5nIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSB0byBmYWxzZS4KKyAgICBtX2NvbXBv
c2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKyAgICBjb25maXJtQ3VycmVudENvbXBvc2l0aW9u
KCk7CisgICAgY2FuY2VsQ29udGV4dENvbXBvc2l0aW9uKCk7Cit9CisKK3ZvaWQgR3RrSW5wdXRN
ZXRob2RGaWx0ZXI6OnJlc2V0Q29udGV4dCgpCit7CisKKyAgICAvLyBXZSBhbHdheXMgY2FuY2Vs
IHRoZSBjdXJyZW50IFdlYkNvcmUgY29tcG9zaXRpb24gaGVyZSwgaW4gY2FzZSB0aGUKKyAgICAv
LyBjb21wb3NpdGlvbiB3YXMgc2V0IG91dHNpZGUgdGhlIEdUSysgSU1FIHBhdGggKHZpYSBhIHNj
cmlwdCwgZm9yCisgICAgLy8gaW5zdGFuY2UpIGFuZCB3ZSBhcmVuJ3QgdHJhY2tpbmcgaXQuCisg
ICAgY2FuY2VsQ3VycmVudENvbXBvc2l0aW9uKCk7CisKKyAgICBpZiAoIW1fY29tcG9zaW5nVGV4
dEN1cnJlbnRseSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRs
eSA9IGZhbHNlOworICAgIGNhbmNlbENvbnRleHRDb21wb3NpdGlvbigpOworfQorCit2b2lkIEd0
a0lucHV0TWV0aG9kRmlsdGVyOjpjYW5jZWxDb250ZXh0Q29tcG9zaXRpb24oKQoreworICAgIG1f
cHJldmVudE5leHRDb21taXQgPSBtX3ByZWVkaXQubGVuZ3RoKCkgPiAwOworCisgICAgZ3RrX2lt
X2NvbnRleHRfcmVzZXQobV9jb250ZXh0LmdldCgpKTsKKworICAgIG1fY29tcG9zaW5nVGV4dEN1
cnJlbnRseSA9IGZhbHNlOworICAgIG1fanVzdFNlbnRGYWtlS2V5VXAgPSBmYWxzZTsKKyAgICBt
X3ByZWVkaXQgPSBTdHJpbmcoKTsKKyAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5n
KCk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeUZvY3VzZWRJbigpCit7
CisgICAgbV9lbmFibGVkID0gdHJ1ZTsKKyAgICBndGtfaW1fY29udGV4dF9mb2N1c19pbihtX2Nv
bnRleHQuZ2V0KCkpOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpub3RpZnlGb2N1
c2VkT3V0KCkKK3sKKyAgICBpZiAoIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7CisgICAgY29uZmlybUN1cnJlbnRDb21w
b3NpdGlvbigpOworICAgIGNhbmNlbENvbnRleHRDb21wb3NpdGlvbigpOworICAgIGd0a19pbV9j
b250ZXh0X2ZvY3VzX291dChtX2NvbnRleHQuZ2V0KCkpOworICAgIG1fZW5hYmxlZCA9IGZhbHNl
OworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpjb25maXJtQ29tcG9zaXRpb24oKQor
eworICAgIGNvbmZpcm1Db21wb3NpdGlvblRleHQobV9jb25maXJtZWRDb21wb3NpdGlvbik7Cisg
ICAgbV9jb25maXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOworfQorCit2b2lkIEd0a0lucHV0
TWV0aG9kRmlsdGVyOjp1cGRhdGVQcmVlZGl0KCkKK3sKKyAgICBzZXRQcmVlZGl0KG1fcHJlZWRp
dCwgbV9jdXJzb3JPZmZzZXQpOworICAgIG1fcHJlZWRpdENoYW5nZWQgPSBmYWxzZTsKK30KKwor
dm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6c2VuZENvbXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhG
YWtlS2V5RXZlbnRzKFJlc3VsdHNUb1NlbmQgcmVzdWx0c1RvU2VuZCkKK3sKKyAgICBHZGtFdmVu
dCogZXZlbnQgPSBnZGtfZXZlbnRfbmV3KEdES19LRVlfUFJFU1MpOworICAgIGV2ZW50LT5rZXku
dGltZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAgZXZlbnQtPmtleS5rZXl2YWwgPSBnQ29tcG9z
aXRpb25FdmVudEtleUNvZGU7CisgICAgc2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0
cygmZXZlbnQtPmtleSwgcmVzdWx0c1RvU2VuZCk7CisKKyAgICBtX2NvbmZpcm1lZENvbXBvc2l0
aW9uID0gU3RyaW5nKCk7CisgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7CisK
KyAgICBldmVudC0+dHlwZSA9IEdES19LRVlfUkVMRUFTRTsKKyAgICBzZW5kU2ltcGxlS2V5RXZl
bnQoJmV2ZW50LT5rZXkpOworICAgIG1fanVzdFNlbnRGYWtlS2V5VXAgPSB0cnVlOworfQorCit2
b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVDb21taXQoY29uc3QgY2hhciogY29tcG9z
aXRpb25TdHJpbmcpCit7CisgICAgaWYgKG1fcHJldmVudE5leHRDb21taXQpIHsKKyAgICAgICAg
bV9wcmV2ZW50TmV4dENvbW1pdCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29uZmlybWVkQ29t
cG9zaXRpb24gKz0gU3RyaW5nOjpmcm9tVVRGOChjb21wb3NpdGlvblN0cmluZyk7CisKKyAgICAv
LyBJZiB0aGUgY29tbWl0IHdhcyB0cmlnZ2VyZWQgb3V0c2lkZSBvZiBhIGtleSBldmVudCwganVz
dCBzZW5kCisgICAgLy8gdGhlIElNRSBldmVudCBub3cuIElmIHdlIGFyZSBoYW5kbGluZyBhIGtl
eSBldmVudCwgd2UnbGwgZGVjaWRlCisgICAgLy8gbGF0ZXIgaG93IHRvIGhhbmRsZSB0aGlzLgor
ICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKKyAgICAgICAgc2VuZENvbXBvc2l0aW9uQW5k
UHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKENvbXBvc2l0aW9uKTsKK30KKwordm9pZCBHdGtJbnB1
dE1ldGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdFN0YXJ0KCkKK3sKKyAgICBpZiAobV9wcmV2ZW50
TmV4dENvbW1pdCB8fCAhbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9wcmVlZGl0
Q2hhbmdlZCA9IHRydWU7CisgICAgbV9wcmVlZGl0ID0gIiI7Cit9CisKK3ZvaWQgR3RrSW5wdXRN
ZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fZW5hYmxl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR093blB0cjxnY2hhcj4gbmV3UHJlZWRpdDsKKyAg
ICBndGtfaW1fY29udGV4dF9nZXRfcHJlZWRpdF9zdHJpbmcobV9jb250ZXh0LmdldCgpLCAmbmV3
UHJlZWRpdC5vdXRQdHIoKSwgMCwgJm1fY3Vyc29yT2Zmc2V0KTsKKworICAgIGlmIChtX3ByZXZl
bnROZXh0Q29tbWl0KSB7CisgICAgICAgIGlmIChzdHJsZW4obmV3UHJlZWRpdC5nZXQoKSkgPiAw
KQorICAgICAgICAgICAgbV9wcmV2ZW50TmV4dENvbW1pdCA9IGZhbHNlOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wcmVlZGl0ID0gU3RyaW5nOjpm
cm9tVVRGOChuZXdQcmVlZGl0LmdldCgpKTsKKyAgICBtX2N1cnNvck9mZnNldCA9IHN0ZDo6bWlu
KHN0ZDo6bWF4KG1fY3Vyc29yT2Zmc2V0LCAwKSwgc3RhdGljX2Nhc3Q8aW50PihtX3ByZWVkaXQu
bGVuZ3RoKCkpKTsKKworICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IG1fcHJlZWRpdC5s
ZW5ndGgoKSA+IDA7CisgICAgbV9wcmVlZGl0Q2hhbmdlZCA9IHRydWU7CisKKyAgICBpZiAoIW1f
ZmlsdGVyaW5nS2V5RXZlbnQpCisgICAgICAgIHNlbmRDb21wb3NpdGlvbkFuZFByZWVkaXRXaXRo
RmFrZUtleUV2ZW50cyhQcmVlZGl0KTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6
aGFuZGxlUHJlZWRpdEVuZCgpCit7CisgICAgaWYgKG1fcHJldmVudE5leHRDb21taXQgfHwgIW1f
ZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wcmVlZGl0ID0gU3RyaW5nKCk7Cisg
ICAgbV9jdXJzb3JPZmZzZXQgPSAwOworICAgIG1fcHJlZWRpdENoYW5nZWQgPSB0cnVlOworCisg
ICAgaWYgKCFtX2ZpbHRlcmluZ0tleUV2ZW50KQorICAgICAgICB1cGRhdGVQcmVlZGl0KCk7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1l
dGhvZEZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9k
RmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmIwNmMzNTMxZTQwMGIyNThlNjNkOWZhNWNiZDk0ZDYzN2I5
MWZkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJ
bnB1dE1ldGhvZEZpbHRlci5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKyNpbmNsdWRlIDxnZGsv
Z2RrLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3R5cGVkZWYgc3RydWN0
IF9HdGtJTUNvbnRleHQgR3RrSU1Db250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgX0d0a1dpZGdldCBH
dGtXaWRnZXQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3RrSW5wdXRNZXRob2RG
aWx0ZXIgeworcHVibGljOgorICAgIEd0a0lucHV0TWV0aG9kRmlsdGVyKCk7CisgICAgfkd0a0lu
cHV0TWV0aG9kRmlsdGVyKCk7CisKKyAgICBib29sIGZpbHRlcktleUV2ZW50KEdka0V2ZW50S2V5
Kik7CisgICAgdm9pZCBub3RpZnlNb3VzZUJ1dHRvblByZXNzKCk7CisgICAgdm9pZCBub3RpZnlG
b2N1c2VkSW4oKTsKKyAgICB2b2lkIG5vdGlmeUZvY3VzZWRPdXQoKTsKKyAgICB2b2lkIHJlc2V0
Q29udGV4dCgpOworICAgIHZvaWQgc2V0RW5hYmxlZChib29sKTsKKworICAgIHZvaWQgaGFuZGxl
Q29tbWl0KGNvbnN0IGNoYXIqIGNvbXBvc2l0aW9uU3RyaW5nKTsKKyAgICB2b2lkIGhhbmRsZVBy
ZWVkaXRDaGFuZ2VkKCk7CisgICAgdm9pZCBoYW5kbGVQcmVlZGl0U3RhcnQoKTsKKyAgICB2b2lk
IGhhbmRsZVByZWVkaXRFbmQoKTsKKworICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKCk7Cisg
ICAgdm9pZCBjYW5jZWxDb250ZXh0Q29tcG9zaXRpb24oKTsKKyAgICB2b2lkIHVwZGF0ZVByZWVk
aXQoKTsKKworICAgIEd0a0lNQ29udGV4dCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5n
ZXQoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgZW51bSBSZXN1bHRzVG9TZW5kIHsKKyAgICAgICAg
UHJlZWRpdCA9IDEgPDwgMSwKKyAgICAgICAgQ29tcG9zaXRpb24gPSAxIDw8IDIsCisgICAgICAg
IFByZWVkaXRBbmRDb21wb3NpdGlvbiA9IFByZWVkaXQgKyBDb21wb3NpdGlvbgorICAgIH07CisK
KyAgICB2b2lkIHNldFdpZGdldChHdGtXaWRnZXQqKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuRWRp
dCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2VuZFNpbXBsZUtleUV2ZW50KEdka0V2ZW50S2V5
KiwgV1RGOjpTdHJpbmcgZXZlbnRTdHJpbmcgPSBTdHJpbmcoKSkgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiwgUmVz
dWx0c1RvU2VuZCA9IFByZWVkaXRBbmRDb21wb3NpdGlvbikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBjb25maXJtQ29tcG9zaXRpb25UZXh0KFN0cmluZyBjb21wb3NpdGlvbikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBjYW5jZWxDdXJyZW50Q29tcG9zaXRpb24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
dFByZWVkaXQoU3RyaW5nLCBpbnQgY3Vyc29yT2Zmc2V0KSA9IDA7CisKKyAgICBXVEY6OlN0cmlu
ZyBtX2NvbmZpcm1lZENvbXBvc2l0aW9uOworICAgIFdURjo6U3RyaW5nIG1fcHJlZWRpdDsKKyAg
ICBpbnQgbV9jdXJzb3JPZmZzZXQ7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZW5kQ29tcG9zaXRp
b25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMoUmVzdWx0c1RvU2VuZCk7CisKKyAgICBHUmVm
UHRyPEd0a0lNQ29udGV4dD4gbV9jb250ZXh0OworICAgIEd0a1dpZGdldCogbV93aWRnZXQ7Cisg
ICAgYm9vbCBtX2VuYWJsZWQ7CisgICAgYm9vbCBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHk7Cisg
ICAgYm9vbCBtX2ZpbHRlcmluZ0tleUV2ZW50OworICAgIGJvb2wgbV9wcmVlZGl0Q2hhbmdlZDsK
KyAgICBib29sIG1fcHJldmVudE5leHRDb21taXQ7CisgICAgYm9vbCBtX2p1c3RTZW50RmFrZUtl
eVVwOworICAgIHVuc2lnbmVkIGludCBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jl
c3VsdHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtS2V5Ym9hcmRFdmVudEd0ay5jcHAKaW5k
ZXggM2EyNDA5ZGNmMDY5NmY2ODhlMDIxNTQzYmIxYzc4MzYzZjI1ZmM3Zi4uODFiZTkzMDZjYTNm
MGRlZTRiNjY2MDk1ZmRkYTE4ODE4MzY1ZTNmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1BsYXRmb3JtS2V5Ym9hcmRFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtS2V5Ym9hcmRFdmVudEd0ay5jcHAKQEAgLTUxMCw3
ICs1MTAsOCBAQCBpbnQgUGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3aW5kb3dzS2V5Q29kZUZvckdk
a0tleUNvZGUodW5zaWduZWQga2V5Y29kZSkKICAgICAgICAgY2FzZSBHREtfRjIzOgogICAgICAg
ICBjYXNlIEdES19GMjQ6CiAgICAgICAgICAgICByZXR1cm4gVktfRjEgKyAoa2V5Y29kZSAtIEdE
S19GMSk7Ci0KKyAgICAgICAgY2FzZSBHREtfS0VZX1ZvaWRTeW1ib2w6CisgICAgICAgICAgICBy
ZXR1cm4gVktfUFJPQ0VTU0tFWTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVy
biAwOwogICAgIH0KQEAgLTU0NSwxMiArNTQ2LDMwIEBAIFN0cmluZyBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyh1bnNpZ25lZCB2YWwpCiAgICAgfQogfQogCitz
dGF0aWMgUGxhdGZvcm1FdmVudDo6VHlwZSBldmVudFR5cGVGb3JHZGtLZXlFdmVudChHZGtFdmVu
dEtleSogZXZlbnQpCit7CisgICAgcmV0dXJuIGV2ZW50LT50eXBlID09IEdES19LRVlfUkVMRUFT
RSA/IFBsYXRmb3JtRXZlbnQ6OktleVVwIDogUGxhdGZvcm1FdmVudDo6S2V5RG93bjsKK30KKwor
c3RhdGljIFBsYXRmb3JtRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnNGb3JHZGtLZXlFdmVudChH
ZGtFdmVudEtleSogZXZlbnQpCit7CisgICAgdW5zaWduZWQgaW50IG1vZGlmaWVycyA9IDA7Cisg
ICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19TSElGVF9NQVNLIHx8IGV2ZW50LT5rZXl2YWwgPT0g
R0RLXzMyNzBfQmFja1RhYikKKyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OlNo
aWZ0S2V5OworICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKQorICAgICAg
ICBtb2RpZmllcnMgfD0gUGxhdGZvcm1FdmVudDo6Q3RybEtleTsKKyAgICBpZiAoZXZlbnQtPnN0
YXRlICYgR0RLX01PRDFfTUFTSykKKyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6
OkFsdEtleTsKKyAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX01FVEFfTUFTSykKKyAgICAgICAg
bW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6Ok1ldGFLZXk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFBsYXRmb3JtRXZlbnQ6Ok1vZGlmaWVycz4obW9kaWZpZXJzKTsKK30KKwogLy8gS2VlcCB0
aGlzIGluIHN5bmMgd2l0aCB0aGUgb3RoZXIgcGxhdGZvcm0gZXZlbnQgY29uc3RydWN0b3JzCi0v
LyBUT0RPOiBtX2dka0V2ZW50S2V5IHNob3VsZCBiZSByZWZjb3VudGVkCi1QbGF0Zm9ybUtleWJv
YXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSogZXZlbnQpCi0gICAg
OiBQbGF0Zm9ybUV2ZW50KChldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UpID8gUGxhdGZv
cm1FdmVudDo6S2V5VXAgOiBQbGF0Zm9ybUV2ZW50OjpLZXlEb3duLCAoZXZlbnQtPnN0YXRlICYg
R0RLX1NISUZUX01BU0spIHx8IChldmVudC0+a2V5dmFsID09IEdES18zMjcwX0JhY2tUYWIpLCBl
dmVudC0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLLCBldmVudC0+c3RhdGUgJiBHREtfTU9EMV9N
QVNLLCBldmVudC0+c3RhdGUgJiBHREtfTUVUQV9NQVNLLCBjdXJyZW50VGltZSgpKQotICAgICwg
bV90ZXh0KHNpbmdsZUNoYXJhY3RlclN0cmluZyhldmVudC0+a2V5dmFsKSkKLSAgICAsIG1fdW5t
b2RpZmllZFRleHQoc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV2ZW50LT5rZXl2YWwpKQorUGxhdGZv
cm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50
LCBjb25zdCBDb21wb3NpdGlvblJlc3VsdHMmIGNvbXBvc2l0aW9uUmVzdWx0cykKKyAgICA6IFBs
YXRmb3JtRXZlbnQoZXZlbnRUeXBlRm9yR2RrS2V5RXZlbnQoZXZlbnQpLCBtb2RpZmllcnNGb3JH
ZGtLZXlFdmVudChldmVudCksIGN1cnJlbnRUaW1lKCkpCisgICAgLCBtX3RleHQoY29tcG9zaXRp
b25SZXN1bHRzLnNpbXBsZVN0cmluZy5sZW5ndGgoKSA/IGNvbXBvc2l0aW9uUmVzdWx0cy5zaW1w
bGVTdHJpbmcgOiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXZlbnQtPmtleXZhbCkpCisgICAgLCBt
X3VubW9kaWZpZWRUZXh0KG1fdGV4dCkKICAgICAsIG1fa2V5SWRlbnRpZmllcihrZXlJZGVudGlm
aWVyRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkKICAgICAsIG1fd2luZG93c1ZpcnR1YWxL
ZXlDb2RlKHdpbmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkKICAgICAs
IG1fbmF0aXZlVmlydHVhbEtleUNvZGUoZXZlbnQtPmtleXZhbCkKQEAgLTU1OSw3ICs1NzgsMTEg
QEAgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnRL
ZXkqIGV2ZW50KQogICAgICwgbV9pc0tleXBhZChldmVudC0+a2V5dmFsID49IEdES19LUF9TcGFj
ZSAmJiBldmVudC0+a2V5dmFsIDw9IEdES19LUF85KQogICAgICwgbV9pc1N5c3RlbUtleShmYWxz
ZSkKICAgICAsIG1fZ2RrRXZlbnRLZXkoZXZlbnQpCisgICAgLCBtX2NvbXBvc2l0aW9uUmVzdWx0
cyhjb21wb3NpdGlvblJlc3VsdHMpCiB7CisgICAgLy8gVG8gbWF0Y2ggdGhlIGJlaGF2aW9yIG9m
IElFLCB3ZSByZXR1cm4gVktfUFJPQ0VTU0tFWSBmb3Iga2V5cyB0aGF0IHRyaWdnZXJlZCBjb21w
b3NpdGlvbiByZXN1bHRzLgorICAgIGlmIChjb21wb3NpdGlvblJlc3VsdHMuY29tcG9zaXRpb25V
cGRhdGVkKCkpCisgICAgICAgIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID0gVktfUFJPQ0VTU0tF
WTsKIH0KIAogdm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmRpc2FtYmlndWF0ZUtleURvd25F
dmVudChUeXBlIHR5cGUsIGJvb2wgYmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSkKQEAgLTU3NCw2
ICs1OTcsMTIgQEAgdm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmRpc2FtYmlndWF0ZUtleURv
d25FdmVudChUeXBlIHR5cGUsIGJvb2wgYmFja3dhcmRDb20KICAgICBpZiAodHlwZSA9PSBQbGF0
Zm9ybUV2ZW50OjpSYXdLZXlEb3duKSB7CiAgICAgICAgIG1fdGV4dCA9IFN0cmluZygpOwogICAg
ICAgICBtX3VubW9kaWZpZWRUZXh0ID0gU3RyaW5nKCk7CisgICAgfSBlbHNlIGlmICh0eXBlID09
IFBsYXRmb3JtRXZlbnQ6OkNoYXIgJiYgbV9jb21wb3NpdGlvblJlc3VsdHMuY29tcG9zaXRpb25V
cGRhdGVkKCkpIHsKKyAgICAgICAgLy8gSGF2aW5nIGVtcHR5IHRleHQsIHByZXZlbnRzIHRoaXMg
Q2hhciAod2hpY2ggaXMgYSBET00ga2V5cHJlc3MpIGV2ZW50CisgICAgICAgIC8vIGZyb20gZ29p
bmcgdG8gdGhlIERPTS4gS2V5cyB0aGF0IHRyaWdnZXIgY29tcG9zaXRpb24gZXZlbnRzIHNob3Vs
ZCBub3QKKyAgICAgICAgLy8gZmlyZSBrZXlwcmVzcy4KKyAgICAgICAgbV90ZXh0ID0gU3RyaW5n
KCk7CisgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBtX2tleUlkZW50aWZpZXIgPSBTdHJpbmcoKTsKICAgICAgICAgbV93aW5kb3dzVmly
dHVhbEtleUNvZGUgPSAwOwpAQCAtNTk2LDkgKzYyNSw0IEBAIHZvaWQgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpnZXRDdXJyZW50TW9kaWZpZXJTdGF0ZShib29sJiBzaGlmdEtleSwgYm9vbCYgY3Ry
bEtlCiAgICAgbWV0YUtleSA9IHN0YXRlICYgR0RLX01FVEFfTUFTSzsKIH0KIAotR2RrRXZlbnRL
ZXkqIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Z2RrRXZlbnRLZXkoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2dka0V2ZW50S2V5OwotfQotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4
IDVhYzFhN2IxNDFkOTVjOGU4NWEzY2M3NDdjYzIxNzc0MTkxN2ZmOGMuLjJkNWFkMGE3YTU3MzI1
ZmVhYzUzY2I3NDE0NGQxODNlYzc2NzA3NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCkBA
IC0yMTIsNiArMjEyLDggQEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1VzZXJNZWRpYUNsaWVudEd0ay5jcHAgXAogCVNvdXJj
ZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1VzZXJNZWRpYUNsaWVudEd0ay5oIFwKKwlTb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9XZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXIuY3Bw
IFwKKwlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9XZWJWaWV3SW5wdXRNZXRob2RG
aWx0ZXIuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGFwcGxpY2F0aW9uY2Fj
aGUuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwIFwK
IAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWRwcml2YXRlLmggXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGll
bnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVD
bGllbnRHdGsuY3BwCmluZGV4IDdkZmQ5ZWU2MTgwYmU4ZGMwM2VmMGFiYjRlNTU4YWI1YzQ1ZDU4
NjEuLmUwYzNlZDlkMTI1OGYzMGZkZTk1MDhkOGYxNzZkZjI2N2VjYzY0ODMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVu
dEd0ay5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgc3RhdGljIEd0a1dpZGdldCogaW5wdXRNZXRob2Rz
TWVudUl0ZW0gKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAKICAgICBXZWJLaXRXZWJWaWV3UHJp
dmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CiAgICAgQ29udGV4dE1lbnUgaW1Db250ZXh0TWVu
dTsKLSAgICBndGtfaW1fbXVsdGljb250ZXh0X2FwcGVuZF9tZW51aXRlbXMoR1RLX0lNX01VTFRJ
Q09OVEVYVChwcml2LT5pbUNvbnRleHQuZ2V0KCkpLCBHVEtfTUVOVV9TSEVMTChpbUNvbnRleHRN
ZW51LnBsYXRmb3JtRGVzY3JpcHRpb24oKSkpOworICAgIGd0a19pbV9tdWx0aWNvbnRleHRfYXBw
ZW5kX21lbnVpdGVtcyhHVEtfSU1fTVVMVElDT05URVhUKHByaXYtPmltRmlsdGVyLmNvbnRleHQo
KSksIEdUS19NRU5VX1NIRUxMKGltQ29udGV4dE1lbnUucGxhdGZvcm1EZXNjcmlwdGlvbigpKSk7
CiAKICAgICBDb250ZXh0TWVudUl0ZW0gbWVudUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnSW5wdXRNZXRob2RzLCBjb250ZXh0TWVudUl0ZW1UYWdJbnB1dE1ldGhvZHMoKSwgJmlt
Q29udGV4dE1lbnUpOwogICAgIGltQ29udGV4dE1lbnUucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRp
b24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRv
ckNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JD
bGllbnRHdGsuY3BwCmluZGV4IGExZTJlYWI1ZTkwMDU0YmFhYTdlYzlmNTE2NzdlZTY1NGYyMTI2
MWYuLmM5ZmJhMmRkODU5M2ExM2YyZmM1ZDE4OTkwYzM5YWYzMjg0YjQ4N2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcApA
QCAtNjIsNjggKzYyLDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAotc3RhdGljIHZvaWQgaW1Db250ZXh0Q29tbWl0dGVkKEd0a0lNQ29udGV4dCog
Y29udGV4dCwgY29uc3QgZ2NoYXIqIGNvbXBvc2l0aW9uU3RyaW5nLCBFZGl0b3JDbGllbnQqIGNs
aWVudCkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHN0YXRpY19jYXN0PFdlYktpdFdlYlZp
ZXcqPihjbGllbnQtPndlYlZpZXcoKSkpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFp
bkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoaXMgc2lnbmFsIGZpcmVzIGR1cmluZyBh
IGtleWRvd24gZXZlbnQgd2hlbiB3ZSBhcmUgbm90IGluIHRoZSBtaWRkbGUKLSAgICAvLyBvZiBh
IGNvbXBvc2l0aW9uLCB0aGVuIHRyZWF0IHRoaXMgJ2NvbW1pdCcgYXMgYSBub3JtYWwga2V5IGV2
ZW50IGFuZCBqdXN0Ci0gICAgLy8gY2hhbmdlIHRoZSBlZGl0YWJsZSBhcmVhIHJpZ2h0IGJlZm9y
ZSB0aGUga2V5cHJlc3MgZXZlbnQuCi0gICAgaWYgKGNsaWVudC0+dHJlYXRDb250ZXh0Q29tbWl0
QXNLZXlFdmVudCgpKSB7Ci0gICAgICAgIGNsaWVudC0+dXBkYXRlUGVuZGluZ0NvbXBvc2l0aW9u
KGNvbXBvc2l0aW9uU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIElm
IHRoaXMgc2lnbmFsIGZpcmVzIGR1cmluZyBhIG1vdXNlcHJlc3MgZXZlbnQgd2hlbiB3ZSBhcmUg
aW4gdGhlIG1pZGRsZQotICAgIC8vIG9mIGEgY29tcG9zaXRpb24sIHNraXAgdGhpcyAnY29tbWl0
JyBiZWNhdXNlIHRoZSBjb21wb3NpdGlvbiBpcyBhbHJlYWR5IGNvbmZpcm1lZC4gCi0gICAgaWYg
KGNsaWVudC0+cHJldmVudE5leHRDb21wb3NpdGlvbkNvbW1pdCgpKSAKLSAgICAgICAgcmV0dXJu
OwotIAotICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29uZmlybUNvbXBvc2l0aW9uKFN0cmluZzo6ZnJv
bVVURjgoY29tcG9zaXRpb25TdHJpbmcpKTsKLSAgICBjbGllbnQtPmNsZWFyUGVuZGluZ0NvbXBv
c2l0aW9uKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGltQ29udGV4dFByZWVkaXRDaGFuZ2VkKEd0a0lN
Q29udGV4dCogY29udGV4dCwgRWRpdG9yQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgRnJhbWUqIGZy
YW1lID0gY29yZShzdGF0aWNfY2FzdDxXZWJLaXRXZWJWaWV3Kj4oY2xpZW50LT53ZWJWaWV3KCkp
KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGlmICghZnJh
bWUgfHwgIWZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBXZSBpZ25vcmUgdGhlIHByb3ZpZGVkIFBhbmdvQXR0ckxpc3QgZm9yIG5vdy4KLSAgICBH
T3duUHRyPGdjaGFyPiBuZXdQcmVlZGl0KDApOwotICAgIGd0a19pbV9jb250ZXh0X2dldF9wcmVl
ZGl0X3N0cmluZyhjb250ZXh0LCAmbmV3UHJlZWRpdC5vdXRQdHIoKSwgMCwgMCk7Ci0KLSAgICBT
dHJpbmcgcHJlZWRpdFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgobmV3UHJlZWRpdC5nZXQoKSk7
Ci0gICAgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzOwotICAgIHVuZGVy
bGluZXMuYXBwZW5kKENvbXBvc2l0aW9uVW5kZXJsaW5lKDAsIHByZWVkaXRTdHJpbmcubGVuZ3Ro
KCksIENvbG9yKDAsIDAsIDApLCBmYWxzZSkpOwotICAgIGZyYW1lLT5lZGl0b3IoKS0+c2V0Q29t
cG9zaXRpb24ocHJlZWRpdFN0cmluZywgdW5kZXJsaW5lcywgMCwgMCk7Ci19Ci0KLQotdm9pZCBF
ZGl0b3JDbGllbnQ6OnVwZGF0ZVBlbmRpbmdDb21wb3NpdGlvbihjb25zdCBnY2hhciogbmV3Q29t
cG9zaXRpb24pCi17Ci0gICAgLy8gVGhlIElNQ29udGV4dCBtYXkgc2lnbmFsIG1vcmUgdGhhbiBv
bmUgY29tcGxldGVkIGNvbXBvc2l0aW9uIGluIGEgcm93LAotICAgIC8vIGluIHdoaWNoIGNhc2Ug
d2Ugd2FudCB0byBhcHBlbmQgdGhlbSwgcmF0aGVyIHRoYW4gb3ZlcndyaXRlIHRoZSBvbGQgb25l
LgotICAgIGlmICghbV9wZW5kaW5nQ29tcG9zaXRpb24pCi0gICAgICAgIG1fcGVuZGluZ0NvbXBv
c2l0aW9uLnNldChnX3N0cmR1cChuZXdDb21wb3NpdGlvbikpOwotICAgIGVsc2UKLSAgICAgICAg
bV9wZW5kaW5nQ29tcG9zaXRpb24uc2V0KGdfc3RyY29uY2F0KG1fcGVuZGluZ0NvbXBvc2l0aW9u
LmdldCgpLCBuZXdDb21wb3NpdGlvbiwgTlVMTCkpOwotfQotCiB2b2lkIEVkaXRvckNsaWVudDo6
d2lsbFNldElucHV0TWV0aG9kU3RhdGUoKQogewogfQogCiB2b2lkIEVkaXRvckNsaWVudDo6c2V0
SW5wdXRNZXRob2RTdGF0ZShib29sIGFjdGl2ZSkKIHsKLSAgICBXZWJLaXRXZWJWaWV3UHJpdmF0
ZSogcHJpdiA9IG1fd2ViVmlldy0+cHJpdjsKLQotICAgIGlmIChhY3RpdmUpCi0gICAgICAgIGd0
a19pbV9jb250ZXh0X2ZvY3VzX2luKHByaXYtPmltQ29udGV4dC5nZXQoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBndGtfaW1fY29udGV4dF9mb2N1c19vdXQocHJpdi0+aW1Db250ZXh0LmdldCgpKTsK
KyAgICBtX3dlYlZpZXctPnByaXYtPmltRmlsdGVyLnNldEVuYWJsZWQoYWN0aXZlKTsKIH0KIAog
Ym9vbCBFZGl0b3JDbGllbnQ6OnNob3VsZFNob3dVbmljb2RlTWVudSgpCkBAIC0xODEsOCArMTI2
LDYgQEAgaW50IEVkaXRvckNsaWVudDo6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKQogCiBib29s
IEVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6OlJhbmdlKiByYW5nZSkK
IHsKLSAgICBjbGVhclBlbmRpbmdDb21wb3NpdGlvbigpOwotCiAgICAgZ2Jvb2xlYW4gYWNjZXB0
ID0gVFJVRTsKICAgICBHUmVmUHRyPFdlYktpdERPTVJhbmdlPiBraXRSYW5nZShhZG9wdEdSZWYo
a2l0KHJhbmdlKSkpOwogICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYlZpZXcsICJzaG91
bGQtYmVnaW4tZWRpdGluZyIsIGtpdFJhbmdlLmdldCgpLCAmYWNjZXB0KTsKQEAgLTE5MSw4ICsx
MzQsNiBAQCBib29sIEVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6OlJh
bmdlKiByYW5nZSkKIAogYm9vbCBFZGl0b3JDbGllbnQ6OnNob3VsZEVuZEVkaXRpbmcoV2ViQ29y
ZTo6UmFuZ2UqIHJhbmdlKQogewotICAgIGNsZWFyUGVuZGluZ0NvbXBvc2l0aW9uKCk7Ci0KICAg
ICBnYm9vbGVhbiBhY2NlcHQgPSBUUlVFOwogICAgIEdSZWZQdHI8V2ViS2l0RE9NUmFuZ2U+IGtp
dFJhbmdlKGFkb3B0R1JlZihraXQocmFuZ2UpKSk7CiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1l
KG1fd2ViVmlldywgInNob3VsZC1lbmQtZWRpdGluZyIsIGtpdFJhbmdlLmdldCgpLCAmYWNjZXB0
KTsKQEAgLTMxNywyNSArMjU4LDE3IEBAIHZvaWQgRWRpdG9yQ2xpZW50OjpyZXNwb25kVG9DaGFu
Z2VkU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5pZ25vcmVDb21wb3NpdGlvblNlbGVjdGlv
bkNoYW5nZSgpKQotICAgICAgICByZXR1cm47Ci0KICNpZiBQTEFURk9STShYMTEpCiAgICAgc2V0
U2VsZWN0aW9uUHJpbWFyeUNsaXBib2FyZElmTmVlZGVkKG1fd2ViVmlldyk7CiAjZW5kaWYKIAot
ICAgIGlmICghZnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpKQorICAgIGlmIChtX3Vw
ZGF0aW5nQ29tcG9zaXRpb24gfHwgIWZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKSB8
fCBmcmFtZS0+ZWRpdG9yKCktPmlnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIHN0YXJ0OwogICAgIHVuc2lnbmVkIGVuZDsK
LSAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IG1fd2ViVmlldy0+cHJpdjsKLQotICAg
IGlmICghZnJhbWUtPmVkaXRvcigpLT5nZXRDb21wb3NpdGlvblNlbGVjdGlvbihzdGFydCwgZW5k
KSkgewotICAgICAgICAvLyBndGtfaW1fY29udGV4dF9yZXNldCgpIGNsZWFycyB0aGUgY29tcG9z
aXRpb24gZm9yIHVzLgotICAgICAgICBndGtfaW1fY29udGV4dF9yZXNldChwcml2LT5pbUNvbnRl
eHQuZ2V0KCkpOwotICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNhbmNlbENvbXBvc2l0aW9uKCk7
Ci0gICAgfQorICAgIGlmICghZnJhbWUtPmVkaXRvcigpLT5nZXRDb21wb3NpdGlvblNlbGVjdGlv
bihzdGFydCwgZW5kKSkKKyAgICAgICAgbV93ZWJWaWV3LT5wcml2LT5pbUZpbHRlci5yZXNldENv
bnRleHQoKTsKIH0KIAogdm9pZCBFZGl0b3JDbGllbnQ6OmRpZEVuZEVkaXRpbmcoKQpAQCAtNDgy
LDEzICs0MTUsNDcgQEAgYm9vbCBFZGl0b3JDbGllbnQ6OmV4ZWN1dGVQZW5kaW5nRWRpdG9yQ29t
bWFuZHMoRnJhbWUqIGZyYW1lLCBib29sIGFsbG93VGV4dEluc2UKICAgICB9CiAKICAgICBtX3Bl
bmRpbmdFZGl0b3JDb21tYW5kcy5jbGVhcigpOworICAgIHJldHVybiBzdWNjZXNzOworfQorCiti
b29sIEVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlib2FyZEV2ZW50KEtleWJvYXJk
RXZlbnQqIGV2ZW50KQoreworICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5r
ZXlkb3duRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIElmIHdlIHN1Y2Nl
c3NmdWxseSBjb21wbGV0ZWQgYWxsIGVkaXRvciBjb21tYW5kcywgdGhlbgotICAgIC8vIHRoaXMg
c2lnbmFscyBhIGNhbmNlbGluZyBvZiB0aGUgY29tcG9zaXRpb24uCi0gICAgaWYgKHN1Y2Nlc3Mp
Ci0gICAgICAgIGNsZWFyUGVuZGluZ0NvbXBvc2l0aW9uKCk7CisgICAgY29uc3QgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50KiBwbGF0Zm9ybUV2ZW50ID0gZXZlbnQtPmtleUV2ZW50KCk7CisgICAgaWYg
KCFwbGF0Zm9ybUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc3Vj
Y2VzczsKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKG1fd2ViVmlldyktPmZvY3VzQ29udHJvbGxl
cigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+ZWRp
dG9yKCktPmNhbkVkaXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgQ29t
cG9zaXRpb25SZXN1bHRzJiBjb21wb3NpdGlvblJlc3VsdHMgPSBwbGF0Zm9ybUV2ZW50LT5jb21w
b3NpdGlvblJlc3VsdHMoKTsKKyAgICBpZiAoIWNvbXBvc2l0aW9uUmVzdWx0cy5jb21wb3NpdGlv
blVwZGF0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV91cGRhdGluZ0NvbXBv
c2l0aW9uID0gdHJ1ZTsKKworICAgIC8vIFRoaXMgd29uJ3QgcHJldmVudCBhIGtleXByZXNzIGV2
ZW50IGFsb25lLCBidXQgUGxhdGZvcm1LZXlib2FyZEV2ZW50IHJldHVybnMKKyAgICAvLyBhbiBl
bXB0eSBzdHJpbmcgd2hlbiB0aGVyZSBhcmUgY29tcG9zaXRpb24gcmVzdWx0cy4gVGhhdCBwcmV2
ZW50cyB0aGUgZGVsaXZlcnkKKyAgICAvLyBvZiBrZXlwcmVzcywgd2hpY2ggaXMgdGhlIGJlaGF2
aW9yIHdlIHdhbnQgZm9yIGNvbXBvc2l0aW9uIGV2ZW50cy4gU2VlCisgICAgLy8gRXZlbnRIYW5k
bGVyOjprZXlFdmVudC4KKyAgICBldmVudC0+cHJldmVudERlZmF1bHQoKTsKKyAgICBBU1NFUlQo
cGxhdGZvcm1FdmVudC0+c3RyaW5nKCkuaXNOdWxsKCkpOworCisgICAgaWYgKCFjb21wb3NpdGlv
blJlc3VsdHMuY29uZmlybWVkQ29tcG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIGZyYW1lLT5l
ZGl0b3IoKS0+Y29uZmlybUNvbXBvc2l0aW9uKGNvbXBvc2l0aW9uUmVzdWx0cy5jb25maXJtZWRD
b21wb3NpdGlvbik7CisKKyAgICBTdHJpbmcgcHJlZWRpdCA9IGNvbXBvc2l0aW9uUmVzdWx0cy5w
cmVlZGl0OworICAgIGlmICghcHJlZWRpdC5pc051bGwoKSkgeworICAgICAgICBWZWN0b3I8Q29t
cG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXM7CisgICAgICAgIHVuZGVybGluZXMuYXBwZW5k
KENvbXBvc2l0aW9uVW5kZXJsaW5lKDAsIHByZWVkaXQubGVuZ3RoKCksIENvbG9yKDEsIDEsIDEp
LCBmYWxzZSkpOworICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPnNldENvbXBvc2l0aW9uKHByZWVk
aXQsIHVuZGVybGluZXMsIGNvbXBvc2l0aW9uUmVzdWx0cy5wcmVlZGl0Q3Vyc29yT2Zmc2V0LCBj
b21wb3NpdGlvblJlc3VsdHMucHJlZWRpdEN1cnNvck9mZnNldCk7CisgICAgfQorCisgICAgbV91
cGRhdGluZ0NvbXBvc2l0aW9uID0gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQg
RWRpdG9yQ2xpZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQpA
QCAtNTAyLDYgKzQ2OSw5IEBAIHZvaWQgRWRpdG9yQ2xpZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50
KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogICAgIGlmICghcGxhdGZvcm1FdmVudCkKICAgICAgICAg
cmV0dXJuOwogCisgICAgaWYgKGhhbmRsZUlucHV0TWV0aG9kS2V5Ym9hcmRFdmVudChldmVudCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIEtleUJpbmRpbmdUcmFuc2xhdG9yOjpFdmVudFR5cGUg
dHlwZSA9IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCA/CiAgICAg
ICAgIEtleUJpbmRpbmdUcmFuc2xhdG9yOjpLZXlEb3duIDogS2V5QmluZGluZ1RyYW5zbGF0b3I6
OktleVByZXNzOwogICAgIG1fa2V5QmluZGluZ1RyYW5zbGF0b3IuZ2V0RWRpdG9yQ29tbWFuZHNG
b3JLZXlFdmVudChwbGF0Zm9ybUV2ZW50LT5nZGtFdmVudEtleSgpLCB0eXBlLCBtX3BlbmRpbmdF
ZGl0b3JDb21tYW5kcyk7CkBAIC01MzEsMTAzICs1MDEsMjYgQEAgdm9pZCBFZGl0b3JDbGllbnQ6
OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgLy8gVGhpcyBp
cyBqdXN0IGEgbm9ybWFsIHRleHQgaW5zZXJ0aW9uLCBzbyB3YWl0IHRvIGV4ZWN1dGUgdGhlIGlu
c2VydGlvbgogICAgIC8vIHVudGlsIGEga2V5cHJlc3MgZXZlbnQgaGFwcGVucy4gVGhpcyB3aWxs
IGVuc3VyZSB0aGF0IHRoZSBpbnNlcnRpb24gd2lsbCBub3QKICAgICAvLyBiZSByZWZsZWN0ZWQg
aW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWVsZCB1bnRpbCB0aGUga2V5dXAgRE9NIGV2ZW50Lgot
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7Ci0K
LSAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHBlbmRpbmcgY29tcG9zaXRpb24gYXQgdGhpcyBwb2lu
dCwgaXQgaGFwcGVuZWQgd2hpbGUKLSAgICAgICAgLy8gZmlsdGVyaW5nIGEga2V5cHJlc3MsIHNv
IHdlIHRyZWF0IGl0IGFzIGEgbm9ybWFsIHRleHQgaW5zZXJ0aW9uLgotICAgICAgICAvLyBUaGlz
IHdpbGwgYWxzbyBlbnN1cmUgdGhhdCBpZiB0aGUga2V5cHJlc3MgZXZlbnQgaGFuZGxlciBjaGFu
Z2VkIHRoZQotICAgICAgICAvLyBjdXJyZW50bHkgZm9jdXNlZCBub2RlLCB0aGUgdGV4dCBpcyBz
dGlsbCBpbnNlcnRlZCBpbnRvIHRoZSBvcmlnaW5hbAotICAgICAgICAvLyBub2RlIChpbnNlcnRU
ZXh0KCkgaGFzIHRoaXMgbG9naWMsIGJ1dCBjb25maXJtQ29tcG9zaXRpb24oKSBkb2VzIG5vdCku
Ci0gICAgICAgIGlmIChtX3BlbmRpbmdDb21wb3NpdGlvbikgewotICAgICAgICAgICAgZnJhbWUt
PmVkaXRvcigpLT5pbnNlcnRUZXh0KFN0cmluZzo6ZnJvbVVURjgobV9wZW5kaW5nQ29tcG9zaXRp
b24uZ2V0KCkpLCBldmVudCk7Ci0gICAgICAgICAgICBjbGVhclBlbmRpbmdDb21wb3NpdGlvbigp
OwotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgaWYgKGV2ZW50
LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpCisgICAgICAgIHJldHVybjsK
IAotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRG9uJ3QgaW5zZXJ0IG51bGwgb3Ig
Y29udHJvbCBjaGFyYWN0ZXJzIGFzIHRoZXkgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2
aW91cgotICAgICAgICAgICAgaWYgKGV2ZW50LT5jaGFyQ29kZSgpIDwgJyAnKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAvLyBEb24ndCBpbnNlcnQgbnVsbCBvciBjb250cm9sIGNoYXJh
Y3RlcnMgYXMgdGhleSBjYW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgYmVoYXZpb3VyCisgICAgaWYg
KGV2ZW50LT5jaGFyQ29kZSgpIDwgJyAnKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAg
IC8vIERvbid0IGluc2VydCBhbnl0aGluZyBpZiBhIG1vZGlmaWVyIGlzIHByZXNzZWQKLSAgICAg
ICAgICAgIGlmIChwbGF0Zm9ybUV2ZW50LT5jdHJsS2V5KCkgfHwgcGxhdGZvcm1FdmVudC0+YWx0
S2V5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgIC8vIERvbid0IGluc2VydCBhbnl0
aGluZyBpZiBhIG1vZGlmaWVyIGlzIHByZXNzZWQKKyAgICBpZiAocGxhdGZvcm1FdmVudC0+Y3Ry
bEtleSgpIHx8IHBsYXRmb3JtRXZlbnQtPmFsdEtleSgpKQorICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHQocGxhdGZvcm1FdmVudC0+
dGV4dCgpLCBldmVudCkpCi0gICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4
dChwbGF0Zm9ybUV2ZW50LT50ZXh0KCksIGV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7CiB9CiAKIHZvaWQgRWRpdG9yQ2xpZW50OjpoYW5kbGVJbnB1dE1ldGhvZEtl
eWRvd24oS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgRnJhbWUqIHRhcmdldEZyYW1lID0g
Y29yZShtX3dlYlZpZXcpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7
Ci0gICAgaWYgKCF0YXJnZXRGcmFtZSB8fCAhdGFyZ2V0RnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0g
bV93ZWJWaWV3LT5wcml2OwotCi0gICAgbV9wcmV2ZW50TmV4dENvbXBvc2l0aW9uQ29tbWl0ID0g
ZmFsc2U7Ci0KLSAgICAvLyBTb21lIElNIGNvbnRleHRzIChlLmcuICdzaW1wbGUnKSB3aWxsIGFj
dCBhcyBpZiB0aGV5IGZpbHRlciBldmVyeQotICAgIC8vIGtleXN0cm9rZSBhbmQganVzdCBpc3N1
ZSBhICdjb21taXQnIHNpZ25hbCBkdXJpbmcgaGFuZGxpbmcuIEluIHNpdHVhdGlvbnMKLSAgICAv
LyB3aGVyZSB0aGUgJ2NvbW1pdCcgc2lnbmFsIGhhcHBlbnMgZHVyaW5nIGZpbHRlcmluZyBhbmQg
dGhlcmUgaXMgbm8gYWN0aXZlCi0gICAgLy8gY29tcG9zaXRpb24sIGFjdCBhcyBpZiB0aGUga2V5
c3Ryb2tlIHdhcyBub3QgZmlsdGVyZWQuIFRoZSBvbmUgZXhjZXB0aW9uIHRvCi0gICAgLy8gdGhp
cyBpcyB3aGVuIHRoZSBrZXl2YWwgcGFyYW1ldGVyIG9mIHRoZSBHZGtLZXlFdmVudCBpcyAwLCB3
aGljaCBpcyBvZnRlbgotICAgIC8vIGEga2V5IGV2ZW50IHNlbnQgYnkgdGhlIElNIGNvbnRleHQg
Zm9yIGNvbW1pdHRpbmcgdGhlIGN1cnJlbnQgY29tcG9zaXRpb24uCi0KLSAgICAvLyBIZXJlIGlz
IGEgdHlwaWNhbCBzZXF1ZW5jZSBvZiBldmVudHMgZm9yIHRoZSAnc2ltcGxlJyBjb250ZXh0Ogot
ICAgIC8vIDEuIEdESyBrZXkgcHJlc3MgZXZlbnQgLT4gd2Via2l0X3dlYl92aWV3X2tleV9wcmVz
c19ldmVudAotICAgIC8vIDIuIEtleWRvd24gZXZlbnQgLT4gRWRpdG9yQ2xpZW50OjpoYW5kbGVJ
bnB1dE1ldGhvZEtleWRvd24KLSAgICAvLyAgICAgZ3RrX2ltX2NvbnRleHRfZmlsdGVyX2tleXBy
ZXNzIHJldHVybnMgdHJ1ZSwgYnV0IHRoZXJlIGlzIGEgcGVuZGluZwotICAgIC8vICAgICBjb21w
b3NpdGlvbiBzbyBldmVudC0+cHJldmVudERlZmF1bHQgaXMgbm90IGNhbGxlZCAoYmVsb3cpLgot
ICAgIC8vIDMuIEtleWRvd24gZXZlbnQgYnViYmxlcyB0aHJvdWdoIHRoZSBET00KLSAgICAvLyA0
LiBLZXlkb3duIGV2ZW50IC0+IEVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudAotICAg
IC8vICAgICBObyBhY3Rpb24gdGFrZW4uCi0gICAgLy8gNC4gR0RLIGtleSByZWxlYXNlIGV2ZW50
IC0+IHdlYmtpdF93ZWJfdmlld19rZXlfcmVsZWFzZV9ldmVudAotICAgIC8vIDUuIGd0a19pbV9j
b250ZXh0X2ZpbHRlcl9rZXlwcmVzcyBpcyBjYWxsZWQgb24gdGhlIHJlbGVhc2UgZXZlbnQuCi0g
ICAgLy8gICAgIFNpbXBsZSBkb2VzIG5vdCBmaWx0ZXIgbW9zdCBrZXkgcmVsZWFzZXMsIHNvIHRo
ZSBldmVudCBjb250aW51ZXMuCi0gICAgLy8gNi4gS2V5cHJlc3MgZXZlbnQgYnViYmxlcyB0aHJv
dWdoIHRoZSBET00uCi0gICAgLy8gNy4gS2V5cHJlc3MgZXZlbnQgLT4gRWRpdG9yQ2xpZW50Ojpo
YW5kbGVLZXlib2FyZEV2ZW50Ci0gICAgLy8gICAgIHBlbmRpbmcgY29tcG9zaXRpb24gaXMgaW5z
ZXJ0ZWQuCi0gICAgLy8gOC4gS2V5dXAgZXZlbnQgYnViYmxlcyB0aHJvdWdoIHRoZSBET00uCi0g
ICAgLy8gOS4gS2V5dXAgZXZlbnQgLT4gRWRpdG9yQ2xpZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50
Ci0gICAgLy8gICAgIE5vIGFjdGlvbiB0YWtlbi4KLQotICAgIC8vIFRoZXJlIGFyZSB0d28gc2l0
dWF0aW9ucyB3aGVyZSB3ZSBkbyBmaWx0ZXIgdGhlIGtleXN0cm9rZToKLSAgICAvLyAxLiBUaGUg
SU1Db250ZXh0IGluc3RydWN0ZWQgdXMgdG8gZmlsdGVyIGFuZCB3ZSBoYXZlIG5vIHBlbmRpbmcg
Y29tcG9zaXRpb24uCi0gICAgLy8gMi4gVGhlIElNQ29udGV4dCBkaWQgbm90IGluc3RydWN0IHVz
IHRvIGZpbHRlciwgYnV0IHRoZSBrZXlzdHJva2UgY2F1c2VkIGEKLSAgICAvLyAgICBjb21wb3Np
dGlvbiBpbiBwcm9ncmVzcyB0byBmaW5pc2guIEl0IHNlZW1zIHRoYXQgc29tZXRpbWVzIFNDSU0g
d2lsbCBmaW5pc2gKLSAgICAvLyAgICBhIGNvbXBvc2l0aW9uIGFuZCBub3QgbWFyayB0aGUga2V5
c3Ryb2tlIGFzIGZpbHRlcmVkLgotICAgIG1fdHJlYXRDb250ZXh0Q29tbWl0QXNLZXlFdmVudCA9
ICghdGFyZ2V0RnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpKQotICAgICAgICAgJiYg
ZXZlbnQtPmtleUV2ZW50KCktPmdka0V2ZW50S2V5KCktPmtleXZhbDsKLSAgICBjbGVhclBlbmRp
bmdDb21wb3NpdGlvbigpOwotICAgIGlmICgoZ3RrX2ltX2NvbnRleHRfZmlsdGVyX2tleXByZXNz
KHByaXYtPmltQ29udGV4dC5nZXQoKSwgZXZlbnQtPmtleUV2ZW50KCktPmdka0V2ZW50S2V5KCkp
ICYmICFtX3BlbmRpbmdDb21wb3NpdGlvbikKLSAgICAgICAgfHwgKCFtX3RyZWF0Q29udGV4dENv
bW1pdEFzS2V5RXZlbnQgJiYgIXRhcmdldEZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24o
KSkpCi0gICAgICAgIGV2ZW50LT5wcmV2ZW50RGVmYXVsdCgpOwotCi0gICAgbV90cmVhdENvbnRl
eHRDb21taXRBc0tleUV2ZW50ID0gZmFsc2U7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50OjpoYW5k
bGVJbnB1dE1ldGhvZE1vdXNlUHJlc3MoKQotewotICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IGNv
cmUobV93ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwot
Ci0gICAgaWYgKCF0YXJnZXRGcmFtZSB8fCAhdGFyZ2V0RnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0g
bV93ZWJWaWV3LT5wcml2OwotCi0gICAgLy8gV2hlbiBhIG1vdXNlIHByZXNzIGZpcmVzLCB0aGUg
Y29tbWl0IHNpZ25hbCBoYXBwZW5zIGR1cmluZyBhIGNvbXBvc2l0aW9uLgotICAgIC8vIEluIHRo
aXMgY2FzZSwgaWYgdGhlIGZvY3VzZWQgbm9kZSBpcyBjaGFuZ2VkLCB0aGUgY29tbWl0IHNpZ25h
bCBoYXBwZW5zIGluIGEgZGlmZnJlbnQgbm9kZS4KLSAgICAvLyBUaGVyZWZvcmUsIHdlIG5lZWQg
dG8gY29uZmlybSB0aGUgY3VycmVudCBjb21wb3NpdG9uIGFuZCBpZ25vcmUgdGhlIG5leHQgY29t
bWl0IHNpZ25hbC4gCi0gICAgR093blB0cjxnY2hhcj4gbmV3UHJlZWRpdCgwKTsKLSAgICBndGtf
aW1fY29udGV4dF9nZXRfcHJlZWRpdF9zdHJpbmcocHJpdi0+aW1Db250ZXh0LmdldCgpLCAmbmV3
UHJlZWRpdC5vdXRQdHIoKSwgMCwgMCk7Ci0gICAgCi0gICAgaWYgKGdfdXRmOF9zdHJsZW4obmV3
UHJlZWRpdC5nZXQoKSwgLTEpKSB7Ci0gICAgICAgIHRhcmdldEZyYW1lLT5lZGl0b3IoKS0+Y29u
ZmlybUNvbXBvc2l0aW9uKCk7Ci0gICAgICAgIG1fcHJldmVudE5leHRDb21wb3NpdGlvbkNvbW1p
dCA9IHRydWU7Ci0gICAgICAgIGd0a19pbV9jb250ZXh0X3Jlc2V0KHByaXYtPmltQ29udGV4dC5n
ZXQoKSk7Ci0gICAgfSAKKyAgICAvLyBJbnB1dCBtZXRob2QgcmVzdWx0cyBhcmUgaGFuZGxlZCBp
biBoYW5kbGVLZXlib2FyZEV2ZW50LCBzbyB0aGF0IHdlIGNhbiB3YWl0CisgICAgLy8gdG8gdHJp
Z2dlciBjb21wb3NpdGlvbiB1cGRhdGVzIHVudGlsIGFmdGVyIHRoZSBrZXlkb3duIGV2ZW50IGhh
bmRsZXIuIFRoaXMgYmV0dGVyCisgICAgLy8gbWF0Y2hlcyBvdGhlciBicm93c2Vycy4KIH0KIAog
RWRpdG9yQ2xpZW50OjpFZGl0b3JDbGllbnQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKQEAgLTYz
NiwyMCArNTI5LDEzIEBAIEVkaXRvckNsaWVudDo6RWRpdG9yQ2xpZW50KFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCiAgICAgLCBtX3RleHRDaGVja2VyQ2xpZW50KFdFQktJVF9TUEVMTF9DSEVDS0VS
KHdlYmtpdF9nZXRfdGV4dF9jaGVja2VyKCkpKQogI2VuZGlmCiAgICAgLCBtX3dlYlZpZXcod2Vi
VmlldykKLSAgICAsIG1fcHJldmVudE5leHRDb21wb3NpdGlvbkNvbW1pdChmYWxzZSkKLSAgICAs
IG1fdHJlYXRDb250ZXh0Q29tbWl0QXNLZXlFdmVudChmYWxzZSkKICAgICAsIG1fc21hcnRJbnNl
cnREZWxldGVFbmFibGVkKGZhbHNlKQorICAgICwgbV91cGRhdGluZ0NvbXBvc2l0aW9uKGZhbHNl
KQogewotICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gbV93ZWJWaWV3LT5wcml2Owot
ICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+aW1Db250ZXh0LmdldCgpLCAiY29tbWl0IiwgR19D
QUxMQkFDSyhpbUNvbnRleHRDb21taXR0ZWQpLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0
KHByaXYtPmltQ29udGV4dC5nZXQoKSwgInByZWVkaXQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soaW1D
b250ZXh0UHJlZWRpdENoYW5nZWQpLCB0aGlzKTsKIH0KIAogRWRpdG9yQ2xpZW50Ojp+RWRpdG9y
Q2xpZW50KCkKIHsKLSAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IG1fd2ViVmlldy0+
cHJpdjsKLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMocHJpdi0+aW1D
b250ZXh0LmdldCgpLCAoZ3BvaW50ZXIpaW1Db250ZXh0Q29tbWl0dGVkLCB0aGlzKTsKLSAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMocHJpdi0+aW1Db250ZXh0LmdldCgp
LCAoZ3BvaW50ZXIpaW1Db250ZXh0UHJlZWRpdENoYW5nZWQsIHRoaXMpOwogfQogCiB2b2lkIEVk
aXRvckNsaWVudDo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKEVsZW1lbnQqKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmggYi9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaAppbmRleCAy
ZjA4ZDhkYzYzYWI4OWMxMTA4ZWU3MzEzYTVkNzM5MTNiZDM3ZTFmLi4zNjEyZDkwMDMxYjBlMjgz
YzA1NmQ3OGVlMTQ4YWM4OTBiNWM4M2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaApAQCAtNjUsMTIgKzY1LDcgQEAgY2xhc3Mg
RWRpdG9yQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkVkaXRvckNsaWVudCB7CiAgICAgICAgIEVk
aXRvckNsaWVudChXZWJLaXRXZWJWaWV3Kik7CiAgICAgICAgIH5FZGl0b3JDbGllbnQoKTsKICAg
ICAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldygpIHsgcmV0dXJuIG1fd2ViVmlldzsgfQotICAg
ICAgICBib29sIHRyZWF0Q29udGV4dENvbW1pdEFzS2V5RXZlbnQoKSB7IHJldHVybiBtX3RyZWF0
Q29udGV4dENvbW1pdEFzS2V5RXZlbnQ7IH0KLSAgICAgICAgYm9vbCBwcmV2ZW50TmV4dENvbXBv
c2l0aW9uQ29tbWl0KCkgeyByZXR1cm4gbV9wcmV2ZW50TmV4dENvbXBvc2l0aW9uQ29tbWl0OyB9
Ci0gICAgICAgIHZvaWQgY2xlYXJQZW5kaW5nQ29tcG9zaXRpb24oKSB7IG1fcGVuZGluZ0NvbXBv
c2l0aW9uLnNldCgwKTsgfQotICAgICAgICBib29sIGhhc1BlbmRpbmdDb21wb3NpdGlvbigpIHsg
cmV0dXJuIG1fcGVuZGluZ0NvbXBvc2l0aW9uOyB9CiAgICAgICAgIHZvaWQgYWRkUGVuZGluZ0Vk
aXRvckNvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCkgeyBtX3BlbmRpbmdFZGl0b3JDb21tYW5k
cy5hcHBlbmQoY29tbWFuZCk7IH0KLSAgICAgICAgdm9pZCB1cGRhdGVQZW5kaW5nQ29tcG9zaXRp
b24oY29uc3QgY2hhciopOwogICAgICAgICB2b2lkIGdlbmVyYXRlRWRpdG9yQ29tbWFuZHMoY29u
c3QgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopOwogICAgICAgICBib29sIGV4ZWN1dGVQZW5kaW5n
RWRpdG9yQ29tbWFuZHMoV2ViQ29yZTo6RnJhbWUqLCBib29sKTsKIApAQCAtMTE5LDcgKzExNCw2
IEBAIGNsYXNzIEVkaXRvckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpFZGl0b3JDbGllbnQgewog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KFdlYkNvcmU6OktleWJv
YXJkRXZlbnQqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUlucHV0TWV0aG9kS2V5ZG93
bihXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVJ
bnB1dE1ldGhvZE1vdXNlUHJlc3MoKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgdGV4dEZpZWxk
RGlkQmVnaW5FZGl0aW5nKFdlYkNvcmU6OkVsZW1lbnQqKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IHRleHRGaWVsZERpZEVuZEVkaXRpbmcoV2ViQ29yZTo6RWxlbWVudCopOwpAQCAtMTQwLDIwICsx
MzQsMTggQEAgY2xhc3MgRWRpdG9yQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkVkaXRvckNsaWVu
dCB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93VW5pY29kZU1lbnUoKTsKIAogICAg
IHByaXZhdGU6CisgICAgICAgIGJvb2wgaGFuZGxlSW5wdXRNZXRob2RLZXlib2FyZEV2ZW50KFdl
YkNvcmU6OktleWJvYXJkRXZlbnQqKTsKKwogI2lmIEVOQUJMRShTUEVMTENIRUNLKQogICAgICAg
ICBUZXh0Q2hlY2tlckNsaWVudEd0ayBtX3RleHRDaGVja2VyQ2xpZW50OwogI2Vsc2UKICAgICAg
ICAgV2ViQ29yZTo6RW1wdHlUZXh0Q2hlY2tlckNsaWVudCBtX3RleHRDaGVja2VyQ2xpZW50Owog
I2VuZGlmCiAgICAgICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKLSAgICAgICAgYm9vbCBt
X3ByZXZlbnROZXh0Q29tcG9zaXRpb25Db21taXQ7Ci0gICAgICAgIGJvb2wgbV90cmVhdENvbnRl
eHRDb21taXRBc0tleUV2ZW50OwotICAgICAgICBHT3duUHRyPGdjaGFyPiBtX3BlbmRpbmdDb21w
b3NpdGlvbjsKLQogICAgICAgICBXZWJDb3JlOjpLZXlCaW5kaW5nVHJhbnNsYXRvciBtX2tleUJp
bmRpbmdUcmFuc2xhdG9yOwogICAgICAgICBWZWN0b3I8V1RGOjpTdHJpbmc+IG1fcGVuZGluZ0Vk
aXRvckNvbW1hbmRzOwotCiAgICAgICAgIGJvb2wgbV9zbWFydEluc2VydERlbGV0ZUVuYWJsZWQ7
CisgICAgICAgIGJvb2wgbV91cGRhdGluZ0NvbXBvc2l0aW9uOwogICAgIH07CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1dlYlZpZXdJbnB1dE1ldGhv
ZEZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9XZWJWaWV3SW5w
dXRNZXRob2RGaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM1Y2EyM2IwMTRkNDVmOWM0YTVkOTExMGQ1
MGY4NDcwODk5MmMwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9XZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXIuY3BwCkBAIC0wLDAgKzEsMTEwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXIuaCIKKworI2luY2x1ZGUgIkZv
Y3VzQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1L
ZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAid2Via2l0d2Vidmlld3ByaXZhdGUuaCIKKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworRnJhbWUqIFdlYlZpZXdJbnB1dE1ldGhvZEZpbHRlcjo6Zm9j
dXNlZE9yTWFpbkZyYW1lKCkKK3sKKyAgICBBU1NFUlQobV93ZWJWaWV3KTsKKyAgICBQYWdlKiBw
YWdlID0gY29yZShtX3dlYlZpZXcpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpOworfQorCit2b2lkIFdlYlZpZXdJbnB1dE1ldGhvZEZpbHRlcjo6c2V0V2ViVmlldyhXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIG1fd2ViVmlldyA9IHdlYlZpZXc7CisgICAgR3Rr
SW5wdXRNZXRob2RGaWx0ZXI6OnNldFdpZGdldChHVEtfV0lER0VUKHdlYlZpZXcpKTsKK30KKwor
Ym9vbCBXZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXI6OmNhbkVkaXQoKQoreworICAgIEZyYW1lKiBm
cmFtZSA9IGZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIHJldHVybiBmcmFtZSAmJiBmcmFtZS0+
ZWRpdG9yKCktPmNhbkVkaXQoKTsKK30KKworYm9vbCBXZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXI6
OnNlbmRTaW1wbGVLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQsIFdURjo6U3RyaW5nIHNpbXBs
ZVN0cmluZykKK3sKKyAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgcGxhdGZvcm1FdmVudChldmVu
dCwgQ29tcG9zaXRpb25SZXN1bHRzKHNpbXBsZVN0cmluZykpOworICAgIHJldHVybiBmb2N1c2Vk
T3JNYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KHBsYXRmb3JtRXZlbnQpOwor
fQorCitib29sIFdlYlZpZXdJbnB1dE1ldGhvZEZpbHRlcjo6c2VuZEtleUV2ZW50V2l0aENvbXBv
c2l0aW9uUmVzdWx0cyhHZGtFdmVudEtleSogZXZlbnQsIFJlc3VsdHNUb1NlbmQgcmVzdWx0c1Rv
U2VuZCkKK3sKKyAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgcGxhdGZvcm1FdmVudChldmVudCwg
Q29tcG9zaXRpb25SZXN1bHRzKHJlc3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbiA/IG1fY29uZmly
bWVkQ29tcG9zaXRpb24gOiBTdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNUb1NlbmQgJiBQcmVl
ZGl0ID8gbV9wcmVlZGl0IDogU3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnNvck9mZnNldCkpOwor
ICAgIHJldHVybiBmb2N1c2VkT3JNYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50
KHBsYXRmb3JtRXZlbnQpOworfQorCit2b2lkIFdlYlZpZXdJbnB1dE1ldGhvZEZpbHRlcjo6Y29u
ZmlybUNvbXBvc2l0aW9uVGV4dChTdHJpbmcgdGV4dCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBm
b2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+ZWRpdG9yKCkt
PmNhbkVkaXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHRleHQuaXNOdWxsKCkpIHsK
KyAgICAgICAgY29uZmlybUN1cnJlbnRDb21wb3NpdGlvbigpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29uZmlybUNvbXBvc2l0aW9uKG1fY29uZmlybWVk
Q29tcG9zaXRpb24pOworfQorCit2b2lkIFdlYlZpZXdJbnB1dE1ldGhvZEZpbHRlcjo6Y29uZmly
bUN1cnJlbnRDb21wb3NpdGlvbigpCit7CisgICAgRnJhbWUqIGZyYW1lID0gZm9jdXNlZE9yTWFp
bkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCkp
CisgICAgICAgIHJldHVybjsKKyAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlv
bigpOworfQorCit2b2lkIFdlYlZpZXdJbnB1dE1ldGhvZEZpbHRlcjo6Y2FuY2VsQ3VycmVudENv
bXBvc2l0aW9uKCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBmb2N1c2VkT3JNYWluRnJhbWUoKTsK
KyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGZyYW1lLT5lZGl0b3IoKS0+Y2FuY2VsQ29tcG9zaXRpb24oKTsKK30KKwor
dm9pZCBXZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXI6OnNldFByZWVkaXQoU3RyaW5nIG5ld1ByZWVk
aXQsIGludCBjdXJzb3JPZmZzZXQpCit7CisgICAgRnJhbWUqIGZyYW1lID0gZm9jdXNlZE9yTWFp
bkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRPRE86IFdlIHNob3VsZCBwYXJzZSB0aGUgUGFu
Z29BdHRyTGlzdCB0aGF0IHdlIGdldCBmcm9tIHRoZSBJTSBjb250ZXh0IGhlcmUuCisgICAgVmVj
dG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzOworICAgIHVuZGVybGluZXMuYXBw
ZW5kKENvbXBvc2l0aW9uVW5kZXJsaW5lKDAsIG5ld1ByZWVkaXQubGVuZ3RoKCksIENvbG9yKDEs
IDEsIDEpLCBmYWxzZSkpOworICAgIGZyYW1lLT5lZGl0b3IoKS0+c2V0Q29tcG9zaXRpb24obmV3
UHJlZWRpdCwgdW5kZXJsaW5lcywgbV9jdXJzb3JPZmZzZXQsIG1fY3Vyc29yT2Zmc2V0KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9XZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXIuaCBiL1NvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L1dlYlZpZXdJbnB1dE1ldGhvZEZpbHRlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmZkNzBlZGI4ZjEzZmE5YjZjMTUwYjMyMWI1YzlhZDk3ZGExNGExMjQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9XZWJWaWV3SW5wdXRNZXRob2RG
aWx0ZXIuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyX2gKKyNkZWZpbmUgV2ViVmll
d0lucHV0TWV0aG9kRmlsdGVyX2gKKworI2luY2x1ZGUgIkd0a0lucHV0TWV0aG9kRmlsdGVyLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZyYW1lOworfQorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3OworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyIDogcHVibGljIFdlYkNvcmU6Okd0a0lucHV0
TWV0aG9kRmlsdGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldFdlYlZpZXcoV2ViS2l0V2ViVmll
dyopOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIHNlbmRTaW1wbGVLZXlFdmVudChH
ZGtFdmVudEtleSosIFdURjo6U3RyaW5nIGV2ZW50U3RyaW5nKTsKKyAgICB2aXJ0dWFsIGJvb2wg
c2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyhHZGtFdmVudEtleSosIFJlc3VsdHNU
b1NlbmQpOworICAgIHZpcnR1YWwgYm9vbCBjYW5FZGl0KCk7CisgICAgdmlydHVhbCB2b2lkIGNv
bmZpcm1Db21wb3NpdGlvblRleHQoU3RyaW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUN1
cnJlbnRDb21wb3NpdGlvbigpOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxDdXJyZW50Q29tcG9z
aXRpb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZWRpdChTdHJpbmcsIGludCBjdXJzb3JP
ZmZzZXQpOworCitwcml2YXRlOgorICAgIFdlYkNvcmU6OkZyYW1lKiBmb2N1c2VkT3JNYWluRnJh
bWUoKTsKKworICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCAzZjE3N2JlZWFmZGIz
MTBiZTViODM1YTJlNmY5YzIwYjIzZmM1YzYyLi5jMWUzNDE1NjUyYmJiYzdmOTM5ZjIxM2RiMzk2
NDNmNjQ4NmZiZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcu
Y3BwCkBAIC0yNzMsOCArMjczLDYgQEAgR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0V2Vi
Vmlldywgd2Via2l0X3dlYl92aWV3LCBHVEtfVFlQRV9DT05UQUlORVIsCiBzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX3ZpZXdfc2V0dGluZ3Nfbm90aWZ5KFdlYktpdFdlYlNldHRpbmdzKiB3ZWJTZXR0
aW5ncywgR1BhcmFtU3BlYyogcHNwZWMsIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpOwogc3RhdGlj
IHZvaWQgd2Via2l0X3dlYl92aWV3X3NldF93aW5kb3dfZmVhdHVyZXMoV2ViS2l0V2ViVmlldyog
d2ViVmlldywgV2ViS2l0V2ViV2luZG93RmVhdHVyZXMqIHdlYldpbmRvd0ZlYXR1cmVzKTsKIAot
c3RhdGljIEd0a0lNQ29udGV4dCogd2Via2l0X3dlYl92aWV3X2dldF9pbV9jb250ZXh0KFdlYktp
dFdlYlZpZXcqKTsKLQogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogc3RhdGljIHZvaWQgUG9w
dXBNZW51UG9zaXRpb25GdW5jKEd0a01lbnUqIG1lbnUsIGdpbnQgKngsIGdpbnQgKnksIGdib29s
ZWFuICpwdXNoSW4sIGdwb2ludGVyIHVzZXJEYXRhKQogewpAQCAtNTgxLDcgKzU3OSw3IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBn
dWludCBwcm9wX2lkLCBHVmFsdWUqCiAgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwg
d2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaSh3ZWJWaWV3KSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgUFJPUF9JTV9DT05URVhUOgotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIHdlYmtpdF93ZWJfdmlld19nZXRfaW1fY29udGV4dCh3ZWJWaWV3KSk7CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2ViVmlldy0+cHJpdi0+aW1GaWx0ZXIuY29udGV4dCgp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX1ZJRVdfTU9ERToKICAgICAgICAgZ192
YWx1ZV9zZXRfZW51bSh2YWx1ZSwgd2Via2l0X3dlYl92aWV3X2dldF92aWV3X21vZGUod2ViVmll
dykpOwpAQCAtNzEwLDQyICs3MDgsMTUgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmll
d19kcmF3KEd0a1dpZGdldCogd2lkZ2V0LCBjYWlyb190KiBjcikKIAogc3RhdGljIGdib29sZWFu
IHdlYmtpdF93ZWJfdmlld19rZXlfcHJlc3NfZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2
ZW50S2V5KiBldmVudCkKIHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdpZGdldCk7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHdlYlZpZXcpLT5mb2N1
c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50IGtleWJvYXJkRXZlbnQoZXZlbnQpOwotCi0gICAgaWYgKCFmcmFtZS0+dmlldygpKQot
ICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBpZiAoZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5r
ZXlFdmVudChrZXlib2FyZEV2ZW50KSkKKyAgICBpZiAoV0VCS0lUX1dFQl9WSUVXKHdpZGdldCkt
PnByaXYtPmltRmlsdGVyLmZpbHRlcktleUV2ZW50KGV2ZW50KSkKICAgICAgICAgcmV0dXJuIFRS
VUU7Ci0KLSAgICAvKiBDaGFpbiB1cCB0byBvdXIgcGFyZW50IGNsYXNzIGZvciBiaW5kaW5nIGFj
dGl2YXRpb24gKi8KICAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdf
cGFyZW50X2NsYXNzKS0+a2V5X3ByZXNzX2V2ZW50KHdpZGdldCwgZXZlbnQpOwogfQogCiBzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2tleV9yZWxlYXNlX2V2ZW50KEd0a1dpZGdldCog
d2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQpCiB7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpOwotCi0gICAgLy8gR1RLKyBJTSBjb250ZXh0cyBv
ZnRlbiByZXF1aXJlIHVzIHRvIGZpbHRlciBrZXkgcmVsZWFzZSBldmVudHMsIHdoaWNoCi0gICAg
Ly8gV2ViQ29yZSBkb2VzIG5vdCBkbyBieSBkZWZhdWx0LCBzbyB3ZSBmaWx0ZXIgdGhlIGV2ZW50
IGhlcmUuIFdlIG9ubHkgYmxvY2sKLSAgICAvLyB0aGUgZXZlbnQgaWYgd2UgZG9uJ3QgaGF2ZSBh
IHBlbmRpbmcgY29tcG9zaXRpb24sIGJlY2F1c2UgdGhhdCBtZWFucyB3ZQotICAgIC8vIGFyZSB1
c2luZyBhIGNvbnRleHQgbGlrZSAnc2ltcGxlJyB3aGljaCBtYXJrcyBldmVyeSBrZXlzdHJva2Ug
YXMgZmlsdGVyZWQuCi0gICAgV2ViS2l0OjpFZGl0b3JDbGllbnQqIGNsaWVudCA9IHN0YXRpY19j
YXN0PFdlYktpdDo6RWRpdG9yQ2xpZW50Kj4oY29yZSh3ZWJWaWV3KS0+ZWRpdG9yQ2xpZW50KCkp
OwotICAgIGlmIChndGtfaW1fY29udGV4dF9maWx0ZXJfa2V5cHJlc3Mod2ViVmlldy0+cHJpdi0+
aW1Db250ZXh0LmdldCgpLCBldmVudCkgJiYgIWNsaWVudC0+aGFzUGVuZGluZ0NvbXBvc2l0aW9u
KCkpCisgICAgaWYgKFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2LT5pbUZpbHRlci5maWx0
ZXJLZXlFdmVudChldmVudCkpCiAgICAgICAgIHJldHVybiBUUlVFOwotCi0gICAgRnJhbWUqIGZy
YW1lID0gY29yZSh3ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpOwotICAgIGlmICghZnJhbWUtPnZpZXcoKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0g
ICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtleWJvYXJkRXZlbnQoZXZlbnQpOwotICAgIGlmIChm
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGtleWJvYXJkRXZlbnQpKQotICAgICAgICBy
ZXR1cm4gVFJVRTsKLQotICAgIC8qIENoYWluIHVwIHRvIG91ciBwYXJlbnQgY2xhc3MgZm9yIGJp
bmRpbmcgYWN0aXZhdGlvbiAqLwogICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93
ZWJfdmlld19wYXJlbnRfY2xhc3MpLT5rZXlfcmVsZWFzZV9ldmVudCh3aWRnZXQsIGV2ZW50KTsK
IH0KIApAQCAtNzczLDkgKzc0NCw4IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdf
YnV0dG9uX3ByZXNzX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1CiAgICAgaWYg
KCFmcmFtZS0+dmlldygpKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAKKyAgICBwcml2LT5pbUZp
bHRlci5ub3RpZnlNb3VzZUJ1dHRvblByZXNzKCk7CiAgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQocGxhdGZvcm1FdmVudCk7
Ci0gICAgLy8gSGFuZGxlIHRoZSBJTSBjb250ZXh0IHdoZW4gYSBtb3VzZSBwcmVzcyBmaXJlcwot
ICAgIHN0YXRpY19jYXN0PFdlYktpdDo6RWRpdG9yQ2xpZW50Kj4oY29yZSh3ZWJWaWV3KS0+ZWRp
dG9yQ2xpZW50KCkpLT5oYW5kbGVJbnB1dE1ldGhvZE1vdXNlUHJlc3MoKTsKIAogI2lmIFBMQVRG
T1JNKFgxMSkKICAgICAvKiBDb3B5IHNlbGVjdGlvbiB0byB0aGUgWDExIHNlbGVjdGlvbiBjbGlw
Ym9hcmQgKi8KQEAgLTk2NCwyMCArOTM0LDIwIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2Vi
X3ZpZXdfZm9jdXNfaW5fZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50Rm9jdXMqCiAg
ICAgLy8gVE9ETzogSW1wcm92ZSBmb2N1cyBoYW5kbGluZyBhcyBzdWdnZXN0ZWQgaW4KICAgICAv
LyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkxMAogICAgIEd0a1dp
ZGdldCogdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbCh3aWRnZXQpOwotICAgIGlm
ICh3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3codG9wbGV2ZWwpICYmIGd0a193aW5kb3df
aGFzX3RvcGxldmVsX2ZvY3VzKEdUS19XSU5ET1codG9wbGV2ZWwpKSkgewotICAgICAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7Ci0gICAgICAgIEZv
Y3VzQ29udHJvbGxlciogZm9jdXNDb250cm9sbGVyID0gY29yZSh3ZWJWaWV3KS0+Zm9jdXNDb250
cm9sbGVyKCk7CisgICAgaWYgKCF3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3codG9wbGV2
ZWwpIHx8ICFndGtfd2luZG93X2hhc190b3BsZXZlbF9mb2N1cyhHVEtfV0lORE9XKHRvcGxldmVs
KSkpCisgICAgICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19wYXJl
bnRfY2xhc3MpLT5mb2N1c19pbl9ldmVudCh3aWRnZXQsIGV2ZW50KTsKIAotICAgICAgICBmb2N1
c0NvbnRyb2xsZXItPnNldEFjdGl2ZSh0cnVlKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7CisgICAgRm9jdXNDb250cm9sbGVyKiBmb2N1c0Nv
bnRyb2xsZXIgPSBjb3JlKHdlYlZpZXcpLT5mb2N1c0NvbnRyb2xsZXIoKTsKIAotICAgICAgICBp
ZiAoZm9jdXNDb250cm9sbGVyLT5mb2N1c2VkRnJhbWUoKSkKLSAgICAgICAgICAgIGZvY3VzQ29u
dHJvbGxlci0+c2V0Rm9jdXNlZCh0cnVlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9j
dXNDb250cm9sbGVyLT5zZXRGb2N1c2VkRnJhbWUoY29yZSh3ZWJWaWV3KS0+bWFpbkZyYW1lKCkp
OworICAgIGZvY3VzQ29udHJvbGxlci0+c2V0QWN0aXZlKHRydWUpOworICAgIGlmIChmb2N1c0Nv
bnRyb2xsZXItPmZvY3VzZWRGcmFtZSgpKQorICAgICAgICBmb2N1c0NvbnRyb2xsZXItPnNldEZv
Y3VzZWQodHJ1ZSk7CisgICAgZWxzZQorICAgICAgICBmb2N1c0NvbnRyb2xsZXItPnNldEZvY3Vz
ZWRGcmFtZShjb3JlKHdlYlZpZXcpLT5tYWluRnJhbWUoKSk7CiAKLSAgICAgICAgaWYgKGZvY3Vz
Q29udHJvbGxlci0+Zm9jdXNlZEZyYW1lKCktPmVkaXRvcigpLT5jYW5FZGl0KCkpCi0gICAgICAg
ICAgICBndGtfaW1fY29udGV4dF9mb2N1c19pbih3ZWJWaWV3LT5wcml2LT5pbUNvbnRleHQuZ2V0
KCkpOwotICAgIH0KKyAgICBpZiAoZm9jdXNDb250cm9sbGVyLT5mb2N1c2VkRnJhbWUoKS0+ZWRp
dG9yKCktPmNhbkVkaXQoKSkKKyAgICAgICAgd2ViVmlldy0+cHJpdi0+aW1GaWx0ZXIubm90aWZ5
Rm9jdXNlZEluKCk7CiAgICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3dlYl92aWV3
X3BhcmVudF9jbGFzcyktPmZvY3VzX2luX2V2ZW50KHdpZGdldCwgZXZlbnQpOwogfQogCkBAIC05
ODcsMjIgKzk1NywxNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2ZvY3VzX291
dF9ldmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRGb2N1cwogCiAgICAgLy8gV2UgbWF5
IGhpdCB0aGlzIGNvZGUgd2hpbGUgZGVzdHJveWluZyB0aGUgd2lkZ2V0LCBhbmQgd2UgbWlnaHQK
ICAgICAvLyBubyBsb25nZXIgaGF2ZSBhIHBhZ2UsIHRoZW4uCi0gICAgUGFnZSogcGFnZSA9IGNv
cmUod2ViVmlldyk7Ci0gICAgaWYgKHBhZ2UpIHsKKyAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmUo
d2ViVmlldykpIHsKICAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEFjdGl2ZShm
YWxzZSk7CiAgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkKGZhbHNl
KTsKICAgICB9CiAKLSAgICBpZiAod2ViVmlldy0+cHJpdi0+aW1Db250ZXh0KQotICAgICAgICBn
dGtfaW1fY29udGV4dF9mb2N1c19vdXQod2ViVmlldy0+cHJpdi0+aW1Db250ZXh0LmdldCgpKTsK
LQorICAgIHdlYlZpZXctPnByaXYtPmltRmlsdGVyLm5vdGlmeUZvY3VzZWRPdXQoKTsKICAgICBy
ZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+Zm9j
dXNfb3V0X2V2ZW50KHdpZGdldCwgZXZlbnQpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfcmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKIHsKLSAgICBXZWJLaXRXZWJWaWV3UHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2OwotCiAgICAgZ3RrX3dp
ZGdldF9zZXRfcmVhbGl6ZWQod2lkZ2V0LCBUUlVFKTsKIAogICAgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbjsKQEAgLTEwNTgsOCArMTAyMyw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmll
d19yZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0KQogI2Vsc2UKICAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfYmFja2dyb3VuZChndGtfd2lkZ2V0X2dldF9zdHlsZV9jb250ZXh0KHdpZGdldCksIHdp
bmRvdyk7CiAjZW5kaWYKLQotICAgIGd0a19pbV9jb250ZXh0X3NldF9jbGllbnRfd2luZG93KHBy
aXYtPmltQ29udGV4dC5nZXQoKSwgd2luZG93KTsKIH0KIAogI2lmZGVmIEdUS19BUElfVkVSU0lP
Tl8yCkBAIC0xNjQxLDEyICsxNjA0LDYgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmll
d19zaG93X2hlbHAoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1dpZGdldEhlbHBUeXBlIGgKIH0KICNl
bmRpZgogCi1zdGF0aWMgR3RrSU1Db250ZXh0KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ltX2NvbnRl
eHQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIDApOwotICAgIHJldHVybiBHVEtfSU1fQ09OVEVY
VCh3ZWJWaWV3LT5wcml2LT5pbUNvbnRleHQuZ2V0KCkpOwotfQotCiBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykK
IHsKICAgICBHdGtCaW5kaW5nU2V0KiBiaW5kaW5nX3NldDsKQEAgLTM1NjQsNyArMzUyMSw3IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19pbml0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
CiAgICAgLy8gbWVtYmVycywgd2hpY2ggZW5zdXJlcyB0aGV5IGFyZSBpbml0aWFsaXplZCBwcm9w
ZXJseS4KICAgICBuZXcgKHByaXYpIFdlYktpdFdlYlZpZXdQcml2YXRlKCk7CiAKLSAgICBwcml2
LT5pbUNvbnRleHQgPSBhZG9wdEdSZWYoZ3RrX2ltX211bHRpY29udGV4dF9uZXcoKSk7CisgICAg
cHJpdi0+aW1GaWx0ZXIuc2V0V2ViVmlldyh3ZWJWaWV3KTsKIAogICAgIFBhZ2U6OlBhZ2VDbGll
bnRzIHBhZ2VDbGllbnRzOwogICAgIHBhZ2VDbGllbnRzLmNocm9tZUNsaWVudCA9IG5ldyBXZWJL
aXQ6OkNocm9tZUNsaWVudCh3ZWJWaWV3KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgKaW5kZXggMWZlMjFjZGFjM2YwN2MyM2Y2NGFhYWIxMmFk
MWNjY2Y0MGNiODgwYy4uMGJjNWE1NmZhYjAzMGViNGFlN2JlOThjY2VjZDhhZjIwMjFhZDFiOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRl
LmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgK
QEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJHdGtEcmFnQW5kRHJvcEhlbHBlci5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIldl
YlZpZXdJbnB1dE1ldGhvZEZpbHRlci5oIgogI2luY2x1ZGUgIldpZGdldEJhY2tpbmdTdG9yZS5o
IgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJ2aWV3Lmg+CiAjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR093blB0ci5oPgpAQCAtNTksNyArNjAsNyBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2
YXRlIHsKICAgICBnaW50IGxhc3RQb3B1cFlQb3NpdGlvbjsKIAogICAgIEhhc2hTZXQ8R3RrV2lk
Z2V0Kj4gY2hpbGRyZW47Ci0gICAgR1JlZlB0cjxHdGtJTUNvbnRleHQ+IGltQ29udGV4dDsKKyAg
ICBXZWJLaXQ6OldlYlZpZXdJbnB1dE1ldGhvZEZpbHRlciBpbUZpbHRlcjsKIAogICAgIGdib29s
ZWFuIHRyYW5zcGFyZW50OwogICAgIGJvb2wgbmVlZHNSZXNpemVPbk1hcDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139043</attachid>
            <date>2012-04-26 12:28:10 -0700</date>
            <delta_ts>2012-05-04 11:57:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84556-20120426122809.patch</filename>
            <type>text/plain</type>
            <size>62194</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MjM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjM2NGM0OGRkOGFlMjZj
M2E2NjljYjI2ODExMzkxOWJlMjI3NWZiOC4uM2RhMmFkZjkzYjNjZTVhYTc3OTg0MjNjZjEwZGE3
ZDIxYmVmNjQ0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTA0LTI1ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBSZXdv
cmsgSU1FIGhhbmRsaW5nIHRvIGZpeCBidWdzIGFuZCBwcmVwYXJlIGZvciBXZWJLaXQyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDU1NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
VGhpcyBjaGFuZ2UgaXMgYWxyZWFkeSBjb3ZlcmVkIGJ5IGEgc3VpdGUgb2Yga2V5Ym9hcmQKKyAg
ICAgICAgaGFuZGxpbmcgdW5pdCB0ZXN0cyBpbiBXZWJLaXRHVEsrLiBUaGVyZSBhcmUgc29tZSBj
aGFuZ2VzIGluIGJlaGF2aW9yLAorICAgICAgICBidXQgdGhleSBhcmUgZGlmZmljdWx0IHRvIHRl
c3Qgd2l0aG91dCBtb2NraW5nIG91dCBhbiBlbnRpcmUgR3RrSU1Db250ZXh0LgorCisgICAgICAg
IEFkZCBhIHN0cnVjdCwgQ29tcG9zaXRpb25SZXN1bHRzLCB3aGljaCBpcyB1c2VkIGJ5IFBsYXRm
b3JtS2V5Ym9hcmRFdmVudAorICAgICAgICB0byBwYWNrYWdlIGNvbXBvc2l0aW9uIGluZm9ybWF0
aW9uIHdpdGggYSBrZXlib2FyZCBldmVudC4gQWxzbyBhZGQgc29tZSBsb2dpYworICAgICAgICB0
byBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgdG8gZ2l2ZSB0aGUgcmlnaHQgaW5mb3JtYXRpb24gd2hl
biBpdCBoYXMgY29tcG9zaXRpb24KKyAgICAgICAgcmVzdWx0cy4KKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmxpc3QuYW06IEFkZGVkIG5ldyBzb3VyY2VzIHRvIHRoZSBsaXN0LgorICAgICAgICAq
IHBsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oOiAgQWRkZWQgYSBuZXcgQ29tcG9zaXRp
b25SZXN1bHRzIG1lbWJlciwKKyAgICAgICAgZ2V0dGVyLCBhbmQgYXJndW1lbnQgdG8gdGhlIGNv
bnN0cnVjdG9yLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Db21wb3NpdGlvblJlc3VsdHMuaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmNwcDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3aW5kb3dzS2V5Q29k
ZUZvckdka0tleUNvZGUpOiBXaGVuCisgICAgICAgIHRoZSBrZXkgdmFsdWUgaXMgdm9pZCByZXR1
cm4gdGhlIFZLX1BST0NFU1Mga2V5Y29kZSwgd2hpY2ggaXMgdGhlIGtleWNvZGUKKyAgICAgICAg
dGhhdCB3ZWIgY29udGVudCBleHBlY3RzIHdpdGgga2V5c3Ryb2tlcyB0aGF0IHRyaWdnZXIgY29t
cG9zaXRpb24gZXZlbnRzLgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnRUeXBlRm9yR2RrS2V5RXZl
bnQpOiBBYnN0cmFjdCBvdXQgdGhpcyBoZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjptb2RpZmll
cnNGb3JHZGtLZXlFdmVudCk6IEFic3RyYWN0IG91dCB0aGlzIGhlbHBlci4KKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KTogV2hl
biBhIFBsYXRmb3JtS2V5RXZlbnQKKyAgICAgICAgaGFzIGNvbXBvc2l0aW9uIHJlc3VsdHMsIHVz
ZSBWS19QUk9DRVNTIGFzIHRoZSBrZXljb2RlIGZvciB0aGlzIGV2ZW50LgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQpOiBX
aGVuIHRoaXMgZXZlbnQgaXMKKyAgICAgICAgdHJhbnNmb3JtZWQgaW50byBhIENoYXIgZXZlbnQs
IHRoZSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgdXNlZCBmb3IgRE9NIGtleXByZXNzCisgICAgICAg
IGV2ZW50cywgYW5kIGl0IGhhcyBjb21wb3NpdGlvbiByZXN1bHRzIGNsZWFyIHRoZSB0ZXh0IG1l
bWJlcnMuIFRoaXMgZm9yY2VzIHRoZQorICAgICAgICBFdmVudEhhbmRsZXIgY29kZSB0byBkcm9w
IHRoZSBrZXlwcmVzcyBldmVudC4gUGxhdGZvcm0gZXZlbnRzIHRoYXQgY2hhbmdlIHRoZQorICAg
ICAgICBjb21wb3NpdGlvbiBzdGF0ZXMgZG8gbm90IGhhdmUgY29ycmVzcG9uZGluZyBrZXlwcmVz
cyBET00gZXZlbnRzIChvbmx5IGtleWRvd24KKyAgICAgICAgYW5kIGtleXVwIGV2ZW50cyksIHNv
IHRoaXMgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB3ZWIgY29tcGF0aWJpbGl0eS4KKwogMjAxMi0w
NC0yNSAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENyYXNo
IGluIENhY2hlZFJhd1Jlc291cmNlOjpkaWRBZGRDbGllbnQoKSBkdWUgdG8gbWlzc2luZyBwcm90
ZWN0b3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggNWViNTk4ZjZlNmNmMWJkYmZlZTIwYzkwY2Q0YWE1
YmYzMzkxMTFkOS4uZjc1OTFmMmIxMmU4YWExMDAzNDc3MTRjMGMwNWVkMWMwZDEyODhmZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTA0LTI1ICBNYXJ0aW4gUm9iaW5z
b24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBSZXdvcmsgSU1FIGhh
bmRsaW5nIHRvIGZpeCBidWdzIGFuZCBwcmVwYXJlIGZvciBXZWJLaXQyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDU1NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJld29yayBpbnB1dCBtZXRob2QgaGFu
ZGxpbmcgbG9naWMgaW50byBhIGNsYXNzIGNhbGxlZCBHdGtJbnB1dE1ldGhvZEZpbHRlci4KKyAg
ICAgICAgVGhpcyBmaWx0ZXIgbm93IHJ1bnMgYmVmb3JlIFdlYkNvcmUgZXZlbnQgaGFuZGxpbmcs
IGFsbG93aW5nIHRoZSBjb2RlIHRvIG1vcmUKKyAgICAgICAgZWFzaWx5IGZha2Ugc2ltcGxlIGNv
bXBvc2l0aW9ucyB0aGF0IHNob3VsZCBiZSBzZWVuIGFzIGtleXN0cm9rZXMuIFdlIGNhbiBhbHNv
CisgICAgICAgIGZpbHRlciBrZXlwcmVzc2VzIHRoYXQgc2hvdWxkIG5vdCBnbyB0byB3ZWIgY29u
dGVudCBhdCBhbGwsIHN1Y2ggYXMga2V5IHVwIGV2ZW50cworICAgICAgICByZWxhdGVkIHRvIGtl
eSBkb3duIGV2ZW50cyB0aGF0IHdlcmUgZmlsdGVyZWQuCisKKyAgICAgICAgQWxzbyBhZGRlZCBp
cyBhIFdlYlZpZXdJbnB1dE1ldGhvZEZpbHRlciB3aGljaCBpcyBhIGNvbmNyZXRlIGltcGxlbWVu
dGF0aW9uIG9mCisgICAgICAgIEd0a0lucHV0TWV0aG9kRmlsdGVyLiBUaGlzIGNsYXNzIGNvbnRh
aW5zIGxvZ2ljIGZvciBhY3R1YWxseSBzZW5kaW5nIGV2ZW50cyB0bworICAgICAgICBXZWJDb3Jl
LiBJbiBXZWJLaXQyIGFuIGltcGxlbWVudGF0aW9uIG9mIEd0a0lucHV0TWV0aG9kRmlsdGVyIHdp
bGwgc2VuZCBldmVudHMKKyAgICAgICAgYWNyb3NzIHRoZSBJUEMgY2hhbm5lbC4KKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzIHRvIHRoZSBzb3VyY2UgbGlzdC4KKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHA6CisgICAgICAg
IChXZWJLaXQ6OmlucHV0TWV0aG9kc01lbnVJdGVtKTogQWNjZXNzIHRoZSBpbnB1dCBtZXRob2Qg
Y29udGV4dCB2aWEgdGhlIGZpbHRlci4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JD
bGllbnRHdGsuY3BwOiBSZW1vdmUgdGhlIHRyaWNreSBsb2dpYyBvZiBpbnB1dCBtZXRob2QKKyAg
ICAgICAgZXZlbnRzIGZyb20gdGhpcyBjbGFzcywgYmVjYXVzZSBpdCdzIG5vdyBpbiB0aGUgR3Rr
SW5wdXRNZXRob2RGaWx0ZXIuCisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2V0SW5w
dXRNZXRob2RTdGF0ZSk6IENhbGwgaW50byB0aGUgZmlsdGVyLgorICAgICAgICAoV2ViS2l0OjpF
ZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyk6IFdlIG5vIGxvbmdlciBuZWVkIHRvIHVw
ZGF0ZSB0aGUgY29tcG9zaXRpb24gaGVyZS4KKyAgICAgICAgVGhpcyBpcyBoYW5kbGVkIGJ5IHRo
ZSBmb2N1cyBpbiBhbmQgZm9jdXMgb3V0IGxvZ2ljIGluIHRoZSBmaWx0ZXIuCisgICAgICAgIChX
ZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOiBDYWxsIGlu
dG8gdGhlIGZpbHRlciBub3cuCisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6aGFuZGxl
SW5wdXRNZXRob2RLZXlib2FyZEV2ZW50KTogQWRkZWQgdGhpcyBoZWxwZXIgd2hpY2ggZXhlY3V0
ZXMKKyAgICAgICAgYW55IHBlbmRpbmcgY29tcG9zaXRpb24gY29uZmlybWF0aW9uIG9yIHByZWVk
aXQgdXBkYXRlIGFjdGlvbnMgYXMgdGhlIGRlZmF1bHQgYWN0aW9uIG9mCisgICAgICAgIHRoZSBr
ZXlkb3duIGV2ZW50LgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmhhbmRsZUtleWJv
YXJkRXZlbnQpOiBDYWxsIGhhbmRsZUlucHV0TWV0aG9kS2V5Ym9hcmRFdmVudCB0byBkbworICAg
ICAgICBhbnkgcGVuZGluZyBjb21wb3NpdGlvbiBhY3Rpb24uCisgICAgICAgIChXZWJLaXQ6OkVk
aXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKTogUmVtb3ZlIGFsbCB0aGUgbG9n
aWMgZnJvbSB0aGlzIG1ldGhvZC4KKyAgICAgICAgS2V5cyBhcmUgZmlsdGVyZWQgYmVmb3JlIHRo
ZXkgYXJlIHNlbnQgdG8gV2ViQ29yZSBub3cgYW5kIHRoZSBhY3R1YWwgYWN0aW9uIG9mIGlucHV0
IG1ldGhvZAorICAgICAgICBldmVudHMgaGFwcGVucyBpbiB0aGUga2V5ZG93biBkZWZhdWx0IGFj
dGlvbiB0byBpbmNyZWFzZSBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgYnJvd3NlcnMuCisgICAg
ICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6RWRpdG9yQ2xpZW50KTogUmVtb3ZlIGNvbnRleHQg
c2lnbmFsIG1hbmFnZW1lbnQuCisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6fkVkaXRv
ckNsaWVudCk6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0
ay5oOgorICAgICAgICAoRWRpdG9yQ2xpZW50KTogTm8gbG9uZ2VyIGhhcyBzb21lIG1lbWJlcnMg
dGhhdCB0cmFja2VkIElNRSBzdGF0dXMuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViVmll
d0lucHV0TWV0aG9kRmlsdGVyLmNwcDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfcHJvcGVydHkpOiBH
ZXQgdGhlIGNvbnRleHQgZnJvbSB0aGUgZmlsdGVyIG5vdy4KKyAgICAgICAgKHdlYmtpdF93ZWJf
dmlld19rZXlfcHJlc3NfZXZlbnQpOiBKdXN0IHNlbmQgZXZlbnRzIHN0cmFpZ2h0IHRvIHRoZSBm
aWx0ZXIuCisgICAgICAgIFRoZSBmaWx0ZXIgd2lsbCBkZWNpZGUgd2hldGhlciBvciBub3QgdG8g
c2VuZCB0aGVtIHRvIFdlYkNvcmUuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfa2V5X3JlbGVh
c2VfZXZlbnQpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19idXR0b25fcHJlc3Nf
ZXZlbnQpOiBVc2UgdGhlIGZpbHRlciB0byBoYW5kbGUgYnV0dG9uIHByZXNzCisgICAgICAgIGV2
ZW50cyByZWxhdGVkIHRvIElNRS4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19mb2N1c19pbl9l
dmVudCk6IE5vdGlmeSB0aGUgZmlsdGVyIG5vdy4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19m
b2N1c19vdXRfZXZlbnQpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19yZWFsaXpl
KTogVGhlIGZpbHRlciB0YWtlcyBjYXJlIG9mIGxpc3RlbmluZyBmb3IgcmVhbGl6ZSBub3cuCisg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfaW5pdCk6IFNldCB0aGUgV2ViVmlldyB3aWRnZXQgb24g
dGhlIGZpbHRlci4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaDogQ2hh
bmdlIHRoZSBHdGtJTUNvbnRleHQgbWVtYmVyIHRvIGJlIGEgR3RrSW5wdXRNZXRob2RGaWx0ZXIg
bWVtYmVyLgorCiAyMDEyLTA0LTIyICBBZHJpYW4gQnVuayAgPGJ1bmtAc3R1c3RhLmRlPgogCiAg
ICAgICAgIFtHVEtdIFJlbW92ZSB0aGUgb2Jzb2xldGUgSGlsZG9uIFVJIGV4dGVuc2lvbnMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDBmZWEzNjcwODI2YTVlMDYyYzQxNDBiNTQ3
YjcyNTlhMDkwY2M4MzMuLjg0Mzc2Yzc4NWU1ZWNlYmE0M2FjMGM3MzhiNzllY2Q1MDJlZWFlOTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDY5Miw2ICs0NjkyLDggQEAgd2Vi
Y29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQ2xp
Y2tDb3VudGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJv
cEhlbHBlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJv
cEhlbHBlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RG
aWx0ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RG
aWx0ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuaCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKaW5kZXggMWMxZGU2NTU3M2QyNjFm
YTJhNzJmMDQ5Zjk1ZTNjYjU3YWQ3YTFkMC4uNDI1NzdmOWU2YWU1NjkyOWUzYTYyMDgxZjRjNGM2
NDc2ZjQ1ZDUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1L
ZXlib2FyZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXli
b2FyZEV2ZW50LmgKQEAgLTQzLDYgKzQzLDcgQEAgdHlwZWRlZiBsb25nIExQQVJBTTsKIAogI2lm
IFBMQVRGT1JNKEdUSykKIHR5cGVkZWYgc3RydWN0IF9HZGtFdmVudEtleSBHZGtFdmVudEtleTsK
KyNpbmNsdWRlICJDb21wb3NpdGlvblJlc3VsdHMuaCIKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
UVQpCkBAIC0xNTEsOCArMTUyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShHVEspCi0gICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudChHZGtFdmVudEtl
eSopOwotICAgICAgICBHZGtFdmVudEtleSogZ2RrRXZlbnRLZXkoKSBjb25zdDsKKyAgICAgICAg
UGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5KiwgY29uc3QgQ29tcG9zaXRpb25SZXN1
bHRzJik7CisgICAgICAgIEdka0V2ZW50S2V5KiBnZGtFdmVudEtleSgpIGNvbnN0IHsgcmV0dXJu
IG1fZ2RrRXZlbnRLZXk7IH0KKyAgICAgICAgY29uc3QgQ29tcG9zaXRpb25SZXN1bHRzJiBjb21w
b3NpdGlvblJlc3VsdHMoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0aW9uUmVzdWx0czsgfQog
CiAgICAgICAgIC8vIFVzZWQgYnkgV2ViS2l0MgogICAgICAgICBzdGF0aWMgU3RyaW5nIGtleUlk
ZW50aWZpZXJGb3JHZGtLZXlDb2RlKHVuc2lnbmVkKTsKQEAgLTIwMCw2ICsyMDIsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKICNpZiBQTEFURk9STShHVEspCiAgICAgICAgIEdka0V2
ZW50S2V5KiBtX2dka0V2ZW50S2V5OworICAgICAgICBDb21wb3NpdGlvblJlc3VsdHMgbV9jb21w
b3NpdGlvblJlc3VsdHM7CiAjZW5kaWYKICNpZiBQTEFURk9STShRVCkKICAgICAgICAgUUtleUV2
ZW50KiBtX3F0RXZlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
Q29tcG9zaXRpb25SZXN1bHRzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9z
aXRpb25SZXN1bHRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODdmNWJmN2M5Zjk1MzZmYTc3NTZjNjgwM2ZlZTE4
MWYwYmIxZWQ1OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9Db21wb3NpdGlvblJlc3VsdHMuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ29tcG9zaXRpb25SZXN1bHRz
X2gKKyNkZWZpbmUgQ29tcG9zaXRpb25SZXN1bHRzX2gKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBDb21wb3NpdGlvblJl
c3VsdHMgeworICAgIENvbXBvc2l0aW9uUmVzdWx0cygpCisgICAgICAgIDogcHJlZWRpdEN1cnNv
ck9mZnNldCgwKQorICAgIHsKKyAgICB9CisKKyAgICBDb21wb3NpdGlvblJlc3VsdHMoU3RyaW5n
IHNpbXBsZVN0cmluZykKKyAgICAgICAgOiBzaW1wbGVTdHJpbmcoc2ltcGxlU3RyaW5nKQorICAg
ICAgICAsIHByZWVkaXRDdXJzb3JPZmZzZXQoMCkKKyAgICB7CisgICAgfQorCisgICAgQ29tcG9z
aXRpb25SZXN1bHRzKFN0cmluZyBjb25maXJtZWRDb21wb3NpdGlvbiwgU3RyaW5nIHByZWVkaXQs
IGludCBwcmVlZGl0Q3Vyc29yT2Zmc2V0KQorICAgICAgICA6IGNvbmZpcm1lZENvbXBvc2l0aW9u
KGNvbmZpcm1lZENvbXBvc2l0aW9uKQorICAgICAgICAsIHByZWVkaXQocHJlZWRpdCkKKyAgICAg
ICAgLCBwcmVlZGl0Q3Vyc29yT2Zmc2V0KHByZWVkaXRDdXJzb3JPZmZzZXQpCisgICAgeworICAg
IH0KKworICAgIGJvb2wgY29tcG9zaXRpb25VcGRhdGVkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAhY29uZmlybWVkQ29tcG9zaXRpb24uaXNOdWxsKCkgfHwgIXByZWVkaXQuaXNOdWxs
KCk7CisgICAgfQorCisgICAgLy8gU29tZSBzaW1wbGUgaW5wdXQgbWV0aG9kcyByZXR1cm4gYSBz
dHJpbmcgZm9yIGFsbCBrZXlib2FyZCBldmVudHMuIFRoaXMKKyAgICAvLyB2YWx1ZSBzaG91bGQg
YmUgdHJlYXRlZCBhcyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBrZXljb2RlLgor
ICAgIFN0cmluZyBzaW1wbGVTdHJpbmc7CisKKyAgICAvLyBJZiB0aGUgaW5wdXQgbWV0aG9kIGhh
ZCBhICJyZWFsIiBjb21wb3NpdGlvbiBpdCB3aWxsIGJlIHN0b3JlZCBoZXJlLgorICAgIFN0cmlu
ZyBjb25maXJtZWRDb21wb3NpdGlvbjsKKworICAgIC8vIFRoZSBldmVudCBtYXkgaGF2ZSBjYXVz
ZWQgdGhlIHByZWVkaXQgdG8gdXBkYXRlLgorICAgIFN0cmluZyBwcmVlZGl0OworICAgIGludCBw
cmVlZGl0Q3Vyc29yT2Zmc2V0OworfTsKKworfQorCisjZW5kaWYgLy8gQ29tcG9zaXRpb25SZXN1
bHRzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1l
dGhvZEZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRo
b2RGaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjOTgxNTRlOTBmM2UwZjNhMWFlYjc3MDFlNWZiOTIx
MmZiYmVhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwCkBAIC0wLDAgKzEsMzI4IEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkd0a0lucHV0TWV0aG9kRmlsdGVyLmgi
CisKKyNpbmNsdWRlICJHT3duUHRyR3RrLmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgor
I2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKKy8vIFRoZSBXaW5kb3dzIGNvbXBvc2l0aW9uIGtleSBl
dmVudCBjb2RlIGlzIDI5OSBvciBWS19QUk9DRVNTS0VZLiBXZSBuZWVkIHRvCisvLyBlbWl0IHRo
aXMgY29kZSBmb3Igd2ViIGNvbXBhdGliaWxpdHkgcmVhc29ucyB3aGVuIGtleSBldmVudHMgdHJp
Z2dlcgorLy8gY29tcG9zaXRpb24gcmVzdWx0cy4gR0RLIGRvZXNuJ3QgaGF2ZSBhbiBlcXVpdmFs
ZW50LCBzbyB3ZSBzZW5kIFZvaWRTeW1ib2wKKy8vIGhlcmUgdG8gV2ViQ29yZS4gUGxhdGZvcm1L
ZXlFdmVudCBrbm93cyB0byBjb252ZXJ0IHRoaXMgY29kZSBpbnRvCisvLyBWS19QUk9DRVNTS0VZ
LgorY29uc3QgaW50IGdDb21wb3NpdGlvbkV2ZW50S2V5Q29kZSA9IEdES19LRVlfVm9pZFN5bWJv
bDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBoYW5kbGVDb21taXRDYWxs
YmFjayhHdGtJTUNvbnRleHQqLCBjb25zdCBjaGFyKiBjb21wb3NpdGlvblN0cmluZywgR3RrSW5w
dXRNZXRob2RGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBmaWx0ZXItPmhhbmRsZUNvbW1pdChjb21w
b3NpdGlvblN0cmluZyk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZVByZWVkaXRTdGFydENhbGxi
YWNrKEd0a0lNQ29udGV4dCosIEd0a0lucHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCit7CisgICAg
ZmlsdGVyLT5oYW5kbGVQcmVlZGl0U3RhcnQoKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlUHJl
ZWRpdENoYW5nZWRDYWxsYmFjayhHdGtJTUNvbnRleHQqLCBHdGtJbnB1dE1ldGhvZEZpbHRlciog
ZmlsdGVyKQoreworICAgIGZpbHRlci0+aGFuZGxlUHJlZWRpdENoYW5nZWQoKTsKK30KKworc3Rh
dGljIHZvaWQgaGFuZGxlUHJlZWRpdEVuZENhbGxiYWNrKEd0a0lNQ29udGV4dCosIEd0a0lucHV0
TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgZmlsdGVyLT5oYW5kbGVQcmVlZGl0RW5kKCk7
Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZVdpZGdldFJlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQs
IEd0a0lucHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgR2RrV2luZG93KiB3aW5kb3cg
PSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KTsKKyAgICBBU1NFUlQod2luZG93KTsKKyAg
ICBndGtfaW1fY29udGV4dF9zZXRfY2xpZW50X3dpbmRvdyhmaWx0ZXItPmNvbnRleHQoKSwgd2lu
ZG93KTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6c2V0V2lkZ2V0KEd0a1dpZGdl
dCogd2lkZ2V0KQoreworICAgIEFTU0VSVCghbV93aWRnZXQpOworICAgIG1fd2lkZ2V0ID0gd2lk
Z2V0OworICAgIGdfc2lnbmFsX2Nvbm5lY3RfYWZ0ZXIod2lkZ2V0LCAicmVhbGl6ZSIsIEdfQ0FM
TEJBQ0soaGFuZGxlV2lkZ2V0UmVhbGl6ZSksIHRoaXMpOworfQorCitHdGtJbnB1dE1ldGhvZEZp
bHRlcjo6R3RrSW5wdXRNZXRob2RGaWx0ZXIoKQorICAgIDogbV9jdXJzb3JPZmZzZXQoMCkKKyAg
ICAsIG1fY29udGV4dChhZG9wdEdSZWYoZ3RrX2ltX211bHRpY29udGV4dF9uZXcoKSkpCisgICAg
LCBtX3dpZGdldCgwKQorICAgICwgbV9lbmFibGVkKGZhbHNlKQorICAgICwgbV9jb21wb3NpbmdU
ZXh0Q3VycmVudGx5KGZhbHNlKQorICAgICwgbV9maWx0ZXJpbmdLZXlFdmVudChmYWxzZSkKKyAg
ICAsIG1fcHJlZWRpdENoYW5nZWQoZmFsc2UpCisgICAgLCBtX3ByZXZlbnROZXh0Q29tbWl0KGZh
bHNlKQorICAgICwgbV9qdXN0U2VudEZha2VLZXlVcChmYWxzZSkKKyAgICAsIG1fbGFzdEZpbHRl
cmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyhHREtfS0VZX1ZvaWRTeW1ib2wpCit7CisgICAg
Z19zaWduYWxfY29ubmVjdChtX2NvbnRleHQuZ2V0KCksICJjb21taXQiLCBHX0NBTExCQUNLKGhh
bmRsZUNvbW1pdENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2NvbnRl
eHQuZ2V0KCksICJwcmVlZGl0LXN0YXJ0IiwgR19DQUxMQkFDSyhoYW5kbGVQcmVlZGl0U3RhcnRD
YWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAi
cHJlZWRpdC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhoYW5kbGVQcmVlZGl0Q2hhbmdlZENhbGxiYWNr
KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2NvbnRleHQuZ2V0KCksICJwcmVlZGl0
LWVuZCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdEVuZENhbGxiYWNrKSwgdGhpcyk7Cit9CisK
K0d0a0lucHV0TWV0aG9kRmlsdGVyOjp+R3RrSW5wdXRNZXRob2RGaWx0ZXIoKQoreworICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRleHQuZ2V0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZUNvbW1pdENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19z
aWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY29udGV4dC5nZXQoKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlUHJlZWRpdFN0YXJ0Q2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9jb250ZXh0LmdldCgpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGVQcmVlZGl0Q2hhbmdlZENhbGxiYWNrKSwgdGhp
cyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY29udGV4dC5n
ZXQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlUHJlZWRpdEVuZENhbGxiYWNrKSwg
dGhpcyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fd2lkZ2V0
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGVXaWRnZXRSZWFsaXplKSwgdGhpcyk7Cit9
CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQor
eworICAgIG1fZW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgaWYgKGVuYWJsZWQpCisgICAgICAgIGd0
a19pbV9jb250ZXh0X2ZvY3VzX2luKG1fY29udGV4dC5nZXQoKSk7CisgICAgZWxzZQorICAgICAg
ICBndGtfaW1fY29udGV4dF9mb2N1c19vdXQobV9jb250ZXh0LmdldCgpKTsKK30KKworYm9vbCBH
dGtJbnB1dE1ldGhvZEZpbHRlcjo6ZmlsdGVyS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQor
eworICAgIGlmICghY2FuRWRpdCgpKQorICAgICAgICByZXR1cm4gc2VuZFNpbXBsZUtleUV2ZW50
KGV2ZW50KTsKKworICAgIG1fcHJlZWRpdENoYW5nZWQgPSBmYWxzZTsKKyAgICBtX2ZpbHRlcmlu
Z0tleUV2ZW50ID0gdHJ1ZTsKKworICAgIHVuc2lnbmVkIGludCBsYXN0RmlsdGVyZWRLZXlQcmVz
c0NvZGVXaXRoTm9SZXN1bHRzID0gbV9sYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1
bHRzOworICAgIG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9IEdES19L
RVlfVm9pZFN5bWJvbDsKKworICAgIGJvb2wgZmlsdGVyZWQgPSBndGtfaW1fY29udGV4dF9maWx0
ZXJfa2V5cHJlc3MobV9jb250ZXh0LmdldCgpLCBldmVudCk7CisgICAgbV9maWx0ZXJpbmdLZXlF
dmVudCA9IGZhbHNlOworCisgICAgYm9vbCBqdXN0U2VudEZha2VLZXlVcCA9IG1fanVzdFNlbnRG
YWtlS2V5VXA7CisgICAgbV9qdXN0U2VudEZha2VLZXlVcCA9IGZhbHNlOworICAgIGlmIChqdXN0
U2VudEZha2VLZXlVcCAmJiBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKGZpbHRlcmVkKSB7CisgICAgICAgIC8vIFNpbXBsZSBp
bnB1dCBtZXRob2RzIHdvcmsgc3VjaCB0aGF0IGV2ZW4gbm9ybWFsIGtleXN0cm9rZXMgZmlyZSB0
aGUKKyAgICAgICAgLy8gY29tbWl0IHNpZ25hbC4gV2UgZGV0ZWN0IHRob3NlIHNpdHVhdGlvbnMg
YW5kIHRyZWF0IHRoZW0gYXMgbm9ybWFsCisgICAgICAgIC8vIGtleSBldmVudHMsIHN1cHBseWlu
ZyB0aGUgY29tbWl0IHN0cmluZyBhcyB0aGUga2V5IGNoYXJhY3Rlci4KKyAgICAgICAgaWYgKCFt
X2NvbXBvc2luZ1RleHRDdXJyZW50bHkgJiYgIW1fcHJlZWRpdENoYW5nZWQgJiYgbV9jb25maXJt
ZWRDb21wb3NpdGlvbi5sZW5ndGgoKSA9PSAxKSB7CisgICAgICAgICAgICBib29sIHJlc3VsdCA9
IHNlbmRTaW1wbGVLZXlFdmVudChldmVudCwgbV9jb25maXJtZWRDb21wb3NpdGlvbik7CisgICAg
ICAgICAgICBpZiAoIW1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgbV9jb25maXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChldmVudC0+
dHlwZSA9PSBHREtfS0VZX1BSRVNTKSB7CisgICAgICAgICAgICBpZiAoIW1fcHJlZWRpdENoYW5n
ZWQgJiYgbV9jb25maXJtZWRDb21wb3NpdGlvbi5pc051bGwoKSkgeworICAgICAgICAgICAgICAg
IG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9sYXN0
RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzID0gZXZlbnQtPmtleXZhbDsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCByZXN1bHQgPSBzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKGV2ZW50KTsKKyAg
ICAgICAgICAgIGlmICghbV9jb25maXJtZWRDb21wb3NpdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgICAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSWYg
d2UgcHJldmlvdXNseSBmaWx0ZXJlZCBhIGtleSBwcmVzcyBldmVudCBhbmQgaXQgeWllbGRlZCBu
byByZXN1bHRzLiBTdXBwcmVzcworICAgIC8vIHRoZSBjb3JyZXNwb25kaW5nIGtleSByZWxlYXNl
IGV2ZW50IHRvIGF2b2lkIGNvbmZ1c2luZyB0aGUgd2ViIGNvbnRlbnQuCisgICAgaWYgKGV2ZW50
LT50eXBlID09IEdES19LRVlfUkVMRUFTRSAmJiBsYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRo
Tm9SZXN1bHRzID09IGV2ZW50LT5rZXl2YWwpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Ly8gSWYgdGhpcyBrZXlzdHJva2Ugd2FzIG5vdCBmaWx0ZXJlZCwgYnV0IHJlc3VsdGVkIGluIGFu
IHVwZGF0ZWQgY29tcG9zaXRpb24KKyAgICAvLyBvciBwcmVlZGl0LCB3ZSBzZW5kIHRob3NlIGJl
Zm9yZSB0aGUga2V5IGV2ZW50LiBUaGUgZm9sbG93aW5nIGV2ZW50IHNlcXVlbmNlCisgICAgLy8g
Y29waWVkIGZyb20gdGhlIENocm9taXVtIHNvdXJjZSBjb2RlIGlsbHVzdHJhdGVzIHRoZSByZWFz
b25pbmc6CisKKyAgICAvLyBXaGVuIHVzaW5nIGxhdGluLXBvc3QgaW5wdXQgbWV0aG9kLCBwcmVz
c2luZyAnYScgdGhlbiBCYWNrc3BhY2UsIG1heQorICAgIC8vIGdlbmVyYXRlIGZvbGxvd2luZyBl
dmVudHMgaW4gc2VxdWVuY2U6CisgICAgLy8gIDEuIGtleWRvd24gJ2EnIChmaWx0ZXJlZCkKKyAg
ICAvLyAgMi4gcHJlZWRpdCBjaGFuZ2VkIHRvICJhIgorICAgIC8vICAzLiBrZXl1cCAnYScgKHVu
ZmlsdGVyZWQpCisgICAgLy8gIDQuIGtleWRvd24gQmFja3NwYWNlICh1bmZpbHRlcmVkKQorICAg
IC8vICA1LiBjb21taXQgImEiCisgICAgLy8gIDYuIHByZWVkaXQgZW5kCisKKyAgICAvLyBXZSBh
bHNvIHRyZWF0IGtleSByZWxlYXNlIGV2ZW50cyB0aGUgc2FtZSB3YXksIGFzIHRoZSBJTUUgY29k
ZSBpbgorICAgIC8vIEVkaXRvckNsaWVudCBkb2Vzbid0IGdldCB0byBsb29rIGF0IHRoZW0sIGFz
IGZvciBrZXkgcHJlc3MgZXZlbnRzLgorICAgIGlmICghbV9jb25maXJtZWRDb21wb3NpdGlvbi5p
c0VtcHR5KCkpCisgICAgICAgIGNvbmZpcm1Db21wb3NpdGlvbigpOworICAgIGlmIChtX3ByZWVk
aXRDaGFuZ2VkKQorICAgICAgICB1cGRhdGVQcmVlZGl0KCk7CisgICAgcmV0dXJuIHNlbmRTaW1w
bGVLZXlFdmVudChldmVudCk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlm
eU1vdXNlQnV0dG9uUHJlc3MoKQoreworICAgIC8vIENvbmZpcm1pbmcgdGhlIGNvbXBvc2l0aW9u
IG1heSB0cmlnZ2VyIGEgc2VsZWN0aW9uIGNoYW5nZSwgd2hpY2gKKyAgICAvLyBtaWdodCB0cmln
Z2VyIGZ1cnRoZXIgdW53YW50ZWQgYWN0aW9ucyBvbiB0aGUgY29udGV4dCwgc28gd2UgcHJldmVu
dAorICAgIC8vIHRoYXQgYnkgc2V0dGluZyBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgdG8gZmFs
c2UuCisgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7CisgICAgY29uZmlybUN1
cnJlbnRDb21wb3NpdGlvbigpOworICAgIGNhbmNlbENvbnRleHRDb21wb3NpdGlvbigpOworfQor
Cit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpyZXNldENvbnRleHQoKQoreworCisgICAgLy8g
V2UgYWx3YXlzIGNhbmNlbCB0aGUgY3VycmVudCBXZWJDb3JlIGNvbXBvc2l0aW9uIGhlcmUsIGlu
IGNhc2UgdGhlCisgICAgLy8gY29tcG9zaXRpb24gd2FzIHNldCBvdXRzaWRlIHRoZSBHVEsrIElN
RSBwYXRoICh2aWEgYSBzY3JpcHQsIGZvcgorICAgIC8vIGluc3RhbmNlKSBhbmQgd2UgYXJlbid0
IHRyYWNraW5nIGl0LgorICAgIGNhbmNlbEN1cnJlbnRDb21wb3NpdGlvbigpOworCisgICAgaWYg
KCFtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbXBv
c2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKyAgICBjYW5jZWxDb250ZXh0Q29tcG9zaXRpb24o
KTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6Y2FuY2VsQ29udGV4dENvbXBvc2l0
aW9uKCkKK3sKKyAgICBtX3ByZXZlbnROZXh0Q29tbWl0ID0gIW1fcHJlZWRpdC5pc0VtcHR5KCk7
CisKKyAgICBndGtfaW1fY29udGV4dF9yZXNldChtX2NvbnRleHQuZ2V0KCkpOworCisgICAgbV9j
b21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7CisgICAgbV9qdXN0U2VudEZha2VLZXlVcCA9
IGZhbHNlOworICAgIG1fcHJlZWRpdCA9IFN0cmluZygpOworICAgIG1fY29uZmlybWVkQ29tcG9z
aXRpb24gPSBTdHJpbmcoKTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6bm90aWZ5
Rm9jdXNlZEluKCkKK3sKKyAgICBtX2VuYWJsZWQgPSB0cnVlOworICAgIGd0a19pbV9jb250ZXh0
X2ZvY3VzX2luKG1fY29udGV4dC5nZXQoKSk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0
ZXI6Om5vdGlmeUZvY3VzZWRPdXQoKQoreworICAgIGlmICghbV9lbmFibGVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKyAgICBjb25m
aXJtQ3VycmVudENvbXBvc2l0aW9uKCk7CisgICAgY2FuY2VsQ29udGV4dENvbXBvc2l0aW9uKCk7
CisgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KG1fY29udGV4dC5nZXQoKSk7CisgICAgbV9l
bmFibGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmNvbmZpcm1D
b21wb3NpdGlvbigpCit7CisgICAgY29uZmlybUNvbXBvc2l0aW9uVGV4dChtX2NvbmZpcm1lZENv
bXBvc2l0aW9uKTsKKyAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7Cit9CisK
K3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnVwZGF0ZVByZWVkaXQoKQoreworICAgIHNldFBy
ZWVkaXQobV9wcmVlZGl0LCBtX2N1cnNvck9mZnNldCk7CisgICAgbV9wcmVlZGl0Q2hhbmdlZCA9
IGZhbHNlOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpzZW5kQ29tcG9zaXRpb25B
bmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMoUmVzdWx0c1RvU2VuZCByZXN1bHRzVG9TZW5kKQor
eworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX0tFWV9QUkVT
UykpOworICAgIGV2ZW50LT5rZXkudGltZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAgZXZlbnQt
PmtleS5rZXl2YWwgPSBnQ29tcG9zaXRpb25FdmVudEtleUNvZGU7CisgICAgc2VuZEtleUV2ZW50
V2l0aENvbXBvc2l0aW9uUmVzdWx0cygmZXZlbnQtPmtleSwgcmVzdWx0c1RvU2VuZCk7CisKKyAg
ICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7CisgICAgbV9jb21wb3NpbmdUZXh0
Q3VycmVudGx5ID0gZmFsc2U7CisKKyAgICBldmVudC0+dHlwZSA9IEdES19LRVlfUkVMRUFTRTsK
KyAgICBzZW5kU2ltcGxlS2V5RXZlbnQoJmV2ZW50LT5rZXkpOworICAgIG1fanVzdFNlbnRGYWtl
S2V5VXAgPSB0cnVlOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVDb21t
aXQoY29uc3QgY2hhciogY29tcG9zaXRpb25TdHJpbmcpCit7CisgICAgaWYgKG1fcHJldmVudE5l
eHRDb21taXQpIHsKKyAgICAgICAgbV9wcmV2ZW50TmV4dENvbW1pdCA9IGZhbHNlOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gKz0gU3RyaW5nOjpmcm9tVVRGOChjb21wb3Np
dGlvblN0cmluZyk7CisKKyAgICAvLyBJZiB0aGUgY29tbWl0IHdhcyB0cmlnZ2VyZWQgb3V0c2lk
ZSBvZiBhIGtleSBldmVudCwganVzdCBzZW5kCisgICAgLy8gdGhlIElNRSBldmVudCBub3cuIElm
IHdlIGFyZSBoYW5kbGluZyBhIGtleSBldmVudCwgd2UnbGwgZGVjaWRlCisgICAgLy8gbGF0ZXIg
aG93IHRvIGhhbmRsZSB0aGlzLgorICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKKyAgICAg
ICAgc2VuZENvbXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKENvbXBvc2l0aW9u
KTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdFN0YXJ0KCkK
K3sKKyAgICBpZiAobV9wcmV2ZW50TmV4dENvbW1pdCB8fCAhbV9lbmFibGVkKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9wcmVlZGl0Q2hhbmdlZCA9IHRydWU7CisgICAgbV9wcmVlZGl0ID0gIiI7
Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRDaGFuZ2VkKCkK
K3sKKyAgICBpZiAoIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR093blB0cjxn
Y2hhcj4gbmV3UHJlZWRpdDsKKyAgICBndGtfaW1fY29udGV4dF9nZXRfcHJlZWRpdF9zdHJpbmco
bV9jb250ZXh0LmdldCgpLCAmbmV3UHJlZWRpdC5vdXRQdHIoKSwgMCwgJm1fY3Vyc29yT2Zmc2V0
KTsKKworICAgIGlmIChtX3ByZXZlbnROZXh0Q29tbWl0KSB7CisgICAgICAgIGlmIChzdHJsZW4o
bmV3UHJlZWRpdC5nZXQoKSkgPiAwKQorICAgICAgICAgICAgbV9wcmV2ZW50TmV4dENvbW1pdCA9
IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9wcmVlZGl0ID0gU3RyaW5nOjpmcm9tVVRGOChuZXdQcmVlZGl0LmdldCgpKTsKKyAgICBtX2N1
cnNvck9mZnNldCA9IHN0ZDo6bWluKHN0ZDo6bWF4KG1fY3Vyc29yT2Zmc2V0LCAwKSwgc3RhdGlj
X2Nhc3Q8aW50PihtX3ByZWVkaXQubGVuZ3RoKCkpKTsKKworICAgIG1fY29tcG9zaW5nVGV4dEN1
cnJlbnRseSA9ICFtX3ByZWVkaXQuaXNFbXB0eSgpOworICAgIG1fcHJlZWRpdENoYW5nZWQgPSB0
cnVlOworCisgICAgaWYgKCFtX2ZpbHRlcmluZ0tleUV2ZW50KQorICAgICAgICBzZW5kQ29tcG9z
aXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMoUHJlZWRpdCk7Cit9CisKK3ZvaWQgR3Rr
SW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRFbmQoKQoreworICAgIGlmIChtX3ByZXZl
bnROZXh0Q29tbWl0IHx8ICFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJl
ZWRpdCA9IFN0cmluZygpOworICAgIG1fY3Vyc29yT2Zmc2V0ID0gMDsKKyAgICBtX3ByZWVkaXRD
aGFuZ2VkID0gdHJ1ZTsKKworICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKKyAgICAgICAg
dXBkYXRlUHJlZWRpdCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiMDZjMzUzMWU0MDBiMjU4
ZTYzZDlmYTVjYmQ5NGQ2MzdiOTFmZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaApAQCAtMCwwICsxLDg3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJHUmVmUHRyR3Rr
LmgiCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCit0eXBlZGVmIHN0cnVjdCBfR3RrSU1Db250ZXh0IEd0a0lNQ29udGV4dDsKK3R5cGVkZWYg
c3RydWN0IF9HdGtXaWRnZXQgR3RrV2lkZ2V0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEd0a0lucHV0TWV0aG9kRmlsdGVyIHsKK3B1YmxpYzoKKyAgICBHdGtJbnB1dE1ldGhvZEZp
bHRlcigpOworICAgIH5HdGtJbnB1dE1ldGhvZEZpbHRlcigpOworCisgICAgYm9vbCBmaWx0ZXJL
ZXlFdmVudChHZGtFdmVudEtleSopOworICAgIHZvaWQgbm90aWZ5TW91c2VCdXR0b25QcmVzcygp
OworICAgIHZvaWQgbm90aWZ5Rm9jdXNlZEluKCk7CisgICAgdm9pZCBub3RpZnlGb2N1c2VkT3V0
KCk7CisgICAgdm9pZCByZXNldENvbnRleHQoKTsKKyAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCk7
CisKKyAgICB2b2lkIGhhbmRsZUNvbW1pdChjb25zdCBjaGFyKiBjb21wb3NpdGlvblN0cmluZyk7
CisgICAgdm9pZCBoYW5kbGVQcmVlZGl0Q2hhbmdlZCgpOworICAgIHZvaWQgaGFuZGxlUHJlZWRp
dFN0YXJ0KCk7CisgICAgdm9pZCBoYW5kbGVQcmVlZGl0RW5kKCk7CisKKyAgICB2b2lkIGNvbmZp
cm1Db21wb3NpdGlvbigpOworICAgIHZvaWQgY2FuY2VsQ29udGV4dENvbXBvc2l0aW9uKCk7Cisg
ICAgdm9pZCB1cGRhdGVQcmVlZGl0KCk7CisKKyAgICBHdGtJTUNvbnRleHQqIGNvbnRleHQoKSB7
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIGVudW0gUmVzdWx0
c1RvU2VuZCB7CisgICAgICAgIFByZWVkaXQgPSAxIDw8IDEsCisgICAgICAgIENvbXBvc2l0aW9u
ID0gMSA8PCAyLAorICAgICAgICBQcmVlZGl0QW5kQ29tcG9zaXRpb24gPSBQcmVlZGl0ICsgQ29t
cG9zaXRpb24KKyAgICB9OworCisgICAgdm9pZCBzZXRXaWRnZXQoR3RrV2lkZ2V0Kik7CisgICAg
dmlydHVhbCBib29sIGNhbkVkaXQoKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNlbmRTaW1wbGVL
ZXlFdmVudChHZGtFdmVudEtleSosIFdURjo6U3RyaW5nIGV2ZW50U3RyaW5nID0gU3RyaW5nKCkp
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0
cyhHZGtFdmVudEtleSosIFJlc3VsdHNUb1NlbmQgPSBQcmVlZGl0QW5kQ29tcG9zaXRpb24pID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uVGV4dChTdHJpbmcgY29tcG9z
aXRpb24pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUN1cnJlbnRDb21wb3NpdGlvbigp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsQ3VycmVudENvbXBvc2l0aW9uKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVlZGl0KFN0cmluZywgaW50IGN1cnNvck9mZnNldCkgPSAw
OworCisgICAgV1RGOjpTdHJpbmcgbV9jb25maXJtZWRDb21wb3NpdGlvbjsKKyAgICBXVEY6OlN0
cmluZyBtX3ByZWVkaXQ7CisgICAgaW50IG1fY3Vyc29yT2Zmc2V0OworCitwcml2YXRlOgorICAg
IHZvaWQgc2VuZENvbXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKFJlc3VsdHNU
b1NlbmQpOworCisgICAgR1JlZlB0cjxHdGtJTUNvbnRleHQ+IG1fY29udGV4dDsKKyAgICBHdGtX
aWRnZXQqIG1fd2lkZ2V0OworICAgIGJvb2wgbV9lbmFibGVkOworICAgIGJvb2wgbV9jb21wb3Np
bmdUZXh0Q3VycmVudGx5OworICAgIGJvb2wgbV9maWx0ZXJpbmdLZXlFdmVudDsKKyAgICBib29s
IG1fcHJlZWRpdENoYW5nZWQ7CisgICAgYm9vbCBtX3ByZXZlbnROZXh0Q29tbWl0OworICAgIGJv
b2wgbV9qdXN0U2VudEZha2VLZXlVcDsKKyAgICB1bnNpZ25lZCBpbnQgbV9sYXN0RmlsdGVyZWRL
ZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJv
YXJkRXZlbnRHdGsuY3BwCmluZGV4IDNhMjQwOWRjZjA2OTZmNjg4ZTAyMTU0M2JiMWM3ODM2M2Yy
NWZjN2YuLjgxYmU5MzA2Y2EzZjBkZWU0YjY2NjA5NWZkZGExODgxODM2NWUzZjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZl
bnRHdGsuY3BwCkBAIC01MTAsNyArNTEwLDggQEAgaW50IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6
d2luZG93c0tleUNvZGVGb3JHZGtLZXlDb2RlKHVuc2lnbmVkIGtleWNvZGUpCiAgICAgICAgIGNh
c2UgR0RLX0YyMzoKICAgICAgICAgY2FzZSBHREtfRjI0OgogICAgICAgICAgICAgcmV0dXJuIFZL
X0YxICsgKGtleWNvZGUgLSBHREtfRjEpOwotCisgICAgICAgIGNhc2UgR0RLX0tFWV9Wb2lkU3lt
Ym9sOgorICAgICAgICAgICAgcmV0dXJuIFZLX1BST0NFU1NLRVk7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC01NDUsMTIgKzU0NiwzMCBAQCBTdHJp
bmcgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodW5zaWduZWQg
dmFsKQogICAgIH0KIH0KIAorc3RhdGljIFBsYXRmb3JtRXZlbnQ6OlR5cGUgZXZlbnRUeXBlRm9y
R2RrS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQoreworICAgIHJldHVybiBldmVudC0+dHlw
ZSA9PSBHREtfS0VZX1JFTEVBU0UgPyBQbGF0Zm9ybUV2ZW50OjpLZXlVcCA6IFBsYXRmb3JtRXZl
bnQ6OktleURvd247Cit9CisKK3N0YXRpYyBQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcnMgbW9kaWZp
ZXJzRm9yR2RrS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQoreworICAgIHVuc2lnbmVkIGlu
dCBtb2RpZmllcnMgPSAwOworICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSyB8
fCBldmVudC0+a2V5dmFsID09IEdES18zMjcwX0JhY2tUYWIpCisgICAgICAgIG1vZGlmaWVycyB8
PSBQbGF0Zm9ybUV2ZW50OjpTaGlmdEtleTsKKyAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX0NP
TlRST0xfTUFTSykKKyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OkN0cmxLZXk7
CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0spCisgICAgICAgIG1vZGlmaWVy
cyB8PSBQbGF0Zm9ybUV2ZW50OjpBbHRLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19N
RVRBX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpNZXRhS2V5Owor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcnM+KG1vZGlmaWVy
cyk7Cit9CisKIC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggdGhlIG90aGVyIHBsYXRmb3JtIGV2
ZW50IGNvbnN0cnVjdG9ycwotLy8gVE9ETzogbV9nZGtFdmVudEtleSBzaG91bGQgYmUgcmVmY291
bnRlZAotUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZl
bnRLZXkqIGV2ZW50KQotICAgIDogUGxhdGZvcm1FdmVudCgoZXZlbnQtPnR5cGUgPT0gR0RLX0tF
WV9SRUxFQVNFKSA/IFBsYXRmb3JtRXZlbnQ6OktleVVwIDogUGxhdGZvcm1FdmVudDo6S2V5RG93
biwgKGV2ZW50LT5zdGF0ZSAmIEdES19TSElGVF9NQVNLKSB8fCAoZXZlbnQtPmtleXZhbCA9PSBH
REtfMzI3MF9CYWNrVGFiKSwgZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSywgZXZlbnQt
PnN0YXRlICYgR0RLX01PRDFfTUFTSywgZXZlbnQtPnN0YXRlICYgR0RLX01FVEFfTUFTSywgY3Vy
cmVudFRpbWUoKSkKLSAgICAsIG1fdGV4dChzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXZlbnQtPmtl
eXZhbCkpCi0gICAgLCBtX3VubW9kaWZpZWRUZXh0KHNpbmdsZUNoYXJhY3RlclN0cmluZyhldmVu
dC0+a2V5dmFsKSkKK1BsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50
KEdka0V2ZW50S2V5KiBldmVudCwgY29uc3QgQ29tcG9zaXRpb25SZXN1bHRzJiBjb21wb3NpdGlv
blJlc3VsdHMpCisgICAgOiBQbGF0Zm9ybUV2ZW50KGV2ZW50VHlwZUZvckdka0tleUV2ZW50KGV2
ZW50KSwgbW9kaWZpZXJzRm9yR2RrS2V5RXZlbnQoZXZlbnQpLCBjdXJyZW50VGltZSgpKQorICAg
ICwgbV90ZXh0KGNvbXBvc2l0aW9uUmVzdWx0cy5zaW1wbGVTdHJpbmcubGVuZ3RoKCkgPyBjb21w
b3NpdGlvblJlc3VsdHMuc2ltcGxlU3RyaW5nIDogc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV2ZW50
LT5rZXl2YWwpKQorICAgICwgbV91bm1vZGlmaWVkVGV4dChtX3RleHQpCiAgICAgLCBtX2tleUlk
ZW50aWZpZXIoa2V5SWRlbnRpZmllckZvckdka0tleUNvZGUoZXZlbnQtPmtleXZhbCkpCiAgICAg
LCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSh3aW5kb3dzS2V5Q29kZUZvckdka0tleUNvZGUoZXZl
bnQtPmtleXZhbCkpCiAgICAgLCBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlKGV2ZW50LT5rZXl2YWwp
CkBAIC01NTksNyArNTc4LDExIEBAIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXli
b2FyZEV2ZW50KEdka0V2ZW50S2V5KiBldmVudCkKICAgICAsIG1faXNLZXlwYWQoZXZlbnQtPmtl
eXZhbCA+PSBHREtfS1BfU3BhY2UgJiYgZXZlbnQtPmtleXZhbCA8PSBHREtfS1BfOSkKICAgICAs
IG1faXNTeXN0ZW1LZXkoZmFsc2UpCiAgICAgLCBtX2dka0V2ZW50S2V5KGV2ZW50KQorICAgICwg
bV9jb21wb3NpdGlvblJlc3VsdHMoY29tcG9zaXRpb25SZXN1bHRzKQogeworICAgIC8vIFRvIG1h
dGNoIHRoZSBiZWhhdmlvciBvZiBJRSwgd2UgcmV0dXJuIFZLX1BST0NFU1NLRVkgZm9yIGtleXMg
dGhhdCB0cmlnZ2VyZWQgY29tcG9zaXRpb24gcmVzdWx0cy4KKyAgICBpZiAoY29tcG9zaXRpb25S
ZXN1bHRzLmNvbXBvc2l0aW9uVXBkYXRlZCgpKQorICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5
Q29kZSA9IFZLX1BST0NFU1NLRVk7CiB9CiAKIHZvaWQgUGxhdGZvcm1LZXlib2FyZEV2ZW50Ojpk
aXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBlLCBib29sIGJhY2t3YXJkQ29tcGF0aWJp
bGl0eU1vZGUpCkBAIC01NzQsNiArNTk3LDEyIEBAIHZvaWQgUGxhdGZvcm1LZXlib2FyZEV2ZW50
OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBlLCBib29sIGJhY2t3YXJkQ29tCiAg
ICAgaWYgKHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6UmF3S2V5RG93bikgewogICAgICAgICBtX3Rl
eHQgPSBTdHJpbmcoKTsKICAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9IFN0cmluZygpOworICAg
IH0gZWxzZSBpZiAodHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpDaGFyICYmIG1fY29tcG9zaXRpb25S
ZXN1bHRzLmNvbXBvc2l0aW9uVXBkYXRlZCgpKSB7CisgICAgICAgIC8vIEhhdmluZyBlbXB0eSB0
ZXh0LCBwcmV2ZW50cyB0aGlzIENoYXIgKHdoaWNoIGlzIGEgRE9NIGtleXByZXNzKSBldmVudAor
ICAgICAgICAvLyBmcm9tIGdvaW5nIHRvIHRoZSBET00uIEtleXMgdGhhdCB0cmlnZ2VyIGNvbXBv
c2l0aW9uIGV2ZW50cyBzaG91bGQgbm90CisgICAgICAgIC8vIGZpcmUga2V5cHJlc3MuCisgICAg
ICAgIG1fdGV4dCA9IFN0cmluZygpOworICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gU3RyaW5n
KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9rZXlJZGVudGlmaWVyID0gU3RyaW5nKCk7CiAg
ICAgICAgIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID0gMDsKQEAgLTU5Niw5ICs2MjUsNCBAQCB2
b2lkIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Z2V0Q3VycmVudE1vZGlmaWVyU3RhdGUoYm9vbCYg
c2hpZnRLZXksIGJvb2wmIGN0cmxLZQogICAgIG1ldGFLZXkgPSBzdGF0ZSAmIEdES19NRVRBX01B
U0s7CiB9CiAKLUdka0V2ZW50S2V5KiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6Omdka0V2ZW50S2V5
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9nZGtFdmVudEtleTsKLX0KLQogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0L2d0ay9H
TlVtYWtlZmlsZS5hbQppbmRleCA1YWMxYTdiMTQxZDk1YzhlODVhM2NjNzQ3Y2MyMTc3NDE5MTdm
ZjhjLi4yZDVhZDBhN2E1NzMyNWZlYWM1M2NiNzQxNDRkMTgzZWM3NjcwNzcxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0L2d0
ay9HTlVtYWtlZmlsZS5hbQpAQCAtMjEyLDYgKzIxMiw4IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNH
dGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Vc2VyTWVkaWFDbGll
bnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Vc2VyTWVkaWFD
bGllbnRHdGsuaCBcCisJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvV2ViVmlld0lu
cHV0TWV0aG9kRmlsdGVyLmNwcCBcCisJU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
V2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRhcHBsaWNhdGlvbmNhY2hlLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGRvd25sb2FkLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25s
b2FkcHJpdmF0ZS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcAppbmRleCA3ZGZkOWVlNjE4MGJlOGRjMDNl
ZjBhYmI0ZTU1OGFiNWM0NWQ1ODYxLi5lMGMzZWQ5ZDEyNThmMzBmZGU5NTA4ZDhmMTc2ZGYyNjdl
Y2M2NDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250
ZXh0TWVudUNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBHdGtX
aWRnZXQqIGlucHV0TWV0aG9kc01lbnVJdGVtIChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogCiAg
ICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OwogICAgIENvbnRl
eHRNZW51IGltQ29udGV4dE1lbnU7Ci0gICAgZ3RrX2ltX211bHRpY29udGV4dF9hcHBlbmRfbWVu
dWl0ZW1zKEdUS19JTV9NVUxUSUNPTlRFWFQocHJpdi0+aW1Db250ZXh0LmdldCgpKSwgR1RLX01F
TlVfU0hFTEwoaW1Db250ZXh0TWVudS5wbGF0Zm9ybURlc2NyaXB0aW9uKCkpKTsKKyAgICBndGtf
aW1fbXVsdGljb250ZXh0X2FwcGVuZF9tZW51aXRlbXMoR1RLX0lNX01VTFRJQ09OVEVYVChwcml2
LT5pbUZpbHRlci5jb250ZXh0KCkpLCBHVEtfTUVOVV9TSEVMTChpbUNvbnRleHRNZW51LnBsYXRm
b3JtRGVzY3JpcHRpb24oKSkpOwogCiAgICAgQ29udGV4dE1lbnVJdGVtIG1lbnVJdGVtKEFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0lucHV0TWV0aG9kcywgY29udGV4dE1lbnVJdGVtVGFn
SW5wdXRNZXRob2RzKCksICZpbUNvbnRleHRNZW51KTsKICAgICBpbUNvbnRleHRNZW51LnJlbGVh
c2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAppbmRleCBhMWUyZWFiNWU5MDA1NGJhYWE3
ZWM5ZjUxNjc3ZWU2NTRmMjEyNjFmLi5jOWZiYTJkZDg1OTNhMTNmMmZjNWQxODk5MGMzOWFmMzI4
NGI0ODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudEd0ay5jcHAKQEAgLTYyLDY4ICs2MiwxMyBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyB2b2lkIGltQ29udGV4dENvbW1p
dHRlZChHdGtJTUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGdjaGFyKiBjb21wb3NpdGlvblN0cmlu
ZywgRWRpdG9yQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShzdGF0
aWNfY2FzdDxXZWJLaXRXZWJWaWV3Kj4oY2xpZW50LT53ZWJWaWV3KCkpKS0+Zm9jdXNDb250cm9s
bGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5l
ZGl0b3IoKS0+Y2FuRWRpdCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGlzIHNp
Z25hbCBmaXJlcyBkdXJpbmcgYSBrZXlkb3duIGV2ZW50IHdoZW4gd2UgYXJlIG5vdCBpbiB0aGUg
bWlkZGxlCi0gICAgLy8gb2YgYSBjb21wb3NpdGlvbiwgdGhlbiB0cmVhdCB0aGlzICdjb21taXQn
IGFzIGEgbm9ybWFsIGtleSBldmVudCBhbmQganVzdAotICAgIC8vIGNoYW5nZSB0aGUgZWRpdGFi
bGUgYXJlYSByaWdodCBiZWZvcmUgdGhlIGtleXByZXNzIGV2ZW50LgotICAgIGlmIChjbGllbnQt
PnRyZWF0Q29udGV4dENvbW1pdEFzS2V5RXZlbnQoKSkgewotICAgICAgICBjbGllbnQtPnVwZGF0
ZVBlbmRpbmdDb21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBJZiB0aGlzIHNpZ25hbCBmaXJlcyBkdXJpbmcgYSBtb3VzZXByZXNz
IGV2ZW50IHdoZW4gd2UgYXJlIGluIHRoZSBtaWRkbGUKLSAgICAvLyBvZiBhIGNvbXBvc2l0aW9u
LCBza2lwIHRoaXMgJ2NvbW1pdCcgYmVjYXVzZSB0aGUgY29tcG9zaXRpb24gaXMgYWxyZWFkeSBj
b25maXJtZWQuIAotICAgIGlmIChjbGllbnQtPnByZXZlbnROZXh0Q29tcG9zaXRpb25Db21taXQo
KSkgCi0gICAgICAgIHJldHVybjsKLSAKLSAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21w
b3NpdGlvbihTdHJpbmc6OmZyb21VVEY4KGNvbXBvc2l0aW9uU3RyaW5nKSk7Ci0gICAgY2xpZW50
LT5jbGVhclBlbmRpbmdDb21wb3NpdGlvbigpOwotfQotCi1zdGF0aWMgdm9pZCBpbUNvbnRleHRQ
cmVlZGl0Q2hhbmdlZChHdGtJTUNvbnRleHQqIGNvbnRleHQsIEVkaXRvckNsaWVudCogY2xpZW50
KQotewotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoc3RhdGljX2Nhc3Q8V2ViS2l0V2ViVmlldyo+
KGNsaWVudC0+d2ViVmlldygpKSktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJh
bWUoKTsKLSAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgaWdub3JlIHRoZSBwcm92aWRlZCBQYW5nb0F0dHJM
aXN0IGZvciBub3cuCi0gICAgR093blB0cjxnY2hhcj4gbmV3UHJlZWRpdCgwKTsKLSAgICBndGtf
aW1fY29udGV4dF9nZXRfcHJlZWRpdF9zdHJpbmcoY29udGV4dCwgJm5ld1ByZWVkaXQub3V0UHRy
KCksIDAsIDApOwotCi0gICAgU3RyaW5nIHByZWVkaXRTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4
KG5ld1ByZWVkaXQuZ2V0KCkpOwotICAgIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5k
ZXJsaW5lczsKLSAgICB1bmRlcmxpbmVzLmFwcGVuZChDb21wb3NpdGlvblVuZGVybGluZSgwLCBw
cmVlZGl0U3RyaW5nLmxlbmd0aCgpLCBDb2xvcigwLCAwLCAwKSwgZmFsc2UpKTsKLSAgICBmcmFt
ZS0+ZWRpdG9yKCktPnNldENvbXBvc2l0aW9uKHByZWVkaXRTdHJpbmcsIHVuZGVybGluZXMsIDAs
IDApOwotfQotCi0KLXZvaWQgRWRpdG9yQ2xpZW50Ojp1cGRhdGVQZW5kaW5nQ29tcG9zaXRpb24o
Y29uc3QgZ2NoYXIqIG5ld0NvbXBvc2l0aW9uKQotewotICAgIC8vIFRoZSBJTUNvbnRleHQgbWF5
IHNpZ25hbCBtb3JlIHRoYW4gb25lIGNvbXBsZXRlZCBjb21wb3NpdGlvbiBpbiBhIHJvdywKLSAg
ICAvLyBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8gYXBwZW5kIHRoZW0sIHJhdGhlciB0aGFuIG92
ZXJ3cml0ZSB0aGUgb2xkIG9uZS4KLSAgICBpZiAoIW1fcGVuZGluZ0NvbXBvc2l0aW9uKQotICAg
ICAgICBtX3BlbmRpbmdDb21wb3NpdGlvbi5zZXQoZ19zdHJkdXAobmV3Q29tcG9zaXRpb24pKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fcGVuZGluZ0NvbXBvc2l0aW9uLnNldChnX3N0cmNvbmNhdCht
X3BlbmRpbmdDb21wb3NpdGlvbi5nZXQoKSwgbmV3Q29tcG9zaXRpb24sIE5VTEwpKTsKLX0KLQog
dm9pZCBFZGl0b3JDbGllbnQ6OndpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkKIHsKIH0KIAogdm9p
ZCBFZGl0b3JDbGllbnQ6OnNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBhY3RpdmUpCiB7Ci0gICAg
V2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSBtX3dlYlZpZXctPnByaXY7Ci0KLSAgICBpZiAo
YWN0aXZlKQotICAgICAgICBndGtfaW1fY29udGV4dF9mb2N1c19pbihwcml2LT5pbUNvbnRleHQu
Z2V0KCkpOwotICAgIGVsc2UKLSAgICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KHByaXYt
PmltQ29udGV4dC5nZXQoKSk7CisgICAgbV93ZWJWaWV3LT5wcml2LT5pbUZpbHRlci5zZXRFbmFi
bGVkKGFjdGl2ZSk7CiB9CiAKIGJvb2wgRWRpdG9yQ2xpZW50OjpzaG91bGRTaG93VW5pY29kZU1l
bnUoKQpAQCAtMTgxLDggKzEyNiw2IEBAIGludCBFZGl0b3JDbGllbnQ6OnNwZWxsQ2hlY2tlckRv
Y3VtZW50VGFnKCkKIAogYm9vbCBFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhXZWJD
b3JlOjpSYW5nZSogcmFuZ2UpCiB7Ci0gICAgY2xlYXJQZW5kaW5nQ29tcG9zaXRpb24oKTsKLQog
ICAgIGdib29sZWFuIGFjY2VwdCA9IFRSVUU7CiAgICAgR1JlZlB0cjxXZWJLaXRET01SYW5nZT4g
a2l0UmFuZ2UoYWRvcHRHUmVmKGtpdChyYW5nZSkpKTsKICAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUobV93ZWJWaWV3LCAic2hvdWxkLWJlZ2luLWVkaXRpbmciLCBraXRSYW5nZS5nZXQoKSwgJmFj
Y2VwdCk7CkBAIC0xOTEsOCArMTM0LDYgQEAgYm9vbCBFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2lu
RWRpdGluZyhXZWJDb3JlOjpSYW5nZSogcmFuZ2UpCiAKIGJvb2wgRWRpdG9yQ2xpZW50OjpzaG91
bGRFbmRFZGl0aW5nKFdlYkNvcmU6OlJhbmdlKiByYW5nZSkKIHsKLSAgICBjbGVhclBlbmRpbmdD
b21wb3NpdGlvbigpOwotCiAgICAgZ2Jvb2xlYW4gYWNjZXB0ID0gVFJVRTsKICAgICBHUmVmUHRy
PFdlYktpdERPTVJhbmdlPiBraXRSYW5nZShhZG9wdEdSZWYoa2l0KHJhbmdlKSkpOwogICAgIGdf
c2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYlZpZXcsICJzaG91bGQtZW5kLWVkaXRpbmciLCBraXRS
YW5nZS5nZXQoKSwgJmFjY2VwdCk7CkBAIC0zMTcsMjUgKzI1OCwxNyBAQCB2b2lkIEVkaXRvckNs
aWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiAgICAgaWYgKCFm
cmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+aWdub3Jl
Q29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCiAjaWYgUExB
VEZPUk0oWDExKQogICAgIHNldFNlbGVjdGlvblByaW1hcnlDbGlwYm9hcmRJZk5lZWRlZChtX3dl
YlZpZXcpOwogI2VuZGlmCiAKLSAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRp
b24oKSkKKyAgICBpZiAobV91cGRhdGluZ0NvbXBvc2l0aW9uIHx8ICFmcmFtZS0+ZWRpdG9yKCkt
Pmhhc0NvbXBvc2l0aW9uKCkgfHwgZnJhbWUtPmVkaXRvcigpLT5pZ25vcmVDb21wb3NpdGlvblNl
bGVjdGlvbkNoYW5nZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBzdGFydDsK
ICAgICB1bnNpZ25lZCBlbmQ7Ci0gICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSBtX3dl
YlZpZXctPnByaXY7Ci0KLSAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS0+Z2V0Q29tcG9zaXRpb25T
ZWxlY3Rpb24oc3RhcnQsIGVuZCkpIHsKLSAgICAgICAgLy8gZ3RrX2ltX2NvbnRleHRfcmVzZXQo
KSBjbGVhcnMgdGhlIGNvbXBvc2l0aW9uIGZvciB1cy4KLSAgICAgICAgZ3RrX2ltX2NvbnRleHRf
cmVzZXQocHJpdi0+aW1Db250ZXh0LmdldCgpKTsKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5j
YW5jZWxDb21wb3NpdGlvbigpOwotICAgIH0KKyAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS0+Z2V0
Q29tcG9zaXRpb25TZWxlY3Rpb24oc3RhcnQsIGVuZCkpCisgICAgICAgIG1fd2ViVmlldy0+cHJp
di0+aW1GaWx0ZXIucmVzZXRDb250ZXh0KCk7CiB9CiAKIHZvaWQgRWRpdG9yQ2xpZW50OjpkaWRF
bmRFZGl0aW5nKCkKQEAgLTQ4MiwxMyArNDE1LDQ3IEBAIGJvb2wgRWRpdG9yQ2xpZW50OjpleGVj
dXRlUGVuZGluZ0VkaXRvckNvbW1hbmRzKEZyYW1lKiBmcmFtZSwgYm9vbCBhbGxvd1RleHRJbnNl
CiAgICAgfQogCiAgICAgbV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMuY2xlYXIoKTsKKyAgICByZXR1
cm4gc3VjY2VzczsKK30KKworYm9vbCBFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5
Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQtPnR5cGUo
KSAhPSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAvLyBJZiB3ZSBzdWNjZXNzZnVsbHkgY29tcGxldGVkIGFsbCBlZGl0b3IgY29tbWFuZHMs
IHRoZW4KLSAgICAvLyB0aGlzIHNpZ25hbHMgYSBjYW5jZWxpbmcgb2YgdGhlIGNvbXBvc2l0aW9u
LgotICAgIGlmIChzdWNjZXNzKQotICAgICAgICBjbGVhclBlbmRpbmdDb21wb3NpdGlvbigpOwor
ICAgIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCogcGxhdGZvcm1FdmVudCA9IGV2ZW50LT5r
ZXlFdmVudCgpOworICAgIGlmICghcGxhdGZvcm1FdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgRnJhbWUqIGZyYW1lID0gY29yZShtX3dlYlZp
ZXcpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKCFm
cmFtZSB8fCAhZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGNvbnN0IENvbXBvc2l0aW9uUmVzdWx0cyYgY29tcG9zaXRpb25SZXN1bHRzID0g
cGxhdGZvcm1FdmVudC0+Y29tcG9zaXRpb25SZXN1bHRzKCk7CisgICAgaWYgKCFjb21wb3NpdGlv
blJlc3VsdHMuY29tcG9zaXRpb25VcGRhdGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG1fdXBkYXRpbmdDb21wb3NpdGlvbiA9IHRydWU7CisKKyAgICAvLyBUaGlzIHdvbid0IHBy
ZXZlbnQgYSBrZXlwcmVzcyBldmVudCBhbG9uZSwgYnV0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBy
ZXR1cm5zCisgICAgLy8gYW4gZW1wdHkgc3RyaW5nIHdoZW4gdGhlcmUgYXJlIGNvbXBvc2l0aW9u
IHJlc3VsdHMuIFRoYXQgcHJldmVudHMgdGhlIGRlbGl2ZXJ5CisgICAgLy8gb2Yga2V5cHJlc3Ms
IHdoaWNoIGlzIHRoZSBiZWhhdmlvciB3ZSB3YW50IGZvciBjb21wb3NpdGlvbiBldmVudHMuIFNl
ZQorICAgIC8vIEV2ZW50SGFuZGxlcjo6a2V5RXZlbnQuCisgICAgZXZlbnQtPnByZXZlbnREZWZh
dWx0KCk7CisgICAgQVNTRVJUKHBsYXRmb3JtRXZlbnQtPnN0cmluZygpLmlzTnVsbCgpKTsKKwor
ICAgIGlmICghY29tcG9zaXRpb25SZXN1bHRzLmNvbmZpcm1lZENvbXBvc2l0aW9uLmlzTnVsbCgp
KQorICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbihjb21wb3NpdGlv
blJlc3VsdHMuY29uZmlybWVkQ29tcG9zaXRpb24pOworCisgICAgU3RyaW5nIHByZWVkaXQgPSBj
b21wb3NpdGlvblJlc3VsdHMucHJlZWRpdDsKKyAgICBpZiAoIXByZWVkaXQuaXNOdWxsKCkpIHsK
KyAgICAgICAgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzOworICAgICAg
ICB1bmRlcmxpbmVzLmFwcGVuZChDb21wb3NpdGlvblVuZGVybGluZSgwLCBwcmVlZGl0Lmxlbmd0
aCgpLCBDb2xvcigxLCAxLCAxKSwgZmFsc2UpKTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5z
ZXRDb21wb3NpdGlvbihwcmVlZGl0LCB1bmRlcmxpbmVzLCBjb21wb3NpdGlvblJlc3VsdHMucHJl
ZWRpdEN1cnNvck9mZnNldCwgY29tcG9zaXRpb25SZXN1bHRzLnByZWVkaXRDdXJzb3JPZmZzZXQp
OworICAgIH0KKworICAgIG1fdXBkYXRpbmdDb21wb3NpdGlvbiA9IGZhbHNlOworICAgIHJldHVy
biB0cnVlOwogfQogCiB2b2lkIEVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXli
b2FyZEV2ZW50KiBldmVudCkKQEAgLTUwMiw2ICs0NjksOSBAQCB2b2lkIEVkaXRvckNsaWVudDo6
aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICBpZiAoIXBsYXRm
b3JtRXZlbnQpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChoYW5kbGVJbnB1dE1ldGhvZEtl
eWJvYXJkRXZlbnQoZXZlbnQpKQorICAgICAgICByZXR1cm47CisKICAgICBLZXlCaW5kaW5nVHJh
bnNsYXRvcjo6RXZlbnRUeXBlIHR5cGUgPSBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5r
ZXlkb3duRXZlbnQgPwogICAgICAgICBLZXlCaW5kaW5nVHJhbnNsYXRvcjo6S2V5RG93biA6IEtl
eUJpbmRpbmdUcmFuc2xhdG9yOjpLZXlQcmVzczsKICAgICBtX2tleUJpbmRpbmdUcmFuc2xhdG9y
LmdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQocGxhdGZvcm1FdmVudC0+Z2RrRXZlbnRLZXko
KSwgdHlwZSwgbV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMpOwpAQCAtNTMxLDEwMyArNTAxLDI2IEBA
IHZvaWQgRWRpdG9yQ2xpZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2
ZW50KQogICAgIC8vIFRoaXMgaXMganVzdCBhIG5vcm1hbCB0ZXh0IGluc2VydGlvbiwgc28gd2Fp
dCB0byBleGVjdXRlIHRoZSBpbnNlcnRpb24KICAgICAvLyB1bnRpbCBhIGtleXByZXNzIGV2ZW50
IGhhcHBlbnMuIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB0aGUgaW5zZXJ0aW9uIHdpbGwgbm90CiAg
ICAgLy8gYmUgcmVmbGVjdGVkIGluIHRoZSBjb250ZW50cyBvZiB0aGUgZmllbGQgdW50aWwgdGhl
IGtleXVwIERPTSBldmVudC4KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
a2V5cHJlc3NFdmVudCkgewotCi0gICAgICAgIC8vIElmIHdlIGhhdmUgYSBwZW5kaW5nIGNvbXBv
c2l0aW9uIGF0IHRoaXMgcG9pbnQsIGl0IGhhcHBlbmVkIHdoaWxlCi0gICAgICAgIC8vIGZpbHRl
cmluZyBhIGtleXByZXNzLCBzbyB3ZSB0cmVhdCBpdCBhcyBhIG5vcm1hbCB0ZXh0IGluc2VydGlv
bi4KLSAgICAgICAgLy8gVGhpcyB3aWxsIGFsc28gZW5zdXJlIHRoYXQgaWYgdGhlIGtleXByZXNz
IGV2ZW50IGhhbmRsZXIgY2hhbmdlZCB0aGUKLSAgICAgICAgLy8gY3VycmVudGx5IGZvY3VzZWQg
bm9kZSwgdGhlIHRleHQgaXMgc3RpbGwgaW5zZXJ0ZWQgaW50byB0aGUgb3JpZ2luYWwKLSAgICAg
ICAgLy8gbm9kZSAoaW5zZXJ0VGV4dCgpIGhhcyB0aGlzIGxvZ2ljLCBidXQgY29uZmlybUNvbXBv
c2l0aW9uKCkgZG9lcyBub3QpLgotICAgICAgICBpZiAobV9wZW5kaW5nQ29tcG9zaXRpb24pIHsK
LSAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dChTdHJpbmc6OmZyb21VVEY4
KG1fcGVuZGluZ0NvbXBvc2l0aW9uLmdldCgpKSwgZXZlbnQpOwotICAgICAgICAgICAgY2xlYXJQ
ZW5kaW5nQ29tcG9zaXRpb24oKTsKLSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOworICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50
KQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIERv
bid0IGluc2VydCBudWxsIG9yIGNvbnRyb2wgY2hhcmFjdGVycyBhcyB0aGV5IGNhbiByZXN1bHQg
aW4gdW5leHBlY3RlZCBiZWhhdmlvdXIKLSAgICAgICAgICAgIGlmIChldmVudC0+Y2hhckNvZGUo
KSA8ICcgJykKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgLy8gRG9uJ3QgaW5zZXJ0IG51
bGwgb3IgY29udHJvbCBjaGFyYWN0ZXJzIGFzIHRoZXkgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVk
IGJlaGF2aW91cgorICAgIGlmIChldmVudC0+Y2hhckNvZGUoKSA8ICcgJykKKyAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgICAgICAvLyBEb24ndCBpbnNlcnQgYW55dGhpbmcgaWYgYSBtb2RpZmll
ciBpcyBwcmVzc2VkCi0gICAgICAgICAgICBpZiAocGxhdGZvcm1FdmVudC0+Y3RybEtleSgpIHx8
IHBsYXRmb3JtRXZlbnQtPmFsdEtleSgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAv
LyBEb24ndCBpbnNlcnQgYW55dGhpbmcgaWYgYSBtb2RpZmllciBpcyBwcmVzc2VkCisgICAgaWYg
KHBsYXRmb3JtRXZlbnQtPmN0cmxLZXkoKSB8fCBwbGF0Zm9ybUV2ZW50LT5hbHRLZXkoKSkKKyAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRU
ZXh0KHBsYXRmb3JtRXZlbnQtPnRleHQoKSwgZXZlbnQpKQotICAgICAgICAgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChmcmFtZS0+
ZWRpdG9yKCktPmluc2VydFRleHQocGxhdGZvcm1FdmVudC0+dGV4dCgpLCBldmVudCkpCisgICAg
ICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCiB2b2lkIEVkaXRvckNsaWVudDo6
aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIEZy
YW1lKiB0YXJnZXRGcmFtZSA9IGNvcmUobV93ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCktPmZv
Y3VzZWRPck1haW5GcmFtZSgpOwotICAgIGlmICghdGFyZ2V0RnJhbWUgfHwgIXRhcmdldEZyYW1l
LT5lZGl0b3IoKS0+Y2FuRWRpdCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJLaXRXZWJW
aWV3UHJpdmF0ZSogcHJpdiA9IG1fd2ViVmlldy0+cHJpdjsKLQotICAgIG1fcHJldmVudE5leHRD
b21wb3NpdGlvbkNvbW1pdCA9IGZhbHNlOwotCi0gICAgLy8gU29tZSBJTSBjb250ZXh0cyAoZS5n
LiAnc2ltcGxlJykgd2lsbCBhY3QgYXMgaWYgdGhleSBmaWx0ZXIgZXZlcnkKLSAgICAvLyBrZXlz
dHJva2UgYW5kIGp1c3QgaXNzdWUgYSAnY29tbWl0JyBzaWduYWwgZHVyaW5nIGhhbmRsaW5nLiBJ
biBzaXR1YXRpb25zCi0gICAgLy8gd2hlcmUgdGhlICdjb21taXQnIHNpZ25hbCBoYXBwZW5zIGR1
cmluZyBmaWx0ZXJpbmcgYW5kIHRoZXJlIGlzIG5vIGFjdGl2ZQotICAgIC8vIGNvbXBvc2l0aW9u
LCBhY3QgYXMgaWYgdGhlIGtleXN0cm9rZSB3YXMgbm90IGZpbHRlcmVkLiBUaGUgb25lIGV4Y2Vw
dGlvbiB0bwotICAgIC8vIHRoaXMgaXMgd2hlbiB0aGUga2V5dmFsIHBhcmFtZXRlciBvZiB0aGUg
R2RrS2V5RXZlbnQgaXMgMCwgd2hpY2ggaXMgb2Z0ZW4KLSAgICAvLyBhIGtleSBldmVudCBzZW50
IGJ5IHRoZSBJTSBjb250ZXh0IGZvciBjb21taXR0aW5nIHRoZSBjdXJyZW50IGNvbXBvc2l0aW9u
LgotCi0gICAgLy8gSGVyZSBpcyBhIHR5cGljYWwgc2VxdWVuY2Ugb2YgZXZlbnRzIGZvciB0aGUg
J3NpbXBsZScgY29udGV4dDoKLSAgICAvLyAxLiBHREsga2V5IHByZXNzIGV2ZW50IC0+IHdlYmtp
dF93ZWJfdmlld19rZXlfcHJlc3NfZXZlbnQKLSAgICAvLyAyLiBLZXlkb3duIGV2ZW50IC0+IEVk
aXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duCi0gICAgLy8gICAgIGd0a19pbV9j
b250ZXh0X2ZpbHRlcl9rZXlwcmVzcyByZXR1cm5zIHRydWUsIGJ1dCB0aGVyZSBpcyBhIHBlbmRp
bmcKLSAgICAvLyAgICAgY29tcG9zaXRpb24gc28gZXZlbnQtPnByZXZlbnREZWZhdWx0IGlzIG5v
dCBjYWxsZWQgKGJlbG93KS4KLSAgICAvLyAzLiBLZXlkb3duIGV2ZW50IGJ1YmJsZXMgdGhyb3Vn
aCB0aGUgRE9NCi0gICAgLy8gNC4gS2V5ZG93biBldmVudCAtPiBFZGl0b3JDbGllbnQ6OmhhbmRs
ZUtleWJvYXJkRXZlbnQKLSAgICAvLyAgICAgTm8gYWN0aW9uIHRha2VuLgotICAgIC8vIDQuIEdE
SyBrZXkgcmVsZWFzZSBldmVudCAtPiB3ZWJraXRfd2ViX3ZpZXdfa2V5X3JlbGVhc2VfZXZlbnQK
LSAgICAvLyA1LiBndGtfaW1fY29udGV4dF9maWx0ZXJfa2V5cHJlc3MgaXMgY2FsbGVkIG9uIHRo
ZSByZWxlYXNlIGV2ZW50LgotICAgIC8vICAgICBTaW1wbGUgZG9lcyBub3QgZmlsdGVyIG1vc3Qg
a2V5IHJlbGVhc2VzLCBzbyB0aGUgZXZlbnQgY29udGludWVzLgotICAgIC8vIDYuIEtleXByZXNz
IGV2ZW50IGJ1YmJsZXMgdGhyb3VnaCB0aGUgRE9NLgotICAgIC8vIDcuIEtleXByZXNzIGV2ZW50
IC0+IEVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudAotICAgIC8vICAgICBwZW5kaW5n
IGNvbXBvc2l0aW9uIGlzIGluc2VydGVkLgotICAgIC8vIDguIEtleXVwIGV2ZW50IGJ1YmJsZXMg
dGhyb3VnaCB0aGUgRE9NLgotICAgIC8vIDkuIEtleXVwIGV2ZW50IC0+IEVkaXRvckNsaWVudDo6
aGFuZGxlS2V5Ym9hcmRFdmVudAotICAgIC8vICAgICBObyBhY3Rpb24gdGFrZW4uCi0KLSAgICAv
LyBUaGVyZSBhcmUgdHdvIHNpdHVhdGlvbnMgd2hlcmUgd2UgZG8gZmlsdGVyIHRoZSBrZXlzdHJv
a2U6Ci0gICAgLy8gMS4gVGhlIElNQ29udGV4dCBpbnN0cnVjdGVkIHVzIHRvIGZpbHRlciBhbmQg
d2UgaGF2ZSBubyBwZW5kaW5nIGNvbXBvc2l0aW9uLgotICAgIC8vIDIuIFRoZSBJTUNvbnRleHQg
ZGlkIG5vdCBpbnN0cnVjdCB1cyB0byBmaWx0ZXIsIGJ1dCB0aGUga2V5c3Ryb2tlIGNhdXNlZCBh
Ci0gICAgLy8gICAgY29tcG9zaXRpb24gaW4gcHJvZ3Jlc3MgdG8gZmluaXNoLiBJdCBzZWVtcyB0
aGF0IHNvbWV0aW1lcyBTQ0lNIHdpbGwgZmluaXNoCi0gICAgLy8gICAgYSBjb21wb3NpdGlvbiBh
bmQgbm90IG1hcmsgdGhlIGtleXN0cm9rZSBhcyBmaWx0ZXJlZC4KLSAgICBtX3RyZWF0Q29udGV4
dENvbW1pdEFzS2V5RXZlbnQgPSAoIXRhcmdldEZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRp
b24oKSkKLSAgICAgICAgICYmIGV2ZW50LT5rZXlFdmVudCgpLT5nZGtFdmVudEtleSgpLT5rZXl2
YWw7Ci0gICAgY2xlYXJQZW5kaW5nQ29tcG9zaXRpb24oKTsKLSAgICBpZiAoKGd0a19pbV9jb250
ZXh0X2ZpbHRlcl9rZXlwcmVzcyhwcml2LT5pbUNvbnRleHQuZ2V0KCksIGV2ZW50LT5rZXlFdmVu
dCgpLT5nZGtFdmVudEtleSgpKSAmJiAhbV9wZW5kaW5nQ29tcG9zaXRpb24pCi0gICAgICAgIHx8
ICghbV90cmVhdENvbnRleHRDb21taXRBc0tleUV2ZW50ICYmICF0YXJnZXRGcmFtZS0+ZWRpdG9y
KCktPmhhc0NvbXBvc2l0aW9uKCkpKQotICAgICAgICBldmVudC0+cHJldmVudERlZmF1bHQoKTsK
LQotICAgIG1fdHJlYXRDb250ZXh0Q29tbWl0QXNLZXlFdmVudCA9IGZhbHNlOwotfQotCi12b2lk
IEVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RNb3VzZVByZXNzKCkKLXsKLSAgICBGcmFt
ZSogdGFyZ2V0RnJhbWUgPSBjb3JlKG1fd2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKLQotICAgIGlmICghdGFyZ2V0RnJhbWUgfHwgIXRhcmdldEZyYW1l
LT5lZGl0b3IoKS0+Y2FuRWRpdCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJLaXRXZWJW
aWV3UHJpdmF0ZSogcHJpdiA9IG1fd2ViVmlldy0+cHJpdjsKLQotICAgIC8vIFdoZW4gYSBtb3Vz
ZSBwcmVzcyBmaXJlcywgdGhlIGNvbW1pdCBzaWduYWwgaGFwcGVucyBkdXJpbmcgYSBjb21wb3Np
dGlvbi4KLSAgICAvLyBJbiB0aGlzIGNhc2UsIGlmIHRoZSBmb2N1c2VkIG5vZGUgaXMgY2hhbmdl
ZCwgdGhlIGNvbW1pdCBzaWduYWwgaGFwcGVucyBpbiBhIGRpZmZyZW50IG5vZGUuCi0gICAgLy8g
VGhlcmVmb3JlLCB3ZSBuZWVkIHRvIGNvbmZpcm0gdGhlIGN1cnJlbnQgY29tcG9zaXRvbiBhbmQg
aWdub3JlIHRoZSBuZXh0IGNvbW1pdCBzaWduYWwuIAotICAgIEdPd25QdHI8Z2NoYXI+IG5ld1By
ZWVkaXQoMCk7Ci0gICAgZ3RrX2ltX2NvbnRleHRfZ2V0X3ByZWVkaXRfc3RyaW5nKHByaXYtPmlt
Q29udGV4dC5nZXQoKSwgJm5ld1ByZWVkaXQub3V0UHRyKCksIDAsIDApOwotICAgIAotICAgIGlm
IChnX3V0Zjhfc3RybGVuKG5ld1ByZWVkaXQuZ2V0KCksIC0xKSkgewotICAgICAgICB0YXJnZXRG
cmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbigpOwotICAgICAgICBtX3ByZXZlbnRO
ZXh0Q29tcG9zaXRpb25Db21taXQgPSB0cnVlOwotICAgICAgICBndGtfaW1fY29udGV4dF9yZXNl
dChwcml2LT5pbUNvbnRleHQuZ2V0KCkpOwotICAgIH0gCisgICAgLy8gSW5wdXQgbWV0aG9kIHJl
c3VsdHMgYXJlIGhhbmRsZWQgaW4gaGFuZGxlS2V5Ym9hcmRFdmVudCwgc28gdGhhdCB3ZSBjYW4g
d2FpdAorICAgIC8vIHRvIHRyaWdnZXIgY29tcG9zaXRpb24gdXBkYXRlcyB1bnRpbCBhZnRlciB0
aGUga2V5ZG93biBldmVudCBoYW5kbGVyLiBUaGlzIGJldHRlcgorICAgIC8vIG1hdGNoZXMgb3Ro
ZXIgYnJvd3NlcnMuCiB9CiAKIEVkaXRvckNsaWVudDo6RWRpdG9yQ2xpZW50KFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCkBAIC02MzYsMjAgKzUyOSwxMyBAQCBFZGl0b3JDbGllbnQ6OkVkaXRvckNs
aWVudChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgICwgbV90ZXh0Q2hlY2tlckNsaWVudChX
RUJLSVRfU1BFTExfQ0hFQ0tFUih3ZWJraXRfZ2V0X3RleHRfY2hlY2tlcigpKSkKICNlbmRpZgog
ICAgICwgbV93ZWJWaWV3KHdlYlZpZXcpCi0gICAgLCBtX3ByZXZlbnROZXh0Q29tcG9zaXRpb25D
b21taXQoZmFsc2UpCi0gICAgLCBtX3RyZWF0Q29udGV4dENvbW1pdEFzS2V5RXZlbnQoZmFsc2Up
CiAgICAgLCBtX3NtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fdXBkYXRp
bmdDb21wb3NpdGlvbihmYWxzZSkKIHsKLSAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9
IG1fd2ViVmlldy0+cHJpdjsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHByaXYtPmltQ29udGV4dC5n
ZXQoKSwgImNvbW1pdCIsIEdfQ0FMTEJBQ0soaW1Db250ZXh0Q29tbWl0dGVkKSwgdGhpcyk7Ci0g
ICAgZ19zaWduYWxfY29ubmVjdChwcml2LT5pbUNvbnRleHQuZ2V0KCksICJwcmVlZGl0LWNoYW5n
ZWQiLCBHX0NBTExCQUNLKGltQ29udGV4dFByZWVkaXRDaGFuZ2VkKSwgdGhpcyk7CiB9CiAKIEVk
aXRvckNsaWVudDo6fkVkaXRvckNsaWVudCgpCiB7Ci0gICAgV2ViS2l0V2ViVmlld1ByaXZhdGUq
IHByaXYgPSBtX3dlYlZpZXctPnByaXY7Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jKHByaXYtPmltQ29udGV4dC5nZXQoKSwgKGdwb2ludGVyKWltQ29udGV4dENvbW1p
dHRlZCwgdGhpcyk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHBy
aXYtPmltQ29udGV4dC5nZXQoKSwgKGdwb2ludGVyKWltQ29udGV4dFByZWVkaXRDaGFuZ2VkLCB0
aGlzKTsKIH0KIAogdm9pZCBFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhF
bGVtZW50KikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudEd0ay5oIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9y
Q2xpZW50R3RrLmgKaW5kZXggMmYwOGQ4ZGM2M2FiODljMTEwOGVlNzMxM2E1ZDczOTEzYmQzN2Ux
Zi4uMzYxMmQ5MDAzMWIwZTI4M2MwNTZkNzhlZTE0OGFjODkwYjVjODNkNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmgKKysrIGIv
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmgKQEAgLTY1
LDEyICs2NSw3IEBAIGNsYXNzIEVkaXRvckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpFZGl0b3JD
bGllbnQgewogICAgICAgICBFZGl0b3JDbGllbnQoV2ViS2l0V2ViVmlldyopOwogICAgICAgICB+
RWRpdG9yQ2xpZW50KCk7CiAgICAgICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcoKSB7IHJldHVy
biBtX3dlYlZpZXc7IH0KLSAgICAgICAgYm9vbCB0cmVhdENvbnRleHRDb21taXRBc0tleUV2ZW50
KCkgeyByZXR1cm4gbV90cmVhdENvbnRleHRDb21taXRBc0tleUV2ZW50OyB9Ci0gICAgICAgIGJv
b2wgcHJldmVudE5leHRDb21wb3NpdGlvbkNvbW1pdCgpIHsgcmV0dXJuIG1fcHJldmVudE5leHRD
b21wb3NpdGlvbkNvbW1pdDsgfQotICAgICAgICB2b2lkIGNsZWFyUGVuZGluZ0NvbXBvc2l0aW9u
KCkgeyBtX3BlbmRpbmdDb21wb3NpdGlvbi5zZXQoMCk7IH0KLSAgICAgICAgYm9vbCBoYXNQZW5k
aW5nQ29tcG9zaXRpb24oKSB7IHJldHVybiBtX3BlbmRpbmdDb21wb3NpdGlvbjsgfQogICAgICAg
ICB2b2lkIGFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKGNvbnN0IGNoYXIqIGNvbW1hbmQpIHsgbV9w
ZW5kaW5nRWRpdG9yQ29tbWFuZHMuYXBwZW5kKGNvbW1hbmQpOyB9Ci0gICAgICAgIHZvaWQgdXBk
YXRlUGVuZGluZ0NvbXBvc2l0aW9uKGNvbnN0IGNoYXIqKTsKICAgICAgICAgdm9pZCBnZW5lcmF0
ZUVkaXRvckNvbW1hbmRzKGNvbnN0IFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKTsKICAgICAgICAg
Ym9vbCBleGVjdXRlUGVuZGluZ0VkaXRvckNvbW1hbmRzKFdlYkNvcmU6OkZyYW1lKiwgYm9vbCk7
CiAKQEAgLTExOSw3ICsxMTQsNiBAQCBjbGFzcyBFZGl0b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29y
ZTo6RWRpdG9yQ2xpZW50IHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5Ym9hcmRF
dmVudChXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVJbnB1dE1ldGhvZEtleWRvd24oV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlSW5wdXRNZXRob2RNb3VzZVByZXNzKCk7CiAKICAgICAgICAgdmly
dHVhbCB2b2lkIHRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpFbGVtZW50Kik7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCB0ZXh0RmllbGREaWRFbmRFZGl0aW5nKFdlYkNvcmU6OkVsZW1l
bnQqKTsKQEAgLTE0MCwyMCArMTM0LDE4IEBAIGNsYXNzIEVkaXRvckNsaWVudCA6IHB1YmxpYyBX
ZWJDb3JlOjpFZGl0b3JDbGllbnQgewogICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1Vu
aWNvZGVNZW51KCk7CiAKICAgICBwcml2YXRlOgorICAgICAgICBib29sIGhhbmRsZUlucHV0TWV0
aG9kS2V5Ym9hcmRFdmVudChXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7CisKICNpZiBFTkFCTEUo
U1BFTExDSEVDSykKICAgICAgICAgVGV4dENoZWNrZXJDbGllbnRHdGsgbV90ZXh0Q2hlY2tlckNs
aWVudDsKICNlbHNlCiAgICAgICAgIFdlYkNvcmU6OkVtcHR5VGV4dENoZWNrZXJDbGllbnQgbV90
ZXh0Q2hlY2tlckNsaWVudDsKICNlbmRpZgogICAgICAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZp
ZXc7Ci0gICAgICAgIGJvb2wgbV9wcmV2ZW50TmV4dENvbXBvc2l0aW9uQ29tbWl0OwotICAgICAg
ICBib29sIG1fdHJlYXRDb250ZXh0Q29tbWl0QXNLZXlFdmVudDsKLSAgICAgICAgR093blB0cjxn
Y2hhcj4gbV9wZW5kaW5nQ29tcG9zaXRpb247Ci0KICAgICAgICAgV2ViQ29yZTo6S2V5QmluZGlu
Z1RyYW5zbGF0b3IgbV9rZXlCaW5kaW5nVHJhbnNsYXRvcjsKICAgICAgICAgVmVjdG9yPFdURjo6
U3RyaW5nPiBtX3BlbmRpbmdFZGl0b3JDb21tYW5kczsKLQogICAgICAgICBib29sIG1fc21hcnRJ
bnNlcnREZWxldGVFbmFibGVkOworICAgICAgICBib29sIG1fdXBkYXRpbmdDb21wb3NpdGlvbjsK
ICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9XZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXIuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNWNhMjNi
MDE0ZDQ1ZjljNGE1ZDkxMTBkNTBmODQ3MDg5OTJjMDdmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmNw
cApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld0lucHV0TWV0aG9kRmlsdGVy
LmgiCisKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIndlYmtpdHdlYnZp
ZXdwcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0ZyYW1lKiBXZWJWaWV3SW5w
dXRNZXRob2RGaWx0ZXI6OmZvY3VzZWRPck1haW5GcmFtZSgpCit7CisgICAgQVNTRVJUKG1fd2Vi
Vmlldyk7CisgICAgUGFnZSogcGFnZSA9IGNvcmUobV93ZWJWaWV3KTsKKyAgICBpZiAoIXBhZ2Up
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKK30KKwordm9pZCBXZWJWaWV3SW5wdXRNZXRob2RGaWx0
ZXI6OnNldFdlYlZpZXcoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBtX3dlYlZpZXcg
PSB3ZWJWaWV3OworICAgIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpzZXRXaWRnZXQoR1RLX1dJREdF
VCh3ZWJWaWV3KSk7Cit9CisKK2Jvb2wgV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyOjpjYW5FZGl0
KCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBmb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICByZXR1
cm4gZnJhbWUgJiYgZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Cit9CisKK2Jvb2wgV2ViVmll
d0lucHV0TWV0aG9kRmlsdGVyOjpzZW5kU2ltcGxlS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50
LCBXVEY6OlN0cmluZyBzaW1wbGVTdHJpbmcpCit7CisgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50
IHBsYXRmb3JtRXZlbnQoZXZlbnQsIENvbXBvc2l0aW9uUmVzdWx0cyhzaW1wbGVTdHJpbmcpKTsK
KyAgICByZXR1cm4gZm9jdXNlZE9yTWFpbkZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVu
dChwbGF0Zm9ybUV2ZW50KTsKK30KKworYm9vbCBXZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXI6OnNl
bmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoR2RrRXZlbnRLZXkqIGV2ZW50LCBSZXN1
bHRzVG9TZW5kIHJlc3VsdHNUb1NlbmQpCit7CisgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IHBs
YXRmb3JtRXZlbnQoZXZlbnQsIENvbXBvc2l0aW9uUmVzdWx0cyhyZXN1bHRzVG9TZW5kICYgQ29t
cG9zaXRpb24gPyBtX2NvbmZpcm1lZENvbXBvc2l0aW9uIDogU3RyaW5nKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRzVG9TZW5kICYgUHJlZWRpdCA/IG1fcHJlZWRpdCA6IFN0cmluZygpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9jdXJzb3JPZmZzZXQpKTsKKyAgICByZXR1cm4gZm9jdXNlZE9yTWFpbkZyYW1lKCktPmV2ZW50
SGFuZGxlcigpLT5rZXlFdmVudChwbGF0Zm9ybUV2ZW50KTsKK30KKwordm9pZCBXZWJWaWV3SW5w
dXRNZXRob2RGaWx0ZXI6OmNvbmZpcm1Db21wb3NpdGlvblRleHQoU3RyaW5nIHRleHQpCit7Cisg
ICAgRnJhbWUqIGZyYW1lID0gZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSB8
fCAhZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICh0ZXh0LmlzTnVsbCgpKSB7CisgICAgICAgIGNvbmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21w
b3NpdGlvbihtX2NvbmZpcm1lZENvbXBvc2l0aW9uKTsKK30KKwordm9pZCBXZWJWaWV3SW5wdXRN
ZXRob2RGaWx0ZXI6OmNvbmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKQoreworICAgIEZyYW1lKiBm
cmFtZSA9IGZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5l
ZGl0b3IoKS0+Y2FuRWRpdCgpKQorICAgICAgICByZXR1cm47CisgICAgZnJhbWUtPmVkaXRvcigp
LT5jb25maXJtQ29tcG9zaXRpb24oKTsKK30KKwordm9pZCBXZWJWaWV3SW5wdXRNZXRob2RGaWx0
ZXI6OmNhbmNlbEN1cnJlbnRDb21wb3NpdGlvbigpCit7CisgICAgRnJhbWUqIGZyYW1lID0gZm9j
dXNlZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmVkaXRvcigpLT5j
YW5FZGl0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBmcmFtZS0+ZWRpdG9yKCktPmNhbmNlbENv
bXBvc2l0aW9uKCk7Cit9CisKK3ZvaWQgV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyOjpzZXRQcmVl
ZGl0KFN0cmluZyBuZXdQcmVlZGl0LCBpbnQgY3Vyc29yT2Zmc2V0KQoreworICAgIEZyYW1lKiBm
cmFtZSA9IGZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5l
ZGl0b3IoKS0+Y2FuRWRpdCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUT0RPOiBXZSBz
aG91bGQgcGFyc2UgdGhlIFBhbmdvQXR0ckxpc3QgdGhhdCB3ZSBnZXQgZnJvbSB0aGUgSU0gY29u
dGV4dCBoZXJlLgorICAgIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lczsK
KyAgICB1bmRlcmxpbmVzLmFwcGVuZChDb21wb3NpdGlvblVuZGVybGluZSgwLCBuZXdQcmVlZGl0
Lmxlbmd0aCgpLCBDb2xvcigxLCAxLCAxKSwgZmFsc2UpKTsKKyAgICBmcmFtZS0+ZWRpdG9yKCkt
PnNldENvbXBvc2l0aW9uKG5ld1ByZWVkaXQsIHVuZGVybGluZXMsIG1fY3Vyc29yT2Zmc2V0LCBt
X2N1cnNvck9mZnNldCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvV2ViVmlld0lucHV0TWV0aG9kRmlsdGVy
LmggYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9XZWJWaWV3SW5wdXRNZXRob2RG
aWx0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mZDcwZWRiOGYxM2ZhOWI2YzE1MGIzMjFiNWM5YWQ5N2RhMTRh
MTI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
V2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYlZpZXdJbnB1dE1ldGhvZEZpbHRl
cl9oCisjZGVmaW5lIFdlYlZpZXdJbnB1dE1ldGhvZEZpbHRlcl9oCisKKyNpbmNsdWRlICJHdGtJ
bnB1dE1ldGhvZEZpbHRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGcmFtZTsK
K30KKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2ViS2l0V2ViVmlldzsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlZpZXdJbnB1dE1ldGhvZEZpbHRlciA6IHB1Ymxp
YyBXZWJDb3JlOjpHdGtJbnB1dE1ldGhvZEZpbHRlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRX
ZWJWaWV3KFdlYktpdFdlYlZpZXcqKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgYm9vbCBz
ZW5kU2ltcGxlS2V5RXZlbnQoR2RrRXZlbnRLZXkqLCBXVEY6OlN0cmluZyBldmVudFN0cmluZyk7
CisgICAgdmlydHVhbCBib29sIHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoR2Rr
RXZlbnRLZXkqLCBSZXN1bHRzVG9TZW5kKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuRWRpdCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBjb25maXJtQ29tcG9zaXRpb25UZXh0KFN0cmluZyk7CisgICAgdmly
dHVhbCB2b2lkIGNvbmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y2FuY2VsQ3VycmVudENvbXBvc2l0aW9uKCk7CisgICAgdmlydHVhbCB2b2lkIHNldFByZWVkaXQo
U3RyaW5nLCBpbnQgY3Vyc29yT2Zmc2V0KTsKKworcHJpdmF0ZToKKyAgICBXZWJDb3JlOjpGcmFt
ZSogZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisKKyAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlZpZXdJbnB1dE1l
dGhvZEZpbHRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAK
aW5kZXggM2YxNzdiZWVhZmRiMzEwYmU1YjgzNWEyZTZmOWMyMGIyM2ZjNWM2Mi4uYzFlMzQxNTY1
MmJiYmM3ZjkzOWYyMTNkYjM5NjQzZjY0ODZmYmYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtMjczLDggKzI3Myw2IEBAIEdfREVGSU5FX1RZUEVf
V0lUSF9DT0RFKFdlYktpdFdlYlZpZXcsIHdlYmtpdF93ZWJfdmlldywgR1RLX1RZUEVfQ09OVEFJ
TkVSLAogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X3NldHRpbmdzX25vdGlmeShXZWJLaXRX
ZWJTZXR0aW5ncyogd2ViU2V0dGluZ3MsIEdQYXJhbVNwZWMqIHBzcGVjLCBXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KTsKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19zZXRfd2luZG93X2ZlYXR1
cmVzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYldpbmRvd0ZlYXR1cmVzKiB3ZWJX
aW5kb3dGZWF0dXJlcyk7CiAKLXN0YXRpYyBHdGtJTUNvbnRleHQqIHdlYmtpdF93ZWJfdmlld19n
ZXRfaW1fY29udGV4dChXZWJLaXRXZWJWaWV3Kik7Ci0KICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5V
UykKIHN0YXRpYyB2b2lkIFBvcHVwTWVudVBvc2l0aW9uRnVuYyhHdGtNZW51KiBtZW51LCBnaW50
ICp4LCBnaW50ICp5LCBnYm9vbGVhbiAqcHVzaEluLCBncG9pbnRlciB1c2VyRGF0YSkKIHsKQEAg
LTU4MSw3ICs1NzksNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKgogICAgICAgICBnX3ZhbHVl
X3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkod2ViVmlldykp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFBST1BfSU1fQ09OVEVYVDoKLSAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ltX2NvbnRleHQod2Vi
VmlldykpOworICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYlZpZXctPnByaXYt
PmltRmlsdGVyLmNvbnRleHQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFJPUF9WSUVX
X01PREU6CiAgICAgICAgIGdfdmFsdWVfc2V0X2VudW0odmFsdWUsIHdlYmtpdF93ZWJfdmlld19n
ZXRfdmlld19tb2RlKHdlYlZpZXcpKTsKQEAgLTcxMCw0MiArNzA4LDE1IEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfd2ViX3ZpZXdfZHJhdyhHdGtXaWRnZXQqIHdpZGdldCwgY2Fpcm9fdCogY3Ip
CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfa2V5X3ByZXNzX2V2ZW50KEd0a1dp
ZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQpCiB7Ci0gICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpOwotCi0gICAgRnJhbWUqIGZyYW1lID0g
Y29yZSh3ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwot
ICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBrZXlib2FyZEV2ZW50KGV2ZW50KTsKLQotICAgIGlm
ICghZnJhbWUtPnZpZXcoKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgaWYgKGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoa2V5Ym9hcmRFdmVudCkpCisgICAgaWYgKFdFQktJ
VF9XRUJfVklFVyh3aWRnZXQpLT5wcml2LT5pbUZpbHRlci5maWx0ZXJLZXlFdmVudChldmVudCkp
CiAgICAgICAgIHJldHVybiBUUlVFOwotCi0gICAgLyogQ2hhaW4gdXAgdG8gb3VyIHBhcmVudCBj
bGFzcyBmb3IgYmluZGluZyBhY3RpdmF0aW9uICovCiAgICAgcmV0dXJuIEdUS19XSURHRVRfQ0xB
U1Mod2Via2l0X3dlYl92aWV3X3BhcmVudF9jbGFzcyktPmtleV9wcmVzc19ldmVudCh3aWRnZXQs
IGV2ZW50KTsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19rZXlfcmVsZWFz
ZV9ldmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRLZXkqIGV2ZW50KQogewotICAgIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKLQotICAgIC8v
IEdUSysgSU0gY29udGV4dHMgb2Z0ZW4gcmVxdWlyZSB1cyB0byBmaWx0ZXIga2V5IHJlbGVhc2Ug
ZXZlbnRzLCB3aGljaAotICAgIC8vIFdlYkNvcmUgZG9lcyBub3QgZG8gYnkgZGVmYXVsdCwgc28g
d2UgZmlsdGVyIHRoZSBldmVudCBoZXJlLiBXZSBvbmx5IGJsb2NrCi0gICAgLy8gdGhlIGV2ZW50
IGlmIHdlIGRvbid0IGhhdmUgYSBwZW5kaW5nIGNvbXBvc2l0aW9uLCBiZWNhdXNlIHRoYXQgbWVh
bnMgd2UKLSAgICAvLyBhcmUgdXNpbmcgYSBjb250ZXh0IGxpa2UgJ3NpbXBsZScgd2hpY2ggbWFy
a3MgZXZlcnkga2V5c3Ryb2tlIGFzIGZpbHRlcmVkLgotICAgIFdlYktpdDo6RWRpdG9yQ2xpZW50
KiBjbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJLaXQ6OkVkaXRvckNsaWVudCo+KGNvcmUod2ViVmll
dyktPmVkaXRvckNsaWVudCgpKTsKLSAgICBpZiAoZ3RrX2ltX2NvbnRleHRfZmlsdGVyX2tleXBy
ZXNzKHdlYlZpZXctPnByaXYtPmltQ29udGV4dC5nZXQoKSwgZXZlbnQpICYmICFjbGllbnQtPmhh
c1BlbmRpbmdDb21wb3NpdGlvbigpKQorICAgIGlmIChXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KS0+
cHJpdi0+aW1GaWx0ZXIuZmlsdGVyS2V5RXZlbnQoZXZlbnQpKQogICAgICAgICByZXR1cm4gVFJV
RTsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigp
LT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lLT52aWV3KCkpCi0gICAgICAg
IHJldHVybiBGQUxTRTsKLQotICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBrZXlib2FyZEV2ZW50
KGV2ZW50KTsKLSAgICBpZiAoZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChrZXlib2Fy
ZEV2ZW50KSkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICAvKiBDaGFpbiB1cCB0byBvdXIg
cGFyZW50IGNsYXNzIGZvciBiaW5kaW5nIGFjdGl2YXRpb24gKi8KICAgICByZXR1cm4gR1RLX1dJ
REdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+a2V5X3JlbGVhc2VfZXZl
bnQod2lkZ2V0LCBldmVudCk7CiB9CiAKQEAgLTc3Myw5ICs3NDQsOCBAQCBzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X3dlYl92aWV3X2J1dHRvbl9wcmVzc19ldmVudChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRCdQogICAgIGlmICghZnJhbWUtPnZpZXcoKSkKICAgICAgICAgcmV0dXJuIEZBTFNF
OwogCisgICAgcHJpdi0+aW1GaWx0ZXIubm90aWZ5TW91c2VCdXR0b25QcmVzcygpOwogICAgIGdi
b29sZWFuIHJlc3VsdCA9IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2
ZW50KHBsYXRmb3JtRXZlbnQpOwotICAgIC8vIEhhbmRsZSB0aGUgSU0gY29udGV4dCB3aGVuIGEg
bW91c2UgcHJlc3MgZmlyZXMKLSAgICBzdGF0aWNfY2FzdDxXZWJLaXQ6OkVkaXRvckNsaWVudCo+
KGNvcmUod2ViVmlldyktPmVkaXRvckNsaWVudCgpKS0+aGFuZGxlSW5wdXRNZXRob2RNb3VzZVBy
ZXNzKCk7CiAKICNpZiBQTEFURk9STShYMTEpCiAgICAgLyogQ29weSBzZWxlY3Rpb24gdG8gdGhl
IFgxMSBzZWxlY3Rpb24gY2xpcGJvYXJkICovCkBAIC05NjQsMjAgKzkzNCwyMCBAQCBzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2ZvY3VzX2luX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0
LCBHZGtFdmVudEZvY3VzKgogICAgIC8vIFRPRE86IEltcHJvdmUgZm9jdXMgaGFuZGxpbmcgYXMg
c3VnZ2VzdGVkIGluCiAgICAgLy8gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY5MTAKICAgICBHdGtXaWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2
ZWwod2lkZ2V0KTsKLSAgICBpZiAod2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHRvcGxl
dmVsKSAmJiBndGtfd2luZG93X2hhc190b3BsZXZlbF9mb2N1cyhHVEtfV0lORE9XKHRvcGxldmVs
KSkpIHsKLSAgICAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3
aWRnZXQpOwotICAgICAgICBGb2N1c0NvbnRyb2xsZXIqIGZvY3VzQ29udHJvbGxlciA9IGNvcmUo
d2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigpOworICAgIGlmICghd2lkZ2V0SXNPbnNjcmVlblRv
cGxldmVsV2luZG93KHRvcGxldmVsKSB8fCAhZ3RrX3dpbmRvd19oYXNfdG9wbGV2ZWxfZm9jdXMo
R1RLX1dJTkRPVyh0b3BsZXZlbCkpKQorICAgICAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3
ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+Zm9jdXNfaW5fZXZlbnQod2lkZ2V0LCBldmVu
dCk7CiAKLSAgICAgICAgZm9jdXNDb250cm9sbGVyLT5zZXRBY3RpdmUodHJ1ZSk7CisgICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpOworICAgIEZvY3Vz
Q29udHJvbGxlciogZm9jdXNDb250cm9sbGVyID0gY29yZSh3ZWJWaWV3KS0+Zm9jdXNDb250cm9s
bGVyKCk7CiAKLSAgICAgICAgaWYgKGZvY3VzQ29udHJvbGxlci0+Zm9jdXNlZEZyYW1lKCkpCi0g
ICAgICAgICAgICBmb2N1c0NvbnRyb2xsZXItPnNldEZvY3VzZWQodHJ1ZSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGZvY3VzQ29udHJvbGxlci0+c2V0Rm9jdXNlZEZyYW1lKGNvcmUod2Vi
VmlldyktPm1haW5GcmFtZSgpKTsKKyAgICBmb2N1c0NvbnRyb2xsZXItPnNldEFjdGl2ZSh0cnVl
KTsKKyAgICBpZiAoZm9jdXNDb250cm9sbGVyLT5mb2N1c2VkRnJhbWUoKSkKKyAgICAgICAgZm9j
dXNDb250cm9sbGVyLT5zZXRGb2N1c2VkKHRydWUpOworICAgIGVsc2UKKyAgICAgICAgZm9jdXND
b250cm9sbGVyLT5zZXRGb2N1c2VkRnJhbWUoY29yZSh3ZWJWaWV3KS0+bWFpbkZyYW1lKCkpOwog
Ci0gICAgICAgIGlmIChmb2N1c0NvbnRyb2xsZXItPmZvY3VzZWRGcmFtZSgpLT5lZGl0b3IoKS0+
Y2FuRWRpdCgpKQotICAgICAgICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfaW4od2ViVmlldy0+
cHJpdi0+aW1Db250ZXh0LmdldCgpKTsKLSAgICB9CisgICAgaWYgKGZvY3VzQ29udHJvbGxlci0+
Zm9jdXNlZEZyYW1lKCktPmVkaXRvcigpLT5jYW5FZGl0KCkpCisgICAgICAgIHdlYlZpZXctPnBy
aXYtPmltRmlsdGVyLm5vdGlmeUZvY3VzZWRJbigpOwogICAgIHJldHVybiBHVEtfV0lER0VUX0NM
QVNTKHdlYmtpdF93ZWJfdmlld19wYXJlbnRfY2xhc3MpLT5mb2N1c19pbl9ldmVudCh3aWRnZXQs
IGV2ZW50KTsKIH0KIApAQCAtOTg3LDIyICs5NTcsMTcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtp
dF93ZWJfdmlld19mb2N1c19vdXRfZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50Rm9j
dXMKIAogICAgIC8vIFdlIG1heSBoaXQgdGhpcyBjb2RlIHdoaWxlIGRlc3Ryb3lpbmcgdGhlIHdp
ZGdldCwgYW5kIHdlIG1pZ2h0CiAgICAgLy8gbm8gbG9uZ2VyIGhhdmUgYSBwYWdlLCB0aGVuLgot
ICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKHdlYlZpZXcpOwotICAgIGlmIChwYWdlKSB7CisgICAgaWYg
KFBhZ2UqIHBhZ2UgPSBjb3JlKHdlYlZpZXcpKSB7CiAgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS0+c2V0Rm9jdXNlZChmYWxzZSk7CiAgICAgfQogCi0gICAgaWYgKHdlYlZpZXctPnByaXYtPmlt
Q29udGV4dCkKLSAgICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KHdlYlZpZXctPnByaXYt
PmltQ29udGV4dC5nZXQoKSk7Ci0KKyAgICB3ZWJWaWV3LT5wcml2LT5pbUZpbHRlci5ub3RpZnlG
b2N1c2VkT3V0KCk7CiAgICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3dlYl92aWV3
X3BhcmVudF9jbGFzcyktPmZvY3VzX291dF9ldmVudCh3aWRnZXQsIGV2ZW50KTsKIH0KIAogc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl92aWV3X3JlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCiB7Ci0g
ICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KS0+
cHJpdjsKLQogICAgIGd0a193aWRnZXRfc2V0X3JlYWxpemVkKHdpZGdldCwgVFJVRSk7CiAKICAg
ICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247CkBAIC0xMDU4LDggKzEwMjMsNiBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRfd2ViX3ZpZXdfcmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKICNlbHNlCiAg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2JhY2tncm91bmQoZ3RrX3dpZGdldF9nZXRfc3R5bGVf
Y29udGV4dCh3aWRnZXQpLCB3aW5kb3cpOwogI2VuZGlmCi0KLSAgICBndGtfaW1fY29udGV4dF9z
ZXRfY2xpZW50X3dpbmRvdyhwcml2LT5pbUNvbnRleHQuZ2V0KCksIHdpbmRvdyk7CiB9CiAKICNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgpAQCAtMTY0MSwxMiArMTYwNCw2IEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfd2ViX3ZpZXdfc2hvd19oZWxwKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtXaWRn
ZXRIZWxwVHlwZSBoCiB9CiAjZW5kaWYKIAotc3RhdGljIEd0a0lNQ29udGV4dCogd2Via2l0X3dl
Yl92aWV3X2dldF9pbV9jb250ZXh0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCi17Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAwKTsKLSAgICBy
ZXR1cm4gR1RLX0lNX0NPTlRFWFQod2ViVmlldy0+cHJpdi0+aW1Db250ZXh0LmdldCgpKTsKLX0K
LQogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0Ns
YXNzKiB3ZWJWaWV3Q2xhc3MpCiB7CiAgICAgR3RrQmluZGluZ1NldCogYmluZGluZ19zZXQ7CkBA
IC0zNTY0LDcgKzM1MjEsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIC8vIG1lbWJlcnMsIHdoaWNoIGVuc3VyZXMgdGhleSBh
cmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkuCiAgICAgbmV3IChwcml2KSBXZWJLaXRXZWJWaWV3UHJp
dmF0ZSgpOwogCi0gICAgcHJpdi0+aW1Db250ZXh0ID0gYWRvcHRHUmVmKGd0a19pbV9tdWx0aWNv
bnRleHRfbmV3KCkpOworICAgIHByaXYtPmltRmlsdGVyLnNldFdlYlZpZXcod2ViVmlldyk7CiAK
ICAgICBQYWdlOjpQYWdlQ2xpZW50cyBwYWdlQ2xpZW50czsKICAgICBwYWdlQ2xpZW50cy5jaHJv
bWVDbGllbnQgPSBuZXcgV2ViS2l0OjpDaHJvbWVDbGllbnQod2ViVmlldyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oCmluZGV4IDFmZTIxY2Rh
YzNmMDdjMjNmNjRhYWFiMTJhZDFjY2NmNDBjYjg4MGMuLjBiYzVhNTZmYWIwMzBlYjRhZTdiZTk4
Y2NlY2Q4YWYyMDIxYWQxYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ2aWV3cHJpdmF0ZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiR3RrRHJhZ0Fu
ZERyb3BIZWxwZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGUuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXIuaCIKICNpbmNsdWRlICJX
aWRnZXRCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vidmlldy5oPgog
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KQEAgLTU5LDcgKzYwLDcgQEAgc3RydWN0
IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgZ2ludCBsYXN0UG9wdXBZUG9zaXRpb247CiAK
ICAgICBIYXNoU2V0PEd0a1dpZGdldCo+IGNoaWxkcmVuOwotICAgIEdSZWZQdHI8R3RrSU1Db250
ZXh0PiBpbUNvbnRleHQ7CisgICAgV2ViS2l0OjpXZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXIgaW1G
aWx0ZXI7CiAKICAgICBnYm9vbGVhbiB0cmFuc3BhcmVudDsKICAgICBib29sIG5lZWRzUmVzaXpl
T25NYXA7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>