<?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>223928</bug_id>
          
          <creation_ts>2021-03-30 07:02:19 -0700</creation_ts>
          <short_desc>Optimize createListFromArrayLike() and Proxy&apos;s [[OwnPropertyKeys]] method</short_desc>
          <delta_ts>2021-04-01 09:08:16 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Shvayka">ashvayka</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1745102</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-30 07:02:19 -0700</bug_when>
    <thetext>Optimize createListFromArrayLike() and Proxy&apos;s [[OwnPropertyKeys]] method</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745104</commentid>
    <comment_count>1</comment_count>
      <attachid>424635</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-30 07:05:19 -0700</bug_when>
    <thetext>Created attachment 424635
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745106</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-30 07:05:59 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #1)
&gt; Created attachment 424635 [details]
&gt; Patch

                                    r274349                   patch

reflect-own-keys-proxy         69.1157+-1.3454     ^     53.2344+-0.8644        ^ definitely 1.2983x faster
reflect-own-keys-proxy-2       75.4748+-0.8499     ^     62.5830+-0.8780        ^ definitely 1.2060x faster

&lt;geometric&gt;                    72.2098+-0.9571     ^     57.7050+-0.6808        ^ definitely 1.2514x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745290</commentid>
    <comment_count>3</comment_count>
      <attachid>424689</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-30 13:47:41 -0700</bug_when>
    <thetext>Created attachment 424689
Patch

Make JSArrayInlines.h a private header to fix WebCore build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745401</commentid>
    <comment_count>4</comment_count>
      <attachid>424714</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-30 16:34:55 -0700</bug_when>
    <thetext>Created attachment 424714
Patch

Add JSArrayInlines.h to CMakeLists.txt and remove uint32_t getIndex() override.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745952</commentid>
    <comment_count>5</comment_count>
      <attachid>424714</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-01 00:40:54 -0700</bug_when>
    <thetext>Comment on attachment 424714
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746050</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-04-01 09:07:15 -0700</bug_when>
    <thetext>Committed r275363: &lt;https://commits.webkit.org/r275363&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 424714.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746051</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-01 09:08:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/76106345&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424635</attachid>
            <date>2021-03-30 07:05:19 -0700</date>
            <delta_ts>2021-03-30 13:47:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223928-20210330170518.patch</filename>
            <type>text/plain</type>
            <size>18335</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzUyMDIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDIxLTAzLTMwICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBjcmVhdGVMaXN0RnJvbUFycmF5TGlrZSgp
