<?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>143919</bug_id>
          
          <creation_ts>2015-04-18 11:50:22 -0700</creation_ts>
          <short_desc>Merge WeakMapData into JSWeakMap and JSWeakSet</short_desc>
          <delta_ts>2017-08-26 01:03:17 -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>JavaScriptCore</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>142408</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>darin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1086565</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-18 11:50:22 -0700</bug_when>
    <thetext>Integrate WeakMapData into WeakMap / WeakSet as inlined member</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1341936</commentid>
    <comment_count>1</comment_count>
      <attachid>318955</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-23 19:26:45 -0700</bug_when>
    <thetext>Created attachment 318955
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1341939</commentid>
    <comment_count>2</comment_count>
      <attachid>318958</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-23 19:30:09 -0700</bug_when>
    <thetext>Created attachment 318958
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1341970</commentid>
    <comment_count>3</comment_count>
      <attachid>318969</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-23 22:17:31 -0700</bug_when>
    <thetext>Created attachment 318969
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342623</commentid>
    <comment_count>4</comment_count>
      <attachid>318969</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-08-25 20:42:35 -0700</bug_when>
    <thetext>Comment on attachment 318969
Patch

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

I’m not a big fan of the abbreviation “Impl” as in “WeakMapImpl”; I would have used the word “Base” instead and called it “WeakMapBase”, I think.

&gt; Source/JavaScriptCore/runtime/WeakMapImpl.cpp:47
&gt; +void WeakMapImpl::finishCreation(VM&amp; vm)
&gt; +{
&gt; +    Base::finishCreation(vm);
&gt; +}

Do we really need this function?

&gt; Source/JavaScriptCore/runtime/WeakMapImpl.cpp:56
&gt; +    WeakMapImpl* thisObj = jsCast&lt;WeakMapImpl*&gt;(cell);

I would use auto* here since the type name is already there. I also would use the word “object”, not the abbreviation “obj”. But these are changes to code that was already here, I guess. And of course I would use a reference instead of a pointer, but I think the people who normally work on JavaScriptCore strongly reject this preference of mine.

&gt; Source/JavaScriptCore/runtime/WeakMapImpl.cpp:63
&gt; +    WeakMapImpl* thisObj = jsCast&lt;WeakMapImpl*&gt;(cell);

Ditto.

&gt; Source/JavaScriptCore/runtime/WeakMapImpl.cpp:95
&gt; +    auto iter = m_map.find(key);
&gt; +    if (iter == m_map.end())
&gt; +        return false;
&gt; +
&gt; +    m_map.remove(iter);
&gt; +    return true;

This entire sequence of code does the same thing as:

    return m_map.remove(key);

&gt; Source/JavaScriptCore/runtime/WeakMapImpl.cpp:118
&gt; +    RELEASE_ASSERT(m_liveKeyCount &lt;= impl-&gt;m_map.size());

Very strange to use RELEASE_ASSERT here. There is no chance this assertion will fail, given the way the loop above is written, so why include the code in release builds? A normal ASSERT makes way more sense to me.

&gt; Source/JavaScriptCore/runtime/WeakMapImpl.cpp:123
&gt; +    WeakMapImpl* impl = target();

I would call this map, or weakMap, not impl. Words preferred over abbreviations.

&gt; Source/JavaScriptCore/runtime/WeakMapImpl.h:47
&gt; +    typedef HashMap&lt;JSObject*, WriteBarrier&lt;Unknown&gt;&gt; MapType;

In new code we should us &quot;using&quot; rather than &quot;typedef&quot;.

&gt; Source/JavaScriptCore/runtime/WeakMapImpl.h:51
&gt; +    int size() const { return m_map.size(); }

The choice of &quot;int&quot; for the type here is peculiar. HashMap uses &quot;unsigned&quot;.

&gt; Source/JavaScriptCore/runtime/WeakMapImpl.h:58
&gt; +    void finishCreation(VM&amp;);

Strange to override the public function in the base class with a protected function. Maybe we should be inheriting protected instead of public?

&gt; Source/JavaScriptCore/runtime/WeakMapImpl.h:65
&gt; +        DeadKeyCleaner(WeakMapImpl* impl)
&gt; +        {
&gt; +            ASSERT_UNUSED(impl, impl == target());
&gt; +        }

I think we should just assert this in the WeakMapImpl constructor after constructing the DeadKeyCleaner. Seems like overkill to write this constructor here in this header file just so we can put the assertion here.

&gt; Source/JavaScriptCore/runtime/WeakMapImpl.h:70
&gt; +        WeakMapImpl* target()
&gt; +        {
&gt; +            return bitwise_cast&lt;WeakMapImpl*&gt;(bitwise_cast&lt;char*&gt;(this) - OBJECT_OFFSETOF(WeakMapImpl, m_deadKeyCleaner));
&gt; +        }

I suggest putting this function body inside the cpp file rather than here in the header. It can still be marked inline, but since it will only be called inside the cpp file we should not have to put it here. We can still define the function here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342627</commentid>
    <comment_count>5</comment_count>
      <attachid>318969</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-08-25 21:12:14 -0700</bug_when>
    <thetext>Comment on attachment 318969
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapImpl.h:70
&gt;&gt; +        }
&gt; 
&gt; I suggest putting this function body inside the cpp file rather than here in the header. It can still be marked inline, but since it will only be called inside the cpp file we should not have to put it here. We can still define the function here.

We can still *declare* the function here, I mean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342636</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-26 01:01:36 -0700</bug_when>
    <thetext>Committed r221223: &lt;http://trac.webkit.org/changeset/221223&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342637</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-26 01:02:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/34096516&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342638</commentid>
    <comment_count>8</comment_count>
      <attachid>318969</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-26 01:03:17 -0700</bug_when>
    <thetext>Comment on attachment 318969
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapImpl.cpp:47
&gt;&gt; +}
&gt; 
&gt; Do we really need this function?

OK, dropped.

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapImpl.cpp:56
&gt;&gt; +    WeakMapImpl* thisObj = jsCast&lt;WeakMapImpl*&gt;(cell);
&gt; 
&gt; I would use auto* here since the type name is already there. I also would use the word “object”, not the abbreviation “obj”. But these are changes to code that was already here, I guess. And of course I would use a reference instead of a pointer, but I think the people who normally work on JavaScriptCore strongly reject this preference of mine.

OK, here, jsCast&lt;&gt; explicitly describes the type. So auto* would be nice. Changed.

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapImpl.cpp:63
&gt;&gt; +    WeakMapImpl* thisObj = jsCast&lt;WeakMapImpl*&gt;(cell);
&gt; 
&gt; Ditto.

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapImpl.cpp:95
&gt;&gt; +    return true;
&gt; 
&gt; This entire sequence of code does the same thing as:
&gt; 
&gt;     return m_map.remove(key);

Nice. Right. Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapImpl.cpp:118
&gt;&gt; +    RELEASE_ASSERT(m_liveKeyCount &lt;= impl-&gt;m_map.size());
&gt; 
&gt; Very strange to use RELEASE_ASSERT here. There is no chance this assertion will fail, given the way the loop above is written, so why include the code in release builds? A normal ASSERT makes way more sense to me.

Make sense. Changed to ASSERT.

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapImpl.cpp:123
&gt;&gt; +    WeakMapImpl* impl = target();
&gt; 
&gt; I would call this map, or weakMap, not impl. Words preferred over abbreviations.

Changed.

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapImpl.h:47
&gt;&gt; +    typedef HashMap&lt;JSObject*, WriteBarrier&lt;Unknown&gt;&gt; MapType;
&gt; 
&gt; In new code we should us &quot;using&quot; rather than &quot;typedef&quot;.

Changed.

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapImpl.h:51
&gt;&gt; +    int size() const { return m_map.size(); }
&gt; 
&gt; The choice of &quot;int&quot; for the type here is peculiar. HashMap uses &quot;unsigned&quot;.

Changed it to unsigned.

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapImpl.h:58
&gt;&gt; +    void finishCreation(VM&amp;);
&gt; 
&gt; Strange to override the public function in the base class with a protected function. Maybe we should be inheriting protected instead of public?

OK, aligned them to the base class&apos;s policy. destroy is protected. estimatedSize and visitChildren are public.

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapImpl.h:65
&gt;&gt; +        }
&gt; 
&gt; I think we should just assert this in the WeakMapImpl constructor after constructing the DeadKeyCleaner. Seems like overkill to write this constructor here in this header file just so we can put the assertion here.

Sounds nice. Fixed.

&gt;&gt;&gt; Source/JavaScriptCore/runtime/WeakMapImpl.h:70
&gt;&gt;&gt; +        }
&gt;&gt; 
&gt;&gt; I suggest putting this function body inside the cpp file rather than here in the header. It can still be marked inline, but since it will only be called inside the cpp file we should not have to put it here. We can still define the function here.
&gt; 
&gt; We can still *declare* the function here, I mean.

Sounds very nice. Fixed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318955</attachid>
            <date>2017-08-23 19:26:45 -0700</date>
            <delta_ts>2017-08-23 19:30:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143919-20170824112644.patch</filename>
            <type>text/plain</type>
            <size>42238</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
