<?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>171601</bug_id>
          
          <creation_ts>2017-05-03 05:01:40 -0700</creation_ts>
          <short_desc>Rename StyleInvalidationAnalysis to Style::Invalidator</short_desc>
          <delta_ts>2017-05-03 09:40:22 -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>CSS</component>
          <version>WebKit 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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1304002</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-05-03 05:01:40 -0700</bug_when>
    <thetext>Also move it to the &apos;style&apos; directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304005</commentid>
    <comment_count>1</comment_count>
      <attachid>308895</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-05-03 05:10:39 -0700</bug_when>
    <thetext>Created attachment 308895
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304006</commentid>
    <comment_count>2</comment_count>
      <attachid>308896</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-05-03 05:11:49 -0700</bug_when>
    <thetext>Created attachment 308896
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304007</commentid>
    <comment_count>3</comment_count>
      <attachid>308897</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-05-03 05:20:42 -0700</bug_when>
    <thetext>Created attachment 308897
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304015</commentid>
    <comment_count>4</comment_count>
      <attachid>308897</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-03 07:04:24 -0700</bug_when>
    <thetext>Comment on attachment 308897
patch

Clearing flags on attachment: 308897

Committed r216117: &lt;http://trac.webkit.org/changeset/216117&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304016</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-03 07:04:26 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304055</commentid>
    <comment_count>6</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-05-03 09:40:22 -0700</bug_when>
    <thetext>This change broke the Windows build. Fixed in https://trac.webkit.org/r216118</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308895</attachid>
            <date>2017-05-03 05:10:39 -0700</date>
            <delta_ts>2017-05-03 05:11:49 -0700</delta_ts>
            <desc>patch</desc>
            <filename>rename-style-invalidator.patch</filename>
            <type>text/plain</type>
            <size>38989</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjExNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE3LTA1LTAzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU3R5bGVJbnZhbGlk