IGFuZCBQcm94eSdzIFtbT3duUHJvcGVydHlLZXlzXV0gbWV0aG9kCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM5MjgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9qc29uLXN0
cmluZ2lmeS1hcnJheS1yZXBsYWNlci5qczoKKyAgICAgICAgUmVkdWNlIHJ1bm5pbmcgdGltZSBm
cm9tIG92ZXIgMzUwbXMgdG8gfjYwbXMuCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcmVm
bGVjdC1vd24ta2V5cy1wcm94eS0yLmpzOiBBZGRlZC4KKyAgICAgICAgKiBtaWNyb2JlbmNobWFy
a3MvcmVmbGVjdC1vd24ta2V5cy1wcm94eS5qczogQWRkZWQuCisKIDIwMjEtMDMtMjYgIFl1c3Vr
ZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJ
Q1UgU1BJIGZvciBjYW5vbmljYWxpemF0aW9uCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9qc29uLXN0cmluZ2lmeS1hcnJheS1yZXBsYWNlci5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9qc29uLXN0cmluZ2lmeS1hcnJheS1yZXBsYWNlci5qcwkocmV2aXNp
b24gMjc1MTU5KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvanNvbi1zdHJpbmdpZnktYXJy
YXktcmVwbGFjZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzIEBACi1jb25zdCByZXBs
YWNlciA9IG5ldyBBcnJheSgxNSkuZmlsbCgna2V5Jyk7Ci1mb3IgKGxldCBpID0gMDsgaSA8IDFl
NjsgKytpKQordmFyIHJlcGxhY2VyID0gbmV3IEFycmF5KDI1KS5maWxsKCdrZXknKTsKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgSlNPTi5zdHJpbmdpZnkobnVsbCwgcmVwbGFj
ZXIpOwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1vd24ta2V5cy1wcm94
eS0yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3Qtb3du
LWtleXMtcHJveHktMi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9yZWZsZWN0LW93bi1rZXlzLXByb3h5LTIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NiBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciB0YXJnZXQgPSB7fTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDEwOyBpKyspCisgICAgICAgIHRhcmdldFsiayIgKyBpXSA9IGk7CisgICAgdmFy
IHRyYXBSZXN1bHQgPSBSZWZsZWN0Lm93bktleXModGFyZ2V0KTsKKyAgICB2YXIgcHJveHkgPSBu
ZXcgUHJveHkodGFyZ2V0LCB7CisgICAgICAgIG93bktleXM6IGZ1bmN0aW9uKCkgeyByZXR1cm4g
dHJhcFJlc3VsdDsgfSwKKyAgICB9KTsKKworICAgIHZhciBqID0gMCwgbGVuZ3RoU3VtID0gMDsK
KyAgICBmb3IgKDsgaiA8IDUwXzAwMDsgKytqKQorICAgICAgICBsZW5ndGhTdW0gKz0gUmVmbGVj
dC5vd25LZXlzKHByb3h5KS5sZW5ndGg7CisKKyAgICBpZiAobGVuZ3RoU3VtICE9PSB0cmFwUmVz
dWx0Lmxlbmd0aCAqIGopCisgICAgICAgIHRocm93ICJCYWQgYXNzZXJ0aW9uISI7Cit9KSgpOwpJ
bmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1vd24ta2V5cy1wcm94eS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LW93bi1rZXlzLXBy
b3h5LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3Qt
b3duLWtleXMtcHJveHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorKGZ1bmN0
aW9uKCkgeworICAgIHZhciB0cmFwUmVzdWx0ID0gW107CisgICAgdmFyIHByb3h5ID0gbmV3IFBy
b3h5KHt9LCB7CisgICAgICAgIG93bktleXM6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJhcFJlc3Vs
dDsgfSwKKyAgICB9KTsKKworICAgIHZhciBqID0gMCwgbGVuZ3RoU3VtID0gMDsKKyAgICBmb3Ig
KDsgaiA8IDIwMF8wMDA7ICsraikKKyAgICAgICAgbGVuZ3RoU3VtICs9IFJlZmxlY3Qub3duS2V5
cyhwcm94eSkubGVuZ3RoOworCisgICAgaWYgKGxlbmd0aFN1bSAhPT0gdHJhcFJlc3VsdC5sZW5n
dGggKiBqKQorICAgICAgICB0aHJvdyAiQmFkIGFzc2VydGlvbiEiOworfSkoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc1MTY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDIxLTAz
LTMwICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBP
cHRpbWl6ZSBjcmVhdGVMaXN0RnJvbUFycmF5TGlrZSgpIGFuZCBQcm94eSdzIFtbT3duUHJvcGVy
dHlLZXlzXV0gbWV0aG9kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjM5MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBjcmVhdGVMaXN0RnJvbUFycmF5TGlrZSgpIGNoYW5nZXM6CisKKyAgICAgICAgICAx
LiBVc2UgdG9MZW5ndGgoKSAvIGdldEluZGV4KCkgbWV0aG9kcyB0aGF0IGhhdmUgZmFzdCBwYXRo
cy4KKyAgICAgICAgICAyLiBSZW1vdmUgUnVudGltZVR5cGVNYXNrIGFuZCBlcnJvciBtZXNzYWdl
cyBmcm9tIGl0cyBzaWduYXR1cmU6IHR5cGUgY2hlY2tzIGFyZSBiZXR0ZXIKKyAgICAgICAgICAg
ICBwZXJmb3JtZWQgaW4gYWR2YW5jZSAvIGluc2lkZSBhIGZ1bmN0b3IgdG8ga2VlcCB0aGUgaGVs
cGVyIG1vcmUgdmVyc2F0aWxlLgorICAgICAgICAgIDMuIEludmVydCBmdW5jdG9yJ3MgcmV0dXJu
IHZhbHVlIHRvIGFsaWduIHdpdGggU3RydWN0dXJlOjpmb3JFYWNoUHJvcGVydHkoKSBhbmQgZnJp
ZW5kcy4KKyAgICAgICAgICA0LiBSZW5hbWUgaXQgdG8gZm9yRWFjaEluQXJyYXlMaWtlKCkgYXMg
bm8gbGlzdCBpcyBhY3R1YWxseSByZXR1cm5lZC4KKworICAgICAgICBQcm94eU9iamVjdDo6cGVy
Zm9ybUdldE93blByb3BlcnR5TmFtZXMoKSBjaGFuZ2VzOgorCisgICAgICAgICAgMS4gUmVtb3Zl
IFJ1bnRpbWVUeXBlTWFzayBmaWx0ZXJpbmcgYXMgaXQncyBhbHJlYWR5IHBlcmZvcm1lZCBieSBQ
cm9wZXJ0eU5hbWVBcnJheTo6YWRkKCkuCisgICAgICAgICAgMi4gU3RvcmUgdGFyZ2V0J3Mga2V5
cyBpbiBhIEhhc2hTZXQgZm9yIGZhc3RlciBpbnNlcnRpb24gLyBzZWFyY2guCisgICAgICAgICAg
My4gRG9uJ3QgcG9wdWxhdGUgYHRhcmdldENvbmZpZ3VyYWJsZUtleXNgIGZvciBleHRlbnNpYmxl
IHRhcmdldCBhcyBpdCB3b24ndCBiZSB1c2VkIFsxXS4KKyAgICAgICAgICA0LiBMZXZlcmFnZSBy
ZXR1cm4gdmFsdWUgb2YgSGFzaFNldDo6cmVtb3ZlKCkgaW5zdGVhZCBvZiB1c2luZyBhIGhlbHBl
ci4KKworICAgICAgICBUaGlzIHBhdGNoIGFkdmFuY2VzIFByb3h5J3MgW1tPd25Qcm9wZXJ0eUtl
eXNdXSBtaWNyb2JlbmNobWFya3MgYnkgMjAtMzAlLAorICAgICAgICBtYWlubHkgZHVlIHRvIGNy
ZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKCkgY2hhbmdlcy4gTm8gYmVoYXZpb3IgY2hhbmdlcy4KKwor
ICAgICAgICBBbHNvLCB1dGlsaXplcyBmb3JFYWNoSW5BcnJheUxpa2UoKSBmb3IgYWxsb3cgbGlz
dCBvZiBKU09OLnN0cmluZ2lmeSgpLgorCisgICAgICAgIFsxXTogaHR0cHM6Ly90YzM5LmVzL2Vj
bWEyNjIvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xv
dHMtb3ducHJvcGVydHlrZXlzIChzdGVwIDIwKQorCisgICAgICAgICogcnVudGltZS9BcnJheVBy
b3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnNsb3dKb2luKToKKyAgICAgICAgKEpTQzo6SlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6U3RyaW5naWZpZXIpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEluZGV4IGNvbnN0
KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpm
b3JFYWNoSW5BcnJheUxpa2UpOgorICAgICAgICAoSlNDOjpjcmVhdGVMaXN0RnJvbUFycmF5TGlr
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9Qcm94eU9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAg
ICogcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKToKKwogMjAyMS0wMy0yOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFICYgRU5BQkxFX0lO
REVYRURfREFUQUJBU0VfSU5fV09SS0VSUywgaXQgc2VlbXMgbGlrZSBpdCBpcyBvbiBmb3IgYWxs
IHBvcnRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNzUxNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczOCw3ICs3Mzgs
NyBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihKU0dsb2JhbE9iamVjdCogCiAgICAgICAgIHJl
dHVybiBqc0VtcHR5U3RyaW5nKHZtKTsKIAogICAgIC8vIDYuIExldCBlbGVtZW50MCBiZSBHZXQo
TywgIjAiKS4KLSAgICBKU1ZhbHVlIGVsZW1lbnQwID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoZ2xv
YmFsT2JqZWN0LCAwKTsKKyAgICBKU1ZhbHVlIGVsZW1lbnQwID0gdGhpc09iamVjdC0+Z2V0SW5k
ZXgoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMCkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAvLyA3LiBJZiBlbGVtZW50MCBpcyB1bmRl
ZmluZWQgb3IgbnVsbCwgbGV0IFIgYmUgdGhlIGVtcHR5IFN0cmluZzsgb3RoZXJ3aXNlLCBsZXQg
UiBiZSA/IFRvU3RyaW5nKGVsZW1lbnQwKS4KQEAgLTEwNTYsNyArMTA1Niw3IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihhcnJheVByb3RvRnVuY1MKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRo
aXNPYmotPmdldEluZGV4KGdsb2JhbE9iamVjdCwgMCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
aGlzT2JqLT5nZXRJbmRleChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigwKSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
c2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0PihnbG9iYWxPYmplY3QsIHRoaXNPYmos
IDAsIDEsIDAsIGxlbmd0aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09O
T2JqZWN0LmNwcAkocmV2aXNpb24gMjc1MTU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSwyOCArMjMxLDIyIEBA
IFN0cmluZ2lmaWVyOjpTdHJpbmdpZmllcihKU0dsb2JhbE9iamVjdCoKICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsICk7CiAgICAgICAgICAgICBpZiAoaXNBcnJheVJlcGxh
Y2VyKSB7CiAgICAgICAgICAgICAgICAgbV91c2luZ0FycmF5UmVwbGFjZXIgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xl
bmd0aChnbG9iYWxPYmplY3QsIHJlcGxhY2VyT2JqZWN0KSk7Ci0gICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVpbnQ2NF90
IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSBuYW1lOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KHJlcGxh
Y2VyT2JqZWN0KSAmJiByZXBsYWNlck9iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSByZXBsYWNlck9iamVjdC0+Z2V0SW5kZXhR
dWlja2x5KHN0YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCkpOwotICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSByZXBsYWNlck9iamVjdC0+
Z2V0KGdsb2JhbE9iamVjdCwgaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGZvckVhY2hJbkFycmF5TGlrZShnbG9iYWxPYmplY3QsIHJlcGxhY2VyT2JqZWN0LCBb
Jl0gKEpTVmFsdWUgbmFtZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1l
LmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8qIG5hbWVPYmplY3Qg
PSBqc0Nhc3Q8SlNPYmplY3QqPihuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bmFtZU9iamVjdC0+aW5oZXJpdHM8TnVtYmVyT2JqZWN0Pih2bSkgJiYgIW5hbWVPYmplY3QtPmlu
aGVyaXRzPFN0cmluZ09iamVjdD4odm0pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFuYW1lLmlzTnVtYmVyKCkgJiYgIW5hbWUuaXNTdHJp
bmcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICAgICAgICAgICAgICAgICAgSlNTdHJpbmcqIHBy
b3BlcnR5TmFtZVN0cmluZyA9IG5hbWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgKTsKKyAgICAgICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICAgICAgICAg
ICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZVN0cmluZy0+dG9JZGVudGlmaWVy
KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsICk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1l
cy5hZGQoV1RGTW92ZShwcm9wZXJ0eU5hbWUpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsICk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHJldmlzaW9uIDI3NTE1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxMSw2ICs0MTEsMTUgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgfQogCisgICAgSlNWYWx1ZSBn
ZXRJbmRleChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBpKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShpIDw9IE1BWF9BUlJBWV9JTkRFWCkpIHsKKyAgICAg
ICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IHRyeUdldEluZGV4UXVpY2tseShzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oaSkpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGdldChnbG9iYWxPYmplY3QsIGkpOworICAgIH0KKwogICAgIGJv
b2wgY2FuU2V0SW5kZXhRdWlja2x5Rm9yVHlwZWRBcnJheSh1bnNpZ25lZCwgSlNWYWx1ZSkgY29u
c3Q7CiAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHlGb3JUeXBlZEFycmF5KHVuc2lnbmVkLCBKU1Zh
bHVlKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjc1MTU5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlICJCcmFuZGVkU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiQnV0dGVy
Zmx5SW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNBcnJheUlubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNp
bmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCkBAIC00MywzNyArNDQsMTggQEAgQ29tcGxldGVTdWJz
cGFjZSogSlNGaW5hbE9iamVjdDo6c3Vic3BhYwogICAgIHJldHVybiAmdm0uY2VsbFNwYWNlOwog
fQogCi0vLyBTZWN0aW9uIDcuMy4xNyBvZiB0aGUgc3BlYy4KLXRlbXBsYXRlIDx0eXBlbmFtZSBB
ZGRGdW5jdGlvbj4gLy8gQWRkIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGEgdHlwZSBsaWtlOiAoSlNW
YWx1ZSwgUnVudGltZVR5cGUpIC0+IGJvb2wKLXZvaWQgY3JlYXRlTGlzdEZyb21BcnJheUxpa2Uo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcnJheUxpa2VWYWx1ZSwgUnVu
dGltZVR5cGVNYXNrIGxlZ2FsVHlwZXNGaWx0ZXIsIGNvbnN0IFN0cmluZyYgbm90QW5PYmplY3RF
cnJvTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBpbGxlZ2FsVHlwZUVycm9yTWVzc2FnZSwgQWRkRnVu
Y3Rpb24gYWRkRnVuY3Rpb24pCisvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0
ZWxpc3Rmcm9tYXJyYXlsaWtlCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gLy8gQSBmdW5j
dG9yIHNob3VsZCBoYXZlIGEgdHlwZSBsaWtlOiAoSlNWYWx1ZSkgLT4gYm9vbAordm9pZCBmb3JF
YWNoSW5BcnJheUxpa2UoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGFy
cmF5TGlrZU9iamVjdCwgRnVuY3RvciBmdW5jdG9yKQogewogICAgIFZNJiB2bSA9IGdldFZNKGds
b2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgaWYgKCFhcnJheUxpa2VWYWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93VHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIG5vdEFuT2JqZWN0RXJyb01lc3NhZ2UpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFZlY3RvcjxKU1ZhbHVlPiByZXN1bHQ7Ci0g
ICAgSlNWYWx1ZSBsZW5ndGhQcm9wZXJ0eSA9IGFycmF5TGlrZVZhbHVlLmdldChnbG9iYWxPYmpl
Y3QsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKLSAgICBkb3VibGUgbGVuZ3RoQXNEb3VibGUgPSBsZW5ndGhQcm9wZXJ0
eS50b0xlbmd0aChnbG9iYWxPYmplY3QpOworICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19j
YXN0PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9iYWxPYmplY3QsIGFycmF5TGlrZU9iamVjdCkpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgUkVMRUFTRV9BU1NF
UlQobGVuZ3RoQXNEb3VibGUgPj0gMC4wICYmIGxlbmd0aEFzRG91YmxlID09IHN0ZDo6dHJ1bmMo
bGVuZ3RoQXNEb3VibGUpKTsKLSAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50
NjRfdD4obGVuZ3RoQXNEb3VibGUpOwogICAgIGZvciAodWludDY0X3QgaW5kZXggPSAwOyBpbmRl
eCA8IGxlbmd0aDsgaW5kZXgrKykgewotICAgICAgICBKU1ZhbHVlIG5leHQgPSBhcnJheUxpa2VW
YWx1ZS5nZXQoZ2xvYmFsT2JqZWN0LCBpbmRleCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBh
cnJheUxpa2VPYmplY3QtPmdldEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgICAgICAKLSAgICAgICAgUnVu
dGltZVR5cGUgdHlwZSA9IHJ1bnRpbWVUeXBlRm9yVmFsdWUodm0sIG5leHQpOwotICAgICAgICBp
ZiAoISh0eXBlICYgbGVnYWxUeXBlc0ZpbHRlcikpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGlsbGVnYWxUeXBlRXJyb3JNZXNzYWdlKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBleGl0RWFy
bHkgPSBhZGRGdW5jdGlvbihuZXh0LCB0eXBlKTsKLSAgICAgICAgaWYgKGV4aXRFYXJseSkKKyAg
ICAgICAgaWYgKCFmdW5jdG9yKHZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNzUxNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyMyw0NCArOTIzLDMwIEBAIHZvaWQgUHJv
eHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU4KICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQg
PSBjYWxsKGdsb2JhbE9iamVjdCwgb3duS2V5c01ldGhvZCwgY2FsbERhdGEsIGhhbmRsZXIsIGFy
Z3VtZW50cyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAorICAg
IGlmICghdHJhcFJlc3VsdC5pc09iamVjdCgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJQcm94eSBoYW5kbGVyJ3MgJ293bktleXMnIG1ldGhvZCBtdXN0
IHJldHVybiBhbiBvYmplY3QiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgSGFz
aFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IHVuY2hlY2tlZFJlc3VsdEtleXM7Ci0gICAgewotICAg
ICAgICBSdW50aW1lVHlwZU1hc2sgcmVzdWx0RmlsdGVyID0gMDsKLSAgICAgICAgc3dpdGNoIChw
cm9wZXJ0eU5hbWVzLnByb3BlcnR5TmFtZU1vZGUoKSkgewotICAgICAgICBjYXNlIFByb3BlcnR5
TmFtZU1vZGU6OlN5bWJvbHM6Ci0gICAgICAgICAgICByZXN1bHRGaWx0ZXIgPSBUeXBlU3ltYm9s
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5nczoKLSAgICAgICAgICAgIHJlc3VsdEZpbHRlciA9IFR5cGVTdHJpbmc7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9s
czoKLSAgICAgICAgICAgIHJlc3VsdEZpbHRlciA9IFR5cGVTeW1ib2wgfCBUeXBlU3RyaW5nOwot
ICAgICAgICAgICAgYnJlYWs7CisgICAgZm9yRWFjaEluQXJyYXlMaWtlKGdsb2JhbE9iamVjdCwg
YXNPYmplY3QodHJhcFJlc3VsdCksIFsmXSAoSlNWYWx1ZSB2YWx1ZSkgLT4gYm9vbCB7CisgICAg
ICAgIGlmICghdmFsdWUuaXNTdHJpbmcoKSAmJiAhdmFsdWUuaXNTeW1ib2woKSkgeworICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlByb3h5IGhhbmRsZXIn
cyAnb3duS2V5cycgbWV0aG9kIG11c3QgcmV0dXJuIGFuIGFycmF5LWxpa2Ugb2JqZWN0IGNvbnRh
aW5pbmcgb25seSBTdHJpbmdzIGFuZCBTeW1ib2xzIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQotICAgICAgICBBU1NFUlQocmVzdWx0RmlsdGVyKTsKIAotICAgICAg
ICBhdXRvIGFkZFByb3BOYW1lID0gWyZdIChKU1ZhbHVlIHZhbHVlLCBSdW50aW1lVHlwZSB0eXBl
KSAtPiBib29sIHsKLSAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBkb0V4aXRFYXJs
eSA9IHRydWU7Ci0gICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgZG9udEV4aXRFYXJs
eSA9IGZhbHNlOwotCi0gICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50ID0gdmFsdWUudG9Qcm9w
ZXJ0eUtleShnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZG9FeGl0RWFybHkpOwotCi0gICAgICAgICAgICBpZiAoIXVuY2hlY2tlZFJlc3VsdEtl
eXMuYWRkKGlkZW50LmltcGwoKSkuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJQcm94eSBoYW5kbGVyJ3MgJ293bktleXMn
IHRyYXAgcmVzdWx0IG11c3Qgbm90IGNvbnRhaW4gYW55IGR1cGxpY2F0ZSBuYW1lcyJfcyk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGRvRXhpdEVhcmx5OwotICAgICAgICAgICAgfQorICAgICAg
ICBJZGVudGlmaWVyIGlkZW50ID0gdmFsdWUudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKLSAgICAgICAgICAg
IGlmICh0eXBlICYgcmVzdWx0RmlsdGVyKQotICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKGlkZW50LmltcGwoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBkb250RXhpdEVhcmx5Owot
ICAgICAgICB9OworICAgICAgICBpZiAoIXVuY2hlY2tlZFJlc3VsdEtleXMuYWRkKGlkZW50Lmlt
cGwoKSkuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgdHJhcCByZXN1bHQgbXVzdCBu
b3QgY29udGFpbiBhbnkgZHVwbGljYXRlIG5hbWVzIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQogCi0gICAgICAgIFJ1bnRpbWVUeXBlTWFzayBkb250VGhyb3dBbkV4
Y2VwdGlvblR5cGVGaWx0ZXIgPSBUeXBlU3RyaW5nIHwgVHlwZVN5bWJvbDsKLSAgICAgICAgY3Jl
YXRlTGlzdEZyb21BcnJheUxpa2UoZ2xvYmFsT2JqZWN0LCB0cmFwUmVzdWx0LCBkb250VGhyb3dB
bkV4Y2VwdGlvblR5cGVGaWx0ZXIsICJQcm94eSBoYW5kbGVyJ3MgJ293bktleXMnIG1ldGhvZCBt
dXN0IHJldHVybiBhbiBvYmplY3QiX3MsICJQcm94eSBoYW5kbGVyJ3MgJ293bktleXMnIG1ldGhv
ZCBtdXN0IHJldHVybiBhbiBhcnJheS1saWtlIG9iamVjdCBjb250YWluaW5nIG9ubHkgU3RyaW5n
cyBhbmQgU3ltYm9scyJfcywgYWRkUHJvcE5hbWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIH0KKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoaWRl
bnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgYm9vbCB0YXJnZXRJc0V4ZW5zaWJsZSA9IHRhcmdl
dC0+aXNFeHRlbnNpYmxlKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKQEAgLTk2OCwzMCArOTU0LDIwIEBAIHZvaWQgUHJveHlPYmplY3Q6OnBl
cmZvcm1HZXRPd25Qcm9wZXJ0eU4KICAgICBQcm9wZXJ0eU5hbWVBcnJheSB0YXJnZXRLZXlzKHZt
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6
OkV4Y2x1ZGUpOwogICAgIHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5h
bWVzKHRhcmdldCwgZ2xvYmFsT2JqZWN0LCB0YXJnZXRLZXlzLCBEb250RW51bVByb3BlcnRpZXNN
b2RlOjpJbmNsdWRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwot
ICAgIFZlY3RvcjxVbmlxdWVkU3RyaW5nSW1wbCo+IHRhcmdldENvbmZpZ3VyYWJsZUtleXM7Ci0g
ICAgVmVjdG9yPFVuaXF1ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Tm9uQ29uZmlndXJhYmxlS2V5czsK
KyAgICBIYXNoU2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Tm9uQ29uZmlndXJhYmxlS2V5
czsKKyAgICBIYXNoU2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Q29uZmlndXJhYmxlS2V5
czsKICAgICBmb3IgKGNvbnN0IElkZW50aWZpZXImIGlkZW50IDogdGFyZ2V0S2V5cykgewogICAg
ICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgYm9vbCBpc1Byb3Bl
cnR5RGVmaW5lZCA9IHRhcmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbE9iamVj
dCwgaWRlbnQuaW1wbCgpLCBkZXNjcmlwdG9yKTsgCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIGlmIChpc1Byb3BlcnR5RGVmaW5lZCAmJiAhZGVz
Y3JpcHRvci5jb25maWd1cmFibGUoKSkKLSAgICAgICAgICAgIHRhcmdldE5vbkNvbmZpZ3VyYWJs
ZUtleXMuYXBwZW5kKGlkZW50LmltcGwoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRh
cmdldENvbmZpZ3VyYWJsZUtleXMuYXBwZW5kKGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICB0
YXJnZXROb25Db25maWd1cmFibGVLZXlzLmFkZChpZGVudC5pbXBsKCkpOworICAgICAgICBlbHNl
IGlmICghdGFyZ2V0SXNFeGVuc2libGUpCisgICAgICAgICAgICB0YXJnZXRDb25maWd1cmFibGVL
ZXlzLmFkZChpZGVudC5pbXBsKCkpOwogICAgIH0KIAotICAgIGVudW0gQ29udGFpbmVkSW4geyBJ
c0NvbnRhaW5lZEluLCBJc05vdENvbnRhaW5lZEluIH07Ci0gICAgYXV0byByZW1vdmVJZkNvbnRh
aW5lZEluVW5jaGVja2VkUmVzdWx0S2V5cyA9IFsmXSAoVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwp
IC0+IENvbnRhaW5lZEluIHsKLSAgICAgICAgYXV0byBpdGVyID0gdW5jaGVja2VkUmVzdWx0S2V5
cy5maW5kKGltcGwpOwotICAgICAgICBpZiAoaXRlciA9PSB1bmNoZWNrZWRSZXN1bHRLZXlzLmVu
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIElzTm90Q29udGFpbmVkSW47Ci0KLSAgICAgICAgdW5j
aGVja2VkUmVzdWx0S2V5cy5yZW1vdmUoaXRlcik7Ci0gICAgICAgIHJldHVybiBJc0NvbnRhaW5l
ZEluOwotICAgIH07Ci0KICAgICBmb3IgKFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBsIDogdGFyZ2V0
Tm9uQ29uZmlndXJhYmxlS2V5cykgewotICAgICAgICBpZiAocmVtb3ZlSWZDb250YWluZWRJblVu
Y2hlY2tlZFJlc3VsdEtleXMoaW1wbCkgPT0gSXNOb3RDb250YWluZWRJbikgeworICAgICAgICBp
ZiAoIXVuY2hlY2tlZFJlc3VsdEtleXMucmVtb3ZlKGltcGwpKSB7CiAgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBtYWtlU3RyaW5nKCJQcm94eSBvYmplY3Qn
cyAndGFyZ2V0JyBoYXMgdGhlIG5vbi1jb25maWd1cmFibGUgcHJvcGVydHkgJyIsIFN0cmluZyhp
bXBsKSwgIicgdGhhdCB3YXMgbm90IGluIHRoZSByZXN1bHQgZnJvbSB0aGUgJ293bktleXMnIHRy
YXAiKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTk5OSw3ICs5NzUsNyBA
QCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOCiAKICAgICBpZiAoIXRh
cmdldElzRXhlbnNpYmxlKSB7CiAgICAgICAgIGZvciAoVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwg
OiB0YXJnZXRDb25maWd1cmFibGVLZXlzKSB7Ci0gICAgICAgICAgICBpZiAocmVtb3ZlSWZDb250
YWluZWRJblVuY2hlY2tlZFJlc3VsdEtleXMoaW1wbCkgPT0gSXNOb3RDb250YWluZWRJbikgewor
ICAgICAgICAgICAgaWYgKCF1bmNoZWNrZWRSZXN1bHRLZXlzLnJlbW92ZShpbXBsKSkgewogICAg
ICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIG1ha2VTdHJp
bmcoIlByb3h5IG9iamVjdCdzIG5vbi1leHRlbnNpYmxlICd0YXJnZXQnIGhhcyBjb25maWd1cmFi
bGUgcHJvcGVydHkgJyIsIFN0cmluZyhpbXBsKSwgIicgdGhhdCB3YXMgbm90IGluIHRoZSByZXN1
bHQgZnJvbSB0aGUgJ293bktleXMnIHRyYXAiKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVj
dE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVmbGVjdE9iamVjdC5jcHAJKHJldmlzaW9uIDI3NTE1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsOSAr
MTEwLDkgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHJlZmxlY3RPYmplY3RDbwogICAgIGlm
ICghYXJndW1lbnRzT2JqZWN0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJl
cyB0aGUgc2Vjb25kIGFyZ3VtZW50IGJlIGFuIG9iamVjdCJfcykpOwogCi0gICAgY3JlYXRlTGlz
dEZyb21BcnJheUxpa2UoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNPYmplY3QsIFJ1bnRpbWVUeXBl
TWFza0FsbFR5cGVzLCAiVGhpcyBlcnJvciBtdXN0IG5vdCBiZSByYWlzZWQiX3MsICJUaGlzIGVy
cm9yIG11c3Qgbm90IGJlIHJhaXNlZCJfcywgWyZdIChKU1ZhbHVlIHZhbHVlLCBSdW50aW1lVHlw
ZSkgLT4gYm9vbCB7CisgICAgZm9yRWFjaEluQXJyYXlMaWtlKGdsb2JhbE9iamVjdCwgYXJndW1l
bnRzT2JqZWN0LCBbJl0gKEpTVmFsdWUgdmFsdWUpIC0+IGJvb2wgewogICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAoYXJndW1lbnRz
Lm92ZXJmbG93Q2hlY2tOb3ROZWVkZWQoKSwgZW5jb2RlZEpTVmFsdWUoKSkpOwogICAgIGlmIChV
TkxJS0VMWShhcmd1bWVudHMuaGFzT3ZlcmZsb3dlZCgpKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424689</attachid>
            <date>2021-03-30 13:47:41 -0700</date>
            <delta_ts>2021-03-30 16:34:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223928-20210330234739.patch</filename>
            <type>text/plain</type>
            <size>19984</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzUyMzApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDIxLTAzLTMwICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBjcmVhdGVMaXN0RnJvbUFycmF5TGlrZSgp
