<?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>203276</bug_id>
          
          <creation_ts>2019-10-22 14:48:08 -0700</creation_ts>
          <short_desc>BytecodeIndex should be a proper C++ class</short_desc>
          <delta_ts>2019-10-24 08:33:41 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=203358</see_also>
          <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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jbedard</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1582600</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-10-22 14:48:08 -0700</bug_when>
    <thetext>BytecodeIndex should be a proper C++ class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582611</commentid>
    <comment_count>1</comment_count>
      <attachid>381615</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-10-22 15:02:07 -0700</bug_when>
    <thetext>Created attachment 381615
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582613</commentid>
    <comment_count>2</comment_count>
      <attachid>381616</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-10-22 15:07:25 -0700</bug_when>
    <thetext>Created attachment 381616
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582614</commentid>
    <comment_count>3</comment_count>
      <attachid>381617</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-10-22 15:11:11 -0700</bug_when>
    <thetext>Created attachment 381617
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582618</commentid>
    <comment_count>4</comment_count>
      <attachid>381618</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-10-22 15:17:04 -0700</bug_when>
    <thetext>Created attachment 381618
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582629</commentid>
    <comment_count>5</comment_count>
      <attachid>381618</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-10-22 15:40:20 -0700</bug_when>
    <thetext>Comment on attachment 381618
Patch

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

r=me with fixes.

&gt; Source/JavaScriptCore/bytecode/BytecodeIndex.h:53
&gt; +    explicit operator bool() const { return m_offset != std::numeric_limits&lt;uint32_t&gt;::max(); }

Can you use a &quot;static constexpr InvalidOffset = std::numeric_limits&lt;uint32_t&gt;::max();&quot; and use InvalidOffset here instead?  I think it will read better.

&gt; Source/JavaScriptCore/bytecode/BytecodeIndex.h:66
&gt; +    uint32_t m_offset { std::numeric_limits&lt;uint32_t&gt;::max() };

Ditto.  Use InvalidOffset here.

&gt; Source/JavaScriptCore/bytecode/InstructionStream.h:80
&gt; +        inline Offset offset() const { return m_index; }

Rename m_index to m_offset?  This cross-mixed naming is going to be a source of confusion.  You can do this in a follow up patch.

&gt; Source/JavaScriptCore/bytecode/LazyOperandValueProfile.h:48
&gt; -        : m_bytecodeOffset(0) // 0 = empty value
&gt; +        : m_bytecodeIndex(0) // 0 = empty value
&gt;          , m_operand(VirtualRegister()) // not a valid operand index in our current scheme
&gt;      {
&gt;      }
&gt;      
&gt;      LazyOperandValueProfileKey(WTF::HashTableDeletedValueType)
&gt; -        : m_bytecodeOffset(1) // 1 = deleted value
&gt; +        : m_bytecodeIndex(1) // 1 = deleted value

These feels like they deserve a comment as to why you can&apos;t use the default empty and deleted value instead of 0 and 1.  I presume the default values will cause problems?  The comment will prevent someone naive (like myself) coming along in the future and changing them thus.

&gt; Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.cpp:55
&gt; +        RELEASE_ASSERT(bytecodeIndex.offset());

Shouldn&apos;t this be RELEASE_ASSERT(bytecodeIndex)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582641</commentid>
    <comment_count>6</comment_count>
      <attachid>381622</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-10-22 15:55:59 -0700</bug_when>
    <thetext>Created attachment 381622
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582643</commentid>
    <comment_count>7</comment_count>
      <attachid>381618</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-10-22 15:56:21 -0700</bug_when>
    <thetext>Comment on attachment 381618
Patch

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

&gt;&gt; Source/JavaScriptCore/bytecode/BytecodeIndex.h:53
&gt;&gt; +    explicit operator bool() const { return m_offset != std::numeric_limits&lt;uint32_t&gt;::max(); }
&gt; 
&gt; Can you use a &quot;static constexpr InvalidOffset = std::numeric_limits&lt;uint32_t&gt;::max();&quot; and use InvalidOffset here instead?  I think it will read better.

Done.

&gt;&gt; Source/JavaScriptCore/bytecode/InstructionStream.h:80
&gt;&gt; +        inline Offset offset() const { return m_index; }
&gt; 
&gt; Rename m_index to m_offset?  This cross-mixed naming is going to be a source of confusion.  You can do this in a follow up patch.

Sure.

&gt;&gt; Source/JavaScriptCore/bytecode/LazyOperandValueProfile.h:48
&gt;&gt; +        : m_bytecodeIndex(1) // 1 = deleted value
&gt; 
&gt; These feels like they deserve a comment as to why you can&apos;t use the default empty and deleted value instead of 0 and 1.  I presume the default values will cause problems?  The comment will prevent someone naive (like myself) coming along in the future and changing them thus.

I think I just left it because that&apos;s how it was before. I don&apos;t think it will cause any problems. I can change it.

&gt;&gt; Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.cpp:55
&gt;&gt; +        RELEASE_ASSERT(bytecodeIndex.offset());
&gt; 
&gt; Shouldn&apos;t this be RELEASE_ASSERT(bytecodeIndex)?

No, the old line above now covers the != UINT_MAX case. This covers the bytecodeIndex.offset() == 0 case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582647</commentid>
    <comment_count>8</comment_count>
      <attachid>381618</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-10-22 15:59:35 -0700</bug_when>
    <thetext>Comment on attachment 381618
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.cpp:55
&gt;&gt;&gt; +        RELEASE_ASSERT(bytecodeIndex.offset());
&gt;&gt; 
&gt;&gt; Shouldn&apos;t this be RELEASE_ASSERT(bytecodeIndex)?
&gt; 
&gt; No, the old line above now covers the != UINT_MAX case. This covers the bytecodeIndex.offset() == 0 case.

Oh, I see.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582690</commentid>
    <comment_count>9</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-10-22 17:55:45 -0700</bug_when>
    <thetext>Committed r251468: &lt;https://trac.webkit.org/changeset/251468&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582691</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-22 17:56:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/56523782&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582713</commentid>
    <comment_count>11</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-10-22 20:06:34 -0700</bug_when>
    <thetext>Committed r251471: &lt;https://trac.webkit.org/changeset/251471&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582714</commentid>
    <comment_count>12</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-10-22 20:10:38 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #11)
&gt; Committed r251471: &lt;https://trac.webkit.org/changeset/251471&gt;

Ah, thanks. Unfortunately, the WinCairo EWS wasn&apos;t working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582715</commentid>
    <comment_count>13</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-10-22 20:14:27 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #12)
&gt; (In reply to Yusuke Suzuki from comment #11)
&gt; &gt; Committed r251471: &lt;https://trac.webkit.org/changeset/251471&gt;
&gt; 
&gt; Ah, thanks. Unfortunately, the WinCairo EWS wasn&apos;t working.

And, maybe, we also need to update 32bit things (but EWS is not working, sad :().
32bit had different implementation of CallSiteIndex. We should remove this difference I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583344</commentid>
    <comment_count>14</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-10-24 07:40:52 -0700</bug_when>
    <thetext>Just an FYI, this change broke a bunch of our Windows testers, Zan fixed it in &lt;https://trac.webkit.org/changeset/251534&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381615</attachid>
            <date>2019-10-22 15:02:07 -0700</date>
            <delta_ts>2019-10-22 15:07:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203276-20191022150205.patch</filename>
            <type>text/plain</type>
            <size>341287</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxNDU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
Nzk2MzRkZjY2NjI1NjAwZjY1NWFmMzQyZmZjNTgyZWI4MTBiMGExLi4zOGI3MDU5ODJiZDdmZmY3
NDA3ZTFlYjRhNDE4ZjI1OTIwMzBkNGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NTYgQEAKKzIwMTktMTAtMjIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBzaG91bGQgYmUgYSBwcm9wZXIgQysrIGNs
YXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMy
NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIG1ha2VzIGEgY2hhbmdlIHRvIGhvdyB3ZSByZWZlciB0byB0aGUgYnl0ZWNvZGUgaW5k
ZXggaW4KKyAgICAgICAgYSBieXRlY29kZSBzdHJlYW0uIFByZXZpb3VzbHkgd2UganVzdCB1c2Vk
IGFuIHVuc2lnbmVkIG51bWJlciB0bworICAgICAgICByZXByZXNlbnQgdGhlIGluZGV4LCB0aGlz
IHBhdGNoIGNoYW5nZXMgbW9zdCBvZiB0aGUgY29kZSB0byB1c2UgYQorICAgICAgICBCeXRlY29k
ZUluZGV4IGNsYXNzIGluc3RlYWQuIFRoZSBvbmx5IHBsYWNlcyB3aGVyZSB0aGlzIHBhdGNoIGRv
ZXMKKyAgICAgICAgbm90IGNoYW5nZSB0aGlzIGlzIGZvciBqdW1wIGFuZCBzd2l0Y2ggdGFyZ2V0
cyAvIGRlbHRhcy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQnlW
YWxJbmZvLmg6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAg
KEpTQzo6Z2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVCYXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpj
b21wdXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRp
b24uY3BwOgorICAgICAgICAoSlNDOjpHZW5lcmF0b3JMaXZlbmVzc0FuYWx5c2lzOjpydW4pOgor
ICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVJbmRleDo6ZHVtcCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNv
ZGVJbmRleC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmFzQml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW5kZXg6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpk
ZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9y
IGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpvcGVyYXRvciA9PSBj
b25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yICE9IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3IgPCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yID4gY29uc3QpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUluZGV4OjpvcGVyYXRvciA8PSBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
SW5kZXg6Om9wZXJhdG9yID49IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6
ZnJvbUJpdHMpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4SGFzaDo6aGFzaCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXhIYXNoOjplcXVhbCk6CisgICAgICAgICogYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVLaWxscyk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNv
ZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVw
T3Zlckluc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0
aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQmxv
Y2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVu
ZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5l
c3NJbmZvQXRCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4
KToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5
dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6
OmNvbXB1dGVGcm9tTExJbnQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZvcik6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRh
KToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q2FsbExpbmtJ
bmZvRm9yQnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkUmFyZUNh
c2VQcm9maWxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVGb3JC
eXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVD
b3VudEZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmhhbmRsZXJG
b3JCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExp
dmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleFNsb3cpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb2x1bW5OdW1iZXJGb3JCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNPcERlYnVnRm9yTGluZUFuZENvbHVt
bik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp0cnlHZXRWYWx1ZVByb2ZpbGVGb3JCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsaWRhdGUpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmNvdWxkVGFrZVNwZWNpYWxBcml0aEZhc3RDYXNlKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpieXRlY29kZUluZGV4RnJvbUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVj
b2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYW5kbGVyRm9y
Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3Vy
ZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0
ZWNvZGVPZmZzZXRTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5l
TnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNvbHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3VsZFRha2VTcGVjaWFsRmFzdENhc2Up
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlT2Zmc2V0RnJvbUNh
bGxTaXRlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpjb3VsZFRha2VTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Ynl0ZWNvZGVJbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHA6
CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmFwcHJveGltYXRlSGFzaCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW46OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW46OmlzU2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9y
aWdpbjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
T3JpZ2luOjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6
T3V0T2ZMaW5lQ29kZU9yaWdpbjo6T3V0T2ZMaW5lQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6
OkNvZGVPcmlnaW46OmJ1aWxkQ29tcG9zaXRlVmFsdWUpOgorICAgICAgICAoSlNDOjpDb2RlT3Jp
Z2luOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6ZHVtcCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6RXhpdFByb2ZpbGU6OmV4aXRTaXRlc0Zvcik6CisgICAgICAgICogYnl0
ZWNvZGUvREZHRXhpdFByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRT
aXRlOjpGcmVxdWVudEV4aXRTaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRT
aXRlOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRT
aXRlOjpzdWJzdW1lcyBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0
ZTo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6Ynl0
ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlF1ZXJ5
YWJsZUV4aXRQcm9maWxlOjpoYXNFeGl0U2l0ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
RnJlcXVlbnRFeGl0U2l0ZTo6Ynl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGJ5dGVjb2RlL0RlZmVycmVkU291cmNlRHVtcC5jcHA6CisgICAgICAgIChKU0M6OkRlZmVy
cmVkU291cmNlRHVtcDo6RGVmZXJyZWRTb3VyY2VEdW1wKToKKyAgICAgICAgKEpTQzo6RGVmZXJy
ZWRTb3VyY2VEdW1wOjpkdW1wKToKKyAgICAgICAgKiBieXRlY29kZS9EZWZlcnJlZFNvdXJjZUR1
bXAuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvRnVsbEJ5dGVj
b2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OmdldExp
dmVuZXNzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6Om9wZXJh
bmRJc0xpdmUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAgICAg
KEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6OkdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0lDU3RhdHVzVXRpbHMuY3BwOgorICAgICAgICAo
SlNDOjpoYXNCYWRDYWNoZUV4aXRTaXRlKToKKyAgICAgICAgKiBieXRlY29kZS9JQ1N0YXR1c1V0
aWxzLmg6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SW5CeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5SWRT
dGF0dXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwOgorICAgICAg
ICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OmR1bXBJbkNvbnRleHQgY29uc3QpOgorICAgICAgICAq
IGJ5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9m
U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVz
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaDoKKyAgICAgICAgKEpT
Qzo6SW5zdHJ1Y3Rpb25TdHJlYW06OkJhc2VSZWY6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChK
U0M6Okluc3RydWN0aW9uU3RyZWFtOjpCYXNlUmVmOjppbmRleCBjb25zdCk6CisgICAgICAgIChK
U0M6Okluc3RydWN0aW9uU3RyZWFtOjphdCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlND
OjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6
OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OmlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OmJ5
dGVjb2RlT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKToKKyAgICAgICAgKiBieXRlY29kZS9NZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQp
OgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBi
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6U3RydWN0dXJlU3R1
YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVj
b2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFuZGxl
ckZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bGlu
ZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29k
ZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aDoKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6UmFy
ZUNhc2VQcm9maWxlOjpSYXJlQ2FzZVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpnZXRSYXJlQ2Fz
ZVByb2ZpbGVCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Z2V0UmFyZUNhc2VQcm9maWxl
Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZmluYWxpemUpOgor
ICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6
RGVidWdnZXJDYWxsRnJhbWU6OmN1cnJlbnRQb3NpdGlvbik6CisgICAgICAgICogZGZnL0RGR0Jh
c2ljQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2sp
OgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6Z2V0
Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpibG9ja0ZvckJ5dGVj
b2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
Zmx1c2hGb3JUZXJtaW5hbEltcGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpmbHVzaElmVGVybWluYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpi
cmFuY2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0UHJlZGlj
dGlvbldpdGhvdXRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
Z2V0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFy
cmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om1ha2VTYWZlKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bWFrZURpdlNhZmUpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVW50YXJnZXRhYmxlQmxv
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjptYWtlQmxvY2tUYXJnZXRh
YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxs
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGxWYXJpYW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6
OkNvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6
OkNvbW1vbkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0NvbW1v
bkRhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpjYXRjaE9TUkVudHJ5RGF0
YUZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OmFwcGVu
ZENhdGNoRW50cnlwb2ludCk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Y29tcGlsZUltcGwpOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDoKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OndpbGxDYXRjaEV4Y2VwdGlvbkluTWFjaGluZUZyYW1lKToKKyAgICAgICAgKiBkZmcv
REZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29kZTo6Y2xlYXJPU1JFbnRyeUJsb2NrQW5kUmVzZXRUaHJlc2hvbGRzKToKKyAg
ICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmFw
cGVuZE9TUkVudHJ5RGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6b3NyRW50cnlE
YXRhRm9yQnl0ZWNvZGVJbmRleCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SklUQ29tcGlsZXIpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0U3RhcnRPZkNvZGUpOgorICAg
ICAgICAqIGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpoYW5k
bGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkVudHJ5RGF0YTo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVw
YXJlQ2F0Y2hPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6CisgICAgICAg
IChKU0M6OkRGRzo6Z2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6cmVp
ZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRv
VGFyZ2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmludE9TUkV4aXQpOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkV4aXQ6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0
OjpkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKToKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRK
dW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDoK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJh
dGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1w
bCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNl
c3NhcnkpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6b3NyRW50cnlCeXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFu
Ojp0aWVyVXBJbkxvb3BIaWVyYXJjaHkpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OnRpZXJV
cEFuZE9TUkVudGVyQnl0ZWNvZGVzKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVN1Yik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmVtaXRTd2l0Y2hDaGFyU3RyaW5nSnVtcCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAg
ICAgKEpTQzo6REZHOjpUaWVyVXBDaGVja0luamVjdGlvblBoYXNlOjpidWlsZE5hdHVyYWxMb29w
VG9Mb29wSGludE1hcCk6CisgICAgICAgICogZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRm9yT1NS
RW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUp
OgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZnRsL0ZUTENvbXBp
bGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExG
b3JPU1JFbnRyeUpJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENv
ZGU6OnNldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklU
Q29kZTo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9C
My5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVZhbHVlQWRkKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVZhbHVlU3ViKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVZhbHVlTXVsKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUFyaXRoQWRkT3JTdWIp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVmFsdWVOZWdh
dGUpOgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuaDoKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNh
bGxTaXRlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxT
aXRlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OmNvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmR1bXAp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJ
bmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJh
dG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpvcGVyYXRvcj09
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Yml0cyBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAo
SlNDOjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleDo6RGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgpOgor
ICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6OkdldFN0YWNrVHJhY2VGdW5jdG9yOjpvcGVyYXRvcigpIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6ZmluZEV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAqIGludGVy
cHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwOgorICAgICAgICAoSlNDOjpTaGFkb3dDaGlja2VuOjp1
cGRhdGUpOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6CisgICAgICAg
IChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZSk6CisgICAgICAgIChKU0M6
OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAgIChKU0M6OlN0YWNrVmlz
aXRvcjo6RnJhbWU6OnJldHJpZXZlRXhwcmVzc2lvbkluZm8gY29uc3QpOgorICAgICAgICAoSlND
OjpTdGFja1Zpc2l0b3I6OkZyYW1lOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Ynl0
ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmJ5
dGVjb2RlT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpKSVQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRFbnRlck9wdGlt
aXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKToKKyAgICAgICAgKEpTQzo6SklUOjps
aW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJz
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkNhbGxSZWNvcmQ6OkNhbGxS
ZWNvcmQpOgorICAgICAgICAoSlNDOjpTbG93Q2FzZUVudHJ5OjpTbG93Q2FzZUVudHJ5KToKKyAg
ICAgICAgKEpTQzo6U3dpdGNoUmVjb3JkOjpTd2l0Y2hSZWNvcmQpOgorICAgICAgICAoSlNDOjpC
eVZhbENvbXBpbGF0aW9uSW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAqIGpp
dC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJ
VENvZGVNYXAuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZU1hcDo6RW50cnk6OkVudHJ5KToKKyAg
ICAgICAgKEpTQzo6SklUQ29kZU1hcDo6RW50cnk6OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVRDb2RlTWFwOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlTWFw
OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklURGlzYXNzZW1ibGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklURGlzYXNzZW1ibGVyOjpkdW1wVmVjdG9yRm9ySW5zdHJ1Y3Rpb25zKToKKyAg
ICAgICAgKEpTQzo6SklURGlzYXNzZW1ibGVyOjpyZXBvcnRJbnN0cnVjdGlvbnMpOgorICAgICAg
ICAqIGppdC9KSVREaXNhc3NlbWJsZXIuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXROYWtlZENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXROYWtlZFRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjp1cGRhdGVUb3BDYWxsRnJhbWUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6SklUOjphZGRTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJVDo6YWRk
SnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93VG9Ib3QpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6Omxp
bmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9j
aGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3
aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgICogaml0L0pJVE9wZXJh
dGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZXRCeVZhbCk6CisgICAgICAgIChKU0M6OnRyeUdl
dEJ5VmFsT3B0aW1pemUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfaWQpOgorICAgICAgICAqIGppdC9KSVRXb3Jr
bGlzdC5jcHA6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpQbGFuOjpQbGFuKToKKyAgICAg
ICAgKEpTQzo6SklUV29ya2xpc3Q6OlBsYW46OmNvbXBpbGVOb3cpOgorICAgICAgICAoSlNDOjpK
SVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmNv
bXBpbGVOb3cpOgorICAgICAgICAqIGppdC9KSVRXb3JrbGlzdC5oOgorICAgICAgICAqIGppdC9Q
Q1RvQ29kZU9yaWdpbk1hcC5jcHA6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpQ
Q1RvQ29kZU9yaWdpbk1hcCk6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpmaW5k
UEMgY29uc3QpOgorICAgICAgICAqIGppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oOgorICAgICAgICAo
SlNDOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKToKKyAgICAg
ICAgKiBqaXQvU2xvd1BhdGhDYWxsLmg6CisgICAgICAgIChKU0M6OkpJVFNsb3dQYXRoQ2FsbDo6
Y2FsbCk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTElu
dDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyT3Jp
Z2luLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Ok9yaWdpbjo6T3JpZ2luKToKKyAgICAg
ICAgKEpTQzo6UHJvZmlsZXI6Ok9yaWdpbjo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OlBy
b2ZpbGVyOjpPcmlnaW46OnRvSlMgY29uc3QpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVy
T3JpZ2luLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpPcmlnaW46Ok9yaWdpbik6CisgICAg
ICAgIChKU0M6OlByb2ZpbGVyOjpPcmlnaW46Om9wZXJhdG9yISBjb25zdCk6CisgICAgICAgIChK
U0M6OlByb2ZpbGVyOjpPcmlnaW46OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpQcm9maWxlcjo6T3JpZ2luOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6
Ok9yaWdpbjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvRXJyb3IuY3BwOgorICAgICAgICAoSlNDOjpnZXRCeXRlY29kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6Z2V0Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvRXJy
b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlND
OjphcHBlbmRTb3VyY2VUb0Vycm9yKToKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OnRyeUdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpTYW1wbGlu
Z1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKToKKyAgICAgICAgKEpTQzo6
U2FtcGxpbmdQcm9maWxlcjo6cmVwb3J0VG9wQnl0ZWNvZGVzKToKKyAgICAgICAgKiBydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuaDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3Rh
Y2tGcmFtZTo6Q29kZUxvY2F0aW9uOjpoYXNCeXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAg
KiBydW50aW1lL1N0YWNrRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpTdGFja0ZyYW1lOjpTdGFj
a0ZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6Y29tcHV0ZUxpbmVBbmRDb2x1bW4g
Y29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3RhY2tGcmFtZS5oOgorICAgICAgICAoSlNDOjpT
dGFja0ZyYW1lOjpoYXNCeXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RhY2tG
cmFtZTo6Ynl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6Omhhc0J5dGVj
b2RlT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6Ynl0
ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmR1bXBSZWdpc3RlcnMpOgorCiAyMDE5LTEwLTIy
ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggaW5jb3JyZWN0
IGFzc2VydGlvbiBpbiBvcGVyYXRpb25SZWdFeHBFeGVjTm9uR2xvYmFsT3JTdGlja3koKS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjA4OGI5NWY0YTJjMGViMDVmNGQ2MDc4ODVk
YmEwZDc2MDViNmEyNy4uZTY2NGU0MDAzMDg3YmEzOTg4ZTE0MmE5MTU4NTY2OWZkN2JiNDc0NSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk0NCw2ICs5NDQsNyBAQAogCQk1MzU1
NTcxNDFEOUQ5RUE1MDA2RDU4M0IgLyogV2FzbU1lbW9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM1NTU3MTMxRDlEOUVBNTAwNkQ1ODNCIC8qIFdh
c21NZW1vcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1MzVDMjQ2MTFGNzg5MjhFMDA2RUM0MEUgLyogY3JlYXRlX3JlZ2V4X3RhYmxlcyBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MThGODIxMTE3OEVC
NEIwMDI0NjVBNyAvKiBjcmVhdGVfcmVnZXhfdGFibGVzICovOyB9OwogCQk1MzVDMjQ2QzFGN0Ex
Nzc4MDA2RUM0MEUgLyogVW5pZmllZFNvdXJjZTEzNi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzVDMjQ2QjFGN0ExNzc3MDA2RUM0MEUgLyogVW5p
ZmllZFNvdXJjZTEzNi5jcHAgKi87IH07CisJCTUzNjYzRkRBMjM1NjJGOTYwMDVFQTY4QyAvKiBC
eXRlY29kZUluZGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzY2M0ZEOTIzNTYyRjkwMDA1RUE2OEMgLyogQnl0ZWNvZGVJbmRleC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNkIzMTBDMUY3MUM1
OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlMTE5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNkIzMDg3MUY3MUM1MzgwMDM3RkMzMyAvKiBVbmlm
aWVkU291cmNlMTE5LmNwcCAqLzsgfTsKIAkJNTM2QjMxMEQxRjcxQzU5OTAwMzdGQzMzIC8qIFVu
aWZpZWRTb3VyY2UxMjUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTM2QjMwODgxRjcxQzUzODAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UxMjUuY3Bw
ICovOyB9OwogCQk1MzZCMzEwRTFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTEzMS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzZCMzA4
OTFGNzFDNTM4MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTEzMS5jcHAgKi87IH07CkBAIC0zNjAy
LDYgKzM2MDMsOCBAQAogCQk1MzU1NTcxNTFEOURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtTWVtb3J5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM1QzI0NkIxRjdBMTc3NzAwNkVDNDBFIC8q
IFVuaWZpZWRTb3VyY2UxMzYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gVW5pZmllZFNvdXJjZTEzNi5jcHA7IHBhdGggPSAiRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlw
dENvcmUvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMzYuY3BwIjsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTM1RTA4QzkyMjU0NjBBQjAwREYwMENBIC8qIHBv
c3Rwcm9jZXNzLWhlYWRlci1ydWxlICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQuc2g7IHBhdGggPSAi
cG9zdHByb2Nlc3MtaGVhZGVyLXJ1bGUiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MzYwREFCQjIzNTZBRENBMDAzRjZBQjggLyogQnl0ZWNvZGVJbmRleC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBCeXRlY29kZUluZGV4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTM2NjNGRDkyMzU2MkY5MDAwNUVBNjhDIC8qIEJ5dGVjb2RlSW5kZXguaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVJbmRleC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzY5NkU1NzIwQTNBNzAyMDBEN0UwMUUgLyogQnl0ZWNvZGVTdHJ1Y3RzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlU3RydWN0cy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzZCMzA4NzFGNzFDNTM4MDAzN0ZDMzMgLyogVW5p
ZmllZFNvdXJjZTExOS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBV
bmlmaWVkU291cmNlMTE5LmNwcDsgcGF0aCA9ICJEZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29y
ZS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTExOS5jcHAiOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MzZCMzA4ODFGNzFDNTM4MDAzN0ZDMzMgLyogVW5pZmll
ZFNvdXJjZTEyNS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBVbmlm
aWVkU291cmNlMTI1LmNwcDsgcGF0aCA9ICJEZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS91
bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTEyNS5jcHAiOyBzb3VyY2VUcmVlID0gQlVJTFRf
UFJPRFVDVFNfRElSOyB9OwpAQCAtODEwMiw2ICs4MTA1LDggQEAKIAkJCQlFM0QyNjQyNjFEMzhD
MDQyMDAwQkUxNzQgLyogQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwICovLAogCQkJCUUz
RDI2NDI3MUQzOEMwNDIwMDBCRTE3NCAvKiBCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5oICov
LAogCQkJCUUzRDI2NDI4MUQzOEMwNDIwMDBCRTE3NCAvKiBCeXRlY29kZUdyYXBoLmggKi8sCisJ
CQkJNTM2MERBQkIyMzU2QURDQTAwM0Y2QUI4IC8qIEJ5dGVjb2RlSW5kZXguY3BwICovLAorCQkJ
CTUzNjYzRkQ5MjM1NjJGOTAwMDVFQTY4QyAvKiBCeXRlY29kZUluZGV4LmggKi8sCiAJCQkJNzA5
NEM0REMxQUU0Mzk1MzAwNDFBMkVFIC8qIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuY3BwICov
LAogCQkJCTcwOTRDNEREMUFFNDM5NTMwMDQxQTJFRSAvKiBCeXRlY29kZUludHJpbnNpY1JlZ2lz
dHJ5LmggKi8sCiAJCQkJMEYyREQ4MEExQUIzRDg1ODAwQkJCOEU4IC8qIEJ5dGVjb2RlS2lsbHMu
aCAqLywKQEAgLTg5OTYsNiArOTAwMSw3IEBACiAJCQkJOTY5QTA3MjMwRUQxQ0UzMzAwRjFGNjgx
IC8qIEJ5dGVjb2RlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFODFEMzhE
MDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzMjhEQUU5MUQzOEQwMDUwMDFBMjUyOSAvKiBCeXRlY29kZUdyYXBoLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MzY2M0ZEQTIzNTYyRjk2MDA1RUE2OEMgLyogQnl0ZWNvZGVJbmRleC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5NEM0REYxQUU0Mzk1MzAwNDFBMkVFIC8qIEJ5dGVjb2Rl
SW50cmluc2ljUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODBCMUFCM0Q4NTgw
MEJCQjhFOCAvKiBCeXRlY29kZUtpbGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZDQUUxMzE3
QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggaW4gSGVhZGVycyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA3Y2VkNjhiMTc3ZjQ5MWUzOTA0OTE5
NDBkZjg4ZWUzNTQyNDg2ZmE3Li5jMzI4ZmJhYjA4ZDliODNjNjE3YTY1MjQ1N2M2MTA5MTE4MmQ1
NjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0xOTcsNiArMTk3LDcgQEAgYnl0
ZWNvZGUvQXJyYXlQcm9maWxlLmNwcAogYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcAog
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCiBieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlm
aWNhdGlvbi5jcHAKK2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCiBieXRlY29kZS9CeXRlY29k
ZUludHJpbnNpY1JlZ2lzdHJ5LmNwcAogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmNwcAogYnl0ZWNvZGUvQnl0ZWNvZGVSZXdyaXRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAppbmRleCAzMzk5ZDU4MWUxZjJjOGZjN2NmMTcyZTY2NmU3
YzcyODc4ZjRiNTQ1Li5iN2U5Mzc5NDVhOTA5NDZlMmMwNTUyMjc2Y2IxMzA1MzBmNDM4OWFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCkBAIC0yMjUsNyAr
MjI1LDcgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiBzdHJ1Y3QgQnlWYWxJbmZvIHsKICAgICBCeVZhbEluZm8oKSB7
IH0KIAotICAgIEJ5VmFsSW5mbyh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlTG9jYXRpb25K
dW1wPEpTSW50ZXJuYWxQdHJUYWc+IG5vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9uSnVtcDxKU0lu
dGVybmFsUHRyVGFnPiBiYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4gZXhjZXB0aW9uSGFuZGxlciwgSklUQXJyYXlNb2RlIGFycmF5TW9kZSwgQXJy
YXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IGJhZFR5cGVEb25lVGFyZ2V0LCBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PiBiYWRUeXBlTmV4dEhvdFBhdGhUYXJnZXQsIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IHNsb3dQYXRoVGFyZ2V0KQorICAgIEJ5VmFsSW5mbyhCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgsIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gbm90SW5kZXhKdW1w
LCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IGJhZFR5cGVKdW1wLCBDb2RlTG9j
YXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBleGNlcHRpb25IYW5kbGVyLCBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gYmFkVHlwZURvbmVUYXJnZXQsIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGJhZFR5cGVOZXh0SG90UGF0aFRhcmdldCwgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhUYXJnZXQpCiAgICAgICAgIDog
bm90SW5kZXhKdW1wKG5vdEluZGV4SnVtcCkKICAgICAgICAgLCBiYWRUeXBlSnVtcChiYWRUeXBl
SnVtcCkKICAgICAgICAgLCBleGNlcHRpb25IYW5kbGVyKGV4Y2VwdGlvbkhhbmRsZXIpCkBAIC0y
NDksNyArMjQ5LDcgQEAgc3RydWN0IEJ5VmFsSW5mbyB7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gYmFkVHlwZU5leHRIb3RQYXRoVGFyZ2V0OwogICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoVGFyZ2V0OwogICAgIEFycmF5UHJv
ZmlsZSogYXJyYXlQcm9maWxlOwotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXg7CisgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OwogICAgIHVuc2lnbmVkIHNsb3dQYXRoQ291bnQ7CiAg
ICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICBJZGVudGlmaWVyIGNh
Y2hlZElkOwpAQCAtMjYwLDcgKzI2MCw3IEBAIHN0cnVjdCBCeVZhbEluZm8gewogICAgIGJvb2wg
c2VlbiA6IDE7CiB9OwogCi1pbmxpbmUgdW5zaWduZWQgZ2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRl
eChCeVZhbEluZm8qIGluZm8pCitpbmxpbmUgQnl0ZWNvZGVJbmRleCBnZXRCeVZhbEluZm9CeXRl
Y29kZUluZGV4KEJ5VmFsSW5mbyogaW5mbykKIHsKICAgICByZXR1cm4gaW5mby0+Ynl0ZWNvZGVJ
bmRleDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUJhc2ljQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlQmFzaWNCbG9jay5jcHAKaW5kZXggMTBjNjViYjlkZDcwOWE5YWY3YWJhNmNlYjhhOWI3MzU5
NzcxNjQxYi4uMDJkNjQ0Yjg4M2ZmYjNjZDk5Y2E5OWI3YmNmMzlhYTkyNmI3MjIxZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9j
ay5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIEJ5dGVjb2RlQmFzaWNCbG9jazo6Y29tcHV0
ZUltcGwoQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mCiAgICAgICAg
ICAgICAvLyBibG9jayBiZWNhdXNlIHRoZSBmaW5hbGx5IGJsb2NrIHdpbGwgY3JlYXRlIGl0cyBv
d24gY2F0Y2gsIHdoaWNoIHdpbGwgZ2VuZXJhdGUgYSBIYW5kbGVySW5mby4KICAgICAgICAgICAg
IGlmIChpc1Rocm93KG9wY29kZUlEKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChieXRlY29k
ZU9mZnNldCArIGluc3RydWN0aW9uLT5zaXplKCkgPT0gYmxvY2stPmxlYWRlck9mZnNldCgpICsg
YmxvY2stPnRvdGFsTGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIGF1dG8qIGhhbmRsZXIgPSBj
b2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7
CisgICAgICAgICAgICAgICAgYXV0byogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5
dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbi5vZmZzZXQoKSkpOwogICAgICAg
ICAgICAgICAgIGZhbGxzVGhyb3VnaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlmICghaGFu
ZGxlcikgewogICAgICAgICAgICAgICAgICAgICBsaW5rQmxvY2tzKGJsb2NrLCBleGl0LmdldCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdl
bmVyYXRvcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwCmluZGV4IDI4NjA1MWNjOTVlYTRkOGZkYTY2ZmIw
OTk3YmI1OTNlZGU3ZTMyYTYuLjQzY2U1NjFmMzgyNmQ2YjBiMTRjODQxMWNiZjgxMWI4MzliN2Zl
OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdl
bmVyYXRvcmlmaWNhdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcnVuTGl2ZW5lc3NGaXhwb2ludChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywg
bV9nZW5lcmF0b3JpZmljYXRpb24uZ3JhcGgoKSk7CiAKICAgICAgICAgZm9yIChZaWVsZERhdGEm
IGRhdGEgOiBtX2dlbmVyYXRvcmlmaWNhdGlvbi55aWVsZHMoKSkKLSAgICAgICAgICAgIGRhdGEu
bGl2ZW5lc3MgPSBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25zLCBtX2dlbmVyYXRvcmlmaWNhdGlvbi5ncmFwaCgpLCBtX2dlbmVyYXRvcmlmaWNh
dGlvbi5pbnN0cnVjdGlvbnMoKS5hdChkYXRhLnBvaW50KS5uZXh0KCkub2Zmc2V0KCkpOworICAg
ICAgICAgICAgZGF0YS5saXZlbmVzcyA9IGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChj
b2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9nZW5lcmF0b3JpZmljYXRpb24uZ3JhcGgoKSwgQnl0
ZWNvZGVJbmRleChtX2dlbmVyYXRvcmlmaWNhdGlvbi5pbnN0cnVjdGlvbnMoKS5hdChkYXRhLnBv
aW50KS5uZXh0KCkub2Zmc2V0KCkpKTsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTdh
Mzg1YmU5YzI4MmRmZDhkMWJlYTUwM2E1NDczYWVmMGE5YzRjNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmNwcApAQCAtMCww
ICsxLDM2IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCeXRlY29kZUluZGV4LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIEJ5dGVj
b2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgiYmMjIiwgb2Zmc2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEy
N2MxMDI5N2M4MjYxMTg2ZGU1MjU1NDI3OGI0ODllMTFkOTkyOTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCkBAIC0wLDAg
KzEsOTYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvSGFzaFRyYWl0cy5oPgorCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFByaW50U3RyZWFt
OworfQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQnl0ZWNvZGVJbmRleCB7CitwdWJsaWM6
CisgICAgQnl0ZWNvZGVJbmRleCgpID0gZGVmYXVsdDsKKyAgICBleHBsaWNpdCBCeXRlY29kZUlu
ZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICA6IG1fb2Zmc2V0KGJ5dGVjb2Rl
T2Zmc2V0KQorICAgIHsgfQorCisgICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9vZmZzZXQ7IH0KKyAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBtX29mZnNl
dDsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIFdURjo6aW50SGFzaCht
X29mZnNldCk7IH0KKyAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBkZWxldGVkVmFsdWUoKSB7IHJl
dHVybiBmcm9tQml0cyhzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkgLSAxKTsg
fQorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhp
cyA9PSBkZWxldGVkVmFsdWUoKTsgfQorCisgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJp
dHModWludDMyX3QgYml0cyk7CisKKyAgICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQgIT0gc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOyB9CisgICAgYm9vbCBvcGVyYXRvciA9PShj
b25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gYXNCaXRzKCkgPT0gb3Ro
ZXIuYXNCaXRzKCk7IH0KKyAgICBib29sIG9wZXJhdG9yICE9KGNvbnN0IEJ5dGVjb2RlSW5kZXgm
IG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgYm9vbCBv
cGVyYXRvciA8KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0Jp
dHMoKSA8IG90aGVyLmFzQml0cygpOyB9CisgICAgYm9vbCBvcGVyYXRvciA+KGNvbnN0IEJ5dGVj
b2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA+IG90aGVyLmFzQml0cygp
OyB9CisgICAgYm9vbCBvcGVyYXRvciA8PShjb25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29u
c3QgeyByZXR1cm4gYXNCaXRzKCkgPD0gb3RoZXIuYXNCaXRzKCk7IH0KKyAgICBib29sIG9wZXJh
dG9yID49KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMo
KSA+PSBvdGhlci5hc0JpdHMoKTsgfQorCisKKyAgICB2b2lkIGR1bXAoV1RGOjpQcmludFN0cmVh
bSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1fb2Zmc2V0IHsgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpIH07Cit9OworCitpbmxpbmUgQnl0ZWNvZGVJbmRl
eCBCeXRlY29kZUluZGV4Ojpmcm9tQml0cyh1aW50MzJfdCBiaXRzKQoreworICAgIEJ5dGVjb2Rl
SW5kZXggcmVzdWx0OworICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHM7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RydWN0IEJ5dGVjb2RlSW5kZXhIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBCeXRlY29kZUluZGV4JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0K
KyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBCeXRlY29kZUluZGV4JiBhLCBjb25zdCBCeXRl
Y29kZUluZGV4JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkJ5dGVj
b2RlSW5kZXg+IHsKKyAgICB0eXBlZGVmIEpTQzo6Qnl0ZWNvZGVJbmRleEhhc2ggSGFzaDsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBz
dHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkJ5dGVjb2RlSW5kZXg+IDogU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzPEpTQzo6Qnl0ZWNvZGVJbmRleD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0
eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5jcHAKaW5kZXggMzMwYzdjN2E5OGRlZTcwYjE5NjFjZWQwZTFjNWMyNDI3N2IyNWU4
Yi4uYTFjMjgyMWJmM2QwYTJkZDUzODEwNGQwNTNiZTBhYjA5NzkwYzkwOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5jcHAKQEAgLTQ2LDIwICs0NiwyMCBAQCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6
OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAg
ZHVtcFJlc3VsdHMoY29kZUJsb2NrKTsKIH0KIAotdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCit2b2lkIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRW
ZWN0b3ImIHJlc3VsdCkKIHsKLSAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBC
eXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogICAgIEFTU0VSVChibG9jayk7CiAg
ICAgQVNTRVJUKCFibG9jay0+aXNFbnRyeUJsb2NrKCkpOwogICAgIEFTU0VSVCghYmxvY2stPmlz
RXhpdEJsb2NrKCkpOwogICAgIHJlc3VsdC5yZXNpemUoYmxvY2stPm91dCgpLm51bUJpdHMoKSk7
Ci0gICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fZ3JhcGgsIGJsb2NrLCBieXRlY29kZU9mZnNldCwg
cmVzdWx0KTsKKyAgICBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJs
b2NrLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX2dyYXBoLCBibG9jaywgYnl0ZWNvZGVJ
bmRleCwgcmVzdWx0KTsKIH0KIAotRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIEZhc3RCaXRWZWN0b3Ig
b3V0OwotICAgIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRl
Y29kZU9mZnNldCwgb3V0KTsKKyAgICBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoY29k
ZUJsb2NrLCBieXRlY29kZUluZGV4LCBvdXQpOwogICAgIHJldHVybiBvdXQ7CiB9CiAKQEAgLTc3
LDcgKzc3LDcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2
ZW5lc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bGxCeXQKICAgICAgICAgCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGJsb2NrLT5vZmZzZXRzKCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5vZmZzZXRzKClbaV07Ci0gICAg
ICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKSwgbV9ncmFwaCwgYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgICAgICAgICBzdGVw
T3Zlckluc3RydWN0aW9uKGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9n
cmFwaCwgQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIG91dCk7CiAgICAgICAgICAgICBy
ZXN1bHQubV9tYXBbYnl0ZWNvZGVPZmZzZXRdID0gb3V0OwogICAgICAgICB9CiAgICAgfQpAQCAt
MTAwLDcgKzEwMCw3IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlS2ls
bHMoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlS2lsbHMmCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGJsb2NrLT5vZmZzZXRzKCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5vZmZzZXRzKClbaV07CiAgICAgICAgICAg
ICBzdGVwT3Zlckluc3RydWN0aW9uKAotICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgYnl0ZWNvZGVPZmZzZXQsCisgICAgICAgICAg
ICAgICAgY29kZUJsb2NrLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX2dyYXBoLCBCeXRl
Y29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwKICAgICAgICAgICAgICAgICBbJl0gKHVuc2lnbmVk
IGluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZm9yIHVzZXMuCiAgICAg
ICAgICAgICAgICAgICAgIGlmIChvdXRbaW5kZXhdKQpAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQg
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9j
aykKICAgICAgICAgICAgIGNvbnN0IGF1dG8gY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rp
b25zLmF0KGJ5dGVjb2RlT2Zmc2V0KTsKIAogICAgICAgICAgICAgZGF0YUxvZ0YoIkxpdmUgdmFy
aWFibGVzOiIpOwotICAgICAgICAgICAgRmFzdEJpdFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KTsKKyAg
ICAgICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUJlZm9yZSA9IGdldExpdmVuZXNzSW5mb0F0Qnl0
ZWNvZGVJbmRleChjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpKTsKICAg
ICAgICAgICAgIGR1bXBCaXRWZWN0b3IobGl2ZUJlZm9yZSk7CiAgICAgICAgICAgICBkYXRhTG9n
RigiXG4iKTsKICAgICAgICAgICAgIGNvZGVCbG9jay0+ZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZp
bGUoKSwgY3VycmVudEluc3RydWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAppbmRleCA3YmVmNGNm
MWRjZTJhMWE3ZmMxODNhZmVhZTIxZGQ1OTE0ZjhmOTQ5Li5lYWMxODVkYTU2Yzk2YzM4NWI5ZTMx
YmE3YWM4ZTdkZTc0OWI2NTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCkBAIC0zNywxNSArMzcsMTUg
QEAgY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3M7CiAKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbiB7CiBwcm90ZWN0ZWQ6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZSwgdHlwZW5hbWUgVXNlRnVuY3RvciwgdHlwZW5hbWUgRGVmRnVuY3Rvcj4gdm9pZCBzdGVw
T3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYs
IEJ5dGVjb2RlR3JhcGgmLCBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0
LCBjb25zdCBVc2VGdW5jdG9yJiwgY29uc3QgRGVmRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1
bmN0b3I+IHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCwgY29uc3QgVXNl
RnVuY3RvciYsIGNvbnN0IERlZkZ1bmN0b3ImKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENv
ZGVCbG9ja1R5cGU+IHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgSW5zdHJ1Y3Rpb25TdHJlYW06
Ok9mZnNldCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgb3V0KTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPiB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJs
b2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVj
b2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIG91dCk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+IGJvb2wgY29tcHV0ZUxvY2FsTGl2
ZW5lc3NGb3JCeXRlY29kZU9mZnNldChDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25z
JiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlQmFzaWNCbG9jayosIHVuc2lnbmVkIHRhcmdldE9m
ZnNldCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2Rl
QmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+IGJvb2wgY29tcHV0ZUxvY2FsTGl2ZW5l
c3NGb3JCeXRlY29kZUluZGV4KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBC
eXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVCYXNpY0Jsb2NrKiwgQnl0ZWNvZGVJbmRleCwgRmFzdEJp
dFZlY3RvciYgcmVzdWx0KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUs
IHR5cGVuYW1lIEluc3RydWN0aW9ucz4gYm9vbCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2Nr
KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0
ZWNvZGVCYXNpY0Jsb2NrKik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
LCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+IEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRC
eXRlY29kZU9mZnNldChDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNv
ZGVHcmFwaCYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+IEZhc3RCaXRWZWN0b3IgZ2V0
TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVj
dGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+IHZvaWQgcnVuTGl2
ZW5lc3NGaXhwb2ludChDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNv
ZGVHcmFwaCYpOwogfTsKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIGZyaWVuZCBjbGFz
cyBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb247CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzKENvZGVCbG9jayopOwogICAgIAotICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZv
QXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7Cisg
ICAgRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2Nr
KiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgdm9pZCBjb21wdXRlRnVsbExpdmVuZXNzKENv
ZGVCbG9jayosIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpOwogICAgIHZvaWQgY29tcHV0
ZUtpbGxzKENvZGVCbG9jayosIEJ5dGVjb2RlS2lsbHMmIHJlc3VsdCk7CkBAIC02NSw3ICs2NSw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBkdW1wUmVzdWx0cyhDb2RlQmxvY2sqKTsK
IAotICAgIHZvaWQgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2sqLCB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYpOworICAgIHZvaWQgZ2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgsIEZhc3RC
aXRWZWN0b3ImKTsKIAogICAgIEJ5dGVjb2RlR3JhcGggbV9ncmFwaDsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpc0lubGluZXMuaAppbmRleCA3MWZmNTZmN2VhNjhhMmY0NTVjZjY3OGIzYzc5YTJk
N2JhYjliMzlkLi43YTkwMDMyMjJlNTE2N2JiMDUxMDk1NzAyYjM4MjYzYTM1YzA4NDNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKQEAgLTYxLDcgKzYxLDcgQEAgaW5saW5lIGJv
b2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAv
LyBTaW1wbGlmaWVkIGludGVyZmFjZSB0byBieXRlY29kZSB1c2UvZGVmLCB3aGljaCBkZXRlcm1p
bmVzIGRlZnMgZmlyc3QgYW5kIHRoZW4gdXNlcywgYW5kIGluY2x1ZGVzCiAvLyBleGNlcHRpb24g
aGFuZGxlcnMgaW4gdGhlIHVzZXMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0
eXBlbmFtZSBVc2VGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgotaW5saW5lIHZvaWQgQnl0
ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5
cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0
ZWNvZGVHcmFwaCYgZ3JhcGgsIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZz
ZXQsIGNvbnN0IFVzZUZ1bmN0b3ImIHVzZSwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQoraW5saW5l
IHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKENv
ZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0
aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwg
Y29uc3QgVXNlRnVuY3RvciYgdXNlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCiB7CiAgICAgLy8g
VGhpcyBhYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGluc3RydWN0aW9uIGluIHJldmVyc2UuIEluc3Ry
dWN0aW9ucyBsb2dpY2FsbHkgZmlyc3QgdXNlIG9wZXJhbmRzIGFuZAogICAgIC8vIHRoZW4gZGVm
aW5lIG9wZXJhbmRzLiBUaGlzIGxvZ2ljYWwgb3JkZXJpbmcgaXMgbmVjZXNzYXJ5IGZvciBvcGVy
YXRpb25zIHRoYXQgdXNlIGFuZCBkZWYgdGhlIHNhbWUKQEAgLTc4LDE3ICs3OCwxNyBAQCBpbmxp
bmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24o
Q29kZUJsb2NrVHlwZSogY29kZQogICAgIC8vIHVzZXMgYmVmb3JlIGRlZnMsIHRoZW4gdGhlIGFk
ZCBvcGVyYXRpb24gYWJvdmUgd291bGQgYXBwZWFyIHRvIG5vdCBoYXZlIGxvYzEgbGl2ZSwgc2lu
Y2Ugd2UnZAogICAgIC8vIGZpcnN0IGFkZCBpdCB0byB0aGUgb3V0IHNldCAodGhlIHVzZSksIGFu
ZCB0aGVuIHdlJ2QgcmVtb3ZlIGl0ICh0aGUgZGVmKS4KIAotICAgIGF1dG8qIGluc3RydWN0aW9u
ID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zmc2V0KS5wdHIoKTsKKyAgICBhdXRvKiBpbnN0
cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBPcGNv
ZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwogCi0gICAgY29tcHV0ZURl
ZnNGb3JCeXRlY29kZU9mZnNldCgKKyAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgoCiAg
ICAgICAgIGNvZGVCbG9jaywgb3Bjb2RlSUQsIGluc3RydWN0aW9uLAogICAgICAgICBbJl0gKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CiAgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVy
Rm9yTGl2ZW5lc3Mob3BlcmFuZCkpCiAgICAgICAgICAgICAgICAgZGVmKG9wZXJhbmQudG9Mb2Nh
bCgpKTsKICAgICAgICAgfSk7CiAKLSAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAor
ICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleCgKICAgICAgICAgY29kZUJsb2NrLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb24sCiAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
IHsKICAgICAgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhvcGVyYW5kKSkK
QEAgLTk3LDcgKzk3LDcgQEAgaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9u
OjpzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqIGNvZGUKIAogICAgIC8vIElmIHdl
IGhhdmUgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIHdlIHdhbnQgdGhlIGxpdmUtaW4gdmFyaWFibGVz
IG9mIHRoZSAKICAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9jayB0byBiZSBpbmNsdWRlZCBp
biB0aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgYnl0ZWNvZGUuCi0gICAgaWYgKGF1dG8q
IGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9m
ZnNldCkpIHsKKyAgICBpZiAoYXV0byogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkpIHsKICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2Nr
KiBoYW5kbGVyQmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoaGFu
ZGxlci0+dGFyZ2V0KTsKICAgICAgICAgQVNTRVJUKGhhbmRsZXJCbG9jayk7CiAgICAgICAgIGhh
bmRsZXJCbG9jay0+aW4oKS5mb3JFYWNoU2V0Qml0KHVzZSk7CkBAIC0xMDUsMTAgKzEwNSwxMCBA
QCBpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1
Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgotaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zl
ckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCkKK2lubGluZSB2
b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2Rl
QmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlv
bnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEZh
c3RCaXRWZWN0b3ImIG91dCkKIHsKICAgICBzdGVwT3Zlckluc3RydWN0aW9uKAotICAgICAgICBj
b2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICBj
b2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsCiAgICAgICAgIFsm
XSAodW5zaWduZWQgYml0SW5kZXgpIHsKICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHVzZSBm
dW5jdG9yLCBzbyB3ZSBzZXQgdGhlIGJpdC4KICAgICAgICAgICAgIG91dFtiaXRJbmRleF0gPSB0
cnVlOwpAQCAtMTIwLDcgKzEyMCw3IEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9w
YWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2RlCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KLWlu
bGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5l
c3NGb3JCeXRlY29kZU9mZnNldChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3Ry
dWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNp
Y0Jsb2NrKiBibG9jaywgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1
bHQpCitpbmxpbmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2Nh
bExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0
IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNv
ZGVCYXNpY0Jsb2NrKiBibG9jaywgQnl0ZWNvZGVJbmRleCB0YXJnZXRJbmRleCwgRmFzdEJpdFZl
Y3RvciYgcmVzdWx0KQogewogICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOwogICAg
IEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygpKTsKQEAgLTEyOSw5ICsxMjksOSBAQCBpbmxp
bmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9yQnl0ZWNvZGVPZmZzZXQoQwogCiAgICAgZm9yIChpbnQgaSA9IGJsb2NrLT5vZmZzZXRzKCku
c2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQgPSBibG9jay0+b2Zmc2V0cygpW2ldOwotICAgICAgICBpZiAodGFyZ2V0T2Zmc2V0ID4gYnl0
ZWNvZGVPZmZzZXQpCisgICAgICAgIGlmICh0YXJnZXRJbmRleC5vZmZzZXQoKSA+IGJ5dGVjb2Rl
T2Zmc2V0KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24o
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZU9mZnNldCwgb3V0KTsKKyAg
ICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgs
IEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBvdXQpOwogICAgIH0KIAogICAgIHJldHVy
biByZXN1bHQuc2V0QW5kQ2hlY2sob3V0KTsKQEAgLTE0MiwxOSArMTQyLDE5IEBAIGlubGluZSBi
b29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JC
bG9jayhDb2RlQmxvY2tUCiB7CiAgICAgaWYgKGJsb2NrLT5pc0V4aXRCbG9jaygpIHx8IGJsb2Nr
LT5pc0VudHJ5QmxvY2soKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb21w
dXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25z
LCBncmFwaCwgYmxvY2ssIGJsb2NrLT5sZWFkZXJPZmZzZXQoKSwgYmxvY2stPmluKCkpOworICAg
IHJldHVybiBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBp
bnN0cnVjdGlvbnMsIGdyYXBoLCBibG9jaywgQnl0ZWNvZGVJbmRleChibG9jay0+bGVhZGVyT2Zm
c2V0KCkpLCBibG9jay0+aW4oKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5
cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KLWlubGluZSBGYXN0Qml0VmVjdG9yIEJ5dGVjb2Rl
TGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2Rl
QmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBC
eXRlY29kZUdyYXBoJiBncmFwaCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCitpbmxpbmUgRmFz
dEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0
Qnl0ZWNvZGVJbmRleChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9u
cyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQogewotICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5k
QmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBCeXRlY29k
ZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNl
dChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKICAgICBBU1NFUlQoYmxvY2spOwogICAgIEFTU0VS
VCghYmxvY2stPmlzRW50cnlCbG9jaygpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9j
aygpKTsKICAgICBGYXN0Qml0VmVjdG9yIG91dDsKICAgICBvdXQucmVzaXplKGJsb2NrLT5vdXQo
KS5udW1CaXRzKCkpOwotICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQo
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBibG9jaywgYnl0ZWNvZGVPZmZzZXQsIG91
dCk7CisgICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb25zLCBncmFwaCwgYmxvY2ssIGJ5dGVjb2RlSW5kZXgsIG91dCk7CiAgICAgcmV0
dXJuIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlVXNlRGVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVVc2VEZWYuaAppbmRleCAwMjJmM2JmZWI4Njg0NDFjY2FkZGFmZDdmODM0ZmE4Zjk4ODczYmNl
Li5jYTMzNDc5NDI4NDhjMmYzMDhhNWM1YTVlYjk0NjJhNTFmNGVhOTM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaApAQCAtNDYsNyArNDYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICNkZWZpbmUgREVGUyBVU0VTX09SX0RFRlMKIAogdGVtcGxh
dGU8dHlwZW5hbWUgQmxvY2ssIHR5cGVuYW1lIEZ1bmN0b3I+Ci12b2lkIGNvbXB1dGVVc2VzRm9y
Qnl0ZWNvZGVPZmZzZXQoQmxvY2sqIGNvZGVCbG9jaywgT3Bjb2RlSUQgb3Bjb2RlSUQsIGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3ZvaWQg
Y29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4KEJsb2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9w
Y29kZUlELCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCiB7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2VudGVyICYmIChjb2RlQmxvY2stPndh
c0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkp
ICYmIGNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLmlzVmFsaWQoKSkKICAgICAgICAgZnVuY3Rv
cihjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSk7CkBAIC0yOTcsNyArMjk3LDcgQEAgdm9pZCBj
b21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KEJsb2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9w
Y29kZUlELCBjb25zdCBJbnMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQmxvY2ssIHR5cGVuYW1l
IEZ1bmN0b3I+Ci12b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQmxvY2sqIGNvZGVC
bG9jaywgT3Bjb2RlSUQgb3Bjb2RlSUQsIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3ZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4
KEJsb2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9wY29kZUlELCBjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgc3dpdGNoIChvcGNv
ZGVJRCkgewogICAgIGNhc2Ugb3Bfd2lkZTE2OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKaW5kZXggOWEwMDBmYzViNDJhZTZlMzgyNjlk
ODM3YTc5MGEzOTYwYjVjYmRhMy4uZjEzZDE3MzRhMDJjNThhMzIxNzU5MjVkMjg4NTVhMmEyNjAw
MTgxOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
U3RhdHVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuY3BwCkBAIC01NSw3ICs1NSw3IEBAIENhbGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0YXR1
cyhKU1ZhbHVlIHZhbHVlKQogICAgIG1fdmFyaWFudHMuYXBwZW5kKENhbGxWYXJpYW50KHZhbHVl
LmFzQ2VsbCgpKSk7CiB9CiAKLUNhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
RnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK0NhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3Rh
dHVzOjpjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIFVO
VVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRl
eCk7CkBAIC02Nyw3ICs2Nyw3IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21w
dXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCCiAgICAgfQogI2Vu
ZGlmCiAKLSAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnl0ZWNvZGVJbmRleCk7CisgICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxv
Y2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogICAgIE9wY29k
ZUlEIG9wID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CiAKICAgICBMTEludENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvOwpAQCAtOTAsNyArOTAsNyBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlu
a1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2Rl
QgogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICBD
b2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIGNvbnN0IElD
U3RhdHVzTWFwJiBtYXAsCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgsIGNvbnN0IElDU3RhdHVzTWFwJiBtYXAsCiAgICAgRXhpdFNpdGVE
YXRhIGV4aXRTaXRlRGF0YSkKIHsKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2Zp
bGVkQmxvY2stPm1fbG9jayk7CkBAIC0xMTQsMTIgKzExNCwxMiBAQCBDYWxsTGlua1N0YXR1cyBD
YWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKIH0KIAogQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBjb25zdCBJQ1N0YXR1c01hcCYgbWFwKQorICAgIENvZGVCbG9jayog
cHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBjb25zdCBJQ1N0YXR1
c01hcCYgbWFwKQogewogICAgIHJldHVybiBjb21wdXRlRm9yKHByb2ZpbGVkQmxvY2ssIGJ5dGVj
b2RlSW5kZXgsIG1hcCwgY29tcHV0ZUV4aXRTaXRlRGF0YShwcm9maWxlZEJsb2NrLCBieXRlY29k
ZUluZGV4KSk7CiB9CiAKLUNhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4KQorQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBDYWxsTGlua1N0
YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBFeGl0U2l0ZURhdGEgZXhpdFNpdGVEYXRh
OwogI2lmIEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtTdGF0dXMuaAppbmRleCAwYTEwMWNhMDJlNjg5MTBkMmZjMzQyMDc5Yjk5MGZh
NTIyYTczODlkLi40NjhhM2RiNTdiZDIyYzg5YzExZGQ3Y2QyMTc5NjE1MGUzMzdmY2Q0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaApAQCAt
NjYsMTAgKzY2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgRXhpdEZsYWcgdGFrZXNTbG93UGF0aDsK
ICAgICAgICAgRXhpdEZsYWcgYmFkRnVuY3Rpb247CiAgICAgfTsKLSAgICBzdGF0aWMgRXhpdFNp
dGVEYXRhIGNvbXB1dGVFeGl0U2l0ZURhdGEoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCk7CisgICAgc3RhdGljIEV4aXRTaXRlRGF0YSBjb21wdXRlRXhpdFNpdGVEYXRhKENvZGVC
bG9jayosIEJ5dGVjb2RlSW5kZXgpOwogICAgIAotICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBj
b21wdXRlRm9yKENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIGNvbnN0IElDU3Rh
dHVzTWFwJiwgRXhpdFNpdGVEYXRhKTsKLSAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0
ZUZvcihDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBJQ1N0YXR1c01h
cCYpOworICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIEJ5
dGVjb2RlSW5kZXgsIGNvbnN0IElDU3RhdHVzTWFwJiwgRXhpdFNpdGVEYXRhKTsKKyAgICBzdGF0
aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBj
b25zdCBJQ1N0YXR1c01hcCYpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICAvLyBDb21wdXRlcyB0
aGUgc3RhdHVzIGFzc3VtaW5nIHRoYXQgd2UgbmV2ZXIgdG9vayBzbG93IHBhdGggYW5kIG5ldmVy
IHByZXZpb3VzbHkKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZv
aWQgbWFrZUNsb3N1cmVDYWxsKCk7CiAgICAgCi0gICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNv
bXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVG
cm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgQnl0ZWNvZGVJ
bmRleCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0
ZUZyb21DYWxsTGlua0luZm8oCiAgICAgICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENh
bGxMaW5rSW5mbyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAppbmRleCAwOWY1MDczOGRlNWQ1ZWZiZjNmZDE0MTU3YjI3NWYyYmM0MmFkZTNhLi42MDY1
NDA2ZDhhOGY4MjM2YTc2YTIwM2EyMTE3OWVhY2FkMjA2M2UxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMTUyNiw3ICsxNTI2LDcgQEAgQ2Fs
bExpbmtJbmZvKiBDb2RlQmxvY2s6OmFkZENhbGxMaW5rSW5mbygpCiAgICAgcmV0dXJuIGVuc3Vy
ZUpJVERhdGEobG9ja2VyKS5tX2NhbGxMaW5rSW5mb3MuYWRkKCk7CiB9CiAKLUNhbGxMaW5rSW5m
byogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGlu
ZGV4KQorQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2Rl
SW5kZXgoQnl0ZWNvZGVJbmRleCBpbmRleCkKIHsKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CiAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsK
QEAgLTE1MzgsMjcgKzE1MzgsMjcgQEAgQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmdldENhbGxM
aW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgaW5kZXgpCiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLVJhcmVDYXNlUHJvZmlsZSogQ29kZUJsb2NrOjphZGRSYXJlQ2FzZVByb2ZpbGUo
aW50IGJ5dGVjb2RlT2Zmc2V0KQorUmFyZUNhc2VQcm9maWxlKiBDb2RlQmxvY2s6OmFkZFJhcmVD
YXNlUHJvZmlsZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVRE
YXRhKGxvY2tlcik7Ci0gICAgaml0RGF0YS5tX3JhcmVDYXNlUHJvZmlsZXMuYXBwZW5kKFJhcmVD
YXNlUHJvZmlsZShieXRlY29kZU9mZnNldCkpOworICAgIGppdERhdGEubV9yYXJlQ2FzZVByb2Zp
bGVzLmFwcGVuZChSYXJlQ2FzZVByb2ZpbGUoYnl0ZWNvZGVJbmRleCkpOwogICAgIHJldHVybiAm
aml0RGF0YS5tX3JhcmVDYXNlUHJvZmlsZXMubGFzdCgpOwogfQogCi1SYXJlQ2FzZVByb2ZpbGUq
IENvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgaW50IGJ5dGVjb2RlT2Zmc2V0KQorUmFyZUNhc2VQcm9maWxlKiBDb2Rl
QmxvY2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIGlmIChhdXRvKiBq
aXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFy
Y2g8UmFyZUNhc2VQcm9maWxlLCBpbnQ+KAotICAgICAgICAgICAgaml0RGF0YS0+bV9yYXJlQ2Fz
ZVByb2ZpbGVzLCBqaXREYXRhLT5tX3JhcmVDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9m
ZnNldCwKLSAgICAgICAgICAgIGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0KTsKKyAg
ICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxSYXJlQ2FzZVByb2ZpbGUsIEJ5dGVjb2RlSW5k
ZXg+KAorICAgICAgICAgICAgaml0RGF0YS0+bV9yYXJlQ2FzZVByb2ZpbGVzLCBqaXREYXRhLT5t
X3JhcmVDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZUluZGV4LAorICAgICAgICAgICAgZ2V0
UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVJbmRleCk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRy
OwogfQogCi11bnNpZ25lZCBDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNv
ZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIGludCBieXRlY29kZU9m
ZnNldCkKK3Vuc2lnbmVkIENvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29k
ZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgpCiB7Ci0gICAgUmFyZUNhc2VQcm9maWxlKiBwcm9maWxlID0gcmFyZUNhc2VQ
cm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobG9ja2VyLCBieXRlY29kZU9mZnNldCk7CisgICAgUmFy
ZUNhc2VQcm9maWxlKiBwcm9maWxlID0gcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChs
b2NrZXIsIGJ5dGVjb2RlSW5kZXgpOwogICAgIGlmIChwcm9maWxlKQogICAgICAgICByZXR1cm4g
cHJvZmlsZS0+bV9jb3VudGVyOwogICAgIHJldHVybiAwOwpAQCAtMTczMCwxMCArMTczMCwxMCBA
QCBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogfQogI2VuZGlmCiAK
LUhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikKK0hhbmRs
ZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikKIHsKLSAgICBS
RUxFQVNFX0FTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0g
ICAgcmV0dXJuIGhhbmRsZXJGb3JJbmRleChieXRlY29kZU9mZnNldCwgcmVxdWlyZWRIYW5kbGVy
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKTsKKyAgICByZXR1cm4gaGFuZGxlckZvckluZGV4KGJ5dGVjb2RlSW5kZXgu
b2Zmc2V0KCksIHJlcXVpcmVkSGFuZGxlcik7CiB9CiAKIEhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6
OmhhbmRsZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVk
SGFuZGxlcikKQEAgLTE3NjIsOSArMTc2Miw5IEBAIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENv
ZGVCbG9jazo6bmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kCiAK
IAogCi12b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRl
Y29kZU9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KQordm9p
ZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRl
eChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgYXV0byYgaW5zdHJ1Y3Rpb24g
PSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9mZnNldCk7CisgICAgYXV0byYgaW5zdHJ1Y3Rp
b24gPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKICAgICBPcENhdGNoIG9wID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBvcC5tZXRh
ZGF0YSh0aGlzKTsKICAgICBpZiAoISFtZXRhZGF0YS5tX2J1ZmZlcikgewpAQCAtMTc4NCwxMCAr
MTc4NCwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRG
b3JCeXRlY29kZU9mZnNldChJbnN0cnVjdGlvblN0cmVhbQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZU9mZnNldFNs
b3cob3AsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBlbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRl
ZEZvckJ5dGVjb2RlSW5kZXhTbG93KG9wLCBieXRlY29kZUluZGV4KTsKIH0KIAotdm9pZCBDb2Rl
QmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXRTbG93
KGNvbnN0IE9wQ2F0Y2gmIG9wLCBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zm
c2V0KQordm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0
ZWNvZGVJbmRleFNsb3coY29uc3QgT3BDYXRjaCYgb3AsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCkKIHsKICAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMmIGJ5dGVjb2RlTGl2ZW5lc3Mg
PSBsaXZlbmVzc0FuYWx5c2lzKCk7CiAKQEAgLTE3OTYsOCArMTc5Niw4IEBAIHZvaWQgQ29kZUJs
b2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlT2Zmc2V0U2xvdyhj
b25zdCBPcENhdGNoCiAgICAgLy8gd2UgY2FuIGF2b2lkIHByb2ZpbGluZyB0aGVtIGFuZCBleHRy
YWN0aW5nIHRoZW0gd2hlbiBkb2luZyBPU1IgZW50cnkKICAgICAvLyBpbnRvIHRoZSBERkcuCiAK
LSAgICBhdXRvIG5leHRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9mZnNldCku
bmV4dCgpLm9mZnNldCgpOwotICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUxvY2FscyA9IGJ5dGVjb2Rl
TGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh0aGlzLCBuZXh0T2Zmc2V0
KTsKKyAgICBhdXRvIG5leHRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4
KS5uZXh0KCkub2Zmc2V0KCk7CisgICAgRmFzdEJpdFZlY3RvciBsaXZlTG9jYWxzID0gYnl0ZWNv
ZGVMaXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgodGhpcywgQnl0ZWNvZGVJ
bmRleChuZXh0T2Zmc2V0KSk7CiAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gbGl2ZU9wZXJh
bmRzOwogICAgIGxpdmVPcGVyYW5kcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxpdmVMb2NhbHMu
Yml0Q291bnQoKSk7CiAgICAgbGl2ZUxvY2Fscy5mb3JFYWNoU2V0Qml0KFsmXSAodW5zaWduZWQg
bGl2ZUxvY2FsKSB7CkBAIC0xODQyLDI2ICsxODQyLDI2IEBAIHZvaWQgQ29kZUJsb2NrOjpyZW1v
dmVFeGNlcHRpb25IYW5kbGVyRm9yQ2FsbFNpdGUoRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggY2Fs
bFNpCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdW5zaWduZWQgQ29k
ZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpCit1bnNpZ25lZCBDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZU9m
ZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgcmV0dXJuIG93bmVyRXhlY3V0YWJs
ZSgpLT5maXJzdExpbmUoKSArIG1fdW5saW5rZWRDb2RlLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgIHJldHVybiBvd25lckV4ZWN1
dGFibGUoKS0+Zmlyc3RMaW5lKCkgKyBtX3VubGlua2VkQ29kZS0+bGluZU51bWJlckZvckJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiB9CiAKLXVuc2lnbmVkIENvZGVCbG9jazo6Y29sdW1u
TnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit1bnNpZ25l
ZCBDb2RlQmxvY2s6OmNvbHVtbk51bWJlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQogewogICAgIGludCBkaXZvdDsKICAgICBpbnQgc3RhcnRPZmZzZXQ7CiAg
ICAgaW50IGVuZE9mZnNldDsKICAgICB1bnNpZ25lZCBsaW5lOwogICAgIHVuc2lnbmVkIGNvbHVt
bjsKLSAgICBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwg
ZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CisgICAgZXhwcmVz
c2lvblJhbmdlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4LCBkaXZvdCwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKICAgICByZXR1cm4gY29sdW1uOwogfQogCi12
b2lkIENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zm
c2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3QKK3ZvaWQgQ29kZUJs
b2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCwgaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVu
c2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdAogewotICAgIG1fdW5saW5rZWRD
b2RlLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2
b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CisgICAgbV91bmxpbmtl
ZENvZGUtPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCwgZGl2
b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CiAgICAgZGl2b3QgKz0g
c291cmNlT2Zmc2V0KCk7CiAgICAgY29sdW1uICs9IGxpbmUgPyAxIDogZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KCk7CiAgICAgbGluZSArPSBvd25lckV4ZWN1dGFibGUoKS0+Zmlyc3RMaW5lKCk7CkBA
IC0xODc1LDcgKzE4NzUsNyBAQCBib29sIENvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRD
b2x1bW4odW5zaWduZWQgbGluZSwgT3B0aW9uYWw8dW5zaWduZWQ+IGNvbAogICAgICAgICAgICAg
aW50IHVudXNlZDsKICAgICAgICAgICAgIHVuc2lnbmVkIG9wRGVidWdMaW5lOwogICAgICAgICAg
ICAgdW5zaWduZWQgb3BEZWJ1Z0NvbHVtbjsKLSAgICAgICAgICAgIGV4cHJlc3Npb25SYW5nZUZv
ckJ5dGVjb2RlT2Zmc2V0KGl0Lm9mZnNldCgpLCB1bnVzZWQsIHVudXNlZCwgdW51c2VkLCBvcERl
YnVnTGluZSwgb3BEZWJ1Z0NvbHVtbik7CisgICAgICAgICAgICBleHByZXNzaW9uUmFuZ2VGb3JC
eXRlY29kZUluZGV4KGl0LmluZGV4KCksIHVudXNlZCwgdW51c2VkLCB1bnVzZWQsIG9wRGVidWdM
aW5lLCBvcERlYnVnQ29sdW1uKTsKICAgICAgICAgICAgIGlmIChsaW5lID09IG9wRGVidWdMaW5l
ICYmICghY29sdW1uIHx8IGNvbHVtbiA9PSBvcERlYnVnQ29sdW1uKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjYyMyw5ICsyNjIzLDkgQEAgYm9vbCBDb2Rl
QmxvY2s6OnNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpCiB9CiAjZW5kaWYKIAotQXJyYXlQ
cm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0FycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpn
ZXRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQogewotICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5h
dChieXRlY29kZU9mZnNldCk7CisgICAgYXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygp
LmF0KGJ5dGVjb2RlSW5kZXgpOwogICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkp
IHsKICNkZWZpbmUgQ0FTRTEoT3ApIFwKICAgICBjYXNlIE9wOjpvcGNvZGVJRDogXApAQCAtMjY1
NSwxMCArMjY1NSwxMCBAQCBBcnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxl
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIHVuc2lnbmVkIGJ5dAogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1BcnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0KQorQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJv
ZmlsZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBnZXRBcnJheVByb2ZpbGUobG9ja2VyLCBi
eXRlY29kZU9mZnNldCk7CisgICAgcmV0dXJuIGdldEFycmF5UHJvZmlsZShsb2NrZXIsIGJ5dGVj
b2RlSW5kZXgpOwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0yOTY2LDkgKzI5NjYsOSBA
QCBTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlcikKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotVmFsdWVQcm9maWxl
KiBDb2RlQmxvY2s6OnRyeUdldFZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRl
Y29kZU9mZnNldCkKK1ZhbHVlUHJvZmlsZSogQ29kZUJsb2NrOjp0cnlHZXRWYWx1ZVByb2ZpbGVG
b3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBhdXRv
IGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIGF1
dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKICAgICBz
d2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CiAKICNkZWZpbmUgQ0FTRShPcCkgXApA
QCAtMjk4NSwyMyArMjk4NSwyMyBAQCBWYWx1ZVByb2ZpbGUqIENvZGVCbG9jazo6dHJ5R2V0VmFs
dWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQogICAgIH0KIH0K
IAotU3BlY3VsYXRlZFR5cGUgQ29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0
ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIGludCBieXRlY29k
ZU9mZnNldCkKK1NwZWN1bGF0ZWRUeXBlIENvZGVCbG9jazo6dmFsdWVQcm9maWxlUHJlZGljdGlv
bkZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBpZiAoVmFsdWVQcm9maWxlKiB2YWx1ZVBy
b2ZpbGUgPSB0cnlHZXRWYWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNl
dCkpCisgICAgaWYgKFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlID0gdHJ5R2V0VmFsdWVQcm9m
aWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KSkKICAgICAgICAgcmV0dXJuIHZhbHVl
UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgcmV0dXJuIFNw
ZWNOb25lOwogfQogCi1WYWx1ZVByb2ZpbGUmIENvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQorVmFsdWVQcm9maWxlJiBDb2RlQmxvY2s6
OnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQogewotICAgIHJldHVybiAqdHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpOworICAgIHJldHVybiAqdHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJ
bmRleChieXRlY29kZUluZGV4KTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnZhbGlkYXRlKCkKIHsK
ICAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgbGl2ZW5lc3ModGhpcyk7IC8vIENvbXB1dGUg
ZGlyZWN0bHkgZnJvbSBzY3JhdGNoIHNvIGl0IGRvZXNuJ3QgZWZmZWN0IENvZGVCbG9jayBmb290
cHJpbnQuCiAgICAgCi0gICAgRmFzdEJpdFZlY3RvciBsaXZlQXRIZWFkID0gbGl2ZW5lc3MuZ2V0
TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh0aGlzLCAwKTsKKyAgICBGYXN0Qml0VmVjdG9y
IGxpdmVBdEhlYWQgPSBsaXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgodGhp
cywgQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgCiAgICAgaWYgKGxpdmVBdEhlYWQubnVtQml0cygp
ICE9IHN0YXRpY19jYXN0PHNpemVfdD4obV9udW1DYWxsZWVMb2NhbHMpKSB7CiAgICAgICAgIGJl
Z2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKQEAgLTMwMjUsNyArMzAyNSw3IEBAIHZvaWQgQ29kZUJs
b2NrOjp2YWxpZGF0ZSgpCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9u
U3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0cnVjdGlv
biA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZSA9IGluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpOwotICAgICAgICBpZiAoISFiYXNlbGluZUFsdGVybmF0aXZlKCkt
PmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSkpIHsKKyAgICAg
ICAgaWYgKCEhYmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChC
eXRlY29kZUluZGV4KGluc3RydWN0aW9uLm9mZnNldCgpKSkpIHsKICAgICAgICAgICAgIGlmIChv
cGNvZGUgPT0gb3BfY2F0Y2ggfHwgb3Bjb2RlID09IG9wX2VudGVyKSB7CiAgICAgICAgICAgICAg
ICAgLy8gb3BfY2F0Y2gvb3BfZW50ZXIgbG9naWNhbGx5IHJlcHJlc2VudCBhbiBlbnRyeXBvaW50
LiBFbnRyeXBvaW50cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUKICAgICAgICAgICAgICAgICAvLyBp
bnNpZGUgb2YgYSB0cnkgYmxvY2sgYmVjYXVzZSB0aGV5IGFyZSByZXNwb25zaWJsZSBmb3IgYm9v
dHN0cmFwcGluZyBzdGF0ZS4gQW5kIHRoZXkKQEAgLTMwODMsOSArMzA4Myw5IEBAIGNvbnN0IElu
c3RydWN0aW9uKiBDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rp
b24qIHBjKQogICAgIHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChvZmZzZXQgKyB0YXJnZXQpLnB0
cigpOwogfQogCi1Bcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yQnl0ZWNv
ZGVPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBieXRlY29kZU9mZnNldCkKK0FyaXRo
UHJvZmlsZSogQ29kZUJsb2NrOjphcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICByZXR1cm4gYXJpdGhQcm9maWxlRm9yUEMoaW5z
dHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVPZmZzZXQpLnB0cigpKTsKKyAgICByZXR1cm4gYXJpdGhQ
cm9maWxlRm9yUEMoaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkucHRy
KCkpOwogfQogCiBBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yUEMoY29u
c3QgSW5zdHJ1Y3Rpb24qIHBjKQpAQCAtMzEwOCwxMSArMzEwOCwxMSBAQCBBcml0aFByb2ZpbGUq
IENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yUEMoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1ib29sIENvZGVCbG9jazo6Y291bGRUYWtlU3BlY2lhbEZh
c3RDYXNlKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQpCitib29sIENv
ZGVCbG9jazo6Y291bGRUYWtlU3BlY2lhbEFyaXRoRmFzdENhc2UoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQogewogICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIEFyaXRoUHJvZmlsZSogcHJvZmlsZSA9IGFyaXRoUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBBcml0aFByb2ZpbGUqIHBy
b2ZpbGUgPSBhcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAg
IGlmICghcHJvZmlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBwcm9maWxl
LT50b29rU3BlY2lhbEZhc3RQYXRoKCk7CkBAIC0zMjMxLDI4ICszMjMxLDI4IEBAIE9wdGlvbmFs
PENvZGVPcmlnaW4+IENvZGVCbG9jazo6ZmluZFBDKHZvaWQqIHBjKQogfQogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCiAKLU9wdGlvbmFsPHVuc2lnbmVkPiBDb2RlQmxvY2s6OmJ5dGVjb2RlT2Zmc2V0
RnJvbUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQorT3B0aW9uYWw8
Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjpieXRlY29kZUluZGV4RnJvbUNhbGxTaXRlSW5kZXgo
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQogewotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBi
eXRlY29kZU9mZnNldDsKKyAgICBPcHRpb25hbDxCeXRlY29kZUluZGV4PiBieXRlY29kZUluZGV4
OwogICAgIEpJVFR5cGUgaml0VHlwZSA9IHRoaXMtPmppdFR5cGUoKTsKICAgICBpZiAoaml0VHlw
ZSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBieXRlY29kZU9mZnNldCA9
IGNhbGxTaXRlSW5kZXguYml0cygpOworICAgICAgICBieXRlY29kZUluZGV4ID0gY2FsbFNpdGVJ
bmRleC5ieXRlY29kZUluZGV4KCk7CiAjZWxzZQogICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24gPSBiaXR3aXNlX2Nhc3Q8SW5zdHJ1Y3Rpb24qPihjYWxsU2l0ZUluZGV4LmJpdHMoKSk7
Ci0gICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQoaW5zdHJ1Y3Rp
b24pOworICAgICAgICBieXRlY29kZUluZGV4ID0gdGhpcy0+Ynl0ZWNvZGVJbmRleChpbnN0cnVj
dGlvbik7CiAjZW5kaWYKICAgICB9IGVsc2UgaWYgKGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklU
IHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklUKSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpOwog
ICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IGNvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCk7Ci0g
ICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gb3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAg
Ynl0ZWNvZGVJbmRleCA9IG9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAjZWxzZQogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCiAgICAgfQogCi0gICAgcmV0dXJu
IGJ5dGVjb2RlT2Zmc2V0OworICAgIHJldHVybiBieXRlY29kZUluZGV4OwogfQogCiBpbnQzMl90
IENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IGQyMDBmZDU5ZjQyOWEzODNk
YTlhZDdjN2ZmYWMwOWNiMjYyYmNmMzYuLjBlYzMwNDkxMWE2OWYwMjM3NGM0YjBlYjc4YTllYTQz
YjhiOTcxNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
QEAgLTIzOSwxNSArMjM5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGluZGV4ID49IG1f
bnVtVmFyczsKICAgICB9CiAKLSAgICBIYW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlT2Zm
c2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhh
bmRsZXI6OkFueUhhbmRsZXIpOworICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVJ
bmRleChCeXRlY29kZUluZGV4LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFu
eUhhbmRsZXIpOwogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQsIFJl
cXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CiAgICAgdm9pZCBy
ZW1vdmVFeGNlcHRpb25IYW5kbGVyRm9yQ2FsbFNpdGUoRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgp
OwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCk7Ci0gICAgdW5zaWduZWQgY29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0
ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsCisgICAgdW5z
aWduZWQgbGluZU51bWJlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CisgICAgdW5z
aWduZWQgY29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKKyAgICB2
b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCwgaW50JiBk
aXZvdCwKICAgICAgICAgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVk
JiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPHVuc2lnbmVk
PiBieXRlY29kZU9mZnNldEZyb21DYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXgpOworICAgIE9w
dGlvbmFsPEJ5dGVjb2RlSW5kZXg+IGJ5dGVjb2RlSW5kZXhGcm9tQ2FsbFNpdGVJbmRleChDYWxs
U2l0ZUluZGV4KTsKIAogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgSUNTdGF0dXNNYXAmIHJlc3VsdCk7CiAgICAgdm9pZCBnZXRJQ1N0YXR1c01hcChJ
Q1N0YXR1c01hcCYgcmVzdWx0KTsKQEAgLTMwOSw3ICszMDksNyBAQCBwdWJsaWM6CiAgICAgLy8g
VGhpcyBpcyBhIHNsb3cgZnVuY3Rpb24gY2FsbCB1c2VkIHByaW1hcmlseSBmb3IgY29tcGlsaW5n
IE9TUiBleGl0cyBpbiB0aGUgY2FzZQogICAgIC8vIHRoYXQgdGhlcmUgaGFkIGJlZW4gaW5saW5p
bmcuIENoYW5jZXMgYXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzLCB5b3UncmUgcmVhbGx5CiAg
ICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qg
b2YgY2FsbGluZyB0aGlzLgotICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0
ZWNvZGVJbmRleCh1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICBDYWxsTGlua0luZm8qIGdl
dENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAg
dm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQogICAgIHsKQEAgLTMy
OCwyNSArMzI4LDI1IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMo
UmVnaXN0ZXJTZXQpOwogICAgIHZvaWQgc2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhzdGQ6OnVuaXF1
ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+KTsKIAotICAgIFJhcmVDYXNlUHJvZmlsZSogYWRk
UmFyZUNhc2VQcm9maWxlKGludCBieXRlY29kZU9mZnNldCk7Ci0gICAgUmFyZUNhc2VQcm9maWxl
KiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIHVuc2lnbmVkIHJhcmVDYXNlUHJvZmlsZUNv
dW50Rm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgaW50IGJ5dGVj
b2RlT2Zmc2V0KTsKKyAgICBSYXJlQ2FzZVByb2ZpbGUqIGFkZFJhcmVDYXNlUHJvZmlsZShCeXRl
Y29kZUluZGV4KTsKKyAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVj
b2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CisgICAg
dW5zaWduZWQgcmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogCi0gICAgYm9vbCBsaWtlbHlUb1Rha2VT
bG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCisgICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2Fz
ZShCeXRlY29kZUluZGV4KQogICAgIHsKICAgICAgICAgaWYgKCFoYXNCYXNlbGluZUpJVFByb2Zp
bGluZygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQ
cm9maWxlQ291bnRGb3JCeXRlY29kZU9mZnNldChsb2NrZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAg
ICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlSW5k
ZXgobG9ja2VyLCBieXRlY29kZUluZGV4KTsKICAgICAgICAgcmV0dXJuIHZhbHVlID49IE9wdGlv
bnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50KCk7CiAgICAgfQogCi0gICAgYm9v
bCBjb3VsZFRha2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCisgICAgYm9vbCBjb3VsZFRh
a2VTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAgICBp
ZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgdW5z
aWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zmc2V0KGxvY2tl
ciwgYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJv
ZmlsZUNvdW50Rm9yQnl0ZWNvZGVJbmRleChsb2NrZXIsIGJ5dGVjb2RlSW5kZXgpOwogICAgICAg
ICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQo
KTsKICAgICB9CiAKQEAgLTM4Miw2ICszODIsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
cmV0dXJuQWRkcmVzcyAtIGluc3RydWN0aW9uc0JlZ2luOwogICAgIH0KIAorICAgIGlubGluZSBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoY29uc3QgSW5zdHJ1Y3Rpb24qIHJldHVybkFkZHJl
c3MpCisgICAgeworICAgICAgICByZXR1cm4gQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldChy
ZXR1cm5BZGRyZXNzKSk7CisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGlu
c3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5pbnN0cnVjdGlvbnMo
KTsgfQogCiAgICAgc2l6ZV90IHByZWRpY3RlZE1hY2hpbmVDb2RlU2l6ZSgpOwpAQCAtNDgzLDgg
KzQ4OCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBW
YWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9m
ZnNldCk7Ci0gICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVj
b2RlT2Zmc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGludCBieXRlY29kZU9mZnNldCk7
CisgICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2Rl
SW5kZXgpOworICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRl
Y29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoVmFsdWVQcm9maWxlKGNv
bnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVh
Y2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwpAQCAtNDkyLDEzICs0OTcsMTMgQEAgcHVi
bGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiB2b2lkIGZvckVhY2hMTEludENhbGxMaW5rSW5mbyhjb25zdCBGdW5jdG9yJik7CiAK
LSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0
aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICBBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZUZvclBDKGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICBib29sIGNv
dWxkVGFrZVNwZWNpYWxGYXN0Q2FzZShJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICBib29sIGNvdWxkVGFrZVNwZWNpYWxBcml0aEZhc3RDYXNlKEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVPZmZzZXQpOwogCi0gICAgQXJyYXlQcm9maWxlKiBnZXRBcnJheVByb2Zp
bGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwot
ICAgIEFycmF5UHJvZmlsZSogZ2V0QXJyYXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
KTsKKyAgICBBcnJheVByb2ZpbGUqIGdldEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBCeXRlY29kZUluZGV4KTsKKyAgICBBcnJheVByb2ZpbGUqIGdldEFycmF5UHJvZmls
ZShCeXRlY29kZUluZGV4KTsKIAogICAgIC8vIEV4Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0CiAK
QEAgLTg3Niw3ICs4ODEsNyBAQCBwdWJsaWM6CiAKICAgICBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRl
eCBuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5h
bENhbGxTaXRlKTsKIAotICAgIHZvaWQgZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JC
eXRlY29kZU9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KTsK
KyAgICB2b2lkIGVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleChC
eXRlY29kZUluZGV4KTsKIAogICAgIGJvb2wgaGFzVGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4g
bV91bmxpbmtlZENvZGUtPmhhc1RhaWxDYWxscygpOyB9CiAKQEAgLTk0Myw3ICs5NDgsNyBAQCBw
cml2YXRlOgogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMo
KSB7IHJldHVybiBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5z
aWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBudW1iZXJPZkFyZ3Vt
ZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKTsg
fQotICAgIFZhbHVlUHJvZmlsZSogdHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
aW50IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBWYWx1ZVByb2ZpbGUqIHRyeUdldFZhbHVlUHJvZmls
ZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAKICAgICBTZWNvbmRzIHRpbWVTaW5j
ZUNyZWF0aW9uKCkKICAgICB7CkBAIC05NjAsNyArOTY1LDcgQEAgcHJpdmF0ZToKICAgICB9CiAK
ICAgICB2b2lkIGluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxl
cigpOwotICAgIHZvaWQgZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZU9m
ZnNldFNsb3coY29uc3QgT3BDYXRjaCYsIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQpOworICAg
IHZvaWQgZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyhj
b25zdCBPcENhdGNoJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICBpbnQgbV9udW1DYWxsZWVMb2Nh
bHM7CiAgICAgaW50IG1fbnVtVmFyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlT3JpZ2luLmNwcAppbmRleCAyZGU4MDQ4MjFjNzgxYmZmODEwM2Q0NWQwN2JkZmE2Yzdl
ZWUwM2NiLi44M2ZiYjkwZjQwMjEzZmVlMDRjYmYxMWIwOTFiNDMyMzc4YmE0Mzg2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCkBAIC05MSw3ICs5
MSw3IEBAIHVuc2lnbmVkIENvZGVPcmlnaW46OmFwcHJveGltYXRlSGFzaChJbmxpbmVDYWxsRnJh
bWUqIHRlcm1pbmFsKSBjb25zdAogICAgIHVuc2lnbmVkIHJlc3VsdCA9IDI7CiAgICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luID0gKnRoaXM7CiAgICAgZm9yICg7OykgewotICAgICAgICByZXN1bHQg
Kz0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIHJlc3VsdCArPSBjb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKS5hc0JpdHMoKTsKIAogICAgICAgICBhdXRvKiBpbmxpbmVDYWxs
RnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwogCkBAIC0xNTIsNyArMTUyLDcg
QEAgdm9pZCBDb2RlT3JpZ2luOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAg
ICAgICAgICAgb3V0LnByaW50KCIoY2xvc3VyZSkgIik7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIG91dC5wcmludCgiYmMjIiwgc3RhY2tbaV0uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAg
ICAgb3V0LnByaW50KHN0YWNrW2ldLmJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAppbmRleCBkNWYzMGMyYzkw
MzY3MTY5ZGM1ODc1NzJjYzJlOWIzMjAyOWU5NDA2Li4zNDE0ZDRmMDFkZjRkNzhiNzRjNGMwY2M1
Yjg5Yzg1Y2VhYjgwYTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZU9yaWdpbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
T3JpZ2luLmgKQEAgLTI1LDYgKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJC
eXRlY29kZUluZGV4LmgiCisKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtNDEsMjUgKzQzLDIzIEBA
IGNsYXNzIENvZGVPcmlnaW4gewogcHVibGljOgogICAgIENvZGVPcmlnaW4oKQogI2lmIENQVShB
RERSRVNTNjQpCi0gICAgICAgIDogbV9jb21wb3NpdGVWYWx1ZShidWlsZENvbXBvc2l0ZVZhbHVl
KG51bGxwdHIsIHNfaW52YWxpZEJ5dGVjb2RlSW5kZXgpKQorICAgICAgICA6IG1fY29tcG9zaXRl
VmFsdWUoYnVpbGRDb21wb3NpdGVWYWx1ZShudWxscHRyLCBCeXRlY29kZUluZGV4KCkpKQogI2Vs
c2UKLSAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoc19pbnZhbGlkQnl0ZWNvZGVJbmRleCkKLSAg
ICAgICAgLCBtX2lubGluZUNhbGxGcmFtZShudWxscHRyKQorICAgICAgICA6IG1faW5saW5lQ2Fs
bEZyYW1lKG51bGxwdHIpCiAjZW5kaWYKICAgICB7CiAgICAgfQotICAgIAorCiAgICAgQ29kZU9y
aWdpbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCiAjaWYgQ1BVKEFERFJFU1M2NCkK
LSAgICAgICAgOiBtX2NvbXBvc2l0ZVZhbHVlKGJ1aWxkQ29tcG9zaXRlVmFsdWUoZGVsZXRlZE1h
cmtlcigpLCBzX2ludmFsaWRCeXRlY29kZUluZGV4KSkKKyAgICAgICAgOiBtX2NvbXBvc2l0ZVZh
bHVlKGJ1aWxkQ29tcG9zaXRlVmFsdWUoZGVsZXRlZE1hcmtlcigpLCBCeXRlY29kZUluZGV4KCkp
KQogI2Vsc2UKLSAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoc19pbnZhbGlkQnl0ZWNvZGVJbmRl
eCkKLSAgICAgICAgLCBtX2lubGluZUNhbGxGcmFtZShkZWxldGVkTWFya2VyKCkpCisgICAgICAg
IDogbV9pbmxpbmVDYWxsRnJhbWUoZGVsZXRlZE1hcmtlcigpKQogI2VuZGlmCiAgICAgewogICAg
IH0KICAgICAKLSAgICBleHBsaWNpdCBDb2RlT3JpZ2luKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbnVsbHB0cikKKyAgICBleHBsaWNp
dCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBudWxscHRyKQogI2lmIENQVShBRERSRVNTNjQpCiAgICAgICAg
IDogbV9jb21wb3NpdGVWYWx1ZShidWlsZENvbXBvc2l0ZVZhbHVlKGlubGluZUNhbGxGcmFtZSwg
Ynl0ZWNvZGVJbmRleCkpCiAjZWxzZQpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICwgbV9pbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKQogI2VuZGlmCiAgICAgewotICAg
ICAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCA8IHNfaW52YWxpZEJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICBBU1NFUlQoISFieXRlY29kZUluZGV4KTsKICNpZiBDUFUoQUREUkVTUzY0KQogICAgICAg
ICBBU1NFUlQoIShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihpbmxpbmVDYWxsRnJhbWUpICYgfnNf
bWFza0NvbXBvc2l0ZVZhbHVlRm9yUG9pbnRlcikpOwogI2VuZGlmCkBAIC0xMjQsNyArMTI0LDcg
QEAgcHVibGljOgogI2lmIENQVShBRERSRVNTNjQpCiAgICAgICAgIHJldHVybiAhKG1fY29tcG9z
aXRlVmFsdWUgJiBzX21hc2tJc0J5dGVjb2RlSW5kZXhJbnZhbGlkKTsKICNlbHNlCi0gICAgICAg
IHJldHVybiBtX2J5dGVjb2RlSW5kZXggIT0gc19pbnZhbGlkQnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgcmV0dXJuICEhbV9ieXRlY29kZUluZGV4OwogI2VuZGlmCiAgICAgfQogICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9CkBAIC0xMzQsNyArMTM0
LDcgQEAgcHVibGljOgogI2lmIENQVShBRERSRVNTNjQpCiAgICAgICAgIHJldHVybiAhaXNTZXQo
KSAmJiAobV9jb21wb3NpdGVWYWx1ZSAmIHNfbWFza0NvbXBvc2l0ZVZhbHVlRm9yUG9pbnRlcik7
CiAjZWxzZQotICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4ID09IHNfaW52YWxpZEJ5dGVj
b2RlSW5kZXggJiYgISFtX2lubGluZUNhbGxGcmFtZTsKKyAgICAgICAgcmV0dXJuICEhbV9ieXRl
Y29kZUluZGV4ICYmICEhbV9pbmxpbmVDYWxsRnJhbWU7CiAjZW5kaWYKICAgICB9CiAgICAgCkBA
IC0xNjcsMTQgKzE2NywxNCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKIAotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgo
KSBjb25zdAorICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0CiAgICAgewog
I2lmIENQVShBRERSRVNTNjQpCiAgICAgICAgIGlmICghaXNTZXQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBzX2ludmFsaWRCeXRlY29kZUluZGV4OworICAgICAgICAgICAgcmV0dXJuIEJ5dGVjb2Rl
SW5kZXgoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKGlzT3V0T2ZMaW5lKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIG91dE9mTGluZUNvZGVPcmlnaW4oKS0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAg
cmV0dXJuIG1fY29tcG9zaXRlVmFsdWUgPj4gKDY0IC0gc19mcmVlQml0c0F0VG9wKTsKKyAgICAg
ICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRzKG1fY29tcG9zaXRlVmFsdWUgPj4gKDY0
IC0gc19mcmVlQml0c0F0VG9wKSk7CiAjZWxzZQogICAgICAgICByZXR1cm4gbV9ieXRlY29kZUlu
ZGV4OwogI2VuZGlmCkBAIC0xOTIsOCArMTkyLDYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfaW52YWxpZEJ5dGVjb2RlSW5kZXgg
PSBVSU5UX01BWDsKLQogI2lmIENQVShBRERSRVNTNjQpCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50cHRyX3Qgc19tYXNrSXNPdXRPZkxpbmUgPSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdWlu
dHB0cl90IHNfbWFza0lzQnl0ZWNvZGVJbmRleEludmFsaWQgPSAyOwpAQCAtMjAyLDkgKzIwMCw5
IEBAIHByaXZhdGU6CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1Ymxp
YzoKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eDsKICAgICAgICAgCi0gICAgICAgIE91dE9mTGluZUNvZGVPcmlnaW4oSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIE91dE9m
TGluZUNvZGVPcmlnaW4oSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgIDogaW5saW5lQ2FsbEZyYW1lKGlubGlu
ZUNhbGxGcmFtZSkKICAgICAgICAgICAgICwgYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQog
ICAgICAgICB7CkBAIC0yMzUsMTcgKzIzMywxNyBAQCBwcml2YXRlOgogI2lmIENQVShBRERSRVNT
NjQpCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX2ZyZWVCaXRzQXRUb3AgPSA2NCAt
IFdURl9DUFVfRUZGRUNUSVZFX0FERFJFU1NfV0lEVEg7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50cHRyX3Qgc19tYXNrQ29tcG9zaXRlVmFsdWVGb3JQb2ludGVyID0gKCgxVUxMIDw8IFdURl9D
UFVfRUZGRUNUSVZFX0FERFJFU1NfV0lEVEgpIC0gMSkgJiB+KDhVTEwgLSAxKTsKLSAgICBzdGF0
aWMgdWludHB0cl90IGJ1aWxkQ29tcG9zaXRlVmFsdWUoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgc3RhdGljIHVpbnRwdHJfdCBi
dWlsZENvbXBvc2l0ZVZhbHVlKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBpZiAoYnl0ZWNvZGVJbmRl
eCA9PSBzX2ludmFsaWRCeXRlY29kZUluZGV4KQorICAgICAgICBpZiAoIWJ5dGVjb2RlSW5kZXgp
CiAgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oaW5saW5lQ2FsbEZy
YW1lKSB8IHNfbWFza0lzQnl0ZWNvZGVJbmRleEludmFsaWQ7CiAKLSAgICAgICAgaWYgKFVOTElL
RUxZKGJ5dGVjb2RlSW5kZXggPj0gMSA8PCBzX2ZyZWVCaXRzQXRUb3ApKSB7CisgICAgICAgIGlm
IChVTkxJS0VMWShieXRlY29kZUluZGV4LmFzQml0cygpID49IDEgPDwgc19mcmVlQml0c0F0VG9w
KSkgewogICAgICAgICAgICAgYXV0byogb3V0T2ZMaW5lID0gbmV3IE91dE9mTGluZUNvZGVPcmln
aW4oaW5saW5lQ2FsbEZyYW1lLCBieXRlY29kZUluZGV4KTsKICAgICAgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihvdXRPZkxpbmUpIHwgc19tYXNrSXNPdXRPZkxpbmU7CiAg
ICAgICAgIH0KIAotICAgICAgICB1aW50cHRyX3QgZW5jb2RlZEJ5dGVjb2RlSW5kZXggPSBzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlSW5kZXgpIDw8ICg2NCAtIHNfZnJlZUJpdHNBdFRv
cCk7CisgICAgICAgIHVpbnRwdHJfdCBlbmNvZGVkQnl0ZWNvZGVJbmRleCA9IHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSkgPDwgKDY0IC0gc19mcmVlQml0c0F0
VG9wKTsKICAgICAgICAgQVNTRVJUKCEoZW5jb2RlZEJ5dGVjb2RlSW5kZXggJiBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihpbmxpbmVDYWxsRnJhbWUpKSk7CiAgICAgICAgIHJldHVybiBlbmNvZGVk
Qnl0ZWNvZGVJbmRleCB8IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGlubGluZUNhbGxGcmFtZSk7
CiAgICAgfQpAQCAtMjU4LDE0ICsyNTYsMTQgQEAgcHJpdmF0ZToKICAgICAvLyBGaW5hbGx5IHRo
ZSBsYXN0IHNfZnJlZUJpdHNBdFRvcCBhcmUgdGhlIGJ5dGVjb2RlSW5kZXggaWYgaXQgaXMgaW5s
aW5lCiAgICAgdWludHB0cl90IG1fY29tcG9zaXRlVmFsdWU7CiAjZWxzZQotICAgIHVuc2lnbmVk
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKICAg
ICBJbmxpbmVDYWxsRnJhbWUqIG1faW5saW5lQ2FsbEZyYW1lOwogI2VuZGlmCiB9OwogCiBpbmxp
bmUgdW5zaWduZWQgQ29kZU9yaWdpbjo6aGFzaCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6
SW50SGFzaDx1bnNpZ25lZD46Omhhc2goYnl0ZWNvZGVJbmRleCgpKSArCisgICAgcmV0dXJuIFdU
Rjo6SW50SGFzaDx1bnNpZ25lZD46Omhhc2goYnl0ZWNvZGVJbmRleCgpLmFzQml0cygpKSArCiAg
ICAgICAgIFdURjo6UHRySGFzaDxJbmxpbmVDYWxsRnJhbWUqPjo6aGFzaChpbmxpbmVDYWxsRnJh
bWUoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
RkdFeGl0UHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhp
dFByb2ZpbGUuY3BwCmluZGV4IGIxYTAxZmZhNGQ5MzQ4ZmVjYjI0Yzk2ODhiYzgwMDUyZjkzODg2
YTcuLmE4MmY5MmRmZDU5ZTIyZmUyNzEyYmZhMTVlZGE2ZmZkZGEwYWM1NjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNwcApAQCAtMzUs
NyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgRnJlcXVl
bnRFeGl0U2l0ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmlu
dCgiYmMjIiwgbV9ieXRlY29kZU9mZnNldCwgIjogIiwgbV9raW5kLCAiLyIsIG1faml0VHlwZSwg
Ii8iLCBtX2lubGluZUtpbmQpOworICAgIG91dC5wcmludChtX2J5dGVjb2RlSW5kZXgsICI6ICIs
IG1fa2luZCwgIi8iLCBtX2ppdFR5cGUsICIvIiwgbV9pbmxpbmVLaW5kKTsKIH0KIAogRXhpdFBy
b2ZpbGU6OkV4aXRQcm9maWxlKCkgeyB9CkBAIC03NSw3ICs3NSw3IEBAIGJvb2wgRXhpdFByb2Zp
bGU6OmFkZChDb2RlQmxvY2sqIG93bmVyLCBjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1WZWN0b3I8RnJlcXVlbnRFeGl0U2l0ZT4gRXhpdFByb2Zp
bGU6OmV4aXRTaXRlc0Zvcih1bnNpZ25lZCBieXRlY29kZUluZGV4KQorVmVjdG9yPEZyZXF1ZW50
RXhpdFNpdGU+IEV4aXRQcm9maWxlOjpleGl0U2l0ZXNGb3IoQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQogewogICAgIFZlY3RvcjxGcmVxdWVudEV4aXRTaXRlPiByZXN1bHQ7CiAgICAgCkBA
IC04Myw3ICs4Myw3IEBAIFZlY3RvcjxGcmVxdWVudEV4aXRTaXRlPiBFeGl0UHJvZmlsZTo6ZXhp
dFNpdGVzRm9yKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZnJlcXVlbnRFeGl0U2l0ZXMt
PnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2ZyZXF1ZW50RXhpdFNpdGVzLT5hdChpKS5i
eXRlY29kZU9mZnNldCgpID09IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIGlmIChtX2ZyZXF1ZW50
RXhpdFNpdGVzLT5hdChpKS5ieXRlY29kZUluZGV4KCkgPT0gYnl0ZWNvZGVJbmRleCkKICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQobV9mcmVxdWVudEV4aXRTaXRlcy0+YXQoaSkpOwogICAgIH0K
ICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0
UHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxl
LmgKaW5kZXggN2Y2MDE5ZjVhOTNkNzNkMThiOGIxNjBlOTc2MDdhNmYxNjljMWFjOS4uZjgwNzdi
Y2M2NDA5YzliYzg1NTFkMGUzZDZhNjMwMDBiZmJkYjNlYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmgKQEAgLTM5LDcgKzM5LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogY2xhc3MgRnJlcXVlbnRFeGl0U2l0ZSB7CiBw
dWJsaWM6CiAgICAgRnJlcXVlbnRFeGl0U2l0ZSgpCi0gICAgICAgIDogbV9ieXRlY29kZU9mZnNl
dCgwKSAvLyAwID0gZW1wdHkgdmFsdWUKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoQnl0ZWNv
ZGVJbmRleCgwKSkKICAgICAgICAgLCBtX2tpbmQoRXhpdEtpbmRVbnNldCkKICAgICAgICAgLCBt
X2ppdFR5cGUoRXhpdEZyb21Bbnl0aGluZykKICAgICAgICAgLCBtX2lubGluZUtpbmQoRXhpdEZy
b21BbnlJbmxpbmVLaW5kKQpAQCAtNDcsMTUgKzQ3LDE1IEBAIHB1YmxpYzoKICAgICB9CiAgICAg
CiAgICAgRnJlcXVlbnRFeGl0U2l0ZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0g
ICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgxKSAvLyAxID0gZGVsZXRlZCB2YWx1ZQorICAgICAg
ICA6IG1fYnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKICAgICAgICAg
LCBtX2tpbmQoRXhpdEtpbmRVbnNldCkKICAgICAgICAgLCBtX2ppdFR5cGUoRXhpdEZyb21Bbnl0
aGluZykKICAgICAgICAgLCBtX2lubGluZUtpbmQoRXhpdEZyb21BbnlJbmxpbmVLaW5kKQogICAg
IHsKICAgICB9CiAgICAgCi0gICAgZXhwbGljaXQgRnJlcXVlbnRFeGl0U2l0ZSh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCwgRXhpdEtpbmQga2luZCwgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSA9IEV4
aXRGcm9tQW55dGhpbmcsIEV4aXRpbmdJbmxpbmVLaW5kIGlubGluZUtpbmQgPSBFeGl0RnJvbUFu
eUlubGluZUtpbmQpCi0gICAgICAgIDogbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkK
KyAgICBleHBsaWNpdCBGcmVxdWVudEV4aXRTaXRlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCwgRXhpdEtpbmQga2luZCwgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSA9IEV4aXRGcm9tQW55dGhp
bmcsIEV4aXRpbmdJbmxpbmVLaW5kIGlubGluZUtpbmQgPSBFeGl0RnJvbUFueUlubGluZUtpbmQp
CisgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICwgbV9r
aW5kKGtpbmQpCiAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCiAgICAgICAgICwgbV9pbmxp
bmVLaW5kKGlubGluZUtpbmQpCkBAIC02MywxNCArNjMsMTQgQEAgcHVibGljOgogICAgICAgICBp
ZiAobV9raW5kID09IEFyZ3VtZW50c0VzY2FwZWQpIHsKICAgICAgICAgICAgIC8vIENvdW50IHRo
aXMgb25lIGdsb2JhbGx5LiBJdCBkb2Vzbid0IG1hdHRlciB3aGVyZSBpbiB0aGUgY29kZSBibG9j
ayB0aGUgYXJndW1lbnRzIGV4Y2FwZWQ7CiAgICAgICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHRo
ZXkgZGlkIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24u
Ci0gICAgICAgICAgICBtX2J5dGVjb2RlT2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIG1fYnl0ZWNv
ZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAg
Ly8gVXNlIHRoaXMgY29uc3RydWN0b3IgaWYgeW91IHdpc2ggZm9yIHRoZSBleGl0IHNpdGUgdG8g
YmUgY291bnRlZCBnbG9iYWxseSB3aXRoaW4gaXRzCiAgICAgLy8gY29kZSBibG9jay4KICAgICBl
eHBsaWNpdCBGcmVxdWVudEV4aXRTaXRlKEV4aXRLaW5kIGtpbmQsIEV4aXRpbmdKSVRUeXBlIGpp
dFR5cGUgPSBFeGl0RnJvbUFueXRoaW5nLCBFeGl0aW5nSW5saW5lS2luZCBpbmxpbmVLaW5kID0g
RXhpdEZyb21BbnlJbmxpbmVLaW5kKQotICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoMCkKKyAg
ICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgLCBtX2tp
bmQoa2luZCkKICAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKICAgICAgICAgLCBtX2lubGlu
ZUtpbmQoaW5saW5lS2luZCkKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgIAogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBvdGhlcikgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0ID09IG90aGVyLm1fYnl0ZWNvZGVPZmZz
ZXQKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleCA9PSBvdGhlci5tX2J5dGVjb2RlSW5k
ZXgKICAgICAgICAgICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKICAgICAgICAgICAgICYm
IG1faml0VHlwZSA9PSBvdGhlci5tX2ppdFR5cGUKICAgICAgICAgICAgICYmIG1faW5saW5lS2lu
ZCA9PSBvdGhlci5tX2lubGluZUtpbmQ7CkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICBib29sIHN1YnN1bWVzKGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUmIG90aGVyKSBjb25zdAog
ICAgIHsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQgIT0gb3RoZXIubV9ieXRlY29kZU9m
ZnNldCkKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCAhPSBvdGhlci5tX2J5dGVjb2RlSW5k
ZXgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChtX2tpbmQgIT0gb3Ro
ZXIubV9raW5kKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA3LDEwICsxMDcsMTAg
QEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2J5dGVjb2RlT2Zmc2V0KSArIG1fa2luZCArIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX2ppdFR5cGUpICogNyArIHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
X2lubGluZUtpbmQpICogMTE7CisgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXguaGFzaCgp
ICsgbV9raW5kICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1faml0VHlwZSkgKiA3ICsgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1faW5saW5lS2luZCkgKiAxMTsKICAgICB9CiAgICAgCi0gICAgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0OyB9
CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
Y29kZUluZGV4OyB9CiAgICAgRXhpdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsg
fQogICAgIEV4aXRpbmdKSVRUeXBlIGppdFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2ppdFR5cGU7
IH0KICAgICBFeGl0aW5nSW5saW5lS2luZCBpbmxpbmVLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9p
bmxpbmVLaW5kOyB9CkBAIC0xMzEsMTMgKzEzMSwxMyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2tp
bmQgPT0gRXhpdEtpbmRVbnNldCAmJiBtX2J5dGVjb2RlT2Zmc2V0OworICAgICAgICByZXR1cm4g
bV9raW5kID09IEV4aXRLaW5kVW5zZXQgJiYgbV9ieXRlY29kZUluZGV4LmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX2J5dGVjb2RlT2Zmc2V0OworICAg
IEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwogICAgIEV4aXRLaW5kIG1fa2luZDsKICAg
ICBFeGl0aW5nSklUVHlwZSBtX2ppdFR5cGU7CiAgICAgRXhpdGluZ0lubGluZUtpbmQgbV9pbmxp
bmVLaW5kOwpAQCAtMTgzLDcgKzE4Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBHZXQgdGhl
IGZyZXF1ZW50IGV4aXQgc2l0ZXMgZm9yIGEgYnl0ZWNvZGUgaW5kZXguIFRoaXMgaXMgTyhuKSwg
YW5kIGlzCiAgICAgLy8gbWVhbnQgdG8gb25seSBiZSB1c2VkIGZyb20gZGVidWdnaW5nL3Byb2Zp
bGluZyBjb2RlLgotICAgIFZlY3RvcjxGcmVxdWVudEV4aXRTaXRlPiBleGl0U2l0ZXNGb3IodW5z
aWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgVmVjdG9yPEZyZXF1ZW50RXhpdFNpdGU+IGV4aXRT
aXRlc0ZvcihCeXRlY29kZUluZGV4KTsKICAgICAKICAgICAvLyBUaGlzIGlzIE8obikgYW5kIHNo
b3VsZCBiZSBjYWxsZWQgb24gbGVzcy1mcmVxdWVudGx5IGV4ZWN1dGVkIGNvZGUgcGF0aHMKICAg
ICAvLyBpbiB0aGUgY29tcGlsZXIuIEl0IHNob3VsZCBiZSBzdHJpY3RseSBjaGVhcGVyIHRoYW4g
YnVpbGRpbmcgYQpAQCAtMjIyLDcgKzIyMiw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGhh
c0V4aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUoa2luZCkpOwogICAgIH0KICAgICAKLSAgICBib29s
IGhhc0V4aXRTaXRlKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEV4aXRLaW5kIGtpbmQpIGNvbnN0
CisgICAgYm9vbCBoYXNFeGl0U2l0ZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEV4aXRL
aW5kIGtpbmQpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gaGFzRXhpdFNpdGUoRnJlcXVl
bnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBraW5kKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkU291cmNlRHVtcC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmNwcAppbmRleCBh
YmE4NDk0ZWVmZDBmOWRmNWQzMDkzYzIxMmYzMmNlMDgxOWJkMTU2Li5iZjIyMTAyNzVlNTdmYzg3
ZjUzNjQyNDAwZTJjZTc0MzQyZjcwNGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmNwcApAQCAtMzgsNyArMzgsNyBAQCBE
ZWZlcnJlZFNvdXJjZUR1bXA6OkRlZmVycmVkU291cmNlRHVtcChDb2RlQmxvY2sqIGNvZGVCbG9j
aykKIHsKIH0KIAotRGVmZXJyZWRTb3VyY2VEdW1wOjpEZWZlcnJlZFNvdXJjZUR1bXAoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcm9vdENvZGVCbG9jaywgSklUVHlwZSByb290SklU
VHlwZSwgdW5zaWduZWQgY2FsbGVyQnl0ZWNvZGVJbmRleCkKK0RlZmVycmVkU291cmNlRHVtcDo6
RGVmZXJyZWRTb3VyY2VEdW1wKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHJvb3RD
b2RlQmxvY2ssIEpJVFR5cGUgcm9vdEpJVFR5cGUsIEJ5dGVjb2RlSW5kZXggY2FsbGVyQnl0ZWNv
ZGVJbmRleCkKICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrKQog
ICAgICwgbV9yb290Q29kZUJsb2NrKGNvZGVCbG9jay0+dm0oKSwgcm9vdENvZGVCbG9jaykKICAg
ICAsIG1fcm9vdEpJVFR5cGUocm9vdEpJVFR5cGUpCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgRGVm
ZXJyZWRTb3VyY2VEdW1wOjpkdW1wKCkKICAgICBkYXRhTG9nKCptX2NvZGVCbG9jayk7CiAKICAg
ICBpZiAoaXNJbmxpbmVkRnJhbWUpCi0gICAgICAgIGRhdGFMb2coIiBhdCAiLCBDb2RlQmxvY2tX
aXRoSklUVHlwZSgqbV9yb290Q29kZUJsb2NrLCBtX3Jvb3RKSVRUeXBlKSwgIiAiLCAiYmMjIiwg
bV9jYWxsZXJCeXRlY29kZUluZGV4KTsKKyAgICAgICAgZGF0YUxvZygiIGF0ICIsIENvZGVCbG9j
a1dpdGhKSVRUeXBlKCptX3Jvb3RDb2RlQmxvY2ssIG1fcm9vdEpJVFR5cGUpLCAiICIsIG1fY2Fs
bGVyQnl0ZWNvZGVJbmRleCk7CiAKICAgICBkYXRhTG9nKCJcbicnJyIpOwogICAgIG1fY29kZUJs
b2NrLT5kdW1wU291cmNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmgKaW5kZXggYjVhN2JmMmNmMmRiNmM3YzE5YzhlZTRmYjUw
YmJkMDE4YjM0MjEwYS4uZThkMmNhOGQ2ODhjN2YwODMwYjY5MjI3NzQ0MDRhODRkYzQwMWI3NCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkU291cmNl
RHVtcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZFNvdXJj
ZUR1bXAuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBEZWZlcnJlZFNvdXJjZUR1bXAgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIERlZmVycmVkU291cmNlRHVt
cChDb2RlQmxvY2sqKTsKLSAgICBEZWZlcnJlZFNvdXJjZUR1bXAoQ29kZUJsb2NrKiwgQ29kZUJs
b2NrKiByb290Q29kZUJsb2NrLCBKSVRUeXBlIHJvb3RKSVRUeXBlLCB1bnNpZ25lZCBjYWxsZXJC
eXRlY29kZUluZGV4KTsKKyAgICBEZWZlcnJlZFNvdXJjZUR1bXAoQ29kZUJsb2NrKiwgQ29kZUJs
b2NrKiByb290Q29kZUJsb2NrLCBKSVRUeXBlIHJvb3RKSVRUeXBlLCBCeXRlY29kZUluZGV4IGNh
bGxlckJ5dGVjb2RlSW5kZXgpOwogCiAgICAgdm9pZCBkdW1wKCk7CiAKQEAgLTQ0LDcgKzQ0LDcg
QEAgcHJpdmF0ZToKICAgICBTdHJvbmc8Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBTdHJv
bmc8Q29kZUJsb2NrPiBtX3Jvb3RDb2RlQmxvY2s7CiAgICAgSklUVHlwZSBtX3Jvb3RKSVRUeXBl
OwotICAgIHVuc2lnbmVkIG1fY2FsbGVyQnl0ZWNvZGVJbmRleCB7IFVJTlRfTUFYIH07CisgICAg
Qnl0ZWNvZGVJbmRleCBtX2NhbGxlckJ5dGVjb2RlSW5kZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0
ZWNvZGVMaXZlbmVzcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRl
Y29kZUxpdmVuZXNzLmgKaW5kZXggMDczY2UyNzU3YmJhOWMyYTBhYjZjMTIwZjRkYmEwZGJiZjcx
OWJmOC4uOWE4ODQzN2ViM2ZiZjM4MzBhZTcxMzY0NWQ2Y2ZkMzc5M2U3ZTEyOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNz
LmgKQEAgLTMxLDE3ICszMSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOwogCi10eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIEZhc3RCaXRWZWN0
b3IsIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hU
cmFpdHM8dW5zaWduZWQ+PiBCeXRlY29kZVRvQml0bWFwTWFwOwordHlwZWRlZiBIYXNoTWFwPEJ5
dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3I+IEJ5dGVjb2RlVG9CaXRtYXBNYXA7CiAKIGNsYXNz
IEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBnZXRMaXZlbmVzcyh1bnNpZ25lZCBieXRl
Y29kZUluZGV4KSBjb25zdAorICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGdldExpdmVuZXNzKEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X21hcFtieXRlY29kZUluZGV4XTsKKyAgICAgICAgLy8gRklYTUU6IFdoYXQgc2hvdWxkIHRoaXMg
ZG8gd2hlbiB3ZSBoYXZlIGNoZWNrcG9pbnRzPworICAgICAgICByZXR1cm4gbV9tYXBbYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKV07CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmFuZElzTGl2ZShp
bnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QKKyAgICBib29sIG9wZXJh
bmRJc0xpdmUoaW50IG9wZXJhbmQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkgY29uc3QK
ICAgICB7CiAgICAgICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9w
ZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgp
LCBvcGVyYW5kKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFN0YXR1cy5jcHAKaW5kZXggYmVlYjBlZGNlMjk3MDk5MWI0N2ExNzYwNGI1ZDJiYTRm
MzZiN2RmYS4uNjIyYjNlNmQwYzZlNTAyMGFjMTBmOTQ2YzA2NTJjNGI3OGFjZDA4NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcApAQCAt
NTIsMTEgKzUyLDExIEBAIGJvb2wgR2V0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBH
ZXRCeUlkVmFyaWFudCYgdmFyaWFudCkKICAgICByZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50
KG1fdmFyaWFudHMsIHZhcmlhbnQpOwogfQogCi1HZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorR2V0QnlJZFN0YXR1cyBHZXRCeUlk
U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIFZN
JiB2bSA9IHByb2ZpbGVkQmxvY2stPnZtKCk7CiAgICAgCi0gICAgYXV0byBpbnN0cnVjdGlvbiA9
IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOworICAgIGF1
dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29k
ZUluZGV4Lm9mZnNldCgpKTsKIAogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEOwogICAgIHN3
aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKQEAgLTEwMiw3ICsxMDIsNyBAQCBHZXRC
eUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCB1bnNpZ25lZAogICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFNpbXBsZSwgZmFs
c2UsIEdldEJ5SWRWYXJpYW50KFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBvZmZzZXQpKTsKIH0K
IAotR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcgZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4
aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQorR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0
RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURh
dGEpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xv
Y2spOwogCkBAIC0xMzAsNyArMTMwLDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG0KICNpZiBF
TkFCTEUoREZHX0pJVCkKIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0
dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBHZXRCeUlkU3RhdHVz
IHJlc3VsdCA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0
ZUZlZWRiYWNrKAogICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCB1aWQs
CiAgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKHByb2ZpbGVkQmxv
Y2ssIGJ5dGVjb2RlSW5kZXgpKTsKQEAgLTMwMyw3ICszMDMsNyBAQCBHZXRCeUlkU3RhdHVzIEdl
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJ
Q1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsCiAgICAgSUNTdGF0dXNDb250ZXh0U3RhY2smIGljQ29u
dGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
CiB7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpOwogICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRl
RGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKHByb2ZpbGVkQmxvY2ss
IGJ5dGVjb2RlSW5kZXgpOwogICAgIEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNCYWRDYWNoZUV4aXRT
aXRlKHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgKaW5kZXggMzgzZDU4NjBkYjVkNDhi
NjcxYjk2NDkxNmU1YTU4NDBhYWQxMWViNS4uMWNjMGUyMmJjOTU0ZmJlZWQzZTE3MzNhMDMxNGM1
YTUyMDUxZjZiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRTdGF0dXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5oCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgICAgICBtX3ZhcmlhbnRz
LmFwcGVuZCh2YXJpYW50KTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIEdldEJ5SWRTdGF0dXMg
Y29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhp
dFNpdGVEYXRhKTsKKyAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9j
ayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwg
RXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwogICAgIHN0YXRpYyBHZXRC
eUlkU3RhdHVzIGNvbXB1dGVGb3IoY29uc3QgU3RydWN0dXJlU2V0JiwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCk7CiAgICAgCiAgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2Rl
QmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXND
b250ZXh0U3RhY2smIGRmZ0NvbnRleHRTdGFjaywgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCk7CkBAIC0xNTMsNyArMTUzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyosCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIENhbGxMaW5rU3RhdHVzOjpF
eGl0U2l0ZURhdGEpOwogI2VuZGlmCi0gICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZy
b21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKTsKKyAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENv
ZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwogICAgIAog
ICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuY3BwCmluZGV4
IGFkZDJlYjA0NDllMDg1OTY0OGQ5MmQ1NzBhODUzZWNlYWJjZmJiYjEuLjhiZWVhYmEwZDVmYTZk
Mjg3ZmNkZTc3YWJiMzQ3ZTMyZjUwNzQ5MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JQ1N0YXR1c1V0aWxzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSUNTdGF0dXNVdGlscy5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLUV4aXRGbGFnIGhhc0JhZENhY2hlRXhpdFNpdGUoQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorRXhpdEZsYWcgaGFzQmFkQ2FjaGVF
eGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5s
aW5rZWRDb2RlQmxvY2sgPSBwcm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c1V0aWxzLmgKaW5kZXggMDc3
Y2JlMWFiYWRmNzJkOWVjYTUxZmZlMGEzNWZiM2M4NjkyYzc3Ni4uOTgyMGFkOTlmNDVmOTRmZjZk
MWM5Y2FmMzg0NmYwNzVhMjYzOTQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSUNTdGF0dXNVdGlscy5oCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgZmlsdGVySUNTdGF0
dXNWYXJpYW50cyhWYXJpYW50VmVjdG9yVHlwZSYgdmFyaWFudHMsIGNvbnN0IFN0cnVjdHVyZVNl
dCYgc2V0CiAgICAgICAgIH0pOwogfQogCi1FeGl0RmxhZyBoYXNCYWRDYWNoZUV4aXRTaXRlKENv
ZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CitFeGl0Rmxh
ZyBoYXNCYWRDYWNoZUV4aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJ
bmRleCk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCmluZGV4IGI0NTg4YjU4NTI1OTNkOWVhNzMwZDQx
ZDFhYjljMzZlMTVmZjE0MmMuLjkyMzcwNTNmYmE2NjBlNDMyYzQ3MGMxMGQxNjdlNjk1NGZkZjYy
ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0
dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMu
Y3BwCkBAIC00Myw3ICs0Myw3IEBAIGJvb2wgSW5CeUlkU3RhdHVzOjphcHBlbmRWYXJpYW50KGNv
bnN0IEluQnlJZFZhcmlhbnQmIHZhcmlhbnQpCiB9CiAKICNpZiBFTkFCTEUoSklUKQotSW5CeUlk
U3RhdHVzIEluQnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ss
IElDU3RhdHVzTWFwJiBtYXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIEV4aXRGbGFnIGRpZEV4aXQpCitJbkJ5SWRTdGF0dXMgSW5CeUlkU3RhdHVzOjpj
b21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0Rmxh
ZyBkaWRFeGl0KQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9j
ay0+bV9sb2NrKTsKIApAQCAtNjQsNyArNjQsNyBAQCBJbkJ5SWRTdGF0dXMgSW5CeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUluQnlJZFN0YXR1cyBJbkJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorSW5CeUlkU3RhdHVzIElu
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVz
TWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKIHsKICAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2NrLCBtYXAsIGJ5dGVj
b2RlSW5kZXgsIHVpZCwgaGFzQmFkQ2FjaGVFeGl0U2l0ZShwcm9maWxlZEJsb2NrLCBieXRlY29k
ZUluZGV4KSk7CiB9CkBAIC03Myw3ICs3Myw3IEBAIEluQnlJZFN0YXR1cyBJbkJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoCiAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYg
YmFzZWxpbmVNYXAsCiAgICAgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewotICAgIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAg
ICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0U2l0ZShwcm9maWxlZEJsb2NrLCBi
eXRlY29kZUluZGV4KTsKICAgICAKICAgICBmb3IgKElDU3RhdHVzQ29udGV4dCogY29udGV4dCA6
IGNvbnRleHRTdGFjaykgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luQnlJZFN0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJ
ZFN0YXR1cy5oCmluZGV4IDhhZWI3NjBjNDg5YWEyNzRlMjkyNDA3MDNmNmQyYjdlN2M4MTMyMjAu
LmViNjVhZWEwNmJjNDhjMzgxYTkzNzhjMDA2NzUzNmVlMjg5ZDM0YmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKQEAgLTgwLDggKzgwLDggQEAg
cHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAg
ICAKLSAgICBzdGF0aWMgSW5CeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0
dXNNYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsK
LSAgICBzdGF0aWMgSW5CeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNN
YXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0
RmxhZyk7CisgICAgc3RhdGljIEluQnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElD
U3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAg
c3RhdGljIEluQnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwg
Qnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcpOwogICAgIHN0
YXRpYyBJbkJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElD
U3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFj
aywgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVD
YWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxG
cmFtZS5jcHAKaW5kZXggZTUzNjFiNjFhMjVmMDBmNGMzMjliNzk3MmE3MDgzMjJiMTA2ZWY4MS4u
M2UzZTY1ZjU5YzUxMzAxZWIyZjQ0YjJkMjMxZWZjZWNhOTFlY2NmMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAKQEAgLTY5LDcg
KzY5LDcgQEAgdm9pZCBJbmxpbmVDYWxsRnJhbWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnMKICAgICBvdXQucHJpbnQoYnJpZWZGdW5j
dGlvbkluZm9ybWF0aW9uKCksICI6PCIsIFJhd1BvaW50ZXIoYmFzZWxpbmVDb2RlQmxvY2suZ2V0
KCkpKTsKICAgICBpZiAoaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgIG91dC5wcmludCgiIChTdHJp
Y3RNb2RlKSIpOwotICAgIG91dC5wcmludCgiLCBiYyMiLCBkaXJlY3RDYWxsZXIuYnl0ZWNvZGVJ
bmRleCgpLCAiLCAiLCBzdGF0aWNfY2FzdDxLaW5kPihraW5kKSk7CisgICAgb3V0LnByaW50KCIs
ICIsIGRpcmVjdENhbGxlci5ieXRlY29kZUluZGV4KCksICIsICIsIHN0YXRpY19jYXN0PEtpbmQ+
KGtpbmQpKTsKICAgICBpZiAoaXNDbG9zdXJlQ2FsbCkKICAgICAgICAgb3V0LnByaW50KCIsIGNs
b3N1cmUgY2FsbCIpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAppbmRleCBkM2JhOWM5OGFiMGU5ODBmZWIyNzRi
MDUyYTkwZjIwY2ZkNjdhZTg2Li5lZDAwZTY5MWRiNmUyZjRlYWQyNGY5YWY3N2Q3ZTA5OTM5N2M4
MTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VP
ZlN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNl
T2ZTdGF0dXMuY3BwCkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgSW5zdGFuY2VPZlN0YXR1czo6YXBw
ZW5kVmFyaWFudChjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYgdmFyaWFudCkKIH0KIAogSW5zdGFu
Y2VPZlN0YXR1cyBJbnN0YW5jZU9mU3RhdHVzOjpjb21wdXRlRm9yKAotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBJQ1N0YXR1c01hcCYgaW5mb01hcCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSUNTdGF0dXNNYXAmIGluZm9NYXAsIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5oCmluZGV4IGYwZTIwZDlhZWY1MTRiOTI4ZjUwYzUxOTIy
MWFhNjRkZTYzYzllZDguLjY5MzMyNjBjMWZiNmQwYTYzODI4YjZmYWI5NzBhZWY5ODJhZGViMjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3Rh
dHVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0
dXMuaApAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBJbnN0YW5jZU9mU3RhdHVzIGNv
bXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
KTsKKyAgICBzdGF0aWMgSW5zdGFuY2VPZlN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElD
U3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgc3RhdGljIEluc3RhbmNlT2ZTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIFN0cnVjdHVyZVN0dWJJbmZvKik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oCmluZGV4IDk5YjVhNWE5MDYw
MjZjZWNlOGI0ZGQxMDA0NDkyODlkMWZmZTY0MzguLmYxZWIzYmVhOWQyYzhiODJhZjQ3MjIyYTg1
ZTU5Mzk3NDgzNDA3OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbnN0cnVjdGlvblN0cmVhbS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbnN0cnVjdGlvblN0cmVhbS5oCkBAIC03NywxMCArNzcsOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuIEJhc2VSZWYgeyBtX2luc3RydWN0aW9ucywgbV9pbmRleCArIHB0cigpLT5z
aXplKCkgfTsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSBPZmZzZXQgb2Zmc2V0KCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1faW5kZXg7Ci0gICAgICAgIH0KKyAg
ICAgICAgaW5saW5lIE9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Cisg
ICAgICAgIGlubGluZSBCeXRlY29kZUluZGV4IGluZGV4KCkgY29uc3QgeyByZXR1cm4gQnl0ZWNv
ZGVJbmRleChvZmZzZXQoKSk7IH0KIAogICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdAogICAg
ICAgICB7CkBAIC0xNTIsMTIgKzE1MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpdGVy
YXRvciB7IG1faW5zdHJ1Y3Rpb25zLCBtX2luc3RydWN0aW9ucy5zaXplKCkgfTsKICAgICB9CiAK
KyAgICBpbmxpbmUgY29uc3QgUmVmIGF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGF0KGluZGV4Lm9mZnNldCgpKTsgfQogICAgIGlubGluZSBjb25zdCBSZWYgYXQoT2Zmc2V0
IG9mZnNldCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChvZmZzZXQgPCBtX2luc3RydWN0
aW9ucy5zaXplKCkpOwogICAgICAgICByZXR1cm4gUmVmIHsgbV9pbnN0cnVjdGlvbnMsIG9mZnNl
dCB9OwogICAgIH0KIAorCiAgICAgaW5saW5lIHNpemVfdCBzaXplKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX2luc3RydWN0aW9ucy5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCmluZGV4
IDAxYTNlZTc0MzY2M2U1MGMxNDE2NWZiNjRhMzFiMjdkMWQyYzJmNWEuLmVjMWY1YzAyOGQ3MzI0
MDdlZGFlNjFhMmEwMDkyN2FjMzRjOTQwZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCkBAIC0zOSwxOSAr
MzksMTkgQEAgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKIGNsYXNzIExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5IHsKIHB1YmxpYzoKICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgpCi0g
ICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgwKSAvLyAwID0gZW1wdHkgdmFsdWUKKyAgICAgICAg
OiBtX2J5dGVjb2RlSW5kZXgoMCkgLy8gMCA9IGVtcHR5IHZhbHVlCiAgICAgICAgICwgbV9vcGVy
YW5kKFZpcnR1YWxSZWdpc3RlcigpKSAvLyBub3QgYSB2YWxpZCBvcGVyYW5kIGluZGV4IGluIG91
ciBjdXJyZW50IHNjaGVtZQogICAgIHsKICAgICB9CiAgICAgCiAgICAgTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1f
Ynl0ZWNvZGVPZmZzZXQoMSkgLy8gMSA9IGRlbGV0ZWQgdmFsdWUKKyAgICAgICAgOiBtX2J5dGVj
b2RlSW5kZXgoMSkgLy8gMSA9IGRlbGV0ZWQgdmFsdWUKICAgICAgICAgLCBtX29wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyKCkpIC8vIG5vdCBhIHZhbGlkIG9wZXJhbmQgaW5kZXggaW4gb3VyIGN1cnJl
bnQgc2NoZW1lCiAgICAgewogICAgIH0KICAgICAKLSAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZUtleSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCi0g
ICAgICAgIDogbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkKKyAgICBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZUtleShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQog
ICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3Bl
cmFuZC5pc1ZhbGlkKCkpOwpAQCAtNjQsMTkgKzY0LDE5IEBAIHB1YmxpYzoKICAgICAKICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkmIG90aGVyKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXQgPT0gb3RoZXIubV9i
eXRlY29kZU9mZnNldAorICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4ID09IG90aGVyLm1f
Ynl0ZWNvZGVJbmRleAogICAgICAgICAgICAgJiYgbV9vcGVyYW5kID09IG90aGVyLm1fb3BlcmFu
ZDsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gV1RGOjppbnRIYXNoKG1fYnl0ZWNvZGVPZmZzZXQpICsgbV9vcGVyYW5kLm9mZnNl
dCgpOworICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5v
ZmZzZXQoKTsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBjb25z
dAorICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoISEqdGhpcyk7Ci0gICAgICAgIHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0OworICAg
ICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KIAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKCkgY29uc3QKQEAgLTg3LDEwICs4NywxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gIW1fb3BlcmFuZC5pc1ZhbGlkKCkgJiYgbV9ieXRlY29kZU9mZnNldDsKKyAgICAgICAgcmV0
dXJuICFtX29wZXJhbmQuaXNWYWxpZCgpICYmIG1fYnl0ZWNvZGVJbmRleDsKICAgICB9CiBwcml2
YXRlOiAKLSAgICB1bnNpZ25lZCBtX2J5dGVjb2RlT2Zmc2V0OworICAgIEJ5dGVjb2RlSW5kZXgg
bV9ieXRlY29kZUluZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKaW5kZXggN2UzY2M5NGZhNDYxMTFkY2JhYjBmMjIw
OWYwMTk4MjAyM2I1ZjAxMy4uNzEwNGQwMWFlMTFhZDNiYWNhMTM0NTViZDFhMzA2YjFiYmQxYmZm
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcApAQCAtNDEsNyArNDEsNyBAQCBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZy
b21MYXp5T3BlcmFuZCgKICAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHJlc3VsdDsK
ICAgICByZXN1bHQubV9raW5kID0gTGF6eU9wZXJhbmQ7CiAgICAgcmVzdWx0LnUubGF6eU9wZXJh
bmQuY29kZUJsb2NrID0gY29kZUJsb2NrOwotICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmJ5dGVj
b2RlT2Zmc2V0ID0ga2V5LmJ5dGVjb2RlT2Zmc2V0KCk7CisgICAgcmVzdWx0LnUubGF6eU9wZXJh
bmQuYnl0ZWNvZGVPZmZzZXQgPSBrZXkuYnl0ZWNvZGVJbmRleCgpOwogICAgIHJlc3VsdC51Lmxh
enlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpLm9mZnNldCgpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAppbmRleCBiNWU4NGIxMzM3ZTNlZjNi
NjIzZGQyOTc2NTA3NGNjYTg1N2MyMzgxLi5jZmI4MzQ3MDZhZjgzNDI3MDI2OGU4ZjJmNmZjOTI5
NDJmM2ZiZDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgKQEAgLTMxLDYgKzMxLDcgQEAK
IC8vIHRoZXNlICNpZidzIHdpbGwgZGlzYXBwZWFyLi4uCiAjaWYgRU5BQkxFKERGR19KSVQpCiAK
KyNpbmNsdWRlICJCeXRlY29kZUluZGV4LmgiCiAjaW5jbHVkZSAiR1BSSW5mby5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTgzLDEyICs4NCwxNiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgCiAg
ICAgS2luZCBtX2tpbmQ7Ci0gICAgdW5pb24geworICAgIHVuaW9uIERhdGEgeworICAgICAgICBE
YXRhKCkKKyAgICAgICAgICAgIDogcHJvZmlsZShudWxscHRyKQorICAgICAgICB7IH0KKwogICAg
ICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGU7CiAgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlOwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2s7Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldDsKKyAgICAgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgICAgICBpbnQgb3BlcmFuZDsKICAg
ICAgICAgfSBsYXp5T3BlcmFuZDsKICAgICB9IHU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKaW5kZXggZWZkZTM3Mzg0NmJmNWIzMTg1ZTJh
Yzg4M2FlYTAzMGZhNWQ3ODA4ZS4uMzI1MGJlNTE4YmRkOWRhM2E0N2E0N2YxMzk5ZTU3MzQzNjVl
NzE4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRT
dGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcApAQCAtNDcsMTEgKzQ3LDExIEBAIGJvb2wgUHV0QnlJZFN0YXR1czo6YXBwZW5kVmFy
aWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCkKICAgICByZXR1cm4gYXBwZW5kSUNT
dGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOwogfQogCi1QdXRCeUlkU3RhdHVzIFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQogewogICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxvY2stPnZtKCk7CiAgICAgCi0gICAgYXV0byBp
bnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5k
ZXgpOworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKHByb2ZpbGVkQmxvY2spOwogCkBAIC05Miw3ICs5Miw3IEBAIFB1dEJ5SWRTdGF0dXMg
UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ss
IHVuc2lnbmVkCiB9CiAKICNpZiBFTkFCTEUoSklUKQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1h
cCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZs
YWcgZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRh
KQorUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1
czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCiB7CiAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgIApAQCAtMjM3LDcgKzIzNyw3
IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAogCiBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGlu
ZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBj
b250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKIHsKLSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4KCk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCk7CiAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNp
dGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9j
aywgYnl0ZWNvZGVJbmRleCk7CiAgICAgRXhpdEZsYWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhp
dFNpdGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCmluZGV4IDkyYjFiMWEzNzJjYjZhZjg1
MmY4YjE0ZTYwNmVjYWFiODM5OTYxNzUuLmIwZGQ5ZjEzOTlhOGJlNzQxZjQ4YzMyNzAzYjA4MjIy
ODU0YzE5OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRT
dGF0dXMuaApAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fdmFyaWFudHMuYXBw
ZW5kKHZhcmlhbnQpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21w
dXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0
ZURhdGEpOworICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwg
SUNTdGF0dXNNYXAmLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0
RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CiAgICAgc3RhdGljIFB1dEJ5SWRT
dGF0dXMgY29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cnVjdHVyZVNldCYsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QpOwogICAgIAogICAgIHN0YXRpYyBQ
dXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1
c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENv
ZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvKiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwKICAgICAgICAgQ2FsbExp
bmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CiAjZW5kaWYKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1
cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVG
cm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCk7CiAgICAgCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAppbmRleCA1ODI2NGIxNGFkMTBiN2NkMTY3NTE1YWMxMzljOWRiMzU0Y2Zj
ODBjLi5kN2IzYjY0MTZmNmVkNTYwOTUxZGY5ODMwNzQ1MzFjYWI0Njg4YWU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAK
QEAgLTQwLDggKzQwLDcgQEAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsK
IH0KIAogU3RydWN0dXJlU3R1YkluZm86OlN0cnVjdHVyZVN0dWJJbmZvKEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZSkKLSAgICA6IGNhbGxTaXRlSW5kZXgoVUlOVF9NQVgpCi0gICAgLCBhY2Nlc3NUeXBl
KGFjY2Vzc1R5cGUpCisgICAgOiBhY2Nlc3NUeXBlKGFjY2Vzc1R5cGUpCiAgICAgLCBjYWNoZVR5
cGUoQ2FjaGVUeXBlOjpVbnNldCkKICAgICAsIGNvdW50ZG93bigxKSAvLyBGb3IgYSB0b3RhbGx5
IGNsZWFyIHN0dWIsIHdlJ2xsIHBhdGNoIGl0IGFmdGVyIHRoZSBmaXJzdCBleGVjdXRpb24uCiAg
ICAgLCByZXBhdGNoQ291bnQoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IGIyNzE2YmZiNGJkZWZkMjA4MWIxNWY2
YTI3MjIxOTRjMjk5MWYyM2QuLjIzNGZhNTc3YzVhZjBhMTIxNmM3YjRkNmQwNDQ3ZDBiY2Y4ZDRj
NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcApAQCAtMTExLDE1ICsxMTEsMTUgQEAgc2l6ZV90IFVubGlua2VkQ29kZUJs
b2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogICAgIHJldHVybiBCYXNl
Ojplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGV4dHJhU2l6ZTsKIH0KIAotaW50IFVubGlua2Vk
Q29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQpCitpbnQgVW5saW5rZWRDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4
KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBBU1NFUlQoYnl0ZWNvZGVPZmZz
ZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgIEFTU0VSVChieXRlY29kZUluZGV4Lm9m
ZnNldCgpIDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKICAgICBpbnQgZGl2b3QgeyAwIH07CiAg
ICAgaW50IHN0YXJ0T2Zmc2V0IHsgMCB9OwogICAgIGludCBlbmRPZmZzZXQgeyAwIH07CiAgICAg
dW5zaWduZWQgbGluZSB7IDAgfTsKICAgICB1bnNpZ25lZCBjb2x1bW4geyAwIH07Ci0gICAgZXhw
cmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIGRpdm90LCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOworICAgIGV4cHJlc3Npb25SYW5nZUZv
ckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQsIGxpbmUsIGNvbHVtbik7CiAgICAgcmV0dXJuIGxpbmU7CiB9CiAKQEAgLTE3OSwxMCArMTc5
LDEwIEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmR1bXBFeHByZXNzaW9uUmFuZ2VJbmZvKCkK
IH0KICNlbmRpZgogCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JC
eXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwKK3ZvaWQgVW5saW5rZWRDb2Rl
QmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4LAogICAgIGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zm
c2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3QKIHsKLSAgICBBU1NF
UlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgIEFTU0VSVChi
eXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKIAogICAgIGlm
ICghbV9leHByZXNzaW9uSW5mby5zaXplKCkpIHsKICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwpA
QCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5n
ZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0CiAgICAgaW50IGhpZ2gg
PSBleHByZXNzaW9uSW5mby5zaXplKCk7CiAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHsKICAgICAg
ICAgaW50IG1pZCA9IGxvdyArIChoaWdoIC0gbG93KSAvIDI7Ci0gICAgICAgIGlmIChleHByZXNz
aW9uSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAg
ICBpZiAoZXhwcmVzc2lvbkluZm9bbWlkXS5pbnN0cnVjdGlvbk9mZnNldCA8PSBieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKQogICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgaGlnaCA9IG1pZDsKQEAgLTMyNSw5ICszMjUsOSBAQCBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbSYgVW5saW5rZWRDb2RlQmxvY2s6Omluc3RydWN0aW9ucygpIGNvbnN0CiAgICAg
cmV0dXJuICptX2luc3RydWN0aW9uczsKIH0KIAotVW5saW5rZWRIYW5kbGVySW5mbyogVW5saW5r
ZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikKK1VubGlua2VkSGFuZGxlcklu
Zm8qIFVubGlua2VkQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZEhhbmRsZXIpCiB7Ci0g
ICAgcmV0dXJuIGhhbmRsZXJGb3JJbmRleChieXRlY29kZU9mZnNldCwgcmVxdWlyZWRIYW5kbGVy
KTsKKyAgICByZXR1cm4gaGFuZGxlckZvckluZGV4KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCksIHJl
cXVpcmVkSGFuZGxlcik7CiB9CiAKIFVubGlua2VkSGFuZGxlckluZm8qIFVubGlua2VkQ29kZUJs
b2NrOjpoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1
aXJlZEhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCmluZGV4IDAwMDJjM2VhMGI0YmI2NGZjYjlhNmFmOTEyNjVmZjBhMjg0
Nzc3MWUuLjFiYTkwN2ZkNzg2ZjM0YjgwY2ZlYTVkM2FlNDBmZmIxOGM1Y2VjZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBA
IC0yMTcsNyArMjE3LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGp1bXBUYXJnZXQoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzW2luZGV4XTsgfQogICAgIHVuc2lnbmVk
IGxhc3RKdW1wVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5sYXN0KCk7IH0K
IAotICAgIFVubGlua2VkSGFuZGxlckluZm8qIGhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpB
bnlIYW5kbGVyKTsKKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVJ
bmRleChCeXRlY29kZUluZGV4LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFu
eUhhbmRsZXIpOwogICAgIFVubGlua2VkSGFuZGxlckluZm8qIGhhbmRsZXJGb3JJbmRleCh1bnNp
Z25lZCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKIAog
ICAgIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzQnVpbHRpbkZ1
bmN0aW9uOyB9CkBAIC0yNzksOSArMjc5LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNSYXJl
RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEuZ2V0KCk7IH0KIAotICAgIGludCBsaW5l
TnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIGlu
dCBsaW5lTnVtYmVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKIAotICAgIHZvaWQg
ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQs
IGludCYgZGl2b3QsCisgICAgdm9pZCBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4KEJ5
dGVjb2RlSW5kZXgsIGludCYgZGl2b3QsCiAgICAgICAgIGludCYgc3RhcnRPZmZzZXQsIGludCYg
ZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3Q7CiAKICAg
ICBib29sIHR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkJiBzdGFydERpdm90LCB1bnNpZ25lZCYgZW5kRGl2
b3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJv
ZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCmlu
ZGV4IDA1YjA5YmU3NTc0MmI1ZTIzOTcxYWY3YTllZTRkMTNjN2Y5YjdhNTAuLmJiYjhhNGIyNDUz
MTA0MDNhN2ZjZWYyYjIxZTExODMzZWZiOTAzNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKQEAgLTE2MSwxOSArMTYxLDE5IEBAIHN0cnVjdCBW
YWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czww
PiB7CiAvLyBUaGlzIGlzIGEgbWluaSB2YWx1ZSBwcm9maWxlIHRvIGNhdGNoIHBhdGhvbG9naWVz
LiBJdCBpcyBhIGNvdW50ZXIgdGhhdCBnZXRzCiAvLyBpbmNyZW1lbnRlZCB3aGVuIHdlIHRha2Ug
dGhlIHNsb3cgcGF0aCBvbiBhbnkgaW5zdHJ1Y3Rpb24uCiBzdHJ1Y3QgUmFyZUNhc2VQcm9maWxl
IHsKLSAgICBSYXJlQ2FzZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICA6IG1f
Ynl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCisgICAgUmFyZUNhc2VQcm9maWxlKEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCkKICAgICAgICAgLCBtX2NvdW50ZXIoMCkKICAgICB7CiAgICAgfQogICAgIAotICAg
IGludCBtX2J5dGVjb2RlT2Zmc2V0OworICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4
OwogICAgIHVpbnQzMl90IG1fY291bnRlcjsKIH07CiAKLWlubGluZSBpbnQgZ2V0UmFyZUNhc2VQ
cm9maWxlQnl0ZWNvZGVPZmZzZXQoUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGUpCitp
bmxpbmUgQnl0ZWNvZGVJbmRleCBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZUluZGV4KFJhcmVD
YXNlUHJvZmlsZSogcmFyZUNhc2VQcm9maWxlKQogewotICAgIHJldHVybiByYXJlQ2FzZVByb2Zp
bGUtPm1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgcmV0dXJuIHJhcmVDYXNlUHJvZmlsZS0+bV9ieXRl
Y29kZUluZGV4OwogfQogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3BlcmFuZCA6IHB1YmxpYyBW
YWx1ZVByb2ZpbGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCBlNzkxNGFhNDdjNWVlOWE5ODNkNzU5
ZmRkNmZhYWI2Y2NhMGIzZjIwLi4xNTRiZDNjZmJjYzI5YzJjZTc0OGJlZGY3N2U2MWFjNTlmYmE3
M2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtNTA0OSw3ICs1MDQ5LDcgQEAgdm9pZCBGb3JJbkNv
bnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29k
ZUJsb2NrKiBjb2QKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKTsKIAogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3BfZW50ZXIpOwotICAgICAg
ICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgb3Bjb2RlSUQsIGluc3Ry
dWN0aW9uLnB0cigpLCBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgIGNv
bXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIG9wY29kZUlELCBpbnN0cnVjdGlv
bi5wdHIoKSwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewogICAgICAgICAgICAgaWYg
KGxvY2FsKCktPnZpcnR1YWxSZWdpc3RlcigpID09IG9wZXJhbmQpCiAgICAgICAgICAgICAgICAg
aW52YWxpZGF0ZSgpOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCmluZGV4IDAwYzc1NTQ4NjMwY2RkNWJi
MGFhZmFmMGUyNzQ5OGU2OTQwODA2N2EuLjAzMDZmMWZlYTE1NjJhYjEzODM1OWY4ZmM3NWRjYWYz
YTAzOWQ0YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlckNhbGxGcmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyQ2FsbEZyYW1lLmNwcApAQCAtMjk5LDkgKzI5OSw5IEBAIFRleHRQb3NpdGlvbiBEZWJ1
Z2dlckNhbGxGcmFtZTo6Y3VycmVudFBvc2l0aW9uKFZNJiB2bSkKIAogICAgIGlmIChpc1RhaWxE
ZWxldGVkKCkpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX3NoYWRvd0NoaWNr
ZW5GcmFtZS5jb2RlQmxvY2s7Ci0gICAgICAgIGlmIChPcHRpb25hbDx1bnNpZ25lZD4gYnl0ZWNv
ZGVPZmZzZXQgPSBjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0RnJvbUNhbGxTaXRlSW5kZXgobV9z
aGFkb3dDaGlja2VuRnJhbWUuY2FsbFNpdGVJbmRleCkpIHsKLSAgICAgICAgICAgIHJldHVybiBU
ZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvZGVCbG9jay0+bGlu
ZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KCpieXRlY29kZU9mZnNldCkpLAotICAgICAgICAgICAg
ICAgIE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChjb2RlQmxvY2stPmNvbHVtbk51bWJl
ckZvckJ5dGVjb2RlT2Zmc2V0KCpieXRlY29kZU9mZnNldCkpKTsKKyAgICAgICAgaWYgKE9wdGlv
bmFsPEJ5dGVjb2RlSW5kZXg+IGJ5dGVjb2RlSW5kZXggPSBjb2RlQmxvY2stPmJ5dGVjb2RlSW5k
ZXhGcm9tQ2FsbFNpdGVJbmRleChtX3NoYWRvd0NoaWNrZW5GcmFtZS5jYWxsU2l0ZUluZGV4KSkg
eworICAgICAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25l
QmFzZWRJbnQoY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVJbmRleCgqYnl0ZWNvZGVJ
bmRleCkpLAorICAgICAgICAgICAgICAgIE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChj
b2RlQmxvY2stPmNvbHVtbk51bWJlckZvckJ5dGVjb2RlSW5kZXgoKmJ5dGVjb2RlSW5kZXgpKSk7
CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suY3BwCmluZGV4IDFkZGM2MmUzMzU3M2FkYzIzZTRiZWZlZjU0OGIyYWNhM2NlMjAxYTgu
LjhjYjA5NjI3NmYxMzQ5OWRiMWQ2NmMzMjVjNDZkZDUzOWI4ZDQ4MmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcApAQCAtMzIsOCArMzIsNyBAQAogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLUJhc2ljQmxvY2s6OkJhc2ljQmxvY2so
Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNp
Z25lZCBudW1Mb2NhbHMsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQorQmFzaWNCbG9jazo6QmFzaWNC
bG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywg
dW5zaWduZWQgbnVtTG9jYWxzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKICAgICA6IGJ5dGVjb2Rl
QmVnaW4oYnl0ZWNvZGVCZWdpbikKICAgICAsIGluZGV4KE5vQmxvY2spCiAgICAgLCBjZmFTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQoU3RydWN0dXJlc0FyZVdhdGNoZWQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCmluZGV4IDRjNThjOWM1ZTc4NGY4NWQ5ODI4
MTU5ZmJmMGJkZDQ3MTNjYzlhYmEuLjI2YTMwNjcyYjI1ZTliODYwZmNkYTA5MTQ0ZDY2MzExMzA2
NjRhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCkBAIC00
Niw3ICs0Niw3IEBAIHR5cGVkZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBz
dHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxv
Y2soCi0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50
cywgdW5zaWduZWQgbnVtTG9jYWxzLAorICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVn
aW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLAogICAgICAgICBm
bG9hdCBleGVjdXRpb25Db3VudCk7CiAgICAgfkJhc2ljQmxvY2soKTsKICAgICAKQEAgLTE3OCw3
ICsxNzgsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewog
ICAgIAogICAgIC8vIFRoaXMgdmFsdWUgaXMgdXNlZCBpbnRlcm5hbGx5IGZvciBibG9jayBsaW5r
aW5nIGFuZCBPU1IgZW50cnkuIEl0IGlzIG1vc3RseSBtZWFuaW5nbGVzcwogICAgIC8vIGZvciBv
dGhlciBwdXJwb3NlcyBkdWUgdG8gaW5saW5pbmcuCi0gICAgdW5zaWduZWQgYnl0ZWNvZGVCZWdp
bjsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW47CiAgICAgCiAgICAgQmxvY2tJbmRl
eCBpbmRleDsKIApAQCAtMjU5LDE0ICsyNTksMTQgQEAgcHJpdmF0ZToKIAogdHlwZWRlZiBWZWN0
b3I8QmFzaWNCbG9jayo+IEJsb2NrTGlzdDsKICAgICAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQg
Z2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKEJhc2ljQmxvY2sqKiBiYXNpY0Jsb2NrKQorc3RhdGlj
IGlubGluZSBCeXRlY29kZUluZGV4IGdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayhCYXNpY0Jsb2Nr
KiogYmFzaWNCbG9jaykKIHsKICAgICByZXR1cm4gKCpiYXNpY0Jsb2NrKS0+Ynl0ZWNvZGVCZWdp
bjsKIH0KIAotc3RhdGljIGlubGluZSBCYXNpY0Jsb2NrKiBibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0
KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIGxpbmtpbmdUYXJnZXRzLCB1bnNpZ25lZCBieXRlY29kZUJl
Z2luKQorc3RhdGljIGlubGluZSBCYXNpY0Jsb2NrKiBibG9ja0ZvckJ5dGVjb2RlSW5kZXgoVmVj
dG9yPEJhc2ljQmxvY2sqPiYgbGlua2luZ1RhcmdldHMsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVC
ZWdpbikKIHsKLSAgICByZXR1cm4gKmJpbmFyeVNlYXJjaDxCYXNpY0Jsb2NrKiwgdW5zaWduZWQ+
KGxpbmtpbmdUYXJnZXRzLCBsaW5raW5nVGFyZ2V0cy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIGdl
dEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayk7CisgICAgcmV0dXJuICpiaW5hcnlTZWFyY2g8QmFzaWNC
bG9jayosIEJ5dGVjb2RlSW5kZXg+KGxpbmtpbmdUYXJnZXRzLCBsaW5raW5nVGFyZ2V0cy5zaXpl
KCksIGJ5dGVjb2RlQmVnaW4sIGdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayk7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja0luc2VydGlvblNldC5jcHAKaW5kZXggZmJjMmRiNDY1OWMzOWIxNGRiNGEwZTg0NDEz
YTk1NTQ3YTVhZGFjZC4uNzUwOGUyMTlkYzdjNTgzZGI5ZWE4ZmNlNjQ2ODU4OTk5ZTA0NjBmOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHAKQEAgLTUxLDExICs1MSw3IEBAIHZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChz
aXplX3QgaW5kZXgsIFJlZjxCYXNpY0Jsb2NrPiYmIGJsb2NrKQogCiBCYXNpY0Jsb2NrKiBCbG9j
a0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgZmxvYXQgZXhlY3V0aW9uQ291bnQp
CiB7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2Nr
KAotICAgICAgICBVSU5UX01BWCwKLSAgICAgICAgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgIG1fZ3JhcGguYmxvY2soMCktPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpLAotICAgICAgICBleGVjdXRpb25Db3VudCkp
OworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhC
eXRlY29kZUluZGV4KCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJP
ZkFyZ3VtZW50cygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKSwgZXhlY3V0aW9uQ291bnQpKTsKICAgICBibG9jay0+aXNSZWFjaGFibGUgPSB0cnVl
OwogICAgIGF1dG8qIHJlc3VsdCA9IGJsb2NrLnB0cigpOwogICAgIGluc2VydChpbmRleCwgV1RG
TW92ZShibG9jaykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAppbmRleCA2NjEwMTNhODc3NzQ0Y2NlYzhiYzMzNjE3ZmIwYjlhMDk3OTUyNjA1
Li4yMjM0NDVjMmQ5NDU4MDdiZmNiODE5YWVmMjUxN2Y4NTBlMWUzNDRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMTQ4LDEwICsx
NDgsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBUaGlzIGlzIHVzZWQgbW9zdCBub3RhYmx5IHdoZW4g
ZG9pbmcgcG9seXZhcmlhbnQgaW5saW5pbmcgKGl0IHJlcXVpcmVzIGEgZmFpciBiaXQgb2YgY29u
dHJvbC1mbG93IHdpdGggbm8gYnl0ZWNvZGUgYW5hbG9nKS4KICAgICAvLyBJdCBpcyBhbHNvIHVz
ZWQgd2hlbiBkb2luZyBhbiBlYXJseSByZXR1cm4gZnJvbSBhbiBpbmxpbmVkIGNhbGxlZTogaXQg
aXMgZWFzaWVyIHRvIGZpeCB0aGUgYnl0ZWNvZGUgaW5kZXggbGF0ZXIgb24gaWYgbmVlZGVkCiAg
ICAgLy8gdGhhbiB0byBtb3ZlIHRoZSByaWdodCBpbmRleCBhbGwgdGhlIHdheSB0byB0aGUgdHJl
YXRtZW50IG9mIG9wX3JldC4KLSAgICBCYXNpY0Jsb2NrKiBhbGxvY2F0ZVRhcmdldGFibGVCbG9j
ayh1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICBCYXNpY0Jsb2NrKiBhbGxvY2F0ZVRhcmdl
dGFibGVCbG9jayhCeXRlY29kZUluZGV4KTsKICAgICBCYXNpY0Jsb2NrKiBhbGxvY2F0ZVVudGFy
Z2V0YWJsZUJsb2NrKCk7CiAgICAgLy8gQW4gdW50YXJnZXRhYmxlIGJsb2NrIGNhbiBiZSBnaXZl
biBhIGJ5dGVjb2RlSW5kZXggdG8gYmUgbGF0ZXIgbWFuYWdlZCBieSBsaW5rQmxvY2ssIGJ1dCBv
bmx5IG9uY2UsIGFuZCBpdCBjYW4gbmV2ZXIgZ28gaW4gdGhlIG90aGVyIGRpcmVjdGlvbgotICAg
IHZvaWQgbWFrZUJsb2NrVGFyZ2V0YWJsZShCYXNpY0Jsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCk7CisgICAgdm9pZCBtYWtlQmxvY2tUYXJnZXRhYmxlKEJhc2ljQmxvY2sqLCBCeXRlY29k
ZUluZGV4KTsKICAgICB2b2lkIGFkZEp1bXBUbyhCYXNpY0Jsb2NrKik7CiAgICAgdm9pZCBhZGRK
dW1wVG8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAgLy8gSGFuZGxlIGNhbGxzLiBUaGlz
IHJlc29sdmVzIGlzc3VlcyBzdXJyb3VuZGluZyBpbmxpbmluZyBhbmQgaW50cmluc2ljcy4KQEAg
LTE3NCw4ICsxNzQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlVmFyYXJnc0lubGluaW5n
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBjb25zdCBDYWxs
TGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1
bWVudCwgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVu
dHNPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kKTsKICAgICB1
bnNpZ25lZCBnZXRJbmxpbmluZ0JhbGFuY2UoY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kKTsKICAgICBlbnVtIGNsYXNzIENhbGxPcHRpbWl6YXRpb25SZXN1bHQg
eyBPcHRpbWl6ZWRUb0p1bXAsIElubGluZWQsIERpZE5vdGhpbmcgfTsKLSAgICBDYWxsT3B0aW1p
emF0aW9uUmVzdWx0IGhhbmRsZUNhbGxWYXJpYW50KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYWxsVmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0
dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgQmFzaWNCbG9jayogY29u
dGludWF0aW9uQmxvY2ssIGJvb2wgbmVlZHNUb0NoZWNrQ2FsbGVlKTsKLSAgICBDYWxsT3B0aW1p
emF0aW9uUmVzdWx0IGhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNl
dCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxG
cmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CisgICAgQ2FsbE9wdGltaXph
dGlvblJlc3VsdCBoYW5kbGVDYWxsVmFyaWFudChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVh
bFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBC
eXRlY29kZUluZGV4IG5leHRJbmRleCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlLCBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb25CbG9jaywgYm9vbCBuZWVkc1RvQ2hlY2tDYWxsZWUpOworICAgIENhbGxPcHRp
bWl6YXRpb25SZXN1bHQgaGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIEJ5dGVjb2RlSW5kZXggbmV4dEluZGV4LCBOb2RlVHlwZSBjYWxsT3AsIElubGlu
ZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICB2b2lkIGlubGluZUNhbGwoTm9kZSogY2Fs
bFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhbGxWYXJpYW50LCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgSW5saW5lQ2FsbEZy
YW1lOjpLaW5kLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb25CbG9jaywgY29uc3QgQ2hlY2tzRnVu
Y3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICAvLyBIYW5kbGUgaW50cmluc2ljIGZ1bmN0aW9ucy4g
UmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEg
Y2FsbC4KQEAgLTU2Nyw3ICs1NjcsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgb3JpZ2lu
LndhbGtVcElubGluZVN0YWNrKAogICAgICAgICAgICAgWyZdIChDb2RlT3JpZ2luIG9yaWdpbikg
ewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBvcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpOworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9
IG9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBvcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAg
ICAgICAgZmx1c2hJbXBsKGlubGluZUNhbGxGcmFtZSwgYWRkRmx1c2hEaXJlY3QpOwogCkBAIC02
NDIsMTEgKzY0MiwxMSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgZmx1c2hJZlRlcm1pbmFs
KFN3aXRjaERhdGEmIGRhdGEpCiAgICAgewotICAgICAgICBpZiAoZGF0YS5mYWxsVGhyb3VnaC5i
eXRlY29kZUluZGV4KCkgPiBtX2N1cnJlbnRJbmRleCkKKyAgICAgICAgaWYgKGRhdGEuZmFsbFRo
cm91Z2guYnl0ZWNvZGVJbmRleCgpID4gbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNh
c2VzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKGRhdGEuY2FzZXNbaV0udGFyZ2V0
LmJ5dGVjb2RlSW5kZXgoKSA+IG1fY3VycmVudEluZGV4KQorICAgICAgICAgICAgaWYgKGRhdGEu
Y2FzZXNbaV0udGFyZ2V0LmJ5dGVjb2RlSW5kZXgoKSA+IG1fY3VycmVudEluZGV4Lm9mZnNldCgp
KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTcwOSw3
ICs3MDksNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgYnJh
bmNoZXMgb3JpZ2luYXRpbmcgZnJvbSBieXRlY29kZSBhbHdheXMgaGF2ZSBhIGZhbGwtdGhyb3Vn
aC4gV2UKICAgICAgICAgLy8gdXNlIHRoaXMgYXNzdW1wdGlvbiB0byBhdm9pZCBjaGVja2luZyBm
b3IgdGhlIGNyZWF0aW9uIG9mIHRlcm1pbmFsIGJsb2Nrcy4KLSAgICAgICAgQVNTRVJUKCh0YWtl
biA+IG1fY3VycmVudEluZGV4KSB8fCAobm90VGFrZW4gPiBtX2N1cnJlbnRJbmRleCkpOworICAg
ICAgICBBU1NFUlQoKHRha2VuID4gbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkpIHx8IChub3RUYWtl
biA+IG1fY3VycmVudEluZGV4Lm9mZnNldCgpKSk7CiAgICAgICAgIEJyYW5jaERhdGEqIGRhdGEg
PSBtX2dyYXBoLm1fYnJhbmNoRGF0YS5hZGQoKTsKICAgICAgICAgKmRhdGEgPSBCcmFuY2hEYXRh
Ojp3aXRoQnl0ZWNvZGVJbmRpY2VzKHRha2VuLCBub3RUYWtlbik7CiAgICAgICAgIHJldHVybiBk
YXRhOwpAQCAtODM0LDE0ICs4MzQsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG9iamVj
dE5vZGU7CiAgICAgfQogICAgIAotICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRo
b3V0T1NSRXhpdCh1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgIFNwZWN1bGF0ZWRUeXBlIGdl
dFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAg
ICAgewogICAgICAgICBhdXRvIGdldFZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gcm9tRm9yQ29kZUJs
b2NrQW5kQnl0ZWNvZGVPZmZzZXQgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBD
b2RlT3JpZ2luJiBjb2RlT3JpZ2luKQogICAgICAgICB7CiAgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uOwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIHBy
ZWRpY3Rpb24gPSBjb2RlQmxvY2stPnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9m
ZnNldChsb2NrZXIsIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgICAg
ICBwcmVkaWN0aW9uID0gY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNv
ZGVJbmRleChsb2NrZXIsIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGF1dG8qIGZ1enplckFnZW50ID0gbV92bS0+ZnV6emVyQWdlbnQoKTsK
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShmdXp6ZXJBZ2VudCkpCkBAIC04NjAsNyArODYwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgLy8gY2hhaW4gYW5kIHVzZSBpdHMgcHJlZGljdGlvbi4gSWYg
d2Ugb25seSBoYXZlCiAgICAgICAgIC8vIGlubGluZWQgdGFpbCBjYWxsIGZyYW1lcywgd2UgdXNl
IFNwZWNGdWxsVG9wCiAgICAgICAgIC8vIHRvIGF2b2lkIGEgc3B1cmlvdXMgT1NSIGV4aXQuCi0g
ICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBhdXRvIGluc3Ry
dWN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQg
PSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKIAogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7
CkBAIC04OTQsNyArODk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIFNwZWNOb25lOwog
ICAgIH0KIAotICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb24odW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkKKyAgICBTcGVjdWxhdGVkVHlwZSBnZXRQcmVkaWN0aW9uKEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCkKICAgICB7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24g
PSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQoYnl0ZWNvZGVJbmRleCk7CiAKQEAgLTkyMCw3
ICs5MjAsNyBAQCBwcml2YXRlOgogICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGUoQXJyYXk6OkFj
dGlvbiBhY3Rpb24pCiAgICAgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jazsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gY29kZUJsb2NrLT5nZXRBcnJheVByb2ZpbGUoY29kZUJsb2NrLT5ieXRlY29kZU9mZnNl
dChtX2N1cnJlbnRJbnN0cnVjdGlvbikpOworICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSBjb2RlQmxvY2stPmdldEFycmF5UHJvZmlsZShjb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgobV9j
dXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAgICAgcmV0dXJuIGdldEFycmF5TW9kZSgqcHJvZmls
ZSwgYWN0aW9uKTsKICAgICB9CiAKQEAgLTk0Myw3ICs5NDMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuIG5vZGU7CiAKICAgICAgICAgewotICAgICAgICAgICAgQXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmFyaXRo
UHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KTsKKyAgICAgICAgICAgIEFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4KTsKICAgICAg
ICAgICAgIGlmIChhcml0aFByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEFyaXRoQWRkOgpAQCAtOTU2LDcgKzk1Niw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUtPmRpZE9i
c2VydmVCaWdJbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3Mo
Tm9kZU1heUhhdmVCaWdJbnRSZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVNdWw6CiAgICAgICAg
ICAgICAgICAgY2FzZSBBcml0aE11bDogewogICAgICAgICAgICAgICAgICAgICBpZiAoYXJpdGhQ
cm9maWxlLT5kaWRPYnNlcnZlSW50NTJPdmVyZmxvdygpKQpAQCAtOTg3LDcgKzk4Nyw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlI
YXZlQmlnSW50UmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTAyOCwxMyAr
MTAyOCwxMyBAQCBwcml2YXRlOgogICAgICAgICAvLyBjYXJlIGFib3V0IHdoZW4gdGhlIG91dGNv
bWUgb2YgdGhlIGRpdmlzaW9uIGlzIG5vdCBhbiBpbnRlZ2VyLCB3aGljaAogICAgICAgICAvLyBp
cyB3aGF0IHRoZSBzcGVjaWFsIGZhc3QgY2FzZSBjb3VudGVyIHRlbGxzIHVzLgogICAgICAgICAK
LSAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFr
ZVNwZWNpYWxGYXN0Q2FzZShtX2N1cnJlbnRJbmRleCkpCisgICAgICAgIGlmICghbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTcGVjaWFsQXJpdGhGYXN0Q2FzZSht
X2N1cnJlbnRJbmRleCkpCiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgCiAgICAg
ICAgIC8vIEZJWE1FOiBJdCBtaWdodCBiZSBwb3NzaWJsZSB0byBtYWtlIHRoaXMgbW9yZSBncmFu
dWxhci4KICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTWF5T3ZlcmZsb3dJbnQzMkluQmFz
ZWxpbmUgfCBOb2RlTWF5TmVnWmVyb0luQmFzZWxpbmUpOwogICAgICAgICAKLSAgICAgICAgQXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KTsKKyAgICAg
ICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgpOwog
ICAgICAgICBpZiAoYXJpdGhQcm9maWxlLT5kaWRPYnNlcnZlQmlnSW50KCkpCiAgICAgICAgICAg
ICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlIYXZlQmlnSW50UmVzdWx0KTsKIApAQCAtMTA2MSw3
ICsxMDYxLDcgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgY3VycmVudCBibG9jayBiZWluZyBnZW5l
cmF0ZWQuCiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7CiAgICAgLy8gVGhlIGJ5dGVj
b2RlIGluZGV4IG9mIHRoZSBjdXJyZW50IGluc3RydWN0aW9uIGJlaW5nIGdlbmVyYXRlZC4KLSAg
ICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRleDsKKyAgICBCeXRlY29kZUluZGV4IG1fY3VycmVudElu
ZGV4OwogICAgIC8vIFRoZSBzZW1hbnRpYyBvcmlnaW4gb2YgdGhlIGN1cnJlbnQgbm9kZSBpZiBk
aWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBJbmRleC4KICAgICBDb2RlT3JpZ2luIG1fY3VycmVu
dFNlbWFudGljT3JpZ2luOwogICAgIC8vIFRydWUgaWYgaXQncyBPSyB0byBPU1IgZXhpdCByaWdo
dCBub3cuCkBAIC0xMTkxLDE0ICsxMTkxLDE0IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc0Fu
eUZvcmNlT1NSRXhpdHMgeyBmYWxzZSB9OwogfTsKIAotQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJz
ZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitCYXNp
Y0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KQogewotICAgIEFTU0VSVChieXRlY29kZUluZGV4ICE9IFVJTlRf
TUFYKTsKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCk7CiAgICAgUmVmPEJhc2ljQmxvY2s+IGJs
b2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1l
bnRzLCBtX251bUxvY2FscywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2su
cHRyKCk7CiAgICAgLy8gbV9ibG9ja0xpbmtpbmdUYXJnZXRzIG11c3QgYWx3YXlzIGJlIHNvcnRl
ZCBpbiBpbmNyZWFzaW5nIG9yZGVyIG9mIGJ5dGVjb2RlQmVnaW4KICAgICBpZiAobV9pbmxpbmVT
dGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLnNpemUoKSkKLSAgICAgICAgQVNTRVJUKG1f
aW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCktPmJ5dGVjb2RlQmVn
aW4gPCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1f
YmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCktPmJ5dGVjb2RlQmVnaW4ub2Zmc2V0KCkgPCBieXRl
Y29kZUluZGV4Lm9mZnNldCgpKTsKICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2lu
Z1RhcmdldHMuYXBwZW5kKGJsb2NrUHRyKTsKICAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKFdURk1v
dmUoYmxvY2spKTsKICAgICByZXR1cm4gYmxvY2tQdHI7CkBAIC0xMjA2LDE5ICsxMjA2LDE5IEBA
IEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayh1bnNp
Z25lZCBieXRlY29kZUluZGV4KQogCiBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2Nh
dGVVbnRhcmdldGFibGVCbG9jaygpCiB7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRv
cHRSZWYoKm5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFYLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2Nh
bHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2lj
QmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsK
ICAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIG1fZ3JhcGguYXBw
ZW5kQmxvY2soV1RGTW92ZShibG9jaykpOwogICAgIHJldHVybiBibG9ja1B0cjsKIH0KIAotdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6bWFrZUJsb2NrVGFyZ2V0YWJsZShCYXNpY0Jsb2NrKiBibG9jaywg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6Om1ha2VCbG9ja1Rh
cmdldGFibGUoQmFzaWNCbG9jayogYmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVChibG9jay0+Ynl0ZWNvZGVCZWdpbiA9PSBVSU5UX01BWCk7
CisgICAgUkVMRUFTRV9BU1NFUlQoIWJsb2NrLT5ieXRlY29kZUJlZ2luKTsKICAgICBibG9jay0+
Ynl0ZWNvZGVCZWdpbiA9IGJ5dGVjb2RlSW5kZXg7CiAgICAgLy8gbV9ibG9ja0xpbmtpbmdUYXJn
ZXRzIG11c3QgYWx3YXlzIGJlIHNvcnRlZCBpbiBpbmNyZWFzaW5nIG9yZGVyIG9mIGJ5dGVjb2Rl
QmVnaW4KICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLnNp
emUoKSkKLSAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFy
Z2V0cy5sYXN0KCktPmJ5dGVjb2RlQmVnaW4gPCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgQVNT
RVJUKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCktPmJ5dGVj
b2RlQmVnaW4ub2Zmc2V0KCkgPCBieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBwZW5kKGJsb2NrKTsKIH0KIApAQCAt
MTI3OCw3ICsxMjc4LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OlRlcm1pbmFsaXR5IEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDYWxsKAogCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAg
IGF1dG8gb3B0aW1pemF0aW9uUmVzdWx0ID0gaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVz
dWx0LCBjYWxsTGlua1N0YXR1cywgcmVnaXN0ZXJPZmZzZXQsIHRoaXNBcmd1bWVudCwKLSAgICAg
ICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBtX2N1cnJlbnRJbmRleCArIGluc3Ry
dWN0aW9uU2l6ZSwgb3AsIGtpbmQsIHByZWRpY3Rpb24pOworICAgICAgICAgICAgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkg
KyBpbnN0cnVjdGlvblNpemUpLCBvcCwga2luZCwgcHJlZGljdGlvbik7CiAgICAgICAgIGlmIChv
cHRpbWl6YXRpb25SZXN1bHQgPT0gQ2FsbE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkVG9K
dW1wKQogICAgICAgICAgICAgcmV0dXJuIFRlcm1pbmFsOwogICAgICAgICBpZiAob3B0aW1pemF0
aW9uUmVzdWx0ID09IENhbGxPcHRpbWl6YXRpb25SZXN1bHQ6OklubGluZWQpIHsKQEAgLTE0NTcs
MTcgKzE0NTcsMTcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENh
bGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAgICAgICAgIHNldERp
cmVjdChzdGFja0VudHJ5LT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkp
LCB1bmRlZmluZWQsIE5vcm1hbFNldCk7CiAKICAgICAgICAgLy8gV2Ugd2FudCB0byBlbWl0IHRo
ZSBTZXRMb2NhbHMgd2l0aCBhbiBleGl0IG9yaWdpbiB0aGF0IHBvaW50cyB0byB0aGUgcGxhY2Ug
d2UgYXJlIGp1bXBpbmcgdG8uCi0gICAgICAgIHVuc2lnbmVkIG9sZEluZGV4ID0gbV9jdXJyZW50
SW5kZXg7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRleDsK
ICAgICAgICAgYXV0byBvbGRTdGFja1RvcCA9IG1faW5saW5lU3RhY2tUb3A7CiAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AgPSBzdGFja0VudHJ5OwotICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG9w
Y29kZUxlbmd0aHNbb3BfZW50ZXJdOworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgob3Bjb2RlTGVuZ3Roc1tvcF9lbnRlcl0pOwogICAgICAgICBtX2V4aXRPSyA9IHRydWU7
CiAgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CiAgICAgICAgIG1fY3VycmVudEluZGV4
ID0gb2xkSW5kZXg7CiAgICAgICAgIG1faW5saW5lU3RhY2tUb3AgPSBvbGRTdGFja1RvcDsKICAg
ICAgICAgbV9leGl0T0sgPSBmYWxzZTsKIAotICAgICAgICBCYXNpY0Jsb2NrKiogZW50cnlCbG9j
a1B0ciA9IHRyeUJpbmFyeVNlYXJjaDxCYXNpY0Jsb2NrKiwgdW5zaWduZWQ+KHN0YWNrRW50cnkt
Pm1fYmxvY2tMaW5raW5nVGFyZ2V0cywgc3RhY2tFbnRyeS0+bV9ibG9ja0xpbmtpbmdUYXJnZXRz
LnNpemUoKSwgb3Bjb2RlTGVuZ3Roc1tvcF9lbnRlcl0sIGdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9j
ayk7CisgICAgICAgIEJhc2ljQmxvY2sqKiBlbnRyeUJsb2NrUHRyID0gdHJ5QmluYXJ5U2VhcmNo
PEJhc2ljQmxvY2sqLCBCeXRlY29kZUluZGV4PihzdGFja0VudHJ5LT5tX2Jsb2NrTGlua2luZ1Rh
cmdldHMsIHN0YWNrRW50cnktPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5zaXplKCksIEJ5dGVjb2Rl
SW5kZXgob3Bjb2RlTGVuZ3Roc1tvcF9lbnRlcl0pLCBnZXRCeXRlY29kZUJlZ2luRm9yQmxvY2sp
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeUJsb2NrUHRyKTsKICAgICAgICAgYWRkSnVt
cFRvKCplbnRyeUJsb2NrUHRyKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjI1LDggKzE2
MjUsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXRO
b2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAgICAoVmlydHVhbFJlZ2lzdGVy
KWlubGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCwg
Y29udGludWF0aW9uQmxvY2spOwogCiAgICAgLy8gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIGlu
bGluaW5nIHJlYWxseSBoYXBwZW5zLgotICAgIHVuc2lnbmVkIG9sZEluZGV4ID0gbV9jdXJyZW50
SW5kZXg7Ci0gICAgbV9jdXJyZW50SW5kZXggPSAwOworICAgIEJ5dGVjb2RlSW5kZXggb2xkSW5k
ZXggPSBtX2N1cnJlbnRJbmRleDsKKyAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
MCk7CiAKICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0
dGVyQ2FsbDoKQEAgLTE3NjEsNyArMTc2MSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGlu
ZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAg
ICAgbV9jdXJyZW50SW5zdHJ1Y3Rpb24gPSBzYXZlZEN1cnJlbnRJbnN0cnVjdGlvbjsKIH0KIAot
Qnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUNhbGxWYXJpYW50KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0LCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lz
dGVyIHRoaXNBcmd1bWVudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25l
ZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgQmFzaWNCbG9jayogY29udGlu
dWF0aW9uQmxvY2ssIGJvb2wgbmVlZHNUb0NoZWNrQ2FsbGVlKQorQnl0ZUNvZGVQYXJzZXI6OkNh
bGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGxWYXJpYW50KE5v
ZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYWxsVmFyaWFudCBj
YWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwg
aW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBCeXRlY29kZUluZGV4IG5leHRJbmRleCwg
SW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVu
c2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbkJsb2NrLCBi
b29sIG5lZWRzVG9DaGVja0NhbGxlZSkKIHsKICAgICBWRVJCT1NFX0xPRygiICAgIENvbnNpZGVy
aW5nIGNhbGxlZSAiLCBjYWxsZWUsICJcbiIpOwogCkBAIC0xNzg5LDcgKzE3ODksNyBAQCBCeXRl
Q29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
Q2FsbFZhcmlhbnQoTm9kZSogYwogICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rl
ck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgICAgICBpbmxpbmluZ0Jh
bGFuY2UtLTsKICAgICAgICAgaWYgKGNvbnRpbnVhdGlvbkJsb2NrKSB7Ci0gICAgICAgICAgICBt
X2N1cnJlbnRJbmRleCA9IG5leHRPZmZzZXQ7CisgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9
IG5leHRJbmRleDsKICAgICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICAgICAgICAgIHBy
b2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CiAgICAgICAgICAgICBhZGRKdW1wVG8oY29udGludWF0aW9u
QmxvY2spOwpAQCAtMTk3Miw3ICsxOTcyLDcgQEAgQnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6
YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgIE5vZGUqIGNh
bGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBjb25zdCBDYWxsTGlua1N0YXR1
cyYgY2FsbExpbmtTdGF0dXMsCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0
ZXIgdGhpc0FyZ3VtZW50LAogICAgIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKLSAg
ICB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6
S2luZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIEJ5dGVjb2RlSW5kZXgg
bmV4dEluZGV4LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogewogICAgIFZFUkJPU0VfTE9HKCJIYW5kbGluZyBp
bmxpbmluZy4uLlxuU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgIApA
QCAtMTk4NSw3ICsxOTg1LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1
bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgIGlmICghY2FsbExpbmtTdGF0
dXMuY291bGRUYWtlU2xvd1BhdGgoKSAmJiBjYWxsTGlua1N0YXR1cy5zaXplKCkgPT0gMSkgewog
ICAgICAgICByZXR1cm4gaGFuZGxlQ2FsbFZhcmlhbnQoCiAgICAgICAgICAgICBjYWxsVGFyZ2V0
Tm9kZSwgcmVzdWx0LCBjYWxsTGlua1N0YXR1c1swXSwgcmVnaXN0ZXJPZmZzZXQsIHRoaXNBcmd1
bWVudCwKLSAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0
LCBraW5kLCBwcmVkaWN0aW9uLCBpbmxpbmluZ0JhbGFuY2UsIG51bGxwdHIsIHRydWUpOworICAg
ICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRJbmRleCwga2luZCwgcHJl
ZGljdGlvbiwgaW5saW5pbmdCYWxhbmNlLCBudWxscHRyLCB0cnVlKTsKICAgICB9CiAKICAgICAv
LyBXZSBuZWVkIHRvIGNyZWF0ZSBzb21lIGtpbmQgb2Ygc3dpdGNoIG92ZXIgY2FsbGVlLiBGb3Ig
bm93IHdlIG9ubHkgZG8gdGhpcyBpZiB3ZSBiZWxpZXZlIHRoYXQKQEAgLTIwNjEsOSArMjA2MSw5
IEBAIEJ5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZygKICAgICAKICAgICBWRVJCT1NFX0xPRygiQWJvdXQgdG8gbG9vcCBv
dmVyIGZ1bmN0aW9ucyBhdCAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiLlxuIik7CiAKLSAgICB1
bnNpZ25lZCBvbGRPZmZzZXQgPSBtX2N1cnJlbnRJbmRleDsKKyAgICBCeXRlY29kZUluZGV4IG9s
ZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNh
bGxMaW5rU3RhdHVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIG1fY3VycmVudEluZGV4ID0gb2xk
T2Zmc2V0OworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZEluZGV4OwogICAgICAgICBCYXNp
Y0Jsb2NrKiBjYWxsZWVFbnRyeUJsb2NrID0gYWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpOwog
ICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNhbGxlZUVudHJ5QmxvY2s7CiAgICAgICAgIHByZXBh
cmVUb1BhcnNlQmxvY2soKTsKQEAgLTIwNzUsNyArMjA3NSw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpD
YWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAg
ICAgICAgCiAgICAgICAgIGF1dG8gaW5saW5pbmdSZXN1bHQgPSBoYW5kbGVDYWxsVmFyaWFudCgK
ICAgICAgICAgICAgIG15Q2FsbFRhcmdldE5vZGUsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXNbaV0s
IHJlZ2lzdGVyT2Zmc2V0LAotICAgICAgICAgICAgdGhpc0FyZ3VtZW50LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgcHJlZGljdGlvbiwKKyAgICAgICAgICAg
IHRoaXNBcmd1bWVudCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRJbmRleCwga2lu
ZCwgcHJlZGljdGlvbiwKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSwgY29udGludWF0aW9u
QmxvY2ssIGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChpbmxpbmluZ1Jlc3VsdCA9PSBD
YWxsT3B0aW1pemF0aW9uUmVzdWx0OjpEaWROb3RoaW5nKSB7CkBAIC0yMTA0LDcgKzIxMDQsNyBA
QCBCeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcoCiAKICAgICAvLyBTbG93IHBhdGggYmxvY2sKICAgICBtX2N1cnJlbnRC
bG9jayA9IGFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKTsKLSAgICBtX2N1cnJlbnRJbmRleCA9
IG9sZE9mZnNldDsKKyAgICBtX2N1cnJlbnRJbmRleCA9IG9sZEluZGV4OwogICAgIG1fZXhpdE9L
ID0gdHJ1ZTsKICAgICBkYXRhLmZhbGxUaHJvdWdoID0gQnJhbmNoVGFyZ2V0KG1fY3VycmVudEJs
b2NrKTsKICAgICBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CkBAIC0yMTI0LDcgKzIxMjQsNyBAQCBC
eXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW5saW5pbmcoCiAgICAgICAgIFZFUkJPU0VfTE9HKCJjb3VsZFRha2VTbG93UGF0aCB3YXMg
ZmFsc2VcbiIpOwogICAgIH0KIAotICAgIG1fY3VycmVudEluZGV4ID0gbmV4dE9mZnNldDsKKyAg
ICBtX2N1cnJlbnRJbmRleCA9IG5leHRJbmRleDsKICAgICBtX2V4aXRPSyA9IHRydWU7IC8vIE9y
aWdpbiBjaGFuZ2VkLCBzbyBpdCdzIGZpbmUgdG8gZXhpdCBhZ2Fpbi4KICAgICBwcm9jZXNzU2V0
TG9jYWxRdWV1ZSgpOwogCkBAIC0yMTM2LDcgKzIxMzYsNyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2Fs
bE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAKICAg
ICBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAgCi0gICAgbV9jdXJyZW50SW5kZXggPSBvbGRP
ZmZzZXQ7CisgICAgbV9jdXJyZW50SW5kZXggPSBvbGRJbmRleDsKICAgICBtX2N1cnJlbnRCbG9j
ayA9IGNvbnRpbnVhdGlvbkJsb2NrOwogICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICAKQEAgLTQ2
OTMsMTQgKzQ2OTMsMTQgQEAgc3RhdGljIHVpbnQ2NF90IG1ha2VEeW5hbWljVmFyT3BJbmZvKHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIHVuc2lnbmVkIGdldFB1dEkKIC8vIERvZXNuJ3QgYWxs
b3cgdXNpbmcgYGNvbnRpbnVlYC4KICNkZWZpbmUgTkVYVF9PUENPREUobmFtZSkgXAogICAgIGlm
ICh0cnVlKSB7IFwKLSAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gY3VycmVudEluc3RydWN0aW9u
LT5zaXplKCk7IFwKKyAgICAgICAgbV9jdXJyZW50SW5kZXggPSBCeXRlY29kZUluZGV4KG1fY3Vy
cmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyBcCiAgICAg
ICAgIGdvdG8gV1RGX0NPTkNBVChORVhUX09QQ09ERV8sIF9fTElORV9fKTsgLyogTmVlZCBhIHVu
aXF1ZSBsYWJlbDogdXNhYmxlIG1vcmUgdGhhbiBvbmNlIHBlciBmdW5jdGlvbi4gKi8gXAogICAg
IH0gZWxzZSBcCiAgICAgICAgIFdURl9DT05DQVQoTkVYVF9PUENPREVfLCBfX0xJTkVfXyk6IFwK
ICAgICBjb250aW51ZQogCiAjZGVmaW5lIExBU1RfT1BDT0RFX0xJTktFRChuYW1lKSBkbyB7IFwK
LSAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7IFwK
KyAgICAgICAgbV9jdXJyZW50SW5kZXggPSBCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9m
ZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyBcCiAgICAgICAgIG1fZXhpdE9L
ID0gZmFsc2U7IFwKICAgICAgICAgcmV0dXJuOyBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCkBAIC00
NzI0LDcgKzQ3MjQsNyBAQCBzdGF0aWMgdWludDY0X3QgbWFrZUR5bmFtaWNWYXJPcEluZm8odW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgdW5zaWduZWQgZ2V0UHV0SQogdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIHsKICAgICBhdXRvJiBpbnN0cnVjdGlv
bnMgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Ci0gICAg
dW5zaWduZWQgYmxvY2tCZWdpbiA9IG1fY3VycmVudEluZGV4OworICAgIEJ5dGVjb2RlSW5kZXgg
YmxvY2tCZWdpbiA9IG1fY3VycmVudEluZGV4OwogCiAgICAgLy8gSWYgd2UgYXJlIHRoZSBmaXJz
dCBiYXNpYyBibG9jaywgaW50cm9kdWNlIG1hcmtlcnMgZm9yIGFyZ3VtZW50cy4gVGhpcyBhbGxv
d3MKICAgICAvLyB1cyB0byB0cmFjayBpZiBhIHVzZSBvZiBhbiBhcmd1bWVudCBtYXkgdXNlIHRo
ZSBhY3R1YWwgYXJndW1lbnQgcGFzc2VkLCBhcwpAQCAtNDc2OCw3ICs0NzY4LDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgcHJvY2Vz
c1NldExvY2FsUXVldWUoKTsKICAgICAgICAgCiAgICAgICAgIC8vIERvbid0IGV4dGVuZCBvdmVy
IGp1bXAgZGVzdGluYXRpb25zLgotICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPT0gbGltaXQp
IHsKKyAgICAgICAgaWYgKG1fY3VycmVudEluZGV4Lm9mZnNldCgpID09IGxpbWl0KSB7CiAgICAg
ICAgICAgICAvLyBPcmRpbmFyaWx5IHdlIHdhbnQgdG8gcGxhbnQgYSBqdW1wLiBCdXQgcmVmdXNl
IHRvIGRvIHRoaXMgaWYgdGhlIGJsb2NrIGlzCiAgICAgICAgICAgICAvLyBlbXB0eS4gVGhpcyBp
cyBhIHNwZWNpYWwgY2FzZSBmb3IgaW5saW5pbmcsIHdoaWNoIG1pZ2h0IG90aGVyd2lzZSBjcmVh
dGUKICAgICAgICAgICAgIC8vIHNvbWUgZW1wdHkgYmxvY2tzIGluIHNvbWUgY2FzZXMuIFdoZW4g
cGFyc2VCbG9jaygpIHJldHVybnMgd2l0aCBhbiBlbXB0eQpAQCAtNDc3OCw3ICs0Nzc4LDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAg
ICAgIC8vIHRvIGJlIHRydWUuCiAKICAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2stPmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICBhZGRKdW1wVG8obV9jdXJyZW50SW5kZXgpOworICAg
ICAgICAgICAgICAgIGFkZEp1bXBUbyhtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC01ODAzLDcgKzU4MDMsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAg
ICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKSk7CiAgICAgICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEptcD4oKTsKICAgICAgICAgICAg
IGludCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJl
bGF0aXZlT2Zmc2V0KSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1
cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0KSk7CiAgICAgICAgICAgICBpZiAo
cmVsYXRpdmVPZmZzZXQgPD0gMCkKICAgICAgICAgICAgICAgICBmbHVzaEZvclRlcm1pbmFsKCk7
CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbXApOwpAQCAtNTgxMyw3ICs1ODEzLDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CiAg
ICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBnZXQoYnl0ZWNv
ZGUubV9jb25kaXRpb24pOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhi
cmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4
ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAg
IGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZz
ZXQoKSArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09E
RShvcF9qdHJ1ZSk7CiAgICAgICAgIH0KIApAQCAtNTgyMSw3ICs1ODIxLDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAgICAgICAg
ICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gZ2V0KGJ5dGVjb2RlLm1fY29u
ZGl0aW9uKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0
YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJ
bmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dy
YXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxh
dGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfamZh
bHNlKTsKICAgICAgICAgfQogCkBAIC01ODMxLDcgKzU4MzEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogdmFsdWUg
PSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBOb2RlKiBudWxsQ29uc3RhbnQg
PSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TnVsbCkpOwogICAgICAg
ICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBudWxs
Q29uc3RhbnQpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hE
YXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3Vy
cmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRv
R3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSAr
IHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVj
dGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9q
ZXFfbnVsbCk7CiAgICAgICAgIH0KIApAQCAtNTg0MSw3ICs1ODQxLDcgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIHZh
bHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgTm9kZSogbnVsbENvbnN0
YW50ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE51bGwpKTsKICAg
ICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwg
bnVsbENvbnN0YW50KTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJh
bmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1
cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBh
ZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0
KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkg
KyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUo
b3Bfam5lcV9udWxsKTsKICAgICAgICAgfQogCkBAIC01ODUwLDcgKzU4NTAsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgdW5z
aWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAg
ICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKElzVW5kZWZpbmVkT3JOdWxsLCB2
YWx1ZSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEo
bV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFw
aChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVs
YXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9u
LT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2p1bmRl
ZmluZWRfb3JfbnVsbCk7CiAgICAgICAgIH0KIApAQCAtNTg1OSw3ICs1ODU5LDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIHVu
c2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAg
ICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChJc1VuZGVmaW5lZE9yTnVsbCwg
dmFsdWUpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRh
KG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudElu
ZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1
cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0
aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbnVu
ZGVmaW5lZF9vcl9udWxsKTsKICAgICAgICAgfQogCkBAIC01ODY5LDcgKzU4NjksNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAg
Tm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9
IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRU
b0dyYXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJy
YW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwg
bV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24p
OworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3Vy
cmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4Lm9mZnNl
dCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAg
ICAgIExBU1RfT1BDT0RFKG9wX2psZXNzKTsKICAgICAgICAgfQogCkBAIC01ODc5LDcgKzU4Nzks
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAg
ICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5v
ZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRp
b24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzRXEsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0
aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSks
IGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5j
aERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50
SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24p
OwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfamxlc3NlcSk7CiAgICAgICAgIH0KIApAQCAt
NTg4OSw3ICs1ODg5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CiAg
ICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAg
Tm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlciwgb3AxLCBvcDIpOwot
ICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVu
dEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0
aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNo
LCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zm
c2V0LCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qZ3JlYXRlcik7CiAg
ICAgICAgIH0KIApAQCAtNTg5OSw3ICs1ODk5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRl
Y29kZS5tX2xocyk7CiAgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMp
OwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRl
ckVxLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJy
YW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXgg
KyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOworICAgICAgICAgICAg
YWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNl
dCgpICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudElu
c3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RF
KG9wX2pncmVhdGVyZXEpOwogICAgICAgICB9CiAKQEAgLTU5MDksNyArNTkwOSw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBO
b2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOwogICAgICAgICAgICAgTm9kZSogb3AyID0g
Z2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRv
R3JhcGgoQ29tcGFyZUVxLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5j
aCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9j
dXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwor
ICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVu
dEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4Lm9mZnNldCgp
ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAg
IExBU1RfT1BDT0RFKG9wX2plcSk7CiAgICAgICAgIH0KIApAQCAtNTkxOSw3ICs1OTE5LDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAg
ICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CiAgICAgICAgICAgICBOb2RlKiBv
cDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0g
YWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRv
R3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZl
T2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNv
bmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERh
dGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5k
ZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwog
ICAgICAgICAgICAgTEFTVF9PUENPREUob3BfanN0cmljdGVxKTsKICAgICAgICAgfQogCkBAIC01
OTI5LDcgKzU5MjksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
IGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAg
ICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBO
b2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMik7Ci0gICAg
ICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5k
ZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2
ZU9mZnNldCkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9w
SW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0
aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQpKSwg
Y29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pubGVzcyk7CiAgICAgICAg
IH0KIApAQCAtNTkzOSw3ICs1OTM5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5t
X2xocyk7CiAgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAg
ICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzc0VxLCBvcDEs
IG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEo
bV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5k
ZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFw
aChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3Vy
cmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRp
dmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pubGVz
c2VxKTsKICAgICAgICAgfQogCkBAIC01OTQ5LDcgKzU5NDksNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0g
Z2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29k
ZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBh
cmVHcmVhdGVyLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJ
bmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOworICAgICAg
ICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4
Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4Lm9m
ZnNldCgpICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1Rf
T1BDT0RFKG9wX2puZ3JlYXRlcik7CiAgICAgICAgIH0KIApAQCAtNTk1OSw3ICs1OTU5LDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAg
ICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CiAgICAgICAgICAgICBOb2RlKiBv
cDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0g
YWRkVG9HcmFwaChDb21wYXJlR3JlYXRlckVxLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRU
b0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBj
b25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hE
YXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCks
IG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsK
ICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2puZ3JlYXRlcmVxKTsKICAgICAgICAgfQogCkBA
IC01OTY5LDcgKzU5NjksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsK
ICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAg
ICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcSwgb3AxLCBvcDIpOwotICAg
ICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudElu
ZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4ICsgcmVsYXRp
dmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBP
cEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVj
dGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0KSks
IGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmVxKTsKICAgICAgICAg
fQogCkBAIC01OTc5LDcgKzU5NzksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1f
bGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAg
ICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVTdHJpY3RFcSwgb3Ax
LCBvcDIpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRh
KG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudElu
ZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1
cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0
aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbnN0
cmljdGVxKTsKICAgICAgICAgfQogCkBAIC01OTg5LDcgKzU5ODksNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3Ax
ID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRl
Y29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENv
bXBhcmVCZWxvdywgb3AxLCBvcDIpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9w
SW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVu
dEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKKyAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRl
eC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1
cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9qYmVsb3cpOwogICAgICAgICB9CiAKQEAgLTU5OTksNyArNTk5OSw3IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAg
ICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOwogICAgICAgICAgICAgTm9kZSogb3Ay
ID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFk
ZFRvR3JhcGgoQ29tcGFyZUJlbG93RXEsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zm
c2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRp
dGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEo
bV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXgu
b2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwogICAg
ICAgICAgICAgTEFTVF9PUENPREUob3BfamJlbG93ZXEpOwogICAgICAgICB9CiAKQEAgLTYwMDgs
MTIgKzYwMDgsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBs
aW1pdCkKICAgICAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N3aXRjaERh
dGEuYWRkKCk7CiAgICAgICAgICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hJbW07CiAgICAgICAgICAg
ICBkYXRhLnN3aXRjaFRhYmxlSW5kZXggPSBtX2lubGluZVN0YWNrVG9wLT5tX3N3aXRjaFJlbWFw
W2J5dGVjb2RlLm1fdGFibGVJbmRleF07Ci0gICAgICAgICAgICBkYXRhLmZhbGxUaHJvdWdoLnNl
dEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXggKyBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fZGVm
YXVsdE9mZnNldCkpOworICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5zZXRCeXRlY29kZUlu
ZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsganVtcFRhcmdldChieXRlY29kZS5tX2RlZmF1
bHRPZmZzZXQpKTsKICAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVC
bG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUuYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgICAgIGlmICghdGFibGUuYnJhbmNoT2Zmc2V0c1tpXSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0
ID0gbV9jdXJyZW50SW5kZXggKyB0YWJsZS5icmFuY2hPZmZzZXRzW2ldOworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgdGFibGUuYnJh
bmNoT2Zmc2V0c1tpXTsKICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRo
cm91Z2guYnl0ZWNvZGVJbmRleCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJ
bmRleChtX2dyYXBoLmZyZWV6ZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0YWJsZS5t
aW4gKyBpKSkpLCB0YXJnZXQpKTsKQEAgLTYwMjgsMTIgKzYwMjgsMTIgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIFN3aXRjaERh
dGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N3aXRjaERhdGEuYWRkKCk7CiAgICAgICAgICAgICBkYXRh
LmtpbmQgPSBTd2l0Y2hDaGFyOwogICAgICAgICAgICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9zd2l0Y2hSZW1hcFtieXRlY29kZS5tX3RhYmxlSW5kZXhdOwot
ICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5zZXRCeXRlY29kZUluZGV4KG1fY3VycmVudElu
ZGV4ICsganVtcFRhcmdldChieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpKTsKKyAgICAgICAgICAg
IGRhdGEuZmFsbFRocm91Z2guc2V0Qnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQo
KSArIGp1bXBUYXJnZXQoYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KSk7CiAgICAgICAgICAgICBT
aW1wbGVKdW1wVGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRh
LnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRhYmxlLmJyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAo
IXRhYmxlLmJyYW5jaE9mZnNldHNbaV0pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4ICsgdGFibGUu
YnJhbmNoT2Zmc2V0c1tpXTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBtX2N1
cnJlbnRJbmRleC5vZmZzZXQoKSArIHRhYmxlLmJyYW5jaE9mZnNldHNbaV07CiAgICAgICAgICAg
ICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoLmJ5dGVjb2RlSW5kZXgoKSkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5h
cHBlbmQoCkBAIC02MDQ5LDEyICs2MDQ5LDEyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKm1f
Z3JhcGgubV9zd2l0Y2hEYXRhLmFkZCgpOwogICAgICAgICAgICAgZGF0YS5raW5kID0gU3dpdGNo
U3RyaW5nOwogICAgICAgICAgICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0gYnl0ZWNvZGUubV90
YWJsZUluZGV4OwotICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5zZXRCeXRlY29kZUluZGV4
KG1fY3VycmVudEluZGV4ICsganVtcFRhcmdldChieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpKTsK
KyAgICAgICAgICAgIGRhdGEuZmFsbFRocm91Z2guc2V0Qnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJ
bmRleC5vZmZzZXQoKSArIGp1bXBUYXJnZXQoYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KSk7CiAg
ICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3
aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICAgICAgU3RyaW5n
SnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgaXRlcjsKICAgICAgICAgICAg
IFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxl
Lm9mZnNldFRhYmxlLmVuZCgpOwogICAgICAgICAgICAgZm9yIChpdGVyID0gdGFibGUub2Zmc2V0
VGFibGUuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4ICsgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4Lm9mZnNl
dCgpICsgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0OwogICAgICAgICAgICAgICAgIGlmICh0YXJn
ZXQgPT0gZGF0YS5mYWxsVGhyb3VnaC5ieXRlY29kZUluZGV4KCkpCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKApAQCAtNjA3
OSw3ICs2MDc5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBs
aW1pdCkKICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLmlz
VmFsaWQoKSkKICAgICAgICAgICAgICAgICBzZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+bV9y
ZXR1cm5WYWx1ZSwgZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpLCBJbW1lZGlhdGVTZXRXaXRoRmx1c2gp
OwogCi0gICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fY29udGludWF0aW9uQmxv
Y2sgJiYgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSAhPSBtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSB7CisgICAg
ICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fY29udGludWF0aW9uQmxvY2sgJiYgbV9j
dXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSAhPSBtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBlYXJseSByZXR1cm4gZnJvbSBhbiBpbmxpbmVkIGZ1
bmN0aW9uIGFuZCB3ZSBkbyBub3QgaGF2ZSBhIGNvbnRpbnVhdGlvbiBibG9jaywgc28gd2UgbXVz
dCBhbGxvY2F0ZSBvbmUuCiAgICAgICAgICAgICAgICAgLy8gSXQgaXMgdW50YXJnZXRhYmxlLCBi
ZWNhdXNlIHdlIGRvIG5vdCBrbm93IHRoZSBhcHByb3ByaWF0ZSBpbmRleC4KICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGlzIGJsb2NrIHR1cm5zIG91dCB0byBiZSBhIGp1bXAgdGFyZ2V0LCBwYXJz
ZUNvZGVCbG9jayB3aWxsIGZpeCBpdHMgYnl0ZWNvZGVJbmRleCBiZWZvcmUgcHV0dGluZyBpdCBp
biBtX2Jsb2NrTGlua2luZ1RhcmdldHMKQEAgLTYyMDcsNyArNjIwNyw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgQXJn
dW1lbnRzVmVjdG9yJiBlbnRyeXBvaW50QXJndW1lbnRzID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKICAgICAgICAgICAgICAgICBlbnRyeXBvaW50QXJndW1lbnRzLnJlc2l6ZShtX251bUFy
Z3VtZW50cyk7CiAKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBleGl0Qnl0ZWNvZGVJbmRleCA9
IG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAgICAg
ICAgICAgQnl0ZWNvZGVJbmRleCBleGl0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9j
dXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CiAKICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBhcmd1
bWVudFByZWRpY3Rpb25zLnNpemUoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CkBAIC02MzE2LDcgKzYzMTYsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAg
ICAgICAgTm9kZSogY2hpbGQgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBp
ZiAoYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2hhc0p1bXBlZCkgewogICAgICAgICAg
ICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxUHRyLCBPcEluZm8o
ZnJvemVuUG9pbnRlciksIGNoaWxkKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5j
aCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24t
PnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwor
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1
cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJl
bnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAg
ICAgICAgICAgTEFTVF9PUENPREUob3Bfam5lcV9wdHIpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0NlbGwsIE9wSW5mbyhmcm96ZW5Qb2ludGVyKSwgY2hpbGQp
OwpAQCAtNzEzNSwyMSArNzEzNSwyMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2so
QmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVAogICAgIAog
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgSnVtcDoKLSAgICAgICAgbm9kZS0+
dGFyZ2V0QmxvY2soKSA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBu
b2RlLT50YXJnZXRCeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSk7CisgICAgICAgIG5vZGUt
PnRhcmdldEJsb2NrKCkgPSBibG9ja0ZvckJ5dGVjb2RlSW5kZXgocG9zc2libGVUYXJnZXRzLCBC
eXRlY29kZUluZGV4KG5vZGUtPnRhcmdldEJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEJyYW5jaDogewogICAgICAgICBC
cmFuY2hEYXRhKiBkYXRhID0gbm9kZS0+YnJhbmNoRGF0YSgpOwotICAgICAgICBkYXRhLT50YWtl
bi5ibG9jayA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBkYXRhLT50
YWtlbkJ5dGVjb2RlSW5kZXgoKSk7Ci0gICAgICAgIGRhdGEtPm5vdFRha2VuLmJsb2NrID0gYmxv
Y2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIGRhdGEtPm5vdFRha2VuQnl0ZWNv
ZGVJbmRleCgpKTsKKyAgICAgICAgZGF0YS0+dGFrZW4uYmxvY2sgPSBibG9ja0ZvckJ5dGVjb2Rl
SW5kZXgocG9zc2libGVUYXJnZXRzLCBCeXRlY29kZUluZGV4KGRhdGEtPnRha2VuQnl0ZWNvZGVJ
bmRleCgpKSk7CisgICAgICAgIGRhdGEtPm5vdFRha2VuLmJsb2NrID0gYmxvY2tGb3JCeXRlY29k
ZUluZGV4KHBvc3NpYmxlVGFyZ2V0cywgQnl0ZWNvZGVJbmRleChkYXRhLT5ub3RUYWtlbkJ5dGVj
b2RlSW5kZXgoKSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
U3dpdGNoOiB7CiAgICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSBub2RlLT5zd2l0Y2hEYXRhKCk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPnN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6
ZSgpOyBpLS07KQotICAgICAgICAgICAgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2NrID0gYmxv
Y2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIGRhdGEtPmNhc2VzW2ldLnRhcmdl
dC5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayA9IGJs
b2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBkYXRhLT5mYWxsVGhyb3VnaC5i
eXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2Nr
ID0gYmxvY2tGb3JCeXRlY29kZUluZGV4KHBvc3NpYmxlVGFyZ2V0cywgQnl0ZWNvZGVJbmRleChk
YXRhLT5jYXNlc1tpXS50YXJnZXQuYnl0ZWNvZGVJbmRleCgpKSk7CisgICAgICAgIGRhdGEtPmZh
bGxUaHJvdWdoLmJsb2NrID0gYmxvY2tGb3JCeXRlY29kZUluZGV4KHBvc3NpYmxlVGFyZ2V0cywg
Qnl0ZWNvZGVJbmRleChkYXRhLT5mYWxsVGhyb3VnaC5ieXRlY29kZUluZGV4KCkpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTczMjMsNyArNzMyMyw3IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAgICBmb3IgKHVuc2lnbmVkIGp1bXBUYXJn
ZXRJbmRleCA9IDA7IGp1bXBUYXJnZXRJbmRleCA8PSBqdW1wVGFyZ2V0cy5zaXplKCk7ICsranVt
cFRhcmdldEluZGV4KSB7CiAgICAgICAgIC8vIFRoZSBtYXhpbXVtIGJ5dGVjb2RlIG9mZnNldCB0
byBnbyBpbnRvIHRoZSBjdXJyZW50IGJhc2ljYmxvY2sgaXMgZWl0aGVyIHRoZSBuZXh0IGp1bXAg
dGFyZ2V0LCBvciB0aGUgZW5kIG9mIHRoZSBpbnN0cnVjdGlvbnMuCiAgICAgICAgIHVuc2lnbmVk
IGxpbWl0ID0ganVtcFRhcmdldEluZGV4IDwganVtcFRhcmdldHMuc2l6ZSgpID8ganVtcFRhcmdl
dHNbanVtcFRhcmdldEluZGV4XSA6IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwot
ICAgICAgICBBU1NFUlQobV9jdXJyZW50SW5kZXggPCBsaW1pdCk7CisgICAgICAgIEFTU0VSVCht
X2N1cnJlbnRJbmRleC5vZmZzZXQoKSA8IGxpbWl0KTsKIAogICAgICAgICAvLyBMb29wIHVudGls
IHdlIHJlYWNoIHRoZSBjdXJyZW50IGxpbWl0IChpLmUuIG5leHQganVtcCB0YXJnZXQpLgogICAg
ICAgICBkbyB7CkBAIC03MzQ2LDIzICs3MzQ2LDIzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQ29kZUJsb2NrKCkKICAgICAgICAgICAgIHBhcnNlQmxvY2sobGltaXQpOwogCiAgICAgICAg
ICAgICAvLyBXZSBzaG91bGQgbm90IGhhdmUgZ29uZSBiZXlvbmQgdGhlIGxpbWl0LgotICAgICAg
ICAgICAgQVNTRVJUKG1fY3VycmVudEluZGV4IDw9IGxpbWl0KTsKKyAgICAgICAgICAgIEFTU0VS
VChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSA8PSBsaW1pdCk7CiAKICAgICAgICAgICAgIGlmICht
X2N1cnJlbnRCbG9jay0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYXNl
IG9ubHkgaGFwcGVucyBpZiB0aGUgbGFzdCBpbnN0cnVjdGlvbiB3YXMgYW4gaW5saW5lZCBjYWxs
IHdpdGggZWFybHkgcmV0dXJucwogICAgICAgICAgICAgICAgIC8vIG9yIHBvbHltb3JwaGljIChj
cmVhdGluZyBhbiBlbXB0eSBjb250aW51YXRpb24gYmxvY2spLAogICAgICAgICAgICAgICAgIC8v
IGFuZCB0aGVuIHdlIGhpdCB0aGUgbGltaXQgYmVmb3JlIHB1dHRpbmcgYW55dGhpbmcgaW4gdGhl
IGNvbnRpbnVhdGlvbiBibG9jay4KLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50SW5k
ZXggPT0gbGltaXQpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleC5vZmZz
ZXQoKSA9PSBsaW1pdCk7CiAgICAgICAgICAgICAgICAgbWFrZUJsb2NrVGFyZ2V0YWJsZShtX2N1
cnJlbnRCbG9jaywgbV9jdXJyZW50SW5kZXgpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2stPnRlcm1pbmFsKCkgfHwgKG1fY3VycmVu
dEluZGV4ID09IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpICYmIGlubGluZUNhbGxG
cmFtZSgpKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEJsb2NrLT50ZXJtaW5h
bCgpIHx8IChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSA9PSBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLnNpemUoKSAmJiBpbmxpbmVDYWxsRnJhbWUoKSkpOwogICAgICAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAobV9j
dXJyZW50SW5kZXggPCBsaW1pdCk7CisgICAgICAgIH0gd2hpbGUgKG1fY3VycmVudEluZGV4Lm9m
ZnNldCgpIDwgbGltaXQpOwogICAgIH0KIAogICAgIC8vIFNob3VsZCBoYXZlIHJlYWNoZWQgdGhl
IGVuZCBvZiB0aGUgaW5zdHJ1Y3Rpb25zLgotICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA9PSBj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgQVNTRVJUKG1fY3VycmVudElu
ZGV4Lm9mZnNldCgpID09IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKICAgICAK
ICAgICBWRVJCT1NFX0xPRygiRG9uZSBwYXJzaW5nICIsICpjb2RlQmxvY2ssICIgKGZlbGwgb2Zm
IGVuZClcbiIpOwogfQpAQCAtNzUyNSw3ICs3NTI1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlQ3JlYXRlSW50ZXJuYWxGaWVsZE9iamVjdChjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
bywKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKIHsKICAgICAvLyBTZXQgZHVyaW5nIGNv
bnN0cnVjdGlvbi4KLSAgICBBU1NFUlQoIW1fY3VycmVudEluZGV4KTsKKyAgICBBU1NFUlQoIW1f
Y3VycmVudEluZGV4Lm9mZnNldCgpKTsKICAgICAKICAgICBWRVJCT1NFX0xPRygiUGFyc2luZyAi
LCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uRGF0YS5jcHAKaW5kZXggN2M4MDc1MGFlZGRkN2MwMDM4YjlhNTliMzk1M2Q2MGZj
YjBhYTRmYS4uNzk4N2I4NzBmZDUwOWY5MzAwMDdlMzU2YWMwNTVlYTY2YmZlN2FkYiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCkBAIC01Niw3ICs1Niw3
IEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkQ29kZU9yaWdpbihDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4pCiAgICAgICAgIGNvZGVPcmlnaW5zLmFwcGVuZChjb2RlT3JpZ2luKTsKICAgICB1
bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7CiAgICAgQVNTRVJUKGNvZGVP
cmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChp
bmRleCk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChpbmRleCkpOwog
fQogCiBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQpAQCAtNjQsMTMgKzY0LDEzIEBAIENhbGxTaXRlSW5kZXggQ29t
bW9uRGF0YTo6YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAg
ICAgY29kZU9yaWdpbnMuYXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0g
Y29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09
IGNvZGVPcmlnaW4pOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KGluZGV4KTsKKyAgICByZXR1
cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CiB9CiAKIENhbGxTaXRlSW5k
ZXggQ29tbW9uRGF0YTo6bGFzdENhbGxTaXRlKCkgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VS
VChjb2RlT3JpZ2lucy5zaXplKCkpOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KGNvZGVPcmln
aW5zLnNpemUoKSAtIDEpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
Y29kZU9yaWdpbnMuc2l6ZSgpIC0gMSkpOwogfQogCiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBD
b21tb25EYXRhOjphZGREaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmln
aW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCmluZGV4IDRiMjE2
N2ZkODRkNmY2ZmQ5MTlmOTcyYTkyOTJjMWYwYzFlYTgzMmIuLjJlZDgzMGZkYzNhNDlmMDQ5MmQ4
ZjgwNjVjMjUxMjgwYWU1MzQ4ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5oCkBAIC05NCwxNCArOTQsMTQgQEAgcHVibGljOgogICAgIHZvaWQgaW5zdGFsbFZN
VHJhcEJyZWFrcG9pbnRzKENvZGVCbG9jayogb3duZXIpOwogICAgIGJvb2wgaXNWTVRyYXBCcmVh
a3BvaW50KHZvaWQqIGFkZHJlc3MpOwogCi0gICAgQ2F0Y2hFbnRyeXBvaW50RGF0YSogY2F0Y2hP
U1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAg
Q2F0Y2hFbnRyeXBvaW50RGF0YSogY2F0Y2hPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0cnlCaW5h
cnlTZWFyY2g8Q2F0Y2hFbnRyeXBvaW50RGF0YSwgdW5zaWduZWQ+KAorICAgICAgICByZXR1cm4g
dHJ5QmluYXJ5U2VhcmNoPENhdGNoRW50cnlwb2ludERhdGEsIEJ5dGVjb2RlSW5kZXg+KAogICAg
ICAgICAgICAgY2F0Y2hFbnRyeXBvaW50cywgY2F0Y2hFbnRyeXBvaW50cy5zaXplKCksIGJ5dGVj
b2RlSW5kZXgsCiAgICAgICAgICAgICBbXSAoY29uc3QgQ2F0Y2hFbnRyeXBvaW50RGF0YSogaXRl
bSkgeyByZXR1cm4gaXRlbS0+Ynl0ZWNvZGVJbmRleDsgfSk7CiAgICAgfQogCi0gICAgdm9pZCBh
cHBlbmRDYXRjaEVudHJ5cG9pbnQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1hY2hpbmVDb2RlLCBWZWN0b3I8Rmx1
c2hGb3JtYXQ+JiYgYXJndW1lbnRGb3JtYXRzKQorICAgIHZvaWQgYXBwZW5kQ2F0Y2hFbnRyeXBv
aW50KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1hY2hpbmVDb2RlLCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiYg
YXJndW1lbnRGb3JtYXRzKQogICAgIHsKICAgICAgICAgY2F0Y2hFbnRyeXBvaW50cy5hcHBlbmQo
Q2F0Y2hFbnRyeXBvaW50RGF0YSB7IG1hY2hpbmVDb2RlLCAgV1RGTW92ZShhcmd1bWVudEZvcm1h
dHMpLCBieXRlY29kZUluZGV4IH0pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAppbmRleCBkYjY5ZjFiZGQ2M2QxMTVhZmI1ZTVkMGZhZGI4NDA3MTEzMmE0Yzlk
Li4xN2IzNzA3NThjMDUzODcwM2I3ZDc5ZWU2MjI3MmQ0Nzk5OThiNTM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBGdW5j
dGlvbldoaXRlbGlzdCYgZW5zdXJlR2xvYmFsREZHV2hpdGVsaXN0KCkKIAogc3RhdGljIENvbXBp
bGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2Rl
LAotICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8T3B0
aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIEJ5dGVjb2RlSW5kZXggb3Ny
RW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11
c3RIYW5kbGVWYWx1ZXMsCiAgICAgUmVmPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4mJiBj
YWxsYmFjaykKIHsKICAgICBpZiAoIU9wdGlvbnM6OmJ5dGVjb2RlUmFuZ2VUb0RGR0NvbXBpbGUo
KS5pc0luUmFuZ2UoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpCkBAIC0xMTYsNyArMTE2
LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogfQogI2Vsc2UgLy8g
RU5BQkxFKERGR19KSVQpCiBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0g
ICAgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVk
LCBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mLAorICAgIFZNJiwgQ29kZUJsb2Nr
KiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2RlLCBCeXRlY29kZUluZGV4LCBjb25zdCBPcGVy
YW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mLAogICAgIFJlZjxEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s+JiYpCiB7CiAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwpAQCAtMTI1LDcgKzEy
NSw3IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKIAogQ29tcGlsYXRp
b25SZXN1bHQgY29tcGlsZSgKICAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2Rl
QmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9kZSwKLSAgICB1
bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpT
VmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcywKKyAgICBCeXRlY29kZUluZGV4IG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxl
VmFsdWVzLAogICAgIFJlZjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2sp
CiB7CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gY29tcGlsZUltcGwoCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAppbmRleCAwMWY3NGVlY2YwMzZjZDlmOWMwNzc4Yzc2
Mzg5NzIwYzAzOTEzYzdlLi5jN2JhN2Y2YWM3N2VkYjZkMzhkYTFiY2JmYTRmZmZjMWQ3NDg1OWRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKQEAgLTQyLDcgKzQyLDcgQEAg
SlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgZ2V0TnVtQ29tcGlsYXRpb25zKCk7CiAvLyBjb21w
aWxlLiBFdmVuIGlmIHdlIGRvIGEgc3luY2hyb25vdXMgY29tcGlsZSwgd2UgY2FsbCB0aGUgY2Fs
bGJhY2sgd2l0aCB0aGUgcmVzdWx0LgogQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZSgKICAgICBW
TSYsIENvZGVCbG9jayosIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0
aW9uTW9kZSwKLSAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJh
bmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcywKKyAgICBCeXRlY29kZUlu
ZGV4IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1
ZT4+JiBtdXN0SGFuZGxlVmFsdWVzLAogICAgIFJlZjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s+JiYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCmluZGV4IDlkNWI3ZDkzMzdjMjFkMzgyMWQ1YzlkNGM1ZTEyMWMyMTAy
ZWJlMTguLmFkYmY1MDI1Y2YzZDQ0MWJlMThiNzJiMDlkZGY4OGY4NDVkYjkxMWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC00MDQsNyArNDA0LDcgQEAgdm9pZCBH
cmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUq
IG5vZGUsIER1bXBDb250ZXgKICAgICBpZiAoY2xvYmJlcnNFeGl0U3RhdGUoKnRoaXMsIG5vZGUp
KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJDbG9iYmVyc0V4aXQiKTsKICAgICBpZiAobm9k
ZS0+b3JpZ2luLmlzU2V0KCkpIHsKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYmMjIiwgbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgIG91dC5wcmludChj
b21tYSwgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgICAgIGlm
IChub2RlLT5vcmlnaW4uc2VtYW50aWMgIT0gbm9kZS0+b3JpZ2luLmZvckV4aXQgJiYgbm9kZS0+
b3JpZ2luLmZvckV4aXQuaXNTZXQoKSkKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImV4
aXQ6ICIsIG5vZGUtPm9yaWdpbi5mb3JFeGl0KTsKICAgICB9CkBAIC0xNjQ5LDEwICsxNjQ5LDEw
IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGVGb3IoTm9kZSogY3VycmVuCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGlmIChub2RlLT5oYXNIZWFwUHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVybiAm
cHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICZwcm9m
aWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5ieXRlY29kZUluZGV4KCkpOwogCiAgICAgICAgICAgICBpZiAocHJvZmlsZWRCbG9jay0+
aGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgICAgIGlmIChBcml0aFBy
b2ZpbGUqIHJlc3VsdCA9IHByb2ZpbGVkQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCkpKQorICAgICAgICAgICAg
ICAgIGlmIChBcml0aFByb2ZpbGUqIHJlc3VsdCA9IHByb2ZpbGVkQmxvY2stPmFyaXRoUHJvZmls
ZUZvckJ5dGVjb2RlSW5kZXgobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTE3NTAsMTIgKzE3NTAsMTIgQEAgYm9vbCBHcmFwaDo6d2lsbENhdGNoRXhjZXB0
aW9uSW5NYWNoaW5lRnJhbWUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDb2RlT3JpZ2luJgogICAg
IGlmICghbV9oYXNFeGNlcHRpb25IYW5kbGVycykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleFRvQ2hlY2sgPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXhUb0NoZWNrID0gY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KCk7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwogICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNh
bGxGcmFtZSk7Ci0gICAgICAgIGlmIChIYW5kbGVySW5mbyogaGFuZGxlciA9IGNvZGVCbG9jay0+
aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXhUb0NoZWNrKSkgewotICAgICAg
ICAgICAgb3BDYXRjaE9yaWdpbk91dCA9IENvZGVPcmlnaW4oaGFuZGxlci0+dGFyZ2V0LCBpbmxp
bmVDYWxsRnJhbWUpOworICAgICAgICBpZiAoSGFuZGxlckluZm8qIGhhbmRsZXIgPSBjb2RlQmxv
Y2stPmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXhUb0NoZWNrKSkgeworICAg
ICAgICAgICAgb3BDYXRjaE9yaWdpbk91dCA9IENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleChoYW5k
bGVyLT50YXJnZXQpLCBpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgY2F0Y2hIYW5kbGVy
T3V0ID0gaGFuZGxlcjsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggNGE3MDhhYWI5MzEzMzliNWVlNDdjMzM0
ZWI0MTJiOGIwOTg2NTMxMC4uNmM2NGQ0NzFkMzA1ZjgyYWZkYzUzOGQzN2I3YTA0NWNlMGFhMjQx
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAtMTA5NCw3ICsxMDk0LDcg
QEAgcHVibGljOgogCiAgICAgLy8gVGhpcyBtYXBzIGFuIGVudHJ5cG9pbnQgaW5kZXggdG8gYSBw
YXJ0aWN1bGFyIG9wX2NhdGNoIGJ5dGVjb2RlIG9mZnNldC4gQnkgY29udmVudGlvbiwKICAgICAv
LyBpdCdsbCBuZXZlciBoYXZlIHplcm8gYXMgYSBrZXkgYmVjYXVzZSB3ZSB1c2UgemVybyB0byBt
ZWFuIHRoZSBvcF9lbnRlciBlbnRyeXBvaW50LgotICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2ln
bmVkPiBtX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldDsKKyAgICBIYXNoTWFw
PHVuc2lnbmVkLCBCeXRlY29kZUluZGV4PiBtX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29k
ZUluZGV4OwogCiAgICAgSGFzaFNldDxTdHJpbmc+IG1fbG9jYWxTdHJpbmdzOwogICAgIEhhc2hN
YXA8Y29uc3QgU3RyaW5nSW1wbCosIFN0cmluZz4gbV9jb3BpZWRTdHJpbmdzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKaW5kZXggYzViY2Q0ZTNkM2QyYzVlMDM5MmI4
YzI4MjhiY2Q3Y2ExMzYzMzVlNC4uN2UyZjllYTI4NWQyN2Q0MGJkMjMyNTc2MTUzNGNiOTZhMTVk
MWE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCkBAIC0yMTQs
NyArMjE0LDcgQEAgdm9pZCBKSVRDb2RlOjpjbGVhck9TUkVudHJ5QmxvY2tBbmRSZXNldFRocmVz
aG9sZHMoQ29kZUJsb2NrICpkZmdDb2RlQmxvY2spCiB7IAogICAgIEFTU0VSVChtX29zckVudHJ5
QmxvY2spOwogCi0gICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZSA9IG1fb3NyRW50cnlCbG9j
ay0+aml0Q29kZSgpLT5mdGxGb3JPU1JFbnRyeSgpLT5ieXRlY29kZUluZGV4KCk7CisgICAgQnl0
ZWNvZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlID0gbV9vc3JFbnRyeUJsb2NrLT5qaXRDb2RlKCkt
PmZ0bEZvck9TUkVudHJ5KCktPmJ5dGVjb2RlSW5kZXgoKTsKICAgICBtX29zckVudHJ5QmxvY2su
Y2xlYXIoKTsKICAgICBvc3JFbnRyeVJldHJ5ID0gMDsKICAgICB0aWVyVXBFbnRyeVRyaWdnZXJz
LnNldChvc3JFbnRyeUJ5dGVjb2RlLCBKSVRDb2RlOjpUcmlnZ2VyUmVhc29uOjpEb250VHJpZ2dl
cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCmluZGV4IGJiOGY1MGFjYTY1
ODVjYzA1YzM2NmUzZmZlZWI4Y2YzNWEzMDlmZDIuLmEwMDAwMmI2ODIwYjQyMzlkNmYyZDNhYzIw
YzZlZDkwM2FhOWY3MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCkBA
IC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBDb21tb25EYXRhKiBkZmdDb21tb24oKSBvdmVy
cmlkZTsKICAgICBKSVRDb2RlKiBkZmcoKSBvdmVycmlkZTsKICAgICAKLSAgICBPU1JFbnRyeURh
dGEqIGFwcGVuZE9TUkVudHJ5RGF0YSh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlTG9jYXRp
b25MYWJlbDxPU1JFbnRyeVB0clRhZz4gbWFjaGluZUNvZGUpCisgICAgT1NSRW50cnlEYXRhKiBh
cHBlbmRPU1JFbnRyeURhdGEoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBDb2RlTG9jYXRp
b25MYWJlbDxPU1JFbnRyeVB0clRhZz4gbWFjaGluZUNvZGUpCiAgICAgewogICAgICAgICBERkc6
Ok9TUkVudHJ5RGF0YSBlbnRyeTsKICAgICAgICAgZW50cnkubV9ieXRlY29kZUluZGV4ID0gYnl0
ZWNvZGVJbmRleDsKQEAgLTYzLDkgKzYzLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJm9z
ckVudHJ5Lmxhc3QoKTsKICAgICB9CiAgICAgCi0gICAgT1NSRW50cnlEYXRhKiBvc3JFbnRyeURh
dGFGb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgT1NSRW50cnlE
YXRhKiBvc3JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8T1NSRW50cnlEYXRh
LCB1bnNpZ25lZD4oCisgICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8T1NSRW50cnlEYXRh
LCBCeXRlY29kZUluZGV4PigKICAgICAgICAgICAgIG9zckVudHJ5LCBvc3JFbnRyeS5zaXplKCks
IGJ5dGVjb2RlSW5kZXgsCiAgICAgICAgICAgICBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4
KTsKICAgICB9CkBAIC0xNTEsMTAgKzE1MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8KICAgICAvLyBU
aGUga2V5IG1heSBub3QgYWx3YXlzIGJlIGEgdGFyZ2V0IGZvciBPU1IgRW50cnkgYnV0IHRoZSBs
aXN0IGluIHRoZSB2YWx1ZSBpcyBndWFyYW50ZWVkCiAgICAgLy8gdG8gYmUgdXNhYmxlIGZvciBP
U1IgRW50cnkuCi0gICAgSGFzaE1hcDx1bnNpZ25lZCwgVmVjdG9yPHVuc2lnbmVkPj4gdGllclVw
SW5Mb29wSGllcmFyY2h5OworICAgIEhhc2hNYXA8Qnl0ZWNvZGVJbmRleCwgVmVjdG9yPEJ5dGVj
b2RlSW5kZXg+PiB0aWVyVXBJbkxvb3BIaWVyYXJjaHk7CiAKICAgICAvLyBNYXAgZWFjaCBieXRl
Y29kZSBvZiBDaGVja1RpZXJVcEFuZE9TUkVudGVyIHRvIGl0cyBzdHJlYW0gaW5kZXguCi0gICAg
SGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQsIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBieXRlY29kZUluZGV4VG9T
dHJlYW1JbmRleDsKKyAgICBIYXNoTWFwPEJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkPiBieXRlY29k
ZUluZGV4VG9TdHJlYW1JbmRleDsKIAogICAgIGVudW0gY2xhc3MgVHJpZ2dlclJlYXNvbiA6IHVp
bnQ4X3QgewogICAgICAgICBEb250VHJpZ2dlciwKQEAgLTE2NSw3ICsxNjUsNyBAQCBwdWJsaWM6
CiAgICAgLy8gTWFwIGVhY2ggYnl0ZWNvZGUgb2YgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlciB0byBp
dHMgdHJpZ2dlciBmb3JjaW5nIE9TUiBFbnRyeS4KICAgICAvLyBUaGlzIGNhbiBuZXZlciBiZSBt
b2RpZmllZCBhZnRlciBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBzaW5jZSB0aGUgYWRkcmVzc2Vz
IG9mIHRoZSB0cmlnZ2VycwogICAgIC8vIGFyZSB1c2VkIGJ5IHRoZSBKSVQuCi0gICAgSGFzaE1h
cDx1bnNpZ25lZCwgVHJpZ2dlclJlYXNvbj4gdGllclVwRW50cnlUcmlnZ2VyczsKKyAgICBIYXNo
TWFwPEJ5dGVjb2RlSW5kZXgsIFRyaWdnZXJSZWFzb24+IHRpZXJVcEVudHJ5VHJpZ2dlcnM7CiAK
ICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX29zckVudHJ5QmxvY2s7CiAgICAgdW5zaWdu
ZWQgb3NyRW50cnlSZXRyeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAKaW5kZXggMDEwNjNjZTZiYjQ3ODUxZWYxM2M5MmI2YTgwZTJkMjBhODgxMTE2Ny4u
OTI3NDBhNjUyNjlhMjQ0MWIyMGJkYzY4MmNiZTRlYTc2YmU3NTQ5OCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgSklU
Q29tcGlsZXI6OkpJVENvbXBpbGVyKEdyYXBoJiBkZmcpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVy
ID0gbWFrZVVuaXF1ZTxEaXNhc3NlbWJsZXI+KGRmZyk7CiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAg
ICAgbV9qaXRDb2RlLT50aWVyVXBJbkxvb3BIaWVyYXJjaHkgPSBXVEZNb3ZlKG1fZ3JhcGgubV9w
bGFuLnRpZXJVcEluTG9vcEhpZXJhcmNoeSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIHRpZXJVcEJ5
dGVjb2RlIDogbV9ncmFwaC5tX3BsYW4udGllclVwQW5kT1NSRW50ZXJCeXRlY29kZXMoKSkKKyAg
ICBmb3IgKEJ5dGVjb2RlSW5kZXggdGllclVwQnl0ZWNvZGUgOiBtX2dyYXBoLm1fcGxhbi50aWVy
VXBBbmRPU1JFbnRlckJ5dGVjb2RlcygpKQogICAgICAgICBtX2ppdENvZGUtPnRpZXJVcEVudHJ5
VHJpZ2dlcnMuYWRkKHRpZXJVcEJ5dGVjb2RlLCBKSVRDb2RlOjpUcmlnZ2VyUmVhc29uOjpEb250
VHJpZ2dlcik7CiAjZW5kaWYKIH0KQEAgLTM3NCw3ICszNzQsNyBAQCB2b2lkIEpJVENvbXBpbGVy
Ojpjb21waWxlKCkKICAgICAvLyB3ZSBuZWVkIHRvIGNhbGwgb3V0IHRvIGEgaGVscGVyIGZ1bmN0
aW9uIHRvIHRocm93IHRoZSBTdGFja092ZXJmbG93RXJyb3IuCiAgICAgc3RhY2tPdmVyZmxvdy5s
aW5rKHRoaXMpOwogCi0gICAgZW1pdFN0b3JlQ29kZU9yaWdpbihDb2RlT3JpZ2luKDApKTsKKyAg
ICBlbWl0U3RvcmVDb2RlT3JpZ2luKENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwogCiAg
ICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC00NTAsNyArNDUwLDcgQEAgdm9pZCBK
SVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKICAgICAvLyB3ZSBuZWVkIHRvIGNhbGwgb3V0
IHRvIGEgaGVscGVyIGZ1bmN0aW9uIHRvIHRocm93IHRoZSBTdGFja092ZXJmbG93RXJyb3IuCiAg
ICAgc3RhY2tPdmVyZmxvdy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFN0b3JlQ29kZU9yaWdpbihD
b2RlT3JpZ2luKDApKTsKKyAgICBlbWl0U3RvcmVDb2RlT3JpZ2luKENvZGVPcmlnaW4oQnl0ZWNv
ZGVJbmRleCgwKSkpOwogCiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQog
ICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC00NzEs
MTQgKzQ3MSwxNCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogCiAgICAg
ICAgIGxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICBi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywgdGhpcyk7Ci0g
ICAgICAgIGVtaXRTdG9yZUNvZGVPcmlnaW4oQ29kZU9yaWdpbigwKSk7CisgICAgICAgIGVtaXRT
dG9yZUNvZGVPcmlnaW4oQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CiAgICAgICAgIGlm
IChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgbV9zcGVjdWxhdGl2ZS0+Y2Fs
bE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29kZUJsb2NrLT5p
c0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9u
Q2FsbEFyaXR5Q2hlY2ssIEdQUkluZm86OnJlZ1QwLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpOwogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAg
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywgdGhpcyk7Ci0gICAgICAg
IGVtaXRTdG9yZUNvZGVPcmlnaW4oQ29kZU9yaWdpbigwKSk7CisgICAgICAgIGVtaXRTdG9yZUNv
ZGVPcmlnaW4oQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CiAgICAgICAgIG1vdmUoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGNh
bGxBcml0eUZpeHVwID0gbmVhckNhbGwoKTsKICAgICAgICAganVtcChmcm9tQXJpdHlDaGVjayk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKaW5kZXggMDhkZmI4
ZGMyYmU2Njc4MTFlZDY3Y2NiYzE5MDg2OGIwMmRkZmE5OS4uNmExMzlkMjg1YWEyZjU4NzhlOTM3
ZWVkNjRmYjk2ZmU0MTlkZmMyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaApAQCAtOTgsNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgLy8gTWV0aG9kcyB0byBz
ZXQgbGFiZWxzIGZvciB0aGUgZGlzYXNzZW1ibGVyLgogICAgIHZvaWQgc2V0U3RhcnRPZkNvZGUo
KQogICAgIHsKLSAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgQ29kZU9yaWdpbigwLCBudWxscHRyKSk7CisgICAg
ICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWxJZ25vcmluZ1dh
dGNocG9pbnRzKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwogICAgICAgICBpZiAo
TElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9mQ29kZShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlh
YmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
aXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAppbmRleCA5ZWI0NmNhNWE4OGQz
YjcwYTg5OGQxZWNmMjk5ZjEzMWRhYTNlNjAwLi40MmY2OGFkYTMyNDc4YTExNzFjZWFkMGY5M2Uw
OGFjMjVjYTYzMTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xp
dmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKQEAg
LTEyNSwxNyArMTI1LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChvcmlnaW4gPT0gY2Fj
aGVkQ29kZU9yaWdpbikKICAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkSGFuZGxlclJlc3Vs
dDsKIAotICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleFRvQ2hlY2sgPSBvcmlnaW4u
Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
VG9DaGVjayA9IG9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAKICAgICAgICAgICAgIGNhY2hlZENv
ZGVPcmlnaW4gPSBvcmlnaW47CiAKICAgICAgICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBvcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBo
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgICAgICAgICAg
aWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVJbmRleFRvQ2hlY2spKSB7CisgICAgICAgICAgICAgICAgaWYgKEhhbmRs
ZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChieXRl
Y29kZUluZGV4VG9DaGVjaykpIHsKICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFk
LmNsZWFyQWxsKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2F0Y2hCeXRlY29k
ZUluZGV4ID0gaGFuZGxlci0+dGFyZ2V0OworICAgICAgICAgICAgICAgICAgICBCeXRlY29kZUlu
ZGV4IGNhdGNoQnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoaGFuZGxlci0+dGFyZ2V0KTsK
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShD
b2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0
Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAppbmRleCBkOTM5ZDMw
M2QyNGE2MjM5MDQ3MTZmZjI3ZmUwMzMyZmE3OTQ3ZmUzLi40NjJkNjgyZDI3YTgwNjhlYWExNWVk
YTIwZGUyNzA1OTg5OGQ5NzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmNwcApAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKIHZvaWQgT1NSRW50cnlEYXRhOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewotICAgIG91dC5wcmludCgiYmMjIiwgbV9ieXRl
Y29kZUluZGV4LCAiLCBtYWNoaW5lIGNvZGUgPSAiLCBSYXdQb2ludGVyKG1fbWFjaGluZUNvZGUu
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIG91dC5wcmludChtX2J5dGVjb2RlSW5kZXgsICIs
IG1hY2hpbmUgY29kZSA9ICIsIFJhd1BvaW50ZXIobV9tYWNoaW5lQ29kZS5leGVjdXRhYmxlQWRk
cmVzcygpKSk7CiAgICAgb3V0LnByaW50KCIsIHN0YWNrIHJ1bGVzID0gWyIpOwogICAgIAogICAg
IGF1dG8gcHJpbnRPcGVyYW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CkBAIC05Miw3
ICs5Miw3IEBAIHZvaWQgT1NSRW50cnlEYXRhOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiB9CiAKIFNVUFBSRVNTX0FTQU4KLXZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkKK3ZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewog
ICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkp
KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKQEAgLTEwNiw3ICsxMDYs
NyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbgogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NS
KCkpIHsKICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICJERkcgT1NSIGluICIsICpjb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCksICIgLT4gIiwgKmNvZGVCbG9jaywKLSAgICAgICAgICAgICIg
ZnJvbSBiYyMiLCBieXRlY29kZUluZGV4LCAiXG4iKTsKKyAgICAgICAgICAgICIgZnJvbSAiLCBi
eXRlY29kZUluZGV4LCAiXG4iKTsKICAgICB9CiAgICAgCiAgICAgc2FuaXRpemVTdGFja0ZvclZN
KHZtKTsKQEAgLTMyOSw4ICszMjksOCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbgogICAgIHJl
dHVybiBzY3JhdGNoOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4gcHJlcGFyZUNhdGNoT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17IAorTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVDYXRjaE9T
UkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCit7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCB8fCBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpGVExKSVQpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29t
bW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKQEAgLTM4MCw3ICszODAsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NSRW50cnkoVk0m
IHZtLCBDYWxsRgogICAgIGlmIChVTkxJS0VMWSghdm0uZW5zdXJlU3RhY2tDYXBhY2l0eUZvcigm
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKVt2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVNpemVG
b3JDaGVjaykub2Zmc2V0KCldKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0
byBpbnN0cnVjdGlvbiA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0
KGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CisgICAgYXV0byBpbnN0cnVjdGlvbiA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGNhbGxGcmFtZS0+Ynl0ZWNv
ZGVJbmRleCgpKTsKICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb24tPmlzPE9wQ2F0Y2g+KCkpOwogICAg
IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGluc3RydWN0aW9uLT5hczxP
cENhdGNoPigpLm1ldGFkYXRhKGNhbGxGcmFtZSkubV9idWZmZXI7CiAgICAgSlNWYWx1ZSogZGF0
YUJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KGRmZ0NvbW1vbi0+Y2F0Y2hPU1JF
bnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuaAppbmRleCBkODE2NzdhMWMyY2U1YmI3NmU4YmM0MzJkNzllYmZmODc4ZGYzYTRkLi5j
Zjk2ZDcxOGFkN2I0ZWFmMjM0MWEzZGQ1YTBlMzNlNTUxNTZmNzExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCkBAIC01Myw3ICs1Myw3IEBAIHN0cnVjdCBPU1JFbnRy
eVJlc2h1ZmZsaW5nIHsKIH07CiAKIHN0cnVjdCBPU1JFbnRyeURhdGEgewotICAgIHVuc2lnbmVk
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxPU1JFbnRyeVB0clRhZz4gbV9tYWNoaW5lQ29kZTsKICAgICBP
cGVyYW5kczxBYnN0cmFjdFZhbHVlPiBtX2V4cGVjdGVkVmFsdWVzOwogICAgIC8vIFVzZSBiaXR2
ZWN0b3JzIGhlcmUgYmVjYXVzZSB0aGV5IHRlbmQgdG8gb25seSByZXF1aXJlIG9uZSB3b3JkLgpA
QCAtNjYsNyArNjYsNyBAQCBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKIH07CiAKLWlubGluZSB1bnNpZ25lZCBnZXRPU1JFbnRyeURhdGFC
eXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSogb3NyRW50cnlEYXRhKQoraW5saW5lIEJ5dGVjb2Rl
SW5kZXggZ2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRleChPU1JFbnRyeURhdGEqIG9zckVudHJ5
RGF0YSkKIHsKICAgICByZXR1cm4gb3NyRW50cnlEYXRhLT5tX2J5dGVjb2RlSW5kZXg7CiB9CkBA
IC03NiwxNyArNzYsMTcgQEAgc3RydWN0IENhdGNoRW50cnlwb2ludERhdGEgewogICAgIC8vIGFy
ZSBvZiB0aGUgZXhwZWN0ZWQgdHlwZSBiZWZvcmUgZW50ZXJpbmcgYXQgYSBjYXRjaCBibG9jay4K
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbWFjaGlu
ZUNvZGU7CiAgICAgVmVjdG9yPEZsdXNoRm9ybWF0PiBhcmd1bWVudEZvcm1hdHM7Ci0gICAgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleDsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiB9
OwogCiAvLyBSZXR1cm5zIGEgcG9pbnRlciB0byBhIGRhdGEgYnVmZmVyIHRoYXQgdGhlIE9TUiBl
bnRyeSB0aHVuayB3aWxsIHJlY29nbml6ZSBhbmQKIC8vIHBhcnNlLiBJZiB0aGlzIHJldHVybnMg
bnVsbCwgaXQgbWVhbnMgCi12b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mLCBDYWxsRnJhbWUqLCBD
b2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKK3ZvaWQqIHByZXBhcmVPU1JFbnRy
eShWTSYsIENhbGxGcmFtZSosIENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgpOwogCiAvLyBJZiBu
dWxsIGlzIHJldHVybmVkLCB3ZSBjYW4ndCBPU1IgZW50ZXIuIElmIGl0J3Mgbm90IG51bGwsIGl0
J3MgdGhlIFBDIHRvIGp1bXAgdG8uCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NSRW50cnkoVk0mLCBDYWxsRnJhbWUqLCBDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShWTSYsIENhbGxGcmFtZSos
IENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgpOwogI2Vsc2UKLWlubGluZSBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZU9TUkVudHJ5KFZNJiwgQ2Fs
bEZyYW1lKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQpIHsgcmV0dXJuIG51bGxwdHI7IH0KK2lubGlu
ZSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZU9T
UkVudHJ5KFZNJiwgQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCkgeyByZXR1
cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZS5jcHAKaW5kZXggOWU2Y2M2ZmQzOWM1MDJmMWQ3MjA1MTFkMDQ3ZWY1OWJlN2Fh
ZWM0ZC4uZGM3NmJjYmFlZDQxZWVlMDYzZGZkYmVhODQ1MDY2NTUzZDBjYjRkNiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZS5jcHAKQEAgLTUwLDEwICs1MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1fZ3JhcGgubV9wbGFuLm1vZGUoKSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CiAK
LSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5
Qnl0ZWNvZGVJbmRleCgpOworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBt
X2dyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5k
ZXggIT0gVUlOVF9NQVgpOwotICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSk7CisKICAgICAgICAgLy8gTmVlZGVkIGJ5IGNyZWF0ZVByZUhlYWRl
cigpLgogICAgICAgICBtX2dyYXBoLmVuc3VyZUNQU0RvbWluYXRvcnMoKTsKICAgICAgICAgCkBA
IC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICAgICAgQmFzaWNCbG9jayogbmV3Um9vdCA9IGlu
c2VydGlvblNldC5pbnNlcnQoMCwgMSk7CiAKICAgICAgICAgLy8gV2UnZCByZWFsbHkgbGlrZSB0
byB1c2UgYW4gdW5zZXQgb3JpZ2luLCBidXQgVGhyZWFkZWRDUFMgd29uJ3QgYWxsb3cgdGhhdC4K
LSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4oMCksIENv
ZGVPcmlnaW4oMCksIGZhbHNlKTsKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBOb2RlT3Jp
Z2luKENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRl
eCgwKSksIGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxOb2RlKj4gbG9jYWxzKGJh
c2VsaW5lLT5udW1DYWxsZWVMb2NhbHMoKSk7CiAgICAgICAgIGZvciAoaW50IGxvY2FsID0gMDsg
bG9jYWwgPCBiYXNlbGluZS0+bnVtQ2FsbGVlTG9jYWxzKCk7ICsrbG9jYWwpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IDhlZjc4MzQyOWFmYzNiNTYzYWQw
MTI1YzdhZmM0OGQ0Y2NhZjliZWIuLmFlZTNkYzI4Zjg2NWQzODExMTNmMzllMzhhMTc3MjczZmRl
OTA0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtNDA1
LDcgKzQwNSw3IEBAIHZvaWQgT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQoQ29udGV4dCYgY29udGV4
dCkKICAgICAgICAgYm9vbCBleGl0VG9MTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJ
bnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuazsKICAgICAgICAgdm9pZCoganVtcFRhcmdldDsKICAgICAgICAgaWYgKGV4aXRUb0xM
SW50KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgICAg
ICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0ZvckV4
aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlT2Zmc2V0KS5wdHIoKTsKICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50
OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgICAg
ICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsgICAgCkBA
IC03ODYsNyArNzg2LDcgQEAgc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDb250
ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIG91dGVybW9zdEJhc2VsaW4KICAgICAgICAgICAgIGNh
bGxlckZyYW1lID0gZnJhbWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0
KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVD
b2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGNhbGxCeXRlY29kZUluZGV4ID0gdHJ1ZUNhbGxlci0+Ynl0ZWNvZGVJ
bmRleCgpOworICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IHRy
dWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQg
PSBjYWxsZXJSZXR1cm5QQyhiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgY2FsbEJ5dGVjb2Rl
SW5kZXgsIHRydWVDYWxsZXJDYWxsS2luZCwgY2FsbGVySXNMTEludCk7CiAKICAgICAgICAgICAg
IGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKSkKQEAgLTg4MSwxMyArODgxLDEzIEBA
IHN0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDb250ZXh0JiBjb250ZXh0LCBWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrCiAKICAgICBpZiAoZXhpdFN0YXRlLT5pc0p1bXBUb0xM
SW50KSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29k
ZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJh
c2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBleGl0
Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9u
JiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCku
YXQoYnl0ZWNvZGVPZmZzZXQpLnB0cigpOworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIGNvbnN0
IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5z
dHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAKICAgICAgICAgY29udGV4dC5n
cHIoTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikgPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKSA9IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9uc1Jhd1Bv
aW50ZXIoKSk7Ci0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSA9
IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
KTsKKyAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpID0gc3RhdGlj
X2Nhc3Q8dWludHB0cl90PihleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkub2Zmc2V0
KCkpOwogI2Vsc2UKICAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIp
ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oJmN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZW5kaWYK
QEAgLTkwNSwxMCArOTA1LDEwIEBAIHN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChDb250ZXh0JiBj
b250ZXh0LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIENvZGVCbG9jayog
YWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CiAgICAgRXhpdEtpbmQga2lu
ZCA9IGV4aXQubV9raW5kOwotICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2Nv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZz
ZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAKICAgICBkYXRhTG9nKCJT
cGVjdWxhdGlvbiBmYWlsdXJlIGluICIsICpjb2RlQmxvY2spOwotICAgIGRhdGFMb2coIiBAIGV4
aXQgIyIsIG9zckV4aXRJbmRleCwgIiAoYmMjIiwgYnl0ZWNvZGVPZmZzZXQsICIsICIsIGV4aXRL
aW5kVG9TdHJpbmcoa2luZCksICIpIHdpdGggIik7CisgICAgZGF0YUxvZygiIEAgZXhpdCAjIiwg
b3NyRXhpdEluZGV4LCAiICgiLCBieXRlY29kZU9mZnNldCwgIiwgIiwgZXhpdEtpbmRUb1N0cmlu
ZyhraW5kKSwgIikgd2l0aCAiKTsKICAgICBpZiAoYWx0ZXJuYXRpdmUpIHsKICAgICAgICAgZGF0
YUxvZygKICAgICAgICAgICAgICJleGVjdXRlQ291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5qaXRF
eGVjdXRlQ291bnRlcigpLApAQCAtMTExMyw3ICsxMTEzLDcgQEAgdm9pZCBPU1JFeGl0Ojpjb21w
aWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBj
b25zdAogICAgICAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5l
dyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CiAgICAgICAgIGRlYnVnSW5mby0+Y29kZUJs
b2NrID0gaml0LmNvZGVCbG9jaygpOwogICAgICAgICBkZWJ1Z0luZm8tPmtpbmQgPSBleGl0Lm1f
a2luZDsKLSAgICAgICAgZGVidWdJbmZvLT5ieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgZGVidWdJbmZvLT5ieXRlY29kZUluZGV4ID0g
ZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogCiAgICAgICAgIGppdC5kZWJ1Z0Nh
bGwodm0sIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUsIGRlYnVnSW5mbyk7
CiAgICAgfQpAQCAtMTY3MCw3ICsxNjcwLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6
OmRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoQ2FsbEZyYW1lKiBjYWwKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGRlYnVnSW5mby0+Y29kZUJsb2NrOwogICAgIENvZGVC
bG9jayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CiAgICAgZGF0YUxv
ZygiU3BlY3VsYXRpb24gZmFpbHVyZSBpbiAiLCAqY29kZUJsb2NrKTsKLSAgICBkYXRhTG9nKCIg
QCBleGl0ICMiLCB2bS5vc3JFeGl0SW5kZXgsICIgKGJjIyIsIGRlYnVnSW5mby0+Ynl0ZWNvZGVP
ZmZzZXQsICIsICIsIGV4aXRLaW5kVG9TdHJpbmcoZGVidWdJbmZvLT5raW5kKSwgIikgd2l0aCAi
KTsKKyAgICBkYXRhTG9nKCIgQCBleGl0ICMiLCB2bS5vc3JFeGl0SW5kZXgsICIgKCIsIGRlYnVn
SW5mby0+Ynl0ZWNvZGVJbmRleCwgIiwgIiwgZXhpdEtpbmRUb1N0cmluZyhkZWJ1Z0luZm8tPmtp
bmQpLCAiKSB3aXRoICIpOwogICAgIGlmIChhbHRlcm5hdGl2ZSkgewogICAgICAgICBkYXRhTG9n
KAogICAgICAgICAgICAgImV4ZWN1dGVDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPmppdEV4ZWN1
dGVDb3VudGVyKCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCmluZGV4IDI1
NzA0ZDJjYjk4MGFlMjI0MmRkMWZmZTY5M2I0YzdkOThiYjNjMmIuLmQxZmM1ZjFmNmI0MDAwYmQ3
ZGNlZjMzNzI3ZDZjOTY3ZTFiNTE1YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdC5oCkBAIC0xNzYsNyArMTc2LDcgQEAgc3RydWN0IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVn
SW5mbyB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrOwogICAgIEV4aXRLaW5kIGtpbmQ7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQ7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OwogfTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IDIyZGU5ZTYxYmYwMjMxNmFhYmQyYjEw
YzVhNjAxZTNlNGY3N2QwZjguLjU0ODc3YjkxZDBiZmQ0ZjE4NDkxMDQxNjlmNzVjMTlmMzMzNDU0
NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIGhhbmRsZUV4aXRDb3Vu
dHMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIGRvbmVB
ZGp1c3RpbmcubGluaygmaml0KTsKIH0KIAotdm9pZCogY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgdW5zaWduZWQgY2FsbEJ5dGVjb2RlSW5kZXgs
IElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGJvb2wmIGNhbGxlcklz
TExJbnQpCit2b2lkKiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yQ2FsbGVyLCBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4LCBJbmxpbmVDYWxsRnJh
bWU6OktpbmQgdHJ1ZUNhbGxlckNhbGxLaW5kLCBib29sJiBjYWxsZXJJc0xMSW50KQogewogICAg
IGNhbGxlcklzTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXItPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRo
dW5rOwogCkBAIC0yNjMsNyArMjYzLDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAgICAgICAgIGNh
bGxlckZyYW1lR1BSID0gR1BSSW5mbzo6cmVnVDM7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5l
Q29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNhbGxCeXRl
Y29kZUluZGV4ID0gdHJ1ZUNhbGxlci0+Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgYXV0
byBjYWxsQnl0ZWNvZGVJbmRleCA9IHRydWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsKICAgICAg
ICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5QQyhiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlciwgY2FsbEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxsZXJDYWxsS2luZCwgY2FsbGVy
SXNMTEludCk7CiAKICAgICAgICAgICAgIGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUo
KSkgewpAQCAtMzgyLDggKzM4Miw4IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2
bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIHZvaWQq
IGp1bXBUYXJnZXQ7CiAgICAgYm9vbCBleGl0VG9MTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhp
dFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50
ZXJwcmV0ZXJUaHVuazsKICAgICBpZiAoZXhpdFRvTExJbnQpIHsKLSAgICAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9y
RXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVPZmZzZXQpLnB0cigpOworICAgICAgICBh
dXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Cisg
ICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2Nr
Rm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50
OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAg
ICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKQEAgLTM5NCw3ICszOTQsNyBAQCB2
b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdp
c3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5pbnN0
cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7Ci0gICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgTExJ
bnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNH
UFIpOwogI2Vsc2UKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KCZjdXJyZW50SW5zdHJ1Y3Rpb24pLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNv
bW1vbi5oCmluZGV4IDBjYWViMDBmM2FlMjk4MDU4N2NmYjEwOTM5YzQ5YzViMjA5YWRkMmEuLjRm
Yzk5NmYwMGQwY2IyODhhOGY0NDlmYWM1MjVlYzlmYzVjOTMyZDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaApAQCAtMzks
NyArMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiB2b2lkIGhhbmRsZUV4
aXRDb3VudHMoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhpdEJhc2UmKTsKIHZvaWQgcmVpZnlJ
bmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0QmFzZSYpOwogdm9p
ZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mLCBDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0
QmFzZSYpOwotdm9pZCogY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlciwgdW5zaWduZWQgY2FsbEJ5dGVjb2RlT2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6
OktpbmQgY2FsbGVyS2luZCwgYm9vbCYgY2FsbGVySXNMTEludCk7Cit2b2lkKiBjYWxsZXJSZXR1
cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBCeXRlY29kZUluZGV4
IGNhbGxCeXRlY29kZUluZGV4LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQgY2FsbGVyS2luZCwgYm9v
bCYgY2FsbGVySXNMTEludCk7CiBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlU2F2ZVNsb3Qo
SW5saW5lQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgR1BSUmVnIGNh
bGxlZVNhdmUpOwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSklUQ29kZVR5cGU+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCA5YTcyNTM2Nzc4MmM0OTlh
NzVlNjNkYzIxMTk3NzdlN2NjYzQ5NmQ5Li5lZDk2YTU2YjZmOWEzMmFlNDRjZDEzMjYyN2M0MzNi
ZjIxNjQyNjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAKQEAgLTM1ODMsNyArMzU4Myw3IEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVu
dENvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSoKICAgICBDT0RF
QkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgInRyaWdnZXJGVExSZXBsYWNlbWVudCIsICgpKTsK
ICAgICAvLyBXZSBuZWVkIHRvIGNvbXBpbGUgdGhlIGNvZGUuCiAgICAgY29tcGlsZSgKLSAgICAg
ICAgdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLCBGVExNb2RlLCBV
SU5UX01BWCwKKyAgICAgICAgdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSwgY29kZUJs
b2NrLCBGVExNb2RlLCBCeXRlY29kZUluZGV4KCksCiAgICAgICAgIE9wZXJhbmRzPE9wdGlvbmFs
PEpTVmFsdWU+PigpLCBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCkp
OwogCiAgICAgLy8gSWYgd2UgcmVhY2hlZCBoZXJlLCB0aGUgY291bnRlciBoYXMgbm90IGJlIHJl
c2V0LiBEbyB0aGF0IG5vdy4KQEAgLTM2MzcsNyArMzYzNyw3IEBAIHZvaWQgSklUX09QRVJBVElP
TiB0cmlnZ2VyVGllclVwTm93KFZNKiB2bVBvaW50ZXIpCiAgICAgfQogfQogCi1zdGF0aWMgY2hh
ciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkIG9y
aWdpbkJ5dGVjb2RlSW5kZXgsIGJvb2wgY2FuT1NSRW50ZXJIZXJlKQorc3RhdGljIGNoYXIqIHRp
ZXJVcENvbW1vbihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBCeXRlY29kZUluZGV4IG9y
aWdpbkJ5dGVjb2RlSW5kZXgsIGJvb2wgY2FuT1NSRW50ZXJIZXJlKQogewogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIApAQCAtMzY5MCw3ICszNjkw
LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZy
YW1lLCB1bnNpZ25lZCBvcmlnaW5CeXRlY29kZUkKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJPU1IgZW50cnk6
IEZyb20gIiwgUmF3UG9pbnRlcihqaXRDb2RlKSwgIiBnb3QgZW50cnkgYmxvY2sgIiwgUmF3UG9p
bnRlcihlbnRyeUJsb2NrKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgaWYgKHZvaWQqIGFkZHJl
c3MgPSBGVEw6OnByZXBhcmVPU1JFbnRyeSh2bSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIGVudHJ5
QmxvY2ssIG9yaWdpbkJ5dGVjb2RlSW5kZXgsIHN0cmVhbUluZGV4KSkgewotICAgICAgICAgICAg
ICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGVudHJ5QmxvY2ssICJvc3JFbnRyeSIsICgiYXQg
YmMjIiwgb3JpZ2luQnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgICAgICBDT0RFQkxP
Q0tfTE9HX0VWRU5UKGVudHJ5QmxvY2ssICJvc3JFbnRyeSIsICgiYXQgIiwgb3JpZ2luQnl0ZWNv
ZGVJbmRleCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0YWdDb2RlUHRyPGNoYXIq
PihhZGRyZXNzLCBKU0VudHJ5UHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihjYWxsRnJhbWUp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zNzc1LDcgKzM3NzUsNyBA
QCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IHVuc2lnbmVkIG9yaWdpbkJ5dGVjb2RlSQogICAgICAgICAgICAgLy8gZXhlY3V0aW5nIHRvIGNv
bXBpbGUuIFdlIHN0YXJ0IHdpdGggdHJ5aW5nIHRvIGNvbXBpbGUgb3V0ZXIgbG9vcHMgc2luY2Ug
d2UgYmVsaWV2ZSBvdXRlciBsb29wCiAgICAgICAgICAgICAvLyBjb21waWxhdGlvbnMgcmV2ZWFs
IHRoZSBiZXN0IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXppbmcgY29kZS4KICAgICAgICAgICAg
IGZvciAoYXV0byBpdGVyID0gdGllclVwSGllcmFyY2h5RW50cnktPnZhbHVlLnJiZWdpbigpLCBl
bmQgPSB0aWVyVXBIaWVyYXJjaHlFbnRyeS0+dmFsdWUucmVuZCgpOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgb3NyRW50cnlDYW5kaWRhdGUgPSAqaXRl
cjsKKyAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IG9zckVudHJ5Q2FuZGlkYXRlID0gKml0
ZXI7CiAKICAgICAgICAgICAgICAgICBpZiAoaml0Q29kZS0+dGllclVwRW50cnlUcmlnZ2Vycy5n
ZXQob3NyRW50cnlDYW5kaWRhdGUpID09IEpJVENvZGU6OlRyaWdnZXJSZWFzb246OlN0YXJ0Q29t
cGlsYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGFs
cmVhZHkgYXNrZWQgdGhpcyBsb29wIHRvIGNvbXBpbGUuIElmIHdlJ3ZlIHJlYWNoZWQgaGVyZSwg
aXQKQEAgLTM3ODcsNyArMzc4Nyw3IEBAIHN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oVk0mIHZt
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQgb3JpZ2luQnl0ZWNvZGVJCiAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSBhc2sgdGhlIG91dGVyIHRvIGxvb3AgdG8gaW1t
ZWRpYXRlbHkgY29tcGlsZSBpdHNlbGYgaWYgcHJvZ3JhbQogICAgICAgICAgICAgICAgIC8vIGNv
bnRyb2wgcmVhY2hlcyBpdC4KICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbm5lci1sb29wIGJjIyIsIG9yaWdp
bkJ5dGVjb2RlSW5kZXgsICIgaW4gIiwgKmNvZGVCbG9jaywgIiBzZXR0aW5nIHBhcmVudCBsb29w
IGJjIyIsIG9zckVudHJ5Q2FuZGlkYXRlLCAiJ3MgdHJpZ2dlciBhbmQgYmFja2luZyBvZmYuXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiSW5uZXItbG9vcCAiLCBvcmlnaW5CeXRl
Y29kZUluZGV4LCAiIGluICIsICpjb2RlQmxvY2ssICIgc2V0dGluZyBwYXJlbnQgbG9vcCAiLCBv
c3JFbnRyeUNhbmRpZGF0ZSwgIidzIHRyaWdnZXIgYW5kIGJhY2tpbmcgb2ZmLlxuIik7CiAgICAg
ICAgICAgICAgICAgaml0Q29kZS0+dGllclVwRW50cnlUcmlnZ2Vycy5zZXQob3NyRW50cnlDYW5k
aWRhdGUsIEpJVENvZGU6OlRyaWdnZXJSZWFzb246OlN0YXJ0Q29tcGlsYXRpb24pOwogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMzgzNyw3ICszODM3LDcg
QEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1l
LCB1bnNpZ25lZCBvcmlnaW5CeXRlY29kZUkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogICAgIAotICAgIENPREVCTE9DS19MT0dfRVZFTlQoaml0Q29kZS0+b3NyRW50cnlCbG9jaygp
LCAib3NyRW50cnkiLCAoImF0IGJjIyIsIG9yaWdpbkJ5dGVjb2RlSW5kZXgpKTsKKyAgICBDT0RF
QkxPQ0tfTE9HX0VWRU5UKGppdENvZGUtPm9zckVudHJ5QmxvY2soKSwgIm9zckVudHJ5IiwgKCJh
dCAiLCBvcmlnaW5CeXRlY29kZUluZGV4KSk7CiAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRo
ZSBmb3ItZW50cnkgY29tcGlsZSBhbHJlYWR5IHN1Y2NlZWRlZC4gSW4gdGhhdCBjYXNlIE9TUgog
ICAgIC8vIGVudHJ5IHdpbGwgc3VjY2VlZCB1bmxlc3Mgd2UgcmFuIG91dCBvZiBzdGFjay4gSXQn
cyBub3QgY2xlYXIgd2hhdCB3ZSBzaG91bGQgZG8uCiAgICAgLy8gV2Ugc2lnbmFsIHRvIHRyeSBh
Z2FpbiBhZnRlciBhIHdoaWxlIGlmIHRoYXQgaGFwcGVucy4KQEAgLTM4NTAsMTMgKzM4NTAsMTQg
QEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1l
LCB1bnNpZ25lZCBvcmlnaW5CeXRlY29kZUkKICAgICByZXR1cm4gcmV0YWdDb2RlUHRyPGNoYXIq
PihhZGRyZXNzLCBKU0VudHJ5UHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihjYWxsRnJhbWUp
KTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3dJbkxvb3AoVk0qIHZt
UG9pbnRlciwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK3ZvaWQgSklUX09QRVJBVElPTiB0cmln
Z2VyVGllclVwTm93SW5Mb29wKFZNKiB2bVBvaW50ZXIsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXhC
aXRzKQogewogICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhl
YXApOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
KyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4Ojpmcm9tQml0
cyhieXRlY29kZUluZGV4Qml0cyk7CiAKICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0pOwogCkBA
IC0zODg1LDEzICszODg2LDE0IEBAIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93
SW5Mb29wKFZNKiB2bVBvaW50ZXIsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgfQogfQog
Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhWTSogdm1Qb2ludGVyLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4KQorY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50
cnlOb3coVk0qIHZtUG9pbnRlciwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleEJpdHMpCiB7CiAgICAg
Vk0mIHZtID0gKnZtUG9pbnRlcjsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRzKGJ5dGVjb2RlSW5k
ZXhCaXRzKTsKIAogICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKaW5kZXggNDU3OTZmZmE2ZDA1OTQ4ZmM2NmVkYzUz
YzhiMTI0MjYxYjhhMWJhYi4uOTRmNGM4MjJiNTg1MDQ3OGIyMmZiNzNiYmZiMTg2YWZjZjNjM2I4
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKQEAgLTMwNCw4
ICszMDQsOCBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SYW5kb20oSlNHbG9iYWxP
YmplY3QqKTsKIAogI2lmIEVOQUJMRShGVExfSklUKQogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdn
ZXJUaWVyVXBOb3coVk0qKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dl
clRpZXJVcE5vd0luTG9vcChWTSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIFdURl9JTlRFUk5B
TDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KFZNKiwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJU
aWVyVXBOb3dJbkxvb3AoVk0qLCB1bnNpZ25lZCBieXRlY29kZUluZGV4Qml0cykgV1RGX0lOVEVS
TkFMOworY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coVk0qLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4Qml0cykgV1RGX0lOVEVSTkFMOwogI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQogCiB9IC8vIGV4dGVybiAiQyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
CmluZGV4IDMwMDBjMzE5YzZjOGRjNWY3YmE1YTk3MzU1NDAzMWI4ZmNiYzE0ZGIuLmQ0MWEzZDQ5
OTdjMThhYTU2YTNkMjk4ODk0OWJlNTFjNDZmNDdlZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcApAQCAtMTM0LDcgKzEzNCw3IEBAIFByb2ZpbGVyOjpDb21waWxhdGlvbktp
bmQgcHJvZmlsZXJDb21waWxhdGlvbktpbmRGb3JNb2RlKENvbXBpbGF0aW9uTW9kZSBtb2RlKQog
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKIFBsYW46OlBsYW4oQ29kZUJsb2NrKiBwYXNzZWRD
b2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssCi0gICAgQ29tcGlsYXRp
b25Nb2RlIG1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICBDb21waWxh
dGlvbk1vZGUgbW9kZSwgQnl0ZWNvZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAg
Y29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzKQogICAg
IDogbV9tb2RlKG1vZGUpCiAgICAgLCBtX3ZtKCZwYXNzZWRDb2RlQmxvY2stPnZtKCkpCkBAIC0y
NDAsOSArMjQwLDkgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocmVh
ZEltcGwoKQogewogICAgIGNsZWFuTXVzdEhhbmRsZVZhbHVlc0lmTmVjZXNzYXJ5KCk7CiAKLSAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZChtX21vZGUpICYmIG1fb3NyRW50cnlCeXRl
Y29kZUluZGV4ICE9IFVJTlRfTUFYKSB7CisgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJs
ZWQobV9tb2RlKSAmJiBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleCkgewogICAgICAgICBkYXRhTG9n
KCJcbiIpOwotICAgICAgICBkYXRhTG9nKCJDb21waWxlciBtdXN0IGhhbmRsZSBPU1IgZW50cnkg
ZnJvbSBiYyMiLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleCwgIiB3aXRoIHZhbHVlczogIiwgbV9t
dXN0SGFuZGxlVmFsdWVzLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiQ29tcGlsZXIgbXVzdCBo
YW5kbGUgT1NSIGVudHJ5IGZyb20gIiwgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgsICIgd2l0aCB2
YWx1ZXM6ICIsIG1fbXVzdEhhbmRsZVZhbHVlcywgIlxuIik7CiAgICAgICAgIGRhdGFMb2coIlxu
Iik7CiAgICAgfQogCkBAIC03MjUsNyArNzI1LDcgQEAgdm9pZCBQbGFuOjpjbGVhbk11c3RIYW5k
bGVWYWx1ZXNJZk5lY2Vzc2FyeSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIENvZGVCbG9jayog
YWx0ZXJuYXRpdmUgPSBtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKLSAgICBGYXN0Qml0VmVj
dG9yIGxpdmVuZXNzID0gYWx0ZXJuYXRpdmUtPmxpdmVuZXNzQW5hbHlzaXMoKS5nZXRMaXZlbmVz
c0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGFsdGVybmF0aXZlLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRl
eCk7CisgICAgRmFzdEJpdFZlY3RvciBsaXZlbmVzcyA9IGFsdGVybmF0aXZlLT5saXZlbmVzc0Fu
YWx5c2lzKCkuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KGFsdGVybmF0aXZlLCBtX29z
ckVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gbV9tdXN0
SGFuZGxlVmFsdWVzLm51bWJlck9mTG9jYWxzKCk7IGxvY2FsLS07KSB7CiAgICAgICAgIGlmICgh
bGl2ZW5lc3NbbG9jYWxdKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAppbmRleCBjZWRh
MDQwMjBkODBlNjdjYTE5ZTJjZmUyOTI5NWZkNzE2YzY4NzVjLi5hNmFjYjI1OTg3MzlhMzQwNDc1
NTA3NTdkOWMxNzBmNjY2MzU5NjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaApA
QCAtNTYsNyArNTYsNyBAQCBjbGFzcyBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PFBsYW4+IHsKIHB1YmxpYzoKICAgICBQbGFuKAogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
a1RvQ29tcGlsZSwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywKLSAgICAgICAgQ29t
cGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgICAgIENv
bXBpbGF0aW9uTW9kZSwgQnl0ZWNvZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAg
ICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyk7
CiAgICAgflBsYW4oKTsKIApAQCAtODcsNyArODcsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
RlRMKCkgY29uc3QgeyByZXR1cm4gREZHOjppc0ZUTChtX21vZGUpOyB9CiAgICAgQ29tcGlsYXRp
b25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KLSAgICB1bnNpZ25lZCBvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX29zckVudHJ5Qnl0ZWNvZGVJbmRl
eDsgfQorICAgIEJ5dGVjb2RlSW5kZXggb3NyRW50cnlCeXRlY29kZUluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXg7IH0KICAgICBjb25zdCBPcGVyYW5kczxPcHRp
b25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX211c3RI
YW5kbGVWYWx1ZXM7IH0KICAgICBUaHJlYWREYXRhKiB0aHJlYWREYXRhKCkgY29uc3QgeyByZXR1
cm4gbV90aHJlYWREYXRhOyB9CiAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsYXRpb24uZ2V0KCk7IH0KQEAgLTEwNiw4ICsxMDYs
OCBAQCBwdWJsaWM6CiAgICAgYm9vbCB3aWxsVHJ5VG9UaWVyVXAoKSBjb25zdCB7IHJldHVybiBt
X3dpbGxUcnlUb1RpZXJVcDsgfQogICAgIHZvaWQgc2V0V2lsbFRyeVRvVGllclVwKGJvb2wgd2ls
bFRyeVRvVGllclVwKSB7IG1fd2lsbFRyeVRvVGllclVwID0gd2lsbFRyeVRvVGllclVwOyB9CiAK
LSAgICBIYXNoTWFwPHVuc2lnbmVkLCBWZWN0b3I8dW5zaWduZWQ+PiYgdGllclVwSW5Mb29wSGll
cmFyY2h5KCkgeyByZXR1cm4gbV90aWVyVXBJbkxvb3BIaWVyYXJjaHk7IH0KLSAgICBWZWN0b3I8
dW5zaWduZWQ+JiB0aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2RlcygpIHsgcmV0dXJuIG1fdGllclVw
QW5kT1NSRW50ZXJCeXRlY29kZXM7IH0KKyAgICBIYXNoTWFwPEJ5dGVjb2RlSW5kZXgsIFZlY3Rv
cjxCeXRlY29kZUluZGV4Pj4mIHRpZXJVcEluTG9vcEhpZXJhcmNoeSgpIHsgcmV0dXJuIG1fdGll
clVwSW5Mb29wSGllcmFyY2h5OyB9CisgICAgVmVjdG9yPEJ5dGVjb2RlSW5kZXg+JiB0aWVyVXBB
bmRPU1JFbnRlckJ5dGVjb2RlcygpIHsgcmV0dXJuIG1fdGllclVwQW5kT1NSRW50ZXJCeXRlY29k
ZXM7IH0KIAogICAgIGVudW0gU3RhZ2UgeyBQcmVwYXJpbmcsIENvbXBpbGluZywgUmVhZHksIENh
bmNlbGxlZCB9OwogICAgIFN0YWdlIHN0YWdlKCkgY29uc3QgeyByZXR1cm4gbV9zdGFnZTsgfQpA
QCAtMTQzLDcgKzE0Myw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fd2lsbFRyeVRvVGllclVw
IHsgZmFsc2UgfTsKIAotICAgIGNvbnN0IHVuc2lnbmVkIG1fb3NyRW50cnlCeXRlY29kZUluZGV4
OworICAgIGNvbnN0IEJ5dGVjb2RlSW5kZXggbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKICAg
ICBUaHJlYWREYXRhKiBtX3RocmVhZERhdGE7CiAKQEAgLTE1OSw4ICsxNTksOCBAQCBwcml2YXRl
OgogICAgIERlc2lyZWRHbG9iYWxQcm9wZXJ0aWVzIG1fZ2xvYmFsUHJvcGVydGllczsKICAgICBS
ZWNvcmRlZFN0YXR1c2VzIG1fcmVjb3JkZWRTdGF0dXNlczsKIAotICAgIEhhc2hNYXA8dW5zaWdu
ZWQsIFZlY3Rvcjx1bnNpZ25lZD4+IG1fdGllclVwSW5Mb29wSGllcmFyY2h5OwotICAgIFZlY3Rv
cjx1bnNpZ25lZD4gbV90aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2RlczsKKyAgICBIYXNoTWFwPEJ5
dGVjb2RlSW5kZXgsIFZlY3RvcjxCeXRlY29kZUluZGV4Pj4gbV90aWVyVXBJbkxvb3BIaWVyYXJj
aHk7CisgICAgVmVjdG9yPEJ5dGVjb2RlSW5kZXg+IG1fdGllclVwQW5kT1NSRW50ZXJCeXRlY29k
ZXM7CiAKICAgICBTdGFnZSBtX3N0YWdlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKaW5kZXggZmI5ZTQ3MGI0N2U5NjUzNDRl
MDlkYzYxMTU4ZGVjNmIxMmRiZTNlYi4uNDM2ZTVkMzkxNGIzMjM1YTAyNDdmYzQxODQ3MTYzMTFk
Njc2ODY1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252
ZXJzaW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcApAQCAtOTcsMTQgKzk3LDE0IEBAIHB1YmxpYzoKIAogICAgICAgICAg
ICAgICAgIGlmIChvbGRSb290LT5pc0NhdGNoRW50cnlwb2ludCkgewogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoISFlbnRyeXBvaW50SW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0LmFkZChlbnRyeXBvaW50
SW5kZXgsIG9sZFJvb3QtPmJ5dGVjb2RlQmVnaW4pOworICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlSW5kZXguYWRkKGVudHJ5cG9pbnRJ
bmRleCwgb2xkUm9vdC0+Ynl0ZWNvZGVCZWdpbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeVN3aXRjaERhdGEtPmNh
c2VzWzBdID09IG1fZ3JhcGguYmxvY2soMCkpOyAvLyBXZSBzdHJvbmdseSBhc3N1bWUgdGhlIG5v
cm1hbCBjYWxsIGVudHJ5cG9pbnQgaXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuCiAKICAg
ICAgICAgICAgIGNvbnN0IGJvb2wgZXhpdE9LID0gZmFsc2U7Ci0gICAgICAgICAgICBOb2RlT3Jp
Z2luIG9yaWdpbiB7IENvZGVPcmlnaW4oMCksIENvZGVPcmlnaW4oMCksIGV4aXRPSyB9OworICAg
ICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4geyBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkp
LCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpLCBleGl0T0sgfTsKICAgICAgICAgICAgIG5l
d1Jvb3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEVu
dHJ5U3dpdGNoLCBvcmlnaW4sIE9wSW5mbyhlbnRyeVN3aXRjaERhdGEpKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCAzZGFlYzQz
OTRlNzNiYzg2YzFjYzM3MDhmZjE5OWZhMTQzZjg5YWE2Li40NzQxNjE0YzU3YmQ4YzliZTYwZTY4
ZjNjMmE0MmVhNzA0NTc1MTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcApAQCAtMTg2MiwxMyArMTg2Miw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQogICAgICAgICAKICAgICAgICAgQVNTRVJUKG1f
Y3VycmVudE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKHZl
cmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgZGF0YUxvZ0YoCi0gICAg
ICAgICAgICAgICAgIlNwZWN1bGF0aXZlSklUIGdlbmVyYXRpbmcgTm9kZSBAJWQgKGJjIyV1KSBh
dCBKSVQgb2Zmc2V0IDB4JXgiLAotICAgICAgICAgICAgICAgIChpbnQpbV9jdXJyZW50Tm9kZS0+
aW5kZXgoKSwKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMu
Ynl0ZWNvZGVJbmRleCgpLCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKLSAgICAgICAgICAgIGRhdGFM
b2coIlxuIik7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJs
ZWQoKSkKKyAgICAgICAgICAgIGRhdGFMb2dMbigiU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBO
b2RlIEAiLCAoaW50KW1fY3VycmVudE5vZGUtPmluZGV4KCksICIgKCIsIG1fY3VycmVudE5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCksICIpIGF0IEpJVCBvZmZz
ZXQgMHgiLCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKIAogICAgICAgICBpZiAoT3B0aW9uczo6dmFs
aWRhdGVERkdFeGNlcHRpb25IYW5kbGluZygpICYmIChtYXlFeGl0KG1faml0LmdyYXBoKCksIG1f
Y3VycmVudE5vZGUpICE9IERvZXNOb3RFeGl0IHx8IG1fY3VycmVudE5vZGUtPmlzVGVybWluYWwo
KSkpCiAgICAgICAgICAgICBtX2ppdC5qaXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24obV9qaXQu
dm0oKSk7CkBAIC0xOTA1LDcgKzE5MDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q3VycmVudEJsb2NrKCkKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygp
CiB7CiAgICAgQVNTRVJUKCFtX2N1cnJlbnROb2RlKTsKLSAgICBtX29yaWdpbiA9IE5vZGVPcmln
aW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgdHJ1ZSk7CisgICAgbV9vcmlnaW4gPSBO
b2RlT3JpZ2luKENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSksIENvZGVPcmlnaW4oQnl0ZWNv
ZGVJbmRleCgwKSksIHRydWUpOwogCiAgICAgYXV0byYgYXJndW1lbnRzID0gbV9qaXQuZ3JhcGgo
KS5tX3Jvb3RUb0FyZ3VtZW50cy5maW5kKG1faml0LmdyYXBoKCkuYmxvY2soMCkpLT52YWx1ZTsK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCk7ICsraSkgewpAQCAtMzk5OCw4ICszOTkzLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlQWRkKE5vZGUqIG5vZGUpCiAjZW5kaWYKIAogICAgIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVJbmRleCk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5
dGVjb2RlSW5kZXgpOwogICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5h
ZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0g
b3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlv
biA9IG9wZXJhdGlvblZhbHVlQWRkOwpAQCAtNDAyMiw4ICs0MDE3LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5vZGUqIG5vZGUpCiAjZW5kaWYKIAogICAgICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVC
bG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICB1bnNpZ25lZCBieXRlY29k
ZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAg
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9m
aWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7
CisgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2st
PmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIEpJ
VFN1YklDKiBzdWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0aFByb2Zp
bGUpOwogICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3Vi
T3B0aW1pemU7CiAgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
VmFsdWVTdWI7CkBAIC00NjE2LDggKzQ2MTEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhTdWIoTm9kZSogbm9kZSkKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1
ZU5lZ2F0ZShOb2RlKiBub2RlKQogewogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sg
PSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yyk7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5i
eXRlY29kZUluZGV4KCk7Ci0gICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7
CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2Vs
aW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
OwogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJQyhh
cml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJp
dGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJh
dGlvbkFyaXRoTmVnYXRlOwpAQCAtNDgzOSw4ICs0ODM0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVZhbHVlTXVsKE5vZGUqIG5vZGUpCiAjZW5kaWYKIAogICAgIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgQXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZz
ZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVE11bElDKiBtdWxJQyA9IG1faml0LmNvZGVCbG9j
aygpLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0
aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwpAQCAtMTA3MzEsNyArMTA3MjYsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoQ2hhclN0cmluZ0p1bXAoTm9kZSogbm9kZSwgU3dp
dGNoRGF0YSogZGF0YSwgR1BSUgogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaCwgU3RyaW5nSW1wbDo6bGVuZ3RoTWVtb3J5T2Zmc2V0KCkpLAogICAgICAgICAgICAg
VHJ1c3RlZEltbTMyKDEpKSwKICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spOwotCisg
ICAgCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoLCBT
dHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCB2YWx1ZSk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXM4Qml0ID0gbV9qaXQuYnJhbmNoVGVzdDMyKApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggMDY0ZGU3MWUwOTJlOWY1
MjQxMjk2NWUxY2U5M2JiM2FlNjU4NjViZS4uZjc1NzlmYzliODI1NGEwOGJhODIzMWNlNjg0MjQ2
NGE4YzQ4OGM3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCkBAIC01MDc5LDEzICs1MDc5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJT
YXZlUGxhbj4gc2F2ZVBsYW5zOwogICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwo
ZmFsc2UsIHNhdmVQbGFucywgSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOworICAgICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0
ZWNvZGVJbmRleCgpOwogCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yTGFtYmRhKFs9XSgp
IHsKICAgICAgICAgICAgIGNhbGxUaWVyVXAubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICBz
aWxlbnRTcGlsbChzYXZlUGxhbnMpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbih0cmlnZ2Vy
VGllclVwTm93SW5Mb29wLCAmdm0oKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgpKTsKKyAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24odHJpZ2dlclRpZXJVcE5vd0luTG9vcCwgJnZtKCksIFRy
dXN0ZWRJbW0zMihieXRlY29kZUluZGV4LmFzQml0cygpKSk7CiAgICAgICAgICAgICBzaWxlbnRG
aWxsKHNhdmVQbGFucyk7CiAKICAgICAgICAgICAgIG1faml0Lmp1bXAoKS5saW5rVG8odG9OZXh0
T3BlcmF0aW9uLCAmbV9qaXQpOwpAQCAtNTExMyw3ICs1MTEzLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwogCi0gICAgICAgIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgp
OworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2Vt
YW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICBhdXRvIHRyaWdnZXJJdGVyYXRvciA9IG1f
aml0LmppdENvZGUoKS0+dGllclVwRW50cnlUcmlnZ2Vycy5maW5kKGJ5dGVjb2RlSW5kZXgpOwog
ICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIHRyaWdnZXJJdGVyYXRvciAh
PSBtX2ppdC5qaXRDb2RlKCktPnRpZXJVcEVudHJ5VHJpZ2dlcnMuZW5kKCkpOwogICAgICAgICBK
SVRDb2RlOjpUcmlnZ2VyUmVhc29uKiBmb3JjZUVudHJ5VHJpZ2dlciA9ICYobV9qaXQuaml0Q29k
ZSgpLT50aWVyVXBFbnRyeVRyaWdnZXJzLmZpbmQoYnl0ZWNvZGVJbmRleCktPnZhbHVlKTsKQEAg
LTUxMzgsNyArNTEzOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIG92ZXJmbG93ZWRDb3VudGVyLmxpbmsoJm1faml0KTsKIAogICAgICAg
ICAgICAgc2lsZW50U3BpbGwoc2F2ZVBsYW5zKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
dHJpZ2dlck9TUkVudHJ5Tm93LCB0ZW1wR1BSLCAmdm0oKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
SW5kZXgpKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24odHJpZ2dlck9TUkVudHJ5Tm93LCB0
ZW1wR1BSLCAmdm0oKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXguYXNCaXRzKCkpKTsKIAog
ICAgICAgICAgICAgaWYgKHNhdmVQbGFucy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQUikubGlua1RvKHRv
TmV4dE9wZXJhdGlvbiwgJm1faml0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4IDFiYWRjNTdj
MGI5MmIyM2FkMGY4NGQ4MTI5YWYxMWFjOGIyNzdlMjMuLmY1ZDczYzEwOWJjNzE3MDcxMjBhZjBl
MWY4YTRmYWJkNDJmOTQzNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcApAQCAtODUsOSArODUsOSBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLmVuc3VyZUNQU05hdHVyYWxMb29w
cygpOwogICAgICAgICBDUFNOYXR1cmFsTG9vcHMmIG5hdHVyYWxMb29wcyA9ICptX2dyYXBoLm1f
Y3BzTmF0dXJhbExvb3BzOwotICAgICAgICBIYXNoTWFwPGNvbnN0IE5hdHVyYWxMb29wKiwgdW5z
aWduZWQ+IG5hdHVyYWxMb29wVG9Mb29wSGludCA9IGJ1aWxkTmF0dXJhbExvb3BUb0xvb3BIaW50
TWFwKG5hdHVyYWxMb29wcyk7CisgICAgICAgIEhhc2hNYXA8Y29uc3QgTmF0dXJhbExvb3AqLCBC
eXRlY29kZUluZGV4PiBuYXR1cmFsTG9vcFRvTG9vcEhpbnQgPSBidWlsZE5hdHVyYWxMb29wVG9M
b29wSGludE1hcChuYXR1cmFsTG9vcHMpOwogCi0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIExv
b3BIaW50RGVzY3JpcHRvcj4gdGllclVwSGllcmFyY2h5OworICAgICAgICBIYXNoTWFwPEJ5dGVj
b2RlSW5kZXgsIExvb3BIaW50RGVzY3JpcHRvcj4gdGllclVwSGllcmFyY2h5OwogCiAgICAgICAg
IEluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9ncmFwaCk7CiAgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewpA
QCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgdGllclVwVHlw
ZSA9IENoZWNrVGllclVwSW5Mb29wOwogICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnROb2RlKG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCB0aWVyVXBUeXBlLCBvcmlnaW4pOwogCi0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG9yaWdpbi5zZW1hbnRpYy5i
eXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gb3Jp
Z2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICBpZiAoY2FuT1NS
RW50ZXIpCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnRpZXJVcEFuZE9TUkVu
dGVyQnl0ZWNvZGVzKCkuYXBwZW5kKGJ5dGVjb2RlSW5kZXgpOwogCkBAIC0xMzgsOCArMTM4LDgg
QEAgcHVibGljOgogCiAgICAgICAgIC8vIEFkZCBhbGwgdGhlIGNhbmRpZGF0ZXMgdGhhdCBjYW4g
YmUgT1NSIEVudGVyZWQuCiAgICAgICAgIGZvciAoYXV0byBlbnRyeSA6IHRpZXJVcEhpZXJhcmNo
eSkgewotICAgICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiB0aWVyVXBDYW5kaWRhdGVzOwotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZUluZGV4IDogZW50cnkudmFsdWUub3NyRW50
cnlDYW5kaWRhdGVzKSB7CisgICAgICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVJbmRleD4gdGllclVw
Q2FuZGlkYXRlczsKKyAgICAgICAgICAgIGZvciAoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
IDogZW50cnkudmFsdWUub3NyRW50cnlDYW5kaWRhdGVzKSB7CiAgICAgICAgICAgICAgICAgYXV0
byBkZXNjcmlwdG9ySXQgPSB0aWVyVXBIaWVyYXJjaHkuZmluZChieXRlY29kZUluZGV4KTsKICAg
ICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvckl0ICE9IHRpZXJVcEhpZXJhcmNoeS5lbmQoKQog
ICAgICAgICAgICAgICAgICAgICAmJiBkZXNjcmlwdG9ySXQtPnZhbHVlLmNhbk9TUkVudGVyKQpA
QCAtMTYwLDcgKzE2MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAjaWYgRU5BQkxFKEZUTF9KSVQp
CiAgICAgc3RydWN0IExvb3BIaW50RGVzY3JpcHRvciB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25l
ZD4gb3NyRW50cnlDYW5kaWRhdGVzOworICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVJbmRleD4gb3Ny
RW50cnlDYW5kaWRhdGVzOwogICAgICAgICBib29sIGNhbk9TUkVudGVyOwogICAgIH07CiAKQEAg
LTE4Myw5ICsxODMsOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
LSAgICBIYXNoTWFwPGNvbnN0IE5hdHVyYWxMb29wKiwgdW5zaWduZWQ+IGJ1aWxkTmF0dXJhbExv
b3BUb0xvb3BIaW50TWFwKGNvbnN0IENQU05hdHVyYWxMb29wcyYgbmF0dXJhbExvb3BzKQorICAg
IEhhc2hNYXA8Y29uc3QgTmF0dXJhbExvb3AqLCBCeXRlY29kZUluZGV4PiBidWlsZE5hdHVyYWxM
b29wVG9Mb29wSGludE1hcChjb25zdCBDUFNOYXR1cmFsTG9vcHMmIG5hdHVyYWxMb29wcykKICAg
ICB7Ci0gICAgICAgIEhhc2hNYXA8Y29uc3QgTmF0dXJhbExvb3AqLCB1bnNpZ25lZD4gbmF0dXJh
bExvb3BzVG9Mb29wSGludDsKKyAgICAgICAgSGFzaE1hcDxjb25zdCBOYXR1cmFsTG9vcCosIEJ5
dGVjb2RlSW5kZXg+IG5hdHVyYWxMb29wc1RvTG9vcEhpbnQ7CiAKICAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6
ZSgpOyArK25vZGVJbmRleCkgewpAQCAtMTk0LDcgKzE5NCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IE5hdHVy
YWxMb29wKiBsb29wID0gbmF0dXJhbExvb3BzLmlubmVyTW9zdExvb3BPZihibG9jaykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7
CiAgICAgICAgICAgICAgICAgICAgIG5hdHVyYWxMb29wc1RvTG9vcEhpbnQuYWRkKGxvb3AsIGJ5
dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCmlu
ZGV4IDhkYjZkYmU4YzY5MmJiMTMwODYzM2MwNDE4NmE2MmJlOGFjNTBmZDguLmE0Mjk0OWM4ZjFm
MThlY2U2MDA1OGQxMGU3YTk2MDgzYzkxNmJlOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcApAQCAtNzUsNyArNzUsNyBAQCB2b2lkIFRv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlk
Q29tcGxldGUoCiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bDogewogICAgICAgICBqaXRDb2RlLT5zZXRPU1JFbnRyeUJsb2NrKGNvZGVCbG9jay0+
dm0oKSwgcHJvZmlsZWRERkdDb2RlQmxvY2ssIGNvZGVCbG9jayk7Ci0gICAgICAgIHVuc2lnbmVk
IG9zckVudHJ5Qnl0ZWNvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZnRsRm9yT1NSRW50cnko
KS0+Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICBCeXRlY29kZUluZGV4IG9zckVudHJ5Qnl0ZWNv
ZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZnRsRm9yT1NSRW50cnkoKS0+Ynl0ZWNvZGVJbmRl
eCgpOwogICAgICAgICBqaXRDb2RlLT50aWVyVXBFbnRyeVRyaWdnZXJzLnNldChvc3JFbnRyeUJ5
dGVjb2RlLCBKSVRDb2RlOjpUcmlnZ2VyUmVhc29uOjpDb21waWxhdGlvbkRvbmUpOwogICAgICAg
ICBicmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
CmluZGV4IDhjMDQxOTFkZWU2NDMzYTBhNTI3YjY1YzI1ZjBmZDhiNzQ4ZDQ1YWYuLmVmODViNDIz
ZGE2MGFiMGVjNTc1YWE5NGQ5NjM4YjEzMDIwYTdkNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCkBAIC03ODAsNyArNzgwLDcgQEAgcHJpdmF0ZToKIAogICAg
ICAgICBhdXRvJiBkb21pbmF0b3JzID0gbV9ncmFwaC5lbnN1cmVTU0FEb21pbmF0b3JzKCk7CiAK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggOiBtX2dyYXBoLm1fZW50cnlw
b2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0LmtleXMoKSkKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBlbnRyeXBvaW50SW5kZXggOiBtX2dyYXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5
dGVjb2RlSW5kZXgua2V5cygpKQogICAgICAgICAgICAgVkFMSURBVEUoKCksIGVudHJ5cG9pbnRJ
bmRleCA+IDApOyAvLyBCeSBjb252ZW50aW9uLCAwIGlzIHRoZSBlbnRyeXBvaW50IGluZGV4IGZv
ciB0aGUgb3BfZW50ZXIgZW50cnlwb2ludCwgd2hpY2ggY2FuIG5vdCBiZSBpbiBhIGNhdGNoLgog
CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1f
Z3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAKaW5kZXggNGQ0YjFlYjZmZDM3MDQxMmE5NGNjNzE4ZjRhZTI1ZDI3
NWQ0MjY0YS4uZGUzMjZiZWNhM2Q1ZGY5ODFmOWE5ZjA3YjQ0OGYwZmY1NzFkNmNlYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCkBAIC0xNTcsMTIgKzE1NywxMiBA
QCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlc3VsdCYgc2FmZXBvaW50
UmVzdWx0KQogICAgIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uID0gbGFiZWw7CiAgICAgc3RhdGUu
aml0Q29kZS0+aW5pdGlhbGl6ZUIzQnlwcm9kdWN0cyhzdGF0ZS5wcm9jLT5yZWxlYXNlQnlwcm9k
dWN0cygpKTsKIAotICAgIGZvciAoYXV0byBwYWlyIDogc3RhdGUuZ3JhcGgubV9lbnRyeXBvaW50
SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQpIHsKLSAgICAgICAgdW5zaWduZWQgY2F0Y2hCeXRl
Y29kZU9mZnNldCA9IHBhaXIudmFsdWU7CisgICAgZm9yIChhdXRvIHBhaXIgOiBzdGF0ZS5ncmFw
aC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZUluZGV4KSB7CisgICAgICAgIEJ5dGVj
b2RlSW5kZXggY2F0Y2hCeXRlY29kZUluZGV4ID0gcGFpci52YWx1ZTsKICAgICAgICAgdW5zaWdu
ZWQgZW50cnlwb2ludEluZGV4ID0gcGFpci5rZXk7CiAgICAgICAgIFZlY3RvcjxGbHVzaEZvcm1h
dD4gYXJndW1lbnRGb3JtYXRzID0gc3RhdGUuZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbZW50cnlw
b2ludEluZGV4XTsKICAgICAgICAgc3RhdGUuaml0Q29kZS0+Y29tbW9uLmFwcGVuZENhdGNoRW50
cnlwb2ludCgKLSAgICAgICAgICAgIGNhdGNoQnl0ZWNvZGVPZmZzZXQsIHN0YXRlLmZpbmFsaXpl
ci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihz
dGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFiZWwoZW50cnlwb2ludEluZGV4KSksIFdURk1vdmUoYXJn
dW1lbnRGb3JtYXRzKSk7CisgICAgICAgICAgICBjYXRjaEJ5dGVjb2RlSW5kZXgsIHN0YXRlLmZp
bmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPihzdGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFiZWwoZW50cnlwb2ludEluZGV4KSksIFdURk1v
dmUoYXJndW1lbnRGb3JtYXRzKSk7CiAgICAgfQogICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5m
aW5hbGl6ZUNhdGNoRW50cnlwb2ludHMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgKaW5kZXggYWYyY2QxMTMzOWY5NWM2ZmQxNWE3
ZTIzMDRlZjQxNTk4ZjQ1NTY2Zi4uMjY4OWQzYTcxNmI3NTNmNWQ2ODJjZWQwY2M1NDcxNWY4YTc1
OTdhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRy
eUpJVENvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5
SklUQ29kZS5oCkBAIC00OCw4ICs0OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRpYWxpemVF
bnRyeUJ1ZmZlcihWTSYsIHVuc2lnbmVkIG51bUNhbGxlZUxvY2Fscyk7CiAgICAgU2NyYXRjaEJ1
ZmZlciogZW50cnlCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5QnVmZmVyOyB9CiAgICAg
Ci0gICAgdm9pZCBzZXRCeXRlY29kZUluZGV4KHVuc2lnbmVkIHZhbHVlKSB7IG1fYnl0ZWNvZGVJ
bmRleCA9IHZhbHVlOyB9Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQorICAgIHZvaWQgc2V0Qnl0ZWNvZGVJbmRleChCeXRlY29k
ZUluZGV4IHZhbHVlKSB7IG1fYnl0ZWNvZGVJbmRleCA9IHZhbHVlOyB9CisgICAgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CiAg
ICAgCiAgICAgdm9pZCBjb3VudEVudHJ5RmFpbHVyZSgpIHsgbV9lbnRyeUZhaWx1cmVDb3VudCsr
OyB9CiAgICAgdW5zaWduZWQgZW50cnlGYWlsdXJlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2Vu
dHJ5RmFpbHVyZUNvdW50OyB9CkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICAKIHByaXZh
dGU6CiAgICAgU2NyYXRjaEJ1ZmZlciogbV9lbnRyeUJ1ZmZlcjsgLy8gT25seSBmb3IgT1NSIGVu
dHJ5IGNvZGUgYmxvY2tzLgotICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAgICBCeXRl
Y29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKICAgICB1bnNpZ25lZCBtX2VudHJ5RmFpbHVyZUNv
dW50OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCmluZGV4IDdlZjQxNzk5ZjRmMmQ1NzQyMGQ4OWUwNWU0ZmM2NTMyNDdmNDBkZDUuLjhhMDBk
OTY2M2ZlM2Q2MTZhMGYxZWVlOGFkZTY0ZjkzYjFmZDEzZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTIxMSw3ICsyMTEsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY29k
ZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwogICAgICAgICAgICAgICAgIH0pOwog
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNhdGNoRW50cnlwb2ludEluZGV4IDogbV9ncmFw
aC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldC5rZXlzKCkpIHsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgY2F0Y2hFbnRyeXBvaW50SW5kZXggOiBtX2dyYXBoLm1fZW50
cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlSW5kZXgua2V5cygpKSB7CiAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2F0Y2hFbnRyeXBvaW50SW5kZXggIT0gMCk7CiAgICAgICAgICAg
ICAgICAgbV9wcm9jLmNvZGUoKS5zZXRQcm9sb2d1ZUZvckVudHJ5cG9pbnQoY2F0Y2hFbnRyeXBv
aW50SW5kZXgsIGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IuY29weVJlZigpKTsKICAgICAgICAgICAg
IH0KQEAgLTI4MCw3ICsyODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIGV4aXRGcmFt
ZVNpemUgPSBtX2dyYXBoLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQoKSAqIHNpemVvZihS
ZWdpc3Rlcik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
c09mU3RhY2tMaW1pdCh2bS0+YWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSk7CiAgICAgICAgIFBh
dGNocG9pbnRWYWx1ZSogc3RhY2tPdmVyZmxvd0hhbmRsZXIgPSBtX291dC5wYXRjaHBvaW50KFZv
aWQpOwotICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBjYWxsU2l0ZUluZGV4
Rm9yQ29kZU9yaWdpbihtX2Z0bFN0YXRlLCBDb2RlT3JpZ2luKDApKTsKKyAgICAgICAgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGVJbmRleEZvckNvZGVPcmlnaW4obV9mdGxT
dGF0ZSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CiAgICAgICAgIHN0YWNrT3ZlcmZs
b3dIYW5kbGVyLT5hcHBlbmRTb21lUmVnaXN0ZXIobV9jYWxsRnJhbWUpOwogICAgICAgICBzdGFj
a092ZXJmbG93SGFuZGxlci0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0
ZXJzKCkpOwogICAgICAgICBzdGFja092ZXJmbG93SGFuZGxlci0+bnVtR1BTY3JhdGNoUmVnaXN0
ZXJzID0gMTsKQEAgLTM1MSw3ICszNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIG1fbm9kZSA9IG51bGxwdHI7Ci0gICAgICAgICAgICBtX29yaWdpbiA9IE5vZGVP
cmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgdHJ1ZSk7CisgICAgICAgICAgICBt
X29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSwgQ29kZU9y
aWdpbihCeXRlY29kZUluZGV4KDApKSwgdHJ1ZSk7CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFy
Z3VtZW50cy4KICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7CkBAIC0yMTEw
LDggKzIxMTAsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9jayA9IG1fZnRsU3RhdGUuZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4
ID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICBBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVG
b3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4KTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4ID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwor
ICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5h
cml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBhdXRv
IHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemU7CiAgICAgICAg
IGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGQ7CiAgICAgICAg
IGNvbXBpbGVCaW5hcnlNYXRoSUM8SklUQWRkR2VuZXJhdG9yPihhcml0aFByb2ZpbGUsIHJlcGF0
Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKQEAgLTIxMzEsOCArMjEzMSw4
IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrID0gbV9mdGxTdGF0ZS5ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgIEFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXggPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIEFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJvZmls
ZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIGF1dG8gcmVwYXRjaGlu
Z0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZTsKICAgICAgICAgYXV0byBub25S
ZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1YjsKICAgICAgICAgY29tcGlsZUJp
bmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0
aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwpAQCAtMjE1Miw4ICsyMTUyLDggQEAgcHJpdmF0
ZToKICAgICAgICAgfQogCiAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBt
X2Z0bFN0YXRlLmdyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG1fbm9kZS0+b3JpZ2luLnNl
bWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVJbmRleCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgQXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNv
ZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24g
PSBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplOwogICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwogICAgICAgICBjb21waWxlQmluYXJ5TWF0aElD
PEpJVE11bEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJl
cGF0Y2hpbmdGdW5jdGlvbik7CkBAIC0yNDE1LDggKzI0MTUsOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9m
dGxTdGF0ZS5ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yyk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZz
ZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXggPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAg
ICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFBy
b2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgYXV0byBy
ZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplOwogICAgICAgICAg
ICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1YjsKICAgICAg
ICAgICAgIGNvbXBpbGVCaW5hcnlNYXRoSUM8SklUU3ViR2VuZXJhdG9yPihhcml0aFByb2ZpbGUs
IHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKQEAgLTMwOTMsOCAr
MzA5Myw4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1f
bm9kZSwgbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CiAgICAgICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2Z0bFN0YXRlLmdyYXBoLmJhc2VsaW5l
Q29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsK
LSAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+
YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVj
b2RlSW5kZXgoKTsKKyAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsK
ICAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9w
dGltaXplOwogICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFy
aXRoTmVnYXRlOwogICAgICAgICBjb21waWxlVW5hcnlNYXRoSUM8SklUTmVnR2VuZXJhdG9yPihh
cml0aFByb2ZpbGUsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5kZXggYzE3NTczNzVi
N2FhM2U4NzM0YzgyMjM5YTUyMTc0NjcwZWNmOTcxOS4uOTMzMTc3MTBmNmQwNjg2MDkxOWJjMDAy
NTMxM2ExMzIxOTA0NDkxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRy
eS5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewog
U1VQUFJFU1NfQVNBTgogdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogICAgIFZNJiB2bSwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGVudHJ5
Q29kZUJsb2NrLAotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIHN0cmVhbUlu
ZGV4KQorICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgc3RyZWFtSW5k
ZXgpCiB7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZSA9IGRmZ0NvZGVCbG9jay0+YmFzZWxpbmVW
ZXJzaW9uKCk7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBkZmdDb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpOwpAQCAtNTUsNyArNTUsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50
cnkoCiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICBkYXRh
TG9nKAotICAgICAgICAgICAgIkZUTCBPU1IgZnJvbSAiLCAqZGZnQ29kZUJsb2NrLCAiIHRvICIs
ICplbnRyeUNvZGVCbG9jaywgIiBhdCBiYyMiLAorICAgICAgICAgICAgIkZUTCBPU1IgZnJvbSAi
LCAqZGZnQ29kZUJsb2NrLCAiIHRvICIsICplbnRyeUNvZGVCbG9jaywgIiBhdCAiLAogICAgICAg
ICAgICAgYnl0ZWNvZGVJbmRleCwgIi5cbiIpOwogICAgIH0KICAgICAKQEAgLTY0LDcgKzY0LDcg
QEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogCiAgICAgaWYgKGJ5dGVjb2RlSW5kZXggIT0gZW50
cnlDb2RlLT5ieXRlY29kZUluZGV4KCkpIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugd2UgZG9u
J3QgaGF2ZSBhbiBlbnRyeXBvaW50IGZvciBiYyMiLCBieXRlY29kZUluZGV4LCAiOyBvdXJzIGlz
IGZvciBiYyMiLCBlbnRyeUNvZGUtPmJ5dGVjb2RlSW5kZXgoKSwgIlxuIik7CisgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYW4gZW50cnlw
b2ludCBmb3IgIiwgYnl0ZWNvZGVJbmRleCwgIjsgb3VycyBpcyBmb3IgIiwgZW50cnlDb2RlLT5i
eXRlY29kZUluZGV4KCksICJcbiIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCkBA
IC03OSw3ICs3OSw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICAgICAgT3B0aW9uYWw8
SlNWYWx1ZT4gcmVjb25zdHJ1Y3RlZFZhbHVlID0gdmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KTsK
ICAgICAgICAgaWYgKChyZWNvbnN0cnVjdGVkVmFsdWUgJiYgdmFsdWVPblN0YWNrID09IHJlY29u
c3RydWN0ZWRWYWx1ZS52YWx1ZSgpKSB8fCAhYXJndW1lbnQpCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgZGF0YUxvZygiTWlzbWF0Y2ggYmV0d2VlbiByZWNvbnN0cnVjdGVkIHZhbHVl
cyBhbmQgdGhlIHZhbHVlIG9uIHRoZSBzdGFjayBmb3IgYXJndW1lbnQgYXJnIiwgYXJndW1lbnQs
ICIgZm9yICIsICplbnRyeUNvZGVCbG9jaywgIiBhdCBiYyMiLCBieXRlY29kZUluZGV4LCAiOlxu
Iik7CisgICAgICAgIGRhdGFMb2coIk1pc21hdGNoIGJldHdlZW4gcmVjb25zdHJ1Y3RlZCB2YWx1
ZXMgYW5kIHRoZSB2YWx1ZSBvbiB0aGUgc3RhY2sgZm9yIGFyZ3VtZW50IGFyZyIsIGFyZ3VtZW50
LCAiIGZvciAiLCAqZW50cnlDb2RlQmxvY2ssICIgYXQgIiwgYnl0ZWNvZGVJbmRleCwgIjpcbiIp
OwogICAgICAgICBkYXRhTG9nKCIgICAgVmFsdWUgb24gc3RhY2s6ICIsIHZhbHVlT25TdGFjaywg
IlxuIik7CiAgICAgICAgIGRhdGFMb2coIiAgICBSZWNvbnN0cnVjdGVkIHZhbHVlOiAiLCByZWNv
bnN0cnVjdGVkVmFsdWUsICJcbiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oCmluZGV4IDNkMTIzZmJl
ZDdjYjIyZDIzNDkxNWJiOGZiOWJiYzI1MmU2NDBkN2IuLjY0ZWNmNzVmZWUzMmU4MmNmMWNmYWVi
NzY0OGUwMmYxMDJjMWYyZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRW50cnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5
LmgKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgVk07CiBuYW1lc3BhY2UgRlRMIHsKIAogdm9pZCog
cHJlcGFyZU9TUkVudHJ5KAotICAgIFZNJiwgQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiBkZmdDb2Rl
QmxvY2ssIENvZGVCbG9jayogZW50cnlDb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
CisgICAgVk0mLCBDYWxsRnJhbWUqLCBDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2Nr
KiBlbnRyeUNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCwKICAgICB1bnNpZ25lZCBzdHJlYW1JbmRl
eCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKaW5kZXggODA5OTBjZWMwMjFkYzNkODZkYjMx
Y2UxY2IwMDc3OGQxZjE4N2ExYy4uYzc0MWI2NjliY2EwMzU1NWYzMzIwMzhkMDU2MDc0NWI4MjU3
ZWFlNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFt
ZS5jcHAKQEAgLTk4LDEyICs5OCwxMiBAQCBTVVBQUkVTU19BU0FOIHVuc2lnbmVkIENhbGxGcmFt
ZTo6dW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAogCiBDYWxsU2l0ZUluZGV4IENhbGxG
cmFtZTo6Y2FsbFNpdGVJbmRleCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgo
Y2FsbFNpdGVBc1Jhd0JpdHMoKSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChjYWxsU2l0ZUFzUmF3Qml0cygpKSk7CiB9CiAKIFNVUFBSRVNTX0FTQU4gQ2FsbFNpdGVJ
bmRleCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXgoKSBjb25zdAogewotICAgIHJldHVy
biBDYWxsU2l0ZUluZGV4KHVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkpOworICAgIHJldHVybiBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSkpOwog
fQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTEzNCw3ICsxMzQsNyBAQCBjb25zdCBJbnN0
cnVjdGlvbiogQ2FsbEZyYW1lOjpjdXJyZW50VlBDKCkgY29uc3QKIAogdm9pZCBDYWxsRnJhbWU6
OnNldEN1cnJlbnRWUEMoY29uc3QgSW5zdHJ1Y3Rpb24qIHZwYykKIHsKLSAgICBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlKGNvZGVCbG9jaygpLT5ieXRlY29kZU9mZnNldCh2cGMpKTsKKyAgICBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlKGNvZGVCbG9jaygpLT5ieXRlY29kZUluZGV4KHZwYykpOwogICAg
IHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCkgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PihjYWxsU2l0ZS5iaXRzKCkpOwogfQogCkBAIC0xNDcsMTEgKzE0NywxMSBAQCB1bnNp
Z25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogCiAj
ZW5kaWYKICAgICAKLXVuc2lnbmVkIENhbGxGcmFtZTo6Ynl0ZWNvZGVPZmZzZXQoKQorQnl0ZWNv
ZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgoKQogewogICAgIEFTU0VSVCghY2FsbGVl
KCkuaXNXYXNtKCkpOwogICAgIGlmICghY29kZUJsb2NrKCkpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gQnl0ZWNvZGVJbmRleCgwKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICBpZiAoY2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkpIHsKICAgICAgICAgQVNTRVJU
KGNvZGVCbG9jaygpKTsKQEAgLTE2NCwxMyArMTY0LDEzIEBAIHVuc2lnbmVkIENhbGxGcmFtZTo6
Ynl0ZWNvZGVPZmZzZXQoKQogICAgIH0KICNlbmRpZgogICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNB
cmVCeXRlY29kZU9mZnNldCgpKTsKLSAgICByZXR1cm4gY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9m
ZnNldCgpOworICAgIHJldHVybiBCeXRlY29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVP
ZmZzZXQoKSk7CiB9CiAKIENvZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkKIHsKICAg
ICBpZiAoIWNvZGVCbG9jaygpKQotICAgICAgICByZXR1cm4gQ29kZU9yaWdpbigwKTsKKyAgICAg
ICAgcmV0dXJuIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSk7CiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgaWYgKGNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgpKSB7CiAgICAgICAg
IENhbGxTaXRlSW5kZXggaW5kZXggPSBjYWxsU2l0ZUluZGV4KCk7CkBAIC0xNzgsNyArMTc4LDcg
QEAgQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQogICAgICAgICByZXR1cm4gY29k
ZUJsb2NrKCktPmNvZGVPcmlnaW4oaW5kZXgpOwogICAgIH0KICNlbmRpZgotICAgIHJldHVybiBD
b2RlT3JpZ2luKGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgcmV0dXJuIENv
ZGVPcmlnaW4oQnl0ZWNvZGVJbmRleChjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkpKTsK
IH0KIAogUmVnaXN0ZXIqIENhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFsKCkKQEAgLTMwMyw3
ICszMDMsNyBAQCBTdHJpbmcgQ2FsbEZyYW1lOjpmcmllbmRseUZ1bmN0aW9uTmFtZSgpCiB2b2lk
IENhbGxGcmFtZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogewogICAgIGlmIChDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpKSB7Ci0gICAgICAgIG91dC5wcmludChjb2Rl
QmxvY2stPmluZmVycmVkTmFtZSgpLCAiIyIsIGNvZGVCbG9jay0+aGFzaEFzU3RyaW5nSWZQb3Nz
aWJsZSgpLCAiIFsiLCBjb2RlQmxvY2stPmppdFR5cGUoKSwgIiBiYyMiLCBieXRlY29kZU9mZnNl
dCgpLCAiXSIpOworICAgICAgICBvdXQucHJpbnQoY29kZUJsb2NrLT5pbmZlcnJlZE5hbWUoKSwg
IiMiLCBjb2RlQmxvY2stPmhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSwgIiBbIiwgY29kZUJsb2Nr
LT5qaXRUeXBlKCksICIgIiwgYnl0ZWNvZGVJbmRleCgpLCAiXSIpOwogCiAgICAgICAgIG91dC5w
cmludCgiKCIpOwogICAgICAgICB0aGlzVmFsdWUoKS5kdW1wRm9yQmFja3RyYWNlKG91dCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKaW5kZXggMTBl
NDZhNzIzMzFkMTdkNDM1NzVjMjVkYmY3NDFiNTBmNDJmOWEzZC4uNmQyMDU4ODE3OThmMTE4Yjg5
MGJiNzViNzhkODdjOGE4MzczZDBkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaApAQCAtNDUsMjIgKzQ1LDE5IEBAIG5hbWVzcGFjZSBKU0MgIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIENhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAgICAgICAg
IAotICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KHVpbnQzMl90IGJpdHMpCi0gICAgICAg
ICAgICA6IG1fYml0cyhiaXRzKQorICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5
dGVjb2RlSW5kZXgpCiAgICAgICAgIHsgfQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAg
IGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQot
ICAgICAgICAgICAgOiBtX2JpdHMoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikp
Ci0gICAgICAgIHsgfQotI2VuZGlmCiAKLSAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuIG1fYml0cyAhPSBVSU5UX01BWDsgfQotICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyA9
PSBvdGhlci5tX2JpdHM7IH0KLSAgICAgICAgCi0gICAgICAgIGlubGluZSB1aW50MzJfdCBiaXRz
KCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiAhIW1fYnl0ZWNvZGVJbmRleDsgfQorICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYnl0
ZWNvZGVJbmRleCA9PSBvdGhlci5tX2J5dGVjb2RlSW5kZXg7IH0KKworICAgICAgICB1aW50MzJf
dCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4LmFzQml0cygpOyB9CisKKyAg
ICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
Y29kZUluZGV4OyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB1aW50MzJfdCBtX2JpdHMgeyBV
SU5UX01BWCB9OworICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKICAgICB9
OwogCiAgICAgY2xhc3MgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggOiBwdWJsaWMgQ2FsbFNpdGVJ
bmRleCB7CkBAIC02OCw3ICs2NSw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgRGlzcG9z
YWJsZUNhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgZXhwbGljaXQgRGlzcG9z
YWJsZUNhbGxTaXRlSW5kZXgodWludDMyX3QgYml0cykKLSAgICAgICAgICAgIDogQ2FsbFNpdGVJ
bmRleChiaXRzKQorICAgICAgICAgICAgOiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXg6OmZy
b21CaXRzKGJpdHMpKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMTc3LDEwICsxNzQsMTAg
QEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyBhbHNvIHJldHVybiAwIGlmIHRoZSBjYWxs
IGZyYW1lIGhhcyBubyBub3Rpb24gb2YgYnl0ZWNvZGUgb2Zmc2V0cyAoZm9yCiAgICAgICAgIC8v
IGV4YW1wbGUgaWYgaXQncyBuYXRpdmUgY29kZSkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3NTQKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQoKTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCk7CiAgICAg
ICAgIAogICAgICAgICAvLyBUaGlzIHdpbGwgZ2V0IHlvdSBhIENvZGVPcmlnaW4uIEl0IHdpbGwg
YWx3YXlzIHN1Y2NlZWQuIE1heSByZXR1cm4KLSAgICAgICAgLy8gQ29kZU9yaWdpbigwKSBpZiB3
ZSdyZSBpbiBuYXRpdmUgY29kZS4KKyAgICAgICAgLy8gQ29kZU9yaWdpbihCeXRlY29kZUluZGV4
KDApKSBpZiB3ZSdyZSBpbiBuYXRpdmUgY29kZS4KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luKCk7CiAKICAgICAgICAgUmVnaXN0ZXIqIHRvcE9mRnJhbWUo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAKaW5kZXggYzk5MDRjYzA1MzJhMDRlZWU3ZGNjMDJmYmNmNzY4NDE2ZjMzNmJhYy4uNTk1YzU0
YmM3ZjIzODFlNmFkYjFhYjM4NGJkODMzMWNjZDZmZWJkNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC00MTAsNyArNDEwLDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBlbmQoU3RhY2tGcmFtZSh2
aXNpdG9yLT53YXNtRnVuY3Rpb25JbmRleE9yTmFtZSgpKSk7CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCEhdmlzaXRvci0+Y29kZUJsb2NrKCkgJiYgIXZpc2l0b3ItPmNvZGVCbG9jaygpLT51bmxp
bmtlZENvZGVCbG9jaygpLT5pc0J1aWx0aW5GdW5jdGlvbigpKSB7CiAgICAgICAgICAgICAgICAg
bV9yZXN1bHRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFtZShtX3ZtLCBt
X293bmVyLCB2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSwgdmlzaXRvci0+Y29kZUJsb2NrKCks
IHZpc2l0b3ItPmJ5dGVjb2RlT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tG
cmFtZShtX3ZtLCBtX293bmVyLCB2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSwgdmlzaXRvci0+
Y29kZUJsb2NrKCksIHZpc2l0b3ItPmJ5dGVjb2RlSW5kZXgoKSkpOwogICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICBtX3Jlc3VsdHMuYXBwZW5kKAogICAgICAgICAgICAgICAg
ICAgICBTdGFja0ZyYW1lKG1fdm0sIG1fb3duZXIsIHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgp
KSk7CkBAIC00ODAsNyArNDgwLDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSGFuZGxlckluZm8q
IGZpbmRFeGNlcHRpb25IYW5kbGVyKFN0YWNrVmlzaXRvciYgdmlzaXRvciwgQ28KICAgICBpZiAo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKICAgICAgICAg
ZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygp
OwogICAgIGVsc2UKLSAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5i
eXRlY29kZU9mZnNldCgpOworICAgICAgICBleGNlcHRpb25IYW5kbGVySW5kZXggPSBjYWxsRnJh
bWUtPmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKTsKIAogICAgIHJldHVybiBjb2RlQmxvY2stPmhh
bmRsZXJGb3JJbmRleChleGNlcHRpb25IYW5kbGVySW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hp
Y2tlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tl
bi5jcHAKaW5kZXggOWNmZGEwOWIwNjlmNThlMjU3ZTA1NTg5MzZmZjc1YTI2NGVjYTcxNS4uOWNj
MTE4Y2Q3MmIwZmZmY2JlZTdjMDEzZGNjNTBmMTEwNTMxNTA0MiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcApAQCAtMzI5LDcg
KzMyOSw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiAgICAgICAgICAgICBib29sIGlzVGFpbERlbGV0ZWQgPSBmYWxzZTsKICAgICAg
ICAgICAgIEpTU2NvcGUqIHNjb3BlID0gbnVsbHB0cjsKICAgICAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAgICAgICAgIEpTVmFsdWUg
c2NvcGVWYWx1ZSA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSAmJiBjb2RlQmxvY2sgJiYg
Y29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkuaXNWYWxpZCgpCisgICAgICAgICAgICBKU1ZhbHVl
IHNjb3BlVmFsdWUgPSBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAmJiBjb2RlQmxvY2sgJiYg
Y29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkuaXNWYWxpZCgpCiAgICAgICAgICAgICAgICAgPyBj
YWxsRnJhbWUtPnJlZ2lzdGVycygpW2NvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLm9mZnNldCgp
XS5qc1ZhbHVlKCkKICAgICAgICAgICAgICAgICA6IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAg
ICBpZiAoIXNjb3BlVmFsdWUuaXNVbmRlZmluZWQoKSAmJiBjb2RlQmxvY2stPndhc0NvbXBpbGVk
V2l0aERlYnVnZ2luZ09wY29kZXMoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCA4MjliZjBjMzgxNGQ4YjFiMjI1YjRj
MjU1NDRkNjliMmFiNzZmNWYxLi44YzJkNWE1ZDIyYTZhNGVlZDc3OWY2ZDY4MWUyZTdkZWVhNzU5
YWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcApAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkTm9u
SW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlT3JpZ2luKiBjb2RlT3JpCiAg
ICAgaWYgKGNhbGxGcmFtZS0+aXNBbnlXYXNtQ2FsbGVlKCkpIHsKICAgICAgICAgbV9mcmFtZS5t
X2lzV2FzbUZyYW1lID0gdHJ1ZTsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IG51bGxw
dHI7Ci0gICAgICAgIG1fZnJhbWUubV9ieXRlY29kZU9mZnNldCA9IDA7CisgICAgICAgIG1fZnJh
bWUubV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOwogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKICAgICAgICAgQ2FsbGVlQml0cyBiaXRzID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKICAg
ICAgICAgaWYgKGJpdHMuaXNXYXNtKCkpCkBAIC0xNzgsOSArMTc4LDkgQEAgdm9pZCBTdGFja1Zp
c2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmln
aW4qIGNvZGVPcmkKICNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fZnJhbWUubV9jb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNv
ZGVPZmZzZXQgPSAhbV9mcmFtZS5jb2RlQmxvY2soKSA/IDAKKyAgICAgICAgbV9mcmFtZS5tX2J5
dGVjb2RlSW5kZXggPSAhbV9mcmFtZS5jb2RlQmxvY2soKSA/IEJ5dGVjb2RlSW5kZXgoMCkKICAg
ICAgICAgICAgIDogY29kZU9yaWdpbiA/IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKQotICAg
ICAgICAgICAgOiBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCk7CisgICAgICAgICAgICA6IGNh
bGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpOwogCiAgICAgfQogCkBAIC0yMTQsNyArMjE0LDcgQEAg
dm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IENvZGVPcmlnaW4qIGNvZGVPcmlnaW4KICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9mcmFt
ZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGlu
ZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7Ci0gICAgICAgIG1fZnJhbWUubV9i
eXRlY29kZU9mZnNldCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgbV9m
cmFtZS5tX2J5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7CiAKICAg
ICAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVGb3JDYWxs
RnJhbWUoY2FsbEZyYW1lKTsKICAgICAgICAgbV9mcmFtZS5tX2NhbGxlZSA9IGNhbGxlZTsKQEAg
LTQyNCw3ICs0MjQsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmNvbXB1dGVMaW5lQW5k
Q29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKQogdm9pZCBTdGFja1Zpc2l0
b3I6OkZyYW1lOjpyZXRyaWV2ZUV4cHJlc3Npb25JbmZvKGludCYgZGl2b3QsIGludCYgc3RhcnRP
ZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikg
Y29uc3QKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwot
ICAgIGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQoKSwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQsIGxpbmUsIGNvbHVtbik7CisgICAgY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5l
eHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgoKSwgZGl2b3QsIHN0
YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CiAgICAgZGl2b3QgKz0gY29kZUJs
b2NrLT5zb3VyY2VPZmZzZXQoKTsKIH0KIApAQCAtNDg2LDggKzQ4Niw4IEBAIHZvaWQgU3RhY2tW
aXNpdG9yOjpGcmFtZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBJbmRlbnRlciBpbmRlbnQsIFdU
Rjo6RnVuY3Rpb248CiAgICAgICAgICAgICBpbmRlbnQrKzsKIAogICAgICAgICAgICAgaWYgKGNh
bGxGcmFtZS0+Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSkgewotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgp
OwotICAgICAgICAgICAgICAgIG91dC5wcmludChpbmRlbnQsICJieXRlY29kZU9mZnNldDogIiwg
Ynl0ZWNvZGVPZmZzZXQsICIgb2YgIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCks
ICJcbiIpOworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNh
bGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgICAgIG91dC5wcmludChpbmRl
bnQsIGJ5dGVjb2RlSW5kZXgsICIgb2YgIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXpl
KCksICJcbiIpOwogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoaW5kZW50LCAiaGFzQ29kZU9yaWdpbnM6ICIsIGNvZGVC
bG9jay0+aGFzQ29kZU9yaWdpbnMoKSwgIlxuIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKaW5kZXggZjE5NDI3ZDQ4NmU2Mzg1ZDRjOGNj
ZjQzOTJmZDJlZDFkNzNlNjRlYi4uNjhiMDk3MjFmYTg0ZjYyNDc1OGQ2Zjg2ZWRiY2U1NTQ2MmRh
ZGJmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNr
VmlzaXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zp
c2l0b3IuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJ5
dGVjb2RlSW5kZXguaCIKICNpbmNsdWRlICJDYWxsZWVCaXRzLmgiCiAjaW5jbHVkZSAiV2FzbUlu
ZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CkBAIC02NCw3ICs2NSw3IEBA
IHB1YmxpYzoKICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FsbGVyRnJhbWU7IH0KICAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25zdCB7IHJl
dHVybiBtX2NhbGxlZTsgfQogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZUJsb2NrOyB9Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9ieXRlY29kZU9mZnNldDsgfQorICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUoKSBjb25zdCB7CiAjaWYgRU5BQkxF
KERGR19KSVQpCiAgICAgICAgICAgICByZXR1cm4gbV9pbmxpbmVDYWxsRnJhbWU7CkBAIC0xMjAs
NyArMTIxLDcgQEAgcHVibGljOgogICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAg
ICAgICBzaXplX3QgbV9pbmRleDsKICAgICAgICAgc2l6ZV90IG1fYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXM7Ci0gICAgICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIEJ5
dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwogICAgICAgICBib29sIG1fY2FsbGVySXNFbnRy
eUZyYW1lIDogMTsKICAgICAgICAgYm9vbCBtX2lzV2FzbUZyYW1lIDogMTsKICAgICAgICAgV2Fz
bTo6SW5kZXhPck5hbWUgbV93YXNtRnVuY3Rpb25JbmRleE9yTmFtZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAppbmRleCBkNDQ4OTdkNjQ3MDI2ODA4NWM4NjJhMmM4YTc1NWZiY2E2M2Y0ZWRh
Li4xZmY4YjQ3MDQxZGZkZWUzZDQwY2E0Yjg0MTUyOGI2YmMwYjA1YzNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCkBAIC03NCwxNiArNzQsMTUgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJl
dHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxD
RnUKICAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigp
KTsKIH0KIAotSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpCitKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAg
OiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKICAgICAsIG1faW50ZXJwcmV0ZXIodm0u
aW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLnNpemUoKSA6IDApCi0gICAgLCBtX2J5dGVjb2RlT2Zmc2V0KHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyKHZtKQogICAgICwgbV9jYW5CZU9wdGltaXplZChmYWxzZSkKICAgICAsIG1fc2hvdWxkRW1p
dFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fc2hvdWxkVXNlSW5kZXhNYXNraW5nKE9wdGlvbnM6
OmVuYWJsZVNwZWN0cmVNaXRpZ2F0aW9ucygpKQotICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29k
ZU9mZnNldChsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkKKyAgICAsIG1fbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogewogfQogCkBAIC0xMDAs
MTEgKzk5LDExIEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAgICAg
SnVtcExpc3Qgc2tpcE9wdGltaXplOwogICAgIAogICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJh
bmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlcklu
Y3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NP
ZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7Ci0gICAgQVNTRVJUKCFtX2J5dGVjb2RlT2Zmc2V0KTsK
KyAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5Q2FsbGVl
U2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS50b3BFbnRyeUZyYW1lKTsKIAotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUs
ICZ2bSgpLCBtX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9w
dGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBza2lwT3B0aW1p
emUuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc2tp
cE9wdGltaXplLmxpbmsodGhpcyk7CkBAIC0xMzgsMTIgKzEzNywxMiBAQCB2b2lkIEpJVDo6YXNz
ZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKIH0KIAogI2RlZmluZSBORVhUX09QQ09ERShuYW1lKSBc
Ci0gICAgbV9ieXRlY29kZU9mZnNldCArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsgXAor
ICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyBcCiAgICAgYnJlYWs7CiAKICNkZWZp
bmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKLSAgICAg
ICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQgPj0gc3RhcnRCeXRlY29kZU9mZnNldCkgeyBcCisgICAg
ICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7IFwKICAgICAg
ICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0
aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsgXAogICAgICAgICB9IFwKQEAgLTE1Miw3ICsxNTEsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3Rh
Y2tQb2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJTkVfT1AobmFtZSkgXAogICAgIGNhc2Ug
bmFtZTogeyBcCi0gICAgICAgIGlmIChtX2J5dGVjb2RlT2Zmc2V0ID49IHN0YXJ0Qnl0ZWNvZGVP
ZmZzZXQpIHsgXAorICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJ
bmRleCkgeyBcCiAgICAgICAgICAgICBlbWl0XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24pOyBc
CiAgICAgICAgIH0gXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXApAQCAtMTkyLDggKzE5
MSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICBtX2NhbGxMaW5r
SW5mb0luZGV4ID0gMDsKIAogICAgIFZNJiB2bSA9IG1fY29kZUJsb2NrLT52bSgpOwotICAgIHVu
c2lnbmVkIHN0YXJ0Qnl0ZWNvZGVPZmZzZXQgPSAwOwotICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5
dGVjb2RlT2Zmc2V0ICYmIChtX2NvZGVCbG9jay0+aW5oZXJpdHM8UHJvZ3JhbUNvZGVCbG9jaz4o
dm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0czxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSkp
KSB7CisgICAgQnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7CisgICAgaWYgKG1f
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRzPFByb2dy
YW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jaz4odm0pKSkgewogICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9wdGltaXph
dGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0bHkgb25jZS4K
ICAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBvdGhlcndpc2Uu
IFdoZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8KICAgICAgICAgLy8gZG8gT1NS
IGVudHJ5IGludG8gdGhlIGJhc2VsaW5lIEpJVCBpbiBhIGxvb3AsIGl0IHdpbGwgcGFzcyBpbiB0
aGUgYnl0ZWNvZGUgb2Zmc2V0IGl0CkBAIC0yMDIsMjggKzIwMSwyOCBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAgICAgLy8gV2Ugb25seSBib3RoZXIgYnVpbGRp
bmcgdGhlIGJ5dGVjb2RlIGdyYXBoIGlmIGl0IGNvdWxkIHNhdmUgdGltZSBhbmQgZXhlY3V0YWJs
ZQogICAgICAgICAvLyBtZW1vcnkuIFdlIHBpY2sgYW4gYXJiaXRyYXJ5IG9mZnNldCB3aGVyZSB3
ZSBkZWVtIHRoaXMgaXMgcHJvZml0YWJsZS4KLSAgICAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVPZmZzZXQgPj0gMjAwKSB7CisgICAgICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkgPj0gMjAwKSB7CiAgICAgICAgICAgICAvLyBBcyBhIHNpbXBsaWZpY2F0
aW9uLCB3ZSBkb24ndCBmaW5kIGFsbCBieXRlY29kZSByYW5nZXMgdGhhdCBhcmUgdW5yZWFjaGFi
bGUuCiAgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGZpbmQgdGhlIG1pbmltdW0gYnl0
ZWNvZGUgb2Zmc2V0IHRoYXQgaXMgcmVhY2hhYmxlLCBhbmQKICAgICAgICAgICAgIC8vIGNvbXBp
bGUgY29kZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0IG9ud2FyZHMuCiAKICAgICAgICAgICAg
IEJ5dGVjb2RlR3JhcGggZ3JhcGgobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKSk7Ci0gICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmlu
ZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0
KTsKKyAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFz
aWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jayk7CiAKICAgICAgICAgICAg
IEdyYXBoTm9kZVdvcmtsaXN0PEJ5dGVjb2RlQmFzaWNCbG9jayo+IHdvcmtsaXN0OwotICAgICAg
ICAgICAgc3RhcnRCeXRlY29kZU9mZnNldCA9IFVJTlRfTUFYOworICAgICAgICAgICAgc3RhcnRC
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAgICAgd29ya2xpc3QucHVz
aChibG9jayk7CiAKICAgICAgICAgICAgIHdoaWxlIChCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2Nr
ID0gd29ya2xpc3QucG9wKCkpIHsKLSAgICAgICAgICAgICAgICBzdGFydEJ5dGVjb2RlT2Zmc2V0
ID0gc3RkOjptaW4oc3RhcnRCeXRlY29kZU9mZnNldCwgYmxvY2stPmxlYWRlck9mZnNldCgpKTsK
KyAgICAgICAgICAgICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KHN0ZDo6
bWluKHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgYmxvY2stPmxlYWRlck9mZnNldCgpKSk7
CiAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaEFsbChibG9jay0+c3VjY2Vzc29ycygpKTsK
IAogICAgICAgICAgICAgICAgIC8vIEFsc28gYWRkIGNhdGNoIGJsb2NrcyBmb3IgYnl0ZWNvZGVz
IHRoYXQgdGhyb3cuCiAgICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZkV4
Y2VwdGlvbkhhbmRsZXJzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IGJsb2NrLT5sZWFkZXJPZmZzZXQoKTsgYnl0ZWNvZGVPZmZzZXQgPCBi
bG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBibG9jay0+dG90YWxMZW5ndGgoKTspIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoYnl0ZWNv
ZGVPZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGhhbmRsZXIgPSBt
X2NvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmhh
bmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGdyYXBoLmZpbmRCYXNpY0Js
b2NrV2l0aExlYWRlck9mZnNldChoYW5kbGVyLT50YXJnZXQpKTsKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gaW5zdHJ1Y3Rpb24tPnNpemUoKTsKQEAgLTIzMywy
OSArMjMyLDI5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
fQogICAgIH0KIAotICAgIGZvciAobV9ieXRlY29kZU9mZnNldCA9IDA7IG1fYnl0ZWNvZGVPZmZz
ZXQgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQg
PT0gc3RhcnRCeXRlY29kZU9mZnNldCAmJiBzdGFydEJ5dGVjb2RlT2Zmc2V0ID4gMCkgeworICAg
IGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CisgICAgICAgIGlmIChtX2J5dGVjb2Rl
SW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1
Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgogICAgICAgICAgICAgLy8gTGV0
J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4KICAgICAgICAgICAg
IGJyZWFrcG9pbnQoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikK
LSAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1haW5QYXRoKG1fYnl0
ZWNvZGVPZmZzZXQsIGxhYmVsKCkpOwotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVPZmZzZXQpLnB0cigpOwot
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCAi
cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyBnb25lIGJhZCBAICVkIiwgbV9ieXRlY29kZU9mZnNldCk7
CisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCku
cHRyKCk7CisgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CiAKLSAg
ICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpKTsKKyAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwog
CiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVPZmZz
ZXQgPiAwKSAvLyBBdm9pZCB0aGUgb3ZlcmhlYWQgb2Ygc2FtcGxpbmcgb3BfZW50ZXIgdHdpY2Uu
CisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPiAwKSAvLyBBdm9pZCB0aGUgb3ZlcmhlYWQg
b2Ygc2FtcGxpbmcgb3BfZW50ZXIgdHdpY2UuCiAgICAgICAgICAgICBzYW1wbGVJbnN0cnVjdGlv
bihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogI2VuZGlmCiAKLSAgICAgICAgbV9sYWJlbHNbbV9ieXRl
Y29kZU9mZnNldF0gPSBsYWJlbCgpOworICAgICAgICBtX2xhYmVsc1ttX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCldID0gbGFiZWwoKTsKIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2Up
Ci0gICAgICAgICAgICBkYXRhTG9nRigiT2xkIEpJVCBlbWl0dGluZyBjb2RlIGZvciBiYyMldSBh
dCBvZmZzZXQgMHglbHguXG4iLCBtX2J5dGVjb2RlT2Zmc2V0LCAobG9uZylkZWJ1Z09mZnNldCgp
KTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiT2xkIEpJVCBlbWl0dGluZyBjb2RlIGZvciAiLCBt
X2J5dGVjb2RlSW5kZXgsICIgYXQgb2Zmc2V0ICIsIChsb25nKWRlYnVnT2Zmc2V0KCkpOwogCiAg
ICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgp
OwogCkBAIC0yNjMsMTMgKzI2MiwxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgICAgICBhZGQ2NCgKICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoMSks
CiAgICAgICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29tcGlsYXRpb24tPmV4ZWN1dGlv
bkNvdW50ZXJGb3IoUHJvZmlsZXI6Ok9yaWdpblN0YWNrKFByb2ZpbGVyOjpPcmlnaW4oCi0gICAg
ICAgICAgICAgICAgICAgIG1fY29tcGlsYXRpb24tPmJ5dGVjb2RlcygpLCBtX2J5dGVjb2RlT2Zm
c2V0KSkpLT5hZGRyZXNzKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jb21waWxhdGlvbi0+
Ynl0ZWNvZGVzKCksIG1fYnl0ZWNvZGVJbmRleCkpKS0+YWRkcmVzcygpKSk7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIGlmIChPcHRpb25zOjplYWdlcmx5VXBkYXRlVG9wQ2FsbEZyYW1l
KCkpCiAgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKIAotICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogI2lmIEVOQUJMRShNQVNN
X1BST0JFKQogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4
ZWN1dGlvbigpKSkgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVC
bG9jazsKQEAgLTQ3Miw3ICs0NzEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAKICNpZm5kZWYgTkRFQlVHCiAgICAgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3Vh
cmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCi0gICAgbV9ieXRlY29kZU9mZnNldCA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KCk7CiAjZW5kaWYKIH0KIApAQCAtNDk1LDI4ICs0OTQsMjggQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsK
ICAgICAKICAgICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1f
c2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAg
IG1fYnl0ZWNvZGVPZmZzZXQgPSBpdGVyLT50bzsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0g
aXRlci0+dG87CiAKLSAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRl
bShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpKTsKKyAgICAgICAgbV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIHVuc2lnbmVkIGZpcnN0VG8gPSBtX2J5dGVjb2RlT2Zm
c2V0OworICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAK
LSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlT2Zmc2V0KS5wdHIoKTsKKyAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICAKICAgICAgICAg
UmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGUgPSAwOwogICAgICAgICBpZiAoc2hvdWxk
RW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgcmFyZUNhc2VQcm9maWxlID0gbV9jb2RlQmxv
Y2stPmFkZFJhcmVDYXNlUHJvZmlsZShtX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIHJh
cmVDYXNlUHJvZmlsZSA9IG1fY29kZUJsb2NrLT5hZGRSYXJlQ2FzZVByb2ZpbGUobV9ieXRlY29k
ZUluZGV4KTsKIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAg
ICBkYXRhTG9nRigiT2xkIEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9yIGJjIyV1IGF0IG9mZnNl
dCAweCVseC5cbiIsIG1fYnl0ZWNvZGVPZmZzZXQsIChsb25nKWRlYnVnT2Zmc2V0KCkpOworICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJPbGQgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgIiwgbV9i
eXRlY29kZUluZGV4LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgpKTsKIAogICAg
ICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0
Rm9yQnl0ZWNvZGVTbG93UGF0aChtX2J5dGVjb2RlT2Zmc2V0LCBsYWJlbCgpKTsKKyAgICAgICAg
ICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZVNsb3dQYXRoKG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSwgbGFiZWwoKSk7CiAKICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKICAgICAgICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKICAg
ICAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpOwotICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlT2Zm
c2V0OworICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJs
b2NrOwogICAgICAgICAgICAgcHJvYmUoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7CiAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSBTTE9XICIs
IG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIg
QCAiLCBjb2RlQmxvY2spOwpAQCAtNjIzLDcgKzYyMiw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAKICNpZm5kZWYgTkRFQlVHCiAgICAgLy8gUmVzZXQgdGhpcywgaW4g
b3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCi0gICAgbV9ieXRlY29kZU9mZnNl
dCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICBtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KCk7CiAjZW5kaWYKIH0KIApAQCAtNjc0LDcgKzY3Myw3IEBA
IHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CiAgICAgfQogICAgIAotICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbigw
LCBudWxscHRyKSk7CisgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpKTsKIAogICAgIExhYmVsIGVudHJ5
TGFiZWwodGhpcyk7CiAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQpAQCAtNzExLDcgKzcxMCw3IEBA
IHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogICAgIGVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CiAKICAgICBpZiAo
bV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7Ci0gICAgICAgIEFTU0VS
VChtX2J5dGVjb2RlT2Zmc2V0ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSk7CisgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgaWYgKHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICAgICAgZm9yIChpbnQgYXJndW1lbnQgPSAwOyBh
cmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAg
ICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0
byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KQEAgLTc0MSw3ICs3NDAsNyBAQCB2
b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9y
dCkKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBD
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKICAgICBzdGFj
a092ZXJmbG93LmxpbmsodGhpcyk7Ci0gICAgbV9ieXRlY29kZU9mZnNldCA9IDA7CisgICAgbV9i
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0
PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRp
b24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2NrKTsKQEAgLTc1
Nyw3ICs3NTYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCksIHJlZ1QxKTsKICAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKS5saW5r
VG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAKLSAgICAgICAgbV9ieXRlY29kZU9mZnNldCA9IDA7Cisg
ICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAKICAgICAgICAgaWYg
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtNzY5LDcgKzc2OCw3IEBAIHZvaWQgSklU
Ojpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAg
ICAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAg
ICAgbV9ieXRlY29kZU9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMu
CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsgLy8gUmVzZXQgdGhp
cywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCiAjZW5kaWYKIAogICAg
ICAgICBqdW1wKGJlZ2luTGFiZWwpOwpAQCAtODA5LDcgKzgwOCw3IEBAIENvbXBpbGF0aW9uUmVz
dWx0IEpJVDo6bGluaygpCiAKICAgICAvLyBUcmFuc2xhdGUgdlBDIG9mZnNldHMgaW50byBhZGRy
ZXNzZXMgaW4gSklUIGdlbmVyYXRlZCBjb2RlLCBmb3Igc3dpdGNoIHRhYmxlcy4KICAgICBmb3Ig
KGF1dG8mIHJlY29yZCA6IG1fc3dpdGNoZXMpIHsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQgPSByZWNvcmQuYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gcmVjb3JkLmJ5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAKICAgICAgICAgaWYgKHJl
Y29yZC50eXBlICE9IFN3aXRjaFJlY29yZDo6U3RyaW5nKSB7CiAgICAgICAgICAgICBBU1NFUlQo
cmVjb3JkLnR5cGUgPT0gU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUgfHwgcmVjb3JkLnR5cGUgPT0g
U3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpOyAKQEAgLTg5NCw3ICs4OTMsNyBAQCBDb21waWxhdGlv
blJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIEpJVENvZGVNYXAgaml0Q29kZU1hcDsKICAgICBmb3Ig
KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5z
aXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKICAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2Rl
T2Zmc2V0XS5pc1NldCgpKQotICAgICAgICAgICAgaml0Q29kZU1hcC5hcHBlbmQoYnl0ZWNvZGVP
ZmZzZXQsIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0
ZWNvZGVPZmZzZXRdKSk7CisgICAgICAgICAgICBqaXRDb2RlTWFwLmFwcGVuZChCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFn
PihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAgICAgaml0Q29kZU1hcC5maW5p
c2goKTsKICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChXVEZNb3ZlKGppdENvZGVNYXAp
KTsKQEAgLTk0OSw3ICs5NDgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25I
YW5kbGVycygpCiAgICAgICAgIC8vIG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9t
Q2FsbGVyRnJhbWUgaXMgcGFzc2VkIG9uZSBhcmd1bWVudCwgdGhlIFZNKi4KICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAg
cHJlcGFyZUNhbGxPcGVyYXRpb24odm0oKSk7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxS
ZWNvcmQoY2FsbChPcGVyYXRpb25QdHJUYWcpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhj
ZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQo
Q2FsbFJlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIEJ5dGVjb2RlSW5kZXgoKSwgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyRnJv
bUNhbGxlckZyYW1lKSkpOwogICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwog
ICAgIH0KIApAQCAtOTYyLDcgKzk2MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2Vw
dGlvbkhhbmRsZXJzKCkKICAgICAgICAgLy8gb3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxl
ciBpcyBwYXNzZWQgb25lIGFyZ3VtZW50LCB0aGUgVk0qLgogICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoJnZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBwcmVwYXJlQ2Fs
bE9wZXJhdGlvbih2bSgpKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxs
KE9wZXJhdGlvblB0clRhZyksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwg
RnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5k
bGVyKSkpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwoT3BlcmF0aW9u
UHRyVGFnKSwgQnl0ZWNvZGVJbmRleCgpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSk7CiAgICAgICAgIGp1bXBUb0V4Y2VwdGlv
bkhhbmRsZXIodm0oKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggMTk3
NzlhM2MyM2NjY2Q1NzAyMTdiZDQ0N2E0NzJiYzEwODI4YWU3MC4uZDQ1ZmMwMzUwY2IxMjhkNmVi
MTRjNWM3OTA4NDZiYjJkYjFmMTkzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC03MCwx
NiArNzAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb207Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0OworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiAgICAgICAg
IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY2FsbGVlOwogCiAgICAgICAgIENhbGxSZWNv
cmQoKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBDYWxsUmVjb3JkKE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGZyb20sIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+IGNhbGxlZSkKKyAgICAgICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBmcm9tLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4gY2FsbGVlKQogICAgICAgICAgICAgOiBmcm9tKGZyb20pCi0gICAgICAg
ICAgICAsIGJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICAgICAgLCBieXRl
Y29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICAsIGNhbGxlZShjYWxsZWUpCiAg
ICAgICAgIHsKICAgICAgICAgfQpAQCAtOTgsOSArOTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZnJvbTsKLSAgICAgICAgdW5zaWduZWQgdG87CisgICAgICAgIEJ5dGVjb2RlSW5kZXggdG87CiAg
ICAgICAgIAotICAgICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIHVu
c2lnbmVkIHQpCisgICAgICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwg
Qnl0ZWNvZGVJbmRleCB0KQogICAgICAgICAgICAgOiBmcm9tKGYpCiAgICAgICAgICAgICAsIHRv
KHQpCiAgICAgICAgIHsKQEAgLTEyMSwyMCArMTIxLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgU3RyaW5nSnVtcFRhYmxlKiBzdHJpbmdKdW1wVGFibGU7CiAgICAgICAgIH0ganVt
cFRhYmxlOwogCi0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OworICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiAgICAgICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQ7
CiAKLSAgICAgICAgU3dpdGNoUmVjb3JkKFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlLCB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgdW5zaWduZWQgZGVmYXVsdE9mZnNldCwgVHlwZSB0eXBlKQor
ICAgICAgICBTd2l0Y2hSZWNvcmQoU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUsIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgZGVmYXVsdE9mZnNldCwgVHlwZSB0eXBlKQog
ICAgICAgICAgICAgOiB0eXBlKHR5cGUpCi0gICAgICAgICAgICAsIGJ5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0KQorICAgICAgICAgICAgLCBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
CiAgICAgICAgICAgICAsIGRlZmF1bHRPZmZzZXQoZGVmYXVsdE9mZnNldCkKICAgICAgICAgewog
ICAgICAgICAgICAgdGhpcy0+anVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZSA9IGp1bXBUYWJsZTsK
ICAgICAgICAgfQogCi0gICAgICAgIFN3aXRjaFJlY29yZChTdHJpbmdKdW1wVGFibGUqIGp1bXBU
YWJsZSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQpCisg
ICAgICAgIFN3aXRjaFJlY29yZChTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0KQogICAgICAgICAgICAg
OiB0eXBlKFN0cmluZykKLSAgICAgICAgICAgICwgYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQpCisgICAgICAgICAgICAsIGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAg
ICAgICwgZGVmYXVsdE9mZnNldChkZWZhdWx0T2Zmc2V0KQogICAgICAgICB7CiAgICAgICAgICAg
ICB0aGlzLT5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlID0ganVtcFRhYmxlOwpAQCAtMTQ0LDcg
KzE0NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0cnVjdCBCeVZhbENvbXBpbGF0aW9uSW5m
byB7CiAgICAgICAgIEJ5VmFsQ29tcGlsYXRpb25JbmZvKCkgeyB9CiAgICAgICAgIAotICAgICAg
ICBCeVZhbENvbXBpbGF0aW9uSW5mbyhCeVZhbEluZm8qIGJ5VmFsSW5mbywgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbm90SW5kZXhKdW1wLCBN
YWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcCwgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBkb25lVGFyZ2V0LCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbmV4dEhvdFBhdGhUYXJnZXQpCisg
ICAgICAgIEJ5VmFsQ29tcGlsYXRpb25JbmZvKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG5vdElu
ZGV4SnVtcCwgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXAsIEpJVEFy
cmF5TW9kZSBhcnJheU1vZGUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgZG9uZVRhcmdldCwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG5leHRIb3RQYXRo
VGFyZ2V0KQogICAgICAgICAgICAgOiBieVZhbEluZm8oYnlWYWxJbmZvKQogICAgICAgICAgICAg
LCBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICAsIG5vdEluZGV4SnVt
cChub3RJbmRleEp1bXApCkBAIC0xNTcsNyArMTU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIH0KIAogICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbzsKLSAgICAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OwogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBub3RJbmRleEp1bXA7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOwogICAgICAgICBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlOwpAQCAtMTkyLDcgKzE5Miw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0g
MjU2OwogCiAgICAgcHVibGljOgotICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gMCwgdW5z
aWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSAwKTsKKyAgICAgICAgSklUKFZNJiwg
Q29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVP
ZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwogCiAgICAgICAgIFZN
JiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6dm0oKTsgfQpAQCAtMjAyLDcgKzIwMiw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZG9NYWluVGhyZWFkUHJlcGFyYXRp
b25CZWZvcmVDb21waWxlKCk7CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25S
ZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMCkKKyAgICAgICAgc3Rh
dGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zm
c2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEpJ
VCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsK
ICAgICAgICAgfQpAQCAtMjEwLDI4ICsyMTAsMjggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxv
Y2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkK
ICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAg
ICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAg
ICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsK
ICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5VmFsKGxvY2tlciwgYnlWYWxJbmZv
LCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGlj
IHZvaWQgY29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKICAgICAgICAgewogICAgICAgICAg
ICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zm
c2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0Lm1fYnl0ZWNv
ZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2
YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywg
cHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQ
dXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewogICAgICAgICAg
ICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zm
c2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0Lm1fYnl0ZWNv
ZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2
YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5B
ZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMg
dm9pZCBjb21waWxlRGlyZWN0UHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2Nr
ZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAg
ICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAg
ICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsRGlyZWN0Pihs
b2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQog
CkBAIC0yMzksMTQgKzIzOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZv
aWQgY29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IFB1dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogICAgICAg
ICB7CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0
Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAg
ICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAg
ICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3A+KGJ5VmFsSW5m
bywgcmV0dXJuQWRkcmVzcywgcHV0S2luZCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewogICAgICAg
ICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2Rl
T2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0Lm1fYnl0
ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5w
cml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShieVZhbEluZm8sIHJldHVybkFkZHJlc3Ms
IGFycmF5TW9kZSk7CiAgICAgICAgIH0KIApAQCAtMjc3LDcgKzI3Nyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewogICAgICAgICAgICAgQ2FsbCBmdW5jdGlvbkNh
bGwgPSBjYWxsKE9wZXJhdGlvblB0clRhZyk7Ci0gICAgICAgICAgICBtX2NhbGxzLmFwcGVuZChD
YWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgZnVuY3Rpb24ucmV0YWdn
ZWQ8T3BlcmF0aW9uUHRyVGFnPigpKSk7CisgICAgICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxs
UmVjb3JkKGZ1bmN0aW9uQ2FsbCwgbV9ieXRlY29kZUluZGV4LCBmdW5jdGlvbi5yZXRhZ2dlZDxP
cGVyYXRpb25QdHJUYWc+KCkpKTsKICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAg
ICAgICAgIH0KIApAQCAtNzU0LDEyICs3NTQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICArK2l0ZXI7CiAgICAgICAgIH0KICAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgaW50IHZpcnR1YWxSZWdpc3Rl
ckluZGV4KTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVPZmZzZXQo
VmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgICAg
ICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVu
dHJ5PiYgc2xvd0Nhc2VzLAorICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwogCiAgICAgICAgIHZvaWQgbGlu
a0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVPZmZzZXQobV9z
bG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICAgICAgbGlua0FsbFNs
b3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRl
eCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpA
QCAtOTM0LDcgKzkzNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8Q2FsbENv
bXBpbGF0aW9uSW5mbz4gbV9jYWxsQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8SnVt
cFRhYmxlPiBtX2ptcFRhYmxlOwogCi0gICAgICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7
CisgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwogICAgICAgICBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+
IG1fc3dpdGNoZXM7CiAKQEAgLTk2OCw3ICs5NjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxk
RW1pdFByb2ZpbGluZzsKICAgICAgICAgYm9vbCBtX3Nob3VsZFVzZUluZGV4TWFza2luZzsKLSAg
ICAgICAgdW5zaWduZWQgbV9sb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCB7IDAgfTsKKyAgICAg
ICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRl
eCA3OGEzYTQxYTRiOTczMGJjOTNlZGY2ZWI1NDQ1NzgyZWNkMTc4ODMwLi5iZjIzMDZiY2U0ZDU2
ZjEwOWEwMzYxOGIzNDA3MmZjNTdjMGU1YWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENh
bGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKLSAgICBp
bmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVP
ZmZzZXQpLCByZWdUMCk7CisgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJP
ZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwogCkBAIC0yMjYsOCArMjI2LDggQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmQKICAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CiAK
ICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyks
IHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChpbnN0cnVjdGlvbik7Ci0gICAgdWlu
dDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZU9mZnNldCkuYml0cygp
OworICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGlu
c3RydWN0aW9uKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5
dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJp
dHMpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9s
ZHMgY2FsbGVlLgpAQCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kCiAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOwogCiAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9u
SW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChD
YWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
T2Zmc2V0KSwgcmVnVDApOworICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxU
eXBlRm9yKG9wY29kZUlEKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCByZWdUMCk7CiAg
ICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwog
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2lu
ID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGVNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZU1hcC5oCmluZGV4IGUxMzA4ZjMzNWI4YTM3NDc1OWE4ODcwMGQ4ZDNm
Zjc1NGU3OWY1OTcuLmUwNzU3MjRmOWRmZThiZDQ5NWMyMTNkNGM1ZjFiMjFmNWUxYmM0NjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZU1hcC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZU1hcC5oCkBAIC0zOCwzMSArMzgsMzEgQEAg
cHJpdmF0ZToKICAgICBzdHJ1Y3QgRW50cnkgewogICAgICAgICBFbnRyeSgpIHsgfQogCi0gICAg
ICAgIEVudHJ5KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+IGNvZGVMb2NhdGlvbikKKyAgICAgICAgRW50cnkoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4LCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24p
CiAgICAgICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAg
ICAgLCBtX2NvZGVMb2NhdGlvbihjb2RlTG9jYXRpb24pCiAgICAgICAgIHsgfQogCi0gICAgICAg
IGlubGluZSB1bnNpZ25lZCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29k
ZUluZGV4OyB9CisgICAgICAgIGlubGluZSBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KICAgICAgICAgaW5saW5lIENvZGVMb2Nh
dGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbigpIHsgcmV0dXJuIG1fY29kZUxv
Y2F0aW9uOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwogICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBtX2NvZGVMb2NhdGlvbjsKICAgICB9OwogCiBw
dWJsaWM6Ci0gICAgdm9pZCBhcHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29kZUxvY2F0
aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uKQorICAgIHZvaWQgYXBwZW5kKEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRh
Zz4gY29kZUxvY2F0aW9uKQogICAgIHsKICAgICAgICAgbV9lbnRyaWVzLmFwcGVuZCh7IGJ5dGVj
b2RlSW5kZXgsIGNvZGVMb2NhdGlvbiB9KTsKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaCgpIHsg
bV9lbnRyaWVzLnNocmlua1RvRml0KCk7IH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+IGZpbmQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QKKyAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBmaW5kKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCkgY29uc3QKICAgICB7CiAgICAgICAgIGF1dG8qIGVudHJ5ID0KLSAgICAgICAgICAgIGJpbmFy
eVNlYXJjaDxFbnRyeSwgdW5zaWduZWQ+KG1fZW50cmllcywKKyAgICAgICAgICAgIGJpbmFyeVNl
YXJjaDxFbnRyeSwgQnl0ZWNvZGVJbmRleD4obV9lbnRyaWVzLAogICAgICAgICAgICAgICAgIG1f
ZW50cmllcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgsIFtdIChFbnRyeSogZW50cnkpIHsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LT5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgICAg
ICAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fz
c2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5j
cHAKaW5kZXggMjBlZDM3ZmVlM2EwZjNjOTljNjI4MjU0NWE0YzEwYjNiYmUzNzljOS4uNzVmOWUy
NTE2MWI1MjM2YjMwYzgzZjMzNmQxZGVkZDEzNDhlMmRkZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcApAQCAtMTE4LDcgKzExOCw3IEBAIFZlY3Rv
cjxKSVREaXNhc3NlbWJsZXI6OkR1bXBlZE9wPiBKSVREaXNhc3NlbWJsZXI6OmR1bXBWZWN0b3JG
b3JJbnN0cnVjdGlvbnMoTGluCiAgICAgICAgIH0KICAgICAgICAgb3V0LnJlc2V0KCk7CiAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoRHVtcGVkT3AoKSk7Ci0gICAgICAgIHJlc3VsdC5sYXN0KCkuaW5k
ZXggPSBpOworICAgICAgICByZXN1bHQubGFzdCgpLmJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUlu
ZGV4KGkpOwogICAgICAgICBvdXQucHJpbnQocHJlZml4KTsKICAgICAgICAgbV9jb2RlQmxvY2st
PmR1bXBCeXRlY29kZShvdXQsIGkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG5leHRJbmRleCA9
IGkgKyAxOyA7IG5leHRJbmRleCsrKSB7CkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBKSVREaXNh
c3NlbWJsZXI6OnJlcG9ydEluc3RydWN0aW9ucyhQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBp
bGF0aW9uLCBMaW4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZHVtcGVkT3BzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIGNvbXBpbGF0aW9uLT5hZGREZXNjcmlwdGlvbigKICAgICAgICAg
ICAgIFByb2ZpbGVyOjpDb21waWxlZEJ5dGVjb2RlKAotICAgICAgICAgICAgICAgIFByb2ZpbGVy
OjpPcmlnaW5TdGFjayhQcm9maWxlcjo6T3JpZ2luKGNvbXBpbGF0aW9uLT5ieXRlY29kZXMoKSwg
ZHVtcGVkT3BzW2ldLmluZGV4KSksCisgICAgICAgICAgICAgICAgUHJvZmlsZXI6Ok9yaWdpblN0
YWNrKFByb2ZpbGVyOjpPcmlnaW4oY29tcGlsYXRpb24tPmJ5dGVjb2RlcygpLCBkdW1wZWRPcHNb
aV0uYnl0ZWNvZGVJbmRleCkpLAogICAgICAgICAgICAgICAgIGR1bXBlZE9wc1tpXS5kaXNhc3Nl
bWJseSkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURGlzYXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2Vt
Ymxlci5oCmluZGV4IDVlMzIyODYwMWEzNDAyNDdkYmZiMDhmNThlMmFjYjUyOTVmZWFhOWYuLjVh
NjI3NmFlYzg2MWJhN2RkMDBlMWE0MGM5NTBmNTEyYzE0ZTExZDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuaApAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRl
OgogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBmaXJzdFNsb3dMYWJlbCgpOwogICAgIAogICAg
IHN0cnVjdCBEdW1wZWRPcCB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4OworICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiAgICAgICAgIENTdHJpbmcgZGlzYXNzZW1ibHk7CiAg
ICAgfTsKICAgICBWZWN0b3I8RHVtcGVkT3A+IGR1bXBWZWN0b3JGb3JJbnN0cnVjdGlvbnMoTGlu
a0J1ZmZlciYsIGNvbnN0IGNoYXIqIHByZWZpeCwgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpMYWJl
bD4mIGxhYmVscywgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGVuZExhYmVsKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKaW5kZXggMzk1OWI4ZDUwODhjNGZhNzA3MGY0ZTU4NmFi
MDhjNzU0M2YxZDI4MS4uMTA4MDA0NjNiYWM5NzhhYWJiYjFhYWQ0ZWE1NmM2NzhjNzUxYjYwMSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKQEAgLTEwOSwyOSArMTA5LDIz
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCwKIAogQUxXQVlTX0lOTElORSBKSVQ6OkNhbGwgSklU
OjplbWl0TmFrZWRDYWxsKENvZGVQdHI8Tm9QdHJUYWc+IHRhcmdldCkKIHsKLSAgICBBU1NFUlQo
bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkp
OyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBh
dGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKyAgICBBU1NF
UlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4
IGlzIHNldC4KICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJDYWxsKCk7Ci0gICAgbV9jYWxscy5h
cHBlbmQoQ2FsbFJlY29yZChuYWtlZENhbGwsIG1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4odGFyZ2V0LnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkpKTsK
KyAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29kZUluZGV4
LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHRhcmdldC5yZXRhZ2dlZDxPcGVyYXRpb25Q
dHJUYWc+KCkpKSk7CiAgICAgcmV0dXJuIG5ha2VkQ2FsbDsKIH0KIAogQUxXQVlTX0lOTElORSBK
SVQ6OkNhbGwgSklUOjplbWl0TmFrZWRUYWlsQ2FsbChDb2RlUHRyPE5vUHRyVGFnPiB0YXJnZXQp
CiB7Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1
cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBp
cyBzZXQuCisgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAgICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyVGFpbENh
bGwoKTsKLSAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29k
ZU9mZnNldCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPih0YXJnZXQucmV0YWdnZWQ8T3Bl
cmF0aW9uUHRyVGFnPigpKSkpOworICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQobmFrZWRD
YWxsLCBtX2J5dGVjb2RlSW5kZXgsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4odGFyZ2V0
LnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkpKTsKICAgICByZXR1cm4gbmFrZWRDYWxsOwog
fQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjp1cGRhdGVUb3BDYWxsRnJhbWUoKQogewotICAg
IEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KG1fYnl0ZWNvZGVPZmZzZXQpID49IDApOwotI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVPZmZzZXQpLnB0cigpOwotICAg
IHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoaW5zdHJ1Y3Rpb24pLmJpdHMo
KTsKLSNlbHNlCi0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlT2Zmc2V0KS5iaXRzKCk7Ci0jZW5kaWYKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMg
PSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSk7CiAgICAgCiAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhpcyBpcyBu
ZWVkZWQuIEpJVE9wZXJhdGlvbnMgdGVuZCB0byB1cGRhdGUgdGhlIHRvcCBjYWxsIGZyYW1lIG9u
CkBAIC0xOTYsNDUgKzE5MCw0NSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJgogICAgICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxT
bG93Q2FzZXNGb3JCeXRlY29kZU9mZnNldChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNl
cywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0
ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQog
ewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRl
Y29kZU9mZnNldCkKKyAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+
dG8gPT0gYnl0ZWNvZGVJbmRleCkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCiBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCiB7Ci0gICAgQVNT
RVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29s
ZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisgICAg
QVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJ
bmRleCBpcyBzZXQuCiAKLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1w
LCBtX2J5dGVjb2RlT2Zmc2V0KSk7CisgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50
cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKIHsKLSAgICBBU1NFUlQobV9i
eXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOyAv
LyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKyAgICBBU1NFUlQo
bV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1
cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlz
IHNldC4KIAogICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0g
ICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVP
ZmZzZXQpKTsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwg
bV9ieXRlY29kZUluZGV4KSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dD
YXNlKCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zm
c2V0IGlzIHNldC4KKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KICAgICAKICAgICBKdW1wIGVtcHR5SnVtcDsg
Ly8gRG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZU9mZnNldCkpOwor
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29k
ZUluZGV4KSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1w
LCBpbnQgcmVsYXRpdmVPZmZzZXQpCiB7Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsgLy8gVGhpcyBtZXRob2Qgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRo
YXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7
IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBtX2pt
cFRhYmxlLmFwcGVuZChKdW1wVGFibGUoanVtcCwgbV9ieXRlY29kZU9mZnNldCArIHJlbGF0aXZl
T2Zmc2V0KSk7CisgICAgbV9qbXBUYWJsZS5hcHBlbmQoSnVtcFRhYmxlKGp1bXAsIG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0KSk7CiB9CiAKIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFkZEp1bXAoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0LCBpbnQgcmVsYXRpdmVP
ZmZzZXQpCiB7Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9m
ZnNldCBpcyBzZXQuCisgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBz
byB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKICAgICBmb3IgKGF1dG8mIGp1bXAgOiBq
dW1wTGlzdC5qdW1wcygpKQogICAgICAgICBhZGRKdW1wKGp1bXAsIHJlbGF0aXZlT2Zmc2V0KTsK
QEAgLTI0Miw5ICsyMzYsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRKdW1wKGNvbnN0
IEp1bXBMaXN0JiBqdW1wTGlzdCwgaW50IHJlbGF0aXZlT2Zmc2V0KQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNl
dCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0
IGlzIHNldC4KKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRo
YXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGp1bXAubGlua1RvKG1fbGFiZWxzW21f
Ynl0ZWNvZGVPZmZzZXQgKyByZWxhdGl2ZU9mZnNldF0sIHRoaXMpOworICAgIGp1bXAubGlua1Rv
KG1fbGFiZWxzW21fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0XSwgdGhp
cyk7CiB9CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCkBAIC01NzMsNyArNTY3LDcgQEAg
QUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGlu
dCBvcDIsIGludCYgb3AsIGludDMyX3QKIC8vIGdldCBhcmcgcHV0cyBhbiBhcmcgZnJvbSB0aGUg
U0YgcmVnaXN0ZXIgYXJyYXkgaW50byBhIGgvdyByZWdpc3RlcgogQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKIHsK
LSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNl
dC4KKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoc3JjKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAppbmRleCBmM2FiNTlhYTk0MjM0ZWE0MTI4ZWI0OTVjMzkyY2U5OTViNjYzMzJmLi4wZmM0MDY5
MjdmNzJkYmEwYmU1NzViYjhiMDBiOWY0Y2E2ZTZmYzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTE2OSw3ICsxNjksNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CiAKICAgICBKSVRJbnN0
YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksCisgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAogICAgICAgICByZWdUMCwgLy8gcmVzdWx0CiAgICAgICAgIHJlZ1QyLCAvLyB2
YWx1ZQpAQCAtNzIwLDkgKzcyMCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1
ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hv
dWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9T
UkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRl
eC5hc0JpdHMoKSk7CiAgICAgZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRy
eU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVPZmZzZXQp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZh
bHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBz
a2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhj
ZXB0aW9uSGFuZGxlclB0clRhZyk7CkBAIC03NjAsNyArNzYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAg
ICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRo
aXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZt
X2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CisgICAgbV9zd2l0Y2hlcy5hcHBlbmQo
U3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBT
d2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUo
KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CkBAIC03
NzcsNyArNzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZv
ciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAg
U2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKLSAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRh
YmxlLCBtX2J5dGVjb2RlT2Zmc2V0LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJh
Y3RlcikpOworICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1f
Ynl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsK
ICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwpAQCAtNzk0LDcgKzc5NCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0
cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFi
bGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlT2Zm
c2V0LCBkZWZhdWx0T2Zmc2V0KSk7CisgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3Jk
KGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKQEAgLTEwMzYs
NyArMTAzNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAKICAgICAgICAgY29weUNhbGxl
ZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCkudG9wRW50cnlGcmFtZSk7CiAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRp
bWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICAg
ICAgSnVtcCBub09wdGltaXplZEVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CiAgICAgICAgICAgICBKdW1w
IG9rID0gYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgcmV0dXJuVmFsdWVHUFIsIFRy
dXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMTAw
MCkpKSk7CkBAIC0xMzAxLDcgKzEzMDEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAg
TGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9m
ZnNldCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0
SG90UGF0aCkpOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGls
YXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJh
ZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpA
QCAtMTUwNCw3ICsxNTA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbnN1cmVT
aGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNj
cmF0Y2gyUmVnKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlLm9mZnNldCgpLCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNr
ZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9j
aywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSk7CisgICAgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBt
X2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlm
IC8vIFVTRShKU1ZBTFVFNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKaW5kZXggNDgzNDU1ZWM0YzdlYmNhZDBmZWM5YTNlNTc2ZWE2NmY5MmE3MDYx
YS4uZGZjMTU5ODk1MzlmYmJjN2M2ZTUzMDc2YTE2NWM2YzQ2NjA5YzZlYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMTU5LDcgKzE1OSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG8pOwog
ICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
T2Zmc2V0KSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKICAg
ICAgICAgcmVnVDIsIC8vIHZhbHVlCkBAIC05MTIsOSArOTEyLDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWYWx1ZVBy
b2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBp
ZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZU9mZnNldCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0o
KSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwg
bV9ieXRlY29kZU9mZnNldCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NS
RW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0
cygpKTsKICAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJu
VmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CkBAIC05NTIsNyArOTUyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
CiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNr
IHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9
ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIG1fc3dpdGNo
ZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1
bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CisgICAgbV9zd2l0Y2hlcy5hcHBl
bmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0
LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFi
bGUoKTsKIAogICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKQEAgLTk2OSw3
ICs5NjksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3
aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1w
bGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUs
IG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVy
KSk7CisgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRl
Y29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAg
IGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAogICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwg
cmVnVDEsIHJlZ1QwKTsKQEAgLTk4Niw3ICs5ODYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29k
ZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZU9mZnNldCwgZGVmYXVs
dE9mZnNldCkpOworICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUs
IG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCkpOwogCiAgICAgZW1pdExvYWQoc2NydXRp
bmVlLCByZWdUMSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3Ry
aW5nV2l0aFVua25vd25LZXlUeXBlLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgpOwpAQCAtMTE3NCw3ICsxMTc0LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsK
ICAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9u
SW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlw
ZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGls
YXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNv
ZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBu
ZXh0SG90UGF0aCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCmluZGV4IGIzM2MzMDY4MTAxMWZkZjFkNWMzZDEwMmQxYTdkZTBmNjQ1
NWI4NTAuLjYyYWU1ODg5MjRmMGNkYjUzYTk4NDE3NDk1ZGRiNTNlYzEwODc3MzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNzk3LDcgKzc5Nyw3
IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsCiAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgp
ICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFz
T2JqZWN0KGJhc2VWYWx1ZSk7CiAKLSAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVP
ZmZzZXQoKSk7CisgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBC
eXRlY29kZUluZGV4KDApKTsKICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5l
KTsKIAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZt
KTsKQEAgLTgyMSw3ICs4MjEsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5
VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbAogICAgICAgICBj
b25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGds
b2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXph
dGlvblJlc3VsdDo6R2l2ZVVwKTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8
ICFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJh
bWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0
ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICAgICAgQVNTRVJUKCFi
eVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4p
IHsKICAgICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZCA9PSBwcm9wZXJ0eU5h
bWUpIHsKQEAgLTg4Nyw3ICs4ODcsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURp
cmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChzdWJzY3JpcHQu
aXNJbnQzMigpKSB7Ci0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkp
OworICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJ
bmRleCgwKSk7CiAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CiAKICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CkBAIC05
MTAsNyArOTEwLDcgQEAgc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlEaXJlY3RQdXRCeVZh
bE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QKICAgICAgICAgY29uc3QgSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmpl
Y3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1
bHQ6OkdpdmVVcCk7CiAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJ
bmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRl
Y29kZU9mZnNldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5k
ZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZv
LT5zdHViUm91dGluZSk7CiAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQgPT0gcHJvcGVydHlOYW1lKSB7CkBA
IC0xNDc4LDExICsxNDc4LDEyIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5k
T3B0aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICBjb2RlQmxvY2st
Pm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKIH0KIAotU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uT3B0aW1pemUoVk0qIHZtUG9pbnRlciwgdWludDMyX3QgYnl0ZWNvZGVJ
bmRleCkKK1Nsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXpl
KFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXhCaXRzKQogewogICAgIFZNJiB2
bSA9ICp2bVBvaW50ZXI7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleDo6ZnJv
bUJpdHMoYnl0ZWNvZGVJbmRleEJpdHMpOwogCiAgICAgLy8gRGVmZXIgR0MgZm9yIGEgd2hpbGUg
c28gdGhhdCBpdCBkb2Vzbid0IHJ1biBiZXR3ZWVuIHdoZW4gd2UgZW50ZXIgaW50byB0aGlzCiAg
ICAgLy8gc2xvdyBwYXRoIGFuZCB3aGVuIHdlIGZpZ3VyZSBvdXQgdGhlIHN0YXRlIG9mIG91ciBj
b2RlIGJsb2NrLiBUaGlzIHByZXZlbnRzCkBAIC0xNzI0LDExICsxNzI1LDEyIEBAIFNsb3dQYXRo
UmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXplKFZNKiB2bVBvaW50ZXIs
IHVpbnQzMl90IGJ5dGVjCiAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgwLCAwKTsKIH0KIAotY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2goVk0qIHZtUG9pbnRl
ciwgdWludDMyX3QgYnl0ZWNvZGVJbmRleCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VHJ5T1NSRW50ZXJBdENhdGNoKFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXhC
aXRzKQogewogICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYnl0ZWNvZGVJbmRleEJpdHMpOwogCiAgICAgQ29kZUJs
b2NrKiBvcHRpbWl6ZWRSZXBsYWNlbWVudCA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnJlcGxh
Y2VtZW50KCk7CiAgICAgaWYgKFVOTElLRUxZKCFvcHRpbWl6ZWRSZXBsYWNlbWVudCkpCkBAIC0x
NzQ2LDExICsxNzQ4LDEyIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50
ZXJBdENhdGNoKFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjb2RlCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENh
dGNoQW5kVmFsdWVQcm9maWxlKFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgp
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVl
UHJvZmlsZShWTSogdm1Qb2ludGVyLCB1aW50MzJfdCBieXRlY29kZUluZGV4Qml0cykKIHsKICAg
ICBWTSYgdm0gPSAqdm1Qb2ludGVyOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXg6OmZyb21CaXRzKGJ5dGVjb2RlSW5kZXhCaXRzKTsKIAogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZFJl
cGxhY2VtZW50ID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwpAQCAtMTc2Nyw3ICsxNzcwLDcg
QEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1
ZVByb2ZpbGUoVk0qIHZtUG9pbnRlciwgdWkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
Y29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlT2Zmc2V0
KGJ5dGVjb2RlSW5kZXgpOworICAgIGNvZGVCbG9jay0+ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29t
cHV0ZWRGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5hczxPcENhdGNo
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsK
ICAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmQmIHByb2ZpbGUpIHsKQEAgLTE5MjcsNyArMTkzMCw3IEBAIHN0YXRpYyBKU1ZhbHVlIGdldEJ5
VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U1ZhCiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwog
ICAgICAgICAgICAgaWYgKGV4aXN0aW5nQXRvbVN0cmluZykgewogICAgICAgICAgICAgICAgIGlm
IChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+ZmFzdEdldE93blByb3BlcnR5
KHZtLCBzdHJ1Y3R1cmUsIGV4aXN0aW5nQXRvbVN0cmluZy5nZXQoKSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUlu
ZGV4KDApKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYg
YnlWYWxJbmZvLT5jYWNoZWRJZC5pbXBsKCkgIT0gZXhpc3RpbmdBdG9tU3RyaW5nKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTkzNyw3ICsxOTQwLDcgQEAgc3RhdGlj
IEpTVmFsdWUgZ2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTVmEKICAgICB9CiAKICAgICBpZiAoc3Vic2NyaXB0LmlzSW50MzIoKSkg
ewotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAg
QVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwog
ICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAKICAgICAgICAgaW50MzJf
dCBpID0gc3Vic2NyaXB0LmFzSW50MzIoKTsKQEAgLTE5NzgsNyArMTk4MSw3IEBAIHN0YXRpYyBK
U1ZhbHVlIGdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBKU1ZhCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5
S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1
ZSgpKTsKIAotICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFT
U0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKICAg
ICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIWlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0
KSB8fCBieVZhbEluZm8tPmNhY2hlZElkICE9IHByb3BlcnR5KSkKICAgICAgICAgYnlWYWxJbmZv
LT50b29rU2xvd1BhdGggPSB0cnVlOwogCkBAIC0xOTk2LDcgKzE5OTksNyBAQCBzdGF0aWMgT3B0
aW1pemF0aW9uUmVzdWx0IHRyeUdldEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbAogICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQu
aXNJbnQzMigpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFs
dWUpOwogCi0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOworICAg
ICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgw
KSk7CiAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CiAKICAgICAgICAg
aWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2JqZWN0LT5zdHJ1Y3R1cmUodm0pKSkgewpAQCAt
MjAyNCw3ICsyMDI3LDcgQEAgc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlHZXRCeVZhbE9w
dGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGwKICAgICAgICAgY29uc3Qg
SWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxP
YmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25S
ZXN1bHQ6OkdpdmVVcCk7CiAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5i
eXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2Rl
SW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJ
bmZvLT5zdHViUm91dGluZSk7CiAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQgPT0gcHJvcGVydHlOYW1lKSB7
CkBAIC0yMTA4LDcgKzIxMTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQoSlNHbG9iYWxPYmplY3QqCiAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAgICAgYm9vbCBkaWRPcHRpbWl6ZSA9
IGZhbHNlOwogCi0gICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CisgICAg
QVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwog
ICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CiAgICAgCiAgICAgaWYgKGhhc09w
dGltaXphYmxlSW5kZXhpbmcob2JqZWN0LT5zdHJ1Y3R1cmUodm0pKSkgewpAQCAtMjE4MSw3ICsy
MTg0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0
cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICAgICAgICAgcmVzdWx0ID0gYmFzZVZh
bHVlLmdldChnbG9iYWxPYmplY3QsIGkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKCFpc0pTU3RyaW5nKGJhc2VWYWx1
ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2Rl
SW5kZXgoMCkpOwogICAgICAgICAgICAgYXV0byBnZXRCeVZhbEZ1bmN0aW9uID0gYnlWYWxJbmZv
LT5zdHViUm91dGluZSA/IG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemU7CiAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBnZXRCeVZhbEZ1bmN0aW9uKTsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAppbmRleCA5ZWQyMzc3YzBhYTA0Y2YwMWVlM2JmZWJkNWM5MGRmZjRlYjI3MzAxLi5mZjM5
YjIyYjBmMTdkY2I4NDEwOTNiNDU1ZTg5NDZiMGI0Y2JkODc1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIAogICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsKIAotICAgIG1f
YnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5m
bywgbV9ieXRlY29kZU9mZnNldCwgbm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRv
bmUsIG5leHRIb3RQYXRoKSk7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlW
YWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4LCBi
YWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwogfQogCiBKSVRHZXRC
eUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBPcEdldEJ5VmFsIGJ5dGVjb2RlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEp1bXAmIGZhc3REb25lQ2FzZSwgSnVtcCYgc2xvd0RvbmVDYXNlLCBKdW1wTGlzdCYgc2xv
d0Nhc2VzKQpAQCAtMTQyLDcgKzE0Miw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0
R2V0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9wR2V0QnlWCiAgICAg
ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDEsIHJlZ1QzLCBwcm9wZXJ0
eU5hbWUsIHNsb3dDYXNlcyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBsKCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKIApAQCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICAKICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKICAgICAKLSAgICBtX2J5VmFsQ29tcGls
YXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNv
ZGVPZmZzZXQsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7
CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8o
YnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9m
aWxlLCBkb25lLCBkb25lKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMzc1LDcg
KzM3NSw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9wIGJ5dGVjCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNl
dCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgbV9jb2RlQmxvY2stPmVjbWFNb2RlKCksIHB1
dEtpbmQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBlbWl0V3JpdGVC
YXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlKTsKQEAgLTUwNSw3ICs1MDUsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCiAgICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpUcnlHZXQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNTQ0
LDcgKzU0NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldERpcmVjdCk7CiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CkBAIC01OTAsNyArNTkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgfQogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBpZGVu
dC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNz
VHlwZTo6R2V0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTYxNCw3ICs2MTQsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJl
Zyk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKICAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgQWNjZXNzVHlwZTo6R2V0V2l0aFRo
aXMpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNjc0LDcgKzY3NCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAgSklUUHV0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIG1fY29kZUJsb2NrLT5lY21h
TW9kZSgpLAogICAgICAgICBkaXJlY3QgPyBEaXJlY3QgOiBOb3REaXJlY3QpOwogICAgIApAQCAt
NzE0LDcgKzcxNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKICAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFdvcmtsaXN0LmNwcAppbmRleCBlOWI0NzJhYmY4ODQ4MDU0YWE3ZmJkYzljMmFj
ZGRlYjFhNzVjN2I5Li5jNjQ4ZDQ2YWY0YTFhNzhkYWY2MDcwMjQ0ZmE5ZDk5NTRjZjc3NmEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcApAQCAtMzYsOSArMzYs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSklUV29ya2xpc3Q6OlBsYW4gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUV29ya2xpc3Q6OlBsYW4+IHsKIHB1YmxpYzoKLSAgICBQ
bGFuKENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9m
ZnNldCkKKyAgICBQbGFuKENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQot
ICAgICAgICAsIG1faml0KGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCkKKyAgICAgICAgLCBtX2ppdChjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9j
aywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICB7CiAgICAgICAgIG1faml0LmRvTWFp
blRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgIH0KQEAgLTgzLDkgKzgzLDkg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pc0ZpbmlzaGVkQ29tcGlsaW5nOwogICAgIH0K
ICAgICAKLSAgICBzdGF0aWMgdm9pZCBjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCB1
bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkKKyAgICBzdGF0aWMgdm9pZCBjb21w
aWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBQbGFuIHBsYW4oY29kZUJsb2NrLCBsb29wT1NS
RW50cnlCeXRlY29kZU9mZnNldCk7CisgICAgICAgIFBsYW4gcGxhbihjb2RlQmxvY2ssIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBwbGFuLmNvbXBpbGVJblRocmVhZCgpOwog
ICAgICAgICBwbGFuLmZpbmFsaXplKCk7CiAgICAgfQpAQCAtMjI4LDcgKzIyOCw3IEBAIHZvaWQg
SklUV29ya2xpc3Q6OnBvbGwoVk0mIHZtKQogICAgIGZpbmFsaXplUGxhbnMobXlQbGFucyk7CiB9
CiAKLXZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sqIGNvZGVCbG9jaywg
dW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpCit2b2lkIEpJVFdvcmtsaXN0Ojpj
b21waWxlTGF0ZXIoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCkKIHsKICAgICBEZWZlckdDIGRlZmVyR0MoY29kZUJsb2NrLT52bSgp
LmhlYXApOwogICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkludGVycHJldGVyVGh1bmspOwpAQCAtMjM5LDcgKzIzOSw3IEBAIHZvaWQgSklUV29ya2xp
c3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVu
dHJ5Qnl0ZWNvCiAgICAgfQogICAgIAogICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJ
VCgpKSB7Ci0gICAgICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCk7CisgICAgICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAg
LTI1Myw3ICsyNTMsNyBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjbwogICAgICAgICAKICAgICAg
ICAgaWYgKG1fbnVtQXZhaWxhYmxlVGhyZWFkcykgewogICAgICAgICAgICAgbV9wbGFubmVkLmFk
ZChjb2RlQmxvY2spOwotICAgICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZihu
ZXcgUGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KSk7CisgICAgICAg
ICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBQbGFuKGNvZGVCbG9jaywgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOwogICAgICAgICAgICAgbV9wbGFucy5hcHBlbmQocGxh
bik7CiAgICAgICAgICAgICBtX3F1ZXVlLmFwcGVuZChwbGFuKTsKICAgICAgICAgICAgIG1fY29u
ZGl0aW9uLT5ub3RpZnlBbGwobG9ja2VyKTsKQEAgLTI3NywxMCArMjc3LDEwIEBAIHZvaWQgSklU
V29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9v
cE9TUkVudHJ5Qnl0ZWNvCiAgICAgLy8gVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlLiBJZiB0
aGUgY29uY3VycmVudCBKSVQgdGhyZWFkIGlzIGNvbnZveWVkLCB3ZSByZXZlcnQgdG8gbWFpbgog
ICAgIC8vIHRocmVhZCBjb21waWxlcy4gVGhpcyBpcyBwcm9iYWJseSBub3QgYXMgZ29vZCBhcyBp
ZiB3ZSBoYWQgbXVsdGlwbGUgSklUIHRocmVhZHMuIE1heWJlIHdlCiAgICAgLy8gY2FuIGRvIHRo
YXQgc29tZWRheS4KLSAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVPZmZzZXQpOworICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KTsKIH0KIAotdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZU5vdyhD
b2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQp
Cit2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRl
Y29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgVk0mIHZtID0gY29k
ZUJsb2NrLT52bSgpOwogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKQEAgLTMwOCw3ICsz
MDgsNyBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2Nr
LCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZQogICAgIGNvZGVCbG9jay0+cmVzZXRKSVRE
YXRhKCk7CiAgICAgCiAgICAgLy8gT0ssIGp1c3QgY29tcGlsZSBpdC4KLSAgICBKSVQ6OmNvbXBp
bGUodm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVPZmZzZXQpOworICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVRDb21w
aWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgKaW5kZXggZWI2ZjU1MTVkZjcwMzk3
ZTczMGMxYzI3OTk5ZmZiMzgyZjZiMmI2MS4uZWRmZWM1YzgzODkyMzgxYjhiYThlYzA4YThiM2Fh
NDFjNGM3MjViOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3Jr
bGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuaApAQCAt
NTMsOSArNTMsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb21wbGV0ZUFsbEZvclZNKFZNJik7IC8v
IFJldHVybiB0cnVlIGlmIGFueSBKSVQgd29yayBoYXBwZW5lZC4KICAgICB2b2lkIHBvbGwoVk0m
KTsKICAgICAKLSAgICB2b2lkIGNvbXBpbGVMYXRlcihDb2RlQmxvY2sqLCB1bnNpZ25lZCBsb29w
T1NSRW50cnlCeXRlY29kZU9mZnNldCA9IDApOwotICAgIAotICAgIHZvaWQgY29tcGlsZU5vdyhD
b2RlQmxvY2sqLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IDApOworICAg
IHZvaWQgY29tcGlsZUxhdGVyKENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOworICAgIHZvaWQgY29tcGlsZU5vdyhD
b2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KDApKTsKICAgICAKICAgICBzdGF0aWMgSklUV29ya2xpc3QmIGVuc3VyZUdsb2Jh
bFdvcmtsaXN0KCk7CiAgICAgc3RhdGljIEpJVFdvcmtsaXN0KiBleGlzdGluZ0dsb2JhbFdvcmts
aXN0T3JOdWxsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9D
b2RlT3JpZ2luTWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmln
aW5NYXAuY3BwCmluZGV4IDIxMjk4YWQ4NGNhZjM2OTMwM2IzNWQyZDM5ODIxODNiYTZlNTA3ZDgu
LjI2NDcxOGQ5N2M3ODRiYzJmYTc3NDAzMWFmY2RiMDgwOTlkMWU1OTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwCkBAIC0xODksOSArMTg5
LDkgQEAgUENUb0NvZGVPcmlnaW5NYXA6OlBDVG9Db2RlT3JpZ2luTWFwKFBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlciYmIGJ1aWxkZXIsIExpbmtCdWYKICAgICB9OwogCiAgICAgRGVsdGFDb21wcmVz
c2lvbkJ1aWxkZXIgY29kZU9yaWdpbkNvbXByZXNzb3IoKHNpemVvZihpbnRwdHJfdCkgKyBzaXpl
b2YoaW50OF90KSArIHNpemVvZihpbnQ4X3QpICsgc2l6ZW9mKElubGluZUNhbGxGcmFtZSopKSAq
IGJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKSk7Ci0gICAgQ29kZU9yaWdpbiBsYXN0Q29kZU9y
aWdpbigwLCBudWxscHRyKTsKKyAgICBDb2RlT3JpZ2luIGxhc3RDb2RlT3JpZ2luKEJ5dGVjb2Rl
SW5kZXgoMCkpOwogICAgIGF1dG8gYnVpbGRDb2RlT3JpZ2luVGFibGUgPSBbJl0gKGNvbnN0IENv
ZGVPcmlnaW4mIGNvZGVPcmlnaW4pIHsKLSAgICAgICAgaW50cHRyX3QgZGVsdGEgPSBzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4oY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpIC0gc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KGxhc3RDb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgIGludHB0
cl90IGRlbHRhID0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpLm9mZnNldCgpKSAtIHN0YXRpY19jYXN0PGludHB0cl90PihsYXN0Q29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCkub2Zmc2V0KCkpOwogICAgICAgICBsYXN0Q29kZU9yaWdpbiA9IGNvZGVPcmln
aW47CiAgICAgICAgIGlmIChkZWx0YSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWF4
KCkgfHwgZGVsdGEgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDhfdD46Om1pbigpIHx8IGRlbHRh
ID09IHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSkgewogICAgICAgICAgICAgY29kZU9yaWdpbkNvbXBy
ZXNzb3Iud3JpdGU8aW50OF90PihzZW50aW5lbEJ5dGVjb2RlRGVsdGEpOwpAQCAtMjU0LDcgKzI1
NCw3IEBAIE9wdGlvbmFsPENvZGVPcmlnaW4+IFBDVG9Db2RlT3JpZ2luTWFwOjpmaW5kUEModm9p
ZCogcGMpIGNvbnN0CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICB1aW50cHRy
X3QgY3VycmVudFBDID0gMDsKLSAgICB1bnNpZ25lZCBjdXJyZW50Qnl0ZWNvZGVJbmRleCA9IDA7
CisgICAgQnl0ZWNvZGVJbmRleCBjdXJyZW50Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
MCk7CiAgICAgSW5saW5lQ2FsbEZyYW1lKiBjdXJyZW50SW5saW5lQ2FsbEZyYW1lID0gbnVsbHB0
cjsKIAogICAgIERlbHRhQ29tcHJlc3NlaW9uUmVhZGVyIHBjUmVhZGVyKG1fY29tcHJlc3NlZFBD
cywgbV9jb21wcmVzc2VkUENCdWZmZXJTaXplKTsKQEAgLTI4MCw3ICsyODAsNyBAQCBPcHRpb25h
bDxDb2RlT3JpZ2luPiBQQ1RvQ29kZU9yaWdpbk1hcDo6ZmluZFBDKHZvaWQqIHBjKSBjb25zdAog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGRlbHRhID0gc3RhdGljX2Nhc3Q8aW50
cHRyX3Q+KHZhbHVlKTsKIAotICAgICAgICAgICAgY3VycmVudEJ5dGVjb2RlSW5kZXggPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGN1cnJlbnRCeXRlY29kZUlu
ZGV4KSArIGRlbHRhKTsKKyAgICAgICAgICAgIGN1cnJlbnRCeXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oY3VycmVudEJ5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpICsgZGVsdGEpOwogCiAgICAgICAgICAgICBpbnQ4X3QgaGFzSW5saW5lRnJhbWUgPSBjb2Rl
T3JpZ2luUmVhZGVyLnJlYWQ8aW50OF90PigpOwogICAgICAgICAgICAgQVNTRVJUKGhhc0lubGlu
ZUZyYW1lID09IDAgfHwgaGFzSW5saW5lRnJhbWUgPT0gMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgKaW5kZXggOWZiNjJiNjQ1YmFmYjRhMTNmZjdl
ZmI3Zjc2MWNhOTJiZWEzZTVmYS4uYjBkNTYxZmM1NmQ1ZjA4MTBjOGMwZWNmYWZmNzIyZDJkM2Iz
M2YyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdp
bk1hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAu
aApAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZvaWQgYXBwZW5kSXRl
bShNYWNyb0Fzc2VtYmxlcjo6TGFiZWwsIGNvbnN0IENvZGVPcmlnaW4mKTsKLSAgICBzdGF0aWMg
Q29kZU9yaWdpbiBkZWZhdWx0Q29kZU9yaWdpbigpIHsgcmV0dXJuIENvZGVPcmlnaW4oMCwgbnVs
bHB0cik7IH0KKyAgICBzdGF0aWMgQ29kZU9yaWdpbiBkZWZhdWx0Q29kZU9yaWdpbigpIHsgcmV0
dXJuIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSk7IH0KIAogICAgIGJvb2wgZGlkQnVpbGRN
YXBwaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRCdWlsZE1hcHBpbmc7IH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKaW5kZXggOGQyZmFhODQ1YjhmOGNiOWMz
MGM5ODA0MDY2MGI3NjEwOTc5YTZlMi4uYzExZTc5YjBjNTYxY2EzM2NjYjJiYmUwYThlYjNhZjZl
ZGE2YmNlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENh
bGwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCkBAIC01
OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQtPm1vdmUoSklUOjpUcnVzdGVkSW1t
UHRyKG1fcGMpLCBKSVQ6OmFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKICAgICAgICAgSklUOjpDYWxs
IGNhbGwgPSBtX2ppdC0+Y2FsbChPcGVyYXRpb25QdHJUYWcpOwotICAgICAgICBtX2ppdC0+bV9j
YWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBtX2ppdC0+bV9ieXRlY29kZU9mZnNldCwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihtX3Nsb3dQYXRoRnVuY3Rpb24pKSk7CisgICAgICAg
IG1faml0LT5tX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIG1faml0LT5tX2J5dGVjb2Rl
SW5kZXgsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4obV9zbG93UGF0aEZ1bmN0aW9uKSkp
OwogCiAjaWYgQ1BVKFg4Nl82NCkgJiYgT1MoV0lORE9XUykKICAgICAgICAgbV9qaXQtPnBvcChK
SVQ6OnJlZ1QwKTsgLy8gdlBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAppbmRleCA1MWZmNzc2MmQwMzk4YTJmNjAxNTRjOWVjYTg3MzU0YTljOWQw
YTdlLi42OGI1ZGVlNTVlOTUzNjU4MDQxMTc3ZmExNTEwOGIzYjYxMDM5ZjlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTM2OCw3ICsz
NjgsNyBAQCBpbmxpbmUgYm9vbCBzaG91bGRKSVQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB9CiAK
IC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgdHJ5IHRvIE9TUi4KLWlubGluZSBib29sIGpp
dENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVu
c2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gMCkKK2lubGluZSBib29sIGppdENv
bXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVj
b2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiB7
CiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOyAvLyBNeSBjYWxsZXJzIGRv
bid0IHNldCB0b3AgY2FsbGZyYW1lLCBzbyB3ZSBkb24ndCB3YW50IHRvIEdDIGhlcmUgYXQgYWxs
LgogICAgIEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwpAQCAtMzkyLDcgKzM5Miw3IEBAIGlubGlu
ZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIHVuc2lnbmVkIGxvCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNl
IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6IHsKLSAgICAgICAgSklUV29ya2xpc3Q6OmVuc3Vy
ZUdsb2JhbFdvcmtsaXN0KCkuY29tcGlsZUxhdGVyKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVPZmZzZXQpOworICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3Qo
KS5jb21waWxlTGF0ZXIoY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAg
ICAgICAgcmV0dXJuIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
OwogICAgIH0KICAgICBkZWZhdWx0OgpAQCAtNDc2LDIyICs0NzYsMjIgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNv
dW50ZXIoKSwgIlxuIik7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5
dGVjb2RlT2Zmc2V0ID0gY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChwYyk7CisgICAgYXV0byBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChjb2RlQmxvY2stPmJ5dGVj
b2RlT2Zmc2V0KHBjKSk7CiAKICAgICBpZiAoIXNob3VsZEpJVChjb2RlQmxvY2spKSB7CiAgICAg
ICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CiAgICAgICAgIExMSU5UX1JFVFVS
Tl9UV08oMCwgMCk7CiAgICAgfQogICAgIAotICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJp
c3RpY3Modm0sIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpKQorICAgIGlm
ICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCkpCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08oMCwgMCk7CiAgICAgCi0g
ICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJvc3JFbnRyeSIsICgiYXQgYmMjIiwg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpKTsKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNv
ZGVCbG9jaywgIm9zckVudHJ5IiwgKCJhdCAiLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7
CiAKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpOwogCiAgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9jay0+aml0Q29k
ZU1hcCgpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlv
biA9IGNvZGVNYXAuZmluZChsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCiAg
ICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwpA
QCAtMTg4OCwxMSArMTg4OCw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9sb2df
c2hhZG93X2NoaWNrZW5fdGFpbCkKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGdldE5vbkNvbnN0
YW50T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKTsKICAgICBKU1Njb3Bl
KiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rl
cjo6c2NvcGUoKTsKICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleChjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KHBjKSk7Ci0jZWxzZQotICAg
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleChwYyk7Ci0jZW5kaWYKKyAgICBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0
KHBjKSkpOworCiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0No
aWNrZW4oKTsKICAgICBSRUxFQVNFX0FTU0VSVChzaGFkb3dDaGlja2VuKTsKICAgICBzaGFkb3dD
aGlja2VuLT5sb2codm0sIGNhbGxGcmFtZSwgU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsKGNh
bGxGcmFtZSwgdGhpc1ZhbHVlLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KSk7CkBA
IC0xOTA0LDcgKzE5MDEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmls
ZV9jYXRjaCkKIHsKICAgICBMTElOVF9CRUdJTigpOwogCi0gICAgY29kZUJsb2NrLT5lbnN1cmVD
YXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZS0+Ynl0ZWNv
ZGVPZmZzZXQoKSk7CisgICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRl
ZEZvckJ5dGVjb2RlSW5kZXgoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZXJPcmlnaW4uY3BwCmluZGV4IDEwMjIyYTIzOTZjNzFlMmJjOTI0M2Y4
ZTJhZDI4NWJjNTc2MDQ5ZTkuLjNhYWVkZTcyMDdjODk1N2I2MDMwOTM0MTdjYjJkNjA5ZTY5YjBl
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9y
aWdpbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3Jp
Z2luLmNwcApAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFBy
b2ZpbGVyIHsKIAotT3JpZ2luOjpPcmlnaW4oRGF0YWJhc2UmIGRhdGFiYXNlLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK09yaWdpbjo6T3JpZ2luKERhdGFi
YXNlJiBkYXRhYmFzZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKICAgICA6IG1fYnl0ZWNvZGVzKGRhdGFiYXNlLmVuc3VyZUJ5dGVjb2Rlc0Zvcihj
b2RlQmxvY2spKQogICAgICwgbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiB7CkBAIC00
Miw3ICs0Miw3IEBAIE9yaWdpbjo6T3JpZ2luKERhdGFiYXNlJiBkYXRhYmFzZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAKIHZvaWQgT3JpZ2luOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCptX2J5dGVjb2Rlcywg
IjpiYyMiLCBtX2J5dGVjb2RlSW5kZXgpOworICAgIG91dC5wcmludCgqbV9ieXRlY29kZXMsICIg
IiwgbV9ieXRlY29kZUluZGV4KTsKIH0KIAogSlNWYWx1ZSBPcmlnaW46OnRvSlMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKQEAgLTUwLDcgKzUwLDcgQEAgSlNWYWx1ZSBPcmln
aW46OnRvSlMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2J5dGVjb2Rlcy0+aWQoKSkpOwot
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ieXRlY29kZUluZGV4
LCBqc051bWJlcihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+Ynl0ZWNvZGVJbmRleCwganNOdW1iZXIobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW4uaAppbmRleCA4NjgyNjYxNzllMTUzOTQw
YTE5NzJlNWNlY2RkN2U2NTk1ZTU1ZjNmLi4yMzcyNmZhOTk1ZmE3YTI2Y2E0OWIzZjNiYjdiODZi
YTRmZDYxZTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXJPcmlnaW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXJPcmlnaW4uaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUg
IkJ5dGVjb2RlSW5kZXguaCIKICNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtNDAsMjkgKzQx
LDI0IEBAIGNsYXNzIERhdGFiYXNlOwogCiBjbGFzcyBPcmlnaW4gewogcHVibGljOgotICAgIE9y
aWdpbigpCi0gICAgICAgIDogbV9ieXRlY29kZUluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkKLSAgICB7Ci0gICAgfQotICAgIAorICAgIE9yaWdpbigpID0gZGVmYXVs
dDsKICAgICBPcmlnaW4oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6
IG1fYnl0ZWNvZGVJbmRleChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSAx
KQotICAgIHsKLSAgICB9CisgICAgICAgIDogbV9ieXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgo
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpKQorICAgIHsgfQogICAgIAotICAgIE9yaWdpbihC
eXRlY29kZXMqIGJ5dGVjb2RlcywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICBPcmlnaW4o
Qnl0ZWNvZGVzKiBieXRlY29kZXMsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICAg
ICAgOiBtX2J5dGVjb2RlcyhieXRlY29kZXMpCiAgICAgICAgICwgbV9ieXRlY29kZUluZGV4KGJ5
dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4IDwgc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gMSk7CisgICAgICAgIEFTU0VSVCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkgLSAxKTsKICAgICB9CiAgICAgCi0gICAgT3JpZ2luKERhdGFiYXNlJiwgQ29kZUJsb2Nr
KiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgT3JpZ2luKERhdGFiYXNlJiwgQ29kZUJs
b2NrKiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiBtX2J5dGVjb2RlSW5kZXggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhIW1fYnl0ZWNv
ZGVJbmRleDsgfQogICAgIAogICAgIEJ5dGVjb2RlcyogYnl0ZWNvZGVzKCkgY29uc3QgeyByZXR1
cm4gbV9ieXRlY29kZXM7IH0KLSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CiAgICAgCiAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IE9yaWdpbiYpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBP
cmlnaW4mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQpAQCAtNzUs
NyArNzEsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgQnl0ZWNvZGVzKiBtX2J5dGVjb2Rl
czsKLSAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7CisgICAgQnl0ZWNvZGVJbmRleCBtX2J5
dGVjb2RlSW5kZXg7CiB9OwogCiBpbmxpbmUgYm9vbCBPcmlnaW46Om9wZXJhdG9yPT0oY29uc3Qg
T3JpZ2luJiBvdGhlcikgY29uc3QKQEAgLTg2LDEyICs4MiwxMiBAQCBpbmxpbmUgYm9vbCBPcmln
aW46Om9wZXJhdG9yPT0oY29uc3QgT3JpZ2luJiBvdGhlcikgY29uc3QKIAogaW5saW5lIHVuc2ln
bmVkIE9yaWdpbjo6aGFzaCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6UHRySGFzaDxCeXRl
Y29kZXMqPjo6aGFzaChtX2J5dGVjb2RlcykgKyBtX2J5dGVjb2RlSW5kZXg7CisgICAgcmV0dXJu
IFdURjo6UHRySGFzaDxCeXRlY29kZXMqPjo6aGFzaChtX2J5dGVjb2RlcykgKyBtX2J5dGVjb2Rl
SW5kZXguaGFzaCgpOwogfQogCiBpbmxpbmUgYm9vbCBPcmlnaW46OmlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4ID09IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4
LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CiB9CiAKIHN0cnVjdCBPcmlnaW5IYXNoIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAppbmRleCBlZTg0YzhiMjIzMjhiMTVh
NjNhYzFjZWU3NWNjMTA3ZmEwY2NmOGY0Li5iYWE0MzM4MmE0Y2MxMzFlYWI1OTdhNDk2NDY2ZDg5
OGFmYzMyZGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCkBAIC0x
NjYsMTUgKzE2NiwxNSBAQCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFN0YWNrRnJhbWU+PiBnZXRT
dGFja1RyYWNlKEpTR2xvYmFsT2JqZWN0KiwgVk0mIHZtLCBKU09iagogICAgIHJldHVybiBzdGFj
a1RyYWNlOwogfQogCi12b2lkIGdldEJ5dGVjb2RlT2Zmc2V0KFZNJiB2bSwgQ2FsbEZyYW1lKiBz
dGFydENhbGxGcmFtZSwgVmVjdG9yPFN0YWNrRnJhbWU+KiBzdGFja1RyYWNlLCBDYWxsRnJhbWUq
JiBjYWxsRnJhbWUsIHVuc2lnbmVkJiBieXRlY29kZU9mZnNldCkKK3ZvaWQgZ2V0Qnl0ZWNvZGVJ
bmRleChWTSYgdm0sIENhbGxGcmFtZSogc3RhcnRDYWxsRnJhbWUsIFZlY3RvcjxTdGFja0ZyYW1l
Piogc3RhY2tUcmFjZSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBCeXRlY29kZUluZGV4JiBieXRl
Y29kZUluZGV4KQogewogICAgIEZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0
b3IgZnVuY3RvcihzdGFydENhbGxGcmFtZSk7CiAgICAgU3RhY2tWaXNpdG9yOjp2aXNpdCh2bS50
b3BDYWxsRnJhbWUsICZ2bSwgZnVuY3Rvcik7CiAgICAgY2FsbEZyYW1lID0gZnVuY3Rvci5mb3Vu
ZENhbGxGcmFtZSgpOwogICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSBmdW5jdG9yLmluZGV4KCk7
Ci0gICAgYnl0ZWNvZGVPZmZzZXQgPSAwOwotICAgIGlmIChzdGFja1RyYWNlICYmIHN0YWNrSW5k
ZXggPCBzdGFja1RyYWNlLT5zaXplKCkgJiYgc3RhY2tUcmFjZS0+YXQoc3RhY2tJbmRleCkuaGFz
Qnl0ZWNvZGVPZmZzZXQoKSkKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBzdGFja1RyYWNlLT5h
dChzdGFja0luZGV4KS5ieXRlY29kZU9mZnNldCgpOworICAgIGJ5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KCk7CisgICAgaWYgKHN0YWNrVHJhY2UgJiYgc3RhY2tJbmRleCA8IHN0YWNrVHJh
Y2UtPnNpemUoKSAmJiBzdGFja1RyYWNlLT5hdChzdGFja0luZGV4KS5oYXNCeXRlY29kZUluZGV4
KCkpCisgICAgICAgIGJ5dGVjb2RlSW5kZXggPSBzdGFja1RyYWNlLT5hdChzdGFja0luZGV4KS5i
eXRlY29kZUluZGV4KCk7CiB9CiAKIGJvb2wgZ2V0TGluZUNvbHVtbkFuZFNvdXJjZShWZWN0b3I8
U3RhY2tGcmFtZT4qIHN0YWNrVHJhY2UsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1u
LCBTdHJpbmcmIHNvdXJjZVVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oCmlu
ZGV4IGNiN2JmM2FmNWQ5MWY2M2Q2YWRlMzg4NjkwODBiMDZiMTgzN2QzM2YuLjI2YmI4OWZmZWU5
YmIxY2VjZTU5YWM1MDA5NmJiYTUwZDBiZTg4ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3IuaApAQCAtNjcsNyArNjcsNyBAQCBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCog
Y3JlYXRlRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBFcnJvclR5cGUsIGNvbnN0IFN0cmluZwogSlNP
YmplY3QqIGNyZWF0ZUdldHRlclR5cGVFcnJvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmlu
ZyYpOwogCiBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFN0YWNrRnJhbWU+PiBnZXRTdGFja1RyYWNl
KEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBKU09iamVjdCosIGJvb2wgdXNlQ3VycmVudEZyYW1lKTsK
LXZvaWQgZ2V0Qnl0ZWNvZGVPZmZzZXQoVk0mLCBDYWxsRnJhbWUqLCBWZWN0b3I8U3RhY2tGcmFt
ZT4qLCBDYWxsRnJhbWUqJiwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0KTsKK3ZvaWQgZ2V0Qnl0
ZWNvZGVJbmRleChWTSYsIENhbGxGcmFtZSosIFZlY3RvcjxTdGFja0ZyYW1lPiosIENhbGxGcmFt
ZSomLCBCeXRlY29kZUluZGV4Jik7CiBib29sIGdldExpbmVDb2x1bW5BbmRTb3VyY2UoVmVjdG9y
PFN0YWNrRnJhbWU+KiBzdGFja1RyYWNlLCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVt
biwgU3RyaW5nJiBzb3VyY2VVUkwpOwogYm9vbCBhZGRFcnJvckluZm8oVk0mLCBWZWN0b3I8U3Rh
Y2tGcmFtZT4qLCBKU09iamVjdCopOwogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRFcnJvcklu
Zm8oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAppbmRleCA2ZGY2OGRiZGZjM2JjODBh
MTg3YTRlNWRmOTI0OTI5MTYxMTIxZjRhLi42MjE5MmJjYzNiODVmY2I4NTIxMDMwOGE3MTU1ZWMz
ZTI4YjA4N2UyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
ckluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvcklu
c3RhbmNlLmNwcApAQCAtNDgsNyArNDgsNyBAQCBFcnJvckluc3RhbmNlKiBFcnJvckluc3RhbmNl
OjpjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdAogICAg
IHJldHVybiBjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgc3RydWN0dXJlLCBtZXNzYWdlU3RyaW5n
LCBhcHBlbmRlciwgdHlwZSwgdXNlQ3VycmVudEZyYW1lKTsKIH0KIAotc3RhdGljIHZvaWQgYXBw
ZW5kU291cmNlVG9FcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgRXJyb3JJbnN0YW5jZSogZXhjZXB0aW9uLCB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCkKK3N0YXRpYyB2b2lkIGFwcGVuZFNvdXJjZVRvRXJyb3IoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVycm9ySW5zdGFuY2UqIGV4Y2VwdGlv
biwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIEVycm9ySW5zdGFuY2U6OlNv
dXJjZUFwcGVuZGVyIGFwcGVuZGVyID0gZXhjZXB0aW9uLT5zb3VyY2VBcHBlbmRlcigpOwogICAg
IGV4Y2VwdGlvbi0+Y2xlYXJTb3VyY2VBcHBlbmRlcigpOwpAQCAtNzEsNyArNzEsNyBAQCBzdGF0
aWMgdm9pZCBhcHBlbmRTb3VyY2VUb0Vycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYQogICAgIGVsc2UKICAgICAgICAgY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvZGVCbG9jay0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIGRpdm90UG9pbnQsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQsIGxpbmUsIGNvbHVtbik7CisgICAgY29kZUJsb2NrLT5leHByZXNzaW9uUmFuZ2VGb3JC
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgsIGRpdm90UG9pbnQsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQsIGxpbmUsIGNvbHVtbik7CiAgICAgCiAgICAgaW50IGV4cHJlc3Npb25TdGFydCA9IGRp
dm90UG9pbnQgLSBzdGFydE9mZnNldDsKICAgICBpbnQgZXhwcmVzc2lvblN0b3AgPSBkaXZvdFBv
aW50ICsgZW5kT2Zmc2V0OwpAQCAtMTI0LDEyICsxMjQsMTIgQEAgdm9pZCBFcnJvckluc3RhbmNl
OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIGNv
bnN0IFMKICAgICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzKTsKIAogICAgIGlmIChtX3N0YWNr
VHJhY2UgJiYgIW1fc3RhY2tUcmFjZS0+aXNFbXB0eSgpICYmIGhhc1NvdXJjZUFwcGVuZGVyKCkp
IHsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleDsKICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWU7Ci0gICAgICAg
IGdldEJ5dGVjb2RlT2Zmc2V0KHZtLCB2bS50b3BDYWxsRnJhbWUsIG1fc3RhY2tUcmFjZS5nZXQo
KSwgY2FsbEZyYW1lLCBieXRlY29kZU9mZnNldCk7CisgICAgICAgIGdldEJ5dGVjb2RlSW5kZXgo
dm0sIHZtLnRvcENhbGxGcmFtZSwgbV9zdGFja1RyYWNlLmdldCgpLCBjYWxsRnJhbWUsIGJ5dGVj
b2RlSW5kZXgpOwogICAgICAgICBpZiAoY2FsbEZyYW1lICYmIGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCkpIHsKICAgICAgICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT5jYWxsZWUoKS5pc1dhc20oKSk7
Ci0gICAgICAgICAgICBhcHBlbmRTb3VyY2VUb0Vycm9yKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LCB0aGlzLCBieXRlY29kZU9mZnNldCk7CisgICAgICAgICAgICBhcHBlbmRTb3VyY2VUb0Vycm9y
KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCB0aGlzLCBieXRlY29kZUluZGV4KTsKICAgICAgICAg
fQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nh
bXBsaW5nUHJvZmlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxp
bmdQcm9maWxlci5jcHAKaW5kZXggY2VhYzBjYjMwOTQ1Nzc3MzVjZDRmOWZiN2Y1ZjA1OWYxOThi
ZmY4MS4uOWJjZjk2MTg2ZDNmODUwODMxZDZiMjY1YmM1MjBhNjc4MGNmNmNjOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKQEAg
LTQ0NiwyOSArNDQ2LDIzIEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZShjb25z
dCBBYnN0cmFjdExvY2tlciYsIFNlY29uZHMmIHN0YWNrVHJhY2VQcm9jCiAgICAgfQogfQogCi1z
dGF0aWMgQUxXQVlTX0lOTElORSB1bnNpZ25lZCB0cnlHZXRCeXRlY29kZUluZGV4KHVuc2lnbmVk
IGxsaW50UEMsIENvZGVCbG9jayogY29kZUJsb2NrLCBib29sJiBpc1ZhbGlkKQorc3RhdGljIEFM
V0FZU19JTkxJTkUgQnl0ZWNvZGVJbmRleCB0cnlHZXRCeXRlY29kZUluZGV4KHVuc2lnbmVkIGxs
aW50UEMsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAg
IFJFTEVBU0VfQVNTRVJUKCFjb2RlQmxvY2stPmhhc0NvZGVPcmlnaW5zKCkpOwogI2VuZGlmCiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBsbGludFBD
OwotICAgIGlmIChieXRlY29kZUluZGV4IDwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkp
IHsKLSAgICAgICAgaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBieXRlY29kZUluZGV4
OwotICAgIH0KLSAgICBpc1ZhbGlkID0gZmFsc2U7Ci0gICAgcmV0dXJuIDA7CisgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQgPSBsbGludFBDOworICAgIGlmIChieXRlY29kZU9mZnNldCA8IGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKQorICAgICAgICByZXR1cm4gQnl0ZWNvZGVJbmRl
eChieXRlY29kZU9mZnNldCk7CisgICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoKTsKICNlbHNlCiAg
ICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYml0d2lzZV9jYXN0PEluc3RydWN0aW9uKj4o
bGxpbnRQQyk7CiAKLSAgICBpZiAoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5jb250YWlucyhp
bnN0cnVjdGlvbikpIHsKLSAgICAgICAgaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBj
b2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uKTsKLSAgICB9Ci0gICAgaXNWYWxp
ZCA9IGZhbHNlOwotICAgIHJldHVybiAwOworICAgIGlmIChjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmNvbnRhaW5zKGluc3RydWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgo
Y29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChpbnN0cnVjdGlvbikpOworICAgIHJldHVybiBCeXRl
Y29kZUluZGV4KCk7CiAjZW5kaWYKIH0KIApAQCAtNDg0LDEyICs0NzgsMTIgQEAgdm9pZCBTYW1w
bGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCkKICAgICAgICAgU3Rh
Y2tUcmFjZSYgc3RhY2tUcmFjZSA9IG1fc3RhY2tUcmFjZXMubGFzdCgpOwogICAgICAgICBzdGFj
a1RyYWNlLnRpbWVzdGFtcCA9IHVucHJvY2Vzc2VkU3RhY2tUcmFjZS50aW1lc3RhbXA7CiAKLSAg
ICAgICAgYXV0byBwb3B1bGF0ZUNvZGVMb2NhdGlvbiA9IFtdIChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RhY2tGcmFtZTo6Q29kZUxvY2F0aW9uJiBsb2Nh
dGlvbikgewotICAgICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXggPCBjb2RlQmxvY2stPmluc3Ry
dWN0aW9uc1NpemUoKSkgeworICAgICAgICBhdXRvIHBvcHVsYXRlQ29kZUxvY2F0aW9uID0gW10g
KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFN0YWNr
RnJhbWU6OkNvZGVMb2NhdGlvbiYgbG9jYXRpb24pIHsKKyAgICAgICAgICAgIGlmIChieXRlY29k
ZUluZGV4Lm9mZnNldCgpIDwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpIHsKICAgICAg
ICAgICAgICAgICBpbnQgZGl2b3Q7CiAgICAgICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0Owog
ICAgICAgICAgICAgICAgIGludCBlbmRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgY29kZUJsb2Nr
LT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4LCBkaXZvdCwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCwKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmV4cHJl
c3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCwgZGl2b3QsIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmxpbmVOdW1iZXIs
IGxvY2F0aW9uLmNvbHVtbk51bWJlcik7CiAgICAgICAgICAgICAgICAgbG9jYXRpb24uYnl0ZWNv
ZGVJbmRleCA9IGJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICB9CkBAIC00OTksNyArNDkzLDcg
QEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCkK
ICAgICAgICAgICAgIH0KICAgICAgICAgfTsKIAotICAgICAgICBhdXRvIGFwcGVuZENvZGVCbG9j
ayA9IFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIHsK
KyAgICAgICAgYXV0byBhcHBlbmRDb2RlQmxvY2sgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2Nr
LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpIHsKICAgICAgICAgICAgIHN0YWNrVHJhY2Uu
ZnJhbWVzLmFwcGVuZChTdGFja0ZyYW1lKGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKTsK
ICAgICAgICAgICAgIG1fbGl2ZUNlbGxQb2ludGVycy5hZGQoY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSk7CiAgICAgICAgICAgICBwb3B1bGF0ZUNvZGVMb2NhdGlvbihjb2RlQmxvY2ssIGJ5
dGVjb2RlSW5kZXgsIHN0YWNrVHJhY2UuZnJhbWVzLmxhc3QoKS5zZW1hbnRpY0xvY2F0aW9uKTsK
QEAgLTYxNCwxOCArNjA4LDE3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVy
aWZpZWRTdGFja1RyYWNlcygpCiAgICAgICAgICAgICAgICAgLy8gYW5kIHdlIGVuZCB1cCBoYXZp
bmcgdG8gdW53aW5kIHBhc3QgYW4gRW50cnlGcmFtZSwgd2Ugd2lsbCBlbmQgdXAgZXhlY3V0aW5n
CiAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIHRoZSBMTEludCdzIGhhbmRsZVVuY2F1Z2h0RXhj
ZXB0aW9uLiBTbyB3ZSBqdXN0IHByb3RlY3QgYWdhaW5zdCB0aGlzCiAgICAgICAgICAgICAgICAg
Ly8gYnkgaWdub3JpbmcgaXQuCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCA9IDA7CisgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleCgwKTsKICAgICAgICAgICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUo
KSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewotICAgICAgICAgICAgICAgICAgICBib29sIGlz
VmFsaWRQQzsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYml0czsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgICAgICAgICAgICAgICAgICBiaXRzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBDKSk7
CiAjZWxzZQogICAgICAgICAgICAgICAgICAgICBiaXRzID0gYml0d2lzZV9jYXN0PHVuc2lnbmVk
Pih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQyk7CiAjZW5kaWYKLSAgICAgICAgICAgICAg
ICAgICAgYnl0ZWNvZGVJbmRleCA9IHRyeUdldEJ5dGVjb2RlSW5kZXgoYml0cywgdG9wQ29kZUJs
b2NrLCBpc1ZhbGlkUEMpOworICAgICAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gdHJ5
R2V0Qnl0ZWNvZGVJbmRleChiaXRzLCB0b3BDb2RlQmxvY2spOwogCi0gICAgICAgICAgICAgICAg
ICAgIFVOVVNFRF9QQVJBTShpc1ZhbGlkUEMpOyAvLyBGSVhNRTogZG8gc29tZXRoaW5nIHdpdGgg
dGhpcyBpbmZvIGZvciB0aGUgd2ViIGluc3BlY3RvcjogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MzQ1NQorICAgICAgICAgICAgICAgICAgICBVTlVTRURfUEFSQU0o
Ynl0ZWNvZGVJbmRleCk7IC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgd2l0aCB0aGlzIGluZm8gZm9y
IHRoZSB3ZWIgaW5zcGVjdG9yOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUzNDU1CiAKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrKHRvcENvZGVC
bG9jaywgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIHN0b3JlQ2FsbGVlSW50
b0xhc3RGcmFtZSh1bnByb2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVzWzBdKTsKQEAgLTY0OSw4ICs2
NDIsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFj
ZXMoKQogICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IHVucHJv
Y2Vzc2VkU3RhY2tGcmFtZS5jYWxsU2l0ZUluZGV4OwogCiAgICAgICAgICAgICAgICAgYXV0byBh
cHBlbmRDb2RlQmxvY2tOb0lubGluaW5nID0gWyZdIHsKLSAgICAgICAgICAgICAgICAgICAgYm9v
bCBpc1ZhbGlkUEM7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayhjb2RlQmxv
Y2ssIHRyeUdldEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVJbmRleC5iaXRzKCksIGNvZGVCbG9jaywg
aXNWYWxpZFBDKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayhjb2RlQmxv
Y2ssIHRyeUdldEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVJbmRleC5iaXRzKCksIGNvZGVCbG9jaykp
OwogICAgICAgICAgICAgICAgIH07CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTY1OCw3ICs2
NTAsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFj
ZXMoKQogICAgICAgICAgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5jYW5HZXRDb2RlT3JpZ2lu
KGNhbGxTaXRlSW5kZXgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ29kZU9yaWdp
bihjb2RlQmxvY2ssIGNvZGVCbG9jay0+Y29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KSk7CiAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVC
bG9jayhjb2RlQmxvY2ssIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2soY29kZUJsb2NrLCBCeXRlY29k
ZUluZGV4KCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBh
cHBlbmRDb2RlQmxvY2tOb0lubGluaW5nKCk7CiAjZWxzZQpAQCAtMTExNSw3ICsxMTA3LDcgQEAg
dm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpyZXBvcnRUb3BCeXRlY29kZXMoUHJpbnRTdHJlYW0mIG91
dCkKICAgICAgICAgICAgIFN0cmluZyBjb2RlQmxvY2tIYXNoOwogICAgICAgICAgICAgU3RyaW5n
IGppdFR5cGU7CiAgICAgICAgICAgICBpZiAobG9jYXRpb24uaGFzQnl0ZWNvZGVJbmRleCgpKQot
ICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSBTdHJpbmc6Om51bWJlcihsb2NhdGlvbi5i
eXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gdG9TdHJpbmco
bG9jYXRpb24uYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgYnl0ZWNvZGVJbmRleCA9ICI8bmlsPiI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAppbmRleCA2OTI4MDAyODJjNzc1NWFiOTY3MDM4
MmIyOWE5YjBhM2NkNjdlZmRjLi4yYTE0NDk0MjI4ODI3MWQzMmM2MjViOGFkM2FkZmE2N2M3Yjg0
OTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5oCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICBib29sIGhh
c0J5dGVjb2RlSW5kZXgoKSBjb25zdAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gISFieXRlY29kZUluZGV4OwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBib29sIGhhc0V4cHJlc3Npb25JbmZvKCkgY29uc3QKQEAgLTExNyw3
ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBUaGVzZSBhdHRlbXB0IHRvIGJlIGV4
cHJlc3Npb24tbGV2ZWwgbGluZSBhbmQgY29sdW1uIG51bWJlci4KICAgICAgICAgICAgIHVuc2ln
bmVkIGxpbmVOdW1iZXIgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGNvbHVtbk51bWJlciB7IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSB9OwotICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCB7
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICAgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OwogICAgICAgICAgICAgQ29kZUJsb2NrSGFzaCBjb2Rl
QmxvY2tIYXNoOwogICAgICAgICAgICAgSklUVHlwZSBqaXRUeXBlIHsgSklUVHlwZTo6Tm9uZSB9
OwogICAgICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RhY2tGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1l
LmNwcAppbmRleCAyNGVhMGVjNTkzM2ViOGQ3OGU4NGZkODJhMWU2MzhlMWJmYTlmMmMzLi4zMTI0
ODg5NGI4MGRjOWQwNWM4MmQ0NDdhZTAwNDBhNTM3MDRiZTU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcApAQCAtMzgsMTAgKzM4LDEwIEBAIFN0YWNr
RnJhbWU6OlN0YWNrRnJhbWUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIGNhbGxlZSkK
IHsKIH0KIAotU3RhY2tGcmFtZTo6U3RhY2tGcmFtZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpT
Q2VsbCogY2FsbGVlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpCitTdGFja0ZyYW1lOjpTdGFja0ZyYW1lKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNDZWxs
KiBjYWxsZWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgpCiAgICAgOiBtX2NhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSkKICAgICAsIG1fY29kZUJsb2Nr
KHZtLCBvd25lciwgY29kZUJsb2NrKQotICAgICwgbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9m
ZnNldCkKKyAgICAsIG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogewogfQogCkBAIC0x
MTEsNyArMTExLDcgQEAgdm9pZCBTdGFja0ZyYW1lOjpjb21wdXRlTGluZUFuZENvbHVtbih1bnNp
Z25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3QKICAgICBpbnQgZGl2b3QgPSAwOwog
ICAgIGludCB1bnVzZWRTdGFydE9mZnNldCA9IDA7CiAgICAgaW50IHVudXNlZEVuZE9mZnNldCA9
IDA7Ci0gICAgbV9jb2RlQmxvY2stPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KG1f
Ynl0ZWNvZGVPZmZzZXQsIGRpdm90LCB1bnVzZWRTdGFydE9mZnNldCwgdW51c2VkRW5kT2Zmc2V0
LCBsaW5lLCBjb2x1bW4pOworICAgIG1fY29kZUJsb2NrLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleCwgZGl2b3QsIHVudXNlZFN0YXJ0T2Zmc2V0LCB1bnVz
ZWRFbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CiAKICAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwogICAgIGlmIChPcHRpb25h
bDxpbnQ+IG92ZXJyaWRlTGluZU51bWJlciA9IGV4ZWN1dGFibGUtPm92ZXJyaWRlTGluZU51bWJl
cihtX2NvZGVCbG9jay0+dm0oKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdGFja0ZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFj
a0ZyYW1lLmgKaW5kZXggNjcxYTMzN2I0MjU0MTM1OGE5ZWM5ZDI2ZmIyNDBiZTMwYTQ2ZTczMS4u
YzlkZmEwYjE4YzA4ZDk5NDhmY2E1MDNjNzlmNzlhNzg4ZmMzOGFkYSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaApAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBT
bG90VmlzaXRvcjsKIGNsYXNzIFN0YWNrRnJhbWUgewogcHVibGljOgogICAgIFN0YWNrRnJhbWUo
Vk0mLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIGNhbGxlZSk7Ci0gICAgU3RhY2tGcmFtZShWTSYs
IEpTQ2VsbCogb3duZXIsIEpTQ2VsbCogY2FsbGVlLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCk7CisgICAgU3RhY2tGcmFtZShWTSYsIEpTQ2VsbCogb3duZXIsIEpTQ2VsbCog
Y2FsbGVlLCBDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4KTsKICAgICBTdGFja0ZyYW1lKFdhc206
OkluZGV4T3JOYW1lKTsKIAogICAgIGJvb2wgaGFzTGluZUFuZENvbHVtbkluZm8oKSBjb25zdCB7
IHJldHVybiAhIW1fY29kZUJsb2NrOyB9CkBAIC01MSwxMSArNTEsMTEgQEAgcHVibGljOgogICAg
IFN0cmluZyBzb3VyY2VVUkwoKSBjb25zdDsKICAgICBTdHJpbmcgdG9TdHJpbmcoVk0mKSBjb25z
dDsKIAotICAgIGJvb2wgaGFzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVj
b2RlT2Zmc2V0ICE9IFVJTlRfTUFYICYmICFtX2lzV2FzbUZyYW1lOyB9Ci0gICAgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQoKQorICAgIGJvb2wgaGFzQnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZWNvZGVJbmRleCAmJiAhbV9pc1dhc21GcmFtZTsgfQorICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCgpCiAgICAgewotICAgICAgICBBU1NFUlQoaGFzQnl0ZWNvZGVPZmZz
ZXQoKSk7Ci0gICAgICAgIHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0OworICAgICAgICBBU1NFUlQo
aGFzQnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CkBAIC02NSw3
ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9jYWxsZWUgeyB9
OwogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1fY29kZUJsb2NrIHsgfTsKICAgICBXYXNt
OjpJbmRleE9yTmFtZSBtX3dhc21GdW5jdGlvbkluZGV4T3JOYW1lOwotICAgIHVuc2lnbmVkIG1f
Ynl0ZWNvZGVPZmZzZXQgeyBVSU5UX01BWCB9OworICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29k
ZUluZGV4OwogICAgIGJvb2wgbV9pc1dhc21GcmFtZSB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAppbmRleCAzNjRlYTQ0OTE0Mjgw
YTkxMWM1MDVjODdhOGRlMDJlMzBkNmZhMjIwLi41YWQzODlkZjJkM2Q5NDkwZDIzYTdmMTFmNDkw
MTZkYThiMjNmZTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1J
bnNwZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rv
ci5jcHAKQEAgLTQwNyw3ICs0MDcsNyBAQCB2b2lkIFZNSW5zcGVjdG9yOjpkdW1wUmVnaXN0ZXJz
KENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgICAgICAgICAgdW5zaWduZWQgbGluZSA9IDA7CiAg
ICAgICAgICAgICB1bnNpZ25lZCB1bnVzZWRDb2x1bW4gPSAwOwogICAgICAgICAgICAgdmlzaXRv
ci0+Y29tcHV0ZUxpbmVBbmRDb2x1bW4obGluZSwgdW51c2VkQ29sdW1uKTsKLSAgICAgICAgICAg
IGRhdGFMb2dGKCJbUmV0dXJuVlBDXSAgICAgICAgICAgICAgICB8ICUxMHAgfCAlZCAobGluZSAl
ZClcbiIsIGl0LCB2aXNpdG9yLT5ieXRlY29kZU9mZnNldCgpLCBsaW5lKTsKKyAgICAgICAgICAg
IGRhdGFMb2dGKCJbUmV0dXJuVlBDXSAgICAgICAgICAgICAgICB8ICUxMHAgfCAlZCAobGluZSAl
ZClcbiIsIGl0LCB2aXNpdG9yLT5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCksIGxpbmUpOwogICAg
ICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4IGMyOGQwNzQ3NjhmYTc1NmMxMzdiY2ExNDRm
NzY0NzdlNjkxMDQxNjYuLjM2NDU0MGY0MjE0ODU4MmVmMTJjYzE2YWEzZmI0YjJhYzdjYTFjYmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxp
c3QKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApA
QCAtMTEzNCwzICsxMTM0LDExIEBAICQoUFJPSkVDVF9ESVIpL3htbC9YUGF0aFJlc3VsdC5pZGwK
ICQoUFJPSkVDVF9ESVIpL3htbC9YU0xUUHJvY2Vzc29yLmlkbAogJChQUk9KRUNUX0RJUikveG1s
L3htbGF0dHJzLmluCiAkKFBST0pFQ1RfRElSKS94bWwveG1sbnNhdHRycy5pbgorL1ZvbHVtZXMv
WGNvZGUxMU0zODJ2X20xOEEzOTEwMTFfbTE5QjY1X2kxN0I2NV90MTdLNjZfdzE3UzY2X2IxN1Ax
MDY2X0Zhc3RTaW1fQm9vc3RfNDdHQi9YY29kZS5hcHAvQ29udGVudHMvRGV2ZWxvcGVyL1BsYXRm
b3Jtcy9NYWNPU1gucGxhdGZvcm0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuMTUuSW50ZXJuYWwu
c2RrL3Vzci9sb2NhbC9pbmNsdWRlL1dlYktpdEFkZGl0aW9ucy9BcHBsZVBheUluc3RhbGxtZW50
Q29uZmlndXJhdGlvbi5pZGwKKy9Wb2x1bWVzL1hjb2RlMTFNMzgydl9tMThBMzkxMDExX20xOUI2
NV9pMTdCNjVfdDE3SzY2X3cxN1M2Nl9iMTdQMTA2Nl9GYXN0U2ltX0Jvb3N0XzQ3R0IvWGNvZGUu
YXBwL0NvbnRlbnRzL0RldmVsb3Blci9QbGF0Zm9ybXMvTWFjT1NYLnBsYXRmb3JtL0RldmVsb3Bl
ci9TREtzL01hY09TWDEwLjE1LkludGVybmFsLnNkay91c3IvbG9jYWwvaW5jbHVkZS9XZWJLaXRB
ZGRpdGlvbnMvQXBwbGVQYXlQYXltZW50QWRkaXRpb25zLmlkbAorL1ZvbHVtZXMvWGNvZGUxMU0z
ODJ2X20xOEEzOTEwMTFfbTE5QjY1X2kxN0I2NV90MTdLNjZfdzE3UzY2X2IxN1AxMDY2X0Zhc3RT
aW1fQm9vc3RfNDdHQi9YY29kZS5hcHAvQ29udGVudHMvRGV2ZWxvcGVyL1BsYXRmb3Jtcy9NYWNP
U1gucGxhdGZvcm0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuMTUuSW50ZXJuYWwuc2RrL3Vzci9s
b2NhbC9pbmNsdWRlL1dlYktpdEFkZGl0aW9ucy9BcHBsZVBheVBheW1lbnRNZXRob2RBZGRpdGlv
bnMuaWRsCisvVm9sdW1lcy9YY29kZTExTTM4MnZfbTE4QTM5MTAxMV9tMTlCNjVfaTE3QjY1X3Qx
N0s2Nl93MTdTNjZfYjE3UDEwNjZfRmFzdFNpbV9Cb29zdF80N0dCL1hjb2RlLmFwcC9Db250ZW50
cy9EZXZlbG9wZXIvUGxhdGZvcm1zL01hY09TWC5wbGF0Zm9ybS9EZXZlbG9wZXIvU0RLcy9NYWNP
U1gxMC4xNS5JbnRlcm5hbC5zZGsvdXNyL2xvY2FsL2luY2x1ZGUvV2ViS2l0QWRkaXRpb25zL0Fw
cGxlUGF5UGF5bWVudE1ldGhvZFVwZGF0ZUFkZGl0aW9ucy5pZGwKKy9Wb2x1bWVzL1hjb2RlMTFN
Mzgydl9tMThBMzkxMDExX20xOUI2NV9pMTdCNjVfdDE3SzY2X3cxN1M2Nl9iMTdQMTA2Nl9GYXN0
U2ltX0Jvb3N0XzQ3R0IvWGNvZGUuYXBwL0NvbnRlbnRzL0RldmVsb3Blci9QbGF0Zm9ybXMvTWFj
T1NYLnBsYXRmb3JtL0RldmVsb3Blci9TREtzL01hY09TWDEwLjE1LkludGVybmFsLnNkay91c3Iv
bG9jYWwvaW5jbHVkZS9XZWJLaXRBZGRpdGlvbnMvQXBwbGVQYXlSZXF1ZXN0QmFzZUFkZGl0aW9u
cy5pZGwKKy9Wb2x1bWVzL1hjb2RlMTFNMzgydl9tMThBMzkxMDExX20xOUI2NV9pMTdCNjVfdDE3
SzY2X3cxN1M2Nl9iMTdQMTA2Nl9GYXN0U2ltX0Jvb3N0XzQ3R0IvWGNvZGUuYXBwL0NvbnRlbnRz
L0RldmVsb3Blci9QbGF0Zm9ybXMvTWFjT1NYLnBsYXRmb3JtL0RldmVsb3Blci9TREtzL01hY09T
WDEwLjE1LkludGVybmFsLnNkay91c3IvbG9jYWwvaW5jbHVkZS9XZWJLaXRBZGRpdGlvbnMvQXBw
bGVQYXlTZXR1cC5pZGwKKy9Wb2x1bWVzL1hjb2RlMTFNMzgydl9tMThBMzkxMDExX20xOUI2NV9p
MTdCNjVfdDE3SzY2X3cxN1M2Nl9iMTdQMTA2Nl9GYXN0U2ltX0Jvb3N0XzQ3R0IvWGNvZGUuYXBw
L0NvbnRlbnRzL0RldmVsb3Blci9QbGF0Zm9ybXMvTWFjT1NYLnBsYXRmb3JtL0RldmVsb3Blci9T
REtzL01hY09TWDEwLjE1LkludGVybmFsLnNkay91c3IvbG9jYWwvaW5jbHVkZS9XZWJLaXRBZGRp
dGlvbnMvQXBwbGVQYXlTZXR1cEZlYXR1cmUuaWRsCisvVm9sdW1lcy9YY29kZTExTTM4MnZfbTE4
QTM5MTAxMV9tMTlCNjVfaTE3QjY1X3QxN0s2Nl93MTdTNjZfYjE3UDEwNjZfRmFzdFNpbV9Cb29z
dF80N0dCL1hjb2RlLmFwcC9Db250ZW50cy9EZXZlbG9wZXIvUGxhdGZvcm1zL01hY09TWC5wbGF0
Zm9ybS9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC4xNS5JbnRlcm5hbC5zZGsvdXNyL2xvY2FsL2lu
Y2x1ZGUvV2ViS2l0QWRkaXRpb25zL0dlc3R1cmVFdmVudC5pZGwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dlYkNv
cmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggNjZlOWZhNzQ5ZTRmMTQz
NGQ0NWIzMzM0NjhjMDI4NGVlNWZjNTUwYS4uMTYzNzBmNmZmM2E0OTdhOTNhNGVlYjhiNjg3NTg4
ODNiY2E5MDc1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0
cHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0
LnhjZmlsZWxpc3QKQEAgLTEsNCArMSw5IEBACiAjIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkg
dGhlIGdlbmVyYXRlLXhjZmlsZWxpc3RzIHNjcmlwdC4KKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0FwcGxlUGF5SW5zdGFsbG1lbnRDb25maWd1cmF0aW9uLmlk
bAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvQXBwbGVQYXlQ
YXltZW50QWRkaXRpb25zLmlkbAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvQXBwbGVQYXlQYXltZW50TWV0aG9kQWRkaXRpb25zLmlkbAorJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvQXBwbGVQYXlQYXltZW50TWV0aG9kVXBk
YXRlQWRkaXRpb25zLmlkbAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvQXBwbGVQYXlSZXF1ZXN0QmFzZUFkZGl0aW9ucy5pZGwKICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0FwcGxlUGF5U2V0dXAuaWRsCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9BcHBsZVBheVNldHVwRmVhdHVyZS5p
ZGwKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0J5dGVMZW5n
dGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGlucy5oCkBAIC03Niw2ICs4MSw4IEBAICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXBwbGVQYXlFcnJvckNvZGUuY3Bw
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FwcGxlUGF5
RXJyb3JDb2RlLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTQXBwbGVQYXlFcnJvckNvbnRhY3RGaWVsZC5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXBwbGVQYXlFcnJvckNvbnRhY3RGaWVsZC5oCiskKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FwcGxlUGF5SW5zdGFs
bG1lbnRDb25maWd1cmF0aW9uLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNBcHBsZVBheUluc3RhbGxtZW50Q29uZmlndXJhdGlvbi5oCiAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FwcGxlUGF5TGluZUl0ZW0u
Y3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FwcGxl
UGF5TGluZUl0ZW0uaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNBcHBsZVBheU1lcmNoYW50Q2FwYWJpbGl0eS5jcHAKQEAgLTg0LDYgKzkxLDggQEAgJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNBcHBsZVBheU1vZGlm
aWVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNB
cHBsZVBheU1vZGlmaWVyLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTQXBwbGVQYXlQYXltZW50LmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNBcHBsZVBheVBheW1lbnQuaAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNBcHBsZVBheVBheW1lbnRBZGRpdGlvbnMuY3Bw
CiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FwcGxlUGF5
UGF5bWVudEFkZGl0aW9ucy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU0FwcGxlUGF5UGF5bWVudEF1dGhvcml6YXRpb25SZXN1bHQuY3BwCiAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FwcGxlUGF5UGF5bWVudEF1
dGhvcml6YXRpb25SZXN1bHQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNBcHBsZVBheVBheW1lbnRBdXRob3JpemVkRXZlbnQuY3BwCkBAIC05MiwxMiAr
MTAxLDE2IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
QXBwbGVQYXlQYXltZW50Q29udGFjdC5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTQXBwbGVQYXlQYXltZW50Q29udGFjdC5oCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FwcGxlUGF5UGF5bWVudE1ldGhvZC5j
cHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXBwbGVQ
YXlQYXltZW50TWV0aG9kLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTQXBwbGVQYXlQYXltZW50TWV0aG9kQWRkaXRpb25zLmNwcAorJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNBcHBsZVBheVBheW1lbnRNZXRob2RB
ZGRpdGlvbnMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNBcHBsZVBheVBheW1lbnRNZXRob2RTZWxlY3RlZEV2ZW50LmNwcAogJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNBcHBsZVBheVBheW1lbnRNZXRob2RTZWxl
Y3RlZEV2ZW50LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTQXBwbGVQYXlQYXltZW50TWV0aG9kVHlwZS5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXBwbGVQYXlQYXltZW50TWV0aG9kVHlwZS5oCiAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FwcGxlUGF5UGF5bWVu
dE1ldGhvZFVwZGF0ZS5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTQXBwbGVQYXlQYXltZW50TWV0aG9kVXBkYXRlLmgKKyQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXBwbGVQYXlQYXltZW50TWV0aG9kVXBkYXRl
QWRkaXRpb25zLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNBcHBsZVBheVBheW1lbnRNZXRob2RVcGRhdGVBZGRpdGlvbnMuaAogJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNBcHBsZVBheVBheW1lbnRQYXNzLmNw
cAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNBcHBsZVBh
eVBheW1lbnRQYXNzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTQXBwbGVQYXlQYXltZW50UmVxdWVzdC5jcHAKQEAgLTEwNiw2ICsxMTksOCBAQCAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FwcGxlUGF5UmVxdWVz
dC5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXBw
bGVQYXlSZXF1ZXN0LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTQXBwbGVQYXlSZXF1ZXN0QmFzZS5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTQXBwbGVQYXlSZXF1ZXN0QmFzZS5oCiskKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FwcGxlUGF5UmVxdWVzdEJhc2VBZGRp
dGlvbnMuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U0FwcGxlUGF5UmVxdWVzdEJhc2VBZGRpdGlvbnMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNBcHBsZVBheVNlc3Npb24uY3BwCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FwcGxlUGF5U2Vzc2lvbi5oCiAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FwcGxlUGF5U2Vzc2lv
bkVycm9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1
dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVs
aXN0CmluZGV4IGM4NDU0YmJlNGVkMGIyYzIzZTdjNGNlZTMzOTA4ODFiZjY4MjZhZjMuLjI5OWZi
ODdhZTZkZTFhMzMyNWFiNjc3ZjZmMjg4ZmUwODYxNzFkM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0
L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTEyNiwzICsxMjYsNSBAQCAkKFBS
T0pFQ1RfRElSKS9XZWJQcm9jZXNzL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXIubWVzc2Fn
ZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvY29jb2EvVXNlck1lZGlhQ2FwdHVyZU1h
bmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvY29jb2EvVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9j
b20uYXBwbGUuV2ViUHJvY2Vzcy5zYi5pbgorL1ZvbHVtZXMvWGNvZGUxMU0zODJ2X20xOEEzOTEw
MTFfbTE5QjY1X2kxN0I2NV90MTdLNjZfdzE3UzY2X2IxN1AxMDY2X0Zhc3RTaW1fQm9vc3RfNDdH
Qi9YY29kZS5hcHAvQ29udGVudHMvRGV2ZWxvcGVyL1BsYXRmb3Jtcy9NYWNPU1gucGxhdGZvcm0v
RGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuMTUuSW50ZXJuYWwuc2RrL3Vzci9sb2NhbC9pbmNsdWRl
L1dlYktpdEFkZGl0aW9ucy9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUFkZGl0aW9ucy5tZXNz
YWdlcy5pbgorL1ZvbHVtZXMvWGNvZGUxMU0zODJ2X20xOEEzOTEwMTFfbTE5QjY1X2kxN0I2NV90
MTdLNjZfdzE3UzY2X2IxN1AxMDY2X0Zhc3RTaW1fQm9vc3RfNDdHQi9YY29kZS5hcHAvQ29udGVu
dHMvRGV2ZWxvcGVyL1BsYXRmb3Jtcy9NYWNPU1gucGxhdGZvcm0vRGV2ZWxvcGVyL1NES3MvTWFj
T1NYMTAuMTUuSW50ZXJuYWwuc2RrL3Vzci9sb2NhbC9pbmNsdWRlL1dlYktpdEFkZGl0aW9ucy9X
ZWJQcmVmZXJlbmNlc0FkZGl0aW9ucy55YW1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381616</attachid>
            <date>2019-10-22 15:07:25 -0700</date>
            <delta_ts>2019-10-22 15:11:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203276-20191022150723.patch</filename>
            <type>text/plain</type>
            <size>333594</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxNDU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
Nzk2MzRkZjY2NjI1NjAwZjY1NWFmMzQyZmZjNTgyZWI4MTBiMGExLi4wMjU5MmYxMDE3MTg1MjMz
ODc5ZTVjYTI2ZGFkYTZiOWIzZTc5NDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NjEgQEAKKzIwMTktMTAtMjIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBzaG91bGQgYmUgYSBwcm9wZXIgQysrIGNs
YXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMy
NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIG1ha2VzIGEgY2hhbmdlIHRvIGhvdyB3ZSByZWZlciB0byB0aGUgYnl0ZWNvZGUgaW5k
ZXggaW4KKyAgICAgICAgYSBieXRlY29kZSBzdHJlYW0uIFByZXZpb3VzbHkgd2UganVzdCB1c2Vk
IGFuIHVuc2lnbmVkIG51bWJlciB0bworICAgICAgICByZXByZXNlbnQgdGhlIGluZGV4LCB0aGlz
IHBhdGNoIGNoYW5nZXMgbW9zdCBvZiB0aGUgY29kZSB0byB1c2UgYQorICAgICAgICBCeXRlY29k
ZUluZGV4IGNsYXNzIGluc3RlYWQuIFRoZSBvbmx5IHBsYWNlcyB3aGVyZSB0aGlzIHBhdGNoIGRv
ZXMKKyAgICAgICAgbm90IGNoYW5nZSB0aGlzIGlzIGZvciBqdW1wIGFuZCBzd2l0Y2ggdGFyZ2V0
cyAvIGRlbHRhcy4KKworICAgICAgICBBZGRpdGlvbmFsbHksIHRoaXMgcGF0Y2ggYXR0ZW1wdHMg
dG8gY2Fub25pY2FsaXplIHRoZSB0ZXJtaW5vbG9neQorICAgICAgICBhcm91bmQgaG93IHdlIHJl
ZmVyIHRvIGJ5dGVjb2RlIGluZGljZXMuIE5vdyB3ZSB1c2UgdGhlIHdvcmQgaW5kZXgKKyAgICAg
ICAgdG8gcmVmZXIgdG8gdGhlIGJ5dGVjb2RlIGluZGV4IGNsYXNzIGFuZCBvZmZzZXQgdG8gcmVm
ZXIgdG8gdGhlCisgICAgICAgIHVuc2lnbmVkIGJ5dGUgb2Zmc2V0IGludG8gdGhlIGluc3RydWN0
aW9uIHN0cmVhbS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQnlW
YWxJbmZvLmg6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAg
KEpTQzo6Z2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVCYXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpj
b21wdXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRp
b24uY3BwOgorICAgICAgICAoSlNDOjpHZW5lcmF0b3JMaXZlbmVzc0FuYWx5c2lzOjpydW4pOgor
ICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVJbmRleDo6ZHVtcCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNv
ZGVJbmRleC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmFzQml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW5kZXg6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpk
ZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9y
IGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpvcGVyYXRvciA9PSBj
b25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yICE9IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3IgPCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yID4gY29uc3QpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUluZGV4OjpvcGVyYXRvciA8PSBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
SW5kZXg6Om9wZXJhdG9yID49IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6
ZnJvbUJpdHMpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4SGFzaDo6aGFzaCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXhIYXNoOjplcXVhbCk6CisgICAgICAgICogYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVLaWxscyk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNv
ZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVw
T3Zlckluc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0
aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQmxv
Y2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVu
ZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5l
c3NJbmZvQXRCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4
KToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5
dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6
OmNvbXB1dGVGcm9tTExJbnQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZvcik6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRh
KToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q2FsbExpbmtJ
bmZvRm9yQnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkUmFyZUNh
c2VQcm9maWxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVGb3JC
eXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVD
b3VudEZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmhhbmRsZXJG
b3JCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExp
dmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleFNsb3cpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb2x1bW5OdW1iZXJGb3JCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNPcERlYnVnRm9yTGluZUFuZENvbHVt
bik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp0cnlHZXRWYWx1ZVByb2ZpbGVGb3JCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsaWRhdGUpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmNvdWxkVGFrZVNwZWNpYWxBcml0aEZhc3RDYXNlKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpieXRlY29kZUluZGV4RnJvbUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVj
b2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYW5kbGVyRm9y
Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3Vy
ZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0
ZWNvZGVPZmZzZXRTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5l
TnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNvbHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3VsZFRha2VTcGVjaWFsRmFzdENhc2Up
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlT2Zmc2V0RnJvbUNh
bGxTaXRlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpjb3VsZFRha2VTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Ynl0ZWNvZGVJbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHA6
CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmFwcHJveGltYXRlSGFzaCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW46OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW46OmlzU2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9y
aWdpbjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
T3JpZ2luOjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6
T3V0T2ZMaW5lQ29kZU9yaWdpbjo6T3V0T2ZMaW5lQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6
OkNvZGVPcmlnaW46OmJ1aWxkQ29tcG9zaXRlVmFsdWUpOgorICAgICAgICAoSlNDOjpDb2RlT3Jp
Z2luOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6ZHVtcCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6RXhpdFByb2ZpbGU6OmV4aXRTaXRlc0Zvcik6CisgICAgICAgICogYnl0
ZWNvZGUvREZHRXhpdFByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRT
aXRlOjpGcmVxdWVudEV4aXRTaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRT
aXRlOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRT
aXRlOjpzdWJzdW1lcyBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0
ZTo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6Ynl0
ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlF1ZXJ5
YWJsZUV4aXRQcm9maWxlOjpoYXNFeGl0U2l0ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
RnJlcXVlbnRFeGl0U2l0ZTo6Ynl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGJ5dGVjb2RlL0RlZmVycmVkU291cmNlRHVtcC5jcHA6CisgICAgICAgIChKU0M6OkRlZmVy
cmVkU291cmNlRHVtcDo6RGVmZXJyZWRTb3VyY2VEdW1wKToKKyAgICAgICAgKEpTQzo6RGVmZXJy
ZWRTb3VyY2VEdW1wOjpkdW1wKToKKyAgICAgICAgKiBieXRlY29kZS9EZWZlcnJlZFNvdXJjZUR1
bXAuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvRnVsbEJ5dGVj
b2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OmdldExp
dmVuZXNzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6Om9wZXJh
bmRJc0xpdmUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAgICAg
KEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6OkdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0lDU3RhdHVzVXRpbHMuY3BwOgorICAgICAgICAo
SlNDOjpoYXNCYWRDYWNoZUV4aXRTaXRlKToKKyAgICAgICAgKiBieXRlY29kZS9JQ1N0YXR1c1V0
aWxzLmg6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SW5CeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5SWRT
dGF0dXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwOgorICAgICAg
ICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OmR1bXBJbkNvbnRleHQgY29uc3QpOgorICAgICAgICAq
IGJ5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9m
U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVz
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaDoKKyAgICAgICAgKEpT
Qzo6SW5zdHJ1Y3Rpb25TdHJlYW06OkJhc2VSZWY6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChK
U0M6Okluc3RydWN0aW9uU3RyZWFtOjpCYXNlUmVmOjppbmRleCBjb25zdCk6CisgICAgICAgIChK
U0M6Okluc3RydWN0aW9uU3RyZWFtOjphdCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlND
OjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6
OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OmlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OmJ5
dGVjb2RlT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKToKKyAgICAgICAgKiBieXRlY29kZS9NZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQp
OgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBi
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6U3RydWN0dXJlU3R1
YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVj
b2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFuZGxl
ckZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bGlu
ZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29k
ZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aDoKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6UmFy
ZUNhc2VQcm9maWxlOjpSYXJlQ2FzZVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpnZXRSYXJlQ2Fz
ZVByb2ZpbGVCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Z2V0UmFyZUNhc2VQcm9maWxl
Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZmluYWxpemUpOgor
ICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6
RGVidWdnZXJDYWxsRnJhbWU6OmN1cnJlbnRQb3NpdGlvbik6CisgICAgICAgICogZGZnL0RGR0Jh
c2ljQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2sp
OgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6Z2V0
Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpibG9ja0ZvckJ5dGVj
b2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
Zmx1c2hGb3JUZXJtaW5hbEltcGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpmbHVzaElmVGVybWluYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpi
cmFuY2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0UHJlZGlj
dGlvbldpdGhvdXRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
Z2V0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFy
cmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om1ha2VTYWZlKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bWFrZURpdlNhZmUpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVW50YXJnZXRhYmxlQmxv
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjptYWtlQmxvY2tUYXJnZXRh
YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxs
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGxWYXJpYW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6
OkNvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6
OkNvbW1vbkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0NvbW1v
bkRhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpjYXRjaE9TUkVudHJ5RGF0
YUZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OmFwcGVu
ZENhdGNoRW50cnlwb2ludCk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Y29tcGlsZUltcGwpOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDoKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OndpbGxDYXRjaEV4Y2VwdGlvbkluTWFjaGluZUZyYW1lKToKKyAgICAgICAgKiBkZmcv
REZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29kZTo6Y2xlYXJPU1JFbnRyeUJsb2NrQW5kUmVzZXRUaHJlc2hvbGRzKToKKyAg
ICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmFw
cGVuZE9TUkVudHJ5RGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6b3NyRW50cnlE
YXRhRm9yQnl0ZWNvZGVJbmRleCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SklUQ29tcGlsZXIpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0U3RhcnRPZkNvZGUpOgorICAg
ICAgICAqIGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpoYW5k
bGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkVudHJ5RGF0YTo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVw
YXJlQ2F0Y2hPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6CisgICAgICAg
IChKU0M6OkRGRzo6Z2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6cmVp
ZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRv
VGFyZ2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmludE9TUkV4aXQpOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkV4aXQ6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0
OjpkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKToKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRK
dW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDoK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJh
dGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1w
bCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNl
c3NhcnkpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6b3NyRW50cnlCeXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFu
Ojp0aWVyVXBJbkxvb3BIaWVyYXJjaHkpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OnRpZXJV
cEFuZE9TUkVudGVyQnl0ZWNvZGVzKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVN1Yik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmVtaXRTd2l0Y2hDaGFyU3RyaW5nSnVtcCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAg
ICAgKEpTQzo6REZHOjpUaWVyVXBDaGVja0luamVjdGlvblBoYXNlOjpidWlsZE5hdHVyYWxMb29w
VG9Mb29wSGludE1hcCk6CisgICAgICAgICogZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRm9yT1NS
RW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUp
OgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZnRsL0ZUTENvbXBp
bGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExG
b3JPU1JFbnRyeUpJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENv
ZGU6OnNldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklU
Q29kZTo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9C
My5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVZhbHVlQWRkKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVZhbHVlU3ViKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVZhbHVlTXVsKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUFyaXRoQWRkT3JTdWIp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVmFsdWVOZWdh
dGUpOgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuaDoKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNh
bGxTaXRlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxT
aXRlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OmNvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmR1bXAp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJ
bmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJh
dG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpvcGVyYXRvcj09
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Yml0cyBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAo
SlNDOjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleDo6RGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgpOgor
ICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6OkdldFN0YWNrVHJhY2VGdW5jdG9yOjpvcGVyYXRvcigpIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6ZmluZEV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAqIGludGVy
cHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwOgorICAgICAgICAoSlNDOjpTaGFkb3dDaGlja2VuOjp1
cGRhdGUpOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6CisgICAgICAg
IChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZSk6CisgICAgICAgIChKU0M6
OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAgIChKU0M6OlN0YWNrVmlz
aXRvcjo6RnJhbWU6OnJldHJpZXZlRXhwcmVzc2lvbkluZm8gY29uc3QpOgorICAgICAgICAoSlND
OjpTdGFja1Zpc2l0b3I6OkZyYW1lOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Ynl0
ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmJ5
dGVjb2RlT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpKSVQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRFbnRlck9wdGlt
aXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKToKKyAgICAgICAgKEpTQzo6SklUOjps
aW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJz
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkNhbGxSZWNvcmQ6OkNhbGxS
ZWNvcmQpOgorICAgICAgICAoSlNDOjpTbG93Q2FzZUVudHJ5OjpTbG93Q2FzZUVudHJ5KToKKyAg
ICAgICAgKEpTQzo6U3dpdGNoUmVjb3JkOjpTd2l0Y2hSZWNvcmQpOgorICAgICAgICAoSlNDOjpC
eVZhbENvbXBpbGF0aW9uSW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAqIGpp
dC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJ
VENvZGVNYXAuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZU1hcDo6RW50cnk6OkVudHJ5KToKKyAg
ICAgICAgKEpTQzo6SklUQ29kZU1hcDo6RW50cnk6OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVRDb2RlTWFwOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlTWFw
OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklURGlzYXNzZW1ibGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklURGlzYXNzZW1ibGVyOjpkdW1wVmVjdG9yRm9ySW5zdHJ1Y3Rpb25zKToKKyAg
ICAgICAgKEpTQzo6SklURGlzYXNzZW1ibGVyOjpyZXBvcnRJbnN0cnVjdGlvbnMpOgorICAgICAg
ICAqIGppdC9KSVREaXNhc3NlbWJsZXIuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXROYWtlZENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXROYWtlZFRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjp1cGRhdGVUb3BDYWxsRnJhbWUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6SklUOjphZGRTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJVDo6YWRk
SnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93VG9Ib3QpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6Omxp
bmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9j
aGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3
aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgICogaml0L0pJVE9wZXJh
dGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZXRCeVZhbCk6CisgICAgICAgIChKU0M6OnRyeUdl
dEJ5VmFsT3B0aW1pemUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfaWQpOgorICAgICAgICAqIGppdC9KSVRXb3Jr
bGlzdC5jcHA6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpQbGFuOjpQbGFuKToKKyAgICAg
ICAgKEpTQzo6SklUV29ya2xpc3Q6OlBsYW46OmNvbXBpbGVOb3cpOgorICAgICAgICAoSlNDOjpK
SVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmNv
bXBpbGVOb3cpOgorICAgICAgICAqIGppdC9KSVRXb3JrbGlzdC5oOgorICAgICAgICAqIGppdC9Q
Q1RvQ29kZU9yaWdpbk1hcC5jcHA6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpQ
Q1RvQ29kZU9yaWdpbk1hcCk6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpmaW5k
UEMgY29uc3QpOgorICAgICAgICAqIGppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oOgorICAgICAgICAo
SlNDOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKToKKyAgICAg
ICAgKiBqaXQvU2xvd1BhdGhDYWxsLmg6CisgICAgICAgIChKU0M6OkpJVFNsb3dQYXRoQ2FsbDo6
Y2FsbCk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTElu
dDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyT3Jp
Z2luLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Ok9yaWdpbjo6T3JpZ2luKToKKyAgICAg
ICAgKEpTQzo6UHJvZmlsZXI6Ok9yaWdpbjo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OlBy
b2ZpbGVyOjpPcmlnaW46OnRvSlMgY29uc3QpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVy
T3JpZ2luLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpPcmlnaW46Ok9yaWdpbik6CisgICAg
ICAgIChKU0M6OlByb2ZpbGVyOjpPcmlnaW46Om9wZXJhdG9yISBjb25zdCk6CisgICAgICAgIChK
U0M6OlByb2ZpbGVyOjpPcmlnaW46OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpQcm9maWxlcjo6T3JpZ2luOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6
Ok9yaWdpbjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvRXJyb3IuY3BwOgorICAgICAgICAoSlNDOjpnZXRCeXRlY29kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6Z2V0Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvRXJy
b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlND
OjphcHBlbmRTb3VyY2VUb0Vycm9yKToKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OnRyeUdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpTYW1wbGlu
Z1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKToKKyAgICAgICAgKEpTQzo6
U2FtcGxpbmdQcm9maWxlcjo6cmVwb3J0VG9wQnl0ZWNvZGVzKToKKyAgICAgICAgKiBydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuaDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3Rh
Y2tGcmFtZTo6Q29kZUxvY2F0aW9uOjpoYXNCeXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAg
KiBydW50aW1lL1N0YWNrRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpTdGFja0ZyYW1lOjpTdGFj
a0ZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6Y29tcHV0ZUxpbmVBbmRDb2x1bW4g
Y29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3RhY2tGcmFtZS5oOgorICAgICAgICAoSlNDOjpT
dGFja0ZyYW1lOjpoYXNCeXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RhY2tG
cmFtZTo6Ynl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6Omhhc0J5dGVj
b2RlT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6Ynl0
ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmR1bXBSZWdpc3RlcnMpOgorCiAyMDE5LTEwLTIy
ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggaW5jb3JyZWN0
IGFzc2VydGlvbiBpbiBvcGVyYXRpb25SZWdFeHBFeGVjTm9uR2xvYmFsT3JTdGlja3koKS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjA4OGI5NWY0YTJjMGViMDVmNGQ2MDc4ODVk
YmEwZDc2MDViNmEyNy4uZTY2NGU0MDAzMDg3YmEzOTg4ZTE0MmE5MTU4NTY2OWZkN2JiNDc0NSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk0NCw2ICs5NDQsNyBAQAogCQk1MzU1
NTcxNDFEOUQ5RUE1MDA2RDU4M0IgLyogV2FzbU1lbW9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM1NTU3MTMxRDlEOUVBNTAwNkQ1ODNCIC8qIFdh
c21NZW1vcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1MzVDMjQ2MTFGNzg5MjhFMDA2RUM0MEUgLyogY3JlYXRlX3JlZ2V4X3RhYmxlcyBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MThGODIxMTE3OEVC
NEIwMDI0NjVBNyAvKiBjcmVhdGVfcmVnZXhfdGFibGVzICovOyB9OwogCQk1MzVDMjQ2QzFGN0Ex
Nzc4MDA2RUM0MEUgLyogVW5pZmllZFNvdXJjZTEzNi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzVDMjQ2QjFGN0ExNzc3MDA2RUM0MEUgLyogVW5p
ZmllZFNvdXJjZTEzNi5jcHAgKi87IH07CisJCTUzNjYzRkRBMjM1NjJGOTYwMDVFQTY4QyAvKiBC
eXRlY29kZUluZGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzY2M0ZEOTIzNTYyRjkwMDA1RUE2OEMgLyogQnl0ZWNvZGVJbmRleC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNkIzMTBDMUY3MUM1
OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlMTE5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNkIzMDg3MUY3MUM1MzgwMDM3RkMzMyAvKiBVbmlm
aWVkU291cmNlMTE5LmNwcCAqLzsgfTsKIAkJNTM2QjMxMEQxRjcxQzU5OTAwMzdGQzMzIC8qIFVu
aWZpZWRTb3VyY2UxMjUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTM2QjMwODgxRjcxQzUzODAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UxMjUuY3Bw
ICovOyB9OwogCQk1MzZCMzEwRTFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTEzMS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzZCMzA4
OTFGNzFDNTM4MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTEzMS5jcHAgKi87IH07CkBAIC0zNjAy
LDYgKzM2MDMsOCBAQAogCQk1MzU1NTcxNTFEOURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtTWVtb3J5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM1QzI0NkIxRjdBMTc3NzAwNkVDNDBFIC8q
IFVuaWZpZWRTb3VyY2UxMzYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gVW5pZmllZFNvdXJjZTEzNi5jcHA7IHBhdGggPSAiRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlw
dENvcmUvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMzYuY3BwIjsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTM1RTA4QzkyMjU0NjBBQjAwREYwMENBIC8qIHBv
c3Rwcm9jZXNzLWhlYWRlci1ydWxlICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQuc2g7IHBhdGggPSAi
cG9zdHByb2Nlc3MtaGVhZGVyLXJ1bGUiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MzYwREFCQjIzNTZBRENBMDAzRjZBQjggLyogQnl0ZWNvZGVJbmRleC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBCeXRlY29kZUluZGV4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTM2NjNGRDkyMzU2MkY5MDAwNUVBNjhDIC8qIEJ5dGVjb2RlSW5kZXguaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVJbmRleC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzY5NkU1NzIwQTNBNzAyMDBEN0UwMUUgLyogQnl0ZWNvZGVTdHJ1Y3RzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlU3RydWN0cy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzZCMzA4NzFGNzFDNTM4MDAzN0ZDMzMgLyogVW5p
ZmllZFNvdXJjZTExOS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBV
bmlmaWVkU291cmNlMTE5LmNwcDsgcGF0aCA9ICJEZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29y
ZS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTExOS5jcHAiOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MzZCMzA4ODFGNzFDNTM4MDAzN0ZDMzMgLyogVW5pZmll
ZFNvdXJjZTEyNS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBVbmlm
aWVkU291cmNlMTI1LmNwcDsgcGF0aCA9ICJEZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS91
bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTEyNS5jcHAiOyBzb3VyY2VUcmVlID0gQlVJTFRf
UFJPRFVDVFNfRElSOyB9OwpAQCAtODEwMiw2ICs4MTA1LDggQEAKIAkJCQlFM0QyNjQyNjFEMzhD
MDQyMDAwQkUxNzQgLyogQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwICovLAogCQkJCUUz
RDI2NDI3MUQzOEMwNDIwMDBCRTE3NCAvKiBCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5oICov
LAogCQkJCUUzRDI2NDI4MUQzOEMwNDIwMDBCRTE3NCAvKiBCeXRlY29kZUdyYXBoLmggKi8sCisJ
CQkJNTM2MERBQkIyMzU2QURDQTAwM0Y2QUI4IC8qIEJ5dGVjb2RlSW5kZXguY3BwICovLAorCQkJ
CTUzNjYzRkQ5MjM1NjJGOTAwMDVFQTY4QyAvKiBCeXRlY29kZUluZGV4LmggKi8sCiAJCQkJNzA5
NEM0REMxQUU0Mzk1MzAwNDFBMkVFIC8qIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuY3BwICov
LAogCQkJCTcwOTRDNEREMUFFNDM5NTMwMDQxQTJFRSAvKiBCeXRlY29kZUludHJpbnNpY1JlZ2lz
dHJ5LmggKi8sCiAJCQkJMEYyREQ4MEExQUIzRDg1ODAwQkJCOEU4IC8qIEJ5dGVjb2RlS2lsbHMu
aCAqLywKQEAgLTg5OTYsNiArOTAwMSw3IEBACiAJCQkJOTY5QTA3MjMwRUQxQ0UzMzAwRjFGNjgx
IC8qIEJ5dGVjb2RlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFODFEMzhE
MDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzMjhEQUU5MUQzOEQwMDUwMDFBMjUyOSAvKiBCeXRlY29kZUdyYXBoLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MzY2M0ZEQTIzNTYyRjk2MDA1RUE2OEMgLyogQnl0ZWNvZGVJbmRleC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5NEM0REYxQUU0Mzk1MzAwNDFBMkVFIC8qIEJ5dGVjb2Rl
SW50cmluc2ljUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODBCMUFCM0Q4NTgw
MEJCQjhFOCAvKiBCeXRlY29kZUtpbGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZDQUUxMzE3
QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggaW4gSGVhZGVycyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA3Y2VkNjhiMTc3ZjQ5MWUzOTA0OTE5
NDBkZjg4ZWUzNTQyNDg2ZmE3Li5jMzI4ZmJhYjA4ZDliODNjNjE3YTY1MjQ1N2M2MTA5MTE4MmQ1
NjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0xOTcsNiArMTk3LDcgQEAgYnl0
ZWNvZGUvQXJyYXlQcm9maWxlLmNwcAogYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcAog
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCiBieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlm
aWNhdGlvbi5jcHAKK2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCiBieXRlY29kZS9CeXRlY29k
ZUludHJpbnNpY1JlZ2lzdHJ5LmNwcAogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmNwcAogYnl0ZWNvZGUvQnl0ZWNvZGVSZXdyaXRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAppbmRleCAzMzk5ZDU4MWUxZjJjOGZjN2NmMTcyZTY2NmU3
YzcyODc4ZjRiNTQ1Li5iN2U5Mzc5NDVhOTA5NDZlMmMwNTUyMjc2Y2IxMzA1MzBmNDM4OWFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCkBAIC0yMjUsNyAr
MjI1LDcgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiBzdHJ1Y3QgQnlWYWxJbmZvIHsKICAgICBCeVZhbEluZm8oKSB7
IH0KIAotICAgIEJ5VmFsSW5mbyh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlTG9jYXRpb25K
dW1wPEpTSW50ZXJuYWxQdHJUYWc+IG5vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9uSnVtcDxKU0lu
dGVybmFsUHRyVGFnPiBiYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4gZXhjZXB0aW9uSGFuZGxlciwgSklUQXJyYXlNb2RlIGFycmF5TW9kZSwgQXJy
YXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IGJhZFR5cGVEb25lVGFyZ2V0LCBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PiBiYWRUeXBlTmV4dEhvdFBhdGhUYXJnZXQsIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IHNsb3dQYXRoVGFyZ2V0KQorICAgIEJ5VmFsSW5mbyhCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgsIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gbm90SW5kZXhKdW1w
LCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IGJhZFR5cGVKdW1wLCBDb2RlTG9j
YXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBleGNlcHRpb25IYW5kbGVyLCBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gYmFkVHlwZURvbmVUYXJnZXQsIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGJhZFR5cGVOZXh0SG90UGF0aFRhcmdldCwgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhUYXJnZXQpCiAgICAgICAgIDog
bm90SW5kZXhKdW1wKG5vdEluZGV4SnVtcCkKICAgICAgICAgLCBiYWRUeXBlSnVtcChiYWRUeXBl
SnVtcCkKICAgICAgICAgLCBleGNlcHRpb25IYW5kbGVyKGV4Y2VwdGlvbkhhbmRsZXIpCkBAIC0y
NDksNyArMjQ5LDcgQEAgc3RydWN0IEJ5VmFsSW5mbyB7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gYmFkVHlwZU5leHRIb3RQYXRoVGFyZ2V0OwogICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoVGFyZ2V0OwogICAgIEFycmF5UHJv
ZmlsZSogYXJyYXlQcm9maWxlOwotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXg7CisgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OwogICAgIHVuc2lnbmVkIHNsb3dQYXRoQ291bnQ7CiAg
ICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICBJZGVudGlmaWVyIGNh
Y2hlZElkOwpAQCAtMjYwLDcgKzI2MCw3IEBAIHN0cnVjdCBCeVZhbEluZm8gewogICAgIGJvb2wg
c2VlbiA6IDE7CiB9OwogCi1pbmxpbmUgdW5zaWduZWQgZ2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRl
eChCeVZhbEluZm8qIGluZm8pCitpbmxpbmUgQnl0ZWNvZGVJbmRleCBnZXRCeVZhbEluZm9CeXRl
Y29kZUluZGV4KEJ5VmFsSW5mbyogaW5mbykKIHsKICAgICByZXR1cm4gaW5mby0+Ynl0ZWNvZGVJ
bmRleDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUJhc2ljQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlQmFzaWNCbG9jay5jcHAKaW5kZXggMTBjNjViYjlkZDcwOWE5YWY3YWJhNmNlYjhhOWI3MzU5
NzcxNjQxYi4uMDJkNjQ0Yjg4M2ZmYjNjZDk5Y2E5OWI3YmNmMzlhYTkyNmI3MjIxZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9j
ay5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIEJ5dGVjb2RlQmFzaWNCbG9jazo6Y29tcHV0
ZUltcGwoQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mCiAgICAgICAg
ICAgICAvLyBibG9jayBiZWNhdXNlIHRoZSBmaW5hbGx5IGJsb2NrIHdpbGwgY3JlYXRlIGl0cyBv
d24gY2F0Y2gsIHdoaWNoIHdpbGwgZ2VuZXJhdGUgYSBIYW5kbGVySW5mby4KICAgICAgICAgICAg
IGlmIChpc1Rocm93KG9wY29kZUlEKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChieXRlY29k
ZU9mZnNldCArIGluc3RydWN0aW9uLT5zaXplKCkgPT0gYmxvY2stPmxlYWRlck9mZnNldCgpICsg
YmxvY2stPnRvdGFsTGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIGF1dG8qIGhhbmRsZXIgPSBj
b2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7
CisgICAgICAgICAgICAgICAgYXV0byogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5
dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbi5vZmZzZXQoKSkpOwogICAgICAg
ICAgICAgICAgIGZhbGxzVGhyb3VnaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlmICghaGFu
ZGxlcikgewogICAgICAgICAgICAgICAgICAgICBsaW5rQmxvY2tzKGJsb2NrLCBleGl0LmdldCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdl
bmVyYXRvcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwCmluZGV4IDI4NjA1MWNjOTVlYTRkOGZkYTY2ZmIw
OTk3YmI1OTNlZGU3ZTMyYTYuLjQzY2U1NjFmMzgyNmQ2YjBiMTRjODQxMWNiZjgxMWI4MzliN2Zl
OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdl
bmVyYXRvcmlmaWNhdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcnVuTGl2ZW5lc3NGaXhwb2ludChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywg
bV9nZW5lcmF0b3JpZmljYXRpb24uZ3JhcGgoKSk7CiAKICAgICAgICAgZm9yIChZaWVsZERhdGEm
IGRhdGEgOiBtX2dlbmVyYXRvcmlmaWNhdGlvbi55aWVsZHMoKSkKLSAgICAgICAgICAgIGRhdGEu
bGl2ZW5lc3MgPSBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25zLCBtX2dlbmVyYXRvcmlmaWNhdGlvbi5ncmFwaCgpLCBtX2dlbmVyYXRvcmlmaWNh
dGlvbi5pbnN0cnVjdGlvbnMoKS5hdChkYXRhLnBvaW50KS5uZXh0KCkub2Zmc2V0KCkpOworICAg
ICAgICAgICAgZGF0YS5saXZlbmVzcyA9IGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChj
b2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9nZW5lcmF0b3JpZmljYXRpb24uZ3JhcGgoKSwgQnl0
ZWNvZGVJbmRleChtX2dlbmVyYXRvcmlmaWNhdGlvbi5pbnN0cnVjdGlvbnMoKS5hdChkYXRhLnBv
aW50KS5uZXh0KCkub2Zmc2V0KCkpKTsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTdh
Mzg1YmU5YzI4MmRmZDhkMWJlYTUwM2E1NDczYWVmMGE5YzRjNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmNwcApAQCAtMCww
ICsxLDM2IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCeXRlY29kZUluZGV4LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIEJ5dGVj
b2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgiYmMjIiwgb2Zmc2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEy
N2MxMDI5N2M4MjYxMTg2ZGU1MjU1NDI3OGI0ODllMTFkOTkyOTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCkBAIC0wLDAg
KzEsOTYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvSGFzaFRyYWl0cy5oPgorCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFByaW50U3RyZWFt
OworfQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQnl0ZWNvZGVJbmRleCB7CitwdWJsaWM6
CisgICAgQnl0ZWNvZGVJbmRleCgpID0gZGVmYXVsdDsKKyAgICBleHBsaWNpdCBCeXRlY29kZUlu
ZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICA6IG1fb2Zmc2V0KGJ5dGVjb2Rl
T2Zmc2V0KQorICAgIHsgfQorCisgICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9vZmZzZXQ7IH0KKyAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBtX29mZnNl
dDsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIFdURjo6aW50SGFzaCht
X29mZnNldCk7IH0KKyAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBkZWxldGVkVmFsdWUoKSB7IHJl
dHVybiBmcm9tQml0cyhzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkgLSAxKTsg
fQorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhp
cyA9PSBkZWxldGVkVmFsdWUoKTsgfQorCisgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJp
dHModWludDMyX3QgYml0cyk7CisKKyAgICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQgIT0gc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOyB9CisgICAgYm9vbCBvcGVyYXRvciA9PShj
b25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gYXNCaXRzKCkgPT0gb3Ro
ZXIuYXNCaXRzKCk7IH0KKyAgICBib29sIG9wZXJhdG9yICE9KGNvbnN0IEJ5dGVjb2RlSW5kZXgm
IG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgYm9vbCBv
cGVyYXRvciA8KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0Jp
dHMoKSA8IG90aGVyLmFzQml0cygpOyB9CisgICAgYm9vbCBvcGVyYXRvciA+KGNvbnN0IEJ5dGVj
b2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA+IG90aGVyLmFzQml0cygp
OyB9CisgICAgYm9vbCBvcGVyYXRvciA8PShjb25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29u
c3QgeyByZXR1cm4gYXNCaXRzKCkgPD0gb3RoZXIuYXNCaXRzKCk7IH0KKyAgICBib29sIG9wZXJh
dG9yID49KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMo
KSA+PSBvdGhlci5hc0JpdHMoKTsgfQorCisKKyAgICB2b2lkIGR1bXAoV1RGOjpQcmludFN0cmVh
bSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1fb2Zmc2V0IHsgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpIH07Cit9OworCitpbmxpbmUgQnl0ZWNvZGVJbmRl
eCBCeXRlY29kZUluZGV4Ojpmcm9tQml0cyh1aW50MzJfdCBiaXRzKQoreworICAgIEJ5dGVjb2Rl
SW5kZXggcmVzdWx0OworICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHM7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RydWN0IEJ5dGVjb2RlSW5kZXhIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBCeXRlY29kZUluZGV4JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0K
KyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBCeXRlY29kZUluZGV4JiBhLCBjb25zdCBCeXRl
Y29kZUluZGV4JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkJ5dGVj
b2RlSW5kZXg+IHsKKyAgICB0eXBlZGVmIEpTQzo6Qnl0ZWNvZGVJbmRleEhhc2ggSGFzaDsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBz
dHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkJ5dGVjb2RlSW5kZXg+IDogU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzPEpTQzo6Qnl0ZWNvZGVJbmRleD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0
eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5jcHAKaW5kZXggMzMwYzdjN2E5OGRlZTcwYjE5NjFjZWQwZTFjNWMyNDI3N2IyNWU4
Yi4uYTFjMjgyMWJmM2QwYTJkZDUzODEwNGQwNTNiZTBhYjA5NzkwYzkwOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5jcHAKQEAgLTQ2LDIwICs0NiwyMCBAQCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6
OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAg
ZHVtcFJlc3VsdHMoY29kZUJsb2NrKTsKIH0KIAotdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCit2b2lkIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRW
ZWN0b3ImIHJlc3VsdCkKIHsKLSAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBC
eXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogICAgIEFTU0VSVChibG9jayk7CiAg
ICAgQVNTRVJUKCFibG9jay0+aXNFbnRyeUJsb2NrKCkpOwogICAgIEFTU0VSVCghYmxvY2stPmlz
RXhpdEJsb2NrKCkpOwogICAgIHJlc3VsdC5yZXNpemUoYmxvY2stPm91dCgpLm51bUJpdHMoKSk7
Ci0gICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fZ3JhcGgsIGJsb2NrLCBieXRlY29kZU9mZnNldCwg
cmVzdWx0KTsKKyAgICBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJs
b2NrLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX2dyYXBoLCBibG9jaywgYnl0ZWNvZGVJ
bmRleCwgcmVzdWx0KTsKIH0KIAotRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIEZhc3RCaXRWZWN0b3Ig
b3V0OwotICAgIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRl
Y29kZU9mZnNldCwgb3V0KTsKKyAgICBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoY29k
ZUJsb2NrLCBieXRlY29kZUluZGV4LCBvdXQpOwogICAgIHJldHVybiBvdXQ7CiB9CiAKQEAgLTc3
LDcgKzc3LDcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2
ZW5lc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bGxCeXQKICAgICAgICAgCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGJsb2NrLT5vZmZzZXRzKCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5vZmZzZXRzKClbaV07Ci0gICAg
ICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKSwgbV9ncmFwaCwgYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgICAgICAgICBzdGVw
T3Zlckluc3RydWN0aW9uKGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9n
cmFwaCwgQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIG91dCk7CiAgICAgICAgICAgICBy
ZXN1bHQubV9tYXBbYnl0ZWNvZGVPZmZzZXRdID0gb3V0OwogICAgICAgICB9CiAgICAgfQpAQCAt
MTAwLDcgKzEwMCw3IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlS2ls
bHMoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlS2lsbHMmCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGJsb2NrLT5vZmZzZXRzKCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5vZmZzZXRzKClbaV07CiAgICAgICAgICAg
ICBzdGVwT3Zlckluc3RydWN0aW9uKAotICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgYnl0ZWNvZGVPZmZzZXQsCisgICAgICAgICAg
ICAgICAgY29kZUJsb2NrLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX2dyYXBoLCBCeXRl
Y29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwKICAgICAgICAgICAgICAgICBbJl0gKHVuc2lnbmVk
IGluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZm9yIHVzZXMuCiAgICAg
ICAgICAgICAgICAgICAgIGlmIChvdXRbaW5kZXhdKQpAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQg
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9j
aykKICAgICAgICAgICAgIGNvbnN0IGF1dG8gY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rp
b25zLmF0KGJ5dGVjb2RlT2Zmc2V0KTsKIAogICAgICAgICAgICAgZGF0YUxvZ0YoIkxpdmUgdmFy
aWFibGVzOiIpOwotICAgICAgICAgICAgRmFzdEJpdFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KTsKKyAg
ICAgICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUJlZm9yZSA9IGdldExpdmVuZXNzSW5mb0F0Qnl0
ZWNvZGVJbmRleChjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpKTsKICAg
ICAgICAgICAgIGR1bXBCaXRWZWN0b3IobGl2ZUJlZm9yZSk7CiAgICAgICAgICAgICBkYXRhTG9n
RigiXG4iKTsKICAgICAgICAgICAgIGNvZGVCbG9jay0+ZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZp
bGUoKSwgY3VycmVudEluc3RydWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAppbmRleCA3YmVmNGNm
MWRjZTJhMWE3ZmMxODNhZmVhZTIxZGQ1OTE0ZjhmOTQ5Li5lYWMxODVkYTU2Yzk2YzM4NWI5ZTMx
YmE3YWM4ZTdkZTc0OWI2NTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCkBAIC0zNywxNSArMzcsMTUg
QEAgY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3M7CiAKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbiB7CiBwcm90ZWN0ZWQ6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZSwgdHlwZW5hbWUgVXNlRnVuY3RvciwgdHlwZW5hbWUgRGVmRnVuY3Rvcj4gdm9pZCBzdGVw
T3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYs
IEJ5dGVjb2RlR3JhcGgmLCBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0
LCBjb25zdCBVc2VGdW5jdG9yJiwgY29uc3QgRGVmRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1
bmN0b3I+IHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCwgY29uc3QgVXNl
RnVuY3RvciYsIGNvbnN0IERlZkZ1bmN0b3ImKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENv
ZGVCbG9ja1R5cGU+IHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgSW5zdHJ1Y3Rpb25TdHJlYW06
Ok9mZnNldCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgb3V0KTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPiB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJs
b2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVj
b2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIG91dCk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+IGJvb2wgY29tcHV0ZUxvY2FsTGl2
ZW5lc3NGb3JCeXRlY29kZU9mZnNldChDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25z
JiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlQmFzaWNCbG9jayosIHVuc2lnbmVkIHRhcmdldE9m
ZnNldCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2Rl
QmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+IGJvb2wgY29tcHV0ZUxvY2FsTGl2ZW5l
c3NGb3JCeXRlY29kZUluZGV4KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBC
eXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVCYXNpY0Jsb2NrKiwgQnl0ZWNvZGVJbmRleCwgRmFzdEJp
dFZlY3RvciYgcmVzdWx0KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUs
IHR5cGVuYW1lIEluc3RydWN0aW9ucz4gYm9vbCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2Nr
KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0
ZWNvZGVCYXNpY0Jsb2NrKik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
LCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+IEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRC
eXRlY29kZU9mZnNldChDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNv
ZGVHcmFwaCYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+IEZhc3RCaXRWZWN0b3IgZ2V0
TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVj
dGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+IHZvaWQgcnVuTGl2
ZW5lc3NGaXhwb2ludChDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNv
ZGVHcmFwaCYpOwogfTsKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIGZyaWVuZCBjbGFz
cyBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb247CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzKENvZGVCbG9jayopOwogICAgIAotICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZv
QXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7Cisg
ICAgRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2Nr
KiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgdm9pZCBjb21wdXRlRnVsbExpdmVuZXNzKENv
ZGVCbG9jayosIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpOwogICAgIHZvaWQgY29tcHV0
ZUtpbGxzKENvZGVCbG9jayosIEJ5dGVjb2RlS2lsbHMmIHJlc3VsdCk7CkBAIC02NSw3ICs2NSw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBkdW1wUmVzdWx0cyhDb2RlQmxvY2sqKTsK
IAotICAgIHZvaWQgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2sqLCB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYpOworICAgIHZvaWQgZ2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgsIEZhc3RC
aXRWZWN0b3ImKTsKIAogICAgIEJ5dGVjb2RlR3JhcGggbV9ncmFwaDsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpc0lubGluZXMuaAppbmRleCA3MWZmNTZmN2VhNjhhMmY0NTVjZjY3OGIzYzc5YTJk
N2JhYjliMzlkLi43YTkwMDMyMjJlNTE2N2JiMDUxMDk1NzAyYjM4MjYzYTM1YzA4NDNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKQEAgLTYxLDcgKzYxLDcgQEAgaW5saW5lIGJv
b2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAv
LyBTaW1wbGlmaWVkIGludGVyZmFjZSB0byBieXRlY29kZSB1c2UvZGVmLCB3aGljaCBkZXRlcm1p
bmVzIGRlZnMgZmlyc3QgYW5kIHRoZW4gdXNlcywgYW5kIGluY2x1ZGVzCiAvLyBleGNlcHRpb24g
aGFuZGxlcnMgaW4gdGhlIHVzZXMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0
eXBlbmFtZSBVc2VGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgotaW5saW5lIHZvaWQgQnl0
ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5
cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0
ZWNvZGVHcmFwaCYgZ3JhcGgsIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZz
ZXQsIGNvbnN0IFVzZUZ1bmN0b3ImIHVzZSwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQoraW5saW5l
IHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKENv
ZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0
aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwg
Y29uc3QgVXNlRnVuY3RvciYgdXNlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCiB7CiAgICAgLy8g
VGhpcyBhYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGluc3RydWN0aW9uIGluIHJldmVyc2UuIEluc3Ry
dWN0aW9ucyBsb2dpY2FsbHkgZmlyc3QgdXNlIG9wZXJhbmRzIGFuZAogICAgIC8vIHRoZW4gZGVm
aW5lIG9wZXJhbmRzLiBUaGlzIGxvZ2ljYWwgb3JkZXJpbmcgaXMgbmVjZXNzYXJ5IGZvciBvcGVy
YXRpb25zIHRoYXQgdXNlIGFuZCBkZWYgdGhlIHNhbWUKQEAgLTc4LDE3ICs3OCwxNyBAQCBpbmxp
bmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24o
Q29kZUJsb2NrVHlwZSogY29kZQogICAgIC8vIHVzZXMgYmVmb3JlIGRlZnMsIHRoZW4gdGhlIGFk
ZCBvcGVyYXRpb24gYWJvdmUgd291bGQgYXBwZWFyIHRvIG5vdCBoYXZlIGxvYzEgbGl2ZSwgc2lu
Y2Ugd2UnZAogICAgIC8vIGZpcnN0IGFkZCBpdCB0byB0aGUgb3V0IHNldCAodGhlIHVzZSksIGFu
ZCB0aGVuIHdlJ2QgcmVtb3ZlIGl0ICh0aGUgZGVmKS4KIAotICAgIGF1dG8qIGluc3RydWN0aW9u
ID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zmc2V0KS5wdHIoKTsKKyAgICBhdXRvKiBpbnN0
cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBPcGNv
ZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwogCi0gICAgY29tcHV0ZURl
ZnNGb3JCeXRlY29kZU9mZnNldCgKKyAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgoCiAg
ICAgICAgIGNvZGVCbG9jaywgb3Bjb2RlSUQsIGluc3RydWN0aW9uLAogICAgICAgICBbJl0gKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CiAgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVy
Rm9yTGl2ZW5lc3Mob3BlcmFuZCkpCiAgICAgICAgICAgICAgICAgZGVmKG9wZXJhbmQudG9Mb2Nh
bCgpKTsKICAgICAgICAgfSk7CiAKLSAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAor
ICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleCgKICAgICAgICAgY29kZUJsb2NrLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb24sCiAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
IHsKICAgICAgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhvcGVyYW5kKSkK
QEAgLTk3LDcgKzk3LDcgQEAgaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9u
OjpzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqIGNvZGUKIAogICAgIC8vIElmIHdl
IGhhdmUgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIHdlIHdhbnQgdGhlIGxpdmUtaW4gdmFyaWFibGVz
IG9mIHRoZSAKICAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9jayB0byBiZSBpbmNsdWRlZCBp
biB0aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgYnl0ZWNvZGUuCi0gICAgaWYgKGF1dG8q
IGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9m
ZnNldCkpIHsKKyAgICBpZiAoYXV0byogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkpIHsKICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2Nr
KiBoYW5kbGVyQmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoaGFu
ZGxlci0+dGFyZ2V0KTsKICAgICAgICAgQVNTRVJUKGhhbmRsZXJCbG9jayk7CiAgICAgICAgIGhh
bmRsZXJCbG9jay0+aW4oKS5mb3JFYWNoU2V0Qml0KHVzZSk7CkBAIC0xMDUsMTAgKzEwNSwxMCBA
QCBpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1
Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgotaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zl
ckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCkKK2lubGluZSB2
b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2Rl
QmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlv
bnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEZh
c3RCaXRWZWN0b3ImIG91dCkKIHsKICAgICBzdGVwT3Zlckluc3RydWN0aW9uKAotICAgICAgICBj
b2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICBj
b2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsCiAgICAgICAgIFsm
XSAodW5zaWduZWQgYml0SW5kZXgpIHsKICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHVzZSBm
dW5jdG9yLCBzbyB3ZSBzZXQgdGhlIGJpdC4KICAgICAgICAgICAgIG91dFtiaXRJbmRleF0gPSB0
cnVlOwpAQCAtMTIwLDcgKzEyMCw3IEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9w
YWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2RlCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KLWlu
bGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5l
c3NGb3JCeXRlY29kZU9mZnNldChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3Ry
dWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNp
Y0Jsb2NrKiBibG9jaywgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1
bHQpCitpbmxpbmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2Nh
bExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0
IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNv
ZGVCYXNpY0Jsb2NrKiBibG9jaywgQnl0ZWNvZGVJbmRleCB0YXJnZXRJbmRleCwgRmFzdEJpdFZl
Y3RvciYgcmVzdWx0KQogewogICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOwogICAg
IEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygpKTsKQEAgLTEyOSw5ICsxMjksOSBAQCBpbmxp
bmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9yQnl0ZWNvZGVPZmZzZXQoQwogCiAgICAgZm9yIChpbnQgaSA9IGJsb2NrLT5vZmZzZXRzKCku
c2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQgPSBibG9jay0+b2Zmc2V0cygpW2ldOwotICAgICAgICBpZiAodGFyZ2V0T2Zmc2V0ID4gYnl0
ZWNvZGVPZmZzZXQpCisgICAgICAgIGlmICh0YXJnZXRJbmRleC5vZmZzZXQoKSA+IGJ5dGVjb2Rl
T2Zmc2V0KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24o
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZU9mZnNldCwgb3V0KTsKKyAg
ICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgs
IEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBvdXQpOwogICAgIH0KIAogICAgIHJldHVy
biByZXN1bHQuc2V0QW5kQ2hlY2sob3V0KTsKQEAgLTE0MiwxOSArMTQyLDE5IEBAIGlubGluZSBi
b29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JC
bG9jayhDb2RlQmxvY2tUCiB7CiAgICAgaWYgKGJsb2NrLT5pc0V4aXRCbG9jaygpIHx8IGJsb2Nr
LT5pc0VudHJ5QmxvY2soKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb21w
dXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25z
LCBncmFwaCwgYmxvY2ssIGJsb2NrLT5sZWFkZXJPZmZzZXQoKSwgYmxvY2stPmluKCkpOworICAg
IHJldHVybiBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBp
bnN0cnVjdGlvbnMsIGdyYXBoLCBibG9jaywgQnl0ZWNvZGVJbmRleChibG9jay0+bGVhZGVyT2Zm
c2V0KCkpLCBibG9jay0+aW4oKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5
cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KLWlubGluZSBGYXN0Qml0VmVjdG9yIEJ5dGVjb2Rl
TGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2Rl
QmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBC
eXRlY29kZUdyYXBoJiBncmFwaCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCitpbmxpbmUgRmFz
dEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0
Qnl0ZWNvZGVJbmRleChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9u
cyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQogewotICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5k
QmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBCeXRlY29k
ZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNl
dChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKICAgICBBU1NFUlQoYmxvY2spOwogICAgIEFTU0VS
VCghYmxvY2stPmlzRW50cnlCbG9jaygpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9j
aygpKTsKICAgICBGYXN0Qml0VmVjdG9yIG91dDsKICAgICBvdXQucmVzaXplKGJsb2NrLT5vdXQo
KS5udW1CaXRzKCkpOwotICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQo
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBibG9jaywgYnl0ZWNvZGVPZmZzZXQsIG91
dCk7CisgICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb25zLCBncmFwaCwgYmxvY2ssIGJ5dGVjb2RlSW5kZXgsIG91dCk7CiAgICAgcmV0
dXJuIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlVXNlRGVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVVc2VEZWYuaAppbmRleCAwMjJmM2JmZWI4Njg0NDFjY2FkZGFmZDdmODM0ZmE4Zjk4ODczYmNl
Li5jYTMzNDc5NDI4NDhjMmYzMDhhNWM1YTVlYjk0NjJhNTFmNGVhOTM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaApAQCAtNDYsNyArNDYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICNkZWZpbmUgREVGUyBVU0VTX09SX0RFRlMKIAogdGVtcGxh
dGU8dHlwZW5hbWUgQmxvY2ssIHR5cGVuYW1lIEZ1bmN0b3I+Ci12b2lkIGNvbXB1dGVVc2VzRm9y
Qnl0ZWNvZGVPZmZzZXQoQmxvY2sqIGNvZGVCbG9jaywgT3Bjb2RlSUQgb3Bjb2RlSUQsIGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3ZvaWQg
Y29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4KEJsb2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9w
Y29kZUlELCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCiB7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2VudGVyICYmIChjb2RlQmxvY2stPndh
c0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkp
ICYmIGNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLmlzVmFsaWQoKSkKICAgICAgICAgZnVuY3Rv
cihjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSk7CkBAIC0yOTcsNyArMjk3LDcgQEAgdm9pZCBj
b21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KEJsb2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9w
Y29kZUlELCBjb25zdCBJbnMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQmxvY2ssIHR5cGVuYW1l
IEZ1bmN0b3I+Ci12b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQmxvY2sqIGNvZGVC
bG9jaywgT3Bjb2RlSUQgb3Bjb2RlSUQsIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3ZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4
KEJsb2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9wY29kZUlELCBjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgc3dpdGNoIChvcGNv
ZGVJRCkgewogICAgIGNhc2Ugb3Bfd2lkZTE2OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKaW5kZXggOWEwMDBmYzViNDJhZTZlMzgyNjlk
ODM3YTc5MGEzOTYwYjVjYmRhMy4uZjEzZDE3MzRhMDJjNThhMzIxNzU5MjVkMjg4NTVhMmEyNjAw
MTgxOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
U3RhdHVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuY3BwCkBAIC01NSw3ICs1NSw3IEBAIENhbGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0YXR1
cyhKU1ZhbHVlIHZhbHVlKQogICAgIG1fdmFyaWFudHMuYXBwZW5kKENhbGxWYXJpYW50KHZhbHVl
LmFzQ2VsbCgpKSk7CiB9CiAKLUNhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
RnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK0NhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3Rh
dHVzOjpjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIFVO
VVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRl
eCk7CkBAIC02Nyw3ICs2Nyw3IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21w
dXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCCiAgICAgfQogI2Vu
ZGlmCiAKLSAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnl0ZWNvZGVJbmRleCk7CisgICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxv
Y2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogICAgIE9wY29k
ZUlEIG9wID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CiAKICAgICBMTEludENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvOwpAQCAtOTAsNyArOTAsNyBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlu
a1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2Rl
QgogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICBD
b2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIGNvbnN0IElD
U3RhdHVzTWFwJiBtYXAsCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgsIGNvbnN0IElDU3RhdHVzTWFwJiBtYXAsCiAgICAgRXhpdFNpdGVE
YXRhIGV4aXRTaXRlRGF0YSkKIHsKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2Zp
bGVkQmxvY2stPm1fbG9jayk7CkBAIC0xMTQsMTIgKzExNCwxMiBAQCBDYWxsTGlua1N0YXR1cyBD
YWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKIH0KIAogQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBjb25zdCBJQ1N0YXR1c01hcCYgbWFwKQorICAgIENvZGVCbG9jayog
cHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBjb25zdCBJQ1N0YXR1
c01hcCYgbWFwKQogewogICAgIHJldHVybiBjb21wdXRlRm9yKHByb2ZpbGVkQmxvY2ssIGJ5dGVj
b2RlSW5kZXgsIG1hcCwgY29tcHV0ZUV4aXRTaXRlRGF0YShwcm9maWxlZEJsb2NrLCBieXRlY29k
ZUluZGV4KSk7CiB9CiAKLUNhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4KQorQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBDYWxsTGlua1N0
YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBFeGl0U2l0ZURhdGEgZXhpdFNpdGVEYXRh
OwogI2lmIEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtTdGF0dXMuaAppbmRleCAwYTEwMWNhMDJlNjg5MTBkMmZjMzQyMDc5Yjk5MGZh
NTIyYTczODlkLi40NjhhM2RiNTdiZDIyYzg5YzExZGQ3Y2QyMTc5NjE1MGUzMzdmY2Q0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaApAQCAt
NjYsMTAgKzY2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgRXhpdEZsYWcgdGFrZXNTbG93UGF0aDsK
ICAgICAgICAgRXhpdEZsYWcgYmFkRnVuY3Rpb247CiAgICAgfTsKLSAgICBzdGF0aWMgRXhpdFNp
dGVEYXRhIGNvbXB1dGVFeGl0U2l0ZURhdGEoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCk7CisgICAgc3RhdGljIEV4aXRTaXRlRGF0YSBjb21wdXRlRXhpdFNpdGVEYXRhKENvZGVC
bG9jayosIEJ5dGVjb2RlSW5kZXgpOwogICAgIAotICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBj
b21wdXRlRm9yKENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIGNvbnN0IElDU3Rh
dHVzTWFwJiwgRXhpdFNpdGVEYXRhKTsKLSAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0
ZUZvcihDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBJQ1N0YXR1c01h
cCYpOworICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIEJ5
dGVjb2RlSW5kZXgsIGNvbnN0IElDU3RhdHVzTWFwJiwgRXhpdFNpdGVEYXRhKTsKKyAgICBzdGF0
aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBj
b25zdCBJQ1N0YXR1c01hcCYpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICAvLyBDb21wdXRlcyB0
aGUgc3RhdHVzIGFzc3VtaW5nIHRoYXQgd2UgbmV2ZXIgdG9vayBzbG93IHBhdGggYW5kIG5ldmVy
IHByZXZpb3VzbHkKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZv
aWQgbWFrZUNsb3N1cmVDYWxsKCk7CiAgICAgCi0gICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNv
bXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVG
cm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgQnl0ZWNvZGVJ
bmRleCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0
ZUZyb21DYWxsTGlua0luZm8oCiAgICAgICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENh
bGxMaW5rSW5mbyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAppbmRleCAwOWY1MDczOGRlNWQ1ZWZiZjNmZDE0MTU3YjI3NWYyYmM0MmFkZTNhLi42MDY1
NDA2ZDhhOGY4MjM2YTc2YTIwM2EyMTE3OWVhY2FkMjA2M2UxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMTUyNiw3ICsxNTI2LDcgQEAgQ2Fs
bExpbmtJbmZvKiBDb2RlQmxvY2s6OmFkZENhbGxMaW5rSW5mbygpCiAgICAgcmV0dXJuIGVuc3Vy
ZUpJVERhdGEobG9ja2VyKS5tX2NhbGxMaW5rSW5mb3MuYWRkKCk7CiB9CiAKLUNhbGxMaW5rSW5m
byogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGlu
ZGV4KQorQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2Rl
SW5kZXgoQnl0ZWNvZGVJbmRleCBpbmRleCkKIHsKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CiAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsK
QEAgLTE1MzgsMjcgKzE1MzgsMjcgQEAgQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmdldENhbGxM
aW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgaW5kZXgpCiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLVJhcmVDYXNlUHJvZmlsZSogQ29kZUJsb2NrOjphZGRSYXJlQ2FzZVByb2ZpbGUo
aW50IGJ5dGVjb2RlT2Zmc2V0KQorUmFyZUNhc2VQcm9maWxlKiBDb2RlQmxvY2s6OmFkZFJhcmVD
YXNlUHJvZmlsZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVRE
YXRhKGxvY2tlcik7Ci0gICAgaml0RGF0YS5tX3JhcmVDYXNlUHJvZmlsZXMuYXBwZW5kKFJhcmVD
YXNlUHJvZmlsZShieXRlY29kZU9mZnNldCkpOworICAgIGppdERhdGEubV9yYXJlQ2FzZVByb2Zp
bGVzLmFwcGVuZChSYXJlQ2FzZVByb2ZpbGUoYnl0ZWNvZGVJbmRleCkpOwogICAgIHJldHVybiAm
aml0RGF0YS5tX3JhcmVDYXNlUHJvZmlsZXMubGFzdCgpOwogfQogCi1SYXJlQ2FzZVByb2ZpbGUq
IENvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgaW50IGJ5dGVjb2RlT2Zmc2V0KQorUmFyZUNhc2VQcm9maWxlKiBDb2Rl
QmxvY2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIGlmIChhdXRvKiBq
aXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFy
Y2g8UmFyZUNhc2VQcm9maWxlLCBpbnQ+KAotICAgICAgICAgICAgaml0RGF0YS0+bV9yYXJlQ2Fz
ZVByb2ZpbGVzLCBqaXREYXRhLT5tX3JhcmVDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9m
ZnNldCwKLSAgICAgICAgICAgIGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0KTsKKyAg
ICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxSYXJlQ2FzZVByb2ZpbGUsIEJ5dGVjb2RlSW5k
ZXg+KAorICAgICAgICAgICAgaml0RGF0YS0+bV9yYXJlQ2FzZVByb2ZpbGVzLCBqaXREYXRhLT5t
X3JhcmVDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZUluZGV4LAorICAgICAgICAgICAgZ2V0
UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVJbmRleCk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRy
OwogfQogCi11bnNpZ25lZCBDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNv
ZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIGludCBieXRlY29kZU9m
ZnNldCkKK3Vuc2lnbmVkIENvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29k
ZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgpCiB7Ci0gICAgUmFyZUNhc2VQcm9maWxlKiBwcm9maWxlID0gcmFyZUNhc2VQ
cm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobG9ja2VyLCBieXRlY29kZU9mZnNldCk7CisgICAgUmFy
ZUNhc2VQcm9maWxlKiBwcm9maWxlID0gcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChs
b2NrZXIsIGJ5dGVjb2RlSW5kZXgpOwogICAgIGlmIChwcm9maWxlKQogICAgICAgICByZXR1cm4g
cHJvZmlsZS0+bV9jb3VudGVyOwogICAgIHJldHVybiAwOwpAQCAtMTczMCwxMCArMTczMCwxMCBA
QCBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogfQogI2VuZGlmCiAK
LUhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikKK0hhbmRs
ZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikKIHsKLSAgICBS
RUxFQVNFX0FTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0g
ICAgcmV0dXJuIGhhbmRsZXJGb3JJbmRleChieXRlY29kZU9mZnNldCwgcmVxdWlyZWRIYW5kbGVy
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKTsKKyAgICByZXR1cm4gaGFuZGxlckZvckluZGV4KGJ5dGVjb2RlSW5kZXgu
b2Zmc2V0KCksIHJlcXVpcmVkSGFuZGxlcik7CiB9CiAKIEhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6
OmhhbmRsZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVk
SGFuZGxlcikKQEAgLTE3NjIsOSArMTc2Miw5IEBAIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENv
ZGVCbG9jazo6bmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kCiAK
IAogCi12b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRl
Y29kZU9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KQordm9p
ZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRl
eChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgYXV0byYgaW5zdHJ1Y3Rpb24g
PSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9mZnNldCk7CisgICAgYXV0byYgaW5zdHJ1Y3Rp
b24gPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKICAgICBPcENhdGNoIG9wID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBvcC5tZXRh
ZGF0YSh0aGlzKTsKICAgICBpZiAoISFtZXRhZGF0YS5tX2J1ZmZlcikgewpAQCAtMTc4NCwxMCAr
MTc4NCwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRG
b3JCeXRlY29kZU9mZnNldChJbnN0cnVjdGlvblN0cmVhbQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZU9mZnNldFNs
b3cob3AsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBlbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRl
ZEZvckJ5dGVjb2RlSW5kZXhTbG93KG9wLCBieXRlY29kZUluZGV4KTsKIH0KIAotdm9pZCBDb2Rl
QmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXRTbG93
KGNvbnN0IE9wQ2F0Y2gmIG9wLCBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zm
c2V0KQordm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0
ZWNvZGVJbmRleFNsb3coY29uc3QgT3BDYXRjaCYgb3AsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCkKIHsKICAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMmIGJ5dGVjb2RlTGl2ZW5lc3Mg
PSBsaXZlbmVzc0FuYWx5c2lzKCk7CiAKQEAgLTE3OTYsOCArMTc5Niw4IEBAIHZvaWQgQ29kZUJs
b2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlT2Zmc2V0U2xvdyhj
b25zdCBPcENhdGNoCiAgICAgLy8gd2UgY2FuIGF2b2lkIHByb2ZpbGluZyB0aGVtIGFuZCBleHRy
YWN0aW5nIHRoZW0gd2hlbiBkb2luZyBPU1IgZW50cnkKICAgICAvLyBpbnRvIHRoZSBERkcuCiAK
LSAgICBhdXRvIG5leHRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9mZnNldCku
bmV4dCgpLm9mZnNldCgpOwotICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUxvY2FscyA9IGJ5dGVjb2Rl
TGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh0aGlzLCBuZXh0T2Zmc2V0
KTsKKyAgICBhdXRvIG5leHRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4
KS5uZXh0KCkub2Zmc2V0KCk7CisgICAgRmFzdEJpdFZlY3RvciBsaXZlTG9jYWxzID0gYnl0ZWNv
ZGVMaXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgodGhpcywgQnl0ZWNvZGVJ
bmRleChuZXh0T2Zmc2V0KSk7CiAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gbGl2ZU9wZXJh
bmRzOwogICAgIGxpdmVPcGVyYW5kcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxpdmVMb2NhbHMu
Yml0Q291bnQoKSk7CiAgICAgbGl2ZUxvY2Fscy5mb3JFYWNoU2V0Qml0KFsmXSAodW5zaWduZWQg
bGl2ZUxvY2FsKSB7CkBAIC0xODQyLDI2ICsxODQyLDI2IEBAIHZvaWQgQ29kZUJsb2NrOjpyZW1v
dmVFeGNlcHRpb25IYW5kbGVyRm9yQ2FsbFNpdGUoRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggY2Fs
bFNpCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdW5zaWduZWQgQ29k
ZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpCit1bnNpZ25lZCBDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZU9m
ZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgcmV0dXJuIG93bmVyRXhlY3V0YWJs
ZSgpLT5maXJzdExpbmUoKSArIG1fdW5saW5rZWRDb2RlLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgIHJldHVybiBvd25lckV4ZWN1
dGFibGUoKS0+Zmlyc3RMaW5lKCkgKyBtX3VubGlua2VkQ29kZS0+bGluZU51bWJlckZvckJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiB9CiAKLXVuc2lnbmVkIENvZGVCbG9jazo6Y29sdW1u
TnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit1bnNpZ25l
ZCBDb2RlQmxvY2s6OmNvbHVtbk51bWJlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQogewogICAgIGludCBkaXZvdDsKICAgICBpbnQgc3RhcnRPZmZzZXQ7CiAg
ICAgaW50IGVuZE9mZnNldDsKICAgICB1bnNpZ25lZCBsaW5lOwogICAgIHVuc2lnbmVkIGNvbHVt
bjsKLSAgICBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwg
ZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CisgICAgZXhwcmVz
c2lvblJhbmdlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4LCBkaXZvdCwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKICAgICByZXR1cm4gY29sdW1uOwogfQogCi12
b2lkIENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zm
c2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3QKK3ZvaWQgQ29kZUJs
b2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCwgaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVu
c2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdAogewotICAgIG1fdW5saW5rZWRD
b2RlLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2
b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CisgICAgbV91bmxpbmtl
ZENvZGUtPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCwgZGl2
b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CiAgICAgZGl2b3QgKz0g
c291cmNlT2Zmc2V0KCk7CiAgICAgY29sdW1uICs9IGxpbmUgPyAxIDogZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KCk7CiAgICAgbGluZSArPSBvd25lckV4ZWN1dGFibGUoKS0+Zmlyc3RMaW5lKCk7CkBA
IC0xODc1LDcgKzE4NzUsNyBAQCBib29sIENvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRD
b2x1bW4odW5zaWduZWQgbGluZSwgT3B0aW9uYWw8dW5zaWduZWQ+IGNvbAogICAgICAgICAgICAg
aW50IHVudXNlZDsKICAgICAgICAgICAgIHVuc2lnbmVkIG9wRGVidWdMaW5lOwogICAgICAgICAg
ICAgdW5zaWduZWQgb3BEZWJ1Z0NvbHVtbjsKLSAgICAgICAgICAgIGV4cHJlc3Npb25SYW5nZUZv
ckJ5dGVjb2RlT2Zmc2V0KGl0Lm9mZnNldCgpLCB1bnVzZWQsIHVudXNlZCwgdW51c2VkLCBvcERl
YnVnTGluZSwgb3BEZWJ1Z0NvbHVtbik7CisgICAgICAgICAgICBleHByZXNzaW9uUmFuZ2VGb3JC
eXRlY29kZUluZGV4KGl0LmluZGV4KCksIHVudXNlZCwgdW51c2VkLCB1bnVzZWQsIG9wRGVidWdM
aW5lLCBvcERlYnVnQ29sdW1uKTsKICAgICAgICAgICAgIGlmIChsaW5lID09IG9wRGVidWdMaW5l
ICYmICghY29sdW1uIHx8IGNvbHVtbiA9PSBvcERlYnVnQ29sdW1uKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjYyMyw5ICsyNjIzLDkgQEAgYm9vbCBDb2Rl
QmxvY2s6OnNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpCiB9CiAjZW5kaWYKIAotQXJyYXlQ
cm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0FycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpn
ZXRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQogewotICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5h
dChieXRlY29kZU9mZnNldCk7CisgICAgYXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygp
LmF0KGJ5dGVjb2RlSW5kZXgpOwogICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkp
IHsKICNkZWZpbmUgQ0FTRTEoT3ApIFwKICAgICBjYXNlIE9wOjpvcGNvZGVJRDogXApAQCAtMjY1
NSwxMCArMjY1NSwxMCBAQCBBcnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxl
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIHVuc2lnbmVkIGJ5dAogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1BcnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0KQorQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJv
ZmlsZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBnZXRBcnJheVByb2ZpbGUobG9ja2VyLCBi
eXRlY29kZU9mZnNldCk7CisgICAgcmV0dXJuIGdldEFycmF5UHJvZmlsZShsb2NrZXIsIGJ5dGVj
b2RlSW5kZXgpOwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0yOTY2LDkgKzI5NjYsOSBA
QCBTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlcikKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotVmFsdWVQcm9maWxl
KiBDb2RlQmxvY2s6OnRyeUdldFZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRl
Y29kZU9mZnNldCkKK1ZhbHVlUHJvZmlsZSogQ29kZUJsb2NrOjp0cnlHZXRWYWx1ZVByb2ZpbGVG
b3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBhdXRv
IGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIGF1
dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKICAgICBz
d2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CiAKICNkZWZpbmUgQ0FTRShPcCkgXApA
QCAtMjk4NSwyMyArMjk4NSwyMyBAQCBWYWx1ZVByb2ZpbGUqIENvZGVCbG9jazo6dHJ5R2V0VmFs
dWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQogICAgIH0KIH0K
IAotU3BlY3VsYXRlZFR5cGUgQ29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0
ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIGludCBieXRlY29k
ZU9mZnNldCkKK1NwZWN1bGF0ZWRUeXBlIENvZGVCbG9jazo6dmFsdWVQcm9maWxlUHJlZGljdGlv
bkZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBpZiAoVmFsdWVQcm9maWxlKiB2YWx1ZVBy
b2ZpbGUgPSB0cnlHZXRWYWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNl
dCkpCisgICAgaWYgKFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlID0gdHJ5R2V0VmFsdWVQcm9m
aWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KSkKICAgICAgICAgcmV0dXJuIHZhbHVl
UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgcmV0dXJuIFNw
ZWNOb25lOwogfQogCi1WYWx1ZVByb2ZpbGUmIENvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQorVmFsdWVQcm9maWxlJiBDb2RlQmxvY2s6
OnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQogewotICAgIHJldHVybiAqdHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpOworICAgIHJldHVybiAqdHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJ
bmRleChieXRlY29kZUluZGV4KTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnZhbGlkYXRlKCkKIHsK
ICAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgbGl2ZW5lc3ModGhpcyk7IC8vIENvbXB1dGUg
ZGlyZWN0bHkgZnJvbSBzY3JhdGNoIHNvIGl0IGRvZXNuJ3QgZWZmZWN0IENvZGVCbG9jayBmb290
cHJpbnQuCiAgICAgCi0gICAgRmFzdEJpdFZlY3RvciBsaXZlQXRIZWFkID0gbGl2ZW5lc3MuZ2V0
TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh0aGlzLCAwKTsKKyAgICBGYXN0Qml0VmVjdG9y
IGxpdmVBdEhlYWQgPSBsaXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgodGhp
cywgQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgCiAgICAgaWYgKGxpdmVBdEhlYWQubnVtQml0cygp
ICE9IHN0YXRpY19jYXN0PHNpemVfdD4obV9udW1DYWxsZWVMb2NhbHMpKSB7CiAgICAgICAgIGJl
Z2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKQEAgLTMwMjUsNyArMzAyNSw3IEBAIHZvaWQgQ29kZUJs
b2NrOjp2YWxpZGF0ZSgpCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9u
U3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0cnVjdGlv
biA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZSA9IGluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpOwotICAgICAgICBpZiAoISFiYXNlbGluZUFsdGVybmF0aXZlKCkt
PmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSkpIHsKKyAgICAg
ICAgaWYgKCEhYmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChC
eXRlY29kZUluZGV4KGluc3RydWN0aW9uLm9mZnNldCgpKSkpIHsKICAgICAgICAgICAgIGlmIChv
cGNvZGUgPT0gb3BfY2F0Y2ggfHwgb3Bjb2RlID09IG9wX2VudGVyKSB7CiAgICAgICAgICAgICAg
ICAgLy8gb3BfY2F0Y2gvb3BfZW50ZXIgbG9naWNhbGx5IHJlcHJlc2VudCBhbiBlbnRyeXBvaW50
LiBFbnRyeXBvaW50cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUKICAgICAgICAgICAgICAgICAvLyBp
bnNpZGUgb2YgYSB0cnkgYmxvY2sgYmVjYXVzZSB0aGV5IGFyZSByZXNwb25zaWJsZSBmb3IgYm9v
dHN0cmFwcGluZyBzdGF0ZS4gQW5kIHRoZXkKQEAgLTMwODMsOSArMzA4Myw5IEBAIGNvbnN0IElu
c3RydWN0aW9uKiBDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rp
b24qIHBjKQogICAgIHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChvZmZzZXQgKyB0YXJnZXQpLnB0
cigpOwogfQogCi1Bcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yQnl0ZWNv
ZGVPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBieXRlY29kZU9mZnNldCkKK0FyaXRo
UHJvZmlsZSogQ29kZUJsb2NrOjphcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICByZXR1cm4gYXJpdGhQcm9maWxlRm9yUEMoaW5z
dHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVPZmZzZXQpLnB0cigpKTsKKyAgICByZXR1cm4gYXJpdGhQ
cm9maWxlRm9yUEMoaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkucHRy
KCkpOwogfQogCiBBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yUEMoY29u
c3QgSW5zdHJ1Y3Rpb24qIHBjKQpAQCAtMzEwOCwxMSArMzEwOCwxMSBAQCBBcml0aFByb2ZpbGUq
IENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yUEMoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1ib29sIENvZGVCbG9jazo6Y291bGRUYWtlU3BlY2lhbEZh
c3RDYXNlKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQpCitib29sIENv
ZGVCbG9jazo6Y291bGRUYWtlU3BlY2lhbEFyaXRoRmFzdENhc2UoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQogewogICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIEFyaXRoUHJvZmlsZSogcHJvZmlsZSA9IGFyaXRoUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBBcml0aFByb2ZpbGUqIHBy
b2ZpbGUgPSBhcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAg
IGlmICghcHJvZmlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBwcm9maWxl
LT50b29rU3BlY2lhbEZhc3RQYXRoKCk7CkBAIC0zMjMxLDI4ICszMjMxLDI4IEBAIE9wdGlvbmFs
PENvZGVPcmlnaW4+IENvZGVCbG9jazo6ZmluZFBDKHZvaWQqIHBjKQogfQogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCiAKLU9wdGlvbmFsPHVuc2lnbmVkPiBDb2RlQmxvY2s6OmJ5dGVjb2RlT2Zmc2V0
RnJvbUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQorT3B0aW9uYWw8
Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjpieXRlY29kZUluZGV4RnJvbUNhbGxTaXRlSW5kZXgo
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQogewotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBi
eXRlY29kZU9mZnNldDsKKyAgICBPcHRpb25hbDxCeXRlY29kZUluZGV4PiBieXRlY29kZUluZGV4
OwogICAgIEpJVFR5cGUgaml0VHlwZSA9IHRoaXMtPmppdFR5cGUoKTsKICAgICBpZiAoaml0VHlw
ZSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBieXRlY29kZU9mZnNldCA9
IGNhbGxTaXRlSW5kZXguYml0cygpOworICAgICAgICBieXRlY29kZUluZGV4ID0gY2FsbFNpdGVJ
bmRleC5ieXRlY29kZUluZGV4KCk7CiAjZWxzZQogICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24gPSBiaXR3aXNlX2Nhc3Q8SW5zdHJ1Y3Rpb24qPihjYWxsU2l0ZUluZGV4LmJpdHMoKSk7
Ci0gICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQoaW5zdHJ1Y3Rp
b24pOworICAgICAgICBieXRlY29kZUluZGV4ID0gdGhpcy0+Ynl0ZWNvZGVJbmRleChpbnN0cnVj
dGlvbik7CiAjZW5kaWYKICAgICB9IGVsc2UgaWYgKGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklU
IHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklUKSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpOwog
ICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IGNvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCk7Ci0g
ICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gb3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAg
Ynl0ZWNvZGVJbmRleCA9IG9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAjZWxzZQogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCiAgICAgfQogCi0gICAgcmV0dXJu
IGJ5dGVjb2RlT2Zmc2V0OworICAgIHJldHVybiBieXRlY29kZUluZGV4OwogfQogCiBpbnQzMl90
IENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IGQyMDBmZDU5ZjQyOWEzODNk
YTlhZDdjN2ZmYWMwOWNiMjYyYmNmMzYuLjBlYzMwNDkxMWE2OWYwMjM3NGM0YjBlYjc4YTllYTQz
YjhiOTcxNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
QEAgLTIzOSwxNSArMjM5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGluZGV4ID49IG1f
bnVtVmFyczsKICAgICB9CiAKLSAgICBIYW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlT2Zm
c2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhh
bmRsZXI6OkFueUhhbmRsZXIpOworICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVJ
bmRleChCeXRlY29kZUluZGV4LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFu
eUhhbmRsZXIpOwogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQsIFJl
cXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CiAgICAgdm9pZCBy
ZW1vdmVFeGNlcHRpb25IYW5kbGVyRm9yQ2FsbFNpdGUoRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgp
OwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCk7Ci0gICAgdW5zaWduZWQgY29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0
ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsCisgICAgdW5z
aWduZWQgbGluZU51bWJlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CisgICAgdW5z
aWduZWQgY29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKKyAgICB2
b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCwgaW50JiBk
aXZvdCwKICAgICAgICAgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVk
JiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPHVuc2lnbmVk
PiBieXRlY29kZU9mZnNldEZyb21DYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXgpOworICAgIE9w
dGlvbmFsPEJ5dGVjb2RlSW5kZXg+IGJ5dGVjb2RlSW5kZXhGcm9tQ2FsbFNpdGVJbmRleChDYWxs
U2l0ZUluZGV4KTsKIAogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgSUNTdGF0dXNNYXAmIHJlc3VsdCk7CiAgICAgdm9pZCBnZXRJQ1N0YXR1c01hcChJ
Q1N0YXR1c01hcCYgcmVzdWx0KTsKQEAgLTMwOSw3ICszMDksNyBAQCBwdWJsaWM6CiAgICAgLy8g
VGhpcyBpcyBhIHNsb3cgZnVuY3Rpb24gY2FsbCB1c2VkIHByaW1hcmlseSBmb3IgY29tcGlsaW5n
IE9TUiBleGl0cyBpbiB0aGUgY2FzZQogICAgIC8vIHRoYXQgdGhlcmUgaGFkIGJlZW4gaW5saW5p
bmcuIENoYW5jZXMgYXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzLCB5b3UncmUgcmVhbGx5CiAg
ICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qg
b2YgY2FsbGluZyB0aGlzLgotICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0
ZWNvZGVJbmRleCh1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICBDYWxsTGlua0luZm8qIGdl
dENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAg
dm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQogICAgIHsKQEAgLTMy
OCwyNSArMzI4LDI1IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMo
UmVnaXN0ZXJTZXQpOwogICAgIHZvaWQgc2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhzdGQ6OnVuaXF1
ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+KTsKIAotICAgIFJhcmVDYXNlUHJvZmlsZSogYWRk
UmFyZUNhc2VQcm9maWxlKGludCBieXRlY29kZU9mZnNldCk7Ci0gICAgUmFyZUNhc2VQcm9maWxl
KiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIHVuc2lnbmVkIHJhcmVDYXNlUHJvZmlsZUNv
dW50Rm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgaW50IGJ5dGVj
b2RlT2Zmc2V0KTsKKyAgICBSYXJlQ2FzZVByb2ZpbGUqIGFkZFJhcmVDYXNlUHJvZmlsZShCeXRl
Y29kZUluZGV4KTsKKyAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVj
b2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CisgICAg
dW5zaWduZWQgcmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogCi0gICAgYm9vbCBsaWtlbHlUb1Rha2VT
bG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCisgICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2Fz
ZShCeXRlY29kZUluZGV4KQogICAgIHsKICAgICAgICAgaWYgKCFoYXNCYXNlbGluZUpJVFByb2Zp
bGluZygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQ
cm9maWxlQ291bnRGb3JCeXRlY29kZU9mZnNldChsb2NrZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAg
ICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlSW5k
ZXgobG9ja2VyLCBieXRlY29kZUluZGV4KTsKICAgICAgICAgcmV0dXJuIHZhbHVlID49IE9wdGlv
bnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50KCk7CiAgICAgfQogCi0gICAgYm9v
bCBjb3VsZFRha2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCisgICAgYm9vbCBjb3VsZFRh
a2VTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAgICBp
ZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgdW5z
aWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zmc2V0KGxvY2tl
ciwgYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJv
ZmlsZUNvdW50Rm9yQnl0ZWNvZGVJbmRleChsb2NrZXIsIGJ5dGVjb2RlSW5kZXgpOwogICAgICAg
ICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQo
KTsKICAgICB9CiAKQEAgLTM4Miw2ICszODIsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
cmV0dXJuQWRkcmVzcyAtIGluc3RydWN0aW9uc0JlZ2luOwogICAgIH0KIAorICAgIGlubGluZSBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoY29uc3QgSW5zdHJ1Y3Rpb24qIHJldHVybkFkZHJl
c3MpCisgICAgeworICAgICAgICByZXR1cm4gQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldChy
ZXR1cm5BZGRyZXNzKSk7CisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGlu
c3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5pbnN0cnVjdGlvbnMo
KTsgfQogCiAgICAgc2l6ZV90IHByZWRpY3RlZE1hY2hpbmVDb2RlU2l6ZSgpOwpAQCAtNDgzLDgg
KzQ4OCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBW
YWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9m
ZnNldCk7Ci0gICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVj
b2RlT2Zmc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGludCBieXRlY29kZU9mZnNldCk7
CisgICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2Rl
SW5kZXgpOworICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRl
Y29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoVmFsdWVQcm9maWxlKGNv
bnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVh
Y2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwpAQCAtNDkyLDEzICs0OTcsMTMgQEAgcHVi
bGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiB2b2lkIGZvckVhY2hMTEludENhbGxMaW5rSW5mbyhjb25zdCBGdW5jdG9yJik7CiAK
LSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0
aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICBBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZUZvclBDKGNvbnN0IEluc3RydWN0aW9uKik7CiAKLSAgICBib29sIGNv
dWxkVGFrZVNwZWNpYWxGYXN0Q2FzZShJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICBib29sIGNvdWxkVGFrZVNwZWNpYWxBcml0aEZhc3RDYXNlKEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVPZmZzZXQpOwogCi0gICAgQXJyYXlQcm9maWxlKiBnZXRBcnJheVByb2Zp
bGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwot
ICAgIEFycmF5UHJvZmlsZSogZ2V0QXJyYXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
KTsKKyAgICBBcnJheVByb2ZpbGUqIGdldEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBCeXRlY29kZUluZGV4KTsKKyAgICBBcnJheVByb2ZpbGUqIGdldEFycmF5UHJvZmls
ZShCeXRlY29kZUluZGV4KTsKIAogICAgIC8vIEV4Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0CiAK
QEAgLTg3Niw3ICs4ODEsNyBAQCBwdWJsaWM6CiAKICAgICBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRl
eCBuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5h
bENhbGxTaXRlKTsKIAotICAgIHZvaWQgZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JC
eXRlY29kZU9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KTsK
KyAgICB2b2lkIGVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleChC
eXRlY29kZUluZGV4KTsKIAogICAgIGJvb2wgaGFzVGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4g
bV91bmxpbmtlZENvZGUtPmhhc1RhaWxDYWxscygpOyB9CiAKQEAgLTk0Myw3ICs5NDgsNyBAQCBw
cml2YXRlOgogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMo
KSB7IHJldHVybiBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5z
aWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBudW1iZXJPZkFyZ3Vt
ZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKTsg
fQotICAgIFZhbHVlUHJvZmlsZSogdHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
aW50IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBWYWx1ZVByb2ZpbGUqIHRyeUdldFZhbHVlUHJvZmls
ZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAKICAgICBTZWNvbmRzIHRpbWVTaW5j
ZUNyZWF0aW9uKCkKICAgICB7CkBAIC05NjAsNyArOTY1LDcgQEAgcHJpdmF0ZToKICAgICB9CiAK
ICAgICB2b2lkIGluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxl
cigpOwotICAgIHZvaWQgZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZU9m
ZnNldFNsb3coY29uc3QgT3BDYXRjaCYsIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQpOworICAg
IHZvaWQgZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyhj
b25zdCBPcENhdGNoJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICBpbnQgbV9udW1DYWxsZWVMb2Nh
bHM7CiAgICAgaW50IG1fbnVtVmFyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlT3JpZ2luLmNwcAppbmRleCAyZGU4MDQ4MjFjNzgxYmZmODEwM2Q0NWQwN2JkZmE2Yzdl
ZWUwM2NiLi44M2ZiYjkwZjQwMjEzZmVlMDRjYmYxMWIwOTFiNDMyMzc4YmE0Mzg2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCkBAIC05MSw3ICs5
MSw3IEBAIHVuc2lnbmVkIENvZGVPcmlnaW46OmFwcHJveGltYXRlSGFzaChJbmxpbmVDYWxsRnJh
bWUqIHRlcm1pbmFsKSBjb25zdAogICAgIHVuc2lnbmVkIHJlc3VsdCA9IDI7CiAgICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luID0gKnRoaXM7CiAgICAgZm9yICg7OykgewotICAgICAgICByZXN1bHQg
Kz0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIHJlc3VsdCArPSBjb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKS5hc0JpdHMoKTsKIAogICAgICAgICBhdXRvKiBpbmxpbmVDYWxs
RnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwogCkBAIC0xNTIsNyArMTUyLDcg
QEAgdm9pZCBDb2RlT3JpZ2luOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAg
ICAgICAgICAgb3V0LnByaW50KCIoY2xvc3VyZSkgIik7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIG91dC5wcmludCgiYmMjIiwgc3RhY2tbaV0uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAg
ICAgb3V0LnByaW50KHN0YWNrW2ldLmJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAppbmRleCBkNWYzMGMyYzkw
MzY3MTY5ZGM1ODc1NzJjYzJlOWIzMjAyOWU5NDA2Li4zNDE0ZDRmMDFkZjRkNzhiNzRjNGMwY2M1
Yjg5Yzg1Y2VhYjgwYTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZU9yaWdpbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
T3JpZ2luLmgKQEAgLTI1LDYgKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJC
eXRlY29kZUluZGV4LmgiCisKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtNDEsMjUgKzQzLDIzIEBA
IGNsYXNzIENvZGVPcmlnaW4gewogcHVibGljOgogICAgIENvZGVPcmlnaW4oKQogI2lmIENQVShB
RERSRVNTNjQpCi0gICAgICAgIDogbV9jb21wb3NpdGVWYWx1ZShidWlsZENvbXBvc2l0ZVZhbHVl
KG51bGxwdHIsIHNfaW52YWxpZEJ5dGVjb2RlSW5kZXgpKQorICAgICAgICA6IG1fY29tcG9zaXRl
VmFsdWUoYnVpbGRDb21wb3NpdGVWYWx1ZShudWxscHRyLCBCeXRlY29kZUluZGV4KCkpKQogI2Vs
c2UKLSAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoc19pbnZhbGlkQnl0ZWNvZGVJbmRleCkKLSAg
ICAgICAgLCBtX2lubGluZUNhbGxGcmFtZShudWxscHRyKQorICAgICAgICA6IG1faW5saW5lQ2Fs
bEZyYW1lKG51bGxwdHIpCiAjZW5kaWYKICAgICB7CiAgICAgfQotICAgIAorCiAgICAgQ29kZU9y
aWdpbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCiAjaWYgQ1BVKEFERFJFU1M2NCkK
LSAgICAgICAgOiBtX2NvbXBvc2l0ZVZhbHVlKGJ1aWxkQ29tcG9zaXRlVmFsdWUoZGVsZXRlZE1h
cmtlcigpLCBzX2ludmFsaWRCeXRlY29kZUluZGV4KSkKKyAgICAgICAgOiBtX2NvbXBvc2l0ZVZh
bHVlKGJ1aWxkQ29tcG9zaXRlVmFsdWUoZGVsZXRlZE1hcmtlcigpLCBCeXRlY29kZUluZGV4KCkp
KQogI2Vsc2UKLSAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoc19pbnZhbGlkQnl0ZWNvZGVJbmRl
eCkKLSAgICAgICAgLCBtX2lubGluZUNhbGxGcmFtZShkZWxldGVkTWFya2VyKCkpCisgICAgICAg
IDogbV9pbmxpbmVDYWxsRnJhbWUoZGVsZXRlZE1hcmtlcigpKQogI2VuZGlmCiAgICAgewogICAg
IH0KICAgICAKLSAgICBleHBsaWNpdCBDb2RlT3JpZ2luKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbnVsbHB0cikKKyAgICBleHBsaWNp
dCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBudWxscHRyKQogI2lmIENQVShBRERSRVNTNjQpCiAgICAgICAg
IDogbV9jb21wb3NpdGVWYWx1ZShidWlsZENvbXBvc2l0ZVZhbHVlKGlubGluZUNhbGxGcmFtZSwg
Ynl0ZWNvZGVJbmRleCkpCiAjZWxzZQpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICwgbV9pbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKQogI2VuZGlmCiAgICAgewotICAg
ICAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCA8IHNfaW52YWxpZEJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICBBU1NFUlQoISFieXRlY29kZUluZGV4KTsKICNpZiBDUFUoQUREUkVTUzY0KQogICAgICAg
ICBBU1NFUlQoIShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihpbmxpbmVDYWxsRnJhbWUpICYgfnNf
bWFza0NvbXBvc2l0ZVZhbHVlRm9yUG9pbnRlcikpOwogI2VuZGlmCkBAIC0xMjQsNyArMTI0LDcg
QEAgcHVibGljOgogI2lmIENQVShBRERSRVNTNjQpCiAgICAgICAgIHJldHVybiAhKG1fY29tcG9z
aXRlVmFsdWUgJiBzX21hc2tJc0J5dGVjb2RlSW5kZXhJbnZhbGlkKTsKICNlbHNlCi0gICAgICAg
IHJldHVybiBtX2J5dGVjb2RlSW5kZXggIT0gc19pbnZhbGlkQnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgcmV0dXJuICEhbV9ieXRlY29kZUluZGV4OwogI2VuZGlmCiAgICAgfQogICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9CkBAIC0xMzQsNyArMTM0
LDcgQEAgcHVibGljOgogI2lmIENQVShBRERSRVNTNjQpCiAgICAgICAgIHJldHVybiAhaXNTZXQo
KSAmJiAobV9jb21wb3NpdGVWYWx1ZSAmIHNfbWFza0NvbXBvc2l0ZVZhbHVlRm9yUG9pbnRlcik7
CiAjZWxzZQotICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4ID09IHNfaW52YWxpZEJ5dGVj
b2RlSW5kZXggJiYgISFtX2lubGluZUNhbGxGcmFtZTsKKyAgICAgICAgcmV0dXJuICEhbV9ieXRl
Y29kZUluZGV4ICYmICEhbV9pbmxpbmVDYWxsRnJhbWU7CiAjZW5kaWYKICAgICB9CiAgICAgCkBA
IC0xNjcsMTQgKzE2NywxNCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKIAotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgo
KSBjb25zdAorICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0CiAgICAgewog
I2lmIENQVShBRERSRVNTNjQpCiAgICAgICAgIGlmICghaXNTZXQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBzX2ludmFsaWRCeXRlY29kZUluZGV4OworICAgICAgICAgICAgcmV0dXJuIEJ5dGVjb2Rl
SW5kZXgoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKGlzT3V0T2ZMaW5lKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIG91dE9mTGluZUNvZGVPcmlnaW4oKS0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAg
cmV0dXJuIG1fY29tcG9zaXRlVmFsdWUgPj4gKDY0IC0gc19mcmVlQml0c0F0VG9wKTsKKyAgICAg
ICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRzKG1fY29tcG9zaXRlVmFsdWUgPj4gKDY0
IC0gc19mcmVlQml0c0F0VG9wKSk7CiAjZWxzZQogICAgICAgICByZXR1cm4gbV9ieXRlY29kZUlu
ZGV4OwogI2VuZGlmCkBAIC0xOTIsOCArMTkyLDYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfaW52YWxpZEJ5dGVjb2RlSW5kZXgg
PSBVSU5UX01BWDsKLQogI2lmIENQVShBRERSRVNTNjQpCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50cHRyX3Qgc19tYXNrSXNPdXRPZkxpbmUgPSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdWlu
dHB0cl90IHNfbWFza0lzQnl0ZWNvZGVJbmRleEludmFsaWQgPSAyOwpAQCAtMjAyLDkgKzIwMCw5
IEBAIHByaXZhdGU6CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1Ymxp
YzoKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eDsKICAgICAgICAgCi0gICAgICAgIE91dE9mTGluZUNvZGVPcmlnaW4oSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIE91dE9m
TGluZUNvZGVPcmlnaW4oSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgIDogaW5saW5lQ2FsbEZyYW1lKGlubGlu
ZUNhbGxGcmFtZSkKICAgICAgICAgICAgICwgYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQog
ICAgICAgICB7CkBAIC0yMzUsMTcgKzIzMywxNyBAQCBwcml2YXRlOgogI2lmIENQVShBRERSRVNT
NjQpCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX2ZyZWVCaXRzQXRUb3AgPSA2NCAt
IFdURl9DUFVfRUZGRUNUSVZFX0FERFJFU1NfV0lEVEg7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50cHRyX3Qgc19tYXNrQ29tcG9zaXRlVmFsdWVGb3JQb2ludGVyID0gKCgxVUxMIDw8IFdURl9D
UFVfRUZGRUNUSVZFX0FERFJFU1NfV0lEVEgpIC0gMSkgJiB+KDhVTEwgLSAxKTsKLSAgICBzdGF0
aWMgdWludHB0cl90IGJ1aWxkQ29tcG9zaXRlVmFsdWUoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgc3RhdGljIHVpbnRwdHJfdCBi
dWlsZENvbXBvc2l0ZVZhbHVlKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBpZiAoYnl0ZWNvZGVJbmRl
eCA9PSBzX2ludmFsaWRCeXRlY29kZUluZGV4KQorICAgICAgICBpZiAoIWJ5dGVjb2RlSW5kZXgp
CiAgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oaW5saW5lQ2FsbEZy
YW1lKSB8IHNfbWFza0lzQnl0ZWNvZGVJbmRleEludmFsaWQ7CiAKLSAgICAgICAgaWYgKFVOTElL
RUxZKGJ5dGVjb2RlSW5kZXggPj0gMSA8PCBzX2ZyZWVCaXRzQXRUb3ApKSB7CisgICAgICAgIGlm
IChVTkxJS0VMWShieXRlY29kZUluZGV4LmFzQml0cygpID49IDEgPDwgc19mcmVlQml0c0F0VG9w
KSkgewogICAgICAgICAgICAgYXV0byogb3V0T2ZMaW5lID0gbmV3IE91dE9mTGluZUNvZGVPcmln
aW4oaW5saW5lQ2FsbEZyYW1lLCBieXRlY29kZUluZGV4KTsKICAgICAgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihvdXRPZkxpbmUpIHwgc19tYXNrSXNPdXRPZkxpbmU7CiAg
ICAgICAgIH0KIAotICAgICAgICB1aW50cHRyX3QgZW5jb2RlZEJ5dGVjb2RlSW5kZXggPSBzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlSW5kZXgpIDw8ICg2NCAtIHNfZnJlZUJpdHNBdFRv
cCk7CisgICAgICAgIHVpbnRwdHJfdCBlbmNvZGVkQnl0ZWNvZGVJbmRleCA9IHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSkgPDwgKDY0IC0gc19mcmVlQml0c0F0
VG9wKTsKICAgICAgICAgQVNTRVJUKCEoZW5jb2RlZEJ5dGVjb2RlSW5kZXggJiBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihpbmxpbmVDYWxsRnJhbWUpKSk7CiAgICAgICAgIHJldHVybiBlbmNvZGVk
Qnl0ZWNvZGVJbmRleCB8IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGlubGluZUNhbGxGcmFtZSk7
CiAgICAgfQpAQCAtMjU4LDE0ICsyNTYsMTQgQEAgcHJpdmF0ZToKICAgICAvLyBGaW5hbGx5IHRo
ZSBsYXN0IHNfZnJlZUJpdHNBdFRvcCBhcmUgdGhlIGJ5dGVjb2RlSW5kZXggaWYgaXQgaXMgaW5s
aW5lCiAgICAgdWludHB0cl90IG1fY29tcG9zaXRlVmFsdWU7CiAjZWxzZQotICAgIHVuc2lnbmVk
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKICAg
ICBJbmxpbmVDYWxsRnJhbWUqIG1faW5saW5lQ2FsbEZyYW1lOwogI2VuZGlmCiB9OwogCiBpbmxp
bmUgdW5zaWduZWQgQ29kZU9yaWdpbjo6aGFzaCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6
SW50SGFzaDx1bnNpZ25lZD46Omhhc2goYnl0ZWNvZGVJbmRleCgpKSArCisgICAgcmV0dXJuIFdU
Rjo6SW50SGFzaDx1bnNpZ25lZD46Omhhc2goYnl0ZWNvZGVJbmRleCgpLmFzQml0cygpKSArCiAg
ICAgICAgIFdURjo6UHRySGFzaDxJbmxpbmVDYWxsRnJhbWUqPjo6aGFzaChpbmxpbmVDYWxsRnJh
bWUoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
RkdFeGl0UHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhp
dFByb2ZpbGUuY3BwCmluZGV4IGIxYTAxZmZhNGQ5MzQ4ZmVjYjI0Yzk2ODhiYzgwMDUyZjkzODg2
YTcuLmE4MmY5MmRmZDU5ZTIyZmUyNzEyYmZhMTVlZGE2ZmZkZGEwYWM1NjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNwcApAQCAtMzUs
NyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgRnJlcXVl
bnRFeGl0U2l0ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmlu
dCgiYmMjIiwgbV9ieXRlY29kZU9mZnNldCwgIjogIiwgbV9raW5kLCAiLyIsIG1faml0VHlwZSwg
Ii8iLCBtX2lubGluZUtpbmQpOworICAgIG91dC5wcmludChtX2J5dGVjb2RlSW5kZXgsICI6ICIs
IG1fa2luZCwgIi8iLCBtX2ppdFR5cGUsICIvIiwgbV9pbmxpbmVLaW5kKTsKIH0KIAogRXhpdFBy
b2ZpbGU6OkV4aXRQcm9maWxlKCkgeyB9CkBAIC03NSw3ICs3NSw3IEBAIGJvb2wgRXhpdFByb2Zp
bGU6OmFkZChDb2RlQmxvY2sqIG93bmVyLCBjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1WZWN0b3I8RnJlcXVlbnRFeGl0U2l0ZT4gRXhpdFByb2Zp
bGU6OmV4aXRTaXRlc0Zvcih1bnNpZ25lZCBieXRlY29kZUluZGV4KQorVmVjdG9yPEZyZXF1ZW50
RXhpdFNpdGU+IEV4aXRQcm9maWxlOjpleGl0U2l0ZXNGb3IoQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQogewogICAgIFZlY3RvcjxGcmVxdWVudEV4aXRTaXRlPiByZXN1bHQ7CiAgICAgCkBA
IC04Myw3ICs4Myw3IEBAIFZlY3RvcjxGcmVxdWVudEV4aXRTaXRlPiBFeGl0UHJvZmlsZTo6ZXhp
dFNpdGVzRm9yKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZnJlcXVlbnRFeGl0U2l0ZXMt
PnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2ZyZXF1ZW50RXhpdFNpdGVzLT5hdChpKS5i
eXRlY29kZU9mZnNldCgpID09IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIGlmIChtX2ZyZXF1ZW50
RXhpdFNpdGVzLT5hdChpKS5ieXRlY29kZUluZGV4KCkgPT0gYnl0ZWNvZGVJbmRleCkKICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQobV9mcmVxdWVudEV4aXRTaXRlcy0+YXQoaSkpOwogICAgIH0K
ICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0
UHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxl
LmgKaW5kZXggN2Y2MDE5ZjVhOTNkNzNkMThiOGIxNjBlOTc2MDdhNmYxNjljMWFjOS4uZjgwNzdi
Y2M2NDA5YzliYzg1NTFkMGUzZDZhNjMwMDBiZmJkYjNlYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmgKQEAgLTM5LDcgKzM5LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogY2xhc3MgRnJlcXVlbnRFeGl0U2l0ZSB7CiBw
dWJsaWM6CiAgICAgRnJlcXVlbnRFeGl0U2l0ZSgpCi0gICAgICAgIDogbV9ieXRlY29kZU9mZnNl
dCgwKSAvLyAwID0gZW1wdHkgdmFsdWUKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoQnl0ZWNv
ZGVJbmRleCgwKSkKICAgICAgICAgLCBtX2tpbmQoRXhpdEtpbmRVbnNldCkKICAgICAgICAgLCBt
X2ppdFR5cGUoRXhpdEZyb21Bbnl0aGluZykKICAgICAgICAgLCBtX2lubGluZUtpbmQoRXhpdEZy
b21BbnlJbmxpbmVLaW5kKQpAQCAtNDcsMTUgKzQ3LDE1IEBAIHB1YmxpYzoKICAgICB9CiAgICAg
CiAgICAgRnJlcXVlbnRFeGl0U2l0ZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0g
ICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgxKSAvLyAxID0gZGVsZXRlZCB2YWx1ZQorICAgICAg
ICA6IG1fYnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKICAgICAgICAg
LCBtX2tpbmQoRXhpdEtpbmRVbnNldCkKICAgICAgICAgLCBtX2ppdFR5cGUoRXhpdEZyb21Bbnl0
aGluZykKICAgICAgICAgLCBtX2lubGluZUtpbmQoRXhpdEZyb21BbnlJbmxpbmVLaW5kKQogICAg
IHsKICAgICB9CiAgICAgCi0gICAgZXhwbGljaXQgRnJlcXVlbnRFeGl0U2l0ZSh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCwgRXhpdEtpbmQga2luZCwgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSA9IEV4
aXRGcm9tQW55dGhpbmcsIEV4aXRpbmdJbmxpbmVLaW5kIGlubGluZUtpbmQgPSBFeGl0RnJvbUFu
eUlubGluZUtpbmQpCi0gICAgICAgIDogbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkK
KyAgICBleHBsaWNpdCBGcmVxdWVudEV4aXRTaXRlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCwgRXhpdEtpbmQga2luZCwgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSA9IEV4aXRGcm9tQW55dGhp
bmcsIEV4aXRpbmdJbmxpbmVLaW5kIGlubGluZUtpbmQgPSBFeGl0RnJvbUFueUlubGluZUtpbmQp
CisgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICwgbV9r
aW5kKGtpbmQpCiAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCiAgICAgICAgICwgbV9pbmxp
bmVLaW5kKGlubGluZUtpbmQpCkBAIC02MywxNCArNjMsMTQgQEAgcHVibGljOgogICAgICAgICBp
ZiAobV9raW5kID09IEFyZ3VtZW50c0VzY2FwZWQpIHsKICAgICAgICAgICAgIC8vIENvdW50IHRo
aXMgb25lIGdsb2JhbGx5LiBJdCBkb2Vzbid0IG1hdHRlciB3aGVyZSBpbiB0aGUgY29kZSBibG9j
ayB0aGUgYXJndW1lbnRzIGV4Y2FwZWQ7CiAgICAgICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHRo
ZXkgZGlkIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24u
Ci0gICAgICAgICAgICBtX2J5dGVjb2RlT2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIG1fYnl0ZWNv
ZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAg
Ly8gVXNlIHRoaXMgY29uc3RydWN0b3IgaWYgeW91IHdpc2ggZm9yIHRoZSBleGl0IHNpdGUgdG8g
YmUgY291bnRlZCBnbG9iYWxseSB3aXRoaW4gaXRzCiAgICAgLy8gY29kZSBibG9jay4KICAgICBl
eHBsaWNpdCBGcmVxdWVudEV4aXRTaXRlKEV4aXRLaW5kIGtpbmQsIEV4aXRpbmdKSVRUeXBlIGpp
dFR5cGUgPSBFeGl0RnJvbUFueXRoaW5nLCBFeGl0aW5nSW5saW5lS2luZCBpbmxpbmVLaW5kID0g
RXhpdEZyb21BbnlJbmxpbmVLaW5kKQotICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoMCkKKyAg
ICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgLCBtX2tp
bmQoa2luZCkKICAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKICAgICAgICAgLCBtX2lubGlu
ZUtpbmQoaW5saW5lS2luZCkKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgIAogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBvdGhlcikgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0ID09IG90aGVyLm1fYnl0ZWNvZGVPZmZz
ZXQKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleCA9PSBvdGhlci5tX2J5dGVjb2RlSW5k
ZXgKICAgICAgICAgICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKICAgICAgICAgICAgICYm
IG1faml0VHlwZSA9PSBvdGhlci5tX2ppdFR5cGUKICAgICAgICAgICAgICYmIG1faW5saW5lS2lu
ZCA9PSBvdGhlci5tX2lubGluZUtpbmQ7CkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICBib29sIHN1YnN1bWVzKGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUmIG90aGVyKSBjb25zdAog
ICAgIHsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQgIT0gb3RoZXIubV9ieXRlY29kZU9m
ZnNldCkKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCAhPSBvdGhlci5tX2J5dGVjb2RlSW5k
ZXgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChtX2tpbmQgIT0gb3Ro
ZXIubV9raW5kKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA3LDEwICsxMDcsMTAg
QEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2J5dGVjb2RlT2Zmc2V0KSArIG1fa2luZCArIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX2ppdFR5cGUpICogNyArIHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
X2lubGluZUtpbmQpICogMTE7CisgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXguaGFzaCgp
ICsgbV9raW5kICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1faml0VHlwZSkgKiA3ICsgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1faW5saW5lS2luZCkgKiAxMTsKICAgICB9CiAgICAgCi0gICAgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0OyB9
CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
Y29kZUluZGV4OyB9CiAgICAgRXhpdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsg
fQogICAgIEV4aXRpbmdKSVRUeXBlIGppdFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2ppdFR5cGU7
IH0KICAgICBFeGl0aW5nSW5saW5lS2luZCBpbmxpbmVLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9p
bmxpbmVLaW5kOyB9CkBAIC0xMzEsMTMgKzEzMSwxMyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2tp
bmQgPT0gRXhpdEtpbmRVbnNldCAmJiBtX2J5dGVjb2RlT2Zmc2V0OworICAgICAgICByZXR1cm4g
bV9raW5kID09IEV4aXRLaW5kVW5zZXQgJiYgbV9ieXRlY29kZUluZGV4LmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX2J5dGVjb2RlT2Zmc2V0OworICAg
IEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwogICAgIEV4aXRLaW5kIG1fa2luZDsKICAg
ICBFeGl0aW5nSklUVHlwZSBtX2ppdFR5cGU7CiAgICAgRXhpdGluZ0lubGluZUtpbmQgbV9pbmxp
bmVLaW5kOwpAQCAtMTgzLDcgKzE4Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBHZXQgdGhl
IGZyZXF1ZW50IGV4aXQgc2l0ZXMgZm9yIGEgYnl0ZWNvZGUgaW5kZXguIFRoaXMgaXMgTyhuKSwg
YW5kIGlzCiAgICAgLy8gbWVhbnQgdG8gb25seSBiZSB1c2VkIGZyb20gZGVidWdnaW5nL3Byb2Zp
bGluZyBjb2RlLgotICAgIFZlY3RvcjxGcmVxdWVudEV4aXRTaXRlPiBleGl0U2l0ZXNGb3IodW5z
aWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgVmVjdG9yPEZyZXF1ZW50RXhpdFNpdGU+IGV4aXRT
aXRlc0ZvcihCeXRlY29kZUluZGV4KTsKICAgICAKICAgICAvLyBUaGlzIGlzIE8obikgYW5kIHNo
b3VsZCBiZSBjYWxsZWQgb24gbGVzcy1mcmVxdWVudGx5IGV4ZWN1dGVkIGNvZGUgcGF0aHMKICAg
ICAvLyBpbiB0aGUgY29tcGlsZXIuIEl0IHNob3VsZCBiZSBzdHJpY3RseSBjaGVhcGVyIHRoYW4g
YnVpbGRpbmcgYQpAQCAtMjIyLDcgKzIyMiw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGhh
c0V4aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUoa2luZCkpOwogICAgIH0KICAgICAKLSAgICBib29s
IGhhc0V4aXRTaXRlKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEV4aXRLaW5kIGtpbmQpIGNvbnN0
CisgICAgYm9vbCBoYXNFeGl0U2l0ZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEV4aXRL
aW5kIGtpbmQpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gaGFzRXhpdFNpdGUoRnJlcXVl
bnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBraW5kKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkU291cmNlRHVtcC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmNwcAppbmRleCBh
YmE4NDk0ZWVmZDBmOWRmNWQzMDkzYzIxMmYzMmNlMDgxOWJkMTU2Li5iZjIyMTAyNzVlNTdmYzg3
ZjUzNjQyNDAwZTJjZTc0MzQyZjcwNGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmNwcApAQCAtMzgsNyArMzgsNyBAQCBE
ZWZlcnJlZFNvdXJjZUR1bXA6OkRlZmVycmVkU291cmNlRHVtcChDb2RlQmxvY2sqIGNvZGVCbG9j
aykKIHsKIH0KIAotRGVmZXJyZWRTb3VyY2VEdW1wOjpEZWZlcnJlZFNvdXJjZUR1bXAoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcm9vdENvZGVCbG9jaywgSklUVHlwZSByb290SklU
VHlwZSwgdW5zaWduZWQgY2FsbGVyQnl0ZWNvZGVJbmRleCkKK0RlZmVycmVkU291cmNlRHVtcDo6
RGVmZXJyZWRTb3VyY2VEdW1wKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHJvb3RD
b2RlQmxvY2ssIEpJVFR5cGUgcm9vdEpJVFR5cGUsIEJ5dGVjb2RlSW5kZXggY2FsbGVyQnl0ZWNv
ZGVJbmRleCkKICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrKQog
ICAgICwgbV9yb290Q29kZUJsb2NrKGNvZGVCbG9jay0+dm0oKSwgcm9vdENvZGVCbG9jaykKICAg
ICAsIG1fcm9vdEpJVFR5cGUocm9vdEpJVFR5cGUpCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgRGVm
ZXJyZWRTb3VyY2VEdW1wOjpkdW1wKCkKICAgICBkYXRhTG9nKCptX2NvZGVCbG9jayk7CiAKICAg
ICBpZiAoaXNJbmxpbmVkRnJhbWUpCi0gICAgICAgIGRhdGFMb2coIiBhdCAiLCBDb2RlQmxvY2tX
aXRoSklUVHlwZSgqbV9yb290Q29kZUJsb2NrLCBtX3Jvb3RKSVRUeXBlKSwgIiAiLCAiYmMjIiwg
bV9jYWxsZXJCeXRlY29kZUluZGV4KTsKKyAgICAgICAgZGF0YUxvZygiIGF0ICIsIENvZGVCbG9j
a1dpdGhKSVRUeXBlKCptX3Jvb3RDb2RlQmxvY2ssIG1fcm9vdEpJVFR5cGUpLCAiICIsIG1fY2Fs
bGVyQnl0ZWNvZGVJbmRleCk7CiAKICAgICBkYXRhTG9nKCJcbicnJyIpOwogICAgIG1fY29kZUJs
b2NrLT5kdW1wU291cmNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmgKaW5kZXggYjVhN2JmMmNmMmRiNmM3YzE5YzhlZTRmYjUw
YmJkMDE4YjM0MjEwYS4uZThkMmNhOGQ2ODhjN2YwODMwYjY5MjI3NzQ0MDRhODRkYzQwMWI3NCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkU291cmNl
RHVtcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZFNvdXJj
ZUR1bXAuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBEZWZlcnJlZFNvdXJjZUR1bXAgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIERlZmVycmVkU291cmNlRHVt
cChDb2RlQmxvY2sqKTsKLSAgICBEZWZlcnJlZFNvdXJjZUR1bXAoQ29kZUJsb2NrKiwgQ29kZUJs
b2NrKiByb290Q29kZUJsb2NrLCBKSVRUeXBlIHJvb3RKSVRUeXBlLCB1bnNpZ25lZCBjYWxsZXJC
eXRlY29kZUluZGV4KTsKKyAgICBEZWZlcnJlZFNvdXJjZUR1bXAoQ29kZUJsb2NrKiwgQ29kZUJs
b2NrKiByb290Q29kZUJsb2NrLCBKSVRUeXBlIHJvb3RKSVRUeXBlLCBCeXRlY29kZUluZGV4IGNh
bGxlckJ5dGVjb2RlSW5kZXgpOwogCiAgICAgdm9pZCBkdW1wKCk7CiAKQEAgLTQ0LDcgKzQ0LDcg
QEAgcHJpdmF0ZToKICAgICBTdHJvbmc8Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBTdHJv
bmc8Q29kZUJsb2NrPiBtX3Jvb3RDb2RlQmxvY2s7CiAgICAgSklUVHlwZSBtX3Jvb3RKSVRUeXBl
OwotICAgIHVuc2lnbmVkIG1fY2FsbGVyQnl0ZWNvZGVJbmRleCB7IFVJTlRfTUFYIH07CisgICAg
Qnl0ZWNvZGVJbmRleCBtX2NhbGxlckJ5dGVjb2RlSW5kZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0
ZWNvZGVMaXZlbmVzcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRl
Y29kZUxpdmVuZXNzLmgKaW5kZXggMDczY2UyNzU3YmJhOWMyYTBhYjZjMTIwZjRkYmEwZGJiZjcx
OWJmOC4uOWE4ODQzN2ViM2ZiZjM4MzBhZTcxMzY0NWQ2Y2ZkMzc5M2U3ZTEyOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNz
LmgKQEAgLTMxLDE3ICszMSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOwogCi10eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIEZhc3RCaXRWZWN0
b3IsIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hU
cmFpdHM8dW5zaWduZWQ+PiBCeXRlY29kZVRvQml0bWFwTWFwOwordHlwZWRlZiBIYXNoTWFwPEJ5
dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3I+IEJ5dGVjb2RlVG9CaXRtYXBNYXA7CiAKIGNsYXNz
IEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBnZXRMaXZlbmVzcyh1bnNpZ25lZCBieXRl
Y29kZUluZGV4KSBjb25zdAorICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGdldExpdmVuZXNzKEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X21hcFtieXRlY29kZUluZGV4XTsKKyAgICAgICAgLy8gRklYTUU6IFdoYXQgc2hvdWxkIHRoaXMg
ZG8gd2hlbiB3ZSBoYXZlIGNoZWNrcG9pbnRzPworICAgICAgICByZXR1cm4gbV9tYXBbYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKV07CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmFuZElzTGl2ZShp
bnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QKKyAgICBib29sIG9wZXJh
bmRJc0xpdmUoaW50IG9wZXJhbmQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkgY29uc3QK
ICAgICB7CiAgICAgICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9w
ZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgp
LCBvcGVyYW5kKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFN0YXR1cy5jcHAKaW5kZXggYmVlYjBlZGNlMjk3MDk5MWI0N2ExNzYwNGI1ZDJiYTRm
MzZiN2RmYS4uNjIyYjNlNmQwYzZlNTAyMGFjMTBmOTQ2YzA2NTJjNGI3OGFjZDA4NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcApAQCAt
NTIsMTEgKzUyLDExIEBAIGJvb2wgR2V0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBH
ZXRCeUlkVmFyaWFudCYgdmFyaWFudCkKICAgICByZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50
KG1fdmFyaWFudHMsIHZhcmlhbnQpOwogfQogCi1HZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorR2V0QnlJZFN0YXR1cyBHZXRCeUlk
U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIFZN
JiB2bSA9IHByb2ZpbGVkQmxvY2stPnZtKCk7CiAgICAgCi0gICAgYXV0byBpbnN0cnVjdGlvbiA9
IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOworICAgIGF1
dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29k
ZUluZGV4Lm9mZnNldCgpKTsKIAogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEOwogICAgIHN3
aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKQEAgLTEwMiw3ICsxMDIsNyBAQCBHZXRC
eUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCB1bnNpZ25lZAogICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFNpbXBsZSwgZmFs
c2UsIEdldEJ5SWRWYXJpYW50KFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBvZmZzZXQpKTsKIH0K
IAotR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcgZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4
aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQorR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0
RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURh
dGEpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xv
Y2spOwogCkBAIC0xMzAsNyArMTMwLDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG0KICNpZiBF
TkFCTEUoREZHX0pJVCkKIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0
dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBHZXRCeUlkU3RhdHVz
IHJlc3VsdCA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0
ZUZlZWRiYWNrKAogICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCB1aWQs
CiAgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKHByb2ZpbGVkQmxv
Y2ssIGJ5dGVjb2RlSW5kZXgpKTsKQEAgLTMwMyw3ICszMDMsNyBAQCBHZXRCeUlkU3RhdHVzIEdl
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJ
Q1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsCiAgICAgSUNTdGF0dXNDb250ZXh0U3RhY2smIGljQ29u
dGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
CiB7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpOwogICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRl
RGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKHByb2ZpbGVkQmxvY2ss
IGJ5dGVjb2RlSW5kZXgpOwogICAgIEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNCYWRDYWNoZUV4aXRT
aXRlKHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgKaW5kZXggMzgzZDU4NjBkYjVkNDhi
NjcxYjk2NDkxNmU1YTU4NDBhYWQxMWViNS4uMWNjMGUyMmJjOTU0ZmJlZWQzZTE3MzNhMDMxNGM1
YTUyMDUxZjZiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRTdGF0dXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5oCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgICAgICBtX3ZhcmlhbnRz
LmFwcGVuZCh2YXJpYW50KTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIEdldEJ5SWRTdGF0dXMg
Y29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhp
dFNpdGVEYXRhKTsKKyAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9j
ayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwg
RXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwogICAgIHN0YXRpYyBHZXRC
eUlkU3RhdHVzIGNvbXB1dGVGb3IoY29uc3QgU3RydWN0dXJlU2V0JiwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCk7CiAgICAgCiAgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2Rl
QmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXND
b250ZXh0U3RhY2smIGRmZ0NvbnRleHRTdGFjaywgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCk7CkBAIC0xNTMsNyArMTUzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyosCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIENhbGxMaW5rU3RhdHVzOjpF
eGl0U2l0ZURhdGEpOwogI2VuZGlmCi0gICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZy
b21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKTsKKyAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENv
ZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwogICAgIAog
ICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYpOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuY3BwCmluZGV4
IGFkZDJlYjA0NDllMDg1OTY0OGQ5MmQ1NzBhODUzZWNlYWJjZmJiYjEuLjhiZWVhYmEwZDVmYTZk
Mjg3ZmNkZTc3YWJiMzQ3ZTMyZjUwNzQ5MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JQ1N0YXR1c1V0aWxzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSUNTdGF0dXNVdGlscy5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLUV4aXRGbGFnIGhhc0JhZENhY2hlRXhpdFNpdGUoQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorRXhpdEZsYWcgaGFzQmFkQ2FjaGVF
eGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5s
aW5rZWRDb2RlQmxvY2sgPSBwcm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c1V0aWxzLmgKaW5kZXggMDc3
Y2JlMWFiYWRmNzJkOWVjYTUxZmZlMGEzNWZiM2M4NjkyYzc3Ni4uOTgyMGFkOTlmNDVmOTRmZjZk
MWM5Y2FmMzg0NmYwNzVhMjYzOTQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSUNTdGF0dXNVdGlscy5oCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgZmlsdGVySUNTdGF0
dXNWYXJpYW50cyhWYXJpYW50VmVjdG9yVHlwZSYgdmFyaWFudHMsIGNvbnN0IFN0cnVjdHVyZVNl
dCYgc2V0CiAgICAgICAgIH0pOwogfQogCi1FeGl0RmxhZyBoYXNCYWRDYWNoZUV4aXRTaXRlKENv
ZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CitFeGl0Rmxh
ZyBoYXNCYWRDYWNoZUV4aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJ
bmRleCk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCmluZGV4IGI0NTg4YjU4NTI1OTNkOWVhNzMwZDQx
ZDFhYjljMzZlMTVmZjE0MmMuLjkyMzcwNTNmYmE2NjBlNDMyYzQ3MGMxMGQxNjdlNjk1NGZkZjYy
ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0
dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMu
Y3BwCkBAIC00Myw3ICs0Myw3IEBAIGJvb2wgSW5CeUlkU3RhdHVzOjphcHBlbmRWYXJpYW50KGNv
bnN0IEluQnlJZFZhcmlhbnQmIHZhcmlhbnQpCiB9CiAKICNpZiBFTkFCTEUoSklUKQotSW5CeUlk
U3RhdHVzIEluQnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ss
IElDU3RhdHVzTWFwJiBtYXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIEV4aXRGbGFnIGRpZEV4aXQpCitJbkJ5SWRTdGF0dXMgSW5CeUlkU3RhdHVzOjpj
b21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0Rmxh
ZyBkaWRFeGl0KQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9j
ay0+bV9sb2NrKTsKIApAQCAtNjQsNyArNjQsNyBAQCBJbkJ5SWRTdGF0dXMgSW5CeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUluQnlJZFN0YXR1cyBJbkJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorSW5CeUlkU3RhdHVzIElu
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVz
TWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKIHsKICAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2NrLCBtYXAsIGJ5dGVj
b2RlSW5kZXgsIHVpZCwgaGFzQmFkQ2FjaGVFeGl0U2l0ZShwcm9maWxlZEJsb2NrLCBieXRlY29k
ZUluZGV4KSk7CiB9CkBAIC03Myw3ICs3Myw3IEBAIEluQnlJZFN0YXR1cyBJbkJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoCiAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYg
YmFzZWxpbmVNYXAsCiAgICAgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewotICAgIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAg
ICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0U2l0ZShwcm9maWxlZEJsb2NrLCBi
eXRlY29kZUluZGV4KTsKICAgICAKICAgICBmb3IgKElDU3RhdHVzQ29udGV4dCogY29udGV4dCA6
IGNvbnRleHRTdGFjaykgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luQnlJZFN0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJ
ZFN0YXR1cy5oCmluZGV4IDhhZWI3NjBjNDg5YWEyNzRlMjkyNDA3MDNmNmQyYjdlN2M4MTMyMjAu
LmViNjVhZWEwNmJjNDhjMzgxYTkzNzhjMDA2NzUzNmVlMjg5ZDM0YmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKQEAgLTgwLDggKzgwLDggQEAg
cHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAg
ICAKLSAgICBzdGF0aWMgSW5CeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0
dXNNYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsK
LSAgICBzdGF0aWMgSW5CeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNN
YXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0
RmxhZyk7CisgICAgc3RhdGljIEluQnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElD
U3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAg
c3RhdGljIEluQnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwg
Qnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcpOwogICAgIHN0
YXRpYyBJbkJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElD
U3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFj
aywgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVD
YWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxG
cmFtZS5jcHAKaW5kZXggZTUzNjFiNjFhMjVmMDBmNGMzMjliNzk3MmE3MDgzMjJiMTA2ZWY4MS4u
M2UzZTY1ZjU5YzUxMzAxZWIyZjQ0YjJkMjMxZWZjZWNhOTFlY2NmMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAKQEAgLTY5LDcg
KzY5LDcgQEAgdm9pZCBJbmxpbmVDYWxsRnJhbWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnMKICAgICBvdXQucHJpbnQoYnJpZWZGdW5j
dGlvbkluZm9ybWF0aW9uKCksICI6PCIsIFJhd1BvaW50ZXIoYmFzZWxpbmVDb2RlQmxvY2suZ2V0
KCkpKTsKICAgICBpZiAoaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgIG91dC5wcmludCgiIChTdHJp
Y3RNb2RlKSIpOwotICAgIG91dC5wcmludCgiLCBiYyMiLCBkaXJlY3RDYWxsZXIuYnl0ZWNvZGVJ
bmRleCgpLCAiLCAiLCBzdGF0aWNfY2FzdDxLaW5kPihraW5kKSk7CisgICAgb3V0LnByaW50KCIs
ICIsIGRpcmVjdENhbGxlci5ieXRlY29kZUluZGV4KCksICIsICIsIHN0YXRpY19jYXN0PEtpbmQ+
KGtpbmQpKTsKICAgICBpZiAoaXNDbG9zdXJlQ2FsbCkKICAgICAgICAgb3V0LnByaW50KCIsIGNs
b3N1cmUgY2FsbCIpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAppbmRleCBkM2JhOWM5OGFiMGU5ODBmZWIyNzRi
MDUyYTkwZjIwY2ZkNjdhZTg2Li5lZDAwZTY5MWRiNmUyZjRlYWQyNGY5YWY3N2Q3ZTA5OTM5N2M4
MTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VP
ZlN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNl
T2ZTdGF0dXMuY3BwCkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgSW5zdGFuY2VPZlN0YXR1czo6YXBw
ZW5kVmFyaWFudChjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYgdmFyaWFudCkKIH0KIAogSW5zdGFu
Y2VPZlN0YXR1cyBJbnN0YW5jZU9mU3RhdHVzOjpjb21wdXRlRm9yKAotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBJQ1N0YXR1c01hcCYgaW5mb01hcCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSUNTdGF0dXNNYXAmIGluZm9NYXAsIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5oCmluZGV4IGYwZTIwZDlhZWY1MTRiOTI4ZjUwYzUxOTIy
MWFhNjRkZTYzYzllZDguLjY5MzMyNjBjMWZiNmQwYTYzODI4YjZmYWI5NzBhZWY5ODJhZGViMjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3Rh
dHVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0
dXMuaApAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBJbnN0YW5jZU9mU3RhdHVzIGNv
bXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
KTsKKyAgICBzdGF0aWMgSW5zdGFuY2VPZlN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElD
U3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgc3RhdGljIEluc3RhbmNlT2ZTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIFN0cnVjdHVyZVN0dWJJbmZvKik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oCmluZGV4IDk5YjVhNWE5MDYw
MjZjZWNlOGI0ZGQxMDA0NDkyODlkMWZmZTY0MzguLmYxZWIzYmVhOWQyYzhiODJhZjQ3MjIyYTg1
ZTU5Mzk3NDgzNDA3OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbnN0cnVjdGlvblN0cmVhbS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbnN0cnVjdGlvblN0cmVhbS5oCkBAIC03NywxMCArNzcsOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuIEJhc2VSZWYgeyBtX2luc3RydWN0aW9ucywgbV9pbmRleCArIHB0cigpLT5z
aXplKCkgfTsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSBPZmZzZXQgb2Zmc2V0KCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1faW5kZXg7Ci0gICAgICAgIH0KKyAg
ICAgICAgaW5saW5lIE9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Cisg
ICAgICAgIGlubGluZSBCeXRlY29kZUluZGV4IGluZGV4KCkgY29uc3QgeyByZXR1cm4gQnl0ZWNv
ZGVJbmRleChvZmZzZXQoKSk7IH0KIAogICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdAogICAg
ICAgICB7CkBAIC0xNTIsMTIgKzE1MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpdGVy
YXRvciB7IG1faW5zdHJ1Y3Rpb25zLCBtX2luc3RydWN0aW9ucy5zaXplKCkgfTsKICAgICB9CiAK
KyAgICBpbmxpbmUgY29uc3QgUmVmIGF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGF0KGluZGV4Lm9mZnNldCgpKTsgfQogICAgIGlubGluZSBjb25zdCBSZWYgYXQoT2Zmc2V0
IG9mZnNldCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChvZmZzZXQgPCBtX2luc3RydWN0
aW9ucy5zaXplKCkpOwogICAgICAgICByZXR1cm4gUmVmIHsgbV9pbnN0cnVjdGlvbnMsIG9mZnNl
dCB9OwogICAgIH0KIAorCiAgICAgaW5saW5lIHNpemVfdCBzaXplKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX2luc3RydWN0aW9ucy5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCmluZGV4
IDAxYTNlZTc0MzY2M2U1MGMxNDE2NWZiNjRhMzFiMjdkMWQyYzJmNWEuLmVjMWY1YzAyOGQ3MzI0
MDdlZGFlNjFhMmEwMDkyN2FjMzRjOTQwZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCkBAIC0zOSwxOSAr
MzksMTkgQEAgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKIGNsYXNzIExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5IHsKIHB1YmxpYzoKICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgpCi0g
ICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgwKSAvLyAwID0gZW1wdHkgdmFsdWUKKyAgICAgICAg
OiBtX2J5dGVjb2RlSW5kZXgoMCkgLy8gMCA9IGVtcHR5IHZhbHVlCiAgICAgICAgICwgbV9vcGVy
YW5kKFZpcnR1YWxSZWdpc3RlcigpKSAvLyBub3QgYSB2YWxpZCBvcGVyYW5kIGluZGV4IGluIG91
ciBjdXJyZW50IHNjaGVtZQogICAgIHsKICAgICB9CiAgICAgCiAgICAgTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1f
Ynl0ZWNvZGVPZmZzZXQoMSkgLy8gMSA9IGRlbGV0ZWQgdmFsdWUKKyAgICAgICAgOiBtX2J5dGVj
b2RlSW5kZXgoMSkgLy8gMSA9IGRlbGV0ZWQgdmFsdWUKICAgICAgICAgLCBtX29wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyKCkpIC8vIG5vdCBhIHZhbGlkIG9wZXJhbmQgaW5kZXggaW4gb3VyIGN1cnJl
bnQgc2NoZW1lCiAgICAgewogICAgIH0KICAgICAKLSAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZUtleSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCi0g
ICAgICAgIDogbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkKKyAgICBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZUtleShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQog
ICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3Bl
cmFuZC5pc1ZhbGlkKCkpOwpAQCAtNjQsMTkgKzY0LDE5IEBAIHB1YmxpYzoKICAgICAKICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkmIG90aGVyKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXQgPT0gb3RoZXIubV9i
eXRlY29kZU9mZnNldAorICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4ID09IG90aGVyLm1f
Ynl0ZWNvZGVJbmRleAogICAgICAgICAgICAgJiYgbV9vcGVyYW5kID09IG90aGVyLm1fb3BlcmFu
ZDsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gV1RGOjppbnRIYXNoKG1fYnl0ZWNvZGVPZmZzZXQpICsgbV9vcGVyYW5kLm9mZnNl
dCgpOworICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5v
ZmZzZXQoKTsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBjb25z
dAorICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoISEqdGhpcyk7Ci0gICAgICAgIHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0OworICAg
ICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KIAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKCkgY29uc3QKQEAgLTg3LDEwICs4NywxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gIW1fb3BlcmFuZC5pc1ZhbGlkKCkgJiYgbV9ieXRlY29kZU9mZnNldDsKKyAgICAgICAgcmV0
dXJuICFtX29wZXJhbmQuaXNWYWxpZCgpICYmIG1fYnl0ZWNvZGVJbmRleDsKICAgICB9CiBwcml2
YXRlOiAKLSAgICB1bnNpZ25lZCBtX2J5dGVjb2RlT2Zmc2V0OworICAgIEJ5dGVjb2RlSW5kZXgg
bV9ieXRlY29kZUluZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKaW5kZXggN2UzY2M5NGZhNDYxMTFkY2JhYjBmMjIw
OWYwMTk4MjAyM2I1ZjAxMy4uNzEwNGQwMWFlMTFhZDNiYWNhMTM0NTViZDFhMzA2YjFiYmQxYmZm
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcApAQCAtNDEsNyArNDEsNyBAQCBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZy
b21MYXp5T3BlcmFuZCgKICAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHJlc3VsdDsK
ICAgICByZXN1bHQubV9raW5kID0gTGF6eU9wZXJhbmQ7CiAgICAgcmVzdWx0LnUubGF6eU9wZXJh
bmQuY29kZUJsb2NrID0gY29kZUJsb2NrOwotICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmJ5dGVj
b2RlT2Zmc2V0ID0ga2V5LmJ5dGVjb2RlT2Zmc2V0KCk7CisgICAgcmVzdWx0LnUubGF6eU9wZXJh
bmQuYnl0ZWNvZGVPZmZzZXQgPSBrZXkuYnl0ZWNvZGVJbmRleCgpOwogICAgIHJlc3VsdC51Lmxh
enlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpLm9mZnNldCgpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAppbmRleCBiNWU4NGIxMzM3ZTNlZjNi
NjIzZGQyOTc2NTA3NGNjYTg1N2MyMzgxLi5jZmI4MzQ3MDZhZjgzNDI3MDI2OGU4ZjJmNmZjOTI5
NDJmM2ZiZDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgKQEAgLTMxLDYgKzMxLDcgQEAK
IC8vIHRoZXNlICNpZidzIHdpbGwgZGlzYXBwZWFyLi4uCiAjaWYgRU5BQkxFKERGR19KSVQpCiAK
KyNpbmNsdWRlICJCeXRlY29kZUluZGV4LmgiCiAjaW5jbHVkZSAiR1BSSW5mby5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTgzLDEyICs4NCwxNiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgCiAg
ICAgS2luZCBtX2tpbmQ7Ci0gICAgdW5pb24geworICAgIHVuaW9uIERhdGEgeworICAgICAgICBE
YXRhKCkKKyAgICAgICAgICAgIDogcHJvZmlsZShudWxscHRyKQorICAgICAgICB7IH0KKwogICAg
ICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGU7CiAgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlOwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2s7Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldDsKKyAgICAgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgICAgICBpbnQgb3BlcmFuZDsKICAg
ICAgICAgfSBsYXp5T3BlcmFuZDsKICAgICB9IHU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKaW5kZXggZWZkZTM3Mzg0NmJmNWIzMTg1ZTJh
Yzg4M2FlYTAzMGZhNWQ3ODA4ZS4uMzI1MGJlNTE4YmRkOWRhM2E0N2E0N2YxMzk5ZTU3MzQzNjVl
NzE4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRT
dGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcApAQCAtNDcsMTEgKzQ3LDExIEBAIGJvb2wgUHV0QnlJZFN0YXR1czo6YXBwZW5kVmFy
aWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCkKICAgICByZXR1cm4gYXBwZW5kSUNT
dGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOwogfQogCi1QdXRCeUlkU3RhdHVzIFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQogewogICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxvY2stPnZtKCk7CiAgICAgCi0gICAgYXV0byBp
bnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5k
ZXgpOworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKHByb2ZpbGVkQmxvY2spOwogCkBAIC05Miw3ICs5Miw3IEBAIFB1dEJ5SWRTdGF0dXMg
UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ss
IHVuc2lnbmVkCiB9CiAKICNpZiBFTkFCTEUoSklUKQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1h
cCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZs
YWcgZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRh
KQorUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1
czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCiB7CiAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgIApAQCAtMjM3LDcgKzIzNyw3
IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAogCiBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGlu
ZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBj
b250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKIHsKLSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4KCk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCk7CiAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNp
dGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9j
aywgYnl0ZWNvZGVJbmRleCk7CiAgICAgRXhpdEZsYWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhp
dFNpdGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCmluZGV4IDkyYjFiMWEzNzJjYjZhZjg1
MmY4YjE0ZTYwNmVjYWFiODM5OTYxNzUuLmIwZGQ5ZjEzOTlhOGJlNzQxZjQ4YzMyNzAzYjA4MjIy
ODU0YzE5OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRT
dGF0dXMuaApAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fdmFyaWFudHMuYXBw
ZW5kKHZhcmlhbnQpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21w
dXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0
ZURhdGEpOworICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwg
SUNTdGF0dXNNYXAmLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0
RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CiAgICAgc3RhdGljIFB1dEJ5SWRT
dGF0dXMgY29tcHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cnVjdHVyZVNldCYsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QpOwogICAgIAogICAgIHN0YXRpYyBQ
dXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1
c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENv
ZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvKiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwKICAgICAgICAgQ2FsbExp
bmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CiAjZW5kaWYKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1
cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVG
cm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCk7CiAgICAgCiAgICAgYm9vbCBhcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAppbmRleCA1ODI2NGIxNGFkMTBiN2NkMTY3NTE1YWMxMzljOWRiMzU0Y2Zj
ODBjLi5kN2IzYjY0MTZmNmVkNTYwOTUxZGY5ODMwNzQ1MzFjYWI0Njg4YWU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAK
QEAgLTQwLDggKzQwLDcgQEAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsK
IH0KIAogU3RydWN0dXJlU3R1YkluZm86OlN0cnVjdHVyZVN0dWJJbmZvKEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZSkKLSAgICA6IGNhbGxTaXRlSW5kZXgoVUlOVF9NQVgpCi0gICAgLCBhY2Nlc3NUeXBl
KGFjY2Vzc1R5cGUpCisgICAgOiBhY2Nlc3NUeXBlKGFjY2Vzc1R5cGUpCiAgICAgLCBjYWNoZVR5
cGUoQ2FjaGVUeXBlOjpVbnNldCkKICAgICAsIGNvdW50ZG93bigxKSAvLyBGb3IgYSB0b3RhbGx5
IGNsZWFyIHN0dWIsIHdlJ2xsIHBhdGNoIGl0IGFmdGVyIHRoZSBmaXJzdCBleGVjdXRpb24uCiAg
ICAgLCByZXBhdGNoQ291bnQoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IGIyNzE2YmZiNGJkZWZkMjA4MWIxNWY2
YTI3MjIxOTRjMjk5MWYyM2QuLjIzNGZhNTc3YzVhZjBhMTIxNmM3YjRkNmQwNDQ3ZDBiY2Y4ZDRj
NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcApAQCAtMTExLDE1ICsxMTEsMTUgQEAgc2l6ZV90IFVubGlua2VkQ29kZUJs
b2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCwgVk0mIHZtKQogICAgIHJldHVybiBCYXNl
Ojplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGV4dHJhU2l6ZTsKIH0KIAotaW50IFVubGlua2Vk
Q29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQpCitpbnQgVW5saW5rZWRDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4
KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBBU1NFUlQoYnl0ZWNvZGVPZmZz
ZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgIEFTU0VSVChieXRlY29kZUluZGV4Lm9m
ZnNldCgpIDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKICAgICBpbnQgZGl2b3QgeyAwIH07CiAg
ICAgaW50IHN0YXJ0T2Zmc2V0IHsgMCB9OwogICAgIGludCBlbmRPZmZzZXQgeyAwIH07CiAgICAg
dW5zaWduZWQgbGluZSB7IDAgfTsKICAgICB1bnNpZ25lZCBjb2x1bW4geyAwIH07Ci0gICAgZXhw
cmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIGRpdm90LCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOworICAgIGV4cHJlc3Npb25SYW5nZUZv
ckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQsIGxpbmUsIGNvbHVtbik7CiAgICAgcmV0dXJuIGxpbmU7CiB9CiAKQEAgLTE3OSwxMCArMTc5
LDEwIEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmR1bXBFeHByZXNzaW9uUmFuZ2VJbmZvKCkK
IH0KICNlbmRpZgogCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JC
eXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwKK3ZvaWQgVW5saW5rZWRDb2Rl
QmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4LAogICAgIGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zm
c2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3QKIHsKLSAgICBBU1NF
UlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgIEFTU0VSVChi
eXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKIAogICAgIGlm
ICghbV9leHByZXNzaW9uSW5mby5zaXplKCkpIHsKICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwpA
QCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5n
ZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0CiAgICAgaW50IGhpZ2gg
PSBleHByZXNzaW9uSW5mby5zaXplKCk7CiAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHsKICAgICAg
ICAgaW50IG1pZCA9IGxvdyArIChoaWdoIC0gbG93KSAvIDI7Ci0gICAgICAgIGlmIChleHByZXNz
aW9uSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAg
ICBpZiAoZXhwcmVzc2lvbkluZm9bbWlkXS5pbnN0cnVjdGlvbk9mZnNldCA8PSBieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKQogICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgaGlnaCA9IG1pZDsKQEAgLTMyNSw5ICszMjUsOSBAQCBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbSYgVW5saW5rZWRDb2RlQmxvY2s6Omluc3RydWN0aW9ucygpIGNvbnN0CiAgICAg
cmV0dXJuICptX2luc3RydWN0aW9uczsKIH0KIAotVW5saW5rZWRIYW5kbGVySW5mbyogVW5saW5r
ZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikKK1VubGlua2VkSGFuZGxlcklu
Zm8qIFVubGlua2VkQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZEhhbmRsZXIpCiB7Ci0g
ICAgcmV0dXJuIGhhbmRsZXJGb3JJbmRleChieXRlY29kZU9mZnNldCwgcmVxdWlyZWRIYW5kbGVy
KTsKKyAgICByZXR1cm4gaGFuZGxlckZvckluZGV4KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCksIHJl
cXVpcmVkSGFuZGxlcik7CiB9CiAKIFVubGlua2VkSGFuZGxlckluZm8qIFVubGlua2VkQ29kZUJs
b2NrOjpoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1
aXJlZEhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCmluZGV4IDAwMDJjM2VhMGI0YmI2NGZjYjlhNmFmOTEyNjVmZjBhMjg0
Nzc3MWUuLjFiYTkwN2ZkNzg2ZjM0YjgwY2ZlYTVkM2FlNDBmZmIxOGM1Y2VjZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBA
IC0yMTcsNyArMjE3LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGp1bXBUYXJnZXQoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzW2luZGV4XTsgfQogICAgIHVuc2lnbmVk
IGxhc3RKdW1wVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5sYXN0KCk7IH0K
IAotICAgIFVubGlua2VkSGFuZGxlckluZm8qIGhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpB
bnlIYW5kbGVyKTsKKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVJ
bmRleChCeXRlY29kZUluZGV4LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFu
eUhhbmRsZXIpOwogICAgIFVubGlua2VkSGFuZGxlckluZm8qIGhhbmRsZXJGb3JJbmRleCh1bnNp
Z25lZCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKIAog
ICAgIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzQnVpbHRpbkZ1
bmN0aW9uOyB9CkBAIC0yNzksOSArMjc5LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNSYXJl
RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEuZ2V0KCk7IH0KIAotICAgIGludCBsaW5l
TnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIGlu
dCBsaW5lTnVtYmVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKIAotICAgIHZvaWQg
ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQs
IGludCYgZGl2b3QsCisgICAgdm9pZCBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4KEJ5
dGVjb2RlSW5kZXgsIGludCYgZGl2b3QsCiAgICAgICAgIGludCYgc3RhcnRPZmZzZXQsIGludCYg
ZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3Q7CiAKICAg
ICBib29sIHR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkJiBzdGFydERpdm90LCB1bnNpZ25lZCYgZW5kRGl2
b3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJv
ZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCmlu
ZGV4IDA1YjA5YmU3NTc0MmI1ZTIzOTcxYWY3YTllZTRkMTNjN2Y5YjdhNTAuLmJiYjhhNGIyNDUz
MTA0MDNhN2ZjZWYyYjIxZTExODMzZWZiOTAzNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKQEAgLTE2MSwxOSArMTYxLDE5IEBAIHN0cnVjdCBW
YWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czww
PiB7CiAvLyBUaGlzIGlzIGEgbWluaSB2YWx1ZSBwcm9maWxlIHRvIGNhdGNoIHBhdGhvbG9naWVz
LiBJdCBpcyBhIGNvdW50ZXIgdGhhdCBnZXRzCiAvLyBpbmNyZW1lbnRlZCB3aGVuIHdlIHRha2Ug
dGhlIHNsb3cgcGF0aCBvbiBhbnkgaW5zdHJ1Y3Rpb24uCiBzdHJ1Y3QgUmFyZUNhc2VQcm9maWxl
IHsKLSAgICBSYXJlQ2FzZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICA6IG1f
Ynl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCisgICAgUmFyZUNhc2VQcm9maWxlKEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCkKICAgICAgICAgLCBtX2NvdW50ZXIoMCkKICAgICB7CiAgICAgfQogICAgIAotICAg
IGludCBtX2J5dGVjb2RlT2Zmc2V0OworICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4
OwogICAgIHVpbnQzMl90IG1fY291bnRlcjsKIH07CiAKLWlubGluZSBpbnQgZ2V0UmFyZUNhc2VQ
cm9maWxlQnl0ZWNvZGVPZmZzZXQoUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGUpCitp
bmxpbmUgQnl0ZWNvZGVJbmRleCBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZUluZGV4KFJhcmVD
YXNlUHJvZmlsZSogcmFyZUNhc2VQcm9maWxlKQogewotICAgIHJldHVybiByYXJlQ2FzZVByb2Zp
bGUtPm1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgcmV0dXJuIHJhcmVDYXNlUHJvZmlsZS0+bV9ieXRl
Y29kZUluZGV4OwogfQogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kT3BlcmFuZCA6IHB1YmxpYyBW
YWx1ZVByb2ZpbGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCBlNzkxNGFhNDdjNWVlOWE5ODNkNzU5
ZmRkNmZhYWI2Y2NhMGIzZjIwLi4xNTRiZDNjZmJjYzI5YzJjZTc0OGJlZGY3N2U2MWFjNTlmYmE3
M2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtNTA0OSw3ICs1MDQ5LDcgQEAgdm9pZCBGb3JJbkNv
bnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29k
ZUJsb2NrKiBjb2QKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKTsKIAogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3BfZW50ZXIpOwotICAgICAg
ICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgb3Bjb2RlSUQsIGluc3Ry
dWN0aW9uLnB0cigpLCBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgIGNv
bXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIG9wY29kZUlELCBpbnN0cnVjdGlv
bi5wdHIoKSwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewogICAgICAgICAgICAgaWYg
KGxvY2FsKCktPnZpcnR1YWxSZWdpc3RlcigpID09IG9wZXJhbmQpCiAgICAgICAgICAgICAgICAg
aW52YWxpZGF0ZSgpOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCmluZGV4IDAwYzc1NTQ4NjMwY2RkNWJi
MGFhZmFmMGUyNzQ5OGU2OTQwODA2N2EuLjAzMDZmMWZlYTE1NjJhYjEzODM1OWY4ZmM3NWRjYWYz
YTAzOWQ0YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlckNhbGxGcmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyQ2FsbEZyYW1lLmNwcApAQCAtMjk5LDkgKzI5OSw5IEBAIFRleHRQb3NpdGlvbiBEZWJ1
Z2dlckNhbGxGcmFtZTo6Y3VycmVudFBvc2l0aW9uKFZNJiB2bSkKIAogICAgIGlmIChpc1RhaWxE
ZWxldGVkKCkpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX3NoYWRvd0NoaWNr
ZW5GcmFtZS5jb2RlQmxvY2s7Ci0gICAgICAgIGlmIChPcHRpb25hbDx1bnNpZ25lZD4gYnl0ZWNv
ZGVPZmZzZXQgPSBjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0RnJvbUNhbGxTaXRlSW5kZXgobV9z
aGFkb3dDaGlja2VuRnJhbWUuY2FsbFNpdGVJbmRleCkpIHsKLSAgICAgICAgICAgIHJldHVybiBU
ZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvZGVCbG9jay0+bGlu
ZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KCpieXRlY29kZU9mZnNldCkpLAotICAgICAgICAgICAg
ICAgIE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChjb2RlQmxvY2stPmNvbHVtbk51bWJl
ckZvckJ5dGVjb2RlT2Zmc2V0KCpieXRlY29kZU9mZnNldCkpKTsKKyAgICAgICAgaWYgKE9wdGlv
bmFsPEJ5dGVjb2RlSW5kZXg+IGJ5dGVjb2RlSW5kZXggPSBjb2RlQmxvY2stPmJ5dGVjb2RlSW5k
ZXhGcm9tQ2FsbFNpdGVJbmRleChtX3NoYWRvd0NoaWNrZW5GcmFtZS5jYWxsU2l0ZUluZGV4KSkg
eworICAgICAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25l
QmFzZWRJbnQoY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVJbmRleCgqYnl0ZWNvZGVJ
bmRleCkpLAorICAgICAgICAgICAgICAgIE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChj
b2RlQmxvY2stPmNvbHVtbk51bWJlckZvckJ5dGVjb2RlSW5kZXgoKmJ5dGVjb2RlSW5kZXgpKSk7
CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suY3BwCmluZGV4IDFkZGM2MmUzMzU3M2FkYzIzZTRiZWZlZjU0OGIyYWNhM2NlMjAxYTgu
LjhjYjA5NjI3NmYxMzQ5OWRiMWQ2NmMzMjVjNDZkZDUzOWI4ZDQ4MmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcApAQCAtMzIsOCArMzIsNyBAQAogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLUJhc2ljQmxvY2s6OkJhc2ljQmxvY2so
Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNp
Z25lZCBudW1Mb2NhbHMsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQorQmFzaWNCbG9jazo6QmFzaWNC
bG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywg
dW5zaWduZWQgbnVtTG9jYWxzLCBmbG9hdCBleGVjdXRpb25Db3VudCkKICAgICA6IGJ5dGVjb2Rl
QmVnaW4oYnl0ZWNvZGVCZWdpbikKICAgICAsIGluZGV4KE5vQmxvY2spCiAgICAgLCBjZmFTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQoU3RydWN0dXJlc0FyZVdhdGNoZWQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCmluZGV4IDRjNThjOWM1ZTc4NGY4NWQ5ODI4
MTU5ZmJmMGJkZDQ3MTNjYzlhYmEuLjI2YTMwNjcyYjI1ZTliODYwZmNkYTA5MTQ0ZDY2MzExMzA2
NjRhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCkBAIC00
Niw3ICs0Niw3IEBAIHR5cGVkZWYgVmVjdG9yPE5vZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBz
dHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxv
Y2soCi0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50
cywgdW5zaWduZWQgbnVtTG9jYWxzLAorICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVn
aW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLAogICAgICAgICBm
bG9hdCBleGVjdXRpb25Db3VudCk7CiAgICAgfkJhc2ljQmxvY2soKTsKICAgICAKQEAgLTE3OCw3
ICsxNzgsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewog
ICAgIAogICAgIC8vIFRoaXMgdmFsdWUgaXMgdXNlZCBpbnRlcm5hbGx5IGZvciBibG9jayBsaW5r
aW5nIGFuZCBPU1IgZW50cnkuIEl0IGlzIG1vc3RseSBtZWFuaW5nbGVzcwogICAgIC8vIGZvciBv
dGhlciBwdXJwb3NlcyBkdWUgdG8gaW5saW5pbmcuCi0gICAgdW5zaWduZWQgYnl0ZWNvZGVCZWdp
bjsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW47CiAgICAgCiAgICAgQmxvY2tJbmRl
eCBpbmRleDsKIApAQCAtMjU5LDE0ICsyNTksMTQgQEAgcHJpdmF0ZToKIAogdHlwZWRlZiBWZWN0
b3I8QmFzaWNCbG9jayo+IEJsb2NrTGlzdDsKICAgICAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQg
Z2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKEJhc2ljQmxvY2sqKiBiYXNpY0Jsb2NrKQorc3RhdGlj
IGlubGluZSBCeXRlY29kZUluZGV4IGdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayhCYXNpY0Jsb2Nr
KiogYmFzaWNCbG9jaykKIHsKICAgICByZXR1cm4gKCpiYXNpY0Jsb2NrKS0+Ynl0ZWNvZGVCZWdp
bjsKIH0KIAotc3RhdGljIGlubGluZSBCYXNpY0Jsb2NrKiBibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0
KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIGxpbmtpbmdUYXJnZXRzLCB1bnNpZ25lZCBieXRlY29kZUJl
Z2luKQorc3RhdGljIGlubGluZSBCYXNpY0Jsb2NrKiBibG9ja0ZvckJ5dGVjb2RlSW5kZXgoVmVj
dG9yPEJhc2ljQmxvY2sqPiYgbGlua2luZ1RhcmdldHMsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVC
ZWdpbikKIHsKLSAgICByZXR1cm4gKmJpbmFyeVNlYXJjaDxCYXNpY0Jsb2NrKiwgdW5zaWduZWQ+
KGxpbmtpbmdUYXJnZXRzLCBsaW5raW5nVGFyZ2V0cy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIGdl
dEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayk7CisgICAgcmV0dXJuICpiaW5hcnlTZWFyY2g8QmFzaWNC
bG9jayosIEJ5dGVjb2RlSW5kZXg+KGxpbmtpbmdUYXJnZXRzLCBsaW5raW5nVGFyZ2V0cy5zaXpl
KCksIGJ5dGVjb2RlQmVnaW4sIGdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayk7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja0luc2VydGlvblNldC5jcHAKaW5kZXggZmJjMmRiNDY1OWMzOWIxNGRiNGEwZTg0NDEz
YTk1NTQ3YTVhZGFjZC4uNzUwOGUyMTlkYzdjNTgzZGI5ZWE4ZmNlNjQ2ODU4OTk5ZTA0NjBmOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHAKQEAgLTUxLDExICs1MSw3IEBAIHZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChz
aXplX3QgaW5kZXgsIFJlZjxCYXNpY0Jsb2NrPiYmIGJsb2NrKQogCiBCYXNpY0Jsb2NrKiBCbG9j
a0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgZmxvYXQgZXhlY3V0aW9uQ291bnQp
CiB7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2Nr
KAotICAgICAgICBVSU5UX01BWCwKLSAgICAgICAgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgIG1fZ3JhcGguYmxvY2soMCktPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpLAotICAgICAgICBleGVjdXRpb25Db3VudCkp
OworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhC
eXRlY29kZUluZGV4KCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJP
ZkFyZ3VtZW50cygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKSwgZXhlY3V0aW9uQ291bnQpKTsKICAgICBibG9jay0+aXNSZWFjaGFibGUgPSB0cnVl
OwogICAgIGF1dG8qIHJlc3VsdCA9IGJsb2NrLnB0cigpOwogICAgIGluc2VydChpbmRleCwgV1RG
TW92ZShibG9jaykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAppbmRleCA2NjEwMTNhODc3NzQ0Y2NlYzhiYzMzNjE3ZmIwYjlhMDk3OTUyNjA1
Li4yMjM0NDVjMmQ5NDU4MDdiZmNiODE5YWVmMjUxN2Y4NTBlMWUzNDRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMTQ4LDEwICsx
NDgsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBUaGlzIGlzIHVzZWQgbW9zdCBub3RhYmx5IHdoZW4g
ZG9pbmcgcG9seXZhcmlhbnQgaW5saW5pbmcgKGl0IHJlcXVpcmVzIGEgZmFpciBiaXQgb2YgY29u
dHJvbC1mbG93IHdpdGggbm8gYnl0ZWNvZGUgYW5hbG9nKS4KICAgICAvLyBJdCBpcyBhbHNvIHVz
ZWQgd2hlbiBkb2luZyBhbiBlYXJseSByZXR1cm4gZnJvbSBhbiBpbmxpbmVkIGNhbGxlZTogaXQg
aXMgZWFzaWVyIHRvIGZpeCB0aGUgYnl0ZWNvZGUgaW5kZXggbGF0ZXIgb24gaWYgbmVlZGVkCiAg
ICAgLy8gdGhhbiB0byBtb3ZlIHRoZSByaWdodCBpbmRleCBhbGwgdGhlIHdheSB0byB0aGUgdHJl
YXRtZW50IG9mIG9wX3JldC4KLSAgICBCYXNpY0Jsb2NrKiBhbGxvY2F0ZVRhcmdldGFibGVCbG9j
ayh1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICBCYXNpY0Jsb2NrKiBhbGxvY2F0ZVRhcmdl
dGFibGVCbG9jayhCeXRlY29kZUluZGV4KTsKICAgICBCYXNpY0Jsb2NrKiBhbGxvY2F0ZVVudGFy
Z2V0YWJsZUJsb2NrKCk7CiAgICAgLy8gQW4gdW50YXJnZXRhYmxlIGJsb2NrIGNhbiBiZSBnaXZl
biBhIGJ5dGVjb2RlSW5kZXggdG8gYmUgbGF0ZXIgbWFuYWdlZCBieSBsaW5rQmxvY2ssIGJ1dCBv
bmx5IG9uY2UsIGFuZCBpdCBjYW4gbmV2ZXIgZ28gaW4gdGhlIG90aGVyIGRpcmVjdGlvbgotICAg
IHZvaWQgbWFrZUJsb2NrVGFyZ2V0YWJsZShCYXNpY0Jsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCk7CisgICAgdm9pZCBtYWtlQmxvY2tUYXJnZXRhYmxlKEJhc2ljQmxvY2sqLCBCeXRlY29k
ZUluZGV4KTsKICAgICB2b2lkIGFkZEp1bXBUbyhCYXNpY0Jsb2NrKik7CiAgICAgdm9pZCBhZGRK
dW1wVG8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAgLy8gSGFuZGxlIGNhbGxzLiBUaGlz
IHJlc29sdmVzIGlzc3VlcyBzdXJyb3VuZGluZyBpbmxpbmluZyBhbmQgaW50cmluc2ljcy4KQEAg
LTE3NCw4ICsxNzQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlVmFyYXJnc0lubGluaW5n
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBjb25zdCBDYWxs
TGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1
bWVudCwgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVu
dHNPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kKTsKICAgICB1
bnNpZ25lZCBnZXRJbmxpbmluZ0JhbGFuY2UoY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kKTsKICAgICBlbnVtIGNsYXNzIENhbGxPcHRpbWl6YXRpb25SZXN1bHQg
eyBPcHRpbWl6ZWRUb0p1bXAsIElubGluZWQsIERpZE5vdGhpbmcgfTsKLSAgICBDYWxsT3B0aW1p
emF0aW9uUmVzdWx0IGhhbmRsZUNhbGxWYXJpYW50KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYWxsVmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0
dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgQmFzaWNCbG9jayogY29u
dGludWF0aW9uQmxvY2ssIGJvb2wgbmVlZHNUb0NoZWNrQ2FsbGVlKTsKLSAgICBDYWxsT3B0aW1p
emF0aW9uUmVzdWx0IGhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNl
dCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxG
cmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CisgICAgQ2FsbE9wdGltaXph
dGlvblJlc3VsdCBoYW5kbGVDYWxsVmFyaWFudChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVh
bFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBC
eXRlY29kZUluZGV4IG5leHRJbmRleCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlLCBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb25CbG9jaywgYm9vbCBuZWVkc1RvQ2hlY2tDYWxsZWUpOworICAgIENhbGxPcHRp
bWl6YXRpb25SZXN1bHQgaGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIEJ5dGVjb2RlSW5kZXggbmV4dEluZGV4LCBOb2RlVHlwZSBjYWxsT3AsIElubGlu
ZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICB2b2lkIGlubGluZUNhbGwoTm9kZSogY2Fs
bFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhbGxWYXJpYW50LCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgSW5saW5lQ2FsbEZy
YW1lOjpLaW5kLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb25CbG9jaywgY29uc3QgQ2hlY2tzRnVu
Y3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICAvLyBIYW5kbGUgaW50cmluc2ljIGZ1bmN0aW9ucy4g
UmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEg
Y2FsbC4KQEAgLTU2Nyw3ICs1NjcsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgb3JpZ2lu
LndhbGtVcElubGluZVN0YWNrKAogICAgICAgICAgICAgWyZdIChDb2RlT3JpZ2luIG9yaWdpbikg
ewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBvcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpOworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9
IG9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBvcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAg
ICAgICAgZmx1c2hJbXBsKGlubGluZUNhbGxGcmFtZSwgYWRkRmx1c2hEaXJlY3QpOwogCkBAIC02
NDIsMTEgKzY0MiwxMSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgZmx1c2hJZlRlcm1pbmFs
KFN3aXRjaERhdGEmIGRhdGEpCiAgICAgewotICAgICAgICBpZiAoZGF0YS5mYWxsVGhyb3VnaC5i
eXRlY29kZUluZGV4KCkgPiBtX2N1cnJlbnRJbmRleCkKKyAgICAgICAgaWYgKGRhdGEuZmFsbFRo
cm91Z2guYnl0ZWNvZGVJbmRleCgpID4gbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNh
c2VzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKGRhdGEuY2FzZXNbaV0udGFyZ2V0
LmJ5dGVjb2RlSW5kZXgoKSA+IG1fY3VycmVudEluZGV4KQorICAgICAgICAgICAgaWYgKGRhdGEu
Y2FzZXNbaV0udGFyZ2V0LmJ5dGVjb2RlSW5kZXgoKSA+IG1fY3VycmVudEluZGV4Lm9mZnNldCgp
KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTcwOSw3
ICs3MDksNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgYnJh
bmNoZXMgb3JpZ2luYXRpbmcgZnJvbSBieXRlY29kZSBhbHdheXMgaGF2ZSBhIGZhbGwtdGhyb3Vn
aC4gV2UKICAgICAgICAgLy8gdXNlIHRoaXMgYXNzdW1wdGlvbiB0byBhdm9pZCBjaGVja2luZyBm
b3IgdGhlIGNyZWF0aW9uIG9mIHRlcm1pbmFsIGJsb2Nrcy4KLSAgICAgICAgQVNTRVJUKCh0YWtl
biA+IG1fY3VycmVudEluZGV4KSB8fCAobm90VGFrZW4gPiBtX2N1cnJlbnRJbmRleCkpOworICAg
ICAgICBBU1NFUlQoKHRha2VuID4gbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkpIHx8IChub3RUYWtl
biA+IG1fY3VycmVudEluZGV4Lm9mZnNldCgpKSk7CiAgICAgICAgIEJyYW5jaERhdGEqIGRhdGEg
PSBtX2dyYXBoLm1fYnJhbmNoRGF0YS5hZGQoKTsKICAgICAgICAgKmRhdGEgPSBCcmFuY2hEYXRh
Ojp3aXRoQnl0ZWNvZGVJbmRpY2VzKHRha2VuLCBub3RUYWtlbik7CiAgICAgICAgIHJldHVybiBk
YXRhOwpAQCAtODM0LDE0ICs4MzQsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG9iamVj
dE5vZGU7CiAgICAgfQogICAgIAotICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRo
b3V0T1NSRXhpdCh1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgIFNwZWN1bGF0ZWRUeXBlIGdl
dFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAg
ICAgewogICAgICAgICBhdXRvIGdldFZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gcm9tRm9yQ29kZUJs
b2NrQW5kQnl0ZWNvZGVPZmZzZXQgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBD
b2RlT3JpZ2luJiBjb2RlT3JpZ2luKQogICAgICAgICB7CiAgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uOwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIHBy
ZWRpY3Rpb24gPSBjb2RlQmxvY2stPnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9m
ZnNldChsb2NrZXIsIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgICAg
ICBwcmVkaWN0aW9uID0gY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNv
ZGVJbmRleChsb2NrZXIsIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGF1dG8qIGZ1enplckFnZW50ID0gbV92bS0+ZnV6emVyQWdlbnQoKTsK
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShmdXp6ZXJBZ2VudCkpCkBAIC04NjAsNyArODYwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgLy8gY2hhaW4gYW5kIHVzZSBpdHMgcHJlZGljdGlvbi4gSWYg
d2Ugb25seSBoYXZlCiAgICAgICAgIC8vIGlubGluZWQgdGFpbCBjYWxsIGZyYW1lcywgd2UgdXNl
IFNwZWNGdWxsVG9wCiAgICAgICAgIC8vIHRvIGF2b2lkIGEgc3B1cmlvdXMgT1NSIGV4aXQuCi0g
ICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBhdXRvIGluc3Ry
dWN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQg
PSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKIAogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7
CkBAIC04OTQsNyArODk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIFNwZWNOb25lOwog
ICAgIH0KIAotICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb24odW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkKKyAgICBTcGVjdWxhdGVkVHlwZSBnZXRQcmVkaWN0aW9uKEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCkKICAgICB7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24g
PSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQoYnl0ZWNvZGVJbmRleCk7CiAKQEAgLTkyMCw3
ICs5MjAsNyBAQCBwcml2YXRlOgogICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGUoQXJyYXk6OkFj
dGlvbiBhY3Rpb24pCiAgICAgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jazsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gY29kZUJsb2NrLT5nZXRBcnJheVByb2ZpbGUoY29kZUJsb2NrLT5ieXRlY29kZU9mZnNl
dChtX2N1cnJlbnRJbnN0cnVjdGlvbikpOworICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSBjb2RlQmxvY2stPmdldEFycmF5UHJvZmlsZShjb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgobV9j
dXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAgICAgcmV0dXJuIGdldEFycmF5TW9kZSgqcHJvZmls
ZSwgYWN0aW9uKTsKICAgICB9CiAKQEAgLTk0Myw3ICs5NDMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuIG5vZGU7CiAKICAgICAgICAgewotICAgICAgICAgICAgQXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmFyaXRo
UHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KTsKKyAgICAgICAgICAgIEFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4KTsKICAgICAg
ICAgICAgIGlmIChhcml0aFByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEFyaXRoQWRkOgpAQCAtOTU2LDcgKzk1Niw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUtPmRpZE9i
c2VydmVCaWdJbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3Mo
Tm9kZU1heUhhdmVCaWdJbnRSZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVNdWw6CiAgICAgICAg
ICAgICAgICAgY2FzZSBBcml0aE11bDogewogICAgICAgICAgICAgICAgICAgICBpZiAoYXJpdGhQ
cm9maWxlLT5kaWRPYnNlcnZlSW50NTJPdmVyZmxvdygpKQpAQCAtOTg3LDcgKzk4Nyw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlI
YXZlQmlnSW50UmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTAyOCwxMyAr
MTAyOCwxMyBAQCBwcml2YXRlOgogICAgICAgICAvLyBjYXJlIGFib3V0IHdoZW4gdGhlIG91dGNv
bWUgb2YgdGhlIGRpdmlzaW9uIGlzIG5vdCBhbiBpbnRlZ2VyLCB3aGljaAogICAgICAgICAvLyBp
cyB3aGF0IHRoZSBzcGVjaWFsIGZhc3QgY2FzZSBjb3VudGVyIHRlbGxzIHVzLgogICAgICAgICAK
LSAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFr
ZVNwZWNpYWxGYXN0Q2FzZShtX2N1cnJlbnRJbmRleCkpCisgICAgICAgIGlmICghbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTcGVjaWFsQXJpdGhGYXN0Q2FzZSht
X2N1cnJlbnRJbmRleCkpCiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgCiAgICAg
ICAgIC8vIEZJWE1FOiBJdCBtaWdodCBiZSBwb3NzaWJsZSB0byBtYWtlIHRoaXMgbW9yZSBncmFu
dWxhci4KICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTWF5T3ZlcmZsb3dJbnQzMkluQmFz
ZWxpbmUgfCBOb2RlTWF5TmVnWmVyb0luQmFzZWxpbmUpOwogICAgICAgICAKLSAgICAgICAgQXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KTsKKyAgICAg
ICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgpOwog
ICAgICAgICBpZiAoYXJpdGhQcm9maWxlLT5kaWRPYnNlcnZlQmlnSW50KCkpCiAgICAgICAgICAg
ICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlIYXZlQmlnSW50UmVzdWx0KTsKIApAQCAtMTA2MSw3
ICsxMDYxLDcgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgY3VycmVudCBibG9jayBiZWluZyBnZW5l
cmF0ZWQuCiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7CiAgICAgLy8gVGhlIGJ5dGVj
b2RlIGluZGV4IG9mIHRoZSBjdXJyZW50IGluc3RydWN0aW9uIGJlaW5nIGdlbmVyYXRlZC4KLSAg
ICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRleDsKKyAgICBCeXRlY29kZUluZGV4IG1fY3VycmVudElu
ZGV4OwogICAgIC8vIFRoZSBzZW1hbnRpYyBvcmlnaW4gb2YgdGhlIGN1cnJlbnQgbm9kZSBpZiBk
aWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBJbmRleC4KICAgICBDb2RlT3JpZ2luIG1fY3VycmVu
dFNlbWFudGljT3JpZ2luOwogICAgIC8vIFRydWUgaWYgaXQncyBPSyB0byBPU1IgZXhpdCByaWdo
dCBub3cuCkBAIC0xMTkxLDE0ICsxMTkxLDE0IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc0Fu
eUZvcmNlT1NSRXhpdHMgeyBmYWxzZSB9OwogfTsKIAotQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJz
ZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitCYXNp
Y0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KQogewotICAgIEFTU0VSVChieXRlY29kZUluZGV4ICE9IFVJTlRf
TUFYKTsKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCk7CiAgICAgUmVmPEJhc2ljQmxvY2s+IGJs
b2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1l
bnRzLCBtX251bUxvY2FscywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2su
cHRyKCk7CiAgICAgLy8gbV9ibG9ja0xpbmtpbmdUYXJnZXRzIG11c3QgYWx3YXlzIGJlIHNvcnRl
ZCBpbiBpbmNyZWFzaW5nIG9yZGVyIG9mIGJ5dGVjb2RlQmVnaW4KICAgICBpZiAobV9pbmxpbmVT
dGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLnNpemUoKSkKLSAgICAgICAgQVNTRVJUKG1f
aW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCktPmJ5dGVjb2RlQmVn
aW4gPCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1f
YmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCktPmJ5dGVjb2RlQmVnaW4ub2Zmc2V0KCkgPCBieXRl
Y29kZUluZGV4Lm9mZnNldCgpKTsKICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2lu
Z1RhcmdldHMuYXBwZW5kKGJsb2NrUHRyKTsKICAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKFdURk1v
dmUoYmxvY2spKTsKICAgICByZXR1cm4gYmxvY2tQdHI7CkBAIC0xMjA2LDE5ICsxMjA2LDE5IEBA
IEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayh1bnNp
Z25lZCBieXRlY29kZUluZGV4KQogCiBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2Nh
dGVVbnRhcmdldGFibGVCbG9jaygpCiB7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRv
cHRSZWYoKm5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFYLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2Nh
bHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2lj
QmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsK
ICAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIG1fZ3JhcGguYXBw
ZW5kQmxvY2soV1RGTW92ZShibG9jaykpOwogICAgIHJldHVybiBibG9ja1B0cjsKIH0KIAotdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6bWFrZUJsb2NrVGFyZ2V0YWJsZShCYXNpY0Jsb2NrKiBibG9jaywg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6Om1ha2VCbG9ja1Rh
cmdldGFibGUoQmFzaWNCbG9jayogYmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVChibG9jay0+Ynl0ZWNvZGVCZWdpbiA9PSBVSU5UX01BWCk7
CisgICAgUkVMRUFTRV9BU1NFUlQoIWJsb2NrLT5ieXRlY29kZUJlZ2luKTsKICAgICBibG9jay0+
Ynl0ZWNvZGVCZWdpbiA9IGJ5dGVjb2RlSW5kZXg7CiAgICAgLy8gbV9ibG9ja0xpbmtpbmdUYXJn
ZXRzIG11c3QgYWx3YXlzIGJlIHNvcnRlZCBpbiBpbmNyZWFzaW5nIG9yZGVyIG9mIGJ5dGVjb2Rl
QmVnaW4KICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLnNp
emUoKSkKLSAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFy
Z2V0cy5sYXN0KCktPmJ5dGVjb2RlQmVnaW4gPCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgQVNT
RVJUKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCktPmJ5dGVj
b2RlQmVnaW4ub2Zmc2V0KCkgPCBieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBwZW5kKGJsb2NrKTsKIH0KIApAQCAt
MTI3OCw3ICsxMjc4LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OlRlcm1pbmFsaXR5IEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDYWxsKAogCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAg
IGF1dG8gb3B0aW1pemF0aW9uUmVzdWx0ID0gaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVz
dWx0LCBjYWxsTGlua1N0YXR1cywgcmVnaXN0ZXJPZmZzZXQsIHRoaXNBcmd1bWVudCwKLSAgICAg
ICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBtX2N1cnJlbnRJbmRleCArIGluc3Ry
dWN0aW9uU2l6ZSwgb3AsIGtpbmQsIHByZWRpY3Rpb24pOworICAgICAgICAgICAgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkg
KyBpbnN0cnVjdGlvblNpemUpLCBvcCwga2luZCwgcHJlZGljdGlvbik7CiAgICAgICAgIGlmIChv
cHRpbWl6YXRpb25SZXN1bHQgPT0gQ2FsbE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkVG9K
dW1wKQogICAgICAgICAgICAgcmV0dXJuIFRlcm1pbmFsOwogICAgICAgICBpZiAob3B0aW1pemF0
aW9uUmVzdWx0ID09IENhbGxPcHRpbWl6YXRpb25SZXN1bHQ6OklubGluZWQpIHsKQEAgLTE0NTcs
MTcgKzE0NTcsMTcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENh
bGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAgICAgICAgIHNldERp
cmVjdChzdGFja0VudHJ5LT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkp
LCB1bmRlZmluZWQsIE5vcm1hbFNldCk7CiAKICAgICAgICAgLy8gV2Ugd2FudCB0byBlbWl0IHRo
ZSBTZXRMb2NhbHMgd2l0aCBhbiBleGl0IG9yaWdpbiB0aGF0IHBvaW50cyB0byB0aGUgcGxhY2Ug
d2UgYXJlIGp1bXBpbmcgdG8uCi0gICAgICAgIHVuc2lnbmVkIG9sZEluZGV4ID0gbV9jdXJyZW50
SW5kZXg7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRleDsK
ICAgICAgICAgYXV0byBvbGRTdGFja1RvcCA9IG1faW5saW5lU3RhY2tUb3A7CiAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AgPSBzdGFja0VudHJ5OwotICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG9w
Y29kZUxlbmd0aHNbb3BfZW50ZXJdOworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgob3Bjb2RlTGVuZ3Roc1tvcF9lbnRlcl0pOwogICAgICAgICBtX2V4aXRPSyA9IHRydWU7
CiAgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CiAgICAgICAgIG1fY3VycmVudEluZGV4
ID0gb2xkSW5kZXg7CiAgICAgICAgIG1faW5saW5lU3RhY2tUb3AgPSBvbGRTdGFja1RvcDsKICAg
ICAgICAgbV9leGl0T0sgPSBmYWxzZTsKIAotICAgICAgICBCYXNpY0Jsb2NrKiogZW50cnlCbG9j
a1B0ciA9IHRyeUJpbmFyeVNlYXJjaDxCYXNpY0Jsb2NrKiwgdW5zaWduZWQ+KHN0YWNrRW50cnkt
Pm1fYmxvY2tMaW5raW5nVGFyZ2V0cywgc3RhY2tFbnRyeS0+bV9ibG9ja0xpbmtpbmdUYXJnZXRz
LnNpemUoKSwgb3Bjb2RlTGVuZ3Roc1tvcF9lbnRlcl0sIGdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9j
ayk7CisgICAgICAgIEJhc2ljQmxvY2sqKiBlbnRyeUJsb2NrUHRyID0gdHJ5QmluYXJ5U2VhcmNo
PEJhc2ljQmxvY2sqLCBCeXRlY29kZUluZGV4PihzdGFja0VudHJ5LT5tX2Jsb2NrTGlua2luZ1Rh
cmdldHMsIHN0YWNrRW50cnktPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5zaXplKCksIEJ5dGVjb2Rl
SW5kZXgob3Bjb2RlTGVuZ3Roc1tvcF9lbnRlcl0pLCBnZXRCeXRlY29kZUJlZ2luRm9yQmxvY2sp
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeUJsb2NrUHRyKTsKICAgICAgICAgYWRkSnVt
cFRvKCplbnRyeUJsb2NrUHRyKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjI1LDggKzE2
MjUsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXRO
b2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAgICAoVmlydHVhbFJlZ2lzdGVy
KWlubGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCwg
Y29udGludWF0aW9uQmxvY2spOwogCiAgICAgLy8gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIGlu
bGluaW5nIHJlYWxseSBoYXBwZW5zLgotICAgIHVuc2lnbmVkIG9sZEluZGV4ID0gbV9jdXJyZW50
SW5kZXg7Ci0gICAgbV9jdXJyZW50SW5kZXggPSAwOworICAgIEJ5dGVjb2RlSW5kZXggb2xkSW5k
ZXggPSBtX2N1cnJlbnRJbmRleDsKKyAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
MCk7CiAKICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0
dGVyQ2FsbDoKQEAgLTE3NjEsNyArMTc2MSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGlu
ZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAg
ICAgbV9jdXJyZW50SW5zdHJ1Y3Rpb24gPSBzYXZlZEN1cnJlbnRJbnN0cnVjdGlvbjsKIH0KIAot
Qnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUNhbGxWYXJpYW50KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0LCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lz
dGVyIHRoaXNBcmd1bWVudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25l
ZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgQmFzaWNCbG9jayogY29udGlu
dWF0aW9uQmxvY2ssIGJvb2wgbmVlZHNUb0NoZWNrQ2FsbGVlKQorQnl0ZUNvZGVQYXJzZXI6OkNh
bGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGxWYXJpYW50KE5v
ZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYWxsVmFyaWFudCBj
YWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwg
aW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBCeXRlY29kZUluZGV4IG5leHRJbmRleCwg
SW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVu
c2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbkJsb2NrLCBi
b29sIG5lZWRzVG9DaGVja0NhbGxlZSkKIHsKICAgICBWRVJCT1NFX0xPRygiICAgIENvbnNpZGVy
aW5nIGNhbGxlZSAiLCBjYWxsZWUsICJcbiIpOwogCkBAIC0xNzg5LDcgKzE3ODksNyBAQCBCeXRl
Q29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
Q2FsbFZhcmlhbnQoTm9kZSogYwogICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rl
ck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgICAgICBpbmxpbmluZ0Jh
bGFuY2UtLTsKICAgICAgICAgaWYgKGNvbnRpbnVhdGlvbkJsb2NrKSB7Ci0gICAgICAgICAgICBt
X2N1cnJlbnRJbmRleCA9IG5leHRPZmZzZXQ7CisgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9
IG5leHRJbmRleDsKICAgICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICAgICAgICAgIHBy
b2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CiAgICAgICAgICAgICBhZGRKdW1wVG8oY29udGludWF0aW9u
QmxvY2spOwpAQCAtMTk3Miw3ICsxOTcyLDcgQEAgQnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6
YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgIE5vZGUqIGNh
bGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBjb25zdCBDYWxsTGlua1N0YXR1
cyYgY2FsbExpbmtTdGF0dXMsCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0
ZXIgdGhpc0FyZ3VtZW50LAogICAgIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKLSAg
ICB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6
S2luZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIEJ5dGVjb2RlSW5kZXgg
bmV4dEluZGV4LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogewogICAgIFZFUkJPU0VfTE9HKCJIYW5kbGluZyBp
bmxpbmluZy4uLlxuU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgIApA
QCAtMTk4NSw3ICsxOTg1LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1
bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgIGlmICghY2FsbExpbmtTdGF0
dXMuY291bGRUYWtlU2xvd1BhdGgoKSAmJiBjYWxsTGlua1N0YXR1cy5zaXplKCkgPT0gMSkgewog
ICAgICAgICByZXR1cm4gaGFuZGxlQ2FsbFZhcmlhbnQoCiAgICAgICAgICAgICBjYWxsVGFyZ2V0
Tm9kZSwgcmVzdWx0LCBjYWxsTGlua1N0YXR1c1swXSwgcmVnaXN0ZXJPZmZzZXQsIHRoaXNBcmd1
bWVudCwKLSAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0
LCBraW5kLCBwcmVkaWN0aW9uLCBpbmxpbmluZ0JhbGFuY2UsIG51bGxwdHIsIHRydWUpOworICAg
ICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRJbmRleCwga2luZCwgcHJl
ZGljdGlvbiwgaW5saW5pbmdCYWxhbmNlLCBudWxscHRyLCB0cnVlKTsKICAgICB9CiAKICAgICAv
LyBXZSBuZWVkIHRvIGNyZWF0ZSBzb21lIGtpbmQgb2Ygc3dpdGNoIG92ZXIgY2FsbGVlLiBGb3Ig
bm93IHdlIG9ubHkgZG8gdGhpcyBpZiB3ZSBiZWxpZXZlIHRoYXQKQEAgLTIwNjEsOSArMjA2MSw5
IEBAIEJ5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZygKICAgICAKICAgICBWRVJCT1NFX0xPRygiQWJvdXQgdG8gbG9vcCBv
dmVyIGZ1bmN0aW9ucyBhdCAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiLlxuIik7CiAKLSAgICB1
bnNpZ25lZCBvbGRPZmZzZXQgPSBtX2N1cnJlbnRJbmRleDsKKyAgICBCeXRlY29kZUluZGV4IG9s
ZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNh
bGxMaW5rU3RhdHVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIG1fY3VycmVudEluZGV4ID0gb2xk
T2Zmc2V0OworICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZEluZGV4OwogICAgICAgICBCYXNp
Y0Jsb2NrKiBjYWxsZWVFbnRyeUJsb2NrID0gYWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpOwog
ICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNhbGxlZUVudHJ5QmxvY2s7CiAgICAgICAgIHByZXBh
cmVUb1BhcnNlQmxvY2soKTsKQEAgLTIwNzUsNyArMjA3NSw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpD
YWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAg
ICAgICAgCiAgICAgICAgIGF1dG8gaW5saW5pbmdSZXN1bHQgPSBoYW5kbGVDYWxsVmFyaWFudCgK
ICAgICAgICAgICAgIG15Q2FsbFRhcmdldE5vZGUsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXNbaV0s
IHJlZ2lzdGVyT2Zmc2V0LAotICAgICAgICAgICAgdGhpc0FyZ3VtZW50LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgcHJlZGljdGlvbiwKKyAgICAgICAgICAg
IHRoaXNBcmd1bWVudCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRJbmRleCwga2lu
ZCwgcHJlZGljdGlvbiwKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSwgY29udGludWF0aW9u
QmxvY2ssIGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChpbmxpbmluZ1Jlc3VsdCA9PSBD
YWxsT3B0aW1pemF0aW9uUmVzdWx0OjpEaWROb3RoaW5nKSB7CkBAIC0yMTA0LDcgKzIxMDQsNyBA
QCBCeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcoCiAKICAgICAvLyBTbG93IHBhdGggYmxvY2sKICAgICBtX2N1cnJlbnRC
bG9jayA9IGFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKTsKLSAgICBtX2N1cnJlbnRJbmRleCA9
IG9sZE9mZnNldDsKKyAgICBtX2N1cnJlbnRJbmRleCA9IG9sZEluZGV4OwogICAgIG1fZXhpdE9L
ID0gdHJ1ZTsKICAgICBkYXRhLmZhbGxUaHJvdWdoID0gQnJhbmNoVGFyZ2V0KG1fY3VycmVudEJs
b2NrKTsKICAgICBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CkBAIC0yMTI0LDcgKzIxMjQsNyBAQCBC
eXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW5saW5pbmcoCiAgICAgICAgIFZFUkJPU0VfTE9HKCJjb3VsZFRha2VTbG93UGF0aCB3YXMg
ZmFsc2VcbiIpOwogICAgIH0KIAotICAgIG1fY3VycmVudEluZGV4ID0gbmV4dE9mZnNldDsKKyAg
ICBtX2N1cnJlbnRJbmRleCA9IG5leHRJbmRleDsKICAgICBtX2V4aXRPSyA9IHRydWU7IC8vIE9y
aWdpbiBjaGFuZ2VkLCBzbyBpdCdzIGZpbmUgdG8gZXhpdCBhZ2Fpbi4KICAgICBwcm9jZXNzU2V0
TG9jYWxRdWV1ZSgpOwogCkBAIC0yMTM2LDcgKzIxMzYsNyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2Fs
bE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAKICAg
ICBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAgCi0gICAgbV9jdXJyZW50SW5kZXggPSBvbGRP
ZmZzZXQ7CisgICAgbV9jdXJyZW50SW5kZXggPSBvbGRJbmRleDsKICAgICBtX2N1cnJlbnRCbG9j
ayA9IGNvbnRpbnVhdGlvbkJsb2NrOwogICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICAKQEAgLTQ2
OTMsMTQgKzQ2OTMsMTQgQEAgc3RhdGljIHVpbnQ2NF90IG1ha2VEeW5hbWljVmFyT3BJbmZvKHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIHVuc2lnbmVkIGdldFB1dEkKIC8vIERvZXNuJ3QgYWxs
b3cgdXNpbmcgYGNvbnRpbnVlYC4KICNkZWZpbmUgTkVYVF9PUENPREUobmFtZSkgXAogICAgIGlm
ICh0cnVlKSB7IFwKLSAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gY3VycmVudEluc3RydWN0aW9u
LT5zaXplKCk7IFwKKyAgICAgICAgbV9jdXJyZW50SW5kZXggPSBCeXRlY29kZUluZGV4KG1fY3Vy
cmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyBcCiAgICAg
ICAgIGdvdG8gV1RGX0NPTkNBVChORVhUX09QQ09ERV8sIF9fTElORV9fKTsgLyogTmVlZCBhIHVu
aXF1ZSBsYWJlbDogdXNhYmxlIG1vcmUgdGhhbiBvbmNlIHBlciBmdW5jdGlvbi4gKi8gXAogICAg
IH0gZWxzZSBcCiAgICAgICAgIFdURl9DT05DQVQoTkVYVF9PUENPREVfLCBfX0xJTkVfXyk6IFwK
ICAgICBjb250aW51ZQogCiAjZGVmaW5lIExBU1RfT1BDT0RFX0xJTktFRChuYW1lKSBkbyB7IFwK
LSAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7IFwK
KyAgICAgICAgbV9jdXJyZW50SW5kZXggPSBCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9m
ZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyBcCiAgICAgICAgIG1fZXhpdE9L
ID0gZmFsc2U7IFwKICAgICAgICAgcmV0dXJuOyBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCkBAIC00
NzI0LDcgKzQ3MjQsNyBAQCBzdGF0aWMgdWludDY0X3QgbWFrZUR5bmFtaWNWYXJPcEluZm8odW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgdW5zaWduZWQgZ2V0UHV0SQogdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIHsKICAgICBhdXRvJiBpbnN0cnVjdGlv
bnMgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Ci0gICAg
dW5zaWduZWQgYmxvY2tCZWdpbiA9IG1fY3VycmVudEluZGV4OworICAgIEJ5dGVjb2RlSW5kZXgg
YmxvY2tCZWdpbiA9IG1fY3VycmVudEluZGV4OwogCiAgICAgLy8gSWYgd2UgYXJlIHRoZSBmaXJz
dCBiYXNpYyBibG9jaywgaW50cm9kdWNlIG1hcmtlcnMgZm9yIGFyZ3VtZW50cy4gVGhpcyBhbGxv
d3MKICAgICAvLyB1cyB0byB0cmFjayBpZiBhIHVzZSBvZiBhbiBhcmd1bWVudCBtYXkgdXNlIHRo
ZSBhY3R1YWwgYXJndW1lbnQgcGFzc2VkLCBhcwpAQCAtNDc2OCw3ICs0NzY4LDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgcHJvY2Vz
c1NldExvY2FsUXVldWUoKTsKICAgICAgICAgCiAgICAgICAgIC8vIERvbid0IGV4dGVuZCBvdmVy
IGp1bXAgZGVzdGluYXRpb25zLgotICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPT0gbGltaXQp
IHsKKyAgICAgICAgaWYgKG1fY3VycmVudEluZGV4Lm9mZnNldCgpID09IGxpbWl0KSB7CiAgICAg
ICAgICAgICAvLyBPcmRpbmFyaWx5IHdlIHdhbnQgdG8gcGxhbnQgYSBqdW1wLiBCdXQgcmVmdXNl
IHRvIGRvIHRoaXMgaWYgdGhlIGJsb2NrIGlzCiAgICAgICAgICAgICAvLyBlbXB0eS4gVGhpcyBp
cyBhIHNwZWNpYWwgY2FzZSBmb3IgaW5saW5pbmcsIHdoaWNoIG1pZ2h0IG90aGVyd2lzZSBjcmVh
dGUKICAgICAgICAgICAgIC8vIHNvbWUgZW1wdHkgYmxvY2tzIGluIHNvbWUgY2FzZXMuIFdoZW4g
cGFyc2VCbG9jaygpIHJldHVybnMgd2l0aCBhbiBlbXB0eQpAQCAtNDc3OCw3ICs0Nzc4LDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAg
ICAgIC8vIHRvIGJlIHRydWUuCiAKICAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2stPmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICBhZGRKdW1wVG8obV9jdXJyZW50SW5kZXgpOworICAg
ICAgICAgICAgICAgIGFkZEp1bXBUbyhtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC01ODAzLDcgKzU4MDMsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAg
ICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKSk7CiAgICAgICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEptcD4oKTsKICAgICAgICAgICAg
IGludCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJl
bGF0aXZlT2Zmc2V0KSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1
cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0KSk7CiAgICAgICAgICAgICBpZiAo
cmVsYXRpdmVPZmZzZXQgPD0gMCkKICAgICAgICAgICAgICAgICBmbHVzaEZvclRlcm1pbmFsKCk7
CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbXApOwpAQCAtNTgxMyw3ICs1ODEzLDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CiAg
ICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBnZXQoYnl0ZWNv
ZGUubV9jb25kaXRpb24pOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhi
cmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4
ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAg
IGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZz
ZXQoKSArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09E
RShvcF9qdHJ1ZSk7CiAgICAgICAgIH0KIApAQCAtNTgyMSw3ICs1ODIxLDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAgICAgICAg
ICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gZ2V0KGJ5dGVjb2RlLm1fY29u
ZGl0aW9uKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0
YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJ
bmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dy
YXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxh
dGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfamZh
bHNlKTsKICAgICAgICAgfQogCkBAIC01ODMxLDcgKzU4MzEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogdmFsdWUg
PSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBOb2RlKiBudWxsQ29uc3RhbnQg
PSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TnVsbCkpOwogICAgICAg
ICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBudWxs
Q29uc3RhbnQpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hE
YXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3Vy
cmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRv
R3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSAr
IHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVj
dGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9q
ZXFfbnVsbCk7CiAgICAgICAgIH0KIApAQCAtNTg0MSw3ICs1ODQxLDcgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIHZh
bHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgTm9kZSogbnVsbENvbnN0
YW50ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE51bGwpKTsKICAg
ICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwg
bnVsbENvbnN0YW50KTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJh
bmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1
cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBh
ZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0
KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkg
KyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUo
b3Bfam5lcV9udWxsKTsKICAgICAgICAgfQogCkBAIC01ODUwLDcgKzU4NTAsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgdW5z
aWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAg
ICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKElzVW5kZWZpbmVkT3JOdWxsLCB2
YWx1ZSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEo
bV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFw
aChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVs
YXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9u
LT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2p1bmRl
ZmluZWRfb3JfbnVsbCk7CiAgICAgICAgIH0KIApAQCAtNTg1OSw3ICs1ODU5LDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIHVu
c2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAg
ICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChJc1VuZGVmaW5lZE9yTnVsbCwg
dmFsdWUpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRh
KG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudElu
ZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1
cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0
aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbnVu
ZGVmaW5lZF9vcl9udWxsKTsKICAgICAgICAgfQogCkBAIC01ODY5LDcgKzU4NjksNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAg
Tm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9
IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRU
b0dyYXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJy
YW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwg
bV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24p
OworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3Vy
cmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4Lm9mZnNl
dCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAg
ICAgIExBU1RfT1BDT0RFKG9wX2psZXNzKTsKICAgICAgICAgfQogCkBAIC01ODc5LDcgKzU4Nzks
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAg
ICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5v
ZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRp
b24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzRXEsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0
aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSks
IGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5j
aERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50
SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24p
OwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfamxlc3NlcSk7CiAgICAgICAgIH0KIApAQCAt
NTg4OSw3ICs1ODg5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CiAg
ICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAg
Tm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlciwgb3AxLCBvcDIpOwot
ICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVu
dEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0
aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNo
LCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zm
c2V0LCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qZ3JlYXRlcik7CiAg
ICAgICAgIH0KIApAQCAtNTg5OSw3ICs1ODk5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRl
Y29kZS5tX2xocyk7CiAgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMp
OwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRl
ckVxLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJy
YW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXgg
KyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOworICAgICAgICAgICAg
YWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNl
dCgpICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudElu
c3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RF
KG9wX2pncmVhdGVyZXEpOwogICAgICAgICB9CiAKQEAgLTU5MDksNyArNTkwOSw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBO
b2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOwogICAgICAgICAgICAgTm9kZSogb3AyID0g
Z2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRv
R3JhcGgoQ29tcGFyZUVxLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5j
aCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9j
dXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwor
ICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVu
dEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4Lm9mZnNldCgp
ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAg
IExBU1RfT1BDT0RFKG9wX2plcSk7CiAgICAgICAgIH0KIApAQCAtNTkxOSw3ICs1OTE5LDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAg
ICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CiAgICAgICAgICAgICBOb2RlKiBv
cDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0g
YWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRv
R3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZl
T2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNv
bmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERh
dGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5k
ZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwog
ICAgICAgICAgICAgTEFTVF9PUENPREUob3BfanN0cmljdGVxKTsKICAgICAgICAgfQogCkBAIC01
OTI5LDcgKzU5MjksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
IGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAg
ICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBO
b2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMik7Ci0gICAg
ICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5k
ZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2
ZU9mZnNldCkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9w
SW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0
aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQpKSwg
Y29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pubGVzcyk7CiAgICAgICAg
IH0KIApAQCAtNTkzOSw3ICs1OTM5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5t
X2xocyk7CiAgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAg
ICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzc0VxLCBvcDEs
IG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEo
bV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5k
ZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFw
aChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3Vy
cmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRp
dmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pubGVz
c2VxKTsKICAgICAgICAgfQogCkBAIC01OTQ5LDcgKzU5NDksNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0g
Z2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29k
ZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBh
cmVHcmVhdGVyLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJ
bmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOworICAgICAg
ICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4
Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4Lm9m
ZnNldCgpICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1Rf
T1BDT0RFKG9wX2puZ3JlYXRlcik7CiAgICAgICAgIH0KIApAQCAtNTk1OSw3ICs1OTU5LDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAg
ICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CiAgICAgICAgICAgICBOb2RlKiBv
cDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0g
YWRkVG9HcmFwaChDb21wYXJlR3JlYXRlckVxLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRU
b0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBj
b25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hE
YXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCks
IG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsK
ICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2puZ3JlYXRlcmVxKTsKICAgICAgICAgfQogCkBA
IC01OTY5LDcgKzU5NjksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsK
ICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAg
ICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcSwgb3AxLCBvcDIpOwotICAg
ICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudElu
ZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4ICsgcmVsYXRp
dmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBP
cEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVj
dGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0KSks
IGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmVxKTsKICAgICAgICAg
fQogCkBAIC01OTc5LDcgKzU5NzksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1f
bGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAg
ICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVTdHJpY3RFcSwgb3Ax
LCBvcDIpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRh
KG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudElu
ZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1
cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0
aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbnN0
cmljdGVxKTsKICAgICAgICAgfQogCkBAIC01OTg5LDcgKzU5ODksNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3Ax
ID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRl
Y29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENv
bXBhcmVCZWxvdywgb3AxLCBvcDIpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9w
SW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVu
dEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKKyAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRl
eC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1
cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9qYmVsb3cpOwogICAgICAgICB9CiAKQEAgLTU5OTksNyArNTk5OSw3IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAg
ICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOwogICAgICAgICAgICAgTm9kZSogb3Ay
ID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFk
ZFRvR3JhcGgoQ29tcGFyZUJlbG93RXEsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zm
c2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRp
dGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEo
bV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXgu
b2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwogICAg
ICAgICAgICAgTEFTVF9PUENPREUob3BfamJlbG93ZXEpOwogICAgICAgICB9CiAKQEAgLTYwMDgs
MTIgKzYwMDgsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBs
aW1pdCkKICAgICAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N3aXRjaERh
dGEuYWRkKCk7CiAgICAgICAgICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hJbW07CiAgICAgICAgICAg
ICBkYXRhLnN3aXRjaFRhYmxlSW5kZXggPSBtX2lubGluZVN0YWNrVG9wLT5tX3N3aXRjaFJlbWFw
W2J5dGVjb2RlLm1fdGFibGVJbmRleF07Ci0gICAgICAgICAgICBkYXRhLmZhbGxUaHJvdWdoLnNl
dEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXggKyBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fZGVm
YXVsdE9mZnNldCkpOworICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5zZXRCeXRlY29kZUlu
ZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsganVtcFRhcmdldChieXRlY29kZS5tX2RlZmF1
bHRPZmZzZXQpKTsKICAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVC
bG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUuYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgICAgIGlmICghdGFibGUuYnJhbmNoT2Zmc2V0c1tpXSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0
ID0gbV9jdXJyZW50SW5kZXggKyB0YWJsZS5icmFuY2hPZmZzZXRzW2ldOworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgdGFibGUuYnJh
bmNoT2Zmc2V0c1tpXTsKICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRo
cm91Z2guYnl0ZWNvZGVJbmRleCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJ
bmRleChtX2dyYXBoLmZyZWV6ZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0YWJsZS5t
aW4gKyBpKSkpLCB0YXJnZXQpKTsKQEAgLTYwMjgsMTIgKzYwMjgsMTIgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIFN3aXRjaERh
dGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N3aXRjaERhdGEuYWRkKCk7CiAgICAgICAgICAgICBkYXRh
LmtpbmQgPSBTd2l0Y2hDaGFyOwogICAgICAgICAgICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9zd2l0Y2hSZW1hcFtieXRlY29kZS5tX3RhYmxlSW5kZXhdOwot
ICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5zZXRCeXRlY29kZUluZGV4KG1fY3VycmVudElu
ZGV4ICsganVtcFRhcmdldChieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpKTsKKyAgICAgICAgICAg
IGRhdGEuZmFsbFRocm91Z2guc2V0Qnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQo
KSArIGp1bXBUYXJnZXQoYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KSk7CiAgICAgICAgICAgICBT
aW1wbGVKdW1wVGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRh
LnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRhYmxlLmJyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAo
IXRhYmxlLmJyYW5jaE9mZnNldHNbaV0pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4ICsgdGFibGUu
YnJhbmNoT2Zmc2V0c1tpXTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBtX2N1
cnJlbnRJbmRleC5vZmZzZXQoKSArIHRhYmxlLmJyYW5jaE9mZnNldHNbaV07CiAgICAgICAgICAg
ICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoLmJ5dGVjb2RlSW5kZXgoKSkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5h
cHBlbmQoCkBAIC02MDQ5LDEyICs2MDQ5LDEyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKm1f
Z3JhcGgubV9zd2l0Y2hEYXRhLmFkZCgpOwogICAgICAgICAgICAgZGF0YS5raW5kID0gU3dpdGNo
U3RyaW5nOwogICAgICAgICAgICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0gYnl0ZWNvZGUubV90
YWJsZUluZGV4OwotICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5zZXRCeXRlY29kZUluZGV4
KG1fY3VycmVudEluZGV4ICsganVtcFRhcmdldChieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpKTsK
KyAgICAgICAgICAgIGRhdGEuZmFsbFRocm91Z2guc2V0Qnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJ
bmRleC5vZmZzZXQoKSArIGp1bXBUYXJnZXQoYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KSk7CiAg
ICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3
aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICAgICAgU3RyaW5n
SnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgaXRlcjsKICAgICAgICAgICAg
IFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxl
Lm9mZnNldFRhYmxlLmVuZCgpOwogICAgICAgICAgICAgZm9yIChpdGVyID0gdGFibGUub2Zmc2V0
VGFibGUuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4ICsgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4Lm9mZnNl
dCgpICsgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0OwogICAgICAgICAgICAgICAgIGlmICh0YXJn
ZXQgPT0gZGF0YS5mYWxsVGhyb3VnaC5ieXRlY29kZUluZGV4KCkpCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKApAQCAtNjA3
OSw3ICs2MDc5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBs
aW1pdCkKICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLmlz
VmFsaWQoKSkKICAgICAgICAgICAgICAgICBzZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+bV9y
ZXR1cm5WYWx1ZSwgZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpLCBJbW1lZGlhdGVTZXRXaXRoRmx1c2gp
OwogCi0gICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fY29udGludWF0aW9uQmxv
Y2sgJiYgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSAhPSBtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSB7CisgICAg
ICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fY29udGludWF0aW9uQmxvY2sgJiYgbV9j
dXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSAhPSBtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBlYXJseSByZXR1cm4gZnJvbSBhbiBpbmxpbmVkIGZ1
bmN0aW9uIGFuZCB3ZSBkbyBub3QgaGF2ZSBhIGNvbnRpbnVhdGlvbiBibG9jaywgc28gd2UgbXVz
dCBhbGxvY2F0ZSBvbmUuCiAgICAgICAgICAgICAgICAgLy8gSXQgaXMgdW50YXJnZXRhYmxlLCBi
ZWNhdXNlIHdlIGRvIG5vdCBrbm93IHRoZSBhcHByb3ByaWF0ZSBpbmRleC4KICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGlzIGJsb2NrIHR1cm5zIG91dCB0byBiZSBhIGp1bXAgdGFyZ2V0LCBwYXJz
ZUNvZGVCbG9jayB3aWxsIGZpeCBpdHMgYnl0ZWNvZGVJbmRleCBiZWZvcmUgcHV0dGluZyBpdCBp
biBtX2Jsb2NrTGlua2luZ1RhcmdldHMKQEAgLTYyMDcsNyArNjIwNyw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgQXJn
dW1lbnRzVmVjdG9yJiBlbnRyeXBvaW50QXJndW1lbnRzID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKICAgICAgICAgICAgICAgICBlbnRyeXBvaW50QXJndW1lbnRzLnJlc2l6ZShtX251bUFy
Z3VtZW50cyk7CiAKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBleGl0Qnl0ZWNvZGVJbmRleCA9
IG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CisgICAgICAgICAg
ICAgICAgQnl0ZWNvZGVJbmRleCBleGl0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9j
dXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CiAKICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBhcmd1
bWVudFByZWRpY3Rpb25zLnNpemUoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CkBAIC02MzE2LDcgKzYzMTYsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAg
ICAgICAgTm9kZSogY2hpbGQgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBp
ZiAoYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2hhc0p1bXBlZCkgewogICAgICAgICAg
ICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxUHRyLCBPcEluZm8o
ZnJvemVuUG9pbnRlciksIGNoaWxkKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5j
aCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24t
PnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwor
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1
cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJl
bnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAg
ICAgICAgICAgTEFTVF9PUENPREUob3Bfam5lcV9wdHIpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0NlbGwsIE9wSW5mbyhmcm96ZW5Qb2ludGVyKSwgY2hpbGQp
OwpAQCAtNzEzNSwyMSArNzEzNSwyMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2so
QmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVAogICAgIAog
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgSnVtcDoKLSAgICAgICAgbm9kZS0+
dGFyZ2V0QmxvY2soKSA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBu
b2RlLT50YXJnZXRCeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSk7CisgICAgICAgIG5vZGUt
PnRhcmdldEJsb2NrKCkgPSBibG9ja0ZvckJ5dGVjb2RlSW5kZXgocG9zc2libGVUYXJnZXRzLCBC
eXRlY29kZUluZGV4KG5vZGUtPnRhcmdldEJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEJyYW5jaDogewogICAgICAgICBC
cmFuY2hEYXRhKiBkYXRhID0gbm9kZS0+YnJhbmNoRGF0YSgpOwotICAgICAgICBkYXRhLT50YWtl
bi5ibG9jayA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBkYXRhLT50
YWtlbkJ5dGVjb2RlSW5kZXgoKSk7Ci0gICAgICAgIGRhdGEtPm5vdFRha2VuLmJsb2NrID0gYmxv
Y2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIGRhdGEtPm5vdFRha2VuQnl0ZWNv
ZGVJbmRleCgpKTsKKyAgICAgICAgZGF0YS0+dGFrZW4uYmxvY2sgPSBibG9ja0ZvckJ5dGVjb2Rl
SW5kZXgocG9zc2libGVUYXJnZXRzLCBCeXRlY29kZUluZGV4KGRhdGEtPnRha2VuQnl0ZWNvZGVJ
bmRleCgpKSk7CisgICAgICAgIGRhdGEtPm5vdFRha2VuLmJsb2NrID0gYmxvY2tGb3JCeXRlY29k
ZUluZGV4KHBvc3NpYmxlVGFyZ2V0cywgQnl0ZWNvZGVJbmRleChkYXRhLT5ub3RUYWtlbkJ5dGVj
b2RlSW5kZXgoKSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
U3dpdGNoOiB7CiAgICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSBub2RlLT5zd2l0Y2hEYXRhKCk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPnN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6
ZSgpOyBpLS07KQotICAgICAgICAgICAgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2NrID0gYmxv
Y2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIGRhdGEtPmNhc2VzW2ldLnRhcmdl
dC5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayA9IGJs
b2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBkYXRhLT5mYWxsVGhyb3VnaC5i
eXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2Nr
ID0gYmxvY2tGb3JCeXRlY29kZUluZGV4KHBvc3NpYmxlVGFyZ2V0cywgQnl0ZWNvZGVJbmRleChk
YXRhLT5jYXNlc1tpXS50YXJnZXQuYnl0ZWNvZGVJbmRleCgpKSk7CisgICAgICAgIGRhdGEtPmZh
bGxUaHJvdWdoLmJsb2NrID0gYmxvY2tGb3JCeXRlY29kZUluZGV4KHBvc3NpYmxlVGFyZ2V0cywg
Qnl0ZWNvZGVJbmRleChkYXRhLT5mYWxsVGhyb3VnaC5ieXRlY29kZUluZGV4KCkpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTczMjMsNyArNzMyMyw3IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAgICBmb3IgKHVuc2lnbmVkIGp1bXBUYXJn
ZXRJbmRleCA9IDA7IGp1bXBUYXJnZXRJbmRleCA8PSBqdW1wVGFyZ2V0cy5zaXplKCk7ICsranVt
cFRhcmdldEluZGV4KSB7CiAgICAgICAgIC8vIFRoZSBtYXhpbXVtIGJ5dGVjb2RlIG9mZnNldCB0
byBnbyBpbnRvIHRoZSBjdXJyZW50IGJhc2ljYmxvY2sgaXMgZWl0aGVyIHRoZSBuZXh0IGp1bXAg
dGFyZ2V0LCBvciB0aGUgZW5kIG9mIHRoZSBpbnN0cnVjdGlvbnMuCiAgICAgICAgIHVuc2lnbmVk
IGxpbWl0ID0ganVtcFRhcmdldEluZGV4IDwganVtcFRhcmdldHMuc2l6ZSgpID8ganVtcFRhcmdl
dHNbanVtcFRhcmdldEluZGV4XSA6IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwot
ICAgICAgICBBU1NFUlQobV9jdXJyZW50SW5kZXggPCBsaW1pdCk7CisgICAgICAgIEFTU0VSVCht
X2N1cnJlbnRJbmRleC5vZmZzZXQoKSA8IGxpbWl0KTsKIAogICAgICAgICAvLyBMb29wIHVudGls
IHdlIHJlYWNoIHRoZSBjdXJyZW50IGxpbWl0IChpLmUuIG5leHQganVtcCB0YXJnZXQpLgogICAg
ICAgICBkbyB7CkBAIC03MzQ2LDIzICs3MzQ2LDIzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQ29kZUJsb2NrKCkKICAgICAgICAgICAgIHBhcnNlQmxvY2sobGltaXQpOwogCiAgICAgICAg
ICAgICAvLyBXZSBzaG91bGQgbm90IGhhdmUgZ29uZSBiZXlvbmQgdGhlIGxpbWl0LgotICAgICAg
ICAgICAgQVNTRVJUKG1fY3VycmVudEluZGV4IDw9IGxpbWl0KTsKKyAgICAgICAgICAgIEFTU0VS
VChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSA8PSBsaW1pdCk7CiAKICAgICAgICAgICAgIGlmICht
X2N1cnJlbnRCbG9jay0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYXNl
IG9ubHkgaGFwcGVucyBpZiB0aGUgbGFzdCBpbnN0cnVjdGlvbiB3YXMgYW4gaW5saW5lZCBjYWxs
IHdpdGggZWFybHkgcmV0dXJucwogICAgICAgICAgICAgICAgIC8vIG9yIHBvbHltb3JwaGljIChj
cmVhdGluZyBhbiBlbXB0eSBjb250aW51YXRpb24gYmxvY2spLAogICAgICAgICAgICAgICAgIC8v
IGFuZCB0aGVuIHdlIGhpdCB0aGUgbGltaXQgYmVmb3JlIHB1dHRpbmcgYW55dGhpbmcgaW4gdGhl
IGNvbnRpbnVhdGlvbiBibG9jay4KLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50SW5k
ZXggPT0gbGltaXQpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleC5vZmZz
ZXQoKSA9PSBsaW1pdCk7CiAgICAgICAgICAgICAgICAgbWFrZUJsb2NrVGFyZ2V0YWJsZShtX2N1
cnJlbnRCbG9jaywgbV9jdXJyZW50SW5kZXgpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2stPnRlcm1pbmFsKCkgfHwgKG1fY3VycmVu
dEluZGV4ID09IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpICYmIGlubGluZUNhbGxG
cmFtZSgpKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEJsb2NrLT50ZXJtaW5h
bCgpIHx8IChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSA9PSBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLnNpemUoKSAmJiBpbmxpbmVDYWxsRnJhbWUoKSkpOwogICAgICAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAobV9j
dXJyZW50SW5kZXggPCBsaW1pdCk7CisgICAgICAgIH0gd2hpbGUgKG1fY3VycmVudEluZGV4Lm9m
ZnNldCgpIDwgbGltaXQpOwogICAgIH0KIAogICAgIC8vIFNob3VsZCBoYXZlIHJlYWNoZWQgdGhl
IGVuZCBvZiB0aGUgaW5zdHJ1Y3Rpb25zLgotICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA9PSBj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgQVNTRVJUKG1fY3VycmVudElu
ZGV4Lm9mZnNldCgpID09IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKICAgICAK
ICAgICBWRVJCT1NFX0xPRygiRG9uZSBwYXJzaW5nICIsICpjb2RlQmxvY2ssICIgKGZlbGwgb2Zm
IGVuZClcbiIpOwogfQpAQCAtNzUyNSw3ICs3NTI1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlQ3JlYXRlSW50ZXJuYWxGaWVsZE9iamVjdChjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
bywKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKIHsKICAgICAvLyBTZXQgZHVyaW5nIGNv
bnN0cnVjdGlvbi4KLSAgICBBU1NFUlQoIW1fY3VycmVudEluZGV4KTsKKyAgICBBU1NFUlQoIW1f
Y3VycmVudEluZGV4Lm9mZnNldCgpKTsKICAgICAKICAgICBWRVJCT1NFX0xPRygiUGFyc2luZyAi
LCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uRGF0YS5jcHAKaW5kZXggN2M4MDc1MGFlZGRkN2MwMDM4YjlhNTliMzk1M2Q2MGZj
YjBhYTRmYS4uNzk4N2I4NzBmZDUwOWY5MzAwMDdlMzU2YWMwNTVlYTY2YmZlN2FkYiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCkBAIC01Niw3ICs1Niw3
IEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkQ29kZU9yaWdpbihDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4pCiAgICAgICAgIGNvZGVPcmlnaW5zLmFwcGVuZChjb2RlT3JpZ2luKTsKICAgICB1
bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7CiAgICAgQVNTRVJUKGNvZGVP
cmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChp
bmRleCk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChpbmRleCkpOwog
fQogCiBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQpAQCAtNjQsMTMgKzY0LDEzIEBAIENhbGxTaXRlSW5kZXggQ29t
bW9uRGF0YTo6YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAg
ICAgY29kZU9yaWdpbnMuYXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0g
Y29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09
IGNvZGVPcmlnaW4pOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KGluZGV4KTsKKyAgICByZXR1
cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CiB9CiAKIENhbGxTaXRlSW5k
ZXggQ29tbW9uRGF0YTo6bGFzdENhbGxTaXRlKCkgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VS
VChjb2RlT3JpZ2lucy5zaXplKCkpOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KGNvZGVPcmln
aW5zLnNpemUoKSAtIDEpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
Y29kZU9yaWdpbnMuc2l6ZSgpIC0gMSkpOwogfQogCiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBD
b21tb25EYXRhOjphZGREaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmln
aW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCmluZGV4IDRiMjE2
N2ZkODRkNmY2ZmQ5MTlmOTcyYTkyOTJjMWYwYzFlYTgzMmIuLjJlZDgzMGZkYzNhNDlmMDQ5MmQ4
ZjgwNjVjMjUxMjgwYWU1MzQ4ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5oCkBAIC05NCwxNCArOTQsMTQgQEAgcHVibGljOgogICAgIHZvaWQgaW5zdGFsbFZN
VHJhcEJyZWFrcG9pbnRzKENvZGVCbG9jayogb3duZXIpOwogICAgIGJvb2wgaXNWTVRyYXBCcmVh
a3BvaW50KHZvaWQqIGFkZHJlc3MpOwogCi0gICAgQ2F0Y2hFbnRyeXBvaW50RGF0YSogY2F0Y2hP
U1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAg
Q2F0Y2hFbnRyeXBvaW50RGF0YSogY2F0Y2hPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0cnlCaW5h
cnlTZWFyY2g8Q2F0Y2hFbnRyeXBvaW50RGF0YSwgdW5zaWduZWQ+KAorICAgICAgICByZXR1cm4g
dHJ5QmluYXJ5U2VhcmNoPENhdGNoRW50cnlwb2ludERhdGEsIEJ5dGVjb2RlSW5kZXg+KAogICAg
ICAgICAgICAgY2F0Y2hFbnRyeXBvaW50cywgY2F0Y2hFbnRyeXBvaW50cy5zaXplKCksIGJ5dGVj
b2RlSW5kZXgsCiAgICAgICAgICAgICBbXSAoY29uc3QgQ2F0Y2hFbnRyeXBvaW50RGF0YSogaXRl
bSkgeyByZXR1cm4gaXRlbS0+Ynl0ZWNvZGVJbmRleDsgfSk7CiAgICAgfQogCi0gICAgdm9pZCBh
cHBlbmRDYXRjaEVudHJ5cG9pbnQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1hY2hpbmVDb2RlLCBWZWN0b3I8Rmx1
c2hGb3JtYXQ+JiYgYXJndW1lbnRGb3JtYXRzKQorICAgIHZvaWQgYXBwZW5kQ2F0Y2hFbnRyeXBv
aW50KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1hY2hpbmVDb2RlLCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiYg
YXJndW1lbnRGb3JtYXRzKQogICAgIHsKICAgICAgICAgY2F0Y2hFbnRyeXBvaW50cy5hcHBlbmQo
Q2F0Y2hFbnRyeXBvaW50RGF0YSB7IG1hY2hpbmVDb2RlLCAgV1RGTW92ZShhcmd1bWVudEZvcm1h
dHMpLCBieXRlY29kZUluZGV4IH0pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAppbmRleCBkYjY5ZjFiZGQ2M2QxMTVhZmI1ZTVkMGZhZGI4NDA3MTEzMmE0Yzlk
Li4xN2IzNzA3NThjMDUzODcwM2I3ZDc5ZWU2MjI3MmQ0Nzk5OThiNTM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBGdW5j
dGlvbldoaXRlbGlzdCYgZW5zdXJlR2xvYmFsREZHV2hpdGVsaXN0KCkKIAogc3RhdGljIENvbXBp
bGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2Rl
LAotICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8T3B0
aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIEJ5dGVjb2RlSW5kZXggb3Ny
RW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11
c3RIYW5kbGVWYWx1ZXMsCiAgICAgUmVmPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4mJiBj
YWxsYmFjaykKIHsKICAgICBpZiAoIU9wdGlvbnM6OmJ5dGVjb2RlUmFuZ2VUb0RGR0NvbXBpbGUo
KS5pc0luUmFuZ2UoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpCkBAIC0xMTYsNyArMTE2
LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogfQogI2Vsc2UgLy8g
RU5BQkxFKERGR19KSVQpCiBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0g
ICAgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVk
LCBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mLAorICAgIFZNJiwgQ29kZUJsb2Nr
KiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2RlLCBCeXRlY29kZUluZGV4LCBjb25zdCBPcGVy
YW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mLAogICAgIFJlZjxEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s+JiYpCiB7CiAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwpAQCAtMTI1LDcgKzEy
NSw3IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKIAogQ29tcGlsYXRp
b25SZXN1bHQgY29tcGlsZSgKICAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2Rl
QmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9kZSwKLSAgICB1
bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpT
VmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcywKKyAgICBCeXRlY29kZUluZGV4IG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxl
VmFsdWVzLAogICAgIFJlZjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2sp
CiB7CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gY29tcGlsZUltcGwoCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAppbmRleCAwMWY3NGVlY2YwMzZjZDlmOWMwNzc4Yzc2
Mzg5NzIwYzAzOTEzYzdlLi5jN2JhN2Y2YWM3N2VkYjZkMzhkYTFiY2JmYTRmZmZjMWQ3NDg1OWRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKQEAgLTQyLDcgKzQyLDcgQEAg
SlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgZ2V0TnVtQ29tcGlsYXRpb25zKCk7CiAvLyBjb21w
aWxlLiBFdmVuIGlmIHdlIGRvIGEgc3luY2hyb25vdXMgY29tcGlsZSwgd2UgY2FsbCB0aGUgY2Fs
bGJhY2sgd2l0aCB0aGUgcmVzdWx0LgogQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZSgKICAgICBW
TSYsIENvZGVCbG9jayosIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0
aW9uTW9kZSwKLSAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJh
bmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcywKKyAgICBCeXRlY29kZUlu
ZGV4IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1
ZT4+JiBtdXN0SGFuZGxlVmFsdWVzLAogICAgIFJlZjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s+JiYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCmluZGV4IDlkNWI3ZDkzMzdjMjFkMzgyMWQ1YzlkNGM1ZTEyMWMyMTAy
ZWJlMTguLmFkYmY1MDI1Y2YzZDQ0MWJlMThiNzJiMDlkZGY4OGY4NDVkYjkxMWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC00MDQsNyArNDA0LDcgQEAgdm9pZCBH
cmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUq
IG5vZGUsIER1bXBDb250ZXgKICAgICBpZiAoY2xvYmJlcnNFeGl0U3RhdGUoKnRoaXMsIG5vZGUp
KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJDbG9iYmVyc0V4aXQiKTsKICAgICBpZiAobm9k
ZS0+b3JpZ2luLmlzU2V0KCkpIHsKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYmMjIiwgbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgIG91dC5wcmludChj
b21tYSwgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgICAgIGlm
IChub2RlLT5vcmlnaW4uc2VtYW50aWMgIT0gbm9kZS0+b3JpZ2luLmZvckV4aXQgJiYgbm9kZS0+
b3JpZ2luLmZvckV4aXQuaXNTZXQoKSkKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImV4
aXQ6ICIsIG5vZGUtPm9yaWdpbi5mb3JFeGl0KTsKICAgICB9CkBAIC0xNjQ5LDEwICsxNjQ5LDEw
IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGVGb3IoTm9kZSogY3VycmVuCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGlmIChub2RlLT5oYXNIZWFwUHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVybiAm
cHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICZwcm9m
aWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5ieXRlY29kZUluZGV4KCkpOwogCiAgICAgICAgICAgICBpZiAocHJvZmlsZWRCbG9jay0+
aGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgICAgIGlmIChBcml0aFBy
b2ZpbGUqIHJlc3VsdCA9IHByb2ZpbGVkQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCkpKQorICAgICAgICAgICAg
ICAgIGlmIChBcml0aFByb2ZpbGUqIHJlc3VsdCA9IHByb2ZpbGVkQmxvY2stPmFyaXRoUHJvZmls
ZUZvckJ5dGVjb2RlSW5kZXgobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTE3NTAsMTIgKzE3NTAsMTIgQEAgYm9vbCBHcmFwaDo6d2lsbENhdGNoRXhjZXB0
aW9uSW5NYWNoaW5lRnJhbWUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDb2RlT3JpZ2luJgogICAg
IGlmICghbV9oYXNFeGNlcHRpb25IYW5kbGVycykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleFRvQ2hlY2sgPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXhUb0NoZWNrID0gY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KCk7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwogICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNh
bGxGcmFtZSk7Ci0gICAgICAgIGlmIChIYW5kbGVySW5mbyogaGFuZGxlciA9IGNvZGVCbG9jay0+
aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXhUb0NoZWNrKSkgewotICAgICAg
ICAgICAgb3BDYXRjaE9yaWdpbk91dCA9IENvZGVPcmlnaW4oaGFuZGxlci0+dGFyZ2V0LCBpbmxp
bmVDYWxsRnJhbWUpOworICAgICAgICBpZiAoSGFuZGxlckluZm8qIGhhbmRsZXIgPSBjb2RlQmxv
Y2stPmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXhUb0NoZWNrKSkgeworICAg
ICAgICAgICAgb3BDYXRjaE9yaWdpbk91dCA9IENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleChoYW5k
bGVyLT50YXJnZXQpLCBpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgY2F0Y2hIYW5kbGVy
T3V0ID0gaGFuZGxlcjsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggNGE3MDhhYWI5MzEzMzliNWVlNDdjMzM0
ZWI0MTJiOGIwOTg2NTMxMC4uNmM2NGQ0NzFkMzA1ZjgyYWZkYzUzOGQzN2I3YTA0NWNlMGFhMjQx
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAtMTA5NCw3ICsxMDk0LDcg
QEAgcHVibGljOgogCiAgICAgLy8gVGhpcyBtYXBzIGFuIGVudHJ5cG9pbnQgaW5kZXggdG8gYSBw
YXJ0aWN1bGFyIG9wX2NhdGNoIGJ5dGVjb2RlIG9mZnNldC4gQnkgY29udmVudGlvbiwKICAgICAv
LyBpdCdsbCBuZXZlciBoYXZlIHplcm8gYXMgYSBrZXkgYmVjYXVzZSB3ZSB1c2UgemVybyB0byBt
ZWFuIHRoZSBvcF9lbnRlciBlbnRyeXBvaW50LgotICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2ln
bmVkPiBtX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldDsKKyAgICBIYXNoTWFw
PHVuc2lnbmVkLCBCeXRlY29kZUluZGV4PiBtX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29k
ZUluZGV4OwogCiAgICAgSGFzaFNldDxTdHJpbmc+IG1fbG9jYWxTdHJpbmdzOwogICAgIEhhc2hN
YXA8Y29uc3QgU3RyaW5nSW1wbCosIFN0cmluZz4gbV9jb3BpZWRTdHJpbmdzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKaW5kZXggYzViY2Q0ZTNkM2QyYzVlMDM5MmI4
YzI4MjhiY2Q3Y2ExMzYzMzVlNC4uN2UyZjllYTI4NWQyN2Q0MGJkMjMyNTc2MTUzNGNiOTZhMTVk
MWE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCkBAIC0yMTQs
NyArMjE0LDcgQEAgdm9pZCBKSVRDb2RlOjpjbGVhck9TUkVudHJ5QmxvY2tBbmRSZXNldFRocmVz
aG9sZHMoQ29kZUJsb2NrICpkZmdDb2RlQmxvY2spCiB7IAogICAgIEFTU0VSVChtX29zckVudHJ5
QmxvY2spOwogCi0gICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZSA9IG1fb3NyRW50cnlCbG9j
ay0+aml0Q29kZSgpLT5mdGxGb3JPU1JFbnRyeSgpLT5ieXRlY29kZUluZGV4KCk7CisgICAgQnl0
ZWNvZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlID0gbV9vc3JFbnRyeUJsb2NrLT5qaXRDb2RlKCkt
PmZ0bEZvck9TUkVudHJ5KCktPmJ5dGVjb2RlSW5kZXgoKTsKICAgICBtX29zckVudHJ5QmxvY2su
Y2xlYXIoKTsKICAgICBvc3JFbnRyeVJldHJ5ID0gMDsKICAgICB0aWVyVXBFbnRyeVRyaWdnZXJz
LnNldChvc3JFbnRyeUJ5dGVjb2RlLCBKSVRDb2RlOjpUcmlnZ2VyUmVhc29uOjpEb250VHJpZ2dl
cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCmluZGV4IGJiOGY1MGFjYTY1
ODVjYzA1YzM2NmUzZmZlZWI4Y2YzNWEzMDlmZDIuLmEwMDAwMmI2ODIwYjQyMzlkNmYyZDNhYzIw
YzZlZDkwM2FhOWY3MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCkBA
IC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBDb21tb25EYXRhKiBkZmdDb21tb24oKSBvdmVy
cmlkZTsKICAgICBKSVRDb2RlKiBkZmcoKSBvdmVycmlkZTsKICAgICAKLSAgICBPU1JFbnRyeURh
dGEqIGFwcGVuZE9TUkVudHJ5RGF0YSh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlTG9jYXRp
b25MYWJlbDxPU1JFbnRyeVB0clRhZz4gbWFjaGluZUNvZGUpCisgICAgT1NSRW50cnlEYXRhKiBh
cHBlbmRPU1JFbnRyeURhdGEoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBDb2RlTG9jYXRp
b25MYWJlbDxPU1JFbnRyeVB0clRhZz4gbWFjaGluZUNvZGUpCiAgICAgewogICAgICAgICBERkc6
Ok9TUkVudHJ5RGF0YSBlbnRyeTsKICAgICAgICAgZW50cnkubV9ieXRlY29kZUluZGV4ID0gYnl0
ZWNvZGVJbmRleDsKQEAgLTYzLDkgKzYzLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJm9z
ckVudHJ5Lmxhc3QoKTsKICAgICB9CiAgICAgCi0gICAgT1NSRW50cnlEYXRhKiBvc3JFbnRyeURh
dGFGb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgT1NSRW50cnlE
YXRhKiBvc3JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8T1NSRW50cnlEYXRh
LCB1bnNpZ25lZD4oCisgICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8T1NSRW50cnlEYXRh
LCBCeXRlY29kZUluZGV4PigKICAgICAgICAgICAgIG9zckVudHJ5LCBvc3JFbnRyeS5zaXplKCks
IGJ5dGVjb2RlSW5kZXgsCiAgICAgICAgICAgICBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4
KTsKICAgICB9CkBAIC0xNTEsMTAgKzE1MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8KICAgICAvLyBU
aGUga2V5IG1heSBub3QgYWx3YXlzIGJlIGEgdGFyZ2V0IGZvciBPU1IgRW50cnkgYnV0IHRoZSBs
aXN0IGluIHRoZSB2YWx1ZSBpcyBndWFyYW50ZWVkCiAgICAgLy8gdG8gYmUgdXNhYmxlIGZvciBP
U1IgRW50cnkuCi0gICAgSGFzaE1hcDx1bnNpZ25lZCwgVmVjdG9yPHVuc2lnbmVkPj4gdGllclVw
SW5Mb29wSGllcmFyY2h5OworICAgIEhhc2hNYXA8Qnl0ZWNvZGVJbmRleCwgVmVjdG9yPEJ5dGVj
b2RlSW5kZXg+PiB0aWVyVXBJbkxvb3BIaWVyYXJjaHk7CiAKICAgICAvLyBNYXAgZWFjaCBieXRl
Y29kZSBvZiBDaGVja1RpZXJVcEFuZE9TUkVudGVyIHRvIGl0cyBzdHJlYW0gaW5kZXguCi0gICAg
SGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQsIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBieXRlY29kZUluZGV4VG9T
dHJlYW1JbmRleDsKKyAgICBIYXNoTWFwPEJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkPiBieXRlY29k
ZUluZGV4VG9TdHJlYW1JbmRleDsKIAogICAgIGVudW0gY2xhc3MgVHJpZ2dlclJlYXNvbiA6IHVp
bnQ4X3QgewogICAgICAgICBEb250VHJpZ2dlciwKQEAgLTE2NSw3ICsxNjUsNyBAQCBwdWJsaWM6
CiAgICAgLy8gTWFwIGVhY2ggYnl0ZWNvZGUgb2YgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlciB0byBp
dHMgdHJpZ2dlciBmb3JjaW5nIE9TUiBFbnRyeS4KICAgICAvLyBUaGlzIGNhbiBuZXZlciBiZSBt
b2RpZmllZCBhZnRlciBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBzaW5jZSB0aGUgYWRkcmVzc2Vz
IG9mIHRoZSB0cmlnZ2VycwogICAgIC8vIGFyZSB1c2VkIGJ5IHRoZSBKSVQuCi0gICAgSGFzaE1h
cDx1bnNpZ25lZCwgVHJpZ2dlclJlYXNvbj4gdGllclVwRW50cnlUcmlnZ2VyczsKKyAgICBIYXNo
TWFwPEJ5dGVjb2RlSW5kZXgsIFRyaWdnZXJSZWFzb24+IHRpZXJVcEVudHJ5VHJpZ2dlcnM7CiAK
ICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX29zckVudHJ5QmxvY2s7CiAgICAgdW5zaWdu
ZWQgb3NyRW50cnlSZXRyeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAKaW5kZXggMDEwNjNjZTZiYjQ3ODUxZWYxM2M5MmI2YTgwZTJkMjBhODgxMTE2Ny4u
OTI3NDBhNjUyNjlhMjQ0MWIyMGJkYzY4MmNiZTRlYTc2YmU3NTQ5OCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgSklU
Q29tcGlsZXI6OkpJVENvbXBpbGVyKEdyYXBoJiBkZmcpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVy
ID0gbWFrZVVuaXF1ZTxEaXNhc3NlbWJsZXI+KGRmZyk7CiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAg
ICAgbV9qaXRDb2RlLT50aWVyVXBJbkxvb3BIaWVyYXJjaHkgPSBXVEZNb3ZlKG1fZ3JhcGgubV9w
bGFuLnRpZXJVcEluTG9vcEhpZXJhcmNoeSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIHRpZXJVcEJ5
dGVjb2RlIDogbV9ncmFwaC5tX3BsYW4udGllclVwQW5kT1NSRW50ZXJCeXRlY29kZXMoKSkKKyAg
ICBmb3IgKEJ5dGVjb2RlSW5kZXggdGllclVwQnl0ZWNvZGUgOiBtX2dyYXBoLm1fcGxhbi50aWVy
VXBBbmRPU1JFbnRlckJ5dGVjb2RlcygpKQogICAgICAgICBtX2ppdENvZGUtPnRpZXJVcEVudHJ5
VHJpZ2dlcnMuYWRkKHRpZXJVcEJ5dGVjb2RlLCBKSVRDb2RlOjpUcmlnZ2VyUmVhc29uOjpEb250
VHJpZ2dlcik7CiAjZW5kaWYKIH0KQEAgLTM3NCw3ICszNzQsNyBAQCB2b2lkIEpJVENvbXBpbGVy
Ojpjb21waWxlKCkKICAgICAvLyB3ZSBuZWVkIHRvIGNhbGwgb3V0IHRvIGEgaGVscGVyIGZ1bmN0
aW9uIHRvIHRocm93IHRoZSBTdGFja092ZXJmbG93RXJyb3IuCiAgICAgc3RhY2tPdmVyZmxvdy5s
aW5rKHRoaXMpOwogCi0gICAgZW1pdFN0b3JlQ29kZU9yaWdpbihDb2RlT3JpZ2luKDApKTsKKyAg
ICBlbWl0U3RvcmVDb2RlT3JpZ2luKENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwogCiAg
ICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC00NTAsNyArNDUwLDcgQEAgdm9pZCBK
SVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKICAgICAvLyB3ZSBuZWVkIHRvIGNhbGwgb3V0
IHRvIGEgaGVscGVyIGZ1bmN0aW9uIHRvIHRocm93IHRoZSBTdGFja092ZXJmbG93RXJyb3IuCiAg
ICAgc3RhY2tPdmVyZmxvdy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFN0b3JlQ29kZU9yaWdpbihD
b2RlT3JpZ2luKDApKTsKKyAgICBlbWl0U3RvcmVDb2RlT3JpZ2luKENvZGVPcmlnaW4oQnl0ZWNv
ZGVJbmRleCgwKSkpOwogCiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQog
ICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC00NzEs
MTQgKzQ3MSwxNCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogCiAgICAg
ICAgIGxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICBi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywgdGhpcyk7Ci0g
ICAgICAgIGVtaXRTdG9yZUNvZGVPcmlnaW4oQ29kZU9yaWdpbigwKSk7CisgICAgICAgIGVtaXRT
dG9yZUNvZGVPcmlnaW4oQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CiAgICAgICAgIGlm
IChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgbV9zcGVjdWxhdGl2ZS0+Y2Fs
bE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29kZUJsb2NrLT5p
c0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9u
Q2FsbEFyaXR5Q2hlY2ssIEdQUkluZm86OnJlZ1QwLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpOwogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAg
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywgdGhpcyk7Ci0gICAgICAg
IGVtaXRTdG9yZUNvZGVPcmlnaW4oQ29kZU9yaWdpbigwKSk7CisgICAgICAgIGVtaXRTdG9yZUNv
ZGVPcmlnaW4oQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CiAgICAgICAgIG1vdmUoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGNh
bGxBcml0eUZpeHVwID0gbmVhckNhbGwoKTsKICAgICAgICAganVtcChmcm9tQXJpdHlDaGVjayk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKaW5kZXggMDhkZmI4
ZGMyYmU2Njc4MTFlZDY3Y2NiYzE5MDg2OGIwMmRkZmE5OS4uNmExMzlkMjg1YWEyZjU4NzhlOTM3
ZWVkNjRmYjk2ZmU0MTlkZmMyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaApAQCAtOTgsNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgLy8gTWV0aG9kcyB0byBz
ZXQgbGFiZWxzIGZvciB0aGUgZGlzYXNzZW1ibGVyLgogICAgIHZvaWQgc2V0U3RhcnRPZkNvZGUo
KQogICAgIHsKLSAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgQ29kZU9yaWdpbigwLCBudWxscHRyKSk7CisgICAg
ICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWxJZ25vcmluZ1dh
dGNocG9pbnRzKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwogICAgICAgICBpZiAo
TElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9mQ29kZShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlh
YmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
aXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAppbmRleCA5ZWI0NmNhNWE4OGQz
YjcwYTg5OGQxZWNmMjk5ZjEzMWRhYTNlNjAwLi40MmY2OGFkYTMyNDc4YTExNzFjZWFkMGY5M2Uw
OGFjMjVjYTYzMTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xp
dmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKQEAg
LTEyNSwxNyArMTI1LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChvcmlnaW4gPT0gY2Fj
aGVkQ29kZU9yaWdpbikKICAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkSGFuZGxlclJlc3Vs
dDsKIAotICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleFRvQ2hlY2sgPSBvcmlnaW4u
Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
VG9DaGVjayA9IG9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAKICAgICAgICAgICAgIGNhY2hlZENv
ZGVPcmlnaW4gPSBvcmlnaW47CiAKICAgICAgICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBvcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBo
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgICAgICAgICAg
aWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVJbmRleFRvQ2hlY2spKSB7CisgICAgICAgICAgICAgICAgaWYgKEhhbmRs
ZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChieXRl
Y29kZUluZGV4VG9DaGVjaykpIHsKICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFk
LmNsZWFyQWxsKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2F0Y2hCeXRlY29k
ZUluZGV4ID0gaGFuZGxlci0+dGFyZ2V0OworICAgICAgICAgICAgICAgICAgICBCeXRlY29kZUlu
ZGV4IGNhdGNoQnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoaGFuZGxlci0+dGFyZ2V0KTsK
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShD
b2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0
Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAppbmRleCBkOTM5ZDMw
M2QyNGE2MjM5MDQ3MTZmZjI3ZmUwMzMyZmE3OTQ3ZmUzLi40NjJkNjgyZDI3YTgwNjhlYWExNWVk
YTIwZGUyNzA1OTg5OGQ5NzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmNwcApAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKIHZvaWQgT1NSRW50cnlEYXRhOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewotICAgIG91dC5wcmludCgiYmMjIiwgbV9ieXRl
Y29kZUluZGV4LCAiLCBtYWNoaW5lIGNvZGUgPSAiLCBSYXdQb2ludGVyKG1fbWFjaGluZUNvZGUu
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIG91dC5wcmludChtX2J5dGVjb2RlSW5kZXgsICIs
IG1hY2hpbmUgY29kZSA9ICIsIFJhd1BvaW50ZXIobV9tYWNoaW5lQ29kZS5leGVjdXRhYmxlQWRk
cmVzcygpKSk7CiAgICAgb3V0LnByaW50KCIsIHN0YWNrIHJ1bGVzID0gWyIpOwogICAgIAogICAg
IGF1dG8gcHJpbnRPcGVyYW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CkBAIC05Miw3
ICs5Miw3IEBAIHZvaWQgT1NSRW50cnlEYXRhOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiB9CiAKIFNVUFBSRVNTX0FTQU4KLXZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkKK3ZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewog
ICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkp
KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKQEAgLTEwNiw3ICsxMDYs
NyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbgogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NS
KCkpIHsKICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICJERkcgT1NSIGluICIsICpjb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCksICIgLT4gIiwgKmNvZGVCbG9jaywKLSAgICAgICAgICAgICIg
ZnJvbSBiYyMiLCBieXRlY29kZUluZGV4LCAiXG4iKTsKKyAgICAgICAgICAgICIgZnJvbSAiLCBi
eXRlY29kZUluZGV4LCAiXG4iKTsKICAgICB9CiAgICAgCiAgICAgc2FuaXRpemVTdGFja0ZvclZN
KHZtKTsKQEAgLTMyOSw4ICszMjksOCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbgogICAgIHJl
dHVybiBzY3JhdGNoOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4gcHJlcGFyZUNhdGNoT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17IAorTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVDYXRjaE9T
UkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCit7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCB8fCBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpGVExKSVQpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29t
bW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKQEAgLTM4MCw3ICszODAsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NSRW50cnkoVk0m
IHZtLCBDYWxsRgogICAgIGlmIChVTkxJS0VMWSghdm0uZW5zdXJlU3RhY2tDYXBhY2l0eUZvcigm
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKVt2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVNpemVG
b3JDaGVjaykub2Zmc2V0KCldKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0
byBpbnN0cnVjdGlvbiA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0
KGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CisgICAgYXV0byBpbnN0cnVjdGlvbiA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGNhbGxGcmFtZS0+Ynl0ZWNv
ZGVJbmRleCgpKTsKICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb24tPmlzPE9wQ2F0Y2g+KCkpOwogICAg
IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGluc3RydWN0aW9uLT5hczxP
cENhdGNoPigpLm1ldGFkYXRhKGNhbGxGcmFtZSkubV9idWZmZXI7CiAgICAgSlNWYWx1ZSogZGF0
YUJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KGRmZ0NvbW1vbi0+Y2F0Y2hPU1JF
bnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuaAppbmRleCBkODE2NzdhMWMyY2U1YmI3NmU4YmM0MzJkNzllYmZmODc4ZGYzYTRkLi5j
Zjk2ZDcxOGFkN2I0ZWFmMjM0MWEzZGQ1YTBlMzNlNTUxNTZmNzExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCkBAIC01Myw3ICs1Myw3IEBAIHN0cnVjdCBPU1JFbnRy
eVJlc2h1ZmZsaW5nIHsKIH07CiAKIHN0cnVjdCBPU1JFbnRyeURhdGEgewotICAgIHVuc2lnbmVk
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxPU1JFbnRyeVB0clRhZz4gbV9tYWNoaW5lQ29kZTsKICAgICBP
cGVyYW5kczxBYnN0cmFjdFZhbHVlPiBtX2V4cGVjdGVkVmFsdWVzOwogICAgIC8vIFVzZSBiaXR2
ZWN0b3JzIGhlcmUgYmVjYXVzZSB0aGV5IHRlbmQgdG8gb25seSByZXF1aXJlIG9uZSB3b3JkLgpA
QCAtNjYsNyArNjYsNyBAQCBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKIH07CiAKLWlubGluZSB1bnNpZ25lZCBnZXRPU1JFbnRyeURhdGFC
eXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSogb3NyRW50cnlEYXRhKQoraW5saW5lIEJ5dGVjb2Rl
SW5kZXggZ2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRleChPU1JFbnRyeURhdGEqIG9zckVudHJ5
RGF0YSkKIHsKICAgICByZXR1cm4gb3NyRW50cnlEYXRhLT5tX2J5dGVjb2RlSW5kZXg7CiB9CkBA
IC03NiwxNyArNzYsMTcgQEAgc3RydWN0IENhdGNoRW50cnlwb2ludERhdGEgewogICAgIC8vIGFy
ZSBvZiB0aGUgZXhwZWN0ZWQgdHlwZSBiZWZvcmUgZW50ZXJpbmcgYXQgYSBjYXRjaCBibG9jay4K
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbWFjaGlu
ZUNvZGU7CiAgICAgVmVjdG9yPEZsdXNoRm9ybWF0PiBhcmd1bWVudEZvcm1hdHM7Ci0gICAgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleDsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiB9
OwogCiAvLyBSZXR1cm5zIGEgcG9pbnRlciB0byBhIGRhdGEgYnVmZmVyIHRoYXQgdGhlIE9TUiBl
bnRyeSB0aHVuayB3aWxsIHJlY29nbml6ZSBhbmQKIC8vIHBhcnNlLiBJZiB0aGlzIHJldHVybnMg
bnVsbCwgaXQgbWVhbnMgCi12b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mLCBDYWxsRnJhbWUqLCBD
b2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKK3ZvaWQqIHByZXBhcmVPU1JFbnRy
eShWTSYsIENhbGxGcmFtZSosIENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgpOwogCiAvLyBJZiBu
dWxsIGlzIHJldHVybmVkLCB3ZSBjYW4ndCBPU1IgZW50ZXIuIElmIGl0J3Mgbm90IG51bGwsIGl0
J3MgdGhlIFBDIHRvIGp1bXAgdG8uCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NSRW50cnkoVk0mLCBDYWxsRnJhbWUqLCBDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShWTSYsIENhbGxGcmFtZSos
IENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgpOwogI2Vsc2UKLWlubGluZSBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZU9TUkVudHJ5KFZNJiwgQ2Fs
bEZyYW1lKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQpIHsgcmV0dXJuIG51bGxwdHI7IH0KK2lubGlu
ZSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZU9T
UkVudHJ5KFZNJiwgQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCkgeyByZXR1
cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZS5jcHAKaW5kZXggOWU2Y2M2ZmQzOWM1MDJmMWQ3MjA1MTFkMDQ3ZWY1OWJlN2Fh
ZWM0ZC4uZGM3NmJjYmFlZDQxZWVlMDYzZGZkYmVhODQ1MDY2NTUzZDBjYjRkNiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZS5jcHAKQEAgLTUwLDEwICs1MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1fZ3JhcGgubV9wbGFuLm1vZGUoKSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CiAK
LSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5
Qnl0ZWNvZGVJbmRleCgpOworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBt
X2dyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5k
ZXggIT0gVUlOVF9NQVgpOwotICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSk7CisKICAgICAgICAgLy8gTmVlZGVkIGJ5IGNyZWF0ZVByZUhlYWRl
cigpLgogICAgICAgICBtX2dyYXBoLmVuc3VyZUNQU0RvbWluYXRvcnMoKTsKICAgICAgICAgCkBA
IC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICAgICAgQmFzaWNCbG9jayogbmV3Um9vdCA9IGlu
c2VydGlvblNldC5pbnNlcnQoMCwgMSk7CiAKICAgICAgICAgLy8gV2UnZCByZWFsbHkgbGlrZSB0
byB1c2UgYW4gdW5zZXQgb3JpZ2luLCBidXQgVGhyZWFkZWRDUFMgd29uJ3QgYWxsb3cgdGhhdC4K
LSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4oMCksIENv
ZGVPcmlnaW4oMCksIGZhbHNlKTsKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBOb2RlT3Jp
Z2luKENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRl
eCgwKSksIGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxOb2RlKj4gbG9jYWxzKGJh
c2VsaW5lLT5udW1DYWxsZWVMb2NhbHMoKSk7CiAgICAgICAgIGZvciAoaW50IGxvY2FsID0gMDsg
bG9jYWwgPCBiYXNlbGluZS0+bnVtQ2FsbGVlTG9jYWxzKCk7ICsrbG9jYWwpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IDhlZjc4MzQyOWFmYzNiNTYzYWQw
MTI1YzdhZmM0OGQ0Y2NhZjliZWIuLmFlZTNkYzI4Zjg2NWQzODExMTNmMzllMzhhMTc3MjczZmRl
OTA0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtNDA1
LDcgKzQwNSw3IEBAIHZvaWQgT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQoQ29udGV4dCYgY29udGV4
dCkKICAgICAgICAgYm9vbCBleGl0VG9MTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJ
bnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuazsKICAgICAgICAgdm9pZCoganVtcFRhcmdldDsKICAgICAgICAgaWYgKGV4aXRUb0xM
SW50KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgICAg
ICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9uID0gKmNvZGVCbG9ja0ZvckV4
aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlT2Zmc2V0KS5wdHIoKTsKICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50
OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgICAg
ICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsgICAgCkBA
IC03ODYsNyArNzg2LDcgQEAgc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDb250
ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIG91dGVybW9zdEJhc2VsaW4KICAgICAgICAgICAgIGNh
bGxlckZyYW1lID0gZnJhbWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0
KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVD
b2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGNhbGxCeXRlY29kZUluZGV4ID0gdHJ1ZUNhbGxlci0+Ynl0ZWNvZGVJ
bmRleCgpOworICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IHRy
dWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQg
PSBjYWxsZXJSZXR1cm5QQyhiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgY2FsbEJ5dGVjb2Rl
SW5kZXgsIHRydWVDYWxsZXJDYWxsS2luZCwgY2FsbGVySXNMTEludCk7CiAKICAgICAgICAgICAg
IGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKSkKQEAgLTg4MSwxMyArODgxLDEzIEBA
IHN0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDb250ZXh0JiBjb250ZXh0LCBWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrCiAKICAgICBpZiAoZXhpdFN0YXRlLT5pc0p1bXBUb0xM
SW50KSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29k
ZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJh
c2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBleGl0
Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9u
JiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCku
YXQoYnl0ZWNvZGVPZmZzZXQpLnB0cigpOworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIGNvbnN0
IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5z
dHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAKICAgICAgICAgY29udGV4dC5n
cHIoTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikgPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKSA9IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9uc1Jhd1Bv
aW50ZXIoKSk7Ci0gICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSA9
IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
KTsKKyAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpID0gc3RhdGlj
X2Nhc3Q8dWludHB0cl90PihleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkub2Zmc2V0
KCkpOwogI2Vsc2UKICAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIp
ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oJmN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZW5kaWYK
QEAgLTkwNSwxMCArOTA1LDEwIEBAIHN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChDb250ZXh0JiBj
b250ZXh0LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIENvZGVCbG9jayog
YWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CiAgICAgRXhpdEtpbmQga2lu
ZCA9IGV4aXQubV9raW5kOwotICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2Nv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZz
ZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAKICAgICBkYXRhTG9nKCJT
cGVjdWxhdGlvbiBmYWlsdXJlIGluICIsICpjb2RlQmxvY2spOwotICAgIGRhdGFMb2coIiBAIGV4
aXQgIyIsIG9zckV4aXRJbmRleCwgIiAoYmMjIiwgYnl0ZWNvZGVPZmZzZXQsICIsICIsIGV4aXRL
aW5kVG9TdHJpbmcoa2luZCksICIpIHdpdGggIik7CisgICAgZGF0YUxvZygiIEAgZXhpdCAjIiwg
b3NyRXhpdEluZGV4LCAiICgiLCBieXRlY29kZU9mZnNldCwgIiwgIiwgZXhpdEtpbmRUb1N0cmlu
ZyhraW5kKSwgIikgd2l0aCAiKTsKICAgICBpZiAoYWx0ZXJuYXRpdmUpIHsKICAgICAgICAgZGF0
YUxvZygKICAgICAgICAgICAgICJleGVjdXRlQ291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5qaXRF
eGVjdXRlQ291bnRlcigpLApAQCAtMTExMyw3ICsxMTEzLDcgQEAgdm9pZCBPU1JFeGl0Ojpjb21w
aWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBj
b25zdAogICAgICAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5l
dyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CiAgICAgICAgIGRlYnVnSW5mby0+Y29kZUJs
b2NrID0gaml0LmNvZGVCbG9jaygpOwogICAgICAgICBkZWJ1Z0luZm8tPmtpbmQgPSBleGl0Lm1f
a2luZDsKLSAgICAgICAgZGVidWdJbmZvLT5ieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgZGVidWdJbmZvLT5ieXRlY29kZUluZGV4ID0g
ZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogCiAgICAgICAgIGppdC5kZWJ1Z0Nh
bGwodm0sIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUsIGRlYnVnSW5mbyk7
CiAgICAgfQpAQCAtMTY3MCw3ICsxNjcwLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6
OmRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoQ2FsbEZyYW1lKiBjYWwKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGRlYnVnSW5mby0+Y29kZUJsb2NrOwogICAgIENvZGVC
bG9jayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CiAgICAgZGF0YUxv
ZygiU3BlY3VsYXRpb24gZmFpbHVyZSBpbiAiLCAqY29kZUJsb2NrKTsKLSAgICBkYXRhTG9nKCIg
QCBleGl0ICMiLCB2bS5vc3JFeGl0SW5kZXgsICIgKGJjIyIsIGRlYnVnSW5mby0+Ynl0ZWNvZGVP
ZmZzZXQsICIsICIsIGV4aXRLaW5kVG9TdHJpbmcoZGVidWdJbmZvLT5raW5kKSwgIikgd2l0aCAi
KTsKKyAgICBkYXRhTG9nKCIgQCBleGl0ICMiLCB2bS5vc3JFeGl0SW5kZXgsICIgKCIsIGRlYnVn
SW5mby0+Ynl0ZWNvZGVJbmRleCwgIiwgIiwgZXhpdEtpbmRUb1N0cmluZyhkZWJ1Z0luZm8tPmtp
bmQpLCAiKSB3aXRoICIpOwogICAgIGlmIChhbHRlcm5hdGl2ZSkgewogICAgICAgICBkYXRhTG9n
KAogICAgICAgICAgICAgImV4ZWN1dGVDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPmppdEV4ZWN1
dGVDb3VudGVyKCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCmluZGV4IDI1
NzA0ZDJjYjk4MGFlMjI0MmRkMWZmZTY5M2I0YzdkOThiYjNjMmIuLmQxZmM1ZjFmNmI0MDAwYmQ3
ZGNlZjMzNzI3ZDZjOTY3ZTFiNTE1YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdC5oCkBAIC0xNzYsNyArMTc2LDcgQEAgc3RydWN0IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVn
SW5mbyB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrOwogICAgIEV4aXRLaW5kIGtpbmQ7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQ7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OwogfTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IDIyZGU5ZTYxYmYwMjMxNmFhYmQyYjEw
YzVhNjAxZTNlNGY3N2QwZjguLjU0ODc3YjkxZDBiZmQ0ZjE4NDkxMDQxNjlmNzVjMTlmMzMzNDU0
NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIGhhbmRsZUV4aXRDb3Vu
dHMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIGRvbmVB
ZGp1c3RpbmcubGluaygmaml0KTsKIH0KIAotdm9pZCogY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgdW5zaWduZWQgY2FsbEJ5dGVjb2RlSW5kZXgs
IElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGJvb2wmIGNhbGxlcklz
TExJbnQpCit2b2lkKiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yQ2FsbGVyLCBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4LCBJbmxpbmVDYWxsRnJh
bWU6OktpbmQgdHJ1ZUNhbGxlckNhbGxLaW5kLCBib29sJiBjYWxsZXJJc0xMSW50KQogewogICAg
IGNhbGxlcklzTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXItPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRo
dW5rOwogCkBAIC0yNjMsNyArMjYzLDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAgICAgICAgIGNh
bGxlckZyYW1lR1BSID0gR1BSSW5mbzo6cmVnVDM7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5l
Q29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNhbGxCeXRl
Y29kZUluZGV4ID0gdHJ1ZUNhbGxlci0+Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgYXV0
byBjYWxsQnl0ZWNvZGVJbmRleCA9IHRydWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsKICAgICAg
ICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5QQyhiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlciwgY2FsbEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxsZXJDYWxsS2luZCwgY2FsbGVy
SXNMTEludCk7CiAKICAgICAgICAgICAgIGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUo
KSkgewpAQCAtMzgyLDggKzM4Miw4IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2
bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIHZvaWQq
IGp1bXBUYXJnZXQ7CiAgICAgYm9vbCBleGl0VG9MTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhp
dFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50
ZXJwcmV0ZXJUaHVuazsKICAgICBpZiAoZXhpdFRvTExJbnQpIHsKLSAgICAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9y
RXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVPZmZzZXQpLnB0cigpOworICAgICAgICBh
dXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Cisg
ICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2Nr
Rm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50
OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAg
ICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKQEAgLTM5NCw3ICszOTQsNyBAQCB2
b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdp
c3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5pbnN0
cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUik7Ci0gICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgTExJ
bnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNH
UFIpOwogI2Vsc2UKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KCZjdXJyZW50SW5zdHJ1Y3Rpb24pLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNv
bW1vbi5oCmluZGV4IDBjYWViMDBmM2FlMjk4MDU4N2NmYjEwOTM5YzQ5YzViMjA5YWRkMmEuLjRm
Yzk5NmYwMGQwY2IyODhhOGY0NDlmYWM1MjVlYzlmYzVjOTMyZDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaApAQCAtMzks
NyArMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiB2b2lkIGhhbmRsZUV4
aXRDb3VudHMoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhpdEJhc2UmKTsKIHZvaWQgcmVpZnlJ
bmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0QmFzZSYpOwogdm9p
ZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mLCBDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0
QmFzZSYpOwotdm9pZCogY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlciwgdW5zaWduZWQgY2FsbEJ5dGVjb2RlT2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6
OktpbmQgY2FsbGVyS2luZCwgYm9vbCYgY2FsbGVySXNMTEludCk7Cit2b2lkKiBjYWxsZXJSZXR1
cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBCeXRlY29kZUluZGV4
IGNhbGxCeXRlY29kZUluZGV4LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQgY2FsbGVyS2luZCwgYm9v
bCYgY2FsbGVySXNMTEludCk7CiBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlU2F2ZVNsb3Qo
SW5saW5lQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgR1BSUmVnIGNh
bGxlZVNhdmUpOwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSklUQ29kZVR5cGU+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCA5YTcyNTM2Nzc4MmM0OTlh
NzVlNjNkYzIxMTk3NzdlN2NjYzQ5NmQ5Li5lZDk2YTU2YjZmOWEzMmFlNDRjZDEzMjYyN2M0MzNi
ZjIxNjQyNjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAKQEAgLTM1ODMsNyArMzU4Myw3IEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVu
dENvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSoKICAgICBDT0RF
QkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgInRyaWdnZXJGVExSZXBsYWNlbWVudCIsICgpKTsK
ICAgICAvLyBXZSBuZWVkIHRvIGNvbXBpbGUgdGhlIGNvZGUuCiAgICAgY29tcGlsZSgKLSAgICAg
ICAgdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLCBGVExNb2RlLCBV
SU5UX01BWCwKKyAgICAgICAgdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSwgY29kZUJs
b2NrLCBGVExNb2RlLCBCeXRlY29kZUluZGV4KCksCiAgICAgICAgIE9wZXJhbmRzPE9wdGlvbmFs
PEpTVmFsdWU+PigpLCBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCkp
OwogCiAgICAgLy8gSWYgd2UgcmVhY2hlZCBoZXJlLCB0aGUgY291bnRlciBoYXMgbm90IGJlIHJl
c2V0LiBEbyB0aGF0IG5vdy4KQEAgLTM2MzcsNyArMzYzNyw3IEBAIHZvaWQgSklUX09QRVJBVElP
TiB0cmlnZ2VyVGllclVwTm93KFZNKiB2bVBvaW50ZXIpCiAgICAgfQogfQogCi1zdGF0aWMgY2hh
ciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkIG9y
aWdpbkJ5dGVjb2RlSW5kZXgsIGJvb2wgY2FuT1NSRW50ZXJIZXJlKQorc3RhdGljIGNoYXIqIHRp
ZXJVcENvbW1vbihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBCeXRlY29kZUluZGV4IG9y
aWdpbkJ5dGVjb2RlSW5kZXgsIGJvb2wgY2FuT1NSRW50ZXJIZXJlKQogewogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIApAQCAtMzY5MCw3ICszNjkw
LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZy
YW1lLCB1bnNpZ25lZCBvcmlnaW5CeXRlY29kZUkKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJPU1IgZW50cnk6
IEZyb20gIiwgUmF3UG9pbnRlcihqaXRDb2RlKSwgIiBnb3QgZW50cnkgYmxvY2sgIiwgUmF3UG9p
bnRlcihlbnRyeUJsb2NrKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgaWYgKHZvaWQqIGFkZHJl
c3MgPSBGVEw6OnByZXBhcmVPU1JFbnRyeSh2bSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIGVudHJ5
QmxvY2ssIG9yaWdpbkJ5dGVjb2RlSW5kZXgsIHN0cmVhbUluZGV4KSkgewotICAgICAgICAgICAg
ICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGVudHJ5QmxvY2ssICJvc3JFbnRyeSIsICgiYXQg
YmMjIiwgb3JpZ2luQnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgICAgICBDT0RFQkxP
Q0tfTE9HX0VWRU5UKGVudHJ5QmxvY2ssICJvc3JFbnRyeSIsICgiYXQgIiwgb3JpZ2luQnl0ZWNv
ZGVJbmRleCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0YWdDb2RlUHRyPGNoYXIq
PihhZGRyZXNzLCBKU0VudHJ5UHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihjYWxsRnJhbWUp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zNzc1LDcgKzM3NzUsNyBA
QCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IHVuc2lnbmVkIG9yaWdpbkJ5dGVjb2RlSQogICAgICAgICAgICAgLy8gZXhlY3V0aW5nIHRvIGNv
bXBpbGUuIFdlIHN0YXJ0IHdpdGggdHJ5aW5nIHRvIGNvbXBpbGUgb3V0ZXIgbG9vcHMgc2luY2Ug
d2UgYmVsaWV2ZSBvdXRlciBsb29wCiAgICAgICAgICAgICAvLyBjb21waWxhdGlvbnMgcmV2ZWFs
IHRoZSBiZXN0IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXppbmcgY29kZS4KICAgICAgICAgICAg
IGZvciAoYXV0byBpdGVyID0gdGllclVwSGllcmFyY2h5RW50cnktPnZhbHVlLnJiZWdpbigpLCBl
bmQgPSB0aWVyVXBIaWVyYXJjaHlFbnRyeS0+dmFsdWUucmVuZCgpOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgb3NyRW50cnlDYW5kaWRhdGUgPSAqaXRl
cjsKKyAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IG9zckVudHJ5Q2FuZGlkYXRlID0gKml0
ZXI7CiAKICAgICAgICAgICAgICAgICBpZiAoaml0Q29kZS0+dGllclVwRW50cnlUcmlnZ2Vycy5n
ZXQob3NyRW50cnlDYW5kaWRhdGUpID09IEpJVENvZGU6OlRyaWdnZXJSZWFzb246OlN0YXJ0Q29t
cGlsYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGFs
cmVhZHkgYXNrZWQgdGhpcyBsb29wIHRvIGNvbXBpbGUuIElmIHdlJ3ZlIHJlYWNoZWQgaGVyZSwg
aXQKQEAgLTM3ODcsNyArMzc4Nyw3IEBAIHN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oVk0mIHZt
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQgb3JpZ2luQnl0ZWNvZGVJCiAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSBhc2sgdGhlIG91dGVyIHRvIGxvb3AgdG8gaW1t
ZWRpYXRlbHkgY29tcGlsZSBpdHNlbGYgaWYgcHJvZ3JhbQogICAgICAgICAgICAgICAgIC8vIGNv
bnRyb2wgcmVhY2hlcyBpdC4KICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbm5lci1sb29wIGJjIyIsIG9yaWdp
bkJ5dGVjb2RlSW5kZXgsICIgaW4gIiwgKmNvZGVCbG9jaywgIiBzZXR0aW5nIHBhcmVudCBsb29w
IGJjIyIsIG9zckVudHJ5Q2FuZGlkYXRlLCAiJ3MgdHJpZ2dlciBhbmQgYmFja2luZyBvZmYuXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiSW5uZXItbG9vcCAiLCBvcmlnaW5CeXRl
Y29kZUluZGV4LCAiIGluICIsICpjb2RlQmxvY2ssICIgc2V0dGluZyBwYXJlbnQgbG9vcCAiLCBv
c3JFbnRyeUNhbmRpZGF0ZSwgIidzIHRyaWdnZXIgYW5kIGJhY2tpbmcgb2ZmLlxuIik7CiAgICAg
ICAgICAgICAgICAgaml0Q29kZS0+dGllclVwRW50cnlUcmlnZ2Vycy5zZXQob3NyRW50cnlDYW5k
aWRhdGUsIEpJVENvZGU6OlRyaWdnZXJSZWFzb246OlN0YXJ0Q29tcGlsYXRpb24pOwogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMzgzNyw3ICszODM3LDcg
QEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1l
LCB1bnNpZ25lZCBvcmlnaW5CeXRlY29kZUkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogICAgIAotICAgIENPREVCTE9DS19MT0dfRVZFTlQoaml0Q29kZS0+b3NyRW50cnlCbG9jaygp
LCAib3NyRW50cnkiLCAoImF0IGJjIyIsIG9yaWdpbkJ5dGVjb2RlSW5kZXgpKTsKKyAgICBDT0RF
QkxPQ0tfTE9HX0VWRU5UKGppdENvZGUtPm9zckVudHJ5QmxvY2soKSwgIm9zckVudHJ5IiwgKCJh
dCAiLCBvcmlnaW5CeXRlY29kZUluZGV4KSk7CiAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRo
ZSBmb3ItZW50cnkgY29tcGlsZSBhbHJlYWR5IHN1Y2NlZWRlZC4gSW4gdGhhdCBjYXNlIE9TUgog
ICAgIC8vIGVudHJ5IHdpbGwgc3VjY2VlZCB1bmxlc3Mgd2UgcmFuIG91dCBvZiBzdGFjay4gSXQn
cyBub3QgY2xlYXIgd2hhdCB3ZSBzaG91bGQgZG8uCiAgICAgLy8gV2Ugc2lnbmFsIHRvIHRyeSBh
Z2FpbiBhZnRlciBhIHdoaWxlIGlmIHRoYXQgaGFwcGVucy4KQEAgLTM4NTAsMTMgKzM4NTAsMTQg
QEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1l
LCB1bnNpZ25lZCBvcmlnaW5CeXRlY29kZUkKICAgICByZXR1cm4gcmV0YWdDb2RlUHRyPGNoYXIq
PihhZGRyZXNzLCBKU0VudHJ5UHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihjYWxsRnJhbWUp
KTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3dJbkxvb3AoVk0qIHZt
UG9pbnRlciwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK3ZvaWQgSklUX09QRVJBVElPTiB0cmln
Z2VyVGllclVwTm93SW5Mb29wKFZNKiB2bVBvaW50ZXIsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXhC
aXRzKQogewogICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhl
YXApOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
KyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4Ojpmcm9tQml0
cyhieXRlY29kZUluZGV4Qml0cyk7CiAKICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0pOwogCkBA
IC0zODg1LDEzICszODg2LDE0IEBAIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93
SW5Mb29wKFZNKiB2bVBvaW50ZXIsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgfQogfQog
Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhWTSogdm1Qb2ludGVyLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4KQorY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50
cnlOb3coVk0qIHZtUG9pbnRlciwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleEJpdHMpCiB7CiAgICAg
Vk0mIHZtID0gKnZtUG9pbnRlcjsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRzKGJ5dGVjb2RlSW5k
ZXhCaXRzKTsKIAogICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKaW5kZXggNDU3OTZmZmE2ZDA1OTQ4ZmM2NmVkYzUz
YzhiMTI0MjYxYjhhMWJhYi4uOTRmNGM4MjJiNTg1MDQ3OGIyMmZiNzNiYmZiMTg2YWZjZjNjM2I4
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKQEAgLTMwNCw4
ICszMDQsOCBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SYW5kb20oSlNHbG9iYWxP
YmplY3QqKTsKIAogI2lmIEVOQUJMRShGVExfSklUKQogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdn
ZXJUaWVyVXBOb3coVk0qKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dl
clRpZXJVcE5vd0luTG9vcChWTSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIFdURl9JTlRFUk5B
TDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KFZNKiwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJU
aWVyVXBOb3dJbkxvb3AoVk0qLCB1bnNpZ25lZCBieXRlY29kZUluZGV4Qml0cykgV1RGX0lOVEVS
TkFMOworY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coVk0qLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4Qml0cykgV1RGX0lOVEVSTkFMOwogI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQogCiB9IC8vIGV4dGVybiAiQyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
CmluZGV4IDMwMDBjMzE5YzZjOGRjNWY3YmE1YTk3MzU1NDAzMWI4ZmNiYzE0ZGIuLmQ0MWEzZDQ5
OTdjMThhYTU2YTNkMjk4ODk0OWJlNTFjNDZmNDdlZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcApAQCAtMTM0LDcgKzEzNCw3IEBAIFByb2ZpbGVyOjpDb21waWxhdGlvbktp
bmQgcHJvZmlsZXJDb21waWxhdGlvbktpbmRGb3JNb2RlKENvbXBpbGF0aW9uTW9kZSBtb2RlKQog
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKIFBsYW46OlBsYW4oQ29kZUJsb2NrKiBwYXNzZWRD
b2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssCi0gICAgQ29tcGlsYXRp
b25Nb2RlIG1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICBDb21waWxh
dGlvbk1vZGUgbW9kZSwgQnl0ZWNvZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAg
Y29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzKQogICAg
IDogbV9tb2RlKG1vZGUpCiAgICAgLCBtX3ZtKCZwYXNzZWRDb2RlQmxvY2stPnZtKCkpCkBAIC0y
NDAsOSArMjQwLDkgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocmVh
ZEltcGwoKQogewogICAgIGNsZWFuTXVzdEhhbmRsZVZhbHVlc0lmTmVjZXNzYXJ5KCk7CiAKLSAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZChtX21vZGUpICYmIG1fb3NyRW50cnlCeXRl
Y29kZUluZGV4ICE9IFVJTlRfTUFYKSB7CisgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJs
ZWQobV9tb2RlKSAmJiBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleCkgewogICAgICAgICBkYXRhTG9n
KCJcbiIpOwotICAgICAgICBkYXRhTG9nKCJDb21waWxlciBtdXN0IGhhbmRsZSBPU1IgZW50cnkg
ZnJvbSBiYyMiLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleCwgIiB3aXRoIHZhbHVlczogIiwgbV9t
dXN0SGFuZGxlVmFsdWVzLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiQ29tcGlsZXIgbXVzdCBo
YW5kbGUgT1NSIGVudHJ5IGZyb20gIiwgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgsICIgd2l0aCB2
YWx1ZXM6ICIsIG1fbXVzdEhhbmRsZVZhbHVlcywgIlxuIik7CiAgICAgICAgIGRhdGFMb2coIlxu
Iik7CiAgICAgfQogCkBAIC03MjUsNyArNzI1LDcgQEAgdm9pZCBQbGFuOjpjbGVhbk11c3RIYW5k
bGVWYWx1ZXNJZk5lY2Vzc2FyeSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIENvZGVCbG9jayog
YWx0ZXJuYXRpdmUgPSBtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKLSAgICBGYXN0Qml0VmVj
dG9yIGxpdmVuZXNzID0gYWx0ZXJuYXRpdmUtPmxpdmVuZXNzQW5hbHlzaXMoKS5nZXRMaXZlbmVz
c0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGFsdGVybmF0aXZlLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRl
eCk7CisgICAgRmFzdEJpdFZlY3RvciBsaXZlbmVzcyA9IGFsdGVybmF0aXZlLT5saXZlbmVzc0Fu
YWx5c2lzKCkuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KGFsdGVybmF0aXZlLCBtX29z
ckVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gbV9tdXN0
SGFuZGxlVmFsdWVzLm51bWJlck9mTG9jYWxzKCk7IGxvY2FsLS07KSB7CiAgICAgICAgIGlmICgh
bGl2ZW5lc3NbbG9jYWxdKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAppbmRleCBjZWRh
MDQwMjBkODBlNjdjYTE5ZTJjZmUyOTI5NWZkNzE2YzY4NzVjLi5hNmFjYjI1OTg3MzlhMzQwNDc1
NTA3NTdkOWMxNzBmNjY2MzU5NjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaApA
QCAtNTYsNyArNTYsNyBAQCBjbGFzcyBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PFBsYW4+IHsKIHB1YmxpYzoKICAgICBQbGFuKAogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
a1RvQ29tcGlsZSwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywKLSAgICAgICAgQ29t
cGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgICAgIENv
bXBpbGF0aW9uTW9kZSwgQnl0ZWNvZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAg
ICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyk7
CiAgICAgflBsYW4oKTsKIApAQCAtODcsNyArODcsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
RlRMKCkgY29uc3QgeyByZXR1cm4gREZHOjppc0ZUTChtX21vZGUpOyB9CiAgICAgQ29tcGlsYXRp
b25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KLSAgICB1bnNpZ25lZCBvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX29zckVudHJ5Qnl0ZWNvZGVJbmRl
eDsgfQorICAgIEJ5dGVjb2RlSW5kZXggb3NyRW50cnlCeXRlY29kZUluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXg7IH0KICAgICBjb25zdCBPcGVyYW5kczxPcHRp
b25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX211c3RI
YW5kbGVWYWx1ZXM7IH0KICAgICBUaHJlYWREYXRhKiB0aHJlYWREYXRhKCkgY29uc3QgeyByZXR1
cm4gbV90aHJlYWREYXRhOyB9CiAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsYXRpb24uZ2V0KCk7IH0KQEAgLTEwNiw4ICsxMDYs
OCBAQCBwdWJsaWM6CiAgICAgYm9vbCB3aWxsVHJ5VG9UaWVyVXAoKSBjb25zdCB7IHJldHVybiBt
X3dpbGxUcnlUb1RpZXJVcDsgfQogICAgIHZvaWQgc2V0V2lsbFRyeVRvVGllclVwKGJvb2wgd2ls
bFRyeVRvVGllclVwKSB7IG1fd2lsbFRyeVRvVGllclVwID0gd2lsbFRyeVRvVGllclVwOyB9CiAK
LSAgICBIYXNoTWFwPHVuc2lnbmVkLCBWZWN0b3I8dW5zaWduZWQ+PiYgdGllclVwSW5Mb29wSGll
cmFyY2h5KCkgeyByZXR1cm4gbV90aWVyVXBJbkxvb3BIaWVyYXJjaHk7IH0KLSAgICBWZWN0b3I8
dW5zaWduZWQ+JiB0aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2RlcygpIHsgcmV0dXJuIG1fdGllclVw
QW5kT1NSRW50ZXJCeXRlY29kZXM7IH0KKyAgICBIYXNoTWFwPEJ5dGVjb2RlSW5kZXgsIFZlY3Rv
cjxCeXRlY29kZUluZGV4Pj4mIHRpZXJVcEluTG9vcEhpZXJhcmNoeSgpIHsgcmV0dXJuIG1fdGll
clVwSW5Mb29wSGllcmFyY2h5OyB9CisgICAgVmVjdG9yPEJ5dGVjb2RlSW5kZXg+JiB0aWVyVXBB
bmRPU1JFbnRlckJ5dGVjb2RlcygpIHsgcmV0dXJuIG1fdGllclVwQW5kT1NSRW50ZXJCeXRlY29k
ZXM7IH0KIAogICAgIGVudW0gU3RhZ2UgeyBQcmVwYXJpbmcsIENvbXBpbGluZywgUmVhZHksIENh
bmNlbGxlZCB9OwogICAgIFN0YWdlIHN0YWdlKCkgY29uc3QgeyByZXR1cm4gbV9zdGFnZTsgfQpA
QCAtMTQzLDcgKzE0Myw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fd2lsbFRyeVRvVGllclVw
IHsgZmFsc2UgfTsKIAotICAgIGNvbnN0IHVuc2lnbmVkIG1fb3NyRW50cnlCeXRlY29kZUluZGV4
OworICAgIGNvbnN0IEJ5dGVjb2RlSW5kZXggbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKICAg
ICBUaHJlYWREYXRhKiBtX3RocmVhZERhdGE7CiAKQEAgLTE1OSw4ICsxNTksOCBAQCBwcml2YXRl
OgogICAgIERlc2lyZWRHbG9iYWxQcm9wZXJ0aWVzIG1fZ2xvYmFsUHJvcGVydGllczsKICAgICBS
ZWNvcmRlZFN0YXR1c2VzIG1fcmVjb3JkZWRTdGF0dXNlczsKIAotICAgIEhhc2hNYXA8dW5zaWdu
ZWQsIFZlY3Rvcjx1bnNpZ25lZD4+IG1fdGllclVwSW5Mb29wSGllcmFyY2h5OwotICAgIFZlY3Rv
cjx1bnNpZ25lZD4gbV90aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2RlczsKKyAgICBIYXNoTWFwPEJ5
dGVjb2RlSW5kZXgsIFZlY3RvcjxCeXRlY29kZUluZGV4Pj4gbV90aWVyVXBJbkxvb3BIaWVyYXJj
aHk7CisgICAgVmVjdG9yPEJ5dGVjb2RlSW5kZXg+IG1fdGllclVwQW5kT1NSRW50ZXJCeXRlY29k
ZXM7CiAKICAgICBTdGFnZSBtX3N0YWdlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKaW5kZXggZmI5ZTQ3MGI0N2U5NjUzNDRl
MDlkYzYxMTU4ZGVjNmIxMmRiZTNlYi4uNDM2ZTVkMzkxNGIzMjM1YTAyNDdmYzQxODQ3MTYzMTFk
Njc2ODY1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252
ZXJzaW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcApAQCAtOTcsMTQgKzk3LDE0IEBAIHB1YmxpYzoKIAogICAgICAgICAg
ICAgICAgIGlmIChvbGRSb290LT5pc0NhdGNoRW50cnlwb2ludCkgewogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoISFlbnRyeXBvaW50SW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0LmFkZChlbnRyeXBvaW50
SW5kZXgsIG9sZFJvb3QtPmJ5dGVjb2RlQmVnaW4pOworICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlSW5kZXguYWRkKGVudHJ5cG9pbnRJ
bmRleCwgb2xkUm9vdC0+Ynl0ZWNvZGVCZWdpbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeVN3aXRjaERhdGEtPmNh
c2VzWzBdID09IG1fZ3JhcGguYmxvY2soMCkpOyAvLyBXZSBzdHJvbmdseSBhc3N1bWUgdGhlIG5v
cm1hbCBjYWxsIGVudHJ5cG9pbnQgaXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuCiAKICAg
ICAgICAgICAgIGNvbnN0IGJvb2wgZXhpdE9LID0gZmFsc2U7Ci0gICAgICAgICAgICBOb2RlT3Jp
Z2luIG9yaWdpbiB7IENvZGVPcmlnaW4oMCksIENvZGVPcmlnaW4oMCksIGV4aXRPSyB9OworICAg
ICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4geyBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkp
LCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpLCBleGl0T0sgfTsKICAgICAgICAgICAgIG5l
d1Jvb3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEVu
dHJ5U3dpdGNoLCBvcmlnaW4sIE9wSW5mbyhlbnRyeVN3aXRjaERhdGEpKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCAzZGFlYzQz
OTRlNzNiYzg2YzFjYzM3MDhmZjE5OWZhMTQzZjg5YWE2Li40NzQxNjE0YzU3YmQ4YzliZTYwZTY4
ZjNjMmE0MmVhNzA0NTc1MTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcApAQCAtMTg2MiwxMyArMTg2Miw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQogICAgICAgICAKICAgICAgICAgQVNTRVJUKG1f
Y3VycmVudE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKHZl
cmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgZGF0YUxvZ0YoCi0gICAg
ICAgICAgICAgICAgIlNwZWN1bGF0aXZlSklUIGdlbmVyYXRpbmcgTm9kZSBAJWQgKGJjIyV1KSBh
dCBKSVQgb2Zmc2V0IDB4JXgiLAotICAgICAgICAgICAgICAgIChpbnQpbV9jdXJyZW50Tm9kZS0+
aW5kZXgoKSwKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMu
Ynl0ZWNvZGVJbmRleCgpLCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKLSAgICAgICAgICAgIGRhdGFM
b2coIlxuIik7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJs
ZWQoKSkKKyAgICAgICAgICAgIGRhdGFMb2dMbigiU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBO
b2RlIEAiLCAoaW50KW1fY3VycmVudE5vZGUtPmluZGV4KCksICIgKCIsIG1fY3VycmVudE5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCksICIpIGF0IEpJVCBvZmZz
ZXQgMHgiLCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKIAogICAgICAgICBpZiAoT3B0aW9uczo6dmFs
aWRhdGVERkdFeGNlcHRpb25IYW5kbGluZygpICYmIChtYXlFeGl0KG1faml0LmdyYXBoKCksIG1f
Y3VycmVudE5vZGUpICE9IERvZXNOb3RFeGl0IHx8IG1fY3VycmVudE5vZGUtPmlzVGVybWluYWwo
KSkpCiAgICAgICAgICAgICBtX2ppdC5qaXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24obV9qaXQu
dm0oKSk7CkBAIC0xOTA1LDcgKzE5MDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q3VycmVudEJsb2NrKCkKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygp
CiB7CiAgICAgQVNTRVJUKCFtX2N1cnJlbnROb2RlKTsKLSAgICBtX29yaWdpbiA9IE5vZGVPcmln
aW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgdHJ1ZSk7CisgICAgbV9vcmlnaW4gPSBO
b2RlT3JpZ2luKENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSksIENvZGVPcmlnaW4oQnl0ZWNv
ZGVJbmRleCgwKSksIHRydWUpOwogCiAgICAgYXV0byYgYXJndW1lbnRzID0gbV9qaXQuZ3JhcGgo
KS5tX3Jvb3RUb0FyZ3VtZW50cy5maW5kKG1faml0LmdyYXBoKCkuYmxvY2soMCkpLT52YWx1ZTsK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCk7ICsraSkgewpAQCAtMzk5OCw4ICszOTkzLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlQWRkKE5vZGUqIG5vZGUpCiAjZW5kaWYKIAogICAgIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVJbmRleCk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5
dGVjb2RlSW5kZXgpOwogICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5h
ZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0g
b3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlv
biA9IG9wZXJhdGlvblZhbHVlQWRkOwpAQCAtNDAyMiw4ICs0MDE3LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5vZGUqIG5vZGUpCiAjZW5kaWYKIAogICAgICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVC
bG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICB1bnNpZ25lZCBieXRlY29k
ZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAg
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9m
aWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7
CisgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2st
PmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIEpJ
VFN1YklDKiBzdWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0aFByb2Zp
bGUpOwogICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3Vi
T3B0aW1pemU7CiAgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
VmFsdWVTdWI7CkBAIC00NjE2LDggKzQ2MTEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhTdWIoTm9kZSogbm9kZSkKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1
ZU5lZ2F0ZShOb2RlKiBub2RlKQogewogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sg
PSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yyk7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5i
eXRlY29kZUluZGV4KCk7Ci0gICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7
CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2Vs
aW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
OwogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJQyhh
cml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJp
dGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJh
dGlvbkFyaXRoTmVnYXRlOwpAQCAtNDgzOSw4ICs0ODM0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVZhbHVlTXVsKE5vZGUqIG5vZGUpCiAjZW5kaWYKIAogICAgIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgQXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZz
ZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVE11bElDKiBtdWxJQyA9IG1faml0LmNvZGVCbG9j
aygpLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0
aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwpAQCAtMTA3MzEsNyArMTA3MjYsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoQ2hhclN0cmluZ0p1bXAoTm9kZSogbm9kZSwgU3dp
dGNoRGF0YSogZGF0YSwgR1BSUgogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaCwgU3RyaW5nSW1wbDo6bGVuZ3RoTWVtb3J5T2Zmc2V0KCkpLAogICAgICAgICAgICAg
VHJ1c3RlZEltbTMyKDEpKSwKICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spOwotCisg
ICAgCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoLCBT
dHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCB2YWx1ZSk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXM4Qml0ID0gbV9qaXQuYnJhbmNoVGVzdDMyKApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggMDY0ZGU3MWUwOTJlOWY1
MjQxMjk2NWUxY2U5M2JiM2FlNjU4NjViZS4uZjc1NzlmYzliODI1NGEwOGJhODIzMWNlNjg0MjQ2
NGE4YzQ4OGM3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCkBAIC01MDc5LDEzICs1MDc5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJT
YXZlUGxhbj4gc2F2ZVBsYW5zOwogICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwo
ZmFsc2UsIHNhdmVQbGFucywgSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOworICAgICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0
ZWNvZGVJbmRleCgpOwogCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yTGFtYmRhKFs9XSgp
IHsKICAgICAgICAgICAgIGNhbGxUaWVyVXAubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICBz
aWxlbnRTcGlsbChzYXZlUGxhbnMpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbih0cmlnZ2Vy
VGllclVwTm93SW5Mb29wLCAmdm0oKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgpKTsKKyAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24odHJpZ2dlclRpZXJVcE5vd0luTG9vcCwgJnZtKCksIFRy
dXN0ZWRJbW0zMihieXRlY29kZUluZGV4LmFzQml0cygpKSk7CiAgICAgICAgICAgICBzaWxlbnRG
aWxsKHNhdmVQbGFucyk7CiAKICAgICAgICAgICAgIG1faml0Lmp1bXAoKS5saW5rVG8odG9OZXh0
T3BlcmF0aW9uLCAmbV9qaXQpOwpAQCAtNTExMyw3ICs1MTEzLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwogCi0gICAgICAgIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgp
OworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2Vt
YW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICBhdXRvIHRyaWdnZXJJdGVyYXRvciA9IG1f
aml0LmppdENvZGUoKS0+dGllclVwRW50cnlUcmlnZ2Vycy5maW5kKGJ5dGVjb2RlSW5kZXgpOwog
ICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIHRyaWdnZXJJdGVyYXRvciAh
PSBtX2ppdC5qaXRDb2RlKCktPnRpZXJVcEVudHJ5VHJpZ2dlcnMuZW5kKCkpOwogICAgICAgICBK
SVRDb2RlOjpUcmlnZ2VyUmVhc29uKiBmb3JjZUVudHJ5VHJpZ2dlciA9ICYobV9qaXQuaml0Q29k
ZSgpLT50aWVyVXBFbnRyeVRyaWdnZXJzLmZpbmQoYnl0ZWNvZGVJbmRleCktPnZhbHVlKTsKQEAg
LTUxMzgsNyArNTEzOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIG92ZXJmbG93ZWRDb3VudGVyLmxpbmsoJm1faml0KTsKIAogICAgICAg
ICAgICAgc2lsZW50U3BpbGwoc2F2ZVBsYW5zKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
dHJpZ2dlck9TUkVudHJ5Tm93LCB0ZW1wR1BSLCAmdm0oKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
SW5kZXgpKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24odHJpZ2dlck9TUkVudHJ5Tm93LCB0
ZW1wR1BSLCAmdm0oKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXguYXNCaXRzKCkpKTsKIAog
ICAgICAgICAgICAgaWYgKHNhdmVQbGFucy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQUikubGlua1RvKHRv
TmV4dE9wZXJhdGlvbiwgJm1faml0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4IDFiYWRjNTdj
MGI5MmIyM2FkMGY4NGQ4MTI5YWYxMWFjOGIyNzdlMjMuLmY1ZDczYzEwOWJjNzE3MDcxMjBhZjBl
MWY4YTRmYWJkNDJmOTQzNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcApAQCAtODUsOSArODUsOSBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLmVuc3VyZUNQU05hdHVyYWxMb29w
cygpOwogICAgICAgICBDUFNOYXR1cmFsTG9vcHMmIG5hdHVyYWxMb29wcyA9ICptX2dyYXBoLm1f
Y3BzTmF0dXJhbExvb3BzOwotICAgICAgICBIYXNoTWFwPGNvbnN0IE5hdHVyYWxMb29wKiwgdW5z
aWduZWQ+IG5hdHVyYWxMb29wVG9Mb29wSGludCA9IGJ1aWxkTmF0dXJhbExvb3BUb0xvb3BIaW50
TWFwKG5hdHVyYWxMb29wcyk7CisgICAgICAgIEhhc2hNYXA8Y29uc3QgTmF0dXJhbExvb3AqLCBC
eXRlY29kZUluZGV4PiBuYXR1cmFsTG9vcFRvTG9vcEhpbnQgPSBidWlsZE5hdHVyYWxMb29wVG9M
b29wSGludE1hcChuYXR1cmFsTG9vcHMpOwogCi0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIExv
b3BIaW50RGVzY3JpcHRvcj4gdGllclVwSGllcmFyY2h5OworICAgICAgICBIYXNoTWFwPEJ5dGVj
b2RlSW5kZXgsIExvb3BIaW50RGVzY3JpcHRvcj4gdGllclVwSGllcmFyY2h5OwogCiAgICAgICAg
IEluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9ncmFwaCk7CiAgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewpA
QCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgdGllclVwVHlw
ZSA9IENoZWNrVGllclVwSW5Mb29wOwogICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnROb2RlKG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCB0aWVyVXBUeXBlLCBvcmlnaW4pOwogCi0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG9yaWdpbi5zZW1hbnRpYy5i
eXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgYXV0byBieXRlY29kZUluZGV4ID0gb3Jp
Z2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICBpZiAoY2FuT1NS
RW50ZXIpCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnRpZXJVcEFuZE9TUkVu
dGVyQnl0ZWNvZGVzKCkuYXBwZW5kKGJ5dGVjb2RlSW5kZXgpOwogCkBAIC0xMzgsOCArMTM4LDgg
QEAgcHVibGljOgogCiAgICAgICAgIC8vIEFkZCBhbGwgdGhlIGNhbmRpZGF0ZXMgdGhhdCBjYW4g
YmUgT1NSIEVudGVyZWQuCiAgICAgICAgIGZvciAoYXV0byBlbnRyeSA6IHRpZXJVcEhpZXJhcmNo
eSkgewotICAgICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiB0aWVyVXBDYW5kaWRhdGVzOwotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZUluZGV4IDogZW50cnkudmFsdWUub3NyRW50
cnlDYW5kaWRhdGVzKSB7CisgICAgICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVJbmRleD4gdGllclVw
Q2FuZGlkYXRlczsKKyAgICAgICAgICAgIGZvciAoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
IDogZW50cnkudmFsdWUub3NyRW50cnlDYW5kaWRhdGVzKSB7CiAgICAgICAgICAgICAgICAgYXV0
byBkZXNjcmlwdG9ySXQgPSB0aWVyVXBIaWVyYXJjaHkuZmluZChieXRlY29kZUluZGV4KTsKICAg
ICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvckl0ICE9IHRpZXJVcEhpZXJhcmNoeS5lbmQoKQog
ICAgICAgICAgICAgICAgICAgICAmJiBkZXNjcmlwdG9ySXQtPnZhbHVlLmNhbk9TUkVudGVyKQpA
QCAtMTYwLDcgKzE2MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAjaWYgRU5BQkxFKEZUTF9KSVQp
CiAgICAgc3RydWN0IExvb3BIaW50RGVzY3JpcHRvciB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25l
ZD4gb3NyRW50cnlDYW5kaWRhdGVzOworICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVJbmRleD4gb3Ny
RW50cnlDYW5kaWRhdGVzOwogICAgICAgICBib29sIGNhbk9TUkVudGVyOwogICAgIH07CiAKQEAg
LTE4Myw5ICsxODMsOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
LSAgICBIYXNoTWFwPGNvbnN0IE5hdHVyYWxMb29wKiwgdW5zaWduZWQ+IGJ1aWxkTmF0dXJhbExv
b3BUb0xvb3BIaW50TWFwKGNvbnN0IENQU05hdHVyYWxMb29wcyYgbmF0dXJhbExvb3BzKQorICAg
IEhhc2hNYXA8Y29uc3QgTmF0dXJhbExvb3AqLCBCeXRlY29kZUluZGV4PiBidWlsZE5hdHVyYWxM
b29wVG9Mb29wSGludE1hcChjb25zdCBDUFNOYXR1cmFsTG9vcHMmIG5hdHVyYWxMb29wcykKICAg
ICB7Ci0gICAgICAgIEhhc2hNYXA8Y29uc3QgTmF0dXJhbExvb3AqLCB1bnNpZ25lZD4gbmF0dXJh
bExvb3BzVG9Mb29wSGludDsKKyAgICAgICAgSGFzaE1hcDxjb25zdCBOYXR1cmFsTG9vcCosIEJ5
dGVjb2RlSW5kZXg+IG5hdHVyYWxMb29wc1RvTG9vcEhpbnQ7CiAKICAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6
ZSgpOyArK25vZGVJbmRleCkgewpAQCAtMTk0LDcgKzE5NCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IE5hdHVy
YWxMb29wKiBsb29wID0gbmF0dXJhbExvb3BzLmlubmVyTW9zdExvb3BPZihibG9jaykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7
CiAgICAgICAgICAgICAgICAgICAgIG5hdHVyYWxMb29wc1RvTG9vcEhpbnQuYWRkKGxvb3AsIGJ5
dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCmlu
ZGV4IDhkYjZkYmU4YzY5MmJiMTMwODYzM2MwNDE4NmE2MmJlOGFjNTBmZDguLmE0Mjk0OWM4ZjFm
MThlY2U2MDA1OGQxMGU3YTk2MDgzYzkxNmJlOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcApAQCAtNzUsNyArNzUsNyBAQCB2b2lkIFRv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlk
Q29tcGxldGUoCiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bDogewogICAgICAgICBqaXRDb2RlLT5zZXRPU1JFbnRyeUJsb2NrKGNvZGVCbG9jay0+
dm0oKSwgcHJvZmlsZWRERkdDb2RlQmxvY2ssIGNvZGVCbG9jayk7Ci0gICAgICAgIHVuc2lnbmVk
IG9zckVudHJ5Qnl0ZWNvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZnRsRm9yT1NSRW50cnko
KS0+Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICBCeXRlY29kZUluZGV4IG9zckVudHJ5Qnl0ZWNv
ZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZnRsRm9yT1NSRW50cnkoKS0+Ynl0ZWNvZGVJbmRl
eCgpOwogICAgICAgICBqaXRDb2RlLT50aWVyVXBFbnRyeVRyaWdnZXJzLnNldChvc3JFbnRyeUJ5
dGVjb2RlLCBKSVRDb2RlOjpUcmlnZ2VyUmVhc29uOjpDb21waWxhdGlvbkRvbmUpOwogICAgICAg
ICBicmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
CmluZGV4IDhjMDQxOTFkZWU2NDMzYTBhNTI3YjY1YzI1ZjBmZDhiNzQ4ZDQ1YWYuLmVmODViNDIz
ZGE2MGFiMGVjNTc1YWE5NGQ5NjM4YjEzMDIwYTdkNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCkBAIC03ODAsNyArNzgwLDcgQEAgcHJpdmF0ZToKIAogICAg
ICAgICBhdXRvJiBkb21pbmF0b3JzID0gbV9ncmFwaC5lbnN1cmVTU0FEb21pbmF0b3JzKCk7CiAK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggOiBtX2dyYXBoLm1fZW50cnlw
b2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0LmtleXMoKSkKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBlbnRyeXBvaW50SW5kZXggOiBtX2dyYXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5
dGVjb2RlSW5kZXgua2V5cygpKQogICAgICAgICAgICAgVkFMSURBVEUoKCksIGVudHJ5cG9pbnRJ
bmRleCA+IDApOyAvLyBCeSBjb252ZW50aW9uLCAwIGlzIHRoZSBlbnRyeXBvaW50IGluZGV4IGZv
ciB0aGUgb3BfZW50ZXIgZW50cnlwb2ludCwgd2hpY2ggY2FuIG5vdCBiZSBpbiBhIGNhdGNoLgog
CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1f
Z3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAKaW5kZXggNGQ0YjFlYjZmZDM3MDQxMmE5NGNjNzE4ZjRhZTI1ZDI3
NWQ0MjY0YS4uZGUzMjZiZWNhM2Q1ZGY5ODFmOWE5ZjA3YjQ0OGYwZmY1NzFkNmNlYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCkBAIC0xNTcsMTIgKzE1NywxMiBA
QCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlc3VsdCYgc2FmZXBvaW50
UmVzdWx0KQogICAgIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uID0gbGFiZWw7CiAgICAgc3RhdGUu
aml0Q29kZS0+aW5pdGlhbGl6ZUIzQnlwcm9kdWN0cyhzdGF0ZS5wcm9jLT5yZWxlYXNlQnlwcm9k
dWN0cygpKTsKIAotICAgIGZvciAoYXV0byBwYWlyIDogc3RhdGUuZ3JhcGgubV9lbnRyeXBvaW50
SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQpIHsKLSAgICAgICAgdW5zaWduZWQgY2F0Y2hCeXRl
Y29kZU9mZnNldCA9IHBhaXIudmFsdWU7CisgICAgZm9yIChhdXRvIHBhaXIgOiBzdGF0ZS5ncmFw
aC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZUluZGV4KSB7CisgICAgICAgIEJ5dGVj
b2RlSW5kZXggY2F0Y2hCeXRlY29kZUluZGV4ID0gcGFpci52YWx1ZTsKICAgICAgICAgdW5zaWdu
ZWQgZW50cnlwb2ludEluZGV4ID0gcGFpci5rZXk7CiAgICAgICAgIFZlY3RvcjxGbHVzaEZvcm1h
dD4gYXJndW1lbnRGb3JtYXRzID0gc3RhdGUuZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbZW50cnlw
b2ludEluZGV4XTsKICAgICAgICAgc3RhdGUuaml0Q29kZS0+Y29tbW9uLmFwcGVuZENhdGNoRW50
cnlwb2ludCgKLSAgICAgICAgICAgIGNhdGNoQnl0ZWNvZGVPZmZzZXQsIHN0YXRlLmZpbmFsaXpl
ci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihz
dGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFiZWwoZW50cnlwb2ludEluZGV4KSksIFdURk1vdmUoYXJn
dW1lbnRGb3JtYXRzKSk7CisgICAgICAgICAgICBjYXRjaEJ5dGVjb2RlSW5kZXgsIHN0YXRlLmZp
bmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPihzdGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFiZWwoZW50cnlwb2ludEluZGV4KSksIFdURk1v
dmUoYXJndW1lbnRGb3JtYXRzKSk7CiAgICAgfQogICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5m
aW5hbGl6ZUNhdGNoRW50cnlwb2ludHMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgKaW5kZXggYWYyY2QxMTMzOWY5NWM2ZmQxNWE3
ZTIzMDRlZjQxNTk4ZjQ1NTY2Zi4uMjY4OWQzYTcxNmI3NTNmNWQ2ODJjZWQwY2M1NDcxNWY4YTc1
OTdhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRy
eUpJVENvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5
SklUQ29kZS5oCkBAIC00OCw4ICs0OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRpYWxpemVF
bnRyeUJ1ZmZlcihWTSYsIHVuc2lnbmVkIG51bUNhbGxlZUxvY2Fscyk7CiAgICAgU2NyYXRjaEJ1
ZmZlciogZW50cnlCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5QnVmZmVyOyB9CiAgICAg
Ci0gICAgdm9pZCBzZXRCeXRlY29kZUluZGV4KHVuc2lnbmVkIHZhbHVlKSB7IG1fYnl0ZWNvZGVJ
bmRleCA9IHZhbHVlOyB9Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQorICAgIHZvaWQgc2V0Qnl0ZWNvZGVJbmRleChCeXRlY29k
ZUluZGV4IHZhbHVlKSB7IG1fYnl0ZWNvZGVJbmRleCA9IHZhbHVlOyB9CisgICAgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CiAg
ICAgCiAgICAgdm9pZCBjb3VudEVudHJ5RmFpbHVyZSgpIHsgbV9lbnRyeUZhaWx1cmVDb3VudCsr
OyB9CiAgICAgdW5zaWduZWQgZW50cnlGYWlsdXJlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2Vu
dHJ5RmFpbHVyZUNvdW50OyB9CkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICAKIHByaXZh
dGU6CiAgICAgU2NyYXRjaEJ1ZmZlciogbV9lbnRyeUJ1ZmZlcjsgLy8gT25seSBmb3IgT1NSIGVu
dHJ5IGNvZGUgYmxvY2tzLgotICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAgICBCeXRl
Y29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKICAgICB1bnNpZ25lZCBtX2VudHJ5RmFpbHVyZUNv
dW50OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCmluZGV4IDdlZjQxNzk5ZjRmMmQ1NzQyMGQ4OWUwNWU0ZmM2NTMyNDdmNDBkZDUuLjhhMDBk
OTY2M2ZlM2Q2MTZhMGYxZWVlOGFkZTY0ZjkzYjFmZDEzZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTIxMSw3ICsyMTEsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY29k
ZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwogICAgICAgICAgICAgICAgIH0pOwog
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNhdGNoRW50cnlwb2ludEluZGV4IDogbV9ncmFw
aC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldC5rZXlzKCkpIHsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgY2F0Y2hFbnRyeXBvaW50SW5kZXggOiBtX2dyYXBoLm1fZW50
cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlSW5kZXgua2V5cygpKSB7CiAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2F0Y2hFbnRyeXBvaW50SW5kZXggIT0gMCk7CiAgICAgICAgICAg
ICAgICAgbV9wcm9jLmNvZGUoKS5zZXRQcm9sb2d1ZUZvckVudHJ5cG9pbnQoY2F0Y2hFbnRyeXBv
aW50SW5kZXgsIGNhdGNoUHJvbG9ndWVHZW5lcmF0b3IuY29weVJlZigpKTsKICAgICAgICAgICAg
IH0KQEAgLTI4MCw3ICsyODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIGV4aXRGcmFt
ZVNpemUgPSBtX2dyYXBoLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQoKSAqIHNpemVvZihS
ZWdpc3Rlcik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
c09mU3RhY2tMaW1pdCh2bS0+YWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSk7CiAgICAgICAgIFBh
dGNocG9pbnRWYWx1ZSogc3RhY2tPdmVyZmxvd0hhbmRsZXIgPSBtX291dC5wYXRjaHBvaW50KFZv
aWQpOwotICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBjYWxsU2l0ZUluZGV4
Rm9yQ29kZU9yaWdpbihtX2Z0bFN0YXRlLCBDb2RlT3JpZ2luKDApKTsKKyAgICAgICAgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGVJbmRleEZvckNvZGVPcmlnaW4obV9mdGxT
dGF0ZSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CiAgICAgICAgIHN0YWNrT3ZlcmZs
b3dIYW5kbGVyLT5hcHBlbmRTb21lUmVnaXN0ZXIobV9jYWxsRnJhbWUpOwogICAgICAgICBzdGFj
a092ZXJmbG93SGFuZGxlci0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0
ZXJzKCkpOwogICAgICAgICBzdGFja092ZXJmbG93SGFuZGxlci0+bnVtR1BTY3JhdGNoUmVnaXN0
ZXJzID0gMTsKQEAgLTM1MSw3ICszNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIG1fbm9kZSA9IG51bGxwdHI7Ci0gICAgICAgICAgICBtX29yaWdpbiA9IE5vZGVP
cmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgdHJ1ZSk7CisgICAgICAgICAgICBt
X29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSwgQ29kZU9y
aWdpbihCeXRlY29kZUluZGV4KDApKSwgdHJ1ZSk7CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFy
Z3VtZW50cy4KICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7CkBAIC0yMTEw
LDggKzIxMTAsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9jayA9IG1fZnRsU3RhdGUuZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4
ID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICBBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVG
b3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4KTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4ID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwor
ICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5h
cml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBhdXRv
IHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemU7CiAgICAgICAg
IGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGQ7CiAgICAgICAg
IGNvbXBpbGVCaW5hcnlNYXRoSUM8SklUQWRkR2VuZXJhdG9yPihhcml0aFByb2ZpbGUsIHJlcGF0
Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKQEAgLTIxMzEsOCArMjEzMSw4
IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrID0gbV9mdGxTdGF0ZS5ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgIEFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXggPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIEFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJvZmls
ZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIGF1dG8gcmVwYXRjaGlu
Z0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZTsKICAgICAgICAgYXV0byBub25S
ZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1YjsKICAgICAgICAgY29tcGlsZUJp
bmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0
aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwpAQCAtMjE1Miw4ICsyMTUyLDggQEAgcHJpdmF0
ZToKICAgICAgICAgfQogCiAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBt
X2Z0bFN0YXRlLmdyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG1fbm9kZS0+b3JpZ2luLnNl
bWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVJbmRleCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgQXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNv
ZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24g
PSBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplOwogICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwogICAgICAgICBjb21waWxlQmluYXJ5TWF0aElD
PEpJVE11bEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJl
cGF0Y2hpbmdGdW5jdGlvbik7CkBAIC0yNDE1LDggKzI0MTUsOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9m
dGxTdGF0ZS5ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yyk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZz
ZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXggPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAg
ICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFBy
b2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgYXV0byBy
ZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplOwogICAgICAgICAg
ICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1YjsKICAgICAg
ICAgICAgIGNvbXBpbGVCaW5hcnlNYXRoSUM8SklUU3ViR2VuZXJhdG9yPihhcml0aFByb2ZpbGUs
IHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKQEAgLTMwOTMsOCAr
MzA5Myw4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1f
bm9kZSwgbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CiAgICAgICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2Z0bFN0YXRlLmdyYXBoLmJhc2VsaW5l
Q29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsK
LSAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+
YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVj
b2RlSW5kZXgoKTsKKyAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsK
ICAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9w
dGltaXplOwogICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFy
aXRoTmVnYXRlOwogICAgICAgICBjb21waWxlVW5hcnlNYXRoSUM8SklUTmVnR2VuZXJhdG9yPihh
cml0aFByb2ZpbGUsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5kZXggYzE3NTczNzVi
N2FhM2U4NzM0YzgyMjM5YTUyMTc0NjcwZWNmOTcxOS4uOTMzMTc3MTBmNmQwNjg2MDkxOWJjMDAy
NTMxM2ExMzIxOTA0NDkxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRy
eS5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewog
U1VQUFJFU1NfQVNBTgogdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogICAgIFZNJiB2bSwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGVudHJ5
Q29kZUJsb2NrLAotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIHN0cmVhbUlu
ZGV4KQorICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgc3RyZWFtSW5k
ZXgpCiB7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZSA9IGRmZ0NvZGVCbG9jay0+YmFzZWxpbmVW
ZXJzaW9uKCk7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBkZmdDb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpOwpAQCAtNTUsNyArNTUsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50
cnkoCiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICBkYXRh
TG9nKAotICAgICAgICAgICAgIkZUTCBPU1IgZnJvbSAiLCAqZGZnQ29kZUJsb2NrLCAiIHRvICIs
ICplbnRyeUNvZGVCbG9jaywgIiBhdCBiYyMiLAorICAgICAgICAgICAgIkZUTCBPU1IgZnJvbSAi
LCAqZGZnQ29kZUJsb2NrLCAiIHRvICIsICplbnRyeUNvZGVCbG9jaywgIiBhdCAiLAogICAgICAg
ICAgICAgYnl0ZWNvZGVJbmRleCwgIi5cbiIpOwogICAgIH0KICAgICAKQEAgLTY0LDcgKzY0LDcg
QEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogCiAgICAgaWYgKGJ5dGVjb2RlSW5kZXggIT0gZW50
cnlDb2RlLT5ieXRlY29kZUluZGV4KCkpIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugd2UgZG9u
J3QgaGF2ZSBhbiBlbnRyeXBvaW50IGZvciBiYyMiLCBieXRlY29kZUluZGV4LCAiOyBvdXJzIGlz
IGZvciBiYyMiLCBlbnRyeUNvZGUtPmJ5dGVjb2RlSW5kZXgoKSwgIlxuIik7CisgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYW4gZW50cnlw
b2ludCBmb3IgIiwgYnl0ZWNvZGVJbmRleCwgIjsgb3VycyBpcyBmb3IgIiwgZW50cnlDb2RlLT5i
eXRlY29kZUluZGV4KCksICJcbiIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCkBA
IC03OSw3ICs3OSw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICAgICAgT3B0aW9uYWw8
SlNWYWx1ZT4gcmVjb25zdHJ1Y3RlZFZhbHVlID0gdmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KTsK
ICAgICAgICAgaWYgKChyZWNvbnN0cnVjdGVkVmFsdWUgJiYgdmFsdWVPblN0YWNrID09IHJlY29u
c3RydWN0ZWRWYWx1ZS52YWx1ZSgpKSB8fCAhYXJndW1lbnQpCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgZGF0YUxvZygiTWlzbWF0Y2ggYmV0d2VlbiByZWNvbnN0cnVjdGVkIHZhbHVl
cyBhbmQgdGhlIHZhbHVlIG9uIHRoZSBzdGFjayBmb3IgYXJndW1lbnQgYXJnIiwgYXJndW1lbnQs
ICIgZm9yICIsICplbnRyeUNvZGVCbG9jaywgIiBhdCBiYyMiLCBieXRlY29kZUluZGV4LCAiOlxu
Iik7CisgICAgICAgIGRhdGFMb2coIk1pc21hdGNoIGJldHdlZW4gcmVjb25zdHJ1Y3RlZCB2YWx1
ZXMgYW5kIHRoZSB2YWx1ZSBvbiB0aGUgc3RhY2sgZm9yIGFyZ3VtZW50IGFyZyIsIGFyZ3VtZW50
LCAiIGZvciAiLCAqZW50cnlDb2RlQmxvY2ssICIgYXQgIiwgYnl0ZWNvZGVJbmRleCwgIjpcbiIp
OwogICAgICAgICBkYXRhTG9nKCIgICAgVmFsdWUgb24gc3RhY2s6ICIsIHZhbHVlT25TdGFjaywg
IlxuIik7CiAgICAgICAgIGRhdGFMb2coIiAgICBSZWNvbnN0cnVjdGVkIHZhbHVlOiAiLCByZWNv
bnN0cnVjdGVkVmFsdWUsICJcbiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oCmluZGV4IDNkMTIzZmJl
ZDdjYjIyZDIzNDkxNWJiOGZiOWJiYzI1MmU2NDBkN2IuLjY0ZWNmNzVmZWUzMmU4MmNmMWNmYWVi
NzY0OGUwMmYxMDJjMWYyZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRW50cnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5
LmgKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgVk07CiBuYW1lc3BhY2UgRlRMIHsKIAogdm9pZCog
cHJlcGFyZU9TUkVudHJ5KAotICAgIFZNJiwgQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiBkZmdDb2Rl
QmxvY2ssIENvZGVCbG9jayogZW50cnlDb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
CisgICAgVk0mLCBDYWxsRnJhbWUqLCBDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2Nr
KiBlbnRyeUNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCwKICAgICB1bnNpZ25lZCBzdHJlYW1JbmRl
eCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKaW5kZXggODA5OTBjZWMwMjFkYzNkODZkYjMx
Y2UxY2IwMDc3OGQxZjE4N2ExYy4uYzc0MWI2NjliY2EwMzU1NWYzMzIwMzhkMDU2MDc0NWI4MjU3
ZWFlNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFt
ZS5jcHAKQEAgLTk4LDEyICs5OCwxMiBAQCBTVVBQUkVTU19BU0FOIHVuc2lnbmVkIENhbGxGcmFt
ZTo6dW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAogCiBDYWxsU2l0ZUluZGV4IENhbGxG
cmFtZTo6Y2FsbFNpdGVJbmRleCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgo
Y2FsbFNpdGVBc1Jhd0JpdHMoKSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChjYWxsU2l0ZUFzUmF3Qml0cygpKSk7CiB9CiAKIFNVUFBSRVNTX0FTQU4gQ2FsbFNpdGVJ
bmRleCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXgoKSBjb25zdAogewotICAgIHJldHVy
biBDYWxsU2l0ZUluZGV4KHVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkpOworICAgIHJldHVybiBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSkpOwog
fQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTEzNCw3ICsxMzQsNyBAQCBjb25zdCBJbnN0
cnVjdGlvbiogQ2FsbEZyYW1lOjpjdXJyZW50VlBDKCkgY29uc3QKIAogdm9pZCBDYWxsRnJhbWU6
OnNldEN1cnJlbnRWUEMoY29uc3QgSW5zdHJ1Y3Rpb24qIHZwYykKIHsKLSAgICBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlKGNvZGVCbG9jaygpLT5ieXRlY29kZU9mZnNldCh2cGMpKTsKKyAgICBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlKGNvZGVCbG9jaygpLT5ieXRlY29kZUluZGV4KHZwYykpOwogICAg
IHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudF0udGFnKCkgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PihjYWxsU2l0ZS5iaXRzKCkpOwogfQogCkBAIC0xNDcsMTEgKzE0NywxMSBAQCB1bnNp
Z25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogCiAj
ZW5kaWYKICAgICAKLXVuc2lnbmVkIENhbGxGcmFtZTo6Ynl0ZWNvZGVPZmZzZXQoKQorQnl0ZWNv
ZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgoKQogewogICAgIEFTU0VSVCghY2FsbGVl
KCkuaXNXYXNtKCkpOwogICAgIGlmICghY29kZUJsb2NrKCkpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gQnl0ZWNvZGVJbmRleCgwKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICBpZiAoY2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkpIHsKICAgICAgICAgQVNTRVJU
KGNvZGVCbG9jaygpKTsKQEAgLTE2NCwxMyArMTY0LDEzIEBAIHVuc2lnbmVkIENhbGxGcmFtZTo6
Ynl0ZWNvZGVPZmZzZXQoKQogICAgIH0KICNlbmRpZgogICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNB
cmVCeXRlY29kZU9mZnNldCgpKTsKLSAgICByZXR1cm4gY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9m
ZnNldCgpOworICAgIHJldHVybiBCeXRlY29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVP
ZmZzZXQoKSk7CiB9CiAKIENvZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkKIHsKICAg
ICBpZiAoIWNvZGVCbG9jaygpKQotICAgICAgICByZXR1cm4gQ29kZU9yaWdpbigwKTsKKyAgICAg
ICAgcmV0dXJuIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSk7CiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgaWYgKGNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgpKSB7CiAgICAgICAg
IENhbGxTaXRlSW5kZXggaW5kZXggPSBjYWxsU2l0ZUluZGV4KCk7CkBAIC0xNzgsNyArMTc4LDcg
QEAgQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQogICAgICAgICByZXR1cm4gY29k
ZUJsb2NrKCktPmNvZGVPcmlnaW4oaW5kZXgpOwogICAgIH0KICNlbmRpZgotICAgIHJldHVybiBD
b2RlT3JpZ2luKGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgcmV0dXJuIENv
ZGVPcmlnaW4oQnl0ZWNvZGVJbmRleChjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkpKTsK
IH0KIAogUmVnaXN0ZXIqIENhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFsKCkKQEAgLTMwMyw3
ICszMDMsNyBAQCBTdHJpbmcgQ2FsbEZyYW1lOjpmcmllbmRseUZ1bmN0aW9uTmFtZSgpCiB2b2lk
IENhbGxGcmFtZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogewogICAgIGlmIChDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpKSB7Ci0gICAgICAgIG91dC5wcmludChjb2Rl
QmxvY2stPmluZmVycmVkTmFtZSgpLCAiIyIsIGNvZGVCbG9jay0+aGFzaEFzU3RyaW5nSWZQb3Nz
aWJsZSgpLCAiIFsiLCBjb2RlQmxvY2stPmppdFR5cGUoKSwgIiBiYyMiLCBieXRlY29kZU9mZnNl
dCgpLCAiXSIpOworICAgICAgICBvdXQucHJpbnQoY29kZUJsb2NrLT5pbmZlcnJlZE5hbWUoKSwg
IiMiLCBjb2RlQmxvY2stPmhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSwgIiBbIiwgY29kZUJsb2Nr
LT5qaXRUeXBlKCksICIgIiwgYnl0ZWNvZGVJbmRleCgpLCAiXSIpOwogCiAgICAgICAgIG91dC5w
cmludCgiKCIpOwogICAgICAgICB0aGlzVmFsdWUoKS5kdW1wRm9yQmFja3RyYWNlKG91dCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKaW5kZXggMTBl
NDZhNzIzMzFkMTdkNDM1NzVjMjVkYmY3NDFiNTBmNDJmOWEzZC4uNmQyMDU4ODE3OThmMTE4Yjg5
MGJiNzViNzhkODdjOGE4MzczZDBkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaApAQCAtNDUsMjIgKzQ1LDE5IEBAIG5hbWVzcGFjZSBKU0MgIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIENhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAgICAgICAg
IAotICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KHVpbnQzMl90IGJpdHMpCi0gICAgICAg
ICAgICA6IG1fYml0cyhiaXRzKQorICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5
dGVjb2RlSW5kZXgpCiAgICAgICAgIHsgfQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAg
IGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQot
ICAgICAgICAgICAgOiBtX2JpdHMoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikp
Ci0gICAgICAgIHsgfQotI2VuZGlmCiAKLSAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuIG1fYml0cyAhPSBVSU5UX01BWDsgfQotICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyA9
PSBvdGhlci5tX2JpdHM7IH0KLSAgICAgICAgCi0gICAgICAgIGlubGluZSB1aW50MzJfdCBiaXRz
KCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiAhIW1fYnl0ZWNvZGVJbmRleDsgfQorICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYnl0
ZWNvZGVJbmRleCA9PSBvdGhlci5tX2J5dGVjb2RlSW5kZXg7IH0KKworICAgICAgICB1aW50MzJf
dCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4LmFzQml0cygpOyB9CisKKyAg
ICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
Y29kZUluZGV4OyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB1aW50MzJfdCBtX2JpdHMgeyBV
SU5UX01BWCB9OworICAgICAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKICAgICB9
OwogCiAgICAgY2xhc3MgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggOiBwdWJsaWMgQ2FsbFNpdGVJ
bmRleCB7CkBAIC02OCw3ICs2NSw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgRGlzcG9z
YWJsZUNhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgZXhwbGljaXQgRGlzcG9z
YWJsZUNhbGxTaXRlSW5kZXgodWludDMyX3QgYml0cykKLSAgICAgICAgICAgIDogQ2FsbFNpdGVJ
bmRleChiaXRzKQorICAgICAgICAgICAgOiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXg6OmZy
b21CaXRzKGJpdHMpKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMTc3LDEwICsxNzQsMTAg
QEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyBhbHNvIHJldHVybiAwIGlmIHRoZSBjYWxs
IGZyYW1lIGhhcyBubyBub3Rpb24gb2YgYnl0ZWNvZGUgb2Zmc2V0cyAoZm9yCiAgICAgICAgIC8v
IGV4YW1wbGUgaWYgaXQncyBuYXRpdmUgY29kZSkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3NTQKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQoKTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCk7CiAgICAg
ICAgIAogICAgICAgICAvLyBUaGlzIHdpbGwgZ2V0IHlvdSBhIENvZGVPcmlnaW4uIEl0IHdpbGwg
YWx3YXlzIHN1Y2NlZWQuIE1heSByZXR1cm4KLSAgICAgICAgLy8gQ29kZU9yaWdpbigwKSBpZiB3
ZSdyZSBpbiBuYXRpdmUgY29kZS4KKyAgICAgICAgLy8gQ29kZU9yaWdpbihCeXRlY29kZUluZGV4
KDApKSBpZiB3ZSdyZSBpbiBuYXRpdmUgY29kZS4KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luKCk7CiAKICAgICAgICAgUmVnaXN0ZXIqIHRvcE9mRnJhbWUo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAKaW5kZXggYzk5MDRjYzA1MzJhMDRlZWU3ZGNjMDJmYmNmNzY4NDE2ZjMzNmJhYy4uNTk1YzU0
YmM3ZjIzODFlNmFkYjFhYjM4NGJkODMzMWNjZDZmZWJkNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC00MTAsNyArNDEwLDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBlbmQoU3RhY2tGcmFtZSh2
aXNpdG9yLT53YXNtRnVuY3Rpb25JbmRleE9yTmFtZSgpKSk7CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCEhdmlzaXRvci0+Y29kZUJsb2NrKCkgJiYgIXZpc2l0b3ItPmNvZGVCbG9jaygpLT51bmxp
bmtlZENvZGVCbG9jaygpLT5pc0J1aWx0aW5GdW5jdGlvbigpKSB7CiAgICAgICAgICAgICAgICAg
bV9yZXN1bHRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFtZShtX3ZtLCBt
X293bmVyLCB2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSwgdmlzaXRvci0+Y29kZUJsb2NrKCks
IHZpc2l0b3ItPmJ5dGVjb2RlT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tG
cmFtZShtX3ZtLCBtX293bmVyLCB2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSwgdmlzaXRvci0+
Y29kZUJsb2NrKCksIHZpc2l0b3ItPmJ5dGVjb2RlSW5kZXgoKSkpOwogICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICBtX3Jlc3VsdHMuYXBwZW5kKAogICAgICAgICAgICAgICAg
ICAgICBTdGFja0ZyYW1lKG1fdm0sIG1fb3duZXIsIHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgp
KSk7CkBAIC00ODAsNyArNDgwLDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSGFuZGxlckluZm8q
IGZpbmRFeGNlcHRpb25IYW5kbGVyKFN0YWNrVmlzaXRvciYgdmlzaXRvciwgQ28KICAgICBpZiAo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKICAgICAgICAg
ZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygp
OwogICAgIGVsc2UKLSAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5i
eXRlY29kZU9mZnNldCgpOworICAgICAgICBleGNlcHRpb25IYW5kbGVySW5kZXggPSBjYWxsRnJh
bWUtPmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKTsKIAogICAgIHJldHVybiBjb2RlQmxvY2stPmhh
bmRsZXJGb3JJbmRleChleGNlcHRpb25IYW5kbGVySW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hp
Y2tlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tl
bi5jcHAKaW5kZXggOWNmZGEwOWIwNjlmNThlMjU3ZTA1NTg5MzZmZjc1YTI2NGVjYTcxNS4uOWNj
MTE4Y2Q3MmIwZmZmY2JlZTdjMDEzZGNjNTBmMTEwNTMxNTA0MiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcApAQCAtMzI5LDcg
KzMyOSw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiAgICAgICAgICAgICBib29sIGlzVGFpbERlbGV0ZWQgPSBmYWxzZTsKICAgICAg
ICAgICAgIEpTU2NvcGUqIHNjb3BlID0gbnVsbHB0cjsKICAgICAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAgICAgICAgIEpTVmFsdWUg
c2NvcGVWYWx1ZSA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSAmJiBjb2RlQmxvY2sgJiYg
Y29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkuaXNWYWxpZCgpCisgICAgICAgICAgICBKU1ZhbHVl
IHNjb3BlVmFsdWUgPSBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAmJiBjb2RlQmxvY2sgJiYg
Y29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkuaXNWYWxpZCgpCiAgICAgICAgICAgICAgICAgPyBj
YWxsRnJhbWUtPnJlZ2lzdGVycygpW2NvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLm9mZnNldCgp
XS5qc1ZhbHVlKCkKICAgICAgICAgICAgICAgICA6IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAg
ICBpZiAoIXNjb3BlVmFsdWUuaXNVbmRlZmluZWQoKSAmJiBjb2RlQmxvY2stPndhc0NvbXBpbGVk
V2l0aERlYnVnZ2luZ09wY29kZXMoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCA4MjliZjBjMzgxNGQ4YjFiMjI1YjRj
MjU1NDRkNjliMmFiNzZmNWYxLi44YzJkNWE1ZDIyYTZhNGVlZDc3OWY2ZDY4MWUyZTdkZWVhNzU5
YWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcApAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkTm9u
SW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlT3JpZ2luKiBjb2RlT3JpCiAg
ICAgaWYgKGNhbGxGcmFtZS0+aXNBbnlXYXNtQ2FsbGVlKCkpIHsKICAgICAgICAgbV9mcmFtZS5t
X2lzV2FzbUZyYW1lID0gdHJ1ZTsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IG51bGxw
dHI7Ci0gICAgICAgIG1fZnJhbWUubV9ieXRlY29kZU9mZnNldCA9IDA7CisgICAgICAgIG1fZnJh
bWUubV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOwogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKICAgICAgICAgQ2FsbGVlQml0cyBiaXRzID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKICAg
ICAgICAgaWYgKGJpdHMuaXNXYXNtKCkpCkBAIC0xNzgsOSArMTc4LDkgQEAgdm9pZCBTdGFja1Zp
c2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmln
aW4qIGNvZGVPcmkKICNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fZnJhbWUubV9jb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNv
ZGVPZmZzZXQgPSAhbV9mcmFtZS5jb2RlQmxvY2soKSA/IDAKKyAgICAgICAgbV9mcmFtZS5tX2J5
dGVjb2RlSW5kZXggPSAhbV9mcmFtZS5jb2RlQmxvY2soKSA/IEJ5dGVjb2RlSW5kZXgoMCkKICAg
ICAgICAgICAgIDogY29kZU9yaWdpbiA/IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKQotICAg
ICAgICAgICAgOiBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCk7CisgICAgICAgICAgICA6IGNh
bGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpOwogCiAgICAgfQogCkBAIC0yMTQsNyArMjE0LDcgQEAg
dm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IENvZGVPcmlnaW4qIGNvZGVPcmlnaW4KICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9mcmFt
ZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGlu
ZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7Ci0gICAgICAgIG1fZnJhbWUubV9i
eXRlY29kZU9mZnNldCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgbV9m
cmFtZS5tX2J5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7CiAKICAg
ICAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVGb3JDYWxs
RnJhbWUoY2FsbEZyYW1lKTsKICAgICAgICAgbV9mcmFtZS5tX2NhbGxlZSA9IGNhbGxlZTsKQEAg
LTQyNCw3ICs0MjQsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmNvbXB1dGVMaW5lQW5k
Q29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKQogdm9pZCBTdGFja1Zpc2l0
b3I6OkZyYW1lOjpyZXRyaWV2ZUV4cHJlc3Npb25JbmZvKGludCYgZGl2b3QsIGludCYgc3RhcnRP
ZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikg
Y29uc3QKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwot
ICAgIGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQoKSwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQsIGxpbmUsIGNvbHVtbik7CisgICAgY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5l
eHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgoKSwgZGl2b3QsIHN0
YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CiAgICAgZGl2b3QgKz0gY29kZUJs
b2NrLT5zb3VyY2VPZmZzZXQoKTsKIH0KIApAQCAtNDg2LDggKzQ4Niw4IEBAIHZvaWQgU3RhY2tW
aXNpdG9yOjpGcmFtZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBJbmRlbnRlciBpbmRlbnQsIFdU
Rjo6RnVuY3Rpb248CiAgICAgICAgICAgICBpbmRlbnQrKzsKIAogICAgICAgICAgICAgaWYgKGNh
bGxGcmFtZS0+Y2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQoKSkgewotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgp
OwotICAgICAgICAgICAgICAgIG91dC5wcmludChpbmRlbnQsICJieXRlY29kZU9mZnNldDogIiwg
Ynl0ZWNvZGVPZmZzZXQsICIgb2YgIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCks
ICJcbiIpOworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNh
bGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgICAgIG91dC5wcmludChpbmRl
bnQsIGJ5dGVjb2RlSW5kZXgsICIgb2YgIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXpl
KCksICJcbiIpOwogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoaW5kZW50LCAiaGFzQ29kZU9yaWdpbnM6ICIsIGNvZGVC
bG9jay0+aGFzQ29kZU9yaWdpbnMoKSwgIlxuIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKaW5kZXggZjE5NDI3ZDQ4NmU2Mzg1ZDRjOGNj
ZjQzOTJmZDJlZDFkNzNlNjRlYi4uNjhiMDk3MjFmYTg0ZjYyNDc1OGQ2Zjg2ZWRiY2U1NTQ2MmRh
ZGJmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNr
VmlzaXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zp
c2l0b3IuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJ5
dGVjb2RlSW5kZXguaCIKICNpbmNsdWRlICJDYWxsZWVCaXRzLmgiCiAjaW5jbHVkZSAiV2FzbUlu
ZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CkBAIC02NCw3ICs2NSw3IEBA
IHB1YmxpYzoKICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FsbGVyRnJhbWU7IH0KICAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25zdCB7IHJl
dHVybiBtX2NhbGxlZTsgfQogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZUJsb2NrOyB9Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9ieXRlY29kZU9mZnNldDsgfQorICAgICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUoKSBjb25zdCB7CiAjaWYgRU5BQkxF
KERGR19KSVQpCiAgICAgICAgICAgICByZXR1cm4gbV9pbmxpbmVDYWxsRnJhbWU7CkBAIC0xMjAs
NyArMTIxLDcgQEAgcHVibGljOgogICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAg
ICAgICBzaXplX3QgbV9pbmRleDsKICAgICAgICAgc2l6ZV90IG1fYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXM7Ci0gICAgICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIEJ5
dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwogICAgICAgICBib29sIG1fY2FsbGVySXNFbnRy
eUZyYW1lIDogMTsKICAgICAgICAgYm9vbCBtX2lzV2FzbUZyYW1lIDogMTsKICAgICAgICAgV2Fz
bTo6SW5kZXhPck5hbWUgbV93YXNtRnVuY3Rpb25JbmRleE9yTmFtZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAppbmRleCBkNDQ4OTdkNjQ3MDI2ODA4NWM4NjJhMmM4YTc1NWZiY2E2M2Y0ZWRh
Li4xZmY4YjQ3MDQxZGZkZWUzZDQwY2E0Yjg0MTUyOGI2YmMwYjA1YzNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCkBAIC03NCwxNiArNzQsMTUgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJl
dHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxD
RnUKICAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigp
KTsKIH0KIAotSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpCitKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAg
OiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKICAgICAsIG1faW50ZXJwcmV0ZXIodm0u
aW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLnNpemUoKSA6IDApCi0gICAgLCBtX2J5dGVjb2RlT2Zmc2V0KHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyKHZtKQogICAgICwgbV9jYW5CZU9wdGltaXplZChmYWxzZSkKICAgICAsIG1fc2hvdWxkRW1p
dFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fc2hvdWxkVXNlSW5kZXhNYXNraW5nKE9wdGlvbnM6
OmVuYWJsZVNwZWN0cmVNaXRpZ2F0aW9ucygpKQotICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29k
ZU9mZnNldChsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkKKyAgICAsIG1fbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogewogfQogCkBAIC0xMDAs
MTEgKzk5LDExIEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAgICAg
SnVtcExpc3Qgc2tpcE9wdGltaXplOwogICAgIAogICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJh
bmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlcklu
Y3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NP
ZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7Ci0gICAgQVNTRVJUKCFtX2J5dGVjb2RlT2Zmc2V0KTsK
KyAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5Q2FsbGVl
U2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS50b3BFbnRyeUZyYW1lKTsKIAotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUs
ICZ2bSgpLCBtX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9w
dGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBza2lwT3B0aW1p
emUuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc2tp
cE9wdGltaXplLmxpbmsodGhpcyk7CkBAIC0xMzgsMTIgKzEzNywxMiBAQCB2b2lkIEpJVDo6YXNz
ZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKIH0KIAogI2RlZmluZSBORVhUX09QQ09ERShuYW1lKSBc
Ci0gICAgbV9ieXRlY29kZU9mZnNldCArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsgXAor
ICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyBcCiAgICAgYnJlYWs7CiAKICNkZWZp
bmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAgIGNhc2Ugb3BfIyNuYW1lOiB7IFwKLSAgICAg
ICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQgPj0gc3RhcnRCeXRlY29kZU9mZnNldCkgeyBcCisgICAg
ICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7IFwKICAgICAg
ICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0
aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsgXAogICAgICAgICB9IFwKQEAgLTE1Miw3ICsxNTEsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3Rh
Y2tQb2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBERUZJTkVfT1AobmFtZSkgXAogICAgIGNhc2Ug
bmFtZTogeyBcCi0gICAgICAgIGlmIChtX2J5dGVjb2RlT2Zmc2V0ID49IHN0YXJ0Qnl0ZWNvZGVP
ZmZzZXQpIHsgXAorICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJ
bmRleCkgeyBcCiAgICAgICAgICAgICBlbWl0XyMjbmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24pOyBc
CiAgICAgICAgIH0gXAogICAgICAgICBORVhUX09QQ09ERShuYW1lKTsgXApAQCAtMTkyLDggKzE5
MSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICBtX2NhbGxMaW5r
SW5mb0luZGV4ID0gMDsKIAogICAgIFZNJiB2bSA9IG1fY29kZUJsb2NrLT52bSgpOwotICAgIHVu
c2lnbmVkIHN0YXJ0Qnl0ZWNvZGVPZmZzZXQgPSAwOwotICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5
dGVjb2RlT2Zmc2V0ICYmIChtX2NvZGVCbG9jay0+aW5oZXJpdHM8UHJvZ3JhbUNvZGVCbG9jaz4o
dm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0czxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSkp
KSB7CisgICAgQnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7CisgICAgaWYgKG1f
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRzPFByb2dy
YW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jaz4odm0pKSkgewogICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9wdGltaXph
dGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0bHkgb25jZS4K
ICAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBvdGhlcndpc2Uu
IFdoZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8KICAgICAgICAgLy8gZG8gT1NS
IGVudHJ5IGludG8gdGhlIGJhc2VsaW5lIEpJVCBpbiBhIGxvb3AsIGl0IHdpbGwgcGFzcyBpbiB0
aGUgYnl0ZWNvZGUgb2Zmc2V0IGl0CkBAIC0yMDIsMjggKzIwMSwyOCBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAgICAgLy8gV2Ugb25seSBib3RoZXIgYnVpbGRp
bmcgdGhlIGJ5dGVjb2RlIGdyYXBoIGlmIGl0IGNvdWxkIHNhdmUgdGltZSBhbmQgZXhlY3V0YWJs
ZQogICAgICAgICAvLyBtZW1vcnkuIFdlIHBpY2sgYW4gYXJiaXRyYXJ5IG9mZnNldCB3aGVyZSB3
ZSBkZWVtIHRoaXMgaXMgcHJvZml0YWJsZS4KLSAgICAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVPZmZzZXQgPj0gMjAwKSB7CisgICAgICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkgPj0gMjAwKSB7CiAgICAgICAgICAgICAvLyBBcyBhIHNpbXBsaWZpY2F0
aW9uLCB3ZSBkb24ndCBmaW5kIGFsbCBieXRlY29kZSByYW5nZXMgdGhhdCBhcmUgdW5yZWFjaGFi
bGUuCiAgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGZpbmQgdGhlIG1pbmltdW0gYnl0
ZWNvZGUgb2Zmc2V0IHRoYXQgaXMgcmVhY2hhYmxlLCBhbmQKICAgICAgICAgICAgIC8vIGNvbXBp
bGUgY29kZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0IG9ud2FyZHMuCiAKICAgICAgICAgICAg
IEJ5dGVjb2RlR3JhcGggZ3JhcGgobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKSk7Ci0gICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmlu
ZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0
KTsKKyAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFz
aWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jayk7CiAKICAgICAgICAgICAg
IEdyYXBoTm9kZVdvcmtsaXN0PEJ5dGVjb2RlQmFzaWNCbG9jayo+IHdvcmtsaXN0OwotICAgICAg
ICAgICAgc3RhcnRCeXRlY29kZU9mZnNldCA9IFVJTlRfTUFYOworICAgICAgICAgICAgc3RhcnRC
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAgICAgd29ya2xpc3QucHVz
aChibG9jayk7CiAKICAgICAgICAgICAgIHdoaWxlIChCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2Nr
ID0gd29ya2xpc3QucG9wKCkpIHsKLSAgICAgICAgICAgICAgICBzdGFydEJ5dGVjb2RlT2Zmc2V0
ID0gc3RkOjptaW4oc3RhcnRCeXRlY29kZU9mZnNldCwgYmxvY2stPmxlYWRlck9mZnNldCgpKTsK
KyAgICAgICAgICAgICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KHN0ZDo6
bWluKHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgYmxvY2stPmxlYWRlck9mZnNldCgpKSk7
CiAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaEFsbChibG9jay0+c3VjY2Vzc29ycygpKTsK
IAogICAgICAgICAgICAgICAgIC8vIEFsc28gYWRkIGNhdGNoIGJsb2NrcyBmb3IgYnl0ZWNvZGVz
IHRoYXQgdGhyb3cuCiAgICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZkV4
Y2VwdGlvbkhhbmRsZXJzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IGJsb2NrLT5sZWFkZXJPZmZzZXQoKTsgYnl0ZWNvZGVPZmZzZXQgPCBi
bG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBibG9jay0+dG90YWxMZW5ndGgoKTspIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoYnl0ZWNv
ZGVPZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGhhbmRsZXIgPSBt
X2NvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmhh
bmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGdyYXBoLmZpbmRCYXNpY0Js
b2NrV2l0aExlYWRlck9mZnNldChoYW5kbGVyLT50YXJnZXQpKTsKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gaW5zdHJ1Y3Rpb24tPnNpemUoKTsKQEAgLTIzMywy
OSArMjMyLDI5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
fQogICAgIH0KIAotICAgIGZvciAobV9ieXRlY29kZU9mZnNldCA9IDA7IG1fYnl0ZWNvZGVPZmZz
ZXQgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQg
PT0gc3RhcnRCeXRlY29kZU9mZnNldCAmJiBzdGFydEJ5dGVjb2RlT2Zmc2V0ID4gMCkgeworICAg
IGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CisgICAgICAgIGlmIChtX2J5dGVjb2Rl
SW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYmIHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1
Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVhY2hhYmxlLgogICAgICAgICAgICAgLy8gTGV0
J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYgaXQncyBldmVyIGhpdC4KICAgICAgICAgICAg
IGJyZWFrcG9pbnQoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikK
LSAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1haW5QYXRoKG1fYnl0
ZWNvZGVPZmZzZXQsIGxhYmVsKCkpOwotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVPZmZzZXQpLnB0cigpOwot
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCAi
cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyBnb25lIGJhZCBAICVkIiwgbV9ieXRlY29kZU9mZnNldCk7
CisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCku
cHRyKCk7CisgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CiAKLSAg
ICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpKTsKKyAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwog
CiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVPZmZz
ZXQgPiAwKSAvLyBBdm9pZCB0aGUgb3ZlcmhlYWQgb2Ygc2FtcGxpbmcgb3BfZW50ZXIgdHdpY2Uu
CisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPiAwKSAvLyBBdm9pZCB0aGUgb3ZlcmhlYWQg
b2Ygc2FtcGxpbmcgb3BfZW50ZXIgdHdpY2UuCiAgICAgICAgICAgICBzYW1wbGVJbnN0cnVjdGlv
bihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogI2VuZGlmCiAKLSAgICAgICAgbV9sYWJlbHNbbV9ieXRl
Y29kZU9mZnNldF0gPSBsYWJlbCgpOworICAgICAgICBtX2xhYmVsc1ttX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCldID0gbGFiZWwoKTsKIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2Up
Ci0gICAgICAgICAgICBkYXRhTG9nRigiT2xkIEpJVCBlbWl0dGluZyBjb2RlIGZvciBiYyMldSBh
dCBvZmZzZXQgMHglbHguXG4iLCBtX2J5dGVjb2RlT2Zmc2V0LCAobG9uZylkZWJ1Z09mZnNldCgp
KTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiT2xkIEpJVCBlbWl0dGluZyBjb2RlIGZvciAiLCBt
X2J5dGVjb2RlSW5kZXgsICIgYXQgb2Zmc2V0ICIsIChsb25nKWRlYnVnT2Zmc2V0KCkpOwogCiAg
ICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgp
OwogCkBAIC0yNjMsMTMgKzI2MiwxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgICAgICBhZGQ2NCgKICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoMSks
CiAgICAgICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29tcGlsYXRpb24tPmV4ZWN1dGlv
bkNvdW50ZXJGb3IoUHJvZmlsZXI6Ok9yaWdpblN0YWNrKFByb2ZpbGVyOjpPcmlnaW4oCi0gICAg
ICAgICAgICAgICAgICAgIG1fY29tcGlsYXRpb24tPmJ5dGVjb2RlcygpLCBtX2J5dGVjb2RlT2Zm
c2V0KSkpLT5hZGRyZXNzKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jb21waWxhdGlvbi0+
Ynl0ZWNvZGVzKCksIG1fYnl0ZWNvZGVJbmRleCkpKS0+YWRkcmVzcygpKSk7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIGlmIChPcHRpb25zOjplYWdlcmx5VXBkYXRlVG9wQ2FsbEZyYW1l
KCkpCiAgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKIAotICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogI2lmIEVOQUJMRShNQVNN
X1BST0JFKQogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4
ZWN1dGlvbigpKSkgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVC
bG9jazsKQEAgLTQ3Miw3ICs0NzEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAKICNpZm5kZWYgTkRFQlVHCiAgICAgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3Vh
cmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCi0gICAgbV9ieXRlY29kZU9mZnNldCA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KCk7CiAjZW5kaWYKIH0KIApAQCAtNDk1LDI4ICs0OTQsMjggQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsK
ICAgICAKICAgICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1f
c2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAg
IG1fYnl0ZWNvZGVPZmZzZXQgPSBpdGVyLT50bzsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0g
aXRlci0+dG87CiAKLSAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRl
bShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpKTsKKyAgICAgICAgbV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIHVuc2lnbmVkIGZpcnN0VG8gPSBtX2J5dGVjb2RlT2Zm
c2V0OworICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAK
LSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlT2Zmc2V0KS5wdHIoKTsKKyAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICAKICAgICAgICAg
UmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGUgPSAwOwogICAgICAgICBpZiAoc2hvdWxk
RW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgcmFyZUNhc2VQcm9maWxlID0gbV9jb2RlQmxv
Y2stPmFkZFJhcmVDYXNlUHJvZmlsZShtX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIHJh
cmVDYXNlUHJvZmlsZSA9IG1fY29kZUJsb2NrLT5hZGRSYXJlQ2FzZVByb2ZpbGUobV9ieXRlY29k
ZUluZGV4KTsKIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAg
ICBkYXRhTG9nRigiT2xkIEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9yIGJjIyV1IGF0IG9mZnNl
dCAweCVseC5cbiIsIG1fYnl0ZWNvZGVPZmZzZXQsIChsb25nKWRlYnVnT2Zmc2V0KCkpOworICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJPbGQgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgIiwgbV9i
eXRlY29kZUluZGV4LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgpKTsKIAogICAg
ICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0
Rm9yQnl0ZWNvZGVTbG93UGF0aChtX2J5dGVjb2RlT2Zmc2V0LCBsYWJlbCgpKTsKKyAgICAgICAg
ICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZVNsb3dQYXRoKG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSwgbGFiZWwoKSk7CiAKICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKICAgICAgICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKICAg
ICAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpOwotICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlT2Zm
c2V0OworICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJs
b2NrOwogICAgICAgICAgICAgcHJvYmUoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7CiAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSBTTE9XICIs
IG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIg
QCAiLCBjb2RlQmxvY2spOwpAQCAtNjIzLDcgKzYyMiw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAKICNpZm5kZWYgTkRFQlVHCiAgICAgLy8gUmVzZXQgdGhpcywgaW4g
b3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCi0gICAgbV9ieXRlY29kZU9mZnNl
dCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICBtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KCk7CiAjZW5kaWYKIH0KIApAQCAtNjc0LDcgKzY3Myw3IEBA
IHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CiAgICAgfQogICAgIAotICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbigw
LCBudWxscHRyKSk7CisgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpKTsKIAogICAgIExhYmVsIGVudHJ5
TGFiZWwodGhpcyk7CiAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQpAQCAtNzExLDcgKzcxMCw3IEBA
IHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogICAgIGVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CiAKICAgICBpZiAo
bV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7Ci0gICAgICAgIEFTU0VS
VChtX2J5dGVjb2RlT2Zmc2V0ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSk7CisgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgaWYgKHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICAgICAgZm9yIChpbnQgYXJndW1lbnQgPSAwOyBh
cmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAg
ICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0
byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KQEAgLTc0MSw3ICs3NDAsNyBAQCB2
b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9y
dCkKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBD
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKICAgICBzdGFj
a092ZXJmbG93LmxpbmsodGhpcyk7Ci0gICAgbV9ieXRlY29kZU9mZnNldCA9IDA7CisgICAgbV9i
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0
PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRp
b24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2NrKTsKQEAgLTc1
Nyw3ICs3NTYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCksIHJlZ1QxKTsKICAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKS5saW5r
VG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAKLSAgICAgICAgbV9ieXRlY29kZU9mZnNldCA9IDA7Cisg
ICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAKICAgICAgICAgaWYg
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtNzY5LDcgKzc2OCw3IEBAIHZvaWQgSklU
Ojpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAg
ICAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAg
ICAgbV9ieXRlY29kZU9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMu
CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsgLy8gUmVzZXQgdGhp
cywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCiAjZW5kaWYKIAogICAg
ICAgICBqdW1wKGJlZ2luTGFiZWwpOwpAQCAtODA5LDcgKzgwOCw3IEBAIENvbXBpbGF0aW9uUmVz
dWx0IEpJVDo6bGluaygpCiAKICAgICAvLyBUcmFuc2xhdGUgdlBDIG9mZnNldHMgaW50byBhZGRy
ZXNzZXMgaW4gSklUIGdlbmVyYXRlZCBjb2RlLCBmb3Igc3dpdGNoIHRhYmxlcy4KICAgICBmb3Ig
KGF1dG8mIHJlY29yZCA6IG1fc3dpdGNoZXMpIHsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQgPSByZWNvcmQuYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gcmVjb3JkLmJ5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAKICAgICAgICAgaWYgKHJl
Y29yZC50eXBlICE9IFN3aXRjaFJlY29yZDo6U3RyaW5nKSB7CiAgICAgICAgICAgICBBU1NFUlQo
cmVjb3JkLnR5cGUgPT0gU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUgfHwgcmVjb3JkLnR5cGUgPT0g
U3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpOyAKQEAgLTg5NCw3ICs4OTMsNyBAQCBDb21waWxhdGlv
blJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIEpJVENvZGVNYXAgaml0Q29kZU1hcDsKICAgICBmb3Ig
KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5z
aXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKICAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2Rl
T2Zmc2V0XS5pc1NldCgpKQotICAgICAgICAgICAgaml0Q29kZU1hcC5hcHBlbmQoYnl0ZWNvZGVP
ZmZzZXQsIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0
ZWNvZGVPZmZzZXRdKSk7CisgICAgICAgICAgICBqaXRDb2RlTWFwLmFwcGVuZChCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFn
PihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAgICAgaml0Q29kZU1hcC5maW5p
c2goKTsKICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChXVEZNb3ZlKGppdENvZGVNYXAp
KTsKQEAgLTk0OSw3ICs5NDgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25I
YW5kbGVycygpCiAgICAgICAgIC8vIG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9t
Q2FsbGVyRnJhbWUgaXMgcGFzc2VkIG9uZSBhcmd1bWVudCwgdGhlIFZNKi4KICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAg
cHJlcGFyZUNhbGxPcGVyYXRpb24odm0oKSk7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxS
ZWNvcmQoY2FsbChPcGVyYXRpb25QdHJUYWcpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhj
ZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQo
Q2FsbFJlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIEJ5dGVjb2RlSW5kZXgoKSwgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyRnJv
bUNhbGxlckZyYW1lKSkpOwogICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwog
ICAgIH0KIApAQCAtOTYyLDcgKzk2MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2Vw
dGlvbkhhbmRsZXJzKCkKICAgICAgICAgLy8gb3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxl
ciBpcyBwYXNzZWQgb25lIGFyZ3VtZW50LCB0aGUgVk0qLgogICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoJnZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBwcmVwYXJlQ2Fs
bE9wZXJhdGlvbih2bSgpKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxs
KE9wZXJhdGlvblB0clRhZyksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwg
RnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5k
bGVyKSkpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwoT3BlcmF0aW9u
UHRyVGFnKSwgQnl0ZWNvZGVJbmRleCgpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSk7CiAgICAgICAgIGp1bXBUb0V4Y2VwdGlv
bkhhbmRsZXIodm0oKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggMTk3
NzlhM2MyM2NjY2Q1NzAyMTdiZDQ0N2E0NzJiYzEwODI4YWU3MC4uZDQ1ZmMwMzUwY2IxMjhkNmVi
MTRjNWM3OTA4NDZiYjJkYjFmMTkzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC03MCwx
NiArNzAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb207Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0OworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiAgICAgICAg
IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY2FsbGVlOwogCiAgICAgICAgIENhbGxSZWNv
cmQoKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBDYWxsUmVjb3JkKE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGZyb20sIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+IGNhbGxlZSkKKyAgICAgICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBmcm9tLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4gY2FsbGVlKQogICAgICAgICAgICAgOiBmcm9tKGZyb20pCi0gICAgICAg
ICAgICAsIGJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICAgICAgLCBieXRl
Y29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICAsIGNhbGxlZShjYWxsZWUpCiAg
ICAgICAgIHsKICAgICAgICAgfQpAQCAtOTgsOSArOTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZnJvbTsKLSAgICAgICAgdW5zaWduZWQgdG87CisgICAgICAgIEJ5dGVjb2RlSW5kZXggdG87CiAg
ICAgICAgIAotICAgICAgICBTbG93Q2FzZUVudHJ5KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIHVu
c2lnbmVkIHQpCisgICAgICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwg
Qnl0ZWNvZGVJbmRleCB0KQogICAgICAgICAgICAgOiBmcm9tKGYpCiAgICAgICAgICAgICAsIHRv
KHQpCiAgICAgICAgIHsKQEAgLTEyMSwyMCArMTIxLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgU3RyaW5nSnVtcFRhYmxlKiBzdHJpbmdKdW1wVGFibGU7CiAgICAgICAgIH0ganVt
cFRhYmxlOwogCi0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OworICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiAgICAgICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQ7
CiAKLSAgICAgICAgU3dpdGNoUmVjb3JkKFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlLCB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgdW5zaWduZWQgZGVmYXVsdE9mZnNldCwgVHlwZSB0eXBlKQor
ICAgICAgICBTd2l0Y2hSZWNvcmQoU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUsIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgZGVmYXVsdE9mZnNldCwgVHlwZSB0eXBlKQog
ICAgICAgICAgICAgOiB0eXBlKHR5cGUpCi0gICAgICAgICAgICAsIGJ5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0KQorICAgICAgICAgICAgLCBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
CiAgICAgICAgICAgICAsIGRlZmF1bHRPZmZzZXQoZGVmYXVsdE9mZnNldCkKICAgICAgICAgewog
ICAgICAgICAgICAgdGhpcy0+anVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZSA9IGp1bXBUYWJsZTsK
ICAgICAgICAgfQogCi0gICAgICAgIFN3aXRjaFJlY29yZChTdHJpbmdKdW1wVGFibGUqIGp1bXBU
YWJsZSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQpCisg
ICAgICAgIFN3aXRjaFJlY29yZChTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0KQogICAgICAgICAgICAg
OiB0eXBlKFN0cmluZykKLSAgICAgICAgICAgICwgYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQpCisgICAgICAgICAgICAsIGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAg
ICAgICwgZGVmYXVsdE9mZnNldChkZWZhdWx0T2Zmc2V0KQogICAgICAgICB7CiAgICAgICAgICAg
ICB0aGlzLT5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlID0ganVtcFRhYmxlOwpAQCAtMTQ0LDcg
KzE0NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0cnVjdCBCeVZhbENvbXBpbGF0aW9uSW5m
byB7CiAgICAgICAgIEJ5VmFsQ29tcGlsYXRpb25JbmZvKCkgeyB9CiAgICAgICAgIAotICAgICAg
ICBCeVZhbENvbXBpbGF0aW9uSW5mbyhCeVZhbEluZm8qIGJ5VmFsSW5mbywgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbm90SW5kZXhKdW1wLCBN
YWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcCwgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBkb25lVGFyZ2V0LCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbmV4dEhvdFBhdGhUYXJnZXQpCisg
ICAgICAgIEJ5VmFsQ29tcGlsYXRpb25JbmZvKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG5vdElu
ZGV4SnVtcCwgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXAsIEpJVEFy
cmF5TW9kZSBhcnJheU1vZGUsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgZG9uZVRhcmdldCwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG5leHRIb3RQYXRo
VGFyZ2V0KQogICAgICAgICAgICAgOiBieVZhbEluZm8oYnlWYWxJbmZvKQogICAgICAgICAgICAg
LCBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICAsIG5vdEluZGV4SnVt
cChub3RJbmRleEp1bXApCkBAIC0xNTcsNyArMTU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIH0KIAogICAgICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbzsKLSAgICAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OwogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBub3RJbmRleEp1bXA7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOwogICAgICAgICBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlOwpAQCAtMTkyLDcgKzE5Miw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0g
MjU2OwogCiAgICAgcHVibGljOgotICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gMCwgdW5z
aWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSAwKTsKKyAgICAgICAgSklUKFZNJiwg
Q29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVP
ZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwogCiAgICAgICAgIFZN
JiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6dm0oKTsgfQpAQCAtMjAyLDcgKzIwMiw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZG9NYWluVGhyZWFkUHJlcGFyYXRp
b25CZWZvcmVDb21waWxlKCk7CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25S
ZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMCkKKyAgICAgICAgc3Rh
dGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zm
c2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEpJ
VCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsK
ICAgICAgICAgfQpAQCAtMjEwLDI4ICsyMTAsMjggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxv
Y2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkK
ICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAg
ICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAg
ICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsK
ICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5VmFsKGxvY2tlciwgYnlWYWxJbmZv
LCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGlj
IHZvaWQgY29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKICAgICAgICAgewogICAgICAgICAg
ICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zm
c2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0Lm1fYnl0ZWNv
ZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2
YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywg
cHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQ
dXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewogICAgICAgICAg
ICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zm
c2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0Lm1fYnl0ZWNv
ZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2
YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5B
ZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMg
dm9pZCBjb21waWxlRGlyZWN0UHV0QnlWYWwoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2Nr
ZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAg
ICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAg
ICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbDxPcFB1dEJ5VmFsRGlyZWN0Pihs
b2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQog
CkBAIC0yMzksMTQgKzIzOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZv
aWQgY29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IFB1dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogICAgICAg
ICB7CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0
Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAg
ICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAg
ICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQ8T3A+KGJ5VmFsSW5m
bywgcmV0dXJuQWRkcmVzcywgcHV0S2luZCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewogICAgICAg
ICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2Rl
T2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0Lm1fYnl0
ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5w
cml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShieVZhbEluZm8sIHJldHVybkFkZHJlc3Ms
IGFycmF5TW9kZSk7CiAgICAgICAgIH0KIApAQCAtMjc3LDcgKzI3Nyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewogICAgICAgICAgICAgQ2FsbCBmdW5jdGlvbkNh
bGwgPSBjYWxsKE9wZXJhdGlvblB0clRhZyk7Ci0gICAgICAgICAgICBtX2NhbGxzLmFwcGVuZChD
YWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgZnVuY3Rpb24ucmV0YWdn
ZWQ8T3BlcmF0aW9uUHRyVGFnPigpKSk7CisgICAgICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxs
UmVjb3JkKGZ1bmN0aW9uQ2FsbCwgbV9ieXRlY29kZUluZGV4LCBmdW5jdGlvbi5yZXRhZ2dlZDxP
cGVyYXRpb25QdHJUYWc+KCkpKTsKICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAg
ICAgICAgIH0KIApAQCAtNzU0LDEyICs3NTQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICArK2l0ZXI7CiAgICAgICAgIH0KICAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgaW50IHZpcnR1YWxSZWdpc3Rl
ckluZGV4KTsKLSAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVPZmZzZXQo
VmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgICAg
ICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVu
dHJ5PiYgc2xvd0Nhc2VzLAorICAgICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwogCiAgICAgICAgIHZvaWQgbGlu
a0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVPZmZzZXQobV9z
bG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICAgICAgbGlua0FsbFNs
b3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRl
eCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpA
QCAtOTM0LDcgKzkzNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8Q2FsbENv
bXBpbGF0aW9uSW5mbz4gbV9jYWxsQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8SnVt
cFRhYmxlPiBtX2ptcFRhYmxlOwogCi0gICAgICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7
CisgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwogICAgICAgICBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+
IG1fc3dpdGNoZXM7CiAKQEAgLTk2OCw3ICs5NjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxk
RW1pdFByb2ZpbGluZzsKICAgICAgICAgYm9vbCBtX3Nob3VsZFVzZUluZGV4TWFza2luZzsKLSAg
ICAgICAgdW5zaWduZWQgbV9sb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCB7IDAgfTsKKyAgICAg
ICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRl
eCA3OGEzYTQxYTRiOTczMGJjOTNlZGY2ZWI1NDQ1NzgyZWNkMTc4ODMwLi5iZjIzMDZiY2U0ZDU2
ZjEwOWEwMzYxOGIzNDA3MmZjNTdjMGU1YWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwogICAgIENh
bGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKLSAgICBp
bmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVP
ZmZzZXQpLCByZWdUMCk7CisgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJP
ZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwogCkBAIC0yMjYsOCArMjI2LDggQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmQKICAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CiAK
ICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyks
IHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChpbnN0cnVjdGlvbik7Ci0gICAgdWlu
dDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZU9mZnNldCkuYml0cygp
OworICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGlu
c3RydWN0aW9uKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5
dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJp
dHMpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9s
ZHMgY2FsbGVlLgpAQCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kCiAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOwogCiAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9u
SW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChD
YWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
T2Zmc2V0KSwgcmVnVDApOworICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxU
eXBlRm9yKG9wY29kZUlEKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCByZWdUMCk7CiAg
ICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwog
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2lu
ID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGVNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZU1hcC5oCmluZGV4IGUxMzA4ZjMzNWI4YTM3NDc1OWE4ODcwMGQ4ZDNm
Zjc1NGU3OWY1OTcuLmUwNzU3MjRmOWRmZThiZDQ5NWMyMTNkNGM1ZjFiMjFmNWUxYmM0NjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZU1hcC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZU1hcC5oCkBAIC0zOCwzMSArMzgsMzEgQEAg
cHJpdmF0ZToKICAgICBzdHJ1Y3QgRW50cnkgewogICAgICAgICBFbnRyeSgpIHsgfQogCi0gICAg
ICAgIEVudHJ5KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+IGNvZGVMb2NhdGlvbikKKyAgICAgICAgRW50cnkoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4LCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24p
CiAgICAgICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAg
ICAgLCBtX2NvZGVMb2NhdGlvbihjb2RlTG9jYXRpb24pCiAgICAgICAgIHsgfQogCi0gICAgICAg
IGlubGluZSB1bnNpZ25lZCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29k
ZUluZGV4OyB9CisgICAgICAgIGlubGluZSBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KICAgICAgICAgaW5saW5lIENvZGVMb2Nh
dGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbigpIHsgcmV0dXJuIG1fY29kZUxv
Y2F0aW9uOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwogICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBtX2NvZGVMb2NhdGlvbjsKICAgICB9OwogCiBw
dWJsaWM6Ci0gICAgdm9pZCBhcHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29kZUxvY2F0
aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uKQorICAgIHZvaWQgYXBwZW5kKEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRh
Zz4gY29kZUxvY2F0aW9uKQogICAgIHsKICAgICAgICAgbV9lbnRyaWVzLmFwcGVuZCh7IGJ5dGVj
b2RlSW5kZXgsIGNvZGVMb2NhdGlvbiB9KTsKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaCgpIHsg
bV9lbnRyaWVzLnNocmlua1RvRml0KCk7IH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+IGZpbmQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QKKyAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBmaW5kKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCkgY29uc3QKICAgICB7CiAgICAgICAgIGF1dG8qIGVudHJ5ID0KLSAgICAgICAgICAgIGJpbmFy
eVNlYXJjaDxFbnRyeSwgdW5zaWduZWQ+KG1fZW50cmllcywKKyAgICAgICAgICAgIGJpbmFyeVNl
YXJjaDxFbnRyeSwgQnl0ZWNvZGVJbmRleD4obV9lbnRyaWVzLAogICAgICAgICAgICAgICAgIG1f
ZW50cmllcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgsIFtdIChFbnRyeSogZW50cnkpIHsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LT5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgICAg
ICAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fz
c2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5j
cHAKaW5kZXggMjBlZDM3ZmVlM2EwZjNjOTljNjI4MjU0NWE0YzEwYjNiYmUzNzljOS4uNzVmOWUy
NTE2MWI1MjM2YjMwYzgzZjMzNmQxZGVkZDEzNDhlMmRkZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcApAQCAtMTE4LDcgKzExOCw3IEBAIFZlY3Rv
cjxKSVREaXNhc3NlbWJsZXI6OkR1bXBlZE9wPiBKSVREaXNhc3NlbWJsZXI6OmR1bXBWZWN0b3JG
b3JJbnN0cnVjdGlvbnMoTGluCiAgICAgICAgIH0KICAgICAgICAgb3V0LnJlc2V0KCk7CiAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoRHVtcGVkT3AoKSk7Ci0gICAgICAgIHJlc3VsdC5sYXN0KCkuaW5k
ZXggPSBpOworICAgICAgICByZXN1bHQubGFzdCgpLmJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUlu
ZGV4KGkpOwogICAgICAgICBvdXQucHJpbnQocHJlZml4KTsKICAgICAgICAgbV9jb2RlQmxvY2st
PmR1bXBCeXRlY29kZShvdXQsIGkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG5leHRJbmRleCA9
IGkgKyAxOyA7IG5leHRJbmRleCsrKSB7CkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBKSVREaXNh
c3NlbWJsZXI6OnJlcG9ydEluc3RydWN0aW9ucyhQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBp
bGF0aW9uLCBMaW4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZHVtcGVkT3BzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIGNvbXBpbGF0aW9uLT5hZGREZXNjcmlwdGlvbigKICAgICAgICAg
ICAgIFByb2ZpbGVyOjpDb21waWxlZEJ5dGVjb2RlKAotICAgICAgICAgICAgICAgIFByb2ZpbGVy
OjpPcmlnaW5TdGFjayhQcm9maWxlcjo6T3JpZ2luKGNvbXBpbGF0aW9uLT5ieXRlY29kZXMoKSwg
ZHVtcGVkT3BzW2ldLmluZGV4KSksCisgICAgICAgICAgICAgICAgUHJvZmlsZXI6Ok9yaWdpblN0
YWNrKFByb2ZpbGVyOjpPcmlnaW4oY29tcGlsYXRpb24tPmJ5dGVjb2RlcygpLCBkdW1wZWRPcHNb
aV0uYnl0ZWNvZGVJbmRleCkpLAogICAgICAgICAgICAgICAgIGR1bXBlZE9wc1tpXS5kaXNhc3Nl
bWJseSkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURGlzYXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2Vt
Ymxlci5oCmluZGV4IDVlMzIyODYwMWEzNDAyNDdkYmZiMDhmNThlMmFjYjUyOTVmZWFhOWYuLjVh
NjI3NmFlYzg2MWJhN2RkMDBlMWE0MGM5NTBmNTEyYzE0ZTExZDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuaApAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRl
OgogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBmaXJzdFNsb3dMYWJlbCgpOwogICAgIAogICAg
IHN0cnVjdCBEdW1wZWRPcCB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4OworICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiAgICAgICAgIENTdHJpbmcgZGlzYXNzZW1ibHk7CiAg
ICAgfTsKICAgICBWZWN0b3I8RHVtcGVkT3A+IGR1bXBWZWN0b3JGb3JJbnN0cnVjdGlvbnMoTGlu
a0J1ZmZlciYsIGNvbnN0IGNoYXIqIHByZWZpeCwgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpMYWJl
bD4mIGxhYmVscywgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGVuZExhYmVsKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKaW5kZXggMzk1OWI4ZDUwODhjNGZhNzA3MGY0ZTU4NmFi
MDhjNzU0M2YxZDI4MS4uMTA4MDA0NjNiYWM5NzhhYWJiYjFhYWQ0ZWE1NmM2NzhjNzUxYjYwMSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKQEAgLTEwOSwyOSArMTA5LDIz
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCwKIAogQUxXQVlTX0lOTElORSBKSVQ6OkNhbGwgSklU
OjplbWl0TmFrZWRDYWxsKENvZGVQdHI8Tm9QdHJUYWc+IHRhcmdldCkKIHsKLSAgICBBU1NFUlQo
bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkp
OyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBh
dGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKyAgICBBU1NF
UlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4
IGlzIHNldC4KICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJDYWxsKCk7Ci0gICAgbV9jYWxscy5h
cHBlbmQoQ2FsbFJlY29yZChuYWtlZENhbGwsIG1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4odGFyZ2V0LnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkpKTsK
KyAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29kZUluZGV4
LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHRhcmdldC5yZXRhZ2dlZDxPcGVyYXRpb25Q
dHJUYWc+KCkpKSk7CiAgICAgcmV0dXJuIG5ha2VkQ2FsbDsKIH0KIAogQUxXQVlTX0lOTElORSBK
SVQ6OkNhbGwgSklUOjplbWl0TmFrZWRUYWlsQ2FsbChDb2RlUHRyPE5vUHRyVGFnPiB0YXJnZXQp
CiB7Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1
cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBp
cyBzZXQuCisgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAgICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyVGFpbENh
bGwoKTsKLSAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29k
ZU9mZnNldCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPih0YXJnZXQucmV0YWdnZWQ8T3Bl
cmF0aW9uUHRyVGFnPigpKSkpOworICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQobmFrZWRD
YWxsLCBtX2J5dGVjb2RlSW5kZXgsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4odGFyZ2V0
LnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkpKTsKICAgICByZXR1cm4gbmFrZWRDYWxsOwog
fQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjp1cGRhdGVUb3BDYWxsRnJhbWUoKQogewotICAg
IEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KG1fYnl0ZWNvZGVPZmZzZXQpID49IDApOwotI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVPZmZzZXQpLnB0cigpOwotICAg
IHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoaW5zdHJ1Y3Rpb24pLmJpdHMo
KTsKLSNlbHNlCi0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlT2Zmc2V0KS5iaXRzKCk7Ci0jZW5kaWYKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMg
PSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSk7CiAgICAgCiAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhpcyBpcyBu
ZWVkZWQuIEpJVE9wZXJhdGlvbnMgdGVuZCB0byB1cGRhdGUgdGhlIHRvcCBjYWxsIGZyYW1lIG9u
CkBAIC0xOTYsNDUgKzE5MCw0NSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJgogICAgICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxT
bG93Q2FzZXNGb3JCeXRlY29kZU9mZnNldChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNl
cywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0
ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQog
ewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRl
Y29kZU9mZnNldCkKKyAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+
dG8gPT0gYnl0ZWNvZGVJbmRleCkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCiBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCiB7Ci0gICAgQVNT
RVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29s
ZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisgICAg
QVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJ
bmRleCBpcyBzZXQuCiAKLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1w
LCBtX2J5dGVjb2RlT2Zmc2V0KSk7CisgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50
cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCkKIHsKLSAgICBBU1NFUlQobV9i
eXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOyAv
LyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKyAgICBBU1NFUlQo
bV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1
cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlz
IHNldC4KIAogICAgIGZvciAoY29uc3QgSnVtcCYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0g
ICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVP
ZmZzZXQpKTsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwg
bV9ieXRlY29kZUluZGV4KSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dD
YXNlKCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zm
c2V0IGlzIHNldC4KKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KICAgICAKICAgICBKdW1wIGVtcHR5SnVtcDsg
Ly8gRG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBXaW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZU9mZnNldCkpOwor
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29k
ZUluZGV4KSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1w
LCBpbnQgcmVsYXRpdmVPZmZzZXQpCiB7Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsgLy8gVGhpcyBtZXRob2Qgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRo
YXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7
IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBtX2pt
cFRhYmxlLmFwcGVuZChKdW1wVGFibGUoanVtcCwgbV9ieXRlY29kZU9mZnNldCArIHJlbGF0aXZl
T2Zmc2V0KSk7CisgICAgbV9qbXBUYWJsZS5hcHBlbmQoSnVtcFRhYmxlKGp1bXAsIG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0KSk7CiB9CiAKIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFkZEp1bXAoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0LCBpbnQgcmVsYXRpdmVP
ZmZzZXQpCiB7Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9m
ZnNldCBpcyBzZXQuCisgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBz
byB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKICAgICBmb3IgKGF1dG8mIGp1bXAgOiBq
dW1wTGlzdC5qdW1wcygpKQogICAgICAgICBhZGRKdW1wKGp1bXAsIHJlbGF0aXZlT2Zmc2V0KTsK
QEAgLTI0Miw5ICsyMzYsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRKdW1wKGNvbnN0
IEp1bXBMaXN0JiBqdW1wTGlzdCwgaW50IHJlbGF0aXZlT2Zmc2V0KQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNl
dCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0
IGlzIHNldC4KKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRo
YXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIGp1bXAubGlua1RvKG1fbGFiZWxzW21f
Ynl0ZWNvZGVPZmZzZXQgKyByZWxhdGl2ZU9mZnNldF0sIHRoaXMpOworICAgIGp1bXAubGlua1Rv
KG1fbGFiZWxzW21fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0XSwgdGhp
cyk7CiB9CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCkBAIC01NzMsNyArNTY3LDcgQEAg
QUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KGludCBvcDEsIGlu
dCBvcDIsIGludCYgb3AsIGludDMyX3QKIC8vIGdldCBhcmcgcHV0cyBhbiBhcmcgZnJvbSB0aGUg
U0YgcmVnaXN0ZXIgYXJyYXkgaW50byBhIGgvdyByZWdpc3RlcgogQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKIHsK
LSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNl
dC4KKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoc3JjKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAppbmRleCBmM2FiNTlhYTk0MjM0ZWE0MTI4ZWI0OTVjMzkyY2U5OTViNjYzMzJmLi4wZmM0MDY5
MjdmNzJkYmEwYmU1NzViYjhiMDBiOWY0Y2E2ZTZmYzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTE2OSw3ICsxNjksNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CiAKICAgICBKSVRJbnN0
YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksCisgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAogICAgICAgICByZWdUMCwgLy8gcmVzdWx0CiAgICAgICAgIHJlZ1QyLCAvLyB2
YWx1ZQpAQCAtNzIwLDkgKzcyMCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1
ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hv
dWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9T
UkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRl
eC5hc0JpdHMoKSk7CiAgICAgZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRy
eU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVPZmZzZXQp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZh
bHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBz
a2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhj
ZXB0aW9uSGFuZGxlclB0clRhZyk7CkBAIC03NjAsNyArNzYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAg
ICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRo
aXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZt
X2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CisgICAgbV9zd2l0Y2hlcy5hcHBlbmQo
U3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBT
d2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUo
KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CkBAIC03
NzcsNyArNzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZv
ciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAg
U2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKLSAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRh
YmxlLCBtX2J5dGVjb2RlT2Zmc2V0LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJh
Y3RlcikpOworICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1f
Ynl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsK
ICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwpAQCAtNzk0LDcgKzc5NCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0
cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFi
bGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlT2Zm
c2V0LCBkZWZhdWx0T2Zmc2V0KSk7CisgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3Jk
KGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKQEAgLTEwMzYs
NyArMTAzNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAKICAgICAgICAgY29weUNhbGxl
ZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCkudG9wRW50cnlGcmFtZSk7CiAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRp
bWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICAg
ICAgSnVtcCBub09wdGltaXplZEVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CiAgICAgICAgICAgICBKdW1w
IG9rID0gYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgcmV0dXJuVmFsdWVHUFIsIFRy
dXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMTAw
MCkpKSk7CkBAIC0xMzAxLDcgKzEzMDEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAg
TGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9m
ZnNldCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0
SG90UGF0aCkpOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGls
YXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJh
ZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpA
QCAtMTUwNCw3ICsxNTA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbnN1cmVT
aGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNj
cmF0Y2gyUmVnKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlLm9mZnNldCgpLCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNr
ZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9j
aywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSk7CisgICAgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBt
X2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlm
IC8vIFVTRShKU1ZBTFVFNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKaW5kZXggNDgzNDU1ZWM0YzdlYmNhZDBmZWM5YTNlNTc2ZWE2NmY5MmE3MDYx
YS4uZGZjMTU5ODk1MzlmYmJjN2M2ZTUzMDc2YTE2NWM2YzQ2NjA5YzZlYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMTU5LDcgKzE1OSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG8pOwog
ICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
T2Zmc2V0KSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKICAg
ICAgICAgcmVnVDIsIC8vIHZhbHVlCkBAIC05MTIsOSArOTEyLDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWYWx1ZVBy
b2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBp
ZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZU9mZnNldCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0o
KSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwg
bV9ieXRlY29kZU9mZnNldCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NS
RW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0
cygpKTsKICAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJu
VmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CkBAIC05NTIsNyArOTUyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
CiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNr
IHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9
ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIG1fc3dpdGNo
ZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1
bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CisgICAgbV9zd2l0Y2hlcy5hcHBl
bmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0
LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFi
bGUoKTsKIAogICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKQEAgLTk2OSw3
ICs5NjksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3
aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1w
bGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUs
IG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVy
KSk7CisgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRl
Y29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAg
IGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAogICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwg
cmVnVDEsIHJlZ1QwKTsKQEAgLTk4Niw3ICs5ODYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29k
ZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZU9mZnNldCwgZGVmYXVs
dE9mZnNldCkpOworICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUs
IG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCkpOwogCiAgICAgZW1pdExvYWQoc2NydXRp
bmVlLCByZWdUMSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3Ry
aW5nV2l0aFVua25vd25LZXlUeXBlLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgpOwpAQCAtMTE3NCw3ICsxMTc0LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsK
ICAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9u
SW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlw
ZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGls
YXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNv
ZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBu
ZXh0SG90UGF0aCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCmluZGV4IGIzM2MzMDY4MTAxMWZkZjFkNWMzZDEwMmQxYTdkZTBmNjQ1
NWI4NTAuLjYyYWU1ODg5MjRmMGNkYjUzYTk4NDE3NDk1ZGRiNTNlYzEwODc3MzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNzk3LDcgKzc5Nyw3
IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsCiAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgp
ICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFz
T2JqZWN0KGJhc2VWYWx1ZSk7CiAKLSAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVP
ZmZzZXQoKSk7CisgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBC
eXRlY29kZUluZGV4KDApKTsKICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5l
KTsKIAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZt
KTsKQEAgLTgyMSw3ICs4MjEsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5
VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbAogICAgICAgICBj
b25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGds
b2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXph
dGlvblJlc3VsdDo6R2l2ZVVwKTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8
ICFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJh
bWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0
ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICAgICAgQVNTRVJUKCFi
eVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4p
IHsKICAgICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZCA9PSBwcm9wZXJ0eU5h
bWUpIHsKQEAgLTg4Nyw3ICs4ODcsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURp
cmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChzdWJzY3JpcHQu
aXNJbnQzMigpKSB7Ci0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkp
OworICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJ
bmRleCgwKSk7CiAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CiAKICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CkBAIC05
MTAsNyArOTEwLDcgQEAgc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlEaXJlY3RQdXRCeVZh
bE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QKICAgICAgICAgY29uc3QgSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmpl
Y3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1
bHQ6OkdpdmVVcCk7CiAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJ
bmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRl
Y29kZU9mZnNldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5k
ZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZv
LT5zdHViUm91dGluZSk7CiAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQgPT0gcHJvcGVydHlOYW1lKSB7CkBA
IC0xNDc4LDExICsxNDc4LDEyIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5k
T3B0aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICBjb2RlQmxvY2st
Pm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKIH0KIAotU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uT3B0aW1pemUoVk0qIHZtUG9pbnRlciwgdWludDMyX3QgYnl0ZWNvZGVJ
bmRleCkKK1Nsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXpl
KFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXhCaXRzKQogewogICAgIFZNJiB2
bSA9ICp2bVBvaW50ZXI7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleDo6ZnJv
bUJpdHMoYnl0ZWNvZGVJbmRleEJpdHMpOwogCiAgICAgLy8gRGVmZXIgR0MgZm9yIGEgd2hpbGUg
c28gdGhhdCBpdCBkb2Vzbid0IHJ1biBiZXR3ZWVuIHdoZW4gd2UgZW50ZXIgaW50byB0aGlzCiAg
ICAgLy8gc2xvdyBwYXRoIGFuZCB3aGVuIHdlIGZpZ3VyZSBvdXQgdGhlIHN0YXRlIG9mIG91ciBj
b2RlIGJsb2NrLiBUaGlzIHByZXZlbnRzCkBAIC0xNzI0LDExICsxNzI1LDEyIEBAIFNsb3dQYXRo
UmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXplKFZNKiB2bVBvaW50ZXIs
IHVpbnQzMl90IGJ5dGVjCiAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgwLCAwKTsKIH0KIAotY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2goVk0qIHZtUG9pbnRl
ciwgdWludDMyX3QgYnl0ZWNvZGVJbmRleCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VHJ5T1NSRW50ZXJBdENhdGNoKFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXhC
aXRzKQogewogICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYnl0ZWNvZGVJbmRleEJpdHMpOwogCiAgICAgQ29kZUJs
b2NrKiBvcHRpbWl6ZWRSZXBsYWNlbWVudCA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnJlcGxh
Y2VtZW50KCk7CiAgICAgaWYgKFVOTElLRUxZKCFvcHRpbWl6ZWRSZXBsYWNlbWVudCkpCkBAIC0x
NzQ2LDExICsxNzQ4LDEyIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50
ZXJBdENhdGNoKFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjb2RlCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENh
dGNoQW5kVmFsdWVQcm9maWxlKFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgp
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVl
UHJvZmlsZShWTSogdm1Qb2ludGVyLCB1aW50MzJfdCBieXRlY29kZUluZGV4Qml0cykKIHsKICAg
ICBWTSYgdm0gPSAqdm1Qb2ludGVyOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXg6OmZyb21CaXRzKGJ5dGVjb2RlSW5kZXhCaXRzKTsKIAogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZFJl
cGxhY2VtZW50ID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwpAQCAtMTc2Nyw3ICsxNzcwLDcg
QEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1
ZVByb2ZpbGUoVk0qIHZtUG9pbnRlciwgdWkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
Y29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlT2Zmc2V0
KGJ5dGVjb2RlSW5kZXgpOworICAgIGNvZGVCbG9jay0+ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29t
cHV0ZWRGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5hczxPcENhdGNo
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsK
ICAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmQmIHByb2ZpbGUpIHsKQEAgLTE5MjcsNyArMTkzMCw3IEBAIHN0YXRpYyBKU1ZhbHVlIGdldEJ5
VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U1ZhCiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwog
ICAgICAgICAgICAgaWYgKGV4aXN0aW5nQXRvbVN0cmluZykgewogICAgICAgICAgICAgICAgIGlm
IChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+ZmFzdEdldE93blByb3BlcnR5
KHZtLCBzdHJ1Y3R1cmUsIGV4aXN0aW5nQXRvbVN0cmluZy5nZXQoKSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUlu
ZGV4KDApKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYg
YnlWYWxJbmZvLT5jYWNoZWRJZC5pbXBsKCkgIT0gZXhpc3RpbmdBdG9tU3RyaW5nKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTkzNyw3ICsxOTQwLDcgQEAgc3RhdGlj
IEpTVmFsdWUgZ2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTVmEKICAgICB9CiAKICAgICBpZiAoc3Vic2NyaXB0LmlzSW50MzIoKSkg
ewotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAg
QVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwog
ICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAKICAgICAgICAgaW50MzJf
dCBpID0gc3Vic2NyaXB0LmFzSW50MzIoKTsKQEAgLTE5NzgsNyArMTk4MSw3IEBAIHN0YXRpYyBK
U1ZhbHVlIGdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBKU1ZhCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5
S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1
ZSgpKTsKIAotICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFT
U0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKICAg
ICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIWlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0
KSB8fCBieVZhbEluZm8tPmNhY2hlZElkICE9IHByb3BlcnR5KSkKICAgICAgICAgYnlWYWxJbmZv
LT50b29rU2xvd1BhdGggPSB0cnVlOwogCkBAIC0xOTk2LDcgKzE5OTksNyBAQCBzdGF0aWMgT3B0
aW1pemF0aW9uUmVzdWx0IHRyeUdldEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbAogICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQu
aXNJbnQzMigpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFs
dWUpOwogCi0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOworICAg
ICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgw
KSk7CiAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CiAKICAgICAgICAg
aWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2JqZWN0LT5zdHJ1Y3R1cmUodm0pKSkgewpAQCAt
MjAyNCw3ICsyMDI3LDcgQEAgc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlHZXRCeVZhbE9w
dGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGwKICAgICAgICAgY29uc3Qg
SWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxP
YmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25S
ZXN1bHQ6OkdpdmVVcCk7CiAgICAgICAgIGlmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5i
eXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2Rl
SW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJ
bmZvLT5zdHViUm91dGluZSk7CiAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2FjaGVkSWQgPT0gcHJvcGVydHlOYW1lKSB7
CkBAIC0yMTA4LDcgKzIxMTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQoSlNHbG9iYWxPYmplY3QqCiAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAgICAgYm9vbCBkaWRPcHRpbWl6ZSA9
IGZhbHNlOwogCi0gICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CisgICAg
QVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwog
ICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CiAgICAgCiAgICAgaWYgKGhhc09w
dGltaXphYmxlSW5kZXhpbmcob2JqZWN0LT5zdHJ1Y3R1cmUodm0pKSkgewpAQCAtMjE4MSw3ICsy
MTg0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0
cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICAgICAgICAgcmVzdWx0ID0gYmFzZVZh
bHVlLmdldChnbG9iYWxPYmplY3QsIGkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKCFpc0pTU3RyaW5nKGJhc2VWYWx1
ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2Rl
SW5kZXgoMCkpOwogICAgICAgICAgICAgYXV0byBnZXRCeVZhbEZ1bmN0aW9uID0gYnlWYWxJbmZv
LT5zdHViUm91dGluZSA/IG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemU7CiAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0
dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBnZXRCeVZhbEZ1bmN0aW9uKTsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAppbmRleCA5ZWQyMzc3YzBhYTA0Y2YwMWVlM2JmZWJkNWM5MGRmZjRlYjI3MzAxLi5mZjM5
YjIyYjBmMTdkY2I4NDEwOTNiNDU1ZTg5NDZiMGI0Y2JkODc1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIAogICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsKIAotICAgIG1f
YnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5m
bywgbV9ieXRlY29kZU9mZnNldCwgbm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRv
bmUsIG5leHRIb3RQYXRoKSk7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlW
YWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4LCBi
YWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwogfQogCiBKSVRHZXRC
eUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBPcEdldEJ5VmFsIGJ5dGVjb2RlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEp1bXAmIGZhc3REb25lQ2FzZSwgSnVtcCYgc2xvd0RvbmVDYXNlLCBKdW1wTGlzdCYgc2xv
d0Nhc2VzKQpAQCAtMTQyLDcgKzE0Miw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0
R2V0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9wR2V0QnlWCiAgICAg
ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDEsIHJlZ1QzLCBwcm9wZXJ0
eU5hbWUsIHNsb3dDYXNlcyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBsKCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKIApAQCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICAKICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKICAgICAKLSAgICBtX2J5VmFsQ29tcGls
YXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNv
ZGVPZmZzZXQsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7
CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8o
YnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9m
aWxlLCBkb25lLCBkb25lKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMzc1LDcg
KzM3NSw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9wIGJ5dGVjCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNl
dCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgbV9jb2RlQmxvY2stPmVjbWFNb2RlKCksIHB1
dEtpbmQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBlbWl0V3JpdGVC
YXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlKTsKQEAgLTUwNSw3ICs1MDUsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCiAgICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpUcnlHZXQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNTQ0
LDcgKzU0NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldERpcmVjdCk7CiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CkBAIC01OTAsNyArNTkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgfQogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBpZGVu
dC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNz
VHlwZTo6R2V0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTYxNCw3ICs2MTQsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJl
Zyk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKICAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgQWNjZXNzVHlwZTo6R2V0V2l0aFRo
aXMpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNjc0LDcgKzY3NCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAgSklUUHV0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIG1fY29kZUJsb2NrLT5lY21h
TW9kZSgpLAogICAgICAgICBkaXJlY3QgPyBEaXJlY3QgOiBOb3REaXJlY3QpOwogICAgIApAQCAt
NzE0LDcgKzcxNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKICAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFdvcmtsaXN0LmNwcAppbmRleCBlOWI0NzJhYmY4ODQ4MDU0YWE3ZmJkYzljMmFj
ZGRlYjFhNzVjN2I5Li5jNjQ4ZDQ2YWY0YTFhNzhkYWY2MDcwMjQ0ZmE5ZDk5NTRjZjc3NmEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcApAQCAtMzYsOSArMzYs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSklUV29ya2xpc3Q6OlBsYW4gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUV29ya2xpc3Q6OlBsYW4+IHsKIHB1YmxpYzoKLSAgICBQ
bGFuKENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9m
ZnNldCkKKyAgICBQbGFuKENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQot
ICAgICAgICAsIG1faml0KGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCkKKyAgICAgICAgLCBtX2ppdChjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9j
aywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICB7CiAgICAgICAgIG1faml0LmRvTWFp
blRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgIH0KQEAgLTgzLDkgKzgzLDkg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pc0ZpbmlzaGVkQ29tcGlsaW5nOwogICAgIH0K
ICAgICAKLSAgICBzdGF0aWMgdm9pZCBjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCB1
bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkKKyAgICBzdGF0aWMgdm9pZCBjb21w
aWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBQbGFuIHBsYW4oY29kZUJsb2NrLCBsb29wT1NS
RW50cnlCeXRlY29kZU9mZnNldCk7CisgICAgICAgIFBsYW4gcGxhbihjb2RlQmxvY2ssIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBwbGFuLmNvbXBpbGVJblRocmVhZCgpOwog
ICAgICAgICBwbGFuLmZpbmFsaXplKCk7CiAgICAgfQpAQCAtMjI4LDcgKzIyOCw3IEBAIHZvaWQg
SklUV29ya2xpc3Q6OnBvbGwoVk0mIHZtKQogICAgIGZpbmFsaXplUGxhbnMobXlQbGFucyk7CiB9
CiAKLXZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sqIGNvZGVCbG9jaywg
dW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpCit2b2lkIEpJVFdvcmtsaXN0Ojpj
b21waWxlTGF0ZXIoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCkKIHsKICAgICBEZWZlckdDIGRlZmVyR0MoY29kZUJsb2NrLT52bSgp
LmhlYXApOwogICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkludGVycHJldGVyVGh1bmspOwpAQCAtMjM5LDcgKzIzOSw3IEBAIHZvaWQgSklUV29ya2xp
c3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVu
dHJ5Qnl0ZWNvCiAgICAgfQogICAgIAogICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJ
VCgpKSB7Ci0gICAgICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCk7CisgICAgICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAg
LTI1Myw3ICsyNTMsNyBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjbwogICAgICAgICAKICAgICAg
ICAgaWYgKG1fbnVtQXZhaWxhYmxlVGhyZWFkcykgewogICAgICAgICAgICAgbV9wbGFubmVkLmFk
ZChjb2RlQmxvY2spOwotICAgICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZihu
ZXcgUGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KSk7CisgICAgICAg
ICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBQbGFuKGNvZGVCbG9jaywgbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOwogICAgICAgICAgICAgbV9wbGFucy5hcHBlbmQocGxh
bik7CiAgICAgICAgICAgICBtX3F1ZXVlLmFwcGVuZChwbGFuKTsKICAgICAgICAgICAgIG1fY29u
ZGl0aW9uLT5ub3RpZnlBbGwobG9ja2VyKTsKQEAgLTI3NywxMCArMjc3LDEwIEBAIHZvaWQgSklU
V29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9v
cE9TUkVudHJ5Qnl0ZWNvCiAgICAgLy8gVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlLiBJZiB0
aGUgY29uY3VycmVudCBKSVQgdGhyZWFkIGlzIGNvbnZveWVkLCB3ZSByZXZlcnQgdG8gbWFpbgog
ICAgIC8vIHRocmVhZCBjb21waWxlcy4gVGhpcyBpcyBwcm9iYWJseSBub3QgYXMgZ29vZCBhcyBp
ZiB3ZSBoYWQgbXVsdGlwbGUgSklUIHRocmVhZHMuIE1heWJlIHdlCiAgICAgLy8gY2FuIGRvIHRo
YXQgc29tZWRheS4KLSAgICBQbGFuOjpjb21waWxlTm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVPZmZzZXQpOworICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KTsKIH0KIAotdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZU5vdyhD
b2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQp
Cit2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRl
Y29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgVk0mIHZtID0gY29k
ZUJsb2NrLT52bSgpOwogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKQEAgLTMwOCw3ICsz
MDgsNyBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2Nr
LCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZQogICAgIGNvZGVCbG9jay0+cmVzZXRKSVRE
YXRhKCk7CiAgICAgCiAgICAgLy8gT0ssIGp1c3QgY29tcGlsZSBpdC4KLSAgICBKSVQ6OmNvbXBp
bGUodm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVPZmZzZXQpOworICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVRDb21w
aWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgKaW5kZXggZWI2ZjU1MTVkZjcwMzk3
ZTczMGMxYzI3OTk5ZmZiMzgyZjZiMmI2MS4uZWRmZWM1YzgzODkyMzgxYjhiYThlYzA4YThiM2Fh
NDFjNGM3MjViOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3Jr
bGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuaApAQCAt
NTMsOSArNTMsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb21wbGV0ZUFsbEZvclZNKFZNJik7IC8v
IFJldHVybiB0cnVlIGlmIGFueSBKSVQgd29yayBoYXBwZW5lZC4KICAgICB2b2lkIHBvbGwoVk0m
KTsKICAgICAKLSAgICB2b2lkIGNvbXBpbGVMYXRlcihDb2RlQmxvY2sqLCB1bnNpZ25lZCBsb29w
T1NSRW50cnlCeXRlY29kZU9mZnNldCA9IDApOwotICAgIAotICAgIHZvaWQgY29tcGlsZU5vdyhD
b2RlQmxvY2sqLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IDApOworICAg
IHZvaWQgY29tcGlsZUxhdGVyKENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOworICAgIHZvaWQgY29tcGlsZU5vdyhD
b2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KDApKTsKICAgICAKICAgICBzdGF0aWMgSklUV29ya2xpc3QmIGVuc3VyZUdsb2Jh
bFdvcmtsaXN0KCk7CiAgICAgc3RhdGljIEpJVFdvcmtsaXN0KiBleGlzdGluZ0dsb2JhbFdvcmts
aXN0T3JOdWxsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9D
b2RlT3JpZ2luTWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmln
aW5NYXAuY3BwCmluZGV4IDIxMjk4YWQ4NGNhZjM2OTMwM2IzNWQyZDM5ODIxODNiYTZlNTA3ZDgu
LjI2NDcxOGQ5N2M3ODRiYzJmYTc3NDAzMWFmY2RiMDgwOTlkMWU1OTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwCkBAIC0xODksOSArMTg5
LDkgQEAgUENUb0NvZGVPcmlnaW5NYXA6OlBDVG9Db2RlT3JpZ2luTWFwKFBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlciYmIGJ1aWxkZXIsIExpbmtCdWYKICAgICB9OwogCiAgICAgRGVsdGFDb21wcmVz
c2lvbkJ1aWxkZXIgY29kZU9yaWdpbkNvbXByZXNzb3IoKHNpemVvZihpbnRwdHJfdCkgKyBzaXpl
b2YoaW50OF90KSArIHNpemVvZihpbnQ4X3QpICsgc2l6ZW9mKElubGluZUNhbGxGcmFtZSopKSAq
IGJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKSk7Ci0gICAgQ29kZU9yaWdpbiBsYXN0Q29kZU9y
aWdpbigwLCBudWxscHRyKTsKKyAgICBDb2RlT3JpZ2luIGxhc3RDb2RlT3JpZ2luKEJ5dGVjb2Rl
SW5kZXgoMCkpOwogICAgIGF1dG8gYnVpbGRDb2RlT3JpZ2luVGFibGUgPSBbJl0gKGNvbnN0IENv
ZGVPcmlnaW4mIGNvZGVPcmlnaW4pIHsKLSAgICAgICAgaW50cHRyX3QgZGVsdGEgPSBzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4oY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpIC0gc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KGxhc3RDb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgIGludHB0
cl90IGRlbHRhID0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpLm9mZnNldCgpKSAtIHN0YXRpY19jYXN0PGludHB0cl90PihsYXN0Q29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCkub2Zmc2V0KCkpOwogICAgICAgICBsYXN0Q29kZU9yaWdpbiA9IGNvZGVPcmln
aW47CiAgICAgICAgIGlmIChkZWx0YSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWF4
KCkgfHwgZGVsdGEgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDhfdD46Om1pbigpIHx8IGRlbHRh
ID09IHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSkgewogICAgICAgICAgICAgY29kZU9yaWdpbkNvbXBy
ZXNzb3Iud3JpdGU8aW50OF90PihzZW50aW5lbEJ5dGVjb2RlRGVsdGEpOwpAQCAtMjU0LDcgKzI1
NCw3IEBAIE9wdGlvbmFsPENvZGVPcmlnaW4+IFBDVG9Db2RlT3JpZ2luTWFwOjpmaW5kUEModm9p
ZCogcGMpIGNvbnN0CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICB1aW50cHRy
X3QgY3VycmVudFBDID0gMDsKLSAgICB1bnNpZ25lZCBjdXJyZW50Qnl0ZWNvZGVJbmRleCA9IDA7
CisgICAgQnl0ZWNvZGVJbmRleCBjdXJyZW50Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
MCk7CiAgICAgSW5saW5lQ2FsbEZyYW1lKiBjdXJyZW50SW5saW5lQ2FsbEZyYW1lID0gbnVsbHB0
cjsKIAogICAgIERlbHRhQ29tcHJlc3NlaW9uUmVhZGVyIHBjUmVhZGVyKG1fY29tcHJlc3NlZFBD
cywgbV9jb21wcmVzc2VkUENCdWZmZXJTaXplKTsKQEAgLTI4MCw3ICsyODAsNyBAQCBPcHRpb25h
bDxDb2RlT3JpZ2luPiBQQ1RvQ29kZU9yaWdpbk1hcDo6ZmluZFBDKHZvaWQqIHBjKSBjb25zdAog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGRlbHRhID0gc3RhdGljX2Nhc3Q8aW50
cHRyX3Q+KHZhbHVlKTsKIAotICAgICAgICAgICAgY3VycmVudEJ5dGVjb2RlSW5kZXggPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGN1cnJlbnRCeXRlY29kZUlu
ZGV4KSArIGRlbHRhKTsKKyAgICAgICAgICAgIGN1cnJlbnRCeXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oY3VycmVudEJ5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpICsgZGVsdGEpOwogCiAgICAgICAgICAgICBpbnQ4X3QgaGFzSW5saW5lRnJhbWUgPSBjb2Rl
T3JpZ2luUmVhZGVyLnJlYWQ8aW50OF90PigpOwogICAgICAgICAgICAgQVNTRVJUKGhhc0lubGlu
ZUZyYW1lID09IDAgfHwgaGFzSW5saW5lRnJhbWUgPT0gMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgKaW5kZXggOWZiNjJiNjQ1YmFmYjRhMTNmZjdl
ZmI3Zjc2MWNhOTJiZWEzZTVmYS4uYjBkNTYxZmM1NmQ1ZjA4MTBjOGMwZWNmYWZmNzIyZDJkM2Iz
M2YyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdp
bk1hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAu
aApAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZvaWQgYXBwZW5kSXRl
bShNYWNyb0Fzc2VtYmxlcjo6TGFiZWwsIGNvbnN0IENvZGVPcmlnaW4mKTsKLSAgICBzdGF0aWMg
Q29kZU9yaWdpbiBkZWZhdWx0Q29kZU9yaWdpbigpIHsgcmV0dXJuIENvZGVPcmlnaW4oMCwgbnVs
bHB0cik7IH0KKyAgICBzdGF0aWMgQ29kZU9yaWdpbiBkZWZhdWx0Q29kZU9yaWdpbigpIHsgcmV0
dXJuIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSk7IH0KIAogICAgIGJvb2wgZGlkQnVpbGRN
YXBwaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRCdWlsZE1hcHBpbmc7IH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKaW5kZXggOGQyZmFhODQ1YjhmOGNiOWMz
MGM5ODA0MDY2MGI3NjEwOTc5YTZlMi4uYzExZTc5YjBjNTYxY2EzM2NjYjJiYmUwYThlYjNhZjZl
ZGE2YmNlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENh
bGwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCkBAIC01
OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQtPm1vdmUoSklUOjpUcnVzdGVkSW1t
UHRyKG1fcGMpLCBKSVQ6OmFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKICAgICAgICAgSklUOjpDYWxs
IGNhbGwgPSBtX2ppdC0+Y2FsbChPcGVyYXRpb25QdHJUYWcpOwotICAgICAgICBtX2ppdC0+bV9j
YWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBtX2ppdC0+bV9ieXRlY29kZU9mZnNldCwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihtX3Nsb3dQYXRoRnVuY3Rpb24pKSk7CisgICAgICAg
IG1faml0LT5tX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIG1faml0LT5tX2J5dGVjb2Rl
SW5kZXgsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4obV9zbG93UGF0aEZ1bmN0aW9uKSkp
OwogCiAjaWYgQ1BVKFg4Nl82NCkgJiYgT1MoV0lORE9XUykKICAgICAgICAgbV9qaXQtPnBvcChK
SVQ6OnJlZ1QwKTsgLy8gdlBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAppbmRleCA1MWZmNzc2MmQwMzk4YTJmNjAxNTRjOWVjYTg3MzU0YTljOWQw
YTdlLi42OGI1ZGVlNTVlOTUzNjU4MDQxMTc3ZmExNTEwOGIzYjYxMDM5ZjlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTM2OCw3ICsz
NjgsNyBAQCBpbmxpbmUgYm9vbCBzaG91bGRKSVQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB9CiAK
IC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgdHJ5IHRvIE9TUi4KLWlubGluZSBib29sIGpp
dENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVu
c2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gMCkKK2lubGluZSBib29sIGppdENv
bXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVj
b2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiB7
CiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOyAvLyBNeSBjYWxsZXJzIGRv
bid0IHNldCB0b3AgY2FsbGZyYW1lLCBzbyB3ZSBkb24ndCB3YW50IHRvIEdDIGhlcmUgYXQgYWxs
LgogICAgIEFTU0VSVChWTTo6Y2FuVXNlSklUKCkpOwpAQCAtMzkyLDcgKzM5Miw3IEBAIGlubGlu
ZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIHVuc2lnbmVkIGxvCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNl
IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6IHsKLSAgICAgICAgSklUV29ya2xpc3Q6OmVuc3Vy
ZUdsb2JhbFdvcmtsaXN0KCkuY29tcGlsZUxhdGVyKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVPZmZzZXQpOworICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3Qo
KS5jb21waWxlTGF0ZXIoY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAg
ICAgICAgcmV0dXJuIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
OwogICAgIH0KICAgICBkZWZhdWx0OgpAQCAtNDc2LDIyICs0NzYsMjIgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNv
dW50ZXIoKSwgIlxuIik7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5
dGVjb2RlT2Zmc2V0ID0gY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChwYyk7CisgICAgYXV0byBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChjb2RlQmxvY2stPmJ5dGVj
b2RlT2Zmc2V0KHBjKSk7CiAKICAgICBpZiAoIXNob3VsZEpJVChjb2RlQmxvY2spKSB7CiAgICAg
ICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CiAgICAgICAgIExMSU5UX1JFVFVS
Tl9UV08oMCwgMCk7CiAgICAgfQogICAgIAotICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJp
c3RpY3Modm0sIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpKQorICAgIGlm
ICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCkpCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08oMCwgMCk7CiAgICAgCi0g
ICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJvc3JFbnRyeSIsICgiYXQgYmMjIiwg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpKTsKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNv
ZGVCbG9jaywgIm9zckVudHJ5IiwgKCJhdCAiLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7
CiAKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpOwogCiAgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9jay0+aml0Q29k
ZU1hcCgpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlv
biA9IGNvZGVNYXAuZmluZChsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCiAg
ICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwpA
QCAtMTg4OCwxMSArMTg4OCw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9sb2df
c2hhZG93X2NoaWNrZW5fdGFpbCkKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGdldE5vbkNvbnN0
YW50T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKTsKICAgICBKU1Njb3Bl
KiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rl
cjo6c2NvcGUoKTsKICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleChjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KHBjKSk7Ci0jZWxzZQotICAg
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleChwYyk7Ci0jZW5kaWYKKyAgICBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0
KHBjKSkpOworCiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0No
aWNrZW4oKTsKICAgICBSRUxFQVNFX0FTU0VSVChzaGFkb3dDaGlja2VuKTsKICAgICBzaGFkb3dD
aGlja2VuLT5sb2codm0sIGNhbGxGcmFtZSwgU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsKGNh
bGxGcmFtZSwgdGhpc1ZhbHVlLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KSk7CkBA
IC0xOTA0LDcgKzE5MDEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmls
ZV9jYXRjaCkKIHsKICAgICBMTElOVF9CRUdJTigpOwogCi0gICAgY29kZUJsb2NrLT5lbnN1cmVD
YXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZS0+Ynl0ZWNv
ZGVPZmZzZXQoKSk7CisgICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRl
ZEZvckJ5dGVjb2RlSW5kZXgoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZXJPcmlnaW4uY3BwCmluZGV4IDEwMjIyYTIzOTZjNzFlMmJjOTI0M2Y4
ZTJhZDI4NWJjNTc2MDQ5ZTkuLjNhYWVkZTcyMDdjODk1N2I2MDMwOTM0MTdjYjJkNjA5ZTY5YjBl
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9y
aWdpbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3Jp
Z2luLmNwcApAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFBy
b2ZpbGVyIHsKIAotT3JpZ2luOjpPcmlnaW4oRGF0YWJhc2UmIGRhdGFiYXNlLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK09yaWdpbjo6T3JpZ2luKERhdGFi
YXNlJiBkYXRhYmFzZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKICAgICA6IG1fYnl0ZWNvZGVzKGRhdGFiYXNlLmVuc3VyZUJ5dGVjb2Rlc0Zvcihj
b2RlQmxvY2spKQogICAgICwgbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiB7CkBAIC00
Miw3ICs0Miw3IEBAIE9yaWdpbjo6T3JpZ2luKERhdGFiYXNlJiBkYXRhYmFzZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAKIHZvaWQgT3JpZ2luOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCptX2J5dGVjb2Rlcywg
IjpiYyMiLCBtX2J5dGVjb2RlSW5kZXgpOworICAgIG91dC5wcmludCgqbV9ieXRlY29kZXMsICIg
IiwgbV9ieXRlY29kZUluZGV4KTsKIH0KIAogSlNWYWx1ZSBPcmlnaW46OnRvSlMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKQEAgLTUwLDcgKzUwLDcgQEAgSlNWYWx1ZSBPcmln
aW46OnRvSlMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2J5dGVjb2Rlcy0+aWQoKSkpOwot
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ieXRlY29kZUluZGV4
LCBqc051bWJlcihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+Ynl0ZWNvZGVJbmRleCwganNOdW1iZXIobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW4uaAppbmRleCA4NjgyNjYxNzllMTUzOTQw
YTE5NzJlNWNlY2RkN2U2NTk1ZTU1ZjNmLi4yMzcyNmZhOTk1ZmE3YTI2Y2E0OWIzZjNiYjdiODZi
YTRmZDYxZTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXJPcmlnaW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXJPcmlnaW4uaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUg
IkJ5dGVjb2RlSW5kZXguaCIKICNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtNDAsMjkgKzQx
LDI0IEBAIGNsYXNzIERhdGFiYXNlOwogCiBjbGFzcyBPcmlnaW4gewogcHVibGljOgotICAgIE9y
aWdpbigpCi0gICAgICAgIDogbV9ieXRlY29kZUluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkKLSAgICB7Ci0gICAgfQotICAgIAorICAgIE9yaWdpbigpID0gZGVmYXVs
dDsKICAgICBPcmlnaW4oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6
IG1fYnl0ZWNvZGVJbmRleChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSAx
KQotICAgIHsKLSAgICB9CisgICAgICAgIDogbV9ieXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgo
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpKQorICAgIHsgfQogICAgIAotICAgIE9yaWdpbihC
eXRlY29kZXMqIGJ5dGVjb2RlcywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICBPcmlnaW4o
Qnl0ZWNvZGVzKiBieXRlY29kZXMsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICAg
ICAgOiBtX2J5dGVjb2RlcyhieXRlY29kZXMpCiAgICAgICAgICwgbV9ieXRlY29kZUluZGV4KGJ5
dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4IDwgc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gMSk7CisgICAgICAgIEFTU0VSVCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkgLSAxKTsKICAgICB9CiAgICAgCi0gICAgT3JpZ2luKERhdGFiYXNlJiwgQ29kZUJsb2Nr
KiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgT3JpZ2luKERhdGFiYXNlJiwgQ29kZUJs
b2NrKiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiBtX2J5dGVjb2RlSW5kZXggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhIW1fYnl0ZWNv
ZGVJbmRleDsgfQogICAgIAogICAgIEJ5dGVjb2RlcyogYnl0ZWNvZGVzKCkgY29uc3QgeyByZXR1
cm4gbV9ieXRlY29kZXM7IH0KLSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CiAgICAgCiAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IE9yaWdpbiYpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBP
cmlnaW4mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQpAQCAtNzUs
NyArNzEsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgQnl0ZWNvZGVzKiBtX2J5dGVjb2Rl
czsKLSAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7CisgICAgQnl0ZWNvZGVJbmRleCBtX2J5
dGVjb2RlSW5kZXg7CiB9OwogCiBpbmxpbmUgYm9vbCBPcmlnaW46Om9wZXJhdG9yPT0oY29uc3Qg
T3JpZ2luJiBvdGhlcikgY29uc3QKQEAgLTg2LDEyICs4MiwxMiBAQCBpbmxpbmUgYm9vbCBPcmln
aW46Om9wZXJhdG9yPT0oY29uc3QgT3JpZ2luJiBvdGhlcikgY29uc3QKIAogaW5saW5lIHVuc2ln
bmVkIE9yaWdpbjo6aGFzaCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6UHRySGFzaDxCeXRl
Y29kZXMqPjo6aGFzaChtX2J5dGVjb2RlcykgKyBtX2J5dGVjb2RlSW5kZXg7CisgICAgcmV0dXJu
IFdURjo6UHRySGFzaDxCeXRlY29kZXMqPjo6aGFzaChtX2J5dGVjb2RlcykgKyBtX2J5dGVjb2Rl
SW5kZXguaGFzaCgpOwogfQogCiBpbmxpbmUgYm9vbCBPcmlnaW46OmlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4ID09IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4
LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CiB9CiAKIHN0cnVjdCBPcmlnaW5IYXNoIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAppbmRleCBlZTg0YzhiMjIzMjhiMTVh
NjNhYzFjZWU3NWNjMTA3ZmEwY2NmOGY0Li5iYWE0MzM4MmE0Y2MxMzFlYWI1OTdhNDk2NDY2ZDg5
OGFmYzMyZGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCkBAIC0x
NjYsMTUgKzE2NiwxNSBAQCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFN0YWNrRnJhbWU+PiBnZXRT
dGFja1RyYWNlKEpTR2xvYmFsT2JqZWN0KiwgVk0mIHZtLCBKU09iagogICAgIHJldHVybiBzdGFj
a1RyYWNlOwogfQogCi12b2lkIGdldEJ5dGVjb2RlT2Zmc2V0KFZNJiB2bSwgQ2FsbEZyYW1lKiBz
dGFydENhbGxGcmFtZSwgVmVjdG9yPFN0YWNrRnJhbWU+KiBzdGFja1RyYWNlLCBDYWxsRnJhbWUq
JiBjYWxsRnJhbWUsIHVuc2lnbmVkJiBieXRlY29kZU9mZnNldCkKK3ZvaWQgZ2V0Qnl0ZWNvZGVJ
bmRleChWTSYgdm0sIENhbGxGcmFtZSogc3RhcnRDYWxsRnJhbWUsIFZlY3RvcjxTdGFja0ZyYW1l
Piogc3RhY2tUcmFjZSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBCeXRlY29kZUluZGV4JiBieXRl
Y29kZUluZGV4KQogewogICAgIEZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0
b3IgZnVuY3RvcihzdGFydENhbGxGcmFtZSk7CiAgICAgU3RhY2tWaXNpdG9yOjp2aXNpdCh2bS50
b3BDYWxsRnJhbWUsICZ2bSwgZnVuY3Rvcik7CiAgICAgY2FsbEZyYW1lID0gZnVuY3Rvci5mb3Vu
ZENhbGxGcmFtZSgpOwogICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSBmdW5jdG9yLmluZGV4KCk7
Ci0gICAgYnl0ZWNvZGVPZmZzZXQgPSAwOwotICAgIGlmIChzdGFja1RyYWNlICYmIHN0YWNrSW5k
ZXggPCBzdGFja1RyYWNlLT5zaXplKCkgJiYgc3RhY2tUcmFjZS0+YXQoc3RhY2tJbmRleCkuaGFz
Qnl0ZWNvZGVPZmZzZXQoKSkKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBzdGFja1RyYWNlLT5h
dChzdGFja0luZGV4KS5ieXRlY29kZU9mZnNldCgpOworICAgIGJ5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KCk7CisgICAgaWYgKHN0YWNrVHJhY2UgJiYgc3RhY2tJbmRleCA8IHN0YWNrVHJh
Y2UtPnNpemUoKSAmJiBzdGFja1RyYWNlLT5hdChzdGFja0luZGV4KS5oYXNCeXRlY29kZUluZGV4
KCkpCisgICAgICAgIGJ5dGVjb2RlSW5kZXggPSBzdGFja1RyYWNlLT5hdChzdGFja0luZGV4KS5i
eXRlY29kZUluZGV4KCk7CiB9CiAKIGJvb2wgZ2V0TGluZUNvbHVtbkFuZFNvdXJjZShWZWN0b3I8
U3RhY2tGcmFtZT4qIHN0YWNrVHJhY2UsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1u
LCBTdHJpbmcmIHNvdXJjZVVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oCmlu
ZGV4IGNiN2JmM2FmNWQ5MWY2M2Q2YWRlMzg4NjkwODBiMDZiMTgzN2QzM2YuLjI2YmI4OWZmZWU5
YmIxY2VjZTU5YWM1MDA5NmJiYTUwZDBiZTg4ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3IuaApAQCAtNjcsNyArNjcsNyBAQCBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCog
Y3JlYXRlRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBFcnJvclR5cGUsIGNvbnN0IFN0cmluZwogSlNP
YmplY3QqIGNyZWF0ZUdldHRlclR5cGVFcnJvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmlu
ZyYpOwogCiBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFN0YWNrRnJhbWU+PiBnZXRTdGFja1RyYWNl
KEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBKU09iamVjdCosIGJvb2wgdXNlQ3VycmVudEZyYW1lKTsK
LXZvaWQgZ2V0Qnl0ZWNvZGVPZmZzZXQoVk0mLCBDYWxsRnJhbWUqLCBWZWN0b3I8U3RhY2tGcmFt
ZT4qLCBDYWxsRnJhbWUqJiwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0KTsKK3ZvaWQgZ2V0Qnl0
ZWNvZGVJbmRleChWTSYsIENhbGxGcmFtZSosIFZlY3RvcjxTdGFja0ZyYW1lPiosIENhbGxGcmFt
ZSomLCBCeXRlY29kZUluZGV4Jik7CiBib29sIGdldExpbmVDb2x1bW5BbmRTb3VyY2UoVmVjdG9y
PFN0YWNrRnJhbWU+KiBzdGFja1RyYWNlLCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVt
biwgU3RyaW5nJiBzb3VyY2VVUkwpOwogYm9vbCBhZGRFcnJvckluZm8oVk0mLCBWZWN0b3I8U3Rh
Y2tGcmFtZT4qLCBKU09iamVjdCopOwogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRFcnJvcklu
Zm8oSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAppbmRleCA2ZGY2OGRiZGZjM2JjODBh
MTg3YTRlNWRmOTI0OTI5MTYxMTIxZjRhLi42MjE5MmJjYzNiODVmY2I4NTIxMDMwOGE3MTU1ZWMz
ZTI4YjA4N2UyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
ckluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvcklu
c3RhbmNlLmNwcApAQCAtNDgsNyArNDgsNyBAQCBFcnJvckluc3RhbmNlKiBFcnJvckluc3RhbmNl
OjpjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdAogICAg
IHJldHVybiBjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgc3RydWN0dXJlLCBtZXNzYWdlU3RyaW5n
LCBhcHBlbmRlciwgdHlwZSwgdXNlQ3VycmVudEZyYW1lKTsKIH0KIAotc3RhdGljIHZvaWQgYXBw
ZW5kU291cmNlVG9FcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgRXJyb3JJbnN0YW5jZSogZXhjZXB0aW9uLCB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCkKK3N0YXRpYyB2b2lkIGFwcGVuZFNvdXJjZVRvRXJyb3IoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVycm9ySW5zdGFuY2UqIGV4Y2VwdGlv
biwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIEVycm9ySW5zdGFuY2U6OlNv
dXJjZUFwcGVuZGVyIGFwcGVuZGVyID0gZXhjZXB0aW9uLT5zb3VyY2VBcHBlbmRlcigpOwogICAg
IGV4Y2VwdGlvbi0+Y2xlYXJTb3VyY2VBcHBlbmRlcigpOwpAQCAtNzEsNyArNzEsNyBAQCBzdGF0
aWMgdm9pZCBhcHBlbmRTb3VyY2VUb0Vycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYQogICAgIGVsc2UKICAgICAgICAgY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvZGVCbG9jay0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIGRpdm90UG9pbnQsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQsIGxpbmUsIGNvbHVtbik7CisgICAgY29kZUJsb2NrLT5leHByZXNzaW9uUmFuZ2VGb3JC
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgsIGRpdm90UG9pbnQsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQsIGxpbmUsIGNvbHVtbik7CiAgICAgCiAgICAgaW50IGV4cHJlc3Npb25TdGFydCA9IGRp
dm90UG9pbnQgLSBzdGFydE9mZnNldDsKICAgICBpbnQgZXhwcmVzc2lvblN0b3AgPSBkaXZvdFBv
aW50ICsgZW5kT2Zmc2V0OwpAQCAtMTI0LDEyICsxMjQsMTIgQEAgdm9pZCBFcnJvckluc3RhbmNl
OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIGNv
bnN0IFMKICAgICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzKTsKIAogICAgIGlmIChtX3N0YWNr
VHJhY2UgJiYgIW1fc3RhY2tUcmFjZS0+aXNFbXB0eSgpICYmIGhhc1NvdXJjZUFwcGVuZGVyKCkp
IHsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleDsKICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWU7Ci0gICAgICAg
IGdldEJ5dGVjb2RlT2Zmc2V0KHZtLCB2bS50b3BDYWxsRnJhbWUsIG1fc3RhY2tUcmFjZS5nZXQo
KSwgY2FsbEZyYW1lLCBieXRlY29kZU9mZnNldCk7CisgICAgICAgIGdldEJ5dGVjb2RlSW5kZXgo
dm0sIHZtLnRvcENhbGxGcmFtZSwgbV9zdGFja1RyYWNlLmdldCgpLCBjYWxsRnJhbWUsIGJ5dGVj
b2RlSW5kZXgpOwogICAgICAgICBpZiAoY2FsbEZyYW1lICYmIGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCkpIHsKICAgICAgICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT5jYWxsZWUoKS5pc1dhc20oKSk7
Ci0gICAgICAgICAgICBhcHBlbmRTb3VyY2VUb0Vycm9yKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LCB0aGlzLCBieXRlY29kZU9mZnNldCk7CisgICAgICAgICAgICBhcHBlbmRTb3VyY2VUb0Vycm9y
KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCB0aGlzLCBieXRlY29kZUluZGV4KTsKICAgICAgICAg
fQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nh
bXBsaW5nUHJvZmlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxp
bmdQcm9maWxlci5jcHAKaW5kZXggY2VhYzBjYjMwOTQ1Nzc3MzVjZDRmOWZiN2Y1ZjA1OWYxOThi
ZmY4MS4uOWJjZjk2MTg2ZDNmODUwODMxZDZiMjY1YmM1MjBhNjc4MGNmNmNjOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKQEAg
LTQ0NiwyOSArNDQ2LDIzIEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZShjb25z
dCBBYnN0cmFjdExvY2tlciYsIFNlY29uZHMmIHN0YWNrVHJhY2VQcm9jCiAgICAgfQogfQogCi1z
dGF0aWMgQUxXQVlTX0lOTElORSB1bnNpZ25lZCB0cnlHZXRCeXRlY29kZUluZGV4KHVuc2lnbmVk
IGxsaW50UEMsIENvZGVCbG9jayogY29kZUJsb2NrLCBib29sJiBpc1ZhbGlkKQorc3RhdGljIEFM
V0FZU19JTkxJTkUgQnl0ZWNvZGVJbmRleCB0cnlHZXRCeXRlY29kZUluZGV4KHVuc2lnbmVkIGxs
aW50UEMsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAg
IFJFTEVBU0VfQVNTRVJUKCFjb2RlQmxvY2stPmhhc0NvZGVPcmlnaW5zKCkpOwogI2VuZGlmCiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBsbGludFBD
OwotICAgIGlmIChieXRlY29kZUluZGV4IDwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkp
IHsKLSAgICAgICAgaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBieXRlY29kZUluZGV4
OwotICAgIH0KLSAgICBpc1ZhbGlkID0gZmFsc2U7Ci0gICAgcmV0dXJuIDA7CisgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQgPSBsbGludFBDOworICAgIGlmIChieXRlY29kZU9mZnNldCA8IGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKQorICAgICAgICByZXR1cm4gQnl0ZWNvZGVJbmRl
eChieXRlY29kZU9mZnNldCk7CisgICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoKTsKICNlbHNlCiAg
ICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYml0d2lzZV9jYXN0PEluc3RydWN0aW9uKj4o
bGxpbnRQQyk7CiAKLSAgICBpZiAoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5jb250YWlucyhp
bnN0cnVjdGlvbikpIHsKLSAgICAgICAgaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBj
b2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uKTsKLSAgICB9Ci0gICAgaXNWYWxp
ZCA9IGZhbHNlOwotICAgIHJldHVybiAwOworICAgIGlmIChjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmNvbnRhaW5zKGluc3RydWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgo
Y29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChpbnN0cnVjdGlvbikpOworICAgIHJldHVybiBCeXRl
Y29kZUluZGV4KCk7CiAjZW5kaWYKIH0KIApAQCAtNDg0LDEyICs0NzgsMTIgQEAgdm9pZCBTYW1w
bGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCkKICAgICAgICAgU3Rh
Y2tUcmFjZSYgc3RhY2tUcmFjZSA9IG1fc3RhY2tUcmFjZXMubGFzdCgpOwogICAgICAgICBzdGFj
a1RyYWNlLnRpbWVzdGFtcCA9IHVucHJvY2Vzc2VkU3RhY2tUcmFjZS50aW1lc3RhbXA7CiAKLSAg
ICAgICAgYXV0byBwb3B1bGF0ZUNvZGVMb2NhdGlvbiA9IFtdIChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RhY2tGcmFtZTo6Q29kZUxvY2F0aW9uJiBsb2Nh
dGlvbikgewotICAgICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXggPCBjb2RlQmxvY2stPmluc3Ry
dWN0aW9uc1NpemUoKSkgeworICAgICAgICBhdXRvIHBvcHVsYXRlQ29kZUxvY2F0aW9uID0gW10g
KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFN0YWNr
RnJhbWU6OkNvZGVMb2NhdGlvbiYgbG9jYXRpb24pIHsKKyAgICAgICAgICAgIGlmIChieXRlY29k
ZUluZGV4Lm9mZnNldCgpIDwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpIHsKICAgICAg
ICAgICAgICAgICBpbnQgZGl2b3Q7CiAgICAgICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0Owog
ICAgICAgICAgICAgICAgIGludCBlbmRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgY29kZUJsb2Nr
LT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4LCBkaXZvdCwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCwKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmV4cHJl
c3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCwgZGl2b3QsIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmxpbmVOdW1iZXIs
IGxvY2F0aW9uLmNvbHVtbk51bWJlcik7CiAgICAgICAgICAgICAgICAgbG9jYXRpb24uYnl0ZWNv
ZGVJbmRleCA9IGJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICB9CkBAIC00OTksNyArNDkzLDcg
QEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCkK
ICAgICAgICAgICAgIH0KICAgICAgICAgfTsKIAotICAgICAgICBhdXRvIGFwcGVuZENvZGVCbG9j
ayA9IFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIHsK
KyAgICAgICAgYXV0byBhcHBlbmRDb2RlQmxvY2sgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2Nr
LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpIHsKICAgICAgICAgICAgIHN0YWNrVHJhY2Uu
ZnJhbWVzLmFwcGVuZChTdGFja0ZyYW1lKGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKTsK
ICAgICAgICAgICAgIG1fbGl2ZUNlbGxQb2ludGVycy5hZGQoY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSk7CiAgICAgICAgICAgICBwb3B1bGF0ZUNvZGVMb2NhdGlvbihjb2RlQmxvY2ssIGJ5
dGVjb2RlSW5kZXgsIHN0YWNrVHJhY2UuZnJhbWVzLmxhc3QoKS5zZW1hbnRpY0xvY2F0aW9uKTsK
QEAgLTYxNCwxOCArNjA4LDE3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVy
aWZpZWRTdGFja1RyYWNlcygpCiAgICAgICAgICAgICAgICAgLy8gYW5kIHdlIGVuZCB1cCBoYXZp
bmcgdG8gdW53aW5kIHBhc3QgYW4gRW50cnlGcmFtZSwgd2Ugd2lsbCBlbmQgdXAgZXhlY3V0aW5n
CiAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIHRoZSBMTEludCdzIGhhbmRsZVVuY2F1Z2h0RXhj
ZXB0aW9uLiBTbyB3ZSBqdXN0IHByb3RlY3QgYWdhaW5zdCB0aGlzCiAgICAgICAgICAgICAgICAg
Ly8gYnkgaWdub3JpbmcgaXQuCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCA9IDA7CisgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleCgwKTsKICAgICAgICAgICAgICAgICBpZiAodG9wQ29kZUJsb2NrLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8fCB0b3BDb2RlQmxvY2stPmppdFR5cGUo
KSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewotICAgICAgICAgICAgICAgICAgICBib29sIGlz
VmFsaWRQQzsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYml0czsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgICAgICAgICAgICAgICAgICBiaXRzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBDKSk7
CiAjZWxzZQogICAgICAgICAgICAgICAgICAgICBiaXRzID0gYml0d2lzZV9jYXN0PHVuc2lnbmVk
Pih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQyk7CiAjZW5kaWYKLSAgICAgICAgICAgICAg
ICAgICAgYnl0ZWNvZGVJbmRleCA9IHRyeUdldEJ5dGVjb2RlSW5kZXgoYml0cywgdG9wQ29kZUJs
b2NrLCBpc1ZhbGlkUEMpOworICAgICAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gdHJ5
R2V0Qnl0ZWNvZGVJbmRleChiaXRzLCB0b3BDb2RlQmxvY2spOwogCi0gICAgICAgICAgICAgICAg
ICAgIFVOVVNFRF9QQVJBTShpc1ZhbGlkUEMpOyAvLyBGSVhNRTogZG8gc29tZXRoaW5nIHdpdGgg
dGhpcyBpbmZvIGZvciB0aGUgd2ViIGluc3BlY3RvcjogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MzQ1NQorICAgICAgICAgICAgICAgICAgICBVTlVTRURfUEFSQU0o
Ynl0ZWNvZGVJbmRleCk7IC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgd2l0aCB0aGlzIGluZm8gZm9y
IHRoZSB3ZWIgaW5zcGVjdG9yOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUzNDU1CiAKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrKHRvcENvZGVC
bG9jaywgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIHN0b3JlQ2FsbGVlSW50
b0xhc3RGcmFtZSh1bnByb2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVzWzBdKTsKQEAgLTY0OSw4ICs2
NDIsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFj
ZXMoKQogICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IHVucHJv
Y2Vzc2VkU3RhY2tGcmFtZS5jYWxsU2l0ZUluZGV4OwogCiAgICAgICAgICAgICAgICAgYXV0byBh
cHBlbmRDb2RlQmxvY2tOb0lubGluaW5nID0gWyZdIHsKLSAgICAgICAgICAgICAgICAgICAgYm9v
bCBpc1ZhbGlkUEM7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayhjb2RlQmxv
Y2ssIHRyeUdldEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVJbmRleC5iaXRzKCksIGNvZGVCbG9jaywg
aXNWYWxpZFBDKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayhjb2RlQmxv
Y2ssIHRyeUdldEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVJbmRleC5iaXRzKCksIGNvZGVCbG9jaykp
OwogICAgICAgICAgICAgICAgIH07CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTY1OCw3ICs2
NTAsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFj
ZXMoKQogICAgICAgICAgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5jYW5HZXRDb2RlT3JpZ2lu
KGNhbGxTaXRlSW5kZXgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ29kZU9yaWdp
bihjb2RlQmxvY2ssIGNvZGVCbG9jay0+Y29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KSk7CiAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVC
bG9jayhjb2RlQmxvY2ssIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2soY29kZUJsb2NrLCBCeXRlY29k
ZUluZGV4KCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBh
cHBlbmRDb2RlQmxvY2tOb0lubGluaW5nKCk7CiAjZWxzZQpAQCAtMTExNSw3ICsxMTA3LDcgQEAg
dm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpyZXBvcnRUb3BCeXRlY29kZXMoUHJpbnRTdHJlYW0mIG91
dCkKICAgICAgICAgICAgIFN0cmluZyBjb2RlQmxvY2tIYXNoOwogICAgICAgICAgICAgU3RyaW5n
IGppdFR5cGU7CiAgICAgICAgICAgICBpZiAobG9jYXRpb24uaGFzQnl0ZWNvZGVJbmRleCgpKQot
ICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSBTdHJpbmc6Om51bWJlcihsb2NhdGlvbi5i
eXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gdG9TdHJpbmco
bG9jYXRpb24uYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgYnl0ZWNvZGVJbmRleCA9ICI8bmlsPiI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAppbmRleCA2OTI4MDAyODJjNzc1NWFiOTY3MDM4
MmIyOWE5YjBhM2NkNjdlZmRjLi4yYTE0NDk0MjI4ODI3MWQzMmM2MjViOGFkM2FkZmE2N2M3Yjg0
OTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5oCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICBib29sIGhh
c0J5dGVjb2RlSW5kZXgoKSBjb25zdAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gISFieXRlY29kZUluZGV4OwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBib29sIGhhc0V4cHJlc3Npb25JbmZvKCkgY29uc3QKQEAgLTExNyw3
ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBUaGVzZSBhdHRlbXB0IHRvIGJlIGV4
cHJlc3Npb24tbGV2ZWwgbGluZSBhbmQgY29sdW1uIG51bWJlci4KICAgICAgICAgICAgIHVuc2ln
bmVkIGxpbmVOdW1iZXIgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGNvbHVtbk51bWJlciB7IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSB9OwotICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCB7
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICAgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OwogICAgICAgICAgICAgQ29kZUJsb2NrSGFzaCBjb2Rl
QmxvY2tIYXNoOwogICAgICAgICAgICAgSklUVHlwZSBqaXRUeXBlIHsgSklUVHlwZTo6Tm9uZSB9
OwogICAgICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RhY2tGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1l
LmNwcAppbmRleCAyNGVhMGVjNTkzM2ViOGQ3OGU4NGZkODJhMWU2MzhlMWJmYTlmMmMzLi4zMTI0
ODg5NGI4MGRjOWQwNWM4MmQ0NDdhZTAwNDBhNTM3MDRiZTU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcApAQCAtMzgsMTAgKzM4LDEwIEBAIFN0YWNr
RnJhbWU6OlN0YWNrRnJhbWUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIGNhbGxlZSkK
IHsKIH0KIAotU3RhY2tGcmFtZTo6U3RhY2tGcmFtZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpT
Q2VsbCogY2FsbGVlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpCitTdGFja0ZyYW1lOjpTdGFja0ZyYW1lKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNDZWxs
KiBjYWxsZWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgpCiAgICAgOiBtX2NhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSkKICAgICAsIG1fY29kZUJsb2Nr
KHZtLCBvd25lciwgY29kZUJsb2NrKQotICAgICwgbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9m
ZnNldCkKKyAgICAsIG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogewogfQogCkBAIC0x
MTEsNyArMTExLDcgQEAgdm9pZCBTdGFja0ZyYW1lOjpjb21wdXRlTGluZUFuZENvbHVtbih1bnNp
Z25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3QKICAgICBpbnQgZGl2b3QgPSAwOwog
ICAgIGludCB1bnVzZWRTdGFydE9mZnNldCA9IDA7CiAgICAgaW50IHVudXNlZEVuZE9mZnNldCA9
IDA7Ci0gICAgbV9jb2RlQmxvY2stPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KG1f
Ynl0ZWNvZGVPZmZzZXQsIGRpdm90LCB1bnVzZWRTdGFydE9mZnNldCwgdW51c2VkRW5kT2Zmc2V0
LCBsaW5lLCBjb2x1bW4pOworICAgIG1fY29kZUJsb2NrLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleCwgZGl2b3QsIHVudXNlZFN0YXJ0T2Zmc2V0LCB1bnVz
ZWRFbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CiAKICAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwogICAgIGlmIChPcHRpb25h
bDxpbnQ+IG92ZXJyaWRlTGluZU51bWJlciA9IGV4ZWN1dGFibGUtPm92ZXJyaWRlTGluZU51bWJl
cihtX2NvZGVCbG9jay0+dm0oKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdGFja0ZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFj
a0ZyYW1lLmgKaW5kZXggNjcxYTMzN2I0MjU0MTM1OGE5ZWM5ZDI2ZmIyNDBiZTMwYTQ2ZTczMS4u
YzlkZmEwYjE4YzA4ZDk5NDhmY2E1MDNjNzlmNzlhNzg4ZmMzOGFkYSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaApAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBT
bG90VmlzaXRvcjsKIGNsYXNzIFN0YWNrRnJhbWUgewogcHVibGljOgogICAgIFN0YWNrRnJhbWUo
Vk0mLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIGNhbGxlZSk7Ci0gICAgU3RhY2tGcmFtZShWTSYs
IEpTQ2VsbCogb3duZXIsIEpTQ2VsbCogY2FsbGVlLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCk7CisgICAgU3RhY2tGcmFtZShWTSYsIEpTQ2VsbCogb3duZXIsIEpTQ2VsbCog
Y2FsbGVlLCBDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4KTsKICAgICBTdGFja0ZyYW1lKFdhc206
OkluZGV4T3JOYW1lKTsKIAogICAgIGJvb2wgaGFzTGluZUFuZENvbHVtbkluZm8oKSBjb25zdCB7
IHJldHVybiAhIW1fY29kZUJsb2NrOyB9CkBAIC01MSwxMSArNTEsMTEgQEAgcHVibGljOgogICAg
IFN0cmluZyBzb3VyY2VVUkwoKSBjb25zdDsKICAgICBTdHJpbmcgdG9TdHJpbmcoVk0mKSBjb25z
dDsKIAotICAgIGJvb2wgaGFzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVj
b2RlT2Zmc2V0ICE9IFVJTlRfTUFYICYmICFtX2lzV2FzbUZyYW1lOyB9Ci0gICAgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQoKQorICAgIGJvb2wgaGFzQnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZWNvZGVJbmRleCAmJiAhbV9pc1dhc21GcmFtZTsgfQorICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCgpCiAgICAgewotICAgICAgICBBU1NFUlQoaGFzQnl0ZWNvZGVPZmZz
ZXQoKSk7Ci0gICAgICAgIHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0OworICAgICAgICBBU1NFUlQo
aGFzQnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CkBAIC02NSw3
ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9jYWxsZWUgeyB9
OwogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1fY29kZUJsb2NrIHsgfTsKICAgICBXYXNt
OjpJbmRleE9yTmFtZSBtX3dhc21GdW5jdGlvbkluZGV4T3JOYW1lOwotICAgIHVuc2lnbmVkIG1f
Ynl0ZWNvZGVPZmZzZXQgeyBVSU5UX01BWCB9OworICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29k
ZUluZGV4OwogICAgIGJvb2wgbV9pc1dhc21GcmFtZSB7IGZhbHNlIH07CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAppbmRleCAzNjRlYTQ0OTE0Mjgw
YTkxMWM1MDVjODdhOGRlMDJlMzBkNmZhMjIwLi41YWQzODlkZjJkM2Q5NDkwZDIzYTdmMTFmNDkw
MTZkYThiMjNmZTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1J
bnNwZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rv
ci5jcHAKQEAgLTQwNyw3ICs0MDcsNyBAQCB2b2lkIFZNSW5zcGVjdG9yOjpkdW1wUmVnaXN0ZXJz
KENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgICAgICAgICAgdW5zaWduZWQgbGluZSA9IDA7CiAg
ICAgICAgICAgICB1bnNpZ25lZCB1bnVzZWRDb2x1bW4gPSAwOwogICAgICAgICAgICAgdmlzaXRv
ci0+Y29tcHV0ZUxpbmVBbmRDb2x1bW4obGluZSwgdW51c2VkQ29sdW1uKTsKLSAgICAgICAgICAg
IGRhdGFMb2dGKCJbUmV0dXJuVlBDXSAgICAgICAgICAgICAgICB8ICUxMHAgfCAlZCAobGluZSAl
ZClcbiIsIGl0LCB2aXNpdG9yLT5ieXRlY29kZU9mZnNldCgpLCBsaW5lKTsKKyAgICAgICAgICAg
IGRhdGFMb2dGKCJbUmV0dXJuVlBDXSAgICAgICAgICAgICAgICB8ICUxMHAgfCAlZCAobGluZSAl
ZClcbiIsIGl0LCB2aXNpdG9yLT5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCksIGxpbmUpOwogICAg
ICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381617</attachid>
            <date>2019-10-22 15:11:11 -0700</date>
            <delta_ts>2019-10-22 15:17:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203276-20191022151108.patch</filename>
            <type>text/plain</type>
            <size>333563</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxNDYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
MjdhNTg5MTMzNTFmZjlhYjQwZWNmNzM1ZGI1ZGRiMjkwODA1YzVkLi5kMjMyNmQ1NTc3YTE1OTRk
Zjg3NTg2ZjY3ZDNkZDcxNjVjZGJmOGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NjEgQEAKKzIwMTktMTAtMjIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBzaG91bGQgYmUgYSBwcm9wZXIgQysrIGNs
YXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMy
NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIG1ha2VzIGEgY2hhbmdlIHRvIGhvdyB3ZSByZWZlciB0byB0aGUgYnl0ZWNvZGUgaW5k
ZXggaW4KKyAgICAgICAgYSBieXRlY29kZSBzdHJlYW0uIFByZXZpb3VzbHkgd2UganVzdCB1c2Vk
IGFuIHVuc2lnbmVkIG51bWJlciB0bworICAgICAgICByZXByZXNlbnQgdGhlIGluZGV4LCB0aGlz
IHBhdGNoIGNoYW5nZXMgbW9zdCBvZiB0aGUgY29kZSB0byB1c2UgYQorICAgICAgICBCeXRlY29k
ZUluZGV4IGNsYXNzIGluc3RlYWQuIFRoZSBvbmx5IHBsYWNlcyB3aGVyZSB0aGlzIHBhdGNoIGRv
ZXMKKyAgICAgICAgbm90IGNoYW5nZSB0aGlzIGlzIGZvciBqdW1wIGFuZCBzd2l0Y2ggdGFyZ2V0
cyAvIGRlbHRhcy4KKworICAgICAgICBBZGRpdGlvbmFsbHksIHRoaXMgcGF0Y2ggYXR0ZW1wdHMg
dG8gY2Fub25pY2FsaXplIHRoZSB0ZXJtaW5vbG9neQorICAgICAgICBhcm91bmQgaG93IHdlIHJl
ZmVyIHRvIGJ5dGVjb2RlIGluZGljZXMuIE5vdyB3ZSB1c2UgdGhlIHdvcmQgaW5kZXgKKyAgICAg
ICAgdG8gcmVmZXIgdG8gdGhlIGJ5dGVjb2RlIGluZGV4IGNsYXNzIGFuZCBvZmZzZXQgdG8gcmVm
ZXIgdG8gdGhlCisgICAgICAgIHVuc2lnbmVkIGJ5dGUgb2Zmc2V0IGludG8gdGhlIGluc3RydWN0
aW9uIHN0cmVhbS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQnlW
YWxJbmZvLmg6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAg
KEpTQzo6Z2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVCYXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpj
b21wdXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRp
b24uY3BwOgorICAgICAgICAoSlNDOjpHZW5lcmF0b3JMaXZlbmVzc0FuYWx5c2lzOjpydW4pOgor
ICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVJbmRleDo6ZHVtcCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNv
ZGVJbmRleC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmFzQml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW5kZXg6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpk
ZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9y
IGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpvcGVyYXRvciA9PSBj
b25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yICE9IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3IgPCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yID4gY29uc3QpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUluZGV4OjpvcGVyYXRvciA8PSBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
SW5kZXg6Om9wZXJhdG9yID49IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6
ZnJvbUJpdHMpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4SGFzaDo6aGFzaCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXhIYXNoOjplcXVhbCk6CisgICAgICAgICogYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVLaWxscyk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNv
ZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVw
T3Zlckluc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0
aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQmxv
Y2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVu
ZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5l
c3NJbmZvQXRCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4
KToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5
dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6
OmNvbXB1dGVGcm9tTExJbnQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZvcik6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRh
KToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q2FsbExpbmtJ
bmZvRm9yQnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkUmFyZUNh
c2VQcm9maWxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVGb3JC
eXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVD
b3VudEZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmhhbmRsZXJG
b3JCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExp
dmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleFNsb3cpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb2x1bW5OdW1iZXJGb3JCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNPcERlYnVnRm9yTGluZUFuZENvbHVt
bik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp0cnlHZXRWYWx1ZVByb2ZpbGVGb3JCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsaWRhdGUpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmNvdWxkVGFrZVNwZWNpYWxBcml0aEZhc3RDYXNlKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpieXRlY29kZUluZGV4RnJvbUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVj
b2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYW5kbGVyRm9y
Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3Vy
ZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0
ZWNvZGVPZmZzZXRTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5l
TnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNvbHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3VsZFRha2VTcGVjaWFsRmFzdENhc2Up
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlT2Zmc2V0RnJvbUNh
bGxTaXRlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpjb3VsZFRha2VTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Ynl0ZWNvZGVJbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHA6
CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmFwcHJveGltYXRlSGFzaCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW46OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW46OmlzU2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9y
aWdpbjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
T3JpZ2luOjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6
T3V0T2ZMaW5lQ29kZU9yaWdpbjo6T3V0T2ZMaW5lQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6
OkNvZGVPcmlnaW46OmJ1aWxkQ29tcG9zaXRlVmFsdWUpOgorICAgICAgICAoSlNDOjpDb2RlT3Jp
Z2luOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6ZHVtcCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6RXhpdFByb2ZpbGU6OmV4aXRTaXRlc0Zvcik6CisgICAgICAgICogYnl0
ZWNvZGUvREZHRXhpdFByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRT
aXRlOjpGcmVxdWVudEV4aXRTaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRT
aXRlOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRT
aXRlOjpzdWJzdW1lcyBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0
ZTo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6Ynl0
ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlF1ZXJ5
YWJsZUV4aXRQcm9maWxlOjpoYXNFeGl0U2l0ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
RnJlcXVlbnRFeGl0U2l0ZTo6Ynl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGJ5dGVjb2RlL0RlZmVycmVkU291cmNlRHVtcC5jcHA6CisgICAgICAgIChKU0M6OkRlZmVy
cmVkU291cmNlRHVtcDo6RGVmZXJyZWRTb3VyY2VEdW1wKToKKyAgICAgICAgKEpTQzo6RGVmZXJy
ZWRTb3VyY2VEdW1wOjpkdW1wKToKKyAgICAgICAgKiBieXRlY29kZS9EZWZlcnJlZFNvdXJjZUR1
bXAuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvRnVsbEJ5dGVj
b2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OmdldExp
dmVuZXNzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6Om9wZXJh
bmRJc0xpdmUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAgICAg
KEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6OkdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0lDU3RhdHVzVXRpbHMuY3BwOgorICAgICAgICAo
SlNDOjpoYXNCYWRDYWNoZUV4aXRTaXRlKToKKyAgICAgICAgKiBieXRlY29kZS9JQ1N0YXR1c1V0
aWxzLmg6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SW5CeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5SWRT
dGF0dXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwOgorICAgICAg
ICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OmR1bXBJbkNvbnRleHQgY29uc3QpOgorICAgICAgICAq
IGJ5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9m
U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVz
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaDoKKyAgICAgICAgKEpT
Qzo6SW5zdHJ1Y3Rpb25TdHJlYW06OkJhc2VSZWY6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChK
U0M6Okluc3RydWN0aW9uU3RyZWFtOjpCYXNlUmVmOjppbmRleCBjb25zdCk6CisgICAgICAgIChK
U0M6Okluc3RydWN0aW9uU3RyZWFtOjphdCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlND
OjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6
OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OmlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OmJ5
dGVjb2RlT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKToKKyAgICAgICAgKiBieXRlY29kZS9NZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQp
OgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBi
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6U3RydWN0dXJlU3R1
YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVj
b2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFuZGxl
ckZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bGlu
ZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29k
ZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aDoKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6UmFy
ZUNhc2VQcm9maWxlOjpSYXJlQ2FzZVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpnZXRSYXJlQ2Fz
ZVByb2ZpbGVCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Z2V0UmFyZUNhc2VQcm9maWxl
Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZmluYWxpemUpOgor
ICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6
RGVidWdnZXJDYWxsRnJhbWU6OmN1cnJlbnRQb3NpdGlvbik6CisgICAgICAgICogZGZnL0RGR0Jh
c2ljQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2sp
OgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6Z2V0
Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpibG9ja0ZvckJ5dGVj
b2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
Zmx1c2hGb3JUZXJtaW5hbEltcGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpmbHVzaElmVGVybWluYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpi
cmFuY2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0UHJlZGlj
dGlvbldpdGhvdXRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
Z2V0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFy
cmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om1ha2VTYWZlKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bWFrZURpdlNhZmUpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVW50YXJnZXRhYmxlQmxv
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjptYWtlQmxvY2tUYXJnZXRh
YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxs
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGxWYXJpYW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6
OkNvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6
OkNvbW1vbkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0NvbW1v
bkRhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpjYXRjaE9TUkVudHJ5RGF0
YUZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OmFwcGVu
ZENhdGNoRW50cnlwb2ludCk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Y29tcGlsZUltcGwpOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDoKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OndpbGxDYXRjaEV4Y2VwdGlvbkluTWFjaGluZUZyYW1lKToKKyAgICAgICAgKiBkZmcv
REZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29kZTo6Y2xlYXJPU1JFbnRyeUJsb2NrQW5kUmVzZXRUaHJlc2hvbGRzKToKKyAg
ICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmFw
cGVuZE9TUkVudHJ5RGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6b3NyRW50cnlE
YXRhRm9yQnl0ZWNvZGVJbmRleCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SklUQ29tcGlsZXIpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0U3RhcnRPZkNvZGUpOgorICAg
ICAgICAqIGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpoYW5k
bGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkVudHJ5RGF0YTo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVw
YXJlQ2F0Y2hPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6CisgICAgICAg
IChKU0M6OkRGRzo6Z2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6cmVp
ZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRv
VGFyZ2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmludE9TUkV4aXQpOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkV4aXQ6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0
OjpkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKToKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRK
dW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDoK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJh
dGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1w
bCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNl
c3NhcnkpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6b3NyRW50cnlCeXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFu
Ojp0aWVyVXBJbkxvb3BIaWVyYXJjaHkpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OnRpZXJV
cEFuZE9TUkVudGVyQnl0ZWNvZGVzKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVN1Yik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmVtaXRTd2l0Y2hDaGFyU3RyaW5nSnVtcCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAg
ICAgKEpTQzo6REZHOjpUaWVyVXBDaGVja0luamVjdGlvblBoYXNlOjpidWlsZE5hdHVyYWxMb29w
VG9Mb29wSGludE1hcCk6CisgICAgICAgICogZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRm9yT1NS
RW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUp
OgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZnRsL0ZUTENvbXBp
bGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExG
b3JPU1JFbnRyeUpJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENv
ZGU6OnNldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklU
Q29kZTo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9C
My5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVZhbHVlQWRkKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVZhbHVlU3ViKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVZhbHVlTXVsKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUFyaXRoQWRkT3JTdWIp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVmFsdWVOZWdh
dGUpOgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuaDoKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNh
bGxTaXRlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxT
aXRlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OmNvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmR1bXAp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJ
bmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJh
dG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpvcGVyYXRvcj09
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Yml0cyBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAo
SlNDOjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleDo6RGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgpOgor
ICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6OkdldFN0YWNrVHJhY2VGdW5jdG9yOjpvcGVyYXRvcigpIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6ZmluZEV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAqIGludGVy
cHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwOgorICAgICAgICAoSlNDOjpTaGFkb3dDaGlja2VuOjp1
cGRhdGUpOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6CisgICAgICAg
IChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZSk6CisgICAgICAgIChKU0M6
OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAgIChKU0M6OlN0YWNrVmlz
aXRvcjo6RnJhbWU6OnJldHJpZXZlRXhwcmVzc2lvbkluZm8gY29uc3QpOgorICAgICAgICAoSlND
OjpTdGFja1Zpc2l0b3I6OkZyYW1lOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Ynl0
ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmJ5
dGVjb2RlT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpKSVQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRFbnRlck9wdGlt
aXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKToKKyAgICAgICAgKEpTQzo6SklUOjps
aW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJz
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkNhbGxSZWNvcmQ6OkNhbGxS
ZWNvcmQpOgorICAgICAgICAoSlNDOjpTbG93Q2FzZUVudHJ5OjpTbG93Q2FzZUVudHJ5KToKKyAg
ICAgICAgKEpTQzo6U3dpdGNoUmVjb3JkOjpTd2l0Y2hSZWNvcmQpOgorICAgICAgICAoSlNDOjpC
eVZhbENvbXBpbGF0aW9uSW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAqIGpp
dC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJ
VENvZGVNYXAuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZU1hcDo6RW50cnk6OkVudHJ5KToKKyAg
ICAgICAgKEpTQzo6SklUQ29kZU1hcDo6RW50cnk6OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVRDb2RlTWFwOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlTWFw
OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklURGlzYXNzZW1ibGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklURGlzYXNzZW1ibGVyOjpkdW1wVmVjdG9yRm9ySW5zdHJ1Y3Rpb25zKToKKyAg
ICAgICAgKEpTQzo6SklURGlzYXNzZW1ibGVyOjpyZXBvcnRJbnN0cnVjdGlvbnMpOgorICAgICAg
ICAqIGppdC9KSVREaXNhc3NlbWJsZXIuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXROYWtlZENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXROYWtlZFRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjp1cGRhdGVUb3BDYWxsRnJhbWUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6SklUOjphZGRTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJVDo6YWRk
SnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93VG9Ib3QpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6Omxp
bmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9j
aGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3
aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgICogaml0L0pJVE9wZXJh
dGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZXRCeVZhbCk6CisgICAgICAgIChKU0M6OnRyeUdl
dEJ5VmFsT3B0aW1pemUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfaWQpOgorICAgICAgICAqIGppdC9KSVRXb3Jr
bGlzdC5jcHA6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpQbGFuOjpQbGFuKToKKyAgICAg
ICAgKEpTQzo6SklUV29ya2xpc3Q6OlBsYW46OmNvbXBpbGVOb3cpOgorICAgICAgICAoSlNDOjpK
SVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmNv
bXBpbGVOb3cpOgorICAgICAgICAqIGppdC9KSVRXb3JrbGlzdC5oOgorICAgICAgICAqIGppdC9Q
Q1RvQ29kZU9yaWdpbk1hcC5jcHA6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpQ
Q1RvQ29kZU9yaWdpbk1hcCk6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpmaW5k
UEMgY29uc3QpOgorICAgICAgICAqIGppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oOgorICAgICAgICAo
SlNDOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKToKKyAgICAg
ICAgKiBqaXQvU2xvd1BhdGhDYWxsLmg6CisgICAgICAgIChKU0M6OkpJVFNsb3dQYXRoQ2FsbDo6
Y2FsbCk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTElu
dDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyT3Jp
Z2luLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Ok9yaWdpbjo6T3JpZ2luKToKKyAgICAg
ICAgKEpTQzo6UHJvZmlsZXI6Ok9yaWdpbjo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OlBy
b2ZpbGVyOjpPcmlnaW46OnRvSlMgY29uc3QpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVy
T3JpZ2luLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpPcmlnaW46Ok9yaWdpbik6CisgICAg
ICAgIChKU0M6OlByb2ZpbGVyOjpPcmlnaW46Om9wZXJhdG9yISBjb25zdCk6CisgICAgICAgIChK
U0M6OlByb2ZpbGVyOjpPcmlnaW46OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpQcm9maWxlcjo6T3JpZ2luOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6
Ok9yaWdpbjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvRXJyb3IuY3BwOgorICAgICAgICAoSlNDOjpnZXRCeXRlY29kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6Z2V0Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvRXJy
b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlND
OjphcHBlbmRTb3VyY2VUb0Vycm9yKToKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OnRyeUdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpTYW1wbGlu
Z1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKToKKyAgICAgICAgKEpTQzo6
U2FtcGxpbmdQcm9maWxlcjo6cmVwb3J0VG9wQnl0ZWNvZGVzKToKKyAgICAgICAgKiBydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuaDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3Rh
Y2tGcmFtZTo6Q29kZUxvY2F0aW9uOjpoYXNCeXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAg
KiBydW50aW1lL1N0YWNrRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpTdGFja0ZyYW1lOjpTdGFj
a0ZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6Y29tcHV0ZUxpbmVBbmRDb2x1bW4g
Y29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3RhY2tGcmFtZS5oOgorICAgICAgICAoSlNDOjpT
dGFja0ZyYW1lOjpoYXNCeXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RhY2tG
cmFtZTo6Ynl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6Omhhc0J5dGVj
b2RlT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6Ynl0
ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmR1bXBSZWdpc3RlcnMpOgorCiAyMDE5LTEwLTIy
ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgbWFrZSAzMmJpdCBKSVQgYnVpbHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
ZjA4OGI5NWY0YTJjMGViMDVmNGQ2MDc4ODVkYmEwZDc2MDViNmEyNy4uZTY2NGU0MDAzMDg3YmEz
OTg4ZTE0MmE5MTU4NTY2OWZkN2JiNDc0NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTk0NCw2ICs5NDQsNyBAQAogCQk1MzU1NTcxNDFEOUQ5RUE1MDA2RDU4M0IgLyogV2FzbU1l
bW9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM1
NTU3MTMxRDlEOUVBNTAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MzVDMjQ2MTFGNzg5MjhFMDA2RUM0MEUg
LyogY3JlYXRlX3JlZ2V4X3RhYmxlcyBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3MThGODIxMTE3OEVCNEIwMDI0NjVBNyAvKiBjcmVhdGVfcmVnZXhfdGFi
bGVzICovOyB9OwogCQk1MzVDMjQ2QzFGN0ExNzc4MDA2RUM0MEUgLyogVW5pZmllZFNvdXJjZTEz
Ni5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzVD
MjQ2QjFGN0ExNzc3MDA2RUM0MEUgLyogVW5pZmllZFNvdXJjZTEzNi5jcHAgKi87IH07CisJCTUz
NjYzRkRBMjM1NjJGOTYwMDVFQTY4QyAvKiBCeXRlY29kZUluZGV4LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzY2M0ZEOTIzNTYyRjkwMDA1RUE2OEMg
LyogQnl0ZWNvZGVJbmRleC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTUzNkIzMTBDMUY3MUM1OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlMTE5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNkIz
MDg3MUY3MUM1MzgwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlMTE5LmNwcCAqLzsgfTsKIAkJNTM2
QjMxMEQxRjcxQzU5OTAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UxMjUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2QjMwODgxRjcxQzUzODAwMzdG
QzMzIC8qIFVuaWZpZWRTb3VyY2UxMjUuY3BwICovOyB9OwogCQk1MzZCMzEwRTFGNzFDNTk5MDAz
N0ZDMzMgLyogVW5pZmllZFNvdXJjZTEzMS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzZCMzA4OTFGNzFDNTM4MDAzN0ZDMzMgLyogVW5pZmllZFNv
dXJjZTEzMS5jcHAgKi87IH07CkBAIC0zNjAyLDYgKzM2MDMsOCBAQAogCQk1MzU1NTcxNTFEOURG
QTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXYXNtTWVtb3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTM1QzI0NkIxRjdBMTc3NzAwNkVDNDBFIC8qIFVuaWZpZWRTb3VyY2UxMzYuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVW5pZmllZFNvdXJjZTEzNi5jcHA7IHBhdGgg
PSAiRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRT
b3VyY2UxMzYuY3BwIjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTM1
RTA4QzkyMjU0NjBBQjAwREYwMENBIC8qIHBvc3Rwcm9jZXNzLWhlYWRlci1ydWxlICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC5zY3JpcHQuc2g7IHBhdGggPSAicG9zdHByb2Nlc3MtaGVhZGVyLXJ1bGUiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzYwREFCQjIzNTZBRENBMDAzRjZBQjggLyogQnl0
ZWNvZGVJbmRleC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCeXRlY29kZUluZGV4LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM2NjNGRDkyMzU2MkY5MDAwNUVBNjhDIC8qIEJ5
dGVjb2RlSW5kZXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVJ
bmRleC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzY5NkU1NzIwQTNBNzAyMDBE
N0UwMUUgLyogQnl0ZWNvZGVTdHJ1Y3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEJ5dGVjb2RlU3RydWN0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzZC
MzA4NzFGNzFDNTM4MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTExOS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBVbmlmaWVkU291cmNlMTE5LmNwcDsgcGF0aCA9ICJE
ZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJj
ZTExOS5jcHAiOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MzZCMzA4
ODFGNzFDNTM4MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTEyNS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBVbmlmaWVkU291cmNlMTI1LmNwcDsgcGF0aCA9ICJEZXJp
dmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTEy
NS5jcHAiOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtODEwMiw2ICs4
MTA1LDggQEAKIAkJCQlFM0QyNjQyNjFEMzhDMDQyMDAwQkUxNzQgLyogQnl0ZWNvZGVHZW5lcmF0
b3JpZmljYXRpb24uY3BwICovLAogCQkJCUUzRDI2NDI3MUQzOEMwNDIwMDBCRTE3NCAvKiBCeXRl
Y29kZUdlbmVyYXRvcmlmaWNhdGlvbi5oICovLAogCQkJCUUzRDI2NDI4MUQzOEMwNDIwMDBCRTE3
NCAvKiBCeXRlY29kZUdyYXBoLmggKi8sCisJCQkJNTM2MERBQkIyMzU2QURDQTAwM0Y2QUI4IC8q
IEJ5dGVjb2RlSW5kZXguY3BwICovLAorCQkJCTUzNjYzRkQ5MjM1NjJGOTAwMDVFQTY4QyAvKiBC
eXRlY29kZUluZGV4LmggKi8sCiAJCQkJNzA5NEM0REMxQUU0Mzk1MzAwNDFBMkVFIC8qIEJ5dGVj
b2RlSW50cmluc2ljUmVnaXN0cnkuY3BwICovLAogCQkJCTcwOTRDNEREMUFFNDM5NTMwMDQxQTJF
RSAvKiBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmggKi8sCiAJCQkJMEYyREQ4MEExQUIzRDg1
ODAwQkJCOEU4IC8qIEJ5dGVjb2RlS2lsbHMuaCAqLywKQEAgLTg5OTYsNiArOTAwMSw3IEBACiAJ
CQkJOTY5QTA3MjMwRUQxQ0UzMzAwRjFGNjgxIC8qIEJ5dGVjb2RlR2VuZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzI4REFFODFEMzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVHZW5lcmF0
b3JpZmljYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMjhEQUU5MUQzOEQwMDUwMDFBMjUy
OSAvKiBCeXRlY29kZUdyYXBoLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzY2M0ZEQTIzNTYyRjk2
MDA1RUE2OEMgLyogQnl0ZWNvZGVJbmRleC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5NEM0REYx
QUU0Mzk1MzAwNDFBMkVFIC8qIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkREODBCMUFCM0Q4NTgwMEJCQjhFOCAvKiBCeXRlY29kZUtpbGxzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDMkZDQUUxMzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApp
bmRleCA3Y2VkNjhiMTc3ZjQ5MWUzOTA0OTE5NDBkZjg4ZWUzNTQyNDg2ZmE3Li5jMzI4ZmJhYjA4
ZDliODNjNjE3YTY1MjQ1N2M2MTA5MTE4MmQ1NjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CkBAIC0xOTcsNiArMTk3LDcgQEAgYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcAogYnl0ZWNv
ZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcAogYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCiBi
eXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAKK2J5dGVjb2RlL0J5dGVjb2Rl
SW5kZXguY3BwCiBieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmNwcAogYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAogYnl0ZWNvZGUvQnl0ZWNvZGVSZXdyaXRl
ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbElu
Zm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAppbmRleCAz
Mzk5ZDU4MWUxZjJjOGZjN2NmMTcyZTY2NmU3YzcyODc4ZjRiNTQ1Li5iN2U5Mzc5NDVhOTA5NDZl
MmMwNTUyMjc2Y2IxMzA1MzBmNDM4OWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5VmFsSW5mby5oCkBAIC0yMjUsNyArMjI1LDcgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBq
aXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiBzdHJ1Y3QgQnlW
YWxJbmZvIHsKICAgICBCeVZhbEluZm8oKSB7IH0KIAotICAgIEJ5VmFsSW5mbyh1bnNpZ25lZCBi
eXRlY29kZUluZGV4LCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IG5vdEluZGV4
SnVtcCwgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBiYWRUeXBlSnVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gZXhjZXB0aW9uSGFuZGxlciwg
SklUQXJyYXlNb2RlIGFycmF5TW9kZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIENvZGVM
b2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGJhZFR5cGVEb25lVGFyZ2V0LCBDb2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBiYWRUeXBlTmV4dEhvdFBhdGhUYXJnZXQsIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoVGFyZ2V0KQorICAgIEJ5
VmFsSW5mbyhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkp1bXA8SlNJ
bnRlcm5hbFB0clRhZz4gbm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQ
dHJUYWc+IGJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPiBleGNlcHRpb25IYW5kbGVyLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlLCBBcnJheVByb2Zp
bGUqIGFycmF5UHJvZmlsZSwgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gYmFk
VHlwZURvbmVUYXJnZXQsIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGJhZFR5
cGVOZXh0SG90UGF0aFRhcmdldCwgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
c2xvd1BhdGhUYXJnZXQpCiAgICAgICAgIDogbm90SW5kZXhKdW1wKG5vdEluZGV4SnVtcCkKICAg
ICAgICAgLCBiYWRUeXBlSnVtcChiYWRUeXBlSnVtcCkKICAgICAgICAgLCBleGNlcHRpb25IYW5k
bGVyKGV4Y2VwdGlvbkhhbmRsZXIpCkBAIC0yNDksNyArMjQ5LDcgQEAgc3RydWN0IEJ5VmFsSW5m
byB7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gYmFkVHlwZU5leHRI
b3RQYXRoVGFyZ2V0OwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNs
b3dQYXRoVGFyZ2V0OwogICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlOwotICAgIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXg7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OwogICAg
IHVuc2lnbmVkIHNsb3dQYXRoQ291bnQ7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZTsKICAgICBJZGVudGlmaWVyIGNhY2hlZElkOwpAQCAtMjYwLDcgKzI2MCw3IEBAIHN0
cnVjdCBCeVZhbEluZm8gewogICAgIGJvb2wgc2VlbiA6IDE7CiB9OwogCi1pbmxpbmUgdW5zaWdu
ZWQgZ2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRleChCeVZhbEluZm8qIGluZm8pCitpbmxpbmUgQnl0
ZWNvZGVJbmRleCBnZXRCeVZhbEluZm9CeXRlY29kZUluZGV4KEJ5VmFsSW5mbyogaW5mbykKIHsK
ICAgICByZXR1cm4gaW5mby0+Ynl0ZWNvZGVJbmRleDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAKaW5kZXggMTBjNjVi
YjlkZDcwOWE5YWY3YWJhNmNlYjhhOWI3MzU5NzcxNjQxYi4uMDJkNjQ0Yjg4M2ZmYjNjZDk5Y2E5
OWI3YmNmMzlhYTkyNmI3MjIxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lk
IEJ5dGVjb2RlQmFzaWNCbG9jazo6Y29tcHV0ZUltcGwoQmxvY2sqIGNvZGVCbG9jaywgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW0mCiAgICAgICAgICAgICAvLyBibG9jayBiZWNhdXNlIHRoZSBmaW5h
bGx5IGJsb2NrIHdpbGwgY3JlYXRlIGl0cyBvd24gY2F0Y2gsIHdoaWNoIHdpbGwgZ2VuZXJhdGUg
YSBIYW5kbGVySW5mby4KICAgICAgICAgICAgIGlmIChpc1Rocm93KG9wY29kZUlEKSkgewogICAg
ICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZU9mZnNldCArIGluc3RydWN0aW9uLT5zaXplKCkg
PT0gYmxvY2stPmxlYWRlck9mZnNldCgpICsgYmxvY2stPnRvdGFsTGVuZ3RoKCkpOwotICAgICAg
ICAgICAgICAgIGF1dG8qIGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9m
ZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYXV0byogaGFuZGxl
ciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleChpbnN0
cnVjdGlvbi5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgIGZhbGxzVGhyb3VnaCA9IGZhbHNl
OwogICAgICAgICAgICAgICAgIGlmICghaGFuZGxlcikgewogICAgICAgICAgICAgICAgICAgICBs
aW5rQmxvY2tzKGJsb2NrLCBleGl0LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwCmlu
ZGV4IDI4NjA1MWNjOTVlYTRkOGZkYTY2ZmIwOTk3YmI1OTNlZGU3ZTMyYTYuLjQzY2U1NjFmMzgy
NmQ2YjBiMTRjODQxMWNiZjgxMWI4MzliN2ZlOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNw
cApAQCAtMjAwLDcgKzIwMCw3IEBAIHB1YmxpYzoKICAgICAgICAgcnVuTGl2ZW5lc3NGaXhwb2lu
dChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9nZW5lcmF0b3JpZmljYXRpb24uZ3JhcGgoKSk7
CiAKICAgICAgICAgZm9yIChZaWVsZERhdGEmIGRhdGEgOiBtX2dlbmVyYXRvcmlmaWNhdGlvbi55
aWVsZHMoKSkKLSAgICAgICAgICAgIGRhdGEubGl2ZW5lc3MgPSBnZXRMaXZlbmVzc0luZm9BdEJ5
dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBtX2dlbmVyYXRvcmlmaWNhdGlv
bi5ncmFwaCgpLCBtX2dlbmVyYXRvcmlmaWNhdGlvbi5pbnN0cnVjdGlvbnMoKS5hdChkYXRhLnBv
aW50KS5uZXh0KCkub2Zmc2V0KCkpOworICAgICAgICAgICAgZGF0YS5saXZlbmVzcyA9IGdldExp
dmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9nZW5l
cmF0b3JpZmljYXRpb24uZ3JhcGgoKSwgQnl0ZWNvZGVJbmRleChtX2dlbmVyYXRvcmlmaWNhdGlv
bi5pbnN0cnVjdGlvbnMoKS5hdChkYXRhLnBvaW50KS5uZXh0KCkub2Zmc2V0KCkpKTsKICAgICB9
CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVJbmRleC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVJbmRleC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTdhMzg1YmU5YzI4MmRmZDhkMWJlYTUwM2E1NDczYWVm
MGE5YzRjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUluZGV4LmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCeXRlY29kZUluZGV4LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit2b2lkIEJ5dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUluZGV4LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVJbmRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEyN2MxMDI5N2M4MjYxMTg2ZGU1MjU1NDI3OGI0ODll
MTFkOTkyOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVJbmRleC5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKK2NsYXNzIFByaW50U3RyZWFtOworfQorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQnl0ZWNvZGVJbmRleCB7CitwdWJsaWM6CisgICAgQnl0ZWNvZGVJbmRleCgpID0gZGVmYXVs
dDsKKyAgICBleHBsaWNpdCBCeXRlY29kZUluZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0KQor
ICAgICAgICA6IG1fb2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQorICAgIHsgfQorCisgICAgdWludDMy
X3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICB1aW50MzJfdCBhc0Jp
dHMoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0IHsgcmV0dXJuIFdURjo6aW50SGFzaChtX29mZnNldCk7IH0KKyAgICBzdGF0aWMgQnl0ZWNv
ZGVJbmRleCBkZWxldGVkVmFsdWUoKSB7IHJldHVybiBmcm9tQml0cyhzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCkgLSAxKTsgfQorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVkVmFsdWUoKTsgfQorCisgICAg
c3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cyk7CisKKyAgICAvLyBD
b21wYXJpc29uIG9wZXJhdG9ycy4KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gbV9vZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
OyB9CisgICAgYm9vbCBvcGVyYXRvciA9PShjb25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29u
c3QgeyByZXR1cm4gYXNCaXRzKCkgPT0gb3RoZXIuYXNCaXRzKCk7IH0KKyAgICBib29sIG9wZXJh
dG9yICE9KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsgfQorCisgICAgYm9vbCBvcGVyYXRvciA8KGNvbnN0IEJ5dGVjb2RlSW5kZXgm
IG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA8IG90aGVyLmFzQml0cygpOyB9CisgICAg
Ym9vbCBvcGVyYXRvciA+KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVy
biBhc0JpdHMoKSA+IG90aGVyLmFzQml0cygpOyB9CisgICAgYm9vbCBvcGVyYXRvciA8PShjb25z
dCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gYXNCaXRzKCkgPD0gb3RoZXIu
YXNCaXRzKCk7IH0KKyAgICBib29sIG9wZXJhdG9yID49KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90
aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA+PSBvdGhlci5hc0JpdHMoKTsgfQorCisKKyAg
ICB2b2lkIGR1bXAoV1RGOjpQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIHVp
bnQzMl90IG1fb2Zmc2V0IHsgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpIH07
Cit9OworCitpbmxpbmUgQnl0ZWNvZGVJbmRleCBCeXRlY29kZUluZGV4Ojpmcm9tQml0cyh1aW50
MzJfdCBiaXRzKQoreworICAgIEJ5dGVjb2RlSW5kZXggcmVzdWx0OworICAgIHJlc3VsdC5tX29m
ZnNldCA9IGJpdHM7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RydWN0IEJ5dGVjb2RlSW5k
ZXhIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBCeXRlY29kZUluZGV4JiBr
ZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBC
eXRlY29kZUluZGV4JiBhLCBjb25zdCBCeXRlY29kZUluZGV4JiBiKSB7IHJldHVybiBhID09IGI7
IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkJ5dGVjb2RlSW5kZXg+IHsKKyAgICB0eXBlZGVmIEpTQzo6
Qnl0ZWNvZGVJbmRleEhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkJ5dGVjb2Rl
SW5kZXg+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6Qnl0ZWNvZGVJbmRleD4geworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKaW5kZXggMzMwYzdjN2E5OGRl
ZTcwYjE5NjFjZWQwZTFjNWMyNDI3N2IyNWU4Yi4uYTFjMjgyMWJmM2QwYTJkZDUzODEwNGQwNTNi
ZTBhYjA5NzkwYzkwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKQEAgLTQ2LDIwICs0NiwyMCBA
QCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgZHVtcFJlc3VsdHMoY29kZUJsb2NrKTsKIH0KIAot
dm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVP
ZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0
Qml0VmVjdG9yJiByZXN1bHQpCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCkKIHsKLSAgICBCeXRlY29k
ZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpOwogICAgIEFTU0VSVChibG9jayk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNFbnRyeUJsb2Nr
KCkpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOwogICAgIHJlc3VsdC5yZXNp
emUoYmxvY2stPm91dCgpLm51bUJpdHMoKSk7Ci0gICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JC
eXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fZ3Jh
cGgsIGJsb2NrLCBieXRlY29kZU9mZnNldCwgcmVzdWx0KTsKKyAgICBjb21wdXRlTG9jYWxMaXZl
bmVzc0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LCBtX2dyYXBoLCBibG9jaywgYnl0ZWNvZGVJbmRleCwgcmVzdWx0KTsKIH0KIAotRmFzdEJpdFZl
Y3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVP
ZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorRmFz
dEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0
ZWNvZGVJbmRleChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KQogewogICAgIEZhc3RCaXRWZWN0b3Igb3V0OwotICAgIGdldExpdmVuZXNzSW5mb0F0Qnl0
ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgb3V0KTsKKyAgICBnZXRMaXZl
bmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBieXRlY29kZUluZGV4LCBvdXQpOwog
ICAgIHJldHVybiBvdXQ7CiB9CiAKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1
bGxCeXQKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5vZmZzZXRz
KCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IGJsb2NrLT5vZmZzZXRzKClbaV07Ci0gICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGNv
ZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgYnl0ZWNvZGVPZmZz
ZXQsIG91dCk7CisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGNvZGVCbG9jaywgY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgQnl0ZWNvZGVJbmRleChieXRlY29kZU9m
ZnNldCksIG91dCk7CiAgICAgICAgICAgICByZXN1bHQubV9tYXBbYnl0ZWNvZGVPZmZzZXRdID0g
b3V0OwogICAgICAgICB9CiAgICAgfQpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlS2lsbHMoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVj
b2RlS2lsbHMmCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5vZmZzZXRzKCkuc2l6
ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2Nr
LT5vZmZzZXRzKClbaV07CiAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKAotICAgICAg
ICAgICAgICAgIGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwg
Ynl0ZWNvZGVPZmZzZXQsCisgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLCBtX2dyYXBoLCBCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwKICAg
ICAgICAgICAgICAgICBbJl0gKHVuc2lnbmVkIGluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgZm9yIHVzZXMuCiAgICAgICAgICAgICAgICAgICAgIGlmIChvdXRbaW5kZXhd
KQpAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1w
UmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgICAgIGNvbnN0IGF1dG8gY3Vy
cmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zmc2V0KTsKIAogICAg
ICAgICAgICAgZGF0YUxvZ0YoIkxpdmUgdmFyaWFibGVzOiIpOwotICAgICAgICAgICAgRmFzdEJp
dFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChjb2Rl
QmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUJl
Zm9yZSA9IGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIEJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVPZmZzZXQpKTsKICAgICAgICAgICAgIGR1bXBCaXRWZWN0b3IobGl2ZUJl
Zm9yZSk7CiAgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICAgICAgICAgICAgIGNvZGVCbG9j
ay0+ZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZpbGUoKSwgY3VycmVudEluc3RydWN0aW9uKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMuaAppbmRleCA3YmVmNGNmMWRjZTJhMWE3ZmMxODNhZmVhZTIxZGQ1OTE0Zjhm
OTQ5Li5lYWMxODVkYTU2Yzk2YzM4NWI5ZTMxYmE3YWM4ZTdkZTc0OWI2NTE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oCkBAIC0zNywxNSArMzcsMTUgQEAgY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3M7
CiAKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbiB7CiBwcm90ZWN0ZWQ6Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgVXNlRnVuY3RvciwgdHlw
ZW5hbWUgRGVmRnVuY3Rvcj4gdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUq
LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBJbnN0cnVjdGlvblN0
cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0LCBjb25zdCBVc2VGdW5jdG9yJiwgY29uc3QgRGVm
RnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1l
IFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+IHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlv
bihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBo
JiwgQnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYsIGNvbnN0IERlZkZ1bmN0b3ImKTsK
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+IHZvaWQgc3RlcE92ZXJJbnN0
cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29k
ZUdyYXBoJiwgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBieXRlY29kZU9mZnNldCwgRmFzdEJp
dFZlY3RvciYgb3V0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPiB2b2lk
IHN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIG91dCk7
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVj
dGlvbnM+IGJvb2wgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChDb2RlQmxv
Y2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlQmFz
aWNCbG9jayosIHVuc2lnbmVkIHRhcmdldE9mZnNldCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlv
bnM+IGJvb2wgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZUluZGV4KENvZGVCbG9ja1R5
cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVCYXNpY0Js
b2NrKiwgQnl0ZWNvZGVJbmRleCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4gYm9vbCBj
b21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVj
dGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVCYXNpY0Jsb2NrKik7CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+IEZhc3RC
aXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2tUeXBlKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0
cnVjdGlvbnM+IEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KENv
ZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNv
ZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFt
ZSBJbnN0cnVjdGlvbnM+IHZvaWQgcnVuTGl2ZW5lc3NGaXhwb2ludChDb2RlQmxvY2tUeXBlKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYpOwogfTsKQEAgLTU3LDcgKzU3LDcg
QEAgcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb247
CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzKENvZGVCbG9jayopOwogICAgIAotICAgIEZh
c3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2sqLCB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAgRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0lu
Zm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAg
dm9pZCBjb21wdXRlRnVsbExpdmVuZXNzKENvZGVCbG9jayosIEZ1bGxCeXRlY29kZUxpdmVuZXNz
JiByZXN1bHQpOwogICAgIHZvaWQgY29tcHV0ZUtpbGxzKENvZGVCbG9jayosIEJ5dGVjb2RlS2ls
bHMmIHJlc3VsdCk7CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9p
ZCBkdW1wUmVzdWx0cyhDb2RlQmxvY2sqKTsKIAotICAgIHZvaWQgZ2V0TGl2ZW5lc3NJbmZvQXRC
eXRlY29kZU9mZnNldChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJp
dFZlY3RvciYpOworICAgIHZvaWQgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KENvZGVC
bG9jayosIEJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImKTsKIAogICAgIEJ5dGVjb2RlR3Jh
cGggbV9ncmFwaDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAppbmRleCA3MWZm
NTZmN2VhNjhhMmY0NTVjZjY3OGIzYzc5YTJkN2JhYjliMzlkLi43YTkwMDMyMjJlNTE2N2JiMDUx
MDk1NzAyYjM4MjYzYTM1YzA4NDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgK
QEAgLTYxLDcgKzYxLDcgQEAgaW5saW5lIGJvb2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAvLyBTaW1wbGlmaWVkIGludGVyZmFjZSB0byBieXRl
Y29kZSB1c2UvZGVmLCB3aGljaCBkZXRlcm1pbmVzIGRlZnMgZmlyc3QgYW5kIHRoZW4gdXNlcywg
YW5kIGluY2x1ZGVzCiAvLyBleGNlcHRpb24gaGFuZGxlcnMgaW4gdGhlIHVzZXMuCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBVc2VGdW5jdG9yLCB0eXBlbmFtZSBE
ZWZGdW5jdG9yPgotaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVw
T3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rp
b25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEluc3RydWN0aW9u
U3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQsIGNvbnN0IFVzZUZ1bmN0b3ImIHVzZSwgY29u
c3QgRGVmRnVuY3RvciYgZGVmKQoraW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0
aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYgdXNlLCBjb25zdCBE
ZWZGdW5jdG9yJiBkZWYpCiB7CiAgICAgLy8gVGhpcyBhYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGlu
c3RydWN0aW9uIGluIHJldmVyc2UuIEluc3RydWN0aW9ucyBsb2dpY2FsbHkgZmlyc3QgdXNlIG9w
ZXJhbmRzIGFuZAogICAgIC8vIHRoZW4gZGVmaW5lIG9wZXJhbmRzLiBUaGlzIGxvZ2ljYWwgb3Jk
ZXJpbmcgaXMgbmVjZXNzYXJ5IGZvciBvcGVyYXRpb25zIHRoYXQgdXNlIGFuZCBkZWYgdGhlIHNh
bWUKQEAgLTc4LDE3ICs3OCwxNyBAQCBpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFn
YXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZQogICAgIC8vIHVz
ZXMgYmVmb3JlIGRlZnMsIHRoZW4gdGhlIGFkZCBvcGVyYXRpb24gYWJvdmUgd291bGQgYXBwZWFy
IHRvIG5vdCBoYXZlIGxvYzEgbGl2ZSwgc2luY2Ugd2UnZAogICAgIC8vIGZpcnN0IGFkZCBpdCB0
byB0aGUgb3V0IHNldCAodGhlIHVzZSksIGFuZCB0aGVuIHdlJ2QgcmVtb3ZlIGl0ICh0aGUgZGVm
KS4KIAotICAgIGF1dG8qIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zm
c2V0KS5wdHIoKTsKKyAgICBhdXRvKiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChieXRl
Y29kZUluZGV4KS5wdHIoKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpOwogCi0gICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldCgKKyAgICBjb21w
dXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgoCiAgICAgICAgIGNvZGVCbG9jaywgb3Bjb2RlSUQsIGlu
c3RydWN0aW9uLAogICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CiAgICAg
ICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mob3BlcmFuZCkpCiAgICAgICAg
ICAgICAgICAgZGVmKG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICAgICAgfSk7CiAKLSAgICBjb21w
dXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAorICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRl
eCgKICAgICAgICAgY29kZUJsb2NrLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb24sCiAgICAgICAgIFsm
XSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKICAgICAgICAgICAgIGlmIChpc1ZhbGlkUmVn
aXN0ZXJGb3JMaXZlbmVzcyhvcGVyYW5kKSkKQEAgLTk3LDcgKzk3LDcgQEAgaW5saW5lIHZvaWQg
Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9j
a1R5cGUqIGNvZGUKIAogICAgIC8vIElmIHdlIGhhdmUgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIHdl
IHdhbnQgdGhlIGxpdmUtaW4gdmFyaWFibGVzIG9mIHRoZSAKICAgICAvLyBleGNlcHRpb24gaGFu
ZGxlciBibG9jayB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3Vs
YXIgYnl0ZWNvZGUuCi0gICAgaWYgKGF1dG8qIGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJG
b3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkpIHsKKyAgICBpZiAoYXV0byogaGFuZGxl
ciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkpIHsK
ICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBoYW5kbGVyQmxvY2sgPSBncmFwaC5maW5kQmFz
aWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoaGFuZGxlci0+dGFyZ2V0KTsKICAgICAgICAgQVNTRVJU
KGhhbmRsZXJCbG9jayk7CiAgICAgICAgIGhhbmRsZXJCbG9jay0+aW4oKS5mb3JFYWNoU2V0Qml0
KHVzZSk7CkBAIC0xMDUsMTAgKzEwNSwxMCBAQCBpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNz
UHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZQogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotaW5saW5lIHZvaWQgQnl0ZWNvZGVM
aXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqIGNv
ZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVH
cmFwaCYgZ3JhcGgsIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQsIEZh
c3RCaXRWZWN0b3ImIG91dCkKK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlv
bjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIG91dCkKIHsKICAgICBzdGVw
T3Zlckluc3RydWN0aW9uKAotICAgICAgICBjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgs
IGJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICBjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgs
IGJ5dGVjb2RlSW5kZXgsCiAgICAgICAgIFsmXSAodW5zaWduZWQgYml0SW5kZXgpIHsKICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIHVzZSBmdW5jdG9yLCBzbyB3ZSBzZXQgdGhlIGJpdC4KICAg
ICAgICAgICAgIG91dFtiaXRJbmRleF0gPSB0cnVlOwpAQCAtMTIwLDcgKzEyMCw3IEBAIGlubGlu
ZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihD
b2RlQmxvY2tUeXBlKiBjb2RlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUs
IHR5cGVuYW1lIEluc3RydWN0aW9ucz4KLWlubGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9w
YWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChDb2RlQmxvY2tU
eXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29k
ZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgdGFyZ2V0
T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCitpbmxpbmUgYm9vbCBCeXRlY29kZUxpdmVu
ZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChDb2Rl
QmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBC
eXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaywgQnl0ZWNvZGVJ
bmRleCB0YXJnZXRJbmRleCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KQogewogICAgIEFTU0VSVCgh
YmxvY2stPmlzRXhpdEJsb2NrKCkpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygp
KTsKQEAgLTEyOSw5ICsxMjksOSBAQCBpbmxpbmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFn
YXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoQwogCiAgICAgZm9y
IChpbnQgaSA9IGJsb2NrLT5vZmZzZXRzKCkuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAg
ICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+b2Zmc2V0cygpW2ldOwotICAg
ICAgICBpZiAodGFyZ2V0T2Zmc2V0ID4gYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgIGlmICh0YXJn
ZXRJbmRleC5vZmZzZXQoKSA+IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBo
LCBieXRlY29kZU9mZnNldCwgb3V0KTsKKyAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjb2Rl
QmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQp
LCBvdXQpOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQuc2V0QW5kQ2hlY2sob3V0KTsKQEAg
LTE0MiwxOSArMTQyLDE5IEBAIGlubGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlv
bjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayhDb2RlQmxvY2tUCiB7CiAgICAgaWYgKGJs
b2NrLT5pc0V4aXRCbG9jaygpIHx8IGJsb2NrLT5pc0VudHJ5QmxvY2soKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zm
c2V0KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYmxvY2ssIGJsb2NrLT5sZWFkZXJP
ZmZzZXQoKSwgYmxvY2stPmluKCkpOworICAgIHJldHVybiBjb21wdXRlTG9jYWxMaXZlbmVzc0Zv
ckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBibG9jaywgQnl0
ZWNvZGVJbmRleChibG9jay0+bGVhZGVyT2Zmc2V0KCkpLCBibG9jay0+aW4oKSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KLWlu
bGluZSBGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5l
c3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElu
c3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQpCitpbmxpbmUgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzUHJv
cGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChDb2RlQmxvY2tUeXBlKiBj
b2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBo
JiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewotICAgIEJ5dGVjb2RlQmFz
aWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0KTsKKyAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmlu
ZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKICAg
ICBBU1NFUlQoYmxvY2spOwogICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygpKTsKICAg
ICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9jaygpKTsKICAgICBGYXN0Qml0VmVjdG9yIG91dDsK
ICAgICBvdXQucmVzaXplKGJsb2NrLT5vdXQoKS5udW1CaXRzKCkpOwotICAgIGNvbXB1dGVMb2Nh
bExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBo
LCBibG9jaywgYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NG
b3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYmxvY2ssIGJ5
dGVjb2RlSW5kZXgsIG91dCk7CiAgICAgcmV0dXJuIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAppbmRleCAwMjJmM2JmZWI4Njg0
NDFjY2FkZGFmZDdmODM0ZmE4Zjk4ODczYmNlLi5jYTMzNDc5NDI4NDhjMmYzMDhhNWM1YTVlYjk0
NjJhNTFmNGVhOTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVVc2VEZWYuaApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNkZWZpbmUg
REVGUyBVU0VTX09SX0RFRlMKIAogdGVtcGxhdGU8dHlwZW5hbWUgQmxvY2ssIHR5cGVuYW1lIEZ1
bmN0b3I+Ci12b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoQmxvY2sqIGNvZGVCbG9j
aywgT3Bjb2RlSUQgb3Bjb2RlSUQsIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgY29u
c3QgRnVuY3RvciYgZnVuY3RvcikKK3ZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4KEJs
b2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9wY29kZUlELCBjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgaWYgKG9wY29kZUlEICE9
IG9wX2VudGVyICYmIChjb2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMo
KSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkpICYmIGNvZGVCbG9jay0+c2NvcGVSZWdpc3Rlcigp
LmlzVmFsaWQoKSkKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSk7
CkBAIC0yOTcsNyArMjk3LDcgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KEJs
b2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9wY29kZUlELCBjb25zdCBJbnMKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgQmxvY2ssIHR5cGVuYW1lIEZ1bmN0b3I+Ci12b2lkIGNvbXB1dGVEZWZzRm9y
Qnl0ZWNvZGVPZmZzZXQoQmxvY2sqIGNvZGVCbG9jaywgT3Bjb2RlSUQgb3Bjb2RlSUQsIGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3ZvaWQg
Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KEJsb2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9w
Y29kZUlELCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCiB7CiAgICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgIGNhc2Ugb3Bfd2lkZTE2Ogpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAK
aW5kZXggOWEwMDBmYzViNDJhZTZlMzgyNjlkODM3YTc5MGEzOTYwYjVjYmRhMy4uZjEzZDE3MzRh
MDJjNThhMzIxNzU5MjVkMjg4NTVhMmEyNjAwMTgxOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCkBAIC01NSw3ICs1NSw3IEBAIENh
bGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0YXR1cyhKU1ZhbHVlIHZhbHVlKQogICAgIG1fdmFyaWFu
dHMuYXBwZW5kKENhbGxWYXJpYW50KHZhbHVlLmFzQ2VsbCgpKSk7CiB9CiAKLUNhbGxMaW5rU3Rh
dHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkK
K0NhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4KQogewogICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAg
ICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CkBAIC02Nyw3ICs2Nyw3IEBAIENhbGxMaW5r
U3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIENvZGVCCiAgICAgfQogI2VuZGlmCiAKLSAgICBhdXRvIGluc3RydWN0aW9uID0g
cHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CisgICAgYXV0
byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpOwogICAgIE9wY29kZUlEIG9wID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlE
KCk7CiAKICAgICBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwpAQCAtOTAsNyArOTAs
NyBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQgogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlu
a1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgsIGNvbnN0IElDU3RhdHVzTWFwJiBtYXAsCisgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIGNvbnN0IElDU3Rh
dHVzTWFwJiBtYXAsCiAgICAgRXhpdFNpdGVEYXRhIGV4aXRTaXRlRGF0YSkKIHsKICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CkBAIC0xMTQsMTIg
KzExNCwxMiBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKIH0K
IAogQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBJQ1N0YXR1
c01hcCYgbWFwKQorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4LCBjb25zdCBJQ1N0YXR1c01hcCYgbWFwKQogewogICAgIHJldHVybiBjb21w
dXRlRm9yKHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIG1hcCwgY29tcHV0ZUV4aXRTaXRl
RGF0YShwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KSk7CiB9CiAKLUNhbGxMaW5rU3RhdHVz
OjpFeGl0U2l0ZURhdGEgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorQ2FsbExpbmtTdGF0
dXM6OkV4aXRTaXRlRGF0YSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShDb2Rl
QmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAg
ICBFeGl0U2l0ZURhdGEgZXhpdFNpdGVEYXRhOwogI2lmIEVOQUJMRShERkdfSklUKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAppbmRleCAwYTEw
MWNhMDJlNjg5MTBkMmZjMzQyMDc5Yjk5MGZhNTIyYTczODlkLi40NjhhM2RiNTdiZDIyYzg5YzEx
ZGQ3Y2QyMTc5NjE1MGUzMzdmY2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaApAQCAtNjYsMTAgKzY2LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgRXhpdEZsYWcgdGFrZXNTbG93UGF0aDsKICAgICAgICAgRXhpdEZsYWcgYmFkRnVuY3Rpb247
CiAgICAgfTsKLSAgICBzdGF0aWMgRXhpdFNpdGVEYXRhIGNvbXB1dGVFeGl0U2l0ZURhdGEoQ29k
ZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgc3RhdGljIEV4aXRTaXRlRGF0
YSBjb21wdXRlRXhpdFNpdGVEYXRhKENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgpOwogICAgIAot
ICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgsIGNvbnN0IElDU3RhdHVzTWFwJiwgRXhpdFNpdGVEYXRhKTsKLSAgICBz
dGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCBjb25zdCBJQ1N0YXR1c01hcCYpOworICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1
cyBjb21wdXRlRm9yKENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgsIGNvbnN0IElDU3RhdHVzTWFw
JiwgRXhpdFNpdGVEYXRhKTsKKyAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcihD
b2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBjb25zdCBJQ1N0YXR1c01hcCYpOwogCiAjaWYgRU5B
QkxFKEpJVCkKICAgICAvLyBDb21wdXRlcyB0aGUgc3RhdHVzIGFzc3VtaW5nIHRoYXQgd2UgbmV2
ZXIgdG9vayBzbG93IHBhdGggYW5kIG5ldmVyIHByZXZpb3VzbHkKQEAgLTExNyw3ICsxMTcsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgbWFrZUNsb3N1cmVDYWxsKCk7CiAgICAgCi0g
ICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgc3Rh
dGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBz
dGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZyb21DYWxsTGlua0luZm8oCiAgICAgICAgIGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENhbGxMaW5rSW5mbyYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA0ZTk0N2EzN2I0ODI2OGRjMjQw
MWQ1ZDkwNThiYWJkYjUzYmY2NWU1Li43ZTIxMTY4M2Q3OTRjNTRmZTFhYzg3MzUzMWQ4NmEyYWVk
Nzg2ODQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cApAQCAtMTUyNiw3ICsxNTI2LDcgQEAgQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmFkZENhbGxM
aW5rSW5mbygpCiAgICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2NhbGxMaW5rSW5m
b3MuYWRkKCk7CiB9CiAKLUNhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9G
b3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGluZGV4KQorQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6
OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBpbmRleCkKIHsK
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgaWYgKGF1dG8qIGpp
dERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKQEAgLTE1MzgsMjcgKzE1MzgsMjcgQEAgQ2FsbExp
bmtJbmZvKiBDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgodW5zaWdu
ZWQgaW5kZXgpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJhcmVDYXNlUHJvZmlsZSogQ29k
ZUJsb2NrOjphZGRSYXJlQ2FzZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KQorUmFyZUNhc2VQ
cm9maWxlKiBDb2RlQmxvY2s6OmFkZFJhcmVDYXNlUHJvZmlsZShCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAg
IGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7Ci0gICAgaml0RGF0YS5tX3Jh
cmVDYXNlUHJvZmlsZXMuYXBwZW5kKFJhcmVDYXNlUHJvZmlsZShieXRlY29kZU9mZnNldCkpOwor
ICAgIGppdERhdGEubV9yYXJlQ2FzZVByb2ZpbGVzLmFwcGVuZChSYXJlQ2FzZVByb2ZpbGUoYnl0
ZWNvZGVJbmRleCkpOwogICAgIHJldHVybiAmaml0RGF0YS5tX3JhcmVDYXNlUHJvZmlsZXMubGFz
dCgpOwogfQogCi1SYXJlQ2FzZVByb2ZpbGUqIENvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgaW50IGJ5dGVjb2RlT2Zm
c2V0KQorUmFyZUNhc2VQcm9maWxlKiBDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVj
b2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQogewogICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0g
ICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQ+KAotICAg
ICAgICAgICAgaml0RGF0YS0+bV9yYXJlQ2FzZVByb2ZpbGVzLCBqaXREYXRhLT5tX3JhcmVDYXNl
UHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCwKLSAgICAgICAgICAgIGdldFJhcmVDYXNl
UHJvZmlsZUJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxS
YXJlQ2FzZVByb2ZpbGUsIEJ5dGVjb2RlSW5kZXg+KAorICAgICAgICAgICAgaml0RGF0YS0+bV9y
YXJlQ2FzZVByb2ZpbGVzLCBqaXREYXRhLT5tX3JhcmVDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRl
Y29kZUluZGV4LAorICAgICAgICAgICAgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVJbmRleCk7
CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi11bnNpZ25lZCBDb2RlQmxvY2s6OnJh
cmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiBsb2NrZXIsIGludCBieXRlY29kZU9mZnNldCkKK3Vuc2lnbmVkIENvZGVCbG9jazo6cmFy
ZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYgbG9ja2VyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgUmFyZUNhc2VQ
cm9maWxlKiBwcm9maWxlID0gcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobG9ja2Vy
LCBieXRlY29kZU9mZnNldCk7CisgICAgUmFyZUNhc2VQcm9maWxlKiBwcm9maWxlID0gcmFyZUNh
c2VQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChsb2NrZXIsIGJ5dGVjb2RlSW5kZXgpOwogICAgIGlm
IChwcm9maWxlKQogICAgICAgICByZXR1cm4gcHJvZmlsZS0+bV9jb3VudGVyOwogICAgIHJldHVy
biAwOwpAQCAtMTczMCwxMCArMTczMCwxMCBAQCBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVk
UmVwbGFjZW1lbnQoKQogfQogI2VuZGlmCiAKLUhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRs
ZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5k
bGVyIHJlcXVpcmVkSGFuZGxlcikKK0hhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JC
eXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgUmVxdWlyZWRIYW5kbGVy
IHJlcXVpcmVkSGFuZGxlcikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZU9mZnNldCA8
IGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgcmV0dXJuIGhhbmRsZXJGb3JJbmRleChieXRl
Y29kZU9mZnNldCwgcmVxdWlyZWRIYW5kbGVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVChieXRlY29k
ZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICByZXR1cm4gaGFu
ZGxlckZvckluZGV4KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCksIHJlcXVpcmVkSGFuZGxlcik7CiB9
CiAKIEhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRl
eCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikKQEAgLTE3NjIsOSArMTc2Miw5IEBA
IERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENvZGVCbG9jazo6bmV3RXhjZXB0aW9uSGFuZGxpbmdD
YWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kCiAKIAogCi12b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0
Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZU9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6
T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KQordm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5l
c3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgp
CiB7Ci0gICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9m
ZnNldCk7CisgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29k
ZUluZGV4KTsKICAgICBPcENhdGNoIG9wID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBvcC5tZXRhZGF0YSh0aGlzKTsKICAgICBpZiAoISFtZXRhZGF0
YS5tX2J1ZmZlcikgewpAQCAtMTc4NCwxMCArMTc4NCwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZW5z
dXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZU9mZnNldChJbnN0cnVjdGlvblN0
cmVhbQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZW5zdXJlQ2F0Y2hMaXZlbmVzc0lz
Q29tcHV0ZWRGb3JCeXRlY29kZU9mZnNldFNsb3cob3AsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBl
bnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KG9wLCBieXRl
Y29kZUluZGV4KTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0Nv
bXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXRTbG93KGNvbnN0IE9wQ2F0Y2gmIG9wLCBJbnN0cnVjdGlv
blN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KQordm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNh
dGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleFNsb3coY29uc3QgT3BDYXRjaCYg
b3AsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMmIGJ5dGVjb2RlTGl2ZW5lc3MgPSBsaXZlbmVzc0FuYWx5c2lzKCk7CiAKQEAgLTE3
OTYsOCArMTc5Niw4IEBAIHZvaWQgQ29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21w
dXRlZEZvckJ5dGVjb2RlT2Zmc2V0U2xvdyhjb25zdCBPcENhdGNoCiAgICAgLy8gd2UgY2FuIGF2
b2lkIHByb2ZpbGluZyB0aGVtIGFuZCBleHRyYWN0aW5nIHRoZW0gd2hlbiBkb2luZyBPU1IgZW50
cnkKICAgICAvLyBpbnRvIHRoZSBERkcuCiAKLSAgICBhdXRvIG5leHRPZmZzZXQgPSBpbnN0cnVj
dGlvbnMoKS5hdChieXRlY29kZU9mZnNldCkubmV4dCgpLm9mZnNldCgpOwotICAgIEZhc3RCaXRW
ZWN0b3IgbGl2ZUxvY2FscyA9IGJ5dGVjb2RlTGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRl
Y29kZU9mZnNldCh0aGlzLCBuZXh0T2Zmc2V0KTsKKyAgICBhdXRvIG5leHRPZmZzZXQgPSBpbnN0
cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5uZXh0KCkub2Zmc2V0KCk7CisgICAgRmFzdEJp
dFZlY3RvciBsaXZlTG9jYWxzID0gYnl0ZWNvZGVMaXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5
dGVjb2RlSW5kZXgodGhpcywgQnl0ZWNvZGVJbmRleChuZXh0T2Zmc2V0KSk7CiAgICAgVmVjdG9y
PFZpcnR1YWxSZWdpc3Rlcj4gbGl2ZU9wZXJhbmRzOwogICAgIGxpdmVPcGVyYW5kcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGxpdmVMb2NhbHMuYml0Q291bnQoKSk7CiAgICAgbGl2ZUxvY2Fscy5m
b3JFYWNoU2V0Qml0KFsmXSAodW5zaWduZWQgbGl2ZUxvY2FsKSB7CkBAIC0xODQyLDI2ICsxODQy
LDI2IEBAIHZvaWQgQ29kZUJsb2NrOjpyZW1vdmVFeGNlcHRpb25IYW5kbGVyRm9yQ2FsbFNpdGUo
RGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggY2FsbFNpCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAotdW5zaWduZWQgQ29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVP
ZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit1bnNpZ25lZCBDb2RlQmxvY2s6OmxpbmVO
dW1iZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7
Ci0gICAgcmV0dXJuIG93bmVyRXhlY3V0YWJsZSgpLT5maXJzdExpbmUoKSArIG1fdW5saW5rZWRD
b2RlLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIFJF
TEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbnMoKS5zaXpl
KCkpOworICAgIHJldHVybiBvd25lckV4ZWN1dGFibGUoKS0+Zmlyc3RMaW5lKCkgKyBtX3VubGlu
a2VkQ29kZS0+bGluZU51bWJlckZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiB9CiAK
LXVuc2lnbmVkIENvZGVCbG9jazo6Y29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQpCit1bnNpZ25lZCBDb2RlQmxvY2s6OmNvbHVtbk51bWJlckZvckJ5
dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIGludCBkaXZv
dDsKICAgICBpbnQgc3RhcnRPZmZzZXQ7CiAgICAgaW50IGVuZE9mZnNldDsKICAgICB1bnNpZ25l
ZCBsaW5lOwogICAgIHVuc2lnbmVkIGNvbHVtbjsKLSAgICBleHByZXNzaW9uUmFuZ2VGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQs
IGxpbmUsIGNvbHVtbik7CisgICAgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVJbmRleChieXRl
Y29kZUluZGV4LCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsK
ICAgICByZXR1cm4gY29sdW1uOwogfQogCi12b2lkIENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdl
Rm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsIGlu
dCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQm
IGNvbHVtbikgY29uc3QKK3ZvaWQgQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29k
ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgaW50JiBkaXZvdCwgaW50JiBzdGFy
dE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1u
KSBjb25zdAogewotICAgIG1fdW5saW5rZWRDb2RlLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29k
ZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxp
bmUsIGNvbHVtbik7CisgICAgbV91bmxpbmtlZENvZGUtPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVJbmRleCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxp
bmUsIGNvbHVtbik7CiAgICAgZGl2b3QgKz0gc291cmNlT2Zmc2V0KCk7CiAgICAgY29sdW1uICs9
IGxpbmUgPyAxIDogZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KCk7CiAgICAgbGluZSArPSBvd25lckV4
ZWN1dGFibGUoKS0+Zmlyc3RMaW5lKCk7CkBAIC0xODc1LDcgKzE4NzUsNyBAQCBib29sIENvZGVC
bG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4odW5zaWduZWQgbGluZSwgT3B0aW9uYWw8
dW5zaWduZWQ+IGNvbAogICAgICAgICAgICAgaW50IHVudXNlZDsKICAgICAgICAgICAgIHVuc2ln
bmVkIG9wRGVidWdMaW5lOwogICAgICAgICAgICAgdW5zaWduZWQgb3BEZWJ1Z0NvbHVtbjsKLSAg
ICAgICAgICAgIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGl0Lm9mZnNldCgpLCB1
bnVzZWQsIHVudXNlZCwgdW51c2VkLCBvcERlYnVnTGluZSwgb3BEZWJ1Z0NvbHVtbik7CisgICAg
ICAgICAgICBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4KGl0LmluZGV4KCksIHVudXNl
ZCwgdW51c2VkLCB1bnVzZWQsIG9wRGVidWdMaW5lLCBvcERlYnVnQ29sdW1uKTsKICAgICAgICAg
ICAgIGlmIChsaW5lID09IG9wRGVidWdMaW5lICYmICghY29sdW1uIHx8IGNvbHVtbiA9PSBvcERl
YnVnQ29sdW1uKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAt
MjYyMyw5ICsyNjIzLDkgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZFJlb3B0aW1pemVGcm9tTG9v
cE5vdygpCiB9CiAjZW5kaWYKIAotQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJv
ZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkK
K0FycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewotICAgIGF1dG8gaW5z
dHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9mZnNldCk7CisgICAgYXV0byBp
bnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOwogICAgIHN3aXRj
aCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKICNkZWZpbmUgQ0FTRTEoT3ApIFwKICAgICBj
YXNlIE9wOjpvcGNvZGVJRDogXApAQCAtMjY1NSwxMCArMjY1NSwxMCBAQCBBcnJheVByb2ZpbGUq
IENvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIHVu
c2lnbmVkIGJ5dAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1BcnJheVByb2ZpbGUqIENvZGVC
bG9jazo6Z2V0QXJyYXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorQXJyYXlQcm9m
aWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVy
biBnZXRBcnJheVByb2ZpbGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7CisgICAgcmV0dXJuIGdl
dEFycmF5UHJvZmlsZShsb2NrZXIsIGJ5dGVjb2RlSW5kZXgpOwogfQogCiAjaWYgRU5BQkxFKERG
R19KSVQpCkBAIC0yOTY2LDkgKzI5NjYsOSBAQCBTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKIH0KIAotVmFsdWVQcm9maWxlKiBDb2RlQmxvY2s6OnRyeUdldFZhbHVlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKK1ZhbHVlUHJvZmlsZSogQ29k
ZUJsb2NrOjp0cnlHZXRWYWx1ZVByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCkKIHsKLSAgICBhdXRvIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCku
YXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4KTsKICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
KSB7CiAKICNkZWZpbmUgQ0FTRShPcCkgXApAQCAtMjk4NSwyMyArMjk4NSwyMyBAQCBWYWx1ZVBy
b2ZpbGUqIENvZGVCbG9jazo6dHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50
IGJ5dGVjb2RlT2Zmc2V0KQogICAgIH0KIH0KIAotU3BlY3VsYXRlZFR5cGUgQ29kZUJsb2NrOjp2
YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIsIGludCBieXRlY29kZU9mZnNldCkKK1NwZWN1bGF0ZWRUeXBlIENvZGVC
bG9jazo6dmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiBsb2NrZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAg
ICBpZiAoVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUgPSB0cnlHZXRWYWx1ZVByb2ZpbGVGb3JC
eXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkpCisgICAgaWYgKFZhbHVlUHJvZmlsZSogdmFs
dWVQcm9maWxlID0gdHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUlu
ZGV4KSkKICAgICAgICAgcmV0dXJuIHZhbHVlUHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0
aW9uKGxvY2tlcik7CiAgICAgcmV0dXJuIFNwZWNOb25lOwogfQogCi1WYWx1ZVByb2ZpbGUmIENv
ZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0
KQorVmFsdWVQcm9maWxlJiBDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgo
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewotICAgIHJldHVybiAqdHJ5R2V0VmFsdWVQ
cm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIHJldHVybiAqdHJ5
R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKIH0KIAogdm9p
ZCBDb2RlQmxvY2s6OnZhbGlkYXRlKCkKIHsKICAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMg
bGl2ZW5lc3ModGhpcyk7IC8vIENvbXB1dGUgZGlyZWN0bHkgZnJvbSBzY3JhdGNoIHNvIGl0IGRv
ZXNuJ3QgZWZmZWN0IENvZGVCbG9jayBmb290cHJpbnQuCiAgICAgCi0gICAgRmFzdEJpdFZlY3Rv
ciBsaXZlQXRIZWFkID0gbGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh0
aGlzLCAwKTsKKyAgICBGYXN0Qml0VmVjdG9yIGxpdmVBdEhlYWQgPSBsaXZlbmVzcy5nZXRMaXZl
bmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgodGhpcywgQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgCiAg
ICAgaWYgKGxpdmVBdEhlYWQubnVtQml0cygpICE9IHN0YXRpY19jYXN0PHNpemVfdD4obV9udW1D
YWxsZWVMb2NhbHMpKSB7CiAgICAgICAgIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKQEAgLTMw
MjUsNyArMzAyNSw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2YWxpZGF0ZSgpCiAgICAgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAg
Zm9yIChjb25zdCBhdXRvJiBpbnN0cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAg
ICAgIE9wY29kZUlEIG9wY29kZSA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwotICAgICAgICBp
ZiAoISFiYXNlbGluZUFsdGVybmF0aXZlKCktPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChpbnN0
cnVjdGlvbi5vZmZzZXQoKSkpIHsKKyAgICAgICAgaWYgKCEhYmFzZWxpbmVBbHRlcm5hdGl2ZSgp
LT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KGluc3RydWN0aW9uLm9mZnNl
dCgpKSkpIHsKICAgICAgICAgICAgIGlmIChvcGNvZGUgPT0gb3BfY2F0Y2ggfHwgb3Bjb2RlID09
IG9wX2VudGVyKSB7CiAgICAgICAgICAgICAgICAgLy8gb3BfY2F0Y2gvb3BfZW50ZXIgbG9naWNh
bGx5IHJlcHJlc2VudCBhbiBlbnRyeXBvaW50LiBFbnRyeXBvaW50cyBhcmUgbm90IGFsbG93ZWQg
dG8gYmUKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgb2YgYSB0cnkgYmxvY2sgYmVjYXVzZSB0
aGV5IGFyZSByZXNwb25zaWJsZSBmb3IgYm9vdHN0cmFwcGluZyBzdGF0ZS4gQW5kIHRoZXkKQEAg
LTMwODMsOSArMzA4Myw5IEBAIGNvbnN0IEluc3RydWN0aW9uKiBDb2RlQmxvY2s6Om91dE9mTGlu
ZUp1bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQogICAgIHJldHVybiBpbnN0cnVjdGlv
bnMoKS5hdChvZmZzZXQgKyB0YXJnZXQpLnB0cigpOwogfQogCi1Bcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9m
ZnNldCBieXRlY29kZU9mZnNldCkKK0FyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjphcml0aFByb2Zp
bGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBy
ZXR1cm4gYXJpdGhQcm9maWxlRm9yUEMoaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVPZmZzZXQp
LnB0cigpKTsKKyAgICByZXR1cm4gYXJpdGhQcm9maWxlRm9yUEMoaW5zdHJ1Y3Rpb25zKCkuYXQo
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkucHRyKCkpOwogfQogCiBBcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6YXJpdGhQcm9maWxlRm9yUEMoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQpAQCAtMzEwOCwx
MSArMzEwOCwxMSBAQCBBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yUEMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIENv
ZGVCbG9jazo6Y291bGRUYWtlU3BlY2lhbEZhc3RDYXNlKEluc3RydWN0aW9uU3RyZWFtOjpPZmZz
ZXQgYnl0ZWNvZGVPZmZzZXQpCitib29sIENvZGVCbG9jazo6Y291bGRUYWtlU3BlY2lhbEFyaXRo
RmFzdENhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIGlmICghaGFzQmFz
ZWxpbmVKSVRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFyaXRoUHJv
ZmlsZSogcHJvZmlsZSA9IGFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zm
c2V0KTsKKyAgICBBcml0aFByb2ZpbGUqIHByb2ZpbGUgPSBhcml0aFByb2ZpbGVGb3JCeXRlY29k
ZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIGlmICghcHJvZmlsZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHJldHVybiBwcm9maWxlLT50b29rU3BlY2lhbEZhc3RQYXRoKCk7CkBAIC0z
MjMxLDI4ICszMjMxLDI4IEBAIE9wdGlvbmFsPENvZGVPcmlnaW4+IENvZGVCbG9jazo6ZmluZFBD
KHZvaWQqIHBjKQogfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKLU9wdGlvbmFsPHVuc2lnbmVk
PiBDb2RlQmxvY2s6OmJ5dGVjb2RlT2Zmc2V0RnJvbUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4KQorT3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjpieXRl
Y29kZUluZGV4RnJvbUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQog
ewotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBieXRlY29kZU9mZnNldDsKKyAgICBPcHRpb25hbDxC
eXRlY29kZUluZGV4PiBieXRlY29kZUluZGV4OwogICAgIEpJVFR5cGUgaml0VHlwZSA9IHRoaXMt
PmppdFR5cGUoKTsKICAgICBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
IHx8IGppdFR5cGUgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICBieXRlY29kZU9mZnNldCA9IGNhbGxTaXRlSW5kZXguYml0cygpOworICAgICAg
ICBieXRlY29kZUluZGV4ID0gY2FsbFNpdGVJbmRleC5ieXRlY29kZUluZGV4KCk7CiAjZWxzZQog
ICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiaXR3aXNlX2Nhc3Q8SW5zdHJ1Y3Rp
b24qPihjYWxsU2l0ZUluZGV4LmJpdHMoKSk7Ci0gICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gdGhp
cy0+Ynl0ZWNvZGVPZmZzZXQoaW5zdHJ1Y3Rpb24pOworICAgICAgICBieXRlY29kZUluZGV4ID0g
dGhpcy0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7CiAjZW5kaWYKICAgICB9IGVsc2UgaWYg
KGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklU
KSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENv
ZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpOwogICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IGNv
ZGVPcmlnaW4oY2FsbFNpdGVJbmRleCk7Ci0gICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gb3JpZ2lu
LmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgYnl0ZWNvZGVJbmRleCA9IG9yaWdpbi5ieXRlY29k
ZUluZGV4KCk7CiAjZWxzZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
I2VuZGlmCiAgICAgfQogCi0gICAgcmV0dXJuIGJ5dGVjb2RlT2Zmc2V0OworICAgIHJldHVybiBi
eXRlY29kZUluZGV4OwogfQogCiBpbnQzMl90IENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGlu
dDMyX3QgdGhyZXNob2xkKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCmluZGV4IGQyMDBmZDU5ZjQyOWEzODNkYTlhZDdjN2ZmYWMwOWNiMjYyYmNmMzYuLjBlYzMw
NDkxMWE2OWYwMjM3NGM0YjBlYjc4YTllYTQzYjhiOTcxNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTIzOSwxNSArMjM5LDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGluZGV4ID49IG1fbnVtVmFyczsKICAgICB9CiAKLSAgICBIYW5kbGVy
SW5mbyogaGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBS
ZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOworICAgIEhhbmRs
ZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4LCBSZXF1aXJlZEhh
bmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwogICAgIEhhbmRsZXJJbmZvKiBo
YW5kbGVyRm9ySW5kZXgodW5zaWduZWQsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxl
cjo6QW55SGFuZGxlcik7CiAgICAgdm9pZCByZW1vdmVFeGNlcHRpb25IYW5kbGVyRm9yQ2FsbFNp
dGUoRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgpOwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXJGb3JC
eXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7Ci0gICAgdW5zaWduZWQgY29s
dW1uTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAg
IHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQsIGludCYgZGl2b3QsCisgICAgdW5zaWduZWQgbGluZU51bWJlckZvckJ5dGVjb2RlSW5k
ZXgoQnl0ZWNvZGVJbmRleCk7CisgICAgdW5zaWduZWQgY29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVJ
bmRleChCeXRlY29kZUluZGV4KTsKKyAgICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2Rl
SW5kZXgoQnl0ZWNvZGVJbmRleCwgaW50JiBkaXZvdCwKICAgICAgICAgaW50JiBzdGFydE9mZnNl
dCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25z
dDsKIAotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBieXRlY29kZU9mZnNldEZyb21DYWxsU2l0ZUlu
ZGV4KENhbGxTaXRlSW5kZXgpOworICAgIE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IGJ5dGVjb2Rl
SW5kZXhGcm9tQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4KTsKIAogICAgIHZvaWQgZ2V0SUNT
dGF0dXNNYXAoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgSUNTdGF0dXNNYXAmIHJlc3VsdCk7
CiAgICAgdm9pZCBnZXRJQ1N0YXR1c01hcChJQ1N0YXR1c01hcCYgcmVzdWx0KTsKQEAgLTMwOSw3
ICszMDksNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBpcyBhIHNsb3cgZnVuY3Rpb24gY2FsbCB1
c2VkIHByaW1hcmlseSBmb3IgY29tcGlsaW5nIE9TUiBleGl0cyBpbiB0aGUgY2FzZQogICAgIC8v
IHRoYXQgdGhlcmUgaGFkIGJlZW4gaW5saW5pbmcuIENoYW5jZXMgYXJlIGlmIHlvdSB3YW50IHRv
IHVzZSB0aGlzLCB5b3UncmUgcmVhbGx5CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0lu
Zm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgotICAgIENhbGxMaW5r
SW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleCh1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KTsKKyAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgo
Qnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAm
JiBqaXRDb2RlTWFwKQogICAgIHsKQEAgLTMyOCwyNSArMzI4LDI1IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVnaXN0ZXJTZXQpOwogICAgIHZvaWQgc2V0Q2Fs
bGVlU2F2ZVJlZ2lzdGVycyhzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+KTsK
IAotICAgIFJhcmVDYXNlUHJvZmlsZSogYWRkUmFyZUNhc2VQcm9maWxlKGludCBieXRlY29kZU9m
ZnNldCk7Ci0gICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9m
ZnNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAg
IHVuc2lnbmVkIHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgaW50IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBSYXJlQ2FzZVByb2Zp
bGUqIGFkZFJhcmVDYXNlUHJvZmlsZShCeXRlY29kZUluZGV4KTsKKyAgICBSYXJlQ2FzZVByb2Zp
bGUqIHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgQnl0ZWNvZGVJbmRleCk7CisgICAgdW5zaWduZWQgcmFyZUNhc2VQcm9maWxlQ291bnRG
b3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgp
OwogCi0gICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCisg
ICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2FzZShCeXRlY29kZUluZGV4KQogICAgIHsKICAgICAg
ICAgaWYgKCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAg
IHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZU9mZnNldChs
b2NrZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2Fz
ZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCBieXRlY29kZUluZGV4KTsKICAg
ICAgICAgcmV0dXJuIHZhbHVlID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11
bUNvdW50KCk7CiAgICAgfQogCi0gICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShpbnQgYnl0ZWNv
ZGVPZmZzZXQpCisgICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCiAgICAgewogICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9sb2NrKTsKLSAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVD
b3VudEZvckJ5dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICB1
bnNpZ25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVJbmRleChsb2Nr
ZXIsIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6Y291
bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKTsKICAgICB9CiAKQEAgLTM4Miw2ICszODIsMTEg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmV0dXJuQWRkcmVzcyAtIGluc3RydWN0aW9uc0Jl
Z2luOwogICAgIH0KIAorICAgIGlubGluZSBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoY29u
c3QgSW5zdHJ1Y3Rpb24qIHJldHVybkFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gQnl0
ZWNvZGVJbmRleChieXRlY29kZU9mZnNldChyZXR1cm5BZGRyZXNzKSk7CisgICAgfQorCiAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1f
dW5saW5rZWRDb2RlLT5pbnN0cnVjdGlvbnMoKTsgfQogCiAgICAgc2l6ZV90IHByZWRpY3RlZE1h
Y2hpbmVDb2RlU2l6ZSgpOwpAQCAtNDgzLDggKzQ4OCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZUZvckJ5
dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCk7Ci0gICAgU3BlY3VsYXRlZFR5cGUgdmFs
dWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIGludCBieXRlY29kZU9mZnNldCk7CisgICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2Zp
bGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOworICAgIFNwZWN1bGF0ZWRUeXBlIHZh
bHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
dm9pZCBmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYp
OwpAQCAtNDkyLDEzICs0OTcsMTMgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3Im
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMTEludENhbGxM
aW5rSW5mbyhjb25zdCBGdW5jdG9yJik7CiAKLSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZz
ZXQpOworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRl
Y29kZUluZGV4KTsKICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZUZvclBDKGNvbnN0IElu
c3RydWN0aW9uKik7CiAKLSAgICBib29sIGNvdWxkVGFrZVNwZWNpYWxGYXN0Q2FzZShJbnN0cnVj
dGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBib29sIGNvdWxkVGFrZVNw
ZWNpYWxBcml0aEZhc3RDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwogCi0gICAg
QXJyYXlQcm9maWxlKiBnZXRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIEFycmF5UHJvZmlsZSogZ2V0QXJyYXlQcm9m
aWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBBcnJheVByb2ZpbGUqIGdldEFycmF5
UHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKKyAgICBB
cnJheVByb2ZpbGUqIGdldEFycmF5UHJvZmlsZShCeXRlY29kZUluZGV4KTsKIAogICAgIC8vIEV4
Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0CiAKQEAgLTg3Niw3ICs4ODEsNyBAQCBwdWJsaWM6CiAK
ICAgICBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRl
SW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKTsKIAotICAgIHZvaWQgZW5zdXJl
Q2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZU9mZnNldChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB2b2lkIGVuc3VyZUNhdGNoTGl2ZW5lc3NJ
c0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKIAogICAgIGJvb2wgaGFz
VGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc1RhaWxDYWxscygp
OyB9CiAKQEAgLTk0Myw3ICs5NDgsNyBAQCBwcml2YXRlOgogCiAgICAgdW5zaWduZWQgbnVtYmVy
T2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX251bWJlck9mTm9uQXJndW1l
bnRWYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmls
ZXMoKSB7IHJldHVybiBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZO
b25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKTsgfQotICAgIFZhbHVlUHJvZmlsZSogdHJ5R2V0VmFs
dWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBWYWx1
ZVByb2ZpbGUqIHRyeUdldFZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRl
eCk7CiAKICAgICBTZWNvbmRzIHRpbWVTaW5jZUNyZWF0aW9uKCkKICAgICB7CkBAIC05NjAsNyAr
OTY1LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICB2b2lkIGluc2VydEJhc2ljQmxvY2tCb3Vu
ZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcigpOwotICAgIHZvaWQgZW5zdXJlQ2F0Y2hMaXZl
bmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZU9mZnNldFNsb3coY29uc3QgT3BDYXRjaCYsIEluc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQpOworICAgIHZvaWQgZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29t
cHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyhjb25zdCBPcENhdGNoJiwgQnl0ZWNvZGVJbmRleCk7
CiAKICAgICBpbnQgbV9udW1DYWxsZWVMb2NhbHM7CiAgICAgaW50IG1fbnVtVmFyczsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAppbmRleCAyZGU4MDQ4
MjFjNzgxYmZmODEwM2Q0NWQwN2JkZmE2YzdlZWUwM2NiLi44M2ZiYjkwZjQwMjEzZmVlMDRjYmYx
MWIwOTFiNDMyMzc4YmE0Mzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZU9yaWdpbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCkBAIC05MSw3ICs5MSw3IEBAIHVuc2lnbmVkIENvZGVPcmlnaW46OmFw
cHJveGltYXRlSGFzaChJbmxpbmVDYWxsRnJhbWUqIHRlcm1pbmFsKSBjb25zdAogICAgIHVuc2ln
bmVkIHJlc3VsdCA9IDI7CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gKnRoaXM7CiAgICAg
Zm9yICg7OykgewotICAgICAgICByZXN1bHQgKz0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7
CisgICAgICAgIHJlc3VsdCArPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5hc0JpdHMoKTsK
IAogICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSgpOwogCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBDb2RlT3JpZ2luOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIoY2xvc3VyZSkg
Iik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG91dC5wcmludCgiYmMjIiwgc3RhY2tb
aV0uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50KHN0YWNrW2ldLmJ5dGVjb2Rl
SW5kZXgoKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZU9yaWdpbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVPcmlnaW4uaAppbmRleCBkNWYzMGMyYzkwMzY3MTY5ZGM1ODc1NzJjYzJlOWIzMjAyOWU5NDA2
Li4zNDE0ZDRmMDFkZjRkNzhiNzRjNGMwY2M1Yjg5Yzg1Y2VhYjgwYTNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKQEAgLTI1LDYgKzI1LDggQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCeXRlY29kZUluZGV4LmgiCisKICNpbmNsdWRlIDxs
aW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgpAQCAtNDEsMjUgKzQzLDIzIEBAIGNsYXNzIENvZGVPcmlnaW4gewogcHVibGljOgog
ICAgIENvZGVPcmlnaW4oKQogI2lmIENQVShBRERSRVNTNjQpCi0gICAgICAgIDogbV9jb21wb3Np
dGVWYWx1ZShidWlsZENvbXBvc2l0ZVZhbHVlKG51bGxwdHIsIHNfaW52YWxpZEJ5dGVjb2RlSW5k
ZXgpKQorICAgICAgICA6IG1fY29tcG9zaXRlVmFsdWUoYnVpbGRDb21wb3NpdGVWYWx1ZShudWxs
cHRyLCBCeXRlY29kZUluZGV4KCkpKQogI2Vsc2UKLSAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgo
c19pbnZhbGlkQnl0ZWNvZGVJbmRleCkKLSAgICAgICAgLCBtX2lubGluZUNhbGxGcmFtZShudWxs
cHRyKQorICAgICAgICA6IG1faW5saW5lQ2FsbEZyYW1lKG51bGxwdHIpCiAjZW5kaWYKICAgICB7
CiAgICAgfQotICAgIAorCiAgICAgQ29kZU9yaWdpbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVR5cGUpCiAjaWYgQ1BVKEFERFJFU1M2NCkKLSAgICAgICAgOiBtX2NvbXBvc2l0ZVZhbHVlKGJ1
aWxkQ29tcG9zaXRlVmFsdWUoZGVsZXRlZE1hcmtlcigpLCBzX2ludmFsaWRCeXRlY29kZUluZGV4
KSkKKyAgICAgICAgOiBtX2NvbXBvc2l0ZVZhbHVlKGJ1aWxkQ29tcG9zaXRlVmFsdWUoZGVsZXRl
ZE1hcmtlcigpLCBCeXRlY29kZUluZGV4KCkpKQogI2Vsc2UKLSAgICAgICAgOiBtX2J5dGVjb2Rl
SW5kZXgoc19pbnZhbGlkQnl0ZWNvZGVJbmRleCkKLSAgICAgICAgLCBtX2lubGluZUNhbGxGcmFt
ZShkZWxldGVkTWFya2VyKCkpCisgICAgICAgIDogbV9pbmxpbmVDYWxsRnJhbWUoZGVsZXRlZE1h
cmtlcigpKQogI2VuZGlmCiAgICAgewogICAgIH0KICAgICAKLSAgICBleHBsaWNpdCBDb2RlT3Jp
Z2luKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lID0gbnVsbHB0cikKKyAgICBleHBsaWNpdCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBudWxscHRyKQog
I2lmIENQVShBRERSRVNTNjQpCiAgICAgICAgIDogbV9jb21wb3NpdGVWYWx1ZShidWlsZENvbXBv
c2l0ZVZhbHVlKGlubGluZUNhbGxGcmFtZSwgYnl0ZWNvZGVJbmRleCkpCiAjZWxzZQpAQCAtNjcs
NyArNjcsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9pbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2Fs
bEZyYW1lKQogI2VuZGlmCiAgICAgewotICAgICAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCA8IHNf
aW52YWxpZEJ5dGVjb2RlSW5kZXgpOworICAgICAgICBBU1NFUlQoISFieXRlY29kZUluZGV4KTsK
ICNpZiBDUFUoQUREUkVTUzY0KQogICAgICAgICBBU1NFUlQoIShiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihpbmxpbmVDYWxsRnJhbWUpICYgfnNfbWFza0NvbXBvc2l0ZVZhbHVlRm9yUG9pbnRlcikp
OwogI2VuZGlmCkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogI2lmIENQVShBRERSRVNTNjQp
CiAgICAgICAgIHJldHVybiAhKG1fY29tcG9zaXRlVmFsdWUgJiBzX21hc2tJc0J5dGVjb2RlSW5k
ZXhJbnZhbGlkKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXggIT0gc19p
bnZhbGlkQnl0ZWNvZGVJbmRleDsKKyAgICAgICAgcmV0dXJuICEhbV9ieXRlY29kZUluZGV4Owog
I2VuZGlmCiAgICAgfQogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biBpc1NldCgpOyB9CkBAIC0xMzQsNyArMTM0LDcgQEAgcHVibGljOgogI2lmIENQVShBRERSRVNT
NjQpCiAgICAgICAgIHJldHVybiAhaXNTZXQoKSAmJiAobV9jb21wb3NpdGVWYWx1ZSAmIHNfbWFz
a0NvbXBvc2l0ZVZhbHVlRm9yUG9pbnRlcik7CiAjZWxzZQotICAgICAgICByZXR1cm4gbV9ieXRl
Y29kZUluZGV4ID09IHNfaW52YWxpZEJ5dGVjb2RlSW5kZXggJiYgISFtX2lubGluZUNhbGxGcmFt
ZTsKKyAgICAgICAgcmV0dXJuICEhbV9ieXRlY29kZUluZGV4ICYmICEhbV9pbmxpbmVDYWxsRnJh
bWU7CiAjZW5kaWYKICAgICB9CiAgICAgCkBAIC0xNjcsMTQgKzE2NywxNCBAQCBwdWJsaWM6CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAg
dm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKIAot
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgoKSBjb25zdAorICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCgpIGNvbnN0CiAgICAgewogI2lmIENQVShBRERSRVNTNjQpCiAgICAgICAgIGlm
ICghaXNTZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBzX2ludmFsaWRCeXRlY29kZUluZGV4Owor
ICAgICAgICAgICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgaWYgKFVOTElLRUxZ
KGlzT3V0T2ZMaW5lKCkpKQogICAgICAgICAgICAgcmV0dXJuIG91dE9mTGluZUNvZGVPcmlnaW4o
KS0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgcmV0dXJuIG1fY29tcG9zaXRlVmFsdWUgPj4gKDY0
IC0gc19mcmVlQml0c0F0VG9wKTsKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXg6OmZyb21C
aXRzKG1fY29tcG9zaXRlVmFsdWUgPj4gKDY0IC0gc19mcmVlQml0c0F0VG9wKSk7CiAjZWxzZQog
ICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4OwogI2VuZGlmCkBAIC0xOTIsOCArMTkyLDYg
QEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIHNfaW52YWxpZEJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWDsKLQogI2lmIENQVShBRERSRVNT
NjQpCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc19tYXNrSXNPdXRPZkxpbmUgPSAx
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHNfbWFza0lzQnl0ZWNvZGVJbmRleElu
dmFsaWQgPSAyOwpAQCAtMjAyLDkgKzIwMCw5IEBAIHByaXZhdGU6CiAgICAgICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXg7CisgICAgICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKICAgICAgICAgCi0gICAgICAgIE91dE9mTGlu
ZUNvZGVPcmlnaW4oSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpCisgICAgICAgIE91dE9mTGluZUNvZGVPcmlnaW4oSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICAgICAg
ICAgIDogaW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICwgYnl0
ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7CkBAIC0yMzUsMTcgKzIzMywxNyBA
QCBwcml2YXRlOgogI2lmIENQVShBRERSRVNTNjQpCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBzX2ZyZWVCaXRzQXRUb3AgPSA2NCAtIFdURl9DUFVfRUZGRUNUSVZFX0FERFJFU1NfV0lE
VEg7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc19tYXNrQ29tcG9zaXRlVmFsdWVG
b3JQb2ludGVyID0gKCgxVUxMIDw8IFdURl9DUFVfRUZGRUNUSVZFX0FERFJFU1NfV0lEVEgpIC0g
MSkgJiB+KDhVTEwgLSAxKTsKLSAgICBzdGF0aWMgdWludHB0cl90IGJ1aWxkQ29tcG9zaXRlVmFs
dWUoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCisgICAgc3RhdGljIHVpbnRwdHJfdCBidWlsZENvbXBvc2l0ZVZhbHVlKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAgICAg
ewotICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleCA9PSBzX2ludmFsaWRCeXRlY29kZUluZGV4KQor
ICAgICAgICBpZiAoIWJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oaW5saW5lQ2FsbEZyYW1lKSB8IHNfbWFza0lzQnl0ZWNvZGVJbmRleElu
dmFsaWQ7CiAKLSAgICAgICAgaWYgKFVOTElLRUxZKGJ5dGVjb2RlSW5kZXggPj0gMSA8PCBzX2Zy
ZWVCaXRzQXRUb3ApKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShieXRlY29kZUluZGV4LmFzQml0
cygpID49IDEgPDwgc19mcmVlQml0c0F0VG9wKSkgewogICAgICAgICAgICAgYXV0byogb3V0T2ZM
aW5lID0gbmV3IE91dE9mTGluZUNvZGVPcmlnaW4oaW5saW5lQ2FsbEZyYW1lLCBieXRlY29kZUlu
ZGV4KTsKICAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihvdXRPZkxp
bmUpIHwgc19tYXNrSXNPdXRPZkxpbmU7CiAgICAgICAgIH0KIAotICAgICAgICB1aW50cHRyX3Qg
ZW5jb2RlZEJ5dGVjb2RlSW5kZXggPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlSW5k
ZXgpIDw8ICg2NCAtIHNfZnJlZUJpdHNBdFRvcCk7CisgICAgICAgIHVpbnRwdHJfdCBlbmNvZGVk
Qnl0ZWNvZGVJbmRleCA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGVJbmRleC5hc0Jp
dHMoKSkgPDwgKDY0IC0gc19mcmVlQml0c0F0VG9wKTsKICAgICAgICAgQVNTRVJUKCEoZW5jb2Rl
ZEJ5dGVjb2RlSW5kZXggJiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihpbmxpbmVDYWxsRnJhbWUp
KSk7CiAgICAgICAgIHJldHVybiBlbmNvZGVkQnl0ZWNvZGVJbmRleCB8IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KGlubGluZUNhbGxGcmFtZSk7CiAgICAgfQpAQCAtMjU4LDE0ICsyNTYsMTQgQEAg
cHJpdmF0ZToKICAgICAvLyBGaW5hbGx5IHRoZSBsYXN0IHNfZnJlZUJpdHNBdFRvcCBhcmUgdGhl
IGJ5dGVjb2RlSW5kZXggaWYgaXQgaXMgaW5saW5lCiAgICAgdWludHB0cl90IG1fY29tcG9zaXRl
VmFsdWU7CiAjZWxzZQotICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAgICBCeXRlY29k
ZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKICAgICBJbmxpbmVDYWxsRnJhbWUqIG1faW5saW5lQ2Fs
bEZyYW1lOwogI2VuZGlmCiB9OwogCiBpbmxpbmUgdW5zaWduZWQgQ29kZU9yaWdpbjo6aGFzaCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6SW50SGFzaDx1bnNpZ25lZD46Omhhc2goYnl0ZWNv
ZGVJbmRleCgpKSArCisgICAgcmV0dXJuIFdURjo6SW50SGFzaDx1bnNpZ25lZD46Omhhc2goYnl0
ZWNvZGVJbmRleCgpLmFzQml0cygpKSArCiAgICAgICAgIFdURjo6UHRySGFzaDxJbmxpbmVDYWxs
RnJhbWUqPjo6aGFzaChpbmxpbmVDYWxsRnJhbWUoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCmluZGV4IGIxYTAxZmZhNGQ5
MzQ4ZmVjYjI0Yzk2ODhiYzgwMDUyZjkzODg2YTcuLmE4MmY5MmRmZDU5ZTIyZmUyNzEyYmZhMTVl
ZGE2ZmZkZGEwYWM1NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9ERkdFeGl0UHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0RGR0V4aXRQcm9maWxlLmNwcApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKIHZvaWQgRnJlcXVlbnRFeGl0U2l0ZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogewotICAgIG91dC5wcmludCgiYmMjIiwgbV9ieXRlY29kZU9mZnNldCwgIjog
IiwgbV9raW5kLCAiLyIsIG1faml0VHlwZSwgIi8iLCBtX2lubGluZUtpbmQpOworICAgIG91dC5w
cmludChtX2J5dGVjb2RlSW5kZXgsICI6ICIsIG1fa2luZCwgIi8iLCBtX2ppdFR5cGUsICIvIiwg
bV9pbmxpbmVLaW5kKTsKIH0KIAogRXhpdFByb2ZpbGU6OkV4aXRQcm9maWxlKCkgeyB9CkBAIC03
NSw3ICs3NSw3IEBAIGJvb2wgRXhpdFByb2ZpbGU6OmFkZChDb2RlQmxvY2sqIG93bmVyLCBjb25z
dCBGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQogICAgIHJldHVybiB0cnVlOwogfQogCi1WZWN0b3I8
RnJlcXVlbnRFeGl0U2l0ZT4gRXhpdFByb2ZpbGU6OmV4aXRTaXRlc0Zvcih1bnNpZ25lZCBieXRl
Y29kZUluZGV4KQorVmVjdG9yPEZyZXF1ZW50RXhpdFNpdGU+IEV4aXRQcm9maWxlOjpleGl0U2l0
ZXNGb3IoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIFZlY3RvcjxGcmVxdWVu
dEV4aXRTaXRlPiByZXN1bHQ7CiAgICAgCkBAIC04Myw3ICs4Myw3IEBAIFZlY3RvcjxGcmVxdWVu
dEV4aXRTaXRlPiBFeGl0UHJvZmlsZTo6ZXhpdFNpdGVzRm9yKHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fZnJlcXVlbnRFeGl0U2l0ZXMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICht
X2ZyZXF1ZW50RXhpdFNpdGVzLT5hdChpKS5ieXRlY29kZU9mZnNldCgpID09IGJ5dGVjb2RlSW5k
ZXgpCisgICAgICAgIGlmIChtX2ZyZXF1ZW50RXhpdFNpdGVzLT5hdChpKS5ieXRlY29kZUluZGV4
KCkgPT0gYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9mcmVxdWVu
dEV4aXRTaXRlcy0+YXQoaSkpOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmgKaW5kZXggN2Y2MDE5ZjVhOTNkNzNkMThiOGIx
NjBlOTc2MDdhNmYxNjljMWFjOS4uZjgwNzdiY2M2NDA5YzliYzg1NTFkMGUzZDZhNjMwMDBiZmJk
YjNlYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQ
cm9maWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9m
aWxlLmgKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Y2xhc3MgRnJlcXVlbnRFeGl0U2l0ZSB7CiBwdWJsaWM6CiAgICAgRnJlcXVlbnRFeGl0U2l0ZSgp
Ci0gICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgwKSAvLyAwID0gZW1wdHkgdmFsdWUKKyAgICAg
ICAgOiBtX2J5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgLCBtX2tpbmQo
RXhpdEtpbmRVbnNldCkKICAgICAgICAgLCBtX2ppdFR5cGUoRXhpdEZyb21Bbnl0aGluZykKICAg
ICAgICAgLCBtX2lubGluZUtpbmQoRXhpdEZyb21BbnlJbmxpbmVLaW5kKQpAQCAtNDcsMTUgKzQ3
LDE1IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgRnJlcXVlbnRFeGl0U2l0ZShXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgxKSAv
LyAxID0gZGVsZXRlZCB2YWx1ZQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChXVEY6Okhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSkKICAgICAgICAgLCBtX2tpbmQoRXhpdEtpbmRVbnNldCkKICAgICAg
ICAgLCBtX2ppdFR5cGUoRXhpdEZyb21Bbnl0aGluZykKICAgICAgICAgLCBtX2lubGluZUtpbmQo
RXhpdEZyb21BbnlJbmxpbmVLaW5kKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgZXhwbGljaXQg
RnJlcXVlbnRFeGl0U2l0ZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRXhpdEtpbmQga2luZCwg
RXhpdGluZ0pJVFR5cGUgaml0VHlwZSA9IEV4aXRGcm9tQW55dGhpbmcsIEV4aXRpbmdJbmxpbmVL
aW5kIGlubGluZUtpbmQgPSBFeGl0RnJvbUFueUlubGluZUtpbmQpCi0gICAgICAgIDogbV9ieXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCkKKyAgICBleHBsaWNpdCBGcmVxdWVudEV4aXRTaXRl
KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRXhpdEtpbmQga2luZCwgRXhpdGluZ0pJVFR5
cGUgaml0VHlwZSA9IEV4aXRGcm9tQW55dGhpbmcsIEV4aXRpbmdJbmxpbmVLaW5kIGlubGluZUtp
bmQgPSBFeGl0RnJvbUFueUlubGluZUtpbmQpCisgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5
dGVjb2RlSW5kZXgpCiAgICAgICAgICwgbV9raW5kKGtpbmQpCiAgICAgICAgICwgbV9qaXRUeXBl
KGppdFR5cGUpCiAgICAgICAgICwgbV9pbmxpbmVLaW5kKGlubGluZUtpbmQpCkBAIC02MywxNCAr
NjMsMTQgQEAgcHVibGljOgogICAgICAgICBpZiAobV9raW5kID09IEFyZ3VtZW50c0VzY2FwZWQp
IHsKICAgICAgICAgICAgIC8vIENvdW50IHRoaXMgb25lIGdsb2JhbGx5LiBJdCBkb2Vzbid0IG1h
dHRlciB3aGVyZSBpbiB0aGUgY29kZSBibG9jayB0aGUgYXJndW1lbnRzIGV4Y2FwZWQ7CiAgICAg
ICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGgg
YW55IHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24uCi0gICAgICAgICAgICBtX2J5dGVjb2RlT2Zmc2V0
ID0gMDsKKyAgICAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgLy8gVXNlIHRoaXMgY29uc3RydWN0b3IgaWYgeW91
IHdpc2ggZm9yIHRoZSBleGl0IHNpdGUgdG8gYmUgY291bnRlZCBnbG9iYWxseSB3aXRoaW4gaXRz
CiAgICAgLy8gY29kZSBibG9jay4KICAgICBleHBsaWNpdCBGcmVxdWVudEV4aXRTaXRlKEV4aXRL
aW5kIGtpbmQsIEV4aXRpbmdKSVRUeXBlIGppdFR5cGUgPSBFeGl0RnJvbUFueXRoaW5nLCBFeGl0
aW5nSW5saW5lS2luZCBpbmxpbmVLaW5kID0gRXhpdEZyb21BbnlJbmxpbmVLaW5kKQotICAgICAg
ICA6IG1fYnl0ZWNvZGVPZmZzZXQoMCkKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoQnl0ZWNv
ZGVJbmRleCgwKSkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICAgICAgLCBtX2ppdFR5cGUo
aml0VHlwZSkKICAgICAgICAgLCBtX2lubGluZUtpbmQoaW5saW5lS2luZCkKQEAgLTg0LDcgKzg0
LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmVxdWVudEV4
aXRTaXRlJiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2J5dGVjb2RlT2Zm
c2V0ID09IG90aGVyLm1fYnl0ZWNvZGVPZmZzZXQKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJ
bmRleCA9PSBvdGhlci5tX2J5dGVjb2RlSW5kZXgKICAgICAgICAgICAgICYmIG1fa2luZCA9PSBv
dGhlci5tX2tpbmQKICAgICAgICAgICAgICYmIG1faml0VHlwZSA9PSBvdGhlci5tX2ppdFR5cGUK
ICAgICAgICAgICAgICYmIG1faW5saW5lS2luZCA9PSBvdGhlci5tX2lubGluZUtpbmQ7CkBAIC05
Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHN1YnN1bWVzKGNvbnN0IEZyZXF1
ZW50RXhpdFNpdGUmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVP
ZmZzZXQgIT0gb3RoZXIubV9ieXRlY29kZU9mZnNldCkKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJ
bmRleCAhPSBvdGhlci5tX2J5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGlmIChtX2tpbmQgIT0gb3RoZXIubV9raW5kKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTA3LDEwICsxMDcsMTAgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2J5dGVj
b2RlT2Zmc2V0KSArIG1fa2luZCArIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2ppdFR5cGUpICog
NyArIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2lubGluZUtpbmQpICogMTE7CisgICAgICAgIHJl
dHVybiBtX2J5dGVjb2RlSW5kZXguaGFzaCgpICsgbV9raW5kICsgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG1faml0VHlwZSkgKiA3ICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1faW5saW5lS2luZCkg
KiAxMTsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0OyB9CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CiAgICAgRXhpdEtpbmQga2lu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIEV4aXRpbmdKSVRUeXBlIGppdFR5cGUo
KSBjb25zdCB7IHJldHVybiBtX2ppdFR5cGU7IH0KICAgICBFeGl0aW5nSW5saW5lS2luZCBpbmxp
bmVLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVLaW5kOyB9CkBAIC0xMzEsMTMgKzEzMSwx
MyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX2tpbmQgPT0gRXhpdEtpbmRVbnNldCAmJiBtX2J5dGVj
b2RlT2Zmc2V0OworICAgICAgICByZXR1cm4gbV9raW5kID09IEV4aXRLaW5kVW5zZXQgJiYgbV9i
eXRlY29kZUluZGV4LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICB1bnNp
Z25lZCBtX2J5dGVjb2RlT2Zmc2V0OworICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4
OwogICAgIEV4aXRLaW5kIG1fa2luZDsKICAgICBFeGl0aW5nSklUVHlwZSBtX2ppdFR5cGU7CiAg
ICAgRXhpdGluZ0lubGluZUtpbmQgbV9pbmxpbmVLaW5kOwpAQCAtMTgzLDcgKzE4Myw3IEBAIHB1
YmxpYzoKICAgICAKICAgICAvLyBHZXQgdGhlIGZyZXF1ZW50IGV4aXQgc2l0ZXMgZm9yIGEgYnl0
ZWNvZGUgaW5kZXguIFRoaXMgaXMgTyhuKSwgYW5kIGlzCiAgICAgLy8gbWVhbnQgdG8gb25seSBi
ZSB1c2VkIGZyb20gZGVidWdnaW5nL3Byb2ZpbGluZyBjb2RlLgotICAgIFZlY3RvcjxGcmVxdWVu
dEV4aXRTaXRlPiBleGl0U2l0ZXNGb3IodW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgVmVj
dG9yPEZyZXF1ZW50RXhpdFNpdGU+IGV4aXRTaXRlc0ZvcihCeXRlY29kZUluZGV4KTsKICAgICAK
ICAgICAvLyBUaGlzIGlzIE8obikgYW5kIHNob3VsZCBiZSBjYWxsZWQgb24gbGVzcy1mcmVxdWVu
dGx5IGV4ZWN1dGVkIGNvZGUgcGF0aHMKICAgICAvLyBpbiB0aGUgY29tcGlsZXIuIEl0IHNob3Vs
ZCBiZSBzdHJpY3RseSBjaGVhcGVyIHRoYW4gYnVpbGRpbmcgYQpAQCAtMjIyLDcgKzIyMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGhhc0V4aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUoa2lu
ZCkpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc0V4aXRTaXRlKHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgsIEV4aXRLaW5kIGtpbmQpIGNvbnN0CisgICAgYm9vbCBoYXNFeGl0U2l0ZShCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEV4aXRLaW5kIGtpbmQpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gaGFzRXhpdFNpdGUoRnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBraW5k
KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Rl
ZmVycmVkU291cmNlRHVtcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVm
ZXJyZWRTb3VyY2VEdW1wLmNwcAppbmRleCBhYmE4NDk0ZWVmZDBmOWRmNWQzMDkzYzIxMmYzMmNl
MDgxOWJkMTU2Li5iZjIyMTAyNzVlNTdmYzg3ZjUzNjQyNDAwZTJjZTc0MzQyZjcwNGM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1w
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VE
dW1wLmNwcApAQCAtMzgsNyArMzgsNyBAQCBEZWZlcnJlZFNvdXJjZUR1bXA6OkRlZmVycmVkU291
cmNlRHVtcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKIH0KIAotRGVmZXJyZWRTb3VyY2VEdW1w
OjpEZWZlcnJlZFNvdXJjZUR1bXAoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcm9v
dENvZGVCbG9jaywgSklUVHlwZSByb290SklUVHlwZSwgdW5zaWduZWQgY2FsbGVyQnl0ZWNvZGVJ
bmRleCkKK0RlZmVycmVkU291cmNlRHVtcDo6RGVmZXJyZWRTb3VyY2VEdW1wKENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb2RlQmxvY2sqIHJvb3RDb2RlQmxvY2ssIEpJVFR5cGUgcm9vdEpJVFR5cGUs
IEJ5dGVjb2RlSW5kZXggY2FsbGVyQnl0ZWNvZGVJbmRleCkKICAgICA6IG1fY29kZUJsb2NrKGNv
ZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrKQogICAgICwgbV9yb290Q29kZUJsb2NrKGNvZGVCbG9j
ay0+dm0oKSwgcm9vdENvZGVCbG9jaykKICAgICAsIG1fcm9vdEpJVFR5cGUocm9vdEpJVFR5cGUp
CkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgRGVmZXJyZWRTb3VyY2VEdW1wOjpkdW1wKCkKICAgICBk
YXRhTG9nKCptX2NvZGVCbG9jayk7CiAKICAgICBpZiAoaXNJbmxpbmVkRnJhbWUpCi0gICAgICAg
IGRhdGFMb2coIiBhdCAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZSgqbV9yb290Q29kZUJsb2NrLCBt
X3Jvb3RKSVRUeXBlKSwgIiAiLCAiYmMjIiwgbV9jYWxsZXJCeXRlY29kZUluZGV4KTsKKyAgICAg
ICAgZGF0YUxvZygiIGF0ICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKCptX3Jvb3RDb2RlQmxvY2ss
IG1fcm9vdEpJVFR5cGUpLCAiICIsIG1fY2FsbGVyQnl0ZWNvZGVJbmRleCk7CiAKICAgICBkYXRh
TG9nKCJcbicnJyIpOwogICAgIG1fY29kZUJsb2NrLT5kdW1wU291cmNlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmgKaW5kZXgg
YjVhN2JmMmNmMmRiNmM3YzE5YzhlZTRmYjUwYmJkMDE4YjM0MjEwYS4uZThkMmNhOGQ2ODhjN2Yw
ODMwYjY5MjI3NzQ0MDRhODRkYzQwMWI3NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0RlZmVycmVkU291cmNlRHVtcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9EZWZlcnJlZFNvdXJjZUR1bXAuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFz
cyBEZWZlcnJlZFNvdXJjZUR1bXAgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIERlZmVycmVkU291cmNlRHVtcChDb2RlQmxvY2sqKTsKLSAgICBEZWZlcnJlZFNv
dXJjZUR1bXAoQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiByb290Q29kZUJsb2NrLCBKSVRUeXBlIHJv
b3RKSVRUeXBlLCB1bnNpZ25lZCBjYWxsZXJCeXRlY29kZUluZGV4KTsKKyAgICBEZWZlcnJlZFNv
dXJjZUR1bXAoQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiByb290Q29kZUJsb2NrLCBKSVRUeXBlIHJv
b3RKSVRUeXBlLCBCeXRlY29kZUluZGV4IGNhbGxlckJ5dGVjb2RlSW5kZXgpOwogCiAgICAgdm9p
ZCBkdW1wKCk7CiAKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJpdmF0ZToKICAgICBTdHJvbmc8Q29kZUJs
b2NrPiBtX2NvZGVCbG9jazsKICAgICBTdHJvbmc8Q29kZUJsb2NrPiBtX3Jvb3RDb2RlQmxvY2s7
CiAgICAgSklUVHlwZSBtX3Jvb3RKSVRUeXBlOwotICAgIHVuc2lnbmVkIG1fY2FsbGVyQnl0ZWNv
ZGVJbmRleCB7IFVJTlRfTUFYIH07CisgICAgQnl0ZWNvZGVJbmRleCBtX2NhbGxlckJ5dGVjb2Rl
SW5kZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKaW5kZXggMDczY2UyNzU3
YmJhOWMyYTBhYjZjMTIwZjRkYmEwZGJiZjcxOWJmOC4uOWE4ODQzN2ViM2ZiZjM4MzBhZTcxMzY0
NWQ2Y2ZkMzc5M2U3ZTEyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKQEAgLTMxLDE3ICszMSwxOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogCi10eXBlZGVmIEhh
c2hNYXA8dW5zaWduZWQsIEZhc3RCaXRWZWN0b3IsIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdU
Rjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBCeXRlY29kZVRvQml0
bWFwTWFwOwordHlwZWRlZiBIYXNoTWFwPEJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3I+IEJ5
dGVjb2RlVG9CaXRtYXBNYXA7CiAKIGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBjb25zdCBGYXN0Qml0VmVjdG9y
JiBnZXRMaXZlbmVzcyh1bnNpZ25lZCBieXRlY29kZUluZGV4KSBjb25zdAorICAgIGNvbnN0IEZh
c3RCaXRWZWN0b3ImIGdldExpdmVuZXNzKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX21hcFtieXRlY29kZUluZGV4XTsKKyAgICAgICAg
Ly8gRklYTUU6IFdoYXQgc2hvdWxkIHRoaXMgZG8gd2hlbiB3ZSBoYXZlIGNoZWNrcG9pbnRzPwor
ICAgICAgICByZXR1cm4gbV9tYXBbYnl0ZWNvZGVJbmRleC5vZmZzZXQoKV07CiAgICAgfQogICAg
IAotICAgIGJvb2wgb3BlcmFuZElzTGl2ZShpbnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkgY29uc3QKKyAgICBib29sIG9wZXJhbmRJc0xpdmUoaW50IG9wZXJhbmQsIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBvcGVyYW5k
SXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZl
KGdldExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgpLCBvcGVyYW5kKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKaW5kZXggYmVlYjBl
ZGNlMjk3MDk5MWI0N2ExNzYwNGI1ZDJiYTRmMzZiN2RmYS4uNjIyYjNlNmQwYzZlNTAyMGFjMTBm
OTQ2YzA2NTJjNGI3OGFjZDA4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkU3RhdHVzLmNwcApAQCAtNTIsMTEgKzUyLDExIEBAIGJvb2wgR2V0QnlJZFN0
YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCkKICAgICBy
ZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOwogfQogCi1H
ZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkKQorR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVC
bG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQogewogICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxvY2stPnZtKCk7CiAg
ICAgCi0gICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGJ5dGVjb2RlSW5kZXgpOworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKIAogICAgIFN0cnVj
dHVyZUlEIHN0cnVjdHVyZUlEOwogICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkp
IHsKQEAgLTEwMiw3ICsxMDIsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1
dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZAogICAgIHJldHVy
biBHZXRCeUlkU3RhdHVzKFNpbXBsZSwgZmFsc2UsIEdldEJ5SWRWYXJpYW50KFN0cnVjdHVyZVNl
dChzdHJ1Y3R1cmUpLCBvZmZzZXQpKTsKIH0KIAotR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcg
ZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQor
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6
RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwogCkBAIC0xMzAsNyArMTMwLDcgQEAgR2V0
QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaywgSUNTdGF0dXNNYXAmIG0KICNpZiBFTkFCTEUoREZHX0pJVCkKIEdldEJ5SWRTdGF0dXMg
R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQog
ewotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgo
KTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKTsKICAgICBHZXRCeUlkU3RhdHVzIHJlc3VsdCA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAogICAgICAgICBsb2NrZXIsIHBy
b2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCB1aWQsCiAgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21w
dXRlRXhpdFNpdGVEYXRhKHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKTsKQEAgLTMwMyw3
ICszMDMsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAg
Q29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsCiAgICAg
SUNTdGF0dXNDb250ZXh0U3RhY2smIGljQ29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCA9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgIENhbGxMaW5rU3RhdHVz
OjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
RXhpdFNpdGVEYXRhKHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwogICAgIEV4aXRGbGFn
IGRpZEV4aXQgPSBoYXNCYWRDYWNoZUV4aXRTaXRlKHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5k
ZXgpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3Rh
dHVzLmgKaW5kZXggMzgzZDU4NjBkYjVkNDhiNjcxYjk2NDkxNmU1YTU4NDBhYWQxMWViNS4uMWNj
MGUyMmJjOTU0ZmJlZWQzZTE3MzNhMDMxNGM1YTUyMDUxZjZiZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCkBAIC0xMDMsNyArMTAzLDcgQEAg
cHVibGljOgogICAgICAgICBtX3ZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKICAgICB9CiAgICAg
Ci0gICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1
c01hcCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4
aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKKyAgICBzdGF0aWMgR2V0QnlJ
ZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRl
eCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0
U2l0ZURhdGEpOwogICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoY29uc3QgU3Ry
dWN0dXJlU2V0JiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgCiAgICAgc3RhdGljIEdl
dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVz
TWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGRmZ0NvbnRleHRTdGFjaywg
Q29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CkBAIC0xNTMsNyArMTUzLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwogI2VuZGlmCi0gICAgc3Rh
dGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyAgICBzdGF0aWMgR2V0QnlJ
ZFN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpOwogICAgIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBH
ZXRCeUlkVmFyaWFudCYpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lDU3RhdHVzVXRpbHMuY3BwCmluZGV4IGFkZDJlYjA0NDllMDg1OTY0OGQ5MmQ1NzBhODUz
ZWNlYWJjZmJiYjEuLjhiZWVhYmEwZDVmYTZkMjg3ZmNkZTc3YWJiMzQ3ZTMyZjUwNzQ5MmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c1V0aWxzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNVdGlscy5jcHAK
QEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUV4aXRGbGFnIGhhc0JhZENh
Y2hlRXhpdFNpdGUoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KQorRXhpdEZsYWcgaGFzQmFkQ2FjaGVFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSBwcm9maWxlZEJsb2Nr
LT51bmxpbmtlZENvZGVCbG9jaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JQ1N0YXR1c1V0aWxzLmgKaW5kZXggMDc3Y2JlMWFiYWRmNzJkOWVjYTUxZmZlMGEzNWZiM2M4
NjkyYzc3Ni4uOTgyMGFkOTlmNDVmOTRmZjZkMWM5Y2FmMzg0NmYwNzVhMjYzOTQ5NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNVdGlscy5oCkBAIC03MSw3
ICs3MSw3IEBAIHZvaWQgZmlsdGVySUNTdGF0dXNWYXJpYW50cyhWYXJpYW50VmVjdG9yVHlwZSYg
dmFyaWFudHMsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0CiAgICAgICAgIH0pOwogfQogCi1FeGl0
RmxhZyBoYXNCYWRDYWNoZUV4aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCk7CitFeGl0RmxhZyBoYXNCYWRDYWNoZUV4aXRTaXRlKENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCmlu
ZGV4IGI0NTg4YjU4NTI1OTNkOWVhNzMwZDQxZDFhYjljMzZlMTVmZjE0MmMuLjkyMzcwNTNmYmE2
NjBlNDMyYzQ3MGMxMGQxNjdlNjk1NGZkZjYyZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCkBAIC00Myw3ICs0Myw3IEBAIGJvb2wgSW5C
eUlkU3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IEluQnlJZFZhcmlhbnQmIHZhcmlhbnQpCiB9
CiAKICNpZiBFTkFCTEUoSklUKQotSW5CeUlkU3RhdHVzIEluQnlJZFN0YXR1czo6Y29tcHV0ZUZv
cihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBtYXAsIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnIGRpZEV4aXQpCitJ
bkJ5SWRTdGF0dXMgSW5CeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZyBkaWRFeGl0KQogewogICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKIApAQCAtNjQsNyArNjQsNyBA
QCBJbkJ5SWRTdGF0dXMgSW5CeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUluQnlJ
ZFN0YXR1cyBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
LCBJQ1N0YXR1c01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQorSW5CeUlkU3RhdHVzIEluQnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxv
Y2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICByZXR1cm4gY29tcHV0ZUZv
cihwcm9maWxlZEJsb2NrLCBtYXAsIGJ5dGVjb2RlSW5kZXgsIHVpZCwgaGFzQmFkQ2FjaGVFeGl0
U2l0ZShwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KSk7CiB9CkBAIC03Myw3ICs3Myw3IEBA
IEluQnlJZFN0YXR1cyBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsCiAgICAgSUNTdGF0dXNDb250
ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQogewotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2Fj
aGVFeGl0U2l0ZShwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KTsKICAgICAKICAgICBmb3Ig
KElDU3RhdHVzQ29udGV4dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCmluZGV4IDhhZWI3NjBjNDg5YWEy
NzRlMjkyNDA3MDNmNmQyYjdlN2M4MTMyMjAuLmViNjVhZWEwNmJjNDhjMzgxYTkzNzhjMDA2NzUz
NmVlMjg5ZDM0YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bkJ5SWRTdGF0dXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlk
U3RhdHVzLmgKQEAgLTgwLDggKzgwLDggQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgSW5CeUlkU3RhdHVzIGNv
bXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSAgICBzdGF0aWMgSW5CeUlkU3RhdHVzIGNvbXB1
dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZyk7CisgICAgc3RhdGljIEluQnlJZFN0YXR1
cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAgc3RhdGljIEluQnlJZFN0YXR1cyBjb21wdXRlRm9y
KENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgRXhpdEZsYWcpOwogICAgIHN0YXRpYyBJbkJ5SWRTdGF0dXMgY29tcHV0ZUZvcihD
b2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0
dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAKaW5kZXggZTUzNjFiNjFhMjVmMDBm
NGMzMjliNzk3MmE3MDgzMjJiMTA2ZWY4MS4uM2UzZTY1ZjU5YzUxMzAxZWIyZjQ0YjJkMjMxZWZj
ZWNhOTFlY2NmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
bGluZUNhbGxGcmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
bGluZUNhbGxGcmFtZS5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBJbmxpbmVDYWxsRnJhbWU6
OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNv
bnMKICAgICBvdXQucHJpbnQoYnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKCksICI6PCIsIFJhd1Bv
aW50ZXIoYmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkpKTsKICAgICBpZiAoaXNTdHJpY3RNb2RlKCkp
CiAgICAgICAgIG91dC5wcmludCgiIChTdHJpY3RNb2RlKSIpOwotICAgIG91dC5wcmludCgiLCBi
YyMiLCBkaXJlY3RDYWxsZXIuYnl0ZWNvZGVJbmRleCgpLCAiLCAiLCBzdGF0aWNfY2FzdDxLaW5k
PihraW5kKSk7CisgICAgb3V0LnByaW50KCIsICIsIGRpcmVjdENhbGxlci5ieXRlY29kZUluZGV4
KCksICIsICIsIHN0YXRpY19jYXN0PEtpbmQ+KGtpbmQpKTsKICAgICBpZiAoaXNDbG9zdXJlQ2Fs
bCkKICAgICAgICAgb3V0LnByaW50KCIsIGNsb3N1cmUgY2FsbCIpOwogICAgIGVsc2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcApp
bmRleCBkM2JhOWM5OGFiMGU5ODBmZWIyNzRiMDUyYTkwZjIwY2ZkNjdhZTg2Li5lZDAwZTY5MWRi
NmUyZjRlYWQyNGY5YWY3N2Q3ZTA5OTM5N2M4MTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwCkBAIC00MCw3ICs0MCw3IEBA
IHZvaWQgSW5zdGFuY2VPZlN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBJbnN0YW5jZU9mVmFy
aWFudCYgdmFyaWFudCkKIH0KIAogSW5zdGFuY2VPZlN0YXR1cyBJbnN0YW5jZU9mU3RhdHVzOjpj
b21wdXRlRm9yKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBJQ1N0YXR1c01hcCYgaW5mb01h
cCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSUNT
dGF0dXNNYXAmIGluZm9NYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5oCmluZGV4
IGYwZTIwZDlhZWY1MTRiOTI4ZjUwYzUxOTIyMWFhNjRkZTYzYzllZDguLjY5MzMyNjBjMWZiNmQw
YTYzODI4YjZmYWI5NzBhZWY5ODJhZGViMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuaApAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAg
IHN0YXRpYyBJbnN0YW5jZU9mU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNN
YXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICBzdGF0aWMgSW5zdGFuY2VPZlN0YXR1
cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCk7CiAg
ICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgc3RhdGljIEluc3RhbmNlT2ZTdGF0dXMgY29t
cHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFN0cnVjdHVyZVN0dWJJ
bmZvKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1
Y3Rpb25TdHJlYW0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlv
blN0cmVhbS5oCmluZGV4IDk5YjVhNWE5MDYwMjZjZWNlOGI0ZGQxMDA0NDkyODlkMWZmZTY0Mzgu
LmYxZWIzYmVhOWQyYzhiODJhZjQ3MjIyYTg1ZTU5Mzk3NDgzNDA3OTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oCkBAIC03Nywx
MCArNzcsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIEJhc2VSZWYgeyBtX2luc3Ry
dWN0aW9ucywgbV9pbmRleCArIHB0cigpLT5zaXplKCkgfTsKICAgICAgICAgfQogCi0gICAgICAg
IGlubGluZSBPZmZzZXQgb2Zmc2V0KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG1faW5kZXg7Ci0gICAgICAgIH0KKyAgICAgICAgaW5saW5lIE9mZnNldCBvZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgICAgIGlubGluZSBCeXRlY29kZUluZGV4IGlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gQnl0ZWNvZGVJbmRleChvZmZzZXQoKSk7IH0KIAogICAgICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdAogICAgICAgICB7CkBAIC0xNTIsMTIgKzE1MCwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBpdGVyYXRvciB7IG1faW5zdHJ1Y3Rpb25zLCBtX2luc3Ry
dWN0aW9ucy5zaXplKCkgfTsKICAgICB9CiAKKyAgICBpbmxpbmUgY29uc3QgUmVmIGF0KEJ5dGVj
b2RlSW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4Lm9mZnNldCgpKTsgfQogICAg
IGlubGluZSBjb25zdCBSZWYgYXQoT2Zmc2V0IG9mZnNldCkgY29uc3QKICAgICB7CiAgICAgICAg
IEFTU0VSVChvZmZzZXQgPCBtX2luc3RydWN0aW9ucy5zaXplKCkpOwogICAgICAgICByZXR1cm4g
UmVmIHsgbV9pbnN0cnVjdGlvbnMsIG9mZnNldCB9OwogICAgIH0KIAorCiAgICAgaW5saW5lIHNp
emVfdCBzaXplKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2luc3RydWN0aW9ucy5z
aXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZS5oCmluZGV4IDAxYTNlZTc0MzY2M2U1MGMxNDE2NWZiNjRhMzFi
MjdkMWQyYzJmNWEuLmVjMWY1YzAyOGQ3MzI0MDdlZGFlNjFhMmEwMDkyN2FjMzRjOTQwZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5oCkBAIC0zOSwxOSArMzksMTkgQEAgY2xhc3MgU2NyaXB0RXhlY3V0YWJs
ZTsKIGNsYXNzIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IHsKIHB1YmxpYzoKICAgICBMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgpCi0gICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgwKSAv
LyAwID0gZW1wdHkgdmFsdWUKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoMCkgLy8gMCA9IGVt
cHR5IHZhbHVlCiAgICAgICAgICwgbV9vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigpKSAvLyBub3Qg
YSB2YWxpZCBvcGVyYW5kIGluZGV4IGluIG91ciBjdXJyZW50IHNjaGVtZQogICAgIHsKICAgICB9
CiAgICAgCiAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoV1RGOjpIYXNoVGFibGVEZWxl
dGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoMSkgLy8gMSA9IGRlbGV0
ZWQgdmFsdWUKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoMSkgLy8gMSA9IGRlbGV0ZWQgdmFs
dWUKICAgICAgICAgLCBtX29wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKCkpIC8vIG5vdCBhIHZhbGlk
IG9wZXJhbmQgaW5kZXggaW4gb3VyIGN1cnJlbnQgc2NoZW1lCiAgICAgewogICAgIH0KICAgICAK
LSAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCi0gICAgICAgIDogbV9ieXRlY29kZU9mZnNldChieXRl
Y29kZU9mZnNldCkKKyAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICA6IG1fYnl0
ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3BlcmFuZC5pc1ZhbGlkKCkpOwpAQCAtNjQsMTkgKzY0
LDE5IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVLZXkmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
Ynl0ZWNvZGVPZmZzZXQgPT0gb3RoZXIubV9ieXRlY29kZU9mZnNldAorICAgICAgICByZXR1cm4g
bV9ieXRlY29kZUluZGV4ID09IG90aGVyLm1fYnl0ZWNvZGVJbmRleAogICAgICAgICAgICAgJiYg
bV9vcGVyYW5kID09IG90aGVyLm1fb3BlcmFuZDsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fYnl0ZWNv
ZGVPZmZzZXQpICsgbV9vcGVyYW5kLm9mZnNldCgpOworICAgICAgICByZXR1cm4gbV9ieXRlY29k
ZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5vZmZzZXQoKTsKICAgICB9CiAgICAgCi0gICAgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBjb25zdAorICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoISEqdGhpcyk7Ci0gICAgICAgIHJl
dHVybiBtX2J5dGVjb2RlT2Zmc2V0OworICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Owog
ICAgIH0KIAogICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKCkgY29uc3QKQEAgLTg3LDEwICs4
NywxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gIW1fb3BlcmFuZC5pc1ZhbGlkKCkgJiYgbV9i
eXRlY29kZU9mZnNldDsKKyAgICAgICAgcmV0dXJuICFtX29wZXJhbmQuaXNWYWxpZCgpICYmIG1f
Ynl0ZWNvZGVJbmRleDsKICAgICB9CiBwcml2YXRlOiAKLSAgICB1bnNpZ25lZCBtX2J5dGVjb2Rl
T2Zmc2V0OworICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBtX29wZXJhbmQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKaW5k
ZXggN2UzY2M5NGZhNDYxMTFkY2JhYjBmMjIwOWYwMTk4MjAyM2I1ZjAxMy4uNzEwNGQwMWFlMTFh
ZDNiYWNhMTM0NTViZDFhMzA2YjFiYmQxYmZmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmNwcApAQCAtNDEsNyArNDEsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKICAgICBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlIHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gTGF6eU9wZXJh
bmQ7CiAgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQuY29kZUJsb2NrID0gY29kZUJsb2NrOwotICAg
IHJlc3VsdC51LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0ID0ga2V5LmJ5dGVjb2RlT2Zmc2V0
KCk7CisgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQgPSBrZXkuYnl0ZWNv
ZGVJbmRleCgpOwogICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFu
ZCgpLm9mZnNldCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaAppbmRleCBiNWU4NGIxMzM3ZTNlZjNiNjIzZGQyOTc2NTA3NGNjYTg1N2MyMzgxLi5jZmI4
MzQ3MDZhZjgzNDI3MDI2OGU4ZjJmNmZjOTI5NDJmM2ZiZDBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlLmgKQEAgLTMxLDYgKzMxLDcgQEAKIC8vIHRoZXNlICNpZidzIHdpbGwgZGlzYXBwZWFy
Li4uCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJCeXRlY29kZUluZGV4LmgiCiAj
aW5jbHVkZSAiR1BSSW5mby5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTgzLDEyICs4NCwxNiBA
QCBwcml2YXRlOgogICAgIH07CiAgICAgCiAgICAgS2luZCBtX2tpbmQ7Ci0gICAgdW5pb24gewor
ICAgIHVuaW9uIERhdGEgeworICAgICAgICBEYXRhKCkKKyAgICAgICAgICAgIDogcHJvZmlsZShu
dWxscHRyKQorICAgICAgICB7IH0KKwogICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGU7CiAg
ICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlOwogICAgICAgICBzdHJ1Y3QgewogICAg
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldDsKKyAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQ7CiAg
ICAgICAgICAgICBpbnQgb3BlcmFuZDsKICAgICAgICAgfSBsYXp5T3BlcmFuZDsKICAgICB9IHU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAK
aW5kZXggZWZkZTM3Mzg0NmJmNWIzMTg1ZTJhYzg4M2FlYTAzMGZhNWQ3ODA4ZS4uMzI1MGJlNTE4
YmRkOWRhM2E0N2E0N2YxMzk5ZTU3MzQzNjVlNzE4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcApAQCAtNDcsMTEgKzQ3LDExIEBAIGJv
b2wgUHV0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFy
aWFudCkKICAgICByZXR1cm4gYXBwZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlh
bnQpOwogfQogCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQo
Q29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQorUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJv
bUxMSW50KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxv
Y2stPnZtKCk7CiAgICAgCi0gICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmlu
c3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBw
cm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spOwogCkBAIC05
Miw3ICs5Miw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTElu
dChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkCiB9CiAKICNpZiBFTkFCTEUoSklU
KQotUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcgZGlkRXhpdCwgQ2FsbExpbmtTdGF0dXM6OkV4
aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQorUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0
RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURh
dGEpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xv
Y2spOwogICAgIApAQCAtMjM3LDcgKzIzNyw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvclN0dWJJbmZvKAogCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVN
YXAsIElDU3RhdHVzQ29udGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKLSAgICB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4ID0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgQ2FsbExpbmtTdGF0
dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1
dGVFeGl0U2l0ZURhdGEoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJbmRleCk7CiAgICAgRXhpdEZs
YWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhpdFNpdGUoYmFzZWxpbmVCbG9jaywgYnl0ZWNvZGVJ
bmRleCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5oCmluZGV4IDkyYjFiMWEzNzJjYjZhZjg1MmY4YjE0ZTYwNmVjYWFiODM5OTYxNzUuLmIwZGQ5
ZjEzOTlhOGJlNzQxZjQ4YzMyNzAzYjA4MjIyODU0YzE5OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaApAQCAtOTMsNyArOTMsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOwogICAgIH0KICAgICAKLSAg
ICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFw
JiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZs
YWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOworICAgIHN0YXRpYyBQdXRCeUlkU3Rh
dHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRlY29kZUluZGV4LCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRl
RGF0YSk7CiAgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihKU0dsb2JhbE9iamVj
dCosIGNvbnN0IFN0cnVjdHVyZVNldCYsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIGJvb2wgaXNE
aXJlY3QpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBiYXNlbGluZUJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsIElDU3RhdHVzQ29u
dGV4dFN0YWNrJiBjb250ZXh0U3RhY2ssIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCwKICAgICAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CiAjZW5k
aWYKLSAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayos
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAgIHN0
YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJ
bmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgCiAgICAgYm9vbCBhcHBlbmRWYXJp
YW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAppbmRleCA1ODI2NGIxNGFk
MTBiN2NkMTY3NTE1YWMxMzljOWRiMzU0Y2ZjODBjLi5kN2IzYjY0MTZmNmVkNTYwOTUxZGY5ODMw
NzQ1MzFjYWI0Njg4YWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKQEAgLTQwLDggKzQwLDcgQEAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAogU3RydWN0dXJlU3R1YkluZm86OlN0cnVj
dHVyZVN0dWJJbmZvKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKLSAgICA6IGNhbGxTaXRlSW5kZXgo
VUlOVF9NQVgpCi0gICAgLCBhY2Nlc3NUeXBlKGFjY2Vzc1R5cGUpCisgICAgOiBhY2Nlc3NUeXBl
KGFjY2Vzc1R5cGUpCiAgICAgLCBjYWNoZVR5cGUoQ2FjaGVUeXBlOjpVbnNldCkKICAgICAsIGNv
dW50ZG93bigxKSAvLyBGb3IgYSB0b3RhbGx5IGNsZWFyIHN0dWIsIHdlJ2xsIHBhdGNoIGl0IGFm
dGVyIHRoZSBmaXJzdCBleGVjdXRpb24uCiAgICAgLCByZXBhdGNoQ291bnQoMCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmlu
ZGV4IGIyNzE2YmZiNGJkZWZkMjA4MWIxNWY2YTI3MjIxOTRjMjk5MWYyM2QuLjIzNGZhNTc3YzVh
ZjBhMTIxNmM3YjRkNmQwNDQ3ZDBiY2Y4ZDRjNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAtMTExLDE1ICsxMTEs
MTUgQEAgc2l6ZV90IFVubGlua2VkQ29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2Vs
bCwgVk0mIHZtKQogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwsIHZtKSArIGV4
dHJhU2l6ZTsKIH0KIAotaW50IFVubGlua2VkQ29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNv
ZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCitpbnQgVW5saW5rZWRDb2RlQmxvY2s6
OmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkK
IHsKLSAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwor
ICAgIEFTU0VSVChieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
KTsKICAgICBpbnQgZGl2b3QgeyAwIH07CiAgICAgaW50IHN0YXJ0T2Zmc2V0IHsgMCB9OwogICAg
IGludCBlbmRPZmZzZXQgeyAwIH07CiAgICAgdW5zaWduZWQgbGluZSB7IDAgfTsKICAgICB1bnNp
Z25lZCBjb2x1bW4geyAwIH07Ci0gICAgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1
bW4pOworICAgIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCwg
ZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CiAgICAgcmV0dXJu
IGxpbmU7CiB9CiAKQEAgLTE3OSwxMCArMTc5LDEwIEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6
OmR1bXBFeHByZXNzaW9uUmFuZ2VJbmZvKCkKIH0KICNlbmRpZgogCi12b2lkIFVubGlua2VkQ29k
ZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCwKK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVj
b2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LAogICAgIGludCYgZGl2b3QsIGlu
dCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQm
IGNvbHVtbikgY29uc3QKIHsKLSAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlv
bnMoKS5zaXplKCkpOworICAgIEFTU0VSVChieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpKTsKIAogICAgIGlmICghbV9leHByZXNzaW9uSW5mby5zaXplKCkpIHsK
ICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgVW5saW5r
ZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0CiAgICAgaW50IGhpZ2ggPSBleHByZXNzaW9uSW5mby5zaXplKCk7CiAgICAg
d2hpbGUgKGxvdyA8IGhpZ2gpIHsKICAgICAgICAgaW50IG1pZCA9IGxvdyArIChoaWdoIC0gbG93
KSAvIDI7Ci0gICAgICAgIGlmIChleHByZXNzaW9uSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0
IDw9IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICBpZiAoZXhwcmVzc2lvbkluZm9bbWlkXS5pbnN0
cnVjdGlvbk9mZnNldCA8PSBieXRlY29kZUluZGV4Lm9mZnNldCgpKQogICAgICAgICAgICAgbG93
ID0gbWlkICsgMTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaGlnaCA9IG1pZDsKQEAgLTMy
NSw5ICszMjUsOSBAQCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgVW5saW5rZWRDb2RlQmxvY2s6
Omluc3RydWN0aW9ucygpIGNvbnN0CiAgICAgcmV0dXJuICptX2luc3RydWN0aW9uczsKIH0KIAot
VW5saW5rZWRIYW5kbGVySW5mbyogVW5saW5rZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29k
ZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVk
SGFuZGxlcikKK1VubGlua2VkSGFuZGxlckluZm8qIFVubGlua2VkQ29kZUJsb2NrOjpoYW5kbGVy
Rm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFJlcXVpcmVkSGFu
ZGxlciByZXF1aXJlZEhhbmRsZXIpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZXJGb3JJbmRleChieXRl
Y29kZU9mZnNldCwgcmVxdWlyZWRIYW5kbGVyKTsKKyAgICByZXR1cm4gaGFuZGxlckZvckluZGV4
KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCksIHJlcXVpcmVkSGFuZGxlcik7CiB9CiAKIFVubGlua2Vk
SGFuZGxlckluZm8qIFVubGlua2VkQ29kZUJsb2NrOjpoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQg
aW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZEhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4IDAwMDJjM2Vh
MGI0YmI2NGZjYjlhNmFmOTEyNjVmZjBhMjg0Nzc3MWUuLjFiYTkwN2ZkNzg2ZjM0YjgwY2ZlYTVk
M2FlNDBmZmIxOGM1Y2VjZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC0yMTcsNyArMjE3LDcgQEAgcHVibGljOgogICAg
IHVuc2lnbmVkIGp1bXBUYXJnZXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJn
ZXRzW2luZGV4XTsgfQogICAgIHVuc2lnbmVkIGxhc3RKdW1wVGFyZ2V0KCkgY29uc3QgeyByZXR1
cm4gbV9qdW1wVGFyZ2V0cy5sYXN0KCk7IH0KIAotICAgIFVubGlua2VkSGFuZGxlckluZm8qIGhh
bmRsZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRI
YW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKKyAgICBVbmxpbmtlZEhhbmRs
ZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4LCBSZXF1aXJlZEhh
bmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwogICAgIFVubGlua2VkSGFuZGxl
ckluZm8qIGhhbmRsZXJGb3JJbmRleCh1bnNpZ25lZCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWly
ZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKIAogICAgIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX2lzQnVpbHRpbkZ1bmN0aW9uOyB9CkBAIC0yNzksOSArMjc5LDkgQEAg
cHVibGljOgogCiAgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURh
dGEuZ2V0KCk7IH0KIAotICAgIGludCBsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIGludCBsaW5lTnVtYmVyRm9yQnl0ZWNvZGVJbmRleChC
eXRlY29kZUluZGV4KTsKIAotICAgIHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZz
ZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsCisgICAgdm9pZCBleHByZXNz
aW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgsIGludCYgZGl2b3QsCiAgICAg
ICAgIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5z
aWduZWQmIGNvbHVtbikgY29uc3Q7CiAKICAgICBib29sIHR5cGVQcm9maWxlckV4cHJlc3Npb25J
bmZvRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkJiBz
dGFydERpdm90LCB1bnNpZ25lZCYgZW5kRGl2b3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCmluZGV4IDA1YjA5YmU3NTc0MmI1ZTIzOTcxYWY3YTll
ZTRkMTNjN2Y5YjdhNTAuLmJiYjhhNGIyNDUzMTA0MDNhN2ZjZWYyYjIxZTExODMzZWZiOTAzNjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKQEAg
LTE2MSwxOSArMTYxLDE5IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9m
aWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPiB7CiAvLyBUaGlzIGlzIGEgbWluaSB2YWx1ZSBw
cm9maWxlIHRvIGNhdGNoIHBhdGhvbG9naWVzLiBJdCBpcyBhIGNvdW50ZXIgdGhhdCBnZXRzCiAv
LyBpbmNyZW1lbnRlZCB3aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCBvbiBhbnkgaW5zdHJ1Y3Rp
b24uCiBzdHJ1Y3QgUmFyZUNhc2VQcm9maWxlIHsKLSAgICBSYXJlQ2FzZVByb2ZpbGUoaW50IGJ5
dGVjb2RlT2Zmc2V0KQotICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQp
CisgICAgUmFyZUNhc2VQcm9maWxlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAg
ICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgLCBtX2NvdW50ZXIo
MCkKICAgICB7CiAgICAgfQogICAgIAotICAgIGludCBtX2J5dGVjb2RlT2Zmc2V0OworICAgIEJ5
dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwogICAgIHVpbnQzMl90IG1fY291bnRlcjsKIH07
CiAKLWlubGluZSBpbnQgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQoUmFyZUNhc2VQ
cm9maWxlKiByYXJlQ2FzZVByb2ZpbGUpCitpbmxpbmUgQnl0ZWNvZGVJbmRleCBnZXRSYXJlQ2Fz
ZVByb2ZpbGVCeXRlY29kZUluZGV4KFJhcmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQcm9maWxlKQog
ewotICAgIHJldHVybiByYXJlQ2FzZVByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgcmV0
dXJuIHJhcmVDYXNlUHJvZmlsZS0+bV9ieXRlY29kZUluZGV4OwogfQogCiBzdHJ1Y3QgVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZCA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApp
bmRleCBlNzkxNGFhNDdjNWVlOWE5ODNkNzU5ZmRkNmZhYWI2Y2NhMGIzZjIwLi4xNTRiZDNjZmJj
YzI5YzJjZTc0OGJlZGY3N2U2MWFjNTlmYmE3M2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtNTA0
OSw3ICs1MDQ5LDcgQEAgdm9pZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrKiBjb2QKICAgICAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKIAogICAgICAgICBBU1NFUlQob3Bj
b2RlSUQgIT0gb3BfZW50ZXIpOwotICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0
KGNvZGVCbG9jaywgb3Bjb2RlSUQsIGluc3RydWN0aW9uLnB0cigpLCBbJl0gKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKSB7CisgICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleChjb2Rl
QmxvY2ssIG9wY29kZUlELCBpbnN0cnVjdGlvbi5wdHIoKSwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkgewogICAgICAgICAgICAgaWYgKGxvY2FsKCktPnZpcnR1YWxSZWdpc3RlcigpID09
IG9wZXJhbmQpCiAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwogICAgICAgICB9KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFt
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUu
Y3BwCmluZGV4IDJhZTBiMDcyOWZhZGJhY2EyYmM0MjczNWZiY2NlMGUxZDY2YWU4MmUuLjJjZTcy
ZThjMmFmYWNjYzA5Y2YwNTI0YTgzMDUyZTBkN2UzNGJjNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcApAQCAtMjk5LDkg
KzI5OSw5IEBAIFRleHRQb3NpdGlvbiBEZWJ1Z2dlckNhbGxGcmFtZTo6Y3VycmVudFBvc2l0aW9u
KFZNJiB2bSkKIAogICAgIGlmIChpc1RhaWxEZWxldGVkKCkpIHsKICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBtX3NoYWRvd0NoaWNrZW5GcmFtZS5jb2RlQmxvY2s7Ci0gICAgICAgIGlm
IChPcHRpb25hbDx1bnNpZ25lZD4gYnl0ZWNvZGVPZmZzZXQgPSBjb2RlQmxvY2stPmJ5dGVjb2Rl
T2Zmc2V0RnJvbUNhbGxTaXRlSW5kZXgobV9zaGFkb3dDaGlja2VuRnJhbWUuY2FsbFNpdGVJbmRl
eCkpIHsKLSAgICAgICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJv
bU9uZUJhc2VkSW50KGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KCpieXRl
Y29kZU9mZnNldCkpLAotICAgICAgICAgICAgICAgIE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNl
ZEludChjb2RlQmxvY2stPmNvbHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KCpieXRlY29kZU9m
ZnNldCkpKTsKKyAgICAgICAgaWYgKE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IGJ5dGVjb2RlSW5k
ZXggPSBjb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXhGcm9tQ2FsbFNpdGVJbmRleChtX3NoYWRvd0No
aWNrZW5GcmFtZS5jYWxsU2l0ZUluZGV4KSkgeworICAgICAgICAgICAgcmV0dXJuIFRleHRQb3Np
dGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29kZUJsb2NrLT5saW5lTnVtYmVy
Rm9yQnl0ZWNvZGVJbmRleCgqYnl0ZWNvZGVJbmRleCkpLAorICAgICAgICAgICAgICAgIE9yZGlu
YWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChjb2RlQmxvY2stPmNvbHVtbk51bWJlckZvckJ5dGVj
b2RlSW5kZXgoKmJ5dGVjb2RlSW5kZXgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCmluZGV4IDFkZGM2MmUzMzU3M2Fk
YzIzZTRiZWZlZjU0OGIyYWNhM2NlMjAxYTguLjhjYjA5NjI3NmYxMzQ5OWRiMWQ2NmMzMjVjNDZk
ZDUzOWI4ZDQ4MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmNwcApAQCAtMzIsOCArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKLUJhc2ljQmxvY2s6OkJhc2ljQmxvY2soCi0gICAgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbiwg
dW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIGZsb2F0IGV4ZWN1dGlv
bkNvdW50KQorQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVn
aW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCBmbG9hdCBleGVj
dXRpb25Db3VudCkKICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKICAgICAsIGlu
ZGV4KE5vQmxvY2spCiAgICAgLCBjZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQoU3RydWN0
dXJlc0FyZVdhdGNoZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5o
CmluZGV4IDRjNThjOWM1ZTc4NGY4NWQ5ODI4MTU5ZmJmMGJkZDQ3MTNjYzlhYmEuLjI2YTMwNjcy
YjI1ZTliODYwZmNkYTA5MTQ0ZDY2MzExMzA2NjRhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCkBAIC00Niw3ICs0Niw3IEBAIHR5cGVkZWYgVmVjdG9yPE5v
ZGUqLCA4PiBCbG9ja05vZGVMaXN0OwogCiBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8
QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxvY2soCi0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
QmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLAorICAgICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5z
aWduZWQgbnVtTG9jYWxzLAogICAgICAgICBmbG9hdCBleGVjdXRpb25Db3VudCk7CiAgICAgfkJh
c2ljQmxvY2soKTsKICAgICAKQEAgLTE3OCw3ICsxNzgsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6
IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIAogICAgIC8vIFRoaXMgdmFsdWUgaXMgdXNl
ZCBpbnRlcm5hbGx5IGZvciBibG9jayBsaW5raW5nIGFuZCBPU1IgZW50cnkuIEl0IGlzIG1vc3Rs
eSBtZWFuaW5nbGVzcwogICAgIC8vIGZvciBvdGhlciBwdXJwb3NlcyBkdWUgdG8gaW5saW5pbmcu
Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbjsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
QmVnaW47CiAgICAgCiAgICAgQmxvY2tJbmRleCBpbmRleDsKIApAQCAtMjU5LDE0ICsyNTksMTQg
QEAgcHJpdmF0ZToKIAogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayo+IEJsb2NrTGlzdDsKICAg
ICAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKEJhc2lj
QmxvY2sqKiBiYXNpY0Jsb2NrKQorc3RhdGljIGlubGluZSBCeXRlY29kZUluZGV4IGdldEJ5dGVj
b2RlQmVnaW5Gb3JCbG9jayhCYXNpY0Jsb2NrKiogYmFzaWNCbG9jaykKIHsKICAgICByZXR1cm4g
KCpiYXNpY0Jsb2NrKS0+Ynl0ZWNvZGVCZWdpbjsKIH0KIAotc3RhdGljIGlubGluZSBCYXNpY0Js
b2NrKiBibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIGxpbmtpbmdU
YXJnZXRzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKQorc3RhdGljIGlubGluZSBCYXNpY0Jsb2Nr
KiBibG9ja0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPEJhc2ljQmxvY2sqPiYgbGlua2luZ1Rhcmdl
dHMsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbikKIHsKLSAgICByZXR1cm4gKmJpbmFyeVNl
YXJjaDxCYXNpY0Jsb2NrKiwgdW5zaWduZWQ+KGxpbmtpbmdUYXJnZXRzLCBsaW5raW5nVGFyZ2V0
cy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIGdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayk7CisgICAg
cmV0dXJuICpiaW5hcnlTZWFyY2g8QmFzaWNCbG9jayosIEJ5dGVjb2RlSW5kZXg+KGxpbmtpbmdU
YXJnZXRzLCBsaW5raW5nVGFyZ2V0cy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIGdldEJ5dGVjb2Rl
QmVnaW5Gb3JCbG9jayk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKaW5kZXgg
ZmJjMmRiNDY1OWMzOWIxNGRiNGEwZTg0NDEzYTk1NTQ3YTVhZGFjZC4uNzUwOGUyMTlkYzdjNTgz
ZGI5ZWE4ZmNlNjQ2ODU4OTk5ZTA0NjBmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKQEAgLTUxLDExICs1MSw3IEBAIHZvaWQg
QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgsIFJlZjxCYXNpY0Jsb2NrPiYm
IGJsb2NrKQogCiBCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBp
bmRleCwgZmxvYXQgZXhlY3V0aW9uQ291bnQpCiB7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2Nr
ID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKAotICAgICAgICBVSU5UX01BWCwKLSAgICAgICAg
bV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCi0g
ICAgICAgIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fscygp
LAotICAgICAgICBleGVjdXRpb25Db3VudCkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9
IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fZ3JhcGguYmxvY2so
MCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2dyYXBoLmJsb2NrKDAp
LT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgZXhlY3V0aW9uQ291bnQpKTsKICAg
ICBibG9jay0+aXNSZWFjaGFibGUgPSB0cnVlOwogICAgIGF1dG8qIHJlc3VsdCA9IGJsb2NrLnB0
cigpOwogICAgIGluc2VydChpbmRleCwgV1RGTW92ZShibG9jaykpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCA2NjEwMTNhODc3NzQ0
Y2NlYzhiYzMzNjE3ZmIwYjlhMDk3OTUyNjA1Li4yMjM0NDVjMmQ5NDU4MDdiZmNiODE5YWVmMjUx
N2Y4NTBlMWUzNDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcApAQCAtMTQ4LDEwICsxNDgsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBUaGlz
IGlzIHVzZWQgbW9zdCBub3RhYmx5IHdoZW4gZG9pbmcgcG9seXZhcmlhbnQgaW5saW5pbmcgKGl0
IHJlcXVpcmVzIGEgZmFpciBiaXQgb2YgY29udHJvbC1mbG93IHdpdGggbm8gYnl0ZWNvZGUgYW5h
bG9nKS4KICAgICAvLyBJdCBpcyBhbHNvIHVzZWQgd2hlbiBkb2luZyBhbiBlYXJseSByZXR1cm4g
ZnJvbSBhbiBpbmxpbmVkIGNhbGxlZTogaXQgaXMgZWFzaWVyIHRvIGZpeCB0aGUgYnl0ZWNvZGUg
aW5kZXggbGF0ZXIgb24gaWYgbmVlZGVkCiAgICAgLy8gdGhhbiB0byBtb3ZlIHRoZSByaWdodCBp
bmRleCBhbGwgdGhlIHdheSB0byB0aGUgdHJlYXRtZW50IG9mIG9wX3JldC4KLSAgICBCYXNpY0Js
b2NrKiBhbGxvY2F0ZVRhcmdldGFibGVCbG9jayh1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAg
ICBCYXNpY0Jsb2NrKiBhbGxvY2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4KTsKICAg
ICBCYXNpY0Jsb2NrKiBhbGxvY2F0ZVVudGFyZ2V0YWJsZUJsb2NrKCk7CiAgICAgLy8gQW4gdW50
YXJnZXRhYmxlIGJsb2NrIGNhbiBiZSBnaXZlbiBhIGJ5dGVjb2RlSW5kZXggdG8gYmUgbGF0ZXIg
bWFuYWdlZCBieSBsaW5rQmxvY2ssIGJ1dCBvbmx5IG9uY2UsIGFuZCBpdCBjYW4gbmV2ZXIgZ28g
aW4gdGhlIG90aGVyIGRpcmVjdGlvbgotICAgIHZvaWQgbWFrZUJsb2NrVGFyZ2V0YWJsZShCYXNp
Y0Jsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgdm9pZCBtYWtlQmxvY2tUYXJn
ZXRhYmxlKEJhc2ljQmxvY2sqLCBCeXRlY29kZUluZGV4KTsKICAgICB2b2lkIGFkZEp1bXBUbyhC
YXNpY0Jsb2NrKik7CiAgICAgdm9pZCBhZGRKdW1wVG8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7
CiAgICAgLy8gSGFuZGxlIGNhbGxzLiBUaGlzIHJlc29sdmVzIGlzc3VlcyBzdXJyb3VuZGluZyBp
bmxpbmluZyBhbmQgaW50cmluc2ljcy4KQEAgLTE3NCw4ICsxNzQsOCBAQCBwcml2YXRlOgogICAg
IGJvb2wgaGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNl
dCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50
c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVudHNPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5s
aW5lQ2FsbEZyYW1lOjpLaW5kKTsKICAgICB1bnNpZ25lZCBnZXRJbmxpbmluZ0JhbGFuY2UoY29u
c3QgQ2FsbExpbmtTdGF0dXMmLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBlbnVtIGNs
YXNzIENhbGxPcHRpbWl6YXRpb25SZXN1bHQgeyBPcHRpbWl6ZWRUb0p1bXAsIElubGluZWQsIERp
ZE5vdGhpbmcgfTsKLSAgICBDYWxsT3B0aW1pemF0aW9uUmVzdWx0IGhhbmRsZUNhbGxWYXJpYW50
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYWxsVmFyaWFu
dCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNh
bGxGcmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGlu
aW5nQmFsYW5jZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uQmxvY2ssIGJvb2wgbmVlZHNUb0No
ZWNrQ2FsbGVlKTsKLSAgICBDYWxsT3B0aW1pemF0aW9uUmVzdWx0IGhhbmRsZUlubGluaW5nKE5v
ZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBjb25zdCBDYWxsTGlu
a1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVu
dCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBO
b2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbik7CisgICAgQ2FsbE9wdGltaXphdGlvblJlc3VsdCBoYW5kbGVDYWxsVmFyaWFudChO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2FsbFZhcmlhbnQs
IGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBCeXRlY29kZUluZGV4IG5leHRJbmRleCwgSW5saW5l
Q2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5s
aW5pbmdCYWxhbmNlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb25CbG9jaywgYm9vbCBuZWVkc1Rv
Q2hlY2tDYWxsZWUpOworICAgIENhbGxPcHRpbWl6YXRpb25SZXN1bHQgaGFuZGxlSW5saW5pbmco
Tm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIGNvbnN0IENhbGxM
aW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3Vt
ZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIEJ5dGVjb2RlSW5kZXggbmV4dElu
ZGV4LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAg
ICB2b2lkIGlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBCYXNpY0Jsb2NrKiBjb250aW51
YXRpb25CbG9jaywgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICAvLyBI
YW5kbGUgaW50cmluc2ljIGZ1bmN0aW9ucy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBm
YWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KQEAgLTU2Nyw3ICs1NjcsNyBAQCBwcml2
YXRlOgogICAgIHsKICAgICAgICAgb3JpZ2luLndhbGtVcElubGluZVN0YWNrKAogICAgICAgICAg
ICAgWyZdIChDb2RlT3JpZ2luIG9yaWdpbikgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXggPSBvcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAg
ICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBvcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgZmx1c2hJbXBsKGlubGluZUNhbGxGcmFt
ZSwgYWRkRmx1c2hEaXJlY3QpOwogCkBAIC02NDIsMTEgKzY0MiwxMSBAQCBwcml2YXRlOgogICAg
IAogICAgIHZvaWQgZmx1c2hJZlRlcm1pbmFsKFN3aXRjaERhdGEmIGRhdGEpCiAgICAgewotICAg
ICAgICBpZiAoZGF0YS5mYWxsVGhyb3VnaC5ieXRlY29kZUluZGV4KCkgPiBtX2N1cnJlbnRJbmRl
eCkKKyAgICAgICAgaWYgKGRhdGEuZmFsbFRocm91Z2guYnl0ZWNvZGVJbmRleCgpID4gbV9jdXJy
ZW50SW5kZXgub2Zmc2V0KCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykgewotICAgICAgICAg
ICAgaWYgKGRhdGEuY2FzZXNbaV0udGFyZ2V0LmJ5dGVjb2RlSW5kZXgoKSA+IG1fY3VycmVudElu
ZGV4KQorICAgICAgICAgICAgaWYgKGRhdGEuY2FzZXNbaV0udGFyZ2V0LmJ5dGVjb2RlSW5kZXgo
KSA+IG1fY3VycmVudEluZGV4Lm9mZnNldCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTcwOSw3ICs3MDksNyBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgYnJhbmNoZXMgb3JpZ2luYXRpbmcgZnJvbSBieXRlY29k
ZSBhbHdheXMgaGF2ZSBhIGZhbGwtdGhyb3VnaC4gV2UKICAgICAgICAgLy8gdXNlIHRoaXMgYXNz
dW1wdGlvbiB0byBhdm9pZCBjaGVja2luZyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRlcm1pbmFsIGJs
b2Nrcy4KLSAgICAgICAgQVNTRVJUKCh0YWtlbiA+IG1fY3VycmVudEluZGV4KSB8fCAobm90VGFr
ZW4gPiBtX2N1cnJlbnRJbmRleCkpOworICAgICAgICBBU1NFUlQoKHRha2VuID4gbV9jdXJyZW50
SW5kZXgub2Zmc2V0KCkpIHx8IChub3RUYWtlbiA+IG1fY3VycmVudEluZGV4Lm9mZnNldCgpKSk7
CiAgICAgICAgIEJyYW5jaERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fYnJhbmNoRGF0YS5hZGQoKTsK
ICAgICAgICAgKmRhdGEgPSBCcmFuY2hEYXRhOjp3aXRoQnl0ZWNvZGVJbmRpY2VzKHRha2VuLCBu
b3RUYWtlbik7CiAgICAgICAgIHJldHVybiBkYXRhOwpAQCAtODM0LDE0ICs4MzQsMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIG9iamVjdE5vZGU7CiAgICAgfQogICAgIAotICAgIFNwZWN1
bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCh1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KQorICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdChCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAgICBhdXRvIGdldFZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25Gcm9tRm9yQ29kZUJsb2NrQW5kQnl0ZWNvZGVPZmZzZXQgPSBbJl0gKENv
ZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQogICAgICAg
ICB7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uOwogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5t
X2xvY2spOwotICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSBjb2RlQmxvY2stPnZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChsb2NrZXIsIGNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpKTsKKyAgICAgICAgICAgICAgICBwcmVkaWN0aW9uID0gY29kZUJsb2NrLT52YWx1
ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleChsb2NrZXIsIGNvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGF1dG8qIGZ1enplckFn
ZW50ID0gbV92bS0+ZnV6emVyQWdlbnQoKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShmdXp6
ZXJBZ2VudCkpCkBAIC04NjAsNyArODYwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gY2hhaW4g
YW5kIHVzZSBpdHMgcHJlZGljdGlvbi4gSWYgd2Ugb25seSBoYXZlCiAgICAgICAgIC8vIGlubGlu
ZWQgdGFpbCBjYWxsIGZyYW1lcywgd2UgdXNlIFNwZWNGdWxsVG9wCiAgICAgICAgIC8vIHRvIGF2
b2lkIGEgc3B1cmlvdXMgT1NSIGV4aXQuCi0gICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICBhdXRvIGluc3RydWN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsK
ICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKIAog
ICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CkBAIC04OTQsNyArODk0LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIFNwZWNOb25lOwogICAgIH0KIAotICAgIFNwZWN1bGF0ZWRUeXBlIGdl
dFByZWRpY3Rpb24odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICBTcGVjdWxhdGVkVHlwZSBn
ZXRQcmVkaWN0aW9uKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICB7CiAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQo
Ynl0ZWNvZGVJbmRleCk7CiAKQEAgLTkyMCw3ICs5MjAsNyBAQCBwcml2YXRlOgogICAgIEFycmF5
TW9kZSBnZXRBcnJheU1vZGUoQXJyYXk6OkFjdGlvbiBhY3Rpb24pCiAgICAgewogICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jazsK
LSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY29kZUJsb2NrLT5nZXRBcnJheVByb2Zp
bGUoY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChtX2N1cnJlbnRJbnN0cnVjdGlvbikpOworICAg
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjb2RlQmxvY2stPmdldEFycmF5UHJvZmlsZShj
b2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5zdHJ1Y3Rpb24pKTsKICAgICAgICAg
cmV0dXJuIGdldEFycmF5TW9kZSgqcHJvZmlsZSwgYWN0aW9uKTsKICAgICB9CiAKQEAgLTk0Myw3
ICs5NDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAKICAgICAgICAg
ewotICAgICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3Vy
cmVudEluZGV4KTsKKyAgICAgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZUlu
ZGV4KG1fY3VycmVudEluZGV4KTsKICAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUpIHsKICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNl
IEFyaXRoQWRkOgpAQCAtOTU2LDcgKzk1Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChhcml0aFByb2ZpbGUtPmRpZE9ic2VydmVCaWdJbnQoKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU1heUhhdmVCaWdJbnRSZXN1bHQpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAg
ICAgIGNhc2UgVmFsdWVNdWw6CiAgICAgICAgICAgICAgICAgY2FzZSBBcml0aE11bDogewogICAg
ICAgICAgICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLT5kaWRPYnNlcnZlSW50NTJPdmVyZmxv
dygpKQpAQCAtOTg3LDcgKzk4Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlIYXZlQmlnSW50UmVzdWx0KTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMTAyOCwxMyArMTAyOCwxMyBAQCBwcml2YXRlOgogICAgICAgICAv
LyBjYXJlIGFib3V0IHdoZW4gdGhlIG91dGNvbWUgb2YgdGhlIGRpdmlzaW9uIGlzIG5vdCBhbiBp
bnRlZ2VyLCB3aGljaAogICAgICAgICAvLyBpcyB3aGF0IHRoZSBzcGVjaWFsIGZhc3QgY2FzZSBj
b3VudGVyIHRlbGxzIHVzLgogICAgICAgICAKLSAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFrZVNwZWNpYWxGYXN0Q2FzZShtX2N1cnJlbnRJbmRl
eCkpCisgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3Vs
ZFRha2VTcGVjaWFsQXJpdGhGYXN0Q2FzZShtX2N1cnJlbnRJbmRleCkpCiAgICAgICAgICAgICBy
ZXR1cm4gbm9kZTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJdCBtaWdodCBiZSBwb3Nz
aWJsZSB0byBtYWtlIHRoaXMgbW9yZSBncmFudWxhci4KICAgICAgICAgbm9kZS0+bWVyZ2VGbGFn
cyhOb2RlTWF5T3ZlcmZsb3dJbnQzMkluQmFzZWxpbmUgfCBOb2RlTWF5TmVnWmVyb0luQmFzZWxp
bmUpOwogICAgICAgICAKLSAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KG1fY3VycmVudEluZGV4KTsKKyAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVj
b2RlSW5kZXgobV9jdXJyZW50SW5kZXgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlLT5kaWRP
YnNlcnZlQmlnSW50KCkpCiAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlIYXZl
QmlnSW50UmVzdWx0KTsKIApAQCAtMTA2MSw3ICsxMDYxLDcgQEAgcHJpdmF0ZToKICAgICAvLyBU
aGUgY3VycmVudCBibG9jayBiZWluZyBnZW5lcmF0ZWQuCiAgICAgQmFzaWNCbG9jayogbV9jdXJy
ZW50QmxvY2s7CiAgICAgLy8gVGhlIGJ5dGVjb2RlIGluZGV4IG9mIHRoZSBjdXJyZW50IGluc3Ry
dWN0aW9uIGJlaW5nIGdlbmVyYXRlZC4KLSAgICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRleDsKKyAg
ICBCeXRlY29kZUluZGV4IG1fY3VycmVudEluZGV4OwogICAgIC8vIFRoZSBzZW1hbnRpYyBvcmln
aW4gb2YgdGhlIGN1cnJlbnQgbm9kZSBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBJbmRl
eC4KICAgICBDb2RlT3JpZ2luIG1fY3VycmVudFNlbWFudGljT3JpZ2luOwogICAgIC8vIFRydWUg
aWYgaXQncyBPSyB0byBPU1IgZXhpdCByaWdodCBub3cuCkBAIC0xMTkxLDE0ICsxMTkxLDE0IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc0FueUZvcmNlT1NSRXhpdHMgeyBmYWxzZSB9OwogfTsK
IAotQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2Nh
dGVUYXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewotICAgIEFT
U0VSVChieXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKTsKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRl
eCk7CiAgICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2Nr
KGJ5dGVjb2RlSW5kZXgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgMSkpOwogICAgIEJh
c2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAgLy8gbV9ibG9ja0xpbmtpbmdU
YXJnZXRzIG11c3QgYWx3YXlzIGJlIHNvcnRlZCBpbiBpbmNyZWFzaW5nIG9yZGVyIG9mIGJ5dGVj
b2RlQmVnaW4KICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRz
LnNpemUoKSkKLSAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5n
VGFyZ2V0cy5sYXN0KCktPmJ5dGVjb2RlQmVnaW4gPCBieXRlY29kZUluZGV4KTsKKyAgICAgICAg
QVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCktPmJ5
dGVjb2RlQmVnaW4ub2Zmc2V0KCkgPCBieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKICAgICBtX2lu
bGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBwZW5kKGJsb2NrUHRyKTsKICAg
ICBtX2dyYXBoLmFwcGVuZEJsb2NrKFdURk1vdmUoYmxvY2spKTsKICAgICByZXR1cm4gYmxvY2tQ
dHI7CkBAIC0xMjA2LDE5ICsxMjA2LDE5IEBAIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjph
bGxvY2F0ZVRhcmdldGFibGVCbG9jayh1bnNpZ25lZCBieXRlY29kZUluZGV4KQogCiBCYXNpY0Js
b2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpCiB7Ci0gICAg
UmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFY
LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4g
YmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFy
Z3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsKICAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGJs
b2NrLnB0cigpOwogICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92ZShibG9jaykpOwogICAg
IHJldHVybiBibG9ja1B0cjsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6bWFrZUJsb2NrVGFy
Z2V0YWJsZShCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK3ZvaWQg
Qnl0ZUNvZGVQYXJzZXI6Om1ha2VCbG9ja1RhcmdldGFibGUoQmFzaWNCbG9jayogYmxvY2ssIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChibG9jay0+
Ynl0ZWNvZGVCZWdpbiA9PSBVSU5UX01BWCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWJsb2NrLT5i
eXRlY29kZUJlZ2luKTsKICAgICBibG9jay0+Ynl0ZWNvZGVCZWdpbiA9IGJ5dGVjb2RlSW5kZXg7
CiAgICAgLy8gbV9ibG9ja0xpbmtpbmdUYXJnZXRzIG11c3QgYWx3YXlzIGJlIHNvcnRlZCBpbiBp
bmNyZWFzaW5nIG9yZGVyIG9mIGJ5dGVjb2RlQmVnaW4KICAgICBpZiAobV9pbmxpbmVTdGFja1Rv
cC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLnNpemUoKSkKLSAgICAgICAgQVNTRVJUKG1faW5saW5l
U3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCktPmJ5dGVjb2RlQmVnaW4gPCBi
eXRlY29kZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tM
aW5raW5nVGFyZ2V0cy5sYXN0KCktPmJ5dGVjb2RlQmVnaW4ub2Zmc2V0KCkgPCBieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1Rhcmdl
dHMuYXBwZW5kKGJsb2NrKTsKIH0KIApAQCAtMTI3OCw3ICsxMjc4LDcgQEAgQnl0ZUNvZGVQYXJz
ZXI6OlRlcm1pbmFsaXR5IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogCiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgw
LCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIGF1dG8gb3B0aW1pemF0aW9uUmVzdWx0ID0gaGFu
ZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBjYWxsTGlua1N0YXR1cywgcmVnaXN0ZXJP
ZmZzZXQsIHRoaXNBcmd1bWVudCwKLSAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCBtX2N1cnJlbnRJbmRleCArIGluc3RydWN0aW9uU2l6ZSwgb3AsIGtpbmQsIHByZWRpY3Rp
b24pOworICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIEJ5dGVjb2RlSW5k
ZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBpbnN0cnVjdGlvblNpemUpLCBvcCwga2luZCwg
cHJlZGljdGlvbik7CiAgICAgICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQgPT0gQ2FsbE9wdGlt
aXphdGlvblJlc3VsdDo6T3B0aW1pemVkVG9KdW1wKQogICAgICAgICAgICAgcmV0dXJuIFRlcm1p
bmFsOwogICAgICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ID09IENhbGxPcHRpbWl6YXRpb25S
ZXN1bHQ6OklubGluZWQpIHsKQEAgLTE0NTcsMTcgKzE0NTcsMTcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIENhbGxW
YXJpYW50IGMKICAgICAgICAgICAgIHNldERpcmVjdChzdGFja0VudHJ5LT5yZW1hcE9wZXJhbmQo
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpLCB1bmRlZmluZWQsIE5vcm1hbFNldCk7CiAKICAg
ICAgICAgLy8gV2Ugd2FudCB0byBlbWl0IHRoZSBTZXRMb2NhbHMgd2l0aCBhbiBleGl0IG9yaWdp
biB0aGF0IHBvaW50cyB0byB0aGUgcGxhY2Ugd2UgYXJlIGp1bXBpbmcgdG8uCi0gICAgICAgIHVu
c2lnbmVkIG9sZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CisgICAgICAgIEJ5dGVjb2RlSW5kZXgg
b2xkSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKICAgICAgICAgYXV0byBvbGRTdGFja1RvcCA9IG1f
aW5saW5lU3RhY2tUb3A7CiAgICAgICAgIG1faW5saW5lU3RhY2tUb3AgPSBzdGFja0VudHJ5Owot
ICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG9wY29kZUxlbmd0aHNbb3BfZW50ZXJdOworICAgICAg
ICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgob3Bjb2RlTGVuZ3Roc1tvcF9lbnRlcl0p
OwogICAgICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVl
KCk7CiAgICAgICAgIG1fY3VycmVudEluZGV4ID0gb2xkSW5kZXg7CiAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AgPSBvbGRTdGFja1RvcDsKICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsKIAotICAg
ICAgICBCYXNpY0Jsb2NrKiogZW50cnlCbG9ja1B0ciA9IHRyeUJpbmFyeVNlYXJjaDxCYXNpY0Js
b2NrKiwgdW5zaWduZWQ+KHN0YWNrRW50cnktPm1fYmxvY2tMaW5raW5nVGFyZ2V0cywgc3RhY2tF
bnRyeS0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLnNpemUoKSwgb3Bjb2RlTGVuZ3Roc1tvcF9lbnRl
cl0sIGdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayk7CisgICAgICAgIEJhc2ljQmxvY2sqKiBlbnRy
eUJsb2NrUHRyID0gdHJ5QmluYXJ5U2VhcmNoPEJhc2ljQmxvY2sqLCBCeXRlY29kZUluZGV4Pihz
dGFja0VudHJ5LT5tX2Jsb2NrTGlua2luZ1RhcmdldHMsIHN0YWNrRW50cnktPm1fYmxvY2tMaW5r
aW5nVGFyZ2V0cy5zaXplKCksIEJ5dGVjb2RlSW5kZXgob3Bjb2RlTGVuZ3Roc1tvcF9lbnRlcl0p
LCBnZXRCeXRlY29kZUJlZ2luRm9yQmxvY2spOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRy
eUJsb2NrUHRyKTsKICAgICAgICAgYWRkSnVtcFRvKCplbnRyeUJsb2NrUHRyKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0xNjI1LDggKzE2MjUsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpp
bmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBD
YQogICAgICAgICAoVmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywga2luZCwgY29udGludWF0aW9uQmxvY2spOwogCiAgICAgLy8g
VGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIGlubGluaW5nIHJlYWxseSBoYXBwZW5zLgotICAgIHVu
c2lnbmVkIG9sZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7Ci0gICAgbV9jdXJyZW50SW5kZXggPSAw
OworICAgIEJ5dGVjb2RlSW5kZXggb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKKyAgICBtX2N1
cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAKICAgICBzd2l0Y2ggKGtpbmQpIHsKICAg
ICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKQEAgLTE3NjEsNyArMTc2MSw3IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAgICAgbV9jdXJyZW50SW5zdHJ1Y3Rpb24gPSBzYXZl
ZEN1cnJlbnRJbnN0cnVjdGlvbjsKIH0KIAotQnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRp
b25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGxWYXJpYW50KE5vZGUqIGNhbGxUYXJn
ZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCBy
ZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwgaW50IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6
OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5n
QmFsYW5jZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uQmxvY2ssIGJvb2wgbmVlZHNUb0NoZWNr
Q2FsbGVlKQorQnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUNhbGxWYXJpYW50KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0LCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgVmly
dHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBCeXRlY29kZUluZGV4IG5leHRJbmRleCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UsIEJhc2lj
QmxvY2sqIGNvbnRpbnVhdGlvbkJsb2NrLCBib29sIG5lZWRzVG9DaGVja0NhbGxlZSkKIHsKICAg
ICBWRVJCT1NFX0xPRygiICAgIENvbnNpZGVyaW5nIGNhbGxlZSAiLCBjYWxsZWUsICJcbiIpOwog
CkBAIC0xNzg5LDcgKzE3ODksNyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJl
c3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbFZhcmlhbnQoTm9kZSogYwogICAgICAgICBl
bWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpOwogICAgICAgICBpbmxpbmluZ0JhbGFuY2UtLTsKICAgICAgICAgaWYgKGNvbnRpbnVh
dGlvbkJsb2NrKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG5leHRPZmZzZXQ7Cisg
ICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG5leHRJbmRleDsKICAgICAgICAgICAgIG1fZXhp
dE9LID0gdHJ1ZTsKICAgICAgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CiAgICAgICAg
ICAgICBhZGRKdW1wVG8oY29udGludWF0aW9uQmxvY2spOwpAQCAtMTk3Miw3ICsxOTcyLDcgQEAg
Qnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUlubGluaW5nKAogICAgIE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0LCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsCiAgICAgaW50IHJl
Z2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LAogICAgIGludCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywKLSAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlw
ZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uKQorICAgIEJ5dGVjb2RlSW5kZXggbmV4dEluZGV4LCBOb2RlVHlwZSBjYWxsT3AsIElu
bGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogewog
ICAgIFZFUkJPU0VfTE9HKCJIYW5kbGluZyBpbmxpbmluZy4uLlxuU3RhY2s6ICIsIGN1cnJlbnRD
b2RlT3JpZ2luKCksICJcbiIpOwogICAgIApAQCAtMTk4NSw3ICsxOTg1LDcgQEAgQnl0ZUNvZGVQ
YXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKAogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKSAmJiBjYWxs
TGlua1N0YXR1cy5zaXplKCkgPT0gMSkgewogICAgICAgICByZXR1cm4gaGFuZGxlQ2FsbFZhcmlh
bnQoCiAgICAgICAgICAgICBjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0LCBjYWxsTGlua1N0YXR1c1sw
XSwgcmVnaXN0ZXJPZmZzZXQsIHRoaXNBcmd1bWVudCwKLSAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBwcmVkaWN0aW9uLCBpbmxpbmluZ0Jh
bGFuY2UsIG51bGxwdHIsIHRydWUpOworICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIG5leHRJbmRleCwga2luZCwgcHJlZGljdGlvbiwgaW5saW5pbmdCYWxhbmNlLCBudWxs
cHRyLCB0cnVlKTsKICAgICB9CiAKICAgICAvLyBXZSBuZWVkIHRvIGNyZWF0ZSBzb21lIGtpbmQg
b2Ygc3dpdGNoIG92ZXIgY2FsbGVlLiBGb3Igbm93IHdlIG9ubHkgZG8gdGhpcyBpZiB3ZSBiZWxp
ZXZlIHRoYXQKQEAgLTIwNjEsOSArMjA2MSw5IEBAIEJ5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1p
emF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAgICAKICAgICBW
RVJCT1NFX0xPRygiQWJvdXQgdG8gbG9vcCBvdmVyIGZ1bmN0aW9ucyBhdCAiLCBjdXJyZW50Q29k
ZU9yaWdpbigpLCAiLlxuIik7CiAKLSAgICB1bnNpZ25lZCBvbGRPZmZzZXQgPSBtX2N1cnJlbnRJ
bmRleDsKKyAgICBCeXRlY29kZUluZGV4IG9sZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbGxMaW5rU3RhdHVzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIG1fY3VycmVudEluZGV4ID0gb2xkT2Zmc2V0OworICAgICAgICBtX2N1cnJlbnRJbmRl
eCA9IG9sZEluZGV4OwogICAgICAgICBCYXNpY0Jsb2NrKiBjYWxsZWVFbnRyeUJsb2NrID0gYWxs
b2NhdGVVbnRhcmdldGFibGVCbG9jaygpOwogICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNhbGxl
ZUVudHJ5QmxvY2s7CiAgICAgICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKQEAgLTIwNzUsNyAr
MjA3NSw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAgICAgICAgCiAgICAgICAgIGF1dG8gaW5saW5pbmdS
ZXN1bHQgPSBoYW5kbGVDYWxsVmFyaWFudCgKICAgICAgICAgICAgIG15Q2FsbFRhcmdldE5vZGUs
IHJlc3VsdCwgY2FsbExpbmtTdGF0dXNbaV0sIHJlZ2lzdGVyT2Zmc2V0LAotICAgICAgICAgICAg
dGhpc0FyZ3VtZW50LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2lu
ZCwgcHJlZGljdGlvbiwKKyAgICAgICAgICAgIHRoaXNBcmd1bWVudCwgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIG5leHRJbmRleCwga2luZCwgcHJlZGljdGlvbiwKICAgICAgICAgICAgIGlu
bGluaW5nQmFsYW5jZSwgY29udGludWF0aW9uQmxvY2ssIGZhbHNlKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChpbmxpbmluZ1Jlc3VsdCA9PSBDYWxsT3B0aW1pemF0aW9uUmVzdWx0OjpEaWROb3Ro
aW5nKSB7CkBAIC0yMTA0LDcgKzIxMDQsNyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXph
dGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAKICAgICAvLyBTbG93
IHBhdGggYmxvY2sKICAgICBtX2N1cnJlbnRCbG9jayA9IGFsbG9jYXRlVW50YXJnZXRhYmxlQmxv
Y2soKTsKLSAgICBtX2N1cnJlbnRJbmRleCA9IG9sZE9mZnNldDsKKyAgICBtX2N1cnJlbnRJbmRl
eCA9IG9sZEluZGV4OwogICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICBkYXRhLmZhbGxUaHJvdWdo
ID0gQnJhbmNoVGFyZ2V0KG1fY3VycmVudEJsb2NrKTsKICAgICBwcmVwYXJlVG9QYXJzZUJsb2Nr
KCk7CkBAIC0yMTI0LDcgKzIxMjQsNyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlv
blJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAgICAgIFZFUkJPU0Vf
TE9HKCJjb3VsZFRha2VTbG93UGF0aCB3YXMgZmFsc2VcbiIpOwogICAgIH0KIAotICAgIG1fY3Vy
cmVudEluZGV4ID0gbmV4dE9mZnNldDsKKyAgICBtX2N1cnJlbnRJbmRleCA9IG5leHRJbmRleDsK
ICAgICBtX2V4aXRPSyA9IHRydWU7IC8vIE9yaWdpbiBjaGFuZ2VkLCBzbyBpdCdzIGZpbmUgdG8g
ZXhpdCBhZ2Fpbi4KICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogCkBAIC0yMTM2LDcgKzIx
MzYsNyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW5saW5pbmcoCiAKICAgICBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAg
Ci0gICAgbV9jdXJyZW50SW5kZXggPSBvbGRPZmZzZXQ7CisgICAgbV9jdXJyZW50SW5kZXggPSBv
bGRJbmRleDsKICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbkJsb2NrOwogICAgIG1f
ZXhpdE9LID0gdHJ1ZTsKICAgICAKQEAgLTQ2OTMsMTQgKzQ2OTMsMTQgQEAgc3RhdGljIHVpbnQ2
NF90IG1ha2VEeW5hbWljVmFyT3BJbmZvKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIHVuc2ln
bmVkIGdldFB1dEkKIC8vIERvZXNuJ3QgYWxsb3cgdXNpbmcgYGNvbnRpbnVlYC4KICNkZWZpbmUg
TkVYVF9PUENPREUobmFtZSkgXAogICAgIGlmICh0cnVlKSB7IFwKLSAgICAgICAgbV9jdXJyZW50
SW5kZXggKz0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7IFwKKyAgICAgICAgbV9jdXJyZW50
SW5kZXggPSBCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudElu
c3RydWN0aW9uLT5zaXplKCkpOyBcCiAgICAgICAgIGdvdG8gV1RGX0NPTkNBVChORVhUX09QQ09E
RV8sIF9fTElORV9fKTsgLyogTmVlZCBhIHVuaXF1ZSBsYWJlbDogdXNhYmxlIG1vcmUgdGhhbiBv
bmNlIHBlciBmdW5jdGlvbi4gKi8gXAogICAgIH0gZWxzZSBcCiAgICAgICAgIFdURl9DT05DQVQo
TkVYVF9PUENPREVfLCBfX0xJTkVfXyk6IFwKICAgICBjb250aW51ZQogCiAjZGVmaW5lIExBU1Rf
T1BDT0RFX0xJTktFRChuYW1lKSBkbyB7IFwKLSAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gY3Vy
cmVudEluc3RydWN0aW9uLT5zaXplKCk7IFwKKyAgICAgICAgbV9jdXJyZW50SW5kZXggPSBCeXRl
Y29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCkpOyBcCiAgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7IFwKICAgICAgICAgcmV0dXJuOyBc
CiAgICAgfSB3aGlsZSAoZmFsc2UpCkBAIC00NzI0LDcgKzQ3MjQsNyBAQCBzdGF0aWMgdWludDY0
X3QgbWFrZUR5bmFtaWNWYXJPcEluZm8odW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgdW5zaWdu
ZWQgZ2V0UHV0SQogdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1p
dCkKIHsKICAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCk7Ci0gICAgdW5zaWduZWQgYmxvY2tCZWdpbiA9IG1fY3VycmVu
dEluZGV4OworICAgIEJ5dGVjb2RlSW5kZXggYmxvY2tCZWdpbiA9IG1fY3VycmVudEluZGV4Owog
CiAgICAgLy8gSWYgd2UgYXJlIHRoZSBmaXJzdCBiYXNpYyBibG9jaywgaW50cm9kdWNlIG1hcmtl
cnMgZm9yIGFyZ3VtZW50cy4gVGhpcyBhbGxvd3MKICAgICAvLyB1cyB0byB0cmFjayBpZiBhIHVz
ZSBvZiBhbiBhcmd1bWVudCBtYXkgdXNlIHRoZSBhY3R1YWwgYXJndW1lbnQgcGFzc2VkLCBhcwpA
QCAtNDc2OCw3ICs0NzY4LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZCBsaW1pdCkKICAgICAgICAgcHJvY2Vzc1NldExvY2FsUXVldWUoKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIERvbid0IGV4dGVuZCBvdmVyIGp1bXAgZGVzdGluYXRpb25zLgotICAgICAgICBp
ZiAobV9jdXJyZW50SW5kZXggPT0gbGltaXQpIHsKKyAgICAgICAgaWYgKG1fY3VycmVudEluZGV4
Lm9mZnNldCgpID09IGxpbWl0KSB7CiAgICAgICAgICAgICAvLyBPcmRpbmFyaWx5IHdlIHdhbnQg
dG8gcGxhbnQgYSBqdW1wLiBCdXQgcmVmdXNlIHRvIGRvIHRoaXMgaWYgdGhlIGJsb2NrIGlzCiAg
ICAgICAgICAgICAvLyBlbXB0eS4gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBmb3IgaW5saW5pbmcs
IHdoaWNoIG1pZ2h0IG90aGVyd2lzZSBjcmVhdGUKICAgICAgICAgICAgIC8vIHNvbWUgZW1wdHkg
YmxvY2tzIGluIHNvbWUgY2FzZXMuIFdoZW4gcGFyc2VCbG9jaygpIHJldHVybnMgd2l0aCBhbiBl
bXB0eQpAQCAtNDc3OCw3ICs0Nzc4LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIC8vIHRvIGJlIHRydWUuCiAKICAgICAgICAg
ICAgIGlmICghbV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBhZGRK
dW1wVG8obV9jdXJyZW50SW5kZXgpOworICAgICAgICAgICAgICAgIGFkZEp1bXBUbyhtX2N1cnJl
bnRJbmRleC5vZmZzZXQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgCkBAIC01ODAzLDcgKzU4MDMsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+dGVy
bWluYWwoKSk7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEptcD4oKTsKICAgICAgICAgICAgIGludCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJn
ZXQoYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAs
IE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7CisgICAgICAgICAgICBh
ZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZl
T2Zmc2V0KSk7CiAgICAgICAgICAgICBpZiAocmVsYXRpdmVPZmZzZXQgPD0gMCkKICAgICAgICAg
ICAgICAgICBmbHVzaEZvclRlcm1pbmFsKCk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9q
bXApOwpAQCAtNTgxMyw3ICs1ODEzLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9m
ZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgICAgICAgICBO
b2RlKiBjb25kaXRpb24gPSBnZXQoYnl0ZWNvZGUubV9jb25kaXRpb24pOwotICAgICAgICAgICAg
YWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVs
YXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkp
KSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJh
bmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJl
bnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlv
bik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qdHJ1ZSk7CiAgICAgICAgIH0KIApAQCAt
NTgyMSw3ICs1ODIxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZCBsaW1pdCkKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSmZhbHNlPigpOwogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBq
dW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgICAgICAgICAgTm9kZSogY29u
ZGl0aW9uID0gZ2V0KGJ5dGVjb2RlLm1fY29uZGl0aW9uKTsKLSAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0
cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRp
dGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEo
bV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9j
dXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAg
ICAgICAgICAgTEFTVF9PUENPREUob3BfamZhbHNlKTsKICAgICAgICAgfQogCkBAIC01ODMxLDcg
KzU4MzEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAg
ICAgICAgICBOb2RlKiBudWxsQ29uc3RhbnQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5m
byhtX2NvbnN0YW50TnVsbCkpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9H
cmFwaChDb21wYXJlRXEsIHZhbHVlLCBudWxsQ29uc3RhbnQpOwotICAgICAgICAgICAgYWRkVG9H
cmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVP
ZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29u
ZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0
YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRl
eC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAg
ICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qZXFfbnVsbCk7CiAgICAgICAgIH0KIApAQCAtNTg0
MSw3ICs1ODQxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBs
aW1pdCkKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwog
ICAgICAgICAgICAgTm9kZSogbnVsbENvbnN0YW50ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBP
cEluZm8obV9jb25zdGFudE51bGwpKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFk
ZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgbnVsbENvbnN0YW50KTsKLSAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSks
IGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5j
aERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KSwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24p
OwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5lcV9udWxsKTsKICAgICAgICAgfQogCkBA
IC01ODUwLDcgKzU4NTAsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkIGxpbWl0KQogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFy
Z2V0KGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBn
ZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRU
b0dyYXBoKElzVW5kZWZpbmVkT3JOdWxsLCB2YWx1ZSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBo
KEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNl
dCwgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRp
b24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1f
Y3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4Lm9m
ZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAg
ICAgICAgIExBU1RfT1BDT0RFKG9wX2p1bmRlZmluZWRfb3JfbnVsbCk7CiAgICAgICAgIH0KIApA
QCAtNTg1OSw3ICs1ODU5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZCBsaW1pdCkKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRh
cmdldChieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
Z2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRk
VG9HcmFwaChJc1VuZGVmaW5lZE9yTnVsbCwgdmFsdWUpOwotICAgICAgICAgICAgYWRkVG9HcmFw
aChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3Ry
dWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0
aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YSht
X2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1
cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAg
ICAgICAgICBMQVNUX09QQ09ERShvcF9qbnVuZGVmaW5lZF9vcl9udWxsKTsKICAgICAgICAgfQog
CkBAIC01ODY5LDcgKzU4NjksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhz
KTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAg
ICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMik7
Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJy
ZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1
Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFu
Y2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVP
ZmZzZXQsIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2psZXNzKTsKICAg
ICAgICAgfQogCkBAIC01ODc5LDcgKzU4NzksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVj
b2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7
CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzRXEs
IG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNo
RGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIGN1
cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRU
b0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkg
KyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1
Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bf
amxlc3NlcSk7CiAgICAgICAgIH0KIApAQCAtNTg4OSw3ICs1ODg5LDcgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIG9w
MSA9IGdldChieXRlY29kZS5tX2xocyk7CiAgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0
ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChD
b21wYXJlR3JlYXRlciwgb3AxLCBvcDIpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gs
IE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3Vy
cmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKKyAg
ICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJ
bmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSAr
IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBM
QVNUX09QQ09ERShvcF9qZ3JlYXRlcik7CiAgICAgICAgIH0KIApAQCAtNTg5OSw3ICs1ODk5LDcg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAg
ICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CiAgICAgICAgICAgICBOb2Rl
KiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9u
ID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlckVxLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBh
ZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxh
dGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkp
LCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFu
Y2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVu
dEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9u
KTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pncmVhdGVyZXEpOwogICAgICAgICB9CiAK
QEAgLTU5MDksNyArNTkwOSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMp
OwogICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAg
ICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxLCBvcDEsIG9wMik7Ci0g
ICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50
SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rp
b24tPnNpemUoKSkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gs
IE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZz
ZXQsIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkp
KSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2plcSk7CiAgICAgICAg
IH0KIApAQCAtNTkxOSw3ICs1OTE5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5t
X2xocyk7CiAgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAg
ICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9w
MSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0
YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dy
YXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBy
ZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rp
b24tPnNpemUoKSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfanN0
cmljdGVxKTsKICAgICAgICAgfQogCkBAIC01OTI5LDcgKzU5MjksNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3Ax
ID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRl
Y29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENv
bXBhcmVMZXNzLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJ
bmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOworICAgICAg
ICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4
Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4Lm9m
ZnNldCgpICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1Rf
T1BDT0RFKG9wX2pubGVzcyk7CiAgICAgICAgIH0KIApAQCAtNTkzOSw3ICs1OTM5LDcgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAg
IE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CiAgICAgICAgICAgICBOb2RlKiBvcDIg
PSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRk
VG9HcmFwaChDb21wYXJlTGVzc0VxLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBo
KEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1
Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRp
b24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1f
Y3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3Vy
cmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAg
ICAgICAgIExBU1RfT1BDT0RFKG9wX2pubGVzc2VxKTsKICAgICAgICAgfQogCkBAIC01OTQ5LDcg
KzU5NDksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAg
ICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBj
b25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyLCBvcDEsIG9wMik7Ci0gICAgICAg
ICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgg
KyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9m
ZnNldCkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5m
byhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9u
LT5zaXplKCksIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQpKSwgY29u
ZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2puZ3JlYXRlcik7CiAgICAgICAg
IH0KIApAQCAtNTk1OSw3ICs1OTU5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5t
X2xocyk7CiAgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAg
ICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlckVxLCBv
cDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERh
dGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50
SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9H
cmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsg
Y3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVs
YXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pu
Z3JlYXRlcmVxKTsKICAgICAgICAgfQogCkBAIC01OTY5LDcgKzU5NjksNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSog
b3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChi
eXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBo
KENvbXBhcmVFcSwgb3AxLCBvcDIpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9w
SW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCksIG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKKyAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRl
eC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleC5v
ZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9qbmVxKTsKICAgICAgICAgfQogCkBAIC01OTc5LDcgKzU5NzksNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAg
Tm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9
IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRU
b0dyYXBoKENvbXBhcmVTdHJpY3RFcSwgb3AxLCBvcDIpOwotICAgICAgICAgICAgYWRkVG9HcmFw
aChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3Ry
dWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0
aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YSht
X2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1
cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAg
ICAgICAgICBMQVNUX09QQ09ERShvcF9qbnN0cmljdGVxKTsKICAgICAgICAgfQogCkBAIC01OTg5
LDcgKzU5ODksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxp
bWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAg
ICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2Rl
KiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVCZWxvdywgb3AxLCBvcDIpOwotICAgICAg
ICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4
ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCkpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcElu
Zm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0LCBt
X2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNv
bmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qYmVsb3cpOwogICAgICAgICB9
CiAKQEAgLTU5OTksNyArNTk5OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9s
aHMpOwogICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAg
ICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUJlbG93RXEsIG9wMSwg
b3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YSht
X2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBo
KEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxh
dGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24t
PnNpemUoKSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfamJlbG93
ZXEpOwogICAgICAgICB9CiAKQEAgLTYwMDgsMTIgKzYwMDgsMTIgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIFN3aXRjaERhdGEm
IGRhdGEgPSAqbV9ncmFwaC5tX3N3aXRjaERhdGEuYWRkKCk7CiAgICAgICAgICAgICBkYXRhLmtp
bmQgPSBTd2l0Y2hJbW07CiAgICAgICAgICAgICBkYXRhLnN3aXRjaFRhYmxlSW5kZXggPSBtX2lu
bGluZVN0YWNrVG9wLT5tX3N3aXRjaFJlbWFwW2J5dGVjb2RlLm1fdGFibGVJbmRleF07Ci0gICAg
ICAgICAgICBkYXRhLmZhbGxUaHJvdWdoLnNldEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgg
KyBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCkpOworICAgICAgICAgICAgZGF0
YS5mYWxsVGhyb3VnaC5zZXRCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsg
anVtcFRhcmdldChieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpKTsKICAgICAgICAgICAgIFNpbXBs
ZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dp
dGNoVGFibGVJbmRleCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFi
bGUuYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIGlmICghdGFi
bGUuYnJhbmNoT2Zmc2V0c1tpXSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9jdXJyZW50SW5kZXggKyB0YWJsZS5icmFu
Y2hPZmZzZXRzW2ldOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fY3VycmVu
dEluZGV4Lm9mZnNldCgpICsgdGFibGUuYnJhbmNoT2Zmc2V0c1tpXTsKICAgICAgICAgICAgICAg
ICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2guYnl0ZWNvZGVJbmRleCgpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVu
ZChTd2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRleChtX2dyYXBoLmZyZWV6ZShqc051bWJlcihz
dGF0aWNfY2FzdDxpbnQzMl90Pih0YWJsZS5taW4gKyBpKSkpLCB0YXJnZXQpKTsKQEAgLTYwMjgs
MTIgKzYwMjgsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBs
aW1pdCkKICAgICAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N3aXRjaERh
dGEuYWRkKCk7CiAgICAgICAgICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hDaGFyOwogICAgICAgICAg
ICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9zd2l0Y2hSZW1h
cFtieXRlY29kZS5tX3RhYmxlSW5kZXhdOwotICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5z
ZXRCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4ICsganVtcFRhcmdldChieXRlY29kZS5tX2Rl
ZmF1bHRPZmZzZXQpKTsKKyAgICAgICAgICAgIGRhdGEuZmFsbFRocm91Z2guc2V0Qnl0ZWNvZGVJ
bmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGp1bXBUYXJnZXQoYnl0ZWNvZGUubV9kZWZh
dWx0T2Zmc2V0KSk7CiAgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIHRhYmxlID0gbV9jb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLmJyYW5jaE9mZnNldHMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgICAgICBpZiAoIXRhYmxlLmJyYW5jaE9mZnNldHNbaV0pCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdl
dCA9IG1fY3VycmVudEluZGV4ICsgdGFibGUuYnJhbmNoT2Zmc2V0c1tpXTsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHRhYmxlLmJy
YW5jaE9mZnNldHNbaV07CiAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxU
aHJvdWdoLmJ5dGVjb2RlSW5kZXgoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoCkBAIC02MDQ5LDEyICs2MDQ5LDEyIEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAg
ICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKm1fZ3JhcGgubV9zd2l0Y2hEYXRhLmFkZCgpOwogICAg
ICAgICAgICAgZGF0YS5raW5kID0gU3dpdGNoU3RyaW5nOwogICAgICAgICAgICAgZGF0YS5zd2l0
Y2hUYWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwotICAgICAgICAgICAgZGF0YS5m
YWxsVGhyb3VnaC5zZXRCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4ICsganVtcFRhcmdldChi
eXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpKTsKKyAgICAgICAgICAgIGRhdGEuZmFsbFRocm91Z2gu
c2V0Qnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGp1bXBUYXJnZXQoYnl0
ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KSk7CiAgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIHRh
YmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxl
SW5kZXgpOwogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6
aXRlcmF0b3IgaXRlcjsKICAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0
VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLm9mZnNldFRhYmxlLmVuZCgpOwogICAgICAgICAg
ICAgZm9yIChpdGVyID0gdGFibGUub2Zmc2V0VGFibGUuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4
ICsgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRh
cmdldCA9IG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0
OwogICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gZGF0YS5mYWxsVGhyb3VnaC5ieXRlY29k
ZUluZGV4KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IGRhdGEuY2FzZXMuYXBwZW5kKApAQCAtNjA3OSw3ICs2MDc5LDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIGlmIChtX2lubGlu
ZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBzZXRE
aXJlY3QobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZSwgZ2V0KGJ5dGVjb2RlLm1fdmFs
dWUpLCBJbW1lZGlhdGVTZXRXaXRoRmx1c2gpOwogCi0gICAgICAgICAgICBpZiAoIW1faW5saW5l
U3RhY2tUb3AtPm1fY29udGludWF0aW9uQmxvY2sgJiYgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSAhPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKSB7CisgICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3At
Pm1fY29udGludWF0aW9uQmxvY2sgJiYgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSAhPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBlYXJs
eSByZXR1cm4gZnJvbSBhbiBpbmxpbmVkIGZ1bmN0aW9uIGFuZCB3ZSBkbyBub3QgaGF2ZSBhIGNv
bnRpbnVhdGlvbiBibG9jaywgc28gd2UgbXVzdCBhbGxvY2F0ZSBvbmUuCiAgICAgICAgICAgICAg
ICAgLy8gSXQgaXMgdW50YXJnZXRhYmxlLCBiZWNhdXNlIHdlIGRvIG5vdCBrbm93IHRoZSBhcHBy
b3ByaWF0ZSBpbmRleC4KICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGJsb2NrIHR1cm5zIG91
dCB0byBiZSBhIGp1bXAgdGFyZ2V0LCBwYXJzZUNvZGVCbG9jayB3aWxsIGZpeCBpdHMgYnl0ZWNv
ZGVJbmRleCBiZWZvcmUgcHV0dGluZyBpdCBpbiBtX2Jsb2NrTGlua2luZ1RhcmdldHMKQEAgLTYy
MDcsNyArNjIwNyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQg
bGltaXQpCiAgICAgICAgICAgICAgICAgQXJndW1lbnRzVmVjdG9yJiBlbnRyeXBvaW50QXJndW1l
bnRzID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgICAgICAgICBlbnRyeXBv
aW50QXJndW1lbnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CiAKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBleGl0Qnl0ZWNvZGVJbmRleCA9IG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3Ry
dWN0aW9uLT5zaXplKCk7CisgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBleGl0Qnl0ZWNv
ZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CiAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gMDsgYXJndW1lbnQgPCBhcmd1bWVudFByZWRpY3Rpb25zLnNpemUoKTsgKythcmd1
bWVudCkgewogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
ID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3Vt
ZW50KSk7CkBAIC02MzE2LDcgKzYzMTYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBnZXQoYnl0ZWNv
ZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2Nr
KS5tX2hhc0p1bXBlZCkgewogICAgICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRv
R3JhcGgoQ29tcGFyZUVxUHRyLCBPcEluZm8oZnJvemVuUG9pbnRlciksIGNoaWxkKTsKLSAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50
SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyByZWxh
dGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJh
bmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zm
c2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5lcV9w
dHIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0NlbGwsIE9w
SW5mbyhmcm96ZW5Qb2ludGVyKSwgY2hpbGQpOwpAQCAtNzEzNSwyMSArNzEzNSwyMSBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxCYXNp
Y0Jsb2NrKj4mIHBvc3NpYmxlVAogICAgIAogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAg
IGNhc2UgSnVtcDoKLSAgICAgICAgbm9kZS0+dGFyZ2V0QmxvY2soKSA9IGJsb2NrRm9yQnl0ZWNv
ZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT50YXJnZXRCeXRlY29kZU9mZnNldER1cmlu
Z1BhcnNpbmcoKSk7CisgICAgICAgIG5vZGUtPnRhcmdldEJsb2NrKCkgPSBibG9ja0ZvckJ5dGVj
b2RlSW5kZXgocG9zc2libGVUYXJnZXRzLCBCeXRlY29kZUluZGV4KG5vZGUtPnRhcmdldEJ5dGVj
b2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAg
ICBjYXNlIEJyYW5jaDogewogICAgICAgICBCcmFuY2hEYXRhKiBkYXRhID0gbm9kZS0+YnJhbmNo
RGF0YSgpOwotICAgICAgICBkYXRhLT50YWtlbi5ibG9jayA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZz
ZXQocG9zc2libGVUYXJnZXRzLCBkYXRhLT50YWtlbkJ5dGVjb2RlSW5kZXgoKSk7Ci0gICAgICAg
IGRhdGEtPm5vdFRha2VuLmJsb2NrID0gYmxvY2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRh
cmdldHMsIGRhdGEtPm5vdFRha2VuQnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgZGF0YS0+dGFr
ZW4uYmxvY2sgPSBibG9ja0ZvckJ5dGVjb2RlSW5kZXgocG9zc2libGVUYXJnZXRzLCBCeXRlY29k
ZUluZGV4KGRhdGEtPnRha2VuQnl0ZWNvZGVJbmRleCgpKSk7CisgICAgICAgIGRhdGEtPm5vdFRh
a2VuLmJsb2NrID0gYmxvY2tGb3JCeXRlY29kZUluZGV4KHBvc3NpYmxlVGFyZ2V0cywgQnl0ZWNv
ZGVJbmRleChkYXRhLT5ub3RUYWtlbkJ5dGVjb2RlSW5kZXgoKSkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU3dpdGNoOiB7CiAgICAgICAgIFN3aXRjaERhdGEq
IGRhdGEgPSBub2RlLT5zd2l0Y2hEYXRhKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5v
ZGUtPnN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpOyBpLS07KQotICAgICAgICAgICAgZGF0YS0+
Y2FzZXNbaV0udGFyZ2V0LmJsb2NrID0gYmxvY2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRh
cmdldHMsIGRhdGEtPmNhc2VzW2ldLnRhcmdldC5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICBk
YXRhLT5mYWxsVGhyb3VnaC5ibG9jayA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVU
YXJnZXRzLCBkYXRhLT5mYWxsVGhyb3VnaC5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAg
ZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2NrID0gYmxvY2tGb3JCeXRlY29kZUluZGV4KHBvc3Np
YmxlVGFyZ2V0cywgQnl0ZWNvZGVJbmRleChkYXRhLT5jYXNlc1tpXS50YXJnZXQuYnl0ZWNvZGVJ
bmRleCgpKSk7CisgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrID0gYmxvY2tGb3JCeXRl
Y29kZUluZGV4KHBvc3NpYmxlVGFyZ2V0cywgQnl0ZWNvZGVJbmRleChkYXRhLT5mYWxsVGhyb3Vn
aC5ieXRlY29kZUluZGV4KCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAg
LTczMjMsNyArNzMyMyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkK
ICAgICBmb3IgKHVuc2lnbmVkIGp1bXBUYXJnZXRJbmRleCA9IDA7IGp1bXBUYXJnZXRJbmRleCA8
PSBqdW1wVGFyZ2V0cy5zaXplKCk7ICsranVtcFRhcmdldEluZGV4KSB7CiAgICAgICAgIC8vIFRo
ZSBtYXhpbXVtIGJ5dGVjb2RlIG9mZnNldCB0byBnbyBpbnRvIHRoZSBjdXJyZW50IGJhc2ljYmxv
Y2sgaXMgZWl0aGVyIHRoZSBuZXh0IGp1bXAgdGFyZ2V0LCBvciB0aGUgZW5kIG9mIHRoZSBpbnN0
cnVjdGlvbnMuCiAgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0ganVtcFRhcmdldEluZGV4IDwganVt
cFRhcmdldHMuc2l6ZSgpID8ganVtcFRhcmdldHNbanVtcFRhcmdldEluZGV4XSA6IGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgICAgICBBU1NFUlQobV9jdXJyZW50SW5kZXgg
PCBsaW1pdCk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSA8IGxpbWl0
KTsKIAogICAgICAgICAvLyBMb29wIHVudGlsIHdlIHJlYWNoIHRoZSBjdXJyZW50IGxpbWl0IChp
LmUuIG5leHQganVtcCB0YXJnZXQpLgogICAgICAgICBkbyB7CkBAIC03MzQ2LDIzICs3MzQ2LDIz
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAgICAgICAgICAgIHBh
cnNlQmxvY2sobGltaXQpOwogCiAgICAgICAgICAgICAvLyBXZSBzaG91bGQgbm90IGhhdmUgZ29u
ZSBiZXlvbmQgdGhlIGxpbWl0LgotICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEluZGV4IDw9
IGxpbWl0KTsKKyAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSA8PSBs
aW1pdCk7CiAKICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRCbG9jay0+aXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBjYXNlIG9ubHkgaGFwcGVucyBpZiB0aGUgbGFzdCBpbnN0
cnVjdGlvbiB3YXMgYW4gaW5saW5lZCBjYWxsIHdpdGggZWFybHkgcmV0dXJucwogICAgICAgICAg
ICAgICAgIC8vIG9yIHBvbHltb3JwaGljIChjcmVhdGluZyBhbiBlbXB0eSBjb250aW51YXRpb24g
YmxvY2spLAogICAgICAgICAgICAgICAgIC8vIGFuZCB0aGVuIHdlIGhpdCB0aGUgbGltaXQgYmVm
b3JlIHB1dHRpbmcgYW55dGhpbmcgaW4gdGhlIGNvbnRpbnVhdGlvbiBibG9jay4KLSAgICAgICAg
ICAgICAgICBBU1NFUlQobV9jdXJyZW50SW5kZXggPT0gbGltaXQpOworICAgICAgICAgICAgICAg
IEFTU0VSVChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSA9PSBsaW1pdCk7CiAgICAgICAgICAgICAg
ICAgbWFrZUJsb2NrVGFyZ2V0YWJsZShtX2N1cnJlbnRCbG9jaywgbV9jdXJyZW50SW5kZXgpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50Qmxv
Y2stPnRlcm1pbmFsKCkgfHwgKG1fY3VycmVudEluZGV4ID09IGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpICYmIGlubGluZUNhbGxGcmFtZSgpKSk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKG1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpIHx8IChtX2N1cnJlbnRJbmRleC5vZmZzZXQo
KSA9PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSAmJiBpbmxpbmVDYWxsRnJhbWUo
KSkpOwogICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgfSB3aGlsZSAobV9jdXJyZW50SW5kZXggPCBsaW1pdCk7CisgICAgICAg
IH0gd2hpbGUgKG1fY3VycmVudEluZGV4Lm9mZnNldCgpIDwgbGltaXQpOwogICAgIH0KIAogICAg
IC8vIFNob3VsZCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgaW5zdHJ1Y3Rpb25zLgotICAg
IEFTU0VSVChtX2N1cnJlbnRJbmRleCA9PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUo
KSk7CisgICAgQVNTRVJUKG1fY3VycmVudEluZGV4Lm9mZnNldCgpID09IGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKICAgICAKICAgICBWRVJCT1NFX0xPRygiRG9uZSBwYXJzaW5n
ICIsICpjb2RlQmxvY2ssICIgKGZlbGwgb2ZmIGVuZClcbiIpOwogfQpAQCAtNzUyNSw3ICs3NTI1
LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ3JlYXRlSW50ZXJuYWxGaWVsZE9iamVj
dChjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
KCkKIHsKICAgICAvLyBTZXQgZHVyaW5nIGNvbnN0cnVjdGlvbi4KLSAgICBBU1NFUlQoIW1fY3Vy
cmVudEluZGV4KTsKKyAgICBBU1NFUlQoIW1fY3VycmVudEluZGV4Lm9mZnNldCgpKTsKICAgICAK
ICAgICBWRVJCT1NFX0xPRygiUGFyc2luZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKaW5kZXggN2M4MDc1
MGFlZGRkN2MwMDM4YjlhNTliMzk1M2Q2MGZjYjBhYTRmYS4uNzk4N2I4NzBmZDUwOWY5MzAwMDdl
MzU2YWMwNTVlYTY2YmZlN2FkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb25EYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbkRhdGEuY3BwCkBAIC01Niw3ICs1Niw3IEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6
YWRkQ29kZU9yaWdpbihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIGNvZGVPcmlnaW5z
LmFwcGVuZChjb2RlT3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNp
emUoKSAtIDE7CiAgICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsK
LSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChpbmRleCk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleChpbmRleCkpOwogfQogCiBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6
OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpAQCAtNjQsMTMg
KzY0LDEzIEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkVW5pcXVlQ2FsbFNpdGVJbmRl
eChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgY29kZU9yaWdpbnMuYXBwZW5kKGNvZGVPcmln
aW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsKICAgICBB
U1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4pOwotICAgIHJldHVybiBDYWxs
U2l0ZUluZGV4KGluZGV4KTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KGluZGV4KSk7CiB9CiAKIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6bGFzdENhbGxTaXRlKCkg
Y29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb2RlT3JpZ2lucy5zaXplKCkpOwotICAgIHJl
dHVybiBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW5zLnNpemUoKSAtIDEpOworICAgIHJldHVybiBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoY29kZU9yaWdpbnMuc2l6ZSgpIC0gMSkpOwogfQog
CiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGREaXNwb3NhYmxlQ2FsbFNp
dGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uRGF0YS5oCmluZGV4IDRiMjE2N2ZkODRkNmY2ZmQ5MTlmOTcyYTkyOTJjMWYwYzFl
YTgzMmIuLjJlZDgzMGZkYzNhNDlmMDQ5MmQ4ZjgwNjVjMjUxMjgwYWU1MzQ4ZGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCkBAIC05NCwxNCArOTQsMTQgQEAg
cHVibGljOgogICAgIHZvaWQgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKENvZGVCbG9jayogb3du
ZXIpOwogICAgIGJvb2wgaXNWTVRyYXBCcmVha3BvaW50KHZvaWQqIGFkZHJlc3MpOwogCi0gICAg
Q2F0Y2hFbnRyeXBvaW50RGF0YSogY2F0Y2hPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgQ2F0Y2hFbnRyeXBvaW50RGF0YSogY2F0Y2hPU1JF
bnRyeURhdGFGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8Q2F0Y2hFbnRyeXBvaW50RGF0YSwg
dW5zaWduZWQ+KAorICAgICAgICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPENhdGNoRW50cnlwb2lu
dERhdGEsIEJ5dGVjb2RlSW5kZXg+KAogICAgICAgICAgICAgY2F0Y2hFbnRyeXBvaW50cywgY2F0
Y2hFbnRyeXBvaW50cy5zaXplKCksIGJ5dGVjb2RlSW5kZXgsCiAgICAgICAgICAgICBbXSAoY29u
c3QgQ2F0Y2hFbnRyeXBvaW50RGF0YSogaXRlbSkgeyByZXR1cm4gaXRlbS0+Ynl0ZWNvZGVJbmRl
eDsgfSk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmRDYXRjaEVudHJ5cG9pbnQodW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IG1hY2hpbmVDb2RlLCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiYgYXJndW1lbnRGb3JtYXRzKQor
ICAgIHZvaWQgYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IG1hY2hpbmVD
b2RlLCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiYgYXJndW1lbnRGb3JtYXRzKQogICAgIHsKICAgICAg
ICAgY2F0Y2hFbnRyeXBvaW50cy5hcHBlbmQoQ2F0Y2hFbnRyeXBvaW50RGF0YSB7IG1hY2hpbmVD
b2RlLCAgV1RGTW92ZShhcmd1bWVudEZvcm1hdHMpLCBieXRlY29kZUluZGV4IH0pOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAppbmRleCBkYjY5ZjFiZGQ2M2Qx
MTVhZmI1ZTVkMGZhZGI4NDA3MTEzMmE0YzlkLi4xN2IzNzA3NThjMDUzODcwM2I3ZDc5ZWU2MjI3
MmQ0Nzk5OThiNTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ry
aXZlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCkBA
IC03MCw3ICs3MCw3IEBAIHN0YXRpYyBGdW5jdGlvbldoaXRlbGlzdCYgZW5zdXJlR2xvYmFsREZH
V2hpdGVsaXN0KCkKIAogc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAg
IFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2Rl
QmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLAotICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNv
ZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFs
dWVzLAorICAgIEJ5dGVjb2RlSW5kZXggb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVy
YW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMsCiAgICAgUmVmPERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAoIU9wdGlvbnM6
OmJ5dGVjb2RlUmFuZ2VUb0RGR0NvbXBpbGUoKS5pc0luUmFuZ2UoY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnNTaXplKCkpCkBAIC0xMTYsNyArMTE2LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0
IGNvbXBpbGVJbXBsKAogfQogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCiBzdGF0aWMgQ29tcGls
YXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0gICAgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sq
LCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkLCBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1Zh
bHVlPj4mLAorICAgIFZNJiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2Rl
LCBCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mLAogICAg
IFJlZjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+JiYpCiB7CiAgICAgcmV0dXJuIENvbXBp
bGF0aW9uRmFpbGVkOwpAQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3Vs
dCBjb21waWxlSW1wbCgKIAogQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZSgKICAgICBWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBD
b21waWxhdGlvbk1vZGUgbW9kZSwKLSAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgs
IGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcywKKyAg
ICBCeXRlY29kZUluZGV4IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8T3B0
aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzLAogICAgIFJlZjxEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVz
dWx0ID0gY29tcGlsZUltcGwoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RyaXZlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAppbmRl
eCAwMWY3NGVlY2YwMzZjZDlmOWMwNzc4Yzc2Mzg5NzIwYzAzOTEzYzdlLi5jN2JhN2Y2YWM3N2Vk
YjZkMzhkYTFiY2JmYTRmZmZjMWQ3NDg1OWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmgKQEAgLTQyLDcgKzQyLDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgZ2V0
TnVtQ29tcGlsYXRpb25zKCk7CiAvLyBjb21waWxlLiBFdmVuIGlmIHdlIGRvIGEgc3luY2hyb25v
dXMgY29tcGlsZSwgd2UgY2FsbCB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgcmVzdWx0LgogQ29tcGls
YXRpb25SZXN1bHQgY29tcGlsZSgKICAgICBWTSYsIENvZGVCbG9jayosIENvZGVCbG9jayogcHJv
ZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSwKLSAgICB1bnNpZ25lZCBvc3JFbnRy
eUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhh
bmRsZVZhbHVlcywKKyAgICBCeXRlY29kZUluZGV4IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29u
c3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzLAogICAgIFJl
ZjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+JiYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IDlkNWI3ZDkz
MzdjMjFkMzgyMWQ1YzlkNGM1ZTEyMWMyMTAyZWJlMTguLmFkYmY1MDI1Y2YzZDQ0MWJlMThiNzJi
MDlkZGY4OGY4NDVkYjkxMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CkBAIC00MDQsNyArNDA0LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250ZXgKICAgICBpZiAoY2xv
YmJlcnNFeGl0U3RhdGUoKnRoaXMsIG5vZGUpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJD
bG9iYmVyc0V4aXQiKTsKICAgICBpZiAobm9kZS0+b3JpZ2luLmlzU2V0KCkpIHsKLSAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAiYmMjIiwgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5k
ZXgoKSk7CisgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5
dGVjb2RlSW5kZXgoKSk7CiAgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMgIT0gbm9k
ZS0+b3JpZ2luLmZvckV4aXQgJiYgbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSkKICAgICAg
ICAgICAgIG91dC5wcmludChjb21tYSwgImV4aXQ6ICIsIG5vZGUtPm9yaWdpbi5mb3JFeGl0KTsK
ICAgICB9CkBAIC0xNjQ5LDEwICsxNjQ5LDEwIEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUgR3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogY3VycmVuCiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChub2RlLT5oYXNIZWFwUHJlZGljdGlvbigp
KQotICAgICAgICAgICAgICAgIHJldHVybiAmcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICZwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRl
Y29kZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCkpOwogCiAgICAg
ICAgICAgICBpZiAocHJvZmlsZWRCbG9jay0+aGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkgewot
ICAgICAgICAgICAgICAgIGlmIChBcml0aFByb2ZpbGUqIHJlc3VsdCA9IHByb2ZpbGVkQmxvY2st
PmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRl
Y29kZUluZGV4KCkpKQorICAgICAgICAgICAgICAgIGlmIChBcml0aFByb2ZpbGUqIHJlc3VsdCA9
IHByb2ZpbGVkQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3NTAsMTIgKzE3NTAsMTIgQEAg
Ym9vbCBHcmFwaDo6d2lsbENhdGNoRXhjZXB0aW9uSW5NYWNoaW5lRnJhbWUoQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBDb2RlT3JpZ2luJgogICAgIGlmICghbV9oYXNFeGNlcHRpb25IYW5kbGVycykK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleFRvQ2hl
Y2sgPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXhUb0NoZWNrID0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgd2hpbGUg
KDEpIHsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSgpOwogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJh
c2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIGlmIChIYW5kbGVy
SW5mbyogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVj
b2RlSW5kZXhUb0NoZWNrKSkgewotICAgICAgICAgICAgb3BDYXRjaE9yaWdpbk91dCA9IENvZGVP
cmlnaW4oaGFuZGxlci0+dGFyZ2V0LCBpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBpZiAoSGFu
ZGxlckluZm8qIGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KGJ5
dGVjb2RlSW5kZXhUb0NoZWNrKSkgeworICAgICAgICAgICAgb3BDYXRjaE9yaWdpbk91dCA9IENv
ZGVPcmlnaW4oQnl0ZWNvZGVJbmRleChoYW5kbGVyLT50YXJnZXQpLCBpbmxpbmVDYWxsRnJhbWUp
OwogICAgICAgICAgICAgY2F0Y2hIYW5kbGVyT3V0ID0gaGFuZGxlcjsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5k
ZXggNGE3MDhhYWI5MzEzMzliNWVlNDdjMzM0ZWI0MTJiOGIwOTg2NTMxMC4uNmM2NGQ0NzFkMzA1
ZjgyYWZkYzUzOGQzN2I3YTA0NWNlMGFhMjQxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaApAQCAtMTA5NCw3ICsxMDk0LDcgQEAgcHVibGljOgogCiAgICAgLy8gVGhpcyBtYXBz
IGFuIGVudHJ5cG9pbnQgaW5kZXggdG8gYSBwYXJ0aWN1bGFyIG9wX2NhdGNoIGJ5dGVjb2RlIG9m
ZnNldC4gQnkgY29udmVudGlvbiwKICAgICAvLyBpdCdsbCBuZXZlciBoYXZlIHplcm8gYXMgYSBr
ZXkgYmVjYXVzZSB3ZSB1c2UgemVybyB0byBtZWFuIHRoZSBvcF9lbnRlciBlbnRyeXBvaW50Lgot
ICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hC
eXRlY29kZU9mZnNldDsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBCeXRlY29kZUluZGV4PiBtX2Vu
dHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZUluZGV4OwogCiAgICAgSGFzaFNldDxTdHJpbmc+
IG1fbG9jYWxTdHJpbmdzOwogICAgIEhhc2hNYXA8Y29uc3QgU3RyaW5nSW1wbCosIFN0cmluZz4g
bV9jb3BpZWRTdHJpbmdzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAK
aW5kZXggYzViY2Q0ZTNkM2QyYzVlMDM5MmI4YzI4MjhiY2Q3Y2ExMzYzMzVlNC4uN2UyZjllYTI4
NWQyN2Q0MGJkMjMyNTc2MTUzNGNiOTZhMTVkMWE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGUuY3BwCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBKSVRDb2RlOjpjbGVh
ck9TUkVudHJ5QmxvY2tBbmRSZXNldFRocmVzaG9sZHMoQ29kZUJsb2NrICpkZmdDb2RlQmxvY2sp
CiB7IAogICAgIEFTU0VSVChtX29zckVudHJ5QmxvY2spOwogCi0gICAgdW5zaWduZWQgb3NyRW50
cnlCeXRlY29kZSA9IG1fb3NyRW50cnlCbG9jay0+aml0Q29kZSgpLT5mdGxGb3JPU1JFbnRyeSgp
LT5ieXRlY29kZUluZGV4KCk7CisgICAgQnl0ZWNvZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlID0g
bV9vc3JFbnRyeUJsb2NrLT5qaXRDb2RlKCktPmZ0bEZvck9TUkVudHJ5KCktPmJ5dGVjb2RlSW5k
ZXgoKTsKICAgICBtX29zckVudHJ5QmxvY2suY2xlYXIoKTsKICAgICBvc3JFbnRyeVJldHJ5ID0g
MDsKICAgICB0aWVyVXBFbnRyeVRyaWdnZXJzLnNldChvc3JFbnRyeUJ5dGVjb2RlLCBKSVRDb2Rl
OjpUcmlnZ2VyUmVhc29uOjpEb250VHJpZ2dlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZS5oCmluZGV4IGJiOGY1MGFjYTY1ODVjYzA1YzM2NmUzZmZlZWI4Y2YzNWEzMDlmZDIu
LmEwMDAwMmI2ODIwYjQyMzlkNmYyZDNhYzIwYzZlZDkwM2FhOWY3MjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBD
b21tb25EYXRhKiBkZmdDb21tb24oKSBvdmVycmlkZTsKICAgICBKSVRDb2RlKiBkZmcoKSBvdmVy
cmlkZTsKICAgICAKLSAgICBPU1JFbnRyeURhdGEqIGFwcGVuZE9TUkVudHJ5RGF0YSh1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBDb2RlTG9jYXRpb25MYWJlbDxPU1JFbnRyeVB0clRhZz4gbWFjaGlu
ZUNvZGUpCisgICAgT1NSRW50cnlEYXRhKiBhcHBlbmRPU1JFbnRyeURhdGEoQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4LCBDb2RlTG9jYXRpb25MYWJlbDxPU1JFbnRyeVB0clRhZz4gbWFjaGlu
ZUNvZGUpCiAgICAgewogICAgICAgICBERkc6Ok9TUkVudHJ5RGF0YSBlbnRyeTsKICAgICAgICAg
ZW50cnkubV9ieXRlY29kZUluZGV4ID0gYnl0ZWNvZGVJbmRleDsKQEAgLTYzLDkgKzYzLDkgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gJm9zckVudHJ5Lmxhc3QoKTsKICAgICB9CiAgICAgCi0g
ICAgT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpCisgICAgT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGFGb3JCeXRlY29kZUlu
ZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0
cnlCaW5hcnlTZWFyY2g8T1NSRW50cnlEYXRhLCB1bnNpZ25lZD4oCisgICAgICAgIHJldHVybiB0
cnlCaW5hcnlTZWFyY2g8T1NSRW50cnlEYXRhLCBCeXRlY29kZUluZGV4PigKICAgICAgICAgICAg
IG9zckVudHJ5LCBvc3JFbnRyeS5zaXplKCksIGJ5dGVjb2RlSW5kZXgsCiAgICAgICAgICAgICBn
ZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KTsKICAgICB9CkBAIC0xNTEsMTAgKzE1MSwxMCBA
QCBwdWJsaWM6CiAgICAgLy8KICAgICAvLyBUaGUga2V5IG1heSBub3QgYWx3YXlzIGJlIGEgdGFy
Z2V0IGZvciBPU1IgRW50cnkgYnV0IHRoZSBsaXN0IGluIHRoZSB2YWx1ZSBpcyBndWFyYW50ZWVk
CiAgICAgLy8gdG8gYmUgdXNhYmxlIGZvciBPU1IgRW50cnkuCi0gICAgSGFzaE1hcDx1bnNpZ25l
ZCwgVmVjdG9yPHVuc2lnbmVkPj4gdGllclVwSW5Mb29wSGllcmFyY2h5OworICAgIEhhc2hNYXA8
Qnl0ZWNvZGVJbmRleCwgVmVjdG9yPEJ5dGVjb2RlSW5kZXg+PiB0aWVyVXBJbkxvb3BIaWVyYXJj
aHk7CiAKICAgICAvLyBNYXAgZWFjaCBieXRlY29kZSBvZiBDaGVja1RpZXJVcEFuZE9TUkVudGVy
IHRvIGl0cyBzdHJlYW0gaW5kZXguCi0gICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQsIFdU
Rjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
dW5zaWduZWQ+PiBieXRlY29kZUluZGV4VG9TdHJlYW1JbmRleDsKKyAgICBIYXNoTWFwPEJ5dGVj
b2RlSW5kZXgsIHVuc2lnbmVkPiBieXRlY29kZUluZGV4VG9TdHJlYW1JbmRleDsKIAogICAgIGVu
dW0gY2xhc3MgVHJpZ2dlclJlYXNvbiA6IHVpbnQ4X3QgewogICAgICAgICBEb250VHJpZ2dlciwK
QEAgLTE2NSw3ICsxNjUsNyBAQCBwdWJsaWM6CiAgICAgLy8gTWFwIGVhY2ggYnl0ZWNvZGUgb2Yg
Q2hlY2tUaWVyVXBBbmRPU1JFbnRlciB0byBpdHMgdHJpZ2dlciBmb3JjaW5nIE9TUiBFbnRyeS4K
ICAgICAvLyBUaGlzIGNhbiBuZXZlciBiZSBtb2RpZmllZCBhZnRlciBpdCBoYXMgYmVlbiBpbml0
aWFsaXplZCBzaW5jZSB0aGUgYWRkcmVzc2VzIG9mIHRoZSB0cmlnZ2VycwogICAgIC8vIGFyZSB1
c2VkIGJ5IHRoZSBKSVQuCi0gICAgSGFzaE1hcDx1bnNpZ25lZCwgVHJpZ2dlclJlYXNvbj4gdGll
clVwRW50cnlUcmlnZ2VyczsKKyAgICBIYXNoTWFwPEJ5dGVjb2RlSW5kZXgsIFRyaWdnZXJSZWFz
b24+IHRpZXJVcEVudHJ5VHJpZ2dlcnM7CiAKICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBt
X29zckVudHJ5QmxvY2s7CiAgICAgdW5zaWduZWQgb3NyRW50cnlSZXRyeTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKaW5kZXggMDEwNjNjZTZiYjQ3ODUx
ZWYxM2M5MmI2YTgwZTJkMjBhODgxMTE2Ny4uOTI3NDBhNjUyNjlhMjQ0MWIyMGJkYzY4MmNiZTRl
YTc2YmU3NTQ5OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgSklUQ29tcGlsZXI6OkpJVENvbXBpbGVyKEdyYXBoJiBk
ZmcpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxEaXNhc3NlbWJsZXI+KGRm
Zyk7CiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgbV9qaXRDb2RlLT50aWVyVXBJbkxvb3BIaWVy
YXJjaHkgPSBXVEZNb3ZlKG1fZ3JhcGgubV9wbGFuLnRpZXJVcEluTG9vcEhpZXJhcmNoeSgpKTsK
LSAgICBmb3IgKHVuc2lnbmVkIHRpZXJVcEJ5dGVjb2RlIDogbV9ncmFwaC5tX3BsYW4udGllclVw
QW5kT1NSRW50ZXJCeXRlY29kZXMoKSkKKyAgICBmb3IgKEJ5dGVjb2RlSW5kZXggdGllclVwQnl0
ZWNvZGUgOiBtX2dyYXBoLm1fcGxhbi50aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2RlcygpKQogICAg
ICAgICBtX2ppdENvZGUtPnRpZXJVcEVudHJ5VHJpZ2dlcnMuYWRkKHRpZXJVcEJ5dGVjb2RlLCBK
SVRDb2RlOjpUcmlnZ2VyUmVhc29uOjpEb250VHJpZ2dlcik7CiAjZW5kaWYKIH0KQEAgLTM3NCw3
ICszNzQsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlKCkKICAgICAvLyB3ZSBuZWVkIHRv
IGNhbGwgb3V0IHRvIGEgaGVscGVyIGZ1bmN0aW9uIHRvIHRocm93IHRoZSBTdGFja092ZXJmbG93
RXJyb3IuCiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFN0b3JlQ29k
ZU9yaWdpbihDb2RlT3JpZ2luKDApKTsKKyAgICBlbWl0U3RvcmVDb2RlT3JpZ2luKENvZGVPcmln
aW4oQnl0ZWNvZGVJbmRleCgwKSkpOwogCiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90
PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CkBAIC00NTAsNyArNDUwLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkK
ICAgICAvLyB3ZSBuZWVkIHRvIGNhbGwgb3V0IHRvIGEgaGVscGVyIGZ1bmN0aW9uIHRvIHRocm93
IHRoZSBTdGFja092ZXJmbG93RXJyb3IuCiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRoaXMpOwog
Ci0gICAgZW1pdFN0b3JlQ29kZU9yaWdpbihDb2RlT3JpZ2luKDApKTsKKyAgICBlbWl0U3RvcmVD
b2RlT3JpZ2luKENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwogCiAgICAgaWYgKG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1z
dGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CkBAIC00NzEsMTQgKzQ3MSwxNCBAQCB2b2lkIEpJVENvbXBpbGVy
Ojpjb21waWxlRnVuY3Rpb24oKQogCiAgICAgICAgIGxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnBh
eWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwg
R1BSSW5mbzo6cmVnVDEpOwogICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIEdQUkluZm86
OnJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtU
byhmcm9tQXJpdHlDaGVjaywgdGhpcyk7Ci0gICAgICAgIGVtaXRTdG9yZUNvZGVPcmlnaW4oQ29k
ZU9yaWdpbigwKSk7CisgICAgICAgIGVtaXRTdG9yZUNvZGVPcmlnaW4oQ29kZU9yaWdpbihCeXRl
Y29kZUluZGV4KDApKSk7CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
ICAgICAgICAgbV9zcGVjdWxhdGl2ZS0+Y2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFj
a09uRXhjZXB0aW9uKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25z
dHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIEdQUkluZm86OnJlZ1Qw
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogICAgICAgICBpZiAobWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAg
ICBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhmcm9t
QXJpdHlDaGVjaywgdGhpcyk7Ci0gICAgICAgIGVtaXRTdG9yZUNvZGVPcmlnaW4oQ29kZU9yaWdp
bigwKSk7CisgICAgICAgIGVtaXRTdG9yZUNvZGVPcmlnaW4oQ29kZU9yaWdpbihCeXRlY29kZUlu
ZGV4KDApKSk7CiAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGNhbGxBcml0eUZpeHVwID0gbmVhckNhbGwoKTsKICAg
ICAgICAganVtcChmcm9tQXJpdHlDaGVjayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgKaW5kZXggMDhkZmI4ZGMyYmU2Njc4MTFlZDY3Y2NiYzE5MDg2OGIwMmRk
ZmE5OS4uNmExMzlkMjg1YWEyZjU4NzhlOTM3ZWVkNjRmYjk2ZmU0MTlkZmMyYSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaApAQCAtOTgsNyArOTgsNyBAQCBw
dWJsaWM6CiAgICAgLy8gTWV0aG9kcyB0byBzZXQgbGFiZWxzIGZvciB0aGUgZGlzYXNzZW1ibGVy
LgogICAgIHZvaWQgc2V0U3RhcnRPZkNvZGUoKQogICAgIHsKLSAgICAgICAgbV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgQ29k
ZU9yaWdpbigwLCBudWxscHRyKSk7CisgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
LmFwcGVuZEl0ZW0obGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCksIENvZGVPcmlnaW4oQnl0ZWNv
ZGVJbmRleCgwKSkpOwogICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fzc2VtYmxlcikpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9mQ29kZShs
YWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBo
YXNlLmNwcAppbmRleCA5ZWI0NmNhNWE4OGQzYjcwYTg5OGQxZWNmMjk5ZjEzMWRhYTNlNjAwLi40
MmY2OGFkYTMyNDc4YTExNzFjZWFkMGY5M2UwOGFjMjVjYTYzMTM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFi
bGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKQEAgLTEyNSwxNyArMTI1LDE3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGlmIChvcmlnaW4gPT0gY2FjaGVkQ29kZU9yaWdpbikKICAgICAgICAgICAgICAg
ICByZXR1cm4gY2FjaGVkSGFuZGxlclJlc3VsdDsKIAotICAgICAgICAgICAgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleFRvQ2hlY2sgPSBvcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4VG9DaGVjayA9IG9yaWdpbi5ieXRlY29kZUluZGV4
KCk7CiAKICAgICAgICAgICAgIGNhY2hlZENvZGVPcmlnaW4gPSBvcmlnaW47CiAKICAgICAgICAg
ICAgIHdoaWxlICgxKSB7CiAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUgPSBvcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNh
bGxGcmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29k
ZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleFRvQ2hlY2spKSB7
CisgICAgICAgICAgICAgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5o
YW5kbGVyRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4VG9DaGVjaykpIHsKICAgICAgICAg
ICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmNsZWFyQWxsKCk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgY2F0Y2hCeXRlY29kZUluZGV4ID0gaGFuZGxlci0+dGFyZ2V0OworICAg
ICAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhdGNoQnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoaGFuZGxlci0+dGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5m
b3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJbmRleCwg
aW5saW5lQ2FsbEZyYW1lKSwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQudG9Mb2NhbCgpXSA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmNwcAppbmRleCBkOTM5ZDMwM2QyNGE2MjM5MDQ3MTZmZjI3ZmUwMzMyZmE3OTQ3
ZmUzLi40NjJkNjgyZDI3YTgwNjhlYWExNWVkYTIwZGUyNzA1OTg5OGQ5NzExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcApAQCAtNDIsNyArNDIsNyBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgT1NSRW50cnlEYXRhOjpkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewot
ICAgIG91dC5wcmludCgiYmMjIiwgbV9ieXRlY29kZUluZGV4LCAiLCBtYWNoaW5lIGNvZGUgPSAi
LCBSYXdQb2ludGVyKG1fbWFjaGluZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIG91
dC5wcmludChtX2J5dGVjb2RlSW5kZXgsICIsIG1hY2hpbmUgY29kZSA9ICIsIFJhd1BvaW50ZXIo
bV9tYWNoaW5lQ29kZS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgb3V0LnByaW50KCIsIHN0
YWNrIHJ1bGVzID0gWyIpOwogICAgIAogICAgIGF1dG8gcHJpbnRPcGVyYW5kID0gWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSB7CkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgT1NSRW50cnlEYXRhOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB9CiAKIFNVUFBSRVNTX0FTQU4KLXZvaWQqIHBy
ZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK3ZvaWQqIHByZXBhcmVPU1JFbnRyeShW
TSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpKTsKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0m
IHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbgog
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgZGF0YUxvZygKICAgICAg
ICAgICAgICJERkcgT1NSIGluICIsICpjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksICIgLT4gIiwg
KmNvZGVCbG9jaywKLSAgICAgICAgICAgICIgZnJvbSBiYyMiLCBieXRlY29kZUluZGV4LCAiXG4i
KTsKKyAgICAgICAgICAgICIgZnJvbSAiLCBieXRlY29kZUluZGV4LCAiXG4iKTsKICAgICB9CiAg
ICAgCiAgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKQEAgLTMyOSw4ICszMjksOCBAQCB2b2lk
KiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIHVuc2lnbgogICAgIHJldHVybiBzY3JhdGNoOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NSRW50cnko
Vk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpCi17IAorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+IHByZXBhcmVDYXRjaE9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgp
Cit7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCB8
fCBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpGVExKSVQpOwogICAgIEFTU0VSVChj
b2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKQEAgLTM4
MCw3ICszODAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRh
Zz4gcHJlcGFyZUNhdGNoT1NSRW50cnkoVk0mIHZtLCBDYWxsRgogICAgIGlmIChVTkxJS0VMWSgh
dm0uZW5zdXJlU3RhY2tDYXBhY2l0eUZvcigmY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVt2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChmcmFtZVNpemVGb3JDaGVjaykub2Zmc2V0KCldKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBpbnN0cnVjdGlvbiA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7
CisgICAgYXV0byBpbnN0cnVjdGlvbiA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3RydWN0
aW9ucygpLmF0KGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpKTsKICAgICBBU1NFUlQoaW5zdHJ1
Y3Rpb24tPmlzPE9wQ2F0Y2g+KCkpOwogICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIq
IGJ1ZmZlciA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpLm1ldGFkYXRhKGNhbGxGcmFtZSku
bV9idWZmZXI7CiAgICAgSlNWYWx1ZSogZGF0YUJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNW
YWx1ZSo+KGRmZ0NvbW1vbi0+Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAppbmRleCBkODE2NzdhMWMyY2U1YmI3
NmU4YmM0MzJkNzllYmZmODc4ZGYzYTRkLi5jZjk2ZDcxOGFkN2I0ZWFmMjM0MWEzZGQ1YTBlMzNl
NTUxNTZmNzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCkBAIC01
Myw3ICs1Myw3IEBAIHN0cnVjdCBPU1JFbnRyeVJlc2h1ZmZsaW5nIHsKIH07CiAKIHN0cnVjdCBP
U1JFbnRyeURhdGEgewotICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAgICBCeXRlY29k
ZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxPU1JFbnRyeVB0
clRhZz4gbV9tYWNoaW5lQ29kZTsKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiBtX2V4cGVj
dGVkVmFsdWVzOwogICAgIC8vIFVzZSBiaXR2ZWN0b3JzIGhlcmUgYmVjYXVzZSB0aGV5IHRlbmQg
dG8gb25seSByZXF1aXJlIG9uZSB3b3JkLgpAQCAtNjYsNyArNjYsNyBAQCBzdHJ1Y3QgT1NSRW50
cnlEYXRhIHsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIH07CiAKLWlubGlu
ZSB1bnNpZ25lZCBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSogb3Ny
RW50cnlEYXRhKQoraW5saW5lIEJ5dGVjb2RlSW5kZXggZ2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJ
bmRleChPU1JFbnRyeURhdGEqIG9zckVudHJ5RGF0YSkKIHsKICAgICByZXR1cm4gb3NyRW50cnlE
YXRhLT5tX2J5dGVjb2RlSW5kZXg7CiB9CkBAIC03NiwxNyArNzYsMTcgQEAgc3RydWN0IENhdGNo
RW50cnlwb2ludERhdGEgewogICAgIC8vIGFyZSBvZiB0aGUgZXhwZWN0ZWQgdHlwZSBiZWZvcmUg
ZW50ZXJpbmcgYXQgYSBjYXRjaCBibG9jay4KICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhj
ZXB0aW9uSGFuZGxlclB0clRhZz4gbWFjaGluZUNvZGU7CiAgICAgVmVjdG9yPEZsdXNoRm9ybWF0
PiBhcmd1bWVudEZvcm1hdHM7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKKyAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiB9OwogCiAvLyBSZXR1cm5zIGEgcG9pbnRlciB0byBh
IGRhdGEgYnVmZmVyIHRoYXQgdGhlIE9TUiBlbnRyeSB0aHVuayB3aWxsIHJlY29nbml6ZSBhbmQK
IC8vIHBhcnNlLiBJZiB0aGlzIHJldHVybnMgbnVsbCwgaXQgbWVhbnMgCi12b2lkKiBwcmVwYXJl
T1NSRW50cnkoVk0mLCBDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KTsKK3ZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYsIENhbGxGcmFtZSosIENvZGVCbG9jayos
IEJ5dGVjb2RlSW5kZXgpOwogCiAvLyBJZiBudWxsIGlzIHJldHVybmVkLCB3ZSBjYW4ndCBPU1Ig
ZW50ZXIuIElmIGl0J3Mgbm90IG51bGwsIGl0J3MgdGhlIFBDIHRvIGp1bXAgdG8uCi1NYWNyb0Fz
c2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NSRW50
cnkoVk0mLCBDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsK
K01hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0
Y2hPU1JFbnRyeShWTSYsIENhbGxGcmFtZSosIENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgpOwog
I2Vsc2UKLWlubGluZSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRh
Zz4gcHJlcGFyZU9TUkVudHJ5KFZNJiwgQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQp
IHsgcmV0dXJuIG51bGxwdHI7IH0KK2lubGluZSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZU9TUkVudHJ5KFZNJiwgQ2FsbEZyYW1lKiwgQ29kZUJs
b2NrKiwgQnl0ZWNvZGVJbmRleCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKaW5kZXggOWU2Y2M2ZmQz
OWM1MDJmMWQ3MjA1MTFkMDQ3ZWY1OWJlN2FhZWM0ZC4uZGM3NmJjYmFlZDQxZWVlMDYzZGZkYmVh
ODQ1MDY2NTUzZDBjYjRkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKQEAgLTUwLDEwICs1MCwx
MCBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9wbGFuLm1vZGUo
KSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBo
Lm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CiAKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCA9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleCgpOworICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBtX2dyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2Rl
SW5kZXgoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgpOwotICAgICAgICAKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisKICAgICAgICAg
Ly8gTmVlZGVkIGJ5IGNyZWF0ZVByZUhlYWRlcigpLgogICAgICAgICBtX2dyYXBoLmVuc3VyZUNQ
U0RvbWluYXRvcnMoKTsKICAgICAgICAgCkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgQmFzaWNCbG9jayogbmV3Um9vdCA9IGluc2VydGlvblNldC5pbnNlcnQoMCwgMSk7CiAKICAg
ICAgICAgLy8gV2UnZCByZWFsbHkgbGlrZSB0byB1c2UgYW4gdW5zZXQgb3JpZ2luLCBidXQgVGhy
ZWFkZWRDUFMgd29uJ3QgYWxsb3cgdGhhdC4KLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBO
b2RlT3JpZ2luKENvZGVPcmlnaW4oMCksIENvZGVPcmlnaW4oMCksIGZhbHNlKTsKKyAgICAgICAg
Tm9kZU9yaWdpbiBvcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgw
KSksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSksIGZhbHNlKTsKICAgICAgICAgCiAgICAg
ICAgIFZlY3RvcjxOb2RlKj4gbG9jYWxzKGJhc2VsaW5lLT5udW1DYWxsZWVMb2NhbHMoKSk7CiAg
ICAgICAgIGZvciAoaW50IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNlbGluZS0+bnVtQ2FsbGVlTG9j
YWxzKCk7ICsrbG9jYWwpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
CmluZGV4IGFjNmI5Y2RhNTg1YzEwZmU1ZDA5ZjJiZmZkZjY0NjBjZTQ5OTUzZWEuLmQwZTBhNWZj
ZGY0NTE0MWZiOGZjMzViOTY0NjgyMjdjOTNiMmJlMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtNDA1LDcgKzQwNSw3IEBAIHZvaWQgT1NSRXhpdDo6ZXhl
Y3V0ZU9TUkV4aXQoQ29udGV4dCYgY29udGV4dCkKICAgICAgICAgYm9vbCBleGl0VG9MTEludCA9
IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKICAgICAgICAgdm9pZCoganVtcFRh
cmdldDsKICAgICAgICAgaWYgKGV4aXRUb0xMSW50KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAg
ICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5i
eXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudElu
c3RydWN0aW9uID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2Rl
T2Zmc2V0KS5wdHIoKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1
cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24u
ZXhlY3V0YWJsZUFkZHJlc3MoKTsgICAgCkBAIC03ODYsNyArNzg2LDcgQEAgc3RhdGljIHZvaWQg
cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIG91dGVy
bW9zdEJhc2VsaW4KICAgICAgICAgICAgIGNhbGxlckZyYW1lID0gZnJhbWUuZ2V0PHZvaWQqPihD
YWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29k
ZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9z
dEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNhbGxCeXRlY29kZUlu
ZGV4ID0gdHJ1ZUNhbGxlci0+Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgQnl0ZWNvZGVJ
bmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IHRydWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsKICAg
ICAgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5QQyhiYXNlbGluZUNvZGVC
bG9ja0ZvckNhbGxlciwgY2FsbEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxsZXJDYWxsS2luZCwgY2Fs
bGVySXNMTEludCk7CiAKICAgICAgICAgICAgIGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJh
bWUoKSkKQEAgLTg4MSwxMyArODgxLDEzIEBAIHN0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1Rh
cmdldChDb250ZXh0JiBjb250ZXh0LCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrCiAKICAg
ICBpZiAoZXhpdFN0YXRlLT5pc0p1bXBUb0xMSW50KSB7CiAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2Rl
QmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7
Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJs
b2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVPZmZzZXQpLnB0cigpOworICAg
ICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCk7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rp
b24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCku
cHRyKCk7CiAKICAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFU
YWJsZUdQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tGb3JFeGl0LT5tZXRh
ZGF0YVRhYmxlKCkpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGNvbnRleHQuZ3ByKExM
SW50OjpSZWdpc3RlcnM6OnBiR1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9j
a0ZvckV4aXQtPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSk7Ci0gICAgICAgIGNvbnRleHQuZ3By
KExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oZXhpdC5t
X2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6
OlJlZ2lzdGVyczo6cGNHUFIpID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCkpOwogI2Vsc2UKICAgICAgICAgY29udGV4dC5n
cHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oJmN1
cnJlbnRJbnN0cnVjdGlvbik7CiAjZW5kaWYKQEAgLTkwNSwxMCArOTA1LDEwIEBAIHN0YXRpYyB2
b2lkIHByaW50T1NSRXhpdChDb250ZXh0JiBjb250ZXh0LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgs
IGNvbnN0IE9TUkV4aXQmCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwogICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCk7CiAgICAgRXhpdEtpbmQga2luZCA9IGV4aXQubV9raW5kOwotICAgIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCk7CiAKICAgICBkYXRhTG9nKCJTcGVjdWxhdGlvbiBmYWlsdXJlIGluICIsICpjb2Rl
QmxvY2spOwotICAgIGRhdGFMb2coIiBAIGV4aXQgIyIsIG9zckV4aXRJbmRleCwgIiAoYmMjIiwg
Ynl0ZWNvZGVPZmZzZXQsICIsICIsIGV4aXRLaW5kVG9TdHJpbmcoa2luZCksICIpIHdpdGggIik7
CisgICAgZGF0YUxvZygiIEAgZXhpdCAjIiwgb3NyRXhpdEluZGV4LCAiICgiLCBieXRlY29kZU9m
ZnNldCwgIiwgIiwgZXhpdEtpbmRUb1N0cmluZyhraW5kKSwgIikgd2l0aCAiKTsKICAgICBpZiAo
YWx0ZXJuYXRpdmUpIHsKICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICJleGVjdXRlQ291
bnRlciA9ICIsIGFsdGVybmF0aXZlLT5qaXRFeGVjdXRlQ291bnRlcigpLApAQCAtMTExMyw3ICsx
MTEzLDcgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0m
IHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdAogICAgICAgICBTcGVjdWxhdGlvbkZhaWx1
cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87
CiAgICAgICAgIGRlYnVnSW5mby0+Y29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOwogICAgICAg
ICBkZWJ1Z0luZm8tPmtpbmQgPSBleGl0Lm1fa2luZDsKLSAgICAgICAgZGVidWdJbmZvLT5ieXRl
Y29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAg
ZGVidWdJbmZvLT5ieXRlY29kZUluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpOwogCiAgICAgICAgIGppdC5kZWJ1Z0NhbGwodm0sIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVj
dWxhdGlvbkZhaWx1cmUsIGRlYnVnSW5mbyk7CiAgICAgfQpAQCAtMTY3MCw3ICsxNjcwLDcgQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlv
bkZhaWx1cmUoQ2FsbEZyYW1lKiBjYWwKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGRlYnVn
SW5mby0+Y29kZUJsb2NrOwogICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2st
PmFsdGVybmF0aXZlKCk7CiAgICAgZGF0YUxvZygiU3BlY3VsYXRpb24gZmFpbHVyZSBpbiAiLCAq
Y29kZUJsb2NrKTsKLSAgICBkYXRhTG9nKCIgQCBleGl0ICMiLCB2bS5vc3JFeGl0SW5kZXgsICIg
KGJjIyIsIGRlYnVnSW5mby0+Ynl0ZWNvZGVPZmZzZXQsICIsICIsIGV4aXRLaW5kVG9TdHJpbmco
ZGVidWdJbmZvLT5raW5kKSwgIikgd2l0aCAiKTsKKyAgICBkYXRhTG9nKCIgQCBleGl0ICMiLCB2
bS5vc3JFeGl0SW5kZXgsICIgKCIsIGRlYnVnSW5mby0+Ynl0ZWNvZGVJbmRleCwgIiwgIiwgZXhp
dEtpbmRUb1N0cmluZyhkZWJ1Z0luZm8tPmtpbmQpLCAiKSB3aXRoICIpOwogICAgIGlmIChhbHRl
cm5hdGl2ZSkgewogICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgImV4ZWN1dGVDb3VudGVy
ID0gIiwgYWx0ZXJuYXRpdmUtPmppdEV4ZWN1dGVDb3VudGVyKCksCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5oCmluZGV4IDI1NzA0ZDJjYjk4MGFlMjI0MmRkMWZmZTY5M2I0Yzdk
OThiYjNjMmIuLmQxZmM1ZjFmNmI0MDAwYmQ3ZGNlZjMzNzI3ZDZjOTY3ZTFiNTE1YmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCkBAIC0xNzYsNyArMTc2LDcgQEAgc3Ry
dWN0IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZB
U1RfQUxMT0NBVEVEOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrOwogICAgIEV4aXRLaW5kIGtp
bmQ7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQ7CisgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmlu
ZGV4IDIyZGU5ZTYxYmYwMjMxNmFhYmQyYjEwYzVhNjAxZTNlNGY3N2QwZjguLjU0ODc3YjkxZDBi
ZmQ0ZjE4NDkxMDQxNjlmNzVjMTlmMzMzNDU0NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTEzOCw3ICsx
MzgsNyBAQCB2b2lkIGhhbmRsZUV4aXRDb3VudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9T
UkV4aXRCYXNlJiBleGl0KQogICAgIGRvbmVBZGp1c3RpbmcubGluaygmaml0KTsKIH0KIAotdm9p
ZCogY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwg
dW5zaWduZWQgY2FsbEJ5dGVjb2RlSW5kZXgsIElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVlQ2Fs
bGVyQ2FsbEtpbmQsIGJvb2wmIGNhbGxlcklzTExJbnQpCit2b2lkKiBjYWxsZXJSZXR1cm5QQyhD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBCeXRlY29kZUluZGV4IGNhbGxC
eXRlY29kZUluZGV4LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQgdHJ1ZUNhbGxlckNhbGxLaW5kLCBi
b29sJiBjYWxsZXJJc0xMSW50KQogewogICAgIGNhbGxlcklzTExJbnQgPSBPcHRpb25zOjpmb3Jj
ZU9TUkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmppdFR5cGUo
KSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogCkBAIC0yNjMsNyArMjYzLDcgQEAgdm9p
ZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0
QmFzZSYgZXhpdCkKICAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6cmVnVDM7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGNhbGxCeXRlY29kZUluZGV4ID0gdHJ1ZUNhbGxlci0+Ynl0ZWNv
ZGVJbmRleCgpOworICAgICAgICAgICAgYXV0byBjYWxsQnl0ZWNvZGVJbmRleCA9IHRydWVDYWxs
ZXItPmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxs
ZXJSZXR1cm5QQyhiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgY2FsbEJ5dGVjb2RlSW5kZXgs
IHRydWVDYWxsZXJDYWxsS2luZCwgY2FsbGVySXNMTEludCk7CiAKICAgICAgICAgICAgIGlmICh0
cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUoKSkgewpAQCAtMzgyLDggKzM4Miw4IEBAIHZvaWQg
YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9T
UkV4aXRCYXNlJiBleGl0KQogICAgIHZvaWQqIGp1bXBUYXJnZXQ7CiAgICAgYm9vbCBleGl0VG9M
TEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKICAgICBpZiAoZXhpdFRv
TExJbnQpIHsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNv
ZGVPZmZzZXQpLnB0cigpOworICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0
ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBkZXN0aW5hdGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1
cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVy
KCkpIHsKQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYg
dm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPm1l
dGFkYXRhVGFibGUoKSksIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBMTEludDo6
UmVnaXN0ZXJzOjpwYkdQUik7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOworICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOwogI2Vsc2UKICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjdXJyZW50SW5zdHJ1Y3Rpb24pLCBMTEludDo6
UmVnaXN0ZXJzOjpwY0dQUik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oCmluZGV4IDBjYWViMDBmM2FlMjk4MDU4
N2NmYjEwOTM5YzQ5YzViMjA5YWRkMmEuLjRmYzk5NmYwMGQwY2IyODhhOGY0NDlmYWM1MjVlYzlm
YzVjOTMyZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uaApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiB2b2lkIGhhbmRsZUV4aXRDb3VudHMoQ0NhbGxIZWxwZXJzJiwgY29uc3Qg
T1NSRXhpdEJhc2UmKTsKIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMm
LCBjb25zdCBPU1JFeGl0QmFzZSYpOwogdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mLCBD
Q2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0QmFzZSYpOwotdm9pZCogY2FsbGVyUmV0dXJuUEMo
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgdW5zaWduZWQgY2FsbEJ5dGVj
b2RlT2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQgY2FsbGVyS2luZCwgYm9vbCYgY2FsbGVy
SXNMTEludCk7Cit2b2lkKiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyLCBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4LCBJbmxpbmVDYWxs
RnJhbWU6OktpbmQgY2FsbGVyS2luZCwgYm9vbCYgY2FsbGVySXNMTEludCk7CiBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MgY2FsbGVlU2F2ZVNsb3QoSW5saW5lQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9jaywgR1BSUmVnIGNhbGxlZVNhdmUpOwogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgSklUQ29kZVR5cGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAppbmRleCBkNjIyZWI3MjMxNDJmY2ZkMzdjNWU5YjhkZWEwZWI1MGQxZTRiOTNjLi42YWVl
NTU0MjczNTcyNmI2MDQxYTQ3NjgwYTM1ZTM1NWU2MzQ5YmY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTM1ODMsNyArMzU4Myw3IEBAIHN0YXRp
YyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVudENvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSklUQ29kZSoKICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgInRy
aWdnZXJGVExSZXBsYWNlbWVudCIsICgpKTsKICAgICAvLyBXZSBuZWVkIHRvIGNvbXBpbGUgdGhl
IGNvZGUuCiAgICAgY29tcGlsZSgKLSAgICAgICAgdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1l
bnQoKSwgY29kZUJsb2NrLCBGVExNb2RlLCBVSU5UX01BWCwKKyAgICAgICAgdm0sIGNvZGVCbG9j
ay0+bmV3UmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLCBGVExNb2RlLCBCeXRlY29kZUluZGV4KCks
CiAgICAgICAgIE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PigpLCBUb0ZUTERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCkpOwogCiAgICAgLy8gSWYgd2UgcmVhY2hlZCBoZXJl
LCB0aGUgY291bnRlciBoYXMgbm90IGJlIHJlc2V0LiBEbyB0aGF0IG5vdy4KQEAgLTM2MzcsNyAr
MzYzNyw3IEBAIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KFZNKiB2bVBvaW50
ZXIpCiAgICAgfQogfQogCi1zdGF0aWMgY2hhciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkIG9yaWdpbkJ5dGVjb2RlSW5kZXgsIGJvb2wgY2FuT1NS
RW50ZXJIZXJlKQorc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihWTSYgdm0sIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBCeXRlY29kZUluZGV4IG9yaWdpbkJ5dGVjb2RlSW5kZXgsIGJvb2wgY2FuT1NS
RW50ZXJIZXJlKQogewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKIApAQCAtMzY5MCw3ICszNjkwLDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1v
bihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1bnNpZ25lZCBvcmlnaW5CeXRlY29kZUkK
ICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJPU1IgZW50cnk6IEZyb20gIiwgUmF3UG9pbnRlcihqaXRDb2RlKSwg
IiBnb3QgZW50cnkgYmxvY2sgIiwgUmF3UG9pbnRlcihlbnRyeUJsb2NrKSwgIlxuIik7CiAgICAg
ICAgICAgICAgICAgaWYgKHZvaWQqIGFkZHJlc3MgPSBGVEw6OnByZXBhcmVPU1JFbnRyeSh2bSwg
Y2FsbEZyYW1lLCBjb2RlQmxvY2ssIGVudHJ5QmxvY2ssIG9yaWdpbkJ5dGVjb2RlSW5kZXgsIHN0
cmVhbUluZGV4KSkgewotICAgICAgICAgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGVu
dHJ5QmxvY2ssICJvc3JFbnRyeSIsICgiYXQgYmMjIiwgb3JpZ2luQnl0ZWNvZGVJbmRleCkpOwor
ICAgICAgICAgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGVudHJ5QmxvY2ssICJvc3JF
bnRyeSIsICgiYXQgIiwgb3JpZ2luQnl0ZWNvZGVJbmRleCkpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmV0YWdDb2RlUHRyPGNoYXIqPihhZGRyZXNzLCBKU0VudHJ5UHRyVGFnLCBiaXR3
aXNlX2Nhc3Q8UHRyVGFnPihjYWxsRnJhbWUpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CkBAIC0zNzc1LDcgKzM3NzUsNyBAQCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKFZN
JiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkIG9yaWdpbkJ5dGVjb2RlSQogICAg
ICAgICAgICAgLy8gZXhlY3V0aW5nIHRvIGNvbXBpbGUuIFdlIHN0YXJ0IHdpdGggdHJ5aW5nIHRv
IGNvbXBpbGUgb3V0ZXIgbG9vcHMgc2luY2Ugd2UgYmVsaWV2ZSBvdXRlciBsb29wCiAgICAgICAg
ICAgICAvLyBjb21waWxhdGlvbnMgcmV2ZWFsIHRoZSBiZXN0IG9wcG9ydHVuaXRpZXMgZm9yIG9w
dGltaXppbmcgY29kZS4KICAgICAgICAgICAgIGZvciAoYXV0byBpdGVyID0gdGllclVwSGllcmFy
Y2h5RW50cnktPnZhbHVlLnJiZWdpbigpLCBlbmQgPSB0aWVyVXBIaWVyYXJjaHlFbnRyeS0+dmFs
dWUucmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWdu
ZWQgb3NyRW50cnlDYW5kaWRhdGUgPSAqaXRlcjsKKyAgICAgICAgICAgICAgICBCeXRlY29kZUlu
ZGV4IG9zckVudHJ5Q2FuZGlkYXRlID0gKml0ZXI7CiAKICAgICAgICAgICAgICAgICBpZiAoaml0
Q29kZS0+dGllclVwRW50cnlUcmlnZ2Vycy5nZXQob3NyRW50cnlDYW5kaWRhdGUpID09IEpJVENv
ZGU6OlRyaWdnZXJSZWFzb246OlN0YXJ0Q29tcGlsYXRpb24pIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGFscmVhZHkgYXNrZWQgdGhpcyBsb29wIHRvIGNvbXBp
bGUuIElmIHdlJ3ZlIHJlYWNoZWQgaGVyZSwgaXQKQEAgLTM3ODcsNyArMzc4Nyw3IEBAIHN0YXRp
YyBjaGFyKiB0aWVyVXBDb21tb24oVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWdu
ZWQgb3JpZ2luQnl0ZWNvZGVJCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSBh
c2sgdGhlIG91dGVyIHRvIGxvb3AgdG8gaW1tZWRpYXRlbHkgY29tcGlsZSBpdHNlbGYgaWYgcHJv
Z3JhbQogICAgICAgICAgICAgICAgIC8vIGNvbnRyb2wgcmVhY2hlcyBpdC4KICAgICAgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJJbm5lci1sb29wIGJjIyIsIG9yaWdpbkJ5dGVjb2RlSW5kZXgsICIgaW4gIiwgKmNvZGVC
bG9jaywgIiBzZXR0aW5nIHBhcmVudCBsb29wIGJjIyIsIG9zckVudHJ5Q2FuZGlkYXRlLCAiJ3Mg
dHJpZ2dlciBhbmQgYmFja2luZyBvZmYuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiSW5uZXItbG9vcCAiLCBvcmlnaW5CeXRlY29kZUluZGV4LCAiIGluICIsICpjb2RlQmxvY2ss
ICIgc2V0dGluZyBwYXJlbnQgbG9vcCAiLCBvc3JFbnRyeUNhbmRpZGF0ZSwgIidzIHRyaWdnZXIg
YW5kIGJhY2tpbmcgb2ZmLlxuIik7CiAgICAgICAgICAgICAgICAgaml0Q29kZS0+dGllclVwRW50
cnlUcmlnZ2Vycy5zZXQob3NyRW50cnlDYW5kaWRhdGUsIEpJVENvZGU6OlRyaWdnZXJSZWFzb246
OlN0YXJ0Q29tcGlsYXRpb24pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgfQpAQCAtMzgzNyw3ICszODM3LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihW
TSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1bnNpZ25lZCBvcmlnaW5CeXRlY29kZUkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAotICAgIENPREVCTE9DS19MT0dfRVZF
TlQoaml0Q29kZS0+b3NyRW50cnlCbG9jaygpLCAib3NyRW50cnkiLCAoImF0IGJjIyIsIG9yaWdp
bkJ5dGVjb2RlSW5kZXgpKTsKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGppdENvZGUtPm9zckVu
dHJ5QmxvY2soKSwgIm9zckVudHJ5IiwgKCJhdCAiLCBvcmlnaW5CeXRlY29kZUluZGV4KSk7CiAg
ICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBmb3ItZW50cnkgY29tcGlsZSBhbHJlYWR5IHN1
Y2NlZWRlZC4gSW4gdGhhdCBjYXNlIE9TUgogICAgIC8vIGVudHJ5IHdpbGwgc3VjY2VlZCB1bmxl
c3Mgd2UgcmFuIG91dCBvZiBzdGFjay4gSXQncyBub3QgY2xlYXIgd2hhdCB3ZSBzaG91bGQgZG8u
CiAgICAgLy8gV2Ugc2lnbmFsIHRvIHRyeSBhZ2FpbiBhZnRlciBhIHdoaWxlIGlmIHRoYXQgaGFw
cGVucy4KQEAgLTM4NTAsMTMgKzM4NTAsMTQgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihW
TSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1bnNpZ25lZCBvcmlnaW5CeXRlY29kZUkKICAg
ICByZXR1cm4gcmV0YWdDb2RlUHRyPGNoYXIqPihhZGRyZXNzLCBKU0VudHJ5UHRyVGFnLCBiaXR3
aXNlX2Nhc3Q8UHRyVGFnPihjYWxsRnJhbWUpKTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIHRy
aWdnZXJUaWVyVXBOb3dJbkxvb3AoVk0qIHZtUG9pbnRlciwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkKK3ZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93SW5Mb29wKFZNKiB2bVBvaW50
ZXIsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXhCaXRzKQogewogICAgIFZNJiB2bSA9ICp2bVBvaW50
ZXI7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgRGVm
ZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4Ojpmcm9tQml0cyhieXRlY29kZUluZGV4Qml0cyk7CiAKICAgICBz
YW5pdGl6ZVN0YWNrRm9yVk0odm0pOwogCkBAIC0zODg1LDEzICszODg2LDE0IEBAIHZvaWQgSklU
X09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93SW5Mb29wKFZNKiB2bVBvaW50ZXIsIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgpCiAgICAgfQogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJP
U1JFbnRyeU5vdyhWTSogdm1Qb2ludGVyLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorY2hhciog
SklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coVk0qIHZtUG9pbnRlciwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleEJpdHMpCiB7CiAgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBEZWZlckdDRm9yQVdoaWxl
IGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXg6OmZyb21CaXRzKGJ5dGVjb2RlSW5kZXhCaXRzKTsKIAogICAgIHNhbml0aXplU3RhY2tG
b3JWTSh2bSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKaW5k
ZXggNDU3OTZmZmE2ZDA1OTQ4ZmM2NmVkYzUzYzhiMTI0MjYxYjhhMWJhYi4uOTRmNGM4MjJiNTg1
MDQ3OGIyMmZiNzNiYmZiMTg2YWZjZjNjM2I4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmgKQEAgLTMwNCw4ICszMDQsOCBAQCBkb3VibGUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25SYW5kb20oSlNHbG9iYWxPYmplY3QqKTsKIAogI2lmIEVOQUJMRShGVExfSklU
KQogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coVk0qKSBXVEZfSU5URVJOQUw7
Ci12b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vd0luTG9vcChWTSosIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgpIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dl
ck9TUkVudHJ5Tm93KFZNKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3dJbkxvb3AoVk0qLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4Qml0cykgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiB0cmln
Z2VyT1NSRW50cnlOb3coVk0qLCB1bnNpZ25lZCBieXRlY29kZUluZGV4Qml0cykgV1RGX0lOVEVS
TkFMOwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogCiB9IC8vIGV4dGVybiAiQyIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCmluZGV4IDMwMDBjMzE5YzZjOGRjNWY3YmE1YTk3
MzU1NDAzMWI4ZmNiYzE0ZGIuLmQ0MWEzZDQ5OTdjMThhYTU2YTNkMjk4ODk0OWJlNTFjNDZmNDdl
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcApAQCAtMTM0LDcgKzEzNCw3
IEBAIFByb2ZpbGVyOjpDb21waWxhdGlvbktpbmQgcHJvZmlsZXJDb21waWxhdGlvbktpbmRGb3JN
b2RlKENvbXBpbGF0aW9uTW9kZSBtb2RlKQogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKIFBs
YW46OlBsYW4oQ29kZUJsb2NrKiBwYXNzZWRDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRE
RkdDb2RlQmxvY2ssCi0gICAgQ29tcGlsYXRpb25Nb2RlIG1vZGUsIHVuc2lnbmVkIG9zckVudHJ5
Qnl0ZWNvZGVJbmRleCwKKyAgICBDb21waWxhdGlvbk1vZGUgbW9kZSwgQnl0ZWNvZGVJbmRleCBv
c3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1
ZT4+JiBtdXN0SGFuZGxlVmFsdWVzKQogICAgIDogbV9tb2RlKG1vZGUpCiAgICAgLCBtX3ZtKCZw
YXNzZWRDb2RlQmxvY2stPnZtKCkpCkBAIC0yNDAsOSArMjQwLDkgQEAgUGxhbjo6Q29tcGlsYXRp
b25QYXRoIFBsYW46OmNvbXBpbGVJblRocmVhZEltcGwoKQogewogICAgIGNsZWFuTXVzdEhhbmRs
ZVZhbHVlc0lmTmVjZXNzYXJ5KCk7CiAKLSAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxl
ZChtX21vZGUpICYmIG1fb3NyRW50cnlCeXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKSB7CisgICAg
aWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQobV9tb2RlKSAmJiBtX29zckVudHJ5Qnl0ZWNv
ZGVJbmRleCkgewogICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAgICAgICBkYXRhTG9nKCJDb21w
aWxlciBtdXN0IGhhbmRsZSBPU1IgZW50cnkgZnJvbSBiYyMiLCBtX29zckVudHJ5Qnl0ZWNvZGVJ
bmRleCwgIiB3aXRoIHZhbHVlczogIiwgbV9tdXN0SGFuZGxlVmFsdWVzLCAiXG4iKTsKKyAgICAg
ICAgZGF0YUxvZygiQ29tcGlsZXIgbXVzdCBoYW5kbGUgT1NSIGVudHJ5IGZyb20gIiwgbV9vc3JF
bnRyeUJ5dGVjb2RlSW5kZXgsICIgd2l0aCB2YWx1ZXM6ICIsIG1fbXVzdEhhbmRsZVZhbHVlcywg
IlxuIik7CiAgICAgICAgIGRhdGFMb2coIlxuIik7CiAgICAgfQogCkBAIC03MjUsNyArNzI1LDcg
QEAgdm9pZCBQbGFuOjpjbGVhbk11c3RIYW5kbGVWYWx1ZXNJZk5lY2Vzc2FyeSgpCiAgICAgICAg
IHJldHVybjsKIAogICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBtX2NvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKTsKLSAgICBGYXN0Qml0VmVjdG9yIGxpdmVuZXNzID0gYWx0ZXJuYXRpdmUtPmxp
dmVuZXNzQW5hbHlzaXMoKS5nZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGFsdGVybmF0
aXZlLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgRmFzdEJpdFZlY3RvciBsaXZlbmVz
cyA9IGFsdGVybmF0aXZlLT5saXZlbmVzc0FuYWx5c2lzKCkuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRl
Y29kZUluZGV4KGFsdGVybmF0aXZlLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAKICAgICBm
b3IgKHVuc2lnbmVkIGxvY2FsID0gbV9tdXN0SGFuZGxlVmFsdWVzLm51bWJlck9mTG9jYWxzKCk7
IGxvY2FsLS07KSB7CiAgICAgICAgIGlmICghbGl2ZW5lc3NbbG9jYWxdKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uaAppbmRleCBjZWRhMDQwMjBkODBlNjdjYTE5ZTJjZmUyOTI5NWZkNzE2
YzY4NzVjLi5hNmFjYjI1OTg3MzlhMzQwNDc1NTA3NTdkOWMxNzBmNjY2MzU5NjZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaApAQCAtNTYsNyArNTYsNyBAQCBjbGFzcyBQbGFuIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKIHB1YmxpYzoKICAgICBQbGFuKAog
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja1RvQ29tcGlsZSwgQ29kZUJsb2NrKiBwcm9maWxl
ZERGR0NvZGVCbG9jaywKLSAgICAgICAgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBvc3JFbnRy
eUJ5dGVjb2RlSW5kZXgsCisgICAgICAgIENvbXBpbGF0aW9uTW9kZSwgQnl0ZWNvZGVJbmRleCBv
c3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpT
VmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgflBsYW4oKTsKIApAQCAtODcsNyArODcs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzRlRMKCkgY29uc3QgeyByZXR1cm4gREZHOjppc0ZU
TChtX21vZGUpOyB9CiAgICAgQ29tcGlsYXRpb25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBt
X21vZGU7IH0KLSAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleDsgfQorICAgIEJ5dGVjb2RlSW5kZXggb3NyRW50
cnlCeXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXg7
IH0KICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1
ZXMoKSBjb25zdCB7IHJldHVybiBtX211c3RIYW5kbGVWYWx1ZXM7IH0KICAgICBUaHJlYWREYXRh
KiB0aHJlYWREYXRhKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWREYXRhOyB9CiAgICAgUHJvZmls
ZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsYXRp
b24uZ2V0KCk7IH0KQEAgLTEwNiw4ICsxMDYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCB3aWxsVHJ5
VG9UaWVyVXAoKSBjb25zdCB7IHJldHVybiBtX3dpbGxUcnlUb1RpZXJVcDsgfQogICAgIHZvaWQg
c2V0V2lsbFRyeVRvVGllclVwKGJvb2wgd2lsbFRyeVRvVGllclVwKSB7IG1fd2lsbFRyeVRvVGll
clVwID0gd2lsbFRyeVRvVGllclVwOyB9CiAKLSAgICBIYXNoTWFwPHVuc2lnbmVkLCBWZWN0b3I8
dW5zaWduZWQ+PiYgdGllclVwSW5Mb29wSGllcmFyY2h5KCkgeyByZXR1cm4gbV90aWVyVXBJbkxv
b3BIaWVyYXJjaHk7IH0KLSAgICBWZWN0b3I8dW5zaWduZWQ+JiB0aWVyVXBBbmRPU1JFbnRlckJ5
dGVjb2RlcygpIHsgcmV0dXJuIG1fdGllclVwQW5kT1NSRW50ZXJCeXRlY29kZXM7IH0KKyAgICBI
YXNoTWFwPEJ5dGVjb2RlSW5kZXgsIFZlY3RvcjxCeXRlY29kZUluZGV4Pj4mIHRpZXJVcEluTG9v
cEhpZXJhcmNoeSgpIHsgcmV0dXJuIG1fdGllclVwSW5Mb29wSGllcmFyY2h5OyB9CisgICAgVmVj
dG9yPEJ5dGVjb2RlSW5kZXg+JiB0aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2RlcygpIHsgcmV0dXJu
IG1fdGllclVwQW5kT1NSRW50ZXJCeXRlY29kZXM7IH0KIAogICAgIGVudW0gU3RhZ2UgeyBQcmVw
YXJpbmcsIENvbXBpbGluZywgUmVhZHksIENhbmNlbGxlZCB9OwogICAgIFN0YWdlIHN0YWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGFnZTsgfQpAQCAtMTQzLDcgKzE0Myw3IEBAIHByaXZhdGU6CiAK
ICAgICBib29sIG1fd2lsbFRyeVRvVGllclVwIHsgZmFsc2UgfTsKIAotICAgIGNvbnN0IHVuc2ln
bmVkIG1fb3NyRW50cnlCeXRlY29kZUluZGV4OworICAgIGNvbnN0IEJ5dGVjb2RlSW5kZXggbV9v
c3JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKICAgICBUaHJlYWREYXRhKiBtX3RocmVhZERhdGE7CiAK
QEAgLTE1OSw4ICsxNTksOCBAQCBwcml2YXRlOgogICAgIERlc2lyZWRHbG9iYWxQcm9wZXJ0aWVz
IG1fZ2xvYmFsUHJvcGVydGllczsKICAgICBSZWNvcmRlZFN0YXR1c2VzIG1fcmVjb3JkZWRTdGF0
dXNlczsKIAotICAgIEhhc2hNYXA8dW5zaWduZWQsIFZlY3Rvcjx1bnNpZ25lZD4+IG1fdGllclVw
SW5Mb29wSGllcmFyY2h5OwotICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV90aWVyVXBBbmRPU1JFbnRl
ckJ5dGVjb2RlczsKKyAgICBIYXNoTWFwPEJ5dGVjb2RlSW5kZXgsIFZlY3RvcjxCeXRlY29kZUlu
ZGV4Pj4gbV90aWVyVXBJbkxvb3BIaWVyYXJjaHk7CisgICAgVmVjdG9yPEJ5dGVjb2RlSW5kZXg+
IG1fdGllclVwQW5kT1NSRW50ZXJCeXRlY29kZXM7CiAKICAgICBTdGFnZSBtX3N0YWdlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5j
cHAKaW5kZXggZmI5ZTQ3MGI0N2U5NjUzNDRlMDlkYzYxMTU4ZGVjNmIxMmRiZTNlYi4uNDM2ZTVk
MzkxNGIzMjM1YTAyNDdmYzQxODQ3MTYzMTFkNjc2ODY1MCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcApAQCAtOTcsMTQgKzk3
LDE0IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgICAgIGlmIChvbGRSb290LT5pc0NhdGNoRW50
cnlwb2ludCkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoISFlbnRyeXBvaW50SW5kZXgp
OwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5
dGVjb2RlT2Zmc2V0LmFkZChlbnRyeXBvaW50SW5kZXgsIG9sZFJvb3QtPmJ5dGVjb2RlQmVnaW4p
OworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5
dGVjb2RlSW5kZXguYWRkKGVudHJ5cG9pbnRJbmRleCwgb2xkUm9vdC0+Ynl0ZWNvZGVCZWdpbik7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChlbnRyeVN3aXRjaERhdGEtPmNhc2VzWzBdID09IG1fZ3JhcGguYmxvY2soMCkpOyAv
LyBXZSBzdHJvbmdseSBhc3N1bWUgdGhlIG5vcm1hbCBjYWxsIGVudHJ5cG9pbnQgaXMgdGhlIGZp
cnN0IGl0ZW0gaW4gdGhlIGxpc3QuCiAKICAgICAgICAgICAgIGNvbnN0IGJvb2wgZXhpdE9LID0g
ZmFsc2U7Ci0gICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiB7IENvZGVPcmlnaW4oMCksIENv
ZGVPcmlnaW4oMCksIGV4aXRPSyB9OworICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4geyBD
b2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkp
LCBleGl0T0sgfTsKICAgICAgICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAg
ICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEVudHJ5U3dpdGNoLCBvcmlnaW4sIE9wSW5mbyhlbnRy
eVN3aXRjaERhdGEpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAppbmRleCAzZGFlYzQzOTRlNzNiYzg2YzFjYzM3MDhmZjE5OWZhMTQzZjg5
YWE2Li40NzQxNjE0YzU3YmQ4YzliZTYwZTY4ZjNjMmE0MmVhNzA0NTc1MTBlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMTg2Miwx
MyArMTg2Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQog
ICAgICAgICAKICAgICAgICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
OwogICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewot
ICAgICAgICAgICAgZGF0YUxvZ0YoCi0gICAgICAgICAgICAgICAgIlNwZWN1bGF0aXZlSklUIGdl
bmVyYXRpbmcgTm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXgiLAotICAgICAgICAg
ICAgICAgIChpbnQpbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwKLSAgICAgICAgICAgICAgICBtX2N1
cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpLCBtX2ppdC5kZWJ1Z09m
ZnNldCgpKTsKLSAgICAgICAgICAgIGRhdGFMb2coIlxuIik7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAgIGRhdGFMb2dMbigi
U3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEAiLCAoaW50KW1fY3VycmVudE5vZGUtPmlu
ZGV4KCksICIgKCIsIG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4
KCkub2Zmc2V0KCksICIpIGF0IEpJVCBvZmZzZXQgMHgiLCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsK
IAogICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVERkdFeGNlcHRpb25IYW5kbGluZygpICYm
IChtYXlFeGl0KG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUpICE9IERvZXNOb3RFeGl0IHx8
IG1fY3VycmVudE5vZGUtPmlzVGVybWluYWwoKSkpCiAgICAgICAgICAgICBtX2ppdC5qaXRSZWxl
YXNlQXNzZXJ0Tm9FeGNlcHRpb24obV9qaXQudm0oKSk7CkBAIC0xOTA1LDcgKzE5MDAsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygpCiB7CiAgICAgQVNTRVJUKCFtX2N1cnJlbnROb2Rl
KTsKLSAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigw
KSwgdHJ1ZSk7CisgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4oQnl0ZWNvZGVJ
bmRleCgwKSksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSksIHRydWUpOwogCiAgICAgYXV0
byYgYXJndW1lbnRzID0gbV9qaXQuZ3JhcGgoKS5tX3Jvb3RUb0FyZ3VtZW50cy5maW5kKG1faml0
LmdyYXBoKCkuYmxvY2soMCkpLT52YWx1ZTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faml0
LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewpAQCAtMzk5OCw4ICszOTkzLDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZGUqIG5vZGUpCiAjZW5k
aWYKIAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0g
ICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQ
cm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsK
KyAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0
aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVEFkZElDKiBh
ZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAg
IGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAg
ICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkOwpAQCAtNDAy
Miw4ICs0MDE3LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5vZGUq
IG5vZGUpCiAjZW5kaWYKIAogICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0g
bV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwotICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBi
YXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCk7CiAgICAgICAgIEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmNvZGVCbG9j
aygpLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwogICAgICAgICBhdXRvIHJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemU7CiAgICAgICAgIGF1dG8gbm9uUmVw
YXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWI7CkBAIC00NjE2LDggKzQ2MTEsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIoTm9kZSogbm9kZSkKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU5lZ2F0ZShOb2RlKiBub2RlKQogewogICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgQXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JC
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0
LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRj
aGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5v
blJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlOwpAQCAtNDgzOSw4ICs0
ODM0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTXVsKE5vZGUqIG5vZGUp
CiAjZW5kaWYKIAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFw
aCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4
KCk7Ci0gICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+
YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5k
ZXgoKTsKKyAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2Nr
LT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVE11
bElDKiBtdWxJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUp
OwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6
ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwpA
QCAtMTA3MzEsNyArMTA3MjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoQ2hh
clN0cmluZ0p1bXAoTm9kZSogbm9kZSwgU3dpdGNoRGF0YSogZGF0YSwgR1BSUgogICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaCwgU3RyaW5nSW1wbDo6bGVuZ3RoTWVt
b3J5T2Zmc2V0KCkpLAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKDEpKSwKICAgICAgICAgZGF0
YS0+ZmFsbFRocm91Z2guYmxvY2spOwotCisgICAgCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCB2YWx1
ZSk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXM4Qml0ID0gbV9qaXQuYnJhbmNoVGVz
dDMyKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKaW5kZXggMDY0ZGU3MWUwOTJlOWY1MjQxMjk2NWUxY2U5M2JiM2FlNjU4NjViZS4uZjc1
NzlmYzliODI1NGEwOGJhODIzMWNlNjg0MjQ2NGE4YzQ4OGM3NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC01MDc5LDEzICs1
MDc5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAg
ICAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJTYXZlUGxhbj4gc2F2ZVBsYW5zOwogICAgICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwoZmFsc2UsIHNhdmVQbGFucywgSW52YWxpZEdQUlJl
Zyk7Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50
aWMuYnl0ZWNvZGVJbmRleCgpOworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgg
PSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogCiAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yTGFtYmRhKFs9XSgpIHsKICAgICAgICAgICAgIGNhbGxUaWVyVXAubGlu
aygmbV9qaXQpOwogCiAgICAgICAgICAgICBzaWxlbnRTcGlsbChzYXZlUGxhbnMpOwotICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbih0cmlnZ2VyVGllclVwTm93SW5Mb29wLCAmdm0oKSwgVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24odHJpZ2dl
clRpZXJVcE5vd0luTG9vcCwgJnZtKCksIFRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4LmFzQml0
cygpKSk7CiAgICAgICAgICAgICBzaWxlbnRGaWxsKHNhdmVQbGFucyk7CiAKICAgICAgICAgICAg
IG1faml0Lmp1bXAoKS5saW5rVG8odG9OZXh0T3BlcmF0aW9uLCAmbV9qaXQpOwpAQCAtNTExMyw3
ICs1MTEzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0
ZW1wLmdwcigpOwogCi0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmln
aW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgICAg
ICBhdXRvIHRyaWdnZXJJdGVyYXRvciA9IG1faml0LmppdENvZGUoKS0+dGllclVwRW50cnlUcmln
Z2Vycy5maW5kKGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBo
KCksIG5vZGUsIHRyaWdnZXJJdGVyYXRvciAhPSBtX2ppdC5qaXRDb2RlKCktPnRpZXJVcEVudHJ5
VHJpZ2dlcnMuZW5kKCkpOwogICAgICAgICBKSVRDb2RlOjpUcmlnZ2VyUmVhc29uKiBmb3JjZUVu
dHJ5VHJpZ2dlciA9ICYobV9qaXQuaml0Q29kZSgpLT50aWVyVXBFbnRyeVRyaWdnZXJzLmZpbmQo
Ynl0ZWNvZGVJbmRleCktPnZhbHVlKTsKQEAgLTUxMzgsNyArNTEzOCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG92ZXJmbG93ZWRDb3Vu
dGVyLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAgc2lsZW50U3BpbGwoc2F2ZVBsYW5zKTsK
LSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24odHJpZ2dlck9TUkVudHJ5Tm93LCB0ZW1wR1BSLCAm
dm0oKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24odHJpZ2dlck9TUkVudHJ5Tm93LCB0ZW1wR1BSLCAmdm0oKSwgVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlSW5kZXguYXNCaXRzKCkpKTsKIAogICAgICAgICAgICAgaWYgKHNhdmVQbGFucy5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgdGVtcEdQUikubGlua1RvKHRvTmV4dE9wZXJhdGlvbiwgJm1faml0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25Q
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0
aW9uUGhhc2UuY3BwCmluZGV4IDFiYWRjNTdjMGI5MmIyM2FkMGY4NGQ4MTI5YWYxMWFjOGIyNzdl
MjMuLmY1ZDczYzEwOWJjNzE3MDcxMjBhZjBlMWY4YTRmYWJkNDJmOTQzNmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlv
blBoYXNlLmNwcApAQCAtODUsOSArODUsOSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBt
X2dyYXBoLmVuc3VyZUNQU05hdHVyYWxMb29wcygpOwogICAgICAgICBDUFNOYXR1cmFsTG9vcHMm
IG5hdHVyYWxMb29wcyA9ICptX2dyYXBoLm1fY3BzTmF0dXJhbExvb3BzOwotICAgICAgICBIYXNo
TWFwPGNvbnN0IE5hdHVyYWxMb29wKiwgdW5zaWduZWQ+IG5hdHVyYWxMb29wVG9Mb29wSGludCA9
IGJ1aWxkTmF0dXJhbExvb3BUb0xvb3BIaW50TWFwKG5hdHVyYWxMb29wcyk7CisgICAgICAgIEhh
c2hNYXA8Y29uc3QgTmF0dXJhbExvb3AqLCBCeXRlY29kZUluZGV4PiBuYXR1cmFsTG9vcFRvTG9v
cEhpbnQgPSBidWlsZE5hdHVyYWxMb29wVG9Mb29wSGludE1hcChuYXR1cmFsTG9vcHMpOwogCi0g
ICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIExvb3BIaW50RGVzY3JpcHRvcj4gdGllclVwSGllcmFy
Y2h5OworICAgICAgICBIYXNoTWFwPEJ5dGVjb2RlSW5kZXgsIExvb3BIaW50RGVzY3JpcHRvcj4g
dGllclVwSGllcmFyY2h5OwogCiAgICAgICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9n
cmFwaCk7CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1C
bG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgdGllclVwVHlwZSA9IENoZWNrVGllclVwSW5Mb29wOwogICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCArIDEsIFNwZWNOb25l
LCB0aWVyVXBUeXBlLCBvcmlnaW4pOwogCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCA9IG9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAg
ICAgYXV0byBieXRlY29kZUluZGV4ID0gb3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsK
ICAgICAgICAgICAgICAgICBpZiAoY2FuT1NSRW50ZXIpCiAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgubV9wbGFuLnRpZXJVcEFuZE9TUkVudGVyQnl0ZWNvZGVzKCkuYXBwZW5kKGJ5dGVjb2Rl
SW5kZXgpOwogCkBAIC0xMzgsOCArMTM4LDggQEAgcHVibGljOgogCiAgICAgICAgIC8vIEFkZCBh
bGwgdGhlIGNhbmRpZGF0ZXMgdGhhdCBjYW4gYmUgT1NSIEVudGVyZWQuCiAgICAgICAgIGZvciAo
YXV0byBlbnRyeSA6IHRpZXJVcEhpZXJhcmNoeSkgewotICAgICAgICAgICAgVmVjdG9yPHVuc2ln
bmVkPiB0aWVyVXBDYW5kaWRhdGVzOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29k
ZUluZGV4IDogZW50cnkudmFsdWUub3NyRW50cnlDYW5kaWRhdGVzKSB7CisgICAgICAgICAgICBW
ZWN0b3I8Qnl0ZWNvZGVJbmRleD4gdGllclVwQ2FuZGlkYXRlczsKKyAgICAgICAgICAgIGZvciAo
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4IDogZW50cnkudmFsdWUub3NyRW50cnlDYW5kaWRh
dGVzKSB7CiAgICAgICAgICAgICAgICAgYXV0byBkZXNjcmlwdG9ySXQgPSB0aWVyVXBIaWVyYXJj
aHkuZmluZChieXRlY29kZUluZGV4KTsKICAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvckl0
ICE9IHRpZXJVcEhpZXJhcmNoeS5lbmQoKQogICAgICAgICAgICAgICAgICAgICAmJiBkZXNjcmlw
dG9ySXQtPnZhbHVlLmNhbk9TUkVudGVyKQpAQCAtMTYwLDcgKzE2MCw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgc3RydWN0IExvb3BIaW50RGVzY3JpcHRv
ciB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gb3NyRW50cnlDYW5kaWRhdGVzOworICAgICAg
ICBWZWN0b3I8Qnl0ZWNvZGVJbmRleD4gb3NyRW50cnlDYW5kaWRhdGVzOwogICAgICAgICBib29s
IGNhbk9TUkVudGVyOwogICAgIH07CiAKQEAgLTE4Myw5ICsxODMsOSBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBIYXNoTWFwPGNvbnN0IE5hdHVyYWxMb29w
KiwgdW5zaWduZWQ+IGJ1aWxkTmF0dXJhbExvb3BUb0xvb3BIaW50TWFwKGNvbnN0IENQU05hdHVy
YWxMb29wcyYgbmF0dXJhbExvb3BzKQorICAgIEhhc2hNYXA8Y29uc3QgTmF0dXJhbExvb3AqLCBC
eXRlY29kZUluZGV4PiBidWlsZE5hdHVyYWxMb29wVG9Mb29wSGludE1hcChjb25zdCBDUFNOYXR1
cmFsTG9vcHMmIG5hdHVyYWxMb29wcykKICAgICB7Ci0gICAgICAgIEhhc2hNYXA8Y29uc3QgTmF0
dXJhbExvb3AqLCB1bnNpZ25lZD4gbmF0dXJhbExvb3BzVG9Mb29wSGludDsKKyAgICAgICAgSGFz
aE1hcDxjb25zdCBOYXR1cmFsTG9vcCosIEJ5dGVjb2RlSW5kZXg+IG5hdHVyYWxMb29wc1RvTG9v
cEhpbnQ7CiAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tz
SW5OYXR1cmFsT3JkZXIoKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewpAQCAtMTk0LDcg
KzE5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgICAgICAgICAgaWYgKGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gbmF0dXJhbExvb3BzLmlu
bmVyTW9zdExvb3BPZihibG9jaykpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CisgICAg
ICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIG5hdHVyYWxM
b29wc1RvTG9vcEhpbnQuYWRkKGxvb3AsIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCmluZGV4IDhkYjZkYmU4YzY5MmJiMTMwODYzM2MwNDE4
NmE2MmJlOGFjNTBmZDguLmE0Mjk0OWM4ZjFmMThlY2U2MDA1OGQxMGU3YTk2MDgzYzkxNmJlOGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNw
cApAQCAtNzUsNyArNzUsNyBAQCB2b2lkIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoCiAgICAgc3dpdGNoIChyZXN1bHQp
IHsKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDogewogICAgICAgICBqaXRDb2RlLT5z
ZXRPU1JFbnRyeUJsb2NrKGNvZGVCbG9jay0+dm0oKSwgcHJvZmlsZWRERkdDb2RlQmxvY2ssIGNv
ZGVCbG9jayk7Ci0gICAgICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGUgPSBjb2RlQmxvY2st
PmppdENvZGUoKS0+ZnRsRm9yT1NSRW50cnkoKS0+Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICBC
eXRlY29kZUluZGV4IG9zckVudHJ5Qnl0ZWNvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZnRs
Rm9yT1NSRW50cnkoKS0+Ynl0ZWNvZGVJbmRleCgpOwogICAgICAgICBqaXRDb2RlLT50aWVyVXBF
bnRyeVRyaWdnZXJzLnNldChvc3JFbnRyeUJ5dGVjb2RlLCBKSVRDb2RlOjpUcmlnZ2VyUmVhc29u
OjpDb21waWxhdGlvbkRvbmUpOwogICAgICAgICBicmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IDhjMDQxOTFkZWU2NDMzYTBhNTI3YjY1
YzI1ZjBmZDhiNzQ4ZDQ1YWYuLmVmODViNDIzZGE2MGFiMGVjNTc1YWE5NGQ5NjM4YjEzMDIwYTdk
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCkBAIC03ODAs
NyArNzgwLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBhdXRvJiBkb21pbmF0b3JzID0gbV9ncmFw
aC5lbnN1cmVTU0FEb21pbmF0b3JzKCk7CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBv
aW50SW5kZXggOiBtX2dyYXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0
LmtleXMoKSkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggOiBtX2dyYXBo
Lm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlSW5kZXgua2V5cygpKQogICAgICAgICAg
ICAgVkFMSURBVEUoKCksIGVudHJ5cG9pbnRJbmRleCA+IDApOyAvLyBCeSBjb252ZW50aW9uLCAw
IGlzIHRoZSBlbnRyeXBvaW50IGluZGV4IGZvciB0aGUgb3BfZW50ZXIgZW50cnlwb2ludCwgd2hp
Y2ggY2FuIG5vdCBiZSBpbiBhIGNhdGNoLgogCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRl
eCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKaW5kZXggNGQ0YjFl
YjZmZDM3MDQxMmE5NGNjNzE4ZjRhZTI1ZDI3NWQ0MjY0YS4uZGUzMjZiZWNhM2Q1ZGY5ODFmOWE5
ZjA3YjQ0OGYwZmY1NzFkNmNlYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBp
bGUuY3BwCkBAIC0xNTcsMTIgKzE1NywxMiBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBT
YWZlcG9pbnQ6OlJlc3VsdCYgc2FmZXBvaW50UmVzdWx0KQogICAgIHN0YXRlLmdlbmVyYXRlZEZ1
bmN0aW9uID0gbGFiZWw7CiAgICAgc3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUIzQnlwcm9kdWN0
cyhzdGF0ZS5wcm9jLT5yZWxlYXNlQnlwcm9kdWN0cygpKTsKIAotICAgIGZvciAoYXV0byBwYWly
IDogc3RhdGUuZ3JhcGgubV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQpIHsK
LSAgICAgICAgdW5zaWduZWQgY2F0Y2hCeXRlY29kZU9mZnNldCA9IHBhaXIudmFsdWU7CisgICAg
Zm9yIChhdXRvIHBhaXIgOiBzdGF0ZS5ncmFwaC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRl
Y29kZUluZGV4KSB7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggY2F0Y2hCeXRlY29kZUluZGV4ID0g
cGFpci52YWx1ZTsKICAgICAgICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gcGFpci5rZXk7
CiAgICAgICAgIFZlY3RvcjxGbHVzaEZvcm1hdD4gYXJndW1lbnRGb3JtYXRzID0gc3RhdGUuZ3Jh
cGgubV9hcmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4XTsKICAgICAgICAgc3RhdGUuaml0
Q29kZS0+Y29tbW9uLmFwcGVuZENhdGNoRW50cnlwb2ludCgKLSAgICAgICAgICAgIGNhdGNoQnl0
ZWNvZGVPZmZzZXQsIHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25P
ZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihzdGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFiZWwoZW50
cnlwb2ludEluZGV4KSksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7CisgICAgICAgICAgICBj
YXRjaEJ5dGVjb2RlSW5kZXgsIHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+bG9j
YXRpb25PZjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihzdGF0ZS5wcm9jLT5lbnRyeXBvaW50TGFi
ZWwoZW50cnlwb2ludEluZGV4KSksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7CiAgICAgfQog
ICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5maW5hbGl6ZUNhdGNoRW50cnlwb2ludHMoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENv
ZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgK
aW5kZXggYWYyY2QxMTMzOWY5NWM2ZmQxNWE3ZTIzMDRlZjQxNTk4ZjQ1NTY2Zi4uMjY4OWQzYTcx
NmI3NTNmNWQ2ODJjZWQwY2M1NDcxNWY4YTc1OTdhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5oCkBAIC00OCw4ICs0OCw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGluaXRpYWxpemVFbnRyeUJ1ZmZlcihWTSYsIHVuc2lnbmVkIG51bUNh
bGxlZUxvY2Fscyk7CiAgICAgU2NyYXRjaEJ1ZmZlciogZW50cnlCdWZmZXIoKSBjb25zdCB7IHJl
dHVybiBtX2VudHJ5QnVmZmVyOyB9CiAgICAgCi0gICAgdm9pZCBzZXRCeXRlY29kZUluZGV4KHVu
c2lnbmVkIHZhbHVlKSB7IG1fYnl0ZWNvZGVJbmRleCA9IHZhbHVlOyB9Ci0gICAgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQorICAgIHZv
aWQgc2V0Qnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4IHZhbHVlKSB7IG1fYnl0ZWNvZGVJbmRl
eCA9IHZhbHVlOyB9CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CiAgICAgCiAgICAgdm9pZCBjb3VudEVudHJ5RmFpbHVy
ZSgpIHsgbV9lbnRyeUZhaWx1cmVDb3VudCsrOyB9CiAgICAgdW5zaWduZWQgZW50cnlGYWlsdXJl
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5RmFpbHVyZUNvdW50OyB9CkBAIC01OCw3ICs1
OCw3IEBAIHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAgICAgU2NyYXRjaEJ1ZmZlciogbV9lbnRy
eUJ1ZmZlcjsgLy8gT25seSBmb3IgT1NSIGVudHJ5IGNvZGUgYmxvY2tzLgotICAgIHVuc2lnbmVk
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKICAg
ICB1bnNpZ25lZCBtX2VudHJ5RmFpbHVyZUNvdW50OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDdlZjQxNzk5ZjRmMmQ1NzQyMGQ4
OWUwNWU0ZmM2NTMyNDdmNDBkZDUuLjhhMDBkOTY2M2ZlM2Q2MTZhMGYxZWVlOGFkZTY0ZjkzYjFm
ZDEzZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKQEAgLTIxMSw3ICsyMTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGppdC5l
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spOwogICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNh
dGNoRW50cnlwb2ludEluZGV4IDogbV9ncmFwaC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRl
Y29kZU9mZnNldC5rZXlzKCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2F0Y2hFbnRy
eXBvaW50SW5kZXggOiBtX2dyYXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlSW5k
ZXgua2V5cygpKSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2F0Y2hFbnRyeXBv
aW50SW5kZXggIT0gMCk7CiAgICAgICAgICAgICAgICAgbV9wcm9jLmNvZGUoKS5zZXRQcm9sb2d1
ZUZvckVudHJ5cG9pbnQoY2F0Y2hFbnRyeXBvaW50SW5kZXgsIGNhdGNoUHJvbG9ndWVHZW5lcmF0
b3IuY29weVJlZigpKTsKICAgICAgICAgICAgIH0KQEAgLTI4MCw3ICsyODAsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHVuc2lnbmVkIGV4aXRGcmFtZVNpemUgPSBtX2dyYXBoLnJlcXVpcmVkUmVnaXN0
ZXJDb3VudEZvckV4aXQoKSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzc09mU3RhY2tMaW1pdCh2bS0+YWRkcmVzc09mU29m
dFN0YWNrTGltaXQoKSk7CiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogc3RhY2tPdmVyZmxvd0hh
bmRsZXIgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOwotICAgICAgICBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlSW5kZXggPSBjYWxsU2l0ZUluZGV4Rm9yQ29kZU9yaWdpbihtX2Z0bFN0YXRlLCBDb2Rl
T3JpZ2luKDApKTsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gY2FsbFNp
dGVJbmRleEZvckNvZGVPcmlnaW4obV9mdGxTdGF0ZSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4
KDApKSk7CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dIYW5kbGVyLT5hcHBlbmRTb21lUmVnaXN0ZXIo
bV9jYWxsRnJhbWUpOwogICAgICAgICBzdGFja092ZXJmbG93SGFuZGxlci0+Y2xvYmJlcihSZWdp
c3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwogICAgICAgICBzdGFja092ZXJmbG93
SGFuZGxlci0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKQEAgLTM1MSw3ICszNTEsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1fbm9kZSA9IG51bGxwdHI7Ci0g
ICAgICAgICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdp
bigwKSwgdHJ1ZSk7CisgICAgICAgICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdp
bihCeXRlY29kZUluZGV4KDApKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSwgdHJ1ZSk7
CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLmNsZWFyKCk7CkBAIC0yMTEwLDggKzIxMTAsOCBAQCBwcml2YXRlOgogICAgICAg
ICB9CiAKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1fZnRsU3RhdGUu
Z3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAg
ICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0
ZWNvZGVJbmRleCgpOwotICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2Vs
aW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4
KTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOworICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5
dGVjb2RlSW5kZXgpOwogICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlv
blZhbHVlQWRkT3B0aW1pemU7CiAgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0g
b3BlcmF0aW9uVmFsdWVBZGQ7CiAgICAgICAgIGNvbXBpbGVCaW5hcnlNYXRoSUM8SklUQWRkR2Vu
ZXJhdG9yPihhcml0aFByb2ZpbGUsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1
bmN0aW9uKTsKQEAgLTIxMzEsOCArMjEzMSw4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAg
ICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9mdGxTdGF0ZS5ncmFwaC5iYXNl
bGluZUNvZGVCbG9ja0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXggPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4
KCk7Ci0gICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxv
Y2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgpOworICAgICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5i
eXRlY29kZUluZGV4KCk7CisgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFz
ZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRl
eCk7CiAgICAgICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJP
cHRpbWl6ZTsKICAgICAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25W
YWx1ZVN1YjsKICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+KGFy
aXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwpA
QCAtMjE1Miw4ICsyMTUyLDggQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2Z0bFN0YXRlLmdyYXBoLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAg
ICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQ
cm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5k
ZXgoKTsKKyAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVC
bG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICAg
ICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplOwog
ICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwog
ICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVE11bEdlbmVyYXRvcj4oYXJpdGhQcm9maWxl
LCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CkBAIC0yNDE1LDgg
KzI0MTUsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9mdGxTdGF0ZS5ncmFwaC5iYXNlbGluZUNvZGVCbG9j
a0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRl
Y29kZUluZGV4ID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwotICAg
ICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+
YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5i
eXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
SW5kZXgpOwogICAgICAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25W
YWx1ZVN1Yk9wdGltaXplOwogICAgICAgICAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24g
PSBvcGVyYXRpb25WYWx1ZVN1YjsKICAgICAgICAgICAgIGNvbXBpbGVCaW5hcnlNYXRoSUM8SklU
U3ViR2VuZXJhdG9yPihhcml0aFByb2ZpbGUsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRj
aGluZ0Z1bmN0aW9uKTsKQEAgLTMwOTMsOCArMzA5Myw4IEBAIHByaXZhdGU6CiAgICAgewogICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gVW50eXBlZFVzZSk7CiAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sg
PSBtX2Z0bFN0YXRlLmdyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
Ynl0ZWNvZGVJbmRleCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgQXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0
ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rp
b24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOwogICAgICAgICBhdXRvIG5vblJlcGF0
Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlOwogICAgICAgICBjb21waWxlVW5h
cnlNYXRoSUM8SklUTmVnR2VuZXJhdG9yPihhcml0aFByb2ZpbGUsIHJlcGF0Y2hpbmdGdW5jdGlv
biwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFbnRyeS5jcHAKaW5kZXggYzE3NTczNzViN2FhM2U4NzM0YzgyMjM5YTUyMTc0NjcwZWNmOTcx
OS4uOTMzMTc3MTBmNmQwNjg2MDkxOWJjMDAyNTMxM2ExMzIxOTA0NDkxOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogU1VQUFJFU1NfQVNBTgogdm9pZCogcHJlcGFyZU9T
UkVudHJ5KAogICAgIFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogZGZn
Q29kZUJsb2NrLCBDb2RlQmxvY2sqIGVudHJ5Q29kZUJsb2NrLAotICAgIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgsIHVuc2lnbmVkIHN0cmVhbUluZGV4KQorICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCwgdW5zaWduZWQgc3RyZWFtSW5kZXgpCiB7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZSA9IGRmZ0NvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAgICAgRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUgPSBkZmdDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwpAQCAtNTUsNyAr
NTUsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoCiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkgewogICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgIkZUTCBPU1IgZnJv
bSAiLCAqZGZnQ29kZUJsb2NrLCAiIHRvICIsICplbnRyeUNvZGVCbG9jaywgIiBhdCBiYyMiLAor
ICAgICAgICAgICAgIkZUTCBPU1IgZnJvbSAiLCAqZGZnQ29kZUJsb2NrLCAiIHRvICIsICplbnRy
eUNvZGVCbG9jaywgIiBhdCAiLAogICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCwgIi5cbiIpOwog
ICAgIH0KICAgICAKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogCiAg
ICAgaWYgKGJ5dGVjb2RlSW5kZXggIT0gZW50cnlDb2RlLT5ieXRlY29kZUluZGV4KCkpIHsKICAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBPU1IgZmFpbGVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbiBlbnRyeXBvaW50IGZvciBiYyMi
LCBieXRlY29kZUluZGV4LCAiOyBvdXJzIGlzIGZvciBiYyMiLCBlbnRyeUNvZGUtPmJ5dGVjb2Rl
SW5kZXgoKSwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiZWNh
dXNlIHdlIGRvbid0IGhhdmUgYW4gZW50cnlwb2ludCBmb3IgIiwgYnl0ZWNvZGVJbmRleCwgIjsg
b3VycyBpcyBmb3IgIiwgZW50cnlDb2RlLT5ieXRlY29kZUluZGV4KCksICJcbiIpOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAgICAgCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQqIHByZXBhcmVP
U1JFbnRyeSgKICAgICAgICAgT3B0aW9uYWw8SlNWYWx1ZT4gcmVjb25zdHJ1Y3RlZFZhbHVlID0g
dmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgaWYgKChyZWNvbnN0cnVjdGVkVmFs
dWUgJiYgdmFsdWVPblN0YWNrID09IHJlY29uc3RydWN0ZWRWYWx1ZS52YWx1ZSgpKSB8fCAhYXJn
dW1lbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZGF0YUxvZygiTWlzbWF0Y2gg
YmV0d2VlbiByZWNvbnN0cnVjdGVkIHZhbHVlcyBhbmQgdGhlIHZhbHVlIG9uIHRoZSBzdGFjayBm
b3IgYXJndW1lbnQgYXJnIiwgYXJndW1lbnQsICIgZm9yICIsICplbnRyeUNvZGVCbG9jaywgIiBh
dCBiYyMiLCBieXRlY29kZUluZGV4LCAiOlxuIik7CisgICAgICAgIGRhdGFMb2coIk1pc21hdGNo
IGJldHdlZW4gcmVjb25zdHJ1Y3RlZCB2YWx1ZXMgYW5kIHRoZSB2YWx1ZSBvbiB0aGUgc3RhY2sg
Zm9yIGFyZ3VtZW50IGFyZyIsIGFyZ3VtZW50LCAiIGZvciAiLCAqZW50cnlDb2RlQmxvY2ssICIg
YXQgIiwgYnl0ZWNvZGVJbmRleCwgIjpcbiIpOwogICAgICAgICBkYXRhTG9nKCIgICAgVmFsdWUg
b24gc3RhY2s6ICIsIHZhbHVlT25TdGFjaywgIlxuIik7CiAgICAgICAgIGRhdGFMb2coIiAgICBS
ZWNvbnN0cnVjdGVkIHZhbHVlOiAiLCByZWNvbnN0cnVjdGVkVmFsdWUsICJcbiIpOwogICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFbnRyeS5oCmluZGV4IDNkMTIzZmJlZDdjYjIyZDIzNDkxNWJiOGZiOWJiYzI1MmU2NDBk
N2IuLjY0ZWNmNzVmZWUzMmU4MmNmMWNmYWViNzY0OGUwMmYxMDJjMWYyZDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmgKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgVk07
CiBuYW1lc3BhY2UgRlRMIHsKIAogdm9pZCogcHJlcGFyZU9TUkVudHJ5KAotICAgIFZNJiwgQ2Fs
bEZyYW1lKiwgQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogZW50cnlDb2RlQmxv
Y2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsCisgICAgVk0mLCBDYWxsRnJhbWUqLCBDb2RlQmxv
Y2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBlbnRyeUNvZGVCbG9jaywgQnl0ZWNvZGVJbmRl
eCwKICAgICB1bnNpZ25lZCBzdHJlYW1JbmRleCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAK
aW5kZXggNTIzMjA1ODYxY2NmMDQ5MWUyMjA3MTljNTczOWM1M2YwNmVjYTgyNC4uNzhlZDBiZjBk
OGE0NWY0MzNiYTI5YjJkMzE4YTg1M2UwNjE2YTliYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKQEAgLTk4LDEyICs5OCwxMiBAQCBTVVBQ
UkVTU19BU0FOIHVuc2lnbmVkIENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSBj
b25zdAogCiBDYWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6Y2FsbFNpdGVJbmRleCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoY2FsbFNpdGVBc1Jhd0JpdHMoKSk7CisgICAgcmV0
dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChjYWxsU2l0ZUFzUmF3Qml0cygpKSk7CiB9
CiAKIFNVUFBSRVNTX0FTQU4gQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRl
SW5kZXgoKSBjb25zdAogewotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KHVuc2FmZUNhbGxTaXRl
QXNSYXdCaXRzKCkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5z
YWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAg
LTEzNCw3ICsxMzQsNyBAQCBjb25zdCBJbnN0cnVjdGlvbiogQ2FsbEZyYW1lOjpjdXJyZW50VlBD
KCkgY29uc3QKIAogdm9pZCBDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMoY29uc3QgSW5zdHJ1Y3Rp
b24qIHZwYykKIHsKLSAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKGNvZGVCbG9jaygpLT5ieXRl
Y29kZU9mZnNldCh2cGMpKTsKKyAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKGNvZGVCbG9jaygp
LT5ieXRlY29kZUluZGV4KHZwYykpOwogICAgIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudF0udGFnKCkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihjYWxsU2l0ZS5iaXRzKCkpOwogfQog
CkBAIC0xNDcsMTEgKzE0NywxMSBAQCB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0Fz
Qnl0ZWNvZGVPZmZzZXQoKSBjb25zdAogCiAjZW5kaWYKICAgICAKLXVuc2lnbmVkIENhbGxGcmFt
ZTo6Ynl0ZWNvZGVPZmZzZXQoKQorQnl0ZWNvZGVJbmRleCBDYWxsRnJhbWU6OmJ5dGVjb2RlSW5k
ZXgoKQogewogICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNtKCkpOwogICAgIGlmICghY29kZUJs
b2NrKCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gQnl0ZWNvZGVJbmRleCgw
KTsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoY2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdp
bkluZGV4KCkpIHsKICAgICAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKQEAgLTE2NCwxMyArMTY0
LDEzIEBAIHVuc2lnbmVkIENhbGxGcmFtZTo6Ynl0ZWNvZGVPZmZzZXQoKQogICAgIH0KICNlbmRp
ZgogICAgIEFTU0VSVChjYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKTsKLSAgICByZXR1
cm4gY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpOworICAgIHJldHVybiBCeXRlY29kZUlu
ZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSk7CiB9CiAKIENvZGVPcmlnaW4gQ2Fs
bEZyYW1lOjpjb2RlT3JpZ2luKCkKIHsKICAgICBpZiAoIWNvZGVCbG9jaygpKQotICAgICAgICBy
ZXR1cm4gQ29kZU9yaWdpbigwKTsKKyAgICAgICAgcmV0dXJuIENvZGVPcmlnaW4oQnl0ZWNvZGVJ
bmRleCgwKSk7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKGNhbGxTaXRlQml0c0FyZUNv
ZGVPcmlnaW5JbmRleCgpKSB7CiAgICAgICAgIENhbGxTaXRlSW5kZXggaW5kZXggPSBjYWxsU2l0
ZUluZGV4KCk7CkBAIC0xNzgsNyArMTc4LDcgQEAgQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVP
cmlnaW4oKQogICAgICAgICByZXR1cm4gY29kZUJsb2NrKCktPmNvZGVPcmlnaW4oaW5kZXgpOwog
ICAgIH0KICNlbmRpZgotICAgIHJldHVybiBDb2RlT3JpZ2luKGNhbGxTaXRlQml0c0FzQnl0ZWNv
ZGVPZmZzZXQoKSk7CisgICAgcmV0dXJuIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleChjYWxsU2l0
ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkpKTsKIH0KIAogUmVnaXN0ZXIqIENhbGxGcmFtZTo6dG9w
T2ZGcmFtZUludGVybmFsKCkKQEAgLTMwMiw3ICszMDIsNyBAQCBTdHJpbmcgQ2FsbEZyYW1lOjpm
cmllbmRseUZ1bmN0aW9uTmFtZSgpCiB2b2lkIENhbGxGcmFtZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KQogewogICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygp
KSB7Ci0gICAgICAgIG91dC5wcmludChjb2RlQmxvY2stPmluZmVycmVkTmFtZSgpLCAiIyIsIGNv
ZGVCbG9jay0+aGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpLCAiIFsiLCBjb2RlQmxvY2stPmppdFR5
cGUoKSwgIiBiYyMiLCBieXRlY29kZU9mZnNldCgpLCAiXSIpOworICAgICAgICBvdXQucHJpbnQo
Y29kZUJsb2NrLT5pbmZlcnJlZE5hbWUoKSwgIiMiLCBjb2RlQmxvY2stPmhhc2hBc1N0cmluZ0lm
UG9zc2libGUoKSwgIiBbIiwgY29kZUJsb2NrLT5qaXRUeXBlKCksICIgIiwgYnl0ZWNvZGVJbmRl
eCgpLCAiXSIpOwogCiAgICAgICAgIG91dC5wcmludCgiKCIpOwogICAgICAgICB0aGlzVmFsdWUo
KS5kdW1wRm9yQmFja3RyYWNlKG91dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmgKaW5kZXggYjdiMzNlMGMxZTA0MTdmODE4ZTk4ZjQ0MGYxNDhhNDQ4
N2JiMjEwNS4uMDgwZjdjNDYyMDc1OTcwMmUwZDdmYmEyNTZlYWQ2NTM4NmJlYjRjNSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaApAQCAtNDUsMjIg
KzQ1LDE5IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICBwdWJsaWM6CiAgICAgICAgIENhbGxTaXRl
SW5kZXgoKSA9IGRlZmF1bHQ7CiAgICAgICAgIAotICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUlu
ZGV4KHVpbnQzMl90IGJpdHMpCi0gICAgICAgICAgICA6IG1fYml0cyhiaXRzKQorICAgICAgICBl
eHBsaWNpdCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKKyAgICAg
ICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsgfQotI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQotICAgICAgICAgICAgOiBtX2JpdHMoYml0d2lzZV9j
YXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpCi0gICAgICAgIHsgfQotI2VuZGlmCiAKLSAgICAg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyAhPSBVSU5U
X01BWDsgfQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyA9PSBvdGhlci5tX2JpdHM7IH0KLSAgICAgICAgCi0g
ICAgICAgIGlubGluZSB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9Cisg
ICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fYnl0ZWNv
ZGVJbmRleDsgfQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleCA9PSBvdGhlci5tX2J5dGVjb2Rl
SW5kZXg7IH0KKworICAgICAgICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
Y29kZUluZGV4LmFzQml0cygpOyB9CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CiAKICAgICBwcml2YXRlOgot
ICAgICAgICB1aW50MzJfdCBtX2JpdHMgeyBVSU5UX01BWCB9OworICAgICAgICBCeXRlY29kZUlu
ZGV4IG1fYnl0ZWNvZGVJbmRleDsKICAgICB9OwogCiAgICAgY2xhc3MgRGlzcG9zYWJsZUNhbGxT
aXRlSW5kZXggOiBwdWJsaWMgQ2FsbFNpdGVJbmRleCB7CkBAIC02OCw3ICs2NSw3IEBAIG5hbWVz
cGFjZSBKU0MgIHsKICAgICAgICAgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7
CiAKICAgICAgICAgZXhwbGljaXQgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgodWludDMyX3QgYml0
cykKLSAgICAgICAgICAgIDogQ2FsbFNpdGVJbmRleChiaXRzKQorICAgICAgICAgICAgOiBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRzKGJpdHMpKQogICAgICAgICB7CiAgICAg
ICAgIH0KIApAQCAtMTc5LDEwICsxNzYsMTAgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAv
LyBhbHNvIHJldHVybiAwIGlmIHRoZSBjYWxsIGZyYW1lIGhhcyBubyBub3Rpb24gb2YgYnl0ZWNv
ZGUgb2Zmc2V0cyAoZm9yCiAgICAgICAgIC8vIGV4YW1wbGUgaWYgaXQncyBuYXRpdmUgY29kZSku
CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3
NTQKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoKTsKKyAgICAgICAgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KCk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIHdpbGwgZ2V0
IHlvdSBhIENvZGVPcmlnaW4uIEl0IHdpbGwgYWx3YXlzIHN1Y2NlZWQuIE1heSByZXR1cm4KLSAg
ICAgICAgLy8gQ29kZU9yaWdpbigwKSBpZiB3ZSdyZSBpbiBuYXRpdmUgY29kZS4KKyAgICAgICAg
Ly8gQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSBpZiB3ZSdyZSBpbiBuYXRpdmUgY29kZS4K
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKCk7CiAKICAg
ICAgICAgUmVnaXN0ZXIqIHRvcE9mRnJhbWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggZTQzZGIyOTE0Mzc1M2Q2NGYxZmE0
ZWQzYmI1MTYzMWU2NDRhMjBjYS4uZmY4MTU5NzM2MDFkNDUyMTdmMDk2N2I1YWQwNThjYmRkYjk0
YmI1YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCkBAIC00MTAsNyArNDEwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIG1f
cmVzdWx0cy5hcHBlbmQoU3RhY2tGcmFtZSh2aXNpdG9yLT53YXNtRnVuY3Rpb25JbmRleE9yTmFt
ZSgpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCEhdmlzaXRvci0+Y29kZUJsb2NrKCkgJiYg
IXZpc2l0b3ItPmNvZGVCbG9jaygpLT51bmxpbmtlZENvZGVCbG9jaygpLT5pc0J1aWx0aW5GdW5j
dGlvbigpKSB7CiAgICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZCgKLSAgICAgICAgICAg
ICAgICAgICAgU3RhY2tGcmFtZShtX3ZtLCBtX293bmVyLCB2aXNpdG9yLT5jYWxsZWUoKS5hc0Nl
bGwoKSwgdmlzaXRvci0+Y29kZUJsb2NrKCksIHZpc2l0b3ItPmJ5dGVjb2RlT2Zmc2V0KCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFtZShtX3ZtLCBtX293bmVyLCB2aXNpdG9yLT5j
YWxsZWUoKS5hc0NlbGwoKSwgdmlzaXRvci0+Y29kZUJsb2NrKCksIHZpc2l0b3ItPmJ5dGVjb2Rl
SW5kZXgoKSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX3Jlc3Vs
dHMuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICBTdGFja0ZyYW1lKG1fdm0sIG1fb3duZXIs
IHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpKSk7CkBAIC00ODAsNyArNDgwLDcgQEAgQUxXQVlT
X0lOTElORSBzdGF0aWMgSGFuZGxlckluZm8qIGZpbmRFeGNlcHRpb25IYW5kbGVyKFN0YWNrVmlz
aXRvciYgdmlzaXRvciwgQ28KICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVC
bG9jay0+aml0VHlwZSgpKSkKICAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4ID0gY2FsbEZy
YW1lLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpOwogICAgIGVsc2UKLSAgICAgICAgZXhjZXB0aW9u
SGFuZGxlckluZGV4ID0gY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgpOworICAgICAgICBleGNl
cHRpb25IYW5kbGVySW5kZXggPSBjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKTsK
IAogICAgIHJldHVybiBjb2RlQmxvY2stPmhhbmRsZXJGb3JJbmRleChleGNlcHRpb25IYW5kbGVy
SW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAKaW5kZXggODY0MDQxZjcwYjkxNTMxMmRj
MTMzYjE3NmI4MjQyMmIxZjgyZDg5NC4uODdhYzQzMzljOTk1MWNiNTgwYzJmOTZiMWM4OTViYzYy
OTBmY2UxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1No
YWRvd0NoaWNrZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9T
aGFkb3dDaGlja2VuLmNwcApAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6
dXBkYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAgICAgICBib29sIGlz
VGFpbERlbGV0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIEpTU2NvcGUqIHNjb3BlID0gbnVsbHB0
cjsKICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKTsKLSAgICAgICAgICAgIEpTVmFsdWUgc2NvcGVWYWx1ZSA9IGNhbGxGcmFtZS0+Ynl0ZWNv
ZGVPZmZzZXQoKSAmJiBjb2RlQmxvY2sgJiYgY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkuaXNW
YWxpZCgpCisgICAgICAgICAgICBKU1ZhbHVlIHNjb3BlVmFsdWUgPSBjYWxsRnJhbWUtPmJ5dGVj
b2RlSW5kZXgoKSAmJiBjb2RlQmxvY2sgJiYgY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkuaXNW
YWxpZCgpCiAgICAgICAgICAgICAgICAgPyBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2NvZGVCbG9j
ay0+c2NvcGVSZWdpc3RlcigpLm9mZnNldCgpXS5qc1ZhbHVlKCkKICAgICAgICAgICAgICAgICA6
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICBpZiAoIXNjb3BlVmFsdWUuaXNVbmRlZmluZWQo
KSAmJiBjb2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcApp
bmRleCA4MGM4ZjY4MmU1ZjVhYTI4YjAwZjVkNGZhZmIzNDk3ZWRhMTYyNDAzLi5jMzE3MmY3NTcx
ZTI4NDdkNGMxNGFiZTRiOTFjMTkwMGY1ZmMxOTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcApAQCAtMTY5LDcgKzE2OSw3IEBA
IHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBDb2RlT3JpZ2luKiBjb2RlT3JpCiAgICAgaWYgKGNhbGxGcmFtZS0+aXNBbnlXYXNtQ2Fs
bGVlKCkpIHsKICAgICAgICAgbV9mcmFtZS5tX2lzV2FzbUZyYW1lID0gdHJ1ZTsKICAgICAgICAg
bV9mcmFtZS5tX2NvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgICAgIG1fZnJhbWUubV9ieXRlY29k
ZU9mZnNldCA9IDA7CisgICAgICAgIG1fZnJhbWUubV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleCgpOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICAgICAgQ2FsbGVlQml0cyBiaXRz
ID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKICAgICAgICAgaWYgKGJpdHMuaXNXYXNtKCkpCkBAIC0x
NzcsOSArMTc3LDkgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmkKICNlbmRpZgogICAgIH0gZWxz
ZSB7CiAgICAgICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwotICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVPZmZzZXQgPSAhbV9mcmFtZS5jb2RlQmxvY2so
KSA/IDAKKyAgICAgICAgbV9mcmFtZS5tX2J5dGVjb2RlSW5kZXggPSAhbV9mcmFtZS5jb2RlQmxv
Y2soKSA/IEJ5dGVjb2RlSW5kZXgoMCkKICAgICAgICAgICAgIDogY29kZU9yaWdpbiA/IGNvZGVP
cmlnaW4tPmJ5dGVjb2RlSW5kZXgoKQotICAgICAgICAgICAgOiBjYWxsRnJhbWUtPmJ5dGVjb2Rl
T2Zmc2V0KCk7CisgICAgICAgICAgICA6IGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpOwogCiAg
ICAgfQogCkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVk
RnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmlnaW4KICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAg
bV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2su
Z2V0KCk7Ci0gICAgICAgIG1fZnJhbWUubV9ieXRlY29kZU9mZnNldCA9IGNvZGVPcmlnaW4tPmJ5
dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgbV9mcmFtZS5tX2J5dGVjb2RlSW5kZXggPSBjb2RlT3Jp
Z2luLT5ieXRlY29kZUluZGV4KCk7CiAKICAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZWVGb3JDYWxsRnJhbWUoY2FsbEZyYW1lKTsKICAgICAgICAgbV9m
cmFtZS5tX2NhbGxlZSA9IGNhbGxlZTsKQEAgLTQyMyw3ICs0MjMsNyBAQCB2b2lkIFN0YWNrVmlz
aXRvcjo6RnJhbWU6OmNvbXB1dGVMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25l
ZCYgY29sdW1uKQogdm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpyZXRyaWV2ZUV4cHJlc3Npb25J
bmZvKGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25l
ZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3QKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwotICAgIGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxv
Y2soKS0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQoKSwg
ZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CisgICAgY29kZUJs
b2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4
KGJ5dGVjb2RlSW5kZXgoKSwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNv
bHVtbik7CiAgICAgZGl2b3QgKz0gY29kZUJsb2NrLT5zb3VyY2VPZmZzZXQoKTsKIH0KIApAQCAt
NDg1LDggKzQ4NSw4IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0LCBJbmRlbnRlciBpbmRlbnQsIFdURjo6RnVuY3Rpb248CiAgICAgICAgICAgICBpbmRl
bnQrKzsKIAogICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbFNpdGVCaXRzQXJlQnl0ZWNv
ZGVPZmZzZXQoKSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0g
Y2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgpOwotICAgICAgICAgICAgICAgIG91dC5wcmludChp
bmRlbnQsICJieXRlY29kZU9mZnNldDogIiwgYnl0ZWNvZGVPZmZzZXQsICIgb2YgIiwgY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCksICJcbiIpOworICAgICAgICAgICAgICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpOworICAg
ICAgICAgICAgICAgIG91dC5wcmludChpbmRlbnQsIGJ5dGVjb2RlSW5kZXgsICIgb2YgIiwgY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCksICJcbiIpOwogI2lmIEVOQUJMRShERkdfSklU
KQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoaW5kZW50
LCAiaGFzQ29kZU9yaWdpbnM6ICIsIGNvZGVCbG9jay0+aGFzQ29kZU9yaWdpbnMoKSwgIlxuIik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNp
dG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgK
aW5kZXggNjNhZDQwOGNlNzFiMGI4ZTRlZDgzNjc5Yjg3YjY2MTc0ZWMxNmNmNi4uZDM1NzYxZmUw
YzQyMzRiMzljZjUwN2IxYjY0NTY1NTg0YTg0OWI4NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaApAQCAtMjUsNiArMjUsNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKICNpbmNsdWRlICJDYWxs
ZWVCaXRzLmgiCiAjaW5jbHVkZSAiV2FzbUluZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSA8d3RmL0Z1
bmN0aW9uLmg+CkBAIC02NCw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAgICAgQ2FsbEZyYW1lKiBj
YWxsZXJGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVyRnJhbWU7IH0KICAgICAgICAgQ2Fs
bGVlQml0cyBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZTsgfQogICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9Ci0gICAgICAg
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZU9mZnNl
dDsgfQorICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVy
biBtX2J5dGVjb2RlSW5kZXg7IH0KICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUoKSBjb25zdCB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgICAgICByZXR1cm4g
bV9pbmxpbmVDYWxsRnJhbWU7CkBAIC0xMjAsNyArMTIxLDcgQEAgcHVibGljOgogICAgICAgICBD
b2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgICAgICBzaXplX3QgbV9pbmRleDsKICAgICAgICAg
c2l6ZV90IG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7Ci0gICAgICAgIHVuc2lnbmVkIG1f
Ynl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4Owog
ICAgICAgICBib29sIG1fY2FsbGVySXNFbnRyeUZyYW1lIDogMTsKICAgICAgICAgYm9vbCBtX2lz
V2FzbUZyYW1lIDogMTsKICAgICAgICAgV2FzbTo6SW5kZXhPck5hbWUgbV93YXNtRnVuY3Rpb25J
bmRleE9yTmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCBkNDQ4OTdkNjQ3MDI2
ODA4NWM4NjJhMmM4YTc1NWZiY2E2M2Y0ZWRhLi4xZmY4YjQ3MDQxZGZkZWUzZDQwY2E0Yjg0MTUy
OGI2YmMwYjA1YzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC03NCwxNiArNzQs
MTUgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cjxDRnUKICAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24u
cmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKIH0KIAotSklUOjpKSVQoVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpCitK
SVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9j
aykKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhj
b2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCi0gICAgLCBt
X2J5dGVjb2RlT2Zmc2V0KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAg
ICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtKQogICAgICwgbV9jYW5CZU9wdGltaXpl
ZChmYWxzZSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fc2hv
dWxkVXNlSW5kZXhNYXNraW5nKE9wdGlvbnM6OmVuYWJsZVNwZWN0cmVNaXRpZ2F0aW9ucygpKQot
ICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZU9mZnNldChsb29wT1NSRW50cnlCeXRlY29kZU9m
ZnNldCkKKyAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KQogewogfQogCkBAIC0xMDAsMTEgKzk5LDExIEBAIHZvaWQgSklUOjplbWl0RW50
ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwogICAgIAog
ICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIo
T3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7Ci0gICAg
QVNTRVJUKCFtX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSk7CiAKICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlT2Zmc2V0KTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4
LmFzQml0cygpKTsKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywg
cmV0dXJuVmFsdWVHUFIpKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc2tpcE9wdGltaXplLmxpbmsodGhpcyk7CkBAIC0xMzgs
MTIgKzEzNywxMiBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKIH0KIAog
I2RlZmluZSBORVhUX09QQ09ERShuYW1lKSBcCi0gICAgbV9ieXRlY29kZU9mZnNldCArPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsgXAorICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCkpOyBcCiAgICAgYnJlYWs7CiAKICNkZWZpbmUgREVGSU5FX1NMT1dfT1AobmFtZSkgXAogICAg
IGNhc2Ugb3BfIyNuYW1lOiB7IFwKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQgPj0gc3Rh
cnRCeXRlY29kZU9mZnNldCkgeyBcCisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3Rh
cnRCeXRlY29kZUluZGV4KSB7IFwKICAgICAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0
aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfIyNuYW1lKTsgXAogICAg
ICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsgXAogICAgICAgICB9IFwKQEAgLTE1Miw3ICsx
NTEsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKIAogI2RlZmluZSBE
RUZJTkVfT1AobmFtZSkgXAogICAgIGNhc2UgbmFtZTogeyBcCi0gICAgICAgIGlmIChtX2J5dGVj
b2RlT2Zmc2V0ID49IHN0YXJ0Qnl0ZWNvZGVPZmZzZXQpIHsgXAorICAgICAgICBpZiAobV9ieXRl
Y29kZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCkgeyBcCiAgICAgICAgICAgICBlbWl0XyMj
bmFtZShjdXJyZW50SW5zdHJ1Y3Rpb24pOyBcCiAgICAgICAgIH0gXAogICAgICAgICBORVhUX09Q
Q09ERShuYW1lKTsgXApAQCAtMTkyLDggKzE5MSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAogICAgIFZNJiB2bSA9
IG1fY29kZUJsb2NrLT52bSgpOwotICAgIHVuc2lnbmVkIHN0YXJ0Qnl0ZWNvZGVPZmZzZXQgPSAw
OwotICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ICYmIChtX2NvZGVCbG9jay0+
aW5oZXJpdHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0czxN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7CisgICAgQnl0ZWNvZGVJbmRleCBzdGFydEJ5
dGVjb2RlSW5kZXgoMCk7CisgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAo
bV9jb2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9j
ay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0pKSkgewogICAgICAgICAvLyBX
ZSBjYW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3Jh
bUNvZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KICAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24g
d291bGQgYmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQg
d2FudHMgdG8KICAgICAgICAgLy8gZG8gT1NSIGVudHJ5IGludG8gdGhlIGJhc2VsaW5lIEpJVCBp
biBhIGxvb3AsIGl0IHdpbGwgcGFzcyBpbiB0aGUgYnl0ZWNvZGUgb2Zmc2V0IGl0CkBAIC0yMDIs
MjggKzIwMSwyOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAg
ICAgLy8gV2Ugb25seSBib3RoZXIgYnVpbGRpbmcgdGhlIGJ5dGVjb2RlIGdyYXBoIGlmIGl0IGNv
dWxkIHNhdmUgdGltZSBhbmQgZXhlY3V0YWJsZQogICAgICAgICAvLyBtZW1vcnkuIFdlIHBpY2sg
YW4gYXJiaXRyYXJ5IG9mZnNldCB3aGVyZSB3ZSBkZWVtIHRoaXMgaXMgcHJvZml0YWJsZS4KLSAg
ICAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPj0gMjAwKSB7CisgICAgICAg
IGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gMjAwKSB7CiAgICAg
ICAgICAgICAvLyBBcyBhIHNpbXBsaWZpY2F0aW9uLCB3ZSBkb24ndCBmaW5kIGFsbCBieXRlY29k
ZSByYW5nZXMgdGhhdCBhcmUgdW5yZWFjaGFibGUuCiAgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3
ZSBqdXN0IGZpbmQgdGhlIG1pbmltdW0gYnl0ZWNvZGUgb2Zmc2V0IHRoYXQgaXMgcmVhY2hhYmxl
LCBhbmQKICAgICAgICAgICAgIC8vIGNvbXBpbGUgY29kZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zm
c2V0IG9ud2FyZHMuCiAKICAgICAgICAgICAgIEJ5dGVjb2RlR3JhcGggZ3JhcGgobV9jb2RlQmxv
Y2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAgICAgICAgICBCeXRlY29kZUJh
c2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldCht
X2xvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNC
bG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChibG9jayk7CiAKICAgICAgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PEJ5dGVjb2RlQmFz
aWNCbG9jayo+IHdvcmtsaXN0OwotICAgICAgICAgICAgc3RhcnRCeXRlY29kZU9mZnNldCA9IFVJ
TlRfTUFYOworICAgICAgICAgICAgc3RhcnRCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgp
OwogICAgICAgICAgICAgd29ya2xpc3QucHVzaChibG9jayk7CiAKICAgICAgICAgICAgIHdoaWxl
IChCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKLSAgICAgICAg
ICAgICAgICBzdGFydEJ5dGVjb2RlT2Zmc2V0ID0gc3RkOjptaW4oc3RhcnRCeXRlY29kZU9mZnNl
dCwgYmxvY2stPmxlYWRlck9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBzdGFydEJ5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KHN0ZDo6bWluKHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSwgYmxvY2stPmxlYWRlck9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVz
aEFsbChibG9jay0+c3VjY2Vzc29ycygpKTsKIAogICAgICAgICAgICAgICAgIC8vIEFsc28gYWRk
IGNhdGNoIGJsb2NrcyBmb3IgYnl0ZWNvZGVzIHRoYXQgdGhyb3cuCiAgICAgICAgICAgICAgICAg
aWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5sZWFkZXJP
ZmZzZXQoKTsgYnl0ZWNvZGVPZmZzZXQgPCBibG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBibG9jay0+
dG90YWxMZW5ndGgoKTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zdHJ1Y3Rp
b24gPSBpbnN0cnVjdGlvbnMuYXQoYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGF1dG8qIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRv
KiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVPZmZzZXQpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jr
bGlzdC5wdXNoKGdyYXBoLmZpbmRCYXNpY0Jsb2NrV2l0aExlYWRlck9mZnNldChoYW5kbGVyLT50
YXJnZXQpKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gaW5z
dHJ1Y3Rpb24tPnNpemUoKTsKQEAgLTIzMywyOSArMjMyLDI5IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGZvciAobV9ieXRlY29k
ZU9mZnNldCA9IDA7IG1fYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKLSAg
ICAgICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQgPT0gc3RhcnRCeXRlY29kZU9mZnNldCAmJiBzdGFy
dEJ5dGVjb2RlT2Zmc2V0ID4gMCkgeworICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsg
KSB7CisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPT0gc3RhcnRCeXRlY29kZUluZGV4ICYm
IHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3Zl
IHByb3ZlbiBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHVwIHVudGlsIGhlcmUgYXJlIHVucmVh
Y2hhYmxlLgogICAgICAgICAgICAgLy8gTGV0J3MgZW5zdXJlIHRoYXQgYnkgY3Jhc2hpbmcgaWYg
aXQncyBldmVyIGhpdC4KICAgICAgICAgICAgIGJyZWFrcG9pbnQoKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKLSAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5z
ZXRGb3JCeXRlY29kZU1haW5QYXRoKG1fYnl0ZWNvZGVPZmZzZXQsIGxhYmVsKCkpOwotICAgICAg
ICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0
KG1fYnl0ZWNvZGVPZmZzZXQpLnB0cigpOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGN1
cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCAicHJpdmF0ZUNvbXBpbGVNYWluUGFzcyBnb25lIGJh
ZCBAICVkIiwgbV9ieXRlY29kZU9mZnNldCk7CisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+
c2V0Rm9yQnl0ZWNvZGVNYWluUGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkp
OworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1
Y3Rpb25zLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgICAgIEFTU0VSVChjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CiAKLSAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpKTsKKyAg
ICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykK
LSAgICAgICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQgPiAwKSAvLyBBdm9pZCB0aGUgb3ZlcmhlYWQg
b2Ygc2FtcGxpbmcgb3BfZW50ZXIgdHdpY2UuCisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXgg
PiAwKSAvLyBBdm9pZCB0aGUgb3ZlcmhlYWQgb2Ygc2FtcGxpbmcgb3BfZW50ZXIgdHdpY2UuCiAg
ICAgICAgICAgICBzYW1wbGVJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogI2VuZGlm
CiAKLSAgICAgICAgbV9sYWJlbHNbbV9ieXRlY29kZU9mZnNldF0gPSBsYWJlbCgpOworICAgICAg
ICBtX2xhYmVsc1ttX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCldID0gbGFiZWwoKTsKIAogICAgICAg
ICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nRigiT2xkIEpJ
VCBlbWl0dGluZyBjb2RlIGZvciBiYyMldSBhdCBvZmZzZXQgMHglbHguXG4iLCBtX2J5dGVjb2Rl
T2Zmc2V0LCAobG9uZylkZWJ1Z09mZnNldCgpKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiT2xk
IEpJVCBlbWl0dGluZyBjb2RlIGZvciAiLCBtX2J5dGVjb2RlSW5kZXgsICIgYXQgb2Zmc2V0ICIs
IChsb25nKWRlYnVnT2Zmc2V0KCkpOwogCiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gY3Vy
cmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwogCkBAIC0yNjMsMTMgKzI2MiwxMyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBhZGQ2NCgKICAgICAg
ICAgICAgICAgICBUcnVzdGVkSW1tMzIoMSksCiAgICAgICAgICAgICAgICAgQWJzb2x1dGVBZGRy
ZXNzKG1fY29tcGlsYXRpb24tPmV4ZWN1dGlvbkNvdW50ZXJGb3IoUHJvZmlsZXI6Ok9yaWdpblN0
YWNrKFByb2ZpbGVyOjpPcmlnaW4oCi0gICAgICAgICAgICAgICAgICAgIG1fY29tcGlsYXRpb24t
PmJ5dGVjb2RlcygpLCBtX2J5dGVjb2RlT2Zmc2V0KSkpLT5hZGRyZXNzKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9jb21waWxhdGlvbi0+Ynl0ZWNvZGVzKCksIG1fYnl0ZWNvZGVJbmRleCkp
KS0+YWRkcmVzcygpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChPcHRpb25z
OjplYWdlcmx5VXBkYXRlVG9wQ2FsbEZyYW1lKCkpCiAgICAgICAgICAgICB1cGRhdGVUb3BDYWxs
RnJhbWUoKTsKIAotICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVP
ZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwogI2lmIEVOQUJMRShNQVNNX1BST0JFKQogICAgICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewogICAgICAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKQEAgLTQ3Miw3ICs0NzEsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICNpZm5kZWYgTkRFQlVHCiAgICAgLy8g
UmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCi0gICAg
bV9ieXRlY29kZU9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsK
KyAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KCk7CiAjZW5kaWYKIH0KIApAQCAt
NDk1LDI4ICs0OTQsMjggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAg
ICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKICAgICAKICAgICBmb3IgKFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9z
bG93Q2FzZXMuZW5kKCk7KSB7Ci0gICAgICAgIG1fYnl0ZWNvZGVPZmZzZXQgPSBpdGVyLT50bzsK
KyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gaXRlci0+dG87CiAKLSAgICAgICAgbV9wY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVPZmZzZXQpKTsKKyAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRl
bShsYWJlbCgpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogCi0gICAgICAgIHVuc2ln
bmVkIGZpcnN0VG8gPSBtX2J5dGVjb2RlT2Zmc2V0OworICAgICAgICBCeXRlY29kZUluZGV4IGZp
cnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVj
b2RlT2Zmc2V0KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgp
LnB0cigpOwogICAgICAgICAKICAgICAgICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2Zp
bGUgPSAwOwogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAg
cmFyZUNhc2VQcm9maWxlID0gbV9jb2RlQmxvY2stPmFkZFJhcmVDYXNlUHJvZmlsZShtX2J5dGVj
b2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIHJhcmVDYXNlUHJvZmlsZSA9IG1fY29kZUJsb2NrLT5h
ZGRSYXJlQ2FzZVByb2ZpbGUobV9ieXRlY29kZUluZGV4KTsKIAogICAgICAgICBpZiAoSklUSW50
ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nRigiT2xkIEpJVCBlbWl0dGluZyBz
bG93IGNvZGUgZm9yIGJjIyV1IGF0IG9mZnNldCAweCVseC5cbiIsIG1fYnl0ZWNvZGVPZmZzZXQs
IChsb25nKWRlYnVnT2Zmc2V0KCkpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCJPbGQgSklUIGVt
aXR0aW5nIHNsb3cgY29kZSBmb3IgIiwgbV9ieXRlY29kZUluZGV4LCAiIGF0IG9mZnNldCAiLCAo
bG9uZylkZWJ1Z09mZnNldCgpKTsKIAogICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAg
ICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVTbG93UGF0aChtX2J5dGVjb2Rl
T2Zmc2V0LCBsYWJlbCgpKTsKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRl
Y29kZVNsb3dQYXRoKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbGFiZWwoKSk7CiAKICNpZiBF
TkFCTEUoTUFTTV9QUk9CRSkKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFz
ZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKICAgICAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0g
Y3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwotICAgICAgICAgICAgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlT2Zmc2V0OworICAgICAgICAgICAgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmUoWz1dIChQ
cm9iZTo6Q29udGV4dCYgY3R4KSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIs
IGJ5dGVjb2RlT2Zmc2V0LCAiXSBTTE9XICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIg
IiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwpAQCAtNjIzLDcgKzYy
Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICNpZm5kZWYgTkRF
QlVHCiAgICAgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFT
U0VSVHMuCi0gICAgbV9ieXRlY29kZU9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKTsKKyAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KCk7CiAjZW5k
aWYKIH0KIApAQCAtNjc0LDcgKzY3Myw3IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtp
bmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICBtX2NvbXBpbGF0aW9uLT5h
ZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVC
bG9jayk7CiAgICAgfQogICAgIAotICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVu
ZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbigwLCBudWxscHRyKSk7CisgICAgbV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5k
ZXgoMCkpKTsKIAogICAgIExhYmVsIGVudHJ5TGFiZWwodGhpcyk7CiAgICAgaWYgKG1fZGlzYXNz
ZW1ibGVyKQpAQCAtNzExLDcgKzcxMCw3IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtp
bmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgIGVtaXRNYXRlcmlhbGl6ZVRhZ0No
ZWNrUmVnaXN0ZXJzKCk7CiAKICAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlKSB7Ci0gICAgICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ID09IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7CisgICAgICAgIEFTU0VSVCghbV9ieXRlY29k
ZUluZGV4KTsKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICAg
ICAgZm9yIChpbnQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEg
Y29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0
ZSAodG8KQEAgLTc0MSw3ICs3NDAsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5n
KEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVs
dENvZGVPcmlnaW4oKSk7CiAKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7Ci0gICAgbV9i
eXRlY29kZU9mZnNldCA9IDA7CisgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgw
KTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjYWxsT3BlcmF0aW9uV2l0
aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93
RXJyb3IsIG1fY29kZUJsb2NrKTsKQEAgLTc1Nyw3ICs3NTYsNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgbG9h
ZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIHJlZ1QxKTsKICAg
ICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fY29kZUJs
b2NrLT5tX251bVBhcmFtZXRlcnMpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAKLSAgICAg
ICAgbV9ieXRlY29kZU9mZnNldCA9IDA7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCk7CiAKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4o
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpA
QCAtNzY5LDcgKzc2OCw3IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENU
SVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAog
I2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgbV9ieXRlY29kZU9mZnNldCA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8g
Z3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCisgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgoKTsgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3
aXRoIEFTU0VSVHMuCiAjZW5kaWYKIAogICAgICAgICBqdW1wKGJlZ2luTGFiZWwpOwpAQCAtODA5
LDcgKzgwOCw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAKICAgICAvLyBUcmFu
c2xhdGUgdlBDIG9mZnNldHMgaW50byBhZGRyZXNzZXMgaW4gSklUIGdlbmVyYXRlZCBjb2RlLCBm
b3Igc3dpdGNoIHRhYmxlcy4KICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IG1fc3dpdGNoZXMpIHsK
LSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSByZWNvcmQuYnl0ZWNvZGVPZmZzZXQ7
CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gcmVjb3JkLmJ5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CiAKICAgICAgICAgaWYgKHJlY29yZC50eXBlICE9IFN3aXRjaFJlY29yZDo6U3Ry
aW5nKSB7CiAgICAgICAgICAgICBBU1NFUlQocmVjb3JkLnR5cGUgPT0gU3dpdGNoUmVjb3JkOjpJ
bW1lZGlhdGUgfHwgcmVjb3JkLnR5cGUgPT0gU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpOyAKQEAg
LTg5NCw3ICs4OTMsNyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgIEpJVENv
ZGVNYXAgaml0Q29kZU1hcDsKICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsg
Ynl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKICAg
ICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQotICAgICAgICAgICAg
aml0Q29kZU1hcC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQsIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CisgICAgICAgICAgICBq
aXRDb2RlTWFwLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsK
ICAgICB9CiAgICAgaml0Q29kZU1hcC5maW5pc2goKTsKICAgICBtX2NvZGVCbG9jay0+c2V0SklU
Q29kZU1hcChXVEZNb3ZlKGppdENvZGVNYXApKTsKQEAgLTk0OSw3ICs5NDgsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiAgICAgICAgIC8vIG9wZXJhdGlv
bkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIG9uZSBhcmd1
bWVudCwgdGhlIFZNKi4KICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24odm0oKSk7Ci0g
ICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbChPcGVyYXRpb25QdHJUYWcpLCBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCksIEZ1bmN0aW9uUHRyPE9wZXJhdGlv
blB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkp
KTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKE9wZXJhdGlvblB0clRh
ZyksIEJ5dGVjb2RlSW5kZXgoKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25Mb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKSkpOwogICAgICAgICBqdW1w
VG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogICAgIH0KIApAQCAtOTYyLDcgKzk2MSw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKICAgICAgICAgLy8gb3Bl
cmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlciBpcyBwYXNzZWQgb25lIGFyZ3VtZW50LCB0aGUg
Vk0qLgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwogICAgICAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSgpKTsKLSAgICAgICAgbV9j
YWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSkpOworICAgICAgICBtX2NhbGxzLmFwcGVu
ZChDYWxsUmVjb3JkKGNhbGwoT3BlcmF0aW9uUHRyVGFnKSwgQnl0ZWNvZGVJbmRleCgpLCBGdW5j
dGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIp
KSk7CiAgICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgKaW5kZXggMTk3NzlhM2MyM2NjY2Q1NzAyMTdiZDQ0N2E0NzJiYzEw
ODI4YWU3MC4uZDQ1ZmMwMzUwY2IxMjhkNmViMTRjNWM3OTA4NDZiYjJkYjFmMTkzZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCkBAIC03MCwxNiArNzAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZy
b207Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OworICAgICAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7CiAgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4g
Y2FsbGVlOwogCiAgICAgICAgIENhbGxSZWNvcmQoKQogICAgICAgICB7CiAgICAgICAgIH0KIAot
ICAgICAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb20sIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGNhbGxlZSkKKyAgICAg
ICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBmcm9tLCBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY2FsbGVlKQogICAgICAg
ICAgICAgOiBmcm9tKGZyb20pCi0gICAgICAgICAgICAsIGJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2Rl
T2Zmc2V0KQorICAgICAgICAgICAgLCBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAg
ICAgICAgICAsIGNhbGxlZShjYWxsZWUpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtOTgsOSAr
OTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHN0cnVjdCBTbG93Q2FzZUVudHJ5IHsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZnJvbTsKLSAgICAgICAgdW5zaWduZWQgdG87Cisg
ICAgICAgIEJ5dGVjb2RlSW5kZXggdG87CiAgICAgICAgIAotICAgICAgICBTbG93Q2FzZUVudHJ5
KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGYsIHVuc2lnbmVkIHQpCisgICAgICAgIFNsb3dDYXNlRW50
cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgQnl0ZWNvZGVJbmRleCB0KQogICAgICAgICAgICAg
OiBmcm9tKGYpCiAgICAgICAgICAgICAsIHRvKHQpCiAgICAgICAgIHsKQEAgLTEyMSwyMCArMTIx
LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlKiBzdHJp
bmdKdW1wVGFibGU7CiAgICAgICAgIH0ganVtcFRhYmxlOwogCi0gICAgICAgIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0OworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiAgICAg
ICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQ7CiAKLSAgICAgICAgU3dpdGNoUmVjb3JkKFNpbXBs
ZUp1bXBUYWJsZSoganVtcFRhYmxlLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgdW5zaWduZWQg
ZGVmYXVsdE9mZnNldCwgVHlwZSB0eXBlKQorICAgICAgICBTd2l0Y2hSZWNvcmQoU2ltcGxlSnVt
cFRhYmxlKiBqdW1wVGFibGUsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQg
ZGVmYXVsdE9mZnNldCwgVHlwZSB0eXBlKQogICAgICAgICAgICAgOiB0eXBlKHR5cGUpCi0gICAg
ICAgICAgICAsIGJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICAgICAgLCBi
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICAsIGRlZmF1bHRPZmZzZXQo
ZGVmYXVsdE9mZnNldCkKICAgICAgICAgewogICAgICAgICAgICAgdGhpcy0+anVtcFRhYmxlLnNp
bXBsZUp1bXBUYWJsZSA9IGp1bXBUYWJsZTsKICAgICAgICAgfQogCi0gICAgICAgIFN3aXRjaFJl
Y29yZChTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQs
IHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQpCisgICAgICAgIFN3aXRjaFJlY29yZChTdHJpbmdKdW1w
VGFibGUqIGp1bXBUYWJsZSwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBk
ZWZhdWx0T2Zmc2V0KQogICAgICAgICAgICAgOiB0eXBlKFN0cmluZykKLSAgICAgICAgICAgICwg
Ynl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICAgICAsIGJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgICwgZGVmYXVsdE9mZnNldChkZWZhdWx0T2Zm
c2V0KQogICAgICAgICB7CiAgICAgICAgICAgICB0aGlzLT5qdW1wVGFibGUuc3RyaW5nSnVtcFRh
YmxlID0ganVtcFRhYmxlOwpAQCAtMTQ0LDcgKzE0NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IHN0cnVjdCBCeVZhbENvbXBpbGF0aW9uSW5mbyB7CiAgICAgICAgIEJ5VmFsQ29tcGlsYXRpb25J
bmZvKCkgeyB9CiAgICAgICAgIAotICAgICAgICBCeVZhbENvbXBpbGF0aW9uSW5mbyhCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlBh
dGNoYWJsZUp1bXAgbm90SW5kZXhKdW1wLCBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBi
YWRUeXBlSnVtcCwgSklUQXJyYXlNb2RlIGFycmF5TW9kZSwgQXJyYXlQcm9maWxlKiBhcnJheVBy
b2ZpbGUsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lVGFyZ2V0LCBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbmV4dEhvdFBhdGhUYXJnZXQpCisgICAgICAgIEJ5VmFsQ29tcGlsYXRpb25JbmZvKEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIE1hY3JvQXNz
ZW1ibGVyOjpQYXRjaGFibGVKdW1wIG5vdEluZGV4SnVtcCwgTWFjcm9Bc3NlbWJsZXI6OlBhdGNo
YWJsZUp1bXAgYmFkVHlwZUp1bXAsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUsIEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maWxlLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZVRhcmdldCwgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG5leHRIb3RQYXRoVGFyZ2V0KQogICAgICAgICAgICAgOiBieVZhbElu
Zm8oYnlWYWxJbmZvKQogICAgICAgICAgICAgLCBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
CiAgICAgICAgICAgICAsIG5vdEluZGV4SnVtcChub3RJbmRleEp1bXApCkBAIC0xNTcsNyArMTU3
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBCeVZhbEluZm8qIGJ5
VmFsSW5mbzsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxl
SnVtcCBub3RJbmRleEp1bXA7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1w
IGJhZFR5cGVKdW1wOwogICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlOwpAQCAtMTkyLDcg
KzE5Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBw
YXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCiAgICAgcHVibGljOgotICAgICAgICBK
SVQoVk0mLCBDb2RlQmxvY2sqID0gMCwgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZz
ZXQgPSAwKTsKKyAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2Rl
SW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAg
ICAgICAgfkpJVCgpOwogCiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJ
VDo6dm0oKTsgfQpAQCAtMjAyLDcgKzIwMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHZvaWQgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgICAgIAot
ICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0ID0gMCkKKyAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNl
dCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAgICAgfQpAQCAtMjEwLDI4ICsyMTAsMjgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZhbChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewogICAgICAgICAgICAgSklUIGpp
dCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlW
YWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9
IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGls
ZUdldEJ5VmFsKGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwog
ICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5VmFsV2l0aENhY2hl
ZElkKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkKICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAg
ICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4
OworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJ
bmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElk
KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSkKICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAg
ICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4
OworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJ
bmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWw+
KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlRGlyZWN0UHV0QnlWYWwoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQo
dm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbDxPcFB1dEJ5VmFsRGlyZWN0Pihsb2NrZXIsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVz
cywgYXJyYXlNb2RlKTsKICAgICAgICAgfQogCkBAIC0yMzksMTQgKzIzOSwxNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElk
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKQogICAgICAgICB7CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBj
b2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8t
PmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlW
YWxXaXRoQ2FjaGVkSWQ8T3A+KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHV0S2luZCwgcHJv
cGVydHlOYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSkKICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsK
LSAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUlu
ZGV4OworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eShieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KIApAQCAt
Mjc3LDcgKzI3Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDYWxsIGFwcGVuZENhbGwo
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKICAgICAgICAgewog
ICAgICAgICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsKE9wZXJhdGlvblB0clRhZyk7Ci0g
ICAgICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgbV9ieXRl
Y29kZU9mZnNldCwgZnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKSk7CisgICAg
ICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgbV9ieXRlY29k
ZUluZGV4LCBmdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpKTsKICAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAgICAgIH0KIApAQCAtNzU0LDEyICs3NTQsMTIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KICAgICAg
ICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiwgaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKLSAgICAgICAgdm9pZCBsaW5rQWxs
U2xvd0Nhc2VzRm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2Fz
ZXMsCi0gICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRl
Y29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLAorICAgICAgICAgICAg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVP
ZmZzZXQpOwogCiAgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlcyhWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBsaW5rQWxsU2xv
d0Nhc2VzRm9yQnl0ZWNvZGVPZmZzZXQobV9zbG93Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVPZmZz
ZXQpOworICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgobV9zbG93
Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwpAQCAtOTM0LDcgKzkzNCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBWZWN0b3I8Q2FsbENvbXBpbGF0aW9uSW5mbz4gbV9jYWxsQ29tcGlsYXRp
b25JbmZvOwogICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwogCi0gICAgICAg
IHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRl
Y29kZUluZGV4OwogICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAg
ICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKQEAgLTk2OCw3ICs5Njgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxp
bmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgYm9vbCBt
X3Nob3VsZFVzZUluZGV4TWFza2luZzsKLSAgICAgICAgdW5zaWduZWQgbV9sb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCB7IDAgfTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXg7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRleCA3OGEzYTQxYTRiOTczMGJjOTNlZGY2ZWI1NDQ1
NzgyZWNkMTc4ODMwLi5iZjIzMDZiY2U0ZDU2ZjEwOWEwMzYxOGIzNDA3MmZjNTdjMGU1YWMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKQEAgLTE1NSw3ICsxNTUsNyBAQCB2
b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcENhbGxFdmFsPigpOwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2Nr
LT5hZGRDYWxsTGlua0luZm8oKTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpD
YWxsLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCByZWdUMCk7CisgICAgaW5mby0+c2V0
VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBy
ZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwogCkBA
IC0yMjYsOCArMjI2LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKICAgICBjb21waWxlU2V0
dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CiAKICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUg
KyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXpl
ZC4KLSAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZU9m
ZnNldChpbnN0cnVjdGlvbik7Ci0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJ
bmRleChieXRlY29kZU9mZnNldCkuYml0cygpOworICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1f
Y29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKKyAgICB1aW50MzJfdCBsb2Nh
dGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
YWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAtMjQyLDcgKzI0Miw3IEBA
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kCiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOwogCiAg
ICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5k
ZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29k
ZUlEKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgcmVnVDApOworICAgIGluZm8tPnNl
dFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCByZWdUMCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVu
ZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVj
azsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5r
SW5mbyA9IGluZm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENv
ZGVNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZU1hcC5oCmluZGV4IGUx
MzA4ZjMzNWI4YTM3NDc1OWE4ODcwMGQ4ZDNmZjc1NGU3OWY1OTcuLmUwNzU3MjRmOWRmZThiZDQ5
NWMyMTNkNGM1ZjFiMjFmNWUxYmM0NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29kZU1hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29k
ZU1hcC5oCkBAIC0zOCwzMSArMzgsMzEgQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgRW50cnkgewog
ICAgICAgICBFbnRyeSgpIHsgfQogCi0gICAgICAgIEVudHJ5KHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbikKKyAgICAg
ICAgRW50cnkoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBDb2RlTG9jYXRpb25MYWJlbDxK
U0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24pCiAgICAgICAgICAgICA6IG1fYnl0ZWNvZGVJbmRl
eChieXRlY29kZUluZGV4KQogICAgICAgICAgICAgLCBtX2NvZGVMb2NhdGlvbihjb2RlTG9jYXRp
b24pCiAgICAgICAgIHsgfQogCi0gICAgICAgIGlubGluZSB1bnNpZ25lZCBieXRlY29kZUluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CisgICAgICAgIGlubGluZSBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7
IH0KICAgICAgICAgaW5saW5lIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVM
b2NhdGlvbigpIHsgcmV0dXJuIG1fY29kZUxvY2F0aW9uOyB9CiAKICAgICBwcml2YXRlOgotICAg
ICAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9i
eXRlY29kZUluZGV4OwogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBt
X2NvZGVMb2NhdGlvbjsKICAgICB9OwogCiBwdWJsaWM6Ci0gICAgdm9pZCBhcHBlbmQodW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxv
Y2F0aW9uKQorICAgIHZvaWQgYXBwZW5kKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uKQogICAgIHsKICAgICAg
ICAgbV9lbnRyaWVzLmFwcGVuZCh7IGJ5dGVjb2RlSW5kZXgsIGNvZGVMb2NhdGlvbiB9KTsKICAg
ICB9CiAKICAgICB2b2lkIGZpbmlzaCgpIHsgbV9lbnRyaWVzLnNocmlua1RvRml0KCk7IH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGZpbmQodW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkgY29uc3QKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBmaW5k
KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIGF1dG8q
IGVudHJ5ID0KLSAgICAgICAgICAgIGJpbmFyeVNlYXJjaDxFbnRyeSwgdW5zaWduZWQ+KG1fZW50
cmllcywKKyAgICAgICAgICAgIGJpbmFyeVNlYXJjaDxFbnRyeSwgQnl0ZWNvZGVJbmRleD4obV9l
bnRyaWVzLAogICAgICAgICAgICAgICAgIG1fZW50cmllcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgs
IFtdIChFbnRyeSogZW50cnkpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LT5i
eXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAKaW5kZXggMjBlZDM3ZmVlM2EwZjNjOTljNjI4
MjU0NWE0YzEwYjNiYmUzNzljOS4uNzVmOWUyNTE2MWI1MjM2YjMwYzgzZjMzNmQxZGVkZDEzNDhl
MmRkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJs
ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNw
cApAQCAtMTE4LDcgKzExOCw3IEBAIFZlY3RvcjxKSVREaXNhc3NlbWJsZXI6OkR1bXBlZE9wPiBK
SVREaXNhc3NlbWJsZXI6OmR1bXBWZWN0b3JGb3JJbnN0cnVjdGlvbnMoTGluCiAgICAgICAgIH0K
ICAgICAgICAgb3V0LnJlc2V0KCk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoRHVtcGVkT3AoKSk7
Ci0gICAgICAgIHJlc3VsdC5sYXN0KCkuaW5kZXggPSBpOworICAgICAgICByZXN1bHQubGFzdCgp
LmJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KGkpOwogICAgICAgICBvdXQucHJpbnQocHJl
Zml4KTsKICAgICAgICAgbV9jb2RlQmxvY2stPmR1bXBCeXRlY29kZShvdXQsIGkpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIG5leHRJbmRleCA9IGkgKyAxOyA7IG5leHRJbmRleCsrKSB7CkBAIC0x
NTQsNyArMTU0LDcgQEAgdm9pZCBKSVREaXNhc3NlbWJsZXI6OnJlcG9ydEluc3RydWN0aW9ucyhQ
cm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uLCBMaW4KICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZHVtcGVkT3BzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbXBpbGF0aW9u
LT5hZGREZXNjcmlwdGlvbigKICAgICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxlZEJ5dGVjb2Rl
KAotICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpPcmlnaW5TdGFjayhQcm9maWxlcjo6T3JpZ2lu
KGNvbXBpbGF0aW9uLT5ieXRlY29kZXMoKSwgZHVtcGVkT3BzW2ldLmluZGV4KSksCisgICAgICAg
ICAgICAgICAgUHJvZmlsZXI6Ok9yaWdpblN0YWNrKFByb2ZpbGVyOjpPcmlnaW4oY29tcGlsYXRp
b24tPmJ5dGVjb2RlcygpLCBkdW1wZWRPcHNbaV0uYnl0ZWNvZGVJbmRleCkpLAogICAgICAgICAg
ICAgICAgIGR1bXBlZE9wc1tpXS5kaXNhc3NlbWJseSkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5oCmluZGV4IDVlMzIyODYwMWEzNDAyNDdk
YmZiMDhmNThlMmFjYjUyOTVmZWFhOWYuLjVhNjI3NmFlYzg2MWJhN2RkMDBlMWE0MGM5NTBmNTEy
YzE0ZTExZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNz
ZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIu
aApAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRlOgogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBm
aXJzdFNsb3dMYWJlbCgpOwogICAgIAogICAgIHN0cnVjdCBEdW1wZWRPcCB7Ci0gICAgICAgIHVu
c2lnbmVkIGluZGV4OworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiAgICAg
ICAgIENTdHJpbmcgZGlzYXNzZW1ibHk7CiAgICAgfTsKICAgICBWZWN0b3I8RHVtcGVkT3A+IGR1
bXBWZWN0b3JGb3JJbnN0cnVjdGlvbnMoTGlua0J1ZmZlciYsIGNvbnN0IGNoYXIqIHByZWZpeCwg
VmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpMYWJlbD4mIGxhYmVscywgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIGVuZExhYmVsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKaW5kZXgg
Mzk1OWI4ZDUwODhjNGZhNzA3MGY0ZTU4NmFiMDhjNzU0M2YxZDI4MS4uMTA4MDA0NjNiYWM5Nzhh
YWJiYjFhYWQ0ZWE1NmM2NzhjNzUxYjYwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVzLmgKQEAgLTEwOSwyOSArMTA5LDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRMb2FkQ2hhcmFjdGVyU3RyaW5nKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCwKIAog
QUxXQVlTX0lOTElORSBKSVQ6OkNhbGwgSklUOjplbWl0TmFrZWRDYWxsKENvZGVQdHI8Tm9QdHJU
YWc+IHRhcmdldCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVj
b2RlT2Zmc2V0IGlzIHNldC4KKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBt
ZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRp
b24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KICAgICBDYWxsIG5ha2VkQ2FsbCA9
IG5lYXJDYWxsKCk7Ci0gICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChuYWtlZENhbGwsIG1f
Ynl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4odGFyZ2V0LnJldGFn
Z2VkPE9wZXJhdGlvblB0clRhZz4oKSkpKTsKKyAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3Jk
KG5ha2VkQ2FsbCwgbV9ieXRlY29kZUluZGV4LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KHRhcmdldC5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpKSk7CiAgICAgcmV0dXJuIG5ha2Vk
Q2FsbDsKIH0KIAogQUxXQVlTX0lOTElORSBKSVQ6OkNhbGwgSklUOjplbWl0TmFrZWRUYWlsQ2Fs
bChDb2RlUHRyPE5vUHRyVGFnPiB0YXJnZXQpCiB7Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZz
ZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsgLy8gVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisgICAgQVNTRVJUKG1fYnl0ZWNvZGVJ
bmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2Nv
bGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAgICAg
Q2FsbCBuYWtlZENhbGwgPSBuZWFyVGFpbENhbGwoKTsKLSAgICBtX2NhbGxzLmFwcGVuZChDYWxs
UmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9u
UHRyVGFnPih0YXJnZXQucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKSkpOworICAgIG1fY2Fs
bHMuYXBwZW5kKENhbGxSZWNvcmQobmFrZWRDYWxsLCBtX2J5dGVjb2RlSW5kZXgsIEZ1bmN0aW9u
UHRyPE9wZXJhdGlvblB0clRhZz4odGFyZ2V0LnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkp
KTsKICAgICByZXR1cm4gbmFrZWRDYWxsOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjp1
cGRhdGVUb3BDYWxsRnJhbWUoKQogewotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KG1fYnl0
ZWNvZGVPZmZzZXQpID49IDApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1f
Ynl0ZWNvZGVPZmZzZXQpLnB0cigpOwotICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxT
aXRlSW5kZXgoaW5zdHJ1Y3Rpb24pLmJpdHMoKTsKLSNlbHNlCi0gICAgdWludDMyX3QgbG9jYXRp
b25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KS5iaXRzKCk7Ci0jZW5kaWYK
KyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIHRhZ0Zv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgCiAgICAgLy8gRklYTUU6IEl0
J3Mgbm90IGNsZWFyIHRoYXQgdGhpcyBpcyBuZWVkZWQuIEpJVE9wZXJhdGlvbnMgdGVuZCB0byB1
cGRhdGUgdGhlIHRvcCBjYWxsIGZyYW1lIG9uCkBAIC0xOTYsNDUgKzE5MCw0NSBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJgogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZU9mZnNldChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlciwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRy
eT4mIHNsb3dDYXNlcywgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewotICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNl
cy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZU9mZnNldCkKKyAgICB3aGlsZSAoaXRlciAh
PSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKICAgICAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93
Q2FzZShKdW1wIGp1bXApCiB7Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZU9mZnNldCBpcyBzZXQuCisgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRo
aXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5l
cmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKLSAgICBtX3Nsb3dDYXNl
cy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlT2Zmc2V0KSk7CisgICAgbV9z
bG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0JiBq
dW1wTGlzdCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
T2Zmc2V0IGlzIHNldC4KKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGZvciAoY29uc3QgSnVtcCYg
anVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVPZmZzZXQpKTsKKyAgICAgICAgbV9zbG93Q2FzZXMu
YXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZUluZGV4KSk7CiB9CiAKIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29k
ZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOyAvLyBUaGlz
IG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJh
dGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKyAgICBBU1NFUlQobV9ieXRl
Y29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBo
b3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4K
ICAgICAKICAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBX
aW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5
SnVtcCwgbV9ieXRlY29kZU9mZnNldCkpOworICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KGVtcHR5SnVtcCwgbV9ieXRlY29kZUluZGV4KSk7CiB9CiAKIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCiB7Ci0gICAg
QVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisg
ICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNv
ZGVJbmRleCBpcyBzZXQuCiAKLSAgICBtX2ptcFRhYmxlLmFwcGVuZChKdW1wVGFibGUoanVtcCwg
bV9ieXRlY29kZU9mZnNldCArIHJlbGF0aXZlT2Zmc2V0KSk7CisgICAgbV9qbXBUYWJsZS5hcHBl
bmQoSnVtcFRhYmxlKGp1bXAsIG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zm
c2V0KSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoY29uc3QgSnVtcExp
c3QmIGp1bXBMaXN0LCBpbnQgcmVsYXRpdmVPZmZzZXQpCiB7Ci0gICAgQVNTRVJUKG1fYnl0ZWNv
ZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsgLy8gVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisgICAgQVNTRVJUKG1fYnl0
ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQu
CiAKICAgICBmb3IgKGF1dG8mIGp1bXAgOiBqdW1wTGlzdC5qdW1wcygpKQogICAgICAgICBhZGRK
dW1wKGp1bXAsIHJlbGF0aXZlT2Zmc2V0KTsKQEAgLTI0Miw5ICsyMzYsOSBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjphZGRKdW1wKGNvbnN0IEp1bXBMaXN0JiBqdW1wTGlzdCwgaW50IHJlbGF0
aXZlT2Zmc2V0KQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdChK
dW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9m
ZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1l
dGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlv
biwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKyAgICBBU1NFUlQobV9ieXRlY29k
ZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAot
ICAgIGp1bXAubGlua1RvKG1fbGFiZWxzW21fYnl0ZWNvZGVPZmZzZXQgKyByZWxhdGl2ZU9mZnNl
dF0sIHRoaXMpOworICAgIGp1bXAubGlua1RvKG1fbGFiZWxzW21fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSArIHJlbGF0aXZlT2Zmc2V0XSwgdGhpcyk7CiB9CiAKICNpZiBFTkFCTEUoU0FNUExJTkdf
RkxBR1MpCkBAIC01NzMsNyArNTY3LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3Bl
cmFuZENvbnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMyX3QKIC8vIGdl
dCBhcmcgcHV0cyBhbiBhcmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIgYXJyYXkgaW50byBhIGgvdyBy
ZWdpc3RlcgogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bnQgc3JjLCBSZWdpc3RlcklEIGRzdCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAh
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBz
aG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28g
dGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4
KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBw
YXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGlm
IChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgewogICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCBmM2FiNTlhYTk0MjM0ZWE0MTI4ZWI0
OTVjMzkyY2U5OTViNjYzMzJmLi4wZmM0MDY5MjdmNzJkYmEwYmU1NzViYjhiMDBiOWY0Y2E2ZTZm
YzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTE2OSw3
ICsxNjksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZU9mZnNldCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICByZWdUMCwgLy8g
cmVzdWx0CiAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQpAQCAtNzIwLDkgKzcyMCw5IEBAIHZvaWQg
SklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZm
ZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNv
ZGVPZmZzZXQpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRD
YXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgZWxzZQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmls
ZSwgJnZtKCksIG1fYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJ
bmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBza2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFpl
cm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAg
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CkBAIC03NjAs
NyArNzYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3
aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1w
bGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUs
IG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRl
KSk7CisgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRl
Y29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAg
IGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NydXRpbmVlLCByZWdUMCk7CkBAIC03NzcsNyArNzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAog
ICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0
aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAm
bV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBtX3N3aXRjaGVz
LmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlT2Zmc2V0LCBkZWZhdWx0
T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOworICAgIG1fc3dpdGNoZXMuYXBwZW5k
KFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwg
U3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxl
KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwpAQCAt
Nzk0LDcgKzc5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxl
IGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAg
ICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNv
cmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlT2Zmc2V0LCBkZWZhdWx0T2Zmc2V0KSk7CisgICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBk
ZWZhdWx0T2Zmc2V0KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwg
cmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25v
d25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCB0YWJsZUluZGV4KTsKQEAgLTEwMzYsNyArMTAzNiw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsCiAKICAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVPZmZzZXQp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRl
Y29kZUluZGV4LmFzQml0cygpKTsKICAgICAgICAgSnVtcCBub09wdGltaXplZEVudHJ5ID0gYnJh
bmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgIGlmICghQVNTRVJUX0RJ
U0FCTEVEKSB7CiAgICAgICAgICAgICBKdW1wIG9rID0gYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZSwgcmV0dXJuVmFsdWVHUFIsIFRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQq
PihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMTAwMCkpKSk7CkBAIC0xMzAxLDcgKzEzMDEsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogCiAgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwog
ICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25J
bmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBl
LCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29k
ZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5l
eHRIb3RQYXRoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUwNCw3ICsxNTA0LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRv
d1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpLCByZWdUMik7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7Ci0g
ICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVn
cyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zm
c2V0KSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBK
U1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXggODczNDllZTg1YTM5
YTZiZjM0MjdkZDQ2NzE2YTRjYjRhOTQ3Yzc1Mi4uZWI1MWU0ZTNhNGU3NDc0N2U4MGM4NTAxYzE0
OWE5YWVjMjc3OTQyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcApAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocHJvdG8pOwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwKKyAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAg
ICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCkBAIC05MTIs
OSArOTEyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIg
PSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmls
aW5nKCkpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNo
LCAmdm0oKSwgbV9ieXRlY29kZU9mZnNldCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsK
ICAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENh
dGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZU9mZnNldCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAm
dm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JFbnRyeSA9
IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CkBAIC05
NTIsNyArOTUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9y
IHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBT
aW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwotICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFi
bGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRp
YXRlKSk7CisgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9i
eXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwog
ICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAogICAgIGVtaXRMb2FkKHNjcnV0aW5l
ZSwgcmVnVDEsIHJlZ1QwKTsKQEAgLTk2OSw3ICs5NjksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9z
d2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAg
Ly8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMg
c3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2Nv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIG1fc3dpdGNoZXMuYXBw
ZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRPZmZz
ZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CisgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dp
dGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0
Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsK
IAogICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKQEAgLTk4Niw3ICs5ODYs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNo
IGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFN0cmluZ0p1
bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7Ci0gICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJs
ZSwgbV9ieXRlY29kZU9mZnNldCwgZGVmYXVsdE9mZnNldCkpOworICAgIG1fc3dpdGNoZXMuYXBw
ZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNl
dCkpOwogCiAgICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5k
ZXgpOwpAQCAtMTE3NCw3ICsxMTc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIExh
YmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsKICAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVPZmZz
ZXQsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhv
dFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0
aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRU
eXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDg4ZDUwOGEw
M2RkMGE0OTRmNDllYjIzNDExNDVjY2RhYzdjOTNkZWYuLjM4MDk0NjFhYmU1Mjc3NTU3YWUxYTcy
ZmUxNjdhY2FjYzFhYjM5ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcApAQCAtNzk3LDcgKzc5Nyw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQg
dHJ5UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsCiAg
ICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKICAg
ICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAKLSAgICAgICAg
QVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgIEFTU0VSVChjYWxs
RnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgQVNT
RVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKIAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKQEAgLTgyMSw3ICs4MjEsNyBAQCBzdGF0aWMg
T3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbAogICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9
IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKTsKICAgICAgICAg
aWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsK
LSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAg
ICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgo
MCkpOwogICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKICAgICAg
ICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKICAgICAgICAgICAgICAgICBpZiAoYnlWYWxJ
bmZvLT5jYWNoZWRJZCA9PSBwcm9wZXJ0eU5hbWUpIHsKQEAgLTg4Nyw3ICs4ODcsNyBAQCBzdGF0
aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIGlmIChzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEFTU0VSVChj
YWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5i
eXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIEFTU0VSVCghYnlW
YWxJbmZvLT5zdHViUm91dGluZSk7CiAKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBv
YmplY3QtPnN0cnVjdHVyZSh2bSk7CkBAIC05MTAsNyArOTEwLDcgQEAgc3RhdGljIE9wdGltaXph
dGlvblJlc3VsdCB0cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QKICAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3Jp
cHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCk7CiAgICAgICAgIGlmIChzdWJz
Y3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgICAgIEFT
U0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKICAg
ICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CiAgICAgICAgICAgICBp
ZiAoYnlWYWxJbmZvLT5zZWVuKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+Y2Fj
aGVkSWQgPT0gcHJvcGVydHlOYW1lKSB7CkBAIC0xNDc4LDExICsxNDc4LDEyIEBAIHN0YXRpYyB2
b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kT3B0aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sq
IGNvZGVCbG9jaykKICAgICBjb2RlQmxvY2stPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKIH0KIAot
U2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT3B0aW1pemUoVk0qIHZt
UG9pbnRlciwgdWludDMyX3QgYnl0ZWNvZGVJbmRleCkKK1Nsb3dQYXRoUmV0dXJuVHlwZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXplKFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVj
b2RlSW5kZXhCaXRzKQogewogICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7CiAgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYnl0ZWNvZGVJbmRleEJpdHMpOwogCiAg
ICAgLy8gRGVmZXIgR0MgZm9yIGEgd2hpbGUgc28gdGhhdCBpdCBkb2Vzbid0IHJ1biBiZXR3ZWVu
IHdoZW4gd2UgZW50ZXIgaW50byB0aGlzCiAgICAgLy8gc2xvdyBwYXRoIGFuZCB3aGVuIHdlIGZp
Z3VyZSBvdXQgdGhlIHN0YXRlIG9mIG91ciBjb2RlIGJsb2NrLiBUaGlzIHByZXZlbnRzCkBAIC0x
NzI0LDExICsxNzI1LDEyIEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk9wdGltaXplKFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjCiAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdCgwLCAwKTsKIH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlP
U1JFbnRlckF0Q2F0Y2goVk0qIHZtUG9pbnRlciwgdWludDMyX3QgYnl0ZWNvZGVJbmRleCkKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoKFZNKiB2bVBvaW50
ZXIsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXhCaXRzKQogewogICAgIFZNJiB2bSA9ICp2bVBvaW50
ZXI7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYnl0ZWNv
ZGVJbmRleEJpdHMpOwogCiAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRSZXBsYWNlbWVudCA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCktPnJlcGxhY2VtZW50KCk7CiAgICAgaWYgKFVOTElLRUxZKCFv
cHRpbWl6ZWRSZXBsYWNlbWVudCkpCkBAIC0xNzQ2LDExICsxNzQ4LDEyIEBAIGNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoKFZNKiB2bVBvaW50ZXIsIHVpbnQz
Ml90IGJ5dGVjb2RlCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLWNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlKFZNKiB2bVBvaW50
ZXIsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZShWTSogdm1Qb2ludGVyLCB1aW50MzJf
dCBieXRlY29kZUluZGV4Qml0cykKIHsKICAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOwogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRzKGJ5dGVjb2RlSW5kZXhCaXRz
KTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
ICAgICBDb2RlQmxvY2sqIG9wdGltaXplZFJlcGxhY2VtZW50ID0gY29kZUJsb2NrLT5yZXBsYWNl
bWVudCgpOwpAQCAtMTc2Nyw3ICsxNzcwLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUoVk0qIHZtUG9pbnRlciwgdWkKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNz
SXNDb21wdXRlZEZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgpOworICAgIGNvZGVCbG9j
ay0+ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
SW5kZXgpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KGJ5dGVjb2RlSW5kZXgpLT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKICAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFj
aChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKQEAgLTE5MjcsNyArMTkz
MCw3IEBAIHN0YXRpYyBKU1ZhbHVlIGdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhCiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKGV4aXN0aW5nQXRvbVN0
cmluZykgewogICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5h
c0NlbGwoKS0+ZmFzdEdldE93blByb3BlcnR5KHZtLCBzdHJ1Y3R1cmUsIGV4aXN0aW5nQXRvbVN0
cmluZy5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0
ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5
dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgYnlWYWxJbmZvLT5jYWNoZWRJZC5pbXBsKCkgIT0g
ZXhpc3RpbmdBdG9tU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT50
b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtMTkzNyw3ICsxOTQwLDcgQEAgc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmEKICAgICB9CiAKICAg
ICBpZiAoc3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5i
eXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRl
eCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0
aCA9IHRydWU7CiAKICAgICAgICAgaW50MzJfdCBpID0gc3Vic2NyaXB0LmFzSW50MzIoKTsKQEAg
LTE5NzgsNyArMTk4MSw3IEBAIHN0YXRpYyBKU1ZhbHVlIGdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhCiAgICAgYXV0byBwcm9w
ZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAotICAgIEFTU0VSVChjYWxsRnJhbWUt
PmJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgo
KSAhPSBCeXRlY29kZUluZGV4KDApKTsKICAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAo
IWlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNhY2hlZElkICE9IHBy
b3BlcnR5KSkKICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogCkBAIC0x
OTk2LDcgKzE5OTksNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeUdldEJ5VmFsT3B0
aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbAogICAgIGlmIChiYXNlVmFs
dWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7CiAgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwogCi0gICAgICAgIEFTU0VSVChjYWxsRnJh
bWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29k
ZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZv
LT5zdHViUm91dGluZSk7CiAKICAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2Jq
ZWN0LT5zdHJ1Y3R1cmUodm0pKSkgewpAQCAtMjAyNCw3ICsyMDI3LDcgQEAgc3RhdGljIE9wdGlt
aXphdGlvblJlc3VsdCB0cnlHZXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGwKICAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJz
Y3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCk7CiAgICAgICAgIGlmIChz
dWJzY3JpcHQuaXNTeW1ib2woKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgICAg
IEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsK
ICAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CiAgICAgICAgICAg
ICBpZiAoYnlWYWxJbmZvLT5zZWVuKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+
Y2FjaGVkSWQgPT0gcHJvcGVydHlOYW1lKSB7CkBAIC0yMTA4LDcgKzIxMTEsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQo
SlNHbG9iYWxPYmplY3QqCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1
ZSk7CiAgICAgYm9vbCBkaWRPcHRpbWl6ZSA9IGZhbHNlOwogCi0gICAgQVNTRVJUKGNhbGxGcmFt
ZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRl
eCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91
dGluZSk7CiAgICAgCiAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2JqZWN0LT5zdHJ1
Y3R1cmUodm0pKSkgewpAQCAtMjE4MSw3ICsyMTg0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWMKICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChnbG9iYWxPYmplY3QsIGkpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAg
ICAgaWYgKCFpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxs
RnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+
Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICAgICAgYXV0byBn
ZXRCeVZhbEZ1bmN0aW9uID0gYnlWYWxJbmZvLT5zdHViUm91dGluZSA/IG9wZXJhdGlvbkdldEJ5
VmFsR2VuZXJpYyA6IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7CiAgICAgICAgICAgICBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJF
U1MpLCBnZXRCeVZhbEZ1bmN0aW9uKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCA5ZWQyMzc3YzBhYTA0Y2YwMWVl
M2JmZWJkNWM5MGRmZjRlYjI3MzAxLi5mZjM5YjIyYjBmMTdkY2I4NDEwOTNiNDU1ZTg5NDZiMGI0
Y2JkODc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIExhYmVsIG5leHRI
b3RQYXRoID0gbGFiZWwoKTsKIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5
VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwgbm90SW5kZXgs
IGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBt
X2J5dGVjb2RlSW5kZXgsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBu
ZXh0SG90UGF0aCkpOwogfQogCiBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5VmFs
V2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBPcEdldEJ5VmFsIGJ5dGVjb2RlLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXAmIGZhc3REb25lQ2FzZSwgSnVtcCYg
c2xvd0RvbmVDYXNlLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQpAQCAtMTQyLDcgKzE0Miw3IEBAIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZv
KiBieVZhbEluZm8sIE9wR2V0QnlWCiAgICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFs
SW5mbywgcmVnVDEsIHJlZ1QzLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIHByb3Bl
cnR5TmFtZS5pbXBsKCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBB
Y2Nlc3NUeXBlOjpHZXQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKIApAQCAt
MjYwLDcgKzI2MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAKICAgICBMYWJlbCBkb25lID0gbGFiZWwo
KTsKICAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0
aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQsIG5vdEluZGV4LCBiYWRUeXBlLCBt
b2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5h
cHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIG5v
dEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgpAQCAtMzc1LDcgKzM3NSw3IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3Ig
SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9wIGJ5
dGVjCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdU
MSk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9m
ZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwg
bV9jb2RlQmxvY2stPmVjbWFNb2RlKCksIHB1dEtpbmQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0
ZXJCYXNlKTsKQEAgLTUwNSw3ICs1MDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9m
ZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIGlkZW50LT5pbXBsKCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpUcnlH
ZXQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNTQ0LDcgKzU0NCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAg
aWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFj
Y2Vzc1R5cGU6OkdldERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC01OTAsNyArNTkwLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgfQogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAogICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0KTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAg
LTYxNCw3ICs2MTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
T2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgaWRlbnQtPmltcGwo
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QxKSwgQWNjZXNzVHlwZTo6R2V0V2l0aFRoaXMpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNjc0LDcg
KzY3NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZVZSZWcpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgcmVnVDIsIG1fY29kZUJsb2NrLT5lY21hTW9kZSgpLAogICAgICAgICBkaXJlY3QgPyBEaXJl
Y3QgOiBOb3REaXJlY3QpOwogICAgIApAQCAtNzE0LDcgKzcxNCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJ
bkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgaWRlbnQt
PmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlz
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAppbmRleCBl
OWI0NzJhYmY4ODQ4MDU0YWE3ZmJkYzljMmFjZGRlYjFhNzVjN2I5Li5jNjQ4ZDQ2YWY0YTFhNzhk
YWY2MDcwMjQ0ZmE5ZDk5NTRjZjc3NmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFdvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFdvcmtsaXN0LmNwcApAQCAtMzYsOSArMzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
SklUV29ya2xpc3Q6OlBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUV29ya2xp
c3Q6OlBsYW4+IHsKIHB1YmxpYzoKLSAgICBQbGFuKENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNp
Z25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkKKyAgICBQbGFuKENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgICAg
IDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICAgICAsIG1faml0KGNvZGVCbG9jay0+dm0o
KSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkKKyAgICAgICAgLCBtX2pp
dChjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkK
ICAgICB7CiAgICAgICAgIG1faml0LmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGls
ZSgpOwogICAgIH0KQEAgLTgzLDkgKzgzLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9p
c0ZpbmlzaGVkQ29tcGlsaW5nOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCBjb21waWxl
Tm93KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9m
ZnNldCkKKyAgICBzdGF0aWMgdm9pZCBjb21waWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBQ
bGFuIHBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7CisgICAgICAg
IFBsYW4gcGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAg
ICBwbGFuLmNvbXBpbGVJblRocmVhZCgpOwogICAgICAgICBwbGFuLmZpbmFsaXplKCk7CiAgICAg
fQpAQCAtMjI4LDcgKzIyOCw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OnBvbGwoVk0mIHZtKQogICAg
IGZpbmFsaXplUGxhbnMobXlQbGFucyk7CiB9CiAKLXZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVM
YXRlcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVP
ZmZzZXQpCit2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKICAgICBEZWZl
ckdDIGRlZmVyR0MoY29kZUJsb2NrLT52bSgpLmhlYXApOwogICAgIFJFTEVBU0VfQVNTRVJUKGNv
ZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOwpAQCAtMjM5
LDcgKzIzOSw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvCiAgICAgfQogICAgIAogICAgIGlm
ICghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSB7Ci0gICAgICAgIFBsYW46OmNvbXBpbGVO
b3coY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7CisgICAgICAgIFBsYW46
OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTI1Myw3ICsyNTMsNyBAQCB2b2lkIEpJVFdvcmts
aXN0Ojpjb21waWxlTGF0ZXIoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGxvb3BPU1JF
bnRyeUJ5dGVjbwogICAgICAgICAKICAgICAgICAgaWYgKG1fbnVtQXZhaWxhYmxlVGhyZWFkcykg
ewogICAgICAgICAgICAgbV9wbGFubmVkLmFkZChjb2RlQmxvY2spOwotICAgICAgICAgICAgUmVm
UHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZihuZXcgUGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRy
eUJ5dGVjb2RlT2Zmc2V0KSk7CisgICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0
UmVmKG5ldyBQbGFuKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpOwogICAg
ICAgICAgICAgbV9wbGFucy5hcHBlbmQocGxhbik7CiAgICAgICAgICAgICBtX3F1ZXVlLmFwcGVu
ZChwbGFuKTsKICAgICAgICAgICAgIG1fY29uZGl0aW9uLT5ub3RpZnlBbGwobG9ja2VyKTsKQEAg
LTI3NywxMCArMjc3LDEwIEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvCiAgICAgLy8gVGhpcyB3
b3JrcyBhcm91bmQgdGhlIGlzc3VlLiBJZiB0aGUgY29uY3VycmVudCBKSVQgdGhyZWFkIGlzIGNv
bnZveWVkLCB3ZSByZXZlcnQgdG8gbWFpbgogICAgIC8vIHRocmVhZCBjb21waWxlcy4gVGhpcyBp
cyBwcm9iYWJseSBub3QgYXMgZ29vZCBhcyBpZiB3ZSBoYWQgbXVsdGlwbGUgSklUIHRocmVhZHMu
IE1heWJlIHdlCiAgICAgLy8gY2FuIGRvIHRoYXQgc29tZWRheS4KLSAgICBQbGFuOjpjb21waWxl
Tm93KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpOworICAgIFBsYW46OmNv
bXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KTsKIH0KIAotdm9p
ZCBKSVRXb3JrbGlzdDo6Y29tcGlsZU5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQg
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpCit2b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93
KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCiB7CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKQEAgLTMwOCw3ICszMDgsNyBAQCB2b2lkIEpJVFdvcmtsaXN0Ojpjb21w
aWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29k
ZQogICAgIGNvZGVCbG9jay0+cmVzZXRKSVREYXRhKCk7CiAgICAgCiAgICAgLy8gT0ssIGp1c3Qg
Y29tcGlsZSBpdC4KLSAgICBKSVQ6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25NdXN0U3VjY2VlZCwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpOworICAgIEpJVDo6Y29t
cGlsZSh2bSwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KTsKICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0
YWxsQ29kZShjb2RlQmxvY2spOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFdvcmtsaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmts
aXN0LmgKaW5kZXggZWI2ZjU1MTVkZjcwMzk3ZTczMGMxYzI3OTk5ZmZiMzgyZjZiMmI2MS4uZWRm
ZWM1YzgzODkyMzgxYjhiYThlYzA4YThiM2FhNDFjNGM3MjViOSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUV29ya2xpc3QuaApAQCAtNTMsOSArNTMsOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBjb21wbGV0ZUFsbEZvclZNKFZNJik7IC8vIFJldHVybiB0cnVlIGlmIGFueSBKSVQgd29yayBo
YXBwZW5lZC4KICAgICB2b2lkIHBvbGwoVk0mKTsKICAgICAKLSAgICB2b2lkIGNvbXBpbGVMYXRl
cihDb2RlQmxvY2sqLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IDApOwot
ICAgIAotICAgIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqLCB1bnNpZ25lZCBsb29wT1NSRW50
cnlCeXRlY29kZU9mZnNldCA9IDApOworICAgIHZvaWQgY29tcGlsZUxhdGVyKENvZGVCbG9jayos
IEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
MCkpOworICAgIHZvaWQgY29tcGlsZU5vdyhDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4IGxvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAKICAgICBzdGF0
aWMgSklUV29ya2xpc3QmIGVuc3VyZUdsb2JhbFdvcmtsaXN0KCk7CiAgICAgc3RhdGljIEpJVFdv
cmtsaXN0KiBleGlzdGluZ0dsb2JhbFdvcmtsaXN0T3JOdWxsKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwCmluZGV4IDIxMjk4YWQ4NGNhZjM2
OTMwM2IzNWQyZDM5ODIxODNiYTZlNTA3ZDguLjI2NDcxOGQ5N2M3ODRiYzJmYTc3NDAzMWFmY2Ri
MDgwOTlkMWU1OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0Nv
ZGVPcmlnaW5NYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVP
cmlnaW5NYXAuY3BwCkBAIC0xODksOSArMTg5LDkgQEAgUENUb0NvZGVPcmlnaW5NYXA6OlBDVG9D
b2RlT3JpZ2luTWFwKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYmIGJ1aWxkZXIsIExpbmtCdWYK
ICAgICB9OwogCiAgICAgRGVsdGFDb21wcmVzc2lvbkJ1aWxkZXIgY29kZU9yaWdpbkNvbXByZXNz
b3IoKHNpemVvZihpbnRwdHJfdCkgKyBzaXplb2YoaW50OF90KSArIHNpemVvZihpbnQ4X3QpICsg
c2l6ZW9mKElubGluZUNhbGxGcmFtZSopKSAqIGJ1aWxkZXIubV9jb2RlUmFuZ2VzLnNpemUoKSk7
Ci0gICAgQ29kZU9yaWdpbiBsYXN0Q29kZU9yaWdpbigwLCBudWxscHRyKTsKKyAgICBDb2RlT3Jp
Z2luIGxhc3RDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgIGF1dG8gYnVpbGRDb2Rl
T3JpZ2luVGFibGUgPSBbJl0gKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pIHsKLSAgICAg
ICAgaW50cHRyX3QgZGVsdGEgPSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCkpIC0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGxhc3RDb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgoKSk7CisgICAgICAgIGludHB0cl90IGRlbHRhID0gc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLm9mZnNldCgpKSAtIHN0YXRpY19jYXN0PGlu
dHB0cl90PihsYXN0Q29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCkpOwogICAgICAg
ICBsYXN0Q29kZU9yaWdpbiA9IGNvZGVPcmlnaW47CiAgICAgICAgIGlmIChkZWx0YSA+IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWF4KCkgfHwgZGVsdGEgPCBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDhfdD46Om1pbigpIHx8IGRlbHRhID09IHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSkgewog
ICAgICAgICAgICAgY29kZU9yaWdpbkNvbXByZXNzb3Iud3JpdGU8aW50OF90PihzZW50aW5lbEJ5
dGVjb2RlRGVsdGEpOwpAQCAtMjU0LDcgKzI1NCw3IEBAIE9wdGlvbmFsPENvZGVPcmlnaW4+IFBD
VG9Db2RlT3JpZ2luTWFwOjpmaW5kUEModm9pZCogcGMpIGNvbnN0CiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKICAgICB1aW50cHRyX3QgY3VycmVudFBDID0gMDsKLSAgICB1bnNpZ25l
ZCBjdXJyZW50Qnl0ZWNvZGVJbmRleCA9IDA7CisgICAgQnl0ZWNvZGVJbmRleCBjdXJyZW50Qnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgSW5saW5lQ2FsbEZyYW1lKiBjdXJy
ZW50SW5saW5lQ2FsbEZyYW1lID0gbnVsbHB0cjsKIAogICAgIERlbHRhQ29tcHJlc3NlaW9uUmVh
ZGVyIHBjUmVhZGVyKG1fY29tcHJlc3NlZFBDcywgbV9jb21wcmVzc2VkUENCdWZmZXJTaXplKTsK
QEAgLTI4MCw3ICsyODAsNyBAQCBPcHRpb25hbDxDb2RlT3JpZ2luPiBQQ1RvQ29kZU9yaWdpbk1h
cDo6ZmluZFBDKHZvaWQqIHBjKSBjb25zdAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGRlbHRhID0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKTsKIAotICAgICAgICAgICAg
Y3VycmVudEJ5dGVjb2RlSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KGN1cnJlbnRCeXRlY29kZUluZGV4KSArIGRlbHRhKTsKKyAgICAgICAgICAgIGN1
cnJlbnRCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChzdGF0aWNfY2FzdDxpbnRwdHJfdD4o
Y3VycmVudEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpICsgZGVsdGEpOwogCiAgICAgICAgICAgICBp
bnQ4X3QgaGFzSW5saW5lRnJhbWUgPSBjb2RlT3JpZ2luUmVhZGVyLnJlYWQ8aW50OF90PigpOwog
ICAgICAgICAgICAgQVNTRVJUKGhhc0lubGluZUZyYW1lID09IDAgfHwgaGFzSW5saW5lRnJhbWUg
PT0gMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3Jp
Z2luTWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgK
aW5kZXggOWZiNjJiNjQ1YmFmYjRhMTNmZjdlZmI3Zjc2MWNhOTJiZWEzZTVmYS4uYjBkNTYxZmM1
NmQ1ZjA4MTBjOGMwZWNmYWZmNzIyZDJkM2IzM2YyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuaApAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogICAgIHZvaWQgYXBwZW5kSXRlbShNYWNyb0Fzc2VtYmxlcjo6TGFiZWwsIGNvbnN0
IENvZGVPcmlnaW4mKTsKLSAgICBzdGF0aWMgQ29kZU9yaWdpbiBkZWZhdWx0Q29kZU9yaWdpbigp
IHsgcmV0dXJuIENvZGVPcmlnaW4oMCwgbnVsbHB0cik7IH0KKyAgICBzdGF0aWMgQ29kZU9yaWdp
biBkZWZhdWx0Q29kZU9yaWdpbigpIHsgcmV0dXJuIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgw
KSk7IH0KIAogICAgIGJvb2wgZGlkQnVpbGRNYXBwaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91
bGRCdWlsZE1hcHBpbmc7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TbG93UGF0aENhbGwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxs
LmgKaW5kZXggOGQyZmFhODQ1YjhmOGNiOWMzMGM5ODA0MDY2MGI3NjEwOTc5YTZlMi4uYzExZTc5
YjBjNTYxY2EzM2NjYjJiYmUwYThlYjNhZjZlZGE2YmNlMyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1Nsb3dQYXRoQ2FsbC5oCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICAgICAg
bV9qaXQtPm1vdmUoSklUOjpUcnVzdGVkSW1tUHRyKG1fcGMpLCBKSVQ6OmFyZ3VtZW50R1BSMSk7
CiAjZW5kaWYKICAgICAgICAgSklUOjpDYWxsIGNhbGwgPSBtX2ppdC0+Y2FsbChPcGVyYXRpb25Q
dHJUYWcpOwotICAgICAgICBtX2ppdC0+bV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBt
X2ppdC0+bV9ieXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihtX3Ns
b3dQYXRoRnVuY3Rpb24pKSk7CisgICAgICAgIG1faml0LT5tX2NhbGxzLmFwcGVuZChDYWxsUmVj
b3JkKGNhbGwsIG1faml0LT5tX2J5dGVjb2RlSW5kZXgsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4obV9zbG93UGF0aEZ1bmN0aW9uKSkpOwogCiAjaWYgQ1BVKFg4Nl82NCkgJiYgT1MoV0lO
RE9XUykKICAgICAgICAgbV9qaXQtPnBvcChKSVQ6OnJlZ1QwKTsgLy8gdlBDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCA0YjA1ZjY4ZjE3
MjAzMDQxMTk4ZWEyNDc3YjYwNGViMzA2ODMyYWUxLi42MGI0OWY5MTE2M2Y1M2M0ZDQ3ODViZDEx
NDNkYTVkOWNlMDQ2YWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAKQEAgLTM2OCw3ICszNjgsNyBAQCBpbmxpbmUgYm9vbCBzaG91bGRKSVQo
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQg
dHJ5IHRvIE9TUi4KLWlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zm
c2V0ID0gMCkKK2lubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiB7CiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdD
KHZtLmhlYXApOyAvLyBNeSBjYWxsZXJzIGRvbid0IHNldCB0b3AgY2FsbGZyYW1lLCBzbyB3ZSBk
b24ndCB3YW50IHRvIEdDIGhlcmUgYXQgYWxsLgogICAgIEFTU0VSVChWTTo6Y2FuVXNlSklUKCkp
OwpAQCAtMzkyLDcgKzM5Miw3IEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0
aWNzKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGxvCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6IHsK
LSAgICAgICAgSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGlsZUxhdGVy
KGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBKSVRXb3Jr
bGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21waWxlTGF0ZXIoY29kZUJsb2NrLCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KTsKICAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUOwogICAgIH0KICAgICBkZWZhdWx0OgpAQCAtNDc2
LDIyICs0NzYsMjIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgICAgICAg
ICBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSwgIlxuIik7CiAgICAgfQogICAgIAot
ICAgIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gY29kZUJsb2NrLT5ieXRl
Y29kZU9mZnNldChwYyk7CisgICAgYXV0byBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleChjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KHBjKSk7CiAKICAgICBpZiAoIXNo
b3VsZEpJVChjb2RlQmxvY2spKSB7CiAgICAgICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVT
b29uKCk7CiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08oMCwgMCk7CiAgICAgfQogICAgIAotICAg
IGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Modm0sIGNvZGVCbG9jaywgbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVPZmZzZXQpKQorICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Mo
dm0sIGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkpCiAgICAgICAgIExMSU5U
X1JFVFVSTl9UV08oMCwgMCk7CiAgICAgCi0gICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxv
Y2ssICJvc3JFbnRyeSIsICgiYXQgYmMjIiwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpKTsK
KyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgIm9zckVudHJ5IiwgKCJhdCAiLCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CiAKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwogCiAgICAgY29uc3QgSklUQ29kZU1hcCYg
Y29kZU1hcCA9IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpOwotICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmluZChsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29k
ZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAg
IEFTU0VSVChjb2RlTG9jYXRpb24pOwogCiAgICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2Nh
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwpAQCAtMTg4OCwxMSArMTg4OCw4IEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCkKICAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGdldE5vbkNvbnN0YW50T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlKTsKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICAKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleChjb2RlQmxvY2stPmJ5dGVj
b2RlT2Zmc2V0KHBjKSk7Ci0jZWxzZQotICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleChw
Yyk7Ci0jZW5kaWYKKyAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eChjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KHBjKSkpOworCiAgICAgU2hhZG93Q2hpY2tlbiog
c2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKICAgICBSRUxFQVNFX0FTU0VSVChz
aGFkb3dDaGlja2VuKTsKICAgICBzaGFkb3dDaGlja2VuLT5sb2codm0sIGNhbGxGcmFtZSwgU2hh
ZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsKGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBzY29wZSwgY29k
ZUJsb2NrLCBjYWxsU2l0ZUluZGV4KSk7CkBAIC0xOTA0LDcgKzE5MDEsNyBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmlsZV9jYXRjaCkKIHsKICAgICBMTElOVF9CRUdJTigp
OwogCi0gICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVj
b2RlT2Zmc2V0KGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CisgICAgY29kZUJsb2NrLT5l
bnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgoY2FsbEZyYW1lLT5i
eXRlY29kZUluZGV4KCkpOwogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENhdGNoPigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW4uY3BwCmlu
ZGV4IDEwMjIyYTIzOTZjNzFlMmJjOTI0M2Y4ZTJhZDI4NWJjNTc2MDQ5ZTkuLjNhYWVkZTcyMDdj
ODk1N2I2MDMwOTM0MTdjYjJkNjA5ZTY5YjBlMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luLmNwcApAQCAtMzQsNyArMzQsNyBAQAogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFByb2ZpbGVyIHsKIAotT3JpZ2luOjpPcmlnaW4oRGF0
YWJhc2UmIGRhdGFiYXNlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkKK09yaWdpbjo6T3JpZ2luKERhdGFiYXNlJiBkYXRhYmFzZSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICA6IG1fYnl0ZWNvZGVzKGRh
dGFiYXNlLmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2spKQogICAgICwgbV9ieXRlY29kZUlu
ZGV4KGJ5dGVjb2RlSW5kZXgpCiB7CkBAIC00Miw3ICs0Miw3IEBAIE9yaWdpbjo6T3JpZ2luKERh
dGFiYXNlJiBkYXRhYmFzZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCiAKIHZvaWQgT3JpZ2luOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0g
ICAgb3V0LnByaW50KCptX2J5dGVjb2RlcywgIjpiYyMiLCBtX2J5dGVjb2RlSW5kZXgpOworICAg
IG91dC5wcmludCgqbV9ieXRlY29kZXMsICIgIiwgbV9ieXRlY29kZUluZGV4KTsKIH0KIAogSlNW
YWx1ZSBPcmlnaW46OnRvSlMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKQEAg
LTUwLDcgKzUwLDcgQEAgSlNWYWx1ZSBPcmlnaW46OnRvSlMoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkgY29uc3QKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNP
YmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVjb2Rlc0lELCBqc051
bWJlcihtX2J5dGVjb2Rlcy0+aWQoKSkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5ieXRlY29kZUluZGV4LCBqc051bWJlcihtX2J5dGVjb2RlSW5kZXgpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZWNvZGVJbmRl
eCwganNOdW1iZXIobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyT3JpZ2luLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmln
aW4uaAppbmRleCA4NjgyNjYxNzllMTUzOTQwYTE5NzJlNWNlY2RkN2U2NTk1ZTU1ZjNmLi4yMzcy
NmZhOTk1ZmE3YTI2Y2E0OWIzZjNiYjdiODZiYTRmZDYxZTFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW4uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW4uaApAQCAtMjUsNiArMjUsNyBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKICNpbmNsdWRlICJD
b2RlQmxvY2tIYXNoLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgpAQCAtNDAsMjkgKzQxLDI0IEBAIGNsYXNzIERhdGFiYXNlOwogCiBjbGFz
cyBPcmlnaW4gewogcHVibGljOgotICAgIE9yaWdpbigpCi0gICAgICAgIDogbV9ieXRlY29kZUlu
ZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICB7Ci0gICAgfQot
ICAgIAorICAgIE9yaWdpbigpID0gZGVmYXVsdDsKICAgICBPcmlnaW4oV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSAxKQotICAgIHsKLSAgICB9CisgICAgICAgIDogbV9i
eXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpKQor
ICAgIHsgfQogICAgIAotICAgIE9yaWdpbihCeXRlY29kZXMqIGJ5dGVjb2RlcywgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkKKyAgICBPcmlnaW4oQnl0ZWNvZGVzKiBieXRlY29kZXMsIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICAgICAgOiBtX2J5dGVjb2RlcyhieXRlY29kZXMpCiAg
ICAgICAgICwgbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBB
U1NFUlQobV9ieXRlY29kZUluZGV4IDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpIC0gMSk7CisgICAgICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSAxKTsKICAgICB9CiAgICAgCi0gICAg
T3JpZ2luKERhdGFiYXNlJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7Cisg
ICAgT3JpZ2luKERhdGFiYXNlJiwgQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0g
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXggPT0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOyB9CisgICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhIW1fYnl0ZWNvZGVJbmRleDsgfQogICAgIAogICAgIEJ5dGVjb2Rl
cyogYnl0ZWNvZGVzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZXM7IH0KLSAgICB1bnNpZ25l
ZCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CisgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUlu
ZGV4OyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9yaWdpbiYpIGNvbnN0Owog
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBPcmlnaW4mIG90aGVyKSBjb25zdCB7IHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsgfQpAQCAtNzUsNyArNzEsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6
CiAgICAgQnl0ZWNvZGVzKiBtX2J5dGVjb2RlczsKLSAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7CiB9OwogCiBpbmxpbmUgYm9v
bCBPcmlnaW46Om9wZXJhdG9yPT0oY29uc3QgT3JpZ2luJiBvdGhlcikgY29uc3QKQEAgLTg2LDEy
ICs4MiwxMiBAQCBpbmxpbmUgYm9vbCBPcmlnaW46Om9wZXJhdG9yPT0oY29uc3QgT3JpZ2luJiBv
dGhlcikgY29uc3QKIAogaW5saW5lIHVuc2lnbmVkIE9yaWdpbjo6aGFzaCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIFdURjo6UHRySGFzaDxCeXRlY29kZXMqPjo6aGFzaChtX2J5dGVjb2RlcykgKyBt
X2J5dGVjb2RlSW5kZXg7CisgICAgcmV0dXJuIFdURjo6UHRySGFzaDxCeXRlY29kZXMqPjo6aGFz
aChtX2J5dGVjb2RlcykgKyBtX2J5dGVjb2RlSW5kZXguaGFzaCgpOwogfQogCiBpbmxpbmUgYm9v
bCBPcmlnaW46OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9ieXRlY29kZUluZGV4ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsK
KyAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CiB9
CiAKIHN0cnVjdCBPcmlnaW5IYXNoIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
LmNwcAppbmRleCBjOGUxYWQ1N2JmMGQ3ZjdhZjlkNzkwMGViZTYwODcxODVkNDEyY2MyLi40MWZk
YWE0MTE3ZjAzNzFkYWFkYzU3ZDdlMzI2NjZiYTVhZGJlZDg3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3IuY3BwCkBAIC0xNjYsMTUgKzE2NiwxNSBAQCBzdGQ6OnVuaXF1ZV9w
dHI8VmVjdG9yPFN0YWNrRnJhbWU+PiBnZXRTdGFja1RyYWNlKEpTR2xvYmFsT2JqZWN0KiwgVk0m
IHZtLCBKU09iagogICAgIHJldHVybiBzdGFja1RyYWNlOwogfQogCi12b2lkIGdldEJ5dGVjb2Rl
T2Zmc2V0KFZNJiB2bSwgQ2FsbEZyYW1lKiBzdGFydENhbGxGcmFtZSwgVmVjdG9yPFN0YWNrRnJh
bWU+KiBzdGFja1RyYWNlLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIHVuc2lnbmVkJiBieXRlY29k
ZU9mZnNldCkKK3ZvaWQgZ2V0Qnl0ZWNvZGVJbmRleChWTSYgdm0sIENhbGxGcmFtZSogc3RhcnRD
YWxsRnJhbWUsIFZlY3RvcjxTdGFja0ZyYW1lPiogc3RhY2tUcmFjZSwgQ2FsbEZyYW1lKiYgY2Fs
bEZyYW1lLCBCeXRlY29kZUluZGV4JiBieXRlY29kZUluZGV4KQogewogICAgIEZpbmRGaXJzdENh
bGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3IgZnVuY3RvcihzdGFydENhbGxGcmFtZSk7CiAg
ICAgU3RhY2tWaXNpdG9yOjp2aXNpdCh2bS50b3BDYWxsRnJhbWUsIHZtLCBmdW5jdG9yKTsKICAg
ICBjYWxsRnJhbWUgPSBmdW5jdG9yLmZvdW5kQ2FsbEZyYW1lKCk7CiAgICAgdW5zaWduZWQgc3Rh
Y2tJbmRleCA9IGZ1bmN0b3IuaW5kZXgoKTsKLSAgICBieXRlY29kZU9mZnNldCA9IDA7Ci0gICAg
aWYgKHN0YWNrVHJhY2UgJiYgc3RhY2tJbmRleCA8IHN0YWNrVHJhY2UtPnNpemUoKSAmJiBzdGFj
a1RyYWNlLT5hdChzdGFja0luZGV4KS5oYXNCeXRlY29kZU9mZnNldCgpKQotICAgICAgICBieXRl
Y29kZU9mZnNldCA9IHN0YWNrVHJhY2UtPmF0KHN0YWNrSW5kZXgpLmJ5dGVjb2RlT2Zmc2V0KCk7
CisgICAgYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsKKyAgICBpZiAoc3RhY2tUcmFj
ZSAmJiBzdGFja0luZGV4IDwgc3RhY2tUcmFjZS0+c2l6ZSgpICYmIHN0YWNrVHJhY2UtPmF0KHN0
YWNrSW5kZXgpLmhhc0J5dGVjb2RlSW5kZXgoKSkKKyAgICAgICAgYnl0ZWNvZGVJbmRleCA9IHN0
YWNrVHJhY2UtPmF0KHN0YWNrSW5kZXgpLmJ5dGVjb2RlSW5kZXgoKTsKIH0KIAogYm9vbCBnZXRM
aW5lQ29sdW1uQW5kU291cmNlKFZlY3RvcjxTdGFja0ZyYW1lPiogc3RhY2tUcmFjZSwgdW5zaWdu
ZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4sIFN0cmluZyYgc291cmNlVVJMKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9yLmgKaW5kZXggY2I3YmYzYWY1ZDkxZjYzZDZhZGUzODg2OTA4
MGIwNmIxODM3ZDMzZi4uMjZiYjg5ZmZlZTliYjFjZWNlNTlhYzUwMDk2YmJhNTBkMGJlODg4NSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oCkBAIC02Nyw3ICs2Nyw3IEBAIEpT
X0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVFcnJvcihKU0dsb2JhbE9iamVjdCosIEVy
cm9yVHlwZSwgY29uc3QgU3RyaW5nCiBKU09iamVjdCogY3JlYXRlR2V0dGVyVHlwZUVycm9yKEpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJik7CiAKIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8
U3RhY2tGcmFtZT4+IGdldFN0YWNrVHJhY2UoSlNHbG9iYWxPYmplY3QqLCBWTSYsIEpTT2JqZWN0
KiwgYm9vbCB1c2VDdXJyZW50RnJhbWUpOwotdm9pZCBnZXRCeXRlY29kZU9mZnNldChWTSYsIENh
bGxGcmFtZSosIFZlY3RvcjxTdGFja0ZyYW1lPiosIENhbGxGcmFtZSomLCB1bnNpZ25lZCYgYnl0
ZWNvZGVPZmZzZXQpOwordm9pZCBnZXRCeXRlY29kZUluZGV4KFZNJiwgQ2FsbEZyYW1lKiwgVmVj
dG9yPFN0YWNrRnJhbWU+KiwgQ2FsbEZyYW1lKiYsIEJ5dGVjb2RlSW5kZXgmKTsKIGJvb2wgZ2V0
TGluZUNvbHVtbkFuZFNvdXJjZShWZWN0b3I8U3RhY2tGcmFtZT4qIHN0YWNrVHJhY2UsIHVuc2ln
bmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uLCBTdHJpbmcmIHNvdXJjZVVSTCk7CiBib29sIGFk
ZEVycm9ySW5mbyhWTSYsIFZlY3RvcjxTdGFja0ZyYW1lPiosIEpTT2JqZWN0Kik7CiBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGFkZEVycm9ySW5mbyhKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Kiwg
Ym9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvcklu
c3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2Uu
Y3BwCmluZGV4IDZkZjY4ZGJkZmMzYmM4MGExODdhNGU1ZGY5MjQ5MjkxNjExMjFmNGEuLjYyMTky
YmNjM2I4NWZjYjg1MjEwMzA4YTcxNTVlYzNlMjhiMDg3ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCkBAIC00OCw3ICs0OCw3IEBAIEVy
cm9ySW5zdGFuY2UqIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0CiAgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxPYmplY3QsIHZt
LCBzdHJ1Y3R1cmUsIG1lc3NhZ2VTdHJpbmcsIGFwcGVuZGVyLCB0eXBlLCB1c2VDdXJyZW50RnJh
bWUpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRTb3VyY2VUb0Vycm9yKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBFcnJvckluc3RhbmNlKiBleGNl
cHRpb24sIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorc3RhdGljIHZvaWQgYXBwZW5kU291cmNl
VG9FcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgRXJyb3JJbnN0YW5jZSogZXhjZXB0aW9uLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgp
CiB7CiAgICAgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIgPSBleGNlcHRp
b24tPnNvdXJjZUFwcGVuZGVyKCk7CiAgICAgZXhjZXB0aW9uLT5jbGVhclNvdXJjZUFwcGVuZGVy
KCk7CkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFNvdXJjZVRvRXJyb3IoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhCiAgICAgZWxzZQog
ICAgICAgICBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0gICAgY29kZUJs
b2NrLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2
b3RQb2ludCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKKyAgICBjb2Rl
QmxvY2stPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCwgZGl2
b3RQb2ludCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKICAgICAKICAg
ICBpbnQgZXhwcmVzc2lvblN0YXJ0ID0gZGl2b3RQb2ludCAtIHN0YXJ0T2Zmc2V0OwogICAgIGlu
dCBleHByZXNzaW9uU3RvcCA9IGRpdm90UG9pbnQgKyBlbmRPZmZzZXQ7CkBAIC0xMjQsMTIgKzEy
NCwxMiBAQCB2b2lkIEVycm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgY29uc3QgUwogICAgIHZtLmhlYXAud3JpdGVCYXJyaWVy
KHRoaXMpOwogCiAgICAgaWYgKG1fc3RhY2tUcmFjZSAmJiAhbV9zdGFja1RyYWNlLT5pc0VtcHR5
KCkgJiYgaGFzU291cmNlQXBwZW5kZXIoKSkgewotICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldDsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OwogICAgICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZTsKLSAgICAgICAgZ2V0Qnl0ZWNvZGVPZmZzZXQodm0sIHZtLnRvcENh
bGxGcmFtZSwgbV9zdGFja1RyYWNlLmdldCgpLCBjYWxsRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0KTsK
KyAgICAgICAgZ2V0Qnl0ZWNvZGVJbmRleCh2bSwgdm0udG9wQ2FsbEZyYW1lLCBtX3N0YWNrVHJh
Y2UuZ2V0KCksIGNhbGxGcmFtZSwgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIGlmIChjYWxsRnJh
bWUgJiYgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSkgewogICAgICAgICAgICAgQVNTRVJUKCFjYWxs
RnJhbWUtPmNhbGxlZSgpLmlzV2FzbSgpKTsKLSAgICAgICAgICAgIGFwcGVuZFNvdXJjZVRvRXJy
b3IoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIHRoaXMsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAg
ICAgICAgIGFwcGVuZFNvdXJjZVRvRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIHRoaXMs
IGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAppbmRleCBjZWFjMGNiMzA5
NDU3NzczNWNkNGY5ZmI3ZjVmMDU5ZjE5OGJmZjgxLi45YmNmOTYxODZkM2Y4NTA4MzFkNmIyNjVi
YzUyMGE2NzgwY2Y2Y2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcApAQCAtNDQ2LDI5ICs0NDYsMjMgQEAgdm9pZCBTYW1wbGlu
Z1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2Vjb25kcyYgc3Rh
Y2tUcmFjZVByb2MKICAgICB9CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHRy
eUdldEJ5dGVjb2RlSW5kZXgodW5zaWduZWQgbGxpbnRQQywgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IGJvb2wmIGlzVmFsaWQpCitzdGF0aWMgQUxXQVlTX0lOTElORSBCeXRlY29kZUluZGV4IHRyeUdl
dEJ5dGVjb2RlSW5kZXgodW5zaWduZWQgbGxpbnRQQywgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVCbG9jay0+aGFz
Q29kZU9yaWdpbnMoKSk7CiAjZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCA9IGxsaW50UEM7Ci0gICAgaWYgKGJ5dGVjb2RlSW5kZXggPCBjb2Rl
QmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkgewotICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKLSAg
ICAgICAgcmV0dXJuIGJ5dGVjb2RlSW5kZXg7Ci0gICAgfQotICAgIGlzVmFsaWQgPSBmYWxzZTsK
LSAgICByZXR1cm4gMDsKKyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGxsaW50UEM7Cisg
ICAgaWYgKGJ5dGVjb2RlT2Zmc2V0IDwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpCisg
ICAgICAgIHJldHVybiBCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICByZXR1cm4g
Qnl0ZWNvZGVJbmRleCgpOwogI2Vsc2UKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBi
aXR3aXNlX2Nhc3Q8SW5zdHJ1Y3Rpb24qPihsbGludFBDKTsKIAotICAgIGlmIChjb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLmNvbnRhaW5zKGluc3RydWN0aW9uKSkgewotICAgICAgICBpc1ZhbGlk
ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQoaW5zdHJ1
Y3Rpb24pOwotICAgIH0KLSAgICBpc1ZhbGlkID0gZmFsc2U7Ci0gICAgcmV0dXJuIDA7CisgICAg
aWYgKGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuY29udGFpbnMoaW5zdHJ1Y3Rpb24pKQorICAg
ICAgICByZXR1cm4gQnl0ZWNvZGVJbmRleChjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGluc3Ry
dWN0aW9uKSk7CisgICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoKTsKICNlbmRpZgogfQogCkBAIC00
ODQsMTIgKzQ3OCwxMiBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVk
U3RhY2tUcmFjZXMoKQogICAgICAgICBTdGFja1RyYWNlJiBzdGFja1RyYWNlID0gbV9zdGFja1Ry
YWNlcy5sYXN0KCk7CiAgICAgICAgIHN0YWNrVHJhY2UudGltZXN0YW1wID0gdW5wcm9jZXNzZWRT
dGFja1RyYWNlLnRpbWVzdGFtcDsKIAotICAgICAgICBhdXRvIHBvcHVsYXRlQ29kZUxvY2F0aW9u
ID0gW10gKENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdGFj
a0ZyYW1lOjpDb2RlTG9jYXRpb24mIGxvY2F0aW9uKSB7Ci0gICAgICAgICAgICBpZiAoYnl0ZWNv
ZGVJbmRleCA8IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSB7CisgICAgICAgIGF1dG8g
cG9wdWxhdGVDb2RlTG9jYXRpb24gPSBbXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCwgU3RhY2tGcmFtZTo6Q29kZUxvY2F0aW9uJiBsb2NhdGlvbikg
eworICAgICAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBjb2RlQmxvY2stPmlu
c3RydWN0aW9uc1NpemUoKSkgewogICAgICAgICAgICAgICAgIGludCBkaXZvdDsKICAgICAgICAg
ICAgICAgICBpbnQgc3RhcnRPZmZzZXQ7CiAgICAgICAgICAgICAgICAgaW50IGVuZE9mZnNldDsK
LSAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlSW5kZXgsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LAorICAgICAg
ICAgICAgICAgIGNvZGVCbG9jay0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVJbmRleChieXRl
Y29kZUluZGV4LCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwKICAgICAgICAgICAgICAg
ICAgICAgbG9jYXRpb24ubGluZU51bWJlciwgbG9jYXRpb24uY29sdW1uTnVtYmVyKTsKICAgICAg
ICAgICAgICAgICBsb2NhdGlvbi5ieXRlY29kZUluZGV4ID0gYnl0ZWNvZGVJbmRleDsKICAgICAg
ICAgICAgIH0KQEAgLTQ5OSw3ICs0OTMsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nl
c3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMoKQogICAgICAgICAgICAgfQogICAgICAgICB9OwogCi0g
ICAgICAgIGF1dG8gYXBwZW5kQ29kZUJsb2NrID0gWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgeworICAgICAgICBhdXRvIGFwcGVuZENvZGVCbG9jayA9
IFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkg
ewogICAgICAgICAgICAgc3RhY2tUcmFjZS5mcmFtZXMuYXBwZW5kKFN0YWNrRnJhbWUoY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSkpOwogICAgICAgICAgICAgbV9saXZlQ2VsbFBvaW50ZXJz
LmFkZChjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKICAgICAgICAgICAgIHBvcHVsYXRl
Q29kZUxvY2F0aW9uKGNvZGVCbG9jaywgYnl0ZWNvZGVJbmRleCwgc3RhY2tUcmFjZS5mcmFtZXMu
bGFzdCgpLnNlbWFudGljTG9jYXRpb24pOwpAQCAtNjE0LDE4ICs2MDgsMTcgQEAgdm9pZCBTYW1w
bGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCkKICAgICAgICAgICAg
ICAgICAvLyBhbmQgd2UgZW5kIHVwIGhhdmluZyB0byB1bndpbmQgcGFzdCBhbiBFbnRyeUZyYW1l
LCB3ZSB3aWxsIGVuZCB1cCBleGVjdXRpbmcKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhl
IExMSW50J3MgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24uIFNvIHdlIGp1c3QgcHJvdGVjdCBhZ2Fp
bnN0IHRoaXMKICAgICAgICAgICAgICAgICAvLyBieSBpZ25vcmluZyBpdC4KLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgICAgICAgICAgICAg
IGlmICh0b3BDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
IHx8IHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGJvb2wgaXNWYWxpZFBDOwogICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBiaXRzOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgICAgIGJp
dHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odW5wcm9j
ZXNzZWRTdGFja1RyYWNlLmxsaW50UEMpKTsKICNlbHNlCiAgICAgICAgICAgICAgICAgICAgIGJp
dHMgPSBiaXR3aXNlX2Nhc3Q8dW5zaWduZWQ+KHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5sbGludFBD
KTsKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gdHJ5R2V0Qnl0
ZWNvZGVJbmRleChiaXRzLCB0b3BDb2RlQmxvY2ssIGlzVmFsaWRQQyk7CisgICAgICAgICAgICAg
ICAgICAgIGJ5dGVjb2RlSW5kZXggPSB0cnlHZXRCeXRlY29kZUluZGV4KGJpdHMsIHRvcENvZGVC
bG9jayk7CiAKLSAgICAgICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGlzVmFsaWRQQyk7IC8v
IEZJWE1FOiBkbyBzb21ldGhpbmcgd2l0aCB0aGlzIGluZm8gZm9yIHRoZSB3ZWIgaW5zcGVjdG9y
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNDU1CisgICAgICAg
ICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsgLy8gRklYTUU6IGRvIHNv
bWV0aGluZyB3aXRoIHRoaXMgaW5mbyBmb3IgdGhlIHdlYiBpbnNwZWN0b3I6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM0NTUKIAogICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRDb2RlQmxvY2sodG9wQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KTsKICAgICAgICAg
ICAgICAgICAgICAgc3RvcmVDYWxsZWVJbnRvTGFzdEZyYW1lKHVucHJvY2Vzc2VkU3RhY2tUcmFj
ZS5mcmFtZXNbMF0pOwpAQCAtNjQ5LDggKzY0Miw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6
cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpCiAgICAgICAgICAgICAgICAgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4ID0gdW5wcm9jZXNzZWRTdGFja0ZyYW1lLmNhbGxTaXRlSW5kZXg7
CiAKICAgICAgICAgICAgICAgICBhdXRvIGFwcGVuZENvZGVCbG9ja05vSW5saW5pbmcgPSBbJl0g
ewotICAgICAgICAgICAgICAgICAgICBib29sIGlzVmFsaWRQQzsKLSAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kQ29kZUJsb2NrKGNvZGVCbG9jaywgdHJ5R2V0Qnl0ZWNvZGVJbmRleChjYWxsU2l0
ZUluZGV4LmJpdHMoKSwgY29kZUJsb2NrLCBpc1ZhbGlkUEMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kQ29kZUJsb2NrKGNvZGVCbG9jaywgdHJ5R2V0Qnl0ZWNvZGVJbmRleChjYWxsU2l0
ZUluZGV4LmJpdHMoKSwgY29kZUJsb2NrKSk7CiAgICAgICAgICAgICAgICAgfTsKIAogI2lmIEVO
QUJMRShERkdfSklUKQpAQCAtNjU4LDcgKzY1MCw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6
cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpCiAgICAgICAgICAgICAgICAgICAgIGlmIChj
b2RlQmxvY2stPmNhbkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRDb2RlT3JpZ2luKGNvZGVCbG9jaywgY29kZUJsb2NrLT5jb2RlT3Jp
Z2luKGNhbGxTaXRlSW5kZXgpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrKGNvZGVCbG9jaywgc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENv
ZGVCbG9jayhjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9ja05vSW5saW5pbmcoKTsKICNl
bHNlCkBAIC0xMTE1LDcgKzExMDcsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnJlcG9ydFRv
cEJ5dGVjb2RlcyhQcmludFN0cmVhbSYgb3V0KQogICAgICAgICAgICAgU3RyaW5nIGNvZGVCbG9j
a0hhc2g7CiAgICAgICAgICAgICBTdHJpbmcgaml0VHlwZTsKICAgICAgICAgICAgIGlmIChsb2Nh
dGlvbi5oYXNCeXRlY29kZUluZGV4KCkpCi0gICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCA9
IFN0cmluZzo6bnVtYmVyKGxvY2F0aW9uLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAg
IGJ5dGVjb2RlSW5kZXggPSB0b1N0cmluZyhsb2NhdGlvbi5ieXRlY29kZUluZGV4KTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gIjxuaWw+IjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxl
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCmlu
ZGV4IDY5MjgwMDI4MmM3NzU1YWI5NjcwMzgyYjI5YTliMGEzY2Q2N2VmZGMuLjJhMTQ0OTQyMjg4
MjcxZDMyYzYyNWI4YWQzYWRmYTY3YzdiODQ5NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKQEAgLTEwNSw3ICsxMDUsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIGJvb2wgaGFzQnl0ZWNvZGVJbmRleCgpIGNvbnN0CiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgICAgICAgICAgICAgIHJldHVybiAhIWJ5
dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGJvb2wgaGFzRXhwcmVz
c2lvbkluZm8oKSBjb25zdApAQCAtMTE3LDcgKzExNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IC8vIFRoZXNlIGF0dGVtcHQgdG8gYmUgZXhwcmVzc2lvbi1sZXZlbCBsaW5lIGFuZCBjb2x1bW4g
bnVtYmVyLgogICAgICAgICAgICAgdW5zaWduZWQgbGluZU51bWJlciB7IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OwogICAgICAgICAgICAgdW5zaWduZWQgY29sdW1uTnVt
YmVyIHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBieXRlY29kZUluZGV4IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpIH07CisgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiAgICAg
ICAgICAgICBDb2RlQmxvY2tIYXNoIGNvZGVCbG9ja0hhc2g7CiAgICAgICAgICAgICBKSVRUeXBl
IGppdFR5cGUgeyBKSVRUeXBlOjpOb25lIH07CiAgICAgICAgIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCmluZGV4IDI0ZWEwZWM1OTMzZWI4ZDc4ZTg0
ZmQ4MmExZTYzOGUxYmZhOWYyYzMuLjMxMjQ4ODk0YjgwZGM5ZDA1YzgyZDQ0N2FlMDA0MGE1Mzcw
NGJlNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJh
bWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3Bw
CkBAIC0zOCwxMCArMzgsMTAgQEAgU3RhY2tGcmFtZTo6U3RhY2tGcmFtZShWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIEpTQ2VsbCogY2FsbGVlKQogewogfQogCi1TdGFja0ZyYW1lOjpTdGFja0ZyYW1l
KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNDZWxsKiBjYWxsZWUsIENvZGVCbG9jayogY29kZUJs
b2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK1N0YWNrRnJhbWU6OlN0YWNrRnJhbWUoVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIGNhbGxlZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICA6IG1fY2FsbGVlKHZtLCBvd25lciwg
Y2FsbGVlKQogICAgICwgbV9jb2RlQmxvY2sodm0sIG93bmVyLCBjb2RlQmxvY2spCi0gICAgLCBt
X2J5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQorICAgICwgbV9ieXRlY29kZUluZGV4KGJ5
dGVjb2RlSW5kZXgpCiB7CiB9CiAKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFN0YWNrRnJhbWU6
OmNvbXB1dGVMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBj
b25zdAogICAgIGludCBkaXZvdCA9IDA7CiAgICAgaW50IHVudXNlZFN0YXJ0T2Zmc2V0ID0gMDsK
ICAgICBpbnQgdW51c2VkRW5kT2Zmc2V0ID0gMDsKLSAgICBtX2NvZGVCbG9jay0+ZXhwcmVzc2lv
blJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQobV9ieXRlY29kZU9mZnNldCwgZGl2b3QsIHVudXNlZFN0
YXJ0T2Zmc2V0LCB1bnVzZWRFbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CisgICAgbV9jb2RlQmxv
Y2stPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4LCBkaXZv
dCwgdW51c2VkU3RhcnRPZmZzZXQsIHVudXNlZEVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKIAog
ICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBtX2NvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCk7CiAgICAgaWYgKE9wdGlvbmFsPGludD4gb3ZlcnJpZGVMaW5lTnVtYmVyID0gZXhl
Y3V0YWJsZS0+b3ZlcnJpZGVMaW5lTnVtYmVyKG1fY29kZUJsb2NrLT52bSgpKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAppbmRleCA2NzFhMzM3YjQyNTQxMzU4
YTllYzlkMjZmYjI0MGJlMzBhNDZlNzMxLi5jOWRmYTBiMThjMDhkOTk0OGZjYTUwM2M3OWY3OWE3
ODhmYzM4YWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFj
a0ZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5o
CkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgU3RhY2tGcmFtZSB7
CiBwdWJsaWM6CiAgICAgU3RhY2tGcmFtZShWTSYsIEpTQ2VsbCogb3duZXIsIEpTQ2VsbCogY2Fs
bGVlKTsKLSAgICBTdGFja0ZyYW1lKFZNJiwgSlNDZWxsKiBvd25lciwgSlNDZWxsKiBjYWxsZWUs
IENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBTdGFja0ZyYW1lKFZN
JiwgSlNDZWxsKiBvd25lciwgSlNDZWxsKiBjYWxsZWUsIENvZGVCbG9jayosIEJ5dGVjb2RlSW5k
ZXgpOwogICAgIFN0YWNrRnJhbWUoV2FzbTo6SW5kZXhPck5hbWUpOwogCiAgICAgYm9vbCBoYXNM
aW5lQW5kQ29sdW1uSW5mbygpIGNvbnN0IHsgcmV0dXJuICEhbV9jb2RlQmxvY2s7IH0KQEAgLTUx
LDExICs1MSwxMSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHNvdXJjZVVSTCgpIGNvbnN0OwogICAg
IFN0cmluZyB0b1N0cmluZyhWTSYpIGNvbnN0OwogCi0gICAgYm9vbCBoYXNCeXRlY29kZU9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXQgIT0gVUlOVF9NQVggJiYgIW1faXNX
YXNtRnJhbWU7IH0KLSAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCgpCisgICAgYm9vbCBoYXNC
eXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4ICYmICFtX2lzV2Fz
bUZyYW1lOyB9CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChoYXNCeXRlY29kZU9mZnNldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZWNv
ZGVPZmZzZXQ7CisgICAgICAgIEFTU0VSVChoYXNCeXRlY29kZUluZGV4KCkpOworICAgICAgICBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0KICAgICAKICAgICB2b2lkIHZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJh
cnJpZXI8SlNDZWxsPiBtX2NhbGxlZSB7IH07CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4g
bV9jb2RlQmxvY2sgeyB9OwogICAgIFdhc206OkluZGV4T3JOYW1lIG1fd2FzbUZ1bmN0aW9uSW5k
ZXhPck5hbWU7Ci0gICAgdW5zaWduZWQgbV9ieXRlY29kZU9mZnNldCB7IFVJTlRfTUFYIH07Cisg
ICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7CiAgICAgYm9vbCBtX2lzV2FzbUZyYW1l
IHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9WTUluc3BlY3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0
b3IuY3BwCmluZGV4IDI0NGQyMmViMTZkNjcyMjcwOTYxYTMyMDJlOTQwZWEwNTczZjk4MmYuLjFl
YmI3Mjc0NjllOWYxODNmZmEzY2FhYTE3ZTFiOTk1MDAwMzg4YzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcApAQCAtNDA4LDcgKzQwOCw3IEBAIHZvaWQg
Vk1JbnNwZWN0b3I6OmR1bXBSZWdpc3RlcnMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAg
ICAgICB1bnNpZ25lZCBsaW5lID0gMDsKICAgICAgICAgICAgIHVuc2lnbmVkIHVudXNlZENvbHVt
biA9IDA7CiAgICAgICAgICAgICB2aXNpdG9yLT5jb21wdXRlTGluZUFuZENvbHVtbihsaW5lLCB1
bnVzZWRDb2x1bW4pOwotICAgICAgICAgICAgZGF0YUxvZ0YoIltSZXR1cm5WUENdICAgICAgICAg
ICAgICAgIHwgJTEwcCB8ICVkIChsaW5lICVkKVxuIiwgaXQsIHZpc2l0b3ItPmJ5dGVjb2RlT2Zm
c2V0KCksIGxpbmUpOworICAgICAgICAgICAgZGF0YUxvZ0YoIltSZXR1cm5WUENdICAgICAgICAg
ICAgICAgIHwgJTEwcCB8ICVkIChsaW5lICVkKVxuIiwgaXQsIHZpc2l0b3ItPmJ5dGVjb2RlSW5k
ZXgoKS5vZmZzZXQoKSwgbGluZSk7CiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpE
b25lOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381618</attachid>
            <date>2019-10-22 15:17:04 -0700</date>
            <delta_ts>2019-10-22 15:56:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203276-20191022151701.patch</filename>
            <type>text/plain</type>
            <size>333577</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxNDYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
MjdhNTg5MTMzNTFmZjlhYjQwZWNmNzM1ZGI1ZGRiMjkwODA1YzVkLi5kMjMyNmQ1NTc3YTE1OTRk
Zjg3NTg2ZjY3ZDNkZDcxNjVjZGJmOGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NjEgQEAKKzIwMTktMTAtMjIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBzaG91bGQgYmUgYSBwcm9wZXIgQysrIGNs
YXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMy
NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIG1ha2VzIGEgY2hhbmdlIHRvIGhvdyB3ZSByZWZlciB0byB0aGUgYnl0ZWNvZGUgaW5k
ZXggaW4KKyAgICAgICAgYSBieXRlY29kZSBzdHJlYW0uIFByZXZpb3VzbHkgd2UganVzdCB1c2Vk
IGFuIHVuc2lnbmVkIG51bWJlciB0bworICAgICAgICByZXByZXNlbnQgdGhlIGluZGV4LCB0aGlz
IHBhdGNoIGNoYW5nZXMgbW9zdCBvZiB0aGUgY29kZSB0byB1c2UgYQorICAgICAgICBCeXRlY29k
ZUluZGV4IGNsYXNzIGluc3RlYWQuIFRoZSBvbmx5IHBsYWNlcyB3aGVyZSB0aGlzIHBhdGNoIGRv
ZXMKKyAgICAgICAgbm90IGNoYW5nZSB0aGlzIGlzIGZvciBqdW1wIGFuZCBzd2l0Y2ggdGFyZ2V0
cyAvIGRlbHRhcy4KKworICAgICAgICBBZGRpdGlvbmFsbHksIHRoaXMgcGF0Y2ggYXR0ZW1wdHMg
dG8gY2Fub25pY2FsaXplIHRoZSB0ZXJtaW5vbG9neQorICAgICAgICBhcm91bmQgaG93IHdlIHJl
ZmVyIHRvIGJ5dGVjb2RlIGluZGljZXMuIE5vdyB3ZSB1c2UgdGhlIHdvcmQgaW5kZXgKKyAgICAg
ICAgdG8gcmVmZXIgdG8gdGhlIGJ5dGVjb2RlIGluZGV4IGNsYXNzIGFuZCBvZmZzZXQgdG8gcmVm
ZXIgdG8gdGhlCisgICAgICAgIHVuc2lnbmVkIGJ5dGUgb2Zmc2V0IGludG8gdGhlIGluc3RydWN0
aW9uIHN0cmVhbS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQnlW
YWxJbmZvLmg6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAg
KEpTQzo6Z2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVCYXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpj
b21wdXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRp
b24uY3BwOgorICAgICAgICAoSlNDOjpHZW5lcmF0b3JMaXZlbmVzc0FuYWx5c2lzOjpydW4pOgor
ICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVJbmRleDo6ZHVtcCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNv
ZGVJbmRleC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmFzQml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW5kZXg6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojpk
ZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9y
IGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpvcGVyYXRvciA9PSBj
b25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yICE9IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3IgPCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yID4gY29uc3QpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUluZGV4OjpvcGVyYXRvciA8PSBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
SW5kZXg6Om9wZXJhdG9yID49IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6
ZnJvbUJpdHMpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4SGFzaDo6aGFzaCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXhIYXNoOjplcXVhbCk6CisgICAgICAgICogYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVLaWxscyk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNv
ZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVw
T3Zlckluc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0
aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQmxv
Y2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVu
ZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5l
c3NJbmZvQXRCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4
KToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5
dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6
OmNvbXB1dGVGcm9tTExJbnQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZvcik6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRh
KToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q2FsbExpbmtJ
bmZvRm9yQnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkUmFyZUNh
c2VQcm9maWxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVGb3JC
eXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVD
b3VudEZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmhhbmRsZXJG
b3JCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExp
dmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleFNsb3cpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb2x1bW5OdW1iZXJGb3JCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNPcERlYnVnRm9yTGluZUFuZENvbHVt
bik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp0cnlHZXRWYWx1ZVByb2ZpbGVGb3JCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsaWRhdGUpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmNvdWxkVGFrZVNwZWNpYWxBcml0aEZhc3RDYXNlKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpieXRlY29kZUluZGV4RnJvbUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVj
b2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYW5kbGVyRm9y
Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3Vy
ZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0
ZWNvZGVPZmZzZXRTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5l
TnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNvbHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3VsZFRha2VTcGVjaWFsRmFzdENhc2Up
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlT2Zmc2V0RnJvbUNh
bGxTaXRlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpjb3VsZFRha2VTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Ynl0ZWNvZGVJbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHA6
CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmFwcHJveGltYXRlSGFzaCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW46OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW46OmlzU2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9y
aWdpbjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
T3JpZ2luOjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6
T3V0T2ZMaW5lQ29kZU9yaWdpbjo6T3V0T2ZMaW5lQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6
OkNvZGVPcmlnaW46OmJ1aWxkQ29tcG9zaXRlVmFsdWUpOgorICAgICAgICAoSlNDOjpDb2RlT3Jp
Z2luOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6ZHVtcCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6RXhpdFByb2ZpbGU6OmV4aXRTaXRlc0Zvcik6CisgICAgICAgICogYnl0
ZWNvZGUvREZHRXhpdFByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRT
aXRlOjpGcmVxdWVudEV4aXRTaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRT
aXRlOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRT
aXRlOjpzdWJzdW1lcyBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0
ZTo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6Ynl0
ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlF1ZXJ5
YWJsZUV4aXRQcm9maWxlOjpoYXNFeGl0U2l0ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
RnJlcXVlbnRFeGl0U2l0ZTo6Ynl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGJ5dGVjb2RlL0RlZmVycmVkU291cmNlRHVtcC5jcHA6CisgICAgICAgIChKU0M6OkRlZmVy
cmVkU291cmNlRHVtcDo6RGVmZXJyZWRTb3VyY2VEdW1wKToKKyAgICAgICAgKEpTQzo6RGVmZXJy
ZWRTb3VyY2VEdW1wOjpkdW1wKToKKyAgICAgICAgKiBieXRlY29kZS9EZWZlcnJlZFNvdXJjZUR1
bXAuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvRnVsbEJ5dGVj
b2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OmdldExp
dmVuZXNzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6Om9wZXJh
bmRJc0xpdmUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAgICAg
KEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6OkdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0lDU3RhdHVzVXRpbHMuY3BwOgorICAgICAgICAo
SlNDOjpoYXNCYWRDYWNoZUV4aXRTaXRlKToKKyAgICAgICAgKiBieXRlY29kZS9JQ1N0YXR1c1V0
aWxzLmg6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SW5CeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5SWRT
dGF0dXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwOgorICAgICAg
ICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OmR1bXBJbkNvbnRleHQgY29uc3QpOgorICAgICAgICAq
IGJ5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9m
U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVz
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaDoKKyAgICAgICAgKEpT
Qzo6SW5zdHJ1Y3Rpb25TdHJlYW06OkJhc2VSZWY6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChK
U0M6Okluc3RydWN0aW9uU3RyZWFtOjpCYXNlUmVmOjppbmRleCBjb25zdCk6CisgICAgICAgIChK
U0M6Okluc3RydWN0aW9uU3RyZWFtOjphdCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGVLZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlND
OjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6
OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OmlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OmJ5
dGVjb2RlT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKToKKyAgICAgICAgKiBieXRlY29kZS9NZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQp
OgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBi
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6U3RydWN0dXJlU3R1
YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVj
b2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFuZGxl
ckZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bGlu
ZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29k
ZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aDoKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6UmFy
ZUNhc2VQcm9maWxlOjpSYXJlQ2FzZVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpnZXRSYXJlQ2Fz
ZVByb2ZpbGVCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Z2V0UmFyZUNhc2VQcm9maWxl
Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZmluYWxpemUpOgor
ICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6
RGVidWdnZXJDYWxsRnJhbWU6OmN1cnJlbnRQb3NpdGlvbik6CisgICAgICAgICogZGZnL0RGR0Jh
c2ljQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2sp
OgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6Z2V0
Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpibG9ja0ZvckJ5dGVj
b2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OmJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
Zmx1c2hGb3JUZXJtaW5hbEltcGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpmbHVzaElmVGVybWluYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpi
cmFuY2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0UHJlZGlj
dGlvbldpdGhvdXRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
Z2V0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFy
cmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om1ha2VTYWZlKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bWFrZURpdlNhZmUpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVW50YXJnZXRhYmxlQmxv
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjptYWtlQmxvY2tUYXJnZXRh
YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxs
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGxWYXJpYW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6
OkNvbW1vbkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6
OkNvbW1vbkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0NvbW1v
bkRhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpjYXRjaE9TUkVudHJ5RGF0
YUZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OmFwcGVu
ZENhdGNoRW50cnlwb2ludCk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Y29tcGlsZUltcGwpOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDoKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OndpbGxDYXRjaEV4Y2VwdGlvbkluTWFjaGluZUZyYW1lKToKKyAgICAgICAgKiBkZmcv
REZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29kZTo6Y2xlYXJPU1JFbnRyeUJsb2NrQW5kUmVzZXRUaHJlc2hvbGRzKToKKyAg
ICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmFw
cGVuZE9TUkVudHJ5RGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6b3NyRW50cnlE
YXRhRm9yQnl0ZWNvZGVJbmRleCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SklUQ29tcGlsZXIpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0U3RhcnRPZkNvZGUpOgorICAg
ICAgICAqIGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpoYW5k
bGVCbG9ja0ZvclRyeUNhdGNoKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkVudHJ5RGF0YTo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVw
YXJlQ2F0Y2hPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6CisgICAgICAg
IChKU0M6OkRGRzo6Z2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6cmVp
ZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRv
VGFyZ2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmludE9TUkV4aXQpOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkV4aXQ6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0
OjpkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKToKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRK
dW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDoK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJh
dGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1w
bCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNl
c3NhcnkpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6b3NyRW50cnlCeXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFu
Ojp0aWVyVXBJbkxvb3BIaWVyYXJjaHkpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OnRpZXJV
cEFuZE9TUkVudGVyQnl0ZWNvZGVzKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVN1Yik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmVtaXRTd2l0Y2hDaGFyU3RyaW5nSnVtcCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAg
ICAgKEpTQzo6REZHOjpUaWVyVXBDaGVja0luamVjdGlvblBoYXNlOjpidWlsZE5hdHVyYWxMb29w
VG9Mb29wSGludE1hcCk6CisgICAgICAgICogZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRm9yT1NS
RW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUp
OgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZnRsL0ZUTENvbXBp
bGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExG
b3JPU1JFbnRyeUpJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENv
ZGU6OnNldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklU
Q29kZTo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9C
My5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVZhbHVlQWRkKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVZhbHVlU3ViKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVZhbHVlTXVsKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUFyaXRoQWRkT3JTdWIp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVmFsdWVOZWdh
dGUpOgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuaDoKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNh
bGxTaXRlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxT
aXRlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWU6OmNvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmR1bXAp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJ
bmRleDo6Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJh
dG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpvcGVyYXRvcj09
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Yml0cyBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAo
SlNDOjpEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleDo6RGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgpOgor
ICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6OkdldFN0YWNrVHJhY2VGdW5jdG9yOjpvcGVyYXRvcigpIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6ZmluZEV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAqIGludGVy
cHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwOgorICAgICAgICAoSlNDOjpTaGFkb3dDaGlja2VuOjp1
cGRhdGUpOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6CisgICAgICAg
IChKU0M6OlN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZSk6CisgICAgICAgIChKU0M6
OlN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAgIChKU0M6OlN0YWNrVmlz
aXRvcjo6RnJhbWU6OnJldHJpZXZlRXhwcmVzc2lvbkluZm8gY29uc3QpOgorICAgICAgICAoSlND
OjpTdGFja1Zpc2l0b3I6OkZyYW1lOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Ynl0
ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmJ5
dGVjb2RlT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpKSVQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRFbnRlck9wdGlt
aXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKToKKyAgICAgICAgKEpTQzo6SklUOjps
aW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJz
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkNhbGxSZWNvcmQ6OkNhbGxS
ZWNvcmQpOgorICAgICAgICAoSlNDOjpTbG93Q2FzZUVudHJ5OjpTbG93Q2FzZUVudHJ5KToKKyAg
ICAgICAgKEpTQzo6U3dpdGNoUmVjb3JkOjpTd2l0Y2hSZWNvcmQpOgorICAgICAgICAoSlNDOjpC
eVZhbENvbXBpbGF0aW9uSW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAqIGpp
dC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJ
VENvZGVNYXAuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZU1hcDo6RW50cnk6OkVudHJ5KToKKyAg
ICAgICAgKEpTQzo6SklUQ29kZU1hcDo6RW50cnk6OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVRDb2RlTWFwOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlTWFw
OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklURGlzYXNzZW1ibGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklURGlzYXNzZW1ibGVyOjpkdW1wVmVjdG9yRm9ySW5zdHJ1Y3Rpb25zKToKKyAg
ICAgICAgKEpTQzo6SklURGlzYXNzZW1ibGVyOjpyZXBvcnRJbnN0cnVjdGlvbnMpOgorICAgICAg
ICAqIGppdC9KSVREaXNhc3NlbWJsZXIuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXROYWtlZENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXROYWtlZFRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjp1cGRhdGVUb3BDYWxsRnJhbWUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6SklUOjphZGRTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJVDo6YWRk
SnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93VG9Ib3QpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6Omxp
bmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9j
aGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3
aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgICogaml0L0pJVE9wZXJh
dGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZXRCeVZhbCk6CisgICAgICAgIChKU0M6OnRyeUdl
dEJ5VmFsT3B0aW1pemUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfaWQpOgorICAgICAgICAqIGppdC9KSVRXb3Jr
bGlzdC5jcHA6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpQbGFuOjpQbGFuKToKKyAgICAg
ICAgKEpTQzo6SklUV29ya2xpc3Q6OlBsYW46OmNvbXBpbGVOb3cpOgorICAgICAgICAoSlNDOjpK
SVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmNv
bXBpbGVOb3cpOgorICAgICAgICAqIGppdC9KSVRXb3JrbGlzdC5oOgorICAgICAgICAqIGppdC9Q
Q1RvQ29kZU9yaWdpbk1hcC5jcHA6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpQ
Q1RvQ29kZU9yaWdpbk1hcCk6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpmaW5k
UEMgY29uc3QpOgorICAgICAgICAqIGppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oOgorICAgICAgICAo
SlNDOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKToKKyAgICAg
ICAgKiBqaXQvU2xvd1BhdGhDYWxsLmg6CisgICAgICAgIChKU0M6OkpJVFNsb3dQYXRoQ2FsbDo6
Y2FsbCk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTElu
dDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyT3Jp
Z2luLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Ok9yaWdpbjo6T3JpZ2luKToKKyAgICAg
ICAgKEpTQzo6UHJvZmlsZXI6Ok9yaWdpbjo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OlBy
b2ZpbGVyOjpPcmlnaW46OnRvSlMgY29uc3QpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVy
T3JpZ2luLmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpPcmlnaW46Ok9yaWdpbik6CisgICAg
ICAgIChKU0M6OlByb2ZpbGVyOjpPcmlnaW46Om9wZXJhdG9yISBjb25zdCk6CisgICAgICAgIChK
U0M6OlByb2ZpbGVyOjpPcmlnaW46OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlND
OjpQcm9maWxlcjo6T3JpZ2luOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6
Ok9yaWdpbjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvRXJyb3IuY3BwOgorICAgICAgICAoSlNDOjpnZXRCeXRlY29kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6Z2V0Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvRXJy
b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlND
OjphcHBlbmRTb3VyY2VUb0Vycm9yKToKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OnRyeUdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpTYW1wbGlu
Z1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKToKKyAgICAgICAgKEpTQzo6
U2FtcGxpbmdQcm9maWxlcjo6cmVwb3J0VG9wQnl0ZWNvZGVzKToKKyAgICAgICAgKiBydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuaDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3Rh
Y2tGcmFtZTo6Q29kZUxvY2F0aW9uOjpoYXNCeXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAg
KiBydW50aW1lL1N0YWNrRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpTdGFja0ZyYW1lOjpTdGFj
a0ZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6Y29tcHV0ZUxpbmVBbmRDb2x1bW4g
Y29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3RhY2tGcmFtZS5oOgorICAgICAgICAoSlNDOjpT
dGFja0ZyYW1lOjpoYXNCeXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RhY2tG
cmFtZTo6Ynl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6Omhhc0J5dGVj
b2RlT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6Ynl0
ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmR1bXBSZWdpc3RlcnMpOgorCiAyMDE5LTEwLTIy
ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgbWFrZSAzMmJpdCBKSVQgYnVpbHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
ZjA4OGI5NWY0YTJjMGViMDVmNGQ2MDc4ODVkYmEwZDc2MDViNmEyNy4uZTY2NGU0MDAzMDg3YmEz
OTg4ZTE0MmE5MTU4NTY2OWZkN2JiNDc0NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTk0NCw2ICs5NDQsNyBAQAogCQk1MzU1NTcxNDFEOUQ5RUE1MDA2RDU4M0IgLyogV2FzbU1l
bW9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM1
NTU3MTMxRDlEOUVBNTAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MzVDMjQ2MTFGNzg5MjhFMDA2RUM0MEUg
LyogY3JlYXRlX3JlZ2V4X3RhYmxlcyBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3MThGODIxMTE3OEVCNEIwMDI0NjVBNyAvKiBjcmVhdGVfcmVnZXhfdGFi
bGVzICovOyB9OwogCQk1MzVDMjQ2QzFGN0ExNzc4MDA2RUM0MEUgLyogVW5pZmllZFNvdXJjZTEz
Ni5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzVD
MjQ2QjFGN0ExNzc3MDA2RUM0MEUgLyogVW5pZmllZFNvdXJjZTEzNi5jcHAgKi87IH07CisJCTUz
NjYzRkRBMjM1NjJGOTYwMDVFQTY4QyAvKiBCeXRlY29kZUluZGV4LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzY2M0ZEOTIzNTYyRjkwMDA1RUE2OEMg
LyogQnl0ZWNvZGVJbmRleC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTUzNkIzMTBDMUY3MUM1OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlMTE5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNkIz
MDg3MUY3MUM1MzgwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlMTE5LmNwcCAqLzsgfTsKIAkJNTM2
QjMxMEQxRjcxQzU5OTAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UxMjUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2QjMwODgxRjcxQzUzODAwMzdG
QzMzIC8qIFVuaWZpZWRTb3VyY2UxMjUuY3BwICovOyB9OwogCQk1MzZCMzEwRTFGNzFDNTk5MDAz
N0ZDMzMgLyogVW5pZmllZFNvdXJjZTEzMS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzZCMzA4OTFGNzFDNTM4MDAzN0ZDMzMgLyogVW5pZmllZFNv
dXJjZTEzMS5jcHAgKi87IH07CkBAIC0zNjAyLDYgKzM2MDMsOCBAQAogCQk1MzU1NTcxNTFEOURG
QTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXYXNtTWVtb3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTM1QzI0NkIxRjdBMTc3NzAwNkVDNDBFIC8qIFVuaWZpZWRTb3VyY2UxMzYuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVW5pZmllZFNvdXJjZTEzNi5jcHA7IHBhdGgg
PSAiRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRT
b3VyY2UxMzYuY3BwIjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTM1
RTA4QzkyMjU0NjBBQjAwREYwMENBIC8qIHBvc3Rwcm9jZXNzLWhlYWRlci1ydWxlICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC5zY3JpcHQuc2g7IHBhdGggPSAicG9zdHByb2Nlc3MtaGVhZGVyLXJ1bGUiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzYwREFCQjIzNTZBRENBMDAzRjZBQjggLyogQnl0
ZWNvZGVJbmRleC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCeXRlY29kZUluZGV4LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM2NjNGRDkyMzU2MkY5MDAwNUVBNjhDIC8qIEJ5
dGVjb2RlSW5kZXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVJ
bmRleC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzY5NkU1NzIwQTNBNzAyMDBE
N0UwMUUgLyogQnl0ZWNvZGVTdHJ1Y3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEJ5dGVjb2RlU3RydWN0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzZC
MzA4NzFGNzFDNTM4MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTExOS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBVbmlmaWVkU291cmNlMTE5LmNwcDsgcGF0aCA9ICJE
ZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJj
ZTExOS5jcHAiOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MzZCMzA4
ODFGNzFDNTM4MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTEyNS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBVbmlmaWVkU291cmNlMTI1LmNwcDsgcGF0aCA9ICJEZXJp
dmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTEy
NS5jcHAiOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtODEwMiw2ICs4
MTA1LDggQEAKIAkJCQlFM0QyNjQyNjFEMzhDMDQyMDAwQkUxNzQgLyogQnl0ZWNvZGVHZW5lcmF0
b3JpZmljYXRpb24uY3BwICovLAogCQkJCUUzRDI2NDI3MUQzOEMwNDIwMDBCRTE3NCAvKiBCeXRl
Y29kZUdlbmVyYXRvcmlmaWNhdGlvbi5oICovLAogCQkJCUUzRDI2NDI4MUQzOEMwNDIwMDBCRTE3
NCAvKiBCeXRlY29kZUdyYXBoLmggKi8sCisJCQkJNTM2MERBQkIyMzU2QURDQTAwM0Y2QUI4IC8q
IEJ5dGVjb2RlSW5kZXguY3BwICovLAorCQkJCTUzNjYzRkQ5MjM1NjJGOTAwMDVFQTY4QyAvKiBC
eXRlY29kZUluZGV4LmggKi8sCiAJCQkJNzA5NEM0REMxQUU0Mzk1MzAwNDFBMkVFIC8qIEJ5dGVj
b2RlSW50cmluc2ljUmVnaXN0cnkuY3BwICovLAogCQkJCTcwOTRDNEREMUFFNDM5NTMwMDQxQTJF
RSAvKiBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmggKi8sCiAJCQkJMEYyREQ4MEExQUIzRDg1
ODAwQkJCOEU4IC8qIEJ5dGVjb2RlS2lsbHMuaCAqLywKQEAgLTg5OTYsNiArOTAwMSw3IEBACiAJ
CQkJOTY5QTA3MjMwRUQxQ0UzMzAwRjFGNjgxIC8qIEJ5dGVjb2RlR2VuZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzI4REFFODFEMzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVHZW5lcmF0
b3JpZmljYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMjhEQUU5MUQzOEQwMDUwMDFBMjUy
OSAvKiBCeXRlY29kZUdyYXBoLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzY2M0ZEQTIzNTYyRjk2
MDA1RUE2OEMgLyogQnl0ZWNvZGVJbmRleC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5NEM0REYx
QUU0Mzk1MzAwNDFBMkVFIC8qIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkREODBCMUFCM0Q4NTgwMEJCQjhFOCAvKiBCeXRlY29kZUtpbGxzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDMkZDQUUxMzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApp
bmRleCA3Y2VkNjhiMTc3ZjQ5MWUzOTA0OTE5NDBkZjg4ZWUzNTQyNDg2ZmE3Li5jMzI4ZmJhYjA4
ZDliODNjNjE3YTY1MjQ1N2M2MTA5MTE4MmQ1NjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CkBAIC0xOTcsNiArMTk3LDcgQEAgYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcAogYnl0ZWNv
ZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcAogYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCiBi
eXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAKK2J5dGVjb2RlL0J5dGVjb2Rl
SW5kZXguY3BwCiBieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmNwcAogYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAogYnl0ZWNvZGUvQnl0ZWNvZGVSZXdyaXRl
ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbElu
Zm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAppbmRleCAz
Mzk5ZDU4MWUxZjJjOGZjN2NmMTcyZTY2NmU3YzcyODc4ZjRiNTQ1Li5iN2U5Mzc5NDVhOTA5NDZl
MmMwNTUyMjc2Y2IxMzA1MzBmNDM4OWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5VmFsSW5mby5oCkBAIC0yMjUsNyArMjI1LDcgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBq
aXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiBzdHJ1Y3QgQnlW
YWxJbmZvIHsKICAgICBCeVZhbEluZm8oKSB7IH0KIAotICAgIEJ5VmFsSW5mbyh1bnNpZ25lZCBi
eXRlY29kZUluZGV4LCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IG5vdEluZGV4
SnVtcCwgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBiYWRUeXBlSnVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gZXhjZXB0aW9uSGFuZGxlciwg
SklUQXJyYXlNb2RlIGFycmF5TW9kZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIENvZGVM
b2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGJhZFR5cGVEb25lVGFyZ2V0LCBDb2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBiYWRUeXBlTmV4dEhvdFBhdGhUYXJnZXQsIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoVGFyZ2V0KQorICAgIEJ5
VmFsSW5mbyhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkp1bXA8SlNJ
bnRlcm5hbFB0clRhZz4gbm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQ
dHJUYWc+IGJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPiBleGNlcHRpb25IYW5kbGVyLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlLCBBcnJheVByb2Zp
bGUqIGFycmF5UHJvZmlsZSwgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gYmFk
VHlwZURvbmVUYXJnZXQsIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGJhZFR5
cGVOZXh0SG90UGF0aFRhcmdldCwgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
c2xvd1BhdGhUYXJnZXQpCiAgICAgICAgIDogbm90SW5kZXhKdW1wKG5vdEluZGV4SnVtcCkKICAg
ICAgICAgLCBiYWRUeXBlSnVtcChiYWRUeXBlSnVtcCkKICAgICAgICAgLCBleGNlcHRpb25IYW5k
bGVyKGV4Y2VwdGlvbkhhbmRsZXIpCkBAIC0yNDksNyArMjQ5LDcgQEAgc3RydWN0IEJ5VmFsSW5m
byB7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gYmFkVHlwZU5leHRI
b3RQYXRoVGFyZ2V0OwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNs
b3dQYXRoVGFyZ2V0OwogICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlOwotICAgIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXg7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OwogICAg
IHVuc2lnbmVkIHNsb3dQYXRoQ291bnQ7CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZTsKICAgICBJZGVudGlmaWVyIGNhY2hlZElkOwpAQCAtMjYwLDcgKzI2MCw3IEBAIHN0
cnVjdCBCeVZhbEluZm8gewogICAgIGJvb2wgc2VlbiA6IDE7CiB9OwogCi1pbmxpbmUgdW5zaWdu
ZWQgZ2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRleChCeVZhbEluZm8qIGluZm8pCitpbmxpbmUgQnl0
ZWNvZGVJbmRleCBnZXRCeVZhbEluZm9CeXRlY29kZUluZGV4KEJ5VmFsSW5mbyogaW5mbykKIHsK
ICAgICByZXR1cm4gaW5mby0+Ynl0ZWNvZGVJbmRleDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAKaW5kZXggMTBjNjVi
YjlkZDcwOWE5YWY3YWJhNmNlYjhhOWI3MzU5NzcxNjQxYi4uMDJkNjQ0Yjg4M2ZmYjNjZDk5Y2E5
OWI3YmNmMzlhYTkyNmI3MjIxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lk
IEJ5dGVjb2RlQmFzaWNCbG9jazo6Y29tcHV0ZUltcGwoQmxvY2sqIGNvZGVCbG9jaywgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW0mCiAgICAgICAgICAgICAvLyBibG9jayBiZWNhdXNlIHRoZSBmaW5h
bGx5IGJsb2NrIHdpbGwgY3JlYXRlIGl0cyBvd24gY2F0Y2gsIHdoaWNoIHdpbGwgZ2VuZXJhdGUg
YSBIYW5kbGVySW5mby4KICAgICAgICAgICAgIGlmIChpc1Rocm93KG9wY29kZUlEKSkgewogICAg
ICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZU9mZnNldCArIGluc3RydWN0aW9uLT5zaXplKCkg
PT0gYmxvY2stPmxlYWRlck9mZnNldCgpICsgYmxvY2stPnRvdGFsTGVuZ3RoKCkpOwotICAgICAg
ICAgICAgICAgIGF1dG8qIGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9m
ZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYXV0byogaGFuZGxl
ciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleChpbnN0
cnVjdGlvbi5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgIGZhbGxzVGhyb3VnaCA9IGZhbHNl
OwogICAgICAgICAgICAgICAgIGlmICghaGFuZGxlcikgewogICAgICAgICAgICAgICAgICAgICBs
aW5rQmxvY2tzKGJsb2NrLCBleGl0LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwCmlu
ZGV4IDI4NjA1MWNjOTVlYTRkOGZkYTY2ZmIwOTk3YmI1OTNlZGU3ZTMyYTYuLjQzY2U1NjFmMzgy
NmQ2YjBiMTRjODQxMWNiZjgxMWI4MzliN2ZlOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNw
cApAQCAtMjAwLDcgKzIwMCw3IEBAIHB1YmxpYzoKICAgICAgICAgcnVuTGl2ZW5lc3NGaXhwb2lu
dChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9nZW5lcmF0b3JpZmljYXRpb24uZ3JhcGgoKSk7
CiAKICAgICAgICAgZm9yIChZaWVsZERhdGEmIGRhdGEgOiBtX2dlbmVyYXRvcmlmaWNhdGlvbi55
aWVsZHMoKSkKLSAgICAgICAgICAgIGRhdGEubGl2ZW5lc3MgPSBnZXRMaXZlbmVzc0luZm9BdEJ5
dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBtX2dlbmVyYXRvcmlmaWNhdGlv
bi5ncmFwaCgpLCBtX2dlbmVyYXRvcmlmaWNhdGlvbi5pbnN0cnVjdGlvbnMoKS5hdChkYXRhLnBv
aW50KS5uZXh0KCkub2Zmc2V0KCkpOworICAgICAgICAgICAgZGF0YS5saXZlbmVzcyA9IGdldExp
dmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9nZW5l
cmF0b3JpZmljYXRpb24uZ3JhcGgoKSwgQnl0ZWNvZGVJbmRleChtX2dlbmVyYXRvcmlmaWNhdGlv
bi5pbnN0cnVjdGlvbnMoKS5hdChkYXRhLnBvaW50KS5uZXh0KCkub2Zmc2V0KCkpKTsKICAgICB9
CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVJbmRleC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVJbmRleC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTdhMzg1YmU5YzI4MmRmZDhkMWJlYTUwM2E1NDczYWVm
MGE5YzRjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUluZGV4LmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCeXRlY29kZUluZGV4LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit2b2lkIEJ5dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUluZGV4LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVJbmRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEyN2MxMDI5N2M4MjYxMTg2ZGU1MjU1NDI3OGI0ODll
MTFkOTkyOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVJbmRleC5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKK2NsYXNzIFByaW50U3RyZWFtOworfQorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQnl0ZWNvZGVJbmRleCB7CitwdWJsaWM6CisgICAgQnl0ZWNvZGVJbmRleCgpID0gZGVmYXVs
dDsKKyAgICBleHBsaWNpdCBCeXRlY29kZUluZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0KQor
ICAgICAgICA6IG1fb2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQorICAgIHsgfQorCisgICAgdWludDMy
X3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICB1aW50MzJfdCBhc0Jp
dHMoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0IHsgcmV0dXJuIFdURjo6aW50SGFzaChtX29mZnNldCk7IH0KKyAgICBzdGF0aWMgQnl0ZWNv
ZGVJbmRleCBkZWxldGVkVmFsdWUoKSB7IHJldHVybiBmcm9tQml0cyhzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCkgLSAxKTsgfQorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVkVmFsdWUoKTsgfQorCisgICAg
c3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cyk7CisKKyAgICAvLyBD
b21wYXJpc29uIG9wZXJhdG9ycy4KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gbV9vZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
OyB9CisgICAgYm9vbCBvcGVyYXRvciA9PShjb25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29u
c3QgeyByZXR1cm4gYXNCaXRzKCkgPT0gb3RoZXIuYXNCaXRzKCk7IH0KKyAgICBib29sIG9wZXJh
dG9yICE9KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsgfQorCisgICAgYm9vbCBvcGVyYXRvciA8KGNvbnN0IEJ5dGVjb2RlSW5kZXgm
IG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA8IG90aGVyLmFzQml0cygpOyB9CisgICAg
Ym9vbCBvcGVyYXRvciA+KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVy
biBhc0JpdHMoKSA+IG90aGVyLmFzQml0cygpOyB9CisgICAgYm9vbCBvcGVyYXRvciA8PShjb25z
dCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gYXNCaXRzKCkgPD0gb3RoZXIu
YXNCaXRzKCk7IH0KKyAgICBib29sIG9wZXJhdG9yID49KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90
aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA+PSBvdGhlci5hc0JpdHMoKTsgfQorCisKKyAg
ICB2b2lkIGR1bXAoV1RGOjpQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIHVp
bnQzMl90IG1fb2Zmc2V0IHsgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpIH07
Cit9OworCitpbmxpbmUgQnl0ZWNvZGVJbmRleCBCeXRlY29kZUluZGV4Ojpmcm9tQml0cyh1aW50
MzJfdCBiaXRzKQoreworICAgIEJ5dGVjb2RlSW5kZXggcmVzdWx0OworICAgIHJlc3VsdC5tX29m
ZnNldCA9IGJpdHM7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RydWN0IEJ5dGVjb2RlSW5k
ZXhIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBCeXRlY29kZUluZGV4JiBr
ZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBC
eXRlY29kZUluZGV4JiBhLCBjb25zdCBCeXRlY29kZUluZGV4JiBiKSB7IHJldHVybiBhID09IGI7
IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkJ5dGVjb2RlSW5kZXg+IHsKKyAgICB0eXBlZGVmIEpTQzo6
Qnl0ZWNvZGVJbmRleEhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkJ5dGVjb2Rl
SW5kZXg+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6Qnl0ZWNvZGVJbmRleD4geworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKaW5kZXggMzMwYzdjN2E5OGRl
ZTcwYjE5NjFjZWQwZTFjNWMyNDI3N2IyNWU4Yi4uYTFjMjgyMWJmM2QwYTJkZDUzODEwNGQwNTNi
ZTBhYjA5NzkwYzkwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKQEAgLTQ2LDIwICs0NiwyMCBA
QCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgZHVtcFJlc3VsdHMoY29kZUJsb2NrKTsKIH0KIAot
dm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVP
ZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0
Qml0VmVjdG9yJiByZXN1bHQpCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCkKIHsKLSAgICBCeXRlY29k
ZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpOwogICAgIEFTU0VSVChibG9jayk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNFbnRyeUJsb2Nr
KCkpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOwogICAgIHJlc3VsdC5yZXNp
emUoYmxvY2stPm91dCgpLm51bUJpdHMoKSk7Ci0gICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JC
eXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fZ3Jh
cGgsIGJsb2NrLCBieXRlY29kZU9mZnNldCwgcmVzdWx0KTsKKyAgICBjb21wdXRlTG9jYWxMaXZl
bmVzc0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LCBtX2dyYXBoLCBibG9jaywgYnl0ZWNvZGVJbmRleCwgcmVzdWx0KTsKIH0KIAotRmFzdEJpdFZl
Y3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVP
ZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorRmFz
dEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0
ZWNvZGVJbmRleChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KQogewogICAgIEZhc3RCaXRWZWN0b3Igb3V0OwotICAgIGdldExpdmVuZXNzSW5mb0F0Qnl0
ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgb3V0KTsKKyAgICBnZXRMaXZl
bmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBieXRlY29kZUluZGV4LCBvdXQpOwog
ICAgIHJldHVybiBvdXQ7CiB9CiAKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1
bGxCeXQKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5vZmZzZXRz
KCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IGJsb2NrLT5vZmZzZXRzKClbaV07Ci0gICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGNv
ZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgYnl0ZWNvZGVPZmZz
ZXQsIG91dCk7CisgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGNvZGVCbG9jaywgY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgQnl0ZWNvZGVJbmRleChieXRlY29kZU9m
ZnNldCksIG91dCk7CiAgICAgICAgICAgICByZXN1bHQubV9tYXBbYnl0ZWNvZGVPZmZzZXRdID0g
b3V0OwogICAgICAgICB9CiAgICAgfQpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlS2lsbHMoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVj
b2RlS2lsbHMmCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5vZmZzZXRzKCkuc2l6
ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2Nr
LT5vZmZzZXRzKClbaV07CiAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKAotICAgICAg
ICAgICAgICAgIGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwg
Ynl0ZWNvZGVPZmZzZXQsCisgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLCBtX2dyYXBoLCBCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwKICAg
ICAgICAgICAgICAgICBbJl0gKHVuc2lnbmVkIGluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgZm9yIHVzZXMuCiAgICAgICAgICAgICAgICAgICAgIGlmIChvdXRbaW5kZXhd
KQpAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1w
UmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgICAgIGNvbnN0IGF1dG8gY3Vy
cmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zmc2V0KTsKIAogICAg
ICAgICAgICAgZGF0YUxvZ0YoIkxpdmUgdmFyaWFibGVzOiIpOwotICAgICAgICAgICAgRmFzdEJp
dFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChjb2Rl
QmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUJl
Zm9yZSA9IGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIEJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVPZmZzZXQpKTsKICAgICAgICAgICAgIGR1bXBCaXRWZWN0b3IobGl2ZUJl
Zm9yZSk7CiAgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICAgICAgICAgICAgIGNvZGVCbG9j
ay0+ZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZpbGUoKSwgY3VycmVudEluc3RydWN0aW9uKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMuaAppbmRleCA3YmVmNGNmMWRjZTJhMWE3ZmMxODNhZmVhZTIxZGQ1OTE0Zjhm
OTQ5Li5lYWMxODVkYTU2Yzk2YzM4NWI5ZTMxYmE3YWM4ZTdkZTc0OWI2NTE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oCkBAIC0zNywxNSArMzcsMTUgQEAgY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3M7
CiAKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbiB7CiBwcm90ZWN0ZWQ6Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgVXNlRnVuY3RvciwgdHlw
ZW5hbWUgRGVmRnVuY3Rvcj4gdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUq
LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBJbnN0cnVjdGlvblN0
cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0LCBjb25zdCBVc2VGdW5jdG9yJiwgY29uc3QgRGVm
RnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1l
IFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+IHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlv
bihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBo
JiwgQnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYsIGNvbnN0IERlZkZ1bmN0b3ImKTsK
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+IHZvaWQgc3RlcE92ZXJJbnN0
cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29k
ZUdyYXBoJiwgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBieXRlY29kZU9mZnNldCwgRmFzdEJp
dFZlY3RvciYgb3V0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPiB2b2lk
IHN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIG91dCk7
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVj
dGlvbnM+IGJvb2wgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChDb2RlQmxv
Y2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlQmFz
aWNCbG9jayosIHVuc2lnbmVkIHRhcmdldE9mZnNldCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlv
bnM+IGJvb2wgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZUluZGV4KENvZGVCbG9ja1R5
cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVCYXNpY0Js
b2NrKiwgQnl0ZWNvZGVJbmRleCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4gYm9vbCBj
b21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVj
dGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVCYXNpY0Jsb2NrKik7CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+IEZhc3RC
aXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2tUeXBlKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0
cnVjdGlvbnM+IEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KENv
ZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNv
ZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFt
ZSBJbnN0cnVjdGlvbnM+IHZvaWQgcnVuTGl2ZW5lc3NGaXhwb2ludChDb2RlQmxvY2tUeXBlKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYpOwogfTsKQEAgLTU3LDcgKzU3LDcg
QEAgcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb247
CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzKENvZGVCbG9jayopOwogICAgIAotICAgIEZh
c3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2sqLCB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAgRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0lu
Zm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAg
dm9pZCBjb21wdXRlRnVsbExpdmVuZXNzKENvZGVCbG9jayosIEZ1bGxCeXRlY29kZUxpdmVuZXNz
JiByZXN1bHQpOwogICAgIHZvaWQgY29tcHV0ZUtpbGxzKENvZGVCbG9jayosIEJ5dGVjb2RlS2ls
bHMmIHJlc3VsdCk7CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9p
ZCBkdW1wUmVzdWx0cyhDb2RlQmxvY2sqKTsKIAotICAgIHZvaWQgZ2V0TGl2ZW5lc3NJbmZvQXRC
eXRlY29kZU9mZnNldChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJp
dFZlY3RvciYpOworICAgIHZvaWQgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KENvZGVC
bG9jayosIEJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImKTsKIAogICAgIEJ5dGVjb2RlR3Jh
cGggbV9ncmFwaDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAppbmRleCA3MWZm
NTZmN2VhNjhhMmY0NTVjZjY3OGIzYzc5YTJkN2JhYjliMzlkLi43YTkwMDMyMjJlNTE2N2JiMDUx
MDk1NzAyYjM4MjYzYTM1YzA4NDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgK
QEAgLTYxLDcgKzYxLDcgQEAgaW5saW5lIGJvb2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAvLyBTaW1wbGlmaWVkIGludGVyZmFjZSB0byBieXRl
Y29kZSB1c2UvZGVmLCB3aGljaCBkZXRlcm1pbmVzIGRlZnMgZmlyc3QgYW5kIHRoZW4gdXNlcywg
YW5kIGluY2x1ZGVzCiAvLyBleGNlcHRpb24gaGFuZGxlcnMgaW4gdGhlIHVzZXMuCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBVc2VGdW5jdG9yLCB0eXBlbmFtZSBE
ZWZGdW5jdG9yPgotaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVw
T3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rp
b25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEluc3RydWN0aW9u
U3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQsIGNvbnN0IFVzZUZ1bmN0b3ImIHVzZSwgY29u
c3QgRGVmRnVuY3RvciYgZGVmKQoraW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0
aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYgdXNlLCBjb25zdCBE
ZWZGdW5jdG9yJiBkZWYpCiB7CiAgICAgLy8gVGhpcyBhYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGlu
c3RydWN0aW9uIGluIHJldmVyc2UuIEluc3RydWN0aW9ucyBsb2dpY2FsbHkgZmlyc3QgdXNlIG9w
ZXJhbmRzIGFuZAogICAgIC8vIHRoZW4gZGVmaW5lIG9wZXJhbmRzLiBUaGlzIGxvZ2ljYWwgb3Jk
ZXJpbmcgaXMgbmVjZXNzYXJ5IGZvciBvcGVyYXRpb25zIHRoYXQgdXNlIGFuZCBkZWYgdGhlIHNh
bWUKQEAgLTc4LDE3ICs3OCwxNyBAQCBpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFn
YXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZQogICAgIC8vIHVz
ZXMgYmVmb3JlIGRlZnMsIHRoZW4gdGhlIGFkZCBvcGVyYXRpb24gYWJvdmUgd291bGQgYXBwZWFy
IHRvIG5vdCBoYXZlIGxvYzEgbGl2ZSwgc2luY2Ugd2UnZAogICAgIC8vIGZpcnN0IGFkZCBpdCB0
byB0aGUgb3V0IHNldCAodGhlIHVzZSksIGFuZCB0aGVuIHdlJ2QgcmVtb3ZlIGl0ICh0aGUgZGVm
KS4KIAotICAgIGF1dG8qIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zm
c2V0KS5wdHIoKTsKKyAgICBhdXRvKiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChieXRl
Y29kZUluZGV4KS5wdHIoKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpOwogCi0gICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldCgKKyAgICBjb21w
dXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgoCiAgICAgICAgIGNvZGVCbG9jaywgb3Bjb2RlSUQsIGlu
c3RydWN0aW9uLAogICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CiAgICAg
ICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mob3BlcmFuZCkpCiAgICAgICAg
ICAgICAgICAgZGVmKG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICAgICAgfSk7CiAKLSAgICBjb21w
dXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAorICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRl
eCgKICAgICAgICAgY29kZUJsb2NrLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb24sCiAgICAgICAgIFsm
XSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKICAgICAgICAgICAgIGlmIChpc1ZhbGlkUmVn
aXN0ZXJGb3JMaXZlbmVzcyhvcGVyYW5kKSkKQEAgLTk3LDcgKzk3LDcgQEAgaW5saW5lIHZvaWQg
Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9j
a1R5cGUqIGNvZGUKIAogICAgIC8vIElmIHdlIGhhdmUgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIHdl
IHdhbnQgdGhlIGxpdmUtaW4gdmFyaWFibGVzIG9mIHRoZSAKICAgICAvLyBleGNlcHRpb24gaGFu
ZGxlciBibG9jayB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3Vs
YXIgYnl0ZWNvZGUuCi0gICAgaWYgKGF1dG8qIGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJG
b3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkpIHsKKyAgICBpZiAoYXV0byogaGFuZGxl
ciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkpIHsK
ICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBoYW5kbGVyQmxvY2sgPSBncmFwaC5maW5kQmFz
aWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoaGFuZGxlci0+dGFyZ2V0KTsKICAgICAgICAgQVNTRVJU
KGhhbmRsZXJCbG9jayk7CiAgICAgICAgIGhhbmRsZXJCbG9jay0+aW4oKS5mb3JFYWNoU2V0Qml0
KHVzZSk7CkBAIC0xMDUsMTAgKzEwNSwxMCBAQCBpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNz
UHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZQogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotaW5saW5lIHZvaWQgQnl0ZWNvZGVM
aXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqIGNv
ZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVH
cmFwaCYgZ3JhcGgsIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQsIEZh
c3RCaXRWZWN0b3ImIG91dCkKK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlv
bjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIG91dCkKIHsKICAgICBzdGVw
T3Zlckluc3RydWN0aW9uKAotICAgICAgICBjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgs
IGJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICBjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgs
IGJ5dGVjb2RlSW5kZXgsCiAgICAgICAgIFsmXSAodW5zaWduZWQgYml0SW5kZXgpIHsKICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIHVzZSBmdW5jdG9yLCBzbyB3ZSBzZXQgdGhlIGJpdC4KICAg
ICAgICAgICAgIG91dFtiaXRJbmRleF0gPSB0cnVlOwpAQCAtMTIwLDcgKzEyMCw3IEBAIGlubGlu
ZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihD
b2RlQmxvY2tUeXBlKiBjb2RlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUs
IHR5cGVuYW1lIEluc3RydWN0aW9ucz4KLWlubGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9w
YWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChDb2RlQmxvY2tU
eXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29k
ZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgdGFyZ2V0
T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCitpbmxpbmUgYm9vbCBCeXRlY29kZUxpdmVu
ZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChDb2Rl
QmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBC
eXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaywgQnl0ZWNvZGVJ
bmRleCB0YXJnZXRJbmRleCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KQogewogICAgIEFTU0VSVCgh
YmxvY2stPmlzRXhpdEJsb2NrKCkpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygp
KTsKQEAgLTEyOSw5ICsxMjksOSBAQCBpbmxpbmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFn
YXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoQwogCiAgICAgZm9y
IChpbnQgaSA9IGJsb2NrLT5vZmZzZXRzKCkuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAg
ICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+b2Zmc2V0cygpW2ldOwotICAg
ICAgICBpZiAodGFyZ2V0T2Zmc2V0ID4gYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgIGlmICh0YXJn
ZXRJbmRleC5vZmZzZXQoKSA+IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBo
LCBieXRlY29kZU9mZnNldCwgb3V0KTsKKyAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjb2Rl
QmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQp
LCBvdXQpOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQuc2V0QW5kQ2hlY2sob3V0KTsKQEAg
LTE0MiwxOSArMTQyLDE5IEBAIGlubGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlv
bjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayhDb2RlQmxvY2tUCiB7CiAgICAgaWYgKGJs
b2NrLT5pc0V4aXRCbG9jaygpIHx8IGJsb2NrLT5pc0VudHJ5QmxvY2soKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zm
c2V0KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYmxvY2ssIGJsb2NrLT5sZWFkZXJP
ZmZzZXQoKSwgYmxvY2stPmluKCkpOworICAgIHJldHVybiBjb21wdXRlTG9jYWxMaXZlbmVzc0Zv
ckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBibG9jaywgQnl0
ZWNvZGVJbmRleChibG9jay0+bGVhZGVyT2Zmc2V0KCkpLCBibG9jay0+aW4oKSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KLWlu
bGluZSBGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5l
c3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElu
c3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQpCitpbmxpbmUgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzUHJv
cGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChDb2RlQmxvY2tUeXBlKiBj
b2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBo
JiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewotICAgIEJ5dGVjb2RlQmFz
aWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0KTsKKyAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmlu
ZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKICAg
ICBBU1NFUlQoYmxvY2spOwogICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygpKTsKICAg
ICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9jaygpKTsKICAgICBGYXN0Qml0VmVjdG9yIG91dDsK
ICAgICBvdXQucmVzaXplKGJsb2NrLT5vdXQoKS5udW1CaXRzKCkpOwotICAgIGNvbXB1dGVMb2Nh
bExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBo
LCBibG9jaywgYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NG
b3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYmxvY2ssIGJ5
dGVjb2RlSW5kZXgsIG91dCk7CiAgICAgcmV0dXJuIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAppbmRleCAwMjJmM2JmZWI4Njg0
NDFjY2FkZGFmZDdmODM0ZmE4Zjk4ODczYmNlLi5jYTMzNDc5NDI4NDhjMmYzMDhhNWM1YTVlYjk0
NjJhNTFmNGVhOTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVVc2VEZWYuaApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNkZWZpbmUg
REVGUyBVU0VTX09SX0RFRlMKIAogdGVtcGxhdGU8dHlwZW5hbWUgQmxvY2ssIHR5cGVuYW1lIEZ1
bmN0b3I+Ci12b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoQmxvY2sqIGNvZGVCbG9j
aywgT3Bjb2RlSUQgb3Bjb2RlSUQsIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgY29u
c3QgRnVuY3RvciYgZnVuY3RvcikKK3ZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4KEJs
b2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9wY29kZUlELCBjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgaWYgKG9wY29kZUlEICE9
IG9wX2VudGVyICYmIChjb2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMo
KSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkpICYmIGNvZGVCbG9jay0+c2NvcGVSZWdpc3Rlcigp
LmlzVmFsaWQoKSkKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSk7
CkBAIC0yOTcsNyArMjk3LDcgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KEJs
b2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9wY29kZUlELCBjb25zdCBJbnMKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgQmxvY2ssIHR5cGVuYW1lIEZ1bmN0b3I+Ci12b2lkIGNvbXB1dGVEZWZzRm9y
Qnl0ZWNvZGVPZmZzZXQoQmxvY2sqIGNvZGVCbG9jaywgT3Bjb2RlSUQgb3Bjb2RlSUQsIGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3ZvaWQg
Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KEJsb2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9w
Y29kZUlELCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCiB7CiAgICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgIGNhc2Ugb3Bfd2lkZTE2Ogpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAK
aW5kZXggOWEwMDBmYzViNDJhZTZlMzgyNjlkODM3YTc5MGEzOTYwYjVjYmRhMy4uZjEzZDE3MzRh
MDJjNThhMzIxNzU5MjVkMjg4NTVhMmEyNjAwMTgxOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCkBAIC01NSw3ICs1NSw3IEBAIENh
bGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0YXR1cyhKU1ZhbHVlIHZhbHVlKQogICAgIG1fdmFyaWFu
dHMuYXBwZW5kKENhbGxWYXJpYW50KHZhbHVlLmFzQ2VsbCgpKSk7CiB9CiAKLUNhbGxMaW5rU3Rh
dHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkK
K0NhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4KQogewogICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAg
ICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CkBAIC02Nyw3ICs2Nyw3IEBAIENhbGxMaW5r
U3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIENvZGVCCiAgICAgfQogI2VuZGlmCiAKLSAgICBhdXRvIGluc3RydWN0aW9uID0g
cHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CisgICAgYXV0
byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpOwogICAgIE9wY29kZUlEIG9wID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlE
KCk7CiAKICAgICBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwpAQCAtOTAsNyArOTAs
NyBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQgogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlu
a1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgsIGNvbnN0IElDU3RhdHVzTWFwJiBtYXAsCisgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIGNvbnN0IElDU3Rh
dHVzTWFwJiBtYXAsCiAgICAgRXhpdFNpdGVEYXRhIGV4aXRTaXRlRGF0YSkKIHsKICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CkBAIC0xMTQsMTIg
KzExNCwxMiBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKIH0K
IAogQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBJQ1N0YXR1
c01hcCYgbWFwKQorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4LCBjb25zdCBJQ1N0YXR1c01hcCYgbWFwKQogewogICAgIHJldHVybiBjb21w
dXRlRm9yKHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIG1hcCwgY29tcHV0ZUV4aXRTaXRl
RGF0YShwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KSk7CiB9CiAKLUNhbGxMaW5rU3RhdHVz
OjpFeGl0U2l0ZURhdGEgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorQ2FsbExpbmtTdGF0
dXM6OkV4aXRTaXRlRGF0YSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShDb2Rl
QmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAg
ICBFeGl0U2l0ZURhdGEgZXhpdFNpdGVEYXRhOwogI2lmIEVOQUJMRShERkdfSklUKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAppbmRleCAwYTEw
MWNhMDJlNjg5MTBkMmZjMzQyMDc5Yjk5MGZhNTIyYTczODlkLi40NjhhM2RiNTdiZDIyYzg5YzEx
ZGQ3Y2QyMTc5NjE1MGUzMzdmY2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaApAQCAtNjYsMTAgKzY2LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgRXhpdEZsYWcgdGFrZXNTbG93UGF0aDsKICAgICAgICAgRXhpdEZsYWcgYmFkRnVuY3Rpb247
CiAgICAgfTsKLSAgICBzdGF0aWMgRXhpdFNpdGVEYXRhIGNvbXB1dGVFeGl0U2l0ZURhdGEoQ29k
ZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgc3RhdGljIEV4aXRTaXRlRGF0
YSBjb21wdXRlRXhpdFNpdGVEYXRhKENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgpOwogICAgIAot
ICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgsIGNvbnN0IElDU3RhdHVzTWFwJiwgRXhpdFNpdGVEYXRhKTsKLSAgICBz
dGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCBjb25zdCBJQ1N0YXR1c01hcCYpOworICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1
cyBjb21wdXRlRm9yKENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgsIGNvbnN0IElDU3RhdHVzTWFw
JiwgRXhpdFNpdGVEYXRhKTsKKyAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcihD
b2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBjb25zdCBJQ1N0YXR1c01hcCYpOwogCiAjaWYgRU5B
QkxFKEpJVCkKICAgICAvLyBDb21wdXRlcyB0aGUgc3RhdHVzIGFzc3VtaW5nIHRoYXQgd2UgbmV2
ZXIgdG9vayBzbG93IHBhdGggYW5kIG5ldmVyIHByZXZpb3VzbHkKQEAgLTExNyw3ICsxMTcsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgbWFrZUNsb3N1cmVDYWxsKCk7CiAgICAgCi0g
ICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgc3Rh
dGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBz
dGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZyb21DYWxsTGlua0luZm8oCiAgICAgICAgIGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENhbGxMaW5rSW5mbyYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA0ZTk0N2EzN2I0ODI2OGRjMjQw
MWQ1ZDkwNThiYWJkYjUzYmY2NWU1Li43ZTIxMTY4M2Q3OTRjNTRmZTFhYzg3MzUzMWQ4NmEyYWVk
Nzg2ODQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cApAQCAtMTUyNiw3ICsxNTI2LDcgQEAgQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmFkZENhbGxM
aW5rSW5mbygpCiAgICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2NhbGxMaW5rSW5m
b3MuYWRkKCk7CiB9CiAKLUNhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9G
b3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGluZGV4KQorQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6
OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBpbmRleCkKIHsK
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgaWYgKGF1dG8qIGpp
dERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKQEAgLTE1MzgsMjcgKzE1MzgsMjcgQEAgQ2FsbExp
bmtJbmZvKiBDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgodW5zaWdu
ZWQgaW5kZXgpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJhcmVDYXNlUHJvZmlsZSogQ29k
ZUJsb2NrOjphZGRSYXJlQ2FzZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KQorUmFyZUNhc2VQ
cm9maWxlKiBDb2RlQmxvY2s6OmFkZFJhcmVDYXNlUHJvZmlsZShCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAg
IGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7Ci0gICAgaml0RGF0YS5tX3Jh
cmVDYXNlUHJvZmlsZXMuYXBwZW5kKFJhcmVDYXNlUHJvZmlsZShieXRlY29kZU9mZnNldCkpOwor
ICAgIGppdERhdGEubV9yYXJlQ2FzZVByb2ZpbGVzLmFwcGVuZChSYXJlQ2FzZVByb2ZpbGUoYnl0
ZWNvZGVJbmRleCkpOwogICAgIHJldHVybiAmaml0RGF0YS5tX3JhcmVDYXNlUHJvZmlsZXMubGFz
dCgpOwogfQogCi1SYXJlQ2FzZVByb2ZpbGUqIENvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgaW50IGJ5dGVjb2RlT2Zm
c2V0KQorUmFyZUNhc2VQcm9maWxlKiBDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVj
b2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQogewogICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0g
ICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQ+KAotICAg
ICAgICAgICAgaml0RGF0YS0+bV9yYXJlQ2FzZVByb2ZpbGVzLCBqaXREYXRhLT5tX3JhcmVDYXNl
UHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCwKLSAgICAgICAgICAgIGdldFJhcmVDYXNl
UHJvZmlsZUJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxS
YXJlQ2FzZVByb2ZpbGUsIEJ5dGVjb2RlSW5kZXg+KAorICAgICAgICAgICAgaml0RGF0YS0+bV9y
YXJlQ2FzZVByb2ZpbGVzLCBqaXREYXRhLT5tX3JhcmVDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRl
Y29kZUluZGV4LAorICAgICAgICAgICAgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVJbmRleCk7
CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi11bnNpZ25lZCBDb2RlQmxvY2s6OnJh
cmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiBsb2NrZXIsIGludCBieXRlY29kZU9mZnNldCkKK3Vuc2lnbmVkIENvZGVCbG9jazo6cmFy
ZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYgbG9ja2VyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgUmFyZUNhc2VQ
cm9maWxlKiBwcm9maWxlID0gcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobG9ja2Vy
LCBieXRlY29kZU9mZnNldCk7CisgICAgUmFyZUNhc2VQcm9maWxlKiBwcm9maWxlID0gcmFyZUNh
c2VQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChsb2NrZXIsIGJ5dGVjb2RlSW5kZXgpOwogICAgIGlm
IChwcm9maWxlKQogICAgICAgICByZXR1cm4gcHJvZmlsZS0+bV9jb3VudGVyOwogICAgIHJldHVy
biAwOwpAQCAtMTczMCwxMCArMTczMCwxMCBAQCBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVk
UmVwbGFjZW1lbnQoKQogfQogI2VuZGlmCiAKLUhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRs
ZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5k
bGVyIHJlcXVpcmVkSGFuZGxlcikKK0hhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JC
eXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgUmVxdWlyZWRIYW5kbGVy
IHJlcXVpcmVkSGFuZGxlcikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZU9mZnNldCA8
IGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgcmV0dXJuIGhhbmRsZXJGb3JJbmRleChieXRl
Y29kZU9mZnNldCwgcmVxdWlyZWRIYW5kbGVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVChieXRlY29k
ZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICByZXR1cm4gaGFu
ZGxlckZvckluZGV4KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCksIHJlcXVpcmVkSGFuZGxlcik7CiB9
CiAKIEhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRl
eCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikKQEAgLTE3NjIsOSArMTc2Miw5IEBA
IERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENvZGVCbG9jazo6bmV3RXhjZXB0aW9uSGFuZGxpbmdD
YWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kCiAKIAogCi12b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0
Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZU9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6
T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KQordm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5l
c3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgp
CiB7Ci0gICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9m
ZnNldCk7CisgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29k
ZUluZGV4KTsKICAgICBPcENhdGNoIG9wID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBvcC5tZXRhZGF0YSh0aGlzKTsKICAgICBpZiAoISFtZXRhZGF0
YS5tX2J1ZmZlcikgewpAQCAtMTc4NCwxMCArMTc4NCwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZW5z
dXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZU9mZnNldChJbnN0cnVjdGlvblN0
cmVhbQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZW5zdXJlQ2F0Y2hMaXZlbmVzc0lz
Q29tcHV0ZWRGb3JCeXRlY29kZU9mZnNldFNsb3cob3AsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBl
bnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KG9wLCBieXRl
Y29kZUluZGV4KTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0Nv
bXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXRTbG93KGNvbnN0IE9wQ2F0Y2gmIG9wLCBJbnN0cnVjdGlv
blN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KQordm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNh
dGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleFNsb3coY29uc3QgT3BDYXRjaCYg
b3AsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMmIGJ5dGVjb2RlTGl2ZW5lc3MgPSBsaXZlbmVzc0FuYWx5c2lzKCk7CiAKQEAgLTE3
OTYsOCArMTc5Niw4IEBAIHZvaWQgQ29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21w
dXRlZEZvckJ5dGVjb2RlT2Zmc2V0U2xvdyhjb25zdCBPcENhdGNoCiAgICAgLy8gd2UgY2FuIGF2
b2lkIHByb2ZpbGluZyB0aGVtIGFuZCBleHRyYWN0aW5nIHRoZW0gd2hlbiBkb2luZyBPU1IgZW50
cnkKICAgICAvLyBpbnRvIHRoZSBERkcuCiAKLSAgICBhdXRvIG5leHRPZmZzZXQgPSBpbnN0cnVj
dGlvbnMoKS5hdChieXRlY29kZU9mZnNldCkubmV4dCgpLm9mZnNldCgpOwotICAgIEZhc3RCaXRW
ZWN0b3IgbGl2ZUxvY2FscyA9IGJ5dGVjb2RlTGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRl
Y29kZU9mZnNldCh0aGlzLCBuZXh0T2Zmc2V0KTsKKyAgICBhdXRvIG5leHRPZmZzZXQgPSBpbnN0
cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5uZXh0KCkub2Zmc2V0KCk7CisgICAgRmFzdEJp
dFZlY3RvciBsaXZlTG9jYWxzID0gYnl0ZWNvZGVMaXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5
dGVjb2RlSW5kZXgodGhpcywgQnl0ZWNvZGVJbmRleChuZXh0T2Zmc2V0KSk7CiAgICAgVmVjdG9y
PFZpcnR1YWxSZWdpc3Rlcj4gbGl2ZU9wZXJhbmRzOwogICAgIGxpdmVPcGVyYW5kcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGxpdmVMb2NhbHMuYml0Q291bnQoKSk7CiAgICAgbGl2ZUxvY2Fscy5m
b3JFYWNoU2V0Qml0KFsmXSAodW5zaWduZWQgbGl2ZUxvY2FsKSB7CkBAIC0xODQyLDI2ICsxODQy
LDI2IEBAIHZvaWQgQ29kZUJsb2NrOjpyZW1vdmVFeGNlcHRpb25IYW5kbGVyRm9yQ2FsbFNpdGUo
RGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggY2FsbFNpCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAotdW5zaWduZWQgQ29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVP
ZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit1bnNpZ25lZCBDb2RlQmxvY2s6OmxpbmVO
dW1iZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7
Ci0gICAgcmV0dXJuIG93bmVyRXhlY3V0YWJsZSgpLT5maXJzdExpbmUoKSArIG1fdW5saW5rZWRD
b2RlLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIFJF
TEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbnMoKS5zaXpl
KCkpOworICAgIHJldHVybiBvd25lckV4ZWN1dGFibGUoKS0+Zmlyc3RMaW5lKCkgKyBtX3VubGlu
a2VkQ29kZS0+bGluZU51bWJlckZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiB9CiAK
LXVuc2lnbmVkIENvZGVCbG9jazo6Y29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQpCit1bnNpZ25lZCBDb2RlQmxvY2s6OmNvbHVtbk51bWJlckZvckJ5
dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIGludCBkaXZv
dDsKICAgICBpbnQgc3RhcnRPZmZzZXQ7CiAgICAgaW50IGVuZE9mZnNldDsKICAgICB1bnNpZ25l
ZCBsaW5lOwogICAgIHVuc2lnbmVkIGNvbHVtbjsKLSAgICBleHByZXNzaW9uUmFuZ2VGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQs
IGxpbmUsIGNvbHVtbik7CisgICAgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVJbmRleChieXRl
Y29kZUluZGV4LCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsK
ICAgICByZXR1cm4gY29sdW1uOwogfQogCi12b2lkIENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdl
Rm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsIGlu
dCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQm
IGNvbHVtbikgY29uc3QKK3ZvaWQgQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29k
ZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgaW50JiBkaXZvdCwgaW50JiBzdGFy
dE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1u
KSBjb25zdAogewotICAgIG1fdW5saW5rZWRDb2RlLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29k
ZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxp
bmUsIGNvbHVtbik7CisgICAgbV91bmxpbmtlZENvZGUtPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVJbmRleCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxp
bmUsIGNvbHVtbik7CiAgICAgZGl2b3QgKz0gc291cmNlT2Zmc2V0KCk7CiAgICAgY29sdW1uICs9
IGxpbmUgPyAxIDogZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KCk7CiAgICAgbGluZSArPSBvd25lckV4
ZWN1dGFibGUoKS0+Zmlyc3RMaW5lKCk7CkBAIC0xODc1LDcgKzE4NzUsNyBAQCBib29sIENvZGVC
bG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4odW5zaWduZWQgbGluZSwgT3B0aW9uYWw8
dW5zaWduZWQ+IGNvbAogICAgICAgICAgICAgaW50IHVudXNlZDsKICAgICAgICAgICAgIHVuc2ln
bmVkIG9wRGVidWdMaW5lOwogICAgICAgICAgICAgdW5zaWduZWQgb3BEZWJ1Z0NvbHVtbjsKLSAg
ICAgICAgICAgIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGl0Lm9mZnNldCgpLCB1
bnVzZWQsIHVudXNlZCwgdW51c2VkLCBvcERlYnVnTGluZSwgb3BEZWJ1Z0NvbHVtbik7CisgICAg
ICAgICAgICBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4KGl0LmluZGV4KCksIHVudXNl
ZCwgdW51c2VkLCB1bnVzZWQsIG9wRGVidWdMaW5lLCBvcERlYnVnQ29sdW1uKTsKICAgICAgICAg
ICAgIGlmIChsaW5lID09IG9wRGVidWdMaW5lICYmICghY29sdW1uIHx8IGNvbHVtbiA9PSBvcERl
YnVnQ29sdW1uKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAt
MjYyMyw5ICsyNjIzLDkgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZFJlb3B0aW1pemVGcm9tTG9v
cE5vdygpCiB9CiAjZW5kaWYKIAotQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJv
ZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkK
K0FycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewotICAgIGF1dG8gaW5z
dHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9mZnNldCk7CisgICAgYXV0byBp
bnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOwogICAgIHN3aXRj
aCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKICNkZWZpbmUgQ0FTRTEoT3ApIFwKICAgICBj
YXNlIE9wOjpvcGNvZGVJRDogXApAQCAtMjY1NSwxMCArMjY1NSwxMCBAQCBBcnJheVByb2ZpbGUq
IENvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIHVu
c2lnbmVkIGJ5dAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1BcnJheVByb2ZpbGUqIENvZGVC
bG9jazo6Z2V0QXJyYXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorQXJyYXlQcm9m
aWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVy
biBnZXRBcnJheVByb2ZpbGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7CisgICAgcmV0dXJuIGdl
dEFycmF5UHJvZmlsZShsb2NrZXIsIGJ5dGVjb2RlSW5kZXgpOwogfQogCiAjaWYgRU5BQkxFKERG
R19KSVQpCkBAIC0yOTY2LDkgKzI5NjYsOSBAQCBTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKIH0KIAotVmFsdWVQcm9maWxlKiBDb2RlQmxvY2s6OnRyeUdldFZhbHVlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKK1ZhbHVlUHJvZmlsZSogQ29k
ZUJsb2NrOjp0cnlHZXRWYWx1ZVByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCkKIHsKLSAgICBhdXRvIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCku
YXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4KTsKICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
KSB7CiAKICNkZWZpbmUgQ0FTRShPcCkgXApAQCAtMjk4NSwyMyArMjk4NSwyMyBAQCBWYWx1ZVBy
b2ZpbGUqIENvZGVCbG9jazo6dHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50
IGJ5dGVjb2RlT2Zmc2V0KQogICAgIH0KIH0KIAotU3BlY3VsYXRlZFR5cGUgQ29kZUJsb2NrOjp2
YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIsIGludCBieXRlY29kZU9mZnNldCkKK1NwZWN1bGF0ZWRUeXBlIENvZGVC
bG9jazo6dmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiBsb2NrZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAg
ICBpZiAoVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUgPSB0cnlHZXRWYWx1ZVByb2ZpbGVGb3JC
eXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkpCisgICAgaWYgKFZhbHVlUHJvZmlsZSogdmFs
dWVQcm9maWxlID0gdHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUlu
ZGV4KSkKICAgICAgICAgcmV0dXJuIHZhbHVlUHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0
aW9uKGxvY2tlcik7CiAgICAgcmV0dXJuIFNwZWNOb25lOwogfQogCi1WYWx1ZVByb2ZpbGUmIENv
ZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0
KQorVmFsdWVQcm9maWxlJiBDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgo
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewotICAgIHJldHVybiAqdHJ5R2V0VmFsdWVQ
cm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIHJldHVybiAqdHJ5
R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKIH0KIAogdm9p
ZCBDb2RlQmxvY2s6OnZhbGlkYXRlKCkKIHsKICAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMg
bGl2ZW5lc3ModGhpcyk7IC8vIENvbXB1dGUgZGlyZWN0bHkgZnJvbSBzY3JhdGNoIHNvIGl0IGRv
ZXNuJ3QgZWZmZWN0IENvZGVCbG9jayBmb290cHJpbnQuCiAgICAgCi0gICAgRmFzdEJpdFZlY3Rv
ciBsaXZlQXRIZWFkID0gbGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh0
aGlzLCAwKTsKKyAgICBGYXN0Qml0VmVjdG9yIGxpdmVBdEhlYWQgPSBsaXZlbmVzcy5nZXRMaXZl
bmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgodGhpcywgQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgCiAg
ICAgaWYgKGxpdmVBdEhlYWQubnVtQml0cygpICE9IHN0YXRpY19jYXN0PHNpemVfdD4obV9udW1D
YWxsZWVMb2NhbHMpKSB7CiAgICAgICAgIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKQEAgLTMw
MjUsNyArMzAyNSw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2YWxpZGF0ZSgpCiAgICAgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAg
Zm9yIChjb25zdCBhdXRvJiBpbnN0cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAg
ICAgIE9wY29kZUlEIG9wY29kZSA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwotICAgICAgICBp
ZiAoISFiYXNlbGluZUFsdGVybmF0aXZlKCktPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChpbnN0
cnVjdGlvbi5vZmZzZXQoKSkpIHsKKyAgICAgICAgaWYgKCEhYmFzZWxpbmVBbHRlcm5hdGl2ZSgp
LT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KGluc3RydWN0aW9uLm9mZnNl
dCgpKSkpIHsKICAgICAgICAgICAgIGlmIChvcGNvZGUgPT0gb3BfY2F0Y2ggfHwgb3Bjb2RlID09
IG9wX2VudGVyKSB7CiAgICAgICAgICAgICAgICAgLy8gb3BfY2F0Y2gvb3BfZW50ZXIgbG9naWNh
bGx5IHJlcHJlc2VudCBhbiBlbnRyeXBvaW50LiBFbnRyeXBvaW50cyBhcmUgbm90IGFsbG93ZWQg
dG8gYmUKICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgb2YgYSB0cnkgYmxvY2sgYmVjYXVzZSB0
aGV5IGFyZSByZXNwb25zaWJsZSBmb3IgYm9vdHN0cmFwcGluZyBzdGF0ZS4gQW5kIHRoZXkKQEAg
LTMwODMsOSArMzA4Myw5IEBAIGNvbnN0IEluc3RydWN0aW9uKiBDb2RlQmxvY2s6Om91dE9mTGlu
ZUp1bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQogICAgIHJldHVybiBpbnN0cnVjdGlv
bnMoKS5hdChvZmZzZXQgKyB0YXJnZXQpLnB0cigpOwogfQogCi1Bcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9m
ZnNldCBieXRlY29kZU9mZnNldCkKK0FyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjphcml0aFByb2Zp
bGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBy
ZXR1cm4gYXJpdGhQcm9maWxlRm9yUEMoaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVPZmZzZXQp
LnB0cigpKTsKKyAgICByZXR1cm4gYXJpdGhQcm9maWxlRm9yUEMoaW5zdHJ1Y3Rpb25zKCkuYXQo
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkucHRyKCkpOwogfQogCiBBcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6YXJpdGhQcm9maWxlRm9yUEMoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQpAQCAtMzEwOCwx
MSArMzEwOCwxMSBAQCBBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yUEMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIENv
ZGVCbG9jazo6Y291bGRUYWtlU3BlY2lhbEZhc3RDYXNlKEluc3RydWN0aW9uU3RyZWFtOjpPZmZz
ZXQgYnl0ZWNvZGVPZmZzZXQpCitib29sIENvZGVCbG9jazo6Y291bGRUYWtlU3BlY2lhbEFyaXRo
RmFzdENhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIGlmICghaGFzQmFz
ZWxpbmVKSVRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFyaXRoUHJv
ZmlsZSogcHJvZmlsZSA9IGFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zm
c2V0KTsKKyAgICBBcml0aFByb2ZpbGUqIHByb2ZpbGUgPSBhcml0aFByb2ZpbGVGb3JCeXRlY29k
ZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIGlmICghcHJvZmlsZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHJldHVybiBwcm9maWxlLT50b29rU3BlY2lhbEZhc3RQYXRoKCk7CkBAIC0z
MjMxLDI4ICszMjMxLDI4IEBAIE9wdGlvbmFsPENvZGVPcmlnaW4+IENvZGVCbG9jazo6ZmluZFBD
KHZvaWQqIHBjKQogfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKLU9wdGlvbmFsPHVuc2lnbmVk
PiBDb2RlQmxvY2s6OmJ5dGVjb2RlT2Zmc2V0RnJvbUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4KQorT3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjpieXRl
Y29kZUluZGV4RnJvbUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQog
ewotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBieXRlY29kZU9mZnNldDsKKyAgICBPcHRpb25hbDxC
eXRlY29kZUluZGV4PiBieXRlY29kZUluZGV4OwogICAgIEpJVFR5cGUgaml0VHlwZSA9IHRoaXMt
PmppdFR5cGUoKTsKICAgICBpZiAoaml0VHlwZSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
IHx8IGppdFR5cGUgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICBieXRlY29kZU9mZnNldCA9IGNhbGxTaXRlSW5kZXguYml0cygpOworICAgICAg
ICBieXRlY29kZUluZGV4ID0gY2FsbFNpdGVJbmRleC5ieXRlY29kZUluZGV4KCk7CiAjZWxzZQog
ICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiaXR3aXNlX2Nhc3Q8SW5zdHJ1Y3Rp
b24qPihjYWxsU2l0ZUluZGV4LmJpdHMoKSk7Ci0gICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gdGhp
cy0+Ynl0ZWNvZGVPZmZzZXQoaW5zdHJ1Y3Rpb24pOworICAgICAgICBieXRlY29kZUluZGV4ID0g
dGhpcy0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7CiAjZW5kaWYKICAgICB9IGVsc2UgaWYg
KGppdFR5cGUgPT0gSklUVHlwZTo6REZHSklUIHx8IGppdFR5cGUgPT0gSklUVHlwZTo6RlRMSklU
KSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENv
ZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpOwogICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IGNv
ZGVPcmlnaW4oY2FsbFNpdGVJbmRleCk7Ci0gICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gb3JpZ2lu
LmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgYnl0ZWNvZGVJbmRleCA9IG9yaWdpbi5ieXRlY29k
ZUluZGV4KCk7CiAjZWxzZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
I2VuZGlmCiAgICAgfQogCi0gICAgcmV0dXJuIGJ5dGVjb2RlT2Zmc2V0OworICAgIHJldHVybiBi
eXRlY29kZUluZGV4OwogfQogCiBpbnQzMl90IENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGlu
dDMyX3QgdGhyZXNob2xkKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCmluZGV4IGQyMDBmZDU5ZjQyOWEzODNkYTlhZDdjN2ZmYWMwOWNiMjYyYmNmMzYuLjk5NmE4
N2QwOTNlYThiYTgwZjk1ZGQ2NWE1MmFkYjA5OGRiZWU1NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTIzOSwxNSArMjM5LDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGluZGV4ID49IG1fbnVtVmFyczsKICAgICB9CiAKLSAgICBIYW5kbGVy
SW5mbyogaGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBS
ZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOworICAgIEhhbmRs
ZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4LCBSZXF1aXJlZEhh
bmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwogICAgIEhhbmRsZXJJbmZvKiBo
YW5kbGVyRm9ySW5kZXgodW5zaWduZWQsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxl
cjo6QW55SGFuZGxlcik7CiAgICAgdm9pZCByZW1vdmVFeGNlcHRpb25IYW5kbGVyRm9yQ2FsbFNp
dGUoRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgpOwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXJGb3JC
eXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7Ci0gICAgdW5zaWduZWQgY29s
dW1uTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAg
IHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQsIGludCYgZGl2b3QsCisgICAgdW5zaWduZWQgbGluZU51bWJlckZvckJ5dGVjb2RlSW5k
ZXgoQnl0ZWNvZGVJbmRleCk7CisgICAgdW5zaWduZWQgY29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVJ
bmRleChCeXRlY29kZUluZGV4KTsKKyAgICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2Rl
SW5kZXgoQnl0ZWNvZGVJbmRleCwgaW50JiBkaXZvdCwKICAgICAgICAgaW50JiBzdGFydE9mZnNl
dCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25z
dDsKIAotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBieXRlY29kZU9mZnNldEZyb21DYWxsU2l0ZUlu
ZGV4KENhbGxTaXRlSW5kZXgpOworICAgIE9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IGJ5dGVjb2Rl
SW5kZXhGcm9tQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4KTsKIAogICAgIHZvaWQgZ2V0SUNT
dGF0dXNNYXAoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgSUNTdGF0dXNNYXAmIHJlc3VsdCk7
CiAgICAgdm9pZCBnZXRJQ1N0YXR1c01hcChJQ1N0YXR1c01hcCYgcmVzdWx0KTsKQEAgLTMwOSw3
ICszMDksNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBpcyBhIHNsb3cgZnVuY3Rpb24gY2FsbCB1
c2VkIHByaW1hcmlseSBmb3IgY29tcGlsaW5nIE9TUiBleGl0cyBpbiB0aGUgY2FzZQogICAgIC8v
IHRoYXQgdGhlcmUgaGFkIGJlZW4gaW5saW5pbmcuIENoYW5jZXMgYXJlIGlmIHlvdSB3YW50IHRv
IHVzZSB0aGlzLCB5b3UncmUgcmVhbGx5CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0lu
Zm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgotICAgIENhbGxMaW5r
SW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleCh1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KTsKKyAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgo
Qnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAm
JiBqaXRDb2RlTWFwKQogICAgIHsKQEAgLTMyOCwyNSArMzI4LDI1IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVnaXN0ZXJTZXQpOwogICAgIHZvaWQgc2V0Q2Fs
bGVlU2F2ZVJlZ2lzdGVycyhzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+KTsK
IAotICAgIFJhcmVDYXNlUHJvZmlsZSogYWRkUmFyZUNhc2VQcm9maWxlKGludCBieXRlY29kZU9m
ZnNldCk7Ci0gICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9m
ZnNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAg
IHVuc2lnbmVkIHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgaW50IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBSYXJlQ2FzZVByb2Zp
bGUqIGFkZFJhcmVDYXNlUHJvZmlsZShCeXRlY29kZUluZGV4KTsKKyAgICBSYXJlQ2FzZVByb2Zp
bGUqIHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgQnl0ZWNvZGVJbmRleCk7CisgICAgdW5zaWduZWQgcmFyZUNhc2VQcm9maWxlQ291bnRG
b3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgp
OwogCi0gICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCisg
ICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgp
CiAgICAgewogICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9s
b2NrKTsKLSAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5
dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICB1bnNpZ25lZCB2
YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVJbmRleChsb2NrZXIsIGJ5dGVj
b2RlSW5kZXgpOwogICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtl
U2xvd0Nhc2VNaW5pbXVtQ291bnQoKTsKICAgICB9CiAKLSAgICBib29sIGNvdWxkVGFrZVNsb3dD
YXNlKGludCBieXRlY29kZU9mZnNldCkKKyAgICBib29sIGNvdWxkVGFrZVNsb3dDYXNlKEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICB7CiAgICAgICAgIGlmICghaGFzQmFzZWxpbmVK
SVRQcm9maWxpbmcoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJh
cmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQobG9ja2VyLCBieXRlY29kZU9mZnNl
dCk7CisgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRl
Y29kZUluZGV4KGxvY2tlciwgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIHJldHVybiB2YWx1ZSA+
PSBPcHRpb25zOjpjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpOwogICAgIH0KIApAQCAt
MzgyLDYgKzM4MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXR1cm5BZGRyZXNzIC0g
aW5zdHJ1Y3Rpb25zQmVnaW47CiAgICAgfQogCisgICAgaW5saW5lIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleChjb25zdCBJbnN0cnVjdGlvbiogcmV0dXJuQWRkcmVzcykKKyAgICB7CisgICAg
ICAgIHJldHVybiBCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KHJldHVybkFkZHJlc3MpKTsK
KyAgICB9CisKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29u
c3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmluc3RydWN0aW9ucygpOyB9CiAKICAgICBzaXpl
X3QgcHJlZGljdGVkTWFjaGluZUNvZGVTaXplKCk7CkBAIC00ODMsOCArNDg4LDggQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFZhbHVlUHJvZmlsZSYgdmFs
dWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBTcGVj
dWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgaW50IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBWYWx1ZVByb2Zp
bGUmIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CisgICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlSW5kZXgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5UHJvZmlsZShj
b25zdCBGdW5jdG9yJik7CkBAIC00OTIsMTMgKzQ5NywxMyBAQCBwdWJsaWM6CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUo
Y29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9y
RWFjaExMSW50Q2FsbExpbmtJbmZvKGNvbnN0IEZ1bmN0b3ImKTsKIAotICAgIEFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNl
dCBieXRlY29kZU9mZnNldCk7CisgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGVGb3JCeXRl
Y29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
Rm9yUEMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAotICAgIGJvb2wgY291bGRUYWtlU3BlY2lhbEZh
c3RDYXNlKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQpOworICAgIGJv
b2wgY291bGRUYWtlU3BlY2lhbEFyaXRoRmFzdENhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZU9m
ZnNldCk7CiAKLSAgICBBcnJheVByb2ZpbGUqIGdldEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7Ci0gICAgQXJyYXlQcm9maWxl
KiBnZXRBcnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEFycmF5UHJv
ZmlsZSogZ2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2Rl
SW5kZXgpOworICAgIEFycmF5UHJvZmlsZSogZ2V0QXJyYXlQcm9maWxlKEJ5dGVjb2RlSW5kZXgp
OwogCiAgICAgLy8gRXhjZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQKIApAQCAtODc2LDcgKzg4MSw3
IEBAIHB1YmxpYzoKIAogICAgIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IG5ld0V4Y2VwdGlvbkhh
bmRsaW5nQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IG9yaWdpbmFsQ2FsbFNpdGUpOwogCi0g
ICAgdm9pZCBlbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlT2Zmc2V0KElu
c3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQpOworICAgIHZvaWQgZW5zdXJl
Q2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwog
CiAgICAgYm9vbCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
aGFzVGFpbENhbGxzKCk7IH0KIApAQCAtOTQzLDcgKzk0OCw3IEBAIHByaXZhdGU6CiAKICAgICB1
bnNpZ25lZCBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fbnVt
YmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXM7IH0KICAgICB1bnNpZ25lZCB0b3RhbE51bWJl
ck9mVmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVz
KCkgKyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpOyB9Ci0gICAgVmFsdWVQcm9m
aWxlKiB0cnlHZXRWYWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZz
ZXQpOworICAgIFZhbHVlUHJvZmlsZSogdHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJbmRl
eChCeXRlY29kZUluZGV4KTsKIAogICAgIFNlY29uZHMgdGltZVNpbmNlQ3JlYXRpb24oKQogICAg
IHsKQEAgLTk2MCw3ICs5NjUsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHZvaWQgaW5zZXJ0
QmFzaWNCbG9ja0JvdW5kYXJpZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKCk7Ci0gICAgdm9pZCBl
bnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlT2Zmc2V0U2xvdyhjb25zdCBP
cENhdGNoJiwgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCk7CisgICAgdm9pZCBlbnN1cmVDYXRj
aExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KGNvbnN0IE9wQ2F0Y2gmLCBC
eXRlY29kZUluZGV4KTsKIAogICAgIGludCBtX251bUNhbGxlZUxvY2FsczsKICAgICBpbnQgbV9u
dW1WYXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVP
cmlnaW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3Bw
CmluZGV4IDJkZTgwNDgyMWM3ODFiZmY4MTAzZDQ1ZDA3YmRmYTZjN2VlZTAzY2IuLjgzZmJiOTBm
NDAyMTNmZWUwNGNiZjExYjA5MWI0MzIzNzhiYTQzODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgdW5zaWduZWQg
Q29kZU9yaWdpbjo6YXBwcm94aW1hdGVIYXNoKElubGluZUNhbGxGcmFtZSogdGVybWluYWwpIGNv
bnN0CiAgICAgdW5zaWduZWQgcmVzdWx0ID0gMjsKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4g
PSAqdGhpczsKICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHJlc3VsdCArPSBjb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgcmVzdWx0ICs9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpLmFzQml0cygpOwogCiAgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIENvZGVPcmln
aW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIihjbG9zdXJlKSAiKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgb3V0LnByaW50
KCJiYyMiLCBzdGFja1tpXS5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBvdXQucHJpbnQoc3Rh
Y2tbaV0uYnl0ZWNvZGVJbmRleCgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCmluZGV4IGQ1ZjMwYzJjOTAzNjcxNjlkYzU4NzU3MmNj
MmU5YjMyMDI5ZTk0MDYuLjM0MTRkNGYwMWRmNGQ3OGI3NGM0YzBjYzViODljODVjZWFiODBhM2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaApAQCAtMjUs
NiArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIK
KwogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CkBAIC00MSwyNSArNDMsMjMgQEAgY2xhc3MgQ29kZU9yaWdp
biB7CiBwdWJsaWM6CiAgICAgQ29kZU9yaWdpbigpCiAjaWYgQ1BVKEFERFJFU1M2NCkKLSAgICAg
ICAgOiBtX2NvbXBvc2l0ZVZhbHVlKGJ1aWxkQ29tcG9zaXRlVmFsdWUobnVsbHB0ciwgc19pbnZh
bGlkQnl0ZWNvZGVJbmRleCkpCisgICAgICAgIDogbV9jb21wb3NpdGVWYWx1ZShidWlsZENvbXBv
c2l0ZVZhbHVlKG51bGxwdHIsIEJ5dGVjb2RlSW5kZXgoKSkpCiAjZWxzZQotICAgICAgICA6IG1f
Ynl0ZWNvZGVJbmRleChzX2ludmFsaWRCeXRlY29kZUluZGV4KQotICAgICAgICAsIG1faW5saW5l
Q2FsbEZyYW1lKG51bGxwdHIpCisgICAgICAgIDogbV9pbmxpbmVDYWxsRnJhbWUobnVsbHB0cikK
ICNlbmRpZgogICAgIHsKICAgICB9Ci0gICAgCisKICAgICBDb2RlT3JpZ2luKFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlVHlwZSkKICNpZiBDUFUoQUREUkVTUzY0KQotICAgICAgICA6IG1fY29t
cG9zaXRlVmFsdWUoYnVpbGRDb21wb3NpdGVWYWx1ZShkZWxldGVkTWFya2VyKCksIHNfaW52YWxp
ZEJ5dGVjb2RlSW5kZXgpKQorICAgICAgICA6IG1fY29tcG9zaXRlVmFsdWUoYnVpbGRDb21wb3Np
dGVWYWx1ZShkZWxldGVkTWFya2VyKCksIEJ5dGVjb2RlSW5kZXgoKSkpCiAjZWxzZQotICAgICAg
ICA6IG1fYnl0ZWNvZGVJbmRleChzX2ludmFsaWRCeXRlY29kZUluZGV4KQotICAgICAgICAsIG1f
aW5saW5lQ2FsbEZyYW1lKGRlbGV0ZWRNYXJrZXIoKSkKKyAgICAgICAgOiBtX2lubGluZUNhbGxG
cmFtZShkZWxldGVkTWFya2VyKCkpCiAjZW5kaWYKICAgICB7CiAgICAgfQogICAgIAotICAgIGV4
cGxpY2l0IENvZGVPcmlnaW4odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBudWxscHRyKQorICAgIGV4cGxpY2l0IENvZGVPcmlnaW4oQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IG51bGxwdHIpCiAjaWYgQ1BVKEFERFJFU1M2NCkKICAgICAgICAgOiBtX2NvbXBvc2l0ZVZh
bHVlKGJ1aWxkQ29tcG9zaXRlVmFsdWUoaW5saW5lQ2FsbEZyYW1lLCBieXRlY29kZUluZGV4KSkK
ICNlbHNlCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2lubGluZUNhbGxG
cmFtZShpbmxpbmVDYWxsRnJhbWUpCiAjZW5kaWYKICAgICB7Ci0gICAgICAgIEFTU0VSVChieXRl
Y29kZUluZGV4IDwgc19pbnZhbGlkQnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFTU0VSVCghIWJ5
dGVjb2RlSW5kZXgpOwogI2lmIENQVShBRERSRVNTNjQpCiAgICAgICAgIEFTU0VSVCghKGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGlubGluZUNhbGxGcmFtZSkgJiB+c19tYXNrQ29tcG9zaXRlVmFs
dWVGb3JQb2ludGVyKSk7CiAjZW5kaWYKQEAgLTEyNCw3ICsxMjQsNyBAQCBwdWJsaWM6CiAjaWYg
Q1BVKEFERFJFU1M2NCkKICAgICAgICAgcmV0dXJuICEobV9jb21wb3NpdGVWYWx1ZSAmIHNfbWFz
a0lzQnl0ZWNvZGVJbmRleEludmFsaWQpOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIG1fYnl0ZWNv
ZGVJbmRleCAhPSBzX2ludmFsaWRCeXRlY29kZUluZGV4OworICAgICAgICByZXR1cm4gISFtX2J5
dGVjb2RlSW5kZXg7CiAjZW5kaWYKICAgICB9CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KQEAgLTEzNCw3ICsxMzQsNyBAQCBwdWJsaWM6CiAj
aWYgQ1BVKEFERFJFU1M2NCkKICAgICAgICAgcmV0dXJuICFpc1NldCgpICYmIChtX2NvbXBvc2l0
ZVZhbHVlICYgc19tYXNrQ29tcG9zaXRlVmFsdWVGb3JQb2ludGVyKTsKICNlbHNlCi0gICAgICAg
IHJldHVybiBtX2J5dGVjb2RlSW5kZXggPT0gc19pbnZhbGlkQnl0ZWNvZGVJbmRleCAmJiAhIW1f
aW5saW5lQ2FsbEZyYW1lOworICAgICAgICByZXR1cm4gISFtX2J5dGVjb2RlSW5kZXggJiYgISFt
X2lubGluZUNhbGxGcmFtZTsKICNlbmRpZgogICAgIH0KICAgICAKQEAgLTE2NywxNCArMTY3LDE0
IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4
dCopIGNvbnN0OwogCi0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCgpIGNvbnN0CisgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QKICAgICB7CiAjaWYgQ1BVKEFERFJFU1M2
NCkKICAgICAgICAgaWYgKCFpc1NldCgpKQotICAgICAgICAgICAgcmV0dXJuIHNfaW52YWxpZEJ5
dGVjb2RlSW5kZXg7CisgICAgICAgICAgICByZXR1cm4gQnl0ZWNvZGVJbmRleCgpOwogICAgICAg
ICBpZiAoVU5MSUtFTFkoaXNPdXRPZkxpbmUoKSkpCiAgICAgICAgICAgICByZXR1cm4gb3V0T2ZM
aW5lQ29kZU9yaWdpbigpLT5ieXRlY29kZUluZGV4OwotICAgICAgICByZXR1cm4gbV9jb21wb3Np
dGVWYWx1ZSA+PiAoNjQgLSBzX2ZyZWVCaXRzQXRUb3ApOworICAgICAgICByZXR1cm4gQnl0ZWNv
ZGVJbmRleDo6ZnJvbUJpdHMobV9jb21wb3NpdGVWYWx1ZSA+PiAoNjQgLSBzX2ZyZWVCaXRzQXRU
b3ApKTsKICNlbHNlCiAgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAjZW5kaWYKQEAg
LTE5Miw4ICsxOTIsNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgc19pbnZhbGlkQnl0ZWNvZGVJbmRleCA9IFVJTlRfTUFYOwotCiAj
aWYgQ1BVKEFERFJFU1M2NCkKICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBzX21hc2tJ
c091dE9mTGluZSA9IDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc19tYXNrSXNC
eXRlY29kZUluZGV4SW52YWxpZCA9IDI7CkBAIC0yMDIsOSArMjAwLDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgogICAgICAgICBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleDsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OwogICAgICAgICAKLSAg
ICAgICAgT3V0T2ZMaW5lQ29kZU9yaWdpbihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgT3V0T2ZMaW5lQ29kZU9yaWdpbihJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KQogICAgICAgICAgICAgOiBpbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKQogICAg
ICAgICAgICAgLCBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKQEAgLTIz
NSwxNyArMjMzLDE3IEBAIHByaXZhdGU6CiAjaWYgQ1BVKEFERFJFU1M2NCkKICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIHNfZnJlZUJpdHNBdFRvcCA9IDY0IC0gV1RGX0NQVV9FRkZFQ1RJ
VkVfQUREUkVTU19XSURUSDsKICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBzX21hc2tD
b21wb3NpdGVWYWx1ZUZvclBvaW50ZXIgPSAoKDFVTEwgPDwgV1RGX0NQVV9FRkZFQ1RJVkVfQURE
UkVTU19XSURUSCkgLSAxKSAmIH4oOFVMTCAtIDEpOwotICAgIHN0YXRpYyB1aW50cHRyX3QgYnVp
bGRDb21wb3NpdGVWYWx1ZShJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkKKyAgICBzdGF0aWMgdWludHB0cl90IGJ1aWxkQ29tcG9zaXRlVmFs
dWUoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCkKICAgICB7Ci0gICAgICAgIGlmIChieXRlY29kZUluZGV4ID09IHNfaW52YWxpZEJ5
dGVjb2RlSW5kZXgpCisgICAgICAgIGlmICghYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihpbmxpbmVDYWxsRnJhbWUpIHwgc19tYXNrSXNC
eXRlY29kZUluZGV4SW52YWxpZDsKIAotICAgICAgICBpZiAoVU5MSUtFTFkoYnl0ZWNvZGVJbmRl
eCA+PSAxIDw8IHNfZnJlZUJpdHNBdFRvcCkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKGJ5dGVj
b2RlSW5kZXguYXNCaXRzKCkgPj0gMSA8PCBzX2ZyZWVCaXRzQXRUb3ApKSB7CiAgICAgICAgICAg
ICBhdXRvKiBvdXRPZkxpbmUgPSBuZXcgT3V0T2ZMaW5lQ29kZU9yaWdpbihpbmxpbmVDYWxsRnJh
bWUsIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KG91dE9mTGluZSkgfCBzX21hc2tJc091dE9mTGluZTsKICAgICAgICAgfQogCi0gICAg
ICAgIHVpbnRwdHJfdCBlbmNvZGVkQnl0ZWNvZGVJbmRleCA9IHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oYnl0ZWNvZGVJbmRleCkgPDwgKDY0IC0gc19mcmVlQml0c0F0VG9wKTsKKyAgICAgICAgdWlu
dHB0cl90IGVuY29kZWRCeXRlY29kZUluZGV4ID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRl
Y29kZUluZGV4LmFzQml0cygpKSA8PCAoNjQgLSBzX2ZyZWVCaXRzQXRUb3ApOwogICAgICAgICBB
U1NFUlQoIShlbmNvZGVkQnl0ZWNvZGVJbmRleCAmIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGlu
bGluZUNhbGxGcmFtZSkpKTsKICAgICAgICAgcmV0dXJuIGVuY29kZWRCeXRlY29kZUluZGV4IHwg
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oaW5saW5lQ2FsbEZyYW1lKTsKICAgICB9CkBAIC0yNTgs
MTQgKzI1NiwxNCBAQCBwcml2YXRlOgogICAgIC8vIEZpbmFsbHkgdGhlIGxhc3Qgc19mcmVlQml0
c0F0VG9wIGFyZSB0aGUgYnl0ZWNvZGVJbmRleCBpZiBpdCBpcyBpbmxpbmUKICAgICB1aW50cHRy
X3QgbV9jb21wb3NpdGVWYWx1ZTsKICNlbHNlCi0gICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4
OworICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwogICAgIElubGluZUNhbGxGcmFt
ZSogbV9pbmxpbmVDYWxsRnJhbWU7CiAjZW5kaWYKIH07CiAKIGlubGluZSB1bnNpZ25lZCBDb2Rl
T3JpZ2luOjpoYXNoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpJbnRIYXNoPHVuc2lnbmVk
Pjo6aGFzaChieXRlY29kZUluZGV4KCkpICsKKyAgICByZXR1cm4gV1RGOjpJbnRIYXNoPHVuc2ln
bmVkPjo6aGFzaChieXRlY29kZUluZGV4KCkuYXNCaXRzKCkpICsKICAgICAgICAgV1RGOjpQdHJI
YXNoPElubGluZUNhbGxGcmFtZSo+OjpoYXNoKGlubGluZUNhbGxGcmFtZSgpKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAKaW5k
ZXggYjFhMDFmZmE0ZDkzNDhmZWNiMjRjOTY4OGJjODAwNTJmOTM4ODZhNy4uYTgyZjkyZGZkNTll
MjJmZTI3MTJiZmExNWVkYTZmZmRkYTBhYzU2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBGcmVxdWVudEV4aXRTaXRlOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCJiYyMiLCBtX2J5dGVj
b2RlT2Zmc2V0LCAiOiAiLCBtX2tpbmQsICIvIiwgbV9qaXRUeXBlLCAiLyIsIG1faW5saW5lS2lu
ZCk7CisgICAgb3V0LnByaW50KG1fYnl0ZWNvZGVJbmRleCwgIjogIiwgbV9raW5kLCAiLyIsIG1f
aml0VHlwZSwgIi8iLCBtX2lubGluZUtpbmQpOwogfQogCiBFeGl0UHJvZmlsZTo6RXhpdFByb2Zp
bGUoKSB7IH0KQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBFeGl0UHJvZmlsZTo6YWRkKENvZGVCbG9j
ayogb3duZXIsIGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLVZlY3RvcjxGcmVxdWVudEV4aXRTaXRlPiBFeGl0UHJvZmlsZTo6ZXhpdFNpdGVzRm9y
KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitWZWN0b3I8RnJlcXVlbnRFeGl0U2l0ZT4gRXhpdFBy
b2ZpbGU6OmV4aXRTaXRlc0ZvcihCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAg
VmVjdG9yPEZyZXF1ZW50RXhpdFNpdGU+IHJlc3VsdDsKICAgICAKQEAgLTgzLDcgKzgzLDcgQEAg
VmVjdG9yPEZyZXF1ZW50RXhpdFNpdGU+IEV4aXRQcm9maWxlOjpleGl0U2l0ZXNGb3IodW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9mcmVxdWVudEV4aXRTaXRlcy0+c2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKG1fZnJlcXVlbnRFeGl0U2l0ZXMtPmF0KGkpLmJ5dGVjb2RlT2Zmc2V0KCkg
PT0gYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgaWYgKG1fZnJlcXVlbnRFeGl0U2l0ZXMtPmF0KGkp
LmJ5dGVjb2RlSW5kZXgoKSA9PSBieXRlY29kZUluZGV4KQogICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChtX2ZyZXF1ZW50RXhpdFNpdGVzLT5hdChpKSk7CiAgICAgfQogICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuaAppbmRleCA3ZjYwMTlm
NWE5M2Q3M2QxOGI4YjE2MGU5NzYwN2E2ZjE2OWMxYWM5Li5mODA3N2JjYzY0MDljOWJjODU1MWQw
ZTNkNmE2MzAwMGJmYmRiM2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvREZHRXhpdFByb2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvREZHRXhpdFByb2ZpbGUuaApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiBjbGFzcyBGcmVxdWVudEV4aXRTaXRlIHsKIHB1YmxpYzoKICAgICBGcmVx
dWVudEV4aXRTaXRlKCkKLSAgICAgICAgOiBtX2J5dGVjb2RlT2Zmc2V0KDApIC8vIDAgPSBlbXB0
eSB2YWx1ZQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KDApKQogICAg
ICAgICAsIG1fa2luZChFeGl0S2luZFVuc2V0KQogICAgICAgICAsIG1faml0VHlwZShFeGl0RnJv
bUFueXRoaW5nKQogICAgICAgICAsIG1faW5saW5lS2luZChFeGl0RnJvbUFueUlubGluZUtpbmQp
CkBAIC00NywxNSArNDcsMTUgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBGcmVxdWVudEV4
aXRTaXRlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX2J5dGVj
b2RlT2Zmc2V0KDEpIC8vIDEgPSBkZWxldGVkIHZhbHVlCisgICAgICAgIDogbV9ieXRlY29kZUlu
ZGV4KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQogICAgICAgICAsIG1fa2luZChFeGl0S2lu
ZFVuc2V0KQogICAgICAgICAsIG1faml0VHlwZShFeGl0RnJvbUFueXRoaW5nKQogICAgICAgICAs
IG1faW5saW5lS2luZChFeGl0RnJvbUFueUlubGluZUtpbmQpCiAgICAgewogICAgIH0KICAgICAK
LSAgICBleHBsaWNpdCBGcmVxdWVudEV4aXRTaXRlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBF
eGl0S2luZCBraW5kLCBFeGl0aW5nSklUVHlwZSBqaXRUeXBlID0gRXhpdEZyb21Bbnl0aGluZywg
RXhpdGluZ0lubGluZUtpbmQgaW5saW5lS2luZCA9IEV4aXRGcm9tQW55SW5saW5lS2luZCkKLSAg
ICAgICAgOiBtX2J5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQorICAgIGV4cGxpY2l0IEZy
ZXF1ZW50RXhpdFNpdGUoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBFeGl0S2luZCBraW5k
LCBFeGl0aW5nSklUVHlwZSBqaXRUeXBlID0gRXhpdEZyb21Bbnl0aGluZywgRXhpdGluZ0lubGlu
ZUtpbmQgaW5saW5lS2luZCA9IEV4aXRGcm9tQW55SW5saW5lS2luZCkKKyAgICAgICAgOiBtX2J5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICAg
ICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKICAgICAgICAgLCBtX2lubGluZUtpbmQoaW5saW5lS2lu
ZCkKQEAgLTYzLDE0ICs2MywxNCBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChtX2tpbmQgPT0gQXJn
dW1lbnRzRXNjYXBlZCkgewogICAgICAgICAgICAgLy8gQ291bnQgdGhpcyBvbmUgZ2xvYmFsbHku
IEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlIGluIHRoZSBjb2RlIGJsb2NrIHRoZSBhcmd1bWVudHMg
ZXhjYXBlZDsKICAgICAgICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgdGhleSBkaWQgaXMgbm90IGFz
c29jaWF0ZWQgd2l0aCBhbnkgcGFydGljdWxhciBpbnN0cnVjdGlvbi4KLSAgICAgICAgICAgIG1f
Ynl0ZWNvZGVPZmZzZXQgPSAwOworICAgICAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICAvLyBVc2UgdGhpcyBjb25z
dHJ1Y3RvciBpZiB5b3Ugd2lzaCBmb3IgdGhlIGV4aXQgc2l0ZSB0byBiZSBjb3VudGVkIGdsb2Jh
bGx5IHdpdGhpbiBpdHMKICAgICAvLyBjb2RlIGJsb2NrLgogICAgIGV4cGxpY2l0IEZyZXF1ZW50
RXhpdFNpdGUoRXhpdEtpbmQga2luZCwgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSA9IEV4aXRGcm9t
QW55dGhpbmcsIEV4aXRpbmdJbmxpbmVLaW5kIGlubGluZUtpbmQgPSBFeGl0RnJvbUFueUlubGlu
ZUtpbmQpCi0gICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgwKQorICAgICAgICA6IG1fYnl0ZWNv
ZGVJbmRleChCeXRlY29kZUluZGV4KDApKQogICAgICAgICAsIG1fa2luZChraW5kKQogICAgICAg
ICAsIG1faml0VHlwZShqaXRUeXBlKQogICAgICAgICAsIG1faW5saW5lS2luZChpbmxpbmVLaW5k
KQpAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEZyZXF1ZW50RXhpdFNpdGUmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fYnl0ZWNvZGVPZmZzZXQgPT0gb3RoZXIubV9ieXRlY29kZU9mZnNldAorICAgICAgICByZXR1
cm4gbV9ieXRlY29kZUluZGV4ID09IG90aGVyLm1fYnl0ZWNvZGVJbmRleAogICAgICAgICAgICAg
JiYgbV9raW5kID09IG90aGVyLm1fa2luZAogICAgICAgICAgICAgJiYgbV9qaXRUeXBlID09IG90
aGVyLm1faml0VHlwZQogICAgICAgICAgICAgJiYgbV9pbmxpbmVLaW5kID09IG90aGVyLm1faW5s
aW5lS2luZDsKQEAgLTkyLDcgKzkyLDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgc3Vic3Vt
ZXMoY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAgICBp
ZiAobV9ieXRlY29kZU9mZnNldCAhPSBvdGhlci5tX2J5dGVjb2RlT2Zmc2V0KQorICAgICAgICBp
ZiAobV9ieXRlY29kZUluZGV4ICE9IG90aGVyLm1fYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKG1fa2luZCAhPSBvdGhlci5tX2tpbmQpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDcsMTAgKzEwNywxMCBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjpp
bnRIYXNoKG1fYnl0ZWNvZGVPZmZzZXQpICsgbV9raW5kICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1faml0VHlwZSkgKiA3ICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1faW5saW5lS2luZCkgKiAx
MTsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCkgKyBtX2tpbmQgKyBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obV9qaXRUeXBlKSAqIDcgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9pbmxpbmVLaW5kKSAqIDExOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXQ7IH0KKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KICAg
ICBFeGl0S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgRXhpdGluZ0pJ
VFR5cGUgaml0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faml0VHlwZTsgfQogICAgIEV4aXRpbmdJ
bmxpbmVLaW5kIGlubGluZUtpbmQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUtpbmQ7IH0KQEAg
LTEzMSwxMyArMTMxLDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBFeGl0S2luZFVu
c2V0ICYmIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gRXhpdEtp
bmRVbnNldCAmJiBtX2J5dGVjb2RlSW5kZXguaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogCiBwcml2
YXRlOgotICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgQnl0ZWNvZGVJbmRleCBt
X2J5dGVjb2RlSW5kZXg7CiAgICAgRXhpdEtpbmQgbV9raW5kOwogICAgIEV4aXRpbmdKSVRUeXBl
IG1faml0VHlwZTsKICAgICBFeGl0aW5nSW5saW5lS2luZCBtX2lubGluZUtpbmQ7CkBAIC0xODMs
NyArMTgzLDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIEdldCB0aGUgZnJlcXVlbnQgZXhpdCBz
aXRlcyBmb3IgYSBieXRlY29kZSBpbmRleC4gVGhpcyBpcyBPKG4pLCBhbmQgaXMKICAgICAvLyBt
ZWFudCB0byBvbmx5IGJlIHVzZWQgZnJvbSBkZWJ1Z2dpbmcvcHJvZmlsaW5nIGNvZGUuCi0gICAg
VmVjdG9yPEZyZXF1ZW50RXhpdFNpdGU+IGV4aXRTaXRlc0Zvcih1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KTsKKyAgICBWZWN0b3I8RnJlcXVlbnRFeGl0U2l0ZT4gZXhpdFNpdGVzRm9yKEJ5dGVjb2Rl
SW5kZXgpOwogICAgIAogICAgIC8vIFRoaXMgaXMgTyhuKSBhbmQgc2hvdWxkIGJlIGNhbGxlZCBv
biBsZXNzLWZyZXF1ZW50bHkgZXhlY3V0ZWQgY29kZSBwYXRocwogICAgIC8vIGluIHRoZSBjb21w
aWxlci4gSXQgc2hvdWxkIGJlIHN0cmljdGx5IGNoZWFwZXIgdGhhbiBidWlsZGluZyBhCkBAIC0y
MjIsNyArMjIyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaGFzRXhpdFNpdGUoRnJlcXVl
bnRFeGl0U2l0ZShraW5kKSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFzRXhpdFNpdGUodW5z
aWduZWQgYnl0ZWNvZGVJbmRleCwgRXhpdEtpbmQga2luZCkgY29uc3QKKyAgICBib29sIGhhc0V4
aXRTaXRlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRXhpdEtpbmQga2luZCkgY29uc3QK
ICAgICB7CiAgICAgICAgIHJldHVybiBoYXNFeGl0U2l0ZShGcmVxdWVudEV4aXRTaXRlKGJ5dGVj
b2RlSW5kZXgsIGtpbmQpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9EZWZlcnJlZFNvdXJjZUR1bXAuY3BwCmluZGV4IGFiYTg0OTRlZWZkMGY5ZGY1
ZDMwOTNjMjEyZjMyY2UwODE5YmQxNTYuLmJmMjIxMDI3NWU1N2ZjODdmNTM2NDI0MDBlMmNlNzQz
NDJmNzA0YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZl
cnJlZFNvdXJjZUR1bXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
ZWZlcnJlZFNvdXJjZUR1bXAuY3BwCkBAIC0zOCw3ICszOCw3IEBAIERlZmVycmVkU291cmNlRHVt
cDo6RGVmZXJyZWRTb3VyY2VEdW1wKENvZGVCbG9jayogY29kZUJsb2NrKQogewogfQogCi1EZWZl
cnJlZFNvdXJjZUR1bXA6OkRlZmVycmVkU291cmNlRHVtcChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Q29kZUJsb2NrKiByb290Q29kZUJsb2NrLCBKSVRUeXBlIHJvb3RKSVRUeXBlLCB1bnNpZ25lZCBj
YWxsZXJCeXRlY29kZUluZGV4KQorRGVmZXJyZWRTb3VyY2VEdW1wOjpEZWZlcnJlZFNvdXJjZUR1
bXAoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcm9vdENvZGVCbG9jaywgSklUVHlw
ZSByb290SklUVHlwZSwgQnl0ZWNvZGVJbmRleCBjYWxsZXJCeXRlY29kZUluZGV4KQogICAgIDog
bV9jb2RlQmxvY2soY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2spCiAgICAgLCBtX3Jvb3RDb2Rl
QmxvY2soY29kZUJsb2NrLT52bSgpLCByb290Q29kZUJsb2NrKQogICAgICwgbV9yb290SklUVHlw
ZShyb290SklUVHlwZSkKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBEZWZlcnJlZFNvdXJjZUR1bXA6
OmR1bXAoKQogICAgIGRhdGFMb2coKm1fY29kZUJsb2NrKTsKIAogICAgIGlmIChpc0lubGluZWRG
cmFtZSkKLSAgICAgICAgZGF0YUxvZygiIGF0ICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKCptX3Jv
b3RDb2RlQmxvY2ssIG1fcm9vdEpJVFR5cGUpLCAiICIsICJiYyMiLCBtX2NhbGxlckJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICBkYXRhTG9nKCIgYXQgIiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUoKm1f
cm9vdENvZGVCbG9jaywgbV9yb290SklUVHlwZSksICIgIiwgbV9jYWxsZXJCeXRlY29kZUluZGV4
KTsKIAogICAgIGRhdGFMb2coIlxuJycnIik7CiAgICAgbV9jb2RlQmxvY2stPmR1bXBTb3VyY2Uo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZFNv
dXJjZUR1bXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZFNvdXJj
ZUR1bXAuaAppbmRleCBiNWE3YmYyY2YyZGI2YzdjMTljOGVlNGZiNTBiYmQwMThiMzQyMTBhLi5l
OGQyY2E4ZDY4OGM3ZjA4MzBiNjkyMjc3NDQwNGE4NGRjNDAxYjc0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkU291cmNlRHVtcC5oCkBAIC0zNiw3
ICszNiw3IEBAIGNsYXNzIERlZmVycmVkU291cmNlRHVtcCB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRGVmZXJyZWRTb3VyY2VEdW1wKENvZGVCbG9jayopOwot
ICAgIERlZmVycmVkU291cmNlRHVtcChDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHJvb3RDb2RlQmxv
Y2ssIEpJVFR5cGUgcm9vdEpJVFR5cGUsIHVuc2lnbmVkIGNhbGxlckJ5dGVjb2RlSW5kZXgpOwor
ICAgIERlZmVycmVkU291cmNlRHVtcChDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHJvb3RDb2RlQmxv
Y2ssIEpJVFR5cGUgcm9vdEpJVFR5cGUsIEJ5dGVjb2RlSW5kZXggY2FsbGVyQnl0ZWNvZGVJbmRl
eCk7CiAKICAgICB2b2lkIGR1bXAoKTsKIApAQCAtNDQsNyArNDQsNyBAQCBwcml2YXRlOgogICAg
IFN0cm9uZzxDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwogICAgIFN0cm9uZzxDb2RlQmxvY2s+IG1f
cm9vdENvZGVCbG9jazsKICAgICBKSVRUeXBlIG1fcm9vdEpJVFR5cGU7Ci0gICAgdW5zaWduZWQg
bV9jYWxsZXJCeXRlY29kZUluZGV4IHsgVUlOVF9NQVggfTsKKyAgICBCeXRlY29kZUluZGV4IG1f
Y2FsbGVyQnl0ZWNvZGVJbmRleDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaApp
bmRleCAwNzNjZTI3NTdiYmE5YzJhMGFiNmMxMjBmNGRiYTBkYmJmNzE5YmY4Li45YTg4NDM3ZWIz
ZmJmMzgzMGFlNzEzNjQ1ZDZjZmQzNzkzZTdlMTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaApAQCAtMzEsMTcgKzMx
LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7
CiAKLXR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgRmFzdEJpdFZlY3RvciwgV1RGOjpJbnRIYXNo
PHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+
IEJ5dGVjb2RlVG9CaXRtYXBNYXA7Cit0eXBlZGVmIEhhc2hNYXA8Qnl0ZWNvZGVJbmRleCwgRmFz
dEJpdFZlY3Rvcj4gQnl0ZWNvZGVUb0JpdG1hcE1hcDsKIAogY2xhc3MgRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGNvbnN0
IEZhc3RCaXRWZWN0b3ImIGdldExpdmVuZXNzKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIGNvbnN0
CisgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgZ2V0TGl2ZW5lc3MoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbWFwW2J5dGVjb2RlSW5k
ZXhdOworICAgICAgICAvLyBGSVhNRTogV2hhdCBzaG91bGQgdGhpcyBkbyB3aGVuIHdlIGhhdmUg
Y2hlY2twb2ludHM/CisgICAgICAgIHJldHVybiBtX21hcFtieXRlY29kZUluZGV4Lm9mZnNldCgp
XTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBvcGVyYW5kSXNMaXZlKGludCBvcGVyYW5kLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4KSBjb25zdAorICAgIGJvb2wgb3BlcmFuZElzTGl2ZShpbnQgb3Bl
cmFuZCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIG9wZXJhbmRJc0Fsd2F5c0xpdmUob3BlcmFuZCkgfHwgb3BlcmFuZFRoYXRJc05vdEFs
d2F5c0xpdmVJc0xpdmUoZ2V0TGl2ZW5lc3MoYnl0ZWNvZGVJbmRleCksIG9wZXJhbmQpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3Rh
dHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNw
cAppbmRleCBiZWViMGVkY2UyOTcwOTkxYjQ3YTE3NjA0YjVkMmJhNGYzNmI3ZGZhLi42MjJiM2U2
ZDBjNmU1MDIwYWMxMGY5NDZjMDY1MmM0Yjc4YWNkMDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCkBAIC01MiwxMSArNTIsMTEgQEAg
Ym9vbCBHZXRCeUlkU3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2
YXJpYW50KQogICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFy
aWFudCk7CiB9CiAKLUdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTElu
dChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCitHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
cm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0mIHZtID0gcHJvZmlsZWRC
bG9jay0+dm0oKTsKICAgICAKLSAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CisgICAgYXV0byBpbnN0cnVjdGlvbiA9
IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
OwogCiAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQ7CiAgICAgc3dpdGNoIChpbnN0cnVjdGlv
bi0+b3Bjb2RlSUQoKSkgewpAQCAtMTAyLDcgKzEwMiw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2ln
bmVkCiAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoU2ltcGxlLCBmYWxzZSwgR2V0QnlJZFZhcmlh
bnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG9mZnNldCkpOwogfQogCi1HZXRCeUlkU3RhdHVz
IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0
YXR1c01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkLCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxF
eGl0U2l0ZURhdGEpCitHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29k
ZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnIGRpZEV4aXQsIENh
bGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKIHsKICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAKQEAgLTEzMCw3
ICsxMzAsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbQogI2lmIEVOQUJMRShERkdfSklUKQog
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCiB7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCgpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgIEdldEJ5SWRTdGF0dXMgcmVzdWx0ID0gR2V0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCiAgICAg
ICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8sIHVpZCwKICAgICAgICAgQ2FsbExp
bmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRl
eCkpOwpAQCAtMzAzLDcgKzMwMyw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcigKICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNl
bGluZU1hcCwKICAgICBJQ1N0YXR1c0NvbnRleHRTdGFjayYgaWNDb250ZXh0U3RhY2ssIENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKLSAgICB1bnNpZ25l
ZCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAg
Q2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhID0gQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCk7
CiAgICAgRXhpdEZsYWcgZGlkRXhpdCA9IGhhc0JhZENhY2hlRXhpdFNpdGUocHJvZmlsZWRCbG9j
aywgYnl0ZWNvZGVJbmRleCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRTdGF0dXMuaAppbmRleCAzODNkNTg2MGRiNWQ0OGI2NzFiOTY0OTE2ZTVhNTg0
MGFhZDExZWI1Li4xY2MwZTIyYmM5NTRmYmVlZDNlMTczM2EwMzE0YzVhNTIwNTFmNmJkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgKQEAgLTEw
Myw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQp
OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVC
bG9jayosIElDU3RhdHVzTWFwJiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOworICAg
IHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAm
LCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZywgQ2FsbExp
bmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CiAgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0
ZUZvcihjb25zdCBTdHJ1Y3R1cmVTZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKICAgICAK
ICAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVC
bG9jaywgSUNTdGF0dXNNYXAmIGJhc2VsaW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgZGZn
Q29udGV4dFN0YWNrLCBDb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKQEAgLTE1
Myw3ICsxNTMsNyBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwKICAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CiAj
ZW5kaWYKLSAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9j
ayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAg
IHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgQnl0ZWNv
ZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgCiAgICAgYm9vbCBhcHBlbmRW
YXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50Jik7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNVdGlscy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNVdGlscy5jcHAKaW5kZXggYWRkMmViMDQ0OWUwODU5
NjQ4ZDkyZDU3MGE4NTNlY2VhYmNmYmJiMS4uOGJlZWFiYTBkNWZhNmQyODdmY2RlNzdhYmIzNDdl
MzJmNTA3NDkyZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lD
U3RhdHVzVXRpbHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0
YXR1c1V0aWxzLmNwcApAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotRXhp
dEZsYWcgaGFzQmFkQ2FjaGVFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpCitFeGl0RmxhZyBoYXNCYWRDYWNoZUV4aXRTaXRlKENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogI2lmIEVO
QUJMRShERkdfSklUKQogICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9
IHByb2ZpbGVkQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNVdGlscy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuaAppbmRleCAwNzdjYmUxYWJhZGY3MmQ5ZWNh
NTFmZmUwYTM1ZmIzYzg2OTJjNzc2Li45ODIwYWQ5OWY0NWY5NGZmNmQxYzljYWYzODQ2ZjA3NWEy
NjM5NDk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0
dXNVdGlscy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c1V0
aWxzLmgKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKFZhcmlh
bnRWZWN0b3JUeXBlJiB2YXJpYW50cywgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQKICAgICAgICAg
fSk7CiB9CiAKLUV4aXRGbGFnIGhhc0JhZENhY2hlRXhpdFNpdGUoQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKK0V4aXRGbGFnIGhhc0JhZENhY2hlRXhp
dFNpdGUoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29kZUluZGV4KTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbkJ5SWRTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJ
ZFN0YXR1cy5jcHAKaW5kZXggYjQ1ODhiNTg1MjU5M2Q5ZWE3MzBkNDFkMWFiOWMzNmUxNWZmMTQy
Yy4uOTIzNzA1M2ZiYTY2MGU0MzJjNDcwYzEwZDE2N2U2OTU0ZmRmNjJlOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKQEAgLTQzLDcgKzQz
LDcgQEAgYm9vbCBJbkJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgSW5CeUlkVmFyaWFu
dCYgdmFyaWFudCkKIH0KIAogI2lmIEVOQUJMRShKSVQpCi1JbkJ5SWRTdGF0dXMgSW5CeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1h
cCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZs
YWcgZGlkRXhpdCkKK0luQnlJZFN0YXR1cyBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnIGRpZEV4aXQpCiB7CiAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwogCkBA
IC02NCw3ICs2NCw3IEBAIEluQnlJZFN0YXR1cyBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29k
ZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotSW5CeUlkU3RhdHVzIEluQnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sq
IHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBtYXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCitJbkJ5SWRTdGF0dXMgSW5CeUlkU3RhdHVzOjpjb21w
dXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIHJl
dHVybiBjb21wdXRlRm9yKHByb2ZpbGVkQmxvY2ssIG1hcCwgYnl0ZWNvZGVJbmRleCwgdWlkLCBo
YXNCYWRDYWNoZUV4aXRTaXRlKHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKTsKIH0KQEAg
LTczLDcgKzczLDcgQEAgSW5CeUlkU3RhdHVzIEluQnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwKICAg
ICBJQ1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCA9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCA9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgIEV4aXRGbGFnIGRpZEV4
aXQgPSBoYXNCYWRDYWNoZUV4aXRTaXRlKHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwog
ICAgIAogICAgIGZvciAoSUNTdGF0dXNDb250ZXh0KiBjb250ZXh0IDogY29udGV4dFN0YWNrKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKaW5kZXgg
OGFlYjc2MGM0ODlhYTI3NGUyOTI0MDcwM2Y2ZDJiN2U3YzgxMzIyMC4uZWI2NWFlYTA2YmM0OGMz
ODFhOTM3OGMwMDY3NTM2ZWUyODlkMzRiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbkJ5SWRTdGF0dXMuaApAQCAtODAsOCArODAsOCBAQCBwdWJsaWM6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBJ
bkJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotICAgIHN0YXRpYyBJbkJ5
SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnKTsKKyAgICBzdGF0
aWMgSW5CeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRl
Y29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyAgICBzdGF0aWMgSW5CeUlkU3Rh
dHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRlY29kZUluZGV4LCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZyk7CiAgICAgc3RhdGljIEluQnlJZFN0YXR1
cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgSUNTdGF0dXNNYXAmIGJhc2Vs
aW5lTWFwLCBJQ1N0YXR1c0NvbnRleHRTdGFjayYgY29udGV4dFN0YWNrLCBDb2RlT3JpZ2luLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcAppbmRleCBl
NTM2MWI2MWEyNWYwMGY0YzMyOWI3OTcyYTcwODMyMmIxMDZlZjgxLi4zZTNlNjVmNTljNTEzMDFl
YjJmNDRiMmQyMzFlZmNlY2E5MWVjY2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcApAQCAtNjksNyArNjksNyBAQCB2b2lkIElu
bGluZUNhbGxGcmFtZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4
dCogY29udGV4dCkgY29ucwogICAgIG91dC5wcmludChicmllZkZ1bmN0aW9uSW5mb3JtYXRpb24o
KSwgIjo8IiwgUmF3UG9pbnRlcihiYXNlbGluZUNvZGVCbG9jay5nZXQoKSkpOwogICAgIGlmIChp
c1N0cmljdE1vZGUoKSkKICAgICAgICAgb3V0LnByaW50KCIgKFN0cmljdE1vZGUpIik7Ci0gICAg
b3V0LnByaW50KCIsIGJjIyIsIGRpcmVjdENhbGxlci5ieXRlY29kZUluZGV4KCksICIsICIsIHN0
YXRpY19jYXN0PEtpbmQ+KGtpbmQpKTsKKyAgICBvdXQucHJpbnQoIiwgIiwgZGlyZWN0Q2FsbGVy
LmJ5dGVjb2RlSW5kZXgoKSwgIiwgIiwgc3RhdGljX2Nhc3Q8S2luZD4oa2luZCkpOwogICAgIGlm
IChpc0Nsb3N1cmVDYWxsKQogICAgICAgICBvdXQucHJpbnQoIiwgY2xvc3VyZSBjYWxsIik7CiAg
ICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3Rh
bmNlT2ZTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNl
T2ZTdGF0dXMuY3BwCmluZGV4IGQzYmE5Yzk4YWIwZTk4MGZlYjI3NGIwNTJhOTBmMjBjZmQ2N2Fl
ODYuLmVkMDBlNjkxZGI2ZTJmNGVhZDI0ZjlhZjc3ZDdlMDk5Mzk3YzgxNWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5jcHAKQEAg
LTQwLDcgKzQwLDcgQEAgdm9pZCBJbnN0YW5jZU9mU3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0
IEluc3RhbmNlT2ZWYXJpYW50JiB2YXJpYW50KQogfQogCiBJbnN0YW5jZU9mU3RhdHVzIEluc3Rh
bmNlT2ZTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElDU3Rh
dHVzTWFwJiBpbmZvTWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBJQ1N0YXR1c01hcCYgaW5mb01hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2sp
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3Rh
bmNlT2ZTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9m
U3RhdHVzLmgKaW5kZXggZjBlMjBkOWFlZjUxNGI5MjhmNTBjNTE5MjIxYWE2NGRlNjNjOWVkOC4u
NjkzMzI2MGMxZmI2ZDBhNjM4MjhiNmZhYjk3MGFlZjk4MmFkZWIyOCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5oCkBAIC03OSw3ICs3
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIEluc3RhbmNlT2ZTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxv
Y2sqLCBJQ1N0YXR1c01hcCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgIHN0YXRpYyBJ
bnN0YW5jZU9mU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCBCeXRl
Y29kZUluZGV4KTsKICAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBzdGF0aWMgSW5zdGFu
Y2VPZlN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U3RydWN0dXJlU3R1YkluZm8qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luc3RydWN0aW9uU3RyZWFtLmgKaW5kZXggOTliNWE1YTkwNjAyNmNlY2U4YjRkZDEwMDQ0
OTI4OWQxZmZlNjQzOC4uZjFlYjNiZWE5ZDJjOGI4MmFmNDcyMjJhODVlNTkzOTc0ODM0MDc5MyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3Ry
ZWFtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3Ry
ZWFtLmgKQEAgLTc3LDEwICs3Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gQmFz
ZVJlZiB7IG1faW5zdHJ1Y3Rpb25zLCBtX2luZGV4ICsgcHRyKCktPnNpemUoKSB9OwogICAgICAg
ICB9CiAKLSAgICAgICAgaW5saW5lIE9mZnNldCBvZmZzZXQoKSBjb25zdAotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9pbmRleDsKLSAgICAgICAgfQorICAgICAgICBpbmxpbmUgT2Zm
c2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAgICAgaW5saW5lIEJ5
dGVjb2RlSW5kZXggaW5kZXgoKSBjb25zdCB7IHJldHVybiBCeXRlY29kZUluZGV4KG9mZnNldCgp
KTsgfQogCiAgICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CiAgICAgICAgIHsKQEAgLTE1Miwx
MiArMTUwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yIHsgbV9pbnN0cnVj
dGlvbnMsIG1faW5zdHJ1Y3Rpb25zLnNpemUoKSB9OwogICAgIH0KIAorICAgIGlubGluZSBjb25z
dCBSZWYgYXQoQnl0ZWNvZGVJbmRleCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgub2Zm
c2V0KCkpOyB9CiAgICAgaW5saW5lIGNvbnN0IFJlZiBhdChPZmZzZXQgb2Zmc2V0KSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKG9mZnNldCA8IG1faW5zdHJ1Y3Rpb25zLnNpemUoKSk7CiAg
ICAgICAgIHJldHVybiBSZWYgeyBtX2luc3RydWN0aW9ucywgb2Zmc2V0IH07CiAgICAgfQogCisK
ICAgICBpbmxpbmUgc2l6ZV90IHNpemUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
aW5zdHJ1Y3Rpb25zLnNpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKaW5kZXggMDFhM2VlNzQzNjYzZTUw
YzE0MTY1ZmI2NGEzMWIyN2QxZDJjMmY1YS4uZWMxZjVjMDI4ZDczMjQwN2VkYWU2MWEyYTAwOTI3
YWMzNGM5NDBkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKQEAgLTM5LDE5ICszOSwxOSBAQCBjbGFzcyBT
Y3JpcHRFeGVjdXRhYmxlOwogY2xhc3MgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkgewogcHVi
bGljOgogICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KCkKLSAgICAgICAgOiBtX2J5dGVj
b2RlT2Zmc2V0KDApIC8vIDAgPSBlbXB0eSB2YWx1ZQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRl
eCgwKSAvLyAwID0gZW1wdHkgdmFsdWUKICAgICAgICAgLCBtX29wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyKCkpIC8vIG5vdCBhIHZhbGlkIG9wZXJhbmQgaW5kZXggaW4gb3VyIGN1cnJlbnQgc2NoZW1l
CiAgICAgewogICAgIH0KICAgICAKICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShXVEY6
Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgx
KSAvLyAxID0gZGVsZXRlZCB2YWx1ZQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleCgxKSAvLyAx
ID0gZGVsZXRlZCB2YWx1ZQogICAgICAgICAsIG1fb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoKSkg
Ly8gbm90IGEgdmFsaWQgb3BlcmFuZCBpbmRleCBpbiBvdXIgY3VycmVudCBzY2hlbWUKICAgICB7
CiAgICAgfQogICAgIAotICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKLSAgICAgICAgOiBtX2J5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQorICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5
KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisg
ICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICwgbV9vcGVy
YW5kKG9wZXJhbmQpCiAgICAgewogICAgICAgICBBU1NFUlQobV9vcGVyYW5kLmlzVmFsaWQoKSk7
CkBAIC02NCwxOSArNjQsMTkgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gbV9ieXRlY29kZU9mZnNldCA9PSBvdGhlci5tX2J5dGVjb2RlT2Zmc2V0Cisg
ICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXggPT0gb3RoZXIubV9ieXRlY29kZUluZGV4CiAg
ICAgICAgICAgICAmJiBtX29wZXJhbmQgPT0gb3RoZXIubV9vcGVyYW5kOwogICAgIH0KICAgICAK
ICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6Omlu
dEhhc2gobV9ieXRlY29kZU9mZnNldCkgKyBtX29wZXJhbmQub2Zmc2V0KCk7CisgICAgICAgIHJl
dHVybiBtX2J5dGVjb2RlSW5kZXguaGFzaCgpICsgbV9vcGVyYW5kLm9mZnNldCgpOwogICAgIH0K
ICAgICAKLSAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCgpIGNvbnN0CisgICAgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCghISp0aGlz
KTsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIHJldHVybiBtX2J5
dGVjb2RlSW5kZXg7CiAgICAgfQogCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQoKSBjb25z
dApAQCAtODcsMTAgKzg3LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9vcGVyYW5kLmlz
VmFsaWQoKSAmJiBtX2J5dGVjb2RlT2Zmc2V0OworICAgICAgICByZXR1cm4gIW1fb3BlcmFuZC5p
c1ZhbGlkKCkgJiYgbV9ieXRlY29kZUluZGV4OwogICAgIH0KIHByaXZhdGU6IAotICAgIHVuc2ln
bmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlLmNwcAppbmRleCA3ZTNjYzk0ZmE0NjExMWRjYmFiMGYyMjA5ZjAxOTgyMDIzYjVmMDEz
Li43MTA0ZDAxYWUxMWFkM2JhY2ExMzQ1NWJkMWEzMDZiMWJiZDFiZmY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuY3BwCkBAIC00MSw3ICs0MSw3IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAog
ICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tp
bmQgPSBMYXp5T3BlcmFuZDsKICAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5jb2RlQmxvY2sgPSBj
b2RlQmxvY2s7Ci0gICAgcmVzdWx0LnUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQgPSBrZXku
Ynl0ZWNvZGVPZmZzZXQoKTsKKyAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNl
dCA9IGtleS5ieXRlY29kZUluZGV4KCk7CiAgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFu
ZCA9IGtleS5vcGVyYW5kKCkub2Zmc2V0KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZS5oCmluZGV4IGI1ZTg0YjEzMzdlM2VmM2I2MjNkZDI5NzY1MDc0Y2Nh
ODU3YzIzODEuLmNmYjgzNDcwNmFmODM0MjcwMjY4ZThmMmY2ZmM5Mjk0MmYzZmJkMGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUuaApAQCAtMzEsNiArMzEsNyBAQAogLy8gdGhlc2UgI2lmJ3Mg
d2lsbCBkaXNhcHBlYXIuLi4KICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkJ5dGVj
b2RlSW5kZXguaCIKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
ODMsMTIgKzg0LDE2IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICAKICAgICBLaW5kIG1fa2luZDsK
LSAgICB1bmlvbiB7CisgICAgdW5pb24gRGF0YSB7CisgICAgICAgIERhdGEoKQorICAgICAgICAg
ICAgOiBwcm9maWxlKG51bGxwdHIpCisgICAgICAgIHsgfQorCiAgICAgICAgIFZhbHVlUHJvZmls
ZSogcHJvZmlsZTsKICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGU7CiAgICAgICAg
IHN0cnVjdCB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OworICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZU9mZnNldDsKICAgICAgICAgICAgIGludCBvcGVyYW5kOwogICAgICAgICB9IGxhenlPcGVy
YW5kOwogICAgIH0gdTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmNwcAppbmRleCBlZmRlMzczODQ2YmY1YjMxODVlMmFjODgzYWVhMDMwZmE1ZDc4
MDhlLi4zMjUwYmU1MThiZGQ5ZGEzYTQ3YTQ3ZjEzOTllNTczNDM2NWU3MTg4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCkBAIC00Nywx
MSArNDcsMTEgQEAgYm9vbCBQdXRCeUlkU3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiB2YXJpYW50KQogICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92
YXJpYW50cywgdmFyaWFudCk7CiB9CiAKLVB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCitQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0mIHZt
ID0gcHJvZmlsZWRCbG9jay0+dm0oKTsKICAgICAKLSAgICBhdXRvIGluc3RydWN0aW9uID0gcHJv
ZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CisgICAgYXV0byBp
bnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BQdXRC
eUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEocHJvZmlsZWRC
bG9jayk7CiAKQEAgLTkyLDcgKzkyLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQKIH0KIAog
I2lmIEVOQUJMRShKSVQpCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3Io
Q29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxs
TGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCitQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0
YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEg
Y2FsbEV4aXRTaXRlRGF0YSkKIHsKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2Zp
bGVkQmxvY2stPm1fbG9jayk7CiAgICAgCkBAIC0yMzcsNyArMjM3LDcgQEAgUHV0QnlJZFN0YXR1
cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCiAKIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVz
TWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewotICAgIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAg
ICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEgPSBDYWxsTGlu
a1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4
KTsKICAgICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0U2l0ZShiYXNlbGluZUJs
b2NrLCBieXRlY29kZUluZGV4KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmgKaW5kZXggOTJiMWIxYTM3MmNiNmFmODUyZjhiMTRlNjA2ZWNhYWI4
Mzk5NjE3NS4uYjBkZDlmMTM5OWE4YmU3NDFmNDhjMzI3MDNiMDgyMjI4NTRjMTk4YiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCkBAIC05Myw3
ICs5Myw3IEBAIHB1YmxpYzoKICAgICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7CiAg
ICAgfQogICAgIAotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2Nr
KiwgSUNTdGF0dXNNYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkLCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CisgICAgc3Rh
dGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5
dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnLCBDYWxsTGlua1N0
YXR1czo6RXhpdFNpdGVEYXRhKTsKICAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9y
KEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RydWN0dXJlU2V0JiwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgYm9vbCBpc0RpcmVjdCk7CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29t
cHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1h
cCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCk7CkBAIC0xMzEsNyArMTMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8q
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLAogICAgICAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNp
dGVEYXRhKTsKICNlbmRpZgotICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJ
bnQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCk7CisgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxv
Y2sqLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKICAgICAKICAgICBi
b29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCmlu
ZGV4IDU4MjY0YjE0YWQxMGI3Y2QxNjc1MTVhYzEzOWM5ZGIzNTRjZmM4MGMuLmQ3YjNiNjQxNmY2
ZWQ1NjA5NTFkZjk4MzA3NDUzMWNhYjQ2ODhhZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcApAQCAtNDAsOCArNDAsNyBA
QCBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCiBTdHJ1Y3R1cmVT
dHViSW5mbzo6U3RydWN0dXJlU3R1YkluZm8oQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQotICAgIDog
Y2FsbFNpdGVJbmRleChVSU5UX01BWCkKLSAgICAsIGFjY2Vzc1R5cGUoYWNjZXNzVHlwZSkKKyAg
ICA6IGFjY2Vzc1R5cGUoYWNjZXNzVHlwZSkKICAgICAsIGNhY2hlVHlwZShDYWNoZVR5cGU6OlVu
c2V0KQogICAgICwgY291bnRkb3duKDEpIC8vIEZvciBhIHRvdGFsbHkgY2xlYXIgc3R1Yiwgd2Un
bGwgcGF0Y2ggaXQgYWZ0ZXIgdGhlIGZpcnN0IGV4ZWN1dGlvbi4KICAgICAsIHJlcGF0Y2hDb3Vu
dCgwKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5jcHAKaW5kZXggYjI3MTZiZmI0YmRlZmQyMDgxYjE1ZjZhMjcyMjE5NGMyOTkxZjIz
ZC4uMjM0ZmE1NzdjNWFmMGExMjE2YzdiNGQ2ZDA0NDdkMGJjZjhkNGM0OSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBA
IC0xMTEsMTUgKzExMSwxNSBAQCBzaXplX3QgVW5saW5rZWRDb2RlQmxvY2s6OmVzdGltYXRlZFNp
emUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUo
Y2VsbCwgdm0pICsgZXh0cmFTaXplOwogfQogCi1pbnQgVW5saW5rZWRDb2RlQmxvY2s6OmxpbmVO
dW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK2ludCBVbmxp
bmtlZENvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQogewotICAgIEFTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9u
cygpLnNpemUoKSk7CisgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVj
dGlvbnMoKS5zaXplKCkpOwogICAgIGludCBkaXZvdCB7IDAgfTsKICAgICBpbnQgc3RhcnRPZmZz
ZXQgeyAwIH07CiAgICAgaW50IGVuZE9mZnNldCB7IDAgfTsKICAgICB1bnNpZ25lZCBsaW5lIHsg
MCB9OwogICAgIHVuc2lnbmVkIGNvbHVtbiB7IDAgfTsKLSAgICBleHByZXNzaW9uUmFuZ2VGb3JC
eXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQsIGxpbmUsIGNvbHVtbik7CisgICAgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVJbmRleChi
eXRlY29kZUluZGV4LCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1u
KTsKICAgICByZXR1cm4gbGluZTsKIH0KIApAQCAtMTc5LDEwICsxNzksMTAgQEAgdm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6ZHVtcEV4cHJlc3Npb25SYW5nZUluZm8oKQogfQogI2VuZGlmCiAKLXZv
aWQgVW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LAordm9pZCBVbmxpbmtlZENvZGVCbG9jazo6ZXhwcmVzc2lv
blJhbmdlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsCiAgICAg
aW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBs
aW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdAogewotICAgIEFTU0VSVChieXRlY29kZU9mZnNl
dCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXgub2Zm
c2V0KCkgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogCiAgICAgaWYgKCFtX2V4cHJlc3Npb25J
bmZvLnNpemUoKSkgewogICAgICAgICBzdGFydE9mZnNldCA9IDA7CkBAIC0xOTksNyArMTk5LDcg
QEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZz
ZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQKICAgICBpbnQgaGlnaCA9IGV4cHJlc3Npb25JbmZv
LnNpemUoKTsKICAgICB3aGlsZSAobG93IDwgaGlnaCkgewogICAgICAgICBpbnQgbWlkID0gbG93
ICsgKGhpZ2ggLSBsb3cpIC8gMjsKLSAgICAgICAgaWYgKGV4cHJlc3Npb25JbmZvW21pZF0uaW5z
dHJ1Y3Rpb25PZmZzZXQgPD0gYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgIGlmIChleHByZXNzaW9u
SW5mb1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9IGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpCiAg
ICAgICAgICAgICBsb3cgPSBtaWQgKyAxOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBoaWdo
ID0gbWlkOwpAQCAtMzI1LDkgKzMyNSw5IEBAIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBVbmxp
bmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zKCkgY29uc3QKICAgICByZXR1cm4gKm1faW5zdHJ1
Y3Rpb25zOwogfQogCi1VbmxpbmtlZEhhbmRsZXJJbmZvKiBVbmxpbmtlZENvZGVCbG9jazo6aGFu
ZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXJlZEhh
bmRsZXIgcmVxdWlyZWRIYW5kbGVyKQorVW5saW5rZWRIYW5kbGVySW5mbyogVW5saW5rZWRDb2Rl
QmxvY2s6OmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikKIHsKLSAgICByZXR1cm4gaGFuZGxl
ckZvckluZGV4KGJ5dGVjb2RlT2Zmc2V0LCByZXF1aXJlZEhhbmRsZXIpOworICAgIHJldHVybiBo
YW5kbGVyRm9ySW5kZXgoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgcmVxdWlyZWRIYW5kbGVyKTsK
IH0KIAogVW5saW5rZWRIYW5kbGVySW5mbyogVW5saW5rZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JJ
bmRleCh1bnNpZ25lZCBpbmRleCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgK
aW5kZXggMDAwMmMzZWEwYjRiYjY0ZmNiOWE2YWY5MTI2NWZmMGEyODQ3NzcxZS4uMWJhOTA3ZmQ3
ODZmMzRiODBjZmVhNWQzYWU0MGZmYjE4YzVjZWNmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTIxNyw3ICsyMTcsNyBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQganVtcFRhcmdldChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fanVtcFRhcmdldHNbaW5kZXhdOyB9CiAgICAgdW5zaWduZWQgbGFzdEp1bXBUYXJnZXQo
KSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzLmxhc3QoKTsgfQogCi0gICAgVW5saW5rZWRI
YW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOworICAg
IFVubGlua2VkSGFuZGxlckluZm8qIGhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5k
ZXgsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CiAgICAg
VW5saW5rZWRIYW5kbGVySW5mbyogaGFuZGxlckZvckluZGV4KHVuc2lnbmVkLCBSZXF1aXJlZEhh
bmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwogCiAgICAgYm9vbCBpc0J1aWx0
aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNCdWlsdGluRnVuY3Rpb247IH0KQEAgLTI3
OSw5ICsyNzksOSBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc1JhcmVEYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9yYXJlRGF0YS5nZXQoKTsgfQogCi0gICAgaW50IGxpbmVOdW1iZXJGb3JCeXRlY29k
ZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAgaW50IGxpbmVOdW1iZXJGb3JC
eXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwogCi0gICAgdm9pZCBleHByZXNzaW9uUmFuZ2VG
b3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZvdCwKKyAg
ICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCwgaW50
JiBkaXZvdCwKICAgICAgICAgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2ln
bmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdDsKIAogICAgIGJvb2wgdHlwZVByb2Zp
bGVyRXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCwgdW5zaWduZWQmIHN0YXJ0RGl2b3QsIHVuc2lnbmVkJiBlbmREaXZvdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKaW5kZXggMDViMDliZTc1NzQy
YjVlMjM5NzFhZjdhOWVlNGQxM2M3ZjliN2E1MC4uYmJiOGE0YjI0NTMxMDQwM2E3ZmNlZjJiMjFl
MTE4MzNlZmI5MDM2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaApAQCAtMTYxLDE5ICsxNjEsMTkgQEAgc3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1
YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKIC8vIFRoaXMgaXMg
YSBtaW5pIHZhbHVlIHByb2ZpbGUgdG8gY2F0Y2ggcGF0aG9sb2dpZXMuIEl0IGlzIGEgY291bnRl
ciB0aGF0IGdldHMKIC8vIGluY3JlbWVudGVkIHdoZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRoIG9u
IGFueSBpbnN0cnVjdGlvbi4KIHN0cnVjdCBSYXJlQ2FzZVByb2ZpbGUgewotICAgIFJhcmVDYXNl
UHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgIDogbV9ieXRlY29kZU9mZnNldChi
eXRlY29kZU9mZnNldCkKKyAgICBSYXJlQ2FzZVByb2ZpbGUoQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAg
ICAsIG1fY291bnRlcigwKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgaW50IG1fYnl0ZWNvZGVP
ZmZzZXQ7CisgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7CiAgICAgdWludDMyX3Qg
bV9jb3VudGVyOwogfTsKIAotaW5saW5lIGludCBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZU9m
ZnNldChSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJvZmlsZSkKK2lubGluZSBCeXRlY29kZUlu
ZGV4IGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlSW5kZXgoUmFyZUNhc2VQcm9maWxlKiByYXJl
Q2FzZVByb2ZpbGUpCiB7Ci0gICAgcmV0dXJuIHJhcmVDYXNlUHJvZmlsZS0+bV9ieXRlY29kZU9m
ZnNldDsKKyAgICByZXR1cm4gcmFyZUNhc2VQcm9maWxlLT5tX2J5dGVjb2RlSW5kZXg7CiB9CiAK
IHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kIDogcHVibGljIFZhbHVlUHJvZmlsZSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCmluZGV4IGU3OTE0YWE0N2M1ZWU5YTk4M2Q3NTlmZGQ2ZmFhYjZjY2EwYjNm
MjAuLjE1NGJkM2NmYmNjMjljMmNlNzQ4YmVkZjc3ZTYxYWM1OWZiYTczZWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCkBAIC01MDQ5LDcgKzUwNDksNyBAQCB2b2lkIEZvckluQ29udGV4dDo6ZmluYWxpemUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2sqIGNvZAogICAg
ICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwogCiAgICAg
ICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9lbnRlcik7Ci0gICAgICAgIGNvbXB1dGVEZWZzRm9y
Qnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb24ucHRyKCksIFsm
XSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRl
Y29kZUluZGV4KGNvZGVCbG9jaywgb3Bjb2RlSUQsIGluc3RydWN0aW9uLnB0cigpLCBbJl0gKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CiAgICAgICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVh
bFJlZ2lzdGVyKCkgPT0gb3BlcmFuZCkKICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlKCk7CiAg
ICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlckNhbGxGcmFtZS5jcHAKaW5kZXggMmFlMGIwNzI5ZmFkYmFjYTJiYzQyNzM1ZmJjY2UwZTFk
NjZhZTgyZS4uMmNlNzJlOGMyYWZhY2NjMDljZjA1MjRhODMwNTJlMGQ3ZTM0YmM3MiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUu
Y3BwCkBAIC0yOTksOSArMjk5LDkgQEAgVGV4dFBvc2l0aW9uIERlYnVnZ2VyQ2FsbEZyYW1lOjpj
dXJyZW50UG9zaXRpb24oVk0mIHZtKQogCiAgICAgaWYgKGlzVGFpbERlbGV0ZWQoKSkgewogICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fc2hhZG93Q2hpY2tlbkZyYW1lLmNvZGVCbG9j
azsKLSAgICAgICAgaWYgKE9wdGlvbmFsPHVuc2lnbmVkPiBieXRlY29kZU9mZnNldCA9IGNvZGVC
bG9jay0+Ynl0ZWNvZGVPZmZzZXRGcm9tQ2FsbFNpdGVJbmRleChtX3NoYWRvd0NoaWNrZW5GcmFt
ZS5jYWxsU2l0ZUluZGV4KSkgewotICAgICAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbihPcmRp
bmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNv
ZGVPZmZzZXQoKmJ5dGVjb2RlT2Zmc2V0KSksCi0gICAgICAgICAgICAgICAgT3JkaW5hbE51bWJl
cjo6ZnJvbU9uZUJhc2VkSW50KGNvZGVCbG9jay0+Y29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVPZmZz
ZXQoKmJ5dGVjb2RlT2Zmc2V0KSkpOworICAgICAgICBpZiAoT3B0aW9uYWw8Qnl0ZWNvZGVJbmRl
eD4gYnl0ZWNvZGVJbmRleCA9IGNvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleEZyb21DYWxsU2l0ZUlu
ZGV4KG1fc2hhZG93Q2hpY2tlbkZyYW1lLmNhbGxTaXRlSW5kZXgpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChjb2RlQmxv
Y2stPmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KCpieXRlY29kZUluZGV4KSksCisgICAgICAg
ICAgICAgICAgT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvZGVCbG9jay0+Y29sdW1u
TnVtYmVyRm9yQnl0ZWNvZGVJbmRleCgqYnl0ZWNvZGVJbmRleCkpKTsKICAgICAgICAgfQogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKaW5kZXgg
MWRkYzYyZTMzNTczYWRjMjNlNGJlZmVmNTQ4YjJhY2EzY2UyMDFhOC4uOGNiMDk2Mjc2ZjEzNDk5
ZGIxZDY2YzMyNWM0NmRkNTM5YjhkNDgyZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jhc2ljQmxvY2suY3BwCkBAIC0zMiw4ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAotQmFzaWNCbG9jazo6QmFzaWNCbG9jaygKLSAgICB1bnNpZ25lZCBi
eXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2Fscywg
ZmxvYXQgZXhlY3V0aW9uQ291bnQpCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2Nh
bHMsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQogICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJl
Z2luKQogICAgICwgaW5kZXgoTm9CbG9jaykKICAgICAsIGNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0
ZUF0SGVhZChTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmgKaW5kZXggNGM1OGM5YzVlNzg0Zjg1ZDk4MjgxNTlmYmYwYmRkNDcxM2Nj
OWFiYS4uMjZhMzA2NzJiMjVlOWI4NjBmY2RhMDkxNDRkNjYzMTEzMDY2NGE3MyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgdHlw
ZWRlZiBWZWN0b3I8Tm9kZSosIDg+IEJsb2NrTm9kZUxpc3Q7CiAKIHN0cnVjdCBCYXNpY0Jsb2Nr
IDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgQmFzaWNCbG9jaygKLSAgICAgICAgdW5z
aWduZWQgYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1M
b2NhbHMsCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVt
QXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsCiAgICAgICAgIGZsb2F0IGV4ZWN1dGlvbkNv
dW50KTsKICAgICB+QmFzaWNCbG9jaygpOwogICAgIApAQCAtMTc4LDcgKzE3OCw3IEBAIHN0cnVj
dCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAgCiAgICAgLy8gVGhp
cyB2YWx1ZSBpcyB1c2VkIGludGVybmFsbHkgZm9yIGJsb2NrIGxpbmtpbmcgYW5kIE9TUiBlbnRy
eS4gSXQgaXMgbW9zdGx5IG1lYW5pbmdsZXNzCiAgICAgLy8gZm9yIG90aGVyIHB1cnBvc2VzIGR1
ZSB0byBpbmxpbmluZy4KLSAgICB1bnNpZ25lZCBieXRlY29kZUJlZ2luOworICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVCZWdpbjsKICAgICAKICAgICBCbG9ja0luZGV4IGluZGV4OwogCkBAIC0y
NTksMTQgKzI1OSwxNCBAQCBwcml2YXRlOgogCiB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKj4g
QmxvY2tMaXN0OwogICAgIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBnZXRCeXRlY29kZUJlZ2lu
Rm9yQmxvY2soQmFzaWNCbG9jayoqIGJhc2ljQmxvY2spCitzdGF0aWMgaW5saW5lIEJ5dGVjb2Rl
SW5kZXggZ2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKEJhc2ljQmxvY2sqKiBiYXNpY0Jsb2NrKQog
ewogICAgIHJldHVybiAoKmJhc2ljQmxvY2spLT5ieXRlY29kZUJlZ2luOwogfQogCi1zdGF0aWMg
aW5saW5lIEJhc2ljQmxvY2sqIGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPEJhc2ljQmxv
Y2sqPiYgbGlua2luZ1RhcmdldHMsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pCitzdGF0aWMgaW5s
aW5lIEJhc2ljQmxvY2sqIGJsb2NrRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8QmFzaWNCbG9jayo+
JiBsaW5raW5nVGFyZ2V0cywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luKQogewotICAgIHJl
dHVybiAqYmluYXJ5U2VhcmNoPEJhc2ljQmxvY2sqLCB1bnNpZ25lZD4obGlua2luZ1RhcmdldHMs
IGxpbmtpbmdUYXJnZXRzLnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgZ2V0Qnl0ZWNvZGVCZWdpbkZv
ckJsb2NrKTsKKyAgICByZXR1cm4gKmJpbmFyeVNlYXJjaDxCYXNpY0Jsb2NrKiwgQnl0ZWNvZGVJ
bmRleD4obGlua2luZ1RhcmdldHMsIGxpbmtpbmdUYXJnZXRzLnNpemUoKSwgYnl0ZWNvZGVCZWdp
biwgZ2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2Vy
dGlvblNldC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9u
U2V0LmNwcAppbmRleCBmYmMyZGI0NjU5YzM5YjE0ZGI0YTBlODQ0MTNhOTU1NDdhNWFkYWNkLi43
NTA4ZTIxOWRjN2M1ODNkYjllYThmY2U2NDY4NTg5OTllMDQ2MGY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcApAQCAtNTEsMTEg
KzUxLDcgQEAgdm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgUmVm
PEJhc2ljQmxvY2s+JiYgYmxvY2spCiAKIEJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0Ojpp
bnNlcnQoc2l6ZV90IGluZGV4LCBmbG9hdCBleGVjdXRpb25Db3VudCkKIHsKLSAgICBSZWY8QmFz
aWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soCi0gICAgICAgIFVJTlRf
TUFYLAotICAgICAgICBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZB
cmd1bWVudHMoKSwKLSAgICAgICAgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCksCi0gICAgICAgIGV4ZWN1dGlvbkNvdW50KSk7CisgICAgUmVmPEJhc2lj
QmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwg
bV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksIG1f
Z3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpLCBleGVjdXRp
b25Db3VudCkpOwogICAgIGJsb2NrLT5pc1JlYWNoYWJsZSA9IHRydWU7CiAgICAgYXV0byogcmVz
dWx0ID0gYmxvY2sucHRyKCk7CiAgICAgaW5zZXJ0KGluZGV4LCBXVEZNb3ZlKGJsb2NrKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4
IDY2MTAxM2E4Nzc3NDRjY2VjOGJjMzM2MTdmYjBiOWEwOTc5NTI2MDUuLjIyMzQ0NWMyZDk0NTgw
N2JmY2I4MTlhZWYyNTE3Zjg1MGUxZTM0NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0xNDgsMTAgKzE0OCwxMCBAQCBwcml2YXRl
OgogICAgIC8vIFRoaXMgaXMgdXNlZCBtb3N0IG5vdGFibHkgd2hlbiBkb2luZyBwb2x5dmFyaWFu
dCBpbmxpbmluZyAoaXQgcmVxdWlyZXMgYSBmYWlyIGJpdCBvZiBjb250cm9sLWZsb3cgd2l0aCBu
byBieXRlY29kZSBhbmFsb2cpLgogICAgIC8vIEl0IGlzIGFsc28gdXNlZCB3aGVuIGRvaW5nIGFu
IGVhcmx5IHJldHVybiBmcm9tIGFuIGlubGluZWQgY2FsbGVlOiBpdCBpcyBlYXNpZXIgdG8gZml4
IHRoZSBieXRlY29kZSBpbmRleCBsYXRlciBvbiBpZiBuZWVkZWQKICAgICAvLyB0aGFuIHRvIG1v
dmUgdGhlIHJpZ2h0IGluZGV4IGFsbCB0aGUgd2F5IHRvIHRoZSB0cmVhdG1lbnQgb2Ygb3BfcmV0
LgotICAgIEJhc2ljQmxvY2sqIGFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgpOworICAgIEJhc2ljQmxvY2sqIGFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKEJ5dGVj
b2RlSW5kZXgpOwogICAgIEJhc2ljQmxvY2sqIGFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKTsK
ICAgICAvLyBBbiB1bnRhcmdldGFibGUgYmxvY2sgY2FuIGJlIGdpdmVuIGEgYnl0ZWNvZGVJbmRl
eCB0byBiZSBsYXRlciBtYW5hZ2VkIGJ5IGxpbmtCbG9jaywgYnV0IG9ubHkgb25jZSwgYW5kIGl0
IGNhbiBuZXZlciBnbyBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uCi0gICAgdm9pZCBtYWtlQmxvY2tU
YXJnZXRhYmxlKEJhc2ljQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICB2b2lk
IG1ha2VCbG9ja1RhcmdldGFibGUoQmFzaWNCbG9jayosIEJ5dGVjb2RlSW5kZXgpOwogICAgIHZv
aWQgYWRkSnVtcFRvKEJhc2ljQmxvY2sqKTsKICAgICB2b2lkIGFkZEp1bXBUbyh1bnNpZ25lZCBi
eXRlY29kZUluZGV4KTsKICAgICAvLyBIYW5kbGUgY2FsbHMuIFRoaXMgcmVzb2x2ZXMgaXNzdWVz
IHN1cnJvdW5kaW5nIGlubGluaW5nIGFuZCBpbnRyaW5zaWNzLgpAQCAtMTc0LDggKzE3NCw4IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdl
dE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50
IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBWaXJ0dWFsUmVn
aXN0ZXIgYXJndW1lbnRzQXJndW1lbnQsIHVuc2lnbmVkIGFyZ3VtZW50c09mZnNldCwgTm9kZVR5
cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQpOwogICAgIHVuc2lnbmVkIGdldElubGlu
aW5nQmFsYW5jZShjb25zdCBDYWxsTGlua1N0YXR1cyYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQp
OwogICAgIGVudW0gY2xhc3MgQ2FsbE9wdGltaXphdGlvblJlc3VsdCB7IE9wdGltaXplZFRvSnVt
cCwgSW5saW5lZCwgRGlkTm90aGluZyB9OwotICAgIENhbGxPcHRpbWl6YXRpb25SZXN1bHQgaGFu
ZGxlQ2FsbFZhcmlhbnQoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlz
QXJndW1lbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9m
ZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1
bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb25CbG9jaywg
Ym9vbCBuZWVkc1RvQ2hlY2tDYWxsZWUpOwotICAgIENhbGxPcHRpbWl6YXRpb25SZXN1bHQgaGFu
ZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQs
IGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0
ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVk
IG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKKyAgICBDYWxsT3B0aW1pemF0aW9uUmVzdWx0IGhhbmRs
ZUNhbGxWYXJpYW50KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
LCBDYWxsVmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0Fy
Z3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIEJ5dGVjb2RlSW5kZXggbmV4
dEluZGV4LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24s
IHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbkJsb2Nr
LCBib29sIG5lZWRzVG9DaGVja0NhbGxlZSk7CisgICAgQ2FsbE9wdGltaXphdGlvblJlc3VsdCBo
YW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdp
c3RlciB0aGlzQXJndW1lbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQnl0ZWNv
ZGVJbmRleCBuZXh0SW5kZXgsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5k
LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVj
a3NGdW5jdG9yPgogICAgIHZvaWQgaW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rlck9mZnNldCwgaW50
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIEJhc2lj
QmxvY2sqIGNvbnRpbnVhdGlvbkJsb2NrLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVj
a3MpOwogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4gdHJ1ZSBpZiBp
dCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgpAQCAtNTY3LDcg
KzU2Nyw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBvcmlnaW4ud2Fsa1VwSW5saW5lU3Rh
Y2soCiAgICAgICAgICAgICBbJl0gKENvZGVPcmlnaW4gb3JpZ2luKSB7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAg
ICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gb3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKTsKICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IG9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgICAgICBmbHVzaEltcGwo
aW5saW5lQ2FsbEZyYW1lLCBhZGRGbHVzaERpcmVjdCk7CiAKQEAgLTY0MiwxMSArNjQyLDExIEBA
IHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBmbHVzaElmVGVybWluYWwoU3dpdGNoRGF0YSYgZGF0
YSkKICAgICB7Ci0gICAgICAgIGlmIChkYXRhLmZhbGxUaHJvdWdoLmJ5dGVjb2RlSW5kZXgoKSA+
IG1fY3VycmVudEluZGV4KQorICAgICAgICBpZiAoZGF0YS5mYWxsVGhyb3VnaC5ieXRlY29kZUlu
ZGV4KCkgPiBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICBpZiAoZGF0YS5jYXNlc1tpXS50YXJnZXQuYnl0ZWNvZGVJbmRleCgp
ID4gbV9jdXJyZW50SW5kZXgpCisgICAgICAgICAgICBpZiAoZGF0YS5jYXNlc1tpXS50YXJnZXQu
Ynl0ZWNvZGVJbmRleCgpID4gbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNzA5LDcgKzcwOSw3IEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICAvLyBXZSBhc3N1bWUgdGhhdCBicmFuY2hlcyBvcmlnaW5hdGlu
ZyBmcm9tIGJ5dGVjb2RlIGFsd2F5cyBoYXZlIGEgZmFsbC10aHJvdWdoLiBXZQogICAgICAgICAv
LyB1c2UgdGhpcyBhc3N1bXB0aW9uIHRvIGF2b2lkIGNoZWNraW5nIGZvciB0aGUgY3JlYXRpb24g
b2YgdGVybWluYWwgYmxvY2tzLgotICAgICAgICBBU1NFUlQoKHRha2VuID4gbV9jdXJyZW50SW5k
ZXgpIHx8IChub3RUYWtlbiA+IG1fY3VycmVudEluZGV4KSk7CisgICAgICAgIEFTU0VSVCgodGFr
ZW4gPiBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSkgfHwgKG5vdFRha2VuID4gbV9jdXJyZW50SW5k
ZXgub2Zmc2V0KCkpKTsKICAgICAgICAgQnJhbmNoRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9icmFu
Y2hEYXRhLmFkZCgpOwogICAgICAgICAqZGF0YSA9IEJyYW5jaERhdGE6OndpdGhCeXRlY29kZUlu
ZGljZXModGFrZW4sIG5vdFRha2VuKTsKICAgICAgICAgcmV0dXJuIGRhdGE7CkBAIC04MzQsMTQg
KzgzNCwxNCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gb2JqZWN0Tm9kZTsKICAgICB9CiAg
ICAgCi0gICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhv
dXRPU1JFeGl0KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICB7CiAgICAgICAgIGF1
dG8gZ2V0VmFsdWVQcm9maWxlUHJlZGljdGlvbkZyb21Gb3JDb2RlQmxvY2tBbmRCeXRlY29kZU9m
ZnNldCA9IFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IENvZGVPcmlnaW4mIGNvZGVP
cmlnaW4pCiAgICAgICAgIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb247
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgcHJlZGljdGlvbiA9IGNvZGVC
bG9jay0+dmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0KGxvY2tlciwgY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSBj
b2RlQmxvY2stPnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4KGxvY2tlciwg
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
YXV0byogZnV6emVyQWdlbnQgPSBtX3ZtLT5mdXp6ZXJBZ2VudCgpOwogICAgICAgICAgICAgaWYg
KFVOTElLRUxZKGZ1enplckFnZW50KSkKQEAgLTg2MCw3ICs4NjAsNyBAQCBwcml2YXRlOgogICAg
ICAgICAvLyBjaGFpbiBhbmQgdXNlIGl0cyBwcmVkaWN0aW9uLiBJZiB3ZSBvbmx5IGhhdmUKICAg
ICAgICAgLy8gaW5saW5lZCB0YWlsIGNhbGwgZnJhbWVzLCB3ZSB1c2UgU3BlY0Z1bGxUb3AKICAg
ICAgICAgLy8gdG8gYXZvaWQgYSBzcHVyaW91cyBPU1IgZXhpdC4KLSAgICAgICAgYXV0byBpbnN0
cnVjdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpOwogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpOwogCiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKQEAgLTg5NCw3ICs4OTQs
NyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gU3BlY05vbmU7CiAgICAgfQogCi0gICAgU3Bl
Y3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbih1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgIFNw
ZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb24oQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQog
ICAgIHsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb25X
aXRob3V0T1NSRXhpdChieXRlY29kZUluZGV4KTsKIApAQCAtOTIwLDcgKzkyMCw3IEBAIHByaXZh
dGU6CiAgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZShBcnJheTo6QWN0aW9uIGFjdGlvbikKICAg
ICB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjb2RlQmxvY2st
PmdldEFycmF5UHJvZmlsZShjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluc3Ry
dWN0aW9uKSk7CisgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGNvZGVCbG9jay0+Z2V0
QXJyYXlQcm9maWxlKGNvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbnN0cnVjdGlv
bikpOwogICAgICAgICByZXR1cm4gZ2V0QXJyYXlNb2RlKCpwcm9maWxlLCBhY3Rpb24pOwogICAg
IH0KIApAQCAtOTQzLDcgKzk0Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKIAogICAgICAgICB7Ci0gICAgICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNv
ZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpOworICAgICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmFyaXRoUHJvZmls
ZUZvckJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgpOwogICAgICAgICAgICAgaWYgKGFyaXRo
UHJvZmlsZSkgewogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAg
ICAgICAgICAgIGNhc2UgQXJpdGhBZGQ6CkBAIC05NTYsNyArOTU2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS0+ZGlkT2JzZXJ2ZUJpZ0ludCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTWF5SGF2ZUJpZ0lu
dFJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAor
CiAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZU11bDoKICAgICAgICAgICAgICAgICBjYXNlIEFy
aXRoTXVsOiB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUtPmRpZE9ic2Vy
dmVJbnQ1Mk92ZXJmbG93KCkpCkBAIC05ODcsNyArOTg3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU1heUhhdmVCaWdJbnRSZXN1bHQp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0xMDI4LDEzICsxMDI4LDEzIEBAIHByaXZh
dGU6CiAgICAgICAgIC8vIGNhcmUgYWJvdXQgd2hlbiB0aGUgb3V0Y29tZSBvZiB0aGUgZGl2aXNp
b24gaXMgbm90IGFuIGludGVnZXIsIHdoaWNoCiAgICAgICAgIC8vIGlzIHdoYXQgdGhlIHNwZWNp
YWwgZmFzdCBjYXNlIGNvdW50ZXIgdGVsbHMgdXMuCiAgICAgICAgIAotICAgICAgICBpZiAoIW1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Y291bGRUYWtlU3BlY2lhbEZhc3RDYXNl
KG1fY3VycmVudEluZGV4KSkKKyAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPmNvdWxkVGFrZVNwZWNpYWxBcml0aEZhc3RDYXNlKG1fY3VycmVudEluZGV4KSkK
ICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEl0
IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIG1ha2UgdGhpcyBtb3JlIGdyYW51bGFyLgogICAgICAgICBu
b2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvd0ludDMySW5CYXNlbGluZSB8IE5vZGVNYXlO
ZWdaZXJvSW5CYXNlbGluZSk7CiAgICAgICAgIAotICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+YXJpdGhQcm9maWxl
Rm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpOworICAgICAgICBBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+YXJpdGhQ
cm9maWxlRm9yQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleCk7CiAgICAgICAgIGlmIChhcml0
aFByb2ZpbGUtPmRpZE9ic2VydmVCaWdJbnQoKSkKICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxh
Z3MoTm9kZU1heUhhdmVCaWdJbnRSZXN1bHQpOwogCkBAIC0xMDYxLDcgKzEwNjEsNyBAQCBwcml2
YXRlOgogICAgIC8vIFRoZSBjdXJyZW50IGJsb2NrIGJlaW5nIGdlbmVyYXRlZC4KICAgICBCYXNp
Y0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKICAgICAvLyBUaGUgYnl0ZWNvZGUgaW5kZXggb2YgdGhl
IGN1cnJlbnQgaW5zdHJ1Y3Rpb24gYmVpbmcgZ2VuZXJhdGVkLgotICAgIHVuc2lnbmVkIG1fY3Vy
cmVudEluZGV4OworICAgIEJ5dGVjb2RlSW5kZXggbV9jdXJyZW50SW5kZXg7CiAgICAgLy8gVGhl
IHNlbWFudGljIG9yaWdpbiBvZiB0aGUgY3VycmVudCBub2RlIGlmIGRpZmZlcmVudCBmcm9tIHRo
ZSBjdXJyZW50IEluZGV4LgogICAgIENvZGVPcmlnaW4gbV9jdXJyZW50U2VtYW50aWNPcmlnaW47
CiAgICAgLy8gVHJ1ZSBpZiBpdCdzIE9LIHRvIE9TUiBleGl0IHJpZ2h0IG5vdy4KQEAgLTExOTEs
MTQgKzExOTEsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzQW55Rm9yY2VPU1JFeGl0cyB7
IGZhbHNlIH07CiB9OwogCi1CYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJn
ZXRhYmxlQmxvY2sodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK0Jhc2ljQmxvY2sqIEJ5dGVDb2Rl
UGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgpCiB7Ci0gICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgpOworICAgIEFTU0VS
VChieXRlY29kZUluZGV4KTsKICAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigq
bmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxz
LCAxKSk7CiAgICAgQmFzaWNCbG9jayogYmxvY2tQdHIgPSBibG9jay5wdHIoKTsKICAgICAvLyBt
X2Jsb2NrTGlua2luZ1RhcmdldHMgbXVzdCBhbHdheXMgYmUgc29ydGVkIGluIGluY3JlYXNpbmcg
b3JkZXIgb2YgYnl0ZWNvZGVCZWdpbgogICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2Nr
TGlua2luZ1RhcmdldHMuc2l6ZSgpKQotICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+
bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmxhc3QoKS0+Ynl0ZWNvZGVCZWdpbiA8IGJ5dGVjb2RlSW5k
ZXgpOworICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJn
ZXRzLmxhc3QoKS0+Ynl0ZWNvZGVCZWdpbi5vZmZzZXQoKSA8IGJ5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpOwogICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQo
YmxvY2tQdHIpOwogICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92ZShibG9jaykpOwogICAg
IHJldHVybiBibG9ja1B0cjsKQEAgLTEyMDYsMTkgKzEyMDYsMTkgQEAgQmFzaWNCbG9jayogQnl0
ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCiAKIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVudGFyZ2V0YWJsZUJs
b2NrKCkKIHsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2lj
QmxvY2soVUlOVF9NQVgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgMSkpOworICAgIFJl
ZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUlu
ZGV4KCksIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgMSkpOwogICAgIEJhc2ljQmxvY2sq
IGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAgbV9ncmFwaC5hcHBlbmRCbG9jayhXVEZNb3Zl
KGJsb2NrKSk7CiAgICAgcmV0dXJuIGJsb2NrUHRyOwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2Vy
OjptYWtlQmxvY2tUYXJnZXRhYmxlKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4KQordm9pZCBCeXRlQ29kZVBhcnNlcjo6bWFrZUJsb2NrVGFyZ2V0YWJsZShCYXNpY0Js
b2NrKiBibG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewotICAgIFJFTEVBU0Vf
QVNTRVJUKGJsb2NrLT5ieXRlY29kZUJlZ2luID09IFVJTlRfTUFYKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCghYmxvY2stPmJ5dGVjb2RlQmVnaW4pOwogICAgIGJsb2NrLT5ieXRlY29kZUJlZ2luID0g
Ynl0ZWNvZGVJbmRleDsKICAgICAvLyBtX2Jsb2NrTGlua2luZ1RhcmdldHMgbXVzdCBhbHdheXMg
YmUgc29ydGVkIGluIGluY3JlYXNpbmcgb3JkZXIgb2YgYnl0ZWNvZGVCZWdpbgogICAgIGlmICht
X2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuc2l6ZSgpKQotICAgICAgICBB
U1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmxhc3QoKS0+Ynl0
ZWNvZGVCZWdpbiA8IGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFj
a1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmxhc3QoKS0+Ynl0ZWNvZGVCZWdpbi5vZmZzZXQo
KSA8IGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmxv
Y2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQoYmxvY2spOwogfQogCkBAIC0xMjc4LDcgKzEyNzgsNyBA
QCBCeXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwo
CiAKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCA9IHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgYXV0byBvcHRpbWl6YXRp
b25SZXN1bHQgPSBoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3Rh
dHVzLCByZWdpc3Rlck9mZnNldCwgdGhpc0FyZ3VtZW50LAotICAgICAgICAgICAgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIG1fY3VycmVudEluZGV4ICsgaW5zdHJ1Y3Rpb25TaXplLCBvcCwg
a2luZCwgcHJlZGljdGlvbik7CisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGluc3RydWN0aW9uU2l6
ZSksIG9wLCBraW5kLCBwcmVkaWN0aW9uKTsKICAgICAgICAgaWYgKG9wdGltaXphdGlvblJlc3Vs
dCA9PSBDYWxsT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWRUb0p1bXApCiAgICAgICAgICAg
ICByZXR1cm4gVGVybWluYWw7CiAgICAgICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQgPT0gQ2Fs
bE9wdGltaXphdGlvblJlc3VsdDo6SW5saW5lZCkgewpAQCAtMTQ1NywxNyArMTQ1NywxNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVSZWN1cnNpdmVUYWlsQ2FsbChOb2RlKiBjYWxsVGFy
Z2V0Tm9kZSwgQ2FsbFZhcmlhbnQgYwogICAgICAgICAgICAgc2V0RGlyZWN0KHN0YWNrRW50cnkt
PnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSksIHVuZGVmaW5lZCwgTm9y
bWFsU2V0KTsKIAogICAgICAgICAvLyBXZSB3YW50IHRvIGVtaXQgdGhlIFNldExvY2FscyB3aXRo
IGFuIGV4aXQgb3JpZ2luIHRoYXQgcG9pbnRzIHRvIHRoZSBwbGFjZSB3ZSBhcmUganVtcGluZyB0
by4KLSAgICAgICAgdW5zaWduZWQgb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKKyAgICAgICAg
Qnl0ZWNvZGVJbmRleCBvbGRJbmRleCA9IG1fY3VycmVudEluZGV4OwogICAgICAgICBhdXRvIG9s
ZFN0YWNrVG9wID0gbV9pbmxpbmVTdGFja1RvcDsKICAgICAgICAgbV9pbmxpbmVTdGFja1RvcCA9
IHN0YWNrRW50cnk7Ci0gICAgICAgIG1fY3VycmVudEluZGV4ID0gb3Bjb2RlTGVuZ3Roc1tvcF9l
bnRlcl07CisgICAgICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNvZGVJbmRleChvcGNvZGVMZW5n
dGhzW29wX2VudGVyXSk7CiAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICAgICAgcHJvY2Vz
c1NldExvY2FsUXVldWUoKTsKICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBvbGRJbmRleDsKICAg
ICAgICAgbV9pbmxpbmVTdGFja1RvcCA9IG9sZFN0YWNrVG9wOwogICAgICAgICBtX2V4aXRPSyA9
IGZhbHNlOwogCi0gICAgICAgIEJhc2ljQmxvY2sqKiBlbnRyeUJsb2NrUHRyID0gdHJ5QmluYXJ5
U2VhcmNoPEJhc2ljQmxvY2sqLCB1bnNpZ25lZD4oc3RhY2tFbnRyeS0+bV9ibG9ja0xpbmtpbmdU
YXJnZXRzLCBzdGFja0VudHJ5LT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuc2l6ZSgpLCBvcGNvZGVM
ZW5ndGhzW29wX2VudGVyXSwgZ2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKTsKKyAgICAgICAgQmFz
aWNCbG9jayoqIGVudHJ5QmxvY2tQdHIgPSB0cnlCaW5hcnlTZWFyY2g8QmFzaWNCbG9jayosIEJ5
dGVjb2RlSW5kZXg+KHN0YWNrRW50cnktPm1fYmxvY2tMaW5raW5nVGFyZ2V0cywgc3RhY2tFbnRy
eS0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLnNpemUoKSwgQnl0ZWNvZGVJbmRleChvcGNvZGVMZW5n
dGhzW29wX2VudGVyXSksIGdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGVudHJ5QmxvY2tQdHIpOwogICAgICAgICBhZGRKdW1wVG8oKmVudHJ5QmxvY2tQ
dHIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE2MjUsOCArMTYyNSw4IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQsIENhCiAgICAgICAgIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1l
U3RhcnQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBraW5kLCBjb250aW51YXRpb25CbG9j
ayk7CiAKICAgICAvLyBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgaW5saW5pbmcgcmVhbGx5IGhh
cHBlbnMuCi0gICAgdW5zaWduZWQgb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKLSAgICBtX2N1
cnJlbnRJbmRleCA9IDA7CisgICAgQnl0ZWNvZGVJbmRleCBvbGRJbmRleCA9IG1fY3VycmVudElu
ZGV4OworICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKIAogICAgIHN3aXRj
aCAoa2luZCkgewogICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsOgpAQCAtMTc2
MSw3ICsxNzYxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2EKICAgICBtX2N1cnJlbnRJbnN0
cnVjdGlvbiA9IHNhdmVkQ3VycmVudEluc3RydWN0aW9uOwogfQogCi1CeXRlQ29kZVBhcnNlcjo6
Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbFZhcmlhbnQo
Tm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhbGxWYXJpYW50
IGNhbGxlZSwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50
LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElu
bGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNp
Z25lZCYgaW5saW5pbmdCYWxhbmNlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb25CbG9jaywgYm9v
bCBuZWVkc1RvQ2hlY2tDYWxsZWUpCitCeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJl
c3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbFZhcmlhbnQoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhbGxWYXJpYW50IGNhbGxlZSwgaW50IHJlZ2lz
dGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIEJ5dGVjb2RlSW5kZXggbmV4dEluZGV4LCBJbmxpbmVDYWxsRnJhbWU6
OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5n
QmFsYW5jZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uQmxvY2ssIGJvb2wgbmVlZHNUb0NoZWNr
Q2FsbGVlKQogewogICAgIFZFUkJPU0VfTE9HKCIgICAgQ29uc2lkZXJpbmcgY2FsbGVlICIsIGNh
bGxlZSwgIlxuIik7CiAKQEAgLTE3ODksNyArMTc4OSw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpDYWxs
T3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsVmFyaWFudChOb2Rl
KiBjCiAgICAgICAgIGVtaXRBcmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgICAgIGlubGluaW5nQmFsYW5jZS0tOwogICAgICAg
ICBpZiAoY29udGludWF0aW9uQmxvY2spIHsKLSAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0g
bmV4dE9mZnNldDsKKyAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gbmV4dEluZGV4OwogICAg
ICAgICAgICAgbV9leGl0T0sgPSB0cnVlOwogICAgICAgICAgICAgcHJvY2Vzc1NldExvY2FsUXVl
dWUoKTsKICAgICAgICAgICAgIGFkZEp1bXBUbyhjb250aW51YXRpb25CbG9jayk7CkBAIC0xOTcy
LDcgKzE5NzIsNyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAgTm9kZSogY2FsbFRhcmdldE5vZGUsIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1
cywKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQs
CiAgICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAotICAgIHVuc2lnbmVkIG5leHRP
ZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgQnl0ZWNvZGVJbmRleCBuZXh0SW5kZXgsIE5vZGVU
eXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24pCiB7CiAgICAgVkVSQk9TRV9MT0coIkhhbmRsaW5nIGlubGluaW5nLi4uXG5TdGFj
azogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CiAgICAgCkBAIC0xOTg1LDcgKzE5ODUs
NyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW5saW5pbmcoCiAgICAgaWYgKCFjYWxsTGlua1N0YXR1cy5jb3VsZFRha2VTbG93
UGF0aCgpICYmIGNhbGxMaW5rU3RhdHVzLnNpemUoKSA9PSAxKSB7CiAgICAgICAgIHJldHVybiBo
YW5kbGVDYWxsVmFyaWFudCgKICAgICAgICAgICAgIGNhbGxUYXJnZXROb2RlLCByZXN1bHQsIGNh
bGxMaW5rU3RhdHVzWzBdLCByZWdpc3Rlck9mZnNldCwgdGhpc0FyZ3VtZW50LAotICAgICAgICAg
ICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQsIHByZWRpY3Rp
b24sIGlubGluaW5nQmFsYW5jZSwgbnVsbHB0ciwgdHJ1ZSk7CisgICAgICAgICAgICBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgbmV4dEluZGV4LCBraW5kLCBwcmVkaWN0aW9uLCBpbmxpbmlu
Z0JhbGFuY2UsIG51bGxwdHIsIHRydWUpOwogICAgIH0KIAogICAgIC8vIFdlIG5lZWQgdG8gY3Jl
YXRlIHNvbWUga2luZCBvZiBzd2l0Y2ggb3ZlciBjYWxsZWUuIEZvciBub3cgd2Ugb25seSBkbyB0
aGlzIGlmIHdlIGJlbGlldmUgdGhhdApAQCAtMjA2MSw5ICsyMDYxLDkgQEAgQnl0ZUNvZGVQYXJz
ZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5n
KAogICAgIAogICAgIFZFUkJPU0VfTE9HKCJBYm91dCB0byBsb29wIG92ZXIgZnVuY3Rpb25zIGF0
ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICIuXG4iKTsKIAotICAgIHVuc2lnbmVkIG9sZE9mZnNl
dCA9IG1fY3VycmVudEluZGV4OworICAgIEJ5dGVjb2RlSW5kZXggb2xkSW5kZXggPSBtX2N1cnJl
bnRJbmRleDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FsbExpbmtTdGF0dXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgbV9jdXJyZW50SW5kZXggPSBvbGRPZmZzZXQ7CisgICAgICAg
IG1fY3VycmVudEluZGV4ID0gb2xkSW5kZXg7CiAgICAgICAgIEJhc2ljQmxvY2sqIGNhbGxlZUVu
dHJ5QmxvY2sgPSBhbGxvY2F0ZVVudGFyZ2V0YWJsZUJsb2NrKCk7CiAgICAgICAgIG1fY3VycmVu
dEJsb2NrID0gY2FsbGVlRW50cnlCbG9jazsKICAgICAgICAgcHJlcGFyZVRvUGFyc2VCbG9jaygp
OwpAQCAtMjA3NSw3ICsyMDc1LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25S
ZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgICAgICAKICAgICAgICAg
YXV0byBpbmxpbmluZ1Jlc3VsdCA9IGhhbmRsZUNhbGxWYXJpYW50KAogICAgICAgICAgICAgbXlD
YWxsVGFyZ2V0Tm9kZSwgcmVzdWx0LCBjYWxsTGlua1N0YXR1c1tpXSwgcmVnaXN0ZXJPZmZzZXQs
Ci0gICAgICAgICAgICB0aGlzQXJndW1lbnQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBu
ZXh0T2Zmc2V0LCBraW5kLCBwcmVkaWN0aW9uLAorICAgICAgICAgICAgdGhpc0FyZ3VtZW50LCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dEluZGV4LCBraW5kLCBwcmVkaWN0aW9uLAog
ICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlLCBjb250aW51YXRpb25CbG9jaywgZmFsc2UpOwog
ICAgICAgICAKICAgICAgICAgaWYgKGlubGluaW5nUmVzdWx0ID09IENhbGxPcHRpbWl6YXRpb25S
ZXN1bHQ6OkRpZE5vdGhpbmcpIHsKQEAgLTIxMDQsNyArMjEwNCw3IEBAIEJ5dGVDb2RlUGFyc2Vy
OjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygK
IAogICAgIC8vIFNsb3cgcGF0aCBibG9jawogICAgIG1fY3VycmVudEJsb2NrID0gYWxsb2NhdGVV
bnRhcmdldGFibGVCbG9jaygpOwotICAgIG1fY3VycmVudEluZGV4ID0gb2xkT2Zmc2V0OworICAg
IG1fY3VycmVudEluZGV4ID0gb2xkSW5kZXg7CiAgICAgbV9leGl0T0sgPSB0cnVlOwogICAgIGRh
dGEuZmFsbFRocm91Z2ggPSBCcmFuY2hUYXJnZXQobV9jdXJyZW50QmxvY2spOwogICAgIHByZXBh
cmVUb1BhcnNlQmxvY2soKTsKQEAgLTIxMjQsNyArMjEyNCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpD
YWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAg
ICAgICAgVkVSQk9TRV9MT0coImNvdWxkVGFrZVNsb3dQYXRoIHdhcyBmYWxzZVxuIik7CiAgICAg
fQogCi0gICAgbV9jdXJyZW50SW5kZXggPSBuZXh0T2Zmc2V0OworICAgIG1fY3VycmVudEluZGV4
ID0gbmV4dEluZGV4OwogICAgIG1fZXhpdE9LID0gdHJ1ZTsgLy8gT3JpZ2luIGNoYW5nZWQsIHNv
IGl0J3MgZmluZSB0byBleGl0IGFnYWluLgogICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CiAK
QEAgLTIxMzYsNyArMjEzNiw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVz
dWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKIAogICAgIHByZXBhcmVUb1BhcnNl
QmxvY2soKTsKICAgICAKLSAgICBtX2N1cnJlbnRJbmRleCA9IG9sZE9mZnNldDsKKyAgICBtX2N1
cnJlbnRJbmRleCA9IG9sZEluZGV4OwogICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9u
QmxvY2s7CiAgICAgbV9leGl0T0sgPSB0cnVlOwogICAgIApAQCAtNDY5MywxNCArNDY5MywxNCBA
QCBzdGF0aWMgdWludDY0X3QgbWFrZUR5bmFtaWNWYXJPcEluZm8odW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgdW5zaWduZWQgZ2V0UHV0SQogLy8gRG9lc24ndCBhbGxvdyB1c2luZyBgY29udGlu
dWVgLgogI2RlZmluZSBORVhUX09QQ09ERShuYW1lKSBcCiAgICAgaWYgKHRydWUpIHsgXAotICAg
ICAgICBtX2N1cnJlbnRJbmRleCArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsgXAorICAg
ICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0
KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IFwKICAgICAgICAgZ290byBXVEZfQ09O
Q0FUKE5FWFRfT1BDT0RFXywgX19MSU5FX18pOyAvKiBOZWVkIGEgdW5pcXVlIGxhYmVsOiB1c2Fi
bGUgbW9yZSB0aGFuIG9uY2UgcGVyIGZ1bmN0aW9uLiAqLyBcCiAgICAgfSBlbHNlIFwKICAgICAg
ICAgV1RGX0NPTkNBVChORVhUX09QQ09ERV8sIF9fTElORV9fKTogXAogICAgIGNvbnRpbnVlCiAK
ICNkZWZpbmUgTEFTVF9PUENPREVfTElOS0VEKG5hbWUpIGRvIHsgXAotICAgICAgICBtX2N1cnJl
bnRJbmRleCArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsgXAorICAgICAgICBtX2N1cnJl
bnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IFwKICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsgXAogICAg
ICAgICByZXR1cm47IFwKICAgICB9IHdoaWxlIChmYWxzZSkKQEAgLTQ3MjQsNyArNDcyNCw3IEBA
IHN0YXRpYyB1aW50NjRfdCBtYWtlRHluYW1pY1Zhck9wSW5mbyh1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCB1bnNpZ25lZCBnZXRQdXRJCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkIGxpbWl0KQogewogICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1faW5saW5lU3Rh
Y2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKLSAgICB1bnNpZ25lZCBibG9ja0Jl
Z2luID0gbV9jdXJyZW50SW5kZXg7CisgICAgQnl0ZWNvZGVJbmRleCBibG9ja0JlZ2luID0gbV9j
dXJyZW50SW5kZXg7CiAKICAgICAvLyBJZiB3ZSBhcmUgdGhlIGZpcnN0IGJhc2ljIGJsb2NrLCBp
bnRyb2R1Y2UgbWFya2VycyBmb3IgYXJndW1lbnRzLiBUaGlzIGFsbG93cwogICAgIC8vIHVzIHRv
IHRyYWNrIGlmIGEgdXNlIG9mIGFuIGFyZ3VtZW50IG1heSB1c2UgdGhlIGFjdHVhbCBhcmd1bWVu
dCBwYXNzZWQsIGFzCkBAIC00NzY4LDcgKzQ3NjgsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgp
OwogICAgICAgICAKICAgICAgICAgLy8gRG9uJ3QgZXh0ZW5kIG92ZXIganVtcCBkZXN0aW5hdGlv
bnMuCi0gICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA9PSBsaW1pdCkgeworICAgICAgICBpZiAo
bV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgPT0gbGltaXQpIHsKICAgICAgICAgICAgIC8vIE9yZGlu
YXJpbHkgd2Ugd2FudCB0byBwbGFudCBhIGp1bXAuIEJ1dCByZWZ1c2UgdG8gZG8gdGhpcyBpZiB0
aGUgYmxvY2sgaXMKICAgICAgICAgICAgIC8vIGVtcHR5LiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNl
IGZvciBpbmxpbmluZywgd2hpY2ggbWlnaHQgb3RoZXJ3aXNlIGNyZWF0ZQogICAgICAgICAgICAg
Ly8gc29tZSBlbXB0eSBibG9ja3MgaW4gc29tZSBjYXNlcy4gV2hlbiBwYXJzZUJsb2NrKCkgcmV0
dXJucyB3aXRoIGFuIGVtcHR5CkBAIC00Nzc4LDcgKzQ3NzgsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgLy8gdG8gYmUgdHJ1
ZS4KIAogICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRCbG9jay0+aXNFbXB0eSgpKQotICAgICAg
ICAgICAgICAgIGFkZEp1bXBUbyhtX2N1cnJlbnRJbmRleCk7CisgICAgICAgICAgICAgICAgYWRk
SnVtcFRvKG1fY3VycmVudEluZGV4Lm9mZnNldCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTU4MDMsNyArNTgwMyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBBU1NFUlQoIW1fY3Vy
cmVudEJsb2NrLT50ZXJtaW5hbCgpKTsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm1wPigpOwogICAgICAgICAgICAgaW50IHJlbGF0aXZlT2Zm
c2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICAgICAgICAgIGFk
ZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKTsK
KyAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVudEluZGV4Lm9mZnNl
dCgpICsgcmVsYXRpdmVPZmZzZXQpKTsKICAgICAgICAgICAgIGlmIChyZWxhdGl2ZU9mZnNldCA8
PSAwKQogICAgICAgICAgICAgICAgIGZsdXNoRm9yVGVybWluYWwoKTsKICAgICAgICAgICAgIExB
U1RfT1BDT0RFKG9wX2ptcCk7CkBAIC01ODEzLDcgKzU4MTMsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKICAgICAgICAgICAgIHVuc2ln
bmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
ICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGdldChieXRlY29kZS5tX2NvbmRpdGlvbik7
Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJy
ZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1
Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFu
Y2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVP
ZmZzZXQsIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2p0cnVlKTsKICAg
ICAgICAgfQogCkBAIC01ODIxLDcgKzU4MjEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxh
dGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgICAg
ICAgICBOb2RlKiBjb25kaXRpb24gPSBnZXQoYnl0ZWNvZGUubV9jb25kaXRpb24pOwotICAgICAg
ICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4
ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVP
ZmZzZXQpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcElu
Zm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlv
bi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0KSksIGNv
bmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qZmFsc2UpOwogICAgICAgICB9
CiAKQEAgLTU4MzEsNyArNTgzMSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5t
X3ZhbHVlKTsKICAgICAgICAgICAgIE5vZGUqIG51bGxDb25zdGFudCA9IGFkZFRvR3JhcGgoSlND
b25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROdWxsKSk7CiAgICAgICAgICAgICBOb2RlKiBjb25k
aXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcSwgdmFsdWUsIG51bGxDb25zdGFudCk7Ci0gICAg
ICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5k
ZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24t
PnNpemUoKSkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9w
SW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQs
IG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwg
Y29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2plcV9udWxsKTsKICAgICAg
ICAgfQogCkBAIC01ODQxLDcgKzU4NDEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNv
ZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBOb2RlKiBudWxsQ29uc3RhbnQgPSBhZGRUb0dyYXBo
KEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TnVsbCkpOwogICAgICAgICAgICAgTm9kZSog
Y29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBudWxsQ29uc3RhbnQpOwot
ICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVu
dEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4ICsgcmVs
YXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNo
LCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0
cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0
KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmVxX251bGwpOwog
ICAgICAgICB9CiAKQEAgLTU4NTAsNyArNTg1MCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9m
ZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgICAgICAgICBO
b2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIE5vZGUqIGNv
bmRpdGlvbiA9IGFkZFRvR3JhcGgoSXNVbmRlZmluZWRPck51bGwsIHZhbHVlKTsKLSAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCAr
IHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6
ZSgpKSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZv
KGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCwgbV9j
dXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25k
aXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfanVuZGVmaW5lZF9vcl9udWxsKTsK
ICAgICAgICAgfQogCkBAIC01ODU5LDcgKzU4NTksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVP
ZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgICAgICAgICAg
Tm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBOb2RlKiBj
b25kaXRpb24gPSBhZGRUb0dyYXBoKElzVW5kZWZpbmVkT3JOdWxsLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgg
KyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9m
ZnNldCkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5m
byhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9u
LT5zaXplKCksIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQpKSwgY29u
ZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pudW5kZWZpbmVkX29yX251bGwp
OwogICAgICAgICB9CiAKQEAgLTU4NjksNyArNTg2OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQo
Ynl0ZWNvZGUubV9saHMpOwogICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1f
cmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxl
c3MsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJh
bmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCAr
IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBh
ZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0
KCkgKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5z
dHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUo
b3Bfamxlc3MpOwogICAgICAgICB9CiAKQEAgLTU4NzksNyArNTg3OSw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiBv
cDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOwogICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5
dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgo
Q29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gs
IE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3Vy
cmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKKyAg
ICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJ
bmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSAr
IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBM
QVNUX09QQ09ERShvcF9qbGVzc2VxKTsKICAgICAgICAgfQogCkBAIC01ODg5LDcgKzU4ODksNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAg
ICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5vZGUq
IG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24g
PSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRU
b0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2
ZU9mZnNldCwgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBj
b25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hE
YXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudElu
ZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsK
ICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pncmVhdGVyKTsKICAgICAgICAgfQogCkBAIC01
ODk5LDcgKzU4OTksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
IGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAg
ICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBO
b2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyRXEsIG9wMSwgb3AyKTsK
LSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJl
bnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVj
dGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5j
aCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9m
ZnNldCwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfamdyZWF0ZXJlcSk7
CiAgICAgICAgIH0KIApAQCAtNTkwOSw3ICs1OTA5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChi
eXRlY29kZS5tX2xocyk7CiAgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9y
aHMpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEs
IG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNo
RGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIGN1
cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRU
b0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkg
KyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1
Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bf
amVxKTsKICAgICAgICAgfQogCkBAIC01OTE5LDcgKzU5MTksNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0g
Z2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29k
ZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBh
cmVTdHJpY3RFcSwgb3AxLCBvcDIpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9w
SW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVu
dEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKKyAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRl
eC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1
cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9qc3RyaWN0ZXEpOwogICAgICAgICB9CiAKQEAgLTU5MjksNyArNTkyOSw3IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAg
ICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOwogICAgICAgICAgICAgTm9kZSog
b3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9
IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3MsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0
cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRp
dGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEo
bV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9j
dXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAg
ICAgICAgICAgTEFTVF9PUENPREUob3Bfam5sZXNzKTsKICAgICAgICAgfQogCkBAIC01OTM5LDcg
KzU5MzksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAg
ICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBj
b25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzRXEsIG9wMSwgb3AyKTsKLSAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCAr
IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zm
c2V0KSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZv
KGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24t
PnNpemUoKSwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCkpLCBjb25k
aXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5sZXNzZXEpOwogICAgICAgICB9
CiAKQEAgLTU5NDksNyArNTk0OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9s
aHMpOwogICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAg
ICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXIsIG9wMSwg
b3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YSht
X2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRl
eCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBo
KEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2
ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5ncmVh
dGVyKTsKICAgICAgICAgfQogCkBAIC01OTU5LDcgKzU5NTksNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0g
Z2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29k
ZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBh
cmVHcmVhdGVyRXEsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBP
cEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6
ZSgpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CisgICAg
ICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5k
ZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXgu
b2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFT
VF9PUENPREUob3Bfam5ncmVhdGVyZXEpOwogICAgICAgICB9CiAKQEAgLTU5NjksNyArNTk2OSw3
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAg
ICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOwogICAgICAgICAgICAgTm9k
ZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlv
biA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dy
YXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5z
dHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25k
aXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRh
KG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1f
Y3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAg
ICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2puZXEpOwogICAgICAgICB9CiAKQEAgLTU5NzksNyAr
NTk3OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQp
CiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOwogICAgICAgICAg
ICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNv
bmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZVN0cmljdEVxLCBvcDEsIG9wMik7Ci0gICAgICAg
ICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgg
KyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9m
ZnNldCkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5m
byhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9u
LT5zaXplKCksIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQpKSwgY29u
ZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2puc3RyaWN0ZXEpOwogICAgICAg
ICB9CiAKQEAgLTU5ODksNyArNTk4OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUu
bV9saHMpOwogICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAg
ICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUJlbG93LCBvcDEs
IG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEo
bV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFw
aChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVs
YXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9u
LT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2piZWxv
dyk7CiAgICAgICAgIH0KIApAQCAtNTk5OSw3ICs1OTk5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChieXRlY29kZS5tX2xocyk7CiAgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUu
bV9yaHMpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJl
QmVsb3dFcSwgb3AxLCBvcDIpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5m
byhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudElu
ZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKKyAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5v
ZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09Q
Q09ERShvcF9qYmVsb3dlcSk7CiAgICAgICAgIH0KIApAQCAtNjAwOCwxMiArNjAwOCwxMiBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAg
ICAgU3dpdGNoRGF0YSYgZGF0YSA9ICptX2dyYXBoLm1fc3dpdGNoRGF0YS5hZGQoKTsKICAgICAg
ICAgICAgIGRhdGEua2luZCA9IFN3aXRjaEltbTsKICAgICAgICAgICAgIGRhdGEuc3dpdGNoVGFi
bGVJbmRleCA9IG1faW5saW5lU3RhY2tUb3AtPm1fc3dpdGNoUmVtYXBbYnl0ZWNvZGUubV90YWJs
ZUluZGV4XTsKLSAgICAgICAgICAgIGRhdGEuZmFsbFRocm91Z2guc2V0Qnl0ZWNvZGVJbmRleCht
X2N1cnJlbnRJbmRleCArIGp1bXBUYXJnZXQoYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KSk7Cisg
ICAgICAgICAgICBkYXRhLmZhbGxUaHJvdWdoLnNldEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5k
ZXgub2Zmc2V0KCkgKyBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCkpOwogICAg
ICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1w
VGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB0YWJsZS5icmFuY2hPZmZzZXRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKCF0YWJsZS5icmFuY2hPZmZzZXRzW2ldKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBtX2N1cnJlbnRJbmRl
eCArIHRhYmxlLmJyYW5jaE9mZnNldHNbaV07CisgICAgICAgICAgICAgICAgdW5zaWduZWQgdGFy
Z2V0ID0gbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyB0YWJsZS5icmFuY2hPZmZzZXRzW2ldOwog
ICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gZGF0YS5mYWxsVGhyb3VnaC5ieXRlY29kZUlu
ZGV4KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGRh
dGEuY2FzZXMuYXBwZW5kKFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KG1fZ3JhcGguZnJl
ZXplKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KHRhYmxlLm1pbiArIGkpKSksIHRhcmdl
dCkpOwpAQCAtNjAyOCwxMiArNjAyOCwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgU3dpdGNoRGF0YSYgZGF0YSA9ICptX2dy
YXBoLm1fc3dpdGNoRGF0YS5hZGQoKTsKICAgICAgICAgICAgIGRhdGEua2luZCA9IFN3aXRjaENo
YXI7CiAgICAgICAgICAgICBkYXRhLnN3aXRjaFRhYmxlSW5kZXggPSBtX2lubGluZVN0YWNrVG9w
LT5tX3N3aXRjaFJlbWFwW2J5dGVjb2RlLm1fdGFibGVJbmRleF07Ci0gICAgICAgICAgICBkYXRh
LmZhbGxUaHJvdWdoLnNldEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXggKyBqdW1wVGFyZ2V0
KGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCkpOworICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3Vn
aC5zZXRCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsganVtcFRhcmdldChi
eXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpKTsKICAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYg
dGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRl
eCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUuYnJhbmNoT2Zm
c2V0cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIGlmICghdGFibGUuYnJhbmNoT2Zm
c2V0c1tpXSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
dW5zaWduZWQgdGFyZ2V0ID0gbV9jdXJyZW50SW5kZXggKyB0YWJsZS5icmFuY2hPZmZzZXRzW2ld
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4Lm9mZnNl
dCgpICsgdGFibGUuYnJhbmNoT2Zmc2V0c1tpXTsKICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0
ID09IGRhdGEuZmFsbFRocm91Z2guYnl0ZWNvZGVJbmRleCgpKQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZCgKQEAgLTYwNDks
MTIgKzYwNDksMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBs
aW1pdCkKICAgICAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N3aXRjaERh
dGEuYWRkKCk7CiAgICAgICAgICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hTdHJpbmc7CiAgICAgICAg
ICAgICBkYXRhLnN3aXRjaFRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7Ci0gICAg
ICAgICAgICBkYXRhLmZhbGxUaHJvdWdoLnNldEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgg
KyBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCkpOworICAgICAgICAgICAgZGF0
YS5mYWxsVGhyb3VnaC5zZXRCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsg
anVtcFRhcmdldChieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpKTsKICAgICAgICAgICAgIFN0cmlu
Z0p1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRh
dGEuc3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmlu
Z09mZnNldFRhYmxlOjppdGVyYXRvciBpdGVyOwogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxl
OjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUub2Zmc2V0VGFibGUuZW5k
KCk7CiAgICAgICAgICAgICBmb3IgKGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJsZS5iZWdpbigpOyBp
dGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
bV9jdXJyZW50SW5kZXggKyBpdGVyLT52YWx1ZS5icmFuY2hPZmZzZXQ7CisgICAgICAgICAgICAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBpdGVyLT52YWx1
ZS5icmFuY2hPZmZzZXQ7CiAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxU
aHJvdWdoLmJ5dGVjb2RlSW5kZXgoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoCkBAIC02MDc5LDcgKzYwNzksNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAg
ICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUuaXNWYWxpZCgpKQogICAgICAg
ICAgICAgICAgIHNldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLCBnZXQo
Ynl0ZWNvZGUubV92YWx1ZSksIEltbWVkaWF0ZVNldFdpdGhGbHVzaCk7CiAKLSAgICAgICAgICAg
IGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9jb250aW51YXRpb25CbG9jayAmJiBtX2N1cnJlbnRJ
bmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpICE9IG1faW5saW5lU3RhY2tUb3AtPm1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmICghbV9p
bmxpbmVTdGFja1RvcC0+bV9jb250aW51YXRpb25CbG9jayAmJiBtX2N1cnJlbnRJbmRleC5vZmZz
ZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpICE9IG1faW5saW5lU3RhY2tUb3AtPm1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAvLyBU
aGlzIGlzIGFuIGVhcmx5IHJldHVybiBmcm9tIGFuIGlubGluZWQgZnVuY3Rpb24gYW5kIHdlIGRv
IG5vdCBoYXZlIGEgY29udGludWF0aW9uIGJsb2NrLCBzbyB3ZSBtdXN0IGFsbG9jYXRlIG9uZS4K
ICAgICAgICAgICAgICAgICAvLyBJdCBpcyB1bnRhcmdldGFibGUsIGJlY2F1c2Ugd2UgZG8gbm90
IGtub3cgdGhlIGFwcHJvcHJpYXRlIGluZGV4LgogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMg
YmxvY2sgdHVybnMgb3V0IHRvIGJlIGEganVtcCB0YXJnZXQsIHBhcnNlQ29kZUJsb2NrIHdpbGwg
Zml4IGl0cyBieXRlY29kZUluZGV4IGJlZm9yZSBwdXR0aW5nIGl0IGluIG1fYmxvY2tMaW5raW5n
VGFyZ2V0cwpAQCAtNjIwNyw3ICs2MjA3LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICBBcmd1bWVudHNWZWN0b3ImIGVu
dHJ5cG9pbnRBcmd1bWVudHMgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICAg
ICAgICAgIGVudHJ5cG9pbnRBcmd1bWVudHMucmVzaXplKG1fbnVtQXJndW1lbnRzKTsKIAotICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGV4aXRCeXRlY29kZUluZGV4ID0gbV9jdXJyZW50SW5kZXgg
KyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICAgICAgICAgICAgICBCeXRlY29kZUlu
ZGV4IGV4aXRCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZz
ZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKIAogICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGFyZ3VtZW50UHJlZGljdGlvbnMu
c2l6ZSgpOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoYXJndW1lbnQpKTsKQEAgLTYzMTYsNyArNjMxNiw3IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiBjaGls
ZCA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIGlmIChieXRlY29kZS5tZXRh
ZGF0YShjb2RlQmxvY2spLm1faGFzSnVtcGVkKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogY29u
ZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXFQdHIsIE9wSW5mbyhmcm96ZW5Qb2ludGVyKSwg
Y2hpbGQpOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNo
RGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJl
bnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNl
dCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4Lm9mZnNldCgp
ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICBMQVNUX09Q
Q09ERShvcF9qbmVxX3B0cik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhZGRUb0dyYXBo
KENoZWNrQ2VsbCwgT3BJbmZvKGZyb3plblBvaW50ZXIpLCBjaGlsZCk7CkBAIC03MTM1LDIxICs3
MTM1LDIxIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2NrKiBibG9j
aywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUCiAgICAgCiAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgY2FzZSBKdW1wOgotICAgICAgICBub2RlLT50YXJnZXRCbG9jaygpID0g
YmxvY2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnRhcmdldEJ5dGVj
b2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKTsKKyAgICAgICAgbm9kZS0+dGFyZ2V0QmxvY2soKSA9
IGJsb2NrRm9yQnl0ZWNvZGVJbmRleChwb3NzaWJsZVRhcmdldHMsIEJ5dGVjb2RlSW5kZXgobm9k
ZS0+dGFyZ2V0Qnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAogICAgIGNhc2UgQnJhbmNoOiB7CiAgICAgICAgIEJyYW5jaERhdGEqIGRhdGEg
PSBub2RlLT5icmFuY2hEYXRhKCk7Ci0gICAgICAgIGRhdGEtPnRha2VuLmJsb2NrID0gYmxvY2tG
b3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIGRhdGEtPnRha2VuQnl0ZWNvZGVJbmRl
eCgpKTsKLSAgICAgICAgZGF0YS0+bm90VGFrZW4uYmxvY2sgPSBibG9ja0ZvckJ5dGVjb2RlT2Zm
c2V0KHBvc3NpYmxlVGFyZ2V0cywgZGF0YS0+bm90VGFrZW5CeXRlY29kZUluZGV4KCkpOworICAg
ICAgICBkYXRhLT50YWtlbi5ibG9jayA9IGJsb2NrRm9yQnl0ZWNvZGVJbmRleChwb3NzaWJsZVRh
cmdldHMsIEJ5dGVjb2RlSW5kZXgoZGF0YS0+dGFrZW5CeXRlY29kZUluZGV4KCkpKTsKKyAgICAg
ICAgZGF0YS0+bm90VGFrZW4uYmxvY2sgPSBibG9ja0ZvckJ5dGVjb2RlSW5kZXgocG9zc2libGVU
YXJnZXRzLCBCeXRlY29kZUluZGV4KGRhdGEtPm5vdFRha2VuQnl0ZWNvZGVJbmRleCgpKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTd2l0Y2g6IHsKICAgICAg
ICAgU3dpdGNoRGF0YSogZGF0YSA9IG5vZGUtPnN3aXRjaERhdGEoKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbm9kZS0+c3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCk7IGktLTspCi0gICAg
ICAgICAgICBkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2sgPSBibG9ja0ZvckJ5dGVjb2RlT2Zm
c2V0KHBvc3NpYmxlVGFyZ2V0cywgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJ5dGVjb2RlSW5kZXgo
KSk7Ci0gICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrID0gYmxvY2tGb3JCeXRlY29kZU9m
ZnNldChwb3NzaWJsZVRhcmdldHMsIGRhdGEtPmZhbGxUaHJvdWdoLmJ5dGVjb2RlSW5kZXgoKSk7
CisgICAgICAgICAgICBkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2sgPSBibG9ja0ZvckJ5dGVj
b2RlSW5kZXgocG9zc2libGVUYXJnZXRzLCBCeXRlY29kZUluZGV4KGRhdGEtPmNhc2VzW2ldLnRh
cmdldC5ieXRlY29kZUluZGV4KCkpKTsKKyAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2sg
PSBibG9ja0ZvckJ5dGVjb2RlSW5kZXgocG9zc2libGVUYXJnZXRzLCBCeXRlY29kZUluZGV4KGRh
dGEtPmZhbGxUaHJvdWdoLmJ5dGVjb2RlSW5kZXgoKSkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIApAQCAtNzMyMyw3ICs3MzIzLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VDb2RlQmxvY2soKQogICAgIGZvciAodW5zaWduZWQganVtcFRhcmdldEluZGV4ID0gMDsganVt
cFRhcmdldEluZGV4IDw9IGp1bXBUYXJnZXRzLnNpemUoKTsgKytqdW1wVGFyZ2V0SW5kZXgpIHsK
ICAgICAgICAgLy8gVGhlIG1heGltdW0gYnl0ZWNvZGUgb2Zmc2V0IHRvIGdvIGludG8gdGhlIGN1
cnJlbnQgYmFzaWNibG9jayBpcyBlaXRoZXIgdGhlIG5leHQganVtcCB0YXJnZXQsIG9yIHRoZSBl
bmQgb2YgdGhlIGluc3RydWN0aW9ucy4KICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBqdW1wVGFy
Z2V0SW5kZXggPCBqdW1wVGFyZ2V0cy5zaXplKCkgPyBqdW1wVGFyZ2V0c1tqdW1wVGFyZ2V0SW5k
ZXhdIDogY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0gICAgICAgIEFTU0VSVCht
X2N1cnJlbnRJbmRleCA8IGxpbWl0KTsKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudEluZGV4Lm9m
ZnNldCgpIDwgbGltaXQpOwogCiAgICAgICAgIC8vIExvb3AgdW50aWwgd2UgcmVhY2ggdGhlIGN1
cnJlbnQgbGltaXQgKGkuZS4gbmV4dCBqdW1wIHRhcmdldCkuCiAgICAgICAgIGRvIHsKQEAgLTcz
NDYsMjMgKzczNDYsMjMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQog
ICAgICAgICAgICAgcGFyc2VCbG9jayhsaW1pdCk7CiAKICAgICAgICAgICAgIC8vIFdlIHNob3Vs
ZCBub3QgaGF2ZSBnb25lIGJleW9uZCB0aGUgbGltaXQuCi0gICAgICAgICAgICBBU1NFUlQobV9j
dXJyZW50SW5kZXggPD0gbGltaXQpOworICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEluZGV4
Lm9mZnNldCgpIDw9IGxpbWl0KTsKIAogICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrLT5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhc2Ugb25seSBoYXBwZW5zIGlm
IHRoZSBsYXN0IGluc3RydWN0aW9uIHdhcyBhbiBpbmxpbmVkIGNhbGwgd2l0aCBlYXJseSByZXR1
cm5zCiAgICAgICAgICAgICAgICAgLy8gb3IgcG9seW1vcnBoaWMgKGNyZWF0aW5nIGFuIGVtcHR5
IGNvbnRpbnVhdGlvbiBibG9jayksCiAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZW4gd2UgaGl0
IHRoZSBsaW1pdCBiZWZvcmUgcHV0dGluZyBhbnl0aGluZyBpbiB0aGUgY29udGludWF0aW9uIGJs
b2NrLgotICAgICAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA9PSBsaW1pdCk7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEluZGV4Lm9mZnNldCgpID09IGxpbWl0KTsK
ICAgICAgICAgICAgICAgICBtYWtlQmxvY2tUYXJnZXRhYmxlKG1fY3VycmVudEJsb2NrLCBtX2N1
cnJlbnRJbmRleCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VS
VChtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKSB8fCAobV9jdXJyZW50SW5kZXggPT0gY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgJiYgaW5saW5lQ2FsbEZyYW1lKCkpKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2stPnRlcm1pbmFsKCkgfHwgKG1fY3VycmVu
dEluZGV4Lm9mZnNldCgpID09IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpICYmIGlu
bGluZUNhbGxGcmFtZSgpKSk7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxs
cHRyOwogICAgICAgICAgICAgfQotICAgICAgICB9IHdoaWxlIChtX2N1cnJlbnRJbmRleCA8IGxp
bWl0KTsKKyAgICAgICAgfSB3aGlsZSAobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgPCBsaW1pdCk7
CiAgICAgfQogCiAgICAgLy8gU2hvdWxkIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBpbnN0
cnVjdGlvbnMuCi0gICAgQVNTRVJUKG1fY3VycmVudEluZGV4ID09IGNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgPT0g
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogICAgIAogICAgIFZFUkJPU0VfTE9H
KCJEb25lIHBhcnNpbmcgIiwgKmNvZGVCbG9jaywgIiAoZmVsbCBvZmYgZW5kKVxuIik7CiB9CkBA
IC03NTI1LDcgKzc1MjUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDcmVhdGVJbnRl
cm5hbEZpZWxkT2JqZWN0KGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLAogdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2UoKQogewogICAgIC8vIFNldCBkdXJpbmcgY29uc3RydWN0aW9uLgotICAg
IEFTU0VSVCghbV9jdXJyZW50SW5kZXgpOworICAgIEFTU0VSVCghbV9jdXJyZW50SW5kZXgub2Zm
c2V0KCkpOwogICAgIAogICAgIFZFUkJPU0VfTE9HKCJQYXJzaW5nICIsICptX2NvZGVCbG9jaywg
IlxuIik7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbkRhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNw
cAppbmRleCA3YzgwNzUwYWVkZGQ3YzAwMzhiOWE1OWIzOTUzZDYwZmNiMGFhNGZhLi43OTg3Yjg3
MGZkNTA5ZjkzMDAwN2UzNTZhYzA1NWVhNjZiZmU3YWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgQ2FsbFNpdGVJbmRl
eCBDb21tb25EYXRhOjphZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAg
ICAgY29kZU9yaWdpbnMuYXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2lnbmVkIGluZGV4ID0g
Y29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdpbnNbaW5kZXhdID09
IGNvZGVPcmlnaW4pOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KGluZGV4KTsKKyAgICByZXR1
cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CiB9CiAKIENhbGxTaXRlSW5k
ZXggQ29tbW9uRGF0YTo6YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2luIGNvZGVPcmln
aW4pCkBAIC02NCwxMyArNjQsMTMgQEAgQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRVbmlx
dWVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICBjb2RlT3JpZ2lucy5h
cHBlbmQoY29kZU9yaWdpbik7CiAgICAgdW5zaWduZWQgaW5kZXggPSBjb2RlT3JpZ2lucy5zaXpl
KCkgLSAxOwogICAgIEFTU0VSVChjb2RlT3JpZ2luc1tpbmRleF0gPT0gY29kZU9yaWdpbik7Ci0g
ICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoaW5kZXgpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKIH0KIAogQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjps
YXN0Q2FsbFNpdGUoKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVPcmlnaW5zLnNp
emUoKSk7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbnMuc2l6ZSgpIC0gMSk7
CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChjb2RlT3JpZ2lucy5zaXpl
KCkgLSAxKSk7CiB9CiAKIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZERp
c3Bvc2FibGVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKaW5kZXggNGIyMTY3ZmQ4NGQ2ZjZmZDkxOWY5
NzJhOTI5MmMxZjBjMWVhODMyYi4uMmVkODMwZmRjM2E0OWYwNDkyZDhmODA2NWMyNTEyODBhZTUz
NDhkZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRh
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKQEAgLTk0
LDE0ICs5NCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMo
Q29kZUJsb2NrKiBvd25lcik7CiAgICAgYm9vbCBpc1ZNVHJhcEJyZWFrcG9pbnQodm9pZCogYWRk
cmVzcyk7CiAKLSAgICBDYXRjaEVudHJ5cG9pbnREYXRhKiBjYXRjaE9TUkVudHJ5RGF0YUZvckJ5
dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICBDYXRjaEVudHJ5cG9pbnRE
YXRhKiBjYXRjaE9TUkVudHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxDYXRjaEVu
dHJ5cG9pbnREYXRhLCB1bnNpZ25lZD4oCisgICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8
Q2F0Y2hFbnRyeXBvaW50RGF0YSwgQnl0ZWNvZGVJbmRleD4oCiAgICAgICAgICAgICBjYXRjaEVu
dHJ5cG9pbnRzLCBjYXRjaEVudHJ5cG9pbnRzLnNpemUoKSwgYnl0ZWNvZGVJbmRleCwKICAgICAg
ICAgICAgIFtdIChjb25zdCBDYXRjaEVudHJ5cG9pbnREYXRhKiBpdGVtKSB7IHJldHVybiBpdGVt
LT5ieXRlY29kZUluZGV4OyB9KTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGVuZENhdGNoRW50cnlw
b2ludCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4gbWFjaGluZUNvZGUsIFZlY3RvcjxGbHVzaEZvcm1hdD4mJiBhcmd1
bWVudEZvcm1hdHMpCisgICAgdm9pZCBhcHBlbmRDYXRjaEVudHJ5cG9pbnQoQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4gbWFjaGluZUNvZGUsIFZlY3RvcjxGbHVzaEZvcm1hdD4mJiBhcmd1bWVudEZvcm1hdHMp
CiAgICAgewogICAgICAgICBjYXRjaEVudHJ5cG9pbnRzLmFwcGVuZChDYXRjaEVudHJ5cG9pbnRE
YXRhIHsgbWFjaGluZUNvZGUsICBXVEZNb3ZlKGFyZ3VtZW50Rm9ybWF0cyksIGJ5dGVjb2RlSW5k
ZXggfSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCmluZGV4
IGRiNjlmMWJkZDYzZDExNWFmYjVlNWQwZmFkYjg0MDcxMTMyYTRjOWQuLjE3YjM3MDc1OGMwNTM4
NzAzYjdkNzllZTYyMjcyZDQ3OTk5OGI1MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRHJpdmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RyaXZlci5jcHAKQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGljIEZ1bmN0aW9uV2hpdGVsaXN0JiBl
bnN1cmVHbG9iYWxERkdXaGl0ZWxpc3QoKQogCiBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29t
cGlsZUltcGwoCiAgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBw
cm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsCi0gICAgdW5zaWduZWQg
b3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4m
IG11c3RIYW5kbGVWYWx1ZXMsCisgICAgQnl0ZWNvZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlSW5k
ZXgsIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcywK
ICAgICBSZWY8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAg
IGlmICghT3B0aW9uczo6Ynl0ZWNvZGVSYW5nZVRvREZHQ29tcGlsZSgpLmlzSW5SYW5nZShjb2Rl
QmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkKQEAgLTExNiw3ICsxMTYsNyBAQCBzdGF0aWMgQ29t
cGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiB9CiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkK
IHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKLSAgICBWTSYsIENvZGVCbG9j
ayosIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQsIGNvbnN0IE9wZXJhbmRz
PE9wdGlvbmFsPEpTVmFsdWU+PiYsCisgICAgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqLCBD
b21waWxhdGlvbk1vZGUsIEJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpT
VmFsdWU+PiYsCiAgICAgUmVmPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4mJikKIHsKICAg
ICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CkBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIENv
bXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogCiBDb21waWxhdGlvblJlc3VsdCBjb21waWxl
KAogICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRE
RkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLAotICAgIHVuc2lnbmVkIG9zckVudHJ5
Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFu
ZGxlVmFsdWVzLAorICAgIEJ5dGVjb2RlSW5kZXggb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25z
dCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMsCiAgICAgUmVm
PERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBDb21waWxh
dGlvblJlc3VsdCByZXN1bHQgPSBjb21waWxlSW1wbCgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RyaXZlci5oCmluZGV4IDAxZjc0ZWVjZjAzNmNkOWY5YzA3NzhjNzYzODk3MjBjMDM5MTNjN2Uu
LmM3YmE3ZjZhYzc3ZWRiNmQzOGRhMWJjYmZhNGZmZmMxZDc0ODU5ZGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuaApAQCAtNDIsNyArNDIsNyBAQCBKU19FWFBPUlRfUFJJVkFU
RSB1bnNpZ25lZCBnZXROdW1Db21waWxhdGlvbnMoKTsKIC8vIGNvbXBpbGUuIEV2ZW4gaWYgd2Ug
ZG8gYSBzeW5jaHJvbm91cyBjb21waWxlLCB3ZSBjYWxsIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBy
ZXN1bHQuCiBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKAogICAgIFZNJiwgQ29kZUJsb2NrKiwg
Q29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlLAotICAgIHVu
c2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNW
YWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIEJ5dGVjb2RlSW5kZXggb3NyRW50cnlCeXRl
Y29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVW
YWx1ZXMsCiAgICAgUmVmPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4mJik7CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAK
aW5kZXggOWQ1YjdkOTMzN2MyMWQzODIxZDVjOWQ0YzVlMTIxYzIxMDJlYmUxOC4uYWRiZjUwMjVj
ZjNkNDQxYmUxOGI3MmIwOWRkZjg4Zjg0NWRiOTExZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAKQEAgLTQwNCw3ICs0MDQsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVtcENvbnRl
eAogICAgIGlmIChjbG9iYmVyc0V4aXRTdGF0ZSgqdGhpcywgbm9kZSkpCiAgICAgICAgIG91dC5w
cmludChjb21tYSwgIkNsb2JiZXJzRXhpdCIpOwogICAgIGlmIChub2RlLT5vcmlnaW4uaXNTZXQo
KSkgewotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJiYyMiLCBub2RlLT5vcmlnaW4uc2VtYW50
aWMuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT5vcmln
aW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyAhPSBub2RlLT5vcmlnaW4uZm9yRXhpdCAmJiBub2RlLT5vcmlnaW4uZm9yRXhpdC5p
c1NldCgpKQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZXhpdDogIiwgbm9kZS0+b3Jp
Z2luLmZvckV4aXQpOwogICAgIH0KQEAgLTE2NDksMTAgKzE2NDksMTAgQEAgTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihO
b2RlKiBjdXJyZW4KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG5vZGUtPmhhc0hl
YXBQcmVkaWN0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuICZwcm9maWxlZEJsb2NrLT52
YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNv
ZGVJbmRleCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJnByb2ZpbGVkQmxvY2stPnZhbHVl
UHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5k
ZXgoKSk7CiAKICAgICAgICAgICAgIGlmIChwcm9maWxlZEJsb2NrLT5oYXNCYXNlbGluZUpJVFBy
b2ZpbGluZygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEFyaXRoUHJvZmlsZSogcmVzdWx0ID0g
cHJvZmlsZWRCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSkpCisgICAgICAgICAgICAgICAgaWYgKEFyaXRoUHJv
ZmlsZSogcmVzdWx0ID0gcHJvZmlsZWRCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRl
eChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTc1MCwx
MiArMTc1MCwxMiBAQCBib29sIEdyYXBoOjp3aWxsQ2F0Y2hFeGNlcHRpb25Jbk1hY2hpbmVGcmFt
ZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENvZGVPcmlnaW4mCiAgICAgaWYgKCFtX2hhc0V4Y2Vw
dGlvbkhhbmRsZXJzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1bnNpZ25lZCBieXRl
Y29kZUluZGV4VG9DaGVjayA9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleFRvQ2hlY2sgPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgo
KTsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAg
ICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNv
ZGVPZmZzZXQoYnl0ZWNvZGVJbmRleFRvQ2hlY2spKSB7Ci0gICAgICAgICAgICBvcENhdGNoT3Jp
Z2luT3V0ID0gQ29kZU9yaWdpbihoYW5kbGVyLT50YXJnZXQsIGlubGluZUNhbGxGcmFtZSk7Cisg
ICAgICAgIGlmIChIYW5kbGVySW5mbyogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleFRvQ2hlY2spKSB7CisgICAgICAgICAgICBvcENhdGNo
T3JpZ2luT3V0ID0gQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KGhhbmRsZXItPnRhcmdldCksIGlu
bGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBjYXRjaEhhbmRsZXJPdXQgPSBoYW5kbGVyOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAppbmRleCA0YTcwOGFhYjkzMTMzOWI1ZWU0N2MzMzRlYjQxMmI4YjA5ODY1MzEw
Li42YzY0ZDQ3MWQzMDVmODJhZmRjNTM4ZDM3YjdhMDQ1Y2UwYWEyNDE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC0xMDk0LDcgKzEwOTQsNyBAQCBwdWJsaWM6CiAKICAg
ICAvLyBUaGlzIG1hcHMgYW4gZW50cnlwb2ludCBpbmRleCB0byBhIHBhcnRpY3VsYXIgb3BfY2F0
Y2ggYnl0ZWNvZGUgb2Zmc2V0LiBCeSBjb252ZW50aW9uLAogICAgIC8vIGl0J2xsIG5ldmVyIGhh
dmUgemVybyBhcyBhIGtleSBiZWNhdXNlIHdlIHVzZSB6ZXJvIHRvIG1lYW4gdGhlIG9wX2VudGVy
IGVudHJ5cG9pbnQuCi0gICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fZW50cnlwb2lu
dEluZGV4VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0OworICAgIEhhc2hNYXA8dW5zaWduZWQsIEJ5dGVj
b2RlSW5kZXg+IG1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlSW5kZXg7CiAKICAgICBI
YXNoU2V0PFN0cmluZz4gbV9sb2NhbFN0cmluZ3M7CiAgICAgSGFzaE1hcDxjb25zdCBTdHJpbmdJ
bXBsKiwgU3RyaW5nPiBtX2NvcGllZFN0cmluZ3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlLmNwcAppbmRleCBjNWJjZDRlM2QzZDJjNWUwMzkyYjhjMjgyOGJjZDdjYTEzNjMz
NWU0Li43ZTJmOWVhMjg1ZDI3ZDQwYmQyMzI1NzYxNTM0Y2I5NmExNWQxYTRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lk
IEpJVENvZGU6OmNsZWFyT1NSRW50cnlCbG9ja0FuZFJlc2V0VGhyZXNob2xkcyhDb2RlQmxvY2sg
KmRmZ0NvZGVCbG9jaykKIHsgCiAgICAgQVNTRVJUKG1fb3NyRW50cnlCbG9jayk7CiAKLSAgICB1
bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlID0gbV9vc3JFbnRyeUJsb2NrLT5qaXRDb2RlKCktPmZ0
bEZvck9TUkVudHJ5KCktPmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBCeXRlY29kZUluZGV4IG9zckVu
dHJ5Qnl0ZWNvZGUgPSBtX29zckVudHJ5QmxvY2stPmppdENvZGUoKS0+ZnRsRm9yT1NSRW50cnko
KS0+Ynl0ZWNvZGVJbmRleCgpOwogICAgIG1fb3NyRW50cnlCbG9jay5jbGVhcigpOwogICAgIG9z
ckVudHJ5UmV0cnkgPSAwOwogICAgIHRpZXJVcEVudHJ5VHJpZ2dlcnMuc2V0KG9zckVudHJ5Qnl0
ZWNvZGUsIEpJVENvZGU6OlRyaWdnZXJSZWFzb246OkRvbnRUcmlnZ2VyKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKaW5kZXggYmI4ZjUwYWNhNjU4NWNjMDVjMzY2ZTNmZmVl
YjhjZjM1YTMwOWZkMi4uYTAwMDAyYjY4MjBiNDIzOWQ2ZjJkM2FjMjBjNmVkOTAzYWE5ZjcyOCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKQEAgLTU0LDcgKzU0LDcgQEAg
cHVibGljOgogICAgIENvbW1vbkRhdGEqIGRmZ0NvbW1vbigpIG92ZXJyaWRlOwogICAgIEpJVENv
ZGUqIGRmZygpIG92ZXJyaWRlOwogICAgIAotICAgIE9TUkVudHJ5RGF0YSogYXBwZW5kT1NSRW50
cnlEYXRhKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkxhYmVsPE9TUkVudHJ5
UHRyVGFnPiBtYWNoaW5lQ29kZSkKKyAgICBPU1JFbnRyeURhdGEqIGFwcGVuZE9TUkVudHJ5RGF0
YShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkxhYmVsPE9TUkVudHJ5
UHRyVGFnPiBtYWNoaW5lQ29kZSkKICAgICB7CiAgICAgICAgIERGRzo6T1NSRW50cnlEYXRhIGVu
dHJ5OwogICAgICAgICBlbnRyeS5tX2J5dGVjb2RlSW5kZXggPSBieXRlY29kZUluZGV4OwpAQCAt
NjMsOSArNjMsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAmb3NyRW50cnkubGFzdCgpOwog
ICAgIH0KICAgICAKLSAgICBPU1JFbnRyeURhdGEqIG9zckVudHJ5RGF0YUZvckJ5dGVjb2RlSW5k
ZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICBPU1JFbnRyeURhdGEqIG9zckVudHJ5RGF0
YUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxPU1JFbnRyeURhdGEsIHVuc2lnbmVkPigKKyAg
ICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxPU1JFbnRyeURhdGEsIEJ5dGVjb2RlSW5kZXg+
KAogICAgICAgICAgICAgb3NyRW50cnksIG9zckVudHJ5LnNpemUoKSwgYnl0ZWNvZGVJbmRleCwK
ICAgICAgICAgICAgIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgpOwogICAgIH0KQEAgLTE1
MSwxMCArMTUxLDEwIEBAIHB1YmxpYzoKICAgICAvLwogICAgIC8vIFRoZSBrZXkgbWF5IG5vdCBh
bHdheXMgYmUgYSB0YXJnZXQgZm9yIE9TUiBFbnRyeSBidXQgdGhlIGxpc3QgaW4gdGhlIHZhbHVl
IGlzIGd1YXJhbnRlZWQKICAgICAvLyB0byBiZSB1c2FibGUgZm9yIE9TUiBFbnRyeS4KLSAgICBI
YXNoTWFwPHVuc2lnbmVkLCBWZWN0b3I8dW5zaWduZWQ+PiB0aWVyVXBJbkxvb3BIaWVyYXJjaHk7
CisgICAgSGFzaE1hcDxCeXRlY29kZUluZGV4LCBWZWN0b3I8Qnl0ZWNvZGVJbmRleD4+IHRpZXJV
cEluTG9vcEhpZXJhcmNoeTsKIAogICAgIC8vIE1hcCBlYWNoIGJ5dGVjb2RlIG9mIENoZWNrVGll
clVwQW5kT1NSRW50ZXIgdG8gaXRzIHN0cmVhbSBpbmRleC4KLSAgICBIYXNoTWFwPHVuc2lnbmVk
LCB1bnNpZ25lZCwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IGJ5dGVjb2RlSW5kZXhUb1N0cmVhbUluZGV4OworICAg
IEhhc2hNYXA8Qnl0ZWNvZGVJbmRleCwgdW5zaWduZWQ+IGJ5dGVjb2RlSW5kZXhUb1N0cmVhbUlu
ZGV4OwogCiAgICAgZW51bSBjbGFzcyBUcmlnZ2VyUmVhc29uIDogdWludDhfdCB7CiAgICAgICAg
IERvbnRUcmlnZ2VyLApAQCAtMTY1LDcgKzE2NSw3IEBAIHB1YmxpYzoKICAgICAvLyBNYXAgZWFj
aCBieXRlY29kZSBvZiBDaGVja1RpZXJVcEFuZE9TUkVudGVyIHRvIGl0cyB0cmlnZ2VyIGZvcmNp
bmcgT1NSIEVudHJ5LgogICAgIC8vIFRoaXMgY2FuIG5ldmVyIGJlIG1vZGlmaWVkIGFmdGVyIGl0
IGhhcyBiZWVuIGluaXRpYWxpemVkIHNpbmNlIHRoZSBhZGRyZXNzZXMgb2YgdGhlIHRyaWdnZXJz
CiAgICAgLy8gYXJlIHVzZWQgYnkgdGhlIEpJVC4KLSAgICBIYXNoTWFwPHVuc2lnbmVkLCBUcmln
Z2VyUmVhc29uPiB0aWVyVXBFbnRyeVRyaWdnZXJzOworICAgIEhhc2hNYXA8Qnl0ZWNvZGVJbmRl
eCwgVHJpZ2dlclJlYXNvbj4gdGllclVwRW50cnlUcmlnZ2VyczsKIAogICAgIFdyaXRlQmFycmll
cjxDb2RlQmxvY2s+IG1fb3NyRW50cnlCbG9jazsKICAgICB1bnNpZ25lZCBvc3JFbnRyeVJldHJ5
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCAw
MTA2M2NlNmJiNDc4NTFlZjEzYzkyYjZhODBlMmQyMGE4ODExMTY3Li45Mjc0MGE2NTI2OWEyNDQx
YjIwYmRjNjgyY2JlNGVhNzZiZTc1NDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcApAQCAtNjAsNyArNjAsNyBAQCBKSVRDb21waWxlcjo6SklUQ29t
cGlsZXIoR3JhcGgmIGRmZykKICAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPERp
c2Fzc2VtYmxlcj4oZGZnKTsKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBtX2ppdENvZGUtPnRp
ZXJVcEluTG9vcEhpZXJhcmNoeSA9IFdURk1vdmUobV9ncmFwaC5tX3BsYW4udGllclVwSW5Mb29w
SGllcmFyY2h5KCkpOwotICAgIGZvciAodW5zaWduZWQgdGllclVwQnl0ZWNvZGUgOiBtX2dyYXBo
Lm1fcGxhbi50aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2RlcygpKQorICAgIGZvciAoQnl0ZWNvZGVJ
bmRleCB0aWVyVXBCeXRlY29kZSA6IG1fZ3JhcGgubV9wbGFuLnRpZXJVcEFuZE9TUkVudGVyQnl0
ZWNvZGVzKCkpCiAgICAgICAgIG1faml0Q29kZS0+dGllclVwRW50cnlUcmlnZ2Vycy5hZGQodGll
clVwQnl0ZWNvZGUsIEpJVENvZGU6OlRyaWdnZXJSZWFzb246OkRvbnRUcmlnZ2VyKTsKICNlbmRp
ZgogfQpAQCAtMzc0LDcgKzM3NCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGUoKQogICAg
IC8vIHdlIG5lZWQgdG8gY2FsbCBvdXQgdG8gYSBoZWxwZXIgZnVuY3Rpb24gdG8gdGhyb3cgdGhl
IFN0YWNrT3ZlcmZsb3dFcnJvci4KICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAKLSAg
ICBlbWl0U3RvcmVDb2RlT3JpZ2luKENvZGVPcmlnaW4oMCkpOworICAgIGVtaXRTdG9yZUNvZGVP
cmlnaW4oQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CiAKICAgICBpZiAobWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRp
Y19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKQEAgLTQ1MCw3ICs0NTAsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21w
aWxlRnVuY3Rpb24oKQogICAgIC8vIHdlIG5lZWQgdG8gY2FsbCBvdXQgdG8gYSBoZWxwZXIgZnVu
Y3Rpb24gdG8gdGhyb3cgdGhlIFN0YWNrT3ZlcmZsb3dFcnJvci4KICAgICBzdGFja092ZXJmbG93
LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0U3RvcmVDb2RlT3JpZ2luKENvZGVPcmlnaW4oMCkpOwor
ICAgIGVtaXRTdG9yZUNvZGVPcmlnaW4oQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CiAK
ICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTQ3MSwxNCArNDcxLDE0IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAKICAgICAgICAgbG9hZDMyKEFzc2Vt
Ymx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKUNhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgR1BSSW5mbzo6cmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpKSkubGlua1RvKGZyb21Bcml0eUNoZWNrLCB0aGlzKTsKLSAgICAgICAgZW1pdFN0b3Jl
Q29kZU9yaWdpbihDb2RlT3JpZ2luKDApKTsKKyAgICAgICAgZW1pdFN0b3JlQ29kZU9yaWdpbihD
b2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgICAgICBtX3NwZWN1bGF0aXZlLT5jYWxsT3BlcmF0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/
IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywg
R1BSSW5mbzo6cmVnVDAsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgICAgIGlm
IChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgICAgIGJyYW5jaFRlc3QzMihaZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UikubGlua1RvKGZyb21Bcml0eUNoZWNrLCB0aGlzKTsKLSAgICAgICAgZW1pdFN0b3JlQ29kZU9y
aWdpbihDb2RlT3JpZ2luKDApKTsKKyAgICAgICAgZW1pdFN0b3JlQ29kZU9yaWdpbihDb2RlT3Jp
Z2luKEJ5dGVjb2RlSW5kZXgoMCkpKTsKICAgICAgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgY2FsbEFyaXR5Rml4dXAgPSBu
ZWFyQ2FsbCgpOwogICAgICAgICBqdW1wKGZyb21Bcml0eUNoZWNrKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAppbmRleCAwOGRmYjhkYzJiZTY2NzgxMWVkNjdj
Y2JjMTkwODY4YjAyZGRmYTk5Li42YTEzOWQyODVhYTJmNTg3OGU5MzdlZWQ2NGZiOTZmZTQxOWRm
YzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC05
OCw3ICs5OCw3IEBAIHB1YmxpYzoKICAgICAvLyBNZXRob2RzIHRvIHNldCBsYWJlbHMgZm9yIHRo
ZSBkaXNhc3NlbWJsZXIuCiAgICAgdm9pZCBzZXRTdGFydE9mQ29kZSgpCiAgICAgewotICAgICAg
ICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsSWdub3JpbmdXYXRj
aHBvaW50cygpLCBDb2RlT3JpZ2luKDAsIG51bGxwdHIpKTsKKyAgICAgICAgbV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgQ29k
ZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CiAgICAgICAgIGlmIChMSUtFTFkoIW1fZGlzYXNz
ZW1ibGVyKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNl
dFN0YXJ0T2ZDb2RlKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25Q
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxl
UHJlc2VydmF0aW9uUGhhc2UuY3BwCmluZGV4IDllYjQ2Y2E1YTg4ZDNiNzBhODk4ZDFlY2YyOTlm
MTMxZGFhM2U2MDAuLjQyZjY4YWRhMzI0NzhhMTE3MWNlYWQwZjkzZTA4YWMyNWNhNjMxMzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQ
cmVzZXJ2YXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
aXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcApAQCAtMTI1LDE3ICsxMjUsMTcg
QEAgcHVibGljOgogICAgICAgICAgICAgaWYgKG9yaWdpbiA9PSBjYWNoZWRDb2RlT3JpZ2luKQog
ICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWRIYW5kbGVyUmVzdWx0OwogCi0gICAgICAgICAg
ICB1bnNpZ25lZCBieXRlY29kZUluZGV4VG9DaGVjayA9IG9yaWdpbi5ieXRlY29kZUluZGV4KCk7
CisgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXhUb0NoZWNrID0gb3JpZ2lu
LmJ5dGVjb2RlSW5kZXgoKTsKIAogICAgICAgICAgICAgY2FjaGVkQ29kZU9yaWdpbiA9IG9yaWdp
bjsKIAogICAgICAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAg
ICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxv
Y2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAoSGFuZGxlckluZm8q
IGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUlu
ZGV4VG9DaGVjaykpIHsKKyAgICAgICAgICAgICAgICBpZiAoSGFuZGxlckluZm8qIGhhbmRsZXIg
PSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXhUb0NoZWNr
KSkgewogICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWQuY2xlYXJBbGwoKTsKIAot
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjYXRjaEJ5dGVjb2RlSW5kZXggPSBoYW5kbGVy
LT50YXJnZXQ7CisgICAgICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2F0Y2hCeXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleChoYW5kbGVyLT50YXJnZXQpOwogICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4oY2F0Y2hC
eXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUpLCBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50
b0xvY2FsKCldID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCmluZGV4IGQ5MzlkMzAzZDI0YTYyMzkwNDcxNmZm
MjdmZTAzMzJmYTc5NDdmZTMuLjQ2MmQ2ODJkMjdhODA2OGVhYTE1ZWRhMjBkZTI3MDU5ODk4ZDk3
MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCkBAIC00Miw3
ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBPU1JFbnRy
eURhdGE6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRl
eHQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCJiYyMiLCBtX2J5dGVjb2RlSW5kZXgsICIsIG1h
Y2hpbmUgY29kZSA9ICIsIFJhd1BvaW50ZXIobV9tYWNoaW5lQ29kZS5leGVjdXRhYmxlQWRkcmVz
cygpKSk7CisgICAgb3V0LnByaW50KG1fYnl0ZWNvZGVJbmRleCwgIiwgbWFjaGluZSBjb2RlID0g
IiwgUmF3UG9pbnRlcihtX21hY2hpbmVDb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICBv
dXQucHJpbnQoIiwgc3RhY2sgcnVsZXMgPSBbIik7CiAgICAgCiAgICAgYXV0byBwcmludE9wZXJh
bmQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBP
U1JFbnRyeURhdGE6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIH0KIAogU1VQUFJFU1Nf
QVNBTgotdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQordm9pZCogcHJl
cGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQVNTRVJUKEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFTU0VSVChj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQqIHByZXBh
cmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgdW5zaWduCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICBk
YXRhTG9nKAogICAgICAgICAgICAgIkRGRyBPU1IgaW4gIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKSwgIiAtPiAiLCAqY29kZUJsb2NrLAotICAgICAgICAgICAgIiBmcm9tIGJjIyIsIGJ5dGVj
b2RlSW5kZXgsICJcbiIpOworICAgICAgICAgICAgIiBmcm9tICIsIGJ5dGVjb2RlSW5kZXgsICJc
biIpOwogICAgIH0KICAgICAKICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0odm0pOwpAQCAtMzI5LDgg
KzMyOSw4IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduCiAgICAgcmV0dXJuIHNjcmF0Y2g7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJl
Q2F0Y2hPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsgCitNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZUNhdGNoT1NSRW50cnkoVk0mIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCkKK3sKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6REZHSklUIHx8IGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCk7
CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aXNTdGlsbFZh
bGlkKTsKIApAQCAtMzgwLDcgKzM4MCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRp
b25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShWTSYgdm0sIENhbGxGCiAgICAg
aWYgKFVOTElLRUxZKCF2bS5lbnN1cmVTdGFja0NhcGFjaXR5Rm9yKCZjYWxsRnJhbWUtPnJlZ2lz
dGVycygpW3ZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lU2l6ZUZvckNoZWNrKS5vZmZzZXQo
KV0pKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGluc3RydWN0aW9uID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbEZyYW1lLT5ieXRl
Y29kZU9mZnNldCgpKTsKKyAgICBhdXRvIGluc3RydWN0aW9uID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkpOwogICAg
IEFTU0VSVChpbnN0cnVjdGlvbi0+aXM8T3BDYXRjaD4oKSk7CiAgICAgVmFsdWVQcm9maWxlQW5k
T3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCkubWV0YWRh
dGEoY2FsbEZyYW1lKS5tX2J1ZmZlcjsKICAgICBKU1ZhbHVlKiBkYXRhQnVmZmVyID0gcmVpbnRl
cnByZXRfY2FzdDxKU1ZhbHVlKj4oZGZnQ29tbW9uLT5jYXRjaE9TUkVudHJ5QnVmZmVyLT5kYXRh
QnVmZmVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCmluZGV4IGQ4
MTY3N2ExYzJjZTViYjc2ZThiYzQzMmQ3OWViZmY4NzhkZjNhNGQuLmNmOTZkNzE4YWQ3YjRlYWYy
MzQxYTNkZDVhMGUzM2U1NTE1NmY3MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5LmgKQEAgLTUzLDcgKzUzLDcgQEAgc3RydWN0IE9TUkVudHJ5UmVzaHVmZmxpbmcgewog
fTsKIAogc3RydWN0IE9TUkVudHJ5RGF0YSB7Ci0gICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4
OworICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwogICAgIENvZGVMb2NhdGlvbkxh
YmVsPE9TUkVudHJ5UHRyVGFnPiBtX21hY2hpbmVDb2RlOwogICAgIE9wZXJhbmRzPEFic3RyYWN0
VmFsdWU+IG1fZXhwZWN0ZWRWYWx1ZXM7CiAgICAgLy8gVXNlIGJpdHZlY3RvcnMgaGVyZSBiZWNh
dXNlIHRoZXkgdGVuZCB0byBvbmx5IHJlcXVpcmUgb25lIHdvcmQuCkBAIC02Niw3ICs2Niw3IEBA
IHN0cnVjdCBPU1JFbnRyeURhdGEgewogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OwogfTsKIAotaW5saW5lIHVuc2lnbmVkIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NS
RW50cnlEYXRhKiBvc3JFbnRyeURhdGEpCitpbmxpbmUgQnl0ZWNvZGVJbmRleCBnZXRPU1JFbnRy
eURhdGFCeXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSogb3NyRW50cnlEYXRhKQogewogICAgIHJl
dHVybiBvc3JFbnRyeURhdGEtPm1fYnl0ZWNvZGVJbmRleDsKIH0KQEAgLTc2LDE3ICs3NiwxNyBA
QCBzdHJ1Y3QgQ2F0Y2hFbnRyeXBvaW50RGF0YSB7CiAgICAgLy8gYXJlIG9mIHRoZSBleHBlY3Rl
ZCB0eXBlIGJlZm9yZSBlbnRlcmluZyBhdCBhIGNhdGNoIGJsb2NrLgogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBtYWNoaW5lQ29kZTsKICAgICBWZWN0
b3I8Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rm9ybWF0czsKLSAgICB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKIH07CiAKIC8vIFJldHVybnMg
YSBwb2ludGVyIHRvIGEgZGF0YSBidWZmZXIgdGhhdCB0aGUgT1NSIGVudHJ5IHRodW5rIHdpbGwg
cmVjb2duaXplIGFuZAogLy8gcGFyc2UuIElmIHRoaXMgcmV0dXJucyBudWxsLCBpdCBtZWFucyAK
LXZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYsIENhbGxGcmFtZSosIENvZGVCbG9jayosIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpOwordm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiwgQ2FsbEZyYW1l
KiwgQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7CiAKIC8vIElmIG51bGwgaXMgcmV0dXJuZWQs
IHdlIGNhbid0IE9TUiBlbnRlci4gSWYgaXQncyBub3QgbnVsbCwgaXQncyB0aGUgUEMgdG8ganVt
cCB0by4KLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVw
YXJlQ2F0Y2hPU1JFbnRyeShWTSYsIENhbGxGcmFtZSosIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IHByZXBhcmVDYXRjaE9TUkVudHJ5KFZNJiwgQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwgQnl0
ZWNvZGVJbmRleCk7CiAjZWxzZQotaW5saW5lIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRp
b25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlT1NSRW50cnkoVk0mLCBDYWxsRnJhbWUqLCBDb2RlQmxv
Y2sqLCB1bnNpZ25lZCkgeyByZXR1cm4gbnVsbHB0cjsgfQoraW5saW5lIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlT1NSRW50cnkoVk0mLCBDYWxs
RnJhbWUqLCBDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4KSB7IHJldHVybiBudWxscHRyOyB9CiAj
ZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcApp
bmRleCA5ZTZjYzZmZDM5YzUwMmYxZDcyMDUxMWQwNDdlZjU5YmU3YWFlYzRkLi5kYzc2YmNiYWVk
NDFlZWUwNjNkZmRiZWE4NDUwNjY1NTNkMGNiNGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcApA
QCAtNTAsMTAgKzUwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFw
aC5tX3BsYW4ubW9kZSgpID09IEZUTEZvck9TUkVudHJ5TW9kZSk7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKIAotICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZUluZGV4ID0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KCk7
CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG1fZ3JhcGgubV9wbGFuLm9z
ckVudHJ5Qnl0ZWNvZGVJbmRleCgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZUlu
ZGV4KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVJbmRleCAhPSBVSU5UX01BWCk7
Ci0gICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZUluZGV4Lm9mZnNldCgp
KTsKKwogICAgICAgICAvLyBOZWVkZWQgYnkgY3JlYXRlUHJlSGVhZGVyKCkuCiAgICAgICAgIG1f
Z3JhcGguZW5zdXJlQ1BTRG9taW5hdG9ycygpOwogICAgICAgICAKQEAgLTkyLDcgKzkyLDcgQEAg
cHVibGljOgogICAgICAgICBCYXNpY0Jsb2NrKiBuZXdSb290ID0gaW5zZXJ0aW9uU2V0Lmluc2Vy
dCgwLCAxKTsKIAogICAgICAgICAvLyBXZSdkIHJlYWxseSBsaWtlIHRvIHVzZSBhbiB1bnNldCBv
cmlnaW4sIGJ1dCBUaHJlYWRlZENQUyB3b24ndCBhbGxvdyB0aGF0LgotICAgICAgICBOb2RlT3Jp
Z2luIG9yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgZmFs
c2UpOworICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbihC
eXRlY29kZUluZGV4KDApKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSwgZmFsc2UpOwog
ICAgICAgICAKICAgICAgICAgVmVjdG9yPE5vZGUqPiBsb2NhbHMoYmFzZWxpbmUtPm51bUNhbGxl
ZUxvY2FscygpKTsKICAgICAgICAgZm9yIChpbnQgbG9jYWwgPSAwOyBsb2NhbCA8IGJhc2VsaW5l
LT5udW1DYWxsZWVMb2NhbHMoKTsgKytsb2NhbCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5jcHAKaW5kZXggYWM2YjljZGE1ODVjMTBmZTVkMDlmMmJmZmRmNjQ2MGNlNDk5
NTNlYS4uZDBlMGE1ZmNkZjQ1MTQxZmI4ZmMzNWI5NjQ2ODIyN2M5M2IyYmUzMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCkBAIC00MDUsNyArNDA1LDcgQEAgdm9p
ZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjb250ZXh0KQogICAgICAgICBib29s
IGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGNvZGVCbG9j
a0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogICAgICAg
ICB2b2lkKiBqdW1wVGFyZ2V0OwogICAgICAgICBpZiAoZXhpdFRvTExJbnQpIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCgpOworICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IGV4aXQu
bV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgIGNvbnN0IEluc3RydWN0
aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnl0ZWNvZGVPZmZzZXQpLnB0cigpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNF
bnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKICAgICAgICAgICAgIGp1bXBUYXJnZXQg
PSBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOyAgICAKQEAgLTc4Niw3ICs3ODYsNyBA
QCBzdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRleHQmIGNvbnRleHQsIENv
ZGVCbG9jayogb3V0ZXJtb3N0QmFzZWxpbgogICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBmcmFt
ZS5nZXQ8dm9pZCo+KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVy
ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygqdHJ1ZUNh
bGxlciwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICAgICAgdW5zaWduZWQg
Y2FsbEJ5dGVjb2RlSW5kZXggPSB0cnVlQ2FsbGVyLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAg
ICAgICBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUluZGV4ID0gdHJ1ZUNhbGxlci0+Ynl0ZWNv
ZGVJbmRleCgpOwogICAgICAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNhbGxlclJldHVyblBD
KGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBjYWxsQnl0ZWNvZGVJbmRleCwgdHJ1ZUNhbGxl
ckNhbGxLaW5kLCBjYWxsZXJJc0xMSW50KTsKIAogICAgICAgICAgICAgaWYgKHRydWVDYWxsZXIt
PmlubGluZUNhbGxGcmFtZSgpKQpAQCAtODgxLDEzICs4ODEsMTMgQEAgc3RhdGljIHZvaWQgYWRq
dXN0QW5kSnVtcFRvVGFyZ2V0KENvbnRleHQmIGNvbnRleHQsIFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2sKIAogICAgIGlmIChleGl0U3RhdGUtPmlzSnVtcFRvTExJbnQpIHsKICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5B
bmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2sp
OwotICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVj
dGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9mZnNl
dCkucHRyKCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1
cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChi
eXRlY29kZUluZGV4KS5wdHIoKTsKIAogICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0
ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9j
a0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAg
Y29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpID0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKTsKLSAgICAg
ICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpID0gc3RhdGljX2Nhc3Q8dWlu
dHB0cl90PihleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBjb250
ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSk7CiAjZWxzZQogICAg
ICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikgPSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PigmY3VycmVudEluc3RydWN0aW9uKTsKICNlbmRpZgpAQCAtOTA1LDEwICs5MDUs
MTAgQEAgc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENvbnRleHQmIGNvbnRleHQsIHVpbnQzMl90
IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IGNv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKICAgICBFeGl0S2luZCBraW5kID0gZXhpdC5tX2tpbmQ7
Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKIAogICAgIGRhdGFMb2coIlNwZWN1bGF0aW9uIGZhaWx1
cmUgaW4gIiwgKmNvZGVCbG9jayk7Ci0gICAgZGF0YUxvZygiIEAgZXhpdCAjIiwgb3NyRXhpdElu
ZGV4LCAiIChiYyMiLCBieXRlY29kZU9mZnNldCwgIiwgIiwgZXhpdEtpbmRUb1N0cmluZyhraW5k
KSwgIikgd2l0aCAiKTsKKyAgICBkYXRhTG9nKCIgQCBleGl0ICMiLCBvc3JFeGl0SW5kZXgsICIg
KCIsIGJ5dGVjb2RlT2Zmc2V0LCAiLCAiLCBleGl0S2luZFRvU3RyaW5nKGtpbmQpLCAiKSB3aXRo
ICIpOwogICAgIGlmIChhbHRlcm5hdGl2ZSkgewogICAgICAgICBkYXRhTG9nKAogICAgICAgICAg
ICAgImV4ZWN1dGVDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPmppdEV4ZWN1dGVDb3VudGVyKCks
CkBAIC0xMTEzLDcgKzExMTMsNyBAQCB2b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVs
cGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0CiAgICAgICAgIFNw
ZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyogZGVidWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFp
bHVyZURlYnVnSW5mbzsKICAgICAgICAgZGVidWdJbmZvLT5jb2RlQmxvY2sgPSBqaXQuY29kZUJs
b2NrKCk7CiAgICAgICAgIGRlYnVnSW5mby0+a2luZCA9IGV4aXQubV9raW5kOwotICAgICAgICBk
ZWJ1Z0luZm8tPmJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpOworICAgICAgICBkZWJ1Z0luZm8tPmJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KCk7CiAKICAgICAgICAgaml0LmRlYnVnQ2FsbCh2bSwgZGVidWdPcGVy
YXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKICAgICB9CkBAIC0xNjcw
LDcgKzE2NzAsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhpdDo6ZGVidWdPcGVyYXRpb25Q
cmludFNwZWN1bGF0aW9uRmFpbHVyZShDYWxsRnJhbWUqIGNhbAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gZGVidWdJbmZvLT5jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2
ZSA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKICAgICBkYXRhTG9nKCJTcGVjdWxhdGlvbiBm
YWlsdXJlIGluICIsICpjb2RlQmxvY2spOwotICAgIGRhdGFMb2coIiBAIGV4aXQgIyIsIHZtLm9z
ckV4aXRJbmRleCwgIiAoYmMjIiwgZGVidWdJbmZvLT5ieXRlY29kZU9mZnNldCwgIiwgIiwgZXhp
dEtpbmRUb1N0cmluZyhkZWJ1Z0luZm8tPmtpbmQpLCAiKSB3aXRoICIpOworICAgIGRhdGFMb2co
IiBAIGV4aXQgIyIsIHZtLm9zckV4aXRJbmRleCwgIiAoIiwgZGVidWdJbmZvLT5ieXRlY29kZUlu
ZGV4LCAiLCAiLCBleGl0S2luZFRvU3RyaW5nKGRlYnVnSW5mby0+a2luZCksICIpIHdpdGggIik7
CiAgICAgaWYgKGFsdGVybmF0aXZlKSB7CiAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAi
ZXhlY3V0ZUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+aml0RXhlY3V0ZUNvdW50ZXIoKSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKaW5kZXggMjU3MDRkMmNiOTgwYWUyMjQy
ZGQxZmZlNjkzYjRjN2Q5OGJiM2MyYi4uZDFmYzVmMWY2YjQwMDBiZDdkY2VmMzM3MjdkNmM5Njdl
MWI1MTViYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKQEAgLTE3Niw3
ICsxNzYsNyBAQCBzdHJ1Y3QgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvIHsKICAgICBXVEZf
TUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CiAg
ICAgRXhpdEtpbmQga2luZDsKLSAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldDsKKyAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAKaW5kZXggMjJkZTllNjFiZjAyMzE2YWFiZDJiMTBjNWE2MDFlM2U0Zjc3ZDBm
OC4uNTQ4NzdiOTFkMGJmZDRmMTg0OTEwNDE2OWY3NWMxOWYzMzM0NTQ1NiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cApAQCAtMTM4LDcgKzEzOCw3IEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgZG9uZUFkanVzdGluZy5saW5rKCZq
aXQpOwogfQogCi12b2lkKiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyLCB1bnNpZ25lZCBjYWxsQnl0ZWNvZGVJbmRleCwgSW5saW5lQ2FsbEZyYW1l
OjpLaW5kIHRydWVDYWxsZXJDYWxsS2luZCwgYm9vbCYgY2FsbGVySXNMTEludCkKK3ZvaWQqIGNh
bGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIEJ5dGVj
b2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXgsIElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVlQ2Fs
bGVyQ2FsbEtpbmQsIGJvb2wmIGNhbGxlcklzTExJbnQpCiB7CiAgICAgY2FsbGVySXNMTEludCA9
IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBiYXNlbGluZUNvZGVCbG9ja0ZvckNh
bGxlci0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7CiAKQEAgLTI2Myw3
ICsyNjMsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBH
UFJJbmZvOjpyZWdUMzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRy
dWVDYWxsZXIpOwotICAgICAgICAgICAgdW5zaWduZWQgY2FsbEJ5dGVjb2RlSW5kZXggPSB0cnVl
Q2FsbGVyLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICBhdXRvIGNhbGxCeXRlY29kZUlu
ZGV4ID0gdHJ1ZUNhbGxlci0+Ynl0ZWNvZGVJbmRleCgpOwogICAgICAgICAgICAgdm9pZCoganVt
cFRhcmdldCA9IGNhbGxlclJldHVyblBDKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBjYWxs
Qnl0ZWNvZGVJbmRleCwgdHJ1ZUNhbGxlckNhbGxLaW5kLCBjYWxsZXJJc0xMSW50KTsKIAogICAg
ICAgICAgICAgaWYgKHRydWVDYWxsZXItPmlubGluZUNhbGxGcmFtZSgpKSB7CkBAIC0zODIsOCAr
MzgyLDggQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgdm9pZCoganVtcFRhcmdldDsKICAg
ICBib29sIGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGNv
ZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwog
ICAgIGlmIChleGl0VG9MTEludCkgewotICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgY29uc3QgSW5zdHJ1
Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlv
bnMoKS5hdChieXRlY29kZU9mZnNldCkucHRyKCk7CisgICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRl
eCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgY29uc3QgSW5z
dHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVj
dGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNF
bnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgICAgICBpZiAoZXhpdC5pc0V4
Y2VwdGlvbkhhbmRsZXIoKSkgewpAQCAtMzk0LDcgKzM5NCw3IEBAIHZvaWQgYWRqdXN0QW5kSnVt
cFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBl
eGl0KQogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJs
b2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFU
YWJsZUdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9uc1Jhd1BvaW50
ZXIoKSksIExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKTsKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBMTEludDo6UmVnaXN0ZXJzOjpw
Y0dQUik7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CiAjZWxzZQogICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmN1cnJlbnRJbnN0cnVj
dGlvbiksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgKaW5kZXggMGNh
ZWIwMGYzYWUyOTgwNTg3Y2ZiMTA5MzljNDljNWIyMDlhZGQyYS4uNGZjOTk2ZjAwZDBjYjI4OGE4
ZjQ0OWZhYzUyNWVjOWZjNWM5MzJkMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIHZvaWQgaGFuZGxlRXhpdENvdW50cyhDQ2FsbEhl
bHBlcnMmLCBjb25zdCBPU1JFeGl0QmFzZSYpOwogdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVz
KENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNlJik7CiB2b2lkIGFkanVzdEFuZEp1bXBU
b1RhcmdldChWTSYsIENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNlJik7Ci12b2lkKiBj
YWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCB1bnNp
Z25lZCBjYWxsQnl0ZWNvZGVPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCBjYWxsZXJLaW5k
LCBib29sJiBjYWxsZXJJc0xMSW50KTsKK3ZvaWQqIGNhbGxlclJldHVyblBDKENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5k
ZXgsIElubGluZUNhbGxGcmFtZTo6S2luZCBjYWxsZXJLaW5kLCBib29sJiBjYWxsZXJJc0xMSW50
KTsKIENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxsZWVTYXZlU2xvdChJbmxpbmVDYWxsRnJhbWUq
LCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBHUFJSZWcgY2FsbGVlU2F2ZSk7CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBKSVRDb2RlVHlwZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IGQ2MjJlYjcyMzE0MmZjZmQzN2M1ZTliOGRlYTBlYjUw
ZDFlNGI5M2MuLjZhZWU1NTQyNzM1NzI2YjYwNDFhNDc2ODBhMzVlMzU1ZTYzNDliZjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApAQCAtMzU4Myw3ICsz
NTgzLDcgQEAgc3RhdGljIHZvaWQgdHJpZ2dlckZUTFJlcGxhY2VtZW50Q29tcGlsZShWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlKgogICAgIENPREVCTE9DS19MT0dfRVZFTlQo
Y29kZUJsb2NrLCAidHJpZ2dlckZUTFJlcGxhY2VtZW50IiwgKCkpOwogICAgIC8vIFdlIG5lZWQg
dG8gY29tcGlsZSB0aGUgY29kZS4KICAgICBjb21waWxlKAotICAgICAgICB2bSwgY29kZUJsb2Nr
LT5uZXdSZXBsYWNlbWVudCgpLCBjb2RlQmxvY2ssIEZUTE1vZGUsIFVJTlRfTUFYLAorICAgICAg
ICB2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLCBjb2RlQmxvY2ssIEZUTE1vZGUsIEJ5
dGVjb2RlSW5kZXgoKSwKICAgICAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+KCksIFRv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKSk7CiAKICAgICAvLyBJZiB3
ZSByZWFjaGVkIGhlcmUsIHRoZSBjb3VudGVyIGhhcyBub3QgYmUgcmVzZXQuIERvIHRoYXQgbm93
LgpAQCAtMzYzNyw3ICszNjM3LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBO
b3coVk0qIHZtUG9pbnRlcikKICAgICB9CiB9CiAKLXN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24o
Vk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQgb3JpZ2luQnl0ZWNvZGVJbmRl
eCwgYm9vbCBjYW5PU1JFbnRlckhlcmUpCitzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKFZNJiB2
bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEJ5dGVjb2RlSW5kZXggb3JpZ2luQnl0ZWNvZGVJbmRl
eCwgYm9vbCBjYW5PU1JFbnRlckhlcmUpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCkBAIC0zNjkwLDcgKzM2OTAsNyBAQCBzdGF0aWMgY2hh
ciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkIG9y
aWdpbkJ5dGVjb2RlSQogICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk9TUiBlbnRyeTogRnJvbSAiLCBSYXdQb2lu
dGVyKGppdENvZGUpLCAiIGdvdCBlbnRyeSBibG9jayAiLCBSYXdQb2ludGVyKGVudHJ5QmxvY2sp
LCAiXG4iKTsKICAgICAgICAgICAgICAgICBpZiAodm9pZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFy
ZU9TUkVudHJ5KHZtLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgZW50cnlCbG9jaywgb3JpZ2luQnl0
ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENPREVCTE9D
S19MT0dfRVZFTlQoZW50cnlCbG9jaywgIm9zckVudHJ5IiwgKCJhdCBiYyMiLCBvcmlnaW5CeXRl
Y29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoZW50
cnlCbG9jaywgIm9zckVudHJ5IiwgKCJhdCAiLCBvcmlnaW5CeXRlY29kZUluZGV4KSk7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXRhZ0NvZGVQdHI8Y2hhcio+KGFkZHJlc3MsIEpTRW50
cnlQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGNhbGxGcmFtZSkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KQEAgLTM3NzUsNyArMzc3NSw3IEBAIHN0YXRpYyBjaGFyKiB0
aWVyVXBDb21tb24oVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQgb3JpZ2lu
Qnl0ZWNvZGVJCiAgICAgICAgICAgICAvLyBleGVjdXRpbmcgdG8gY29tcGlsZS4gV2Ugc3RhcnQg
d2l0aCB0cnlpbmcgdG8gY29tcGlsZSBvdXRlciBsb29wcyBzaW5jZSB3ZSBiZWxpZXZlIG91dGVy
IGxvb3AKICAgICAgICAgICAgIC8vIGNvbXBpbGF0aW9ucyByZXZlYWwgdGhlIGJlc3Qgb3Bwb3J0
dW5pdGllcyBmb3Igb3B0aW1pemluZyBjb2RlLgogICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIg
PSB0aWVyVXBIaWVyYXJjaHlFbnRyeS0+dmFsdWUucmJlZ2luKCksIGVuZCA9IHRpZXJVcEhpZXJh
cmNoeUVudHJ5LT52YWx1ZS5yZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBvc3JFbnRyeUNhbmRpZGF0ZSA9ICppdGVyOworICAgICAgICAgICAg
ICAgIEJ5dGVjb2RlSW5kZXggb3NyRW50cnlDYW5kaWRhdGUgPSAqaXRlcjsKIAogICAgICAgICAg
ICAgICAgIGlmIChqaXRDb2RlLT50aWVyVXBFbnRyeVRyaWdnZXJzLmdldChvc3JFbnRyeUNhbmRp
ZGF0ZSkgPT0gSklUQ29kZTo6VHJpZ2dlclJlYXNvbjo6U3RhcnRDb21waWxhdGlvbikgewogICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgYWxyZWFkeSBhc2tlZCB0aGlz
IGxvb3AgdG8gY29tcGlsZS4gSWYgd2UndmUgcmVhY2hlZCBoZXJlLCBpdApAQCAtMzc4Nyw3ICsz
Nzg3LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihWTSYgdm0sIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCB1bnNpZ25lZCBvcmlnaW5CeXRlY29kZUkKICAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIHdoZXJlIHdlIGFzayB0aGUgb3V0ZXIgdG8gbG9vcCB0byBpbW1lZGlhdGVseSBjb21waWxl
IGl0c2VsZiBpZiBwcm9ncmFtCiAgICAgICAgICAgICAgICAgLy8gY29udHJvbCByZWFjaGVzIGl0
LgogICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIklubmVyLWxvb3AgYmMjIiwgb3JpZ2luQnl0ZWNvZGVJbmRleCwg
IiBpbiAiLCAqY29kZUJsb2NrLCAiIHNldHRpbmcgcGFyZW50IGxvb3AgYmMjIiwgb3NyRW50cnlD
YW5kaWRhdGUsICIncyB0cmlnZ2VyIGFuZCBiYWNraW5nIG9mZi5cbiIpOworICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJJbm5lci1sb29wICIsIG9yaWdpbkJ5dGVjb2RlSW5kZXgsICIgaW4g
IiwgKmNvZGVCbG9jaywgIiBzZXR0aW5nIHBhcmVudCBsb29wICIsIG9zckVudHJ5Q2FuZGlkYXRl
LCAiJ3MgdHJpZ2dlciBhbmQgYmFja2luZyBvZmYuXG4iKTsKICAgICAgICAgICAgICAgICBqaXRD
b2RlLT50aWVyVXBFbnRyeVRyaWdnZXJzLnNldChvc3JFbnRyeUNhbmRpZGF0ZSwgSklUQ29kZTo6
VHJpZ2dlclJlYXNvbjo6U3RhcnRDb21waWxhdGlvbik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICB9CkBAIC0zODM3LDcgKzM4MzcsNyBAQCBzdGF0aWMgY2hhciog
dGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkIG9yaWdp
bkJ5dGVjb2RlSQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCi0gICAgQ09E
RUJMT0NLX0xPR19FVkVOVChqaXRDb2RlLT5vc3JFbnRyeUJsb2NrKCksICJvc3JFbnRyeSIsICgi
YXQgYmMjIiwgb3JpZ2luQnl0ZWNvZGVJbmRleCkpOworICAgIENPREVCTE9DS19MT0dfRVZFTlQo
aml0Q29kZS0+b3NyRW50cnlCbG9jaygpLCAib3NyRW50cnkiLCAoImF0ICIsIG9yaWdpbkJ5dGVj
b2RlSW5kZXgpKTsKICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGZvci1lbnRyeSBjb21w
aWxlIGFscmVhZHkgc3VjY2VlZGVkLiBJbiB0aGF0IGNhc2UgT1NSCiAgICAgLy8gZW50cnkgd2ls
bCBzdWNjZWVkIHVubGVzcyB3ZSByYW4gb3V0IG9mIHN0YWNrLiBJdCdzIG5vdCBjbGVhciB3aGF0
IHdlIHNob3VsZCBkby4KICAgICAvLyBXZSBzaWduYWwgdG8gdHJ5IGFnYWluIGFmdGVyIGEgd2hp
bGUgaWYgdGhhdCBoYXBwZW5zLgpAQCAtMzg1MCwxMyArMzg1MCwxNCBAQCBzdGF0aWMgY2hhciog
dGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkIG9yaWdp
bkJ5dGVjb2RlSQogICAgIHJldHVybiByZXRhZ0NvZGVQdHI8Y2hhcio+KGFkZHJlc3MsIEpTRW50
cnlQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGNhbGxGcmFtZSkpOwogfQogCi12b2lkIEpJ
VF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vd0luTG9vcChWTSogdm1Qb2ludGVyLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4KQordm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3dJbkxv
b3AoVk0qIHZtUG9pbnRlciwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleEJpdHMpCiB7CiAgICAgVk0m
IHZtID0gKnZtUG9pbnRlcjsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRzKGJ5dGVjb2RlSW5kZXhC
aXRzKTsKIAogICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7CiAKQEAgLTM4ODUsMTMgKzM4ODYs
MTQgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3dJbkxvb3AoVk0qIHZtUG9p
bnRlciwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKICAgICB9CiB9CiAKLWNoYXIqIEpJVF9PUEVS
QVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KFZNKiB2bVBvaW50ZXIsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCitjaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhWTSogdm1Qb2lu
dGVyLCB1bnNpZ25lZCBieXRlY29kZUluZGV4Qml0cykKIHsKICAgICBWTSYgdm0gPSAqdm1Qb2lu
dGVyOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIERl
ZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYnl0ZWNvZGVJbmRleEJpdHMpOwogCiAgICAg
c2FuaXRpemVTdGFja0ZvclZNKHZtKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuaAppbmRleCA0NTc5NmZmYTZkMDU5NDhmYzY2ZWRjNTNjOGIxMjQyNjFiOGExYmFi
Li45NGY0YzgyMmI1ODUwNDc4YjIyZmI3M2JiZmIxODZhZmNmM2MzYjg4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaApAQCAtMzA0LDggKzMwNCw4IEBAIGRvdWJs
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJhbmRvbShKU0dsb2JhbE9iamVjdCopOwogCiAjaWYg
RU5BQkxFKEZUTF9KSVQpCiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhWTSop
IFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93SW5Mb29w
KFZNKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgV1RGX0lOVEVSTkFMOwotY2hhciogSklUX09Q
RVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coVk0qLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KSBX
VEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vd0luTG9vcChW
TSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXhCaXRzKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRf
T1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhWTSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXhC
aXRzKSBXVEZfSU5URVJOQUw7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAKIH0gLy8gZXh0
ZXJuICJDIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKaW5kZXggMzAwMGMzMTlj
NmM4ZGM1ZjdiYTVhOTczNTU0MDMxYjhmY2JjMTRkYi4uZDQxYTNkNDk5N2MxOGFhNTZhM2QyOTg4
OTQ5YmU1MWM0NmY0N2VlZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCkBA
IC0xMzQsNyArMTM0LDcgQEAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uS2luZCBwcm9maWxlckNvbXBp
bGF0aW9uS2luZEZvck1vZGUoQ29tcGlsYXRpb25Nb2RlIG1vZGUpCiB9IC8vIGFub255bW91cyBu
YW1lc3BhY2UKIAogUGxhbjo6UGxhbihDb2RlQmxvY2sqIHBhc3NlZENvZGVCbG9jaywgQ29kZUJs
b2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywKLSAgICBDb21waWxhdGlvbk1vZGUgbW9kZSwgdW5z
aWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgIENvbXBpbGF0aW9uTW9kZSBtb2RlLCBC
eXRlY29kZUluZGV4IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKICAgICBjb25zdCBPcGVyYW5kczxP
cHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMpCiAgICAgOiBtX21vZGUobW9kZSkK
ICAgICAsIG1fdm0oJnBhc3NlZENvZGVCbG9jay0+dm0oKSkKQEAgLTI0MCw5ICsyNDAsOSBAQCBQ
bGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCgpCiB7CiAgICAg
Y2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNlc3NhcnkoKTsKIAotICAgIGlmICh2ZXJib3NlQ29t
cGlsYXRpb25FbmFibGVkKG1fbW9kZSkgJiYgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlO
VF9NQVgpIHsKKyAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZChtX21vZGUpICYmIG1f
b3NyRW50cnlCeXRlY29kZUluZGV4KSB7CiAgICAgICAgIGRhdGFMb2coIlxuIik7Ci0gICAgICAg
IGRhdGFMb2coIkNvbXBpbGVyIG11c3QgaGFuZGxlIE9TUiBlbnRyeSBmcm9tIGJjIyIsIG1fb3Ny
RW50cnlCeXRlY29kZUluZGV4LCAiIHdpdGggdmFsdWVzOiAiLCBtX211c3RIYW5kbGVWYWx1ZXMs
ICJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb21waWxlciBtdXN0IGhhbmRsZSBPU1IgZW50cnkg
ZnJvbSAiLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleCwgIiB3aXRoIHZhbHVlczogIiwgbV9tdXN0
SGFuZGxlVmFsdWVzLCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygiXG4iKTsKICAgICB9CiAKQEAg
LTcyNSw3ICs3MjUsNyBAQCB2b2lkIFBsYW46OmNsZWFuTXVzdEhhbmRsZVZhbHVlc0lmTmVjZXNz
YXJ5KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IG1f
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwotICAgIEZhc3RCaXRWZWN0b3IgbGl2ZW5lc3MgPSBh
bHRlcm5hdGl2ZS0+bGl2ZW5lc3NBbmFseXNpcygpLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVP
ZmZzZXQoYWx0ZXJuYXRpdmUsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICBGYXN0Qml0
VmVjdG9yIGxpdmVuZXNzID0gYWx0ZXJuYXRpdmUtPmxpdmVuZXNzQW5hbHlzaXMoKS5nZXRMaXZl
bmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoYWx0ZXJuYXRpdmUsIG1fb3NyRW50cnlCeXRlY29kZUlu
ZGV4KTsKIAogICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSBtX211c3RIYW5kbGVWYWx1ZXMubnVt
YmVyT2ZMb2NhbHMoKTsgbG9jYWwtLTspIHsKICAgICAgICAgaWYgKCFsaXZlbmVzc1tsb2NhbF0p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCmluZGV4IGNlZGEwNDAyMGQ4MGU2N2NhMTll
MmNmZTI5Mjk1ZmQ3MTZjNjg3NWMuLmE2YWNiMjU5ODczOWEzNDA0NzU1MDc1N2Q5YzE3MGY2NjYz
NTk2NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCkBAIC01Niw3ICs1Niw3IEBA
IGNsYXNzIFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewogcHVibGlj
OgogICAgIFBsYW4oCiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrVG9Db21waWxlLCBDb2Rl
QmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLAotICAgICAgICBDb21waWxhdGlvbk1vZGUsIHVu
c2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICAgICAgQ29tcGlsYXRpb25Nb2RlLCBC
eXRlY29kZUluZGV4IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKICAgICAgICAgY29uc3QgT3BlcmFu
ZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzKTsKICAgICB+UGxhbigpOwog
CkBAIC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNGVEwoKSBjb25zdCB7IHJl
dHVybiBERkc6OmlzRlRMKG1fbW9kZSk7IH0KICAgICBDb21waWxhdGlvbk1vZGUgbW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRW50cnlCeXRlY29kZUluZGV4OyB9CisgICAgQnl0ZWNv
ZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX29zckVudHJ5
Qnl0ZWNvZGVJbmRleDsgfQogICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYg
bXVzdEhhbmRsZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fbXVzdEhhbmRsZVZhbHVlczsgfQog
ICAgIFRocmVhZERhdGEqIHRocmVhZERhdGEoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZERhdGE7
IH0KICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9jb21waWxhdGlvbi5nZXQoKTsgfQpAQCAtMTA2LDggKzEwNiw4IEBAIHB1YmxpYzoKICAg
ICBib29sIHdpbGxUcnlUb1RpZXJVcCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lsbFRyeVRvVGllclVw
OyB9CiAgICAgdm9pZCBzZXRXaWxsVHJ5VG9UaWVyVXAoYm9vbCB3aWxsVHJ5VG9UaWVyVXApIHsg
bV93aWxsVHJ5VG9UaWVyVXAgPSB3aWxsVHJ5VG9UaWVyVXA7IH0KIAotICAgIEhhc2hNYXA8dW5z
aWduZWQsIFZlY3Rvcjx1bnNpZ25lZD4+JiB0aWVyVXBJbkxvb3BIaWVyYXJjaHkoKSB7IHJldHVy
biBtX3RpZXJVcEluTG9vcEhpZXJhcmNoeTsgfQotICAgIFZlY3Rvcjx1bnNpZ25lZD4mIHRpZXJV
cEFuZE9TUkVudGVyQnl0ZWNvZGVzKCkgeyByZXR1cm4gbV90aWVyVXBBbmRPU1JFbnRlckJ5dGVj
b2RlczsgfQorICAgIEhhc2hNYXA8Qnl0ZWNvZGVJbmRleCwgVmVjdG9yPEJ5dGVjb2RlSW5kZXg+
PiYgdGllclVwSW5Mb29wSGllcmFyY2h5KCkgeyByZXR1cm4gbV90aWVyVXBJbkxvb3BIaWVyYXJj
aHk7IH0KKyAgICBWZWN0b3I8Qnl0ZWNvZGVJbmRleD4mIHRpZXJVcEFuZE9TUkVudGVyQnl0ZWNv
ZGVzKCkgeyByZXR1cm4gbV90aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2RlczsgfQogCiAgICAgZW51
bSBTdGFnZSB7IFByZXBhcmluZywgQ29tcGlsaW5nLCBSZWFkeSwgQ2FuY2VsbGVkIH07CiAgICAg
U3RhZ2Ugc3RhZ2UoKSBjb25zdCB7IHJldHVybiBtX3N0YWdlOyB9CkBAIC0xNDMsNyArMTQzLDcg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV93aWxsVHJ5VG9UaWVyVXAgeyBmYWxzZSB9OwogCi0g
ICAgY29uc3QgdW5zaWduZWQgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXg7CisgICAgY29uc3QgQnl0
ZWNvZGVJbmRleCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleDsKIAogICAgIFRocmVhZERhdGEqIG1f
dGhyZWFkRGF0YTsKIApAQCAtMTU5LDggKzE1OSw4IEBAIHByaXZhdGU6CiAgICAgRGVzaXJlZEds
b2JhbFByb3BlcnRpZXMgbV9nbG9iYWxQcm9wZXJ0aWVzOwogICAgIFJlY29yZGVkU3RhdHVzZXMg
bV9yZWNvcmRlZFN0YXR1c2VzOwogCi0gICAgSGFzaE1hcDx1bnNpZ25lZCwgVmVjdG9yPHVuc2ln
bmVkPj4gbV90aWVyVXBJbkxvb3BIaWVyYXJjaHk7Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiBtX3Rp
ZXJVcEFuZE9TUkVudGVyQnl0ZWNvZGVzOworICAgIEhhc2hNYXA8Qnl0ZWNvZGVJbmRleCwgVmVj
dG9yPEJ5dGVjb2RlSW5kZXg+PiBtX3RpZXJVcEluTG9vcEhpZXJhcmNoeTsKKyAgICBWZWN0b3I8
Qnl0ZWNvZGVJbmRleD4gbV90aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2RlczsKIAogICAgIFN0YWdl
IG1fc3RhZ2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcAppbmRleCBmYjllNDcwYjQ3ZTk2NTM0NGUwOWRjNjExNThkZWM2YjEy
ZGJlM2ViLi40MzZlNWQzOTE0YjMyMzVhMDI0N2ZjNDE4NDcxNjMxMWQ2NzY4NjUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
CkBAIC05NywxNCArOTcsMTQgQEAgcHVibGljOgogCiAgICAgICAgICAgICAgICAgaWYgKG9sZFJv
b3QtPmlzQ2F0Y2hFbnRyeXBvaW50KSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghIWVu
dHJ5cG9pbnRJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9lbnRyeXBvaW50
SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQuYWRkKGVudHJ5cG9pbnRJbmRleCwgb2xkUm9vdC0+
Ynl0ZWNvZGVCZWdpbik7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9lbnRyeXBvaW50
SW5kZXhUb0NhdGNoQnl0ZWNvZGVJbmRleC5hZGQoZW50cnlwb2ludEluZGV4LCBvbGRSb290LT5i
eXRlY29kZUJlZ2luKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5U3dpdGNoRGF0YS0+Y2FzZXNbMF0gPT0gbV9ncmFw
aC5ibG9jaygwKSk7IC8vIFdlIHN0cm9uZ2x5IGFzc3VtZSB0aGUgbm9ybWFsIGNhbGwgZW50cnlw
b2ludCBpcyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC4KIAogICAgICAgICAgICAgY29uc3Qg
Ym9vbCBleGl0T0sgPSBmYWxzZTsKLSAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luIHsgQ29k
ZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgZXhpdE9LIH07CisgICAgICAgICAgICBOb2RlT3Jp
Z2luIG9yaWdpbiB7IENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSksIENvZGVPcmlnaW4oQnl0
ZWNvZGVJbmRleCgwKSksIGV4aXRPSyB9OwogICAgICAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9k
ZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgRW50cnlTd2l0Y2gsIG9yaWdp
biwgT3BJbmZvKGVudHJ5U3dpdGNoRGF0YSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDNkYWVjNDM5NGU3M2JjODZjMWNjMzcw
OGZmMTk5ZmExNDNmODlhYTYuLjQ3NDE2MTRjNTdiZDhjOWJlNjBlNjhmM2MyYTQyZWE3MDQ1NzUx
MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCkBAIC0xODYyLDEzICsxODYyLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1
cnJlbnRCbG9jaygpCiAgICAgICAgIAogICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9u
RW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nRigKLSAgICAgICAgICAgICAgICAiU3Bl
Y3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQgMHgl
eCIsCi0gICAgICAgICAgICAgICAgKGludCltX2N1cnJlbnROb2RlLT5pbmRleCgpLAotICAgICAg
ICAgICAgICAgIG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCks
IG1faml0LmRlYnVnT2Zmc2V0KCkpOwotICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKLSAgICAg
ICAgfQorICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQorICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCIsIChpbnQpbV9j
dXJyZW50Tm9kZS0+aW5kZXgoKSwgIiAoIiwgbV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGlj
LmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSwgIikgYXQgSklUIG9mZnNldCAweCIsIG1faml0LmRl
YnVnT2Zmc2V0KCkpOwogCiAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlv
bkhhbmRsaW5nKCkgJiYgKG1heUV4aXQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSkgIT0g
RG9lc05vdEV4aXQgfHwgbV9jdXJyZW50Tm9kZS0+aXNUZXJtaW5hbCgpKSkKICAgICAgICAgICAg
IG1faml0LmppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbihtX2ppdC52bSgpKTsKQEAgLTE5MDUs
NyArMTkwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkKIHsKICAgICBBU1NFUlQo
IW1fY3VycmVudE5vZGUpOwotICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDAp
LCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKKyAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9y
aWdpbihCeXRlY29kZUluZGV4KDApKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSwgdHJ1
ZSk7CiAKICAgICBhdXRvJiBhcmd1bWVudHMgPSBtX2ppdC5ncmFwaCgpLm1fcm9vdFRvQXJndW1l
bnRzLmZpbmQobV9qaXQuZ3JhcGgoKS5ibG9jaygwKSktPnZhbHVlOwogICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgKytpKSB7CkBAIC0z
OTk4LDggKzM5OTMsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9k
ZSogbm9kZSkKICNlbmRpZgogCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1f
aml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
LSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVj
b2RlSW5kZXgoKTsKLSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4KTsKKyAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0
ZWNvZGVJbmRleCgpOworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVD
b2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAg
ICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVEFkZElDKGFyaXRo
UHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFk
ZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFs
dWVBZGQ7CkBAIC00MDIyLDggKzQwMTcsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
VmFsdWVTdWIoTm9kZSogbm9kZSkKICNlbmRpZgogCiAgICAgICAgIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBub2RlLT5v
cmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICBBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9m
ZnNldChieXRlY29kZUluZGV4KTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9y
Qnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICAgICAgSklUU3ViSUMqIHN1YklDID0g
bV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGF1
dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZTsKICAgICAg
ICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1YjsKQEAgLTQ2
MTYsOCArNDYxMSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1YihOb2Rl
KiBub2RlKQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTmVnYXRlKE5vZGUqIG5v
ZGUpCiB7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCku
YmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICB1bnNpZ25l
ZCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsK
LSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0
aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4KTsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgp
OworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFy
aXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgSklUTmVnSUMq
IG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAg
ICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXpl
OwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGU7
CkBAIC00ODM5LDggKzQ4MzQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVN
dWwoTm9kZSogbm9kZSkKICNlbmRpZgogCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKLSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2Vs
aW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4
KTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50
aWMuYnl0ZWNvZGVJbmRleCgpOworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFz
ZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRl
eCk7CiAgICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE11bElD
KGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25W
YWx1ZU11bE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0
aW9uVmFsdWVNdWw7CkBAIC0xMDczMSw3ICsxMDcyNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRTd2l0Y2hDaGFyU3RyaW5nSnVtcChOb2RlKiBub2RlLCBTd2l0Y2hEYXRhKiBkYXRhLCBH
UFJSCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoLCBTdHJpbmdJ
bXBsOjpsZW5ndGhNZW1vcnlPZmZzZXQoKSksCiAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoMSkp
LAogICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7Ci0KKyAgICAKICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gsIFN0cmluZ0ltcGw6OmRhdGFP
ZmZzZXQoKSksIHZhbHVlKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBpczhCaXQgPSBt
X2ppdC5icmFuY2hUZXN0MzIoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCAwNjRkZTcxZTA5MmU5ZjUyNDEyOTY1ZTFjZTkzYmIz
YWU2NTg2NWJlLi5mNzU3OWZjOWI4MjU0YTA4YmE4MjMxY2U2ODQyNDY0YThjNDg4Yzc3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
QEAgLTUwNzksMTMgKzUwNzksMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogCiAgICAgICAgIFZlY3RvcjxTaWxlbnRSZWdpc3RlclNhdmVQbGFuPiBzYXZlUGxh
bnM7CiAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzSW1wbChmYWxzZSwgc2F2ZVBsYW5z
LCBJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAK
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3JMYW1iZGEoWz1dKCkgewogICAgICAgICAgICAg
Y2FsbFRpZXJVcC5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgIHNpbGVudFNwaWxsKHNhdmVQ
bGFucyk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKHRyaWdnZXJUaWVyVXBOb3dJbkxvb3As
ICZ2bSgpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbih0cmlnZ2VyVGllclVwTm93SW5Mb29wLCAmdm0oKSwgVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlSW5kZXguYXNCaXRzKCkpKTsKICAgICAgICAgICAgIHNpbGVudEZpbGwoc2F2ZVBsYW5zKTsK
IAogICAgICAgICAgICAgbV9qaXQuanVtcCgpLmxpbmtUbyh0b05leHRPcGVyYXRpb24sICZtX2pp
dCk7CkBAIC01MTEzLDcgKzUxMTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICBHUFJS
ZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CiAKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUlu
ZGV4KCk7CiAgICAgICAgIGF1dG8gdHJpZ2dlckl0ZXJhdG9yID0gbV9qaXQuaml0Q29kZSgpLT50
aWVyVXBFbnRyeVRyaWdnZXJzLmZpbmQoYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIERGR19BU1NF
UlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgdHJpZ2dlckl0ZXJhdG9yICE9IG1faml0LmppdENvZGUo
KS0+dGllclVwRW50cnlUcmlnZ2Vycy5lbmQoKSk7CiAgICAgICAgIEpJVENvZGU6OlRyaWdnZXJS
ZWFzb24qIGZvcmNlRW50cnlUcmlnZ2VyID0gJihtX2ppdC5qaXRDb2RlKCktPnRpZXJVcEVudHJ5
VHJpZ2dlcnMuZmluZChieXRlY29kZUluZGV4KS0+dmFsdWUpOwpAQCAtNTEzOCw3ICs1MTM4LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
b3ZlcmZsb3dlZENvdW50ZXIubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICBzaWxlbnRTcGls
bChzYXZlUGxhbnMpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbih0cmlnZ2VyT1NSRW50cnlO
b3csIHRlbXBHUFIsICZ2bSgpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleCkpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbih0cmlnZ2VyT1NSRW50cnlOb3csIHRlbXBHUFIsICZ2bSgpLCBU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSkpOwogCiAgICAgICAgICAgICBpZiAo
c2F2ZVBsYW5zLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSKS5saW5rVG8odG9OZXh0T3BlcmF0aW9uLCAm
bV9qaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBD
aGVja0luamVjdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGll
clVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAKaW5kZXggMWJhZGM1N2MwYjkyYjIzYWQwZjg0ZDgx
MjlhZjExYWM4YjI3N2UyMy4uZjVkNzNjMTA5YmM3MTcwNzEyMGFmMGUxZjhhNGZhYmQ0MmY5NDM2
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0lu
amVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJV
cENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCkBAIC04NSw5ICs4NSw5IEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgICAgIG1fZ3JhcGguZW5zdXJlQ1BTTmF0dXJhbExvb3BzKCk7CiAgICAgICAgIENQ
U05hdHVyYWxMb29wcyYgbmF0dXJhbExvb3BzID0gKm1fZ3JhcGgubV9jcHNOYXR1cmFsTG9vcHM7
Ci0gICAgICAgIEhhc2hNYXA8Y29uc3QgTmF0dXJhbExvb3AqLCB1bnNpZ25lZD4gbmF0dXJhbExv
b3BUb0xvb3BIaW50ID0gYnVpbGROYXR1cmFsTG9vcFRvTG9vcEhpbnRNYXAobmF0dXJhbExvb3Bz
KTsKKyAgICAgICAgSGFzaE1hcDxjb25zdCBOYXR1cmFsTG9vcCosIEJ5dGVjb2RlSW5kZXg+IG5h
dHVyYWxMb29wVG9Mb29wSGludCA9IGJ1aWxkTmF0dXJhbExvb3BUb0xvb3BIaW50TWFwKG5hdHVy
YWxMb29wcyk7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgTG9vcEhpbnREZXNjcmlwdG9y
PiB0aWVyVXBIaWVyYXJjaHk7CisgICAgICAgIEhhc2hNYXA8Qnl0ZWNvZGVJbmRleCwgTG9vcEhp
bnREZXNjcmlwdG9yPiB0aWVyVXBIaWVyYXJjaHk7CiAKICAgICAgICAgSW5zZXJ0aW9uU2V0IGlu
c2VydGlvblNldChtX2dyYXBoKTsKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CkBAIC0xMDgsNyArMTA4LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICB0aWVyVXBUeXBlID0gQ2hlY2tUaWVyVXBJ
bkxvb3A7CiAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4
ICsgMSwgU3BlY05vbmUsIHRpZXJVcFR5cGUsIG9yaWdpbik7CiAKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBieXRlY29kZUluZGV4ID0gb3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsK
KyAgICAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBvcmlnaW4uc2VtYW50aWMuYnl0
ZWNvZGVJbmRleCgpOwogICAgICAgICAgICAgICAgIGlmIChjYW5PU1JFbnRlcikKICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4udGllclVwQW5kT1NSRW50ZXJCeXRlY29kZXMoKS5h
cHBlbmQoYnl0ZWNvZGVJbmRleCk7CiAKQEAgLTEzOCw4ICsxMzgsOCBAQCBwdWJsaWM6CiAKICAg
ICAgICAgLy8gQWRkIGFsbCB0aGUgY2FuZGlkYXRlcyB0aGF0IGNhbiBiZSBPU1IgRW50ZXJlZC4K
ICAgICAgICAgZm9yIChhdXRvIGVudHJ5IDogdGllclVwSGllcmFyY2h5KSB7Ci0gICAgICAgICAg
ICBWZWN0b3I8dW5zaWduZWQ+IHRpZXJVcENhbmRpZGF0ZXM7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXggOiBlbnRyeS52YWx1ZS5vc3JFbnRyeUNhbmRpZGF0ZXMpIHsK
KyAgICAgICAgICAgIFZlY3RvcjxCeXRlY29kZUluZGV4PiB0aWVyVXBDYW5kaWRhdGVzOworICAg
ICAgICAgICAgZm9yIChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggOiBlbnRyeS52YWx1ZS5v
c3JFbnRyeUNhbmRpZGF0ZXMpIHsKICAgICAgICAgICAgICAgICBhdXRvIGRlc2NyaXB0b3JJdCA9
IHRpZXJVcEhpZXJhcmNoeS5maW5kKGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIGlm
IChkZXNjcmlwdG9ySXQgIT0gdGllclVwSGllcmFyY2h5LmVuZCgpCiAgICAgICAgICAgICAgICAg
ICAgICYmIGRlc2NyaXB0b3JJdC0+dmFsdWUuY2FuT1NSRW50ZXIpCkBAIC0xNjAsNyArMTYwLDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBzdHJ1Y3QgTG9v
cEhpbnREZXNjcmlwdG9yIHsKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBvc3JFbnRyeUNhbmRp
ZGF0ZXM7CisgICAgICAgIFZlY3RvcjxCeXRlY29kZUluZGV4PiBvc3JFbnRyeUNhbmRpZGF0ZXM7
CiAgICAgICAgIGJvb2wgY2FuT1NSRW50ZXI7CiAgICAgfTsKIApAQCAtMTgzLDkgKzE4Myw5IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEhhc2hNYXA8Y29u
c3QgTmF0dXJhbExvb3AqLCB1bnNpZ25lZD4gYnVpbGROYXR1cmFsTG9vcFRvTG9vcEhpbnRNYXAo
Y29uc3QgQ1BTTmF0dXJhbExvb3BzJiBuYXR1cmFsTG9vcHMpCisgICAgSGFzaE1hcDxjb25zdCBO
YXR1cmFsTG9vcCosIEJ5dGVjb2RlSW5kZXg+IGJ1aWxkTmF0dXJhbExvb3BUb0xvb3BIaW50TWFw
KGNvbnN0IENQU05hdHVyYWxMb29wcyYgbmF0dXJhbExvb3BzKQogICAgIHsKLSAgICAgICAgSGFz
aE1hcDxjb25zdCBOYXR1cmFsTG9vcCosIHVuc2lnbmVkPiBuYXR1cmFsTG9vcHNUb0xvb3BIaW50
OworICAgICAgICBIYXNoTWFwPGNvbnN0IE5hdHVyYWxMb29wKiwgQnl0ZWNvZGVJbmRleD4gbmF0
dXJhbExvb3BzVG9Mb29wSGludDsKIAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4
KSB7CkBAIC0xOTQsNyArMTk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgICAgICAgICBpZiAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBu
YXR1cmFsTG9vcHMuaW5uZXJNb3N0TG9vcE9mKGJsb2NrKSkgewotICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2Rl
SW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAg
ICAgICAgbmF0dXJhbExvb3BzVG9Mb29wSGludC5hZGQobG9vcCwgYnl0ZWNvZGVJbmRleCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JP
U1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKaW5kZXggOGRiNmRiZThjNjky
YmIxMzA4NjMzYzA0MTg2YTYyYmU4YWM1MGZkOC4uYTQyOTQ5YzhmMWYxOGVjZTYwMDU4ZDEwZTdh
OTYwODNjOTE2YmU4YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
b0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suY3BwCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgVG9GVExGb3JPU1JFbnRyeURl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0ZSgKICAgICBz
d2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOiB7CiAgICAg
ICAgIGppdENvZGUtPnNldE9TUkVudHJ5QmxvY2soY29kZUJsb2NrLT52bSgpLCBwcm9maWxlZERG
R0NvZGVCbG9jaywgY29kZUJsb2NrKTsKLSAgICAgICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29k
ZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5mdGxGb3JPU1JFbnRyeSgpLT5ieXRlY29kZUluZGV4
KCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggb3NyRW50cnlCeXRlY29kZSA9IGNvZGVCbG9jay0+
aml0Q29kZSgpLT5mdGxGb3JPU1JFbnRyeSgpLT5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgIGpp
dENvZGUtPnRpZXJVcEVudHJ5VHJpZ2dlcnMuc2V0KG9zckVudHJ5Qnl0ZWNvZGUsIEpJVENvZGU6
OlRyaWdnZXJSZWFzb246OkNvbXBpbGF0aW9uRG9uZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKaW5kZXggOGMwNDE5MWRl
ZTY0MzNhMGE1MjdiNjVjMjVmMGZkOGI3NDhkNDVhZi4uZWY4NWI0MjNkYTYwYWIwZWM1NzVhYTk0
ZDk2MzhiMTMwMjBhN2Q3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAKQEAgLTc4MCw3ICs3ODAsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGF1dG8mIGRvbWlu
YXRvcnMgPSBtX2dyYXBoLmVuc3VyZVNTQURvbWluYXRvcnMoKTsKIAotICAgICAgICBmb3IgKHVu
c2lnbmVkIGVudHJ5cG9pbnRJbmRleCA6IG1fZ3JhcGgubV9lbnRyeXBvaW50SW5kZXhUb0NhdGNo
Qnl0ZWNvZGVPZmZzZXQua2V5cygpKQorICAgICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJ
bmRleCA6IG1fZ3JhcGgubV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVJbmRleC5rZXlz
KCkpCiAgICAgICAgICAgICBWQUxJREFURSgoKSwgZW50cnlwb2ludEluZGV4ID4gMCk7IC8vIEJ5
IGNvbnZlbnRpb24sIDAgaXMgdGhlIGVudHJ5cG9pbnQgaW5kZXggZm9yIHRoZSBvcF9lbnRlciBl
bnRyeXBvaW50LCB3aGljaCBjYW4gbm90IGJlIGluIGEgY2F0Y2guCiAKICAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3Mo
KTsgKytibG9ja0luZGV4KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNw
cAppbmRleCA0ZDRiMWViNmZkMzcwNDEyYTk0Y2M3MThmNGFlMjVkMjc1ZDQyNjRhLi5kZTMyNmJl
Y2EzZDVkZjk4MWY5YTlmMDdiNDQ4ZjBmZjU3MWQ2Y2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ29tcGlsZS5jcHAKQEAgLTE1NywxMiArMTU3LDEyIEBAIHZvaWQgY29tcGlsZShT
dGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmVzdWx0JiBzYWZlcG9pbnRSZXN1bHQpCiAgICAgc3Rh
dGUuZ2VuZXJhdGVkRnVuY3Rpb24gPSBsYWJlbDsKICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFs
aXplQjNCeXByb2R1Y3RzKHN0YXRlLnByb2MtPnJlbGVhc2VCeXByb2R1Y3RzKCkpOwogCi0gICAg
Zm9yIChhdXRvIHBhaXIgOiBzdGF0ZS5ncmFwaC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRl
Y29kZU9mZnNldCkgewotICAgICAgICB1bnNpZ25lZCBjYXRjaEJ5dGVjb2RlT2Zmc2V0ID0gcGFp
ci52YWx1ZTsKKyAgICBmb3IgKGF1dG8gcGFpciA6IHN0YXRlLmdyYXBoLm1fZW50cnlwb2ludElu
ZGV4VG9DYXRjaEJ5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBjYXRjaEJ5
dGVjb2RlSW5kZXggPSBwYWlyLnZhbHVlOwogICAgICAgICB1bnNpZ25lZCBlbnRyeXBvaW50SW5k
ZXggPSBwYWlyLmtleTsKICAgICAgICAgVmVjdG9yPEZsdXNoRm9ybWF0PiBhcmd1bWVudEZvcm1h
dHMgPSBzdGF0ZS5ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tlbnRyeXBvaW50SW5kZXhdOwogICAg
ICAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24uYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KAotICAgICAg
ICAgICAgY2F0Y2hCeXRlY29kZU9mZnNldCwgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVm
ZmVyLT5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KHN0YXRlLnByb2MtPmVudHJ5
cG9pbnRMYWJlbChlbnRyeXBvaW50SW5kZXgpKSwgV1RGTW92ZShhcmd1bWVudEZvcm1hdHMpKTsK
KyAgICAgICAgICAgIGNhdGNoQnl0ZWNvZGVJbmRleCwgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVM
aW5rQnVmZmVyLT5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KHN0YXRlLnByb2Mt
PmVudHJ5cG9pbnRMYWJlbChlbnRyeXBvaW50SW5kZXgpKSwgV1RGTW92ZShhcmd1bWVudEZvcm1h
dHMpKTsKICAgICB9CiAgICAgc3RhdGUuaml0Q29kZS0+Y29tbW9uLmZpbmFsaXplQ2F0Y2hFbnRy
eXBvaW50cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZv
ck9TUkVudHJ5SklUQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JF
bnRyeUpJVENvZGUuaAppbmRleCBhZjJjZDExMzM5Zjk1YzZmZDE1YTdlMjMwNGVmNDE1OThmNDU1
NjZmLi4yNjg5ZDNhNzE2Yjc1M2Y1ZDY4MmNlZDBjYzU0NzE1ZjhhNzU5N2ExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgKQEAgLTQ4
LDggKzQ4LDggQEAgcHVibGljOgogICAgIHZvaWQgaW5pdGlhbGl6ZUVudHJ5QnVmZmVyKFZNJiwg
dW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKTsKICAgICBTY3JhdGNoQnVmZmVyKiBlbnRyeUJ1ZmZl
cigpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlCdWZmZXI7IH0KICAgICAKLSAgICB2b2lkIHNldEJ5
dGVjb2RlSW5kZXgodW5zaWduZWQgdmFsdWUpIHsgbV9ieXRlY29kZUluZGV4ID0gdmFsdWU7IH0K
LSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUlu
ZGV4OyB9CisgICAgdm9pZCBzZXRCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggdmFsdWUpIHsg
bV9ieXRlY29kZUluZGV4ID0gdmFsdWU7IH0KKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KICAgICAKICAgICB2b2lkIGNv
dW50RW50cnlGYWlsdXJlKCkgeyBtX2VudHJ5RmFpbHVyZUNvdW50Kys7IH0KICAgICB1bnNpZ25l
ZCBlbnRyeUZhaWx1cmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlGYWlsdXJlQ291bnQ7
IH0KQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIAogcHJpdmF0ZToKICAgICBTY3JhdGNo
QnVmZmVyKiBtX2VudHJ5QnVmZmVyOyAvLyBPbmx5IGZvciBPU1IgZW50cnkgY29kZSBibG9ja3Mu
Ci0gICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4OworICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRl
Y29kZUluZGV4OwogICAgIHVuc2lnbmVkIG1fZW50cnlGYWlsdXJlQ291bnQ7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggN2VmNDE3
OTlmNGYyZDU3NDIwZDg5ZTA1ZTRmYzY1MzI0N2Y0MGRkNS4uOGEwMGQ5NjYzZmUzZDYxNmEwZjFl
ZWU4YWRlNjRmOTNiMWZkMTNmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcApAQCAtMjExLDcgKzIxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjb2RlQmxvY2ssIENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2F0Y2hFbnRyeXBvaW50SW5kZXggOiBtX2dyYXBoLm1fZW50cnlwb2ludElu
ZGV4VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0LmtleXMoKSkgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjYXRjaEVudHJ5cG9pbnRJbmRleCA6IG1fZ3JhcGgubV9lbnRyeXBvaW50SW5kZXhUb0Nh
dGNoQnl0ZWNvZGVJbmRleC5rZXlzKCkpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChjYXRjaEVudHJ5cG9pbnRJbmRleCAhPSAwKTsKICAgICAgICAgICAgICAgICBtX3Byb2MuY29k
ZSgpLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludChjYXRjaEVudHJ5cG9pbnRJbmRleCwgY2F0Y2hQ
cm9sb2d1ZUdlbmVyYXRvci5jb3B5UmVmKCkpOwogICAgICAgICAgICAgfQpAQCAtMjgwLDcgKzI4
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgZXhpdEZyYW1lU2l6ZSA9IG1fZ3JhcGgu
cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyBhZGRyZXNzT2ZTdGFja0xpbWl0KHZt
LT5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKTsKICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBz
dGFja092ZXJmbG93SGFuZGxlciA9IG1fb3V0LnBhdGNocG9pbnQoVm9pZCk7Ci0gICAgICAgIENh
bGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlSW5kZXhGb3JDb2RlT3JpZ2luKG1f
ZnRsU3RhdGUsIENvZGVPcmlnaW4oMCkpOworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXggPSBjYWxsU2l0ZUluZGV4Rm9yQ29kZU9yaWdpbihtX2Z0bFN0YXRlLCBDb2RlT3JpZ2lu
KEJ5dGVjb2RlSW5kZXgoMCkpKTsKICAgICAgICAgc3RhY2tPdmVyZmxvd0hhbmRsZXItPmFwcGVu
ZFNvbWVSZWdpc3RlcihtX2NhbGxGcmFtZSk7CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dIYW5kbGVy
LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CiAgICAgICAg
IHN0YWNrT3ZlcmZsb3dIYW5kbGVyLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwpAQCAtMzUx
LDcgKzM1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9ub2Rl
ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2lu
KDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKKyAgICAgICAgICAgIG1fb3JpZ2luID0gTm9kZU9y
aWdpbihDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5k
ZXgoMCkpLCB0cnVlKTsKIAogICAgICAgICAgICAgLy8gQ2hlY2sgQXJndW1lbnRzLgogICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKQEAgLTIxMTAsOCArMjExMCw4IEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
ID0gbV9mdGxTdGF0ZS5ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBtX25vZGUtPm9yaWdp
bi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0
KGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBt
X25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIEFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0
aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICAgICAgYXV0byBub25SZXBhdGNo
aW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZDsKICAgICAgICAgY29tcGlsZUJpbmFyeU1h
dGhJQzxKSVRBZGRHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBu
b25SZXBhdGNoaW5nRnVuY3Rpb24pOwpAQCAtMjEzMSw4ICsyMTMxLDggQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogCiAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2Z0bFN0
YXRlLmdyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
LSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBi
YXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRl
eChieXRlY29kZUluZGV4KTsKICAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVy
YXRpb25WYWx1ZVN1Yk9wdGltaXplOwogICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlv
biA9IG9wZXJhdGlvblZhbHVlU3ViOwogICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVFN1
YkdlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hp
bmdGdW5jdGlvbik7CkBAIC0yMTUyLDggKzIxNTIsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAK
ICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1fZnRsU3RhdGUuZ3JhcGgu
YmFzZWxpbmVDb2RlQmxvY2tGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICB1
bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpOwotICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4KTsKKyAg
ICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMuYnl0ZWNvZGVJbmRleCgpOworICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
SW5kZXgpOwogICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVl
TXVsT3B0aW1pemU7CiAgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0
aW9uVmFsdWVNdWw7CiAgICAgICAgIGNvbXBpbGVCaW5hcnlNYXRoSUM8SklUTXVsR2VuZXJhdG9y
Pihhcml0aFByb2ZpbGUsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
KTsKQEAgLTI0MTUsOCArMjQxNSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2Z0bFN0YXRlLmdyYXBoLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29k
ZUluZGV4KCk7Ci0gICAgICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2Vs
aW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4
KTsKKyAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgICAgIEFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlv
biA9IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemU7CiAgICAgICAgICAgICBhdXRvIG5vblJlcGF0
Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViOwogICAgICAgICAgICAgY29tcGlsZUJp
bmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0
aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwpAQCAtMzA5Myw4ICszMDkzLDggQEAgcHJpdmF0
ZToKICAgICB7CiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX25vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKICAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IG1fZnRsU3RhdGUuZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0g
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICBBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JC
eXRlY29kZU9mZnNldChieXRlY29kZUluZGV4KTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4ID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOworICAg
ICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0
aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBhdXRvIHJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemU7CiAgICAgICAg
IGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGU7CiAgICAg
ICAgIGNvbXBpbGVVbmFyeU1hdGhJQzxKSVROZWdHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVw
YXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAppbmRleCBjMTc1NzM3NWI3YWEzZTg3MzRjODIyMzlh
NTIxNzQ2NzBlY2Y5NzE5Li45MzMxNzcxMGY2ZDA2ODYwOTE5YmMwMDI1MzEzYTEzMjE5MDQ0OTE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcApAQCAtNDEsNyAr
NDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiBTVVBQUkVTU19BU0FOCiB2
b2lkKiBwcmVwYXJlT1NSRW50cnkoCiAgICAgVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogZW50cnlDb2RlQmxvY2ssCi0gICAg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgc3RyZWFtSW5kZXgpCisgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBzdHJlYW1JbmRleCkKIHsKICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lID0gZGZnQ29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKICAgICBF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGRmZ0NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCk7CkBAIC01NSw3ICs1NSw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICAKICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAg
ICAiRlRMIE9TUiBmcm9tICIsICpkZmdDb2RlQmxvY2ssICIgdG8gIiwgKmVudHJ5Q29kZUJsb2Nr
LCAiIGF0IGJjIyIsCisgICAgICAgICAgICAiRlRMIE9TUiBmcm9tICIsICpkZmdDb2RlQmxvY2ss
ICIgdG8gIiwgKmVudHJ5Q29kZUJsb2NrLCAiIGF0ICIsCiAgICAgICAgICAgICBieXRlY29kZUlu
ZGV4LCAiLlxuIik7CiAgICAgfQogICAgIApAQCAtNjQsNyArNjQsNyBAQCB2b2lkKiBwcmVwYXJl
T1NSRW50cnkoCiAKICAgICBpZiAoYnl0ZWNvZGVJbmRleCAhPSBlbnRyeUNvZGUtPmJ5dGVjb2Rl
SW5kZXgoKSkgewogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAg
ICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFuIGVudHJ5
cG9pbnQgZm9yIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICI7IG91cnMgaXMgZm9yIGJjIyIsIGVudHJ5
Q29kZS0+Ynl0ZWNvZGVJbmRleCgpLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBP
U1IgZmFpbGVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbiBlbnRyeXBvaW50IGZvciAiLCBieXRl
Y29kZUluZGV4LCAiOyBvdXJzIGlzIGZvciAiLCBlbnRyeUNvZGUtPmJ5dGVjb2RlSW5kZXgoKSwg
IlxuIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKQEAgLTc5LDcgKzc5LDcgQEAg
dm9pZCogcHJlcGFyZU9TUkVudHJ5KAogICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiByZWNvbnN0
cnVjdGVkVmFsdWUgPSB2YWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICBpZiAoKHJl
Y29uc3RydWN0ZWRWYWx1ZSAmJiB2YWx1ZU9uU3RhY2sgPT0gcmVjb25zdHJ1Y3RlZFZhbHVlLnZh
bHVlKCkpIHx8ICFhcmd1bWVudCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkYXRh
TG9nKCJNaXNtYXRjaCBiZXR3ZWVuIHJlY29uc3RydWN0ZWQgdmFsdWVzIGFuZCB0aGUgdmFsdWUg
b24gdGhlIHN0YWNrIGZvciBhcmd1bWVudCBhcmciLCBhcmd1bWVudCwgIiBmb3IgIiwgKmVudHJ5
Q29kZUJsb2NrLCAiIGF0IGJjIyIsIGJ5dGVjb2RlSW5kZXgsICI6XG4iKTsKKyAgICAgICAgZGF0
YUxvZygiTWlzbWF0Y2ggYmV0d2VlbiByZWNvbnN0cnVjdGVkIHZhbHVlcyBhbmQgdGhlIHZhbHVl
IG9uIHRoZSBzdGFjayBmb3IgYXJndW1lbnQgYXJnIiwgYXJndW1lbnQsICIgZm9yICIsICplbnRy
eUNvZGVCbG9jaywgIiBhdCAiLCBieXRlY29kZUluZGV4LCAiOlxuIik7CiAgICAgICAgIGRhdGFM
b2coIiAgICBWYWx1ZSBvbiBzdGFjazogIiwgdmFsdWVPblN0YWNrLCAiXG4iKTsKICAgICAgICAg
ZGF0YUxvZygiICAgIFJlY29uc3RydWN0ZWQgdmFsdWU6ICIsIHJlY29uc3RydWN0ZWRWYWx1ZSwg
IlxuIik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmgKaW5kZXggM2QxMjNmYmVkN2NiMjJkMjM0OTE1YmI4
ZmI5YmJjMjUyZTY0MGQ3Yi4uNjRlY2Y3NWZlZTMyZTgyY2YxY2ZhZWI3NjQ4ZTAyZjEwMmMxZjJk
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaApAQCAtMzYsNyArMzYs
NyBAQCBjbGFzcyBWTTsKIG5hbWVzcGFjZSBGVEwgewogCiB2b2lkKiBwcmVwYXJlT1NSRW50cnko
Ci0gICAgVk0mLCBDYWxsRnJhbWUqLCBDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2Nr
KiBlbnRyeUNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwKKyAgICBWTSYsIENhbGxG
cmFtZSosIENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGVudHJ5Q29kZUJsb2Nr
LCBCeXRlY29kZUluZGV4LAogICAgIHVuc2lnbmVkIHN0cmVhbUluZGV4KTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmNwcAppbmRleCA1MjMyMDU4NjFjY2YwNDkxZTIyMDcxOWM1NzM5YzUzZjA2ZWNh
ODI0Li43OGVkMGJmMGQ4YTQ1ZjQzM2JhMjliMmQzMThhODUzZTA2MTZhOWJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtOTgsMTIg
Kzk4LDEyIEBAIFNVUFBSRVNTX0FTQU4gdW5zaWduZWQgQ2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0
ZUFzUmF3Qml0cygpIGNvbnN0CiAKIENhbGxTaXRlSW5kZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUlu
ZGV4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChjYWxsU2l0ZUFzUmF3Qml0
cygpKTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGNhbGxTaXRlQXNS
YXdCaXRzKCkpKTsKIH0KIAogU1VQUFJFU1NfQVNBTiBDYWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6
dW5zYWZlQ2FsbFNpdGVJbmRleCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgo
dW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleCh1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cygpKSk7CiB9CiAKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQpAQCAtMTM0LDcgKzEzNCw3IEBAIGNvbnN0IEluc3RydWN0aW9uKiBDYWxsRnJh
bWU6OmN1cnJlbnRWUEMoKSBjb25zdAogCiB2b2lkIENhbGxGcmFtZTo6c2V0Q3VycmVudFZQQyhj
b25zdCBJbnN0cnVjdGlvbiogdnBjKQogewotICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUoY29k
ZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0KHZwYykpOworICAgIENhbGxTaXRlSW5kZXggY2FsbFNp
dGUoY29kZUJsb2NrKCktPmJ5dGVjb2RlSW5kZXgodnBjKSk7CiAgICAgdGhpc1tDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50XS50YWcoKSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGNhbGxTaXRl
LmJpdHMoKSk7CiB9CiAKQEAgLTE0NywxMSArMTQ3LDExIEBAIHVuc2lnbmVkIENhbGxGcmFtZTo6
Y2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpIGNvbnN0CiAKICNlbmRpZgogICAgIAotdW5z
aWduZWQgQ2FsbEZyYW1lOjpieXRlY29kZU9mZnNldCgpCitCeXRlY29kZUluZGV4IENhbGxGcmFt
ZTo6Ynl0ZWNvZGVJbmRleCgpCiB7CiAgICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dhc20oKSk7CiAg
ICAgaWYgKCFjb2RlQmxvY2soKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBC
eXRlY29kZUluZGV4KDApOwogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmIChjYWxsU2l0ZUJp
dHNBcmVDb2RlT3JpZ2luSW5kZXgoKSkgewogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwpA
QCAtMTY0LDEzICsxNjQsMTMgQEAgdW5zaWduZWQgQ2FsbEZyYW1lOjpieXRlY29kZU9mZnNldCgp
CiAgICAgfQogI2VuZGlmCiAgICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0
KCkpOwotICAgIHJldHVybiBjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCk7CisgICAgcmV0
dXJuIEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKTsKIH0KIAog
Q29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQogewogICAgIGlmICghY29kZUJsb2Nr
KCkpCi0gICAgICAgIHJldHVybiBDb2RlT3JpZ2luKDApOworICAgICAgICByZXR1cm4gQ29kZU9y
aWdpbihCeXRlY29kZUluZGV4KDApKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoY2Fs
bFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkpIHsKICAgICAgICAgQ2FsbFNpdGVJbmRleCBp
bmRleCA9IGNhbGxTaXRlSW5kZXgoKTsKQEAgLTE3OCw3ICsxNzgsNyBAQCBDb2RlT3JpZ2luIENh
bGxGcmFtZTo6Y29kZU9yaWdpbigpCiAgICAgICAgIHJldHVybiBjb2RlQmxvY2soKS0+Y29kZU9y
aWdpbihpbmRleCk7CiAgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIENvZGVPcmlnaW4oY2FsbFNp
dGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKTsKKyAgICByZXR1cm4gQ29kZU9yaWdpbihCeXRlY29k
ZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSkpOwogfQogCiBSZWdpc3Rlciog
Q2FsbEZyYW1lOjp0b3BPZkZyYW1lSW50ZXJuYWwoKQpAQCAtMzAyLDcgKzMwMiw3IEBAIFN0cmlu
ZyBDYWxsRnJhbWU6OmZyaWVuZGx5RnVuY3Rpb25OYW1lKCkKIHZvaWQgQ2FsbEZyYW1lOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gdGhp
cy0+Y29kZUJsb2NrKCkpIHsKLSAgICAgICAgb3V0LnByaW50KGNvZGVCbG9jay0+aW5mZXJyZWRO
YW1lKCksICIjIiwgY29kZUJsb2NrLT5oYXNoQXNTdHJpbmdJZlBvc3NpYmxlKCksICIgWyIsIGNv
ZGVCbG9jay0+aml0VHlwZSgpLCAiIGJjIyIsIGJ5dGVjb2RlT2Zmc2V0KCksICJdIik7CisgICAg
ICAgIG91dC5wcmludChjb2RlQmxvY2stPmluZmVycmVkTmFtZSgpLCAiIyIsIGNvZGVCbG9jay0+
aGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpLCAiIFsiLCBjb2RlQmxvY2stPmppdFR5cGUoKSwgIiAi
LCBieXRlY29kZUluZGV4KCksICJdIik7CiAKICAgICAgICAgb3V0LnByaW50KCIoIik7CiAgICAg
ICAgIHRoaXNWYWx1ZSgpLmR1bXBGb3JCYWNrdHJhY2Uob3V0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAppbmRleCBiN2IzM2UwYzFlMDQxN2Y4MThl
OThmNDQwZjE0OGE0NDg3YmIyMTA1Li4wODBmN2M0NjIwNzU5NzAyZTBkN2ZiYTI1NmVhZDY1Mzg2
YmViNGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFt
ZS5oCkBAIC00NSwyMiArNDUsMTkgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIHB1YmxpYzoKICAg
ICAgICAgQ2FsbFNpdGVJbmRleCgpID0gZGVmYXVsdDsKICAgICAgICAgCi0gICAgICAgIGV4cGxp
Y2l0IENhbGxTaXRlSW5kZXgodWludDMyX3QgYml0cykKLSAgICAgICAgICAgIDogbV9iaXRzKGJp
dHMpCisgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQorICAgICAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAg
ICAgICAgeyB9Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgZXhwbGljaXQgQ2FsbFNp
dGVJbmRleChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCi0gICAgICAgICAgICA6IG1f
Yml0cyhiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uKSkKLSAgICAgICAgeyB9Ci0j
ZW5kaWYKIAotICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
bV9iaXRzICE9IFVJTlRfTUFYOyB9Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxs
U2l0ZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9iaXRzID09IG90aGVyLm1fYml0czsg
fQotICAgICAgICAKLSAgICAgICAgaW5saW5lIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJldHVy
biBtX2JpdHM7IH0KKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuICEhbV9ieXRlY29kZUluZGV4OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBD
YWxsU2l0ZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4ID09IG90
aGVyLm1fYnl0ZWNvZGVJbmRleDsgfQorCisgICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7
IHJldHVybiBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCk7IH0KKworICAgICAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQzMl90IG1fYml0cyB7IFVJTlRfTUFYIH07CisgICAg
ICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwogICAgIH07CiAKICAgICBjbGFzcyBE
aXNwb3NhYmxlQ2FsbFNpdGVJbmRleCA6IHB1YmxpYyBDYWxsU2l0ZUluZGV4IHsKQEAgLTY4LDcg
KzY1LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRl
eCgpID0gZGVmYXVsdDsKIAogICAgICAgICBleHBsaWNpdCBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRl
eCh1aW50MzJfdCBiaXRzKQotICAgICAgICAgICAgOiBDYWxsU2l0ZUluZGV4KGJpdHMpCisgICAg
ICAgICAgICA6IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYml0cykpCiAg
ICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xNzksMTAgKzE3NiwxMCBAQCBuYW1lc3BhY2UgSlND
ICB7CiAgICAgICAgIC8vIGFsc28gcmV0dXJuIDAgaWYgdGhlIGNhbGwgZnJhbWUgaGFzIG5vIG5v
dGlvbiBvZiBieXRlY29kZSBvZmZzZXRzIChmb3IKICAgICAgICAgLy8gZXhhbXBsZSBpZiBpdCdz
IG5hdGl2ZSBjb2RlKS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMTc1NAotICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCgpOworICAg
ICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgCiAgICAgICAgIC8v
IFRoaXMgd2lsbCBnZXQgeW91IGEgQ29kZU9yaWdpbi4gSXQgd2lsbCBhbHdheXMgc3VjY2VlZC4g
TWF5IHJldHVybgotICAgICAgICAvLyBDb2RlT3JpZ2luKDApIGlmIHdlJ3JlIGluIG5hdGl2ZSBj
b2RlLgorICAgICAgICAvLyBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpIGlmIHdlJ3JlIGlu
IG5hdGl2ZSBjb2RlLgogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4oKTsKIAogICAgICAgICBSZWdpc3RlciogdG9wT2ZGcmFtZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCBlNDNkYjI5
MTQzNzUzZDY0ZjFmYTRlZDNiYjUxNjMxZTY0NGEyMGNhLi5mZjgxNTk3MzYwMWQ0NTIxN2YwOTY3
YjVhZDA1OGNiZGRiOTRiYjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTQxMCw3ICs0MTAsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZChTdGFja0ZyYW1lKHZpc2l0b3ItPndhc21GdW5j
dGlvbkluZGV4T3JOYW1lKCkpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoISF2aXNpdG9yLT5j
b2RlQmxvY2soKSAmJiAhdmlzaXRvci0+Y29kZUJsb2NrKCktPnVubGlua2VkQ29kZUJsb2NrKCkt
PmlzQnVpbHRpbkZ1bmN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBtX3Jlc3VsdHMuYXBwZW5k
KAotICAgICAgICAgICAgICAgICAgICBTdGFja0ZyYW1lKG1fdm0sIG1fb3duZXIsIHZpc2l0b3It
PmNhbGxlZSgpLmFzQ2VsbCgpLCB2aXNpdG9yLT5jb2RlQmxvY2soKSwgdmlzaXRvci0+Ynl0ZWNv
ZGVPZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICBTdGFja0ZyYW1lKG1fdm0sIG1fb3du
ZXIsIHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpLCB2aXNpdG9yLT5jb2RlQmxvY2soKSwgdmlz
aXRvci0+Ynl0ZWNvZGVJbmRleCgpKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIG1fcmVzdWx0cy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgIFN0YWNrRnJhbWUo
bV92bSwgbV9vd25lciwgdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCkpKTsKQEAgLTQ4MCw3ICs0
ODAsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBIYW5kbGVySW5mbyogZmluZEV4Y2VwdGlvbkhh
bmRsZXIoU3RhY2tWaXNpdG9yJiB2aXNpdG9yLCBDbwogICAgIGlmIChKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICBleGNlcHRpb25IYW5kbGVy
SW5kZXggPSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKS5iaXRzKCk7CiAgICAgZWxzZQotICAg
ICAgICBleGNlcHRpb25IYW5kbGVySW5kZXggPSBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCk7
CisgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRl
eCgpLm9mZnNldCgpOwogCiAgICAgcmV0dXJuIGNvZGVCbG9jay0+aGFuZGxlckZvckluZGV4KGV4
Y2VwdGlvbkhhbmRsZXJJbmRleCwgcmVxdWlyZWRIYW5kbGVyKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAppbmRleCA4NjQw
NDFmNzBiOTE1MzEyZGMxMzNiMTc2YjgyNDIyYjFmODJkODk0Li44N2FjNDMzOWM5OTUxY2I1ODBj
MmY5NmIxYzg5NWJjNjI5MGZjZTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCkBAIC0zMjksNyArMzI5LDcgQEAgdm9pZCBT
aGFkb3dDaGlja2VuOjp1cGRhdGUoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAg
ICAgICAgIGJvb2wgaXNUYWlsRGVsZXRlZCA9IGZhbHNlOwogICAgICAgICAgICAgSlNTY29wZSog
c2NvcGUgPSBudWxscHRyOwogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpOwotICAgICAgICAgICAgSlNWYWx1ZSBzY29wZVZhbHVlID0gY2Fs
bEZyYW1lLT5ieXRlY29kZU9mZnNldCgpICYmIGNvZGVCbG9jayAmJiBjb2RlQmxvY2stPnNjb3Bl
UmVnaXN0ZXIoKS5pc1ZhbGlkKCkKKyAgICAgICAgICAgIEpTVmFsdWUgc2NvcGVWYWx1ZSA9IGNh
bGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICYmIGNvZGVCbG9jayAmJiBjb2RlQmxvY2stPnNjb3Bl
UmVnaXN0ZXIoKS5pc1ZhbGlkKCkKICAgICAgICAgICAgICAgICA/IGNhbGxGcmFtZS0+cmVnaXN0
ZXJzKClbY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkub2Zmc2V0KCldLmpzVmFsdWUoKQogICAg
ICAgICAgICAgICAgIDoganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIGlmICghc2NvcGVWYWx1
ZS5pc1VuZGVmaW5lZCgpICYmIGNvZGVCbG9jay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bj
b2RlcygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U3RhY2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuY3BwCmluZGV4IDgwYzhmNjgyZTVmNWFhMjhiMDBmNWQ0ZmFmYjM0OTdlZGExNjI0
MDMuLmMzMTcyZjc1NzFlMjg0N2Q0YzE0YWJlNGI5MWMxOTAwZjVmYzE5NGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0x
NjksNyArMTY5LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNvZGVPcmkKICAgICBpZiAoY2FsbEZyYW1l
LT5pc0FueVdhc21DYWxsZWUoKSkgewogICAgICAgICBtX2ZyYW1lLm1faXNXYXNtRnJhbWUgPSB0
cnVlOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICAgICAgbV9m
cmFtZS5tX2J5dGVjb2RlT2Zmc2V0ID0gMDsKKyAgICAgICAgbV9mcmFtZS5tX2J5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KCk7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgICAgICBD
YWxsZWVCaXRzIGJpdHMgPSBjYWxsRnJhbWUtPmNhbGxlZSgpOwogICAgICAgICBpZiAoYml0cy5p
c1dhc20oKSkKQEAgLTE3Nyw5ICsxNzcsOSBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZE5vbklu
bGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZU9yaWdpbiogY29kZU9yaQogI2Vu
ZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIG1fZnJhbWUubV9ieXRlY29kZU9mZnNldCA9ICFtX2Zy
YW1lLmNvZGVCbG9jaygpID8gMAorICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9ICFt
X2ZyYW1lLmNvZGVCbG9jaygpID8gQnl0ZWNvZGVJbmRleCgwKQogICAgICAgICAgICAgOiBjb2Rl
T3JpZ2luID8gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpCi0gICAgICAgICAgICA6IGNhbGxG
cmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKTsKKyAgICAgICAgICAgIDogY2FsbEZyYW1lLT5ieXRlY29k
ZUluZGV4KCk7CiAKICAgICB9CiAKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIFN0YWNrVmlzaXRv
cjo6cmVhZElubGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZU9yaWdpbiogY29k
ZU9yaWdpbgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNl
bGluZUNvZGVCbG9jay5nZXQoKTsKLSAgICAgICAgbV9mcmFtZS5tX2J5dGVjb2RlT2Zmc2V0ID0g
Y29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJ
bmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKTsKIAogICAgICAgICBKU0Z1bmN0aW9u
KiBjYWxsZWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUZvckNhbGxGcmFtZShjYWxsRnJhbWUp
OwogICAgICAgICBtX2ZyYW1lLm1fY2FsbGVlID0gY2FsbGVlOwpAQCAtNDIzLDcgKzQyMyw3IEBA
IHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6Y29tcHV0ZUxpbmVBbmRDb2x1bW4odW5zaWduZWQm
IGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pCiB2b2lkIFN0YWNrVmlzaXRvcjo6RnJhbWU6OnJldHJp
ZXZlRXhwcmVzc2lvbkluZm8oaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRP
ZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdAogewogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7Ci0gICAgY29kZUJsb2NrLT51
bmxpbmtlZENvZGVCbG9jaygpLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRl
Y29kZU9mZnNldCgpLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1u
KTsKKyAgICBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPmV4cHJlc3Npb25SYW5nZUZv
ckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCgpLCBkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCwgbGluZSwgY29sdW1uKTsKICAgICBkaXZvdCArPSBjb2RlQmxvY2stPnNvdXJjZU9mZnNl
dCgpOwogfQogCkBAIC00ODUsOCArNDg1LDggQEAgdm9pZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQsIEluZGVudGVyIGluZGVudCwgV1RGOjpGdW5jdGlvbjwKICAg
ICAgICAgICAgIGluZGVudCsrOwogCiAgICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0
ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCk7Ci0gICAgICAgICAgICAg
ICAgb3V0LnByaW50KGluZGVudCwgImJ5dGVjb2RlT2Zmc2V0OiAiLCBieXRlY29kZU9mZnNldCwg
IiBvZiAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSwgIlxuIik7CisgICAgICAg
ICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY2FsbEZyYW1lLT5ieXRlY29k
ZUluZGV4KCk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGluZGVudCwgYnl0ZWNvZGVJbmRl
eCwgIiBvZiAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSwgIlxuIik7CiAjaWYg
RU5BQkxFKERGR19KSVQpCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG91
dC5wcmludChpbmRlbnQsICJoYXNDb2RlT3JpZ2luczogIiwgY29kZUJsb2NrLT5oYXNDb2RlT3Jp
Z2lucygpLCAiXG4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TdGFja1Zpc2l0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9T
dGFja1Zpc2l0b3IuaAppbmRleCA2M2FkNDA4Y2U3MWIwYjhlNGVkODM2NzliODdiNjYxNzRlYzE2
Y2Y2Li5kMzU3NjFmZTBjNDIzNGIzOWNmNTA3YjFiNjQ1NjU1ODRhODQ5Yjg2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCkBAIC0yNSw2
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQnl0ZWNvZGVJbmRleC5oIgog
I2luY2x1ZGUgIkNhbGxlZUJpdHMuaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKICNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTY0LDcgKzY1LDcgQEAgcHVibGljOgogICAgICAg
ICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJGcmFtZTsg
fQogICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlOyB9
CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxv
Y2s7IH0KLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X2J5dGVjb2RlT2Zmc2V0OyB9CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQogICAgICAgICBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSgpIGNvbnN0IHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAg
ICAgICAgIHJldHVybiBtX2lubGluZUNhbGxGcmFtZTsKQEAgLTEyMCw3ICsxMjEsNyBAQCBwdWJs
aWM6CiAgICAgICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgICAgIHNpemVfdCBtX2lu
ZGV4OwogICAgICAgICBzaXplX3QgbV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKLSAgICAg
ICAgdW5zaWduZWQgbV9ieXRlY29kZU9mZnNldDsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5
dGVjb2RlSW5kZXg7CiAgICAgICAgIGJvb2wgbV9jYWxsZXJJc0VudHJ5RnJhbWUgOiAxOwogICAg
ICAgICBib29sIG1faXNXYXNtRnJhbWUgOiAxOwogICAgICAgICBXYXNtOjpJbmRleE9yTmFtZSBt
X3dhc21GdW5jdGlvbkluZGV4T3JOYW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4
IGQ0NDg5N2Q2NDcwMjY4MDg1Yzg2MmEyYzhhNzU1ZmJjYTYzZjRlZGEuLjFmZjhiNDcwNDFkZmRl
ZTNkNDBjYTRiODQxNTI4YjZiYzBiMDVjM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
QEAgLTc0LDE2ICs3NCwxNSBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyPENGdQogICAgICAgICBuZXdD
YWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwogfQogCi1KSVQ6OkpJ
VChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRl
Y29kZU9mZnNldCkKK0pJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVj
b2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICA6IEpTSW50ZXJmYWNlSklU
KCZ2bSwgY29kZUJsb2NrKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKICAg
ICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
IDogMCkKLSAgICAsIG1fYnl0ZWNvZGVPZmZzZXQoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKQogICAgICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCiAgICAgLCBt
X2NhbkJlT3B0aW1pemVkKGZhbHNlKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNl
KQogICAgICwgbV9zaG91bGRVc2VJbmRleE1hc2tpbmcoT3B0aW9uczo6ZW5hYmxlU3BlY3RyZU1p
dGlnYXRpb25zKCkpCi0gICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KGxvb3BPU1JF
bnRyeUJ5dGVjb2RlT2Zmc2V0KQorICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CiB9CiAKQEAgLTEwMCwxMSArOTksMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICBKdW1wTGlzdCBza2lwT3B0
aW1pemU7CiAgICAgCiAgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQs
IFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnko
KSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50
ZXIoKSkpKTsKLSAgICBBU1NFUlQoIW1fYnl0ZWNvZGVPZmZzZXQpOworICAgIEFTU0VSVCghbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpKTsKIAogICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9y
UmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUp
OwogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNv
ZGVPZmZzZXQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBt
X2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNo
VGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVH
UFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBza2lwT3B0aW1pemUubGluayh0
aGlzKTsKQEAgLTEzOCwxMiArMTM3LDEyIEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJP
ZmZzZXQoKQogfQogCiAjZGVmaW5lIE5FWFRfT1BDT0RFKG5hbWUpIFwKLSAgICBtX2J5dGVjb2Rl
T2Zmc2V0ICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOyBcCisgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5z
dHJ1Y3Rpb24tPnNpemUoKSk7IFwKICAgICBicmVhazsKIAogI2RlZmluZSBERUZJTkVfU0xPV19P
UChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsgXAotICAgICAgICBpZiAobV9ieXRlY29k
ZU9mZnNldCA+PSBzdGFydEJ5dGVjb2RlT2Zmc2V0KSB7IFwKKyAgICAgICAgaWYgKG1fYnl0ZWNv
ZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsgXAogICAgICAgICAgICAgSklUU2xvd1Bh
dGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8j
I25hbWUpOyBcCiAgICAgICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOyBcCiAgICAgICAgIH0g
XApAQCAtMTUyLDcgKzE1MSw3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQo
KQogCiAjZGVmaW5lIERFRklORV9PUChuYW1lKSBcCiAgICAgY2FzZSBuYW1lOiB7IFwKLSAgICAg
ICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQgPj0gc3RhcnRCeXRlY29kZU9mZnNldCkgeyBcCisgICAg
ICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4KSB7IFwKICAgICAg
ICAgICAgIGVtaXRfIyNuYW1lKGN1cnJlbnRJbnN0cnVjdGlvbik7IFwKICAgICAgICAgfSBcCiAg
ICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCkBAIC0xOTIsOCArMTkxLDggQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwog
CiAgICAgVk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7Ci0gICAgdW5zaWduZWQgc3RhcnRCeXRl
Y29kZU9mZnNldCA9IDA7Ci0gICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgJiYg
KG1fY29kZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJsb2NrPih2bSkgfHwgbV9jb2RlQmxv
Y2stPmluaGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtKSkpIHsKKyAgICBCeXRlY29k
ZUluZGV4IHN0YXJ0Qnl0ZWNvZGVJbmRleCgwKTsKKyAgICBpZiAobV9sb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4ICYmIChtX2NvZGVCbG9jay0+aW5oZXJpdHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0p
IHx8IG1fY29kZUJsb2NrLT5pbmhlcml0czxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7
CiAgICAgICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgb3B0aW1pemF0aW9uIGJlY2F1c2Ugd2Ug
ZXhlY3V0ZSBQcm9ncmFtQ29kZUJsb2NrJ3MgZXhhY3RseSBvbmNlLgogICAgICAgICAvLyBUaGlz
IG9wdGltaXphdGlvbiB3b3VsZCBiZSBpbnZhbGlkIG90aGVyd2lzZS4gV2hlbiB0aGUgTExJbnQg
ZGV0ZXJtaW5lcyBpdCB3YW50cyB0bwogICAgICAgICAvLyBkbyBPU1IgZW50cnkgaW50byB0aGUg
YmFzZWxpbmUgSklUIGluIGEgbG9vcCwgaXQgd2lsbCBwYXNzIGluIHRoZSBieXRlY29kZSBvZmZz
ZXQgaXQKQEAgLTIwMiwyOCArMjAxLDI4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCkKIAogICAgICAgICAvLyBXZSBvbmx5IGJvdGhlciBidWlsZGluZyB0aGUgYnl0ZWNvZGUg
Z3JhcGggaWYgaXQgY291bGQgc2F2ZSB0aW1lIGFuZCBleGVjdXRhYmxlCiAgICAgICAgIC8vIG1l
bW9yeS4gV2UgcGljayBhbiBhcmJpdHJhcnkgb2Zmc2V0IHdoZXJlIHdlIGRlZW0gdGhpcyBpcyBw
cm9maXRhYmxlLgotICAgICAgICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA+PSAy
MDApIHsKKyAgICAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+
PSAyMDApIHsKICAgICAgICAgICAgIC8vIEFzIGEgc2ltcGxpZmljYXRpb24sIHdlIGRvbid0IGZp
bmQgYWxsIGJ5dGVjb2RlIHJhbmdlcyB0aGF0IGFyZSB1bnJlYWNoYWJsZS4KICAgICAgICAgICAg
IC8vIEluc3RlYWQsIHdlIGp1c3QgZmluZCB0aGUgbWluaW11bSBieXRlY29kZSBvZmZzZXQgdGhh
dCBpcyByZWFjaGFibGUsIGFuZAogICAgICAgICAgICAgLy8gY29tcGlsZSBjb2RlIGZyb20gdGhh
dCBieXRlY29kZSBvZmZzZXQgb253YXJkcy4KIAogICAgICAgICAgICAgQnl0ZWNvZGVHcmFwaCBn
cmFwaChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKLSAgICAgICAg
ICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5
dGVjb2RlT2Zmc2V0KG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpOworICAgICAgICAgICAg
Qnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNv
ZGVPZmZzZXQobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4Lm9mZnNldCgpKTsKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGJsb2NrKTsKIAogICAgICAgICAgICAgR3JhcGhOb2RlV29ya2xp
c3Q8Qnl0ZWNvZGVCYXNpY0Jsb2NrKj4gd29ya2xpc3Q7Ci0gICAgICAgICAgICBzdGFydEJ5dGVj
b2RlT2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgICAgICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKTsKIAogICAg
ICAgICAgICAgd2hpbGUgKEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3Ao
KSkgewotICAgICAgICAgICAgICAgIHN0YXJ0Qnl0ZWNvZGVPZmZzZXQgPSBzdGQ6Om1pbihzdGFy
dEJ5dGVjb2RlT2Zmc2V0LCBibG9jay0+bGVhZGVyT2Zmc2V0KCkpOworICAgICAgICAgICAgICAg
IHN0YXJ0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoc3RkOjptaW4oc3RhcnRCeXRlY29k
ZUluZGV4Lm9mZnNldCgpLCBibG9jay0+bGVhZGVyT2Zmc2V0KCkpKTsKICAgICAgICAgICAgICAg
ICB3b3JrbGlzdC5wdXNoQWxsKGJsb2NrLT5zdWNjZXNzb3JzKCkpOwogCiAgICAgICAgICAgICAg
ICAgLy8gQWxzbyBhZGQgY2F0Y2ggYmxvY2tzIGZvciBieXRlY29kZXMgdGhhdCB0aHJvdy4KICAg
ICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMo
KSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0g
YmxvY2stPmxlYWRlck9mZnNldCgpOyBieXRlY29kZU9mZnNldCA8IGJsb2NrLT5sZWFkZXJPZmZz
ZXQoKSArIGJsb2NrLT50b3RhbExlbmd0aCgpOykgewogICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZU9mZnNldCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogaGFuZGxlciA9IG1fY29kZUJsb2NrLT5oYW5k
bGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGF1dG8qIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2Rl
SW5kZXgoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdvcmtsaXN0LnB1c2goZ3JhcGguZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zm
c2V0KGhhbmRsZXItPnRhcmdldCkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBieXRlY29k
ZU9mZnNldCArPSBpbnN0cnVjdGlvbi0+c2l6ZSgpOwpAQCAtMjMzLDI5ICsyMzIsMjkgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Zm9yIChtX2J5dGVjb2RlT2Zmc2V0ID0gMDsgbV9ieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9u
Q291bnQ7ICkgewotICAgICAgICBpZiAobV9ieXRlY29kZU9mZnNldCA9PSBzdGFydEJ5dGVjb2Rl
T2Zmc2V0ICYmIHN0YXJ0Qnl0ZWNvZGVPZmZzZXQgPiAwKSB7CisgICAgZm9yIChtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0
cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5
dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpID4gMCkgewogICAgICAg
ICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29kZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwg
aGVyZSBhcmUgdW5yZWFjaGFibGUuCiAgICAgICAgICAgICAvLyBMZXQncyBlbnN1cmUgdGhhdCBi
eSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgogICAgICAgICAgICAgYnJlYWtwb2ludCgpOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQotICAgICAgICAgICAgbV9k
aXNhc3NlbWJsZXItPnNldEZvckJ5dGVjb2RlTWFpblBhdGgobV9ieXRlY29kZU9mZnNldCwgbGFi
ZWwoKSk7Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBp
bnN0cnVjdGlvbnMuYXQobV9ieXRlY29kZU9mZnNldCkucHRyKCk7Ci0gICAgICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UoY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksICJwcml2YXRlQ29tcGlsZU1h
aW5QYXNzIGdvbmUgYmFkIEAgJWQiLCBtX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1haW5QYXRoKG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSwgbGFiZWwoKSk7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAg
QVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKIAotICAgICAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29k
ZU9mZnNldCkpOworICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVt
KGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAKICNpZiBFTkFCTEUoT1BD
T0RFX1NBTVBMSU5HKQotICAgICAgICBpZiAobV9ieXRlY29kZU9mZnNldCA+IDApIC8vIEF2b2lk
IHRoZSBvdmVyaGVhZCBvZiBzYW1wbGluZyBvcF9lbnRlciB0d2ljZS4KKyAgICAgICAgaWYgKG1f
Ynl0ZWNvZGVJbmRleCA+IDApIC8vIEF2b2lkIHRoZSBvdmVyaGVhZCBvZiBzYW1wbGluZyBvcF9l
bnRlciB0d2ljZS4KICAgICAgICAgICAgIHNhbXBsZUluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVj
dGlvbik7CiAjZW5kaWYKIAotICAgICAgICBtX2xhYmVsc1ttX2J5dGVjb2RlT2Zmc2V0XSA9IGxh
YmVsKCk7CisgICAgICAgIG1fbGFiZWxzW21fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKV0gPSBsYWJl
bCgpOwogCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRh
dGFMb2dGKCJPbGQgSklUIGVtaXR0aW5nIGNvZGUgZm9yIGJjIyV1IGF0IG9mZnNldCAweCVseC5c
biIsIG1fYnl0ZWNvZGVPZmZzZXQsIChsb25nKWRlYnVnT2Zmc2V0KCkpOworICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJPbGQgSklUIGVtaXR0aW5nIGNvZGUgZm9yICIsIG1fYnl0ZWNvZGVJbmRleCwg
IiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CiAKICAgICAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CiAKQEAgLTI2MywxMyAr
MjYyLDEzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAg
IGFkZDY0KAogICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMigxKSwKICAgICAgICAgICAgICAg
ICBBYnNvbHV0ZUFkZHJlc3MobV9jb21waWxhdGlvbi0+ZXhlY3V0aW9uQ291bnRlckZvcihQcm9m
aWxlcjo6T3JpZ2luU3RhY2soUHJvZmlsZXI6Ok9yaWdpbigKLSAgICAgICAgICAgICAgICAgICAg
bV9jb21waWxhdGlvbi0+Ynl0ZWNvZGVzKCksIG1fYnl0ZWNvZGVPZmZzZXQpKSktPmFkZHJlc3Mo
KSkpOworICAgICAgICAgICAgICAgICAgICBtX2NvbXBpbGF0aW9uLT5ieXRlY29kZXMoKSwgbV9i
eXRlY29kZUluZGV4KSkpLT5hZGRyZXNzKCkpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgaWYgKE9wdGlvbnM6OmVhZ2VybHlVcGRhdGVUb3BDYWxsRnJhbWUoKSkKICAgICAgICAgICAg
IHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogCi0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZU9mZnNldDsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAjaWYgRU5BQkxFKE1BU01fUFJPQkUpCiAgICAgICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7CiAg
ICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwpAQCAtNDcyLDcg
KzQ3MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogI2lmbmRlZiBO
REVCVUcKICAgICAvLyBSZXNldCB0aGlzLCBpbiBvcmRlciB0byBndWFyZCBpdHMgdXNlIHdpdGgg
QVNTRVJUcy4KLSAgICBtX2J5dGVjb2RlT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpOworICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsKICNl
bmRpZgogfQogCkBAIC00OTUsMjggKzQ5NCwyOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwogICAgIAogICAgIGZvciAo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2FzZXMuYmVnaW4o
KTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsKLSAgICAgICAgbV9ieXRlY29kZU9mZnNl
dCA9IGl0ZXItPnRvOworICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBpdGVyLT50bzsKIAotICAg
ICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVP
cmlnaW4obV9ieXRlY29kZU9mZnNldCkpOworICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAK
LSAgICAgICAgdW5zaWduZWQgZmlyc3RUbyA9IG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIEJ5
dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAotICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmF0KG1fYnl0ZWNvZGVPZmZzZXQpLnB0cigpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1f
Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAgICBSYXJlQ2FzZVByb2ZpbGUq
IHJhcmVDYXNlUHJvZmlsZSA9IDA7CiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkp
Ci0gICAgICAgICAgICByYXJlQ2FzZVByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YWRkUmFyZUNhc2VQ
cm9maWxlKG1fYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICAgICAgcmFyZUNhc2VQcm9maWxlID0g
bV9jb2RlQmxvY2stPmFkZFJhcmVDYXNlUHJvZmlsZShtX2J5dGVjb2RlSW5kZXgpOwogCiAgICAg
ICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCJPbGQg
SklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgYmMjJXUgYXQgb2Zmc2V0IDB4JWx4LlxuIiwgbV9i
eXRlY29kZU9mZnNldCwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CisgICAgICAgICAgICBkYXRhTG9n
TG4oIk9sZCBKSVQgZW1pdHRpbmcgc2xvdyBjb2RlIGZvciAiLCBtX2J5dGVjb2RlSW5kZXgsICIg
YXQgb2Zmc2V0ICIsIChsb25nKWRlYnVnT2Zmc2V0KCkpOwogCiAgICAgICAgIGlmIChtX2Rpc2Fz
c2VtYmxlcikKLSAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZVNsb3dQ
YXRoKG1fYnl0ZWNvZGVPZmZzZXQsIGxhYmVsKCkpOworICAgICAgICAgICAgbV9kaXNhc3NlbWJs
ZXItPnNldEZvckJ5dGVjb2RlU2xvd1BhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBsYWJl
bCgpKTsKIAogI2lmIEVOQUJMRShNQVNNX1BST0JFKQogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewogICAgICAgICAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgICAg
ICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAg
ICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAg
ICBwcm9iZShbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKICAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bj
b2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7
CkBAIC02MjMsNyArNjIyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkK
IAogI2lmbmRlZiBOREVCVUcKICAgICAvLyBSZXNldCB0aGlzLCBpbiBvcmRlciB0byBndWFyZCBp
dHMgdXNlIHdpdGggQVNTRVJUcy4KLSAgICBtX2J5dGVjb2RlT2Zmc2V0ID0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgoKTsKICNlbmRpZgogfQogCkBAIC02NzQsNyArNjczLDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVXaXRob3V0TGlua2luZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIG1f
Y29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXIsIG1fY29kZUJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgbV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKDAsIG51bGxwdHIpKTsKKyAg
ICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmln
aW4oQnl0ZWNvZGVJbmRleCgwKSkpOwogCiAgICAgTGFiZWwgZW50cnlMYWJlbCh0aGlzKTsKICAg
ICBpZiAobV9kaXNhc3NlbWJsZXIpCkBAIC03MTEsNyArNzEwLDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVXaXRob3V0TGlua2luZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgZW1pdE1h
dGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKIAogICAgIGlmIChtX2NvZGVCbG9jay0+Y29k
ZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKLSAgICAgICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZz
ZXQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAgICAgQVNT
RVJUKCFtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7CiAgICAgICAgICAgICBmb3IgKGludCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8v
IElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15
IHByb2ZpbGluZyBzaXRlICh0bwpAQCAtNzQxLDcgKzc0MCw3IEBAIHZvaWQgSklUOjpjb21waWxl
V2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0
aGlzKTsKLSAgICBtX2J5dGVjb2RlT2Zmc2V0ID0gMDsKKyAgICBtX2J5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkK
ICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNh
bGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJv
d1N0YWNrT3ZlcmZsb3dFcnJvciwgbV9jb2RlQmxvY2spOwpAQCAtNzU3LDcgKzc1Niw3IEBAIHZv
aWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
KQogICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
KSwgcmVnVDEpOwogICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0
aGlzKTsKIAotICAgICAgICBtX2J5dGVjb2RlT2Zmc2V0ID0gMDsKKyAgICAgICAgbV9ieXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKIAogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNf
Y2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CkBAIC03NjksNyArNzY4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0
TGlua2luZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIGVtaXROYWtlZENh
bGwobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBtX2J5dGVjb2RlT2Zm
c2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOyAvLyBSZXNldCB0aGlz
LCBpbiBvcmRlciB0byBndWFyZCBpdHMgdXNlIHdpdGggQVNTRVJUcy4KKyAgICAgICAgbV9ieXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOyAvLyBSZXNldCB0aGlzLCBpbiBvcmRlciB0byBn
dWFyZCBpdHMgdXNlIHdpdGggQVNTRVJUcy4KICNlbmRpZgogCiAgICAgICAgIGp1bXAoYmVnaW5M
YWJlbCk7CkBAIC04MDksNyArODA4LDcgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpsaW5rKCkK
IAogICAgIC8vIFRyYW5zbGF0ZSB2UEMgb2Zmc2V0cyBpbnRvIGFkZHJlc3NlcyBpbiBKSVQgZ2Vu
ZXJhdGVkIGNvZGUsIGZvciBzd2l0Y2ggdGFibGVzLgogICAgIGZvciAoYXV0byYgcmVjb3JkIDog
bV9zd2l0Y2hlcykgewotICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHJlY29yZC5i
eXRlY29kZU9mZnNldDsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSByZWNvcmQu
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKIAogICAgICAgICBpZiAocmVjb3JkLnR5cGUgIT0gU3dp
dGNoUmVjb3JkOjpTdHJpbmcpIHsKICAgICAgICAgICAgIEFTU0VSVChyZWNvcmQudHlwZSA9PSBT
d2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSB8fCByZWNvcmQudHlwZSA9PSBTd2l0Y2hSZWNvcmQ6OkNo
YXJhY3Rlcik7IApAQCAtODk0LDcgKzg5Myw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGlu
aygpCiAgICAgSklUQ29kZU1hcCBqaXRDb2RlTWFwOwogICAgIGZvciAodW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29k
ZU9mZnNldCkgewogICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkp
Ci0gICAgICAgICAgICBqaXRDb2RlTWFwLmFwcGVuZChieXRlY29kZU9mZnNldCwgcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsK
KyAgICAgICAgICAgIGppdENvZGVNYXAuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVj
b2RlT2Zmc2V0XSkpOwogICAgIH0KICAgICBqaXRDb2RlTWFwLmZpbmlzaCgpOwogICAgIG1fY29k
ZUJsb2NrLT5zZXRKSVRDb2RlTWFwKFdURk1vdmUoaml0Q29kZU1hcCkpOwpAQCAtOTQ5LDcgKzk0
OCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKICAgICAg
ICAgLy8gb3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSBpcyBw
YXNzZWQgb25lIGFyZ3VtZW50LCB0aGUgVk0qLgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
JnZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBwcmVwYXJlQ2FsbE9wZXJh
dGlvbih2bSgpKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKE9wZXJh
dGlvblB0clRhZyksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyRnJv
bUNhbGxlckZyYW1lKSkpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwo
T3BlcmF0aW9uUHRyVGFnKSwgQnl0ZWNvZGVJbmRleCgpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKSk7
CiAgICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAgICAgfQogCkBAIC05NjIs
NyArOTYxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQog
ICAgICAgICAvLyBvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyIGlzIHBhc3NlZCBvbmUg
YXJndW1lbnQsIHRoZSBWTSouCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cigmdm0oKSksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKCkp
OwotICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwoT3BlcmF0aW9uUHRyVGFn
KSwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpLCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSk7CisgICAgICAg
IG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbChPcGVyYXRpb25QdHJUYWcpLCBCeXRlY29k
ZUluZGV4KCksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhj
ZXB0aW9uSGFuZGxlcikpKTsKICAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsK
ICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCAxOTc3OWEzYzIzY2NjZDU3MDIx
N2JkNDQ3YTQ3MmJjMTA4MjhhZTcwLi5kNDVmYzAzNTBjYjEyOGQ2ZWIxNGM1Yzc5MDg0NmJiMmRi
MWYxOTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTcwLDE2ICs3MCwxNiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgZnJvbTsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQ7CisgICAg
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKICAgICAgICAgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPiBjYWxsZWU7CiAKICAgICAgICAgQ2FsbFJlY29yZCgpCiAgICAgICAgIHsK
ICAgICAgICAgfQogCi0gICAgICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnJv
bSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4g
Y2FsbGVlKQorICAgICAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb20sIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBj
YWxsZWUpCiAgICAgICAgICAgICA6IGZyb20oZnJvbSkKLSAgICAgICAgICAgICwgYnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICAgICAsIGJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCkKICAgICAgICAgICAgICwgY2FsbGVlKGNhbGxlZSkKICAgICAgICAgewogICAgICAg
ICB9CkBAIC05OCw5ICs5OCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgc3RydWN0IFNsb3dD
YXNlRW50cnkgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmcm9tOwotICAgICAgICB1
bnNpZ25lZCB0bzsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCB0bzsKICAgICAgICAgCi0gICAgICAg
IFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZiwgdW5zaWduZWQgdCkKKyAgICAg
ICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmLCBCeXRlY29kZUluZGV4IHQp
CiAgICAgICAgICAgICA6IGZyb20oZikKICAgICAgICAgICAgICwgdG8odCkKICAgICAgICAgewpA
QCAtMTIxLDIwICsxMjEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBTdHJpbmdK
dW1wVGFibGUqIHN0cmluZ0p1bXBUYWJsZTsKICAgICAgICAgfSBqdW1wVGFibGU7CiAKLSAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleDsKICAgICAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldDsKIAotICAgICAgICBTd2l0
Y2hSZWNvcmQoU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0LCB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0LCBUeXBlIHR5cGUpCisgICAgICAgIFN3aXRjaFJl
Y29yZChTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4LCB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0LCBUeXBlIHR5cGUpCiAgICAgICAgICAgICA6IHR5
cGUodHlwZSkKLSAgICAgICAgICAgICwgYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCisg
ICAgICAgICAgICAsIGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgICwg
ZGVmYXVsdE9mZnNldChkZWZhdWx0T2Zmc2V0KQogICAgICAgICB7CiAgICAgICAgICAgICB0aGlz
LT5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlID0ganVtcFRhYmxlOwogICAgICAgICB9CiAKLSAg
ICAgICAgU3dpdGNoUmVjb3JkKFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlLCB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCwgdW5zaWduZWQgZGVmYXVsdE9mZnNldCkKKyAgICAgICAgU3dpdGNoUmVj
b3JkKFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgsIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQpCiAgICAgICAgICAgICA6IHR5cGUoU3RyaW5nKQot
ICAgICAgICAgICAgLCBieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAg
ICwgYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAgICAgLCBkZWZhdWx0T2Zm
c2V0KGRlZmF1bHRPZmZzZXQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHRoaXMtPmp1bXBUYWJs
ZS5zdHJpbmdKdW1wVGFibGUgPSBqdW1wVGFibGU7CkBAIC0xNDQsNyArMTQ0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgc3RydWN0IEJ5VmFsQ29tcGlsYXRpb25JbmZvIHsKICAgICAgICAgQnlW
YWxDb21waWxhdGlvbkluZm8oKSB7IH0KICAgICAgICAgCi0gICAgICAgIEJ5VmFsQ29tcGlsYXRp
b25JbmZvKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBNYWNy
b0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBub3RJbmRleEp1bXAsIE1hY3JvQXNzZW1ibGVyOjpQ
YXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlLCBBcnJheVBy
b2ZpbGUqIGFycmF5UHJvZmlsZSwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVUYXJnZXQsIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBuZXh0SG90UGF0aFRhcmdldCkKKyAgICAgICAgQnlWYWxDb21w
aWxhdGlvbkluZm8oQnlWYWxJbmZvKiBieVZhbEluZm8sIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCwgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbm90SW5kZXhKdW1wLCBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcCwgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25l
VGFyZ2V0LCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbmV4dEhvdFBhdGhUYXJnZXQpCiAgICAgICAg
ICAgICA6IGJ5VmFsSW5mbyhieVZhbEluZm8pCiAgICAgICAgICAgICAsIGJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgICwgbm90SW5kZXhKdW1wKG5vdEluZGV4SnVtcCkK
QEAgLTE1Nyw3ICsxNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAg
IEJ5VmFsSW5mbyogYnlWYWxJbmZvOwotICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4Owor
ICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIG5vdEluZGV4SnVtcDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CiAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1v
ZGU7CkBAIC0xOTIsNyArMTkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7CiAKICAgICBwdWJs
aWM6Ci0gICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSAwLCB1bnNpZ25lZCBsb29wT1NSRW50
cnlCeXRlY29kZU9mZnNldCA9IDApOworICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVs
bHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2Rl
SW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CiAKICAgICAgICAgVk0mIHZtKCkgeyByZXR1cm4g
KkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CkBAIC0yMDIsNyArMjAyLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUo
KTsKICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwg
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwKQorICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25S
ZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUlu
ZGV4KDApKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ss
IGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOwogICAgICAgICB9CkBAIC0y
MTAsMjggKzIxMCwyOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgY29t
cGlsZUdldEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7CiAgICAg
ICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNv
ZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQubV9i
eXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0
LnByaXZhdGVDb21waWxlR2V0QnlWYWwobG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3Ms
IGFycmF5TW9kZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0
QnlWYWxXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKQogICAgICAgICB7CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBj
b2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8t
PmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlW
YWxXaXRoQ2FjaGVkSWQoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBj
b2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8t
PmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlW
YWw8T3BQdXRCeVZhbD4obG9ja2VyLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9k
ZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVEaXJl
Y3RQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICAgICAgewogICAgICAg
ICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGppdC5tX2J5dGVjb2Rl
T2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0Lm1fYnl0
ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5w
cml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZv
LCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CiAKQEAgLTIzOSwxNCArMjM5
LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlW
YWxXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5k
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNl
dCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIGppdC5tX2J5dGVjb2Rl
SW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcD4oYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNz
LCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZv
aWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBKSVQgaml0KHZt
LCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlW
YWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlSGFz
SW5kZXhlZFByb3BlcnR5KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAg
ICAgICAgfQogCkBAIC0yNzcsNyArMjc3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIENh
bGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
KQogICAgICAgICB7CiAgICAgICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGwoT3BlcmF0
aW9uUHRyVGFnKTsKLSAgICAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rp
b25DYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBmdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJU
YWc+KCkpKTsKKyAgICAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25D
YWxsLCBtX2J5dGVjb2RlSW5kZXgsIGZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4o
KSkpOwogICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKICAgICAgICAgfQogCkBAIC03
NTQsMTIgKzc1NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICsraXRlcjsKICAg
ICAgICAgfQogICAgICAgICB2b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpOwotICAgICAg
ICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZU9mZnNldChWZWN0b3I8U2xvd0Nhc2VF
bnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAgICAgIHZvaWQgbGlua0FsbFNs
b3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMs
CisgICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZU9mZnNldCk7CiAKICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZU9mZnNldChtX3Nsb3dDYXNlcywgaXRlciwg
bV9ieXRlY29kZU9mZnNldCk7CisgICAgICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNv
ZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQog
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CkBAIC05MzQsNyArOTM0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxDYWxsQ29tcGlsYXRpb25JbmZvPiBt
X2NhbGxDb21waWxhdGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFi
bGU7CiAKLSAgICAgICAgdW5zaWduZWQgbV9ieXRlY29kZU9mZnNldDsKKyAgICAgICAgQnl0ZWNv
ZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBt
X3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIApA
QCAtOTY4LDcgKzk2OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fY2FuQmVP
cHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwog
ICAgICAgICBib29sIG1fc2hvdWxkVXNlSW5kZXhNYXNraW5nOwotICAgICAgICB1bnNpZ25lZCBt
X2xvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0IHsgMCB9OworICAgICAgICBCeXRlY29kZUluZGV4
IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IDc4YTNhNDFhNGI5NzMw
YmM5M2VkZjZlYjU0NDU3ODJlY2QxNzg4MzAuLmJmMjMwNmJjZTRkNTZmMTA5YTAzNjE4YjM0MDcy
ZmM1N2MwZTVhYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtMTU1
LDcgKzE1NSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZv
ID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotICAgIGluZm8tPnNldFVwQ2FsbChD
YWxsTGlua0luZm86OkNhbGwsIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIHJlZ1QwKTsK
KyAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29k
ZS5tX2FyZ3Y7CiAKQEAgLTIyNiw4ICsyMjYsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAog
ICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKIAogICAgIC8vIFNQIGhvbGRz
IG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENv
dW50IGluaXRpYWxpemVkLgotICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9jb2RlQmxv
Y2stPmJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KS5iaXRzKCk7CisgICAgYXV0byBieXRl
Y29kZUluZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOworICAg
IHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0
cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxsZWUuCkBAIC0y
NDIsNyArMjQyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKICAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZSk7CiAKICAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBj
YWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2Fs
bFR5cGVGb3Iob3Bjb2RlSUQpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCByZWdUMCk7
CisgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQp
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIHJlZ1QwKTsKICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CiAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5r
ZWRGdW5jdGlvbkNoZWNrOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZU1hcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
TWFwLmgKaW5kZXggZTEzMDhmMzM1YjhhMzc0NzU5YTg4NzAwZDhkM2ZmNzU0ZTc5ZjU5Ny4uZTA3
NTcyNGY5ZGZlOGJkNDk1YzIxM2Q0YzVmMWIyMWY1ZTFiYzQ2NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlTWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlTWFwLmgKQEAgLTM4LDMxICszOCwzMSBAQCBwcml2YXRlOgogICAgIHN0
cnVjdCBFbnRyeSB7CiAgICAgICAgIEVudHJ5KCkgeyB9CiAKLSAgICAgICAgRW50cnkodW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxv
Y2F0aW9uKQorICAgICAgICBFbnRyeShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbikKICAgICAgICAgICAgIDog
bV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICAsIG1fY29kZUxvY2F0
aW9uKGNvZGVMb2NhdGlvbikKICAgICAgICAgeyB9CiAKLSAgICAgICAgaW5saW5lIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KKyAgICAg
ICAgaW5saW5lIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
Ynl0ZWNvZGVJbmRleDsgfQogICAgICAgICBpbmxpbmUgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRy
eVB0clRhZz4gY29kZUxvY2F0aW9uKCkgeyByZXR1cm4gbV9jb2RlTG9jYXRpb247IH0KIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgQnl0
ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7CiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
RW50cnlQdHJUYWc+IG1fY29kZUxvY2F0aW9uOwogICAgIH07CiAKIHB1YmxpYzoKLSAgICB2b2lk
IGFwcGVuZCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5
UHRyVGFnPiBjb2RlTG9jYXRpb24pCisgICAgdm9pZCBhcHBlbmQoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4LCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24p
CiAgICAgewogICAgICAgICBtX2VudHJpZXMuYXBwZW5kKHsgYnl0ZWNvZGVJbmRleCwgY29kZUxv
Y2F0aW9uIH0pOwogICAgIH0KIAogICAgIHZvaWQgZmluaXNoKCkgeyBtX2VudHJpZXMuc2hyaW5r
VG9GaXQoKTsgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gZmluZCh1
bnNpZ25lZCBieXRlY29kZUluZGV4KSBjb25zdAorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+IGZpbmQoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KSBjb25zdAogICAgIHsK
ICAgICAgICAgYXV0byogZW50cnkgPQotICAgICAgICAgICAgYmluYXJ5U2VhcmNoPEVudHJ5LCB1
bnNpZ25lZD4obV9lbnRyaWVzLAorICAgICAgICAgICAgYmluYXJ5U2VhcmNoPEVudHJ5LCBCeXRl
Y29kZUluZGV4PihtX2VudHJpZXMsCiAgICAgICAgICAgICAgICAgbV9lbnRyaWVzLnNpemUoKSwg
Ynl0ZWNvZGVJbmRleCwgW10gKEVudHJ5KiBlbnRyeSkgewogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZW50cnktPmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICB9KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcAppbmRleCAyMGVkMzdm
ZWUzYTBmM2M5OWM2MjgyNTQ1YTRjMTBiM2JiZTM3OWM5Li43NWY5ZTI1MTYxYjUyMzZiMzBjODNm
MzM2ZDFkZWRkMTM0OGUyZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVERpc2Fzc2VtYmxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRE
aXNhc3NlbWJsZXIuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgVmVjdG9yPEpJVERpc2Fzc2VtYmxl
cjo6RHVtcGVkT3A+IEpJVERpc2Fzc2VtYmxlcjo6ZHVtcFZlY3RvckZvckluc3RydWN0aW9ucyhM
aW4KICAgICAgICAgfQogICAgICAgICBvdXQucmVzZXQoKTsKICAgICAgICAgcmVzdWx0LmFwcGVu
ZChEdW1wZWRPcCgpKTsKLSAgICAgICAgcmVzdWx0Lmxhc3QoKS5pbmRleCA9IGk7CisgICAgICAg
IHJlc3VsdC5sYXN0KCkuYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoaSk7CiAgICAgICAg
IG91dC5wcmludChwcmVmaXgpOwogICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcEJ5dGVjb2RlKG91
dCwgaSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbmV4dEluZGV4ID0gaSArIDE7IDsgbmV4dElu
ZGV4KyspIHsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIEpJVERpc2Fzc2VtYmxlcjo6cmVwb3J0
SW5zdHJ1Y3Rpb25zKFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24sIExpbgogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkdW1wZWRPcHMuc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgY29tcGlsYXRpb24tPmFkZERlc2NyaXB0aW9uKAogICAgICAgICAgICAgUHJvZmlsZXI6OkNv
bXBpbGVkQnl0ZWNvZGUoCi0gICAgICAgICAgICAgICAgUHJvZmlsZXI6Ok9yaWdpblN0YWNrKFBy
b2ZpbGVyOjpPcmlnaW4oY29tcGlsYXRpb24tPmJ5dGVjb2RlcygpLCBkdW1wZWRPcHNbaV0uaW5k
ZXgpKSwKKyAgICAgICAgICAgICAgICBQcm9maWxlcjo6T3JpZ2luU3RhY2soUHJvZmlsZXI6Ok9y
aWdpbihjb21waWxhdGlvbi0+Ynl0ZWNvZGVzKCksIGR1bXBlZE9wc1tpXS5ieXRlY29kZUluZGV4
KSksCiAgICAgICAgICAgICAgICAgZHVtcGVkT3BzW2ldLmRpc2Fzc2VtYmx5KSk7CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmgKaW5kZXggNWUz
MjI4NjAxYTM0MDI0N2RiZmIwOGY1OGUyYWNiNTI5NWZlYWE5Zi4uNWE2Mjc2YWVjODYxYmE3ZGQw
MGUxYTQwYzk1MGY1MTJjMTRlMTFkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVREaXNhc3NlbWJsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VERpc2Fzc2VtYmxlci5oCkBAIC02Nyw3ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGZpcnN0U2xvd0xhYmVsKCk7CiAgICAgCiAgICAgc3RydWN0IER1bXBlZE9w
IHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXg7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleDsKICAgICAgICAgQ1N0cmluZyBkaXNhc3NlbWJseTsKICAgICB9OwogICAgIFZlY3Rv
cjxEdW1wZWRPcD4gZHVtcFZlY3RvckZvckluc3RydWN0aW9ucyhMaW5rQnVmZmVyJiwgY29uc3Qg
Y2hhciogcHJlZml4LCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6OkxhYmVsPiYgbGFiZWxzLCBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgZW5kTGFiZWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAppbmRleCAzOTU5YjhkNTA4OGM0ZmE3MDcwZjRlNTg2YWIwOGM3NTQzZjFkMjgxLi4x
MDgwMDQ2M2JhYzk3OGFhYmJiMWFhZDRlYTU2YzY3OGM3NTFiNjAxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaApAQCAtMTA5LDI5ICsxMDksMjMgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0LAogCiBBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZENhbGwo
Q29kZVB0cjxOb1B0clRhZz4gdGFyZ2V0KQogewotICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0
ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7IC8vIFRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBz
byB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgorICAgIEFTU0VSVChtX2J5dGVjb2RlSW5k
ZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xk
IHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogICAgIENh
bGwgbmFrZWRDYWxsID0gbmVhckNhbGwoKTsKLSAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3Jk
KG5ha2VkQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
Pih0YXJnZXQucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKSkpOworICAgIG1fY2FsbHMuYXBw
ZW5kKENhbGxSZWNvcmQobmFrZWRDYWxsLCBtX2J5dGVjb2RlSW5kZXgsIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4odGFyZ2V0LnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkpKTsKICAg
ICByZXR1cm4gbmFrZWRDYWxsOwogfQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVt
aXROYWtlZFRhaWxDYWxsKENvZGVQdHI8Tm9QdHJUYWc+IHRhcmdldCkKIHsKLSAgICBBU1NFUlQo
bV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkp
OyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBh
dGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKyAgICBBU1NF
UlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4
IGlzIHNldC4KICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJUYWlsQ2FsbCgpOwotICAgIG1fY2Fs
bHMuYXBwZW5kKENhbGxSZWNvcmQobmFrZWRDYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KHRhcmdldC5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkp
KSk7CisgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChuYWtlZENhbGwsIG1fYnl0ZWNvZGVJ
bmRleCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPih0YXJnZXQucmV0YWdnZWQ8T3BlcmF0
aW9uUHRyVGFnPigpKSkpOwogICAgIHJldHVybiBuYWtlZENhbGw7CiB9CiAKIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmFtZSgpCiB7Ci0gICAgQVNTRVJUKHN0YXRpY19j
YXN0PGludD4obV9ieXRlY29kZU9mZnNldCkgPj0gMCk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQobV9ieXRlY29kZU9mZnNldCkucHRyKCk7Ci0gICAgdWludDMyX3QgbG9jYXRp
b25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbikuYml0cygpOwotI2Vsc2UKLSAgICB1
aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLmJp
dHMoKTsKLSNlbmRpZgorICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRp
b25CaXRzKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICAKICAg
ICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgdGhhdCB0aGlzIGlzIG5lZWRlZC4gSklUT3BlcmF0
aW9ucyB0ZW5kIHRvIHVwZGF0ZSB0aGUgdG9wIGNhbGwgZnJhbWUgb24KQEAgLTE5Niw0NSArMTkw
LDQ1IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVj
b2RlT2Zmc2V0KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgd2hpbGUgKGl0
ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRvID09IGJ5dGVjb2RlT2Zmc2V0KQorICAg
IHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAmJiBpdGVyLT50byA9PSBieXRlY29kZUlu
ZGV4KQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9m
ZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1l
dGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlv
biwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKyAgICBBU1NFUlQobV9ieXRlY29k
ZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAot
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVPZmZz
ZXQpKTsKKyAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVj
b2RlSW5kZXgpKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29u
c3QgSnVtcExpc3QmIGp1bXBMaXN0KQogewotICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7IC8vIFRoaXMgbWV0aG9kIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0
aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgorICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgp
OyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBh
dGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAgZm9y
IChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVtcHMoKSkKLSAgICAgICAgbV9zbG93Q2Fz
ZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZU9mZnNldCkpOworICAgICAg
ICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgp
KTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoKQogewotICAgIEFT
U0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2Nv
bGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgorICAg
IEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
SW5kZXggaXMgc2V0LgogICAgIAogICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlz
IHdheSB0byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dD
YXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlT2Zmc2V0KSk7CisgICAgbV9zbG93Q2FzZXMu
YXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAog
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9m
ZnNldCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zm
c2V0IGlzIHNldC4KKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIG1fam1wVGFibGUuYXBwZW5kKEp1
bXBUYWJsZShqdW1wLCBtX2J5dGVjb2RlT2Zmc2V0ICsgcmVsYXRpdmVPZmZzZXQpKTsKKyAgICBt
X2ptcFRhYmxlLmFwcGVuZChKdW1wVGFibGUoanVtcCwgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
ICsgcmVsYXRpdmVPZmZzZXQpKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVt
cChjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIGludCByZWxhdGl2ZU9mZnNldCkKIHsKLSAgICBB
U1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKyAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldC4KIAogICAgIGZvciAoYXV0byYganVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkp
CiAgICAgICAgIGFkZEp1bXAoanVtcCwgcmVsYXRpdmVPZmZzZXQpOwpAQCAtMjQyLDkgKzIzNiw5
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoY29uc3QgSnVtcExpc3QmIGp1bXBM
aXN0LCBpbnQgcmVsYXRpdmVPZmZzZXQpCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd1RvSG90KEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQogewotICAgIEFTU0VS
VChtX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgorICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0LgogCi0gICAganVtcC5saW5rVG8obV9sYWJlbHNbbV9ieXRlY29kZU9mZnNldCAr
IHJlbGF0aXZlT2Zmc2V0XSwgdGhpcyk7CisgICAganVtcC5saW5rVG8obV9sYWJlbHNbbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXRdLCB0aGlzKTsKIH0KIAogI2lmIEVO
QUJMRShTQU1QTElOR19GTEFHUykKQEAgLTU3Myw3ICs1NjcsNyBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwg
aW50MzJfdAogLy8gZ2V0IGFyZyBwdXRzIGFuIGFyZyBmcm9tIHRoZSBTRiByZWdpc3RlciBhcnJh
eSBpbnRvIGEgaC93IHJlZ2lzdGVyCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogewotICAgIEFTU0VSVChtX2J5
dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7IC8v
IFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBn
ZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgorICAgIEFTU0VSVCht
X2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVy
aW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMg
c2V0LgogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMp
KSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IGYzYWI1OWFh
OTQyMzRlYTQxMjhlYjQ5NWMzOTJjZTk5NWI2NjMzMmYuLjBmYzQwNjkyN2Y3MmRiYTBiZTU3NWJi
OGIwMGI5ZjRjYTZlNmZjOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAg
ICAgIHJlZ1QwLCAvLyByZXN1bHQKICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCkBAIC03MjAsOSAr
NzIwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBt
ZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5n
KCkpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAm
dm0oKSwgbV9ieXRlY29kZU9mZnNldCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
VHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAg
ICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNo
QW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZU9mZnNldCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0o
KSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJy
YW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRy
VGFnKTsKQEAgLTc2MCw3ICs3NjAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICAvLyBjcmVhdGUganVt
cCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVt
ZW50LgogICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVj
b3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZU9mZnNldCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVj
b3JkOjpJbW1lZGlhdGUpKTsKKyAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVt
cFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1t
ZWRpYXRlKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKQEAgLTc3Nyw3ICs3NzcsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5h
dGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUq
IGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVP
ZmZzZXQsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CisgICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBk
ZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGp1bXBUYWJsZS0+
ZW5zdXJlQ1RJVGFibGUoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVl
LCByZWdUMCk7CkBAIC03OTQsNyArNzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgLy8gY3Jl
YXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNo
IHN0YXRlbWVudC4KICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9j
ay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIG1fc3dpdGNoZXMuYXBw
ZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRPZmZz
ZXQpKTsKKyAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5
dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NydXRpbmVlLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hT
dHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwpAQCAtMTAzNiw3ICsxMDM2LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2wKIAogICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVP
clJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1l
KTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9i
eXRlY29kZU9mZnNldCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUs
ICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgICAgICBKdW1wIG5vT3B0aW1p
emVkRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICAgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKICAgICAgICAgICAgIEp1bXAgb2sgPSBicmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCByZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0cihiaXR3
aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PigxMDAwKSkpKTsKQEAgLTEzMDEs
NyArMTMwMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBMYWJlbCBuZXh0SG90UGF0
aCA9IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlW
YWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zmc2V0LCBQYXRjaGFibGVK
dW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CisgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJ
bmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJv
ZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNTA0LDcgKzE1MDQs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNr
ZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCksIHJl
Z1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0
KCksIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRS
ZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVPZmZzZXQpKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFk
b3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2
NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRl
eCA4NzM0OWVlODVhMzlhNmJmMzQyN2RkNDY3MTZhNGNiNGE5NDdjNzUyLi5lYjUxZTRlM2E0ZTc0
NzQ3ZTgwYzg1MDFjMTQ5YTlhZWMyNzc5NDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90byk7CiAgICAgCiAgICAgSklUSW5z
dGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLAorICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAogICAgICAgICByZWdUMiwgLy8g
dmFsdWUKQEAgLTkxMiw5ICs5MTIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRC
dWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNo
b3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlP
U1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5k
ZXguYXNCaXRzKCkpOwogICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25U
cnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlT2Zmc2V0
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRW
YWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8g
c2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5v
UHRyVGFnKTsKQEAgLTk1Miw3ICs5NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1t
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICAvLyBjcmVhdGUg
anVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3Rh
dGVtZW50LgogICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5z
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNo
UmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZU9mZnNldCwgZGVmYXVsdE9mZnNldCwgU3dpdGNo
UmVjb3JkOjpJbW1lZGlhdGUpKTsKKyAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
anVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6
SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCiAgICAgZW1p
dExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwpAQCAtOTY5LDcgKzk2OSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBsZUp1bXBUYWJsZSoganVt
cFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAg
bV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZU9mZnNl
dCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKKyAgICBtX3N3aXRj
aGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1
bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAganVtcFRhYmxlLT5lbnN1
cmVDVElUYWJsZSgpOwogCiAgICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwpA
QCAtOTg2LDcgKzk4Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRh
YmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQu
CiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hS
ZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlT2Zmc2V0LCBkZWZhdWx0T2Zmc2V0KSk7CisgICAg
bV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4
LCBkZWZhdWx0T2Zmc2V0KSk7CiAKICAgICBlbWl0TG9hZChzY3J1dGluZWUsIHJlZ1QxLCByZWdU
MCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktl
eVR5cGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgdGFibGVJbmRleCk7CkBAIC0xMTc0LDcgKzExNzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogCiAgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywg
bV9ieXRlY29kZU9mZnNldCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxl
LCBkb25lLCBuZXh0SG90UGF0aCkpOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5k
KEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFi
bGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
aW5kZXggODhkNTA4YTAzZGQwYTQ5NGY0OWViMjM0MTE0NWNjZGFjN2M5M2RlZi4uMzgwOTQ2MWFi
ZTUyNzc1NTdhZTFhNzJmZTE2N2FjYWNjMWFiMzlmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC03OTcsNyArNzk3LDcgQEAgc3RhdGljIE9wdGlt
aXphdGlvblJlc3VsdCB0cnlQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGwKICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0Lmlz
SW50MzIoKSkgewogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVl
KTsKIAotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgpKTsKKyAgICAg
ICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkp
OwogICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwogCiAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwpAQCAtODIxLDcgKzgy
MSw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5UHV0QnlWYWxPcHRpbWl6ZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIg
cHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZl
VXApOwogICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJv
cGVydHlOYW1lKSkgewotICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZz
ZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0g
Qnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJv
dXRpbmUpOwogICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c2VlbikgewogICAgICAgICAgICAg
ICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkID09IHByb3BlcnR5TmFtZSkgewpAQCAtODg3LDcg
Kzg4Nyw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5RGlyZWN0UHV0QnlWYWxPcHRp
bWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKLSAg
ICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgIEFTU0VS
VChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAg
ICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKIAogICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKQEAgLTkxMCw3ICs5MTAsNyBAQCBz
dGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdAogICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKTsKICAg
ICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2Rl
SW5kZXgoMCkpOwogICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsK
ICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKICAgICAgICAgICAgICAgICBpZiAo
YnlWYWxJbmZvLT5jYWNoZWRJZCA9PSBwcm9wZXJ0eU5hbWUpIHsKQEAgLTE0NzgsMTEgKzE0Nzgs
MTIgQEAgc3RhdGljIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRPcHRpbWl6ZUFmdGVyV2Fy
bVVwKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIGNvZGVCbG9jay0+b3B0aW1pemVBZnRlcldh
cm1VcCgpOwogfQogCi1TbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25P
cHRpbWl6ZShWTSogdm1Qb2ludGVyLCB1aW50MzJfdCBieXRlY29kZUluZGV4KQorU2xvd1BhdGhS
ZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT3B0aW1pemUoVk0qIHZtUG9pbnRlciwg
dWludDMyX3QgYnl0ZWNvZGVJbmRleEJpdHMpCiB7CiAgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsK
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4Ojpmcm9tQml0cyhieXRlY29kZUlu
ZGV4Qml0cyk7CiAKICAgICAvLyBEZWZlciBHQyBmb3IgYSB3aGlsZSBzbyB0aGF0IGl0IGRvZXNu
J3QgcnVuIGJldHdlZW4gd2hlbiB3ZSBlbnRlciBpbnRvIHRoaXMKICAgICAvLyBzbG93IHBhdGgg
YW5kIHdoZW4gd2UgZmlndXJlIG91dCB0aGUgc3RhdGUgb2Ygb3VyIGNvZGUgYmxvY2suIFRoaXMg
cHJldmVudHMKQEAgLTE3MjQsMTEgKzE3MjUsMTIgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uT3B0aW1pemUoVk0qIHZtUG9pbnRlciwgdWludDMyX3QgYnl0ZWMK
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KDAsIDApOwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaChWTSogdm1Qb2ludGVyLCB1aW50MzJfdCBieXRl
Y29kZUluZGV4KQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0
Y2goVk0qIHZtUG9pbnRlciwgdWludDMyX3QgYnl0ZWNvZGVJbmRleEJpdHMpCiB7CiAgICAgVk0m
IHZtID0gKnZtUG9pbnRlcjsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4Ojpm
cm9tQml0cyhieXRlY29kZUluZGV4Qml0cyk7CiAKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZFJl
cGxhY2VtZW50ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+cmVwbGFjZW1lbnQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoIW9wdGltaXplZFJlcGxhY2VtZW50KSkKQEAgLTE3NDYsMTEgKzE3NDgsMTIg
QEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2goVk0qIHZt
UG9pbnRlciwgdWludDMyX3QgYnl0ZWNvZGUKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2Zp
bGUoVk0qIHZtUG9pbnRlciwgdWludDMyX3QgYnl0ZWNvZGVJbmRleCkKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlKFZNKiB2bVBv
aW50ZXIsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXhCaXRzKQogewogICAgIFZNJiB2bSA9ICp2bVBv
aW50ZXI7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYnl0
ZWNvZGVJbmRleEJpdHMpOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwogICAgIENvZGVCbG9jayogb3B0aW1pemVkUmVwbGFjZW1lbnQgPSBjb2Rl
QmxvY2stPnJlcGxhY2VtZW50KCk7CkBAIC0xNzY3LDcgKzE3NzAsNyBAQCBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZShWTSogdm1Q
b2ludGVyLCB1aQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjb2RlQmxvY2stPmVuc3Vy
ZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7
CisgICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgYXV0byBieXRlY29kZSA9IGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCktPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogICAgIG1ldGFkYXRhLm1f
YnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewpA
QCAtMTkyNyw3ICsxOTMwLDcgQEAgc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmEKICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAo
ZXhpc3RpbmdBdG9tU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgcmVzdWx0
ID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5mYXN0R2V0T3duUHJvcGVydHkodm0sIHN0cnVjdHVyZSwg
ZXhpc3RpbmdBdG9tU3RyaW5nLmdldCgpKSkgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
Y2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiBieVZhbEluZm8tPmNhY2hl
ZElkLmltcGwoKSAhPSBleGlzdGluZ0F0b21TdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CkBAIC0xOTM3LDcgKzE5NDAsNyBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZh
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNW
YQogICAgIH0KIAogICAgIGlmIChzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIEFTU0VS
VChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICBBU1NFUlQoY2FsbEZyYW1l
LT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIGJ5VmFsSW5m
by0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKIAogICAgICAgICBpbnQzMl90IGkgPSBzdWJzY3JpcHQu
YXNJbnQzMigpOwpAQCAtMTk3OCw3ICsxOTgxLDcgQEAgc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmEK
ICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCi0gICAgQVNT
RVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQVNTRVJUKGNhbGxGcmFtZS0+
Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgIGlmIChieVZhbEluZm8t
PnN0dWJJbmZvICYmICghaXNTdHJpbmdPclN5bWJvbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+
Y2FjaGVkSWQgIT0gcHJvcGVydHkpKQogICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9
IHRydWU7CiAKQEAgLTE5OTYsNyArMTk5OSw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQg
dHJ5R2V0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsCiAg
ICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKICAg
ICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAKLSAgICAgICAg
QVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgIEFTU0VSVChjYWxs
RnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgQVNT
RVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKIAogICAgICAgICBpZiAoaGFzT3B0aW1pemFi
bGVJbmRleGluZyhvYmplY3QtPnN0cnVjdHVyZSh2bSkpKSB7CkBAIC0yMDI0LDcgKzIwMjcsNyBA
QCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeUdldEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbAogICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKTsK
ICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFwYXJzZUluZGV4KHByb3BlcnR5
TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkp
OworICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVj
b2RlSW5kZXgoMCkpOwogICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5l
KTsKICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKICAgICAgICAgICAgICAgICBp
ZiAoYnlWYWxJbmZvLT5jYWNoZWRJZCA9PSBwcm9wZXJ0eU5hbWUpIHsKQEAgLTIxMDgsNyArMjEx
MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFBy
b3BlcnR5RGVmYXVsdChKU0dsb2JhbE9iamVjdCoKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNP
YmplY3QoYmFzZVZhbHVlKTsKICAgICBib29sIGRpZE9wdGltaXplID0gZmFsc2U7CiAKLSAgICBB
U1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgpKTsKKyAgICBBU1NFUlQoY2FsbEZyYW1l
LT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgQVNTRVJUKCFieVZh
bEluZm8tPnN0dWJSb3V0aW5lKTsKICAgICAKICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGlu
ZyhvYmplY3QtPnN0cnVjdHVyZSh2bSkpKSB7CkBAIC0yMTgxLDcgKzIxODQsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplYwogICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGdsb2JhbE9i
amVjdCwgaSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgICAgICBpZiAoIWlzSlNTdHJpbmcoYmFzZVZhbHVlKSkgewotICAgICAgICAg
ICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgICAgICBBU1NF
UlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAg
ICAgICAgICBhdXRvIGdldEJ5VmFsRnVuY3Rpb24gPSBieVZhbEluZm8tPnN0dWJSb3V0aW5lID8g
b3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKICAg
ICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9V
Ul9SRVRVUk5fQUREUkVTUyksIGdldEJ5VmFsRnVuY3Rpb24pOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDllZDIz
NzdjMGFhMDRjZjAxZWUzYmZlYmQ1YzkwZGZmNGViMjczMDEuLmZmMzliMjJiMGYxN2RjYjg0MTA5
M2I0NTVlODk0NmIwYjRjYmQ4NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAg
ICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwogCi0gICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zm
c2V0LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgp
KTsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5m
byhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgbm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHBy
b2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CiB9CiAKIEpJVEdldEJ5SWRHZW5lcmF0b3IgSklU
OjplbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9wR2V0QnlW
YWwgYnl0ZWNvZGUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSnVtcCYgZmFzdERv
bmVDYXNlLCBKdW1wJiBzbG93RG9uZUNhc2UsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCkBAIC0xNDIs
NyArMTQyLDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNo
ZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgT3BHZXRCeVYKICAgICBlbWl0QnlWYWxJZGVudGlm
aWVyQ2hlY2soYnlWYWxJbmZvLCByZWdUMSwgcmVnVDMsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2Vz
KTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zm
c2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBt
X2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
ICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwogCkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIAogICAgIExhYmVs
IGRvbmUgPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5k
KEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwgbm90SW5k
ZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKKyAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0
ZWNvZGVJbmRleCwgbm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUp
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0zNzUsNyArMzc1LDcgQEAgSklUUHV0
QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5
VmFsSW5mbywgT3AgYnl0ZWMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdU
MCwgdmFsdWUsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMSksIHJlZ1QyLCBtX2NvZGVCbG9jay0+ZWNtYU1vZGUoKSwgcHV0S2luZCk7CiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFs
dWUsIFNob3VsZEZpbHRlckJhc2UpOwpAQCAtNTA1LDcgKzUwNSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAg
aWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFj
Y2Vzc1R5cGU6OlRyeUdldCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC01NDQsNyArNTQ0LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAogICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0RGlyZWN0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTU5
MCw3ICs1OTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICB9CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOwogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwpAQCAtNjE0LDcgKzYxNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKIAogICAgIEpJVEdl
dEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAg
ICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCBBY2Nlc3NUeXBlOjpHZXRXaXRoVGhpcyk7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CkBAIC02NzQsNyArNjc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgbV9jb2RlQmxvY2stPmVjbWFNb2RlKCksCiAgICAgICAg
IGRpcmVjdCA/IERpcmVjdCA6IE5vdERpcmVjdCk7CiAgICAgCkBAIC03MTQsNyArNzE0LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZz
ZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAog
ICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFdvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xp
c3QuY3BwCmluZGV4IGU5YjQ3MmFiZjg4NDgwNTRhYTdmYmRjOWMyYWNkZGViMWE3NWM3YjkuLmM2
NDhkNDZhZjRhMWE3OGRhZjYwNzAyNDRmYTlkOTk1NGNmNzc2YTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCkBAIC0zNiw5ICszNiw5IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBKSVRXb3JrbGlzdDo6UGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxKSVRXb3JrbGlzdDo6UGxhbj4gewogcHVibGljOgotICAgIFBsYW4oQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KQorICAgIFBsYW4o
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCkKICAgICAgICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgICAgICwgbV9qaXQo
Y29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KQor
ICAgICAgICAsIG1faml0KGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KQogICAgIHsKICAgICAgICAgbV9qaXQuZG9NYWluVGhyZWFkUHJlcGFyYXRp
b25CZWZvcmVDb21waWxlKCk7CiAgICAgfQpAQCAtODMsOSArODMsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX2lzRmluaXNoZWRDb21waWxpbmc7CiAgICAgfQogICAgIAotICAgIHN0YXRp
YyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGxvb3BPU1JF
bnRyeUJ5dGVjb2RlT2Zmc2V0KQorICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAg
ICB7Ci0gICAgICAgIFBsYW4gcGxhbihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zm
c2V0KTsKKyAgICAgICAgUGxhbiBwbGFuKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleCk7CiAgICAgICAgIHBsYW4uY29tcGlsZUluVGhyZWFkKCk7CiAgICAgICAgIHBsYW4uZmlu
YWxpemUoKTsKICAgICB9CkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBKSVRXb3JrbGlzdDo6cG9s
bChWTSYgdm0pCiAgICAgZmluYWxpemVQbGFucyhteVBsYW5zKTsKIH0KIAotdm9pZCBKSVRXb3Jr
bGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBsb29wT1NS
RW50cnlCeXRlY29kZU9mZnNldCkKK3ZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KQogewogICAgIERlZmVyR0MgZGVmZXJHQyhjb2RlQmxvY2stPnZtKCkuaGVhcCk7CiAgICAgUkVM
RUFTRV9BU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJU
aHVuayk7CkBAIC0yMzksNyArMjM5LDcgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVy
KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY28KICAgICB9
CiAgICAgCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpIHsKLSAgICAgICAg
UGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KTsK
KyAgICAgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMjUzLDcgKzI1Myw3IEBA
IHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5z
aWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvCiAgICAgICAgIAogICAgICAgICBpZiAobV9udW1BdmFp
bGFibGVUaHJlYWRzKSB7CiAgICAgICAgICAgICBtX3BsYW5uZWQuYWRkKGNvZGVCbG9jayk7Ci0g
ICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKG5ldyBQbGFuKGNvZGVCbG9j
aywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpKTsKKyAgICAgICAgICAgIFJlZlB0cjxQbGFu
PiBwbGFuID0gYWRvcHRSZWYobmV3IFBsYW4oY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KSk7CiAgICAgICAgICAgICBtX3BsYW5zLmFwcGVuZChwbGFuKTsKICAgICAgICAgICAg
IG1fcXVldWUuYXBwZW5kKHBsYW4pOwogICAgICAgICAgICAgbV9jb25kaXRpb24tPm5vdGlmeUFs
bChsb2NrZXIpOwpAQCAtMjc3LDEwICsyNzcsMTAgQEAgdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGls
ZUxhdGVyKENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY28K
ICAgICAvLyBUaGlzIHdvcmtzIGFyb3VuZCB0aGUgaXNzdWUuIElmIHRoZSBjb25jdXJyZW50IEpJ
VCB0aHJlYWQgaXMgY29udm95ZWQsIHdlIHJldmVydCB0byBtYWluCiAgICAgLy8gdGhyZWFkIGNv
bXBpbGVzLiBUaGlzIGlzIHByb2JhYmx5IG5vdCBhcyBnb29kIGFzIGlmIHdlIGhhZCBtdWx0aXBs
ZSBKSVQgdGhyZWFkcy4gTWF5YmUgd2UKICAgICAvLyBjYW4gZG8gdGhhdCBzb21lZGF5LgotICAg
IFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7
CisgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpOwogfQogCi12b2lkIEpJVFdvcmtsaXN0Ojpjb21waWxlTm93KENvZGVCbG9jayogY29kZUJs
b2NrLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkKK3ZvaWQgSklUV29ya2xp
c3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwpAQCAtMzA4LDcgKzMwOCw3IEBAIHZvaWQgSklU
V29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlCiAgICAgY29kZUJsb2NrLT5yZXNldEpJVERhdGEoKTsKICAgICAKICAg
ICAvLyBPSywganVzdCBjb21waWxlIGl0LgotICAgIEpJVDo6Y29tcGlsZSh2bSwgY29kZUJsb2Nr
LCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7
CisgICAgSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2Nl
ZWQsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUV29ya2xpc3QuaAppbmRleCBlYjZmNTUxNWRmNzAzOTdlNzMwYzFjMjc5OTlmZmIz
ODJmNmIyYjYxLi5lZGZlYzVjODM4OTIzODFiOGJhOGVjMDhhOGIzYWE0MWM0YzcyNWI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlzdC5oCkBAIC01Myw5ICs1Myw4IEBAIHB1
YmxpYzoKICAgICBib29sIGNvbXBsZXRlQWxsRm9yVk0oVk0mKTsgLy8gUmV0dXJuIHRydWUgaWYg
YW55IEpJVCB3b3JrIGhhcHBlbmVkLgogICAgIHZvaWQgcG9sbChWTSYpOwogICAgIAotICAgIHZv
aWQgY29tcGlsZUxhdGVyKENvZGVCbG9jayosIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
T2Zmc2V0ID0gMCk7Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTm93KENvZGVCbG9jayosIHVuc2ln
bmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gMCk7CisgICAgdm9pZCBjb21waWxlTGF0
ZXIoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleCgwKSk7CisgICAgdm9pZCBjb21waWxlTm93KENvZGVCbG9jayosIEJ5dGVj
b2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwog
ICAgIAogICAgIHN0YXRpYyBKSVRXb3JrbGlzdCYgZW5zdXJlR2xvYmFsV29ya2xpc3QoKTsKICAg
ICBzdGF0aWMgSklUV29ya2xpc3QqIGV4aXN0aW5nR2xvYmFsV29ya2xpc3RPck51bGwoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAKaW5kZXgg
MjEyOThhZDg0Y2FmMzY5MzAzYjM1ZDJkMzk4MjE4M2JhNmU1MDdkOC4uMjY0NzE4ZDk3Yzc4NGJj
MmZhNzc0MDMxYWZjZGIwODA5OWQxZTU5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAKQEAgLTE4OSw5ICsxODksOSBAQCBQQ1RvQ29kZU9y
aWdpbk1hcDo6UENUb0NvZGVPcmlnaW5NYXAoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiYgYnVp
bGRlciwgTGlua0J1ZgogICAgIH07CiAKICAgICBEZWx0YUNvbXByZXNzaW9uQnVpbGRlciBjb2Rl
T3JpZ2luQ29tcHJlc3Nvcigoc2l6ZW9mKGludHB0cl90KSArIHNpemVvZihpbnQ4X3QpICsgc2l6
ZW9mKGludDhfdCkgKyBzaXplb2YoSW5saW5lQ2FsbEZyYW1lKikpICogYnVpbGRlci5tX2NvZGVS
YW5nZXMuc2l6ZSgpKTsKLSAgICBDb2RlT3JpZ2luIGxhc3RDb2RlT3JpZ2luKDAsIG51bGxwdHIp
OworICAgIENvZGVPcmlnaW4gbGFzdENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAg
YXV0byBidWlsZENvZGVPcmlnaW5UYWJsZSA9IFsmXSAoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9y
aWdpbikgewotICAgICAgICBpbnRwdHJfdCBkZWx0YSA9IHN0YXRpY19jYXN0PGludHB0cl90Pihj
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSkgLSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4obGFzdENv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgaW50cHRyX3QgZGVsdGEgPSBzdGF0
aWNfY2FzdDxpbnRwdHJfdD4oY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCkpIC0g
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGxhc3RDb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5vZmZz
ZXQoKSk7CiAgICAgICAgIGxhc3RDb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKICAgICAgICAgaWYg
KGRlbHRhID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ4X3Q+OjptYXgoKSB8fCBkZWx0YSA8IHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWluKCkgfHwgZGVsdGEgPT0gc2VudGluZWxCeXRl
Y29kZURlbHRhKSB7CiAgICAgICAgICAgICBjb2RlT3JpZ2luQ29tcHJlc3Nvci53cml0ZTxpbnQ4
X3Q+KHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSk7CkBAIC0yNTQsNyArMjU0LDcgQEAgT3B0aW9uYWw8
Q29kZU9yaWdpbj4gUENUb0NvZGVPcmlnaW5NYXA6OmZpbmRQQyh2b2lkKiBwYykgY29uc3QKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIHVpbnRwdHJfdCBjdXJyZW50UEMgPSAw
OwotICAgIHVuc2lnbmVkIGN1cnJlbnRCeXRlY29kZUluZGV4ID0gMDsKKyAgICBCeXRlY29kZUlu
ZGV4IGN1cnJlbnRCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBJbmxpbmVD
YWxsRnJhbWUqIGN1cnJlbnRJbmxpbmVDYWxsRnJhbWUgPSBudWxscHRyOwogCiAgICAgRGVsdGFD
b21wcmVzc2Vpb25SZWFkZXIgcGNSZWFkZXIobV9jb21wcmVzc2VkUENzLCBtX2NvbXByZXNzZWRQ
Q0J1ZmZlclNpemUpOwpAQCAtMjgwLDcgKzI4MCw3IEBAIE9wdGlvbmFsPENvZGVPcmlnaW4+IFBD
VG9Db2RlT3JpZ2luTWFwOjpmaW5kUEModm9pZCogcGMpIGNvbnN0CiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgZGVsdGEgPSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4odmFsdWUpOwog
Ci0gICAgICAgICAgICBjdXJyZW50Qnl0ZWNvZGVJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oY3VycmVudEJ5dGVjb2RlSW5kZXgpICsgZGVsdGEpOwor
ICAgICAgICAgICAgY3VycmVudEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KHN0YXRpY19j
YXN0PGludHB0cl90PihjdXJyZW50Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkgKyBkZWx0YSk7CiAK
ICAgICAgICAgICAgIGludDhfdCBoYXNJbmxpbmVGcmFtZSA9IGNvZGVPcmlnaW5SZWFkZXIucmVh
ZDxpbnQ4X3Q+KCk7CiAgICAgICAgICAgICBBU1NFUlQoaGFzSW5saW5lRnJhbWUgPT0gMCB8fCBo
YXNJbmxpbmVGcmFtZSA9PSAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUENUb0NvZGVPcmlnaW5NYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0Nv
ZGVPcmlnaW5NYXAuaAppbmRleCA5ZmI2MmI2NDViYWZiNGExM2ZmN2VmYjdmNzYxY2E5MmJlYTNl
NWZhLi5iMGQ1NjFmYzU2ZDVmMDgxMGM4YzBlY2ZhZmY3MjJkMmQzYjMzZjI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oCkBAIC01Nyw3ICs1Nyw3
IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdm9pZCBhcHBlbmRJdGVtKE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCwgY29uc3QgQ29kZU9yaWdpbiYpOwotICAgIHN0YXRpYyBDb2RlT3JpZ2luIGRlZmF1
bHRDb2RlT3JpZ2luKCkgeyByZXR1cm4gQ29kZU9yaWdpbigwLCBudWxscHRyKTsgfQorICAgIHN0
YXRpYyBDb2RlT3JpZ2luIGRlZmF1bHRDb2RlT3JpZ2luKCkgeyByZXR1cm4gQ29kZU9yaWdpbihC
eXRlY29kZUluZGV4KDApKTsgfQogCiAgICAgYm9vbCBkaWRCdWlsZE1hcHBpbmcoKSBjb25zdCB7
IHJldHVybiBtX3Nob3VsZEJ1aWxkTWFwcGluZzsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TbG93UGF0aENhbGwuaAppbmRleCA4ZDJmYWE4NDViOGY4Y2I5YzMwYzk4MDQwNjYwYjc2MTA5
NzlhNmUyLi5jMTFlNzliMGM1NjFjYTMzY2NiMmJiZTBhOGViM2FmNmVkYTZiY2UzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKQEAgLTU5LDcgKzU5LDcgQEAgcHVi
bGljOgogICAgICAgICBtX2ppdC0+bW92ZShKSVQ6OlRydXN0ZWRJbW1QdHIobV9wYyksIEpJVDo6
YXJndW1lbnRHUFIxKTsKICNlbmRpZgogICAgICAgICBKSVQ6OkNhbGwgY2FsbCA9IG1faml0LT5j
YWxsKE9wZXJhdGlvblB0clRhZyk7Ci0gICAgICAgIG1faml0LT5tX2NhbGxzLmFwcGVuZChDYWxs
UmVjb3JkKGNhbGwsIG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+KG1fc2xvd1BhdGhGdW5jdGlvbikpKTsKKyAgICAgICAgbV9qaXQtPm1fY2FsbHMu
YXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgbV9qaXQtPm1fYnl0ZWNvZGVJbmRleCwgRnVuY3Rpb25Q
dHI8T3BlcmF0aW9uUHRyVGFnPihtX3Nsb3dQYXRoRnVuY3Rpb24pKSk7CiAKICNpZiBDUFUoWDg2
XzY0KSAmJiBPUyhXSU5ET1dTKQogICAgICAgICBtX2ppdC0+cG9wKEpJVDo6cmVnVDApOyAvLyB2
UEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmlu
ZGV4IDRiMDVmNjhmMTcyMDMwNDExOThlYTI0NzdiNjA0ZWIzMDY4MzJhZTEuLjYwYjQ5ZjkxMTYz
ZjUzYzRkNDc4NWJkMTE0M2RhNWQ5Y2UwNDZhZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtMzY4LDcgKzM2OCw3IEBAIGlubGluZSBi
b29sIHNob3VsZEpJVChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIH0KIAogLy8gUmV0dXJucyB0cnVl
IGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgotaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhl
dXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVPZmZzZXQgPSAwKQoraW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJp
c3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSkKIHsKICAgICBEZWZlckdDRm9y
QVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7IC8vIE15IGNhbGxlcnMgZG9uJ3Qgc2V0IHRvcCBjYWxs
ZnJhbWUsIHNvIHdlIGRvbid0IHdhbnQgdG8gR0MgaGVyZSBhdCBhbGwuCiAgICAgQVNTRVJUKFZN
OjpjYW5Vc2VKSVQoKSk7CkBAIC0zOTIsNyArMzkyLDcgQEAgaW5saW5lIGJvb2wgaml0Q29tcGls
ZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQg
bG8KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgSklUVHlwZTo6SW50ZXJw
cmV0ZXJUaHVuazogewotICAgICAgICBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3Qo
KS5jb21waWxlTGF0ZXIoY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7Cisg
ICAgICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBpbGVMYXRlcihj
b2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICByZXR1cm4gY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQ7CiAgICAgfQogICAgIGRl
ZmF1bHQ6CkBAIC00NzYsMjIgKzQ3NiwyMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29z
cikKICAgICAgICAgICAgIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLCAiXG4iKTsK
ICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBj
b2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICBhdXRvIGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KGNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQocGMpKTsK
IAogICAgIGlmICghc2hvdWxkSklUKGNvZGVCbG9jaykpIHsKICAgICAgICAgY29kZUJsb2NrLT5k
b250SklUQW55dGltZVNvb24oKTsKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTygwLCAwKTsKICAg
ICB9CiAgICAgCi0gICAgaWYgKCFqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJs
b2NrLCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkpCisgICAgaWYgKCFqaXRDb21waWxlQW5k
U2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSkK
ICAgICAgICAgTExJTlRfUkVUVVJOX1RXTygwLCAwKTsKICAgICAKLSAgICBDT0RFQkxPQ0tfTE9H
X0VWRU5UKGNvZGVCbG9jaywgIm9zckVudHJ5IiwgKCJhdCBiYyMiLCBsb29wT1NSRW50cnlCeXRl
Y29kZU9mZnNldCkpOworICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAib3NyRW50
cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpKTsKIAogICAgIEFTU0VSVChj
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CiAKICAgICBjb25z
dCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJsb2NrLT5qaXRDb2RlTWFwKCk7Ci0gICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uID0gY29kZU1hcC5maW5k
KGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlTWFwLmZpbmQobG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CiAKICAgICB2b2lkKiBqdW1wVGFy
Z2V0ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7CkBAIC0xODg4LDExICsxODg4
LDggQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2xvZ19zaGFkb3dfY2hpY2tlbl90
YWlsKQogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKGNhbGxG
cmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpOwogICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAg
IAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KGNv
ZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQocGMpKTsKLSNlbHNlCi0gICAgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4KHBjKTsKLSNlbmRpZgorICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KGNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQocGMpKSk7CisKICAgICBT
aGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwogICAgIFJF
TEVBU0VfQVNTRVJUKHNoYWRvd0NoaWNrZW4pOwogICAgIHNoYWRvd0NoaWNrZW4tPmxvZyh2bSwg
Y2FsbEZyYW1lLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWwoY2FsbEZyYW1lLCB0aGlzVmFs
dWUsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpKTsKQEAgLTE5MDQsNyArMTkwMSw3
IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX2NhdGNoKQogewogICAg
IExMSU5UX0JFR0lOKCk7CiAKLSAgICBjb2RlQmxvY2stPmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0Nv
bXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXQoY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgpKTsKKyAg
ICBjb2RlQmxvY2stPmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRl
eChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShj
b2RlQmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyT3JpZ2luLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
ck9yaWdpbi5jcHAKaW5kZXggMTAyMjJhMjM5NmM3MWUyYmM5MjQzZjhlMmFkMjg1YmM1NzYwNDll
OS4uM2FhZWRlNzIwN2M4OTU3YjYwMzA5MzQxN2NiMmQ2MDllNjliMGUwNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW4uY3BwCkBAIC0zNCw3
ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgUHJvZmlsZXIgewogCi1Pcmln
aW46Ok9yaWdpbihEYXRhYmFzZSYgZGF0YWJhc2UsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4KQorT3JpZ2luOjpPcmlnaW4oRGF0YWJhc2UmIGRhdGFiYXNlLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogICAgIDog
bV9ieXRlY29kZXMoZGF0YWJhc2UuZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9jaykpCiAgICAg
LCBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKIHsKQEAgLTQyLDcgKzQyLDcgQEAgT3Jp
Z2luOjpPcmlnaW4oRGF0YWJhc2UmIGRhdGFiYXNlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkKIAogdm9pZCBPcmlnaW46OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoKm1fYnl0ZWNvZGVzLCAiOmJjIyIsIG1fYnl0ZWNv
ZGVJbmRleCk7CisgICAgb3V0LnByaW50KCptX2J5dGVjb2RlcywgIiAiLCBtX2J5dGVjb2RlSW5k
ZXgpOwogfQogCiBKU1ZhbHVlIE9yaWdpbjo6dG9KUyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KSBjb25zdApAQCAtNTAsNyArNTAsNyBAQCBKU1ZhbHVlIE9yaWdpbjo6dG9KUyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFs
T2JqZWN0KTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Ynl0
ZWNvZGVzSUQsIGpzTnVtYmVyKG1fYnl0ZWNvZGVzLT5pZCgpKSk7Ci0gICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVjb2RlSW5kZXgsIGpzTnVtYmVyKG1fYnl0
ZWNvZGVJbmRleCkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5ieXRlY29kZUluZGV4LCBqc051bWJlcihtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZXJPcmlnaW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlck9yaWdpbi5oCmluZGV4IDg2ODI2NjE3OWUxNTM5NDBhMTk3MmU1Y2VjZGQ3ZTY1
OTVlNTVmM2YuLjIzNzI2ZmE5OTVmYTdhMjZjYTQ5YjNmM2JiN2I4NmJhNGZkNjFlMWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpbi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpbi5oCkBAIC0y
NSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQnl0ZWNvZGVJbmRleC5o
IgogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CkBAIC00MCwyOSArNDEsMjQgQEAgY2xhc3MgRGF0
YWJhc2U7CiAKIGNsYXNzIE9yaWdpbiB7CiBwdWJsaWM6Ci0gICAgT3JpZ2luKCkKLSAgICAgICAg
OiBtX2J5dGVjb2RlSW5kZXgoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQot
ICAgIHsKLSAgICB9Ci0gICAgCisgICAgT3JpZ2luKCkgPSBkZWZhdWx0OwogICAgIE9yaWdpbihX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9ieXRlY29kZUluZGV4
KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAtIDEpCi0gICAgewotICAgIH0K
KyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZSkpCisgICAgeyB9CiAgICAgCi0gICAgT3JpZ2luKEJ5dGVjb2RlcyogYnl0ZWNv
ZGVzLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgIE9yaWdpbihCeXRlY29kZXMqIGJ5dGVj
b2RlcywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogICAgICAgICA6IG1fYnl0ZWNvZGVz
KGJ5dGVjb2RlcykKICAgICAgICAgLCBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXggPCBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkgLSAxKTsKKyAgICAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAtIDEpOwogICAg
IH0KICAgICAKLSAgICBPcmlnaW4oRGF0YWJhc2UmLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4KTsKKyAgICBPcmlnaW4oRGF0YWJhc2UmLCBDb2RlQmxvY2sqLCBCeXRlY29kZUlu
ZGV4KTsKICAgICAKLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNv
ZGVJbmRleCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7IH0KKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICEhbV9ieXRlY29kZUluZGV4OyB9CiAgICAg
CiAgICAgQnl0ZWNvZGVzKiBieXRlY29kZXMoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2Rlczsg
fQotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2Rl
SW5kZXg7IH0KKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVy
biBtX2J5dGVjb2RlSW5kZXg7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3Jp
Z2luJikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE9yaWdpbiYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CkBAIC03NSw3ICs3MSw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBCeXRlY29kZXMqIG1fYnl0ZWNvZGVzOwotICAgIHVuc2lnbmVk
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKIH07
CiAKIGlubGluZSBib29sIE9yaWdpbjo6b3BlcmF0b3I9PShjb25zdCBPcmlnaW4mIG90aGVyKSBj
b25zdApAQCAtODYsMTIgKzgyLDEyIEBAIGlubGluZSBib29sIE9yaWdpbjo6b3BlcmF0b3I9PShj
b25zdCBPcmlnaW4mIG90aGVyKSBjb25zdAogCiBpbmxpbmUgdW5zaWduZWQgT3JpZ2luOjpoYXNo
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpQdHJIYXNoPEJ5dGVjb2Rlcyo+OjpoYXNoKG1f
Ynl0ZWNvZGVzKSArIG1fYnl0ZWNvZGVJbmRleDsKKyAgICByZXR1cm4gV1RGOjpQdHJIYXNoPEJ5
dGVjb2Rlcyo+OjpoYXNoKG1fYnl0ZWNvZGVzKSArIG1fYnl0ZWNvZGVJbmRleC5oYXNoKCk7CiB9
CiAKIGlubGluZSBib29sIE9yaWdpbjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAog
ewotICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpOworICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXguaXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUoKTsKIH0KIAogc3RydWN0IE9yaWdpbkhhc2ggewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXJyb3IuY3BwCmluZGV4IGM4ZTFhZDU3YmYwZDdmN2FmOWQ3OTAwZWJlNjA4NzE4
NWQ0MTJjYzIuLjQxZmRhYTQxMTdmMDM3MWRhYWRjNTdkN2UzMjY2NmJhNWFkYmVkODcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAKQEAgLTE2NiwxNSArMTY2LDE1IEBA
IHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8U3RhY2tGcmFtZT4+IGdldFN0YWNrVHJhY2UoSlNHbG9i
YWxPYmplY3QqLCBWTSYgdm0sIEpTT2JqCiAgICAgcmV0dXJuIHN0YWNrVHJhY2U7CiB9CiAKLXZv
aWQgZ2V0Qnl0ZWNvZGVPZmZzZXQoVk0mIHZtLCBDYWxsRnJhbWUqIHN0YXJ0Q2FsbEZyYW1lLCBW
ZWN0b3I8U3RhY2tGcmFtZT4qIHN0YWNrVHJhY2UsIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgdW5z
aWduZWQmIGJ5dGVjb2RlT2Zmc2V0KQordm9pZCBnZXRCeXRlY29kZUluZGV4KFZNJiB2bSwgQ2Fs
bEZyYW1lKiBzdGFydENhbGxGcmFtZSwgVmVjdG9yPFN0YWNrRnJhbWU+KiBzdGFja1RyYWNlLCBD
YWxsRnJhbWUqJiBjYWxsRnJhbWUsIEJ5dGVjb2RlSW5kZXgmIGJ5dGVjb2RlSW5kZXgpCiB7CiAg
ICAgRmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3RvciBmdW5jdG9yKHN0YXJ0
Q2FsbEZyYW1lKTsKICAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KHZtLnRvcENhbGxGcmFtZSwgdm0s
IGZ1bmN0b3IpOwogICAgIGNhbGxGcmFtZSA9IGZ1bmN0b3IuZm91bmRDYWxsRnJhbWUoKTsKICAg
ICB1bnNpZ25lZCBzdGFja0luZGV4ID0gZnVuY3Rvci5pbmRleCgpOwotICAgIGJ5dGVjb2RlT2Zm
c2V0ID0gMDsKLSAgICBpZiAoc3RhY2tUcmFjZSAmJiBzdGFja0luZGV4IDwgc3RhY2tUcmFjZS0+
c2l6ZSgpICYmIHN0YWNrVHJhY2UtPmF0KHN0YWNrSW5kZXgpLmhhc0J5dGVjb2RlT2Zmc2V0KCkp
Ci0gICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gc3RhY2tUcmFjZS0+YXQoc3RhY2tJbmRleCkuYnl0
ZWNvZGVPZmZzZXQoKTsKKyAgICBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOworICAg
IGlmIChzdGFja1RyYWNlICYmIHN0YWNrSW5kZXggPCBzdGFja1RyYWNlLT5zaXplKCkgJiYgc3Rh
Y2tUcmFjZS0+YXQoc3RhY2tJbmRleCkuaGFzQnl0ZWNvZGVJbmRleCgpKQorICAgICAgICBieXRl
Y29kZUluZGV4ID0gc3RhY2tUcmFjZS0+YXQoc3RhY2tJbmRleCkuYnl0ZWNvZGVJbmRleCgpOwog
fQogCiBib29sIGdldExpbmVDb2x1bW5BbmRTb3VyY2UoVmVjdG9yPFN0YWNrRnJhbWU+KiBzdGFj
a1RyYWNlLCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbiwgU3RyaW5nJiBzb3VyY2VV
UkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuaAppbmRleCBjYjdiZjNhZjVkOTFm
NjNkNmFkZTM4ODY5MDgwYjA2YjE4MzdkMzNmLi4yNmJiODlmZmVlOWJiMWNlY2U1OWFjNTAwOTZi
YmE1MGQwYmU4ODg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgKQEAgLTY3
LDcgKzY3LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZUVycm9yKEpTR2xv
YmFsT2JqZWN0KiwgRXJyb3JUeXBlLCBjb25zdCBTdHJpbmcKIEpTT2JqZWN0KiBjcmVhdGVHZXR0
ZXJUeXBlRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKTsKIAogc3RkOjp1bmlx
dWVfcHRyPFZlY3RvcjxTdGFja0ZyYW1lPj4gZ2V0U3RhY2tUcmFjZShKU0dsb2JhbE9iamVjdCos
IFZNJiwgSlNPYmplY3QqLCBib29sIHVzZUN1cnJlbnRGcmFtZSk7Ci12b2lkIGdldEJ5dGVjb2Rl
T2Zmc2V0KFZNJiwgQ2FsbEZyYW1lKiwgVmVjdG9yPFN0YWNrRnJhbWU+KiwgQ2FsbEZyYW1lKiYs
IHVuc2lnbmVkJiBieXRlY29kZU9mZnNldCk7Cit2b2lkIGdldEJ5dGVjb2RlSW5kZXgoVk0mLCBD
YWxsRnJhbWUqLCBWZWN0b3I8U3RhY2tGcmFtZT4qLCBDYWxsRnJhbWUqJiwgQnl0ZWNvZGVJbmRl
eCYpOwogYm9vbCBnZXRMaW5lQ29sdW1uQW5kU291cmNlKFZlY3RvcjxTdGFja0ZyYW1lPiogc3Rh
Y2tUcmFjZSwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4sIFN0cmluZyYgc291cmNl
VVJMKTsKIGJvb2wgYWRkRXJyb3JJbmZvKFZNJiwgVmVjdG9yPFN0YWNrRnJhbWU+KiwgSlNPYmpl
Y3QqKTsKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkRXJyb3JJbmZvKEpTR2xvYmFsT2JqZWN0
KiwgSlNPYmplY3QqLCBib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JJbnN0YW5jZS5jcHAKaW5kZXggNmRmNjhkYmRmYzNiYzgwYTE4N2E0ZTVkZjkyNDkyOTE2
MTEyMWY0YS4uNjIxOTJiY2MzYjg1ZmNiODUyMTAzMDhhNzE1NWVjM2UyOGIwODdlMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKQEAgLTQ4
LDcgKzQ4LDcgQEAgRXJyb3JJbnN0YW5jZSogRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3QKICAgICByZXR1cm4gY3JlYXRlKGds
b2JhbE9iamVjdCwgdm0sIHN0cnVjdHVyZSwgbWVzc2FnZVN0cmluZywgYXBwZW5kZXIsIHR5cGUs
IHVzZUN1cnJlbnRGcmFtZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFwcGVuZFNvdXJjZVRvRXJyb3Io
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVycm9y
SW5zdGFuY2UqIGV4Y2VwdGlvbiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCitzdGF0aWMgdm9p
ZCBhcHBlbmRTb3VyY2VUb0Vycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBFcnJvckluc3RhbmNlKiBleGNlcHRpb24sIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCkKIHsKICAgICBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBl
bmRlciA9IGV4Y2VwdGlvbi0+c291cmNlQXBwZW5kZXIoKTsKICAgICBleGNlcHRpb24tPmNsZWFy
U291cmNlQXBwZW5kZXIoKTsKQEAgLTcxLDcgKzcxLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU291
cmNlVG9FcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmEKICAgICBlbHNlCiAgICAgICAgIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
CiAKLSAgICBjb2RlQmxvY2stPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVj
b2RlT2Zmc2V0LCBkaXZvdFBvaW50LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1
bW4pOworICAgIGNvZGVCbG9jay0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVJbmRleChieXRl
Y29kZUluZGV4LCBkaXZvdFBvaW50LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1
bW4pOwogICAgIAogICAgIGludCBleHByZXNzaW9uU3RhcnQgPSBkaXZvdFBvaW50IC0gc3RhcnRP
ZmZzZXQ7CiAgICAgaW50IGV4cHJlc3Npb25TdG9wID0gZGl2b3RQb2ludCArIGVuZE9mZnNldDsK
QEAgLTEyNCwxMiArMTI0LDEyIEBAIHZvaWQgRXJyb3JJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24o
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBjb25zdCBTCiAgICAgdm0uaGVh
cC53cml0ZUJhcnJpZXIodGhpcyk7CiAKICAgICBpZiAobV9zdGFja1RyYWNlICYmICFtX3N0YWNr
VHJhY2UtPmlzRW1wdHkoKSAmJiBoYXNTb3VyY2VBcHBlbmRlcigpKSB7Ci0gICAgICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0OworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7
CiAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOwotICAgICAgICBnZXRCeXRlY29kZU9mZnNl
dCh2bSwgdm0udG9wQ2FsbEZyYW1lLCBtX3N0YWNrVHJhY2UuZ2V0KCksIGNhbGxGcmFtZSwgYnl0
ZWNvZGVPZmZzZXQpOworICAgICAgICBnZXRCeXRlY29kZUluZGV4KHZtLCB2bS50b3BDYWxsRnJh
bWUsIG1fc3RhY2tUcmFjZS5nZXQoKSwgY2FsbEZyYW1lLCBieXRlY29kZUluZGV4KTsKICAgICAg
ICAgaWYgKGNhbGxGcmFtZSAmJiBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKSB7CiAgICAgICAgICAg
ICBBU1NFUlQoIWNhbGxGcmFtZS0+Y2FsbGVlKCkuaXNXYXNtKCkpOwotICAgICAgICAgICAgYXBw
ZW5kU291cmNlVG9FcnJvcihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgdGhpcywgYnl0ZWNvZGVP
ZmZzZXQpOworICAgICAgICAgICAgYXBwZW5kU291cmNlVG9FcnJvcihnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgdGhpcywgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCmlu
ZGV4IGNlYWMwY2IzMDk0NTc3NzM1Y2Q0ZjlmYjdmNWYwNTlmMTk4YmZmODEuLjliY2Y5NjE4NmQz
Zjg1MDgzMWQ2YjI2NWJjNTIwYTY3ODBjZjZjYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCkBAIC00NDYsMjkgKzQ0NiwyMyBA
QCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1wbGUoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBTZWNvbmRzJiBzdGFja1RyYWNlUHJvYwogICAgIH0KIH0KIAotc3RhdGljIEFMV0FZU19JTkxJ
TkUgdW5zaWduZWQgdHJ5R2V0Qnl0ZWNvZGVJbmRleCh1bnNpZ25lZCBsbGludFBDLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgYm9vbCYgaXNWYWxpZCkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEJ5dGVj
b2RlSW5kZXggdHJ5R2V0Qnl0ZWNvZGVJbmRleCh1bnNpZ25lZCBsbGludFBDLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaykKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBSRUxFQVNFX0FTU0VSVCgh
Y29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKTsKICNlbmRpZgogCiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbGxpbnRQQzsKLSAgICBpZiAoYnl0ZWNv
ZGVJbmRleCA8IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSB7Ci0gICAgICAgIGlzVmFs
aWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKLSAgICB9Ci0gICAgaXNW
YWxpZCA9IGZhbHNlOwotICAgIHJldHVybiAwOworICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gbGxpbnRQQzsKKyAgICBpZiAoYnl0ZWNvZGVPZmZzZXQgPCBjb2RlQmxvY2stPmluc3RydWN0
aW9uc1NpemUoKSkKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQp
OworICAgIHJldHVybiBCeXRlY29kZUluZGV4KCk7CiAjZWxzZQogICAgIEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiA9IGJpdHdpc2VfY2FzdDxJbnN0cnVjdGlvbio+KGxsaW50UEMpOwogCi0gICAg
aWYgKGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuY29udGFpbnMoaW5zdHJ1Y3Rpb24pKSB7Ci0g
ICAgICAgIGlzVmFsaWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5ieXRlY29k
ZU9mZnNldChpbnN0cnVjdGlvbik7Ci0gICAgfQotICAgIGlzVmFsaWQgPSBmYWxzZTsKLSAgICBy
ZXR1cm4gMDsKKyAgICBpZiAoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5jb250YWlucyhpbnN0
cnVjdGlvbikpCisgICAgICAgIHJldHVybiBCeXRlY29kZUluZGV4KGNvZGVCbG9jay0+Ynl0ZWNv
ZGVPZmZzZXQoaW5zdHJ1Y3Rpb24pKTsKKyAgICByZXR1cm4gQnl0ZWNvZGVJbmRleCgpOwogI2Vu
ZGlmCiB9CiAKQEAgLTQ4NCwxMiArNDc4LDEyIEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJv
Y2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpCiAgICAgICAgIFN0YWNrVHJhY2UmIHN0YWNrVHJh
Y2UgPSBtX3N0YWNrVHJhY2VzLmxhc3QoKTsKICAgICAgICAgc3RhY2tUcmFjZS50aW1lc3RhbXAg
PSB1bnByb2Nlc3NlZFN0YWNrVHJhY2UudGltZXN0YW1wOwogCi0gICAgICAgIGF1dG8gcG9wdWxh
dGVDb2RlTG9jYXRpb24gPSBbXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgsIFN0YWNrRnJhbWU6OkNvZGVMb2NhdGlvbiYgbG9jYXRpb24pIHsKLSAgICAgICAg
ICAgIGlmIChieXRlY29kZUluZGV4IDwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpIHsK
KyAgICAgICAgYXV0byBwb3B1bGF0ZUNvZGVMb2NhdGlvbiA9IFtdIChDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBTdGFja0ZyYW1lOjpDb2RlTG9jYXRp
b24mIGxvY2F0aW9uKSB7CisgICAgICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgaW50IGRp
dm90OwogICAgICAgICAgICAgICAgIGludCBzdGFydE9mZnNldDsKICAgICAgICAgICAgICAgICBp
bnQgZW5kT2Zmc2V0OwotICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+ZXhwcmVzc2lvblJhbmdl
Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQsCisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRl
Y29kZUluZGV4KGJ5dGVjb2RlSW5kZXgsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LAog
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5saW5lTnVtYmVyLCBsb2NhdGlvbi5jb2x1bW5O
dW1iZXIpOwogICAgICAgICAgICAgICAgIGxvY2F0aW9uLmJ5dGVjb2RlSW5kZXggPSBieXRlY29k
ZUluZGV4OwogICAgICAgICAgICAgfQpAQCAtNDk5LDcgKzQ5Myw3IEBAIHZvaWQgU2FtcGxpbmdQ
cm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH07CiAKLSAgICAgICAgYXV0byBhcHBlbmRDb2RlQmxvY2sgPSBbJl0gKENvZGVCbG9j
ayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KSB7CisgICAgICAgIGF1dG8gYXBw
ZW5kQ29kZUJsb2NrID0gWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KSB7CiAgICAgICAgICAgICBzdGFja1RyYWNlLmZyYW1lcy5hcHBlbmQoU3Rh
Y2tGcmFtZShjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSk7CiAgICAgICAgICAgICBtX2xp
dmVDZWxsUG9pbnRlcnMuYWRkKGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOwogICAgICAg
ICAgICAgcG9wdWxhdGVDb2RlTG9jYXRpb24oY29kZUJsb2NrLCBieXRlY29kZUluZGV4LCBzdGFj
a1RyYWNlLmZyYW1lcy5sYXN0KCkuc2VtYW50aWNMb2NhdGlvbik7CkBAIC02MTQsMTggKzYwOCwx
NyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMo
KQogICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHVud2luZCBwYXN0
IGFuIEVudHJ5RnJhbWUsIHdlIHdpbGwgZW5kIHVwIGV4ZWN1dGluZwogICAgICAgICAgICAgICAg
IC8vIGluc2lkZSB0aGUgTExJbnQncyBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbi4gU28gd2UganVz
dCBwcm90ZWN0IGFnYWluc3QgdGhpcwogICAgICAgICAgICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0
LgotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSAwOworICAgICAgICAg
ICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAg
ICAgICAgICAgICAgICAgaWYgKHRvcENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6Oklu
dGVycHJldGVyVGh1bmsgfHwgdG9wQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1ZhbGlkUEM7CiAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGJpdHM7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAg
ICAgICAgICAgICAgYml0cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90Pih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxpbnRQQykpOwogI2Vsc2UKICAgICAgICAg
ICAgICAgICAgICAgYml0cyA9IGJpdHdpc2VfY2FzdDx1bnNpZ25lZD4odW5wcm9jZXNzZWRTdGFj
a1RyYWNlLmxsaW50UEMpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5k
ZXggPSB0cnlHZXRCeXRlY29kZUluZGV4KGJpdHMsIHRvcENvZGVCbG9jaywgaXNWYWxpZFBDKTsK
KyAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IHRyeUdldEJ5dGVjb2RlSW5kZXgo
Yml0cywgdG9wQ29kZUJsb2NrKTsKIAotICAgICAgICAgICAgICAgICAgICBVTlVTRURfUEFSQU0o
aXNWYWxpZFBDKTsgLy8gRklYTUU6IGRvIHNvbWV0aGluZyB3aXRoIHRoaXMgaW5mbyBmb3IgdGhl
IHdlYiBpbnNwZWN0b3I6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTM0NTUKKyAgICAgICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOyAv
LyBGSVhNRTogZG8gc29tZXRoaW5nIHdpdGggdGhpcyBpbmZvIGZvciB0aGUgd2ViIGluc3BlY3Rv
cjogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzQ1NQogCiAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayh0b3BDb2RlQmxvY2ssIGJ5dGVjb2RlSW5k
ZXgpOwogICAgICAgICAgICAgICAgICAgICBzdG9yZUNhbGxlZUludG9MYXN0RnJhbWUodW5wcm9j
ZXNzZWRTdGFja1RyYWNlLmZyYW1lc1swXSk7CkBAIC02NDksOCArNjQyLDcgQEAgdm9pZCBTYW1w
bGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCkKICAgICAgICAgICAg
ICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSB1bnByb2Nlc3NlZFN0YWNrRnJhbWUu
Y2FsbFNpdGVJbmRleDsKIAogICAgICAgICAgICAgICAgIGF1dG8gYXBwZW5kQ29kZUJsb2NrTm9J
bmxpbmluZyA9IFsmXSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgaXNWYWxpZFBDOwotICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2soY29kZUJsb2NrLCB0cnlHZXRCeXRlY29k
ZUluZGV4KGNhbGxTaXRlSW5kZXguYml0cygpLCBjb2RlQmxvY2ssIGlzVmFsaWRQQykpOworICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2soY29kZUJsb2NrLCB0cnlHZXRCeXRlY29k
ZUluZGV4KGNhbGxTaXRlSW5kZXguYml0cygpLCBjb2RlQmxvY2spKTsKICAgICAgICAgICAgICAg
ICB9OwogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC02NTgsNyArNjUwLDcgQEAgdm9pZCBTYW1w
bGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCkKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvZGVCbG9jay0+Y2FuR2V0Q29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVPcmlnaW4oY29kZUJsb2NrLCBjb2Rl
QmxvY2stPmNvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpOwogICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2soY29kZUJsb2NrLCBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kQ29kZUJsb2NrKGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCgpKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrTm9J
bmxpbmluZygpOwogI2Vsc2UKQEAgLTExMTUsNyArMTEwNyw3IEBAIHZvaWQgU2FtcGxpbmdQcm9m
aWxlcjo6cmVwb3J0VG9wQnl0ZWNvZGVzKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgICAgICBT
dHJpbmcgY29kZUJsb2NrSGFzaDsKICAgICAgICAgICAgIFN0cmluZyBqaXRUeXBlOwogICAgICAg
ICAgICAgaWYgKGxvY2F0aW9uLmhhc0J5dGVjb2RlSW5kZXgoKSkKLSAgICAgICAgICAgICAgICBi
eXRlY29kZUluZGV4ID0gU3RyaW5nOjpudW1iZXIobG9jYXRpb24uYnl0ZWNvZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IHRvU3RyaW5nKGxvY2F0aW9uLmJ5dGVjb2Rl
SW5kZXgpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXgg
PSAiPG5pbD4iOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGlu
Z1Byb2ZpbGVyLmgKaW5kZXggNjkyODAwMjgyYzc3NTVhYjk2NzAzODJiMjlhOWIwYTNjZDY3ZWZk
Yy4uMmExNDQ5NDIyODgyNzFkMzJjNjI1YjhhZDNhZGZhNjdjN2I4NDk2MyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaApAQCAtMTA1LDcg
KzEwNSw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgYm9vbCBoYXNCeXRlY29kZUluZGV4KCkg
Y29uc3QKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnl0ZWNvZGVJbmRl
eCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICEhYnl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Ym9vbCBoYXNFeHByZXNzaW9uSW5mbygpIGNvbnN0CkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgLy8gVGhlc2UgYXR0ZW1wdCB0byBiZSBleHByZXNzaW9uLWxldmVsIGxp
bmUgYW5kIGNvbHVtbiBudW1iZXIuCiAgICAgICAgICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyIHsg
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CiAgICAgICAgICAgICB1bnNp
Z25lZCBjb2x1bW5OdW1iZXIgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkg
fTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggeyBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleDsKICAgICAgICAgICAgIENvZGVCbG9ja0hhc2ggY29kZUJsb2NrSGFzaDsKICAgICAg
ICAgICAgIEpJVFR5cGUgaml0VHlwZSB7IEpJVFR5cGU6Ok5vbmUgfTsKICAgICAgICAgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAKaW5kZXggMjRlYTBl
YzU5MzNlYjhkNzhlODRmZDgyYTFlNjM4ZTFiZmE5ZjJjMy4uMzEyNDg4OTRiODBkYzlkMDVjODJk
NDQ3YWUwMDQwYTUzNzA0YmU1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RhY2tGcmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RhY2tGcmFtZS5jcHAKQEAgLTM4LDEwICszOCwxMCBAQCBTdGFja0ZyYW1lOjpTdGFja0ZyYW1l
KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNDZWxsKiBjYWxsZWUpCiB7CiB9CiAKLVN0YWNrRnJh
bWU6OlN0YWNrRnJhbWUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIGNhbGxlZSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorU3RhY2tGcmFtZTo6
U3RhY2tGcmFtZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTQ2VsbCogY2FsbGVlLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogICAgIDogbV9jYWxs
ZWUodm0sIG93bmVyLCBjYWxsZWUpCiAgICAgLCBtX2NvZGVCbG9jayh2bSwgb3duZXIsIGNvZGVC
bG9jaykKLSAgICAsIG1fYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCisgICAgLCBtX2J5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKIHsKIH0KIApAQCAtMTExLDcgKzExMSw3IEBAIHZv
aWQgU3RhY2tGcmFtZTo6Y29tcHV0ZUxpbmVBbmRDb2x1bW4odW5zaWduZWQmIGxpbmUsIHVuc2ln
bmVkJiBjb2x1bW4pIGNvbnN0CiAgICAgaW50IGRpdm90ID0gMDsKICAgICBpbnQgdW51c2VkU3Rh
cnRPZmZzZXQgPSAwOwogICAgIGludCB1bnVzZWRFbmRPZmZzZXQgPSAwOwotICAgIG1fY29kZUJs
b2NrLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChtX2J5dGVjb2RlT2Zmc2V0LCBk
aXZvdCwgdW51c2VkU3RhcnRPZmZzZXQsIHVudXNlZEVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsK
KyAgICBtX2NvZGVCbG9jay0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgsIGRpdm90LCB1bnVzZWRTdGFydE9mZnNldCwgdW51c2VkRW5kT2Zmc2V0LCBsaW5l
LCBjb2x1bW4pOwogCiAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG1fY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKTsKICAgICBpZiAoT3B0aW9uYWw8aW50PiBvdmVycmlkZUxp
bmVOdW1iZXIgPSBleGVjdXRhYmxlLT5vdmVycmlkZUxpbmVOdW1iZXIobV9jb2RlQmxvY2stPnZt
KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFt
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCmluZGV4IDY3
MWEzMzdiNDI1NDEzNThhOWVjOWQyNmZiMjQwYmUzMGE0NmU3MzEuLmM5ZGZhMGIxOGMwOGQ5OTQ4
ZmNhNTAzYzc5Zjc5YTc4OGZjMzhhZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0YWNrRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdGFja0ZyYW1lLmgKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFz
cyBTdGFja0ZyYW1lIHsKIHB1YmxpYzoKICAgICBTdGFja0ZyYW1lKFZNJiwgSlNDZWxsKiBvd25l
ciwgSlNDZWxsKiBjYWxsZWUpOwotICAgIFN0YWNrRnJhbWUoVk0mLCBKU0NlbGwqIG93bmVyLCBK
U0NlbGwqIGNhbGxlZSwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAg
IFN0YWNrRnJhbWUoVk0mLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIGNhbGxlZSwgQ29kZUJsb2Nr
KiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgU3RhY2tGcmFtZShXYXNtOjpJbmRleE9yTmFtZSk7CiAK
ICAgICBib29sIGhhc0xpbmVBbmRDb2x1bW5JbmZvKCkgY29uc3QgeyByZXR1cm4gISFtX2NvZGVC
bG9jazsgfQpAQCAtNTEsMTEgKzUxLDExIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgc291cmNlVVJM
KCkgY29uc3Q7CiAgICAgU3RyaW5nIHRvU3RyaW5nKFZNJikgY29uc3Q7CiAKLSAgICBib29sIGhh
c0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZU9mZnNldCAhPSBVSU5U
X01BWCAmJiAhbV9pc1dhc21GcmFtZTsgfQotICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KCkK
KyAgICBib29sIGhhc0J5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5k
ZXggJiYgIW1faXNXYXNtRnJhbWU7IH0KKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgo
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc0J5dGVjb2RlT2Zmc2V0KCkpOwotICAgICAgICBy
ZXR1cm4gbV9ieXRlY29kZU9mZnNldDsKKyAgICAgICAgQVNTRVJUKGhhc0J5dGVjb2RlSW5kZXgo
KSk7CisgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CiAgICAgfQogICAgIAogICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwpAQCAtNjUsNyArNjUsNyBAQCBwcml2YXRl
OgogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fY2FsbGVlIHsgfTsKICAgICBXcml0ZUJhcnJp
ZXI8Q29kZUJsb2NrPiBtX2NvZGVCbG9jayB7IH07CiAgICAgV2FzbTo6SW5kZXhPck5hbWUgbV93
YXNtRnVuY3Rpb25JbmRleE9yTmFtZTsKLSAgICB1bnNpZ25lZCBtX2J5dGVjb2RlT2Zmc2V0IHsg
VUlOVF9NQVggfTsKKyAgICBCeXRlY29kZUluZGV4IG1fYnl0ZWNvZGVJbmRleDsKICAgICBib29s
IG1faXNXYXNtRnJhbWUgeyBmYWxzZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9WTUluc3BlY3Rvci5jcHAKaW5kZXggMjQ0ZDIyZWIxNmQ2NzIyNzA5NjFhMzIwMmU5NDBl
YTA1NzNmOTgyZi4uMWViYjcyNzQ2OWU5ZjE4M2ZmYTNjYWFhMTdlMWI5OTUwMDAzODhjNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCkBAIC00MDgsNyAr
NDA4LDcgQEAgdm9pZCBWTUluc3BlY3Rvcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKICAgICAgICAgICAgIHVuc2lnbmVkIGxpbmUgPSAwOwogICAgICAgICAgICAgdW5zaWdu
ZWQgdW51c2VkQ29sdW1uID0gMDsKICAgICAgICAgICAgIHZpc2l0b3ItPmNvbXB1dGVMaW5lQW5k
Q29sdW1uKGxpbmUsIHVudXNlZENvbHVtbik7Ci0gICAgICAgICAgICBkYXRhTG9nRigiW1JldHVy
blZQQ10gICAgICAgICAgICAgICAgfCAlMTBwIHwgJWQgKGxpbmUgJWQpXG4iLCBpdCwgdmlzaXRv
ci0+Ynl0ZWNvZGVPZmZzZXQoKSwgbGluZSk7CisgICAgICAgICAgICBkYXRhTG9nRigiW1JldHVy
blZQQ10gICAgICAgICAgICAgICAgfCAlMTBwIHwgJWQgKGxpbmUgJWQpXG4iLCBpdCwgdmlzaXRv
ci0+Ynl0ZWNvZGVJbmRleCgpLm9mZnNldCgpLCBsaW5lKTsKICAgICAgICAgICAgIHJldHVybiBT
dGFja1Zpc2l0b3I6OkRvbmU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRv
cjo6Q29udGludWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381622</attachid>
            <date>2019-10-22 15:55:59 -0700</date>
            <delta_ts>2019-10-22 15:56:44 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-203276-20191022155556.patch</filename>
            <type>text/plain</type>
            <size>334114</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxNDYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
MjdhNTg5MTMzNTFmZjlhYjQwZWNmNzM1ZGI1ZGRiMjkwODA1YzVkLi5hMjU2MDIyODc0NzQzN2Iy
NTM3NGE3MWNmZjNjN2Y2YjY3OGQ4YjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NjEgQEAKKzIwMTktMTAtMjIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBzaG91bGQgYmUgYSBwcm9wZXIgQysrIGNs
YXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMy
NzYKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4KKworICAgICAgICBUaGlzIHBhdGNo
IG1ha2VzIGEgY2hhbmdlIHRvIGhvdyB3ZSByZWZlciB0byB0aGUgYnl0ZWNvZGUgaW5kZXggaW4K
KyAgICAgICAgYSBieXRlY29kZSBzdHJlYW0uIFByZXZpb3VzbHkgd2UganVzdCB1c2VkIGFuIHVu
c2lnbmVkIG51bWJlciB0bworICAgICAgICByZXByZXNlbnQgdGhlIGluZGV4LCB0aGlzIHBhdGNo
IGNoYW5nZXMgbW9zdCBvZiB0aGUgY29kZSB0byB1c2UgYQorICAgICAgICBCeXRlY29kZUluZGV4
IGNsYXNzIGluc3RlYWQuIFRoZSBvbmx5IHBsYWNlcyB3aGVyZSB0aGlzIHBhdGNoIGRvZXMKKyAg
ICAgICAgbm90IGNoYW5nZSB0aGlzIGlzIGZvciBqdW1wIGFuZCBzd2l0Y2ggdGFyZ2V0cyAvIGRl
bHRhcy4KKworICAgICAgICBBZGRpdGlvbmFsbHksIHRoaXMgcGF0Y2ggYXR0ZW1wdHMgdG8gY2Fu
b25pY2FsaXplIHRoZSB0ZXJtaW5vbG9neQorICAgICAgICBhcm91bmQgaG93IHdlIHJlZmVyIHRv
IGJ5dGVjb2RlIGluZGljZXMuIE5vdyB3ZSB1c2UgdGhlIHdvcmQgaW5kZXgKKyAgICAgICAgdG8g
cmVmZXIgdG8gdGhlIGJ5dGVjb2RlIGluZGV4IGNsYXNzIGFuZCBvZmZzZXQgdG8gcmVmZXIgdG8g
dGhlCisgICAgICAgIHVuc2lnbmVkIGJ5dGUgb2Zmc2V0IGludG8gdGhlIGluc3RydWN0aW9uIHN0
cmVhbS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJbmZv
Lmg6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAgKEpTQzo6
Z2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVC
YXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpjb21wdXRl
SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3Bw
OgorICAgICAgICAoSlNDOjpHZW5lcmF0b3JMaXZlbmVzc0FuYWx5c2lzOjpydW4pOgorICAgICAg
ICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVJbmRleDo6ZHVtcCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbmRl
eC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlSW5kZXg6OmFzQml0cyBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
SW5kZXg6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpkZWxldGVk
VmFsdWUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojppc0hhc2hUYWJsZURlbGV0ZWRW
YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yIGJvb2wg
Y29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpvcGVyYXRvciA9PSBjb25zdCk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yICE9IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6b3BlcmF0b3IgPCBjb25zdCk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlSW5kZXg6Om9wZXJhdG9yID4gY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUluZGV4OjpvcGVyYXRvciA8PSBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6
Om9wZXJhdG9yID49IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6ZnJvbUJp
dHMpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4SGFzaDo6aGFzaCk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlSW5kZXhIYXNoOjplcXVhbCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVLaWxscyk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZz
ZXQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlcklu
c3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpj
b21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQmxvY2spOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNzSW5m
b0F0Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdh
dGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZv
QXRCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVV
c2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6
Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmNv
bXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2Rl
L0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1
dGVGcm9tTExJbnQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcik6
CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKToKKyAg
ICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9y
Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkUmFyZUNhc2VQcm9m
aWxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29k
ZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudEZv
ckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRl
Y29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNz
SXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVu
c3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleFNsb3cpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpjb2x1bW5OdW1iZXJGb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNPcERlYnVnRm9yTGluZUFuZENvbHVtbik6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjp0cnlHZXRWYWx1ZVByb2ZpbGVGb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmNvdWxkVGFrZVNwZWNpYWxBcml0aEZhc3RDYXNlKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpieXRlY29kZUluZGV4RnJvbUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zm
c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNv
ZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3VyZUNhdGNo
TGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVP
ZmZzZXRTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5lTnVtYmVy
Rm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
bHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZVBy
ZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3VsZFRha2VTcGVjaWFsRmFzdENhc2UpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlT2Zmc2V0RnJvbUNhbGxTaXRl
SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpjb3VsZFRha2VTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
Ynl0ZWNvZGVJbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW46OmFwcHJveGltYXRlSGFzaCBjb25zdCk6CisgICAgICAgIChK
U0M6OkNvZGVPcmlnaW46OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmln
aW4uaDoKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChK
U0M6OkNvZGVPcmlnaW46OmlzU2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
OjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6T3V0T2ZM
aW5lQ29kZU9yaWdpbjo6T3V0T2ZMaW5lQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkNvZGVP
cmlnaW46OmJ1aWxkQ29tcG9zaXRlVmFsdWUpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjpo
YXNoIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6ZHVtcCBjb25zdCk6CisgICAgICAgIChK
U0M6OkRGRzo6RXhpdFByb2ZpbGU6OmV4aXRTaXRlc0Zvcik6CisgICAgICAgICogYnl0ZWNvZGUv
REZHRXhpdFByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlOjpG
cmVxdWVudEV4aXRTaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlOjpv
cGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlOjpz
dWJzdW1lcyBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6aGFz
aCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6Ynl0ZWNvZGVJ
bmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6aXNIYXNo
VGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlF1ZXJ5YWJsZUV4
aXRQcm9maWxlOjpoYXNFeGl0U2l0ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVl
bnRFeGl0U2l0ZTo6Ynl0ZWNvZGVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5
dGVjb2RlL0RlZmVycmVkU291cmNlRHVtcC5jcHA6CisgICAgICAgIChKU0M6OkRlZmVycmVkU291
cmNlRHVtcDo6RGVmZXJyZWRTb3VyY2VEdW1wKToKKyAgICAgICAgKEpTQzo6RGVmZXJyZWRTb3Vy
Y2VEdW1wOjpkdW1wKToKKyAgICAgICAgKiBieXRlY29kZS9EZWZlcnJlZFNvdXJjZUR1bXAuaDoK
KyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6OmdldExpdmVuZXNz
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnVsbEJ5dGVjb2RlTGl2ZW5lc3M6Om9wZXJhbmRJc0xp
dmUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgorICAgICAg
ICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0lDU3RhdHVzVXRpbHMuY3BwOgorICAgICAgICAoSlNDOjpo
YXNCYWRDYWNoZUV4aXRTaXRlKToKKyAgICAgICAgKiBieXRlY29kZS9JQ1N0YXR1c1V0aWxzLmg6
CisgICAgICAgICogYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6SW5C
eUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5SWRTdGF0dXMu
aDoKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlND
OjpJbmxpbmVDYWxsRnJhbWU6OmR1bXBJbkNvbnRleHQgY29uc3QpOgorICAgICAgICAqIGJ5dGVj
b2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVz
Ojpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmg6Cisg
ICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaDoKKyAgICAgICAgKEpTQzo6SW5z
dHJ1Y3Rpb25TdHJlYW06OkJhc2VSZWY6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6Oklu
c3RydWN0aW9uU3RyZWFtOjpCYXNlUmVmOjppbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Oklu
c3RydWN0aW9uU3RyZWFtOjphdCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVL
ZXk6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVLZXk6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6OkxhenlP
cGVyYW5kVmFsdWVQcm9maWxlS2V5OjpieXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OmJ5dGVjb2Rl
T2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKToKKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAg
ICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6U3RydWN0dXJlU3R1YkluZm8p
OgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlSW5k
ZXggY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFuZGxlckZvckJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bGluZU51bWJl
ckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNl
dCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAg
ICAgICAgKiBieXRlY29kZS9WYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6UmFyZUNhc2VQ
cm9maWxlOjpSYXJlQ2FzZVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpnZXRSYXJlQ2FzZVByb2Zp
bGVCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Z2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNv
ZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHA6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZmluYWxpemUpOgorICAgICAg
ICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXJDYWxsRnJhbWU6OmN1cnJlbnRQb3NpdGlvbik6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAg
ICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6Z2V0Qnl0ZWNv
ZGVCZWdpbkZvckJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpibG9ja0ZvckJ5dGVjb2RlSW5k
ZXgpOgorICAgICAgICAoSlNDOjpERkc6OmJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVk
LgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCk6CisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2hG
b3JUZXJtaW5hbEltcGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpmbHVz
aElmVGVybWluYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpicmFuY2hE
YXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0UHJlZGljdGlvbldp
dGhvdXRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0UHJl
ZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFycmF5TW9k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om1ha2VTYWZlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bWFrZURpdlNhZmUpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2spOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjptYWtlQmxvY2tUYXJnZXRhYmxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGxWYXJpYW50KToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6bGlua0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2VDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6OmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6Omxhc3RDYWxsU2l0ZSBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpjYXRjaE9TUkVudHJ5RGF0YUZvckJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OmFwcGVuZENhdGNo
RW50cnlwb2ludCk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Y29tcGlsZUltcGwpOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdEcml2ZXIuaDoKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OndpbGxDYXRjaEV4Y2VwdGlvbkluTWFjaGluZUZyYW1lKToKKyAgICAgICAgKiBkZmcvREZHR3Jh
cGguaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29kZTo6Y2xlYXJPU1JFbnRyeUJsb2NrQW5kUmVzZXRUaHJlc2hvbGRzKToKKyAgICAgICAg
KiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmFwcGVuZE9T
UkVudHJ5RGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6b3NyRW50cnlEYXRhRm9y
Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SklUQ29tcGlsZXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxl
cjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6c2V0U3RhcnRPZkNvZGUpOgorICAgICAgICAq
IGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpoYW5kbGVCbG9j
a0ZvclRyeUNhdGNoKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAo
SlNDOjpERkc6Ok9TUkVudHJ5RGF0YTo6ZHVtcEluQ29udGV4dCBjb25zdCk6CisgICAgICAgIChK
U0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlQ2F0
Y2hPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6CisgICAgICAgIChKU0M6
OkRGRzo6Z2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6
cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNl
OjpydW4pOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6cmVpZnlJbmxp
bmVkQ2FsbEZyYW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFyZ2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmludE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpkZWJ1
Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKToKKyAgICAgICAgKiBkZmcvREZHT1NS
RXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZHOjpyZWlm
eUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9U
YXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDoKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMu
aDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6
UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNlc3Nhcnkp
OgorICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6b3Ny
RW50cnlCeXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjp0aWVy
VXBJbkxvb3BIaWVyYXJjaHkpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OnRpZXJVcEFuZE9T
UkVudGVyQnl0ZWNvZGVzKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVWYWx1ZVN1Yik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZU5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZU11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRTd2l0Y2hDaGFyU3RyaW5nSnVtcCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToK
KyAgICAgICAgKiBkZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpUaWVyVXBDaGVja0luamVjdGlvblBoYXNlOjpidWlsZE5hdHVyYWxMb29wVG9Mb29w
SGludE1hcCk6CisgICAgICAgICogZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRm9yT1NSRW50cnlE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUpOgorICAg
ICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExGb3JPU1JF
bnRyeUpJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENvZGU6OnNl
dEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6
Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVZhbHVlQWRkKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVZhbHVlU3ViKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVZhbHVlTXVsKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUFyaXRoQWRkT3JTdWIpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVmFsdWVOZWdhdGUpOgor
ICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6cHJlcGFy
ZU9TUkVudHJ5KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuaDoKKyAgICAgICAgKiBpbnRl
cnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmNhbGxTaXRl
SW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5k
ZXggY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWU6OmNvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OmR1bXApOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWU6OmJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6
Q2FsbFNpdGVJbmRleCk6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6Om9wZXJhdG9yIGJv
b2wgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpvcGVyYXRvcj09IGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Yml0cyBjb25zdCk6CisgICAgICAgIChK
U0M6OkNhbGxTaXRlSW5kZXg6OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpE
aXNwb3NhYmxlQ2FsbFNpdGVJbmRleDo6RGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgpOgorICAgICAg
ICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6Cisg
ICAgICAgIChKU0M6OkdldFN0YWNrVHJhY2VGdW5jdG9yOjpvcGVyYXRvcigpIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6ZmluZEV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAqIGludGVycHJldGVy
L1NoYWRvd0NoaWNrZW4uY3BwOgorICAgICAgICAoSlNDOjpTaGFkb3dDaGlja2VuOjp1cGRhdGUp
OgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6
OlN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZSk6CisgICAgICAgIChKU0M6OlN0YWNr
VmlzaXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6
RnJhbWU6OnJldHJpZXZlRXhwcmVzc2lvbkluZm8gY29uc3QpOgorICAgICAgICAoSlNDOjpTdGFj
a1Zpc2l0b3I6OkZyYW1lOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Ynl0ZWNvZGVJ
bmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmJ5dGVjb2Rl
T2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjpKSVQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlv
bkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rKToK
KyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAg
ICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQp
OgorICAgICAgICAoSlNDOjpTbG93Q2FzZUVudHJ5OjpTbG93Q2FzZUVudHJ5KToKKyAgICAgICAg
KEpTQzo6U3dpdGNoUmVjb3JkOjpTd2l0Y2hSZWNvcmQpOgorICAgICAgICAoSlNDOjpCeVZhbENv
bXBpbGF0aW9uSW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAqIGppdC9KSVRD
YWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVENvZGVN
YXAuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZU1hcDo6RW50cnk6OkVudHJ5KToKKyAgICAgICAg
KEpTQzo6SklUQ29kZU1hcDo6RW50cnk6OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAo
SlNDOjpKSVRDb2RlTWFwOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlTWFwOjpmaW5k
IGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklURGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklURGlzYXNzZW1ibGVyOjpkdW1wVmVjdG9yRm9ySW5zdHJ1Y3Rpb25zKToKKyAgICAgICAg
KEpTQzo6SklURGlzYXNzZW1ibGVyOjpyZXBvcnRJbnN0cnVjdGlvbnMpOgorICAgICAgICAqIGpp
dC9KSVREaXNhc3NlbWJsZXIuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXROYWtlZENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROYWtl
ZFRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjp1cGRhdGVUb3BDYWxsRnJhbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZUluZGV4KToKKyAgICAg
ICAgKEpTQzo6SklUOjphZGRTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJVDo6YWRkSnVtcCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93VG9Ib3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtBbGxT
bG93Q2FzZXNGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9w
Y29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9sb2df
c2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9p
bW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpnZXRCeVZhbCk6CisgICAgICAgIChKU0M6OnRyeUdldEJ5VmFs
T3B0aW1pemUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
R2V0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfaWQpOgorICAgICAgICAqIGppdC9KSVRXb3JrbGlzdC5j
cHA6CisgICAgICAgIChKU0M6OkpJVFdvcmtsaXN0OjpQbGFuOjpQbGFuKToKKyAgICAgICAgKEpT
Qzo6SklUV29ya2xpc3Q6OlBsYW46OmNvbXBpbGVOb3cpOgorICAgICAgICAoSlNDOjpKSVRXb3Jr
bGlzdDo6Y29tcGlsZUxhdGVyKToKKyAgICAgICAgKEpTQzo6SklUV29ya2xpc3Q6OmNvbXBpbGVO
b3cpOgorICAgICAgICAqIGppdC9KSVRXb3JrbGlzdC5oOgorICAgICAgICAqIGppdC9QQ1RvQ29k
ZU9yaWdpbk1hcC5jcHA6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpQQ1RvQ29k
ZU9yaWdpbk1hcCk6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2luTWFwOjpmaW5kUEMgY29u
c3QpOgorICAgICAgICAqIGppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oOgorICAgICAgICAoSlNDOjpQ
Q1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKToKKyAgICAgICAgKiBq
aXQvU2xvd1BhdGhDYWxsLmg6CisgICAgICAgIChKU0M6OkpJVFNsb3dQYXRoQ2FsbDo6Y2FsbCk6
CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTElu
dDo6aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJ
TlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luLmNw
cDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Ok9yaWdpbjo6T3JpZ2luKToKKyAgICAgICAgKEpT
Qzo6UHJvZmlsZXI6Ok9yaWdpbjo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVy
OjpPcmlnaW46OnRvSlMgY29uc3QpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyT3JpZ2lu
Lmg6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpPcmlnaW46Ok9yaWdpbik6CisgICAgICAgIChK
U0M6OlByb2ZpbGVyOjpPcmlnaW46Om9wZXJhdG9yISBjb25zdCk6CisgICAgICAgIChKU0M6OlBy
b2ZpbGVyOjpPcmlnaW46OmJ5dGVjb2RlSW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpQcm9m
aWxlcjo6T3JpZ2luOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Ok9yaWdp
bjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvRXJy
b3IuY3BwOgorICAgICAgICAoSlNDOjpnZXRCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6
Z2V0Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3IuaDoK
KyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjphcHBl
bmRTb3VyY2VUb0Vycm9yKToKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6CisgICAgICAg
IChKU0M6OnRyeUdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2Zp
bGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKToKKyAgICAgICAgKEpTQzo6U2FtcGxp
bmdQcm9maWxlcjo6cmVwb3J0VG9wQnl0ZWNvZGVzKToKKyAgICAgICAgKiBydW50aW1lL1NhbXBs
aW5nUHJvZmlsZXIuaDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFt
ZTo6Q29kZUxvY2F0aW9uOjpoYXNCeXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKiBydW50
aW1lL1N0YWNrRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpTdGFja0ZyYW1lOjpTdGFja0ZyYW1l
KToKKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6Y29tcHV0ZUxpbmVBbmRDb2x1bW4gY29uc3Qp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RhY2tGcmFtZS5oOgorICAgICAgICAoSlNDOjpTdGFja0Zy
YW1lOjpoYXNCeXRlY29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6
Ynl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6Omhhc0J5dGVjb2RlT2Zm
c2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6Ynl0ZWNvZGVP
ZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmR1bXBSZWdpc3RlcnMpOgorCiAyMDE5LTEwLTIyICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgbWFr
ZSAzMmJpdCBKSVQgYnVpbHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA1
MTNkYmE0ZmZlMzI5NzJiZGVmNThmZDg2MDdjMTE1MGY5MTJhN2I4Li5jZTFiOGMzNzM1ODEyYzVj
ZDljZWNmOTFiZTk2OGEyMDU1OGIyZDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CkBAIC00NzQsNiArNDc0LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBieXRlY29kZS9BcnJheVByb2ZpbGUuaAogICAgIGJ5dGVjb2RlL0J5
VmFsSW5mby5oCiAgICAgYnl0ZWNvZGUvQnl0ZWNvZGVDb252ZW50aW9ucy5oCisgICAgYnl0ZWNv
ZGUvQnl0ZWNvZGVJbmRleC5oCiAgICAgYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3Ry
eS5oCiAgICAgYnl0ZWNvZGUvQ2FsbEVkZ2UuaAogICAgIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGYwODhiOTVmNGEyYzBlYjA1ZjRkNjA3
ODg1ZGJhMGQ3NjA1YjZhMjcuLmU2NjRlNDAwMzA4N2JhMzk4OGUxNDJhOTE1ODU2NjlmZDdiYjQ3
NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05NDQsNiArOTQ0LDcgQEAKIAkJ
NTM1NTU3MTQxRDlEOUVBNTAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAv
KiBXYXNtTWVtb3J5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNTM1QzI0NjExRjc4OTI4RTAwNkVDNDBFIC8qIGNyZWF0ZV9yZWdleF90YWJsZXMg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE4RjgyMTEx
NzhFQjRCMDAyNDY1QTcgLyogY3JlYXRlX3JlZ2V4X3RhYmxlcyAqLzsgfTsKIAkJNTM1QzI0NkMx
RjdBMTc3ODAwNkVDNDBFIC8qIFVuaWZpZWRTb3VyY2UxMzYuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM1QzI0NkIxRjdBMTc3NzAwNkVDNDBFIC8q
IFVuaWZpZWRTb3VyY2UxMzYuY3BwICovOyB9OworCQk1MzY2M0ZEQTIzNTYyRjk2MDA1RUE2OEMg
LyogQnl0ZWNvZGVJbmRleC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTM2NjNGRDkyMzU2MkY5MDAwNUVBNjhDIC8qIEJ5dGVjb2RlSW5kZXguaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MzZCMzEwQzFG
NzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTExOS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzZCMzA4NzFGNzFDNTM4MDAzN0ZDMzMgLyog
VW5pZmllZFNvdXJjZTExOS5jcHAgKi87IH07CiAJCTUzNkIzMTBEMUY3MUM1OTkwMDM3RkMzMyAv
KiBVbmlmaWVkU291cmNlMTI1LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzNkIzMDg4MUY3MUM1MzgwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlMTI1
LmNwcCAqLzsgfTsKIAkJNTM2QjMxMEUxRjcxQzU5OTAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2Ux
MzEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2
QjMwODkxRjcxQzUzODAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UxMzEuY3BwICovOyB9OwpAQCAt
MzYwMiw2ICszNjAzLDggQEAKIAkJNTM1NTU3MTUxRDlERkEzMjAwNkQ1ODNCIC8qIFdhc21NZW1v
cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU1lbW9yeS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNUMyNDZCMUY3QTE3NzcwMDZFQzQw
RSAvKiBVbmlmaWVkU291cmNlMTM2LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFVuaWZpZWRTb3VyY2UxMzYuY3BwOyBwYXRoID0gIkRlcml2ZWRTb3VyY2VzL0phdmFT
Y3JpcHRDb3JlL3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTM2LmNwcCI7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTUzNUUwOEM5MjI1NDYwQUIwMERGMDBDQSAv
KiBwb3N0cHJvY2Vzcy1oZWFkZXItcnVsZSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnNoOyBwYXRo
ID0gInBvc3Rwcm9jZXNzLWhlYWRlci1ydWxlIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTM2MERBQkIyMzU2QURDQTAwM0Y2QUI4IC8qIEJ5dGVjb2RlSW5kZXguY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQnl0ZWNvZGVJbmRleC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUzNjYzRkQ5MjM1NjJGOTAwMDVFQTY4QyAvKiBCeXRlY29kZUluZGV4LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlSW5kZXguaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTM2OTZFNTcyMEEzQTcwMjAwRDdFMDFFIC8qIEJ5dGVjb2RlU3RydWN0
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlY29kZVN0cnVjdHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM2QjMwODcxRjcxQzUzODAwMzdGQzMzIC8q
IFVuaWZpZWRTb3VyY2UxMTkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gVW5pZmllZFNvdXJjZTExOS5jcHA7IHBhdGggPSAiRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlw
dENvcmUvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMTkuY3BwIjsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTM2QjMwODgxRjcxQzUzODAwMzdGQzMzIC8qIFVu
aWZpZWRTb3VyY2UxMjUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
VW5pZmllZFNvdXJjZTEyNS5jcHA7IHBhdGggPSAiRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENv
cmUvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMjUuY3BwIjsgc291cmNlVHJlZSA9IEJV
SUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTgxMDIsNiArODEwNSw4IEBACiAJCQkJRTNEMjY0MjYx
RDM4QzA0MjAwMEJFMTc0IC8qIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcCAqLywKIAkJ
CQlFM0QyNjQyNzFEMzhDMDQyMDAwQkUxNzQgLyogQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24u
aCAqLywKIAkJCQlFM0QyNjQyODFEMzhDMDQyMDAwQkUxNzQgLyogQnl0ZWNvZGVHcmFwaC5oICov
LAorCQkJCTUzNjBEQUJCMjM1NkFEQ0EwMDNGNkFCOCAvKiBCeXRlY29kZUluZGV4LmNwcCAqLywK
KwkJCQk1MzY2M0ZEOTIzNTYyRjkwMDA1RUE2OEMgLyogQnl0ZWNvZGVJbmRleC5oICovLAogCQkJ
CTcwOTRDNERDMUFFNDM5NTMwMDQxQTJFRSAvKiBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmNw
cCAqLywKIAkJCQk3MDk0QzRERDFBRTQzOTUzMDA0MUEyRUUgLyogQnl0ZWNvZGVJbnRyaW5zaWNS
ZWdpc3RyeS5oICovLAogCQkJCTBGMkREODBBMUFCM0Q4NTgwMEJCQjhFOCAvKiBCeXRlY29kZUtp
bGxzLmggKi8sCkBAIC04OTk2LDYgKzkwMDEsNyBAQAogCQkJCTk2OUEwNzIzMEVEMUNFMzMwMEYx
RjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMyOERBRTgx
RDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVHcmFwaC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTM2NjNGREEyMzU2MkY5NjAwNUVBNjhDIC8qIEJ5dGVjb2RlSW5k
ZXguaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOTRDNERGMUFFNDM5NTMwMDQxQTJFRSAvKiBCeXRl
Y29kZUludHJpbnNpY1JlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgwQjFBQjNE
ODU4MDBCQkI4RTggLyogQnl0ZWNvZGVLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FF
MTMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRl
cnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggN2NlZDY4YjE3N2Y0OTFlMzkw
NDkxOTQwZGY4OGVlMzU0MjQ4NmZhNy4uYzMyOGZiYWIwOGQ5YjgzYzYxN2E2NTI0NTdjNjEwOTEx
ODJkNTY0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMTk3LDYgKzE5Nyw3IEBA
IGJ5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAKIGJ5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5j
cHAKIGJ5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAogYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0
b3JpZmljYXRpb24uY3BwCitieXRlY29kZS9CeXRlY29kZUluZGV4LmNwcAogYnl0ZWNvZGUvQnl0
ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5jcHAKIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAKIGJ5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKaW5kZXggMzM5OWQ1ODFlMWYyYzhmYzdjZjE3MmU2
NjZlN2M3Mjg3OGY0YjU0NS4uYjdlOTM3OTQ1YTkwOTQ2ZTJjMDU1MjI3NmNiMTMwNTMwZjQzODlh
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaApAQCAtMjI1
LDcgKzIyNSw3IEBAIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yU3RydWN0dXJl
KFN0cnVjdHVyZSogc3RydWN0dXJlKQogc3RydWN0IEJ5VmFsSW5mbyB7CiAgICAgQnlWYWxJbmZv
KCkgeyB9CiAKLSAgICBCeVZhbEluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29kZUxvY2F0
aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkp1bXA8
SlNJbnRlcm5hbFB0clRhZz4gYmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+IGV4Y2VwdGlvbkhhbmRsZXIsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUs
IEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBiYWRUeXBlRG9uZVRhcmdldCwgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gYmFkVHlwZU5leHRIb3RQYXRoVGFyZ2V0LCBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBzbG93UGF0aFRhcmdldCkKKyAgICBCeVZhbEluZm8oQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4LCBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+IG5vdEluZGV4
SnVtcCwgQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBiYWRUeXBlSnVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gZXhjZXB0aW9uSGFuZGxlciwg
SklUQXJyYXlNb2RlIGFycmF5TW9kZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIENvZGVM
b2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGJhZFR5cGVEb25lVGFyZ2V0LCBDb2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBiYWRUeXBlTmV4dEhvdFBhdGhUYXJnZXQsIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoVGFyZ2V0KQogICAgICAg
ICA6IG5vdEluZGV4SnVtcChub3RJbmRleEp1bXApCiAgICAgICAgICwgYmFkVHlwZUp1bXAoYmFk
VHlwZUp1bXApCiAgICAgICAgICwgZXhjZXB0aW9uSGFuZGxlcihleGNlcHRpb25IYW5kbGVyKQpA
QCAtMjQ5LDcgKzI0OSw3IEBAIHN0cnVjdCBCeVZhbEluZm8gewogICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IGJhZFR5cGVOZXh0SG90UGF0aFRhcmdldDsKICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFRhcmdldDsKICAgICBBcnJh
eVByb2ZpbGUqIGFycmF5UHJvZmlsZTsKLSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OworICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKICAgICB1bnNpZ25lZCBzbG93UGF0aENvdW50
OwogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgSWRlbnRpZmll
ciBjYWNoZWRJZDsKQEAgLTI2MCw3ICsyNjAsNyBAQCBzdHJ1Y3QgQnlWYWxJbmZvIHsKICAgICBi
b29sIHNlZW4gOiAxOwogfTsKIAotaW5saW5lIHVuc2lnbmVkIGdldEJ5VmFsSW5mb0J5dGVjb2Rl
SW5kZXgoQnlWYWxJbmZvKiBpbmZvKQoraW5saW5lIEJ5dGVjb2RlSW5kZXggZ2V0QnlWYWxJbmZv
Qnl0ZWNvZGVJbmRleChCeVZhbEluZm8qIGluZm8pCiB7CiAgICAgcmV0dXJuIGluZm8tPmJ5dGVj
b2RlSW5kZXg7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUJhc2ljQmxvY2suY3BwCmluZGV4IDEwYzY1YmI5ZGQ3MDlhOWFmN2FiYTZjZWI4YTli
NzM1OTc3MTY0MWIuLjAyZDY0NGI4ODNmZmIzY2Q5OWNhOTliN2JjZjM5YWE5MjZiNzIyMWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxv
Y2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2lj
QmxvY2suY3BwCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBCeXRlY29kZUJhc2ljQmxvY2s6OmNv
bXB1dGVJbXBsKEJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJgogICAg
ICAgICAgICAgLy8gYmxvY2sgYmVjYXVzZSB0aGUgZmluYWxseSBibG9jayB3aWxsIGNyZWF0ZSBp
dHMgb3duIGNhdGNoLCB3aGljaCB3aWxsIGdlbmVyYXRlIGEgSGFuZGxlckluZm8uCiAgICAgICAg
ICAgICBpZiAoaXNUaHJvdyhvcGNvZGVJRCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoYnl0
ZWNvZGVPZmZzZXQgKyBpbnN0cnVjdGlvbi0+c2l6ZSgpID09IGJsb2NrLT5sZWFkZXJPZmZzZXQo
KSArIGJsb2NrLT50b3RhbExlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICBhdXRvKiBoYW5kbGVy
ID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0
KCkpOworICAgICAgICAgICAgICAgIGF1dG8qIGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJG
b3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpKTsKICAg
ICAgICAgICAgICAgICBmYWxsc1Rocm91Z2ggPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAo
IWhhbmRsZXIpIHsKICAgICAgICAgICAgICAgICAgICAgbGlua0Jsb2NrcyhibG9jaywgZXhpdC5n
ZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcAppbmRleCAyODYwNTFjYzk1ZWE0ZDhmZGE2
NmZiMDk5N2JiNTkzZWRlN2UzMmE2Li40M2NlNTYxZjM4MjZkNmIwYjE0Yzg0MTFjYmY4MTFiODM5
YjdmZTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAKQEAgLTIwMCw3ICsyMDAsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJ1bkxpdmVuZXNzRml4cG9pbnQoY29kZUJsb2NrLCBpbnN0cnVjdGlv
bnMsIG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmdyYXBoKCkpOwogCiAgICAgICAgIGZvciAoWWllbGRE
YXRhJiBkYXRhIDogbV9nZW5lcmF0b3JpZmljYXRpb24ueWllbGRzKCkpCi0gICAgICAgICAgICBk
YXRhLmxpdmVuZXNzID0gZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChjb2RlQmxvY2ss
IGluc3RydWN0aW9ucywgbV9nZW5lcmF0b3JpZmljYXRpb24uZ3JhcGgoKSwgbV9nZW5lcmF0b3Jp
ZmljYXRpb24uaW5zdHJ1Y3Rpb25zKCkuYXQoZGF0YS5wb2ludCkubmV4dCgpLm9mZnNldCgpKTsK
KyAgICAgICAgICAgIGRhdGEubGl2ZW5lc3MgPSBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5k
ZXgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmdyYXBoKCks
IEJ5dGVjb2RlSW5kZXgobV9nZW5lcmF0b3JpZmljYXRpb24uaW5zdHJ1Y3Rpb25zKCkuYXQoZGF0
YS5wb2ludCkubmV4dCgpLm9mZnNldCgpKSk7CiAgICAgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE3YTM4NWJlOWMyODJkZmQ4ZDFiZWE1MDNhNTQ3M2FlZjBhOWM0YzYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHAKQEAg
LTAsMCArMSwzNiBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0Ogor
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQnl0ZWNvZGVJbmRleC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBC
eXRlY29kZUluZGV4OjpkdW1wKFdURjo6UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoImJjIyIsIG9mZnNldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40ZWFkODU1ZmI0YzA3MjYyM2M3NzQ3MmE0NjNlNTkwZmYyMjhiYjA2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaApAQCAt
MCwwICsxLDk4IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6Cisq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBQcmludFN0
cmVhbTsKK30KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ5dGVjb2RlSW5kZXggeworcHVi
bGljOgorICAgIEJ5dGVjb2RlSW5kZXgoKSA9IGRlZmF1bHQ7CisgICAgZXhwbGljaXQgQnl0ZWNv
ZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCkKKyAgICAgICAgOiBtX29mZnNldChieXRl
Y29kZU9mZnNldCkKKyAgICB7IH0KKworICAgIHVpbnQzMl90IG9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2Zmc2V0OyB9CisgICAgdWludDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9v
ZmZzZXQ7IH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6OmludEhh
c2gobV9vZmZzZXQpOyB9CisgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZGVsZXRlZFZhbHVlKCkg
eyByZXR1cm4gZnJvbUJpdHMoaW52YWxpZE9mZnNldCAtIDEpOyB9CisgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzID09IGRlbGV0ZWRWYWx1ZSgp
OyB9CisKKyAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBmcm9tQml0cyh1aW50MzJfdCBiaXRzKTsK
KworICAgIC8vIENvbXBhcmlzb24gb3BlcmF0b3JzLgorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiBtX29mZnNldCAhPSBpbnZhbGlkT2Zmc2V0ICYmIG1fb2Zmc2V0
ICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CisgICAgYm9vbCBvcGVyYXRvciA9PShjb25z
dCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4gYXNCaXRzKCkgPT0gb3RoZXIu
YXNCaXRzKCk7IH0KKyAgICBib29sIG9wZXJhdG9yICE9KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90
aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgYm9vbCBvcGVy
YXRvciA8KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMo
KSA8IG90aGVyLmFzQml0cygpOyB9CisgICAgYm9vbCBvcGVyYXRvciA+KGNvbnN0IEJ5dGVjb2Rl
SW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA+IG90aGVyLmFzQml0cygpOyB9
CisgICAgYm9vbCBvcGVyYXRvciA8PShjb25zdCBCeXRlY29kZUluZGV4JiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gYXNCaXRzKCkgPD0gb3RoZXIuYXNCaXRzKCk7IH0KKyAgICBib29sIG9wZXJhdG9y
ID49KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA+
PSBvdGhlci5hc0JpdHMoKTsgfQorCisKKyAgICB2b2lkIGR1bXAoV1RGOjpQcmludFN0cmVhbSYp
IGNvbnN0OworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgaW52YWxp
ZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKKworICAgIHVp
bnQzMl90IG1fb2Zmc2V0IHsgaW52YWxpZE9mZnNldCB9OworfTsKKworaW5saW5lIEJ5dGVjb2Rl
SW5kZXggQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHModWludDMyX3QgYml0cykKK3sKKyAgICBCeXRl
Y29kZUluZGV4IHJlc3VsdDsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBiaXRzOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0cnVjdCBCeXRlY29kZUluZGV4SGFzaCB7CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQnl0ZWNvZGVJbmRleCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgp
OyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQnl0ZWNvZGVJbmRleCYgYSwgY29uc3Qg
Qnl0ZWNvZGVJbmRleCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpC
eXRlY29kZUluZGV4PiB7CisgICAgdHlwZWRlZiBKU0M6OkJ5dGVjb2RlSW5kZXhIYXNoIEhhc2g7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRl
PD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpCeXRlY29kZUluZGV4PiA6IFNpbXBsZUNsYXNzSGFz
aFRyYWl0czxKU0M6OkJ5dGVjb2RlSW5kZXg+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
ZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMuY3BwCmluZGV4IDMzMGM3YzdhOThkZWU3MGIxOTYxY2VkMGUxYzVjMjQyNzdi
MjVlOGIuLmExYzI4MjFiZjNkMGEyZGQ1MzgxMDRkMDUzYmUwYWIwOTc5MGM5MDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMuY3BwCkBAIC00NiwyMCArNDYsMjAgQEAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAg
ICAgIGR1bXBSZXN1bHRzKGNvZGVCbG9jayk7CiB9CiAKLXZvaWQgQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJs
b2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KQordm9p
ZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRl
eChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBGYXN0
Qml0VmVjdG9yJiByZXN1bHQpCiB7Ci0gICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7Cisg
ICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JC
eXRlY29kZU9mZnNldChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKICAgICBBU1NFUlQoYmxvY2sp
OwogICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygpKTsKICAgICBBU1NFUlQoIWJsb2Nr
LT5pc0V4aXRCbG9jaygpKTsKICAgICByZXN1bHQucmVzaXplKGJsb2NrLT5vdXQoKS5udW1CaXRz
KCkpOwotICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2Nr
LCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX2dyYXBoLCBibG9jaywgYnl0ZWNvZGVPZmZz
ZXQsIHJlc3VsdCk7CisgICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZUluZGV4KGNv
ZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgYmxvY2ssIGJ5dGVj
b2RlSW5kZXgsIHJlc3VsdCk7CiB9CiAKLUZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJs
b2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0Zhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBGYXN0Qml0VmVj
dG9yIG91dDsKLSAgICBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywg
Ynl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4
KGNvZGVCbG9jaywgYnl0ZWNvZGVJbmRleCwgb3V0KTsKICAgICByZXR1cm4gb3V0OwogfQogCkBA
IC03Nyw3ICs3Nyw3IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnVs
bExpdmVuZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBGdWxsQnl0CiAgICAgICAgIAogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+b2Zmc2V0cygpLnNpemUoKTsgaS0tOykgewogICAg
ICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+b2Zmc2V0cygpW2ldOwot
ICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCksIG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgICAgICAgICAg
c3RlcE92ZXJJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCks
IG1fZ3JhcGgsIEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBvdXQpOwogICAgICAgICAg
ICAgcmVzdWx0Lm1fbWFwW2J5dGVjb2RlT2Zmc2V0XSA9IG91dDsKICAgICAgICAgfQogICAgIH0K
QEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0
ZUtpbGxzKENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUtpbGxzJgogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBibG9jay0+b2Zmc2V0cygpLnNpemUoKTsgaS0tOykgewogICAgICAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+b2Zmc2V0cygpW2ldOwogICAgICAg
ICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbigKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LAorICAgICAg
ICAgICAgICAgIGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwg
Qnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksCiAgICAgICAgICAgICAgICAgWyZdICh1bnNp
Z25lZCBpbmRleCkgewogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2VzLgog
ICAgICAgICAgICAgICAgICAgICBpZiAob3V0W2luZGV4XSkKQEAgLTE3MCw3ICsxNzAsNyBAQCB2
b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiAgICAgICAgICAgICBjb25zdCBhdXRvIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3Ry
dWN0aW9ucy5hdChieXRlY29kZU9mZnNldCk7CiAKICAgICAgICAgICAgIGRhdGFMb2dGKCJMaXZl
IHZhcmlhYmxlczoiKTsKLSAgICAgICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUJlZm9yZSA9IGdl
dExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCk7
CisgICAgICAgICAgICBGYXN0Qml0VmVjdG9yIGxpdmVCZWZvcmUgPSBnZXRMaXZlbmVzc0luZm9B
dEJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSk7
CiAgICAgICAgICAgICBkdW1wQml0VmVjdG9yKGxpdmVCZWZvcmUpOwogICAgICAgICAgICAgZGF0
YUxvZ0YoIlxuIik7CiAgICAgICAgICAgICBjb2RlQmxvY2stPmR1bXBCeXRlY29kZShXVEY6OmRh
dGFGaWxlKCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKaW5kZXggN2Jl
ZjRjZjFkY2UyYTFhN2ZjMTgzYWZlYWUyMWRkNTkxNGY4Zjk0OS4uZWFjMTg1ZGE1NmM5NmMzODVi
OWUzMWJhN2FjOGU3ZGU3NDliNjUxNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaApAQCAtMzcsMTUgKzM3
LDE1IEBAIGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzOwogCiBjbGFzcyBCeXRlY29kZUxpdmVu
ZXNzUHJvcGFnYXRpb24gewogcHJvdGVjdGVkOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGUsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+IHZvaWQg
c3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mLCBCeXRlY29kZUdyYXBoJiwgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBieXRlY29kZU9m
ZnNldCwgY29uc3QgVXNlRnVuY3RvciYsIGNvbnN0IERlZkZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBVc2VGdW5jdG9yLCB0eXBlbmFtZSBE
ZWZGdW5jdG9yPiB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSosIGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXgsIGNvbnN0
IFVzZUZ1bmN0b3ImLCBjb25zdCBEZWZGdW5jdG9yJik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2RlQmxvY2tUeXBlPiB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSos
IGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCk7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4gdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENv
ZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBC
eXRlY29kZUluZGV4LCBGYXN0Qml0VmVjdG9yJiBvdXQpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPiBib29sIGNvbXB1dGVMb2Nh
bExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0
aW9ucyYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUJhc2ljQmxvY2sqLCB1bnNpZ25lZCB0YXJn
ZXRPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPiBib29sIGNvbXB1dGVMb2NhbExp
dmVuZXNzRm9yQnl0ZWNvZGVJbmRleChDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25z
JiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlQmFzaWNCbG9jayosIEJ5dGVjb2RlSW5kZXgsIEZh
c3RCaXRWZWN0b3ImIHJlc3VsdCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+IGJvb2wgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JC
bG9jayhDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYs
IEJ5dGVjb2RlQmFzaWNCbG9jayopOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPiBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5m
b0F0Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5
dGVjb2RlR3JhcGgmLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPiBGYXN0Qml0VmVjdG9y
IGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5z
dHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXgpOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPiB2b2lkIHJ1
bkxpdmVuZXNzRml4cG9pbnQoQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5
dGVjb2RlR3JhcGgmKTsKIH07CkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBmcmllbmQg
Y2xhc3MgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOwogICAgIEJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcyhDb2RlQmxvY2sqKTsKICAgICAKLSAgICBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNz
SW5mb0F0Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQp
OworICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KENvZGVC
bG9jayosIEJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIHZvaWQgY29tcHV0ZUZ1bGxMaXZlbmVz
cyhDb2RlQmxvY2sqLCBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgcmVzdWx0KTsKICAgICB2b2lkIGNv
bXB1dGVLaWxscyhDb2RlQmxvY2sqLCBCeXRlY29kZUtpbGxzJiByZXN1bHQpOwpAQCAtNjUsNyAr
NjUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgZHVtcFJlc3VsdHMoQ29kZUJsb2Nr
Kik7CiAKLSAgICB2b2lkIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2Nr
KiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImKTsKKyAgICB2b2lkIGdl
dExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBG
YXN0Qml0VmVjdG9yJik7CiAKICAgICBCeXRlY29kZUdyYXBoIG1fZ3JhcGg7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKaW5kZXggNzFmZjU2ZjdlYTY4YTJmNDU1Y2Y2NzhiM2M3
OWEyZDdiYWI5YjM5ZC4uN2E5MDAzMjIyZTUxNjdiYjA1MTA5NTcwMmIzODI2M2EzNWMwODQzYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpc0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCkBAIC02MSw3ICs2MSw3IEBAIGlubGlu
ZSBib29sIGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQogLy8gU2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gYnl0ZWNvZGUgdXNlL2RlZiwgd2hpY2ggZGV0
ZXJtaW5lcyBkZWZzIGZpcnN0IGFuZCB0aGVuIHVzZXMsIGFuZCBpbmNsdWRlcwogLy8gZXhjZXB0
aW9uIGhhbmRsZXJzIGluIHRoZSB1c2VzLgogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlw
ZSwgdHlwZW5hbWUgVXNlRnVuY3RvciwgdHlwZW5hbWUgRGVmRnVuY3Rvcj4KLWlubGluZSB2b2lk
IEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxv
Y2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMs
IEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2Rl
T2Zmc2V0LCBjb25zdCBVc2VGdW5jdG9yJiB1c2UsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikKK2lu
bGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlv
bihDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgsIGNvbnN0IFVzZUZ1bmN0b3ImIHVzZSwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQogewogICAg
IC8vIFRoaXMgYWJzdHJhY3RseSBleGVjdXRlIHRoZSBpbnN0cnVjdGlvbiBpbiByZXZlcnNlLiBJ
bnN0cnVjdGlvbnMgbG9naWNhbGx5IGZpcnN0IHVzZSBvcGVyYW5kcyBhbmQKICAgICAvLyB0aGVu
IGRlZmluZSBvcGVyYW5kcy4gVGhpcyBsb2dpY2FsIG9yZGVyaW5nIGlzIG5lY2Vzc2FyeSBmb3Ig
b3BlcmF0aW9ucyB0aGF0IHVzZSBhbmQgZGVmIHRoZSBzYW1lCkBAIC03OCwxNyArNzgsMTcgQEAg
aW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0
aW9uKENvZGVCbG9ja1R5cGUqIGNvZGUKICAgICAvLyB1c2VzIGJlZm9yZSBkZWZzLCB0aGVuIHRo
ZSBhZGQgb3BlcmF0aW9uIGFib3ZlIHdvdWxkIGFwcGVhciB0byBub3QgaGF2ZSBsb2MxIGxpdmUs
IHNpbmNlIHdlJ2QKICAgICAvLyBmaXJzdCBhZGQgaXQgdG8gdGhlIG91dCBzZXQgKHRoZSB1c2Up
LCBhbmQgdGhlbiB3ZSdkIHJlbW92ZSBpdCAodGhlIGRlZikuCiAKLSAgICBhdXRvKiBpbnN0cnVj
dGlvbiA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZU9mZnNldCkucHRyKCk7CisgICAgYXV0byog
aW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAg
T3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKIAotICAgIGNvbXB1
dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoCisgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4
KAogICAgICAgICBjb2RlQmxvY2ssIG9wY29kZUlELCBpbnN0cnVjdGlvbiwKICAgICAgICAgWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewogICAgICAgICAgICAgaWYgKGlzVmFsaWRSZWdp
c3RlckZvckxpdmVuZXNzKG9wZXJhbmQpKQogICAgICAgICAgICAgICAgIGRlZihvcGVyYW5kLnRv
TG9jYWwoKSk7CiAgICAgICAgIH0pOwogCi0gICAgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNl
dCgKKyAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXgoCiAgICAgICAgIGNvZGVCbG9jaywg
b3Bjb2RlSUQsIGluc3RydWN0aW9uLAogICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7CiAgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mob3BlcmFu
ZCkpCkBAIC05Nyw3ICs5Nyw3IEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdh
dGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2RlCiAKICAgICAvLyBJ
ZiB3ZSBoYXZlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCB3ZSB3YW50IHRoZSBsaXZlLWluIHZhcmlh
YmxlcyBvZiB0aGUgCiAgICAgLy8gZXhjZXB0aW9uIGhhbmRsZXIgYmxvY2sgdG8gYmUgaW5jbHVk
ZWQgaW4gdGhlIGxpdmUtaW4gb2YgdGhpcyBwYXJ0aWN1bGFyIGJ5dGVjb2RlLgotICAgIGlmIChh
dXRvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQpKSB7CisgICAgaWYgKGF1dG8qIGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJG
b3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpKSB7CiAgICAgICAgIEJ5dGVjb2RlQmFzaWNC
bG9jayogaGFuZGxlckJsb2NrID0gZ3JhcGguZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0
KGhhbmRsZXItPnRhcmdldCk7CiAgICAgICAgIEFTU0VSVChoYW5kbGVyQmxvY2spOwogICAgICAg
ICBoYW5kbGVyQmxvY2stPmluKCkuZm9yRWFjaFNldEJpdCh1c2UpOwpAQCAtMTA1LDEwICsxMDUs
MTAgQEAgaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlcklu
c3RydWN0aW9uKENvZGVCbG9ja1R5cGUqIGNvZGUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29k
ZUJsb2NrVHlwZT4KLWlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3Rl
cE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0
aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBJbnN0cnVjdGlv
blN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiBvdXQpCitpbmxp
bmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24o
Q29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1
Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
LCBGYXN0Qml0VmVjdG9yJiBvdXQpCiB7CiAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbigKLSAgICAg
ICAgY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZU9mZnNldCwKKyAgICAg
ICAgY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZUluZGV4LAogICAgICAg
ICBbJl0gKHVuc2lnbmVkIGJpdEluZGV4KSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSB1
c2UgZnVuY3Rvciwgc28gd2Ugc2V0IHRoZSBiaXQuCiAgICAgICAgICAgICBvdXRbYml0SW5kZXhd
ID0gdHJ1ZTsKQEAgLTEyMCw3ICsxMjAsNyBAQCBpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNz
UHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZQogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+
Ci1pbmxpbmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExp
dmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJ
bnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2Rl
QmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIHRhcmdldE9mZnNldCwgRmFzdEJpdFZlY3RvciYg
cmVzdWx0KQoraW5saW5lIGJvb2wgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRl
TG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBj
b25zdCBJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5
dGVjb2RlQmFzaWNCbG9jayogYmxvY2ssIEJ5dGVjb2RlSW5kZXggdGFyZ2V0SW5kZXgsIEZhc3RC
aXRWZWN0b3ImIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9jaygpKTsK
ICAgICBBU1NFUlQoIWJsb2NrLT5pc0VudHJ5QmxvY2soKSk7CkBAIC0xMjksOSArMTI5LDkgQEAg
aW5saW5lIGJvb2wgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9jYWxMaXZl
bmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KEMKIAogICAgIGZvciAoaW50IGkgPSBibG9jay0+b2Zmc2V0
cygpLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gYmxvY2stPm9mZnNldHMoKVtpXTsKLSAgICAgICAgaWYgKHRhcmdldE9mZnNldCA+
IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICBpZiAodGFyZ2V0SW5kZXgub2Zmc2V0KCkgPiBieXRl
Y29kZU9mZnNldCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzdGVwT3Zlckluc3RydWN0
aW9uKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVPZmZzZXQsIG91dCk7
CisgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdy
YXBoLCBCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgb3V0KTsKICAgICB9CiAKICAgICBy
ZXR1cm4gcmVzdWx0LnNldEFuZENoZWNrKG91dCk7CkBAIC0xNDIsMTkgKzE0MiwxOSBAQCBpbmxp
bmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9yQmxvY2soQ29kZUJsb2NrVAogewogICAgIGlmIChibG9jay0+aXNFeGl0QmxvY2soKSB8fCBi
bG9jay0+aXNFbnRyeUJsb2NrKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGluc3RydWN0
aW9ucywgZ3JhcGgsIGJsb2NrLCBibG9jay0+bGVhZGVyT2Zmc2V0KCksIGJsb2NrLT5pbigpKTsK
KyAgICByZXR1cm4gY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYmxvY2ssIEJ5dGVjb2RlSW5kZXgoYmxvY2stPmxlYWRl
ck9mZnNldCgpKSwgYmxvY2stPmluKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+Ci1pbmxpbmUgRmFzdEJpdFZlY3RvciBCeXRl
Y29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQo
Q29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9u
cywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoraW5saW5l
IEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpnZXRMaXZlbmVzc0lu
Zm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVj
dGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCkKIHsKLSAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgu
ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgQnl0
ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAgICAgQVNTRVJUKGJsb2NrKTsKICAgICBB
U1NFUlQoIWJsb2NrLT5pc0VudHJ5QmxvY2soKSk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNFeGl0
QmxvY2soKSk7CiAgICAgRmFzdEJpdFZlY3RvciBvdXQ7CiAgICAgb3V0LnJlc2l6ZShibG9jay0+
b3V0KCkubnVtQml0cygpKTsKLSAgICBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zm
c2V0KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYmxvY2ssIGJ5dGVjb2RlT2Zmc2V0
LCBvdXQpOworICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChjb2RlQmxv
Y2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJsb2NrLCBieXRlY29kZUluZGV4LCBvdXQpOwogICAg
IHJldHVybiBvdXQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZVVzZURlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlVXNlRGVmLmgKaW5kZXggMDIyZjNiZmViODY4NDQxY2NhZGRhZmQ3ZjgzNGZhOGY5ODg3
M2JjZS4uY2EzMzQ3OTQyODQ4YzJmMzA4YTVjNWE1ZWI5NDYyYTUxZjRlYTkzNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKQEAgLTQ2LDcg
KzQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZGVmaW5lIERFRlMgVVNFU19PUl9ERUZTCiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEJsb2NrLCB0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCBjb21wdXRlVXNl
c0ZvckJ5dGVjb2RlT2Zmc2V0KEJsb2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9wY29kZUlELCBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleChCbG9jayogY29kZUJsb2NrLCBPcGNvZGVJ
RCBvcGNvZGVJRCwgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQogewogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9lbnRlciAmJiAoY29kZUJsb2Nr
LT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZh
bCgpKSAmJiBjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKS5pc1ZhbGlkKCkpCiAgICAgICAgIGZ1
bmN0b3IoY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkpOwpAQCAtMjk3LDcgKzI5Nyw3IEBAIHZv
aWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldChCbG9jayogY29kZUJsb2NrLCBPcGNvZGVJ
RCBvcGNvZGVJRCwgY29uc3QgSW5zCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJsb2NrLCB0eXBl
bmFtZSBGdW5jdG9yPgotdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KEJsb2NrKiBj
b2RlQmxvY2ssIE9wY29kZUlEIG9wY29kZUlELCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJ
bmRleChCbG9jayogY29kZUJsb2NrLCBPcGNvZGVJRCBvcGNvZGVJRCwgY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIHN3aXRjaCAo
b3Bjb2RlSUQpIHsKICAgICBjYXNlIG9wX3dpZGUxNjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCmluZGV4IDlhMDAwZmM1YjQyYWU2ZTM4
MjY5ZDgzN2E3OTBhMzk2MGI1Y2JkYTMuLmYxM2QxNzM0YTAyYzU4YTMyMTc1OTI1ZDI4ODU1YTJh
MjYwMDE4MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua1N0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rU3RhdHVzLmNwcApAQCAtNTUsNyArNTUsNyBAQCBDYWxsTGlua1N0YXR1czo6Q2FsbExpbmtT
dGF0dXMoSlNWYWx1ZSB2YWx1ZSkKICAgICBtX3ZhcmlhbnRzLmFwcGVuZChDYWxsVmFyaWFudCh2
YWx1ZS5hc0NlbGwoKSkpOwogfQogCi1DYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29t
cHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitDYWxsTGlua1N0YXR1cyBDYWxsTGlu
a1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2Rl
QmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAg
ICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2Rl
SW5kZXgpOwpAQCAtNjcsNyArNjcsNyBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQgogICAgIH0K
ICNlbmRpZgogCi0gICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0
aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxl
ZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKICAgICBP
cGNvZGVJRCBvcCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwogCiAgICAgTExJbnRDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbzsKQEAgLTkwLDcgKzkwLDcgQEAgQ2FsbExpbmtTdGF0dXMgQ2Fs
bExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
Q29kZUIKIH0KIAogQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCi0g
ICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25z
dCBJQ1N0YXR1c01hcCYgbWFwLAorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4LCBjb25zdCBJQ1N0YXR1c01hcCYgbWFwLAogICAgIEV4aXRT
aXRlRGF0YSBleGl0U2l0ZURhdGEpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihw
cm9maWxlZEJsb2NrLT5tX2xvY2spOwpAQCAtMTE0LDEyICsxMTQsMTIgQEAgQ2FsbExpbmtTdGF0
dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCiB9CiAKIENhbGxMaW5rU3RhdHVzIENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm9yKAotICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCwgY29uc3QgSUNTdGF0dXNNYXAmIG1hcCkKKyAgICBDb2RlQmxv
Y2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgSUNT
dGF0dXNNYXAmIG1hcCkKIHsKICAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2NrLCBi
eXRlY29kZUluZGV4LCBtYXAsIGNvbXB1dGVFeGl0U2l0ZURhdGEocHJvZmlsZWRCbG9jaywgYnl0
ZWNvZGVJbmRleCkpOwogfQogCi1DYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIENhbGxMaW5r
U3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkKK0NhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgQ2FsbExp
bmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgRXhpdFNpdGVEYXRhIGV4aXRTaXRl
RGF0YTsKICNpZiBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgKaW5kZXggMGExMDFjYTAyZTY4OTEwZDJmYzM0MjA3OWI5
OTBmYTUyMmE3Mzg5ZC4uNDY4YTNkYjU3YmQyMmM4OWMxMWRkN2NkMjE3OTYxNTBlMzM3ZmNkNCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgK
QEAgLTY2LDEwICs2NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEV4aXRGbGFnIHRha2VzU2xvd1Bh
dGg7CiAgICAgICAgIEV4aXRGbGFnIGJhZEZ1bmN0aW9uOwogICAgIH07Ci0gICAgc3RhdGljIEV4
aXRTaXRlRGF0YSBjb21wdXRlRXhpdFNpdGVEYXRhKENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgpOworICAgIHN0YXRpYyBFeGl0U2l0ZURhdGEgY29tcHV0ZUV4aXRTaXRlRGF0YShD
b2RlQmxvY2sqLCBCeXRlY29kZUluZGV4KTsKICAgICAKLSAgICBzdGF0aWMgQ2FsbExpbmtTdGF0
dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBJ
Q1N0YXR1c01hcCYsIEV4aXRTaXRlRGF0YSk7Ci0gICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNv
bXB1dGVGb3IoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgY29uc3QgSUNTdGF0
dXNNYXAmKTsKKyAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sq
LCBCeXRlY29kZUluZGV4LCBjb25zdCBJQ1N0YXR1c01hcCYsIEV4aXRTaXRlRGF0YSk7CisgICAg
c3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRl
eCwgY29uc3QgSUNTdGF0dXNNYXAmKTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgLy8gQ29tcHV0
ZXMgdGhlIHN0YXR1cyBhc3N1bWluZyB0aGF0IHdlIG5ldmVyIHRvb2sgc2xvdyBwYXRoIGFuZCBu
ZXZlciBwcmV2aW91c2x5CkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICB2b2lkIG1ha2VDbG9zdXJlQ2FsbCgpOwogICAgIAotICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1
cyBjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayos
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21w
dXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIEJ5dGVj
b2RlSW5kZXgpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNv
bXB1dGVGcm9tQ2FsbExpbmtJbmZvKAogICAgICAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBDYWxsTGlua0luZm8mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKaW5kZXggNGU5NDdhMzdiNDgyNjhkYzI0MDFkNWQ5MDU4YmFiZGI1M2JmNjVlNS4u
N2UyMTE2ODNkNzk0YzU0ZmUxYWM4NzM1MzFkODZhMmFlZDc4Njg0MyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTE1MjYsNyArMTUyNiw3IEBA
IENhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjphZGRDYWxsTGlua0luZm8oKQogICAgIHJldHVybiBl
bnN1cmVKSVREYXRhKGxvY2tlcikubV9jYWxsTGlua0luZm9zLmFkZCgpOwogfQogCi1DYWxsTGlu
a0luZm8qIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleCh1bnNpZ25l
ZCBpbmRleCkKK0NhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRl
Y29kZUluZGV4KEJ5dGVjb2RlSW5kZXggaW5kZXgpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihtX2xvY2spOwogICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgp
KSB7CkBAIC0xNTM4LDI3ICsxNTM4LDI3IEBAIENhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjpnZXRD
YWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGluZGV4KQogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi1SYXJlQ2FzZVByb2ZpbGUqIENvZGVCbG9jazo6YWRkUmFyZUNhc2VQcm9m
aWxlKGludCBieXRlY29kZU9mZnNldCkKK1JhcmVDYXNlUHJvZmlsZSogQ29kZUJsb2NrOjphZGRS
YXJlQ2FzZVByb2ZpbGUoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICBhdXRvJiBqaXREYXRhID0gZW5zdXJl
SklURGF0YShsb2NrZXIpOwotICAgIGppdERhdGEubV9yYXJlQ2FzZVByb2ZpbGVzLmFwcGVuZChS
YXJlQ2FzZVByb2ZpbGUoYnl0ZWNvZGVPZmZzZXQpKTsKKyAgICBqaXREYXRhLm1fcmFyZUNhc2VQ
cm9maWxlcy5hcHBlbmQoUmFyZUNhc2VQcm9maWxlKGJ5dGVjb2RlSW5kZXgpKTsKICAgICByZXR1
cm4gJmppdERhdGEubV9yYXJlQ2FzZVByb2ZpbGVzLmxhc3QoKTsKIH0KIAotUmFyZUNhc2VQcm9m
aWxlKiBDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIGludCBieXRlY29kZU9mZnNldCkKK1JhcmVDYXNlUHJvZmlsZSog
Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBpZiAoYXV0
byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICByZXR1cm4gdHJ5QmluYXJ5
U2VhcmNoPFJhcmVDYXNlUHJvZmlsZSwgaW50PigKLSAgICAgICAgICAgIGppdERhdGEtPm1fcmFy
ZUNhc2VQcm9maWxlcywgaml0RGF0YS0+bV9yYXJlQ2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNv
ZGVPZmZzZXQsCi0gICAgICAgICAgICBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZU9mZnNldCk7
CisgICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBCeXRlY29k
ZUluZGV4PigKKyAgICAgICAgICAgIGppdERhdGEtPm1fcmFyZUNhc2VQcm9maWxlcywgaml0RGF0
YS0+bV9yYXJlQ2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAg
IGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlSW5kZXgpOwogICAgIH0KICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotdW5zaWduZWQgQ29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5
dGVjb2RlT2Zmc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBpbnQgYnl0ZWNv
ZGVPZmZzZXQpCit1bnNpZ25lZCBDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0
ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4KQogewotICAgIFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHJhcmVD
YXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOworICAg
IFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlSW5k
ZXgobG9ja2VyLCBieXRlY29kZUluZGV4KTsKICAgICBpZiAocHJvZmlsZSkKICAgICAgICAgcmV0
dXJuIHByb2ZpbGUtPm1fY291bnRlcjsKICAgICByZXR1cm4gMDsKQEAgLTE3MzAsMTAgKzE3MzAs
MTAgQEAgYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KCkKIH0KICNlbmRp
ZgogCi1IYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZEhhbmRsZXIpCitI
YW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZEhhbmRsZXIpCiB7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkp
OwotICAgIHJldHVybiBoYW5kbGVyRm9ySW5kZXgoYnl0ZWNvZGVPZmZzZXQsIHJlcXVpcmVkSGFu
ZGxlcik7CisgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3Ry
dWN0aW9ucygpLnNpemUoKSk7CisgICAgcmV0dXJuIGhhbmRsZXJGb3JJbmRleChieXRlY29kZUlu
ZGV4Lm9mZnNldCgpLCByZXF1aXJlZEhhbmRsZXIpOwogfQogCiBIYW5kbGVySW5mbyogQ29kZUJs
b2NrOjpoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1
aXJlZEhhbmRsZXIpCkBAIC0xNzYyLDkgKzE3NjIsOSBAQCBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRl
eCBDb2RlQmxvY2s6Om5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUlu
ZAogCiAKIAotdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9y
Qnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBieXRlY29kZU9mZnNldCkK
K3ZvaWQgQ29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2Rl
SW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewotICAgIGF1dG8mIGluc3RydWN0
aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIGF1dG8mIGluc3Ry
dWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CiAgICAgT3BDYXRjaCBv
cCA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gb3Au
bWV0YWRhdGEodGhpcyk7CiAgICAgaWYgKCEhbWV0YWRhdGEubV9idWZmZXIpIHsKQEAgLTE3ODQs
MTAgKzE3ODQsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1
dGVkRm9yQnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW0KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZz
ZXRTbG93KG9wLCBieXRlY29kZU9mZnNldCk7CisgICAgZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29t
cHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyhvcCwgYnl0ZWNvZGVJbmRleCk7CiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlT2Zmc2V0
U2xvdyhjb25zdCBPcENhdGNoJiBvcCwgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBieXRlY29k
ZU9mZnNldCkKK3ZvaWQgQ29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZv
ckJ5dGVjb2RlSW5kZXhTbG93KGNvbnN0IE9wQ2F0Y2gmIG9wLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCiB7CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBieXRlY29kZUxpdmVu
ZXNzID0gbGl2ZW5lc3NBbmFseXNpcygpOwogCkBAIC0xNzk2LDggKzE3OTYsOCBAQCB2b2lkIENv
ZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZU9mZnNldFNs
b3coY29uc3QgT3BDYXRjaAogICAgIC8vIHdlIGNhbiBhdm9pZCBwcm9maWxpbmcgdGhlbSBhbmQg
ZXh0cmFjdGluZyB0aGVtIHdoZW4gZG9pbmcgT1NSIGVudHJ5CiAgICAgLy8gaW50byB0aGUgREZH
LgogCi0gICAgYXV0byBuZXh0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVPZmZz
ZXQpLm5leHQoKS5vZmZzZXQoKTsKLSAgICBGYXN0Qml0VmVjdG9yIGxpdmVMb2NhbHMgPSBieXRl
Y29kZUxpdmVuZXNzLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodGhpcywgbmV4dE9m
ZnNldCk7CisgICAgYXV0byBuZXh0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJ
bmRleCkubmV4dCgpLm9mZnNldCgpOworICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUxvY2FscyA9IGJ5
dGVjb2RlTGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KHRoaXMsIEJ5dGVj
b2RlSW5kZXgobmV4dE9mZnNldCkpOwogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IGxpdmVP
cGVyYW5kczsKICAgICBsaXZlT3BlcmFuZHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsaXZlTG9j
YWxzLmJpdENvdW50KCkpOwogICAgIGxpdmVMb2NhbHMuZm9yRWFjaFNldEJpdChbJl0gKHVuc2ln
bmVkIGxpdmVMb2NhbCkgewpAQCAtMTg0MiwyNiArMTg0MiwyNiBAQCB2b2lkIENvZGVCbG9jazo6
cmVtb3ZlRXhjZXB0aW9uSGFuZGxlckZvckNhbGxTaXRlKERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4
IGNhbGxTaQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXVuc2lnbmVk
IENvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0KQordW5zaWduZWQgQ29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVJbmRleChC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNv
ZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotICAgIHJldHVybiBvd25lckV4ZWN1
dGFibGUoKS0+Zmlyc3RMaW5lKCkgKyBtX3VubGlua2VkQ29kZS0+bGluZU51bWJlckZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZUlu
ZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICByZXR1cm4gb3duZXJF
eGVjdXRhYmxlKCktPmZpcnN0TGluZSgpICsgbV91bmxpbmtlZENvZGUtPmxpbmVOdW1iZXJGb3JC
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogfQogCi11bnNpZ25lZCBDb2RlQmxvY2s6OmNv
bHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQordW5z
aWduZWQgQ29kZUJsb2NrOjpjb2x1bW5OdW1iZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBpbnQgZGl2b3Q7CiAgICAgaW50IHN0YXJ0T2Zmc2V0
OwogICAgIGludCBlbmRPZmZzZXQ7CiAgICAgdW5zaWduZWQgbGluZTsKICAgICB1bnNpZ25lZCBj
b2x1bW47Ci0gICAgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOworICAgIGV4
cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCwgZGl2b3QsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CiAgICAgcmV0dXJuIGNvbHVtbjsKIH0K
IAotdm9pZCBDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVu
ZE9mZnNldCwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0Cit2b2lkIENv
ZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgsIGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0
LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3QKIHsKLSAgICBtX3VubGlu
a2VkQ29kZS0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQs
IGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOworICAgIG1fdW5s
aW5rZWRDb2RlLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgs
IGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwogICAgIGRpdm90
ICs9IHNvdXJjZU9mZnNldCgpOwogICAgIGNvbHVtbiArPSBsaW5lID8gMSA6IGZpcnN0TGluZUNv
bHVtbk9mZnNldCgpOwogICAgIGxpbmUgKz0gb3duZXJFeGVjdXRhYmxlKCktPmZpcnN0TGluZSgp
OwpAQCAtMTg3NSw3ICsxODc1LDcgQEAgYm9vbCBDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5l
QW5kQ29sdW1uKHVuc2lnbmVkIGxpbmUsIE9wdGlvbmFsPHVuc2lnbmVkPiBjb2wKICAgICAgICAg
ICAgIGludCB1bnVzZWQ7CiAgICAgICAgICAgICB1bnNpZ25lZCBvcERlYnVnTGluZTsKICAgICAg
ICAgICAgIHVuc2lnbmVkIG9wRGVidWdDb2x1bW47Ci0gICAgICAgICAgICBleHByZXNzaW9uUmFu
Z2VGb3JCeXRlY29kZU9mZnNldChpdC5vZmZzZXQoKSwgdW51c2VkLCB1bnVzZWQsIHVudXNlZCwg
b3BEZWJ1Z0xpbmUsIG9wRGVidWdDb2x1bW4pOworICAgICAgICAgICAgZXhwcmVzc2lvblJhbmdl
Rm9yQnl0ZWNvZGVJbmRleChpdC5pbmRleCgpLCB1bnVzZWQsIHVudXNlZCwgdW51c2VkLCBvcERl
YnVnTGluZSwgb3BEZWJ1Z0NvbHVtbik7CiAgICAgICAgICAgICBpZiAobGluZSA9PSBvcERlYnVn
TGluZSAmJiAoIWNvbHVtbiB8fCBjb2x1bW4gPT0gb3BEZWJ1Z0NvbHVtbikpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTI2MjMsOSArMjYyMyw5IEBAIGJvb2wg
Q29kZUJsb2NrOjpzaG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKQogfQogI2VuZGlmCiAKLUFy
cmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCitBcnJheVByb2ZpbGUqIENvZGVCbG9j
azo6Z2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBhdXRvIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25z
KCkuYXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlv
bnMoKS5hdChieXRlY29kZUluZGV4KTsKICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpKSB7CiAjZGVmaW5lIENBU0UxKE9wKSBcCiAgICAgY2FzZSBPcDo6b3Bjb2RlSUQ6IFwKQEAg
LTI2NTUsMTAgKzI2NTUsMTAgQEAgQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJv
ZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCB1bnNpZ25lZCBieXQKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZSh1
bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0FycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRBcnJh
eVByb2ZpbGUoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZ2V0QXJyYXlQcm9maWxlKGxvY2tl
ciwgYnl0ZWNvZGVPZmZzZXQpOworICAgIHJldHVybiBnZXRBcnJheVByb2ZpbGUobG9ja2VyLCBi
eXRlY29kZUluZGV4KTsKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMjk2Niw5ICsyOTY2
LDkgQEAgU3RyaW5nIENvZGVCbG9jazo6bmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIpCiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLVZhbHVlUHJv
ZmlsZSogQ29kZUJsb2NrOjp0cnlHZXRWYWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQg
Ynl0ZWNvZGVPZmZzZXQpCitWYWx1ZVByb2ZpbGUqIENvZGVCbG9jazo6dHJ5R2V0VmFsdWVQcm9m
aWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAg
YXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAg
ICBhdXRvIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CiAg
ICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewogCiAjZGVmaW5lIENBU0UoT3Ap
IFwKQEAgLTI5ODUsMjMgKzI5ODUsMjMgQEAgVmFsdWVQcm9maWxlKiBDb2RlQmxvY2s6OnRyeUdl
dFZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKICAgICB9
CiB9CiAKLVNwZWN1bGF0ZWRUeXBlIENvZGVCbG9jazo6dmFsdWVQcm9maWxlUHJlZGljdGlvbkZv
ckJ5dGVjb2RlT2Zmc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBpbnQgYnl0
ZWNvZGVPZmZzZXQpCitTcGVjdWxhdGVkVHlwZSBDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZVByZWRp
Y3Rpb25Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgaWYgKFZhbHVlUHJvZmlsZSogdmFs
dWVQcm9maWxlID0gdHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQpKQorICAgIGlmIChWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZSA9IHRyeUdldFZhbHVl
UHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkpCiAgICAgICAgIHJldHVybiB2
YWx1ZVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwogICAgIHJldHVy
biBTcGVjTm9uZTsKIH0KIAotVmFsdWVQcm9maWxlJiBDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZUZv
ckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKK1ZhbHVlUHJvZmlsZSYgQ29kZUJs
b2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCkKIHsKLSAgICByZXR1cm4gKnRyeUdldFZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0
KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICByZXR1cm4gKnRyeUdldFZhbHVlUHJvZmlsZUZvckJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjp2YWxpZGF0ZSgp
CiB7CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIGxpdmVuZXNzKHRoaXMpOyAvLyBDb21w
dXRlIGRpcmVjdGx5IGZyb20gc2NyYXRjaCBzbyBpdCBkb2Vzbid0IGVmZmVjdCBDb2RlQmxvY2sg
Zm9vdHByaW50LgogICAgIAotICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUF0SGVhZCA9IGxpdmVuZXNz
LmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodGhpcywgMCk7CisgICAgRmFzdEJpdFZl
Y3RvciBsaXZlQXRIZWFkID0gbGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4
KHRoaXMsIEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgIAogICAgIGlmIChsaXZlQXRIZWFkLm51bUJp
dHMoKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbnVtQ2FsbGVlTG9jYWxzKSkgewogICAgICAg
ICBiZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7CkBAIC0zMDI1LDcgKzMwMjUsNyBAQCB2b2lkIENv
ZGVCbG9jazo6dmFsaWRhdGUoKQogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVj
dGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1
Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGUgPSBp
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKLSAgICAgICAgaWYgKCEhYmFzZWxpbmVBbHRlcm5hdGl2
ZSgpLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpKSB7Cisg
ICAgICAgIGlmICghIWJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+aGFuZGxlckZvckJ5dGVjb2RlSW5k
ZXgoQnl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbi5vZmZzZXQoKSkpKSB7CiAgICAgICAgICAgICBp
ZiAob3Bjb2RlID09IG9wX2NhdGNoIHx8IG9wY29kZSA9PSBvcF9lbnRlcikgewogICAgICAgICAg
ICAgICAgIC8vIG9wX2NhdGNoL29wX2VudGVyIGxvZ2ljYWxseSByZXByZXNlbnQgYW4gZW50cnlw
b2ludC4gRW50cnlwb2ludHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlCiAgICAgICAgICAgICAgICAg
Ly8gaW5zaWRlIG9mIGEgdHJ5IGJsb2NrIGJlY2F1c2UgdGhleSBhcmUgcmVzcG9uc2libGUgZm9y
IGJvb3RzdHJhcHBpbmcgc3RhdGUuIEFuZCB0aGV5CkBAIC0zMDgzLDkgKzMwODMsOSBAQCBjb25z
dCBJbnN0cnVjdGlvbiogQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wVGFyZ2V0KGNvbnN0IEluc3Ry
dWN0aW9uKiBwYykKICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0ICsgdGFyZ2V0
KS5wdHIoKTsKIH0KIAotQXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvckJ5
dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQpCitB
cml0aFByb2ZpbGUqIENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgcmV0dXJuIGFyaXRoUHJvZmlsZUZvclBD
KGluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlT2Zmc2V0KS5wdHIoKSk7CisgICAgcmV0dXJuIGFy
aXRoUHJvZmlsZUZvclBDKGluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
LnB0cigpKTsKIH0KIAogQXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvclBD
KGNvbnN0IEluc3RydWN0aW9uKiBwYykKQEAgLTMxMDgsMTEgKzMxMDgsMTEgQEAgQXJpdGhQcm9m
aWxlKiBDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvclBDKGNvbnN0IEluc3RydWN0aW9uKiBwYykK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotYm9vbCBDb2RlQmxvY2s6OmNvdWxkVGFrZVNwZWNp
YWxGYXN0Q2FzZShJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KQorYm9v
bCBDb2RlQmxvY2s6OmNvdWxkVGFrZVNwZWNpYWxBcml0aEZhc3RDYXNlKEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCkKIHsKICAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBBcml0aFByb2ZpbGUqIHByb2ZpbGUgPSBhcml0aFBy
b2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgQXJpdGhQcm9maWxl
KiBwcm9maWxlID0gYXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsK
ICAgICBpZiAoIXByb2ZpbGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gcHJv
ZmlsZS0+dG9va1NwZWNpYWxGYXN0UGF0aCgpOwpAQCAtMzIzMSwyOCArMzIzMSwyOCBAQCBPcHRp
b25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQQyh2b2lkKiBwYykKIH0KICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCi1PcHRpb25hbDx1bnNpZ25lZD4gQ29kZUJsb2NrOjpieXRlY29kZU9m
ZnNldEZyb21DYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK09wdGlv
bmFsPEJ5dGVjb2RlSW5kZXg+IENvZGVCbG9jazo6Ynl0ZWNvZGVJbmRleEZyb21DYWxsU2l0ZUlu
ZGV4KENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKIHsKLSAgICBPcHRpb25hbDx1bnNpZ25l
ZD4gYnl0ZWNvZGVPZmZzZXQ7CisgICAgT3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gYnl0ZWNvZGVJ
bmRleDsKICAgICBKSVRUeXBlIGppdFR5cGUgPSB0aGlzLT5qaXRUeXBlKCk7CiAgICAgaWYgKGpp
dFR5cGUgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayB8fCBqaXRUeXBlID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgYnl0ZWNvZGVPZmZz
ZXQgPSBjYWxsU2l0ZUluZGV4LmJpdHMoKTsKKyAgICAgICAgYnl0ZWNvZGVJbmRleCA9IGNhbGxT
aXRlSW5kZXguYnl0ZWNvZGVJbmRleCgpOwogI2Vsc2UKICAgICAgICAgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uID0gYml0d2lzZV9jYXN0PEluc3RydWN0aW9uKj4oY2FsbFNpdGVJbmRleC5iaXRz
KCkpOwotICAgICAgICBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KGluc3Ry
dWN0aW9uKTsKKyAgICAgICAgYnl0ZWNvZGVJbmRleCA9IHRoaXMtPmJ5dGVjb2RlSW5kZXgoaW5z
dHJ1Y3Rpb24pOwogI2VuZGlmCiAgICAgfSBlbHNlIGlmIChqaXRUeXBlID09IEpJVFR5cGU6OkRG
R0pJVCB8fCBqaXRUeXBlID09IEpJVFR5cGU6OkZUTEpJVCkgewogI2lmIEVOQUJMRShERkdfSklU
KQogICAgICAgICBSRUxFQVNFX0FTU0VSVChjYW5HZXRDb2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgp
KTsKICAgICAgICAgQ29kZU9yaWdpbiBvcmlnaW4gPSBjb2RlT3JpZ2luKGNhbGxTaXRlSW5kZXgp
OwotICAgICAgICBieXRlY29kZU9mZnNldCA9IG9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAg
ICAgIGJ5dGVjb2RlSW5kZXggPSBvcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogI2Vsc2UKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgogICAgIH0KIAotICAgIHJl
dHVybiBieXRlY29kZU9mZnNldDsKKyAgICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKIH0KIAogaW50
MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCBkMjAwZmQ1OWY0Mjlh
MzgzZGE5YWQ3YzdmZmFjMDljYjI2MmJjZjM2Li45OTZhODdkMDkzZWE4YmE4MGY5NWRkNjVhNTJh
ZGIwOThkYmVlNTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCkBAIC0yMzksMTUgKzIzOSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbmRleCA+
PSBtX251bVZhcnM7CiAgICAgfQogCi0gICAgSGFuZGxlckluZm8qIGhhbmRsZXJGb3JCeXRlY29k
ZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWly
ZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKKyAgICBIYW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVj
b2RlSW5kZXgoQnl0ZWNvZGVJbmRleCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVy
OjpBbnlIYW5kbGVyKTsKICAgICBIYW5kbGVySW5mbyogaGFuZGxlckZvckluZGV4KHVuc2lnbmVk
LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwogICAgIHZv
aWQgcmVtb3ZlRXhjZXB0aW9uSGFuZGxlckZvckNhbGxTaXRlKERpc3Bvc2FibGVDYWxsU2l0ZUlu
ZGV4KTsKLSAgICB1bnNpZ25lZCBsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQpOwotICAgIHVuc2lnbmVkIGNvbHVtbk51bWJlckZvckJ5dGVjb2RlT2Zm
c2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICB2b2lkIGV4cHJlc3Npb25SYW5nZUZv
ckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90LAorICAg
IHVuc2lnbmVkIGxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOworICAg
IHVuc2lnbmVkIGNvbHVtbk51bWJlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7Cisg
ICAgdm9pZCBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgsIGlu
dCYgZGl2b3QsCiAgICAgICAgIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNp
Z25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDx1bnNp
Z25lZD4gYnl0ZWNvZGVPZmZzZXRGcm9tQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4KTsKKyAg
ICBPcHRpb25hbDxCeXRlY29kZUluZGV4PiBieXRlY29kZUluZGV4RnJvbUNhbGxTaXRlSW5kZXgo
Q2FsbFNpdGVJbmRleCk7CiAKICAgICB2b2lkIGdldElDU3RhdHVzTWFwKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIElDU3RhdHVzTWFwJiByZXN1bHQpOwogICAgIHZvaWQgZ2V0SUNTdGF0dXNN
YXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7CkBAIC0zMDksNyArMzA5LDcgQEAgcHVibGljOgogICAg
IC8vIFRoaXMgaXMgYSBzbG93IGZ1bmN0aW9uIGNhbGwgdXNlZCBwcmltYXJpbHkgZm9yIGNvbXBp
bGluZyBPU1IgZXhpdHMgaW4gdGhlIGNhc2UKICAgICAvLyB0aGF0IHRoZXJlIGhhZCBiZWVuIGlu
bGluaW5nLiBDaGFuY2VzIGFyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhpcywgeW91J3JlIHJlYWxs
eQogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBj
b3N0IG9mIGNhbGxpbmcgdGhpcy4KLSAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0Zv
ckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgQ2FsbExpbmtJbmZv
KiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwogICAgIAog
ICAgIHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFwJiYgaml0Q29kZU1hcCkKICAgICB7CkBA
IC0zMjgsMjUgKzMyOCwyNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0
ZXJzKFJlZ2lzdGVyU2V0KTsKICAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoc3RkOjp1
bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0Pik7CiAKLSAgICBSYXJlQ2FzZVByb2ZpbGUq
IGFkZFJhcmVDYXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIFJhcmVDYXNlUHJv
ZmlsZSogcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgaW50IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICB1bnNpZ25lZCByYXJlQ2FzZVByb2Zp
bGVDb3VudEZvckJ5dGVjb2RlT2Zmc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGludCBi
eXRlY29kZU9mZnNldCk7CisgICAgUmFyZUNhc2VQcm9maWxlKiBhZGRSYXJlQ2FzZVByb2ZpbGUo
Qnl0ZWNvZGVJbmRleCk7CisgICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGVGb3JC
eXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwor
ICAgIHVuc2lnbmVkIHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVJbmRleChjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIAotICAgIGJvb2wgbGlrZWx5VG9U
YWtlU2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQorICAgIGJvb2wgbGlrZWx5VG9UYWtlU2xv
d0Nhc2UoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogICAgIHsKICAgICAgICAgaWYgKCFo
YXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHVuc2lnbmVk
IHZhbHVlID0gcmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZU9mZnNldChsb2NrZXIsIGJ5
dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVD
b3VudEZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCBieXRlY29kZUluZGV4KTsKICAgICAgICAgcmV0
dXJuIHZhbHVlID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50KCk7
CiAgICAgfQogCi0gICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQp
CisgICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgp
CiAgICAgewogICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9s
b2NrKTsKLSAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5
dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICB1bnNpZ25lZCB2
YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVJbmRleChsb2NrZXIsIGJ5dGVj
b2RlSW5kZXgpOwogICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6Y291bGRUYWtlU2xv
d0Nhc2VNaW5pbXVtQ291bnQoKTsKICAgICB9CiAKQEAgLTM4Miw2ICszODIsMTEgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gcmV0dXJuQWRkcmVzcyAtIGluc3RydWN0aW9uc0JlZ2luOwogICAg
IH0KIAorICAgIGlubGluZSBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoY29uc3QgSW5zdHJ1
Y3Rpb24qIHJldHVybkFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gQnl0ZWNvZGVJbmRl
eChieXRlY29kZU9mZnNldChyZXR1cm5BZGRyZXNzKSk7CisgICAgfQorCiAgICAgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT5pbnN0cnVjdGlvbnMoKTsgfQogCiAgICAgc2l6ZV90IHByZWRpY3RlZE1hY2hpbmVDb2Rl
U2l6ZSgpOwpAQCAtNDgzLDggKzQ4OCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKLSAgICBWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KGludCBieXRlY29kZU9mZnNldCk7Ci0gICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxl
UHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGlu
dCBieXRlY29kZU9mZnNldCk7CisgICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JCeXRl
Y29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOworICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmls
ZVByZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5
dGVjb2RlSW5kZXgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JF
YWNoVmFsdWVQcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiB2b2lkIGZvckVhY2hBcnJheVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwpAQCAtNDky
LDEzICs0OTcsMTMgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZv
aWQgZm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMTEludENhbGxMaW5rSW5mbyhj
b25zdCBGdW5jdG9yJik7CiAKLSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQpOworICAg
IEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4
KTsKICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZUZvclBDKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAKLSAgICBib29sIGNvdWxkVGFrZVNwZWNpYWxGYXN0Q2FzZShJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBib29sIGNvdWxkVGFrZVNwZWNpYWxBcml0
aEZhc3RDYXNlKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQpOwogCi0gICAgQXJyYXlQcm9m
aWxlKiBnZXRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQpOwotICAgIEFycmF5UHJvZmlsZSogZ2V0QXJyYXlQcm9maWxlKHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBBcnJheVByb2ZpbGUqIGdldEFycmF5UHJvZmlsZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKKyAgICBBcnJheVByb2Zp
bGUqIGdldEFycmF5UHJvZmlsZShCeXRlY29kZUluZGV4KTsKIAogICAgIC8vIEV4Y2VwdGlvbiBo
YW5kbGluZyBzdXBwb3J0CiAKQEAgLTg3Niw3ICs4ODEsNyBAQCBwdWJsaWM6CiAKICAgICBEaXNw
b3NhYmxlQ2FsbFNpdGVJbmRleCBuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2Fs
bFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKTsKIAotICAgIHZvaWQgZW5zdXJlQ2F0Y2hMaXZl
bmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZU9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0
IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB2b2lkIGVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVk
Rm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKIAogICAgIGJvb2wgaGFzVGFpbENhbGxz
KCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc1RhaWxDYWxscygpOyB9CiAKQEAg
LTk0Myw3ICs5NDgsNyBAQCBwcml2YXRlOgogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1
bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVBy
b2ZpbGVzOyB9CiAgICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJl
dHVybiBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZOb25Bcmd1bWVu
dFZhbHVlUHJvZmlsZXMoKTsgfQotICAgIFZhbHVlUHJvZmlsZSogdHJ5R2V0VmFsdWVQcm9maWxl
Rm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBWYWx1ZVByb2ZpbGUq
IHRyeUdldFZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAKICAg
ICBTZWNvbmRzIHRpbWVTaW5jZUNyZWF0aW9uKCkKICAgICB7CkBAIC05NjAsNyArOTY1LDcgQEAg
cHJpdmF0ZToKICAgICB9CiAKICAgICB2b2lkIGluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9y
Q29udHJvbEZsb3dQcm9maWxlcigpOwotICAgIHZvaWQgZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29t
cHV0ZWRGb3JCeXRlY29kZU9mZnNldFNsb3coY29uc3QgT3BDYXRjaCYsIEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQpOworICAgIHZvaWQgZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JC
eXRlY29kZUluZGV4U2xvdyhjb25zdCBPcENhdGNoJiwgQnl0ZWNvZGVJbmRleCk7CiAKICAgICBp
bnQgbV9udW1DYWxsZWVMb2NhbHM7CiAgICAgaW50IG1fbnVtVmFyczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAppbmRleCAyZGU4MDQ4MjFjNzgxYmZm
ODEwM2Q0NWQwN2JkZmE2YzdlZWUwM2NiLi44M2ZiYjkwZjQwMjEzZmVlMDRjYmYxMWIwOTFiNDMy
Mzc4YmE0Mzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZU9yaWdpbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmln
aW4uY3BwCkBAIC05MSw3ICs5MSw3IEBAIHVuc2lnbmVkIENvZGVPcmlnaW46OmFwcHJveGltYXRl
SGFzaChJbmxpbmVDYWxsRnJhbWUqIHRlcm1pbmFsKSBjb25zdAogICAgIHVuc2lnbmVkIHJlc3Vs
dCA9IDI7CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gKnRoaXM7CiAgICAgZm9yICg7Oykg
ewotICAgICAgICByZXN1bHQgKz0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgICAg
IHJlc3VsdCArPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5hc0JpdHMoKTsKIAogICAgICAg
ICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpOwog
CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBDb2RlT3JpZ2luOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIoY2xvc3VyZSkgIik7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIG91dC5wcmludCgiYmMjIiwgc3RhY2tbaV0uYnl0ZWNv
ZGVJbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50KHN0YWNrW2ldLmJ5dGVjb2RlSW5kZXgoKSk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZU9yaWdpbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4u
aAppbmRleCBkNWYzMGMyYzkwMzY3MTY5ZGM1ODc1NzJjYzJlOWIzMjAyOWU5NDA2Li4zNDE0ZDRm
MDFkZjRkNzhiNzRjNGMwY2M1Yjg5Yzg1Y2VhYjgwYTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKQEAgLTI1LDYgKzI1LDggQEAKIAogI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlICJCeXRlY29kZUluZGV4LmgiCisKICNpbmNsdWRlIDxsaW1pdHMuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpA
QCAtNDEsMjUgKzQzLDIzIEBAIGNsYXNzIENvZGVPcmlnaW4gewogcHVibGljOgogICAgIENvZGVP
cmlnaW4oKQogI2lmIENQVShBRERSRVNTNjQpCi0gICAgICAgIDogbV9jb21wb3NpdGVWYWx1ZShi
dWlsZENvbXBvc2l0ZVZhbHVlKG51bGxwdHIsIHNfaW52YWxpZEJ5dGVjb2RlSW5kZXgpKQorICAg
ICAgICA6IG1fY29tcG9zaXRlVmFsdWUoYnVpbGRDb21wb3NpdGVWYWx1ZShudWxscHRyLCBCeXRl
Y29kZUluZGV4KCkpKQogI2Vsc2UKLSAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoc19pbnZhbGlk
Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgLCBtX2lubGluZUNhbGxGcmFtZShudWxscHRyKQorICAg
ICAgICA6IG1faW5saW5lQ2FsbEZyYW1lKG51bGxwdHIpCiAjZW5kaWYKICAgICB7CiAgICAgfQot
ICAgIAorCiAgICAgQ29kZU9yaWdpbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCiAj
aWYgQ1BVKEFERFJFU1M2NCkKLSAgICAgICAgOiBtX2NvbXBvc2l0ZVZhbHVlKGJ1aWxkQ29tcG9z
aXRlVmFsdWUoZGVsZXRlZE1hcmtlcigpLCBzX2ludmFsaWRCeXRlY29kZUluZGV4KSkKKyAgICAg
ICAgOiBtX2NvbXBvc2l0ZVZhbHVlKGJ1aWxkQ29tcG9zaXRlVmFsdWUoZGVsZXRlZE1hcmtlcigp
LCBCeXRlY29kZUluZGV4KCkpKQogI2Vsc2UKLSAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoc19p
bnZhbGlkQnl0ZWNvZGVJbmRleCkKLSAgICAgICAgLCBtX2lubGluZUNhbGxGcmFtZShkZWxldGVk
TWFya2VyKCkpCisgICAgICAgIDogbV9pbmxpbmVDYWxsRnJhbWUoZGVsZXRlZE1hcmtlcigpKQog
I2VuZGlmCiAgICAgewogICAgIH0KICAgICAKLSAgICBleHBsaWNpdCBDb2RlT3JpZ2luKHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbnVs
bHB0cikKKyAgICBleHBsaWNpdCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBudWxscHRyKQogI2lmIENQVShB
RERSRVNTNjQpCiAgICAgICAgIDogbV9jb21wb3NpdGVWYWx1ZShidWlsZENvbXBvc2l0ZVZhbHVl
KGlubGluZUNhbGxGcmFtZSwgYnl0ZWNvZGVJbmRleCkpCiAjZWxzZQpAQCAtNjcsNyArNjcsNyBA
QCBwdWJsaWM6CiAgICAgICAgICwgbV9pbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKQog
I2VuZGlmCiAgICAgewotICAgICAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCA8IHNfaW52YWxpZEJ5
dGVjb2RlSW5kZXgpOworICAgICAgICBBU1NFUlQoISFieXRlY29kZUluZGV4KTsKICNpZiBDUFUo
QUREUkVTUzY0KQogICAgICAgICBBU1NFUlQoIShiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihpbmxp
bmVDYWxsRnJhbWUpICYgfnNfbWFza0NvbXBvc2l0ZVZhbHVlRm9yUG9pbnRlcikpOwogI2VuZGlm
CkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogI2lmIENQVShBRERSRVNTNjQpCiAgICAgICAg
IHJldHVybiAhKG1fY29tcG9zaXRlVmFsdWUgJiBzX21hc2tJc0J5dGVjb2RlSW5kZXhJbnZhbGlk
KTsKICNlbHNlCi0gICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXggIT0gc19pbnZhbGlkQnl0
ZWNvZGVJbmRleDsKKyAgICAgICAgcmV0dXJuICEhbV9ieXRlY29kZUluZGV4OwogI2VuZGlmCiAg
ICAgfQogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1NldCgp
OyB9CkBAIC0xMzQsNyArMTM0LDcgQEAgcHVibGljOgogI2lmIENQVShBRERSRVNTNjQpCiAgICAg
ICAgIHJldHVybiAhaXNTZXQoKSAmJiAobV9jb21wb3NpdGVWYWx1ZSAmIHNfbWFza0NvbXBvc2l0
ZVZhbHVlRm9yUG9pbnRlcik7CiAjZWxzZQotICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4
ID09IHNfaW52YWxpZEJ5dGVjb2RlSW5kZXggJiYgISFtX2lubGluZUNhbGxGcmFtZTsKKyAgICAg
ICAgcmV0dXJuICEhbV9ieXRlY29kZUluZGV4ICYmICEhbV9pbmxpbmVDYWxsRnJhbWU7CiAjZW5k
aWYKICAgICB9CiAgICAgCkBAIC0xNjcsMTQgKzE2NywxNCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKIAotICAgIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgoKSBjb25zdAorICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCgpIGNvbnN0CiAgICAgewogI2lmIENQVShBRERSRVNTNjQpCiAgICAgICAgIGlmICghaXNTZXQo
KSkKLSAgICAgICAgICAgIHJldHVybiBzX2ludmFsaWRCeXRlY29kZUluZGV4OworICAgICAgICAg
ICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKGlzT3V0T2ZM
aW5lKCkpKQogICAgICAgICAgICAgcmV0dXJuIG91dE9mTGluZUNvZGVPcmlnaW4oKS0+Ynl0ZWNv
ZGVJbmRleDsKLSAgICAgICAgcmV0dXJuIG1fY29tcG9zaXRlVmFsdWUgPj4gKDY0IC0gc19mcmVl
Qml0c0F0VG9wKTsKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRzKG1fY29t
cG9zaXRlVmFsdWUgPj4gKDY0IC0gc19mcmVlQml0c0F0VG9wKSk7CiAjZWxzZQogICAgICAgICBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4OwogI2VuZGlmCkBAIC0xOTIsOCArMTkyLDYgQEAgcHVibGlj
OgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfaW52
YWxpZEJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWDsKLQogI2lmIENQVShBRERSRVNTNjQpCiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc19tYXNrSXNPdXRPZkxpbmUgPSAxOwogICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHNfbWFza0lzQnl0ZWNvZGVJbmRleEludmFsaWQgPSAy
OwpAQCAtMjAyLDkgKzIwMCw5IEBAIHByaXZhdGU6CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogICAgIHB1YmxpYzoKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWU7Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleDsKICAgICAgICAgCi0gICAgICAgIE91dE9mTGluZUNvZGVPcmln
aW4oSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCisgICAgICAgIE91dE9mTGluZUNvZGVPcmlnaW4oSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgIDogaW5s
aW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICwgYnl0ZWNvZGVJbmRl
eChieXRlY29kZUluZGV4KQogICAgICAgICB7CkBAIC0yMzUsMTcgKzIzMywxNyBAQCBwcml2YXRl
OgogI2lmIENQVShBRERSRVNTNjQpCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX2Zy
ZWVCaXRzQXRUb3AgPSA2NCAtIFdURl9DUFVfRUZGRUNUSVZFX0FERFJFU1NfV0lEVEg7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc19tYXNrQ29tcG9zaXRlVmFsdWVGb3JQb2ludGVy
ID0gKCgxVUxMIDw8IFdURl9DUFVfRUZGRUNUSVZFX0FERFJFU1NfV0lEVEgpIC0gMSkgJiB+KDhV
TEwgLSAxKTsKLSAgICBzdGF0aWMgdWludHB0cl90IGJ1aWxkQ29tcG9zaXRlVmFsdWUoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAg
c3RhdGljIHVpbnRwdHJfdCBidWlsZENvbXBvc2l0ZVZhbHVlKElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAg
ICBpZiAoYnl0ZWNvZGVJbmRleCA9PSBzX2ludmFsaWRCeXRlY29kZUluZGV4KQorICAgICAgICBp
ZiAoIWJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oaW5saW5lQ2FsbEZyYW1lKSB8IHNfbWFza0lzQnl0ZWNvZGVJbmRleEludmFsaWQ7CiAK
LSAgICAgICAgaWYgKFVOTElLRUxZKGJ5dGVjb2RlSW5kZXggPj0gMSA8PCBzX2ZyZWVCaXRzQXRU
b3ApKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShieXRlY29kZUluZGV4LmFzQml0cygpID49IDEg
PDwgc19mcmVlQml0c0F0VG9wKSkgewogICAgICAgICAgICAgYXV0byogb3V0T2ZMaW5lID0gbmV3
IE91dE9mTGluZUNvZGVPcmlnaW4oaW5saW5lQ2FsbEZyYW1lLCBieXRlY29kZUluZGV4KTsKICAg
ICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihvdXRPZkxpbmUpIHwgc19t
YXNrSXNPdXRPZkxpbmU7CiAgICAgICAgIH0KIAotICAgICAgICB1aW50cHRyX3QgZW5jb2RlZEJ5
dGVjb2RlSW5kZXggPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlSW5kZXgpIDw8ICg2
NCAtIHNfZnJlZUJpdHNBdFRvcCk7CisgICAgICAgIHVpbnRwdHJfdCBlbmNvZGVkQnl0ZWNvZGVJ
bmRleCA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSkgPDwg
KDY0IC0gc19mcmVlQml0c0F0VG9wKTsKICAgICAgICAgQVNTRVJUKCEoZW5jb2RlZEJ5dGVjb2Rl
SW5kZXggJiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihpbmxpbmVDYWxsRnJhbWUpKSk7CiAgICAg
ICAgIHJldHVybiBlbmNvZGVkQnl0ZWNvZGVJbmRleCB8IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KGlubGluZUNhbGxGcmFtZSk7CiAgICAgfQpAQCAtMjU4LDE0ICsyNTYsMTQgQEAgcHJpdmF0ZToK
ICAgICAvLyBGaW5hbGx5IHRoZSBsYXN0IHNfZnJlZUJpdHNBdFRvcCBhcmUgdGhlIGJ5dGVjb2Rl
SW5kZXggaWYgaXQgaXMgaW5saW5lCiAgICAgdWludHB0cl90IG1fY29tcG9zaXRlVmFsdWU7CiAj
ZWxzZQotICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAgICBCeXRlY29kZUluZGV4IG1f
Ynl0ZWNvZGVJbmRleDsKICAgICBJbmxpbmVDYWxsRnJhbWUqIG1faW5saW5lQ2FsbEZyYW1lOwog
I2VuZGlmCiB9OwogCiBpbmxpbmUgdW5zaWduZWQgQ29kZU9yaWdpbjo6aGFzaCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIFdURjo6SW50SGFzaDx1bnNpZ25lZD46Omhhc2goYnl0ZWNvZGVJbmRleCgp
KSArCisgICAgcmV0dXJuIFdURjo6SW50SGFzaDx1bnNpZ25lZD46Omhhc2goYnl0ZWNvZGVJbmRl
eCgpLmFzQml0cygpKSArCiAgICAgICAgIFdURjo6UHRySGFzaDxJbmxpbmVDYWxsRnJhbWUqPjo6
aGFzaChpbmxpbmVDYWxsRnJhbWUoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCmluZGV4IGIxYTAxZmZhNGQ5MzQ4ZmVjYjI0
Yzk2ODhiYzgwMDUyZjkzODg2YTcuLmE4MmY5MmRmZDU5ZTIyZmUyNzEyYmZhMTVlZGE2ZmZkZGEw
YWM1NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0
UHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQ
cm9maWxlLmNwcApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKIHZvaWQgRnJlcXVlbnRFeGl0U2l0ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogewotICAgIG91dC5wcmludCgiYmMjIiwgbV9ieXRlY29kZU9mZnNldCwgIjogIiwgbV9raW5k
LCAiLyIsIG1faml0VHlwZSwgIi8iLCBtX2lubGluZUtpbmQpOworICAgIG91dC5wcmludChtX2J5
dGVjb2RlSW5kZXgsICI6ICIsIG1fa2luZCwgIi8iLCBtX2ppdFR5cGUsICIvIiwgbV9pbmxpbmVL
aW5kKTsKIH0KIAogRXhpdFByb2ZpbGU6OkV4aXRQcm9maWxlKCkgeyB9CkBAIC03NSw3ICs3NSw3
IEBAIGJvb2wgRXhpdFByb2ZpbGU6OmFkZChDb2RlQmxvY2sqIG93bmVyLCBjb25zdCBGcmVxdWVu
dEV4aXRTaXRlJiBzaXRlKQogICAgIHJldHVybiB0cnVlOwogfQogCi1WZWN0b3I8RnJlcXVlbnRF
eGl0U2l0ZT4gRXhpdFByb2ZpbGU6OmV4aXRTaXRlc0Zvcih1bnNpZ25lZCBieXRlY29kZUluZGV4
KQorVmVjdG9yPEZyZXF1ZW50RXhpdFNpdGU+IEV4aXRQcm9maWxlOjpleGl0U2l0ZXNGb3IoQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIFZlY3RvcjxGcmVxdWVudEV4aXRTaXRl
PiByZXN1bHQ7CiAgICAgCkBAIC04Myw3ICs4Myw3IEBAIFZlY3RvcjxGcmVxdWVudEV4aXRTaXRl
PiBFeGl0UHJvZmlsZTo6ZXhpdFNpdGVzRm9yKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
ZnJlcXVlbnRFeGl0U2l0ZXMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2ZyZXF1ZW50
RXhpdFNpdGVzLT5hdChpKS5ieXRlY29kZU9mZnNldCgpID09IGJ5dGVjb2RlSW5kZXgpCisgICAg
ICAgIGlmIChtX2ZyZXF1ZW50RXhpdFNpdGVzLT5hdChpKS5ieXRlY29kZUluZGV4KCkgPT0gYnl0
ZWNvZGVJbmRleCkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9mcmVxdWVudEV4aXRTaXRl
cy0+YXQoaSkpOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0RGR0V4aXRQcm9maWxlLmgKaW5kZXggN2Y2MDE5ZjVhOTNkNzNkMThiOGIxNjBlOTc2MDdh
NmYxNjljMWFjOS4uZjgwNzdiY2M2NDA5YzliYzg1NTFkMGUzZDZhNjMwMDBiZmJkYjNlYSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmgKQEAg
LTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogY2xhc3MgRnJl
cXVlbnRFeGl0U2l0ZSB7CiBwdWJsaWM6CiAgICAgRnJlcXVlbnRFeGl0U2l0ZSgpCi0gICAgICAg
IDogbV9ieXRlY29kZU9mZnNldCgwKSAvLyAwID0gZW1wdHkgdmFsdWUKKyAgICAgICAgOiBtX2J5
dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgLCBtX2tpbmQoRXhpdEtpbmRV
bnNldCkKICAgICAgICAgLCBtX2ppdFR5cGUoRXhpdEZyb21Bbnl0aGluZykKICAgICAgICAgLCBt
X2lubGluZUtpbmQoRXhpdEZyb21BbnlJbmxpbmVLaW5kKQpAQCAtNDcsMTUgKzQ3LDE1IEBAIHB1
YmxpYzoKICAgICB9CiAgICAgCiAgICAgRnJlcXVlbnRFeGl0U2l0ZShXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgxKSAvLyAxID0gZGVs
ZXRlZCB2YWx1ZQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0
ZWRWYWx1ZSkKICAgICAgICAgLCBtX2tpbmQoRXhpdEtpbmRVbnNldCkKICAgICAgICAgLCBtX2pp
dFR5cGUoRXhpdEZyb21Bbnl0aGluZykKICAgICAgICAgLCBtX2lubGluZUtpbmQoRXhpdEZyb21B
bnlJbmxpbmVLaW5kKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgZXhwbGljaXQgRnJlcXVlbnRF
eGl0U2l0ZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRXhpdEtpbmQga2luZCwgRXhpdGluZ0pJ
VFR5cGUgaml0VHlwZSA9IEV4aXRGcm9tQW55dGhpbmcsIEV4aXRpbmdJbmxpbmVLaW5kIGlubGlu
ZUtpbmQgPSBFeGl0RnJvbUFueUlubGluZUtpbmQpCi0gICAgICAgIDogbV9ieXRlY29kZU9mZnNl
dChieXRlY29kZU9mZnNldCkKKyAgICBleHBsaWNpdCBGcmVxdWVudEV4aXRTaXRlKEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCwgRXhpdEtpbmQga2luZCwgRXhpdGluZ0pJVFR5cGUgaml0VHlw
ZSA9IEV4aXRGcm9tQW55dGhpbmcsIEV4aXRpbmdJbmxpbmVLaW5kIGlubGluZUtpbmQgPSBFeGl0
RnJvbUFueUlubGluZUtpbmQpCisgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5k
ZXgpCiAgICAgICAgICwgbV9raW5kKGtpbmQpCiAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUp
CiAgICAgICAgICwgbV9pbmxpbmVLaW5kKGlubGluZUtpbmQpCkBAIC02MywxNCArNjMsMTQgQEAg
cHVibGljOgogICAgICAgICBpZiAobV9raW5kID09IEFyZ3VtZW50c0VzY2FwZWQpIHsKICAgICAg
ICAgICAgIC8vIENvdW50IHRoaXMgb25lIGdsb2JhbGx5LiBJdCBkb2Vzbid0IG1hdHRlciB3aGVy
ZSBpbiB0aGUgY29kZSBibG9jayB0aGUgYXJndW1lbnRzIGV4Y2FwZWQ7CiAgICAgICAgICAgICAv
LyB0aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHBhcnRp
Y3VsYXIgaW5zdHJ1Y3Rpb24uCi0gICAgICAgICAgICBtX2J5dGVjb2RlT2Zmc2V0ID0gMDsKKyAg
ICAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCiAgICAgLy8gVXNlIHRoaXMgY29uc3RydWN0b3IgaWYgeW91IHdpc2ggZm9y
IHRoZSBleGl0IHNpdGUgdG8gYmUgY291bnRlZCBnbG9iYWxseSB3aXRoaW4gaXRzCiAgICAgLy8g
Y29kZSBibG9jay4KICAgICBleHBsaWNpdCBGcmVxdWVudEV4aXRTaXRlKEV4aXRLaW5kIGtpbmQs
IEV4aXRpbmdKSVRUeXBlIGppdFR5cGUgPSBFeGl0RnJvbUFueXRoaW5nLCBFeGl0aW5nSW5saW5l
S2luZCBpbmxpbmVLaW5kID0gRXhpdEZyb21BbnlJbmxpbmVLaW5kKQotICAgICAgICA6IG1fYnl0
ZWNvZGVPZmZzZXQoMCkKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCgw
KSkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlwZSkK
ICAgICAgICAgLCBtX2lubGluZUtpbmQoaW5saW5lS2luZCkKQEAgLTg0LDcgKzg0LDcgQEAgcHVi
bGljOgogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBv
dGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0ID09IG90
aGVyLm1fYnl0ZWNvZGVPZmZzZXQKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleCA9PSBv
dGhlci5tX2J5dGVjb2RlSW5kZXgKICAgICAgICAgICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tp
bmQKICAgICAgICAgICAgICYmIG1faml0VHlwZSA9PSBvdGhlci5tX2ppdFR5cGUKICAgICAgICAg
ICAgICYmIG1faW5saW5lS2luZCA9PSBvdGhlci5tX2lubGluZUtpbmQ7CkBAIC05Miw3ICs5Miw3
IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHN1YnN1bWVzKGNvbnN0IEZyZXF1ZW50RXhpdFNp
dGUmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQgIT0g
b3RoZXIubV9ieXRlY29kZU9mZnNldCkKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCAhPSBv
dGhlci5tX2J5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IGlmIChtX2tpbmQgIT0gb3RoZXIubV9raW5kKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTA3LDEwICsxMDcsMTAgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2J5dGVjb2RlT2Zmc2V0
KSArIG1fa2luZCArIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2ppdFR5cGUpICogNyArIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX2lubGluZUtpbmQpICogMTE7CisgICAgICAgIHJldHVybiBtX2J5
dGVjb2RlSW5kZXguaGFzaCgpICsgbV9raW5kICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1faml0
VHlwZSkgKiA3ICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1faW5saW5lS2luZCkgKiAxMTsKICAg
ICB9CiAgICAgCi0gICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X2J5dGVjb2RlT2Zmc2V0OyB9CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CiAgICAgRXhpdEtpbmQga2luZCgpIGNvbnN0
IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIEV4aXRpbmdKSVRUeXBlIGppdFR5cGUoKSBjb25zdCB7
IHJldHVybiBtX2ppdFR5cGU7IH0KICAgICBFeGl0aW5nSW5saW5lS2luZCBpbmxpbmVLaW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmxpbmVLaW5kOyB9CkBAIC0xMzEsMTMgKzEzMSwxMyBAQCBwdWJs
aWM6CiAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2tpbmQgPT0gRXhpdEtpbmRVbnNldCAmJiBtX2J5dGVjb2RlT2Zmc2V0
OworICAgICAgICByZXR1cm4gbV9raW5kID09IEV4aXRLaW5kVW5zZXQgJiYgbV9ieXRlY29kZUlu
ZGV4LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX2J5
dGVjb2RlT2Zmc2V0OworICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwogICAgIEV4
aXRLaW5kIG1fa2luZDsKICAgICBFeGl0aW5nSklUVHlwZSBtX2ppdFR5cGU7CiAgICAgRXhpdGlu
Z0lubGluZUtpbmQgbV9pbmxpbmVLaW5kOwpAQCAtMTgzLDcgKzE4Myw3IEBAIHB1YmxpYzoKICAg
ICAKICAgICAvLyBHZXQgdGhlIGZyZXF1ZW50IGV4aXQgc2l0ZXMgZm9yIGEgYnl0ZWNvZGUgaW5k
ZXguIFRoaXMgaXMgTyhuKSwgYW5kIGlzCiAgICAgLy8gbWVhbnQgdG8gb25seSBiZSB1c2VkIGZy
b20gZGVidWdnaW5nL3Byb2ZpbGluZyBjb2RlLgotICAgIFZlY3RvcjxGcmVxdWVudEV4aXRTaXRl
PiBleGl0U2l0ZXNGb3IodW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgVmVjdG9yPEZyZXF1
ZW50RXhpdFNpdGU+IGV4aXRTaXRlc0ZvcihCeXRlY29kZUluZGV4KTsKICAgICAKICAgICAvLyBU
aGlzIGlzIE8obikgYW5kIHNob3VsZCBiZSBjYWxsZWQgb24gbGVzcy1mcmVxdWVudGx5IGV4ZWN1
dGVkIGNvZGUgcGF0aHMKICAgICAvLyBpbiB0aGUgY29tcGlsZXIuIEl0IHNob3VsZCBiZSBzdHJp
Y3RseSBjaGVhcGVyIHRoYW4gYnVpbGRpbmcgYQpAQCAtMjIyLDcgKzIyMiw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGhhc0V4aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUoa2luZCkpOwogICAg
IH0KICAgICAKLSAgICBib29sIGhhc0V4aXRTaXRlKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEV4
aXRLaW5kIGtpbmQpIGNvbnN0CisgICAgYm9vbCBoYXNFeGl0U2l0ZShCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgsIEV4aXRLaW5kIGtpbmQpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
aGFzRXhpdFNpdGUoRnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBraW5kKSk7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkU291
cmNlRHVtcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3Vy
Y2VEdW1wLmNwcAppbmRleCBhYmE4NDk0ZWVmZDBmOWRmNWQzMDkzYzIxMmYzMmNlMDgxOWJkMTU2
Li5iZjIyMTAyNzVlNTdmYzg3ZjUzNjQyNDAwZTJjZTc0MzQyZjcwNGM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmNwcApA
QCAtMzgsNyArMzgsNyBAQCBEZWZlcnJlZFNvdXJjZUR1bXA6OkRlZmVycmVkU291cmNlRHVtcChD
b2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKIH0KIAotRGVmZXJyZWRTb3VyY2VEdW1wOjpEZWZlcnJl
ZFNvdXJjZUR1bXAoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcm9vdENvZGVCbG9j
aywgSklUVHlwZSByb290SklUVHlwZSwgdW5zaWduZWQgY2FsbGVyQnl0ZWNvZGVJbmRleCkKK0Rl
ZmVycmVkU291cmNlRHVtcDo6RGVmZXJyZWRTb3VyY2VEdW1wKENvZGVCbG9jayogY29kZUJsb2Nr
LCBDb2RlQmxvY2sqIHJvb3RDb2RlQmxvY2ssIEpJVFR5cGUgcm9vdEpJVFR5cGUsIEJ5dGVjb2Rl
SW5kZXggY2FsbGVyQnl0ZWNvZGVJbmRleCkKICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jay0+
dm0oKSwgY29kZUJsb2NrKQogICAgICwgbV9yb290Q29kZUJsb2NrKGNvZGVCbG9jay0+dm0oKSwg
cm9vdENvZGVCbG9jaykKICAgICAsIG1fcm9vdEpJVFR5cGUocm9vdEpJVFR5cGUpCkBAIC01Niw3
ICs1Niw3IEBAIHZvaWQgRGVmZXJyZWRTb3VyY2VEdW1wOjpkdW1wKCkKICAgICBkYXRhTG9nKCpt
X2NvZGVCbG9jayk7CiAKICAgICBpZiAoaXNJbmxpbmVkRnJhbWUpCi0gICAgICAgIGRhdGFMb2co
IiBhdCAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZSgqbV9yb290Q29kZUJsb2NrLCBtX3Jvb3RKSVRU
eXBlKSwgIiAiLCAiYmMjIiwgbV9jYWxsZXJCeXRlY29kZUluZGV4KTsKKyAgICAgICAgZGF0YUxv
ZygiIGF0ICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKCptX3Jvb3RDb2RlQmxvY2ssIG1fcm9vdEpJ
VFR5cGUpLCAiICIsIG1fY2FsbGVyQnl0ZWNvZGVJbmRleCk7CiAKICAgICBkYXRhTG9nKCJcbicn
JyIpOwogICAgIG1fY29kZUJsb2NrLT5kdW1wU291cmNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmgKaW5kZXggYjVhN2JmMmNm
MmRiNmM3YzE5YzhlZTRmYjUwYmJkMDE4YjM0MjEwYS4uZThkMmNhOGQ2ODhjN2YwODMwYjY5MjI3
NzQ0MDRhODRkYzQwMWI3NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0RlZmVycmVkU291cmNlRHVtcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EZWZlcnJlZFNvdXJjZUR1bXAuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBEZWZlcnJl
ZFNvdXJjZUR1bXAgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAg
IERlZmVycmVkU291cmNlRHVtcChDb2RlQmxvY2sqKTsKLSAgICBEZWZlcnJlZFNvdXJjZUR1bXAo
Q29kZUJsb2NrKiwgQ29kZUJsb2NrKiByb290Q29kZUJsb2NrLCBKSVRUeXBlIHJvb3RKSVRUeXBl
LCB1bnNpZ25lZCBjYWxsZXJCeXRlY29kZUluZGV4KTsKKyAgICBEZWZlcnJlZFNvdXJjZUR1bXAo
Q29kZUJsb2NrKiwgQ29kZUJsb2NrKiByb290Q29kZUJsb2NrLCBKSVRUeXBlIHJvb3RKSVRUeXBl
LCBCeXRlY29kZUluZGV4IGNhbGxlckJ5dGVjb2RlSW5kZXgpOwogCiAgICAgdm9pZCBkdW1wKCk7
CiAKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJpdmF0ZToKICAgICBTdHJvbmc8Q29kZUJsb2NrPiBtX2Nv
ZGVCbG9jazsKICAgICBTdHJvbmc8Q29kZUJsb2NrPiBtX3Jvb3RDb2RlQmxvY2s7CiAgICAgSklU
VHlwZSBtX3Jvb3RKSVRUeXBlOwotICAgIHVuc2lnbmVkIG1fY2FsbGVyQnl0ZWNvZGVJbmRleCB7
IFVJTlRfTUFYIH07CisgICAgQnl0ZWNvZGVJbmRleCBtX2NhbGxlckJ5dGVjb2RlSW5kZXg7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKaW5kZXggMDczY2UyNzU3YmJhOWMyYTBh
YjZjMTIwZjRkYmEwZGJiZjcxOWJmOC4uOWE4ODQzN2ViM2ZiZjM4MzBhZTcxMzY0NWQ2Y2ZkMzc5
M2U3ZTEyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxC
eXRlY29kZUxpdmVuZXNzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1
bGxCeXRlY29kZUxpdmVuZXNzLmgKQEAgLTMxLDE3ICszMSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogCi10eXBlZGVmIEhhc2hNYXA8dW5z
aWduZWQsIEZhc3RCaXRWZWN0b3IsIFdURjo6SW50SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWdu
ZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBCeXRlY29kZVRvQml0bWFwTWFwOwor
dHlwZWRlZiBIYXNoTWFwPEJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3I+IEJ5dGVjb2RlVG9C
aXRtYXBNYXA7CiAKIGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBnZXRMaXZl
bmVzcyh1bnNpZ25lZCBieXRlY29kZUluZGV4KSBjb25zdAorICAgIGNvbnN0IEZhc3RCaXRWZWN0
b3ImIGdldExpdmVuZXNzKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBtX21hcFtieXRlY29kZUluZGV4XTsKKyAgICAgICAgLy8gRklYTUU6
IFdoYXQgc2hvdWxkIHRoaXMgZG8gd2hlbiB3ZSBoYXZlIGNoZWNrcG9pbnRzPworICAgICAgICBy
ZXR1cm4gbV9tYXBbYnl0ZWNvZGVJbmRleC5vZmZzZXQoKV07CiAgICAgfQogICAgIAotICAgIGJv
b2wgb3BlcmFuZElzTGl2ZShpbnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29u
c3QKKyAgICBib29sIG9wZXJhbmRJc0xpdmUoaW50IG9wZXJhbmQsIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNM
aXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVu
ZXNzKGJ5dGVjb2RlSW5kZXgpLCBvcGVyYW5kKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKaW5kZXggYmVlYjBlZGNlMjk3MDk5
MWI0N2ExNzYwNGI1ZDJiYTRmMzZiN2RmYS4uNjIyYjNlNmQwYzZlNTAyMGFjMTBmOTQ2YzA2NTJj
NGI3OGFjZDA4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRTdGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmNwcApAQCAtNTIsMTEgKzUyLDExIEBAIGJvb2wgR2V0QnlJZFN0YXR1czo6YXBw
ZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCkKICAgICByZXR1cm4gYXBw
ZW5kSUNTdGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOwogfQogCi1HZXRCeUlkU3Rh
dHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorR2V0
QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQogewogICAgIFZNJiB2bSA9IHByb2ZpbGVkQmxvY2stPnZtKCk7CiAgICAgCi0gICAg
YXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVj
b2RlSW5kZXgpOworICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKIAogICAgIFN0cnVjdHVyZUlEIHN0
cnVjdHVyZUlEOwogICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKQEAgLTEw
Miw3ICsxMDIsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJ
bnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZAogICAgIHJldHVybiBHZXRCeUlk
U3RhdHVzKFNpbXBsZSwgZmFsc2UsIEdldEJ5SWRWYXJpYW50KFN0cnVjdHVyZVNldChzdHJ1Y3R1
cmUpLCBvZmZzZXQpKTsKIH0KIAotR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAmIG1hcCwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcgZGlkRXhpdCwg
Q2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQorR2V0QnlJZFN0
YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywg
SUNTdGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVE
YXRhIGNhbGxFeGl0U2l0ZURhdGEpCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihw
cm9maWxlZEJsb2NrLT5tX2xvY2spOwogCkBAIC0xMzAsNyArMTMwLDcgQEAgR2V0QnlJZFN0YXR1
cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNT
dGF0dXNNYXAmIG0KICNpZiBFTkFCTEUoREZHX0pJVCkKIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewotICAgIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsK
ICAgICBHZXRCeUlkU3RhdHVzIHJlc3VsdCA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAogICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxv
Y2ssIHN0dWJJbmZvLCB1aWQsCiAgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNp
dGVEYXRhKHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKTsKQEAgLTMwMyw3ICszMDMsNyBA
QCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsCiAgICAgSUNTdGF0dXND
b250ZXh0U3RhY2smIGljQ29udGV4dFN0YWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCiB7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IGNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9
IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0
ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVE
YXRhKHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwogICAgIEV4aXRGbGFnIGRpZEV4aXQg
PSBoYXNCYWRDYWNoZUV4aXRTaXRlKHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwogICAg
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgKaW5k
ZXggMzgzZDU4NjBkYjVkNDhiNjcxYjk2NDkxNmU1YTU4NDBhYWQxMWViNS4uMWNjMGUyMmJjOTU0
ZmJlZWQzZTE3MzNhMDMxNGM1YTUyMDUxZjZiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgog
ICAgICAgICBtX3ZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKICAgICB9CiAgICAgCi0gICAgc3Rh
dGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBJQ1N0YXR1c01hcCYsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnLCBD
YWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKKyAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBj
b21wdXRlRm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgRXhpdEZsYWcsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEp
OwogICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoY29uc3QgU3RydWN0dXJlU2V0
JiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgCiAgICAgc3RhdGljIEdldEJ5SWRTdGF0
dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNl
bGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGRmZ0NvbnRleHRTdGFjaywgQ29kZU9yaWdp
biwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CkBAIC0xNTMsNyArMTUzLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEpOwogI2VuZGlmCi0gICAgc3RhdGljIEdldEJ5
SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBj
b21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpOwogICAgIAogICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBHZXRCeUlkVmFy
aWFudCYpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lDU3RhdHVzVXRpbHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3Rh
dHVzVXRpbHMuY3BwCmluZGV4IGFkZDJlYjA0NDllMDg1OTY0OGQ5MmQ1NzBhODUzZWNlYWJjZmJi
YjEuLjhiZWVhYmEwZDVmYTZkMjg3ZmNkZTc3YWJiMzQ3ZTMyZjUwNzQ5MmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1c1V0aWxzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNVdGlscy5jcHAKQEAgLTMyLDcg
KzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUV4aXRGbGFnIGhhc0JhZENhY2hlRXhpdFNp
dGUoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorRXhp
dEZsYWcgaGFzQmFkQ2FjaGVFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBVbmxp
bmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSBwcm9maWxlZEJsb2NrLT51bmxpbmtl
ZENvZGVCbG9jaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lDU3RhdHVzVXRpbHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JQ1N0YXR1
c1V0aWxzLmgKaW5kZXggMDc3Y2JlMWFiYWRmNzJkOWVjYTUxZmZlMGEzNWZiM2M4NjkyYzc3Ni4u
OTgyMGFkOTlmNDVmOTRmZjZkMWM5Y2FmMzg0NmYwNzVhMjYzOTQ5NSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lDU3RhdHVzVXRpbHMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSUNTdGF0dXNVdGlscy5oCkBAIC03MSw3ICs3MSw3IEBA
IHZvaWQgZmlsdGVySUNTdGF0dXNWYXJpYW50cyhWYXJpYW50VmVjdG9yVHlwZSYgdmFyaWFudHMs
IGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0CiAgICAgICAgIH0pOwogfQogCi1FeGl0RmxhZyBoYXNC
YWRDYWNoZUV4aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCk7CitFeGl0RmxhZyBoYXNCYWRDYWNoZUV4aXRTaXRlKENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgQnl0ZWNvZGVJbmRleCk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCmluZGV4IGI0NTg4
YjU4NTI1OTNkOWVhNzMwZDQxZDFhYjljMzZlMTVmZjE0MmMuLjkyMzcwNTNmYmE2NjBlNDMyYzQ3
MGMxMGQxNjdlNjk1NGZkZjYyZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbkJ5SWRTdGF0dXMuY3BwCkBAIC00Myw3ICs0Myw3IEBAIGJvb2wgSW5CeUlkU3RhdHVz
OjphcHBlbmRWYXJpYW50KGNvbnN0IEluQnlJZFZhcmlhbnQmIHZhcmlhbnQpCiB9CiAKICNpZiBF
TkFCTEUoSklUKQotSW5CeUlkU3RhdHVzIEluQnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxv
Y2sqIHByb2ZpbGVkQmxvY2ssIElDU3RhdHVzTWFwJiBtYXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnIGRpZEV4aXQpCitJbkJ5SWRTdGF0
dXMgSW5CeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNT
dGF0dXNNYXAmIG1hcCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBFeGl0RmxhZyBkaWRFeGl0KQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKIApAQCAtNjQsNyArNjQsNyBAQCBJbkJ5SWRT
dGF0dXMgSW5CeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywg
SUNTdGF0dXNNYXAmIG1hcAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUluQnlJZFN0YXR1cyBJ
bkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1
c01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQorSW5CeUlkU3RhdHVzIEluQnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2ssIElDU3RhdHVzTWFwJiBtYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxl
ZEJsb2NrLCBtYXAsIGJ5dGVjb2RlSW5kZXgsIHVpZCwgaGFzQmFkQ2FjaGVFeGl0U2l0ZShwcm9m
aWxlZEJsb2NrLCBieXRlY29kZUluZGV4KSk7CiB9CkBAIC03Myw3ICs3Myw3IEBAIEluQnlJZFN0
YXR1cyBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCBJQ1N0YXR1c01hcCYgYmFzZWxpbmVNYXAsCiAgICAgSUNTdGF0dXNDb250ZXh0U3RhY2sm
IGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkKQogewotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKTsKICAgICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFkQ2FjaGVFeGl0U2l0
ZShwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KTsKICAgICAKICAgICBmb3IgKElDU3RhdHVz
Q29udGV4dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgewpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5oCmluZGV4IDhhZWI3NjBjNDg5YWEyNzRlMjkyNDA3
MDNmNmQyYjdlN2M4MTMyMjAuLmViNjVhZWEwNmJjNDhjMzgxYTkzNzhjMDA2NzUzNmVlMjg5ZDM0
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0
dXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgK
QEAgLTgwLDggKzgwLDggQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgSW5CeUlkU3RhdHVzIGNvbXB1dGVGb3Io
Q29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKTsKLSAgICBzdGF0aWMgSW5CeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29k
ZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBFeGl0RmxhZyk7CisgICAgc3RhdGljIEluQnlJZFN0YXR1cyBjb21wdXRl
Rm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCk7CisgICAgc3RhdGljIEluQnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9j
ayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwg
RXhpdEZsYWcpOwogICAgIHN0YXRpYyBJbkJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sq
IGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0
U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAKaW5kZXggZTUzNjFiNjFhMjVmMDBmNGMzMjliNzk3
MmE3MDgzMjJiMTA2ZWY4MS4uM2UzZTY1ZjU5YzUxMzAxZWIyZjQ0YjJkMjMxZWZjZWNhOTFlY2Nm
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxG
cmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxG
cmFtZS5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBJbmxpbmVDYWxsRnJhbWU6OmR1bXBJbkNv
bnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnMKICAgICBv
dXQucHJpbnQoYnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKCksICI6PCIsIFJhd1BvaW50ZXIoYmFz
ZWxpbmVDb2RlQmxvY2suZ2V0KCkpKTsKICAgICBpZiAoaXNTdHJpY3RNb2RlKCkpCiAgICAgICAg
IG91dC5wcmludCgiIChTdHJpY3RNb2RlKSIpOwotICAgIG91dC5wcmludCgiLCBiYyMiLCBkaXJl
Y3RDYWxsZXIuYnl0ZWNvZGVJbmRleCgpLCAiLCAiLCBzdGF0aWNfY2FzdDxLaW5kPihraW5kKSk7
CisgICAgb3V0LnByaW50KCIsICIsIGRpcmVjdENhbGxlci5ieXRlY29kZUluZGV4KCksICIsICIs
IHN0YXRpY19jYXN0PEtpbmQ+KGtpbmQpKTsKICAgICBpZiAoaXNDbG9zdXJlQ2FsbCkKICAgICAg
ICAgb3V0LnByaW50KCIsIGNsb3N1cmUgY2FsbCIpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAppbmRleCBkM2Jh
OWM5OGFiMGU5ODBmZWIyNzRiMDUyYTkwZjIwY2ZkNjdhZTg2Li5lZDAwZTY5MWRiNmUyZjRlYWQy
NGY5YWY3N2Q3ZTA5OTM5N2M4MTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwCkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgSW5z
dGFuY2VPZlN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBJbnN0YW5jZU9mVmFyaWFudCYgdmFy
aWFudCkKIH0KIAogSW5zdGFuY2VPZlN0YXR1cyBJbnN0YW5jZU9mU3RhdHVzOjpjb21wdXRlRm9y
KAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBJQ1N0YXR1c01hcCYgaW5mb01hcCwgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSUNTdGF0dXNNYXAm
IGluZm9NYXAsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5oCmluZGV4IGYwZTIwZDlh
ZWY1MTRiOTI4ZjUwYzUxOTIyMWFhNjRkZTYzYzllZDguLjY5MzMyNjBjMWZiNmQwYTYzODI4YjZm
YWI5NzBhZWY5ODJhZGViMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnN0YW5jZU9mU3RhdHVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luc3RhbmNlT2ZTdGF0dXMuaApAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBJ
bnN0YW5jZU9mU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4KTsKKyAgICBzdGF0aWMgSW5zdGFuY2VPZlN0YXR1cyBjb21wdXRl
Rm9yKENvZGVCbG9jayosIElDU3RhdHVzTWFwJiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAgICAgc3RhdGljIEluc3RhbmNlT2ZTdGF0dXMgY29tcHV0ZUZvclN0
dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFN0cnVjdHVyZVN0dWJJbmZvKik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJl
YW0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5o
CmluZGV4IDk5YjVhNWE5MDYwMjZjZWNlOGI0ZGQxMDA0NDkyODlkMWZmZTY0MzguLjVhNmVjYTY1
MTU0OTQ1ZTAxYWU2NmFiMTZmM2I4NzA4ODU5NmM5NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oCkBAIC03NywxMCArNzcsOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIEJhc2VSZWYgeyBtX2luc3RydWN0aW9ucywg
bV9pbmRleCArIHB0cigpLT5zaXplKCkgfTsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSBP
ZmZzZXQgb2Zmc2V0KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1faW5k
ZXg7Ci0gICAgICAgIH0KKyAgICAgICAgaW5saW5lIE9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4OyB9CisgICAgICAgIGlubGluZSBCeXRlY29kZUluZGV4IGluZGV4KCkgY29u
c3QgeyByZXR1cm4gQnl0ZWNvZGVJbmRleChvZmZzZXQoKSk7IH0KIAogICAgICAgICBib29sIGlz
VmFsaWQoKSBjb25zdAogICAgICAgICB7CkBAIC0xNTIsNiArMTUwLDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gaXRlcmF0b3IgeyBtX2luc3RydWN0aW9ucywgbV9pbnN0cnVjdGlvbnMuc2l6
ZSgpIH07CiAgICAgfQogCisgICAgaW5saW5lIGNvbnN0IFJlZiBhdChCeXRlY29kZUluZGV4IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleC5vZmZzZXQoKSk7IH0KICAgICBpbmxpbmUgY29u
c3QgUmVmIGF0KE9mZnNldCBvZmZzZXQpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQob2Zm
c2V0IDwgbV9pbnN0cnVjdGlvbnMuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKaW5kZXggMDFhM2Vl
NzQzNjYzZTUwYzE0MTY1ZmI2NGEzMWIyN2QxZDJjMmY1YS4uYmZiOTRiMzVmY2Q2MzlhNGExZjFk
MDBjOGFiYjE0NWViMWM2NGE1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKQEAgLTM5LDE5ICszOSwxOCBA
QCBjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOwogY2xhc3MgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVL
ZXkgewogcHVibGljOgogICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KCkKLSAgICAgICAg
OiBtX2J5dGVjb2RlT2Zmc2V0KDApIC8vIDAgPSBlbXB0eSB2YWx1ZQotICAgICAgICAsIG1fb3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIoKSkgLy8gbm90IGEgdmFsaWQgb3BlcmFuZCBpbmRleCBpbiBv
dXIgY3VycmVudCBzY2hlbWUKKyAgICAgICAgOiBtX29wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKCkp
IC8vIG5vdCBhIHZhbGlkIG9wZXJhbmQgaW5kZXggaW4gb3VyIGN1cnJlbnQgc2NoZW1lCiAgICAg
ewogICAgIH0KICAgICAKICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShXVEY6Okhhc2hU
YWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgxKSAvLyAx
ID0gZGVsZXRlZCB2YWx1ZQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSkKICAgICAgICAgLCBtX29wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKCkpIC8v
IG5vdCBhIHZhbGlkIG9wZXJhbmQgaW5kZXggaW4gb3VyIGN1cnJlbnQgc2NoZW1lCiAgICAgewog
ICAgIH0KICAgICAKLSAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSh1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCi0gICAgICAgIDogbV9ieXRlY29k
ZU9mZnNldChieXRlY29kZU9mZnNldCkKKyAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAg
ICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICAsIG1fb3BlcmFu
ZChvcGVyYW5kKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3BlcmFuZC5pc1ZhbGlkKCkpOwpA
QCAtNjQsMTkgKzYzLDE5IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXQgPT0gb3RoZXIubV9ieXRlY29kZU9mZnNldAorICAg
ICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4ID09IG90aGVyLm1fYnl0ZWNvZGVJbmRleAogICAg
ICAgICAgICAgJiYgbV9vcGVyYW5kID09IG90aGVyLm1fb3BlcmFuZDsKICAgICB9CiAgICAgCiAg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjppbnRI
YXNoKG1fYnl0ZWNvZGVPZmZzZXQpICsgbV9vcGVyYW5kLm9mZnNldCgpOworICAgICAgICByZXR1
cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5vZmZzZXQoKTsKICAgICB9CiAg
ICAgCi0gICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBjb25zdAorICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoISEqdGhpcyk7
Ci0gICAgICAgIHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0OworICAgICAgICByZXR1cm4gbV9ieXRl
Y29kZUluZGV4OwogICAgIH0KIAogICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKCkgY29uc3QK
QEAgLTg3LDEwICs4NiwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gIW1fb3BlcmFuZC5pc1Zh
bGlkKCkgJiYgbV9ieXRlY29kZU9mZnNldDsKKyAgICAgICAgcmV0dXJuICFtX29wZXJhbmQuaXNW
YWxpZCgpICYmIG1fYnl0ZWNvZGVJbmRleC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwogICAg
IH0KIHByaXZhdGU6IAotICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgQnl0ZWNv
ZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAppbmRleCA3ZTNjYzk0ZmE0NjExMWRj
YmFiMGYyMjA5ZjAxOTgyMDIzYjVmMDEzLi43MTA0ZDAxYWUxMWFkM2JhY2ExMzQ1NWJkMWEzMDZi
MWJiZDFiZmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCkBAIC00MSw3ICs0MSw3
IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAogICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUg
cmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBMYXp5T3BlcmFuZDsKICAgICByZXN1bHQudS5s
YXp5T3BlcmFuZC5jb2RlQmxvY2sgPSBjb2RlQmxvY2s7Ci0gICAgcmVzdWx0LnUubGF6eU9wZXJh
bmQuYnl0ZWNvZGVPZmZzZXQgPSBrZXkuYnl0ZWNvZGVPZmZzZXQoKTsKKyAgICByZXN1bHQudS5s
YXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCA9IGtleS5ieXRlY29kZUluZGV4KCk7CiAgICAgcmVz
dWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVyYW5kKCkub2Zmc2V0KCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oCmluZGV4IGI1ZTg0YjEz
MzdlM2VmM2I2MjNkZDI5NzY1MDc0Y2NhODU3YzIzODEuLmNmYjgzNDcwNmFmODM0MjcwMjY4ZThm
MmY2ZmM5Mjk0MmYzZmJkMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaApAQCAtMzEsNiAr
MzEsNyBAQAogLy8gdGhlc2UgI2lmJ3Mgd2lsbCBkaXNhcHBlYXIuLi4KICNpZiBFTkFCTEUoREZH
X0pJVCkKIAorI2luY2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKICNpbmNsdWRlICJHUFJJbmZvLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtODMsMTIgKzg0LDE2IEBAIHByaXZhdGU6CiAgICAgfTsK
ICAgICAKICAgICBLaW5kIG1fa2luZDsKLSAgICB1bmlvbiB7CisgICAgdW5pb24gRGF0YSB7Cisg
ICAgICAgIERhdGEoKQorICAgICAgICAgICAgOiBwcm9maWxlKG51bGxwdHIpCisgICAgICAgIHsg
fQorCiAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZTsKICAgICAgICAgQXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGU7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jazsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OworICAgICAg
ICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldDsKICAgICAgICAgICAgIGludCBvcGVy
YW5kOwogICAgICAgICB9IGxhenlPcGVyYW5kOwogICAgIH0gdTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAppbmRleCBlZmRlMzczODQ2YmY1
YjMxODVlMmFjODgzYWVhMDMwZmE1ZDc4MDhlLi4zMjUwYmU1MThiZGQ5ZGEzYTQ3YTQ3ZjEzOTll
NTczNDM2NWU3MTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuY3BwCkBAIC00NywxMSArNDcsMTEgQEAgYm9vbCBQdXRCeUlkU3RhdHVzOjph
cHBlbmRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQogICAgIHJldHVybiBh
cHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7CiB9CiAKLVB1dEJ5SWRT
dGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCitQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCiB7CiAgICAgVk0mIHZtID0gcHJvZmlsZWRCbG9jay0+dm0oKTsKICAgICAKLSAg
ICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0
ZWNvZGVJbmRleCk7CisgICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEocHJvZmlsZWRCbG9jayk7CiAKQEAgLTkyLDcgKzkyLDcgQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgdW5zaWduZWQKIH0KIAogI2lmIEVOQUJMRShKSVQpCi1QdXRCeUlkU3RhdHVzIFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1
c01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBFeGl0RmxhZyBkaWRFeGl0LCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0
U2l0ZURhdGEpCitQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCBJQ1N0YXR1c01hcCYgbWFwLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEV4aXRGbGFnIGRpZEV4aXQsIENhbGxM
aW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgY2FsbEV4aXRTaXRlRGF0YSkKIHsKICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAgICAgCkBAIC0yMzcs
NyArMjM3LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1Yklu
Zm8oCiAKIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sq
IGJhc2VsaW5lQmxvY2ssIElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0
U3RhY2smIGNvbnRleHRTdGFjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQogewotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNh
bGxFeGl0U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShiYXNl
bGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKICAgICBFeGl0RmxhZyBkaWRFeGl0ID0gaGFzQmFk
Q2FjaGVFeGl0U2l0ZShiYXNlbGluZUJsb2NrLCBieXRlY29kZUluZGV4KTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKaW5kZXggOTJiMWIxYTM3
MmNiNmFmODUyZjhiMTRlNjA2ZWNhYWI4Mzk5NjE3NS4uYjBkZDlmMTM5OWE4YmU3NDFmNDhjMzI3
MDNiMDgyMjI4NTRjMTk4YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5oCkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICAgICAgbV92YXJp
YW50cy5hcHBlbmQodmFyaWFudCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBQdXRCeUlkU3Rh
dHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgSUNTdGF0dXNNYXAmLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBFeGl0RmxhZywgQ2FsbExpbmtTdGF0dXM6
OkV4aXRTaXRlRGF0YSk7CisgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2Rl
QmxvY2sqLCBJQ1N0YXR1c01hcCYsIEJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQsIEV4aXRGbGFnLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKICAgICBzdGF0aWMg
UHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RydWN0dXJl
U2V0JiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgYm9vbCBpc0RpcmVjdCk7CiAgICAgCiAgICAg
c3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ss
IElDU3RhdHVzTWFwJiBiYXNlbGluZU1hcCwgSUNTdGF0dXNDb250ZXh0U3RhY2smIGNvbnRleHRT
dGFjaywgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CkBAIC0xMzEsNyArMTMx
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8qLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLAogICAgICAg
ICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhKTsKICNlbmRpZgotICAgIHN0YXRpYyBQdXRC
eUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMg
Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKTsKICAgICAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZh
cmlhbnQmKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uY3BwCmluZGV4IDU4MjY0YjE0YWQxMGI3Y2QxNjc1MTVhYzEzOWM5
ZGIzNTRjZmM4MGMuLmQ3YjNiNjQxNmY2ZWQ1NjA5NTFkZjk4MzA3NDUzMWNhYjQ2ODhhZTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcApAQCAtNDAsOCArNDAsNyBAQCBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOwogfQogCiBTdHJ1Y3R1cmVTdHViSW5mbzo6U3RydWN0dXJlU3R1YkluZm8oQWNjZXNz
VHlwZSBhY2Nlc3NUeXBlKQotICAgIDogY2FsbFNpdGVJbmRleChVSU5UX01BWCkKLSAgICAsIGFj
Y2Vzc1R5cGUoYWNjZXNzVHlwZSkKKyAgICA6IGFjY2Vzc1R5cGUoYWNjZXNzVHlwZSkKICAgICAs
IGNhY2hlVHlwZShDYWNoZVR5cGU6OlVuc2V0KQogICAgICwgY291bnRkb3duKDEpIC8vIEZvciBh
IHRvdGFsbHkgY2xlYXIgc3R1Yiwgd2UnbGwgcGF0Y2ggaXQgYWZ0ZXIgdGhlIGZpcnN0IGV4ZWN1
dGlvbi4KICAgICAsIHJlcGF0Y2hDb3VudCgwKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKaW5kZXggYjI3MTZiZmI0YmRlZmQy
MDgxYjE1ZjZhMjcyMjE5NGMyOTkxZjIzZC4uMjM0ZmE1NzdjNWFmMGExMjE2YzdiNGQ2ZDA0NDdk
MGJjZjhkNGM0OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC0xMTEsMTUgKzExMSwxNSBAQCBzaXplX3QgVW5saW5r
ZWRDb2RlQmxvY2s6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsLCBWTSYgdm0pCiAgICAgcmV0
dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCwgdm0pICsgZXh0cmFTaXplOwogfQogCi1pbnQg
VW5saW5rZWRDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCkKK2ludCBVbmxpbmtlZENvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVj
b2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewotICAgIEFTU0VSVChieXRl
Y29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgQVNTRVJUKGJ5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogICAgIGludCBkaXZvdCB7
IDAgfTsKICAgICBpbnQgc3RhcnRPZmZzZXQgeyAwIH07CiAgICAgaW50IGVuZE9mZnNldCB7IDAg
fTsKICAgICB1bnNpZ25lZCBsaW5lIHsgMCB9OwogICAgIHVuc2lnbmVkIGNvbHVtbiB7IDAgfTsK
LSAgICBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2
b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CisgICAgZXhwcmVzc2lv
blJhbmdlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4LCBkaXZvdCwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKICAgICByZXR1cm4gbGluZTsKIH0KIApAQCAtMTc5
LDEwICsxNzksMTAgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6ZHVtcEV4cHJlc3Npb25SYW5n
ZUluZm8oKQogfQogI2VuZGlmCiAKLXZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25S
YW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LAordm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgsCiAgICAgaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50
JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdAogewot
ICAgIEFTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAg
QVNTRVJUKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwog
CiAgICAgaWYgKCFtX2V4cHJlc3Npb25JbmZvLnNpemUoKSkgewogICAgICAgICBzdGFydE9mZnNl
dCA9IDA7CkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6ZXhwcmVz
c2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQKICAgICBp
bnQgaGlnaCA9IGV4cHJlc3Npb25JbmZvLnNpemUoKTsKICAgICB3aGlsZSAobG93IDwgaGlnaCkg
ewogICAgICAgICBpbnQgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cpIC8gMjsKLSAgICAgICAgaWYg
KGV4cHJlc3Npb25JbmZvW21pZF0uaW5zdHJ1Y3Rpb25PZmZzZXQgPD0gYnl0ZWNvZGVPZmZzZXQp
CisgICAgICAgIGlmIChleHByZXNzaW9uSW5mb1ttaWRdLmluc3RydWN0aW9uT2Zmc2V0IDw9IGJ5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpCiAgICAgICAgICAgICBsb3cgPSBtaWQgKyAxOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBoaWdoID0gbWlkOwpAQCAtMzI1LDkgKzMyNSw5IEBAIGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtJiBVbmxpbmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zKCkgY29u
c3QKICAgICByZXR1cm4gKm1faW5zdHJ1Y3Rpb25zOwogfQogCi1VbmxpbmtlZEhhbmRsZXJJbmZv
KiBVbmxpbmtlZENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWRIYW5kbGVyKQorVW5saW5rZWRI
YW5kbGVySW5mbyogVW5saW5rZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxl
cikKIHsKLSAgICByZXR1cm4gaGFuZGxlckZvckluZGV4KGJ5dGVjb2RlT2Zmc2V0LCByZXF1aXJl
ZEhhbmRsZXIpOworICAgIHJldHVybiBoYW5kbGVyRm9ySW5kZXgoYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSwgcmVxdWlyZWRIYW5kbGVyKTsKIH0KIAogVW5saW5rZWRIYW5kbGVySW5mbyogVW5saW5r
ZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgUmVxdWlyZWRIYW5k
bGVyIHJlcXVpcmVkSGFuZGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggMDAwMmMzZWEwYjRiYjY0ZmNiOWE2YWY5MTI2
NWZmMGEyODQ3NzcxZS4uMWJhOTA3ZmQ3ODZmMzRiODBjZmVhNWQzYWU0MGZmYjE4YzVjZWNmOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgKQEAgLTIxNyw3ICsyMTcsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQganVtcFRhcmdl
dChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHNbaW5kZXhdOyB9CiAgICAg
dW5zaWduZWQgbGFzdEp1bXBUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzLmxh
c3QoKTsgfQogCi0gICAgVW5saW5rZWRIYW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlT2Zm
c2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhh
bmRsZXI6OkFueUhhbmRsZXIpOworICAgIFVubGlua2VkSGFuZGxlckluZm8qIGhhbmRsZXJGb3JC
eXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFu
ZGxlcjo6QW55SGFuZGxlcik7CiAgICAgVW5saW5rZWRIYW5kbGVySW5mbyogaGFuZGxlckZvcklu
ZGV4KHVuc2lnbmVkLCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRs
ZXIpOwogCiAgICAgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNC
dWlsdGluRnVuY3Rpb247IH0KQEAgLTI3OSw5ICsyNzksOSBAQCBwdWJsaWM6CiAKICAgICBib29s
IGhhc1JhcmVEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YS5nZXQoKTsgfQogCi0gICAg
aW50IGxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7
CisgICAgaW50IGxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwogCi0g
ICAgdm9pZCBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCwgaW50JiBkaXZvdCwKKyAgICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2Rl
SW5kZXgoQnl0ZWNvZGVJbmRleCwgaW50JiBkaXZvdCwKICAgICAgICAgaW50JiBzdGFydE9mZnNl
dCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25z
dDsKIAogICAgIGJvb2wgdHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNl
dCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgdW5zaWduZWQmIHN0YXJ0RGl2b3QsIHVuc2lnbmVk
JiBlbmREaXZvdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVQcm9maWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmgKaW5kZXggMDViMDliZTc1NzQyYjVlMjM5NzFhZjdhOWVlNGQxM2M3ZjliN2E1MC4uYmJi
OGE0YjI0NTMxMDQwM2E3ZmNlZjJiMjFlMTE4MzNlZmI5MDM2NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaApAQCAtMTYxLDE5ICsxNjEsMTkgQEAg
c3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZC
dWNrZXRzPDA+IHsKIC8vIFRoaXMgaXMgYSBtaW5pIHZhbHVlIHByb2ZpbGUgdG8gY2F0Y2ggcGF0
aG9sb2dpZXMuIEl0IGlzIGEgY291bnRlciB0aGF0IGdldHMKIC8vIGluY3JlbWVudGVkIHdoZW4g
d2UgdGFrZSB0aGUgc2xvdyBwYXRoIG9uIGFueSBpbnN0cnVjdGlvbi4KIHN0cnVjdCBSYXJlQ2Fz
ZVByb2ZpbGUgewotICAgIFJhcmVDYXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCi0gICAg
ICAgIDogbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkKKyAgICBSYXJlQ2FzZVByb2Zp
bGUoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRl
eChieXRlY29kZUluZGV4KQogICAgICAgICAsIG1fY291bnRlcigwKQogICAgIHsKICAgICB9CiAg
ICAgCi0gICAgaW50IG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVj
b2RlSW5kZXg7CiAgICAgdWludDMyX3QgbV9jb3VudGVyOwogfTsKIAotaW5saW5lIGludCBnZXRS
YXJlQ2FzZVByb2ZpbGVCeXRlY29kZU9mZnNldChSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJv
ZmlsZSkKK2lubGluZSBCeXRlY29kZUluZGV4IGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlSW5k
ZXgoUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGUpCiB7Ci0gICAgcmV0dXJuIHJhcmVD
YXNlUHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldDsKKyAgICByZXR1cm4gcmFyZUNhc2VQcm9maWxl
LT5tX2J5dGVjb2RlSW5kZXg7CiB9CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kIDog
cHVibGljIFZhbHVlUHJvZmlsZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IGU3OTE0YWE0N2M1ZWU5
YTk4M2Q3NTlmZGQ2ZmFhYjZjY2EwYjNmMjAuLjE1NGJkM2NmYmNjMjljMmNlNzQ4YmVkZjc3ZTYx
YWM1OWZiYTczZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC01MDQ5LDcgKzUwNDksNyBAQCB2b2lk
IEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5s
aW5rZWRDb2RlQmxvY2sqIGNvZAogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpOwogCiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9lbnRlcik7
Ci0gICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBvcGNvZGVJ
RCwgaW5zdHJ1Y3Rpb24ucHRyKCksIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAg
ICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgb3Bjb2RlSUQsIGlu
c3RydWN0aW9uLnB0cigpLCBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CiAgICAgICAg
ICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFuZCkKICAgICAgICAg
ICAgICAgICBpbnZhbGlkYXRlKCk7CiAgICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKaW5kZXggMmFlMGIwNzI5
ZmFkYmFjYTJiYzQyNzM1ZmJjY2UwZTFkNjZhZTgyZS4uMmNlNzJlOGMyYWZhY2NjMDljZjA1MjRh
ODMwNTJlMGQ3ZTM0YmM3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCkBAIC0yOTksOSArMjk5LDkgQEAgVGV4dFBvc2l0
aW9uIERlYnVnZ2VyQ2FsbEZyYW1lOjpjdXJyZW50UG9zaXRpb24oVk0mIHZtKQogCiAgICAgaWYg
KGlzVGFpbERlbGV0ZWQoKSkgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fc2hh
ZG93Q2hpY2tlbkZyYW1lLmNvZGVCbG9jazsKLSAgICAgICAgaWYgKE9wdGlvbmFsPHVuc2lnbmVk
PiBieXRlY29kZU9mZnNldCA9IGNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXRGcm9tQ2FsbFNpdGVJ
bmRleChtX3NoYWRvd0NoaWNrZW5GcmFtZS5jYWxsU2l0ZUluZGV4KSkgewotICAgICAgICAgICAg
cmV0dXJuIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29kZUJs
b2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoKmJ5dGVjb2RlT2Zmc2V0KSksCi0gICAg
ICAgICAgICAgICAgT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvZGVCbG9jay0+Y29s
dW1uTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoKmJ5dGVjb2RlT2Zmc2V0KSkpOworICAgICAgICBp
ZiAoT3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gYnl0ZWNvZGVJbmRleCA9IGNvZGVCbG9jay0+Ynl0
ZWNvZGVJbmRleEZyb21DYWxsU2l0ZUluZGV4KG1fc2hhZG93Q2hpY2tlbkZyYW1lLmNhbGxTaXRl
SW5kZXgpKSB7CisgICAgICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6
OmZyb21PbmVCYXNlZEludChjb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JCeXRlY29kZUluZGV4KCpi
eXRlY29kZUluZGV4KSksCisgICAgICAgICAgICAgICAgT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJh
c2VkSW50KGNvZGVCbG9jay0+Y29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVJbmRleCgqYnl0ZWNvZGVJ
bmRleCkpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5jcHAKaW5kZXggMWRkYzYyZTMzNTczYWRjMjNlNGJlZmVmNTQ4YjJhY2Ez
Y2UyMDFhOC4uOGNiMDk2Mjc2ZjEzNDk5ZGIxZDY2YzMyNWM0NmRkNTM5YjhkNDgyZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCkBAIC0zMiw4ICszMiw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotQmFzaWNCbG9jazo6QmFz
aWNCbG9jaygKLSAgICB1bnNpZ25lZCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVu
dHMsIHVuc2lnbmVkIG51bUxvY2FscywgZmxvYXQgZXhlY3V0aW9uQ291bnQpCitCYXNpY0Jsb2Nr
OjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJn
dW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KQogICAgIDog
Ynl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQogICAgICwgaW5kZXgoTm9CbG9jaykKICAgICAs
IGNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZChTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKaW5kZXggNGM1OGM5YzVlNzg0
Zjg1ZDk4MjgxNTlmYmYwYmRkNDcxM2NjOWFiYS4uMjZhMzA2NzJiMjVlOWI4NjBmY2RhMDkxNDRk
NjYzMTEzMDY2NGE3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgdHlwZWRlZiBWZWN0b3I8Tm9kZSosIDg+IEJsb2NrTm9kZUxp
c3Q7CiAKIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiB7CiAgICAg
QmFzaWNCbG9jaygKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVt
QXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsCisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsCiAg
ICAgICAgIGZsb2F0IGV4ZWN1dGlvbkNvdW50KTsKICAgICB+QmFzaWNCbG9jaygpOwogICAgIApA
QCAtMTc4LDcgKzE3OCw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Js
b2NrPiB7CiAgICAgCiAgICAgLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIGludGVybmFsbHkgZm9yIGJs
b2NrIGxpbmtpbmcgYW5kIE9TUiBlbnRyeS4gSXQgaXMgbW9zdGx5IG1lYW5pbmdsZXNzCiAgICAg
Ly8gZm9yIG90aGVyIHB1cnBvc2VzIGR1ZSB0byBpbmxpbmluZy4KLSAgICB1bnNpZ25lZCBieXRl
Y29kZUJlZ2luOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbjsKICAgICAKICAgICBC
bG9ja0luZGV4IGluZGV4OwogCkBAIC0yNTksMTQgKzI1OSwxNCBAQCBwcml2YXRlOgogCiB0eXBl
ZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKj4gQmxvY2tMaXN0OwogICAgIAotc3RhdGljIGlubGluZSB1
bnNpZ25lZCBnZXRCeXRlY29kZUJlZ2luRm9yQmxvY2soQmFzaWNCbG9jayoqIGJhc2ljQmxvY2sp
CitzdGF0aWMgaW5saW5lIEJ5dGVjb2RlSW5kZXggZ2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKEJh
c2ljQmxvY2sqKiBiYXNpY0Jsb2NrKQogewogICAgIHJldHVybiAoKmJhc2ljQmxvY2spLT5ieXRl
Y29kZUJlZ2luOwogfQogCi1zdGF0aWMgaW5saW5lIEJhc2ljQmxvY2sqIGJsb2NrRm9yQnl0ZWNv
ZGVPZmZzZXQoVmVjdG9yPEJhc2ljQmxvY2sqPiYgbGlua2luZ1RhcmdldHMsIHVuc2lnbmVkIGJ5
dGVjb2RlQmVnaW4pCitzdGF0aWMgaW5saW5lIEJhc2ljQmxvY2sqIGJsb2NrRm9yQnl0ZWNvZGVJ
bmRleChWZWN0b3I8QmFzaWNCbG9jayo+JiBsaW5raW5nVGFyZ2V0cywgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUJlZ2luKQogewotICAgIHJldHVybiAqYmluYXJ5U2VhcmNoPEJhc2ljQmxvY2sqLCB1
bnNpZ25lZD4obGlua2luZ1RhcmdldHMsIGxpbmtpbmdUYXJnZXRzLnNpemUoKSwgYnl0ZWNvZGVC
ZWdpbiwgZ2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKTsKKyAgICByZXR1cm4gKmJpbmFyeVNlYXJj
aDxCYXNpY0Jsb2NrKiwgQnl0ZWNvZGVJbmRleD4obGlua2luZ1RhcmdldHMsIGxpbmtpbmdUYXJn
ZXRzLnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgZ2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKTsKIH0K
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAppbmRleCBmYmMyZGI0NjU5YzM5YjE0ZGI0
YTBlODQ0MTNhOTU1NDdhNWFkYWNkLi43NTA4ZTIxOWRjN2M1ODNkYjllYThmY2U2NDY4NTg5OTll
MDQ2MGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5z
ZXJ0aW9uU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5z
ZXJ0aW9uU2V0LmNwcApAQCAtNTEsMTEgKzUxLDcgQEAgdm9pZCBCbG9ja0luc2VydGlvblNldDo6
aW5zZXJ0KHNpemVfdCBpbmRleCwgUmVmPEJhc2ljQmxvY2s+JiYgYmxvY2spCiAKIEJhc2ljQmxv
Y2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBmbG9hdCBleGVjdXRp
b25Db3VudCkKIHsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJh
c2ljQmxvY2soCi0gICAgICAgIFVJTlRfTUFYLAotICAgICAgICBtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAgICAgICAgbV9ncmFwaC5ibG9j
aygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCksCi0gICAgICAgIGV4ZWN1dGlv
bkNvdW50KSk7CisgICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNp
Y0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mQXJndW1lbnRzKCksIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5u
dW1iZXJPZkxvY2FscygpLCBleGVjdXRpb25Db3VudCkpOwogICAgIGJsb2NrLT5pc1JlYWNoYWJs
ZSA9IHRydWU7CiAgICAgYXV0byogcmVzdWx0ID0gYmxvY2sucHRyKCk7CiAgICAgaW5zZXJ0KGlu
ZGV4LCBXVEZNb3ZlKGJsb2NrKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDY2MTAxM2E4Nzc3NDRjY2VjOGJjMzM2MTdmYjBiOWEw
OTc5NTI2MDUuLjIyMzQ0NWMyZDk0NTgwN2JmY2I4MTlhZWYyNTE3Zjg1MGUxZTM0NGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0x
NDgsMTAgKzE0OCwxMCBAQCBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMgdXNlZCBtb3N0IG5vdGFi
bHkgd2hlbiBkb2luZyBwb2x5dmFyaWFudCBpbmxpbmluZyAoaXQgcmVxdWlyZXMgYSBmYWlyIGJp
dCBvZiBjb250cm9sLWZsb3cgd2l0aCBubyBieXRlY29kZSBhbmFsb2cpLgogICAgIC8vIEl0IGlz
IGFsc28gdXNlZCB3aGVuIGRvaW5nIGFuIGVhcmx5IHJldHVybiBmcm9tIGFuIGlubGluZWQgY2Fs
bGVlOiBpdCBpcyBlYXNpZXIgdG8gZml4IHRoZSBieXRlY29kZSBpbmRleCBsYXRlciBvbiBpZiBu
ZWVkZWQKICAgICAvLyB0aGFuIHRvIG1vdmUgdGhlIHJpZ2h0IGluZGV4IGFsbCB0aGUgd2F5IHRv
IHRoZSB0cmVhdG1lbnQgb2Ygb3BfcmV0LgotICAgIEJhc2ljQmxvY2sqIGFsbG9jYXRlVGFyZ2V0
YWJsZUJsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgIEJhc2ljQmxvY2sqIGFsbG9j
YXRlVGFyZ2V0YWJsZUJsb2NrKEJ5dGVjb2RlSW5kZXgpOwogICAgIEJhc2ljQmxvY2sqIGFsbG9j
YXRlVW50YXJnZXRhYmxlQmxvY2soKTsKICAgICAvLyBBbiB1bnRhcmdldGFibGUgYmxvY2sgY2Fu
IGJlIGdpdmVuIGEgYnl0ZWNvZGVJbmRleCB0byBiZSBsYXRlciBtYW5hZ2VkIGJ5IGxpbmtCbG9j
aywgYnV0IG9ubHkgb25jZSwgYW5kIGl0IGNhbiBuZXZlciBnbyBpbiB0aGUgb3RoZXIgZGlyZWN0
aW9uCi0gICAgdm9pZCBtYWtlQmxvY2tUYXJnZXRhYmxlKEJhc2ljQmxvY2sqLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4KTsKKyAgICB2b2lkIG1ha2VCbG9ja1RhcmdldGFibGUoQmFzaWNCbG9jayos
IEJ5dGVjb2RlSW5kZXgpOwogICAgIHZvaWQgYWRkSnVtcFRvKEJhc2ljQmxvY2sqKTsKICAgICB2
b2lkIGFkZEp1bXBUbyh1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAvLyBIYW5kbGUgY2Fs
bHMuIFRoaXMgcmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5kaW5nIGlubGluaW5nIGFuZCBpbnRyaW5z
aWNzLgpAQCAtMTc0LDggKzE3NCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVWYXJhcmdz
SW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIGNv
bnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIg
dGhpc0FyZ3VtZW50LCBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzQXJndW1lbnQsIHVuc2lnbmVk
IGFyZ3VtZW50c09mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQp
OwogICAgIHVuc2lnbmVkIGdldElubGluaW5nQmFsYW5jZShjb25zdCBDYWxsTGlua1N0YXR1cyYs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIGVudW0gY2xhc3MgQ2FsbE9wdGltaXphdGlv
blJlc3VsdCB7IE9wdGltaXplZFRvSnVtcCwgSW5saW5lZCwgRGlkTm90aGluZyB9OwotICAgIENh
bGxPcHRpbWl6YXRpb25SZXN1bHQgaGFuZGxlQ2FsbFZhcmlhbnQoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlLCBCYXNpY0Js
b2NrKiBjb250aW51YXRpb25CbG9jaywgYm9vbCBuZWVkc1RvQ2hlY2tDYWxsZWUpOwotICAgIENh
bGxPcHRpbWl6YXRpb25SZXN1bHQgaGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUs
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lz
dGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5s
aW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKKyAgICBDYWxs
T3B0aW1pemF0aW9uUmVzdWx0IGhhbmRsZUNhbGxWYXJpYW50KE5vZGUqIGNhbGxUYXJnZXROb2Rl
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYWxsVmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIEJ5dGVjb2RlSW5kZXggbmV4dEluZGV4LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UsIEJhc2lj
QmxvY2sqIGNvbnRpbnVhdGlvbkJsb2NrLCBib29sIG5lZWRzVG9DaGVja0NhbGxlZSk7CisgICAg
Q2FsbE9wdGltaXphdGlvblJlc3VsdCBoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9k
ZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgQnl0ZWNvZGVJbmRleCBuZXh0SW5kZXgsIE5vZGVUeXBlIGNhbGxP
cCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIHZvaWQgaW5saW5lQ2FsbChO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2FsbFZhcmlhbnQs
IGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBJbmxp
bmVDYWxsRnJhbWU6OktpbmQsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbkJsb2NrLCBjb25zdCBD
aGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOwogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVu
Y3Rpb25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8g
cGxhbnQgYSBjYWxsLgpAQCAtNTY3LDcgKzU2Nyw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICBvcmlnaW4ud2Fsa1VwSW5saW5lU3RhY2soCiAgICAgICAgICAgICBbJl0gKENvZGVPcmlnaW4g
b3JpZ2luKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG9yaWdp
bi5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4ID0gb3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICBJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKICAg
ICAgICAgICAgICAgICBmbHVzaEltcGwoaW5saW5lQ2FsbEZyYW1lLCBhZGRGbHVzaERpcmVjdCk7
CiAKQEAgLTY0MiwxMSArNjQyLDExIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBmbHVzaElm
VGVybWluYWwoU3dpdGNoRGF0YSYgZGF0YSkKICAgICB7Ci0gICAgICAgIGlmIChkYXRhLmZhbGxU
aHJvdWdoLmJ5dGVjb2RlSW5kZXgoKSA+IG1fY3VycmVudEluZGV4KQorICAgICAgICBpZiAoZGF0
YS5mYWxsVGhyb3VnaC5ieXRlY29kZUluZGV4KCkgPiBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAoZGF0YS5jYXNlc1tp
XS50YXJnZXQuYnl0ZWNvZGVJbmRleCgpID4gbV9jdXJyZW50SW5kZXgpCisgICAgICAgICAgICBp
ZiAoZGF0YS5jYXNlc1tpXS50YXJnZXQuYnl0ZWNvZGVJbmRleCgpID4gbV9jdXJyZW50SW5kZXgu
b2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApA
QCAtNzA5LDcgKzcwOSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICAvLyBXZSBhc3N1bWUg
dGhhdCBicmFuY2hlcyBvcmlnaW5hdGluZyBmcm9tIGJ5dGVjb2RlIGFsd2F5cyBoYXZlIGEgZmFs
bC10aHJvdWdoLiBXZQogICAgICAgICAvLyB1c2UgdGhpcyBhc3N1bXB0aW9uIHRvIGF2b2lkIGNo
ZWNraW5nIGZvciB0aGUgY3JlYXRpb24gb2YgdGVybWluYWwgYmxvY2tzLgotICAgICAgICBBU1NF
UlQoKHRha2VuID4gbV9jdXJyZW50SW5kZXgpIHx8IChub3RUYWtlbiA+IG1fY3VycmVudEluZGV4
KSk7CisgICAgICAgIEFTU0VSVCgodGFrZW4gPiBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSkgfHwg
KG5vdFRha2VuID4gbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkpKTsKICAgICAgICAgQnJhbmNoRGF0
YSogZGF0YSA9IG1fZ3JhcGgubV9icmFuY2hEYXRhLmFkZCgpOwogICAgICAgICAqZGF0YSA9IEJy
YW5jaERhdGE6OndpdGhCeXRlY29kZUluZGljZXModGFrZW4sIG5vdFRha2VuKTsKICAgICAgICAg
cmV0dXJuIGRhdGE7CkBAIC04MzQsMTQgKzgzNCwxNCBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gb2JqZWN0Tm9kZTsKICAgICB9CiAgICAgCi0gICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGlj
dGlvbldpdGhvdXRPU1JFeGl0KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgU3BlY3VsYXRl
ZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCkKICAgICB7CiAgICAgICAgIGF1dG8gZ2V0VmFsdWVQcm9maWxlUHJlZGljdGlvbkZyb21G
b3JDb2RlQmxvY2tBbmRCeXRlY29kZU9mZnNldCA9IFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgICAgIHsKICAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb247CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAg
ICAgICAgcHJlZGljdGlvbiA9IGNvZGVCbG9jay0+dmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5
dGVjb2RlT2Zmc2V0KGxvY2tlciwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAgICAg
ICAgICAgICAgIHByZWRpY3Rpb24gPSBjb2RlQmxvY2stPnZhbHVlUHJvZmlsZVByZWRpY3Rpb25G
b3JCeXRlY29kZUluZGV4KGxvY2tlciwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYXV0byogZnV6emVyQWdlbnQgPSBtX3ZtLT5mdXp6ZXJB
Z2VudCgpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKGZ1enplckFnZW50KSkKQEAgLTg2MCw3
ICs4NjAsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBjaGFpbiBhbmQgdXNlIGl0cyBwcmVkaWN0
aW9uLiBJZiB3ZSBvbmx5IGhhdmUKICAgICAgICAgLy8gaW5saW5lZCB0YWlsIGNhbGwgZnJhbWVz
LCB3ZSB1c2UgU3BlY0Z1bGxUb3AKICAgICAgICAgLy8gdG8gYXZvaWQgYSBzcHVyaW91cyBPU1Ig
ZXhpdC4KLSAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGF1
dG8gaW5zdHJ1Y3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogICAgICAgICBPcGNvZGVJRCBv
cGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwogCiAgICAgICAgIHN3aXRjaCAob3Bj
b2RlSUQpIHsKQEAgLTg5NCw3ICs4OTQsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gU3Bl
Y05vbmU7CiAgICAgfQogCi0gICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbih1bnNpZ25l
ZCBieXRlY29kZUluZGV4KQorICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb24oQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KQogICAgIHsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiA9IGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdChieXRlY29kZUluZGV4KTsKIApA
QCAtOTIwLDcgKzkyMCw3IEBAIHByaXZhdGU6CiAgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZShB
cnJheTo6QWN0aW9uIGFjdGlvbikKICAgICB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrOwotICAgICAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSBjb2RlQmxvY2stPmdldEFycmF5UHJvZmlsZShjb2RlQmxvY2stPmJ5dGVj
b2RlT2Zmc2V0KG1fY3VycmVudEluc3RydWN0aW9uKSk7CisgICAgICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9IGNvZGVCbG9jay0+Z2V0QXJyYXlQcm9maWxlKGNvZGVCbG9jay0+Ynl0ZWNvZGVJ
bmRleChtX2N1cnJlbnRJbnN0cnVjdGlvbikpOwogICAgICAgICByZXR1cm4gZ2V0QXJyYXlNb2Rl
KCpwcm9maWxlLCBhY3Rpb24pOwogICAgIH0KIApAQCAtOTQzLDcgKzk0Myw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKIAogICAgICAgICB7Ci0gICAgICAgICAgICBBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
ay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpOworICAgICAg
ICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgp
OwogICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSkgewogICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQXJpdGhBZGQ6CkBAIC05NTYs
NyArOTU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmls
ZS0+ZGlkT2JzZXJ2ZUJpZ0ludCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWVy
Z2VGbGFncyhOb2RlTWF5SGF2ZUJpZ0ludFJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZU11bDoK
ICAgICAgICAgICAgICAgICBjYXNlIEFyaXRoTXVsOiB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChhcml0aFByb2ZpbGUtPmRpZE9ic2VydmVJbnQ1Mk92ZXJmbG93KCkpCkBAIC05ODcsNyArOTg3
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3Mo
Tm9kZU1heUhhdmVCaWdJbnRSZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0x
MDI4LDEzICsxMDI4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGNhcmUgYWJvdXQgd2hlbiB0
aGUgb3V0Y29tZSBvZiB0aGUgZGl2aXNpb24gaXMgbm90IGFuIGludGVnZXIsIHdoaWNoCiAgICAg
ICAgIC8vIGlzIHdoYXQgdGhlIHNwZWNpYWwgZmFzdCBjYXNlIGNvdW50ZXIgdGVsbHMgdXMuCiAg
ICAgICAgIAotICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+
Y291bGRUYWtlU3BlY2lhbEZhc3RDYXNlKG1fY3VycmVudEluZGV4KSkKKyAgICAgICAgaWYgKCFt
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFrZVNwZWNpYWxBcml0aEZh
c3RDYXNlKG1fY3VycmVudEluZGV4KSkKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAg
ICAKICAgICAgICAgLy8gRklYTUU6IEl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIG1ha2UgdGhpcyBt
b3JlIGdyYW51bGFyLgogICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvd0lu
dDMySW5CYXNlbGluZSB8IE5vZGVNYXlOZWdaZXJvSW5CYXNlbGluZSk7CiAgICAgICAgIAotICAg
ICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgp
OworICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJ
bmRleCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUtPmRpZE9ic2VydmVCaWdJbnQoKSkKICAg
ICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU1heUhhdmVCaWdJbnRSZXN1bHQpOwogCkBA
IC0xMDYxLDcgKzEwNjEsNyBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBjdXJyZW50IGJsb2NrIGJl
aW5nIGdlbmVyYXRlZC4KICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKICAgICAvLyBU
aGUgYnl0ZWNvZGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gYmVpbmcgZ2VuZXJh
dGVkLgotICAgIHVuc2lnbmVkIG1fY3VycmVudEluZGV4OworICAgIEJ5dGVjb2RlSW5kZXggbV9j
dXJyZW50SW5kZXg7CiAgICAgLy8gVGhlIHNlbWFudGljIG9yaWdpbiBvZiB0aGUgY3VycmVudCBu
b2RlIGlmIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IEluZGV4LgogICAgIENvZGVPcmlnaW4g
bV9jdXJyZW50U2VtYW50aWNPcmlnaW47CiAgICAgLy8gVHJ1ZSBpZiBpdCdzIE9LIHRvIE9TUiBl
eGl0IHJpZ2h0IG5vdy4KQEAgLTExOTEsMTQgKzExOTEsMTQgQEAgcHJpdmF0ZToKICAgICBib29s
IG1faGFzQW55Rm9yY2VPU1JFeGl0cyB7IGZhbHNlIH07CiB9OwogCi1CYXNpY0Jsb2NrKiBCeXRl
Q29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2sodW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkKK0Jhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVCbG9jayhC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXgg
IT0gVUlOVF9NQVgpOworICAgIEFTU0VSVChieXRlY29kZUluZGV4KTsKICAgICBSZWY8QmFzaWNC
bG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRleCwgbV9u
dW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCAxKSk7CiAgICAgQmFzaWNCbG9jayogYmxvY2tQdHIg
PSBibG9jay5wdHIoKTsKICAgICAvLyBtX2Jsb2NrTGlua2luZ1RhcmdldHMgbXVzdCBhbHdheXMg
YmUgc29ydGVkIGluIGluY3JlYXNpbmcgb3JkZXIgb2YgYnl0ZWNvZGVCZWdpbgogICAgIGlmICht
X2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuc2l6ZSgpKQotICAgICAgICBB
U1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmxhc3QoKS0+Ynl0
ZWNvZGVCZWdpbiA8IGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFj
a1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmxhc3QoKS0+Ynl0ZWNvZGVCZWdpbi5vZmZzZXQo
KSA8IGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmxv
Y2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQoYmxvY2tQdHIpOwogICAgIG1fZ3JhcGguYXBwZW5kQmxv
Y2soV1RGTW92ZShibG9jaykpOwogICAgIHJldHVybiBibG9ja1B0cjsKQEAgLTEyMDYsMTkgKzEy
MDYsMTkgQEAgQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJs
b2NrKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAKIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2Vy
OjphbGxvY2F0ZVVudGFyZ2V0YWJsZUJsb2NrKCkKIHsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxv
Y2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIG1fbnVtQXJndW1lbnRzLCBt
X251bUxvY2FscywgMSkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpu
ZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2Fs
cywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAgbV9n
cmFwaC5hcHBlbmRCbG9jayhXVEZNb3ZlKGJsb2NrKSk7CiAgICAgcmV0dXJuIGJsb2NrUHRyOwog
fQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjptYWtlQmxvY2tUYXJnZXRhYmxlKEJhc2ljQmxvY2sq
IGJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQordm9pZCBCeXRlQ29kZVBhcnNlcjo6bWFr
ZUJsb2NrVGFyZ2V0YWJsZShCYXNpY0Jsb2NrKiBibG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQogewotICAgIFJFTEVBU0VfQVNTRVJUKGJsb2NrLT5ieXRlY29kZUJlZ2luID09IFVJ
TlRfTUFYKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghYmxvY2stPmJ5dGVjb2RlQmVnaW4pOwogICAg
IGJsb2NrLT5ieXRlY29kZUJlZ2luID0gYnl0ZWNvZGVJbmRleDsKICAgICAvLyBtX2Jsb2NrTGlu
a2luZ1RhcmdldHMgbXVzdCBhbHdheXMgYmUgc29ydGVkIGluIGluY3JlYXNpbmcgb3JkZXIgb2Yg
Ynl0ZWNvZGVCZWdpbgogICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1Rh
cmdldHMuc2l6ZSgpKQotICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xp
bmtpbmdUYXJnZXRzLmxhc3QoKS0+Ynl0ZWNvZGVCZWdpbiA8IGJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmxhc3Qo
KS0+Ynl0ZWNvZGVCZWdpbi5vZmZzZXQoKSA8IGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogICAg
IG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQoYmxvY2spOwog
fQogCkBAIC0xMjc4LDcgKzEyNzgsNyBAQCBCeXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNB
cmd1bWVudCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KTsK
ICAgICAgICAgYXV0byBvcHRpbWl6YXRpb25SZXN1bHQgPSBoYW5kbGVJbmxpbmluZyhjYWxsVGFy
Z2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgdGhpc0FyZ3VtZW50
LAotICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG1fY3VycmVudEluZGV4
ICsgaW5zdHJ1Y3Rpb25TaXplLCBvcCwga2luZCwgcHJlZGljdGlvbik7CisgICAgICAgICAgICBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5v
ZmZzZXQoKSArIGluc3RydWN0aW9uU2l6ZSksIG9wLCBraW5kLCBwcmVkaWN0aW9uKTsKICAgICAg
ICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCA9PSBDYWxsT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRp
bWl6ZWRUb0p1bXApCiAgICAgICAgICAgICByZXR1cm4gVGVybWluYWw7CiAgICAgICAgIGlmIChv
cHRpbWl6YXRpb25SZXN1bHQgPT0gQ2FsbE9wdGltaXphdGlvblJlc3VsdDo6SW5saW5lZCkgewpA
QCAtMTQ1NywxNyArMTQ1NywxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVSZWN1cnNp
dmVUYWlsQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgQ2FsbFZhcmlhbnQgYwogICAgICAgICAg
ICAgc2V0RGlyZWN0KHN0YWNrRW50cnktPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSksIHVuZGVmaW5lZCwgTm9ybWFsU2V0KTsKIAogICAgICAgICAvLyBXZSB3YW50IHRv
IGVtaXQgdGhlIFNldExvY2FscyB3aXRoIGFuIGV4aXQgb3JpZ2luIHRoYXQgcG9pbnRzIHRvIHRo
ZSBwbGFjZSB3ZSBhcmUganVtcGluZyB0by4KLSAgICAgICAgdW5zaWduZWQgb2xkSW5kZXggPSBt
X2N1cnJlbnRJbmRleDsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBvbGRJbmRleCA9IG1fY3VycmVu
dEluZGV4OwogICAgICAgICBhdXRvIG9sZFN0YWNrVG9wID0gbV9pbmxpbmVTdGFja1RvcDsKICAg
ICAgICAgbV9pbmxpbmVTdGFja1RvcCA9IHN0YWNrRW50cnk7Ci0gICAgICAgIG1fY3VycmVudElu
ZGV4ID0gb3Bjb2RlTGVuZ3Roc1tvcF9lbnRlcl07CisgICAgICAgIG1fY3VycmVudEluZGV4ID0g
Qnl0ZWNvZGVJbmRleChvcGNvZGVMZW5ndGhzW29wX2VudGVyXSk7CiAgICAgICAgIG1fZXhpdE9L
ID0gdHJ1ZTsKICAgICAgICAgcHJvY2Vzc1NldExvY2FsUXVldWUoKTsKICAgICAgICAgbV9jdXJy
ZW50SW5kZXggPSBvbGRJbmRleDsKICAgICAgICAgbV9pbmxpbmVTdGFja1RvcCA9IG9sZFN0YWNr
VG9wOwogICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOwogCi0gICAgICAgIEJhc2ljQmxvY2sqKiBl
bnRyeUJsb2NrUHRyID0gdHJ5QmluYXJ5U2VhcmNoPEJhc2ljQmxvY2sqLCB1bnNpZ25lZD4oc3Rh
Y2tFbnRyeS0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLCBzdGFja0VudHJ5LT5tX2Jsb2NrTGlua2lu
Z1RhcmdldHMuc2l6ZSgpLCBvcGNvZGVMZW5ndGhzW29wX2VudGVyXSwgZ2V0Qnl0ZWNvZGVCZWdp
bkZvckJsb2NrKTsKKyAgICAgICAgQmFzaWNCbG9jayoqIGVudHJ5QmxvY2tQdHIgPSB0cnlCaW5h
cnlTZWFyY2g8QmFzaWNCbG9jayosIEJ5dGVjb2RlSW5kZXg+KHN0YWNrRW50cnktPm1fYmxvY2tM
aW5raW5nVGFyZ2V0cywgc3RhY2tFbnRyeS0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLnNpemUoKSwg
Qnl0ZWNvZGVJbmRleChvcGNvZGVMZW5ndGhzW29wX2VudGVyXSksIGdldEJ5dGVjb2RlQmVnaW5G
b3JCbG9jayk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5QmxvY2tQdHIpOwogICAgICAg
ICBhZGRKdW1wVG8oKmVudHJ5QmxvY2tQdHIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE2
MjUsOCArMTYyNSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2Fs
bFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAgICAgICAgIChWaXJ0dWFs
UmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBraW5kLCBjb250aW51YXRpb25CbG9jayk7CiAKICAgICAvLyBUaGlzIGlzIHdoZXJlIHRoZSBh
Y3R1YWwgaW5saW5pbmcgcmVhbGx5IGhhcHBlbnMuCi0gICAgdW5zaWduZWQgb2xkSW5kZXggPSBt
X2N1cnJlbnRJbmRleDsKLSAgICBtX2N1cnJlbnRJbmRleCA9IDA7CisgICAgQnl0ZWNvZGVJbmRl
eCBvbGRJbmRleCA9IG1fY3VycmVudEluZGV4OworICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKTsKIAogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgSW5saW5lQ2FsbEZy
YW1lOjpHZXR0ZXJDYWxsOgpAQCAtMTc2MSw3ICsxNzYxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCwgQ2EKICAgICBtX2N1cnJlbnRJbnN0cnVjdGlvbiA9IHNhdmVkQ3VycmVudEluc3RydWN0aW9u
OwogfQogCi1CeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlQ2FsbFZhcmlhbnQoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQsIENhbGxWYXJpYW50IGNhbGxlZSwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0
dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlLCBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb25CbG9jaywgYm9vbCBuZWVkc1RvQ2hlY2tDYWxsZWUpCitCeXRlQ29kZVBh
cnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbFZh
cmlhbnQoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhbGxW
YXJpYW50IGNhbGxlZSwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0Fy
Z3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIEJ5dGVjb2RlSW5kZXggbmV4
dEluZGV4LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgQmFzaWNCbG9jayogY29udGludWF0aW9u
QmxvY2ssIGJvb2wgbmVlZHNUb0NoZWNrQ2FsbGVlKQogewogICAgIFZFUkJPU0VfTE9HKCIgICAg
Q29uc2lkZXJpbmcgY2FsbGVlICIsIGNhbGxlZSwgIlxuIik7CiAKQEAgLTE3ODksNyArMTc4OSw3
IEBAIEJ5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVDYWxsVmFyaWFudChOb2RlKiBjCiAgICAgICAgIGVtaXRBcmd1bWVudFBoYW50b21z
KHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgICAgIGlu
bGluaW5nQmFsYW5jZS0tOwogICAgICAgICBpZiAoY29udGludWF0aW9uQmxvY2spIHsKLSAgICAg
ICAgICAgIG1fY3VycmVudEluZGV4ID0gbmV4dE9mZnNldDsKKyAgICAgICAgICAgIG1fY3VycmVu
dEluZGV4ID0gbmV4dEluZGV4OwogICAgICAgICAgICAgbV9leGl0T0sgPSB0cnVlOwogICAgICAg
ICAgICAgcHJvY2Vzc1NldExvY2FsUXVldWUoKTsKICAgICAgICAgICAgIGFkZEp1bXBUbyhjb250
aW51YXRpb25CbG9jayk7CkBAIC0xOTcyLDcgKzE5NzIsNyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2Fs
bE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAg
Tm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIGNvbnN0IENhbGxM
aW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1
YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsCiAgICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLAotICAgIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2Fs
bEZyYW1lOjpLaW5kIGtpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgQnl0ZWNv
ZGVJbmRleCBuZXh0SW5kZXgsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5k
IGtpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiB7CiAgICAgVkVSQk9TRV9MT0coIkhh
bmRsaW5nIGlubGluaW5nLi4uXG5TdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7
CiAgICAgCkBAIC0xOTg1LDcgKzE5ODUsNyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXph
dGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAgaWYgKCFjYWxs
TGlua1N0YXR1cy5jb3VsZFRha2VTbG93UGF0aCgpICYmIGNhbGxMaW5rU3RhdHVzLnNpemUoKSA9
PSAxKSB7CiAgICAgICAgIHJldHVybiBoYW5kbGVDYWxsVmFyaWFudCgKICAgICAgICAgICAgIGNh
bGxUYXJnZXROb2RlLCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzWzBdLCByZWdpc3Rlck9mZnNldCwg
dGhpc0FyZ3VtZW50LAotICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5l
eHRPZmZzZXQsIGtpbmQsIHByZWRpY3Rpb24sIGlubGluaW5nQmFsYW5jZSwgbnVsbHB0ciwgdHJ1
ZSk7CisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dEluZGV4LCBr
aW5kLCBwcmVkaWN0aW9uLCBpbmxpbmluZ0JhbGFuY2UsIG51bGxwdHIsIHRydWUpOwogICAgIH0K
IAogICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIHNvbWUga2luZCBvZiBzd2l0Y2ggb3ZlciBjYWxs
ZWUuIEZvciBub3cgd2Ugb25seSBkbyB0aGlzIGlmIHdlIGJlbGlldmUgdGhhdApAQCAtMjA2MSw5
ICsyMDYxLDkgQEAgQnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgIAogICAgIFZFUkJPU0VfTE9HKCJBYm91dCB0
byBsb29wIG92ZXIgZnVuY3Rpb25zIGF0ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICIuXG4iKTsK
IAotICAgIHVuc2lnbmVkIG9sZE9mZnNldCA9IG1fY3VycmVudEluZGV4OworICAgIEJ5dGVjb2Rl
SW5kZXggb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY2FsbExpbmtTdGF0dXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgbV9jdXJyZW50SW5k
ZXggPSBvbGRPZmZzZXQ7CisgICAgICAgIG1fY3VycmVudEluZGV4ID0gb2xkSW5kZXg7CiAgICAg
ICAgIEJhc2ljQmxvY2sqIGNhbGxlZUVudHJ5QmxvY2sgPSBhbGxvY2F0ZVVudGFyZ2V0YWJsZUJs
b2NrKCk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrID0gY2FsbGVlRW50cnlCbG9jazsKICAgICAg
ICAgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwpAQCAtMjA3NSw3ICsyMDc1LDcgQEAgQnl0ZUNvZGVQ
YXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKAogICAgICAgICAKICAgICAgICAgYXV0byBpbmxpbmluZ1Jlc3VsdCA9IGhhbmRsZUNhbGxW
YXJpYW50KAogICAgICAgICAgICAgbXlDYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0LCBjYWxsTGlua1N0
YXR1c1tpXSwgcmVnaXN0ZXJPZmZzZXQsCi0gICAgICAgICAgICB0aGlzQXJndW1lbnQsIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBwcmVkaWN0aW9uLAorICAg
ICAgICAgICAgdGhpc0FyZ3VtZW50LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dElu
ZGV4LCBraW5kLCBwcmVkaWN0aW9uLAogICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlLCBjb250
aW51YXRpb25CbG9jaywgZmFsc2UpOwogICAgICAgICAKICAgICAgICAgaWYgKGlubGluaW5nUmVz
dWx0ID09IENhbGxPcHRpbWl6YXRpb25SZXN1bHQ6OkRpZE5vdGhpbmcpIHsKQEAgLTIxMDQsNyAr
MjEwNCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbmxpbmluZygKIAogICAgIC8vIFNsb3cgcGF0aCBibG9jawogICAgIG1f
Y3VycmVudEJsb2NrID0gYWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpOwotICAgIG1fY3VycmVu
dEluZGV4ID0gb2xkT2Zmc2V0OworICAgIG1fY3VycmVudEluZGV4ID0gb2xkSW5kZXg7CiAgICAg
bV9leGl0T0sgPSB0cnVlOwogICAgIGRhdGEuZmFsbFRocm91Z2ggPSBCcmFuY2hUYXJnZXQobV9j
dXJyZW50QmxvY2spOwogICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKQEAgLTIxMjQsNyArMjEy
NCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbmxpbmluZygKICAgICAgICAgVkVSQk9TRV9MT0coImNvdWxkVGFrZVNsb3dQ
YXRoIHdhcyBmYWxzZVxuIik7CiAgICAgfQogCi0gICAgbV9jdXJyZW50SW5kZXggPSBuZXh0T2Zm
c2V0OworICAgIG1fY3VycmVudEluZGV4ID0gbmV4dEluZGV4OwogICAgIG1fZXhpdE9LID0gdHJ1
ZTsgLy8gT3JpZ2luIGNoYW5nZWQsIHNvIGl0J3MgZmluZSB0byBleGl0IGFnYWluLgogICAgIHBy
b2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CiAKQEAgLTIxMzYsNyArMjEzNiw3IEBAIEJ5dGVDb2RlUGFy
c2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmlu
ZygKIAogICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICAKLSAgICBtX2N1cnJlbnRJbmRl
eCA9IG9sZE9mZnNldDsKKyAgICBtX2N1cnJlbnRJbmRleCA9IG9sZEluZGV4OwogICAgIG1fY3Vy
cmVudEJsb2NrID0gY29udGludWF0aW9uQmxvY2s7CiAgICAgbV9leGl0T0sgPSB0cnVlOwogICAg
IApAQCAtNDY5MywxNCArNDY5MywxNCBAQCBzdGF0aWMgdWludDY0X3QgbWFrZUR5bmFtaWNWYXJP
cEluZm8odW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgdW5zaWduZWQgZ2V0UHV0SQogLy8gRG9l
c24ndCBhbGxvdyB1c2luZyBgY29udGludWVgLgogI2RlZmluZSBORVhUX09QQ09ERShuYW1lKSBc
CiAgICAgaWYgKHRydWUpIHsgXAotICAgICAgICBtX2N1cnJlbnRJbmRleCArPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPnNpemUoKTsgXAorICAgICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7
IFwKICAgICAgICAgZ290byBXVEZfQ09OQ0FUKE5FWFRfT1BDT0RFXywgX19MSU5FX18pOyAvKiBO
ZWVkIGEgdW5pcXVlIGxhYmVsOiB1c2FibGUgbW9yZSB0aGFuIG9uY2UgcGVyIGZ1bmN0aW9uLiAq
LyBcCiAgICAgfSBlbHNlIFwKICAgICAgICAgV1RGX0NPTkNBVChORVhUX09QQ09ERV8sIF9fTElO
RV9fKTogXAogICAgIGNvbnRpbnVlCiAKICNkZWZpbmUgTEFTVF9PUENPREVfTElOS0VEKG5hbWUp
IGRvIHsgXAotICAgICAgICBtX2N1cnJlbnRJbmRleCArPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNp
emUoKTsgXAorICAgICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50
SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IFwKICAgICAgICAg
bV9leGl0T0sgPSBmYWxzZTsgXAogICAgICAgICByZXR1cm47IFwKICAgICB9IHdoaWxlIChmYWxz
ZSkKQEAgLTQ3MjQsNyArNDcyNCw3IEBAIHN0YXRpYyB1aW50NjRfdCBtYWtlRHluYW1pY1Zhck9w
SW5mbyh1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCB1bnNpZ25lZCBnZXRQdXRJCiB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogewogICAgIGF1dG8mIGlu
c3RydWN0aW9ucyA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KTsKLSAgICB1bnNpZ25lZCBibG9ja0JlZ2luID0gbV9jdXJyZW50SW5kZXg7CisgICAgQnl0ZWNv
ZGVJbmRleCBibG9ja0JlZ2luID0gbV9jdXJyZW50SW5kZXg7CiAKICAgICAvLyBJZiB3ZSBhcmUg
dGhlIGZpcnN0IGJhc2ljIGJsb2NrLCBpbnRyb2R1Y2UgbWFya2VycyBmb3IgYXJndW1lbnRzLiBU
aGlzIGFsbG93cwogICAgIC8vIHVzIHRvIHRyYWNrIGlmIGEgdXNlIG9mIGFuIGFyZ3VtZW50IG1h
eSB1c2UgdGhlIGFjdHVhbCBhcmd1bWVudCBwYXNzZWQsIGFzCkBAIC00NzY4LDcgKzQ3NjgsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAg
ICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogICAgICAgICAKICAgICAgICAgLy8gRG9uJ3QgZXh0
ZW5kIG92ZXIganVtcCBkZXN0aW5hdGlvbnMuCi0gICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA9
PSBsaW1pdCkgeworICAgICAgICBpZiAobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgPT0gbGltaXQp
IHsKICAgICAgICAgICAgIC8vIE9yZGluYXJpbHkgd2Ugd2FudCB0byBwbGFudCBhIGp1bXAuIEJ1
dCByZWZ1c2UgdG8gZG8gdGhpcyBpZiB0aGUgYmxvY2sgaXMKICAgICAgICAgICAgIC8vIGVtcHR5
LiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGZvciBpbmxpbmluZywgd2hpY2ggbWlnaHQgb3RoZXJ3
aXNlIGNyZWF0ZQogICAgICAgICAgICAgLy8gc29tZSBlbXB0eSBibG9ja3MgaW4gc29tZSBjYXNl
cy4gV2hlbiBwYXJzZUJsb2NrKCkgcmV0dXJucyB3aXRoIGFuIGVtcHR5CkBAIC00Nzc4LDcgKzQ3
NzgsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQog
ICAgICAgICAgICAgLy8gdG8gYmUgdHJ1ZS4KIAogICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRC
bG9jay0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGFkZEp1bXBUbyhtX2N1cnJlbnRJbmRl
eCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcFRvKG1fY3VycmVudEluZGV4Lm9mZnNldCgpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTU4MDMsNyArNTgw
Myw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAg
ICAgICAgICAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKTsKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm1wPigpOwogICAg
ICAgICAgICAgaW50IHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVudElu
ZGV4ICsgcmVsYXRpdmVPZmZzZXQpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJ
bmZvKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQpKTsKICAgICAgICAg
ICAgIGlmIChyZWxhdGl2ZU9mZnNldCA8PSAwKQogICAgICAgICAgICAgICAgIGZsdXNoRm9yVGVy
bWluYWwoKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2ptcCk7CkBAIC01ODEzLDcgKzU4
MTMsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQog
ICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1
ZT4oKTsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGdl
dChieXRlY29kZS5tX2NvbmRpdGlvbik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwg
T3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJy
ZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOworICAg
ICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudElu
ZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsg
Y3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExB
U1RfT1BDT0RFKG9wX2p0cnVlKTsKICAgICAgICAgfQogCkBAIC01ODIxLDcgKzU4MjEsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7CiAg
ICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBnZXQoYnl0ZWNv
ZGUubV9jb25kaXRpb24pOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhi
cmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1f
Y3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAg
IGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZz
ZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleC5vZmZzZXQo
KSArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09E
RShvcF9qZmFsc2UpOwogICAgICAgICB9CiAKQEAgLTU4MzEsNyArNTgzMSw3IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIE5vZGUqIG51bGxD
b25zdGFudCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROdWxsKSk7
CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcSwgdmFs
dWUsIG51bGxDb25zdGFudCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZv
KGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5k
ZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOworICAgICAgICAg
ICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9m
ZnNldCgpICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVu
dEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BD
T0RFKG9wX2plcV9udWxsKTsKICAgICAgICAgfQogCkBAIC01ODQxLDcgKzU4NDEsNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAg
Tm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBOb2RlKiBu
dWxsQ29uc3RhbnQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TnVs
bCkpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEs
IHZhbHVlLCBudWxsQ29uc3RhbnQpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9w
SW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCksIG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKKyAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRl
eC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleC5v
ZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9qbmVxX251bGwpOwogICAgICAgICB9CiAKQEAgLTU4NTAsNyArNTg1MCw3IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAg
ICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVl
KTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoSXNVbmRlZmluZWRP
ck51bGwsIHZhbHVlKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJh
bmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCAr
IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBh
ZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0
KCkgKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5z
dHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUo
b3BfanVuZGVmaW5lZF9vcl9udWxsKTsKICAgICAgICAgfQogCkBAIC01ODU5LDcgKzU4NTksNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAg
ICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1
ZSk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKElzVW5kZWZpbmVk
T3JOdWxsLCB2YWx1ZSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJy
YW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9j
dXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOworICAgICAgICAgICAg
YWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNl
dCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4Lm9mZnNldCgp
ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RF
KG9wX2pudW5kZWZpbmVkX29yX251bGwpOwogICAgICAgICB9CiAKQEAgLTU4NjksNyArNTg2OSw3
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAg
ICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOwogICAgICAgICAgICAgTm9k
ZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlv
biA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3MsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRv
R3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZl
T2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNv
bmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERh
dGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5k
ZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwog
ICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfamxlc3MpOwogICAgICAgICB9CiAKQEAgLTU4Nzks
NyArNTg3OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpCiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOwogICAgICAg
ICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUq
IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpOwotICAgICAg
ICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4
ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCkpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcElu
Zm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0LCBt
X2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNv
bmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbGVzc2VxKTsKICAgICAgICAg
fQogCkBAIC01ODg5LDcgKzU4ODksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1f
bGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAg
ICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyLCBvcDEs
IG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEo
bV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFw
aChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVs
YXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9u
LT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pncmVh
dGVyKTsKICAgICAgICAgfQogCkBAIC01ODk5LDcgKzU4OTksNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0g
Z2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29k
ZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBh
cmVHcmVhdGVyRXEsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBP
cEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJl
bnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CisgICAg
ICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5k
ZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFT
VF9PUENPREUob3BfamdyZWF0ZXJlcSk7CiAgICAgICAgIH0KIApAQCAtNTkwOSw3ICs1OTA5LDcg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAg
ICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CiAgICAgICAgICAgICBOb2Rl
KiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9u
ID0gYWRkVG9HcmFwaChDb21wYXJlRXEsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zm
c2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRp
dGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEo
bV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXgu
b2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwogICAg
ICAgICAgICAgTEFTVF9PUENPREUob3BfamVxKTsKICAgICAgICAgfQogCkBAIC01OTE5LDcgKzU5
MTksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQog
ICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAg
IE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25k
aXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVTdHJpY3RFcSwgb3AxLCBvcDIpOwotICAgICAgICAg
ICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsg
cmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCkpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8o
YnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1
cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRp
dGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qc3RyaWN0ZXEpOwogICAgICAgICB9
CiAKQEAgLTU5MjksNyArNTkyOSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9s
aHMpOwogICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAg
ICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3MsIG9wMSwgb3Ay
KTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1
cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCAr
IHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJy
YW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9m
ZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5sZXNzKTsK
ICAgICAgICAgfQogCkBAIC01OTM5LDcgKzU5MzksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5
dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jo
cyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNz
RXEsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJh
bmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1
cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBh
ZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0
KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkg
KyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUo
b3Bfam5sZXNzZXEpOwogICAgICAgICB9CiAKQEAgLTU5NDksNyArNTk0OSw3IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2Rl
KiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOwogICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0
KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3Jh
cGgoQ29tcGFyZUdyZWF0ZXIsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJh
bmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlv
bi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7
CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJy
ZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50
SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAg
ICAgTEFTVF9PUENPREUob3Bfam5ncmVhdGVyKTsKICAgICAgICAgfQogCkBAIC01OTU5LDcgKzU5
NTksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQog
ICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKICAgICAgICAgICAg
IE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25k
aXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyRXEsIG9wMSwgb3AyKTsKLSAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCAr
IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zm
c2V0KSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZv
KGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24t
PnNpemUoKSwgbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyByZWxhdGl2ZU9mZnNldCkpLCBjb25k
aXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5ncmVhdGVyZXEpOwogICAgICAg
ICB9CiAKQEAgLTU5NjksNyArNTk2OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUu
bV9saHMpOwogICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAg
ICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxLCBvcDEsIG9w
Mik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9j
dXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXgg
KyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChC
cmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVu
dEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVP
ZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2puZXEpOwog
ICAgICAgICB9CiAKQEAgLTU5NzksNyArNTk3OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0
ZWNvZGUubV9saHMpOwogICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhz
KTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZVN0cmlj
dEVxLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJy
YW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9j
dXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOworICAgICAgICAgICAg
YWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4Lm9mZnNl
dCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4Lm9mZnNldCgp
ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RF
KG9wX2puc3RyaWN0ZXEpOwogICAgICAgICB9CiAKQEAgLTU5ODksNyArNTk4OSw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBO
b2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOwogICAgICAgICAgICAgTm9kZSogb3AyID0g
Z2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRv
R3JhcGgoQ29tcGFyZUJlbG93LCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJy
YW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwg
bV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24p
OworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3Vy
cmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4Lm9mZnNl
dCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAg
ICAgIExBU1RfT1BDT0RFKG9wX2piZWxvdyk7CiAgICAgICAgIH0KIApAQCAtNTk5OSw3ICs1OTk5
LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAg
ICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CiAgICAgICAgICAgICBO
b2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0
aW9uID0gYWRkVG9HcmFwaChDb21wYXJlQmVsb3dFcSwgb3AxLCBvcDIpOwotICAgICAgICAgICAg
YWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVs
YXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkp
KSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJh
bmNoRGF0YShtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJl
bnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlv
bik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qYmVsb3dlcSk7CiAgICAgICAgIH0KIApA
QCAtNjAwOCwxMiArNjAwOCwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgU3dpdGNoRGF0YSYgZGF0YSA9ICptX2dyYXBoLm1f
c3dpdGNoRGF0YS5hZGQoKTsKICAgICAgICAgICAgIGRhdGEua2luZCA9IFN3aXRjaEltbTsKICAg
ICAgICAgICAgIGRhdGEuc3dpdGNoVGFibGVJbmRleCA9IG1faW5saW5lU3RhY2tUb3AtPm1fc3dp
dGNoUmVtYXBbYnl0ZWNvZGUubV90YWJsZUluZGV4XTsKLSAgICAgICAgICAgIGRhdGEuZmFsbFRo
cm91Z2guc2V0Qnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleCArIGp1bXBUYXJnZXQoYnl0ZWNv
ZGUubV9kZWZhdWx0T2Zmc2V0KSk7CisgICAgICAgICAgICBkYXRhLmZhbGxUaHJvdWdoLnNldEJ5
dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBqdW1wVGFyZ2V0KGJ5dGVjb2Rl
Lm1fZGVmYXVsdE9mZnNldCkpOwogICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9
IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS5icmFuY2hPZmZzZXRzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCF0YWJsZS5icmFuY2hPZmZzZXRzW2ld
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBtX2N1cnJlbnRJbmRleCArIHRhYmxlLmJyYW5jaE9mZnNldHNbaV07CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyB0
YWJsZS5icmFuY2hPZmZzZXRzW2ldOwogICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gZGF0
YS5mYWxsVGhyb3VnaC5ieXRlY29kZUluZGV4KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKFN3aXRjaENhc2U6OndpdGhC
eXRlY29kZUluZGV4KG1fZ3JhcGguZnJlZXplKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+
KHRhYmxlLm1pbiArIGkpKSksIHRhcmdldCkpOwpAQCAtNjAyOCwxMiArNjAyOCwxMiBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAg
U3dpdGNoRGF0YSYgZGF0YSA9ICptX2dyYXBoLm1fc3dpdGNoRGF0YS5hZGQoKTsKICAgICAgICAg
ICAgIGRhdGEua2luZCA9IFN3aXRjaENoYXI7CiAgICAgICAgICAgICBkYXRhLnN3aXRjaFRhYmxl
SW5kZXggPSBtX2lubGluZVN0YWNrVG9wLT5tX3N3aXRjaFJlbWFwW2J5dGVjb2RlLm1fdGFibGVJ
bmRleF07Ci0gICAgICAgICAgICBkYXRhLmZhbGxUaHJvdWdoLnNldEJ5dGVjb2RlSW5kZXgobV9j
dXJyZW50SW5kZXggKyBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCkpOworICAg
ICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5zZXRCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4
Lm9mZnNldCgpICsganVtcFRhcmdldChieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpKTsKICAgICAg
ICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRh
YmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdGFibGUuYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
ICAgIGlmICghdGFibGUuYnJhbmNoT2Zmc2V0c1tpXSkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9jdXJyZW50SW5kZXgg
KyB0YWJsZS5icmFuY2hPZmZzZXRzW2ldOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdl
dCA9IG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgdGFibGUuYnJhbmNoT2Zmc2V0c1tpXTsKICAg
ICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2guYnl0ZWNvZGVJbmRl
eCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBkYXRh
LmNhc2VzLmFwcGVuZCgKQEAgLTYwNDksMTIgKzYwNDksMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIFN3aXRjaERhdGEmIGRh
dGEgPSAqbV9ncmFwaC5tX3N3aXRjaERhdGEuYWRkKCk7CiAgICAgICAgICAgICBkYXRhLmtpbmQg
PSBTd2l0Y2hTdHJpbmc7CiAgICAgICAgICAgICBkYXRhLnN3aXRjaFRhYmxlSW5kZXggPSBieXRl
Y29kZS5tX3RhYmxlSW5kZXg7Ci0gICAgICAgICAgICBkYXRhLmZhbGxUaHJvdWdoLnNldEJ5dGVj
b2RlSW5kZXgobV9jdXJyZW50SW5kZXggKyBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fZGVmYXVsdE9m
ZnNldCkpOworICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5zZXRCeXRlY29kZUluZGV4KG1f
Y3VycmVudEluZGV4Lm9mZnNldCgpICsganVtcFRhcmdldChieXRlY29kZS5tX2RlZmF1bHRPZmZz
ZXQpKTsKICAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+
c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgICAg
ICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBpdGVyOwogICAg
ICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5k
ID0gdGFibGUub2Zmc2V0VGFibGUuZW5kKCk7CiAgICAgICAgICAgICBmb3IgKGl0ZXIgPSB0YWJs
ZS5vZmZzZXRUYWJsZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAg
ICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9jdXJyZW50SW5kZXggKyBpdGVyLT52YWx1ZS5icmFu
Y2hPZmZzZXQ7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9jdXJyZW50SW5k
ZXgub2Zmc2V0KCkgKyBpdGVyLT52YWx1ZS5icmFuY2hPZmZzZXQ7CiAgICAgICAgICAgICAgICAg
aWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoLmJ5dGVjb2RlSW5kZXgoKSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQo
CkBAIC02MDc5LDcgKzYwNzksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJu
VmFsdWUuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHNldERpcmVjdChtX2lubGluZVN0YWNr
VG9wLT5tX3JldHVyblZhbHVlLCBnZXQoYnl0ZWNvZGUubV92YWx1ZSksIEltbWVkaWF0ZVNldFdp
dGhGbHVzaCk7CiAKLSAgICAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9jb250aW51
YXRpb25CbG9jayAmJiBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
ICE9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkp
IHsKKyAgICAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9jb250aW51YXRpb25CbG9j
ayAmJiBtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
ICE9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkp
IHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGVhcmx5IHJldHVybiBmcm9tIGFuIGlu
bGluZWQgZnVuY3Rpb24gYW5kIHdlIGRvIG5vdCBoYXZlIGEgY29udGludWF0aW9uIGJsb2NrLCBz
byB3ZSBtdXN0IGFsbG9jYXRlIG9uZS4KICAgICAgICAgICAgICAgICAvLyBJdCBpcyB1bnRhcmdl
dGFibGUsIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgdGhlIGFwcHJvcHJpYXRlIGluZGV4LgogICAg
ICAgICAgICAgICAgIC8vIElmIHRoaXMgYmxvY2sgdHVybnMgb3V0IHRvIGJlIGEganVtcCB0YXJn
ZXQsIHBhcnNlQ29kZUJsb2NrIHdpbGwgZml4IGl0cyBieXRlY29kZUluZGV4IGJlZm9yZSBwdXR0
aW5nIGl0IGluIG1fYmxvY2tMaW5raW5nVGFyZ2V0cwpAQCAtNjIwNyw3ICs2MjA3LDcgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAg
ICAgICBBcmd1bWVudHNWZWN0b3ImIGVudHJ5cG9pbnRBcmd1bWVudHMgPSBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlOwogICAgICAgICAgICAgICAgIGVudHJ5cG9pbnRBcmd1bWVudHMucmVzaXpl
KG1fbnVtQXJndW1lbnRzKTsKIAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4aXRCeXRlY29k
ZUluZGV4ID0gbV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAg
ICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGV4aXRCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
KTsKIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVu
dCA8IGFyZ3VtZW50UHJlZGljdGlvbnMuc2l6ZSgpOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKTsKQEAgLTYzMTYsNyAr
NjMxNiw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQp
CiAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICAg
ICAgICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1faGFzSnVtcGVkKSB7CiAg
ICAgICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXFQdHIs
IE9wSW5mbyhmcm96ZW5Qb2ludGVyKSwgY2hpbGQpOwotICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0
cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRp
dGlvbik7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hE
YXRhKG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCks
IG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsK
ICAgICAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmVxX3B0cik7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrQ2VsbCwgT3BJbmZvKGZyb3plblBvaW50ZXIp
LCBjaGlsZCk7CkBAIC03MTM1LDIxICs3MTM1LDIxIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omxp
bmtCbG9jayhCYXNpY0Jsb2NrKiBibG9jaywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVU
CiAgICAgCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKdW1wOgotICAgICAg
ICBub2RlLT50YXJnZXRCbG9jaygpID0gYmxvY2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRh
cmdldHMsIG5vZGUtPnRhcmdldEJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKTsKKyAgICAg
ICAgbm9kZS0+dGFyZ2V0QmxvY2soKSA9IGJsb2NrRm9yQnl0ZWNvZGVJbmRleChwb3NzaWJsZVRh
cmdldHMsIEJ5dGVjb2RlSW5kZXgobm9kZS0+dGFyZ2V0Qnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJz
aW5nKCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQnJhbmNoOiB7CiAg
ICAgICAgIEJyYW5jaERhdGEqIGRhdGEgPSBub2RlLT5icmFuY2hEYXRhKCk7Ci0gICAgICAgIGRh
dGEtPnRha2VuLmJsb2NrID0gYmxvY2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMs
IGRhdGEtPnRha2VuQnl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgZGF0YS0+bm90VGFrZW4uYmxv
Y2sgPSBibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgZGF0YS0+bm90VGFr
ZW5CeXRlY29kZUluZGV4KCkpOworICAgICAgICBkYXRhLT50YWtlbi5ibG9jayA9IGJsb2NrRm9y
Qnl0ZWNvZGVJbmRleChwb3NzaWJsZVRhcmdldHMsIEJ5dGVjb2RlSW5kZXgoZGF0YS0+dGFrZW5C
eXRlY29kZUluZGV4KCkpKTsKKyAgICAgICAgZGF0YS0+bm90VGFrZW4uYmxvY2sgPSBibG9ja0Zv
ckJ5dGVjb2RlSW5kZXgocG9zc2libGVUYXJnZXRzLCBCeXRlY29kZUluZGV4KGRhdGEtPm5vdFRh
a2VuQnl0ZWNvZGVJbmRleCgpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAg
ICAgY2FzZSBTd2l0Y2g6IHsKICAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IG5vZGUtPnN3aXRj
aERhdGEoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+c3dpdGNoRGF0YSgpLT5j
YXNlcy5zaXplKCk7IGktLTspCi0gICAgICAgICAgICBkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxv
Y2sgPSBibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgZGF0YS0+Y2FzZXNb
aV0udGFyZ2V0LmJ5dGVjb2RlSW5kZXgoKSk7Ci0gICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJs
b2NrID0gYmxvY2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIGRhdGEtPmZhbGxU
aHJvdWdoLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICBkYXRhLT5jYXNlc1tpXS50YXJn
ZXQuYmxvY2sgPSBibG9ja0ZvckJ5dGVjb2RlSW5kZXgocG9zc2libGVUYXJnZXRzLCBCeXRlY29k
ZUluZGV4KGRhdGEtPmNhc2VzW2ldLnRhcmdldC5ieXRlY29kZUluZGV4KCkpKTsKKyAgICAgICAg
ZGF0YS0+ZmFsbFRocm91Z2guYmxvY2sgPSBibG9ja0ZvckJ5dGVjb2RlSW5kZXgocG9zc2libGVU
YXJnZXRzLCBCeXRlY29kZUluZGV4KGRhdGEtPmZhbGxUaHJvdWdoLmJ5dGVjb2RlSW5kZXgoKSkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNzMyMyw3ICs3MzIzLDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgIGZvciAodW5zaWduZWQg
anVtcFRhcmdldEluZGV4ID0gMDsganVtcFRhcmdldEluZGV4IDw9IGp1bXBUYXJnZXRzLnNpemUo
KTsgKytqdW1wVGFyZ2V0SW5kZXgpIHsKICAgICAgICAgLy8gVGhlIG1heGltdW0gYnl0ZWNvZGUg
b2Zmc2V0IHRvIGdvIGludG8gdGhlIGN1cnJlbnQgYmFzaWNibG9jayBpcyBlaXRoZXIgdGhlIG5l
eHQganVtcCB0YXJnZXQsIG9yIHRoZSBlbmQgb2YgdGhlIGluc3RydWN0aW9ucy4KICAgICAgICAg
dW5zaWduZWQgbGltaXQgPSBqdW1wVGFyZ2V0SW5kZXggPCBqdW1wVGFyZ2V0cy5zaXplKCkgPyBq
dW1wVGFyZ2V0c1tqdW1wVGFyZ2V0SW5kZXhdIDogY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5z
aXplKCk7Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA8IGxpbWl0KTsKKyAgICAgICAg
QVNTRVJUKG1fY3VycmVudEluZGV4Lm9mZnNldCgpIDwgbGltaXQpOwogCiAgICAgICAgIC8vIExv
b3AgdW50aWwgd2UgcmVhY2ggdGhlIGN1cnJlbnQgbGltaXQgKGkuZS4gbmV4dCBqdW1wIHRhcmdl
dCkuCiAgICAgICAgIGRvIHsKQEAgLTczNDYsMjMgKzczNDYsMjMgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgICAgICAgICAgcGFyc2VCbG9jayhsaW1pdCk7CiAK
ICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBub3QgaGF2ZSBnb25lIGJleW9uZCB0aGUgbGltaXQu
Ci0gICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50SW5kZXggPD0gbGltaXQpOworICAgICAgICAg
ICAgQVNTRVJUKG1fY3VycmVudEluZGV4Lm9mZnNldCgpIDw9IGxpbWl0KTsKIAogICAgICAgICAg
ICAgaWYgKG1fY3VycmVudEJsb2NrLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBU
aGlzIGNhc2Ugb25seSBoYXBwZW5zIGlmIHRoZSBsYXN0IGluc3RydWN0aW9uIHdhcyBhbiBpbmxp
bmVkIGNhbGwgd2l0aCBlYXJseSByZXR1cm5zCiAgICAgICAgICAgICAgICAgLy8gb3IgcG9seW1v
cnBoaWMgKGNyZWF0aW5nIGFuIGVtcHR5IGNvbnRpbnVhdGlvbiBibG9jayksCiAgICAgICAgICAg
ICAgICAgLy8gYW5kIHRoZW4gd2UgaGl0IHRoZSBsaW1pdCBiZWZvcmUgcHV0dGluZyBhbnl0aGlu
ZyBpbiB0aGUgY29udGludWF0aW9uIGJsb2NrLgotICAgICAgICAgICAgICAgIEFTU0VSVChtX2N1
cnJlbnRJbmRleCA9PSBsaW1pdCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudElu
ZGV4Lm9mZnNldCgpID09IGxpbWl0KTsKICAgICAgICAgICAgICAgICBtYWtlQmxvY2tUYXJnZXRh
YmxlKG1fY3VycmVudEJsb2NrLCBtX2N1cnJlbnRJbmRleCk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKSB8fCAo
bV9jdXJyZW50SW5kZXggPT0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgJiYgaW5s
aW5lQ2FsbEZyYW1lKCkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2st
PnRlcm1pbmFsKCkgfHwgKG1fY3VycmVudEluZGV4Lm9mZnNldCgpID09IGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpICYmIGlubGluZUNhbGxGcmFtZSgpKSk7CiAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwogICAgICAgICAgICAgfQotICAgICAgICB9IHdo
aWxlIChtX2N1cnJlbnRJbmRleCA8IGxpbWl0KTsKKyAgICAgICAgfSB3aGlsZSAobV9jdXJyZW50
SW5kZXgub2Zmc2V0KCkgPCBsaW1pdCk7CiAgICAgfQogCiAgICAgLy8gU2hvdWxkIGhhdmUgcmVh
Y2hlZCB0aGUgZW5kIG9mIHRoZSBpbnN0cnVjdGlvbnMuCi0gICAgQVNTRVJUKG1fY3VycmVudElu
ZGV4ID09IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9j
dXJyZW50SW5kZXgub2Zmc2V0KCkgPT0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkp
OwogICAgIAogICAgIFZFUkJPU0VfTE9HKCJEb25lIHBhcnNpbmcgIiwgKmNvZGVCbG9jaywgIiAo
ZmVsbCBvZmYgZW5kKVxuIik7CiB9CkBAIC03NTI1LDcgKzc1MjUsNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVDcmVhdGVJbnRlcm5hbEZpZWxkT2JqZWN0KGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvLAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogewogICAgIC8vIFNldCBk
dXJpbmcgY29uc3RydWN0aW9uLgotICAgIEFTU0VSVCghbV9jdXJyZW50SW5kZXgpOworICAgIEFT
U0VSVCghbV9jdXJyZW50SW5kZXgub2Zmc2V0KCkpOwogICAgIAogICAgIFZFUkJPU0VfTE9HKCJQ
YXJzaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAppbmRleCA3YzgwNzUwYWVkZGQ3YzAwMzhiOWE1OWIz
OTUzZDYwZmNiMGFhNGZhLi43OTg3Yjg3MGZkNTA5ZjkzMDAwN2UzNTZhYzA1NWVhNjZiZmU3YWRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKQEAgLTU2
LDcgKzU2LDcgQEAgQ2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRDb2RlT3JpZ2luKENvZGVP
cmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgY29kZU9yaWdpbnMuYXBwZW5kKGNvZGVPcmlnaW4p
OwogICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsKICAgICBBU1NF
UlQoY29kZU9yaWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4pOwotICAgIHJldHVybiBDYWxsU2l0
ZUluZGV4KGluZGV4KTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGlu
ZGV4KSk7CiB9CiAKIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkVW5pcXVlQ2FsbFNpdGVJ
bmRleChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCkBAIC02NCwxMyArNjQsMTMgQEAgQ2FsbFNpdGVJ
bmRleCBDb21tb25EYXRhOjphZGRVbmlxdWVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9y
aWdpbikKICAgICBjb2RlT3JpZ2lucy5hcHBlbmQoY29kZU9yaWdpbik7CiAgICAgdW5zaWduZWQg
aW5kZXggPSBjb2RlT3JpZ2lucy5zaXplKCkgLSAxOwogICAgIEFTU0VSVChjb2RlT3JpZ2luc1tp
bmRleF0gPT0gY29kZU9yaWdpbik7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoaW5kZXgpOwor
ICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKIH0KIAogQ2Fs
bFNpdGVJbmRleCBDb21tb25EYXRhOjpsYXN0Q2FsbFNpdGUoKSBjb25zdAogewogICAgIFJFTEVB
U0VfQVNTRVJUKGNvZGVPcmlnaW5zLnNpemUoKSk7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgo
Y29kZU9yaWdpbnMuc2l6ZSgpIC0gMSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleChjb2RlT3JpZ2lucy5zaXplKCkgLSAxKSk7CiB9CiAKIERpc3Bvc2FibGVDYWxsU2l0
ZUluZGV4IENvbW1vbkRhdGE6OmFkZERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4g
Y29kZU9yaWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKaW5k
ZXggNGIyMTY3ZmQ4NGQ2ZjZmZDkxOWY5NzJhOTI5MmMxZjBjMWVhODMyYi4uMmVkODMwZmRjM2E0
OWYwNDkyZDhmODA2NWMyNTEyODBhZTUzNDhkZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb25EYXRhLmgKQEAgLTk0LDE0ICs5NCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBp
bnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoQ29kZUJsb2NrKiBvd25lcik7CiAgICAgYm9vbCBpc1ZN
VHJhcEJyZWFrcG9pbnQodm9pZCogYWRkcmVzcyk7CiAKLSAgICBDYXRjaEVudHJ5cG9pbnREYXRh
KiBjYXRjaE9TUkVudHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkKKyAgICBDYXRjaEVudHJ5cG9pbnREYXRhKiBjYXRjaE9TUkVudHJ5RGF0YUZvckJ5dGVjb2Rl
SW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IHRyeUJpbmFyeVNlYXJjaDxDYXRjaEVudHJ5cG9pbnREYXRhLCB1bnNpZ25lZD4oCisgICAgICAg
IHJldHVybiB0cnlCaW5hcnlTZWFyY2g8Q2F0Y2hFbnRyeXBvaW50RGF0YSwgQnl0ZWNvZGVJbmRl
eD4oCiAgICAgICAgICAgICBjYXRjaEVudHJ5cG9pbnRzLCBjYXRjaEVudHJ5cG9pbnRzLnNpemUo
KSwgYnl0ZWNvZGVJbmRleCwKICAgICAgICAgICAgIFtdIChjb25zdCBDYXRjaEVudHJ5cG9pbnRE
YXRhKiBpdGVtKSB7IHJldHVybiBpdGVtLT5ieXRlY29kZUluZGV4OyB9KTsKICAgICB9CiAKLSAg
ICB2b2lkIGFwcGVuZENhdGNoRW50cnlwb2ludCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbWFjaGluZUNvZGUsIFZl
Y3RvcjxGbHVzaEZvcm1hdD4mJiBhcmd1bWVudEZvcm1hdHMpCisgICAgdm9pZCBhcHBlbmRDYXRj
aEVudHJ5cG9pbnQoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gbWFjaGluZUNvZGUsIFZlY3RvcjxGbHVzaEZv
cm1hdD4mJiBhcmd1bWVudEZvcm1hdHMpCiAgICAgewogICAgICAgICBjYXRjaEVudHJ5cG9pbnRz
LmFwcGVuZChDYXRjaEVudHJ5cG9pbnREYXRhIHsgbWFjaGluZUNvZGUsICBXVEZNb3ZlKGFyZ3Vt
ZW50Rm9ybWF0cyksIGJ5dGVjb2RlSW5kZXggfSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCmluZGV4IGRiNjlmMWJkZDYzZDExNWFmYjVlNWQwZmFkYjg0MDcx
MTMyYTRjOWQuLjE3YjM3MDc1OGMwNTM4NzAzYjdkNzllZTYyMjcyZDQ3OTk5OGI1MzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKQEAgLTcwLDcgKzcwLDcgQEAgc3Rh
dGljIEZ1bmN0aW9uV2hpdGVsaXN0JiBlbnN1cmVHbG9iYWxERkdXaGl0ZWxpc3QoKQogCiBzdGF0
aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25N
b2RlIG1vZGUsCi0gICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVy
YW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMsCisgICAgQnl0ZWNvZGVJ
bmRleCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFs
dWU+PiYgbXVzdEhhbmRsZVZhbHVlcywKICAgICBSZWY8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrPiYmIGNhbGxiYWNrKQogewogICAgIGlmICghT3B0aW9uczo6Ynl0ZWNvZGVSYW5nZVRvREZH
Q29tcGlsZSgpLmlzSW5SYW5nZShjb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkKQEAgLTEx
Niw3ICsxMTYsNyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiB9CiAj
ZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxl
SW1wbCgKLSAgICBWTSYsIENvZGVCbG9jayosIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwg
dW5zaWduZWQsIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYsCisgICAgVk0mLCBD
b2RlQmxvY2sqLCBDb2RlQmxvY2sqLCBDb21waWxhdGlvbk1vZGUsIEJ5dGVjb2RlSW5kZXgsIGNv
bnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYsCiAgICAgUmVmPERlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaz4mJikKIHsKICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CkBAIC0x
MjUsNyArMTI1LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogCiBD
b21waWxhdGlvblJlc3VsdCBjb21waWxlKAogICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2Rl
LAotICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8T3B0
aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIEJ5dGVjb2RlSW5kZXggb3Ny
RW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11
c3RIYW5kbGVWYWx1ZXMsCiAgICAgUmVmPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4mJiBj
YWxsYmFjaykKIHsKICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBjb21waWxlSW1wbCgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCmluZGV4IDAxZjc0ZWVjZjAzNmNkOWY5
YzA3NzhjNzYzODk3MjBjMDM5MTNjN2UuLmM3YmE3ZjZhYzc3ZWRiNmQzOGRhMWJjYmZhNGZmZmMx
ZDc0ODU5ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaApAQCAtNDIsNyAr
NDIsNyBAQCBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBnZXROdW1Db21waWxhdGlvbnMoKTsK
IC8vIGNvbXBpbGUuIEV2ZW4gaWYgd2UgZG8gYSBzeW5jaHJvbm91cyBjb21waWxlLCB3ZSBjYWxs
IHRoZSBjYWxsYmFjayB3aXRoIHRoZSByZXN1bHQuCiBDb21waWxhdGlvblJlc3VsdCBjb21waWxl
KAogICAgIFZNJiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywg
Q29tcGlsYXRpb25Nb2RlLAotICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29u
c3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIEJ5
dGVjb2RlSW5kZXggb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxPcHRpb25h
bDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMsCiAgICAgUmVmPERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjaz4mJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggOWQ1YjdkOTMzN2MyMWQzODIxZDVjOWQ0YzVl
MTIxYzIxMDJlYmUxOC4uYWRiZjUwMjVjZjNkNDQxYmUxOGI3MmIwOWRkZjg4Zjg0NWRiOTExZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTQwNCw3ICs0MDQsNyBA
QCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0
ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgIGlmIChjbG9iYmVyc0V4aXRTdGF0ZSgqdGhp
cywgbm9kZSkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIkNsb2JiZXJzRXhpdCIpOwogICAg
IGlmIChub2RlLT5vcmlnaW4uaXNTZXQoKSkgewotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJi
YyMiLCBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpKTsKICAg
ICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyAhPSBub2RlLT5vcmlnaW4uZm9yRXhpdCAm
JiBub2RlLT5vcmlnaW4uZm9yRXhpdC5pc1NldCgpKQogICAgICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiZXhpdDogIiwgbm9kZS0+b3JpZ2luLmZvckV4aXQpOwogICAgIH0KQEAgLTE2NDksMTAg
KzE2NDksMTAgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBjdXJyZW4KICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuICZwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2Rl
LT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gJnByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgobm9kZS0+b3Jp
Z2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSk7CiAKICAgICAgICAgICAgIGlmIChwcm9maWxl
ZEJsb2NrLT5oYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KEFyaXRoUHJvZmlsZSogcmVzdWx0ID0gcHJvZmlsZWRCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSkpCisgICAg
ICAgICAgICAgICAgaWYgKEFyaXRoUHJvZmlsZSogcmVzdWx0ID0gcHJvZmlsZWRCbG9jay0+YXJp
dGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtMTc1MCwxMiArMTc1MCwxMiBAQCBib29sIEdyYXBoOjp3aWxsQ2F0
Y2hFeGNlcHRpb25Jbk1hY2hpbmVGcmFtZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENvZGVPcmln
aW4mCiAgICAgaWYgKCFtX2hhc0V4Y2VwdGlvbkhhbmRsZXJzKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4VG9DaGVjayA9IGNvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCgpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleFRvQ2hlY2sgPSBj
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KCk7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Io
aW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29k
ZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleFRvQ2hlY2spKSB7
Ci0gICAgICAgICAgICBvcENhdGNoT3JpZ2luT3V0ID0gQ29kZU9yaWdpbihoYW5kbGVyLT50YXJn
ZXQsIGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGlmIChIYW5kbGVySW5mbyogaGFuZGxlciA9
IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleFRvQ2hlY2sp
KSB7CisgICAgICAgICAgICBvcENhdGNoT3JpZ2luT3V0ID0gQ29kZU9yaWdpbihCeXRlY29kZUlu
ZGV4KGhhbmRsZXItPnRhcmdldCksIGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBjYXRj
aEhhbmRsZXJPdXQgPSBoYW5kbGVyOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCA0YTcwOGFhYjkzMTMzOWI1
ZWU0N2MzMzRlYjQxMmI4YjA5ODY1MzEwLi42YzY0ZDQ3MWQzMDVmODJhZmRjNTM4ZDM3YjdhMDQ1
Y2UwYWEyNDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC0xMDk0LDcg
KzEwOTQsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGlzIG1hcHMgYW4gZW50cnlwb2ludCBpbmRl
eCB0byBhIHBhcnRpY3VsYXIgb3BfY2F0Y2ggYnl0ZWNvZGUgb2Zmc2V0LiBCeSBjb252ZW50aW9u
LAogICAgIC8vIGl0J2xsIG5ldmVyIGhhdmUgemVybyBhcyBhIGtleSBiZWNhdXNlIHdlIHVzZSB6
ZXJvIHRvIG1lYW4gdGhlIG9wX2VudGVyIGVudHJ5cG9pbnQuCi0gICAgSGFzaE1hcDx1bnNpZ25l
ZCwgdW5zaWduZWQ+IG1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0OworICAg
IEhhc2hNYXA8dW5zaWduZWQsIEJ5dGVjb2RlSW5kZXg+IG1fZW50cnlwb2ludEluZGV4VG9DYXRj
aEJ5dGVjb2RlSW5kZXg7CiAKICAgICBIYXNoU2V0PFN0cmluZz4gbV9sb2NhbFN0cmluZ3M7CiAg
ICAgSGFzaE1hcDxjb25zdCBTdHJpbmdJbXBsKiwgU3RyaW5nPiBtX2NvcGllZFN0cmluZ3M7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAppbmRleCBjNWJjZDRlM2QzZDJj
NWUwMzkyYjhjMjgyOGJjZDdjYTEzNjMzNWU0Li43ZTJmOWVhMjg1ZDI3ZDQwYmQyMzI1NzYxNTM0
Y2I5NmExNWQxYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAK
QEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIEpJVENvZGU6OmNsZWFyT1NSRW50cnlCbG9ja0FuZFJl
c2V0VGhyZXNob2xkcyhDb2RlQmxvY2sgKmRmZ0NvZGVCbG9jaykKIHsgCiAgICAgQVNTRVJUKG1f
b3NyRW50cnlCbG9jayk7CiAKLSAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlID0gbV9vc3JF
bnRyeUJsb2NrLT5qaXRDb2RlKCktPmZ0bEZvck9TUkVudHJ5KCktPmJ5dGVjb2RlSW5kZXgoKTsK
KyAgICBCeXRlY29kZUluZGV4IG9zckVudHJ5Qnl0ZWNvZGUgPSBtX29zckVudHJ5QmxvY2stPmpp
dENvZGUoKS0+ZnRsRm9yT1NSRW50cnkoKS0+Ynl0ZWNvZGVJbmRleCgpOwogICAgIG1fb3NyRW50
cnlCbG9jay5jbGVhcigpOwogICAgIG9zckVudHJ5UmV0cnkgPSAwOwogICAgIHRpZXJVcEVudHJ5
VHJpZ2dlcnMuc2V0KG9zckVudHJ5Qnl0ZWNvZGUsIEpJVENvZGU6OlRyaWdnZXJSZWFzb246OkRv
bnRUcmlnZ2VyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKaW5kZXggYmI4
ZjUwYWNhNjU4NWNjMDVjMzY2ZTNmZmVlYjhjZjM1YTMwOWZkMi4uYTAwMDAyYjY4MjBiNDIzOWQ2
ZjJkM2FjMjBjNmVkOTAzYWE5ZjcyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlLmgKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIENvbW1vbkRhdGEqIGRmZ0NvbW1v
bigpIG92ZXJyaWRlOwogICAgIEpJVENvZGUqIGRmZygpIG92ZXJyaWRlOwogICAgIAotICAgIE9T
UkVudHJ5RGF0YSogYXBwZW5kT1NSRW50cnlEYXRhKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENv
ZGVMb2NhdGlvbkxhYmVsPE9TUkVudHJ5UHRyVGFnPiBtYWNoaW5lQ29kZSkKKyAgICBPU1JFbnRy
eURhdGEqIGFwcGVuZE9TUkVudHJ5RGF0YShCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIENv
ZGVMb2NhdGlvbkxhYmVsPE9TUkVudHJ5UHRyVGFnPiBtYWNoaW5lQ29kZSkKICAgICB7CiAgICAg
ICAgIERGRzo6T1NSRW50cnlEYXRhIGVudHJ5OwogICAgICAgICBlbnRyeS5tX2J5dGVjb2RlSW5k
ZXggPSBieXRlY29kZUluZGV4OwpAQCAtNjMsOSArNjMsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiAmb3NyRW50cnkubGFzdCgpOwogICAgIH0KICAgICAKLSAgICBPU1JFbnRyeURhdGEqIG9z
ckVudHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICBP
U1JFbnRyeURhdGEqIG9zckVudHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxPU1JF
bnRyeURhdGEsIHVuc2lnbmVkPigKKyAgICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxPU1JF
bnRyeURhdGEsIEJ5dGVjb2RlSW5kZXg+KAogICAgICAgICAgICAgb3NyRW50cnksIG9zckVudHJ5
LnNpemUoKSwgYnl0ZWNvZGVJbmRleCwKICAgICAgICAgICAgIGdldE9TUkVudHJ5RGF0YUJ5dGVj
b2RlSW5kZXgpOwogICAgIH0KQEAgLTE1MSwxMCArMTUxLDEwIEBAIHB1YmxpYzoKICAgICAvLwog
ICAgIC8vIFRoZSBrZXkgbWF5IG5vdCBhbHdheXMgYmUgYSB0YXJnZXQgZm9yIE9TUiBFbnRyeSBi
dXQgdGhlIGxpc3QgaW4gdGhlIHZhbHVlIGlzIGd1YXJhbnRlZWQKICAgICAvLyB0byBiZSB1c2Fi
bGUgZm9yIE9TUiBFbnRyeS4KLSAgICBIYXNoTWFwPHVuc2lnbmVkLCBWZWN0b3I8dW5zaWduZWQ+
PiB0aWVyVXBJbkxvb3BIaWVyYXJjaHk7CisgICAgSGFzaE1hcDxCeXRlY29kZUluZGV4LCBWZWN0
b3I8Qnl0ZWNvZGVJbmRleD4+IHRpZXJVcEluTG9vcEhpZXJhcmNoeTsKIAogICAgIC8vIE1hcCBl
YWNoIGJ5dGVjb2RlIG9mIENoZWNrVGllclVwQW5kT1NSRW50ZXIgdG8gaXRzIHN0cmVhbSBpbmRl
eC4KLSAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgV1RGOjpJbnRIYXNoPHVuc2lnbmVk
PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IGJ5dGVjb2Rl
SW5kZXhUb1N0cmVhbUluZGV4OworICAgIEhhc2hNYXA8Qnl0ZWNvZGVJbmRleCwgdW5zaWduZWQ+
IGJ5dGVjb2RlSW5kZXhUb1N0cmVhbUluZGV4OwogCiAgICAgZW51bSBjbGFzcyBUcmlnZ2VyUmVh
c29uIDogdWludDhfdCB7CiAgICAgICAgIERvbnRUcmlnZ2VyLApAQCAtMTY1LDcgKzE2NSw3IEBA
IHB1YmxpYzoKICAgICAvLyBNYXAgZWFjaCBieXRlY29kZSBvZiBDaGVja1RpZXJVcEFuZE9TUkVu
dGVyIHRvIGl0cyB0cmlnZ2VyIGZvcmNpbmcgT1NSIEVudHJ5LgogICAgIC8vIFRoaXMgY2FuIG5l
dmVyIGJlIG1vZGlmaWVkIGFmdGVyIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkIHNpbmNlIHRoZSBh
ZGRyZXNzZXMgb2YgdGhlIHRyaWdnZXJzCiAgICAgLy8gYXJlIHVzZWQgYnkgdGhlIEpJVC4KLSAg
ICBIYXNoTWFwPHVuc2lnbmVkLCBUcmlnZ2VyUmVhc29uPiB0aWVyVXBFbnRyeVRyaWdnZXJzOwor
ICAgIEhhc2hNYXA8Qnl0ZWNvZGVJbmRleCwgVHJpZ2dlclJlYXNvbj4gdGllclVwRW50cnlUcmln
Z2VyczsKIAogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1fb3NyRW50cnlCbG9jazsKICAg
ICB1bnNpZ25lZCBvc3JFbnRyeVJldHJ5OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAppbmRleCAwMTA2M2NlNmJiNDc4NTFlZjEzYzkyYjZhODBlMmQyMGE4
ODExMTY3Li45Mjc0MGE2NTI2OWEyNDQxYjIwYmRjNjgyY2JlNGVhNzZiZTc1NDk4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApAQCAtNjAsNyArNjAs
NyBAQCBKSVRDb21waWxlcjo6SklUQ29tcGlsZXIoR3JhcGgmIGRmZykKICAgICAgICAgbV9kaXNh
c3NlbWJsZXIgPSBtYWtlVW5pcXVlPERpc2Fzc2VtYmxlcj4oZGZnKTsKICNpZiBFTkFCTEUoRlRM
X0pJVCkKICAgICBtX2ppdENvZGUtPnRpZXJVcEluTG9vcEhpZXJhcmNoeSA9IFdURk1vdmUobV9n
cmFwaC5tX3BsYW4udGllclVwSW5Mb29wSGllcmFyY2h5KCkpOwotICAgIGZvciAodW5zaWduZWQg
dGllclVwQnl0ZWNvZGUgOiBtX2dyYXBoLm1fcGxhbi50aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2Rl
cygpKQorICAgIGZvciAoQnl0ZWNvZGVJbmRleCB0aWVyVXBCeXRlY29kZSA6IG1fZ3JhcGgubV9w
bGFuLnRpZXJVcEFuZE9TUkVudGVyQnl0ZWNvZGVzKCkpCiAgICAgICAgIG1faml0Q29kZS0+dGll
clVwRW50cnlUcmlnZ2Vycy5hZGQodGllclVwQnl0ZWNvZGUsIEpJVENvZGU6OlRyaWdnZXJSZWFz
b246OkRvbnRUcmlnZ2VyKTsKICNlbmRpZgogfQpAQCAtMzc0LDcgKzM3NCw3IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGUoKQogICAgIC8vIHdlIG5lZWQgdG8gY2FsbCBvdXQgdG8gYSBoZWxw
ZXIgZnVuY3Rpb24gdG8gdGhyb3cgdGhlIFN0YWNrT3ZlcmZsb3dFcnJvci4KICAgICBzdGFja092
ZXJmbG93LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0U3RvcmVDb2RlT3JpZ2luKENvZGVPcmlnaW4o
MCkpOworICAgIGVtaXRTdG9yZUNvZGVPcmlnaW4oQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDAp
KSk7CiAKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTQ1MCw3ICs0NTAsNyBA
QCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIC8vIHdlIG5lZWQgdG8g
Y2FsbCBvdXQgdG8gYSBoZWxwZXIgZnVuY3Rpb24gdG8gdGhyb3cgdGhlIFN0YWNrT3ZlcmZsb3dF
cnJvci4KICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0U3RvcmVDb2Rl
T3JpZ2luKENvZGVPcmlnaW4oMCkpOworICAgIGVtaXRTdG9yZUNvZGVPcmlnaW4oQ29kZU9yaWdp
bihCeXRlY29kZUluZGV4KDApKSk7CiAKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
QEAgLTQ3MSwxNCArNDcxLDE0IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigp
CiAKICAgICAgICAgbG9hZDMyKEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJl
Z2lzdGVyKUNhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCBHUFJJbmZvOjpyZWdUMSk7CiAg
ICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6cmVnVDEsIFRydXN0ZWRJbW0z
MihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGZyb21Bcml0eUNoZWNrLCB0
aGlzKTsKLSAgICAgICAgZW1pdFN0b3JlQ29kZU9yaWdpbihDb2RlT3JpZ2luKDApKTsKKyAgICAg
ICAgZW1pdFN0b3JlQ29kZU9yaWdpbihDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpKTsKICAg
ICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBtX3NwZWN1bGF0
aXZlLT5jYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2Rl
QmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBv
cGVyYXRpb25DYWxsQXJpdHlDaGVjaywgR1BSSW5mbzo6cmVnVDAsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSk7CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkK
ICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJyYW5jaFRlc3QzMihaZXJv
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikubGlua1RvKGZyb21Bcml0eUNoZWNrLCB0aGlzKTsK
LSAgICAgICAgZW1pdFN0b3JlQ29kZU9yaWdpbihDb2RlT3JpZ2luKDApKTsKKyAgICAgICAgZW1p
dFN0b3JlQ29kZU9yaWdpbihDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpKTsKICAgICAgICAg
bW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAg
ICAgICAgY2FsbEFyaXR5Rml4dXAgPSBuZWFyQ2FsbCgpOwogICAgICAgICBqdW1wKGZyb21Bcml0
eUNoZWNrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAppbmRl
eCAwOGRmYjhkYzJiZTY2NzgxMWVkNjdjY2JjMTkwODY4YjAyZGRmYTk5Li42YTEzOWQyODVhYTJm
NTg3OGU5MzdlZWQ2NGZiOTZmZTQxOWRmYzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoKICAgICAvLyBNZXRo
b2RzIHRvIHNldCBsYWJlbHMgZm9yIHRoZSBkaXNhc3NlbWJsZXIuCiAgICAgdm9pZCBzZXRTdGFy
dE9mQ29kZSgpCiAgICAgewotICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBl
bmRJdGVtKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpLCBDb2RlT3JpZ2luKDAsIG51bGxwdHIp
KTsKKyAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbEln
bm9yaW5nV2F0Y2hwb2ludHMoKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CiAgICAg
ICAgIGlmIChMSUtFTFkoIW1fZGlzYXNzZW1ibGVyKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgbV9kaXNhc3NlbWJsZXItPnNldFN0YXJ0T2ZDb2RlKGxhYmVsSWdub3JpbmdXYXRjaHBv
aW50cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNh
dGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCmluZGV4IDllYjQ2
Y2E1YTg4ZDNiNzBhODk4ZDFlY2YyOTlmMTMxZGFhM2U2MDAuLjQyZjY4YWRhMzI0NzhhMTE3MWNl
YWQwZjkzZTA4YWMyNWNhNjMxMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNl
LmNwcApAQCAtMTI1LDE3ICsxMjUsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKG9yaWdp
biA9PSBjYWNoZWRDb2RlT3JpZ2luKQogICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWRIYW5k
bGVyUmVzdWx0OwogCi0gICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4VG9DaGVjayA9
IG9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXhUb0NoZWNrID0gb3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKIAogICAgICAgICAgICAg
Y2FjaGVkQ29kZU9yaWdpbiA9IG9yaWdpbjsKIAogICAgICAgICAgICAgd2hpbGUgKDEpIHsKICAg
ICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAg
ICAgICAgICBpZiAoSGFuZGxlckluZm8qIGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JC
eXRlY29kZU9mZnNldChieXRlY29kZUluZGV4VG9DaGVjaykpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoSGFuZGxlckluZm8qIGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlSW5kZXhUb0NoZWNrKSkgewogICAgICAgICAgICAgICAgICAgICBsaXZlQXRD
YXRjaEhlYWQuY2xlYXJBbGwoKTsKIAotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjYXRj
aEJ5dGVjb2RlSW5kZXggPSBoYW5kbGVyLT50YXJnZXQ7CisgICAgICAgICAgICAgICAgICAgIEJ5
dGVjb2RlSW5kZXggY2F0Y2hCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChoYW5kbGVyLT50
YXJnZXQpOwogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5
dGVjb2RlKENvZGVPcmlnaW4oY2F0Y2hCeXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUpLCBb
Jl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBs
aXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCmluZGV4
IGQ5MzlkMzAzZDI0YTYyMzkwNDcxNmZmMjdmZTAzMzJmYTc5NDdmZTMuLjQ2MmQ2ODJkMjdhODA2
OGVhYTE1ZWRhMjBkZTI3MDU5ODk4ZDk3MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAogdm9pZCBPU1JFbnRyeURhdGE6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCJiYyMi
LCBtX2J5dGVjb2RlSW5kZXgsICIsIG1hY2hpbmUgY29kZSA9ICIsIFJhd1BvaW50ZXIobV9tYWNo
aW5lQ29kZS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgb3V0LnByaW50KG1fYnl0ZWNvZGVJ
bmRleCwgIiwgbWFjaGluZSBjb2RlID0gIiwgUmF3UG9pbnRlcihtX21hY2hpbmVDb2RlLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKICAgICBvdXQucHJpbnQoIiwgc3RhY2sgcnVsZXMgPSBbIik7CiAg
ICAgCiAgICAgYXV0byBwcmludE9wZXJhbmQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsK
QEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBPU1JFbnRyeURhdGE6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIH0KIAogU1VQUFJFU1NfQVNBTgotdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2
bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4KQordm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgpCiB7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmpp
dFR5cGUoKSkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwpAQCAtMTA2
LDcgKzEwNiw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduCiAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkgewogICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgIkRGRyBPU1IgaW4g
IiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgIiAtPiAiLCAqY29kZUJsb2NrLAotICAgICAg
ICAgICAgIiBmcm9tIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICJcbiIpOworICAgICAgICAgICAgIiBm
cm9tICIsIGJ5dGVjb2RlSW5kZXgsICJcbiIpOwogICAgIH0KICAgICAKICAgICBzYW5pdGl6ZVN0
YWNrRm9yVk0odm0pOwpAQCAtMzI5LDggKzMyOSw4IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShW
TSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWdu
CiAgICAgcmV0dXJuIHNjcmF0Y2g7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRp
b25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkK
LXsgCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFy
ZUNhdGNoT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKK3sKICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUIHx8IGNvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkZUTEpJVCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZSgp
LT5kZmdDb21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIApAQCAtMzgwLDcgKzM4MCw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JF
bnRyeShWTSYgdm0sIENhbGxGCiAgICAgaWYgKFVOTElLRUxZKCF2bS5lbnN1cmVTdGFja0NhcGFj
aXR5Rm9yKCZjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3ZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZy
YW1lU2l6ZUZvckNoZWNrKS5vZmZzZXQoKV0pKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBhdXRvIGluc3RydWN0aW9uID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rp
b25zKCkuYXQoY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgpKTsKKyAgICBhdXRvIGluc3RydWN0
aW9uID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbEZyYW1l
LT5ieXRlY29kZUluZGV4KCkpOwogICAgIEFTU0VSVChpbnN0cnVjdGlvbi0+aXM8T3BDYXRjaD4o
KSk7CiAgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2F0Y2g+KCkubWV0YWRhdGEoY2FsbEZyYW1lKS5tX2J1ZmZlcjsKICAgICBKU1Zh
bHVlKiBkYXRhQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oZGZnQ29tbW9uLT5j
YXRjaE9TUkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeS5oCmluZGV4IGQ4MTY3N2ExYzJjZTViYjc2ZThiYzQzMmQ3OWViZmY4Nzhk
ZjNhNGQuLmNmOTZkNzE4YWQ3YjRlYWYyMzQxYTNkZDVhMGUzM2U1NTE1NmY3MTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgKQEAgLTUzLDcgKzUzLDcgQEAgc3RydWN0
IE9TUkVudHJ5UmVzaHVmZmxpbmcgewogfTsKIAogc3RydWN0IE9TUkVudHJ5RGF0YSB7Ci0gICAg
dW5zaWduZWQgbV9ieXRlY29kZUluZGV4OworICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUlu
ZGV4OwogICAgIENvZGVMb2NhdGlvbkxhYmVsPE9TUkVudHJ5UHRyVGFnPiBtX21hY2hpbmVDb2Rl
OwogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IG1fZXhwZWN0ZWRWYWx1ZXM7CiAgICAgLy8g
VXNlIGJpdHZlY3RvcnMgaGVyZSBiZWNhdXNlIHRoZXkgdGVuZCB0byBvbmx5IHJlcXVpcmUgb25l
IHdvcmQuCkBAIC02Niw3ICs2Niw3IEBAIHN0cnVjdCBPU1JFbnRyeURhdGEgewogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogfTsKIAotaW5saW5lIHVuc2lnbmVkIGdldE9TUkVu
dHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGEpCitpbmxpbmUg
Qnl0ZWNvZGVJbmRleCBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSog
b3NyRW50cnlEYXRhKQogewogICAgIHJldHVybiBvc3JFbnRyeURhdGEtPm1fYnl0ZWNvZGVJbmRl
eDsKIH0KQEAgLTc2LDE3ICs3NiwxNyBAQCBzdHJ1Y3QgQ2F0Y2hFbnRyeXBvaW50RGF0YSB7CiAg
ICAgLy8gYXJlIG9mIHRoZSBleHBlY3RlZCB0eXBlIGJlZm9yZSBlbnRlcmluZyBhdCBhIGNhdGNo
IGJsb2NrLgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFn
PiBtYWNoaW5lQ29kZTsKICAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50Rm9ybWF0czsK
LSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleDsKIH07CiAKIC8vIFJldHVybnMgYSBwb2ludGVyIHRvIGEgZGF0YSBidWZmZXIgdGhhdCB0
aGUgT1NSIGVudHJ5IHRodW5rIHdpbGwgcmVjb2duaXplIGFuZAogLy8gcGFyc2UuIElmIHRoaXMg
cmV0dXJucyBudWxsLCBpdCBtZWFucyAKLXZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYsIENhbGxG
cmFtZSosIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwordm9pZCogcHJlcGFy
ZU9TUkVudHJ5KFZNJiwgQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7CiAK
IC8vIElmIG51bGwgaXMgcmV0dXJuZWQsIHdlIGNhbid0IE9TUiBlbnRlci4gSWYgaXQncyBub3Qg
bnVsbCwgaXQncyB0aGUgUEMgdG8ganVtcCB0by4KLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNl
cHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShWTSYsIENhbGxGcmFtZSos
IENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVDYXRjaE9TUkVudHJ5KFZNJiwgQ2Fs
bEZyYW1lKiwgQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7CiAjZWxzZQotaW5saW5lIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlT1NSRW50cnko
Vk0mLCBDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCkgeyByZXR1cm4gbnVsbHB0cjsg
fQoraW5saW5lIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBw
cmVwYXJlT1NSRW50cnkoVk0mLCBDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4
KSB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50
Q3JlYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
cG9pbnRDcmVhdGlvblBoYXNlLmNwcAppbmRleCA5ZTZjYzZmZDM5YzUwMmYxZDcyMDUxMWQwNDdl
ZjU5YmU3YWFlYzRkLi5kYzc2YmNiYWVkNDFlZWUwNjNkZmRiZWE4NDUwNjY1NTNkMGNiNGQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
cG9pbnRDcmVhdGlvblBoYXNlLmNwcApAQCAtNTAsMTAgKzUwLDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX3BsYW4ubW9kZSgpID09IEZUTEZvck9TUkVudHJ5
TW9kZSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVk
Q1BTKTsKIAotICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbV9ncmFwaC5tX3BsYW4u
b3NyRW50cnlCeXRlY29kZUluZGV4KCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCA9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleCgpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVChieXRlY29kZUluZGV4KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoYnl0
ZWNvZGVJbmRleCAhPSBVSU5UX01BWCk7Ci0gICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VS
VChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKKwogICAgICAgICAvLyBOZWVkZWQgYnkgY3JlYXRl
UHJlSGVhZGVyKCkuCiAgICAgICAgIG1fZ3JhcGguZW5zdXJlQ1BTRG9taW5hdG9ycygpOwogICAg
ICAgICAKQEAgLTkyLDcgKzkyLDcgQEAgcHVibGljOgogICAgICAgICBCYXNpY0Jsb2NrKiBuZXdS
b290ID0gaW5zZXJ0aW9uU2V0Lmluc2VydCgwLCAxKTsKIAogICAgICAgICAvLyBXZSdkIHJlYWxs
eSBsaWtlIHRvIHVzZSBhbiB1bnNldCBvcmlnaW4sIGJ1dCBUaHJlYWRlZENQUyB3b24ndCBhbGxv
dyB0aGF0LgotICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdp
bigwKSwgQ29kZU9yaWdpbigwKSwgZmFsc2UpOworICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9
IE5vZGVPcmlnaW4oQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSwgQ29kZU9yaWdpbihCeXRl
Y29kZUluZGV4KDApKSwgZmFsc2UpOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPE5vZGUqPiBs
b2NhbHMoYmFzZWxpbmUtPm51bUNhbGxlZUxvY2FscygpKTsKICAgICAgICAgZm9yIChpbnQgbG9j
YWwgPSAwOyBsb2NhbCA8IGJhc2VsaW5lLT5udW1DYWxsZWVMb2NhbHMoKTsgKytsb2NhbCkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKaW5kZXggYWM2YjljZGE1ODVj
MTBmZTVkMDlmMmJmZmRmNjQ2MGNlNDk5NTNlYS4uZDBlMGE1ZmNkZjQ1MTQxZmI4ZmMzNWI5NjQ2
ODIyN2M5M2IyYmUzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
CkBAIC00MDUsNyArNDA1LDcgQEAgdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0
JiBjb250ZXh0KQogICAgICAgICBib29sIGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JF
eGl0VG9MTEludCgpIHx8IGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJ
bnRlcnByZXRlclRodW5rOwogICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0OwogICAgICAgICBpZiAo
ZXhpdFRvTExJbnQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gZXhp
dC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAg
ICAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJs
b2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVPZmZzZXQpLnB0cigpOwogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9u
ID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsK
ICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygp
OyAgICAKQEAgLTc4Niw3ICs3ODYsNyBAQCBzdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJh
bWVzKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogb3V0ZXJtb3N0QmFzZWxpbgogICAgICAg
ICAgICAgY2FsbGVyRnJhbWUgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxGcmFtZTo6Y2FsbGVyRnJh
bWVPZmZzZXQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRC
YXNlbGluZUNvZGVCbG9jaygqdHJ1ZUNhbGxlciwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2sp
OwotICAgICAgICAgICAgdW5zaWduZWQgY2FsbEJ5dGVjb2RlSW5kZXggPSB0cnVlQ2FsbGVyLT5i
eXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhbGxCeXRlY29kZUlu
ZGV4ID0gdHJ1ZUNhbGxlci0+Ynl0ZWNvZGVJbmRleCgpOwogICAgICAgICAgICAgdm9pZCoganVt
cFRhcmdldCA9IGNhbGxlclJldHVyblBDKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCBjYWxs
Qnl0ZWNvZGVJbmRleCwgdHJ1ZUNhbGxlckNhbGxLaW5kLCBjYWxsZXJJc0xMSW50KTsKIAogICAg
ICAgICAgICAgaWYgKHRydWVDYWxsZXItPmlubGluZUNhbGxGcmFtZSgpKQpAQCAtODgxLDEzICs4
ODEsMTMgQEAgc3RhdGljIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KENvbnRleHQmIGNvbnRl
eHQsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2sKIAogICAgIGlmIChleGl0U3RhdGUtPmlz
SnVtcFRvTExJbnQpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gYmFz
ZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9y
aWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgY29uc3QgSW5z
dHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVj
dGlvbnMoKS5hdChieXRlY29kZU9mZnNldCkucHRyKCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAg
ICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JF
eGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKIAogICAgICAgICBj
b250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSA9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSk7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6cGJH
UFIpID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rp
b25zUmF3UG9pbnRlcigpKTsKLSAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVyczo6
cGNHUFIpID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCkpOworICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikg
PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgo
KS5vZmZzZXQoKSk7CiAjZWxzZQogICAgICAgICBjb250ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJz
OjpwY0dQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PigmY3VycmVudEluc3RydWN0aW9uKTsK
ICNlbmRpZgpAQCAtOTA1LDEwICs5MDUsMTAgQEAgc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENv
bnRleHQmIGNvbnRleHQsIHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgQ29k
ZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKICAgICBFeGl0
S2luZCBraW5kID0gZXhpdC5tX2tpbmQ7Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBl
eGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKIAogICAgIGRh
dGFMb2coIlNwZWN1bGF0aW9uIGZhaWx1cmUgaW4gIiwgKmNvZGVCbG9jayk7Ci0gICAgZGF0YUxv
ZygiIEAgZXhpdCAjIiwgb3NyRXhpdEluZGV4LCAiIChiYyMiLCBieXRlY29kZU9mZnNldCwgIiwg
IiwgZXhpdEtpbmRUb1N0cmluZyhraW5kKSwgIikgd2l0aCAiKTsKKyAgICBkYXRhTG9nKCIgQCBl
eGl0ICMiLCBvc3JFeGl0SW5kZXgsICIgKCIsIGJ5dGVjb2RlT2Zmc2V0LCAiLCAiLCBleGl0S2lu
ZFRvU3RyaW5nKGtpbmQpLCAiKSB3aXRoICIpOwogICAgIGlmIChhbHRlcm5hdGl2ZSkgewogICAg
ICAgICBkYXRhTG9nKAogICAgICAgICAgICAgImV4ZWN1dGVDb3VudGVyID0gIiwgYWx0ZXJuYXRp
dmUtPmppdEV4ZWN1dGVDb3VudGVyKCksCkBAIC0xMTEzLDcgKzExMTMsNyBAQCB2b2lkIE9TUkV4
aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9TUkV4aXQm
IGV4aXQsIGNvbnN0CiAgICAgICAgIFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyogZGVidWdJ
bmZvID0gbmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbzsKICAgICAgICAgZGVidWdJbmZv
LT5jb2RlQmxvY2sgPSBqaXQuY29kZUJsb2NrKCk7CiAgICAgICAgIGRlYnVnSW5mby0+a2luZCA9
IGV4aXQubV9raW5kOwotICAgICAgICBkZWJ1Z0luZm8tPmJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5t
X2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAgICBkZWJ1Z0luZm8tPmJ5dGVjb2Rl
SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAKICAgICAgICAgaml0
LmRlYnVnQ2FsbCh2bSwgZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSwgZGVi
dWdJbmZvKTsKICAgICB9CkBAIC0xNjcwLDcgKzE2NzAsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04g
T1NSRXhpdDo6ZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZShDYWxsRnJhbWUq
IGNhbAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZGVidWdJbmZvLT5jb2RlQmxvY2s7CiAg
ICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKICAg
ICBkYXRhTG9nKCJTcGVjdWxhdGlvbiBmYWlsdXJlIGluICIsICpjb2RlQmxvY2spOwotICAgIGRh
dGFMb2coIiBAIGV4aXQgIyIsIHZtLm9zckV4aXRJbmRleCwgIiAoYmMjIiwgZGVidWdJbmZvLT5i
eXRlY29kZU9mZnNldCwgIiwgIiwgZXhpdEtpbmRUb1N0cmluZyhkZWJ1Z0luZm8tPmtpbmQpLCAi
KSB3aXRoICIpOworICAgIGRhdGFMb2coIiBAIGV4aXQgIyIsIHZtLm9zckV4aXRJbmRleCwgIiAo
IiwgZGVidWdJbmZvLT5ieXRlY29kZUluZGV4LCAiLCAiLCBleGl0S2luZFRvU3RyaW5nKGRlYnVn
SW5mby0+a2luZCksICIpIHdpdGggIik7CiAgICAgaWYgKGFsdGVybmF0aXZlKSB7CiAgICAgICAg
IGRhdGFMb2coCiAgICAgICAgICAgICAiZXhlY3V0ZUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+
aml0RXhlY3V0ZUNvdW50ZXIoKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgK
aW5kZXggMjU3MDRkMmNiOTgwYWUyMjQyZGQxZmZlNjkzYjRjN2Q5OGJiM2MyYi4uZDFmYzVmMWY2
YjQwMDBiZDdkY2VmMzM3MjdkNmM5NjdlMWI1MTViYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0LmgKQEAgLTE3Niw3ICsxNzYsNyBAQCBzdHJ1Y3QgU3BlY3VsYXRpb25GYWls
dXJlRGVidWdJbmZvIHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2s7CiAgICAgRXhpdEtpbmQga2luZDsKLSAgICB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldDsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiB9OwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKaW5kZXggMjJkZTllNjFiZjAyMzE2
YWFiZDJiMTBjNWE2MDFlM2U0Zjc3ZDBmOC4uNTQ4NzdiOTFkMGJmZDRmMTg0OTEwNDE2OWY3NWMx
OWYzMzM0NTQ1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMTM4LDcgKzEzOCw3IEBAIHZvaWQgaGFuZGxl
RXhpdENvdW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAg
ICAgZG9uZUFkanVzdGluZy5saW5rKCZqaXQpOwogfQogCi12b2lkKiBjYWxsZXJSZXR1cm5QQyhD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLCB1bnNpZ25lZCBjYWxsQnl0ZWNv
ZGVJbmRleCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIHRydWVDYWxsZXJDYWxsS2luZCwgYm9vbCYg
Y2FsbGVySXNMTEludCkKK3ZvaWQqIGNhbGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVD
b2RlQmxvY2tGb3JDYWxsZXIsIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXgsIElubGlu
ZUNhbGxGcmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGJvb2wmIGNhbGxlcklzTExJbnQp
CiB7CiAgICAgY2FsbGVySXNMTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8
fCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVy
cHJldGVyVGh1bms7CiAKQEAgLTI2Myw3ICsyNjMsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxG
cmFtZXMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgICAg
ICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpyZWdUMzsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQu
YmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwotICAgICAgICAgICAgdW5zaWduZWQg
Y2FsbEJ5dGVjb2RlSW5kZXggPSB0cnVlQ2FsbGVyLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAg
ICAgICBhdXRvIGNhbGxCeXRlY29kZUluZGV4ID0gdHJ1ZUNhbGxlci0+Ynl0ZWNvZGVJbmRleCgp
OwogICAgICAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNhbGxlclJldHVyblBDKGJhc2VsaW5l
Q29kZUJsb2NrRm9yQ2FsbGVyLCBjYWxsQnl0ZWNvZGVJbmRleCwgdHJ1ZUNhbGxlckNhbGxLaW5k
LCBjYWxsZXJJc0xMSW50KTsKIAogICAgICAgICAgICAgaWYgKHRydWVDYWxsZXItPmlubGluZUNh
bGxGcmFtZSgpKSB7CkBAIC0zODIsOCArMzgyLDggQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJn
ZXQoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAg
ICAgdm9pZCoganVtcFRhcmdldDsKICAgICBib29sIGV4aXRUb0xMSW50ID0gT3B0aW9uczo6Zm9y
Y2VPU1JFeGl0VG9MTEludCgpIHx8IGNvZGVCbG9ja0ZvckV4aXQtPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpJbnRlcnByZXRlclRodW5rOwogICAgIGlmIChleGl0VG9MTEludCkgewotICAgICAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgo
KTsKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2Rl
QmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9mZnNldCkucHRyKCk7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpj
b2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9u
ID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY3VycmVudEluc3RydWN0aW9uKTsK
IAogICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewpAQCAtMzk0LDcgKzM5
NCw3IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKSwgTExJ
bnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4
aXQtPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKTsK
LSAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0
ZXJzOjpwY0dQUik7CiAjZWxzZQogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoJmN1cnJlbnRJbnN0cnVjdGlvbiksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmgKaW5kZXggMGNhZWIwMGYzYWUyOTgwNTg3Y2ZiMTA5MzljNDljNWIyMDlh
ZGQyYS4uNGZjOTk2ZjAwZDBjYjI4OGE4ZjQ0OWZhYzUyNWVjOWZjNWM5MzJkMiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5o
CkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIHZvaWQg
aGFuZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0QmFzZSYpOwogdm9p
ZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNl
Jik7CiB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYsIENDYWxsSGVscGVycyYsIGNvbnN0
IE9TUkV4aXRCYXNlJik7Ci12b2lkKiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5l
Q29kZUJsb2NrRm9yQ2FsbGVyLCB1bnNpZ25lZCBjYWxsQnl0ZWNvZGVPZmZzZXQsIElubGluZUNh
bGxGcmFtZTo6S2luZCBjYWxsZXJLaW5kLCBib29sJiBjYWxsZXJJc0xMSW50KTsKK3ZvaWQqIGNh
bGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIEJ5dGVj
b2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXgsIElubGluZUNhbGxGcmFtZTo6S2luZCBjYWxsZXJL
aW5kLCBib29sJiBjYWxsZXJJc0xMSW50KTsKIENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxsZWVT
YXZlU2xvdChJbmxpbmVDYWxsRnJhbWUqLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBH
UFJSZWcgY2FsbGVlU2F2ZSk7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBKSVRDb2RlVHlwZT4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IGQ2MjJlYjcy
MzE0MmZjZmQzN2M1ZTliOGRlYTBlYjUwZDFlNGI5M2MuLjZhZWU1NTQyNzM1NzI2YjYwNDFhNDc2
ODBhMzVlMzU1ZTYzNDliZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcApAQCAtMzU4Myw3ICszNTgzLDcgQEAgc3RhdGljIHZvaWQgdHJpZ2dlckZUTFJl
cGxhY2VtZW50Q29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlKgog
ICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAidHJpZ2dlckZUTFJlcGxhY2VtZW50
IiwgKCkpOwogICAgIC8vIFdlIG5lZWQgdG8gY29tcGlsZSB0aGUgY29kZS4KICAgICBjb21waWxl
KAotICAgICAgICB2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLCBjb2RlQmxvY2ssIEZU
TE1vZGUsIFVJTlRfTUFYLAorICAgICAgICB2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgp
LCBjb2RlQmxvY2ssIEZUTE1vZGUsIEJ5dGVjb2RlSW5kZXgoKSwKICAgICAgICAgT3BlcmFuZHM8
T3B0aW9uYWw8SlNWYWx1ZT4+KCksIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpj
cmVhdGUoKSk7CiAKICAgICAvLyBJZiB3ZSByZWFjaGVkIGhlcmUsIHRoZSBjb3VudGVyIGhhcyBu
b3QgYmUgcmVzZXQuIERvIHRoYXQgbm93LgpAQCAtMzYzNyw3ICszNjM3LDcgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coVk0qIHZtUG9pbnRlcikKICAgICB9CiB9CiAKLXN0
YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5z
aWduZWQgb3JpZ2luQnl0ZWNvZGVJbmRleCwgYm9vbCBjYW5PU1JFbnRlckhlcmUpCitzdGF0aWMg
Y2hhciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEJ5dGVjb2Rl
SW5kZXggb3JpZ2luQnl0ZWNvZGVJbmRleCwgYm9vbCBjYW5PU1JFbnRlckhlcmUpCiB7CiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCkBAIC0zNjkw
LDcgKzM2OTAsNyBAQCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIHVuc2lnbmVkIG9yaWdpbkJ5dGVjb2RlSQogICAgICAgICAgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk9T
UiBlbnRyeTogRnJvbSAiLCBSYXdQb2ludGVyKGppdENvZGUpLCAiIGdvdCBlbnRyeSBibG9jayAi
LCBSYXdQb2ludGVyKGVudHJ5QmxvY2spLCAiXG4iKTsKICAgICAgICAgICAgICAgICBpZiAodm9p
ZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5KHZtLCBjYWxsRnJhbWUsIGNvZGVCbG9j
aywgZW50cnlCbG9jaywgb3JpZ2luQnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoZW50cnlCbG9jaywgIm9zckVudHJ5
IiwgKCJhdCBiYyMiLCBvcmlnaW5CeXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgICAg
IENPREVCTE9DS19MT0dfRVZFTlQoZW50cnlCbG9jaywgIm9zckVudHJ5IiwgKCJhdCAiLCBvcmln
aW5CeXRlY29kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRhZ0NvZGVQ
dHI8Y2hhcio+KGFkZHJlc3MsIEpTRW50cnlQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGNh
bGxGcmFtZSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTM3NzUsNyAr
Mzc3NSw3IEBAIHN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oVk0mIHZtLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgdW5zaWduZWQgb3JpZ2luQnl0ZWNvZGVJCiAgICAgICAgICAgICAvLyBleGVjdXRp
bmcgdG8gY29tcGlsZS4gV2Ugc3RhcnQgd2l0aCB0cnlpbmcgdG8gY29tcGlsZSBvdXRlciBsb29w
cyBzaW5jZSB3ZSBiZWxpZXZlIG91dGVyIGxvb3AKICAgICAgICAgICAgIC8vIGNvbXBpbGF0aW9u
cyByZXZlYWwgdGhlIGJlc3Qgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemluZyBjb2RlLgogICAg
ICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSB0aWVyVXBIaWVyYXJjaHlFbnRyeS0+dmFsdWUucmJl
Z2luKCksIGVuZCA9IHRpZXJVcEhpZXJhcmNoeUVudHJ5LT52YWx1ZS5yZW5kKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvc3JFbnRyeUNhbmRpZGF0
ZSA9ICppdGVyOworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggb3NyRW50cnlDYW5kaWRh
dGUgPSAqaXRlcjsKIAogICAgICAgICAgICAgICAgIGlmIChqaXRDb2RlLT50aWVyVXBFbnRyeVRy
aWdnZXJzLmdldChvc3JFbnRyeUNhbmRpZGF0ZSkgPT0gSklUQ29kZTo6VHJpZ2dlclJlYXNvbjo6
U3RhcnRDb21waWxhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRo
YXQgd2UgYWxyZWFkeSBhc2tlZCB0aGlzIGxvb3AgdG8gY29tcGlsZS4gSWYgd2UndmUgcmVhY2hl
ZCBoZXJlLCBpdApAQCAtMzc4Nyw3ICszNzg3LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1v
bihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1bnNpZ25lZCBvcmlnaW5CeXRlY29kZUkK
ICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIGFzayB0aGUgb3V0ZXIgdG8gbG9v
cCB0byBpbW1lZGlhdGVseSBjb21waWxlIGl0c2VsZiBpZiBwcm9ncmFtCiAgICAgICAgICAgICAg
ICAgLy8gY29udHJvbCByZWFjaGVzIGl0LgogICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIklubmVyLWxvb3AgYmMj
Iiwgb3JpZ2luQnl0ZWNvZGVJbmRleCwgIiBpbiAiLCAqY29kZUJsb2NrLCAiIHNldHRpbmcgcGFy
ZW50IGxvb3AgYmMjIiwgb3NyRW50cnlDYW5kaWRhdGUsICIncyB0cmlnZ2VyIGFuZCBiYWNraW5n
IG9mZi5cbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbm5lci1sb29wICIsIG9y
aWdpbkJ5dGVjb2RlSW5kZXgsICIgaW4gIiwgKmNvZGVCbG9jaywgIiBzZXR0aW5nIHBhcmVudCBs
b29wICIsIG9zckVudHJ5Q2FuZGlkYXRlLCAiJ3MgdHJpZ2dlciBhbmQgYmFja2luZyBvZmYuXG4i
KTsKICAgICAgICAgICAgICAgICBqaXRDb2RlLT50aWVyVXBFbnRyeVRyaWdnZXJzLnNldChvc3JF
bnRyeUNhbmRpZGF0ZSwgSklUQ29kZTo6VHJpZ2dlclJlYXNvbjo6U3RhcnRDb21waWxhdGlvbik7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CkBAIC0zODM3LDcg
KzM4MzcsNyBAQCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIHVuc2lnbmVkIG9yaWdpbkJ5dGVjb2RlSQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgCi0gICAgQ09ERUJMT0NLX0xPR19FVkVOVChqaXRDb2RlLT5vc3JFbnRy
eUJsb2NrKCksICJvc3JFbnRyeSIsICgiYXQgYmMjIiwgb3JpZ2luQnl0ZWNvZGVJbmRleCkpOwor
ICAgIENPREVCTE9DS19MT0dfRVZFTlQoaml0Q29kZS0+b3NyRW50cnlCbG9jaygpLCAib3NyRW50
cnkiLCAoImF0ICIsIG9yaWdpbkJ5dGVjb2RlSW5kZXgpKTsKICAgICAvLyBJdCdzIHBvc3NpYmxl
IHRoYXQgdGhlIGZvci1lbnRyeSBjb21waWxlIGFscmVhZHkgc3VjY2VlZGVkLiBJbiB0aGF0IGNh
c2UgT1NSCiAgICAgLy8gZW50cnkgd2lsbCBzdWNjZWVkIHVubGVzcyB3ZSByYW4gb3V0IG9mIHN0
YWNrLiBJdCdzIG5vdCBjbGVhciB3aGF0IHdlIHNob3VsZCBkby4KICAgICAvLyBXZSBzaWduYWwg
dG8gdHJ5IGFnYWluIGFmdGVyIGEgd2hpbGUgaWYgdGhhdCBoYXBwZW5zLgpAQCAtMzg1MCwxMyAr
Mzg1MCwxNCBAQCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIHVuc2lnbmVkIG9yaWdpbkJ5dGVjb2RlSQogICAgIHJldHVybiByZXRhZ0NvZGVQ
dHI8Y2hhcio+KGFkZHJlc3MsIEpTRW50cnlQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGNh
bGxGcmFtZSkpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vd0luTG9v
cChWTSogdm1Qb2ludGVyLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQordm9pZCBKSVRfT1BFUkFU
SU9OIHRyaWdnZXJUaWVyVXBOb3dJbkxvb3AoVk0qIHZtUG9pbnRlciwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleEJpdHMpCiB7CiAgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKICAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVy
R0Modm0uaGVhcCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXg6
OmZyb21CaXRzKGJ5dGVjb2RlSW5kZXhCaXRzKTsKIAogICAgIHNhbml0aXplU3RhY2tGb3JWTSh2
bSk7CiAKQEAgLTM4ODUsMTMgKzM4ODYsMTQgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJU
aWVyVXBOb3dJbkxvb3AoVk0qIHZtUG9pbnRlciwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKICAg
ICB9CiB9CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KFZNKiB2bVBv
aW50ZXIsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitjaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdn
ZXJPU1JFbnRyeU5vdyhWTSogdm1Qb2ludGVyLCB1bnNpZ25lZCBieXRlY29kZUluZGV4Qml0cykK
IHsKICAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYnl0
ZWNvZGVJbmRleEJpdHMpOwogCiAgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAppbmRleCA0NTc5NmZmYTZkMDU5NDhm
YzY2ZWRjNTNjOGIxMjQyNjFiOGExYmFiLi45NGY0YzgyMmI1ODUwNDc4YjIyZmI3M2JiZmIxODZh
ZmNmM2MzYjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaApA
QCAtMzA0LDggKzMwNCw4IEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJhbmRvbShK
U0dsb2JhbE9iamVjdCopOwogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiB2b2lkIEpJVF9PUEVSQVRJ
T04gdHJpZ2dlclRpZXJVcE5vdyhWTSopIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElP
TiB0cmlnZ2VyVGllclVwTm93SW5Mb29wKFZNKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgV1RG
X0lOVEVSTkFMOwotY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coVk0qLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4KSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04g
dHJpZ2dlclRpZXJVcE5vd0luTG9vcChWTSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXhCaXRzKSBX
VEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhWTSos
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXhCaXRzKSBXVEZfSU5URVJOQUw7CiAjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCiAKIH0gLy8gZXh0ZXJuICJDIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAKaW5kZXggMzAwMGMzMTljNmM4ZGM1ZjdiYTVhOTczNTU0MDMxYjhmY2JjMTRkYi4u
ZDQxYTNkNDk5N2MxOGFhNTZhM2QyOTg4OTQ5YmU1MWM0NmY0N2VlZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCkBAIC0xMzQsNyArMTM0LDcgQEAgUHJvZmlsZXI6OkNvbXBp
bGF0aW9uS2luZCBwcm9maWxlckNvbXBpbGF0aW9uS2luZEZvck1vZGUoQ29tcGlsYXRpb25Nb2Rl
IG1vZGUpCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAogUGxhbjo6UGxhbihDb2RlQmxvY2sq
IHBhc3NlZENvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywKLSAgICBD
b21waWxhdGlvbk1vZGUgbW9kZSwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAorICAg
IENvbXBpbGF0aW9uTW9kZSBtb2RlLCBCeXRlY29kZUluZGV4IG9zckVudHJ5Qnl0ZWNvZGVJbmRl
eCwKICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1
ZXMpCiAgICAgOiBtX21vZGUobW9kZSkKICAgICAsIG1fdm0oJnBhc3NlZENvZGVCbG9jay0+dm0o
KSkKQEAgLTI0MCw5ICsyNDAsOSBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGls
ZUluVGhyZWFkSW1wbCgpCiB7CiAgICAgY2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNlc3Nhcnko
KTsKIAotICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKG1fbW9kZSkgJiYgbV9vc3JF
bnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgpIHsKKyAgICBpZiAodmVyYm9zZUNvbXBpbGF0
aW9uRW5hYmxlZChtX21vZGUpICYmIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KSB7CiAgICAgICAg
IGRhdGFMb2coIlxuIik7Ci0gICAgICAgIGRhdGFMb2coIkNvbXBpbGVyIG11c3QgaGFuZGxlIE9T
UiBlbnRyeSBmcm9tIGJjIyIsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4LCAiIHdpdGggdmFsdWVz
OiAiLCBtX211c3RIYW5kbGVWYWx1ZXMsICJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb21waWxl
ciBtdXN0IGhhbmRsZSBPU1IgZW50cnkgZnJvbSAiLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleCwg
IiB3aXRoIHZhbHVlczogIiwgbV9tdXN0SGFuZGxlVmFsdWVzLCAiXG4iKTsKICAgICAgICAgZGF0
YUxvZygiXG4iKTsKICAgICB9CiAKQEAgLTcyNSw3ICs3MjUsNyBAQCB2b2lkIFBsYW46OmNsZWFu
TXVzdEhhbmRsZVZhbHVlc0lmTmVjZXNzYXJ5KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ29k
ZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwotICAgIEZh
c3RCaXRWZWN0b3IgbGl2ZW5lc3MgPSBhbHRlcm5hdGl2ZS0+bGl2ZW5lc3NBbmFseXNpcygpLmdl
dExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoYWx0ZXJuYXRpdmUsIG1fb3NyRW50cnlCeXRl
Y29kZUluZGV4KTsKKyAgICBGYXN0Qml0VmVjdG9yIGxpdmVuZXNzID0gYWx0ZXJuYXRpdmUtPmxp
dmVuZXNzQW5hbHlzaXMoKS5nZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoYWx0ZXJuYXRp
dmUsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KTsKIAogICAgIGZvciAodW5zaWduZWQgbG9jYWwg
PSBtX211c3RIYW5kbGVWYWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwtLTspIHsKICAgICAg
ICAgaWYgKCFsaXZlbmVzc1tsb2NhbF0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCmlu
ZGV4IGNlZGEwNDAyMGQ4MGU2N2NhMTllMmNmZTI5Mjk1ZmQ3MTZjNjg3NWMuLmE2YWNiMjU5ODcz
OWEzNDA0NzU1MDc1N2Q5YzE3MGY2NjYzNTk2NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5oCkBAIC01Niw3ICs1Niw3IEBAIGNsYXNzIFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8UGxhbj4gewogcHVibGljOgogICAgIFBsYW4oCiAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrVG9Db21waWxlLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLAotICAg
ICAgICBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAg
ICAgICAgQ29tcGlsYXRpb25Nb2RlLCBCeXRlY29kZUluZGV4IG9zckVudHJ5Qnl0ZWNvZGVJbmRl
eCwKICAgICAgICAgY29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxl
VmFsdWVzKTsKICAgICB+UGxhbigpOwogCkBAIC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNGVEwoKSBjb25zdCB7IHJldHVybiBERkc6OmlzRlRMKG1fbW9kZSk7IH0KICAgICBD
b21waWxhdGlvbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotICAgIHVuc2ln
bmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRW50cnlCeXRl
Y29kZUluZGV4OyB9CisgICAgQnl0ZWNvZGVJbmRleCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleDsgfQogICAgIGNvbnN0IE9wZXJh
bmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhhbmRsZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJu
IG1fbXVzdEhhbmRsZVZhbHVlczsgfQogICAgIFRocmVhZERhdGEqIHRocmVhZERhdGEoKSBjb25z
dCB7IHJldHVybiBtX3RocmVhZERhdGE7IH0KICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNv
bXBpbGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb21waWxhdGlvbi5nZXQoKTsgfQpAQCAtMTA2
LDggKzEwNiw4IEBAIHB1YmxpYzoKICAgICBib29sIHdpbGxUcnlUb1RpZXJVcCgpIGNvbnN0IHsg
cmV0dXJuIG1fd2lsbFRyeVRvVGllclVwOyB9CiAgICAgdm9pZCBzZXRXaWxsVHJ5VG9UaWVyVXAo
Ym9vbCB3aWxsVHJ5VG9UaWVyVXApIHsgbV93aWxsVHJ5VG9UaWVyVXAgPSB3aWxsVHJ5VG9UaWVy
VXA7IH0KIAotICAgIEhhc2hNYXA8dW5zaWduZWQsIFZlY3Rvcjx1bnNpZ25lZD4+JiB0aWVyVXBJ
bkxvb3BIaWVyYXJjaHkoKSB7IHJldHVybiBtX3RpZXJVcEluTG9vcEhpZXJhcmNoeTsgfQotICAg
IFZlY3Rvcjx1bnNpZ25lZD4mIHRpZXJVcEFuZE9TUkVudGVyQnl0ZWNvZGVzKCkgeyByZXR1cm4g
bV90aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2RlczsgfQorICAgIEhhc2hNYXA8Qnl0ZWNvZGVJbmRl
eCwgVmVjdG9yPEJ5dGVjb2RlSW5kZXg+PiYgdGllclVwSW5Mb29wSGllcmFyY2h5KCkgeyByZXR1
cm4gbV90aWVyVXBJbkxvb3BIaWVyYXJjaHk7IH0KKyAgICBWZWN0b3I8Qnl0ZWNvZGVJbmRleD4m
IHRpZXJVcEFuZE9TUkVudGVyQnl0ZWNvZGVzKCkgeyByZXR1cm4gbV90aWVyVXBBbmRPU1JFbnRl
ckJ5dGVjb2RlczsgfQogCiAgICAgZW51bSBTdGFnZSB7IFByZXBhcmluZywgQ29tcGlsaW5nLCBS
ZWFkeSwgQ2FuY2VsbGVkIH07CiAgICAgU3RhZ2Ugc3RhZ2UoKSBjb25zdCB7IHJldHVybiBtX3N0
YWdlOyB9CkBAIC0xNDMsNyArMTQzLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV93aWxsVHJ5
VG9UaWVyVXAgeyBmYWxzZSB9OwogCi0gICAgY29uc3QgdW5zaWduZWQgbV9vc3JFbnRyeUJ5dGVj
b2RlSW5kZXg7CisgICAgY29uc3QgQnl0ZWNvZGVJbmRleCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRl
eDsKIAogICAgIFRocmVhZERhdGEqIG1fdGhyZWFkRGF0YTsKIApAQCAtMTU5LDggKzE1OSw4IEBA
IHByaXZhdGU6CiAgICAgRGVzaXJlZEdsb2JhbFByb3BlcnRpZXMgbV9nbG9iYWxQcm9wZXJ0aWVz
OwogICAgIFJlY29yZGVkU3RhdHVzZXMgbV9yZWNvcmRlZFN0YXR1c2VzOwogCi0gICAgSGFzaE1h
cDx1bnNpZ25lZCwgVmVjdG9yPHVuc2lnbmVkPj4gbV90aWVyVXBJbkxvb3BIaWVyYXJjaHk7Ci0g
ICAgVmVjdG9yPHVuc2lnbmVkPiBtX3RpZXJVcEFuZE9TUkVudGVyQnl0ZWNvZGVzOworICAgIEhh
c2hNYXA8Qnl0ZWNvZGVJbmRleCwgVmVjdG9yPEJ5dGVjb2RlSW5kZXg+PiBtX3RpZXJVcEluTG9v
cEhpZXJhcmNoeTsKKyAgICBWZWN0b3I8Qnl0ZWNvZGVJbmRleD4gbV90aWVyVXBBbmRPU1JFbnRl
ckJ5dGVjb2RlczsKIAogICAgIFN0YWdlIG1fc3RhZ2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAppbmRleCBmYjllNDcwYjQ3
ZTk2NTM0NGUwOWRjNjExNThkZWM2YjEyZGJlM2ViLi40MzZlNWQzOTE0YjMyMzVhMDI0N2ZjNDE4
NDcxNjMxMWQ2NzY4NjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCkBAIC05NywxNCArOTcsMTQgQEAgcHVibGljOgogCiAg
ICAgICAgICAgICAgICAgaWYgKG9sZFJvb3QtPmlzQ2F0Y2hFbnRyeXBvaW50KSB7CiAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCghIWVudHJ5cG9pbnRJbmRleCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQuYWRkKGVu
dHJ5cG9pbnRJbmRleCwgb2xkUm9vdC0+Ynl0ZWNvZGVCZWdpbik7CisgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVJbmRleC5hZGQoZW50
cnlwb2ludEluZGV4LCBvbGRSb290LT5ieXRlY29kZUJlZ2luKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5U3dpdGNo
RGF0YS0+Y2FzZXNbMF0gPT0gbV9ncmFwaC5ibG9jaygwKSk7IC8vIFdlIHN0cm9uZ2x5IGFzc3Vt
ZSB0aGUgbm9ybWFsIGNhbGwgZW50cnlwb2ludCBpcyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlz
dC4KIAogICAgICAgICAgICAgY29uc3QgYm9vbCBleGl0T0sgPSBmYWxzZTsKLSAgICAgICAgICAg
IE5vZGVPcmlnaW4gb3JpZ2luIHsgQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgZXhpdE9L
IH07CisgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiB7IENvZGVPcmlnaW4oQnl0ZWNvZGVJ
bmRleCgwKSksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSksIGV4aXRPSyB9OwogICAgICAg
ICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVj
Tm9uZSwgRW50cnlTd2l0Y2gsIG9yaWdpbiwgT3BJbmZvKGVudHJ5U3dpdGNoRGF0YSkpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4
IDNkYWVjNDM5NGU3M2JjODZjMWNjMzcwOGZmMTk5ZmExNDNmODlhYTYuLjQ3NDE2MTRjNTdiZDhj
OWJlNjBlNjhmM2MyYTQyZWE3MDQ1NzUxMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0xODYyLDEzICsxODYyLDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAgICAgICAgIAogICAgICAgICBB
U1NFUlQobV9jdXJyZW50Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgIAotICAgICAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9n
RigKLSAgICAgICAgICAgICAgICAiU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEAlZCAo
YmMjJXUpIGF0IEpJVCBvZmZzZXQgMHgleCIsCi0gICAgICAgICAgICAgICAgKGludCltX2N1cnJl
bnROb2RlLT5pbmRleCgpLAotICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG1faml0LmRlYnVnT2Zmc2V0KCkpOwotICAgICAgICAg
ICAgZGF0YUxvZygiXG4iKTsKLSAgICAgICAgfQorICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0
aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJTcGVjdWxhdGl2ZUpJVCBnZW5l
cmF0aW5nIE5vZGUgQCIsIChpbnQpbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgIiAoIiwgbV9jdXJy
ZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSwgIikgYXQg
SklUIG9mZnNldCAweCIsIG1faml0LmRlYnVnT2Zmc2V0KCkpOwogCiAgICAgICAgIGlmIChPcHRp
b25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkgJiYgKG1heUV4aXQobV9qaXQuZ3Jh
cGgoKSwgbV9jdXJyZW50Tm9kZSkgIT0gRG9lc05vdEV4aXQgfHwgbV9jdXJyZW50Tm9kZS0+aXNU
ZXJtaW5hbCgpKSkKICAgICAgICAgICAgIG1faml0LmppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlv
bihtX2ppdC52bSgpKTsKQEAgLTE5MDUsNyArMTkwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDdXJyZW50QmxvY2soKQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVu
dFR5cGVzKCkKIHsKICAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwotICAgIG1fb3JpZ2luID0g
Tm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKKyAgICBtX29y
aWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSwgQ29kZU9yaWdp
bihCeXRlY29kZUluZGV4KDApKSwgdHJ1ZSk7CiAKICAgICBhdXRvJiBhcmd1bWVudHMgPSBtX2pp
dC5ncmFwaCgpLm1fcm9vdFRvQXJndW1lbnRzLmZpbmQobV9qaXQuZ3JhcGgoKS5ibG9jaygwKSkt
PnZhbHVlOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9qaXQuY29kZUJsb2NrKCktPm51bVBh
cmFtZXRlcnMoKTsgKytpKSB7CkBAIC0zOTk4LDggKzM5OTMsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlVmFsdWVBZGQoTm9kZSogbm9kZSkKICNlbmRpZgogCiAgICAgQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9m
ZnNldChieXRlY29kZUluZGV4KTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBu
b2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOworICAgIEFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuY29kZUJs
b2NrKCktPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVu
Y3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGlu
Z0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGQ7CkBAIC00MDIyLDggKzQwMTcsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVTdWIoTm9kZSogbm9kZSkKICNlbmRpZgogCiAg
ICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwot
ICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5h
cml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4KTsKKyAgICAgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2Rl
SW5kZXgoKTsKKyAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNv
ZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAg
ICAgICAgSklUU3ViSUMqIHN1YklDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVFN1YklDKGFy
aXRoUHJvZmlsZSk7CiAgICAgICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
VmFsdWVTdWJPcHRpbWl6ZTsKICAgICAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBv
cGVyYXRpb25WYWx1ZVN1YjsKQEAgLTQ2MTYsOCArNDYxMSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aFN1YihOb2RlKiBub2RlKQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlTmVnYXRlKE5vZGUqIG5vZGUpCiB7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKLSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNl
bWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29k
ZUluZGV4KTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4u
c2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCk7CiAgICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJ
VE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVy
YXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
ID0gb3BlcmF0aW9uQXJpdGhOZWdhdGU7CkBAIC00ODM5LDggKzQ4MzQsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVmFsdWVNdWwoTm9kZSogbm9kZSkKICNlbmRpZgogCiAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4
ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICBBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZUluZGV4KTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOworICAgIEFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQu
Y29kZUJsb2NrKCktPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNo
aW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVw
YXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWw7CkBAIC0xMDczMSw3ICsxMDcyNiw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hDaGFyU3RyaW5nSnVtcChOb2RlKiBu
b2RlLCBTd2l0Y2hEYXRhKiBkYXRhLCBHUFJSCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoLCBTdHJpbmdJbXBsOjpsZW5ndGhNZW1vcnlPZmZzZXQoKSksCiAgICAg
ICAgICAgICBUcnVzdGVkSW1tMzIoMSkpLAogICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9j
ayk7Ci0KKyAgICAKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNj
cmF0Y2gsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIHZhbHVlKTsKICAgICAKICAgICBKSVRD
b21waWxlcjo6SnVtcCBpczhCaXQgPSBtX2ppdC5icmFuY2hUZXN0MzIoCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCAwNjRkZTcx
ZTA5MmU5ZjUyNDEyOTY1ZTFjZTkzYmIzYWU2NTg2NWJlLi5mNzU3OWZjOWI4MjU0YTA4YmE4MjMx
Y2U2ODQyNDY0YThjNDg4Yzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTUwNzksMTMgKzUwNzksMTMgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgIFZlY3RvcjxTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuPiBzYXZlUGxhbnM7CiAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzSW1wbChmYWxzZSwgc2F2ZVBsYW5zLCBJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7
CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5ieXRlY29kZUluZGV4KCk7CiAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3JMYW1i
ZGEoWz1dKCkgewogICAgICAgICAgICAgY2FsbFRpZXJVcC5saW5rKCZtX2ppdCk7CiAKICAgICAg
ICAgICAgIHNpbGVudFNwaWxsKHNhdmVQbGFucyk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KHRyaWdnZXJUaWVyVXBOb3dJbkxvb3AsICZ2bSgpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRl
eCkpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbih0cmlnZ2VyVGllclVwTm93SW5Mb29wLCAm
dm0oKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXguYXNCaXRzKCkpKTsKICAgICAgICAgICAg
IHNpbGVudEZpbGwoc2F2ZVBsYW5zKTsKIAogICAgICAgICAgICAgbV9qaXQuanVtcCgpLmxpbmtU
byh0b05leHRPcGVyYXRpb24sICZtX2ppdCk7CkBAIC01MTEzLDcgKzUxMTMsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlRlbXBvcmFyeSB0
ZW1wKHRoaXMpOwogICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CiAKLSAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29k
ZUluZGV4KCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9y
aWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgIGF1dG8gdHJpZ2dlckl0ZXJh
dG9yID0gbV9qaXQuaml0Q29kZSgpLT50aWVyVXBFbnRyeVRyaWdnZXJzLmZpbmQoYnl0ZWNvZGVJ
bmRleCk7CiAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgdHJpZ2dlckl0
ZXJhdG9yICE9IG1faml0LmppdENvZGUoKS0+dGllclVwRW50cnlUcmlnZ2Vycy5lbmQoKSk7CiAg
ICAgICAgIEpJVENvZGU6OlRyaWdnZXJSZWFzb24qIGZvcmNlRW50cnlUcmlnZ2VyID0gJihtX2pp
dC5qaXRDb2RlKCktPnRpZXJVcEVudHJ5VHJpZ2dlcnMuZmluZChieXRlY29kZUluZGV4KS0+dmFs
dWUpOwpAQCAtNTEzOCw3ICs1MTM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICAgICAgb3ZlcmZsb3dlZENvdW50ZXIubGluaygmbV9qaXQpOwog
CiAgICAgICAgICAgICBzaWxlbnRTcGlsbChzYXZlUGxhbnMpOwotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbih0cmlnZ2VyT1NSRW50cnlOb3csIHRlbXBHUFIsICZ2bSgpLCBUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbih0cmlnZ2VyT1NSRW50
cnlOb3csIHRlbXBHUFIsICZ2bSgpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5hc0JpdHMo
KSkpOwogCiAgICAgICAgICAgICBpZiAoc2F2ZVBsYW5zLmlzRW1wdHkoKSkKICAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSKS5s
aW5rVG8odG9OZXh0T3BlcmF0aW9uLCAmbV9qaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAKaW5kZXgg
MWJhZGM1N2MwYjkyYjIzYWQwZjg0ZDgxMjlhZjExYWM4YjI3N2UyMy4uZjVkNzNjMTA5YmM3MTcw
NzEyMGFmMGUxZjhhNGZhYmQ0MmY5NDM2YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCkBAIC04NSw5
ICs4NSw5IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGguZW5zdXJlQ1BTTmF0
dXJhbExvb3BzKCk7CiAgICAgICAgIENQU05hdHVyYWxMb29wcyYgbmF0dXJhbExvb3BzID0gKm1f
Z3JhcGgubV9jcHNOYXR1cmFsTG9vcHM7Ci0gICAgICAgIEhhc2hNYXA8Y29uc3QgTmF0dXJhbExv
b3AqLCB1bnNpZ25lZD4gbmF0dXJhbExvb3BUb0xvb3BIaW50ID0gYnVpbGROYXR1cmFsTG9vcFRv
TG9vcEhpbnRNYXAobmF0dXJhbExvb3BzKTsKKyAgICAgICAgSGFzaE1hcDxjb25zdCBOYXR1cmFs
TG9vcCosIEJ5dGVjb2RlSW5kZXg+IG5hdHVyYWxMb29wVG9Mb29wSGludCA9IGJ1aWxkTmF0dXJh
bExvb3BUb0xvb3BIaW50TWFwKG5hdHVyYWxMb29wcyk7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNp
Z25lZCwgTG9vcEhpbnREZXNjcmlwdG9yPiB0aWVyVXBIaWVyYXJjaHk7CisgICAgICAgIEhhc2hN
YXA8Qnl0ZWNvZGVJbmRleCwgTG9vcEhpbnREZXNjcmlwdG9yPiB0aWVyVXBIaWVyYXJjaHk7CiAK
ICAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBoKTsKICAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7CkBAIC0xMDgsNyArMTA4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICB0
aWVyVXBUeXBlID0gQ2hlY2tUaWVyVXBJbkxvb3A7CiAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUobm9kZUluZGV4ICsgMSwgU3BlY05vbmUsIHRpZXJVcFR5cGUsIG9yaWdp
bik7CiAKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gb3JpZ2luLnNl
bWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlSW5k
ZXggPSBvcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAgICAgICAgIGlm
IChjYW5PU1JFbnRlcikKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4udGllclVw
QW5kT1NSRW50ZXJCeXRlY29kZXMoKS5hcHBlbmQoYnl0ZWNvZGVJbmRleCk7CiAKQEAgLTEzOCw4
ICsxMzgsOCBAQCBwdWJsaWM6CiAKICAgICAgICAgLy8gQWRkIGFsbCB0aGUgY2FuZGlkYXRlcyB0
aGF0IGNhbiBiZSBPU1IgRW50ZXJlZC4KICAgICAgICAgZm9yIChhdXRvIGVudHJ5IDogdGllclVw
SGllcmFyY2h5KSB7Ci0gICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IHRpZXJVcENhbmRpZGF0
ZXM7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggOiBlbnRyeS52YWx1
ZS5vc3JFbnRyeUNhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIFZlY3RvcjxCeXRlY29kZUluZGV4
PiB0aWVyVXBDYW5kaWRhdGVzOworICAgICAgICAgICAgZm9yIChCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXggOiBlbnRyeS52YWx1ZS5vc3JFbnRyeUNhbmRpZGF0ZXMpIHsKICAgICAgICAgICAg
ICAgICBhdXRvIGRlc2NyaXB0b3JJdCA9IHRpZXJVcEhpZXJhcmNoeS5maW5kKGJ5dGVjb2RlSW5k
ZXgpOwogICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9ySXQgIT0gdGllclVwSGllcmFyY2h5
LmVuZCgpCiAgICAgICAgICAgICAgICAgICAgICYmIGRlc2NyaXB0b3JJdC0+dmFsdWUuY2FuT1NS
RW50ZXIpCkBAIC0xNjAsNyArMTYwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICNpZiBFTkFCTEUo
RlRMX0pJVCkKICAgICBzdHJ1Y3QgTG9vcEhpbnREZXNjcmlwdG9yIHsKLSAgICAgICAgVmVjdG9y
PHVuc2lnbmVkPiBvc3JFbnRyeUNhbmRpZGF0ZXM7CisgICAgICAgIFZlY3RvcjxCeXRlY29kZUlu
ZGV4PiBvc3JFbnRyeUNhbmRpZGF0ZXM7CiAgICAgICAgIGJvb2wgY2FuT1NSRW50ZXI7CiAgICAg
fTsKIApAQCAtMTgzLDkgKzE4Myw5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIEhhc2hNYXA8Y29uc3QgTmF0dXJhbExvb3AqLCB1bnNpZ25lZD4gYnVpbGRO
YXR1cmFsTG9vcFRvTG9vcEhpbnRNYXAoY29uc3QgQ1BTTmF0dXJhbExvb3BzJiBuYXR1cmFsTG9v
cHMpCisgICAgSGFzaE1hcDxjb25zdCBOYXR1cmFsTG9vcCosIEJ5dGVjb2RlSW5kZXg+IGJ1aWxk
TmF0dXJhbExvb3BUb0xvb3BIaW50TWFwKGNvbnN0IENQU05hdHVyYWxMb29wcyYgbmF0dXJhbExv
b3BzKQogICAgIHsKLSAgICAgICAgSGFzaE1hcDxjb25zdCBOYXR1cmFsTG9vcCosIHVuc2lnbmVk
PiBuYXR1cmFsTG9vcHNUb0xvb3BIaW50OworICAgICAgICBIYXNoTWFwPGNvbnN0IE5hdHVyYWxM
b29wKiwgQnl0ZWNvZGVJbmRleD4gbmF0dXJhbExvb3BzVG9Mb29wSGludDsKIAogICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJs
b2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CkBAIC0xOTQsNyArMTk0LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICBpZiAoY29u
c3QgTmF0dXJhbExvb3AqIGxvb3AgPSBuYXR1cmFsTG9vcHMuaW5uZXJNb3N0TG9vcE9mKGJsb2Nr
KSkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbm9kZS0+
b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2Rl
SW5kZXgoKTsKICAgICAgICAgICAgICAgICAgICAgbmF0dXJhbExvb3BzVG9Mb29wSGludC5hZGQo
bG9vcCwgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZv
ck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5jcHAKaW5kZXggOGRiNmRiZThjNjkyYmIxMzA4NjMzYzA0MTg2YTYyYmU4YWM1MGZkOC4uYTQy
OTQ5YzhmMWYxOGVjZTYwMDU4ZDEwZTdhOTYwODNjOTE2YmU4YSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCkBAIC03NSw3ICs3NSw3IEBA
IHZvaWQgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGls
YXRpb25EaWRDb21wbGV0ZSgKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGls
YXRpb25TdWNjZXNzZnVsOiB7CiAgICAgICAgIGppdENvZGUtPnNldE9TUkVudHJ5QmxvY2soY29k
ZUJsb2NrLT52bSgpLCBwcm9maWxlZERGR0NvZGVCbG9jaywgY29kZUJsb2NrKTsKLSAgICAgICAg
dW5zaWduZWQgb3NyRW50cnlCeXRlY29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5mdGxGb3JP
U1JFbnRyeSgpLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggb3NyRW50
cnlCeXRlY29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5mdGxGb3JPU1JFbnRyeSgpLT5ieXRl
Y29kZUluZGV4KCk7CiAgICAgICAgIGppdENvZGUtPnRpZXJVcEVudHJ5VHJpZ2dlcnMuc2V0KG9z
ckVudHJ5Qnl0ZWNvZGUsIEpJVENvZGU6OlRyaWdnZXJSZWFzb246OkNvbXBpbGF0aW9uRG9uZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAKaW5kZXggOGMwNDE5MWRlZTY0MzNhMGE1MjdiNjVjMjVmMGZkOGI3NDhkNDVhZi4u
ZWY4NWI0MjNkYTYwYWIwZWM1NzVhYTk0ZDk2MzhiMTMwMjBhN2Q3MiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKQEAgLTc4MCw3ICs3ODAsNyBAQCBwcml2YXRl
OgogCiAgICAgICAgIGF1dG8mIGRvbWluYXRvcnMgPSBtX2dyYXBoLmVuc3VyZVNTQURvbWluYXRv
cnMoKTsKIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA6IG1fZ3JhcGgu
bV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQua2V5cygpKQorICAgICAgICBm
b3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA6IG1fZ3JhcGgubV9lbnRyeXBvaW50SW5kZXhU
b0NhdGNoQnl0ZWNvZGVJbmRleC5rZXlzKCkpCiAgICAgICAgICAgICBWQUxJREFURSgoKSwgZW50
cnlwb2ludEluZGV4ID4gMCk7IC8vIEJ5IGNvbnZlbnRpb24sIDAgaXMgdGhlIGVudHJ5cG9pbnQg
aW5kZXggZm9yIHRoZSBvcF9lbnRlciBlbnRyeXBvaW50LCB3aGljaCBjYW4gbm90IGJlIGluIGEg
Y2F0Y2guCiAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAppbmRleCA0ZDRiMWViNmZkMzcwNDEyYTk0Y2M3MThm
NGFlMjVkMjc1ZDQyNjRhLi5kZTMyNmJlY2EzZDVkZjk4MWY5YTlmMDdiNDQ4ZjBmZjU3MWQ2Y2Vh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKQEAgLTE1NywxMiAr
MTU3LDEyIEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmVzdWx0JiBz
YWZlcG9pbnRSZXN1bHQpCiAgICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24gPSBsYWJlbDsKICAg
ICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQjNCeXByb2R1Y3RzKHN0YXRlLnByb2MtPnJlbGVh
c2VCeXByb2R1Y3RzKCkpOwogCi0gICAgZm9yIChhdXRvIHBhaXIgOiBzdGF0ZS5ncmFwaC5tX2Vu
dHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldCkgewotICAgICAgICB1bnNpZ25lZCBj
YXRjaEJ5dGVjb2RlT2Zmc2V0ID0gcGFpci52YWx1ZTsKKyAgICBmb3IgKGF1dG8gcGFpciA6IHN0
YXRlLmdyYXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlSW5kZXgpIHsKKyAgICAg
ICAgQnl0ZWNvZGVJbmRleCBjYXRjaEJ5dGVjb2RlSW5kZXggPSBwYWlyLnZhbHVlOwogICAgICAg
ICB1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSBwYWlyLmtleTsKICAgICAgICAgVmVjdG9yPEZs
dXNoRm9ybWF0PiBhcmd1bWVudEZvcm1hdHMgPSBzdGF0ZS5ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0
c1tlbnRyeXBvaW50SW5kZXhdOwogICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24uYXBwZW5k
Q2F0Y2hFbnRyeXBvaW50KAotICAgICAgICAgICAgY2F0Y2hCeXRlY29kZU9mZnNldCwgc3RhdGUu
ZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+KHN0YXRlLnByb2MtPmVudHJ5cG9pbnRMYWJlbChlbnRyeXBvaW50SW5kZXgpKSwgV1RG
TW92ZShhcmd1bWVudEZvcm1hdHMpKTsKKyAgICAgICAgICAgIGNhdGNoQnl0ZWNvZGVJbmRleCwg
c3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+KHN0YXRlLnByb2MtPmVudHJ5cG9pbnRMYWJlbChlbnRyeXBvaW50SW5kZXgp
KSwgV1RGTW92ZShhcmd1bWVudEZvcm1hdHMpKTsKICAgICB9CiAgICAgc3RhdGUuaml0Q29kZS0+
Y29tbW9uLmZpbmFsaXplQ2F0Y2hFbnRyeXBvaW50cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaAppbmRleCBhZjJjZDExMzM5Zjk1
YzZmZDE1YTdlMjMwNGVmNDE1OThmNDU1NjZmLi4yNjg5ZDNhNzE2Yjc1M2Y1ZDY4MmNlZDBjYzU0
NzE1ZjhhNzU5N2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZv
ck9TUkVudHJ5SklUQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmgKQEAgLTQ4LDggKzQ4LDggQEAgcHVibGljOgogICAgIHZvaWQgaW5p
dGlhbGl6ZUVudHJ5QnVmZmVyKFZNJiwgdW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKTsKICAgICBT
Y3JhdGNoQnVmZmVyKiBlbnRyeUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlCdWZmZXI7
IH0KICAgICAKLSAgICB2b2lkIHNldEJ5dGVjb2RlSW5kZXgodW5zaWduZWQgdmFsdWUpIHsgbV9i
eXRlY29kZUluZGV4ID0gdmFsdWU7IH0KLSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CisgICAgdm9pZCBzZXRCeXRlY29kZUluZGV4
KEJ5dGVjb2RlSW5kZXggdmFsdWUpIHsgbV9ieXRlY29kZUluZGV4ID0gdmFsdWU7IH0KKyAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5k
ZXg7IH0KICAgICAKICAgICB2b2lkIGNvdW50RW50cnlGYWlsdXJlKCkgeyBtX2VudHJ5RmFpbHVy
ZUNvdW50Kys7IH0KICAgICB1bnNpZ25lZCBlbnRyeUZhaWx1cmVDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZW50cnlGYWlsdXJlQ291bnQ7IH0KQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAg
IAogcHJpdmF0ZToKICAgICBTY3JhdGNoQnVmZmVyKiBtX2VudHJ5QnVmZmVyOyAvLyBPbmx5IGZv
ciBPU1IgZW50cnkgY29kZSBibG9ja3MuCi0gICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4Owor
ICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4OwogICAgIHVuc2lnbmVkIG1fZW50cnlG
YWlsdXJlQ291bnQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKaW5kZXggN2VmNDE3OTlmNGYyZDU3NDIwZDg5ZTA1ZTRmYzY1MzI0N2Y0MGRk
NS4uOGEwMGQ5NjYzZmUzZDYxNmEwZjFlZWU4YWRlNjRmOTNiMWZkMTNmOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMjExLDcgKzIxMSw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhl
YWRlcihjb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CiAgICAgICAgICAgICAg
ICAgfSk7CiAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2F0Y2hFbnRyeXBvaW50SW5kZXgg
OiBtX2dyYXBoLm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlT2Zmc2V0LmtleXMoKSkg
eworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjYXRjaEVudHJ5cG9pbnRJbmRleCA6IG1fZ3Jh
cGgubV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVJbmRleC5rZXlzKCkpIHsKICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYXRjaEVudHJ5cG9pbnRJbmRleCAhPSAwKTsKICAg
ICAgICAgICAgICAgICBtX3Byb2MuY29kZSgpLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludChjYXRj
aEVudHJ5cG9pbnRJbmRleCwgY2F0Y2hQcm9sb2d1ZUdlbmVyYXRvci5jb3B5UmVmKCkpOwogICAg
ICAgICAgICAgfQpAQCAtMjgwLDcgKzI4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQg
ZXhpdEZyYW1lU2l6ZSA9IG1fZ3JhcGgucmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpICog
c2l6ZW9mKFJlZ2lzdGVyKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVz
cyBhZGRyZXNzT2ZTdGFja0xpbWl0KHZtLT5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKTsKICAg
ICAgICAgUGF0Y2hwb2ludFZhbHVlKiBzdGFja092ZXJmbG93SGFuZGxlciA9IG1fb3V0LnBhdGNo
cG9pbnQoVm9pZCk7Ci0gICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IGNhbGxT
aXRlSW5kZXhGb3JDb2RlT3JpZ2luKG1fZnRsU3RhdGUsIENvZGVPcmlnaW4oMCkpOworICAgICAg
ICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBjYWxsU2l0ZUluZGV4Rm9yQ29kZU9yaWdp
bihtX2Z0bFN0YXRlLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpKTsKICAgICAgICAgc3Rh
Y2tPdmVyZmxvd0hhbmRsZXItPmFwcGVuZFNvbWVSZWdpc3RlcihtX2NhbGxGcmFtZSk7CiAgICAg
ICAgIHN0YWNrT3ZlcmZsb3dIYW5kbGVyLT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0
Y2hSZWdpc3RlcnMoKSk7CiAgICAgICAgIHN0YWNrT3ZlcmZsb3dIYW5kbGVyLT5udW1HUFNjcmF0
Y2hSZWdpc3RlcnMgPSAxOwpAQCAtMzUxLDcgKzM1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgbV9ub2RlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIG1fb3JpZ2lu
ID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKKyAgICAg
ICAgICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkp
LCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpLCB0cnVlKTsKIAogICAgICAgICAgICAgLy8g
Q2hlY2sgQXJndW1lbnRzLgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsK
QEAgLTIxMTAsOCArMjExMCw4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9mdGxTdGF0ZS5ncmFwaC5iYXNlbGluZUNvZGVC
bG9ja0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXggPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAg
ICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRo
UHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUlu
ZGV4KCk7CisgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2Rl
QmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAg
ICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsK
ICAgICAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZDsK
ICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRBZGRHZW5lcmF0b3I+KGFyaXRoUHJvZmls
ZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwpAQCAtMjEzMSw4
ICsyMTMxLDggQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2sgPSBtX2Z0bFN0YXRlLmdyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9
IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKKyAg
ICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJp
dGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICAgICAgYXV0byBy
ZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplOwogICAgICAgICBh
dXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViOwogICAgICAgICBj
b21waWxlQmluYXJ5TWF0aElDPEpJVFN1YkdlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCByZXBhdGNo
aW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CkBAIC0yMTUyLDggKzIxNTIsOCBA
QCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9jayA9IG1fZnRsU3RhdGUuZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMpOwotICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwotICAgICAgICBBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9m
ZnNldChieXRlY29kZUluZGV4KTsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
ID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOworICAgICAgICBBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVG
b3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBhdXRvIHJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7CiAgICAgICAgIGF1dG8gbm9uUmVw
YXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWw7CiAgICAgICAgIGNvbXBpbGVCaW5h
cnlNYXRoSUM8SklUTXVsR2VuZXJhdG9yPihhcml0aFByb2ZpbGUsIHJlcGF0Y2hpbmdGdW5jdGlv
biwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKQEAgLTI0MTUsOCArMjQxNSw4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2sgPSBtX2Z0bFN0YXRlLmdyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICBBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKKyAg
ICAgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2st
PmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAg
ICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemU7CiAg
ICAgICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3Vi
OwogICAgICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+KGFyaXRo
UHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwpAQCAt
MzA5Myw4ICszMDkzLDggQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbV9ub2RlLCBtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsK
ICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1fZnRsU3RhdGUuZ3JhcGgu
YmFzZWxpbmVDb2RlQmxvY2tGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICB1
bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpOwotICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4KTsKKyAg
ICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMuYnl0ZWNvZGVJbmRleCgpOworICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
SW5kZXgpOwogICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRo
TmVnYXRlT3B0aW1pemU7CiAgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3Bl
cmF0aW9uQXJpdGhOZWdhdGU7CiAgICAgICAgIGNvbXBpbGVVbmFyeU1hdGhJQzxKSVROZWdHZW5l
cmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVu
Y3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRy
eS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAppbmRleCBj
MTc1NzM3NWI3YWEzZTg3MzRjODIyMzlhNTIxNzQ2NzBlY2Y5NzE5Li45MzMxNzcxMGY2ZDA2ODYw
OTE5YmMwMDI1MzEzYTEzMjE5MDQ0OTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkVudHJ5LmNwcApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiBTVVBQUkVTU19BU0FOCiB2b2lkKiBwcmVwYXJlT1NSRW50cnkoCiAgICAgVk0mIHZt
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9j
ayogZW50cnlDb2RlQmxvY2ssCi0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQg
c3RyZWFtSW5kZXgpCisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBz
dHJlYW1JbmRleCkKIHsKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lID0gZGZnQ29kZUJsb2NrLT5i
YXNlbGluZVZlcnNpb24oKTsKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGRmZ0Nv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7CkBAIC01NSw3ICs1NSw3IEBAIHZvaWQqIHByZXBh
cmVPU1JFbnRyeSgKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAg
ICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiRlRMIE9TUiBmcm9tICIsICpkZmdDb2RlQmxvY2ss
ICIgdG8gIiwgKmVudHJ5Q29kZUJsb2NrLCAiIGF0IGJjIyIsCisgICAgICAgICAgICAiRlRMIE9T
UiBmcm9tICIsICpkZmdDb2RlQmxvY2ssICIgdG8gIiwgKmVudHJ5Q29kZUJsb2NrLCAiIGF0ICIs
CiAgICAgICAgICAgICBieXRlY29kZUluZGV4LCAiLlxuIik7CiAgICAgfQogICAgIApAQCAtNjQs
NyArNjQsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoCiAKICAgICBpZiAoYnl0ZWNvZGVJbmRl
eCAhPSBlbnRyeUNvZGUtPmJ5dGVjb2RlSW5kZXgoKSkgewogICAgICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVz
ZSB3ZSBkb24ndCBoYXZlIGFuIGVudHJ5cG9pbnQgZm9yIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICI7
IG91cnMgaXMgZm9yIGJjIyIsIGVudHJ5Q29kZS0+Ynl0ZWNvZGVJbmRleCgpLCAiXG4iKTsKKyAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBh
biBlbnRyeXBvaW50IGZvciAiLCBieXRlY29kZUluZGV4LCAiOyBvdXJzIGlzIGZvciAiLCBlbnRy
eUNvZGUtPmJ5dGVjb2RlSW5kZXgoKSwgIlxuIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
ICAgICAKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogICAgICAgICBP
cHRpb25hbDxKU1ZhbHVlPiByZWNvbnN0cnVjdGVkVmFsdWUgPSB2YWx1ZXMuYXJndW1lbnQoYXJn
dW1lbnQpOwogICAgICAgICBpZiAoKHJlY29uc3RydWN0ZWRWYWx1ZSAmJiB2YWx1ZU9uU3RhY2sg
PT0gcmVjb25zdHJ1Y3RlZFZhbHVlLnZhbHVlKCkpIHx8ICFhcmd1bWVudCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBkYXRhTG9nKCJNaXNtYXRjaCBiZXR3ZWVuIHJlY29uc3RydWN0
ZWQgdmFsdWVzIGFuZCB0aGUgdmFsdWUgb24gdGhlIHN0YWNrIGZvciBhcmd1bWVudCBhcmciLCBh
cmd1bWVudCwgIiBmb3IgIiwgKmVudHJ5Q29kZUJsb2NrLCAiIGF0IGJjIyIsIGJ5dGVjb2RlSW5k
ZXgsICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZygiTWlzbWF0Y2ggYmV0d2VlbiByZWNvbnN0cnVj
dGVkIHZhbHVlcyBhbmQgdGhlIHZhbHVlIG9uIHRoZSBzdGFjayBmb3IgYXJndW1lbnQgYXJnIiwg
YXJndW1lbnQsICIgZm9yICIsICplbnRyeUNvZGVCbG9jaywgIiBhdCAiLCBieXRlY29kZUluZGV4
LCAiOlxuIik7CiAgICAgICAgIGRhdGFMb2coIiAgICBWYWx1ZSBvbiBzdGFjazogIiwgdmFsdWVP
blN0YWNrLCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygiICAgIFJlY29uc3RydWN0ZWQgdmFsdWU6
ICIsIHJlY29uc3RydWN0ZWRWYWx1ZSwgIlxuIik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkVudHJ5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmgKaW5kZXgg
M2QxMjNmYmVkN2NiMjJkMjM0OTE1YmI4ZmI5YmJjMjUyZTY0MGQ3Yi4uNjRlY2Y3NWZlZTMyZTgy
Y2YxY2ZhZWI3NjQ4ZTAyZjEwMmMxZjJkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFbnRyeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRW50cnkuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBWTTsKIG5hbWVzcGFjZSBGVEwgewog
CiB2b2lkKiBwcmVwYXJlT1NSRW50cnkoCi0gICAgVk0mLCBDYWxsRnJhbWUqLCBDb2RlQmxvY2sq
IGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBlbnRyeUNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCwKKyAgICBWTSYsIENhbGxGcmFtZSosIENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBD
b2RlQmxvY2sqIGVudHJ5Q29kZUJsb2NrLCBCeXRlY29kZUluZGV4LAogICAgIHVuc2lnbmVkIHN0
cmVhbUluZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAppbmRleCA1MjMyMDU4NjFjY2Yw
NDkxZTIyMDcxOWM1NzM5YzUzZjA2ZWNhODI0Li43OGVkMGJmMGQ4YTQ1ZjQzM2JhMjliMmQzMThh
ODUzZTA2MTZhOWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmNwcApAQCAtOTgsMTIgKzk4LDEyIEBAIFNVUFBSRVNTX0FTQU4gdW5zaWduZWQg
Q2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0CiAKIENhbGxTaXRlSW5k
ZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUluZGV4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ2FsbFNp
dGVJbmRleChjYWxsU2l0ZUFzUmF3Qml0cygpKTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChC
eXRlY29kZUluZGV4KGNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKIH0KIAogU1VQUFJFU1NfQVNBTiBD
YWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVJbmRleCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIENhbGxTaXRlSW5kZXgodW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSk7CisgICAg
cmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0
cygpKSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMTM0LDcgKzEzNCw3IEBAIGNv
bnN0IEluc3RydWN0aW9uKiBDYWxsRnJhbWU6OmN1cnJlbnRWUEMoKSBjb25zdAogCiB2b2lkIENh
bGxGcmFtZTo6c2V0Q3VycmVudFZQQyhjb25zdCBJbnN0cnVjdGlvbiogdnBjKQogewotICAgIENh
bGxTaXRlSW5kZXggY2FsbFNpdGUoY29kZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0KHZwYykpOwor
ICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUoY29kZUJsb2NrKCktPmJ5dGVjb2RlSW5kZXgodnBj
KSk7CiAgICAgdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50XS50YWcoKSA9IHN0YXRp
Y19jYXN0PGludDMyX3Q+KGNhbGxTaXRlLmJpdHMoKSk7CiB9CiAKQEAgLTE0NywxMSArMTQ3LDEx
IEBAIHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpIGNv
bnN0CiAKICNlbmRpZgogICAgIAotdW5zaWduZWQgQ2FsbEZyYW1lOjpieXRlY29kZU9mZnNldCgp
CitCeXRlY29kZUluZGV4IENhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCgpCiB7CiAgICAgQVNTRVJU
KCFjYWxsZWUoKS5pc1dhc20oKSk7CiAgICAgaWYgKCFjb2RlQmxvY2soKSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBCeXRlY29kZUluZGV4KDApOwogI2lmIEVOQUJMRShERkdf
SklUKQogICAgIGlmIChjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSkgewogICAgICAg
ICBBU1NFUlQoY29kZUJsb2NrKCkpOwpAQCAtMTY0LDEzICsxNjQsMTMgQEAgdW5zaWduZWQgQ2Fs
bEZyYW1lOjpieXRlY29kZU9mZnNldCgpCiAgICAgfQogI2VuZGlmCiAgICAgQVNTRVJUKGNhbGxT
aXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIHJldHVybiBjYWxsU2l0ZUJpdHNBc0J5
dGVjb2RlT2Zmc2V0KCk7CisgICAgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVCaXRzQXNC
eXRlY29kZU9mZnNldCgpKTsKIH0KIAogQ29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4o
KQogewogICAgIGlmICghY29kZUJsb2NrKCkpCi0gICAgICAgIHJldHVybiBDb2RlT3JpZ2luKDAp
OworICAgICAgICByZXR1cm4gQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKTsKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICBpZiAoY2FsbFNpdGVCaXRzQXJlQ29kZU9yaWdpbkluZGV4KCkpIHsK
ICAgICAgICAgQ2FsbFNpdGVJbmRleCBpbmRleCA9IGNhbGxTaXRlSW5kZXgoKTsKQEAgLTE3OCw3
ICsxNzgsNyBAQCBDb2RlT3JpZ2luIENhbGxGcmFtZTo6Y29kZU9yaWdpbigpCiAgICAgICAgIHJl
dHVybiBjb2RlQmxvY2soKS0+Y29kZU9yaWdpbihpbmRleCk7CiAgICAgfQogI2VuZGlmCi0gICAg
cmV0dXJuIENvZGVPcmlnaW4oY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKTsKKyAgICBy
ZXR1cm4gQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZz
ZXQoKSkpOwogfQogCiBSZWdpc3RlciogQ2FsbEZyYW1lOjp0b3BPZkZyYW1lSW50ZXJuYWwoKQpA
QCAtMzAyLDcgKzMwMiw3IEBAIFN0cmluZyBDYWxsRnJhbWU6OmZyaWVuZGx5RnVuY3Rpb25OYW1l
KCkKIHZvaWQgQ2FsbEZyYW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgaWYgKENv
ZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCkpIHsKLSAgICAgICAgb3V0LnBy
aW50KGNvZGVCbG9jay0+aW5mZXJyZWROYW1lKCksICIjIiwgY29kZUJsb2NrLT5oYXNoQXNTdHJp
bmdJZlBvc3NpYmxlKCksICIgWyIsIGNvZGVCbG9jay0+aml0VHlwZSgpLCAiIGJjIyIsIGJ5dGVj
b2RlT2Zmc2V0KCksICJdIik7CisgICAgICAgIG91dC5wcmludChjb2RlQmxvY2stPmluZmVycmVk
TmFtZSgpLCAiIyIsIGNvZGVCbG9jay0+aGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpLCAiIFsiLCBj
b2RlQmxvY2stPmppdFR5cGUoKSwgIiAiLCBieXRlY29kZUluZGV4KCksICJdIik7CiAKICAgICAg
ICAgb3V0LnByaW50KCIoIik7CiAgICAgICAgIHRoaXNWYWx1ZSgpLmR1bXBGb3JCYWNrdHJhY2Uo
b3V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxs
RnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaApp
bmRleCBiN2IzM2UwYzFlMDQxN2Y4MThlOThmNDQwZjE0OGE0NDg3YmIyMTA1Li4wODBmN2M0NjIw
NzU5NzAyZTBkN2ZiYTI1NmVhZDY1Mzg2YmViNGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCkBAIC00NSwyMiArNDUsMTkgQEAgbmFtZXNwYWNl
IEpTQyAgewogICAgIHB1YmxpYzoKICAgICAgICAgQ2FsbFNpdGVJbmRleCgpID0gZGVmYXVsdDsK
ICAgICAgICAgCi0gICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgodWludDMyX3QgYml0cykK
LSAgICAgICAgICAgIDogbV9iaXRzKGJpdHMpCisgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorICAgICAgICAgICAgOiBtX2J5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgeyB9Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICAgICAgZXhwbGljaXQgQ2FsbFNpdGVJbmRleChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24pCi0gICAgICAgICAgICA6IG1fYml0cyhiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3Ry
dWN0aW9uKSkKLSAgICAgICAgeyB9Ci0jZW5kaWYKIAotICAgICAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzICE9IFVJTlRfTUFYOyB9Ci0gICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBDYWxsU2l0ZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1cm4g
bV9iaXRzID09IG90aGVyLm1fYml0czsgfQotICAgICAgICAKLSAgICAgICAgaW5saW5lIHVpbnQz
Ml90IGJpdHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0KKyAgICAgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9ieXRlY29kZUluZGV4OyB9CisgICAgICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxsU2l0ZUluZGV4JiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV9ieXRlY29kZUluZGV4ID09IG90aGVyLm1fYnl0ZWNvZGVJbmRleDsgfQorCisgICAgICAg
IHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCk7
IH0KKworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVy
biBtX2J5dGVjb2RlSW5kZXg7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQzMl90IG1f
Yml0cyB7IFVJTlRfTUFYIH07CisgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9ieXRlY29kZUluZGV4
OwogICAgIH07CiAKICAgICBjbGFzcyBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCA6IHB1YmxpYyBD
YWxsU2l0ZUluZGV4IHsKQEAgLTY4LDcgKzY1LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAg
ICBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCgpID0gZGVmYXVsdDsKIAogICAgICAgICBleHBsaWNp
dCBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBiaXRzKQotICAgICAgICAgICAgOiBD
YWxsU2l0ZUluZGV4KGJpdHMpCisgICAgICAgICAgICA6IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleDo6ZnJvbUJpdHMoYml0cykpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xNzksMTAg
KzE3NiwxMCBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIC8vIGFsc28gcmV0dXJuIDAgaWYg
dGhlIGNhbGwgZnJhbWUgaGFzIG5vIG5vdGlvbiBvZiBieXRlY29kZSBvZmZzZXRzIChmb3IKICAg
ICAgICAgLy8gZXhhbXBsZSBpZiBpdCdzIG5hdGl2ZSBjb2RlKS4KICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTc1NAotICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCgpOworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgo
KTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgd2lsbCBnZXQgeW91IGEgQ29kZU9yaWdpbi4g
SXQgd2lsbCBhbHdheXMgc3VjY2VlZC4gTWF5IHJldHVybgotICAgICAgICAvLyBDb2RlT3JpZ2lu
KDApIGlmIHdlJ3JlIGluIG5hdGl2ZSBjb2RlLgorICAgICAgICAvLyBDb2RlT3JpZ2luKEJ5dGVj
b2RlSW5kZXgoMCkpIGlmIHdlJ3JlIGluIG5hdGl2ZSBjb2RlLgogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBDb2RlT3JpZ2luIGNvZGVPcmlnaW4oKTsKIAogICAgICAgICBSZWdpc3RlciogdG9w
T2ZGcmFtZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAppbmRleCBlNDNkYjI5MTQzNzUzZDY0ZjFmYTRlZDNiYjUxNjMxZTY0NGEyMGNh
Li5mZjgxNTk3MzYwMWQ0NTIxN2YwOTY3YjVhZDA1OGNiZGRiOTRiYjVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTQxMCw3
ICs0MTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZChTdGFj
a0ZyYW1lKHZpc2l0b3ItPndhc21GdW5jdGlvbkluZGV4T3JOYW1lKCkpKTsKICAgICAgICAgICAg
IH0gZWxzZSBpZiAoISF2aXNpdG9yLT5jb2RlQmxvY2soKSAmJiAhdmlzaXRvci0+Y29kZUJsb2Nr
KCktPnVubGlua2VkQ29kZUJsb2NrKCktPmlzQnVpbHRpbkZ1bmN0aW9uKCkpIHsKICAgICAgICAg
ICAgICAgICBtX3Jlc3VsdHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBTdGFja0ZyYW1l
KG1fdm0sIG1fb3duZXIsIHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpLCB2aXNpdG9yLT5jb2Rl
QmxvY2soKSwgdmlzaXRvci0+Ynl0ZWNvZGVPZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAg
ICBTdGFja0ZyYW1lKG1fdm0sIG1fb3duZXIsIHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpLCB2
aXNpdG9yLT5jb2RlQmxvY2soKSwgdmlzaXRvci0+Ynl0ZWNvZGVJbmRleCgpKSk7CiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBlbmQoCiAgICAgICAg
ICAgICAgICAgICAgIFN0YWNrRnJhbWUobV92bSwgbV9vd25lciwgdmlzaXRvci0+Y2FsbGVlKCku
YXNDZWxsKCkpKTsKQEAgLTQ4MCw3ICs0ODAsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBIYW5k
bGVySW5mbyogZmluZEV4Y2VwdGlvbkhhbmRsZXIoU3RhY2tWaXNpdG9yJiB2aXNpdG9yLCBDbwog
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQog
ICAgICAgICBleGNlcHRpb25IYW5kbGVySW5kZXggPSBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgo
KS5iaXRzKCk7CiAgICAgZWxzZQotICAgICAgICBleGNlcHRpb25IYW5kbGVySW5kZXggPSBjYWxs
RnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCk7CisgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9
IGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpLm9mZnNldCgpOwogCiAgICAgcmV0dXJuIGNvZGVC
bG9jay0+aGFuZGxlckZvckluZGV4KGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgcmVxdWlyZWRIYW5k
bGVyKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9T
aGFkb3dDaGlja2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFk
b3dDaGlja2VuLmNwcAppbmRleCA4NjQwNDFmNzBiOTE1MzEyZGMxMzNiMTc2YjgyNDIyYjFmODJk
ODk0Li44N2FjNDMzOWM5OTUxY2I1ODBjMmY5NmIxYzg5NWJjNjI5MGZjZTE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCkBA
IC0zMjksNyArMzI5LDcgQEAgdm9pZCBTaGFkb3dDaGlja2VuOjp1cGRhdGUoVk0mIHZtLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAgICAgIGJvb2wgaXNUYWlsRGVsZXRlZCA9IGZhbHNl
OwogICAgICAgICAgICAgSlNTY29wZSogc2NvcGUgPSBudWxscHRyOwogICAgICAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgICAgICAgICAg
SlNWYWx1ZSBzY29wZVZhbHVlID0gY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgpICYmIGNvZGVC
bG9jayAmJiBjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKS5pc1ZhbGlkKCkKKyAgICAgICAgICAg
IEpTVmFsdWUgc2NvcGVWYWx1ZSA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICYmIGNvZGVC
bG9jayAmJiBjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKS5pc1ZhbGlkKCkKICAgICAgICAgICAg
ICAgICA/IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCku
b2Zmc2V0KCldLmpzVmFsdWUoKQogICAgICAgICAgICAgICAgIDoganNVbmRlZmluZWQoKTsKICAg
ICAgICAgICAgIGlmICghc2NvcGVWYWx1ZS5pc1VuZGVmaW5lZCgpICYmIGNvZGVCbG9jay0+d2Fz
Q29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IDgwYzhmNjgyZTVmNWFh
MjhiMDBmNWQ0ZmFmYjM0OTdlZGExNjI0MDMuLmMzMTcyZjc1NzFlMjg0N2Q0YzE0YWJlNGI5MWMx
OTAwZjVmYzE5NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuY3BwCkBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6
OnJlYWROb25JbmxpbmVkRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVPcmlnaW4qIGNv
ZGVPcmkKICAgICBpZiAoY2FsbEZyYW1lLT5pc0FueVdhc21DYWxsZWUoKSkgewogICAgICAgICBt
X2ZyYW1lLm1faXNXYXNtRnJhbWUgPSB0cnVlOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2Nr
ID0gbnVsbHB0cjsKLSAgICAgICAgbV9mcmFtZS5tX2J5dGVjb2RlT2Zmc2V0ID0gMDsKKyAgICAg
ICAgbV9mcmFtZS5tX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KCk7CiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogICAgICAgICBDYWxsZWVCaXRzIGJpdHMgPSBjYWxsRnJhbWUtPmNhbGxl
ZSgpOwogICAgICAgICBpZiAoYml0cy5pc1dhc20oKSkKQEAgLTE3Nyw5ICsxNzcsOSBAQCB2b2lk
IFN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q29kZU9yaWdpbiogY29kZU9yaQogI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9mcmFt
ZS5tX2NvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIG1fZnJhbWUu
bV9ieXRlY29kZU9mZnNldCA9ICFtX2ZyYW1lLmNvZGVCbG9jaygpID8gMAorICAgICAgICBtX2Zy
YW1lLm1fYnl0ZWNvZGVJbmRleCA9ICFtX2ZyYW1lLmNvZGVCbG9jaygpID8gQnl0ZWNvZGVJbmRl
eCgwKQogICAgICAgICAgICAgOiBjb2RlT3JpZ2luID8gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRl
eCgpCi0gICAgICAgICAgICA6IGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKTsKKyAgICAgICAg
ICAgIDogY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCk7CiAKICAgICB9CiAKQEAgLTIxMyw3ICsy
MTMsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgQ29kZU9yaWdpbiogY29kZU9yaWdpbgogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2Nr
ID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay5nZXQoKTsKLSAgICAgICAgbV9m
cmFtZS5tX2J5dGVjb2RlT2Zmc2V0ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOworICAg
ICAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgo
KTsKIAogICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ZUZvckNhbGxGcmFtZShjYWxsRnJhbWUpOwogICAgICAgICBtX2ZyYW1lLm1fY2FsbGVlID0gY2Fs
bGVlOwpAQCAtNDIzLDcgKzQyMyw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6Y29tcHV0
ZUxpbmVBbmRDb2x1bW4odW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pCiB2b2lkIFN0
YWNrVmlzaXRvcjo6RnJhbWU6OnJldHJpZXZlRXhwcmVzc2lvbkluZm8oaW50JiBkaXZvdCwgaW50
JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYg
Y29sdW1uKSBjb25zdAogewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJs
b2NrKCk7Ci0gICAgY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5leHByZXNzaW9uUmFu
Z2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCgpLCBkaXZvdCwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKKyAgICBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJs
b2NrKCktPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCgpLCBk
aXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKICAgICBkaXZvdCAr
PSBjb2RlQmxvY2stPnNvdXJjZU9mZnNldCgpOwogfQogCkBAIC00ODUsOCArNDg1LDggQEAgdm9p
ZCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIEluZGVudGVyIGlu
ZGVudCwgV1RGOjpGdW5jdGlvbjwKICAgICAgICAgICAgIGluZGVudCsrOwogCiAgICAgICAgICAg
ICBpZiAoY2FsbEZyYW1lLT5jYWxsU2l0ZUJpdHNBcmVCeXRlY29kZU9mZnNldCgpKSB7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5dGVjb2Rl
T2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50KGluZGVudCwgImJ5dGVjb2RlT2Zm
c2V0OiAiLCBieXRlY29kZU9mZnNldCwgIiBvZiAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LnNpemUoKSwgIlxuIik7CisgICAgICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4ID0gY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgb3V0LnBy
aW50KGluZGVudCwgYnl0ZWNvZGVJbmRleCwgIiBvZiAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLnNpemUoKSwgIlxuIik7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIG91dC5wcmludChpbmRlbnQsICJoYXNDb2RlT3JpZ2luczog
IiwgY29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpLCAiXG4iKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAppbmRleCA2M2FkNDA4Y2U3MWIw
YjhlNGVkODM2NzliODdiNjYxNzRlYzE2Y2Y2Li5kMzU3NjFmZTBjNDIzNGIzOWNmNTA3YjFiNjQ1
NjU1ODRhODQ5Yjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvU3RhY2tWaXNpdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1N0YWNrVmlzaXRvci5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiQnl0ZWNvZGVJbmRleC5oIgogI2luY2x1ZGUgIkNhbGxlZUJpdHMuaCIKICNpbmNsdWRl
ICJXYXNtSW5kZXhPck5hbWUuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTY0LDcg
KzY1LDcgQEAgcHVibGljOgogICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWxsZXJGcmFtZTsgfQogICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FsbGVlOyB9CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0OyB9CisgICAgICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsg
fQogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSgpIGNvbnN0IHsKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgICAgIHJldHVybiBtX2lubGluZUNhbGxGcmFtZTsK
QEAgLTEyMCw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIENvZGVCbG9jayogbV9jb2RlQmxv
Y2s7CiAgICAgICAgIHNpemVfdCBtX2luZGV4OwogICAgICAgICBzaXplX3QgbV9hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpczsKLSAgICAgICAgdW5zaWduZWQgbV9ieXRlY29kZU9mZnNldDsKKyAg
ICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7CiAgICAgICAgIGJvb2wgbV9jYWxs
ZXJJc0VudHJ5RnJhbWUgOiAxOwogICAgICAgICBib29sIG1faXNXYXNtRnJhbWUgOiAxOwogICAg
ICAgICBXYXNtOjpJbmRleE9yTmFtZSBtX3dhc21GdW5jdGlvbkluZGV4T3JOYW1lOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGQ0NDg5N2Q2NDcwMjY4MDg1Yzg2MmEyYzhhNzU1ZmJj
YTYzZjRlZGEuLjFmZjhiNDcwNDFkZmRlZTNkNDBjYTRiODQxNTI4YjZiYzBiMDVjM2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTc0LDE2ICs3NCwxNSBAQCB2b2lkIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0
aW9uUHRyPENGdQogICAgICAgICBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25Q
dHJUYWc+KCkpOwogfQogCi1KSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCB1
bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkKK0pJVDo6SklUKFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCkKICAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQogICAgICwgbV9pbnRlcnBy
ZXRlcih2bS5pbnRlcnByZXRlcikKICAgICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKLSAgICAsIG1fYnl0ZWNvZGVPZmZzZXQoc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICwgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIodm0pCiAgICAgLCBtX2NhbkJlT3B0aW1pemVkKGZhbHNlKQogICAgICwgbV9z
aG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9zaG91bGRVc2VJbmRleE1hc2tpbmco
T3B0aW9uczo6ZW5hYmxlU3BlY3RyZU1pdGlnYXRpb25zKCkpCi0gICAgLCBtX2xvb3BPU1JFbnRy
eUJ5dGVjb2RlT2Zmc2V0KGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KQorICAgICwgbV9sb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CiB9CiAK
QEAgLTEwMCwxMSArOTksMTEgQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNr
KCkKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7CiAgICAgCiAgICAgc2tpcE9wdGltaXplLmFw
cGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25D
b3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+
YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKLSAgICBBU1NFUlQoIW1fYnl0ZWNvZGVP
ZmZzZXQpOworICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKIAogICAgIGNv
cHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25P
cHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNvZGVPZmZzZXQpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIHNr
aXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUikpOwog
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsK
ICAgICBza2lwT3B0aW1pemUubGluayh0aGlzKTsKQEAgLTEzOCwxMiArMTM3LDEyIEBAIHZvaWQg
SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogfQogCiAjZGVmaW5lIE5FWFRfT1BDT0RF
KG5hbWUpIFwKLSAgICBtX2J5dGVjb2RlT2Zmc2V0ICs9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6
ZSgpOyBcCisgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IFwKICAgICBicmVhazsK
IAogI2RlZmluZSBERUZJTkVfU0xPV19PUChuYW1lKSBcCiAgICAgY2FzZSBvcF8jI25hbWU6IHsg
XAotICAgICAgICBpZiAobV9ieXRlY29kZU9mZnNldCA+PSBzdGFydEJ5dGVjb2RlT2Zmc2V0KSB7
IFwKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgpIHsg
XAogICAgICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF8jI25hbWUpOyBcCiAgICAgICAgICAgICBzbG93UGF0aENh
bGwuY2FsbCgpOyBcCiAgICAgICAgIH0gXApAQCAtMTUyLDcgKzE1MSw3IEBAIHZvaWQgSklUOjph
c3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogCiAjZGVmaW5lIERFRklORV9PUChuYW1lKSBcCiAg
ICAgY2FzZSBuYW1lOiB7IFwKLSAgICAgICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQgPj0gc3RhcnRC
eXRlY29kZU9mZnNldCkgeyBcCisgICAgICAgIGlmIChtX2J5dGVjb2RlSW5kZXggPj0gc3RhcnRC
eXRlY29kZUluZGV4KSB7IFwKICAgICAgICAgICAgIGVtaXRfIyNuYW1lKGN1cnJlbnRJbnN0cnVj
dGlvbik7IFwKICAgICAgICAgfSBcCiAgICAgICAgIE5FWFRfT1BDT0RFKG5hbWUpOyBcCkBAIC0x
OTIsOCArMTkxLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgIG1f
Y2FsbExpbmtJbmZvSW5kZXggPSAwOwogCiAgICAgVk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7
Ci0gICAgdW5zaWduZWQgc3RhcnRCeXRlY29kZU9mZnNldCA9IDA7Ci0gICAgaWYgKG1fbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVPZmZzZXQgJiYgKG1fY29kZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29k
ZUJsb2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmluaGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2s+KHZtKSkpIHsKKyAgICBCeXRlY29kZUluZGV4IHN0YXJ0Qnl0ZWNvZGVJbmRleCgwKTsKKyAg
ICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4ICYmIChtX2NvZGVCbG9jay0+aW5oZXJp
dHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0czxNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7CiAgICAgICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMg
b3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFtQ29kZUJsb2NrJ3MgZXhhY3Rs
eSBvbmNlLgogICAgICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBiZSBpbnZhbGlkIG90
aGVyd2lzZS4gV2hlbiB0aGUgTExJbnQgZGV0ZXJtaW5lcyBpdCB3YW50cyB0bwogICAgICAgICAv
LyBkbyBPU1IgZW50cnkgaW50byB0aGUgYmFzZWxpbmUgSklUIGluIGEgbG9vcCwgaXQgd2lsbCBw
YXNzIGluIHRoZSBieXRlY29kZSBvZmZzZXQgaXQKQEAgLTIwMiwyOCArMjAxLDI4IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICAvLyBXZSBvbmx5IGJvdGhl
ciBidWlsZGluZyB0aGUgYnl0ZWNvZGUgZ3JhcGggaWYgaXQgY291bGQgc2F2ZSB0aW1lIGFuZCBl
eGVjdXRhYmxlCiAgICAgICAgIC8vIG1lbW9yeS4gV2UgcGljayBhbiBhcmJpdHJhcnkgb2Zmc2V0
IHdoZXJlIHdlIGRlZW0gdGhpcyBpcyBwcm9maXRhYmxlLgotICAgICAgICBpZiAobV9sb29wT1NS
RW50cnlCeXRlY29kZU9mZnNldCA+PSAyMDApIHsKKyAgICAgICAgaWYgKG1fbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAyMDApIHsKICAgICAgICAgICAgIC8vIEFzIGEgc2lt
cGxpZmljYXRpb24sIHdlIGRvbid0IGZpbmQgYWxsIGJ5dGVjb2RlIHJhbmdlcyB0aGF0IGFyZSB1
bnJlYWNoYWJsZS4KICAgICAgICAgICAgIC8vIEluc3RlYWQsIHdlIGp1c3QgZmluZCB0aGUgbWlu
aW11bSBieXRlY29kZSBvZmZzZXQgdGhhdCBpcyByZWFjaGFibGUsIGFuZAogICAgICAgICAgICAg
Ly8gY29tcGlsZSBjb2RlIGZyb20gdGhhdCBieXRlY29kZSBvZmZzZXQgb253YXJkcy4KIAogICAg
ICAgICAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBn
cmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVPZmZzZXQpOworICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBo
LmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJsb2NrKTsKIAogICAg
ICAgICAgICAgR3JhcGhOb2RlV29ya2xpc3Q8Qnl0ZWNvZGVCYXNpY0Jsb2NrKj4gd29ya2xpc3Q7
Ci0gICAgICAgICAgICBzdGFydEJ5dGVjb2RlT2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgICAgICAg
ICBzdGFydEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICB3b3Jr
bGlzdC5wdXNoKGJsb2NrKTsKIAogICAgICAgICAgICAgd2hpbGUgKEJ5dGVjb2RlQmFzaWNCbG9j
ayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgewotICAgICAgICAgICAgICAgIHN0YXJ0Qnl0ZWNv
ZGVPZmZzZXQgPSBzdGQ6Om1pbihzdGFydEJ5dGVjb2RlT2Zmc2V0LCBibG9jay0+bGVhZGVyT2Zm
c2V0KCkpOworICAgICAgICAgICAgICAgIHN0YXJ0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoc3RkOjptaW4oc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpLCBibG9jay0+bGVhZGVyT2Zm
c2V0KCkpKTsKICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoQWxsKGJsb2NrLT5zdWNjZXNz
b3JzKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gQWxzbyBhZGQgY2F0Y2ggYmxvY2tzIGZvciBi
eXRlY29kZXMgdGhhdCB0aHJvdy4KICAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51
bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmxlYWRlck9mZnNldCgpOyBieXRlY29kZU9m
ZnNldCA8IGJsb2NrLT5sZWFkZXJPZmZzZXQoKSArIGJsb2NrLT50b3RhbExlbmd0aCgpOykgewog
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5h
dChieXRlY29kZU9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogaGFu
ZGxlciA9IG1fY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGhhbmRsZXIgPSBtX2NvZGVC
bG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNl
dCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goZ3JhcGguZmlu
ZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGhhbmRsZXItPnRhcmdldCkpOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICBieXRlY29kZU9mZnNldCArPSBpbnN0cnVjdGlvbi0+c2l6ZSgpOwpA
QCAtMjMzLDI5ICsyMzIsMjkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChtX2J5dGVjb2RlT2Zmc2V0ID0gMDsgbV9ieXRl
Y29kZU9mZnNldCA8IGluc3RydWN0aW9uQ291bnQ7ICkgewotICAgICAgICBpZiAobV9ieXRlY29k
ZU9mZnNldCA9PSBzdGFydEJ5dGVjb2RlT2Zmc2V0ICYmIHN0YXJ0Qnl0ZWNvZGVPZmZzZXQgPiAw
KSB7CisgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgaWYgKG1f
Ynl0ZWNvZGVJbmRleCA9PSBzdGFydEJ5dGVjb2RlSW5kZXggJiYgc3RhcnRCeXRlY29kZUluZGV4
Lm9mZnNldCgpID4gMCkgewogICAgICAgICAgICAgLy8gV2UndmUgcHJvdmVuIGFsbCBieXRlY29k
ZSBpbnN0cnVjdGlvbnMgdXAgdW50aWwgaGVyZSBhcmUgdW5yZWFjaGFibGUuCiAgICAgICAgICAg
ICAvLyBMZXQncyBlbnN1cmUgdGhhdCBieSBjcmFzaGluZyBpZiBpdCdzIGV2ZXIgaGl0LgogICAg
ICAgICAgICAgYnJlYWtwb2ludCgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fZGlzYXNz
ZW1ibGVyKQotICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckJ5dGVjb2RlTWFpblBh
dGgobV9ieXRlY29kZU9mZnNldCwgbGFiZWwoKSk7Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQobV9ieXRlY29kZU9mZnNldCku
cHRyKCk7Ci0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCksICJwcml2YXRlQ29tcGlsZU1haW5QYXNzIGdvbmUgYmFkIEAgJWQiLCBtX2J5dGVjb2Rl
T2Zmc2V0KTsKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZU1haW5Q
YXRoKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbGFiZWwoKSk7CisgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQobV9ieXRlY29k
ZUluZGV4KS5wdHIoKTsKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
KTsKIAotICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVs
KCksIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCkpOworICAgICAgICBtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSk7CiAKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgICAgICBpZiAobV9ieXRl
Y29kZU9mZnNldCA+IDApIC8vIEF2b2lkIHRoZSBvdmVyaGVhZCBvZiBzYW1wbGluZyBvcF9lbnRl
ciB0d2ljZS4KKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+IDApIC8vIEF2b2lkIHRoZSBv
dmVyaGVhZCBvZiBzYW1wbGluZyBvcF9lbnRlciB0d2ljZS4KICAgICAgICAgICAgIHNhbXBsZUlu
c3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZW5kaWYKIAotICAgICAgICBtX2xhYmVs
c1ttX2J5dGVjb2RlT2Zmc2V0XSA9IGxhYmVsKCk7CisgICAgICAgIG1fbGFiZWxzW21fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKV0gPSBsYWJlbCgpOwogCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6
dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCJPbGQgSklUIGVtaXR0aW5nIGNvZGUgZm9y
IGJjIyV1IGF0IG9mZnNldCAweCVseC5cbiIsIG1fYnl0ZWNvZGVPZmZzZXQsIChsb25nKWRlYnVn
T2Zmc2V0KCkpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCJPbGQgSklUIGVtaXR0aW5nIGNvZGUg
Zm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQo
KSk7CiAKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9w
Y29kZUlEKCk7CiAKQEAgLTI2MywxMyArMjYyLDEzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKICAgICAgICAgICAgIGFkZDY0KAogICAgICAgICAgICAgICAgIFRydXN0ZWRJ
bW0zMigxKSwKICAgICAgICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb21waWxhdGlvbi0+
ZXhlY3V0aW9uQ291bnRlckZvcihQcm9maWxlcjo6T3JpZ2luU3RhY2soUHJvZmlsZXI6Ok9yaWdp
bigKLSAgICAgICAgICAgICAgICAgICAgbV9jb21waWxhdGlvbi0+Ynl0ZWNvZGVzKCksIG1fYnl0
ZWNvZGVPZmZzZXQpKSktPmFkZHJlc3MoKSkpOworICAgICAgICAgICAgICAgICAgICBtX2NvbXBp
bGF0aW9uLT5ieXRlY29kZXMoKSwgbV9ieXRlY29kZUluZGV4KSkpLT5hZGRyZXNzKCkpKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKE9wdGlvbnM6OmVhZ2VybHlVcGRhdGVUb3BD
YWxsRnJhbWUoKSkKICAgICAgICAgICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogCi0gICAgICAg
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZU9mZnNldDsKKyAgICAgICAgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAjaWYgRU5B
QkxFKE1BU01fUFJPQkUpCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2Vs
aW5lSklURXhlY3V0aW9uKCkpKSB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IG1fY29kZUJsb2NrOwpAQCAtNDcyLDcgKzQ3MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKIAogI2lmbmRlZiBOREVCVUcKICAgICAvLyBSZXNldCB0aGlzLCBpbiBvcmRl
ciB0byBndWFyZCBpdHMgdXNlIHdpdGggQVNTRVJUcy4KLSAgICBtX2J5dGVjb2RlT2Zmc2V0ID0g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgIG1fYnl0ZWNvZGVJbmRl
eCA9IEJ5dGVjb2RlSW5kZXgoKTsKICNlbmRpZgogfQogCkBAIC00OTUsMjggKzQ5NCwyOCBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIG1fY2FsbExpbmtJbmZvSW5k
ZXggPSAwOwogICAgIAogICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBp
dGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTspIHsK
LSAgICAgICAgbV9ieXRlY29kZU9mZnNldCA9IGl0ZXItPnRvOworICAgICAgICBtX2J5dGVjb2Rl
SW5kZXggPSBpdGVyLT50bzsKIAotICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5h
cHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCkpOworICAgICAg
ICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSk7CiAKLSAgICAgICAgdW5zaWduZWQgZmlyc3RUbyA9IG1fYnl0
ZWNvZGVPZmZzZXQ7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJ
bmRleDsKIAotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVPZmZzZXQpLnB0cigpOwor
ICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIAog
ICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJvZmlsZSA9IDA7CiAgICAgICAgIGlm
IChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICByYXJlQ2FzZVByb2ZpbGUgPSBt
X2NvZGVCbG9jay0+YWRkUmFyZUNhc2VQcm9maWxlKG1fYnl0ZWNvZGVPZmZzZXQpOworICAgICAg
ICAgICAgcmFyZUNhc2VQcm9maWxlID0gbV9jb2RlQmxvY2stPmFkZFJhcmVDYXNlUHJvZmlsZSht
X2J5dGVjb2RlSW5kZXgpOwogCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAg
ICAgICAgICAgIGRhdGFMb2dGKCJPbGQgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgYmMjJXUg
YXQgb2Zmc2V0IDB4JWx4LlxuIiwgbV9ieXRlY29kZU9mZnNldCwgKGxvbmcpZGVidWdPZmZzZXQo
KSk7CisgICAgICAgICAgICBkYXRhTG9nTG4oIk9sZCBKSVQgZW1pdHRpbmcgc2xvdyBjb2RlIGZv
ciAiLCBtX2J5dGVjb2RlSW5kZXgsICIgYXQgb2Zmc2V0ICIsIChsb25nKWRlYnVnT2Zmc2V0KCkp
OwogCiAgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKLSAgICAgICAgICAgIG1fZGlzYXNzZW1i
bGVyLT5zZXRGb3JCeXRlY29kZVNsb3dQYXRoKG1fYnl0ZWNvZGVPZmZzZXQsIGxhYmVsKCkpOwor
ICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckJ5dGVjb2RlU2xvd1BhdGgobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpLCBsYWJlbCgpKTsKIAogI2lmIEVOQUJMRShNQVNNX1BST0JFKQog
ICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigp
KSkgewogICAgICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
Pm9wY29kZUlEKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVPZmZzZXQ7CisgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZShbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgp
IHsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJd
IFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5m
cCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CkBAIC02MjMsNyArNjIyLDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogI2lmbmRlZiBOREVCVUcKICAgICAvLyBSZXNldCB0
aGlzLCBpbiBvcmRlciB0byBndWFyZCBpdHMgdXNlIHdpdGggQVNTRVJUcy4KLSAgICBtX2J5dGVj
b2RlT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsKICNlbmRpZgogfQogCkBAIC02NzQsNyAr
NjczLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQpCiAgICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVz
KCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKICAgICB9CiAgICAg
Ci0gICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2Rl
T3JpZ2luKDAsIG51bGxwdHIpKTsKKyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBl
bmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwogCiAgICAgTGFi
ZWwgZW50cnlMYWJlbCh0aGlzKTsKICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCkBAIC03MTEsNyAr
NzEwLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQpCiAgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKIAog
ICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKLSAgICAg
ICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKTsKKyAgICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICBp
ZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgICAgICBmb3IgKGludCBhcmd1bWVu
dCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVu
dCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3
ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwpAQCAtNzQxLDcgKzc0
MCw3IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFi
ZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAog
ICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKLSAgICBtX2J5dGVjb2RlT2Zmc2V0ID0gMDsK
KyAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3Rh
dGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tP
bkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgbV9jb2RlQmxvY2sp
OwpAQCAtNzU3LDcgKzc1Niw3IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklU
Q29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgcmVnVDEpOwogICAgICAgICBicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVy
cykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAotICAgICAgICBtX2J5dGVjb2RlT2Zmc2V0
ID0gMDsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKIAogICAg
ICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC03NjksNyArNzY4LDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQpCiAgICAgICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAotICAgICAgICBtX2J5dGVjb2RlT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpOyAvLyBSZXNldCB0aGlzLCBpbiBvcmRlciB0byBndWFyZCBpdHMgdXNlIHdpdGgg
QVNTRVJUcy4KKyAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOyAvLyBS
ZXNldCB0aGlzLCBpbiBvcmRlciB0byBndWFyZCBpdHMgdXNlIHdpdGggQVNTRVJUcy4KICNlbmRp
ZgogCiAgICAgICAgIGp1bXAoYmVnaW5MYWJlbCk7CkBAIC04MDksNyArODA4LDcgQEAgQ29tcGls
YXRpb25SZXN1bHQgSklUOjpsaW5rKCkKIAogICAgIC8vIFRyYW5zbGF0ZSB2UEMgb2Zmc2V0cyBp
bnRvIGFkZHJlc3NlcyBpbiBKSVQgZ2VuZXJhdGVkIGNvZGUsIGZvciBzd2l0Y2ggdGFibGVzLgog
ICAgIGZvciAoYXV0byYgcmVjb3JkIDogbV9zd2l0Y2hlcykgewotICAgICAgICB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IHJlY29yZC5ieXRlY29kZU9mZnNldDsKKyAgICAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQgPSByZWNvcmQuYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKIAogICAgICAg
ICBpZiAocmVjb3JkLnR5cGUgIT0gU3dpdGNoUmVjb3JkOjpTdHJpbmcpIHsKICAgICAgICAgICAg
IEFTU0VSVChyZWNvcmQudHlwZSA9PSBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSB8fCByZWNvcmQu
dHlwZSA9PSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rlcik7IApAQCAtODk0LDcgKzg5Myw3IEBAIENv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgSklUQ29kZU1hcCBqaXRDb2RlTWFwOwog
ICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1f
bGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgewogICAgICAgICBpZiAobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCi0gICAgICAgICAgICBqaXRDb2RlTWFwLmFwcGVuZChi
eXRlY29kZU9mZnNldCwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xh
YmVsc1tieXRlY29kZU9mZnNldF0pKTsKKyAgICAgICAgICAgIGppdENvZGVNYXAuYXBwZW5kKEJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50
cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwogICAgIH0KICAgICBqaXRDb2Rl
TWFwLmZpbmlzaCgpOwogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKFdURk1vdmUoaml0
Q29kZU1hcCkpOwpAQCAtOTQ5LDcgKzk0OCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4
Y2VwdGlvbkhhbmRsZXJzKCkKICAgICAgICAgLy8gb3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFu
ZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgb25lIGFyZ3VtZW50LCB0aGUgVk0qLgogICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwog
ICAgICAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSgpKTsKLSAgICAgICAgbV9jYWxscy5hcHBl
bmQoQ2FsbFJlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25M
b29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKSkpOworICAgICAgICBtX2NhbGxz
LmFwcGVuZChDYWxsUmVjb3JkKGNhbGwoT3BlcmF0aW9uUHRyVGFnKSwgQnl0ZWNvZGVJbmRleCgp
LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXJGcm9tQ2FsbGVyRnJhbWUpKSk7CiAgICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIo
dm0oKSk7CiAgICAgfQogCkBAIC05NjIsNyArOTYxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlRXhjZXB0aW9uSGFuZGxlcnMoKQogICAgICAgICAvLyBvcGVyYXRpb25Mb29rdXBFeGNlcHRp
b25IYW5kbGVyIGlzIHBhc3NlZCBvbmUgYXJndW1lbnQsIHRoZSBWTSouCiAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cigmdm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIHBy
ZXBhcmVDYWxsT3BlcmF0aW9uKHZtKCkpOwotICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVj
b3JkKGNhbGwoT3BlcmF0aW9uUHRyVGFnKSwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXIpKSk7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbChP
cGVyYXRpb25QdHJUYWcpLCBCeXRlY29kZUluZGV4KCksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpKTsKICAgICAgICAganVtcFRv
RXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApp
bmRleCAxOTc3OWEzYzIzY2NjZDU3MDIxN2JkNDQ3YTQ3MmJjMTA4MjhhZTcwLi5kNDVmYzAzNTBj
YjEyOGQ2ZWIxNGM1Yzc5MDg0NmJiMmRiMWYxOTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
QEAgLTcwLDE2ICs3MCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHN0cnVjdCBDYWxsUmVj
b3JkIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnJvbTsKLSAgICAgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsK
ICAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjYWxsZWU7CiAKICAgICAgICAg
Q2FsbFJlY29yZCgpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIENhbGxSZWNvcmQo
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnJvbSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY2FsbGVlKQorICAgICAgICBDYWxsUmVjb3JkKE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGZyb20sIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjYWxsZWUpCiAgICAgICAgICAgICA6IGZyb20oZnJvbSkK
LSAgICAgICAgICAgICwgYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICAg
ICAsIGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgICwgY2FsbGVlKGNh
bGxlZSkKICAgICAgICAgewogICAgICAgICB9CkBAIC05OCw5ICs5OCw5IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgc3RydWN0IFNsb3dDYXNlRW50cnkgewogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBmcm9tOwotICAgICAgICB1bnNpZ25lZCB0bzsKKyAgICAgICAgQnl0ZWNvZGVJbmRl
eCB0bzsKICAgICAgICAgCi0gICAgICAgIFNsb3dDYXNlRW50cnkoTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZiwgdW5zaWduZWQgdCkKKyAgICAgICAgU2xvd0Nhc2VFbnRyeShNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBmLCBCeXRlY29kZUluZGV4IHQpCiAgICAgICAgICAgICA6IGZyb20oZikKICAgICAgICAg
ICAgICwgdG8odCkKICAgICAgICAgewpAQCAtMTIxLDIwICsxMjEsMjAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUqIHN0cmluZ0p1bXBUYWJsZTsKICAgICAg
ICAgfSBqdW1wVGFibGU7CiAKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQ7CisgICAg
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKICAgICAgICAgdW5zaWduZWQgZGVmYXVs
dE9mZnNldDsKIAotICAgICAgICBTd2l0Y2hSZWNvcmQoU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFi
bGUsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0LCBUeXBl
IHR5cGUpCisgICAgICAgIFN3aXRjaFJlY29yZChTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSwg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0LCBUeXBl
IHR5cGUpCiAgICAgICAgICAgICA6IHR5cGUodHlwZSkKLSAgICAgICAgICAgICwgYnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICAgICAsIGJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCkKICAgICAgICAgICAgICwgZGVmYXVsdE9mZnNldChkZWZhdWx0T2Zmc2V0KQogICAg
ICAgICB7CiAgICAgICAgICAgICB0aGlzLT5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlID0ganVt
cFRhYmxlOwogICAgICAgICB9CiAKLSAgICAgICAgU3dpdGNoUmVjb3JkKFN0cmluZ0p1bXBUYWJs
ZSoganVtcFRhYmxlLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgdW5zaWduZWQgZGVmYXVsdE9m
ZnNldCkKKyAgICAgICAgU3dpdGNoUmVjb3JkKFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlLCBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQpCiAgICAg
ICAgICAgICA6IHR5cGUoU3RyaW5nKQotICAgICAgICAgICAgLCBieXRlY29kZU9mZnNldChieXRl
Y29kZU9mZnNldCkKKyAgICAgICAgICAgICwgYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQog
ICAgICAgICAgICAgLCBkZWZhdWx0T2Zmc2V0KGRlZmF1bHRPZmZzZXQpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHRoaXMtPmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUgPSBqdW1wVGFibGU7CkBA
IC0xNDQsNyArMTQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IEJ5VmFsQ29tcGls
YXRpb25JbmZvIHsKICAgICAgICAgQnlWYWxDb21waWxhdGlvbkluZm8oKSB7IH0KICAgICAgICAg
Ci0gICAgICAgIEJ5VmFsQ29tcGlsYXRpb25JbmZvKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBub3RJbmRl
eEp1bXAsIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wLCBKSVRBcnJh
eU1vZGUgYXJyYXlNb2RlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIGRvbmVUYXJnZXQsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBuZXh0SG90UGF0aFRh
cmdldCkKKyAgICAgICAgQnlWYWxDb21waWxhdGlvbkluZm8oQnlWYWxJbmZvKiBieVZhbEluZm8s
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1
bXAgbm90SW5kZXhKdW1wLCBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVt
cCwgSklUQXJyYXlNb2RlIGFycmF5TW9kZSwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lVGFyZ2V0LCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbmV4
dEhvdFBhdGhUYXJnZXQpCiAgICAgICAgICAgICA6IGJ5VmFsSW5mbyhieVZhbEluZm8pCiAgICAg
ICAgICAgICAsIGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgICwgbm90
SW5kZXhKdW1wKG5vdEluZGV4SnVtcCkKQEAgLTE1Nyw3ICsxNTcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogCiAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvOwotICAgICAgICB1
bnNpZ25lZCBieXRlY29kZUluZGV4OworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXg7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG5vdEluZGV4SnVtcDsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CiAgICAg
ICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGU7CkBAIC0xOTIsNyArMTkyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRP
ZmZzZXQgPSAyNTY7CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIEpJVChWTSYsIENvZGVCbG9jayog
PSAwLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IDApOworICAgICAgICBK
SVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CiAKICAg
ICAgICAgVk0mIHZtKCkgeyByZXR1cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CkBAIC0yMDIs
NyArMjAyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQ
cmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBDb21w
aWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENv
bXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwKQorICAg
ICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShl
ZmZvcnQpOwogICAgICAgICB9CkBAIC0yMTAsMjggKzIxMCwyOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYgbG9ja2VyLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwot
ICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5k
ZXg7CisgICAgICAgICAgICBqaXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlWYWwobG9ja2VyLCBi
eVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogICAgICAgICB7CiAg
ICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0
ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQu
bV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAg
aml0LnByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQoYnlWYWxJbmZvLCByZXR1cm5B
ZGRyZXNzLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQg
Y29tcGlsZVB1dEJ5VmFsKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7CiAg
ICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1fYnl0
ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQu
bV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAg
aml0LnByaXZhdGVDb21waWxlUHV0QnlWYWw8T3BQdXRCeVZhbD4obG9ja2VyLCBieVZhbEluZm8s
IHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IHN0YXRpYyB2b2lkIGNvbXBpbGVEaXJlY3RQdXRCeVZhbChjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlciwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSkKICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKLSAg
ICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4
OworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJ
bmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsPE9wUHV0QnlWYWxE
aXJlY3Q+KGxvY2tlciwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAg
ICAgICB9CiAKQEAgLTIzOSwxNCArMjM5LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBz
dGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7Ci0gICAgICAg
ICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAg
ICAgICAgICAgIGppdC5tX2J5dGVjb2RlSW5kZXggPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7
CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcD4o
YnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwotICAgICAgICAgICAgaml0Lm1f
Ynl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBq
aXQubV9ieXRlY29kZUluZGV4ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAg
ICAgaml0LnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KGJ5VmFsSW5mbywgcmV0dXJu
QWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQogCkBAIC0yNzcsNyArMjc3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQogICAgICAgICB7CiAgICAgICAgICAgICBDYWxsIGZ1
bmN0aW9uQ2FsbCA9IGNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKLSAgICAgICAgICAgIG1fY2FsbHMu
YXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBmdW5jdGlv
bi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpKTsKKyAgICAgICAgICAgIG1fY2FsbHMuYXBw
ZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBtX2J5dGVjb2RlSW5kZXgsIGZ1bmN0aW9uLnJl
dGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkpOwogICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
Q2FsbDsKICAgICAgICAgfQogCkBAIC03NTQsMTIgKzc1NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgICsraXRlcjsKICAgICAgICAgfQogICAgICAgICB2b2lkIGxpbmtTbG93Q2Fz
ZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBpbnQgdmlydHVh
bFJlZ2lzdGVySW5kZXgpOwotICAgICAgICB2b2lkIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29k
ZU9mZnNldChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKLSAgICAgICAgICAgIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7
CisgICAgICAgIHZvaWQgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNs
b3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsCisgICAgICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCk7CiAKICAgICAgICAg
dm9pZCBsaW5rQWxsU2xvd0Nhc2VzKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZU9m
ZnNldChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZU9mZnNldCk7CisgICAgICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRl
Y29kZUluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPik7CkBAIC05MzQsNyArOTM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3Rv
cjxDYWxsQ29tcGlsYXRpb25JbmZvPiBtX2NhbGxDb21waWxhdGlvbkluZm87CiAgICAgICAgIFZl
Y3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CiAKLSAgICAgICAgdW5zaWduZWQgbV9ieXRlY29k
ZU9mZnNldDsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7CiAgICAgICAg
IFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRj
aFJlY29yZD4gbV9zd2l0Y2hlczsKIApAQCAtOTY4LDcgKzk2OCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wg
bV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBib29sIG1fc2hvdWxkVXNlSW5kZXhNYXNr
aW5nOwotICAgICAgICB1bnNpZ25lZCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0IHsgMCB9
OworICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCmluZGV4IDc4YTNhNDFhNGI5NzMwYmM5M2VkZjZlYjU0NDU3ODJlY2QxNzg4MzAuLmJmMjMw
NmJjZTRkNTZmMTA5YTAzNjE4YjM0MDcyZmM1N2MwZTVhYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcApAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7
CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygp
OwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIENvZGVPcmlnaW4obV9i
eXRlY29kZU9mZnNldCksIHJlZ1QwKTsKKyAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZv
OjpDYWxsLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIHJlZ1QwKTsKIAogICAgIGludCBy
ZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CiAKQEAgLTIyNiw4ICsyMjYsOCBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZAogICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBp
bmZvKTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uKTsK
LSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KS5iaXRzKCk7CisgICAgYXV0byBieXRlY29kZUluZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2Rl
SW5kZXgoaW5zdHJ1Y3Rpb24pOworICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRl
SW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxv
Y2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zm
c2V0KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyBy
ZWdUMCBob2xkcyBjYWxsZWUuCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmQKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZSk7CiAKICAgICBBU1NFUlQobV9jYWxsQ29t
cGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0
VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVPZmZzZXQpLCByZWdUMCk7CisgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5m
bzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIHJl
Z1QwKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbklu
Zm8oKSk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQ
YXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwogICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZU1hcC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlTWFwLmgKaW5kZXggZTEzMDhmMzM1YjhhMzc0NzU5YTg4
NzAwZDhkM2ZmNzU0ZTc5ZjU5Ny4uZTA3NTcyNGY5ZGZlOGJkNDk1YzIxM2Q0YzVmMWIyMWY1ZTFi
YzQ2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlTWFwLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlTWFwLmgKQEAgLTM4LDMxICsz
OCwzMSBAQCBwcml2YXRlOgogICAgIHN0cnVjdCBFbnRyeSB7CiAgICAgICAgIEVudHJ5KCkgeyB9
CiAKLSAgICAgICAgRW50cnkodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uKQorICAgICAgICBFbnRyeShCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVM
b2NhdGlvbikKICAgICAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAg
ICAgICAgICAgICAsIG1fY29kZUxvY2F0aW9uKGNvZGVMb2NhdGlvbikKICAgICAgICAgeyB9CiAK
LSAgICAgICAgaW5saW5lIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2J5dGVjb2RlSW5kZXg7IH0KKyAgICAgICAgaW5saW5lIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQogICAgICAgICBpbmxpbmUg
Q29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29kZUxvY2F0aW9uKCkgeyByZXR1cm4g
bV9jb2RlTG9jYXRpb247IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHVuc2lnbmVkIG1fYnl0
ZWNvZGVJbmRleDsKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7CiAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IG1fY29kZUxvY2F0aW9uOwogICAg
IH07CiAKIHB1YmxpYzoKLSAgICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBD
b2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24pCisgICAgdm9pZCBh
cHBlbmQoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24pCiAgICAgewogICAgICAgICBtX2VudHJpZXMuYXBwZW5k
KHsgYnl0ZWNvZGVJbmRleCwgY29kZUxvY2F0aW9uIH0pOwogICAgIH0KIAogICAgIHZvaWQgZmlu
aXNoKCkgeyBtX2VudHJpZXMuc2hyaW5rVG9GaXQoKTsgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNFbnRyeVB0clRhZz4gZmluZCh1bnNpZ25lZCBieXRlY29kZUluZGV4KSBjb25zdAorICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGZpbmQoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAgYXV0byogZW50cnkgPQotICAgICAgICAg
ICAgYmluYXJ5U2VhcmNoPEVudHJ5LCB1bnNpZ25lZD4obV9lbnRyaWVzLAorICAgICAgICAgICAg
YmluYXJ5U2VhcmNoPEVudHJ5LCBCeXRlY29kZUluZGV4PihtX2VudHJpZXMsCiAgICAgICAgICAg
ICAgICAgbV9lbnRyaWVzLnNpemUoKSwgYnl0ZWNvZGVJbmRleCwgW10gKEVudHJ5KiBlbnRyeSkg
ewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnktPmJ5dGVjb2RlSW5kZXgoKTsKICAg
ICAgICAgICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNz
ZW1ibGVyLmNwcAppbmRleCAyMGVkMzdmZWUzYTBmM2M5OWM2MjgyNTQ1YTRjMTBiM2JiZTM3OWM5
Li43NWY5ZTI1MTYxYjUyMzZiMzBjODNmMzM2ZDFkZWRkMTM0OGUyZGRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwCkBAIC0xMTgsNyArMTE4LDcg
QEAgVmVjdG9yPEpJVERpc2Fzc2VtYmxlcjo6RHVtcGVkT3A+IEpJVERpc2Fzc2VtYmxlcjo6ZHVt
cFZlY3RvckZvckluc3RydWN0aW9ucyhMaW4KICAgICAgICAgfQogICAgICAgICBvdXQucmVzZXQo
KTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChEdW1wZWRPcCgpKTsKLSAgICAgICAgcmVzdWx0Lmxh
c3QoKS5pbmRleCA9IGk7CisgICAgICAgIHJlc3VsdC5sYXN0KCkuYnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgoaSk7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgpOwogICAgICAgICBtX2Nv
ZGVCbG9jay0+ZHVtcEJ5dGVjb2RlKG91dCwgaSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbmV4
dEluZGV4ID0gaSArIDE7IDsgbmV4dEluZGV4KyspIHsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lk
IEpJVERpc2Fzc2VtYmxlcjo6cmVwb3J0SW5zdHJ1Y3Rpb25zKFByb2ZpbGVyOjpDb21waWxhdGlv
biogY29tcGlsYXRpb24sIExpbgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkdW1wZWRP
cHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29tcGlsYXRpb24tPmFkZERlc2NyaXB0aW9uKAog
ICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGVkQnl0ZWNvZGUoCi0gICAgICAgICAgICAgICAg
UHJvZmlsZXI6Ok9yaWdpblN0YWNrKFByb2ZpbGVyOjpPcmlnaW4oY29tcGlsYXRpb24tPmJ5dGVj
b2RlcygpLCBkdW1wZWRPcHNbaV0uaW5kZXgpKSwKKyAgICAgICAgICAgICAgICBQcm9maWxlcjo6
T3JpZ2luU3RhY2soUHJvZmlsZXI6Ok9yaWdpbihjb21waWxhdGlvbi0+Ynl0ZWNvZGVzKCksIGR1
bXBlZE9wc1tpXS5ieXRlY29kZUluZGV4KSksCiAgICAgICAgICAgICAgICAgZHVtcGVkT3BzW2ld
LmRpc2Fzc2VtYmx5KSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
RGlzYXNzZW1ibGVyLmgKaW5kZXggNWUzMjI4NjAxYTM0MDI0N2RiZmIwOGY1OGUyYWNiNTI5NWZl
YWE5Zi4uNWE2Mjc2YWVjODYxYmE3ZGQwMGUxYTQwYzk1MGY1MTJjMTRlMTFkNyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5oCkBAIC02Nyw3ICs2Nyw3IEBA
IHByaXZhdGU6CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGZpcnN0U2xvd0xhYmVsKCk7CiAg
ICAgCiAgICAgc3RydWN0IER1bXBlZE9wIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXg7CisgICAg
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKICAgICAgICAgQ1N0cmluZyBkaXNhc3Nl
bWJseTsKICAgICB9OwogICAgIFZlY3RvcjxEdW1wZWRPcD4gZHVtcFZlY3RvckZvckluc3RydWN0
aW9ucyhMaW5rQnVmZmVyJiwgY29uc3QgY2hhciogcHJlZml4LCBWZWN0b3I8TWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsPiYgbGFiZWxzLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZW5kTGFiZWwpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAppbmRleCAzOTU5YjhkNTA4OGM0ZmE3MDcw
ZjRlNTg2YWIwOGM3NTQzZjFkMjgxLi4xMDgwMDQ2M2JhYzk3OGFhYmJiMWFhZDRlYTU2YzY3OGM3
NTFiNjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaApAQCAtMTA5LDI5
ICsxMDksMjMgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdExvYWRDaGFyYWN0ZXJTdHJp
bmcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0LAogCiBBTFdBWVNfSU5MSU5FIEpJVDo6
Q2FsbCBKSVQ6OmVtaXROYWtlZENhbGwoQ29kZVB0cjxOb1B0clRhZz4gdGFyZ2V0KQogewotICAg
IEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0Lgor
ICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVj
b2RlSW5kZXggaXMgc2V0LgogICAgIENhbGwgbmFrZWRDYWxsID0gbmVhckNhbGwoKTsKLSAgICBt
X2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPih0YXJnZXQucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFn
PigpKSkpOworICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQobmFrZWRDYWxsLCBtX2J5dGVj
b2RlSW5kZXgsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4odGFyZ2V0LnJldGFnZ2VkPE9w
ZXJhdGlvblB0clRhZz4oKSkpKTsKICAgICByZXR1cm4gbmFrZWRDYWxsOwogfQogCiBBTFdBWVNf
SU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZFRhaWxDYWxsKENvZGVQdHI8Tm9QdHJUYWc+
IHRhcmdldCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
T2Zmc2V0IGlzIHNldC4KKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5l
YXJUYWlsQ2FsbCgpOwotICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQobmFrZWRDYWxsLCBt
X2J5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHRhcmdldC5yZXRh
Z2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpKSk7CisgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29y
ZChuYWtlZENhbGwsIG1fYnl0ZWNvZGVJbmRleCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
Pih0YXJnZXQucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKSkpOwogICAgIHJldHVybiBuYWtl
ZENhbGw7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmFtZSgp
CiB7Ci0gICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4obV9ieXRlY29kZU9mZnNldCkgPj0gMCk7
Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZU9mZnNldCkucHRy
KCk7Ci0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlv
bikuYml0cygpOwotI2Vsc2UKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLmJpdHMoKTsKLSNlbmRpZgorICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7CiAgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKTsKICAgICAKICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgdGhhdCB0
aGlzIGlzIG5lZWRlZC4gSklUT3BlcmF0aW9ucyB0ZW5kIHRvIHVwZGF0ZSB0aGUgdG9wIGNhbGwg
ZnJhbWUgb24KQEAgLTE5Niw0NSArMTkwLDQ1IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxp
bmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImCiAg
ICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYg
c2xvd0Nhc2VzLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtBbGxTbG93Q2Fz
ZXNGb3JCeXRlY29kZUluZGV4KFZlY3RvcjxTbG93Q2FzZUVudHJ5PiYgc2xvd0Nhc2VzLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgpCiB7Ci0gICAgd2hpbGUgKGl0ZXIgIT0gc2xvd0Nhc2VzLmVuZCgpICYmIGl0ZXItPnRv
ID09IGJ5dGVjb2RlT2Zmc2V0KQorICAgIHdoaWxlIChpdGVyICE9IHNsb3dDYXNlcy5lbmQoKSAm
JiBpdGVyLT50byA9PSBieXRlY29kZUluZGV4KQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkKIHsK
LSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNl
dC4KKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldC4KIAotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KGp1bXAsIG1fYnl0ZWNvZGVPZmZzZXQpKTsKKyAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xv
d0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0KQogewotICAgIEFT
U0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2Nv
bGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgorICAg
IEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
SW5kZXggaXMgc2V0LgogCiAgICAgZm9yIChjb25zdCBKdW1wJiBqdW1wIDoganVtcExpc3QuanVt
cHMoKSkKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9i
eXRlY29kZU9mZnNldCkpOworICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRy
eShqdW1wLCBtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
YWRkU2xvd0Nhc2UoKQogewotICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0
ZWNvZGVPZmZzZXQgaXMgc2V0LgorICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlz
IG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJh
dGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogICAgIAogICAgIEp1bXAgZW1w
dHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3MgaGFwcHkuCi0gICAg
bV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlT2Zm
c2V0KSk7CisgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBt
X2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChK
dW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9m
ZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1l
dGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlv
biwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKyAgICBBU1NFUlQobV9ieXRlY29k
ZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAot
ICAgIG1fam1wVGFibGUuYXBwZW5kKEp1bXBUYWJsZShqdW1wLCBtX2J5dGVjb2RlT2Zmc2V0ICsg
cmVsYXRpdmVPZmZzZXQpKTsKKyAgICBtX2ptcFRhYmxlLmFwcGVuZChKdW1wVGFibGUoanVtcCwg
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZzZXQpKTsKIH0KIAogQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6YWRkSnVtcChjb25zdCBKdW1wTGlzdCYganVtcExpc3QsIGludCBy
ZWxhdGl2ZU9mZnNldCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25s
eSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5
dGVjb2RlT2Zmc2V0IGlzIHNldC4KKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGZvciAoYXV0byYg
anVtcCA6IGp1bXBMaXN0Lmp1bXBzKCkpCiAgICAgICAgIGFkZEp1bXAoanVtcCwgcmVsYXRpdmVP
ZmZzZXQpOwpAQCAtMjQyLDkgKzIzNiw5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1
bXAoY29uc3QgSnVtcExpc3QmIGp1bXBMaXN0LCBpbnQgcmVsYXRpdmVPZmZzZXQpCiAKIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90KEp1bXAganVtcCwgaW50IHJlbGF0
aXZlT2Zmc2V0KQogewotICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNv
ZGVPZmZzZXQgaXMgc2V0LgorICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1l
dGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlv
biwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAganVtcC5saW5rVG8obV9s
YWJlbHNbbV9ieXRlY29kZU9mZnNldCArIHJlbGF0aXZlT2Zmc2V0XSwgdGhpcyk7CisgICAganVt
cC5saW5rVG8obV9sYWJlbHNbbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpICsgcmVsYXRpdmVPZmZz
ZXRdLCB0aGlzKTsKIH0KIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKQEAgLTU3Myw3ICs1
NjcsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50
IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdAogLy8gZ2V0IGFyZyBwdXRzIGFuIGFyZyBm
cm9tIHRoZSBTRiByZWdpc3RlciBhcnJheSBpbnRvIGEgaC93IHJlZ2lzdGVyCiBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIFJlZ2lzdGVySUQg
ZHN0KQogewotICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZz
ZXQgaXMgc2V0LgorICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBz
aG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28g
dGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCmluZGV4IGYzYWI1OWFhOTQyMzRlYTQxMjhlYjQ5NWMzOTJjZTk5NWI2NjMzMmYu
LjBmYzQwNjkyN2Y3MmRiYTBiZTU3NWJiOGIwMGI5ZjRjYTZlNmZjOWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKIAogICAg
IEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwK
KyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKICAgICAgICAgcmVn
VDIsIC8vIHZhbHVlCkBAIC03MjAsOSArNzIwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2go
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVmZmVy
IHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZU9mZnNldCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRl
Y29kZUluZGV4LmFzQml0cygpKTsKICAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29k
ZU9mZnNldCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENh
dGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAg
ICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIp
OwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKQEAgLTc2MCw3ICs3NjAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRh
YmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZU9mZnNldCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKKyAgICBtX3N3aXRjaGVz
LmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVD
VElUYWJsZSgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1Qw
KTsKQEAgLTc3Nyw3ICs3NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29y
ZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29y
ZDo6Q2hhcmFjdGVyKSk7CisgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBU
YWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJh
Y3RlcikpOwogICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CkBAIC03OTQsNyArNzk0LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5h
dGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTdHJpbmdKdW1wVGFibGUq
IGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwotICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0
ZWNvZGVPZmZzZXQsIGRlZmF1bHRPZmZzZXQpKTsKKyAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0
Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQpKTsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwpA
QCAtMTAzNiw3ICsxMDM2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKIAogICAgICAgICBj
b3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZU9mZnNldCk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkp
OwogICAgICAgICBKdW1wIG5vT3B0aW1pemVkRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJl
dHVyblZhbHVlR1BSKTsKICAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKICAgICAgICAg
ICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCByZXR1cm5WYWx1
ZUdQUiwgVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0
cl90PigxMDAwKSkpKTsKQEAgLTEzMDEsNyArMTMwMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5
dGVjb2RlT2Zmc2V0LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRv
bmUsIG5leHRIb3RQYXRoKSk7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlW
YWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1
bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCkBAIC0xNTA0LDcgKzE1MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNo
MVJlZywgc2NyYXRjaDJSZWcpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV90aGlzVmFsdWUub2Zmc2V0KCksIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1f
Y29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpKTsKKyAgICBsb2dTaGFk
b3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwg
cmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQog
CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCA4NzM0OWVlODVhMzlhNmJmMzQyN2RkNDY3MTZhNGNi
NGE5NDdjNzUyLi5lYjUxZTRlM2E0ZTc0NzQ3ZTgwYzg1MDFjMTQ5YTlhZWMyNzc5NDI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0xNTks
NyArMTU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChw
cm90byk7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVPZmZzZXQpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgcmVnVDAsIC8vIHJl
c3VsdAogICAgICAgICByZWdUMiwgLy8gdmFsdWUKQEAgLTkxMiw5ICs5MTIsOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVy
OwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2Rl
T2Zmc2V0KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0
Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGVsc2UKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUs
ICZ2bSgpLCBtX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5k
ZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJv
LCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKQEAgLTk1Miw3ICs5NTIsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBsZUp1bXBUYWJsZSoganVt
cFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAg
bV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZU9mZnNl
dCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKKyAgICBtX3N3aXRj
aGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1
bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAganVtcFRhYmxlLT5lbnN1
cmVDVElUYWJsZSgpOwogCiAgICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwpA
QCAtOTY5LDcgKzk2OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJs
ZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50Lgog
ICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1
bXBUYWJsZSwgbV9ieXRlY29kZU9mZnNldCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpD
aGFyYWN0ZXIpKTsKKyAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxl
LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVy
KSk7CiAgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwogCiAgICAgZW1pdExvYWQoc2Ny
dXRpbmVlLCByZWdUMSwgcmVnVDApOwpAQCAtOTg2LDcgKzk4Niw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFj
ayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUg
PSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlT2Zmc2V0
LCBkZWZhdWx0T2Zmc2V0KSk7CisgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1
bXBUYWJsZSwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0KSk7CiAKICAgICBlbWl0TG9h
ZChzY3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
d2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCk7CkBAIC0xMTc0LDcgKzEx
NzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBs
YWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29t
cGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwgUGF0Y2hhYmxlSnVtcCgp
LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywg
bV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUs
IGRvbmUsIG5leHRIb3RQYXRoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggODhkNTA4YTAzZGQwYTQ5NGY0OWViMjM0MTE0
NWNjZGFjN2M5M2RlZi4uMzgwOTQ2MWFiZTUyNzc1NTdhZTFhNzJmZTE2N2FjYWNjMWFiMzlmYiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC03OTcs
NyArNzk3LDcgQEAgc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlQdXRCeVZhbE9wdGltaXpl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGwKICAgICBpZiAoYmFzZVZhbHVlLmlz
T2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgewogICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKIAotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5i
eXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRl
eCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1
YlJvdXRpbmUpOwogCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1
Y3R1cmUodm0pOwpAQCAtODIxLDcgKzgyMSw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQg
dHJ5UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsCiAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVy
dHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
T3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApOwogICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3lt
Ym9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgQVNTRVJU
KGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQoY2FsbEZy
YW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgICAgICBB
U1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwogICAgICAgICAgICAgaWYgKGJ5VmFsSW5m
by0+c2VlbikgewogICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkID09IHBy
b3BlcnR5TmFtZSkgewpAQCAtODg3LDcgKzg4Nyw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1
bHQgdHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHN1
YnNjcmlwdC5pc0ludDMyKCkpIHsKLSAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVP
ZmZzZXQoKSk7CisgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBC
eXRlY29kZUluZGV4KDApKTsKICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5l
KTsKIAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZt
KTsKQEAgLTkxMCw3ICs5MTAsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeURpcmVj
dFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAogICAgICAgICBj
b25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGds
b2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXph
dGlvblJlc3VsdDo6R2l2ZVVwKTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8
ICFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxsRnJh
bWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0
ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICAgICAgQVNTRVJUKCFi
eVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4p
IHsKICAgICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZCA9PSBwcm9wZXJ0eU5h
bWUpIHsKQEAgLTE0NzgsMTEgKzE0NzgsMTIgQEAgc3RhdGljIHZvaWQgdXBkYXRlQWxsUHJlZGlj
dGlvbnNBbmRPcHRpbWl6ZUFmdGVyV2FybVVwKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIGNv
ZGVCbG9jay0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwogfQogCi1TbG93UGF0aFJldHVyblR5cGUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25PcHRpbWl6ZShWTSogdm1Qb2ludGVyLCB1aW50MzJfdCBi
eXRlY29kZUluZGV4KQorU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
T3B0aW1pemUoVk0qIHZtUG9pbnRlciwgdWludDMyX3QgYnl0ZWNvZGVJbmRleEJpdHMpCiB7CiAg
ICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUlu
ZGV4Ojpmcm9tQml0cyhieXRlY29kZUluZGV4Qml0cyk7CiAKICAgICAvLyBEZWZlciBHQyBmb3Ig
YSB3aGlsZSBzbyB0aGF0IGl0IGRvZXNuJ3QgcnVuIGJldHdlZW4gd2hlbiB3ZSBlbnRlciBpbnRv
IHRoaXMKICAgICAvLyBzbG93IHBhdGggYW5kIHdoZW4gd2UgZmlndXJlIG91dCB0aGUgc3RhdGUg
b2Ygb3VyIGNvZGUgYmxvY2suIFRoaXMgcHJldmVudHMKQEAgLTE3MjQsMTEgKzE3MjUsMTIgQEAg
U2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT3B0aW1pemUoVk0qIHZt
UG9pbnRlciwgdWludDMyX3QgYnl0ZWMKICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KDAsIDApOwog
fQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaChWTSog
dm1Qb2ludGVyLCB1aW50MzJfdCBieXRlY29kZUluZGV4KQorY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2goVk0qIHZtUG9pbnRlciwgdWludDMyX3QgYnl0ZWNv
ZGVJbmRleEJpdHMpCiB7CiAgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKICAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4Ojpmcm9tQml0cyhieXRlY29kZUluZGV4Qml0cyk7CiAKICAg
ICBDb2RlQmxvY2sqIG9wdGltaXplZFJlcGxhY2VtZW50ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+cmVwbGFjZW1lbnQoKTsKICAgICBpZiAoVU5MSUtFTFkoIW9wdGltaXplZFJlcGxhY2VtZW50
KSkKQEAgLTE3NDYsMTEgKzE3NDgsMTIgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25U
cnlPU1JFbnRlckF0Q2F0Y2goVk0qIHZtUG9pbnRlciwgdWludDMyX3QgYnl0ZWNvZGUKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JF
bnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUoVk0qIHZtUG9pbnRlciwgdWludDMyX3QgYnl0ZWNv
ZGVJbmRleCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNo
QW5kVmFsdWVQcm9maWxlKFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXhCaXRz
KQogewogICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYnl0ZWNvZGVJbmRleEJpdHMpOwogCiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIENvZGVCbG9jayogb3B0
aW1pemVkUmVwbGFjZW1lbnQgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7CkBAIC0xNzY3LDcg
KzE3NzAsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRj
aEFuZFZhbHVlUHJvZmlsZShWTSogdm1Qb2ludGVyLCB1aQogICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICBjb2RlQmxvY2stPmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNv
ZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVu
ZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgYXV0byBi
eXRlY29kZSA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCktPmFz
PE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2Rl
QmxvY2spOwogICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxl
QW5kT3BlcmFuZCYgcHJvZmlsZSkgewpAQCAtMTkyNyw3ICsxOTMwLDcgQEAgc3RhdGljIEpTVmFs
dWUgZ2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTVmEKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFs
dWUoKSk7CiAgICAgICAgICAgICBpZiAoZXhpc3RpbmdBdG9tU3RyaW5nKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5mYXN0R2V0T3du
UHJvcGVydHkodm0sIHN0cnVjdHVyZSwgZXhpc3RpbmdBdG9tU3RyaW5nLmdldCgpKSkgewotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5
dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5zdHVi
SW5mbyAmJiBieVZhbEluZm8tPmNhY2hlZElkLmltcGwoKSAhPSBleGlzdGluZ0F0b21TdHJpbmcp
CiAgICAgICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xOTM3LDcgKzE5NDAsNyBA
QCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYQogICAgIH0KIAogICAgIGlmIChzdWJzY3JpcHQuaXNJ
bnQzMigpKSB7Ci0gICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOwor
ICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRl
eCgwKSk7CiAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKIAogICAgICAg
ICBpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNJbnQzMigpOwpAQCAtMTk3OCw3ICsxOTgxLDcgQEAg
c3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIEpTVmEKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRv
UHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBKU1ZhbHVlKCkpOwogCi0gICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7
CisgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgo
MCkpOwogICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmICghaXNTdHJpbmdPclN5bWJvbChz
dWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQgIT0gcHJvcGVydHkpKQogICAgICAgICBi
eVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAKQEAgLTE5OTYsNyArMTk5OSw3IEBAIHN0
YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5R2V0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsCiAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1
YnNjcmlwdC5pc0ludDMyKCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0
KGJhc2VWYWx1ZSk7CiAKLSAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQo
KSk7CisgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSAhPSBCeXRlY29k
ZUluZGV4KDApKTsKICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKIAog
ICAgICAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhvYmplY3QtPnN0cnVjdHVyZSh2bSkp
KSB7CkBAIC0yMDI0LDcgKzIwMjcsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeUdl
dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbAogICAgICAg
ICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5
KGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGlt
aXphdGlvblJlc3VsdDo6R2l2ZVVwKTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgp
IHx8ICFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWxs
RnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+
Ynl0ZWNvZGVJbmRleCgpICE9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICAgICAgQVNTRVJU
KCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnNl
ZW4pIHsKICAgICAgICAgICAgICAgICBpZiAoYnlWYWxJbmZvLT5jYWNoZWRJZCA9PSBwcm9wZXJ0
eU5hbWUpIHsKQEAgLTIxMDgsNyArMjExMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdChKU0dsb2JhbE9iamVjdCoKICAg
ICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKICAgICBib29sIGRpZE9w
dGltaXplID0gZmFsc2U7CiAKLSAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgp
KTsKKyAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0gQnl0ZWNvZGVJbmRl
eCgwKSk7CiAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKICAgICAKICAgICBp
ZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhvYmplY3QtPnN0cnVjdHVyZSh2bSkpKSB7CkBAIC0y
MTgxLDcgKzIxODQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEJ5VmFsU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwogICAgICAgICByZXN1bHQg
PSBiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBpZiAoIWlzSlNTdHJpbmco
YmFzZVZhbHVlKSkgewotICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZz
ZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkgIT0g
Qnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgICAgICBhdXRvIGdldEJ5VmFsRnVuY3Rpb24gPSBi
eVZhbEluZm8tPnN0dWJSb3V0aW5lID8gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljIDogb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZTsKICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIGdldEJ5VmFsRnVuY3Rp
b24pOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCmluZGV4IDllZDIzNzdjMGFhMDRjZjAxZWUzYmZlYmQ1YzkwZGZmNGViMjcz
MDEuLmZmMzliMjJiMGYxN2RjYjg0MTA5M2I0NTVlODk0NmIwYjRjYmQ4NzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC0xMjcsNyAr
MTI3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogCiAgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwog
Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8o
YnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zmc2V0LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJv
ZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFw
cGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgbm90
SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CiB9CiAK
IEpJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJ
bmZvKiBieVZhbEluZm8sIE9wR2V0QnlWYWwgYnl0ZWNvZGUsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSnVtcCYgZmFzdERvbmVDYXNlLCBKdW1wJiBzbG93RG9uZUNhc2UsIEp1bXBM
aXN0JiBzbG93Q2FzZXMpCkBAIC0xNDIsNyArMTQyLDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvciBK
SVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgT3BHZXRC
eVYKICAgICBlbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soYnlWYWxJbmZvLCByZWdUMSwgcmVnVDMs
IHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogCkBAIC0yNjAsNyArMjYwLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIAogICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywg
bV9ieXRlY29kZU9mZnNldCwgbm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUs
IGRvbmUpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0
aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgbm90SW5kZXgsIGJhZFR5cGUsIG1v
ZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBA
IC0zNzUsNyArMzc1LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdp
dGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgT3AgYnl0ZWMKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgdmFsdWUsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBtX2NvZGVCbG9jay0+ZWNtYU1v
ZGUoKSwgcHV0S2luZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGVt
aXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlckJhc2UpOwpAQCAtNTA1LDcg
KzUwNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKICAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OlRyeUdldCk7CiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CkBAIC01NDQsNyArNTQ0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0RGlyZWN0
KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKQEAgLTU5MCw3ICs1OTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICB9CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAg
ICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBBY2Nlc3NUeXBlOjpHZXQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNjE0LDcgKzYxNCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEs
IHRoaXNWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAogICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBBY2Nlc3NUeXBlOjpH
ZXRXaXRoVGhpcyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC02NzQsNyArNjc0LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKICAg
ICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAg
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgbV9jb2RlQmxv
Y2stPmVjbWFNb2RlKCksCiAgICAgICAgIGRpcmVjdCA/IERpcmVjdCA6IE5vdERpcmVjdCk7CiAg
ICAgCkBAIC03MTQsNyArNzE0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCmluZGV4IGU5YjQ3MmFiZjg4NDgwNTRhYTdm
YmRjOWMyYWNkZGViMWE3NWM3YjkuLmM2NDhkNDZhZjRhMWE3OGRhZjYwNzAyNDRmYTlkOTk1NGNm
Nzc2YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3Qu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuY3BwCkBAIC0z
Niw5ICszNiw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKSVRXb3JrbGlzdDo6UGxhbiA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKSVRXb3JrbGlzdDo6UGxhbj4gewogcHVibGlj
OgotICAgIFBsYW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5
dGVjb2RlT2Zmc2V0KQorICAgIFBsYW4oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5k
ZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICAgICAgOiBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCi0gICAgICAgICwgbV9qaXQoY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICAsIG1faml0KGNvZGVCbG9jay0+dm0oKSwg
Y29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogICAgIHsKICAgICAgICAgbV9q
aXQuZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgfQpAQCAtODMs
OSArODMsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lzRmluaXNoZWRDb21waWxpbmc7
CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KQorICAgIHN0YXRpYyB2
b2lkIGNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAgIFBsYW4gcGxhbihjb2RlQmxvY2ss
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgUGxhbiBwbGFuKGNvZGVCbG9j
aywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIHBsYW4uY29tcGlsZUluVGhy
ZWFkKCk7CiAgICAgICAgIHBsYW4uZmluYWxpemUoKTsKICAgICB9CkBAIC0yMjgsNyArMjI4LDcg
QEAgdm9pZCBKSVRXb3JrbGlzdDo6cG9sbChWTSYgdm0pCiAgICAgZmluYWxpemVQbGFucyhteVBs
YW5zKTsKIH0KIAotdm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9jayogY29k
ZUJsb2NrLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkKK3ZvaWQgSklUV29y
a2xpc3Q6OmNvbXBpbGVMYXRlcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogewogICAgIERlZmVyR0MgZGVmZXJHQyhjb2RlQmxv
Y2stPnZtKCkuaGVhcCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7CkBAIC0yMzksNyArMjM5LDcgQEAgdm9pZCBK
SVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBs
b29wT1NSRW50cnlCeXRlY28KICAgICB9CiAgICAgCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25j
dXJyZW50SklUKCkpIHsKLSAgICAgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ssIGxvb3BP
U1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxv
Y2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIApAQCAtMjUzLDcgKzI1Myw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVMYXRlcihD
b2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvCiAgICAgICAg
IAogICAgICAgICBpZiAobV9udW1BdmFpbGFibGVUaHJlYWRzKSB7CiAgICAgICAgICAgICBtX3Bs
YW5uZWQuYWRkKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFk
b3B0UmVmKG5ldyBQbGFuKGNvZGVCbG9jaywgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpKTsK
KyAgICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYobmV3IFBsYW4oY29kZUJs
b2NrLCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KSk7CiAgICAgICAgICAgICBtX3BsYW5zLmFw
cGVuZChwbGFuKTsKICAgICAgICAgICAgIG1fcXVldWUuYXBwZW5kKHBsYW4pOwogICAgICAgICAg
ICAgbV9jb25kaXRpb24tPm5vdGlmeUFsbChsb2NrZXIpOwpAQCAtMjc3LDEwICsyNzcsMTAgQEAg
dm9pZCBKSVRXb3JrbGlzdDo6Y29tcGlsZUxhdGVyKENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNp
Z25lZCBsb29wT1NSRW50cnlCeXRlY28KICAgICAvLyBUaGlzIHdvcmtzIGFyb3VuZCB0aGUgaXNz
dWUuIElmIHRoZSBjb25jdXJyZW50IEpJVCB0aHJlYWQgaXMgY29udm95ZWQsIHdlIHJldmVydCB0
byBtYWluCiAgICAgLy8gdGhyZWFkIGNvbXBpbGVzLiBUaGlzIGlzIHByb2JhYmx5IG5vdCBhcyBn
b29kIGFzIGlmIHdlIGhhZCBtdWx0aXBsZSBKSVQgdGhyZWFkcy4gTWF5YmUgd2UKICAgICAvLyBj
YW4gZG8gdGhhdCBzb21lZGF5LgotICAgIFBsYW46OmNvbXBpbGVOb3coY29kZUJsb2NrLCBsb29w
T1NSRW50cnlCeXRlY29kZU9mZnNldCk7CisgICAgUGxhbjo6Y29tcGlsZU5vdyhjb2RlQmxvY2ss
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogfQogCi12b2lkIEpJVFdvcmtsaXN0Ojpjb21w
aWxlTm93KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBsb29wT1NSRW50cnlCeXRlY29k
ZU9mZnNldCkKK3ZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKICAgICBWTSYg
dm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwpAQCAt
MzA4LDcgKzMwOCw3IEBAIHZvaWQgSklUV29ya2xpc3Q6OmNvbXBpbGVOb3coQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlCiAgICAgY29kZUJsb2NrLT5y
ZXNldEpJVERhdGEoKTsKICAgICAKICAgICAvLyBPSywganVzdCBjb21waWxlIGl0LgotICAgIEpJ
VDo6Y29tcGlsZSh2bSwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBsb29w
T1NSRW50cnlCeXRlY29kZU9mZnNldCk7CisgICAgSklUOjpjb21waWxlKHZtLCBjb2RlQmxvY2ss
IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpOwog
ICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3Qu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV29ya2xpc3QuaAppbmRleCBlYjZmNTUx
NWRmNzAzOTdlNzMwYzFjMjc5OTlmZmIzODJmNmIyYjYxLi5lZGZlYzVjODM4OTIzODFiOGJhOGVj
MDhhOGIzYWE0MWM0YzcyNWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFdvcmtsaXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXb3JrbGlz
dC5oCkBAIC01Myw5ICs1Myw4IEBAIHB1YmxpYzoKICAgICBib29sIGNvbXBsZXRlQWxsRm9yVk0o
Vk0mKTsgLy8gUmV0dXJuIHRydWUgaWYgYW55IEpJVCB3b3JrIGhhcHBlbmVkLgogICAgIHZvaWQg
cG9sbChWTSYpOwogICAgIAotICAgIHZvaWQgY29tcGlsZUxhdGVyKENvZGVCbG9jayosIHVuc2ln
bmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gMCk7Ci0gICAgCi0gICAgdm9pZCBjb21w
aWxlTm93KENvZGVCbG9jayosIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0g
MCk7CisgICAgdm9pZCBjb21waWxlTGF0ZXIoQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKSk7CisgICAgdm9pZCBjb21w
aWxlTm93KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRl
eCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgIAogICAgIHN0YXRpYyBKSVRXb3JrbGlzdCYgZW5z
dXJlR2xvYmFsV29ya2xpc3QoKTsKICAgICBzdGF0aWMgSklUV29ya2xpc3QqIGV4aXN0aW5nR2xv
YmFsV29ya2xpc3RPck51bGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUENUb0NvZGVPcmlnaW5NYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1Rv
Q29kZU9yaWdpbk1hcC5jcHAKaW5kZXggMjEyOThhZDg0Y2FmMzY5MzAzYjM1ZDJkMzk4MjE4M2Jh
NmU1MDdkOC4uMjY0NzE4ZDk3Yzc4NGJjMmZhNzc0MDMxYWZjZGIwODA5OWQxZTU5MyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAKQEAgLTE4
OSw5ICsxODksOSBAQCBQQ1RvQ29kZU9yaWdpbk1hcDo6UENUb0NvZGVPcmlnaW5NYXAoUENUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyJiYgYnVpbGRlciwgTGlua0J1ZgogICAgIH07CiAKICAgICBEZWx0
YUNvbXByZXNzaW9uQnVpbGRlciBjb2RlT3JpZ2luQ29tcHJlc3Nvcigoc2l6ZW9mKGludHB0cl90
KSArIHNpemVvZihpbnQ4X3QpICsgc2l6ZW9mKGludDhfdCkgKyBzaXplb2YoSW5saW5lQ2FsbEZy
YW1lKikpICogYnVpbGRlci5tX2NvZGVSYW5nZXMuc2l6ZSgpKTsKLSAgICBDb2RlT3JpZ2luIGxh
c3RDb2RlT3JpZ2luKDAsIG51bGxwdHIpOworICAgIENvZGVPcmlnaW4gbGFzdENvZGVPcmlnaW4o
Qnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgYXV0byBidWlsZENvZGVPcmlnaW5UYWJsZSA9IFsmXSAo
Y29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikgewotICAgICAgICBpbnRwdHJfdCBkZWx0YSA9
IHN0YXRpY19jYXN0PGludHB0cl90Pihjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSkgLSBzdGF0
aWNfY2FzdDxpbnRwdHJfdD4obGFzdENvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAg
ICAgaW50cHRyX3QgZGVsdGEgPSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KCkub2Zmc2V0KCkpIC0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGxhc3RDb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSk7CiAgICAgICAgIGxhc3RDb2RlT3JpZ2luID0g
Y29kZU9yaWdpbjsKICAgICAgICAgaWYgKGRlbHRhID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ4
X3Q+OjptYXgoKSB8fCBkZWx0YSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWluKCkg
fHwgZGVsdGEgPT0gc2VudGluZWxCeXRlY29kZURlbHRhKSB7CiAgICAgICAgICAgICBjb2RlT3Jp
Z2luQ29tcHJlc3Nvci53cml0ZTxpbnQ4X3Q+KHNlbnRpbmVsQnl0ZWNvZGVEZWx0YSk7CkBAIC0y
NTQsNyArMjU0LDcgQEAgT3B0aW9uYWw8Q29kZU9yaWdpbj4gUENUb0NvZGVPcmlnaW5NYXA6OmZp
bmRQQyh2b2lkKiBwYykgY29uc3QKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAg
IHVpbnRwdHJfdCBjdXJyZW50UEMgPSAwOwotICAgIHVuc2lnbmVkIGN1cnJlbnRCeXRlY29kZUlu
ZGV4ID0gMDsKKyAgICBCeXRlY29kZUluZGV4IGN1cnJlbnRCeXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKTsKICAgICBJbmxpbmVDYWxsRnJhbWUqIGN1cnJlbnRJbmxpbmVDYWxsRnJhbWUg
PSBudWxscHRyOwogCiAgICAgRGVsdGFDb21wcmVzc2Vpb25SZWFkZXIgcGNSZWFkZXIobV9jb21w
cmVzc2VkUENzLCBtX2NvbXByZXNzZWRQQ0J1ZmZlclNpemUpOwpAQCAtMjgwLDcgKzI4MCw3IEBA
IE9wdGlvbmFsPENvZGVPcmlnaW4+IFBDVG9Db2RlT3JpZ2luTWFwOjpmaW5kUEModm9pZCogcGMp
IGNvbnN0CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZGVsdGEgPSBzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4odmFsdWUpOwogCi0gICAgICAgICAgICBjdXJyZW50Qnl0ZWNvZGVJbmRl
eCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oY3VycmVudEJ5
dGVjb2RlSW5kZXgpICsgZGVsdGEpOworICAgICAgICAgICAgY3VycmVudEJ5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KHN0YXRpY19jYXN0PGludHB0cl90PihjdXJyZW50Qnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkgKyBkZWx0YSk7CiAKICAgICAgICAgICAgIGludDhfdCBoYXNJbmxpbmVGcmFt
ZSA9IGNvZGVPcmlnaW5SZWFkZXIucmVhZDxpbnQ4X3Q+KCk7CiAgICAgICAgICAgICBBU1NFUlQo
aGFzSW5saW5lRnJhbWUgPT0gMCB8fCBoYXNJbmxpbmVGcmFtZSA9PSAxKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuaAppbmRleCA5ZmI2MmI2NDViYWZi
NGExM2ZmN2VmYjdmNzYxY2E5MmJlYTNlNWZhLi5iMGQ1NjFmYzU2ZDVmMDgxMGM4YzBlY2ZhZmY3
MjJkMmQzYjMzZjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9D
b2RlT3JpZ2luTWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9y
aWdpbk1hcC5oCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdm9pZCBh
cHBlbmRJdGVtKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCwgY29uc3QgQ29kZU9yaWdpbiYpOwotICAg
IHN0YXRpYyBDb2RlT3JpZ2luIGRlZmF1bHRDb2RlT3JpZ2luKCkgeyByZXR1cm4gQ29kZU9yaWdp
bigwLCBudWxscHRyKTsgfQorICAgIHN0YXRpYyBDb2RlT3JpZ2luIGRlZmF1bHRDb2RlT3JpZ2lu
KCkgeyByZXR1cm4gQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKTsgfQogCiAgICAgYm9vbCBk
aWRCdWlsZE1hcHBpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEJ1aWxkTWFwcGluZzsgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAppbmRleCA4ZDJmYWE4NDVi
OGY4Y2I5YzMwYzk4MDQwNjYwYjc2MTA5NzlhNmUyLi5jMTFlNzliMGM1NjFjYTMzY2NiMmJiZTBh
OGViM2FmNmVkYTZiY2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ns
b3dQYXRoQ2FsbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxs
LmgKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+bW92ZShKSVQ6OlRy
dXN0ZWRJbW1QdHIobV9wYyksIEpJVDo6YXJndW1lbnRHUFIxKTsKICNlbmRpZgogICAgICAgICBK
SVQ6OkNhbGwgY2FsbCA9IG1faml0LT5jYWxsKE9wZXJhdGlvblB0clRhZyk7Ci0gICAgICAgIG1f
aml0LT5tX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIG1faml0LT5tX2J5dGVjb2RlT2Zm
c2V0LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG1fc2xvd1BhdGhGdW5jdGlvbikpKTsK
KyAgICAgICAgbV9qaXQtPm1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgbV9qaXQtPm1f
Ynl0ZWNvZGVJbmRleCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihtX3Nsb3dQYXRoRnVu
Y3Rpb24pKSk7CiAKICNpZiBDUFUoWDg2XzY0KSAmJiBPUyhXSU5ET1dTKQogICAgICAgICBtX2pp
dC0+cG9wKEpJVDo6cmVnVDApOyAvLyB2UEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDRiMDVmNjhmMTcyMDMwNDExOThlYTI0NzdiNjA0
ZWIzMDY4MzJhZTEuLjYwYjQ5ZjkxMTYzZjUzYzRkNDc4NWJkMTE0M2RhNWQ5Y2UwNDZhZjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAt
MzY4LDcgKzM2OCw3IEBAIGlubGluZSBib29sIHNob3VsZEpJVChDb2RlQmxvY2sqIGNvZGVCbG9j
aykKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgotaW5saW5l
IGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSAwKQoraW5saW5lIGJv
b2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eCgwKSkKIHsKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7IC8vIE15IGNh
bGxlcnMgZG9uJ3Qgc2V0IHRvcCBjYWxsZnJhbWUsIHNvIHdlIGRvbid0IHdhbnQgdG8gR0MgaGVy
ZSBhdCBhbGwuCiAgICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CkBAIC0zOTIsNyArMzkyLDcg
QEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG8KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazogewotICAgICAgICBKSVRXb3JrbGlz
dDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21waWxlTGF0ZXIoY29kZUJsb2NrLCBsb29wT1NS
RW50cnlCeXRlY29kZU9mZnNldCk7CisgICAgICAgIEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxX
b3JrbGlzdCgpLmNvbXBpbGVMYXRlcihjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpOwogICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQ7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC00NzYsMjIgKzQ3NiwyMiBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICAgICAgICAgIGNvZGVCbG9jay0+bGxpbnRF
eGVjdXRlQ291bnRlcigpLCAiXG4iKTsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAg
ICBhdXRvIGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KGNvZGVCbG9j
ay0+Ynl0ZWNvZGVPZmZzZXQocGMpKTsKIAogICAgIGlmICghc2hvdWxkSklUKGNvZGVCbG9jaykp
IHsKICAgICAgICAgY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKICAgICAgICAgTExJ
TlRfUkVUVVJOX1RXTygwLCAwKTsKICAgICB9CiAgICAgCi0gICAgaWYgKCFqaXRDb21waWxlQW5k
U2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkp
CisgICAgaWYgKCFqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyh2bSwgY29kZUJsb2NrLCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KSkKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTygwLCAwKTsK
ICAgICAKLSAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgIm9zckVudHJ5IiwgKCJh
dCBiYyMiLCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkpOworICAgIENPREVCTE9DS19MT0df
RVZFTlQoY29kZUJsb2NrLCAib3NyRW50cnkiLCAoImF0ICIsIGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXgpKTsKIAogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCk7CiAKICAgICBjb25zdCBKSVRDb2RlTWFwJiBjb2RlTWFwID0gY29kZUJsb2Nr
LT5qaXRDb2RlTWFwKCk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gY29k
ZUxvY2F0aW9uID0gY29kZU1hcC5maW5kKGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KTsKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlTWFw
LmZpbmQobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVMb2NhdGlv
bik7CiAKICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CkBAIC0xODg4LDExICsxODg4LDggQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKQogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZ2V0
Tm9uQ29uc3RhbnRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpOwogICAg
IEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUp
LlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4KGNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQocGMpKTsKLSNl
bHNlCi0gICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KHBjKTsKLSNlbmRpZgorICAgIENh
bGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGNvZGVCbG9jay0+Ynl0ZWNv
ZGVPZmZzZXQocGMpKSk7CisKICAgICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0gdm0u
c2hhZG93Q2hpY2tlbigpOwogICAgIFJFTEVBU0VfQVNTRVJUKHNoYWRvd0NoaWNrZW4pOwogICAg
IHNoYWRvd0NoaWNrZW4tPmxvZyh2bSwgY2FsbEZyYW1lLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6
OnRhaWwoY2FsbEZyYW1lLCB0aGlzVmFsdWUsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5k
ZXgpKTsKQEAgLTE5MDQsNyArMTkwMSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9wcm9maWxlX2NhdGNoKQogewogICAgIExMSU5UX0JFR0lOKCk7CiAKLSAgICBjb2RlQmxvY2st
PmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXQoY2FsbEZyYW1l
LT5ieXRlY29kZU9mZnNldCgpKTsKKyAgICBjb2RlQmxvY2stPmVuc3VyZUNhdGNoTGl2ZW5lc3NJ
c0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleChjYWxsRnJhbWUtPmJ5dGVjb2RlSW5kZXgoKSk7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpbi5jcHAKaW5kZXggMTAyMjJhMjM5NmM3MWUy
YmM5MjQzZjhlMmFkMjg1YmM1NzYwNDllOS4uM2FhZWRlNzIwN2M4OTU3YjYwMzA5MzQxN2NiMmQ2
MDllNjliMGUwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyT3JpZ2luLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXJPcmlnaW4uY3BwCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgUHJvZmlsZXIgewogCi1PcmlnaW46Ok9yaWdpbihEYXRhYmFzZSYgZGF0YWJhc2UsIENv
ZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorT3JpZ2luOjpPcmln
aW4oRGF0YWJhc2UmIGRhdGFiYXNlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4KQogICAgIDogbV9ieXRlY29kZXMoZGF0YWJhc2UuZW5zdXJlQnl0ZWNv
ZGVzRm9yKGNvZGVCbG9jaykpCiAgICAgLCBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkK
IHsKQEAgLTQyLDcgKzQyLDcgQEAgT3JpZ2luOjpPcmlnaW4oRGF0YWJhc2UmIGRhdGFiYXNlLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIAogdm9pZCBPcmln
aW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoKm1fYnl0
ZWNvZGVzLCAiOmJjIyIsIG1fYnl0ZWNvZGVJbmRleCk7CisgICAgb3V0LnByaW50KCptX2J5dGVj
b2RlcywgIiAiLCBtX2J5dGVjb2RlSW5kZXgpOwogfQogCiBKU1ZhbHVlIE9yaWdpbjo6dG9KUyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdApAQCAtNTAsNyArNTAsNyBAQCBKU1Zh
bHVlIE9yaWdpbjo6dG9KUyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29u
c3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZWNvZGVzSUQsIGpzTnVtYmVyKG1fYnl0ZWNvZGVzLT5p
ZCgpKSk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVj
b2RlSW5kZXgsIGpzTnVtYmVyKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ieXRlY29kZUluZGV4LCBqc051bWJlcihtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW4uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpbi5oCmluZGV4IDg2ODI2NjE3
OWUxNTM5NDBhMTk3MmU1Y2VjZGQ3ZTY1OTVlNTVmM2YuLjIzNzI2ZmE5OTVmYTdhMjZjYTQ5YjNm
M2JiN2I4NmJhNGZkNjFlMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9Qcm9maWxlck9yaWdpbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlck9yaWdpbi5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisj
aW5jbHVkZSAiQnl0ZWNvZGVJbmRleC5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKICNp
bmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CkBAIC00
MCwyOSArNDEsMjQgQEAgY2xhc3MgRGF0YWJhc2U7CiAKIGNsYXNzIE9yaWdpbiB7CiBwdWJsaWM6
Ci0gICAgT3JpZ2luKCkKLSAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgIHsKLSAgICB9Ci0gICAgCisgICAgT3JpZ2luKCkg
PSBkZWZhdWx0OwogICAgIE9yaWdpbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0g
ICAgICAgIDogbV9ieXRlY29kZUluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSAtIDEpCi0gICAgewotICAgIH0KKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoQnl0ZWNv
ZGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkpCisgICAgeyB9CiAgICAgCi0gICAg
T3JpZ2luKEJ5dGVjb2RlcyogYnl0ZWNvZGVzLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAg
IE9yaWdpbihCeXRlY29kZXMqIGJ5dGVjb2RlcywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQogICAgICAgICA6IG1fYnl0ZWNvZGVzKGJ5dGVjb2RlcykKICAgICAgICAgLCBtX2J5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2J5dGVjb2RlSW5k
ZXggPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSAxKTsKKyAgICAgICAg
QVNTRVJUKG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSAtIDEpOwogICAgIH0KICAgICAKLSAgICBPcmlnaW4oRGF0YWJhc2UmLCBD
b2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICBPcmlnaW4oRGF0YWJhc2Um
LCBDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4KTsKICAgICAKLSAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCk7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICEh
bV9ieXRlY29kZUluZGV4OyB9CiAgICAgCiAgICAgQnl0ZWNvZGVzKiBieXRlY29kZXMoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVjb2RlczsgfQotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KKyAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KICAgICAKICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgT3JpZ2luJikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IE9yaWdpbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9
CkBAIC03NSw3ICs3MSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBCeXRlY29kZXMqIG1f
Ynl0ZWNvZGVzOwotICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAgICBCeXRlY29kZUlu
ZGV4IG1fYnl0ZWNvZGVJbmRleDsKIH07CiAKIGlubGluZSBib29sIE9yaWdpbjo6b3BlcmF0b3I9
PShjb25zdCBPcmlnaW4mIG90aGVyKSBjb25zdApAQCAtODYsMTIgKzgyLDEyIEBAIGlubGluZSBi
b29sIE9yaWdpbjo6b3BlcmF0b3I9PShjb25zdCBPcmlnaW4mIG90aGVyKSBjb25zdAogCiBpbmxp
bmUgdW5zaWduZWQgT3JpZ2luOjpoYXNoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpQdHJI
YXNoPEJ5dGVjb2Rlcyo+OjpoYXNoKG1fYnl0ZWNvZGVzKSArIG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICByZXR1cm4gV1RGOjpQdHJIYXNoPEJ5dGVjb2Rlcyo+OjpoYXNoKG1fYnl0ZWNvZGVzKSArIG1f
Ynl0ZWNvZGVJbmRleC5oYXNoKCk7CiB9CiAKIGlubGluZSBib29sIE9yaWdpbjo6aXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXggPT0g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgIHJldHVybiBtX2J5dGVj
b2RlSW5kZXguaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKIH0KIAogc3RydWN0IE9yaWdpbkhh
c2ggewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCmluZGV4IGM4ZTFhZDU3
YmYwZDdmN2FmOWQ3OTAwZWJlNjA4NzE4NWQ0MTJjYzIuLjQxZmRhYTQxMTdmMDM3MWRhYWRjNTdk
N2UzMjY2NmJhNWFkYmVkODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5j
cHAKQEAgLTE2NiwxNSArMTY2LDE1IEBAIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8U3RhY2tGcmFt
ZT4+IGdldFN0YWNrVHJhY2UoSlNHbG9iYWxPYmplY3QqLCBWTSYgdm0sIEpTT2JqCiAgICAgcmV0
dXJuIHN0YWNrVHJhY2U7CiB9CiAKLXZvaWQgZ2V0Qnl0ZWNvZGVPZmZzZXQoVk0mIHZtLCBDYWxs
RnJhbWUqIHN0YXJ0Q2FsbEZyYW1lLCBWZWN0b3I8U3RhY2tGcmFtZT4qIHN0YWNrVHJhY2UsIENh
bGxGcmFtZSomIGNhbGxGcmFtZSwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0KQordm9pZCBnZXRC
eXRlY29kZUluZGV4KFZNJiB2bSwgQ2FsbEZyYW1lKiBzdGFydENhbGxGcmFtZSwgVmVjdG9yPFN0
YWNrRnJhbWU+KiBzdGFja1RyYWNlLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEJ5dGVjb2RlSW5k
ZXgmIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgRmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJs
b2NrRnVuY3RvciBmdW5jdG9yKHN0YXJ0Q2FsbEZyYW1lKTsKICAgICBTdGFja1Zpc2l0b3I6OnZp
c2l0KHZtLnRvcENhbGxGcmFtZSwgdm0sIGZ1bmN0b3IpOwogICAgIGNhbGxGcmFtZSA9IGZ1bmN0
b3IuZm91bmRDYWxsRnJhbWUoKTsKICAgICB1bnNpZ25lZCBzdGFja0luZGV4ID0gZnVuY3Rvci5p
bmRleCgpOwotICAgIGJ5dGVjb2RlT2Zmc2V0ID0gMDsKLSAgICBpZiAoc3RhY2tUcmFjZSAmJiBz
dGFja0luZGV4IDwgc3RhY2tUcmFjZS0+c2l6ZSgpICYmIHN0YWNrVHJhY2UtPmF0KHN0YWNrSW5k
ZXgpLmhhc0J5dGVjb2RlT2Zmc2V0KCkpCi0gICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gc3RhY2tU
cmFjZS0+YXQoc3RhY2tJbmRleCkuYnl0ZWNvZGVPZmZzZXQoKTsKKyAgICBieXRlY29kZUluZGV4
ID0gQnl0ZWNvZGVJbmRleCgpOworICAgIGlmIChzdGFja1RyYWNlICYmIHN0YWNrSW5kZXggPCBz
dGFja1RyYWNlLT5zaXplKCkgJiYgc3RhY2tUcmFjZS0+YXQoc3RhY2tJbmRleCkuaGFzQnl0ZWNv
ZGVJbmRleCgpKQorICAgICAgICBieXRlY29kZUluZGV4ID0gc3RhY2tUcmFjZS0+YXQoc3RhY2tJ
bmRleCkuYnl0ZWNvZGVJbmRleCgpOwogfQogCiBib29sIGdldExpbmVDb2x1bW5BbmRTb3VyY2Uo
VmVjdG9yPFN0YWNrRnJhbWU+KiBzdGFja1RyYWNlLCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQm
IGNvbHVtbiwgU3RyaW5nJiBzb3VyY2VVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJy
b3IuaAppbmRleCBjYjdiZjNhZjVkOTFmNjNkNmFkZTM4ODY5MDgwYjA2YjE4MzdkMzNmLi4yNmJi
ODlmZmVlOWJiMWNlY2U1OWFjNTAwOTZiYmE1MGQwYmU4ODg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9yLmgKQEAgLTY3LDcgKzY3LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgSlNP
YmplY3QqIGNyZWF0ZUVycm9yKEpTR2xvYmFsT2JqZWN0KiwgRXJyb3JUeXBlLCBjb25zdCBTdHJp
bmcKIEpTT2JqZWN0KiBjcmVhdGVHZXR0ZXJUeXBlRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBjb25z
dCBTdHJpbmcmKTsKIAogc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxTdGFja0ZyYW1lPj4gZ2V0U3Rh
Y2tUcmFjZShKU0dsb2JhbE9iamVjdCosIFZNJiwgSlNPYmplY3QqLCBib29sIHVzZUN1cnJlbnRG
cmFtZSk7Ci12b2lkIGdldEJ5dGVjb2RlT2Zmc2V0KFZNJiwgQ2FsbEZyYW1lKiwgVmVjdG9yPFN0
YWNrRnJhbWU+KiwgQ2FsbEZyYW1lKiYsIHVuc2lnbmVkJiBieXRlY29kZU9mZnNldCk7Cit2b2lk
IGdldEJ5dGVjb2RlSW5kZXgoVk0mLCBDYWxsRnJhbWUqLCBWZWN0b3I8U3RhY2tGcmFtZT4qLCBD
YWxsRnJhbWUqJiwgQnl0ZWNvZGVJbmRleCYpOwogYm9vbCBnZXRMaW5lQ29sdW1uQW5kU291cmNl
KFZlY3RvcjxTdGFja0ZyYW1lPiogc3RhY2tUcmFjZSwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVk
JiBjb2x1bW4sIFN0cmluZyYgc291cmNlVVJMKTsKIGJvb2wgYWRkRXJyb3JJbmZvKFZNJiwgVmVj
dG9yPFN0YWNrRnJhbWU+KiwgSlNPYmplY3QqKTsKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRk
RXJyb3JJbmZvKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCBib29sKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKaW5kZXggNmRmNjhkYmRm
YzNiYzgwYTE4N2E0ZTVkZjkyNDkyOTE2MTEyMWY0YS4uNjIxOTJiY2MzYjg1ZmNiODUyMTAzMDhh
NzE1NWVjM2UyOGIwODdlMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3JJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JJbnN0YW5jZS5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgRXJyb3JJbnN0YW5jZSogRXJyb3JJ
bnN0YW5jZTo6Y3JlYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3QKICAgICByZXR1cm4gY3JlYXRlKGdsb2JhbE9iamVjdCwgdm0sIHN0cnVjdHVyZSwgbWVzc2Fn
ZVN0cmluZywgYXBwZW5kZXIsIHR5cGUsIHVzZUN1cnJlbnRGcmFtZSk7CiB9CiAKLXN0YXRpYyB2
b2lkIGFwcGVuZFNvdXJjZVRvRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIEVycm9ySW5zdGFuY2UqIGV4Y2VwdGlvbiwgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQpCitzdGF0aWMgdm9pZCBhcHBlbmRTb3VyY2VUb0Vycm9yKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBFcnJvckluc3RhbmNlKiBl
eGNlcHRpb24sIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBFcnJvckluc3Rh
bmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlciA9IGV4Y2VwdGlvbi0+c291cmNlQXBwZW5kZXIo
KTsKICAgICBleGNlcHRpb24tPmNsZWFyU291cmNlQXBwZW5kZXIoKTsKQEAgLTcxLDcgKzcxLDcg
QEAgc3RhdGljIHZvaWQgYXBwZW5kU291cmNlVG9FcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmEKICAgICBlbHNlCiAgICAgICAgIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb2RlQmxvY2stPmV4cHJlc3Npb25SYW5n
ZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZvdFBvaW50LCBzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOworICAgIGNvZGVCbG9jay0+ZXhwcmVzc2lvblJh
bmdlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4LCBkaXZvdFBvaW50LCBzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwogICAgIAogICAgIGludCBleHByZXNzaW9uU3Rh
cnQgPSBkaXZvdFBvaW50IC0gc3RhcnRPZmZzZXQ7CiAgICAgaW50IGV4cHJlc3Npb25TdG9wID0g
ZGl2b3RQb2ludCArIGVuZE9mZnNldDsKQEAgLTEyNCwxMiArMTI0LDEyIEBAIHZvaWQgRXJyb3JJ
bnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0m
IHZtLCBjb25zdCBTCiAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcyk7CiAKICAgICBpZiAo
bV9zdGFja1RyYWNlICYmICFtX3N0YWNrVHJhY2UtPmlzRW1wdHkoKSAmJiBoYXNTb3VyY2VBcHBl
bmRlcigpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OworICAgICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CiAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOwot
ICAgICAgICBnZXRCeXRlY29kZU9mZnNldCh2bSwgdm0udG9wQ2FsbEZyYW1lLCBtX3N0YWNrVHJh
Y2UuZ2V0KCksIGNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBnZXRCeXRlY29k
ZUluZGV4KHZtLCB2bS50b3BDYWxsRnJhbWUsIG1fc3RhY2tUcmFjZS5nZXQoKSwgY2FsbEZyYW1l
LCBieXRlY29kZUluZGV4KTsKICAgICAgICAgaWYgKGNhbGxGcmFtZSAmJiBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+Y2FsbGVlKCkuaXNX
YXNtKCkpOwotICAgICAgICAgICAgYXBwZW5kU291cmNlVG9FcnJvcihnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgdGhpcywgYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICAgICAgYXBwZW5kU291cmNl
VG9FcnJvcihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgdGhpcywgYnl0ZWNvZGVJbmRleCk7CiAg
ICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCmluZGV4IGNlYWMwY2IzMDk0NTc3NzM1Y2Q0ZjlmYjdmNWYw
NTlmMTk4YmZmODEuLjliY2Y5NjE4NmQzZjg1MDgzMWQ2YjI2NWJjNTIwYTY3ODBjZjZjYzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCkBAIC00NDYsMjkgKzQ0NiwyMyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1w
bGUoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTZWNvbmRzJiBzdGFja1RyYWNlUHJvYwogICAgIH0K
IH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgdHJ5R2V0Qnl0ZWNvZGVJbmRleCh1
bnNpZ25lZCBsbGludFBDLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgYm9vbCYgaXNWYWxpZCkKK3N0
YXRpYyBBTFdBWVNfSU5MSU5FIEJ5dGVjb2RlSW5kZXggdHJ5R2V0Qnl0ZWNvZGVJbmRleCh1bnNp
Z25lZCBsbGludFBDLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICBSRUxFQVNFX0FTU0VSVCghY29kZUJsb2NrLT5oYXNDb2RlT3JpZ2lucygpKTsKICNl
bmRpZgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0g
bGxpbnRQQzsKLSAgICBpZiAoYnl0ZWNvZGVJbmRleCA8IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
U2l6ZSgpKSB7Ci0gICAgICAgIGlzVmFsaWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gYnl0ZWNv
ZGVJbmRleDsKLSAgICB9Ci0gICAgaXNWYWxpZCA9IGZhbHNlOwotICAgIHJldHVybiAwOworICAg
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbGxpbnRQQzsKKyAgICBpZiAoYnl0ZWNvZGVPZmZz
ZXQgPCBjb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkKKyAgICAgICAgcmV0dXJuIEJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpOworICAgIHJldHVybiBCeXRlY29kZUluZGV4KCk7CiAj
ZWxzZQogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJpdHdpc2VfY2FzdDxJbnN0cnVj
dGlvbio+KGxsaW50UEMpOwogCi0gICAgaWYgKGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuY29u
dGFpbnMoaW5zdHJ1Y3Rpb24pKSB7Ci0gICAgICAgIGlzVmFsaWQgPSB0cnVlOwotICAgICAgICBy
ZXR1cm4gY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChpbnN0cnVjdGlvbik7Ci0gICAgfQotICAg
IGlzVmFsaWQgPSBmYWxzZTsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5jb250YWlucyhpbnN0cnVjdGlvbikpCisgICAgICAgIHJldHVybiBCeXRlY29k
ZUluZGV4KGNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQoaW5zdHJ1Y3Rpb24pKTsKKyAgICByZXR1
cm4gQnl0ZWNvZGVJbmRleCgpOwogI2VuZGlmCiB9CiAKQEAgLTQ4NCwxMiArNDc4LDEyIEBAIHZv
aWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpCiAgICAg
ICAgIFN0YWNrVHJhY2UmIHN0YWNrVHJhY2UgPSBtX3N0YWNrVHJhY2VzLmxhc3QoKTsKICAgICAg
ICAgc3RhY2tUcmFjZS50aW1lc3RhbXAgPSB1bnByb2Nlc3NlZFN0YWNrVHJhY2UudGltZXN0YW1w
OwogCi0gICAgICAgIGF1dG8gcG9wdWxhdGVDb2RlTG9jYXRpb24gPSBbXSAoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFN0YWNrRnJhbWU6OkNvZGVMb2NhdGlv
biYgbG9jYXRpb24pIHsKLSAgICAgICAgICAgIGlmIChieXRlY29kZUluZGV4IDwgY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnNTaXplKCkpIHsKKyAgICAgICAgYXV0byBwb3B1bGF0ZUNvZGVMb2NhdGlv
biA9IFtdIChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
LCBTdGFja0ZyYW1lOjpDb2RlTG9jYXRpb24mIGxvY2F0aW9uKSB7CisgICAgICAgICAgICBpZiAo
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSB7
CiAgICAgICAgICAgICAgICAgaW50IGRpdm90OwogICAgICAgICAgICAgICAgIGludCBzdGFydE9m
ZnNldDsKICAgICAgICAgICAgICAgICBpbnQgZW5kT2Zmc2V0OwotICAgICAgICAgICAgICAgIGNv
ZGVCbG9jay0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCwg
ZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsCisgICAgICAgICAgICAgICAgY29kZUJsb2Nr
LT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgsIGRpdm90LCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5saW5l
TnVtYmVyLCBsb2NhdGlvbi5jb2x1bW5OdW1iZXIpOwogICAgICAgICAgICAgICAgIGxvY2F0aW9u
LmJ5dGVjb2RlSW5kZXggPSBieXRlY29kZUluZGV4OwogICAgICAgICAgICAgfQpAQCAtNDk5LDcg
KzQ5Myw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWRTdGFja1Ry
YWNlcygpCiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKLSAgICAgICAgYXV0byBhcHBlbmRD
b2RlQmxvY2sgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KSB7CisgICAgICAgIGF1dG8gYXBwZW5kQ29kZUJsb2NrID0gWyZdIChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KSB7CiAgICAgICAgICAgICBzdGFj
a1RyYWNlLmZyYW1lcy5hcHBlbmQoU3RhY2tGcmFtZShjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpKSk7CiAgICAgICAgICAgICBtX2xpdmVDZWxsUG9pbnRlcnMuYWRkKGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCkpOwogICAgICAgICAgICAgcG9wdWxhdGVDb2RlTG9jYXRpb24oY29kZUJs
b2NrLCBieXRlY29kZUluZGV4LCBzdGFja1RyYWNlLmZyYW1lcy5sYXN0KCkuc2VtYW50aWNMb2Nh
dGlvbik7CkBAIC02MTQsMTggKzYwOCwxNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nl
c3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMoKQogICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBlbmQg
dXAgaGF2aW5nIHRvIHVud2luZCBwYXN0IGFuIEVudHJ5RnJhbWUsIHdlIHdpbGwgZW5kIHVwIGV4
ZWN1dGluZwogICAgICAgICAgICAgICAgIC8vIGluc2lkZSB0aGUgTExJbnQncyBoYW5kbGVVbmNh
dWdodEV4Y2VwdGlvbi4gU28gd2UganVzdCBwcm90ZWN0IGFnYWluc3QgdGhpcwogICAgICAgICAg
ICAgICAgIC8vIGJ5IGlnbm9yaW5nIGl0LgotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXggPSAwOworICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgICAgICAgICAgICAgaWYgKHRvcENvZGVCbG9jay0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmsgfHwgdG9wQ29kZUJsb2NrLT5q
aXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ym9vbCBpc1ZhbGlkUEM7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJpdHM7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgICAgICAgICAgYml0cyA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih1bnByb2Nlc3NlZFN0YWNrVHJhY2UubGxp
bnRQQykpOwogI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgYml0cyA9IGJpdHdpc2VfY2FzdDx1
bnNpZ25lZD4odW5wcm9jZXNzZWRTdGFja1RyYWNlLmxsaW50UEMpOwogI2VuZGlmCi0gICAgICAg
ICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSB0cnlHZXRCeXRlY29kZUluZGV4KGJpdHMsIHRv
cENvZGVCbG9jaywgaXNWYWxpZFBDKTsKKyAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRl
eCA9IHRyeUdldEJ5dGVjb2RlSW5kZXgoYml0cywgdG9wQ29kZUJsb2NrKTsKIAotICAgICAgICAg
ICAgICAgICAgICBVTlVTRURfUEFSQU0oaXNWYWxpZFBDKTsgLy8gRklYTUU6IGRvIHNvbWV0aGlu
ZyB3aXRoIHRoaXMgaW5mbyBmb3IgdGhlIHdlYiBpbnNwZWN0b3I6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM0NTUKKyAgICAgICAgICAgICAgICAgICAgVU5VU0VE
X1BBUkFNKGJ5dGVjb2RlSW5kZXgpOyAvLyBGSVhNRTogZG8gc29tZXRoaW5nIHdpdGggdGhpcyBp
bmZvIGZvciB0aGUgd2ViIGluc3BlY3RvcjogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MzQ1NQogCiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENvZGVCbG9jayh0
b3BDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBzdG9yZUNh
bGxlZUludG9MYXN0RnJhbWUodW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lc1swXSk7CkBAIC02
NDksOCArNjQyLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0
YWNrVHJhY2VzKCkKICAgICAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgg
PSB1bnByb2Nlc3NlZFN0YWNrRnJhbWUuY2FsbFNpdGVJbmRleDsKIAogICAgICAgICAgICAgICAg
IGF1dG8gYXBwZW5kQ29kZUJsb2NrTm9JbmxpbmluZyA9IFsmXSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGJvb2wgaXNWYWxpZFBDOwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2so
Y29kZUJsb2NrLCB0cnlHZXRCeXRlY29kZUluZGV4KGNhbGxTaXRlSW5kZXguYml0cygpLCBjb2Rl
QmxvY2ssIGlzVmFsaWRQQykpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRDb2RlQmxvY2so
Y29kZUJsb2NrLCB0cnlHZXRCeXRlY29kZUluZGV4KGNhbGxTaXRlSW5kZXguYml0cygpLCBjb2Rl
QmxvY2spKTsKICAgICAgICAgICAgICAgICB9OwogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC02
NTgsNyArNjUwLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0
YWNrVHJhY2VzKCkKICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+Y2FuR2V0Q29k
ZU9yaWdpbihjYWxsU2l0ZUluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENv
ZGVPcmlnaW4oY29kZUJsb2NrLCBjb2RlQmxvY2stPmNvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkp
OwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBl
bmRDb2RlQmxvY2soY29kZUJsb2NrLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ29kZUJsb2NrKGNvZGVCbG9jaywg
Qnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kQ29kZUJsb2NrTm9JbmxpbmluZygpOwogI2Vsc2UKQEAgLTExMTUsNyArMTEw
Nyw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cmVwb3J0VG9wQnl0ZWNvZGVzKFByaW50U3Ry
ZWFtJiBvdXQpCiAgICAgICAgICAgICBTdHJpbmcgY29kZUJsb2NrSGFzaDsKICAgICAgICAgICAg
IFN0cmluZyBqaXRUeXBlOwogICAgICAgICAgICAgaWYgKGxvY2F0aW9uLmhhc0J5dGVjb2RlSW5k
ZXgoKSkKLSAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gU3RyaW5nOjpudW1iZXIobG9j
YXRpb24uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IHRv
U3RyaW5nKGxvY2F0aW9uLmJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSAiPG5pbD4iOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKaW5kZXggNjkyODAwMjgyYzc3NTVh
Yjk2NzAzODJiMjlhOWIwYTNjZDY3ZWZkYy4uMmExNDQ5NDIyODgyNzFkMzJjNjI1YjhhZDNhZGZh
NjdjN2I4NDk2MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ft
cGxpbmdQcm9maWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBs
aW5nUHJvZmlsZXIuaApAQCAtMTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAg
Ym9vbCBoYXNCeXRlY29kZUluZGV4KCkgY29uc3QKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICEhYnl0ZWNvZGVJbmRleDsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIGNvbnN0CkBA
IC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gVGhlc2UgYXR0ZW1wdCB0
byBiZSBleHByZXNzaW9uLWxldmVsIGxpbmUgYW5kIGNvbHVtbiBudW1iZXIuCiAgICAgICAgICAg
ICB1bnNpZ25lZCBsaW5lTnVtYmVyIHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpIH07CiAgICAgICAgICAgICB1bnNpZ25lZCBjb2x1bW5OdW1iZXIgeyBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXggeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAg
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIENvZGVCbG9ja0hh
c2ggY29kZUJsb2NrSGFzaDsKICAgICAgICAgICAgIEpJVFR5cGUgaml0VHlwZSB7IEpJVFR5cGU6
Ok5vbmUgfTsKICAgICAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0YWNrRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Rh
Y2tGcmFtZS5jcHAKaW5kZXggMjRlYTBlYzU5MzNlYjhkNzhlODRmZDgyYTFlNjM4ZTFiZmE5ZjJj
My4uMzEyNDg4OTRiODBkYzlkMDVjODJkNDQ3YWUwMDQwYTUzNzA0YmU1NCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAKQEAgLTM4LDEwICszOCwxMCBA
QCBTdGFja0ZyYW1lOjpTdGFja0ZyYW1lKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNDZWxsKiBj
YWxsZWUpCiB7CiB9CiAKLVN0YWNrRnJhbWU6OlN0YWNrRnJhbWUoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBKU0NlbGwqIGNhbGxlZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0KQorU3RhY2tGcmFtZTo6U3RhY2tGcmFtZShWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IEpTQ2VsbCogY2FsbGVlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQogICAgIDogbV9jYWxsZWUodm0sIG93bmVyLCBjYWxsZWUpCiAgICAgLCBtX2Nv
ZGVCbG9jayh2bSwgb3duZXIsIGNvZGVCbG9jaykKLSAgICAsIG1fYnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpCisgICAgLCBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKIHsKIH0K
IApAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgU3RhY2tGcmFtZTo6Y29tcHV0ZUxpbmVBbmRDb2x1
bW4odW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0CiAgICAgaW50IGRpdm90
ID0gMDsKICAgICBpbnQgdW51c2VkU3RhcnRPZmZzZXQgPSAwOwogICAgIGludCB1bnVzZWRFbmRP
ZmZzZXQgPSAwOwotICAgIG1fY29kZUJsb2NrLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9m
ZnNldChtX2J5dGVjb2RlT2Zmc2V0LCBkaXZvdCwgdW51c2VkU3RhcnRPZmZzZXQsIHVudXNlZEVu
ZE9mZnNldCwgbGluZSwgY29sdW1uKTsKKyAgICBtX2NvZGVCbG9jay0+ZXhwcmVzc2lvblJhbmdl
Rm9yQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgsIGRpdm90LCB1bnVzZWRTdGFydE9mZnNl
dCwgdW51c2VkRW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwogCiAgICAgU2NyaXB0RXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKICAgICBpZiAo
T3B0aW9uYWw8aW50PiBvdmVycmlkZUxpbmVOdW1iZXIgPSBleGVjdXRhYmxlLT5vdmVycmlkZUxp
bmVOdW1iZXIobV9jb2RlQmxvY2stPnZtKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RhY2tGcmFtZS5oCmluZGV4IDY3MWEzMzdiNDI1NDEzNThhOWVjOWQyNmZiMjQwYmUzMGE0
NmU3MzEuLmM5ZGZhMGIxOGMwOGQ5OTQ4ZmNhNTAzYzc5Zjc5YTc4OGZjMzhhZGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgKQEAgLTQwLDcgKzQwLDcgQEAg
Y2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBTdGFja0ZyYW1lIHsKIHB1YmxpYzoKICAgICBTdGFj
a0ZyYW1lKFZNJiwgSlNDZWxsKiBvd25lciwgSlNDZWxsKiBjYWxsZWUpOwotICAgIFN0YWNrRnJh
bWUoVk0mLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIGNhbGxlZSwgQ29kZUJsb2NrKiwgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIFN0YWNrRnJhbWUoVk0mLCBKU0NlbGwqIG93bmVyLCBK
U0NlbGwqIGNhbGxlZSwgQ29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgU3RhY2tGcmFt
ZShXYXNtOjpJbmRleE9yTmFtZSk7CiAKICAgICBib29sIGhhc0xpbmVBbmRDb2x1bW5JbmZvKCkg
Y29uc3QgeyByZXR1cm4gISFtX2NvZGVCbG9jazsgfQpAQCAtNTEsMTEgKzUxLDExIEBAIHB1Ymxp
YzoKICAgICBTdHJpbmcgc291cmNlVVJMKCkgY29uc3Q7CiAgICAgU3RyaW5nIHRvU3RyaW5nKFZN
JikgY29uc3Q7CiAKLSAgICBib29sIGhhc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9ieXRlY29kZU9mZnNldCAhPSBVSU5UX01BWCAmJiAhbV9pc1dhc21GcmFtZTsgfQotICAgIHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KCkKKyAgICBib29sIGhhc0J5dGVjb2RlSW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXggJiYgIW1faXNXYXNtRnJhbWU7IH0KKyAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc0J5dGVj
b2RlT2Zmc2V0KCkpOwotICAgICAgICByZXR1cm4gbV9ieXRlY29kZU9mZnNldDsKKyAgICAgICAg
QVNTRVJUKGhhc0J5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5k
ZXg7CiAgICAgfQogICAgIAogICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwpA
QCAtNjUsNyArNjUsNyBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fY2Fs
bGVlIHsgfTsKICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2NvZGVCbG9jayB7IH07CiAg
ICAgV2FzbTo6SW5kZXhPck5hbWUgbV93YXNtRnVuY3Rpb25JbmRleE9yTmFtZTsKLSAgICB1bnNp
Z25lZCBtX2J5dGVjb2RlT2Zmc2V0IHsgVUlOVF9NQVggfTsKKyAgICBCeXRlY29kZUluZGV4IG1f
Ynl0ZWNvZGVJbmRleDsKICAgICBib29sIG1faXNXYXNtRnJhbWUgeyBmYWxzZSB9OwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKaW5kZXggMjQ0ZDIy
ZWIxNmQ2NzIyNzA5NjFhMzIwMmU5NDBlYTA1NzNmOTgyZi4uMWViYjcyNzQ2OWU5ZjE4M2ZmYTNj
YWFhMTdlMWI5OTUwMDAzODhjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL1ZNSW5zcGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1J
bnNwZWN0b3IuY3BwCkBAIC00MDgsNyArNDA4LDcgQEAgdm9pZCBWTUluc3BlY3Rvcjo6ZHVtcFJl
Z2lzdGVycyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAgICAgIHVuc2lnbmVkIGxpbmUg
PSAwOwogICAgICAgICAgICAgdW5zaWduZWQgdW51c2VkQ29sdW1uID0gMDsKICAgICAgICAgICAg
IHZpc2l0b3ItPmNvbXB1dGVMaW5lQW5kQ29sdW1uKGxpbmUsIHVudXNlZENvbHVtbik7Ci0gICAg
ICAgICAgICBkYXRhTG9nRigiW1JldHVyblZQQ10gICAgICAgICAgICAgICAgfCAlMTBwIHwgJWQg
KGxpbmUgJWQpXG4iLCBpdCwgdmlzaXRvci0+Ynl0ZWNvZGVPZmZzZXQoKSwgbGluZSk7CisgICAg
ICAgICAgICBkYXRhTG9nRigiW1JldHVyblZQQ10gICAgICAgICAgICAgICAgfCAlMTBwIHwgJWQg
KGxpbmUgJWQpXG4iLCBpdCwgdmlzaXRvci0+Ynl0ZWNvZGVJbmRleCgpLm9mZnNldCgpLCBsaW5l
KTsKICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>