<?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>95166</bug_id>
          
          <creation_ts>2012-08-27 20:38:07 -0700</creation_ts>
          <short_desc>Refactored and consolidated variable resolution functions</short_desc>
          <delta_ts>2012-08-28 11:27:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>706030</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-27 20:38:07 -0700</bug_when>
    <thetext>Refactored and consolidated variable resolution functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706036</commentid>
    <comment_count>1</comment_count>
      <attachid>160892</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-27 21:02:30 -0700</bug_when>
    <thetext>Created attachment 160892
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706508</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-28 10:51:45 -0700</bug_when>
    <thetext>Committed r126893: &lt;http://trac.webkit.org/changeset/126893&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706531</commentid>
    <comment_count>3</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-08-28 11:07:31 -0700</bug_when>
    <thetext>The landed version is missing JSScope.{cpp,h} files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706561</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-28 11:27:12 -0700</bug_when>
    <thetext>Landed in 126897.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160892</attachid>
            <date>2012-08-27 21:02:30 -0700</date>
            <delta_ts>2012-08-27 21:14:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95166-20120827210223.patch</filename>
            <type>text/plain</type>
            <size>104584</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2ODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNiBA
QAorMjAxMi0wOC0yNyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFJlZmFjdG9yZWQgYW5kIGNvbnNvbGlkYXRlZCB2YXJpYWJsZSByZXNvbHV0aW9uIGZ1bmN0
aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUx
NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGRvZXMgYSBmZXcgdGhpbmdzOgorCisgICAgICAgICgxKSBJbnRyb2R1Y2VzIGEgbmV3
IGNsYXNzLCBKU1Njb3BlLCB3aGljaCBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsCisgICAgICAg
IG9iamVjdHMgdGhhdCByZXByZXNlbnQgYSBzY29wZSBpbiB0aGUgc2NvcGUgY2hhaW4uCisKKyAg
ICAgICAgKDIpIFJlZmFjdG9ycyBhbmQgY29uc29saWRhdGVzIGR1cGxpY2F0ZSBpbXBsZW1lbnRh
dGlvbnMgb2YgdmFyaWFibGUKKyAgICAgICAgcmVzb2x1dGlvbiBpbnRvIHRoZSBKU1Njb3BlIGNs
YXNzLgorCisgICAgICAgICgzKSBSZW5hbWVzIEpTU3RhdGljU2NvcGVPYmplY3QgdG8gSlNOYW1l
U2NvcGUgYmVjYXVzZSwgYXMgZGlzdGluY3QgZnJvbQorICAgICAgICBzb21ldGhpbmcgbGlrZSBh
ICdsZXQnIHNjb3BlLCBKU1N0YXRpY1Njb3BlT2JqZWN0IG9ubHkgaGFzIHN0b3JhZ2UgZm9yIGEK
KyAgICAgICAgc2luZ2xlIG5hbWUuCisKKyAgICAgICAgVGhlc2UgY2hhbmdlcyBtYWtlcyBsb2dp
Y2FsIHNlbnNlIHRvIG1lIGFzLWlzLiBJIHdpbGwgYWxzbyB1c2UgdGhlbSBpbiBhbgorICAgICAg
ICB1cGNvbWluZyBvcHRpbWl6YXRpb24uCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQu
cHJpOiBCdWlsZCEKKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0MpOiBCdWlsZCBmaXggZm9yIExMSW50LW9ubHkgYnVpbGRzLgorCisgICAgICAgICogYnl0
ZWNvZGUvR2xvYmFsUmVzb2x2ZUluZm8uaDoKKyAgICAgICAgKEdsb2JhbFJlc29sdmVJbmZvKTog
VXNlIFByb3BlcnR5T2Zmc2V0IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBwYXJ0cworICAg
ICAgICBvZiB0aGUgZW5naW5lLgorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOiBVc2UgdGhlIHNoYXJlZCBj
b2RlIGluIEpTU2NvcGUgaW5zdGVhZCBvZiByb2xsaW5nCisgICAgICAgIG91ciBvd24uCisKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmNyZWF0ZUV4Y2Vw
dGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOiBVc2UgdGhlIHNoYXJlZCBjb2Rl
IGluIEpTU2NvcGUgaW5zdGVhZCBvZiByb2xsaW5nCisgICAgICAgIG91ciBvd24uCisKKyAgICAg
ICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElP
Tik6IFVzZSB0aGUgc2hhcmVkIGNvZGUgaW4gSlNTY29wZSBpbnN0ZWFkIG9mIHJvbGxpbmcKKyAg
ICAgICAgb3VyIG93bi4KKworICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKExMSW50
KTogVXNlIHRoZSBzaGFyZWQgY29kZSBpbiBKU1Njb3BlIGluc3RlYWQgb2Ygcm9sbGluZyBvdXIg
b3duLiBOb3RlCisgICAgICAgIHRoYXQgb25lIG9mIHRoZXNlIHNsb3cgcGF0aHMgY2FsbHMgdGhl
IHdyb25nIGhlbHBlciBmdW5jdGlvbi4gSSBsZWZ0IGl0CisgICAgICAgIHRoYXQgd2F5IHRvIGF2
b2lkIGEgYmVoYXZpb3IgY2hhbmdlIGluIGEgcmVmYWN0b3JpbmcgcGF0Y2guCisKKyAgICAgICAg
KiBwYXJzZXIvTm9kZXMuY3BwOiBVcGRhdGVkIGZvciByZW5hbWUuCisKKyAgICAgICAgKiBydW50
aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAoQ29tbW9uU2xvd1BhdGhzKTogUmVtb3Zl
ZCByZXNvbHZlIHNsb3cgcGF0aHMgYmVjYXVzZSB3ZXJlIGR1cGxpY2F0aXZlLgorCisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6
OkpTR2xvYmFsRGF0YSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAg
ICAgKEpTR2xvYmFsRGF0YSk6IFVwZGF0ZWQgZm9yIHJlbmFtZXMuCisKKyAgICAgICAgKiBydW50
aW1lL0pTTmFtZVNjb3BlLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpKU05hbWVTY29wZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTTmFtZVNj
b3BlOjp0b1RoaXNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU05hbWVTY29wZTo6cHV0KToKKyAg
ICAgICAgKEpTQzo6SlNOYW1lU2NvcGU6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgICog
cnVudGltZS9KU05hbWVTY29wZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmguCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpKU05hbWVTY29wZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNOYW1lU2NvcGU6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU05hbWVTY29wZSk6CisgICAgICAgIChKU0M6OkpT
TmFtZVNjb3BlOjpKU05hbWVTY29wZSk6CisgICAgICAgIChKU0M6OkpTTmFtZVNjb3BlOjppc0R5
bmFtaWNTY29wZSk6IFVzZWQgZG8td2ViY29yZS1yZW5hbWUgc2NyaXB0IGhlcmUuCisgICAgICAg
IEl0IGlzIGZhYnVsb3VzIQorCisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAg
ICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aXNOYW1lU2NvcGVPYmplY3Qp
OiBNb3JlIHJlbmFtZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNTY29wZTo6aXNEeW5hbWljU2NvcGUpOgor
ICAgICAgICAoSlNDOjpKU1Njb3BlOjpyZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SlNTY29wZTo6
cmVzb2x2ZVNraXApOgorICAgICAgICAoSlNDOjpKU1Njb3BlOjpyZXNvbHZlR2xvYmFsKToKKyAg
ICAgICAgKEpTQzo6SlNTY29wZTo6cmVzb2x2ZUdsb2JhbER5bmFtaWMpOgorICAgICAgICAoSlND
OjpKU1Njb3BlOjpyZXNvbHZlQmFzZSk6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVX
aXRoQmFzZSk6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVXaXRoVGhpcyk6CisgICAg
ICAgICogcnVudGltZS9KU1Njb3BlLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTU2NvcGUpOgorICAgICAgICAoSlNDOjpKU1Njb3BlOjpKU1Njb3BlKTogQWxsIHRoZSBjb2Rl
IGhlcmUgaXMgYSBwb3J0IGZyb20gdGhlCisgICAgICAgIEludGVycHJldGVyLmNwcCBpbXBsZW1l
bnRhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcnVudGltZS9KU1N0
YXRpY1Njb3BlT2JqZWN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU3RhdGlj
U2NvcGVPYmplY3QuaDogUmVtb3ZlZC4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJs
ZU9iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5oOgorICAgICAgICAoSlNTeW1ib2xUYWJsZU9iamVjdCk6CisgICAgICAgICog
cnVudGltZS9KU1R5cGUuaDogVXBkYXRlZCBmb3IgcmVuYW1lLgorCisgICAgICAgICogcnVudGlt
ZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6OnJlc29sdmVCYXNlKTogUmVtb3ZlZCBiZWNh
dXNlIGl0IHdhcyBkdXBsaWNhdGl2ZS4KKwogMjAxMi0wOC0yNyAgU2hlcmlmZiBCb3QgIDx3ZWJr
aXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBv
dXQgcjEyNjgzNi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDEyNjgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMjA3LDcgKzIwNyw4IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VT
CiAgICAgcnVudGltZS9KU09OT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvci5jcHAKICAgICBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCi0g
ICAgcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAorICAgIHJ1bnRpbWUvSlNOYW1lU2Nv
cGUuY3BwCisgICAgcnVudGltZS9KU1Njb3BlLmNwcAogICAgIHJ1bnRpbWUvSlNTdHJpbmcuY3Bw
CiAgICAgcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAKICAgICBydW50aW1lL0pTU3ltYm9sVGFi
bGVPYmplY3QuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQkocmV2aXNpb24gMTI2ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTU0Nyw4ICs1NDcsMTAgQEAgamF2YXNjcmlw
dGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU05hbWVTY29wZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTmFtZVNjb3BlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUu
Y3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nQnVpbGRlci5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmggXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1Rh
cmdldC5wcmkJKHJldmlzaW9uIDEyNjgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJn
ZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNyArMjA5LDggQEAgU09VUkNFUyArPSBcCiAg
ICAgcnVudGltZS9KU09OT2JqZWN0LmNwcCBcCiAgICAgcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLmNwcCBcCiAgICAgcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBc
Ci0gICAgcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcCBcCisgICAgcnVudGltZS9KU05h
bWVTY29wZS5jcHAgXAorICAgIHJ1bnRpbWUvSlNTY29wZS5jcHAgXAogICAgIHJ1bnRpbWUvSlNT
dHJpbmcuY3BwIFwKICAgICBydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcCBcCiAgICAgcnVudGlt
ZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24gMTI2ODM3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTg4MiwxMSAr
ODgyLDE5IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHJ1bnRpbWVcSlNTdGF0aWNTY29wZU9iamVjdC5jcHAiCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxydW50aW1lXEpTTmFtZVNjb3BlLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8
RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU1N0YXRpY1Njb3BlT2JqZWN0
LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEpTTmFtZVNjb3BlLmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVc
SlNTY29wZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXC4uXHJ1bnRpbWVcSlNTY29wZS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTI2ODM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw3ICsyNTMsNiBAQAogCQkwRkZGQzk1RjE0RUY5
MEJCMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkZDOTUzMTRFRjkw
OTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwICovOyB9
OwogCQkwRkZGQzk2MDE0RUY5MEJEMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2Nh
dGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkZGQzk1NDE0RUY5MDk1MDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlv
blBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMTQwNTY2QzQxMDdFQzI1NTAwNURCQzhEIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDg5NEQ1MEZBRkJB
MkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgKi87IH07Ci0JCTE0MDU2NkQxMTA3
RUMyNjcwMDVEQkM4RCAvKiBKU1N0YXRpY1Njb3BlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTQyQzE5MEUzOTM4ODMwMDY1QTU0NCAv
KiBKU1N0YXRpY1Njb3BlT2JqZWN0LmNwcCAqLzsgfTsKIAkJMTQwNTY2RDYxMDdFQzI3MTAwNURC
QzhEIC8qIEpTRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjY5MkE4NUUwMjU1NTk3RDAxRkY2MEY3IC8qIEpTRnVuY3Rpb24uY3BwICov
OyB9OwogCQkxNDBCN0QxRDBEQzY5QUY3MDA5QzQyQjggLyogSlNBY3RpdmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0REE4MThGMEQ5OUZE
MjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24uY3BwICovOyB9OwogCQkxNDBEMTdENzBFOEFENEE5
MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZh
dGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MzY4LDYgKzM2NywxMCBAQAogCQkxNDgxNkUxQzE1NENDNTZDMDBCODA1NEMgLyogQmxvY2tBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
ODE2RTFBMTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0ODJCNzRFMEE0MzAzMjgwMDUx
N0NGQyAvKiBKU1N0cmluZ1JlZi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDgyQjc0QzBBNDMwMzI4MDA1MTdDRkMgLyogSlNTdHJpbmdSZWYuY3Bw
ICovOyB9OwogCQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4MkI3RTIwQTQz
MDc2MDAwNTE3Q0ZDIC8qIEpTT2JqZWN0UmVmLmNwcCAqLzsgfTsKKwkJMTQ4NzRBRTMxNUVCREU0
QTAwMkUzNTg3IC8qIEpTTmFtZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODc0QURGMTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29w
ZS5jcHAgKi87IH07CisJCTE0ODc0QUU0MTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NzRBRTAx
NUVCREU0QTAwMkUzNTg3IC8qIEpTTmFtZVNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTQ4NzRBRTUxNUVCREU0QTAwMkUzNTg3IC8qIEpT
U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQ4NzRBRTExNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3BwICovOyB9OworCQkxNDg3NEFF
NjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NzRBRTIxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDhD
RDFEODEwOENGOTAyMDA4MTYzQzYgLyogSlNDb250ZXh0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4Q0QxRDcxMDhDRjkwMjAwODE2
M0M2IC8qIEpTQ29udGV4dFJlZlByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDhGMjFBQTEwN0VDNTNBMDA0MkVDMkMgLyogQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTY5QTA3MjAwRUQxQ0UzMzAwRjFGNjgxIC8qIEJ5dGVjb2RlR2VuZXJhdG9yLmNwcCAq
LzsgfTsKIAkJMTQ4RjIxQjAxMDdFQzU0MTAwNDJFQzJDIC8qIExleGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2OTJBODY1MDI1NTU5N0QwMUZG
NjBGNyAvKiBMZXhlci5jcHAgKi87IH07CkBAIC0xMDc2LDYgKzEwNzksMTAgQEAKIAkJMTQ4MkI3
OEEwQTQzMDVBQjAwNTE3Q0ZDIC8qIEFQSUNhc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQVBJQ2FzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDgyQjdF
MTBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNPYmplY3RSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQ4MkI3RTIwQTQzMDc2MDAwNTE3Q0ZDIC8qIEpTT2JqZWN0UmVmLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT2JqZWN0UmVmLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMTQ4NzRBREYxNUVCREU0QTAwMkUzNTg3IC8qIEpTTmFtZVNjb3BlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTmFtZVNjb3BlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQ4NzRBRTAxNUVCREU0QTAwMkUzNTg3IC8q
IEpTTmFtZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTmFtZVNj
b3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0ODc0QUUxMTVFQkRFNEEwMDJF
MzU4NyAvKiBKU1Njb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDg3NEFFMjE1RUJE
RTRBMDAyRTM1ODcgLyogSlNTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1Njb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0OENEMUQ3MTA4Q0Y5
MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTQ29udGV4dFJlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTQ5NTU5RUQwRERDRERGNzAwNjQ4MDg3IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlYnVnZ2VyQ2FsbEZyYW1l
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ5NzIwOTAxNEVCODMxNTAwRkVC
MUI3IC8qIFBhc3NXZWFrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3NX
ZWFrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzQ4LDggKzEzNTUsNiBAQAog
CQlBN0RDQjc3OTEyRTNEOTA1MDA5MTE5NDAgLyogV3JpdGVCYXJyaWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRlQmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBN0UyRUE2OTBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaXRlcmFsUGFyc2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RTJFQTZBMEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFs
UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpdGVyYWxQ
YXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0U0MkMxODBFMzkzODgz
MDA2NUE1NDQgLyogSlNTdGF0aWNTY29wZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1N0YXRpY1Njb3BlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE3RTQyQzE5MEUzOTM4ODMwMDY1QTU0NCAvKiBKU1N0YXRpY1Njb3BlT2JqZWN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RhdGljU2NvcGVPYmpl
Y3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0Y4NjkwRTBGOTU4NEExMDA1
NTg2OTcgLyogQ2FjaGVkQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
YWNoZWRDYWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Rjg2OUVDMEY5NUMy
RUMwMDU1ODY5NyAvKiBDYWxsRnJhbWVDbG9zdXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhbGxGcmFtZUNsb3N1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTdGOTkzNUQwRkQ3MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPTk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjAxMSw3ICsyMDE2LDYgQEAKIAkJN0VGNkUwQkIwRUI3QTFFQzAwNzlBRkFGIC8q
IHJ1bnRpbWUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJ
CUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAog
CQkJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAqLywKIAkJCQlCQ0Y2
MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovLAogCQkJCUJDMjU3REU1MEUxRjUx
QzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuY3BwICovLApAQCAtMjA2Niw2ICsyMDcwLDcgQEAKIAkJ
CQlCQzI2ODBDMTBFMTZENEU5MDBBMDZFOTIgLyogRnVuY3Rpb25Db25zdHJ1Y3Rvci5oICovLAog
CQkJCUY2OTJBODVDMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlwZS5jcHAgKi8s
CiAJCQkJRjY5MkE4NUQwMjU1NTk3RDAxRkY2MEY3IC8qIEZ1bmN0aW9uUHJvdG90eXBlLmggKi8s
CisJCQkJQzJENThDMzMxNTkxMkZFRTAwMjFBODQ0IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAg
Ki8sCiAJCQkJRERGN0FCRDIxMUY2MEVEMjAwMTA4RTM2IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5o
ICovLAogCQkJCUJDMDJFOUI4MEUxODQ1NDUwMDBGOTI5NyAvKiBHZXR0ZXJTZXR0ZXIuY3BwICov
LAogCQkJCUJDMzM3QkRFMEUxQUYwQjgwMDc2OTE4QSAvKiBHZXR0ZXJTZXR0ZXIuaCAqLywKQEAg
LTIwOTksNiArMjEwNCw4IEBACiAJCQkJODYwNEY1MDMxNDNDRTFDMTAwQjI5NUY1IC8qIEpTR2xv
YmFsVGhpcy5oICovLAogCQkJCTY1RUE0Qzk5MDkyQUY5RTIwMDkzRDgwMCAvKiBKU0xvY2suY3Bw
ICovLAogCQkJCTY1RUE0QzlBMDkyQUY5RTIwMDkzRDgwMCAvKiBKU0xvY2suaCAqLywKKwkJCQkx
NDg3NEFERjE1RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuY3BwICovLAorCQkJCTE0ODc0
QUUwMTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5oICovLAogCQkJCUE3MjcwMDc4MERB
QzYwNTYwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCAqLywKIAkJCQlBNzI3MDA3NzBEQUM2
MDU2MDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5oICovLAogCQkJCUJDMjJBMzk4MEUxNkUxNDgw
MEFGMjFDOCAvKiBKU09iamVjdC5jcHAgKi8sCkBAIC0yMTA3LDEwICsyMTE0LDEwIEBACiAJCQkJ
QTdGOTkzNUQwRkQ3MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuaCAqLywKIAkJCQlBNzI3RkY2
NjBEQTMwNTNCMDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgKi8sCiAJCQkJ
QTcyN0ZGNjUwREEzMDUzQjAwRTU0OEQ3IC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCAqLywK
KwkJCQkxNDg3NEFFMTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAgKi8sCisJCQkJMTQ4
NzRBRTIxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCAqLywKIAkJCQkwRjkxOUQwRTE1N0Yz
MzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgKi8sCiAJCQkJMEY5
MTlEMEYxNTdGMzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCAqLywK
LQkJCQlBN0U0MkMxOTBFMzkzODgzMDA2NUE1NDQgLyogSlNTdGF0aWNTY29wZU9iamVjdC5jcHAg
Ki8sCi0JCQkJQTdFNDJDMTgwRTM5Mzg4MzAwNjVBNTQ0IC8qIEpTU3RhdGljU2NvcGVPYmplY3Qu
aCAqLywKIAkJCQlCQzAyRTlCNjBFMTg0MkZBMDAwRjkyOTcgLyogSlNTdHJpbmcuY3BwICovLAog
CQkJCUY2OTJBODYyMDI1NTU5N0QwMUZGNjBGNyAvKiBKU1N0cmluZy5oICovLAogCQkJCTg2RTg1
NTM4MTExQjk5NjgwMDFBRjUxRSAvKiBKU1N0cmluZ0J1aWxkZXIuaCAqLywKQEAgLTI4OTYsNiAr
MjkwMyw4IEBACiAJCQkJMEY2Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5
TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0NzgxNURDRTM0QjAwNkE1OTdDIC8qIERG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0ODc0QUU0MTVF
QkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTQ4NzRB
RTYxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzM0OCw3
ICszMzU3LDYgQEAKIAkJCQlBN0Y5OTM2MDBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5NUY2RTY5NTBFNUI1Rjk3MDA5MUU4NjAgLyogSlNQcm9m
aWxlclByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyN0ZGNkIwREEzMDkyMjAwRTU0
OEQ3IC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMTQw
NTY2RDExMDdFQzI2NzAwNURCQzhEIC8qIEpTU3RhdGljU2NvcGVPYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ3RjM5RDUxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTU3RyaW5nLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTI2MDBCNUE2MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5l
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgyQjc0RTBBNDMwMzI4MDA1MTdDRkMgLyogSlNT
dHJpbmdSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zNDk3LDYgKzM1MDUsOCBAQAogCQkJCTBG
NjM5NDU0MTVEMDcwNTUwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY2Mzk0ODQxNUU0ODExODAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDMjExMjJFMTE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWRE
YXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0ODc0QUUzMTVFQkRFNEEwMDJFMzU4NyAvKiBK
U05hbWVTY29wZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1
ODcgLyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMjY4MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNyArNDAsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJzLmgiCiAjaW5jbHVkZSAiSlNBY3Rp
dmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTU3RhdGljU2Nv
cGVPYmplY3QuaCIKKyNpbmNsdWRlICJKU05hbWVTY29wZS5oIgogI2luY2x1ZGUgIkpTVmFsdWUu
aCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiTWV0aG9kQ2Fs
bExpbmtTdGF0dXMuaCIKQEAgLTIwMzAsMTMgKzIwMzAsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OnZp
c2l0V2Vha1JlZmVyZW5jZXMoU2xvdAogICAgIHBlcmZvcm1UcmFjaW5nRml4cG9pbnRJdGVyYXRp
b24odmlzaXRvcik7CiB9CiAKLSNpZiBFTkFCTEUoSklUKQogI2lmIEVOQUJMRShKSVRfVkVSQk9T
RV9PU1IpCiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlVW5saW5raW5nID0gdHJ1ZTsKICNlbHNl
CiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlVW5saW5raW5nID0gZmFsc2U7CiAjZW5kaWYKLSNl
bmRpZiAvLyBFTkFCTEUoSklUKQogICAgIAogdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HbG9i
YWxSZXNvbHZlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HbG9iYWxSZXNvbHZlSW5mby5oCShyZXZpc2lvbiAxMjY4MzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2xvYmFsUmVzb2x2ZUluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNyArNDAsNyBAQCBzdHJ1Y3QgR2xvYmFsUmVzb2x2ZUluZm8gewogICAgIH0KICAgICAK
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBzdHJ1Y3R1cmU7Ci0gICAgdW5zaWduZWQgb2Zm
c2V0OworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldDsgLy8gT25seSB2YWxpZCBpbiBvbGQgSklUIGNvZGUuIFRoaXMgbWVhbnMgbm90aGluZyBp
biB0aGUgREZHLgogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTI2ODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNGdW5j
dGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNTdGF0aWNT
Y29wZU9iamVjdC5oIgorI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCiAjaW5jbHVkZSAiTGFiZWxT
Y29wZS5oIgogI2luY2x1ZGUgIkxleGVyLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAxMjY4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiSklURXhjZXB0aW9u
cy5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5o
IgotI2luY2x1ZGUgIkpTU3RhdGljU2NvcGVPYmplY3QuaCIKKyNpbmNsdWRlICJKU05hbWVTY29w
ZS5oIgogI2luY2x1ZGUgIk5hbWVJbnN0YW5jZS5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+CkBAIC0xMDM5LDIwICsxMDM5LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZQogewogICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKLSAgICAKLSAgICBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbiA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3Ig
aXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9
IHNjb3BlQ2hhaW4tPmVuZCgpOwotICAgIEFTU0VSVChpdGVyICE9IGVuZCk7Ci0KLSAgICBkbyB7
Ci0gICAgICAgIEpTT2JqZWN0KiByZWNvcmQgPSBpdGVyLT5nZXQoKTsKLSAgICAgICAgUHJvcGVy
dHlTbG90IHNsb3QocmVjb3JkKTsKLSAgICAgICAgaWYgKHJlY29yZC0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsICpwcm9wZXJ0eU5hbWUsIHNsb3QpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShzbG90LmdldFZhbHVlKGV4ZWMsICpwcm9wZXJ0eU5hbWUpKTsKLSAgICB9IHdoaWxl
ICgrK2l0ZXIgIT0gZW5kKTsKLQotICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
VW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCAqcHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1Njb3BlOjpyZXNvbHZlKGV4ZWMsICpwcm9wZXJ0eU5hbWUpKTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlQmFzZShF
eGVjU3RhdGUqIGV4ZWMsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSkKQEAgLTEwNjAsNyArMTA0
Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXNvbHZlQmFzZShleGVjLCAqcHJvcGVydHlOYW1lLCBleGVjLT5z
Y29wZUNoYWluKCksIGZhbHNlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Njb3Bl
OjpyZXNvbHZlQmFzZShleGVjLCAqcHJvcGVydHlOYW1lLCBmYWxzZSkpOwogfQogCiBFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVCYXNlU3RyaWN0UHV0KEV4ZWNT
dGF0ZSogZXhlYywgSWRlbnRpZmllciogcHJvcGVydHlOYW1lKQpAQCAtMTA2OCwzMCArMTA1NSwx
NSBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiAgICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAotICAgIEpTVmFsdWUg
YmFzZSA9IHJlc29sdmVCYXNlKGV4ZWMsICpwcm9wZXJ0eU5hbWUsIGV4ZWMtPnNjb3BlQ2hhaW4o
KSwgdHJ1ZSk7Ci0gICAgaWYgKCFiYXNlKQotICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQoZXhlYywgcHJvcGVydHlOYW1lLT51c3Ry
aW5nKCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2UpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNTY29wZTo6cmVzb2x2ZUJhc2UoZXhlYywgKnByb3BlcnR5TmFtZSwg
dHJ1ZSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29s
dmVHbG9iYWwoRXhlY1N0YXRlKiBleGVjLCBHbG9iYWxSZXNvbHZlSW5mbyogcmVzb2x2ZUluZm8s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSkK
K0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZUdsb2JhbChFeGVj
U3RhdGUqIGV4ZWMsIEdsb2JhbFJlc29sdmVJbmZvKiByZXNvbHZlSW5mbywgSlNHbG9iYWxPYmpl
Y3QqLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwotICAgIAotICAgIFByb3BlcnR5U2xvdCBzbG90KGds
b2JhbE9iamVjdCk7Ci0gICAgaWYgKGdsb2JhbE9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMs
ICpwcm9wZXJ0eU5hbWUsIHNsb3QpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gc2xvdC5n
ZXRWYWx1ZShleGVjLCAqcHJvcGVydHlOYW1lKTsKLQotICAgICAgICBpZiAoc2xvdC5pc0NhY2hl
YWJsZVZhbHVlKCkgJiYgIWdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCktPmlzVW5jYWNoZWFibGVE
aWN0aW9uYXJ5KCkgJiYgc2xvdC5zbG90QmFzZSgpID09IGdsb2JhbE9iamVjdCkgewotICAgICAg
ICAgICAgcmVzb2x2ZUluZm8tPnN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVj
LT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGdsb2JhbE9iamVjdC0+c3RydWN0dXJl
KCkpOwotICAgICAgICAgICAgcmVzb2x2ZUluZm8tPm9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
Ci0gICAgfQogCi0gICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVVbmRlZmluZWRW
YXJpYWJsZUVycm9yKGV4ZWMsICpwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTU2NvcGU6OnJlc29sdmVHbG9iYWwoZXhlYywgKnByb3BlcnR5TmFtZSwgJnJlc29s
dmVJbmZvLT5zdHJ1Y3R1cmUsICZyZXNvbHZlSW5mby0+b2Zmc2V0KSk7CiB9CiAKIEVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKQEAgLTEyNjUsOCArMTIzNyw4IEBAIEpTQ2VsbCogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGkKICAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxlQXNDZWxsKTsKICAgICBKU0Z1bmN0aW9u
ICpmdW5jdGlvbiA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+bWFrZShleGVjLCBleGVjLT5zY29wZUNo
YWluKCkpOwogICAgIGlmICghZnVuY3Rpb25FeGVjdXRhYmxlLT5uYW1lKCkuaXNOdWxsKCkpIHsK
LSAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9Ci0gICAg
ICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoCisgICAgICAgIEpTTmFtZVNjb3Bl
KiBmdW5jdGlvblNjb3BlT2JqZWN0ID0KKyAgICAgICAgICAgIEpTTmFtZVNjb3BlOjpjcmVhdGUo
CiAgICAgICAgICAgICAgICAgZXhlYywgZnVuY3Rpb25FeGVjdXRhYmxlLT5uYW1lKCksIGZ1bmN0
aW9uLCBSZWFkT25seSB8IERvbnREZWxldGUpOwogICAgICAgICBmdW5jdGlvbi0+c2V0U2NvcGUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbi0+c2NvcGUoKS0+cHVzaChmdW5jdGlvblNjb3Bl
T2JqZWN0KSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxMjY4MzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NSwxMSArNDUsMTEgQEAKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJK
U0FycmF5LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNOYW1l
U2NvcGUuaCIKICNpbmNsdWRlICJKU05vdEFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvci5oIgotI2luY2x1ZGUgIkxpdGVyYWxQYXJzZXIuaCIKLSNpbmNsdWRlICJK
U1N0YXRpY1Njb3BlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJM
aXRlcmFsUGFyc2VyLmgiCiAjaW5jbHVkZSAiTmFtZUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiT2Jq
ZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpAQCAtOTMsMjgyICs5Myw2
IEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZSBjb25jYXRlbmF0ZVMKICAgICByZXR1cm4g
anNTdHJpbmcoZXhlYywgc3RyaW5ncywgY291bnQpOwogfQogCi1ORVZFUl9JTkxJTkUgYm9vbCBJ
bnRlcnByZXRlcjo6cmVzb2x2ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQ
QywgSlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUpCi17Ci0gICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gdlBDWzJdLnUub3BlcmFuZDsKLQotICAgIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgU2Nv
cGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWluLT5iZWdpbigpOwotICAgIFNjb3BlQ2hh
aW5JdGVyYXRvciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKLSAgICBBU1NFUlQoaXRlciAhPSBl
bmQpOwotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwotICAgIElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5
KTsKLSAgICBkbyB7Ci0gICAgICAgIEpTT2JqZWN0KiBvID0gaXRlci0+Z2V0KCk7Ci0gICAgICAg
IFByb3BlcnR5U2xvdCBzbG90KG8pOwotICAgICAgICBpZiAoby0+Z2V0UHJvcGVydHlTbG90KGNh
bGxGcmFtZSwgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IHNs
b3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7Ci0gICAgICAgICAgICBleGNlcHRpb25WYWx1
ZSA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsKLSAgICAgICAgICAgIGlmIChl
eGNlcHRpb25WYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUocmVzdWx0KTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoKytpdGVyICE9IGVuZCk7
Ci0gICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGNhbGxG
cmFtZSwgaWRlbnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotTkVWRVJfSU5MSU5FIGJvb2wg
SW50ZXJwcmV0ZXI6OnJlc29sdmVTa2lwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0cnVjdGlv
biogdlBDLCBKU1ZhbHVlJiBleGNlcHRpb25WYWx1ZSkKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0KLSAgICBpbnQgZHN0ID0gdlBDWzFdLnUu
b3BlcmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSB2UENbMl0udS5vcGVyYW5kOwotICAgIGludCBz
a2lwID0gdlBDWzNdLnUub3BlcmFuZDsKLQotICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
ID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIg
PSBzY29wZUNoYWluLT5iZWdpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBzY29w
ZUNoYWluLT5lbmQoKTsKLSAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwotICAgIGJvb2wgY2hlY2tU
b3BMZXZlbCA9IGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgY29kZUJs
b2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7Ci0gICAgQVNTRVJUKHNraXAgfHwgIWNoZWNrVG9w
TGV2ZWwpOwotICAgIGlmIChjaGVja1RvcExldmVsICYmIHNraXAtLSkgewotICAgICAgICBpZiAo
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGNvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpLmpz
VmFsdWUoKSkKLSAgICAgICAgICAgICsraXRlcjsKLSAgICB9Ci0gICAgd2hpbGUgKHNraXAtLSkg
ewotICAgICAgICArK2l0ZXI7Ci0gICAgICAgIEFTU0VSVChpdGVyICE9IGVuZCk7Ci0gICAgfQot
ICAgIElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KTsK
LSAgICBkbyB7Ci0gICAgICAgIEpTT2JqZWN0KiBvID0gaXRlci0+Z2V0KCk7Ci0gICAgICAgIFBy
b3BlcnR5U2xvdCBzbG90KG8pOwotICAgICAgICBpZiAoby0+Z2V0UHJvcGVydHlTbG90KGNhbGxG
cmFtZSwgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IHNsb3Qu
Z2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7Ci0gICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9
IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsKLSAgICAgICAgICAgIGlmIChleGNl
cHRpb25WYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBB
U1NFUlQocmVzdWx0KTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0g
SlNWYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9IHdoaWxlICgrK2l0ZXIgIT0gZW5kKTsKLSAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVVu
ZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBpZGVudCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZUdsb2JhbChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSYgZXhjZXB0aW9uVmFs
dWUpCi17Ci0gICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgIEFTU0VSVChnbG9i
YWxPYmplY3QtPmlzR2xvYmFsT2JqZWN0KCkpOwotICAgIGludCBwcm9wZXJ0eSA9IHZQQ1syXS51
Lm9wZXJhbmQ7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2UENbM10udS5zdHJ1Y3R1cmUu
Z2V0KCk7Ci0gICAgaW50IG9mZnNldCA9IHZQQ1s0XS51Lm9wZXJhbmQ7Ci0KLSAgICBpZiAoc3Ry
dWN0dXJlID09IGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCkpIHsKLSAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKGdsb2JhbE9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0
KG9mZnNldCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBJZGVudGlmaWVy
JiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7Ci0gICAgUHJvcGVydHlT
bG90IHNsb3QoZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nZXRQcm9wZXJ0
eVNsb3QoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQg
PSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwotICAgICAgICBpZiAoc2xvdC5pc0Nh
Y2hlYWJsZVZhbHVlKCkgJiYgIWdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCktPmlzVW5jYWNoZWFi
bGVEaWN0aW9uYXJ5KCkgJiYgc2xvdC5zbG90QmFzZSgpID09IGdsb2JhbE9iamVjdCkgewotICAg
ICAgICAgICAgdlBDWzNdLnUuc3RydWN0dXJlLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSk7
Ci0gICAgICAgICAgICB2UENbNF0gPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgICAgICAgICAg
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uOwotICAgICAgICBpZiAoZXhjZXB0aW9uVmFs
dWUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihkc3QpID0gSlNWYWx1ZShyZXN1bHQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2Fs
bEZyYW1lLCBpZGVudCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ORVZFUl9JTkxJTkUgYm9v
bCBJbnRlcnByZXRlcjo6cmVzb2x2ZUdsb2JhbER5bmFtaWMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWUmIGV4Y2VwdGlvblZhbHVlKQotewotICAgIGludCBk
c3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLSAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0LT5pc0dsb2Jh
bE9iamVjdCgpKTsKLSAgICBpbnQgcHJvcGVydHkgPSB2UENbMl0udS5vcGVyYW5kOwotICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gdlBDWzNdLnUuc3RydWN0dXJlLmdldCgpOwotICAgIGludCBv
ZmZzZXQgPSB2UENbNF0udS5vcGVyYW5kOwotICAgIGludCBza2lwID0gdlBDWzVdLnUub3BlcmFu
ZDsKLSAgICAKLSAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2Nv
cGVDaGFpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVn
aW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+ZW5kKCk7Ci0g
ICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLSAgICBib29sIGNoZWNrVG9wTGV2ZWwgPSBjb2RlQmxv
Y2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIGNvZGVCbG9jay0+bmVlZHNGdWxsU2Nv
cGVDaGFpbigpOwotICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVsKTsKLSAgICBpZiAo
Y2hlY2tUb3BMZXZlbCAmJiBza2lwLS0pIHsKLSAgICAgICAgaWYgKGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihjb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpCi0gICAgICAg
ICAgICArK2l0ZXI7Ci0gICAgfQotICAgIHdoaWxlIChza2lwLS0pIHsKLSAgICAgICAgSlNPYmpl
Y3QqIG8gPSBpdGVyLT5nZXQoKTsKLSAgICAgICAgaWYgKG8tPmhhc0N1c3RvbVByb3BlcnRpZXMo
KSkgewotICAgICAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZp
ZXIocHJvcGVydHkpOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIFByb3BlcnR5
U2xvdCBzbG90KG8pOwotICAgICAgICAgICAgICAgIGlmIChvLT5nZXRQcm9wZXJ0eVNsb3QoY2Fs
bEZyYW1lLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1
bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwotICAgICAgICAgICAgICAgICAg
ICBleGNlcHRpb25WYWx1ZSA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsK
LSAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVl
KHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBlbmQpCi0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIG8gPSBpdGVyLT5nZXQoKTsKLSAgICAgICAgICAg
ICAgICArK2l0ZXI7Ci0gICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsKLSAgICAgICAgICAgIGV4
Y2VwdGlvblZhbHVlID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJhbWUsIGlk
ZW50KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICArK2l0
ZXI7Ci0gICAgfQotICAgIAotICAgIGlmIChzdHJ1Y3R1cmUgPT0gZ2xvYmFsT2JqZWN0LT5zdHJ1
Y3R1cmUoKSkgewotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUo
Z2xvYmFsT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgIEFTU0VSVChj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KS5qc1ZhbHVlKCkpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmll
cihwcm9wZXJ0eSk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0KTsKLSAgICBp
ZiAoZ2xvYmFsT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCkp
IHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRl
bnQpOwotICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgJiYgIWdsb2JhbE9iamVj
dC0+c3RydWN0dXJlKCktPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgJiYgc2xvdC5zbG90QmFz
ZSgpID09IGdsb2JhbE9iamVjdCkgewotICAgICAgICAgICAgdlBDWzNdLnUuc3RydWN0dXJlLnNl
dChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
Z2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICB2UENbNF0gPSBzbG90LmNh
Y2hlZE9mZnNldCgpOwotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgICAgICAgICBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBleGNlcHRpb25WYWx1
ZSA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsKLSAgICAgICAgaWYgKGV4Y2Vw
dGlvblZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBBU1NFUlQocmVz
dWx0KTsKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKHJlc3Vs
dCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBleGNlcHRpb25WYWx1
ZSA9IGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBpZGVudCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1ORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6cmVzb2x2
ZUJhc2UoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEluc3RydWN0aW9uKiB2UEMpCi17Ci0gICAgaW50
IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gdlBDWzJdLnUub3Bl
cmFuZDsKLSAgICBib29sIGlzU3RyaWN0UHV0ID0gdlBDWzNdLnUub3BlcmFuZDsKLSAgICBJZGVu
dGlmaWVyIGlkZW50ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwcm9wZXJ0
eSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OnJlc29sdmVCYXNlKGNhbGxGcmFtZSwgaWRl
bnQsIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLCBpc1N0cmljdFB1dCk7Ci0gICAgaWYgKHJlc3Vs
dCkgewotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKLSAgICAg
ICAgQVNTRVJUKGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpLmpzVmFsdWUoKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZUVy
cm9yRm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQoY2FsbEZyYW1lLCBpZGVudC51c3RyaW5nKCkp
OwotfQotCi1ORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZUJhc2VBbmRQcm9w
ZXJ0eShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSYgZXhj
ZXB0aW9uVmFsdWUpCi17Ci0gICAgaW50IGJhc2VEc3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAg
IGludCBwcm9wRHN0ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSB2UENb
M10udS5vcGVyYW5kOwotCi0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJh
bWUtPnNjb3BlQ2hhaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHNjb3BlQ2hh
aW4tPmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IHNjb3BlQ2hhaW4tPmVu
ZCgpOwotCi0gICAgLy8gRklYTUU6IGFkZCBzY29wZURlcHRoSXNaZXJvIG9wdGltaXphdGlvbgot
Ci0gICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9j
ay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7Ci0gICAgSlNPYmplY3QqIGJhc2U7Ci0gICAgZG8gewot
ICAgICAgICBiYXNlID0gaXRlci0+Z2V0KCk7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGJh
c2UpOwotICAgICAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnQs
IHNsb3QpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2Fs
bEZyYW1lLCBpZGVudCk7Ci0gICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsKLSAgICAgICAgICAgIGlmIChleGNlcHRpb25WYWx1ZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIocHJvcERzdCkgPSBKU1ZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAgICBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoYmFzZURzdCkgPSBKU1ZhbHVlKGJhc2UpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgKytpdGVyOwotICAgIH0gd2hpbGUgKGl0ZXIg
IT0gZW5kKTsKLQotICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVF
cnJvcihjYWxsRnJhbWUsIGlkZW50KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLU5FVkVSX0lO
TElORSBib29sIEludGVycHJldGVyOjpyZXNvbHZlVGhpc0FuZFByb3BlcnR5KENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlJiBleGNlcHRpb25WYWx1ZSkKLXsK
LSAgICBpbnQgdGhpc0RzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BEc3QgPSB2
UENbMl0udS5vcGVyYW5kOwotICAgIGludCBwcm9wZXJ0eSA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0K
LSAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigp
OwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKLSAg
ICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+ZW5kKCk7Ci0KLSAgICAvLyBG
SVhNRTogYWRkIHNjb3BlRGVwdGhJc1plcm8gb3B0aW1pemF0aW9uCi0KLSAgICBBU1NFUlQoaXRl
ciAhPSBlbmQpOwotCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOwotICAgIElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHBy
b3BlcnR5KTsKLSAgICBKU09iamVjdCogYmFzZTsKLSAgICBkbyB7Ci0gICAgICAgIGJhc2UgPSBp
dGVyLT5nZXQoKTsKLSAgICAgICAgKytpdGVyOwotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChi
YXNlKTsKLSAgICAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIGlkZW50
LCBzbG90KSkgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNh
bGxGcmFtZSwgaWRlbnQpOwotICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKS5leGNlcHRpb247Ci0gICAgICAgICAgICBpZiAoZXhjZXB0aW9uVmFsdWUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY2FsbEZyYW1lLT51
bmNoZWNrZWRSKHByb3BEc3QpID0gSlNWYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAgLy8gQWxs
IGVudHJpZXMgb24gdGhlIHNjb3BlIGNoYWluIHNob3VsZCBiZSBFbnZpcm9ubWVudFJlY29yZHMg
KGFjdGl2YXRpb25zIGV0YyksCi0gICAgICAgICAgICAvLyBvdGhlciB0aGVuICd3aXRoJyBvYmpl
Y3QsIHdoaWNoIGFyZSBkaXJlY3RseSByZWZlcmVuY2VkIGZyb20gdGhlIHNjb3BlIGNoYWluLAot
ICAgICAgICAgICAgLy8gYW5kIHRoZSBnbG9iYWwgb2JqZWN0LiBJZiB3ZSBoaXQgZWl0aGVyIGFu
IEVudmlyb25tZW50UmVjb3JkIG9yIGEgZ2xvYmFsCi0gICAgICAgICAgICAvLyBvYmplY3QgYXQg
dGhlIGVuZCBvZiB0aGUgc2NvcGUgY2hhaW4sIHRoaXMgaXMgdW5kZWZpbmVkLiBJZiB3ZSBoaXQg
YSBub24tCi0gICAgICAgICAgICAvLyBFbnZpcm9ubWVudFJlY29yZCB3aXRoaW4gdGhlIHNjb3Bl
IGNoYWluLCBwYXNzIHRoZSBiYXNlIGFzIHRoZSB0aGlzIHZhbHVlLgotICAgICAgICAgICAgaWYg
KGl0ZXIgPT0gZW5kIHx8IGJhc2UtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmlzRW52aXJvbm1l
bnRSZWNvcmQoKSkKLSAgICAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIodGhpc0Rz
dCkgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNh
bGxGcmFtZS0+dW5jaGVja2VkUih0aGlzRHN0KSA9IEpTVmFsdWUoYmFzZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKLQot
ICAgIGV4Y2VwdGlvblZhbHVlID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJh
bWUsIGlkZW50KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KICNlbmRpZiAvLyBFTkFCTEUoQ0xB
U1NJQ19JTlRFUlBSRVRFUikKIAogQUxXQVlTX0lOTElORSBDYWxsRnJhbWUqIEludGVycHJldGVy
OjpzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChDb2RlQmxvY2sqIG5ld0NvZGVCbG9jaywgUmVn
aXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBzaXplX3QgcmVn
aXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKQEAgLTE1NjEsNyAr
MTI4NSw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICBK
U09iamVjdCogdmFyaWFibGVPYmplY3Q7CiAgICAgZm9yIChTY29wZUNoYWluTm9kZSogbm9kZSA9
IHNjb3BlQ2hhaW47IDsgbm9kZSA9IG5vZGUtPm5leHQuZ2V0KCkpIHsKICAgICAgICAgQVNTRVJU
KG5vZGUpOwotICAgICAgICBpZiAobm9kZS0+b2JqZWN0LT5pc1ZhcmlhYmxlT2JqZWN0KCkgJiYg
IW5vZGUtPm9iamVjdC0+aXNTdGF0aWNTY29wZU9iamVjdCgpKSB7CisgICAgICAgIGlmIChub2Rl
LT5vYmplY3QtPmlzVmFyaWFibGVPYmplY3QoKSAmJiAhbm9kZS0+b2JqZWN0LT5pc05hbWVTY29w
ZU9iamVjdCgpKSB7CiAgICAgICAgICAgICB2YXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1N5bWJv
bFRhYmxlT2JqZWN0Kj4obm9kZS0+b2JqZWN0LmdldCgpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC0xNjc4LDcgKzE0MDIsNyBAQCBORVZFUl9JTkxJTkUgU2NvcGVDaGFpbk5v
ZGUqIEludGVycHJldGVyCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwogICAgIElkZW50aWZpZXImIHByb3BlcnR5ID0gY29kZUJsb2NrLT5pZGVudGlm
aWVyKHZQQ1syXS51Lm9wZXJhbmQpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPnIo
dlBDWzNdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IEpTU3Rh
dGljU2NvcGVPYmplY3Q6OmNyZWF0ZShjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgRG9udERl
bGV0ZSk7CisgICAgSlNPYmplY3QqIHNjb3BlID0gSlNOYW1lU2NvcGU6OmNyZWF0ZShjYWxsRnJh
bWUsIHByb3BlcnR5LCB2YWx1ZSwgRG9udERlbGV0ZSk7CiAgICAgY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGRzdCkgPSBKU1ZhbHVlKHNjb3BlKTsKIAogICAgIHJldHVybiBjYWxsRnJhbWUtPnNjb3Bl
Q2hhaW4oKS0+cHVzaChzY29wZSk7CkBAIC0yODI1LDggKzI1NDksMTMgQEAgSlNWYWx1ZSBJbnRl
cnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICAgICBzY29wZSBjaGFpbiwgYW5k
IHdyaXRlcyB0aGUgcmVzdWx0aW5nIHZhbHVlIHRvIHJlZ2lzdGVyCiAgICAgICAgICAgIGRzdC4g
SWYgdGhlIHByb3BlcnR5IGlzIG5vdCBmb3VuZCwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KICAgICAg
ICAgKi8KLSAgICAgICAgaWYgKFVOTElLRUxZKCFyZXNvbHZlKGNhbGxGcmFtZSwgdlBDLCBleGNl
cHRpb25WYWx1ZSkpKQotICAgICAgICAgICAgZ290byB2bV90aHJvdzsKKyAgICAgICAgaW50IGRz
dCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1syXS51Lm9w
ZXJhbmQ7CisgICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+aWRlbnRpZmllcihwcm9wZXJ0eSk7CisKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Nj
b3BlOjpyZXNvbHZlKGNhbGxGcmFtZSwgaWRlbnQpOworICAgICAgICBDSEVDS19GT1JfRVhDRVBU
SU9OKCk7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0OwogCiAg
ICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3Jlc29sdmUpOwogICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7CkBAIC0yODM4LDExICsyNTY3LDE2IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6
OnByaXZhdGVFeGVjdXRlKEV4ZWMKICAgICAgICAgIHNjb3BlIGNoYWluIHNraXBwaW5nIHRoZSB0
b3AgJ3NraXAnIGxldmVscywgYW5kIHdyaXRlcyB0aGUgcmVzdWx0aW5nCiAgICAgICAgICB2YWx1
ZSB0byByZWdpc3RlciBkc3QuIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZm91bmQsIHJhaXNlcyBh
biBleGNlcHRpb24uCiAgICAgICAgICAqLwotICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc29sdmVT
a2lwKGNhbGxGcmFtZSwgdlBDLCBleGNlcHRpb25WYWx1ZSkpKQotICAgICAgICAgICAgZ290byB2
bV90aHJvdzsKKyAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisgICAgICAgIGlu
dCBwcm9wZXJ0eSA9IHZQQ1syXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBza2lwID0gdlBDWzNd
LnUub3BlcmFuZDsKKyAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKIAotICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9yZXNvbHZlX3NraXApOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6
OnJlc29sdmVTa2lwKGNhbGxGcmFtZSwgaWRlbnQsIHNraXApOworICAgICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0
OwogCisgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3Jlc29sdmVfc2tpcCk7CiAgICAg
ICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9CiAgICAgREVGSU5FX09QQ09ERShvcF9yZXNv
bHZlX2dsb2JhbCkgewpAQCAtMjg1MywxMSArMjU4NywxNSBAQCBKU1ZhbHVlIEludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgICAgIGEgZmFzdCBsb29rdXAgdXNpbmcgdGhl
IGNhc2Ugb2Zmc2V0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGEgZnVsbCByZXNvbHZlIGFuZAog
ICAgICAgICAgICBjYWNoZSB0aGUgbmV3IHN0cnVjdHVyZSBhbmQgb2Zmc2V0CiAgICAgICAgICAq
LwotICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc29sdmVHbG9iYWwoY2FsbEZyYW1lLCB2UEMsIGV4
Y2VwdGlvblZhbHVlKSkpCi0gICAgICAgICAgICBnb3RvIHZtX3Rocm93OwotICAgICAgICAKKyAg
ICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBwcm9wZXJ0eSA9
IHZQQ1syXS51Lm9wZXJhbmQ7CisgICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwcm9wZXJ0eSk7CisKKyAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlR2xvYmFsKGNhbGxGcmFtZSwgaWRlbnQsICZ2UENbM10u
dS5zdHJ1Y3R1cmUsICZ2UENbNF0udS5vcGVyYW5kKTsKKyAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQ
VElPTigpOworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKKwog
ICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9yZXNvbHZlX2dsb2JhbCk7Ci0gICAgICAg
IAogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQogICAgIERFRklORV9PUENPREUo
b3BfcmVzb2x2ZV9nbG9iYWxfZHluYW1pYykgewpAQCAtMjg3MSwxMSArMjYwOSwxNiBAQCBKU1Zh
bHVlIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgICBUaGlzIHdhbGtz
IHRocm91Z2ggbiBsZXZlbHMgb2YgdGhlIHNjb3BlIGNoYWluIHRvIHZlcmlmeSB0aGF0IG5vbmUg
b2YgdGhvc2UgbGV2ZWxzCiAgICAgICAgICBpbiB0aGUgc2NvcGUgY2hhaW4gaW5jbHVkZSBkeW5h
bWljYWxseSBhZGRlZCBwcm9wZXJ0aWVzLgogICAgICAgICAgKi8KLSAgICAgICAgaWYgKFVOTElL
RUxZKCFyZXNvbHZlR2xvYmFsRHluYW1pYyhjYWxsRnJhbWUsIHZQQywgZXhjZXB0aW9uVmFsdWUp
KSkKLSAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7Ci0gICAgICAgIAorICAgICAgICBpbnQgZHN0
ID0gdlBDWzFdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzJdLnUub3Bl
cmFuZDsKKyAgICAgICAgaW50IHNraXAgPSB2UENbNV0udS5vcGVyYW5kOworICAgICAgICBJZGVu
dGlmaWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocHJvcGVy
dHkpOworCisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZUdsb2JhbER5
bmFtaWMoY2FsbEZyYW1lLCBpZGVudCwgc2tpcCwgJnZQQ1szXS51LnN0cnVjdHVyZSwgJnZQQ1s0
XS51Lm9wZXJhbmQpOworICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CisgICAgICAgIGNh
bGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0OworCiAgICAgICAgIHZQQyArPSBPUENP
REVfTEVOR1RIKG9wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMpOwotICAgICAgICAKICAgICAgICAg
TkVYVF9JTlNUUlVDVElPTigpOwogICAgIH0KICAgICBERUZJTkVfT1BDT0RFKG9wX2dldF9nbG9i
YWxfdmFyKSB7CkBAIC0zMDA0LDggKzI3NDcsMTQgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cHJp
dmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICAgICBvdXRlcm1vc3Qgc2NvcGUgKHdoaWNoIHdpbGwg
YmUgdGhlIGdsb2JhbCBvYmplY3QpIGlzCiAgICAgICAgICAgIHN0b3JlZCBpbiByZWdpc3RlciBk
c3QuCiAgICAgICAgICovCi0gICAgICAgIHJlc29sdmVCYXNlKGNhbGxGcmFtZSwgdlBDKTsKKyAg
ICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBwcm9wZXJ0eSA9
IHZQQ1syXS51Lm9wZXJhbmQ7CisgICAgICAgIGJvb2wgaXNTdHJpY3QgPSB2UENbM10udS5vcGVy
YW5kOworICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
PmlkZW50aWZpZXIocHJvcGVydHkpOworCisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNTY29w
ZTo6cmVzb2x2ZUJhc2UoY2FsbEZyYW1lLCBpZGVudCwgaXNTdHJpY3QpOwogICAgICAgICBDSEVD
S19GT1JfRVhDRVBUSU9OKCk7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0g
cmVzdWx0OwogCiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3Jlc29sdmVfYmFzZSk7
CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTMwNDIsOCArMjc5MSwxNCBAQCBKU1Zh
bHVlIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgICAgIHJlc29sdmUs
IG9yIHJlc29sdmVfYmFzZSBmb2xsb3dlZCBieSBnZXRfYnlfaWQsIGFzIGl0CiAgICAgICAgICAg
IGF2b2lkcyBkdXBsaWNhdGUgaGFzaCBsb29rdXBzLgogICAgICAgICAqLwotICAgICAgICBpZiAo
VU5MSUtFTFkoIXJlc29sdmVCYXNlQW5kUHJvcGVydHkoY2FsbEZyYW1lLCB2UEMsIGV4Y2VwdGlv
blZhbHVlKSkpCi0gICAgICAgICAgICBnb3RvIHZtX3Rocm93OworICAgICAgICBpbnQgYmFzZURz
dCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBwcm9wRHN0ID0gdlBDWzJdLnUub3Bl
cmFuZDsKKyAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUub3BlcmFuZDsKKyAgICAgICAg
SWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpOworCisg
ICAgICAgIEpTVmFsdWUgcHJvcCA9IEpTU2NvcGU6OnJlc29sdmVXaXRoQmFzZShjYWxsRnJhbWUs
IGlkZW50LCAmY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJhc2VEc3QpKTsKKyAgICAgICAgQ0hFQ0tf
Rk9SX0VYQ0VQVElPTigpOworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvcERzdCkg
PSBwcm9wOwogCiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3Jlc29sdmVfd2l0aF9i
YXNlKTsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMzA1OCw4ICsyODEzLDE0IEBA
IEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWMKIAogICAgICAgICAgICBJ
ZiB0aGUgcHJvcGVydHkgaXMgbm90IGZvdW5kLCByYWlzZXMgYW4gZXhjZXB0aW9uLgogICAgICAg
ICAqLwotICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc29sdmVUaGlzQW5kUHJvcGVydHkoY2FsbEZy
YW1lLCB2UEMsIGV4Y2VwdGlvblZhbHVlKSkpCi0gICAgICAgICAgICBnb3RvIHZtX3Rocm93Owor
ICAgICAgICBpbnQgdGhpc0RzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBwcm9w
RHN0ID0gdlBDWzJdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUu
b3BlcmFuZDsKKyAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZp
ZXIocHJvcGVydHkpOworCisgICAgICAgIEpTVmFsdWUgcHJvcCA9IEpTU2NvcGU6OnJlc29sdmVX
aXRoVGhpcyhjYWxsRnJhbWUsIGlkZW50LCAmY2FsbEZyYW1lLT51bmNoZWNrZWRSKHRoaXNEc3Qp
KTsKKyAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOworICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIocHJvcERzdCkgPSBwcm9wOwogCiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RI
KG9wX3Jlc29sdmVfd2l0aF90aGlzKTsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAt
NDQ4OCw3ICs0MjQ5LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgICAgIGRvZXMg
bm90IGFmZmVjdCB0aGUgc2NvcGUgZW5jbG9zaW5nIHRoZSBGdW5jdGlvbkV4cHJlc3Npb24uCiAg
ICAgICAgICAqLwogICAgICAgICBpZiAoIWZ1bmN0aW9uLT5uYW1lKCkuaXNOdWxsKCkpIHsKLSAg
ICAgICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIGZ1bmN0aW9uU2NvcGVPYmplY3QgPSBKU1N0
YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGUoY2FsbEZyYW1lLCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5j
LCBSZWFkT25seSB8IERvbnREZWxldGUpOworICAgICAgICAgICAgSlNOYW1lU2NvcGUqIGZ1bmN0
aW9uU2NvcGVPYmplY3QgPSBKU05hbWVTY29wZTo6Y3JlYXRlKGNhbGxGcmFtZSwgZnVuY3Rpb24t
Pm5hbWUoKSwgZnVuYywgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKICAgICAgICAgICAgIGZ1bmMt
PnNldFNjb3BlKCpnbG9iYWxEYXRhLCBmdW5jLT5zY29wZSgpLT5wdXNoKGZ1bmN0aW9uU2NvcGVP
YmplY3QpKTsKICAgICAgICAgfQogCkBAIC01MTMyLDcgKzQ4OTMsNyBAQCBza2lwX2lkX2N1c3Rv
bV9zZWxmOgogICAgIERFRklORV9PUENPREUob3BfcHVzaF9uZXdfc2NvcGUpIHsKICAgICAgICAg
LyogbmV3X3Njb3BlIGRzdChyKSBwcm9wZXJ0eShpZCkgdmFsdWUocikKICAgICAgICAgIAotICAg
ICAgICAgICBDb25zdHJ1Y3RzIGEgbmV3IFN0YXRpY1Njb3BlT2JqZWN0IHdpdGggcHJvcGVydHkg
c2V0IHRvIHZhbHVlLiAgVGhhdCBzY29wZQorICAgICAgICAgICBDb25zdHJ1Y3RzIGEgbmV3IE5h
bWVTY29wZU9iamVjdCB3aXRoIHByb3BlcnR5IHNldCB0byB2YWx1ZS4gIFRoYXQgc2NvcGUKICAg
ICAgICAgICAgb2JqZWN0IGlzIHRoZW4gcHVzaGVkIG9udG8gdGhlIFNjb3BlQ2hhaW4uICBUaGUg
c2NvcGUgb2JqZWN0IGlzIHRoZW4gc3RvcmVkCiAgICAgICAgICAgIGluIGRzdCBmb3IgR0MuCiAg
ICAgICAgICAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmgJKHJldmlzaW9uIDEyNjgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksMTMgKzI1
OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGV4ZWN1dGUoQ2FsbEZyYW1l
Q2xvc3VyZSYpOwogCiAjaWYgRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpCi0gICAgICAgIE5F
VkVSX0lOTElORSBib29sIHJlc29sdmUoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24qLCBKU1ZhbHVl
JiBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIE5FVkVSX0lOTElORSBib29sIHJlc29sdmVTa2lw
KENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwgSlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUpOwotICAg
ICAgICBORVZFUl9JTkxJTkUgYm9vbCByZXNvbHZlR2xvYmFsKENhbGxGcmFtZSosIEluc3RydWN0
aW9uKiwgSlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBORVZFUl9JTkxJTkUgYm9v
bCByZXNvbHZlR2xvYmFsRHluYW1pYyhDYWxsRnJhbWUqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWUm
IGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgcmVzb2x2ZUJhc2Uo
Q2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24qIHZQQyk7Ci0gICAgICAgIE5FVkVSX0lOTElORSBib29s
IHJlc29sdmVCYXNlQW5kUHJvcGVydHkoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24qLCBKU1ZhbHVl
JiBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIE5FVkVSX0lOTElORSBib29sIHJlc29sdmVUaGlz
QW5kUHJvcGVydHkoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24qLCBKU1ZhbHVlJiBleGNlcHRpb25W
YWx1ZSk7CiAgICAgICAgIE5FVkVSX0lOTElORSBTY29wZUNoYWluTm9kZSogY3JlYXRlRXhjZXB0
aW9uU2NvcGUoQ2FsbEZyYW1lKiwgY29uc3QgSW5zdHJ1Y3Rpb24qIHZQQyk7CiAKICAgICAgICAg
dm9pZCB0cnlDYWNoZUdldEJ5SUQoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24q
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCShyZXZpc2lvbiAxMjY4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOSArNTAsOSBAQAogI2luY2x1ZGUgIkpTQXJy
YXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuaCIKKyNpbmNsdWRlICJKU05hbWVTY29wZS5oIgogI2luY2x1ZGUgIkpTTm90QW5P
YmplY3QuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAi
SlNTdGF0aWNTY29wZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAi
TmFtZUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCkBAIC0yMzkzLDcg
KzIzOTMsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAKICAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogCi0gICAgSlNW
YWx1ZSByZXN1bHQgPSBDb21tb25TbG93UGF0aHM6Om9wUmVzb2x2ZShjYWxsRnJhbWUsIHN0YWNr
RnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNTY29w
ZTo6cmVzb2x2ZShjYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCkpOwog
ICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogfQpAQCAtMjYyNCwxOCArMjYyNCwxNiBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0
YWNrRnJhbWUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0M6OnJlc29sdmVCYXNl
KHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpLCBz
dGFja0ZyYW1lLmNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLCBmYWxzZSkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNTY29wZTo6cmVzb2x2ZUJhc2Uoc3RhY2tGcmFtZS5jYWxsRnJhbWUs
IHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksIGZhbHNlKSk7CiB9CiAKIERFRklORV9T
VFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9yZXNvbHZlX2Jhc2Vfc3RyaWN0X3B1dCkK
IHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0gICAgSlNWYWx1ZSBi
YXNlID0gSlNDOjpyZXNvbHZlQmFzZShzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5h
cmdzWzBdLmlkZW50aWZpZXIoKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKSwg
dHJ1ZSk7Ci0gICAgaWYgKCFiYXNlKSB7Ci0gICAgICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+
ZXhjZXB0aW9uID0gY3JlYXRlRXJyb3JGb3JJbnZhbGlkR2xvYmFsQXNzaWdubWVudChzdGFja0Zy
YW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKS51c3RyaW5nKCkp
OwotICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKLSAgICB9Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShiYXNlKTsKKworICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJl
c29sdmVCYXNlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRp
ZmllcigpLCB0cnVlKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNv
ZGVkSlNWYWx1ZSwgb3BfZW5zdXJlX3Byb3BlcnR5X2V4aXN0cykKQEAgLTI2NTcsNyArMjY1NSw3
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIHsKICAgICBTVFVC
X0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IENv
bW1vblNsb3dQYXRoczo6b3BSZXNvbHZlU2tpcChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tG
cmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCkpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZVNraXAoc3RhY2tGcmFtZS5jYWxs
RnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksIHN0YWNrRnJhbWUuYXJnc1sx
XS5pbnQzMigpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTI2NjcsMjggKzI2NjUsMTQgQEAgREVG
SU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIFNUVUJfSU5JVF9TVEFD
S19GUkFNRShzdGFja0ZyYW1lKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tG
cmFtZS5jYWxsRnJhbWU7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpOwogICAgIElkZW50aWZpZXImIGlkZW50ID0gc3RhY2tGcmFtZS5hcmdz
WzBdLmlkZW50aWZpZXIoKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgZ2xvYmFsUmVzb2x2ZUluZm9JbmRleCA9IHN0YWNr
RnJhbWUuYXJnc1sxXS5pbnQzMigpOwotICAgIEFTU0VSVChnbG9iYWxPYmplY3QtPmlzR2xvYmFs
T2JqZWN0KCkpOwotCi0gICAgUHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0KTsKLSAgICBp
ZiAoZ2xvYmFsT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCkp
IHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRl
bnQpOwotICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgJiYgIWdsb2JhbE9iamVj
dC0+c3RydWN0dXJlKCktPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgJiYgc2xvdC5zbG90QmFz
ZSgpID09IGdsb2JhbE9iamVjdCkgewotICAgICAgICAgICAgR2xvYmFsUmVzb2x2ZUluZm8mIGds
b2JhbFJlc29sdmVJbmZvID0gY29kZUJsb2NrLT5nbG9iYWxSZXNvbHZlSW5mbyhnbG9iYWxSZXNv
bHZlSW5mb0luZGV4KTsKLSAgICAgICAgICAgIGdsb2JhbFJlc29sdmVJbmZvLnN0cnVjdHVyZS5z
ZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCkpOwotICAgICAgICAgICAgZ2xvYmFsUmVzb2x2ZUlu
Zm8ub2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICAgICAgfQorICAgIEdsb2JhbFJlc29sdmVJbmZvJiBn
bG9iYWxSZXNvbHZlSW5mbyA9IGNvZGVCbG9jay0+Z2xvYmFsUmVzb2x2ZUluZm8oZ2xvYmFsUmVz
b2x2ZUluZm9JbmRleCk7CiAKLSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgIH0KLQotICAgIHN0
YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVF
cnJvcihjYWxsRnJhbWUsIGlkZW50KTsKLSAgICBWTV9USFJPV19FWENFUFRJT04oKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmVHbG9iYWwoY2FsbEZyYW1lLCBpZGVudCwg
Jmdsb2JhbFJlc29sdmVJbmZvLnN0cnVjdHVyZSwgJmdsb2JhbFJlc29sdmVJbmZvLm9mZnNldCk7
CisgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2Rp
dikKQEAgLTI5NzAsNyArMjk1NCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1Zh
bHVlLCBvcF8KICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0gQ29tbW9uU2xvd1BhdGhzOjpvcFJlc29sdmVXaXRoQmFzZShjYWxsRnJhbWUsIHN0
YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbc3Rh
Y2tGcmFtZS5hcmdzWzFdLmludDMyKCldKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6
OnJlc29sdmVXaXRoQmFzZShjYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVy
KCksICZjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3N0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpXSk7
CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0yOTgwLDcgKzI5NjQsNyBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFt
ZTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IENvbW1vblNsb3dQYXRoczo6b3BSZXNvbHZlV2l0aFRo
aXMoY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpLCBjYWxsRnJhbWUt
PnJlZ2lzdGVycygpW3N0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpXSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlV2l0aFRoaXMoY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFy
Z3NbMF0uaWRlbnRpZmllcigpLCAmY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzdGFja0ZyYW1lLmFy
Z3NbMV0uaW50MzIoKV0pOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQpAQCAtMzAwMiw3ICsyOTg2LDcgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9uZXdfZgogICAgICAgICBkb2VzIG5v
dCBhZmZlY3QgdGhlIHNjb3BlIGVuY2xvc2luZyB0aGUgRnVuY3Rpb25FeHByZXNzaW9uLgogICAg
ICAqLwogICAgIGlmICghZnVuY3Rpb24tPm5hbWUoKS5pc051bGwoKSkgewotICAgICAgICBKU1N0
YXRpY1Njb3BlT2JqZWN0KiBmdW5jdGlvblNjb3BlT2JqZWN0ID0gSlNTdGF0aWNTY29wZU9iamVj
dDo6Y3JlYXRlKGNhbGxGcmFtZSwgZnVuY3Rpb24tPm5hbWUoKSwgZnVuYywgUmVhZE9ubHkgfCBE
b250RGVsZXRlKTsKKyAgICAgICAgSlNOYW1lU2NvcGUqIGZ1bmN0aW9uU2NvcGVPYmplY3QgPSBK
U05hbWVTY29wZTo6Y3JlYXRlKGNhbGxGcmFtZSwgZnVuY3Rpb24tPm5hbWUoKSwgZnVuYywgUmVh
ZE9ubHkgfCBEb250RGVsZXRlKTsKICAgICAgICAgZnVuYy0+c2V0U2NvcGUoY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCksIGZ1bmMtPnNjb3BlKCktPnB1c2goZnVuY3Rpb25TY29wZU9iamVjdCkpOwog
ICAgIH0KIApAQCAtMzI3MSw3ICszMjU1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmpl
Y3QqLCBvcF9wdXNoXwogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsK
IAotICAgIEpTT2JqZWN0KiBzY29wZSA9IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZShzdGFj
a0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgc3RhY2tG
cmFtZS5hcmdzWzFdLmpzVmFsdWUoKSwgRG9udERlbGV0ZSk7CisgICAgSlNPYmplY3QqIHNjb3Bl
ID0gSlNOYW1lU2NvcGU6OmNyZWF0ZShzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5h
cmdzWzBdLmlkZW50aWZpZXIoKSwgc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKSwgRG9udERl
bGV0ZSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1l
OwogICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+
cHVzaChzY29wZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxMjY4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4
IEBACiAjaW5jbHVkZSAiSklURHJpdmVyLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJKU05hbWVTY29w
ZS5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJKU1N0
YXRpY1Njb3BlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU1Zh
bHVlLmgiCiAjaW5jbHVkZSAiTExJbnRDb21tb24uaCIKQEAgLTc1Nyw3ICs3NTcsNyBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaW4pCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfcmVzb2x2ZSkKIHsKICAgICBMTElOVF9CRUdJTigpOwotICAgIExMSU5UX1JFVFVSTl9Q
Uk9GSUxFRChvcF9yZXNvbHZlLCBDb21tb25TbG93UGF0aHM6Om9wUmVzb2x2ZShleGVjLCBleGVj
LT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpKSk7CisgICAgTExJTlRf
UkVUVVJOX1BST0ZJTEVEKG9wX3Jlc29sdmUsIEpTU2NvcGU6OnJlc29sdmUoZXhlYywgZXhlYy0+
Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKSkpOwogfQogCiBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9za2lwKQpAQCAtNzY1LDU3ICs3NjUsMzEg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfcwogICAgIExMSU5UX0JF
R0lOKCk7CiAgICAgTExJTlRfUkVUVVJOX1BST0ZJTEVEKAogICAgICAgICBvcF9yZXNvbHZlX3Nr
aXAsCi0gICAgICAgIENvbW1vblNsb3dQYXRoczo6b3BSZXNvbHZlU2tpcCgKKyAgICAgICAgSlNT
Y29wZTo6cmVzb2x2ZVNraXAoCiAgICAgICAgICAgICBleGVjLAogICAgICAgICAgICAgZXhlYy0+
Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKSwKICAgICAgICAgICAgIHBj
WzNdLnUub3BlcmFuZCkpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSByZXNvbHZlR2xvYmFsKEV4ZWNT
dGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHBjKQotewotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgQVNTRVJUKGdsb2JhbE9iamVjdC0+aXNH
bG9iYWxPYmplY3QoKSk7Ci0gICAgaW50IHByb3BlcnR5ID0gcGNbMl0udS5vcGVyYW5kOwotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gcGNbM10udS5zdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgCi0g
ICAgQVNTRVJUX1VOVVNFRChzdHJ1Y3R1cmUsIHN0cnVjdHVyZSAhPSBnbG9iYWxPYmplY3QtPnN0
cnVjdHVyZSgpKTsKLSAgICAKLSAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRl
bnRpZmllcihwcm9wZXJ0eSk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0KTsK
LSAgICAKLSAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQs
IHNsb3QpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBp
ZGVudCk7Ci0gICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSAmJiAhZ2xvYmFsT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKQotICAgICAgICAgICAg
JiYgc2xvdC5zbG90QmFzZSgpID09IGdsb2JhbE9iamVjdCkgewotICAgICAgICAgICAgcGNbM10u
dS5zdHJ1Y3R1cmUuc2V0KAotICAgICAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Ci0g
ICAgICAgICAgICBwY1s0XSA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIGV4ZWMtPmdsb2Jh
bERhdGEoKS5leGNlcHRpb24gPSBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlk
ZW50KTsKLSAgICByZXR1cm4gSlNWYWx1ZSgpOwotfQotCiBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfcmVzb2x2ZV9nbG9iYWwpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBMTElO
VF9SRVRVUk5fUFJPRklMRUQob3BfcmVzb2x2ZV9nbG9iYWwsIHJlc29sdmVHbG9iYWwoZXhlYywg
cGMpKTsKKyAgICBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlm
aWVyKHBjWzJdLnUub3BlcmFuZCk7CisgICAgTExJTlRfUkVUVVJOX1BST0ZJTEVEKG9wX3Jlc29s
dmVfZ2xvYmFsLCBKU1Njb3BlOjpyZXNvbHZlR2xvYmFsKGV4ZWMsIGlkZW50LCAmcGNbM10udS5z
dHJ1Y3R1cmUsICZwY1s0XS51Lm9wZXJhbmQpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMpCiB7CisgICAgLy8gRklYTUU6IDxyZGFy
Oi8vcHJvYmxlbS8xMjE4NTQ4Nz4gTExJbnQgcmVzb2x2ZV9nbG9iYWxfZHluYW1pYyBkb2Vzbid0
IGNoZWNrIGludGVydmVuaW5nIHNjb3BlcyBmb3IgbW9kaWZpY2F0aW9uCiAgICAgTExJTlRfQkVH
SU4oKTsKLSAgICBMTElOVF9SRVRVUk5fUFJPRklMRUQob3BfcmVzb2x2ZV9nbG9iYWxfZHluYW1p
YywgcmVzb2x2ZUdsb2JhbChleGVjLCBwYykpOworICAgIElkZW50aWZpZXImIGlkZW50ID0gZXhl
Yy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKKyAgICBMTElOVF9S
RVRVUk5fUFJPRklMRUQob3BfcmVzb2x2ZV9nbG9iYWxfZHluYW1pYywgSlNTY29wZTo6cmVzb2x2
ZUdsb2JhbChleGVjLCBpZGVudCwgJnBjWzNdLnUuc3RydWN0dXJlLCAmcGNbNF0udS5vcGVyYW5k
KSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX2Zvcl9yZXNv
bHZlX2dsb2JhbF9keW5hbWljKQogewogICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgTExJTlRfUkVU
VVJOX1BST0ZJTEVEKG9wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMsIENvbW1vblNsb3dQYXRoczo6
b3BSZXNvbHZlKGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHBjWzJdLnUub3Bl
cmFuZCkpKTsKKyAgICBMTElOVF9SRVRVUk5fUFJPRklMRUQob3BfcmVzb2x2ZV9nbG9iYWxfZHlu
YW1pYywgSlNTY29wZTo6cmVzb2x2ZShleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmll
cihwY1syXS51Lm9wZXJhbmQpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9yZXNvbHZlX2Jhc2UpCkBAIC04MjMsMTMgKzc5NywxMiBAQCBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfcmVzb2x2ZV9iCiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBJZGVudGlmaWVy
JiBpZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHBjWzJdLnUub3BlcmFuZCk7
CiAgICAgaWYgKHBjWzNdLnUub3BlcmFuZCkgewotICAgICAgICBKU1ZhbHVlIGJhc2UgPSBKU0M6
OnJlc29sdmVCYXNlKGV4ZWMsIGlkZW50LCBleGVjLT5zY29wZUNoYWluKCksIHRydWUpOwotICAg
ICAgICBpZiAoIWJhc2UpCi0gICAgICAgICAgICBMTElOVF9USFJPVyhjcmVhdGVFcnJvckZvcklu
dmFsaWRHbG9iYWxBc3NpZ25tZW50KGV4ZWMsIGlkZW50LnVzdHJpbmcoKSkpOwotICAgICAgICBM
TElOVF9SRVRVUk4oYmFzZSk7CisgICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6
OnJlc29sdmVCYXNlKGV4ZWMsIGlkZW50LCB0cnVlKSkKKyAgICAgICAgICAgIExMSU5UX1JFVFVS
TihyZXN1bHQpOworICAgICAgICBMTElOVF9USFJPVyhnbG9iYWxEYXRhLmV4Y2VwdGlvbik7CiAg
ICAgfQotICAgIAotICAgIExMSU5UX1JFVFVSTl9QUk9GSUxFRChvcF9yZXNvbHZlX2Jhc2UsIEpT
Qzo6cmVzb2x2ZUJhc2UoZXhlYywgaWRlbnQsIGV4ZWMtPnNjb3BlQ2hhaW4oKSwgZmFsc2UpKTsK
KworICAgIExMSU5UX1JFVFVSTl9QUk9GSUxFRChvcF9yZXNvbHZlX2Jhc2UsIEpTU2NvcGU6OnJl
c29sdmVCYXNlKGV4ZWMsIGlkZW50LCBmYWxzZSkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfZW5zdXJlX3Byb3BlcnR5X2V4aXN0cykKQEAgLTg0Niw3ICs4MTksNyBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZW5zdXJlX3ByCiBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfcmVzb2x2ZV93aXRoX2Jhc2UpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IENvbW1vblNsb3dQYXRoczo6b3BSZXNvbHZlV2l0aEJhc2Uo
ZXhlYywgZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKSwgTExJ
TlRfT1AoMSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZVdpdGhCYXNl
KGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCksICZM
TElOVF9PUCgxKSk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgTExJTlRfT1Ao
MikgPSByZXN1bHQ7CiAgICAgLy8gRklYTUU6IHRlY2huaWNhbGx5IHNob3VsZCBoYXZlIHByb2Zp
bGluZywgYnV0IHdlIGRvbid0IGRvIGl0IGJlY2F1c2UgdGhlIERGRyB3b24ndCB1c2UgaXQuCkBA
IC04NTYsNyArODI5LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVf
dwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfd2l0aF90aGlzKQogewog
ICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBDb21tb25TbG93UGF0aHM6
Om9wUmVzb2x2ZVdpdGhUaGlzKGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHBj
WzNdLnUub3BlcmFuZCksIExMSU5UX09QKDEpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2Nv
cGU6OnJlc29sdmVXaXRoVGhpcyhleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihw
Y1szXS51Lm9wZXJhbmQpLCAmTExJTlRfT1AoMSkpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElP
TigpOwogICAgIExMSU5UX09QKDIpID0gcmVzdWx0OwogICAgIC8vIEZJWE1FOiB0ZWNobmljYWxs
eSBzaG91bGQgaGF2ZSBwcm9maWxpbmcsIGJ1dCB3ZSBkb24ndCBkbyBpdCBiZWNhdXNlIHRoZSBE
Rkcgd29uJ3QgdXNlIGl0LgpAQCAtMTI5NSw3ICsxMjY4LDcgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX25ld19mdW5jXwogICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBmdW5jdGlvbi0+
bWFrZShleGVjLCBleGVjLT5zY29wZUNoYWluKCkpOwogICAgIAogICAgIGlmICghZnVuY3Rpb24t
Pm5hbWUoKS5pc051bGwoKSkgewotICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBmdW5jdGlv
blNjb3BlT2JqZWN0ID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKGV4ZWMsIGZ1bmN0aW9u
LT5uYW1lKCksIGZ1bmMsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAgICAgIEpTTmFtZVNj
b3BlKiBmdW5jdGlvblNjb3BlT2JqZWN0ID0gSlNOYW1lU2NvcGU6OmNyZWF0ZShleGVjLCBmdW5j
dGlvbi0+bmFtZSgpLCBmdW5jLCBSZWFkT25seSB8IERvbnREZWxldGUpOwogICAgICAgICBmdW5j
LT5zZXRTY29wZShnbG9iYWxEYXRhLCBmdW5jLT5zY29wZSgpLT5wdXNoKGZ1bmN0aW9uU2NvcGVP
YmplY3QpKTsKICAgICB9CiAgICAgCkBAIC0xNTc4LDcgKzE1NTEsNyBAQCBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfcHVzaF9uZXdfCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIEpTT2JqZWN0KiBz
Y29wZSA9IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZShleGVjLCBjb2RlQmxvY2stPmlkZW50
aWZpZXIocGNbMl0udS5vcGVyYW5kKSwgTExJTlRfT1AoMykuanNWYWx1ZSgpLCBEb250RGVsZXRl
KTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBKU05hbWVTY29wZTo6Y3JlYXRlKGV4ZWMsIGNvZGVC
bG9jay0+aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpLCBMTElOVF9PUCgzKS5qc1ZhbHVlKCks
IERvbnREZWxldGUpOwogICAgIGV4ZWMtPnNldFNjb3BlQ2hhaW4oZXhlYy0+c2NvcGVDaGFpbigp
LT5wdXNoKHNjb3BlKSk7CiAgICAgTExJTlRfUkVUVVJOKHNjb3BlKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lvbiAxMjY4MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NyArMzMsNyBAQAogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTU3RhdGljU2NvcGVPYmplY3Qu
aCIKKyNpbmNsdWRlICJKU05hbWVTY29wZS5oIgogI2luY2x1ZGUgIkxhYmVsU2NvcGUuaCIKICNp
bmNsdWRlICJMZXhlci5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAx
MjY4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDEyMyArMTE5LDYgQEAgaW5saW5lIGJvb2wgb3BJbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdQogICAgIHJldHVybiBiYXNlT2JqLT5oYXNQcm9wZXJ0eShl
eGVjLCBwcm9wZXJ0eSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBvcFJlc29sdmUoRXhl
Y1N0YXRlKiBleGVjLCBJZGVudGlmaWVyJiBpZGVudCkKLXsKLSAgICBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbiA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKLQotICAgIFNjb3BlQ2hhaW5JdGVyYXRv
ciBpdGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5k
ID0gc2NvcGVDaGFpbi0+ZW5kKCk7Ci0gICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLSAgICAKLSAg
ICBkbyB7Ci0gICAgICAgIEpTT2JqZWN0KiBvID0gaXRlci0+Z2V0KCk7Ci0gICAgICAgIFByb3Bl
cnR5U2xvdCBzbG90KG8pOwotICAgICAgICBpZiAoby0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlk
ZW50LCBzbG90KSkKLSAgICAgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50
KTsKLSAgICB9IHdoaWxlICgrK2l0ZXIgIT0gZW5kKTsKLQotICAgIGV4ZWMtPmdsb2JhbERhdGEo
KS5leGNlcHRpb24gPSBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KTsK
LSAgICByZXR1cm4gSlNWYWx1ZSgpOwotfQotCi1BTFdBWVNfSU5MSU5FIEpTVmFsdWUgb3BSZXNv
bHZlU2tpcChFeGVjU3RhdGUqIGV4ZWMsIElkZW50aWZpZXImIGlkZW50LCBpbnQgc2tpcCkKLXsK
LSAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKLQot
ICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKLSAgICBT
Y29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+ZW5kKCk7Ci0gICAgQVNTRVJUKGl0
ZXIgIT0gZW5kKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotICAgIGJvb2wgY2hlY2tUb3BMZXZlbCA9IGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5j
dGlvbkNvZGUgJiYgY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCk7Ci0gICAgQVNTRVJU
KHNraXAgfHwgIWNoZWNrVG9wTGV2ZWwpOwotICAgIGlmIChjaGVja1RvcExldmVsICYmIHNraXAt
LSkgewotICAgICAgICBpZiAoZXhlYy0+dW5jaGVja2VkUihjb2RlQmxvY2stPmFjdGl2YXRpb25S
ZWdpc3RlcigpKS5qc1ZhbHVlKCkpCi0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgfQotICAgIHdo
aWxlIChza2lwLS0pIHsKLSAgICAgICAgKytpdGVyOwotICAgICAgICBBU1NFUlQoaXRlciAhPSBl
bmQpOwotICAgIH0KLSAgICBkbyB7Ci0gICAgICAgIEpTT2JqZWN0KiBvID0gaXRlci0+Z2V0KCk7
Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG8pOwotICAgICAgICBpZiAoby0+Z2V0UHJvcGVy
dHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkKLSAgICAgICAgICAgIHJldHVybiBzbG90LmdldFZh
bHVlKGV4ZWMsIGlkZW50KTsKLSAgICB9IHdoaWxlICgrK2l0ZXIgIT0gZW5kKTsKLQotICAgIGV4
ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9y
KGV4ZWMsIGlkZW50KTsKLSAgICByZXR1cm4gSlNWYWx1ZSgpOwotfQotCi1BTFdBWVNfSU5MSU5F
IEpTVmFsdWUgb3BSZXNvbHZlV2l0aEJhc2UoRXhlY1N0YXRlKiBleGVjLCBJZGVudGlmaWVyJiBp
ZGVudCwgUmVnaXN0ZXImIGJhc2VTbG90KQotewotICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluID0gZXhlYy0+c2NvcGVDaGFpbigpOwotCi0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIg
PSBzY29wZUNoYWluLT5iZWdpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBzY29w
ZUNoYWluLT5lbmQoKTsKLQotICAgIC8vIEZJWE1FOiBhZGQgc2NvcGVEZXB0aElzWmVybyBvcHRp
bWl6YXRpb24KLQotICAgIEFTU0VSVChpdGVyICE9IGVuZCk7Ci0KLSAgICBKU09iamVjdCogYmFz
ZTsKLSAgICBkbyB7Ci0gICAgICAgIGJhc2UgPSBpdGVyLT5nZXQoKTsKLSAgICAgICAgUHJvcGVy
dHlTbG90IHNsb3QoYmFzZSk7Ci0gICAgICAgIGlmIChiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhl
YywgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IHNsb3QuZ2V0
VmFsdWUoZXhlYywgaWRlbnQpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5l
eGNlcHRpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLQotICAgICAgICAg
ICAgYmFzZVNsb3QgPSBKU1ZhbHVlKGJhc2UpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotICAgICAgICArK2l0ZXI7Ci0gICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwot
Ci0gICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZVVuZGVmaW5lZFZhcmlh
YmxlRXJyb3IoZXhlYywgaWRlbnQpOwotICAgIHJldHVybiBKU1ZhbHVlKCk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBvcFJlc29sdmVXaXRoVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIElkZW50
aWZpZXImIGlkZW50LCBSZWdpc3RlciYgYmFzZVNsb3QpCi17Ci0gICAgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW4gPSBleGVjLT5zY29wZUNoYWluKCk7Ci0KLSAgICBTY29wZUNoYWluSXRlcmF0
b3IgaXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVu
ZCA9IHNjb3BlQ2hhaW4tPmVuZCgpOwotCi0gICAgLy8gRklYTUU6IGFkZCBzY29wZURlcHRoSXNa
ZXJvIG9wdGltaXphdGlvbgotCi0gICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLQotICAgIEpTT2Jq
ZWN0KiBiYXNlOwotICAgIGRvIHsKLSAgICAgICAgYmFzZSA9IGl0ZXItPmdldCgpOwotICAgICAg
ICArK2l0ZXI7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2UpOwotICAgICAgICBpZiAo
YmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAg
SlNWYWx1ZSByZXN1bHQgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KTsKLSAgICAgICAgICAg
IGlmIChleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKQotICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7Ci0KLSAgICAgICAgICAgIC8vIEFsbCBlbnRyaWVzIG9uIHRoZSBzY29wZSBj
aGFpbiBzaG91bGQgYmUgRW52aXJvbm1lbnRSZWNvcmRzIChhY3RpdmF0aW9ucyBldGMpLAotICAg
ICAgICAgICAgLy8gb3RoZXIgdGhlbiAnd2l0aCcgb2JqZWN0LCB3aGljaCBhcmUgZGlyZWN0bHkg
cmVmZXJlbmNlZCBmcm9tIHRoZSBzY29wZSBjaGFpbiwKLSAgICAgICAgICAgIC8vIGFuZCB0aGUg
Z2xvYmFsIG9iamVjdC4gSWYgd2UgaGl0IGVpdGhlciBhbiBFbnZpcm9ubWVudFJlY29yZCBvciBh
IGdsb2JhbAotICAgICAgICAgICAgLy8gb2JqZWN0IGF0IHRoZSBlbmQgb2YgdGhlIHNjb3BlIGNo
YWluLCB0aGlzIGlzIHVuZGVmaW5lZC4gSWYgd2UgaGl0IGEgbm9uLQotICAgICAgICAgICAgLy8g
RW52aXJvbm1lbnRSZWNvcmQgd2l0aGluIHRoZSBzY29wZSBjaGFpbiwgcGFzcyB0aGUgYmFzZSBh
cyB0aGUgdGhpcyB2YWx1ZS4KLSAgICAgICAgICAgIGlmIChpdGVyID09IGVuZCB8fCBiYXNlLT5z
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pc0Vudmlyb25tZW50UmVjb3JkKCkpCi0gICAgICAgICAg
ICAgICAgYmFzZVNsb3QgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGJhc2VTbG90ID0gSlNWYWx1ZShiYXNlKTsKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7Ci0KLSAgICBleGVj
LT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihl
eGVjLCBpZGVudCk7Ci0gICAgcmV0dXJuIEpTVmFsdWUoKTsKLX0KLQogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkNvbW1vblNsb3dQYXRocwogCiAjZW5kaWYgLy8gQ29tbW9uU2xvd1BhdGhzX2gKLQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3Bw
CShyZXZpc2lvbiAxMjY4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAKICNpbmNsdWRl
ICJKU0dsb2JhbERhdGEuaCIKIAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKLSNpbmNsdWRlICJIZWFw
LmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJEZWJ1Z2dlckFj
dGl2YXRpb24uaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
R0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVk
ZSAiSGVhcC5oIgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKICNpbmNsdWRlICJJ
bmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtNDUsOSAr
NDUsOSBAQAogI2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgi
CiAjaW5jbHVkZSAiSlNMb2NrLmgiCisjaW5jbHVkZSAiSlNOYW1lU2NvcGUuaCIKICNpbmNsdWRl
ICJKU05vdEFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgot
I2luY2x1ZGUgIkpTU3RhdGljU2NvcGVPYmplY3QuaCIKICNpbmNsdWRlICJMZXhlci5oIgogI2lu
Y2x1ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUgIk5vZGVzLmgiCkBAIC0xODksNyArMTg5LDcgQEAg
SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogICAgIGFjdGl2YXRpb25T
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKICAgICBpbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLnNl
dCgqdGhpcywgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlz
LCAwLCBqc051bGwoKSkpOwogICAgIHRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5z
ZXQoKnRoaXMsIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlz
LCAwLCBqc051bGwoKSkpOwotICAgIHN0YXRpY1Njb3BlU3RydWN0dXJlLnNldCgqdGhpcywgSlNT
dGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwor
ICAgIG5hbWVTY29wZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTTmFtZVNjb3BlOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3RyaWN0RXZhbEFjdGl2YXRpb25TdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBTdHJpY3RFdmFsQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHN0cmluZ1N0cnVjdHVyZS5zZXQoKnRoaXMsIEpTU3Ry
aW5nOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgbm90QW5PYmpl
Y3RTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU05vdEFuT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTI2ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNCw3ICsyMjQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gYWN0aXZhdGlv
blN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW50ZXJydXB0ZWRFeGVjdXRp
b25FcnJvclN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdGF0aWNT
Y29wZVN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbmFtZVNjb3BlU3RydWN0
dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJpY3RFdmFsQWN0aXZhdGlvblN0cnVj
dHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RyaW5nU3RydWN0dXJlOwogICAgICAg
ICBTdHJvbmc8U3RydWN0dXJlPiBub3RBbk9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5jcHAJKHJldmlzaW9uIDEyNjcy
MSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVj
dC5jcHA6MTI2NzIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2Nv
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiSlNTdGF0aWNTY29wZU9iamVjdC5oIgorCisjaW5jbHVkZSAiRXJyb3IuaCIK
KworbmFtZXNwYWNlIEpTQyB7CitBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTU3RhdGljU2Nv
cGVPYmplY3QpOworCitjb25zdCBDbGFzc0luZm8gSlNTdGF0aWNTY29wZU9iamVjdDo6c19pbmZv
ID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1N0YXRpY1Njb3BlT2JqZWN0KSB9OworCit2b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1N0
YXRpY1Njb3BlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3RhdGljU2NvcGVPYmplY3Qq
PihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2lu
Zm8pOworICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRD
aGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CisgICAg
QVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW4oKSk7CisKKyAgICBKU1ZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3JlZ2lz
dGVyU3RvcmUpOworfQorCitKU09iamVjdCogSlNTdGF0aWNTY29wZU9iamVjdDo6dG9UaGlzT2Jq
ZWN0KEpTQ2VsbCosIEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZXhlYy0+Z2xvYmFs
VGhpc1ZhbHVlKCk7Cit9CisKK3ZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6cHV0KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNTdGF0aWNTY29wZU9iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4oY2VsbCk7CisgICAg
aWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgLy8gRG91YmxlIGxvb2t1cCBpbiBz
dHJpY3QgbW9kZSwgYnV0IHRoaXMgb25seSBvY2N1cnMgd2hlbgorICAgICAgICAvLyBhKSBpbmRp
cmVjdGx5IHdyaXRpbmcgdG8gYW4gZXhjZXB0aW9uIHNsb3QKKyAgICAgICAgLy8gYikgd3JpdGlu
ZyB0byBhIGZ1bmN0aW9uIGV4cHJlc3Npb24gbmFtZQorICAgICAgICAvLyAoYSkgaXMgdW5saWtl
bHksIGFuZCAoYikgaXMgYW4gZXJyb3IuCisgICAgICAgIC8vIEFsc28gd2l0aCBhIHNpbmdsZSBl
bnRyeSB0aGUgc3ltYm9sIHRhYmxlIGxvb2t1cCBzaG91bGQgc2ltcGx5IGJlCisgICAgICAgIC8v
IGEgcG9pbnRlciBjb21wYXJlLgorICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAgICAg
Ym9vbCBpc1dyaXRhYmxlID0gdHJ1ZTsKKyAgICAgICAgc3ltYm9sVGFibGVHZXQodGhpc09iamVj
dCwgcHJvcGVydHlOYW1lLCBzbG90LCBpc1dyaXRhYmxlKTsKKyAgICAgICAgaWYgKCFpc1dyaXRh
YmxlKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVj
LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc3ltYm9sVGFibGVQdXQodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBK
U1N0YXRpY1Njb3BlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
dW5zaWduZWQgYXR0cmlidXRlcykKK3sKKyAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihvYmplY3QpOworICAgIGlmIChzeW1i
b2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKHRoaXNPYmplY3QsIGV4ZWMtPmdsb2JhbERhdGEoKSwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBKU1N0YXRpY1Njb3BlT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIHN5bWJv
bFRhYmxlR2V0KGpzQ2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4oY2VsbCksIHByb3BlcnR5TmFt
ZSwgc2xvdCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TmFtZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU05hbWVTY29wZS5jcHAJKHJldmlzaW9uIDEyNjcyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjQsMzUgKzI0LDM1IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAi
SlNTdGF0aWNTY29wZU9iamVjdC5oIgorI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCiAKICNpbmNs
dWRlICJFcnJvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKLUFTU0VSVF9DTEFTU19GSVRTX0lOX0NF
TEwoSlNTdGF0aWNTY29wZU9iamVjdCk7CiAKLWNvbnN0IENsYXNzSW5mbyBKU1N0YXRpY1Njb3Bl
T2JqZWN0OjpzX2luZm8gPSB7ICJPYmplY3QiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTU3RhdGljU2NvcGVPYmplY3QpIH07CitBU1NFUlRfQ0xBU1NfRklUU19J
Tl9DRUxMKEpTTmFtZVNjb3BlKTsKKworY29uc3QgQ2xhc3NJbmZvIEpTTmFtZVNjb3BlOjpzX2lu
Zm8gPSB7ICJOYW1lU2NvcGUiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTTmFtZVNjb3BlKSB9OwogCi12b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSlNOYW1lU2Nv
cGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
LSAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3RhdGljU2Nv
cGVPYmplY3QqPihjZWxsKTsKKyAgICBKU05hbWVTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U05hbWVTY29wZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgJnNfaW5mbyk7CiAgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdG
bGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKIAotICAgIEpTVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9yZWdp
c3RlclN0b3JlKTsKIH0KIAotSlNPYmplY3QqIEpTU3RhdGljU2NvcGVPYmplY3Q6OnRvVGhpc09i
amVjdChKU0NlbGwqLCBFeGVjU3RhdGUqIGV4ZWMpCitKU09iamVjdCogSlNOYW1lU2NvcGU6OnRv
VGhpc09iamVjdChKU0NlbGwqLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGV4ZWMt
Pmdsb2JhbFRoaXNWYWx1ZSgpOwogfQogCi12b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQordm9pZCBKU05hbWVTY29wZTo6
cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgSlNTdGF0
aWNTY29wZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4o
Y2VsbCk7CisgICAgSlNOYW1lU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNOYW1lU2NvcGUq
PihjZWxsKTsKICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAvLyBEb3Vi
bGUgbG9va3VwIGluIHN0cmljdCBtb2RlLCBidXQgdGhpcyBvbmx5IG9jY3VycyB3aGVuCiAgICAg
ICAgIC8vIGEpIGluZGlyZWN0bHkgd3JpdGluZyB0byBhbiBleGNlcHRpb24gc2xvdApAQCAtNzQs
MTggKzc0LDkgQEAgdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpwdXQoSlNDZWxsKiBjZQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6OnB1
dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQor
Ym9vbCBKU05hbWVTY29wZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewot
ICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdGF0aWNTY29w
ZU9iamVjdCo+KG9iamVjdCk7Ci0gICAgaWYgKHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMo
dGhpc09iamVjdCwgZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRy
aWJ1dGVzKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBzeW1ib2xUYWJsZUdldChqc0Nhc3Q8SlNOYW1lU2NvcGUqPihjZWxsKSwg
cHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgcmV0dXJuIHN5bWJvbFRhYmxl
R2V0KGpzQ2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xv
dCk7Ci19Ci0KLX0KK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCShyZXZpc2lvbiAxMjY3MjEpCShmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaDoxMjY3MjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1N0YXRpY1Njb3BlT2JqZWN0X2gKKyNkZWZpbmUg
SlNTdGF0aWNTY29wZU9iamVjdF9oCisKKyNpbmNsdWRlICJKU1ZhcmlhYmxlT2JqZWN0LmgiCisK
K25hbWVzcGFjZSBKU0N7CisgICAgCisgICAgY2xhc3MgSlNTdGF0aWNTY29wZU9iamVjdCA6IHB1
YmxpYyBKU1ZhcmlhYmxlT2JqZWN0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYgSlNW
YXJpYWJsZU9iamVjdCBCYXNlOworCisgICAgICAgIHN0YXRpYyBKU1N0YXRpY1Njb3BlT2JqZWN0
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBK
U1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgICAgICB7CisgICAgICAgICAg
ICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBzY29wZU9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTU3RhdGljU2NvcGVPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBKU1N0YXRpY1Njb3Bl
T2JqZWN0KGV4ZWMpOworICAgICAgICAgICAgc2NvcGVPYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4
ZWMsIGlkZW50aWZpZXIsIHZhbHVlLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIHJldHVybiBz
Y29wZU9iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICAgICAgYm9vbCBpc0R5bmFtaWNTY29wZShi
b29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OworICAgICAgICBzdGF0aWMgSlNPYmpl
Y3QqIHRvVGhpc09iamVjdChKU0NlbGwqLCBFeGVjU3RhdGUqKTsKKyAgICAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworCisgICAgICAg
IHN0YXRpYyB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworCisgICAgICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFN0
YXRpY1Njb3BlT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgfQorCisgICAg
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworCisgICAgcHJvdGVjdGVkOgorICAg
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnRpZmllciwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICAg
ICAgeworICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJTdG9yZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZSgpLT5hZGQoaWRlbnRpZmllci5p
bXBsKCksIFN5bWJvbFRhYmxlRW50cnkoLTEsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgfQorICAg
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBJc0Vudmlyb25tZW50
UmVjb3JkIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU1ZhcmlhYmxlT2JqZWN0OjpTdHJ1
Y3R1cmVGbGFnczsKKworICAgIHByaXZhdGU6CisgICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3Qo
RXhlY1N0YXRlKiBleGVjKQorICAgICAgICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnN0YXRpY1Njb3BlU3RydWN0dXJlLmdldCgp
LCByZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4oJm1fcmVnaXN0ZXJTdG9yZSArIDEpKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9yZWdp
c3RlclN0b3JlOworICAgIH07CisKKyAgICBpbmxpbmUgYm9vbCBKU1N0YXRpY1Njb3BlT2JqZWN0
Ojppc0R5bmFtaWNTY29wZShib29sJikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKK30KKworI2VuZGlmIC8vIEpTU3RhdGljU2NvcGVPYmplY3RfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCShyZXZpc2lvbiAx
MjY3MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw1OSArMjMsNTkgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAK
LSNpZm5kZWYgSlNTdGF0aWNTY29wZU9iamVjdF9oCi0jZGVmaW5lIEpTU3RhdGljU2NvcGVPYmpl
Y3RfaAorI2lmbmRlZiBKU05hbWVTY29wZV9oCisjZGVmaW5lIEpTTmFtZVNjb3BlX2gKIAogI2lu
Y2x1ZGUgIkpTVmFyaWFibGVPYmplY3QuaCIKIAotbmFtZXNwYWNlIEpTQ3sKLSAgICAKLSAgICBj
bGFzcyBKU1N0YXRpY1Njb3BlT2JqZWN0IDogcHVibGljIEpTVmFyaWFibGVPYmplY3QgewotICAg
IHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBKU1ZhcmlhYmxlT2JqZWN0IEJhc2U7Ci0KLSAgICAg
ICAgc3RhdGljIEpTU3RhdGljU2NvcGVPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIHNjb3Bl
T2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTdGF0aWNTY29wZU9iamVjdD4o
KmV4ZWMtPmhlYXAoKSkpIEpTU3RhdGljU2NvcGVPYmplY3QoZXhlYyk7Ci0gICAgICAgICAgICBz
Y29wZU9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYywgaWRlbnRpZmllciwgdmFsdWUsIGF0dHJp
YnV0ZXMpOwotICAgICAgICAgICAgcmV0dXJuIHNjb3BlT2JqZWN0OwotICAgICAgICB9Ci0KLSAg
ICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwot
ICAgICAgICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykg
Y29uc3Q7Ci0gICAgICAgIHN0YXRpYyBKU09iamVjdCogdG9UaGlzT2JqZWN0KEpTQ2VsbCosIEV4
ZWNTdGF0ZSopOwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3Rh
dGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
UHV0UHJvcGVydHlTbG90Jik7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgcHV0RGlyZWN0VmlydHVh
bChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQg
YXR0cmlidXRlcyk7Ci0KLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oU3RhdGljU2NvcGVPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOyB9Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBz
X2luZm87Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBKU1ZhbHVlIHZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICAgICAgbV9yZWdpc3RlclN0
b3JlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgIHN5
bWJvbFRhYmxlKCktPmFkZChpZGVudGlmaWVyLmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeSgtMSwg
YXR0cmlidXRlcykpOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IElzRW52aXJvbm1lbnRSZWNvcmQgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlO
YW1lcyB8IEpTVmFyaWFibGVPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCi0gICAgICAgICAg
ICA6IEpTVmFyaWFibGVPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRh
KCkuc3RhdGljU2NvcGVTdHJ1Y3R1cmUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIq
PigmbV9yZWdpc3RlclN0b3JlICsgMSkpCi0gICAgICAgIHsKLSAgICAgICAgfQorbmFtZXNwYWNl
IEpTQyB7CiAKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcmVnaXN0ZXJTdG9yZTsK
LSAgICB9OworLy8gVXNlZCBmb3Igc2NvcGVzIHdpdGggYSBzaW5nbGUgbmFtZWQgdmFyaWFibGU6
IGNhdGNoIGFuZCBuYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uLgorY2xhc3MgSlNOYW1lU2NvcGUg
OiBwdWJsaWMgSlNWYXJpYWJsZU9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU1Zhcmlh
YmxlT2JqZWN0IEJhc2U7CiAKLSAgICBpbmxpbmUgYm9vbCBKU1N0YXRpY1Njb3BlT2JqZWN0Ojpp
c0R5bmFtaWNTY29wZShib29sJikgY29uc3QKKyAgICBzdGF0aWMgSlNOYW1lU2NvcGUqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFsdWUg
dmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIEpTTmFtZVNjb3BlKiBzY29wZU9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTTmFtZVNjb3BlPigqZXhlYy0+aGVhcCgpKSkgSlNOYW1lU2NvcGUoZXhlYyk7Cisg
ICAgICAgIHNjb3BlT2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLCBpZGVudGlmaWVyLCB2YWx1
ZSwgYXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKICAgICB9CiAKKyAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
Ym9vbCBpc0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0Owor
ICAgIHN0YXRpYyBKU09iamVjdCogdG9UaGlzT2JqZWN0KEpTQ2VsbCosIEV4ZWNTdGF0ZSopOwor
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwor
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90bywg
VHlwZUluZm8oTmFtZVNjb3BlT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsg
fQorCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
aWRlbnRpZmllciwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICB7Cisg
ICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAg
IG1fcmVnaXN0ZXJTdG9yZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7Cisg
ICAgICAgIHN5bWJvbFRhYmxlKCktPmFkZChpZGVudGlmaWVyLmltcGwoKSwgU3ltYm9sVGFibGVF
bnRyeSgtMSwgYXR0cmlidXRlcykpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IElzRW52aXJvbm1lbnRSZWNvcmQgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxh
Z3M7CisKK3ByaXZhdGU6CisgICAgSlNOYW1lU2NvcGUoRXhlY1N0YXRlKiBleGVjKQorICAgICAg
ICA6IEJhc2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkubmFtZVNjb3Bl
U3RydWN0dXJlLmdldCgpLCByZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4oJm1fcmVnaXN0ZXJT
dG9yZSArIDEpKQorICAgIHsKKyAgICB9CisKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9y
ZWdpc3RlclN0b3JlOworfTsKKworaW5saW5lIGJvb2wgSlNOYW1lU2NvcGU6OmlzRHluYW1pY1Nj
b3BlKGJvb2wmKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwogfQogCi0jZW5kaWYg
Ly8gSlNTdGF0aWNTY29wZU9iamVjdF9oCisjZW5kaWYgLy8gSlNOYW1lU2NvcGVfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMjY4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTQsNyArMjU0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9vbCBp
c0dsb2JhbE9iamVjdCgpIGNvbnN0OwogICAgICAgICBib29sIGlzVmFyaWFibGVPYmplY3QoKSBj
b25zdDsKLSAgICAgICAgYm9vbCBpc1N0YXRpY1Njb3BlT2JqZWN0KCkgY29uc3Q7CisgICAgICAg
IGJvb2wgaXNOYW1lU2NvcGVPYmplY3QoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc0FjdGl2YXRp
b25PYmplY3QoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc0Vycm9ySW5zdGFuY2UoKSBjb25zdDsK
ICAgICAgICAgYm9vbCBpc0dsb2JhbFRoaXMoKSBjb25zdDsKQEAgLTQ3MSw5ICs0NzEsOSBAQCBp
bmxpbmUgYm9vbCBKU09iamVjdDo6aXNWYXJpYWJsZU9iamVjdCgpCiAgICAgcmV0dXJuIHN0cnVj
dHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA+PSBWYXJpYWJsZU9iamVjdFR5cGU7CiB9CiAKLWlu
bGluZSBib29sIEpTT2JqZWN0Ojppc1N0YXRpY1Njb3BlT2JqZWN0KCkgY29uc3QKK2lubGluZSBi
b29sIEpTT2JqZWN0Ojppc05hbWVTY29wZU9iamVjdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0
cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBTdGF0aWNTY29wZU9iamVjdFR5cGU7Cisg
ICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBOYW1lU2NvcGVPYmpl
Y3RUeXBlOwogfQogCiBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNBY3RpdmF0aW9uT2JqZWN0KCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Nj
b3BlLmgiCisKKyNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgorI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitB
U1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTU2NvcGUpOworCitib29sIEpTU2NvcGU6OmlzRHlu
YW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsT2Jq
ZWN0VHlwZToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTR2xvYmFsT2JqZWN0
Kj4odGhpcyktPmlzRHluYW1pY1Njb3BlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyk7CisgICAgY2Fz
ZSBBY3RpdmF0aW9uT2JqZWN0VHlwZToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IEpTQWN0aXZhdGlvbio+KHRoaXMpLT5pc0R5bmFtaWNTY29wZShyZXF1aXJlc0R5bmFtaWNDaGVj
a3MpOworICAgIGNhc2UgTmFtZVNjb3BlT2JqZWN0VHlwZToKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IEpTTmFtZVNjb3BlKj4odGhpcyktPmlzRHluYW1pY1Njb3BlKHJlcXVpcmVz
RHluYW1pY0NoZWNrcyk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworSlNW
YWx1ZSBKU1Njb3BlOjpyZXNvbHZlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudGlmaWVyKQoreworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2Fs
bEZyYW1lLT5zY29wZUNoYWluKCk7CisgICAgQVNTRVJUKHNjb3BlQ2hhaW4pOworCisgICAgZG8g
eworICAgICAgICBKU09iamVjdCogc2NvcGUgPSBzY29wZUNoYWluLT5vYmplY3QuZ2V0KCk7Cisg
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHNjb3BlKTsKKyAgICAgICAgaWYgKHNjb3BlLT5nZXRQ
cm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudGlmaWVyLCBzbG90KSkKKyAgICAgICAgICAgIHJl
dHVybiBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnRpZmllcik7CisgICAgfSB3aGlsZSAo
KHNjb3BlQ2hhaW4gPSBzY29wZUNoYWluLT5uZXh0LmdldCgpKSk7CisKKyAgICByZXR1cm4gdGhy
b3dFcnJvcihjYWxsRnJhbWUsIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1l
LCBpZGVudGlmaWVyKSk7Cit9CisKK0pTVmFsdWUgSlNTY29wZTo6cmVzb2x2ZVNraXAoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIGludCBza2lwKQor
eworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWlu
KCk7CisgICAgQVNTRVJUKHNjb3BlQ2hhaW4pOworCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworCisgICAgYm9vbCBjaGVja1RvcExldmVsID0gY29k
ZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBjb2RlQmxvY2stPm5lZWRzRnVs
bFNjb3BlQ2hhaW4oKTsKKyAgICBBU1NFUlQoc2tpcCB8fCAhY2hlY2tUb3BMZXZlbCk7CisgICAg
aWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7CisgICAgICAgIGlmIChjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKQorICAg
ICAgICAgICAgc2NvcGVDaGFpbiA9IHNjb3BlQ2hhaW4tPm5leHQuZ2V0KCk7CisgICAgfQorICAg
IHdoaWxlIChza2lwLS0pIHsKKyAgICAgICAgc2NvcGVDaGFpbiA9IHNjb3BlQ2hhaW4tPm5leHQu
Z2V0KCk7CisgICAgICAgIEFTU0VSVChzY29wZUNoYWluKTsKKyAgICB9CisKKyAgICBkbyB7Cisg
ICAgICAgIEpTT2JqZWN0KiBzY29wZSA9IHNjb3BlQ2hhaW4tPm9iamVjdC5nZXQoKTsKKyAgICAg
ICAgUHJvcGVydHlTbG90IHNsb3Qoc2NvcGUpOworICAgICAgICBpZiAoc2NvcGUtPmdldFByb3Bl
cnR5U2xvdChjYWxsRnJhbWUsIGlkZW50aWZpZXIsIHNsb3QpKQorICAgICAgICAgICAgcmV0dXJu
IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudGlmaWVyKTsKKyAgICB9IHdoaWxlICgoc2Nv
cGVDaGFpbiA9IHNjb3BlQ2hhaW4tPm5leHQuZ2V0KCkpKTsKKworICAgIHJldHVybiB0aHJvd0Vy
cm9yKGNhbGxGcmFtZSwgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJhbWUsIGlk
ZW50aWZpZXIpKTsKK30KKworSlNWYWx1ZSBKU1Njb3BlOjpyZXNvbHZlR2xvYmFsKAorICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lLAorICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsCisg
ICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+KiBjYWNoZWRTdHJ1Y3R1cmUsCisgICAgUHJv
cGVydHlPZmZzZXQqIGNhY2hlZE9mZnNldAorKQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBpZiAoZ2xv
YmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjYWNoZWRTdHJ1Y3R1cmUtPmdldCgpKQorICAgICAg
ICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQoKmNhY2hlZE9mZnNldCk7CisK
KyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChnbG9iYWxPYmplY3QpOworICAgIGlmICghZ2xvYmFsT2Jq
ZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudGlmaWVyLCBzbG90KSkKKyAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoY2FsbEZyYW1lLCBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVy
cm9yKGNhbGxGcmFtZSwgaWRlbnRpZmllcikpOworCisgICAgSlNWYWx1ZSByZXN1bHQgPSBzbG90
LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnRpZmllcik7CisgICAgaWYgKGNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLmV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKworICAgIGlm
IChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSAmJiAhZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSAmJiBzbG90LnNsb3RCYXNlKCkgPT0gZ2xvYmFsT2Jq
ZWN0KSB7CisgICAgICAgIGNhY2hlZFN0cnVjdHVyZS0+c2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgZ2xvYmFsT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICpjYWNoZWRPZmZzZXQgPSBzbG90LmNhY2hlZE9m
ZnNldCgpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU1ZhbHVlIEpTU2NvcGU6
OnJlc29sdmVHbG9iYWxEeW5hbWljKAorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lLAorICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsCisgICAgaW50IHNraXAsCisgICAgV3JpdGVCYXJy
aWVyQmFzZTxTdHJ1Y3R1cmU+KiBjYWNoZWRTdHJ1Y3R1cmUsCisgICAgUHJvcGVydHlPZmZzZXQq
IGNhY2hlZE9mZnNldAorKQoreworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2Fs
bEZyYW1lLT5zY29wZUNoYWluKCk7CisgICAgQVNTRVJUKHNjb3BlQ2hhaW4pOworCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworCisgICAgYm9vbCBj
aGVja1RvcExldmVsID0gY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBj
b2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKKyAgICBBU1NFUlQoc2tpcCB8fCAhY2hl
Y2tUb3BMZXZlbCk7CisgICAgaWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7CisgICAgICAg
IGlmIChjYWxsRnJhbWUtPnVuY2hlY2tlZFIoY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIo
KSkuanNWYWx1ZSgpKQorICAgICAgICAgICAgc2NvcGVDaGFpbiA9IHNjb3BlQ2hhaW4tPm5leHQu
Z2V0KCk7CisgICAgfQorICAgIHdoaWxlIChza2lwLS0pIHsKKyAgICAgICAgSlNPYmplY3QqIHNj
b3BlID0gc2NvcGVDaGFpbi0+b2JqZWN0LmdldCgpOworICAgICAgICBpZiAoIXNjb3BlLT5oYXND
dXN0b21Qcm9wZXJ0aWVzKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdChzY29wZSk7CisgICAgICAgIGlmICghc2NvcGUtPmdldFByb3BlcnR5U2xv
dChjYWxsRnJhbWUsIGlkZW50aWZpZXIsIHNsb3QpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnRp
Zmllcik7CisgICAgICAgIGlmIChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24pCisg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIHJldHVybiByZXNvbHZlR2xvYmFsKGNhbGxGcmFtZSwgaWRlbnRpZmllciwgY2Fj
aGVkU3RydWN0dXJlLCBjYWNoZWRPZmZzZXQpOworfQorCitKU1ZhbHVlIEpTU2NvcGU6OnJlc29s
dmVCYXNlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVy
LCBib29sIGlzU3RyaWN0KQoreworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2Fs
bEZyYW1lLT5zY29wZUNoYWluKCk7CisgICAgQVNTRVJUKHNjb3BlQ2hhaW4pOworCisgICAgZG8g
eworICAgICAgICBKU09iamVjdCogc2NvcGUgPSBzY29wZUNoYWluLT5vYmplY3QuZ2V0KCk7CisK
KyAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qoc2NvcGUpOworICAgICAgICBpZiAoIXNjb3BlLT5n
ZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudGlmaWVyLCBzbG90KSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIHJldHVybiBKU1ZhbHVlKHNjb3BlKTsKKyAgICB9IHdoaWxl
ICgoc2NvcGVDaGFpbiA9IHNjb3BlQ2hhaW4tPm5leHQuZ2V0KCkpKTsKKworICAgIGlmICghaXNT
dHJpY3QpCisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsK
KworICAgIHJldHVybiB0aHJvd0Vycm9yKGNhbGxGcmFtZSwgY3JlYXRlRXJyb3JGb3JJbnZhbGlk
R2xvYmFsQXNzaWdubWVudChjYWxsRnJhbWUsIGlkZW50aWZpZXIudXN0cmluZygpKSk7Cit9CisK
K0pTVmFsdWUgSlNTY29wZTo6cmVzb2x2ZVdpdGhCYXNlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBSZWdpc3RlciogYmFzZSkKK3sKKyAgICBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOworICAgIEFT
U0VSVChzY29wZUNoYWluKTsKKworICAgIGRvIHsKKyAgICAgICAgSlNPYmplY3QqIHNjb3BlID0g
c2NvcGVDaGFpbi0+b2JqZWN0LmdldCgpOworCisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHNj
b3BlKTsKKyAgICAgICAgaWYgKCFzY29wZS0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRl
bnRpZmllciwgc2xvdCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50aWZpZXIpOworICAgICAgICBp
ZiAoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKKworICAgICAgICAqYmFzZSA9IEpTVmFsdWUoc2NvcGUpOworICAgICAgICBy
ZXR1cm4gdmFsdWU7CisgICAgfSB3aGlsZSAoKHNjb3BlQ2hhaW4gPSBzY29wZUNoYWluLT5uZXh0
LmdldCgpKSk7CisKKyAgICByZXR1cm4gdGhyb3dFcnJvcihjYWxsRnJhbWUsIGNyZWF0ZVVuZGVm
aW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBpZGVudGlmaWVyKSk7Cit9CisKK0pTVmFsdWUg
SlNTY29wZTo6cmVzb2x2ZVdpdGhUaGlzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudGlmaWVyLCBSZWdpc3RlciogYmFzZSkKK3sKKyAgICBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOworICAgIEFTU0VSVChzY29w
ZUNoYWluKTsKKworICAgIGRvIHsKKyAgICAgICAgSlNPYmplY3QqIHNjb3BlID0gc2NvcGVDaGFp
bi0+b2JqZWN0LmdldCgpOworCisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHNjb3BlKTsKKyAg
ICAgICAgaWYgKCFzY29wZS0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnRpZmllciwg
c2xvdCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
c2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50aWZpZXIpOworICAgICAgICBpZiAoY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKKworICAgICAgICAqYmFzZSA9IHNjb3BlLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pc0Vu
dmlyb25tZW50UmVjb3JkKCkgPyBqc1VuZGVmaW5lZCgpIDogSlNWYWx1ZShzY29wZSk7CisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICB9IHdoaWxlICgoc2NvcGVDaGFpbiA9IHNjb3BlQ2hhaW4t
Pm5leHQuZ2V0KCkpKTsKKworICAgIHJldHVybiB0aHJvd0Vycm9yKGNhbGxGcmFtZSwgY3JlYXRl
VW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJhbWUsIGlkZW50aWZpZXIpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nj
b3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNTY29wZV9oCisjZGVmaW5lIEpTU2Nv
cGVfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IEpTU2NvcGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKKyAgICBzdGF0aWMgSlNWYWx1ZSByZXNvbHZlKENh
bGxGcmFtZSosIGNvbnN0IElkZW50aWZpZXImKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSByZXNvbHZl
U2tpcChDYWxsRnJhbWUqLCBjb25zdCBJZGVudGlmaWVyJiwgaW50IHNraXApOworICAgIHN0YXRp
YyBKU1ZhbHVlIHJlc29sdmVHbG9iYWwoCisgICAgICAgIENhbGxGcmFtZSosCisgICAgICAgIGNv
bnN0IElkZW50aWZpZXImLAorICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4qIGNh
Y2hlZFN0cnVjdHVyZSwKKyAgICAgICAgUHJvcGVydHlPZmZzZXQqIGNhY2hlZE9mZnNldAorICAg
ICk7CisgICAgc3RhdGljIEpTVmFsdWUgcmVzb2x2ZUdsb2JhbER5bmFtaWMoCisgICAgICAgIENh
bGxGcmFtZSosCisgICAgICAgIGNvbnN0IElkZW50aWZpZXImLAorICAgICAgICBpbnQgc2tpcCwK
KyAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+KiBjYWNoZWRTdHJ1Y3R1cmUsCisg
ICAgICAgIFByb3BlcnR5T2Zmc2V0KiBjYWNoZWRPZmZzZXQKKyAgICApOworICAgIHN0YXRpYyBK
U1ZhbHVlIHJlc29sdmVCYXNlKENhbGxGcmFtZSosIGNvbnN0IElkZW50aWZpZXImLCBib29sIGlz
U3RyaWN0KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSByZXNvbHZlV2l0aEJhc2UoQ2FsbEZyYW1lKiwg
Y29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVyKiBiYXNlKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBy
ZXNvbHZlV2l0aFRoaXMoQ2FsbEZyYW1lKiwgY29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVyKiBi
YXNlKTsKKworICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hl
Y2tzKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIEpTU2NvcGUoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKik7Cit9OworCitpbmxpbmUgSlNTY29wZTo6SlNTY29wZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNTY29w
ZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
YXRpY1Njb3BlT2JqZWN0LmNwcAkocmV2aXNpb24gMTI2ODM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJKU1N0YXRpY1Njb3Bl
T2JqZWN0LmgiCi0KLSNpbmNsdWRlICJFcnJvci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLUFTU0VS
VF9DTEFTU19GSVRTX0lOX0NFTEwoSlNTdGF0aWNTY29wZU9iamVjdCk7Ci0KLWNvbnN0IENsYXNz
SW5mbyBKU1N0YXRpY1Njb3BlT2JqZWN0OjpzX2luZm8gPSB7ICJPYmplY3QiLCAmQmFzZTo6c19p
bmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU3RhdGljU2NvcGVPYmplY3QpIH07Ci0K
LXZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNTdGF0aWNTY29wZU9iamVjdCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7Ci0gICAgQ09NUElMRV9BU1NFUlQo
U3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENo
aWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKLSAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0
dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKLQotICAgIEpTVmFy
aWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmVnaXN0ZXJTdG9yZSk7Ci19Ci0KLUpTT2JqZWN0
KiBKU1N0YXRpY1Njb3BlT2JqZWN0Ojp0b1RoaXNPYmplY3QoSlNDZWxsKiwgRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIHJldHVybiBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKTsKLX0KLQotdm9pZCBK
U1N0YXRpY1Njb3BlT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKLXsKLSAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
U3RhdGljU2NvcGVPYmplY3QqPihjZWxsKTsKLSAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkg
ewotICAgICAgICAvLyBEb3VibGUgbG9va3VwIGluIHN0cmljdCBtb2RlLCBidXQgdGhpcyBvbmx5
IG9jY3VycyB3aGVuCi0gICAgICAgIC8vIGEpIGluZGlyZWN0bHkgd3JpdGluZyB0byBhbiBleGNl
cHRpb24gc2xvdAotICAgICAgICAvLyBiKSB3cml0aW5nIHRvIGEgZnVuY3Rpb24gZXhwcmVzc2lv
biBuYW1lCi0gICAgICAgIC8vIChhKSBpcyB1bmxpa2VseSwgYW5kIChiKSBpcyBhbiBlcnJvci4K
LSAgICAgICAgLy8gQWxzbyB3aXRoIGEgc2luZ2xlIGVudHJ5IHRoZSBzeW1ib2wgdGFibGUgbG9v
a3VwIHNob3VsZCBzaW1wbHkgYmUKLSAgICAgICAgLy8gYSBwb2ludGVyIGNvbXBhcmUuCi0gICAg
ICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBib29sIGlzV3JpdGFibGUgPSB0cnVlOwot
ICAgICAgICBzeW1ib2xUYWJsZUdldCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIGlz
V3JpdGFibGUpOwotICAgICAgICBpZiAoIWlzV3JpdGFibGUpIHsKLSAgICAgICAgICAgIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGlmIChzeW1ib2xUYWJsZVB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dERp
cmVjdFZpcnR1YWwoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQotewot
ICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdGF0aWNTY29w
ZU9iamVjdCo+KG9iamVjdCk7Ci0gICAgaWYgKHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMo
dGhpc09iamVjdCwgZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRy
aWJ1dGVzKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotfQotCi1ib29sIEpTU3RhdGljU2NvcGVPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKLXsKLSAgICByZXR1cm4gc3ltYm9sVGFibGVHZXQoanNDYXN0PEpTU3RhdGlj
U2NvcGVPYmplY3QqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKLX0KLQotfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmpl
Y3QuaAkocmV2aXNpb24gMTI2ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdGF0aWNTY29wZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBKU1N0YXRpY1Njb3BlT2JqZWN0X2gKLSNkZWZpbmUgSlNTdGF0aWNTY29wZU9iamVjdF9oCi0K
LSNpbmNsdWRlICJKU1ZhcmlhYmxlT2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBKU0N7Ci0gICAgCi0g
ICAgY2xhc3MgSlNTdGF0aWNTY29wZU9iamVjdCA6IHB1YmxpYyBKU1ZhcmlhYmxlT2JqZWN0IHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSlNWYXJpYWJsZU9iamVjdCBCYXNlOwotCi0g
ICAgICAgIHN0YXRpYyBKU1N0YXRpY1Njb3BlT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBz
Y29wZU9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTU3RhdGljU2NvcGVPYmpl
Y3Q+KCpleGVjLT5oZWFwKCkpKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGV4ZWMpOwotICAgICAgICAg
ICAgc2NvcGVPYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIGlkZW50aWZpZXIsIHZhbHVlLCBh
dHRyaWJ1dGVzKTsKLSAgICAgICAgICAgIHJldHVybiBzY29wZU9iamVjdDsKLSAgICAgICAgfQot
Ci0gICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKLSAgICAgICAgYm9vbCBpc0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVj
a3MpIGNvbnN0OwotICAgICAgICBzdGF0aWMgSlNPYmplY3QqIHRvVGhpc09iamVjdChKU0NlbGwq
LCBFeGVjU3RhdGUqKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAg
IHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOwotCi0gICAgICAgIHN0YXRpYyB2b2lkIHB1dERpcmVjdFZp
cnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpOwotCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKFN0YXRpY1Njb3BlT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsgfQotCi0gICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSlNWYWx1ZSB2
YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKLSAgICAgICAgewotICAgICAgICAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgICAgIG1fcmVnaXN0
ZXJTdG9yZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICBzeW1ib2xUYWJsZSgpLT5hZGQoaWRlbnRpZmllci5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnko
LTEsIGF0dHJpYnV0ZXMpKTsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBJc0Vudmlyb25tZW50UmVjb3JkIHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3Bl
cnR5TmFtZXMgfCBKU1ZhcmlhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQotICAgICAg
ICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFs
RGF0YSgpLnN0YXRpY1Njb3BlU3RydWN0dXJlLmdldCgpLCByZWludGVycHJldF9jYXN0PFJlZ2lz
dGVyKj4oJm1fcmVnaXN0ZXJTdG9yZSArIDEpKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9yZWdpc3RlclN0b3JlOwotICAgIH07Ci0KLSAg
ICBpbmxpbmUgYm9vbCBKU1N0YXRpY1Njb3BlT2JqZWN0Ojppc0R5bmFtaWNTY29wZShib29sJikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLX0KLQotI2VuZGlm
IC8vIEpTU3RhdGljU2NvcGVPYmplY3RfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDEyNjgz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJKU0FjdGl2
YXRpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTU3RhdGlj
U2NvcGVPYmplY3QuaCIKKyNpbmNsdWRlICJKU05hbWVTY29wZS5oIgogI2luY2x1ZGUgIlByb3Bl
cnR5TmFtZUFycmF5LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzMsMjIgKzczLDQgQEAgdm9p
ZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCi1ib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmlzRHluYW1pY1Njb3BlKGJv
b2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT50eXBlSW5mbygpLnR5cGUoKSkgewotICAgIGNhc2UgR2xvYmFsT2JqZWN0VHlwZToKLSAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTR2xvYmFsT2JqZWN0Kj4odGhpcyktPmlz
RHluYW1pY1Njb3BlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyk7Ci0gICAgY2FzZSBBY3RpdmF0aW9u
T2JqZWN0VHlwZToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTQWN0aXZhdGlv
bio+KHRoaXMpLT5pc0R5bmFtaWNTY29wZShyZXF1aXJlc0R5bmFtaWNDaGVja3MpOwotICAgIGNh
c2UgU3RhdGljU2NvcGVPYmplY3RUeXBlOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgSlNTdGF0aWNTY29wZU9iamVjdCo+KHRoaXMpLT5pc0R5bmFtaWNTY29wZShyZXF1aXJlc0R5
bmFtaWNDaGVja3MpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIH0gLy8g
bmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5
bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxMjY4MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDE1ICsyOSwxNSBAQAogI2lmbmRlZiBKU1N5bWJvbFRhYmxlT2JqZWN0X2gKICNk
ZWZpbmUgSlNTeW1ib2xUYWJsZU9iamVjdF9oCiAKLSNpbmNsdWRlICJKU09iamVjdC5oIgorI2lu
Y2x1ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIKICNpbmNs
dWRlICJTeW1ib2xUYWJsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNTeW1ib2xU
YWJsZU9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK2NsYXNzIEpTU3ltYm9sVGFi
bGVPYmplY3QgOiBwdWJsaWMgSlNTY29wZSB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU05vbkZp
bmFsT2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBKU1Njb3BlIEJhc2U7CiAgICAgCiAgICAgU2hh
cmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zeW1ib2xUYWJs
ZS5nZXQoKTsgfQogICAgIApAQCAtNDYsOCArNDYsNiBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOwogICAgIAotICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoYm9vbCYgcmVx
dWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKLSAgICAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwg
T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHJldmlzaW9uIDEyNjgz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw5ICs1MCw5IEBAIGVudW0gSlNUeXBlIHsKICAgICBFcnJvckluc3RhbmNlVHlw
ZSwKICAgICBHbG9iYWxUaGlzVHlwZSwKIAotICAgIFN0YXRpY1Njb3BlT2JqZWN0VHlwZSwKKyAg
ICBOYW1lU2NvcGVPYmplY3RUeXBlLAogICAgIC8vIFZhcmlhYmxlT2JqZWN0VHlwZSBtdXN0IGJl
IGxlc3MgdGhhbiBNT1NUIG9mIHRoZSB0eXBlcyBvZiBpdHMgc3ViY2xhc3NlcyBhbmQgb25seSBp
dHMgc3ViY2xhc3Nlcy4KLSAgICAvLyBXZSB1c2UgPj1WYXJpYWJsZU9iamVjdFR5cGUgY2hlY2tz
IHRvIHRlc3QgZm9yIEdsb2JhbCAmIEFjdGl2YXRpb24gb2JqZWN0cywgYnV0IGV4Y2x1ZGUgU3Rh
dGljU2NvcGVzLgorICAgIC8vIFdlIHVzZSA+PVZhcmlhYmxlT2JqZWN0VHlwZSBjaGVja3MgdG8g
dGVzdCBmb3IgR2xvYmFsICYgQWN0aXZhdGlvbiBvYmplY3RzLCBidXQgZXhjbHVkZSBOYW1lU2Nv
cGVzLgogICAgIFZhcmlhYmxlT2JqZWN0VHlwZSwKICAgICBHbG9iYWxPYmplY3RUeXBlLAogICAg
IEFjdGl2YXRpb25PYmplY3RUeXBlLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTI2ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsMzMgKzM0Nyw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIHJlc29sdmVCYXNlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJZGVudGlmaWVyJiBw
cm9wZXJ0eSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIGJvb2wgaXNTdHJpY3RQdXQpCi0g
ICAgewotICAgICAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2lu
KCk7Ci0gICAgICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBuZXh0ID0gaXRlcjsKLSAgICAgICAgKytu
ZXh0OwotICAgICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+ZW5kKCk7
Ci0gICAgICAgIEFTU0VSVChpdGVyICE9IGVuZCk7Ci0KLSAgICAgICAgUHJvcGVydHlTbG90IHNs
b3Q7Ci0gICAgICAgIEpTT2JqZWN0KiBiYXNlOwotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAg
ICAgICAgICAgYmFzZSA9IGl0ZXItPmdldCgpOwotICAgICAgICAgICAgaWYgKG5leHQgPT0gZW5k
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzU3RyaWN0UHV0ICYmICFiYXNlLT5nZXRQcm9wZXJ0
eVNsb3QoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgc2xvdCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJhc2U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgcHJv
cGVydHksIHNsb3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBiYXNlOwotCi0gICAgICAgICAg
ICBpdGVyID0gbmV4dDsKLSAgICAgICAgICAgICsrbmV4dDsKLSAgICAgICAgfQotCi0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgIH0K
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gT3BlcmF0aW9uc19oCg==
</data>
<flag name="review"
          id="171545"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>