YXRpb25BbmFseXNpcyB0byBTdHlsZTo6SW52YWxpZGF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTYwMQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsc28gbW92ZSBpdCB0byB0aGUgJ3N0eWxlJyBk
aXJlY3RvcnkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL1N0eWxlSW52YWxpZGF0
aW9uQW5hbHlzaXMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9TdHlsZUludmFsaWRhdGlv
bkFuYWx5c2lzLmg6IFJlbW92ZWQuCisgICAgICAgICogZG9tL0V4dGVuc2lvblN0eWxlU2hlZXRz
LmNwcDoKKyAgICAgICAgKiBzdHlsZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkF0dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlvbjo6aW52
YWxpZGF0ZURlc2NlbmRhbnRzKToKKyAgICAgICAgKiBzdHlsZS9DbGFzc0NoYW5nZUludmFsaWRh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Q2xhc3NDaGFuZ2VJbnZhbGlkYXRp
b246OmludmFsaWRhdGVEZXNjZW5kYW50U3R5bGUpOgorICAgICAgICAqIHN0eWxlL1N0eWxlSW52
YWxpZGF0b3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlk
YXRpb25BbmFseXNpcy5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6SW52YWxpZGF0b3I6
OkludmFsaWRhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpJbnZhbGlkYXRvcjo6aW52
YWxpZGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpJbnZhbGlkYXRvcjo6
aW52YWxpZGF0ZVN0eWxlRm9yVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6SW52YWxp
ZGF0b3I6OmludmFsaWRhdGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGREaXJ0eUFs
bFN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5h
bHlzaXM6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZUlmTmVlZGVkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFs
aWRhdGVTdHlsZUZvclRyZWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbnZh
bGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBz
dHlsZS9TdHlsZUludmFsaWRhdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmguCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUludmFs
aWRhdGlvbkFuYWx5c2lzOjpkaXJ0aWVzQWxsU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aGFzU2hhZG93UHNldWRvRWxlbWVudFJ1
bGVzSW5BdXRob3JTaGVldCk6IERlbGV0ZWQuCisgICAgICAgICogc3R5bGUvU3R5bGVTY29wZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6U2NvcGU6OnJlc29sdmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6YW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2UpOgorCiAyMDE3
LTA1LTAyICBBbmRyZXcgR29sZCAgPGFnb2xkQGFwcGxlLmNvbT4KIAogICAgICAgICBUeXBvIGlu
IEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIubW0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAyMTYwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTM5Myw3ICsxMzkzLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNF
UwogICAgIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwCiAgICAgY3NzL1NlbGVjdG9yRmlsdGVyLmNw
cAogICAgIGNzcy9TdHlsZUNvbG9yLmNwcAotICAgIGNzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5
c2lzLmNwcAogICAgIGNzcy9TdHlsZU1lZGlhLmNwcAogICAgIGNzcy9TdHlsZVByb3BlcnRpZXMu
Y3BwCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwCkBAIC0yNzM1LDYgKzI3MzQs
NyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXIuY3Bw
CiAgICAgc3R5bGUvU3R5bGVDaGFuZ2UuY3BwCiAgICAgc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0
aW9ucy5jcHAKKyAgICBzdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAogICAgIHN0eWxlL1N0eWxl
UGVuZGluZ1Jlc291cmNlcy5jcHAKICAgICBzdHlsZS9TdHlsZVJlbGF0aW9ucy5jcHAKICAgICBz
dHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxNjA3MykK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNjc0OSw4ICs2NzQ5LDggQEAKIAkJRTQ2QTJCMUMxN0NBNjVCOTAwMERC
Q0Q4IC8qIFR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2QTJCMUIxN0NBNjVCOTAwMERCQ0Q4IC8q
IFR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0NkEyQjFFMTdDQTc2QjEwMDBEQkNEOCAvKiBF
bGVtZW50Q2hpbGRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ2QTJCMUQxN0NBNzZCMTAwMERCQ0Q4IC8qIEVsZW1lbnRDaGlsZEl0ZXJh
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RTQ2QjQxRjkxQ0IyNEU3MDAwOEYxMURFIC8qIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2QjQxRjgxQ0Iy
NEU3MDAwOEYxMURFIC8qIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUU0NzEyN0NBMTYzNDM4QTEwMEVE
NkY1QSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0E5N0NFMTYzMDU5RkMwMDVEQ0Q5OSAvKiBT
dHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCAqLzsgfTsKLQkJRTQ3MTI3Q0IxNjM0MzhBRTAw
RUQ2RjVBIC8qIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0E5N0NGMTYzMDU5RkMwMDVEQ0Q5OSAvKiBT
dHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmggKi87IH07CisJCUU0NzEyN0NBMTYzNDM4QTEwMEVE
NkY1QSAvKiBTdHlsZUludmFsaWRhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0E5N0NFMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFs
aWRhdG9yLmNwcCAqLzsgfTsKKwkJRTQ3MTI3Q0IxNjM0MzhBRTAwRUQ2RjVBIC8qIFN0eWxlSW52
YWxpZGF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0N0E5N0NGMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdG9yLmggKi87IH07CiAJ
CUU0Nzc4QjdGMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0Nzc4QjdEMTE1QTU4MUEwMEI1
RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmNwcCAqLzsgfTsKIAkJRTQ3NzhCODAxMTVBNTgxQTAwQjVE
MzcyIC8qIEpTQ3VzdG9tRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0Nzc4QjdFMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50Lmgg
Ki87IH07CiAJCUU0N0EzQUMzMUM1RUFCQkUwMENDQkZBNyAvKiBTdHlsZVNoYXJpbmdSZXNvbHZl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdB
M0FDMjFDNUVBQkJFMDBDQ0JGQTcgLyogU3R5bGVTaGFyaW5nUmVzb2x2ZXIuY3BwICovOyB9OwpA
QCAtMTUyOTMsOCArMTUyOTMsOCBAQAogCQlFNDc3OEI3RTExNUE1ODFBMDBCNUQzNzIgLyogSlND
dXN0b21FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUV2
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0EzQUMyMUM1RUFCQkUwMEND
QkZBNyAvKiBTdHlsZVNoYXJpbmdSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdHlsZVNoYXJpbmdSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0N0EzQUM0MUM1RUFDNzkwMENDQkZBNyAvKiBTdHlsZVNoYXJpbmdSZXNv
bHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVNoYXJpbmdSZXNv
bHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDdBOTdDRTE2MzA1OUZDMDA1
RENEOTkgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTQ3QTk3Q0YxNjMwNTlGQzAwNURDRDk5IC8qIFN0eWxl
SW52YWxpZGF0aW9uQW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFNDdBOTdDRTE2MzA1OUZDMDA1RENEOTkgLyogU3R5bGVJbnZhbGlkYXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUludmFsaWRhdG9yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3QTk3Q0YxNjMwNTlGQzAwNURDRDk5IC8qIFN0
eWxlSW52YWxpZGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVJ
bnZhbGlkYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdCNEJFNjBFNzEy
NDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQ3QjRCRTcwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFu
ZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFJlc291
cmNlSGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3RTI3NjQxNjAz
NkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvblN0eWxlU2hlZXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNDc0OSw2ICsyNDc0OSw4IEBACiAJCQkJRTQwMUUwQTMxQzNDMEI4MzAw
RjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmggKi8sCiAJCQkJRTRENThFQjYxN0I0RUQ4OTAwQ0JEQ0E4
IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwICovLAogCQkJCUU0RDU4RUI3MTdCNEVEODkw
MENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmggKi8sCisJCQkJRTQ3QTk3Q0UxNjMw
NTlGQzAwNURDRDk5IC8qIFN0eWxlSW52YWxpZGF0b3IuY3BwICovLAorCQkJCUU0N0E5N0NGMTYz
MDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdG9yLmggKi8sCiAJCQkJRTREQUNFNkIxRDEy
RTExNjAwNzU5ODBGIC8qIFN0eWxlUGVuZGluZ1Jlc291cmNlcy5jcHAgKi8sCiAJCQkJRTREQUNF
NjkxRDEyRTEwQjAwNzU5ODBGIC8qIFN0eWxlUGVuZGluZ1Jlc291cmNlcy5oICovLAogCQkJCUU0
NjE4MDJFMUM4REQ0RDIwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5jcHAgKi8sCkBAIC0yNTA1
OCw4ICsyNTA2MCw2IEBACiAJCQkJODM1RDM2MzYxOUZGNjE5MzAwNEM5M0FCIC8qIFN0eWxlQnVp
bGRlckN1c3RvbS5oICovLAogCQkJCTk0MTgyNzg4MUQ4QjI0MjIwMDQ5Mjc2NCAvKiBTdHlsZUNv
bG9yLmNwcCAqLywKIAkJCQk5NDE4Mjc4OTFEOEIyNDIyMDA0OTI3NjQgLyogU3R5bGVDb2xvci5o
ICovLAotCQkJCUU0N0E5N0NFMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdGlvbkFu
YWx5c2lzLmNwcCAqLywKLQkJCQlFNDdBOTdDRjE2MzA1OUZDMDA1RENEOTkgLyogU3R5bGVJbnZh
bGlkYXRpb25BbmFseXNpcy5oICovLAogCQkJCTBGRjUwMjZFMTAyQkE5NjYwMDY2RjM5QSAvKiBT
dHlsZU1lZGlhLmNwcCAqLywKIAkJCQkwRkY1MDI2RjEwMkJBOTZBMDA2NkYzOUEgLyogU3R5bGVN
ZWRpYS5oICovLAogCQkJCTBGRjUwMjcwMTAyQkE5NkEwMDY2RjM5QSAvKiBTdHlsZU1lZGlhLmlk
bCAqLywKQEAgLTI5MzQ1LDcgKzI5MzQ1LDcgQEAKIAkJCQlBMTEwREI5QjE0RjVERjc3MDBBMDNC
OTMgLyogU3R5bGVHcmlkSXRlbURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUY0M0NGMEU2
NzNEQTEwMDFDMTI4NyAvKiBTdHlsZUltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzIyNzMw
NDBFODJGMUU2MDBFN0Y5NzUgLyogU3R5bGVJbmhlcml0ZWREYXRhLmggaW4gSGVhZGVycyAqLywK
LQkJCQlFNDcxMjdDQjE2MzQzOEFFMDBFRDZGNUEgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ3MTI3Q0IxNjM0MzhBRTAwRUQ2RjVBIC8qIFN0eWxl
SW52YWxpZGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNzJBMEU4MURFODEwMEIyNTk2
NSAvKiBTdHlsZU1hcnF1ZWVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY1MDI3MjEwMkJB
OTZBMDA2NkYzOUEgLyogU3R5bGVNZWRpYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI3NEUw
RTgxRTA2NzAwQjI1OTY1IC8qIFN0eWxlTXVsdGlDb2xEYXRhLmggaW4gSGVhZGVycyAqLywKQEAg
LTMzMTYzLDcgKzMzMTYzLDcgQEAKIAkJCQlBMTBEQzc2QTE0NzQ3QkFCMDA1RTI0NzEgLyogU3R5
bGVHcmlkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTEwREI5RDE0RjVERjg3MDBBMDNC
OTMgLyogU3R5bGVHcmlkSXRlbURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyMjczMDMw
RTgyRjFFNjAwRTdGOTc1IC8qIFN0eWxlSW5oZXJpdGVkRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlFNDcxMjdDQTE2MzQzOEExMDBFRDZGNUEgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDcxMjdDQTE2MzQzOEExMDBFRDZGNUEgLyogU3R5
bGVJbnZhbGlkYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzVFQjcyOTBFODFERTgxMDBC
MjU5NjUgLyogU3R5bGVNYXJxdWVlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY1MDI3
MTEwMkJBOTZBMDA2NkYzOUEgLyogU3R5bGVNZWRpYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzVFQjc0RDBFODFFMDY3MDBCMjU5NjUgLyogU3R5bGVNdWx0aUNvbERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9u
QW5hbHlzaXMuY3BwCShyZXZpc2lvbiAyMTYwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgi
Ci0KLSNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgotI2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVj
dG9yLmgiCi0jaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2VsZWN0b3JG
aWx0ZXIuaCIKLSNpbmNsdWRlICJTaGFkb3dSb290LmgiCi0jaW5jbHVkZSAiU3R5bGVSdWxlSW1w
b3J0LmgiCi0jaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIGJvb2wgc2hvdWxkRGlydHlBbGxTdHlsZShjb25zdCBWZWN0b3I8UmVm
UHRyPFN0eWxlUnVsZUJhc2U+PiYgcnVsZXMpCi17Ci0gICAgZm9yIChhdXRvJiBydWxlIDogcnVs
ZXMpIHsKLSAgICAgICAgaWYgKGlzPFN0eWxlUnVsZU1lZGlhPigqcnVsZSkpIHsKLSAgICAgICAg
ICAgIGNvbnN0IGF1dG8qIGNoaWxkUnVsZXMgPSBkb3duY2FzdDxTdHlsZVJ1bGVNZWRpYT4oKnJ1
bGUpLmNoaWxkUnVsZXNXaXRob3V0RGVmZXJyZWRQYXJzaW5nKCk7Ci0gICAgICAgICAgICBpZiAo
Y2hpbGRSdWxlcyAmJiBzaG91bGREaXJ0eUFsbFN0eWxlKCpjaGlsZFJ1bGVzKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIEZJWE1FOiBBdCBsZWFzdCBmb250IGZhY2VzIGRvbid0IG5lZWQgZnVsbCByZWNh
bGMgaW4gYWxsIGNhc2VzLgotICAgICAgICBpZiAoIWlzPFN0eWxlUnVsZT4oKnJ1bGUpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3Rh
dGljIGJvb2wgc2hvdWxkRGlydHlBbGxTdHlsZShjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNo
ZWV0KQotewotICAgIGZvciAoYXV0byYgaW1wb3J0IDogc2hlZXQuaW1wb3J0UnVsZXMoKSkgewot
ICAgICAgICBpZiAoIWltcG9ydC0+c3R5bGVTaGVldCgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGlmIChzaG91bGREaXJ0eUFsbFN0eWxlKCppbXBvcnQtPnN0eWxlU2hlZXQoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHNob3VsZERpcnR5QWxs
U3R5bGUoc2hlZXQuY2hpbGRSdWxlcygpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGREaXJ0eUFsbFN0eWxlKGNvbnN0IFZl
Y3RvcjxTdHlsZVNoZWV0Q29udGVudHMqPiYgc2hlZXRzKQotewotICAgIGZvciAoYXV0byYgc2hl
ZXQgOiBzaGVldHMpIHsKLSAgICAgICAgaWYgKHNob3VsZERpcnR5QWxsU3R5bGUoKnNoZWV0KSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LVN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMoY29u
c3QgVmVjdG9yPFN0eWxlU2hlZXRDb250ZW50cyo+JiBzaGVldHMsIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImIG1lZGlhUXVlcnlFdmFsdWF0b3IpCi0gICAgOiBtX293bmVkUnVsZVNldChzdGQ6
Om1ha2VfdW5pcXVlPFJ1bGVTZXQ+KCkpCi0gICAgLCBtX3J1bGVTZXQoKm1fb3duZWRSdWxlU2V0
KQotICAgICwgbV9kaXJ0aWVzQWxsU3R5bGUoc2hvdWxkRGlydHlBbGxTdHlsZShzaGVldHMpKQot
ewotICAgIGlmIChtX2RpcnRpZXNBbGxTdHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9v
d25lZFJ1bGVTZXQtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKLSAgICBmb3IgKGF1dG8mIHNo
ZWV0IDogc2hlZXRzKQotICAgICAgICBtX293bmVkUnVsZVNldC0+YWRkUnVsZXNGcm9tU2hlZXQo
KnNoZWV0LCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKLQotICAgIG1faGFzU2hhZG93UHNldWRvRWxl
bWVudFJ1bGVzSW5BdXRob3JTaGVldCA9IG1fcnVsZVNldC5oYXNTaGFkb3dQc2V1ZG9FbGVtZW50
UnVsZXMoKTsKLX0KLQotU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6U3R5bGVJbnZhbGlkYXRp
b25BbmFseXNpcyhjb25zdCBSdWxlU2V0JiBydWxlU2V0KQotICAgIDogbV9ydWxlU2V0KHJ1bGVT
ZXQpCi0gICAgLCBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQocnVs
ZVNldC5oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoKSkKLXsKLX0KLQotU3R5bGVJbnZhbGlk
YXRpb25BbmFseXNpczo6Q2hlY2tEZXNjZW5kYW50cyBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lz
OjppbnZhbGlkYXRlSWZOZWVkZWQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU2VsZWN0b3JGaWx0
ZXIqIGZpbHRlcikKLXsKLSAgICBpZiAobV9oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXNJbkF1
dGhvclNoZWV0KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGRvIGFjdHVhbCBydWxl
IG1hdGNoaW5nIHRvby4KLSAgICAgICAgaWYgKGVsZW1lbnQuc2hhZG93Um9vdCgpKQotICAgICAg
ICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7Ci0gICAgfQotCi0gICAg
Ym9vbCBzaG91bGRDaGVja0ZvclNsb3RzID0gIW1fcnVsZVNldC5zbG90dGVkUHNldWRvRWxlbWVu
dFJ1bGVzKCkuaXNFbXB0eSgpICYmICFtX2RpZEludmFsaWRhdGVIb3N0Q2hpbGRyZW47Ci0gICAg
aWYgKHNob3VsZENoZWNrRm9yU2xvdHMgJiYgaXM8SFRNTFNsb3RFbGVtZW50PihlbGVtZW50KSkg
ewotICAgICAgICBhdXRvKiBjb250YWluaW5nU2hhZG93Um9vdCA9IGVsZW1lbnQuY29udGFpbmlu
Z1NoYWRvd1Jvb3QoKTsKLSAgICAgICAgaWYgKGNvbnRhaW5pbmdTaGFkb3dSb290ICYmIGNvbnRh
aW5pbmdTaGFkb3dSb290LT5ob3N0KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcG9zc2li
bHlTbG90dGVkIDogY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4oKmNvbnRhaW5pbmdTaGFkb3dSb290
LT5ob3N0KCkpKQotICAgICAgICAgICAgICAgIHBvc3NpYmx5U2xvdHRlZC5pbnZhbGlkYXRlU3R5
bGUoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBObyBuZWVkIHRvIGRvIHRoaXMgYWdhaW4uCi0g
ICAgICAgIG1fZGlkSW52YWxpZGF0ZUhvc3RDaGlsZHJlbiA9IHRydWU7Ci0gICAgfQotCi0gICAg
c3dpdGNoIChlbGVtZW50LnN0eWxlVmFsaWRpdHkoKSkgewotICAgIGNhc2UgU3R5bGU6OlZhbGlk
aXR5OjpWYWxpZDogewotICAgICAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBydWxlQ29sbGVjdG9y
KGVsZW1lbnQsIG1fcnVsZVNldCwgZmlsdGVyKTsKLSAgICAgICAgcnVsZUNvbGxlY3Rvci5zZXRN
b2RlKFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6Q29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFs
UHNldWRvRWxlbWVudHMpOwotICAgICAgICBydWxlQ29sbGVjdG9yLm1hdGNoQXV0aG9yUnVsZXMo
ZmFsc2UpOwotCi0gICAgICAgIGlmIChydWxlQ29sbGVjdG9yLmhhc01hdGNoZWRSdWxlcygpKQot
ICAgICAgICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuIENo
ZWNrRGVzY2VuZGFudHM6OlllczsKLSAgICB9Ci0gICAgY2FzZSBTdHlsZTo6VmFsaWRpdHk6OkVs
ZW1lbnRJbnZhbGlkOgotICAgICAgICByZXR1cm4gQ2hlY2tEZXNjZW5kYW50czo6WWVzOwotICAg
IGNhc2UgU3R5bGU6OlZhbGlkaXR5OjpTdWJ0cmVlSW52YWxpZDoKLSAgICBjYXNlIFN0eWxlOjpW
YWxpZGl0eTo6U3VidHJlZUFuZFJlbmRlcmVyc0ludmFsaWQ6Ci0gICAgICAgIGlmIChzaG91bGRD
aGVja0ZvclNsb3RzKQotICAgICAgICAgICAgcmV0dXJuIENoZWNrRGVzY2VuZGFudHM6OlllczsK
LSAgICAgICAgcmV0dXJuIENoZWNrRGVzY2VuZGFudHM6Ok5vOwotICAgIH0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gQ2hlY2tEZXNjZW5kYW50czo6WWVzOwotfQotCi12
b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZUZvclRyZWUoRWxl
bWVudCYgcm9vdCwgU2VsZWN0b3JGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBpZiAoaW52YWxpZGF0
ZUlmTmVlZGVkKHJvb3QsIGZpbHRlcikgPT0gQ2hlY2tEZXNjZW5kYW50czo6Tm8pCi0gICAgICAg
IHJldHVybjsKLQotICAgIFZlY3RvcjxFbGVtZW50KiwgMjA+IHBhcmVudFN0YWNrOwotICAgIEVs
ZW1lbnQqIHByZXZpb3VzRWxlbWVudCA9ICZyb290OwotICAgIGF1dG8gZGVzY2VuZGFudHMgPSBk
ZXNjZW5kYW50c09mVHlwZTxFbGVtZW50Pihyb290KTsKLSAgICBmb3IgKGF1dG8gaXQgPSBkZXNj
ZW5kYW50cy5iZWdpbigpLCBlbmQgPSBkZXNjZW5kYW50cy5lbmQoKTsgaXQgIT0gZW5kOykgewot
ICAgICAgICBhdXRvJiBkZXNjZW5kYW50ID0gKml0OwotICAgICAgICBhdXRvKiBwYXJlbnQgPSBk
ZXNjZW5kYW50LnBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKHBhcmVudFN0YWNrLmlzRW1w
dHkoKSB8fCBwYXJlbnRTdGFjay5sYXN0KCkgIT0gcGFyZW50KSB7Ci0gICAgICAgICAgICBpZiAo
cGFyZW50ID09IHByZXZpb3VzRWxlbWVudCkgewotICAgICAgICAgICAgICAgIHBhcmVudFN0YWNr
LmFwcGVuZChwYXJlbnQpOwotICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIpCi0gICAgICAgICAg
ICAgICAgICAgIGZpbHRlci0+cHVzaFBhcmVudChwYXJlbnQpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50U3RhY2subGFzdCgpICE9IHBhcmVudCkg
ewotICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChmaWx0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIt
PnBvcFBhcmVudCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBwcmV2aW91c0VsZW1lbnQgPSAmZGVzY2VuZGFudDsKLQotICAgICAgICBpZiAo
aW52YWxpZGF0ZUlmTmVlZGVkKGRlc2NlbmRhbnQsIGZpbHRlcikgPT0gQ2hlY2tEZXNjZW5kYW50
czo6WWVzKQotICAgICAgICAgICAgaXQudHJhdmVyc2VOZXh0KCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGl0LnRyYXZlcnNlTmV4dFNraXBwaW5nQ2hpbGRyZW4oKTsKLSAgICB9Ci19Ci0K
LXZvaWQgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZVN0eWxlKERvY3VtZW50
JiBkb2N1bWVudCkKLXsKLSAgICBBU1NFUlQoIW1fZGlydGllc0FsbFN0eWxlKTsKLQotICAgIEVs
ZW1lbnQqIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOwotICAg
IGlmICghZG9jdW1lbnRFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTZWxlY3RvckZp
bHRlciBmaWx0ZXI7Ci0gICAgaW52YWxpZGF0ZVN0eWxlRm9yVHJlZSgqZG9jdW1lbnRFbGVtZW50
LCAmZmlsdGVyKTsKLX0KLQotdm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjppbnZhbGlk
YXRlU3R5bGUoU2hhZG93Um9vdCYgc2hhZG93Um9vdCkKLXsKLSAgICBBU1NFUlQoIW1fZGlydGll
c0FsbFN0eWxlKTsKLQotICAgIGlmICghbV9ydWxlU2V0Lmhvc3RQc2V1ZG9DbGFzc1J1bGVzKCku
aXNFbXB0eSgpICYmIHNoYWRvd1Jvb3QuaG9zdCgpKQotICAgICAgICBzaGFkb3dSb290Lmhvc3Qo
KS0+aW52YWxpZGF0ZVN0eWxlKCk7Ci0KLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5P
ZlR5cGU8RWxlbWVudD4oc2hhZG93Um9vdCkpIHsKLSAgICAgICAgU2VsZWN0b3JGaWx0ZXIgZmls
dGVyOwotICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JUcmVlKGNoaWxkLCAmZmlsdGVyKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZVN0eWxl
KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgQVNTRVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7Ci0K
LSAgICAvLyBEb24ndCB1c2UgU2VsZWN0b3JGaWx0ZXIgYXMgdGhlIHJ1bGUgc2V0cyBoZXJlIHRl
bmQgdG8gYmUgc21hbGwgYW5kIHRoZSBmaWx0ZXIgd291bGQgaGF2ZSBzZXR1cCBjb3N0IGRlZXAg
aW4gdGhlIHRyZWUuCi0gICAgaW52YWxpZGF0ZVN0eWxlRm9yVHJlZShlbGVtZW50LCBudWxscHRy
KTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5h
bHlzaXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRp
b25BbmFseXNpcy5oCShyZXZpc2lvbiAyMTYwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oCShub25leGlzdGVudCkKQEAgLTEsNjMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERvY3VtZW50OwotY2xhc3MgRWxlbWVudDsKLWNsYXNz
IE1lZGlhUXVlcnlFdmFsdWF0b3I7Ci1jbGFzcyBSdWxlU2V0OwotY2xhc3MgU2VsZWN0b3JGaWx0
ZXI7Ci1jbGFzcyBTaGFkb3dSb290OwotY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwotCi1jbGFz
cyBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzIHsKLXB1YmxpYzoKLSAgICBTdHlsZUludmFsaWRh
dGlvbkFuYWx5c2lzKGNvbnN0IFZlY3RvcjxTdHlsZVNoZWV0Q29udGVudHMqPiYsIGNvbnN0IE1l
ZGlhUXVlcnlFdmFsdWF0b3ImKTsKLSAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzKGNvbnN0
IFJ1bGVTZXQmKTsKLQotICAgIGJvb2wgZGlydGllc0FsbFN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9kaXJ0aWVzQWxsU3R5bGU7IH0KLSAgICBib29sIGhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxl
c0luQXV0aG9yU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRS
dWxlc0luQXV0aG9yU2hlZXQ7IH0KLSAgICB2b2lkIGludmFsaWRhdGVTdHlsZShEb2N1bWVudCYp
OwotICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlKFNoYWRvd1Jvb3QmKTsKLSAgICB2b2lkIGludmFs
aWRhdGVTdHlsZShFbGVtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgZW51bSBjbGFzcyBDaGVja0Rl
c2NlbmRhbnRzIHsgWWVzLCBObyB9OwotICAgIENoZWNrRGVzY2VuZGFudHMgaW52YWxpZGF0ZUlm
TmVlZGVkKEVsZW1lbnQmLCBjb25zdCBTZWxlY3RvckZpbHRlciopOwotICAgIHZvaWQgaW52YWxp
ZGF0ZVN0eWxlRm9yVHJlZShFbGVtZW50JiwgU2VsZWN0b3JGaWx0ZXIqKTsKLQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxSdWxlU2V0PiBtX293bmVkUnVsZVNldDsKLSAgICBjb25zdCBSdWxlU2V0JiBt
X3J1bGVTZXQ7Ci0gICAgYm9vbCBtX2RpcnRpZXNBbGxTdHlsZSB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9kaWRJbnZhbGlkYXRlSG9zdENoaWxkcmVuIHsgZmFsc2UgfTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25T
dHlsZVNoZWV0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V4dGVuc2lv
blN0eWxlU2hlZXRzLmNwcAkocmV2aXNpb24gMjE2MDczKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0V4dGVuc2lvblN0eWxlU2hlZXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBA
QAogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIlNWR1N0eWxl
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3R5bGVJbnZhbGlk
YXRpb25BbmFseXNpcy5oIgorI2luY2x1ZGUgIlN0eWxlSW52YWxpZGF0b3IuaCIKICNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlN0
eWxlU2hlZXRDb250ZW50cy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvQXR0cmlidXRl
Q2hhbmdlSW52YWxpZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCShyZXZpc2lvbiAyMTYwNzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRSdWxlU2V0cy5o
IgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIK
LSNpbmNsdWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgiCisjaW5jbHVkZSAiU3R5bGVJ
bnZhbGlkYXRvci5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHls
ZVNjb3BlLmgiCiAKQEAgLTExNiw4ICsxMTYsOCBAQCB2b2lkIEF0dHJpYnV0ZUNoYW5nZUludmFs
aWRhdGlvbjo6aW52YWxpCiB7CiAgICAgaWYgKCFtX2Rlc2NlbmRhbnRJbnZhbGlkYXRpb25SdWxl
U2V0KQogICAgICAgICByZXR1cm47Ci0gICAgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcyBpbnZh
bGlkYXRpb25BbmFseXNpcygqbV9kZXNjZW5kYW50SW52YWxpZGF0aW9uUnVsZVNldCk7Ci0gICAg
aW52YWxpZGF0aW9uQW5hbHlzaXMuaW52YWxpZGF0ZVN0eWxlKG1fZWxlbWVudCk7CisgICAgSW52
YWxpZGF0b3IgaW52YWxpZGF0b3IoKm1fZGVzY2VuZGFudEludmFsaWRhdGlvblJ1bGVTZXQpOwor
ICAgIGludmFsaWRhdG9yLmludmFsaWRhdGVTdHlsZShtX2VsZW1lbnQpOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3Bw
CShyZXZpc2lvbiAyMTYwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUlu
dmFsaWRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRl
ICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNs
dWRlICJTcGFjZVNwbGl0U3RyaW5nLmgiCi0jaW5jbHVkZSAiU3R5bGVJbnZhbGlkYXRpb25BbmFs
eXNpcy5oIgorI2luY2x1ZGUgIlN0eWxlSW52YWxpZGF0b3IuaCIKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0
b3IuaD4KQEAgLTE0OSw4ICsxNDksOCBAQCB2b2lkIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjpp
bnZhbGlkYXRlCiB2b2lkIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZhbGlkYXRlRGVzY2Vu
ZGFudFN0eWxlKCkKIHsKICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yQ2xhc3NSdWxlcyA6IG1fZGVz
Y2VuZGFudEludmFsaWRhdGlvblJ1bGVTZXRzKSB7Ci0gICAgICAgIFN0eWxlSW52YWxpZGF0aW9u
QW5hbHlzaXMgaW52YWxpZGF0aW9uQW5hbHlzaXMoKmFuY2VzdG9yQ2xhc3NSdWxlcyk7Ci0gICAg
ICAgIGludmFsaWRhdGlvbkFuYWx5c2lzLmludmFsaWRhdGVTdHlsZShtX2VsZW1lbnQpOworICAg
ICAgICBJbnZhbGlkYXRvciBpbnZhbGlkYXRvcigqYW5jZXN0b3JDbGFzc1J1bGVzKTsKKyAgICAg
ICAgaW52YWxpZGF0b3IuaW52YWxpZGF0ZVN0eWxlKG1fZWxlbWVudCk7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAkocmV2aXNpb24g
MjE2MDczKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cy5jcHA6MjE2MDczKQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oIgorCisjaW5jbHVkZSAiQ1NTU2VsZWN0
b3JMaXN0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50SXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgorI2luY2x1ZGUgIkhUTUxT
bG90RWxlbWVudC5oIgorI2luY2x1ZGUgIlNlbGVjdG9yRmlsdGVyLmgiCisjaW5jbHVkZSAiU2hh
ZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0eWxlUnVsZUltcG9ydC5oIgorI2luY2x1ZGUgIlN0eWxl
U2hlZXRDb250ZW50cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBib29sIHNo
b3VsZERpcnR5QWxsU3R5bGUoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIHJ1
bGVzKQoreworICAgIGZvciAoYXV0byYgcnVsZSA6IHJ1bGVzKSB7CisgICAgICAgIGlmIChpczxT
dHlsZVJ1bGVNZWRpYT4oKnJ1bGUpKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvKiBjaGlsZFJ1
bGVzID0gZG93bmNhc3Q8U3R5bGVSdWxlTWVkaWE+KCpydWxlKS5jaGlsZFJ1bGVzV2l0aG91dERl
ZmVycmVkUGFyc2luZygpOworICAgICAgICAgICAgaWYgKGNoaWxkUnVsZXMgJiYgc2hvdWxkRGly
dHlBbGxTdHlsZSgqY2hpbGRSdWxlcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogQXQgbGVh
c3QgZm9udCBmYWNlcyBkb24ndCBuZWVkIGZ1bGwgcmVjYWxjIGluIGFsbCBjYXNlcy4KKyAgICAg
ICAgaWYgKCFpczxTdHlsZVJ1bGU+KCpydWxlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZERpcnR5QWxs
U3R5bGUoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCkKK3sKKyAgICBmb3IgKGF1dG8m
IGltcG9ydCA6IHNoZWV0LmltcG9ydFJ1bGVzKCkpIHsKKyAgICAgICAgaWYgKCFpbXBvcnQtPnN0
eWxlU2hlZXQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoc2hvdWxkRGly
dHlBbGxTdHlsZSgqaW1wb3J0LT5zdHlsZVNoZWV0KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIGlmIChzaG91bGREaXJ0eUFsbFN0eWxlKHNoZWV0LmNoaWxkUnVsZXMo
KSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGlj
IGJvb2wgc2hvdWxkRGlydHlBbGxTdHlsZShjb25zdCBWZWN0b3I8U3R5bGVTaGVldENvbnRlbnRz
Kj4mIHNoZWV0cykKK3sKKyAgICBmb3IgKGF1dG8mIHNoZWV0IDogc2hlZXRzKSB7CisgICAgICAg
IGlmIChzaG91bGREaXJ0eUFsbFN0eWxlKCpzaGVldCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHlsZUludmFsaWRhdGlvbkFuYWx5
c2lzOjpTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzKGNvbnN0IFZlY3RvcjxTdHlsZVNoZWV0Q29u
dGVudHMqPiYgc2hlZXRzLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpYVF1ZXJ5RXZh
bHVhdG9yKQorICAgIDogbV9vd25lZFJ1bGVTZXQoc3RkOjptYWtlX3VuaXF1ZTxSdWxlU2V0Pigp
KQorICAgICwgbV9ydWxlU2V0KCptX293bmVkUnVsZVNldCkKKyAgICAsIG1fZGlydGllc0FsbFN0
eWxlKHNob3VsZERpcnR5QWxsU3R5bGUoc2hlZXRzKSkKK3sKKyAgICBpZiAobV9kaXJ0aWVzQWxs
U3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fb3duZWRSdWxlU2V0LT5kaXNhYmxlQXV0
b1Nocmlua1RvRml0KCk7CisgICAgZm9yIChhdXRvJiBzaGVldCA6IHNoZWV0cykKKyAgICAgICAg
bV9vd25lZFJ1bGVTZXQtPmFkZFJ1bGVzRnJvbVNoZWV0KCpzaGVldCwgbWVkaWFRdWVyeUV2YWx1
YXRvcik7CisKKyAgICBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQg
PSBtX3J1bGVTZXQuaGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKCk7Cit9CisKK1N0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXM6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMoY29uc3QgUnVsZVNl
dCYgcnVsZVNldCkKKyAgICA6IG1fcnVsZVNldChydWxlU2V0KQorICAgICwgbV9oYXNTaGFkb3dQ
c2V1ZG9FbGVtZW50UnVsZXNJbkF1dGhvclNoZWV0KHJ1bGVTZXQuaGFzU2hhZG93UHNldWRvRWxl
bWVudFJ1bGVzKCkpCit7Cit9CisKK1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OkNoZWNrRGVz
Y2VuZGFudHMgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZUlmTmVlZGVkKEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgaWYg
KG1faGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzSW5BdXRob3JTaGVldCkgeworICAgICAgICAv
LyBGSVhNRTogVGhpcyBjb3VsZCBkbyBhY3R1YWwgcnVsZSBtYXRjaGluZyB0b28uCisgICAgICAg
IGlmIChlbGVtZW50LnNoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0
ZVN0eWxlRm9yU3VidHJlZSgpOworICAgIH0KKworICAgIGJvb2wgc2hvdWxkQ2hlY2tGb3JTbG90
cyA9ICFtX3J1bGVTZXQuc2xvdHRlZFBzZXVkb0VsZW1lbnRSdWxlcygpLmlzRW1wdHkoKSAmJiAh
bV9kaWRJbnZhbGlkYXRlSG9zdENoaWxkcmVuOworICAgIGlmIChzaG91bGRDaGVja0ZvclNsb3Rz
ICYmIGlzPEhUTUxTbG90RWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAgYXV0byogY29udGFp
bmluZ1NoYWRvd1Jvb3QgPSBlbGVtZW50LmNvbnRhaW5pbmdTaGFkb3dSb290KCk7CisgICAgICAg
IGlmIChjb250YWluaW5nU2hhZG93Um9vdCAmJiBjb250YWluaW5nU2hhZG93Um9vdC0+aG9zdCgp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHBvc3NpYmx5U2xvdHRlZCA6IGNoaWxkcmVuT2ZU
eXBlPEVsZW1lbnQ+KCpjb250YWluaW5nU2hhZG93Um9vdC0+aG9zdCgpKSkKKyAgICAgICAgICAg
ICAgICBwb3NzaWJseVNsb3R0ZWQuaW52YWxpZGF0ZVN0eWxlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gTm8gbmVlZCB0byBkbyB0aGlzIGFnYWluLgorICAgICAgICBtX2RpZEludmFsaWRhdGVI
b3N0Q2hpbGRyZW4gPSB0cnVlOworICAgIH0KKworICAgIHN3aXRjaCAoZWxlbWVudC5zdHlsZVZh
bGlkaXR5KCkpIHsKKyAgICBjYXNlIFN0eWxlOjpWYWxpZGl0eTo6VmFsaWQ6IHsKKyAgICAgICAg
RWxlbWVudFJ1bGVDb2xsZWN0b3IgcnVsZUNvbGxlY3RvcihlbGVtZW50LCBtX3J1bGVTZXQsIGZp
bHRlcik7CisgICAgICAgIHJ1bGVDb2xsZWN0b3Iuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6Ok1v
ZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzKTsKKyAgICAg
ICAgcnVsZUNvbGxlY3Rvci5tYXRjaEF1dGhvclJ1bGVzKGZhbHNlKTsKKworICAgICAgICBpZiAo
cnVsZUNvbGxlY3Rvci5oYXNNYXRjaGVkUnVsZXMoKSkKKyAgICAgICAgICAgIGVsZW1lbnQuaW52
YWxpZGF0ZVN0eWxlKCk7CisgICAgICAgIHJldHVybiBDaGVja0Rlc2NlbmRhbnRzOjpZZXM7Cisg
ICAgfQorICAgIGNhc2UgU3R5bGU6OlZhbGlkaXR5OjpFbGVtZW50SW52YWxpZDoKKyAgICAgICAg
cmV0dXJuIENoZWNrRGVzY2VuZGFudHM6OlllczsKKyAgICBjYXNlIFN0eWxlOjpWYWxpZGl0eTo6
U3VidHJlZUludmFsaWQ6CisgICAgY2FzZSBTdHlsZTo6VmFsaWRpdHk6OlN1YnRyZWVBbmRSZW5k
ZXJlcnNJbnZhbGlkOgorICAgICAgICBpZiAoc2hvdWxkQ2hlY2tGb3JTbG90cykKKyAgICAgICAg
ICAgIHJldHVybiBDaGVja0Rlc2NlbmRhbnRzOjpZZXM7CisgICAgICAgIHJldHVybiBDaGVja0Rl
c2NlbmRhbnRzOjpObzsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIENoZWNrRGVzY2VuZGFudHM6OlllczsKK30KKwordm9pZCBTdHlsZUludmFsaWRhdGlvbkFu
YWx5c2lzOjppbnZhbGlkYXRlU3R5bGVGb3JUcmVlKEVsZW1lbnQmIHJvb3QsIFNlbGVjdG9yRmls
dGVyKiBmaWx0ZXIpCit7CisgICAgaWYgKGludmFsaWRhdGVJZk5lZWRlZChyb290LCBmaWx0ZXIp
ID09IENoZWNrRGVzY2VuZGFudHM6Ok5vKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8
RWxlbWVudCosIDIwPiBwYXJlbnRTdGFjazsKKyAgICBFbGVtZW50KiBwcmV2aW91c0VsZW1lbnQg
PSAmcm9vdDsKKyAgICBhdXRvIGRlc2NlbmRhbnRzID0gZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVu
dD4ocm9vdCk7CisgICAgZm9yIChhdXRvIGl0ID0gZGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0g
ZGVzY2VuZGFudHMuZW5kKCk7IGl0ICE9IGVuZDspIHsKKyAgICAgICAgYXV0byYgZGVzY2VuZGFu
dCA9ICppdDsKKyAgICAgICAgYXV0byogcGFyZW50ID0gZGVzY2VuZGFudC5wYXJlbnRFbGVtZW50
KCk7CisgICAgICAgIGlmIChwYXJlbnRTdGFjay5pc0VtcHR5KCkgfHwgcGFyZW50U3RhY2subGFz
dCgpICE9IHBhcmVudCkgeworICAgICAgICAgICAgaWYgKHBhcmVudCA9PSBwcmV2aW91c0VsZW1l
bnQpIHsKKyAgICAgICAgICAgICAgICBwYXJlbnRTdGFjay5hcHBlbmQocGFyZW50KTsKKyAgICAg
ICAgICAgICAgICBpZiAoZmlsdGVyKQorICAgICAgICAgICAgICAgICAgICBmaWx0ZXItPnB1c2hQ
YXJlbnQocGFyZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd2hp
bGUgKHBhcmVudFN0YWNrLmxhc3QoKSAhPSBwYXJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAg
cGFyZW50U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVy
KQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLT5wb3BQYXJlbnQoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJldmlvdXNFbGVt
ZW50ID0gJmRlc2NlbmRhbnQ7CisKKyAgICAgICAgaWYgKGludmFsaWRhdGVJZk5lZWRlZChkZXNj
ZW5kYW50LCBmaWx0ZXIpID09IENoZWNrRGVzY2VuZGFudHM6OlllcykKKyAgICAgICAgICAgIGl0
LnRyYXZlcnNlTmV4dCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdC50cmF2ZXJzZU5l
eHRTa2lwcGluZ0NoaWxkcmVuKCk7CisgICAgfQorfQorCit2b2lkIFN0eWxlSW52YWxpZGF0aW9u
QW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgQVNT
RVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7CisKKyAgICBFbGVtZW50KiBkb2N1bWVudEVsZW1lbnQg
PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgU2VsZWN0b3JGaWx0ZXIgZmlsdGVyOworICAgIGludmFs
aWRhdGVTdHlsZUZvclRyZWUoKmRvY3VtZW50RWxlbWVudCwgJmZpbHRlcik7Cit9CisKK3ZvaWQg
U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZVN0eWxlKFNoYWRvd1Jvb3QmIHNo
YWRvd1Jvb3QpCit7CisgICAgQVNTRVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7CisKKyAgICBpZiAo
IW1fcnVsZVNldC5ob3N0UHNldWRvQ2xhc3NSdWxlcygpLmlzRW1wdHkoKSAmJiBzaGFkb3dSb290
Lmhvc3QoKSkKKyAgICAgICAgc2hhZG93Um9vdC5ob3N0KCktPmludmFsaWRhdGVTdHlsZSgpOwor
CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KHNoYWRvd1Jv
b3QpKSB7CisgICAgICAgIFNlbGVjdG9yRmlsdGVyIGZpbHRlcjsKKyAgICAgICAgaW52YWxpZGF0
ZVN0eWxlRm9yVHJlZShjaGlsZCwgJmZpbHRlcik7CisgICAgfQorfQorCit2b2lkIFN0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZShFbGVtZW50JiBlbGVtZW50KQorewor
ICAgIEFTU0VSVCghbV9kaXJ0aWVzQWxsU3R5bGUpOworCisgICAgLy8gRG9uJ3QgdXNlIFNlbGVj
dG9yRmlsdGVyIGFzIHRoZSBydWxlIHNldHMgaGVyZSB0ZW5kIHRvIGJlIHNtYWxsIGFuZCB0aGUg
ZmlsdGVyIHdvdWxkIGhhdmUgc2V0dXAgY29zdCBkZWVwIGluIHRoZSB0cmVlLgorICAgIGludmFs
aWRhdGVTdHlsZUZvclRyZWUoZWxlbWVudCwgbnVsbHB0cik7Cit9CisKK30KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwCShyZXZpc2lvbiAyMTYwNzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgiCisjaW5jbHVkZSAiU3R5bGVJ
bnZhbGlkYXRvci5oIgogCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVu
dHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFN0eWxlIHsKIAogc3RhdGlj
IGJvb2wgc2hvdWxkRGlydHlBbGxTdHlsZShjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJh
c2U+PiYgcnVsZXMpCiB7CkBAIC03Niw3ICs3Nyw3IEBAIHN0YXRpYyBib29sIHNob3VsZERpcnR5
QWxsU3R5bGUoY29uc3QgVmUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVN0eWxlSW52YWxpZGF0
aW9uQW5hbHlzaXM6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMoY29uc3QgVmVjdG9yPFN0eWxl
U2hlZXRDb250ZW50cyo+JiBzaGVldHMsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGlh
UXVlcnlFdmFsdWF0b3IpCitJbnZhbGlkYXRvcjo6SW52YWxpZGF0b3IoY29uc3QgVmVjdG9yPFN0
eWxlU2hlZXRDb250ZW50cyo+JiBzaGVldHMsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1l
ZGlhUXVlcnlFdmFsdWF0b3IpCiAgICAgOiBtX293bmVkUnVsZVNldChzdGQ6Om1ha2VfdW5pcXVl
PFJ1bGVTZXQ+KCkpCiAgICAgLCBtX3J1bGVTZXQoKm1fb3duZWRSdWxlU2V0KQogICAgICwgbV9k
aXJ0aWVzQWxsU3R5bGUoc2hvdWxkRGlydHlBbGxTdHlsZShzaGVldHMpKQpAQCAtOTEsMTMgKzky
LDEzIEBAIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OlN0eWxlSW52YWxpZGEKICAgICBtX2hh
c1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQgPSBtX3J1bGVTZXQuaGFzU2hh
ZG93UHNldWRvRWxlbWVudFJ1bGVzKCk7CiB9CiAKLVN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6
OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMoY29uc3QgUnVsZVNldCYgcnVsZVNldCkKK0ludmFs
aWRhdG9yOjpJbnZhbGlkYXRvcihjb25zdCBSdWxlU2V0JiBydWxlU2V0KQogICAgIDogbV9ydWxl
U2V0KHJ1bGVTZXQpCiAgICAgLCBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9y
U2hlZXQocnVsZVNldC5oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoKSkKIHsKIH0KIAotU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpczo6Q2hlY2tEZXNjZW5kYW50cyBTdHlsZUludmFsaWRhdGlv
bkFuYWx5c2lzOjppbnZhbGlkYXRlSWZOZWVkZWQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU2Vs
ZWN0b3JGaWx0ZXIqIGZpbHRlcikKK0ludmFsaWRhdG9yOjpDaGVja0Rlc2NlbmRhbnRzIEludmFs
aWRhdG9yOjppbnZhbGlkYXRlSWZOZWVkZWQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU2VsZWN0
b3JGaWx0ZXIqIGZpbHRlcikKIHsKICAgICBpZiAobV9oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVs
ZXNJbkF1dGhvclNoZWV0KSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGRvIGFjdHVh
bCBydWxlIG1hdGNoaW5nIHRvby4KQEAgLTEzOCw3ICsxMzksNyBAQCBTdHlsZUludmFsaWRhdGlv
bkFuYWx5c2lzOjpDaGVja0Rlc2NlbmRhCiAgICAgcmV0dXJuIENoZWNrRGVzY2VuZGFudHM6Olll
czsKIH0KIAotdm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjppbnZhbGlkYXRlU3R5bGVG
b3JUcmVlKEVsZW1lbnQmIHJvb3QsIFNlbGVjdG9yRmlsdGVyKiBmaWx0ZXIpCit2b2lkIEludmFs
aWRhdG9yOjppbnZhbGlkYXRlU3R5bGVGb3JUcmVlKEVsZW1lbnQmIHJvb3QsIFNlbGVjdG9yRmls
dGVyKiBmaWx0ZXIpCiB7CiAgICAgaWYgKGludmFsaWRhdGVJZk5lZWRlZChyb290LCBmaWx0ZXIp
ID09IENoZWNrRGVzY2VuZGFudHM6Ok5vKQogICAgICAgICByZXR1cm47CkBAIC0xNzEsNyArMTcy
LDcgQEAgdm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjppbnZhbGlkYQogICAgIH0KIH0K
IAotdm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjppbnZhbGlkYXRlU3R5bGUoRG9jdW1l
bnQmIGRvY3VtZW50KQordm9pZCBJbnZhbGlkYXRvcjo6aW52YWxpZGF0ZVN0eWxlKERvY3VtZW50
JiBkb2N1bWVudCkKIHsKICAgICBBU1NFUlQoIW1fZGlydGllc0FsbFN0eWxlKTsKIApAQCAtMTgz
LDcgKzE4NCw3IEBAIHZvaWQgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGEKICAg
ICBpbnZhbGlkYXRlU3R5bGVGb3JUcmVlKCpkb2N1bWVudEVsZW1lbnQsICZmaWx0ZXIpOwogfQog
Ci12b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZShTaGFkb3dS
b290JiBzaGFkb3dSb290KQordm9pZCBJbnZhbGlkYXRvcjo6aW52YWxpZGF0ZVN0eWxlKFNoYWRv
d1Jvb3QmIHNoYWRvd1Jvb3QpCiB7CiAgICAgQVNTRVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7CiAK
QEAgLTE5Niw3ICsxOTcsNyBAQCB2b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFs
aWRhCiAgICAgfQogfQogCi12b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRh
dGVTdHlsZShFbGVtZW50JiBlbGVtZW50KQordm9pZCBJbnZhbGlkYXRvcjo6aW52YWxpZGF0ZVN0
eWxlKEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7
CiAKQEAgLTIwNSwzICsyMDYsNCBAQCB2b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6Omlu
dmFsaWRhCiB9CiAKIH0KK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxp
ZGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRh
dG9yLmgJKHJldmlzaW9uIDIxNjA3MykJKGZyb20gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXMuaDoyMTYwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZUludmFsaWRhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgRWxlbWVudDsKK2NsYXNzIE1lZGlhUXVl
cnlFdmFsdWF0b3I7CitjbGFzcyBSdWxlU2V0OworY2xhc3MgU2VsZWN0b3JGaWx0ZXI7CitjbGFz
cyBTaGFkb3dSb290OworY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOworCitjbGFzcyBTdHlsZUlu
dmFsaWRhdGlvbkFuYWx5c2lzIHsKK3B1YmxpYzoKKyAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5
c2lzKGNvbnN0IFZlY3RvcjxTdHlsZVNoZWV0Q29udGVudHMqPiYsIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImKTsKKyAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzKGNvbnN0IFJ1bGVTZXQm
KTsKKworICAgIGJvb2wgZGlydGllc0FsbFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9kaXJ0aWVz
QWxsU3R5bGU7IH0KKyAgICBib29sIGhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9y
U2hlZXQoKSBjb25zdCB7IHJldHVybiBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0
aG9yU2hlZXQ7IH0KKyAgICB2b2lkIGludmFsaWRhdGVTdHlsZShEb2N1bWVudCYpOworICAgIHZv
aWQgaW52YWxpZGF0ZVN0eWxlKFNoYWRvd1Jvb3QmKTsKKyAgICB2b2lkIGludmFsaWRhdGVTdHls
ZShFbGVtZW50Jik7CisKK3ByaXZhdGU6CisgICAgZW51bSBjbGFzcyBDaGVja0Rlc2NlbmRhbnRz
IHsgWWVzLCBObyB9OworICAgIENoZWNrRGVzY2VuZGFudHMgaW52YWxpZGF0ZUlmTmVlZGVkKEVs
ZW1lbnQmLCBjb25zdCBTZWxlY3RvckZpbHRlciopOworICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxl
Rm9yVHJlZShFbGVtZW50JiwgU2VsZWN0b3JGaWx0ZXIqKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxSdWxlU2V0PiBtX293bmVkUnVsZVNldDsKKyAgICBjb25zdCBSdWxlU2V0JiBtX3J1bGVTZXQ7
CisgICAgYm9vbCBtX2RpcnRpZXNBbGxTdHlsZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1No
YWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9kaWRJbnZhbGlkYXRlSG9zdENoaWxkcmVuIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmgJ
KHJldmlzaW9uIDIxNjA3MykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDE0LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUg
PHd0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworbmFt
ZXNwYWNlIFN0eWxlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwpAQCAtMzcs
MTAgKzM4LDEwIEBAIGNsYXNzIFNlbGVjdG9yRmlsdGVyOwogY2xhc3MgU2hhZG93Um9vdDsKIGNs
YXNzIFN0eWxlU2hlZXRDb250ZW50czsKIAotY2xhc3MgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cyB7CitjbGFzcyBJbnZhbGlkYXRvciB7CiBwdWJsaWM6Ci0gICAgU3R5bGVJbnZhbGlkYXRpb25B
bmFseXNpcyhjb25zdCBWZWN0b3I8U3R5bGVTaGVldENvbnRlbnRzKj4mLCBjb25zdCBNZWRpYVF1
ZXJ5RXZhbHVhdG9yJik7Ci0gICAgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcyhjb25zdCBSdWxl
U2V0Jik7CisgICAgSW52YWxpZGF0b3IoY29uc3QgVmVjdG9yPFN0eWxlU2hlZXRDb250ZW50cyo+
JiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYpOworICAgIEludmFsaWRhdG9yKGNvbnN0IFJ1
bGVTZXQmKTsKIAogICAgIGJvb2wgZGlydGllc0FsbFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9k
aXJ0aWVzQWxsU3R5bGU7IH0KICAgICBib29sIGhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0lu
QXV0aG9yU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxl
c0luQXV0aG9yU2hlZXQ7IH0KQEAgLTYwLDQgKzYxLDUgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
ZGlkSW52YWxpZGF0ZUhvc3RDaGlsZHJlbiB7IGZhbHNlIH07CiB9OwogCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCit9Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAkocmV2
aXNpb24gMjE2MDczKQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJTVkdTdHlsZUVsZW1lbnQu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNs
dWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgiCisjaW5jbHVkZSAiU3R5bGVJbnZhbGlk
YXRvci5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0
Q29udGVudHMuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgpAQCAtMTAxLDcgKzEwMSw3
IEBAIFN0eWxlUmVzb2x2ZXImIFNjb3BlOjpyZXNvbHZlcigpCiAgICAgQVNTRVJUKCFtX3NoYWRv
d1Jvb3QgfHwgJm1fZG9jdW1lbnQgPT0gJm1fc2hhZG93Um9vdC0+ZG9jdW1lbnQoKSk7CiAgICAg
QVNTRVJUKCZtX3Jlc29sdmVyLT5kb2N1bWVudCgpID09ICZtX2RvY3VtZW50KTsKICAgICByZXR1
cm4gKm1fcmVzb2x2ZXI7Ci19CisgIH0KIAogU3R5bGVSZXNvbHZlciogU2NvcGU6OnJlc29sdmVy
SWZFeGlzdHMoKQogewpAQCAtMzk3LDE0ICszOTcsMTQgQEAgU2NvcGU6OlN0eWxlUmVzb2x2ZXJV
cGRhdGVUeXBlIFNjb3BlOjphbgogICAgIGlmICghbV9kb2N1bWVudC5ib2R5T3JGcmFtZXNldCgp
IHx8IG1fZG9jdW1lbnQuaGFzTm9kZXNXaXRoTm9uRmluYWxTdHlsZSgpIHx8IG1fZG9jdW1lbnQu
aGFzTm9kZXNXaXRoTWlzc2luZ1N0eWxlKCkpCiAgICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVy
VXBkYXRlVHlwZTsKIAotICAgIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMgaW52YWxpZGF0aW9u
QW5hbHlzaXMoYWRkZWRTaGVldHMsIHN0eWxlUmVzb2x2ZXIubWVkaWFRdWVyeUV2YWx1YXRvcigp
KTsKLSAgICBpZiAoaW52YWxpZGF0aW9uQW5hbHlzaXMuZGlydGllc0FsbFN0eWxlKCkpCisgICAg
SW52YWxpZGF0b3IgaW52YWxpZGF0b3IoYWRkZWRTaGVldHMsIHN0eWxlUmVzb2x2ZXIubWVkaWFR
dWVyeUV2YWx1YXRvcigpKTsKKyAgICBpZiAoaW52YWxpZGF0b3IuZGlydGllc0FsbFN0eWxlKCkp
CiAgICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVyVXBkYXRlVHlwZTsKIAogICAgIGlmIChtX3No
YWRvd1Jvb3QpCi0gICAgICAgIGludmFsaWRhdGlvbkFuYWx5c2lzLmludmFsaWRhdGVTdHlsZSgq
bV9zaGFkb3dSb290KTsKKyAgICAgICAgaW52YWxpZGF0b3IuaW52YWxpZGF0ZVN0eWxlKCptX3No
YWRvd1Jvb3QpOwogICAgIGVsc2UKLSAgICAgICAgaW52YWxpZGF0aW9uQW5hbHlzaXMuaW52YWxp
ZGF0ZVN0eWxlKG1fZG9jdW1lbnQpOworICAgICAgICBpbnZhbGlkYXRvci5pbnZhbGlkYXRlU3R5
bGUobV9kb2N1bWVudCk7CiAKICAgICByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYyA9IGZhbHNlOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308896</attachid>
            <date>2017-05-03 05:11:49 -0700</date>
            <delta_ts>2017-05-03 05:20:42 -0700</delta_ts>
            <desc>patch</desc>
            <filename>rename-style-invalidator-2.patch</filename>
            <type>text/plain</type>
            <size>38731</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjExNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE3LTA1LTAzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU3R5bGVJbnZhbGlk
