<?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>224616</bug_id>
          
          <creation_ts>2021-04-15 11:19:46 -0700</creation_ts>
          <short_desc>Refactor inline functions out of HashMapImpl.h into HashMapImplInlines.h.</short_desc>
          <delta_ts>2021-04-17 18:19:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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=224644</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>
          
          <blocked>224610</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>alecflett</cc>
    
    <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mcatanzaro</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>1750685</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-04-15 11:19:46 -0700</bug_when>
    <thetext>Also do the same for clients of HashMapImpl that require similar refactoring.  This fixes the #include of JSCJSValueInlines.h in HashMapImpl.h, as well as makes it easier to use other inline functions from other classes in the implementation of HashMapImpl&apos;s inline functions in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750686</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-15 11:20:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/76713709&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750697</commentid>
    <comment_count>2</comment_count>
      <attachid>426121</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-04-15 11:49:18 -0700</bug_when>
    <thetext>Created attachment 426121
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750700</commentid>
    <comment_count>3</comment_count>
      <attachid>426121</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-15 11:55:44 -0700</bug_when>
    <thetext>Comment on attachment 426121
proposed patch.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750710</commentid>
    <comment_count>4</comment_count>
      <attachid>426121</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-15 12:08:32 -0700</bug_when>
    <thetext>Comment on attachment 426121
proposed patch.

Never noticed when this first was introduced: Seems unfortunate that WTF has WTF::HashMap and JavaScriptCore has unrelated JSC::HashMapImpl. Might be worth thinking about future name changes to clarify the relationship/distinction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750719</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-04-15 12:20:34 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r276039: &lt;http://trac.webkit.org/r276039&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751261</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-04-16 14:42:25 -0700</bug_when>
    <thetext>New warnings:

[1215/5456] Building CXX object Source/JavaScriptCore/CMa...edSources/unified-sources/UnifiedSource-f0a787a9-11.cpp.o
In file included from ../../Source/JavaScriptCore/runtime/JSMap.h:28,
                 from ../../Source/JavaScriptCore/bytecode/SpeculatedType.cpp:39,
                 from JavaScriptCore/DerivedSources/unified-sources/UnifiedSource-f0a787a9-11.cpp:5:
../../Source/JavaScriptCore/runtime/HashMapImpl.h:233:27: warning: ‘bool JSC::areKeysEqual(JSC::JSGlobalObject*, JSC::JSValue, JSC::JSValue)’ declared ‘static’ but never defined [-Wunused-function]
  233 | ALWAYS_INLINE static bool areKeysEqual(JSGlobalObject*, JSValue, JSValue);
      |                           ^~~~~~~~~~~~
../../Source/JavaScriptCore/runtime/HashMapImpl.h:238:31: warning: ‘uint32_t JSC::wangsInt64Hash(uint64_t)’ declared ‘static’ but never defined [-Wunused-function]
  238 | static ALWAYS_INLINE uint32_t wangsInt64Hash(uint64_t key);
      |

I think we could simply remove the declarations of these functions from HashMapImpl.h. If they&apos;re needed, better include HashMapImplInlines.h, yes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751270</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-04-16 14:50:05 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #6)
&gt; New warnings:
&gt; 
&gt; [1215/5456] Building CXX object
&gt; Source/JavaScriptCore/CMa...edSources/unified-sources/UnifiedSource-f0a787a9-
&gt; 11.cpp.o
&gt; In file included from ../../Source/JavaScriptCore/runtime/JSMap.h:28,
&gt;                  from
&gt; ../../Source/JavaScriptCore/bytecode/SpeculatedType.cpp:39,
&gt;                  from
&gt; JavaScriptCore/DerivedSources/unified-sources/UnifiedSource-f0a787a9-11.cpp:
&gt; 5:
&gt; ../../Source/JavaScriptCore/runtime/HashMapImpl.h:233:27: warning: ‘bool
&gt; JSC::areKeysEqual(JSC::JSGlobalObject*, JSC::JSValue, JSC::JSValue)’
&gt; declared ‘static’ but never defined [-Wunused-function]
&gt;   233 | ALWAYS_INLINE static bool areKeysEqual(JSGlobalObject*, JSValue,
&gt; JSValue);
&gt;       |                           ^~~~~~~~~~~~
&gt; ../../Source/JavaScriptCore/runtime/HashMapImpl.h:238:31: warning: ‘uint32_t
&gt; JSC::wangsInt64Hash(uint64_t)’ declared ‘static’ but never defined
&gt; [-Wunused-function]
&gt;   238 | static ALWAYS_INLINE uint32_t wangsInt64Hash(uint64_t key);
&gt;       |
&gt; 
&gt; I think we could simply remove the declarations of these functions from
&gt; HashMapImpl.h. If they&apos;re needed, better include HashMapImplInlines.h, yes?

Looking at this again, I think these 2 functions are only used by clients in HeapMapImplInlines.h.  So, yes, I think we can simply remove these declarations from HashMapImpl.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751513</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-17 18:19:53 -0700</bug_when>
    <thetext>Committed r276217 (236699@main): &lt;https://commits.webkit.org/236699@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426121</attachid>
            <date>2021-04-15 11:49:18 -0700</date>
            <delta_ts>2021-04-15 11:55:44 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-224616.patch</filename>
            <type>text/plain</type>
            <size>71236</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc2MDM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBA
QAorMjAyMS0wNC0xNSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVmYWN0b3IgaW5saW5lIGZ1bmN0aW9ucyBvdXQgb2YgSGFzaE1hcEltcGwuaCBpbnRvIEhhc2hN
YXBJbXBsSW5saW5lcy5oLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI0NjE2CisgICAgICAgIHJkYXI6Ly83NjcxMzcwOQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsc28gZG8gdGhlIHNhbWUgZm9yIGNs
aWVudHMgb2YgSGFzaE1hcEltcGwgdGhhdCByZXF1aXJlIHNpbWlsYXIgcmVmYWN0b3JpbmcuCisg
ICAgICAgIFRoaXMgZml4ZXMgdGhlICNpbmNsdWRlIG9mIEpTQ0pTVmFsdWVJbmxpbmVzLmggaW4g
SGFzaE1hcEltcGwuaCwgYXMgd2VsbCBhcyBtYWtlcworICAgICAgICBpdCBlYXNpZXIgdG8gdXNl
IG90aGVyIGlubGluZSBmdW5jdGlvbnMgZnJvbSBvdGhlciBjbGFzc2VzIGluIHRoZSBpbXBsZW1l
bnRhdGlvbgorICAgICAgICBvZiBIYXNoTWFwSW1wbCdzIGlubGluZSBmdW5jdGlvbnMgaW4gdGhl
IGZ1dHVyZS4KKworICAgICAgICBUaGlzIHBhdGNoIG9ubHkgbW92ZXMgaW5saW5lIGZ1bmN0aW9u
cyBvdXQgdG8gdGhlaXIgcmVzcGVjdGl2ZSAqSW5saW5lcy5oLgorICAgICAgICBUaGVyZSBhcmUg
bm8gYmVoYXZpb3IgY2hhbmdlcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgICogZGZnL0RGR09w
ZXJhdGlvbnMuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3Bw
OgorICAgICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuY3BwOgorICAgICAgICAqIHJ1bnRpbWUv
SGFzaE1hcEltcGwuaDoKKyAgICAgICAgKEpTQzo6YXJlS2V5c0VxdWFsKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6bm9ybWFsaXplTWFwS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6d2Fu
Z3NJbnQ2NEhhc2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpqc01hcEhhc2gpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpjb25jdXJyZW50SlNNYXBIYXNoKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6c2hvdWxkU2hyaW5rKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6c2hvdWxkUmVoYXNo
QWZ0ZXJBZGQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpuZXh0Q2FwYWNpdHkpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6ZmluZEJ1Y2tldCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Okhhc2hNYXBJbXBsOjpnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIYXNoTWFw
SW1wbDo6aGFzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmFkZCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjphZGROb3JtYWxpemVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Okhhc2hNYXBJbXBsOjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Okhhc2hN
YXBJbXBsOjpzZXRVcEhlYWRBbmRUYWlsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGFzaE1h
cEltcGw6OmFkZE5vcm1hbGl6ZWROb25FeGlzdGluZ0ZvckNsb25pbmcpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6YWRkTm9ybWFsaXplZEludGVybmFsKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmZpbmRCdWNrZXRBbHJlYWR5SGFzaGVkQW5kTm9y
bWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpyZWhhc2gpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6Y2hlY2tDb25zaXN0ZW5jeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjptYWtlQW5kU2V0TmV3QnVm
ZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmFzc2VydEJ1ZmZlcklz
RW1wdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGxJbmxp
bmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjphcmVLZXlzRXF1YWwpOgorICAgICAgICAoSlND
Ojpub3JtYWxpemVNYXBLZXkpOgorICAgICAgICAoSlNDOjp3YW5nc0ludDY0SGFzaCk6CisgICAg
ICAgIChKU0M6OmpzTWFwSGFzaCk6CisgICAgICAgIChKU0M6OmNvbmN1cnJlbnRKU01hcEhhc2gp
OgorICAgICAgICAoSlNDOjpzaG91bGRTaHJpbmspOgorICAgICAgICAoSlNDOjpzaG91bGRSZWhh
c2hBZnRlckFkZCk6CisgICAgICAgIChKU0M6Om5leHRDYXBhY2l0eSk6CisgICAgICAgIChKU0M6
Okhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBlPjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAoSlNDOjpIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0VHlwZT46OmZpbmRCdWNrZXQpOgorICAg
ICAgICAoSlNDOjpIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0VHlwZT46OmdldCk6CisgICAgICAg
IChKU0M6Okhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBlPjo6aGFzKToKKyAgICAgICAgKEpT
Qzo6SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldFR5cGU+OjphZGQpOgorICAgICAgICAoSlNDOjpI
YXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0VHlwZT46OmFkZE5vcm1hbGl6ZWQpOgorICAgICAgICAo
SlNDOjpIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0VHlwZT46OnJlbW92ZSk6CisgICAgICAgIChK
U0M6Okhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBlPjo6Y2xlYXIpOgorICAgICAgICAoSlND
OjpIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0VHlwZT46OnNldFVwSGVhZEFuZFRhaWwpOgorICAg
ICAgICAoSlNDOjpIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0VHlwZT46OmFkZE5vcm1hbGl6ZWRO
b25FeGlzdGluZ0ZvckNsb25pbmcpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDxIYXNoTWFw
QnVja2V0VHlwZT46OmFkZE5vcm1hbGl6ZWRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6Okhhc2hN
YXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBlPjo6ZmluZEJ1Y2tldEFscmVhZHlIYXNoZWRBbmROb3Jt
YWxpemVkKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldFR5cGU+Ojpy
ZWhhc2gpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0VHlwZT46OmNo
ZWNrQ29uc2lzdGVuY3kgY29uc3QpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDxIYXNoTWFw
QnVja2V0VHlwZT46Om1ha2VBbmRTZXROZXdCdWZmZXIpOgorICAgICAgICAoSlNDOjpIYXNoTWFw
SW1wbDxIYXNoTWFwQnVja2V0VHlwZT46OmFzc2VydEJ1ZmZlcklzRW1wdHkgY29uc3QpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNNYXAuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTWFwSW5saW5lcy5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OnNldCk6CisgICAgICAgICogcnVudGltZS9K
U1NldElubGluZXMuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1dlYWtNYXAuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTV2Vha01hcElubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkpTV2Vha01hcDo6c2V0KToKKyAgICAgICAgKiBydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKiBydW50aW1lL01hcFByb3RvdHlwZS5jcHA6CisgICAgICAgICogcnVudGltZS9T
ZXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha01hcEltcGwuaDoKKyAgICAgICAgKEpTQzo6anNX
ZWFrTWFwSGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om5leHRDYXBhY2l0eUFmdGVyQmF0
Y2hSZW1vdmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Vha01hcEltcGw6OmFkZCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OldlYWtNYXBJbXBsOjpzaG91bGRSZWhhc2hBZnRlckFkZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldlYWtNYXBJbXBsOjpyZWhhc2gpOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvV2Vha01hcEltcGxJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OmpzV2Vha01hcEhhc2gpOgorICAgICAgICAoSlNDOjpuZXh0Q2FwYWNpdHlBZnRlckJhdGNo
UmVtb3ZhbCk6CisgICAgICAgIChKU0M6OldlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+OjphZGQp
OgorICAgICAgICAoSlNDOjpXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6cmVoYXNoKToKKyAg
ICAgICAgKEpTQzo6V2Vha01hcEltcGw8V2Vha01hcEJ1Y2tldD46OnNob3VsZFJlaGFzaEFmdGVy
QWRkIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwOgorCiAy
MDIxLTA0LTE1ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAg
W0pTQ10gQ2hhbmdlIFZlY3Rvcjw+IHRvIEZpeGVkVmVjdG9yPD4gaW4gREZHOjpDb21tb25EYXRh
IGlmIHBvc3NpYmxlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAyNzU5OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTkxNyw2ICs5MTcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9HZXRWTS5oCiAgICAgcnVudGltZS9HbG9iYWxF
eGVjdXRhYmxlLmgKICAgICBydW50aW1lL0hhc2hNYXBJbXBsLmgKKyAgICBydW50aW1lL0hhc2hN
YXBJbXBsSW5saW5lcy5oCiAgICAgcnVudGltZS9JZGVudGlmaWVyLmgKICAgICBydW50aW1lL0lk
ZW50aWZpZXJJbmxpbmVzLmgKICAgICBydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKQEAgLTk3NCw2
ICs5NzUsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAgICAg
cnVudGltZS9KU01pY3JvdGFzay5oCiAgICAgcnVudGltZS9KU0xvY2suaAogICAgIHJ1bnRpbWUv
SlNNYXAuaAorICAgIHJ1bnRpbWUvSlNNYXBJbmxpbmVzLmgKICAgICBydW50aW1lL0pTTWFwSXRl
cmF0b3IuaAogICAgIHJ1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaAogICAgIHJ1bnRpbWUvSlNNb2R1
bGVSZWNvcmQuaApAQCAtOTkxLDYgKzk5Myw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUEKICAgICBydW50aW1lL0pTU2NyaXB0RmV0Y2hlci5oCiAgICAgcnVudGlt
ZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKICAgICBydW50aW1lL0pTU2V0LmgKKyAgICBy
dW50aW1lL0pTU2V0SW5saW5lcy5oCiAgICAgcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKICAgICBy
dW50aW1lL0pTU291cmNlQ29kZS5oCiAgICAgcnVudGltZS9KU1N0cmluZy5oCkBAIC05OTksNiAr
MTAwMiw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBy
dW50aW1lL0pTVHlwZS5oCiAgICAgcnVudGltZS9KU1R5cGVJbmZvLmgKICAgICBydW50aW1lL0pT
VHlwZWRBcnJheXMuaAorICAgIHJ1bnRpbWUvSlNXZWFrTWFwLmgKKyAgICBydW50aW1lL0pTV2Vh
a01hcElubGluZXMuaAogICAgIHJ1bnRpbWUvSlNXaXRoU2NvcGUuaAogICAgIHJ1bnRpbWUvSlNX
cmFwcGVyT2JqZWN0LmgKICAgICBydW50aW1lL0xhenlDbGFzc1N0cnVjdHVyZS5oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc1OTk5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTIwMTEsNiArMjAxMSwxMCBAQAogCQlGRUQ5NEYyRjE3MUUzRTIzMDBC
RTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRjA0MDUxMUFBRTY2
MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENv
bXBhcmVBbmRTd2FwVGVzdC5jcHAgKi87IH07CiAJCUZFRjQ5QUFCMUVCOTQ4NEIwMDY1M0JEQiAv
KiBNdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVGNDlBQTkxRUI5NDdGRTAwNjUzQkRCIC8q
IE11bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdC5jcHAgKi87IH07CisJCUZFRjVCNDIz
MjYyOEEwRUUwMDE2RTc3NiAvKiBIYXNoTWFwSW1wbElubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRjVCNDIyMjYyOEEwRUUwMDE2RTc3NiAv
KiBIYXNoTWFwSW1wbElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlGRUY1QjQyNTI2MjhBODUwMDAxNkU3NzYgLyogSlNNYXBJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUY1QjQy
NDI2MjhBODUwMDAxNkU3NzYgLyogSlNNYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkVGNUI0MjcyNjI4QUJEOTAwMTZFNzc2IC8q
IEpTV2Vha01hcElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFRjVCNDI2MjYyOEFCRDkwMDE2RTc3NiAvKiBKU1dlYWtNYXBJbmxpbmVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkVGNUI0
MjkyNjI4QjUyNDAwMTZFNzc2IC8qIEpTU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVGNUI0MjgyNjI4QjUyNDAwMTZFNzc2IC8qIEpT
U2V0SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUZFRkQ2RkM2MUQ1RTc5OTIwMDhGMkYwQiAvKiBKU1N0cmluZ0lubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRkQ2RkM1MUQ1RTc5
NzAwMDhGMkYwQiAvKiBKU1N0cmluZ0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAK
QEAgLTU0MTcsNiArNTQyMSwxMCBAQAogCQlGRUYzNDc2NDIwMzYyQjIzMDBCN0MwRUYgLyogZ2Vu
ZXJhdGVfb2Zmc2V0X2V4dHJhY3Rvci5yYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnJ1Ynk7IHBh
dGggPSBnZW5lcmF0ZV9vZmZzZXRfZXh0cmFjdG9yLnJiOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRUY0OUFBOTFFQjk0N0ZFMDA2NTNCREIgLyogTXVsdGl0aHJlYWRlZE11bHRpVk1F
eGVjdXRpb25UZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE11
bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvTXVs
dGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkVGNDlBQUExRUI5NDdGRTAwNjUzQkRCIC8qIE11bHRpdGhyZWFkZWRNdWx0aVZN
RXhlY3V0aW9uVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNdWx0aXRo
cmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9NdWx0aXRocmVh
ZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkVGNUI0MjIyNjI4QTBFRTAwMTZFNzc2IC8qIEhhc2hNYXBJbXBsSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWFwSW1wbElubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVGNUI0MjQyNjI4QTg1MDAwMTZFNzc2IC8qIEpTTWFwSW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01hcElubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVGNUI0MjYyNjI4QUJEOTAwMTZFNzc2IC8q
IEpTV2Vha01hcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNX
ZWFrTWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRUY1QjQyODI2
MjhCNTI0MDAxNkU3NzYgLyogSlNTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTU2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RUZENkZDNTFENUU3OTcwMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCkBAIC03Mzky
LDYgKzc0MDAsNyBAQAogCQkJCUUzNTVEMzhEMjI0NDY4NkIwMDhGMUFENiAvKiBHbG9iYWxFeGVj
dXRhYmxlLmggKi8sCiAJCQkJNzlBMDkwN0QxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBs
LmNwcCAqLywKIAkJCQk3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAq
LywKKwkJCQlGRUY1QjQyMjI2MjhBMEVFMDAxNkU3NzYgLyogSGFzaE1hcEltcGxJbmxpbmVzLmgg
Ki8sCiAJCQkJNzlERkNCREExRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUu
aCAqLywKIAkJCQk5MzNBMzQ5RDAzOEFFODBGMDA4NjM1Q0UgLyogSWRlbnRpZmllci5jcHAgKi8s
CiAJCQkJOTMzQTM0OUEwMzhBRTdDNjAwODYzNUNFIC8qIElkZW50aWZpZXIuaCAqLywKQEAgLTc1
ODksNiArNzU5OCw3IEBACiAJCQkJNjVFQTRDOUEwOTJBRjlFMjAwOTNEODAwIC8qIEpTTG9jay5o
ICovLAogCQkJCUE3MDA4NzNGMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5jcHAgKi8sCiAJCQkJ
QTcwMDg3NDAxN0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggKi8sCisJCQkJRkVGNUI0MjQyNjI4
QTg1MDAwMTZFNzc2IC8qIEpTTWFwSW5saW5lcy5oICovLAogCQkJCUE3NERFRjhGMTgyRDk5MTQw
MDUyMkMyMiAvKiBKU01hcEl0ZXJhdG9yLmNwcCAqLywKIAkJCQlBNzRERUY5MDE4MkQ5OTE0MDA1
MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oICovLAogCQkJCTcwMTNDQTg5MUI0OTFBOTQwMENBRTYx
MyAvKiBKU01pY3JvdGFzay5jcHAgKi8sCkBAIC03NjMwLDYgKzc2NDAsNyBAQAogCQkJCTBGOTE5
RDBGMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggKi8sCiAJ
CQkJQTcyOTlEOUIxN0QxMjgzNzAwNUY1RkY5IC8qIEpTU2V0LmNwcCAqLywKIAkJCQlBNzI5OUQ5
QzE3RDEyODM3MDA1RjVGRjkgLyogSlNTZXQuaCAqLywKKwkJCQlGRUY1QjQyODI2MjhCNTI0MDAx
NkU3NzYgLyogSlNTZXRJbmxpbmVzLmggKi8sCiAJCQkJQTc5MERENjkxODJGNDk5NzAwNTg4ODA3
IC8qIEpTU2V0SXRlcmF0b3IuY3BwICovLAogCQkJCUE3OTBERDZBMTgyRjQ5OTcwMDU4ODgwNyAv
KiBKU1NldEl0ZXJhdG9yLmggKi8sCiAJCQkJRjczOTI2OTE4REM2NDMzMEFGQ0RGMEQ3IC8qIEpT
U291cmNlQ29kZS5jcHAgKi8sCkBAIC03NjY0LDYgKzc2NzUsNyBAQAogCQkJCTBGMkI2NkQzMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi8sCiAJCQkJQTdDQTNBRTEx
N0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5jcHAgKi8sCiAJCQkJQTdDQTNBRTIxN0RBNDFB
RTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oICovLAorCQkJCUZFRjVCNDI2MjYyOEFCRDkwMDE2RTc3
NiAvKiBKU1dlYWtNYXBJbmxpbmVzLmggKi8sCiAJCQkJNTM5QkZCQjEyMkFEM0Q4QzAwMjNGNEMw
IC8qIEpTV2Vha09iamVjdFJlZi5jcHAgKi8sCiAJCQkJNTM5QkZCQUYyMkFEM0NEQzAwMjNGNEMw
IC8qIEpTV2Vha09iamVjdFJlZi5oICovLAogCQkJCTcwOUZCODYxMUFFMzM1QzYwMDM5RDA2OSAv
KiBKU1dlYWtTZXQuY3BwICovLApAQCAtOTQzNSw2ICs5NDQ3LDcgQEAKIAkJCQlCQzE4QzQ1RTBF
MTZGNUNEMDBCMzQ0NjAgLyogQ0xvb3BTdGFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMUVB
RjAxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NjlBMDc5NzBFRDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmggaW4gSGVhZGVycyAq
LywKKwkJCQlGRUY1QjQyOTI2MjhCNTI0MDAxNkU3NzYgLyogSlNTZXRJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjhGOTQ0MTE2Njc2MzMyMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDOTdGMzQxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9j
a0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMTQxN0Q0
MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCkBAIC05NjMzLDYg
Kzk2NDYsNyBAQAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVu
dHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc2QTE0NjhB
NkY3MDBDRjI0NDIgLyogREZHT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVGNUI0Mjcy
NjI4QUJEOTAwMTZFNzc2IC8qIEpTV2Vha01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21waWxhdGlv
bkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBE
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovLApAQCAtOTc2Myw2ICs5Nzc3
LDcgQEAKIAkJCQkwRkVBMEEwQzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5RDRDMEQxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRh
cmdldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRDQxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TEV4aXRBcmd1bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVGNUI0MjMyNjI4QTBFRTAwMTZF
Nzc2IC8qIEhhc2hNYXBJbXBsSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRDYx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI5Q0Y1MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRjcxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNTQwLDYg
KzEwNTU1LDcgQEAKIAkJCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3OTg2OTQzQjFGOEMwQUNDMDA5MjMyQUUgLyogU3RydWN0dXJl
Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAvKiBT
dHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVGNUI0MjUyNjI4QTg1MDAwMTZF
Nzc2IC8qIEpTTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQUEzMTIxOEJENDlE
MTAwMzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFGNzM4
MkQxOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI3NTk5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJET01KSVRTaWduYXR1
cmUuaCIKICNpbmNsdWRlICJHZXRCeVN0YXR1cy5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5o
IgotI2luY2x1ZGUgIkhhc2hNYXBJbXBsLmgiCisjaW5jbHVkZSAiSGFzaE1hcEltcGxJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQXN5bmNHZW5lcmF0
b3IuaCIKICNpbmNsdWRlICJKU0dlbmVyYXRvci5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzU5OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MCw3ICs2MCw3IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5j
bHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJKU1NldEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiSlNX
ZWFrTWFwLmgiCisjaW5jbHVkZSAiSlNXZWFrTWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2Vh
a1NldC5oIgogI2luY2x1ZGUgIk51bWJlckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0
Q29uc3RydWN0b3IuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3Ry
YWN0TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDI3NTk5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGxJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiSlNNYXAuaCIKKyNpbmNsdWRlICJKU01hcElubGluZXMuaCIKICNp
bmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QuaCIKICNpbmNsdWRlICJKU01vZHVsZVJlY29yZC5oIgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAkocmV2aXNpb24gMjc1OTk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSGFzaE1hcEltcGwuaCIKIAorI2luY2x1ZGUgIkhhc2hNYXBJbXBsSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDI3NTk5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRXhjZXB0aW9u
SGVscGVycy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlND
SlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
MjMwLDEzMSArMjMwLDE3IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi1BTFdBWVNfSU5MSU5FIHN0
YXRpYyBib29sIGFyZUtleXNFcXVhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIGEsIEpTVmFsdWUgYikKLXsKLSAgICAvLyBXZSB3YW50ICswIGFuZCAtMCB0byBiZSBjb21w
YXJlZCB0byB0cnVlIGhlcmUuIHNhbWVWYWx1ZSgpIGl0c2VsZiBkb2Vzbid0Ci0gICAgLy8gZ3Vh
cmFudGVlIHRoYXQsIGhvd2V2ZXIsIHdlIG5vcm1hbGl6ZSBhbGwga2V5cyBiZWZvcmUgY29tcGFy
aW5nIGFuZCBzdG9yaW5nCi0gICAgLy8gdGhlbSBpbiB0aGUgbWFwLiBUaGUgbm9ybWFsaXphdGlv
biB3aWxsIGNvbnZlcnQgLTAuMCBhbmQgMC4wIHRvIHRoZSBpbnRlZ2VyCi0gICAgLy8gcmVwcmVz
ZW50YXRpb24gZm9yIDAuCi0gICAgcmV0dXJuIHNhbWVWYWx1ZShnbG9iYWxPYmplY3QsIGEsIGIp
OwotfQorQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBhcmVLZXlzRXF1YWwoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKIAogLy8gTm90ZSB0aGF0IG5vcm1hbGl6YXRpb24gaXMg
aW5saW5lZCBpbiBERkcncyBOb3JtYWxpemVNYXBLZXkuCiAvLyBLZWVwIGluIHN5bmMgd2l0aCB0
aGUgaW1wbGVtZW50YXRpb24gb2YgREZHIGFuZCBGVEwgbm9ybWFsaXphdGlvbi4KLUFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBub3JtYWxpemVNYXBLZXkoSlNWYWx1ZSBrZXkpCi17Ci0gICAgaWYgKCFr
ZXkuaXNOdW1iZXIoKSkgewotICAgICAgICBpZiAoa2V5LmlzSGVhcEJpZ0ludCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGtleS5hc0hlYXBCaWdJbnQoKSk7Ci0g
ICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotCi0gICAgaWYgKGtleS5pc0ludDMyKCkpCi0gICAg
ICAgIHJldHVybiBrZXk7Ci0KLSAgICBkb3VibGUgZCA9IGtleS5hc0RvdWJsZSgpOwotICAgIGlm
IChzdGQ6OmlzbmFuKGQpKQotICAgICAgICByZXR1cm4ganNOYU4oKTsKLQotICAgIGludCBpID0g
c3RhdGljX2Nhc3Q8aW50PihkKTsKLSAgICBpZiAoaSA9PSBkKSB7Ci0gICAgICAgIC8vIFdoZW4g
YSBrZXkgaXMgLTAsIHdlIGNvbnZlcnQgaXQgdG8gcG9zaXRpdmUgemVyby4KLSAgICAgICAgLy8g
V2hlbiBhIGtleSBpcyB0aGUgZG91YmxlIHJlcHJlc2VudGF0aW9uIGZvciBhbiBpbnRlZ2VyLCB3
ZSBjb252ZXJ0IGl0IHRvIGFuIGludGVnZXIuCi0gICAgICAgIHJldHVybiBqc051bWJlcihpKTsK
LSAgICB9Ci0gICAgLy8gVGhpcyBtZWFucyBrZXkgaXMgZGVmaW5pdGVseSBub3QgbmVnYXRpdmUg
emVybywgYW5kIGl0J3MgZGVmaW5pdGVseSBub3QgYSBkb3VibGUgcmVwcmVzZW50YXRpb24gb2Yg
YW4gaW50ZWdlci4gCi0gICAgcmV0dXJuIGtleTsKLX0KLQotc3RhdGljIEFMV0FZU19JTkxJTkUg
dWludDMyX3Qgd2FuZ3NJbnQ2NEhhc2godWludDY0X3Qga2V5KQotewotICAgIGtleSArPSB+KGtl
eSA8PCAzMik7Ci0gICAga2V5IF49IChrZXkgPj4gMjIpOwotICAgIGtleSArPSB+KGtleSA8PCAx
Myk7Ci0gICAga2V5IF49IChrZXkgPj4gOCk7Ci0gICAga2V5ICs9IChrZXkgPDwgMyk7Ci0gICAg
a2V5IF49IChrZXkgPj4gMTUpOwotICAgIGtleSArPSB+KGtleSA8PCAyNyk7Ci0gICAga2V5IF49
IChrZXkgPj4gMzEpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5KTsKLX0K
LQotQUxXQVlTX0lOTElORSB1aW50MzJfdCBqc01hcEhhc2goSlNCaWdJbnQqIGJpZ0ludCkKLXsK
LSAgICByZXR1cm4gYmlnSW50LT5oYXNoKCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdWludDMyX3Qg
anNNYXBIYXNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNWYWx1ZSB2
YWx1ZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG5vcm1hbGl6ZU1hcEtleSh2YWx1ZSkg
PT0gdmFsdWUsICJXZSBleHBlY3Qgbm9ybWFsaXplZCB2YWx1ZXMgZmxvd2luZyBpbnRvIHRoaXMg
ZnVuY3Rpb24uIik7Ci0KLSAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYg
d3RmU3RyaW5nID0gYXNTdHJpbmcodmFsdWUpLT52YWx1ZShnbG9iYWxPYmplY3QpOwotICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBVSU5UX01BWCk7Ci0gICAgICAgIHJldHVybiB3
dGZTdHJpbmcuaW1wbCgpLT5oYXNoKCk7Ci0gICAgfQotCi0gICAgaWYgKHZhbHVlLmlzSGVhcEJp
Z0ludCgpKQotICAgICAgICByZXR1cm4ganNNYXBIYXNoKHZhbHVlLmFzSGVhcEJpZ0ludCgpKTsK
LQotICAgIHJldHVybiB3YW5nc0ludDY0SGFzaChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKTsKLX0K
LQotQUxXQVlTX0lOTElORSBPcHRpb25hbDx1aW50MzJfdD4gY29uY3VycmVudEpTTWFwSGFzaChK
U1ZhbHVlIGtleSkKLXsKLSAgICBrZXkgPSBub3JtYWxpemVNYXBLZXkoa2V5KTsKLSAgICBpZiAo
a2V5LmlzU3RyaW5nKCkpIHsKLSAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKGtl
eSk7Ci0gICAgICAgIGlmIChzdHJpbmctPmxlbmd0aCgpID4gMTAgKiAxMDI0KQotICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgY29uc3QgU3RyaW5nSW1wbCogaW1wbCA9
IHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCk7Ci0gICAgICAgIGlmICghaW1wbCkKLSAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBpbXBsLT5jb25jdXJyZW50
SGFzaCgpOwotICAgIH0KLQotICAgIGlmIChrZXkuaXNIZWFwQmlnSW50KCkpCi0gICAgICAgIHJl
dHVybiBrZXkuYXNIZWFwQmlnSW50KCktPmNvbmN1cnJlbnRIYXNoKCk7Ci0KLSAgICB1aW50NjRf
dCByYXdWYWx1ZSA9IEpTVmFsdWU6OmVuY29kZShrZXkpOwotICAgIHJldHVybiB3YW5nc0ludDY0
SGFzaChyYXdWYWx1ZSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdWludDMyX3Qgc2hvdWxkU2hyaW5r
KHVpbnQzMl90IGNhcGFjaXR5LCB1aW50MzJfdCBrZXlDb3VudCkKLXsKLSAgICByZXR1cm4gOCAq
IGtleUNvdW50IDw9IGNhcGFjaXR5ICYmIGNhcGFjaXR5ID4gNDsKLX0KLQotQUxXQVlTX0lOTElO
RSB1aW50MzJfdCBzaG91bGRSZWhhc2hBZnRlckFkZCh1aW50MzJfdCBjYXBhY2l0eSwgdWludDMy
X3Qga2V5Q291bnQsIHVpbnQzMl90IGRlbGV0ZUNvdW50KQotewotICAgIHJldHVybiAyICogKGtl
eUNvdW50ICsgZGVsZXRlQ291bnQpID49IGNhcGFjaXR5OwotfQotCi1BTFdBWVNfSU5MSU5FIHVp
bnQzMl90IG5leHRDYXBhY2l0eSh1aW50MzJfdCBjYXBhY2l0eSwgdWludDMyX3Qga2V5Q291bnQp
Ci17Ci0gICAgaWYgKHNob3VsZFNocmluayhjYXBhY2l0eSwga2V5Q291bnQpKSB7Ci0gICAgICAg
IEFTU0VSVCgoY2FwYWNpdHkgLyAyKSA+PSA0KTsKLSAgICAgICAgcmV0dXJuIGNhcGFjaXR5IC8g
MjsKLSAgICB9Ci0KLSAgICBpZiAoMyAqIGtleUNvdW50IDw9IGNhcGFjaXR5ICYmIGNhcGFjaXR5
ID4gNjQpIHsKLSAgICAgICAgLy8gV2Ugc3RheSBhdCB0aGUgc2FtZSBzaXplIGlmIHJlaGFzaGlu
ZyB3b3VsZCBjYXVzZSB1cyB0byBiZSBubyBtb3JlIHRoYW4KLSAgICAgICAgLy8gMS8zcmQgZnVs
bC4gVGhpcyBjb21lcyB1cCBmb3IgcHJvZ3JhbXMgbGlrZSB0aGlzOgotICAgICAgICAvLyBTYXkg
dGhlIGhhc2ggdGFibGUgZ3JldyB0byBhIGtleSBjb3VudCBvZiA2NCwgY2F1c2luZyBpdCB0byBn
cm93IHRvIGEgY2FwYWNpdHkgb2YgMjU2LgotICAgICAgICAvLyBUaGVuLCB0aGUgdGFibGUgYWRk
ZWQgNjMgaXRlbXMuIFRoZSBsb2FkIGlzIG5vdyAxMjcuIFRoZW4sIDYzIGl0ZW1zIGFyZSBkZWxl
dGVkLgotICAgICAgICAvLyBUaGUgbG9hZCBpcyBzdGlsbCAxMjcuIFRoZW4sIGFub3RoZXIgaXRl
bSBpcyBhZGRlZC4gVGhlIGxvYWQgaXMgbm93IDEyOCwgYW5kIHdlCi0gICAgICAgIC8vIGRlY2lk
ZSB0aGF0IHdlIG5lZWQgdG8gcmVoYXNoLiBUaGUga2V5IGNvdW50IGlzIDY1LCBhbG1vc3QgZXhh
Y3RseSB3aGF0IGl0IHdhcwotICAgICAgICAvLyB3aGVuIHdlIGdyZXcgdG8gYSBjYXBhY2l0eSBv
ZiAyNTYuIFdlIGRvbid0IHJlYWxseSBuZWVkIHRvIGdyb3cgdG8gYSBjYXBhY2l0eQotICAgICAg
ICAvLyBvZiA1MTIgaW4gdGhpcyBzaXR1YXRpb24uIEluc3RlYWQsIHdlIGNob29zZSB0byByZWhh
c2ggYXQgdGhlIHNhbWUgc2l6ZS4gVGhpcwotICAgICAgICAvLyB3aWxsIGJyaW5nIHRoZSBsb2Fk
IGRvd24gdG8gNjUuIFdlIHJlaGFzaCBpbnRvIHRoZSBzYW1lIHNpemUgd2hlbiB3ZSBkZXRlcm1p
bmUKLSAgICAgICAgLy8gdGhhdCB0aGUgbmV3IGxvYWQgcmF0aW8gd2lsbCBiZSB1bmRlciAxLzNy
ZC4gKFdlIGFsc28gcGljayBhIG1pbnVtdW0gY2FwYWNpdHkKLSAgICAgICAgLy8gYXQgd2hpY2gg
dGhpcyBydWxlIGtpY2tzIGluIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdpbGwgYmUgdG9vIHNlbnNp
dGl2ZSB0byByZWhhc2hpbmcKLSAgICAgICAgLy8gYXQgdGhlIHNhbWUgY2FwYWNpdHkpLgotICAg
ICAgICByZXR1cm4gY2FwYWNpdHk7Ci0gICAgfQotICAgIHJldHVybiAoQ2hlY2tlZDx1aW50MzJf
dD4oY2FwYWNpdHkpICogMikudW5zYWZlR2V0KCk7Ci19CitBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
bm9ybWFsaXplTWFwS2V5KEpTVmFsdWUga2V5KTsKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHVpbnQz
Ml90IHdhbmdzSW50NjRIYXNoKHVpbnQ2NF90IGtleSk7CitBTFdBWVNfSU5MSU5FIHVpbnQzMl90
IGpzTWFwSGFzaChKU0JpZ0ludCopOworQUxXQVlTX0lOTElORSB1aW50MzJfdCBqc01hcEhhc2go
SlNHbG9iYWxPYmplY3QqLCBWTSYsIEpTVmFsdWUpOworQUxXQVlTX0lOTElORSB1aW50MzJfdCBz
aG91bGRTaHJpbmsodWludDMyX3QgY2FwYWNpdHksIHVpbnQzMl90IGtleUNvdW50KTsKK0FMV0FZ
U19JTkxJTkUgdWludDMyX3Qgc2hvdWxkUmVoYXNoQWZ0ZXJBZGQodWludDMyX3QgY2FwYWNpdHks
IHVpbnQzMl90IGtleUNvdW50LCB1aW50MzJfdCBkZWxldGVDb3VudCk7CitBTFdBWVNfSU5MSU5F
IHVpbnQzMl90IG5leHRDYXBhY2l0eSh1aW50MzJfdCBjYXBhY2l0eSwgdWludDMyX3Qga2V5Q291
bnQpOwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldFR5cGU+CiBjbGFzcyBIYXNo
TWFwSW1wbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKQEAgLTM5MSw0NCArMjc3LDggQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9idWZmZXItPmJ1ZmZlcigpOwogICAgIH0KIAotICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZt
KQotICAgIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5Pjo6b2Zmc2V0T2ZLZXkoKSA9PSBIYXNoTWFwQnVja2V0PEhhc2hNYXBC
dWNrZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRPZktleSgpLCAiV2UgYXNzdW1lIHRoaXMgdG8gYmUg
dHJ1ZSBpbiB0aGUgREZHIGFuZCBGVEwgSklULiIpOwotCi0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwotCi0gICAgICAgIG1ha2VBbmRTZXROZXdCdWZmZXIoZ2xvYmFsT2JqZWN0LCB2bSk7Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0KLSAgICAgICAgc2V0VXBI
ZWFkQW5kVGFpbChnbG9iYWxPYmplY3QsIHZtKTsKLSAgICB9Ci0KLSAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSGFzaE1hcEltcGwq
IGJhc2UpCi0gICAgewotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLQotICAgICAgICAvLyBUaGlz
IHNpemUgc2hvdWxkIGJlIHRoZSBzYW1lIHRvIHRoZSBjYXNlIHdoZW4geW91IGNsb25lIHRoZSBt
YXAgYnkgY2FsbGluZyBhZGQoKSByZXBlYXRlZGx5LgotICAgICAgICB1aW50MzJfdCBjYXBhY2l0
eSA9ICgoQ2hlY2tlZDx1aW50MzJfdD4oYmFzZS0+bV9rZXlDb3VudCkgKiAyKSArIDEpLnVuc2Fm
ZUdldCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYXBhY2l0eSA8PSAoMVUgPDwgMzEpKTsK
LSAgICAgICAgY2FwYWNpdHkgPSBzdGQ6Om1heDx1aW50MzJfdD4oV1RGOjpyb3VuZFVwVG9Qb3dl
ck9mVHdvKGNhcGFjaXR5KSwgNFUpOwotICAgICAgICBtX2NhcGFjaXR5ID0gY2FwYWNpdHk7Ci0g
ICAgICAgIG1ha2VBbmRTZXROZXdCdWZmZXIoZ2xvYmFsT2JqZWN0LCB2bSk7Ci0gICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0KLSAgICAgICAgc2V0VXBIZWFkQW5k
VGFpbChnbG9iYWxPYmplY3QsIHZtKTsKLQotICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVj
a2V0ID0gYmFzZS0+bV9oZWFkLmdldCgpLT5uZXh0KCk7Ci0gICAgICAgIHdoaWxlIChidWNrZXQp
IHsKLSAgICAgICAgICAgIGlmICghYnVja2V0LT5kZWxldGVkKCkpIHsKLSAgICAgICAgICAgICAg
ICBhZGROb3JtYWxpemVkTm9uRXhpc3RpbmdGb3JDbG9uaW5nKGdsb2JhbE9iamVjdCwgYnVja2V0
LT5rZXkoKSwgSGFzaE1hcEJ1Y2tldFR5cGU6OmV4dHJhY3RWYWx1ZSgqYnVja2V0KSk7Ci0gICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJ1Y2tldCA9IGJ1Y2tldC0+bmV4dCgpOwotICAgICAgICB9Ci0g
ICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICB9CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0dsb2JhbE9iamVjdCosIFZNJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bE9iamVjdCosIFZNJiwgSGFzaE1hcEltcGwqIGJhc2UpOwogCiAgICAgc3RhdGljIEhhc2hNYXBC
dWNrZXRUeXBlKiBlbXB0eVZhbHVlKCkKICAgICB7CkBAIC00NTAsMTE0ICszMDAsMjcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gYnVja2V0ID09IGRlbGV0ZWRWYWx1ZSgpOwogICAgIH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldFR5cGUqKiBmaW5kQnVja2V0KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5KQotICAgIHsKLSAgICAgICAgVk0mIHZt
ID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgICAgICBrZXkgPSBub3JtYWxpemVNYXBLZXkoa2V5KTsKLSAgICAg
ICAgdWludDMyX3QgaGFzaCA9IGpzTWFwSGFzaChnbG9iYWxPYmplY3QsIHZtLCBrZXkpOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgcmV0dXJu
IGZpbmRCdWNrZXQoZ2xvYmFsT2JqZWN0LCBrZXksIGhhc2gpOwotICAgIH0KKyAgICBBTFdBWVNf
SU5MSU5FIEhhc2hNYXBCdWNrZXRUeXBlKiogZmluZEJ1Y2tldChKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUga2V5KTsKIAotICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldFR5cGUqKiBmaW5k
QnVja2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCB1aW50MzJf
dCBoYXNoKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShub3JtYWxpemVNYXBL
ZXkoa2V5KSA9PSBrZXksICJXZSBleHBlY3Qgbm9ybWFsaXplZCB2YWx1ZXMgZmxvd2luZyBpbnRv
IHRoaXMgZnVuY3Rpb24uIik7Ci0gICAgICAgIHJldHVybiBmaW5kQnVja2V0QWxyZWFkeUhhc2hl
ZEFuZE5vcm1hbGl6ZWQoZ2xvYmFsT2JqZWN0LCBrZXksIGhhc2gpOwotICAgIH0KKyAgICBBTFdB
WVNfSU5MSU5FIEhhc2hNYXBCdWNrZXRUeXBlKiogZmluZEJ1Y2tldChKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUga2V5LCB1aW50MzJfdCBoYXNoKTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
ID0gSGFzaE1hcEJ1Y2tldFR5cGU+Ci0gICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtl
eVZhbHVlPj46OnZhbHVlLCBKU1ZhbHVlPjo6dHlwZSBnZXQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBrZXkpCi0gICAgewotICAgICAgICBpZiAoSGFzaE1hcEJ1Y2tldFR5
cGUqKiBidWNrZXQgPSBmaW5kQnVja2V0KGdsb2JhbE9iamVjdCwga2V5KSkKLSAgICAgICAgICAg
IHJldHVybiAoKmJ1Y2tldCktPnZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBoYXMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBrZXkpCi0gICAgewotICAgICAgICByZXR1cm4gISFmaW5kQnVj
a2V0KGdsb2JhbE9iamVjdCwga2V5KTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
YWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZSgpKQotICAgIHsKLSAgICAgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2Jq
ZWN0KTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgICAgIGtleSA9IG5vcm1hbGl6ZU1hcEtleShrZXkpOwotICAgICAgICBhZGROb3JtYWxpemVk
SW50ZXJuYWwoZ2xvYmFsT2JqZWN0LCBrZXksIHZhbHVlLCBbJl0gKEhhc2hNYXBCdWNrZXRUeXBl
KiBidWNrZXQpIHsKLSAgICAgICAgICAgIHJldHVybiAhaXNEZWxldGVkKGJ1Y2tldCkgJiYgYXJl
S2V5c0VxdWFsKGdsb2JhbE9iamVjdCwga2V5LCBidWNrZXQtPmtleSgpKTsKLSAgICAgICAgfSk7
Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgIHNj
b3BlLnJlbGVhc2UoKTsKLSAgICAgICAgaWYgKHNob3VsZFJlaGFzaEFmdGVyQWRkKCkpCi0gICAg
ICAgICAgICByZWhhc2goZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5F
IEhhc2hNYXBCdWNrZXRUeXBlKiBhZGROb3JtYWxpemVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlLCB1aW50MzJfdCBoYXNoKQotICAgIHsK
LSAgICAgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShub3JtYWxpemVNYXBLZXkoa2V5KSA9PSBrZXksICJXZSBleHBlY3Qgbm9ybWFs
aXplZCB2YWx1ZXMgZmxvd2luZyBpbnRvIHRoaXMgZnVuY3Rpb24uIik7Ci0gICAgICAgIERFRkVS
X1RFUk1JTkFUSU9OX0FORF9BU1NFUlRfV0lUSF9NRVNTQUdFKHZtLCBqc01hcEhhc2goZ2xvYmFs
T2JqZWN0LCBnZXRWTShnbG9iYWxPYmplY3QpLCBrZXkpID09IGhhc2gsICJXZSBleHBlY3QgaGFz
aCB2YWx1ZSBpcyB3aGF0IHdlIGV4cGVjdC4iKTsKLQotICAgICAgICBhdXRvKiBidWNrZXQgPSBh
ZGROb3JtYWxpemVkSW50ZXJuYWwodm0sIGtleSwgdmFsdWUsIGhhc2gsIFsmXSAoSGFzaE1hcEJ1
Y2tldFR5cGUqIGJ1Y2tldCkgewotICAgICAgICAgICAgcmV0dXJuICFpc0RlbGV0ZWQoYnVja2V0
KSAmJiBhcmVLZXlzRXF1YWwoZ2xvYmFsT2JqZWN0LCBrZXksIGJ1Y2tldC0+a2V5KCkpOwotICAg
ICAgICB9KTsKLSAgICAgICAgaWYgKHNob3VsZFJlaGFzaEFmdGVyQWRkKCkpCi0gICAgICAgICAg
ICByZWhhc2goZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIGJ1Y2tldDsKLSAgICB9Ci0K
LSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcmVtb3ZlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUga2V5KQotICAgIHsKLSAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWNr
ZXQgPSBmaW5kQnVja2V0KGdsb2JhbE9iamVjdCwga2V5KTsKLSAgICAgICAgaWYgKCFidWNrZXQp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgVk0mIHZtID0gZ2V0Vk0oZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGltcGwgPSAqYnVja2V0Owot
ICAgICAgICBpbXBsLT5uZXh0KCktPnNldFByZXYodm0sIGltcGwtPnByZXYoKSk7Ci0gICAgICAg
IGltcGwtPnByZXYoKS0+c2V0TmV4dCh2bSwgaW1wbC0+bmV4dCgpKTsKLSAgICAgICAgaW1wbC0+
bWFrZURlbGV0ZWQodm0pOworICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1
ZT4+Ojp2YWx1ZSwgSlNWYWx1ZT46OnR5cGUgZ2V0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBr
ZXkpOwogCi0gICAgICAgICpidWNrZXQgPSBkZWxldGVkVmFsdWUoKTsKKyAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgaGFzKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBrZXkpOwogCi0gICAgICAgICsr
bV9kZWxldGVDb3VudDsKLSAgICAgICAgQVNTRVJUKG1fa2V5Q291bnQgPiAwKTsKLSAgICAgICAg
LS1tX2tleUNvdW50OworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZGQoSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSA9IEpTVmFsdWUoKSk7CiAKLSAgICAgICAgaWYgKHNob3Vs
ZFNocmluaygpKQotICAgICAgICAgICAgcmVoYXNoKGdsb2JhbE9iamVjdCk7CisgICAgQUxXQVlT
X0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSogYWRkTm9ybWFsaXplZChKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUga2V5LCBKU1ZhbHVlLCB1aW50MzJfdCBoYXNoKTsKIAotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9CisgICAgQUxXQVlTX0lOTElORSBib29sIHJlbW92ZShKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUga2V5KTsKIAogICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3Qgc2l6ZSgpIGNv
bnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9rZXlDb3VudDsKICAgICB9CiAKLSAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgY2xlYXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7
Ci0gICAgICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIG1fa2V5Q291
bnQgPSAwOwotICAgICAgICBtX2RlbGV0ZUNvdW50ID0gMDsKLSAgICAgICAgSGFzaE1hcEJ1Y2tl
dFR5cGUqIGhlYWQgPSBtX2hlYWQuZ2V0KCk7Ci0gICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBi
dWNrZXQgPSBtX2hlYWQtPm5leHQoKTsKLSAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIHRhaWwg
PSBtX3RhaWwuZ2V0KCk7Ci0gICAgICAgIHdoaWxlIChidWNrZXQgIT0gdGFpbCkgewotICAgICAg
ICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIG5leHQgPSBidWNrZXQtPm5leHQoKTsKLSAgICAgICAg
ICAgIC8vIFdlIHJlc3RhcnQgZWFjaCBpdGVyYXRvciBieSBwb2ludGluZyBpdCB0byB0aGUgaGVh
ZCBvZiB0aGUgbGlzdC4KLSAgICAgICAgICAgIGJ1Y2tldC0+c2V0TmV4dCh2bSwgaGVhZCk7Ci0g
ICAgICAgICAgICBidWNrZXQtPm1ha2VEZWxldGVkKHZtKTsKLSAgICAgICAgICAgIGJ1Y2tldCA9
IG5leHQ7Ci0gICAgICAgIH0KLSAgICAgICAgbV9oZWFkLT5zZXROZXh0KHZtLCBtX3RhaWwuZ2V0
KCkpOwotICAgICAgICBtX3RhaWwtPnNldFByZXYodm0sIG1faGVhZC5nZXQoKSk7Ci0gICAgICAg
IG1fY2FwYWNpdHkgPSA0OwotICAgICAgICBtYWtlQW5kU2V0TmV3QnVmZmVyKGdsb2JhbE9iamVj
dCwgdm0pOwotICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgfQorICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBjbGVhcihKU0dsb2JhbE9iamVjdCopOwogCiAgICAgQUxXQVlTX0lOTElORSBz
aXplX3QgYnVmZmVyU2l6ZUluQnl0ZXMoKSBjb25zdAogICAgIHsKQEAgLTYwMiwxNTggKzM2NSwy
NSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gSlNDOjpzaG91bGRTaHJpbmsobV9jYXBhY2l0
eSwgbV9rZXlDb3VudCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFVwSGVh
ZEFuZFRhaWwoSlNHbG9iYWxPYmplY3QqLCBWTSYgdm0pCi0gICAgewotICAgICAgICBtX2hlYWQu
c2V0KHZtLCB0aGlzLCBIYXNoTWFwQnVja2V0VHlwZTo6Y3JlYXRlKHZtKSk7Ci0gICAgICAgIG1f
dGFpbC5zZXQodm0sIHRoaXMsIEhhc2hNYXBCdWNrZXRUeXBlOjpjcmVhdGUodm0pKTsKLQotICAg
ICAgICBtX2hlYWQtPnNldE5leHQodm0sIG1fdGFpbC5nZXQoKSk7Ci0gICAgICAgIG1fdGFpbC0+
c2V0UHJldih2bSwgbV9oZWFkLmdldCgpKTsKLSAgICAgICAgQVNTRVJUKG1faGVhZC0+ZGVsZXRl
ZCgpKTsKLSAgICAgICAgQVNTRVJUKG1fdGFpbC0+ZGVsZXRlZCgpKTsKLSAgICB9CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHNldFVwSGVhZEFuZFRhaWwoSlNHbG9iYWxPYmplY3QqLCBWTSYpOwog
Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZE5vcm1hbGl6ZWROb25FeGlzdGluZ0ZvckNsb25p
bmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlKCkpCi0gICAgewotICAgICAgICBhZGROb3JtYWxpemVkSW50ZXJuYWwoZ2xv
YmFsT2JqZWN0LCBrZXksIHZhbHVlLCBbJl0gKEhhc2hNYXBCdWNrZXRUeXBlKikgewotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9KTsKLSAgICB9CisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIGFkZE5vcm1hbGl6ZWROb25FeGlzdGluZ0ZvckNsb25pbmcoSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSA9IEpTVmFsdWUoKSk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDYW5Vc2VCdWNrZXQ+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZE5vcm1hbGl6ZWRJ
bnRlcm5hbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1
ZSB2YWx1ZSwgY29uc3QgQ2FuVXNlQnVja2V0JiBjYW5Vc2VCdWNrZXQpCi0gICAgewotICAgICAg
ICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgdWludDMyX3QgaGFzaCA9IGpzTWFwSGFz
aChnbG9iYWxPYmplY3QsIHZtLCBrZXkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGFkZE5vcm1h
bGl6ZWRJbnRlcm5hbCh2bSwga2V5LCB2YWx1ZSwgaGFzaCwgY2FuVXNlQnVja2V0KTsKLSAgICB9
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZE5vcm1hbGl6ZWRJbnRlcm5hbChKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUga2V5LCBKU1ZhbHVlLCBjb25zdCBDYW5Vc2VCdWNrZXQmKTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENhblVzZUJ1Y2tldD4KLSAgICBBTFdBWVNfSU5MSU5FIEhhc2hN
YXBCdWNrZXRUeXBlKiBhZGROb3JtYWxpemVkSW50ZXJuYWwoVk0mIHZtLCBKU1ZhbHVlIGtleSwg
SlNWYWx1ZSB2YWx1ZSwgdWludDMyX3QgaGFzaCwgY29uc3QgQ2FuVXNlQnVja2V0JiBjYW5Vc2VC
dWNrZXQpCi0gICAgewotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG5vcm1hbGl6ZU1hcEtl
eShrZXkpID09IGtleSwgIldlIGV4cGVjdCBub3JtYWxpemVkIHZhbHVlcyBmbG93aW5nIGludG8g
dGhpcyBmdW5jdGlvbi4iKTsKLQotICAgICAgICBjb25zdCB1aW50MzJfdCBtYXNrID0gbV9jYXBh
Y2l0eSAtIDE7Ci0gICAgICAgIHVpbnQzMl90IGluZGV4ID0gaGFzaCAmIG1hc2s7Ci0gICAgICAg
IEhhc2hNYXBCdWNrZXRUeXBlKiogYnVmZmVyID0gdGhpcy0+YnVmZmVyKCk7Ci0gICAgICAgIEhh
c2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBidWZmZXJbaW5kZXhdOwotICAgICAgICB3aGlsZSAo
IWlzRW1wdHkoYnVja2V0KSkgewotICAgICAgICAgICAgaWYgKGNhblVzZUJ1Y2tldChidWNrZXQp
KSB7Ci0gICAgICAgICAgICAgICAgYnVja2V0LT5zZXRWYWx1ZSh2bSwgdmFsdWUpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBidWNrZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbmRl
eCA9IChpbmRleCArIDEpICYgbWFzazsKLSAgICAgICAgICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRl
eF07Ci0gICAgICAgIH0KLQotICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogbmV3RW50cnkgPSBt
X3RhaWwuZ2V0KCk7Ci0gICAgICAgIGJ1ZmZlcltpbmRleF0gPSBuZXdFbnRyeTsKLSAgICAgICAg
bmV3RW50cnktPnNldEtleSh2bSwga2V5KTsKLSAgICAgICAgbmV3RW50cnktPnNldFZhbHVlKHZt
LCB2YWx1ZSk7Ci0gICAgICAgIEFTU0VSVCghbmV3RW50cnktPmRlbGV0ZWQoKSk7Ci0gICAgICAg
IEhhc2hNYXBCdWNrZXRUeXBlKiBuZXdUYWlsID0gSGFzaE1hcEJ1Y2tldFR5cGU6OmNyZWF0ZSh2
bSk7Ci0gICAgICAgIG1fdGFpbC5zZXQodm0sIHRoaXMsIG5ld1RhaWwpOwotICAgICAgICBuZXdU
YWlsLT5zZXRQcmV2KHZtLCBuZXdFbnRyeSk7Ci0gICAgICAgIEFTU0VSVChuZXdUYWlsLT5kZWxl
dGVkKCkpOwotICAgICAgICBuZXdFbnRyeS0+c2V0TmV4dCh2bSwgbmV3VGFpbCk7Ci0KLSAgICAg
ICAgKyttX2tleUNvdW50OwotICAgICAgICByZXR1cm4gbmV3RW50cnk7Ci0gICAgfQotCi0gICAg
QUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSoqIGZpbmRCdWNrZXRBbHJlYWR5SGFzaGVk
QW5kTm9ybWFsaXplZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwg
dWludDMyX3QgaGFzaCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IG1hc2sgPSBtX2Nh
cGFjaXR5IC0gMTsKLSAgICAgICAgdWludDMyX3QgaW5kZXggPSBoYXNoICYgbWFzazsKLSAgICAg
ICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWZmZXIgPSB0aGlzLT5idWZmZXIoKTsKLSAgICAgICAg
SGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07Ci0KLSAgICAgICAgd2hp
bGUgKCFpc0VtcHR5KGJ1Y2tldCkpIHsKLSAgICAgICAgICAgIGlmICghaXNEZWxldGVkKGJ1Y2tl
dCkgJiYgYXJlS2V5c0VxdWFsKGdsb2JhbE9iamVjdCwga2V5LCBidWNrZXQtPmtleSgpKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyICsgaW5kZXg7Ci0gICAgICAgICAgICBpbmRleCA9
IChpbmRleCArIDEpICYgbWFzazsKLSAgICAgICAgICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIEFMV0FZU19J
TkxJTkUgSGFzaE1hcEJ1Y2tldFR5cGUqIGFkZE5vcm1hbGl6ZWRJbnRlcm5hbChWTSYsIEpTVmFs
dWUga2V5LCBKU1ZhbHVlLCB1aW50MzJfdCBoYXNoLCBjb25zdCBDYW5Vc2VCdWNrZXQmKTsKIAot
ICAgIHZvaWQgcmVoYXNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAg
ICAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwotICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgdWludDMyX3Qgb2xkQ2FwYWNpdHkg
PSBtX2NhcGFjaXR5OwotICAgICAgICBtX2NhcGFjaXR5ID0gbmV4dENhcGFjaXR5KG1fY2FwYWNp
dHksIG1fa2V5Q291bnQpOwotCi0gICAgICAgIGlmIChtX2NhcGFjaXR5ICE9IG9sZENhcGFjaXR5
KSB7Ci0gICAgICAgICAgICBtYWtlQW5kU2V0TmV3QnVmZmVyKGdsb2JhbE9iamVjdCwgdm0pOwot
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIG1fYnVmZmVyLT5yZXNldChtX2NhcGFjaXR5KTsKLSAgICAg
ICAgICAgIGFzc2VydEJ1ZmZlcklzRW1wdHkoKTsKLSAgICAgICAgfQorICAgIEFMV0FZU19JTkxJ
TkUgSGFzaE1hcEJ1Y2tldFR5cGUqKiBmaW5kQnVja2V0QWxyZWFkeUhhc2hlZEFuZE5vcm1hbGl6
ZWQoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGtleSwgdWludDMyX3QgaGFzaCk7CiAKLSAgICAg
ICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGl0ZXIgPSBtX2hlYWQtPm5leHQoKTsKLSAgICAgICAgSGFz
aE1hcEJ1Y2tldFR5cGUqIGVuZCA9IG1fdGFpbC5nZXQoKTsKLSAgICAgICAgY29uc3QgdWludDMy
X3QgbWFzayA9IG1fY2FwYWNpdHkgLSAxOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG1fY2Fw
YWNpdHkgJiAobV9jYXBhY2l0eSAtIDEpKSk7Ci0gICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiog
YnVmZmVyID0gdGhpcy0+YnVmZmVyKCk7Ci0gICAgICAgIHdoaWxlIChpdGVyICE9IGVuZCkgewot
ICAgICAgICAgICAgdWludDMyX3QgaW5kZXggPSBqc01hcEhhc2goZ2xvYmFsT2JqZWN0LCB2bSwg
aXRlci0+a2V5KCkpICYgbWFzazsKLSAgICAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlRfV0lUSF9N
RVNTQUdFKCFzY29wZS5leGNlcHRpb24oKSwgIkFsbCBrZXlzIHNob3VsZCBhbHJlYWR5IGJlIGhh
c2hlZCBiZWZvcmUsIHNvIHRoaXMgc2hvdWxkIG5vdCB0aHJvdyBiZWNhdXNlIGl0IHdvbid0IHJl
c29sdmUgcm9wZXMuIik7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSGFzaE1hcEJ1
Y2tldFR5cGUqIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07Ci0gICAgICAgICAgICAgICAgd2hpbGUg
KCFpc0VtcHR5KGJ1Y2tldCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSAoaW5kZXgg
KyAxKSAmIG1hc2s7Ci0gICAgICAgICAgICAgICAgICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnVmZmVyW2lu
ZGV4XSA9IGl0ZXI7Ci0gICAgICAgICAgICBpdGVyID0gaXRlci0+bmV4dCgpOwotICAgICAgICB9
CisgICAgdm9pZCByZWhhc2goSlNHbG9iYWxPYmplY3QqKTsKIAotICAgICAgICBtX2RlbGV0ZUNv
dW50ID0gMDsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0
OwogCi0gICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICB9CisgICAgdm9pZCBtYWtlQW5k
U2V0TmV3QnVmZmVyKEpTR2xvYmFsT2JqZWN0KiwgVk0mKTsKIAotICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChBU1NFUlRf
RU5BQkxFRCkgewotICAgICAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGl0ZXIgPSBtX2hlYWQt
Pm5leHQoKTsKLSAgICAgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBlbmQgPSBtX3RhaWwuZ2V0
KCk7Ci0gICAgICAgICAgICB1aW50MzJfdCBzaXplID0gMDsKLSAgICAgICAgICAgIHdoaWxlIChp
dGVyICE9IGVuZCkgewotICAgICAgICAgICAgICAgICsrc2l6ZTsKLSAgICAgICAgICAgICAgICBp
dGVyID0gaXRlci0+bmV4dCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKHNp
emUgPT0gbV9rZXlDb3VudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIG1ha2VBbmRT
ZXROZXdCdWZmZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKCEobV9jYXBhY2l0eSAmIChtX2NhcGFjaXR5IC0gMSkpKTsKLQotICAg
ICAgICBIYXNoTWFwQnVmZmVyVHlwZSogYnVmZmVyID0gSGFzaE1hcEJ1ZmZlclR5cGU6OmNyZWF0
ZShnbG9iYWxPYmplY3QsIHZtLCB0aGlzLCBtX2NhcGFjaXR5KTsKLSAgICAgICAgaWYgKFVOTElL
RUxZKCFidWZmZXIpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fYnVmZmVyLnNl
dCh2bSwgdGhpcywgYnVmZmVyKTsKLSAgICAgICAgYXNzZXJ0QnVmZmVySXNFbXB0eSgpOwotICAg
IH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhc3NlcnRCdWZmZXJJc0VtcHR5KCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FwYWNpdHk7IGkrKykKLSAgICAgICAgICAgICAgICBBU1NF
UlQoaXNFbXB0eShidWZmZXIoKVtpXSkpOwotICAgICAgICB9Ci0gICAgfQorICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBhc3NlcnRCdWZmZXJJc0VtcHR5KCkgY29uc3Q7CiAKICAgICBXcml0ZUJhcnJp
ZXI8SGFzaE1hcEJ1Y2tldFR5cGU+IG1faGVhZDsKICAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1
Y2tldFR5cGU+IG1fdGFpbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hh
c2hNYXBJbXBsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0hhc2hNYXBJbXBsSW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJIYXNoTWFwSW1wbC5oIgorI2luY2x1ZGUg
IkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitBTFdBWVNfSU5MSU5F
IHN0YXRpYyBib29sIGFyZUtleXNFcXVhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIGEsIEpTVmFsdWUgYikKK3sKKyAgICAvLyBXZSB3YW50ICswIGFuZCAtMCB0byBiZSBj
b21wYXJlZCB0byB0cnVlIGhlcmUuIHNhbWVWYWx1ZSgpIGl0c2VsZiBkb2Vzbid0CisgICAgLy8g
Z3VhcmFudGVlIHRoYXQsIGhvd2V2ZXIsIHdlIG5vcm1hbGl6ZSBhbGwga2V5cyBiZWZvcmUgY29t
cGFyaW5nIGFuZCBzdG9yaW5nCisgICAgLy8gdGhlbSBpbiB0aGUgbWFwLiBUaGUgbm9ybWFsaXph
dGlvbiB3aWxsIGNvbnZlcnQgLTAuMCBhbmQgMC4wIHRvIHRoZSBpbnRlZ2VyCisgICAgLy8gcmVw
cmVzZW50YXRpb24gZm9yIDAuCisgICAgcmV0dXJuIHNhbWVWYWx1ZShnbG9iYWxPYmplY3QsIGEs
IGIpOworfQorCisvLyBOb3RlIHRoYXQgbm9ybWFsaXphdGlvbiBpcyBpbmxpbmVkIGluIERGRydz
IE5vcm1hbGl6ZU1hcEtleS4KKy8vIEtlZXAgaW4gc3luYyB3aXRoIHRoZSBpbXBsZW1lbnRhdGlv
biBvZiBERkcgYW5kIEZUTCBub3JtYWxpemF0aW9uLgorQUxXQVlTX0lOTElORSBKU1ZhbHVlIG5v
cm1hbGl6ZU1hcEtleShKU1ZhbHVlIGtleSkKK3sKKyAgICBpZiAoIWtleS5pc051bWJlcigpKSB7
CisgICAgICAgIGlmIChrZXkuaXNIZWFwQmlnSW50KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ5
Q29udmVydFRvQmlnSW50MzIoa2V5LmFzSGVhcEJpZ0ludCgpKTsKKyAgICAgICAgcmV0dXJuIGtl
eTsKKyAgICB9CisKKyAgICBpZiAoa2V5LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIGtleTsK
KworICAgIGRvdWJsZSBkID0ga2V5LmFzRG91YmxlKCk7CisgICAgaWYgKHN0ZDo6aXNuYW4oZCkp
CisgICAgICAgIHJldHVybiBqc05hTigpOworCisgICAgaW50IGkgPSBzdGF0aWNfY2FzdDxpbnQ+
KGQpOworICAgIGlmIChpID09IGQpIHsKKyAgICAgICAgLy8gV2hlbiBhIGtleSBpcyAtMCwgd2Ug
Y29udmVydCBpdCB0byBwb3NpdGl2ZSB6ZXJvLgorICAgICAgICAvLyBXaGVuIGEga2V5IGlzIHRo
ZSBkb3VibGUgcmVwcmVzZW50YXRpb24gZm9yIGFuIGludGVnZXIsIHdlIGNvbnZlcnQgaXQgdG8g
YW4gaW50ZWdlci4KKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGkpOworICAgIH0KKyAgICAvLyBU
aGlzIG1lYW5zIGtleSBpcyBkZWZpbml0ZWx5IG5vdCBuZWdhdGl2ZSB6ZXJvLCBhbmQgaXQncyBk
ZWZpbml0ZWx5IG5vdCBhIGRvdWJsZSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLgorICAg
IHJldHVybiBrZXk7Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IHdhbmdzSW50
NjRIYXNoKHVpbnQ2NF90IGtleSkKK3sKKyAgICBrZXkgKz0gfihrZXkgPDwgMzIpOworICAgIGtl
eSBePSAoa2V5ID4+IDIyKTsKKyAgICBrZXkgKz0gfihrZXkgPDwgMTMpOworICAgIGtleSBePSAo
a2V5ID4+IDgpOworICAgIGtleSArPSAoa2V5IDw8IDMpOworICAgIGtleSBePSAoa2V5ID4+IDE1
KTsKKyAgICBrZXkgKz0gfihrZXkgPDwgMjcpOworICAgIGtleSBePSAoa2V5ID4+IDMxKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleSk7Cit9CisKK0FMV0FZU19JTkxJTkUg
dWludDMyX3QganNNYXBIYXNoKEpTQmlnSW50KiBiaWdJbnQpCit7CisgICAgcmV0dXJuIGJpZ0lu
dC0+aGFzaCgpOworfQorCitBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGpzTWFwSGFzaChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCit7CisgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShub3JtYWxpemVNYXBLZXkodmFsdWUpID09IHZhbHVlLCAiV2UgZXhw
ZWN0IG5vcm1hbGl6ZWQgdmFsdWVzIGZsb3dpbmcgaW50byB0aGlzIGZ1bmN0aW9uLiIpOworCisg
ICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgICAgICBjb25zdCBTdHJpbmcmIHd0ZlN0cmluZyA9IGFzU3Ry
aW5nKHZhbHVlKS0+dmFsdWUoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgVUlOVF9NQVgpOworICAgICAgICByZXR1cm4gd3RmU3RyaW5nLmltcGwoKS0+
aGFzaCgpOworICAgIH0KKworICAgIGlmICh2YWx1ZS5pc0hlYXBCaWdJbnQoKSkKKyAgICAgICAg
cmV0dXJuIGpzTWFwSGFzaCh2YWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisKKyAgICByZXR1cm4gd2Fu
Z3NJbnQ2NEhhc2goSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSk7Cit9CisKK0FMV0FZU19JTkxJTkUg
T3B0aW9uYWw8dWludDMyX3Q+IGNvbmN1cnJlbnRKU01hcEhhc2goSlNWYWx1ZSBrZXkpCit7Cisg
ICAga2V5ID0gbm9ybWFsaXplTWFwS2V5KGtleSk7CisgICAgaWYgKGtleS5pc1N0cmluZygpKSB7
CisgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhrZXkpOworICAgICAgICBpZiAo
c3RyaW5nLT5sZW5ndGgoKSA+IDEwICogMTAyNCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgIGNvbnN0IFN0cmluZ0ltcGwqIGltcGwgPSBzdHJpbmctPnRyeUdldFZh
bHVlSW1wbCgpOworICAgICAgICBpZiAoIWltcGwpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgICAgICByZXR1cm4gaW1wbC0+Y29uY3VycmVudEhhc2goKTsKKyAgICB9CisK
KyAgICBpZiAoa2V5LmlzSGVhcEJpZ0ludCgpKQorICAgICAgICByZXR1cm4ga2V5LmFzSGVhcEJp
Z0ludCgpLT5jb25jdXJyZW50SGFzaCgpOworCisgICAgdWludDY0X3QgcmF3VmFsdWUgPSBKU1Zh
bHVlOjplbmNvZGUoa2V5KTsKKyAgICByZXR1cm4gd2FuZ3NJbnQ2NEhhc2gocmF3VmFsdWUpOwor
fQorCitBTFdBWVNfSU5MSU5FIHVpbnQzMl90IHNob3VsZFNocmluayh1aW50MzJfdCBjYXBhY2l0
eSwgdWludDMyX3Qga2V5Q291bnQpCit7CisgICAgcmV0dXJuIDggKiBrZXlDb3VudCA8PSBjYXBh
Y2l0eSAmJiBjYXBhY2l0eSA+IDQ7Cit9CisKK0FMV0FZU19JTkxJTkUgdWludDMyX3Qgc2hvdWxk
UmVoYXNoQWZ0ZXJBZGQodWludDMyX3QgY2FwYWNpdHksIHVpbnQzMl90IGtleUNvdW50LCB1aW50
MzJfdCBkZWxldGVDb3VudCkKK3sKKyAgICByZXR1cm4gMiAqIChrZXlDb3VudCArIGRlbGV0ZUNv
dW50KSA+PSBjYXBhY2l0eTsKK30KKworQUxXQVlTX0lOTElORSB1aW50MzJfdCBuZXh0Q2FwYWNp
dHkodWludDMyX3QgY2FwYWNpdHksIHVpbnQzMl90IGtleUNvdW50KQoreworICAgIGlmIChzaG91
bGRTaHJpbmsoY2FwYWNpdHksIGtleUNvdW50KSkgeworICAgICAgICBBU1NFUlQoKGNhcGFjaXR5
IC8gMikgPj0gNCk7CisgICAgICAgIHJldHVybiBjYXBhY2l0eSAvIDI7CisgICAgfQorCisgICAg
aWYgKDMgKiBrZXlDb3VudCA8PSBjYXBhY2l0eSAmJiBjYXBhY2l0eSA+IDY0KSB7CisgICAgICAg
IC8vIFdlIHN0YXkgYXQgdGhlIHNhbWUgc2l6ZSBpZiByZWhhc2hpbmcgd291bGQgY2F1c2UgdXMg
dG8gYmUgbm8gbW9yZSB0aGFuCisgICAgICAgIC8vIDEvM3JkIGZ1bGwuIFRoaXMgY29tZXMgdXAg
Zm9yIHByb2dyYW1zIGxpa2UgdGhpczoKKyAgICAgICAgLy8gU2F5IHRoZSBoYXNoIHRhYmxlIGdy
ZXcgdG8gYSBrZXkgY291bnQgb2YgNjQsIGNhdXNpbmcgaXQgdG8gZ3JvdyB0byBhIGNhcGFjaXR5
IG9mIDI1Ni4KKyAgICAgICAgLy8gVGhlbiwgdGhlIHRhYmxlIGFkZGVkIDYzIGl0ZW1zLiBUaGUg
bG9hZCBpcyBub3cgMTI3LiBUaGVuLCA2MyBpdGVtcyBhcmUgZGVsZXRlZC4KKyAgICAgICAgLy8g
VGhlIGxvYWQgaXMgc3RpbGwgMTI3LiBUaGVuLCBhbm90aGVyIGl0ZW0gaXMgYWRkZWQuIFRoZSBs
b2FkIGlzIG5vdyAxMjgsIGFuZCB3ZQorICAgICAgICAvLyBkZWNpZGUgdGhhdCB3ZSBuZWVkIHRv
IHJlaGFzaC4gVGhlIGtleSBjb3VudCBpcyA2NSwgYWxtb3N0IGV4YWN0bHkgd2hhdCBpdCB3YXMK
KyAgICAgICAgLy8gd2hlbiB3ZSBncmV3IHRvIGEgY2FwYWNpdHkgb2YgMjU2LiBXZSBkb24ndCBy
ZWFsbHkgbmVlZCB0byBncm93IHRvIGEgY2FwYWNpdHkKKyAgICAgICAgLy8gb2YgNTEyIGluIHRo
aXMgc2l0dWF0aW9uLiBJbnN0ZWFkLCB3ZSBjaG9vc2UgdG8gcmVoYXNoIGF0IHRoZSBzYW1lIHNp
emUuIFRoaXMKKyAgICAgICAgLy8gd2lsbCBicmluZyB0aGUgbG9hZCBkb3duIHRvIDY1LiBXZSBy
ZWhhc2ggaW50byB0aGUgc2FtZSBzaXplIHdoZW4gd2UgZGV0ZXJtaW5lCisgICAgICAgIC8vIHRo
YXQgdGhlIG5ldyBsb2FkIHJhdGlvIHdpbGwgYmUgdW5kZXIgMS8zcmQuIChXZSBhbHNvIHBpY2sg
YSBtaW51bXVtIGNhcGFjaXR5CisgICAgICAgIC8vIGF0IHdoaWNoIHRoaXMgcnVsZSBraWNrcyBp
biBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3aWxsIGJlIHRvbyBzZW5zaXRpdmUgdG8gcmVoYXNoaW5n
CisgICAgICAgIC8vIGF0IHRoZSBzYW1lIGNhcGFjaXR5KS4KKyAgICAgICAgcmV0dXJuIGNhcGFj
aXR5OworICAgIH0KKyAgICByZXR1cm4gKENoZWNrZWQ8dWludDMyX3Q+KGNhcGFjaXR5KSAqIDIp
LnVuc2FmZUdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldFR5cGU+
Cit2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBlPjo6ZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtKQoreworICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UoSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46Om9mZnNldE9mS2V5KCkg
PT0gSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6b2Zmc2V0T2ZLZXko
KSwgIldlIGFzc3VtZSB0aGlzIHRvIGJlIHRydWUgaW4gdGhlIERGRyBhbmQgRlRMIEpJVC4iKTsK
KworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CisKKyAgICBtYWtlQW5kU2V0TmV3QnVmZmVyKGdsb2JhbE9iamVj
dCwgdm0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICBz
ZXRVcEhlYWRBbmRUYWlsKGdsb2JhbE9iamVjdCwgdm0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgSGFzaE1hcEJ1Y2tldFR5cGU+Cit2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBl
Pjo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBI
YXNoTWFwSW1wbCogYmFzZSkKK3sKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgLy8gVGhpcyBzaXpl
IHNob3VsZCBiZSB0aGUgc2FtZSB0byB0aGUgY2FzZSB3aGVuIHlvdSBjbG9uZSB0aGUgbWFwIGJ5
IGNhbGxpbmcgYWRkKCkgcmVwZWF0ZWRseS4KKyAgICB1aW50MzJfdCBjYXBhY2l0eSA9ICgoQ2hl
Y2tlZDx1aW50MzJfdD4oYmFzZS0+bV9rZXlDb3VudCkgKiAyKSArIDEpLnVuc2FmZUdldCgpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKGNhcGFjaXR5IDw9ICgxVSA8PCAzMSkpOworICAgIGNhcGFjaXR5
ID0gc3RkOjptYXg8dWludDMyX3Q+KFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhjYXBhY2l0eSks
IDRVKTsKKyAgICBtX2NhcGFjaXR5ID0gY2FwYWNpdHk7CisgICAgbWFrZUFuZFNldE5ld0J1ZmZl
cihnbG9iYWxPYmplY3QsIHZtKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOworCisgICAgc2V0VXBIZWFkQW5kVGFpbChnbG9iYWxPYmplY3QsIHZtKTsKKworICAgIEhh
c2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBiYXNlLT5tX2hlYWQuZ2V0KCktPm5leHQoKTsKKyAg
ICB3aGlsZSAoYnVja2V0KSB7CisgICAgICAgIGlmICghYnVja2V0LT5kZWxldGVkKCkpIHsKKyAg
ICAgICAgICAgIGFkZE5vcm1hbGl6ZWROb25FeGlzdGluZ0ZvckNsb25pbmcoZ2xvYmFsT2JqZWN0
LCBidWNrZXQtPmtleSgpLCBIYXNoTWFwQnVja2V0VHlwZTo6ZXh0cmFjdFZhbHVlKCpidWNrZXQp
KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgYnVja2V0ID0gYnVja2V0LT5uZXh0KCk7CisgICAgfQorICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXRUeXBl
PgorQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSoqIEhhc2hNYXBJbXBsPEhhc2hNYXBC
dWNrZXRUeXBlPjo6ZmluZEJ1Y2tldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIGtleSkKK3sKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBrZXkgPSBub3JtYWxpemVNYXBL
ZXkoa2V5KTsKKyAgICB1aW50MzJfdCBoYXNoID0ganNNYXBIYXNoKGdsb2JhbE9iamVjdCwgdm0s
IGtleSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgcmV0
dXJuIGZpbmRCdWNrZXQoZ2xvYmFsT2JqZWN0LCBrZXksIGhhc2gpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldFR5cGU+CitBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXRU
eXBlKiogSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldFR5cGU+OjpmaW5kQnVja2V0KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCB1aW50MzJfdCBoYXNoKQoreworICAg
IEFTU0VSVF9XSVRIX01FU1NBR0Uobm9ybWFsaXplTWFwS2V5KGtleSkgPT0ga2V5LCAiV2UgZXhw
ZWN0IG5vcm1hbGl6ZWQgdmFsdWVzIGZsb3dpbmcgaW50byB0aGlzIGZ1bmN0aW9uLiIpOworICAg
IHJldHVybiBmaW5kQnVja2V0QWxyZWFkeUhhc2hlZEFuZE5vcm1hbGl6ZWQoZ2xvYmFsT2JqZWN0
LCBrZXksIGhhc2gpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldFR5cGU+
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlW
YWx1ZT4+Ojp2YWx1ZSwgSlNWYWx1ZT46OnR5cGUgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldFR5
cGU+OjpnZXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXkpCit7Cisg
ICAgaWYgKEhhc2hNYXBCdWNrZXRUeXBlKiogYnVja2V0ID0gZmluZEJ1Y2tldChnbG9iYWxPYmpl
Y3QsIGtleSkpCisgICAgICAgIHJldHVybiAoKmJ1Y2tldCktPnZhbHVlKCk7CisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0VHlw
ZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0VHlwZT46Omhh
cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSkKK3sKKyAgICByZXR1
cm4gISFmaW5kQnVja2V0KGdsb2JhbE9iamVjdCwga2V5KTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIEhhc2hNYXBCdWNrZXRUeXBlPgorQUxXQVlTX0lOTElORSB2b2lkIEhhc2hNYXBJbXBsPEhh
c2hNYXBCdWNrZXRUeXBlPjo6YWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUga2V5LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVj
dCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAga2V5
ID0gbm9ybWFsaXplTWFwS2V5KGtleSk7CisgICAgYWRkTm9ybWFsaXplZEludGVybmFsKGdsb2Jh
bE9iamVjdCwga2V5LCB2YWx1ZSwgWyZdIChIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0KSB7Cisg
ICAgICAgIHJldHVybiAhaXNEZWxldGVkKGJ1Y2tldCkgJiYgYXJlS2V5c0VxdWFsKGdsb2JhbE9i
amVjdCwga2V5LCBidWNrZXQtPmtleSgpKTsKKyAgICB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOworICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICBpZiAoc2hvdWxk
UmVoYXNoQWZ0ZXJBZGQoKSkKKyAgICAgICAgcmVoYXNoKGdsb2JhbE9iamVjdCk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0VHlwZT4KK0FMV0FZU19JTkxJTkUgSGFzaE1h
cEJ1Y2tldFR5cGUqIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBlPjo6YWRkTm9ybWFsaXpl
ZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1
ZSwgdWludDMyX3QgaGFzaCkKK3sKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwor
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uobm9ybWFsaXplTWFwS2V5KGtleSkgPT0ga2V5LCAiV2Ug
ZXhwZWN0IG5vcm1hbGl6ZWQgdmFsdWVzIGZsb3dpbmcgaW50byB0aGlzIGZ1bmN0aW9uLiIpOwor
ICAgIERFRkVSX1RFUk1JTkFUSU9OX0FORF9BU1NFUlRfV0lUSF9NRVNTQUdFKHZtLCBqc01hcEhh
c2goZ2xvYmFsT2JqZWN0LCBnZXRWTShnbG9iYWxPYmplY3QpLCBrZXkpID09IGhhc2gsICJXZSBl
eHBlY3QgaGFzaCB2YWx1ZSBpcyB3aGF0IHdlIGV4cGVjdC4iKTsKKworICAgIGF1dG8qIGJ1Y2tl
dCA9IGFkZE5vcm1hbGl6ZWRJbnRlcm5hbCh2bSwga2V5LCB2YWx1ZSwgaGFzaCwgWyZdIChIYXNo
TWFwQnVja2V0VHlwZSogYnVja2V0KSB7CisgICAgICAgIHJldHVybiAhaXNEZWxldGVkKGJ1Y2tl
dCkgJiYgYXJlS2V5c0VxdWFsKGdsb2JhbE9iamVjdCwga2V5LCBidWNrZXQtPmtleSgpKTsKKyAg
ICB9KTsKKyAgICBpZiAoc2hvdWxkUmVoYXNoQWZ0ZXJBZGQoKSkKKyAgICAgICAgcmVoYXNoKGds
b2JhbE9iamVjdCk7CisgICAgcmV0dXJuIGJ1Y2tldDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEhhc2hNYXBCdWNrZXRUeXBlPgorQUxXQVlTX0lOTElORSBib29sIEhhc2hNYXBJbXBsPEhhc2hN
YXBCdWNrZXRUeXBlPjo6cmVtb3ZlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUga2V5KQoreworICAgIEhhc2hNYXBCdWNrZXRUeXBlKiogYnVja2V0ID0gZmluZEJ1Y2tldChn
bG9iYWxPYmplY3QsIGtleSk7CisgICAgaWYgKCFidWNrZXQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CisgICAgSGFzaE1hcEJ1Y2tl
dFR5cGUqIGltcGwgPSAqYnVja2V0OworICAgIGltcGwtPm5leHQoKS0+c2V0UHJldih2bSwgaW1w
bC0+cHJldigpKTsKKyAgICBpbXBsLT5wcmV2KCktPnNldE5leHQodm0sIGltcGwtPm5leHQoKSk7
CisgICAgaW1wbC0+bWFrZURlbGV0ZWQodm0pOworCisgICAgKmJ1Y2tldCA9IGRlbGV0ZWRWYWx1
ZSgpOworCisgICAgKyttX2RlbGV0ZUNvdW50OworICAgIEFTU0VSVChtX2tleUNvdW50ID4gMCk7
CisgICAgLS1tX2tleUNvdW50OworCisgICAgaWYgKHNob3VsZFNocmluaygpKQorICAgICAgICBy
ZWhhc2goZ2xvYmFsT2JqZWN0KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldFR5cGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSGFzaE1hcElt
cGw8SGFzaE1hcEJ1Y2tldFR5cGU+OjpjbGVhcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQoreworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CisgICAgbV9rZXlDb3VudCA9
IDA7CisgICAgbV9kZWxldGVDb3VudCA9IDA7CisgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGhlYWQg
PSBtX2hlYWQuZ2V0KCk7CisgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IG1faGVhZC0+
bmV4dCgpOworICAgIEhhc2hNYXBCdWNrZXRUeXBlKiB0YWlsID0gbV90YWlsLmdldCgpOworICAg
IHdoaWxlIChidWNrZXQgIT0gdGFpbCkgeworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogbmV4
dCA9IGJ1Y2tldC0+bmV4dCgpOworICAgICAgICAvLyBXZSByZXN0YXJ0IGVhY2ggaXRlcmF0b3Ig
YnkgcG9pbnRpbmcgaXQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuCisgICAgICAgIGJ1Y2tldC0+
c2V0TmV4dCh2bSwgaGVhZCk7CisgICAgICAgIGJ1Y2tldC0+bWFrZURlbGV0ZWQodm0pOworICAg
ICAgICBidWNrZXQgPSBuZXh0OworICAgIH0KKyAgICBtX2hlYWQtPnNldE5leHQodm0sIG1fdGFp
bC5nZXQoKSk7CisgICAgbV90YWlsLT5zZXRQcmV2KHZtLCBtX2hlYWQuZ2V0KCkpOworICAgIG1f
Y2FwYWNpdHkgPSA0OworICAgIG1ha2VBbmRTZXROZXdCdWZmZXIoZ2xvYmFsT2JqZWN0LCB2bSk7
CisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1h
cEJ1Y2tldFR5cGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tl
dFR5cGU+OjpzZXRVcEhlYWRBbmRUYWlsKEpTR2xvYmFsT2JqZWN0KiwgVk0mIHZtKQoreworICAg
IG1faGVhZC5zZXQodm0sIHRoaXMsIEhhc2hNYXBCdWNrZXRUeXBlOjpjcmVhdGUodm0pKTsKKyAg
ICBtX3RhaWwuc2V0KHZtLCB0aGlzLCBIYXNoTWFwQnVja2V0VHlwZTo6Y3JlYXRlKHZtKSk7CisK
KyAgICBtX2hlYWQtPnNldE5leHQodm0sIG1fdGFpbC5nZXQoKSk7CisgICAgbV90YWlsLT5zZXRQ
cmV2KHZtLCBtX2hlYWQuZ2V0KCkpOworICAgIEFTU0VSVChtX2hlYWQtPmRlbGV0ZWQoKSk7Cisg
ICAgQVNTRVJUKG1fdGFpbC0+ZGVsZXRlZCgpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEhh
c2hNYXBCdWNrZXRUeXBlPgorQUxXQVlTX0lOTElORSB2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBC
dWNrZXRUeXBlPjo6YWRkTm9ybWFsaXplZE5vbkV4aXN0aW5nRm9yQ2xvbmluZyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBh
ZGROb3JtYWxpemVkSW50ZXJuYWwoZ2xvYmFsT2JqZWN0LCBrZXksIHZhbHVlLCBbJl0gKEhhc2hN
YXBCdWNrZXRUeXBlKikgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0VHlwZT4KK3RlbXBsYXRlPHR5cGVuYW1lIENh
blVzZUJ1Y2tldD4KK0FMV0FZU19JTkxJTkUgdm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0
VHlwZT46OmFkZE5vcm1hbGl6ZWRJbnRlcm5hbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgQ2FuVXNlQnVja2V0JiBjYW5Vc2VC
dWNrZXQpCit7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICB1aW50MzJfdCBoYXNoID0ganNN
YXBIYXNoKGdsb2JhbE9iamVjdCwgdm0sIGtleSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKKyAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgYWRkTm9ybWFsaXplZElu
dGVybmFsKHZtLCBrZXksIHZhbHVlLCBoYXNoLCBjYW5Vc2VCdWNrZXQpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldFR5cGU+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDYW5Vc2VC
dWNrZXQ+CitBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXRUeXBlKiBIYXNoTWFwSW1wbDxIYXNo
TWFwQnVja2V0VHlwZT46OmFkZE5vcm1hbGl6ZWRJbnRlcm5hbChWTSYgdm0sIEpTVmFsdWUga2V5
LCBKU1ZhbHVlIHZhbHVlLCB1aW50MzJfdCBoYXNoLCBjb25zdCBDYW5Vc2VCdWNrZXQmIGNhblVz
ZUJ1Y2tldCkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG5vcm1hbGl6ZU1hcEtleShrZXkp
ID09IGtleSwgIldlIGV4cGVjdCBub3JtYWxpemVkIHZhbHVlcyBmbG93aW5nIGludG8gdGhpcyBm
dW5jdGlvbi4iKTsKKworICAgIGNvbnN0IHVpbnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5IC0gMTsK
KyAgICB1aW50MzJfdCBpbmRleCA9IGhhc2ggJiBtYXNrOworICAgIEhhc2hNYXBCdWNrZXRUeXBl
KiogYnVmZmVyID0gdGhpcy0+YnVmZmVyKCk7CisgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tl
dCA9IGJ1ZmZlcltpbmRleF07CisgICAgd2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkpIHsKKyAgICAg
ICAgaWYgKGNhblVzZUJ1Y2tldChidWNrZXQpKSB7CisgICAgICAgICAgICBidWNrZXQtPnNldFZh
bHVlKHZtLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gYnVja2V0OworICAgICAgICB9Cisg
ICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICBidWNrZXQgPSBidWZm
ZXJbaW5kZXhdOworICAgIH0KKworICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBuZXdFbnRyeSA9IG1f
dGFpbC5nZXQoKTsKKyAgICBidWZmZXJbaW5kZXhdID0gbmV3RW50cnk7CisgICAgbmV3RW50cnkt
PnNldEtleSh2bSwga2V5KTsKKyAgICBuZXdFbnRyeS0+c2V0VmFsdWUodm0sIHZhbHVlKTsKKyAg
ICBBU1NFUlQoIW5ld0VudHJ5LT5kZWxldGVkKCkpOworICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBu
ZXdUYWlsID0gSGFzaE1hcEJ1Y2tldFR5cGU6OmNyZWF0ZSh2bSk7CisgICAgbV90YWlsLnNldCh2
bSwgdGhpcywgbmV3VGFpbCk7CisgICAgbmV3VGFpbC0+c2V0UHJldih2bSwgbmV3RW50cnkpOwor
ICAgIEFTU0VSVChuZXdUYWlsLT5kZWxldGVkKCkpOworICAgIG5ld0VudHJ5LT5zZXROZXh0KHZt
LCBuZXdUYWlsKTsKKworICAgICsrbV9rZXlDb3VudDsKKyAgICByZXR1cm4gbmV3RW50cnk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0VHlwZT4KK0FMV0FZU19JTkxJTkUg
SGFzaE1hcEJ1Y2tldFR5cGUqKiBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0VHlwZT46OmZpbmRC
dWNrZXRBbHJlYWR5SGFzaGVkQW5kTm9ybWFsaXplZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIGtleSwgdWludDMyX3QgaGFzaCkKK3sKKyAgICBjb25zdCB1aW50MzJfdCBt
YXNrID0gbV9jYXBhY2l0eSAtIDE7CisgICAgdWludDMyX3QgaW5kZXggPSBoYXNoICYgbWFzazsK
KyAgICBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlciA9IHRoaXMtPmJ1ZmZlcigpOworICAgIEhh
c2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworCisgICAgd2hpbGUgKCFp
c0VtcHR5KGJ1Y2tldCkpIHsKKyAgICAgICAgaWYgKCFpc0RlbGV0ZWQoYnVja2V0KSAmJiBhcmVL
ZXlzRXF1YWwoZ2xvYmFsT2JqZWN0LCBrZXksIGJ1Y2tldC0+a2V5KCkpKQorICAgICAgICAgICAg
cmV0dXJuIGJ1ZmZlciArIGluZGV4OworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFz
azsKKyAgICAgICAgYnVja2V0ID0gYnVmZmVyW2luZGV4XTsKKyAgICB9CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0VHlwZT4KK3ZvaWQg
SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldFR5cGU+OjpyZWhhc2goSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKK3sKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHVpbnQzMl90IG9sZENh
cGFjaXR5ID0gbV9jYXBhY2l0eTsKKyAgICBtX2NhcGFjaXR5ID0gbmV4dENhcGFjaXR5KG1fY2Fw
YWNpdHksIG1fa2V5Q291bnQpOworCisgICAgaWYgKG1fY2FwYWNpdHkgIT0gb2xkQ2FwYWNpdHkp
IHsKKyAgICAgICAgbWFrZUFuZFNldE5ld0J1ZmZlcihnbG9iYWxPYmplY3QsIHZtKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBtX2J1ZmZlci0+cmVzZXQobV9jYXBhY2l0eSk7CisgICAgICAgIGFzc2VydEJ1ZmZlcklz
RW1wdHkoKTsKKyAgICB9CisKKyAgICBIYXNoTWFwQnVja2V0VHlwZSogaXRlciA9IG1faGVhZC0+
bmV4dCgpOworICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBlbmQgPSBtX3RhaWwuZ2V0KCk7CisgICAg
Y29uc3QgdWludDMyX3QgbWFzayA9IG1fY2FwYWNpdHkgLSAxOworICAgIFJFTEVBU0VfQVNTRVJU
KCEobV9jYXBhY2l0eSAmIChtX2NhcGFjaXR5IC0gMSkpKTsKKyAgICBIYXNoTWFwQnVja2V0VHlw
ZSoqIGJ1ZmZlciA9IHRoaXMtPmJ1ZmZlcigpOworICAgIHdoaWxlIChpdGVyICE9IGVuZCkgewor
ICAgICAgICB1aW50MzJfdCBpbmRleCA9IGpzTWFwSGFzaChnbG9iYWxPYmplY3QsIHZtLCBpdGVy
LT5rZXkoKSkgJiBtYXNrOworICAgICAgICBFWENFUFRJT05fQVNTRVJUX1dJVEhfTUVTU0FHRSgh
c2NvcGUuZXhjZXB0aW9uKCksICJBbGwga2V5cyBzaG91bGQgYWxyZWFkeSBiZSBoYXNoZWQgYmVm
b3JlLCBzbyB0aGlzIHNob3VsZCBub3QgdGhyb3cgYmVjYXVzZSBpdCB3b24ndCByZXNvbHZlIHJv
cGVzLiIpOworICAgICAgICB7CisgICAgICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0
ID0gYnVmZmVyW2luZGV4XTsKKyAgICAgICAgICAgIHdoaWxlICghaXNFbXB0eShidWNrZXQpKSB7
CisgICAgICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAg
ICAgICAgYnVja2V0ID0gYnVmZmVyW2luZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBidWZmZXJbaW5kZXhdID0gaXRlcjsKKyAgICAgICAgaXRlciA9IGl0ZXItPm5leHQo
KTsKKyAgICB9CisKKyAgICBtX2RlbGV0ZUNvdW50ID0gMDsKKworICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXRUeXBlPgorQUxXQVlT
X0lOTElORSB2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBlPjo6Y2hlY2tDb25zaXN0
ZW5jeSgpIGNvbnN0Cit7CisgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7CisgICAgICAgIEhhc2hN
YXBCdWNrZXRUeXBlKiBpdGVyID0gbV9oZWFkLT5uZXh0KCk7CisgICAgICAgIEhhc2hNYXBCdWNr
ZXRUeXBlKiBlbmQgPSBtX3RhaWwuZ2V0KCk7CisgICAgICAgIHVpbnQzMl90IHNpemUgPSAwOwor
ICAgICAgICB3aGlsZSAoaXRlciAhPSBlbmQpIHsKKyAgICAgICAgICAgICsrc2l6ZTsKKyAgICAg
ICAgICAgIGl0ZXIgPSBpdGVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHNp
emUgPT0gbV9rZXlDb3VudCk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1h
cEJ1Y2tldFR5cGU+Cit2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBlPjo6bWFrZUFu
ZFNldE5ld0J1ZmZlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0pCit7Cisg
ICAgQVNTRVJUKCEobV9jYXBhY2l0eSAmIChtX2NhcGFjaXR5IC0gMSkpKTsKKworICAgIEhhc2hN
YXBCdWZmZXJUeXBlKiBidWZmZXIgPSBIYXNoTWFwQnVmZmVyVHlwZTo6Y3JlYXRlKGdsb2JhbE9i
amVjdCwgdm0sIHRoaXMsIG1fY2FwYWNpdHkpOworICAgIGlmIChVTkxJS0VMWSghYnVmZmVyKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9idWZmZXIuc2V0KHZtLCB0aGlzLCBidWZmZXIpOwor
ICAgIGFzc2VydEJ1ZmZlcklzRW1wdHkoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hN
YXBCdWNrZXRUeXBlPgorQUxXQVlTX0lOTElORSB2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNr
ZXRUeXBlPjo6YXNzZXJ0QnVmZmVySXNFbXB0eSgpIGNvbnN0Cit7CisgICAgaWYgKEFTU0VSVF9F
TkFCTEVEKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhcGFjaXR5OyBp
KyspCisgICAgICAgICAgICBBU1NFUlQoaXNFbXB0eShidWZmZXIoKVtpXSkpOworICAgIH0KK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwLmgJKHJldmlzaW9uIDI3NTk5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQsMTAgKzU0LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNl
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIGFkZChnbG9iYWxPYmplY3QsIGtleSwgdmFsdWUpOwotICAgIH0K
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBrZXks
IEpTVmFsdWUpOwogCiAgICAgc3RhdGljIGJvb2wgaXNTZXRGYXN0QW5kTm9uT2JzZXJ2YWJsZShT
dHJ1Y3R1cmUqKTsKICAgICBib29sIGlzSXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZh
YmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcElubGlu
ZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01h
cElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJIYXNoTWFwSW1wbElubGluZXMuaCIKKyNpbmNsdWRlICJKU01hcC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworQUxXQVlTX0lOTElORSB2b2lkIEpTTWFwOjpzZXQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYWRkKGdsb2Jh
bE9iamVjdCwga2V5LCB2YWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJbmxpbmVzLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSGFzaE1hcEltcGxJbmxp
bmVzLmgiCisjaW5jbHVkZSAiSlNTZXQuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV2Vha01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTV2Vha01hcC5oCShyZXZpc2lvbiAyNzU5OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dlYWtNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDEwICs0OCw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXQoVk0mIHZtLCBKU09iamVjdCoga2V5LCBKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgYWRkKHZtLCBrZXksIHZhbHVlKTsKLSAgICB9CisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIHNldChWTSYsIEpTT2JqZWN0KiBrZXksIEpTVmFsdWUpOwogCiBwcml2YXRlOgogICAg
IEpTV2Vha01hcChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrTWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha01hcElubGluZXMuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtNYXBJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTV2Vha01h
cC5oIgorI2luY2x1ZGUgIldlYWtNYXBJbXBsSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworQUxXQVlTX0lOTElORSB2b2lkIEpTV2Vha01hcDo6c2V0KFZNJiB2bSwgSlNPYmplY3QqIGtl
eSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhZGQodm0sIGtleSwgdmFsdWUpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI3NTk5OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4
LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJKU01hcC5oIgorI2luY2x1ZGUgIkpTTWFwSW5saW5l
cy5oIgogI2luY2x1ZGUgIk1hcFByb3RvdHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMjc1OTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkJ1
aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJKU01hcC5o
IgorI2luY2x1ZGUgIkpTTWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIK
IAogI2luY2x1ZGUgIk1hcFByb3RvdHlwZS5sdXQuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI3NTk5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJKU1NldC5oIgorI2lu
Y2x1ZGUgIkpTU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIlNldFByb3RvdHlwZS5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjc1OTk5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBw
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTV2Vha01hcC5oIgorI2luY2x1
ZGUgIkpTV2Vha01hcElubGluZXMuaCIKICNpbmNsdWRlICJXZWFrTWFwUHJvdG90eXBlLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vh
a01hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrTWFwSW1wbC5oCShyZXZpc2lvbiAyNzU5OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNyArNTAsOCBAQCBz
dHJ1Y3QgV2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZSB7CiB9Owogc3RhdGljX2Fzc2VydChzaXpl
b2YoV2Vha01hcEJ1Y2tldERhdGFLZXlWYWx1ZSkgPT0gMTYsICIiKTsKIAotQUxXQVlTX0lOTElO
RSB1aW50MzJfdCBqc1dlYWtNYXBIYXNoKEpTT2JqZWN0KiBrZXkpCi17Ci0gICAgcmV0dXJuIHdh
bmdzSW50NjRIYXNoKEpTVmFsdWU6OmVuY29kZShrZXkpKTsKLX0KLQotQUxXQVlTX0lOTElORSB1
aW50MzJfdCBuZXh0Q2FwYWNpdHlBZnRlckJhdGNoUmVtb3ZhbCh1aW50MzJfdCBjYXBhY2l0eSwg
dWludDMyX3Qga2V5Q291bnQpCi17Ci0gICAgd2hpbGUgKHNob3VsZFNocmluayhjYXBhY2l0eSwg
a2V5Q291bnQpKQotICAgICAgICBjYXBhY2l0eSA9IG5leHRDYXBhY2l0eShjYXBhY2l0eSwga2V5
Q291bnQpOwotICAgIHJldHVybiBjYXBhY2l0eTsKLX0KK0FMV0FZU19JTkxJTkUgdWludDMyX3Qg
anNXZWFrTWFwSGFzaChKU09iamVjdCoga2V5KTsKK0FMV0FZU19JTkxJTkUgdWludDMyX3QgbmV4
dENhcGFjaXR5QWZ0ZXJCYXRjaFJlbW92YWwodWludDMyX3QgY2FwYWNpdHksIHVpbnQzMl90IGtl
eUNvdW50KTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIERhdGE+CiBjbGFzcyBXZWFrTWFwQnVja2V0
IHsKQEAgLTI0MSwyMSArMjMyLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gISFmaW5kQnVj
a2V0KGtleSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZChWTSYgdm0sIEpT
T2JqZWN0KiBrZXksIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlKCkpCi0gICAgewotICAgICAgICBE
aXNhbGxvd0dDIGRpc2FsbG93R0M7Ci0gICAgICAgIGFkZCh2bSwga2V5LCB2YWx1ZSwganNXZWFr
TWFwSGFzaChrZXkpKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWRkKFZNJiB2
bSwgSlNPYmplY3QqIGtleSwgSlNWYWx1ZSB2YWx1ZSwgdWludDMyX3QgaGFzaCkKLSAgICB7Ci0g
ICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShqc1dlYWtNYXBIYXNoKGtleSkgPT0gaGFzaCwgIldlIGV4cGVjdCBoYXNoIHZhbHVlIGlzIHdo
YXQgd2UgZXhwZWN0LiIpOwotCi0gICAgICAgIGFkZEludGVybmFsKHZtLCBrZXksIHZhbHVlLCBo
YXNoKTsKLSAgICAgICAgaWYgKHNob3VsZFJlaGFzaEFmdGVyQWRkKCkpCi0gICAgICAgICAgICBy
ZWhhc2goKTsKLSAgICB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZChWTSYsIEpTT2JqZWN0
KiBrZXksIEpTVmFsdWUgPSBKU1ZhbHVlKCkpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZGQo
Vk0mLCBKU09iamVjdCoga2V5LCBKU1ZhbHVlLCB1aW50MzJfdCBoYXNoKTsKIAogICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCByZW1vdmUoSlNPYmplY3QqIGtleSkKICAgICB7CkBAIC0zNDcsMTAgKzMy
NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHVp
bnQzMl90IHNob3VsZFJlaGFzaEFmdGVyQWRkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OnNob3VsZFJlaGFzaEFmdGVyQWRkKG1fY2FwYWNpdHksIG1fa2V5Q291bnQsIG1fZGVs
ZXRlQ291bnQpOwotICAgIH0KKyAgICBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IHNob3VsZFJlaGFz
aEFmdGVyQWRkKCkgY29uc3Q7CiAKICAgICBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IHNob3VsZFNo
cmluaygpIGNvbnN0CiAgICAgewpAQCAtNDAzLDQ3ICszNzgsNyBAQCBwcml2YXRlOgogICAgIH0K
IAogICAgIGVudW0gY2xhc3MgUmVoYXNoTW9kZSB7IE5vcm1hbCwgUmVtb3ZlQmF0Y2hpbmcgfTsK
LSAgICB2b2lkIHJlaGFzaChSZWhhc2hNb2RlIG1vZGUgPSBSZWhhc2hNb2RlOjpOb3JtYWwpCi0g
ICAgewotICAgICAgICAvLyBTaW5jZSBzaHJpbmtpbmcgaXMgZG9uZSBqdXN0IGFmdGVyIEdDIHJ1
bnMgKGZpbmFsaXplVW5jb25kaXRpb25hbGx5KSwgV2Vha01hcEltcGw6OnJlaGFzaCgpCi0gICAg
ICAgIC8vIGZ1bmN0aW9uIG11c3Qgbm90IHRvdWNoIGFueSBHQyByZWxhdGVkIGZlYXR1cmVzLiBU
aGlzIGlzIHdoeSB3ZSBkbyBub3QgYWxsb2NhdGUgV2Vha01hcEJ1ZmZlcgotICAgICAgICAvLyBp
biBhdXhpbGlhcnkgYnVmZmVyLgotCi0gICAgICAgIC8vIFRoaXMgcmVoYXNoIG1vZGlmaWVzIG1f
YnVmZmVyIHdoaWNoIGlzIG5vdCBHQy1tYW5hZ2VkIGJ1ZmZlci4gQnV0IG1fYnVmZmVyIGNhbiBi
ZSB0b3VjaGVkIGluCi0gICAgICAgIC8vIHZpc2l0T3V0cHV0Q29uc3RyYWludHMuIFRodXMsIHdl
IHNob3VsZCBndWFyZCBpdCB3aXRoIGNlbGxMb2NrLgotICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKGNlbGxMb2NrKCkpOwotCi0gICAgICAgIHVpbnQzMl90IG9sZENhcGFjaXR5ID0gbV9j
YXBhY2l0eTsKLSAgICAgICAgTWFsbG9jUHRyPFdlYWtNYXBCdWZmZXJUeXBlLCBKU1ZhbHVlTWFs
bG9jPiBvbGRCdWZmZXIgPSBXVEZNb3ZlKG1fYnVmZmVyKTsKLQotICAgICAgICB1aW50MzJfdCBj
YXBhY2l0eSA9IG1fY2FwYWNpdHk7Ci0gICAgICAgIGlmIChtb2RlID09IFJlaGFzaE1vZGU6OlJl
bW92ZUJhdGNoaW5nKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc2hvdWxkU2hyaW5rKCkpOwotICAg
ICAgICAgICAgY2FwYWNpdHkgPSBuZXh0Q2FwYWNpdHlBZnRlckJhdGNoUmVtb3ZhbChjYXBhY2l0
eSwgbV9rZXlDb3VudCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FwYWNpdHkgPSBu
ZXh0Q2FwYWNpdHkoY2FwYWNpdHksIG1fa2V5Q291bnQpOwotICAgICAgICBtYWtlQW5kU2V0TmV3
QnVmZmVyKGxvY2tlciwgY2FwYWNpdHkpOwotCi0gICAgICAgIGF1dG8qIGJ1ZmZlciA9IHRoaXMt
PmJ1ZmZlcigpOwotICAgICAgICBjb25zdCB1aW50MzJfdCBtYXNrID0gbV9jYXBhY2l0eSAtIDE7
Ci0gICAgICAgIGZvciAodWludDMyX3Qgb2xkSW5kZXggPSAwOyBvbGRJbmRleCA8IG9sZENhcGFj
aXR5OyArK29sZEluZGV4KSB7Ci0gICAgICAgICAgICBhdXRvKiBlbnRyeSA9IG9sZEJ1ZmZlci0+
YnVmZmVyKCkgKyBvbGRJbmRleDsKLSAgICAgICAgICAgIGlmIChlbnRyeS0+aXNFbXB0eSgpIHx8
IGVudHJ5LT5pc0RlbGV0ZWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgdWludDMyX3QgaW5kZXggPSBqc1dlYWtNYXBIYXNoKGVudHJ5LT5rZXkoKSkgJiBtYXNr
OwotICAgICAgICAgICAgV2Vha01hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGJ1ZmZlciArIGluZGV4
OwotICAgICAgICAgICAgd2hpbGUgKCFidWNrZXQtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
ICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOwotICAgICAgICAgICAgICAgIGJ1Y2tldCA9
IGJ1ZmZlciArIGluZGV4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnVja2V0LT5jb3B5
RnJvbSgqZW50cnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9kZWxldGVDb3VudCA9IDA7Ci0K
LSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIH0KKyAgICB2b2lkIHJlaGFzaChSZWhh
c2hNb2RlID0gUmVoYXNoTW9kZTo6Tm9ybWFsKTsKIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBj
aGVja0NvbnNpc3RlbmN5KCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9XZWFrTWFwSW1wbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwSW1wbElubGluZXMuaAkocmV2aXNpb24gMjc1OTk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcEltcGxJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSw0MSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIkhhc2hNYXBJbXBsSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtNYXBJbXBsLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCitBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGpzV2Vha01hcEhhc2go
SlNPYmplY3QqIGtleSkKK3sKKyAgICByZXR1cm4gd2FuZ3NJbnQ2NEhhc2goSlNWYWx1ZTo6ZW5j
b2RlKGtleSkpOworfQorCitBTFdBWVNfSU5MSU5FIHVpbnQzMl90IG5leHRDYXBhY2l0eUFmdGVy
QmF0Y2hSZW1vdmFsKHVpbnQzMl90IGNhcGFjaXR5LCB1aW50MzJfdCBrZXlDb3VudCkKK3sKKyAg
ICB3aGlsZSAoc2hvdWxkU2hyaW5rKGNhcGFjaXR5LCBrZXlDb3VudCkpCisgICAgICAgIGNhcGFj
aXR5ID0gbmV4dENhcGFjaXR5KGNhcGFjaXR5LCBrZXlDb3VudCk7CisgICAgcmV0dXJuIGNhcGFj
aXR5OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6YWRkKFZNJiB2bSwgSlNPYmplY3Qq
IGtleSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAg
YWRkKHZtLCBrZXksIHZhbHVlLCBqc1dlYWtNYXBIYXNoKGtleSkpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgV2Vha01hcEJ1Y2tldD4KK0FMV0FZU19JTkxJTkUgdm9pZCBXZWFrTWFwSW1wbDxX
ZWFrTWFwQnVja2V0Pjo6YWRkKFZNJiB2bSwgSlNPYmplY3QqIGtleSwgSlNWYWx1ZSB2YWx1ZSwg
dWludDMyX3QgaGFzaCkKK3sKKyAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShqc1dlYWtNYXBIYXNoKGtleSkgPT0gaGFzaCwgIldlIGV4cGVjdCBoYXNo
IHZhbHVlIGlzIHdoYXQgd2UgZXhwZWN0LiIpOworCisgICAgYWRkSW50ZXJuYWwodm0sIGtleSwg
dmFsdWUsIGhhc2gpOworICAgIGlmIChzaG91bGRSZWhhc2hBZnRlckFkZCgpKQorICAgICAgICBy
ZWhhc2goKTsKK30KKwogLy8gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIGJlIGV4ZWN1dGVk
IGluIHBhcmFsbGVsIGFzIGxvbmcgYXMgdGhlIG11dGF0b3Igc3RvcHMuCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBXZWFrTWFwQnVja2V0Pgogdm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQpAQCAtNTIsNCArODMsNTMgQEAgdm9pZCBXZWFr
TWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6ZmluYWxpegogICAgICAgICByZWhhc2goUmVoYXNoTW9k
ZTo6UmVtb3ZlQmF0Y2hpbmcpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBXZWFrTWFwQnVja2V0
Pgordm9pZCBXZWFrTWFwSW1wbDxXZWFrTWFwQnVja2V0Pjo6cmVoYXNoKFJlaGFzaE1vZGUgbW9k
ZSkKK3sKKyAgICAvLyBTaW5jZSBzaHJpbmtpbmcgaXMgZG9uZSBqdXN0IGFmdGVyIEdDIHJ1bnMg
KGZpbmFsaXplVW5jb25kaXRpb25hbGx5KSwgV2Vha01hcEltcGw6OnJlaGFzaCgpCisgICAgLy8g
ZnVuY3Rpb24gbXVzdCBub3QgdG91Y2ggYW55IEdDIHJlbGF0ZWQgZmVhdHVyZXMuIFRoaXMgaXMg
d2h5IHdlIGRvIG5vdCBhbGxvY2F0ZSBXZWFrTWFwQnVmZmVyCisgICAgLy8gaW4gYXV4aWxpYXJ5
IGJ1ZmZlci4KKworICAgIC8vIFRoaXMgcmVoYXNoIG1vZGlmaWVzIG1fYnVmZmVyIHdoaWNoIGlz
IG5vdCBHQy1tYW5hZ2VkIGJ1ZmZlci4gQnV0IG1fYnVmZmVyIGNhbiBiZSB0b3VjaGVkIGluCisg
ICAgLy8gdmlzaXRPdXRwdXRDb25zdHJhaW50cy4gVGh1cywgd2Ugc2hvdWxkIGd1YXJkIGl0IHdp
dGggY2VsbExvY2suCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhjZWxsTG9jaygpKTsKKwor
ICAgIHVpbnQzMl90IG9sZENhcGFjaXR5ID0gbV9jYXBhY2l0eTsKKyAgICBNYWxsb2NQdHI8V2Vh
a01hcEJ1ZmZlclR5cGUsIEpTVmFsdWVNYWxsb2M+IG9sZEJ1ZmZlciA9IFdURk1vdmUobV9idWZm
ZXIpOworCisgICAgdWludDMyX3QgY2FwYWNpdHkgPSBtX2NhcGFjaXR5OworICAgIGlmIChtb2Rl
ID09IFJlaGFzaE1vZGU6OlJlbW92ZUJhdGNoaW5nKSB7CisgICAgICAgIEFTU0VSVChzaG91bGRT
aHJpbmsoKSk7CisgICAgICAgIGNhcGFjaXR5ID0gbmV4dENhcGFjaXR5QWZ0ZXJCYXRjaFJlbW92
YWwoY2FwYWNpdHksIG1fa2V5Q291bnQpOworICAgIH0gZWxzZQorICAgICAgICBjYXBhY2l0eSA9
IG5leHRDYXBhY2l0eShjYXBhY2l0eSwgbV9rZXlDb3VudCk7CisgICAgbWFrZUFuZFNldE5ld0J1
ZmZlcihsb2NrZXIsIGNhcGFjaXR5KTsKKworICAgIGF1dG8qIGJ1ZmZlciA9IHRoaXMtPmJ1ZmZl
cigpOworICAgIGNvbnN0IHVpbnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5IC0gMTsKKyAgICBmb3Ig
KHVpbnQzMl90IG9sZEluZGV4ID0gMDsgb2xkSW5kZXggPCBvbGRDYXBhY2l0eTsgKytvbGRJbmRl
eCkgeworICAgICAgICBhdXRvKiBlbnRyeSA9IG9sZEJ1ZmZlci0+YnVmZmVyKCkgKyBvbGRJbmRl
eDsKKyAgICAgICAgaWYgKGVudHJ5LT5pc0VtcHR5KCkgfHwgZW50cnktPmlzRGVsZXRlZCgpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdWludDMyX3QgaW5kZXggPSBqc1dlYWtN
YXBIYXNoKGVudHJ5LT5rZXkoKSkgJiBtYXNrOworICAgICAgICBXZWFrTWFwQnVja2V0KiBidWNr
ZXQgPSBidWZmZXIgKyBpbmRleDsKKyAgICAgICAgd2hpbGUgKCFidWNrZXQtPmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBi
dWNrZXQgPSBidWZmZXIgKyBpbmRleDsKKyAgICAgICAgfQorICAgICAgICBidWNrZXQtPmNvcHlG
cm9tKCplbnRyeSk7CisgICAgfQorCisgICAgbV9kZWxldGVDb3VudCA9IDA7CisKKyAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFdlYWtNYXBCdWNrZXQ+CitB
TFdBWVNfSU5MSU5FIHVpbnQzMl90IFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ+OjpzaG91bGRS
ZWhhc2hBZnRlckFkZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEpTQzo6c2hvdWxkUmVoYXNoQWZ0
ZXJBZGQobV9jYXBhY2l0eSwgbV9rZXlDb3VudCwgbV9kZWxldGVDb3VudCk7CiB9CisKK30gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01h
cFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha01hcFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI3NTk5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiV2Vha01hcFByb3RvdHlwZS5oIgogCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTV2Vha01hcC5oIgorI2luY2x1ZGUgIkpT
V2Vha01hcElubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3NTk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDIxLTA0LTE1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxl
LmNvbT4KKworICAgICAgICBSZWZhY3RvciBpbmxpbmUgZnVuY3Rpb25zIG91dCBvZiBIYXNoTWFw
SW1wbC5oIGludG8gSGFzaE1hcEltcGxJbmxpbmVzLmguCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ2MTYKKyAgICAgICAgcmRhcjovLzc2NzEzNzA5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorCiAyMDIxLTA0LTE0ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEF2b2lkIGluZGlyZWN0IGxvYWQg
aW4gQ29udGFpbmVyTm9kZTo6aGFzT25lQ2hpbGQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAy
NzU5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw5ICs3MSw5IEBACiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNBcnJheUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEYXRhVmlldy5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTWFwLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNNYXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNNYXBJdGVyYXRvci5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU2V0Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNTZXRJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTZXRJdGVy
YXRvci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVHlwZWRBcnJheXMuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1dlYkFzc2VtYmx5TWVtb3J5Lmg+Cg==
</data>
<flag name="review"
          id="446326"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>