OGZjNDAzN2FmNDZjZGMxZmNmMTEwYTAwYzQ5NjI1ZWE5MjY2OWE1Li44NGQzODEwNGI4YTE4OTAz
YmJlYjVhZDhkYzU3YWUwNjI3OGM1MjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw4MyBAQAogMjAxNy0wOC0yMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAorICAgICAgICBNZXJnZSBXZWFrTWFwRGF0YSBpbnRvIEpTV2Vha01hcCBhbmQgSlNX
ZWFrU2V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDM5MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGNoYW5nZXMgV2Vha01hcERhdGEgZnJvbSBKU0NlbGwgdG8gSlNEZXN0cnVjdGli
bGVPYmplY3QsCisgICAgICAgIHJlbmFtaW5nIGl0IHRvIFdlYWtNYXBJbXBsLCBhbmQgSlNXZWFr
TWFwIGFuZCBKU1dlYWtTZXQgc2ltcGx5IGluaGVyaXQKKyAgICAgICAgaXQgaW5zdGVhZCBvZiBz
ZXBhcmF0ZWx5IGFsbG9jYXRpbmcgV2Vha01hcERhdGEuIFRoaXMgcmVkdWNlcyBtZW1vcnkKKyAg
ICAgICAgY29uc3VtcHRpb24gYW5kIGFsbG9jYXRpb24gdGltZXMuCisKKyAgICAgICAgQWxzbyB0
aGlzIHBhdGNoIGEgYml0IG9wdGltaXplcyBzaXplb2YoRGVhZEtleUNsZWFuZXIpIGJ5IGRyb3Bw
aW5nIG1fdGFyZ2V0CisgICAgICAgIGZpZWxkLiBTaW5jZSB0aGlzIGNsYXNzIGlzIGFsd2F5cyBl
bWJlZGRlZCBpbiBXZWFrTWFwSW1wbCwgd2UgY2FuIGNhbGN1bGF0ZQorICAgICAgICBXZWFrTWFw
SW1wbCBhZGRyZXNzIGZyb20gdGhlIGFkZHJlc3Mgb2YgRGVhZEtleUNsZWFuZXIuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBvcHRpbWl6YXRpb24gY2hhbmdpbmcg
V2Vha01hcERhdGEgdG8gU2V0CisgICAgICAgIGZvciBKU1dlYWtTZXQuCisKKyAgICAgICAgKiBD
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHA6
CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrTWFwU2l6ZSk6
CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrTWFwRW50cmll
cyk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrU2V0U2l6
ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrU2V0RW50
cmllcyk6CisgICAgICAgICogcnVudGltZS9KU1dlYWtNYXAuY3BwOgorICAgICAgICAoSlNDOjpK
U1dlYWtNYXA6OmZpbmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWFr
TWFwOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTV2Vha01h
cC5oOgorICAgICAgICAoSlNDOjpKU1dlYWtNYXA6OmNyZWF0ZVN0cnVjdHVyZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpTV2Vha01hcDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SlNXZWFrTWFwOjp3ZWFrTWFwRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2Vh
a01hcDo6SlNXZWFrTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTV2Vha1NldC5j
cHA6CisgICAgICAgIChKU0M6OkpTV2Vha1NldDo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU1dlYWtTZXQ6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvSlNXZWFrU2V0Lmg6CisgICAgICAgIChKU0M6OkpTV2Vha1NldDo6Y3JlYXRl
U3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWFrU2V0OjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYWtTZXQ6OndlYWtNYXBEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6SlNXZWFrU2V0OjpKU1dlYWtTZXQpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBJbXBsLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBEYXRhLmNwcC4KKyAgICAgICAg
KEpTQzo6V2Vha01hcEltcGw6OldlYWtNYXBJbXBsKToKKyAgICAgICAgKEpTQzo6V2Vha01hcElt
cGw6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2Vha01hcEltcGw6OmRlc3Ryb3kp
OgorICAgICAgICAoSlNDOjpXZWFrTWFwSW1wbDo6ZXN0aW1hdGVkU2l6ZSk6CisgICAgICAgIChK
U0M6OldlYWtNYXBJbXBsOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6V2Vha01hcElt
cGw6OnNldCk6CisgICAgICAgIChKU0M6OldlYWtNYXBJbXBsOjpnZXQpOgorICAgICAgICAoSlND
OjpXZWFrTWFwSW1wbDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6V2Vha01hcEltcGw6OmNvbnRh
aW5zKToKKyAgICAgICAgKEpTQzo6V2Vha01hcEltcGw6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6
V2Vha01hcEltcGw6OkRlYWRLZXlDbGVhbmVyOjp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAg
ICAgKEpTQzo6V2Vha01hcEltcGw6OkRlYWRLZXlDbGVhbmVyOjpmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSk6CisgICAgICAgICogcnVudGltZS9XZWFrTWFwSW1wbC5oOiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuaC4KKyAgICAgICAgKEpTQzo6
V2Vha01hcEltcGw6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Vha01hcEltcGw6OmVu
ZCBjb25zdCk6CisgICAgICAgIChKU0M6OldlYWtNYXBJbXBsOjpzaXplIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6V2Vha01hcEltcGw6OkRlYWRLZXlDbGVhbmVyOjpEZWFkS2V5Q2xlYW5lcik6Cisg
ICAgICAgIChKU0M6OldlYWtNYXBJbXBsOjpEZWFkS2V5Q2xlYW5lcjo6dGFyZ2V0KToKKyAgICAg
ICAgKiBydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRXZWFr
TWFwKToKKyAgICAgICAgKEpTQzo6cHJvdG9GdW5jV2Vha01hcERlbGV0ZSk6CisgICAgICAgIChK
U0M6OnByb3RvRnVuY1dlYWtNYXBHZXQpOgorICAgICAgICAoSlNDOjpwcm90b0Z1bmNXZWFrTWFw
SGFzKToKKyAgICAgICAgKEpTQzo6cHJvdG9GdW5jV2Vha01hcFNldCk6CisgICAgICAgIChKU0M6
OmdldFdlYWtNYXBEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1dlYWtTZXRQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRXZWFrU2V0KToKKyAgICAgICAgKEpTQzo6cHJv
dG9GdW5jV2Vha1NldERlbGV0ZSk6CisgICAgICAgIChKU0M6OnByb3RvRnVuY1dlYWtTZXRIYXMp
OgorICAgICAgICAoSlNDOjpwcm90b0Z1bmNXZWFrU2V0QWRkKToKKyAgICAgICAgKEpTQzo6Z2V0
V2Vha01hcERhdGEpOiBEZWxldGVkLgorCisyMDE3LTA4LTIzICBZdXN1a2UgU3V6dWtpICA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPgorCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCBmb3IgdGVzdDI2
MgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1OTE1
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA2ZDA4NTkxNTQwOTMyZTAx
NzA2ZmRkZWUyNDQ2NmE4Zjc1ZTg3MTJlLi5iZTkzYTEyZjE2NWU0NzczYTE0YWFjYTBjYzk4NjE1
NTIzNDA1Y2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC05MzYsNyAr
OTM2LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL1Zhck9mZnNl
dC5jcHAKICAgICBydW50aW1lL1dhdGNoZG9nLmNwcAogICAgIHJ1bnRpbWUvV2Vha01hcENvbnN0
cnVjdG9yLmNwcAotICAgIHJ1bnRpbWUvV2Vha01hcERhdGEuY3BwCisgICAgcnVudGltZS9XZWFr
TWFwSW1wbC5jcHAKICAgICBydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwCiAgICAgcnVudGlt
ZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9XZWFrU2V0UHJvdG90eXBlLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwYTE2YWQ1ZTBkYTQ0ZWZkODVhY2Q4
NDIzNDYxYWMwYzUxNWMxM2M1Li4zYTZmODE2Mjg1NjNlMDg3Yjc5YmYwODUwZjI0ZTc5OWYwMDg2
YWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjA1Niw4ICsyMDU2LDggQEAK
IAkJQTdDQTNBRTYxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Q0EzQUUwMTdEQTQxQUUw
MDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBlLmggKi87IH07CiAJCUE3Q0EzQUU3MTdEQTQxQUUw
MDY1MzhBRiAvKiBKU1dlYWtNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTdDQTNBRTExN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5jcHAg
Ki87IH07CiAJCUE3Q0EzQUU4MTdEQTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Q0EzQUUyMTdEQTQxQUUw
MDY1MzhBRiAvKiBKU1dlYWtNYXAuaCAqLzsgfTsKLQkJQTdDQTNBRUIxN0RBNTE2ODAwNjUzOEFG
IC8qIFdlYWtNYXBEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3Q0EzQUU5MTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5jcHAgKi87
IH07Ci0JCUE3Q0EzQUVDMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDQTNBRUExN0RBNTE2ODAw
NjUzOEFGIC8qIFdlYWtNYXBEYXRhLmggKi87IH07CisJCUE3Q0EzQUVCMTdEQTUxNjgwMDY1MzhB
RiAvKiBXZWFrTWFwSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBN0NBM0FFOTE3REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcEltcGwuY3BwICov
OyB9OworCQlBN0NBM0FFQzE3REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcEltcGwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Q0EzQUVBMTdEQTUxNjgw
MDY1MzhBRiAvKiBXZWFrTWFwSW1wbC5oICovOyB9OwogCQlBN0Q4MDFBNDE4ODBENjZFMDAyNkMz
OUIgLyogQnVpbHRpbkV4ZWN1dGFibGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDgwMUExMTg4MEQ2NkUwMDI2QzM5QiAvKiBCdWlsdGluRXhl
Y3V0YWJsZXMuY3BwICovOyB9OwogCQlBN0Q4MDFBNTE4ODBENjZFMDAyNkMzOUIgLyogQnVpbHRp
bkV4ZWN1dGFibGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBN0Q4MDFBMjE4ODBENjZFMDAyNkMzOUIgLyogQnVpbHRpbkV4ZWN1dGFibGVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdEODAxQTgx
ODgwRDZBODAwMjZDMzlCIC8qIEpTQ0J1aWx0aW5zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDgwMUE2MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NC
dWlsdGlucy5jcHAgKi87IH07CkBAIC00NzE2LDggKzQ3MTYsOCBAQAogCQlBN0NBM0FFMDE3REE0
MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWFrTWFwUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3Q0EzQUUxMTdEQTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWFrTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTdDQTNBRTIxN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYWtNYXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQTdDQTNBRTkxN0RBNTE2ODAwNjUzOEFGIC8qIFdlYWtNYXBEYXRh
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYWtNYXBEYXRhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdDQTNBRUExN0RBNTE2ODAwNjUzOEFG
IC8qIFdlYWtNYXBEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtN
YXBEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3Q0EzQUU5MTdEQTUxNjgw
MDY1MzhBRiAvKiBXZWFrTWFwSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWFrTWFwSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3
Q0EzQUVBMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwSW1wbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWFrTWFwSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBN0Q4MDFBMDE4ODBENjZFMDAyNkMzOUIgLyogQXJyYXlQcm90b3R5cGUuanMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBBcnJheVByb3RvdHlwZS5qczsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdEODAxQTExODgwRDY2RTAwMjZDMzlCIC8qIEJ1
aWx0aW5FeGVjdXRhYmxlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBCdWlsdGluRXhlY3V0YWJsZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
N0Q4MDFBMjE4ODBENjZFMDAyNkMzOUIgLyogQnVpbHRpbkV4ZWN1dGFibGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1aWx0aW5FeGVjdXRhYmxlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNzIzNyw4ICs3MjM3LDggQEAKIAkJCQlBRDg2QTkzRDFBQTRE
ODdDMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oICovLAogCQkJCUE3Q0EzQUREMTdEQTQx
QUUwMDY1MzhBRiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUE3Q0EzQURFMTdE
QTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuaCAqLywKLQkJCQlBN0NBM0FFOTE3
REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcERhdGEuY3BwICovLAotCQkJCUE3Q0EzQUVBMTdEQTUx
NjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5oICovLAorCQkJCUE3Q0EzQUU5MTdEQTUxNjgwMDY1
MzhBRiAvKiBXZWFrTWFwSW1wbC5jcHAgKi8sCisJCQkJQTdDQTNBRUExN0RBNTE2ODAwNjUzOEFG
IC8qIFdlYWtNYXBJbXBsLmggKi8sCiAJCQkJQTdDQTNBREYxN0RBNDFBRTAwNjUzOEFGIC8qIFdl
YWtNYXBQcm90b3R5cGUuY3BwICovLAogCQkJCUE3Q0EzQUUwMTdEQTQxQUUwMDY1MzhBRiAvKiBX
ZWFrTWFwUHJvdG90eXBlLmggKi8sCiAJCQkJNzA5RkI4NjMxQUUzMzVDNjAwMzlEMDY5IC8qIFdl
YWtTZXRDb25zdHJ1Y3Rvci5jcHAgKi8sCkBAIC05NjYwLDcgKzk2NjAsNyBAQAogCQkJCTE0RTg0
RkEyMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRC
RTdEMzMxNzEzNUNGNDAwRDE4MDdBIC8qIFdlYWtJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0NBM0FFNDE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcENvbnN0cnVjdG9yLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlBN0NBM0FFQzE3REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcERhdGEuaCBp
biBIZWFkZXJzICovLAorCQkJCUE3Q0EzQUVDMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwSW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTYxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtN
YXBQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0
QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZB
MTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTE1MCw3
ICsxMTE1MCw3IEBACiAJCQkJMTRFODRGOUUxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEY3MjU2NTE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hh
bmRsZU93bmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Q0EzQUUzMTdEQTQxQUUwMDY1MzhB
RiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTdDQTNBRUIx
N0RBNTE2ODAwNjUzOEFGIC8qIFdlYWtNYXBEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3
Q0EzQUVCMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwSW1wbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0NBM0FFNTE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNEU4NEZBMDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha1NldC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3MDlGQjg2OTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldENv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAppbmRleCBmMmI3MjQw
MTBjMjBiMzI3NWY0MTM5MzdmMjE3MDljMzYzMjcyMWU5Li5lZDIwZDA4YmIyNjJmM2I0MmU3ODJh
YmM3MTc3OTBmMzU1MzA1ODc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcApAQCAtNTgsNyArNTgsNyBAQAog
I2luY2x1ZGUgIlNldEl0ZXJhdG9yUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5o
IgogI2luY2x1ZGUgIlR5cGVkQXJyYXlJbmxpbmVzLmgiCi0jaW5jbHVkZSAiV2Vha01hcERhdGEu
aCIKKyNpbmNsdWRlICJXZWFrTWFwSW1wbC5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBA
IC00MjksNyArNDI5LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha01hcFNp
emUoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmICghd2Vha01hcCkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4ganNOdW1iZXIod2Vha01hcC0+d2Vha01hcERhdGEo
KS0+c2l6ZSgpKTsKKyAgICByZXR1cm4ganNOdW1iZXIod2Vha01hcC0+c2l6ZSgpKTsKIH0KIAog
SlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha01hcEVudHJpZXMoRXhlY1N0YXRlKiBl
eGVjKQpAQCAtNDU0LDcgKzQ1NCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Ondl
YWtNYXBFbnRyaWVzKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gY29u
c3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU1ZhbHVlKCkpOwotICAgIGZvciAoYXV0byBpdCA9IHdlYWtNYXAtPndlYWtNYXBE
YXRhKCktPmJlZ2luKCk7IGl0ICE9IHdlYWtNYXAtPndlYWtNYXBEYXRhKCktPmVuZCgpOyArK2l0
KSB7CisgICAgZm9yIChhdXRvIGl0ID0gd2Vha01hcC0+YmVnaW4oKTsgaXQgIT0gd2Vha01hcC0+
ZW5kKCk7ICsraXQpIHsKICAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYyk7CiAgICAgICAgIGVudHJ5LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAia2V5IiksIGl0LT5rZXkpOwogICAgICAgICBlbnRyeS0+
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInZhbHVl
IiksIGl0LT52YWx1ZS5nZXQoKSk7CkBAIC00NzgsNyArNDc4LDcgQEAgSlNWYWx1ZSBKU0luamVj
dGVkU2NyaXB0SG9zdDo6d2Vha1NldFNpemUoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmICghd2Vh
a1NldCkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4ganNOdW1i
ZXIod2Vha1NldC0+d2Vha01hcERhdGEoKS0+c2l6ZSgpKTsKKyAgICByZXR1cm4ganNOdW1iZXIo
d2Vha1NldC0+c2l6ZSgpKTsKIH0KIAogSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vh
a1NldEVudHJpZXMoRXhlY1N0YXRlKiBleGVjKQpAQCAtNTAzLDcgKzUwMyw3IEBAIEpTVmFsdWUg
SlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtTZXRFbnRyaWVzKEV4ZWNTdGF0ZSogZXhlYykKIAog
ICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwotICAgIGZvciAoYXV0
byBpdCA9IHdlYWtTZXQtPndlYWtNYXBEYXRhKCktPmJlZ2luKCk7IGl0ICE9IHdlYWtTZXQtPndl
YWtNYXBEYXRhKCktPmVuZCgpOyArK2l0KSB7CisgICAgZm9yIChhdXRvIGl0ID0gd2Vha1NldC0+
YmVnaW4oKTsgaXQgIT0gd2Vha1NldC0+ZW5kKCk7ICsraXQpIHsKICAgICAgICAgSlNPYmplY3Qq
IGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAgICAgICAgIGVudHJ5LT5wdXRE
aXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidmFsdWUiKSwg
aXQtPmtleSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBmZXRjaGVkKyss
IGVudHJ5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vh
a01hcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtNYXAuY3BwCmlu
ZGV4IDNlZGE4MWM3OTEzYjdlNGNiNTJkM2IwZmIxZDEyMGFiNmFhZDU4N2YuLjgzYjhhNzUwNmVh
MjkxZjAxN2QzZmY1NTBhMTM1YWYyMDg2ZjViZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTV2Vha01hcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNXZWFrTWFwLmNwcApAQCAtMjcsMjUgKzI3LDEyIEBACiAjaW5jbHVkZSAiSlNX
ZWFrTWFwLmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiV2Vha01hcERh
dGEuaCIKKyNpbmNsdWRlICJXZWFrTWFwSW1wbC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY29u
c3QgQ2xhc3NJbmZvIEpTV2Vha01hcDo6c19pbmZvID0geyAiV2Vha01hcCIsICZCYXNlOjpzX2lu
Zm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWFrTWFwKSB9Owog
Ci12b2lkIEpTV2Vha01hcDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQotewotICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKLSAgICBtX3dlYWtNYXBEYXRhLnNldCh2bSwgdGhpcywgV2Vha01h
cERhdGE6OmNyZWF0ZSh2bSkpOwotfQotCi12b2lkIEpTV2Vha01hcDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgSlNXZWFrTWFwKiB0aGlzT2JqID0ganNDYXN0PEpT
V2Vha01hcCo+KGNlbGwpOwotICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmotPm1fd2Vha01hcERh
dGEpOwotfQotCiBTdHJpbmcgSlNXZWFrTWFwOjp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3Qq
LCBFeGVjU3RhdGUqKQogewogICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIk9iamVjdCIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrTWFwLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtNYXAuaAppbmRleCAxNzMzZDk2MzVmMzM2
ZGFmNzc0MTQ4ODRhNGZjYmY4ZDRhMGJlOWQ3Li42ZGYyNDMyMjI4NmQ5MTEzZWYzNmIxZjRkMGFm
Y2U1NTViODE1ZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1dlYWtNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtNYXAu
aApAQCAtMjYsMTQgKzI2LDEzIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCisjaW5jbHVkZSAiV2Vha01hcEltcGwuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNz
IFdlYWtNYXBEYXRhOwotCi1jbGFzcyBKU1dlYWtNYXAgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CitjbGFzcyBKU1dlYWtNYXAgZmluYWwgOiBwdWJsaWMgV2Vha01hcEltcGwgewogcHVibGlj
OgotICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHVzaW5nIEJhc2UgPSBX
ZWFrTWFwSW1wbDsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKQEAgLTU0LDI2ICs1Mywx
MyBAQCBjbGFzcyBKU1dlYWtNYXAgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgICAg
IHJldHVybiBjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKICAgICB9CiAKLSAgICBXZWFr
TWFwRGF0YSogd2Vha01hcERhdGEoKSB7IHJldHVybiBtX3dlYWtNYXBEYXRhLmdldCgpOyB9Ci0K
LSAgICBKU1ZhbHVlIGdldChDYWxsRnJhbWUqLCBKU09iamVjdCopOwotICAgIGJvb2wgaGFzKENh
bGxGcmFtZSosIEpTT2JqZWN0Kik7Ci0gICAgYm9vbCByZW1vdmUoQ2FsbEZyYW1lKiwgSlNPYmpl
Y3QqKTsKLQotICAgIHZvaWQgc2V0KENhbGxGcmFtZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSk7Ci0g
ICAgdm9pZCBjbGVhcihDYWxsRnJhbWUqKTsKLQogcHJpdmF0ZToKICAgICBKU1dlYWtNYXAoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUp
CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGlj
IFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqKTsKLQotICAg
IFdyaXRlQmFycmllcjxXZWFrTWFwRGF0YT4gbV93ZWFrTWFwRGF0YTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
ZWFrU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha1NldC5jcHAK
aW5kZXggMDYzZjM4MmI2MjcxNDdiOTQ1NjA2MTk3OTJkMjczYWJiZTY4MWJlNi4uYjNkMTM1ZTRk
ZTYzNTQyY2IwMjdkZDA5MTZmMjQ1ZGQyYjY3MjdmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1dlYWtTZXQuY3BwCkBAIC0yNywyNSArMjcsMTIgQEAKICNpbmNsdWRlICJK
U1dlYWtTZXQuaCIKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJXZWFrTWFw
RGF0YS5oIgorI2luY2x1ZGUgIldlYWtNYXBJbXBsLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBj
b25zdCBDbGFzc0luZm8gSlNXZWFrU2V0OjpzX2luZm8gPSB7ICJXZWFrU2V0IiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYWtTZXQpIH07
CiAKLXZvaWQgSlNXZWFrU2V0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIG1fd2Vha01hcERhdGEuc2V0KHZtLCB0aGlzLCBXZWFr
TWFwRGF0YTo6Y3JlYXRlKHZtKSk7Ci19Ci0KLXZvaWQgSlNXZWFrU2V0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQmFzZTo6dmlzaXRD
aGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBKU1dlYWtTZXQqIHRoaXNPYmogPSBqc0Nhc3Q8
SlNXZWFrU2V0Kj4oY2VsbCk7Ci0gICAgdmlzaXRvci5hcHBlbmQodGhpc09iai0+bV93ZWFrTWFw
RGF0YSk7Ci19Ci0KIFN0cmluZyBKU1dlYWtTZXQ6OnRvU3RyaW5nTmFtZShjb25zdCBKU0M6OkpT
T2JqZWN0KiwgRXhlY1N0YXRlKikKIHsKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJPYmplY3Qi
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha1NldC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrU2V0LmgKaW5kZXggMDE1NDc5
ODIyNWUyOGExYzA5ODhlNjg2ODg1YzE4YWZmYTQxMzU0OS4uMTE3MDE5MjY4M2UwMzYxNmMxODBj
MDBlNmU5ZGQ4NDRlZGQ5NTlmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXZWFrU2V0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
ZWFrU2V0LmgKQEAgLTI2LDE0ICsyNiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJK
U09iamVjdC5oIgorI2luY2x1ZGUgIldlYWtNYXBJbXBsLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1jbGFzcyBXZWFrTWFwRGF0YTsKLQotY2xhc3MgSlNXZWFrU2V0IDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgeworY2xhc3MgSlNXZWFrU2V0IGZpbmFsIDogcHVibGljIFdlYWtNYXBJbXBsIHsK
IHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICB1c2luZyBC
YXNlID0gV2Vha01hcEltcGw7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkBAIC01NCwy
NiArNTMsMTMgQEAgY2xhc3MgSlNXZWFrU2V0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewog
ICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CiAgICAgfQogCi0g
ICAgV2Vha01hcERhdGEqIHdlYWtNYXBEYXRhKCkgeyByZXR1cm4gbV93ZWFrTWFwRGF0YS5nZXQo
KTsgfQotCi0gICAgSlNWYWx1ZSBnZXQoQ2FsbEZyYW1lKiwgSlNPYmplY3QqKTsKLSAgICBib29s
IGhhcyhDYWxsRnJhbWUqLCBKU09iamVjdCopOwotICAgIGJvb2wgcmVtb3ZlKENhbGxGcmFtZSos
IEpTT2JqZWN0Kik7Ci0KLSAgICB2b2lkIHNldChDYWxsRnJhbWUqLCBKU09iamVjdCosIEpTVmFs
dWUpOwotICAgIHZvaWQgY2xlYXIoQ2FsbEZyYW1lKik7Ci0KIHByaXZhdGU6CiAgICAgSlNXZWFr
U2V0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAg
IHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7
Ci0KLSAgICBXcml0ZUJhcnJpZXI8V2Vha01hcERhdGE+IG1fd2Vha01hcERhdGE7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCAw
OTY4MzYxZWFjMTQwNmJhNWViZmI3OGY4ZDBhNzlmYmFlYzgzNmVjLi45OWQ4Zjk5Yjc2YzNjOTdh
NzgxYjQyMjk4ZTQ0MjIzMjFiZDUyYTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCkBAIC0xMTQsNyArMTE0LDcgQEAKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNs
dWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMuaCIKLSNpbmNsdWRl
ICJXZWFrTWFwRGF0YS5oIgorI2luY2x1ZGUgIldlYWtNYXBJbXBsLmgiCiAjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0
Zi9SZWFkV3JpdGVMb2NrLmg+CkBAIC0yNjQsNyArMjY0LDYgQEAgVk06OlZNKFZNVHlwZSB2bVR5
cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpj
cmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvcGVydHlUYWJsZVN0
cnVjdHVyZS5zZXQoKnRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKLSAgICB3ZWFrTWFwRGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIFdlYWtN
YXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgaW5mZXJy
ZWRWYWx1ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
ICAgICBpbmZlcnJlZFR5cGVUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlwZVRh
YmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAppbmRleCBjYzFmNWMxZjFhOWJkOGI1M2VlMWE4ODg2MzZjODYzNjk0NThi
ODg2Li45NmZjOWVkMWVmMzJiYTFlNjI4ZTU3ZTRhYzEwNjc3ZjRlOGVmZmY2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTM2OSw3ICszNjksNiBAQCBjbGFzcyBWTSA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxWTT4sIHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxW
TT4gewogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1
Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1Y3R1
cmU7Ci0gICAgU3Ryb25nPFN0cnVjdHVyZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0
dXJlPiBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJy
ZWRUeXBlVGFibGVTdHJ1Y3R1cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrTWFwRGF0YS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MjU5NmVlYjcy
MDIzMTNkMDM2N2Y3MzNhODMyNGU3NmU2NjI2YTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01h
cERhdGEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2Vha01hcERhdGEuaCIKLQotI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY29uc3QgQ2xh
c3NJbmZvIFdlYWtNYXBEYXRhOjpzX2luZm8gPSB7ICJXZWFrTWFwRGF0YSIsIG51bGxwdHIsIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2Vha01hcERhdGEpIH07Ci0KLVdl
YWtNYXBEYXRhOjpXZWFrTWFwRGF0YShWTSYgdm0pCi0gICAgOiBCYXNlKHZtLCB2bS53ZWFrTWFw
RGF0YVN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fZGVhZEtleUNsZWFuZXIodGhpcykKLXsKLX0K
LQotdm9pZCBXZWFrTWFwRGF0YTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQotewotICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKLX0KLQotdm9pZCBXZWFrTWFwRGF0YTo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCi17Ci0gICAgc3RhdGljX2Nhc3Q8V2Vha01hcERhdGEqPihjZWxsKS0+fldlYWtN
YXBEYXRhKCk7Ci19Ci0KLXNpemVfdCBXZWFrTWFwRGF0YTo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwq
IGNlbGwpCi17Ci0gICAgV2Vha01hcERhdGEqIHRoaXNPYmogPSBqc0Nhc3Q8V2Vha01hcERhdGEq
PihjZWxsKTsKLSAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsKSArICh0aGlzT2Jq
LT5tX21hcC5jYXBhY2l0eSgpICogKHNpemVvZihKU09iamVjdCopICsgc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikpKTsKLX0KLQotdm9pZCBXZWFrTWFwRGF0YTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgV2Vha01hcERhdGEqIHRoaXNPYmogPSBqc0Nhc3Q8
V2Vha01hcERhdGEqPihjZWxsKTsKLSAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6
ZXIoJnRoaXNPYmotPm1fZGVhZEtleUNsZWFuZXIpOwotICAgIHZpc2l0b3IuYWRkV2Vha1JlZmVy
ZW5jZUhhcnZlc3RlcigmdGhpc09iai0+bV9kZWFkS2V5Q2xlYW5lcik7Ci0KLSAgICAvLyBSb3Vn
aCBhcHByb3hpbWF0aW9uIG9mIHRoZSBleHRlcm5hbCBzdG9yYWdlIG5lZWRlZCBmb3IgdGhlIGhh
c2h0YWJsZS4KLSAgICAvLyBUaGlzIGlzbid0IGV4YWN0LCBidXQgaXQgaXMgY2xvc2UgZW5vdWdo
LCBhbmQgcHJvcG9ydGlvbmFsIHRvIHRoZSBhY3R1YWwKLSAgICAvLyBleHRlcm5hbCBtZW1vcnkg
dXNhZ2UuCi0gICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iai0+bV9t
YXAuY2FwYWNpdHkoKSAqIChzaXplb2YoSlNPYmplY3QqKSArIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pKSk7Ci19Ci0KLXZvaWQgV2Vha01hcERhdGE6OnNldChWTSYgdm0sIEpTT2JqZWN0
KiBrZXksIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgLy8gSGVyZSB3ZSBmb3JjZSB0aGUgd3JpdGUg
YmFycmllciBvbiB0aGUga2V5LgotICAgIGF1dG8gcmVzdWx0ID0gbV9tYXAuYWRkKFdyaXRlQmFy
cmllcjxKU09iamVjdD4odm0sIHRoaXMsIGtleSkuZ2V0KCksIFdyaXRlQmFycmllcjxVbmtub3du
PigpKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNldCh2bSwgdGhpcywgdmFsdWUpOwot
fQotCi1KU1ZhbHVlIFdlYWtNYXBEYXRhOjpnZXQoSlNPYmplY3QqIGtleSkKLXsKLSAgICBhdXRv
IGl0ZXIgPSBtX21hcC5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVybiBpdGVyLT52YWx1ZS5nZXQo
KTsKLX0KLQotYm9vbCBXZWFrTWFwRGF0YTo6cmVtb3ZlKEpTT2JqZWN0KiBrZXkpCi17Ci0gICAg
YXV0byBpdGVyID0gbV9tYXAuZmluZChrZXkpOwotICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX21hcC5yZW1vdmUoaXRlcik7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2Vha01hcERhdGE6OmNvbnRhaW5zKEpTT2JqZWN0KiBr
ZXkpCi17Ci0gICAgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGtleSk7Ci19Ci0KLXZvaWQgV2Vha01h
cERhdGE6OmNsZWFyKCkKLXsKLSAgICBtX21hcC5jbGVhcigpOwotfQotCi12b2lkIFdlYWtNYXBE
YXRhOjpEZWFkS2V5Q2xlYW5lcjo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlz
aXRvcikKLXsKLSAgICBtX2xpdmVLZXlDb3VudCA9IDA7Ci0gICAgZm9yIChhdXRvJiBwYWlyIDog
bV90YXJnZXQtPm1fbWFwKSB7Ci0gICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocGFpci5rZXkp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1fbGl2ZUtleUNvdW50Kys7Ci0gICAg
ICAgIHZpc2l0b3IuYXBwZW5kKHBhaXIudmFsdWUpOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VS
VChtX2xpdmVLZXlDb3VudCA8PSBtX3RhcmdldC0+bV9tYXAuc2l6ZSgpKTsKLX0KLQotdm9pZCBX
ZWFrTWFwRGF0YTo6RGVhZEtleUNsZWFuZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKLXsK
LSAgICBpZiAobV9saXZlS2V5Q291bnQgPiBtX3RhcmdldC0+bV9tYXAuc2l6ZSgpIC8gMikgewot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2xpdmVLZXlDb3VudCA8PSBtX3RhcmdldC0+bV9tYXAu
c2l6ZSgpKTsKLSAgICAgICAgaW50IGRlYWRDb3VudCA9IG1fdGFyZ2V0LT5tX21hcC5zaXplKCkg
LSBtX2xpdmVLZXlDb3VudDsKLSAgICAgICAgaWYgKCFkZWFkQ291bnQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIFZlY3RvcjxKU09iamVjdCo+IGRlYWRFbnRyaWVzOwotICAgICAgICBk
ZWFkRW50cmllcy5yZXNlcnZlQ2FwYWNpdHkoZGVhZENvdW50KTsKLSAgICAgICAgZm9yIChhdXRv
JiBwYWlyIDogbV90YXJnZXQtPm1fbWFwKSB7Ci0gICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJr
ZWQocGFpci5rZXkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZGVh
ZEVudHJpZXMudW5jaGVja2VkQXBwZW5kKHBhaXIua2V5KTsKLSAgICAgICAgfQotICAgICAgICBm
b3IgKGF1dG8mIGRlYWRFbnRyeSA6IGRlYWRFbnRyaWVzKQotICAgICAgICAgICAgbV90YXJnZXQt
Pm1fbWFwLnJlbW92ZShkZWFkRW50cnkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIE1hcFR5cGUg
bmV3TWFwOwotICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3RhcmdldC0+bV9tYXApIHsKLSAg
ICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocGFpci5rZXkpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgbmV3TWFwLmFkZChwYWlyLmtleSwgcGFpci52YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgbV90YXJnZXQtPm1fbWFwLnN3YXAobmV3TWFwKTsKLSAgICB9
Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtN
YXBEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwRGF0YS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTM2M2Q4NGQyNzVkNjhjYzliZTliNGRmNzQ4
NzEzNmQ0MDNkM2Q1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBEYXRhLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBXZWFrTWFwRGF0YSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewotcHVibGljOgotICAg
IHR5cGVkZWYgSlNDZWxsIEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwotCi0g
ICAgc3RhdGljIFdlYWtNYXBEYXRhKiBjcmVhdGUoVk0mIHZtKQotICAgIHsKLSAgICAgICAgV2Vh
a01hcERhdGEqIHdlYWtNYXBEYXRhID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2Vha01h
cERhdGE+KHZtLmhlYXApKSBXZWFrTWFwRGF0YSh2bSk7Ci0gICAgICAgIHdlYWtNYXBEYXRhLT5m
aW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiB3ZWFrTWFwRGF0YTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0KLSAgICB2b2lkIHNldChW
TSYsIEpTT2JqZWN0KiwgSlNWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBnZXQoSlNPYmplY3QqKTsKLSAg
ICBib29sIHJlbW92ZShKU09iamVjdCopOwotICAgIGJvb2wgY29udGFpbnMoSlNPYmplY3QqKTsK
LSAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICB0eXBlZGVmIEhh
c2hNYXA8SlNPYmplY3QqLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4+IE1hcFR5cGU7Ci0gICAgTWFw
VHlwZTo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigp
OyB9Ci0gICAgTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9t
YXAuZW5kKCk7IH0KLQotICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgp
OyB9Ci0KLXByaXZhdGU6Ci0gICAgV2Vha01hcERhdGEoVk0mKTsKLSAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwq
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotCi0gICAgY2xhc3MgRGVhZEtleUNsZWFu
ZXIgOiBwdWJsaWMgVW5jb25kaXRpb25hbEZpbmFsaXplciwgcHVibGljIFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgRGVhZEtleUNsZWFuZXIoV2Vha01hcERh
dGEqIHRhcmdldCkKLSAgICAgICAgICAgIDogbV90YXJnZXQodGFyZ2V0KQotICAgICAgICB7Ci0g
ICAgICAgIH0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMo
U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgpIG92ZXJyaWRlOwotICAgICAgICB1bnNpZ25lZCBtX2xpdmVLZXlDb3VudDsKLSAgICAg
ICAgV2Vha01hcERhdGEqIG1fdGFyZ2V0OwotICAgIH07Ci0gICAgRGVhZEtleUNsZWFuZXIgbV9k
ZWFkS2V5Q2xlYW5lcjsKLSAgICBNYXBUeXBlIG1fbWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1w
bC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDJlMjZiNDliMTE2MDM0MDg2NzE0ZmE1YzcyZDBjYWJjMWFlYTAwYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBsLmNw
cApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWFrTWFwSW1wbC5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVy
cy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gV2Vha01hcEltcGw6OnNf
aW5mbyA9IHsgIldlYWtNYXBJbXBsIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwg
Q1JFQVRFX01FVEhPRF9UQUJMRShXZWFrTWFwSW1wbCkgfTsKKworV2Vha01hcEltcGw6OldlYWtN
YXBJbXBsKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUpCisgICAgLCBtX2RlYWRLZXlDbGVhbmVyKHRoaXMpCit7Cit9CisKK3ZvaWQgV2Vha01h
cEltcGw6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7Cit9CisKK3ZvaWQgV2Vha01hcEltcGw6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQorewor
ICAgIHN0YXRpY19jYXN0PFdlYWtNYXBJbXBsKj4oY2VsbCktPn5XZWFrTWFwSW1wbCgpOworfQor
CitzaXplX3QgV2Vha01hcEltcGw6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQoreworICAg
IFdlYWtNYXBJbXBsKiB0aGlzT2JqID0ganNDYXN0PFdlYWtNYXBJbXBsKj4oY2VsbCk7CisgICAg
cmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCkgKyAodGhpc09iai0+bV9tYXAuY2FwYWNp
dHkoKSAqIChzaXplb2YoSlNPYmplY3QqKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSk7Cit9CisKK3ZvaWQgV2Vha01hcEltcGw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZp
c2l0b3IpOworICAgIFdlYWtNYXBJbXBsKiB0aGlzT2JqID0ganNDYXN0PFdlYWtNYXBJbXBsKj4o
Y2VsbCk7CisgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKCZ0aGlzT2JqLT5t
X2RlYWRLZXlDbGVhbmVyKTsKKyAgICB2aXNpdG9yLmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIo
JnRoaXNPYmotPm1fZGVhZEtleUNsZWFuZXIpOworCisgICAgLy8gUm91Z2ggYXBwcm94aW1hdGlv
biBvZiB0aGUgZXh0ZXJuYWwgc3RvcmFnZSBuZWVkZWQgZm9yIHRoZSBoYXNodGFibGUuCisgICAg
Ly8gVGhpcyBpc24ndCBleGFjdCwgYnV0IGl0IGlzIGNsb3NlIGVub3VnaCwgYW5kIHByb3BvcnRp
b25hbCB0byB0aGUgYWN0dWFsCisgICAgLy8gZXh0ZXJuYWwgbWVtb3J5IHVzYWdlLgorICAgIHZp
c2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmotPm1fbWFwLmNhcGFjaXR5KCkg
KiAoc2l6ZW9mKEpTT2JqZWN0KikgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwor
fQorCit2b2lkIFdlYWtNYXBJbXBsOjpzZXQoVk0mIHZtLCBKU09iamVjdCoga2V5LCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIC8vIEhlcmUgd2UgZm9yY2UgdGhlIHdyaXRlIGJhcnJpZXIgb24gdGhl
IGtleS4KKyAgICBhdXRvIHJlc3VsdCA9IG1fbWFwLmFkZChXcml0ZUJhcnJpZXI8SlNPYmplY3Q+
KHZtLCB0aGlzLCBrZXkpLmdldCgpLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7CisgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKK30KKworSlNWYWx1ZSBX
ZWFrTWFwSW1wbDo6Z2V0KEpTT2JqZWN0KiBrZXkpCit7CisgICAgYXV0byBpdGVyID0gbV9tYXAu
ZmluZChrZXkpOworICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gaXRlci0+dmFsdWUuZ2V0KCk7Cit9CisKK2Jvb2wg
V2Vha01hcEltcGw6OnJlbW92ZShKU09iamVjdCoga2V5KQoreworICAgIGF1dG8gaXRlciA9IG1f
bWFwLmZpbmQoa2V5KTsKKyAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgbV9tYXAucmVtb3ZlKGl0ZXIpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFdlYWtNYXBJbXBsOjpjb250YWlucyhKU09iamVjdCoga2V5KQoreworICAgIHJl
dHVybiBtX21hcC5jb250YWlucyhrZXkpOworfQorCit2b2lkIFdlYWtNYXBJbXBsOjpjbGVhcigp
Cit7CisgICAgbV9tYXAuY2xlYXIoKTsKK30KKwordm9pZCBXZWFrTWFwSW1wbDo6RGVhZEtleUNs
ZWFuZXI6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
V2Vha01hcEltcGwqIGltcGwgPSB0YXJnZXQoKTsKKyAgICBtX2xpdmVLZXlDb3VudCA9IDA7Cisg
ICAgZm9yIChhdXRvJiBwYWlyIDogaW1wbC0+bV9tYXApIHsKKyAgICAgICAgaWYgKCFIZWFwOjpp
c01hcmtlZChwYWlyLmtleSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9saXZl
S2V5Q291bnQrKzsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQocGFpci52YWx1ZSk7CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fbGl2ZUtleUNvdW50IDw9IGltcGwtPm1fbWFwLnNpemUoKSk7
Cit9CisKK3ZvaWQgV2Vha01hcEltcGw6OkRlYWRLZXlDbGVhbmVyOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseSgpCit7CisgICAgV2Vha01hcEltcGwqIGltcGwgPSB0YXJnZXQoKTsKKyAgICBpZiAo
bV9saXZlS2V5Q291bnQgPiBpbXBsLT5tX21hcC5zaXplKCkgLyAyKSB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1fbGl2ZUtleUNvdW50IDw9IGltcGwtPm1fbWFwLnNpemUoKSk7CisgICAgICAg
IGludCBkZWFkQ291bnQgPSBpbXBsLT5tX21hcC5zaXplKCkgLSBtX2xpdmVLZXlDb3VudDsKKyAg
ICAgICAgaWYgKCFkZWFkQ291bnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFZlY3Rv
cjxKU09iamVjdCo+IGRlYWRFbnRyaWVzOworICAgICAgICBkZWFkRW50cmllcy5yZXNlcnZlQ2Fw
YWNpdHkoZGVhZENvdW50KTsKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogaW1wbC0+bV9tYXAp
IHsKKyAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChwYWlyLmtleSkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBkZWFkRW50cmllcy51bmNoZWNrZWRBcHBlbmQo
cGFpci5rZXkpOworICAgICAgICB9CisgICAgICAgIGZvciAoYXV0byYgZGVhZEVudHJ5IDogZGVh
ZEVudHJpZXMpCisgICAgICAgICAgICBpbXBsLT5tX21hcC5yZW1vdmUoZGVhZEVudHJ5KTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBNYXBUeXBlIG5ld01hcDsKKyAgICAgICAgZm9yIChhdXRvJiBw
YWlyIDogaW1wbC0+bV9tYXApIHsKKyAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocGFp
ci5rZXkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbmV3TWFwLmFk
ZChwYWlyLmtleSwgcGFpci52YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaW1wbC0+bV9tYXAu
c3dhcChuZXdNYXApOworICAgIH0KK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtNYXBJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTYzMmQyMDBjNTJhODY1MTJlYjM3ZjIwNjI3
YzUwMjNiOTljNDI2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dlYWtNYXBJbXBsLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKKyNpbmNsdWRlICJT
dHJ1Y3R1cmUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBXZWFrTWFwSW1wbCA6IHB1Ymxp
YyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0OworCisgICAgdm9pZCBzZXQoVk0mLCBKU09iamVjdCosIEpTVmFsdWUp
OworICAgIEpTVmFsdWUgZ2V0KEpTT2JqZWN0Kik7CisgICAgYm9vbCByZW1vdmUoSlNPYmplY3Qq
KTsKKyAgICBib29sIGNvbnRhaW5zKEpTT2JqZWN0Kik7CisgICAgdm9pZCBjbGVhcigpOworCisg
ICAgREVDTEFSRV9JTkZPOworCisgICAgdHlwZWRlZiBIYXNoTWFwPEpTT2JqZWN0KiwgV3JpdGVC
YXJyaWVyPFVua25vd24+PiBNYXBUeXBlOworICAgIE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQorICAgIE1hcFR5cGU6OmNvbnN0
X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisKKyAgICBpbnQg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAg
V2Vha01hcEltcGwoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOworICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsKKyAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOworCisgICAgY2xhc3MgRGVhZEtleUNsZWFuZXIgOiBwdWJs
aWMgVW5jb25kaXRpb25hbEZpbmFsaXplciwgcHVibGljIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIg
eworICAgIHB1YmxpYzoKKyAgICAgICAgRGVhZEtleUNsZWFuZXIoV2Vha01hcEltcGwqIHRhcmdl
dCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh0YXJnZXQsIHRhcmdldCA9
PSB0YXJnZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBXZWFrTWFwSW1wbCogdGFyZ2V0KCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXZWFrTWFwSW1wbCo+
KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoV2Vha01hcEltcGws
IG1fZGVhZEtleUNsZWFuZXIpKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
dm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgICAg
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKyAgICAgICAgdW5zaWdu
ZWQgbV9saXZlS2V5Q291bnQ7CisgICAgfTsKKyAgICBEZWFkS2V5Q2xlYW5lciBtX2RlYWRLZXlD
bGVhbmVyOworICAgIE1hcFR5cGUgbV9tYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5cGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5jcHAK
aW5kZXggMTI4ODg5OWY5OTk4MGVhY2U2OTIxNmJkNjIyMjg5YzMwYjMyM2Q2OC4uYTAyOTgyMjRh
OWI2ZTllNDU3ZTk4MDBlYmEyZGI5OGMxNDExMWJkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5jcHAKQEAgLTI4LDcgKzI4LDcgQEAK
IAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYWtNYXAuaCIKLSNpbmNs
dWRlICJXZWFrTWFwRGF0YS5oIgorI2luY2x1ZGUgIldlYWtNYXBJbXBsLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgV2Vha01hcFByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5
bWJvbCwganNTdHJpbmcoJnZtLCAiV2Vha01hcCIpLCBEb250RW51bSB8IFJlYWRPbmx5KTsKIH0K
IAotc3RhdGljIFdlYWtNYXBEYXRhKiBnZXRXZWFrTWFwRGF0YShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNWYWx1ZSB2YWx1ZSkKK3N0YXRpYyBKU1dlYWtNYXAqIGdldFdlYWtNYXAoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTY0LDcg
KzY0LDcgQEAgc3RhdGljIFdlYWtNYXBEYXRhKiBnZXRXZWFrTWFwRGF0YShDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB9CiAKICAgICBpZiAoSlNXZWFrTWFwKiB3ZWFr
TWFwID0ganNEeW5hbWljQ2FzdDxKU1dlYWtNYXAqPih2bSwgdmFsdWUpKQotICAgICAgICByZXR1
cm4gd2Vha01hcC0+d2Vha01hcERhdGEoKTsKKyAgICAgICAgcmV0dXJuIHdlYWtNYXA7CiAKICAg
ICB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBXVEY6OkFTQ0lJTGl0ZXJhbCgiQ2Fs
bGVkIFdlYWtNYXAgZnVuY3Rpb24gb24gYSBub24tV2Vha01hcCBvYmplY3QiKSk7CiAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBXZWFrTWFwRGF0YSogZ2V0V2Vh
a01hcERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdmFsdWUpCiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha01hcERlbGV0ZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBXZWFrTWFwRGF0YSogbWFwID0gZ2V0V2Vha01hcERhdGEoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBhdXRvKiBtYXAgPSBnZXRXZWFrTWFw
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFtYXApCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSBr
ZXkgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwpAQCAtODEsNyArODEsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBEZWxldGUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha01hcEdl
dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBXZWFrTWFwRGF0YSogbWFwID0gZ2V0V2Vh
a01hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBhdXRvKiBt
YXAgPSBnZXRXZWFrTWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAg
aWYgKCFtYXApCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgSlNWYWx1ZSBrZXkgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwpAQCAtOTIsNyArOTIs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBHZXQoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9G
dW5jV2Vha01hcEhhcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBXZWFrTWFwRGF0YSog
bWFwID0gZ2V0V2Vha01hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsK
KyAgICBhdXRvKiBtYXAgPSBnZXRXZWFrTWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7CiAgICAgaWYgKCFtYXApCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSBrZXkgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwpA
QCAtMTA0LDcgKzEwNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5j
V2Vha01hcFNldChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAg
V2Vha01hcERhdGEqIG1hcCA9IGdldFdlYWtNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50
aGlzVmFsdWUoKSk7CisgICAgYXV0byogbWFwID0gZ2V0V2Vha01hcChjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICFt
YXApOwogICAgIGlmICghbWFwKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vh
a1NldFByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0
UHJvdG90eXBlLmNwcAppbmRleCBjYzUyYzhkMGE2NGNjMTU4Y2IwNjk0MGJlOWY1YjM2YzMzNmI2
NDllLi43ODEzMTc2MDFlYjk0YTIzMjBhZDhhMWFjMTBhODgxY2ZlMzY1OTJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0UHJvdG90eXBlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0UHJvdG90eXBlLmNwcApAQCAt
MjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2Vh
a1NldC5oIgotI2luY2x1ZGUgIldlYWtNYXBEYXRhLmgiCisjaW5jbHVkZSAiV2Vha01hcEltcGwu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBXZWFrU2V0UHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMt
PnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJXZWFrU2V0IiksIERvbnRFbnVtIHwg
UmVhZE9ubHkpOwogfQogCi1zdGF0aWMgV2Vha01hcERhdGEqIGdldFdlYWtNYXBEYXRhKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHZhbHVlKQorc3RhdGljIEpTV2Vha1NldCogZ2V0V2Vh
a1NldChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWTSYgdm0g
PSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtNjIsNyArNjIsNyBAQCBzdGF0aWMgV2Vha01hcERhdGEqIGdldFdlYWtNYXBEYXRh
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHZhbHVlKQogICAgIH0KIAogICAgIGlmIChK
U1dlYWtTZXQqIHdlYWtTZXQgPSBqc0R5bmFtaWNDYXN0PEpTV2Vha1NldCo+KHZtLCB2YWx1ZSkp
Ci0gICAgICAgIHJldHVybiB3ZWFrU2V0LT53ZWFrTWFwRGF0YSgpOworICAgICAgICByZXR1cm4g
d2Vha1NldDsKIAogICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIFdURjo6QVND
SUlMaXRlcmFsKCJDYWxsZWQgV2Vha1NldCBmdW5jdGlvbiBvbiBhIG5vbi1XZWFrU2V0IG9iamVj
dCIpKTsKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTcwLDIwICs3MCwyMCBAQCBzdGF0aWMgV2Vh
a01hcERhdGEqIGdldFdlYWtNYXBEYXRhKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHZh
bHVlKQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtTZXREZWxl
dGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgV2Vha01hcERhdGEqIG1hcCA9IGdldFdl
YWtNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFt
YXApCisgICAgYXV0byogc2V0ID0gZ2V0V2Vha1NldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkpOworICAgIGlmICghc2V0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUga2V5ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgw
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihrZXkuaXNPYmplY3QoKSAm
JiBtYXAtPnJlbW92ZShhc09iamVjdChrZXkpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGtleS5pc09iamVjdCgpICYmIHNldC0+cmVtb3ZlKGFzT2JqZWN0KGtleSkp
KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1NldEhh
cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBXZWFrTWFwRGF0YSogbWFwID0gZ2V0V2Vh
a01hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIW1h
cCkKKyAgICBhdXRvKiBzZXQgPSBnZXRXZWFrU2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlz
VmFsdWUoKSk7CisgICAgaWYgKCFzZXQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSBrZXkgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGtleS5pc09iamVjdCgpICYm
IG1hcC0+Y29udGFpbnMoYXNPYmplY3Qoa2V5KSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihrZXkuaXNPYmplY3QoKSAmJiBzZXQtPmNvbnRhaW5zKGFzT2JqZWN0KGtl
eSkpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1Nl
dEFkZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTkxLDE0ICs5MSwxNCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtTZXRBZGQoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFdlYWtNYXBEYXRhKiBtYXAgPSBnZXRXZWFrTWFw
RGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIEFTU0VSVCghIXNj
b3BlLmV4Y2VwdGlvbigpID09ICFtYXApOwotICAgIGlmICghbWFwKQorICAgIGF1dG8qIHNldCA9
IGdldFdlYWtTZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBBU1NF
UlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhc2V0KTsKKyAgICBpZiAoIXNldCkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIGtleSA9
IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCFrZXkuaXNPYmplY3QoKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3Bl
LCBXVEY6OkFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGVkIHRvIGFkZCBhIG5vbi1vYmplY3Qga2V5IHRv
IGEgV2Vha1NldCIpKSk7Ci0gICAgbWFwLT5zZXQodm0sIGFzT2JqZWN0KGtleSksIGpzVW5kZWZp
bmVkKCkpOworICAgIHNldC0+c2V0KHZtLCBhc09iamVjdChrZXkpLCBqc1VuZGVmaW5lZCgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogfQog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318958</attachid>
            <date>2017-08-23 19:30:09 -0700</date>
            <delta_ts>2017-08-23 22:17:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143919-20170824113008.patch</filename>
            <type>text/plain</type>
            <size>42212</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