YXRpb25BbmFseXNpcyB0byBTdHlsZTo6SW52YWxpZGF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTYwMQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsc28gbW92ZSBpdCB0byB0aGUgJ3N0eWxlJyBk
aXJlY3RvcnkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL1N0eWxlSW52YWxpZGF0
aW9uQW5hbHlzaXMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9TdHlsZUludmFsaWRhdGlv
bkFuYWx5c2lzLmg6IFJlbW92ZWQuCisgICAgICAgICogZG9tL0V4dGVuc2lvblN0eWxlU2hlZXRz
LmNwcDoKKyAgICAgICAgKiBzdHlsZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkF0dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlvbjo6aW52
YWxpZGF0ZURlc2NlbmRhbnRzKToKKyAgICAgICAgKiBzdHlsZS9DbGFzc0NoYW5nZUludmFsaWRh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Q2xhc3NDaGFuZ2VJbnZhbGlkYXRp
b246OmludmFsaWRhdGVEZXNjZW5kYW50U3R5bGUpOgorICAgICAgICAqIHN0eWxlL1N0eWxlSW52
YWxpZGF0b3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlk
YXRpb25BbmFseXNpcy5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6SW52YWxpZGF0b3I6
OkludmFsaWRhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpJbnZhbGlkYXRvcjo6aW52
YWxpZGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpJbnZhbGlkYXRvcjo6
aW52YWxpZGF0ZVN0eWxlRm9yVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6SW52YWxp
ZGF0b3I6OmludmFsaWRhdGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGREaXJ0eUFs
bFN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5h
bHlzaXM6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZUlmTmVlZGVkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFs
aWRhdGVTdHlsZUZvclRyZWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbnZh
bGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBz
dHlsZS9TdHlsZUludmFsaWRhdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmguCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUludmFs
aWRhdGlvbkFuYWx5c2lzOjpkaXJ0aWVzQWxsU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aGFzU2hhZG93UHNldWRvRWxlbWVudFJ1
bGVzSW5BdXRob3JTaGVldCk6IERlbGV0ZWQuCisgICAgICAgICogc3R5bGUvU3R5bGVTY29wZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6U2NvcGU6OnJlc29sdmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6YW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2UpOgorCiAyMDE3
LTA1LTAyICBBbmRyZXcgR29sZCAgPGFnb2xkQGFwcGxlLmNvbT4KIAogICAgICAgICBUeXBvIGlu
IEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIubW0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAyMTYwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTM5Myw3ICsxMzkzLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNF
UwogICAgIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwCiAgICAgY3NzL1NlbGVjdG9yRmlsdGVyLmNw
cAogICAgIGNzcy9TdHlsZUNvbG9yLmNwcAotICAgIGNzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5
c2lzLmNwcAogICAgIGNzcy9TdHlsZU1lZGlhLmNwcAogICAgIGNzcy9TdHlsZVByb3BlcnRpZXMu
Y3BwCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwCkBAIC0yNzM1LDYgKzI3MzQs
NyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXIuY3Bw
CiAgICAgc3R5bGUvU3R5bGVDaGFuZ2UuY3BwCiAgICAgc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0
aW9ucy5jcHAKKyAgICBzdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAogICAgIHN0eWxlL1N0eWxl
UGVuZGluZ1Jlc291cmNlcy5jcHAKICAgICBzdHlsZS9TdHlsZVJlbGF0aW9ucy5jcHAKICAgICBz
dHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxNjA3MykK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNjc0OSw4ICs2NzQ5LDggQEAKIAkJRTQ2QTJCMUMxN0NBNjVCOTAwMERC
Q0Q4IC8qIFR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2QTJCMUIxN0NBNjVCOTAwMERCQ0Q4IC8q
IFR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0NkEyQjFFMTdDQTc2QjEwMDBEQkNEOCAvKiBF
bGVtZW50Q2hpbGRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ2QTJCMUQxN0NBNzZCMTAwMERCQ0Q4IC8qIEVsZW1lbnRDaGlsZEl0ZXJh
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RTQ2QjQxRjkxQ0IyNEU3MDAwOEYxMURFIC8qIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2QjQxRjgxQ0Iy
NEU3MDAwOEYxMURFIC8qIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUU0NzEyN0NBMTYzNDM4QTEwMEVE
NkY1QSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0E5N0NFMTYzMDU5RkMwMDVEQ0Q5OSAvKiBT
dHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCAqLzsgfTsKLQkJRTQ3MTI3Q0IxNjM0MzhBRTAw
RUQ2RjVBIC8qIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0E5N0NGMTYzMDU5RkMwMDVEQ0Q5OSAvKiBT
dHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmggKi87IH07CisJCUU0NzEyN0NBMTYzNDM4QTEwMEVE
NkY1QSAvKiBTdHlsZUludmFsaWRhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0E5N0NFMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFs
aWRhdG9yLmNwcCAqLzsgfTsKKwkJRTQ3MTI3Q0IxNjM0MzhBRTAwRUQ2RjVBIC8qIFN0eWxlSW52
YWxpZGF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0N0E5N0NGMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdG9yLmggKi87IH07CiAJ
CUU0Nzc4QjdGMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0Nzc4QjdEMTE1QTU4MUEwMEI1
RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmNwcCAqLzsgfTsKIAkJRTQ3NzhCODAxMTVBNTgxQTAwQjVE
MzcyIC8qIEpTQ3VzdG9tRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0Nzc4QjdFMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50Lmgg
Ki87IH07CiAJCUU0N0EzQUMzMUM1RUFCQkUwMENDQkZBNyAvKiBTdHlsZVNoYXJpbmdSZXNvbHZl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdB
M0FDMjFDNUVBQkJFMDBDQ0JGQTcgLyogU3R5bGVTaGFyaW5nUmVzb2x2ZXIuY3BwICovOyB9OwpA
QCAtMTUyOTMsOCArMTUyOTMsOCBAQAogCQlFNDc3OEI3RTExNUE1ODFBMDBCNUQzNzIgLyogSlND
dXN0b21FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUV2
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0EzQUMyMUM1RUFCQkUwMEND
QkZBNyAvKiBTdHlsZVNoYXJpbmdSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdHlsZVNoYXJpbmdSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0N0EzQUM0MUM1RUFDNzkwMENDQkZBNyAvKiBTdHlsZVNoYXJpbmdSZXNv
bHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVNoYXJpbmdSZXNv
bHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDdBOTdDRTE2MzA1OUZDMDA1
RENEOTkgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTQ3QTk3Q0YxNjMwNTlGQzAwNURDRDk5IC8qIFN0eWxl
SW52YWxpZGF0aW9uQW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFNDdBOTdDRTE2MzA1OUZDMDA1RENEOTkgLyogU3R5bGVJbnZhbGlkYXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUludmFsaWRhdG9yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3QTk3Q0YxNjMwNTlGQzAwNURDRDk5IC8qIFN0
eWxlSW52YWxpZGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVJ
bnZhbGlkYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdCNEJFNjBFNzEy
NDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQ3QjRCRTcwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFu
ZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFJlc291
cmNlSGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3RTI3NjQxNjAz
NkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvblN0eWxlU2hlZXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNDc0OSw2ICsyNDc0OSw4IEBACiAJCQkJRTQwMUUwQTMxQzNDMEI4MzAw
RjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmggKi8sCiAJCQkJRTRENThFQjYxN0I0RUQ4OTAwQ0JEQ0E4
IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwICovLAogCQkJCUU0RDU4RUI3MTdCNEVEODkw
MENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmggKi8sCisJCQkJRTQ3QTk3Q0UxNjMw
NTlGQzAwNURDRDk5IC8qIFN0eWxlSW52YWxpZGF0b3IuY3BwICovLAorCQkJCUU0N0E5N0NGMTYz
MDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdG9yLmggKi8sCiAJCQkJRTREQUNFNkIxRDEy
RTExNjAwNzU5ODBGIC8qIFN0eWxlUGVuZGluZ1Jlc291cmNlcy5jcHAgKi8sCiAJCQkJRTREQUNF
NjkxRDEyRTEwQjAwNzU5ODBGIC8qIFN0eWxlUGVuZGluZ1Jlc291cmNlcy5oICovLAogCQkJCUU0
NjE4MDJFMUM4REQ0RDIwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5jcHAgKi8sCkBAIC0yNTA1
OCw4ICsyNTA2MCw2IEBACiAJCQkJODM1RDM2MzYxOUZGNjE5MzAwNEM5M0FCIC8qIFN0eWxlQnVp
bGRlckN1c3RvbS5oICovLAogCQkJCTk0MTgyNzg4MUQ4QjI0MjIwMDQ5Mjc2NCAvKiBTdHlsZUNv
bG9yLmNwcCAqLywKIAkJCQk5NDE4Mjc4OTFEOEIyNDIyMDA0OTI3NjQgLyogU3R5bGVDb2xvci5o
ICovLAotCQkJCUU0N0E5N0NFMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdGlvbkFu
YWx5c2lzLmNwcCAqLywKLQkJCQlFNDdBOTdDRjE2MzA1OUZDMDA1RENEOTkgLyogU3R5bGVJbnZh
bGlkYXRpb25BbmFseXNpcy5oICovLAogCQkJCTBGRjUwMjZFMTAyQkE5NjYwMDY2RjM5QSAvKiBT
dHlsZU1lZGlhLmNwcCAqLywKIAkJCQkwRkY1MDI2RjEwMkJBOTZBMDA2NkYzOUEgLyogU3R5bGVN
ZWRpYS5oICovLAogCQkJCTBGRjUwMjcwMTAyQkE5NkEwMDY2RjM5QSAvKiBTdHlsZU1lZGlhLmlk
bCAqLywKQEAgLTI5MzQ1LDcgKzI5MzQ1LDcgQEAKIAkJCQlBMTEwREI5QjE0RjVERjc3MDBBMDNC
OTMgLyogU3R5bGVHcmlkSXRlbURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUY0M0NGMEU2
NzNEQTEwMDFDMTI4NyAvKiBTdHlsZUltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzIyNzMw
NDBFODJGMUU2MDBFN0Y5NzUgLyogU3R5bGVJbmhlcml0ZWREYXRhLmggaW4gSGVhZGVycyAqLywK
LQkJCQlFNDcxMjdDQjE2MzQzOEFFMDBFRDZGNUEgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ3MTI3Q0IxNjM0MzhBRTAwRUQ2RjVBIC8qIFN0eWxl
SW52YWxpZGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNzJBMEU4MURFODEwMEIyNTk2
NSAvKiBTdHlsZU1hcnF1ZWVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY1MDI3MjEwMkJB
OTZBMDA2NkYzOUEgLyogU3R5bGVNZWRpYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI3NEUw
RTgxRTA2NzAwQjI1OTY1IC8qIFN0eWxlTXVsdGlDb2xEYXRhLmggaW4gSGVhZGVycyAqLywKQEAg
LTMzMTYzLDcgKzMzMTYzLDcgQEAKIAkJCQlBMTBEQzc2QTE0NzQ3QkFCMDA1RTI0NzEgLyogU3R5
bGVHcmlkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTEwREI5RDE0RjVERjg3MDBBMDNC
OTMgLyogU3R5bGVHcmlkSXRlbURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyMjczMDMw
RTgyRjFFNjAwRTdGOTc1IC8qIFN0eWxlSW5oZXJpdGVkRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlFNDcxMjdDQTE2MzQzOEExMDBFRDZGNUEgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDcxMjdDQTE2MzQzOEExMDBFRDZGNUEgLyogU3R5
bGVJbnZhbGlkYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzVFQjcyOTBFODFERTgxMDBC
MjU5NjUgLyogU3R5bGVNYXJxdWVlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY1MDI3
MTEwMkJBOTZBMDA2NkYzOUEgLyogU3R5bGVNZWRpYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzVFQjc0RDBFODFFMDY3MDBCMjU5NjUgLyogU3R5bGVNdWx0aUNvbERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9u
QW5hbHlzaXMuY3BwCShyZXZpc2lvbiAyMTYwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgi
Ci0KLSNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgotI2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVj
dG9yLmgiCi0jaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2VsZWN0b3JG
aWx0ZXIuaCIKLSNpbmNsdWRlICJTaGFkb3dSb290LmgiCi0jaW5jbHVkZSAiU3R5bGVSdWxlSW1w
b3J0LmgiCi0jaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIGJvb2wgc2hvdWxkRGlydHlBbGxTdHlsZShjb25zdCBWZWN0b3I8UmVm
UHRyPFN0eWxlUnVsZUJhc2U+PiYgcnVsZXMpCi17Ci0gICAgZm9yIChhdXRvJiBydWxlIDogcnVs
ZXMpIHsKLSAgICAgICAgaWYgKGlzPFN0eWxlUnVsZU1lZGlhPigqcnVsZSkpIHsKLSAgICAgICAg
ICAgIGNvbnN0IGF1dG8qIGNoaWxkUnVsZXMgPSBkb3duY2FzdDxTdHlsZVJ1bGVNZWRpYT4oKnJ1
bGUpLmNoaWxkUnVsZXNXaXRob3V0RGVmZXJyZWRQYXJzaW5nKCk7Ci0gICAgICAgICAgICBpZiAo
Y2hpbGRSdWxlcyAmJiBzaG91bGREaXJ0eUFsbFN0eWxlKCpjaGlsZFJ1bGVzKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIEZJWE1FOiBBdCBsZWFzdCBmb250IGZhY2VzIGRvbid0IG5lZWQgZnVsbCByZWNh
bGMgaW4gYWxsIGNhc2VzLgotICAgICAgICBpZiAoIWlzPFN0eWxlUnVsZT4oKnJ1bGUpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3Rh
dGljIGJvb2wgc2hvdWxkRGlydHlBbGxTdHlsZShjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNo
ZWV0KQotewotICAgIGZvciAoYXV0byYgaW1wb3J0IDogc2hlZXQuaW1wb3J0UnVsZXMoKSkgewot
ICAgICAgICBpZiAoIWltcG9ydC0+c3R5bGVTaGVldCgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGlmIChzaG91bGREaXJ0eUFsbFN0eWxlKCppbXBvcnQtPnN0eWxlU2hlZXQoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHNob3VsZERpcnR5QWxs
U3R5bGUoc2hlZXQuY2hpbGRSdWxlcygpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGREaXJ0eUFsbFN0eWxlKGNvbnN0IFZl
Y3RvcjxTdHlsZVNoZWV0Q29udGVudHMqPiYgc2hlZXRzKQotewotICAgIGZvciAoYXV0byYgc2hl
ZXQgOiBzaGVldHMpIHsKLSAgICAgICAgaWYgKHNob3VsZERpcnR5QWxsU3R5bGUoKnNoZWV0KSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LVN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMoY29u
c3QgVmVjdG9yPFN0eWxlU2hlZXRDb250ZW50cyo+JiBzaGVldHMsIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImIG1lZGlhUXVlcnlFdmFsdWF0b3IpCi0gICAgOiBtX293bmVkUnVsZVNldChzdGQ6
Om1ha2VfdW5pcXVlPFJ1bGVTZXQ+KCkpCi0gICAgLCBtX3J1bGVTZXQoKm1fb3duZWRSdWxlU2V0
KQotICAgICwgbV9kaXJ0aWVzQWxsU3R5bGUoc2hvdWxkRGlydHlBbGxTdHlsZShzaGVldHMpKQot
ewotICAgIGlmIChtX2RpcnRpZXNBbGxTdHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9v
d25lZFJ1bGVTZXQtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKLSAgICBmb3IgKGF1dG8mIHNo
ZWV0IDogc2hlZXRzKQotICAgICAgICBtX293bmVkUnVsZVNldC0+YWRkUnVsZXNGcm9tU2hlZXQo
KnNoZWV0LCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKLQotICAgIG1faGFzU2hhZG93UHNldWRvRWxl
bWVudFJ1bGVzSW5BdXRob3JTaGVldCA9IG1fcnVsZVNldC5oYXNTaGFkb3dQc2V1ZG9FbGVtZW50
UnVsZXMoKTsKLX0KLQotU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6U3R5bGVJbnZhbGlkYXRp
b25BbmFseXNpcyhjb25zdCBSdWxlU2V0JiBydWxlU2V0KQotICAgIDogbV9ydWxlU2V0KHJ1bGVT
ZXQpCi0gICAgLCBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQocnVs
ZVNldC5oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoKSkKLXsKLX0KLQotU3R5bGVJbnZhbGlk
YXRpb25BbmFseXNpczo6Q2hlY2tEZXNjZW5kYW50cyBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lz
OjppbnZhbGlkYXRlSWZOZWVkZWQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU2VsZWN0b3JGaWx0
ZXIqIGZpbHRlcikKLXsKLSAgICBpZiAobV9oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXNJbkF1
dGhvclNoZWV0KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGRvIGFjdHVhbCBydWxl
IG1hdGNoaW5nIHRvby4KLSAgICAgICAgaWYgKGVsZW1lbnQuc2hhZG93Um9vdCgpKQotICAgICAg
ICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7Ci0gICAgfQotCi0gICAg
Ym9vbCBzaG91bGRDaGVja0ZvclNsb3RzID0gIW1fcnVsZVNldC5zbG90dGVkUHNldWRvRWxlbWVu
dFJ1bGVzKCkuaXNFbXB0eSgpICYmICFtX2RpZEludmFsaWRhdGVIb3N0Q2hpbGRyZW47Ci0gICAg
aWYgKHNob3VsZENoZWNrRm9yU2xvdHMgJiYgaXM8SFRNTFNsb3RFbGVtZW50PihlbGVtZW50KSkg
ewotICAgICAgICBhdXRvKiBjb250YWluaW5nU2hhZG93Um9vdCA9IGVsZW1lbnQuY29udGFpbmlu
Z1NoYWRvd1Jvb3QoKTsKLSAgICAgICAgaWYgKGNvbnRhaW5pbmdTaGFkb3dSb290ICYmIGNvbnRh
aW5pbmdTaGFkb3dSb290LT5ob3N0KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcG9zc2li
bHlTbG90dGVkIDogY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4oKmNvbnRhaW5pbmdTaGFkb3dSb290
LT5ob3N0KCkpKQotICAgICAgICAgICAgICAgIHBvc3NpYmx5U2xvdHRlZC5pbnZhbGlkYXRlU3R5
bGUoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBObyBuZWVkIHRvIGRvIHRoaXMgYWdhaW4uCi0g
ICAgICAgIG1fZGlkSW52YWxpZGF0ZUhvc3RDaGlsZHJlbiA9IHRydWU7Ci0gICAgfQotCi0gICAg
c3dpdGNoIChlbGVtZW50LnN0eWxlVmFsaWRpdHkoKSkgewotICAgIGNhc2UgU3R5bGU6OlZhbGlk
aXR5OjpWYWxpZDogewotICAgICAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBydWxlQ29sbGVjdG9y
KGVsZW1lbnQsIG1fcnVsZVNldCwgZmlsdGVyKTsKLSAgICAgICAgcnVsZUNvbGxlY3Rvci5zZXRN
b2RlKFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6Q29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFs
UHNldWRvRWxlbWVudHMpOwotICAgICAgICBydWxlQ29sbGVjdG9yLm1hdGNoQXV0aG9yUnVsZXMo
ZmFsc2UpOwotCi0gICAgICAgIGlmIChydWxlQ29sbGVjdG9yLmhhc01hdGNoZWRSdWxlcygpKQot
ICAgICAgICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuIENo
ZWNrRGVzY2VuZGFudHM6OlllczsKLSAgICB9Ci0gICAgY2FzZSBTdHlsZTo6VmFsaWRpdHk6OkVs
ZW1lbnRJbnZhbGlkOgotICAgICAgICByZXR1cm4gQ2hlY2tEZXNjZW5kYW50czo6WWVzOwotICAg
IGNhc2UgU3R5bGU6OlZhbGlkaXR5OjpTdWJ0cmVlSW52YWxpZDoKLSAgICBjYXNlIFN0eWxlOjpW
YWxpZGl0eTo6U3VidHJlZUFuZFJlbmRlcmVyc0ludmFsaWQ6Ci0gICAgICAgIGlmIChzaG91bGRD
aGVja0ZvclNsb3RzKQotICAgICAgICAgICAgcmV0dXJuIENoZWNrRGVzY2VuZGFudHM6OlllczsK
LSAgICAgICAgcmV0dXJuIENoZWNrRGVzY2VuZGFudHM6Ok5vOwotICAgIH0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gQ2hlY2tEZXNjZW5kYW50czo6WWVzOwotfQotCi12
b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZUZvclRyZWUoRWxl
bWVudCYgcm9vdCwgU2VsZWN0b3JGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBpZiAoaW52YWxpZGF0
ZUlmTmVlZGVkKHJvb3QsIGZpbHRlcikgPT0gQ2hlY2tEZXNjZW5kYW50czo6Tm8pCi0gICAgICAg
IHJldHVybjsKLQotICAgIFZlY3RvcjxFbGVtZW50KiwgMjA+IHBhcmVudFN0YWNrOwotICAgIEVs
ZW1lbnQqIHByZXZpb3VzRWxlbWVudCA9ICZyb290OwotICAgIGF1dG8gZGVzY2VuZGFudHMgPSBk
ZXNjZW5kYW50c09mVHlwZTxFbGVtZW50Pihyb290KTsKLSAgICBmb3IgKGF1dG8gaXQgPSBkZXNj
ZW5kYW50cy5iZWdpbigpLCBlbmQgPSBkZXNjZW5kYW50cy5lbmQoKTsgaXQgIT0gZW5kOykgewot
ICAgICAgICBhdXRvJiBkZXNjZW5kYW50ID0gKml0OwotICAgICAgICBhdXRvKiBwYXJlbnQgPSBk
ZXNjZW5kYW50LnBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKHBhcmVudFN0YWNrLmlzRW1w
dHkoKSB8fCBwYXJlbnRTdGFjay5sYXN0KCkgIT0gcGFyZW50KSB7Ci0gICAgICAgICAgICBpZiAo
cGFyZW50ID09IHByZXZpb3VzRWxlbWVudCkgewotICAgICAgICAgICAgICAgIHBhcmVudFN0YWNr
LmFwcGVuZChwYXJlbnQpOwotICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIpCi0gICAgICAgICAg
ICAgICAgICAgIGZpbHRlci0+cHVzaFBhcmVudChwYXJlbnQpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50U3RhY2subGFzdCgpICE9IHBhcmVudCkg
ewotICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChmaWx0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIt
PnBvcFBhcmVudCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBwcmV2aW91c0VsZW1lbnQgPSAmZGVzY2VuZGFudDsKLQotICAgICAgICBpZiAo
aW52YWxpZGF0ZUlmTmVlZGVkKGRlc2NlbmRhbnQsIGZpbHRlcikgPT0gQ2hlY2tEZXNjZW5kYW50
czo6WWVzKQotICAgICAgICAgICAgaXQudHJhdmVyc2VOZXh0KCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGl0LnRyYXZlcnNlTmV4dFNraXBwaW5nQ2hpbGRyZW4oKTsKLSAgICB9Ci19Ci0K
LXZvaWQgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZVN0eWxlKERvY3VtZW50
JiBkb2N1bWVudCkKLXsKLSAgICBBU1NFUlQoIW1fZGlydGllc0FsbFN0eWxlKTsKLQotICAgIEVs
ZW1lbnQqIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOwotICAg
IGlmICghZG9jdW1lbnRFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTZWxlY3RvckZp
bHRlciBmaWx0ZXI7Ci0gICAgaW52YWxpZGF0ZVN0eWxlRm9yVHJlZSgqZG9jdW1lbnRFbGVtZW50
LCAmZmlsdGVyKTsKLX0KLQotdm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjppbnZhbGlk
YXRlU3R5bGUoU2hhZG93Um9vdCYgc2hhZG93Um9vdCkKLXsKLSAgICBBU1NFUlQoIW1fZGlydGll
c0FsbFN0eWxlKTsKLQotICAgIGlmICghbV9ydWxlU2V0Lmhvc3RQc2V1ZG9DbGFzc1J1bGVzKCku
aXNFbXB0eSgpICYmIHNoYWRvd1Jvb3QuaG9zdCgpKQotICAgICAgICBzaGFkb3dSb290Lmhvc3Qo
KS0+aW52YWxpZGF0ZVN0eWxlKCk7Ci0KLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5P
ZlR5cGU8RWxlbWVudD4oc2hhZG93Um9vdCkpIHsKLSAgICAgICAgU2VsZWN0b3JGaWx0ZXIgZmls
dGVyOwotICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JUcmVlKGNoaWxkLCAmZmlsdGVyKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZVN0eWxl
KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgQVNTRVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7Ci0K
LSAgICAvLyBEb24ndCB1c2UgU2VsZWN0b3JGaWx0ZXIgYXMgdGhlIHJ1bGUgc2V0cyBoZXJlIHRl
bmQgdG8gYmUgc21hbGwgYW5kIHRoZSBmaWx0ZXIgd291bGQgaGF2ZSBzZXR1cCBjb3N0IGRlZXAg
aW4gdGhlIHRyZWUuCi0gICAgaW52YWxpZGF0ZVN0eWxlRm9yVHJlZShlbGVtZW50LCBudWxscHRy
KTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5h
bHlzaXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRp
b25BbmFseXNpcy5oCShyZXZpc2lvbiAyMTYwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oCShub25leGlzdGVudCkKQEAgLTEsNjMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERvY3VtZW50OwotY2xhc3MgRWxlbWVudDsKLWNsYXNz
IE1lZGlhUXVlcnlFdmFsdWF0b3I7Ci1jbGFzcyBSdWxlU2V0OwotY2xhc3MgU2VsZWN0b3JGaWx0
ZXI7Ci1jbGFzcyBTaGFkb3dSb290OwotY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwotCi1jbGFz
cyBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzIHsKLXB1YmxpYzoKLSAgICBTdHlsZUludmFsaWRh
dGlvbkFuYWx5c2lzKGNvbnN0IFZlY3RvcjxTdHlsZVNoZWV0Q29udGVudHMqPiYsIGNvbnN0IE1l
ZGlhUXVlcnlFdmFsdWF0b3ImKTsKLSAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzKGNvbnN0
IFJ1bGVTZXQmKTsKLQotICAgIGJvb2wgZGlydGllc0FsbFN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9kaXJ0aWVzQWxsU3R5bGU7IH0KLSAgICBib29sIGhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxl
c0luQXV0aG9yU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRS
dWxlc0luQXV0aG9yU2hlZXQ7IH0KLSAgICB2b2lkIGludmFsaWRhdGVTdHlsZShEb2N1bWVudCYp
OwotICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlKFNoYWRvd1Jvb3QmKTsKLSAgICB2b2lkIGludmFs
aWRhdGVTdHlsZShFbGVtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgZW51bSBjbGFzcyBDaGVja0Rl
c2NlbmRhbnRzIHsgWWVzLCBObyB9OwotICAgIENoZWNrRGVzY2VuZGFudHMgaW52YWxpZGF0ZUlm
TmVlZGVkKEVsZW1lbnQmLCBjb25zdCBTZWxlY3RvckZpbHRlciopOwotICAgIHZvaWQgaW52YWxp
ZGF0ZVN0eWxlRm9yVHJlZShFbGVtZW50JiwgU2VsZWN0b3JGaWx0ZXIqKTsKLQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxSdWxlU2V0PiBtX293bmVkUnVsZVNldDsKLSAgICBjb25zdCBSdWxlU2V0JiBt
X3J1bGVTZXQ7Ci0gICAgYm9vbCBtX2RpcnRpZXNBbGxTdHlsZSB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9kaWRJbnZhbGlkYXRlSG9zdENoaWxkcmVuIHsgZmFsc2UgfTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25T
dHlsZVNoZWV0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V4dGVuc2lv
blN0eWxlU2hlZXRzLmNwcAkocmV2aXNpb24gMjE2MDczKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0V4dGVuc2lvblN0eWxlU2hlZXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBA
QAogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIlNWR1N0eWxl
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3R5bGVJbnZhbGlk
YXRpb25BbmFseXNpcy5oIgorI2luY2x1ZGUgIlN0eWxlSW52YWxpZGF0b3IuaCIKICNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlN0
eWxlU2hlZXRDb250ZW50cy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvQXR0cmlidXRl
Q2hhbmdlSW52YWxpZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCShyZXZpc2lvbiAyMTYwNzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRSdWxlU2V0cy5o
IgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIK
LSNpbmNsdWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgiCisjaW5jbHVkZSAiU3R5bGVJ
bnZhbGlkYXRvci5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHls
ZVNjb3BlLmgiCiAKQEAgLTExNiw4ICsxMTYsOCBAQCB2b2lkIEF0dHJpYnV0ZUNoYW5nZUludmFs
aWRhdGlvbjo6aW52YWxpCiB7CiAgICAgaWYgKCFtX2Rlc2NlbmRhbnRJbnZhbGlkYXRpb25SdWxl
U2V0KQogICAgICAgICByZXR1cm47Ci0gICAgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcyBpbnZh
bGlkYXRpb25BbmFseXNpcygqbV9kZXNjZW5kYW50SW52YWxpZGF0aW9uUnVsZVNldCk7Ci0gICAg
aW52YWxpZGF0aW9uQW5hbHlzaXMuaW52YWxpZGF0ZVN0eWxlKG1fZWxlbWVudCk7CisgICAgSW52
YWxpZGF0b3IgaW52YWxpZGF0b3IoKm1fZGVzY2VuZGFudEludmFsaWRhdGlvblJ1bGVTZXQpOwor
ICAgIGludmFsaWRhdG9yLmludmFsaWRhdGVTdHlsZShtX2VsZW1lbnQpOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3Bw
CShyZXZpc2lvbiAyMTYwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUlu
dmFsaWRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRl
ICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNs
dWRlICJTcGFjZVNwbGl0U3RyaW5nLmgiCi0jaW5jbHVkZSAiU3R5bGVJbnZhbGlkYXRpb25BbmFs
eXNpcy5oIgorI2luY2x1ZGUgIlN0eWxlSW52YWxpZGF0b3IuaCIKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0
b3IuaD4KQEAgLTE0OSw4ICsxNDksOCBAQCB2b2lkIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjpp
bnZhbGlkYXRlCiB2b2lkIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZhbGlkYXRlRGVzY2Vu
ZGFudFN0eWxlKCkKIHsKICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yQ2xhc3NSdWxlcyA6IG1fZGVz
Y2VuZGFudEludmFsaWRhdGlvblJ1bGVTZXRzKSB7Ci0gICAgICAgIFN0eWxlSW52YWxpZGF0aW9u
QW5hbHlzaXMgaW52YWxpZGF0aW9uQW5hbHlzaXMoKmFuY2VzdG9yQ2xhc3NSdWxlcyk7Ci0gICAg
ICAgIGludmFsaWRhdGlvbkFuYWx5c2lzLmludmFsaWRhdGVTdHlsZShtX2VsZW1lbnQpOworICAg
ICAgICBJbnZhbGlkYXRvciBpbnZhbGlkYXRvcigqYW5jZXN0b3JDbGFzc1J1bGVzKTsKKyAgICAg
ICAgaW52YWxpZGF0b3IuaW52YWxpZGF0ZVN0eWxlKG1fZWxlbWVudCk7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAkocmV2aXNpb24g
MjE2MDczKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cy5jcHA6MjE2MDczKQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oIgorCisjaW5jbHVkZSAiQ1NTU2VsZWN0
b3JMaXN0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50SXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgorI2luY2x1ZGUgIkhUTUxT
bG90RWxlbWVudC5oIgorI2luY2x1ZGUgIlNlbGVjdG9yRmlsdGVyLmgiCisjaW5jbHVkZSAiU2hh
ZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0eWxlUnVsZUltcG9ydC5oIgorI2luY2x1ZGUgIlN0eWxl
U2hlZXRDb250ZW50cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBib29sIHNo
b3VsZERpcnR5QWxsU3R5bGUoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIHJ1
bGVzKQoreworICAgIGZvciAoYXV0byYgcnVsZSA6IHJ1bGVzKSB7CisgICAgICAgIGlmIChpczxT
dHlsZVJ1bGVNZWRpYT4oKnJ1bGUpKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvKiBjaGlsZFJ1
bGVzID0gZG93bmNhc3Q8U3R5bGVSdWxlTWVkaWE+KCpydWxlKS5jaGlsZFJ1bGVzV2l0aG91dERl
ZmVycmVkUGFyc2luZygpOworICAgICAgICAgICAgaWYgKGNoaWxkUnVsZXMgJiYgc2hvdWxkRGly
dHlBbGxTdHlsZSgqY2hpbGRSdWxlcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogQXQgbGVh
c3QgZm9udCBmYWNlcyBkb24ndCBuZWVkIGZ1bGwgcmVjYWxjIGluIGFsbCBjYXNlcy4KKyAgICAg
ICAgaWYgKCFpczxTdHlsZVJ1bGU+KCpydWxlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZERpcnR5QWxs
U3R5bGUoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCkKK3sKKyAgICBmb3IgKGF1dG8m
IGltcG9ydCA6IHNoZWV0LmltcG9ydFJ1bGVzKCkpIHsKKyAgICAgICAgaWYgKCFpbXBvcnQtPnN0
eWxlU2hlZXQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoc2hvdWxkRGly
dHlBbGxTdHlsZSgqaW1wb3J0LT5zdHlsZVNoZWV0KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIGlmIChzaG91bGREaXJ0eUFsbFN0eWxlKHNoZWV0LmNoaWxkUnVsZXMo
KSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGlj
IGJvb2wgc2hvdWxkRGlydHlBbGxTdHlsZShjb25zdCBWZWN0b3I8U3R5bGVTaGVldENvbnRlbnRz
Kj4mIHNoZWV0cykKK3sKKyAgICBmb3IgKGF1dG8mIHNoZWV0IDogc2hlZXRzKSB7CisgICAgICAg
IGlmIChzaG91bGREaXJ0eUFsbFN0eWxlKCpzaGVldCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHlsZUludmFsaWRhdGlvbkFuYWx5
c2lzOjpTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzKGNvbnN0IFZlY3RvcjxTdHlsZVNoZWV0Q29u
dGVudHMqPiYgc2hlZXRzLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpYVF1ZXJ5RXZh
bHVhdG9yKQorICAgIDogbV9vd25lZFJ1bGVTZXQoc3RkOjptYWtlX3VuaXF1ZTxSdWxlU2V0Pigp
KQorICAgICwgbV9ydWxlU2V0KCptX293bmVkUnVsZVNldCkKKyAgICAsIG1fZGlydGllc0FsbFN0
eWxlKHNob3VsZERpcnR5QWxsU3R5bGUoc2hlZXRzKSkKK3sKKyAgICBpZiAobV9kaXJ0aWVzQWxs
U3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fb3duZWRSdWxlU2V0LT5kaXNhYmxlQXV0
b1Nocmlua1RvRml0KCk7CisgICAgZm9yIChhdXRvJiBzaGVldCA6IHNoZWV0cykKKyAgICAgICAg
bV9vd25lZFJ1bGVTZXQtPmFkZFJ1bGVzRnJvbVNoZWV0KCpzaGVldCwgbWVkaWFRdWVyeUV2YWx1
YXRvcik7CisKKyAgICBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQg
PSBtX3J1bGVTZXQuaGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKCk7Cit9CisKK1N0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXM6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMoY29uc3QgUnVsZVNl
dCYgcnVsZVNldCkKKyAgICA6IG1fcnVsZVNldChydWxlU2V0KQorICAgICwgbV9oYXNTaGFkb3dQ
c2V1ZG9FbGVtZW50UnVsZXNJbkF1dGhvclNoZWV0KHJ1bGVTZXQuaGFzU2hhZG93UHNldWRvRWxl
bWVudFJ1bGVzKCkpCit7Cit9CisKK1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OkNoZWNrRGVz
Y2VuZGFudHMgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZUlmTmVlZGVkKEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgaWYg
KG1faGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzSW5BdXRob3JTaGVldCkgeworICAgICAgICAv
LyBGSVhNRTogVGhpcyBjb3VsZCBkbyBhY3R1YWwgcnVsZSBtYXRjaGluZyB0b28uCisgICAgICAg
IGlmIChlbGVtZW50LnNoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0
ZVN0eWxlRm9yU3VidHJlZSgpOworICAgIH0KKworICAgIGJvb2wgc2hvdWxkQ2hlY2tGb3JTbG90
cyA9ICFtX3J1bGVTZXQuc2xvdHRlZFBzZXVkb0VsZW1lbnRSdWxlcygpLmlzRW1wdHkoKSAmJiAh
bV9kaWRJbnZhbGlkYXRlSG9zdENoaWxkcmVuOworICAgIGlmIChzaG91bGRDaGVja0ZvclNsb3Rz
ICYmIGlzPEhUTUxTbG90RWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAgYXV0byogY29udGFp
bmluZ1NoYWRvd1Jvb3QgPSBlbGVtZW50LmNvbnRhaW5pbmdTaGFkb3dSb290KCk7CisgICAgICAg
IGlmIChjb250YWluaW5nU2hhZG93Um9vdCAmJiBjb250YWluaW5nU2hhZG93Um9vdC0+aG9zdCgp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHBvc3NpYmx5U2xvdHRlZCA6IGNoaWxkcmVuT2ZU
eXBlPEVsZW1lbnQ+KCpjb250YWluaW5nU2hhZG93Um9vdC0+aG9zdCgpKSkKKyAgICAgICAgICAg
ICAgICBwb3NzaWJseVNsb3R0ZWQuaW52YWxpZGF0ZVN0eWxlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gTm8gbmVlZCB0byBkbyB0aGlzIGFnYWluLgorICAgICAgICBtX2RpZEludmFsaWRhdGVI
b3N0Q2hpbGRyZW4gPSB0cnVlOworICAgIH0KKworICAgIHN3aXRjaCAoZWxlbWVudC5zdHlsZVZh
bGlkaXR5KCkpIHsKKyAgICBjYXNlIFN0eWxlOjpWYWxpZGl0eTo6VmFsaWQ6IHsKKyAgICAgICAg
RWxlbWVudFJ1bGVDb2xsZWN0b3IgcnVsZUNvbGxlY3RvcihlbGVtZW50LCBtX3J1bGVTZXQsIGZp
bHRlcik7CisgICAgICAgIHJ1bGVDb2xsZWN0b3Iuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6Ok1v
ZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzKTsKKyAgICAg
ICAgcnVsZUNvbGxlY3Rvci5tYXRjaEF1dGhvclJ1bGVzKGZhbHNlKTsKKworICAgICAgICBpZiAo
cnVsZUNvbGxlY3Rvci5oYXNNYXRjaGVkUnVsZXMoKSkKKyAgICAgICAgICAgIGVsZW1lbnQuaW52
YWxpZGF0ZVN0eWxlKCk7CisgICAgICAgIHJldHVybiBDaGVja0Rlc2NlbmRhbnRzOjpZZXM7Cisg
ICAgfQorICAgIGNhc2UgU3R5bGU6OlZhbGlkaXR5OjpFbGVtZW50SW52YWxpZDoKKyAgICAgICAg
cmV0dXJuIENoZWNrRGVzY2VuZGFudHM6OlllczsKKyAgICBjYXNlIFN0eWxlOjpWYWxpZGl0eTo6
U3VidHJlZUludmFsaWQ6CisgICAgY2FzZSBTdHlsZTo6VmFsaWRpdHk6OlN1YnRyZWVBbmRSZW5k
ZXJlcnNJbnZhbGlkOgorICAgICAgICBpZiAoc2hvdWxkQ2hlY2tGb3JTbG90cykKKyAgICAgICAg
ICAgIHJldHVybiBDaGVja0Rlc2NlbmRhbnRzOjpZZXM7CisgICAgICAgIHJldHVybiBDaGVja0Rl
c2NlbmRhbnRzOjpObzsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIENoZWNrRGVzY2VuZGFudHM6OlllczsKK30KKwordm9pZCBTdHlsZUludmFsaWRhdGlvbkFu
YWx5c2lzOjppbnZhbGlkYXRlU3R5bGVGb3JUcmVlKEVsZW1lbnQmIHJvb3QsIFNlbGVjdG9yRmls
dGVyKiBmaWx0ZXIpCit7CisgICAgaWYgKGludmFsaWRhdGVJZk5lZWRlZChyb290LCBmaWx0ZXIp
ID09IENoZWNrRGVzY2VuZGFudHM6Ok5vKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8
RWxlbWVudCosIDIwPiBwYXJlbnRTdGFjazsKKyAgICBFbGVtZW50KiBwcmV2aW91c0VsZW1lbnQg
PSAmcm9vdDsKKyAgICBhdXRvIGRlc2NlbmRhbnRzID0gZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVu
dD4ocm9vdCk7CisgICAgZm9yIChhdXRvIGl0ID0gZGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0g
ZGVzY2VuZGFudHMuZW5kKCk7IGl0ICE9IGVuZDspIHsKKyAgICAgICAgYXV0byYgZGVzY2VuZGFu
dCA9ICppdDsKKyAgICAgICAgYXV0byogcGFyZW50ID0gZGVzY2VuZGFudC5wYXJlbnRFbGVtZW50
KCk7CisgICAgICAgIGlmIChwYXJlbnRTdGFjay5pc0VtcHR5KCkgfHwgcGFyZW50U3RhY2subGFz
dCgpICE9IHBhcmVudCkgeworICAgICAgICAgICAgaWYgKHBhcmVudCA9PSBwcmV2aW91c0VsZW1l
bnQpIHsKKyAgICAgICAgICAgICAgICBwYXJlbnRTdGFjay5hcHBlbmQocGFyZW50KTsKKyAgICAg
ICAgICAgICAgICBpZiAoZmlsdGVyKQorICAgICAgICAgICAgICAgICAgICBmaWx0ZXItPnB1c2hQ
YXJlbnQocGFyZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd2hp
bGUgKHBhcmVudFN0YWNrLmxhc3QoKSAhPSBwYXJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAg
cGFyZW50U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVy
KQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLT5wb3BQYXJlbnQoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJldmlvdXNFbGVt
ZW50ID0gJmRlc2NlbmRhbnQ7CisKKyAgICAgICAgaWYgKGludmFsaWRhdGVJZk5lZWRlZChkZXNj
ZW5kYW50LCBmaWx0ZXIpID09IENoZWNrRGVzY2VuZGFudHM6OlllcykKKyAgICAgICAgICAgIGl0
LnRyYXZlcnNlTmV4dCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdC50cmF2ZXJzZU5l
eHRTa2lwcGluZ0NoaWxkcmVuKCk7CisgICAgfQorfQorCit2b2lkIFN0eWxlSW52YWxpZGF0aW9u
QW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgQVNT
RVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7CisKKyAgICBFbGVtZW50KiBkb2N1bWVudEVsZW1lbnQg
PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgU2VsZWN0b3JGaWx0ZXIgZmlsdGVyOworICAgIGludmFs
aWRhdGVTdHlsZUZvclRyZWUoKmRvY3VtZW50RWxlbWVudCwgJmZpbHRlcik7Cit9CisKK3ZvaWQg
U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZVN0eWxlKFNoYWRvd1Jvb3QmIHNo
YWRvd1Jvb3QpCit7CisgICAgQVNTRVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7CisKKyAgICBpZiAo
IW1fcnVsZVNldC5ob3N0UHNldWRvQ2xhc3NSdWxlcygpLmlzRW1wdHkoKSAmJiBzaGFkb3dSb290
Lmhvc3QoKSkKKyAgICAgICAgc2hhZG93Um9vdC5ob3N0KCktPmludmFsaWRhdGVTdHlsZSgpOwor
CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KHNoYWRvd1Jv
b3QpKSB7CisgICAgICAgIFNlbGVjdG9yRmlsdGVyIGZpbHRlcjsKKyAgICAgICAgaW52YWxpZGF0
ZVN0eWxlRm9yVHJlZShjaGlsZCwgJmZpbHRlcik7CisgICAgfQorfQorCit2b2lkIFN0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZShFbGVtZW50JiBlbGVtZW50KQorewor
ICAgIEFTU0VSVCghbV9kaXJ0aWVzQWxsU3R5bGUpOworCisgICAgLy8gRG9uJ3QgdXNlIFNlbGVj
dG9yRmlsdGVyIGFzIHRoZSBydWxlIHNldHMgaGVyZSB0ZW5kIHRvIGJlIHNtYWxsIGFuZCB0aGUg
ZmlsdGVyIHdvdWxkIGhhdmUgc2V0dXAgY29zdCBkZWVwIGluIHRoZSB0cmVlLgorICAgIGludmFs
aWRhdGVTdHlsZUZvclRyZWUoZWxlbWVudCwgbnVsbHB0cik7Cit9CisKK30KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwCShyZXZpc2lvbiAyMTYwNzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgiCisjaW5jbHVkZSAiU3R5bGVJ
bnZhbGlkYXRvci5oIgogCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVu
dHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFN0eWxlIHsKIAogc3RhdGlj
IGJvb2wgc2hvdWxkRGlydHlBbGxTdHlsZShjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJh
c2U+PiYgcnVsZXMpCiB7CkBAIC03Niw3ICs3Nyw3IEBAIHN0YXRpYyBib29sIHNob3VsZERpcnR5
QWxsU3R5bGUoY29uc3QgVmUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVN0eWxlSW52YWxpZGF0
aW9uQW5hbHlzaXM6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMoY29uc3QgVmVjdG9yPFN0eWxl
U2hlZXRDb250ZW50cyo+JiBzaGVldHMsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGlh
UXVlcnlFdmFsdWF0b3IpCitJbnZhbGlkYXRvcjo6SW52YWxpZGF0b3IoY29uc3QgVmVjdG9yPFN0
eWxlU2hlZXRDb250ZW50cyo+JiBzaGVldHMsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1l
ZGlhUXVlcnlFdmFsdWF0b3IpCiAgICAgOiBtX293bmVkUnVsZVNldChzdGQ6Om1ha2VfdW5pcXVl
PFJ1bGVTZXQ+KCkpCiAgICAgLCBtX3J1bGVTZXQoKm1fb3duZWRSdWxlU2V0KQogICAgICwgbV9k
aXJ0aWVzQWxsU3R5bGUoc2hvdWxkRGlydHlBbGxTdHlsZShzaGVldHMpKQpAQCAtOTEsMTMgKzky
LDEzIEBAIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OlN0eWxlSW52YWxpZGEKICAgICBtX2hh
c1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQgPSBtX3J1bGVTZXQuaGFzU2hh
ZG93UHNldWRvRWxlbWVudFJ1bGVzKCk7CiB9CiAKLVN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6
OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMoY29uc3QgUnVsZVNldCYgcnVsZVNldCkKK0ludmFs
aWRhdG9yOjpJbnZhbGlkYXRvcihjb25zdCBSdWxlU2V0JiBydWxlU2V0KQogICAgIDogbV9ydWxl
U2V0KHJ1bGVTZXQpCiAgICAgLCBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9y
U2hlZXQocnVsZVNldC5oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoKSkKIHsKIH0KIAotU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpczo6Q2hlY2tEZXNjZW5kYW50cyBTdHlsZUludmFsaWRhdGlv
bkFuYWx5c2lzOjppbnZhbGlkYXRlSWZOZWVkZWQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU2Vs
ZWN0b3JGaWx0ZXIqIGZpbHRlcikKK0ludmFsaWRhdG9yOjpDaGVja0Rlc2NlbmRhbnRzIEludmFs
aWRhdG9yOjppbnZhbGlkYXRlSWZOZWVkZWQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU2VsZWN0
b3JGaWx0ZXIqIGZpbHRlcikKIHsKICAgICBpZiAobV9oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVs
ZXNJbkF1dGhvclNoZWV0KSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGRvIGFjdHVh
bCBydWxlIG1hdGNoaW5nIHRvby4KQEAgLTEzOCw3ICsxMzksNyBAQCBTdHlsZUludmFsaWRhdGlv
bkFuYWx5c2lzOjpDaGVja0Rlc2NlbmRhCiAgICAgcmV0dXJuIENoZWNrRGVzY2VuZGFudHM6Olll
czsKIH0KIAotdm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjppbnZhbGlkYXRlU3R5bGVG
b3JUcmVlKEVsZW1lbnQmIHJvb3QsIFNlbGVjdG9yRmlsdGVyKiBmaWx0ZXIpCit2b2lkIEludmFs
aWRhdG9yOjppbnZhbGlkYXRlU3R5bGVGb3JUcmVlKEVsZW1lbnQmIHJvb3QsIFNlbGVjdG9yRmls
dGVyKiBmaWx0ZXIpCiB7CiAgICAgaWYgKGludmFsaWRhdGVJZk5lZWRlZChyb290LCBmaWx0ZXIp
ID09IENoZWNrRGVzY2VuZGFudHM6Ok5vKQogICAgICAgICByZXR1cm47CkBAIC0xNzEsNyArMTcy
LDcgQEAgdm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjppbnZhbGlkYQogICAgIH0KIH0K
IAotdm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjppbnZhbGlkYXRlU3R5bGUoRG9jdW1l
bnQmIGRvY3VtZW50KQordm9pZCBJbnZhbGlkYXRvcjo6aW52YWxpZGF0ZVN0eWxlKERvY3VtZW50
JiBkb2N1bWVudCkKIHsKICAgICBBU1NFUlQoIW1fZGlydGllc0FsbFN0eWxlKTsKIApAQCAtMTgz
LDcgKzE4NCw3IEBAIHZvaWQgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGEKICAg
ICBpbnZhbGlkYXRlU3R5bGVGb3JUcmVlKCpkb2N1bWVudEVsZW1lbnQsICZmaWx0ZXIpOwogfQog
Ci12b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZShTaGFkb3dS
b290JiBzaGFkb3dSb290KQordm9pZCBJbnZhbGlkYXRvcjo6aW52YWxpZGF0ZVN0eWxlKFNoYWRv
d1Jvb3QmIHNoYWRvd1Jvb3QpCiB7CiAgICAgQVNTRVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7CiAK
QEAgLTE5Niw3ICsxOTcsNyBAQCB2b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFs
aWRhCiAgICAgfQogfQogCi12b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRh
dGVTdHlsZShFbGVtZW50JiBlbGVtZW50KQordm9pZCBJbnZhbGlkYXRvcjo6aW52YWxpZGF0ZVN0
eWxlKEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7
CiAKQEAgLTIwNSwzICsyMDYsNCBAQCB2b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6Omlu
dmFsaWRhCiB9CiAKIH0KK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxp
ZGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRh
dG9yLmgJKHJldmlzaW9uIDIxNjA3MykJKGZyb20gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXMuaDoyMTYwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZUludmFsaWRhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgRWxlbWVudDsKK2NsYXNzIE1lZGlhUXVl
cnlFdmFsdWF0b3I7CitjbGFzcyBSdWxlU2V0OworY2xhc3MgU2VsZWN0b3JGaWx0ZXI7CitjbGFz
cyBTaGFkb3dSb290OworY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOworCitjbGFzcyBTdHlsZUlu
dmFsaWRhdGlvbkFuYWx5c2lzIHsKK3B1YmxpYzoKKyAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5
c2lzKGNvbnN0IFZlY3RvcjxTdHlsZVNoZWV0Q29udGVudHMqPiYsIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImKTsKKyAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzKGNvbnN0IFJ1bGVTZXQm
KTsKKworICAgIGJvb2wgZGlydGllc0FsbFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9kaXJ0aWVz
QWxsU3R5bGU7IH0KKyAgICBib29sIGhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9y
U2hlZXQoKSBjb25zdCB7IHJldHVybiBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0
aG9yU2hlZXQ7IH0KKyAgICB2b2lkIGludmFsaWRhdGVTdHlsZShEb2N1bWVudCYpOworICAgIHZv
aWQgaW52YWxpZGF0ZVN0eWxlKFNoYWRvd1Jvb3QmKTsKKyAgICB2b2lkIGludmFsaWRhdGVTdHls
ZShFbGVtZW50Jik7CisKK3ByaXZhdGU6CisgICAgZW51bSBjbGFzcyBDaGVja0Rlc2NlbmRhbnRz
IHsgWWVzLCBObyB9OworICAgIENoZWNrRGVzY2VuZGFudHMgaW52YWxpZGF0ZUlmTmVlZGVkKEVs
ZW1lbnQmLCBjb25zdCBTZWxlY3RvckZpbHRlciopOworICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxl
Rm9yVHJlZShFbGVtZW50JiwgU2VsZWN0b3JGaWx0ZXIqKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxSdWxlU2V0PiBtX293bmVkUnVsZVNldDsKKyAgICBjb25zdCBSdWxlU2V0JiBtX3J1bGVTZXQ7
CisgICAgYm9vbCBtX2RpcnRpZXNBbGxTdHlsZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1No
YWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9kaWRJbnZhbGlkYXRlSG9zdENoaWxkcmVuIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmgJ
KHJldmlzaW9uIDIxNjA3MykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDE0LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUg
PHd0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworbmFt
ZXNwYWNlIFN0eWxlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwpAQCAtMzcs
MTAgKzM4LDEwIEBAIGNsYXNzIFNlbGVjdG9yRmlsdGVyOwogY2xhc3MgU2hhZG93Um9vdDsKIGNs
YXNzIFN0eWxlU2hlZXRDb250ZW50czsKIAotY2xhc3MgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cyB7CitjbGFzcyBJbnZhbGlkYXRvciB7CiBwdWJsaWM6Ci0gICAgU3R5bGVJbnZhbGlkYXRpb25B
bmFseXNpcyhjb25zdCBWZWN0b3I8U3R5bGVTaGVldENvbnRlbnRzKj4mLCBjb25zdCBNZWRpYVF1
ZXJ5RXZhbHVhdG9yJik7Ci0gICAgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcyhjb25zdCBSdWxl
U2V0Jik7CisgICAgSW52YWxpZGF0b3IoY29uc3QgVmVjdG9yPFN0eWxlU2hlZXRDb250ZW50cyo+
JiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYpOworICAgIEludmFsaWRhdG9yKGNvbnN0IFJ1
bGVTZXQmKTsKIAogICAgIGJvb2wgZGlydGllc0FsbFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9k
aXJ0aWVzQWxsU3R5bGU7IH0KICAgICBib29sIGhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0lu
QXV0aG9yU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxl
c0luQXV0aG9yU2hlZXQ7IH0KQEAgLTYwLDQgKzYxLDUgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
ZGlkSW52YWxpZGF0ZUhvc3RDaGlsZHJlbiB7IGZhbHNlIH07CiB9OwogCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCit9Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAkocmV2
aXNpb24gMjE2MDczKQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJTVkdTdHlsZUVsZW1lbnQu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNs
dWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgiCisjaW5jbHVkZSAiU3R5bGVJbnZhbGlk
YXRvci5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0
Q29udGVudHMuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgpAQCAtMzk3LDE0ICszOTcs
MTQgQEAgU2NvcGU6OlN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIFNjb3BlOjphbgogICAgIGlmICgh
bV9kb2N1bWVudC5ib2R5T3JGcmFtZXNldCgpIHx8IG1fZG9jdW1lbnQuaGFzTm9kZXNXaXRoTm9u
RmluYWxTdHlsZSgpIHx8IG1fZG9jdW1lbnQuaGFzTm9kZXNXaXRoTWlzc2luZ1N0eWxlKCkpCiAg
ICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVyVXBkYXRlVHlwZTsKIAotICAgIFN0eWxlSW52YWxp
ZGF0aW9uQW5hbHlzaXMgaW52YWxpZGF0aW9uQW5hbHlzaXMoYWRkZWRTaGVldHMsIHN0eWxlUmVz
b2x2ZXIubWVkaWFRdWVyeUV2YWx1YXRvcigpKTsKLSAgICBpZiAoaW52YWxpZGF0aW9uQW5hbHlz
aXMuZGlydGllc0FsbFN0eWxlKCkpCisgICAgSW52YWxpZGF0b3IgaW52YWxpZGF0b3IoYWRkZWRT
aGVldHMsIHN0eWxlUmVzb2x2ZXIubWVkaWFRdWVyeUV2YWx1YXRvcigpKTsKKyAgICBpZiAoaW52
YWxpZGF0b3IuZGlydGllc0FsbFN0eWxlKCkpCiAgICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVy
VXBkYXRlVHlwZTsKIAogICAgIGlmIChtX3NoYWRvd1Jvb3QpCi0gICAgICAgIGludmFsaWRhdGlv
bkFuYWx5c2lzLmludmFsaWRhdGVTdHlsZSgqbV9zaGFkb3dSb290KTsKKyAgICAgICAgaW52YWxp
ZGF0b3IuaW52YWxpZGF0ZVN0eWxlKCptX3NoYWRvd1Jvb3QpOwogICAgIGVsc2UKLSAgICAgICAg
aW52YWxpZGF0aW9uQW5hbHlzaXMuaW52YWxpZGF0ZVN0eWxlKG1fZG9jdW1lbnQpOworICAgICAg
ICBpbnZhbGlkYXRvci5pbnZhbGlkYXRlU3R5bGUobV9kb2N1bWVudCk7CiAKICAgICByZXF1aXJl
c0Z1bGxTdHlsZVJlY2FsYyA9IGZhbHNlOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308897</attachid>
            <date>2017-05-03 05:20:42 -0700</date>
            <delta_ts>2017-05-03 07:04:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>rename-style-invalidator-3.patch</filename>
            <type>text/plain</type>
            <size>38617</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjExNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE3LTA1LTAzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU3R5bGVJbnZhbGlk