IGFuZCBQcm94eSdzIFtbT3duUHJvcGVydHlLZXlzXV0gbWV0aG9kCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM5MjgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9qc29uLXN0
cmluZ2lmeS1hcnJheS1yZXBsYWNlci5qczoKKyAgICAgICAgUmVkdWNlIHJ1bm5pbmcgdGltZSBm
cm9tIG92ZXIgMzUwbXMgdG8gfjYwbXMuCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcmVm
bGVjdC1vd24ta2V5cy1wcm94eS0yLmpzOiBBZGRlZC4KKyAgICAgICAgKiBtaWNyb2JlbmNobWFy
a3MvcmVmbGVjdC1vd24ta2V5cy1wcm94eS5qczogQWRkZWQuCisKIDIwMjEtMDMtMjYgIFl1c3Vr
ZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJ
Q1UgU1BJIGZvciBjYW5vbmljYWxpemF0aW9uCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9qc29uLXN0cmluZ2lmeS1hcnJheS1yZXBsYWNlci5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9qc29uLXN0cmluZ2lmeS1hcnJheS1yZXBsYWNlci5qcwkocmV2aXNp
b24gMjc1MTU5KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvanNvbi1zdHJpbmdpZnktYXJy
YXktcmVwbGFjZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzIEBACi1jb25zdCByZXBs
YWNlciA9IG5ldyBBcnJheSgxNSkuZmlsbCgna2V5Jyk7Ci1mb3IgKGxldCBpID0gMDsgaSA8IDFl
NjsgKytpKQordmFyIHJlcGxhY2VyID0gbmV3IEFycmF5KDI1KS5maWxsKCdrZXknKTsKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCiAgICAgSlNPTi5zdHJpbmdpZnkobnVsbCwgcmVwbGFj
ZXIpOwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1vd24ta2V5cy1wcm94
eS0yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3Qtb3du
LWtleXMtcHJveHktMi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9yZWZsZWN0LW93bi1rZXlzLXByb3h5LTIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NiBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciB0YXJnZXQgPSB7fTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDEwOyBpKyspCisgICAgICAgIHRhcmdldFsiayIgKyBpXSA9IGk7CisgICAgdmFy
IHRyYXBSZXN1bHQgPSBSZWZsZWN0Lm93bktleXModGFyZ2V0KTsKKyAgICB2YXIgcHJveHkgPSBu
ZXcgUHJveHkodGFyZ2V0LCB7CisgICAgICAgIG93bktleXM6IGZ1bmN0aW9uKCkgeyByZXR1cm4g
dHJhcFJlc3VsdDsgfSwKKyAgICB9KTsKKworICAgIHZhciBqID0gMCwgbGVuZ3RoU3VtID0gMDsK
KyAgICBmb3IgKDsgaiA8IDUwXzAwMDsgKytqKQorICAgICAgICBsZW5ndGhTdW0gKz0gUmVmbGVj
dC5vd25LZXlzKHByb3h5KS5sZW5ndGg7CisKKyAgICBpZiAobGVuZ3RoU3VtICE9PSB0cmFwUmVz
dWx0Lmxlbmd0aCAqIGopCisgICAgICAgIHRocm93ICJCYWQgYXNzZXJ0aW9uISI7Cit9KSgpOwpJ
bmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1vd24ta2V5cy1wcm94eS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LW93bi1rZXlzLXBy
b3h5LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3Qt
b3duLWtleXMtcHJveHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorKGZ1bmN0
aW9uKCkgeworICAgIHZhciB0cmFwUmVzdWx0ID0gW107CisgICAgdmFyIHByb3h5ID0gbmV3IFBy
b3h5KHt9LCB7CisgICAgICAgIG93bktleXM6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJhcFJlc3Vs
dDsgfSwKKyAgICB9KTsKKworICAgIHZhciBqID0gMCwgbGVuZ3RoU3VtID0gMDsKKyAgICBmb3Ig
KDsgaiA8IDIwMF8wMDA7ICsraikKKyAgICAgICAgbGVuZ3RoU3VtICs9IFJlZmxlY3Qub3duS2V5
cyhwcm94eSkubGVuZ3RoOworCisgICAgaWYgKGxlbmd0aFN1bSAhPT0gdHJhcFJlc3VsdC5sZW5n
dGggKiBqKQorICAgICAgICB0aHJvdyAiQmFkIGFzc2VydGlvbiEiOworfSkoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc1MTY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDIxLTAz
LTMwICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBP
cHRpbWl6ZSBjcmVhdGVMaXN0RnJvbUFycmF5TGlrZSgpIGFuZCBQcm94eSdzIFtbT3duUHJvcGVy
dHlLZXlzXV0gbWV0aG9kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjM5MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBjcmVhdGVMaXN0RnJvbUFycmF5TGlrZSgpIGNoYW5nZXM6CisKKyAgICAgICAgICAx
LiBVc2UgdG9MZW5ndGgoKSAvIGdldEluZGV4KCkgbWV0aG9kcyB0aGF0IGhhdmUgZmFzdCBwYXRo
cy4KKyAgICAgICAgICAyLiBSZW1vdmUgUnVudGltZVR5cGVNYXNrIGFuZCBlcnJvciBtZXNzYWdl
cyBmcm9tIGl0cyBzaWduYXR1cmU6IHR5cGUgY2hlY2tzIGFyZSBiZXR0ZXIKKyAgICAgICAgICAg
ICBwZXJmb3JtZWQgaW4gYWR2YW5jZSAvIGluc2lkZSBhIGZ1bmN0b3IgdG8ga2VlcCB0aGUgaGVs
cGVyIG1vcmUgdmVyc2F0aWxlLgorICAgICAgICAgIDMuIEludmVydCBmdW5jdG9yJ3MgcmV0dXJu
IHZhbHVlIHRvIGFsaWduIHdpdGggU3RydWN0dXJlOjpmb3JFYWNoUHJvcGVydHkoKSBhbmQgZnJp
ZW5kcy4KKyAgICAgICAgICA0LiBSZW5hbWUgaXQgdG8gZm9yRWFjaEluQXJyYXlMaWtlKCkgYXMg
bm8gbGlzdCBpcyBhY3R1YWxseSByZXR1cm5lZC4KKworICAgICAgICBQcm94eU9iamVjdDo6cGVy
Zm9ybUdldE93blByb3BlcnR5TmFtZXMoKSBjaGFuZ2VzOgorCisgICAgICAgICAgMS4gUmVtb3Zl
IFJ1bnRpbWVUeXBlTWFzayBmaWx0ZXJpbmcgYXMgaXQncyBhbHJlYWR5IHBlcmZvcm1lZCBieSBQ
cm9wZXJ0eU5hbWVBcnJheTo6YWRkKCkuCisgICAgICAgICAgMi4gU3RvcmUgdGFyZ2V0J3Mga2V5
cyBpbiBhIEhhc2hTZXQgZm9yIGZhc3RlciBpbnNlcnRpb24gLyBzZWFyY2guCisgICAgICAgICAg
My4gRG9uJ3QgcG9wdWxhdGUgYHRhcmdldENvbmZpZ3VyYWJsZUtleXNgIGZvciBleHRlbnNpYmxl
IHRhcmdldCBhcyBpdCB3b24ndCBiZSB1c2VkIFsxXS4KKyAgICAgICAgICA0LiBMZXZlcmFnZSBy
ZXR1cm4gdmFsdWUgb2YgSGFzaFNldDo6cmVtb3ZlKCkgaW5zdGVhZCBvZiB1c2luZyBhIGhlbHBl
ci4KKworICAgICAgICBUaGlzIHBhdGNoIGFkdmFuY2VzIFByb3h5J3MgW1tPd25Qcm9wZXJ0eUtl
eXNdXSBtaWNyb2JlbmNobWFya3MgYnkgMjAtMzAlLAorICAgICAgICBtYWlubHkgZHVlIHRvIGNy
ZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKCkgY2hhbmdlcy4gTm8gYmVoYXZpb3IgY2hhbmdlcy4KKwor
ICAgICAgICBBbHNvLCB1dGlsaXplcyBmb3JFYWNoSW5BcnJheUxpa2UoKSBmb3IgYWxsb3cgbGlz
dCBvZiBKU09OLnN0cmluZ2lmeSgpLgorCisgICAgICAgIFsxXTogaHR0cHM6Ly90YzM5LmVzL2Vj
bWEyNjIvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xv
dHMtb3ducHJvcGVydHlrZXlzIChzdGVwIDIwKQorCisgICAgICAgICogcnVudGltZS9BcnJheVBy
b3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnNsb3dKb2luKToKKyAgICAgICAgKEpTQzo6SlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6U3RyaW5naWZpZXIpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEluZGV4IGNvbnN0
KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpm
b3JFYWNoSW5BcnJheUxpa2UpOgorICAgICAgICAoSlNDOjpjcmVhdGVMaXN0RnJvbUFycmF5TGlr
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9Qcm94eU9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAg
ICogcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKToKKwogMjAyMS0wMy0yOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFICYgRU5BQkxFX0lO
REVYRURfREFUQUJBU0VfSU5fV09SS0VSUywgaXQgc2VlbXMgbGlrZSBpdCBpcyBvbiBmb3IgYWxs
IHBvcnRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc1MTU5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwOTgsNyArMTA5OCw3IEBACiAJCTUzOUJG
QkFFMjJBRDNDM0EwMDIzRjRDMCAvKiBXZWFrT2JqZWN0UmVmUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlCRkJBRDIyQUQzQzNBMDAy
M0Y0QzAgLyogV2Vha09iamVjdFJlZlByb3RvdHlwZS5oICovOyB9OwogCQk1MzlCRkJCMDIyQUQz
Q0RDMDAyM0Y0QzAgLyogSlNXZWFrT2JqZWN0UmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlCRkJBRjIyQUQzQ0RDMDAyM0Y0QzAgLyogSlNXZWFr
T2JqZWN0UmVmLmggKi87IH07CiAJCTUzOUREN0Y1MjNDMUJCQjUwMDkwNUYxMyAvKiBKU0FycmF5
SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzOUREN0Y0MjNDMUJCQTkwMDkwNUYxMyAvKiBKU0FycmF5SXRlcmF0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MzlGQjhCQTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUZCOEI5MUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5s
aW5lcy5oICovOyB9OworCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGlu
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUZC
OEI5MUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzQjRCRDEyMUY2OEIzMjUwMEQyQkVB
MyAvKiBXYXNtT3BzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzQjYwMUVDMjAzNEI4QzUwMDZC
RTY2NyAvKiBKU0Nhc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzQjYwMUVCMjAzNEI4QzUwMDZCRTY2NyAvKiBKU0Nhc3QuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0MyQ0U5QzIyRkNDM0Q2MDA4
QjI4NTMgLyogQWlySGVscGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNDMkNFOUIyMkZDQzNENjAwOEIyODUzIC8qIEFpckhlbHBlcnMuaCAqLzsg
fTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDI3NTE1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM4LDcgKzczOCw3IEBA
IHN0YXRpYyBKU1ZhbHVlIHNsb3dKb2luKEpTR2xvYmFsT2JqZWN0KiAKICAgICAgICAgcmV0dXJu
IGpzRW1wdHlTdHJpbmcodm0pOwogCiAgICAgLy8gNi4gTGV0IGVsZW1lbnQwIGJlIEdldChPLCAi
MCIpLgotICAgIEpTVmFsdWUgZWxlbWVudDAgPSB0aGlzT2JqZWN0LT5nZXRJbmRleChnbG9iYWxP
YmplY3QsIDApOworICAgIEpTVmFsdWUgZWxlbWVudDAgPSB0aGlzT2JqZWN0LT5nZXRJbmRleChn
bG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigwKSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8vIDcuIElmIGVsZW1lbnQwIGlzIHVuZGVmaW5l
ZCBvciBudWxsLCBsZXQgUiBiZSB0aGUgZW1wdHkgU3RyaW5nOyBvdGhlcndpc2UsIGxldCBSIGJl
ID8gVG9TdHJpbmcoZWxlbWVudDApLgpAQCAtMTA1Niw3ICsxMDU2LDcgQEAgSlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKGFycmF5UHJvdG9GdW5jUwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIEpTVmFsdWUgcmVzdWx0ID0gdGhpc09i
ai0+Z2V0SW5kZXgoZ2xvYmFsT2JqZWN0LCAwKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRoaXNP
YmotPmdldEluZGV4KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDApKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBzaGlm
dDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU2hpZnQ+KGdsb2JhbE9iamVjdCwgdGhpc09iaiwgMCwg
MSwgMCwgbGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmpl
Y3QuY3BwCShyZXZpc2lvbiAyNzUxNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDI4ICsyMzEsMjIgQEAgU3Ry
aW5naWZpZXI6OlN0cmluZ2lmaWVyKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgKTsKICAgICAgICAgICAgIGlmIChpc0FycmF5UmVwbGFjZXIp
IHsKICAgICAgICAgICAgICAgICBtX3VzaW5nQXJyYXlSZXBsYWNlciA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRvTGVuZ3Ro
KGdsb2JhbE9iamVjdCwgcmVwbGFjZXJPYmplY3QpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCApOwotICAgICAgICAgICAgICAgIGZvciAodWludDY0X3QgaW5k
ZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkgewotICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlIG5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkocmVwbGFjZXJP
YmplY3QpICYmIHJlcGxhY2VyT2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHJlcGxhY2VyT2JqZWN0LT5nZXRJbmRleFF1aWNr
bHkoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHJlcGxhY2VyT2JqZWN0LT5nZXQo
Z2xvYmFsT2JqZWN0LCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCApOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZm9yRWFjaEluQXJyYXlMaWtlKGdsb2JhbE9iamVjdCwgcmVwbGFjZXJPYmplY3QsIFsmXSAo
SlNWYWx1ZSBuYW1lKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUuaXNP
YmplY3QoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byogbmFtZU9iamVjdCA9IGpz
Q2FzdDxKU09iamVjdCo+KG5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1l
T2JqZWN0LT5pbmhlcml0czxOdW1iZXJPYmplY3Q+KHZtKSAmJiAhbmFtZU9iamVjdC0+aW5oZXJp
dHM8U3RyaW5nT2JqZWN0Pih2bSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIW5hbWUuaXNOdW1iZXIoKSAmJiAhbmFtZS5pc1N0cmluZygp
KQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKwogICAgICAgICAgICAgICAgICAgICBKU1N0cmluZyogcHJvcGVy
dHlOYW1lU3RyaW5nID0gbmFtZS50b1N0cmluZyhnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCApOworICAgICAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lU3RyaW5nLT50b0lkZW50aWZpZXIoZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFs
c2UpOwogICAgICAgICAgICAgICAgICAgICBtX2FycmF5UmVwbGFjZXJQcm9wZXJ0eU5hbWVzLmFk
ZChXVEZNb3ZlKHByb3BlcnR5TmFtZSkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAko
cmV2aXNpb24gMjc1MTU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDExLDYgKzQxMSwxNSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsKICAgICB9CiAKKyAgICBKU1ZhbHVlIGdldElu
ZGV4KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90IGkpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoTElLRUxZKGkgPD0gTUFYX0FSUkFZX0lOREVYKSkgeworICAgICAgICAg
ICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gdHJ5R2V0SW5kZXhRdWlja2x5KHN0YXRpY19jYXN0PHVu
c2lnbmVkPihpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CisgICAgfQorCiAgICAgYm9vbCBj
YW5TZXRJbmRleFF1aWNrbHlGb3JUeXBlZEFycmF5KHVuc2lnbmVkLCBKU1ZhbHVlKSBjb25zdDsK
ICAgICB2b2lkIHNldEluZGV4UXVpY2tseUZvclR5cGVkQXJyYXkodW5zaWduZWQsIEpTVmFsdWUp
OwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAyNzUxNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgIkJyYW5kZWRTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJCdXR0ZXJmbHlJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJKU0FycmF5SW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1
ZGUgIkpTVHlwZWRBcnJheXMuaCIKQEAgLTQzLDM3ICs0NCwxOCBAQCBDb21wbGV0ZVN1YnNwYWNl
KiBKU0ZpbmFsT2JqZWN0OjpzdWJzcGFjCiAgICAgcmV0dXJuICZ2bS5jZWxsU3BhY2U7CiB9CiAK
LS8vIFNlY3Rpb24gNy4zLjE3IG9mIHRoZSBzcGVjLgotdGVtcGxhdGUgPHR5cGVuYW1lIEFkZEZ1
bmN0aW9uPiAvLyBBZGQgZnVuY3Rpb24gc2hvdWxkIGhhdmUgYSB0eXBlIGxpa2U6IChKU1ZhbHVl
LCBSdW50aW1lVHlwZSkgLT4gYm9vbAotdm9pZCBjcmVhdGVMaXN0RnJvbUFycmF5TGlrZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGFycmF5TGlrZVZhbHVlLCBSdW50aW1l
VHlwZU1hc2sgbGVnYWxUeXBlc0ZpbHRlciwgY29uc3QgU3RyaW5nJiBub3RBbk9iamVjdEVycm9N
ZXNzYWdlLCBjb25zdCBTdHJpbmcmIGlsbGVnYWxUeXBlRXJyb3JNZXNzYWdlLCBBZGRGdW5jdGlv
biBhZGRGdW5jdGlvbikKKy8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbGlz
dGZyb21hcnJheWxpa2UKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiAvLyBBIGZ1bmN0b3Ig
c2hvdWxkIGhhdmUgYSB0eXBlIGxpa2U6IChKU1ZhbHVlKSAtPiBib29sCit2b2lkIGZvckVhY2hJ
bkFycmF5TGlrZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYXJyYXlM
aWtlT2JqZWN0LCBGdW5jdG9yIGZ1bmN0b3IpCiB7CiAgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICBpZiAoIWFycmF5TGlrZVZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgbm90QW5PYmplY3RFcnJvTWVzc2FnZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPEpTVmFsdWU+IHJlc3VsdDsKLSAgICBK
U1ZhbHVlIGxlbmd0aFByb3BlcnR5ID0gYXJyYXlMaWtlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwotICAgIGRvdWJsZSBsZW5ndGhBc0RvdWJsZSA9IGxlbmd0aFByb3BlcnR5LnRv
TGVuZ3RoKGdsb2JhbE9iamVjdCk7CisgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgYXJyYXlMaWtlT2JqZWN0KSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChs
ZW5ndGhBc0RvdWJsZSA+PSAwLjAgJiYgbGVuZ3RoQXNEb3VibGUgPT0gc3RkOjp0cnVuYyhsZW5n
dGhBc0RvdWJsZSkpOwotICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihsZW5ndGhBc0RvdWJsZSk7CiAgICAgZm9yICh1aW50NjRfdCBpbmRleCA9IDA7IGluZGV4IDwg
bGVuZ3RoOyBpbmRleCsrKSB7Ci0gICAgICAgIEpTVmFsdWUgbmV4dCA9IGFycmF5TGlrZVZhbHVl
LmdldChnbG9iYWxPYmplY3QsIGluZGV4KTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGFycmF5
TGlrZU9iamVjdC0+Z2V0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgIAotICAgICAgICBSdW50aW1l
VHlwZSB0eXBlID0gcnVudGltZVR5cGVGb3JWYWx1ZSh2bSwgbmV4dCk7Ci0gICAgICAgIGlmICgh
KHR5cGUgJiBsZWdhbFR5cGVzRmlsdGVyKSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgaWxsZWdhbFR5cGVFcnJvck1lc3NhZ2UpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIGV4aXRFYXJseSA9
IGFkZEZ1bmN0aW9uKG5leHQsIHR5cGUpOwotICAgICAgICBpZiAoZXhpdEVhcmx5KQorICAgICAg
ICBpZiAoIWZ1bmN0b3IodmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJl
dmlzaW9uIDI3NTE1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIzLDQ0ICs5MjMsMzAgQEAgdm9pZCBQcm94eU9i
amVjdDo6cGVyZm9ybUdldE93blByb3BlcnR5TgogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNh
bGwoZ2xvYmFsT2JqZWN0LCBvd25LZXlzTWV0aG9kLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1l
bnRzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCisgICAgaWYg
KCF0cmFwUmVzdWx0LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgbWV0aG9kIG11c3QgcmV0
dXJuIGFuIG9iamVjdCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBIYXNoU2V0
PFVuaXF1ZWRTdHJpbmdJbXBsKj4gdW5jaGVja2VkUmVzdWx0S2V5czsKLSAgICB7Ci0gICAgICAg
IFJ1bnRpbWVUeXBlTWFzayByZXN1bHRGaWx0ZXIgPSAwOwotICAgICAgICBzd2l0Y2ggKHByb3Bl
cnR5TmFtZXMucHJvcGVydHlOYW1lTW9kZSgpKSB7Ci0gICAgICAgIGNhc2UgUHJvcGVydHlOYW1l
TW9kZTo6U3ltYm9sczoKLSAgICAgICAgICAgIHJlc3VsdEZpbHRlciA9IFR5cGVTeW1ib2w7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdz
OgotICAgICAgICAgICAgcmVzdWx0RmlsdGVyID0gVHlwZVN0cmluZzsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzOgot
ICAgICAgICAgICAgcmVzdWx0RmlsdGVyID0gVHlwZVN5bWJvbCB8IFR5cGVTdHJpbmc7Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICBmb3JFYWNoSW5BcnJheUxpa2UoZ2xvYmFsT2JqZWN0LCBhc09i
amVjdCh0cmFwUmVzdWx0KSwgWyZdIChKU1ZhbHVlIHZhbHVlKSAtPiBib29sIHsKKyAgICAgICAg
aWYgKCF2YWx1ZS5pc1N0cmluZygpICYmICF2YWx1ZS5pc1N5bWJvbCgpKSB7CisgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUHJveHkgaGFuZGxlcidzICdv
d25LZXlzJyBtZXRob2QgbXVzdCByZXR1cm4gYW4gYXJyYXktbGlrZSBvYmplY3QgY29udGFpbmlu
ZyBvbmx5IFN0cmluZ3MgYW5kIFN5bWJvbHMiX3MpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChyZXN1bHRGaWx0ZXIpOwogCi0gICAgICAgIGF1
dG8gYWRkUHJvcE5hbWUgPSBbJl0gKEpTVmFsdWUgdmFsdWUsIFJ1bnRpbWVUeXBlIHR5cGUpIC0+
IGJvb2wgewotICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGRvRXhpdEVhcmx5ID0g
dHJ1ZTsKLSAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBkb250RXhpdEVhcmx5ID0g
ZmFsc2U7Ci0KLSAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnQgPSB2YWx1ZS50b1Byb3BlcnR5
S2V5KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBkb0V4aXRFYXJseSk7Ci0KLSAgICAgICAgICAgIGlmICghdW5jaGVja2VkUmVzdWx0S2V5cy5h
ZGQoaWRlbnQuaW1wbCgpKS5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgdHJh
cCByZXN1bHQgbXVzdCBub3QgY29udGFpbiBhbnkgZHVwbGljYXRlIG5hbWVzIl9zKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZG9FeGl0RWFybHk7Ci0gICAgICAgICAgICB9CisgICAgICAgIElk
ZW50aWZpZXIgaWRlbnQgPSB2YWx1ZS50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAotICAgICAgICAgICAgaWYg
KHR5cGUgJiByZXN1bHRGaWx0ZXIpCi0gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
aWRlbnQuaW1wbCgpKTsKLQotICAgICAgICAgICAgcmV0dXJuIGRvbnRFeGl0RWFybHk7Ci0gICAg
ICAgIH07CisgICAgICAgIGlmICghdW5jaGVja2VkUmVzdWx0S2V5cy5hZGQoaWRlbnQuaW1wbCgp
KS5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiUHJveHkgaGFuZGxlcidzICdvd25LZXlzJyB0cmFwIHJlc3VsdCBtdXN0IG5vdCBj
b250YWluIGFueSBkdXBsaWNhdGUgbmFtZXMiX3MpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CiAKLSAgICAgICAgUnVudGltZVR5cGVNYXNrIGRvbnRUaHJvd0FuRXhjZXB0
aW9uVHlwZUZpbHRlciA9IFR5cGVTdHJpbmcgfCBUeXBlU3ltYm9sOwotICAgICAgICBjcmVhdGVM
aXN0RnJvbUFycmF5TGlrZShnbG9iYWxPYmplY3QsIHRyYXBSZXN1bHQsIGRvbnRUaHJvd0FuRXhj
ZXB0aW9uVHlwZUZpbHRlciwgIlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgbWV0aG9kIG11c3Qg
cmV0dXJuIGFuIG9iamVjdCJfcywgIlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgbWV0aG9kIG11
c3QgcmV0dXJuIGFuIGFycmF5LWxpa2Ugb2JqZWN0IGNvbnRhaW5pbmcgb25seSBTdHJpbmdzIGFu
ZCBTeW1ib2xzIl9zLCBhZGRQcm9wTmFtZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7Ci0gICAgfQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChpZGVudCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CiAKICAgICBib29sIHRhcmdldElzRXhlbnNpYmxlID0gdGFyZ2V0LT5p
c0V4dGVuc2libGUoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwpAQCAtOTY4LDMwICs5NTQsMjAgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9y
bUdldE93blByb3BlcnR5TgogICAgIFByb3BlcnR5TmFtZUFycmF5IHRhcmdldEtleXModm0sIFBy
b3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhj
bHVkZSk7CiAgICAgdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMo
dGFyZ2V0LCBnbG9iYWxPYmplY3QsIHRhcmdldEtleXMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6
OkluY2x1ZGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAg
VmVjdG9yPFVuaXF1ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Q29uZmlndXJhYmxlS2V5czsKLSAgICBW
ZWN0b3I8VW5pcXVlZFN0cmluZ0ltcGwqPiB0YXJnZXROb25Db25maWd1cmFibGVLZXlzOworICAg
IEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiB0YXJnZXROb25Db25maWd1cmFibGVLZXlzOwor
ICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiB0YXJnZXRDb25maWd1cmFibGVLZXlzOwog
ICAgIGZvciAoY29uc3QgSWRlbnRpZmllciYgaWRlbnQgOiB0YXJnZXRLZXlzKSB7CiAgICAgICAg
IFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgICAgICBib29sIGlzUHJvcGVydHlE
ZWZpbmVkID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0LCBp
ZGVudC5pbXBsKCksIGRlc2NyaXB0b3IpOyAKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKICAgICAgICAgaWYgKGlzUHJvcGVydHlEZWZpbmVkICYmICFkZXNjcmlw
dG9yLmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgdGFyZ2V0Tm9uQ29uZmlndXJhYmxlS2V5
cy5hcHBlbmQoaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGFyZ2V0
Q29uZmlndXJhYmxlS2V5cy5hcHBlbmQoaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIHRhcmdl
dE5vbkNvbmZpZ3VyYWJsZUtleXMuYWRkKGlkZW50LmltcGwoKSk7CisgICAgICAgIGVsc2UgaWYg
KCF0YXJnZXRJc0V4ZW5zaWJsZSkKKyAgICAgICAgICAgIHRhcmdldENvbmZpZ3VyYWJsZUtleXMu
YWRkKGlkZW50LmltcGwoKSk7CiAgICAgfQogCi0gICAgZW51bSBDb250YWluZWRJbiB7IElzQ29u
dGFpbmVkSW4sIElzTm90Q29udGFpbmVkSW4gfTsKLSAgICBhdXRvIHJlbW92ZUlmQ29udGFpbmVk
SW5VbmNoZWNrZWRSZXN1bHRLZXlzID0gWyZdIChVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCkgLT4g
Q29udGFpbmVkSW4gewotICAgICAgICBhdXRvIGl0ZXIgPSB1bmNoZWNrZWRSZXN1bHRLZXlzLmZp
bmQoaW1wbCk7Ci0gICAgICAgIGlmIChpdGVyID09IHVuY2hlY2tlZFJlc3VsdEtleXMuZW5kKCkp
Ci0gICAgICAgICAgICByZXR1cm4gSXNOb3RDb250YWluZWRJbjsKLQotICAgICAgICB1bmNoZWNr
ZWRSZXN1bHRLZXlzLnJlbW92ZShpdGVyKTsKLSAgICAgICAgcmV0dXJuIElzQ29udGFpbmVkSW47
Ci0gICAgfTsKLQogICAgIGZvciAoVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwgOiB0YXJnZXROb25D
b25maWd1cmFibGVLZXlzKSB7Ci0gICAgICAgIGlmIChyZW1vdmVJZkNvbnRhaW5lZEluVW5jaGVj
a2VkUmVzdWx0S2V5cyhpbXBsKSA9PSBJc05vdENvbnRhaW5lZEluKSB7CisgICAgICAgIGlmICgh
dW5jaGVja2VkUmVzdWx0S2V5cy5yZW1vdmUoaW1wbCkpIHsKICAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIG1ha2VTdHJpbmcoIlByb3h5IG9iamVjdCdzICd0
YXJnZXQnIGhhcyB0aGUgbm9uLWNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSAnIiwgU3RyaW5nKGltcGwp
LCAiJyB0aGF0IHdhcyBub3QgaW4gdGhlIHJlc3VsdCBmcm9tIHRoZSAnb3duS2V5cycgdHJhcCIp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtOTk5LDcgKzk3NSw3IEBAIHZv
aWQgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU4KIAogICAgIGlmICghdGFyZ2V0
SXNFeGVuc2libGUpIHsKICAgICAgICAgZm9yIChVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCA6IHRh
cmdldENvbmZpZ3VyYWJsZUtleXMpIHsKLSAgICAgICAgICAgIGlmIChyZW1vdmVJZkNvbnRhaW5l
ZEluVW5jaGVja2VkUmVzdWx0S2V5cyhpbXBsKSA9PSBJc05vdENvbnRhaW5lZEluKSB7CisgICAg
ICAgICAgICBpZiAoIXVuY2hlY2tlZFJlc3VsdEtleXMucmVtb3ZlKGltcGwpKSB7CiAgICAgICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgbWFrZVN0cmluZygi
UHJveHkgb2JqZWN0J3Mgbm9uLWV4dGVuc2libGUgJ3RhcmdldCcgaGFzIGNvbmZpZ3VyYWJsZSBw
cm9wZXJ0eSAnIiwgU3RyaW5nKGltcGwpLCAiJyB0aGF0IHdhcyBub3QgaW4gdGhlIHJlc3VsdCBm
cm9tIHRoZSAnb3duS2V5cycgdHJhcCIpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZs
ZWN0T2JqZWN0LmNwcAkocmV2aXNpb24gMjc1MTU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw5ICsxMTAs
OSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ocmVmbGVjdE9iamVjdENvCiAgICAgaWYgKCFh
cmd1bWVudHNPYmplY3QpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlJlZmxlY3QuY29uc3RydWN0IHJlcXVpcmVzIHRo
ZSBzZWNvbmQgYXJndW1lbnQgYmUgYW4gb2JqZWN0Il9zKSk7CiAKLSAgICBjcmVhdGVMaXN0RnJv
bUFycmF5TGlrZShnbG9iYWxPYmplY3QsIGFyZ3VtZW50c09iamVjdCwgUnVudGltZVR5cGVNYXNr
QWxsVHlwZXMsICJUaGlzIGVycm9yIG11c3Qgbm90IGJlIHJhaXNlZCJfcywgIlRoaXMgZXJyb3Ig
bXVzdCBub3QgYmUgcmFpc2VkIl9zLCBbJl0gKEpTVmFsdWUgdmFsdWUsIFJ1bnRpbWVUeXBlKSAt
PiBib29sIHsKKyAgICBmb3JFYWNoSW5BcnJheUxpa2UoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNP
YmplY3QsIFsmXSAoSlNWYWx1ZSB2YWx1ZSkgLT4gYm9vbCB7CiAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQodmFsdWUpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIChhcmd1bWVudHMub3Zl
cmZsb3dDaGVja05vdE5lZWRlZCgpLCBlbmNvZGVkSlNWYWx1ZSgpKSk7CiAgICAgaWYgKFVOTElL
RUxZKGFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424714</attachid>
            <date>2021-03-30 16:34:55 -0700</date>
            <delta_ts>2021-04-01 09:07:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223928-20210331023454.patch</filename>
            <type>text/plain</type>
            <size>19018</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzUyNDIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDIxLTAzLTMwICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBjcmVhdGVMaXN0RnJvbUFycmF5TGlrZSgp