OGZjNDAzN2FmNDZjZGMxZmNmMTEwYTAwYzQ5NjI1ZWE5MjY2OWE1Li44NGQzODEwNGI4YTE4OTAz
YmJlYjVhZDhkYzU3YWUwNjI3OGM1MjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw4MyBAQAogMjAxNy0wOC0yMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAorICAgICAgICBNZXJnZSBXZWFrTWFwRGF0YSBpbnRvIEpTV2Vha01hcCBhbmQgSlNX
ZWFrU2V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDM5MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGNoYW5nZXMgV2Vha01hcERhdGEgZnJvbSBKU0NlbGwgdG8gSlNEZXN0cnVjdGli
bGVPYmplY3QsCisgICAgICAgIHJlbmFtaW5nIGl0IHRvIFdlYWtNYXBJbXBsLCBhbmQgSlNXZWFr
TWFwIGFuZCBKU1dlYWtTZXQgc2ltcGx5IGluaGVyaXQKKyAgICAgICAgaXQgaW5zdGVhZCBvZiBz
ZXBhcmF0ZWx5IGFsbG9jYXRpbmcgV2Vha01hcERhdGEuIFRoaXMgcmVkdWNlcyBtZW1vcnkKKyAg
ICAgICAgY29uc3VtcHRpb24gYW5kIGFsbG9jYXRpb24gdGltZXMuCisKKyAgICAgICAgQWxzbyB0
aGlzIHBhdGNoIGEgYml0IG9wdGltaXplcyBzaXplb2YoRGVhZEtleUNsZWFuZXIpIGJ5IGRyb3Bw
aW5nIG1fdGFyZ2V0CisgICAgICAgIGZpZWxkLiBTaW5jZSB0aGlzIGNsYXNzIGlzIGFsd2F5cyBl
bWJlZGRlZCBpbiBXZWFrTWFwSW1wbCwgd2UgY2FuIGNhbGN1bGF0ZQorICAgICAgICBXZWFrTWFw
SW1wbCBhZGRyZXNzIGZyb20gdGhlIGFkZHJlc3Mgb2YgRGVhZEtleUNsZWFuZXIuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBvcHRpbWl6YXRpb24gY2hhbmdpbmcg
V2Vha01hcERhdGEgdG8gU2V0CisgICAgICAgIGZvciBKU1dlYWtTZXQuCisKKyAgICAgICAgKiBD
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHA6
CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrTWFwU2l6ZSk6
CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrTWFwRW50cmll
cyk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrU2V0U2l6
ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrU2V0RW50
cmllcyk6CisgICAgICAgICogcnVudGltZS9KU1dlYWtNYXAuY3BwOgorICAgICAgICAoSlNDOjpK
U1dlYWtNYXA6OmZpbmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWFr
TWFwOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTV2Vha01h
cC5oOgorICAgICAgICAoSlNDOjpKU1dlYWtNYXA6OmNyZWF0ZVN0cnVjdHVyZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpTV2Vha01hcDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SlNXZWFrTWFwOjp3ZWFrTWFwRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2Vh
a01hcDo6SlNXZWFrTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTV2Vha1NldC5j
cHA6CisgICAgICAgIChKU0M6OkpTV2Vha1NldDo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU1dlYWtTZXQ6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvSlNXZWFrU2V0Lmg6CisgICAgICAgIChKU0M6OkpTV2Vha1NldDo6Y3JlYXRl
U3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWFrU2V0OjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYWtTZXQ6OndlYWtNYXBEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6SlNXZWFrU2V0OjpKU1dlYWtTZXQpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBJbXBsLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBEYXRhLmNwcC4KKyAgICAgICAg
KEpTQzo6V2Vha01hcEltcGw6OldlYWtNYXBJbXBsKToKKyAgICAgICAgKEpTQzo6V2Vha01hcElt
cGw6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2Vha01hcEltcGw6OmRlc3Ryb3kp
OgorICAgICAgICAoSlNDOjpXZWFrTWFwSW1wbDo6ZXN0aW1hdGVkU2l6ZSk6CisgICAgICAgIChK
U0M6OldlYWtNYXBJbXBsOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6V2Vha01hcElt
cGw6OnNldCk6CisgICAgICAgIChKU0M6OldlYWtNYXBJbXBsOjpnZXQpOgorICAgICAgICAoSlND
OjpXZWFrTWFwSW1wbDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6V2Vha01hcEltcGw6OmNvbnRh
aW5zKToKKyAgICAgICAgKEpTQzo6V2Vha01hcEltcGw6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6
V2Vha01hcEltcGw6OkRlYWRLZXlDbGVhbmVyOjp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAg
ICAgKEpTQzo6V2Vha01hcEltcGw6OkRlYWRLZXlDbGVhbmVyOjpmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSk6CisgICAgICAgICogcnVudGltZS9XZWFrTWFwSW1wbC5oOiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuaC4KKyAgICAgICAgKEpTQzo6
V2Vha01hcEltcGw6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Vha01hcEltcGw6OmVu
ZCBjb25zdCk6CisgICAgICAgIChKU0M6OldlYWtNYXBJbXBsOjpzaXplIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6V2Vha01hcEltcGw6OkRlYWRLZXlDbGVhbmVyOjpEZWFkS2V5Q2xlYW5lcik6Cisg
ICAgICAgIChKU0M6OldlYWtNYXBJbXBsOjpEZWFkS2V5Q2xlYW5lcjo6dGFyZ2V0KToKKyAgICAg
ICAgKiBydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRXZWFr
TWFwKToKKyAgICAgICAgKEpTQzo6cHJvdG9GdW5jV2Vha01hcERlbGV0ZSk6CisgICAgICAgIChK
U0M6OnByb3RvRnVuY1dlYWtNYXBHZXQpOgorICAgICAgICAoSlNDOjpwcm90b0Z1bmNXZWFrTWFw
SGFzKToKKyAgICAgICAgKEpTQzo6cHJvdG9GdW5jV2Vha01hcFNldCk6CisgICAgICAgIChKU0M6
OmdldFdlYWtNYXBEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1dlYWtTZXRQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRXZWFrU2V0KToKKyAgICAgICAgKEpTQzo6cHJv
dG9GdW5jV2Vha1NldERlbGV0ZSk6CisgICAgICAgIChKU0M6OnByb3RvRnVuY1dlYWtTZXRIYXMp
OgorICAgICAgICAoSlNDOjpwcm90b0Z1bmNXZWFrU2V0QWRkKToKKyAgICAgICAgKEpTQzo6Z2V0
V2Vha01hcERhdGEpOiBEZWxldGVkLgorCisyMDE3LTA4LTIzICBZdXN1a2UgU3V6dWtpICA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPgorCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCBmb3IgdGVzdDI2
MgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1OTE1
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA2ZDA4NTkxNTQwOTMyZTAx
NzA2ZmRkZWUyNDQ2NmE4Zjc1ZTg3MTJlLi5iZTkzYTEyZjE2NWU0NzczYTE0YWFjYTBjYzk4NjE1
NTIzNDA1Y2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC05MzYsNyAr
OTM2LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL1Zhck9mZnNl
dC5jcHAKICAgICBydW50aW1lL1dhdGNoZG9nLmNwcAogICAgIHJ1bnRpbWUvV2Vha01hcENvbnN0
cnVjdG9yLmNwcAotICAgIHJ1bnRpbWUvV2Vha01hcERhdGEuY3BwCisgICAgcnVudGltZS9XZWFr
TWFwSW1wbC5jcHAKICAgICBydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwCiAgICAgcnVudGlt
ZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9XZWFrU2V0UHJvdG90eXBlLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwYTE2YWQ1ZTBkYTQ0ZWZkODVhY2Q4
NDIzNDYxYWMwYzUxNWMxM2M1Li4zYTZmODE2Mjg1NjNlMDg3Yjc5YmYwODUwZjI0ZTc5OWYwMDg2
YWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjA1Niw4ICsyMDU2LDggQEAK
IAkJQTdDQTNBRTYxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Q0EzQUUwMTdEQTQxQUUw
MDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBlLmggKi87IH07CiAJCUE3Q0EzQUU3MTdEQTQxQUUw
MDY1MzhBRiAvKiBKU1dlYWtNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTdDQTNBRTExN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5jcHAg
Ki87IH07CiAJCUE3Q0EzQUU4MTdEQTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Q0EzQUUyMTdEQTQxQUUw
MDY1MzhBRiAvKiBKU1dlYWtNYXAuaCAqLzsgfTsKLQkJQTdDQTNBRUIxN0RBNTE2ODAwNjUzOEFG
IC8qIFdlYWtNYXBEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3Q0EzQUU5MTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5jcHAgKi87
IH07Ci0JCUE3Q0EzQUVDMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDQTNBRUExN0RBNTE2ODAw
NjUzOEFGIC8qIFdlYWtNYXBEYXRhLmggKi87IH07CisJCUE3Q0EzQUVCMTdEQTUxNjgwMDY1MzhB
RiAvKiBXZWFrTWFwSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBN0NBM0FFOTE3REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcEltcGwuY3BwICov
OyB9OworCQlBN0NBM0FFQzE3REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcEltcGwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Q0EzQUVBMTdEQTUxNjgw
MDY1MzhBRiAvKiBXZWFrTWFwSW1wbC5oICovOyB9OwogCQlBN0Q4MDFBNDE4ODBENjZFMDAyNkMz
OUIgLyogQnVpbHRpbkV4ZWN1dGFibGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDgwMUExMTg4MEQ2NkUwMDI2QzM5QiAvKiBCdWlsdGluRXhl
Y3V0YWJsZXMuY3BwICovOyB9OwogCQlBN0Q4MDFBNTE4ODBENjZFMDAyNkMzOUIgLyogQnVpbHRp
bkV4ZWN1dGFibGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBN0Q4MDFBMjE4ODBENjZFMDAyNkMzOUIgLyogQnVpbHRpbkV4ZWN1dGFibGVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdEODAxQTgx
ODgwRDZBODAwMjZDMzlCIC8qIEpTQ0J1aWx0aW5zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDgwMUE2MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NC
dWlsdGlucy5jcHAgKi87IH07CkBAIC00NzE2LDggKzQ3MTYsOCBAQAogCQlBN0NBM0FFMDE3REE0
MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWFrTWFwUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3Q0EzQUUxMTdEQTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWFrTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTdDQTNBRTIxN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYWtNYXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQTdDQTNBRTkxN0RBNTE2ODAwNjUzOEFGIC8qIFdlYWtNYXBEYXRh
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYWtNYXBEYXRhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdDQTNBRUExN0RBNTE2ODAwNjUzOEFG
IC8qIFdlYWtNYXBEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtN
YXBEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3Q0EzQUU5MTdEQTUxNjgw
MDY1MzhBRiAvKiBXZWFrTWFwSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWFrTWFwSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3
Q0EzQUVBMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwSW1wbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWFrTWFwSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBN0Q4MDFBMDE4ODBENjZFMDAyNkMzOUIgLyogQXJyYXlQcm90b3R5cGUuanMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBBcnJheVByb3RvdHlwZS5qczsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdEODAxQTExODgwRDY2RTAwMjZDMzlCIC8qIEJ1
aWx0aW5FeGVjdXRhYmxlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBCdWlsdGluRXhlY3V0YWJsZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
N0Q4MDFBMjE4ODBENjZFMDAyNkMzOUIgLyogQnVpbHRpbkV4ZWN1dGFibGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1aWx0aW5FeGVjdXRhYmxlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNzIzNyw4ICs3MjM3LDggQEAKIAkJCQlBRDg2QTkzRDFBQTRE
ODdDMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oICovLAogCQkJCUE3Q0EzQUREMTdEQTQx
QUUwMDY1MzhBRiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUE3Q0EzQURFMTdE
QTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuaCAqLywKLQkJCQlBN0NBM0FFOTE3
REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcERhdGEuY3BwICovLAotCQkJCUE3Q0EzQUVBMTdEQTUx
NjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5oICovLAorCQkJCUE3Q0EzQUU5MTdEQTUxNjgwMDY1
MzhBRiAvKiBXZWFrTWFwSW1wbC5jcHAgKi8sCisJCQkJQTdDQTNBRUExN0RBNTE2ODAwNjUzOEFG
IC8qIFdlYWtNYXBJbXBsLmggKi8sCiAJCQkJQTdDQTNBREYxN0RBNDFBRTAwNjUzOEFGIC8qIFdl
YWtNYXBQcm90b3R5cGUuY3BwICovLAogCQkJCUE3Q0EzQUUwMTdEQTQxQUUwMDY1MzhBRiAvKiBX
ZWFrTWFwUHJvdG90eXBlLmggKi8sCiAJCQkJNzA5RkI4NjMxQUUzMzVDNjAwMzlEMDY5IC8qIFdl
YWtTZXRDb25zdHJ1Y3Rvci5jcHAgKi8sCkBAIC05NjYwLDcgKzk2NjAsNyBAQAogCQkJCTE0RTg0
RkEyMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRC
RTdEMzMxNzEzNUNGNDAwRDE4MDdBIC8qIFdlYWtJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0NBM0FFNDE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcENvbnN0cnVjdG9yLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlBN0NBM0FFQzE3REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcERhdGEuaCBp
biBIZWFkZXJzICovLAorCQkJCUE3Q0EzQUVDMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwSW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTYxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtN
YXBQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0
QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZB
MTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTE1MCw3
ICsxMTE1MCw3IEBACiAJCQkJMTRFODRGOUUxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEY3MjU2NTE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hh
bmRsZU93bmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Q0EzQUUzMTdEQTQxQUUwMDY1MzhB
RiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTdDQTNBRUIx
N0RBNTE2ODAwNjUzOEFGIC8qIFdlYWtNYXBEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3
Q0EzQUVCMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwSW1wbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0NBM0FFNTE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNEU4NEZBMDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha1NldC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3MDlGQjg2OTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldENv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAppbmRleCBmMmI3MjQw
MTBjMjBiMzI3NWY0MTM5MzdmMjE3MDljMzYzMjcyMWU5Li5lZDIwZDA4YmIyNjJmM2I0MmU3ODJh
YmM3MTc3OTBmMzU1MzA1ODc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcApAQCAtNTgsNyArNTgsNyBAQAog
I2luY2x1ZGUgIlNldEl0ZXJhdG9yUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5o
IgogI2luY2x1ZGUgIlR5cGVkQXJyYXlJbmxpbmVzLmgiCi0jaW5jbHVkZSAiV2Vha01hcERhdGEu
aCIKKyNpbmNsdWRlICJXZWFrTWFwSW1wbC5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBA
IC00MjksNyArNDI5LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha01hcFNp
emUoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmICghd2Vha01hcCkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4ganNOdW1iZXIod2Vha01hcC0+d2Vha01hcERhdGEo
KS0+c2l6ZSgpKTsKKyAgICByZXR1cm4ganNOdW1iZXIod2Vha01hcC0+c2l6ZSgpKTsKIH0KIAog
SlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha01hcEVudHJpZXMoRXhlY1N0YXRlKiBl
eGVjKQpAQCAtNDU0LDcgKzQ1NCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Ondl
YWtNYXBFbnRyaWVzKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gY29u
c3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU1ZhbHVlKCkpOwotICAgIGZvciAoYXV0byBpdCA9IHdlYWtNYXAtPndlYWtNYXBE
YXRhKCktPmJlZ2luKCk7IGl0ICE9IHdlYWtNYXAtPndlYWtNYXBEYXRhKCktPmVuZCgpOyArK2l0
KSB7CisgICAgZm9yIChhdXRvIGl0ID0gd2Vha01hcC0+YmVnaW4oKTsgaXQgIT0gd2Vha01hcC0+
ZW5kKCk7ICsraXQpIHsKICAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYyk7CiAgICAgICAgIGVudHJ5LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAia2V5IiksIGl0LT5rZXkpOwogICAgICAgICBlbnRyeS0+
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInZhbHVl
IiksIGl0LT52YWx1ZS5nZXQoKSk7CkBAIC00NzgsNyArNDc4LDcgQEAgSlNWYWx1ZSBKU0luamVj
dGVkU2NyaXB0SG9zdDo6d2Vha1NldFNpemUoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmICghd2Vh
a1NldCkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4ganNOdW1i
ZXIod2Vha1NldC0+d2Vha01hcERhdGEoKS0+c2l6ZSgpKTsKKyAgICByZXR1cm4ganNOdW1iZXIo
d2Vha1NldC0+c2l6ZSgpKTsKIH0KIAogSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vh
a1NldEVudHJpZXMoRXhlY1N0YXRlKiBleGVjKQpAQCAtNTAzLDcgKzUwMyw3IEBAIEpTVmFsdWUg
SlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtTZXRFbnRyaWVzKEV4ZWNTdGF0ZSogZXhlYykKIAog
ICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwotICAgIGZvciAoYXV0
byBpdCA9IHdlYWtTZXQtPndlYWtNYXBEYXRhKCktPmJlZ2luKCk7IGl0ICE9IHdlYWtTZXQtPndl
YWtNYXBEYXRhKCktPmVuZCgpOyArK2l0KSB7CisgICAgZm9yIChhdXRvIGl0ID0gd2Vha1NldC0+
YmVnaW4oKTsgaXQgIT0gd2Vha1NldC0+ZW5kKCk7ICsraXQpIHsKICAgICAgICAgSlNPYmplY3Qq
IGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAgICAgICAgIGVudHJ5LT5wdXRE
aXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidmFsdWUiKSwg
aXQtPmtleSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBmZXRjaGVkKyss
IGVudHJ5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vh
a01hcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtNYXAuY3BwCmlu
ZGV4IDNlZGE4MWM3OTEzYjdlNGNiNTJkM2IwZmIxZDEyMGFiNmFhZDU4N2YuLjgzYjhhNzUwNmVh
MjkxZjAxN2QzZmY1NTBhMTM1YWYyMDg2ZjViZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTV2Vha01hcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNXZWFrTWFwLmNwcApAQCAtMjcsMjUgKzI3LDEyIEBACiAjaW5jbHVkZSAiSlNX
ZWFrTWFwLmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiV2Vha01hcERh
dGEuaCIKKyNpbmNsdWRlICJXZWFrTWFwSW1wbC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY29u
c3QgQ2xhc3NJbmZvIEpTV2Vha01hcDo6c19pbmZvID0geyAiV2Vha01hcCIsICZCYXNlOjpzX2lu
Zm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWFrTWFwKSB9Owog
Ci12b2lkIEpTV2Vha01hcDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQotewotICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKLSAgICBtX3dlYWtNYXBEYXRhLnNldCh2bSwgdGhpcywgV2Vha01h
cERhdGE6OmNyZWF0ZSh2bSkpOwotfQotCi12b2lkIEpTV2Vha01hcDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgSlNXZWFrTWFwKiB0aGlzT2JqID0ganNDYXN0PEpT
V2Vha01hcCo+KGNlbGwpOwotICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmotPm1fd2Vha01hcERh
dGEpOwotfQotCiBTdHJpbmcgSlNXZWFrTWFwOjp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3Qq
LCBFeGVjU3RhdGUqKQogewogICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIk9iamVjdCIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrTWFwLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtNYXAuaAppbmRleCAxNzMzZDk2MzVmMzM2
ZGFmNzc0MTQ4ODRhNGZjYmY4ZDRhMGJlOWQ3Li42ZGYyNDMyMjI4NmQ5MTEzZWYzNmIxZjRkMGFm
Y2U1NTViODE1ZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1dlYWtNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtNYXAu
aApAQCAtMjYsMTQgKzI2LDEzIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCisjaW5jbHVkZSAiV2Vha01hcEltcGwuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNz
IFdlYWtNYXBEYXRhOwotCi1jbGFzcyBKU1dlYWtNYXAgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CitjbGFzcyBKU1dlYWtNYXAgZmluYWwgOiBwdWJsaWMgV2Vha01hcEltcGwgewogcHVibGlj
OgotICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHVzaW5nIEJhc2UgPSBX
ZWFrTWFwSW1wbDsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKQEAgLTU0LDI2ICs1Mywx
MyBAQCBjbGFzcyBKU1dlYWtNYXAgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgICAg
IHJldHVybiBjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKICAgICB9CiAKLSAgICBXZWFr
TWFwRGF0YSogd2Vha01hcERhdGEoKSB7IHJldHVybiBtX3dlYWtNYXBEYXRhLmdldCgpOyB9Ci0K
LSAgICBKU1ZhbHVlIGdldChDYWxsRnJhbWUqLCBKU09iamVjdCopOwotICAgIGJvb2wgaGFzKENh
bGxGcmFtZSosIEpTT2JqZWN0Kik7Ci0gICAgYm9vbCByZW1vdmUoQ2FsbEZyYW1lKiwgSlNPYmpl
Y3QqKTsKLQotICAgIHZvaWQgc2V0KENhbGxGcmFtZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSk7Ci0g
ICAgdm9pZCBjbGVhcihDYWxsRnJhbWUqKTsKLQogcHJpdmF0ZToKICAgICBKU1dlYWtNYXAoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUp
CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGlj
IFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqKTsKLQotICAg
IFdyaXRlQmFycmllcjxXZWFrTWFwRGF0YT4gbV93ZWFrTWFwRGF0YTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
ZWFrU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha1NldC5jcHAK
aW5kZXggMDYzZjM4MmI2MjcxNDdiOTQ1NjA2MTk3OTJkMjczYWJiZTY4MWJlNi4uYjNkMTM1ZTRk
ZTYzNTQyY2IwMjdkZDA5MTZmMjQ1ZGQyYjY3MjdmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1dlYWtTZXQuY3BwCkBAIC0yNywyNSArMjcsMTIgQEAKICNpbmNsdWRlICJK
U1dlYWtTZXQuaCIKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJXZWFrTWFw
RGF0YS5oIgorI2luY2x1ZGUgIldlYWtNYXBJbXBsLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBj
b25zdCBDbGFzc0luZm8gSlNXZWFrU2V0OjpzX2luZm8gPSB7ICJXZWFrU2V0IiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYWtTZXQpIH07
CiAKLXZvaWQgSlNXZWFrU2V0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIG1fd2Vha01hcERhdGEuc2V0KHZtLCB0aGlzLCBXZWFr
TWFwRGF0YTo6Y3JlYXRlKHZtKSk7Ci19Ci0KLXZvaWQgSlNXZWFrU2V0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQmFzZTo6dmlzaXRD
aGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBKU1dlYWtTZXQqIHRoaXNPYmogPSBqc0Nhc3Q8
SlNXZWFrU2V0Kj4oY2VsbCk7Ci0gICAgdmlzaXRvci5hcHBlbmQodGhpc09iai0+bV93ZWFrTWFw
RGF0YSk7Ci19Ci0KIFN0cmluZyBKU1dlYWtTZXQ6OnRvU3RyaW5nTmFtZShjb25zdCBKU0M6OkpT
T2JqZWN0KiwgRXhlY1N0YXRlKikKIHsKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJPYmplY3Qi
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha1NldC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrU2V0LmgKaW5kZXggMDE1NDc5
ODIyNWUyOGExYzA5ODhlNjg2ODg1YzE4YWZmYTQxMzU0OS4uMTE3MDE5MjY4M2UwMzYxNmMxODBj
MDBlNmU5ZGQ4NDRlZGQ5NTlmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXZWFrU2V0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
ZWFrU2V0LmgKQEAgLTI2LDE0ICsyNiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJK
U09iamVjdC5oIgorI2luY2x1ZGUgIldlYWtNYXBJbXBsLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1jbGFzcyBXZWFrTWFwRGF0YTsKLQotY2xhc3MgSlNXZWFrU2V0IDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgeworY2xhc3MgSlNXZWFrU2V0IGZpbmFsIDogcHVibGljIFdlYWtNYXBJbXBsIHsK
IHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICB1c2luZyBC
YXNlID0gV2Vha01hcEltcGw7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkBAIC01NCwy
NiArNTMsMTMgQEAgY2xhc3MgSlNXZWFrU2V0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewog
ICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CiAgICAgfQogCi0g
ICAgV2Vha01hcERhdGEqIHdlYWtNYXBEYXRhKCkgeyByZXR1cm4gbV93ZWFrTWFwRGF0YS5nZXQo
KTsgfQotCi0gICAgSlNWYWx1ZSBnZXQoQ2FsbEZyYW1lKiwgSlNPYmplY3QqKTsKLSAgICBib29s
IGhhcyhDYWxsRnJhbWUqLCBKU09iamVjdCopOwotICAgIGJvb2wgcmVtb3ZlKENhbGxGcmFtZSos
IEpTT2JqZWN0Kik7Ci0KLSAgICB2b2lkIHNldChDYWxsRnJhbWUqLCBKU09iamVjdCosIEpTVmFs
dWUpOwotICAgIHZvaWQgY2xlYXIoQ2FsbEZyYW1lKik7Ci0KIHByaXZhdGU6CiAgICAgSlNXZWFr
U2V0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAg
IHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7
Ci0KLSAgICBXcml0ZUJhcnJpZXI8V2Vha01hcERhdGE+IG1fd2Vha01hcERhdGE7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCAw
OTY4MzYxZWFjMTQwNmJhNWViZmI3OGY4ZDBhNzlmYmFlYzgzNmVjLi5kZGE0MjlkNDkxNDE3MzYy
MDM4Mjc1ZDQyODgxMjA1ZTkwMjI5MjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCkBAIC0xMTQsNyArMTE0LDYgQEAKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNs
dWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMuaCIKLSNpbmNsdWRl
ICJXZWFrTWFwRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUg
PHd0Zi9Qcm9jZXNzSUQuaD4KICNpbmNsdWRlIDx3dGYvUmVhZFdyaXRlTG9jay5oPgpAQCAtMjY0
LDcgKzI2Myw2IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAg
ICB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwog
ICAgIHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwogICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0
eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgd2Vha01h
cERhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWFrTWFwRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGluZmVycmVkVmFsdWVTdHJ1Y3R1cmUuc2V0KCp0aGlz
LCBJbmZlcnJlZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAg
ICAgaW5mZXJyZWRUeXBlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRUeXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgaW5mZXJyZWRUeXBlVGFibGVTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlz
LCAwLCBqc051bGwoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggY2MxZjVj
MWYxYTliZDhiNTNlZTFhODg4NjM2Yzg2MzY5NDU4Yjg4Ni4uOTZmYzllZDFlZjMyYmExZTYyOGU1
N2U0YWMxMDY3N2Y0ZThlZmZmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0z
NjksNyArMzY5LDYgQEAgY2xhc3MgVk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+
LCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8Vk0+IHsKICAgICBTdHJvbmc8U3RydWN0dXJl
PiB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8
U3RydWN0dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOwotICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IHdlYWtNYXBEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVmFs
dWVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRUeXBlU3RydWN0dXJl
OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVHlwZVRhYmxlU3RydWN0dXJlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAxNDI1OTZlZWI3MjAyMzEzZDAzNjdmNzMzYTgzMjRlNzZlNjYy
NmE0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBEYXRhLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIldlYWtNYXBEYXRhLmgiCi0KLSNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgi
Ci0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNvbnN0IENsYXNzSW5mbyBXZWFrTWFwRGF0YTo6c19pbmZv
ID0geyAiV2Vha01hcERhdGEiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKFdlYWtNYXBEYXRhKSB9OwotCi1XZWFrTWFwRGF0YTo6V2Vha01hcERhdGEoVk0m
IHZtKQotICAgIDogQmFzZSh2bSwgdm0ud2Vha01hcERhdGFTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAg
LCBtX2RlYWRLZXlDbGVhbmVyKHRoaXMpCi17Ci19Ci0KLXZvaWQgV2Vha01hcERhdGE6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci19Ci0K
LXZvaWQgV2Vha01hcERhdGE6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIHN0YXRpY19j
YXN0PFdlYWtNYXBEYXRhKj4oY2VsbCktPn5XZWFrTWFwRGF0YSgpOwotfQotCi1zaXplX3QgV2Vh
a01hcERhdGE6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQotewotICAgIFdlYWtNYXBEYXRh
KiB0aGlzT2JqID0ganNDYXN0PFdlYWtNYXBEYXRhKj4oY2VsbCk7Ci0gICAgcmV0dXJuIEJhc2U6
OmVzdGltYXRlZFNpemUoY2VsbCkgKyAodGhpc09iai0+bV9tYXAuY2FwYWNpdHkoKSAqIChzaXpl
b2YoSlNPYmplY3QqKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7Ci19Ci0KLXZv
aWQgV2Vha01hcERhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKLXsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotICAg
IFdlYWtNYXBEYXRhKiB0aGlzT2JqID0ganNDYXN0PFdlYWtNYXBEYXRhKj4oY2VsbCk7Ci0gICAg
dmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKCZ0aGlzT2JqLT5tX2RlYWRLZXlDbGVh
bmVyKTsKLSAgICB2aXNpdG9yLmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoJnRoaXNPYmotPm1f
ZGVhZEtleUNsZWFuZXIpOwotCi0gICAgLy8gUm91Z2ggYXBwcm94aW1hdGlvbiBvZiB0aGUgZXh0
ZXJuYWwgc3RvcmFnZSBuZWVkZWQgZm9yIHRoZSBoYXNodGFibGUuCi0gICAgLy8gVGhpcyBpc24n
dCBleGFjdCwgYnV0IGl0IGlzIGNsb3NlIGVub3VnaCwgYW5kIHByb3BvcnRpb25hbCB0byB0aGUg
YWN0dWFsCi0gICAgLy8gZXh0ZXJuYWwgbWVtb3J5IHVzYWdlLgotICAgIHZpc2l0b3IucmVwb3J0
RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmotPm1fbWFwLmNhcGFjaXR5KCkgKiAoc2l6ZW9mKEpT
T2JqZWN0KikgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwotfQotCi12b2lkIFdl
YWtNYXBEYXRhOjpzZXQoVk0mIHZtLCBKU09iamVjdCoga2V5LCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIC8vIEhlcmUgd2UgZm9yY2UgdGhlIHdyaXRlIGJhcnJpZXIgb24gdGhlIGtleS4KLSAgICBh
dXRvIHJlc3VsdCA9IG1fbWFwLmFkZChXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KHZtLCB0aGlzLCBr
ZXkpLmdldCgpLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKLX0KLQotSlNWYWx1ZSBXZWFrTWFwRGF0YTo6
Z2V0KEpTT2JqZWN0KiBrZXkpCi17Ci0gICAgYXV0byBpdGVyID0gbV9tYXAuZmluZChrZXkpOwot
ICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICByZXR1cm4gaXRlci0+dmFsdWUuZ2V0KCk7Ci19Ci0KLWJvb2wgV2Vha01hcERhdGE6
OnJlbW92ZShKU09iamVjdCoga2V5KQotewotICAgIGF1dG8gaXRlciA9IG1fbWFwLmZpbmQoa2V5
KTsKLSAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgbV9tYXAucmVtb3ZlKGl0ZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdl
YWtNYXBEYXRhOjpjb250YWlucyhKU09iamVjdCoga2V5KQotewotICAgIHJldHVybiBtX21hcC5j
b250YWlucyhrZXkpOwotfQotCi12b2lkIFdlYWtNYXBEYXRhOjpjbGVhcigpCi17Ci0gICAgbV9t
YXAuY2xlYXIoKTsKLX0KLQotdm9pZCBXZWFrTWFwRGF0YTo6RGVhZEtleUNsZWFuZXI6OnZpc2l0
V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9saXZlS2V5Q291
bnQgPSAwOwotICAgIGZvciAoYXV0byYgcGFpciA6IG1fdGFyZ2V0LT5tX21hcCkgewotICAgICAg
ICBpZiAoIUhlYXA6OmlzTWFya2VkKHBhaXIua2V5KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBtX2xpdmVLZXlDb3VudCsrOwotICAgICAgICB2aXNpdG9yLmFwcGVuZChwYWlyLnZh
bHVlKTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9saXZlS2V5Q291bnQgPD0gbV90YXJn
ZXQtPm1fbWFwLnNpemUoKSk7Ci19Ci0KLXZvaWQgV2Vha01hcERhdGE6OkRlYWRLZXlDbGVhbmVy
OjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCi17Ci0gICAgaWYgKG1fbGl2ZUtleUNvdW50ID4g
bV90YXJnZXQtPm1fbWFwLnNpemUoKSAvIDIpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9s
aXZlS2V5Q291bnQgPD0gbV90YXJnZXQtPm1fbWFwLnNpemUoKSk7Ci0gICAgICAgIGludCBkZWFk
Q291bnQgPSBtX3RhcmdldC0+bV9tYXAuc2l6ZSgpIC0gbV9saXZlS2V5Q291bnQ7Ci0gICAgICAg
IGlmICghZGVhZENvdW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBWZWN0b3I8SlNP
YmplY3QqPiBkZWFkRW50cmllczsKLSAgICAgICAgZGVhZEVudHJpZXMucmVzZXJ2ZUNhcGFjaXR5
KGRlYWRDb3VudCk7Ci0gICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fdGFyZ2V0LT5tX21hcCkg
ewotICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHBhaXIua2V5KSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGRlYWRFbnRyaWVzLnVuY2hlY2tlZEFwcGVuZChw
YWlyLmtleSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChhdXRvJiBkZWFkRW50cnkgOiBkZWFk
RW50cmllcykKLSAgICAgICAgICAgIG1fdGFyZ2V0LT5tX21hcC5yZW1vdmUoZGVhZEVudHJ5KTsK
LSAgICB9IGVsc2UgewotICAgICAgICBNYXBUeXBlIG5ld01hcDsKLSAgICAgICAgZm9yIChhdXRv
JiBwYWlyIDogbV90YXJnZXQtPm1fbWFwKSB7Ci0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFy
a2VkKHBhaXIua2V5KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG5l
d01hcC5hZGQocGFpci5rZXksIHBhaXIudmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIG1fdGFy
Z2V0LT5tX21hcC5zd2FwKG5ld01hcCk7Ci0gICAgfQotfQotCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwRGF0YS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggY2UzNjNkODRkMjc1ZDY4Y2M5YmU5YjRkZjc0ODcxMzZkNDAzZDNkNS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAi
U3RydWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgV2Vha01hcERhdGEgZmluYWwg
OiBwdWJsaWMgSlNDZWxsIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKLQotICAgIHN0YXRpYyBXZWFrTWFwRGF0YSogY3Jl
YXRlKFZNJiB2bSkKLSAgICB7Ci0gICAgICAgIFdlYWtNYXBEYXRhKiB3ZWFrTWFwRGF0YSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYWtNYXBEYXRhPih2bS5oZWFwKSkgV2Vha01hcERh
dGEodm0pOwotICAgICAgICB3ZWFrTWFwRGF0YS0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAg
ICByZXR1cm4gd2Vha01hcERhdGE7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwotCi0gICAgdm9pZCBzZXQoVk0mLCBKU09iamVjdCosIEpTVmFsdWUpOwot
ICAgIEpTVmFsdWUgZ2V0KEpTT2JqZWN0Kik7Ci0gICAgYm9vbCByZW1vdmUoSlNPYmplY3QqKTsK
LSAgICBib29sIGNvbnRhaW5zKEpTT2JqZWN0Kik7Ci0gICAgdm9pZCBjbGVhcigpOwotCi0gICAg
REVDTEFSRV9JTkZPOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPEpTT2JqZWN0KiwgV3JpdGVCYXJy
aWVyPFVua25vd24+PiBNYXBUeXBlOwotICAgIE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQotICAgIE1hcFR5cGU6OmNvbnN0X2l0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0KLSAgICBpbnQgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQotCi1wcml2YXRlOgotICAgIFdlYWtN
YXBEYXRhKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0
aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKLQotICAgIGNsYXNzIERlYWRLZXlDbGVhbmVyIDogcHVibGljIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIsIHB1YmxpYyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIERlYWRLZXlDbGVhbmVyKFdlYWtNYXBEYXRhKiB0YXJnZXQpCi0gICAgICAgICAgICA6
IG1fdGFyZ2V0KHRhcmdldCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgcHJpdmF0ZToKLSAg
ICAgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7Ci0g
ICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKLSAgICAgICAg
dW5zaWduZWQgbV9saXZlS2V5Q291bnQ7Ci0gICAgICAgIFdlYWtNYXBEYXRhKiBtX3RhcmdldDsK
LSAgICB9OwotICAgIERlYWRLZXlDbGVhbmVyIG1fZGVhZEtleUNsZWFuZXI7Ci0gICAgTWFwVHlw
ZSBtX21hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyZTI2YjQ5YjExNjAzNDA4
NjcxNGZhNWM3MmQwY2FiYzFhZWEwMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vha01hcEltcGwu
aCIKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y29uc3QgQ2xhc3NJbmZvIFdlYWtNYXBJbXBsOjpzX2luZm8gPSB7ICJXZWFrTWFwSW1wbCIsICZC
YXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2Vha01h
cEltcGwpIH07CisKK1dlYWtNYXBJbXBsOjpXZWFrTWFwSW1wbChWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9kZWFkS2V5Q2xl
YW5lcih0aGlzKQoreworfQorCit2b2lkIFdlYWtNYXBJbXBsOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworfQorCit2b2lkIFdlYWtNYXBJ
bXBsOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxXZWFrTWFwSW1w
bCo+KGNlbGwpLT5+V2Vha01hcEltcGwoKTsKK30KKworc2l6ZV90IFdlYWtNYXBJbXBsOjplc3Rp
bWF0ZWRTaXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBXZWFrTWFwSW1wbCogdGhpc09iaiA9IGpz
Q2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpOworICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXpl
KGNlbGwpICsgKHRoaXNPYmotPm1fbWFwLmNhcGFjaXR5KCkgKiAoc2l6ZW9mKEpTT2JqZWN0Kikg
KyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworfQorCit2b2lkIFdlYWtNYXBJbXBs
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKKyAgICBXZWFrTWFwSW1wbCog
dGhpc09iaiA9IGpzQ2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpOworICAgIHZpc2l0b3IuYWRkVW5j
b25kaXRpb25hbEZpbmFsaXplcigmdGhpc09iai0+bV9kZWFkS2V5Q2xlYW5lcik7CisgICAgdmlz
aXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKCZ0aGlzT2JqLT5tX2RlYWRLZXlDbGVhbmVy
KTsKKworICAgIC8vIFJvdWdoIGFwcHJveGltYXRpb24gb2YgdGhlIGV4dGVybmFsIHN0b3JhZ2Ug
bmVlZGVkIGZvciB0aGUgaGFzaHRhYmxlLgorICAgIC8vIFRoaXMgaXNuJ3QgZXhhY3QsIGJ1dCBp
dCBpcyBjbG9zZSBlbm91Z2gsIGFuZCBwcm9wb3J0aW9uYWwgdG8gdGhlIGFjdHVhbAorICAgIC8v
IGV4dGVybmFsIG1lbW9yeSB1c2FnZS4KKyAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5Vmlz
aXRlZCh0aGlzT2JqLT5tX21hcC5jYXBhY2l0eSgpICogKHNpemVvZihKU09iamVjdCopICsgc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKK30KKwordm9pZCBXZWFrTWFwSW1wbDo6c2V0
KFZNJiB2bSwgSlNPYmplY3QqIGtleSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICAvLyBIZXJlIHdl
IGZvcmNlIHRoZSB3cml0ZSBiYXJyaWVyIG9uIHRoZSBrZXkuCisgICAgYXV0byByZXN1bHQgPSBt
X21hcC5hZGQoV3JpdGVCYXJyaWVyPEpTT2JqZWN0Pih2bSwgdGhpcywga2V5KS5nZXQoKSwgV3Jp
dGVCYXJyaWVyPFVua25vd24+KCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2V0KHZt
LCB0aGlzLCB2YWx1ZSk7Cit9CisKK0pTVmFsdWUgV2Vha01hcEltcGw6OmdldChKU09iamVjdCog
a2V5KQoreworICAgIGF1dG8gaXRlciA9IG1fbWFwLmZpbmQoa2V5KTsKKyAgICBpZiAoaXRlciA9
PSBtX21hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJu
IGl0ZXItPnZhbHVlLmdldCgpOworfQorCitib29sIFdlYWtNYXBJbXBsOjpyZW1vdmUoSlNPYmpl
Y3QqIGtleSkKK3sKKyAgICBhdXRvIGl0ZXIgPSBtX21hcC5maW5kKGtleSk7CisgICAgaWYgKGl0
ZXIgPT0gbV9tYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fbWFwLnJl
bW92ZShpdGVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWFrTWFwSW1wbDo6Y29u
dGFpbnMoSlNPYmplY3QqIGtleSkKK3sKKyAgICByZXR1cm4gbV9tYXAuY29udGFpbnMoa2V5KTsK
K30KKwordm9pZCBXZWFrTWFwSW1wbDo6Y2xlYXIoKQoreworICAgIG1fbWFwLmNsZWFyKCk7Cit9
CisKK3ZvaWQgV2Vha01hcEltcGw6OkRlYWRLZXlDbGVhbmVyOjp2aXNpdFdlYWtSZWZlcmVuY2Vz
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFdlYWtNYXBJbXBsKiBpbXBsID0gdGFyZ2V0
KCk7CisgICAgbV9saXZlS2V5Q291bnQgPSAwOworICAgIGZvciAoYXV0byYgcGFpciA6IGltcGwt
Pm1fbWFwKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocGFpci5rZXkpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIG1fbGl2ZUtleUNvdW50Kys7CisgICAgICAgIHZpc2l0
b3IuYXBwZW5kKHBhaXIudmFsdWUpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChtX2xpdmVL
ZXlDb3VudCA8PSBpbXBsLT5tX21hcC5zaXplKCkpOworfQorCit2b2lkIFdlYWtNYXBJbXBsOjpE
ZWFkS2V5Q2xlYW5lcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQoreworICAgIFdlYWtNYXBJ
bXBsKiBpbXBsID0gdGFyZ2V0KCk7CisgICAgaWYgKG1fbGl2ZUtleUNvdW50ID4gaW1wbC0+bV9t
YXAuc2l6ZSgpIC8gMikgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2xpdmVLZXlDb3VudCA8
PSBpbXBsLT5tX21hcC5zaXplKCkpOworICAgICAgICBpbnQgZGVhZENvdW50ID0gaW1wbC0+bV9t
YXAuc2l6ZSgpIC0gbV9saXZlS2V5Q291bnQ7CisgICAgICAgIGlmICghZGVhZENvdW50KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBWZWN0b3I8SlNPYmplY3QqPiBkZWFkRW50cmllczsK
KyAgICAgICAgZGVhZEVudHJpZXMucmVzZXJ2ZUNhcGFjaXR5KGRlYWRDb3VudCk7CisgICAgICAg
IGZvciAoYXV0byYgcGFpciA6IGltcGwtPm1fbWFwKSB7CisgICAgICAgICAgICBpZiAoSGVhcDo6
aXNNYXJrZWQocGFpci5rZXkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgZGVhZEVudHJpZXMudW5jaGVja2VkQXBwZW5kKHBhaXIua2V5KTsKKyAgICAgICAgfQorICAg
ICAgICBmb3IgKGF1dG8mIGRlYWRFbnRyeSA6IGRlYWRFbnRyaWVzKQorICAgICAgICAgICAgaW1w
bC0+bV9tYXAucmVtb3ZlKGRlYWRFbnRyeSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFwVHlw
ZSBuZXdNYXA7CisgICAgICAgIGZvciAoYXV0byYgcGFpciA6IGltcGwtPm1fbWFwKSB7CisgICAg
ICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHBhaXIua2V5KSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIG5ld01hcC5hZGQocGFpci5rZXksIHBhaXIudmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIGltcGwtPm1fbWFwLnN3YXAobmV3TWFwKTsKKyAgICB9Cit9CisK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBs
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjU2MzJkMjAwYzUyYTg2NTEyZWIzN2YyMDYyN2M1MDIzYjk5YzQyNjEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCkBAIC0w
LDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgV2Vha01hcEltcGwgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3Qgewor
cHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0Rlc3RydWN0aWJsZU9iamVjdDsKKworICAgIHZv
aWQgc2V0KFZNJiwgSlNPYmplY3QqLCBKU1ZhbHVlKTsKKyAgICBKU1ZhbHVlIGdldChKU09iamVj
dCopOworICAgIGJvb2wgcmVtb3ZlKEpTT2JqZWN0Kik7CisgICAgYm9vbCBjb250YWlucyhKU09i
amVjdCopOworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHR5
cGVkZWYgSGFzaE1hcDxKU09iamVjdCosIFdyaXRlQmFycmllcjxVbmtub3duPj4gTWFwVHlwZTsK
KyAgICBNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
LmJlZ2luKCk7IH0KKyAgICBNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBtX21hcC5lbmQoKTsgfQorCisgICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21h
cC5zaXplKCk7IH0KKworcHJvdGVjdGVkOgorICAgIFdlYWtNYXBJbXBsKFZNJiwgU3RydWN0dXJl
Kik7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKyAgICBzdGF0aWMgc2l6ZV90
IGVzdGltYXRlZFNpemUoSlNDZWxsKik7CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKwor
ICAgIGNsYXNzIERlYWRLZXlDbGVhbmVyIDogcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIs
IHB1YmxpYyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERl
YWRLZXlDbGVhbmVyKFdlYWtNYXBJbXBsKiB0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQodGFyZ2V0LCB0YXJnZXQgPT0gdGFyZ2V0KCkpOworICAgICAgICB9CisK
KyAgICAgICAgV2Vha01hcEltcGwqIHRhcmdldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8V2Vha01hcEltcGwqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMp
IC0gT0JKRUNUX09GRlNFVE9GKFdlYWtNYXBJbXBsLCBtX2RlYWRLZXlDbGVhbmVyKSk7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhT
bG90VmlzaXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25h
bGx5KCkgb3ZlcnJpZGU7CisgICAgICAgIHVuc2lnbmVkIG1fbGl2ZUtleUNvdW50OworICAgIH07
CisgICAgRGVhZEtleUNsZWFuZXIgbV9kZWFkS2V5Q2xlYW5lcjsKKyAgICBNYXBUeXBlIG1fbWFw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrTWFwUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwCmluZGV4IDEyODg4OTlmOTk5ODBlYWNlNjky
MTZiZDYyMjI4OWMzMGIzMjNkNjguLmEwMjk4MjI0YTliNmU5ZTQ1N2U5ODAwZWJhMmRiOThjMTQx
MTFiZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQ
cm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQ
cm90b3R5cGUuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNXZWFrTWFwLmgiCi0jaW5jbHVkZSAiV2Vha01hcERhdGEuaCIKKyNpbmNs
dWRlICJXZWFrTWFwSW1wbC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTMsNyArNTMsNyBA
QCB2b2lkIFdlYWtNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwg
dm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIldlYWtN
YXAiKSwgRG9udEVudW0gfCBSZWFkT25seSk7CiB9CiAKLXN0YXRpYyBXZWFrTWFwRGF0YSogZ2V0
V2Vha01hcERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdmFsdWUpCitzdGF0aWMg
SlNXZWFrTWFwKiBnZXRXZWFrTWFwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBXZWFrTWFwRGF0
YSogZ2V0V2Vha01hcERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdmFsdWUpCiAg
ICAgfQogCiAgICAgaWYgKEpTV2Vha01hcCogd2Vha01hcCA9IGpzRHluYW1pY0Nhc3Q8SlNXZWFr
TWFwKj4odm0sIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHdlYWtNYXAtPndlYWtNYXBEYXRhKCk7
CisgICAgICAgIHJldHVybiB3ZWFrTWFwOwogCiAgICAgdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1l
LCBzY29wZSwgV1RGOjpBU0NJSUxpdGVyYWwoIkNhbGxlZCBXZWFrTWFwIGZ1bmN0aW9uIG9uIGEg
bm9uLVdlYWtNYXAgb2JqZWN0IikpOwogICAgIHJldHVybiBudWxscHRyOwpAQCAtNzIsNyArNzIs
NyBAQCBzdGF0aWMgV2Vha01hcERhdGEqIGdldFdlYWtNYXBEYXRhKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBKU1ZhbHVlIHZhbHVlKQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3Rv
RnVuY1dlYWtNYXBEZWxldGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgV2Vha01hcERh
dGEqIG1hcCA9IGdldFdlYWtNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CisgICAgYXV0byogbWFwID0gZ2V0V2Vha01hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkpOwogICAgIGlmICghbWFwKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUga2V5ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgw
KTsKQEAgLTgxLDcgKzgxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1
bmNXZWFrTWFwRGVsZXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBHZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
Ci0gICAgV2Vha01hcERhdGEqIG1hcCA9IGdldFdlYWtNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSk7CisgICAgYXV0byogbWFwID0gZ2V0V2Vha01hcChjYWxsRnJhbWUs
IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghbWFwKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUga2V5ID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgwKTsKQEAgLTkyLDcgKzkyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFwR2V0KENhbGxGcmFtZSogY2FsbEZyYW1lKQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBIYXMoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7Ci0gICAgV2Vha01hcERhdGEqIG1hcCA9IGdldFdlYWtNYXBEYXRhKGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgYXV0byogbWFwID0gZ2V0V2Vha01h
cChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghbWFwKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUg
a2V5ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKQEAgLTEwNCw3ICsxMDQsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBTZXQoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFdlYWtNYXBEYXRhKiBtYXAgPSBnZXRXZWFr
TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGF1dG8qIG1h
cCA9IGdldFdlYWtNYXAoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBB
U1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhbWFwKTsKICAgICBpZiAoIW1hcCkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRQcm90b3R5cGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldFByb3RvdHlwZS5jcHAKaW5kZXggY2M1MmM4
ZDBhNjRjYzE1OGNiMDY5NDBiZTlmNWIzNmMzMzZiNjQ5ZS4uNzgxMzE3NjAxZWI5NGEyMzIwYWQ4
YTFhYzEwYTg4MWNmZTM2NTkyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha1NldFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha1NldFByb3RvdHlwZS5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYWtTZXQuaCIKLSNpbmNsdWRlICJXZWFrTWFw
RGF0YS5oIgorI2luY2x1ZGUgIldlYWtNYXBJbXBsLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC01MSw3ICs1MSw3IEBAIHZvaWQgV2Vha1NldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJp
bmcoJnZtLCAiV2Vha1NldCIpLCBEb250RW51bSB8IFJlYWRPbmx5KTsKIH0KIAotc3RhdGljIFdl
YWtNYXBEYXRhKiBnZXRXZWFrTWFwRGF0YShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB2
YWx1ZSkKK3N0YXRpYyBKU1dlYWtTZXQqIGdldFdlYWtTZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTYyLDcgKzYyLDcgQEAgc3Rh
dGljIFdlYWtNYXBEYXRhKiBnZXRXZWFrTWFwRGF0YShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNW
YWx1ZSB2YWx1ZSkKICAgICB9CiAKICAgICBpZiAoSlNXZWFrU2V0KiB3ZWFrU2V0ID0ganNEeW5h
bWljQ2FzdDxKU1dlYWtTZXQqPih2bSwgdmFsdWUpKQotICAgICAgICByZXR1cm4gd2Vha1NldC0+
d2Vha01hcERhdGEoKTsKKyAgICAgICAgcmV0dXJuIHdlYWtTZXQ7CiAKICAgICB0aHJvd1R5cGVF
cnJvcihjYWxsRnJhbWUsIHNjb3BlLCBXVEY6OkFTQ0lJTGl0ZXJhbCgiQ2FsbGVkIFdlYWtTZXQg
ZnVuY3Rpb24gb24gYSBub24tV2Vha1NldCBvYmplY3QiKSk7CiAgICAgcmV0dXJuIG51bGxwdHI7
CkBAIC03MCwyMCArNzAsMjAgQEAgc3RhdGljIFdlYWtNYXBEYXRhKiBnZXRXZWFrTWFwRGF0YShD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB2YWx1ZSkKIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrU2V0RGVsZXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewotICAgIFdlYWtNYXBEYXRhKiBtYXAgPSBnZXRXZWFrTWFwRGF0YShjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghbWFwKQorICAgIGF1dG8qIHNldCA9IGdldFdl
YWtTZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIXNldCkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1Zh
bHVlIGtleSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4oa2V5LmlzT2JqZWN0KCkgJiYgbWFwLT5yZW1vdmUoYXNPYmplY3Qoa2V5
KSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihrZXkuaXNPYmplY3Qo
KSAmJiBzZXQtPnJlbW92ZShhc09iamVjdChrZXkpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtTZXRIYXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
Ci0gICAgV2Vha01hcERhdGEqIG1hcCA9IGdldFdlYWtNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFtYXApCisgICAgYXV0byogc2V0ID0gZ2V0V2Vh
a1NldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghc2V0KQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFs
dWUga2V5ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihrZXkuaXNPYmplY3QoKSAmJiBtYXAtPmNvbnRhaW5zKGFzT2JqZWN0KGtl
eSkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oa2V5LmlzT2JqZWN0
KCkgJiYgc2V0LT5jb250YWlucyhhc09iamVjdChrZXkpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtTZXRBZGQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CkBAIC05MSwxNCArOTEsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1
bmNXZWFrU2V0QWRkKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIFZNJiB2bSA9IGNhbGxGcmFt
ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAg
ICBXZWFrTWFwRGF0YSogbWFwID0gZ2V0V2Vha01hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUt
PnRoaXNWYWx1ZSgpKTsKLSAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhbWFwKTsK
LSAgICBpZiAoIW1hcCkKKyAgICBhdXRvKiBzZXQgPSBnZXRXZWFrU2V0KGNhbGxGcmFtZSwgY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0g
IXNldCk7CisgICAgaWYgKCFzZXQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSBrZXkgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwog
ICAgIGlmICgha2V5LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgV1RGOjpBU0NJSUxpdGVyYWwoIkF0dGVt
cHRlZCB0byBhZGQgYSBub24tb2JqZWN0IGtleSB0byBhIFdlYWtTZXQiKSkpOwotICAgIG1hcC0+
c2V0KHZtLCBhc09iamVjdChrZXkpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICBzZXQtPnNldCh2bSwg
YXNPYmplY3Qoa2V5KSwganNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318969</attachid>
            <date>2017-08-23 22:17:31 -0700</date>
            <delta_ts>2017-08-25 20:42:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143919-20170824141730.patch</filename>
            <type>text/plain</type>
            <size>42206</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