YXRpb25BbmFseXNpcyB0byBTdHlsZTo6SW52YWxpZGF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTYwMQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsc28gbW92ZSBpdCB0byB0aGUgJ3N0eWxlJyBk
aXJlY3RvcnkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL1N0eWxlSW52YWxpZGF0
aW9uQW5hbHlzaXMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9TdHlsZUludmFsaWRhdGlv
bkFuYWx5c2lzLmg6IFJlbW92ZWQuCisgICAgICAgICogZG9tL0V4dGVuc2lvblN0eWxlU2hlZXRz
LmNwcDoKKyAgICAgICAgKiBzdHlsZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkF0dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlvbjo6aW52
YWxpZGF0ZURlc2NlbmRhbnRzKToKKyAgICAgICAgKiBzdHlsZS9DbGFzc0NoYW5nZUludmFsaWRh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Q2xhc3NDaGFuZ2VJbnZhbGlkYXRp
b246OmludmFsaWRhdGVEZXNjZW5kYW50U3R5bGUpOgorICAgICAgICAqIHN0eWxlL1N0eWxlSW52
YWxpZGF0b3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlk
YXRpb25BbmFseXNpcy5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6SW52YWxpZGF0b3I6
OkludmFsaWRhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpJbnZhbGlkYXRvcjo6aW52
YWxpZGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpJbnZhbGlkYXRvcjo6
aW52YWxpZGF0ZVN0eWxlRm9yVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6SW52YWxp
ZGF0b3I6OmludmFsaWRhdGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGREaXJ0eUFs
bFN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5h
bHlzaXM6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZUlmTmVlZGVkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFs
aWRhdGVTdHlsZUZvclRyZWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbnZh
bGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBz
dHlsZS9TdHlsZUludmFsaWRhdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmguCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUludmFs
aWRhdGlvbkFuYWx5c2lzOjpkaXJ0aWVzQWxsU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aGFzU2hhZG93UHNldWRvRWxlbWVudFJ1
bGVzSW5BdXRob3JTaGVldCk6IERlbGV0ZWQuCisgICAgICAgICogc3R5bGUvU3R5bGVTY29wZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6U2NvcGU6OnJlc29sdmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6YW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2UpOgorCiAyMDE3
LTA1LTAyICBBbmRyZXcgR29sZCAgPGFnb2xkQGFwcGxlLmNvbT4KIAogICAgICAgICBUeXBvIGlu
IEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIubW0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAyMTYwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTM5Myw3ICsxMzkzLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNF
UwogICAgIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwCiAgICAgY3NzL1NlbGVjdG9yRmlsdGVyLmNw
cAogICAgIGNzcy9TdHlsZUNvbG9yLmNwcAotICAgIGNzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5
c2lzLmNwcAogICAgIGNzcy9TdHlsZU1lZGlhLmNwcAogICAgIGNzcy9TdHlsZVByb3BlcnRpZXMu
Y3BwCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwCkBAIC0yNzM1LDYgKzI3MzQs
NyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXIuY3Bw
CiAgICAgc3R5bGUvU3R5bGVDaGFuZ2UuY3BwCiAgICAgc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0
aW9ucy5jcHAKKyAgICBzdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAogICAgIHN0eWxlL1N0eWxl
UGVuZGluZ1Jlc291cmNlcy5jcHAKICAgICBzdHlsZS9TdHlsZVJlbGF0aW9ucy5jcHAKICAgICBz
dHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxNjA3MykK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNjc0OSw4ICs2NzQ5LDggQEAKIAkJRTQ2QTJCMUMxN0NBNjVCOTAwMERC
Q0Q4IC8qIFR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2QTJCMUIxN0NBNjVCOTAwMERCQ0Q4IC8q
IFR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0NkEyQjFFMTdDQTc2QjEwMDBEQkNEOCAvKiBF
bGVtZW50Q2hpbGRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ2QTJCMUQxN0NBNzZCMTAwMERCQ0Q4IC8qIEVsZW1lbnRDaGlsZEl0ZXJh
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RTQ2QjQxRjkxQ0IyNEU3MDAwOEYxMURFIC8qIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2QjQxRjgxQ0Iy
NEU3MDAwOEYxMURFIC8qIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUU0NzEyN0NBMTYzNDM4QTEwMEVE
NkY1QSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0E5N0NFMTYzMDU5RkMwMDVEQ0Q5OSAvKiBT
dHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCAqLzsgfTsKLQkJRTQ3MTI3Q0IxNjM0MzhBRTAw
RUQ2RjVBIC8qIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0E5N0NGMTYzMDU5RkMwMDVEQ0Q5OSAvKiBT
dHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmggKi87IH07CisJCUU0NzEyN0NBMTYzNDM4QTEwMEVE
NkY1QSAvKiBTdHlsZUludmFsaWRhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0E5N0NFMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFs
aWRhdG9yLmNwcCAqLzsgfTsKKwkJRTQ3MTI3Q0IxNjM0MzhBRTAwRUQ2RjVBIC8qIFN0eWxlSW52
YWxpZGF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0N0E5N0NGMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdG9yLmggKi87IH07CiAJ
CUU0Nzc4QjdGMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0Nzc4QjdEMTE1QTU4MUEwMEI1
RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmNwcCAqLzsgfTsKIAkJRTQ3NzhCODAxMTVBNTgxQTAwQjVE
MzcyIC8qIEpTQ3VzdG9tRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0Nzc4QjdFMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50Lmgg
Ki87IH07CiAJCUU0N0EzQUMzMUM1RUFCQkUwMENDQkZBNyAvKiBTdHlsZVNoYXJpbmdSZXNvbHZl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdB
M0FDMjFDNUVBQkJFMDBDQ0JGQTcgLyogU3R5bGVTaGFyaW5nUmVzb2x2ZXIuY3BwICovOyB9OwpA
QCAtMTUyOTMsOCArMTUyOTMsOCBAQAogCQlFNDc3OEI3RTExNUE1ODFBMDBCNUQzNzIgLyogSlND
dXN0b21FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUV2
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0EzQUMyMUM1RUFCQkUwMEND
QkZBNyAvKiBTdHlsZVNoYXJpbmdSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdHlsZVNoYXJpbmdSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0N0EzQUM0MUM1RUFDNzkwMENDQkZBNyAvKiBTdHlsZVNoYXJpbmdSZXNv
bHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVNoYXJpbmdSZXNv
bHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDdBOTdDRTE2MzA1OUZDMDA1
RENEOTkgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTQ3QTk3Q0YxNjMwNTlGQzAwNURDRDk5IC8qIFN0eWxl
SW52YWxpZGF0aW9uQW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFNDdBOTdDRTE2MzA1OUZDMDA1RENEOTkgLyogU3R5bGVJbnZhbGlkYXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUludmFsaWRhdG9yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3QTk3Q0YxNjMwNTlGQzAwNURDRDk5IC8qIFN0
eWxlSW52YWxpZGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVJ
bnZhbGlkYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdCNEJFNjBFNzEy
NDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQ3QjRCRTcwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFu
ZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFJlc291
cmNlSGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3RTI3NjQxNjAz
NkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvblN0eWxlU2hlZXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNDc0OSw2ICsyNDc0OSw4IEBACiAJCQkJRTQwMUUwQTMxQzNDMEI4MzAw
RjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmggKi8sCiAJCQkJRTRENThFQjYxN0I0RUQ4OTAwQ0JEQ0E4
IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwICovLAogCQkJCUU0RDU4RUI3MTdCNEVEODkw
MENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmggKi8sCisJCQkJRTQ3QTk3Q0UxNjMw
NTlGQzAwNURDRDk5IC8qIFN0eWxlSW52YWxpZGF0b3IuY3BwICovLAorCQkJCUU0N0E5N0NGMTYz
MDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdG9yLmggKi8sCiAJCQkJRTREQUNFNkIxRDEy
RTExNjAwNzU5ODBGIC8qIFN0eWxlUGVuZGluZ1Jlc291cmNlcy5jcHAgKi8sCiAJCQkJRTREQUNF
NjkxRDEyRTEwQjAwNzU5ODBGIC8qIFN0eWxlUGVuZGluZ1Jlc291cmNlcy5oICovLAogCQkJCUU0
NjE4MDJFMUM4REQ0RDIwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5jcHAgKi8sCkBAIC0yNTA1
OCw4ICsyNTA2MCw2IEBACiAJCQkJODM1RDM2MzYxOUZGNjE5MzAwNEM5M0FCIC8qIFN0eWxlQnVp
bGRlckN1c3RvbS5oICovLAogCQkJCTk0MTgyNzg4MUQ4QjI0MjIwMDQ5Mjc2NCAvKiBTdHlsZUNv
bG9yLmNwcCAqLywKIAkJCQk5NDE4Mjc4OTFEOEIyNDIyMDA0OTI3NjQgLyogU3R5bGVDb2xvci5o
ICovLAotCQkJCUU0N0E5N0NFMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdGlvbkFu
YWx5c2lzLmNwcCAqLywKLQkJCQlFNDdBOTdDRjE2MzA1OUZDMDA1RENEOTkgLyogU3R5bGVJbnZh
bGlkYXRpb25BbmFseXNpcy5oICovLAogCQkJCTBGRjUwMjZFMTAyQkE5NjYwMDY2RjM5QSAvKiBT
dHlsZU1lZGlhLmNwcCAqLywKIAkJCQkwRkY1MDI2RjEwMkJBOTZBMDA2NkYzOUEgLyogU3R5bGVN
ZWRpYS5oICovLAogCQkJCTBGRjUwMjcwMTAyQkE5NkEwMDY2RjM5QSAvKiBTdHlsZU1lZGlhLmlk
bCAqLywKQEAgLTI5MzQ1LDcgKzI5MzQ1LDcgQEAKIAkJCQlBMTEwREI5QjE0RjVERjc3MDBBMDNC
OTMgLyogU3R5bGVHcmlkSXRlbURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUY0M0NGMEU2
NzNEQTEwMDFDMTI4NyAvKiBTdHlsZUltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzIyNzMw
NDBFODJGMUU2MDBFN0Y5NzUgLyogU3R5bGVJbmhlcml0ZWREYXRhLmggaW4gSGVhZGVycyAqLywK
LQkJCQlFNDcxMjdDQjE2MzQzOEFFMDBFRDZGNUEgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ3MTI3Q0IxNjM0MzhBRTAwRUQ2RjVBIC8qIFN0eWxl
SW52YWxpZGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNzJBMEU4MURFODEwMEIyNTk2
NSAvKiBTdHlsZU1hcnF1ZWVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY1MDI3MjEwMkJB
OTZBMDA2NkYzOUEgLyogU3R5bGVNZWRpYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI3NEUw
RTgxRTA2NzAwQjI1OTY1IC8qIFN0eWxlTXVsdGlDb2xEYXRhLmggaW4gSGVhZGVycyAqLywKQEAg
LTMzMTYzLDcgKzMzMTYzLDcgQEAKIAkJCQlBMTBEQzc2QTE0NzQ3QkFCMDA1RTI0NzEgLyogU3R5
bGVHcmlkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTEwREI5RDE0RjVERjg3MDBBMDNC
OTMgLyogU3R5bGVHcmlkSXRlbURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyMjczMDMw
RTgyRjFFNjAwRTdGOTc1IC8qIFN0eWxlSW5oZXJpdGVkRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlFNDcxMjdDQTE2MzQzOEExMDBFRDZGNUEgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDcxMjdDQTE2MzQzOEExMDBFRDZGNUEgLyogU3R5
bGVJbnZhbGlkYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzVFQjcyOTBFODFERTgxMDBC
MjU5NjUgLyogU3R5bGVNYXJxdWVlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY1MDI3
MTEwMkJBOTZBMDA2NkYzOUEgLyogU3R5bGVNZWRpYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzVFQjc0RDBFODFFMDY3MDBCMjU5NjUgLyogU3R5bGVNdWx0aUNvbERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9u
QW5hbHlzaXMuY3BwCShyZXZpc2lvbiAyMTYwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgi
Ci0KLSNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgotI2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVj
dG9yLmgiCi0jaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2VsZWN0b3JG
aWx0ZXIuaCIKLSNpbmNsdWRlICJTaGFkb3dSb290LmgiCi0jaW5jbHVkZSAiU3R5bGVSdWxlSW1w
b3J0LmgiCi0jaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIGJvb2wgc2hvdWxkRGlydHlBbGxTdHlsZShjb25zdCBWZWN0b3I8UmVm
UHRyPFN0eWxlUnVsZUJhc2U+PiYgcnVsZXMpCi17Ci0gICAgZm9yIChhdXRvJiBydWxlIDogcnVs
ZXMpIHsKLSAgICAgICAgaWYgKGlzPFN0eWxlUnVsZU1lZGlhPigqcnVsZSkpIHsKLSAgICAgICAg
ICAgIGNvbnN0IGF1dG8qIGNoaWxkUnVsZXMgPSBkb3duY2FzdDxTdHlsZVJ1bGVNZWRpYT4oKnJ1
bGUpLmNoaWxkUnVsZXNXaXRob3V0RGVmZXJyZWRQYXJzaW5nKCk7Ci0gICAgICAgICAgICBpZiAo
Y2hpbGRSdWxlcyAmJiBzaG91bGREaXJ0eUFsbFN0eWxlKCpjaGlsZFJ1bGVzKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIEZJWE1FOiBBdCBsZWFzdCBmb250IGZhY2VzIGRvbid0IG5lZWQgZnVsbCByZWNh
bGMgaW4gYWxsIGNhc2VzLgotICAgICAgICBpZiAoIWlzPFN0eWxlUnVsZT4oKnJ1bGUpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3Rh
dGljIGJvb2wgc2hvdWxkRGlydHlBbGxTdHlsZShjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNo
ZWV0KQotewotICAgIGZvciAoYXV0byYgaW1wb3J0IDogc2hlZXQuaW1wb3J0UnVsZXMoKSkgewot
ICAgICAgICBpZiAoIWltcG9ydC0+c3R5bGVTaGVldCgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGlmIChzaG91bGREaXJ0eUFsbFN0eWxlKCppbXBvcnQtPnN0eWxlU2hlZXQoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHNob3VsZERpcnR5QWxs
U3R5bGUoc2hlZXQuY2hpbGRSdWxlcygpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGREaXJ0eUFsbFN0eWxlKGNvbnN0IFZl
Y3RvcjxTdHlsZVNoZWV0Q29udGVudHMqPiYgc2hlZXRzKQotewotICAgIGZvciAoYXV0byYgc2hl
ZXQgOiBzaGVldHMpIHsKLSAgICAgICAgaWYgKHNob3VsZERpcnR5QWxsU3R5bGUoKnNoZWV0KSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LVN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMoY29u
c3QgVmVjdG9yPFN0eWxlU2hlZXRDb250ZW50cyo+JiBzaGVldHMsIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImIG1lZGlhUXVlcnlFdmFsdWF0b3IpCi0gICAgOiBtX293bmVkUnVsZVNldChzdGQ6
Om1ha2VfdW5pcXVlPFJ1bGVTZXQ+KCkpCi0gICAgLCBtX3J1bGVTZXQoKm1fb3duZWRSdWxlU2V0
KQotICAgICwgbV9kaXJ0aWVzQWxsU3R5bGUoc2hvdWxkRGlydHlBbGxTdHlsZShzaGVldHMpKQot
ewotICAgIGlmIChtX2RpcnRpZXNBbGxTdHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9v
d25lZFJ1bGVTZXQtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKLSAgICBmb3IgKGF1dG8mIHNo
ZWV0IDogc2hlZXRzKQotICAgICAgICBtX293bmVkUnVsZVNldC0+YWRkUnVsZXNGcm9tU2hlZXQo
KnNoZWV0LCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKLQotICAgIG1faGFzU2hhZG93UHNldWRvRWxl
bWVudFJ1bGVzSW5BdXRob3JTaGVldCA9IG1fcnVsZVNldC5oYXNTaGFkb3dQc2V1ZG9FbGVtZW50
UnVsZXMoKTsKLX0KLQotU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6U3R5bGVJbnZhbGlkYXRp
b25BbmFseXNpcyhjb25zdCBSdWxlU2V0JiBydWxlU2V0KQotICAgIDogbV9ydWxlU2V0KHJ1bGVT
ZXQpCi0gICAgLCBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQocnVs
ZVNldC5oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoKSkKLXsKLX0KLQotU3R5bGVJbnZhbGlk
YXRpb25BbmFseXNpczo6Q2hlY2tEZXNjZW5kYW50cyBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lz
OjppbnZhbGlkYXRlSWZOZWVkZWQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU2VsZWN0b3JGaWx0
ZXIqIGZpbHRlcikKLXsKLSAgICBpZiAobV9oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXNJbkF1
dGhvclNoZWV0KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGRvIGFjdHVhbCBydWxl
IG1hdGNoaW5nIHRvby4KLSAgICAgICAgaWYgKGVsZW1lbnQuc2hhZG93Um9vdCgpKQotICAgICAg
ICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7Ci0gICAgfQotCi0gICAg
Ym9vbCBzaG91bGRDaGVja0ZvclNsb3RzID0gIW1fcnVsZVNldC5zbG90dGVkUHNldWRvRWxlbWVu
dFJ1bGVzKCkuaXNFbXB0eSgpICYmICFtX2RpZEludmFsaWRhdGVIb3N0Q2hpbGRyZW47Ci0gICAg
aWYgKHNob3VsZENoZWNrRm9yU2xvdHMgJiYgaXM8SFRNTFNsb3RFbGVtZW50PihlbGVtZW50KSkg
ewotICAgICAgICBhdXRvKiBjb250YWluaW5nU2hhZG93Um9vdCA9IGVsZW1lbnQuY29udGFpbmlu
Z1NoYWRvd1Jvb3QoKTsKLSAgICAgICAgaWYgKGNvbnRhaW5pbmdTaGFkb3dSb290ICYmIGNvbnRh
aW5pbmdTaGFkb3dSb290LT5ob3N0KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcG9zc2li
bHlTbG90dGVkIDogY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4oKmNvbnRhaW5pbmdTaGFkb3dSb290
LT5ob3N0KCkpKQotICAgICAgICAgICAgICAgIHBvc3NpYmx5U2xvdHRlZC5pbnZhbGlkYXRlU3R5
bGUoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBObyBuZWVkIHRvIGRvIHRoaXMgYWdhaW4uCi0g
ICAgICAgIG1fZGlkSW52YWxpZGF0ZUhvc3RDaGlsZHJlbiA9IHRydWU7Ci0gICAgfQotCi0gICAg
c3dpdGNoIChlbGVtZW50LnN0eWxlVmFsaWRpdHkoKSkgewotICAgIGNhc2UgU3R5bGU6OlZhbGlk
aXR5OjpWYWxpZDogewotICAgICAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBydWxlQ29sbGVjdG9y
KGVsZW1lbnQsIG1fcnVsZVNldCwgZmlsdGVyKTsKLSAgICAgICAgcnVsZUNvbGxlY3Rvci5zZXRN
b2RlKFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6Q29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFs
UHNldWRvRWxlbWVudHMpOwotICAgICAgICBydWxlQ29sbGVjdG9yLm1hdGNoQXV0aG9yUnVsZXMo
ZmFsc2UpOwotCi0gICAgICAgIGlmIChydWxlQ29sbGVjdG9yLmhhc01hdGNoZWRSdWxlcygpKQot
ICAgICAgICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuIENo
ZWNrRGVzY2VuZGFudHM6OlllczsKLSAgICB9Ci0gICAgY2FzZSBTdHlsZTo6VmFsaWRpdHk6OkVs
ZW1lbnRJbnZhbGlkOgotICAgICAgICByZXR1cm4gQ2hlY2tEZXNjZW5kYW50czo6WWVzOwotICAg
IGNhc2UgU3R5bGU6OlZhbGlkaXR5OjpTdWJ0cmVlSW52YWxpZDoKLSAgICBjYXNlIFN0eWxlOjpW
YWxpZGl0eTo6U3VidHJlZUFuZFJlbmRlcmVyc0ludmFsaWQ6Ci0gICAgICAgIGlmIChzaG91bGRD
aGVja0ZvclNsb3RzKQotICAgICAgICAgICAgcmV0dXJuIENoZWNrRGVzY2VuZGFudHM6OlllczsK
LSAgICAgICAgcmV0dXJuIENoZWNrRGVzY2VuZGFudHM6Ok5vOwotICAgIH0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gQ2hlY2tEZXNjZW5kYW50czo6WWVzOwotfQotCi12
b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZUZvclRyZWUoRWxl
bWVudCYgcm9vdCwgU2VsZWN0b3JGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBpZiAoaW52YWxpZGF0
ZUlmTmVlZGVkKHJvb3QsIGZpbHRlcikgPT0gQ2hlY2tEZXNjZW5kYW50czo6Tm8pCi0gICAgICAg
IHJldHVybjsKLQotICAgIFZlY3RvcjxFbGVtZW50KiwgMjA+IHBhcmVudFN0YWNrOwotICAgIEVs
ZW1lbnQqIHByZXZpb3VzRWxlbWVudCA9ICZyb290OwotICAgIGF1dG8gZGVzY2VuZGFudHMgPSBk
ZXNjZW5kYW50c09mVHlwZTxFbGVtZW50Pihyb290KTsKLSAgICBmb3IgKGF1dG8gaXQgPSBkZXNj
ZW5kYW50cy5iZWdpbigpLCBlbmQgPSBkZXNjZW5kYW50cy5lbmQoKTsgaXQgIT0gZW5kOykgewot
ICAgICAgICBhdXRvJiBkZXNjZW5kYW50ID0gKml0OwotICAgICAgICBhdXRvKiBwYXJlbnQgPSBk
ZXNjZW5kYW50LnBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKHBhcmVudFN0YWNrLmlzRW1w
dHkoKSB8fCBwYXJlbnRTdGFjay5sYXN0KCkgIT0gcGFyZW50KSB7Ci0gICAgICAgICAgICBpZiAo
cGFyZW50ID09IHByZXZpb3VzRWxlbWVudCkgewotICAgICAgICAgICAgICAgIHBhcmVudFN0YWNr
LmFwcGVuZChwYXJlbnQpOwotICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIpCi0gICAgICAgICAg
ICAgICAgICAgIGZpbHRlci0+cHVzaFBhcmVudChwYXJlbnQpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50U3RhY2subGFzdCgpICE9IHBhcmVudCkg
ewotICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChmaWx0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIt
PnBvcFBhcmVudCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBwcmV2aW91c0VsZW1lbnQgPSAmZGVzY2VuZGFudDsKLQotICAgICAgICBpZiAo
aW52YWxpZGF0ZUlmTmVlZGVkKGRlc2NlbmRhbnQsIGZpbHRlcikgPT0gQ2hlY2tEZXNjZW5kYW50
czo6WWVzKQotICAgICAgICAgICAgaXQudHJhdmVyc2VOZXh0KCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGl0LnRyYXZlcnNlTmV4dFNraXBwaW5nQ2hpbGRyZW4oKTsKLSAgICB9Ci19Ci0K
LXZvaWQgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZVN0eWxlKERvY3VtZW50
JiBkb2N1bWVudCkKLXsKLSAgICBBU1NFUlQoIW1fZGlydGllc0FsbFN0eWxlKTsKLQotICAgIEVs
ZW1lbnQqIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOwotICAg
IGlmICghZG9jdW1lbnRFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTZWxlY3RvckZp
bHRlciBmaWx0ZXI7Ci0gICAgaW52YWxpZGF0ZVN0eWxlRm9yVHJlZSgqZG9jdW1lbnRFbGVtZW50
LCAmZmlsdGVyKTsKLX0KLQotdm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjppbnZhbGlk
YXRlU3R5bGUoU2hhZG93Um9vdCYgc2hhZG93Um9vdCkKLXsKLSAgICBBU1NFUlQoIW1fZGlydGll
c0FsbFN0eWxlKTsKLQotICAgIGlmICghbV9ydWxlU2V0Lmhvc3RQc2V1ZG9DbGFzc1J1bGVzKCku
aXNFbXB0eSgpICYmIHNoYWRvd1Jvb3QuaG9zdCgpKQotICAgICAgICBzaGFkb3dSb290Lmhvc3Qo
KS0+aW52YWxpZGF0ZVN0eWxlKCk7Ci0KLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5P
ZlR5cGU8RWxlbWVudD4oc2hhZG93Um9vdCkpIHsKLSAgICAgICAgU2VsZWN0b3JGaWx0ZXIgZmls
dGVyOwotICAgICAgICBpbnZhbGlkYXRlU3R5bGVGb3JUcmVlKGNoaWxkLCAmZmlsdGVyKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZVN0eWxl
KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgQVNTRVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7Ci0K
LSAgICAvLyBEb24ndCB1c2UgU2VsZWN0b3JGaWx0ZXIgYXMgdGhlIHJ1bGUgc2V0cyBoZXJlIHRl
bmQgdG8gYmUgc21hbGwgYW5kIHRoZSBmaWx0ZXIgd291bGQgaGF2ZSBzZXR1cCBjb3N0IGRlZXAg
aW4gdGhlIHRyZWUuCi0gICAgaW52YWxpZGF0ZVN0eWxlRm9yVHJlZShlbGVtZW50LCBudWxscHRy
KTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5h
bHlzaXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRp
b25BbmFseXNpcy5oCShyZXZpc2lvbiAyMTYwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oCShub25leGlzdGVudCkKQEAgLTEsNjMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERvY3VtZW50OwotY2xhc3MgRWxlbWVudDsKLWNsYXNz
IE1lZGlhUXVlcnlFdmFsdWF0b3I7Ci1jbGFzcyBSdWxlU2V0OwotY2xhc3MgU2VsZWN0b3JGaWx0
ZXI7Ci1jbGFzcyBTaGFkb3dSb290OwotY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwotCi1jbGFz
cyBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzIHsKLXB1YmxpYzoKLSAgICBTdHlsZUludmFsaWRh
dGlvbkFuYWx5c2lzKGNvbnN0IFZlY3RvcjxTdHlsZVNoZWV0Q29udGVudHMqPiYsIGNvbnN0IE1l
ZGlhUXVlcnlFdmFsdWF0b3ImKTsKLSAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzKGNvbnN0
IFJ1bGVTZXQmKTsKLQotICAgIGJvb2wgZGlydGllc0FsbFN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9kaXJ0aWVzQWxsU3R5bGU7IH0KLSAgICBib29sIGhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxl
c0luQXV0aG9yU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRS
dWxlc0luQXV0aG9yU2hlZXQ7IH0KLSAgICB2b2lkIGludmFsaWRhdGVTdHlsZShEb2N1bWVudCYp
OwotICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlKFNoYWRvd1Jvb3QmKTsKLSAgICB2b2lkIGludmFs
aWRhdGVTdHlsZShFbGVtZW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgZW51bSBjbGFzcyBDaGVja0Rl
c2NlbmRhbnRzIHsgWWVzLCBObyB9OwotICAgIENoZWNrRGVzY2VuZGFudHMgaW52YWxpZGF0ZUlm
TmVlZGVkKEVsZW1lbnQmLCBjb25zdCBTZWxlY3RvckZpbHRlciopOwotICAgIHZvaWQgaW52YWxp
ZGF0ZVN0eWxlRm9yVHJlZShFbGVtZW50JiwgU2VsZWN0b3JGaWx0ZXIqKTsKLQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxSdWxlU2V0PiBtX293bmVkUnVsZVNldDsKLSAgICBjb25zdCBSdWxlU2V0JiBt
X3J1bGVTZXQ7Ci0gICAgYm9vbCBtX2RpcnRpZXNBbGxTdHlsZSB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9kaWRJbnZhbGlkYXRlSG9zdENoaWxkcmVuIHsgZmFsc2UgfTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FeHRlbnNpb25T
dHlsZVNoZWV0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V4dGVuc2lv
blN0eWxlU2hlZXRzLmNwcAkocmV2aXNpb24gMjE2MDczKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0V4dGVuc2lvblN0eWxlU2hlZXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBA
QAogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIlNWR1N0eWxl
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3R5bGVJbnZhbGlk
YXRpb25BbmFseXNpcy5oIgorI2luY2x1ZGUgIlN0eWxlSW52YWxpZGF0b3IuaCIKICNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlN0
eWxlU2hlZXRDb250ZW50cy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvQXR0cmlidXRl
Q2hhbmdlSW52YWxpZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCShyZXZpc2lvbiAyMTYwNzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRSdWxlU2V0cy5o
IgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIK
LSNpbmNsdWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgiCisjaW5jbHVkZSAiU3R5bGVJ
bnZhbGlkYXRvci5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHls
ZVNjb3BlLmgiCiAKQEAgLTExNiw4ICsxMTYsOCBAQCB2b2lkIEF0dHJpYnV0ZUNoYW5nZUludmFs
aWRhdGlvbjo6aW52YWxpCiB7CiAgICAgaWYgKCFtX2Rlc2NlbmRhbnRJbnZhbGlkYXRpb25SdWxl
U2V0KQogICAgICAgICByZXR1cm47Ci0gICAgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcyBpbnZh
bGlkYXRpb25BbmFseXNpcygqbV9kZXNjZW5kYW50SW52YWxpZGF0aW9uUnVsZVNldCk7Ci0gICAg
aW52YWxpZGF0aW9uQW5hbHlzaXMuaW52YWxpZGF0ZVN0eWxlKG1fZWxlbWVudCk7CisgICAgSW52
YWxpZGF0b3IgaW52YWxpZGF0b3IoKm1fZGVzY2VuZGFudEludmFsaWRhdGlvblJ1bGVTZXQpOwor
ICAgIGludmFsaWRhdG9yLmludmFsaWRhdGVTdHlsZShtX2VsZW1lbnQpOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3Bw
CShyZXZpc2lvbiAyMTYwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUlu
dmFsaWRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRl
ICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNs
dWRlICJTcGFjZVNwbGl0U3RyaW5nLmgiCi0jaW5jbHVkZSAiU3R5bGVJbnZhbGlkYXRpb25BbmFs
eXNpcy5oIgorI2luY2x1ZGUgIlN0eWxlSW52YWxpZGF0b3IuaCIKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0
b3IuaD4KQEAgLTE0OSw4ICsxNDksOCBAQCB2b2lkIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjpp
bnZhbGlkYXRlCiB2b2lkIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZhbGlkYXRlRGVzY2Vu
ZGFudFN0eWxlKCkKIHsKICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yQ2xhc3NSdWxlcyA6IG1fZGVz
Y2VuZGFudEludmFsaWRhdGlvblJ1bGVTZXRzKSB7Ci0gICAgICAgIFN0eWxlSW52YWxpZGF0aW9u
QW5hbHlzaXMgaW52YWxpZGF0aW9uQW5hbHlzaXMoKmFuY2VzdG9yQ2xhc3NSdWxlcyk7Ci0gICAg
ICAgIGludmFsaWRhdGlvbkFuYWx5c2lzLmludmFsaWRhdGVTdHlsZShtX2VsZW1lbnQpOworICAg
ICAgICBJbnZhbGlkYXRvciBpbnZhbGlkYXRvcigqYW5jZXN0b3JDbGFzc1J1bGVzKTsKKyAgICAg
ICAgaW52YWxpZGF0b3IuaW52YWxpZGF0ZVN0eWxlKG1fZWxlbWVudCk7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAkocmV2aXNpb24g
MjE2MDczKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cy5jcHA6MjE2MDczKQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oIgorCisjaW5jbHVkZSAiQ1NTU2VsZWN0
b3JMaXN0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50SXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgorI2luY2x1ZGUgIkhUTUxT
bG90RWxlbWVudC5oIgorI2luY2x1ZGUgIlNlbGVjdG9yRmlsdGVyLmgiCisjaW5jbHVkZSAiU2hh
ZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0eWxlUnVsZUltcG9ydC5oIgorI2luY2x1ZGUgIlN0eWxl
U2hlZXRDb250ZW50cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBib29sIHNo
b3VsZERpcnR5QWxsU3R5bGUoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIHJ1
bGVzKQoreworICAgIGZvciAoYXV0byYgcnVsZSA6IHJ1bGVzKSB7CisgICAgICAgIGlmIChpczxT
dHlsZVJ1bGVNZWRpYT4oKnJ1bGUpKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvKiBjaGlsZFJ1
bGVzID0gZG93bmNhc3Q8U3R5bGVSdWxlTWVkaWE+KCpydWxlKS5jaGlsZFJ1bGVzV2l0aG91dERl
ZmVycmVkUGFyc2luZygpOworICAgICAgICAgICAgaWYgKGNoaWxkUnVsZXMgJiYgc2hvdWxkRGly
dHlBbGxTdHlsZSgqY2hpbGRSdWxlcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogQXQgbGVh
c3QgZm9udCBmYWNlcyBkb24ndCBuZWVkIGZ1bGwgcmVjYWxjIGluIGFsbCBjYXNlcy4KKyAgICAg
ICAgaWYgKCFpczxTdHlsZVJ1bGU+KCpydWxlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZERpcnR5QWxs
U3R5bGUoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCkKK3sKKyAgICBmb3IgKGF1dG8m
IGltcG9ydCA6IHNoZWV0LmltcG9ydFJ1bGVzKCkpIHsKKyAgICAgICAgaWYgKCFpbXBvcnQtPnN0
eWxlU2hlZXQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoc2hvdWxkRGly
dHlBbGxTdHlsZSgqaW1wb3J0LT5zdHlsZVNoZWV0KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIGlmIChzaG91bGREaXJ0eUFsbFN0eWxlKHNoZWV0LmNoaWxkUnVsZXMo
KSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGlj
IGJvb2wgc2hvdWxkRGlydHlBbGxTdHlsZShjb25zdCBWZWN0b3I8U3R5bGVTaGVldENvbnRlbnRz
Kj4mIHNoZWV0cykKK3sKKyAgICBmb3IgKGF1dG8mIHNoZWV0IDogc2hlZXRzKSB7CisgICAgICAg
IGlmIChzaG91bGREaXJ0eUFsbFN0eWxlKCpzaGVldCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHlsZUludmFsaWRhdGlvbkFuYWx5
c2lzOjpTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzKGNvbnN0IFZlY3RvcjxTdHlsZVNoZWV0Q29u
dGVudHMqPiYgc2hlZXRzLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpYVF1ZXJ5RXZh
bHVhdG9yKQorICAgIDogbV9vd25lZFJ1bGVTZXQoc3RkOjptYWtlX3VuaXF1ZTxSdWxlU2V0Pigp
KQorICAgICwgbV9ydWxlU2V0KCptX293bmVkUnVsZVNldCkKKyAgICAsIG1fZGlydGllc0FsbFN0
eWxlKHNob3VsZERpcnR5QWxsU3R5bGUoc2hlZXRzKSkKK3sKKyAgICBpZiAobV9kaXJ0aWVzQWxs
U3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fb3duZWRSdWxlU2V0LT5kaXNhYmxlQXV0
b1Nocmlua1RvRml0KCk7CisgICAgZm9yIChhdXRvJiBzaGVldCA6IHNoZWV0cykKKyAgICAgICAg
bV9vd25lZFJ1bGVTZXQtPmFkZFJ1bGVzRnJvbVNoZWV0KCpzaGVldCwgbWVkaWFRdWVyeUV2YWx1
YXRvcik7CisKKyAgICBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQg
PSBtX3J1bGVTZXQuaGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKCk7Cit9CisKK1N0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXM6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMoY29uc3QgUnVsZVNl
dCYgcnVsZVNldCkKKyAgICA6IG1fcnVsZVNldChydWxlU2V0KQorICAgICwgbV9oYXNTaGFkb3dQ
c2V1ZG9FbGVtZW50UnVsZXNJbkF1dGhvclNoZWV0KHJ1bGVTZXQuaGFzU2hhZG93UHNldWRvRWxl
bWVudFJ1bGVzKCkpCit7Cit9CisKK1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OkNoZWNrRGVz
Y2VuZGFudHMgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZUlmTmVlZGVkKEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgaWYg
KG1faGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzSW5BdXRob3JTaGVldCkgeworICAgICAgICAv
LyBGSVhNRTogVGhpcyBjb3VsZCBkbyBhY3R1YWwgcnVsZSBtYXRjaGluZyB0b28uCisgICAgICAg
IGlmIChlbGVtZW50LnNoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0
ZVN0eWxlRm9yU3VidHJlZSgpOworICAgIH0KKworICAgIGJvb2wgc2hvdWxkQ2hlY2tGb3JTbG90
cyA9ICFtX3J1bGVTZXQuc2xvdHRlZFBzZXVkb0VsZW1lbnRSdWxlcygpLmlzRW1wdHkoKSAmJiAh
bV9kaWRJbnZhbGlkYXRlSG9zdENoaWxkcmVuOworICAgIGlmIChzaG91bGRDaGVja0ZvclNsb3Rz
ICYmIGlzPEhUTUxTbG90RWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAgYXV0byogY29udGFp
bmluZ1NoYWRvd1Jvb3QgPSBlbGVtZW50LmNvbnRhaW5pbmdTaGFkb3dSb290KCk7CisgICAgICAg
IGlmIChjb250YWluaW5nU2hhZG93Um9vdCAmJiBjb250YWluaW5nU2hhZG93Um9vdC0+aG9zdCgp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHBvc3NpYmx5U2xvdHRlZCA6IGNoaWxkcmVuT2ZU
eXBlPEVsZW1lbnQ+KCpjb250YWluaW5nU2hhZG93Um9vdC0+aG9zdCgpKSkKKyAgICAgICAgICAg
ICAgICBwb3NzaWJseVNsb3R0ZWQuaW52YWxpZGF0ZVN0eWxlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gTm8gbmVlZCB0byBkbyB0aGlzIGFnYWluLgorICAgICAgICBtX2RpZEludmFsaWRhdGVI
b3N0Q2hpbGRyZW4gPSB0cnVlOworICAgIH0KKworICAgIHN3aXRjaCAoZWxlbWVudC5zdHlsZVZh
bGlkaXR5KCkpIHsKKyAgICBjYXNlIFN0eWxlOjpWYWxpZGl0eTo6VmFsaWQ6IHsKKyAgICAgICAg
RWxlbWVudFJ1bGVDb2xsZWN0b3IgcnVsZUNvbGxlY3RvcihlbGVtZW50LCBtX3J1bGVTZXQsIGZp
bHRlcik7CisgICAgICAgIHJ1bGVDb2xsZWN0b3Iuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6Ok1v
ZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzKTsKKyAgICAg
ICAgcnVsZUNvbGxlY3Rvci5tYXRjaEF1dGhvclJ1bGVzKGZhbHNlKTsKKworICAgICAgICBpZiAo
cnVsZUNvbGxlY3Rvci5oYXNNYXRjaGVkUnVsZXMoKSkKKyAgICAgICAgICAgIGVsZW1lbnQuaW52
YWxpZGF0ZVN0eWxlKCk7CisgICAgICAgIHJldHVybiBDaGVja0Rlc2NlbmRhbnRzOjpZZXM7Cisg
ICAgfQorICAgIGNhc2UgU3R5bGU6OlZhbGlkaXR5OjpFbGVtZW50SW52YWxpZDoKKyAgICAgICAg
cmV0dXJuIENoZWNrRGVzY2VuZGFudHM6OlllczsKKyAgICBjYXNlIFN0eWxlOjpWYWxpZGl0eTo6
U3VidHJlZUludmFsaWQ6CisgICAgY2FzZSBTdHlsZTo6VmFsaWRpdHk6OlN1YnRyZWVBbmRSZW5k
ZXJlcnNJbnZhbGlkOgorICAgICAgICBpZiAoc2hvdWxkQ2hlY2tGb3JTbG90cykKKyAgICAgICAg
ICAgIHJldHVybiBDaGVja0Rlc2NlbmRhbnRzOjpZZXM7CisgICAgICAgIHJldHVybiBDaGVja0Rl
c2NlbmRhbnRzOjpObzsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIENoZWNrRGVzY2VuZGFudHM6OlllczsKK30KKwordm9pZCBTdHlsZUludmFsaWRhdGlvbkFu
YWx5c2lzOjppbnZhbGlkYXRlU3R5bGVGb3JUcmVlKEVsZW1lbnQmIHJvb3QsIFNlbGVjdG9yRmls
dGVyKiBmaWx0ZXIpCit7CisgICAgaWYgKGludmFsaWRhdGVJZk5lZWRlZChyb290LCBmaWx0ZXIp
ID09IENoZWNrRGVzY2VuZGFudHM6Ok5vKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8
RWxlbWVudCosIDIwPiBwYXJlbnRTdGFjazsKKyAgICBFbGVtZW50KiBwcmV2aW91c0VsZW1lbnQg
PSAmcm9vdDsKKyAgICBhdXRvIGRlc2NlbmRhbnRzID0gZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVu
dD4ocm9vdCk7CisgICAgZm9yIChhdXRvIGl0ID0gZGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0g
ZGVzY2VuZGFudHMuZW5kKCk7IGl0ICE9IGVuZDspIHsKKyAgICAgICAgYXV0byYgZGVzY2VuZGFu
dCA9ICppdDsKKyAgICAgICAgYXV0byogcGFyZW50ID0gZGVzY2VuZGFudC5wYXJlbnRFbGVtZW50
KCk7CisgICAgICAgIGlmIChwYXJlbnRTdGFjay5pc0VtcHR5KCkgfHwgcGFyZW50U3RhY2subGFz
dCgpICE9IHBhcmVudCkgeworICAgICAgICAgICAgaWYgKHBhcmVudCA9PSBwcmV2aW91c0VsZW1l
bnQpIHsKKyAgICAgICAgICAgICAgICBwYXJlbnRTdGFjay5hcHBlbmQocGFyZW50KTsKKyAgICAg
ICAgICAgICAgICBpZiAoZmlsdGVyKQorICAgICAgICAgICAgICAgICAgICBmaWx0ZXItPnB1c2hQ
YXJlbnQocGFyZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd2hp
bGUgKHBhcmVudFN0YWNrLmxhc3QoKSAhPSBwYXJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAg
cGFyZW50U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVy
KQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLT5wb3BQYXJlbnQoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJldmlvdXNFbGVt
ZW50ID0gJmRlc2NlbmRhbnQ7CisKKyAgICAgICAgaWYgKGludmFsaWRhdGVJZk5lZWRlZChkZXNj
ZW5kYW50LCBmaWx0ZXIpID09IENoZWNrRGVzY2VuZGFudHM6OlllcykKKyAgICAgICAgICAgIGl0
LnRyYXZlcnNlTmV4dCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdC50cmF2ZXJzZU5l
eHRTa2lwcGluZ0NoaWxkcmVuKCk7CisgICAgfQorfQorCit2b2lkIFN0eWxlSW52YWxpZGF0aW9u
QW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgQVNT
RVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7CisKKyAgICBFbGVtZW50KiBkb2N1bWVudEVsZW1lbnQg
PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgU2VsZWN0b3JGaWx0ZXIgZmlsdGVyOworICAgIGludmFs
aWRhdGVTdHlsZUZvclRyZWUoKmRvY3VtZW50RWxlbWVudCwgJmZpbHRlcik7Cit9CisKK3ZvaWQg
U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGF0ZVN0eWxlKFNoYWRvd1Jvb3QmIHNo
YWRvd1Jvb3QpCit7CisgICAgQVNTRVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7CisKKyAgICBpZiAo
IW1fcnVsZVNldC5ob3N0UHNldWRvQ2xhc3NSdWxlcygpLmlzRW1wdHkoKSAmJiBzaGFkb3dSb290
Lmhvc3QoKSkKKyAgICAgICAgc2hhZG93Um9vdC5ob3N0KCktPmludmFsaWRhdGVTdHlsZSgpOwor
CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KHNoYWRvd1Jv
b3QpKSB7CisgICAgICAgIFNlbGVjdG9yRmlsdGVyIGZpbHRlcjsKKyAgICAgICAgaW52YWxpZGF0
ZVN0eWxlRm9yVHJlZShjaGlsZCwgJmZpbHRlcik7CisgICAgfQorfQorCit2b2lkIFN0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZShFbGVtZW50JiBlbGVtZW50KQorewor
ICAgIEFTU0VSVCghbV9kaXJ0aWVzQWxsU3R5bGUpOworCisgICAgLy8gRG9uJ3QgdXNlIFNlbGVj
dG9yRmlsdGVyIGFzIHRoZSBydWxlIHNldHMgaGVyZSB0ZW5kIHRvIGJlIHNtYWxsIGFuZCB0aGUg
ZmlsdGVyIHdvdWxkIGhhdmUgc2V0dXAgY29zdCBkZWVwIGluIHRoZSB0cmVlLgorICAgIGludmFs
aWRhdGVTdHlsZUZvclRyZWUoZWxlbWVudCwgbnVsbHB0cik7Cit9CisKK30KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwCShyZXZpc2lvbiAyMTYwNzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgiCisjaW5jbHVkZSAiU3R5bGVJ
bnZhbGlkYXRvci5oIgogCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVu
dHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFN0eWxlIHsKIAogc3RhdGlj
IGJvb2wgc2hvdWxkRGlydHlBbGxTdHlsZShjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJh
c2U+PiYgcnVsZXMpCiB7CkBAIC03Niw3ICs3Nyw3IEBAIHN0YXRpYyBib29sIHNob3VsZERpcnR5
QWxsU3R5bGUoY29uc3QgVmUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVN0eWxlSW52YWxpZGF0
aW9uQW5hbHlzaXM6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMoY29uc3QgVmVjdG9yPFN0eWxl
U2hlZXRDb250ZW50cyo+JiBzaGVldHMsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGlh
UXVlcnlFdmFsdWF0b3IpCitJbnZhbGlkYXRvcjo6SW52YWxpZGF0b3IoY29uc3QgVmVjdG9yPFN0
eWxlU2hlZXRDb250ZW50cyo+JiBzaGVldHMsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1l
ZGlhUXVlcnlFdmFsdWF0b3IpCiAgICAgOiBtX293bmVkUnVsZVNldChzdGQ6Om1ha2VfdW5pcXVl
PFJ1bGVTZXQ+KCkpCiAgICAgLCBtX3J1bGVTZXQoKm1fb3duZWRSdWxlU2V0KQogICAgICwgbV9k
aXJ0aWVzQWxsU3R5bGUoc2hvdWxkRGlydHlBbGxTdHlsZShzaGVldHMpKQpAQCAtOTEsMTMgKzky
LDEzIEBAIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OlN0eWxlSW52YWxpZGEKICAgICBtX2hh
c1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQgPSBtX3J1bGVTZXQuaGFzU2hh
ZG93UHNldWRvRWxlbWVudFJ1bGVzKCk7CiB9CiAKLVN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6
OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMoY29uc3QgUnVsZVNldCYgcnVsZVNldCkKK0ludmFs
aWRhdG9yOjpJbnZhbGlkYXRvcihjb25zdCBSdWxlU2V0JiBydWxlU2V0KQogICAgIDogbV9ydWxl
U2V0KHJ1bGVTZXQpCiAgICAgLCBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9y
U2hlZXQocnVsZVNldC5oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoKSkKIHsKIH0KIAotU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpczo6Q2hlY2tEZXNjZW5kYW50cyBTdHlsZUludmFsaWRhdGlv
bkFuYWx5c2lzOjppbnZhbGlkYXRlSWZOZWVkZWQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU2Vs
ZWN0b3JGaWx0ZXIqIGZpbHRlcikKK0ludmFsaWRhdG9yOjpDaGVja0Rlc2NlbmRhbnRzIEludmFs
aWRhdG9yOjppbnZhbGlkYXRlSWZOZWVkZWQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU2VsZWN0
b3JGaWx0ZXIqIGZpbHRlcikKIHsKICAgICBpZiAobV9oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVs
ZXNJbkF1dGhvclNoZWV0KSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGRvIGFjdHVh
bCBydWxlIG1hdGNoaW5nIHRvby4KQEAgLTEzOCw3ICsxMzksNyBAQCBTdHlsZUludmFsaWRhdGlv
bkFuYWx5c2lzOjpDaGVja0Rlc2NlbmRhCiAgICAgcmV0dXJuIENoZWNrRGVzY2VuZGFudHM6Olll
czsKIH0KIAotdm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjppbnZhbGlkYXRlU3R5bGVG
b3JUcmVlKEVsZW1lbnQmIHJvb3QsIFNlbGVjdG9yRmlsdGVyKiBmaWx0ZXIpCit2b2lkIEludmFs
aWRhdG9yOjppbnZhbGlkYXRlU3R5bGVGb3JUcmVlKEVsZW1lbnQmIHJvb3QsIFNlbGVjdG9yRmls
dGVyKiBmaWx0ZXIpCiB7CiAgICAgaWYgKGludmFsaWRhdGVJZk5lZWRlZChyb290LCBmaWx0ZXIp
ID09IENoZWNrRGVzY2VuZGFudHM6Ok5vKQogICAgICAgICByZXR1cm47CkBAIC0xNzEsNyArMTcy
LDcgQEAgdm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjppbnZhbGlkYQogICAgIH0KIH0K
IAotdm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjppbnZhbGlkYXRlU3R5bGUoRG9jdW1l
bnQmIGRvY3VtZW50KQordm9pZCBJbnZhbGlkYXRvcjo6aW52YWxpZGF0ZVN0eWxlKERvY3VtZW50
JiBkb2N1bWVudCkKIHsKICAgICBBU1NFUlQoIW1fZGlydGllc0FsbFN0eWxlKTsKIApAQCAtMTgz
LDcgKzE4NCw3IEBAIHZvaWQgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGEKICAg
ICBpbnZhbGlkYXRlU3R5bGVGb3JUcmVlKCpkb2N1bWVudEVsZW1lbnQsICZmaWx0ZXIpOwogfQog
Ci12b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZShTaGFkb3dS
b290JiBzaGFkb3dSb290KQordm9pZCBJbnZhbGlkYXRvcjo6aW52YWxpZGF0ZVN0eWxlKFNoYWRv
d1Jvb3QmIHNoYWRvd1Jvb3QpCiB7CiAgICAgQVNTRVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7CiAK
QEAgLTE5Niw3ICsxOTcsNyBAQCB2b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFs
aWRhCiAgICAgfQogfQogCi12b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRh
dGVTdHlsZShFbGVtZW50JiBlbGVtZW50KQordm9pZCBJbnZhbGlkYXRvcjo6aW52YWxpZGF0ZVN0
eWxlKEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7
CiAKQEAgLTIwNSwzICsyMDYsNCBAQCB2b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6Omlu
dmFsaWRhCiB9CiAKIH0KK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxp
ZGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRh
dG9yLmgJKHJldmlzaW9uIDIxNjA3MykJKGZyb20gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXMuaDoyMTYwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZUludmFsaWRhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgRWxlbWVudDsKK2NsYXNzIE1lZGlhUXVl
cnlFdmFsdWF0b3I7CitjbGFzcyBSdWxlU2V0OworY2xhc3MgU2VsZWN0b3JGaWx0ZXI7CitjbGFz
cyBTaGFkb3dSb290OworY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOworCitjbGFzcyBTdHlsZUlu
dmFsaWRhdGlvbkFuYWx5c2lzIHsKK3B1YmxpYzoKKyAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5
c2lzKGNvbnN0IFZlY3RvcjxTdHlsZVNoZWV0Q29udGVudHMqPiYsIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImKTsKKyAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzKGNvbnN0IFJ1bGVTZXQm
KTsKKworICAgIGJvb2wgZGlydGllc0FsbFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9kaXJ0aWVz
QWxsU3R5bGU7IH0KKyAgICBib29sIGhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9y
U2hlZXQoKSBjb25zdCB7IHJldHVybiBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0
aG9yU2hlZXQ7IH0KKyAgICB2b2lkIGludmFsaWRhdGVTdHlsZShEb2N1bWVudCYpOworICAgIHZv
aWQgaW52YWxpZGF0ZVN0eWxlKFNoYWRvd1Jvb3QmKTsKKyAgICB2b2lkIGludmFsaWRhdGVTdHls
ZShFbGVtZW50Jik7CisKK3ByaXZhdGU6CisgICAgZW51bSBjbGFzcyBDaGVja0Rlc2NlbmRhbnRz
IHsgWWVzLCBObyB9OworICAgIENoZWNrRGVzY2VuZGFudHMgaW52YWxpZGF0ZUlmTmVlZGVkKEVs
ZW1lbnQmLCBjb25zdCBTZWxlY3RvckZpbHRlciopOworICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxl
Rm9yVHJlZShFbGVtZW50JiwgU2VsZWN0b3JGaWx0ZXIqKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxSdWxlU2V0PiBtX293bmVkUnVsZVNldDsKKyAgICBjb25zdCBSdWxlU2V0JiBtX3J1bGVTZXQ7
CisgICAgYm9vbCBtX2RpcnRpZXNBbGxTdHlsZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1No
YWRvd1BzZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9kaWRJbnZhbGlkYXRlSG9zdENoaWxkcmVuIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmgJ
KHJldmlzaW9uIDIxNjA3MykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDE0LCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTAgKzM3LDEyIEBAIGNsYXNzIFNl
bGVjdG9yRmlsdGVyOwogY2xhc3MgU2hhZG93Um9vdDsKIGNsYXNzIFN0eWxlU2hlZXRDb250ZW50
czsKIAotY2xhc3MgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcyB7CituYW1lc3BhY2UgU3R5bGUg
eworCitjbGFzcyBJbnZhbGlkYXRvciB7CiBwdWJsaWM6Ci0gICAgU3R5bGVJbnZhbGlkYXRpb25B
bmFseXNpcyhjb25zdCBWZWN0b3I8U3R5bGVTaGVldENvbnRlbnRzKj4mLCBjb25zdCBNZWRpYVF1
ZXJ5RXZhbHVhdG9yJik7Ci0gICAgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcyhjb25zdCBSdWxl
U2V0Jik7CisgICAgSW52YWxpZGF0b3IoY29uc3QgVmVjdG9yPFN0eWxlU2hlZXRDb250ZW50cyo+
JiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYpOworICAgIEludmFsaWRhdG9yKGNvbnN0IFJ1
bGVTZXQmKTsKIAogICAgIGJvb2wgZGlydGllc0FsbFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9k
aXJ0aWVzQWxsU3R5bGU7IH0KICAgICBib29sIGhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0lu
QXV0aG9yU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX2hhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxl
c0luQXV0aG9yU2hlZXQ7IH0KQEAgLTYwLDQgKzYyLDUgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
ZGlkSW52YWxpZGF0ZUhvc3RDaGlsZHJlbiB7IGZhbHNlIH07CiB9OwogCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCit9Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAkocmV2
aXNpb24gMjE2MDczKQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJTVkdTdHlsZUVsZW1lbnQu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNs
dWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgiCisjaW5jbHVkZSAiU3R5bGVJbnZhbGlk
YXRvci5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0
Q29udGVudHMuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgpAQCAtMzk3LDE0ICszOTcs
MTQgQEAgU2NvcGU6OlN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIFNjb3BlOjphbgogICAgIGlmICgh
bV9kb2N1bWVudC5ib2R5T3JGcmFtZXNldCgpIHx8IG1fZG9jdW1lbnQuaGFzTm9kZXNXaXRoTm9u
RmluYWxTdHlsZSgpIHx8IG1fZG9jdW1lbnQuaGFzTm9kZXNXaXRoTWlzc2luZ1N0eWxlKCkpCiAg
ICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVyVXBkYXRlVHlwZTsKIAotICAgIFN0eWxlSW52YWxp
ZGF0aW9uQW5hbHlzaXMgaW52YWxpZGF0aW9uQW5hbHlzaXMoYWRkZWRTaGVldHMsIHN0eWxlUmVz
b2x2ZXIubWVkaWFRdWVyeUV2YWx1YXRvcigpKTsKLSAgICBpZiAoaW52YWxpZGF0aW9uQW5hbHlz
aXMuZGlydGllc0FsbFN0eWxlKCkpCisgICAgSW52YWxpZGF0b3IgaW52YWxpZGF0b3IoYWRkZWRT
aGVldHMsIHN0eWxlUmVzb2x2ZXIubWVkaWFRdWVyeUV2YWx1YXRvcigpKTsKKyAgICBpZiAoaW52
YWxpZGF0b3IuZGlydGllc0FsbFN0eWxlKCkpCiAgICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVy
VXBkYXRlVHlwZTsKIAogICAgIGlmIChtX3NoYWRvd1Jvb3QpCi0gICAgICAgIGludmFsaWRhdGlv
bkFuYWx5c2lzLmludmFsaWRhdGVTdHlsZSgqbV9zaGFkb3dSb290KTsKKyAgICAgICAgaW52YWxp
ZGF0b3IuaW52YWxpZGF0ZVN0eWxlKCptX3NoYWRvd1Jvb3QpOwogICAgIGVsc2UKLSAgICAgICAg
aW52YWxpZGF0aW9uQW5hbHlzaXMuaW52YWxpZGF0ZVN0eWxlKG1fZG9jdW1lbnQpOworICAgICAg
ICBpbnZhbGlkYXRvci5pbnZhbGlkYXRlU3R5bGUobV9kb2N1bWVudCk7CiAKICAgICByZXF1aXJl
c0Z1bGxTdHlsZVJlY2FsYyA9IGZhbHNlOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>