IGFuZCBQcm94eSdzIFtbT3duUHJvcGVydHlLZXlzXV0gbWV0aG9kCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM5MjgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9qc29uLXN0
cmluZ2lmeS1hcnJheS1yZXBsYWNlci5qczoKKyAgICAgICAgUmVkdWNlIHJ1bm5pbmcgdGltZSBm
cm9tIG92ZXIgMzUwbXMgdG8gfjYwbXMuCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcmVm
bGVjdC1vd24ta2V5cy1wcm94eS0yLmpzOiBBZGRlZC4KKyAgICAgICAgKiBtaWNyb2JlbmNobWFy
a3MvcmVmbGVjdC1vd24ta2V5cy1wcm94eS5qczogQWRkZWQuCisKIDIwMjEtMDMtMjkgIFJ5YW4g
SGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCB0ZXN0
IGdhcmRlbmluZy4KSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2pzb24tc3RyaW5naWZ5
LWFycmF5LXJlcGxhY2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L2pzb24tc3RyaW5naWZ5LWFycmF5LXJlcGxhY2VyLmpzCShyZXZpc2lvbiAyNzUxNTkpCisrKyBK
U1Rlc3RzL21pY3JvYmVuY2htYXJrcy9qc29uLXN0cmluZ2lmeS1hcnJheS1yZXBsYWNlci5qcwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMgQEAKLWNvbnN0IHJlcGxhY2VyID0gbmV3IEFycmF5
KDE1KS5maWxsKCdrZXknKTsKLWZvciAobGV0IGkgPSAwOyBpIDwgMWU2OyArK2kpCit2YXIgcmVw
bGFjZXIgPSBuZXcgQXJyYXkoMjUpLmZpbGwoJ2tleScpOworZm9yICh2YXIgaSA9IDA7IGkgPCAx
ZTU7ICsraSkKICAgICBKU09OLnN0cmluZ2lmeShudWxsLCByZXBsYWNlcik7CkluZGV4OiBKU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LW93bi1rZXlzLXByb3h5LTIuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1vd24ta2V5cy1wcm94eS0yLmpz
CShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3Qtb3duLWtl
eXMtcHJveHktMi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACisoZnVuY3Rpb24o
KSB7CisgICAgdmFyIHRhcmdldCA9IHt9OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkr
KykKKyAgICAgICAgdGFyZ2V0WyJrIiArIGldID0gaTsKKyAgICB2YXIgdHJhcFJlc3VsdCA9IFJl
ZmxlY3Qub3duS2V5cyh0YXJnZXQpOworICAgIHZhciBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQs
IHsKKyAgICAgICAgb3duS2V5czogZnVuY3Rpb24oKSB7IHJldHVybiB0cmFwUmVzdWx0OyB9LAor
ICAgIH0pOworCisgICAgdmFyIGogPSAwLCBsZW5ndGhTdW0gPSAwOworICAgIGZvciAoOyBqIDwg
NTBfMDAwOyArK2opCisgICAgICAgIGxlbmd0aFN1bSArPSBSZWZsZWN0Lm93bktleXMocHJveHkp
Lmxlbmd0aDsKKworICAgIGlmIChsZW5ndGhTdW0gIT09IHRyYXBSZXN1bHQubGVuZ3RoICogaikK
KyAgICAgICAgdGhyb3cgIkJhZCBhc3NlcnRpb24hIjsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9yZWZsZWN0LW93bi1rZXlzLXByb3h5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3Qtb3duLWtleXMtcHJveHkuanMJKG5vbmV4aXN0
ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1vd24ta2V5cy1wcm94eS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFy
IHRyYXBSZXN1bHQgPSBbXTsKKyAgICB2YXIgcHJveHkgPSBuZXcgUHJveHkoe30sIHsKKyAgICAg
ICAgb3duS2V5czogZnVuY3Rpb24oKSB7IHJldHVybiB0cmFwUmVzdWx0OyB9LAorICAgIH0pOwor
CisgICAgdmFyIGogPSAwLCBsZW5ndGhTdW0gPSAwOworICAgIGZvciAoOyBqIDwgMjAwXzAwMDsg
KytqKQorICAgICAgICBsZW5ndGhTdW0gKz0gUmVmbGVjdC5vd25LZXlzKHByb3h5KS5sZW5ndGg7
CisKKyAgICBpZiAobGVuZ3RoU3VtICE9PSB0cmFwUmVzdWx0Lmxlbmd0aCAqIGopCisgICAgICAg
IHRocm93ICJCYWQgYXNzZXJ0aW9uISI7Cit9KSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyNzUxNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMjEtMDMtMzAgIEFsZXhleSBTaHZh
eWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIE9wdGltaXplIGNyZWF0ZUxp
c3RGcm9tQXJyYXlMaWtlKCkgYW5kIFByb3h5J3MgW1tPd25Qcm9wZXJ0eUtleXNdXSBtZXRob2QK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzkyOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGNyZWF0ZUxp
c3RGcm9tQXJyYXlMaWtlKCkgY2hhbmdlczoKKworICAgICAgICAgIDEuIFVzZSB0b0xlbmd0aCgp
IC8gZ2V0SW5kZXgoKSBtZXRob2RzIHRoYXQgaGF2ZSBmYXN0IHBhdGhzLgorICAgICAgICAgIDIu
IFJlbW92ZSBSdW50aW1lVHlwZU1hc2sgYW5kIGVycm9yIG1lc3NhZ2VzIGZyb20gaXRzIHNpZ25h
dHVyZTogdHlwZSBjaGVja3MgYXJlIGJldHRlcgorICAgICAgICAgICAgIHBlcmZvcm1lZCBpbiBh
ZHZhbmNlIC8gaW5zaWRlIGEgZnVuY3RvciB0byBrZWVwIHRoZSBoZWxwZXIgbW9yZSB2ZXJzYXRp
bGUuCisgICAgICAgICAgMy4gSW52ZXJ0IGZ1bmN0b3IncyByZXR1cm4gdmFsdWUgdG8gYWxpZ24g
d2l0aCBTdHJ1Y3R1cmU6OmZvckVhY2hQcm9wZXJ0eSgpIGFuZCBmcmllbmRzLgorICAgICAgICAg
IDQuIFJlbmFtZSBpdCB0byBmb3JFYWNoSW5BcnJheUxpa2UoKSBhcyBubyBsaXN0IGlzIGFjdHVh
bGx5IHJldHVybmVkLgorCisgICAgICAgIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVy
dHlOYW1lcygpIGNoYW5nZXM6CisKKyAgICAgICAgICAxLiBSZW1vdmUgUnVudGltZVR5cGVNYXNr
IGZpbHRlcmluZyBhcyBpdCdzIGFscmVhZHkgcGVyZm9ybWVkIGJ5IFByb3BlcnR5TmFtZUFycmF5
OjphZGQoKS4KKyAgICAgICAgICAyLiBTdG9yZSB0YXJnZXQncyBrZXlzIGluIGEgSGFzaFNldCBm
b3IgZmFzdGVyIGluc2VydGlvbiAvIHNlYXJjaC4KKyAgICAgICAgICAzLiBEb24ndCBwb3B1bGF0
ZSBgdGFyZ2V0Q29uZmlndXJhYmxlS2V5c2AgZm9yIGV4dGVuc2libGUgdGFyZ2V0IGFzIGl0IHdv
bid0IGJlIHVzZWQgWzFdLgorICAgICAgICAgIDQuIExldmVyYWdlIHJldHVybiB2YWx1ZSBvZiBI
YXNoU2V0OjpyZW1vdmUoKSBpbnN0ZWFkIG9mIHVzaW5nIGEgaGVscGVyLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggYWR2YW5jZXMgUHJveHkncyBbW093blByb3BlcnR5S2V5c11dIG1pY3JvYmVuY2ht
YXJrcyBieSAyMC0zMCUsCisgICAgICAgIG1haW5seSBkdWUgdG8gY3JlYXRlTGlzdEZyb21BcnJh
eUxpa2UoKSBjaGFuZ2VzLiBObyBiZWhhdmlvciBjaGFuZ2VzLgorCisgICAgICAgIEFsc28sIHV0
aWxpemVzIGZvckVhY2hJbkFycmF5TGlrZSgpIGZvciBhbGxvdyBsaXN0IG9mIEpTT04uc3RyaW5n
aWZ5KCkuCisKKyAgICAgICAgWzFdOiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb3h5
LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1vd25wcm9wZXJ0eWtl
eXMgKHN0ZXAgMjApCisKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpTdHJpbmdpZmllcjo6U3RyaW5naWZpZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNP
YmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEluZGV4IGNvbnN0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpmb3JFYWNoSW5B
cnJheUxpa2UpOgorICAgICAgICAoSlNDOjpjcmVhdGVMaXN0RnJvbUFycmF5TGlrZSk6IERlbGV0
ZWQuCisgICAgICAgICogcnVudGltZS9Qcm94eU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlBy
b3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGlt
ZS9SZWZsZWN0T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKToKKwogMjAyMS0wMy0yOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVtb3ZlIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFICYgRU5BQkxFX0lOREVYRURfREFU
QUJBU0VfSU5fV09SS0VSUywgaXQgc2VlbXMgbGlrZSBpdCBpcyBvbiBmb3IgYWxsIHBvcnRzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNzUxNTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTkzMyw2ICs5MzMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
CiAgICAgcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAogICAgIHJ1bnRpbWUvSXRlcmF0b3JQ
cm90b3R5cGUuaAogICAgIHJ1bnRpbWUvSlNBcnJheS5oCisgICAgcnVudGltZS9KU0FycmF5SW5s
aW5lcy5oCiAgICAgcnVudGltZS9KU0FycmF5QnVmZmVyLmgKICAgICBydW50aW1lL0pTQXJyYXlC
dWZmZXJQcm90b3R5cGUuaAogICAgIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI3NTE1OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDk4LDcgKzEwOTgsNyBAQAogCQk1MzlCRkJBRTIyQUQzQzNBMDAy
M0Y0QzAgLyogV2Vha09iamVjdFJlZlByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM5QkZCQUQyMkFEM0MzQTAwMjNGNEMwIC8qIFdlYWtP
YmplY3RSZWZQcm90b3R5cGUuaCAqLzsgfTsKIAkJNTM5QkZCQjAyMkFEM0NEQzAwMjNGNEMwIC8q
IEpTV2Vha09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTM5QkZCQUYyMkFEM0NEQzAwMjNGNEMwIC8qIEpTV2Vha09iamVjdFJlZi5oICov
OyB9OwogCQk1MzlERDdGNTIzQzFCQkI1MDA5MDVGMTMgLyogSlNBcnJheUl0ZXJhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlERDdGNDIzQzFC
QkE5MDA5MDVGMTMgLyogSlNBcnJheUl0ZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTM5RkI4QkExQzk5REE3QzAwOTQwRkExIC8qIEpT
QXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzlGQjhCOTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLzsgfTsK
KwkJNTM5RkI4QkExQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlGQjhCOTFDOTlEQTdDMDA5
NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1M0I0QkQxMjFGNjhCMzI1MDBEMkJFQTMgLyogV2FzbU9wcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMzQjE1REUx
REM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0I2MDFFQzIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0I2MDFF
QjIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNDMkNFOUMyMkZDQzNENjAwOEIyODUzIC8qIEFpckhl
bHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
QzJDRTlCMjJGQ0MzRDYwMDhCMjg1MyAvKiBBaXJIZWxwZXJzLmggKi87IH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkocmV2aXNpb24gMjc1
MTU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzMSwyOCArMjMxLDIyIEBAIFN0cmluZ2lmaWVyOjpTdHJpbmdpZmll
cihKU0dsb2JhbE9iamVjdCoKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
ICk7CiAgICAgICAgICAgICBpZiAoaXNBcnJheVJlcGxhY2VyKSB7CiAgICAgICAgICAgICAgICAg
bV91c2luZ0FycmF5UmVwbGFjZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxl
bmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9iYWxPYmplY3QsIHJlcGxh
Y2VyT2JqZWN0KSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
KTsKLSAgICAgICAgICAgICAgICBmb3IgKHVpbnQ2NF90IGluZGV4ID0gMDsgaW5kZXggPCBsZW5n
dGg7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBuYW1lOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KHJlcGxhY2VyT2JqZWN0KSAmJiByZXBsYWNlck9i
amVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IG5hbWUgPSByZXBsYWNlck9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KHN0YXRpY19jYXN0PHVpbnQz
Ml90PihpbmRleCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbWUgPSByZXBsYWNlck9iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgaW5kZXgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgKTsK
LSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvckVhY2hJbkFycmF5TGlr
ZShnbG9iYWxPYmplY3QsIHJlcGxhY2VyT2JqZWN0LCBbJl0gKEpTVmFsdWUgbmFtZSkgLT4gYm9v
bCB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lLmlzT2JqZWN0KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8qIG5hbWVPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihuYW1l
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmFtZU9iamVjdC0+aW5oZXJpdHM8TnVt
YmVyT2JqZWN0Pih2bSkgJiYgIW5hbWVPYmplY3QtPmluaGVyaXRzPFN0cmluZ09iamVjdD4odm0p
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCFuYW1lLmlzTnVtYmVyKCkgJiYgIW5hbWUuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisK
ICAgICAgICAgICAgICAgICAgICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZVN0cmluZyA9IG5hbWUu
dG9TdHJpbmcoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IHByb3BlcnR5TmFtZVN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsICk7CisgICAgICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgICAgICAg
ICAgICAgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcy5hZGQoV1RGTW92ZShwcm9wZXJ0eU5h
bWUpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsICk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDI3NTE1OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwNCw3ICs0MDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAg
ICAgfQogICAgICAgICAKLSAgICBKU1ZhbHVlIGdldEluZGV4KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIHVuc2lnbmVkIGkpIGNvbnN0CisgICAgSlNWYWx1ZSBnZXRJbmRleChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBpKSBjb25zdAogICAgIHsKICAgICAgICAg
aWYgKEpTVmFsdWUgcmVzdWx0ID0gdHJ5R2V0SW5kZXhRdWlja2x5KGkpKQogICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAyNzUxNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIkJyYW5kZWRTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJCdXR0ZXJm
bHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJKU0FycmF5SW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2lu
Y2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKQEAgLTQzLDM3ICs0NCwxOCBAQCBDb21wbGV0ZVN1YnNw
YWNlKiBKU0ZpbmFsT2JqZWN0OjpzdWJzcGFjCiAgICAgcmV0dXJuICZ2bS5jZWxsU3BhY2U7CiB9
CiAKLS8vIFNlY3Rpb24gNy4zLjE3IG9mIHRoZSBzcGVjLgotdGVtcGxhdGUgPHR5cGVuYW1lIEFk
ZEZ1bmN0aW9uPiAvLyBBZGQgZnVuY3Rpb24gc2hvdWxkIGhhdmUgYSB0eXBlIGxpa2U6IChKU1Zh
bHVlLCBSdW50aW1lVHlwZSkgLT4gYm9vbAotdm9pZCBjcmVhdGVMaXN0RnJvbUFycmF5TGlrZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGFycmF5TGlrZVZhbHVlLCBSdW50
aW1lVHlwZU1hc2sgbGVnYWxUeXBlc0ZpbHRlciwgY29uc3QgU3RyaW5nJiBub3RBbk9iamVjdEVy
cm9NZXNzYWdlLCBjb25zdCBTdHJpbmcmIGlsbGVnYWxUeXBlRXJyb3JNZXNzYWdlLCBBZGRGdW5j
dGlvbiBhZGRGdW5jdGlvbikKKy8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRl
bGlzdGZyb21hcnJheWxpa2UKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiAvLyBBIGZ1bmN0
b3Igc2hvdWxkIGhhdmUgYSB0eXBlIGxpa2U6IChKU1ZhbHVlKSAtPiBib29sCit2b2lkIGZvckVh
Y2hJbkFycmF5TGlrZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYXJy
YXlMaWtlT2JqZWN0LCBGdW5jdG9yIGZ1bmN0b3IpCiB7CiAgICAgVk0mIHZtID0gZ2V0Vk0oZ2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0K
LSAgICBpZiAoIWFycmF5TGlrZVZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgbm90QW5PYmplY3RFcnJvTWVzc2FnZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPEpTVmFsdWU+IHJlc3VsdDsKLSAg
ICBKU1ZhbHVlIGxlbmd0aFByb3BlcnR5ID0gYXJyYXlMaWtlVmFsdWUuZ2V0KGdsb2JhbE9iamVj
dCwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwotICAgIGRvdWJsZSBsZW5ndGhBc0RvdWJsZSA9IGxlbmd0aFByb3BlcnR5
LnRvTGVuZ3RoKGdsb2JhbE9iamVjdCk7CisgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgYXJyYXlMaWtlT2JqZWN0KSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICBSRUxFQVNFX0FTU0VS
VChsZW5ndGhBc0RvdWJsZSA+PSAwLjAgJiYgbGVuZ3RoQXNEb3VibGUgPT0gc3RkOjp0cnVuYyhs
ZW5ndGhBc0RvdWJsZSkpOwotICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihsZW5ndGhBc0RvdWJsZSk7CiAgICAgZm9yICh1aW50NjRfdCBpbmRleCA9IDA7IGluZGV4
IDwgbGVuZ3RoOyBpbmRleCsrKSB7Ci0gICAgICAgIEpTVmFsdWUgbmV4dCA9IGFycmF5TGlrZVZh
bHVlLmdldChnbG9iYWxPYmplY3QsIGluZGV4KTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGFy
cmF5TGlrZU9iamVjdC0+Z2V0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgIAotICAgICAgICBSdW50
aW1lVHlwZSB0eXBlID0gcnVudGltZVR5cGVGb3JWYWx1ZSh2bSwgbmV4dCk7Ci0gICAgICAgIGlm
ICghKHR5cGUgJiBsZWdhbFR5cGVzRmlsdGVyKSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgaWxsZWdhbFR5cGVFcnJvck1lc3NhZ2UpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIGV4aXRFYXJs
eSA9IGFkZEZ1bmN0aW9uKG5leHQsIHR5cGUpOwotICAgICAgICBpZiAoZXhpdEVhcmx5KQorICAg
ICAgICBpZiAoIWZ1bmN0b3IodmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJ
KHJldmlzaW9uIDI3NTE1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIzLDQ0ICs5MjMsMzAgQEAgdm9pZCBQcm94
eU9iamVjdDo6cGVyZm9ybUdldE93blByb3BlcnR5TgogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9
IGNhbGwoZ2xvYmFsT2JqZWN0LCBvd25LZXlzTWV0aG9kLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJn
dW1lbnRzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCisgICAg
aWYgKCF0cmFwUmVzdWx0LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgbWV0aG9kIG11c3Qg
cmV0dXJuIGFuIG9iamVjdCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBIYXNo
U2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gdW5jaGVja2VkUmVzdWx0S2V5czsKLSAgICB7Ci0gICAg
ICAgIFJ1bnRpbWVUeXBlTWFzayByZXN1bHRGaWx0ZXIgPSAwOwotICAgICAgICBzd2l0Y2ggKHBy
b3BlcnR5TmFtZXMucHJvcGVydHlOYW1lTW9kZSgpKSB7Ci0gICAgICAgIGNhc2UgUHJvcGVydHlO
YW1lTW9kZTo6U3ltYm9sczoKLSAgICAgICAgICAgIHJlc3VsdEZpbHRlciA9IFR5cGVTeW1ib2w7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJp
bmdzOgotICAgICAgICAgICAgcmVzdWx0RmlsdGVyID0gVHlwZVN0cmluZzsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xz
OgotICAgICAgICAgICAgcmVzdWx0RmlsdGVyID0gVHlwZVN5bWJvbCB8IFR5cGVTdHJpbmc7Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICBmb3JFYWNoSW5BcnJheUxpa2UoZ2xvYmFsT2JqZWN0LCBh
c09iamVjdCh0cmFwUmVzdWx0KSwgWyZdIChKU1ZhbHVlIHZhbHVlKSAtPiBib29sIHsKKyAgICAg
ICAgaWYgKCF2YWx1ZS5pc1N0cmluZygpICYmICF2YWx1ZS5pc1N5bWJvbCgpKSB7CisgICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUHJveHkgaGFuZGxlcidz
ICdvd25LZXlzJyBtZXRob2QgbXVzdCByZXR1cm4gYW4gYXJyYXktbGlrZSBvYmplY3QgY29udGFp
bmluZyBvbmx5IFN0cmluZ3MgYW5kIFN5bWJvbHMiX3MpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChyZXN1bHRGaWx0ZXIpOwogCi0gICAgICAg
IGF1dG8gYWRkUHJvcE5hbWUgPSBbJl0gKEpTVmFsdWUgdmFsdWUsIFJ1bnRpbWVUeXBlIHR5cGUp
IC0+IGJvb2wgewotICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGRvRXhpdEVhcmx5
ID0gdHJ1ZTsKLSAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBkb250RXhpdEVhcmx5
ID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnQgPSB2YWx1ZS50b1Byb3Bl
cnR5S2V5KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBkb0V4aXRFYXJseSk7Ci0KLSAgICAgICAgICAgIGlmICghdW5jaGVja2VkUmVzdWx0S2V5
cy5hZGQoaWRlbnQuaW1wbCgpKS5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycg
dHJhcCByZXN1bHQgbXVzdCBub3QgY29udGFpbiBhbnkgZHVwbGljYXRlIG5hbWVzIl9zKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZG9FeGl0RWFybHk7Ci0gICAgICAgICAgICB9CisgICAgICAg
IElkZW50aWZpZXIgaWRlbnQgPSB2YWx1ZS50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAotICAgICAgICAgICAg
aWYgKHR5cGUgJiByZXN1bHRGaWx0ZXIpCi0gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoaWRlbnQuaW1wbCgpKTsKLQotICAgICAgICAgICAgcmV0dXJuIGRvbnRFeGl0RWFybHk7Ci0g
ICAgICAgIH07CisgICAgICAgIGlmICghdW5jaGVja2VkUmVzdWx0S2V5cy5hZGQoaWRlbnQuaW1w
bCgpKS5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiUHJveHkgaGFuZGxlcidzICdvd25LZXlzJyB0cmFwIHJlc3VsdCBtdXN0IG5v
dCBjb250YWluIGFueSBkdXBsaWNhdGUgbmFtZXMiX3MpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CiAKLSAgICAgICAgUnVudGltZVR5cGVNYXNrIGRvbnRUaHJvd0FuRXhj
ZXB0aW9uVHlwZUZpbHRlciA9IFR5cGVTdHJpbmcgfCBUeXBlU3ltYm9sOwotICAgICAgICBjcmVh
dGVMaXN0RnJvbUFycmF5TGlrZShnbG9iYWxPYmplY3QsIHRyYXBSZXN1bHQsIGRvbnRUaHJvd0Fu
RXhjZXB0aW9uVHlwZUZpbHRlciwgIlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgbWV0aG9kIG11
c3QgcmV0dXJuIGFuIG9iamVjdCJfcywgIlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgbWV0aG9k
IG11c3QgcmV0dXJuIGFuIGFycmF5LWxpa2Ugb2JqZWN0IGNvbnRhaW5pbmcgb25seSBTdHJpbmdz
IGFuZCBTeW1ib2xzIl9zLCBhZGRQcm9wTmFtZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgfQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChpZGVu
dCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBib29sIHRhcmdldElzRXhlbnNpYmxlID0gdGFyZ2V0
LT5pc0V4dGVuc2libGUoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwpAQCAtOTY4LDMwICs5NTQsMjAgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVy
Zm9ybUdldE93blByb3BlcnR5TgogICAgIFByb3BlcnR5TmFtZUFycmF5IHRhcmdldEtleXModm0s
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6
RXhjbHVkZSk7CiAgICAgdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFt
ZXModGFyZ2V0LCBnbG9iYWxPYmplY3QsIHRhcmdldEtleXMsIERvbnRFbnVtUHJvcGVydGllc01v
ZGU6OkluY2x1ZGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0g
ICAgVmVjdG9yPFVuaXF1ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Q29uZmlndXJhYmxlS2V5czsKLSAg
ICBWZWN0b3I8VW5pcXVlZFN0cmluZ0ltcGwqPiB0YXJnZXROb25Db25maWd1cmFibGVLZXlzOwor
ICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiB0YXJnZXROb25Db25maWd1cmFibGVLZXlz
OworICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiB0YXJnZXRDb25maWd1cmFibGVLZXlz
OwogICAgIGZvciAoY29uc3QgSWRlbnRpZmllciYgaWRlbnQgOiB0YXJnZXRLZXlzKSB7CiAgICAg
ICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgICAgICBib29sIGlzUHJvcGVy
dHlEZWZpbmVkID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0
LCBpZGVudC5pbXBsKCksIGRlc2NyaXB0b3IpOyAKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgaWYgKGlzUHJvcGVydHlEZWZpbmVkICYmICFkZXNj
cmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgdGFyZ2V0Tm9uQ29uZmlndXJhYmxl
S2V5cy5hcHBlbmQoaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGFy
Z2V0Q29uZmlndXJhYmxlS2V5cy5hcHBlbmQoaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIHRh
cmdldE5vbkNvbmZpZ3VyYWJsZUtleXMuYWRkKGlkZW50LmltcGwoKSk7CisgICAgICAgIGVsc2Ug
aWYgKCF0YXJnZXRJc0V4ZW5zaWJsZSkKKyAgICAgICAgICAgIHRhcmdldENvbmZpZ3VyYWJsZUtl
eXMuYWRkKGlkZW50LmltcGwoKSk7CiAgICAgfQogCi0gICAgZW51bSBDb250YWluZWRJbiB7IElz
Q29udGFpbmVkSW4sIElzTm90Q29udGFpbmVkSW4gfTsKLSAgICBhdXRvIHJlbW92ZUlmQ29udGFp
bmVkSW5VbmNoZWNrZWRSZXN1bHRLZXlzID0gWyZdIChVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCkg
LT4gQ29udGFpbmVkSW4gewotICAgICAgICBhdXRvIGl0ZXIgPSB1bmNoZWNrZWRSZXN1bHRLZXlz
LmZpbmQoaW1wbCk7Ci0gICAgICAgIGlmIChpdGVyID09IHVuY2hlY2tlZFJlc3VsdEtleXMuZW5k
KCkpCi0gICAgICAgICAgICByZXR1cm4gSXNOb3RDb250YWluZWRJbjsKLQotICAgICAgICB1bmNo
ZWNrZWRSZXN1bHRLZXlzLnJlbW92ZShpdGVyKTsKLSAgICAgICAgcmV0dXJuIElzQ29udGFpbmVk
SW47Ci0gICAgfTsKLQogICAgIGZvciAoVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwgOiB0YXJnZXRO
b25Db25maWd1cmFibGVLZXlzKSB7Ci0gICAgICAgIGlmIChyZW1vdmVJZkNvbnRhaW5lZEluVW5j
aGVja2VkUmVzdWx0S2V5cyhpbXBsKSA9PSBJc05vdENvbnRhaW5lZEluKSB7CisgICAgICAgIGlm
ICghdW5jaGVja2VkUmVzdWx0S2V5cy5yZW1vdmUoaW1wbCkpIHsKICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIG1ha2VTdHJpbmcoIlByb3h5IG9iamVjdCdz
ICd0YXJnZXQnIGhhcyB0aGUgbm9uLWNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSAnIiwgU3RyaW5nKGlt
cGwpLCAiJyB0aGF0IHdhcyBub3QgaW4gdGhlIHJlc3VsdCBmcm9tIHRoZSAnb3duS2V5cycgdHJh
cCIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtOTk5LDcgKzk3NSw3IEBA
IHZvaWQgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU4KIAogICAgIGlmICghdGFy
Z2V0SXNFeGVuc2libGUpIHsKICAgICAgICAgZm9yIChVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCA6
IHRhcmdldENvbmZpZ3VyYWJsZUtleXMpIHsKLSAgICAgICAgICAgIGlmIChyZW1vdmVJZkNvbnRh
aW5lZEluVW5jaGVja2VkUmVzdWx0S2V5cyhpbXBsKSA9PSBJc05vdENvbnRhaW5lZEluKSB7Cisg
ICAgICAgICAgICBpZiAoIXVuY2hlY2tlZFJlc3VsdEtleXMucmVtb3ZlKGltcGwpKSB7CiAgICAg
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgbWFrZVN0cmlu
ZygiUHJveHkgb2JqZWN0J3Mgbm9uLWV4dGVuc2libGUgJ3RhcmdldCcgaGFzIGNvbmZpZ3VyYWJs
ZSBwcm9wZXJ0eSAnIiwgU3RyaW5nKGltcGwpLCAiJyB0aGF0IHdhcyBub3QgaW4gdGhlIHJlc3Vs
dCBmcm9tIHRoZSAnb3duS2V5cycgdHJhcCIpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWZsZWN0T2JqZWN0LmNwcAkocmV2aXNpb24gMjc1MTU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw5ICsx
MTAsOSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ocmVmbGVjdE9iamVjdENvCiAgICAgaWYg
KCFhcmd1bWVudHNPYmplY3QpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dU
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlJlZmxlY3QuY29uc3RydWN0IHJlcXVpcmVz
IHRoZSBzZWNvbmQgYXJndW1lbnQgYmUgYW4gb2JqZWN0Il9zKSk7CiAKLSAgICBjcmVhdGVMaXN0
RnJvbUFycmF5TGlrZShnbG9iYWxPYmplY3QsIGFyZ3VtZW50c09iamVjdCwgUnVudGltZVR5cGVN
YXNrQWxsVHlwZXMsICJUaGlzIGVycm9yIG11c3Qgbm90IGJlIHJhaXNlZCJfcywgIlRoaXMgZXJy
b3IgbXVzdCBub3QgYmUgcmFpc2VkIl9zLCBbJl0gKEpTVmFsdWUgdmFsdWUsIFJ1bnRpbWVUeXBl
KSAtPiBib29sIHsKKyAgICBmb3JFYWNoSW5BcnJheUxpa2UoZ2xvYmFsT2JqZWN0LCBhcmd1bWVu
dHNPYmplY3QsIFsmXSAoSlNWYWx1ZSB2YWx1ZSkgLT4gYm9vbCB7CiAgICAgICAgIGFyZ3VtZW50
cy5hcHBlbmQodmFsdWUpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIChhcmd1bWVudHMu
b3ZlcmZsb3dDaGVja05vdE5lZWRlZCgpLCBlbmNvZGVkSlNWYWx1ZSgpKSk7CiAgICAgaWYgKFVO
TElLRUxZKGFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpKSB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>