OGZjNDAzN2FmNDZjZGMxZmNmMTEwYTAwYzQ5NjI1ZWE5MjY2OWE1Li44NGQzODEwNGI4YTE4OTAz
YmJlYjVhZDhkYzU3YWUwNjI3OGM1MjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw4MyBAQAogMjAxNy0wOC0yMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAorICAgICAgICBNZXJnZSBXZWFrTWFwRGF0YSBpbnRvIEpTV2Vha01hcCBhbmQgSlNX
ZWFrU2V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDM5MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGNoYW5nZXMgV2Vha01hcERhdGEgZnJvbSBKU0NlbGwgdG8gSlNEZXN0cnVjdGli
bGVPYmplY3QsCisgICAgICAgIHJlbmFtaW5nIGl0IHRvIFdlYWtNYXBJbXBsLCBhbmQgSlNXZWFr
TWFwIGFuZCBKU1dlYWtTZXQgc2ltcGx5IGluaGVyaXQKKyAgICAgICAgaXQgaW5zdGVhZCBvZiBz
ZXBhcmF0ZWx5IGFsbG9jYXRpbmcgV2Vha01hcERhdGEuIFRoaXMgcmVkdWNlcyBtZW1vcnkKKyAg
ICAgICAgY29uc3VtcHRpb24gYW5kIGFsbG9jYXRpb24gdGltZXMuCisKKyAgICAgICAgQWxzbyB0
aGlzIHBhdGNoIGEgYml0IG9wdGltaXplcyBzaXplb2YoRGVhZEtleUNsZWFuZXIpIGJ5IGRyb3Bw
aW5nIG1fdGFyZ2V0CisgICAgICAgIGZpZWxkLiBTaW5jZSB0aGlzIGNsYXNzIGlzIGFsd2F5cyBl
bWJlZGRlZCBpbiBXZWFrTWFwSW1wbCwgd2UgY2FuIGNhbGN1bGF0ZQorICAgICAgICBXZWFrTWFw
SW1wbCBhZGRyZXNzIGZyb20gdGhlIGFkZHJlc3Mgb2YgRGVhZEtleUNsZWFuZXIuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBvcHRpbWl6YXRpb24gY2hhbmdpbmcg
V2Vha01hcERhdGEgdG8gU2V0CisgICAgICAgIGZvciBKU1dlYWtTZXQuCisKKyAgICAgICAgKiBD
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHA6
CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrTWFwU2l6ZSk6
CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrTWFwRW50cmll
cyk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrU2V0U2l6
ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrU2V0RW50
cmllcyk6CisgICAgICAgICogcnVudGltZS9KU1dlYWtNYXAuY3BwOgorICAgICAgICAoSlNDOjpK
U1dlYWtNYXA6OmZpbmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWFr
TWFwOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTV2Vha01h
cC5oOgorICAgICAgICAoSlNDOjpKU1dlYWtNYXA6OmNyZWF0ZVN0cnVjdHVyZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpTV2Vha01hcDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SlNXZWFrTWFwOjp3ZWFrTWFwRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2Vh
a01hcDo6SlNXZWFrTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTV2Vha1NldC5j
cHA6CisgICAgICAgIChKU0M6OkpTV2Vha1NldDo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU1dlYWtTZXQ6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvSlNXZWFrU2V0Lmg6CisgICAgICAgIChKU0M6OkpTV2Vha1NldDo6Y3JlYXRl
U3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWFrU2V0OjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYWtTZXQ6OndlYWtNYXBEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6SlNXZWFrU2V0OjpKU1dlYWtTZXQpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBJbXBsLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBEYXRhLmNwcC4KKyAgICAgICAg
KEpTQzo6V2Vha01hcEltcGw6OldlYWtNYXBJbXBsKToKKyAgICAgICAgKEpTQzo6V2Vha01hcElt
cGw6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2Vha01hcEltcGw6OmRlc3Ryb3kp
OgorICAgICAgICAoSlNDOjpXZWFrTWFwSW1wbDo6ZXN0aW1hdGVkU2l6ZSk6CisgICAgICAgIChK
U0M6OldlYWtNYXBJbXBsOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6V2Vha01hcElt
cGw6OnNldCk6CisgICAgICAgIChKU0M6OldlYWtNYXBJbXBsOjpnZXQpOgorICAgICAgICAoSlND
OjpXZWFrTWFwSW1wbDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6V2Vha01hcEltcGw6OmNvbnRh
aW5zKToKKyAgICAgICAgKEpTQzo6V2Vha01hcEltcGw6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6
V2Vha01hcEltcGw6OkRlYWRLZXlDbGVhbmVyOjp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAg
ICAgKEpTQzo6V2Vha01hcEltcGw6OkRlYWRLZXlDbGVhbmVyOjpmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSk6CisgICAgICAgICogcnVudGltZS9XZWFrTWFwSW1wbC5oOiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuaC4KKyAgICAgICAgKEpTQzo6
V2Vha01hcEltcGw6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Vha01hcEltcGw6OmVu
ZCBjb25zdCk6CisgICAgICAgIChKU0M6OldlYWtNYXBJbXBsOjpzaXplIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6V2Vha01hcEltcGw6OkRlYWRLZXlDbGVhbmVyOjpEZWFkS2V5Q2xlYW5lcik6Cisg
ICAgICAgIChKU0M6OldlYWtNYXBJbXBsOjpEZWFkS2V5Q2xlYW5lcjo6dGFyZ2V0KToKKyAgICAg
ICAgKiBydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRXZWFr
TWFwKToKKyAgICAgICAgKEpTQzo6cHJvdG9GdW5jV2Vha01hcERlbGV0ZSk6CisgICAgICAgIChK
U0M6OnByb3RvRnVuY1dlYWtNYXBHZXQpOgorICAgICAgICAoSlNDOjpwcm90b0Z1bmNXZWFrTWFw
SGFzKToKKyAgICAgICAgKEpTQzo6cHJvdG9GdW5jV2Vha01hcFNldCk6CisgICAgICAgIChKU0M6
OmdldFdlYWtNYXBEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1dlYWtTZXRQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRXZWFrU2V0KToKKyAgICAgICAgKEpTQzo6cHJv
dG9GdW5jV2Vha1NldERlbGV0ZSk6CisgICAgICAgIChKU0M6OnByb3RvRnVuY1dlYWtTZXRIYXMp
OgorICAgICAgICAoSlNDOjpwcm90b0Z1bmNXZWFrU2V0QWRkKToKKyAgICAgICAgKEpTQzo6Z2V0
V2Vha01hcERhdGEpOiBEZWxldGVkLgorCisyMDE3LTA4LTIzICBZdXN1a2UgU3V6dWtpICA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPgorCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCBmb3IgdGVzdDI2
MgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1OTE1
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA2ZDA4NTkxNTQwOTMyZTAx
NzA2ZmRkZWUyNDQ2NmE4Zjc1ZTg3MTJlLi5iZTkzYTEyZjE2NWU0NzczYTE0YWFjYTBjYzk4NjE1
NTIzNDA1Y2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC05MzYsNyAr
OTM2LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL1Zhck9mZnNl
dC5jcHAKICAgICBydW50aW1lL1dhdGNoZG9nLmNwcAogICAgIHJ1bnRpbWUvV2Vha01hcENvbnN0
cnVjdG9yLmNwcAotICAgIHJ1bnRpbWUvV2Vha01hcERhdGEuY3BwCisgICAgcnVudGltZS9XZWFr
TWFwSW1wbC5jcHAKICAgICBydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwCiAgICAgcnVudGlt
ZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9XZWFrU2V0UHJvdG90eXBlLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwYTE2YWQ1ZTBkYTQ0ZWZkODVhY2Q4
NDIzNDYxYWMwYzUxNWMxM2M1Li4zYTZmODE2Mjg1NjNlMDg3Yjc5YmYwODUwZjI0ZTc5OWYwMDg2
YWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjA1Niw4ICsyMDU2LDggQEAK
IAkJQTdDQTNBRTYxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Q0EzQUUwMTdEQTQxQUUw
MDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBlLmggKi87IH07CiAJCUE3Q0EzQUU3MTdEQTQxQUUw
MDY1MzhBRiAvKiBKU1dlYWtNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTdDQTNBRTExN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5jcHAg
Ki87IH07CiAJCUE3Q0EzQUU4MTdEQTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Q0EzQUUyMTdEQTQxQUUw
MDY1MzhBRiAvKiBKU1dlYWtNYXAuaCAqLzsgfTsKLQkJQTdDQTNBRUIxN0RBNTE2ODAwNjUzOEFG
IC8qIFdlYWtNYXBEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3Q0EzQUU5MTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5jcHAgKi87
IH07Ci0JCUE3Q0EzQUVDMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDQTNBRUExN0RBNTE2ODAw
NjUzOEFGIC8qIFdlYWtNYXBEYXRhLmggKi87IH07CisJCUE3Q0EzQUVCMTdEQTUxNjgwMDY1MzhB
RiAvKiBXZWFrTWFwSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBN0NBM0FFOTE3REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcEltcGwuY3BwICov
OyB9OworCQlBN0NBM0FFQzE3REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcEltcGwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Q0EzQUVBMTdEQTUxNjgw
MDY1MzhBRiAvKiBXZWFrTWFwSW1wbC5oICovOyB9OwogCQlBN0Q4MDFBNDE4ODBENjZFMDAyNkMz
OUIgLyogQnVpbHRpbkV4ZWN1dGFibGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDgwMUExMTg4MEQ2NkUwMDI2QzM5QiAvKiBCdWlsdGluRXhl
Y3V0YWJsZXMuY3BwICovOyB9OwogCQlBN0Q4MDFBNTE4ODBENjZFMDAyNkMzOUIgLyogQnVpbHRp
bkV4ZWN1dGFibGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBN0Q4MDFBMjE4ODBENjZFMDAyNkMzOUIgLyogQnVpbHRpbkV4ZWN1dGFibGVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdEODAxQTgx
ODgwRDZBODAwMjZDMzlCIC8qIEpTQ0J1aWx0aW5zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDgwMUE2MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NC
dWlsdGlucy5jcHAgKi87IH07CkBAIC00NzE2LDggKzQ3MTYsOCBAQAogCQlBN0NBM0FFMDE3REE0
MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWFrTWFwUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3Q0EzQUUxMTdEQTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWFrTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTdDQTNBRTIxN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYWtNYXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQTdDQTNBRTkxN0RBNTE2ODAwNjUzOEFGIC8qIFdlYWtNYXBEYXRh
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYWtNYXBEYXRhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdDQTNBRUExN0RBNTE2ODAwNjUzOEFG
IC8qIFdlYWtNYXBEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtN
YXBEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3Q0EzQUU5MTdEQTUxNjgw
MDY1MzhBRiAvKiBXZWFrTWFwSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWFrTWFwSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3
Q0EzQUVBMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwSW1wbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWFrTWFwSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBN0Q4MDFBMDE4ODBENjZFMDAyNkMzOUIgLyogQXJyYXlQcm90b3R5cGUuanMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBBcnJheVByb3RvdHlwZS5qczsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdEODAxQTExODgwRDY2RTAwMjZDMzlCIC8qIEJ1
aWx0aW5FeGVjdXRhYmxlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBCdWlsdGluRXhlY3V0YWJsZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
N0Q4MDFBMjE4ODBENjZFMDAyNkMzOUIgLyogQnVpbHRpbkV4ZWN1dGFibGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1aWx0aW5FeGVjdXRhYmxlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNzIzNyw4ICs3MjM3LDggQEAKIAkJCQlBRDg2QTkzRDFBQTRE
ODdDMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oICovLAogCQkJCUE3Q0EzQUREMTdEQTQx
QUUwMDY1MzhBRiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUE3Q0EzQURFMTdE
QTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuaCAqLywKLQkJCQlBN0NBM0FFOTE3
REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcERhdGEuY3BwICovLAotCQkJCUE3Q0EzQUVBMTdEQTUx
NjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5oICovLAorCQkJCUE3Q0EzQUU5MTdEQTUxNjgwMDY1
MzhBRiAvKiBXZWFrTWFwSW1wbC5jcHAgKi8sCisJCQkJQTdDQTNBRUExN0RBNTE2ODAwNjUzOEFG
IC8qIFdlYWtNYXBJbXBsLmggKi8sCiAJCQkJQTdDQTNBREYxN0RBNDFBRTAwNjUzOEFGIC8qIFdl
YWtNYXBQcm90b3R5cGUuY3BwICovLAogCQkJCUE3Q0EzQUUwMTdEQTQxQUUwMDY1MzhBRiAvKiBX
ZWFrTWFwUHJvdG90eXBlLmggKi8sCiAJCQkJNzA5RkI4NjMxQUUzMzVDNjAwMzlEMDY5IC8qIFdl
YWtTZXRDb25zdHJ1Y3Rvci5jcHAgKi8sCkBAIC05NjYwLDcgKzk2NjAsNyBAQAogCQkJCTE0RTg0
RkEyMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRC
RTdEMzMxNzEzNUNGNDAwRDE4MDdBIC8qIFdlYWtJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0NBM0FFNDE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcENvbnN0cnVjdG9yLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlBN0NBM0FFQzE3REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcERhdGEuaCBp
biBIZWFkZXJzICovLAorCQkJCUE3Q0EzQUVDMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwSW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTYxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtN
YXBQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0
QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZB
MTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTE1MCw3
ICsxMTE1MCw3IEBACiAJCQkJMTRFODRGOUUxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEY3MjU2NTE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hh
bmRsZU93bmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Q0EzQUUzMTdEQTQxQUUwMDY1MzhB
RiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTdDQTNBRUIx
N0RBNTE2ODAwNjUzOEFGIC8qIFdlYWtNYXBEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE3
Q0EzQUVCMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwSW1wbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0NBM0FFNTE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNEU4NEZBMDE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha1NldC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3MDlGQjg2OTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldENv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAppbmRleCBmMmI3MjQw
MTBjMjBiMzI3NWY0MTM5MzdmMjE3MDljMzYzMjcyMWU5Li5lZDIwZDA4YmIyNjJmM2I0MmU3ODJh
YmM3MTc3OTBmMzU1MzA1ODc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcApAQCAtNTgsNyArNTgsNyBAQAog
I2luY2x1ZGUgIlNldEl0ZXJhdG9yUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5o
IgogI2luY2x1ZGUgIlR5cGVkQXJyYXlJbmxpbmVzLmgiCi0jaW5jbHVkZSAiV2Vha01hcERhdGEu
aCIKKyNpbmNsdWRlICJXZWFrTWFwSW1wbC5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBA
IC00MjksNyArNDI5LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha01hcFNp
emUoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmICghd2Vha01hcCkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4ganNOdW1iZXIod2Vha01hcC0+d2Vha01hcERhdGEo
KS0+c2l6ZSgpKTsKKyAgICByZXR1cm4ganNOdW1iZXIod2Vha01hcC0+c2l6ZSgpKTsKIH0KIAog
SlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha01hcEVudHJpZXMoRXhlY1N0YXRlKiBl
eGVjKQpAQCAtNDU0LDcgKzQ1NCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Ondl
YWtNYXBFbnRyaWVzKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gY29u
c3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU1ZhbHVlKCkpOwotICAgIGZvciAoYXV0byBpdCA9IHdlYWtNYXAtPndlYWtNYXBE
YXRhKCktPmJlZ2luKCk7IGl0ICE9IHdlYWtNYXAtPndlYWtNYXBEYXRhKCktPmVuZCgpOyArK2l0
KSB7CisgICAgZm9yIChhdXRvIGl0ID0gd2Vha01hcC0+YmVnaW4oKTsgaXQgIT0gd2Vha01hcC0+
ZW5kKCk7ICsraXQpIHsKICAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYyk7CiAgICAgICAgIGVudHJ5LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAia2V5IiksIGl0LT5rZXkpOwogICAgICAgICBlbnRyeS0+
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInZhbHVl
IiksIGl0LT52YWx1ZS5nZXQoKSk7CkBAIC00NzgsNyArNDc4LDcgQEAgSlNWYWx1ZSBKU0luamVj
dGVkU2NyaXB0SG9zdDo6d2Vha1NldFNpemUoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmICghd2Vh
a1NldCkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4ganNOdW1i
ZXIod2Vha1NldC0+d2Vha01hcERhdGEoKS0+c2l6ZSgpKTsKKyAgICByZXR1cm4ganNOdW1iZXIo
d2Vha1NldC0+c2l6ZSgpKTsKIH0KIAogSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vh
a1NldEVudHJpZXMoRXhlY1N0YXRlKiBleGVjKQpAQCAtNTAzLDcgKzUwMyw3IEBAIEpTVmFsdWUg
SlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtTZXRFbnRyaWVzKEV4ZWNTdGF0ZSogZXhlYykKIAog
ICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwotICAgIGZvciAoYXV0
byBpdCA9IHdlYWtTZXQtPndlYWtNYXBEYXRhKCktPmJlZ2luKCk7IGl0ICE9IHdlYWtTZXQtPndl
YWtNYXBEYXRhKCktPmVuZCgpOyArK2l0KSB7CisgICAgZm9yIChhdXRvIGl0ID0gd2Vha1NldC0+
YmVnaW4oKTsgaXQgIT0gd2Vha1NldC0+ZW5kKCk7ICsraXQpIHsKICAgICAgICAgSlNPYmplY3Qq
IGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAgICAgICAgIGVudHJ5LT5wdXRE
aXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidmFsdWUiKSwg
aXQtPmtleSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBmZXRjaGVkKyss
IGVudHJ5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vh
a01hcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtNYXAuY3BwCmlu
ZGV4IDNlZGE4MWM3OTEzYjdlNGNiNTJkM2IwZmIxZDEyMGFiNmFhZDU4N2YuLjgzYjhhNzUwNmVh
MjkxZjAxN2QzZmY1NTBhMTM1YWYyMDg2ZjViZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTV2Vha01hcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNXZWFrTWFwLmNwcApAQCAtMjcsMjUgKzI3LDEyIEBACiAjaW5jbHVkZSAiSlNX
ZWFrTWFwLmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiV2Vha01hcERh
dGEuaCIKKyNpbmNsdWRlICJXZWFrTWFwSW1wbC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY29u
c3QgQ2xhc3NJbmZvIEpTV2Vha01hcDo6c19pbmZvID0geyAiV2Vha01hcCIsICZCYXNlOjpzX2lu
Zm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWFrTWFwKSB9Owog
Ci12b2lkIEpTV2Vha01hcDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQotewotICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKLSAgICBtX3dlYWtNYXBEYXRhLnNldCh2bSwgdGhpcywgV2Vha01h
cERhdGE6OmNyZWF0ZSh2bSkpOwotfQotCi12b2lkIEpTV2Vha01hcDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgSlNXZWFrTWFwKiB0aGlzT2JqID0ganNDYXN0PEpT
V2Vha01hcCo+KGNlbGwpOwotICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmotPm1fd2Vha01hcERh
dGEpOwotfQotCiBTdHJpbmcgSlNXZWFrTWFwOjp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3Qq
LCBFeGVjU3RhdGUqKQogewogICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIk9iamVjdCIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrTWFwLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtNYXAuaAppbmRleCAxNzMzZDk2MzVmMzM2
ZGFmNzc0MTQ4ODRhNGZjYmY4ZDRhMGJlOWQ3Li42ZGYyNDMyMjI4NmQ5MTEzZWYzNmIxZjRkMGFm
Y2U1NTViODE1ZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1dlYWtNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtNYXAu
aApAQCAtMjYsMTQgKzI2LDEzIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCisjaW5jbHVkZSAiV2Vha01hcEltcGwuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNz
IFdlYWtNYXBEYXRhOwotCi1jbGFzcyBKU1dlYWtNYXAgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CitjbGFzcyBKU1dlYWtNYXAgZmluYWwgOiBwdWJsaWMgV2Vha01hcEltcGwgewogcHVibGlj
OgotICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHVzaW5nIEJhc2UgPSBX
ZWFrTWFwSW1wbDsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKQEAgLTU0LDI2ICs1Mywx
MyBAQCBjbGFzcyBKU1dlYWtNYXAgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgICAg
IHJldHVybiBjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKICAgICB9CiAKLSAgICBXZWFr
TWFwRGF0YSogd2Vha01hcERhdGEoKSB7IHJldHVybiBtX3dlYWtNYXBEYXRhLmdldCgpOyB9Ci0K
LSAgICBKU1ZhbHVlIGdldChDYWxsRnJhbWUqLCBKU09iamVjdCopOwotICAgIGJvb2wgaGFzKENh
bGxGcmFtZSosIEpTT2JqZWN0Kik7Ci0gICAgYm9vbCByZW1vdmUoQ2FsbEZyYW1lKiwgSlNPYmpl
Y3QqKTsKLQotICAgIHZvaWQgc2V0KENhbGxGcmFtZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSk7Ci0g
ICAgdm9pZCBjbGVhcihDYWxsRnJhbWUqKTsKLQogcHJpdmF0ZToKICAgICBKU1dlYWtNYXAoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUp
CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3RhdGlj
IFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqKTsKLQotICAg
IFdyaXRlQmFycmllcjxXZWFrTWFwRGF0YT4gbV93ZWFrTWFwRGF0YTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
ZWFrU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha1NldC5jcHAK
aW5kZXggMDYzZjM4MmI2MjcxNDdiOTQ1NjA2MTk3OTJkMjczYWJiZTY4MWJlNi4uYjNkMTM1ZTRk
ZTYzNTQyY2IwMjdkZDA5MTZmMjQ1ZGQyYjY3MjdmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1dlYWtTZXQuY3BwCkBAIC0yNywyNSArMjcsMTIgQEAKICNpbmNsdWRlICJK
U1dlYWtTZXQuaCIKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJXZWFrTWFw
RGF0YS5oIgorI2luY2x1ZGUgIldlYWtNYXBJbXBsLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBj
b25zdCBDbGFzc0luZm8gSlNXZWFrU2V0OjpzX2luZm8gPSB7ICJXZWFrU2V0IiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYWtTZXQpIH07
CiAKLXZvaWQgSlNXZWFrU2V0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIG1fd2Vha01hcERhdGEuc2V0KHZtLCB0aGlzLCBXZWFr
TWFwRGF0YTo6Y3JlYXRlKHZtKSk7Ci19Ci0KLXZvaWQgSlNXZWFrU2V0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQmFzZTo6dmlzaXRD
aGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBKU1dlYWtTZXQqIHRoaXNPYmogPSBqc0Nhc3Q8
SlNXZWFrU2V0Kj4oY2VsbCk7Ci0gICAgdmlzaXRvci5hcHBlbmQodGhpc09iai0+bV93ZWFrTWFw
RGF0YSk7Ci19Ci0KIFN0cmluZyBKU1dlYWtTZXQ6OnRvU3RyaW5nTmFtZShjb25zdCBKU0M6OkpT
T2JqZWN0KiwgRXhlY1N0YXRlKikKIHsKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJPYmplY3Qi
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha1NldC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrU2V0LmgKaW5kZXggMDE1NDc5
ODIyNWUyOGExYzA5ODhlNjg2ODg1YzE4YWZmYTQxMzU0OS4uMTE3MDE5MjY4M2UwMzYxNmMxODBj
MDBlNmU5ZGQ4NDRlZGQ5NTlmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXZWFrU2V0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
ZWFrU2V0LmgKQEAgLTI2LDE0ICsyNiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJK
U09iamVjdC5oIgorI2luY2x1ZGUgIldlYWtNYXBJbXBsLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1jbGFzcyBXZWFrTWFwRGF0YTsKLQotY2xhc3MgSlNXZWFrU2V0IDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgeworY2xhc3MgSlNXZWFrU2V0IGZpbmFsIDogcHVibGljIFdlYWtNYXBJbXBsIHsK
IHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICB1c2luZyBC
YXNlID0gV2Vha01hcEltcGw7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkBAIC01NCwy
NiArNTMsMTMgQEAgY2xhc3MgSlNXZWFrU2V0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewog
ICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CiAgICAgfQogCi0g
ICAgV2Vha01hcERhdGEqIHdlYWtNYXBEYXRhKCkgeyByZXR1cm4gbV93ZWFrTWFwRGF0YS5nZXQo
KTsgfQotCi0gICAgSlNWYWx1ZSBnZXQoQ2FsbEZyYW1lKiwgSlNPYmplY3QqKTsKLSAgICBib29s
IGhhcyhDYWxsRnJhbWUqLCBKU09iamVjdCopOwotICAgIGJvb2wgcmVtb3ZlKENhbGxGcmFtZSos
IEpTT2JqZWN0Kik7Ci0KLSAgICB2b2lkIHNldChDYWxsRnJhbWUqLCBKU09iamVjdCosIEpTVmFs
dWUpOwotICAgIHZvaWQgY2xlYXIoQ2FsbEZyYW1lKik7Ci0KIHByaXZhdGU6CiAgICAgSlNXZWFr
U2V0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAg
IHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7
Ci0KLSAgICBXcml0ZUJhcnJpZXI8V2Vha01hcERhdGE+IG1fd2Vha01hcERhdGE7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCAw
OTY4MzYxZWFjMTQwNmJhNWViZmI3OGY4ZDBhNzlmYmFlYzgzNmVjLi5kZGE0MjlkNDkxNDE3MzYy
MDM4Mjc1ZDQyODgxMjA1ZTkwMjI5MjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCkBAIC0xMTQsNyArMTE0LDYgQEAKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNs
dWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMuaCIKLSNpbmNsdWRl
ICJXZWFrTWFwRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUg
PHd0Zi9Qcm9jZXNzSUQuaD4KICNpbmNsdWRlIDx3dGYvUmVhZFdyaXRlTG9jay5oPgpAQCAtMjY0
LDcgKzI2Myw2IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAg
ICB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwog
ICAgIHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwogICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0
eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgd2Vha01h
cERhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWFrTWFwRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGluZmVycmVkVmFsdWVTdHJ1Y3R1cmUuc2V0KCp0aGlz
LCBJbmZlcnJlZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAg
ICAgaW5mZXJyZWRUeXBlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRUeXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgaW5mZXJyZWRUeXBlVGFibGVTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlz
LCAwLCBqc051bGwoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggY2MxZjVj
MWYxYTliZDhiNTNlZTFhODg4NjM2Yzg2MzY5NDU4Yjg4Ni4uOTZmYzllZDFlZjMyYmExZTYyOGU1
N2U0YWMxMDY3N2Y0ZThlZmZmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0z
NjksNyArMzY5LDYgQEAgY2xhc3MgVk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+
LCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8Vk0+IHsKICAgICBTdHJvbmc8U3RydWN0dXJl
PiB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8
U3RydWN0dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOwotICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IHdlYWtNYXBEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVmFs
dWVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRUeXBlU3RydWN0dXJl
OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVHlwZVRhYmxlU3RydWN0dXJlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAxNDI1OTZlZWI3MjAyMzEzZDAzNjdmNzMzYTgzMjRlNzZlNjYy
NmE0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBEYXRhLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIldlYWtNYXBEYXRhLmgiCi0KLSNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgi
Ci0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNvbnN0IENsYXNzSW5mbyBXZWFrTWFwRGF0YTo6c19pbmZv
ID0geyAiV2Vha01hcERhdGEiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKFdlYWtNYXBEYXRhKSB9OwotCi1XZWFrTWFwRGF0YTo6V2Vha01hcERhdGEoVk0m
IHZtKQotICAgIDogQmFzZSh2bSwgdm0ud2Vha01hcERhdGFTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAg
LCBtX2RlYWRLZXlDbGVhbmVyKHRoaXMpCi17Ci19Ci0KLXZvaWQgV2Vha01hcERhdGE6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci19Ci0K
LXZvaWQgV2Vha01hcERhdGE6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIHN0YXRpY19j
YXN0PFdlYWtNYXBEYXRhKj4oY2VsbCktPn5XZWFrTWFwRGF0YSgpOwotfQotCi1zaXplX3QgV2Vh
a01hcERhdGE6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQotewotICAgIFdlYWtNYXBEYXRh
KiB0aGlzT2JqID0ganNDYXN0PFdlYWtNYXBEYXRhKj4oY2VsbCk7Ci0gICAgcmV0dXJuIEJhc2U6
OmVzdGltYXRlZFNpemUoY2VsbCkgKyAodGhpc09iai0+bV9tYXAuY2FwYWNpdHkoKSAqIChzaXpl
b2YoSlNPYmplY3QqKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7Ci19Ci0KLXZv
aWQgV2Vha01hcERhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKLXsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotICAg
IFdlYWtNYXBEYXRhKiB0aGlzT2JqID0ganNDYXN0PFdlYWtNYXBEYXRhKj4oY2VsbCk7Ci0gICAg
dmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKCZ0aGlzT2JqLT5tX2RlYWRLZXlDbGVh
bmVyKTsKLSAgICB2aXNpdG9yLmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoJnRoaXNPYmotPm1f
ZGVhZEtleUNsZWFuZXIpOwotCi0gICAgLy8gUm91Z2ggYXBwcm94aW1hdGlvbiBvZiB0aGUgZXh0
ZXJuYWwgc3RvcmFnZSBuZWVkZWQgZm9yIHRoZSBoYXNodGFibGUuCi0gICAgLy8gVGhpcyBpc24n
dCBleGFjdCwgYnV0IGl0IGlzIGNsb3NlIGVub3VnaCwgYW5kIHByb3BvcnRpb25hbCB0byB0aGUg
YWN0dWFsCi0gICAgLy8gZXh0ZXJuYWwgbWVtb3J5IHVzYWdlLgotICAgIHZpc2l0b3IucmVwb3J0
RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmotPm1fbWFwLmNhcGFjaXR5KCkgKiAoc2l6ZW9mKEpT
T2JqZWN0KikgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwotfQotCi12b2lkIFdl
YWtNYXBEYXRhOjpzZXQoVk0mIHZtLCBKU09iamVjdCoga2V5LCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIC8vIEhlcmUgd2UgZm9yY2UgdGhlIHdyaXRlIGJhcnJpZXIgb24gdGhlIGtleS4KLSAgICBh
dXRvIHJlc3VsdCA9IG1fbWFwLmFkZChXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KHZtLCB0aGlzLCBr
ZXkpLmdldCgpLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKLX0KLQotSlNWYWx1ZSBXZWFrTWFwRGF0YTo6
Z2V0KEpTT2JqZWN0KiBrZXkpCi17Ci0gICAgYXV0byBpdGVyID0gbV9tYXAuZmluZChrZXkpOwot
ICAgIGlmIChpdGVyID09IG1fbWFwLmVuZCgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICByZXR1cm4gaXRlci0+dmFsdWUuZ2V0KCk7Ci19Ci0KLWJvb2wgV2Vha01hcERhdGE6
OnJlbW92ZShKU09iamVjdCoga2V5KQotewotICAgIGF1dG8gaXRlciA9IG1fbWFwLmZpbmQoa2V5
KTsKLSAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgbV9tYXAucmVtb3ZlKGl0ZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdl
YWtNYXBEYXRhOjpjb250YWlucyhKU09iamVjdCoga2V5KQotewotICAgIHJldHVybiBtX21hcC5j
b250YWlucyhrZXkpOwotfQotCi12b2lkIFdlYWtNYXBEYXRhOjpjbGVhcigpCi17Ci0gICAgbV9t
YXAuY2xlYXIoKTsKLX0KLQotdm9pZCBXZWFrTWFwRGF0YTo6RGVhZEtleUNsZWFuZXI6OnZpc2l0
V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9saXZlS2V5Q291
bnQgPSAwOwotICAgIGZvciAoYXV0byYgcGFpciA6IG1fdGFyZ2V0LT5tX21hcCkgewotICAgICAg
ICBpZiAoIUhlYXA6OmlzTWFya2VkKHBhaXIua2V5KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBtX2xpdmVLZXlDb3VudCsrOwotICAgICAgICB2aXNpdG9yLmFwcGVuZChwYWlyLnZh
bHVlKTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9saXZlS2V5Q291bnQgPD0gbV90YXJn
ZXQtPm1fbWFwLnNpemUoKSk7Ci19Ci0KLXZvaWQgV2Vha01hcERhdGE6OkRlYWRLZXlDbGVhbmVy
OjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCi17Ci0gICAgaWYgKG1fbGl2ZUtleUNvdW50ID4g
bV90YXJnZXQtPm1fbWFwLnNpemUoKSAvIDIpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9s
aXZlS2V5Q291bnQgPD0gbV90YXJnZXQtPm1fbWFwLnNpemUoKSk7Ci0gICAgICAgIGludCBkZWFk
Q291bnQgPSBtX3RhcmdldC0+bV9tYXAuc2l6ZSgpIC0gbV9saXZlS2V5Q291bnQ7Ci0gICAgICAg
IGlmICghZGVhZENvdW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBWZWN0b3I8SlNP
YmplY3QqPiBkZWFkRW50cmllczsKLSAgICAgICAgZGVhZEVudHJpZXMucmVzZXJ2ZUNhcGFjaXR5
KGRlYWRDb3VudCk7Ci0gICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fdGFyZ2V0LT5tX21hcCkg
ewotICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHBhaXIua2V5KSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGRlYWRFbnRyaWVzLnVuY2hlY2tlZEFwcGVuZChw
YWlyLmtleSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChhdXRvJiBkZWFkRW50cnkgOiBkZWFk
RW50cmllcykKLSAgICAgICAgICAgIG1fdGFyZ2V0LT5tX21hcC5yZW1vdmUoZGVhZEVudHJ5KTsK
LSAgICB9IGVsc2UgewotICAgICAgICBNYXBUeXBlIG5ld01hcDsKLSAgICAgICAgZm9yIChhdXRv
JiBwYWlyIDogbV90YXJnZXQtPm1fbWFwKSB7Ci0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFy
a2VkKHBhaXIua2V5KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG5l
d01hcC5hZGQocGFpci5rZXksIHBhaXIudmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIG1fdGFy
Z2V0LT5tX21hcC5zd2FwKG5ld01hcCk7Ci0gICAgfQotfQotCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwRGF0YS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggY2UzNjNkODRkMjc1ZDY4Y2M5YmU5YjRkZjc0ODcxMzZkNDAzZDNkNS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAi
U3RydWN0dXJlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgV2Vha01hcERhdGEgZmluYWwg
OiBwdWJsaWMgSlNDZWxsIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKLQotICAgIHN0YXRpYyBXZWFrTWFwRGF0YSogY3Jl
YXRlKFZNJiB2bSkKLSAgICB7Ci0gICAgICAgIFdlYWtNYXBEYXRhKiB3ZWFrTWFwRGF0YSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYWtNYXBEYXRhPih2bS5oZWFwKSkgV2Vha01hcERh
dGEodm0pOwotICAgICAgICB3ZWFrTWFwRGF0YS0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAg
ICByZXR1cm4gd2Vha01hcERhdGE7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwotCi0gICAgdm9pZCBzZXQoVk0mLCBKU09iamVjdCosIEpTVmFsdWUpOwot
ICAgIEpTVmFsdWUgZ2V0KEpTT2JqZWN0Kik7Ci0gICAgYm9vbCByZW1vdmUoSlNPYmplY3QqKTsK
LSAgICBib29sIGNvbnRhaW5zKEpTT2JqZWN0Kik7Ci0gICAgdm9pZCBjbGVhcigpOwotCi0gICAg
REVDTEFSRV9JTkZPOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPEpTT2JqZWN0KiwgV3JpdGVCYXJy
aWVyPFVua25vd24+PiBNYXBUeXBlOwotICAgIE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQotICAgIE1hcFR5cGU6OmNvbnN0X2l0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0KLSAgICBpbnQgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQotCi1wcml2YXRlOgotICAgIFdlYWtN
YXBEYXRhKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0
aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKLQotICAgIGNsYXNzIERlYWRLZXlDbGVhbmVyIDogcHVibGljIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIsIHB1YmxpYyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIERlYWRLZXlDbGVhbmVyKFdlYWtNYXBEYXRhKiB0YXJnZXQpCi0gICAgICAgICAgICA6
IG1fdGFyZ2V0KHRhcmdldCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgcHJpdmF0ZToKLSAg
ICAgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7Ci0g
ICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKLSAgICAgICAg
dW5zaWduZWQgbV9saXZlS2V5Q291bnQ7Ci0gICAgICAgIFdlYWtNYXBEYXRhKiBtX3RhcmdldDsK
LSAgICB9OwotICAgIERlYWRLZXlDbGVhbmVyIG1fZGVhZEtleUNsZWFuZXI7Ci0gICAgTWFwVHlw
ZSBtX21hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvV2Vha01hcEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyZTI2YjQ5YjExNjAzNDA4
NjcxNGZhNWM3MmQwY2FiYzFhZWEwMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vha01hcEltcGwu
aCIKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y29uc3QgQ2xhc3NJbmZvIFdlYWtNYXBJbXBsOjpzX2luZm8gPSB7ICJXZWFrTWFwSW1wbCIsICZC
YXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2Vha01h
cEltcGwpIH07CisKK1dlYWtNYXBJbXBsOjpXZWFrTWFwSW1wbChWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9kZWFkS2V5Q2xl
YW5lcih0aGlzKQoreworfQorCit2b2lkIFdlYWtNYXBJbXBsOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworfQorCit2b2lkIFdlYWtNYXBJ
bXBsOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxXZWFrTWFwSW1w
bCo+KGNlbGwpLT5+V2Vha01hcEltcGwoKTsKK30KKworc2l6ZV90IFdlYWtNYXBJbXBsOjplc3Rp
bWF0ZWRTaXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBXZWFrTWFwSW1wbCogdGhpc09iaiA9IGpz
Q2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpOworICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXpl
KGNlbGwpICsgKHRoaXNPYmotPm1fbWFwLmNhcGFjaXR5KCkgKiAoc2l6ZW9mKEpTT2JqZWN0Kikg
KyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworfQorCit2b2lkIFdlYWtNYXBJbXBs
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKKyAgICBXZWFrTWFwSW1wbCog
dGhpc09iaiA9IGpzQ2FzdDxXZWFrTWFwSW1wbCo+KGNlbGwpOworICAgIHZpc2l0b3IuYWRkVW5j
b25kaXRpb25hbEZpbmFsaXplcigmdGhpc09iai0+bV9kZWFkS2V5Q2xlYW5lcik7CisgICAgdmlz
aXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKCZ0aGlzT2JqLT5tX2RlYWRLZXlDbGVhbmVy
KTsKKworICAgIC8vIFJvdWdoIGFwcHJveGltYXRpb24gb2YgdGhlIGV4dGVybmFsIHN0b3JhZ2Ug
bmVlZGVkIGZvciB0aGUgaGFzaHRhYmxlLgorICAgIC8vIFRoaXMgaXNuJ3QgZXhhY3QsIGJ1dCBp
dCBpcyBjbG9zZSBlbm91Z2gsIGFuZCBwcm9wb3J0aW9uYWwgdG8gdGhlIGFjdHVhbAorICAgIC8v
IGV4dGVybmFsIG1lbW9yeSB1c2FnZS4KKyAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5Vmlz
aXRlZCh0aGlzT2JqLT5tX21hcC5jYXBhY2l0eSgpICogKHNpemVvZihKU09iamVjdCopICsgc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKK30KKwordm9pZCBXZWFrTWFwSW1wbDo6c2V0
KFZNJiB2bSwgSlNPYmplY3QqIGtleSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICAvLyBIZXJlIHdl
IGZvcmNlIHRoZSB3cml0ZSBiYXJyaWVyIG9uIHRoZSBrZXkuCisgICAgYXV0byByZXN1bHQgPSBt
X21hcC5hZGQoV3JpdGVCYXJyaWVyPEpTT2JqZWN0Pih2bSwgdGhpcywga2V5KS5nZXQoKSwgV3Jp
dGVCYXJyaWVyPFVua25vd24+KCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2V0KHZt
LCB0aGlzLCB2YWx1ZSk7Cit9CisKK0pTVmFsdWUgV2Vha01hcEltcGw6OmdldChKU09iamVjdCog
a2V5KQoreworICAgIGF1dG8gaXRlciA9IG1fbWFwLmZpbmQoa2V5KTsKKyAgICBpZiAoaXRlciA9
PSBtX21hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJu
IGl0ZXItPnZhbHVlLmdldCgpOworfQorCitib29sIFdlYWtNYXBJbXBsOjpyZW1vdmUoSlNPYmpl
Y3QqIGtleSkKK3sKKyAgICBhdXRvIGl0ZXIgPSBtX21hcC5maW5kKGtleSk7CisgICAgaWYgKGl0
ZXIgPT0gbV9tYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fbWFwLnJl
bW92ZShpdGVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWFrTWFwSW1wbDo6Y29u
dGFpbnMoSlNPYmplY3QqIGtleSkKK3sKKyAgICByZXR1cm4gbV9tYXAuY29udGFpbnMoa2V5KTsK
K30KKwordm9pZCBXZWFrTWFwSW1wbDo6Y2xlYXIoKQoreworICAgIG1fbWFwLmNsZWFyKCk7Cit9
CisKK3ZvaWQgV2Vha01hcEltcGw6OkRlYWRLZXlDbGVhbmVyOjp2aXNpdFdlYWtSZWZlcmVuY2Vz
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFdlYWtNYXBJbXBsKiBpbXBsID0gdGFyZ2V0
KCk7CisgICAgbV9saXZlS2V5Q291bnQgPSAwOworICAgIGZvciAoYXV0byYgcGFpciA6IGltcGwt
Pm1fbWFwKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQocGFpci5rZXkpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIG1fbGl2ZUtleUNvdW50Kys7CisgICAgICAgIHZpc2l0
b3IuYXBwZW5kKHBhaXIudmFsdWUpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChtX2xpdmVL
ZXlDb3VudCA8PSBpbXBsLT5tX21hcC5zaXplKCkpOworfQorCit2b2lkIFdlYWtNYXBJbXBsOjpE
ZWFkS2V5Q2xlYW5lcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQoreworICAgIFdlYWtNYXBJ
bXBsKiBpbXBsID0gdGFyZ2V0KCk7CisgICAgaWYgKG1fbGl2ZUtleUNvdW50ID4gaW1wbC0+bV9t
YXAuc2l6ZSgpIC8gMikgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2xpdmVLZXlDb3VudCA8
PSBpbXBsLT5tX21hcC5zaXplKCkpOworICAgICAgICBpbnQgZGVhZENvdW50ID0gaW1wbC0+bV9t
YXAuc2l6ZSgpIC0gbV9saXZlS2V5Q291bnQ7CisgICAgICAgIGlmICghZGVhZENvdW50KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBWZWN0b3I8SlNPYmplY3QqPiBkZWFkRW50cmllczsK
KyAgICAgICAgZGVhZEVudHJpZXMucmVzZXJ2ZUNhcGFjaXR5KGRlYWRDb3VudCk7CisgICAgICAg
IGZvciAoYXV0byYgcGFpciA6IGltcGwtPm1fbWFwKSB7CisgICAgICAgICAgICBpZiAoSGVhcDo6
aXNNYXJrZWQocGFpci5rZXkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgZGVhZEVudHJpZXMudW5jaGVja2VkQXBwZW5kKHBhaXIua2V5KTsKKyAgICAgICAgfQorICAg
ICAgICBmb3IgKGF1dG8mIGRlYWRFbnRyeSA6IGRlYWRFbnRyaWVzKQorICAgICAgICAgICAgaW1w
bC0+bV9tYXAucmVtb3ZlKGRlYWRFbnRyeSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFwVHlw
ZSBuZXdNYXA7CisgICAgICAgIGZvciAoYXV0byYgcGFpciA6IGltcGwtPm1fbWFwKSB7CisgICAg
ICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHBhaXIua2V5KSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIG5ld01hcC5hZGQocGFpci5rZXksIHBhaXIudmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIGltcGwtPm1fbWFwLnN3YXAobmV3TWFwKTsKKyAgICB9Cit9CisK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBJbXBs
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmUwY2RkMTQ4MzRkYWQyOGNhN2I5MGRmYmEyZTg5ZTliNzhiNTJmNTUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbC5oCkBAIC0w
LDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgV2Vha01hcEltcGwgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3Qgewor
cHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0Rlc3RydWN0aWJsZU9iamVjdDsKKworICAgIHZv
aWQgc2V0KFZNJiwgSlNPYmplY3QqLCBKU1ZhbHVlKTsKKyAgICBKU1ZhbHVlIGdldChKU09iamVj
dCopOworICAgIGJvb2wgcmVtb3ZlKEpTT2JqZWN0Kik7CisgICAgYm9vbCBjb250YWlucyhKU09i
amVjdCopOworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHR5
cGVkZWYgSGFzaE1hcDxKU09iamVjdCosIFdyaXRlQmFycmllcjxVbmtub3duPj4gTWFwVHlwZTsK
KyAgICBNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
LmJlZ2luKCk7IH0KKyAgICBNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBtX21hcC5lbmQoKTsgfQorCisgICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21h
cC5zaXplKCk7IH0KKworcHJvdGVjdGVkOgorICAgIFdlYWtNYXBJbXBsKFZNJiwgU3RydWN0dXJl
Kik7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKyAgICBzdGF0aWMgc2l6ZV90
IGVzdGltYXRlZFNpemUoSlNDZWxsKik7CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKwor
ICAgIGNsYXNzIERlYWRLZXlDbGVhbmVyIDogcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIs
IHB1YmxpYyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERl
YWRLZXlDbGVhbmVyKFdlYWtNYXBJbXBsKiBpbXBsKQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKGltcGwsIGltcGwgPT0gdGFyZ2V0KCkpOworICAgICAgICB9CisKKyAgICAg
ICAgV2Vha01hcEltcGwqIHRhcmdldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8V2Vha01hcEltcGwqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JK
RUNUX09GRlNFVE9GKFdlYWtNYXBJbXBsLCBtX2RlYWRLZXlDbGVhbmVyKSk7CisgICAgICAgIH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90Vmlz
aXRvciYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkg
b3ZlcnJpZGU7CisgICAgICAgIHVuc2lnbmVkIG1fbGl2ZUtleUNvdW50OworICAgIH07CisgICAg
RGVhZEtleUNsZWFuZXIgbV9kZWFkS2V5Q2xlYW5lcjsKKyAgICBNYXBUeXBlIG1fbWFwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwCmluZGV4IDEyODg4OTlmOTk5ODBlYWNlNjkyMTZiZDYy
MjI4OWMzMGIzMjNkNjguLmEwMjk4MjI0YTliNmU5ZTQ1N2U5ODAwZWJhMmRiOThjMTQxMTFiZDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5
cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5
cGUuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNXZWFrTWFwLmgiCi0jaW5jbHVkZSAiV2Vha01hcERhdGEuaCIKKyNpbmNsdWRlICJX
ZWFrTWFwSW1wbC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTMsNyArNTMsNyBAQCB2b2lk
IFdlYWtNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wsIGpzU3RyaW5nKCZ2bSwgIldlYWtNYXAiKSwg
RG9udEVudW0gfCBSZWFkT25seSk7CiB9CiAKLXN0YXRpYyBXZWFrTWFwRGF0YSogZ2V0V2Vha01h
cERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdmFsdWUpCitzdGF0aWMgSlNXZWFr
TWFwKiBnZXRXZWFrTWFwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHZhbHVlKQogewog
ICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBXZWFrTWFwRGF0YSogZ2V0
V2Vha01hcERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdmFsdWUpCiAgICAgfQog
CiAgICAgaWYgKEpTV2Vha01hcCogd2Vha01hcCA9IGpzRHluYW1pY0Nhc3Q8SlNXZWFrTWFwKj4o
dm0sIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHdlYWtNYXAtPndlYWtNYXBEYXRhKCk7CisgICAg
ICAgIHJldHVybiB3ZWFrTWFwOwogCiAgICAgdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29w
ZSwgV1RGOjpBU0NJSUxpdGVyYWwoIkNhbGxlZCBXZWFrTWFwIGZ1bmN0aW9uIG9uIGEgbm9uLVdl
YWtNYXAgb2JqZWN0IikpOwogICAgIHJldHVybiBudWxscHRyOwpAQCAtNzIsNyArNzIsNyBAQCBz
dGF0aWMgV2Vha01hcERhdGEqIGdldFdlYWtNYXBEYXRhKENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U1ZhbHVlIHZhbHVlKQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dl
YWtNYXBEZWxldGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgV2Vha01hcERhdGEqIG1h
cCA9IGdldFdlYWtNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Cisg
ICAgYXV0byogbWFwID0gZ2V0V2Vha01hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOwogICAgIGlmICghbWFwKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIEpTVmFsdWUga2V5ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKQEAg
LTgxLDcgKzgxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFr
TWFwRGVsZXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHByb3RvRnVuY1dlYWtNYXBHZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAg
V2Vha01hcERhdGEqIG1hcCA9IGdldFdlYWtNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50
aGlzVmFsdWUoKSk7CisgICAgYXV0byogbWFwID0gZ2V0V2Vha01hcChjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghbWFwKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUga2V5ID0gY2FsbEZyYW1lLT5h
cmd1bWVudCgwKTsKQEAgLTkyLDcgKzkyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBwcm90b0Z1bmNXZWFrTWFwR2V0KENhbGxGcmFtZSogY2FsbEZyYW1lKQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBIYXMoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCiB7Ci0gICAgV2Vha01hcERhdGEqIG1hcCA9IGdldFdlYWtNYXBEYXRhKGNhbGxGcmFtZSwg
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgYXV0byogbWFwID0gZ2V0V2Vha01hcChjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghbWFwKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUga2V5ID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKQEAgLTEwNCw3ICsxMDQsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBTZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFdlYWtNYXBEYXRhKiBtYXAgPSBnZXRXZWFrTWFwRGF0
YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGF1dG8qIG1hcCA9IGdl
dFdlYWtNYXAoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBBU1NFUlQo
ISFzY29wZS5leGNlcHRpb24oKSA9PSAhbWFwKTsKICAgICBpZiAoIW1hcCkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldFByb3RvdHlwZS5jcHAKaW5kZXggY2M1MmM4ZDBhNjRj
YzE1OGNiMDY5NDBiZTlmNWIzNmMzMzZiNjQ5ZS4uNzgxMzE3NjAxZWI5NGEyMzIwYWQ4YTFhYzEw
YTg4MWNmZTM2NTkyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V2Vha1NldFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V2Vha1NldFByb3RvdHlwZS5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJKU1dlYWtTZXQuaCIKLSNpbmNsdWRlICJXZWFrTWFwRGF0YS5o
IgorI2luY2x1ZGUgIldlYWtNYXBJbXBsLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01MSw3
ICs1MSw3IEBAIHZvaWQgV2Vha1NldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZt
LCAiV2Vha1NldCIpLCBEb250RW51bSB8IFJlYWRPbmx5KTsKIH0KIAotc3RhdGljIFdlYWtNYXBE
YXRhKiBnZXRXZWFrTWFwRGF0YShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB2YWx1ZSkK
K3N0YXRpYyBKU1dlYWtTZXQqIGdldFdlYWtTZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTYyLDcgKzYyLDcgQEAgc3RhdGljIFdl
YWtNYXBEYXRhKiBnZXRXZWFrTWFwRGF0YShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB2
YWx1ZSkKICAgICB9CiAKICAgICBpZiAoSlNXZWFrU2V0KiB3ZWFrU2V0ID0ganNEeW5hbWljQ2Fz
dDxKU1dlYWtTZXQqPih2bSwgdmFsdWUpKQotICAgICAgICByZXR1cm4gd2Vha1NldC0+d2Vha01h
cERhdGEoKTsKKyAgICAgICAgcmV0dXJuIHdlYWtTZXQ7CiAKICAgICB0aHJvd1R5cGVFcnJvcihj
YWxsRnJhbWUsIHNjb3BlLCBXVEY6OkFTQ0lJTGl0ZXJhbCgiQ2FsbGVkIFdlYWtTZXQgZnVuY3Rp
b24gb24gYSBub24tV2Vha1NldCBvYmplY3QiKSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03
MCwyMCArNzAsMjAgQEAgc3RhdGljIFdlYWtNYXBEYXRhKiBnZXRXZWFrTWFwRGF0YShDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB2YWx1ZSkKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBwcm90b0Z1bmNXZWFrU2V0RGVsZXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAg
IFdlYWtNYXBEYXRhKiBtYXAgPSBnZXRXZWFrTWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCkpOwotICAgIGlmICghbWFwKQorICAgIGF1dG8qIHNldCA9IGdldFdlYWtTZXQo
Y2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIXNldCkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIGtl
eSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oa2V5LmlzT2JqZWN0KCkgJiYgbWFwLT5yZW1vdmUoYXNPYmplY3Qoa2V5KSkpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihrZXkuaXNPYmplY3QoKSAmJiBz
ZXQtPnJlbW92ZShhc09iamVjdChrZXkpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHByb3RvRnVuY1dlYWtTZXRIYXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAg
V2Vha01hcERhdGEqIG1hcCA9IGdldFdlYWtNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50
aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFtYXApCisgICAgYXV0byogc2V0ID0gZ2V0V2Vha1NldChj
YWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghc2V0KQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUga2V5
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihrZXkuaXNPYmplY3QoKSAmJiBtYXAtPmNvbnRhaW5zKGFzT2JqZWN0KGtleSkpKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oa2V5LmlzT2JqZWN0KCkgJiYg
c2V0LT5jb250YWlucyhhc09iamVjdChrZXkpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHByb3RvRnVuY1dlYWtTZXRBZGQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05
MSwxNCArOTEsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFr
U2V0QWRkKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBXZWFr
TWFwRGF0YSogbWFwID0gZ2V0V2Vha01hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNW
YWx1ZSgpKTsKLSAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhbWFwKTsKLSAgICBp
ZiAoIW1hcCkKKyAgICBhdXRvKiBzZXQgPSBnZXRXZWFrU2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CisgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXNldCk7
CisgICAgaWYgKCFzZXQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgSlNWYWx1ZSBrZXkgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGlm
ICgha2V5LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dU
eXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgV1RGOjpBU0NJSUxpdGVyYWwoIkF0dGVtcHRlZCB0
byBhZGQgYSBub24tb2JqZWN0IGtleSB0byBhIFdlYWtTZXQiKSkpOwotICAgIG1hcC0+c2V0KHZt
LCBhc09iamVjdChrZXkpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICBzZXQtPnNldCh2bSwgYXNPYmpl
Y3Qoa2V5KSwganNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxs
RnJhbWUtPnRoaXNWYWx1ZSgpKTsKIH0KIAo=
</data>
<flag name="review"
          id="339331"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>