<?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>71787</bug_id>
          
          <creation_ts>2011-11-08 02:38:02 -0800</creation_ts>
          <short_desc>DFG OSR exit code should be generated by a separate compiler, not related to DFG::JITCompiler</short_desc>
          <delta_ts>2011-11-08 17:01:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>71744</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>yuqiang.xian</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>497877</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-08 02:38:02 -0800</bug_when>
    <thetext>patch forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497878</commentid>
    <comment_count>1</comment_count>
      <attachid>114020</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-08 02:40:00 -0800</bug_when>
    <thetext>Created attachment 114020
work in progress

Still need to do this for 32_64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497895</commentid>
    <comment_count>2</comment_count>
      <attachid>114026</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-08 03:12:03 -0800</bug_when>
    <thetext>Created attachment 114026
work in progress

This is not the real patch; I want to see what happens on the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497901</commentid>
    <comment_count>3</comment_count>
      <attachid>114029</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-08 03:20:53 -0800</bug_when>
    <thetext>Created attachment 114029
work in progress

Did some merging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497913</commentid>
    <comment_count>4</comment_count>
      <attachid>114029</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-08 03:40:14 -0800</bug_when>
    <thetext>Comment on attachment 114029
work in progress

Attachment 114029 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10374047</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497925</commentid>
    <comment_count>5</comment_count>
      <attachid>114029</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-11-08 03:58:20 -0800</bug_when>
    <thetext>Comment on attachment 114029
work in progress

Attachment 114029 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10369063</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498418</commentid>
    <comment_count>6</comment_count>
      <attachid>114150</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-08 14:01:20 -0800</bug_when>
    <thetext>Created attachment 114150
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498422</commentid>
    <comment_count>7</comment_count>
      <attachid>114150</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-11-08 14:05:47 -0800</bug_when>
    <thetext>Comment on attachment 114150
the patch

Please update per http://trac.webkit.org/changeset/99614 (basically replace the calls to jitcode start() with calls to the new executableAddressAtOffset to get a THUMB2 safe address).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498424</commentid>
    <comment_count>8</comment_count>
      <attachid>114151</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-08 14:15:12 -0800</bug_when>
    <thetext>Created attachment 114151
the patch

Merged with http://trac.webkit.org/changeset/99614</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498507</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-08 16:21:29 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/99629</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498526</commentid>
    <comment_count>10</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-11-08 16:52:27 -0800</bug_when>
    <thetext>I guess the Gtk make list should by updated accordingly, i.e. Source/JavaScriptCore/GNUmakefile.list.am</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498531</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-08 17:01:45 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; I guess the Gtk make list should by updated accordingly, i.e. Source/JavaScriptCore/GNUmakefile.list.am

Oops!  Fixed in http://trac.webkit.org/changeset/99637</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114020</attachid>
            <date>2011-11-08 02:40:00 -0800</date>
            <delta_ts>2011-11-08 03:12:03 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>osrexit_patch_1.diff</filename>
            <type>text/plain</type>
            <size>61385</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5OTUyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw4IEBACiAJCTBGQzA5NzZBMTQ2OEE2Rjcw
MENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIgLyogREZHT1NSRXhpdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzA5NzZE
MTQ2OEFCNEUwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzZDMTQ2OEFCNEEwMENGMjQ0MiAv
KiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkMwOTc2RTE0NjhBQjUxMDBDRjI0NDIgLyogREZHQXNzZW1ibHlI
ZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuY3BwICovOyB9
OworCQkwRkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc2RjE0Njkz
QUVGMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDMDk3NzIxNDY5M0FGOTAwQ0YyNDQyIC8q
IERGR09TUkV4aXRDb21waWxlcjY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzA5NzcwMTQ2OTNBRUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29t
cGlsZXI2NC5jcHAgKi87IH07CiAJCTBGQzgxNTBBMTQwNDNCRjUwMENGQTYwMyAvKiBXcml0ZUJh
cnJpZXJTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzgxNTBC
MTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTA4MTQwNDNCQ0EwMENGQTYw
MyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLzsgfTsKIAkJMEZDODE1MTUxNDA1MTE5QjAw
Q0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUxNDE0MDUxMThEMDBDRkE2MDMgLyogVlRhYmxlU3BlY3Ry
dW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
ODM5LDYgKzg0MSw4IEBACiAJCTBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXQuaDsgcGF0aCA9
IGRmZy9ERkdPU1JFeGl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzZC
MTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXNzZW1ibHlIZWxwZXJzLmNwcDsgcGF0aCA9IGRm
Zy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fzc2VtYmx5SGVscGVycy5oOyBwYXRoID0gZGZn
L0RGR0Fzc2VtYmx5SGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMw
OTc2RjE0NjkzQUVGMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlci5oOyBwYXRoID0gZGZnL0RG
R09TUkV4aXRDb21waWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMwOTc3
MDE0NjkzQUVGMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOyBwYXRo
ID0gZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV3JpdGVCYXJyaWVyU3VwcG9y
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA5MTQwNDNCRDIwMENG
QTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyOTgsNiArMjMwMiw4IEBACiAJCTg2RUM5REIzMTMy
OERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCTBGQzA5NzZGMTQ2OTNBRUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGls
ZXIuaCAqLywKKwkJCQkwRkMwOTc3MDE0NjkzQUVGMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBp
bGVyNjQuY3BwICovLAogCQkJCTBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJs
eUhlbHBlcnMuY3BwICovLAogCQkJCTBGQzA5NzZDMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3Nl
bWJseUhlbHBlcnMuaCAqLywKIAkJCQkwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIgLyogREZHT1NS
RXhpdC5oICovLApAQCAtMjkxMiw2ICsyOTE4LDcgQEAKIAkJCQkwRjJFNUJGNzE0NjM1N0Q1MDAz
RUIyRUIgLyogU3BlY3RydW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzZBMTQ2OEE2Rjcw
MENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc2RDE0NjhB
QjRFMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTM0NDQsNiArMzQ1MSw3IEBACiAJCQkJMEY2MjAxNzkxNDNGQ0Q0ODAwNjhCNzdD
IC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzQzRDQTAxNDU4
RjU0NTAwMjVGQjYyIC8qIEpTR2xvYmFsVGhpcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMw
OTc2RTE0NjhBQjUxMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGQzA5NzcyMTQ2OTNBRjkwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXI2
NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5OTUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdKSVRDb2RlR2VuZXJh
dG9yLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1JlZ2lzdGVyQmFuay5oIgogI2luY2x1ZGUgIkRGR1Nw
ZWN1bGF0aXZlSklULmgiCkBAIC00MCwxMiArNDEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCiB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVK
SVQmIHNwZWN1bGF0aXZlKQogeworICAgIE9TUkV4aXRDb21waWxlciBvc3JFeGl0Q29tcGlsZXIo
KnRoaXMpOworICAgIAogICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJhdG9yIGV4aXRzSXRlciA9IHNw
ZWN1bGF0aXZlLm9zckV4aXRzKCkuYmVnaW4oKTsKICAgICBPU1JFeGl0VmVjdG9yOjpJdGVyYXRv
ciBleGl0c0VuZCA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuZW5kKCk7CiAgICAgCiAgICAgd2hp
bGUgKGV4aXRzSXRlciAhPSBleGl0c0VuZCkgewogICAgICAgICBjb25zdCBPU1JFeGl0JiBleGl0
ID0gKmV4aXRzSXRlcjsKLSAgICAgICAgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihleGl0LCBzcGVj
dWxhdGl2ZS5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNvdmVyeUluZGV4KSk7CisgICAg
ICAgIG9zckV4aXRDb21waWxlci5jb21waWxlRXhpdChleGl0LCBzcGVjdWxhdGl2ZS5zcGVjdWxh
dGlvblJlY292ZXJ5KGV4aXQubV9yZWNvdmVyeUluZGV4KSk7CiAgICAgICAgICsrZXhpdHNJdGVy
OwogICAgIH0KIH0KQEAgLTI3NSw1MzEgKzI3OCw2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBp
bGVGdW5jdGlvbihKSVRDb2QKICAgICBlbnRyeSA9IEpJVENvZGUobGlua0J1ZmZlci5maW5hbGl6
ZUNvZGUoKSwgSklUQ29kZTo6REZHSklUKTsKIH0KIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0KLXZv
aWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYgZXhp
dCwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCi17Ci0gICAgLy8gMSkgUHJvLWZvcm1h
IHN0dWZmLgotICAgIGV4aXQubV9jaGVjay5saW5rKHRoaXMpOwotCi0jaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQotICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4aXQgZm9yIE5vZGUgQCVk
ICgiLCAoaW50KWV4aXQubV9ub2RlSW5kZXgpOwotICAgIGZvciAoQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luID0gZXhpdC5tX2NvZGVPcmlnaW47IDsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZXIpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJiYyMldSIsIGNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIg
LT4gJXAgIiwgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOwot
ICAgIH0KLSAgICBmcHJpbnRmKHN0ZGVyciwgIikgYXQgSklUIG9mZnNldCAweCV4ICAiLCBkZWJ1
Z09mZnNldCgpKTsKLSAgICBleGl0LmR1bXAoc3RkZXJyKTsKLSNlbmRpZgotI2lmIERGR19FTkFC
TEUoVkVSQk9TRV9TUEVDVUxBVElPTl9GQUlMVVJFKQotICAgIFNwZWN1bGF0aW9uRmFpbHVyZURl
YnVnSW5mbyogZGVidWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbzsKLSAg
ICBkZWJ1Z0luZm8tPmNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwotICAgIGRlYnVnSW5mby0+ZGVi
dWdPZmZzZXQgPSBkZWJ1Z09mZnNldCgpOwotICAgIAotICAgIGRlYnVnQ2FsbChkZWJ1Z09wZXJh
dGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOwotI2VuZGlmCi0gICAgCi0j
aWYgREZHX0VOQUJMRShKSVRfQlJFQUtfT05fU1BFQ1VMQVRJT05fRkFJTFVSRSkKLSAgICBicmVh
a3BvaW50KCk7Ci0jZW5kaWYKLSAgICAKLSNpZiBERkdfRU5BQkxFKFNVQ0NFU1NfU1RBVFMpCi0g
ICAgc3RhdGljIFNhbXBsaW5nQ291bnRlciBjb3VudGVyKCJTcGVjdWxhdGlvbkZhaWx1cmUiKTsK
LSAgICBlbWl0Q291bnQoY291bnRlcik7Ci0jZW5kaWYKLSAgICAKLSAgICAvLyAyKSBQZXJmb3Jt
IHNwZWN1bGF0aW9uIHJlY292ZXJ5LiBUaGlzIG9ubHkgY29tZXMgaW50byBwbGF5IHdoZW4gYW4g
b3BlcmF0aW9uCi0gICAgLy8gICAgc3RhcnRzIG11dGF0aW5nIHN0YXRlIGJlZm9yZSB2ZXJpZnlp
bmcgdGhlIHNwZWN1bGF0aW9uIGl0IGhhcyBhbHJlYWR5IG1hZGUuCi0gICAgCi0gICAgR1BSUmVn
IGFscmVhZHlCb3hlZCA9IEludmFsaWRHUFJSZWc7Ci0gICAgCi0gICAgaWYgKHJlY292ZXJ5KSB7
Ci0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5cGUoKSkgewotICAgICAgICBjYXNlIFNwZWN1
bGF0aXZlQWRkOgotICAgICAgICAgICAgc3ViMzIocmVjb3ZlcnktPnNyYygpLCByZWNvdmVyeS0+
ZGVzdCgpKTsKLSAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgcmVjb3ZlcnktPmRlc3QoKSk7Ci0gICAgICAgICAgICBhbHJlYWR5Qm94ZWQgPSByZWNvdmVy
eS0+ZGVzdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBCb29sZWFuU3BlY3VsYXRpb25DaGVjazoKLSAgICAgICAgICAgIHhvclB0cihUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZWNvdmVyeS0+ZGVzdCgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIDMpIFJlZmluZSBzb21l
IHZhbHVlIHByb2ZpbGUsIGlmIGFwcHJvcHJpYXRlLgotICAgIAotICAgIGlmICghIWV4aXQubV9q
c1ZhbHVlU291cmNlICYmICEhZXhpdC5tX3ZhbHVlUHJvZmlsZSkgewotICAgICAgICBpZiAoZXhp
dC5tX2pzVmFsdWVTb3VyY2UuaXNBZGRyZXNzKCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGNhbid0
IGJlIHN1cmUgdGhhdCB3ZSBoYXZlIGEgc3BhcmUgcmVnaXN0ZXIuIFNvIHVzZSB0aGUgdGFnVHlw
ZU51bWJlclJlZ2lzdGVyLAotICAgICAgICAgICAgLy8gc2luY2Ugd2Uga25vdyBob3cgdG8gcmVz
dG9yZSBpdC4KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhleGl0Lm1fanNWYWx1ZVNvdXJj
ZS5hc0FkZHJlc3MoKSksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAg
ICAgICBzdG9yZVB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGV4aXQubV92YWx1
ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KFRhZ1R5cGVOdW1iZXIpKSwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdG9yZVB0cihl
eGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKSwgZXhpdC5tX3ZhbHVlUHJvZmlsZS0+c3BlY0ZhaWxC
dWNrZXQoMCkpOwotICAgIH0KLQotICAgIC8vIDQpIEZpZ3VyZSBvdXQgaG93IG1hbnkgc2NyYXRj
aCBzbG90cyB3ZSdsbCBuZWVkLiBXZSBuZWVkIG9uZSBmb3IgZXZlcnkgR1BSL0ZQUgotICAgIC8v
ICAgIHdob3NlIGRlc3RpbmF0aW9uIGlzIG5vdyBvY2N1cGllZCBieSBhIERGRyB2aXJ0dWFsIHJl
Z2lzdGVyLCBhbmQgd2UgbmVlZAotICAgIC8vICAgIG9uZSBmb3IgZXZlcnkgZGlzcGxhY2VkIHZp
cnR1YWwgcmVnaXN0ZXIgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbgotICAgIC8vICAgIEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzIG9mIHRoZW0uIEFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29u
c3RhbnRzLAotICAgIC8vICAgIGFueSB1bmRlZmluZWQgc2xvdHMsIGFueSBGUFIgc2xvdHMsIGFu
ZCBhbnkgdW5ib3hlZCBpbnRzLgotICAgICAgICAgICAgCi0gICAgVmVjdG9yPGJvb2w+IHBvaXNv
bmVkVmlydHVhbFJlZ2lzdGVycyhleGl0Lm1fdmFyaWFibGVzLnNpemUoKSk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycy5zaXplKCk7ICsraSkK
LSAgICAgICAgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2ldID0gZmFsc2U7Ci0KLSAgICB1bnNp
Z25lZCBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyA9IDA7Ci0gICAgdW5zaWduZWQg
bnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzID0gMDsKLSAgICAKLSAgICAvLyBCb29s
ZWFucyBmb3IgZmFzdCBjaGVja3MuIFdlIGV4cGVjdCB0aGF0IG1vc3QgT1NSIGV4aXRzIGRvIG5v
dCBoYXZlIHRvIHJlYm94Ci0gICAgLy8gSW50MzJzLCBoYXZlIG5vIEZQUnMsIGFuZCBoYXZlIG5v
IGNvbnN0YW50cy4gSWYgdGhlcmUgYXJlIGNvbnN0YW50cywgd2UKLSAgICAvLyBleHBlY3QgbW9z
dCBvZiB0aGVtIHRvIGJlIGpzVW5kZWZpbmVkKCk7IGlmIHRoYXQncyB0cnVlIHRoZW4gd2UgaGFu
ZGxlIHRoYXQKLSAgICAvLyBzcGVjaWFsbHkgdG8gbWluaW1pemUgY29kZSBzaXplIGFuZCBleGVj
dXRpb24gdGltZS4KLSAgICBib29sIGhhdmVVbmJveGVkSW50MzJzID0gZmFsc2U7Ci0gICAgYm9v
bCBoYXZlRlBScyA9IGZhbHNlOwotICAgIGJvb2wgaGF2ZUNvbnN0YW50cyA9IGZhbHNlOwotICAg
IGJvb2wgaGF2ZVVuZGVmaW5lZCA9IGZhbHNlOwotICAgIAotICAgIGZvciAoaW50IGluZGV4ID0g
MDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAg
IGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4
KTsKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNl
IEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIGNhc2UgRG91YmxlRGlzcGxh
Y2VkSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6
Ci0gICAgICAgICAgICBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMrKzsKLSAgICAg
ICAgICAgIEFTU0VSVCgoaW50KXJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpID49IDApOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBTZWUgaWYgd2UgbWlnaHQgbGlrZSB0byBzdG9yZSB0
byB0aGlzIHZpcnR1YWwgcmVnaXN0ZXIgYmVmb3JlIGRvaW5nCi0gICAgICAgICAgICAvLyB2aXJ0
dWFsIHJlZ2lzdGVyIHNodWZmbGluZy4gSWYgc28sIHdlIHNheSB0aGF0IHRoZSB2aXJ0dWFsIHJl
Z2lzdGVyCi0gICAgICAgICAgICAvLyBpcyBwb2lzb25lZDogaXQgY2Fubm90IGJlIHN0b3JlZCB0
byB1bnRpbCBhZnRlciBkaXNwbGFjZWQgdmlydHVhbAotICAgICAgICAgICAgLy8gcmVnaXN0ZXJz
IGFyZSBoYW5kbGVkLiBXZSB0cmFjayBwb2lzb25lZCB2aXJ0dWFsIHJlZ2lzdGVyIGNhcmVmdWxs
eQotICAgICAgICAgICAgLy8gdG8gZW5zdXJlIHRoaXMgaGFwcGVucyBlZmZpY2llbnRseS4gTm90
ZSB0aGF0IHdlIGV4cGVjdCB0aGlzIGNhc2UKLSAgICAgICAgICAgIC8vIHRvIGJlIHJhcmUsIHNv
IHRoZSBoYW5kbGluZyBvZiBpdCBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlcyBpbgotICAgICAg
ICAgICAgLy8gd2hpY2ggaXQgZG9lcyBub3QgaGFwcGVuLgotICAgICAgICAgICAgaWYgKHJlY292
ZXJ5LnZpcnR1YWxSZWdpc3RlcigpIDwgKGludClleGl0Lm1fdmFyaWFibGVzLnNpemUoKSkgewot
ICAgICAgICAgICAgICAgIHN3aXRjaCAoZXhpdC5tX3ZhcmlhYmxlc1tyZWNvdmVyeS52aXJ0dWFs
UmVnaXN0ZXIoKV0udGVjaG5pcXVlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEluR1BSOgot
ICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBJbkZQUjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCld
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mUG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzKys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKLSAgICAgICAg
Y2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRJbnQzMjoKLSAgICAgICAgICAgIGhh
dmVVbmJveGVkSW50MzJzID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAgICBoYXZlRlBScyA9IHRydWU7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENvbnN0YW50OgotICAg
ICAgICAgICAgaGF2ZUNvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAocmVjb3Zlcnku
Y29uc3RhbnQoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIGhhdmVVbmRlZmluZWQg
PSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIik7Ci0gICAgaWYg
KG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKQotICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIlBvaXNvbmVkPSV1ICIsIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKLSAg
ICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKQotICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkRpc3BsYWNlZD0ldSAiLCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3Rl
cnMpOwotICAgIGlmIChoYXZlVW5ib3hlZEludDMycykKLSAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJVbmJveGVkSW50MzIgIik7Ci0gICAgaWYgKGhhdmVGUFJzKQotICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkZQUiAiKTsKLSAgICBpZiAoaGF2ZUNvbnN0YW50cykKLSAgICAgICAgZnByaW50Zihz
dGRlcnIsICJDb25zdGFudHMgIik7Ci0gICAgaWYgKGhhdmVVbmRlZmluZWQpCi0gICAgICAgIGZw
cmludGYoc3RkZXJyLCAiVW5kZWZpbmVkICIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiICIpOwot
I2VuZGlmCi0gICAgCi0gICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2hCdWZmZXIgPSBzdGF0aWNf
Y2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGdsb2JhbERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUo
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVy
cyArIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnMgPyAwIDogbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSkpKTsK
LQotICAgIC8vIEZyb20gaGVyZSBvbiwgdGhlIGNvZGUgYXNzdW1lcyB0aGF0IGl0IGlzIHByb2Zp
dGFibGUgdG8gbWF4aW1pemUgdGhlIGRpc3RhbmNlCi0gICAgLy8gYmV0d2VlbiB3aGVuIHNvbWV0
aGluZyBpcyBjb21wdXRlZCBhbmQgd2hlbiBpdCBpcyBzdG9yZWQuCi0gICAgCi0gICAgLy8gNSkg
UGVyZm9ybSBhbGwgcmVib3hpbmcgb2YgaW50ZWdlcnMuCi0gICAgCi0gICAgaWYgKGhhdmVVbmJv
eGVkSW50MzJzKSB7Ci0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51
bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFVuYm94
ZWRJbnQzMkluR1BSOgotICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS5ncHIoKSAhPSBhbHJl
YWR5Qm94ZWQpCi0gICAgICAgICAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgcmVjb3ZlcnkuZ3ByKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1Vu
Ym94ZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBzdG9yZTMyKEltbTMyKHN0YXRpY19jYXN0PHVp
bnQzMl90PihUYWdUeXBlTnVtYmVyID4+IDMyKSksIHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0g
ICAgLy8gNikgRHVtcCBhbGwgbm9uLXBvaXNvbmVkIEdQUnMuIEZvciBwb2lzb25lZCBHUFJzLCBz
YXZlIHRoZW0gaW50byB0aGUgc2NyYXRjaCBzdG9yYWdlLgotICAgIC8vICAgIE5vdGUgdGhhdCBH
UFJzIGRvIG5vdCBoYXZlIGEgZmFzdCBjaGFuZ2UgKGxpa2UgaGF2ZUZQUnMpIGJlY2F1c2Ugd2Ug
ZXhwZWN0IHRoYXQKLSAgICAvLyAgICBtb3N0IE9TUiBmYWlsdXJlIHBvaW50cyB3aWxsIGhhdmUg
YXQgbGVhc3Qgb25lIEdQUiB0aGF0IG5lZWRzIHRvIGJlIGR1bXBlZC4KLSAgICAKLSAgICB1bnNp
Z25lZCBzY3JhdGNoSW5kZXggPSAwOwotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBl
eGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAg
aW50IG9wZXJhbmQgPSBleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7Ci0gICAgICAgIHN3aXRj
aCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2FzZSBJbkdQUjoKLSAgICAgICAg
Y2FzZSBVbmJveGVkSW50MzJJbkdQUjoKLSAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUo
aW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgo
aW5kZXgpXSkKLSAgICAgICAgICAgICAgICBzdG9yZVB0cihyZWNvdmVyeS5ncHIoKSwgc2NyYXRj
aEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBzdG9yZVB0cihyZWNvdmVyeS5ncHIoKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVy
KW9wZXJhbmQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gQXQgdGhpcyBwb2lu
dCBhbGwgR1BScyBhcmUgYXZhaWxhYmxlIGZvciBzY3JhdGNoIHVzZS4KLSAgICAKLSAgICBpZiAo
aGF2ZUZQUnMpIHsKLSAgICAgICAgLy8gNykgQm94IGFsbCBkb3VibGVzIChyZWxpZXMgb24gdGhl
cmUgYmVpbmcgbW9yZSBHUFJzIHRoYW4gRlBScykKLSAgICAgICAgCi0gICAgICAgIGZvciAoaW50
IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7
Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVS
ZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0g
SW5GUFIpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBGUFJSZWcgZnBy
ID0gcmVjb3ZlcnkuZnByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9S
ZWdpc3RlcihGUFJJbmZvOjp0b0luZGV4KGZwcikpOwotICAgICAgICAgICAgYm94RG91YmxlKGZw
ciwgZ3ByKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gOCkgRHVtcCBhbGwgZG91
YmxlcyBpbnRvIHRoZSByZWdpc3RlciBmaWxlLCBvciB0byB0aGUgc2NyYXRjaCBzdG9yYWdlIGlm
Ci0gICAgICAgIC8vICAgIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIHJlZ2lzdGVyIGlzIHBvaXNv
bmVkLgotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQu
bnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAg
ICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQ
UkluZm86OnRvSW5kZXgocmVjb3ZlcnkuZnByKCkpKTsKLSAgICAgICAgICAgIGlmIChleGl0Lmlz
VmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSkKLSAgICAgICAgICAgICAgICBzdG9yZVB0cihncHIsIHNjcmF0Y2hC
dWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgc3RvcmVQdHIoZ3ByLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5k
Rm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKHNj
cmF0Y2hJbmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyk7Ci0gICAgCi0g
ICAgLy8gOSkgUmVzaHVmZmxlIGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVycy4gT3B0aW1pemUg
Zm9yIHRoZSBjYXNlIHRoYXQKLSAgICAvLyAgICB0aGUgbnVtYmVyIG9mIGRpc3BsYWNlZCB2aXJ0
dWFsIHJlZ2lzdGVycyBpcyBub3QgbW9yZSB0aGFuIHRoZSBudW1iZXIKLSAgICAvLyAgICBvZiBh
dmFpbGFibGUgcGh5c2ljYWwgcmVnaXN0ZXJzLgotICAgIAotICAgIGlmIChudW1iZXJPZkRpc3Bs
YWNlZFZpcnR1YWxSZWdpc3RlcnMpIHsKLSAgICAgICAgaWYgKG51bWJlck9mRGlzcGxhY2VkVmly
dHVhbFJlZ2lzdGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycykgewotICAgICAgICAg
ICAgLy8gU28gZmFyIHRoaXMgYXBwZWFycyB0byBiZSB0aGUgY2FzZSB0aGF0IHRyaWdnZXJzIGFs
bCB0aGUgdGltZSwgYnV0Ci0gICAgICAgICAgICAvLyB0aGF0IGlzIGZhciBmcm9tIGd1YXJhbnRl
ZWQuCi0gICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgZGlzcGxhY2VtZW50SW5kZXggPSAw
OwotICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICAgICAgICAgIGNhc2Ug
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRk
cmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIo
ZGlzcGxhY2VtZW50SW5kZXgrKykpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVn
aXN0ZXJGaWxlOiB7Ci0gICAgICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0
b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspOwotICAgICAgICAgICAgICAgICAgICBsb2Fk
MzIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIGdwcik7Ci0gICAgICAg
ICAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluUmVnaXN0
ZXJGaWxlOiB7Ci0gICAgICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspOwotICAgICAgICAgICAgICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBncHIpOwotICAgICAgICAg
ICAgICAgICAgICBzdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgICAgICBkaXNwbGFjZW1lbnRJbmRleCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRl
eCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAg
ICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJl
Y292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAg
ICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgICAg
ICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsr
KSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4
KSkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgc2h1ZmZsaW5nIGFsZ29yaXRobSB0aGF0
IHdlIHVzZQotICAgICAgICAgICAgLy8gZm9yIHNwZWN1bGF0aXZlLT5ub24tc3BlY3VsYXRpdmUg
anVtcHMsIGlmIHdlIGV2ZXIgZGlzY292ZXIgdGhhdAotICAgICAgICAgICAgLy8gc29tZSBob3Qg
Y29kZSB3aXRoIGxvdHMgb2YgbGl2ZSB2YWx1ZXMgdGhhdCBnZXQgZGlzcGxhY2VkIGFuZAotICAg
ICAgICAgICAgLy8gc3BpbGxlZCByZWFsbHkgZW5qb3lzIGZyZXF1ZW50bHkgZmFpbGluZyBzcGVj
dWxhdGlvbi4KLSAgICAgICAgCi0gICAgICAgICAgICAvLyBGb3Igbm93IHRoaXMgY29kZSBpcyBl
bmdpbmVlcmVkIHRvIGJlIGNvcnJlY3QgYnV0IHByb2JhYmx5IG5vdAotICAgICAgICAgICAgLy8g
c3VwZXIuIEluIHBhcnRpY3VsYXIsIGl0IGNvcnJlY3RseSBoYW5kbGVzIGNhc2VzIHdoZXJlIGZv
ciBleGFtcGxlCi0gICAgICAgICAgICAvLyB0aGUgZGlzcGxhY2VtZW50cyBhcmUgYSBwZXJtdXRh
dGlvbiBvZiB0aGUgZGVzdGluYXRpb24gdmFsdWVzLCBsaWtlCi0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gMSAtPiAyCi0gICAgICAgICAgICAvLyAyIC0+IDEKLSAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICAvLyBJdCBhY2NvbXBsaXNoZXMgdGhpcyBieSBzaW1wbHkgbGlmdGluZyBh
bGwgb2YgdGhlIHZpcnR1YWwgcmVnaXN0ZXJzCi0gICAgICAgICAgICAvLyBmcm9tIHRoZWlyIG9s
ZCAoREZHIEpJVCkgbG9jYXRpb25zIGFuZCBkcm9wcGluZyB0aGVtIGluIGEgc2NyYXRjaAotICAg
ICAgICAgICAgLy8gbG9jYXRpb24gaW4gbWVtb3J5LCBhbmQgdGhlbiB0cmFuc2ZlcnJpbmcgZnJv
bSB0aGF0IHNjcmF0Y2ggbG9jYXRpb24KLSAgICAgICAgICAgIC8vIHRvIHRoZWlyIG5ldyAob2xk
IEpJVCkgbG9jYXRpb25zLgotICAgICAgICAKLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0g
MDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3Zl
cnkoaW5kZXgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAocmVj
b3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVn
aXN0ZXJGaWxlOgotICAgICAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4
KyspOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOiB7Ci0gICAg
ICAgICAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3Rl
cigpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBvclB0cihHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAg
ICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5k
ZXgrKyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZTogewotICAgICAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
cmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86
OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNj
cmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgIHNjcmF0Y2hJbmRleCA9IG51
bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzOwotICAgICAgICAgICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAg
ICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVS
ZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlx
dWUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAg
ICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgICAg
ICAgICAgICAgIGxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBh
ZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKHNj
cmF0Y2hJbmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyArIG51bWJlck9m
RGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
Ly8gMTApIER1bXAgYWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXJzLgotICAgIAotICAgIHNj
cmF0Y2hJbmRleCA9IDA7Ci0gICAgaWYgKG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJz
KSB7Ci0gICAgICAgIGZvciAoaW50IHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3Rl
ciA8IChpbnQpZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7Ci0g
ICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1t2aXJ0dWFsUmVnaXN0ZXJd
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQubV92YXJpYWJsZXNbdmlydHVhbFJl
Z2lzdGVyXTsKLSAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAg
ICAgICAgICAgIGNhc2UgSW5HUFI6Ci0gICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BS
OgotICAgICAgICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAgICAgICBsb2FkUHRyKHNjcmF0
Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKywgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAg
ICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
dmlydHVhbFJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVt
YmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOwotICAgIAotICAgIC8vIDExKSBEdW1wIGFs
bCBjb25zdGFudHMuIE9wdGltaXplIGZvciBVbmRlZmluZWQsIHNpbmNlIHRoYXQncyBhIGNvbnN0
YW50IHdlIHNlZQotICAgIC8vICAgICBvZnRlbi4KLQotICAgIGlmIChoYXZlQ29uc3RhbnRzKSB7
Ci0gICAgICAgIGlmIChoYXZlVW5kZWZpbmVkKQotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICAgICAgCi0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9m
UmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5
JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICBpZiAo
cmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ29uc3RhbnQpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQoKS5pc1VuZGVmaW5lZCgpKQot
ICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNv
ZGUocmVjb3ZlcnkuY29uc3RhbnQoKSkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhp
dC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
Ly8gMTIpIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJl
IGV4aXRpbmcgT1NSLCB3ZSBrbm93Ci0gICAgLy8gICAgIHRoYXQgYWxsIG5ldyBjYWxscyBpbnRv
IHRoaXMgY29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQotICAgIC8v
ICAgICBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0aGF0IHBlcmZvcm1lZCBPU1Ig
ZXhpdCBhbmQgY2FsbCBmcmFtZXMKLSAgICAvLyAgICAgdGhhdCB3ZXJlIHN0aWxsIGV4ZWN1dGlu
ZyB0aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVyIGNhbGwgZnJhbWUncwotICAgIC8v
ICAgICBPU1IgZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGlzIHRy
dWU6Ci0gICAgLy8KLSAgICAvLyAgICAgKGEpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0
IGdldHMgYSBjaGFuY2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQKLSAgICAvLyAgICAgICAgIGNvZGUg
ZXZlbnR1YWxseSwgc2luY2Ugb3B0aW1pemVkIGNvZGUgaXMgZmFzdGVyLiBCdXQgd2UgZG9uJ3QK
LSAgICAvLyAgICAgICAgIHdhbnQgdG8gZG8gc3VjaCByZWVudGVyeSB0b28gYWdncmVzc2l2ZWx5
IChzZWUgKGMpIGJlbG93KS4KLSAgICAvLwotICAgIC8vICAgICAoYikgSWYgdGhlcmUgaXMgY29k
ZSBvbiB0aGUgY2FsbCBzdGFjayB0aGF0IGlzIHN0aWxsIHJ1bm5pbmcgdGhlIG9sZAotICAgIC8v
ICAgICAgICAgSklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9TUidkLCB0aGVuIGl0IHNob3VsZCBn
ZXQgYSBjaGFuY2UgdG8KLSAgICAvLyAgICAgICAgIHBlcmZvcm0gT1NSIGVudHJ5IGRlc3BpdGUg
dGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCi0gICAgLy8KLSAgICAvLyAgICAgKGMpIENvZGUg
dGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IHNob3VsZCBub3QgaW1tZWRpYXRlbHkgcmV0cnkgT1NS
Ci0gICAgLy8gICAgICAgICBlbnRyeSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVu
c2l2ZS4gT1NSIGVudHJ5IGlzCi0gICAgLy8gICAgICAgICBwYXJ0aWN1bGFybHkgZXhwZW5zaXZl
LgotICAgIC8vCi0gICAgLy8gICAgIChkKSBGcmVxdWVudCBPU1IgZmFpbHVyZXMsIGV2ZW4gdGhv
c2UgdGhhdCBkbyBub3QgcmVzdWx0IGluIHRoZSBjb2RlCi0gICAgLy8gICAgICAgICBydW5uaW5n
IGluIGEgaG90IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVk
LgotICAgIC8vCi0gICAgLy8gICAgIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhl
IGV4ZWN1dGUgY291bnRlciB0bwotICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFm
dGVyV2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgotICAgIC8vICAg
ICAoYSkgYW5kIChiKSwgc2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0aGUg
b3Bwb3J0dW5pdHkgZm9yCi0gICAgLy8gICAgIGV2ZXJ5IGNhbGwgZnJhbWUgdG8gcGVyZm9ybSBP
U1IgZW50cnkuIEVzc2VudGlhbGx5LCBpZiBPU1IgZXhpdCBoYXBwZW5zCi0gICAgLy8gICAgIGZy
ZXF1ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVy
IHdpbGwgbmV2ZXIKLSAgICAvLyAgICAgYmVjb21lIG5vbi1uZWdhdGl2ZSBhbmQgT1NSIGVudHJ5
IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkKLSAgICAvLyAgICAgd2lsbCBvbmx5
IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhlIG9sZCBKSVQsIHdoaWNoIGRvZXMgYSBw
cmV0dHkKLSAgICAvLyAgICAgZ29vZCBqb2Igb2YgZW5zdXJpbmcgKGEpIGFuZCAoYikuIEJ1dCB0
aGF0IGRvZXNuJ3QgdGFrZSBjYXJlIG9mIChkKSwKLSAgICAvLyAgICAgc2luY2UgZWFjaCBzcGVj
dWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIuCi0gICAgLy8g
ICAgIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBvZiBzcGVjdWxhdGlvbiBmYWlsdXJl
cyBpcyBzaWduaWZpY2FudGx5Ci0gICAgLy8gICAgIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2Yg
c3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJhdGUpLCBhbmQgaWYKLSAgICAvLyAgICAg
dGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBmYWlsdXJlcy4gSWYgc28s
IHdlIHNldCB0aGUKLSAgICAvLyAgICAgY291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRo
ZSBjb3VudGVyIHRvCi0gICAgLy8gICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJt
VXAoKS4KLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCkpLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgCi0gICAgbG9hZDMyKEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVC
bG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpLCBHUFJJbmZvOjpyZWdUMik7
Ci0gICAgbG9hZDMyKEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZT
cGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgYWRkMzIo
SW1tMzIoMSksIEdQUkluZm86OnJlZ1QyKTsKLSAgICBhZGQzMihJbW0zMigtMSksIEdQUkluZm86
OnJlZ1QxKTsKLSAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QyLCBBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKSk7Ci0gICAg
c3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSkpOwotICAgIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSksIEdQUkluZm86OnJlZ1Qw
KTsKLSAgICAKLSAgICBKdW1wIGZld0ZhaWxzID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBHUFJJ
bmZvOjpyZWdUMiwgSW1tMzIoY29kZUJsb2NrKCktPmxhcmdlRmFpbENvdW50VGhyZXNob2xkKCkp
KTsKLSAgICBtdWwzMihJbW0zMihIZXVyaXN0aWNzOjpkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNz
RmFpbFJhdGlvKSwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJlZ1QyKTsKLSAgICAKLSAgICBK
dW1wIGxvd0ZhaWxSYXRlID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBHUFJJbmZvOjpyZWdUMiwg
R1BSSW5mbzo6cmVnVDEpOwotICAgIAotICAgIC8vIFJlb3B0aW1pemUgYXMgc29vbiBhcyBwb3Nz
aWJsZS4KLSAgICBzdG9yZTMyKEltbTMyKEhldXJpc3RpY3M6OmV4ZWN1dGlvbkNvdW50ZXJWYWx1
ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24pLCBBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNvdW50ZXIoKSkpOwotICAgIEp1bXAgZG9uZUFkanVzdGlu
ZyA9IGp1bXAoKTsKLSAgICAKLSAgICBmZXdGYWlscy5saW5rKHRoaXMpOwotICAgIGxvd0ZhaWxS
YXRlLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgc3RvcmUzMihJbW0zMihjb2RlQmxvY2soKS0+YWx0
ZXJuYXRpdmUoKS0+Y291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSksIEFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigp
KSk7Ci0gICAgCi0gICAgZG9uZUFkanVzdGluZy5saW5rKHRoaXMpOwotICAgIAotICAgIC8vIDEz
KSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVn
VDAuCi0gICAgCi0gICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKQotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoKFZpcnR1YWxS
ZWdpc3RlcilleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdp
c3Rlcik7Ci0gICAgCi0gICAgLy8gMTQpIEZpeCBjYWxsIGZyYW1lKHMpLgotICAgIAotICAgIEFT
U0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6
OkJhc2VsaW5lSklUKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpLT5h
bHRlcm5hdGl2ZSgpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKVJlZ2lzdGVyRmlsZTo6
Q29kZUJsb2NrKSk7Ci0gICAgCi0gICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0
Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7Ci0gICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7Ci0gICAg
ICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihj
b2RlT3JpZ2luKTsKLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKTsKLSAgICAg
ICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gZGVj
b2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIpOwotICAgICAgICB1bnNp
Z25lZCByZXR1cm5CeXRlY29kZUluZGV4ID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNv
ZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7Ci0gICAgICAgIEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+
KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgcmV0dXJuQnl0
ZWNvZGVJbmRleCk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQobWFwcGluZyk7Ci0gICAgICAg
IEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNvZGVJbmRleCk7
Ci0gICAgICAgIAotICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0
KTsKLQotICAgICAgICBHUFJSZWcgY2FsbGVyRnJhbWVHUFI7Ci0gICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAgIGFkZFB0cihJ
bW0zMihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjpyZWdUMyk7Ci0gICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OnJl
Z1QzOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXI7Ci0gICAgICAgIAotICAgICAgICBzdG9yZVB0cihUcnVzdGVk
SW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKSk7
Ci0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUt
PnNjb3BlKCkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKSk7Ci0gICAgICAgIHN0b3Jl
UHRyKGNhbGxlckZyYW1lR1BSLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lKSkpOwotICAg
ICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBhZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6
OlJldHVyblBDKSkpOwotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpKSksIGFkZHJl
c3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJl
Z2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSksIGFkZHJlc3NGb3IoKFZpcnR1YWxS
ZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2Fs
bGVlKSkpOwotICAgIH0KLSAgICAKLSAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKQotICAgICAgICBhZGRQdHIoSW1tMzIoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgCi0gICAgLy8gMTUpIEp1bXAgaW50byB0aGUgY29ycmVz
cG9uZGluZyBiYXNlbGluZSBKSVQgY29kZS4KLSAgICAKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5l
Q29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoZXhpdC5tX2NvZGVPcmlnaW4pOwotICAg
IFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCA9IGRlY29k
ZWRDb2RlTWFwRm9yKGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAKLSAgICBCeXRlY29kZUFuZE1h
Y2hpbmVPZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zm
c2V0LCB1bnNpZ25lZCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4
PihkZWNvZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIGV4aXQubV9j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgIAotICAgIEFTU0VSVChtYXBwaW5nKTsKLSAg
ICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IGV4aXQubV9jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgpOwotICAgIAotICAgIHZvaWQqIGp1bXBUYXJnZXQgPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmFzZWxpbmVDb2RlQmxvY2st
PmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOwot
ICAgIAotICAgIEFTU0VSVChHUFJJbmZvOjpyZWdUMSAhPSBHUFJJbmZvOjpjYWNoZWRSZXN1bHRS
ZWdpc3Rlcik7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJ
bmZvOjpyZWdUMSk7Ci0gICAganVtcChHUFJJbmZvOjpyZWdUMSk7Ci0KLSNpZiBERkdfRU5BQkxF
KERFQlVHX1ZFUkJPU0UpCi0gICAgZnByaW50ZihzdGRlcnIsICItPiAlcFxuIiwganVtcFRhcmdl
dCk7Ci0jZW5kaWYKLX0KLQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCi0KIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR09TUkV4aXRDb21waWxlci5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpICYmIFVTRShK
U1ZBTFVFNjQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBPU1JF
eGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQsIFNwZWN1bGF0aW9u
UmVjb3ZlcnkqIHJlY292ZXJ5KQoreworICAgIC8vIDEpIFByby1mb3JtYSBzdHVmZi4KKyAgICBl
eGl0Lm1fY2hlY2subGluaygmbV9qaXQpOworCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NF
KQorICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4aXQgZm9yIE5vZGUgQCVkICgiLCAoaW50KWV4
aXQubV9ub2RlSW5kZXgpOworICAgIGZvciAoQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5t
X2NvZGVPcmlnaW47IDsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5j
YWxsZXIpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJiYyMldSIsIGNvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCk7CisgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIgLT4gJXAgIiwgY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOworICAgIH0KKyAgICBm
cHJpbnRmKHN0ZGVyciwgIikgYXQgSklUIG9mZnNldCAweCV4ICAiLCBtX2ppdC5kZWJ1Z09mZnNl
dCgpKTsKKyAgICBleGl0LmR1bXAoc3RkZXJyKTsKKyNlbmRpZgorI2lmIERGR19FTkFCTEUoVkVS
Qk9TRV9TUEVDVUxBVElPTl9GQUlMVVJFKQorICAgIFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5m
byogZGVidWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbzsKKyAgICBkZWJ1
Z0luZm8tPmNvZGVCbG9jayA9IG1faml0LmNvZGVCbG9jaygpOworICAgIGRlYnVnSW5mby0+ZGVi
dWdPZmZzZXQgPSBtX2ppdC5kZWJ1Z09mZnNldCgpOworICAgIAorICAgIG1faml0LmRlYnVnQ2Fs
bChkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOworI2Vu
ZGlmCisgICAgCisjaWYgREZHX0VOQUJMRShKSVRfQlJFQUtfT05fU1BFQ1VMQVRJT05fRkFJTFVS
RSkKKyAgICBtX2ppdC5icmVha3BvaW50KCk7CisjZW5kaWYKKyAgICAKKyNpZiBERkdfRU5BQkxF
KFNVQ0NFU1NfU1RBVFMpCisgICAgc3RhdGljIFNhbXBsaW5nQ291bnRlciBjb3VudGVyKCJTcGVj
dWxhdGlvbkZhaWx1cmUiKTsKKyAgICBtX2ppdC5lbWl0Q291bnQoY291bnRlcik7CisjZW5kaWYK
KyAgICAKKyAgICAvLyAyKSBQZXJmb3JtIHNwZWN1bGF0aW9uIHJlY292ZXJ5LiBUaGlzIG9ubHkg
Y29tZXMgaW50byBwbGF5IHdoZW4gYW4gb3BlcmF0aW9uCisgICAgLy8gICAgc3RhcnRzIG11dGF0
aW5nIHN0YXRlIGJlZm9yZSB2ZXJpZnlpbmcgdGhlIHNwZWN1bGF0aW9uIGl0IGhhcyBhbHJlYWR5
IG1hZGUuCisgICAgCisgICAgR1BSUmVnIGFscmVhZHlCb3hlZCA9IEludmFsaWRHUFJSZWc7Cisg
ICAgCisgICAgaWYgKHJlY292ZXJ5KSB7CisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5cGUo
KSkgeworICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgorICAgICAgICAgICAgbV9qaXQuc3Vi
MzIocmVjb3ZlcnktPnNyYygpLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIG1faml0
Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnktPmRlc3QoKSk7
CisgICAgICAgICAgICBhbHJlYWR5Qm94ZWQgPSByZWNvdmVyeS0+ZGVzdCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBCb29sZWFuU3BlY3VsYXRpb25D
aGVjazoKKyAgICAgICAgICAgIG1faml0LnhvclB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlY292ZXJ5LT5kZXN0KCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gMykgUmVmaW5lIHNv
bWUgdmFsdWUgcHJvZmlsZSwgaWYgYXBwcm9wcmlhdGUuCisgICAgCisgICAgaWYgKCEhZXhpdC5t
X2pzVmFsdWVTb3VyY2UgJiYgISFleGl0Lm1fdmFsdWVQcm9maWxlKSB7CisgICAgICAgIGlmIChl
eGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkgeworICAgICAgICAgICAgLy8gV2UgY2Fu
J3QgYmUgc3VyZSB0aGF0IHdlIGhhdmUgYSBzcGFyZSByZWdpc3Rlci4gU28gdXNlIHRoZSB0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsCisgICAgICAgICAgICAvLyBzaW5jZSB3ZSBrbm93IGhvdyB0byBy
ZXN0b3JlIGl0LgorICAgICAgICAgICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFk
ZHJlc3MoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNBZGRyZXNzKCkpLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCBleGl0Lm1fdmFsdWVQcm9maWxlLT5zcGVjRmFpbEJ1Y2tldCgw
KSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0
cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KFRhZ1R5cGVOdW1iZXIpKSwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cihleGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKSwgZXhpdC5tX3ZhbHVlUHJvZmlsZS0+c3BlY0Zh
aWxCdWNrZXQoMCkpOworICAgIH0KKworICAgIC8vIDQpIEZpZ3VyZSBvdXQgaG93IG1hbnkgc2Ny
YXRjaCBzbG90cyB3ZSdsbCBuZWVkLiBXZSBuZWVkIG9uZSBmb3IgZXZlcnkgR1BSL0ZQUgorICAg
IC8vICAgIHdob3NlIGRlc3RpbmF0aW9uIGlzIG5vdyBvY2N1cGllZCBieSBhIERGRyB2aXJ0dWFs
IHJlZ2lzdGVyLCBhbmQgd2UgbmVlZAorICAgIC8vICAgIG9uZSBmb3IgZXZlcnkgZGlzcGxhY2Vk
IHZpcnR1YWwgcmVnaXN0ZXIgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbgorICAgIC8vICAgIEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzIG9mIHRoZW0uIEFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkg
Y29uc3RhbnRzLAorICAgIC8vICAgIGFueSB1bmRlZmluZWQgc2xvdHMsIGFueSBGUFIgc2xvdHMs
IGFuZCBhbnkgdW5ib3hlZCBpbnRzLgorICAgICAgICAgICAgCisgICAgVmVjdG9yPGJvb2w+IHBv
aXNvbmVkVmlydHVhbFJlZ2lzdGVycyhleGl0Lm1fdmFyaWFibGVzLnNpemUoKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycy5zaXplKCk7ICsr
aSkKKyAgICAgICAgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2ldID0gZmFsc2U7CisKKyAgICB1
bnNpZ25lZCBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyA9IDA7CisgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzID0gMDsKKyAgICAKKyAgICAvLyBC
b29sZWFucyBmb3IgZmFzdCBjaGVja3MuIFdlIGV4cGVjdCB0aGF0IG1vc3QgT1NSIGV4aXRzIGRv
IG5vdCBoYXZlIHRvIHJlYm94CisgICAgLy8gSW50MzJzLCBoYXZlIG5vIEZQUnMsIGFuZCBoYXZl
IG5vIGNvbnN0YW50cy4gSWYgdGhlcmUgYXJlIGNvbnN0YW50cywgd2UKKyAgICAvLyBleHBlY3Qg
bW9zdCBvZiB0aGVtIHRvIGJlIGpzVW5kZWZpbmVkKCk7IGlmIHRoYXQncyB0cnVlIHRoZW4gd2Ug
aGFuZGxlIHRoYXQKKyAgICAvLyBzcGVjaWFsbHkgdG8gbWluaW1pemUgY29kZSBzaXplIGFuZCBl
eGVjdXRpb24gdGltZS4KKyAgICBib29sIGhhdmVVbmJveGVkSW50MzJzID0gZmFsc2U7CisgICAg
Ym9vbCBoYXZlRlBScyA9IGZhbHNlOworICAgIGJvb2wgaGF2ZUNvbnN0YW50cyA9IGZhbHNlOwor
ICAgIGJvb2wgaGF2ZVVuZGVmaW5lZCA9IGZhbHNlOworICAgIAorICAgIGZvciAoaW50IGluZGV4
ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAg
ICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGlu
ZGV4KTsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBj
YXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgIGNhc2UgRG91YmxlRGlz
cGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZp
bGU6CisgICAgICAgICAgICBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAg
ICAgICAgICAgIEFTU0VSVCgoaW50KXJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpID49IDApOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTZWUgaWYgd2UgbWlnaHQgbGlrZSB0byBzdG9y
ZSB0byB0aGlzIHZpcnR1YWwgcmVnaXN0ZXIgYmVmb3JlIGRvaW5nCisgICAgICAgICAgICAvLyB2
aXJ0dWFsIHJlZ2lzdGVyIHNodWZmbGluZy4gSWYgc28sIHdlIHNheSB0aGF0IHRoZSB2aXJ0dWFs
IHJlZ2lzdGVyCisgICAgICAgICAgICAvLyBpcyBwb2lzb25lZDogaXQgY2Fubm90IGJlIHN0b3Jl
ZCB0byB1bnRpbCBhZnRlciBkaXNwbGFjZWQgdmlydHVhbAorICAgICAgICAgICAgLy8gcmVnaXN0
ZXJzIGFyZSBoYW5kbGVkLiBXZSB0cmFjayBwb2lzb25lZCB2aXJ0dWFsIHJlZ2lzdGVyIGNhcmVm
dWxseQorICAgICAgICAgICAgLy8gdG8gZW5zdXJlIHRoaXMgaGFwcGVucyBlZmZpY2llbnRseS4g
Tm90ZSB0aGF0IHdlIGV4cGVjdCB0aGlzIGNhc2UKKyAgICAgICAgICAgIC8vIHRvIGJlIHJhcmUs
IHNvIHRoZSBoYW5kbGluZyBvZiBpdCBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlcyBpbgorICAg
ICAgICAgICAgLy8gd2hpY2ggaXQgZG9lcyBub3QgaGFwcGVuLgorICAgICAgICAgICAgaWYgKHJl
Y292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpIDwgKGludClleGl0Lm1fdmFyaWFibGVzLnNpemUoKSkg
eworICAgICAgICAgICAgICAgIHN3aXRjaCAoZXhpdC5tX3ZhcmlhYmxlc1tyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKV0udGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEluR1BS
OgorICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICAg
ICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVy
KCldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mUG9pc29uZWRWaXJ0
dWFsUmVnaXN0ZXJzKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAg
ICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRJbnQzMjoKKyAgICAgICAgICAg
IGhhdmVVbmJveGVkSW50MzJzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgICAgICBoYXZlRlBScyA9IHRydWU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbnN0YW50Ogor
ICAgICAgICAgICAgaGF2ZUNvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBpZiAocmVjb3Zl
cnkuY29uc3RhbnQoKS5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGhhdmVVbmRlZmlu
ZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorI2lmIERG
R19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIik7CisgICAg
aWYgKG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKQorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIlBvaXNvbmVkPSV1ICIsIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKTsK
KyAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKQorICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkRpc3BsYWNlZD0ldSAiLCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdp
c3RlcnMpOworICAgIGlmIChoYXZlVW5ib3hlZEludDMycykKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJVbmJveGVkSW50MzIgIik7CisgICAgaWYgKGhhdmVGUFJzKQorICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkZQUiAiKTsKKyAgICBpZiAoaGF2ZUNvbnN0YW50cykKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJDb25zdGFudHMgIik7CisgICAgaWYgKGhhdmVVbmRlZmluZWQpCisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiVW5kZWZpbmVkICIpOworICAgIGZwcmludGYoc3RkZXJyLCAiICIp
OworI2VuZGlmCisgICAgCisgICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2hCdWZmZXIgPSBzdGF0
aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KG1faml0Lmdsb2JhbERhdGEoKS0+c2NyYXRjaEJ1ZmZl
ckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChudW1iZXJPZlBvaXNvbmVkVmlydHVh
bFJlZ2lzdGVycyArIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMgPyAwIDogbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0
ZXJzKSkpKTsKKworICAgIC8vIEZyb20gaGVyZSBvbiwgdGhlIGNvZGUgYXNzdW1lcyB0aGF0IGl0
IGlzIHByb2ZpdGFibGUgdG8gbWF4aW1pemUgdGhlIGRpc3RhbmNlCisgICAgLy8gYmV0d2VlbiB3
aGVuIHNvbWV0aGluZyBpcyBjb21wdXRlZCBhbmQgd2hlbiBpdCBpcyBzdG9yZWQuCisgICAgCisg
ICAgLy8gNSkgUGVyZm9ybSBhbGwgcmVib3hpbmcgb2YgaW50ZWdlcnMuCisgICAgCisgICAgaWYg
KGhhdmVVbmJveGVkSW50MzJzKSB7CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25z
dCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Cisg
ICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAgICBj
YXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS5ncHIo
KSAhPSBhbHJlYWR5Qm94ZWQpCisgICAgICAgICAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnkuZ3ByKCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBbHJlYWR5SW5S
ZWdpc3RlckZpbGVBc1VuYm94ZWRJbnQzMjoKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMy
KEFzc2VtYmx5SGVscGVyczo6SW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFRhZ1R5cGVOdW1i
ZXIgPj4gMzIpKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJl
Z2lzdGVyPihleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAg
IC8vIDYpIER1bXAgYWxsIG5vbi1wb2lzb25lZCBHUFJzLiBGb3IgcG9pc29uZWQgR1BScywgc2F2
ZSB0aGVtIGludG8gdGhlIHNjcmF0Y2ggc3RvcmFnZS4KKyAgICAvLyAgICBOb3RlIHRoYXQgR1BS
cyBkbyBub3QgaGF2ZSBhIGZhc3QgY2hhbmdlIChsaWtlIGhhdmVGUFJzKSBiZWNhdXNlIHdlIGV4
cGVjdCB0aGF0CisgICAgLy8gICAgbW9zdCBPU1IgZmFpbHVyZSBwb2ludHMgd2lsbCBoYXZlIGF0
IGxlYXN0IG9uZSBHUFIgdGhhdCBuZWVkcyB0byBiZSBkdW1wZWQuCisgICAgCisgICAgdW5zaWdu
ZWQgc2NyYXRjaEluZGV4ID0gMDsKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhp
dC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGlu
dCBvcGVyYW5kID0gZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBzd2l0Y2gg
KHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgIGNh
c2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGlu
ZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGlu
ZGV4KV0pCisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVjb3ZlcnkuZ3ByKCksIHNj
cmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVjb3ZlcnkuZ3ByKCksIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgLy8gQXQgdGhpcyBwb2ludCBhbGwgR1BScyBhcmUgYXZhaWxhYmxlIGZvciBz
Y3JhdGNoIHVzZS4KKyAgICAKKyAgICBpZiAoaGF2ZUZQUnMpIHsKKyAgICAgICAgLy8gNykgQm94
IGFsbCBkb3VibGVzIChyZWxpZXMgb24gdGhlcmUgYmVpbmcgbW9yZSBHUFJzIHRoYW4gRlBScykK
KyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJl
ck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBp
ZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gSW5GUFIpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBGUFJSZWcgZnByID0gcmVjb3ZlcnkuZnByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihGUFJJbmZvOjp0b0luZGV4KGZwcikp
OworICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKGZwciwgZ3ByKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gOCkgRHVtcCBhbGwgZG91YmxlcyBpbnRvIHRoZSByZWdpc3RlciBm
aWxlLCBvciB0byB0aGUgc2NyYXRjaCBzdG9yYWdlIGlmCisgICAgICAgIC8vICAgIHRoZSBkZXN0
aW5hdGlvbiB2aXJ0dWFsIHJlZ2lzdGVyIGlzIHBvaXNvbmVkLgorICAgICAgICAKKyAgICAgICAg
Zm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhp
dC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlx
dWUoKSAhPSBJbkZQUikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEdQ
UlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQUkluZm86OnRvSW5kZXgocmVjb3Zlcnku
ZnByKCkpKTsKKyAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNv
bmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkKKyAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihncHIsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5k
ZXgrKyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
Z3ByLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9w
ZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBBU1NF
UlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAg
ICAKKyAgICAvLyA5KSBSZXNodWZmbGUgZGlzcGxhY2VkIHZpcnR1YWwgcmVnaXN0ZXJzLiBPcHRp
bWl6ZSBmb3IgdGhlIGNhc2UgdGhhdAorICAgIC8vICAgIHRoZSBudW1iZXIgb2YgZGlzcGxhY2Vk
IHZpcnR1YWwgcmVnaXN0ZXJzIGlzIG5vdCBtb3JlIHRoYW4gdGhlIG51bWJlcgorICAgIC8vICAg
IG9mIGF2YWlsYWJsZSBwaHlzaWNhbCByZWdpc3RlcnMuCisgICAgCisgICAgaWYgKG51bWJlck9m
RGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykgeworICAgICAgICBpZiAobnVtYmVyT2ZEaXNwbGFj
ZWRWaXJ0dWFsUmVnaXN0ZXJzIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKSB7CisgICAg
ICAgICAgICAvLyBTbyBmYXIgdGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBjYXNlIHRoYXQgdHJpZ2dl
cnMgYWxsIHRoZSB0aW1lLCBidXQKKyAgICAgICAgICAgIC8vIHRoYXQgaXMgZmFyIGZyb20gZ3Vh
cmFudGVlZC4KKyAgICAgICAgCisgICAgICAgICAgICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRl
eCA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1i
ZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCkpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZTogeworICAgICAgICAgICAgICAg
ICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsr
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6YWRk
cmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIGdwcik7CisgICAgICAgICAgICAg
ICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluUmVnaXN0
ZXJGaWxlOiB7CisgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5s
b2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0
ZXIoKSksIGdwcik7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YlB0cihHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIGRpc3BsYWNlbWVudEluZGV4ID0g
MDsKKyAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9m
UmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNv
dmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAg
ICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNl
IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNw
bGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNl
ZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJ
bmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIHNodWZmbGluZyBhbGdvcml0aG0gdGhhdCB3ZSB1
c2UKKyAgICAgICAgICAgIC8vIGZvciBzcGVjdWxhdGl2ZS0+bm9uLXNwZWN1bGF0aXZlIGp1bXBz
LCBpZiB3ZSBldmVyIGRpc2NvdmVyIHRoYXQKKyAgICAgICAgICAgIC8vIHNvbWUgaG90IGNvZGUg
d2l0aCBsb3RzIG9mIGxpdmUgdmFsdWVzIHRoYXQgZ2V0IGRpc3BsYWNlZCBhbmQKKyAgICAgICAg
ICAgIC8vIHNwaWxsZWQgcmVhbGx5IGVuam95cyBmcmVxdWVudGx5IGZhaWxpbmcgc3BlY3VsYXRp
b24uCisgICAgICAgIAorICAgICAgICAgICAgLy8gRm9yIG5vdyB0aGlzIGNvZGUgaXMgZW5naW5l
ZXJlZCB0byBiZSBjb3JyZWN0IGJ1dCBwcm9iYWJseSBub3QKKyAgICAgICAgICAgIC8vIHN1cGVy
LiBJbiBwYXJ0aWN1bGFyLCBpdCBjb3JyZWN0bHkgaGFuZGxlcyBjYXNlcyB3aGVyZSBmb3IgZXhh
bXBsZQorICAgICAgICAgICAgLy8gdGhlIGRpc3BsYWNlbWVudHMgYXJlIGEgcGVybXV0YXRpb24g
b2YgdGhlIGRlc3RpbmF0aW9uIHZhbHVlcywgbGlrZQorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vIDEgLT4gMgorICAgICAgICAgICAgLy8gMiAtPiAxCisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgLy8gSXQgYWNjb21wbGlzaGVzIHRoaXMgYnkgc2ltcGx5IGxpZnRpbmcgYWxsIG9m
IHRoZSB2aXJ0dWFsIHJlZ2lzdGVycworICAgICAgICAgICAgLy8gZnJvbSB0aGVpciBvbGQgKERG
RyBKSVQpIGxvY2F0aW9ucyBhbmQgZHJvcHBpbmcgdGhlbSBpbiBhIHNjcmF0Y2gKKyAgICAgICAg
ICAgIC8vIGxvY2F0aW9uIGluIG1lbW9yeSwgYW5kIHRoZW4gdHJhbnNmZXJyaW5nIGZyb20gdGhh
dCBzY3JhdGNoIGxvY2F0aW9uCisgICAgICAgICAgICAvLyB0byB0aGVpciBuZXcgKG9sZCBKSVQp
IGxvY2F0aW9ucy4KKyAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGlu
ZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAg
ICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGlu
ZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5
LnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVy
RmlsZToKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBzY3Jh
dGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNl
ZEluUmVnaXN0ZXJGaWxlOiB7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJ
bmRleCsrKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNl
ZEluUmVnaXN0ZXJGaWxlOiB7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoQnVmZmVyICsgc2NyYXRj
aEluZGV4KyspOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgICAgICBzY3JhdGNoSW5kZXggPSBudW1iZXJPZlBvaXNvbmVkVmlydHVh
bFJlZ2lzdGVyczsKKyAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0
Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAg
ICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgIGNhc2Ug
SW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgICAgICBjYXNlIERvdWJs
ZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
UHRyKHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKywgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAg
QVNTRVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyAr
IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgLy8gMTApIER1bXAgYWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXJzLgorICAg
IAorICAgIHNjcmF0Y2hJbmRleCA9IDA7CisgICAgaWYgKG51bWJlck9mUG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzKSB7CisgICAgICAgIGZvciAoaW50IHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1
YWxSZWdpc3RlciA8IChpbnQpZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmlydHVhbFJlZ2lz
dGVyKSB7CisgICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1t2aXJ0dWFs
UmVnaXN0ZXJdKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQubV92YXJpYWJsZXNb
dmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICBjYXNlIFVuYm94ZWRJ
bnQzMkluR1BSOgorICAgICAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkUHRyKHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKywgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJs
eUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcil2aXJ0dWFsUmVnaXN0ZXIpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgQVNTRVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVh
bFJlZ2lzdGVycyk7CisgICAgCisgICAgLy8gMTEpIER1bXAgYWxsIGNvbnN0YW50cy4gT3B0aW1p
emUgZm9yIFVuZGVmaW5lZCwgc2luY2UgdGhhdCdzIGEgY29uc3RhbnQgd2Ugc2VlCisgICAgLy8g
ICAgIG9mdGVuLgorCisgICAgaWYgKGhhdmVDb25zdGFudHMpIHsKKyAgICAgICAgaWYgKGhhdmVV
bmRlZmluZWQpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1i
ZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNv
dmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAg
aWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENvbnN0YW50KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmluZWQo
KSkKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5k
ZXgoaW5kZXgpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShyZWNv
dmVyeS5jb25zdGFudCgpKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJl
Z2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIC8vIDEyKSBBZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNp
bmNlIHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25vdworICAgIC8vICAgICB0aGF0IGFsbCBuZXcg
Y2FsbHMgaW50byB0aGlzIGNvZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1
dGUKKyAgICAvLyAgICAgY291bnRlciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJm
b3JtZWQgT1NSIGV4aXQgYW5kIGNhbGwgZnJhbWVzCisgICAgLy8gICAgIHRoYXQgd2VyZSBzdGls
bCBleGVjdXRpbmcgdGhlIG9sZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1l
J3MKKyAgICAvLyAgICAgT1NSIGV4aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxv
d2luZyBpcyB0cnVlOgorICAgIC8vCisgICAgLy8gICAgIChhKSBDb2RlIHRoZSBwZXJmb3JtcyBh
biBPU1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRvIHJlZW50ZXIgb3B0aW1pemVkCisgICAgLy8gICAg
ICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNlIG9wdGltaXplZCBjb2RlIGlzIGZhc3Rlci4gQnV0
IHdlIGRvbid0CisgICAgLy8gICAgICAgICB3YW50IHRvIGRvIHN1Y2ggcmVlbnRlcnkgdG9vIGFn
Z3Jlc3NpdmVseSAoc2VlIChjKSBiZWxvdykuCisgICAgLy8KKyAgICAvLyAgICAgKGIpIElmIHRo
ZXJlIGlzIGNvZGUgb24gdGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBzdGlsbCBydW5uaW5nIHRoZSBv
bGQKKyAgICAvLyAgICAgICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBuZXZlciBPU1InZCwgdGhlbiBp
dCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRvCisgICAgLy8gICAgICAgICBwZXJmb3JtIE9TUiBlbnRy
eSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZXhpdGVkLgorICAgIC8vCisgICAgLy8gICAg
IChjKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBzaG91bGQgbm90IGltbWVkaWF0ZWx5
IHJldHJ5IE9TUgorICAgIC8vICAgICAgICAgZW50cnksIHNpbmNlIGJvdGggZm9ybXMgb2YgT1NS
IGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcworICAgIC8vICAgICAgICAgcGFydGljdWxhcmx5
IGV4cGVuc2l2ZS4KKyAgICAvLworICAgIC8vICAgICAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVz
LCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0aGUgY29kZQorICAgIC8vICAgICAg
ICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0aW5n
IHRyaWdnZXJlZC4KKyAgICAvLworICAgIC8vICAgICBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxpa2Ug
dG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KKyAgICAvLyAgICAgY291bnRlclZhbHVlRm9y
T3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgZW5kYW5nZXIK
KyAgICAvLyAgICAgKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQg
ZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgorICAgIC8vICAgICBldmVyeSBjYWxsIGZyYW1lIHRv
IHBlcmZvcm0gT1NSIGVudHJ5LiBFc3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFwcGVucworICAg
IC8vICAgICBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0
aGUgY291bnRlciB3aWxsIG5ldmVyCisgICAgLy8gICAgIGJlY29tZSBub24tbmVnYXRpdmUgYW5k
IE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5CisgICAgLy8gICAg
IHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGlj
aCBkb2VzIGEgcHJldHR5CisgICAgLy8gICAgIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQg
KGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAoZCksCisgICAgLy8gICAgIHNpbmNl
IGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUgZXhlY3V0ZSBjb3VudGVy
LgorICAgIC8vICAgICBTbyB3ZSBjaGVjayBoZXJlIGlmIHRoZSBudW1iZXIgb2Ygc3BlY3VsYXRp
b24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQorICAgIC8vICAgICBsYXJnZXIgdGhhbiB0aGUg
bnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlmCisg
ICAgLy8gICAgIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgZmFpbHVy
ZXMuIElmIHNvLCB3ZSBzZXQgdGhlCisgICAgLy8gICAgIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNl
IHdlIHNldCB0aGUgY291bnRlciB0bworICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6
ZUFmdGVyV2FybVVwKCkuCisgICAgCisgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisg
ICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwg
Q29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQUkluZm86OnJl
Z1QyKTsKKyAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSwg
R1BSSW5mbzo6cmVnVDEpOworICAgIG1faml0LmFkZDMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIo
MSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBtX2ppdC5hZGQzMihBc3NlbWJseUhlbHBlcnM6Oklt
bTMyKC0xKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVn
VDIsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpv
ZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSkpOworICAgIG1faml0LnN0b3JlMzIoR1BS
SW5mbzo6cmVnVDEsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSkpOworICAgIAorICAg
IG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9j
aygpLT5hbHRlcm5hdGl2ZSgpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIAorICAgIEFzc2VtYmx5
SGVscGVyczo6SnVtcCBmZXdGYWlscyA9IG1faml0LmJyYW5jaDMyKEFzc2VtYmx5SGVscGVyczo6
QmVsb3dPckVxdWFsLCBHUFJJbmZvOjpyZWdUMiwgQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihtX2pp
dC5jb2RlQmxvY2soKS0+bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSkpOworICAgIG1faml0Lm11
bDMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoSGV1cmlzdGljczo6ZGVzaXJlZFNwZWN1bGF0aXZl
U3VjY2Vzc0ZhaWxSYXRpbyksIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMik7CisgICAg
CisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGxvd0ZhaWxSYXRlID0gbV9qaXQuYnJhbmNoMzIo
QXNzZW1ibHlIZWxwZXJzOjpCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpy
ZWdUMSk7CisgICAgCisgICAgLy8gUmVvcHRpbWl6ZSBhcyBzb29uIGFzIHBvc3NpYmxlLgorICAg
IG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihIZXVyaXN0aWNzOjpleGVjdXRp
b25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9uKSwgQXNzZW1ibHlIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNvdW50
ZXIoKSkpOworICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBkb25lQWRqdXN0aW5nID0gbV9qaXQu
anVtcCgpOworICAgIAorICAgIGZld0ZhaWxzLmxpbmsoJm1faml0KTsKKyAgICBsb3dGYWlsUmF0
ZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6
OkltbTMyKG1faml0LmNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVGb3JP
cHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIAor
ICAgIGRvbmVBZGp1c3RpbmcubGluaygmbV9qaXQpOworICAgIAorICAgIC8vIDEzKSBMb2FkIHRo
ZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCisgICAg
CisgICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKQorICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNh
Y2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyAxNCkgRml4IGNhbGwgZnJhbWUocyku
CisgICAgCisgICAgQVNTRVJUKG1faml0LmNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRK
SVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIG1faml0LnN0b3JlUHRyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKS0+YWx0ZXJuYXRp
dmUoKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKVJlZ2lz
dGVyRmlsZTo6Q29kZUJsb2NrKSk7CisgICAgCisgICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVP
cmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7CisgICAgICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWU7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5iYXNlbGlu
ZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKTsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlciA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyKTsKKyAgICAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4m
IGRlY29kZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXIpOworICAgICAgICB1bnNpZ25lZCByZXR1cm5CeXRlY29kZUluZGV4ID0gaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2Fs
bCk7CisgICAgICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNl
YXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29k
ZWRDb2RlTWFwLnNpemUoKSwgcmV0dXJuQnl0ZWNvZGVJbmRleCk7CisgICAgICAgIAorICAgICAg
ICBBU1NFUlQobWFwcGluZyk7CisgICAgICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5k
ZXggPT0gcmV0dXJuQnl0ZWNvZGVJbmRleCk7CisgICAgICAgIAorICAgICAgICB2b2lkKiBqdW1w
VGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBt
YXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKworICAgICAgICBHUFJSZWcgY2FsbGVyRnJh
bWVHUFI7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJh
bWUpIHsKKyAgICAgICAgICAgIG1faml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OkltbTMyKGlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86
OnJlZ1QzKTsKKyAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6cmVnVDM7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlcjsKKyAgICAgICAgCisgICAgICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9jayksIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS0+
c2NvcGUoKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSkp
OworICAgICAgICBtX2ppdC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJz
OjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lKSkpOworICAgICAgICBtX2ppdC5zdG9yZVB0
cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQykpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpKSksIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICBtX2ppdC5zdG9yZVB0
cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUu
Z2V0KCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKSkpOworICAg
IH0KKyAgICAKKyAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAg
ICAgICBtX2ppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihleGl0Lm1fY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSks
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyAxNSkgSnVtcCBpbnRv
IHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2RlLgorICAgIAorICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1f
Y29kZU9yaWdpbik7CisgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29k
ZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2spOwor
ICAgIAorICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJj
aDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRD
b2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgCisg
ICAgQVNTRVJUKG1hcHBpbmcpOworICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXgg
PT0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAgdm9pZCoganVt
cFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihiYXNlbGluZUNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+
bV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAgCisgICAgQVNTRVJUKEdQUkluZm86OnJlZ1QxICE9
IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICAKKyAgICBtX2ppdC5tb3ZlKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgR1BSSW5mbzo6cmVnVDEp
OworICAgIG1faml0Lmp1bXAoR1BSSW5mbzo6cmVnVDEpOworCisjaWYgREZHX0VOQUJMRShERUJV
R19WRVJCT1NFKQorICAgIGZwcmludGYoc3RkZXJyLCAiLT4gJXBcbiIsIGp1bXBUYXJnZXQpOwor
I2VuZGlmCit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09TUkV4
aXRDb21waWxlcl9oCisjZGVmaW5lIERGR09TUkV4aXRDb21waWxlcl9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQXNz
ZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE9TUkV4aXRDb21waWxlciB7CitwdWJsaWM6Cisg
ICAgT1NSRXhpdENvbXBpbGVyKEFzc2VtYmx5SGVscGVycyYgaml0KQorICAgICAgICA6IG1faml0
KGppdCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUV4aXQoY29uc3QgT1NS
RXhpdCYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqKTsKKworcHJpdmF0ZToKKyAgICBBc3NlbWJseUhl
bHBlcnMmIG1faml0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPU1JFeGl0Q29tcGlsZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114026</attachid>
            <date>2011-11-08 03:12:03 -0800</date>
            <delta_ts>2011-11-08 03:20:53 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>osrexit_patch_2.diff</filename>
            <type>text/plain</type>
            <size>128359</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5OTUyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw5IEBACiAJCTBGQzA5NzZBMTQ2OEE2Rjcw
MENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIgLyogREZHT1NSRXhpdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzA5NzZE
MTQ2OEFCNEUwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzZDMTQ2OEFCNEEwMENGMjQ0MiAv
KiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkMwOTc2RTE0NjhBQjUxMDBDRjI0NDIgLyogREZHQXNzZW1ibHlI
ZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuY3BwICovOyB9
OworCQkwRkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc2RjE0Njkz
QUVGMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDMDk3NzIxNDY5M0FGOTAwQ0YyNDQyIC8q
IERGR09TUkV4aXRDb21waWxlcjY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzA5NzcwMTQ2OTNBRUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29t
cGlsZXI2NC5jcHAgKi87IH07CisJCTBGQzA5Nzc2MTQ2OTQzQjAwMENGMjQ0MiAvKiBERkdPU1JF
eGl0Q29tcGlsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkMwOTc3NTE0Njk0M0FEMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVy
MzJfNjQuY3BwICovOyB9OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJy
aWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQjE0
MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMg
LyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CiAJCTBGQzgxNTE1MTQwNTExOUIwMENG
QTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVt
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMx
OCw3ICszMjEsNiBAQAogCQk4NjcwNEI4OTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY3MDRC
ODIxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmNwcCAqLzsgfTsKIAkJODY3MDRCOEEx
MkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjcwNEI4MzEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBh
dHRlcm4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk4Njg4MEYxQzE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjE4
MTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwICovOyB9Owot
CQk4Njg4MEYxRDE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGlsZXIzMl82NC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Njg4MEYxOTE0MzI4
QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGlsZXIzMl82NC5jcHAgKi87IH07CiAJCTg2ODgwRjFF
MTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcklubGluZU1ldGhvZHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjFBMTQzMjhCQjkw
MEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcklubGluZU1ldGhvZHMuaCAqLzsgfTsKIAkJODY4ODBG
MUYxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJCOTAw
QjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovOyB9OwogCQk4Njg4MEY0NDE0
MzUzMUE4MDBCMDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjQzMTQzNTMxQTcwMEIwOEQ0
MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwICovOyB9OwpAQCAtODM5LDYgKzg0MSw5IEBA
CiAJCTBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXQuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0
MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHQXNzZW1ibHlIZWxwZXJzLmNwcDsgcGF0aCA9IGRmZy9ERkdBc3NlbWJseUhl
bHBlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMwOTc2QzE0NjhBQjRB
MDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0Fzc2VtYmx5SGVscGVycy5oOyBwYXRoID0gZGZnL0RGR0Fzc2VtYmx5SGVs
cGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMwOTc2RjE0NjkzQUVGMDBD
RjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR09TUkV4aXRDb21waWxlci5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMwOTc3MDE0NjkzQUVGMDBDRjI0
NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDMDk3NzUx
NDY5NDNBRDAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDsg
cGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBw
b3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRlQmFycmll
clN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUwOTE0MDQz
QkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTAwLDcgKzExMDUsNiBAQAogCQk4NjdG
QzM1RjExQjc2Mzk1MDAyNTEwNUUgLyogSmF2YVNjcmlwdENvcmUuSlNWQUxVRTMyXzY0b25seS5l
eHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmV4cG9ydHM7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5K
U1ZBTFVFMzJfNjRvbmx5LmV4cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY3RkMz
NjExMUI3NjM5NTAwMjUxMDVFIC8qIEphdmFTY3JpcHRDb3JlLkpTVkFMVUU2NG9ubHkuZXhwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5leHBvcnRzOyBwYXRoID0gSmF2YVNjcmlwdENvcmUuSlNWQUxV
RTY0b25seS5leHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2ODgwRjE4MTQzMjhC
QjkwMEIwOEQ0MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcDsgcGF0
aCA9IGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk4Njg4MEYxOTE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGlsZXIzMl82
NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdKSVRDb21waWxl
cjMyXzY0LmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb21waWxlcjMyXzY0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4ODBGMUExNDMyOEJCOTAwQjA4RDQyIC8qIERGR0pJVENv
bXBpbGVySW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdKSVRDb21waWxlcklubGluZU1ldGhvZHMuaDsgcGF0aCA9IGRmZy9ERkdKSVRDb21waWxlcklu
bGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4ODBGMUIxNDMy
OEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA7IHBhdGgg
PSBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2ODgwRjQzMTQzNTMxQTcwMEIwOEQ0MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yNjQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSklUQ29kZUdlbmVy
YXRvcjY0LmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI5OCw2ICsyMzAyLDkgQEAKIAkJODZFQzlEQjMxMzI4
REY0NDAwMkIyQUQ3IC8qIGRmZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEZDMDk3NzUxNDY5NDNBRDAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxl
cjMyXzY0LmNwcCAqLywKKwkJCQkwRkMwOTc2RjE0NjkzQUVGMDBDRjI0NDIgLyogREZHT1NSRXhp
dENvbXBpbGVyLmggKi8sCisJCQkJMEZDMDk3NzAxNDY5M0FFRjAwQ0YyNDQyIC8qIERGR09TUkV4
aXRDb21waWxlcjY0LmNwcCAqLywKIAkJCQkwRkMwOTc2QjE0NjhBQjRBMDBDRjI0NDIgLyogREZH
QXNzZW1ibHlIZWxwZXJzLmNwcCAqLywKIAkJCQkwRkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyog
REZHQXNzZW1ibHlIZWxwZXJzLmggKi8sCiAJCQkJMEZDMDk3NjgxNDY4QTZFRjAwQ0YyNDQyIC8q
IERGR09TUkV4aXQuaCAqLywKQEAgLTIzMjYsNyArMjMzMyw2IEBACiAJCQkJODY4ODBGNDMxNDM1
MzFBNzAwQjA4RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAgKi8sCiAJCQkJODZFQzlE
QkIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmNwcCAqLywKIAkJCQk4NkVDOURC
QzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCAqLywKLQkJCQk4Njg4MEYxOTE0
MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGlsZXIzMl82NC5jcHAgKi8sCiAJCQkJODY4ODBG
MUExNDMyOEJCOTAwQjA4RDQyIC8qIERGR0pJVENvbXBpbGVySW5saW5lTWV0aG9kcy5oICovLAog
CQkJCTg2RUNBM0U5MTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggKi8sCiAJCQkJMEZEODJF
NTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCAqLywKQEAgLTI5MTIsNiArMjkx
OCw3IEBACiAJCQkJMEYyRTVCRjcxNDYzNTdENTAwM0VCMkVCIC8qIFNwZWN0cnVtLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZHT1NSRXhpdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkQxNDY4QUI0RTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5
SGVscGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8q
IERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zNDM2LDcgKzM0NDMsNiBA
QAogCQkJCUE3MDQ1NkIxMTQyN0ZCOTUwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5j
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYxQzE0MzI4QkI5MDBCMDhENDIgLyog
REZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTg2ODgwRjFE
MTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcjMyXzY0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjQ0MTQzNTMxQTgwMEIwOEQ0MiAvKiBERkdK
SVRDb2RlR2VuZXJhdG9yNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4ODBGNEQxNDM1M0Iy
MTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0z
NDQ0LDYgKzM0NTAsOCBAQAogCQkJCTBGNjIwMTc5MTQzRkNENDgwMDY4Qjc3QyAvKiBERkdBYnN0
cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDM0M0Q0EwMTQ1OEY1NDUwMDI1RkI2
MiAvKiBKU0dsb2JhbFRoaXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3NkUxNDY4QUI1
MTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5SGVscGVycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkMwOTc3MjE0NjkzQUY5MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZDMDk3NzYxNDY5NDNCMDAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21w
aWxlcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiA5OTUyNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNTY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRG
R0pJVENvbXBpbGVyLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSNpZiBVU0UoSlNWQUxVRTMy
XzY0KQotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiREZHSklUQ29kZUdlbmVy
YXRvci5oIgotI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVySW5saW5lTWV0aG9kcy5oIgotI2luY2x1
ZGUgIkRGR09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJERkdSZWdpc3RlckJhbmsuaCIKLSNpbmNs
dWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewot
Ci12b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQm
IGV4aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQotewotICAgIC8vIDEpIFByby1m
b3JtYSBzdHVmZi4KLSAgICBleGl0Lm1fY2hlY2subGluayh0aGlzKTsKLQotI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKLSAgICBmcHJpbnRmKHN0ZGVyciwgIk9TUiBleGl0IGZvciBOb2Rl
IEAlZCAoIiwgKGludClleGl0Lm1fbm9kZUluZGV4KTsKLSAgICBmb3IgKENvZGVPcmlnaW4gY29k
ZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyA7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmMjJXUi
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGZwcmludGYoc3RkZXJy
LCAiIC0+ICVwICIsIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgp
KTsKLSAgICB9Ci0gICAgZnByaW50ZihzdGRlcnIsICIpIGF0IEpJVCBvZmZzZXQgMHgleCAgIiwg
ZGVidWdPZmZzZXQoKSk7Ci0gICAgZXhpdC5kdW1wKHN0ZGVycik7Ci0jZW5kaWYKLSNpZiBERkdf
RU5BQkxFKFZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSkKLSAgICBTcGVjdWxhdGlvbkZhaWx1
cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87
Ci0gICAgZGVidWdJbmZvLT5jb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKLSAgICBkZWJ1Z0luZm8t
PmRlYnVnT2Zmc2V0ID0gZGVidWdPZmZzZXQoKTsKLSAgICAKLSAgICBkZWJ1Z0NhbGwoZGVidWdP
cGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKLSNlbmRpZgotICAg
IAotI2lmIERGR19FTkFCTEUoSklUX0JSRUFLX09OX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCi0gICAg
YnJlYWtwb2ludCgpOwotI2VuZGlmCi0gICAgCi0jaWYgREZHX0VOQUJMRShTVUNDRVNTX1NUQVRT
KQotICAgIHN0YXRpYyBTYW1wbGluZ0NvdW50ZXIgY291bnRlcigiU3BlY3VsYXRpb25GYWlsdXJl
Iik7Ci0gICAgZW1pdENvdW50KGNvdW50ZXIpOwotI2VuZGlmCi0KLSAgICAvLyAyKSBQZXJmb3Jt
IHNwZWN1bGF0aW9uIHJlY292ZXJ5LiBUaGlzIG9ubHkgY29tZXMgaW50byBwbGF5IHdoZW4gYW4g
b3BlcmF0aW9uCi0gICAgLy8gICAgc3RhcnRzIG11dGF0aW5nIHN0YXRlIGJlZm9yZSB2ZXJpZnlp
bmcgdGhlIHNwZWN1bGF0aW9uIGl0IGhhcyBhbHJlYWR5IG1hZGUuCi0gICAgCi0gICAgaWYgKHJl
Y292ZXJ5KSB7Ci0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5cGUoKSkgewotICAgICAgICBj
YXNlIFNwZWN1bGF0aXZlQWRkOgotICAgICAgICAgICAgc3ViMzIocmVjb3ZlcnktPnNyYygpLCBy
ZWNvdmVyeS0+ZGVzdCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyAzKSBSZWZpbmUgc29tZSB2YWx1ZSBwcm9maWxlLCBpZiBhcHBy
b3ByaWF0ZS4KLSAgICAKLSAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSAmJiAhIWV4aXQu
bV92YWx1ZVByb2ZpbGUpIHsKLSAgICAgICAgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmlzQWRk
cmVzcygpKSB7Ci0gICAgICAgICAgICAvLyBTYXZlIGEgcmVnaXN0ZXIgc28gd2UgY2FuIHVzZSBp
dC4KLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgICAg
ICAgICBpZiAoc2NyYXRjaCA9PSBleGl0Lm1fanNWYWx1ZVNvdXJjZS5iYXNlKCkpCi0gICAgICAg
ICAgICAgICAgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QxOwotICAgICAgICAgICAgRW5jb2RlZEpT
VmFsdWUqIHNjcmF0Y2hCdWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGdsb2Jh
bERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKHVpbnQzMl90KSkpOwotICAgICAg
ICAgICAgc3RvcmUzMihzY3JhdGNoLCBzY3JhdGNoQnVmZmVyKTsKLSAgICAgICAgICAgIGxvYWQz
MihleGl0Lm1fanNWYWx1ZVNvdXJjZS5hc0FkZHJlc3MoT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBzdG9y
ZTMyKHNjcmF0Y2gsICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGV4aXQu
bV92YWx1ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnRhZyk7Ci0gICAgICAg
ICAgICBsb2FkMzIoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNBZGRyZXNzKE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCBzY3JhdGNoKTsKLSAg
ICAgICAgICAgIHN0b3JlMzIoc2NyYXRjaCwgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yKj4oZXhpdC5tX3ZhbHVlUHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQoMCkpLT5hc0JpdHMu
cGF5bG9hZCk7Ci0gICAgICAgICAgICBsb2FkMzIoc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaGFzS25vd25UYWcoKSkgewot
ICAgICAgICAgICAgc3RvcmUzMihJbW0zMihleGl0Lm1fanNWYWx1ZVNvdXJjZS50YWcoKSksICZi
aXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGV4aXQubV92YWx1ZVByb2ZpbGUt
PnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnRhZyk7Ci0gICAgICAgICAgICBzdG9yZTMyKGV4
aXQubV9qc1ZhbHVlU291cmNlLnBheWxvYWRHUFIoKSwgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yKj4oZXhpdC5tX3ZhbHVlUHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQoMCkpLT5h
c0JpdHMucGF5bG9hZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdG9yZTMyKGV4
aXQubV9qc1ZhbHVlU291cmNlLnRhZ0dQUigpLCAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IqPihleGl0Lm1fdmFsdWVQcm9maWxlLT5zcGVjRmFpbEJ1Y2tldCgwKSktPmFzQml0
cy50YWcpOwotICAgICAgICAgICAgc3RvcmUzMihleGl0Lm1fanNWYWx1ZVNvdXJjZS5wYXlsb2Fk
R1BSKCksICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGV4aXQubV92YWx1
ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnBheWxvYWQpOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIC8vIDQpIEZpZ3VyZSBvdXQgaG93IG1hbnkgc2NyYXRjaCBzbG90
cyB3ZSdsbCBuZWVkLiBXZSBuZWVkIG9uZSBmb3IgZXZlcnkgR1BSL0ZQUgotICAgIC8vICAgIHdo
b3NlIGRlc3RpbmF0aW9uIGlzIG5vdyBvY2N1cGllZCBieSBhIERGRyB2aXJ0dWFsIHJlZ2lzdGVy
LCBhbmQgd2UgbmVlZAotICAgIC8vICAgIG9uZSBmb3IgZXZlcnkgZGlzcGxhY2VkIHZpcnR1YWwg
cmVnaXN0ZXIgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbgotICAgIC8vICAgIEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzIG9mIHRoZW0uIEFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uc3RhbnRz
LAotICAgIC8vICAgIGFueSB1bmRlZmluZWQgc2xvdHMsIGFueSBGUFIgc2xvdHMsIGFuZCBhbnkg
dW5ib3hlZCBpbnRzLgotICAgICAgICAgICAgCi0gICAgVmVjdG9yPGJvb2w+IHBvaXNvbmVkVmly
dHVhbFJlZ2lzdGVycyhleGl0Lm1fdmFyaWFibGVzLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycy5zaXplKCk7ICsraSkKLSAgICAg
ICAgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2ldID0gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBu
dW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyA9IDA7Ci0gICAgdW5zaWduZWQgbnVtYmVy
T2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzID0gMDsKLSAgICAKLSAgICAvLyBCb29sZWFucyBm
b3IgZmFzdCBjaGVja3MuIFdlIGV4cGVjdCB0aGF0IG1vc3QgT1NSIGV4aXRzIGRvIG5vdCBoYXZl
IHRvIHJlYm94Ci0gICAgLy8gSW50MzJzLCBoYXZlIG5vIEZQUnMsIGFuZCBoYXZlIG5vIGNvbnN0
YW50cy4gSWYgdGhlcmUgYXJlIGNvbnN0YW50cywgd2UKLSAgICAvLyBleHBlY3QgbW9zdCBvZiB0
aGVtIHRvIGJlIGpzVW5kZWZpbmVkKCk7IGlmIHRoYXQncyB0cnVlIHRoZW4gd2UgaGFuZGxlIHRo
YXQKLSAgICAvLyBzcGVjaWFsbHkgdG8gbWluaW1pemUgY29kZSBzaXplIGFuZCBleGVjdXRpb24g
dGltZS4KLSAgICBib29sIGhhdmVVbmJveGVkSW50MzJJblJlZ2lzdGVyRmlsZSA9IGZhbHNlOwot
ICAgIGJvb2wgaGF2ZVVuYm94ZWRDZWxsSW5SZWdpc3RlckZpbGUgPSBmYWxzZTsKLSAgICBib29s
IGhhdmVVbmJveGVkQm9vbGVhbkluUmVnaXN0ZXJGaWxlID0gZmFsc2U7Ci0gICAgYm9vbCBoYXZl
RlBScyA9IGZhbHNlOwotICAgIGJvb2wgaGF2ZUNvbnN0YW50cyA9IGZhbHNlOwotICAgIGJvb2wg
aGF2ZVVuZGVmaW5lZCA9IGZhbHNlOwotICAgIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5k
ZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAg
ICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIERpc3Bs
YWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICAgICAgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFs
UmVnaXN0ZXJzKys7Ci0gICAgICAgICAgICBBU1NFUlQoKGludClyZWNvdmVyeS52aXJ0dWFsUmVn
aXN0ZXIoKSA+PSAwKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gU2VlIGlmIHdlIG1p
Z2h0IGxpa2UgdG8gc3RvcmUgdG8gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyIGJlZm9yZSBkb2luZwot
ICAgICAgICAgICAgLy8gdmlydHVhbCByZWdpc3RlciBzaHVmZmxpbmcuIElmIHNvLCB3ZSBzYXkg
dGhhdCB0aGUgdmlydHVhbCByZWdpc3RlcgotICAgICAgICAgICAgLy8gaXMgcG9pc29uZWQ6IGl0
IGNhbm5vdCBiZSBzdG9yZWQgdG8gdW50aWwgYWZ0ZXIgZGlzcGxhY2VkIHZpcnR1YWwKLSAgICAg
ICAgICAgIC8vIHJlZ2lzdGVycyBhcmUgaGFuZGxlZC4gV2UgdHJhY2sgcG9pc29uZWQgdmlydHVh
bCByZWdpc3RlciBjYXJlZnVsbHkKLSAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0aGlzIGhhcHBl
bnMgZWZmaWNpZW50bHkuIE5vdGUgdGhhdCB3ZSBleHBlY3QgdGhpcyBjYXNlCi0gICAgICAgICAg
ICAvLyB0byBiZSByYXJlLCBzbyB0aGUgaGFuZGxpbmcgb2YgaXQgaXMgb3B0aW1pemVkIGZvciB0
aGUgY2FzZXMgaW4KLSAgICAgICAgICAgIC8vIHdoaWNoIGl0IGRvZXMgbm90IGhhcHBlbi4KLSAg
ICAgICAgICAgIGlmIChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA8IChpbnQpZXhpdC5tX3Zh
cmlhYmxlcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4aXQubV92YXJpYWJs
ZXNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldLnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBJbkdQUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BS
OgotICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKLSAgICAgICAgICAg
ICAgICBjYXNlIEluUGFpcjoKLSAgICAgICAgICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAg
ICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFs
UmVnaXN0ZXIoKV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvaXNvbmVkVmlydHVhbFJl
Z2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMrKzsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgotICAgICAgICAgICAg
aGF2ZVVuYm94ZWRJbnQzMkluUmVnaXN0ZXJGaWxlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJv
eGVkQ2VsbDoKLSAgICAgICAgICAgIGhhdmVVbmJveGVkQ2VsbEluUmVnaXN0ZXJGaWxlID0gdHJ1
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQWxyZWFk
eUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQm9vbGVhbjoKLSAgICAgICAgICAgIGhhdmVVbmJveGVk
Qm9vbGVhbkluUmVnaXN0ZXJGaWxlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAgICBoYXZlRlBScyA9IHRydWU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENvbnN0YW50
OgotICAgICAgICAgICAgaGF2ZUNvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAocmVj
b3ZlcnkuY29uc3RhbnQoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIGhhdmVVbmRl
ZmluZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoQnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFs
dWUqPihnbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgKiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMgKyAoKG51bWJlck9mRGlz
cGxhY2VkVmlydHVhbFJlZ2lzdGVycyAqIDIpIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
ID8gMCA6IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykpKSk7Ci0KLSAgICAvLyBG
cm9tIGhlcmUgb24sIHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpdCBpcyBwcm9maXRhYmxlIHRvIG1h
eGltaXplIHRoZSBkaXN0YW5jZQotICAgIC8vIGJldHdlZW4gd2hlbiBzb21ldGhpbmcgaXMgY29t
cHV0ZWQgYW5kIHdoZW4gaXQgaXMgc3RvcmVkLgotICAgIAotICAgIC8vIDUpIFBlcmZvcm0gYWxs
IHJlYm94aW5nIG9mIGludGVnZXJzIGFuZCBjZWxscywgZXhjZXB0IGZvciB0aG9zZSBpbiByZWdp
c3RlcnMuCi0KLSAgICBpZiAoaGF2ZVVuYm94ZWRJbnQzMkluUmVnaXN0ZXJGaWxlIHx8IGhhdmVV
bmJveGVkQ2VsbEluUmVnaXN0ZXJGaWxlIHx8IGhhdmVVbmJveGVkQm9vbGVhbkluUmVnaXN0ZXJG
aWxlKSB7Ci0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9m
UmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5
JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICBzd2l0
Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFscmVhZHlJblJl
Z2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgotICAgICAgICAgICAgICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4oZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZENl
bGw6Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZvcklu
ZGV4KGluZGV4KSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2Fz
ZSBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRCb29sZWFuOgotICAgICAgICAgICAgICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YWdGb3Ioc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyA2
KSBEdW1wIGFsbCBub24tcG9pc29uZWQgR1BScy4gRm9yIHBvaXNvbmVkIEdQUnMsIHNhdmUgdGhl
bSBpbnRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UuCi0gICAgLy8gICAgTm90ZSB0aGF0IEdQUnMgZG8g
bm90IGhhdmUgYSBmYXN0IGNoYW5nZSAobGlrZSBoYXZlRlBScykgYmVjYXVzZSB3ZSBleHBlY3Qg
dGhhdAotICAgIC8vICAgIG1vc3QgT1NSIGZhaWx1cmUgcG9pbnRzIHdpbGwgaGF2ZSBhdCBsZWFz
dCBvbmUgR1BSIHRoYXQgbmVlZHMgdG8gYmUgZHVtcGVkLgotICAgIAotICAgIHVuc2lnbmVkIHNj
cmF0Y2hJbmRleCA9IDA7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVt
YmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICBpbnQgb3Bl
cmFuZCA9IGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KTsKLSAgICAgICAgc3dpdGNoIChyZWNv
dmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIEluR1BSOgotICAgICAgICBjYXNlIFVu
Ym94ZWRJbnQzMkluR1BSOgotICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6Ci0gICAg
ICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCi0gICAgICAgICAgICAgICAgc3Rv
cmUzMihyZWNvdmVyeS5ncHIoKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZl
ciArIHNjcmF0Y2hJbmRleCsrKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgdWludDMyX3QgdGFnID0gSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZzsKLSAgICAgICAgICAgICAg
ICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gSW5HUFIpCi0gICAgICAgICAgICAgICAgICAg
IHRhZyA9IEpTVmFsdWU6OkNlbGxUYWc7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVjb3Zl
cnkudGVjaG5pcXVlKCkgPT0gVW5ib3hlZEludDMySW5HUFIpCi0gICAgICAgICAgICAgICAgICAg
IHRhZyA9IEpTVmFsdWU6OkludDMyVGFnOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgdGFnID0gSlNWYWx1ZTo6Qm9vbGVhblRhZzsKLSAgICAgICAgICAgICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMih0YWcpLCB0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5k
KSk7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihyZWNvdmVyeS5ncHIoKSwgcGF5bG9hZEZvcigo
VmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEluUGFpcjoKLSAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFi
bGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5k
ZXgoaW5kZXgpXSkgewotICAgICAgICAgICAgICAgIHN0b3JlMzIocmVjb3ZlcnkudGFnR1BSKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAg
ICAgICAgICAgICAgICBzdG9yZTMyKHJlY292ZXJ5LnBheWxvYWRHUFIoKSwgcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICAgICAgICAg
ICAgICBzY3JhdGNoSW5kZXgrKzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgc3RvcmUzMihyZWNvdmVyeS50YWdHUFIoKSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3Bl
cmFuZCkpOwotICAgICAgICAgICAgICAgIHN0b3JlMzIocmVjb3ZlcnkucGF5bG9hZEdQUigpLCBw
YXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBBdCB0aGlzIHBvaW50IGFsbCBHUFJzIGFyZSBh
dmFpbGFibGUgZm9yIHNjcmF0Y2ggdXNlLgotICAgIAotICAgIGlmIChoYXZlRlBScykgewotICAg
ICAgICAvLyA3KSBCb3ggYWxsIGRvdWJsZXMgKHJlbGllcyBvbiB0aGVyZSBiZWluZyBtb3JlIEdQ
UnMgdGhhbiBGUFJzKQotICAgICAgICAvLyAgICBGb3IgSlNWYWx1ZTMyXzY0LCBubyBuZWVkIHRv
IGJveCBkb3VibGVzLgotICAgICAgICAKLSAgICAgICAgLy8gOCkgRHVtcCBhbGwgZG91YmxlcyBp
bnRvIHRoZSByZWdpc3RlciBmaWxlLCBvciB0byB0aGUgc2NyYXRjaCBzdG9yYWdlIGlmCi0gICAg
ICAgIC8vICAgIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIHJlZ2lzdGVyIGlzIHBvaXNvbmVkLgot
ICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVy
T2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zl
cnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgIGlm
IChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmly
dHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkKLSAgICAgICAgICAg
ICAgICBzdG9yZURvdWJsZShyZWNvdmVyeS5mcHIoKSwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJ
bmRleCsrKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdG9yZURvdWJsZShy
ZWNvdmVyeS5mcHIoKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZv
ckluZGV4KGluZGV4KSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChzY3Jh
dGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOwotICAgIAotICAg
IC8vIDkpIFJlc2h1ZmZsZSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMuIE9wdGltaXplIGZv
ciB0aGUgY2FzZSB0aGF0Ci0gICAgLy8gICAgdGhlIG51bWJlciBvZiBkaXNwbGFjZWQgdmlydHVh
bCByZWdpc3RlcnMgaXMgbm90IG1vcmUgdGhhbiB0aGUgbnVtYmVyCi0gICAgLy8gICAgb2YgYXZh
aWxhYmxlIHBoeXNpY2FsIHJlZ2lzdGVycy4KLSAgICAKLSAgICBpZiAobnVtYmVyT2ZEaXNwbGFj
ZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7Ci0gICAgICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1
YWxSZWdpc3RlcnMgKiAyIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKSB7Ci0gICAgICAg
ICAgICAvLyBTbyBmYXIgdGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBjYXNlIHRoYXQgdHJpZ2dlcnMg
YWxsIHRoZSB0aW1lLCBidXQKLSAgICAgICAgICAgIC8vIHRoYXQgaXMgZmFyIGZyb20gZ3VhcmFu
dGVlZC4KLSAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRleCA9
IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJP
ZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAg
ICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUp
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGxvYWQzMihw
YXlsb2FkRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3Rl
cihkaXNwbGFjZW1lbnRJbmRleCsrKSk7Ci0gICAgICAgICAgICAgICAgbG9hZDMyKHRhZ0Zvcihy
ZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2Vt
ZW50SW5kZXgrKykpOwotICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgIGRpc3Bs
YWNlbWVudEluZGV4ID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgp
OwotICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgc3RvcmUzMihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBw
YXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7
Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVu
dEluZGV4KyspLCB0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChp
bmRleCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIHNodWZmbGluZyBhbGdvcml0aG0gdGhhdCB3ZSB1
c2UKLSAgICAgICAgICAgIC8vIGZvciBzcGVjdWxhdGl2ZS0+bm9uLXNwZWN1bGF0aXZlIGp1bXBz
LCBpZiB3ZSBldmVyIGRpc2NvdmVyIHRoYXQKLSAgICAgICAgICAgIC8vIHNvbWUgaG90IGNvZGUg
d2l0aCBsb3RzIG9mIGxpdmUgdmFsdWVzIHRoYXQgZ2V0IGRpc3BsYWNlZCBhbmQKLSAgICAgICAg
ICAgIC8vIHNwaWxsZWQgcmVhbGx5IGVuam95cyBmcmVxdWVudGx5IGZhaWxpbmcgc3BlY3VsYXRp
b24uCi0gICAgICAgIAotICAgICAgICAgICAgLy8gRm9yIG5vdyB0aGlzIGNvZGUgaXMgZW5naW5l
ZXJlZCB0byBiZSBjb3JyZWN0IGJ1dCBwcm9iYWJseSBub3QKLSAgICAgICAgICAgIC8vIHN1cGVy
LiBJbiBwYXJ0aWN1bGFyLCBpdCBjb3JyZWN0bHkgaGFuZGxlcyBjYXNlcyB3aGVyZSBmb3IgZXhh
bXBsZQotICAgICAgICAgICAgLy8gdGhlIGRpc3BsYWNlbWVudHMgYXJlIGEgcGVybXV0YXRpb24g
b2YgdGhlIGRlc3RpbmF0aW9uIHZhbHVlcywgbGlrZQotICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgIC8vIDEgLT4gMgotICAgICAgICAgICAgLy8gMiAtPiAxCi0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gSXQgYWNjb21wbGlzaGVzIHRoaXMgYnkgc2ltcGx5IGxpZnRpbmcgYWxsIG9m
IHRoZSB2aXJ0dWFsIHJlZ2lzdGVycwotICAgICAgICAgICAgLy8gZnJvbSB0aGVpciBvbGQgKERG
RyBKSVQpIGxvY2F0aW9ucyBhbmQgZHJvcHBpbmcgdGhlbSBpbiBhIHNjcmF0Y2gKLSAgICAgICAg
ICAgIC8vIGxvY2F0aW9uIGluIG1lbW9yeSwgYW5kIHRoZW4gdHJhbnNmZXJyaW5nIGZyb20gdGhh
dCBzY3JhdGNoIGxvY2F0aW9uCi0gICAgICAgICAgICAvLyB0byB0aGVpciBuZXcgKG9sZCBKSVQp
IGxvY2F0aW9ucy4KLSAgICAgICAgCi0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGlu
ZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAg
ICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGlu
ZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxh
Y2VkSW5SZWdpc3RlckZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwg
R1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIGxvYWQzMih0YWdGb3IocmVjb3Zlcnku
dmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICAgICAgc3Rv
cmUzMihHUFJJbmZvOjpyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZl
ciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICAgICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJl
Z1QxLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7
Ci0gICAgICAgICAgICAgICAgc2NyYXRjaEluZGV4Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICAgICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnM7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1i
ZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAg
ICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZp
bGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGxvYWQz
MihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCks
IEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICBsb2FkMzIocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZyksIEdQUkluZm86OnJlZ1QxKTsKLSAg
ICAgICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBwYXlsb2FkRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAg
c3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVy
YW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgc2NyYXRjaEluZGV4Kys7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2hJbmRleCA9
PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyArIG51bWJlck9mRGlzcGxhY2VkVmly
dHVhbFJlZ2lzdGVycyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gMTApIER1bXAg
YWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXJzLgotICAgIAotICAgIHNjcmF0Y2hJbmRleCA9
IDA7Ci0gICAgaWYgKG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7Ci0gICAgICAg
IGZvciAoaW50IHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IChpbnQpZXhp
dC5tX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7Ci0gICAgICAgICAgICBp
ZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1t2aXJ0dWFsUmVnaXN0ZXJdKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IGV4aXQubV92YXJpYWJsZXNbdmlydHVhbFJlZ2lzdGVyXTsKLSAg
ICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgSW5HUFI6Ci0gICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICAg
ICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOiB7Ci0gICAgICAgICAgICAgICAgbG9hZDMyKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKykgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpLCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwg
cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOwotICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHRhZyA9IEpTVmFsdWU6OkVtcHR5VmFsdWVUYWc7Ci0gICAgICAgICAg
ICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IEluR1BSKQotICAgICAgICAgICAgICAg
ICAgICB0YWcgPSBKU1ZhbHVlOjpDZWxsVGFnOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJl
Y292ZXJ5LnRlY2huaXF1ZSgpID09IFVuYm94ZWRJbnQzMkluR1BSKQotICAgICAgICAgICAgICAg
ICAgICB0YWcgPSBKU1ZhbHVlOjpJbnQzMlRhZzsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkJvb2xlYW5UYWc7Ci0gICAgICAgICAgICAg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIodGFnKSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpdmly
dHVhbFJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAgICBjYXNlIEluUGFpcjoKLSAgICAg
ICAgICAgICAgICBsb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciAr
IHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgbG9hZDMy
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpLCBHUFJJ
bmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgcGF5
bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOwotICAgICAgICAgICAg
ICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIHRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1
YWxSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIHNjcmF0Y2hJbmRleCsrOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAg
ICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJz
KTsKLSAgICAKLSAgICAvLyAxMSkgRHVtcCBhbGwgY29uc3RhbnRzLiBPcHRpbWl6ZSBmb3IgVW5k
ZWZpbmVkLCBzaW5jZSB0aGF0J3MgYSBjb25zdGFudCB3ZSBzZWUKLSAgICAvLyAgICAgb2Z0ZW4u
Ci0KLSAgICBpZiAoaGF2ZUNvbnN0YW50cykgewotICAgICAgICBpZiAoaGF2ZVVuZGVmaW5lZCkg
ewotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS5wYXlsb2FkKCkp
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihqc1VuZGVm
aW5lZCgpLnRhZygpKSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMo
KTsgKytpbmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zlcnkg
PSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpICE9IENvbnN0YW50KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmluZWQoKSkgewotICAgICAgICAg
ICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rl
cilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICBzdG9yZTMy
KEdQUkluZm86OnJlZ1QxLCB0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJ
bmRleChpbmRleCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS5wYXlsb2FkKCkpLCBwYXlsb2Fk
Rm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAg
ICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS50YWco
KSksIHRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIDEyKSBBZGp1
c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0aW5nIE9T
Uiwgd2Uga25vdwotICAgIC8vICAgICB0aGF0IGFsbCBuZXcgY2FsbHMgaW50byB0aGlzIGNvZGUg
d2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1dGUKLSAgICAvLyAgICAgY291bnRl
ciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5kIGNh
bGwgZnJhbWVzCi0gICAgLy8gICAgIHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9sZCBK
SVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MKLSAgICAvLyAgICAgT1NSIGV4
aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgotICAgIC8v
Ci0gICAgLy8gICAgIChhKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBnZXRzIGEgY2hh
bmNlIHRvIHJlZW50ZXIgb3B0aW1pemVkCi0gICAgLy8gICAgICAgICBjb2RlIGV2ZW50dWFsbHks
IHNpbmNlIG9wdGltaXplZCBjb2RlIGlzIGZhc3Rlci4gQnV0IHdlIGRvbid0Ci0gICAgLy8gICAg
ICAgICB3YW50IHRvIGRvIHN1Y2ggcmVlbnRlcnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChjKSBi
ZWxvdykuCi0gICAgLy8KLSAgICAvLyAgICAgKGIpIElmIHRoZXJlIGlzIGNvZGUgb24gdGhlIGNh
bGwgc3RhY2sgdGhhdCBpcyBzdGlsbCBydW5uaW5nIHRoZSBvbGQKLSAgICAvLyAgICAgICAgIEpJ
VCdzIGNvZGUgYW5kIGhhcyBuZXZlciBPU1InZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNl
IHRvCi0gICAgLy8gICAgICAgICBwZXJmb3JtIE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRo
YXQgd2UndmUgZXhpdGVkLgotICAgIC8vCi0gICAgLy8gICAgIChjKSBDb2RlIHRoZSBwZXJmb3Jt
cyBhbiBPU1IgZXhpdCBzaG91bGQgbm90IGltbWVkaWF0ZWx5IHJldHJ5IE9TUgotICAgIC8vICAg
ICAgICAgZW50cnksIHNpbmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBl
bnRyeSBpcwotICAgIC8vICAgICAgICAgcGFydGljdWxhcmx5IGV4cGVuc2l2ZS4KLSAgICAvLwot
ICAgIC8vICAgICAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8g
bm90IHJlc3VsdCBpbiB0aGUgY29kZQotICAgIC8vICAgICAgICAgcnVubmluZyBpbiBhIGhvdCBs
b29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KLSAgICAvLwot
ICAgIC8vICAgICBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNv
dW50ZXIgdG8KLSAgICAvLyAgICAgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgp
LiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgZW5kYW5nZXIKLSAgICAvLyAgICAgKGEpIGFuZCAo
YiksIHNpbmNlIHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5
IGZvcgotICAgIC8vICAgICBldmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZvcm0gT1NSIGVudHJ5LiBF
c3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFwcGVucwotICAgIC8vICAgICBmcmVxdWVudGx5IGFu
ZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVy
Ci0gICAgLy8gICAgIGJlY29tZSBub24tbmVnYXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVy
IGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5Ci0gICAgLy8gICAgIHdpbGwgb25seSBoYXBwZW4gaWYg
YSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5Ci0gICAg
Ly8gICAgIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0
IHRha2UgY2FyZSBvZiAoZCksCi0gICAgLy8gICAgIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFp
bHVyZSB3b3VsZCByZXNldCB0aGUgZXhlY3V0ZSBjb3VudGVyLgotICAgIC8vICAgICBTbyB3ZSBj
aGVjayBoZXJlIGlmIHRoZSBudW1iZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlm
aWNhbnRseQotICAgIC8vICAgICBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAo
d2Ugd2FudCA5MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlmCi0gICAgLy8gICAgIHRoZXJlIGhhdmUg
YmVlbiBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhl
Ci0gICAgLy8gICAgIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0
bwotICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCi0gICAg
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOwot
ICAgIAotICAgIGxvYWQzMihBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNl
dE9mU3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgIGxvYWQz
MihBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVT
dWNjZXNzQ291bnRlcigpKSwgR1BSSW5mbzo6cmVnVDEpOwotICAgIGFkZDMyKEltbTMyKDEpLCBH
UFJJbmZvOjpyZWdUMik7Ci0gICAgYWRkMzIoSW1tMzIoLTEpLCBHUFJJbmZvOjpyZWdUMSk7Ci0g
ICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMiwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSkpOwotICAgIHN0b3JlMzIoR1BS
SW5mbzo6cmVnVDEsIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZT
cGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgCi0g
ICAgSnVtcCBmZXdGYWlscyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIs
IEltbTMyKGNvZGVCbG9jaygpLT5sYXJnZUZhaWxDb3VudFRocmVzaG9sZCgpKSk7Ci0gICAgbXVs
MzIoSW1tMzIoSGV1cmlzdGljczo6ZGVzaXJlZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxSYXRpbyks
IEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgCi0gICAgSnVtcCBsb3dGYWls
UmF0ZSA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJl
Z1QxKTsKLSAgICAKLSAgICAvLyBSZW9wdGltaXplIGFzIHNvb24gYXMgcG9zc2libGUuCi0gICAg
c3RvcmUzMihJbW0zMihIZXVyaXN0aWNzOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkV4ZWN1dGVDb3VudGVyKCkpKTsKLSAgICBKdW1wIGRvbmVBZGp1c3RpbmcgPSBqdW1wKCk7
Ci0gICAgCi0gICAgZmV3RmFpbHMubGluayh0aGlzKTsKLSAgICBsb3dGYWlsUmF0ZS5saW5rKHRo
aXMpOwotICAgIAotICAgIHN0b3JlMzIoSW1tMzIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkt
PmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpLCBBZGRyZXNzKEdQUklu
Zm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNvdW50ZXIoKSkpOwotICAgIAot
ICAgIGRvbmVBZGp1c3RpbmcubGluayh0aGlzKTsKLSAgICAKLSAgICAvLyAxMykgTG9hZCB0aGUg
cmVzdWx0IG9mIHRoZSBsYXN0IGJ5dGVjb2RlIG9wZXJhdGlvbiBpbnRvIHJlZ1QwLgotICAgIAot
ICAgIGlmIChleGl0Lm1fbGFzdFNldE9wZXJhbmQgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKSkgewotICAgICAgICBsb2FkMzIocGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKWV4
aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKLSAg
ICAgICAgbG9hZDMyKHRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFu
ZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7Ci0gICAgfQotICAgIAotICAgIC8v
IDE0KSBGaXggY2FsbCBmcmFtZSAocykuCi0gICAgCi0gICAgQVNTRVJUKGNvZGVCbG9jaygpLT5h
bHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBhZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKTsKLSAgICAK
LSAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyBjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZXIpIHsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pOwotICAgICAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3IoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpOwotICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVB
bmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBkZWNvZGVkQ29kZU1hcEZvcihiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlcik7Ci0gICAgICAgIHVuc2lnbmVkIHJldHVybkJ5dGVjb2Rl
SW5kZXggPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xF
TkdUSChvcF9jYWxsKTsKLSAgICAgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5n
ID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVn
aW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCByZXR1cm5CeXRlY29kZUluZGV4KTsKLSAgICAg
ICAgCi0gICAgICAgIEFTU0VSVChtYXBwaW5nKTsKLSAgICAgICAgQVNTRVJUKG1hcHBpbmctPm1f
Ynl0ZWNvZGVJbmRleCA9PSByZXR1cm5CeXRlY29kZUluZGV4KTsKLSAgICAgICAgCi0gICAgICAg
IHZvaWQqIGp1bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldEpJVENvZGUoKS5z
dGFydCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOwotCi0gICAgICAgIEdQUlJl
ZyBjYWxsZXJGcmFtZUdQUjsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlu
bGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgYWRkMzIoSW1tMzIoaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDMpOwotICAg
ICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpyZWdUMzsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
OwotICAgICAgICAKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVC
bG9jayksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKSkpOwotICAgICAgICBzdG9yZTMyKElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpKTsKLSAgICAg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS0+c2NvcGUo
KSksIHBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpKTsKLSAgICAgICAgc3RvcmUzMihJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lKSkpOwotICAgICAg
ICBzdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgcGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSkp
KTsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgcGF5bG9hZEZv
cigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0
ZXJGaWxlOjpSZXR1cm5QQykpKTsKLSAgICAgICAgc3RvcmUzMihJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZyksIHRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSkpOwotICAgICAgICBzdG9yZTMyKElt
bTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSksIHBheWxvYWRGb3IoKFZpcnR1
YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6
QXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgc3RvcmUzMihJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBSZWdpc3RlckZpbGU6OkNhbGxlZSkpKTsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSksIHBheWxvYWRGb3IoKFZpcnR1YWxSZWdp
c3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVl
KSkpOwotICAgIH0KLSAgICAKLSAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKQotICAgICAgICBhZGRQdHIoSW1tMzIoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3Rlcik7Ci0KLSAgICAvLyAxNSkgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5n
IGJhc2VsaW5lIEpJVCBjb2RlLgotICAgIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7Ci0gICAgVmVjdG9y
PEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gZGVjb2RlZENvZGVN
YXBGb3IoYmFzZWxpbmVDb2RlQmxvY2spOwotICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVu
c2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29k
ZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgCi0gICAgQVNTRVJUKG1hcHBpbmcpOwotICAgIEFTU0VS
VChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgCi0gICAgdm9pZCoganVtcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihiYXNlbGluZUNvZGVCbG9jay0+Z2V0SklU
Q29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7Ci0gICAgCi0g
ICAgQVNTRVJUKEdQUkluZm86OnJlZ1QyICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVy
ICYmIEdQUkluZm86OnJlZ1QyICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7Ci0g
ICAgCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJbmZvOjpyZWdUMik7
Ci0gICAganVtcChHUFJJbmZvOjpyZWdUMik7Ci0KLSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCi0gICAgZnByaW50ZihzdGRlcnIsICIgICAtPiAlcFxuIiwganVtcFRhcmdldCk7Ci0jZW5k
aWYKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYKLSNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlz
aW9uIDk5NTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJERkdPU1JF
eGl0Q29tcGlsZXIuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZH
UmVnaXN0ZXJCYW5rLmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKQEAgLTQwLDEy
ICs0MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgSklUQ29t
cGlsZXI6OmxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYgc3BlY3VsYXRpdmUpCiB7CisgICAg
T1NSRXhpdENvbXBpbGVyIG9zckV4aXRDb21waWxlcigqdGhpcyk7CisgICAgCiAgICAgT1NSRXhp
dFZlY3Rvcjo6SXRlcmF0b3IgZXhpdHNJdGVyID0gc3BlY3VsYXRpdmUub3NyRXhpdHMoKS5iZWdp
bigpOwogICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJhdG9yIGV4aXRzRW5kID0gc3BlY3VsYXRpdmUu
b3NyRXhpdHMoKS5lbmQoKTsKICAgICAKICAgICB3aGlsZSAoZXhpdHNJdGVyICE9IGV4aXRzRW5k
KSB7CiAgICAgICAgIGNvbnN0IE9TUkV4aXQmIGV4aXQgPSAqZXhpdHNJdGVyOwotICAgICAgICBl
eGl0U3BlY3VsYXRpdmVXaXRoT1NSKGV4aXQsIHNwZWN1bGF0aXZlLnNwZWN1bGF0aW9uUmVjb3Zl
cnkoZXhpdC5tX3JlY292ZXJ5SW5kZXgpKTsKKyAgICAgICAgb3NyRXhpdENvbXBpbGVyLmNvbXBp
bGVFeGl0KGV4aXQsIHNwZWN1bGF0aXZlLnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5tX3JlY292
ZXJ5SW5kZXgpKTsKICAgICAgICAgKytleGl0c0l0ZXI7CiAgICAgfQogfQpAQCAtMjc1LDUzMSAr
Mjc4LDYgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogICAgIGVu
dHJ5ID0gSklUQ29kZShsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpLCBKSVRDb2RlOjpERkdKSVQp
OwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLQotdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1
bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVjdWxhdGlvblJlY292ZXJ5KiBy
ZWNvdmVyeSkKLXsKLSAgICAvLyAxKSBQcm8tZm9ybWEgc3R1ZmYuCi0gICAgZXhpdC5tX2NoZWNr
LmxpbmsodGhpcyk7Ci0KLSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZnByaW50
ZihzdGRlcnIsICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQgKCIsIChpbnQpZXhpdC5tX25vZGVJbmRl
eCk7Ci0gICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsg
OyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgewotICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgImJjIyV1IiwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsK
LSAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiAlcCAiLCBjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7Ci0gICAgfQotICAgIGZwcmludGYoc3RkZXJy
LCAiKSBhdCBKSVQgb2Zmc2V0IDB4JXggICIsIGRlYnVnT2Zmc2V0KCkpOwotICAgIGV4aXQuZHVt
cChzdGRlcnIpOwotI2VuZGlmCi0jaWYgREZHX0VOQUJMRShWRVJCT1NFX1NQRUNVTEFUSU9OX0ZB
SUxVUkUpCi0gICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvKiBkZWJ1Z0luZm8gPSBuZXcg
U3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvOwotICAgIGRlYnVnSW5mby0+Y29kZUJsb2NrID0g
bV9jb2RlQmxvY2s7Ci0gICAgZGVidWdJbmZvLT5kZWJ1Z09mZnNldCA9IGRlYnVnT2Zmc2V0KCk7
Ci0gICAgCi0gICAgZGVidWdDYWxsKGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1
cmUsIGRlYnVnSW5mbyk7Ci0jZW5kaWYKLSAgICAKLSNpZiBERkdfRU5BQkxFKEpJVF9CUkVBS19P
Tl9TUEVDVUxBVElPTl9GQUlMVVJFKQotICAgIGJyZWFrcG9pbnQoKTsKLSNlbmRpZgotICAgIAot
I2lmIERGR19FTkFCTEUoU1VDQ0VTU19TVEFUUykKLSAgICBzdGF0aWMgU2FtcGxpbmdDb3VudGVy
IGNvdW50ZXIoIlNwZWN1bGF0aW9uRmFpbHVyZSIpOwotICAgIGVtaXRDb3VudChjb3VudGVyKTsK
LSNlbmRpZgotICAgIAotICAgIC8vIDIpIFBlcmZvcm0gc3BlY3VsYXRpb24gcmVjb3ZlcnkuIFRo
aXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBhbiBvcGVyYXRpb24KLSAgICAvLyAgICBzdGFy
dHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlmeWluZyB0aGUgc3BlY3VsYXRpb24gaXQgaGFz
IGFscmVhZHkgbWFkZS4KLSAgICAKLSAgICBHUFJSZWcgYWxyZWFkeUJveGVkID0gSW52YWxpZEdQ
UlJlZzsKLSAgICAKLSAgICBpZiAocmVjb3ZlcnkpIHsKLSAgICAgICAgc3dpdGNoIChyZWNvdmVy
eS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGQ6Ci0gICAgICAgICAgICBz
dWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5LT5kZXN0KCkpOwotICAgICAgICAgICAgb3JQ
dHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS0+ZGVzdCgpKTsKLSAg
ICAgICAgICAgIGFscmVhZHlCb3hlZCA9IHJlY292ZXJ5LT5kZXN0KCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNr
OgotICAgICAgICAgICAgeG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihW
YWx1ZUZhbHNlKSksIHJlY292ZXJ5LT5kZXN0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gMykgUmVmaW5lIHNvbWUgdmFsdWUgcHJvZmlsZSwgaWYgYXBwcm9w
cmlhdGUuCi0gICAgCi0gICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UgJiYgISFleGl0Lm1f
dmFsdWVQcm9maWxlKSB7Ci0gICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJl
c3MoKSkgewotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgYmUgc3VyZSB0aGF0IHdlIGhhdmUgYSBz
cGFyZSByZWdpc3Rlci4gU28gdXNlIHRoZSB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsCi0gICAgICAg
ICAgICAvLyBzaW5jZSB3ZSBrbm93IGhvdyB0byByZXN0b3JlIGl0LgotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGV4aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgZXhpdC5tX3ZhbHVlUHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQo
MCkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4o
VGFnVHlwZU51bWJlcikpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHN0b3JlUHRyKGV4aXQubV9qc1ZhbHVlU291cmNlLmdwcigp
LCBleGl0Lm1fdmFsdWVQcm9maWxlLT5zcGVjRmFpbEJ1Y2tldCgwKSk7Ci0gICAgfQotCi0gICAg
Ly8gNCkgRmlndXJlIG91dCBob3cgbWFueSBzY3JhdGNoIHNsb3RzIHdlJ2xsIG5lZWQuIFdlIG5l
ZWQgb25lIGZvciBldmVyeSBHUFIvRlBSCi0gICAgLy8gICAgd2hvc2UgZGVzdGluYXRpb24gaXMg
bm93IG9jY3VwaWVkIGJ5IGEgREZHIHZpcnR1YWwgcmVnaXN0ZXIsIGFuZCB3ZSBuZWVkCi0gICAg
Ly8gICAgb25lIGZvciBldmVyeSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlciBpZiB0aGVyZSBh
cmUgbW9yZSB0aGFuCi0gICAgLy8gICAgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgb2YgdGhl
bS4gQWxzbyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25zdGFudHMsCi0gICAgLy8gICAgYW55IHVu
ZGVmaW5lZCBzbG90cywgYW55IEZQUiBzbG90cywgYW5kIGFueSB1bmJveGVkIGludHMuCi0gICAg
ICAgICAgICAKLSAgICBWZWN0b3I8Ym9vbD4gcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKGV4aXQu
bV92YXJpYWJsZXMuc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzLnNpemUoKTsgKytpKQotICAgICAgICBwb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnNbaV0gPSBmYWxzZTsKLQotICAgIHVuc2lnbmVkIG51bWJlck9mUG9pc29uZWRWaXJ0
dWFsUmVnaXN0ZXJzID0gMDsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxS
ZWdpc3RlcnMgPSAwOwotICAgIAotICAgIC8vIEJvb2xlYW5zIGZvciBmYXN0IGNoZWNrcy4gV2Ug
ZXhwZWN0IHRoYXQgbW9zdCBPU1IgZXhpdHMgZG8gbm90IGhhdmUgdG8gcmVib3gKLSAgICAvLyBJ
bnQzMnMsIGhhdmUgbm8gRlBScywgYW5kIGhhdmUgbm8gY29uc3RhbnRzLiBJZiB0aGVyZSBhcmUg
Y29uc3RhbnRzLCB3ZQotICAgIC8vIGV4cGVjdCBtb3N0IG9mIHRoZW0gdG8gYmUganNVbmRlZmlu
ZWQoKTsgaWYgdGhhdCdzIHRydWUgdGhlbiB3ZSBoYW5kbGUgdGhhdAotICAgIC8vIHNwZWNpYWxs
eSB0byBtaW5pbWl6ZSBjb2RlIHNpemUgYW5kIGV4ZWN1dGlvbiB0aW1lLgotICAgIGJvb2wgaGF2
ZVVuYm94ZWRJbnQzMnMgPSBmYWxzZTsKLSAgICBib29sIGhhdmVGUFJzID0gZmFsc2U7Ci0gICAg
Ym9vbCBoYXZlQ29uc3RhbnRzID0gZmFsc2U7Ci0gICAgYm9vbCBoYXZlVW5kZWZpbmVkID0gZmFs
c2U7Ci0gICAgCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICBzd2l0Y2ggKHJlY292
ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVy
RmlsZToKLSAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAg
ICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgICAgIG51bWJlck9mRGlz
cGxhY2VkVmlydHVhbFJlZ2lzdGVycysrOwotICAgICAgICAgICAgQVNTRVJUKChpbnQpcmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkgPj0gMCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IFNlZSBpZiB3ZSBtaWdodCBsaWtlIHRvIHN0b3JlIHRvIHRoaXMgdmlydHVhbCByZWdpc3RlciBi
ZWZvcmUgZG9pbmcKLSAgICAgICAgICAgIC8vIHZpcnR1YWwgcmVnaXN0ZXIgc2h1ZmZsaW5nLiBJ
ZiBzbywgd2Ugc2F5IHRoYXQgdGhlIHZpcnR1YWwgcmVnaXN0ZXIKLSAgICAgICAgICAgIC8vIGlz
IHBvaXNvbmVkOiBpdCBjYW5ub3QgYmUgc3RvcmVkIHRvIHVudGlsIGFmdGVyIGRpc3BsYWNlZCB2
aXJ0dWFsCi0gICAgICAgICAgICAvLyByZWdpc3RlcnMgYXJlIGhhbmRsZWQuIFdlIHRyYWNrIHBv
aXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXIgY2FyZWZ1bGx5Ci0gICAgICAgICAgICAvLyB0byBlbnN1
cmUgdGhpcyBoYXBwZW5zIGVmZmljaWVudGx5LiBOb3RlIHRoYXQgd2UgZXhwZWN0IHRoaXMgY2Fz
ZQotICAgICAgICAgICAgLy8gdG8gYmUgcmFyZSwgc28gdGhlIGhhbmRsaW5nIG9mIGl0IGlzIG9w
dGltaXplZCBmb3IgdGhlIGNhc2VzIGluCi0gICAgICAgICAgICAvLyB3aGljaCBpdCBkb2VzIG5v
dCBoYXBwZW4uCi0gICAgICAgICAgICBpZiAocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAo
aW50KWV4aXQubV92YXJpYWJsZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChl
eGl0Lm1fdmFyaWFibGVzW3JlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpXS50ZWNobmlxdWUoKSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgSW5HUFI6Ci0gICAgICAgICAgICAgICAgY2FzZSBVbmJv
eGVkSW50MzJJbkdQUjoKLSAgICAgICAgICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAgICAg
ICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVn
aXN0ZXIoKV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMrKzsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmls
ZUFzVW5ib3hlZEludDMyOgotICAgICAgICAgICAgaGF2ZVVuYm94ZWRJbnQzMnMgPSB0cnVlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBJbkZQUjoKLSAg
ICAgICAgICAgIGhhdmVGUFJzID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQ29uc3RhbnQ6Ci0gICAgICAgICAgICBoYXZlQ29uc3RhbnRzID0g
dHJ1ZTsKLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkp
Ci0gICAgICAgICAgICAgICAgaGF2ZVVuZGVmaW5lZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0jaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAg
IGZwcmludGYoc3RkZXJyLCAiICAiKTsKLSAgICBpZiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnMpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiUG9pc29uZWQ9JXUgIiwgbnVtYmVy
T2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOwotICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZp
cnR1YWxSZWdpc3RlcnMpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRGlzcGxhY2VkPSV1ICIs
IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyk7Ci0gICAgaWYgKGhhdmVVbmJveGVk
SW50MzJzKQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYm94ZWRJbnQzMiAiKTsKLSAgICBp
ZiAoaGF2ZUZQUnMpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRlBSICIpOwotICAgIGlmICho
YXZlQ29uc3RhbnRzKQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbnN0YW50cyAiKTsKLSAg
ICBpZiAoaGF2ZVVuZGVmaW5lZCkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmRlZmluZWQg
Iik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIgIik7Ci0jZW5kaWYKLSAgICAKLSAgICBFbmNvZGVk
SlNWYWx1ZSogc2NyYXRjaEJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oZ2xv
YmFsRGF0YSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICog
KG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgKG51bWJlck9mRGlzcGxhY2VkVmly
dHVhbFJlZ2lzdGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA/IDAgOiBudW1iZXJP
ZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpKSkpOwotCi0gICAgLy8gRnJvbSBoZXJlIG9uLCB0
aGUgY29kZSBhc3N1bWVzIHRoYXQgaXQgaXMgcHJvZml0YWJsZSB0byBtYXhpbWl6ZSB0aGUgZGlz
dGFuY2UKLSAgICAvLyBiZXR3ZWVuIHdoZW4gc29tZXRoaW5nIGlzIGNvbXB1dGVkIGFuZCB3aGVu
IGl0IGlzIHN0b3JlZC4KLSAgICAKLSAgICAvLyA1KSBQZXJmb3JtIGFsbCByZWJveGluZyBvZiBp
bnRlZ2Vycy4KLSAgICAKLSAgICBpZiAoaGF2ZVVuYm94ZWRJbnQzMnMpIHsKLSAgICAgICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5k
ZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52
YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5p
cXVlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgICAg
ICAgICAgaWYgKHJlY292ZXJ5LmdwcigpICE9IGFscmVhZHlCb3hlZCkKLSAgICAgICAgICAgICAg
ICAgICAgb3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS5ncHIo
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgotICAgICAgICAgICAg
ICAgIHN0b3JlMzIoSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFRhZ1R5cGVOdW1iZXIgPj4g
MzIpKSwgdGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oZXhpdC5vcGVyYW5kRm9y
SW5kZXgoaW5kZXgpKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyA2KSBEdW1wIGFsbCBub24tcG9p
c29uZWQgR1BScy4gRm9yIHBvaXNvbmVkIEdQUnMsIHNhdmUgdGhlbSBpbnRvIHRoZSBzY3JhdGNo
IHN0b3JhZ2UuCi0gICAgLy8gICAgTm90ZSB0aGF0IEdQUnMgZG8gbm90IGhhdmUgYSBmYXN0IGNo
YW5nZSAobGlrZSBoYXZlRlBScykgYmVjYXVzZSB3ZSBleHBlY3QgdGhhdAotICAgIC8vICAgIG1v
c3QgT1NSIGZhaWx1cmUgcG9pbnRzIHdpbGwgaGF2ZSBhdCBsZWFzdCBvbmUgR1BSIHRoYXQgbmVl
ZHMgdG8gYmUgZHVtcGVkLgotICAgIAotICAgIHVuc2lnbmVkIHNjcmF0Y2hJbmRleCA9IDA7Ci0g
ICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7
ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0
LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQub3BlcmFu
ZEZvckluZGV4KGluZGV4KTsKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkg
ewotICAgICAgICBjYXNlIEluR1BSOgotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgot
ICAgICAgICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKQotICAgICAgICAgICAgICAg
IHN0b3JlUHRyKHJlY292ZXJ5LmdwcigpLCBzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4Kysp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0b3JlUHRyKHJlY292ZXJ5Lmdw
cigpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICAvLyBBdCB0aGlzIHBvaW50IGFsbCBHUFJzIGFyZSBhdmFpbGFibGUg
Zm9yIHNjcmF0Y2ggdXNlLgotICAgIAotICAgIGlmIChoYXZlRlBScykgewotICAgICAgICAvLyA3
KSBCb3ggYWxsIGRvdWJsZXMgKHJlbGllcyBvbiB0aGVyZSBiZWluZyBtb3JlIEdQUnMgdGhhbiBG
UFJzKQotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQu
bnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAg
ICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIEZQUlJlZyBmcHIgPSByZWNvdmVyeS5mcHIoKTsKLSAgICAg
ICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQUkluZm86OnRvSW5kZXgo
ZnByKSk7Ci0gICAgICAgICAgICBib3hEb3VibGUoZnByLCBncHIpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICAvLyA4KSBEdW1wIGFsbCBkb3VibGVzIGludG8gdGhlIHJlZ2lzdGVyIGZp
bGUsIG9yIHRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UgaWYKLSAgICAgICAgLy8gICAgdGhlIGRlc3Rp
bmF0aW9uIHZpcnR1YWwgcmVnaXN0ZXIgaXMgcG9pc29uZWQuCi0gICAgICAgIAotICAgICAgICBm
b3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytp
bmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0
LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1
ZSgpICE9IEluRlBSKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgR1BS
UmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6dG9JbmRleChyZWNvdmVyeS5m
cHIoKSkpOwotICAgICAgICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKQotICAgICAg
ICAgICAgICAgIHN0b3JlUHRyKGdwciwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdG9yZVB0cihncHIsIGFkZHJlc3NG
b3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9p
c29uZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKLSAgICAKLSAgICAvLyA5KSBSZXNodWZmbGUgZGlzcGxh
Y2VkIHZpcnR1YWwgcmVnaXN0ZXJzLiBPcHRpbWl6ZSBmb3IgdGhlIGNhc2UgdGhhdAotICAgIC8v
ICAgIHRoZSBudW1iZXIgb2YgZGlzcGxhY2VkIHZpcnR1YWwgcmVnaXN0ZXJzIGlzIG5vdCBtb3Jl
IHRoYW4gdGhlIG51bWJlcgotICAgIC8vICAgIG9mIGF2YWlsYWJsZSBwaHlzaWNhbCByZWdpc3Rl
cnMuCi0gICAgCi0gICAgaWYgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykgewot
ICAgICAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzIDw9IEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzKSB7Ci0gICAgICAgICAgICAvLyBTbyBmYXIgdGhpcyBhcHBlYXJz
IHRvIGJlIHRoZSBjYXNlIHRoYXQgdHJpZ2dlcnMgYWxsIHRoZSB0aW1lLCBidXQKLSAgICAgICAg
ICAgIC8vIHRoYXQgaXMgZmFyIGZyb20gZ3VhcmFudGVlZC4KLSAgICAgICAgCi0gICAgICAgICAg
ICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRleCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBp
bmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewot
ICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1
ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToK
LSAgICAgICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKLSAgICAgICAgICAg
ICAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5k
ZXgrKyk7Ci0gICAgICAgICAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzRm9yKHJlY292ZXJ5LnZp
cnR1YWxSZWdpc3RlcigpKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICAgICAgb3JQdHIoR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKLSAgICAgICAgICAgICAg
ICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgr
Kyk7Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgICAgIHN1YlB0cihHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgIGRpc3BsYWNlbWVudEluZGV4
ID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJl
ck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICAg
ICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICAgICAgICAgIGNhc2UgSW50MzJE
aXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3Bs
YWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZv
Ojp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
dXNlIHRoZSBzaHVmZmxpbmcgYWxnb3JpdGhtIHRoYXQgd2UgdXNlCi0gICAgICAgICAgICAvLyBm
b3Igc3BlY3VsYXRpdmUtPm5vbi1zcGVjdWxhdGl2ZSBqdW1wcywgaWYgd2UgZXZlciBkaXNjb3Zl
ciB0aGF0Ci0gICAgICAgICAgICAvLyBzb21lIGhvdCBjb2RlIHdpdGggbG90cyBvZiBsaXZlIHZh
bHVlcyB0aGF0IGdldCBkaXNwbGFjZWQgYW5kCi0gICAgICAgICAgICAvLyBzcGlsbGVkIHJlYWxs
eSBlbmpveXMgZnJlcXVlbnRseSBmYWlsaW5nIHNwZWN1bGF0aW9uLgotICAgICAgICAKLSAgICAg
ICAgICAgIC8vIEZvciBub3cgdGhpcyBjb2RlIGlzIGVuZ2luZWVyZWQgdG8gYmUgY29ycmVjdCBi
dXQgcHJvYmFibHkgbm90Ci0gICAgICAgICAgICAvLyBzdXBlci4gSW4gcGFydGljdWxhciwgaXQg
Y29ycmVjdGx5IGhhbmRsZXMgY2FzZXMgd2hlcmUgZm9yIGV4YW1wbGUKLSAgICAgICAgICAgIC8v
IHRoZSBkaXNwbGFjZW1lbnRzIGFyZSBhIHBlcm11dGF0aW9uIG9mIHRoZSBkZXN0aW5hdGlvbiB2
YWx1ZXMsIGxpa2UKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAxIC0+IDIKLSAgICAg
ICAgICAgIC8vIDIgLT4gMQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEl0IGFjY29t
cGxpc2hlcyB0aGlzIGJ5IHNpbXBseSBsaWZ0aW5nIGFsbCBvZiB0aGUgdmlydHVhbCByZWdpc3Rl
cnMKLSAgICAgICAgICAgIC8vIGZyb20gdGhlaXIgb2xkIChERkcgSklUKSBsb2NhdGlvbnMgYW5k
IGRyb3BwaW5nIHRoZW0gaW4gYSBzY3JhdGNoCi0gICAgICAgICAgICAvLyBsb2NhdGlvbiBpbiBt
ZW1vcnksIGFuZCB0aGVuIHRyYW5zZmVycmluZyBmcm9tIHRoYXQgc2NyYXRjaCBsb2NhdGlvbgot
ICAgICAgICAgICAgLy8gdG8gdGhlaXIgbmV3IChvbGQgSklUKSBsb2NhdGlvbnMuCi0gICAgICAg
IAotICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAg
ICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgICAgICAg
ICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQ
UkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVn
VDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIEludDMy
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKLSAgICAgICAgICAgICAgICAgICAgbG9hZDMyKGFk
ZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
R1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpy
ZWdUMCwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOiB7Ci0gICAgICAg
ICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIo
KSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgc3ViUHRyKEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAg
ICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRl
eCsrKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICAgICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnM7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1i
ZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgICAgICAgICBjYXNlIEludDMy
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgICAgICAgICAgY2FzZSBEb3VibGVEaXNw
bGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgICAgICAgICAgICAgbG9hZFB0cihzY3JhdGNo
QnVmZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAg
ICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9p
c29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJz
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyAxMCkgRHVtcCBhbGwgcG9pc29uZWQg
dmlydHVhbCByZWdpc3RlcnMuCi0gICAgCi0gICAgc2NyYXRjaEluZGV4ID0gMDsKLSAgICBpZiAo
bnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpIHsKLSAgICAgICAgZm9yIChpbnQgdmly
dHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgKGludClleGl0Lm1fdmFyaWFibGVz
LnNpemUoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKLSAgICAgICAgICAgIGlmICghcG9pc29uZWRW
aXJ0dWFsUmVnaXN0ZXJzW3ZpcnR1YWxSZWdpc3Rlcl0pCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gZXhpdC5tX3ZhcmlhYmxlc1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAgICAgICAgICAgc3dp
dGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICAgICAgY2FzZSBJbkdQUjoKLSAg
ICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgICAgICBjYXNlIEluRlBS
OgotICAgICAgICAgICAgICAgIGxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsr
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVn
VDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcil2aXJ0dWFsUmVnaXN0ZXIpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgQVNTRVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVycyk7Ci0gICAgCi0gICAgLy8gMTEpIER1bXAgYWxsIGNvbnN0YW50cy4gT3B0aW1pemUgZm9y
IFVuZGVmaW5lZCwgc2luY2UgdGhhdCdzIGEgY29uc3RhbnQgd2Ugc2VlCi0gICAgLy8gICAgIG9m
dGVuLgotCi0gICAgaWYgKGhhdmVDb25zdGFudHMpIHsKLSAgICAgICAgaWYgKGhhdmVVbmRlZmlu
ZWQpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQg
aW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsK
LSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJl
Y292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBD
b25zdGFudCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChyZWNv
dmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgc3RvcmVQdHIo
R1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRG
b3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShyZWNvdmVyeS5jb25zdGFudCgpKSks
IGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkp
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyAxMikgQWRqdXN0IHRoZSBvbGQgSklU
J3MgZXhlY3V0ZSBjb3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKLSAg
ICAvLyAgICAgdGhhdCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhl
IG5ldyBKSVQsIHNvIHRoZSBleGVjdXRlCi0gICAgLy8gICAgIGNvdW50ZXIgb25seSBhZmZlY3Rz
IGNhbGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0IGFuZCBjYWxsIGZyYW1lcwotICAg
IC8vICAgICB0aGF0IHdlcmUgc3RpbGwgZXhlY3V0aW5nIHRoZSBvbGQgSklUIGF0IHRoZSB0aW1l
IG9mIGFub3RoZXIgY2FsbCBmcmFtZSdzCi0gICAgLy8gICAgIE9TUiBleGl0LiBXZSB3YW50IHRv
IGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKLSAgICAvLwotICAgIC8vICAgICAo
YSkgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBhIGNoYW5jZSB0byByZWVudGVy
IG9wdGltaXplZAotICAgIC8vICAgICAgICAgY29kZSBldmVudHVhbGx5LCBzaW5jZSBvcHRpbWl6
ZWQgY29kZSBpcyBmYXN0ZXIuIEJ1dCB3ZSBkb24ndAotICAgIC8vICAgICAgICAgd2FudCB0byBk
byBzdWNoIHJlZW50ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkgKHNlZSAoYykgYmVsb3cpLgotICAgIC8v
Ci0gICAgLy8gICAgIChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQg
aXMgc3RpbGwgcnVubmluZyB0aGUgb2xkCi0gICAgLy8gICAgICAgICBKSVQncyBjb2RlIGFuZCBo
YXMgbmV2ZXIgT1NSJ2QsIHRoZW4gaXQgc2hvdWxkIGdldCBhIGNoYW5jZSB0bwotICAgIC8vICAg
ICAgICAgcGVyZm9ybSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGV4aXRl
ZC4KLSAgICAvLwotICAgIC8vICAgICAoYykgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQg
c2hvdWxkIG5vdCBpbW1lZGlhdGVseSByZXRyeSBPU1IKLSAgICAvLyAgICAgICAgIGVudHJ5LCBz
aW5jZSBib3RoIGZvcm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKLSAgICAv
LyAgICAgICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCi0gICAgLy8KLSAgICAvLyAgICAgKGQp
IEZyZXF1ZW50IE9TUiBmYWlsdXJlcywgZXZlbiB0aG9zZSB0aGF0IGRvIG5vdCByZXN1bHQgaW4g
dGhlIGNvZGUKLSAgICAvLyAgICAgICAgIHJ1bm5pbmcgaW4gYSBob3QgbG9vcCwgcmVzdWx0IGlu
IHJlY29tcGlsYXRpb24gZ2V0dGluZyB0cmlnZ2VyZWQuCi0gICAgLy8KLSAgICAvLyAgICAgVG8g
ZW5zdXJlIChjKSwgd2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCi0gICAg
Ly8gICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4gVGhpcyBzZWVtcyBs
aWtlIGl0IHdvdWxkIGVuZGFuZ2VyCi0gICAgLy8gICAgIChhKSBhbmQgKGIpLCBzaW5jZSB0aGVu
IGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5IHRoZSBvcHBvcnR1bml0eSBmb3IKLSAgICAvLyAg
ICAgZXZlcnkgY2FsbCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50aWFsbHksIGlm
IE9TUiBleGl0IGhhcHBlbnMKLSAgICAvLyAgICAgZnJlcXVlbnRseSBhbmQgdGhlIGZ1bmN0aW9u
IGhhcyBmZXcgbG9vcHMsIHRoZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgotICAgIC8vICAgICBi
ZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBuZXZlciBiZSB0cmlnZ2VyZWQu
IE9TUiBlbnRyeQotICAgIC8vICAgICB3aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRzIGhv
dCBpbiB0aGUgb2xkIEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0eQotICAgIC8vICAgICBnb29kIGpv
YiBvZiBlbnN1cmluZyAoYSkgYW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2Yg
KGQpLAotICAgIC8vICAgICBzaW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVz
ZXQgdGhlIGV4ZWN1dGUgY291bnRlci4KLSAgICAvLyAgICAgU28gd2UgY2hlY2sgaGVyZSBpZiB0
aGUgbnVtYmVyIG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50bHkKLSAgICAv
LyAgICAgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1
Y2Nlc3MgcmF0ZSksIGFuZCBpZgotICAgIC8vICAgICB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBl
bm91Z2ggbnVtYmVyIG9mIGZhaWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQotICAgIC8vICAgICBj
b3VudGVyIHRvIDA7IG90aGVyd2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KLSAgICAvLyAgICAg
Y291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLgotICAgIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihjb2RlQmxvY2soKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAKLSAgICBsb2Fk
MzIoQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZl
RmFpbENvdW50ZXIoKSksIEdQUkluZm86OnJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhHUFJJ
bmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIo
KSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICBhZGQzMihJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIp
OwotICAgIGFkZDMyKEltbTMyKC0xKSwgR1BSSW5mbzo6cmVnVDEpOwotICAgIHN0b3JlMzIoR1BS
SW5mbzo6cmVnVDIsIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZT
cGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpKTsKLSAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBB
ZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNj
ZXNzQ291bnRlcigpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygp
LT5hbHRlcm5hdGl2ZSgpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgIAotICAgIEp1bXAgZmV3RmFp
bHMgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBJbW0zMihjb2RlQmxv
Y2soKS0+bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSkpOwotICAgIG11bDMyKEltbTMyKEhldXJp
c3RpY3M6OmRlc2lyZWRTcGVjdWxhdGl2ZVN1Y2Nlc3NGYWlsUmF0aW8pLCBHUFJJbmZvOjpyZWdU
MiwgR1BSSW5mbzo6cmVnVDIpOwotICAgIAotICAgIEp1bXAgbG93RmFpbFJhdGUgPSBicmFuY2gz
MihCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgCi0g
ICAgLy8gUmVvcHRpbWl6ZSBhcyBzb29uIGFzIHBvc3NpYmxlLgotICAgIHN0b3JlMzIoSW1tMzIo
SGV1cmlzdGljczo6ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlv
biksIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291
bnRlcigpKSk7Ci0gICAgSnVtcCBkb25lQWRqdXN0aW5nID0ganVtcCgpOwotICAgIAotICAgIGZl
d0ZhaWxzLmxpbmsodGhpcyk7Ci0gICAgbG93RmFpbFJhdGUubGluayh0aGlzKTsKLSAgICAKLSAg
ICBzdG9yZTMyKEltbTMyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVG
b3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkpKTsKLSAgICAKLSAgICBkb25lQWRqdXN0
aW5nLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgLy8gMTMpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUg
bGFzdCBieXRlY29kZSBvcGVyYXRpb24gaW50byByZWdUMC4KLSAgICAKLSAgICBpZiAoZXhpdC5t
X2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCi0gICAg
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3Bl
cmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKLSAgICAKLSAgICAvLyAxNCkg
Rml4IGNhbGwgZnJhbWUocykuCi0gICAgCi0gICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5h
dGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAgIHN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBhZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKTsKLSAgICAKLSAgICBm
b3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZXIpIHsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pOwotICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Io
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpOwotICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBkZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlcik7Ci0gICAgICAgIHVuc2lnbmVkIHJldHVybkJ5dGVjb2RlSW5kZXgg
PSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChv
cF9jYWxsKTsKLSAgICAgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmlu
YXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwg
ZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCByZXR1cm5CeXRlY29kZUluZGV4KTsKLSAgICAgICAgCi0g
ICAgICAgIEFTU0VSVChtYXBwaW5nKTsKLSAgICAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNv
ZGVJbmRleCA9PSByZXR1cm5CeXRlY29kZUluZGV4KTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQq
IGp1bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldEpJVENvZGUoKS5zdGFydCgp
KSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOwotCi0gICAgICAgIEdQUlJlZyBjYWxs
ZXJGcmFtZUdQUjsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNh
bGxGcmFtZSkgewotICAgICAgICAgICAgYWRkUHRyKEltbTMyKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVyLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAg
ICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6cmVnVDM7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcjsKLSAg
ICAgICAgCi0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2sp
LCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBSZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpKTsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS0+c2NvcGUoKSksIGFkZHJlc3NGb3IoKFZp
cnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmls
ZTo6U2NvcGVDaGFpbikpKTsKLSAgICAgICAgc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIGFkZHJl
c3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJl
Z2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpKSk7Ci0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIoanVtcFRhcmdldCksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpKSk7Ci0gICAgICAgIHN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRzLnNpemUoKSkpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50
KSkpOwotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVlLmdldCgpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKSk7Ci0gICAgfQotICAgIAotICAg
IGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGFkZFB0cihJ
bW0zMihleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAK
LSAgICAvLyAxNSkgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2Rl
LgotICAgIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVC
bG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7Ci0gICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGlu
ZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2Rl
QmxvY2spOwotICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJp
bmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCks
IGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7
Ci0gICAgCi0gICAgQVNTRVJUKG1hcHBpbmcpOwotICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVj
b2RlSW5kZXggPT0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgCi0gICAg
dm9pZCoganVtcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihiYXNlbGluZUNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsg
bWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7Ci0gICAgCi0gICAgQVNTRVJUKEdQUkluZm86
OnJlZ1QxICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKLSAgICAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJlZ1QxKTsKLSAgICBqdW1wKEdQ
UkluZm86OnJlZ1QxKTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBmcHJp
bnRmKHN0ZGVyciwgIi0+ICVwXG4iLCBqdW1wVGFyZ2V0KTsKLSNlbmRpZgotfQotCi0jZW5kaWYg
Ly8gVVNFKEpTVkFMVUU2NCkKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdENv
bXBpbGVyLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkgJiYgVVNFKEpTVkFMVUUzMl82NCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIE9TUkV4aXRDb21waWxlcjo6
Y29tcGlsZUV4aXQoY29uc3QgT1NSRXhpdCYgZXhpdCwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVj
b3ZlcnkpCit7CisgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZmLgorICAgIGV4aXQubV9jaGVjay5s
aW5rKCZtX2ppdCk7CisKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZnByaW50
ZihzdGRlcnIsICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQgKCIsIChpbnQpZXhpdC5tX25vZGVJbmRl
eCk7CisgICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsg
OyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgeworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgImJjIyV1IiwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiAlcCAiLCBjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7CisgICAgfQorICAgIGZwcmludGYoc3RkZXJy
LCAiKSBhdCBKSVQgb2Zmc2V0IDB4JXggICIsIG1faml0LmRlYnVnT2Zmc2V0KCkpOworICAgIGV4
aXQuZHVtcChzdGRlcnIpOworI2VuZGlmCisjaWYgREZHX0VOQUJMRShWRVJCT1NFX1NQRUNVTEFU
SU9OX0ZBSUxVUkUpCisgICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvKiBkZWJ1Z0luZm8g
PSBuZXcgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvOworICAgIGRlYnVnSW5mby0+Y29kZUJs
b2NrID0gbV9qaXQuY29kZUJsb2NrKCk7CisgICAgZGVidWdJbmZvLT5kZWJ1Z09mZnNldCA9IG1f
aml0LmRlYnVnT2Zmc2V0KCk7CisgICAgCisgICAgbV9qaXQuZGVidWdDYWxsKGRlYnVnT3BlcmF0
aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUsIGRlYnVnSW5mbyk7CisjZW5kaWYKKyAgICAKKyNp
ZiBERkdfRU5BQkxFKEpJVF9CUkVBS19PTl9TUEVDVUxBVElPTl9GQUlMVVJFKQorICAgIG1faml0
LmJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgIAorI2lmIERGR19FTkFCTEUoU1VDQ0VTU19TVEFU
UykKKyAgICBzdGF0aWMgU2FtcGxpbmdDb3VudGVyIGNvdW50ZXIoIlNwZWN1bGF0aW9uRmFpbHVy
ZSIpOworICAgIG1faml0LmVtaXRDb3VudChjb3VudGVyKTsKKyNlbmRpZgorCisgICAgLy8gMikg
UGVyZm9ybSBzcGVjdWxhdGlvbiByZWNvdmVyeS4gVGhpcyBvbmx5IGNvbWVzIGludG8gcGxheSB3
aGVuIGFuIG9wZXJhdGlvbgorICAgIC8vICAgIHN0YXJ0cyBtdXRhdGluZyBzdGF0ZSBiZWZvcmUg
dmVyaWZ5aW5nIHRoZSBzcGVjdWxhdGlvbiBpdCBoYXMgYWxyZWFkeSBtYWRlLgorICAgIAorICAg
IGlmIChyZWNvdmVyeSkgeworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKKyAgICAgICAgICAgIG1faml0LnN1YjMyKHJlY292
ZXJ5LT5zcmMoKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gMykgUmVmaW5lIHNvbWUgdmFsdWUgcHJv
ZmlsZSwgaWYgYXBwcm9wcmlhdGUuCisgICAgCisgICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVTb3Vy
Y2UgJiYgISFleGl0Lm1fdmFsdWVQcm9maWxlKSB7CisgICAgICAgIGlmIChleGl0Lm1fanNWYWx1
ZVNvdXJjZS5pc0FkZHJlc3MoKSkgeworICAgICAgICAgICAgLy8gU2F2ZSBhIHJlZ2lzdGVyIHNv
IHdlIGNhbiB1c2UgaXQuCisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJl
Z1QwOworICAgICAgICAgICAgaWYgKHNjcmF0Y2ggPT0gZXhpdC5tX2pzVmFsdWVTb3VyY2UuYmFz
ZSgpKQorICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMTsKKyAgICAgICAg
ICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoQnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpT
VmFsdWUqPihtX2ppdC5nbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZih1
aW50MzJfdCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaCwgc2NyYXRjaEJ1
ZmZlcik7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNB
ZGRyZXNzKE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSksIHNjcmF0Y2gpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzY3JhdGNoLCAmYml0d2lz
ZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihleGl0Lm1fdmFsdWVQcm9maWxlLT5zcGVj
RmFpbEJ1Y2tldCgwKSktPmFzQml0cy50YWcpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKGV4
aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcyhPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKHNjcmF0Y2gsICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+
KGV4aXQubV92YWx1ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnBheWxvYWQp
OworICAgICAgICAgICAgbV9qaXQubG9hZDMyKHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2gpOworICAg
ICAgICB9IGVsc2UgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmhhc0tub3duVGFnKCkpIHsKKyAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihleGl0Lm1fanNW
YWx1ZVNvdXJjZS50YWcoKSksICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+
KGV4aXQubV92YWx1ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnRhZyk7Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGV4aXQubV9qc1ZhbHVlU291cmNlLnBheWxvYWRHUFIo
KSwgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oZXhpdC5tX3ZhbHVlUHJv
ZmlsZS0+c3BlY0ZhaWxCdWNrZXQoMCkpLT5hc0JpdHMucGF5bG9hZCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGV4aXQubV9qc1ZhbHVlU291cmNlLnRhZ0dQ
UigpLCAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihleGl0Lm1fdmFsdWVQ
cm9maWxlLT5zcGVjRmFpbEJ1Y2tldCgwKSktPmFzQml0cy50YWcpOworICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihleGl0Lm1fanNWYWx1ZVNvdXJjZS5wYXlsb2FkR1BSKCksICZiaXR3aXNlX2Nh
c3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGV4aXQubV92YWx1ZVByb2ZpbGUtPnNwZWNGYWls
QnVja2V0KDApKS0+YXNCaXRzLnBheWxvYWQpOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IC8vIDQpIEZpZ3VyZSBvdXQgaG93IG1hbnkgc2NyYXRjaCBzbG90cyB3ZSdsbCBuZWVkLiBXZSBu
ZWVkIG9uZSBmb3IgZXZlcnkgR1BSL0ZQUgorICAgIC8vICAgIHdob3NlIGRlc3RpbmF0aW9uIGlz
IG5vdyBvY2N1cGllZCBieSBhIERGRyB2aXJ0dWFsIHJlZ2lzdGVyLCBhbmQgd2UgbmVlZAorICAg
IC8vICAgIG9uZSBmb3IgZXZlcnkgZGlzcGxhY2VkIHZpcnR1YWwgcmVnaXN0ZXIgaWYgdGhlcmUg
YXJlIG1vcmUgdGhhbgorICAgIC8vICAgIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIG9mIHRo
ZW0uIEFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uc3RhbnRzLAorICAgIC8vICAgIGFueSB1
bmRlZmluZWQgc2xvdHMsIGFueSBGUFIgc2xvdHMsIGFuZCBhbnkgdW5ib3hlZCBpbnRzLgorICAg
ICAgICAgICAgCisgICAgVmVjdG9yPGJvb2w+IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyhleGl0
Lm1fdmFyaWFibGVzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvaXNv
bmVkVmlydHVhbFJlZ2lzdGVycy5zaXplKCk7ICsraSkKKyAgICAgICAgcG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzW2ldID0gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZlBvaXNvbmVkVmly
dHVhbFJlZ2lzdGVycyA9IDA7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFs
UmVnaXN0ZXJzID0gMDsKKyAgICAKKyAgICAvLyBCb29sZWFucyBmb3IgZmFzdCBjaGVja3MuIFdl
IGV4cGVjdCB0aGF0IG1vc3QgT1NSIGV4aXRzIGRvIG5vdCBoYXZlIHRvIHJlYm94CisgICAgLy8g
SW50MzJzLCBoYXZlIG5vIEZQUnMsIGFuZCBoYXZlIG5vIGNvbnN0YW50cy4gSWYgdGhlcmUgYXJl
IGNvbnN0YW50cywgd2UKKyAgICAvLyBleHBlY3QgbW9zdCBvZiB0aGVtIHRvIGJlIGpzVW5kZWZp
bmVkKCk7IGlmIHRoYXQncyB0cnVlIHRoZW4gd2UgaGFuZGxlIHRoYXQKKyAgICAvLyBzcGVjaWFs
bHkgdG8gbWluaW1pemUgY29kZSBzaXplIGFuZCBleGVjdXRpb24gdGltZS4KKyAgICBib29sIGhh
dmVVbmJveGVkSW50MzJJblJlZ2lzdGVyRmlsZSA9IGZhbHNlOworICAgIGJvb2wgaGF2ZVVuYm94
ZWRDZWxsSW5SZWdpc3RlckZpbGUgPSBmYWxzZTsKKyAgICBib29sIGhhdmVVbmJveGVkQm9vbGVh
bkluUmVnaXN0ZXJGaWxlID0gZmFsc2U7CisgICAgYm9vbCBoYXZlRlBScyA9IGZhbHNlOworICAg
IGJvb2wgaGF2ZUNvbnN0YW50cyA9IGZhbHNlOworICAgIGJvb2wgaGF2ZVVuZGVmaW5lZCA9IGZh
bHNlOworICAgIAorICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9m
UmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJl
Y292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgc3dpdGNoIChyZWNv
dmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxl
OgorICAgICAgICAgICAgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKys7CisgICAg
ICAgICAgICBBU1NFUlQoKGludClyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA+PSAwKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2VlIGlmIHdlIG1pZ2h0IGxpa2UgdG8gc3RvcmUg
dG8gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyIGJlZm9yZSBkb2luZworICAgICAgICAgICAgLy8gdmly
dHVhbCByZWdpc3RlciBzaHVmZmxpbmcuIElmIHNvLCB3ZSBzYXkgdGhhdCB0aGUgdmlydHVhbCBy
ZWdpc3RlcgorICAgICAgICAgICAgLy8gaXMgcG9pc29uZWQ6IGl0IGNhbm5vdCBiZSBzdG9yZWQg
dG8gdW50aWwgYWZ0ZXIgZGlzcGxhY2VkIHZpcnR1YWwKKyAgICAgICAgICAgIC8vIHJlZ2lzdGVy
cyBhcmUgaGFuZGxlZC4gV2UgdHJhY2sgcG9pc29uZWQgdmlydHVhbCByZWdpc3RlciBjYXJlZnVs
bHkKKyAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0aGlzIGhhcHBlbnMgZWZmaWNpZW50bHkuIE5v
dGUgdGhhdCB3ZSBleHBlY3QgdGhpcyBjYXNlCisgICAgICAgICAgICAvLyB0byBiZSByYXJlLCBz
byB0aGUgaGFuZGxpbmcgb2YgaXQgaXMgb3B0aW1pemVkIGZvciB0aGUgY2FzZXMgaW4KKyAgICAg
ICAgICAgIC8vIHdoaWNoIGl0IGRvZXMgbm90IGhhcHBlbi4KKyAgICAgICAgICAgIGlmIChyZWNv
dmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA8IChpbnQpZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpIHsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4aXQubV92YXJpYWJsZXNbcmVjb3ZlcnkudmlydHVh
bFJlZ2lzdGVyKCldLnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBJbkdQUjoK
KyAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgICAg
IGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKKyAgICAgICAgICAgICAgICBjYXNlIEluUGFpcjoK
KyAgICAgICAgICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAgICAgICAgICBpZiAoIXBv
aXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVy
T2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFscmVhZHlJblJl
Z2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgorICAgICAgICAgICAgaGF2ZVVuYm94ZWRJbnQzMklu
UmVnaXN0ZXJGaWxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQ2VsbDoKKyAgICAgICAg
ICAgIGhhdmVVbmJveGVkQ2VsbEluUmVnaXN0ZXJGaWxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNV
bmJveGVkQm9vbGVhbjoKKyAgICAgICAgICAgIGhhdmVVbmJveGVkQm9vbGVhbkluUmVnaXN0ZXJG
aWxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgSW5GUFI6CisgICAgICAgICAgICBoYXZlRlBScyA9IHRydWU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAgaGF2
ZUNvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQoKS5p
c1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGhhdmVVbmRlZmluZWQgPSB0cnVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEVuY29kZWRKU1ZhbHVlKiBz
Y3JhdGNoQnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihtX2ppdC5nbG9iYWxE
YXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAobnVt
YmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMgKyAoKG51bWJlck9mRGlzcGxhY2VkVmlydHVh
bFJlZ2lzdGVycyAqIDIpIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID8gMCA6IG51bWJl
ck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykpKSk7CisKKyAgICAvLyBGcm9tIGhlcmUgb24s
IHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpdCBpcyBwcm9maXRhYmxlIHRvIG1heGltaXplIHRoZSBk
aXN0YW5jZQorICAgIC8vIGJldHdlZW4gd2hlbiBzb21ldGhpbmcgaXMgY29tcHV0ZWQgYW5kIHdo
ZW4gaXQgaXMgc3RvcmVkLgorICAgIAorICAgIC8vIDUpIFBlcmZvcm0gYWxsIHJlYm94aW5nIG9m
IGludGVnZXJzIGFuZCBjZWxscywgZXhjZXB0IGZvciB0aG9zZSBpbiByZWdpc3RlcnMuCisKKyAg
ICBpZiAoaGF2ZVVuYm94ZWRJbnQzMkluUmVnaXN0ZXJGaWxlIHx8IGhhdmVVbmJveGVkQ2VsbElu
UmVnaXN0ZXJGaWxlIHx8IGhhdmVVbmJveGVkQm9vbGVhbkluUmVnaXN0ZXJGaWxlKSB7CisgICAg
ICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmllcygp
OyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9
IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5
LnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFz
VW5ib3hlZEludDMyOgorICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRh
Z0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZvckluZGV4KGlu
ZGV4KSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBbHJl
YWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxsOgorICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEFz
c2VtYmx5SGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oZXhpdC5v
cGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW46CisgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpCb29sZWFuVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyA2KSBEdW1w
IGFsbCBub24tcG9pc29uZWQgR1BScy4gRm9yIHBvaXNvbmVkIEdQUnMsIHNhdmUgdGhlbSBpbnRv
IHRoZSBzY3JhdGNoIHN0b3JhZ2UuCisgICAgLy8gICAgTm90ZSB0aGF0IEdQUnMgZG8gbm90IGhh
dmUgYSBmYXN0IGNoYW5nZSAobGlrZSBoYXZlRlBScykgYmVjYXVzZSB3ZSBleHBlY3QgdGhhdAor
ICAgIC8vICAgIG1vc3QgT1NSIGZhaWx1cmUgcG9pbnRzIHdpbGwgaGF2ZSBhdCBsZWFzdCBvbmUg
R1BSIHRoYXQgbmVlZHMgdG8gYmUgZHVtcGVkLgorICAgIAorICAgIHVuc2lnbmVkIHNjcmF0Y2hJ
bmRleCA9IDA7CisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBpbnQgb3BlcmFuZCA9
IGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50
ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICBjYXNlIFVuYm94ZWRJ
bnQzMkluR1BSOgorICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6CisgICAgICAgICAg
ICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNb
ZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCisgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihyZWNvdmVyeS5ncHIoKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZl
ciArIHNjcmF0Y2hJbmRleCsrKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgdWludDMyX3QgdGFnID0gSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZzsKKyAgICAgICAgICAgICAg
ICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gSW5HUFIpCisgICAgICAgICAgICAgICAgICAg
IHRhZyA9IEpTVmFsdWU6OkNlbGxUYWc7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVjb3Zl
cnkudGVjaG5pcXVlKCkgPT0gVW5ib3hlZEludDMySW5HUFIpCisgICAgICAgICAgICAgICAgICAg
IHRhZyA9IEpTVmFsdWU6OkludDMyVGFnOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgdGFnID0gSlNWYWx1ZTo6Qm9vbGVhblRhZzsKKyAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHRhZyksIEFzc2VtYmx5
SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOworICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIocmVjb3ZlcnkuZ3ByKCksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9h
ZEZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEluUGFpcjoKKyAgICAgICAgICAgIGlmIChleGl0Lmlz
VmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSkgeworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocmVjb3Zl
cnkudGFnR1BSKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3Jh
dGNoSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHJlY292ZXJ5LnBheWxvYWRH
UFIoKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRl
eCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoSW5kZXgrKzsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihyZWNvdmVyeS50YWdHUFIoKSwgQXNz
ZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7CisgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihyZWNvdmVyeS5wYXlsb2FkR1BSKCksIEFzc2VtYmx5SGVs
cGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gQXQgdGhpcyBwb2ludCBhbGwgR1BS
cyBhcmUgYXZhaWxhYmxlIGZvciBzY3JhdGNoIHVzZS4KKyAgICAKKyAgICBpZiAoaGF2ZUZQUnMp
IHsKKyAgICAgICAgLy8gNykgQm94IGFsbCBkb3VibGVzIChyZWxpZXMgb24gdGhlcmUgYmVpbmcg
bW9yZSBHUFJzIHRoYW4gRlBScykKKyAgICAgICAgLy8gICAgRm9yIEpTVmFsdWUzMl82NCwgbm8g
bmVlZCB0byBib3ggZG91Ymxlcy4KKyAgICAgICAgCisgICAgICAgIC8vIDgpIER1bXAgYWxsIGRv
dWJsZXMgaW50byB0aGUgcmVnaXN0ZXIgZmlsZSwgb3IgdG8gdGhlIHNjcmF0Y2ggc3RvcmFnZSBp
ZgorICAgICAgICAvLyAgICB0aGUgZGVzdGluYXRpb24gdmlydHVhbCByZWdpc3RlciBpcyBwb2lz
b25lZC4KKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0
Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1
ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAg
ICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gSW5GUFIpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCisgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUocmVjb3ZlcnkuZnByKCksIHNjcmF0Y2hCdWZm
ZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmVEb3VibGUocmVjb3ZlcnkuZnByKCksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQ
b2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAorICAgIC8vIDkpIFJlc2h1ZmZsZSBkaXNw
bGFjZWQgdmlydHVhbCByZWdpc3RlcnMuIE9wdGltaXplIGZvciB0aGUgY2FzZSB0aGF0CisgICAg
Ly8gICAgdGhlIG51bWJlciBvZiBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMgaXMgbm90IG1v
cmUgdGhhbiB0aGUgbnVtYmVyCisgICAgLy8gICAgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIHJlZ2lz
dGVycy4KKyAgICAKKyAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7
CisgICAgICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgKiAyIDw9IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAvLyBTbyBmYXIgdGhpcyBh
cHBlYXJzIHRvIGJlIHRoZSBjYXNlIHRoYXQgdHJpZ2dlcnMgYWxsIHRoZSB0aW1lLCBidXQKKyAg
ICAgICAgICAgIC8vIHRoYXQgaXMgZmFyIGZyb20gZ3VhcmFudGVlZC4KKyAgICAgICAgCisgICAg
ICAgICAgICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRleCA9IDA7CisgICAgICAgICAgICBmb3Ig
KGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRl
eCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhp
dC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVj
aG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6
OnBheWxvYWRGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0b1JlZ2lz
dGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJ
bmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgICAgICBkaXNwbGFjZW1lbnRJbmRleCA9IDA7CisgICAgICAgICAgICBm
b3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytp
bmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0g
ZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3Zlcnku
dGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6dG9S
ZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudElu
ZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3Bl
cmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgc2h1ZmZsaW5nIGFsZ29y
aXRobSB0aGF0IHdlIHVzZQorICAgICAgICAgICAgLy8gZm9yIHNwZWN1bGF0aXZlLT5ub24tc3Bl
Y3VsYXRpdmUganVtcHMsIGlmIHdlIGV2ZXIgZGlzY292ZXIgdGhhdAorICAgICAgICAgICAgLy8g
c29tZSBob3QgY29kZSB3aXRoIGxvdHMgb2YgbGl2ZSB2YWx1ZXMgdGhhdCBnZXQgZGlzcGxhY2Vk
IGFuZAorICAgICAgICAgICAgLy8gc3BpbGxlZCByZWFsbHkgZW5qb3lzIGZyZXF1ZW50bHkgZmFp
bGluZyBzcGVjdWxhdGlvbi4KKyAgICAgICAgCisgICAgICAgICAgICAvLyBGb3Igbm93IHRoaXMg
Y29kZSBpcyBlbmdpbmVlcmVkIHRvIGJlIGNvcnJlY3QgYnV0IHByb2JhYmx5IG5vdAorICAgICAg
ICAgICAgLy8gc3VwZXIuIEluIHBhcnRpY3VsYXIsIGl0IGNvcnJlY3RseSBoYW5kbGVzIGNhc2Vz
IHdoZXJlIGZvciBleGFtcGxlCisgICAgICAgICAgICAvLyB0aGUgZGlzcGxhY2VtZW50cyBhcmUg
YSBwZXJtdXRhdGlvbiBvZiB0aGUgZGVzdGluYXRpb24gdmFsdWVzLCBsaWtlCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gMSAtPiAyCisgICAgICAgICAgICAvLyAyIC0+IDEKKyAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAvLyBJdCBhY2NvbXBsaXNoZXMgdGhpcyBieSBzaW1wbHkg
bGlmdGluZyBhbGwgb2YgdGhlIHZpcnR1YWwgcmVnaXN0ZXJzCisgICAgICAgICAgICAvLyBmcm9t
IHRoZWlyIG9sZCAoREZHIEpJVCkgbG9jYXRpb25zIGFuZCBkcm9wcGluZyB0aGVtIGluIGEgc2Ny
YXRjaAorICAgICAgICAgICAgLy8gbG9jYXRpb24gaW4gbWVtb3J5LCBhbmQgdGhlbiB0cmFuc2Zl
cnJpbmcgZnJvbSB0aGF0IHNjcmF0Y2ggbG9jYXRpb24KKyAgICAgICAgICAgIC8vIHRvIHRoZWly
IG5ldyAob2xkIEpJVCkgbG9jYXRpb25zLgorICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50
IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7
CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZh
bHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlx
dWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6cGF5
bG9hZEZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2Ny
YXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKEdQUkluZm86OnJlZ1QxLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVy
ICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSk7CisgICAgICAgICAgICAgICAgc2NyYXRjaEluZGV4Kys7CisgICAgICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnM7CisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGlu
ZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAg
ICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGlu
ZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxh
Y2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVm
ZmVyICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0
Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQ
UkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rl
cilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKEdQUkluZm86OnJlZ1QxLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJl
Z2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgIHNj
cmF0Y2hJbmRleCsrOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIEFTU0VS
VChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMgKyBudW1i
ZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIC8vIDEwKSBEdW1wIGFsbCBwb2lzb25lZCB2aXJ0dWFsIHJlZ2lzdGVycy4KKyAgICAKKyAg
ICBzY3JhdGNoSW5kZXggPSAwOworICAgIGlmIChudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVycykgeworICAgICAgICBmb3IgKGludCB2aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVn
aXN0ZXIgPCAoaW50KWV4aXQubV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3Rlcikg
eworICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbdmlydHVhbFJlZ2lz
dGVyXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0Lm1fdmFyaWFibGVzW3ZpcnR1
YWxSZWdpc3Rlcl07CisgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
CisgICAgICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJ
bkdQUjoKKyAgICAgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjogeworICAgICAgICAg
ICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVy
ICsgc2NyYXRjaEluZGV4KyspICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigo
VmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIHVpbnQz
Ml90IHRhZyA9IEpTVmFsdWU6OkVtcHR5VmFsdWVUYWc7CisgICAgICAgICAgICAgICAgaWYgKHJl
Y292ZXJ5LnRlY2huaXF1ZSgpID09IEluR1BSKQorICAgICAgICAgICAgICAgICAgICB0YWcgPSBK
U1ZhbHVlOjpDZWxsVGFnOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpID09IFVuYm94ZWRJbnQzMkluR1BSKQorICAgICAgICAgICAgICAgICAgICB0YWcgPSBK
U1ZhbHVlOjpJbnQzMlRhZzsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHRhZyA9IEpTVmFsdWU6OkJvb2xlYW5UYWc7CisgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMih0YWcpLCBBc3NlbWJseUhlbHBlcnM6
OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIEluRlBSOgorICAg
ICAgICAgICAgY2FzZSBJblBhaXI6CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0
PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSwgR1BSSW5mbzo6cmVnVDEpOworICAg
ICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVy
czo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOworICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIEFzc2VtYmx5SGVscGVyczo6
dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lzdGVyKSk7CisgICAgICAgICAgICAg
ICAgc2NyYXRjaEluZGV4Kys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVt
YmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAorICAgIC8vIDExKSBEdW1wIGFs
bCBjb25zdGFudHMuIE9wdGltaXplIGZvciBVbmRlZmluZWQsIHNpbmNlIHRoYXQncyBhIGNvbnN0
YW50IHdlIHNlZQorICAgIC8vICAgICBvZnRlbi4KKworICAgIGlmIChoYXZlQ29uc3RhbnRzKSB7
CisgICAgICAgIGlmIChoYXZlVW5kZWZpbmVkKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGpzVW5kZWZpbmVkKCkucGF5bG9hZCgpKSwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnRhZygpKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5u
dW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAg
ICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENvbnN0YW50KQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmlu
ZWQoKSkgeworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFz
c2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZv
ckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6
cmVnVDEsIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVy
YW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVjb3Zlcnku
Y29uc3RhbnQoKS5wYXlsb2FkKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1
YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHJlY292ZXJ5LmNv
bnN0YW50KCkudGFnKCkpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVy
KWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIAorICAgIC8vIDEyKSBBZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNv
dW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25vdworICAgIC8vICAgICB0aGF0
IGFsbCBuZXcgY2FsbHMgaW50byB0aGlzIGNvZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28g
dGhlIGV4ZWN1dGUKKyAgICAvLyAgICAgY291bnRlciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMg
dGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5kIGNhbGwgZnJhbWVzCisgICAgLy8gICAgIHRoYXQg
d2VyZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9sZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBj
YWxsIGZyYW1lJ3MKKyAgICAvLyAgICAgT1NSIGV4aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQg
dGhlIGZvbGxvd2luZyBpcyB0cnVlOgorICAgIC8vCisgICAgLy8gICAgIChhKSBDb2RlIHRoZSBw
ZXJmb3JtcyBhbiBPU1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRvIHJlZW50ZXIgb3B0aW1pemVkCisg
ICAgLy8gICAgICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNlIG9wdGltaXplZCBjb2RlIGlzIGZh
c3Rlci4gQnV0IHdlIGRvbid0CisgICAgLy8gICAgICAgICB3YW50IHRvIGRvIHN1Y2ggcmVlbnRl
cnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChjKSBiZWxvdykuCisgICAgLy8KKyAgICAvLyAgICAg
KGIpIElmIHRoZXJlIGlzIGNvZGUgb24gdGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBzdGlsbCBydW5u
aW5nIHRoZSBvbGQKKyAgICAvLyAgICAgICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBuZXZlciBPU1In
ZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRvCisgICAgLy8gICAgICAgICBwZXJmb3Jt
IE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZXhpdGVkLgorICAgIC8vCisg
ICAgLy8gICAgIChjKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBzaG91bGQgbm90IGlt
bWVkaWF0ZWx5IHJldHJ5IE9TUgorICAgIC8vICAgICAgICAgZW50cnksIHNpbmNlIGJvdGggZm9y
bXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcworICAgIC8vICAgICAgICAgcGFy
dGljdWxhcmx5IGV4cGVuc2l2ZS4KKyAgICAvLworICAgIC8vICAgICAoZCkgRnJlcXVlbnQgT1NS
IGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0aGUgY29kZQorICAg
IC8vICAgICAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlv
biBnZXR0aW5nIHRyaWdnZXJlZC4KKyAgICAvLworICAgIC8vICAgICBUbyBlbnN1cmUgKGMpLCB3
ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KKyAgICAvLyAgICAgY291bnRl
clZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQg
ZW5kYW5nZXIKKyAgICAvLyAgICAgKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4gZXZlcnkgT1NSIGV4
aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgorICAgIC8vICAgICBldmVyeSBjYWxs
IGZyYW1lIHRvIHBlcmZvcm0gT1NSIGVudHJ5LiBFc3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFw
cGVucworICAgIC8vICAgICBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29w
cywgdGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVyCisgICAgLy8gICAgIGJlY29tZSBub24tbmVn
YXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5Cisg
ICAgLy8gICAgIHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQg
SklULCB3aGljaCBkb2VzIGEgcHJldHR5CisgICAgLy8gICAgIGdvb2Qgam9iIG9mIGVuc3VyaW5n
IChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAoZCksCisgICAgLy8g
ICAgIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUgZXhlY3V0
ZSBjb3VudGVyLgorICAgIC8vICAgICBTbyB3ZSBjaGVjayBoZXJlIGlmIHRoZSBudW1iZXIgb2Yg
c3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQorICAgIC8vICAgICBsYXJnZXIg
dGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3VjY2VzcyByYXRlKSwg
YW5kIGlmCisgICAgLy8gICAgIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3VnaCBudW1iZXIg
b2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCisgICAgLy8gICAgIGNvdW50ZXIgdG8gMDsg
b3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bworICAgIC8vICAgICBjb3VudGVyVmFsdWVG
b3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCisgICAgCisgICAgbV9qaXQubW92ZShBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgCisgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQ
UkluZm86OnJlZ1QyKTsKKyAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291
bnRlcigpKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIG1faml0LmFkZDMyKEFzc2VtYmx5SGVscGVy
czo6SW1tMzIoMSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBtX2ppdC5hZGQzMihBc3NlbWJseUhl
bHBlcnM6OkltbTMyKC0xKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIG1faml0LnN0b3JlMzIoR1BS
SW5mbzo6cmVnVDIsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSkpOworICAgIG1faml0LnN0
b3JlMzIoR1BSSW5mbzo6cmVnVDEsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSkpOwor
ICAgIAorICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0
LmNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIAorICAg
IEFzc2VtYmx5SGVscGVyczo6SnVtcCBmZXdGYWlscyA9IG1faml0LmJyYW5jaDMyKEFzc2VtYmx5
SGVscGVyczo6QmVsb3dPckVxdWFsLCBHUFJJbmZvOjpyZWdUMiwgQXNzZW1ibHlIZWxwZXJzOjpJ
bW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSkpOworICAg
IG1faml0Lm11bDMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoSGV1cmlzdGljczo6ZGVzaXJlZFNw
ZWN1bGF0aXZlU3VjY2Vzc0ZhaWxSYXRpbyksIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgCisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGxvd0ZhaWxSYXRlID0gbV9qaXQu
YnJhbmNoMzIoQXNzZW1ibHlIZWxwZXJzOjpCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBH
UFJJbmZvOjpyZWdUMSk7CisgICAgCisgICAgLy8gUmVvcHRpbWl6ZSBhcyBzb29uIGFzIHBvc3Np
YmxlLgorICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihIZXVyaXN0aWNz
OjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9uKSwgQXNzZW1i
bHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRXhl
Y3V0ZUNvdW50ZXIoKSkpOworICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBkb25lQWRqdXN0aW5n
ID0gbV9qaXQuanVtcCgpOworICAgIAorICAgIGZld0ZhaWxzLmxpbmsoJm1faml0KTsKKyAgICBs
b3dGYWlsUmF0ZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJs
eUhlbHBlcnM6OkltbTMyKG1faml0LmNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVy
VmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNvdW50ZXIoKSkp
OworICAgIAorICAgIGRvbmVBZGp1c3RpbmcubGluaygmbV9qaXQpOworICAgIAorICAgIC8vIDEz
KSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVn
VDAuCisgICAgCisgICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKSB7CisgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBl
cnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBH
UFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CisgICAgICAgIG1faml0LmxvYWQzMihBc3Nl
bWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFu
ZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7CisgICAgfQorICAgIAorICAgIC8v
IDE0KSBGaXggY2FsbCBmcmFtZSAocykuCisgICAgCisgICAgQVNTRVJUKG1faml0LmNvZGVCbG9j
aygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQp
OworICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2pp
dC5jb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKVJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKSk7CisgICAgCisgICAg
Zm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVyKSB7CisgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVD
b2RlQmxvY2sgPSBtX2ppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKTsKKyAgICAg
ICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IG1faml0LmJhc2VsaW5l
Q29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKTsKKyAgICAgICAgVmVjdG9yPEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENv
ZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIpOworICAgICAgICB1bnNpZ25lZCBy
ZXR1cm5CeXRlY29kZUluZGV4ID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRl
eCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7CisgICAgICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVu
c2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29k
ZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgcmV0dXJuQnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobWFwcGluZyk7CisgICAgICAgIEFTU0VS
VChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNvZGVJbmRleCk7CisgICAg
ICAgIAorICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5n
ZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKwor
ICAgICAgICBHUFJSZWcgY2FsbGVyRnJhbWVHUFI7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKEFz
c2VtYmx5SGVscGVyczo6SW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICAgICAgY2FsbGVyRnJhbWVH
UFIgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjYWxsZXJG
cmFtZUdQUiA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyOworICAgICAgICAKKyAgICAgICAg
bV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29k
ZUJsb2NrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpKTsK
KyAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSkpOworICAg
ICAgICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZWUtPnNjb3BlKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Io
KFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVy
RmlsZTo6U2NvcGVDaGFpbikpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBl
cnM6OkltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmly
dHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxl
OjpDYWxsZXJGcmFtZSkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIs
IEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSkpKTsKKyAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJn
ZXQpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpKSk7CisgICAg
ICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpKSk7CisgICAg
ICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxS
ZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6QXJn
dW1lbnRDb3VudCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6Oklt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxs
ZWUpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5
bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
UmVnaXN0ZXJGaWxlOjpDYWxsZWUpKSk7CisgICAgfQorICAgIAorICAgIGlmIChleGl0Lm1fY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIG1faml0LmFkZFB0cihBc3NlbWJseUhl
bHBlcnM6OkltbTMyKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OworCisgICAgLy8gMTUpIEp1bXAgaW50byB0aGUgY29ycmVzcG9uZGluZyBiYXNlbGluZSBKSVQg
Y29kZS4KKyAgICAKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuYmFz
ZWxpbmVDb2RlQmxvY2tGb3IoZXhpdC5tX2NvZGVPcmlnaW4pOworICAgIFZlY3RvcjxCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCA9IG1faml0LmRlY29kZWRDb2RlTWFw
Rm9yKGJhc2VsaW5lQ29kZUJsb2NrKTsKKyAgICAKKyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNp
Z25lZCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4PihkZWNvZGVk
Q29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIGV4aXQubV9jb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIEFTU0VSVChtYXBwaW5nKTsKKyAgICBBU1NFUlQo
bWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgpOworICAgIAorICAgIHZvaWQqIGp1bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmFzZWxpbmVDb2RlQmxvY2stPmdldEpJVENv
ZGUoKS5zdGFydCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOworICAgIAorICAg
IEFTU0VSVChHUFJJbmZvOjpyZWdUMiAhPSBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3RlciAm
JiBHUFJJbmZvOjpyZWdUMiAhPSBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3RlcjIpOworICAg
IAorICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJn
ZXQpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgbV9qaXQuanVtcChHUFJJbmZvOjpyZWdUMik7CisK
KyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZnByaW50ZihzdGRlcnIsICIgICAt
PiAlcFxuIiwganVtcFRhcmdldCk7CisjZW5kaWYKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpICYmIFVTRShKU1ZBTFVFMzJfNjQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkgJiYgVVNFKEpTVkFMVUU2NCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
Cit2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgT1NSRXhpdCYgZXhpdCwg
U3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCit7CisgICAgLy8gMSkgUHJvLWZvcm1hIHN0
dWZmLgorICAgIGV4aXQubV9jaGVjay5saW5rKCZtX2ppdCk7CisKKyNpZiBERkdfRU5BQkxFKERF
QlVHX1ZFUkJPU0UpCisgICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQg
KCIsIChpbnQpZXhpdC5tX25vZGVJbmRleCk7CisgICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBleGl0Lm1fY29kZU9yaWdpbjsgOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUtPmNhbGxlcikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImJjIyV1IiwgY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAt
PiAlcCAiLCBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7Cisg
ICAgfQorICAgIGZwcmludGYoc3RkZXJyLCAiKSBhdCBKSVQgb2Zmc2V0IDB4JXggICIsIG1faml0
LmRlYnVnT2Zmc2V0KCkpOworICAgIGV4aXQuZHVtcChzdGRlcnIpOworI2VuZGlmCisjaWYgREZH
X0VOQUJMRShWRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCisgICAgU3BlY3VsYXRpb25GYWls
dXJlRGVidWdJbmZvKiBkZWJ1Z0luZm8gPSBuZXcgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZv
OworICAgIGRlYnVnSW5mby0+Y29kZUJsb2NrID0gbV9qaXQuY29kZUJsb2NrKCk7CisgICAgZGVi
dWdJbmZvLT5kZWJ1Z09mZnNldCA9IG1faml0LmRlYnVnT2Zmc2V0KCk7CisgICAgCisgICAgbV9q
aXQuZGVidWdDYWxsKGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUsIGRlYnVn
SW5mbyk7CisjZW5kaWYKKyAgICAKKyNpZiBERkdfRU5BQkxFKEpJVF9CUkVBS19PTl9TUEVDVUxB
VElPTl9GQUlMVVJFKQorICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgIAorI2lm
IERGR19FTkFCTEUoU1VDQ0VTU19TVEFUUykKKyAgICBzdGF0aWMgU2FtcGxpbmdDb3VudGVyIGNv
dW50ZXIoIlNwZWN1bGF0aW9uRmFpbHVyZSIpOworICAgIG1faml0LmVtaXRDb3VudChjb3VudGVy
KTsKKyNlbmRpZgorICAgIAorICAgIC8vIDIpIFBlcmZvcm0gc3BlY3VsYXRpb24gcmVjb3Zlcnku
IFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBhbiBvcGVyYXRpb24KKyAgICAvLyAgICBz
dGFydHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlmeWluZyB0aGUgc3BlY3VsYXRpb24gaXQg
aGFzIGFscmVhZHkgbWFkZS4KKyAgICAKKyAgICBHUFJSZWcgYWxyZWFkeUJveGVkID0gSW52YWxp
ZEdQUlJlZzsKKyAgICAKKyAgICBpZiAocmVjb3ZlcnkpIHsKKyAgICAgICAgc3dpdGNoIChyZWNv
dmVyeS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGQ6CisgICAgICAgICAg
ICBtX2ppdC5zdWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAg
ICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVy
eS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIGFscmVhZHlCb3hlZCA9IHJlY292ZXJ5LT5kZXN0KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEJvb2xlYW5T
cGVjdWxhdGlvbkNoZWNrOgorICAgICAgICAgICAgbV9qaXQueG9yUHRyKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVjb3Zl
cnktPmRlc3QoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAz
KSBSZWZpbmUgc29tZSB2YWx1ZSBwcm9maWxlLCBpZiBhcHByb3ByaWF0ZS4KKyAgICAKKyAgICBp
ZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSAmJiAhIWV4aXQubV92YWx1ZVByb2ZpbGUpIHsKKyAg
ICAgICAgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmlzQWRkcmVzcygpKSB7CisgICAgICAgICAg
ICAvLyBXZSBjYW4ndCBiZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIHNwYXJlIHJlZ2lzdGVyLiBTbyB1
c2UgdGhlIHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwKKyAgICAgICAgICAgIC8vIHNpbmNlIHdlIGtu
b3cgaG93IHRvIHJlc3RvcmUgaXQuCisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5
SGVscGVyczo6QWRkcmVzcyhleGl0Lm1fanNWYWx1ZVNvdXJjZS5hc0FkZHJlc3MoKSksIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGV4aXQubV92YWx1ZVByb2ZpbGUtPnNwZWNG
YWlsQnVja2V0KDApKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oVGFnVHlwZU51bWJlcikpLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKGV4aXQubV9qc1ZhbHVlU291cmNlLmdwcigpLCBleGl0Lm1fdmFsdWVQcm9m
aWxlLT5zcGVjRmFpbEJ1Y2tldCgwKSk7CisgICAgfQorCisgICAgLy8gNCkgRmlndXJlIG91dCBo
b3cgbWFueSBzY3JhdGNoIHNsb3RzIHdlJ2xsIG5lZWQuIFdlIG5lZWQgb25lIGZvciBldmVyeSBH
UFIvRlBSCisgICAgLy8gICAgd2hvc2UgZGVzdGluYXRpb24gaXMgbm93IG9jY3VwaWVkIGJ5IGEg
REZHIHZpcnR1YWwgcmVnaXN0ZXIsIGFuZCB3ZSBuZWVkCisgICAgLy8gICAgb25lIGZvciBldmVy
eSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlciBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuCisgICAg
Ly8gICAgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgb2YgdGhlbS4gQWxzbyBzZWUgaWYgdGhl
cmUgYXJlIGFueSBjb25zdGFudHMsCisgICAgLy8gICAgYW55IHVuZGVmaW5lZCBzbG90cywgYW55
IEZQUiBzbG90cywgYW5kIGFueSB1bmJveGVkIGludHMuCisgICAgICAgICAgICAKKyAgICBWZWN0
b3I8Ym9vbD4gcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKGV4aXQubV92YXJpYWJsZXMuc2l6ZSgp
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJz
LnNpemUoKTsgKytpKQorICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbaV0gPSBmYWxz
ZTsKKworICAgIHVuc2lnbmVkIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzID0gMDsK
KyAgICB1bnNpZ25lZCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPSAwOworICAg
IAorICAgIC8vIEJvb2xlYW5zIGZvciBmYXN0IGNoZWNrcy4gV2UgZXhwZWN0IHRoYXQgbW9zdCBP
U1IgZXhpdHMgZG8gbm90IGhhdmUgdG8gcmVib3gKKyAgICAvLyBJbnQzMnMsIGhhdmUgbm8gRlBS
cywgYW5kIGhhdmUgbm8gY29uc3RhbnRzLiBJZiB0aGVyZSBhcmUgY29uc3RhbnRzLCB3ZQorICAg
IC8vIGV4cGVjdCBtb3N0IG9mIHRoZW0gdG8gYmUganNVbmRlZmluZWQoKTsgaWYgdGhhdCdzIHRy
dWUgdGhlbiB3ZSBoYW5kbGUgdGhhdAorICAgIC8vIHNwZWNpYWxseSB0byBtaW5pbWl6ZSBjb2Rl
IHNpemUgYW5kIGV4ZWN1dGlvbiB0aW1lLgorICAgIGJvb2wgaGF2ZVVuYm94ZWRJbnQzMnMgPSBm
YWxzZTsKKyAgICBib29sIGhhdmVGUFJzID0gZmFsc2U7CisgICAgYm9vbCBoYXZlQ29uc3RhbnRz
ID0gZmFsc2U7CisgICAgYm9vbCBoYXZlVW5kZWZpbmVkID0gZmFsc2U7CisgICAgCisgICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVl
UmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
CisgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgY2Fz
ZSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgY2FzZSBEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lz
dGVycysrOworICAgICAgICAgICAgQVNTRVJUKChpbnQpcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVy
KCkgPj0gMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBtaWdodCBs
aWtlIHRvIHN0b3JlIHRvIHRoaXMgdmlydHVhbCByZWdpc3RlciBiZWZvcmUgZG9pbmcKKyAgICAg
ICAgICAgIC8vIHZpcnR1YWwgcmVnaXN0ZXIgc2h1ZmZsaW5nLiBJZiBzbywgd2Ugc2F5IHRoYXQg
dGhlIHZpcnR1YWwgcmVnaXN0ZXIKKyAgICAgICAgICAgIC8vIGlzIHBvaXNvbmVkOiBpdCBjYW5u
b3QgYmUgc3RvcmVkIHRvIHVudGlsIGFmdGVyIGRpc3BsYWNlZCB2aXJ0dWFsCisgICAgICAgICAg
ICAvLyByZWdpc3RlcnMgYXJlIGhhbmRsZWQuIFdlIHRyYWNrIHBvaXNvbmVkIHZpcnR1YWwgcmVn
aXN0ZXIgY2FyZWZ1bGx5CisgICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhpcyBoYXBwZW5zIGVm
ZmljaWVudGx5LiBOb3RlIHRoYXQgd2UgZXhwZWN0IHRoaXMgY2FzZQorICAgICAgICAgICAgLy8g
dG8gYmUgcmFyZSwgc28gdGhlIGhhbmRsaW5nIG9mIGl0IGlzIG9wdGltaXplZCBmb3IgdGhlIGNh
c2VzIGluCisgICAgICAgICAgICAvLyB3aGljaCBpdCBkb2VzIG5vdCBoYXBwZW4uCisgICAgICAg
ICAgICBpZiAocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAoaW50KWV4aXQubV92YXJpYWJs
ZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChleGl0Lm1fdmFyaWFibGVzW3Jl
Y292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpXS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgICAg
IGNhc2UgSW5HUFI6CisgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAg
ICAgICAgICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAgICAgICAgICBpZiAoIXBvaXNv
bmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKV0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZQ
b2lzb25lZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMklu
R1BSOgorICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgor
ICAgICAgICAgICAgaGF2ZVVuYm94ZWRJbnQzMnMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgIGhhdmVGUFJz
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
Q29uc3RhbnQ6CisgICAgICAgICAgICBoYXZlQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAg
IGlmIChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAg
aGF2ZVVuZGVmaW5lZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgIGZwcmludGYoc3RkZXJyLCAi
ICAiKTsKKyAgICBpZiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpCisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiUG9pc29uZWQ9JXUgIiwgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnMpOworICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpCisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiRGlzcGxhY2VkPSV1ICIsIG51bWJlck9mRGlzcGxhY2Vk
VmlydHVhbFJlZ2lzdGVycyk7CisgICAgaWYgKGhhdmVVbmJveGVkSW50MzJzKQorICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIlVuYm94ZWRJbnQzMiAiKTsKKyAgICBpZiAoaGF2ZUZQUnMpCisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiRlBSICIpOworICAgIGlmIChoYXZlQ29uc3RhbnRzKQorICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbnN0YW50cyAiKTsKKyAgICBpZiAoaGF2ZVVuZGVmaW5l
ZCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmRlZmluZWQgIik7CisgICAgZnByaW50Zihz
dGRlcnIsICIgIik7CisjZW5kaWYKKyAgICAKKyAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaEJ1
ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4obV9qaXQuZ2xvYmFsRGF0YSgpLT5z
Y3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKG51bWJlck9mUG9p
c29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVy
cyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA/IDAgOiBudW1iZXJPZkRpc3BsYWNlZFZp
cnR1YWxSZWdpc3RlcnMpKSkpOworCisgICAgLy8gRnJvbSBoZXJlIG9uLCB0aGUgY29kZSBhc3N1
bWVzIHRoYXQgaXQgaXMgcHJvZml0YWJsZSB0byBtYXhpbWl6ZSB0aGUgZGlzdGFuY2UKKyAgICAv
LyBiZXR3ZWVuIHdoZW4gc29tZXRoaW5nIGlzIGNvbXB1dGVkIGFuZCB3aGVuIGl0IGlzIHN0b3Jl
ZC4KKyAgICAKKyAgICAvLyA1KSBQZXJmb3JtIGFsbCByZWJveGluZyBvZiBpbnRlZ2Vycy4KKyAg
ICAKKyAgICBpZiAoaGF2ZVVuYm94ZWRJbnQzMnMpIHsKKyAgICAgICAgZm9yIChpbnQgaW5kZXgg
PSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5
KGluZGV4KTsKKyAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICAgICAgaWYgKHJl
Y292ZXJ5LmdwcigpICE9IGFscmVhZHlCb3hlZCkKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
b3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS5ncHIoKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNl
IEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgorICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4o
VGFnVHlwZU51bWJlciA+PiAzMikpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgLy8gNikgRHVtcCBhbGwgbm9uLXBvaXNvbmVkIEdQUnMuIEZvciBwb2lzb25l
ZCBHUFJzLCBzYXZlIHRoZW0gaW50byB0aGUgc2NyYXRjaCBzdG9yYWdlLgorICAgIC8vICAgIE5v
dGUgdGhhdCBHUFJzIGRvIG5vdCBoYXZlIGEgZmFzdCBjaGFuZ2UgKGxpa2UgaGF2ZUZQUnMpIGJl
Y2F1c2Ugd2UgZXhwZWN0IHRoYXQKKyAgICAvLyAgICBtb3N0IE9TUiBmYWlsdXJlIHBvaW50cyB3
aWxsIGhhdmUgYXQgbGVhc3Qgb25lIEdQUiB0aGF0IG5lZWRzIHRvIGJlIGR1bXBlZC4KKyAgICAK
KyAgICB1bnNpZ25lZCBzY3JhdGNoSW5kZXggPSAwOworICAgIGZvciAoaW50IGluZGV4ID0gMDsg
aW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsK
KyAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAg
ICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBJbkdQUjoK
KyAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgIGlmIChleGl0Lmlz
VmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSkKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWNvdmVy
eS5ncHIoKSwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWNvdmVyeS5ncHIoKSwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50IGFsbCBHUFJzIGFyZSBhdmFp
bGFibGUgZm9yIHNjcmF0Y2ggdXNlLgorICAgIAorICAgIGlmIChoYXZlRlBScykgeworICAgICAg
ICAvLyA3KSBCb3ggYWxsIGRvdWJsZXMgKHJlbGllcyBvbiB0aGVyZSBiZWluZyBtb3JlIEdQUnMg
dGhhbiBGUFJzKQorICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8
IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAg
ICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSByZWNvdmVyeS5mcHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQUkluZm86OnRv
SW5kZXgoZnByKSk7CisgICAgICAgICAgICBtX2ppdC5ib3hEb3VibGUoZnByLCBncHIpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyA4KSBEdW1wIGFsbCBkb3VibGVzIGludG8gdGhl
IHJlZ2lzdGVyIGZpbGUsIG9yIHRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UgaWYKKyAgICAgICAgLy8g
ICAgdGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgcmVnaXN0ZXIgaXMgcG9pc29uZWQuCisgICAgICAg
IAorICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292
ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgaWYgKHJlY292
ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6dG9JbmRl
eChyZWNvdmVyeS5mcHIoKSkpOworICAgICAgICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRl
eCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRl
eCldKQorICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGdwciwgc2NyYXRjaEJ1ZmZlciAr
IHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cihncHIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lz
dGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnMpOworICAgIAorICAgIC8vIDkpIFJlc2h1ZmZsZSBkaXNwbGFjZWQgdmlydHVhbCByZWdp
c3RlcnMuIE9wdGltaXplIGZvciB0aGUgY2FzZSB0aGF0CisgICAgLy8gICAgdGhlIG51bWJlciBv
ZiBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMgaXMgbm90IG1vcmUgdGhhbiB0aGUgbnVtYmVy
CisgICAgLy8gICAgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIHJlZ2lzdGVycy4KKyAgICAKKyAgICBp
ZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7CisgICAgICAgIGlmIChudW1i
ZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMpIHsKKyAgICAgICAgICAgIC8vIFNvIGZhciB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlIGNhc2Ug
dGhhdCB0cmlnZ2VycyBhbGwgdGhlIHRpbWUsIGJ1dAorICAgICAgICAgICAgLy8gdGhhdCBpcyBm
YXIgZnJvbSBndWFyYW50ZWVkLgorICAgICAgICAKKyAgICAgICAgICAgIHVuc2lnbmVkIGRpc3Bs
YWNlbWVudEluZGV4ID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgp
OworICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgr
KykpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOiB7CisgICAg
ICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNl
bWVudEluZGV4KyspOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgZ3ByKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCBncHIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxh
Y2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQ
UkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyk7CisgICAgICAgICAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZp
cnR1YWxSZWdpc3RlcigpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViUHRy
KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgZGlzcGxhY2Vt
ZW50SW5kZXggPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4
aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25z
dCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICAgICAgY2Fz
ZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgIGNhc2UgRG91
YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyksIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4
KGluZGV4KSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgc2h1ZmZsaW5nIGFsZ29yaXRo
bSB0aGF0IHdlIHVzZQorICAgICAgICAgICAgLy8gZm9yIHNwZWN1bGF0aXZlLT5ub24tc3BlY3Vs
YXRpdmUganVtcHMsIGlmIHdlIGV2ZXIgZGlzY292ZXIgdGhhdAorICAgICAgICAgICAgLy8gc29t
ZSBob3QgY29kZSB3aXRoIGxvdHMgb2YgbGl2ZSB2YWx1ZXMgdGhhdCBnZXQgZGlzcGxhY2VkIGFu
ZAorICAgICAgICAgICAgLy8gc3BpbGxlZCByZWFsbHkgZW5qb3lzIGZyZXF1ZW50bHkgZmFpbGlu
ZyBzcGVjdWxhdGlvbi4KKyAgICAgICAgCisgICAgICAgICAgICAvLyBGb3Igbm93IHRoaXMgY29k
ZSBpcyBlbmdpbmVlcmVkIHRvIGJlIGNvcnJlY3QgYnV0IHByb2JhYmx5IG5vdAorICAgICAgICAg
ICAgLy8gc3VwZXIuIEluIHBhcnRpY3VsYXIsIGl0IGNvcnJlY3RseSBoYW5kbGVzIGNhc2VzIHdo
ZXJlIGZvciBleGFtcGxlCisgICAgICAgICAgICAvLyB0aGUgZGlzcGxhY2VtZW50cyBhcmUgYSBw
ZXJtdXRhdGlvbiBvZiB0aGUgZGVzdGluYXRpb24gdmFsdWVzLCBsaWtlCisgICAgICAgICAgICAv
LworICAgICAgICAgICAgLy8gMSAtPiAyCisgICAgICAgICAgICAvLyAyIC0+IDEKKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyBJdCBhY2NvbXBsaXNoZXMgdGhpcyBieSBzaW1wbHkgbGlm
dGluZyBhbGwgb2YgdGhlIHZpcnR1YWwgcmVnaXN0ZXJzCisgICAgICAgICAgICAvLyBmcm9tIHRo
ZWlyIG9sZCAoREZHIEpJVCkgbG9jYXRpb25zIGFuZCBkcm9wcGluZyB0aGVtIGluIGEgc2NyYXRj
aAorICAgICAgICAgICAgLy8gbG9jYXRpb24gaW4gbWVtb3J5LCBhbmQgdGhlbiB0cmFuc2ZlcnJp
bmcgZnJvbSB0aGF0IHNjcmF0Y2ggbG9jYXRpb24KKyAgICAgICAgICAgIC8vIHRvIHRoZWlyIG5l
dyAob2xkIEpJVCkgbG9jYXRpb25zLgorICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVl
UmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRj
aCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNl
ZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6
cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIElu
dDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0
ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQub3JQdHIo
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoQnVmZmVy
ICsgc2NyYXRjaEluZGV4KyspOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgRG91
YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YlB0
cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZm
ZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIHNjcmF0Y2hJbmRleCA9IG51bWJlck9mUG9p
c29uZWRWaXJ0dWFsUmVnaXN0ZXJzOworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBp
bmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShp
bmRleCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAg
ICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAg
IGNhc2UgRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1Qw
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJh
bmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzICsgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICAvLyAxMCkgRHVtcCBhbGwgcG9pc29uZWQgdmlydHVhbCByZWdp
c3RlcnMuCisgICAgCisgICAgc2NyYXRjaEluZGV4ID0gMDsKKyAgICBpZiAobnVtYmVyT2ZQb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnMpIHsKKyAgICAgICAgZm9yIChpbnQgdmlydHVhbFJlZ2lzdGVy
ID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgKGludClleGl0Lm1fdmFyaWFibGVzLnNpemUoKTsgKyt2
aXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgIGlmICghcG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzW3ZpcnR1YWxSZWdpc3Rlcl0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC5t
X3ZhcmlhYmxlc1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVy
eS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgICAgIGNh
c2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAg
ICAgICAgIG1faml0LmxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVn
VDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxS
ZWdpc3RlcikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9p
c29uZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAgICAKKyAgICAvLyAxMSkgRHVtcCBhbGwgY29uc3Rh
bnRzLiBPcHRpbWl6ZSBmb3IgVW5kZWZpbmVkLCBzaW5jZSB0aGF0J3MgYSBjb25zdGFudCB3ZSBz
ZWUKKyAgICAvLyAgICAgb2Z0ZW4uCisKKyAgICBpZiAoaGF2ZUNvbnN0YW50cykgeworICAgICAg
ICBpZiAoaGF2ZVVuZGVmaW5lZCkKKyAgICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25z
dCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Cisg
ICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ29uc3RhbnQpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQoKS5p
c1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJl
Z1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9w
ZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKHJlY292ZXJ5LmNvbnN0YW50KCkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgLy8gMTIpIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUg
Y291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93CisgICAgLy8gICAgIHRo
YXQgYWxsIG5ldyBjYWxscyBpbnRvIHRoaXMgY29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBz
byB0aGUgZXhlY3V0ZQorICAgIC8vICAgICBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1l
cyB0aGF0IHBlcmZvcm1lZCBPU1IgZXhpdCBhbmQgY2FsbCBmcmFtZXMKKyAgICAvLyAgICAgdGhh
dCB3ZXJlIHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVy
IGNhbGwgZnJhbWUncworICAgIC8vICAgICBPU1IgZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhh
dCB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisgICAgLy8KKyAgICAvLyAgICAgKGEpIENvZGUgdGhl
IHBlcmZvcm1zIGFuIE9TUiBleGl0IGdldHMgYSBjaGFuY2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQK
KyAgICAvLyAgICAgICAgIGNvZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0aW1pemVkIGNvZGUgaXMg
ZmFzdGVyLiBCdXQgd2UgZG9uJ3QKKyAgICAvLyAgICAgICAgIHdhbnQgdG8gZG8gc3VjaCByZWVu
dGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KKyAgICAvLworICAgIC8vICAg
ICAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUgY2FsbCBzdGFjayB0aGF0IGlzIHN0aWxsIHJ1
bm5pbmcgdGhlIG9sZAorICAgIC8vICAgICAgICAgSklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9T
UidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBjaGFuY2UgdG8KKyAgICAvLyAgICAgICAgIHBlcmZv
cm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCisgICAgLy8K
KyAgICAvLyAgICAgKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IHNob3VsZCBub3Qg
aW1tZWRpYXRlbHkgcmV0cnkgT1NSCisgICAgLy8gICAgICAgICBlbnRyeSwgc2luY2UgYm90aCBm
b3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCisgICAgLy8gICAgICAgICBw
YXJ0aWN1bGFybHkgZXhwZW5zaXZlLgorICAgIC8vCisgICAgLy8gICAgIChkKSBGcmVxdWVudCBP
U1IgZmFpbHVyZXMsIGV2ZW4gdGhvc2UgdGhhdCBkbyBub3QgcmVzdWx0IGluIHRoZSBjb2RlCisg
ICAgLy8gICAgICAgICBydW5uaW5nIGluIGEgaG90IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBpbGF0
aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgorICAgIC8vCisgICAgLy8gICAgIFRvIGVuc3VyZSAoYyks
IHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUgY291bnRlciB0bworICAgIC8vICAgICBjb3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3Vs
ZCBlbmRhbmdlcgorICAgIC8vICAgICAoYSkgYW5kIChiKSwgc2luY2UgdGhlbiBldmVyeSBPU1Ig
ZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9yCisgICAgLy8gICAgIGV2ZXJ5IGNh
bGwgZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVzc2VudGlhbGx5LCBpZiBPU1IgZXhpdCBo
YXBwZW5zCisgICAgLy8gICAgIGZyZXF1ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxv
b3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2ZXIKKyAgICAvLyAgICAgYmVjb21lIG5vbi1u
ZWdhdGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkK
KyAgICAvLyAgICAgd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhlIG9s
ZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKKyAgICAvLyAgICAgZ29vZCBqb2Igb2YgZW5zdXJp
bmcgKGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJlIG9mIChkKSwKKyAgICAv
LyAgICAgc2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVj
dXRlIGNvdW50ZXIuCisgICAgLy8gICAgIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBv
ZiBzcGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5CisgICAgLy8gICAgIGxhcmdl
ciB0aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJhdGUp
LCBhbmQgaWYKKyAgICAvLyAgICAgdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJl
ciBvZiBmYWlsdXJlcy4gSWYgc28sIHdlIHNldCB0aGUKKyAgICAvLyAgICAgY291bnRlciB0byAw
OyBvdGhlcndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCisgICAgLy8gICAgIGNvdW50ZXJWYWx1
ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4KKyAgICAKKyAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKSksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAKKyAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKSwg
R1BSSW5mbzo6cmVnVDIpOworICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZVN1Y2Nlc3ND
b3VudGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgbV9qaXQuYWRkMzIoQXNzZW1ibHlIZWxw
ZXJzOjpJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIG1faml0LmFkZDMyKEFzc2VtYmx5
SGVscGVyczo6SW1tMzIoLTEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgbV9qaXQuc3RvcmUzMihH
UFJJbmZvOjpyZWdUMiwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBD
b2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKSk7CisgICAgbV9qaXQu
c3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7
CisgICAgCisgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9q
aXQuY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisg
ICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGZld0ZhaWxzID0gbV9qaXQuYnJhbmNoMzIoQXNzZW1i
bHlIZWxwZXJzOjpCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBBc3NlbWJseUhlbHBlcnM6
OkltbTMyKG1faml0LmNvZGVCbG9jaygpLT5sYXJnZUZhaWxDb3VudFRocmVzaG9sZCgpKSk7Cisg
ICAgbV9qaXQubXVsMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihIZXVyaXN0aWNzOjpkZXNpcmVk
U3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvKSwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJl
Z1QyKTsKKyAgICAKKyAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgbG93RmFpbFJhdGUgPSBtX2pp
dC5icmFuY2gzMihBc3NlbWJseUhlbHBlcnM6OkJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIs
IEdQUkluZm86OnJlZ1QxKTsKKyAgICAKKyAgICAvLyBSZW9wdGltaXplIGFzIHNvb24gYXMgcG9z
c2libGUuCisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKEhldXJpc3Rp
Y3M6OmV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24pLCBBc3Nl
bWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZF
eGVjdXRlQ291bnRlcigpKSk7CisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGRvbmVBZGp1c3Rp
bmcgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgZmV3RmFpbHMubGluaygmbV9qaXQpOworICAg
IGxvd0ZhaWxSYXRlLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBtX2ppdC5zdG9yZTMyKEFzc2Vt
Ymx5SGVscGVyczo6SW1tMzIobV9qaXQuY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpLCBBc3NlbWJseUhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigp
KSk7CisgICAgCisgICAgZG9uZUFkanVzdGluZy5saW5rKCZtX2ppdCk7CisgICAgCisgICAgLy8g
MTMpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBvcGVyYXRpb24gaW50byBy
ZWdUMC4KKyAgICAKKyAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5tX2xhc3RTZXRPcGVyYW5kKSwg
R1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOworICAgIAorICAgIC8vIDE0KSBGaXggY2Fs
bCBmcmFtZShzKS4KKyAgICAKKyAgICBBU1NFUlQobV9qaXQuY29kZUJsb2NrKCktPmFsdGVybmF0
aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgbV9qaXQu
c3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygp
LT5hbHRlcm5hdGl2ZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKTsKKyAgICAKKyAgICBmb3IgKENvZGVPcmln
aW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsK
KyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZTsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1f
aml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pOworICAgICAgICBDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gbV9qaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3Io
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpOworICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBtX2ppdC5kZWNvZGVkQ29kZU1hcEZvcihiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlcik7CisgICAgICAgIHVuc2lnbmVkIHJldHVybkJ5dGVjb2Rl
SW5kZXggPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xF
TkdUSChvcF9jYWxsKTsKKyAgICAgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5n
ID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVn
aW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCByZXR1cm5CeXRlY29kZUluZGV4KTsKKyAgICAg
ICAgCisgICAgICAgIEFTU0VSVChtYXBwaW5nKTsKKyAgICAgICAgQVNTRVJUKG1hcHBpbmctPm1f
Ynl0ZWNvZGVJbmRleCA9PSByZXR1cm5CeXRlY29kZUluZGV4KTsKKyAgICAgICAgCisgICAgICAg
IHZvaWQqIGp1bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldEpJVENvZGUoKS5z
dGFydCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOworCisgICAgICAgIEdQUlJl
ZyBjYWxsZXJGcmFtZUdQUjsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlu
bGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVy
czo6SW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZv
OjpyZWdUMzsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyOworICAgICAgICAKKyAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpKTsKKyAgICAgICAgbV9q
aXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVlLT5zY29wZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OlNj
b3BlQ2hhaW4pKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpKSk7CisgICAgICAgIG1f
aml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwg
QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OlJldHVyblBDKSkpOworICAgICAgICBt
X2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkpKSwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIG1f
aml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlZS5nZXQoKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxs
ZWUpKSk7CisgICAgfQorICAgIAorICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpCisgICAgICAgIG1faml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OkltbTMyKGV4aXQu
bV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIAorICAgIC8vIDE1
KSBKdW1wIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYmFzZWxpbmUgSklUIGNvZGUuCisgICAgCisg
ICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGV4aXQubV9jb2RlT3JpZ2luKTsKKyAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zm
c2V0PiYgZGVjb2RlZENvZGVNYXAgPSBtX2ppdC5kZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNv
ZGVCbG9jayk7CisgICAgCisgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0g
YmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4o
KSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
KTsKKyAgICAKKyAgICBBU1NFUlQobWFwcGluZyk7CisgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0
ZWNvZGVJbmRleCA9PSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAKKyAg
ICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGJhc2VsaW5lQ29kZUJsb2NrLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkg
KyBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICAKKyAgICBBU1NFUlQoR1BSSW5m
bzo6cmVnVDEgIT0gR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOworICAgIAorICAgIG1f
aml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJ
bmZvOjpyZWdUMSk7CisgICAgbV9qaXQuanVtcChHUFJJbmZvOjpyZWdUMSk7CisKKyNpZiBERkdf
RU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZnByaW50ZihzdGRlcnIsICItPiAlcFxuIiwganVt
cFRhcmdldCk7CisjZW5kaWYKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpICYmIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHT1NSRXhpdENvbXBpbGVyX2gKKyNkZWZpbmUgREZHT1NS
RXhpdENvbXBpbGVyX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBc3NlbWJseUhlbHBlcnMuaCIKKyNpbmNsdWRlICJE
RkdPU1JFeGl0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
T1NSRXhpdENvbXBpbGVyIHsKK3B1YmxpYzoKKyAgICBPU1JFeGl0Q29tcGlsZXIoQXNzZW1ibHlI
ZWxwZXJzJiBqaXQpCisgICAgICAgIDogbV9qaXQoaml0KQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjb21waWxlRXhpdChjb25zdCBPU1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSop
OworCitwcml2YXRlOgorICAgIEFzc2VtYmx5SGVscGVycyYgbV9qaXQ7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR09TUkV4aXRDb21waWxlcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNWYWx1ZS5oCShyZXZpc2lvbiA5OTUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSArNDcsMTEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgY2xhc3MgVVN0cmluZzsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBu
YW1lc3BhY2UgREZHIHsKKyAgICAgICAgY2xhc3MgQXNzZW1ibHlIZWxwZXJzOwogICAgICAgICBj
bGFzcyBKSVRDb21waWxlcjsKICAgICAgICAgY2xhc3MgSklUQ29kZUdlbmVyYXRvcjsKICAgICAg
ICAgY2xhc3MgSlNWYWx1ZVNvdXJjZTsKKyAgICAgICAgY2xhc3MgT1NSRXhpdENvbXBpbGVyOwog
ICAgICAgICBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKICAgICB9CiAjZW5kaWYKQEAgLTEwOSw5ICsx
MTEsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU0ludGVyZmFj
ZUpJVDsKICAgICAgICAgZnJpZW5kIGNsYXNzIFNwZWNpYWxpemVkVGh1bmtKSVQ7CiAjaWYgRU5B
QkxFKERGR19KSVQpCisgICAgICAgIGZyaWVuZCBjbGFzcyBERkc6OkFzc2VtYmx5SGVscGVyczsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6SklUQ29tcGlsZXI7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBERkc6OkpJVENvZGVHZW5lcmF0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBERkc6OkpT
VmFsdWVTb3VyY2U7CisgICAgICAgIGZyaWVuZCBjbGFzcyBERkc6Ok9TUkV4aXRDb21waWxlcjsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6U3BlY3VsYXRpdmVKSVQ7CiAjZW5kaWYKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gOTk1MjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4
Myw3ICs4ODMsNyBAQAogI2VuZGlmCiAKIC8qIEN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZv
ciBKU1ZBTFVFNjQsIG9ubHkgdGVzdGVkIG9uIFBMQVRGT1JNKE1BQykgKi8KLSNpZiAhZGVmaW5l
ZChFTkFCTEVfREZHX0pJVCkgJiYgRU5BQkxFKEpJVCkgJiYgVVNFKEpTVkFMVUU2NCkgJiYgUExB
VEZPUk0oTUFDKQorI2lmICFkZWZpbmVkKEVOQUJMRV9ERkdfSklUKSAmJiBFTkFCTEUoSklUKSAm
JiBQTEFURk9STShNQUMpCiAjZGVmaW5lIEVOQUJMRV9ERkdfSklUIDEKICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114029</attachid>
            <date>2011-11-08 03:20:53 -0800</date>
            <delta_ts>2011-11-08 14:01:20 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>osrexit_patch_3.diff</filename>
            <type>text/plain</type>
            <size>128117</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5OTU0MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw5IEBACiAJCTBGQzA5NzZBMTQ2OEE2Rjcw
MENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIgLyogREZHT1NSRXhpdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzA5NzZE
MTQ2OEFCNEUwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzZDMTQ2OEFCNEEwMENGMjQ0MiAv
KiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkMwOTc2RTE0NjhBQjUxMDBDRjI0NDIgLyogREZHQXNzZW1ibHlI
ZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuY3BwICovOyB9
OworCQkwRkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc2RjE0Njkz
QUVGMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDMDk3NzIxNDY5M0FGOTAwQ0YyNDQyIC8q
IERGR09TUkV4aXRDb21waWxlcjY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzA5NzcwMTQ2OTNBRUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29t
cGlsZXI2NC5jcHAgKi87IH07CisJCTBGQzA5Nzc2MTQ2OTQzQjAwMENGMjQ0MiAvKiBERkdPU1JF
eGl0Q29tcGlsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkMwOTc3NTE0Njk0M0FEMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVy
MzJfNjQuY3BwICovOyB9OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJy
aWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQjE0
MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMg
LyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CiAJCTBGQzgxNTE1MTQwNTExOUIwMENG
QTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVt
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMx
OCw3ICszMjEsNiBAQAogCQk4NjcwNEI4OTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY3MDRC
ODIxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmNwcCAqLzsgfTsKIAkJODY3MDRCOEEx
MkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjcwNEI4MzEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBh
dHRlcm4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk4Njg4MEYxQzE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjE4
MTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwICovOyB9Owot
CQk4Njg4MEYxRDE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGlsZXIzMl82NC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Njg4MEYxOTE0MzI4
QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGlsZXIzMl82NC5jcHAgKi87IH07CiAJCTg2ODgwRjFF
MTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcklubGluZU1ldGhvZHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjFBMTQzMjhCQjkw
MEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcklubGluZU1ldGhvZHMuaCAqLzsgfTsKIAkJODY4ODBG
MUYxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJCOTAw
QjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovOyB9OwogCQk4Njg4MEY0NDE0
MzUzMUE4MDBCMDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjQzMTQzNTMxQTcwMEIwOEQ0
MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwICovOyB9OwpAQCAtODM5LDYgKzg0MSw5IEBA
CiAJCTBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXQuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0
MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHQXNzZW1ibHlIZWxwZXJzLmNwcDsgcGF0aCA9IGRmZy9ERkdBc3NlbWJseUhl
bHBlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMwOTc2QzE0NjhBQjRB
MDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0Fzc2VtYmx5SGVscGVycy5oOyBwYXRoID0gZGZnL0RGR0Fzc2VtYmx5SGVs
cGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMwOTc2RjE0NjkzQUVGMDBD
RjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR09TUkV4aXRDb21waWxlci5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMwOTc3MDE0NjkzQUVGMDBDRjI0
NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDMDk3NzUx
NDY5NDNBRDAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDsg
cGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBw
b3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRlQmFycmll
clN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUwOTE0MDQz
QkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTAwLDcgKzExMDUsNiBAQAogCQk4NjdG
QzM1RjExQjc2Mzk1MDAyNTEwNUUgLyogSmF2YVNjcmlwdENvcmUuSlNWQUxVRTMyXzY0b25seS5l
eHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmV4cG9ydHM7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5K
U1ZBTFVFMzJfNjRvbmx5LmV4cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY3RkMz
NjExMUI3NjM5NTAwMjUxMDVFIC8qIEphdmFTY3JpcHRDb3JlLkpTVkFMVUU2NG9ubHkuZXhwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5leHBvcnRzOyBwYXRoID0gSmF2YVNjcmlwdENvcmUuSlNWQUxV
RTY0b25seS5leHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2ODgwRjE4MTQzMjhC
QjkwMEIwOEQ0MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcDsgcGF0
aCA9IGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk4Njg4MEYxOTE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGlsZXIzMl82
NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdKSVRDb21waWxl
cjMyXzY0LmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb21waWxlcjMyXzY0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4ODBGMUExNDMyOEJCOTAwQjA4RDQyIC8qIERGR0pJVENv
bXBpbGVySW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdKSVRDb21waWxlcklubGluZU1ldGhvZHMuaDsgcGF0aCA9IGRmZy9ERkdKSVRDb21waWxlcklu
bGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4ODBGMUIxNDMy
OEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA7IHBhdGgg
PSBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2ODgwRjQzMTQzNTMxQTcwMEIwOEQ0MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yNjQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSklUQ29kZUdlbmVy
YXRvcjY0LmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI5OCw2ICsyMzAyLDkgQEAKIAkJODZFQzlEQjMxMzI4
REY0NDAwMkIyQUQ3IC8qIGRmZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEZDMDk3NzUxNDY5NDNBRDAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxl
cjMyXzY0LmNwcCAqLywKKwkJCQkwRkMwOTc2RjE0NjkzQUVGMDBDRjI0NDIgLyogREZHT1NSRXhp
dENvbXBpbGVyLmggKi8sCisJCQkJMEZDMDk3NzAxNDY5M0FFRjAwQ0YyNDQyIC8qIERGR09TUkV4
aXRDb21waWxlcjY0LmNwcCAqLywKIAkJCQkwRkMwOTc2QjE0NjhBQjRBMDBDRjI0NDIgLyogREZH
QXNzZW1ibHlIZWxwZXJzLmNwcCAqLywKIAkJCQkwRkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyog
REZHQXNzZW1ibHlIZWxwZXJzLmggKi8sCiAJCQkJMEZDMDk3NjgxNDY4QTZFRjAwQ0YyNDQyIC8q
IERGR09TUkV4aXQuaCAqLywKQEAgLTIzMjYsNyArMjMzMyw2IEBACiAJCQkJODY4ODBGNDMxNDM1
MzFBNzAwQjA4RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAgKi8sCiAJCQkJODZFQzlE
QkIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmNwcCAqLywKIAkJCQk4NkVDOURC
QzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCAqLywKLQkJCQk4Njg4MEYxOTE0
MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGlsZXIzMl82NC5jcHAgKi8sCiAJCQkJODY4ODBG
MUExNDMyOEJCOTAwQjA4RDQyIC8qIERGR0pJVENvbXBpbGVySW5saW5lTWV0aG9kcy5oICovLAog
CQkJCTg2RUNBM0U5MTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggKi8sCiAJCQkJMEZEODJF
NTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCAqLywKQEAgLTI5MTIsNiArMjkx
OCw3IEBACiAJCQkJMEYyRTVCRjcxNDYzNTdENTAwM0VCMkVCIC8qIFNwZWN0cnVtLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZHT1NSRXhpdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkQxNDY4QUI0RTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5
SGVscGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8q
IERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zNDM2LDcgKzM0NDMsNiBA
QAogCQkJCUE3MDQ1NkIxMTQyN0ZCOTUwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5j
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYxQzE0MzI4QkI5MDBCMDhENDIgLyog
REZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTg2ODgwRjFE
MTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcjMyXzY0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjQ0MTQzNTMxQTgwMEIwOEQ0MiAvKiBERkdK
SVRDb2RlR2VuZXJhdG9yNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4ODBGNEQxNDM1M0Iy
MTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0z
NDQ0LDYgKzM0NTAsOCBAQAogCQkJCTBGNjIwMTc5MTQzRkNENDgwMDY4Qjc3QyAvKiBERkdBYnN0
cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDM0M0Q0EwMTQ1OEY1NDUwMDI1RkI2
MiAvKiBKU0dsb2JhbFRoaXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3NkUxNDY4QUI1
MTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5SGVscGVycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkMwOTc3MjE0NjkzQUY5MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZDMDk3NzYxNDY5NDNCMDAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21w
aWxlcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiA5OTU0MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNTY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRG
R0pJVENvbXBpbGVyLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSNpZiBVU0UoSlNWQUxVRTMy
XzY0KQotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiREZHSklUQ29kZUdlbmVy
YXRvci5oIgotI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVySW5saW5lTWV0aG9kcy5oIgotI2luY2x1
ZGUgIkRGR09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJERkdSZWdpc3RlckJhbmsuaCIKLSNpbmNs
dWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewot
Ci12b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQm
IGV4aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQotewotICAgIC8vIDEpIFByby1m
b3JtYSBzdHVmZi4KLSAgICBleGl0Lm1fY2hlY2subGluayh0aGlzKTsKLQotI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKLSAgICBmcHJpbnRmKHN0ZGVyciwgIk9TUiBleGl0IGZvciBOb2Rl
IEAlZCAoIiwgKGludClleGl0Lm1fbm9kZUluZGV4KTsKLSAgICBmb3IgKENvZGVPcmlnaW4gY29k
ZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyA7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmMjJXUi
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGZwcmludGYoc3RkZXJy
LCAiIC0+ICVwICIsIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgp
KTsKLSAgICB9Ci0gICAgZnByaW50ZihzdGRlcnIsICIpIGF0IEpJVCBvZmZzZXQgMHgleCAgIiwg
ZGVidWdPZmZzZXQoKSk7Ci0gICAgZXhpdC5kdW1wKHN0ZGVycik7Ci0jZW5kaWYKLSNpZiBERkdf
RU5BQkxFKFZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSkKLSAgICBTcGVjdWxhdGlvbkZhaWx1
cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87
Ci0gICAgZGVidWdJbmZvLT5jb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKLSAgICBkZWJ1Z0luZm8t
PmRlYnVnT2Zmc2V0ID0gZGVidWdPZmZzZXQoKTsKLSAgICAKLSAgICBkZWJ1Z0NhbGwoZGVidWdP
cGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKLSNlbmRpZgotICAg
IAotI2lmIERGR19FTkFCTEUoSklUX0JSRUFLX09OX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCi0gICAg
YnJlYWtwb2ludCgpOwotI2VuZGlmCi0gICAgCi0jaWYgREZHX0VOQUJMRShTVUNDRVNTX1NUQVRT
KQotICAgIHN0YXRpYyBTYW1wbGluZ0NvdW50ZXIgY291bnRlcigiU3BlY3VsYXRpb25GYWlsdXJl
Iik7Ci0gICAgZW1pdENvdW50KGNvdW50ZXIpOwotI2VuZGlmCi0KLSAgICAvLyAyKSBQZXJmb3Jt
IHNwZWN1bGF0aW9uIHJlY292ZXJ5LiBUaGlzIG9ubHkgY29tZXMgaW50byBwbGF5IHdoZW4gYW4g
b3BlcmF0aW9uCi0gICAgLy8gICAgc3RhcnRzIG11dGF0aW5nIHN0YXRlIGJlZm9yZSB2ZXJpZnlp
bmcgdGhlIHNwZWN1bGF0aW9uIGl0IGhhcyBhbHJlYWR5IG1hZGUuCi0gICAgCi0gICAgaWYgKHJl
Y292ZXJ5KSB7Ci0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5cGUoKSkgewotICAgICAgICBj
YXNlIFNwZWN1bGF0aXZlQWRkOgotICAgICAgICAgICAgc3ViMzIocmVjb3ZlcnktPnNyYygpLCBy
ZWNvdmVyeS0+ZGVzdCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyAzKSBSZWZpbmUgc29tZSB2YWx1ZSBwcm9maWxlLCBpZiBhcHBy
b3ByaWF0ZS4KLSAgICAKLSAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSAmJiAhIWV4aXQu
bV92YWx1ZVByb2ZpbGUpIHsKLSAgICAgICAgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmlzQWRk
cmVzcygpKSB7Ci0gICAgICAgICAgICAvLyBTYXZlIGEgcmVnaXN0ZXIgc28gd2UgY2FuIHVzZSBp
dC4KLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgICAg
ICAgICBpZiAoc2NyYXRjaCA9PSBleGl0Lm1fanNWYWx1ZVNvdXJjZS5iYXNlKCkpCi0gICAgICAg
ICAgICAgICAgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QxOwotICAgICAgICAgICAgRW5jb2RlZEpT
VmFsdWUqIHNjcmF0Y2hCdWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGdsb2Jh
bERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKHVpbnQzMl90KSkpOwotICAgICAg
ICAgICAgc3RvcmUzMihzY3JhdGNoLCBzY3JhdGNoQnVmZmVyKTsKLSAgICAgICAgICAgIGxvYWQz
MihleGl0Lm1fanNWYWx1ZVNvdXJjZS5hc0FkZHJlc3MoT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBzdG9y
ZTMyKHNjcmF0Y2gsICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGV4aXQu
bV92YWx1ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnRhZyk7Ci0gICAgICAg
ICAgICBsb2FkMzIoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNBZGRyZXNzKE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCBzY3JhdGNoKTsKLSAg
ICAgICAgICAgIHN0b3JlMzIoc2NyYXRjaCwgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yKj4oZXhpdC5tX3ZhbHVlUHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQoMCkpLT5hc0JpdHMu
cGF5bG9hZCk7Ci0gICAgICAgICAgICBsb2FkMzIoc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaGFzS25vd25UYWcoKSkgewot
ICAgICAgICAgICAgc3RvcmUzMihJbW0zMihleGl0Lm1fanNWYWx1ZVNvdXJjZS50YWcoKSksICZi
aXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGV4aXQubV92YWx1ZVByb2ZpbGUt
PnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnRhZyk7Ci0gICAgICAgICAgICBzdG9yZTMyKGV4
aXQubV9qc1ZhbHVlU291cmNlLnBheWxvYWRHUFIoKSwgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yKj4oZXhpdC5tX3ZhbHVlUHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQoMCkpLT5h
c0JpdHMucGF5bG9hZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdG9yZTMyKGV4
aXQubV9qc1ZhbHVlU291cmNlLnRhZ0dQUigpLCAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IqPihleGl0Lm1fdmFsdWVQcm9maWxlLT5zcGVjRmFpbEJ1Y2tldCgwKSktPmFzQml0
cy50YWcpOwotICAgICAgICAgICAgc3RvcmUzMihleGl0Lm1fanNWYWx1ZVNvdXJjZS5wYXlsb2Fk
R1BSKCksICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGV4aXQubV92YWx1
ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnBheWxvYWQpOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIC8vIDQpIEZpZ3VyZSBvdXQgaG93IG1hbnkgc2NyYXRjaCBzbG90
cyB3ZSdsbCBuZWVkLiBXZSBuZWVkIG9uZSBmb3IgZXZlcnkgR1BSL0ZQUgotICAgIC8vICAgIHdo
b3NlIGRlc3RpbmF0aW9uIGlzIG5vdyBvY2N1cGllZCBieSBhIERGRyB2aXJ0dWFsIHJlZ2lzdGVy
LCBhbmQgd2UgbmVlZAotICAgIC8vICAgIG9uZSBmb3IgZXZlcnkgZGlzcGxhY2VkIHZpcnR1YWwg
cmVnaXN0ZXIgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbgotICAgIC8vICAgIEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzIG9mIHRoZW0uIEFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uc3RhbnRz
LAotICAgIC8vICAgIGFueSB1bmRlZmluZWQgc2xvdHMsIGFueSBGUFIgc2xvdHMsIGFuZCBhbnkg
dW5ib3hlZCBpbnRzLgotICAgICAgICAgICAgCi0gICAgVmVjdG9yPGJvb2w+IHBvaXNvbmVkVmly
dHVhbFJlZ2lzdGVycyhleGl0Lm1fdmFyaWFibGVzLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycy5zaXplKCk7ICsraSkKLSAgICAg
ICAgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2ldID0gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBu
dW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyA9IDA7Ci0gICAgdW5zaWduZWQgbnVtYmVy
T2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzID0gMDsKLSAgICAKLSAgICAvLyBCb29sZWFucyBm
b3IgZmFzdCBjaGVja3MuIFdlIGV4cGVjdCB0aGF0IG1vc3QgT1NSIGV4aXRzIGRvIG5vdCBoYXZl
IHRvIHJlYm94Ci0gICAgLy8gSW50MzJzLCBoYXZlIG5vIEZQUnMsIGFuZCBoYXZlIG5vIGNvbnN0
YW50cy4gSWYgdGhlcmUgYXJlIGNvbnN0YW50cywgd2UKLSAgICAvLyBleHBlY3QgbW9zdCBvZiB0
aGVtIHRvIGJlIGpzVW5kZWZpbmVkKCk7IGlmIHRoYXQncyB0cnVlIHRoZW4gd2UgaGFuZGxlIHRo
YXQKLSAgICAvLyBzcGVjaWFsbHkgdG8gbWluaW1pemUgY29kZSBzaXplIGFuZCBleGVjdXRpb24g
dGltZS4KLSAgICBib29sIGhhdmVVbmJveGVkSW50MzJJblJlZ2lzdGVyRmlsZSA9IGZhbHNlOwot
ICAgIGJvb2wgaGF2ZVVuYm94ZWRDZWxsSW5SZWdpc3RlckZpbGUgPSBmYWxzZTsKLSAgICBib29s
IGhhdmVVbmJveGVkQm9vbGVhbkluUmVnaXN0ZXJGaWxlID0gZmFsc2U7Ci0gICAgYm9vbCBoYXZl
RlBScyA9IGZhbHNlOwotICAgIGJvb2wgaGF2ZUNvbnN0YW50cyA9IGZhbHNlOwotICAgIGJvb2wg
aGF2ZVVuZGVmaW5lZCA9IGZhbHNlOwotICAgIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5k
ZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAg
ICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIERpc3Bs
YWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICAgICAgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFs
UmVnaXN0ZXJzKys7Ci0gICAgICAgICAgICBBU1NFUlQoKGludClyZWNvdmVyeS52aXJ0dWFsUmVn
aXN0ZXIoKSA+PSAwKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gU2VlIGlmIHdlIG1p
Z2h0IGxpa2UgdG8gc3RvcmUgdG8gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyIGJlZm9yZSBkb2luZwot
ICAgICAgICAgICAgLy8gdmlydHVhbCByZWdpc3RlciBzaHVmZmxpbmcuIElmIHNvLCB3ZSBzYXkg
dGhhdCB0aGUgdmlydHVhbCByZWdpc3RlcgotICAgICAgICAgICAgLy8gaXMgcG9pc29uZWQ6IGl0
IGNhbm5vdCBiZSBzdG9yZWQgdG8gdW50aWwgYWZ0ZXIgZGlzcGxhY2VkIHZpcnR1YWwKLSAgICAg
ICAgICAgIC8vIHJlZ2lzdGVycyBhcmUgaGFuZGxlZC4gV2UgdHJhY2sgcG9pc29uZWQgdmlydHVh
bCByZWdpc3RlciBjYXJlZnVsbHkKLSAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0aGlzIGhhcHBl
bnMgZWZmaWNpZW50bHkuIE5vdGUgdGhhdCB3ZSBleHBlY3QgdGhpcyBjYXNlCi0gICAgICAgICAg
ICAvLyB0byBiZSByYXJlLCBzbyB0aGUgaGFuZGxpbmcgb2YgaXQgaXMgb3B0aW1pemVkIGZvciB0
aGUgY2FzZXMgaW4KLSAgICAgICAgICAgIC8vIHdoaWNoIGl0IGRvZXMgbm90IGhhcHBlbi4KLSAg
ICAgICAgICAgIGlmIChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA8IChpbnQpZXhpdC5tX3Zh
cmlhYmxlcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4aXQubV92YXJpYWJs
ZXNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldLnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBJbkdQUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BS
OgotICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKLSAgICAgICAgICAg
ICAgICBjYXNlIEluUGFpcjoKLSAgICAgICAgICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAg
ICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFs
UmVnaXN0ZXIoKV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvaXNvbmVkVmlydHVhbFJl
Z2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMrKzsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgotICAgICAgICAgICAg
aGF2ZVVuYm94ZWRJbnQzMkluUmVnaXN0ZXJGaWxlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJv
eGVkQ2VsbDoKLSAgICAgICAgICAgIGhhdmVVbmJveGVkQ2VsbEluUmVnaXN0ZXJGaWxlID0gdHJ1
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQWxyZWFk
eUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQm9vbGVhbjoKLSAgICAgICAgICAgIGhhdmVVbmJveGVk
Qm9vbGVhbkluUmVnaXN0ZXJGaWxlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAgICBoYXZlRlBScyA9IHRydWU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENvbnN0YW50
OgotICAgICAgICAgICAgaGF2ZUNvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAocmVj
b3ZlcnkuY29uc3RhbnQoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIGhhdmVVbmRl
ZmluZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoQnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFs
dWUqPihnbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgKiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMgKyAoKG51bWJlck9mRGlz
cGxhY2VkVmlydHVhbFJlZ2lzdGVycyAqIDIpIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
ID8gMCA6IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykpKSk7Ci0KLSAgICAvLyBG
cm9tIGhlcmUgb24sIHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpdCBpcyBwcm9maXRhYmxlIHRvIG1h
eGltaXplIHRoZSBkaXN0YW5jZQotICAgIC8vIGJldHdlZW4gd2hlbiBzb21ldGhpbmcgaXMgY29t
cHV0ZWQgYW5kIHdoZW4gaXQgaXMgc3RvcmVkLgotICAgIAotICAgIC8vIDUpIFBlcmZvcm0gYWxs
IHJlYm94aW5nIG9mIGludGVnZXJzIGFuZCBjZWxscywgZXhjZXB0IGZvciB0aG9zZSBpbiByZWdp
c3RlcnMuCi0KLSAgICBpZiAoaGF2ZVVuYm94ZWRJbnQzMkluUmVnaXN0ZXJGaWxlIHx8IGhhdmVV
bmJveGVkQ2VsbEluUmVnaXN0ZXJGaWxlIHx8IGhhdmVVbmJveGVkQm9vbGVhbkluUmVnaXN0ZXJG
aWxlKSB7Ci0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9m
UmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5
JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICBzd2l0
Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFscmVhZHlJblJl
Z2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgotICAgICAgICAgICAgICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4oZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZENl
bGw6Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZvcklu
ZGV4KGluZGV4KSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2Fz
ZSBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRCb29sZWFuOgotICAgICAgICAgICAgICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YWdGb3Ioc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyA2
KSBEdW1wIGFsbCBub24tcG9pc29uZWQgR1BScy4gRm9yIHBvaXNvbmVkIEdQUnMsIHNhdmUgdGhl
bSBpbnRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UuCi0gICAgLy8gICAgTm90ZSB0aGF0IEdQUnMgZG8g
bm90IGhhdmUgYSBmYXN0IGNoYW5nZSAobGlrZSBoYXZlRlBScykgYmVjYXVzZSB3ZSBleHBlY3Qg
dGhhdAotICAgIC8vICAgIG1vc3QgT1NSIGZhaWx1cmUgcG9pbnRzIHdpbGwgaGF2ZSBhdCBsZWFz
dCBvbmUgR1BSIHRoYXQgbmVlZHMgdG8gYmUgZHVtcGVkLgotICAgIAotICAgIHVuc2lnbmVkIHNj
cmF0Y2hJbmRleCA9IDA7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVt
YmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICBpbnQgb3Bl
cmFuZCA9IGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KTsKLSAgICAgICAgc3dpdGNoIChyZWNv
dmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIEluR1BSOgotICAgICAgICBjYXNlIFVu
Ym94ZWRJbnQzMkluR1BSOgotICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6Ci0gICAg
ICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCi0gICAgICAgICAgICAgICAgc3Rv
cmUzMihyZWNvdmVyeS5ncHIoKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZl
ciArIHNjcmF0Y2hJbmRleCsrKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgdWludDMyX3QgdGFnID0gSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZzsKLSAgICAgICAgICAgICAg
ICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gSW5HUFIpCi0gICAgICAgICAgICAgICAgICAg
IHRhZyA9IEpTVmFsdWU6OkNlbGxUYWc7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVjb3Zl
cnkudGVjaG5pcXVlKCkgPT0gVW5ib3hlZEludDMySW5HUFIpCi0gICAgICAgICAgICAgICAgICAg
IHRhZyA9IEpTVmFsdWU6OkludDMyVGFnOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgdGFnID0gSlNWYWx1ZTo6Qm9vbGVhblRhZzsKLSAgICAgICAgICAgICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMih0YWcpLCB0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5k
KSk7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihyZWNvdmVyeS5ncHIoKSwgcGF5bG9hZEZvcigo
VmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEluUGFpcjoKLSAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFi
bGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5k
ZXgoaW5kZXgpXSkgewotICAgICAgICAgICAgICAgIHN0b3JlMzIocmVjb3ZlcnkudGFnR1BSKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAg
ICAgICAgICAgICAgICBzdG9yZTMyKHJlY292ZXJ5LnBheWxvYWRHUFIoKSwgcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICAgICAgICAg
ICAgICBzY3JhdGNoSW5kZXgrKzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgc3RvcmUzMihyZWNvdmVyeS50YWdHUFIoKSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3Bl
cmFuZCkpOwotICAgICAgICAgICAgICAgIHN0b3JlMzIocmVjb3ZlcnkucGF5bG9hZEdQUigpLCBw
YXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBBdCB0aGlzIHBvaW50IGFsbCBHUFJzIGFyZSBh
dmFpbGFibGUgZm9yIHNjcmF0Y2ggdXNlLgotICAgIAotICAgIGlmIChoYXZlRlBScykgewotICAg
ICAgICAvLyA3KSBCb3ggYWxsIGRvdWJsZXMgKHJlbGllcyBvbiB0aGVyZSBiZWluZyBtb3JlIEdQ
UnMgdGhhbiBGUFJzKQotICAgICAgICAvLyAgICBGb3IgSlNWYWx1ZTMyXzY0LCBubyBuZWVkIHRv
IGJveCBkb3VibGVzLgotICAgICAgICAKLSAgICAgICAgLy8gOCkgRHVtcCBhbGwgZG91YmxlcyBp
bnRvIHRoZSByZWdpc3RlciBmaWxlLCBvciB0byB0aGUgc2NyYXRjaCBzdG9yYWdlIGlmCi0gICAg
ICAgIC8vICAgIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIHJlZ2lzdGVyIGlzIHBvaXNvbmVkLgot
ICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVy
T2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zl
cnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgIGlm
IChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmly
dHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkKLSAgICAgICAgICAg
ICAgICBzdG9yZURvdWJsZShyZWNvdmVyeS5mcHIoKSwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJ
bmRleCsrKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdG9yZURvdWJsZShy
ZWNvdmVyeS5mcHIoKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZv
ckluZGV4KGluZGV4KSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChzY3Jh
dGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOwotICAgIAotICAg
IC8vIDkpIFJlc2h1ZmZsZSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMuIE9wdGltaXplIGZv
ciB0aGUgY2FzZSB0aGF0Ci0gICAgLy8gICAgdGhlIG51bWJlciBvZiBkaXNwbGFjZWQgdmlydHVh
bCByZWdpc3RlcnMgaXMgbm90IG1vcmUgdGhhbiB0aGUgbnVtYmVyCi0gICAgLy8gICAgb2YgYXZh
aWxhYmxlIHBoeXNpY2FsIHJlZ2lzdGVycy4KLSAgICAKLSAgICBpZiAobnVtYmVyT2ZEaXNwbGFj
ZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7Ci0gICAgICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1
YWxSZWdpc3RlcnMgKiAyIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKSB7Ci0gICAgICAg
ICAgICAvLyBTbyBmYXIgdGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBjYXNlIHRoYXQgdHJpZ2dlcnMg
YWxsIHRoZSB0aW1lLCBidXQKLSAgICAgICAgICAgIC8vIHRoYXQgaXMgZmFyIGZyb20gZ3VhcmFu
dGVlZC4KLSAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRleCA9
IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJP
ZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAg
ICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUp
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGxvYWQzMihw
YXlsb2FkRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3Rl
cihkaXNwbGFjZW1lbnRJbmRleCsrKSk7Ci0gICAgICAgICAgICAgICAgbG9hZDMyKHRhZ0Zvcihy
ZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2Vt
ZW50SW5kZXgrKykpOwotICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgIGRpc3Bs
YWNlbWVudEluZGV4ID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgp
OwotICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgc3RvcmUzMihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBw
YXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7
Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVu
dEluZGV4KyspLCB0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChp
bmRleCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIHNodWZmbGluZyBhbGdvcml0aG0gdGhhdCB3ZSB1
c2UKLSAgICAgICAgICAgIC8vIGZvciBzcGVjdWxhdGl2ZS0+bm9uLXNwZWN1bGF0aXZlIGp1bXBz
LCBpZiB3ZSBldmVyIGRpc2NvdmVyIHRoYXQKLSAgICAgICAgICAgIC8vIHNvbWUgaG90IGNvZGUg
d2l0aCBsb3RzIG9mIGxpdmUgdmFsdWVzIHRoYXQgZ2V0IGRpc3BsYWNlZCBhbmQKLSAgICAgICAg
ICAgIC8vIHNwaWxsZWQgcmVhbGx5IGVuam95cyBmcmVxdWVudGx5IGZhaWxpbmcgc3BlY3VsYXRp
b24uCi0gICAgICAgIAotICAgICAgICAgICAgLy8gRm9yIG5vdyB0aGlzIGNvZGUgaXMgZW5naW5l
ZXJlZCB0byBiZSBjb3JyZWN0IGJ1dCBwcm9iYWJseSBub3QKLSAgICAgICAgICAgIC8vIHN1cGVy
LiBJbiBwYXJ0aWN1bGFyLCBpdCBjb3JyZWN0bHkgaGFuZGxlcyBjYXNlcyB3aGVyZSBmb3IgZXhh
bXBsZQotICAgICAgICAgICAgLy8gdGhlIGRpc3BsYWNlbWVudHMgYXJlIGEgcGVybXV0YXRpb24g
b2YgdGhlIGRlc3RpbmF0aW9uIHZhbHVlcywgbGlrZQotICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgIC8vIDEgLT4gMgotICAgICAgICAgICAgLy8gMiAtPiAxCi0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gSXQgYWNjb21wbGlzaGVzIHRoaXMgYnkgc2ltcGx5IGxpZnRpbmcgYWxsIG9m
IHRoZSB2aXJ0dWFsIHJlZ2lzdGVycwotICAgICAgICAgICAgLy8gZnJvbSB0aGVpciBvbGQgKERG
RyBKSVQpIGxvY2F0aW9ucyBhbmQgZHJvcHBpbmcgdGhlbSBpbiBhIHNjcmF0Y2gKLSAgICAgICAg
ICAgIC8vIGxvY2F0aW9uIGluIG1lbW9yeSwgYW5kIHRoZW4gdHJhbnNmZXJyaW5nIGZyb20gdGhh
dCBzY3JhdGNoIGxvY2F0aW9uCi0gICAgICAgICAgICAvLyB0byB0aGVpciBuZXcgKG9sZCBKSVQp
IGxvY2F0aW9ucy4KLSAgICAgICAgCi0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGlu
ZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAg
ICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGlu
ZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxh
Y2VkSW5SZWdpc3RlckZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwg
R1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIGxvYWQzMih0YWdGb3IocmVjb3Zlcnku
dmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICAgICAgc3Rv
cmUzMihHUFJJbmZvOjpyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZl
ciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICAgICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJl
Z1QxLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7
Ci0gICAgICAgICAgICAgICAgc2NyYXRjaEluZGV4Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICAgICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnM7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1i
ZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAg
ICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZp
bGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGxvYWQz
MihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCks
IEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICBsb2FkMzIocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZyksIEdQUkluZm86OnJlZ1QxKTsKLSAg
ICAgICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBwYXlsb2FkRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAg
c3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVy
YW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgc2NyYXRjaEluZGV4Kys7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2hJbmRleCA9
PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyArIG51bWJlck9mRGlzcGxhY2VkVmly
dHVhbFJlZ2lzdGVycyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gMTApIER1bXAg
YWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXJzLgotICAgIAotICAgIHNjcmF0Y2hJbmRleCA9
IDA7Ci0gICAgaWYgKG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7Ci0gICAgICAg
IGZvciAoaW50IHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IChpbnQpZXhp
dC5tX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7Ci0gICAgICAgICAgICBp
ZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1t2aXJ0dWFsUmVnaXN0ZXJdKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IGV4aXQubV92YXJpYWJsZXNbdmlydHVhbFJlZ2lzdGVyXTsKLSAg
ICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgSW5HUFI6Ci0gICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICAg
ICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOiB7Ci0gICAgICAgICAgICAgICAgbG9hZDMyKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKykgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpLCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwg
cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOwotICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHRhZyA9IEpTVmFsdWU6OkVtcHR5VmFsdWVUYWc7Ci0gICAgICAgICAg
ICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IEluR1BSKQotICAgICAgICAgICAgICAg
ICAgICB0YWcgPSBKU1ZhbHVlOjpDZWxsVGFnOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJl
Y292ZXJ5LnRlY2huaXF1ZSgpID09IFVuYm94ZWRJbnQzMkluR1BSKQotICAgICAgICAgICAgICAg
ICAgICB0YWcgPSBKU1ZhbHVlOjpJbnQzMlRhZzsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkJvb2xlYW5UYWc7Ci0gICAgICAgICAgICAg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIodGFnKSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpdmly
dHVhbFJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAgICBjYXNlIEluUGFpcjoKLSAgICAg
ICAgICAgICAgICBsb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciAr
IHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgbG9hZDMy
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpLCBHUFJJ
bmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgcGF5
bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOwotICAgICAgICAgICAg
ICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIHRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1
YWxSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIHNjcmF0Y2hJbmRleCsrOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAg
ICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJz
KTsKLSAgICAKLSAgICAvLyAxMSkgRHVtcCBhbGwgY29uc3RhbnRzLiBPcHRpbWl6ZSBmb3IgVW5k
ZWZpbmVkLCBzaW5jZSB0aGF0J3MgYSBjb25zdGFudCB3ZSBzZWUKLSAgICAvLyAgICAgb2Z0ZW4u
Ci0KLSAgICBpZiAoaGF2ZUNvbnN0YW50cykgewotICAgICAgICBpZiAoaGF2ZVVuZGVmaW5lZCkg
ewotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS5wYXlsb2FkKCkp
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihqc1VuZGVm
aW5lZCgpLnRhZygpKSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMo
KTsgKytpbmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zlcnkg
PSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpICE9IENvbnN0YW50KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmluZWQoKSkgewotICAgICAgICAg
ICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rl
cilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICBzdG9yZTMy
KEdQUkluZm86OnJlZ1QxLCB0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJ
bmRleChpbmRleCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS5wYXlsb2FkKCkpLCBwYXlsb2Fk
Rm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAg
ICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS50YWco
KSksIHRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIDEyKSBBZGp1
c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0aW5nIE9T
Uiwgd2Uga25vdwotICAgIC8vICAgICB0aGF0IGFsbCBuZXcgY2FsbHMgaW50byB0aGlzIGNvZGUg
d2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1dGUKLSAgICAvLyAgICAgY291bnRl
ciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5kIGNh
bGwgZnJhbWVzCi0gICAgLy8gICAgIHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9sZCBK
SVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MKLSAgICAvLyAgICAgT1NSIGV4
aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgotICAgIC8v
Ci0gICAgLy8gICAgIChhKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBnZXRzIGEgY2hh
bmNlIHRvIHJlZW50ZXIgb3B0aW1pemVkCi0gICAgLy8gICAgICAgICBjb2RlIGV2ZW50dWFsbHks
IHNpbmNlIG9wdGltaXplZCBjb2RlIGlzIGZhc3Rlci4gQnV0IHdlIGRvbid0Ci0gICAgLy8gICAg
ICAgICB3YW50IHRvIGRvIHN1Y2ggcmVlbnRlcnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChjKSBi
ZWxvdykuCi0gICAgLy8KLSAgICAvLyAgICAgKGIpIElmIHRoZXJlIGlzIGNvZGUgb24gdGhlIGNh
bGwgc3RhY2sgdGhhdCBpcyBzdGlsbCBydW5uaW5nIHRoZSBvbGQKLSAgICAvLyAgICAgICAgIEpJ
VCdzIGNvZGUgYW5kIGhhcyBuZXZlciBPU1InZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNl
IHRvCi0gICAgLy8gICAgICAgICBwZXJmb3JtIE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRo
YXQgd2UndmUgZXhpdGVkLgotICAgIC8vCi0gICAgLy8gICAgIChjKSBDb2RlIHRoZSBwZXJmb3Jt
cyBhbiBPU1IgZXhpdCBzaG91bGQgbm90IGltbWVkaWF0ZWx5IHJldHJ5IE9TUgotICAgIC8vICAg
ICAgICAgZW50cnksIHNpbmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBl
bnRyeSBpcwotICAgIC8vICAgICAgICAgcGFydGljdWxhcmx5IGV4cGVuc2l2ZS4KLSAgICAvLwot
ICAgIC8vICAgICAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8g
bm90IHJlc3VsdCBpbiB0aGUgY29kZQotICAgIC8vICAgICAgICAgcnVubmluZyBpbiBhIGhvdCBs
b29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KLSAgICAvLwot
ICAgIC8vICAgICBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNv
dW50ZXIgdG8KLSAgICAvLyAgICAgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgp
LiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgZW5kYW5nZXIKLSAgICAvLyAgICAgKGEpIGFuZCAo
YiksIHNpbmNlIHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5
IGZvcgotICAgIC8vICAgICBldmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZvcm0gT1NSIGVudHJ5LiBF
c3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFwcGVucwotICAgIC8vICAgICBmcmVxdWVudGx5IGFu
ZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVy
Ci0gICAgLy8gICAgIGJlY29tZSBub24tbmVnYXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVy
IGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5Ci0gICAgLy8gICAgIHdpbGwgb25seSBoYXBwZW4gaWYg
YSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5Ci0gICAg
Ly8gICAgIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0
IHRha2UgY2FyZSBvZiAoZCksCi0gICAgLy8gICAgIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFp
bHVyZSB3b3VsZCByZXNldCB0aGUgZXhlY3V0ZSBjb3VudGVyLgotICAgIC8vICAgICBTbyB3ZSBj
aGVjayBoZXJlIGlmIHRoZSBudW1iZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlm
aWNhbnRseQotICAgIC8vICAgICBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAo
d2Ugd2FudCA5MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlmCi0gICAgLy8gICAgIHRoZXJlIGhhdmUg
YmVlbiBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhl
Ci0gICAgLy8gICAgIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0
bwotICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCi0gICAg
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOwot
ICAgIAotICAgIGxvYWQzMihBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNl
dE9mU3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgIGxvYWQz
MihBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVT
dWNjZXNzQ291bnRlcigpKSwgR1BSSW5mbzo6cmVnVDEpOwotICAgIGFkZDMyKEltbTMyKDEpLCBH
UFJJbmZvOjpyZWdUMik7Ci0gICAgYWRkMzIoSW1tMzIoLTEpLCBHUFJJbmZvOjpyZWdUMSk7Ci0g
ICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMiwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSkpOwotICAgIHN0b3JlMzIoR1BS
SW5mbzo6cmVnVDEsIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZT
cGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgCi0g
ICAgSnVtcCBmZXdGYWlscyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIs
IEltbTMyKGNvZGVCbG9jaygpLT5sYXJnZUZhaWxDb3VudFRocmVzaG9sZCgpKSk7Ci0gICAgbXVs
MzIoSW1tMzIoSGV1cmlzdGljczo6ZGVzaXJlZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxSYXRpbyks
IEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgCi0gICAgSnVtcCBsb3dGYWls
UmF0ZSA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJl
Z1QxKTsKLSAgICAKLSAgICAvLyBSZW9wdGltaXplIGFzIHNvb24gYXMgcG9zc2libGUuCi0gICAg
c3RvcmUzMihJbW0zMihIZXVyaXN0aWNzOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkV4ZWN1dGVDb3VudGVyKCkpKTsKLSAgICBKdW1wIGRvbmVBZGp1c3RpbmcgPSBqdW1wKCk7
Ci0gICAgCi0gICAgZmV3RmFpbHMubGluayh0aGlzKTsKLSAgICBsb3dGYWlsUmF0ZS5saW5rKHRo
aXMpOwotICAgIAotICAgIHN0b3JlMzIoSW1tMzIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkt
PmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpLCBBZGRyZXNzKEdQUklu
Zm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNvdW50ZXIoKSkpOwotICAgIAot
ICAgIGRvbmVBZGp1c3RpbmcubGluayh0aGlzKTsKLSAgICAKLSAgICAvLyAxMykgTG9hZCB0aGUg
cmVzdWx0IG9mIHRoZSBsYXN0IGJ5dGVjb2RlIG9wZXJhdGlvbiBpbnRvIHJlZ1QwLgotICAgIAot
ICAgIGlmIChleGl0Lm1fbGFzdFNldE9wZXJhbmQgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKSkgewotICAgICAgICBsb2FkMzIocGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKWV4
aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKLSAg
ICAgICAgbG9hZDMyKHRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFu
ZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7Ci0gICAgfQotICAgIAotICAgIC8v
IDE0KSBGaXggY2FsbCBmcmFtZSAocykuCi0gICAgCi0gICAgQVNTRVJUKGNvZGVCbG9jaygpLT5h
bHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBhZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKTsKLSAgICAK
LSAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyBjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZXIpIHsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pOwotICAgICAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3IoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpOwotICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVB
bmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBkZWNvZGVkQ29kZU1hcEZvcihiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlcik7Ci0gICAgICAgIHVuc2lnbmVkIHJldHVybkJ5dGVjb2Rl
SW5kZXggPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xF
TkdUSChvcF9jYWxsKTsKLSAgICAgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5n
ID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVn
aW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCByZXR1cm5CeXRlY29kZUluZGV4KTsKLSAgICAg
ICAgCi0gICAgICAgIEFTU0VSVChtYXBwaW5nKTsKLSAgICAgICAgQVNTRVJUKG1hcHBpbmctPm1f
Ynl0ZWNvZGVJbmRleCA9PSByZXR1cm5CeXRlY29kZUluZGV4KTsKLSAgICAgICAgCi0gICAgICAg
IHZvaWQqIGp1bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldEpJVENvZGUoKS5z
dGFydCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOwotCi0gICAgICAgIEdQUlJl
ZyBjYWxsZXJGcmFtZUdQUjsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlu
bGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgYWRkMzIoSW1tMzIoaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDMpOwotICAg
ICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpyZWdUMzsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
OwotICAgICAgICAKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVC
bG9jayksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKSkpOwotICAgICAgICBzdG9yZTMyKElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpKTsKLSAgICAg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS0+c2NvcGUo
KSksIHBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpKTsKLSAgICAgICAgc3RvcmUzMihJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lKSkpOwotICAgICAg
ICBzdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgcGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSkp
KTsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgcGF5bG9hZEZv
cigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0
ZXJGaWxlOjpSZXR1cm5QQykpKTsKLSAgICAgICAgc3RvcmUzMihJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZyksIHRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSkpOwotICAgICAgICBzdG9yZTMyKElt
bTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSksIHBheWxvYWRGb3IoKFZpcnR1
YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6
QXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgc3RvcmUzMihJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBSZWdpc3RlckZpbGU6OkNhbGxlZSkpKTsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSksIHBheWxvYWRGb3IoKFZpcnR1YWxSZWdp
c3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVl
KSkpOwotICAgIH0KLSAgICAKLSAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKQotICAgICAgICBhZGRQdHIoSW1tMzIoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3Rlcik7Ci0KLSAgICAvLyAxNSkgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5n
IGJhc2VsaW5lIEpJVCBjb2RlLgotICAgIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7Ci0gICAgVmVjdG9y
PEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gZGVjb2RlZENvZGVN
YXBGb3IoYmFzZWxpbmVDb2RlQmxvY2spOwotICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVu
c2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29k
ZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgCi0gICAgQVNTRVJUKG1hcHBpbmcpOwotICAgIEFTU0VS
VChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgCi0gICAgdm9pZCoganVtcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihiYXNlbGluZUNvZGVCbG9jay0+Z2V0SklU
Q29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7Ci0gICAgCi0g
ICAgQVNTRVJUKEdQUkluZm86OnJlZ1QyICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVy
ICYmIEdQUkluZm86OnJlZ1QyICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7Ci0g
ICAgCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJbmZvOjpyZWdUMik7
Ci0gICAganVtcChHUFJJbmZvOjpyZWdUMik7Ci0KLSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCi0gICAgZnByaW50ZihzdGRlcnIsICIgICAtPiAlcFxuIiwganVtcFRhcmdldCk7Ci0jZW5k
aWYKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYKLSNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlz
aW9uIDk5NTQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJERkdPU1JF
eGl0Q29tcGlsZXIuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZH
UmVnaXN0ZXJCYW5rLmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKQEAgLTQwLDEy
ICs0MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgSklUQ29t
cGlsZXI6OmxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYgc3BlY3VsYXRpdmUpCiB7CisgICAg
T1NSRXhpdENvbXBpbGVyIG9zckV4aXRDb21waWxlcigqdGhpcyk7CisgICAgCiAgICAgT1NSRXhp
dFZlY3Rvcjo6SXRlcmF0b3IgZXhpdHNJdGVyID0gc3BlY3VsYXRpdmUub3NyRXhpdHMoKS5iZWdp
bigpOwogICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJhdG9yIGV4aXRzRW5kID0gc3BlY3VsYXRpdmUu
b3NyRXhpdHMoKS5lbmQoKTsKICAgICAKICAgICB3aGlsZSAoZXhpdHNJdGVyICE9IGV4aXRzRW5k
KSB7CiAgICAgICAgIGNvbnN0IE9TUkV4aXQmIGV4aXQgPSAqZXhpdHNJdGVyOwotICAgICAgICBl
eGl0U3BlY3VsYXRpdmVXaXRoT1NSKGV4aXQsIHNwZWN1bGF0aXZlLnNwZWN1bGF0aW9uUmVjb3Zl
cnkoZXhpdC5tX3JlY292ZXJ5SW5kZXgpKTsKKyAgICAgICAgb3NyRXhpdENvbXBpbGVyLmNvbXBp
bGVFeGl0KGV4aXQsIHNwZWN1bGF0aXZlLnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5tX3JlY292
ZXJ5SW5kZXgpKTsKICAgICAgICAgKytleGl0c0l0ZXI7CiAgICAgfQogfQpAQCAtMjc1LDUzMSAr
Mjc4LDYgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogICAgIGVu
dHJ5ID0gSklUQ29kZShsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpLCBKSVRDb2RlOjpERkdKSVQp
OwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLQotdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1
bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVjdWxhdGlvblJlY292ZXJ5KiBy
ZWNvdmVyeSkKLXsKLSAgICAvLyAxKSBQcm8tZm9ybWEgc3R1ZmYuCi0gICAgZXhpdC5tX2NoZWNr
LmxpbmsodGhpcyk7Ci0KLSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZnByaW50
ZihzdGRlcnIsICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQgKCIsIChpbnQpZXhpdC5tX25vZGVJbmRl
eCk7Ci0gICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsg
OyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgewotICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgImJjIyV1IiwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsK
LSAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiAlcCAiLCBjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7Ci0gICAgfQotICAgIGZwcmludGYoc3RkZXJy
LCAiKSBhdCBKSVQgb2Zmc2V0IDB4JXggICIsIGRlYnVnT2Zmc2V0KCkpOwotICAgIGV4aXQuZHVt
cChzdGRlcnIpOwotI2VuZGlmCi0jaWYgREZHX0VOQUJMRShWRVJCT1NFX1NQRUNVTEFUSU9OX0ZB
SUxVUkUpCi0gICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvKiBkZWJ1Z0luZm8gPSBuZXcg
U3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvOwotICAgIGRlYnVnSW5mby0+Y29kZUJsb2NrID0g
bV9jb2RlQmxvY2s7Ci0gICAgZGVidWdJbmZvLT5kZWJ1Z09mZnNldCA9IGRlYnVnT2Zmc2V0KCk7
Ci0gICAgCi0gICAgZGVidWdDYWxsKGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1
cmUsIGRlYnVnSW5mbyk7Ci0jZW5kaWYKLSAgICAKLSNpZiBERkdfRU5BQkxFKEpJVF9CUkVBS19P
Tl9TUEVDVUxBVElPTl9GQUlMVVJFKQotICAgIGJyZWFrcG9pbnQoKTsKLSNlbmRpZgotICAgIAot
I2lmIERGR19FTkFCTEUoU1VDQ0VTU19TVEFUUykKLSAgICBzdGF0aWMgU2FtcGxpbmdDb3VudGVy
IGNvdW50ZXIoIlNwZWN1bGF0aW9uRmFpbHVyZSIpOwotICAgIGVtaXRDb3VudChjb3VudGVyKTsK
LSNlbmRpZgotICAgIAotICAgIC8vIDIpIFBlcmZvcm0gc3BlY3VsYXRpb24gcmVjb3ZlcnkuIFRo
aXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBhbiBvcGVyYXRpb24KLSAgICAvLyAgICBzdGFy
dHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlmeWluZyB0aGUgc3BlY3VsYXRpb24gaXQgaGFz
IGFscmVhZHkgbWFkZS4KLSAgICAKLSAgICBHUFJSZWcgYWxyZWFkeUJveGVkID0gSW52YWxpZEdQ
UlJlZzsKLSAgICAKLSAgICBpZiAocmVjb3ZlcnkpIHsKLSAgICAgICAgc3dpdGNoIChyZWNvdmVy
eS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGQ6Ci0gICAgICAgICAgICBz
dWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5LT5kZXN0KCkpOwotICAgICAgICAgICAgb3JQ
dHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS0+ZGVzdCgpKTsKLSAg
ICAgICAgICAgIGFscmVhZHlCb3hlZCA9IHJlY292ZXJ5LT5kZXN0KCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNr
OgotICAgICAgICAgICAgeG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihW
YWx1ZUZhbHNlKSksIHJlY292ZXJ5LT5kZXN0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gMykgUmVmaW5lIHNvbWUgdmFsdWUgcHJvZmlsZSwgaWYgYXBwcm9w
cmlhdGUuCi0gICAgCi0gICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UgJiYgISFleGl0Lm1f
dmFsdWVQcm9maWxlKSB7Ci0gICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJl
c3MoKSkgewotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgYmUgc3VyZSB0aGF0IHdlIGhhdmUgYSBz
cGFyZSByZWdpc3Rlci4gU28gdXNlIHRoZSB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsCi0gICAgICAg
ICAgICAvLyBzaW5jZSB3ZSBrbm93IGhvdyB0byByZXN0b3JlIGl0LgotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGV4aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgZXhpdC5tX3ZhbHVlUHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQo
MCkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4o
VGFnVHlwZU51bWJlcikpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHN0b3JlUHRyKGV4aXQubV9qc1ZhbHVlU291cmNlLmdwcigp
LCBleGl0Lm1fdmFsdWVQcm9maWxlLT5zcGVjRmFpbEJ1Y2tldCgwKSk7Ci0gICAgfQotCi0gICAg
Ly8gNCkgRmlndXJlIG91dCBob3cgbWFueSBzY3JhdGNoIHNsb3RzIHdlJ2xsIG5lZWQuIFdlIG5l
ZWQgb25lIGZvciBldmVyeSBHUFIvRlBSCi0gICAgLy8gICAgd2hvc2UgZGVzdGluYXRpb24gaXMg
bm93IG9jY3VwaWVkIGJ5IGEgREZHIHZpcnR1YWwgcmVnaXN0ZXIsIGFuZCB3ZSBuZWVkCi0gICAg
Ly8gICAgb25lIGZvciBldmVyeSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlciBpZiB0aGVyZSBh
cmUgbW9yZSB0aGFuCi0gICAgLy8gICAgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgb2YgdGhl
bS4gQWxzbyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25zdGFudHMsCi0gICAgLy8gICAgYW55IHVu
ZGVmaW5lZCBzbG90cywgYW55IEZQUiBzbG90cywgYW5kIGFueSB1bmJveGVkIGludHMuCi0gICAg
ICAgICAgICAKLSAgICBWZWN0b3I8Ym9vbD4gcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKGV4aXQu
bV92YXJpYWJsZXMuc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzLnNpemUoKTsgKytpKQotICAgICAgICBwb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnNbaV0gPSBmYWxzZTsKLQotICAgIHVuc2lnbmVkIG51bWJlck9mUG9pc29uZWRWaXJ0
dWFsUmVnaXN0ZXJzID0gMDsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxS
ZWdpc3RlcnMgPSAwOwotICAgIAotICAgIC8vIEJvb2xlYW5zIGZvciBmYXN0IGNoZWNrcy4gV2Ug
ZXhwZWN0IHRoYXQgbW9zdCBPU1IgZXhpdHMgZG8gbm90IGhhdmUgdG8gcmVib3gKLSAgICAvLyBJ
bnQzMnMsIGhhdmUgbm8gRlBScywgYW5kIGhhdmUgbm8gY29uc3RhbnRzLiBJZiB0aGVyZSBhcmUg
Y29uc3RhbnRzLCB3ZQotICAgIC8vIGV4cGVjdCBtb3N0IG9mIHRoZW0gdG8gYmUganNVbmRlZmlu
ZWQoKTsgaWYgdGhhdCdzIHRydWUgdGhlbiB3ZSBoYW5kbGUgdGhhdAotICAgIC8vIHNwZWNpYWxs
eSB0byBtaW5pbWl6ZSBjb2RlIHNpemUgYW5kIGV4ZWN1dGlvbiB0aW1lLgotICAgIGJvb2wgaGF2
ZVVuYm94ZWRJbnQzMnMgPSBmYWxzZTsKLSAgICBib29sIGhhdmVGUFJzID0gZmFsc2U7Ci0gICAg
Ym9vbCBoYXZlQ29uc3RhbnRzID0gZmFsc2U7Ci0gICAgYm9vbCBoYXZlVW5kZWZpbmVkID0gZmFs
c2U7Ci0gICAgCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICBzd2l0Y2ggKHJlY292
ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVy
RmlsZToKLSAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAg
ICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgICAgIG51bWJlck9mRGlz
cGxhY2VkVmlydHVhbFJlZ2lzdGVycysrOwotICAgICAgICAgICAgQVNTRVJUKChpbnQpcmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkgPj0gMCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IFNlZSBpZiB3ZSBtaWdodCBsaWtlIHRvIHN0b3JlIHRvIHRoaXMgdmlydHVhbCByZWdpc3RlciBi
ZWZvcmUgZG9pbmcKLSAgICAgICAgICAgIC8vIHZpcnR1YWwgcmVnaXN0ZXIgc2h1ZmZsaW5nLiBJ
ZiBzbywgd2Ugc2F5IHRoYXQgdGhlIHZpcnR1YWwgcmVnaXN0ZXIKLSAgICAgICAgICAgIC8vIGlz
IHBvaXNvbmVkOiBpdCBjYW5ub3QgYmUgc3RvcmVkIHRvIHVudGlsIGFmdGVyIGRpc3BsYWNlZCB2
aXJ0dWFsCi0gICAgICAgICAgICAvLyByZWdpc3RlcnMgYXJlIGhhbmRsZWQuIFdlIHRyYWNrIHBv
aXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXIgY2FyZWZ1bGx5Ci0gICAgICAgICAgICAvLyB0byBlbnN1
cmUgdGhpcyBoYXBwZW5zIGVmZmljaWVudGx5LiBOb3RlIHRoYXQgd2UgZXhwZWN0IHRoaXMgY2Fz
ZQotICAgICAgICAgICAgLy8gdG8gYmUgcmFyZSwgc28gdGhlIGhhbmRsaW5nIG9mIGl0IGlzIG9w
dGltaXplZCBmb3IgdGhlIGNhc2VzIGluCi0gICAgICAgICAgICAvLyB3aGljaCBpdCBkb2VzIG5v
dCBoYXBwZW4uCi0gICAgICAgICAgICBpZiAocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAo
aW50KWV4aXQubV92YXJpYWJsZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChl
eGl0Lm1fdmFyaWFibGVzW3JlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpXS50ZWNobmlxdWUoKSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgSW5HUFI6Ci0gICAgICAgICAgICAgICAgY2FzZSBVbmJv
eGVkSW50MzJJbkdQUjoKLSAgICAgICAgICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAgICAg
ICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVn
aXN0ZXIoKV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMrKzsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmls
ZUFzVW5ib3hlZEludDMyOgotICAgICAgICAgICAgaGF2ZVVuYm94ZWRJbnQzMnMgPSB0cnVlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBJbkZQUjoKLSAg
ICAgICAgICAgIGhhdmVGUFJzID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQ29uc3RhbnQ6Ci0gICAgICAgICAgICBoYXZlQ29uc3RhbnRzID0g
dHJ1ZTsKLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkp
Ci0gICAgICAgICAgICAgICAgaGF2ZVVuZGVmaW5lZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0jaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAg
IGZwcmludGYoc3RkZXJyLCAiICAiKTsKLSAgICBpZiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnMpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiUG9pc29uZWQ9JXUgIiwgbnVtYmVy
T2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOwotICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZp
cnR1YWxSZWdpc3RlcnMpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRGlzcGxhY2VkPSV1ICIs
IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyk7Ci0gICAgaWYgKGhhdmVVbmJveGVk
SW50MzJzKQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYm94ZWRJbnQzMiAiKTsKLSAgICBp
ZiAoaGF2ZUZQUnMpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRlBSICIpOwotICAgIGlmICho
YXZlQ29uc3RhbnRzKQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbnN0YW50cyAiKTsKLSAg
ICBpZiAoaGF2ZVVuZGVmaW5lZCkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmRlZmluZWQg
Iik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIgIik7Ci0jZW5kaWYKLSAgICAKLSAgICBFbmNvZGVk
SlNWYWx1ZSogc2NyYXRjaEJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oZ2xv
YmFsRGF0YSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICog
KG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgKG51bWJlck9mRGlzcGxhY2VkVmly
dHVhbFJlZ2lzdGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA/IDAgOiBudW1iZXJP
ZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpKSkpOwotCi0gICAgLy8gRnJvbSBoZXJlIG9uLCB0
aGUgY29kZSBhc3N1bWVzIHRoYXQgaXQgaXMgcHJvZml0YWJsZSB0byBtYXhpbWl6ZSB0aGUgZGlz
dGFuY2UKLSAgICAvLyBiZXR3ZWVuIHdoZW4gc29tZXRoaW5nIGlzIGNvbXB1dGVkIGFuZCB3aGVu
IGl0IGlzIHN0b3JlZC4KLSAgICAKLSAgICAvLyA1KSBQZXJmb3JtIGFsbCByZWJveGluZyBvZiBp
bnRlZ2Vycy4KLSAgICAKLSAgICBpZiAoaGF2ZVVuYm94ZWRJbnQzMnMpIHsKLSAgICAgICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5k
ZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52
YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5p
cXVlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgICAg
ICAgICAgaWYgKHJlY292ZXJ5LmdwcigpICE9IGFscmVhZHlCb3hlZCkKLSAgICAgICAgICAgICAg
ICAgICAgb3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS5ncHIo
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgotICAgICAgICAgICAg
ICAgIHN0b3JlMzIoSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFRhZ1R5cGVOdW1iZXIgPj4g
MzIpKSwgdGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oZXhpdC5vcGVyYW5kRm9y
SW5kZXgoaW5kZXgpKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyA2KSBEdW1wIGFsbCBub24tcG9p
c29uZWQgR1BScy4gRm9yIHBvaXNvbmVkIEdQUnMsIHNhdmUgdGhlbSBpbnRvIHRoZSBzY3JhdGNo
IHN0b3JhZ2UuCi0gICAgLy8gICAgTm90ZSB0aGF0IEdQUnMgZG8gbm90IGhhdmUgYSBmYXN0IGNo
YW5nZSAobGlrZSBoYXZlRlBScykgYmVjYXVzZSB3ZSBleHBlY3QgdGhhdAotICAgIC8vICAgIG1v
c3QgT1NSIGZhaWx1cmUgcG9pbnRzIHdpbGwgaGF2ZSBhdCBsZWFzdCBvbmUgR1BSIHRoYXQgbmVl
ZHMgdG8gYmUgZHVtcGVkLgotICAgIAotICAgIHVuc2lnbmVkIHNjcmF0Y2hJbmRleCA9IDA7Ci0g
ICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7
ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0
LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQub3BlcmFu
ZEZvckluZGV4KGluZGV4KTsKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkg
ewotICAgICAgICBjYXNlIEluR1BSOgotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgot
ICAgICAgICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKQotICAgICAgICAgICAgICAg
IHN0b3JlUHRyKHJlY292ZXJ5LmdwcigpLCBzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4Kysp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0b3JlUHRyKHJlY292ZXJ5Lmdw
cigpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICAvLyBBdCB0aGlzIHBvaW50IGFsbCBHUFJzIGFyZSBhdmFpbGFibGUg
Zm9yIHNjcmF0Y2ggdXNlLgotICAgIAotICAgIGlmIChoYXZlRlBScykgewotICAgICAgICAvLyA3
KSBCb3ggYWxsIGRvdWJsZXMgKHJlbGllcyBvbiB0aGVyZSBiZWluZyBtb3JlIEdQUnMgdGhhbiBG
UFJzKQotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQu
bnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAg
ICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIEZQUlJlZyBmcHIgPSByZWNvdmVyeS5mcHIoKTsKLSAgICAg
ICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQUkluZm86OnRvSW5kZXgo
ZnByKSk7Ci0gICAgICAgICAgICBib3hEb3VibGUoZnByLCBncHIpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICAvLyA4KSBEdW1wIGFsbCBkb3VibGVzIGludG8gdGhlIHJlZ2lzdGVyIGZp
bGUsIG9yIHRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UgaWYKLSAgICAgICAgLy8gICAgdGhlIGRlc3Rp
bmF0aW9uIHZpcnR1YWwgcmVnaXN0ZXIgaXMgcG9pc29uZWQuCi0gICAgICAgIAotICAgICAgICBm
b3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytp
bmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0
LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1
ZSgpICE9IEluRlBSKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgR1BS
UmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6dG9JbmRleChyZWNvdmVyeS5m
cHIoKSkpOwotICAgICAgICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKQotICAgICAg
ICAgICAgICAgIHN0b3JlUHRyKGdwciwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdG9yZVB0cihncHIsIGFkZHJlc3NG
b3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9p
c29uZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKLSAgICAKLSAgICAvLyA5KSBSZXNodWZmbGUgZGlzcGxh
Y2VkIHZpcnR1YWwgcmVnaXN0ZXJzLiBPcHRpbWl6ZSBmb3IgdGhlIGNhc2UgdGhhdAotICAgIC8v
ICAgIHRoZSBudW1iZXIgb2YgZGlzcGxhY2VkIHZpcnR1YWwgcmVnaXN0ZXJzIGlzIG5vdCBtb3Jl
IHRoYW4gdGhlIG51bWJlcgotICAgIC8vICAgIG9mIGF2YWlsYWJsZSBwaHlzaWNhbCByZWdpc3Rl
cnMuCi0gICAgCi0gICAgaWYgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykgewot
ICAgICAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzIDw9IEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzKSB7Ci0gICAgICAgICAgICAvLyBTbyBmYXIgdGhpcyBhcHBlYXJz
IHRvIGJlIHRoZSBjYXNlIHRoYXQgdHJpZ2dlcnMgYWxsIHRoZSB0aW1lLCBidXQKLSAgICAgICAg
ICAgIC8vIHRoYXQgaXMgZmFyIGZyb20gZ3VhcmFudGVlZC4KLSAgICAgICAgCi0gICAgICAgICAg
ICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRleCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBp
bmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewot
ICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1
ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToK
LSAgICAgICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKLSAgICAgICAgICAg
ICAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5k
ZXgrKyk7Ci0gICAgICAgICAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzRm9yKHJlY292ZXJ5LnZp
cnR1YWxSZWdpc3RlcigpKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICAgICAgb3JQdHIoR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKLSAgICAgICAgICAgICAg
ICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgr
Kyk7Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgICAgIHN1YlB0cihHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgIGRpc3BsYWNlbWVudEluZGV4
ID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJl
ck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICAg
ICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICAgICAgICAgIGNhc2UgSW50MzJE
aXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3Bs
YWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZv
Ojp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
dXNlIHRoZSBzaHVmZmxpbmcgYWxnb3JpdGhtIHRoYXQgd2UgdXNlCi0gICAgICAgICAgICAvLyBm
b3Igc3BlY3VsYXRpdmUtPm5vbi1zcGVjdWxhdGl2ZSBqdW1wcywgaWYgd2UgZXZlciBkaXNjb3Zl
ciB0aGF0Ci0gICAgICAgICAgICAvLyBzb21lIGhvdCBjb2RlIHdpdGggbG90cyBvZiBsaXZlIHZh
bHVlcyB0aGF0IGdldCBkaXNwbGFjZWQgYW5kCi0gICAgICAgICAgICAvLyBzcGlsbGVkIHJlYWxs
eSBlbmpveXMgZnJlcXVlbnRseSBmYWlsaW5nIHNwZWN1bGF0aW9uLgotICAgICAgICAKLSAgICAg
ICAgICAgIC8vIEZvciBub3cgdGhpcyBjb2RlIGlzIGVuZ2luZWVyZWQgdG8gYmUgY29ycmVjdCBi
dXQgcHJvYmFibHkgbm90Ci0gICAgICAgICAgICAvLyBzdXBlci4gSW4gcGFydGljdWxhciwgaXQg
Y29ycmVjdGx5IGhhbmRsZXMgY2FzZXMgd2hlcmUgZm9yIGV4YW1wbGUKLSAgICAgICAgICAgIC8v
IHRoZSBkaXNwbGFjZW1lbnRzIGFyZSBhIHBlcm11dGF0aW9uIG9mIHRoZSBkZXN0aW5hdGlvbiB2
YWx1ZXMsIGxpa2UKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAxIC0+IDIKLSAgICAg
ICAgICAgIC8vIDIgLT4gMQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEl0IGFjY29t
cGxpc2hlcyB0aGlzIGJ5IHNpbXBseSBsaWZ0aW5nIGFsbCBvZiB0aGUgdmlydHVhbCByZWdpc3Rl
cnMKLSAgICAgICAgICAgIC8vIGZyb20gdGhlaXIgb2xkIChERkcgSklUKSBsb2NhdGlvbnMgYW5k
IGRyb3BwaW5nIHRoZW0gaW4gYSBzY3JhdGNoCi0gICAgICAgICAgICAvLyBsb2NhdGlvbiBpbiBt
ZW1vcnksIGFuZCB0aGVuIHRyYW5zZmVycmluZyBmcm9tIHRoYXQgc2NyYXRjaCBsb2NhdGlvbgot
ICAgICAgICAgICAgLy8gdG8gdGhlaXIgbmV3IChvbGQgSklUKSBsb2NhdGlvbnMuCi0gICAgICAg
IAotICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAg
ICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgICAgICAg
ICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQ
UkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVn
VDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIEludDMy
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKLSAgICAgICAgICAgICAgICAgICAgbG9hZDMyKGFk
ZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
R1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpy
ZWdUMCwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOiB7Ci0gICAgICAg
ICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIo
KSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgc3ViUHRyKEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAg
ICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRl
eCsrKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICAgICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnM7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1i
ZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgICAgICAgICBjYXNlIEludDMy
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgICAgICAgICAgY2FzZSBEb3VibGVEaXNw
bGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgICAgICAgICAgICAgbG9hZFB0cihzY3JhdGNo
QnVmZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAg
ICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9p
c29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJz
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyAxMCkgRHVtcCBhbGwgcG9pc29uZWQg
dmlydHVhbCByZWdpc3RlcnMuCi0gICAgCi0gICAgc2NyYXRjaEluZGV4ID0gMDsKLSAgICBpZiAo
bnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpIHsKLSAgICAgICAgZm9yIChpbnQgdmly
dHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgKGludClleGl0Lm1fdmFyaWFibGVz
LnNpemUoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKLSAgICAgICAgICAgIGlmICghcG9pc29uZWRW
aXJ0dWFsUmVnaXN0ZXJzW3ZpcnR1YWxSZWdpc3Rlcl0pCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gZXhpdC5tX3ZhcmlhYmxlc1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAgICAgICAgICAgc3dp
dGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICAgICAgY2FzZSBJbkdQUjoKLSAg
ICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgICAgICBjYXNlIEluRlBS
OgotICAgICAgICAgICAgICAgIGxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsr
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVn
VDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcil2aXJ0dWFsUmVnaXN0ZXIpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgQVNTRVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVycyk7Ci0gICAgCi0gICAgLy8gMTEpIER1bXAgYWxsIGNvbnN0YW50cy4gT3B0aW1pemUgZm9y
IFVuZGVmaW5lZCwgc2luY2UgdGhhdCdzIGEgY29uc3RhbnQgd2Ugc2VlCi0gICAgLy8gICAgIG9m
dGVuLgotCi0gICAgaWYgKGhhdmVDb25zdGFudHMpIHsKLSAgICAgICAgaWYgKGhhdmVVbmRlZmlu
ZWQpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQg
aW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsK
LSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJl
Y292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBD
b25zdGFudCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChyZWNv
dmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgc3RvcmVQdHIo
R1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRG
b3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShyZWNvdmVyeS5jb25zdGFudCgpKSks
IGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkp
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyAxMikgQWRqdXN0IHRoZSBvbGQgSklU
J3MgZXhlY3V0ZSBjb3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKLSAg
ICAvLyAgICAgdGhhdCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhl
IG5ldyBKSVQsIHNvIHRoZSBleGVjdXRlCi0gICAgLy8gICAgIGNvdW50ZXIgb25seSBhZmZlY3Rz
IGNhbGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0IGFuZCBjYWxsIGZyYW1lcwotICAg
IC8vICAgICB0aGF0IHdlcmUgc3RpbGwgZXhlY3V0aW5nIHRoZSBvbGQgSklUIGF0IHRoZSB0aW1l
IG9mIGFub3RoZXIgY2FsbCBmcmFtZSdzCi0gICAgLy8gICAgIE9TUiBleGl0LiBXZSB3YW50IHRv
IGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKLSAgICAvLwotICAgIC8vICAgICAo
YSkgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBhIGNoYW5jZSB0byByZWVudGVy
IG9wdGltaXplZAotICAgIC8vICAgICAgICAgY29kZSBldmVudHVhbGx5LCBzaW5jZSBvcHRpbWl6
ZWQgY29kZSBpcyBmYXN0ZXIuIEJ1dCB3ZSBkb24ndAotICAgIC8vICAgICAgICAgd2FudCB0byBk
byBzdWNoIHJlZW50ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkgKHNlZSAoYykgYmVsb3cpLgotICAgIC8v
Ci0gICAgLy8gICAgIChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQg
aXMgc3RpbGwgcnVubmluZyB0aGUgb2xkCi0gICAgLy8gICAgICAgICBKSVQncyBjb2RlIGFuZCBo
YXMgbmV2ZXIgT1NSJ2QsIHRoZW4gaXQgc2hvdWxkIGdldCBhIGNoYW5jZSB0bwotICAgIC8vICAg
ICAgICAgcGVyZm9ybSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGV4aXRl
ZC4KLSAgICAvLwotICAgIC8vICAgICAoYykgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQg
c2hvdWxkIG5vdCBpbW1lZGlhdGVseSByZXRyeSBPU1IKLSAgICAvLyAgICAgICAgIGVudHJ5LCBz
aW5jZSBib3RoIGZvcm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKLSAgICAv
LyAgICAgICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCi0gICAgLy8KLSAgICAvLyAgICAgKGQp
IEZyZXF1ZW50IE9TUiBmYWlsdXJlcywgZXZlbiB0aG9zZSB0aGF0IGRvIG5vdCByZXN1bHQgaW4g
dGhlIGNvZGUKLSAgICAvLyAgICAgICAgIHJ1bm5pbmcgaW4gYSBob3QgbG9vcCwgcmVzdWx0IGlu
IHJlY29tcGlsYXRpb24gZ2V0dGluZyB0cmlnZ2VyZWQuCi0gICAgLy8KLSAgICAvLyAgICAgVG8g
ZW5zdXJlIChjKSwgd2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCi0gICAg
Ly8gICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4gVGhpcyBzZWVtcyBs
aWtlIGl0IHdvdWxkIGVuZGFuZ2VyCi0gICAgLy8gICAgIChhKSBhbmQgKGIpLCBzaW5jZSB0aGVu
IGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5IHRoZSBvcHBvcnR1bml0eSBmb3IKLSAgICAvLyAg
ICAgZXZlcnkgY2FsbCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50aWFsbHksIGlm
IE9TUiBleGl0IGhhcHBlbnMKLSAgICAvLyAgICAgZnJlcXVlbnRseSBhbmQgdGhlIGZ1bmN0aW9u
IGhhcyBmZXcgbG9vcHMsIHRoZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgotICAgIC8vICAgICBi
ZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBuZXZlciBiZSB0cmlnZ2VyZWQu
IE9TUiBlbnRyeQotICAgIC8vICAgICB3aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRzIGhv
dCBpbiB0aGUgb2xkIEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0eQotICAgIC8vICAgICBnb29kIGpv
YiBvZiBlbnN1cmluZyAoYSkgYW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2Yg
KGQpLAotICAgIC8vICAgICBzaW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVz
ZXQgdGhlIGV4ZWN1dGUgY291bnRlci4KLSAgICAvLyAgICAgU28gd2UgY2hlY2sgaGVyZSBpZiB0
aGUgbnVtYmVyIG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50bHkKLSAgICAv
LyAgICAgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1
Y2Nlc3MgcmF0ZSksIGFuZCBpZgotICAgIC8vICAgICB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBl
bm91Z2ggbnVtYmVyIG9mIGZhaWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQotICAgIC8vICAgICBj
b3VudGVyIHRvIDA7IG90aGVyd2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KLSAgICAvLyAgICAg
Y291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLgotICAgIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihjb2RlQmxvY2soKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAKLSAgICBsb2Fk
MzIoQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZl
RmFpbENvdW50ZXIoKSksIEdQUkluZm86OnJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhHUFJJ
bmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIo
KSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICBhZGQzMihJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIp
OwotICAgIGFkZDMyKEltbTMyKC0xKSwgR1BSSW5mbzo6cmVnVDEpOwotICAgIHN0b3JlMzIoR1BS
SW5mbzo6cmVnVDIsIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZT
cGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpKTsKLSAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBB
ZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNj
ZXNzQ291bnRlcigpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygp
LT5hbHRlcm5hdGl2ZSgpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgIAotICAgIEp1bXAgZmV3RmFp
bHMgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBJbW0zMihjb2RlQmxv
Y2soKS0+bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSkpOwotICAgIG11bDMyKEltbTMyKEhldXJp
c3RpY3M6OmRlc2lyZWRTcGVjdWxhdGl2ZVN1Y2Nlc3NGYWlsUmF0aW8pLCBHUFJJbmZvOjpyZWdU
MiwgR1BSSW5mbzo6cmVnVDIpOwotICAgIAotICAgIEp1bXAgbG93RmFpbFJhdGUgPSBicmFuY2gz
MihCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgCi0g
ICAgLy8gUmVvcHRpbWl6ZSBhcyBzb29uIGFzIHBvc3NpYmxlLgotICAgIHN0b3JlMzIoSW1tMzIo
SGV1cmlzdGljczo6ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlv
biksIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291
bnRlcigpKSk7Ci0gICAgSnVtcCBkb25lQWRqdXN0aW5nID0ganVtcCgpOwotICAgIAotICAgIGZl
d0ZhaWxzLmxpbmsodGhpcyk7Ci0gICAgbG93RmFpbFJhdGUubGluayh0aGlzKTsKLSAgICAKLSAg
ICBzdG9yZTMyKEltbTMyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVG
b3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkpKTsKLSAgICAKLSAgICBkb25lQWRqdXN0
aW5nLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgLy8gMTMpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUg
bGFzdCBieXRlY29kZSBvcGVyYXRpb24gaW50byByZWdUMC4KLSAgICAKLSAgICBpZiAoZXhpdC5t
X2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCi0gICAg
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3Bl
cmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKLSAgICAKLSAgICAvLyAxNCkg
Rml4IGNhbGwgZnJhbWUocykuCi0gICAgCi0gICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5h
dGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAgIHN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBhZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKTsKLSAgICAKLSAgICBm
b3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZXIpIHsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pOwotICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Io
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpOwotICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBkZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlcik7Ci0gICAgICAgIHVuc2lnbmVkIHJldHVybkJ5dGVjb2RlSW5kZXgg
PSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChv
cF9jYWxsKTsKLSAgICAgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmlu
YXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwg
ZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCByZXR1cm5CeXRlY29kZUluZGV4KTsKLSAgICAgICAgCi0g
ICAgICAgIEFTU0VSVChtYXBwaW5nKTsKLSAgICAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNv
ZGVJbmRleCA9PSByZXR1cm5CeXRlY29kZUluZGV4KTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQq
IGp1bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldEpJVENvZGUoKS5zdGFydCgp
KSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOwotCi0gICAgICAgIEdQUlJlZyBjYWxs
ZXJGcmFtZUdQUjsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNh
bGxGcmFtZSkgewotICAgICAgICAgICAgYWRkUHRyKEltbTMyKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVyLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAg
ICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6cmVnVDM7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcjsKLSAg
ICAgICAgCi0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2sp
LCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBSZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpKTsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS0+c2NvcGUoKSksIGFkZHJlc3NGb3IoKFZp
cnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmls
ZTo6U2NvcGVDaGFpbikpKTsKLSAgICAgICAgc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIGFkZHJl
c3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJl
Z2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpKSk7Ci0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIoanVtcFRhcmdldCksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpKSk7Ci0gICAgICAgIHN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRzLnNpemUoKSkpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50
KSkpOwotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVlLmdldCgpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKSk7Ci0gICAgfQotICAgIAotICAg
IGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGFkZFB0cihJ
bW0zMihleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAK
LSAgICAvLyAxNSkgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2Rl
LgotICAgIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVC
bG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7Ci0gICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGlu
ZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2Rl
QmxvY2spOwotICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJp
bmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCks
IGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7
Ci0gICAgCi0gICAgQVNTRVJUKG1hcHBpbmcpOwotICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVj
b2RlSW5kZXggPT0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgCi0gICAg
dm9pZCoganVtcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihiYXNlbGluZUNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsg
bWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7Ci0gICAgCi0gICAgQVNTRVJUKEdQUkluZm86
OnJlZ1QxICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKLSAgICAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJlZ1QxKTsKLSAgICBqdW1wKEdQ
UkluZm86OnJlZ1QxKTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBmcHJp
bnRmKHN0ZGVyciwgIi0+ICVwXG4iLCBqdW1wVGFyZ2V0KTsKLSNlbmRpZgotfQotCi0jZW5kaWYg
Ly8gVVNFKEpTVkFMVUU2NCkKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdENv
bXBpbGVyLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkgJiYgVVNFKEpTVkFMVUUzMl82NCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIE9TUkV4aXRDb21waWxlcjo6
Y29tcGlsZUV4aXQoY29uc3QgT1NSRXhpdCYgZXhpdCwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVj
b3ZlcnkpCit7CisgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZmLgorICAgIGV4aXQubV9jaGVjay5s
aW5rKCZtX2ppdCk7CisKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZnByaW50
ZihzdGRlcnIsICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQgKCIsIChpbnQpZXhpdC5tX25vZGVJbmRl
eCk7CisgICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsg
OyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgeworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgImJjIyV1IiwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiAlcCAiLCBjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7CisgICAgfQorICAgIGZwcmludGYoc3RkZXJy
LCAiKSBhdCBKSVQgb2Zmc2V0IDB4JXggICIsIG1faml0LmRlYnVnT2Zmc2V0KCkpOworICAgIGV4
aXQuZHVtcChzdGRlcnIpOworI2VuZGlmCisjaWYgREZHX0VOQUJMRShWRVJCT1NFX1NQRUNVTEFU
SU9OX0ZBSUxVUkUpCisgICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvKiBkZWJ1Z0luZm8g
PSBuZXcgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvOworICAgIGRlYnVnSW5mby0+Y29kZUJs
b2NrID0gbV9qaXQuY29kZUJsb2NrKCk7CisgICAgZGVidWdJbmZvLT5kZWJ1Z09mZnNldCA9IG1f
aml0LmRlYnVnT2Zmc2V0KCk7CisgICAgCisgICAgbV9qaXQuZGVidWdDYWxsKGRlYnVnT3BlcmF0
aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUsIGRlYnVnSW5mbyk7CisjZW5kaWYKKyAgICAKKyNp
ZiBERkdfRU5BQkxFKEpJVF9CUkVBS19PTl9TUEVDVUxBVElPTl9GQUlMVVJFKQorICAgIG1faml0
LmJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgIAorI2lmIERGR19FTkFCTEUoU1VDQ0VTU19TVEFU
UykKKyAgICBzdGF0aWMgU2FtcGxpbmdDb3VudGVyIGNvdW50ZXIoIlNwZWN1bGF0aW9uRmFpbHVy
ZSIpOworICAgIG1faml0LmVtaXRDb3VudChjb3VudGVyKTsKKyNlbmRpZgorCisgICAgLy8gMikg
UGVyZm9ybSBzcGVjdWxhdGlvbiByZWNvdmVyeS4gVGhpcyBvbmx5IGNvbWVzIGludG8gcGxheSB3
aGVuIGFuIG9wZXJhdGlvbgorICAgIC8vICAgIHN0YXJ0cyBtdXRhdGluZyBzdGF0ZSBiZWZvcmUg
dmVyaWZ5aW5nIHRoZSBzcGVjdWxhdGlvbiBpdCBoYXMgYWxyZWFkeSBtYWRlLgorICAgIAorICAg
IGlmIChyZWNvdmVyeSkgeworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKKyAgICAgICAgICAgIG1faml0LnN1YjMyKHJlY292
ZXJ5LT5zcmMoKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gMykgUmVmaW5lIHNvbWUgdmFsdWUgcHJv
ZmlsZSwgaWYgYXBwcm9wcmlhdGUuCisgICAgCisgICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVTb3Vy
Y2UgJiYgISFleGl0Lm1fdmFsdWVQcm9maWxlKSB7CisgICAgICAgIGlmIChleGl0Lm1fanNWYWx1
ZVNvdXJjZS5pc0FkZHJlc3MoKSkgeworICAgICAgICAgICAgLy8gU2F2ZSBhIHJlZ2lzdGVyIHNv
IHdlIGNhbiB1c2UgaXQuCisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJl
Z1QwOworICAgICAgICAgICAgaWYgKHNjcmF0Y2ggPT0gZXhpdC5tX2pzVmFsdWVTb3VyY2UuYmFz
ZSgpKQorICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMTsKKyAgICAgICAg
ICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoQnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpT
VmFsdWUqPihtX2ppdC5nbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZih1
aW50MzJfdCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaCwgc2NyYXRjaEJ1
ZmZlcik7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNB
ZGRyZXNzKE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSksIHNjcmF0Y2gpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzY3JhdGNoLCAmYml0d2lz
ZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihleGl0Lm1fdmFsdWVQcm9maWxlLT5zcGVj
RmFpbEJ1Y2tldCgwKSktPmFzQml0cy50YWcpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKGV4
aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcyhPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKHNjcmF0Y2gsICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+
KGV4aXQubV92YWx1ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnBheWxvYWQp
OworICAgICAgICAgICAgbV9qaXQubG9hZDMyKHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2gpOworICAg
ICAgICB9IGVsc2UgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmhhc0tub3duVGFnKCkpIHsKKyAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihleGl0Lm1fanNW
YWx1ZVNvdXJjZS50YWcoKSksICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+
KGV4aXQubV92YWx1ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnRhZyk7Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGV4aXQubV9qc1ZhbHVlU291cmNlLnBheWxvYWRHUFIo
KSwgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oZXhpdC5tX3ZhbHVlUHJv
ZmlsZS0+c3BlY0ZhaWxCdWNrZXQoMCkpLT5hc0JpdHMucGF5bG9hZCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGV4aXQubV9qc1ZhbHVlU291cmNlLnRhZ0dQ
UigpLCAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihleGl0Lm1fdmFsdWVQ
cm9maWxlLT5zcGVjRmFpbEJ1Y2tldCgwKSktPmFzQml0cy50YWcpOworICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihleGl0Lm1fanNWYWx1ZVNvdXJjZS5wYXlsb2FkR1BSKCksICZiaXR3aXNlX2Nh
c3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGV4aXQubV92YWx1ZVByb2ZpbGUtPnNwZWNGYWls
QnVja2V0KDApKS0+YXNCaXRzLnBheWxvYWQpOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IC8vIDQpIEZpZ3VyZSBvdXQgaG93IG1hbnkgc2NyYXRjaCBzbG90cyB3ZSdsbCBuZWVkLiBXZSBu
ZWVkIG9uZSBmb3IgZXZlcnkgR1BSL0ZQUgorICAgIC8vICAgIHdob3NlIGRlc3RpbmF0aW9uIGlz
IG5vdyBvY2N1cGllZCBieSBhIERGRyB2aXJ0dWFsIHJlZ2lzdGVyLCBhbmQgd2UgbmVlZAorICAg
IC8vICAgIG9uZSBmb3IgZXZlcnkgZGlzcGxhY2VkIHZpcnR1YWwgcmVnaXN0ZXIgaWYgdGhlcmUg
YXJlIG1vcmUgdGhhbgorICAgIC8vICAgIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIG9mIHRo
ZW0uIEFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uc3RhbnRzLAorICAgIC8vICAgIGFueSB1
bmRlZmluZWQgc2xvdHMsIGFueSBGUFIgc2xvdHMsIGFuZCBhbnkgdW5ib3hlZCBpbnRzLgorICAg
ICAgICAgICAgCisgICAgVmVjdG9yPGJvb2w+IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyhleGl0
Lm1fdmFyaWFibGVzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvaXNv
bmVkVmlydHVhbFJlZ2lzdGVycy5zaXplKCk7ICsraSkKKyAgICAgICAgcG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzW2ldID0gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZlBvaXNvbmVkVmly
dHVhbFJlZ2lzdGVycyA9IDA7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFs
UmVnaXN0ZXJzID0gMDsKKyAgICAKKyAgICAvLyBCb29sZWFucyBmb3IgZmFzdCBjaGVja3MuIFdl
IGV4cGVjdCB0aGF0IG1vc3QgT1NSIGV4aXRzIGRvIG5vdCBoYXZlIHRvIHJlYm94CisgICAgLy8g
SW50MzJzLCBoYXZlIG5vIEZQUnMsIGFuZCBoYXZlIG5vIGNvbnN0YW50cy4gSWYgdGhlcmUgYXJl
IGNvbnN0YW50cywgd2UKKyAgICAvLyBleHBlY3QgbW9zdCBvZiB0aGVtIHRvIGJlIGpzVW5kZWZp
bmVkKCk7IGlmIHRoYXQncyB0cnVlIHRoZW4gd2UgaGFuZGxlIHRoYXQKKyAgICAvLyBzcGVjaWFs
bHkgdG8gbWluaW1pemUgY29kZSBzaXplIGFuZCBleGVjdXRpb24gdGltZS4KKyAgICBib29sIGhh
dmVVbmJveGVkSW50MzJJblJlZ2lzdGVyRmlsZSA9IGZhbHNlOworICAgIGJvb2wgaGF2ZVVuYm94
ZWRDZWxsSW5SZWdpc3RlckZpbGUgPSBmYWxzZTsKKyAgICBib29sIGhhdmVVbmJveGVkQm9vbGVh
bkluUmVnaXN0ZXJGaWxlID0gZmFsc2U7CisgICAgYm9vbCBoYXZlRlBScyA9IGZhbHNlOworICAg
IGJvb2wgaGF2ZUNvbnN0YW50cyA9IGZhbHNlOworICAgIGJvb2wgaGF2ZVVuZGVmaW5lZCA9IGZh
bHNlOworICAgIAorICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9m
UmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJl
Y292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgc3dpdGNoIChyZWNv
dmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxl
OgorICAgICAgICAgICAgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKys7CisgICAg
ICAgICAgICBBU1NFUlQoKGludClyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA+PSAwKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2VlIGlmIHdlIG1pZ2h0IGxpa2UgdG8gc3RvcmUg
dG8gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyIGJlZm9yZSBkb2luZworICAgICAgICAgICAgLy8gdmly
dHVhbCByZWdpc3RlciBzaHVmZmxpbmcuIElmIHNvLCB3ZSBzYXkgdGhhdCB0aGUgdmlydHVhbCBy
ZWdpc3RlcgorICAgICAgICAgICAgLy8gaXMgcG9pc29uZWQ6IGl0IGNhbm5vdCBiZSBzdG9yZWQg
dG8gdW50aWwgYWZ0ZXIgZGlzcGxhY2VkIHZpcnR1YWwKKyAgICAgICAgICAgIC8vIHJlZ2lzdGVy
cyBhcmUgaGFuZGxlZC4gV2UgdHJhY2sgcG9pc29uZWQgdmlydHVhbCByZWdpc3RlciBjYXJlZnVs
bHkKKyAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0aGlzIGhhcHBlbnMgZWZmaWNpZW50bHkuIE5v
dGUgdGhhdCB3ZSBleHBlY3QgdGhpcyBjYXNlCisgICAgICAgICAgICAvLyB0byBiZSByYXJlLCBz
byB0aGUgaGFuZGxpbmcgb2YgaXQgaXMgb3B0aW1pemVkIGZvciB0aGUgY2FzZXMgaW4KKyAgICAg
ICAgICAgIC8vIHdoaWNoIGl0IGRvZXMgbm90IGhhcHBlbi4KKyAgICAgICAgICAgIGlmIChyZWNv
dmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA8IChpbnQpZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpIHsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4aXQubV92YXJpYWJsZXNbcmVjb3ZlcnkudmlydHVh
bFJlZ2lzdGVyKCldLnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBJbkdQUjoK
KyAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgICAg
IGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKKyAgICAgICAgICAgICAgICBjYXNlIEluUGFpcjoK
KyAgICAgICAgICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAgICAgICAgICBpZiAoIXBv
aXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVy
T2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFscmVhZHlJblJl
Z2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgorICAgICAgICAgICAgaGF2ZVVuYm94ZWRJbnQzMklu
UmVnaXN0ZXJGaWxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQ2VsbDoKKyAgICAgICAg
ICAgIGhhdmVVbmJveGVkQ2VsbEluUmVnaXN0ZXJGaWxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNV
bmJveGVkQm9vbGVhbjoKKyAgICAgICAgICAgIGhhdmVVbmJveGVkQm9vbGVhbkluUmVnaXN0ZXJG
aWxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgSW5GUFI6CisgICAgICAgICAgICBoYXZlRlBScyA9IHRydWU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAgaGF2
ZUNvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQoKS5p
c1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGhhdmVVbmRlZmluZWQgPSB0cnVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEVuY29kZWRKU1ZhbHVlKiBz
Y3JhdGNoQnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihtX2ppdC5nbG9iYWxE
YXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAobnVt
YmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMgKyAoKG51bWJlck9mRGlzcGxhY2VkVmlydHVh
bFJlZ2lzdGVycyAqIDIpIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID8gMCA6IG51bWJl
ck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykpKSk7CisKKyAgICAvLyBGcm9tIGhlcmUgb24s
IHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpdCBpcyBwcm9maXRhYmxlIHRvIG1heGltaXplIHRoZSBk
aXN0YW5jZQorICAgIC8vIGJldHdlZW4gd2hlbiBzb21ldGhpbmcgaXMgY29tcHV0ZWQgYW5kIHdo
ZW4gaXQgaXMgc3RvcmVkLgorICAgIAorICAgIC8vIDUpIFBlcmZvcm0gYWxsIHJlYm94aW5nIG9m
IGludGVnZXJzIGFuZCBjZWxscywgZXhjZXB0IGZvciB0aG9zZSBpbiByZWdpc3RlcnMuCisKKyAg
ICBpZiAoaGF2ZVVuYm94ZWRJbnQzMkluUmVnaXN0ZXJGaWxlIHx8IGhhdmVVbmJveGVkQ2VsbElu
UmVnaXN0ZXJGaWxlIHx8IGhhdmVVbmJveGVkQm9vbGVhbkluUmVnaXN0ZXJGaWxlKSB7CisgICAg
ICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmllcygp
OyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9
IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5
LnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFz
VW5ib3hlZEludDMyOgorICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRh
Z0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZvckluZGV4KGlu
ZGV4KSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBbHJl
YWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxsOgorICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEFz
c2VtYmx5SGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oZXhpdC5v
cGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW46CisgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpCb29sZWFuVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyA2KSBEdW1w
IGFsbCBub24tcG9pc29uZWQgR1BScy4gRm9yIHBvaXNvbmVkIEdQUnMsIHNhdmUgdGhlbSBpbnRv
IHRoZSBzY3JhdGNoIHN0b3JhZ2UuCisgICAgLy8gICAgTm90ZSB0aGF0IEdQUnMgZG8gbm90IGhh
dmUgYSBmYXN0IGNoYW5nZSAobGlrZSBoYXZlRlBScykgYmVjYXVzZSB3ZSBleHBlY3QgdGhhdAor
ICAgIC8vICAgIG1vc3QgT1NSIGZhaWx1cmUgcG9pbnRzIHdpbGwgaGF2ZSBhdCBsZWFzdCBvbmUg
R1BSIHRoYXQgbmVlZHMgdG8gYmUgZHVtcGVkLgorICAgIAorICAgIHVuc2lnbmVkIHNjcmF0Y2hJ
bmRleCA9IDA7CisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBpbnQgb3BlcmFuZCA9
IGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50
ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICBjYXNlIFVuYm94ZWRJ
bnQzMkluR1BSOgorICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6CisgICAgICAgICAg
ICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNb
ZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCisgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihyZWNvdmVyeS5ncHIoKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZl
ciArIHNjcmF0Y2hJbmRleCsrKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgdWludDMyX3QgdGFnID0gSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZzsKKyAgICAgICAgICAgICAg
ICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gSW5HUFIpCisgICAgICAgICAgICAgICAgICAg
IHRhZyA9IEpTVmFsdWU6OkNlbGxUYWc7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVjb3Zl
cnkudGVjaG5pcXVlKCkgPT0gVW5ib3hlZEludDMySW5HUFIpCisgICAgICAgICAgICAgICAgICAg
IHRhZyA9IEpTVmFsdWU6OkludDMyVGFnOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgdGFnID0gSlNWYWx1ZTo6Qm9vbGVhblRhZzsKKyAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHRhZyksIEFzc2VtYmx5
SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOworICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIocmVjb3ZlcnkuZ3ByKCksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9h
ZEZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEluUGFpcjoKKyAgICAgICAgICAgIGlmIChleGl0Lmlz
VmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSkgeworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocmVjb3Zl
cnkudGFnR1BSKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3Jh
dGNoSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHJlY292ZXJ5LnBheWxvYWRH
UFIoKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRl
eCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoSW5kZXgrKzsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihyZWNvdmVyeS50YWdHUFIoKSwgQXNz
ZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7CisgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihyZWNvdmVyeS5wYXlsb2FkR1BSKCksIEFzc2VtYmx5SGVs
cGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gQXQgdGhpcyBwb2ludCBhbGwgR1BS
cyBhcmUgYXZhaWxhYmxlIGZvciBzY3JhdGNoIHVzZS4KKyAgICAKKyAgICBpZiAoaGF2ZUZQUnMp
IHsKKyAgICAgICAgLy8gNykgQm94IGFsbCBkb3VibGVzIChyZWxpZXMgb24gdGhlcmUgYmVpbmcg
bW9yZSBHUFJzIHRoYW4gRlBScykKKyAgICAgICAgLy8gICAgRm9yIEpTVmFsdWUzMl82NCwgbm8g
bmVlZCB0byBib3ggZG91Ymxlcy4KKyAgICAgICAgCisgICAgICAgIC8vIDgpIER1bXAgYWxsIGRv
dWJsZXMgaW50byB0aGUgcmVnaXN0ZXIgZmlsZSwgb3IgdG8gdGhlIHNjcmF0Y2ggc3RvcmFnZSBp
ZgorICAgICAgICAvLyAgICB0aGUgZGVzdGluYXRpb24gdmlydHVhbCByZWdpc3RlciBpcyBwb2lz
b25lZC4KKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0
Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1
ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAg
ICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gSW5GUFIpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCisgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUocmVjb3ZlcnkuZnByKCksIHNjcmF0Y2hCdWZm
ZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmVEb3VibGUocmVjb3ZlcnkuZnByKCksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQ
b2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAorICAgIC8vIDkpIFJlc2h1ZmZsZSBkaXNw
bGFjZWQgdmlydHVhbCByZWdpc3RlcnMuIE9wdGltaXplIGZvciB0aGUgY2FzZSB0aGF0CisgICAg
Ly8gICAgdGhlIG51bWJlciBvZiBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMgaXMgbm90IG1v
cmUgdGhhbiB0aGUgbnVtYmVyCisgICAgLy8gICAgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIHJlZ2lz
dGVycy4KKyAgICAKKyAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7
CisgICAgICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgKiAyIDw9IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAvLyBTbyBmYXIgdGhpcyBh
cHBlYXJzIHRvIGJlIHRoZSBjYXNlIHRoYXQgdHJpZ2dlcnMgYWxsIHRoZSB0aW1lLCBidXQKKyAg
ICAgICAgICAgIC8vIHRoYXQgaXMgZmFyIGZyb20gZ3VhcmFudGVlZC4KKyAgICAgICAgCisgICAg
ICAgICAgICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRleCA9IDA7CisgICAgICAgICAgICBmb3Ig
KGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRl
eCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhp
dC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVj
aG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6
OnBheWxvYWRGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0b1JlZ2lz
dGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJ
bmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgICAgICBkaXNwbGFjZW1lbnRJbmRleCA9IDA7CisgICAgICAgICAgICBm
b3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytp
bmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0g
ZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3Zlcnku
dGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6dG9S
ZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudElu
ZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3Bl
cmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgc2h1ZmZsaW5nIGFsZ29y
aXRobSB0aGF0IHdlIHVzZQorICAgICAgICAgICAgLy8gZm9yIHNwZWN1bGF0aXZlLT5ub24tc3Bl
Y3VsYXRpdmUganVtcHMsIGlmIHdlIGV2ZXIgZGlzY292ZXIgdGhhdAorICAgICAgICAgICAgLy8g
c29tZSBob3QgY29kZSB3aXRoIGxvdHMgb2YgbGl2ZSB2YWx1ZXMgdGhhdCBnZXQgZGlzcGxhY2Vk
IGFuZAorICAgICAgICAgICAgLy8gc3BpbGxlZCByZWFsbHkgZW5qb3lzIGZyZXF1ZW50bHkgZmFp
bGluZyBzcGVjdWxhdGlvbi4KKyAgICAgICAgCisgICAgICAgICAgICAvLyBGb3Igbm93IHRoaXMg
Y29kZSBpcyBlbmdpbmVlcmVkIHRvIGJlIGNvcnJlY3QgYnV0IHByb2JhYmx5IG5vdAorICAgICAg
ICAgICAgLy8gc3VwZXIuIEluIHBhcnRpY3VsYXIsIGl0IGNvcnJlY3RseSBoYW5kbGVzIGNhc2Vz
IHdoZXJlIGZvciBleGFtcGxlCisgICAgICAgICAgICAvLyB0aGUgZGlzcGxhY2VtZW50cyBhcmUg
YSBwZXJtdXRhdGlvbiBvZiB0aGUgZGVzdGluYXRpb24gdmFsdWVzLCBsaWtlCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gMSAtPiAyCisgICAgICAgICAgICAvLyAyIC0+IDEKKyAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAvLyBJdCBhY2NvbXBsaXNoZXMgdGhpcyBieSBzaW1wbHkg
bGlmdGluZyBhbGwgb2YgdGhlIHZpcnR1YWwgcmVnaXN0ZXJzCisgICAgICAgICAgICAvLyBmcm9t
IHRoZWlyIG9sZCAoREZHIEpJVCkgbG9jYXRpb25zIGFuZCBkcm9wcGluZyB0aGVtIGluIGEgc2Ny
YXRjaAorICAgICAgICAgICAgLy8gbG9jYXRpb24gaW4gbWVtb3J5LCBhbmQgdGhlbiB0cmFuc2Zl
cnJpbmcgZnJvbSB0aGF0IHNjcmF0Y2ggbG9jYXRpb24KKyAgICAgICAgICAgIC8vIHRvIHRoZWly
IG5ldyAob2xkIEpJVCkgbG9jYXRpb25zLgorICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50
IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7
CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZh
bHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlx
dWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6cGF5
bG9hZEZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2Ny
YXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKEdQUkluZm86OnJlZ1QxLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVy
ICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSk7CisgICAgICAgICAgICAgICAgc2NyYXRjaEluZGV4Kys7CisgICAgICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnM7CisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGlu
ZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAg
ICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGlu
ZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxh
Y2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVm
ZmVyICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0
Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQ
UkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rl
cilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKEdQUkluZm86OnJlZ1QxLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJl
Z2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgIHNj
cmF0Y2hJbmRleCsrOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIEFTU0VS
VChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMgKyBudW1i
ZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIC8vIDEwKSBEdW1wIGFsbCBwb2lzb25lZCB2aXJ0dWFsIHJlZ2lzdGVycy4KKyAgICAKKyAg
ICBzY3JhdGNoSW5kZXggPSAwOworICAgIGlmIChudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVycykgeworICAgICAgICBmb3IgKGludCB2aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVn
aXN0ZXIgPCAoaW50KWV4aXQubV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3Rlcikg
eworICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbdmlydHVhbFJlZ2lz
dGVyXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0Lm1fdmFyaWFibGVzW3ZpcnR1
YWxSZWdpc3Rlcl07CisgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
CisgICAgICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJ
bkdQUjoKKyAgICAgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjogeworICAgICAgICAg
ICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVy
ICsgc2NyYXRjaEluZGV4KyspICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigo
VmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIHVpbnQz
Ml90IHRhZyA9IEpTVmFsdWU6OkVtcHR5VmFsdWVUYWc7CisgICAgICAgICAgICAgICAgaWYgKHJl
Y292ZXJ5LnRlY2huaXF1ZSgpID09IEluR1BSKQorICAgICAgICAgICAgICAgICAgICB0YWcgPSBK
U1ZhbHVlOjpDZWxsVGFnOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpID09IFVuYm94ZWRJbnQzMkluR1BSKQorICAgICAgICAgICAgICAgICAgICB0YWcgPSBK
U1ZhbHVlOjpJbnQzMlRhZzsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHRhZyA9IEpTVmFsdWU6OkJvb2xlYW5UYWc7CisgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMih0YWcpLCBBc3NlbWJseUhlbHBlcnM6
OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIEluRlBSOgorICAg
ICAgICAgICAgY2FzZSBJblBhaXI6CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0
PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSwgR1BSSW5mbzo6cmVnVDEpOworICAg
ICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVy
czo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOworICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIEFzc2VtYmx5SGVscGVyczo6
dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lzdGVyKSk7CisgICAgICAgICAgICAg
ICAgc2NyYXRjaEluZGV4Kys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVt
YmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAorICAgIC8vIDExKSBEdW1wIGFs
bCBjb25zdGFudHMuIE9wdGltaXplIGZvciBVbmRlZmluZWQsIHNpbmNlIHRoYXQncyBhIGNvbnN0
YW50IHdlIHNlZQorICAgIC8vICAgICBvZnRlbi4KKworICAgIGlmIChoYXZlQ29uc3RhbnRzKSB7
CisgICAgICAgIGlmIChoYXZlVW5kZWZpbmVkKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGpzVW5kZWZpbmVkKCkucGF5bG9hZCgpKSwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnRhZygpKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5u
dW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAg
ICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENvbnN0YW50KQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmlu
ZWQoKSkgeworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFz
c2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZv
ckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6
cmVnVDEsIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVy
YW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVjb3Zlcnku
Y29uc3RhbnQoKS5wYXlsb2FkKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1
YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHJlY292ZXJ5LmNv
bnN0YW50KCkudGFnKCkpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVy
KWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIAorICAgIC8vIDEyKSBBZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNv
dW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25vdworICAgIC8vICAgICB0aGF0
IGFsbCBuZXcgY2FsbHMgaW50byB0aGlzIGNvZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28g
dGhlIGV4ZWN1dGUKKyAgICAvLyAgICAgY291bnRlciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMg
dGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5kIGNhbGwgZnJhbWVzCisgICAgLy8gICAgIHRoYXQg
d2VyZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9sZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBj
YWxsIGZyYW1lJ3MKKyAgICAvLyAgICAgT1NSIGV4aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQg
dGhlIGZvbGxvd2luZyBpcyB0cnVlOgorICAgIC8vCisgICAgLy8gICAgIChhKSBDb2RlIHRoZSBw
ZXJmb3JtcyBhbiBPU1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRvIHJlZW50ZXIgb3B0aW1pemVkCisg
ICAgLy8gICAgICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNlIG9wdGltaXplZCBjb2RlIGlzIGZh
c3Rlci4gQnV0IHdlIGRvbid0CisgICAgLy8gICAgICAgICB3YW50IHRvIGRvIHN1Y2ggcmVlbnRl
cnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChjKSBiZWxvdykuCisgICAgLy8KKyAgICAvLyAgICAg
KGIpIElmIHRoZXJlIGlzIGNvZGUgb24gdGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBzdGlsbCBydW5u
aW5nIHRoZSBvbGQKKyAgICAvLyAgICAgICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBuZXZlciBPU1In
ZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRvCisgICAgLy8gICAgICAgICBwZXJmb3Jt
IE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZXhpdGVkLgorICAgIC8vCisg
ICAgLy8gICAgIChjKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBzaG91bGQgbm90IGlt
bWVkaWF0ZWx5IHJldHJ5IE9TUgorICAgIC8vICAgICAgICAgZW50cnksIHNpbmNlIGJvdGggZm9y
bXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcworICAgIC8vICAgICAgICAgcGFy
dGljdWxhcmx5IGV4cGVuc2l2ZS4KKyAgICAvLworICAgIC8vICAgICAoZCkgRnJlcXVlbnQgT1NS
IGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0aGUgY29kZQorICAg
IC8vICAgICAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlv
biBnZXR0aW5nIHRyaWdnZXJlZC4KKyAgICAvLworICAgIC8vICAgICBUbyBlbnN1cmUgKGMpLCB3
ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KKyAgICAvLyAgICAgY291bnRl
clZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQg
ZW5kYW5nZXIKKyAgICAvLyAgICAgKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4gZXZlcnkgT1NSIGV4
aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgorICAgIC8vICAgICBldmVyeSBjYWxs
IGZyYW1lIHRvIHBlcmZvcm0gT1NSIGVudHJ5LiBFc3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFw
cGVucworICAgIC8vICAgICBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29w
cywgdGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVyCisgICAgLy8gICAgIGJlY29tZSBub24tbmVn
YXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5Cisg
ICAgLy8gICAgIHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQg
SklULCB3aGljaCBkb2VzIGEgcHJldHR5CisgICAgLy8gICAgIGdvb2Qgam9iIG9mIGVuc3VyaW5n
IChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAoZCksCisgICAgLy8g
ICAgIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUgZXhlY3V0
ZSBjb3VudGVyLgorICAgIC8vICAgICBTbyB3ZSBjaGVjayBoZXJlIGlmIHRoZSBudW1iZXIgb2Yg
c3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQorICAgIC8vICAgICBsYXJnZXIg
dGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3VjY2VzcyByYXRlKSwg
YW5kIGlmCisgICAgLy8gICAgIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3VnaCBudW1iZXIg
b2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCisgICAgLy8gICAgIGNvdW50ZXIgdG8gMDsg
b3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bworICAgIC8vICAgICBjb3VudGVyVmFsdWVG
b3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCisgICAgCisgICAgbV9qaXQubW92ZShBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgCisgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQ
UkluZm86OnJlZ1QyKTsKKyAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291
bnRlcigpKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIG1faml0LmFkZDMyKEFzc2VtYmx5SGVscGVy
czo6SW1tMzIoMSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBtX2ppdC5hZGQzMihBc3NlbWJseUhl
bHBlcnM6OkltbTMyKC0xKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIG1faml0LnN0b3JlMzIoR1BS
SW5mbzo6cmVnVDIsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSkpOworICAgIG1faml0LnN0
b3JlMzIoR1BSSW5mbzo6cmVnVDEsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSkpOwor
ICAgIAorICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0
LmNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIAorICAg
IEFzc2VtYmx5SGVscGVyczo6SnVtcCBmZXdGYWlscyA9IG1faml0LmJyYW5jaDMyKEFzc2VtYmx5
SGVscGVyczo6QmVsb3dPckVxdWFsLCBHUFJJbmZvOjpyZWdUMiwgQXNzZW1ibHlIZWxwZXJzOjpJ
bW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSkpOworICAg
IG1faml0Lm11bDMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoSGV1cmlzdGljczo6ZGVzaXJlZFNw
ZWN1bGF0aXZlU3VjY2Vzc0ZhaWxSYXRpbyksIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgCisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGxvd0ZhaWxSYXRlID0gbV9qaXQu
YnJhbmNoMzIoQXNzZW1ibHlIZWxwZXJzOjpCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBH
UFJJbmZvOjpyZWdUMSk7CisgICAgCisgICAgLy8gUmVvcHRpbWl6ZSBhcyBzb29uIGFzIHBvc3Np
YmxlLgorICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihIZXVyaXN0aWNz
OjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9uKSwgQXNzZW1i
bHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRXhl
Y3V0ZUNvdW50ZXIoKSkpOworICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBkb25lQWRqdXN0aW5n
ID0gbV9qaXQuanVtcCgpOworICAgIAorICAgIGZld0ZhaWxzLmxpbmsoJm1faml0KTsKKyAgICBs
b3dGYWlsUmF0ZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJs
eUhlbHBlcnM6OkltbTMyKG1faml0LmNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVy
VmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNvdW50ZXIoKSkp
OworICAgIAorICAgIGRvbmVBZGp1c3RpbmcubGluaygmbV9qaXQpOworICAgIAorICAgIC8vIDEz
KSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVn
VDAuCisgICAgCisgICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKSB7CisgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBl
cnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBH
UFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CisgICAgICAgIG1faml0LmxvYWQzMihBc3Nl
bWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFu
ZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7CisgICAgfQorICAgIAorICAgIC8v
IDE0KSBGaXggY2FsbCBmcmFtZSAocykuCisgICAgCisgICAgQVNTRVJUKG1faml0LmNvZGVCbG9j
aygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQp
OworICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2pp
dC5jb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKVJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKSk7CisgICAgCisgICAg
Zm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVyKSB7CisgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVD
b2RlQmxvY2sgPSBtX2ppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKTsKKyAgICAg
ICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IG1faml0LmJhc2VsaW5l
Q29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKTsKKyAgICAgICAgVmVjdG9yPEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENv
ZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIpOworICAgICAgICB1bnNpZ25lZCBy
ZXR1cm5CeXRlY29kZUluZGV4ID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRl
eCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7CisgICAgICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVu
c2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29k
ZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgcmV0dXJuQnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobWFwcGluZyk7CisgICAgICAgIEFTU0VS
VChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNvZGVJbmRleCk7CisgICAg
ICAgIAorICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5n
ZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKwor
ICAgICAgICBHUFJSZWcgY2FsbGVyRnJhbWVHUFI7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKEFz
c2VtYmx5SGVscGVyczo6SW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICAgICAgY2FsbGVyRnJhbWVH
UFIgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjYWxsZXJG
cmFtZUdQUiA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyOworICAgICAgICAKKyAgICAgICAg
bV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29k
ZUJsb2NrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpKTsK
KyAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSkpOworICAg
ICAgICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZWUtPnNjb3BlKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Io
KFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVy
RmlsZTo6U2NvcGVDaGFpbikpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBl
cnM6OkltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmly
dHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxl
OjpDYWxsZXJGcmFtZSkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIs
IEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSkpKTsKKyAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJn
ZXQpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpKSk7CisgICAg
ICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpKSk7CisgICAg
ICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxS
ZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6QXJn
dW1lbnRDb3VudCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6Oklt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxs
ZWUpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5
bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
UmVnaXN0ZXJGaWxlOjpDYWxsZWUpKSk7CisgICAgfQorICAgIAorICAgIGlmIChleGl0Lm1fY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIG1faml0LmFkZFB0cihBc3NlbWJseUhl
bHBlcnM6OkltbTMyKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OworCisgICAgLy8gMTUpIEp1bXAgaW50byB0aGUgY29ycmVzcG9uZGluZyBiYXNlbGluZSBKSVQg
Y29kZS4KKyAgICAKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuYmFz
ZWxpbmVDb2RlQmxvY2tGb3IoZXhpdC5tX2NvZGVPcmlnaW4pOworICAgIFZlY3RvcjxCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCA9IG1faml0LmRlY29kZWRDb2RlTWFw
Rm9yKGJhc2VsaW5lQ29kZUJsb2NrKTsKKyAgICAKKyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNp
Z25lZCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4PihkZWNvZGVk
Q29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIGV4aXQubV9jb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIEFTU0VSVChtYXBwaW5nKTsKKyAgICBBU1NFUlQo
bWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgpOworICAgIAorICAgIHZvaWQqIGp1bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmFzZWxpbmVDb2RlQmxvY2stPmdldEpJVENv
ZGUoKS5zdGFydCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOworICAgIAorICAg
IEFTU0VSVChHUFJJbmZvOjpyZWdUMiAhPSBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3RlciAm
JiBHUFJJbmZvOjpyZWdUMiAhPSBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3RlcjIpOworICAg
IAorICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJn
ZXQpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgbV9qaXQuanVtcChHUFJJbmZvOjpyZWdUMik7CisK
KyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZnByaW50ZihzdGRlcnIsICIgICAt
PiAlcFxuIiwganVtcFRhcmdldCk7CisjZW5kaWYKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpICYmIFVTRShKU1ZBTFVFMzJfNjQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkgJiYgVVNFKEpTVkFMVUU2NCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
Cit2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgT1NSRXhpdCYgZXhpdCwg
U3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCit7CisgICAgLy8gMSkgUHJvLWZvcm1hIHN0
dWZmLgorICAgIGV4aXQubV9jaGVjay5saW5rKCZtX2ppdCk7CisKKyNpZiBERkdfRU5BQkxFKERF
QlVHX1ZFUkJPU0UpCisgICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQg
KCIsIChpbnQpZXhpdC5tX25vZGVJbmRleCk7CisgICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBleGl0Lm1fY29kZU9yaWdpbjsgOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUtPmNhbGxlcikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImJjIyV1IiwgY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAt
PiAlcCAiLCBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7Cisg
ICAgfQorICAgIGZwcmludGYoc3RkZXJyLCAiKSBhdCBKSVQgb2Zmc2V0IDB4JXggICIsIG1faml0
LmRlYnVnT2Zmc2V0KCkpOworICAgIGV4aXQuZHVtcChzdGRlcnIpOworI2VuZGlmCisjaWYgREZH
X0VOQUJMRShWRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCisgICAgU3BlY3VsYXRpb25GYWls
dXJlRGVidWdJbmZvKiBkZWJ1Z0luZm8gPSBuZXcgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZv
OworICAgIGRlYnVnSW5mby0+Y29kZUJsb2NrID0gbV9qaXQuY29kZUJsb2NrKCk7CisgICAgZGVi
dWdJbmZvLT5kZWJ1Z09mZnNldCA9IG1faml0LmRlYnVnT2Zmc2V0KCk7CisgICAgCisgICAgbV9q
aXQuZGVidWdDYWxsKGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUsIGRlYnVn
SW5mbyk7CisjZW5kaWYKKyAgICAKKyNpZiBERkdfRU5BQkxFKEpJVF9CUkVBS19PTl9TUEVDVUxB
VElPTl9GQUlMVVJFKQorICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgIAorI2lm
IERGR19FTkFCTEUoU1VDQ0VTU19TVEFUUykKKyAgICBzdGF0aWMgU2FtcGxpbmdDb3VudGVyIGNv
dW50ZXIoIlNwZWN1bGF0aW9uRmFpbHVyZSIpOworICAgIG1faml0LmVtaXRDb3VudChjb3VudGVy
KTsKKyNlbmRpZgorICAgIAorICAgIC8vIDIpIFBlcmZvcm0gc3BlY3VsYXRpb24gcmVjb3Zlcnku
IFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBhbiBvcGVyYXRpb24KKyAgICAvLyAgICBz
dGFydHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlmeWluZyB0aGUgc3BlY3VsYXRpb24gaXQg
aGFzIGFscmVhZHkgbWFkZS4KKyAgICAKKyAgICBHUFJSZWcgYWxyZWFkeUJveGVkID0gSW52YWxp
ZEdQUlJlZzsKKyAgICAKKyAgICBpZiAocmVjb3ZlcnkpIHsKKyAgICAgICAgc3dpdGNoIChyZWNv
dmVyeS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGQ6CisgICAgICAgICAg
ICBtX2ppdC5zdWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAg
ICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVy
eS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIGFscmVhZHlCb3hlZCA9IHJlY292ZXJ5LT5kZXN0KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEJvb2xlYW5T
cGVjdWxhdGlvbkNoZWNrOgorICAgICAgICAgICAgbV9qaXQueG9yUHRyKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVjb3Zl
cnktPmRlc3QoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAz
KSBSZWZpbmUgc29tZSB2YWx1ZSBwcm9maWxlLCBpZiBhcHByb3ByaWF0ZS4KKyAgICAKKyAgICBp
ZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSAmJiAhIWV4aXQubV92YWx1ZVByb2ZpbGUpIHsKKyAg
ICAgICAgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmlzQWRkcmVzcygpKSB7CisgICAgICAgICAg
ICAvLyBXZSBjYW4ndCBiZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIHNwYXJlIHJlZ2lzdGVyLiBTbyB1
c2UgdGhlIHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwKKyAgICAgICAgICAgIC8vIHNpbmNlIHdlIGtu
b3cgaG93IHRvIHJlc3RvcmUgaXQuCisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5
SGVscGVyczo6QWRkcmVzcyhleGl0Lm1fanNWYWx1ZVNvdXJjZS5hc0FkZHJlc3MoKSksIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGV4aXQubV92YWx1ZVByb2ZpbGUtPnNwZWNG
YWlsQnVja2V0KDApKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oVGFnVHlwZU51bWJlcikpLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKGV4aXQubV9qc1ZhbHVlU291cmNlLmdwcigpLCBleGl0Lm1fdmFsdWVQcm9m
aWxlLT5zcGVjRmFpbEJ1Y2tldCgwKSk7CisgICAgfQorCisgICAgLy8gNCkgRmlndXJlIG91dCBo
b3cgbWFueSBzY3JhdGNoIHNsb3RzIHdlJ2xsIG5lZWQuIFdlIG5lZWQgb25lIGZvciBldmVyeSBH
UFIvRlBSCisgICAgLy8gICAgd2hvc2UgZGVzdGluYXRpb24gaXMgbm93IG9jY3VwaWVkIGJ5IGEg
REZHIHZpcnR1YWwgcmVnaXN0ZXIsIGFuZCB3ZSBuZWVkCisgICAgLy8gICAgb25lIGZvciBldmVy
eSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlciBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuCisgICAg
Ly8gICAgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgb2YgdGhlbS4gQWxzbyBzZWUgaWYgdGhl
cmUgYXJlIGFueSBjb25zdGFudHMsCisgICAgLy8gICAgYW55IHVuZGVmaW5lZCBzbG90cywgYW55
IEZQUiBzbG90cywgYW5kIGFueSB1bmJveGVkIGludHMuCisgICAgICAgICAgICAKKyAgICBWZWN0
b3I8Ym9vbD4gcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKGV4aXQubV92YXJpYWJsZXMuc2l6ZSgp
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJz
LnNpemUoKTsgKytpKQorICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbaV0gPSBmYWxz
ZTsKKworICAgIHVuc2lnbmVkIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzID0gMDsK
KyAgICB1bnNpZ25lZCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPSAwOworICAg
IAorICAgIC8vIEJvb2xlYW5zIGZvciBmYXN0IGNoZWNrcy4gV2UgZXhwZWN0IHRoYXQgbW9zdCBP
U1IgZXhpdHMgZG8gbm90IGhhdmUgdG8gcmVib3gKKyAgICAvLyBJbnQzMnMsIGhhdmUgbm8gRlBS
cywgYW5kIGhhdmUgbm8gY29uc3RhbnRzLiBJZiB0aGVyZSBhcmUgY29uc3RhbnRzLCB3ZQorICAg
IC8vIGV4cGVjdCBtb3N0IG9mIHRoZW0gdG8gYmUganNVbmRlZmluZWQoKTsgaWYgdGhhdCdzIHRy
dWUgdGhlbiB3ZSBoYW5kbGUgdGhhdAorICAgIC8vIHNwZWNpYWxseSB0byBtaW5pbWl6ZSBjb2Rl
IHNpemUgYW5kIGV4ZWN1dGlvbiB0aW1lLgorICAgIGJvb2wgaGF2ZVVuYm94ZWRJbnQzMnMgPSBm
YWxzZTsKKyAgICBib29sIGhhdmVGUFJzID0gZmFsc2U7CisgICAgYm9vbCBoYXZlQ29uc3RhbnRz
ID0gZmFsc2U7CisgICAgYm9vbCBoYXZlVW5kZWZpbmVkID0gZmFsc2U7CisgICAgCisgICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVl
UmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
CisgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgY2Fz
ZSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgY2FzZSBEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lz
dGVycysrOworICAgICAgICAgICAgQVNTRVJUKChpbnQpcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVy
KCkgPj0gMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBtaWdodCBs
aWtlIHRvIHN0b3JlIHRvIHRoaXMgdmlydHVhbCByZWdpc3RlciBiZWZvcmUgZG9pbmcKKyAgICAg
ICAgICAgIC8vIHZpcnR1YWwgcmVnaXN0ZXIgc2h1ZmZsaW5nLiBJZiBzbywgd2Ugc2F5IHRoYXQg
dGhlIHZpcnR1YWwgcmVnaXN0ZXIKKyAgICAgICAgICAgIC8vIGlzIHBvaXNvbmVkOiBpdCBjYW5u
b3QgYmUgc3RvcmVkIHRvIHVudGlsIGFmdGVyIGRpc3BsYWNlZCB2aXJ0dWFsCisgICAgICAgICAg
ICAvLyByZWdpc3RlcnMgYXJlIGhhbmRsZWQuIFdlIHRyYWNrIHBvaXNvbmVkIHZpcnR1YWwgcmVn
aXN0ZXIgY2FyZWZ1bGx5CisgICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhpcyBoYXBwZW5zIGVm
ZmljaWVudGx5LiBOb3RlIHRoYXQgd2UgZXhwZWN0IHRoaXMgY2FzZQorICAgICAgICAgICAgLy8g
dG8gYmUgcmFyZSwgc28gdGhlIGhhbmRsaW5nIG9mIGl0IGlzIG9wdGltaXplZCBmb3IgdGhlIGNh
c2VzIGluCisgICAgICAgICAgICAvLyB3aGljaCBpdCBkb2VzIG5vdCBoYXBwZW4uCisgICAgICAg
ICAgICBpZiAocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAoaW50KWV4aXQubV92YXJpYWJs
ZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChleGl0Lm1fdmFyaWFibGVzW3Jl
Y292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpXS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgICAg
IGNhc2UgSW5HUFI6CisgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAg
ICAgICAgICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAgICAgICAgICBpZiAoIXBvaXNv
bmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKV0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZQ
b2lzb25lZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMklu
R1BSOgorICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgor
ICAgICAgICAgICAgaGF2ZVVuYm94ZWRJbnQzMnMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgIGhhdmVGUFJz
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
Q29uc3RhbnQ6CisgICAgICAgICAgICBoYXZlQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAg
IGlmIChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAg
aGF2ZVVuZGVmaW5lZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgIGZwcmludGYoc3RkZXJyLCAi
ICAiKTsKKyAgICBpZiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpCisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiUG9pc29uZWQ9JXUgIiwgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnMpOworICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpCisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiRGlzcGxhY2VkPSV1ICIsIG51bWJlck9mRGlzcGxhY2Vk
VmlydHVhbFJlZ2lzdGVycyk7CisgICAgaWYgKGhhdmVVbmJveGVkSW50MzJzKQorICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIlVuYm94ZWRJbnQzMiAiKTsKKyAgICBpZiAoaGF2ZUZQUnMpCisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiRlBSICIpOworICAgIGlmIChoYXZlQ29uc3RhbnRzKQorICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbnN0YW50cyAiKTsKKyAgICBpZiAoaGF2ZVVuZGVmaW5l
ZCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmRlZmluZWQgIik7CisgICAgZnByaW50Zihz
dGRlcnIsICIgIik7CisjZW5kaWYKKyAgICAKKyAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaEJ1
ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4obV9qaXQuZ2xvYmFsRGF0YSgpLT5z
Y3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKG51bWJlck9mUG9p
c29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVy
cyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA/IDAgOiBudW1iZXJPZkRpc3BsYWNlZFZp
cnR1YWxSZWdpc3RlcnMpKSkpOworCisgICAgLy8gRnJvbSBoZXJlIG9uLCB0aGUgY29kZSBhc3N1
bWVzIHRoYXQgaXQgaXMgcHJvZml0YWJsZSB0byBtYXhpbWl6ZSB0aGUgZGlzdGFuY2UKKyAgICAv
LyBiZXR3ZWVuIHdoZW4gc29tZXRoaW5nIGlzIGNvbXB1dGVkIGFuZCB3aGVuIGl0IGlzIHN0b3Jl
ZC4KKyAgICAKKyAgICAvLyA1KSBQZXJmb3JtIGFsbCByZWJveGluZyBvZiBpbnRlZ2Vycy4KKyAg
ICAKKyAgICBpZiAoaGF2ZVVuYm94ZWRJbnQzMnMpIHsKKyAgICAgICAgZm9yIChpbnQgaW5kZXgg
PSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5
KGluZGV4KTsKKyAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICAgICAgaWYgKHJl
Y292ZXJ5LmdwcigpICE9IGFscmVhZHlCb3hlZCkKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
b3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS5ncHIoKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNl
IEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgorICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4o
VGFnVHlwZU51bWJlciA+PiAzMikpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgLy8gNikgRHVtcCBhbGwgbm9uLXBvaXNvbmVkIEdQUnMuIEZvciBwb2lzb25l
ZCBHUFJzLCBzYXZlIHRoZW0gaW50byB0aGUgc2NyYXRjaCBzdG9yYWdlLgorICAgIC8vICAgIE5v
dGUgdGhhdCBHUFJzIGRvIG5vdCBoYXZlIGEgZmFzdCBjaGFuZ2UgKGxpa2UgaGF2ZUZQUnMpIGJl
Y2F1c2Ugd2UgZXhwZWN0IHRoYXQKKyAgICAvLyAgICBtb3N0IE9TUiBmYWlsdXJlIHBvaW50cyB3
aWxsIGhhdmUgYXQgbGVhc3Qgb25lIEdQUiB0aGF0IG5lZWRzIHRvIGJlIGR1bXBlZC4KKyAgICAK
KyAgICB1bnNpZ25lZCBzY3JhdGNoSW5kZXggPSAwOworICAgIGZvciAoaW50IGluZGV4ID0gMDsg
aW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsK
KyAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAg
ICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBJbkdQUjoK
KyAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgIGlmIChleGl0Lmlz
VmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSkKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWNvdmVy
eS5ncHIoKSwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWNvdmVyeS5ncHIoKSwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50IGFsbCBHUFJzIGFyZSBhdmFp
bGFibGUgZm9yIHNjcmF0Y2ggdXNlLgorICAgIAorICAgIGlmIChoYXZlRlBScykgeworICAgICAg
ICAvLyA3KSBCb3ggYWxsIGRvdWJsZXMgKHJlbGllcyBvbiB0aGVyZSBiZWluZyBtb3JlIEdQUnMg
dGhhbiBGUFJzKQorICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8
IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAg
ICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSByZWNvdmVyeS5mcHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQUkluZm86OnRv
SW5kZXgoZnByKSk7CisgICAgICAgICAgICBtX2ppdC5ib3hEb3VibGUoZnByLCBncHIpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyA4KSBEdW1wIGFsbCBkb3VibGVzIGludG8gdGhl
IHJlZ2lzdGVyIGZpbGUsIG9yIHRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UgaWYKKyAgICAgICAgLy8g
ICAgdGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgcmVnaXN0ZXIgaXMgcG9pc29uZWQuCisgICAgICAg
IAorICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292
ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgaWYgKHJlY292
ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6dG9JbmRl
eChyZWNvdmVyeS5mcHIoKSkpOworICAgICAgICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRl
eCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRl
eCldKQorICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGdwciwgc2NyYXRjaEJ1ZmZlciAr
IHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cihncHIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lz
dGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnMpOworICAgIAorICAgIC8vIDkpIFJlc2h1ZmZsZSBkaXNwbGFjZWQgdmlydHVhbCByZWdp
c3RlcnMuIE9wdGltaXplIGZvciB0aGUgY2FzZSB0aGF0CisgICAgLy8gICAgdGhlIG51bWJlciBv
ZiBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMgaXMgbm90IG1vcmUgdGhhbiB0aGUgbnVtYmVy
CisgICAgLy8gICAgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIHJlZ2lzdGVycy4KKyAgICAKKyAgICBp
ZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7CisgICAgICAgIGlmIChudW1i
ZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMpIHsKKyAgICAgICAgICAgIC8vIFNvIGZhciB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlIGNhc2Ug
dGhhdCB0cmlnZ2VycyBhbGwgdGhlIHRpbWUsIGJ1dAorICAgICAgICAgICAgLy8gdGhhdCBpcyBm
YXIgZnJvbSBndWFyYW50ZWVkLgorICAgICAgICAKKyAgICAgICAgICAgIHVuc2lnbmVkIGRpc3Bs
YWNlbWVudEluZGV4ID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgp
OworICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgr
KykpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOiB7CisgICAg
ICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNl
bWVudEluZGV4KyspOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgZ3ByKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCBncHIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxh
Y2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQ
UkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyk7CisgICAgICAgICAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZp
cnR1YWxSZWdpc3RlcigpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViUHRy
KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgZGlzcGxhY2Vt
ZW50SW5kZXggPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4
aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25z
dCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICAgICAgY2Fz
ZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgIGNhc2UgRG91
YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyksIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4
KGluZGV4KSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgc2h1ZmZsaW5nIGFsZ29yaXRo
bSB0aGF0IHdlIHVzZQorICAgICAgICAgICAgLy8gZm9yIHNwZWN1bGF0aXZlLT5ub24tc3BlY3Vs
YXRpdmUganVtcHMsIGlmIHdlIGV2ZXIgZGlzY292ZXIgdGhhdAorICAgICAgICAgICAgLy8gc29t
ZSBob3QgY29kZSB3aXRoIGxvdHMgb2YgbGl2ZSB2YWx1ZXMgdGhhdCBnZXQgZGlzcGxhY2VkIGFu
ZAorICAgICAgICAgICAgLy8gc3BpbGxlZCByZWFsbHkgZW5qb3lzIGZyZXF1ZW50bHkgZmFpbGlu
ZyBzcGVjdWxhdGlvbi4KKyAgICAgICAgCisgICAgICAgICAgICAvLyBGb3Igbm93IHRoaXMgY29k
ZSBpcyBlbmdpbmVlcmVkIHRvIGJlIGNvcnJlY3QgYnV0IHByb2JhYmx5IG5vdAorICAgICAgICAg
ICAgLy8gc3VwZXIuIEluIHBhcnRpY3VsYXIsIGl0IGNvcnJlY3RseSBoYW5kbGVzIGNhc2VzIHdo
ZXJlIGZvciBleGFtcGxlCisgICAgICAgICAgICAvLyB0aGUgZGlzcGxhY2VtZW50cyBhcmUgYSBw
ZXJtdXRhdGlvbiBvZiB0aGUgZGVzdGluYXRpb24gdmFsdWVzLCBsaWtlCisgICAgICAgICAgICAv
LworICAgICAgICAgICAgLy8gMSAtPiAyCisgICAgICAgICAgICAvLyAyIC0+IDEKKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyBJdCBhY2NvbXBsaXNoZXMgdGhpcyBieSBzaW1wbHkgbGlm
dGluZyBhbGwgb2YgdGhlIHZpcnR1YWwgcmVnaXN0ZXJzCisgICAgICAgICAgICAvLyBmcm9tIHRo
ZWlyIG9sZCAoREZHIEpJVCkgbG9jYXRpb25zIGFuZCBkcm9wcGluZyB0aGVtIGluIGEgc2NyYXRj
aAorICAgICAgICAgICAgLy8gbG9jYXRpb24gaW4gbWVtb3J5LCBhbmQgdGhlbiB0cmFuc2ZlcnJp
bmcgZnJvbSB0aGF0IHNjcmF0Y2ggbG9jYXRpb24KKyAgICAgICAgICAgIC8vIHRvIHRoZWlyIG5l
dyAob2xkIEpJVCkgbG9jYXRpb25zLgorICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVl
UmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRj
aCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNl
ZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6
cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIElu
dDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0
ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQub3JQdHIo
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoQnVmZmVy
ICsgc2NyYXRjaEluZGV4KyspOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgRG91
YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YlB0
cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZm
ZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIHNjcmF0Y2hJbmRleCA9IG51bWJlck9mUG9p
c29uZWRWaXJ0dWFsUmVnaXN0ZXJzOworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBp
bmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShp
bmRleCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAg
ICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAg
IGNhc2UgRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1Qw
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJh
bmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzICsgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICAvLyAxMCkgRHVtcCBhbGwgcG9pc29uZWQgdmlydHVhbCByZWdp
c3RlcnMuCisgICAgCisgICAgc2NyYXRjaEluZGV4ID0gMDsKKyAgICBpZiAobnVtYmVyT2ZQb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnMpIHsKKyAgICAgICAgZm9yIChpbnQgdmlydHVhbFJlZ2lzdGVy
ID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgKGludClleGl0Lm1fdmFyaWFibGVzLnNpemUoKTsgKyt2
aXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgIGlmICghcG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzW3ZpcnR1YWxSZWdpc3Rlcl0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC5t
X3ZhcmlhYmxlc1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVy
eS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgICAgIGNh
c2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAg
ICAgICAgIG1faml0LmxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVn
VDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxS
ZWdpc3RlcikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9p
c29uZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAgICAKKyAgICAvLyAxMSkgRHVtcCBhbGwgY29uc3Rh
bnRzLiBPcHRpbWl6ZSBmb3IgVW5kZWZpbmVkLCBzaW5jZSB0aGF0J3MgYSBjb25zdGFudCB3ZSBz
ZWUKKyAgICAvLyAgICAgb2Z0ZW4uCisKKyAgICBpZiAoaGF2ZUNvbnN0YW50cykgeworICAgICAg
ICBpZiAoaGF2ZVVuZGVmaW5lZCkKKyAgICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25z
dCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Cisg
ICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ29uc3RhbnQpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQoKS5p
c1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJl
Z1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9w
ZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKHJlY292ZXJ5LmNvbnN0YW50KCkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgLy8gMTIpIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUg
Y291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93CisgICAgLy8gICAgIHRo
YXQgYWxsIG5ldyBjYWxscyBpbnRvIHRoaXMgY29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBz
byB0aGUgZXhlY3V0ZQorICAgIC8vICAgICBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1l
cyB0aGF0IHBlcmZvcm1lZCBPU1IgZXhpdCBhbmQgY2FsbCBmcmFtZXMKKyAgICAvLyAgICAgdGhh
dCB3ZXJlIHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVy
IGNhbGwgZnJhbWUncworICAgIC8vICAgICBPU1IgZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhh
dCB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisgICAgLy8KKyAgICAvLyAgICAgKGEpIENvZGUgdGhl
IHBlcmZvcm1zIGFuIE9TUiBleGl0IGdldHMgYSBjaGFuY2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQK
KyAgICAvLyAgICAgICAgIGNvZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0aW1pemVkIGNvZGUgaXMg
ZmFzdGVyLiBCdXQgd2UgZG9uJ3QKKyAgICAvLyAgICAgICAgIHdhbnQgdG8gZG8gc3VjaCByZWVu
dGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KKyAgICAvLworICAgIC8vICAg
ICAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUgY2FsbCBzdGFjayB0aGF0IGlzIHN0aWxsIHJ1
bm5pbmcgdGhlIG9sZAorICAgIC8vICAgICAgICAgSklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9T
UidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBjaGFuY2UgdG8KKyAgICAvLyAgICAgICAgIHBlcmZv
cm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCisgICAgLy8K
KyAgICAvLyAgICAgKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IHNob3VsZCBub3Qg
aW1tZWRpYXRlbHkgcmV0cnkgT1NSCisgICAgLy8gICAgICAgICBlbnRyeSwgc2luY2UgYm90aCBm
b3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCisgICAgLy8gICAgICAgICBw
YXJ0aWN1bGFybHkgZXhwZW5zaXZlLgorICAgIC8vCisgICAgLy8gICAgIChkKSBGcmVxdWVudCBP
U1IgZmFpbHVyZXMsIGV2ZW4gdGhvc2UgdGhhdCBkbyBub3QgcmVzdWx0IGluIHRoZSBjb2RlCisg
ICAgLy8gICAgICAgICBydW5uaW5nIGluIGEgaG90IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBpbGF0
aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgorICAgIC8vCisgICAgLy8gICAgIFRvIGVuc3VyZSAoYyks
IHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUgY291bnRlciB0bworICAgIC8vICAgICBjb3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3Vs
ZCBlbmRhbmdlcgorICAgIC8vICAgICAoYSkgYW5kIChiKSwgc2luY2UgdGhlbiBldmVyeSBPU1Ig
ZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9yCisgICAgLy8gICAgIGV2ZXJ5IGNh
bGwgZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVzc2VudGlhbGx5LCBpZiBPU1IgZXhpdCBo
YXBwZW5zCisgICAgLy8gICAgIGZyZXF1ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxv
b3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2ZXIKKyAgICAvLyAgICAgYmVjb21lIG5vbi1u
ZWdhdGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkK
KyAgICAvLyAgICAgd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhlIG9s
ZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKKyAgICAvLyAgICAgZ29vZCBqb2Igb2YgZW5zdXJp
bmcgKGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJlIG9mIChkKSwKKyAgICAv
LyAgICAgc2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVj
dXRlIGNvdW50ZXIuCisgICAgLy8gICAgIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBv
ZiBzcGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5CisgICAgLy8gICAgIGxhcmdl
ciB0aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJhdGUp
LCBhbmQgaWYKKyAgICAvLyAgICAgdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJl
ciBvZiBmYWlsdXJlcy4gSWYgc28sIHdlIHNldCB0aGUKKyAgICAvLyAgICAgY291bnRlciB0byAw
OyBvdGhlcndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCisgICAgLy8gICAgIGNvdW50ZXJWYWx1
ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4KKyAgICAKKyAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKSksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAKKyAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKSwg
R1BSSW5mbzo6cmVnVDIpOworICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZVN1Y2Nlc3ND
b3VudGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgbV9qaXQuYWRkMzIoQXNzZW1ibHlIZWxw
ZXJzOjpJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIG1faml0LmFkZDMyKEFzc2VtYmx5
SGVscGVyczo6SW1tMzIoLTEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgbV9qaXQuc3RvcmUzMihH
UFJJbmZvOjpyZWdUMiwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBD
b2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKSk7CisgICAgbV9qaXQu
c3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7
CisgICAgCisgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9q
aXQuY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisg
ICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGZld0ZhaWxzID0gbV9qaXQuYnJhbmNoMzIoQXNzZW1i
bHlIZWxwZXJzOjpCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBBc3NlbWJseUhlbHBlcnM6
OkltbTMyKG1faml0LmNvZGVCbG9jaygpLT5sYXJnZUZhaWxDb3VudFRocmVzaG9sZCgpKSk7Cisg
ICAgbV9qaXQubXVsMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihIZXVyaXN0aWNzOjpkZXNpcmVk
U3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvKSwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJl
Z1QyKTsKKyAgICAKKyAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgbG93RmFpbFJhdGUgPSBtX2pp
dC5icmFuY2gzMihBc3NlbWJseUhlbHBlcnM6OkJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIs
IEdQUkluZm86OnJlZ1QxKTsKKyAgICAKKyAgICAvLyBSZW9wdGltaXplIGFzIHNvb24gYXMgcG9z
c2libGUuCisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKEhldXJpc3Rp
Y3M6OmV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24pLCBBc3Nl
bWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZF
eGVjdXRlQ291bnRlcigpKSk7CisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGRvbmVBZGp1c3Rp
bmcgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgZmV3RmFpbHMubGluaygmbV9qaXQpOworICAg
IGxvd0ZhaWxSYXRlLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBtX2ppdC5zdG9yZTMyKEFzc2Vt
Ymx5SGVscGVyczo6SW1tMzIobV9qaXQuY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpLCBBc3NlbWJseUhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigp
KSk7CisgICAgCisgICAgZG9uZUFkanVzdGluZy5saW5rKCZtX2ppdCk7CisgICAgCisgICAgLy8g
MTMpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBvcGVyYXRpb24gaW50byBy
ZWdUMC4KKyAgICAKKyAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5tX2xhc3RTZXRPcGVyYW5kKSwg
R1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOworICAgIAorICAgIC8vIDE0KSBGaXggY2Fs
bCBmcmFtZShzKS4KKyAgICAKKyAgICBBU1NFUlQobV9qaXQuY29kZUJsb2NrKCktPmFsdGVybmF0
aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgbV9qaXQu
c3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygp
LT5hbHRlcm5hdGl2ZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKTsKKyAgICAKKyAgICBmb3IgKENvZGVPcmln
aW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsK
KyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZTsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1f
aml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pOworICAgICAgICBDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gbV9qaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3Io
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpOworICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBtX2ppdC5kZWNvZGVkQ29kZU1hcEZvcihiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlcik7CisgICAgICAgIHVuc2lnbmVkIHJldHVybkJ5dGVjb2Rl
SW5kZXggPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xF
TkdUSChvcF9jYWxsKTsKKyAgICAgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5n
ID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVn
aW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCByZXR1cm5CeXRlY29kZUluZGV4KTsKKyAgICAg
ICAgCisgICAgICAgIEFTU0VSVChtYXBwaW5nKTsKKyAgICAgICAgQVNTRVJUKG1hcHBpbmctPm1f
Ynl0ZWNvZGVJbmRleCA9PSByZXR1cm5CeXRlY29kZUluZGV4KTsKKyAgICAgICAgCisgICAgICAg
IHZvaWQqIGp1bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldEpJVENvZGUoKS5z
dGFydCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOworCisgICAgICAgIEdQUlJl
ZyBjYWxsZXJGcmFtZUdQUjsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlu
bGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVy
czo6SW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZv
OjpyZWdUMzsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyOworICAgICAgICAKKyAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpKTsKKyAgICAgICAgbV9q
aXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVlLT5zY29wZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OlNj
b3BlQ2hhaW4pKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpKSk7CisgICAgICAgIG1f
aml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwg
QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OlJldHVyblBDKSkpOworICAgICAgICBt
X2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkpKSwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIG1f
aml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlZS5nZXQoKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxs
ZWUpKSk7CisgICAgfQorICAgIAorICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpCisgICAgICAgIG1faml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OkltbTMyKGV4aXQu
bV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIAorICAgIC8vIDE1
KSBKdW1wIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYmFzZWxpbmUgSklUIGNvZGUuCisgICAgCisg
ICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGV4aXQubV9jb2RlT3JpZ2luKTsKKyAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zm
c2V0PiYgZGVjb2RlZENvZGVNYXAgPSBtX2ppdC5kZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNv
ZGVCbG9jayk7CisgICAgCisgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0g
YmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4o
KSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
KTsKKyAgICAKKyAgICBBU1NFUlQobWFwcGluZyk7CisgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0
ZWNvZGVJbmRleCA9PSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAKKyAg
ICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGJhc2VsaW5lQ29kZUJsb2NrLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkg
KyBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICAKKyAgICBBU1NFUlQoR1BSSW5m
bzo6cmVnVDEgIT0gR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOworICAgIAorICAgIG1f
aml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJ
bmZvOjpyZWdUMSk7CisgICAgbV9qaXQuanVtcChHUFJJbmZvOjpyZWdUMSk7CisKKyNpZiBERkdf
RU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZnByaW50ZihzdGRlcnIsICItPiAlcFxuIiwganVt
cFRhcmdldCk7CisjZW5kaWYKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpICYmIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHT1NSRXhpdENvbXBpbGVyX2gKKyNkZWZpbmUgREZHT1NS
RXhpdENvbXBpbGVyX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBc3NlbWJseUhlbHBlcnMuaCIKKyNpbmNsdWRlICJE
RkdPU1JFeGl0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
T1NSRXhpdENvbXBpbGVyIHsKK3B1YmxpYzoKKyAgICBPU1JFeGl0Q29tcGlsZXIoQXNzZW1ibHlI
ZWxwZXJzJiBqaXQpCisgICAgICAgIDogbV9qaXQoaml0KQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjb21waWxlRXhpdChjb25zdCBPU1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSop
OworCitwcml2YXRlOgorICAgIEFzc2VtYmx5SGVscGVycyYgbV9qaXQ7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR09TUkV4aXRDb21waWxlcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNWYWx1ZS5oCShyZXZpc2lvbiA5OTU0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgY2xhc3MgSklUQ29tcGlsZXI7CiAgICAgICAgIGNsYXNzIEpJVENv
ZGVHZW5lcmF0b3I7CiAgICAgICAgIGNsYXNzIEpTVmFsdWVTb3VyY2U7CisgICAgICAgIGNsYXNz
IE9TUkV4aXRDb21waWxlcjsKICAgICAgICAgY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CiAgICAgfQog
I2VuZGlmCkBAIC0xMTQsNiArMTE1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBERkc6OkpJVENvbXBpbGVyOwogICAgICAgICBmcmllbmQgY2xhc3MgREZHOjpKSVRD
b2RlR2VuZXJhdG9yOwogICAgICAgICBmcmllbmQgY2xhc3MgREZHOjpKU1ZhbHVlU291cmNlOwor
ICAgICAgICBmcmllbmQgY2xhc3MgREZHOjpPU1JFeGl0Q29tcGlsZXI7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklUOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDk5NTQwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC04ODMsNyArODgzLDcgQEAK
ICNlbmRpZgogCiAvKiBDdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBmb3IgSlNWQUxVRTY0LCBv
bmx5IHRlc3RlZCBvbiBQTEFURk9STShNQUMpICovCi0jaWYgIWRlZmluZWQoRU5BQkxFX0RGR19K
SVQpICYmIEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFNjQpICYmIFBMQVRGT1JNKE1BQykKKyNp
ZiAhZGVmaW5lZChFTkFCTEVfREZHX0pJVCkgJiYgRU5BQkxFKEpJVCkgJiYgUExBVEZPUk0oTUFD
KQogI2RlZmluZSBFTkFCTEVfREZHX0pJVCAxCiAjZW5kaWYKIAo=
</data>
<flag name="commit-queue"
          id="112574"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114150</attachid>
            <date>2011-11-08 14:01:20 -0800</date>
            <delta_ts>2011-11-08 14:15:12 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>osrexit_patch_4.diff</filename>
            <type>text/plain</type>
            <size>130626</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTk2MTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAK
KzIwMTEtMTEtMDggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgT1NSIGV4aXQgY29kZSBzaG91bGQgYmUgZ2VuZXJhdGVkIGJ5IGEgc2VwYXJhdGUgY29tcGls
ZXIsIG5vdAorICAgICAgICByZWxhdGVkIHRvIERGRzo6SklUQ29tcGlsZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNzg3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBNb3ZlcyB0aGUgZXhp
dFNwZWN1bGF0aXZlV2l0aE9TUigpIG1ldGhvZCBmcm9tIEpJVENvbXBpbGVyIHRvCisgICAgICAg
IE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoKS4KKworICAgICAgICAqIENNYWtlTGlzdHNF
ZmwudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlcjMyXzY0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4
aXRDb21waWxlcjo6T1NSRXhpdENvbXBpbGVyKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENv
bXBpbGVyMzJfNjQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KToKKyAgICAgICAgKiBydW50aW1lL0pTVmFsdWUuaDoKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0u
aDoKKwogMjAxMS0xMS0wOCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5j
b20+CiAKICAgICAgICAgREZHIEpJVCBjYWxjdWxhdGlvbiBvZiBPU1IgZW50cnkgcG9pbnRzIGlz
IG5vdCBUSFVNQjIgc2FmZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHNF
ZmwudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzRWZs
LnR4dAkocmV2aXNpb24gOTk2MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
c0VmbC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDkgQEAgTElTVChBUFBFTkQgSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAogICAg
IGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwCiAgICAgZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAotICAgIGRmZy9ERkdKSVRDb21waWxlcjMyXzY0LmNwcAogICAgIGRmZy9ERkdPcGVyYXRp
b25zLmNwcAogICAgIGRmZy9ERkdPU1JFbnRyeS5jcHAKKyAgICBkZmcvREZHT1NSRXhpdENvbXBp
bGVyMzJfNjQuY3BwCiAgICAgZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCiAgICAgZGZnL0RGR1JlcGF0
Y2guY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L1RhcmdldC5wcmkJKHJldmlzaW9uIDk5NjEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Rh
cmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTkyLDkgKzkyLDEwIEBAIFNPVVJDRVMgKz0gXAog
ICAgIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwIFwKICAgICBkZmcvREZHSklUQ29k
ZUdlbmVyYXRvcjY0LmNwcCBcCiAgICAgZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBcCi0gICAgZGZn
L0RGR0pJVENvbXBpbGVyMzJfNjQuY3BwIFwKICAgICBkZmcvREZHT3BlcmF0aW9ucy5jcHAgXAog
ICAgIGRmZy9ERkdPU1JFbnRyeS5jcHAgXAorICAgIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5j
cHAgXAorICAgIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAgXAogICAgIGRmZy9ERkdQ
cm9wYWdhdG9yLmNwcCBcCiAgICAgZGZnL0RGR1JlcGF0Y2guY3BwIFwKICAgICBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiA5OTYxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw5IEBACiAJ
CTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIg
LyogREZHT1NSRXhpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQzA5NzZEMTQ2OEFCNEUwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzZD
MTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkMwOTc2RTE0NjhBQjUxMDBDRjI0
NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJs
eUhlbHBlcnMuY3BwICovOyB9OworCQkwRkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NS
RXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkMwOTc2RjE0NjkzQUVGMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDMDk3NzIx
NDY5M0FGOTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzcwMTQ2OTNBRUYwMENGMjQ0
MiAvKiBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAgKi87IH07CisJCTBGQzA5Nzc2MTQ2OTQzQjAw
MENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc3NTE0Njk0M0FEMDBDRjI0NDIgLyog
REZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwICovOyB9OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBD
RkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFy
cmllclN1cHBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUw
ODE0MDQzQkNBMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CiAJCTBG
QzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAz
IC8qIFZUYWJsZVNwZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTMxOCw3ICszMjEsNiBAQAogCQk4NjcwNEI4OTEyREJBMzM3MDBBOUZF
N0IgLyogWWFyclBhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODY3MDRCODIxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmNwcCAq
LzsgfTsKIAkJODY3MDRCOEExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjcwNEI4MzEyREJBMzM3
MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk4Njg4MEYxQzE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29k
ZUdlbmVyYXRvcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2ODgwRjE4MTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9y
MzJfNjQuY3BwICovOyB9OwotCQk4Njg4MEYxRDE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29t
cGlsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4Njg4MEYxOTE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGlsZXIzMl82NC5jcHAg
Ki87IH07CiAJCTg2ODgwRjFFMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcklubGlu
ZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2ODgwRjFBMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcklubGluZU1ldGhvZHMu
aCAqLzsgfTsKIAkJODY4ODBGMUYxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICov
OyB9OwogCQk4Njg4MEY0NDE0MzUzMUE4MDBCMDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRvcjY0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgw
RjQzMTQzNTMxQTcwMEIwOEQ0MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwICovOyB9OwpA
QCAtODM5LDYgKzg0MSw5IEBACiAJCTBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JF
eGl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXQuaDsgcGF0
aCA9IGRmZy9ERkdPU1JFeGl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5
NzZCMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXNzZW1ibHlIZWxwZXJzLmNwcDsgcGF0aCA9
IGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fzc2VtYmx5SGVscGVycy5oOyBwYXRoID0g
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkMwOTc2RjE0NjkzQUVGMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlci5oOyBwYXRoID0gZGZn
L0RGR09TUkV4aXRDb21waWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMw
OTc3MDE0NjkzQUVGMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOyBw
YXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZDMDk3NzUxNDY5NDNBRDAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjMy
XzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRD
b21waWxlcjMyXzY0LmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAv
KiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBW
VGFibGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
VGFibGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTAwLDcg
KzExMDUsNiBAQAogCQk4NjdGQzM1RjExQjc2Mzk1MDAyNTEwNUUgLyogSmF2YVNjcmlwdENvcmUu
SlNWQUxVRTMyXzY0b25seS5leHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmV4cG9ydHM7IHBhdGgg
PSBKYXZhU2NyaXB0Q29yZS5KU1ZBTFVFMzJfNjRvbmx5LmV4cDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODY3RkMzNjExMUI3NjM5NTAwMjUxMDVFIC8qIEphdmFTY3JpcHRDb3JlLkpT
VkFMVUU2NG9ubHkuZXhwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5leHBvcnRzOyBwYXRoID0gSmF2
YVNjcmlwdENvcmUuSlNWQUxVRTY0b25seS5leHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg2ODgwRjE4MTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSklUQ29kZUdlbmVy
YXRvcjMyXzY0LmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4Njg4MEYxOTE0MzI4QkI5MDBCMDhENDIgLyog
REZHSklUQ29tcGlsZXIzMl82NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdKSVRDb21waWxlcjMyXzY0LmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb21waWxlcjMy
XzY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4ODBGMUExNDMyOEJCOTAw
QjA4RDQyIC8qIERGR0pJVENvbXBpbGVySW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb21waWxlcklubGluZU1ldGhvZHMuaDsgcGF0aCA9IGRm
Zy9ERkdKSVRDb21waWxlcklubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHA7IHBhdGggPSBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2ODgwRjQzMTQzNTMxQTcwMEIwOEQ0MiAvKiBERkdK
SVRDb2RlR2VuZXJhdG9yNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI5OCw2ICsyMzAyLDkg
QEAKIAkJODZFQzlEQjMxMzI4REY0NDAwMkIyQUQ3IC8qIGRmZyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZDMDk3NzUxNDY5NDNBRDAwQ0YyNDQyIC8q
IERGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCAqLywKKwkJCQkwRkMwOTc2RjE0NjkzQUVGMDBD
RjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggKi8sCisJCQkJMEZDMDk3NzAxNDY5M0FFRjAw
Q0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0LmNwcCAqLywKIAkJCQkwRkMwOTc2QjE0NjhB
QjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmNwcCAqLywKIAkJCQkwRkMwOTc2QzE0
NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmggKi8sCiAJCQkJMEZDMDk3Njgx
NDY4QTZFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCAqLywKQEAgLTIzMjYsNyArMjMzMyw2IEBA
CiAJCQkJODY4ODBGNDMxNDM1MzFBNzAwQjA4RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3I2NC5j
cHAgKi8sCiAJCQkJODZFQzlEQkIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmNw
cCAqLywKIAkJCQk4NkVDOURCQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCAq
LywKLQkJCQk4Njg4MEYxOTE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGlsZXIzMl82NC5j
cHAgKi8sCiAJCQkJODY4ODBGMUExNDMyOEJCOTAwQjA4RDQyIC8qIERGR0pJVENvbXBpbGVySW5s
aW5lTWV0aG9kcy5oICovLAogCQkJCTg2RUNBM0U5MTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2Rl
LmggKi8sCiAJCQkJMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCAq
LywKQEAgLTI5MTIsNiArMjkxOCw3IEBACiAJCQkJMEYyRTVCRjcxNDYzNTdENTAwM0VCMkVCIC8q
IFNwZWN0cnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIg
LyogREZHT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkQxNDY4QUI0RTAwQ0Yy
NDQyIC8qIERGR0Fzc2VtYmx5SGVscGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDMDk3NzEx
NDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0zNDM2LDcgKzM0NDMsNiBAQAogCQkJCUE3MDQ1NkIxMTQyN0ZCOTUwMDM3REE2OCAvKiBBbGxv
Y2F0aW9uU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZGQTlFOTExNDJCQkIyRTAwMTc3
M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYxQzE0
MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTg2ODgwRjFEMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcjMyXzY0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjQ0MTQzNTMx
QTgwMEIwOEQ0MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODY4ODBGNEQxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0zNDQ0LDYgKzM0NTAsOCBAQAogCQkJCTBGNjIwMTc5MTQzRkNENDgw
MDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDM0M0
Q0EwMTQ1OEY1NDUwMDI1RkI2MiAvKiBKU0dsb2JhbFRoaXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZDMDk3NkUxNDY4QUI1MTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5SGVscGVycy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkMwOTc3MjE0NjkzQUY5MDBDRjI0NDIgLyogREZHT1NSRXhpdENv
bXBpbGVyNjQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDMDk3NzYxNDY5NDNCMDAwQ0YyNDQy
IC8qIERGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyMzJfNjQuY3BwCShy
ZXZpc2lvbiA5OTYxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTY0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkK
LSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVk
ZSAiREZHSklUQ29kZUdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVySW5saW5l
TWV0aG9kcy5oIgotI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJERkdSZWdp
c3RlckJhbmsuaCIKLSNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgotI2luY2x1ZGUgIkpT
R2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewotCi12b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRo
T1NSKGNvbnN0IE9TUkV4aXQmIGV4aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQot
ewotICAgIC8vIDEpIFByby1mb3JtYSBzdHVmZi4KLSAgICBleGl0Lm1fY2hlY2subGluayh0aGlz
KTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBmcHJpbnRmKHN0ZGVyciwg
Ik9TUiBleGl0IGZvciBOb2RlIEAlZCAoIiwgKGludClleGl0Lm1fbm9kZUluZGV4KTsKLSAgICBm
b3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyA7IGNvZGVPcmln
aW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7Ci0gICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiYmMjJXUiLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBp
ZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiIC0+ICVwICIsIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5leGVjdXRhYmxlLmdldCgpKTsKLSAgICB9Ci0gICAgZnByaW50ZihzdGRlcnIsICIpIGF0IEpJ
VCBvZmZzZXQgMHgleCAgIiwgZGVidWdPZmZzZXQoKSk7Ci0gICAgZXhpdC5kdW1wKHN0ZGVycik7
Ci0jZW5kaWYKLSNpZiBERkdfRU5BQkxFKFZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSkKLSAg
ICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlv
bkZhaWx1cmVEZWJ1Z0luZm87Ci0gICAgZGVidWdJbmZvLT5jb2RlQmxvY2sgPSBtX2NvZGVCbG9j
azsKLSAgICBkZWJ1Z0luZm8tPmRlYnVnT2Zmc2V0ID0gZGVidWdPZmZzZXQoKTsKLSAgICAKLSAg
ICBkZWJ1Z0NhbGwoZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSwgZGVidWdJ
bmZvKTsKLSNlbmRpZgotICAgIAotI2lmIERGR19FTkFCTEUoSklUX0JSRUFLX09OX1NQRUNVTEFU
SU9OX0ZBSUxVUkUpCi0gICAgYnJlYWtwb2ludCgpOwotI2VuZGlmCi0gICAgCi0jaWYgREZHX0VO
QUJMRShTVUNDRVNTX1NUQVRTKQotICAgIHN0YXRpYyBTYW1wbGluZ0NvdW50ZXIgY291bnRlcigi
U3BlY3VsYXRpb25GYWlsdXJlIik7Ci0gICAgZW1pdENvdW50KGNvdW50ZXIpOwotI2VuZGlmCi0K
LSAgICAvLyAyKSBQZXJmb3JtIHNwZWN1bGF0aW9uIHJlY292ZXJ5LiBUaGlzIG9ubHkgY29tZXMg
aW50byBwbGF5IHdoZW4gYW4gb3BlcmF0aW9uCi0gICAgLy8gICAgc3RhcnRzIG11dGF0aW5nIHN0
YXRlIGJlZm9yZSB2ZXJpZnlpbmcgdGhlIHNwZWN1bGF0aW9uIGl0IGhhcyBhbHJlYWR5IG1hZGUu
Ci0gICAgCi0gICAgaWYgKHJlY292ZXJ5KSB7Ci0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5
cGUoKSkgewotICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgotICAgICAgICAgICAgc3ViMzIo
cmVjb3ZlcnktPnNyYygpLCByZWNvdmVyeS0+ZGVzdCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyAzKSBSZWZpbmUgc29tZSB2YWx1
ZSBwcm9maWxlLCBpZiBhcHByb3ByaWF0ZS4KLSAgICAKLSAgICBpZiAoISFleGl0Lm1fanNWYWx1
ZVNvdXJjZSAmJiAhIWV4aXQubV92YWx1ZVByb2ZpbGUpIHsKLSAgICAgICAgaWYgKGV4aXQubV9q
c1ZhbHVlU291cmNlLmlzQWRkcmVzcygpKSB7Ci0gICAgICAgICAgICAvLyBTYXZlIGEgcmVnaXN0
ZXIgc28gd2UgY2FuIHVzZSBpdC4KLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5m
bzo6cmVnVDA7Ci0gICAgICAgICAgICBpZiAoc2NyYXRjaCA9PSBleGl0Lm1fanNWYWx1ZVNvdXJj
ZS5iYXNlKCkpCi0gICAgICAgICAgICAgICAgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QxOwotICAg
ICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2hCdWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNv
ZGVkSlNWYWx1ZSo+KGdsb2JhbERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKHVp
bnQzMl90KSkpOwotICAgICAgICAgICAgc3RvcmUzMihzY3JhdGNoLCBzY3JhdGNoQnVmZmVyKTsK
LSAgICAgICAgICAgIGxvYWQzMihleGl0Lm1fanNWYWx1ZVNvdXJjZS5hc0FkZHJlc3MoT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgc2NyYXRjaCk7
Ci0gICAgICAgICAgICBzdG9yZTMyKHNjcmF0Y2gsICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVl
RGVzY3JpcHRvcio+KGV4aXQubV92YWx1ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKS0+YXNC
aXRzLnRhZyk7Ci0gICAgICAgICAgICBsb2FkMzIoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNBZGRy
ZXNzKE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIHN0b3JlMzIoc2NyYXRjaCwgJmJpdHdpc2VfY2Fz
dDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oZXhpdC5tX3ZhbHVlUHJvZmlsZS0+c3BlY0ZhaWxC
dWNrZXQoMCkpLT5hc0JpdHMucGF5bG9hZCk7Ci0gICAgICAgICAgICBsb2FkMzIoc2NyYXRjaEJ1
ZmZlciwgc2NyYXRjaCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2Uu
aGFzS25vd25UYWcoKSkgewotICAgICAgICAgICAgc3RvcmUzMihJbW0zMihleGl0Lm1fanNWYWx1
ZVNvdXJjZS50YWcoKSksICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGV4
aXQubV92YWx1ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnRhZyk7Ci0gICAg
ICAgICAgICBzdG9yZTMyKGV4aXQubV9qc1ZhbHVlU291cmNlLnBheWxvYWRHUFIoKSwgJmJpdHdp
c2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oZXhpdC5tX3ZhbHVlUHJvZmlsZS0+c3Bl
Y0ZhaWxCdWNrZXQoMCkpLT5hc0JpdHMucGF5bG9hZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBzdG9yZTMyKGV4aXQubV9qc1ZhbHVlU291cmNlLnRhZ0dQUigpLCAmYml0d2lzZV9j
YXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihleGl0Lm1fdmFsdWVQcm9maWxlLT5zcGVjRmFp
bEJ1Y2tldCgwKSktPmFzQml0cy50YWcpOwotICAgICAgICAgICAgc3RvcmUzMihleGl0Lm1fanNW
YWx1ZVNvdXJjZS5wYXlsb2FkR1BSKCksICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3Jp
cHRvcio+KGV4aXQubV92YWx1ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnBh
eWxvYWQpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIDQpIEZpZ3VyZSBvdXQgaG93
IG1hbnkgc2NyYXRjaCBzbG90cyB3ZSdsbCBuZWVkLiBXZSBuZWVkIG9uZSBmb3IgZXZlcnkgR1BS
L0ZQUgotICAgIC8vICAgIHdob3NlIGRlc3RpbmF0aW9uIGlzIG5vdyBvY2N1cGllZCBieSBhIERG
RyB2aXJ0dWFsIHJlZ2lzdGVyLCBhbmQgd2UgbmVlZAotICAgIC8vICAgIG9uZSBmb3IgZXZlcnkg
ZGlzcGxhY2VkIHZpcnR1YWwgcmVnaXN0ZXIgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbgotICAgIC8v
ICAgIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIG9mIHRoZW0uIEFsc28gc2VlIGlmIHRoZXJl
IGFyZSBhbnkgY29uc3RhbnRzLAotICAgIC8vICAgIGFueSB1bmRlZmluZWQgc2xvdHMsIGFueSBG
UFIgc2xvdHMsIGFuZCBhbnkgdW5ib3hlZCBpbnRzLgotICAgICAgICAgICAgCi0gICAgVmVjdG9y
PGJvb2w+IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyhleGl0Lm1fdmFyaWFibGVzLnNpemUoKSk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycy5z
aXplKCk7ICsraSkKLSAgICAgICAgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2ldID0gZmFsc2U7
Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyA9IDA7Ci0g
ICAgdW5zaWduZWQgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzID0gMDsKLSAgICAK
LSAgICAvLyBCb29sZWFucyBmb3IgZmFzdCBjaGVja3MuIFdlIGV4cGVjdCB0aGF0IG1vc3QgT1NS
IGV4aXRzIGRvIG5vdCBoYXZlIHRvIHJlYm94Ci0gICAgLy8gSW50MzJzLCBoYXZlIG5vIEZQUnMs
IGFuZCBoYXZlIG5vIGNvbnN0YW50cy4gSWYgdGhlcmUgYXJlIGNvbnN0YW50cywgd2UKLSAgICAv
LyBleHBlY3QgbW9zdCBvZiB0aGVtIHRvIGJlIGpzVW5kZWZpbmVkKCk7IGlmIHRoYXQncyB0cnVl
IHRoZW4gd2UgaGFuZGxlIHRoYXQKLSAgICAvLyBzcGVjaWFsbHkgdG8gbWluaW1pemUgY29kZSBz
aXplIGFuZCBleGVjdXRpb24gdGltZS4KLSAgICBib29sIGhhdmVVbmJveGVkSW50MzJJblJlZ2lz
dGVyRmlsZSA9IGZhbHNlOwotICAgIGJvb2wgaGF2ZVVuYm94ZWRDZWxsSW5SZWdpc3RlckZpbGUg
PSBmYWxzZTsKLSAgICBib29sIGhhdmVVbmJveGVkQm9vbGVhbkluUmVnaXN0ZXJGaWxlID0gZmFs
c2U7Ci0gICAgYm9vbCBoYXZlRlBScyA9IGZhbHNlOwotICAgIGJvb2wgaGF2ZUNvbnN0YW50cyA9
IGZhbHNlOwotICAgIGJvb2wgaGF2ZVVuZGVmaW5lZCA9IGZhbHNlOwotICAgIAotICAgIGZvciAo
aW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4
KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJl
Y292ZXJ5KGluZGV4KTsKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewot
ICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICAgICAgbnVtYmVy
T2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKys7Ci0gICAgICAgICAgICBBU1NFUlQoKGludCly
ZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA+PSAwKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gU2VlIGlmIHdlIG1pZ2h0IGxpa2UgdG8gc3RvcmUgdG8gdGhpcyB2aXJ0dWFsIHJlZ2lz
dGVyIGJlZm9yZSBkb2luZwotICAgICAgICAgICAgLy8gdmlydHVhbCByZWdpc3RlciBzaHVmZmxp
bmcuIElmIHNvLCB3ZSBzYXkgdGhhdCB0aGUgdmlydHVhbCByZWdpc3RlcgotICAgICAgICAgICAg
Ly8gaXMgcG9pc29uZWQ6IGl0IGNhbm5vdCBiZSBzdG9yZWQgdG8gdW50aWwgYWZ0ZXIgZGlzcGxh
Y2VkIHZpcnR1YWwKLSAgICAgICAgICAgIC8vIHJlZ2lzdGVycyBhcmUgaGFuZGxlZC4gV2UgdHJh
Y2sgcG9pc29uZWQgdmlydHVhbCByZWdpc3RlciBjYXJlZnVsbHkKLSAgICAgICAgICAgIC8vIHRv
IGVuc3VyZSB0aGlzIGhhcHBlbnMgZWZmaWNpZW50bHkuIE5vdGUgdGhhdCB3ZSBleHBlY3QgdGhp
cyBjYXNlCi0gICAgICAgICAgICAvLyB0byBiZSByYXJlLCBzbyB0aGUgaGFuZGxpbmcgb2YgaXQg
aXMgb3B0aW1pemVkIGZvciB0aGUgY2FzZXMgaW4KLSAgICAgICAgICAgIC8vIHdoaWNoIGl0IGRv
ZXMgbm90IGhhcHBlbi4KLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIo
KSA8IChpbnQpZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKGV4aXQubV92YXJpYWJsZXNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldLnRlY2huaXF1
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBJbkdQUjoKLSAgICAgICAgICAgICAgICBjYXNl
IFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5J
bkdQUjoKLSAgICAgICAgICAgICAgICBjYXNlIEluUGFpcjoKLSAgICAgICAgICAgICAgICBjYXNl
IEluRlBSOgotICAgICAgICAgICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVy
c1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnMrKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZElu
dDMyOgotICAgICAgICAgICAgaGF2ZVVuYm94ZWRJbnQzMkluUmVnaXN0ZXJGaWxlID0gdHJ1ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQWxyZWFkeUlu
UmVnaXN0ZXJGaWxlQXNVbmJveGVkQ2VsbDoKLSAgICAgICAgICAgIGhhdmVVbmJveGVkQ2VsbElu
UmVnaXN0ZXJGaWxlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQm9vbGVhbjoKLSAgICAg
ICAgICAgIGhhdmVVbmJveGVkQm9vbGVhbkluUmVnaXN0ZXJGaWxlID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAg
ICBoYXZlRlBScyA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIENvbnN0YW50OgotICAgICAgICAgICAgaGF2ZUNvbnN0YW50cyA9IHRydWU7Ci0g
ICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQoKS5pc1VuZGVmaW5lZCgpKQotICAgICAg
ICAgICAgICAgIGhhdmVVbmRlZmluZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoQnVmZmVyID0gc3RhdGlj
X2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihnbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXpl
KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3Rl
cnMgKyAoKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyAqIDIpIDw9IEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzID8gMCA6IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVy
cykpKSk7Ci0KLSAgICAvLyBGcm9tIGhlcmUgb24sIHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpdCBp
cyBwcm9maXRhYmxlIHRvIG1heGltaXplIHRoZSBkaXN0YW5jZQotICAgIC8vIGJldHdlZW4gd2hl
biBzb21ldGhpbmcgaXMgY29tcHV0ZWQgYW5kIHdoZW4gaXQgaXMgc3RvcmVkLgotICAgIAotICAg
IC8vIDUpIFBlcmZvcm0gYWxsIHJlYm94aW5nIG9mIGludGVnZXJzIGFuZCBjZWxscywgZXhjZXB0
IGZvciB0aG9zZSBpbiByZWdpc3RlcnMuCi0KLSAgICBpZiAoaGF2ZVVuYm94ZWRJbnQzMkluUmVn
aXN0ZXJGaWxlIHx8IGhhdmVVbmJveGVkQ2VsbEluUmVnaXN0ZXJGaWxlIHx8IGhhdmVVbmJveGVk
Qm9vbGVhbkluUmVnaXN0ZXJGaWxlKSB7Ci0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5k
ZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7
Ci0gICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgICAg
ICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgotICAgICAgICAgICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lz
dGVyRmlsZUFzVW5ib3hlZENlbGw6Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRCb29sZWFu
OgotICAgICAgICAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5U
YWcpLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihleGl0Lm9wZXJhbmRGb3JJ
bmRleChpbmRleCkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLyA2KSBEdW1wIGFsbCBub24tcG9pc29uZWQgR1BScy4gRm9yIHBvaXNv
bmVkIEdQUnMsIHNhdmUgdGhlbSBpbnRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UuCi0gICAgLy8gICAg
Tm90ZSB0aGF0IEdQUnMgZG8gbm90IGhhdmUgYSBmYXN0IGNoYW5nZSAobGlrZSBoYXZlRlBScykg
YmVjYXVzZSB3ZSBleHBlY3QgdGhhdAotICAgIC8vICAgIG1vc3QgT1NSIGZhaWx1cmUgcG9pbnRz
IHdpbGwgaGF2ZSBhdCBsZWFzdCBvbmUgR1BSIHRoYXQgbmVlZHMgdG8gYmUgZHVtcGVkLgotICAg
IAotICAgIHVuc2lnbmVkIHNjcmF0Y2hJbmRleCA9IDA7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgp
OwotICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KTsKLSAg
ICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIEluR1BS
OgotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICBjYXNlIFVuYm94ZWRC
b29sZWFuSW5HUFI6Ci0gICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBw
b2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCi0g
ICAgICAgICAgICAgICAgc3RvcmUzMihyZWNvdmVyeS5ncHIoKSwgcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgdWludDMyX3QgdGFnID0gSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZzsKLSAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gSW5HUFIpCi0g
ICAgICAgICAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkNlbGxUYWc7Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gVW5ib3hlZEludDMySW5HUFIpCi0g
ICAgICAgICAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkludDMyVGFnOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdGFnID0gSlNWYWx1ZTo6Qm9vbGVhblRhZzsK
LSAgICAgICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMih0YWcpLCB0YWdGb3IoKFZpcnR1
YWxSZWdpc3RlcilvcGVyYW5kKSk7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihyZWNvdmVyeS5n
cHIoKSwgcGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluUGFpcjoKLSAgICAgICAgICAg
IGlmIChleGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tl
eGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkgewotICAgICAgICAgICAgICAgIHN0b3JlMzIo
cmVjb3ZlcnkudGFnR1BSKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIg
KyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKTsKLSAgICAgICAgICAgICAgICBzdG9yZTMyKHJlY292ZXJ5LnBheWxvYWRH
UFIoKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRl
eCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKTsKLSAgICAgICAgICAgICAgICBzY3JhdGNoSW5kZXgrKzsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihyZWNvdmVyeS50YWdHUFIoKSwgdGFnRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOwotICAgICAgICAgICAgICAgIHN0b3JlMzIocmVjb3Zl
cnkucGF5bG9hZEdQUigpLCBwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBBdCB0aGlzIHBv
aW50IGFsbCBHUFJzIGFyZSBhdmFpbGFibGUgZm9yIHNjcmF0Y2ggdXNlLgotICAgIAotICAgIGlm
IChoYXZlRlBScykgewotICAgICAgICAvLyA3KSBCb3ggYWxsIGRvdWJsZXMgKHJlbGllcyBvbiB0
aGVyZSBiZWluZyBtb3JlIEdQUnMgdGhhbiBGUFJzKQotICAgICAgICAvLyAgICBGb3IgSlNWYWx1
ZTMyXzY0LCBubyBuZWVkIHRvIGJveCBkb3VibGVzLgotICAgICAgICAKLSAgICAgICAgLy8gOCkg
RHVtcCBhbGwgZG91YmxlcyBpbnRvIHRoZSByZWdpc3RlciBmaWxlLCBvciB0byB0aGUgc2NyYXRj
aCBzdG9yYWdlIGlmCi0gICAgICAgIC8vICAgIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIHJlZ2lz
dGVyIGlzIHBvaXNvbmVkLgotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBp
bmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAg
IGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4
KTsKLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUoaW5k
ZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5k
ZXgpXSkKLSAgICAgICAgICAgICAgICBzdG9yZURvdWJsZShyZWNvdmVyeS5mcHIoKSwgc2NyYXRj
aEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBzdG9yZURvdWJsZShyZWNvdmVyeS5mcHIoKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lz
dGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnMpOwotICAgIAotICAgIC8vIDkpIFJlc2h1ZmZsZSBkaXNwbGFjZWQgdmlydHVhbCByZWdp
c3RlcnMuIE9wdGltaXplIGZvciB0aGUgY2FzZSB0aGF0Ci0gICAgLy8gICAgdGhlIG51bWJlciBv
ZiBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMgaXMgbm90IG1vcmUgdGhhbiB0aGUgbnVtYmVy
Ci0gICAgLy8gICAgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIHJlZ2lzdGVycy4KLSAgICAKLSAgICBp
ZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7Ci0gICAgICAgIGlmIChudW1i
ZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgKiAyIDw9IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzKSB7Ci0gICAgICAgICAgICAvLyBTbyBmYXIgdGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBj
YXNlIHRoYXQgdHJpZ2dlcnMgYWxsIHRoZSB0aW1lLCBidXQKLSAgICAgICAgICAgIC8vIHRoYXQg
aXMgZmFyIGZyb20gZ3VhcmFudGVlZC4KLSAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBk
aXNwbGFjZW1lbnRJbmRleCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGlu
ZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAg
ICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGlu
ZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxh
Y2VkSW5SZWdpc3RlckZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwg
R1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSk7Ci0gICAgICAgICAgICAg
ICAgbG9hZDMyKHRhZ0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRv
UmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKykpOwotICAgICAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgICAgIGRpc3BsYWNlbWVudEluZGV4ID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50
IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZh
bHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlx
dWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3Bs
YWNlbWVudEluZGV4KyspLCBwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5k
Rm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCB0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0
Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIHNodWZmbGluZyBh
bGdvcml0aG0gdGhhdCB3ZSB1c2UKLSAgICAgICAgICAgIC8vIGZvciBzcGVjdWxhdGl2ZS0+bm9u
LXNwZWN1bGF0aXZlIGp1bXBzLCBpZiB3ZSBldmVyIGRpc2NvdmVyIHRoYXQKLSAgICAgICAgICAg
IC8vIHNvbWUgaG90IGNvZGUgd2l0aCBsb3RzIG9mIGxpdmUgdmFsdWVzIHRoYXQgZ2V0IGRpc3Bs
YWNlZCBhbmQKLSAgICAgICAgICAgIC8vIHNwaWxsZWQgcmVhbGx5IGVuam95cyBmcmVxdWVudGx5
IGZhaWxpbmcgc3BlY3VsYXRpb24uCi0gICAgICAgIAotICAgICAgICAgICAgLy8gRm9yIG5vdyB0
aGlzIGNvZGUgaXMgZW5naW5lZXJlZCB0byBiZSBjb3JyZWN0IGJ1dCBwcm9iYWJseSBub3QKLSAg
ICAgICAgICAgIC8vIHN1cGVyLiBJbiBwYXJ0aWN1bGFyLCBpdCBjb3JyZWN0bHkgaGFuZGxlcyBj
YXNlcyB3aGVyZSBmb3IgZXhhbXBsZQotICAgICAgICAgICAgLy8gdGhlIGRpc3BsYWNlbWVudHMg
YXJlIGEgcGVybXV0YXRpb24gb2YgdGhlIGRlc3RpbmF0aW9uIHZhbHVlcywgbGlrZQotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIC8vIDEgLT4gMgotICAgICAgICAgICAgLy8gMiAtPiAxCi0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gSXQgYWNjb21wbGlzaGVzIHRoaXMgYnkgc2lt
cGx5IGxpZnRpbmcgYWxsIG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVycwotICAgICAgICAgICAgLy8g
ZnJvbSB0aGVpciBvbGQgKERGRyBKSVQpIGxvY2F0aW9ucyBhbmQgZHJvcHBpbmcgdGhlbSBpbiBh
IHNjcmF0Y2gKLSAgICAgICAgICAgIC8vIGxvY2F0aW9uIGluIG1lbW9yeSwgYW5kIHRoZW4gdHJh
bnNmZXJyaW5nIGZyb20gdGhhdCBzY3JhdGNoIGxvY2F0aW9uCi0gICAgICAgICAgICAvLyB0byB0
aGVpciBuZXcgKG9sZCBKSVQpIGxvY2F0aW9ucy4KLSAgICAgICAgCi0gICAgICAgICAgICBmb3Ig
KGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRl
eCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhp
dC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVj
aG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCi0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlY292ZXJ5LnZp
cnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIGxvYWQz
Mih0YWdGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0g
ICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICAgICAgICAgICAgICBz
dG9yZTMyKEdQUkluZm86OnJlZ1QxLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVm
ZmVyICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgICAgICAgICAgc2NyYXRjaEluZGV4Kys7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQ
b2lzb25lZFZpcnR1YWxSZWdpc3RlcnM7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7
IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5
KGluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlz
cGxhY2VkSW5SZWdpc3RlckZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIGxvYWQzMihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVy
ICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMucGF5bG9hZCksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICBsb2Fk
MzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZyksIEdQ
UkluZm86OnJlZ1QxKTsKLSAgICAgICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBw
YXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7
Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgdGFnRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAg
c2NyYXRjaEluZGV4Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgICAgQVNT
RVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyArIG51
bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgLy8gMTApIER1bXAgYWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXJzLgotICAgIAot
ICAgIHNjcmF0Y2hJbmRleCA9IDA7Ci0gICAgaWYgKG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVn
aXN0ZXJzKSB7Ci0gICAgICAgIGZvciAoaW50IHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxS
ZWdpc3RlciA8IChpbnQpZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVy
KSB7Ci0gICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1t2aXJ0dWFsUmVn
aXN0ZXJdKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQubV92YXJpYWJsZXNbdmly
dHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkp
IHsKLSAgICAgICAgICAgIGNhc2UgSW5HUFI6Ci0gICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQz
MkluR1BSOgotICAgICAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOiB7Ci0gICAgICAg
ICAgICAgICAgbG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBz
Y3JhdGNoSW5kZXgrKykgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgc3RvcmUz
MihHUFJJbmZvOjpyZWdUMCwgcGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdp
c3RlcikpOwotICAgICAgICAgICAgICAgIHVpbnQzMl90IHRhZyA9IEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWc7Ci0gICAgICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IEluR1BS
KQotICAgICAgICAgICAgICAgICAgICB0YWcgPSBKU1ZhbHVlOjpDZWxsVGFnOwotICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IFVuYm94ZWRJbnQzMkluR1BS
KQotICAgICAgICAgICAgICAgICAgICB0YWcgPSBKU1ZhbHVlOjpJbnQzMlRhZzsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkJvb2xlYW5U
YWc7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIodGFnKSwgdGFnRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAgICBj
YXNlIEluUGFpcjoKLSAgICAgICAgICAgICAgICBsb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAg
ICAgICAgICAgICAgbG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIg
KyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihH
UFJJbmZvOjpyZWdUMCwgcGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3Rl
cikpOwotICAgICAgICAgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIHRhZ0ZvcigoVmly
dHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIHNjcmF0Y2hJ
bmRleCsrOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKLSAgICAKLSAgICAvLyAxMSkgRHVtcCBhbGwgY29uc3RhbnRz
LiBPcHRpbWl6ZSBmb3IgVW5kZWZpbmVkLCBzaW5jZSB0aGF0J3MgYSBjb25zdGFudCB3ZSBzZWUK
LSAgICAvLyAgICAgb2Z0ZW4uCi0KLSAgICBpZiAoaGF2ZUNvbnN0YW50cykgewotICAgICAgICBp
ZiAoaGF2ZVVuZGVmaW5lZCkgewotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoanNVbmRl
ZmluZWQoKS5wYXlsb2FkKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnRhZygpKSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5u
dW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICAg
ICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENvbnN0YW50KQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmlu
ZWQoKSkgewotICAgICAgICAgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHBheWxvYWRG
b3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAg
ICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QxLCB0YWdGb3IoKFZpcnR1YWxSZWdpc3Rl
cilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS5w
YXlsb2FkKCkpLCBwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5k
ZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIocmVjb3Zl
cnkuY29uc3RhbnQoKS50YWcoKSksIHRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFu
ZEZvckluZGV4KGluZGV4KSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIC8vIDEyKSBBZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNl
IHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25vdwotICAgIC8vICAgICB0aGF0IGFsbCBuZXcgY2Fs
bHMgaW50byB0aGlzIGNvZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1dGUK
LSAgICAvLyAgICAgY291bnRlciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJmb3Jt
ZWQgT1NSIGV4aXQgYW5kIGNhbGwgZnJhbWVzCi0gICAgLy8gICAgIHRoYXQgd2VyZSBzdGlsbCBl
eGVjdXRpbmcgdGhlIG9sZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MK
LSAgICAvLyAgICAgT1NSIGV4aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2lu
ZyBpcyB0cnVlOgotICAgIC8vCi0gICAgLy8gICAgIChhKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBP
U1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRvIHJlZW50ZXIgb3B0aW1pemVkCi0gICAgLy8gICAgICAg
ICBjb2RlIGV2ZW50dWFsbHksIHNpbmNlIG9wdGltaXplZCBjb2RlIGlzIGZhc3Rlci4gQnV0IHdl
IGRvbid0Ci0gICAgLy8gICAgICAgICB3YW50IHRvIGRvIHN1Y2ggcmVlbnRlcnkgdG9vIGFnZ3Jl
c3NpdmVseSAoc2VlIChjKSBiZWxvdykuCi0gICAgLy8KLSAgICAvLyAgICAgKGIpIElmIHRoZXJl
IGlzIGNvZGUgb24gdGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBzdGlsbCBydW5uaW5nIHRoZSBvbGQK
LSAgICAvLyAgICAgICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBuZXZlciBPU1InZCwgdGhlbiBpdCBz
aG91bGQgZ2V0IGEgY2hhbmNlIHRvCi0gICAgLy8gICAgICAgICBwZXJmb3JtIE9TUiBlbnRyeSBk
ZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZXhpdGVkLgotICAgIC8vCi0gICAgLy8gICAgIChj
KSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBzaG91bGQgbm90IGltbWVkaWF0ZWx5IHJl
dHJ5IE9TUgotICAgIC8vICAgICAgICAgZW50cnksIHNpbmNlIGJvdGggZm9ybXMgb2YgT1NSIGFy
ZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwotICAgIC8vICAgICAgICAgcGFydGljdWxhcmx5IGV4
cGVuc2l2ZS4KLSAgICAvLwotICAgIC8vICAgICAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBl
dmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0aGUgY29kZQotICAgIC8vICAgICAgICAg
cnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRy
aWdnZXJlZC4KLSAgICAvLwotICAgIC8vICAgICBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8g
c2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KLSAgICAvLyAgICAgY291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgZW5kYW5nZXIKLSAg
ICAvLyAgICAgKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQgZGVs
YXkgdGhlIG9wcG9ydHVuaXR5IGZvcgotICAgIC8vICAgICBldmVyeSBjYWxsIGZyYW1lIHRvIHBl
cmZvcm0gT1NSIGVudHJ5LiBFc3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFwcGVucwotICAgIC8v
ICAgICBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0aGUg
Y291bnRlciB3aWxsIG5ldmVyCi0gICAgLy8gICAgIGJlY29tZSBub24tbmVnYXRpdmUgYW5kIE9T
UiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5Ci0gICAgLy8gICAgIHdp
bGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGljaCBk
b2VzIGEgcHJldHR5Ci0gICAgLy8gICAgIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQgKGIp
LiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAoZCksCi0gICAgLy8gICAgIHNpbmNlIGVh
Y2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUgZXhlY3V0ZSBjb3VudGVyLgot
ICAgIC8vICAgICBTbyB3ZSBjaGVjayBoZXJlIGlmIHRoZSBudW1iZXIgb2Ygc3BlY3VsYXRpb24g
ZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQotICAgIC8vICAgICBsYXJnZXIgdGhhbiB0aGUgbnVt
YmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlmCi0gICAg
Ly8gICAgIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgZmFpbHVyZXMu
IElmIHNvLCB3ZSBzZXQgdGhlCi0gICAgLy8gICAgIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdl
IHNldCB0aGUgY291bnRlciB0bwotICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFm
dGVyV2FybVVwKCkuCi0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpKSwg
R1BSSW5mbzo6cmVnVDApOwotICAgIAotICAgIGxvYWQzMihBZGRyZXNzKEdQUkluZm86OnJlZ1Qw
LCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKSwgR1BSSW5mbzo6
cmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9m
ZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSwgR1BSSW5mbzo6cmVnVDEpOwotICAg
IGFkZDMyKEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgYWRkMzIoSW1tMzIoLTEpLCBH
UFJJbmZvOjpyZWdUMSk7Ci0gICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMiwgQWRkcmVzcyhHUFJJ
bmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSkp
OwotICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkpKTsKLSAgICAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBmZXdGYWlscyA9IGJyYW5jaDMyKEJlbG93T3JFcXVh
bCwgR1BSSW5mbzo6cmVnVDIsIEltbTMyKGNvZGVCbG9jaygpLT5sYXJnZUZhaWxDb3VudFRocmVz
aG9sZCgpKSk7Ci0gICAgbXVsMzIoSW1tMzIoSGV1cmlzdGljczo6ZGVzaXJlZFNwZWN1bGF0aXZl
U3VjY2Vzc0ZhaWxSYXRpbyksIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAg
Ci0gICAgSnVtcCBsb3dGYWlsUmF0ZSA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgR1BSSW5mbzo6
cmVnVDIsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAKLSAgICAvLyBSZW9wdGltaXplIGFzIHNvb24g
YXMgcG9zc2libGUuCi0gICAgc3RvcmUzMihJbW0zMihIZXVyaXN0aWNzOjpleGVjdXRpb25Db3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9uKSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkpKTsKLSAgICBKdW1wIGRvbmVB
ZGp1c3RpbmcgPSBqdW1wKCk7Ci0gICAgCi0gICAgZmV3RmFpbHMubGluayh0aGlzKTsKLSAgICBs
b3dGYWlsUmF0ZS5saW5rKHRoaXMpOwotICAgIAotICAgIHN0b3JlMzIoSW1tMzIoY29kZUJsb2Nr
KCktPmFsdGVybmF0aXZlKCktPmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVw
KCkpLCBBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNv
dW50ZXIoKSkpOwotICAgIAotICAgIGRvbmVBZGp1c3RpbmcubGluayh0aGlzKTsKLSAgICAKLSAg
ICAvLyAxMykgTG9hZCB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGJ5dGVjb2RlIG9wZXJhdGlvbiBp
bnRvIHJlZ1QwLgotICAgIAotICAgIGlmIChleGl0Lm1fbGFzdFNldE9wZXJhbmQgIT0gc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkgewotICAgICAgICBsb2FkMzIocGF5bG9hZEZvcigo
VmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJl
c3VsdFJlZ2lzdGVyKTsKLSAgICAgICAgbG9hZDMyKHRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4
aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7Ci0g
ICAgfQotICAgIAotICAgIC8vIDE0KSBGaXggY2FsbCBmcmFtZSAocykuCi0gICAgCi0gICAgQVNT
RVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6
QmFzZWxpbmVKSVQpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCktPmFs
dGVybmF0aXZlKCkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxlOjpD
b2RlQmxvY2spKTsKLSAgICAKLSAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQu
bV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKLSAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsKLSAgICAg
ICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNv
ZGVPcmlnaW4pOwotICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVy
ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpOwotICAgICAg
ICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBkZWNv
ZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlcik7Ci0gICAgICAgIHVuc2ln
bmVkIHJldHVybkJ5dGVjb2RlSW5kZXggPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5ieXRlY29k
ZUluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKLSAgICAgICAgQnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNl
dCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4o
ZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCByZXR1cm5CeXRl
Y29kZUluZGV4KTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChtYXBwaW5nKTsKLSAgICAgICAg
QVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSByZXR1cm5CeXRlY29kZUluZGV4KTsK
LSAgICAgICAgCi0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxs
ZXItPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQp
OwotCi0gICAgICAgIEdQUlJlZyBjYWxsZXJGcmFtZUdQUjsKLSAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgYWRkMzIoSW1t
MzIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BS
SW5mbzo6cmVnVDMpOwotICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpyZWdU
MzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyOwotICAgICAgICAKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cihiYXNlbGluZUNvZGVCbG9jayksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKSkpOwot
ICAgICAgICBzdG9yZTMyKEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoKFZpcnR1YWxS
ZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6U2Nv
cGVDaGFpbikpKTsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlZS0+c2NvcGUoKSksIHBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpKTsKLSAg
ICAgICAgc3RvcmUzMihJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxl
ckZyYW1lKSkpOwotICAgICAgICBzdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgcGF5bG9hZEZvcigo
VmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJG
aWxlOjpDYWxsZXJGcmFtZSkpKTsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihqdW1w
VGFyZ2V0KSwgcGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQykpKTsKLSAgICAgICAgc3RvcmUzMihJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSkpOwot
ICAgICAgICBzdG9yZTMyKEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSks
IHBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgc3RvcmUzMihJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlZSkpKTsKLSAgICAgICAgc3Rv
cmVQdHIoVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSksIHBheWxv
YWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJl
Z2lzdGVyRmlsZTo6Q2FsbGVlKSkpOwotICAgIH0KLSAgICAKLSAgICBpZiAoZXhpdC5tX2NvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBhZGRQdHIoSW1tMzIoZXhpdC5tX2NvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0KLSAgICAvLyAxNSkgSnVtcCBpbnRv
IHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2RlLgotICAgIAotICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9y
aWdpbik7Ci0gICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2Rl
TWFwID0gZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2spOwotICAgIAotICAgIEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5
dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUo
KSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgCi0gICAgQVNTRVJUKG1h
cHBpbmcpOwotICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2Nv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgCi0gICAgdm9pZCoganVtcFRhcmdldCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihiYXNlbGlu
ZUNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+bV9tYWNoaW5lQ29k
ZU9mZnNldCk7Ci0gICAgCi0gICAgQVNTRVJUKEdQUkluZm86OnJlZ1QyICE9IEdQUkluZm86OmNh
Y2hlZFJlc3VsdFJlZ2lzdGVyICYmIEdQUkluZm86OnJlZ1QyICE9IEdQUkluZm86OmNhY2hlZFJl
c3VsdFJlZ2lzdGVyMik7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQp
LCBHUFJJbmZvOjpyZWdUMik7Ci0gICAganVtcChHUFJJbmZvOjpyZWdUMik7Ci0KLSNpZiBERkdf
RU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZnByaW50ZihzdGRlcnIsICIgICAtPiAlcFxuIiwg
anVtcFRhcmdldCk7Ci0jZW5kaWYKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0j
ZW5kaWYKLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAJKHJldmlzaW9uIDk5NjEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGVHZW5lcmF0b3IuaCIK
KyNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXIuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25z
LmgiCiAjaW5jbHVkZSAiREZHUmVnaXN0ZXJCYW5rLmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRp
dmVKSVQuaCIKQEAgLTQwLDEyICs0MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYgc3Bl
Y3VsYXRpdmUpCiB7CisgICAgT1NSRXhpdENvbXBpbGVyIG9zckV4aXRDb21waWxlcigqdGhpcyk7
CisgICAgCiAgICAgT1NSRXhpdFZlY3Rvcjo6SXRlcmF0b3IgZXhpdHNJdGVyID0gc3BlY3VsYXRp
dmUub3NyRXhpdHMoKS5iZWdpbigpOwogICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJhdG9yIGV4aXRz
RW5kID0gc3BlY3VsYXRpdmUub3NyRXhpdHMoKS5lbmQoKTsKICAgICAKICAgICB3aGlsZSAoZXhp
dHNJdGVyICE9IGV4aXRzRW5kKSB7CiAgICAgICAgIGNvbnN0IE9TUkV4aXQmIGV4aXQgPSAqZXhp
dHNJdGVyOwotICAgICAgICBleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGV4aXQsIHNwZWN1bGF0aXZl
LnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5tX3JlY292ZXJ5SW5kZXgpKTsKKyAgICAgICAgb3Ny
RXhpdENvbXBpbGVyLmNvbXBpbGVFeGl0KGV4aXQsIHNwZWN1bGF0aXZlLnNwZWN1bGF0aW9uUmVj
b3ZlcnkoZXhpdC5tX3JlY292ZXJ5SW5kZXgpKTsKICAgICAgICAgKytleGl0c0l0ZXI7CiAgICAg
fQogfQpAQCAtMjc1LDUzMSArMjc4LDYgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0
aW9uKEpJVENvZAogICAgIGVudHJ5ID0gSklUQ29kZShsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgp
LCBKSVRDb2RlOjpERkdKSVQpOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLQotdm9pZCBKSVRD
b21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVj
dWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSkKLXsKLSAgICAvLyAxKSBQcm8tZm9ybWEgc3R1ZmYu
Ci0gICAgZXhpdC5tX2NoZWNrLmxpbmsodGhpcyk7Ci0KLSNpZiBERkdfRU5BQkxFKERFQlVHX1ZF
UkJPU0UpCi0gICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQgKCIsIChp
bnQpZXhpdC5tX25vZGVJbmRleCk7Ci0gICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBl
eGl0Lm1fY29kZU9yaWdpbjsgOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUtPmNhbGxlcikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImJjIyV1IiwgY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiAlcCAi
LCBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7Ci0gICAgfQot
ICAgIGZwcmludGYoc3RkZXJyLCAiKSBhdCBKSVQgb2Zmc2V0IDB4JXggICIsIGRlYnVnT2Zmc2V0
KCkpOwotICAgIGV4aXQuZHVtcChzdGRlcnIpOwotI2VuZGlmCi0jaWYgREZHX0VOQUJMRShWRVJC
T1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCi0gICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZv
KiBkZWJ1Z0luZm8gPSBuZXcgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvOwotICAgIGRlYnVn
SW5mby0+Y29kZUJsb2NrID0gbV9jb2RlQmxvY2s7Ci0gICAgZGVidWdJbmZvLT5kZWJ1Z09mZnNl
dCA9IGRlYnVnT2Zmc2V0KCk7Ci0gICAgCi0gICAgZGVidWdDYWxsKGRlYnVnT3BlcmF0aW9uUHJp
bnRTcGVjdWxhdGlvbkZhaWx1cmUsIGRlYnVnSW5mbyk7Ci0jZW5kaWYKLSAgICAKLSNpZiBERkdf
RU5BQkxFKEpJVF9CUkVBS19PTl9TUEVDVUxBVElPTl9GQUlMVVJFKQotICAgIGJyZWFrcG9pbnQo
KTsKLSNlbmRpZgotICAgIAotI2lmIERGR19FTkFCTEUoU1VDQ0VTU19TVEFUUykKLSAgICBzdGF0
aWMgU2FtcGxpbmdDb3VudGVyIGNvdW50ZXIoIlNwZWN1bGF0aW9uRmFpbHVyZSIpOwotICAgIGVt
aXRDb3VudChjb3VudGVyKTsKLSNlbmRpZgotICAgIAotICAgIC8vIDIpIFBlcmZvcm0gc3BlY3Vs
YXRpb24gcmVjb3ZlcnkuIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBhbiBvcGVyYXRp
b24KLSAgICAvLyAgICBzdGFydHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlmeWluZyB0aGUg
c3BlY3VsYXRpb24gaXQgaGFzIGFscmVhZHkgbWFkZS4KLSAgICAKLSAgICBHUFJSZWcgYWxyZWFk
eUJveGVkID0gSW52YWxpZEdQUlJlZzsKLSAgICAKLSAgICBpZiAocmVjb3ZlcnkpIHsKLSAgICAg
ICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgU3BlY3VsYXRpdmVB
ZGQ6Ci0gICAgICAgICAgICBzdWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5LT5kZXN0KCkp
OwotICAgICAgICAgICAgb3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNv
dmVyeS0+ZGVzdCgpKTsKLSAgICAgICAgICAgIGFscmVhZHlCb3hlZCA9IHJlY292ZXJ5LT5kZXN0
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEJvb2xl
YW5TcGVjdWxhdGlvbkNoZWNrOgotICAgICAgICAgICAgeG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlY292ZXJ5LT5kZXN0KCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gMykgUmVmaW5lIHNvbWUgdmFsdWUg
cHJvZmlsZSwgaWYgYXBwcm9wcmlhdGUuCi0gICAgCi0gICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVT
b3VyY2UgJiYgISFleGl0Lm1fdmFsdWVQcm9maWxlKSB7Ci0gICAgICAgIGlmIChleGl0Lm1fanNW
YWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkgewotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgYmUgc3Vy
ZSB0aGF0IHdlIGhhdmUgYSBzcGFyZSByZWdpc3Rlci4gU28gdXNlIHRoZSB0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsCi0gICAgICAgICAgICAvLyBzaW5jZSB3ZSBrbm93IGhvdyB0byByZXN0b3JlIGl0
LgotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGV4aXQubV9qc1ZhbHVlU291cmNlLmFzQWRk
cmVzcygpKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIHN0
b3JlUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZXhpdC5tX3ZhbHVlUHJvZmls
ZS0+c3BlY0ZhaWxCdWNrZXQoMCkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJp
dHdpc2VfY2FzdDx2b2lkKj4oVGFnVHlwZU51bWJlcikpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN0b3JlUHRyKGV4aXQubV9q
c1ZhbHVlU291cmNlLmdwcigpLCBleGl0Lm1fdmFsdWVQcm9maWxlLT5zcGVjRmFpbEJ1Y2tldCgw
KSk7Ci0gICAgfQotCi0gICAgLy8gNCkgRmlndXJlIG91dCBob3cgbWFueSBzY3JhdGNoIHNsb3Rz
IHdlJ2xsIG5lZWQuIFdlIG5lZWQgb25lIGZvciBldmVyeSBHUFIvRlBSCi0gICAgLy8gICAgd2hv
c2UgZGVzdGluYXRpb24gaXMgbm93IG9jY3VwaWVkIGJ5IGEgREZHIHZpcnR1YWwgcmVnaXN0ZXIs
IGFuZCB3ZSBuZWVkCi0gICAgLy8gICAgb25lIGZvciBldmVyeSBkaXNwbGFjZWQgdmlydHVhbCBy
ZWdpc3RlciBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuCi0gICAgLy8gICAgR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnMgb2YgdGhlbS4gQWxzbyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25zdGFudHMs
Ci0gICAgLy8gICAgYW55IHVuZGVmaW5lZCBzbG90cywgYW55IEZQUiBzbG90cywgYW5kIGFueSB1
bmJveGVkIGludHMuCi0gICAgICAgICAgICAKLSAgICBWZWN0b3I8Ym9vbD4gcG9pc29uZWRWaXJ0
dWFsUmVnaXN0ZXJzKGV4aXQubV92YXJpYWJsZXMuc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzLnNpemUoKTsgKytpKQotICAgICAg
ICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbaV0gPSBmYWxzZTsKLQotICAgIHVuc2lnbmVkIG51
bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzID0gMDsKLSAgICB1bnNpZ25lZCBudW1iZXJP
ZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPSAwOwotICAgIAotICAgIC8vIEJvb2xlYW5zIGZv
ciBmYXN0IGNoZWNrcy4gV2UgZXhwZWN0IHRoYXQgbW9zdCBPU1IgZXhpdHMgZG8gbm90IGhhdmUg
dG8gcmVib3gKLSAgICAvLyBJbnQzMnMsIGhhdmUgbm8gRlBScywgYW5kIGhhdmUgbm8gY29uc3Rh
bnRzLiBJZiB0aGVyZSBhcmUgY29uc3RhbnRzLCB3ZQotICAgIC8vIGV4cGVjdCBtb3N0IG9mIHRo
ZW0gdG8gYmUganNVbmRlZmluZWQoKTsgaWYgdGhhdCdzIHRydWUgdGhlbiB3ZSBoYW5kbGUgdGhh
dAotICAgIC8vIHNwZWNpYWxseSB0byBtaW5pbWl6ZSBjb2RlIHNpemUgYW5kIGV4ZWN1dGlvbiB0
aW1lLgotICAgIGJvb2wgaGF2ZVVuYm94ZWRJbnQzMnMgPSBmYWxzZTsKLSAgICBib29sIGhhdmVG
UFJzID0gZmFsc2U7Ci0gICAgYm9vbCBoYXZlQ29uc3RhbnRzID0gZmFsc2U7Ci0gICAgYm9vbCBo
YXZlVW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAg
ICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJE
aXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJblJl
Z2lzdGVyRmlsZToKLSAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAg
ICAgICAgIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycysrOwotICAgICAgICAgICAg
QVNTRVJUKChpbnQpcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPj0gMCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBtaWdodCBsaWtlIHRvIHN0b3JlIHRvIHRoaXMg
dmlydHVhbCByZWdpc3RlciBiZWZvcmUgZG9pbmcKLSAgICAgICAgICAgIC8vIHZpcnR1YWwgcmVn
aXN0ZXIgc2h1ZmZsaW5nLiBJZiBzbywgd2Ugc2F5IHRoYXQgdGhlIHZpcnR1YWwgcmVnaXN0ZXIK
LSAgICAgICAgICAgIC8vIGlzIHBvaXNvbmVkOiBpdCBjYW5ub3QgYmUgc3RvcmVkIHRvIHVudGls
IGFmdGVyIGRpc3BsYWNlZCB2aXJ0dWFsCi0gICAgICAgICAgICAvLyByZWdpc3RlcnMgYXJlIGhh
bmRsZWQuIFdlIHRyYWNrIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXIgY2FyZWZ1bGx5Ci0gICAg
ICAgICAgICAvLyB0byBlbnN1cmUgdGhpcyBoYXBwZW5zIGVmZmljaWVudGx5LiBOb3RlIHRoYXQg
d2UgZXhwZWN0IHRoaXMgY2FzZQotICAgICAgICAgICAgLy8gdG8gYmUgcmFyZSwgc28gdGhlIGhh
bmRsaW5nIG9mIGl0IGlzIG9wdGltaXplZCBmb3IgdGhlIGNhc2VzIGluCi0gICAgICAgICAgICAv
LyB3aGljaCBpdCBkb2VzIG5vdCBoYXBwZW4uCi0gICAgICAgICAgICBpZiAocmVjb3Zlcnkudmly
dHVhbFJlZ2lzdGVyKCkgPCAoaW50KWV4aXQubV92YXJpYWJsZXMuc2l6ZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgc3dpdGNoIChleGl0Lm1fdmFyaWFibGVzW3JlY292ZXJ5LnZpcnR1YWxSZWdpc3Rl
cigpXS50ZWNobmlxdWUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgSW5HUFI6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKLSAgICAgICAgICAgICAgICBjYXNlIElu
RlBSOgotICAgICAgICAgICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1ty
ZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBv
aXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3Rl
cnMrKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICBjYXNlIEFs
cmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgotICAgICAgICAgICAgaGF2ZVVuYm94
ZWRJbnQzMnMgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAgIGhhdmVGUFJzID0gdHJ1ZTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ29uc3RhbnQ6Ci0gICAgICAgICAg
ICBoYXZlQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS5jb25zdGFu
dCgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgaGF2ZVVuZGVmaW5lZCA9IHRydWU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0jaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQotICAgIGZwcmludGYoc3RkZXJyLCAiICAiKTsKLSAgICBpZiAobnVtYmVy
T2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiUG9p
c29uZWQ9JXUgIiwgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOwotICAgIGlmIChu
dW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpCi0gICAgICAgIGZwcmludGYoc3RkZXJy
LCAiRGlzcGxhY2VkPSV1ICIsIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyk7Ci0g
ICAgaWYgKGhhdmVVbmJveGVkSW50MzJzKQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYm94
ZWRJbnQzMiAiKTsKLSAgICBpZiAoaGF2ZUZQUnMpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAi
RlBSICIpOwotICAgIGlmIChoYXZlQ29uc3RhbnRzKQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkNvbnN0YW50cyAiKTsKLSAgICBpZiAoaGF2ZVVuZGVmaW5lZCkKLSAgICAgICAgZnByaW50Zihz
dGRlcnIsICJVbmRlZmluZWQgIik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIgIik7Ci0jZW5kaWYK
LSAgICAKLSAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaEJ1ZmZlciA9IHN0YXRpY19jYXN0PEVu
Y29kZWRKU1ZhbHVlKj4oZ2xvYmFsRGF0YSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpICogKG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgKG51
bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVycyA/IDAgOiBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpKSkpOwotCi0gICAg
Ly8gRnJvbSBoZXJlIG9uLCB0aGUgY29kZSBhc3N1bWVzIHRoYXQgaXQgaXMgcHJvZml0YWJsZSB0
byBtYXhpbWl6ZSB0aGUgZGlzdGFuY2UKLSAgICAvLyBiZXR3ZWVuIHdoZW4gc29tZXRoaW5nIGlz
IGNvbXB1dGVkIGFuZCB3aGVuIGl0IGlzIHN0b3JlZC4KLSAgICAKLSAgICAvLyA1KSBQZXJmb3Jt
IGFsbCByZWJveGluZyBvZiBpbnRlZ2Vycy4KLSAgICAKLSAgICBpZiAoaGF2ZVVuYm94ZWRJbnQz
MnMpIHsKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgIHN3aXRj
aCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMy
SW5HUFI6Ci0gICAgICAgICAgICAgICAgaWYgKHJlY292ZXJ5LmdwcigpICE9IGFscmVhZHlCb3hl
ZCkKLSAgICAgICAgICAgICAgICAgICAgb3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCByZWNvdmVyeS5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZElu
dDMyOgotICAgICAgICAgICAgICAgIHN0b3JlMzIoSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KFRhZ1R5cGVOdW1iZXIgPj4gMzIpKSwgdGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyA2
KSBEdW1wIGFsbCBub24tcG9pc29uZWQgR1BScy4gRm9yIHBvaXNvbmVkIEdQUnMsIHNhdmUgdGhl
bSBpbnRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UuCi0gICAgLy8gICAgTm90ZSB0aGF0IEdQUnMgZG8g
bm90IGhhdmUgYSBmYXN0IGNoYW5nZSAobGlrZSBoYXZlRlBScykgYmVjYXVzZSB3ZSBleHBlY3Qg
dGhhdAotICAgIC8vICAgIG1vc3QgT1NSIGZhaWx1cmUgcG9pbnRzIHdpbGwgaGF2ZSBhdCBsZWFz
dCBvbmUgR1BSIHRoYXQgbmVlZHMgdG8gYmUgZHVtcGVkLgotICAgIAotICAgIHVuc2lnbmVkIHNj
cmF0Y2hJbmRleCA9IDA7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVt
YmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICBpbnQgb3Bl
cmFuZCA9IGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KTsKLSAgICAgICAgc3dpdGNoIChyZWNv
dmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIEluR1BSOgotICAgICAgICBjYXNlIFVu
Ym94ZWRJbnQzMkluR1BSOgotICAgICAgICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkg
JiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCld
KQotICAgICAgICAgICAgICAgIHN0b3JlUHRyKHJlY292ZXJ5LmdwcigpLCBzY3JhdGNoQnVmZmVy
ICsgc2NyYXRjaEluZGV4KyspOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0
b3JlUHRyKHJlY292ZXJ5LmdwcigpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFu
ZCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBBdCB0aGlzIHBvaW50IGFsbCBH
UFJzIGFyZSBhdmFpbGFibGUgZm9yIHNjcmF0Y2ggdXNlLgotICAgIAotICAgIGlmIChoYXZlRlBS
cykgewotICAgICAgICAvLyA3KSBCb3ggYWxsIGRvdWJsZXMgKHJlbGllcyBvbiB0aGVyZSBiZWlu
ZyBtb3JlIEdQUnMgdGhhbiBGUFJzKQotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaW5kZXgg
PSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5
KGluZGV4KTsKLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEZQUlJlZyBmcHIgPSByZWNv
dmVyeS5mcHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVy
KEZQUkluZm86OnRvSW5kZXgoZnByKSk7Ci0gICAgICAgICAgICBib3hEb3VibGUoZnByLCBncHIp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyA4KSBEdW1wIGFsbCBkb3VibGVzIGlu
dG8gdGhlIHJlZ2lzdGVyIGZpbGUsIG9yIHRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UgaWYKLSAgICAg
ICAgLy8gICAgdGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgcmVnaXN0ZXIgaXMgcG9pc29uZWQuCi0g
ICAgICAgIAotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJP
ZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICAgICAgaWYg
KHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6
dG9JbmRleChyZWNvdmVyeS5mcHIoKSkpOwotICAgICAgICAgICAgaWYgKGV4aXQuaXNWYXJpYWJs
ZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRl
eChpbmRleCldKQotICAgICAgICAgICAgICAgIHN0b3JlUHRyKGdwciwgc2NyYXRjaEJ1ZmZlciAr
IHNjcmF0Y2hJbmRleCsrKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdG9y
ZVB0cihncHIsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRl
eChpbmRleCkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoc2NyYXRjaElu
ZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKLSAgICAKLSAgICAvLyA5
KSBSZXNodWZmbGUgZGlzcGxhY2VkIHZpcnR1YWwgcmVnaXN0ZXJzLiBPcHRpbWl6ZSBmb3IgdGhl
IGNhc2UgdGhhdAotICAgIC8vICAgIHRoZSBudW1iZXIgb2YgZGlzcGxhY2VkIHZpcnR1YWwgcmVn
aXN0ZXJzIGlzIG5vdCBtb3JlIHRoYW4gdGhlIG51bWJlcgotICAgIC8vICAgIG9mIGF2YWlsYWJs
ZSBwaHlzaWNhbCByZWdpc3RlcnMuCi0gICAgCi0gICAgaWYgKG51bWJlck9mRGlzcGxhY2VkVmly
dHVhbFJlZ2lzdGVycykgewotICAgICAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVn
aXN0ZXJzIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKSB7Ci0gICAgICAgICAgICAvLyBT
byBmYXIgdGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBjYXNlIHRoYXQgdHJpZ2dlcnMgYWxsIHRoZSB0
aW1lLCBidXQKLSAgICAgICAgICAgIC8vIHRoYXQgaXMgZmFyIGZyb20gZ3VhcmFudGVlZC4KLSAg
ICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRleCA9IDA7Ci0gICAg
ICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJp
ZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJl
Y292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9y
KHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFj
ZW1lbnRJbmRleCsrKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZp
bGU6IHsKLSAgICAgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0
ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyk7Ci0gICAgICAgICAgICAgICAgICAgIGxvYWQzMihhZGRy
ZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgZ3ByKTsKLSAgICAgICAgICAgICAg
ICAgICAgb3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6
IHsKLSAgICAgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIo
ZGlzcGxhY2VtZW50SW5kZXgrKyk7Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIGdwcik7Ci0gICAgICAgICAgICAgICAg
ICAgIHN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAg
IGRpc3BsYWNlbWVudEluZGV4ID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsg
aW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3Zlcnko
aW5kZXgpOwotICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsK
LSAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICAg
ICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgICAgICAg
ICBjYXNlIERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICAgICAgICAgICAg
ICBzdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBhZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdXNlIHRoZSBzaHVmZmxpbmcgYWxnb3JpdGhtIHRoYXQgd2UgdXNl
Ci0gICAgICAgICAgICAvLyBmb3Igc3BlY3VsYXRpdmUtPm5vbi1zcGVjdWxhdGl2ZSBqdW1wcywg
aWYgd2UgZXZlciBkaXNjb3ZlciB0aGF0Ci0gICAgICAgICAgICAvLyBzb21lIGhvdCBjb2RlIHdp
dGggbG90cyBvZiBsaXZlIHZhbHVlcyB0aGF0IGdldCBkaXNwbGFjZWQgYW5kCi0gICAgICAgICAg
ICAvLyBzcGlsbGVkIHJlYWxseSBlbmpveXMgZnJlcXVlbnRseSBmYWlsaW5nIHNwZWN1bGF0aW9u
LgotICAgICAgICAKLSAgICAgICAgICAgIC8vIEZvciBub3cgdGhpcyBjb2RlIGlzIGVuZ2luZWVy
ZWQgdG8gYmUgY29ycmVjdCBidXQgcHJvYmFibHkgbm90Ci0gICAgICAgICAgICAvLyBzdXBlci4g
SW4gcGFydGljdWxhciwgaXQgY29ycmVjdGx5IGhhbmRsZXMgY2FzZXMgd2hlcmUgZm9yIGV4YW1w
bGUKLSAgICAgICAgICAgIC8vIHRoZSBkaXNwbGFjZW1lbnRzIGFyZSBhIHBlcm11dGF0aW9uIG9m
IHRoZSBkZXN0aW5hdGlvbiB2YWx1ZXMsIGxpa2UKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAvLyAxIC0+IDIKLSAgICAgICAgICAgIC8vIDIgLT4gMQotICAgICAgICAgICAgLy8KLSAgICAg
ICAgICAgIC8vIEl0IGFjY29tcGxpc2hlcyB0aGlzIGJ5IHNpbXBseSBsaWZ0aW5nIGFsbCBvZiB0
aGUgdmlydHVhbCByZWdpc3RlcnMKLSAgICAgICAgICAgIC8vIGZyb20gdGhlaXIgb2xkIChERkcg
SklUKSBsb2NhdGlvbnMgYW5kIGRyb3BwaW5nIHRoZW0gaW4gYSBzY3JhdGNoCi0gICAgICAgICAg
ICAvLyBsb2NhdGlvbiBpbiBtZW1vcnksIGFuZCB0aGVuIHRyYW5zZmVycmluZyBmcm9tIHRoYXQg
c2NyYXRjaCBsb2NhdGlvbgotICAgICAgICAgICAgLy8gdG8gdGhlaXIgbmV3IChvbGQgSklUKSBs
b2NhdGlvbnMuCi0gICAgICAgIAotICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRl
eCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50
ZWNobmlxdWUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZp
bGU6Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgc3Rv
cmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKLSAgICAgICAgICAg
ICAgICAgICAgbG9hZDMyKGFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBz
dG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluUmVnaXN0
ZXJGaWxlOiB7Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihyZWNvdmVy
eS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAg
ICAgc3ViUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDAp
OwotICAgICAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaEJ1
ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQ
b2lzb25lZFZpcnR1YWxSZWdpc3RlcnM7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7
IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5
KGluZGV4KTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAg
ICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgICAgICAgICAg
ICAgbG9hZFB0cihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJlZ1Qw
KTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NG
b3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoc2NyYXRjaElu
ZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgbnVtYmVyT2ZEaXNwbGFj
ZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyAxMCkg
RHVtcCBhbGwgcG9pc29uZWQgdmlydHVhbCByZWdpc3RlcnMuCi0gICAgCi0gICAgc2NyYXRjaElu
ZGV4ID0gMDsKLSAgICBpZiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpIHsKLSAg
ICAgICAgZm9yIChpbnQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgKGlu
dClleGl0Lm1fdmFyaWFibGVzLnNpemUoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKLSAgICAgICAg
ICAgIGlmICghcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW3ZpcnR1YWxSZWdpc3Rlcl0pCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC5tX3ZhcmlhYmxlc1t2aXJ0dWFsUmVnaXN0ZXJd
OwotICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICAg
ICAgY2FzZSBJbkdQUjoKLSAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAg
ICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAgICAgICAgIGxvYWRQdHIoc2NyYXRjaEJ1ZmZl
ciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgc3Rv
cmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcil2aXJ0dWFs
UmVnaXN0ZXIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJPZlBv
aXNvbmVkVmlydHVhbFJlZ2lzdGVycyk7Ci0gICAgCi0gICAgLy8gMTEpIER1bXAgYWxsIGNvbnN0
YW50cy4gT3B0aW1pemUgZm9yIFVuZGVmaW5lZCwgc2luY2UgdGhhdCdzIGEgY29uc3RhbnQgd2Ug
c2VlCi0gICAgLy8gICAgIG9mdGVuLgotCi0gICAgaWYgKGhhdmVDb25zdGFudHMpIHsKLSAgICAg
ICAgaWYgKGhhdmVVbmRlZmluZWQpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAK
LSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVy
aWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgIGlmIChyZWNvdmVy
eS50ZWNobmlxdWUoKSAhPSBDb25zdGFudCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGlmIChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAg
ICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdp
c3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShyZWNv
dmVyeS5jb25zdGFudCgpKSksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJh
bmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyAxMikg
QWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBjb3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhpdGlu
ZyBPU1IsIHdlIGtub3cKLSAgICAvLyAgICAgdGhhdCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBj
b2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQsIHNvIHRoZSBleGVjdXRlCi0gICAgLy8gICAgIGNv
dW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0IGFu
ZCBjYWxsIGZyYW1lcwotICAgIC8vICAgICB0aGF0IHdlcmUgc3RpbGwgZXhlY3V0aW5nIHRoZSBv
bGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIgY2FsbCBmcmFtZSdzCi0gICAgLy8gICAgIE9T
UiBleGl0LiBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKLSAg
ICAvLwotICAgIC8vICAgICAoYSkgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBh
IGNoYW5jZSB0byByZWVudGVyIG9wdGltaXplZAotICAgIC8vICAgICAgICAgY29kZSBldmVudHVh
bGx5LCBzaW5jZSBvcHRpbWl6ZWQgY29kZSBpcyBmYXN0ZXIuIEJ1dCB3ZSBkb24ndAotICAgIC8v
ICAgICAgICAgd2FudCB0byBkbyBzdWNoIHJlZW50ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkgKHNlZSAo
YykgYmVsb3cpLgotICAgIC8vCi0gICAgLy8gICAgIChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRo
ZSBjYWxsIHN0YWNrIHRoYXQgaXMgc3RpbGwgcnVubmluZyB0aGUgb2xkCi0gICAgLy8gICAgICAg
ICBKSVQncyBjb2RlIGFuZCBoYXMgbmV2ZXIgT1NSJ2QsIHRoZW4gaXQgc2hvdWxkIGdldCBhIGNo
YW5jZSB0bwotICAgIC8vICAgICAgICAgcGVyZm9ybSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFj
dCB0aGF0IHdlJ3ZlIGV4aXRlZC4KLSAgICAvLwotICAgIC8vICAgICAoYykgQ29kZSB0aGUgcGVy
Zm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSByZXRyeSBPU1IKLSAgICAv
LyAgICAgICAgIGVudHJ5LCBzaW5jZSBib3RoIGZvcm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBP
U1IgZW50cnkgaXMKLSAgICAvLyAgICAgICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCi0gICAg
Ly8KLSAgICAvLyAgICAgKGQpIEZyZXF1ZW50IE9TUiBmYWlsdXJlcywgZXZlbiB0aG9zZSB0aGF0
IGRvIG5vdCByZXN1bHQgaW4gdGhlIGNvZGUKLSAgICAvLyAgICAgICAgIHJ1bm5pbmcgaW4gYSBo
b3QgbG9vcCwgcmVzdWx0IGluIHJlY29tcGlsYXRpb24gZ2V0dGluZyB0cmlnZ2VyZWQuCi0gICAg
Ly8KLSAgICAvLyAgICAgVG8gZW5zdXJlIChjKSwgd2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0
ZSBjb3VudGVyIHRvCi0gICAgLy8gICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJt
VXAoKS4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGVuZGFuZ2VyCi0gICAgLy8gICAgIChhKSBh
bmQgKGIpLCBzaW5jZSB0aGVuIGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5IHRoZSBvcHBvcnR1
bml0eSBmb3IKLSAgICAvLyAgICAgZXZlcnkgY2FsbCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRy
eS4gRXNzZW50aWFsbHksIGlmIE9TUiBleGl0IGhhcHBlbnMKLSAgICAvLyAgICAgZnJlcXVlbnRs
eSBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBmZXcgbG9vcHMsIHRoZW4gdGhlIGNvdW50ZXIgd2lsbCBu
ZXZlcgotICAgIC8vICAgICBiZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBu
ZXZlciBiZSB0cmlnZ2VyZWQuIE9TUiBlbnRyeQotICAgIC8vICAgICB3aWxsIG9ubHkgaGFwcGVu
IGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xkIEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0eQot
ICAgIC8vICAgICBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkgYW5kIChiKS4gQnV0IHRoYXQgZG9l
c24ndCB0YWtlIGNhcmUgb2YgKGQpLAotICAgIC8vICAgICBzaW5jZSBlYWNoIHNwZWN1bGF0aW9u
IGZhaWx1cmUgd291bGQgcmVzZXQgdGhlIGV4ZWN1dGUgY291bnRlci4KLSAgICAvLyAgICAgU28g
d2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVzIGlzIHNp
Z25pZmljYW50bHkKLSAgICAvLyAgICAgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBzdWNjZXNz
ZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFuZCBpZgotICAgIC8vICAgICB0aGVyZSBo
YXZlIGJlZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9mIGZhaWx1cmVzLiBJZiBzbywgd2Ugc2V0
IHRoZQotICAgIC8vICAgICBjb3VudGVyIHRvIDA7IG90aGVyd2lzZSB3ZSBzZXQgdGhlIGNvdW50
ZXIgdG8KLSAgICAvLyAgICAgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLgot
ICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2soKSksIEdQUkluZm86OnJlZ1Qw
KTsKLSAgICAKLSAgICBsb2FkMzIoQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpv
ZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQUkluZm86OnJlZ1QyKTsKLSAgICBs
b2FkMzIoQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0
aXZlU3VjY2Vzc0NvdW50ZXIoKSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICBhZGQzMihJbW0zMigx
KSwgR1BSSW5mbzo6cmVnVDIpOwotICAgIGFkZDMyKEltbTMyKC0xKSwgR1BSSW5mbzo6cmVnVDEp
OwotICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDIsIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpKTsKLSAgICBzdG9yZTMy
KEdQUkluZm86OnJlZ1QxLCBBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNl
dE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwgR1BSSW5mbzo6cmVnVDApOwotICAg
IAotICAgIEp1bXAgZmV3RmFpbHMgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIEdQUkluZm86OnJl
Z1QyLCBJbW0zMihjb2RlQmxvY2soKS0+bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSkpOwotICAg
IG11bDMyKEltbTMyKEhldXJpc3RpY3M6OmRlc2lyZWRTcGVjdWxhdGl2ZVN1Y2Nlc3NGYWlsUmF0
aW8pLCBHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6cmVnVDIpOwotICAgIAotICAgIEp1bXAgbG93
RmFpbFJhdGUgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZv
OjpyZWdUMSk7Ci0gICAgCi0gICAgLy8gUmVvcHRpbWl6ZSBhcyBzb29uIGFzIHBvc3NpYmxlLgot
ICAgIHN0b3JlMzIoSW1tMzIoSGV1cmlzdGljczo6ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0
aW1pemVOZXh0SW52b2NhdGlvbiksIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigpKSk7Ci0gICAgSnVtcCBkb25lQWRqdXN0aW5nID0ganVt
cCgpOwotICAgIAotICAgIGZld0ZhaWxzLmxpbmsodGhpcyk7Ci0gICAgbG93RmFpbFJhdGUubGlu
ayh0aGlzKTsKLSAgICAKLSAgICBzdG9yZTMyKEltbTMyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2
ZSgpLT5jb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwgQWRkcmVzcyhH
UFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkpKTsKLSAg
ICAKLSAgICBkb25lQWRqdXN0aW5nLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgLy8gMTMpIExvYWQg
dGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBvcGVyYXRpb24gaW50byByZWdUMC4KLSAg
ICAKLSAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCkpCi0gICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVy
KWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsK
LSAgICAKLSAgICAvLyAxNCkgRml4IGNhbGwgZnJhbWUocykuCi0gICAgCi0gICAgQVNTRVJUKGNv
ZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxp
bmVKSVQpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCktPmFsdGVybmF0
aXZlKCkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxv
Y2spKTsKLSAgICAKLSAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2Rl
T3JpZ2luOyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmln
aW4pOwotICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFz
ZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpOwotICAgICAgICBWZWN0
b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBkZWNvZGVkQ29k
ZU1hcEZvcihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlcik7Ci0gICAgICAgIHVuc2lnbmVkIHJl
dHVybkJ5dGVjb2RlSW5kZXggPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5ieXRlY29kZUluZGV4
ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKLSAgICAgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zm
c2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5z
aWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2Rl
ZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCByZXR1cm5CeXRlY29kZUlu
ZGV4KTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChtYXBwaW5nKTsKLSAgICAgICAgQVNTRVJU
KG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSByZXR1cm5CeXRlY29kZUluZGV4KTsKLSAgICAg
ICAgCi0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdl
dEpJVENvZGUoKS5zdGFydCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOwotCi0g
ICAgICAgIEdQUlJlZyBjYWxsZXJGcmFtZUdQUjsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgYWRkUHRyKEltbTMyKGlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86
OnJlZ1QzKTsKLSAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6cmVnVDM7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlcjsKLSAgICAgICAgCi0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIo
YmFzZWxpbmVDb2RlQmxvY2spLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpKTsKLSAgICAg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS0+c2NvcGUo
KSksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpKTsKLSAgICAgICAgc3RvcmVQdHIoY2Fs
bGVyRnJhbWVHUFIsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpKSk7Ci0gICAgICAgIHN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdp
c3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6UmV0dXJu
UEMpKSk7Ci0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkpKSwgYWRkcmVzc0Zvcigo
VmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJG
aWxlOjpBcmd1bWVudENvdW50KSkpOwotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVlLmdldCgpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVy
KShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKSk7
Ci0gICAgfQotICAgIAotICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
Ci0gICAgICAgIGFkZFB0cihJbW0zMihleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKTsKLSAgICAKLSAgICAvLyAxNSkgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5n
IGJhc2VsaW5lIEpJVCBjb2RlLgotICAgIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7Ci0gICAgVmVjdG9y
PEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gZGVjb2RlZENvZGVN
YXBGb3IoYmFzZWxpbmVDb2RlQmxvY2spOwotICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVu
c2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29k
ZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgCi0gICAgQVNTRVJUKG1hcHBpbmcpOwotICAgIEFTU0VS
VChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgCi0gICAgdm9pZCoganVtcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihiYXNlbGluZUNvZGVCbG9jay0+Z2V0SklU
Q29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7Ci0gICAgCi0g
ICAgQVNTRVJUKEdQUkluZm86OnJlZ1QxICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVy
KTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJl
Z1QxKTsKLSAgICBqdW1wKEdQUkluZm86OnJlZ1QxKTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdf
VkVSQk9TRSkKLSAgICBmcHJpbnRmKHN0ZGVyciwgIi0+ICVwXG4iLCBqdW1wVGFyZ2V0KTsKLSNl
bmRpZgotfQotCi0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKLQogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
MzJfNjQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkgJiYgVVNF
KEpTVkFMVUUzMl82NCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lk
IE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgT1NSRXhpdCYgZXhpdCwgU3BlY3Vs
YXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCit7CisgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZmLgor
ICAgIGV4aXQubV9jaGVjay5saW5rKCZtX2ppdCk7CisKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZF
UkJPU0UpCisgICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQgKCIsIChp
bnQpZXhpdC5tX25vZGVJbmRleCk7CisgICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBl
eGl0Lm1fY29kZU9yaWdpbjsgOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUtPmNhbGxlcikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImJjIyV1IiwgY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiAlcCAi
LCBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7CisgICAgfQor
ICAgIGZwcmludGYoc3RkZXJyLCAiKSBhdCBKSVQgb2Zmc2V0IDB4JXggICIsIG1faml0LmRlYnVn
T2Zmc2V0KCkpOworICAgIGV4aXQuZHVtcChzdGRlcnIpOworI2VuZGlmCisjaWYgREZHX0VOQUJM
RShWRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCisgICAgU3BlY3VsYXRpb25GYWlsdXJlRGVi
dWdJbmZvKiBkZWJ1Z0luZm8gPSBuZXcgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvOworICAg
IGRlYnVnSW5mby0+Y29kZUJsb2NrID0gbV9qaXQuY29kZUJsb2NrKCk7CisgICAgZGVidWdJbmZv
LT5kZWJ1Z09mZnNldCA9IG1faml0LmRlYnVnT2Zmc2V0KCk7CisgICAgCisgICAgbV9qaXQuZGVi
dWdDYWxsKGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUsIGRlYnVnSW5mbyk7
CisjZW5kaWYKKyAgICAKKyNpZiBERkdfRU5BQkxFKEpJVF9CUkVBS19PTl9TUEVDVUxBVElPTl9G
QUlMVVJFKQorICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgIAorI2lmIERGR19F
TkFCTEUoU1VDQ0VTU19TVEFUUykKKyAgICBzdGF0aWMgU2FtcGxpbmdDb3VudGVyIGNvdW50ZXIo
IlNwZWN1bGF0aW9uRmFpbHVyZSIpOworICAgIG1faml0LmVtaXRDb3VudChjb3VudGVyKTsKKyNl
bmRpZgorCisgICAgLy8gMikgUGVyZm9ybSBzcGVjdWxhdGlvbiByZWNvdmVyeS4gVGhpcyBvbmx5
IGNvbWVzIGludG8gcGxheSB3aGVuIGFuIG9wZXJhdGlvbgorICAgIC8vICAgIHN0YXJ0cyBtdXRh
dGluZyBzdGF0ZSBiZWZvcmUgdmVyaWZ5aW5nIHRoZSBzcGVjdWxhdGlvbiBpdCBoYXMgYWxyZWFk
eSBtYWRlLgorICAgIAorICAgIGlmIChyZWNvdmVyeSkgeworICAgICAgICBzd2l0Y2ggKHJlY292
ZXJ5LT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKKyAgICAgICAgICAg
IG1faml0LnN1YjMyKHJlY292ZXJ5LT5zcmMoKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlv
bkNoZWNrOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gMykgUmVm
aW5lIHNvbWUgdmFsdWUgcHJvZmlsZSwgaWYgYXBwcm9wcmlhdGUuCisgICAgCisgICAgaWYgKCEh
ZXhpdC5tX2pzVmFsdWVTb3VyY2UgJiYgISFleGl0Lm1fdmFsdWVQcm9maWxlKSB7CisgICAgICAg
IGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkgeworICAgICAgICAgICAgLy8g
U2F2ZSBhIHJlZ2lzdGVyIHNvIHdlIGNhbiB1c2UgaXQuCisgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaCA9IEdQUkluZm86OnJlZ1QwOworICAgICAgICAgICAgaWYgKHNjcmF0Y2ggPT0gZXhpdC5t
X2pzVmFsdWVTb3VyY2UuYmFzZSgpKQorICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBHUFJJbmZv
OjpyZWdUMTsKKyAgICAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoQnVmZmVyID0gc3Rh
dGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihtX2ppdC5nbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZm
ZXJGb3JTaXplKHNpemVvZih1aW50MzJfdCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
c2NyYXRjaCwgc2NyYXRjaEJ1ZmZlcik7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoZXhpdC5t
X2pzVmFsdWVTb3VyY2UuYXNBZGRyZXNzKE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMudGFnKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihzY3JhdGNoLCAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihleGl0Lm1f
dmFsdWVQcm9maWxlLT5zcGVjRmFpbEJ1Y2tldCgwKSktPmFzQml0cy50YWcpOworICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKGV4aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcyhPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgc2NyYXRjaCk7
CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gsICZiaXR3aXNlX2Nhc3Q8RW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvcio+KGV4aXQubV92YWx1ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDAp
KS0+YXNCaXRzLnBheWxvYWQpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKHNjcmF0Y2hCdWZm
ZXIsIHNjcmF0Y2gpOworICAgICAgICB9IGVsc2UgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmhh
c0tub3duVGFnKCkpIHsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJz
OjpJbW0zMihleGl0Lm1fanNWYWx1ZVNvdXJjZS50YWcoKSksICZiaXR3aXNlX2Nhc3Q8RW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvcio+KGV4aXQubV92YWx1ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDAp
KS0+YXNCaXRzLnRhZyk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGV4aXQubV9qc1ZhbHVl
U291cmNlLnBheWxvYWRHUFIoKSwgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
Kj4oZXhpdC5tX3ZhbHVlUHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQoMCkpLT5hc0JpdHMucGF5bG9h
ZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGV4aXQubV9q
c1ZhbHVlU291cmNlLnRhZ0dQUigpLCAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IqPihleGl0Lm1fdmFsdWVQcm9maWxlLT5zcGVjRmFpbEJ1Y2tldCgwKSktPmFzQml0cy50YWcp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihleGl0Lm1fanNWYWx1ZVNvdXJjZS5wYXlsb2Fk
R1BSKCksICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGV4aXQubV92YWx1
ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnBheWxvYWQpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIC8vIDQpIEZpZ3VyZSBvdXQgaG93IG1hbnkgc2NyYXRjaCBzbG90
cyB3ZSdsbCBuZWVkLiBXZSBuZWVkIG9uZSBmb3IgZXZlcnkgR1BSL0ZQUgorICAgIC8vICAgIHdo
b3NlIGRlc3RpbmF0aW9uIGlzIG5vdyBvY2N1cGllZCBieSBhIERGRyB2aXJ0dWFsIHJlZ2lzdGVy
LCBhbmQgd2UgbmVlZAorICAgIC8vICAgIG9uZSBmb3IgZXZlcnkgZGlzcGxhY2VkIHZpcnR1YWwg
cmVnaXN0ZXIgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbgorICAgIC8vICAgIEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzIG9mIHRoZW0uIEFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uc3RhbnRz
LAorICAgIC8vICAgIGFueSB1bmRlZmluZWQgc2xvdHMsIGFueSBGUFIgc2xvdHMsIGFuZCBhbnkg
dW5ib3hlZCBpbnRzLgorICAgICAgICAgICAgCisgICAgVmVjdG9yPGJvb2w+IHBvaXNvbmVkVmly
dHVhbFJlZ2lzdGVycyhleGl0Lm1fdmFyaWFibGVzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycy5zaXplKCk7ICsraSkKKyAgICAg
ICAgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2ldID0gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBu
dW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyA9IDA7CisgICAgdW5zaWduZWQgbnVtYmVy
T2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzID0gMDsKKyAgICAKKyAgICAvLyBCb29sZWFucyBm
b3IgZmFzdCBjaGVja3MuIFdlIGV4cGVjdCB0aGF0IG1vc3QgT1NSIGV4aXRzIGRvIG5vdCBoYXZl
IHRvIHJlYm94CisgICAgLy8gSW50MzJzLCBoYXZlIG5vIEZQUnMsIGFuZCBoYXZlIG5vIGNvbnN0
YW50cy4gSWYgdGhlcmUgYXJlIGNvbnN0YW50cywgd2UKKyAgICAvLyBleHBlY3QgbW9zdCBvZiB0
aGVtIHRvIGJlIGpzVW5kZWZpbmVkKCk7IGlmIHRoYXQncyB0cnVlIHRoZW4gd2UgaGFuZGxlIHRo
YXQKKyAgICAvLyBzcGVjaWFsbHkgdG8gbWluaW1pemUgY29kZSBzaXplIGFuZCBleGVjdXRpb24g
dGltZS4KKyAgICBib29sIGhhdmVVbmJveGVkSW50MzJJblJlZ2lzdGVyRmlsZSA9IGZhbHNlOwor
ICAgIGJvb2wgaGF2ZVVuYm94ZWRDZWxsSW5SZWdpc3RlckZpbGUgPSBmYWxzZTsKKyAgICBib29s
IGhhdmVVbmJveGVkQm9vbGVhbkluUmVnaXN0ZXJGaWxlID0gZmFsc2U7CisgICAgYm9vbCBoYXZl
RlBScyA9IGZhbHNlOworICAgIGJvb2wgaGF2ZUNvbnN0YW50cyA9IGZhbHNlOworICAgIGJvb2wg
aGF2ZVVuZGVmaW5lZCA9IGZhbHNlOworICAgIAorICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5k
ZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAg
ICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIERpc3Bs
YWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFs
UmVnaXN0ZXJzKys7CisgICAgICAgICAgICBBU1NFUlQoKGludClyZWNvdmVyeS52aXJ0dWFsUmVn
aXN0ZXIoKSA+PSAwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2VlIGlmIHdlIG1p
Z2h0IGxpa2UgdG8gc3RvcmUgdG8gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyIGJlZm9yZSBkb2luZwor
ICAgICAgICAgICAgLy8gdmlydHVhbCByZWdpc3RlciBzaHVmZmxpbmcuIElmIHNvLCB3ZSBzYXkg
dGhhdCB0aGUgdmlydHVhbCByZWdpc3RlcgorICAgICAgICAgICAgLy8gaXMgcG9pc29uZWQ6IGl0
IGNhbm5vdCBiZSBzdG9yZWQgdG8gdW50aWwgYWZ0ZXIgZGlzcGxhY2VkIHZpcnR1YWwKKyAgICAg
ICAgICAgIC8vIHJlZ2lzdGVycyBhcmUgaGFuZGxlZC4gV2UgdHJhY2sgcG9pc29uZWQgdmlydHVh
bCByZWdpc3RlciBjYXJlZnVsbHkKKyAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0aGlzIGhhcHBl
bnMgZWZmaWNpZW50bHkuIE5vdGUgdGhhdCB3ZSBleHBlY3QgdGhpcyBjYXNlCisgICAgICAgICAg
ICAvLyB0byBiZSByYXJlLCBzbyB0aGUgaGFuZGxpbmcgb2YgaXQgaXMgb3B0aW1pemVkIGZvciB0
aGUgY2FzZXMgaW4KKyAgICAgICAgICAgIC8vIHdoaWNoIGl0IGRvZXMgbm90IGhhcHBlbi4KKyAg
ICAgICAgICAgIGlmIChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA8IChpbnQpZXhpdC5tX3Zh
cmlhYmxlcy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4aXQubV92YXJpYWJs
ZXNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldLnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BS
OgorICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKKyAgICAgICAgICAg
ICAgICBjYXNlIEluUGFpcjoKKyAgICAgICAgICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAg
ICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFs
UmVnaXN0ZXIoKV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvaXNvbmVkVmlydHVhbFJl
Z2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgorICAgICAgICAgICAg
aGF2ZVVuYm94ZWRJbnQzMkluUmVnaXN0ZXJGaWxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJv
eGVkQ2VsbDoKKyAgICAgICAgICAgIGhhdmVVbmJveGVkQ2VsbEluUmVnaXN0ZXJGaWxlID0gdHJ1
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQWxyZWFk
eUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQm9vbGVhbjoKKyAgICAgICAgICAgIGhhdmVVbmJveGVk
Qm9vbGVhbkluUmVnaXN0ZXJGaWxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgICAgICBoYXZlRlBScyA9IHRydWU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbnN0YW50
OgorICAgICAgICAgICAgaGF2ZUNvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBpZiAocmVj
b3ZlcnkuY29uc3RhbnQoKS5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGhhdmVVbmRl
ZmluZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoQnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFs
dWUqPihtX2ppdC5nbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkgKiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMgKyAoKG51bWJl
ck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyAqIDIpIDw9IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzID8gMCA6IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykpKSk7CisKKyAg
ICAvLyBGcm9tIGhlcmUgb24sIHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpdCBpcyBwcm9maXRhYmxl
IHRvIG1heGltaXplIHRoZSBkaXN0YW5jZQorICAgIC8vIGJldHdlZW4gd2hlbiBzb21ldGhpbmcg
aXMgY29tcHV0ZWQgYW5kIHdoZW4gaXQgaXMgc3RvcmVkLgorICAgIAorICAgIC8vIDUpIFBlcmZv
cm0gYWxsIHJlYm94aW5nIG9mIGludGVnZXJzIGFuZCBjZWxscywgZXhjZXB0IGZvciB0aG9zZSBp
biByZWdpc3RlcnMuCisKKyAgICBpZiAoaGF2ZVVuYm94ZWRJbnQzMkluUmVnaXN0ZXJGaWxlIHx8
IGhhdmVVbmJveGVkQ2VsbEluUmVnaXN0ZXJGaWxlIHx8IGhhdmVVbmJveGVkQm9vbGVhbkluUmVn
aXN0ZXJGaWxlKSB7CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51
bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAg
ICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFscmVh
ZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgorICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBB
c3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGV4aXQu
b3BlcmFuZEZvckluZGV4KGluZGV4KSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxsOgorICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1
YWxSZWdpc3Rlcj4oZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5i
b3hlZEJvb2xlYW46CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0
YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihleGl0Lm9wZXJhbmRGb3JJbmRleChp
bmRleCkpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyA2KSBEdW1wIGFsbCBub24tcG9pc29uZWQgR1BScy4gRm9yIHBvaXNvbmVkIEdQ
UnMsIHNhdmUgdGhlbSBpbnRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UuCisgICAgLy8gICAgTm90ZSB0
aGF0IEdQUnMgZG8gbm90IGhhdmUgYSBmYXN0IGNoYW5nZSAobGlrZSBoYXZlRlBScykgYmVjYXVz
ZSB3ZSBleHBlY3QgdGhhdAorICAgIC8vICAgIG1vc3QgT1NSIGZhaWx1cmUgcG9pbnRzIHdpbGwg
aGF2ZSBhdCBsZWFzdCBvbmUgR1BSIHRoYXQgbmVlZHMgdG8gYmUgZHVtcGVkLgorICAgIAorICAg
IHVuc2lnbmVkIHNjcmF0Y2hJbmRleCA9IDA7CisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAg
ICAgICBpbnQgb3BlcmFuZCA9IGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAg
c3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIEluR1BSOgorICAg
ICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFu
SW5HUFI6CisgICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25l
ZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCisgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihyZWNvdmVyeS5ncHIoKSwgcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgdGFnID0gSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZzsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gSW5HUFIpCisg
ICAgICAgICAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkNlbGxUYWc7CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gVW5ib3hlZEludDMySW5HUFIpCisg
ICAgICAgICAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkludDMyVGFnOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdGFnID0gSlNWYWx1ZTo6Qm9vbGVhblRhZzsK
KyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTMyKHRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFu
ZCkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocmVjb3ZlcnkuZ3ByKCksIEFzc2Vt
Ymx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluUGFpcjoKKyAgICAg
ICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkgeworICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIocmVjb3ZlcnkudGFnR1BSKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNj
cmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMy
KHJlY292ZXJ5LnBheWxvYWRHUFIoKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1
ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoSW5kZXgrKzsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihyZWNv
dmVyeS50YWdHUFIoKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3Rlcilv
cGVyYW5kKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihyZWNvdmVyeS5wYXlsb2Fk
R1BSKCksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJh
bmQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gQXQg
dGhpcyBwb2ludCBhbGwgR1BScyBhcmUgYXZhaWxhYmxlIGZvciBzY3JhdGNoIHVzZS4KKyAgICAK
KyAgICBpZiAoaGF2ZUZQUnMpIHsKKyAgICAgICAgLy8gNykgQm94IGFsbCBkb3VibGVzIChyZWxp
ZXMgb24gdGhlcmUgYmVpbmcgbW9yZSBHUFJzIHRoYW4gRlBScykKKyAgICAgICAgLy8gICAgRm9y
IEpTVmFsdWUzMl82NCwgbm8gbmVlZCB0byBib3ggZG91Ymxlcy4KKyAgICAgICAgCisgICAgICAg
IC8vIDgpIER1bXAgYWxsIGRvdWJsZXMgaW50byB0aGUgcmVnaXN0ZXIgZmlsZSwgb3IgdG8gdGhl
IHNjcmF0Y2ggc3RvcmFnZSBpZgorICAgICAgICAvLyAgICB0aGUgZGVzdGluYXRpb24gdmlydHVh
bCByZWdpc3RlciBpcyBwb2lzb25lZC4KKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGluZGV4
ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAg
ICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVy
eShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gSW5GUFIp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZXhpdC5pc1Zhcmlh
YmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvcklu
ZGV4KGluZGV4KV0pCisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUocmVjb3Zlcnku
ZnByKCksIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUocmVjb3ZlcnkuZnByKCksIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvcklu
ZGV4KGluZGV4KSkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEFTU0VSVChzY3JhdGNo
SW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAorICAgIC8v
IDkpIFJlc2h1ZmZsZSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMuIE9wdGltaXplIGZvciB0
aGUgY2FzZSB0aGF0CisgICAgLy8gICAgdGhlIG51bWJlciBvZiBkaXNwbGFjZWQgdmlydHVhbCBy
ZWdpc3RlcnMgaXMgbm90IG1vcmUgdGhhbiB0aGUgbnVtYmVyCisgICAgLy8gICAgb2YgYXZhaWxh
YmxlIHBoeXNpY2FsIHJlZ2lzdGVycy4KKyAgICAKKyAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRW
aXJ0dWFsUmVnaXN0ZXJzKSB7CisgICAgICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxS
ZWdpc3RlcnMgKiAyIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKSB7CisgICAgICAgICAg
ICAvLyBTbyBmYXIgdGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBjYXNlIHRoYXQgdHJpZ2dlcnMgYWxs
IHRoZSB0aW1lLCBidXQKKyAgICAgICAgICAgIC8vIHRoYXQgaXMgZmFyIGZyb20gZ3VhcmFudGVl
ZC4KKyAgICAgICAgCisgICAgICAgICAgICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRleCA9IDA7
CisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJl
Y292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zl
cnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgICAg
ICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQz
MihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkp
LCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IocmVjb3ZlcnkudmlydHVh
bFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBkaXNwbGFjZW1lbnRJbmRleCA9
IDA7CisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJP
ZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAg
ICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlMzIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgQXNzZW1ibHlI
ZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjp0b1JlZ2lz
dGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVh
bFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0
aGUgc2h1ZmZsaW5nIGFsZ29yaXRobSB0aGF0IHdlIHVzZQorICAgICAgICAgICAgLy8gZm9yIHNw
ZWN1bGF0aXZlLT5ub24tc3BlY3VsYXRpdmUganVtcHMsIGlmIHdlIGV2ZXIgZGlzY292ZXIgdGhh
dAorICAgICAgICAgICAgLy8gc29tZSBob3QgY29kZSB3aXRoIGxvdHMgb2YgbGl2ZSB2YWx1ZXMg
dGhhdCBnZXQgZGlzcGxhY2VkIGFuZAorICAgICAgICAgICAgLy8gc3BpbGxlZCByZWFsbHkgZW5q
b3lzIGZyZXF1ZW50bHkgZmFpbGluZyBzcGVjdWxhdGlvbi4KKyAgICAgICAgCisgICAgICAgICAg
ICAvLyBGb3Igbm93IHRoaXMgY29kZSBpcyBlbmdpbmVlcmVkIHRvIGJlIGNvcnJlY3QgYnV0IHBy
b2JhYmx5IG5vdAorICAgICAgICAgICAgLy8gc3VwZXIuIEluIHBhcnRpY3VsYXIsIGl0IGNvcnJl
Y3RseSBoYW5kbGVzIGNhc2VzIHdoZXJlIGZvciBleGFtcGxlCisgICAgICAgICAgICAvLyB0aGUg
ZGlzcGxhY2VtZW50cyBhcmUgYSBwZXJtdXRhdGlvbiBvZiB0aGUgZGVzdGluYXRpb24gdmFsdWVz
LCBsaWtlCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gMSAtPiAyCisgICAgICAgICAg
ICAvLyAyIC0+IDEKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBJdCBhY2NvbXBsaXNo
ZXMgdGhpcyBieSBzaW1wbHkgbGlmdGluZyBhbGwgb2YgdGhlIHZpcnR1YWwgcmVnaXN0ZXJzCisg
ICAgICAgICAgICAvLyBmcm9tIHRoZWlyIG9sZCAoREZHIEpJVCkgbG9jYXRpb25zIGFuZCBkcm9w
cGluZyB0aGVtIGluIGEgc2NyYXRjaAorICAgICAgICAgICAgLy8gbG9jYXRpb24gaW4gbWVtb3J5
LCBhbmQgdGhlbiB0cmFuc2ZlcnJpbmcgZnJvbSB0aGF0IHNjcmF0Y2ggbG9jYXRpb24KKyAgICAg
ICAgICAgIC8vIHRvIHRoZWlyIG5ldyAob2xkIEpJVCkgbG9jYXRpb25zLgorICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zl
cmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYg
cmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlm
IChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEFz
c2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxw
ZXJzOjp0YWdGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7
CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCByZWludGVycHJldF9jYXN0PGNo
YXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7CisgICAgICAgICAgICAgICAgc2NyYXRj
aEluZGV4Kys7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgc2NyYXRjaElu
ZGV4ID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnM7CisgICAgICAgICAgICBmb3Ig
KGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRl
eCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhp
dC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVj
aG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0
PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2Ny
YXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRG
b3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBBc3NlbWJseUhlbHBlcnM6
OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwor
ICAgICAgICAgICAgICAgIHNjcmF0Y2hJbmRleCsrOworICAgICAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1
YWxSZWdpc3RlcnMgKyBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIC8vIDEwKSBEdW1wIGFsbCBwb2lzb25lZCB2aXJ0dWFsIHJl
Z2lzdGVycy4KKyAgICAKKyAgICBzY3JhdGNoSW5kZXggPSAwOworICAgIGlmIChudW1iZXJPZlBv
aXNvbmVkVmlydHVhbFJlZ2lzdGVycykgeworICAgICAgICBmb3IgKGludCB2aXJ0dWFsUmVnaXN0
ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCAoaW50KWV4aXQubV92YXJpYWJsZXMuc2l6ZSgpOyAr
K3ZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnNbdmlydHVhbFJlZ2lzdGVyXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0
Lm1fdmFyaWFibGVzW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgICAgICBzd2l0Y2ggKHJlY292
ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAg
Y2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5J
bkdQUjogeworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNo
YXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVs
cGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOworICAg
ICAgICAgICAgICAgIHVpbnQzMl90IHRhZyA9IEpTVmFsdWU6OkVtcHR5VmFsdWVUYWc7CisgICAg
ICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IEluR1BSKQorICAgICAgICAg
ICAgICAgICAgICB0YWcgPSBKU1ZhbHVlOjpDZWxsVGFnOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IFVuYm94ZWRJbnQzMkluR1BSKQorICAgICAgICAg
ICAgICAgICAgICB0YWcgPSBKU1ZhbHVlOjpJbnQzMlRhZzsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkJvb2xlYW5UYWc7CisgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMih0YWcp
LCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3Rl
cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBjYXNlIEluRlBSOgorICAgICAgICAgICAgY2FzZSBJblBhaXI6CisgICAgICAgICAgICAgICAg
bV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3Jh
dGNoSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQz
MihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSwgR1BS
SW5mbzo6cmVnVDEpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVn
VDAsIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxS
ZWdpc3RlcikpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEs
IEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lzdGVy
KSk7CisgICAgICAgICAgICAgICAgc2NyYXRjaEluZGV4Kys7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChz
Y3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAor
ICAgIC8vIDExKSBEdW1wIGFsbCBjb25zdGFudHMuIE9wdGltaXplIGZvciBVbmRlZmluZWQsIHNp
bmNlIHRoYXQncyBhIGNvbnN0YW50IHdlIHNlZQorICAgIC8vICAgICBvZnRlbi4KKworICAgIGlm
IChoYXZlQ29uc3RhbnRzKSB7CisgICAgICAgIGlmIChoYXZlVW5kZWZpbmVkKSB7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGpzVW5kZWZpbmVk
KCkucGF5bG9hZCgpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgbV9qaXQubW92ZShB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnRhZygpKSwgR1BSSW5m
bzo6cmVnVDEpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpbmRleCA9
IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAg
ICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3Zlcnko
aW5kZXgpOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENvbnN0YW50
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LmNv
bnN0YW50KCkuaXNVbmRlZmluZWQoKSkgeworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
R1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lz
dGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS5wYXlsb2FkKCkpLCBBc3NlbWJseUhlbHBlcnM6
OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkp
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbTMyKHJlY292ZXJ5LmNvbnN0YW50KCkudGFnKCkpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zv
cigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIDEyKSBBZGp1c3QgdGhlIG9s
ZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25v
dworICAgIC8vICAgICB0aGF0IGFsbCBuZXcgY2FsbHMgaW50byB0aGlzIGNvZGUgd2lsbCBnbyB0
byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1dGUKKyAgICAvLyAgICAgY291bnRlciBvbmx5IGFm
ZmVjdHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5kIGNhbGwgZnJhbWVz
CisgICAgLy8gICAgIHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9sZCBKSVQgYXQgdGhl
IHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MKKyAgICAvLyAgICAgT1NSIGV4aXQuIFdlIHdh
bnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgorICAgIC8vCisgICAgLy8g
ICAgIChhKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRvIHJl
ZW50ZXIgb3B0aW1pemVkCisgICAgLy8gICAgICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNlIG9w
dGltaXplZCBjb2RlIGlzIGZhc3Rlci4gQnV0IHdlIGRvbid0CisgICAgLy8gICAgICAgICB3YW50
IHRvIGRvIHN1Y2ggcmVlbnRlcnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChjKSBiZWxvdykuCisg
ICAgLy8KKyAgICAvLyAgICAgKGIpIElmIHRoZXJlIGlzIGNvZGUgb24gdGhlIGNhbGwgc3RhY2sg
dGhhdCBpcyBzdGlsbCBydW5uaW5nIHRoZSBvbGQKKyAgICAvLyAgICAgICAgIEpJVCdzIGNvZGUg
YW5kIGhhcyBuZXZlciBPU1InZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRvCisgICAg
Ly8gICAgICAgICBwZXJmb3JtIE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUg
ZXhpdGVkLgorICAgIC8vCisgICAgLy8gICAgIChjKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1Ig
ZXhpdCBzaG91bGQgbm90IGltbWVkaWF0ZWx5IHJldHJ5IE9TUgorICAgIC8vICAgICAgICAgZW50
cnksIHNpbmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwor
ICAgIC8vICAgICAgICAgcGFydGljdWxhcmx5IGV4cGVuc2l2ZS4KKyAgICAvLworICAgIC8vICAg
ICAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3Vs
dCBpbiB0aGUgY29kZQorICAgIC8vICAgICAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1
bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KKyAgICAvLworICAgIC8vICAg
ICBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8K
KyAgICAvLyAgICAgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNl
ZW1zIGxpa2UgaXQgd291bGQgZW5kYW5nZXIKKyAgICAvLyAgICAgKGEpIGFuZCAoYiksIHNpbmNl
IHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgorICAg
IC8vICAgICBldmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZvcm0gT1NSIGVudHJ5LiBFc3NlbnRpYWxs
eSwgaWYgT1NSIGV4aXQgaGFwcGVucworICAgIC8vICAgICBmcmVxdWVudGx5IGFuZCB0aGUgZnVu
Y3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVyCisgICAgLy8g
ICAgIGJlY29tZSBub24tbmVnYXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdn
ZXJlZC4gT1NSIGVudHJ5CisgICAgLy8gICAgIHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdl
dHMgaG90IGluIHRoZSBvbGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5CisgICAgLy8gICAgIGdv
b2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2Fy
ZSBvZiAoZCksCisgICAgLy8gICAgIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3Vs
ZCByZXNldCB0aGUgZXhlY3V0ZSBjb3VudGVyLgorICAgIC8vICAgICBTbyB3ZSBjaGVjayBoZXJl
IGlmIHRoZSBudW1iZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQor
ICAgIC8vICAgICBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5
MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlmCisgICAgLy8gICAgIHRoZXJlIGhhdmUgYmVlbiBhIGxh
cmdlIGVub3VnaCBudW1iZXIgb2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCisgICAgLy8g
ICAgIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bworICAgIC8v
ICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCisgICAgCisgICAgbV9q
aXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkp
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZl
RmFpbENvdW50ZXIoKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBtX2ppdC5sb2FkMzIoQXNzZW1i
bHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3Bl
Y3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIG1faml0LmFk
ZDMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoMSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBtX2pp
dC5hZGQzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKC0xKSwgR1BSSW5mbzo6cmVnVDEpOworICAg
IG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDIsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIo
KSkpOworICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIEFzc2VtYmx5SGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3Vj
Y2Vzc0NvdW50ZXIoKSkpOworICAgIAorICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwgR1BSSW5mbzo6
cmVnVDApOworICAgIAorICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBmZXdGYWlscyA9IG1faml0
LmJyYW5jaDMyKEFzc2VtYmx5SGVscGVyczo6QmVsb3dPckVxdWFsLCBHUFJJbmZvOjpyZWdUMiwg
QXNzZW1ibHlIZWxwZXJzOjpJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bGFyZ2VGYWlsQ291bnRU
aHJlc2hvbGQoKSkpOworICAgIG1faml0Lm11bDMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoSGV1
cmlzdGljczo6ZGVzaXJlZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxSYXRpbyksIEdQUkluZm86OnJl
Z1QyLCBHUFJJbmZvOjpyZWdUMik7CisgICAgCisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGxv
d0ZhaWxSYXRlID0gbV9qaXQuYnJhbmNoMzIoQXNzZW1ibHlIZWxwZXJzOjpCZWxvd09yRXF1YWws
IEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgCisgICAgLy8gUmVvcHRpbWl6
ZSBhcyBzb29uIGFzIHBvc3NpYmxlLgorICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJz
OjpJbW0zMihIZXVyaXN0aWNzOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJ
bnZvY2F0aW9uKSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIEFzc2VtYmx5SGVscGVyczo6
SnVtcCBkb25lQWRqdXN0aW5nID0gbV9qaXQuanVtcCgpOworICAgIAorICAgIGZld0ZhaWxzLmxp
bmsoJm1faml0KTsKKyAgICBsb3dGYWlsUmF0ZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgbV9q
aXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKG1faml0LmNvZGVCbG9jaygpLT5hbHRl
cm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwgQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
RXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIAorICAgIGRvbmVBZGp1c3RpbmcubGluaygmbV9qaXQp
OworICAgIAorICAgIC8vIDEzKSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUg
b3BlcmF0aW9uIGludG8gcmVnVDAuCisgICAgCisgICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFu
ZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSB7CisgICAgICAgIG1faml0Lmxv
YWQzMihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1f
bGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CisgICAgICAg
IG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4
aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7Cisg
ICAgfQorICAgIAorICAgIC8vIDE0KSBGaXggY2FsbCBmcmFtZSAocykuCisgICAgCisgICAgQVNT
RVJUKG1faml0LmNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklU
Q29kZTo6QmFzZWxpbmVKSVQpOworICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSksIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKVJlZ2lzdGVyRmlsZTo6Q29kZUJs
b2NrKSk7CisgICAgCisgICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29k
ZU9yaWdpbjsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7CisgICAgICAgIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihj
b2RlT3JpZ2luKTsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ciA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKTsK
KyAgICAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFw
ID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIpOwor
ICAgICAgICB1bnNpZ25lZCByZXR1cm5CeXRlY29kZUluZGV4ID0gaW5saW5lQ2FsbEZyYW1lLT5j
YWxsZXIuYnl0ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7CisgICAgICAgIEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5
dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUo
KSwgcmV0dXJuQnl0ZWNvZGVJbmRleCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobWFwcGlu
Zyk7CisgICAgICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0
ZWNvZGVJbmRleCk7CisgICAgICAgIAorICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2VsaW5lQ29k
ZUJsb2NrRm9yQ2FsbGVyLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21hY2hp
bmVDb2RlT2Zmc2V0KTsKKworICAgICAgICBHUFJSZWcgY2FsbGVyRnJhbWVHUFI7CisgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAg
ICAgIG1faml0LmFkZDMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5j
YWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDMpOworICAgICAg
ICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyOwor
ICAgICAgICAKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZp
bGU6OkNvZGVCbG9jaykpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6
OkltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVh
bFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpT
Y29wZUNoYWluKSkpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUtPnNjb3BlKCkpLCBBc3NlbWJseUhl
bHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpKTsKKyAgICAgICAgbV9qaXQuc3Rv
cmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhl
bHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxs
ZXJGcmFtZSkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1
YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6
UmV0dXJuUEMpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3Vt
ZW50Q291bnQpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0z
MihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBh
eWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihB
c3NlbWJseUhlbHBlcnM6OkltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6
OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
UmVnaXN0ZXJGaWxlOjpDYWxsZWUpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSksIEFz
c2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKSk7CisgICAgfQorICAgIAor
ICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIG1faml0
LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OkltbTMyKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOworCisgICAgLy8gMTUpIEp1bXAgaW50byB0aGUgY29ycmVzcG9u
ZGluZyBiYXNlbGluZSBKSVQgY29kZS4KKyAgICAKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrID0gbV9qaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoZXhpdC5tX2NvZGVPcmlnaW4pOwor
ICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCA9IG1f
aml0LmRlY29kZWRDb2RlTWFwRm9yKGJhc2VsaW5lQ29kZUJsb2NrKTsKKyAgICAKKyAgICBCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0LCB1bnNpZ25lZCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRl
Y29kZUluZGV4PihkZWNvZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCks
IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIEFTU0VSVChtYXBw
aW5nKTsKKyAgICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IGV4aXQubV9jb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIHZvaWQqIGp1bXBUYXJnZXQgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmFzZWxpbmVD
b2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVP
ZmZzZXQpOworICAgIAorICAgIEFTU0VSVChHUFJJbmZvOjpyZWdUMiAhPSBHUFJJbmZvOjpjYWNo
ZWRSZXN1bHRSZWdpc3RlciAmJiBHUFJJbmZvOjpyZWdUMiAhPSBHUFJJbmZvOjpjYWNoZWRSZXN1
bHRSZWdpc3RlcjIpOworICAgIAorICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgbV9qaXQuanVtcChH
UFJJbmZvOjpyZWdUMik7CisKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZnBy
aW50ZihzdGRlcnIsICIgICAtPiAlcFxuIiwganVtcFRhcmdldCk7CisjZW5kaWYKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpICYmIFVT
RShKU1ZBTFVFMzJfNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDU1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkgJiYgVVNFKEpTVkFMVUU2NCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCit2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29u
c3QgT1NSRXhpdCYgZXhpdCwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCit7CisgICAg
Ly8gMSkgUHJvLWZvcm1hIHN0dWZmLgorICAgIGV4aXQubV9jaGVjay5saW5rKCZtX2ppdCk7CisK
KyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZnByaW50ZihzdGRlcnIsICJPU1Ig
ZXhpdCBmb3IgTm9kZSBAJWQgKCIsIChpbnQpZXhpdC5tX25vZGVJbmRleCk7CisgICAgZm9yIChD
b2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsgOyBjb2RlT3JpZ2luID0g
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgImJjIyV1IiwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKCFj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiAtPiAlcCAiLCBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhl
Y3V0YWJsZS5nZXQoKSk7CisgICAgfQorICAgIGZwcmludGYoc3RkZXJyLCAiKSBhdCBKSVQgb2Zm
c2V0IDB4JXggICIsIG1faml0LmRlYnVnT2Zmc2V0KCkpOworICAgIGV4aXQuZHVtcChzdGRlcnIp
OworI2VuZGlmCisjaWYgREZHX0VOQUJMRShWRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCisg
ICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvKiBkZWJ1Z0luZm8gPSBuZXcgU3BlY3VsYXRp
b25GYWlsdXJlRGVidWdJbmZvOworICAgIGRlYnVnSW5mby0+Y29kZUJsb2NrID0gbV9qaXQuY29k
ZUJsb2NrKCk7CisgICAgZGVidWdJbmZvLT5kZWJ1Z09mZnNldCA9IG1faml0LmRlYnVnT2Zmc2V0
KCk7CisgICAgCisgICAgbV9qaXQuZGVidWdDYWxsKGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxh
dGlvbkZhaWx1cmUsIGRlYnVnSW5mbyk7CisjZW5kaWYKKyAgICAKKyNpZiBERkdfRU5BQkxFKEpJ
VF9CUkVBS19PTl9TUEVDVUxBVElPTl9GQUlMVVJFKQorICAgIG1faml0LmJyZWFrcG9pbnQoKTsK
KyNlbmRpZgorICAgIAorI2lmIERGR19FTkFCTEUoU1VDQ0VTU19TVEFUUykKKyAgICBzdGF0aWMg
U2FtcGxpbmdDb3VudGVyIGNvdW50ZXIoIlNwZWN1bGF0aW9uRmFpbHVyZSIpOworICAgIG1faml0
LmVtaXRDb3VudChjb3VudGVyKTsKKyNlbmRpZgorICAgIAorICAgIC8vIDIpIFBlcmZvcm0gc3Bl
Y3VsYXRpb24gcmVjb3ZlcnkuIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBhbiBvcGVy
YXRpb24KKyAgICAvLyAgICBzdGFydHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlmeWluZyB0
aGUgc3BlY3VsYXRpb24gaXQgaGFzIGFscmVhZHkgbWFkZS4KKyAgICAKKyAgICBHUFJSZWcgYWxy
ZWFkeUJveGVkID0gSW52YWxpZEdQUlJlZzsKKyAgICAKKyAgICBpZiAocmVjb3ZlcnkpIHsKKyAg
ICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgU3BlY3VsYXRp
dmVBZGQ6CisgICAgICAgICAgICBtX2ppdC5zdWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5
LT5kZXN0KCkpOworICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIGFscmVhZHlCb3hlZCA9
IHJlY292ZXJ5LT5kZXN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgorICAgICAgICAgICAgbV9qaXQueG9y
UHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZh
bHVlRmFsc2UpKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyAzKSBSZWZpbmUgc29tZSB2YWx1ZSBwcm9maWxlLCBpZiBhcHByb3By
aWF0ZS4KKyAgICAKKyAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSAmJiAhIWV4aXQubV92
YWx1ZVByb2ZpbGUpIHsKKyAgICAgICAgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmlzQWRkcmVz
cygpKSB7CisgICAgICAgICAgICAvLyBXZSBjYW4ndCBiZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIHNw
YXJlIHJlZ2lzdGVyLiBTbyB1c2UgdGhlIHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwKKyAgICAgICAg
ICAgIC8vIHNpbmNlIHdlIGtub3cgaG93IHRvIHJlc3RvcmUgaXQuCisgICAgICAgICAgICBtX2pp
dC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhleGl0Lm1fanNWYWx1ZVNvdXJjZS5h
c0FkZHJlc3MoKSksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAg
ICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGV4aXQubV92
YWx1ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oVGFnVHlw
ZU51bWJlcikpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGV4aXQubV9qc1ZhbHVlU291cmNlLmdwcigp
LCBleGl0Lm1fdmFsdWVQcm9maWxlLT5zcGVjRmFpbEJ1Y2tldCgwKSk7CisgICAgfQorCisgICAg
Ly8gNCkgRmlndXJlIG91dCBob3cgbWFueSBzY3JhdGNoIHNsb3RzIHdlJ2xsIG5lZWQuIFdlIG5l
ZWQgb25lIGZvciBldmVyeSBHUFIvRlBSCisgICAgLy8gICAgd2hvc2UgZGVzdGluYXRpb24gaXMg
bm93IG9jY3VwaWVkIGJ5IGEgREZHIHZpcnR1YWwgcmVnaXN0ZXIsIGFuZCB3ZSBuZWVkCisgICAg
Ly8gICAgb25lIGZvciBldmVyeSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlciBpZiB0aGVyZSBh
cmUgbW9yZSB0aGFuCisgICAgLy8gICAgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgb2YgdGhl
bS4gQWxzbyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25zdGFudHMsCisgICAgLy8gICAgYW55IHVu
ZGVmaW5lZCBzbG90cywgYW55IEZQUiBzbG90cywgYW5kIGFueSB1bmJveGVkIGludHMuCisgICAg
ICAgICAgICAKKyAgICBWZWN0b3I8Ym9vbD4gcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKGV4aXQu
bV92YXJpYWJsZXMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICBwb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnNbaV0gPSBmYWxzZTsKKworICAgIHVuc2lnbmVkIG51bWJlck9mUG9pc29uZWRWaXJ0
dWFsUmVnaXN0ZXJzID0gMDsKKyAgICB1bnNpZ25lZCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxS
ZWdpc3RlcnMgPSAwOworICAgIAorICAgIC8vIEJvb2xlYW5zIGZvciBmYXN0IGNoZWNrcy4gV2Ug
ZXhwZWN0IHRoYXQgbW9zdCBPU1IgZXhpdHMgZG8gbm90IGhhdmUgdG8gcmVib3gKKyAgICAvLyBJ
bnQzMnMsIGhhdmUgbm8gRlBScywgYW5kIGhhdmUgbm8gY29uc3RhbnRzLiBJZiB0aGVyZSBhcmUg
Y29uc3RhbnRzLCB3ZQorICAgIC8vIGV4cGVjdCBtb3N0IG9mIHRoZW0gdG8gYmUganNVbmRlZmlu
ZWQoKTsgaWYgdGhhdCdzIHRydWUgdGhlbiB3ZSBoYW5kbGUgdGhhdAorICAgIC8vIHNwZWNpYWxs
eSB0byBtaW5pbWl6ZSBjb2RlIHNpemUgYW5kIGV4ZWN1dGlvbiB0aW1lLgorICAgIGJvb2wgaGF2
ZVVuYm94ZWRJbnQzMnMgPSBmYWxzZTsKKyAgICBib29sIGhhdmVGUFJzID0gZmFsc2U7CisgICAg
Ym9vbCBoYXZlQ29uc3RhbnRzID0gZmFsc2U7CisgICAgYm9vbCBoYXZlVW5kZWZpbmVkID0gZmFs
c2U7CisgICAgCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292
ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVy
RmlsZToKKyAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAg
ICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIG51bWJlck9mRGlz
cGxhY2VkVmlydHVhbFJlZ2lzdGVycysrOworICAgICAgICAgICAgQVNTRVJUKChpbnQpcmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkgPj0gMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IFNlZSBpZiB3ZSBtaWdodCBsaWtlIHRvIHN0b3JlIHRvIHRoaXMgdmlydHVhbCByZWdpc3RlciBi
ZWZvcmUgZG9pbmcKKyAgICAgICAgICAgIC8vIHZpcnR1YWwgcmVnaXN0ZXIgc2h1ZmZsaW5nLiBJ
ZiBzbywgd2Ugc2F5IHRoYXQgdGhlIHZpcnR1YWwgcmVnaXN0ZXIKKyAgICAgICAgICAgIC8vIGlz
IHBvaXNvbmVkOiBpdCBjYW5ub3QgYmUgc3RvcmVkIHRvIHVudGlsIGFmdGVyIGRpc3BsYWNlZCB2
aXJ0dWFsCisgICAgICAgICAgICAvLyByZWdpc3RlcnMgYXJlIGhhbmRsZWQuIFdlIHRyYWNrIHBv
aXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXIgY2FyZWZ1bGx5CisgICAgICAgICAgICAvLyB0byBlbnN1
cmUgdGhpcyBoYXBwZW5zIGVmZmljaWVudGx5LiBOb3RlIHRoYXQgd2UgZXhwZWN0IHRoaXMgY2Fz
ZQorICAgICAgICAgICAgLy8gdG8gYmUgcmFyZSwgc28gdGhlIGhhbmRsaW5nIG9mIGl0IGlzIG9w
dGltaXplZCBmb3IgdGhlIGNhc2VzIGluCisgICAgICAgICAgICAvLyB3aGljaCBpdCBkb2VzIG5v
dCBoYXBwZW4uCisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAo
aW50KWV4aXQubV92YXJpYWJsZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChl
eGl0Lm1fdmFyaWFibGVzW3JlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpXS50ZWNobmlxdWUoKSkg
eworICAgICAgICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICAgICAgY2FzZSBVbmJv
eGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAg
ICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVn
aXN0ZXIoKV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmls
ZUFzVW5ib3hlZEludDMyOgorICAgICAgICAgICAgaGF2ZVVuYm94ZWRJbnQzMnMgPSB0cnVlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbkZQUjoKKyAg
ICAgICAgICAgIGhhdmVGUFJzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAgICBoYXZlQ29uc3RhbnRzID0g
dHJ1ZTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkp
CisgICAgICAgICAgICAgICAgaGF2ZVVuZGVmaW5lZCA9IHRydWU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAg
IGZwcmludGYoc3RkZXJyLCAiICAiKTsKKyAgICBpZiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnMpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUG9pc29uZWQ9JXUgIiwgbnVtYmVy
T2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZp
cnR1YWxSZWdpc3RlcnMpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRGlzcGxhY2VkPSV1ICIs
IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyk7CisgICAgaWYgKGhhdmVVbmJveGVk
SW50MzJzKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYm94ZWRJbnQzMiAiKTsKKyAgICBp
ZiAoaGF2ZUZQUnMpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRlBSICIpOworICAgIGlmICho
YXZlQ29uc3RhbnRzKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbnN0YW50cyAiKTsKKyAg
ICBpZiAoaGF2ZVVuZGVmaW5lZCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmRlZmluZWQg
Iik7CisgICAgZnByaW50ZihzdGRlcnIsICIgIik7CisjZW5kaWYKKyAgICAKKyAgICBFbmNvZGVk
SlNWYWx1ZSogc2NyYXRjaEJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4obV9q
aXQuZ2xvYmFsRGF0YSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFs
dWUpICogKG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgKG51bWJlck9mRGlzcGxh
Y2VkVmlydHVhbFJlZ2lzdGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA/IDAgOiBu
dW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpKSkpOworCisgICAgLy8gRnJvbSBoZXJl
IG9uLCB0aGUgY29kZSBhc3N1bWVzIHRoYXQgaXQgaXMgcHJvZml0YWJsZSB0byBtYXhpbWl6ZSB0
aGUgZGlzdGFuY2UKKyAgICAvLyBiZXR3ZWVuIHdoZW4gc29tZXRoaW5nIGlzIGNvbXB1dGVkIGFu
ZCB3aGVuIGl0IGlzIHN0b3JlZC4KKyAgICAKKyAgICAvLyA1KSBQZXJmb3JtIGFsbCByZWJveGlu
ZyBvZiBpbnRlZ2Vycy4KKyAgICAKKyAgICBpZiAoaGF2ZVVuYm94ZWRJbnQzMnMpIHsKKyAgICAg
ICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7
ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0g
ZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIHN3aXRjaCAocmVjb3Zlcnku
dGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAg
ICAgICAgICAgICAgaWYgKHJlY292ZXJ5LmdwcigpICE9IGFscmVhZHlCb3hlZCkKKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBy
ZWNvdmVyeS5ncHIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgor
ICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihzdGF0
aWNfY2FzdDx1aW50MzJfdD4oVGFnVHlwZU51bWJlciA+PiAzMikpLCBBc3NlbWJseUhlbHBlcnM6
OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZvckluZGV4
KGluZGV4KSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gNikgRHVtcCBhbGwgbm9uLXBvaXNvbmVk
IEdQUnMuIEZvciBwb2lzb25lZCBHUFJzLCBzYXZlIHRoZW0gaW50byB0aGUgc2NyYXRjaCBzdG9y
YWdlLgorICAgIC8vICAgIE5vdGUgdGhhdCBHUFJzIGRvIG5vdCBoYXZlIGEgZmFzdCBjaGFuZ2Ug
KGxpa2UgaGF2ZUZQUnMpIGJlY2F1c2Ugd2UgZXhwZWN0IHRoYXQKKyAgICAvLyAgICBtb3N0IE9T
UiBmYWlsdXJlIHBvaW50cyB3aWxsIGhhdmUgYXQgbGVhc3Qgb25lIEdQUiB0aGF0IG5lZWRzIHRv
IGJlIGR1bXBlZC4KKyAgICAKKyAgICB1bnNpZ25lZCBzY3JhdGNoSW5kZXggPSAwOworICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2lu
ZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1
ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0Lm9wZXJhbmRGb3JJ
bmRleChpbmRleCk7CisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAg
ICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAg
ICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkKKyAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cihyZWNvdmVyeS5ncHIoKSwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsr
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWNv
dmVyeS5ncHIoKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
b3BlcmFuZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50
IGFsbCBHUFJzIGFyZSBhdmFpbGFibGUgZm9yIHNjcmF0Y2ggdXNlLgorICAgIAorICAgIGlmICho
YXZlRlBScykgeworICAgICAgICAvLyA3KSBCb3ggYWxsIGRvdWJsZXMgKHJlbGllcyBvbiB0aGVy
ZSBiZWluZyBtb3JlIEdQUnMgdGhhbiBGUFJzKQorICAgICAgICAKKyAgICAgICAgZm9yIChpbnQg
aW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsK
KyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJl
Y292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJ
bkZQUikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIg
PSByZWNvdmVyeS5mcHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1Jl
Z2lzdGVyKEZQUkluZm86OnRvSW5kZXgoZnByKSk7CisgICAgICAgICAgICBtX2ppdC5ib3hEb3Vi
bGUoZnByLCBncHIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyA4KSBEdW1wIGFs
bCBkb3VibGVzIGludG8gdGhlIHJlZ2lzdGVyIGZpbGUsIG9yIHRvIHRoZSBzY3JhdGNoIHN0b3Jh
Z2UgaWYKKyAgICAgICAgLy8gICAgdGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgcmVnaXN0ZXIgaXMg
cG9pc29uZWQuCisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwg
ZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAg
ICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0
ZXIoRlBSSW5mbzo6dG9JbmRleChyZWNvdmVyeS5mcHIoKSkpOworICAgICAgICAgICAgaWYgKGV4
aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2V4aXQudmFy
aWFibGVGb3JJbmRleChpbmRleCldKQorICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGdw
ciwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihncHIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQ
b2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAorICAgIC8vIDkpIFJlc2h1ZmZsZSBkaXNw
bGFjZWQgdmlydHVhbCByZWdpc3RlcnMuIE9wdGltaXplIGZvciB0aGUgY2FzZSB0aGF0CisgICAg
Ly8gICAgdGhlIG51bWJlciBvZiBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMgaXMgbm90IG1v
cmUgdGhhbiB0aGUgbnVtYmVyCisgICAgLy8gICAgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIHJlZ2lz
dGVycy4KKyAgICAKKyAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7
CisgICAgICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIC8vIFNvIGZhciB0aGlzIGFwcGVh
cnMgdG8gYmUgdGhlIGNhc2UgdGhhdCB0cmlnZ2VycyBhbGwgdGhlIHRpbWUsIGJ1dAorICAgICAg
ICAgICAgLy8gdGhhdCBpcyBmYXIgZnJvbSBndWFyYW50ZWVkLgorICAgICAgICAKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGRpc3BsYWNlbWVudEluZGV4ID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50
IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7
CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZh
bHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVj
aG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxl
OgorICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRk
cmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIo
ZGlzcGxhY2VtZW50SW5kZXgrKykpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVn
aXN0ZXJGaWxlOiB7CisgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0
b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspOworICAgICAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGNhc2UgRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAgICAgICAgICAg
ICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyk7
CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgZ3ByKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuc3ViUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAgICAgZGlzcGxhY2VtZW50SW5kZXggPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVS
ZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlx
dWUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Cisg
ICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAg
ICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50
SW5kZXgrKyksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4
aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUg
c2h1ZmZsaW5nIGFsZ29yaXRobSB0aGF0IHdlIHVzZQorICAgICAgICAgICAgLy8gZm9yIHNwZWN1
bGF0aXZlLT5ub24tc3BlY3VsYXRpdmUganVtcHMsIGlmIHdlIGV2ZXIgZGlzY292ZXIgdGhhdAor
ICAgICAgICAgICAgLy8gc29tZSBob3QgY29kZSB3aXRoIGxvdHMgb2YgbGl2ZSB2YWx1ZXMgdGhh
dCBnZXQgZGlzcGxhY2VkIGFuZAorICAgICAgICAgICAgLy8gc3BpbGxlZCByZWFsbHkgZW5qb3lz
IGZyZXF1ZW50bHkgZmFpbGluZyBzcGVjdWxhdGlvbi4KKyAgICAgICAgCisgICAgICAgICAgICAv
LyBGb3Igbm93IHRoaXMgY29kZSBpcyBlbmdpbmVlcmVkIHRvIGJlIGNvcnJlY3QgYnV0IHByb2Jh
Ymx5IG5vdAorICAgICAgICAgICAgLy8gc3VwZXIuIEluIHBhcnRpY3VsYXIsIGl0IGNvcnJlY3Rs
eSBoYW5kbGVzIGNhc2VzIHdoZXJlIGZvciBleGFtcGxlCisgICAgICAgICAgICAvLyB0aGUgZGlz
cGxhY2VtZW50cyBhcmUgYSBwZXJtdXRhdGlvbiBvZiB0aGUgZGVzdGluYXRpb24gdmFsdWVzLCBs
aWtlCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gMSAtPiAyCisgICAgICAgICAgICAv
LyAyIC0+IDEKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBJdCBhY2NvbXBsaXNoZXMg
dGhpcyBieSBzaW1wbHkgbGlmdGluZyBhbGwgb2YgdGhlIHZpcnR1YWwgcmVnaXN0ZXJzCisgICAg
ICAgICAgICAvLyBmcm9tIHRoZWlyIG9sZCAoREZHIEpJVCkgbG9jYXRpb25zIGFuZCBkcm9wcGlu
ZyB0aGVtIGluIGEgc2NyYXRjaAorICAgICAgICAgICAgLy8gbG9jYXRpb24gaW4gbWVtb3J5LCBh
bmQgdGhlbiB0cmFuc2ZlcnJpbmcgZnJvbSB0aGF0IHNjcmF0Y2ggbG9jYXRpb24KKyAgICAgICAg
ICAgIC8vIHRvIHRoZWlyIG5ldyAob2xkIEpJVCkgbG9jYXRpb25zLgorICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmll
cygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFs
UmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNv
dmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJl
Z1QwLCBzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVj
b3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAg
ICAgICAgIG1faml0LnN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6
cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIHNjcmF0Y2hJ
bmRleCA9IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzOworICAgICAgICAgICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4
aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVy
eS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3Rl
ckZpbGU6CisgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxl
OgorICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Cisg
ICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJ
bmRleCsrLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
UHRyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxS
ZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJl
ck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVn
aXN0ZXJzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyAxMCkgRHVtcCBhbGwgcG9p
c29uZWQgdmlydHVhbCByZWdpc3RlcnMuCisgICAgCisgICAgc2NyYXRjaEluZGV4ID0gMDsKKyAg
ICBpZiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpIHsKKyAgICAgICAgZm9yIChp
bnQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgKGludClleGl0Lm1fdmFy
aWFibGVzLnNpemUoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgIGlmICghcG9p
c29uZWRWaXJ0dWFsUmVnaXN0ZXJzW3ZpcnR1YWxSZWdpc3Rlcl0pCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC5tX3ZhcmlhYmxlc1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICAg
ICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgY2FzZSBJbkdQ
UjoKKyAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICBjYXNl
IEluRlBSOgorICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNj
cmF0Y2hJbmRleCsrLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVh
bFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoc2NyYXRjaElu
ZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAgICAKKyAgICAvLyAx
MSkgRHVtcCBhbGwgY29uc3RhbnRzLiBPcHRpbWl6ZSBmb3IgVW5kZWZpbmVkLCBzaW5jZSB0aGF0
J3MgYSBjb25zdGFudCB3ZSBzZWUKKyAgICAvLyAgICAgb2Z0ZW4uCisKKyAgICBpZiAoaGF2ZUNv
bnN0YW50cykgeworICAgICAgICBpZiAoaGF2ZVVuZGVmaW5lZCkKKyAgICAgICAgICAgIG1faml0
Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50
IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7
CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVS
ZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0g
Q29uc3RhbnQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAocmVj
b3ZlcnkuY29uc3RhbnQoKS5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1
YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKHJlY292ZXJ5LmNvbnN0YW50KCkpKSwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gMTIpIEFkanVzdCB0aGUg
b2xkIEpJVCdzIGV4ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBr
bm93CisgICAgLy8gICAgIHRoYXQgYWxsIG5ldyBjYWxscyBpbnRvIHRoaXMgY29kZSB3aWxsIGdv
IHRvIHRoZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQorICAgIC8vICAgICBjb3VudGVyIG9ubHkg
YWZmZWN0cyBjYWxsIGZyYW1lcyB0aGF0IHBlcmZvcm1lZCBPU1IgZXhpdCBhbmQgY2FsbCBmcmFt
ZXMKKyAgICAvLyAgICAgdGhhdCB3ZXJlIHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0
aGUgdGltZSBvZiBhbm90aGVyIGNhbGwgZnJhbWUncworICAgIC8vICAgICBPU1IgZXhpdC4gV2Ug
d2FudCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisgICAgLy8KKyAgICAv
LyAgICAgKGEpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IGdldHMgYSBjaGFuY2UgdG8g
cmVlbnRlciBvcHRpbWl6ZWQKKyAgICAvLyAgICAgICAgIGNvZGUgZXZlbnR1YWxseSwgc2luY2Ug
b3B0aW1pemVkIGNvZGUgaXMgZmFzdGVyLiBCdXQgd2UgZG9uJ3QKKyAgICAvLyAgICAgICAgIHdh
bnQgdG8gZG8gc3VjaCByZWVudGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4K
KyAgICAvLworICAgIC8vICAgICAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUgY2FsbCBzdGFj
ayB0aGF0IGlzIHN0aWxsIHJ1bm5pbmcgdGhlIG9sZAorICAgIC8vICAgICAgICAgSklUJ3MgY29k
ZSBhbmQgaGFzIG5ldmVyIE9TUidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBjaGFuY2UgdG8KKyAg
ICAvLyAgICAgICAgIHBlcmZvcm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2
ZSBleGl0ZWQuCisgICAgLy8KKyAgICAvLyAgICAgKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9T
UiBleGl0IHNob3VsZCBub3QgaW1tZWRpYXRlbHkgcmV0cnkgT1NSCisgICAgLy8gICAgICAgICBl
bnRyeSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlz
CisgICAgLy8gICAgICAgICBwYXJ0aWN1bGFybHkgZXhwZW5zaXZlLgorICAgIC8vCisgICAgLy8g
ICAgIChkKSBGcmVxdWVudCBPU1IgZmFpbHVyZXMsIGV2ZW4gdGhvc2UgdGhhdCBkbyBub3QgcmVz
dWx0IGluIHRoZSBjb2RlCisgICAgLy8gICAgICAgICBydW5uaW5nIGluIGEgaG90IGxvb3AsIHJl
c3VsdCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgorICAgIC8vCisgICAgLy8g
ICAgIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUgY291bnRlciB0
bworICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuIFRoaXMg
c2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgorICAgIC8vICAgICAoYSkgYW5kIChiKSwgc2lu
Y2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9yCisg
ICAgLy8gICAgIGV2ZXJ5IGNhbGwgZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVzc2VudGlh
bGx5LCBpZiBPU1IgZXhpdCBoYXBwZW5zCisgICAgLy8gICAgIGZyZXF1ZW50bHkgYW5kIHRoZSBm
dW5jdGlvbiBoYXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2ZXIKKyAgICAv
LyAgICAgYmVjb21lIG5vbi1uZWdhdGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJp
Z2dlcmVkLiBPU1IgZW50cnkKKyAgICAvLyAgICAgd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3Ag
Z2V0cyBob3QgaW4gdGhlIG9sZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKKyAgICAvLyAgICAg
Z29vZCBqb2Igb2YgZW5zdXJpbmcgKGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBj
YXJlIG9mIChkKSwKKyAgICAvLyAgICAgc2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdv
dWxkIHJlc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIuCisgICAgLy8gICAgIFNvIHdlIGNoZWNrIGhl
cmUgaWYgdGhlIG51bWJlciBvZiBzcGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5
CisgICAgLy8gICAgIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50
IDkwJSBzdWNjZXNzIHJhdGUpLCBhbmQgaWYKKyAgICAvLyAgICAgdGhlcmUgaGF2ZSBiZWVuIGEg
bGFyZ2UgZW5vdWdoIG51bWJlciBvZiBmYWlsdXJlcy4gSWYgc28sIHdlIHNldCB0aGUKKyAgICAv
LyAgICAgY291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCisgICAg
Ly8gICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4KKyAgICAKKyAgICBt
X2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2so
KSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRp
dmVGYWlsQ291bnRlcigpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIG1faml0LmxvYWQzMihBc3Nl
bWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZT
cGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgbV9qaXQu
YWRkMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIG1f
aml0LmFkZDMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoLTEpLCBHUFJJbmZvOjpyZWdUMSk7Cisg
ICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMiwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWlsQ291bnRl
cigpKSk7CisgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVT
dWNjZXNzQ291bnRlcigpKSk7CisgICAgCisgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgCisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGZld0ZhaWxzID0gbV9q
aXQuYnJhbmNoMzIoQXNzZW1ibHlIZWxwZXJzOjpCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1Qy
LCBBc3NlbWJseUhlbHBlcnM6OkltbTMyKG1faml0LmNvZGVCbG9jaygpLT5sYXJnZUZhaWxDb3Vu
dFRocmVzaG9sZCgpKSk7CisgICAgbV9qaXQubXVsMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihI
ZXVyaXN0aWNzOjpkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvKSwgR1BSSW5mbzo6
cmVnVDIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAKKyAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAg
bG93RmFpbFJhdGUgPSBtX2ppdC5icmFuY2gzMihBc3NlbWJseUhlbHBlcnM6OkJlbG93T3JFcXVh
bCwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAKKyAgICAvLyBSZW9wdGlt
aXplIGFzIHNvb24gYXMgcG9zc2libGUuCisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBl
cnM6OkltbTMyKEhldXJpc3RpY3M6OmV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4
dEludm9jYXRpb24pLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigpKSk7CisgICAgQXNzZW1ibHlIZWxwZXJz
OjpKdW1wIGRvbmVBZGp1c3RpbmcgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgZmV3RmFpbHMu
bGluaygmbV9qaXQpOworICAgIGxvd0ZhaWxSYXRlLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBt
X2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIobV9qaXQuY29kZUJsb2NrKCktPmFs
dGVybmF0aXZlKCktPmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpLCBB
c3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0
T2ZFeGVjdXRlQ291bnRlcigpKSk7CisgICAgCisgICAgZG9uZUFkanVzdGluZy5saW5rKCZtX2pp
dCk7CisgICAgCisgICAgLy8gMTMpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29k
ZSBvcGVyYXRpb24gaW50byByZWdUMC4KKyAgICAKKyAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVy
YW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgICAgIG1faml0Lmxv
YWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5t
X2xhc3RTZXRPcGVyYW5kKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOworICAgIAor
ICAgIC8vIDE0KSBGaXggY2FsbCBmcmFtZShzKS4KKyAgICAKKyAgICBBU1NFUlQobV9qaXQuY29k
ZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGlu
ZUpJVCk7CisgICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KG1faml0LmNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKTsKKyAgICAK
KyAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyBjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZXIpIHsKKyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pOwor
ICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gbV9qaXQuYmFz
ZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpOworICAgICAgICBWZWN0
b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBtX2ppdC5kZWNv
ZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlcik7CisgICAgICAgIHVuc2ln
bmVkIHJldHVybkJ5dGVjb2RlSW5kZXggPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5ieXRlY29k
ZUluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKKyAgICAgICAgQnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNl
dCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4o
ZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCByZXR1cm5CeXRl
Y29kZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChtYXBwaW5nKTsKKyAgICAgICAg
QVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSByZXR1cm5CeXRlY29kZUluZGV4KTsK
KyAgICAgICAgCisgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxs
ZXItPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQp
OworCisgICAgICAgIEdQUlJlZyBjYWxsZXJGcmFtZUdQUjsKKyAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgbV9qaXQuYWRk
UHRyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICAgICAgY2FsbGVy
RnJhbWVHUFIgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBj
YWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyOworICAgICAgICAKKyAg
ICAgICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2Vs
aW5lQ29kZUJsb2NrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNvZGVCbG9j
aykpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlLT5zY29wZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKGNh
bGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJh
bWUpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bVB0cihqdW1wVGFyZ2V0KSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OlJldHVy
blBDKSkpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291
bnQpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSksIEFzc2VtYmx5SGVscGVyczo6YWRk
cmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
UmVnaXN0ZXJGaWxlOjpDYWxsZWUpKSk7CisgICAgfQorICAgIAorICAgIGlmIChleGl0Lm1fY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIG1faml0LmFkZFB0cihBc3NlbWJseUhl
bHBlcnM6OkltbTMyKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OworICAgIAorICAgIC8vIDE1KSBKdW1wIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYmFzZWxpbmUg
SklUIGNvZGUuCisgICAgCisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGV4aXQubV9jb2RlT3JpZ2luKTsKKyAgICBWZWN0b3I8Qnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBtX2ppdC5kZWNvZGVkQ29k
ZU1hcEZvcihiYXNlbGluZUNvZGVCbG9jayk7CisgICAgCisgICAgQnl0ZWNvZGVBbmRNYWNoaW5l
T2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwg
dW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVj
b2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCBleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAKKyAgICBBU1NFUlQobWFwcGluZyk7CisgICAgQVNT
RVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KTsKKyAgICAKKyAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2VsaW5lQ29kZUJsb2NrLT5nZXRK
SVRDb2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICAK
KyAgICBBU1NFUlQoR1BSSW5mbzo6cmVnVDEgIT0gR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0
ZXIpOworICAgIAorICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGp1bXBUYXJnZXQpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgbV9qaXQuanVtcChHUFJJbmZvOjpy
ZWdUMSk7CisKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZnByaW50ZihzdGRl
cnIsICItPiAlcFxuIiwganVtcFRhcmdldCk7CisjZW5kaWYKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpICYmIFVTRShKU1ZBTFVFNjQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT1NSRXhpdENvbXBpbGVy
X2gKKyNkZWZpbmUgREZHT1NSRXhpdENvbXBpbGVyX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBc3NlbWJseUhlbHBl
cnMuaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworY2xhc3MgT1NSRXhpdENvbXBpbGVyIHsKK3B1YmxpYzoKKyAgICBPU1JFeGl0
Q29tcGlsZXIoQXNzZW1ibHlIZWxwZXJzJiBqaXQpCisgICAgICAgIDogbV9qaXQoaml0KQorICAg
IHsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlRXhpdChjb25zdCBPU1JFeGl0JiwgU3Bl
Y3VsYXRpb25SZWNvdmVyeSopOworCitwcml2YXRlOgorICAgIEFzc2VtYmx5SGVscGVycyYgbV9q
aXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR09TUkV4aXRDb21waWxlcl9oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShyZXZpc2lvbiA5OTYxMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEs
NiArNTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY2xhc3MgSklUQ29tcGlsZXI7CiAg
ICAgICAgIGNsYXNzIEpJVENvZGVHZW5lcmF0b3I7CiAgICAgICAgIGNsYXNzIEpTVmFsdWVTb3Vy
Y2U7CisgICAgICAgIGNsYXNzIE9TUkV4aXRDb21waWxlcjsKICAgICAgICAgY2xhc3MgU3BlY3Vs
YXRpdmVKSVQ7CiAgICAgfQogI2VuZGlmCkBAIC0xMTQsNiArMTE1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBERkc6OkpJVENvbXBpbGVyOwogICAgICAgICBmcmll
bmQgY2xhc3MgREZHOjpKSVRDb2RlR2VuZXJhdG9yOwogICAgICAgICBmcmllbmQgY2xhc3MgREZH
OjpKU1ZhbHVlU291cmNlOworICAgICAgICBmcmllbmQgY2xhc3MgREZHOjpPU1JFeGl0Q29tcGls
ZXI7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklUOwogI2VuZGlmCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDk5NjEzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBA
IC04ODMsNyArODgzLDcgQEAKICNlbmRpZgogCiAvKiBDdXJyZW50bHkgZm9yIEpTVkFMVUU2NCwg
b25seSB0ZXN0ZWQgb24gUExBVEZPUk0oTUFDKSAqLwotI2lmICFkZWZpbmVkKEVOQUJMRV9ERkdf
SklUKSAmJiBFTkFCTEUoSklUKSAmJiBVU0UoSlNWQUxVRTY0KSAmJiBQTEFURk9STShNQUMpCisj
aWYgIWRlZmluZWQoRU5BQkxFX0RGR19KSVQpICYmIEVOQUJMRShKSVQpICYmIFBMQVRGT1JNKE1B
QykKICNkZWZpbmUgRU5BQkxFX0RGR19KSVQgMQogI2VuZGlmCiAK
</data>
<flag name="review"
          id="112723"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114151</attachid>
            <date>2011-11-08 14:15:12 -0800</date>
            <delta_ts>2011-11-08 14:18:35 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>osrexit_patch_5.diff</filename>
            <type>text/plain</type>
            <size>129808</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTk2MTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAK
KzIwMTEtMTEtMDggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgT1NSIGV4aXQgY29kZSBzaG91bGQgYmUgZ2VuZXJhdGVkIGJ5IGEgc2VwYXJhdGUgY29tcGls
ZXIsIG5vdAorICAgICAgICByZWxhdGVkIHRvIERGRzo6SklUQ29tcGlsZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNzg3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBNb3ZlcyB0aGUgZXhp
dFNwZWN1bGF0aXZlV2l0aE9TUigpIG1ldGhvZCBmcm9tIEpJVENvbXBpbGVyIHRvCisgICAgICAg
IE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoKS4KKworICAgICAgICAqIENNYWtlTGlzdHNF
ZmwudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlcjMyXzY0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4
aXRDb21waWxlcjo6T1NSRXhpdENvbXBpbGVyKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENv
bXBpbGVyMzJfNjQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KToKKyAgICAgICAgKiBydW50aW1lL0pTVmFsdWUuaDoKKwogMjAxMS0xMS0wOCAgR2F2aW4gQmFy
cmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgREZHIEpJVCBjYWxj
dWxhdGlvbiBvZiBPU1IgZW50cnkgcG9pbnRzIGlzIG5vdCBUSFVNQjIgc2FmZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHNFZmwudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzRWZsLnR4dAkocmV2aXNpb24gOTk2MTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0c0VmbC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDkgKzMxLDkgQEAgTElTVChBUFBFTkQgSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRm
Zy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAogICAgIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJf
NjQuY3BwCiAgICAgZGZnL0RGR0pJVENvbXBpbGVyLmNwcAotICAgIGRmZy9ERkdKSVRDb21waWxl
cjMyXzY0LmNwcAogICAgIGRmZy9ERkdPcGVyYXRpb25zLmNwcAogICAgIGRmZy9ERkdPU1JFbnRy
eS5jcHAKKyAgICBkZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCiAgICAgZGZnL0RGR1By
b3BhZ2F0b3IuY3BwCiAgICAgZGZnL0RGR1JlcGF0Y2guY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDk5NjE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAg
LTkyLDkgKzkyLDEwIEBAIFNPVVJDRVMgKz0gXAogICAgIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9y
MzJfNjQuY3BwIFwKICAgICBkZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcCBcCiAgICAgZGZn
L0RGR0pJVENvbXBpbGVyLmNwcCBcCi0gICAgZGZnL0RGR0pJVENvbXBpbGVyMzJfNjQuY3BwIFwK
ICAgICBkZmcvREZHT3BlcmF0aW9ucy5jcHAgXAogICAgIGRmZy9ERkdPU1JFbnRyeS5jcHAgXAor
ICAgIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAgXAorICAgIGRmZy9ERkdPU1JFeGl0Q29t
cGlsZXIzMl82NC5jcHAgXAogICAgIGRmZy9ERkdQcm9wYWdhdG9yLmNwcCBcCiAgICAgZGZnL0RG
R1JlcGF0Y2guY3BwIFwKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5OTYxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MSw2ICs3MSw5IEBACiAJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAv
KiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIgLyogREZHT1NSRXhpdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzA5NzZEMTQ2OEFCNEUw
MENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzZDMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3Nl
bWJseUhlbHBlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkMwOTc2RTE0NjhBQjUxMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzZC
MTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuY3BwICovOyB9OworCQkwRkMw
OTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc2RjE0NjkzQUVGMDBDRjI0
NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDMDk3NzIxNDY5M0FGOTAwQ0YyNDQyIC8qIERGR09TUkV4
aXRDb21waWxlcjY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQzA5NzcwMTQ2OTNBRUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXI2NC5j
cHAgKi87IH07CisJCTBGQzA5Nzc2MTQ2OTQzQjAwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGls
ZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkMwOTc3NTE0Njk0M0FEMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3Bw
ICovOyB9OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9y
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1
MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQjE0MDQzQzBFMDBD
RkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3JpdGVC
YXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CiAJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBW
VGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMxOCw3ICszMjEs
NiBAQAogCQk4NjcwNEI4OTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY3MDRCODIxMkRCQTMz
NzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmNwcCAqLzsgfTsKIAkJODY3MDRCOEExMkRCQTMzNzAw
QTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NjcwNEI4MzEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4Njg4MEYx
QzE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjE4MTQzMjhCQjkw
MEIwOEQ0MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwICovOyB9OwotCQk4Njg4MEYx
RDE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGlsZXIzMl82NC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Njg4MEYxOTE0MzI4QkI5MDBCMDhE
NDIgLyogREZHSklUQ29tcGlsZXIzMl82NC5jcHAgKi87IH07CiAJCTg2ODgwRjFFMTQzMjhCQjkw
MEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjFBMTQzMjhCQjkwMEIwOEQ0MiAv
KiBERkdKSVRDb21waWxlcklubGluZU1ldGhvZHMuaCAqLzsgfTsKIAkJODY4ODBGMUYxNDMyOEJC
OTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8q
IERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovOyB9OwogCQk4Njg4MEY0NDE0MzUzMUE4MDBC
MDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjQzMTQzNTMxQTcwMEIwOEQ0MiAvKiBERkdK
SVRDb2RlR2VuZXJhdG9yNjQuY3BwICovOyB9OwpAQCAtODM5LDYgKzg0MSw5IEBACiAJCTBGQzA5
NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR09TUkV4aXQuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdB
c3NlbWJseUhlbHBlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHQXNzZW1ibHlIZWxwZXJzLmNwcDsgcGF0aCA9IGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIg
LyogREZHQXNzZW1ibHlIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0Fzc2VtYmx5SGVscGVycy5oOyBwYXRoID0gZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMwOTc2RjE0NjkzQUVGMDBDRjI0NDIgLyog
REZHT1NSRXhpdENvbXBpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R09TUkV4aXRDb21waWxlci5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMwOTc3MDE0NjkzQUVGMDBDRjI0NDIgLyogREZH
T1NSRXhpdENvbXBpbGVyNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDMDk3NzUxNDY5NDNBRDAw
Q0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDsgcGF0aCA9IGRm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2
MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTAwLDcgKzExMDUsNiBAQAogCQk4NjdGQzM1RjExQjc2
Mzk1MDAyNTEwNUUgLyogSmF2YVNjcmlwdENvcmUuSlNWQUxVRTMyXzY0b25seS5leHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmV4cG9ydHM7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5KU1ZBTFVFMzJf
NjRvbmx5LmV4cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY3RkMzNjExMUI3NjM5
NTAwMjUxMDVFIC8qIEphdmFTY3JpcHRDb3JlLkpTVkFMVUU2NG9ubHkuZXhwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5leHBvcnRzOyBwYXRoID0gSmF2YVNjcmlwdENvcmUuSlNWQUxVRTY0b25seS5l
eHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2ODgwRjE4MTQzMjhCQjkwMEIwOEQ0
MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcDsgcGF0aCA9IGRmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk4Njg4MEYxOTE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGlsZXIzMl82NC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdKSVRDb21waWxlcjMyXzY0LmNw
cDsgcGF0aCA9IGRmZy9ERkdKSVRDb21waWxlcjMyXzY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODY4ODBGMUExNDMyOEJCOTAwQjA4RDQyIC8qIERGR0pJVENvbXBpbGVySW5s
aW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb21w
aWxlcklubGluZU1ldGhvZHMuaDsgcGF0aCA9IGRmZy9ERkdKSVRDb21waWxlcklubGluZU1ldGhv
ZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4ODBGMUIxNDMyOEJCOTAwQjA4
RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA7IHBhdGggPSBkZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
ODgwRjQzMTQzNTMxQTcwMEIwOEQ0MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSklUQ29kZUdlbmVyYXRvcjY0LmNw
cDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjI5OCw2ICsyMzAyLDkgQEAKIAkJODZFQzlEQjMxMzI4REY0NDAwMkIy
QUQ3IC8qIGRmZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJMEZDMDk3NzUxNDY5NDNBRDAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjMyXzY0LmNw
cCAqLywKKwkJCQkwRkMwOTc2RjE0NjkzQUVGMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVy
LmggKi8sCisJCQkJMEZDMDk3NzAxNDY5M0FFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxl
cjY0LmNwcCAqLywKIAkJCQkwRkMwOTc2QjE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlI
ZWxwZXJzLmNwcCAqLywKIAkJCQkwRkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1i
bHlIZWxwZXJzLmggKi8sCiAJCQkJMEZDMDk3NjgxNDY4QTZFRjAwQ0YyNDQyIC8qIERGR09TUkV4
aXQuaCAqLywKQEAgLTIzMjYsNyArMjMzMyw2IEBACiAJCQkJODY4ODBGNDMxNDM1MzFBNzAwQjA4
RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAgKi8sCiAJCQkJODZFQzlEQkIxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmNwcCAqLywKIAkJCQk4NkVDOURCQzEzMjhERjgy
MDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCAqLywKLQkJCQk4Njg4MEYxOTE0MzI4QkI5MDBC
MDhENDIgLyogREZHSklUQ29tcGlsZXIzMl82NC5jcHAgKi8sCiAJCQkJODY4ODBGMUExNDMyOEJC
OTAwQjA4RDQyIC8qIERGR0pJVENvbXBpbGVySW5saW5lTWV0aG9kcy5oICovLAogCQkJCTg2RUNB
M0U5MTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggKi8sCiAJCQkJMEZEODJFNTIxNDFEQUVE
RTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCAqLywKQEAgLTI5MTIsNiArMjkxOCw3IEBACiAJ
CQkJMEYyRTVCRjcxNDYzNTdENTAwM0VCMkVCIC8qIFNwZWN0cnVtLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZHT1NSRXhpdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDMDk3NkQxNDY4QUI0RTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5SGVscGVycy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4
aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zNDM2LDcgKzM0NDMsNiBAQAogCQkJCUE3
MDQ1NkIxMTQyN0ZCOTUwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYxQzE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29k
ZUdlbmVyYXRvcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTg2ODgwRjFEMTQzMjhCQjkw
MEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2
ODgwRjFGMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2ODgwRjQ0MTQzNTMxQTgwMEIwOEQ0MiAvKiBERkdKSVRDb2RlR2Vu
ZXJhdG9yNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4ODBGNEQxNDM1M0IyMTAwQjA4RDQy
IC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zNDQ0LDYgKzM0
NTAsOCBAQAogCQkJCTBGNjIwMTc5MTQzRkNENDgwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDM0M0Q0EwMTQ1OEY1NDUwMDI1RkI2MiAvKiBKU0ds
b2JhbFRoaXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3NkUxNDY4QUI1MTAwQ0YyNDQy
IC8qIERGR0Fzc2VtYmx5SGVscGVycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkMwOTc3MjE0
NjkzQUY5MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZDMDk3NzYxNDY5NDNCMDAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjMyXzY0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiA5OTYxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNTY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEludGVsIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR0pJVENvbXBp
bGVyLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotCi0j
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiREZHSklUQ29kZUdlbmVyYXRvci5oIgot
I2luY2x1ZGUgIkRGR0pJVENvbXBpbGVySW5saW5lTWV0aG9kcy5oIgotI2luY2x1ZGUgIkRGR09w
ZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJERkdSZWdpc3RlckJhbmsuaCIKLSNpbmNsdWRlICJERkdT
cGVjdWxhdGl2ZUpJVC5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi12b2lkIEpJ
VENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmIGV4aXQsIFNw
ZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQotewotICAgIC8vIDEpIFByby1mb3JtYSBzdHVm
Zi4KLSAgICBleGl0Lm1fY2hlY2subGluayh0aGlzKTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdf
VkVSQk9TRSkKLSAgICBmcHJpbnRmKHN0ZGVyciwgIk9TUiBleGl0IGZvciBOb2RlIEAlZCAoIiwg
KGludClleGl0Lm1fbm9kZUluZGV4KTsKLSAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9
IGV4aXQubV9jb2RlT3JpZ2luOyA7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmMjJXUiLCBjb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0+ICVw
ICIsIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKTsKLSAgICB9
Ci0gICAgZnByaW50ZihzdGRlcnIsICIpIGF0IEpJVCBvZmZzZXQgMHgleCAgIiwgZGVidWdPZmZz
ZXQoKSk7Ci0gICAgZXhpdC5kdW1wKHN0ZGVycik7Ci0jZW5kaWYKLSNpZiBERkdfRU5BQkxFKFZF
UkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSkKLSAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0lu
Zm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87Ci0gICAgZGVi
dWdJbmZvLT5jb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKLSAgICBkZWJ1Z0luZm8tPmRlYnVnT2Zm
c2V0ID0gZGVidWdPZmZzZXQoKTsKLSAgICAKLSAgICBkZWJ1Z0NhbGwoZGVidWdPcGVyYXRpb25Q
cmludFNwZWN1bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKLSNlbmRpZgotICAgIAotI2lmIERG
R19FTkFCTEUoSklUX0JSRUFLX09OX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCi0gICAgYnJlYWtwb2lu
dCgpOwotI2VuZGlmCi0gICAgCi0jaWYgREZHX0VOQUJMRShTVUNDRVNTX1NUQVRTKQotICAgIHN0
YXRpYyBTYW1wbGluZ0NvdW50ZXIgY291bnRlcigiU3BlY3VsYXRpb25GYWlsdXJlIik7Ci0gICAg
ZW1pdENvdW50KGNvdW50ZXIpOwotI2VuZGlmCi0KLSAgICAvLyAyKSBQZXJmb3JtIHNwZWN1bGF0
aW9uIHJlY292ZXJ5LiBUaGlzIG9ubHkgY29tZXMgaW50byBwbGF5IHdoZW4gYW4gb3BlcmF0aW9u
Ci0gICAgLy8gICAgc3RhcnRzIG11dGF0aW5nIHN0YXRlIGJlZm9yZSB2ZXJpZnlpbmcgdGhlIHNw
ZWN1bGF0aW9uIGl0IGhhcyBhbHJlYWR5IG1hZGUuCi0gICAgCi0gICAgaWYgKHJlY292ZXJ5KSB7
Ci0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5cGUoKSkgewotICAgICAgICBjYXNlIFNwZWN1
bGF0aXZlQWRkOgotICAgICAgICAgICAgc3ViMzIocmVjb3ZlcnktPnNyYygpLCByZWNvdmVyeS0+
ZGVzdCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
Qm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyAzKSBSZWZpbmUgc29tZSB2YWx1ZSBwcm9maWxlLCBpZiBhcHByb3ByaWF0ZS4K
LSAgICAKLSAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSAmJiAhIWV4aXQubV92YWx1ZVBy
b2ZpbGUpIHsKLSAgICAgICAgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmlzQWRkcmVzcygpKSB7
Ci0gICAgICAgICAgICAvLyBTYXZlIGEgcmVnaXN0ZXIgc28gd2UgY2FuIHVzZSBpdC4KLSAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgICAgICAgICBpZiAo
c2NyYXRjaCA9PSBleGl0Lm1fanNWYWx1ZVNvdXJjZS5iYXNlKCkpCi0gICAgICAgICAgICAgICAg
c2NyYXRjaCA9IEdQUkluZm86OnJlZ1QxOwotICAgICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIHNj
cmF0Y2hCdWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGdsb2JhbERhdGEoKS0+
c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKHVpbnQzMl90KSkpOwotICAgICAgICAgICAgc3Rv
cmUzMihzY3JhdGNoLCBzY3JhdGNoQnVmZmVyKTsKLSAgICAgICAgICAgIGxvYWQzMihleGl0Lm1f
anNWYWx1ZVNvdXJjZS5hc0FkZHJlc3MoT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy50YWcpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBzdG9yZTMyKHNjcmF0
Y2gsICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGV4aXQubV92YWx1ZVBy
b2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnRhZyk7Ci0gICAgICAgICAgICBsb2Fk
MzIoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNBZGRyZXNzKE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAg
IHN0b3JlMzIoc2NyYXRjaCwgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4o
ZXhpdC5tX3ZhbHVlUHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQoMCkpLT5hc0JpdHMucGF5bG9hZCk7
Ci0gICAgICAgICAgICBsb2FkMzIoc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaCk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaGFzS25vd25UYWcoKSkgewotICAgICAgICAg
ICAgc3RvcmUzMihJbW0zMihleGl0Lm1fanNWYWx1ZVNvdXJjZS50YWcoKSksICZiaXR3aXNlX2Nh
c3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGV4aXQubV92YWx1ZVByb2ZpbGUtPnNwZWNGYWls
QnVja2V0KDApKS0+YXNCaXRzLnRhZyk7Ci0gICAgICAgICAgICBzdG9yZTMyKGV4aXQubV9qc1Zh
bHVlU291cmNlLnBheWxvYWRHUFIoKSwgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yKj4oZXhpdC5tX3ZhbHVlUHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQoMCkpLT5hc0JpdHMucGF5
bG9hZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdG9yZTMyKGV4aXQubV9qc1Zh
bHVlU291cmNlLnRhZ0dQUigpLCAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3Iq
PihleGl0Lm1fdmFsdWVQcm9maWxlLT5zcGVjRmFpbEJ1Y2tldCgwKSktPmFzQml0cy50YWcpOwot
ICAgICAgICAgICAgc3RvcmUzMihleGl0Lm1fanNWYWx1ZVNvdXJjZS5wYXlsb2FkR1BSKCksICZi
aXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGV4aXQubV92YWx1ZVByb2ZpbGUt
PnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnBheWxvYWQpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIC8vIDQpIEZpZ3VyZSBvdXQgaG93IG1hbnkgc2NyYXRjaCBzbG90cyB3ZSdsbCBu
ZWVkLiBXZSBuZWVkIG9uZSBmb3IgZXZlcnkgR1BSL0ZQUgotICAgIC8vICAgIHdob3NlIGRlc3Rp
bmF0aW9uIGlzIG5vdyBvY2N1cGllZCBieSBhIERGRyB2aXJ0dWFsIHJlZ2lzdGVyLCBhbmQgd2Ug
bmVlZAotICAgIC8vICAgIG9uZSBmb3IgZXZlcnkgZGlzcGxhY2VkIHZpcnR1YWwgcmVnaXN0ZXIg
aWYgdGhlcmUgYXJlIG1vcmUgdGhhbgotICAgIC8vICAgIEdQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzIG9mIHRoZW0uIEFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uc3RhbnRzLAotICAgIC8v
ICAgIGFueSB1bmRlZmluZWQgc2xvdHMsIGFueSBGUFIgc2xvdHMsIGFuZCBhbnkgdW5ib3hlZCBp
bnRzLgotICAgICAgICAgICAgCi0gICAgVmVjdG9yPGJvb2w+IHBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVycyhleGl0Lm1fdmFyaWFibGVzLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycy5zaXplKCk7ICsraSkKLSAgICAgICAgcG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzW2ldID0gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZlBv
aXNvbmVkVmlydHVhbFJlZ2lzdGVycyA9IDA7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZEaXNwbGFj
ZWRWaXJ0dWFsUmVnaXN0ZXJzID0gMDsKLSAgICAKLSAgICAvLyBCb29sZWFucyBmb3IgZmFzdCBj
aGVja3MuIFdlIGV4cGVjdCB0aGF0IG1vc3QgT1NSIGV4aXRzIGRvIG5vdCBoYXZlIHRvIHJlYm94
Ci0gICAgLy8gSW50MzJzLCBoYXZlIG5vIEZQUnMsIGFuZCBoYXZlIG5vIGNvbnN0YW50cy4gSWYg
dGhlcmUgYXJlIGNvbnN0YW50cywgd2UKLSAgICAvLyBleHBlY3QgbW9zdCBvZiB0aGVtIHRvIGJl
IGpzVW5kZWZpbmVkKCk7IGlmIHRoYXQncyB0cnVlIHRoZW4gd2UgaGFuZGxlIHRoYXQKLSAgICAv
LyBzcGVjaWFsbHkgdG8gbWluaW1pemUgY29kZSBzaXplIGFuZCBleGVjdXRpb24gdGltZS4KLSAg
ICBib29sIGhhdmVVbmJveGVkSW50MzJJblJlZ2lzdGVyRmlsZSA9IGZhbHNlOwotICAgIGJvb2wg
aGF2ZVVuYm94ZWRDZWxsSW5SZWdpc3RlckZpbGUgPSBmYWxzZTsKLSAgICBib29sIGhhdmVVbmJv
eGVkQm9vbGVhbkluUmVnaXN0ZXJGaWxlID0gZmFsc2U7Ci0gICAgYm9vbCBoYXZlRlBScyA9IGZh
bHNlOwotICAgIGJvb2wgaGF2ZUNvbnN0YW50cyA9IGZhbHNlOwotICAgIGJvb2wgaGF2ZVVuZGVm
aW5lZCA9IGZhbHNlOwotICAgIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0
Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgc3dp
dGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVn
aXN0ZXJGaWxlOgotICAgICAgICAgICAgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJz
Kys7Ci0gICAgICAgICAgICBBU1NFUlQoKGludClyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA+
PSAwKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gU2VlIGlmIHdlIG1pZ2h0IGxpa2Ug
dG8gc3RvcmUgdG8gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyIGJlZm9yZSBkb2luZwotICAgICAgICAg
ICAgLy8gdmlydHVhbCByZWdpc3RlciBzaHVmZmxpbmcuIElmIHNvLCB3ZSBzYXkgdGhhdCB0aGUg
dmlydHVhbCByZWdpc3RlcgotICAgICAgICAgICAgLy8gaXMgcG9pc29uZWQ6IGl0IGNhbm5vdCBi
ZSBzdG9yZWQgdG8gdW50aWwgYWZ0ZXIgZGlzcGxhY2VkIHZpcnR1YWwKLSAgICAgICAgICAgIC8v
IHJlZ2lzdGVycyBhcmUgaGFuZGxlZC4gV2UgdHJhY2sgcG9pc29uZWQgdmlydHVhbCByZWdpc3Rl
ciBjYXJlZnVsbHkKLSAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0aGlzIGhhcHBlbnMgZWZmaWNp
ZW50bHkuIE5vdGUgdGhhdCB3ZSBleHBlY3QgdGhpcyBjYXNlCi0gICAgICAgICAgICAvLyB0byBi
ZSByYXJlLCBzbyB0aGUgaGFuZGxpbmcgb2YgaXQgaXMgb3B0aW1pemVkIGZvciB0aGUgY2FzZXMg
aW4KLSAgICAgICAgICAgIC8vIHdoaWNoIGl0IGRvZXMgbm90IGhhcHBlbi4KLSAgICAgICAgICAg
IGlmIChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA8IChpbnQpZXhpdC5tX3ZhcmlhYmxlcy5z
aXplKCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4aXQubV92YXJpYWJsZXNbcmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCldLnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBJbkdQUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAg
ICAgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKLSAgICAgICAgICAgICAgICBjYXNl
IEluUGFpcjoKLSAgICAgICAgICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAgICAgICAgICAg
ICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIo
KV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1ty
ZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMrKzsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFs
cmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgotICAgICAgICAgICAgaGF2ZVVuYm94
ZWRJbnQzMkluUmVnaXN0ZXJGaWxlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQ2VsbDoK
LSAgICAgICAgICAgIGhhdmVVbmJveGVkQ2VsbEluUmVnaXN0ZXJGaWxlID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0
ZXJGaWxlQXNVbmJveGVkQm9vbGVhbjoKLSAgICAgICAgICAgIGhhdmVVbmJveGVkQm9vbGVhbklu
UmVnaXN0ZXJGaWxlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAgICBoYXZlRlBScyA9IHRydWU7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENvbnN0YW50OgotICAgICAg
ICAgICAgaGF2ZUNvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29u
c3RhbnQoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIGhhdmVVbmRlZmluZWQgPSB0
cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIEVuY29kZWRK
U1ZhbHVlKiBzY3JhdGNoQnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihnbG9i
YWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAo
bnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMgKyAoKG51bWJlck9mRGlzcGxhY2VkVmly
dHVhbFJlZ2lzdGVycyAqIDIpIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID8gMCA6IG51
bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykpKSk7Ci0KLSAgICAvLyBGcm9tIGhlcmUg
b24sIHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpdCBpcyBwcm9maXRhYmxlIHRvIG1heGltaXplIHRo
ZSBkaXN0YW5jZQotICAgIC8vIGJldHdlZW4gd2hlbiBzb21ldGhpbmcgaXMgY29tcHV0ZWQgYW5k
IHdoZW4gaXQgaXMgc3RvcmVkLgotICAgIAotICAgIC8vIDUpIFBlcmZvcm0gYWxsIHJlYm94aW5n
IG9mIGludGVnZXJzIGFuZCBjZWxscywgZXhjZXB0IGZvciB0aG9zZSBpbiByZWdpc3RlcnMuCi0K
LSAgICBpZiAoaGF2ZVVuYm94ZWRJbnQzMkluUmVnaXN0ZXJGaWxlIHx8IGhhdmVVbmJveGVkQ2Vs
bEluUmVnaXN0ZXJGaWxlIHx8IGhhdmVVbmJveGVkQm9vbGVhbkluUmVnaXN0ZXJGaWxlKSB7Ci0g
ICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmll
cygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVy
eSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHJlY292
ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmls
ZUFzVW5ib3hlZEludDMyOgotICAgICAgICAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oZXhp
dC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZENlbGw6Ci0gICAg
ICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0Zv
cihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4
KSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBBbHJlYWR5
SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRCb29sZWFuOgotICAgICAgICAgICAgICAgIHN0b3JlMzIo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyA2KSBEdW1wIGFs
bCBub24tcG9pc29uZWQgR1BScy4gRm9yIHBvaXNvbmVkIEdQUnMsIHNhdmUgdGhlbSBpbnRvIHRo
ZSBzY3JhdGNoIHN0b3JhZ2UuCi0gICAgLy8gICAgTm90ZSB0aGF0IEdQUnMgZG8gbm90IGhhdmUg
YSBmYXN0IGNoYW5nZSAobGlrZSBoYXZlRlBScykgYmVjYXVzZSB3ZSBleHBlY3QgdGhhdAotICAg
IC8vICAgIG1vc3QgT1NSIGZhaWx1cmUgcG9pbnRzIHdpbGwgaGF2ZSBhdCBsZWFzdCBvbmUgR1BS
IHRoYXQgbmVlZHMgdG8gYmUgZHVtcGVkLgotICAgIAotICAgIHVuc2lnbmVkIHNjcmF0Y2hJbmRl
eCA9IDA7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNv
dmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zl
cnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICBpbnQgb3BlcmFuZCA9IGV4
aXQub3BlcmFuZEZvckluZGV4KGluZGV4KTsKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNo
bmlxdWUoKSkgewotICAgICAgICBjYXNlIEluR1BSOgotICAgICAgICBjYXNlIFVuYm94ZWRJbnQz
MkluR1BSOgotICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6Ci0gICAgICAgICAgICBp
ZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbZXhp
dC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCi0gICAgICAgICAgICAgICAgc3RvcmUzMihyZWNv
dmVyeS5ncHIoKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0
Y2hJbmRleCsrKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdWludDMy
X3QgdGFnID0gSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZzsKLSAgICAgICAgICAgICAgICBpZiAocmVj
b3ZlcnkudGVjaG5pcXVlKCkgPT0gSW5HUFIpCi0gICAgICAgICAgICAgICAgICAgIHRhZyA9IEpT
VmFsdWU6OkNlbGxUYWc7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVjb3ZlcnkudGVjaG5p
cXVlKCkgPT0gVW5ib3hlZEludDMySW5HUFIpCi0gICAgICAgICAgICAgICAgICAgIHRhZyA9IEpT
VmFsdWU6OkludDMyVGFnOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgdGFnID0gSlNWYWx1ZTo6Qm9vbGVhblRhZzsKLSAgICAgICAgICAgICAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMih0YWcpLCB0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7Ci0gICAg
ICAgICAgICAgICAgc3RvcmUzMihyZWNvdmVyeS5ncHIoKSwgcGF5bG9hZEZvcigoVmlydHVhbFJl
Z2lzdGVyKW9wZXJhbmQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEluUGFpcjoKLSAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUoaW5kZXgp
ICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgp
XSkgewotICAgICAgICAgICAgICAgIHN0b3JlMzIocmVjb3ZlcnkudGFnR1BSKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICAgICAgICAg
ICAgICBzdG9yZTMyKHJlY292ZXJ5LnBheWxvYWRHUFIoKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICAgICAgICAgICAgICBzY3Jh
dGNoSW5kZXgrKzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RvcmUz
MihyZWNvdmVyeS50YWdHUFIoKSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOwot
ICAgICAgICAgICAgICAgIHN0b3JlMzIocmVjb3ZlcnkucGF5bG9hZEdQUigpLCBwYXlsb2FkRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICAvLyBBdCB0aGlzIHBvaW50IGFsbCBHUFJzIGFyZSBhdmFpbGFibGUg
Zm9yIHNjcmF0Y2ggdXNlLgotICAgIAotICAgIGlmIChoYXZlRlBScykgewotICAgICAgICAvLyA3
KSBCb3ggYWxsIGRvdWJsZXMgKHJlbGllcyBvbiB0aGVyZSBiZWluZyBtb3JlIEdQUnMgdGhhbiBG
UFJzKQotICAgICAgICAvLyAgICBGb3IgSlNWYWx1ZTMyXzY0LCBubyBuZWVkIHRvIGJveCBkb3Vi
bGVzLgotICAgICAgICAKLSAgICAgICAgLy8gOCkgRHVtcCBhbGwgZG91YmxlcyBpbnRvIHRoZSBy
ZWdpc3RlciBmaWxlLCBvciB0byB0aGUgc2NyYXRjaCBzdG9yYWdlIGlmCi0gICAgICAgIC8vICAg
IHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIHJlZ2lzdGVyIGlzIHBvaXNvbmVkLgotICAgICAgICAK
LSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVy
aWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgIGlmIChyZWNvdmVy
eS50ZWNobmlxdWUoKSAhPSBJbkZQUikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkKLSAgICAgICAgICAgICAgICBzdG9y
ZURvdWJsZShyZWNvdmVyeS5mcHIoKSwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdG9yZURvdWJsZShyZWNvdmVyeS5m
cHIoKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGlu
ZGV4KSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChzY3JhdGNoSW5kZXgg
PT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOwotICAgIAotICAgIC8vIDkpIFJl
c2h1ZmZsZSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMuIE9wdGltaXplIGZvciB0aGUgY2Fz
ZSB0aGF0Ci0gICAgLy8gICAgdGhlIG51bWJlciBvZiBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3Rl
cnMgaXMgbm90IG1vcmUgdGhhbiB0aGUgbnVtYmVyCi0gICAgLy8gICAgb2YgYXZhaWxhYmxlIHBo
eXNpY2FsIHJlZ2lzdGVycy4KLSAgICAKLSAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFs
UmVnaXN0ZXJzKSB7Ci0gICAgICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3Rl
cnMgKiAyIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKSB7Ci0gICAgICAgICAgICAvLyBT
byBmYXIgdGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBjYXNlIHRoYXQgdHJpZ2dlcnMgYWxsIHRoZSB0
aW1lLCBidXQKLSAgICAgICAgICAgIC8vIHRoYXQgaXMgZmFyIGZyb20gZ3VhcmFudGVlZC4KLSAg
ICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRleCA9IDA7Ci0gICAg
ICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJp
ZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJl
Y292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAo
cmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9y
KHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFj
ZW1lbnRJbmRleCsrKSk7Ci0gICAgICAgICAgICAgICAgbG9hZDMyKHRhZ0ZvcihyZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgr
KykpOwotICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgIGRpc3BsYWNlbWVudElu
ZGV4ID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51
bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAg
ICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVy
RmlsZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc3Rv
cmUzMihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBwYXlsb2FkRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAg
ICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4Kysp
LCB0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCB1c2UgdGhlIHNodWZmbGluZyBhbGdvcml0aG0gdGhhdCB3ZSB1c2UKLSAgICAg
ICAgICAgIC8vIGZvciBzcGVjdWxhdGl2ZS0+bm9uLXNwZWN1bGF0aXZlIGp1bXBzLCBpZiB3ZSBl
dmVyIGRpc2NvdmVyIHRoYXQKLSAgICAgICAgICAgIC8vIHNvbWUgaG90IGNvZGUgd2l0aCBsb3Rz
IG9mIGxpdmUgdmFsdWVzIHRoYXQgZ2V0IGRpc3BsYWNlZCBhbmQKLSAgICAgICAgICAgIC8vIHNw
aWxsZWQgcmVhbGx5IGVuam95cyBmcmVxdWVudGx5IGZhaWxpbmcgc3BlY3VsYXRpb24uCi0gICAg
ICAgIAotICAgICAgICAgICAgLy8gRm9yIG5vdyB0aGlzIGNvZGUgaXMgZW5naW5lZXJlZCB0byBi
ZSBjb3JyZWN0IGJ1dCBwcm9iYWJseSBub3QKLSAgICAgICAgICAgIC8vIHN1cGVyLiBJbiBwYXJ0
aWN1bGFyLCBpdCBjb3JyZWN0bHkgaGFuZGxlcyBjYXNlcyB3aGVyZSBmb3IgZXhhbXBsZQotICAg
ICAgICAgICAgLy8gdGhlIGRpc3BsYWNlbWVudHMgYXJlIGEgcGVybXV0YXRpb24gb2YgdGhlIGRl
c3RpbmF0aW9uIHZhbHVlcywgbGlrZQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIDEg
LT4gMgotICAgICAgICAgICAgLy8gMiAtPiAxCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAg
Ly8gSXQgYWNjb21wbGlzaGVzIHRoaXMgYnkgc2ltcGx5IGxpZnRpbmcgYWxsIG9mIHRoZSB2aXJ0
dWFsIHJlZ2lzdGVycwotICAgICAgICAgICAgLy8gZnJvbSB0aGVpciBvbGQgKERGRyBKSVQpIGxv
Y2F0aW9ucyBhbmQgZHJvcHBpbmcgdGhlbSBpbiBhIHNjcmF0Y2gKLSAgICAgICAgICAgIC8vIGxv
Y2F0aW9uIGluIG1lbW9yeSwgYW5kIHRoZW4gdHJhbnNmZXJyaW5nIGZyb20gdGhhdCBzY3JhdGNo
IGxvY2F0aW9uCi0gICAgICAgICAgICAvLyB0byB0aGVpciBuZXcgKG9sZCBKSVQpIGxvY2F0aW9u
cy4KLSAgICAgICAgCi0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhp
dC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAg
ICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdp
c3RlckZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IGxvYWQzMihwYXlsb2FkRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6
cmVnVDApOwotICAgICAgICAgICAgICAgIGxvYWQzMih0YWdGb3IocmVjb3ZlcnkudmlydHVhbFJl
Z2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJ
bmZvOjpyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0
Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKTsKLSAgICAgICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QxLCByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAg
ICAgICAgICAgc2NyYXRjaEluZGV4Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICAgICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnM7Ci0g
ICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292
ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgICAgICBp
ZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGxvYWQzMihyZWludGVy
cHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCksIEdQUkluZm86
OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICBsb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
c2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZyksIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgICAg
ICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
ZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihH
UFJJbmZvOjpyZWdUMSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5k
ZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgc2NyYXRjaEluZGV4Kys7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJP
ZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyArIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lz
dGVycyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gMTApIER1bXAgYWxsIHBvaXNv
bmVkIHZpcnR1YWwgcmVnaXN0ZXJzLgotICAgIAotICAgIHNjcmF0Y2hJbmRleCA9IDA7Ci0gICAg
aWYgKG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7Ci0gICAgICAgIGZvciAoaW50
IHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IChpbnQpZXhpdC5tX3Zhcmlh
Ymxlcy5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7Ci0gICAgICAgICAgICBpZiAoIXBvaXNv
bmVkVmlydHVhbFJlZ2lzdGVyc1t2aXJ0dWFsUmVnaXN0ZXJdKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiBy
ZWNvdmVyeSA9IGV4aXQubV92YXJpYWJsZXNbdmlydHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgICAg
IHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgSW5HUFI6
Ci0gICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICAgICAgY2FzZSBV
bmJveGVkQm9vbGVhbkluR1BSOiB7Ci0gICAgICAgICAgICAgICAgbG9hZDMyKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKykgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpLCBHUFJJbmZvOjpy
ZWdUMCk7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgcGF5bG9hZEZv
cigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIHVp
bnQzMl90IHRhZyA9IEpTVmFsdWU6OkVtcHR5VmFsdWVUYWc7Ci0gICAgICAgICAgICAgICAgaWYg
KHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IEluR1BSKQotICAgICAgICAgICAgICAgICAgICB0YWcg
PSBKU1ZhbHVlOjpDZWxsVGFnOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpID09IFVuYm94ZWRJbnQzMkluR1BSKQotICAgICAgICAgICAgICAgICAgICB0YWcg
PSBKU1ZhbHVlOjpJbnQzMlRhZzsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHRhZyA9IEpTVmFsdWU6OkJvb2xlYW5UYWc7Ci0gICAgICAgICAgICAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIodGFnKSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lz
dGVyKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAgICBjYXNlIEluUGFpcjoKLSAgICAgICAgICAgICAg
ICBsb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJ
bmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgbG9hZDMyKHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpLCBHUFJJbmZvOjpyZWdU
MSk7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgcGF5bG9hZEZvcigo
VmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIHN0b3Jl
MzIoR1BSSW5mbzo6cmVnVDEsIHRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3Rl
cikpOwotICAgICAgICAgICAgICAgIHNjcmF0Y2hJbmRleCsrOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQo
c2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKLSAgICAK
LSAgICAvLyAxMSkgRHVtcCBhbGwgY29uc3RhbnRzLiBPcHRpbWl6ZSBmb3IgVW5kZWZpbmVkLCBz
aW5jZSB0aGF0J3MgYSBjb25zdGFudCB3ZSBzZWUKLSAgICAvLyAgICAgb2Z0ZW4uCi0KLSAgICBp
ZiAoaGF2ZUNvbnN0YW50cykgewotICAgICAgICBpZiAoaGF2ZVVuZGVmaW5lZCkgewotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS5wYXlsb2FkKCkpLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnRh
ZygpKSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3Ig
KGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRl
eCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZh
bHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgp
ICE9IENvbnN0YW50KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYg
KHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmluZWQoKSkgewotICAgICAgICAgICAgICAgIHN0
b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9w
ZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86
OnJlZ1QxLCB0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRl
eCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS50YWcoKSksIHRhZ0Zv
cigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIDEyKSBBZGp1c3QgdGhlIG9s
ZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25v
dwotICAgIC8vICAgICB0aGF0IGFsbCBuZXcgY2FsbHMgaW50byB0aGlzIGNvZGUgd2lsbCBnbyB0
byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1dGUKLSAgICAvLyAgICAgY291bnRlciBvbmx5IGFm
ZmVjdHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5kIGNhbGwgZnJhbWVz
Ci0gICAgLy8gICAgIHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9sZCBKSVQgYXQgdGhl
IHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MKLSAgICAvLyAgICAgT1NSIGV4aXQuIFdlIHdh
bnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgotICAgIC8vCi0gICAgLy8g
ICAgIChhKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRvIHJl
ZW50ZXIgb3B0aW1pemVkCi0gICAgLy8gICAgICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNlIG9w
dGltaXplZCBjb2RlIGlzIGZhc3Rlci4gQnV0IHdlIGRvbid0Ci0gICAgLy8gICAgICAgICB3YW50
IHRvIGRvIHN1Y2ggcmVlbnRlcnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChjKSBiZWxvdykuCi0g
ICAgLy8KLSAgICAvLyAgICAgKGIpIElmIHRoZXJlIGlzIGNvZGUgb24gdGhlIGNhbGwgc3RhY2sg
dGhhdCBpcyBzdGlsbCBydW5uaW5nIHRoZSBvbGQKLSAgICAvLyAgICAgICAgIEpJVCdzIGNvZGUg
YW5kIGhhcyBuZXZlciBPU1InZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRvCi0gICAg
Ly8gICAgICAgICBwZXJmb3JtIE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUg
ZXhpdGVkLgotICAgIC8vCi0gICAgLy8gICAgIChjKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1Ig
ZXhpdCBzaG91bGQgbm90IGltbWVkaWF0ZWx5IHJldHJ5IE9TUgotICAgIC8vICAgICAgICAgZW50
cnksIHNpbmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwot
ICAgIC8vICAgICAgICAgcGFydGljdWxhcmx5IGV4cGVuc2l2ZS4KLSAgICAvLwotICAgIC8vICAg
ICAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3Vs
dCBpbiB0aGUgY29kZQotICAgIC8vICAgICAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1
bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KLSAgICAvLwotICAgIC8vICAg
ICBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8K
LSAgICAvLyAgICAgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNl
ZW1zIGxpa2UgaXQgd291bGQgZW5kYW5nZXIKLSAgICAvLyAgICAgKGEpIGFuZCAoYiksIHNpbmNl
IHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgotICAg
IC8vICAgICBldmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZvcm0gT1NSIGVudHJ5LiBFc3NlbnRpYWxs
eSwgaWYgT1NSIGV4aXQgaGFwcGVucwotICAgIC8vICAgICBmcmVxdWVudGx5IGFuZCB0aGUgZnVu
Y3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVyCi0gICAgLy8g
ICAgIGJlY29tZSBub24tbmVnYXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdn
ZXJlZC4gT1NSIGVudHJ5Ci0gICAgLy8gICAgIHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdl
dHMgaG90IGluIHRoZSBvbGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5Ci0gICAgLy8gICAgIGdv
b2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2Fy
ZSBvZiAoZCksCi0gICAgLy8gICAgIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3Vs
ZCByZXNldCB0aGUgZXhlY3V0ZSBjb3VudGVyLgotICAgIC8vICAgICBTbyB3ZSBjaGVjayBoZXJl
IGlmIHRoZSBudW1iZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQot
ICAgIC8vICAgICBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5
MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlmCi0gICAgLy8gICAgIHRoZXJlIGhhdmUgYmVlbiBhIGxh
cmdlIGVub3VnaCBudW1iZXIgb2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCi0gICAgLy8g
ICAgIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bwotICAgIC8v
ICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCi0gICAgCi0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgIAotICAg
IGxvYWQzMihBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3Vs
YXRpdmVGYWlsQ291bnRlcigpKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNz
KEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291
bnRlcigpKSwgR1BSSW5mbzo6cmVnVDEpOwotICAgIGFkZDMyKEltbTMyKDEpLCBHUFJJbmZvOjpy
ZWdUMik7Ci0gICAgYWRkMzIoSW1tMzIoLTEpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgc3RvcmUz
MihHUFJJbmZvOjpyZWdUMiwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZz
ZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSkpOwotICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVn
VDEsIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2
ZVN1Y2Nlc3NDb3VudGVyKCkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29kZUJs
b2NrKCktPmFsdGVybmF0aXZlKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBm
ZXdGYWlscyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIsIEltbTMyKGNv
ZGVCbG9jaygpLT5sYXJnZUZhaWxDb3VudFRocmVzaG9sZCgpKSk7Ci0gICAgbXVsMzIoSW1tMzIo
SGV1cmlzdGljczo6ZGVzaXJlZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxSYXRpbyksIEdQUkluZm86
OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgCi0gICAgSnVtcCBsb3dGYWlsUmF0ZSA9IGJy
YW5jaDMyKEJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJlZ1QxKTsKLSAg
ICAKLSAgICAvLyBSZW9wdGltaXplIGFzIHNvb24gYXMgcG9zc2libGUuCi0gICAgc3RvcmUzMihJ
bW0zMihIZXVyaXN0aWNzOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZv
Y2F0aW9uKSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkV4ZWN1
dGVDb3VudGVyKCkpKTsKLSAgICBKdW1wIGRvbmVBZGp1c3RpbmcgPSBqdW1wKCk7Ci0gICAgCi0g
ICAgZmV3RmFpbHMubGluayh0aGlzKTsKLSAgICBsb3dGYWlsUmF0ZS5saW5rKHRoaXMpOwotICAg
IAotICAgIHN0b3JlMzIoSW1tMzIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmNvdW50ZXJW
YWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpLCBBZGRyZXNzKEdQUkluZm86OnJlZ1Qw
LCBDb2RlQmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNvdW50ZXIoKSkpOwotICAgIAotICAgIGRvbmVB
ZGp1c3RpbmcubGluayh0aGlzKTsKLSAgICAKLSAgICAvLyAxMykgTG9hZCB0aGUgcmVzdWx0IG9m
IHRoZSBsYXN0IGJ5dGVjb2RlIG9wZXJhdGlvbiBpbnRvIHJlZ1QwLgotICAgIAotICAgIGlmIChl
eGl0Lm1fbGFzdFNldE9wZXJhbmQgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkg
ewotICAgICAgICBsb2FkMzIocGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0
U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKLSAgICAgICAgbG9h
ZDMyKHRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUklu
Zm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7Ci0gICAgfQotICAgIAotICAgIC8vIDE0KSBGaXgg
Y2FsbCBmcmFtZSAocykuCi0gICAgCi0gICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2
ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAgIHN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBhZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKTsKLSAgICAKLSAgICBmb3Ig
KENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5j
YWxsZXIpIHsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pOwotICAgICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZXIpOwotICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5l
T2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBkZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVC
bG9ja0ZvckNhbGxlcik7Ci0gICAgICAgIHVuc2lnbmVkIHJldHVybkJ5dGVjb2RlSW5kZXggPSBp
bmxpbmVDYWxsRnJhbWUtPmNhbGxlci5ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9j
YWxsKTsKLSAgICAgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5
U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVj
b2RlZENvZGVNYXAuc2l6ZSgpLCByZXR1cm5CeXRlY29kZUluZGV4KTsKLSAgICAgICAgCi0gICAg
ICAgIEFTU0VSVChtYXBwaW5nKTsKLSAgICAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJ
bmRleCA9PSByZXR1cm5CeXRlY29kZUluZGV4KTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQqIGp1
bXBUYXJnZXQgPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0SklUQ29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzQXRPZmZzZXQobWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7Ci0KLSAg
ICAgICAgR1BSUmVnIGNhbGxlckZyYW1lR1BSOwotICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICBhZGQzMihJbW0zMihpbmxp
bmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpy
ZWdUMyk7Ci0gICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OnJlZ1QzOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXI7Ci0gICAgICAgIAotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGJh
c2VsaW5lQ29kZUJsb2NrKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKSk7Ci0gICAgICAg
IHN0b3JlMzIoSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVy
KShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWlu
KSkpOwotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVlLT5zY29wZSgpKSwgcGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSkpOwotICAgICAgICBz
dG9yZTMyKEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoKFZpcnR1YWxSZWdpc3Rlciko
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUp
KSk7Ci0gICAgICAgIHN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBwYXlsb2FkRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNh
bGxlckZyYW1lKSkpOwotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQp
LCBwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBSZWdpc3RlckZpbGU6OlJldHVyblBDKSkpOwotICAgICAgICBzdG9yZTMyKEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAg
IHN0b3JlMzIoSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSwgcGF5bG9h
ZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVn
aXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSkpOwotICAgICAgICBzdG9yZTMyKEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpLCB0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKSkpOwotICAgICAgICBzdG9yZVB0cihU
cnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlLmdldCgpKSwgcGF5bG9hZEZvcigo
VmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJG
aWxlOjpDYWxsZWUpKSk7Ci0gICAgfQotICAgIAotICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGFkZFB0cihJbW0zMihleGl0Lm1fY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLQotICAgIC8vIDE1KSBKdW1wIGludG8gdGhlIGNv
cnJlc3BvbmRpbmcgYmFzZWxpbmUgSklUIGNvZGUuCi0gICAgCi0gICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGV4aXQubV9jb2RlT3JpZ2luKTsK
LSAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBk
ZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgCi0gICAgQnl0ZWNvZGVB
bmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGlu
ZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJ
bmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCBleGl0
Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKLSAgICAKLSAgICBBU1NFUlQobWFwcGluZyk7
Ci0gICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBleGl0Lm1fY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KTsKLSAgICAKLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gYmFzZWxpbmVD
b2RlQmxvY2stPmdldEpJVENvZGUoKS5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KG1hcHBpbmct
Pm1fbWFjaGluZUNvZGVPZmZzZXQpOwotICAgIAotICAgIEFTU0VSVChHUFJJbmZvOjpyZWdUMiAh
PSBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3RlciAmJiBHUFJJbmZvOjpyZWdUMiAhPSBHUFJJ
bmZvOjpjYWNoZWRSZXN1bHRSZWdpc3RlcjIpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihqdW1wVGFyZ2V0KSwgR1BSSW5mbzo6cmVnVDIpOwotICAgIGp1bXAoR1BSSW5mbzo6cmVnVDIp
OwotCi0jaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGZwcmludGYoc3RkZXJyLCAi
ICAgLT4gJXBcbiIsIGp1bXBUYXJnZXQpOwotI2VuZGlmCi19Ci0KLX0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5OTYxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdKSVRDb2Rl
R2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCiAjaW5jbHVkZSAi
REZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1JlZ2lzdGVyQmFuay5oIgogI2luY2x1ZGUg
IkRGR1NwZWN1bGF0aXZlSklULmgiCkBAIC00MCwxMiArNDEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoU3BlY3Vs
YXRpdmVKSVQmIHNwZWN1bGF0aXZlKQogeworICAgIE9TUkV4aXRDb21waWxlciBvc3JFeGl0Q29t
cGlsZXIoKnRoaXMpOworICAgIAogICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJhdG9yIGV4aXRzSXRl
ciA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuYmVnaW4oKTsKICAgICBPU1JFeGl0VmVjdG9yOjpJ
dGVyYXRvciBleGl0c0VuZCA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuZW5kKCk7CiAgICAgCiAg
ICAgd2hpbGUgKGV4aXRzSXRlciAhPSBleGl0c0VuZCkgewogICAgICAgICBjb25zdCBPU1JFeGl0
JiBleGl0ID0gKmV4aXRzSXRlcjsKLSAgICAgICAgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihleGl0
LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNvdmVyeUluZGV4KSk7
CisgICAgICAgIG9zckV4aXRDb21waWxlci5jb21waWxlRXhpdChleGl0LCBzcGVjdWxhdGl2ZS5z
cGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNvdmVyeUluZGV4KSk7CiAgICAgICAgICsrZXhp
dHNJdGVyOwogICAgIH0KIH0KQEAgLTI3NSw1MzEgKzI3OCw2IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QKICAgICBlbnRyeSA9IEpJVENvZGUobGlua0J1ZmZlci5m
aW5hbGl6ZUNvZGUoKSwgSklUQ29kZTo6REZHSklUKTsKIH0KIAotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0KLXZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhp
dCYgZXhpdCwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCi17Ci0gICAgLy8gMSkgUHJv
LWZvcm1hIHN0dWZmLgotICAgIGV4aXQubV9jaGVjay5saW5rKHRoaXMpOwotCi0jaWYgREZHX0VO
QUJMRShERUJVR19WRVJCT1NFKQotICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4aXQgZm9yIE5v
ZGUgQCVkICgiLCAoaW50KWV4aXQubV9ub2RlSW5kZXgpOwotICAgIGZvciAoQ29kZU9yaWdpbiBj
b2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW47IDsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJiYyMl
dSIsIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmICghY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZnByaW50ZihzdGRl
cnIsICIgLT4gJXAgIiwgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0
KCkpOwotICAgIH0KLSAgICBmcHJpbnRmKHN0ZGVyciwgIikgYXQgSklUIG9mZnNldCAweCV4ICAi
LCBkZWJ1Z09mZnNldCgpKTsKLSAgICBleGl0LmR1bXAoc3RkZXJyKTsKLSNlbmRpZgotI2lmIERG
R19FTkFCTEUoVkVSQk9TRV9TUEVDVUxBVElPTl9GQUlMVVJFKQotICAgIFNwZWN1bGF0aW9uRmFp
bHVyZURlYnVnSW5mbyogZGVidWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5m
bzsKLSAgICBkZWJ1Z0luZm8tPmNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwotICAgIGRlYnVnSW5m
by0+ZGVidWdPZmZzZXQgPSBkZWJ1Z09mZnNldCgpOwotICAgIAotICAgIGRlYnVnQ2FsbChkZWJ1
Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOwotI2VuZGlmCi0g
ICAgCi0jaWYgREZHX0VOQUJMRShKSVRfQlJFQUtfT05fU1BFQ1VMQVRJT05fRkFJTFVSRSkKLSAg
ICBicmVha3BvaW50KCk7Ci0jZW5kaWYKLSAgICAKLSNpZiBERkdfRU5BQkxFKFNVQ0NFU1NfU1RB
VFMpCi0gICAgc3RhdGljIFNhbXBsaW5nQ291bnRlciBjb3VudGVyKCJTcGVjdWxhdGlvbkZhaWx1
cmUiKTsKLSAgICBlbWl0Q291bnQoY291bnRlcik7Ci0jZW5kaWYKLSAgICAKLSAgICAvLyAyKSBQ
ZXJmb3JtIHNwZWN1bGF0aW9uIHJlY292ZXJ5LiBUaGlzIG9ubHkgY29tZXMgaW50byBwbGF5IHdo
ZW4gYW4gb3BlcmF0aW9uCi0gICAgLy8gICAgc3RhcnRzIG11dGF0aW5nIHN0YXRlIGJlZm9yZSB2
ZXJpZnlpbmcgdGhlIHNwZWN1bGF0aW9uIGl0IGhhcyBhbHJlYWR5IG1hZGUuCi0gICAgCi0gICAg
R1BSUmVnIGFscmVhZHlCb3hlZCA9IEludmFsaWRHUFJSZWc7Ci0gICAgCi0gICAgaWYgKHJlY292
ZXJ5KSB7Ci0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5cGUoKSkgewotICAgICAgICBjYXNl
IFNwZWN1bGF0aXZlQWRkOgotICAgICAgICAgICAgc3ViMzIocmVjb3ZlcnktPnNyYygpLCByZWNv
dmVyeS0+ZGVzdCgpKTsKLSAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVjb3ZlcnktPmRlc3QoKSk7Ci0gICAgICAgICAgICBhbHJlYWR5Qm94ZWQgPSBy
ZWNvdmVyeS0+ZGVzdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBCb29sZWFuU3BlY3VsYXRpb25DaGVjazoKLSAgICAgICAgICAgIHhvclB0cihUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZWNvdmVyeS0+ZGVz
dCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIDMpIFJlZmlu
ZSBzb21lIHZhbHVlIHByb2ZpbGUsIGlmIGFwcHJvcHJpYXRlLgotICAgIAotICAgIGlmICghIWV4
aXQubV9qc1ZhbHVlU291cmNlICYmICEhZXhpdC5tX3ZhbHVlUHJvZmlsZSkgewotICAgICAgICBp
ZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaXNBZGRyZXNzKCkpIHsKLSAgICAgICAgICAgIC8vIFdl
IGNhbid0IGJlIHN1cmUgdGhhdCB3ZSBoYXZlIGEgc3BhcmUgcmVnaXN0ZXIuIFNvIHVzZSB0aGUg
dGFnVHlwZU51bWJlclJlZ2lzdGVyLAotICAgICAgICAgICAgLy8gc2luY2Ugd2Uga25vdyBob3cg
dG8gcmVzdG9yZSBpdC4KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhleGl0Lm1fanNWYWx1
ZVNvdXJjZS5hc0FkZHJlc3MoKSksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0g
ICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGV4aXQu
bV92YWx1ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KFRhZ1R5cGVOdW1iZXIpKSwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdG9y
ZVB0cihleGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKSwgZXhpdC5tX3ZhbHVlUHJvZmlsZS0+c3Bl
Y0ZhaWxCdWNrZXQoMCkpOwotICAgIH0KLQotICAgIC8vIDQpIEZpZ3VyZSBvdXQgaG93IG1hbnkg
c2NyYXRjaCBzbG90cyB3ZSdsbCBuZWVkLiBXZSBuZWVkIG9uZSBmb3IgZXZlcnkgR1BSL0ZQUgot
ICAgIC8vICAgIHdob3NlIGRlc3RpbmF0aW9uIGlzIG5vdyBvY2N1cGllZCBieSBhIERGRyB2aXJ0
dWFsIHJlZ2lzdGVyLCBhbmQgd2UgbmVlZAotICAgIC8vICAgIG9uZSBmb3IgZXZlcnkgZGlzcGxh
Y2VkIHZpcnR1YWwgcmVnaXN0ZXIgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbgotICAgIC8vICAgIEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzIG9mIHRoZW0uIEFsc28gc2VlIGlmIHRoZXJlIGFyZSBh
bnkgY29uc3RhbnRzLAotICAgIC8vICAgIGFueSB1bmRlZmluZWQgc2xvdHMsIGFueSBGUFIgc2xv
dHMsIGFuZCBhbnkgdW5ib3hlZCBpbnRzLgotICAgICAgICAgICAgCi0gICAgVmVjdG9yPGJvb2w+
IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyhleGl0Lm1fdmFyaWFibGVzLnNpemUoKSk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycy5zaXplKCk7
ICsraSkKLSAgICAgICAgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2ldID0gZmFsc2U7Ci0KLSAg
ICB1bnNpZ25lZCBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyA9IDA7Ci0gICAgdW5z
aWduZWQgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzID0gMDsKLSAgICAKLSAgICAv
LyBCb29sZWFucyBmb3IgZmFzdCBjaGVja3MuIFdlIGV4cGVjdCB0aGF0IG1vc3QgT1NSIGV4aXRz
IGRvIG5vdCBoYXZlIHRvIHJlYm94Ci0gICAgLy8gSW50MzJzLCBoYXZlIG5vIEZQUnMsIGFuZCBo
YXZlIG5vIGNvbnN0YW50cy4gSWYgdGhlcmUgYXJlIGNvbnN0YW50cywgd2UKLSAgICAvLyBleHBl
Y3QgbW9zdCBvZiB0aGVtIHRvIGJlIGpzVW5kZWZpbmVkKCk7IGlmIHRoYXQncyB0cnVlIHRoZW4g
d2UgaGFuZGxlIHRoYXQKLSAgICAvLyBzcGVjaWFsbHkgdG8gbWluaW1pemUgY29kZSBzaXplIGFu
ZCBleGVjdXRpb24gdGltZS4KLSAgICBib29sIGhhdmVVbmJveGVkSW50MzJzID0gZmFsc2U7Ci0g
ICAgYm9vbCBoYXZlRlBScyA9IGZhbHNlOwotICAgIGJvb2wgaGF2ZUNvbnN0YW50cyA9IGZhbHNl
OwotICAgIGJvb2wgaGF2ZVVuZGVmaW5lZCA9IGZhbHNlOwotICAgIAotICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0g
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5
KGluZGV4KTsKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAg
ICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIGNhc2UgRG91Ymxl
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3Rl
ckZpbGU6Ci0gICAgICAgICAgICBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMrKzsK
LSAgICAgICAgICAgIEFTU0VSVCgoaW50KXJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpID49IDAp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTZWUgaWYgd2UgbWlnaHQgbGlrZSB0byBz
dG9yZSB0byB0aGlzIHZpcnR1YWwgcmVnaXN0ZXIgYmVmb3JlIGRvaW5nCi0gICAgICAgICAgICAv
LyB2aXJ0dWFsIHJlZ2lzdGVyIHNodWZmbGluZy4gSWYgc28sIHdlIHNheSB0aGF0IHRoZSB2aXJ0
dWFsIHJlZ2lzdGVyCi0gICAgICAgICAgICAvLyBpcyBwb2lzb25lZDogaXQgY2Fubm90IGJlIHN0
b3JlZCB0byB1bnRpbCBhZnRlciBkaXNwbGFjZWQgdmlydHVhbAotICAgICAgICAgICAgLy8gcmVn
aXN0ZXJzIGFyZSBoYW5kbGVkLiBXZSB0cmFjayBwb2lzb25lZCB2aXJ0dWFsIHJlZ2lzdGVyIGNh
cmVmdWxseQotICAgICAgICAgICAgLy8gdG8gZW5zdXJlIHRoaXMgaGFwcGVucyBlZmZpY2llbnRs
eS4gTm90ZSB0aGF0IHdlIGV4cGVjdCB0aGlzIGNhc2UKLSAgICAgICAgICAgIC8vIHRvIGJlIHJh
cmUsIHNvIHRoZSBoYW5kbGluZyBvZiBpdCBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlcyBpbgot
ICAgICAgICAgICAgLy8gd2hpY2ggaXQgZG9lcyBub3QgaGFwcGVuLgotICAgICAgICAgICAgaWYg
KHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpIDwgKGludClleGl0Lm1fdmFyaWFibGVzLnNpemUo
KSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoZXhpdC5tX3ZhcmlhYmxlc1tyZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKV0udGVjaG5pcXVlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIElu
R1BSOgotICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1
YWxSZWdpc3RlcnNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbcmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCldID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mUG9pc29uZWRW
aXJ0dWFsUmVnaXN0ZXJzKys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKLSAg
ICAgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRJbnQzMjoKLSAgICAgICAg
ICAgIGhhdmVVbmJveGVkSW50MzJzID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAgICBoYXZlRlBScyA9IHRydWU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENvbnN0YW50
OgotICAgICAgICAgICAgaGF2ZUNvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAocmVj
b3ZlcnkuY29uc3RhbnQoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIGhhdmVVbmRl
ZmluZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotI2lm
IERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIik7Ci0g
ICAgaWYgKG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKQotICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIlBvaXNvbmVkPSV1ICIsIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJz
KTsKLSAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKQotICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkRpc3BsYWNlZD0ldSAiLCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxS
ZWdpc3RlcnMpOwotICAgIGlmIChoYXZlVW5ib3hlZEludDMycykKLSAgICAgICAgZnByaW50Zihz
dGRlcnIsICJVbmJveGVkSW50MzIgIik7Ci0gICAgaWYgKGhhdmVGUFJzKQotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkZQUiAiKTsKLSAgICBpZiAoaGF2ZUNvbnN0YW50cykKLSAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJDb25zdGFudHMgIik7Ci0gICAgaWYgKGhhdmVVbmRlZmluZWQpCi0gICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiVW5kZWZpbmVkICIpOwotICAgIGZwcmludGYoc3RkZXJyLCAi
ICIpOwotI2VuZGlmCi0gICAgCi0gICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2hCdWZmZXIgPSBz
dGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGdsb2JhbERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZv
clNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJl
Z2lzdGVycyArIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMgPyAwIDogbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJz
KSkpKTsKLQotICAgIC8vIEZyb20gaGVyZSBvbiwgdGhlIGNvZGUgYXNzdW1lcyB0aGF0IGl0IGlz
IHByb2ZpdGFibGUgdG8gbWF4aW1pemUgdGhlIGRpc3RhbmNlCi0gICAgLy8gYmV0d2VlbiB3aGVu
IHNvbWV0aGluZyBpcyBjb21wdXRlZCBhbmQgd2hlbiBpdCBpcyBzdG9yZWQuCi0gICAgCi0gICAg
Ly8gNSkgUGVyZm9ybSBhbGwgcmVib3hpbmcgb2YgaW50ZWdlcnMuCi0gICAgCi0gICAgaWYgKGhh
dmVVbmJveGVkSW50MzJzKSB7Ci0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBl
eGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgICAgICBjYXNl
IFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS5ncHIoKSAh
PSBhbHJlYWR5Qm94ZWQpCi0gICAgICAgICAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnkuZ3ByKCkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZp
bGVBc1VuYm94ZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBzdG9yZTMyKEltbTMyKHN0YXRpY19j
YXN0PHVpbnQzMl90PihUYWdUeXBlTnVtYmVyID4+IDMyKSksIHRhZ0ZvcihzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgLy8gNikgRHVtcCBhbGwgbm9uLXBvaXNvbmVkIEdQUnMuIEZvciBwb2lzb25lZCBH
UFJzLCBzYXZlIHRoZW0gaW50byB0aGUgc2NyYXRjaCBzdG9yYWdlLgotICAgIC8vICAgIE5vdGUg
dGhhdCBHUFJzIGRvIG5vdCBoYXZlIGEgZmFzdCBjaGFuZ2UgKGxpa2UgaGF2ZUZQUnMpIGJlY2F1
c2Ugd2UgZXhwZWN0IHRoYXQKLSAgICAvLyAgICBtb3N0IE9TUiBmYWlsdXJlIHBvaW50cyB3aWxs
IGhhdmUgYXQgbGVhc3Qgb25lIEdQUiB0aGF0IG5lZWRzIHRvIGJlIGR1bXBlZC4KLSAgICAKLSAg
ICB1bnNpZ25lZCBzY3JhdGNoSW5kZXggPSAwOwotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5k
ZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAg
ICAgICAgaW50IG9wZXJhbmQgPSBleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7Ci0gICAgICAg
IHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2FzZSBJbkdQUjoKLSAg
ICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKLSAgICAgICAgICAgIGlmIChleGl0LmlzVmFy
aWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9y
SW5kZXgoaW5kZXgpXSkKLSAgICAgICAgICAgICAgICBzdG9yZVB0cihyZWNvdmVyeS5ncHIoKSwg
c2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBzdG9yZVB0cihyZWNvdmVyeS5ncHIoKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJl
Z2lzdGVyKW9wZXJhbmQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gQXQgdGhp
cyBwb2ludCBhbGwgR1BScyBhcmUgYXZhaWxhYmxlIGZvciBzY3JhdGNoIHVzZS4KLSAgICAKLSAg
ICBpZiAoaGF2ZUZQUnMpIHsKLSAgICAgICAgLy8gNykgQm94IGFsbCBkb3VibGVzIChyZWxpZXMg
b24gdGhlcmUgYmVpbmcgbW9yZSBHUFJzIHRoYW4gRlBScykKLSAgICAgICAgCi0gICAgICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2lu
ZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVl
KCkgIT0gSW5GUFIpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBGUFJS
ZWcgZnByID0gcmVjb3ZlcnkuZnByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5m
bzo6dG9SZWdpc3RlcihGUFJJbmZvOjp0b0luZGV4KGZwcikpOwotICAgICAgICAgICAgYm94RG91
YmxlKGZwciwgZ3ByKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gOCkgRHVtcCBh
bGwgZG91YmxlcyBpbnRvIHRoZSByZWdpc3RlciBmaWxlLCBvciB0byB0aGUgc2NyYXRjaCBzdG9y
YWdlIGlmCi0gICAgICAgIC8vICAgIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIHJlZ2lzdGVyIGlz
IHBvaXNvbmVkLgotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8
IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAg
ICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lz
dGVyKEZQUkluZm86OnRvSW5kZXgocmVjb3ZlcnkuZnByKCkpKTsKLSAgICAgICAgICAgIGlmIChl
eGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZh
cmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkKLSAgICAgICAgICAgICAgICBzdG9yZVB0cihncHIsIHNj
cmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgc3RvcmVQdHIoZ3ByLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5v
cGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgQVNT
RVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyk7Ci0g
ICAgCi0gICAgLy8gOSkgUmVzaHVmZmxlIGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVycy4gT3B0
aW1pemUgZm9yIHRoZSBjYXNlIHRoYXQKLSAgICAvLyAgICB0aGUgbnVtYmVyIG9mIGRpc3BsYWNl
ZCB2aXJ0dWFsIHJlZ2lzdGVycyBpcyBub3QgbW9yZSB0aGFuIHRoZSBudW1iZXIKLSAgICAvLyAg
ICBvZiBhdmFpbGFibGUgcGh5c2ljYWwgcmVnaXN0ZXJzLgotICAgIAotICAgIGlmIChudW1iZXJP
ZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpIHsKLSAgICAgICAgaWYgKG51bWJlck9mRGlzcGxh
Y2VkVmlydHVhbFJlZ2lzdGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycykgewotICAg
ICAgICAgICAgLy8gU28gZmFyIHRoaXMgYXBwZWFycyB0byBiZSB0aGUgY2FzZSB0aGF0IHRyaWdn
ZXJzIGFsbCB0aGUgdGltZSwgYnV0Ci0gICAgICAgICAgICAvLyB0aGF0IGlzIGZhciBmcm9tIGd1
YXJhbnRlZWQuCi0gICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgZGlzcGxhY2VtZW50SW5k
ZXggPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVt
YmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBWYWx1
ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAg
ICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICAgICAgICAg
IGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVn
aXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKykpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNl
ZEluUmVnaXN0ZXJGaWxlOiB7Ci0gICAgICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJ
bmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspOwotICAgICAgICAgICAgICAgICAg
ICBsb2FkMzIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIGdwcik7Ci0g
ICAgICAgICAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
Z3ByKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlOiB7Ci0gICAgICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZv
Ojp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspOwotICAgICAgICAgICAgICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBncHIpOwotICAg
ICAgICAgICAgICAgICAgICBzdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBn
cHIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgICAgICBkaXNwbGFjZW1lbnRJbmRleCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkg
ewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52
YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmls
ZToKLSAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAg
ICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJ
bmRleCsrKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4
KGluZGV4KSkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgc2h1ZmZsaW5nIGFsZ29yaXRo
bSB0aGF0IHdlIHVzZQotICAgICAgICAgICAgLy8gZm9yIHNwZWN1bGF0aXZlLT5ub24tc3BlY3Vs
YXRpdmUganVtcHMsIGlmIHdlIGV2ZXIgZGlzY292ZXIgdGhhdAotICAgICAgICAgICAgLy8gc29t
ZSBob3QgY29kZSB3aXRoIGxvdHMgb2YgbGl2ZSB2YWx1ZXMgdGhhdCBnZXQgZGlzcGxhY2VkIGFu
ZAotICAgICAgICAgICAgLy8gc3BpbGxlZCByZWFsbHkgZW5qb3lzIGZyZXF1ZW50bHkgZmFpbGlu
ZyBzcGVjdWxhdGlvbi4KLSAgICAgICAgCi0gICAgICAgICAgICAvLyBGb3Igbm93IHRoaXMgY29k
ZSBpcyBlbmdpbmVlcmVkIHRvIGJlIGNvcnJlY3QgYnV0IHByb2JhYmx5IG5vdAotICAgICAgICAg
ICAgLy8gc3VwZXIuIEluIHBhcnRpY3VsYXIsIGl0IGNvcnJlY3RseSBoYW5kbGVzIGNhc2VzIHdo
ZXJlIGZvciBleGFtcGxlCi0gICAgICAgICAgICAvLyB0aGUgZGlzcGxhY2VtZW50cyBhcmUgYSBw
ZXJtdXRhdGlvbiBvZiB0aGUgZGVzdGluYXRpb24gdmFsdWVzLCBsaWtlCi0gICAgICAgICAgICAv
LwotICAgICAgICAgICAgLy8gMSAtPiAyCi0gICAgICAgICAgICAvLyAyIC0+IDEKLSAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAvLyBJdCBhY2NvbXBsaXNoZXMgdGhpcyBieSBzaW1wbHkgbGlm
dGluZyBhbGwgb2YgdGhlIHZpcnR1YWwgcmVnaXN0ZXJzCi0gICAgICAgICAgICAvLyBmcm9tIHRo
ZWlyIG9sZCAoREZHIEpJVCkgbG9jYXRpb25zIGFuZCBkcm9wcGluZyB0aGVtIGluIGEgc2NyYXRj
aAotICAgICAgICAgICAgLy8gbG9jYXRpb24gaW4gbWVtb3J5LCBhbmQgdGhlbiB0cmFuc2ZlcnJp
bmcgZnJvbSB0aGF0IHNjcmF0Y2ggbG9jYXRpb24KLSAgICAgICAgICAgIC8vIHRvIHRoZWlyIG5l
dyAob2xkIEpJVCkgbG9jYXRpb25zLgotICAgICAgICAKLSAgICAgICAgICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVl
UmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRj
aCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNl
ZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
cmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoQnVmZmVyICsgc2NyYXRj
aEluZGV4KyspOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOiB7
Ci0gICAgICAgICAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBvclB0cihH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAg
ICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3Jh
dGNoSW5kZXgrKyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBEb3VibGVEaXNw
bGFjZWRJblJlZ2lzdGVyRmlsZTogewotICAgICAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJl
c3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQ
UkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVn
VDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgIHNjcmF0Y2hJbmRl
eCA9IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzOwotICAgICAgICAgICAgZm9yIChp
bnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgp
IHsKLSAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50
ZWNobmlxdWUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZp
bGU6Ci0gICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgot
ICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAg
ICAgICAgICAgICAgICAgIGxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJl
Z1QwLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5k
ZXgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgICAgQVNT
RVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyArIG51
bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgLy8gMTApIER1bXAgYWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXJzLgotICAgIAot
ICAgIHNjcmF0Y2hJbmRleCA9IDA7Ci0gICAgaWYgKG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVn
aXN0ZXJzKSB7Ci0gICAgICAgIGZvciAoaW50IHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxS
ZWdpc3RlciA8IChpbnQpZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVy
KSB7Ci0gICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1t2aXJ0dWFsUmVn
aXN0ZXJdKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQubV92YXJpYWJsZXNbdmly
dHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkp
IHsKLSAgICAgICAgICAgIGNhc2UgSW5HUFI6Ci0gICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQz
MkluR1BSOgotICAgICAgICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAgICAgICBsb2FkUHRy
KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKywgR1BSSW5mbzo6cmVnVDApOwotICAgICAg
ICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpdmlydHVhbFJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIEFTU0VSVChzY3JhdGNoSW5kZXgg
PT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOwotICAgIAotICAgIC8vIDExKSBE
dW1wIGFsbCBjb25zdGFudHMuIE9wdGltaXplIGZvciBVbmRlZmluZWQsIHNpbmNlIHRoYXQncyBh
IGNvbnN0YW50IHdlIHNlZQotICAgIC8vICAgICBvZnRlbi4KLQotICAgIGlmIChoYXZlQ29uc3Rh
bnRzKSB7Ci0gICAgICAgIGlmIChoYXZlVW5kZWZpbmVkKQotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1Qw
KTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51
bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAg
ICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ29uc3RhbnQpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQoKS5pc1VuZGVmaW5l
ZCgpKQotICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVl
OjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQoKSkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgLy8gMTIpIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUgY291bnRlci4gU2luY2Ug
d2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93Ci0gICAgLy8gICAgIHRoYXQgYWxsIG5ldyBjYWxs
cyBpbnRvIHRoaXMgY29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQot
ICAgIC8vICAgICBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0aGF0IHBlcmZvcm1l
ZCBPU1IgZXhpdCBhbmQgY2FsbCBmcmFtZXMKLSAgICAvLyAgICAgdGhhdCB3ZXJlIHN0aWxsIGV4
ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVyIGNhbGwgZnJhbWUncwot
ICAgIC8vICAgICBPU1IgZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5n
IGlzIHRydWU6Ci0gICAgLy8KLSAgICAvLyAgICAgKGEpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9T
UiBleGl0IGdldHMgYSBjaGFuY2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQKLSAgICAvLyAgICAgICAg
IGNvZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0aW1pemVkIGNvZGUgaXMgZmFzdGVyLiBCdXQgd2Ug
ZG9uJ3QKLSAgICAvLyAgICAgICAgIHdhbnQgdG8gZG8gc3VjaCByZWVudGVyeSB0b28gYWdncmVz
c2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KLSAgICAvLwotICAgIC8vICAgICAoYikgSWYgdGhlcmUg
aXMgY29kZSBvbiB0aGUgY2FsbCBzdGFjayB0aGF0IGlzIHN0aWxsIHJ1bm5pbmcgdGhlIG9sZAot
ICAgIC8vICAgICAgICAgSklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9TUidkLCB0aGVuIGl0IHNo
b3VsZCBnZXQgYSBjaGFuY2UgdG8KLSAgICAvLyAgICAgICAgIHBlcmZvcm0gT1NSIGVudHJ5IGRl
c3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCi0gICAgLy8KLSAgICAvLyAgICAgKGMp
IENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IHNob3VsZCBub3QgaW1tZWRpYXRlbHkgcmV0
cnkgT1NSCi0gICAgLy8gICAgICAgICBlbnRyeSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJl
IGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCi0gICAgLy8gICAgICAgICBwYXJ0aWN1bGFybHkgZXhw
ZW5zaXZlLgotICAgIC8vCi0gICAgLy8gICAgIChkKSBGcmVxdWVudCBPU1IgZmFpbHVyZXMsIGV2
ZW4gdGhvc2UgdGhhdCBkbyBub3QgcmVzdWx0IGluIHRoZSBjb2RlCi0gICAgLy8gICAgICAgICBy
dW5uaW5nIGluIGEgaG90IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJp
Z2dlcmVkLgotICAgIC8vCi0gICAgLy8gICAgIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBz
ZXQgdGhlIGV4ZWN1dGUgY291bnRlciB0bwotICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyV2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgotICAg
IC8vICAgICAoYSkgYW5kIChiKSwgc2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3VsZCBkZWxh
eSB0aGUgb3Bwb3J0dW5pdHkgZm9yCi0gICAgLy8gICAgIGV2ZXJ5IGNhbGwgZnJhbWUgdG8gcGVy
Zm9ybSBPU1IgZW50cnkuIEVzc2VudGlhbGx5LCBpZiBPU1IgZXhpdCBoYXBwZW5zCi0gICAgLy8g
ICAgIGZyZXF1ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBj
b3VudGVyIHdpbGwgbmV2ZXIKLSAgICAvLyAgICAgYmVjb21lIG5vbi1uZWdhdGl2ZSBhbmQgT1NS
IGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkKLSAgICAvLyAgICAgd2ls
bCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhlIG9sZCBKSVQsIHdoaWNoIGRv
ZXMgYSBwcmV0dHkKLSAgICAvLyAgICAgZ29vZCBqb2Igb2YgZW5zdXJpbmcgKGEpIGFuZCAoYiku
IEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJlIG9mIChkKSwKLSAgICAvLyAgICAgc2luY2UgZWFj
aCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIuCi0g
ICAgLy8gICAgIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBvZiBzcGVjdWxhdGlvbiBm
YWlsdXJlcyBpcyBzaWduaWZpY2FudGx5Ci0gICAgLy8gICAgIGxhcmdlciB0aGFuIHRoZSBudW1i
ZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJhdGUpLCBhbmQgaWYKLSAgICAv
LyAgICAgdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBmYWlsdXJlcy4g
SWYgc28sIHdlIHNldCB0aGUKLSAgICAvLyAgICAgY291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ug
c2V0IHRoZSBjb3VudGVyIHRvCi0gICAgLy8gICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0
ZXJXYXJtVXAoKS4KLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCkpLCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgCi0gICAgbG9hZDMyKEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAs
IENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpLCBHUFJJbmZvOjpy
ZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZTcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAg
YWRkMzIoSW1tMzIoMSksIEdQUkluZm86OnJlZ1QyKTsKLSAgICBhZGQzMihJbW0zMigtMSksIEdQ
UkluZm86OnJlZ1QxKTsKLSAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QyLCBBZGRyZXNzKEdQUklu
Zm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKSk7
Ci0gICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSkpOwotICAgIAotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSksIEdQUkluZm86
OnJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGZld0ZhaWxzID0gYnJhbmNoMzIoQmVsb3dPckVxdWFs
LCBHUFJJbmZvOjpyZWdUMiwgSW1tMzIoY29kZUJsb2NrKCktPmxhcmdlRmFpbENvdW50VGhyZXNo
b2xkKCkpKTsKLSAgICBtdWwzMihJbW0zMihIZXVyaXN0aWNzOjpkZXNpcmVkU3BlY3VsYXRpdmVT
dWNjZXNzRmFpbFJhdGlvKSwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJlZ1QyKTsKLSAgICAK
LSAgICBKdW1wIGxvd0ZhaWxSYXRlID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBHUFJJbmZvOjpy
ZWdUMiwgR1BSSW5mbzo6cmVnVDEpOwotICAgIAotICAgIC8vIFJlb3B0aW1pemUgYXMgc29vbiBh
cyBwb3NzaWJsZS4KLSAgICBzdG9yZTMyKEltbTMyKEhldXJpc3RpY3M6OmV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24pLCBBZGRyZXNzKEdQUkluZm86OnJlZ1Qw
LCBDb2RlQmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNvdW50ZXIoKSkpOwotICAgIEp1bXAgZG9uZUFk
anVzdGluZyA9IGp1bXAoKTsKLSAgICAKLSAgICBmZXdGYWlscy5saW5rKHRoaXMpOwotICAgIGxv
d0ZhaWxSYXRlLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgc3RvcmUzMihJbW0zMihjb2RlQmxvY2so
KS0+YWx0ZXJuYXRpdmUoKS0+Y291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAo
KSksIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291
bnRlcigpKSk7Ci0gICAgCi0gICAgZG9uZUFkanVzdGluZy5saW5rKHRoaXMpOwotICAgIAotICAg
IC8vIDEzKSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGlu
dG8gcmVnVDAuCi0gICAgCi0gICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpKQotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoKFZp
cnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1
bHRSZWdpc3Rlcik7Ci0gICAgCi0gICAgLy8gMTQpIEZpeCBjYWxsIGZyYW1lKHMpLgotICAgIAot
ICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJ
VENvZGU6OkJhc2VsaW5lSklUKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9j
aygpLT5hbHRlcm5hdGl2ZSgpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKVJlZ2lzdGVy
RmlsZTo6Q29kZUJsb2NrKSk7Ci0gICAgCi0gICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4g
PSBleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmln
aW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7Ci0gICAgICAgIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7
Ci0gICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9j
a0Zvcihjb2RlT3JpZ2luKTsKLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKTsK
LSAgICAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFw
ID0gZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIpOwotICAgICAg
ICB1bnNpZ25lZCByZXR1cm5CeXRlY29kZUluZGV4ID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIu
Ynl0ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7Ci0gICAgICAgIEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2Rl
SW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgcmV0
dXJuQnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQobWFwcGluZyk7Ci0g
ICAgICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNvZGVJ
bmRleCk7Ci0gICAgICAgIAotICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmdldEpJVENvZGUoKS5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KG1h
cHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOwotCi0gICAgICAgIEdQUlJlZyBjYWxsZXJGcmFt
ZUdQUjsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFt
ZSkgewotICAgICAgICAgICAgYWRkUHRyKEltbTMyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAgIGNh
bGxlckZyYW1lR1BSID0gR1BSSW5mbzo6cmVnVDM7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcjsKLSAgICAgICAg
Ci0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2spLCBhZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBS
ZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpKTsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS0+c2NvcGUoKSksIGFkZHJlc3NGb3IoKFZpcnR1YWxS
ZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6U2Nv
cGVDaGFpbikpKTsKLSAgICAgICAgc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIGFkZHJlc3NGb3Io
KFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVy
RmlsZTo6Q2FsbGVyRnJhbWUpKSk7Ci0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoanVt
cFRhcmdldCksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpKSk7Ci0gICAgICAgIHN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSkpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSkpOwot
ICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlLmdl
dCgpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKSk7Ci0gICAgfQotICAgIAotICAgIGlmIChl
eGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIGFkZFB0cihJbW0zMihl
eGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAKLSAgICAv
LyAxNSkgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2RlLgotICAg
IAotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zv
cihleGl0Lm1fY29kZU9yaWdpbik7Ci0gICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNl
dD4mIGRlY29kZWRDb2RlTWFwID0gZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2sp
OwotICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNl
YXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29k
ZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAg
Ci0gICAgQVNTRVJUKG1hcHBpbmcpOwotICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5k
ZXggPT0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgCi0gICAgdm9pZCog
anVtcFRhcmdldCA9IGJhc2VsaW5lQ29kZUJsb2NrLT5nZXRKSVRDb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3NBdE9mZnNldChtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKLSAgICAKLSAgICBB
U1NFUlQoR1BSSW5mbzo6cmVnVDEgIT0gR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOwot
ICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgR1BSSW5mbzo6cmVnVDEp
OwotICAgIGp1bXAoR1BSSW5mbzo6cmVnVDEpOwotCi0jaWYgREZHX0VOQUJMRShERUJVR19WRVJC
T1NFKQotICAgIGZwcmludGYoc3RkZXJyLCAiLT4gJXBcbiIsIGp1bXBUYXJnZXQpOwotI2VuZGlm
Ci19Ci0KLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82
NC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdPU1JFeGl0Q29tcGlsZXIuaCIKKworI2lmIEVOQUJMRShERkdfSklUKSAmJiBVU0UoSlNW
QUxVRTMyXzY0KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgT1NS
RXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVjdWxhdGlv
blJlY292ZXJ5KiByZWNvdmVyeSkKK3sKKyAgICAvLyAxKSBQcm8tZm9ybWEgc3R1ZmYuCisgICAg
ZXhpdC5tX2NoZWNrLmxpbmsoJm1faml0KTsKKworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9T
RSkKKyAgICBmcHJpbnRmKHN0ZGVyciwgIk9TUiBleGl0IGZvciBOb2RlIEAlZCAoIiwgKGludCll
eGl0Lm1fbm9kZUluZGV4KTsKKyAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQu
bV9jb2RlT3JpZ2luOyA7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
Y2FsbGVyKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmMjJXUiLCBjb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0+ICVwICIsIGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKTsKKyAgICB9CisgICAg
ZnByaW50ZihzdGRlcnIsICIpIGF0IEpJVCBvZmZzZXQgMHgleCAgIiwgbV9qaXQuZGVidWdPZmZz
ZXQoKSk7CisgICAgZXhpdC5kdW1wKHN0ZGVycik7CisjZW5kaWYKKyNpZiBERkdfRU5BQkxFKFZF
UkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSkKKyAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0lu
Zm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CisgICAgZGVi
dWdJbmZvLT5jb2RlQmxvY2sgPSBtX2ppdC5jb2RlQmxvY2soKTsKKyAgICBkZWJ1Z0luZm8tPmRl
YnVnT2Zmc2V0ID0gbV9qaXQuZGVidWdPZmZzZXQoKTsKKyAgICAKKyAgICBtX2ppdC5kZWJ1Z0Nh
bGwoZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKKyNl
bmRpZgorICAgIAorI2lmIERGR19FTkFCTEUoSklUX0JSRUFLX09OX1NQRUNVTEFUSU9OX0ZBSUxV
UkUpCisgICAgbV9qaXQuYnJlYWtwb2ludCgpOworI2VuZGlmCisgICAgCisjaWYgREZHX0VOQUJM
RShTVUNDRVNTX1NUQVRTKQorICAgIHN0YXRpYyBTYW1wbGluZ0NvdW50ZXIgY291bnRlcigiU3Bl
Y3VsYXRpb25GYWlsdXJlIik7CisgICAgbV9qaXQuZW1pdENvdW50KGNvdW50ZXIpOworI2VuZGlm
CisKKyAgICAvLyAyKSBQZXJmb3JtIHNwZWN1bGF0aW9uIHJlY292ZXJ5LiBUaGlzIG9ubHkgY29t
ZXMgaW50byBwbGF5IHdoZW4gYW4gb3BlcmF0aW9uCisgICAgLy8gICAgc3RhcnRzIG11dGF0aW5n
IHN0YXRlIGJlZm9yZSB2ZXJpZnlpbmcgdGhlIHNwZWN1bGF0aW9uIGl0IGhhcyBhbHJlYWR5IG1h
ZGUuCisgICAgCisgICAgaWYgKHJlY292ZXJ5KSB7CisgICAgICAgIHN3aXRjaCAocmVjb3Zlcnkt
PnR5cGUoKSkgeworICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgorICAgICAgICAgICAgbV9q
aXQuc3ViMzIocmVjb3ZlcnktPnNyYygpLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hl
Y2s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAzKSBSZWZpbmUg
c29tZSB2YWx1ZSBwcm9maWxlLCBpZiBhcHByb3ByaWF0ZS4KKyAgICAKKyAgICBpZiAoISFleGl0
Lm1fanNWYWx1ZVNvdXJjZSAmJiAhIWV4aXQubV92YWx1ZVByb2ZpbGUpIHsKKyAgICAgICAgaWYg
KGV4aXQubV9qc1ZhbHVlU291cmNlLmlzQWRkcmVzcygpKSB7CisgICAgICAgICAgICAvLyBTYXZl
IGEgcmVnaXN0ZXIgc28gd2UgY2FuIHVzZSBpdC4KKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgICAgICAgICBpZiAoc2NyYXRjaCA9PSBleGl0Lm1fanNW
YWx1ZVNvdXJjZS5iYXNlKCkpCisgICAgICAgICAgICAgICAgc2NyYXRjaCA9IEdQUkluZm86OnJl
Z1QxOworICAgICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2hCdWZmZXIgPSBzdGF0aWNf
Y2FzdDxFbmNvZGVkSlNWYWx1ZSo+KG1faml0Lmdsb2JhbERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZv
clNpemUoc2l6ZW9mKHVpbnQzMl90KSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzY3Jh
dGNoLCBzY3JhdGNoQnVmZmVyKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihleGl0Lm1fanNW
YWx1ZVNvdXJjZS5hc0FkZHJlc3MoT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNj
cmF0Y2gsICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGV4aXQubV92YWx1
ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnRhZyk7CisgICAgICAgICAgICBt
X2ppdC5sb2FkMzIoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNBZGRyZXNzKE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCBzY3JhdGNoKTsKKyAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaCwgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yKj4oZXhpdC5tX3ZhbHVlUHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQoMCkpLT5h
c0JpdHMucGF5bG9hZCk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoc2NyYXRjaEJ1ZmZlciwg
c2NyYXRjaCk7CisgICAgICAgIH0gZWxzZSBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaGFzS25v
d25UYWcoKSkgeworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6Oklt
bTMyKGV4aXQubV9qc1ZhbHVlU291cmNlLnRhZygpKSwgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yKj4oZXhpdC5tX3ZhbHVlUHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQoMCkpLT5h
c0JpdHMudGFnKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoZXhpdC5tX2pzVmFsdWVTb3Vy
Y2UucGF5bG9hZEdQUigpLCAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihl
eGl0Lm1fdmFsdWVQcm9maWxlLT5zcGVjRmFpbEJ1Y2tldCgwKSktPmFzQml0cy5wYXlsb2FkKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoZXhpdC5tX2pzVmFs
dWVTb3VyY2UudGFnR1BSKCksICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+
KGV4aXQubV92YWx1ZVByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KDApKS0+YXNCaXRzLnRhZyk7Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGV4aXQubV9qc1ZhbHVlU291cmNlLnBheWxvYWRHUFIo
KSwgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oZXhpdC5tX3ZhbHVlUHJv
ZmlsZS0+c3BlY0ZhaWxCdWNrZXQoMCkpLT5hc0JpdHMucGF5bG9hZCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgLy8gNCkgRmlndXJlIG91dCBob3cgbWFueSBzY3JhdGNoIHNsb3RzIHdl
J2xsIG5lZWQuIFdlIG5lZWQgb25lIGZvciBldmVyeSBHUFIvRlBSCisgICAgLy8gICAgd2hvc2Ug
ZGVzdGluYXRpb24gaXMgbm93IG9jY3VwaWVkIGJ5IGEgREZHIHZpcnR1YWwgcmVnaXN0ZXIsIGFu
ZCB3ZSBuZWVkCisgICAgLy8gICAgb25lIGZvciBldmVyeSBkaXNwbGFjZWQgdmlydHVhbCByZWdp
c3RlciBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuCisgICAgLy8gICAgR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnMgb2YgdGhlbS4gQWxzbyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25zdGFudHMsCisg
ICAgLy8gICAgYW55IHVuZGVmaW5lZCBzbG90cywgYW55IEZQUiBzbG90cywgYW5kIGFueSB1bmJv
eGVkIGludHMuCisgICAgICAgICAgICAKKyAgICBWZWN0b3I8Ym9vbD4gcG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzKGV4aXQubV92YXJpYWJsZXMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICBw
b2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbaV0gPSBmYWxzZTsKKworICAgIHVuc2lnbmVkIG51bWJl
ck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzID0gMDsKKyAgICB1bnNpZ25lZCBudW1iZXJPZkRp
c3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPSAwOworICAgIAorICAgIC8vIEJvb2xlYW5zIGZvciBm
YXN0IGNoZWNrcy4gV2UgZXhwZWN0IHRoYXQgbW9zdCBPU1IgZXhpdHMgZG8gbm90IGhhdmUgdG8g
cmVib3gKKyAgICAvLyBJbnQzMnMsIGhhdmUgbm8gRlBScywgYW5kIGhhdmUgbm8gY29uc3RhbnRz
LiBJZiB0aGVyZSBhcmUgY29uc3RhbnRzLCB3ZQorICAgIC8vIGV4cGVjdCBtb3N0IG9mIHRoZW0g
dG8gYmUganNVbmRlZmluZWQoKTsgaWYgdGhhdCdzIHRydWUgdGhlbiB3ZSBoYW5kbGUgdGhhdAor
ICAgIC8vIHNwZWNpYWxseSB0byBtaW5pbWl6ZSBjb2RlIHNpemUgYW5kIGV4ZWN1dGlvbiB0aW1l
LgorICAgIGJvb2wgaGF2ZVVuYm94ZWRJbnQzMkluUmVnaXN0ZXJGaWxlID0gZmFsc2U7CisgICAg
Ym9vbCBoYXZlVW5ib3hlZENlbGxJblJlZ2lzdGVyRmlsZSA9IGZhbHNlOworICAgIGJvb2wgaGF2
ZVVuYm94ZWRCb29sZWFuSW5SZWdpc3RlckZpbGUgPSBmYWxzZTsKKyAgICBib29sIGhhdmVGUFJz
ID0gZmFsc2U7CisgICAgYm9vbCBoYXZlQ29uc3RhbnRzID0gZmFsc2U7CisgICAgYm9vbCBoYXZl
VW5kZWZpbmVkID0gZmFsc2U7CisgICAgCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8
IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAg
ICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgIGNhc2UgRGlzcGxhY2Vk
SW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdp
c3RlcnMrKzsKKyAgICAgICAgICAgIEFTU0VSVCgoaW50KXJlY292ZXJ5LnZpcnR1YWxSZWdpc3Rl
cigpID49IDApOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTZWUgaWYgd2UgbWlnaHQg
bGlrZSB0byBzdG9yZSB0byB0aGlzIHZpcnR1YWwgcmVnaXN0ZXIgYmVmb3JlIGRvaW5nCisgICAg
ICAgICAgICAvLyB2aXJ0dWFsIHJlZ2lzdGVyIHNodWZmbGluZy4gSWYgc28sIHdlIHNheSB0aGF0
IHRoZSB2aXJ0dWFsIHJlZ2lzdGVyCisgICAgICAgICAgICAvLyBpcyBwb2lzb25lZDogaXQgY2Fu
bm90IGJlIHN0b3JlZCB0byB1bnRpbCBhZnRlciBkaXNwbGFjZWQgdmlydHVhbAorICAgICAgICAg
ICAgLy8gcmVnaXN0ZXJzIGFyZSBoYW5kbGVkLiBXZSB0cmFjayBwb2lzb25lZCB2aXJ0dWFsIHJl
Z2lzdGVyIGNhcmVmdWxseQorICAgICAgICAgICAgLy8gdG8gZW5zdXJlIHRoaXMgaGFwcGVucyBl
ZmZpY2llbnRseS4gTm90ZSB0aGF0IHdlIGV4cGVjdCB0aGlzIGNhc2UKKyAgICAgICAgICAgIC8v
IHRvIGJlIHJhcmUsIHNvIHRoZSBoYW5kbGluZyBvZiBpdCBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBj
YXNlcyBpbgorICAgICAgICAgICAgLy8gd2hpY2ggaXQgZG9lcyBub3QgaGFwcGVuLgorICAgICAg
ICAgICAgaWYgKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpIDwgKGludClleGl0Lm1fdmFyaWFi
bGVzLnNpemUoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZXhpdC5tX3ZhcmlhYmxlc1ty
ZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0udGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIEluR1BSOgorICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Cisg
ICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOgorICAgICAgICAgICAgICAg
IGNhc2UgSW5QYWlyOgorICAgICAgICAgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgICAgICAg
ICAgICAgIGlmICghcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW3JlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzW3JlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpXSA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycysrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkSW50MzI6CisgICAgICAgICAgICBoYXZl
VW5ib3hlZEludDMySW5SZWdpc3RlckZpbGUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRD
ZWxsOgorICAgICAgICAgICAgaGF2ZVVuYm94ZWRDZWxsSW5SZWdpc3RlckZpbGUgPSB0cnVlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBbHJlYWR5SW5S
ZWdpc3RlckZpbGVBc1VuYm94ZWRCb29sZWFuOgorICAgICAgICAgICAgaGF2ZVVuYm94ZWRCb29s
ZWFuSW5SZWdpc3RlckZpbGUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgIGhhdmVGUFJzID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ29uc3RhbnQ6Cisg
ICAgICAgICAgICBoYXZlQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVy
eS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgaGF2ZVVuZGVmaW5l
ZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgRW5j
b2RlZEpTVmFsdWUqIHNjcmF0Y2hCdWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+
KG1faml0Lmdsb2JhbERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSAqIChudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyArICgobnVtYmVyT2ZE
aXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzICogMikgPD0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMgPyAwIDogbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSkpKTsKKworICAgIC8v
IEZyb20gaGVyZSBvbiwgdGhlIGNvZGUgYXNzdW1lcyB0aGF0IGl0IGlzIHByb2ZpdGFibGUgdG8g
bWF4aW1pemUgdGhlIGRpc3RhbmNlCisgICAgLy8gYmV0d2VlbiB3aGVuIHNvbWV0aGluZyBpcyBj
b21wdXRlZCBhbmQgd2hlbiBpdCBpcyBzdG9yZWQuCisgICAgCisgICAgLy8gNSkgUGVyZm9ybSBh
bGwgcmVib3hpbmcgb2YgaW50ZWdlcnMgYW5kIGNlbGxzLCBleGNlcHQgZm9yIHRob3NlIGluIHJl
Z2lzdGVycy4KKworICAgIGlmIChoYXZlVW5ib3hlZEludDMySW5SZWdpc3RlckZpbGUgfHwgaGF2
ZVVuYm94ZWRDZWxsSW5SZWdpc3RlckZpbGUgfHwgaGF2ZVVuYm94ZWRCb29sZWFuSW5SZWdpc3Rl
ckZpbGUpIHsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVy
T2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zl
cnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIHN3
aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQWxyZWFkeUlu
UmVnaXN0ZXJGaWxlQXNVbmJveGVkSW50MzI6CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIEFzc2Vt
Ymx5SGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oZXhpdC5vcGVy
YW5kRm9ySW5kZXgoaW5kZXgpKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZENlbGw6CisgICAgICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJl
Z2lzdGVyPihleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVk
Qm9vbGVhbjoKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zv
cihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4
KSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIDYpIER1bXAgYWxsIG5vbi1wb2lzb25lZCBHUFJzLiBGb3IgcG9pc29uZWQgR1BScywg
c2F2ZSB0aGVtIGludG8gdGhlIHNjcmF0Y2ggc3RvcmFnZS4KKyAgICAvLyAgICBOb3RlIHRoYXQg
R1BScyBkbyBub3QgaGF2ZSBhIGZhc3QgY2hhbmdlIChsaWtlIGhhdmVGUFJzKSBiZWNhdXNlIHdl
IGV4cGVjdCB0aGF0CisgICAgLy8gICAgbW9zdCBPU1IgZmFpbHVyZSBwb2ludHMgd2lsbCBoYXZl
IGF0IGxlYXN0IG9uZSBHUFIgdGhhdCBuZWVkcyB0byBiZSBkdW1wZWQuCisgICAgCisgICAgdW5z
aWduZWQgc2NyYXRjaEluZGV4ID0gMDsKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwg
ZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1
ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAg
IGludCBvcGVyYW5kID0gZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBzd2l0
Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAg
IGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQ
UjoKKyAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmly
dHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkKKyAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKHJlY292ZXJ5LmdwcigpLCByZWludGVycHJldF9jYXN0PGNoYXIq
PihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICB1aW50MzJfdCB0YWcgPSBKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnOwor
ICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSA9PSBJbkdQUikKKyAgICAg
ICAgICAgICAgICAgICAgdGFnID0gSlNWYWx1ZTo6Q2VsbFRhZzsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSA9PSBVbmJveGVkSW50MzJJbkdQUikKKyAgICAg
ICAgICAgICAgICAgICAgdGFnID0gSlNWYWx1ZTo6SW50MzJUYWc7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICB0YWcgPSBKU1ZhbHVlOjpCb29sZWFuVGFnOworICAg
ICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
dGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7
CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihyZWNvdmVyeS5ncHIoKSwgQXNzZW1ibHlI
ZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5QYWlyOgorICAgICAgICAg
ICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJz
W2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CisgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMihyZWNvdmVyeS50YWdHUFIoKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRj
aEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocmVj
b3ZlcnkucGF5bG9hZEdQUigpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVy
ICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMucGF5bG9hZCkpOworICAgICAgICAgICAgICAgIHNjcmF0Y2hJbmRleCsrOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHJlY292ZXJ5
LnRhZ0dQUigpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJh
bmQpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHJlY292ZXJ5LnBheWxvYWRHUFIo
KSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBBdCB0aGlz
IHBvaW50IGFsbCBHUFJzIGFyZSBhdmFpbGFibGUgZm9yIHNjcmF0Y2ggdXNlLgorICAgIAorICAg
IGlmIChoYXZlRlBScykgeworICAgICAgICAvLyA3KSBCb3ggYWxsIGRvdWJsZXMgKHJlbGllcyBv
biB0aGVyZSBiZWluZyBtb3JlIEdQUnMgdGhhbiBGUFJzKQorICAgICAgICAvLyAgICBGb3IgSlNW
YWx1ZTMyXzY0LCBubyBuZWVkIHRvIGJveCBkb3VibGVzLgorICAgICAgICAKKyAgICAgICAgLy8g
OCkgRHVtcCBhbGwgZG91YmxlcyBpbnRvIHRoZSByZWdpc3RlciBmaWxlLCBvciB0byB0aGUgc2Ny
YXRjaCBzdG9yYWdlIGlmCisgICAgICAgIC8vICAgIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIHJl
Z2lzdGVyIGlzIHBvaXNvbmVkLgorICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAg
ICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGlu
ZGV4KTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUo
aW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgo
aW5kZXgpXSkKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShyZWNvdmVyeS5mcHIo
KSwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShyZWNvdmVyeS5mcHIoKSwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQVNTRVJUKHNjcmF0Y2hJbmRl
eCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyk7CisgICAgCisgICAgLy8gOSkg
UmVzaHVmZmxlIGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVycy4gT3B0aW1pemUgZm9yIHRoZSBj
YXNlIHRoYXQKKyAgICAvLyAgICB0aGUgbnVtYmVyIG9mIGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lz
dGVycyBpcyBub3QgbW9yZSB0aGFuIHRoZSBudW1iZXIKKyAgICAvLyAgICBvZiBhdmFpbGFibGUg
cGh5c2ljYWwgcmVnaXN0ZXJzLgorICAgIAorICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1
YWxSZWdpc3RlcnMpIHsKKyAgICAgICAgaWYgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lz
dGVycyAqIDIgPD0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIC8v
IFNvIGZhciB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlIGNhc2UgdGhhdCB0cmlnZ2VycyBhbGwgdGhl
IHRpbWUsIGJ1dAorICAgICAgICAgICAgLy8gdGhhdCBpcyBmYXIgZnJvbSBndWFyYW50ZWVkLgor
ICAgICAgICAKKyAgICAgICAgICAgIHVuc2lnbmVkIGRpc3BsYWNlbWVudEluZGV4ID0gMDsKKyAg
ICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zl
cmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYg
cmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlm
IChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEFz
c2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQ
UkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKykpOworICAgICAgICAgICAgICAg
IG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVn
aXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKykpOworICAg
ICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIGRpc3BsYWNlbWVudEluZGV4ID0gMDsK
KyAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVj
b3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAg
IGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBBc3NlbWJseUhlbHBl
cnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRl
eCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnRvUmVnaXN0ZXIo
ZGlzcGxhY2VtZW50SW5kZXgrKyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHRoZSBz
aHVmZmxpbmcgYWxnb3JpdGhtIHRoYXQgd2UgdXNlCisgICAgICAgICAgICAvLyBmb3Igc3BlY3Vs
YXRpdmUtPm5vbi1zcGVjdWxhdGl2ZSBqdW1wcywgaWYgd2UgZXZlciBkaXNjb3ZlciB0aGF0Cisg
ICAgICAgICAgICAvLyBzb21lIGhvdCBjb2RlIHdpdGggbG90cyBvZiBsaXZlIHZhbHVlcyB0aGF0
IGdldCBkaXNwbGFjZWQgYW5kCisgICAgICAgICAgICAvLyBzcGlsbGVkIHJlYWxseSBlbmpveXMg
ZnJlcXVlbnRseSBmYWlsaW5nIHNwZWN1bGF0aW9uLgorICAgICAgICAKKyAgICAgICAgICAgIC8v
IEZvciBub3cgdGhpcyBjb2RlIGlzIGVuZ2luZWVyZWQgdG8gYmUgY29ycmVjdCBidXQgcHJvYmFi
bHkgbm90CisgICAgICAgICAgICAvLyBzdXBlci4gSW4gcGFydGljdWxhciwgaXQgY29ycmVjdGx5
IGhhbmRsZXMgY2FzZXMgd2hlcmUgZm9yIGV4YW1wbGUKKyAgICAgICAgICAgIC8vIHRoZSBkaXNw
bGFjZW1lbnRzIGFyZSBhIHBlcm11dGF0aW9uIG9mIHRoZSBkZXN0aW5hdGlvbiB2YWx1ZXMsIGxp
a2UKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAxIC0+IDIKKyAgICAgICAgICAgIC8v
IDIgLT4gMQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEl0IGFjY29tcGxpc2hlcyB0
aGlzIGJ5IHNpbXBseSBsaWZ0aW5nIGFsbCBvZiB0aGUgdmlydHVhbCByZWdpc3RlcnMKKyAgICAg
ICAgICAgIC8vIGZyb20gdGhlaXIgb2xkIChERkcgSklUKSBsb2NhdGlvbnMgYW5kIGRyb3BwaW5n
IHRoZW0gaW4gYSBzY3JhdGNoCisgICAgICAgICAgICAvLyBsb2NhdGlvbiBpbiBtZW1vcnksIGFu
ZCB0aGVuIHRyYW5zZmVycmluZyBmcm9tIHRoYXQgc2NyYXRjaCBsb2NhdGlvbgorICAgICAgICAg
ICAgLy8gdG8gdGhlaXIgbmV3IChvbGQgSklUKSBsb2NhdGlvbnMuCisgICAgICAgIAorICAgICAg
ICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVz
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNv
dmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHJl
Y292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1i
bHlIZWxwZXJzOjpwYXlsb2FkRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6
OnRhZ0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QxKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCByZWludGVycHJldF9j
YXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOworICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoSW5k
ZXgrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBzY3JhdGNoSW5kZXgg
PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyczsKKyAgICAgICAgICAgIGZvciAoaW50
IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7
CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZh
bHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlx
dWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNo
QnVmZmVyICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMudGFnKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigo
VmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIEFzc2VtYmx5SGVscGVyczo6dGFn
Rm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAg
ICAgICAgICAgICAgc2NyYXRjaEluZGV4Kys7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAgICAgQVNTRVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJl
Z2lzdGVycyArIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyk7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgLy8gMTApIER1bXAgYWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0
ZXJzLgorICAgIAorICAgIHNjcmF0Y2hJbmRleCA9IDA7CisgICAgaWYgKG51bWJlck9mUG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7CisgICAgICAgIGZvciAoaW50IHZpcnR1YWxSZWdpc3RlciA9
IDA7IHZpcnR1YWxSZWdpc3RlciA8IChpbnQpZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmly
dHVhbFJlZ2lzdGVyKSB7CisgICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVy
c1t2aXJ0dWFsUmVnaXN0ZXJdKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQubV92
YXJpYWJsZXNbdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAgIHN3aXRjaCAocmVjb3Zlcnku
dGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICBjYXNl
IFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BS
OiB7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKykgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJz
OjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lzdGVyKSk7CisgICAgICAg
ICAgICAgICAgdWludDMyX3QgdGFnID0gSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZzsKKyAgICAgICAg
ICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gSW5HUFIpCisgICAgICAgICAgICAg
ICAgICAgIHRhZyA9IEpTVmFsdWU6OkNlbGxUYWc7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
cmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gVW5ib3hlZEludDMySW5HUFIpCisgICAgICAgICAgICAg
ICAgICAgIHRhZyA9IEpTVmFsdWU6OkludDMyVGFnOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgdGFnID0gSlNWYWx1ZTo6Qm9vbGVhblRhZzsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHRhZyksIEFz
c2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lzdGVyKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNh
c2UgSW5GUFI6CisgICAgICAgICAgICBjYXNlIEluUGFpcjoKKyAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJ
bmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpLCBHUFJJbmZv
OjpyZWdUMSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwg
QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lz
dGVyKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQXNz
ZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3Rlcil2aXJ0dWFsUmVnaXN0ZXIpKTsK
KyAgICAgICAgICAgICAgICBzY3JhdGNoSW5kZXgrKzsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKHNjcmF0
Y2hJbmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyk7CisgICAgCisgICAg
Ly8gMTEpIER1bXAgYWxsIGNvbnN0YW50cy4gT3B0aW1pemUgZm9yIFVuZGVmaW5lZCwgc2luY2Ug
dGhhdCdzIGEgY29uc3RhbnQgd2Ugc2VlCisgICAgLy8gICAgIG9mdGVuLgorCisgICAgaWYgKGhh
dmVDb25zdGFudHMpIHsKKyAgICAgICAgaWYgKGhhdmVVbmRlZmluZWQpIHsKKyAgICAgICAgICAg
IG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS5w
YXlsb2FkKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGpzVW5kZWZpbmVkKCkudGFnKCkpLCBHUFJJbmZvOjpy
ZWdUMSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsg
aW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAg
ICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRl
eCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ29uc3RhbnQpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3Rh
bnQoKS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJ
bmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
ZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihHUFJJbmZvOjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdp
c3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihyZWNvdmVyeS5jb25zdGFudCgpLnBheWxvYWQoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5
bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwor
ICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
MzIocmVjb3ZlcnkuY29uc3RhbnQoKS50YWcoKSksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gMTIpIEFkanVzdCB0aGUgb2xkIEpJ
VCdzIGV4ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93Cisg
ICAgLy8gICAgIHRoYXQgYWxsIG5ldyBjYWxscyBpbnRvIHRoaXMgY29kZSB3aWxsIGdvIHRvIHRo
ZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQorICAgIC8vICAgICBjb3VudGVyIG9ubHkgYWZmZWN0
cyBjYWxsIGZyYW1lcyB0aGF0IHBlcmZvcm1lZCBPU1IgZXhpdCBhbmQgY2FsbCBmcmFtZXMKKyAg
ICAvLyAgICAgdGhhdCB3ZXJlIHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0aGUgdGlt
ZSBvZiBhbm90aGVyIGNhbGwgZnJhbWUncworICAgIC8vICAgICBPU1IgZXhpdC4gV2Ugd2FudCB0
byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisgICAgLy8KKyAgICAvLyAgICAg
KGEpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IGdldHMgYSBjaGFuY2UgdG8gcmVlbnRl
ciBvcHRpbWl6ZWQKKyAgICAvLyAgICAgICAgIGNvZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0aW1p
emVkIGNvZGUgaXMgZmFzdGVyLiBCdXQgd2UgZG9uJ3QKKyAgICAvLyAgICAgICAgIHdhbnQgdG8g
ZG8gc3VjaCByZWVudGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KKyAgICAv
LworICAgIC8vICAgICAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUgY2FsbCBzdGFjayB0aGF0
IGlzIHN0aWxsIHJ1bm5pbmcgdGhlIG9sZAorICAgIC8vICAgICAgICAgSklUJ3MgY29kZSBhbmQg
aGFzIG5ldmVyIE9TUidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBjaGFuY2UgdG8KKyAgICAvLyAg
ICAgICAgIHBlcmZvcm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0
ZWQuCisgICAgLy8KKyAgICAvLyAgICAgKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0
IHNob3VsZCBub3QgaW1tZWRpYXRlbHkgcmV0cnkgT1NSCisgICAgLy8gICAgICAgICBlbnRyeSwg
c2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCisgICAg
Ly8gICAgICAgICBwYXJ0aWN1bGFybHkgZXhwZW5zaXZlLgorICAgIC8vCisgICAgLy8gICAgIChk
KSBGcmVxdWVudCBPU1IgZmFpbHVyZXMsIGV2ZW4gdGhvc2UgdGhhdCBkbyBub3QgcmVzdWx0IGlu
IHRoZSBjb2RlCisgICAgLy8gICAgICAgICBydW5uaW5nIGluIGEgaG90IGxvb3AsIHJlc3VsdCBp
biByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgorICAgIC8vCisgICAgLy8gICAgIFRv
IGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUgY291bnRlciB0bworICAg
IC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuIFRoaXMgc2VlbXMg
bGlrZSBpdCB3b3VsZCBlbmRhbmdlcgorICAgIC8vICAgICAoYSkgYW5kIChiKSwgc2luY2UgdGhl
biBldmVyeSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9yCisgICAgLy8g
ICAgIGV2ZXJ5IGNhbGwgZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVzc2VudGlhbGx5LCBp
ZiBPU1IgZXhpdCBoYXBwZW5zCisgICAgLy8gICAgIGZyZXF1ZW50bHkgYW5kIHRoZSBmdW5jdGlv
biBoYXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2ZXIKKyAgICAvLyAgICAg
YmVjb21lIG5vbi1uZWdhdGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVk
LiBPU1IgZW50cnkKKyAgICAvLyAgICAgd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBo
b3QgaW4gdGhlIG9sZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKKyAgICAvLyAgICAgZ29vZCBq
b2Igb2YgZW5zdXJpbmcgKGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJlIG9m
IChkKSwKKyAgICAvLyAgICAgc2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJl
c2V0IHRoZSBleGVjdXRlIGNvdW50ZXIuCisgICAgLy8gICAgIFNvIHdlIGNoZWNrIGhlcmUgaWYg
dGhlIG51bWJlciBvZiBzcGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5CisgICAg
Ly8gICAgIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBz
dWNjZXNzIHJhdGUpLCBhbmQgaWYKKyAgICAvLyAgICAgdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2Ug
ZW5vdWdoIG51bWJlciBvZiBmYWlsdXJlcy4gSWYgc28sIHdlIHNldCB0aGUKKyAgICAvLyAgICAg
Y291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCisgICAgLy8gICAg
IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4KKyAgICAKKyAgICBtX2ppdC5t
b3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKSksIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWls
Q291bnRlcigpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxh
dGl2ZVN1Y2Nlc3NDb3VudGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgbV9qaXQuYWRkMzIo
QXNzZW1ibHlIZWxwZXJzOjpJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIG1faml0LmFk
ZDMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIoLTEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgbV9q
aXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMiwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKSk7
CisgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNz
Q291bnRlcigpKSk7CisgICAgCisgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgCisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGZld0ZhaWxzID0gbV9qaXQuYnJh
bmNoMzIoQXNzZW1ibHlIZWxwZXJzOjpCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBBc3Nl
bWJseUhlbHBlcnM6OkltbTMyKG1faml0LmNvZGVCbG9jaygpLT5sYXJnZUZhaWxDb3VudFRocmVz
aG9sZCgpKSk7CisgICAgbV9qaXQubXVsMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihIZXVyaXN0
aWNzOjpkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvKSwgR1BSSW5mbzo6cmVnVDIs
IEdQUkluZm86OnJlZ1QyKTsKKyAgICAKKyAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgbG93RmFp
bFJhdGUgPSBtX2ppdC5icmFuY2gzMihBc3NlbWJseUhlbHBlcnM6OkJlbG93T3JFcXVhbCwgR1BS
SW5mbzo6cmVnVDIsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAKKyAgICAvLyBSZW9wdGltaXplIGFz
IHNvb24gYXMgcG9zc2libGUuCisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6Oklt
bTMyKEhldXJpc3RpY3M6OmV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9j
YXRpb24pLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9j
azo6b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigpKSk7CisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1w
IGRvbmVBZGp1c3RpbmcgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgZmV3RmFpbHMubGluaygm
bV9qaXQpOworICAgIGxvd0ZhaWxSYXRlLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBtX2ppdC5z
dG9yZTMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIobV9qaXQuY29kZUJsb2NrKCktPmFsdGVybmF0
aXZlKCktPmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpLCBBc3NlbWJs
eUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZFeGVj
dXRlQ291bnRlcigpKSk7CisgICAgCisgICAgZG9uZUFkanVzdGluZy5saW5rKCZtX2ppdCk7Cisg
ICAgCisgICAgLy8gMTMpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBvcGVy
YXRpb24gaW50byByZWdUMC4KKyAgICAKKyAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5kICE9
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpIHsKKyAgICAgICAgbV9qaXQubG9hZDMy
KEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0
U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICAgICAgbV9q
aXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5t
X2xhc3RTZXRPcGVyYW5kKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIyKTsKKyAgICB9
CisgICAgCisgICAgLy8gMTQpIEZpeCBjYWxsIGZyYW1lIChzKS4KKyAgICAKKyAgICBBU1NFUlQo
bV9qaXQuY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2Rl
OjpCYXNlbGluZUpJVCk7CisgICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwgQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2sp
KTsKKyAgICAKKyAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3Jp
Z2luOyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKKyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVP
cmlnaW4pOworICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0g
bV9qaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpOworICAg
ICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBt
X2ppdC5kZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlcik7CisgICAg
ICAgIHVuc2lnbmVkIHJldHVybkJ5dGVjb2RlSW5kZXggPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ci5ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKKyAgICAgICAgQnl0ZWNv
ZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNv
ZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCBy
ZXR1cm5CeXRlY29kZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChtYXBwaW5nKTsK
KyAgICAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSByZXR1cm5CeXRlY29k
ZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlci0+Z2V0SklUQ29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQo
bWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisKKyAgICAgICAgR1BSUmVnIGNhbGxlckZy
YW1lR1BSOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZy
YW1lKSB7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKGlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86
OnJlZ1QzKTsKKyAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6cmVnVDM7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlcjsKKyAgICAgICAgCisgICAgICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9jayksIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJz
Ojp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlLT5zY29w
ZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKSk7Cisg
ICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpKSk7CisgICAg
ICAgIG1faml0LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OnBheWxv
YWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJl
Z2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgQXNzZW1ibHlIZWxwZXJzOjpw
YXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBSZWdpc3RlckZpbGU6OlJldHVyblBDKSkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2Vt
Ymx5SGVscGVyczo6SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRh
Z0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVn
aXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2Vt
Ymx5SGVscGVyczo6SW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSwgQXNz
ZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpKSk7CisgICAgICAg
IG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwg
QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKSkpOworICAgICAgICBtX2ppdC5z
dG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5j
YWxsZWUuZ2V0KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKSkp
OworICAgIH0KKyAgICAKKyAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KQorICAgICAgICBtX2ppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihleGl0Lm1fY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKworICAgIC8vIDE1KSBKdW1wIGlu
dG8gdGhlIGNvcnJlc3BvbmRpbmcgYmFzZWxpbmUgSklUIGNvZGUuCisgICAgCisgICAgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGV4aXQu
bV9jb2RlT3JpZ2luKTsKKyAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVj
b2RlZENvZGVNYXAgPSBtX2ppdC5kZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9jayk7
CisgICAgCisgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2Vh
cmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGlu
ZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2Rl
ZENvZGVNYXAuc2l6ZSgpLCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAK
KyAgICBBU1NFUlQobWFwcGluZyk7CisgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRl
eCA9PSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAKKyAgICB2b2lkKiBq
dW1wVGFyZ2V0ID0gYmFzZWxpbmVDb2RlQmxvY2stPmdldEpJVENvZGUoKS5leGVjdXRhYmxlQWRk
cmVzc0F0T2Zmc2V0KG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOworICAgIAorICAgIEFT
U0VSVChHUFJJbmZvOjpyZWdUMiAhPSBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3RlciAmJiBH
UFJJbmZvOjpyZWdUMiAhPSBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3RlcjIpOworICAgIAor
ICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQp
LCBHUFJJbmZvOjpyZWdUMik7CisgICAgbV9qaXQuanVtcChHUFJJbmZvOjpyZWdUMik7CisKKyNp
ZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZnByaW50ZihzdGRlcnIsICIgICAtPiAl
cFxuIiwganVtcFRhcmdldCk7CisjZW5kaWYKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpICYmIFVTRShKU1ZBTFVFMzJfNjQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyNjQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkg
JiYgVVNFKEpTVkFMVUU2NCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2
b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgT1NSRXhpdCYgZXhpdCwgU3Bl
Y3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCit7CisgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZm
LgorICAgIGV4aXQubV9jaGVjay5saW5rKCZtX2ppdCk7CisKKyNpZiBERkdfRU5BQkxFKERFQlVH
X1ZFUkJPU0UpCisgICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQgKCIs
IChpbnQpZXhpdC5tX25vZGVJbmRleCk7CisgICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4g
PSBleGl0Lm1fY29kZU9yaWdpbjsgOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUtPmNhbGxlcikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImJjIyV1IiwgY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiAl
cCAiLCBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7CisgICAg
fQorICAgIGZwcmludGYoc3RkZXJyLCAiKSBhdCBKSVQgb2Zmc2V0IDB4JXggICIsIG1faml0LmRl
YnVnT2Zmc2V0KCkpOworICAgIGV4aXQuZHVtcChzdGRlcnIpOworI2VuZGlmCisjaWYgREZHX0VO
QUJMRShWRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCisgICAgU3BlY3VsYXRpb25GYWlsdXJl
RGVidWdJbmZvKiBkZWJ1Z0luZm8gPSBuZXcgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvOwor
ICAgIGRlYnVnSW5mby0+Y29kZUJsb2NrID0gbV9qaXQuY29kZUJsb2NrKCk7CisgICAgZGVidWdJ
bmZvLT5kZWJ1Z09mZnNldCA9IG1faml0LmRlYnVnT2Zmc2V0KCk7CisgICAgCisgICAgbV9qaXQu
ZGVidWdDYWxsKGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUsIGRlYnVnSW5m
byk7CisjZW5kaWYKKyAgICAKKyNpZiBERkdfRU5BQkxFKEpJVF9CUkVBS19PTl9TUEVDVUxBVElP
Tl9GQUlMVVJFKQorICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgIAorI2lmIERG
R19FTkFCTEUoU1VDQ0VTU19TVEFUUykKKyAgICBzdGF0aWMgU2FtcGxpbmdDb3VudGVyIGNvdW50
ZXIoIlNwZWN1bGF0aW9uRmFpbHVyZSIpOworICAgIG1faml0LmVtaXRDb3VudChjb3VudGVyKTsK
KyNlbmRpZgorICAgIAorICAgIC8vIDIpIFBlcmZvcm0gc3BlY3VsYXRpb24gcmVjb3ZlcnkuIFRo
aXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBhbiBvcGVyYXRpb24KKyAgICAvLyAgICBzdGFy
dHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlmeWluZyB0aGUgc3BlY3VsYXRpb24gaXQgaGFz
IGFscmVhZHkgbWFkZS4KKyAgICAKKyAgICBHUFJSZWcgYWxyZWFkeUJveGVkID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAKKyAgICBpZiAocmVjb3ZlcnkpIHsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVy
eS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGQ6CisgICAgICAgICAgICBt
X2ppdC5zdWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAgICAg
ICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS0+
ZGVzdCgpKTsKKyAgICAgICAgICAgIGFscmVhZHlCb3hlZCA9IHJlY292ZXJ5LT5kZXN0KCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEJvb2xlYW5TcGVj
dWxhdGlvbkNoZWNrOgorICAgICAgICAgICAgbV9qaXQueG9yUHRyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVjb3Zlcnkt
PmRlc3QoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAzKSBS
ZWZpbmUgc29tZSB2YWx1ZSBwcm9maWxlLCBpZiBhcHByb3ByaWF0ZS4KKyAgICAKKyAgICBpZiAo
ISFleGl0Lm1fanNWYWx1ZVNvdXJjZSAmJiAhIWV4aXQubV92YWx1ZVByb2ZpbGUpIHsKKyAgICAg
ICAgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmlzQWRkcmVzcygpKSB7CisgICAgICAgICAgICAv
LyBXZSBjYW4ndCBiZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIHNwYXJlIHJlZ2lzdGVyLiBTbyB1c2Ug
dGhlIHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwKKyAgICAgICAgICAgIC8vIHNpbmNlIHdlIGtub3cg
aG93IHRvIHJlc3RvcmUgaXQuCisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVs
cGVyczo6QWRkcmVzcyhleGl0Lm1fanNWYWx1ZVNvdXJjZS5hc0FkZHJlc3MoKSksIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGV4aXQubV92YWx1ZVByb2ZpbGUtPnNwZWNGYWls
QnVja2V0KDApKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oVGFnVHlwZU51bWJlcikpLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1faml0
LnN0b3JlUHRyKGV4aXQubV9qc1ZhbHVlU291cmNlLmdwcigpLCBleGl0Lm1fdmFsdWVQcm9maWxl
LT5zcGVjRmFpbEJ1Y2tldCgwKSk7CisgICAgfQorCisgICAgLy8gNCkgRmlndXJlIG91dCBob3cg
bWFueSBzY3JhdGNoIHNsb3RzIHdlJ2xsIG5lZWQuIFdlIG5lZWQgb25lIGZvciBldmVyeSBHUFIv
RlBSCisgICAgLy8gICAgd2hvc2UgZGVzdGluYXRpb24gaXMgbm93IG9jY3VwaWVkIGJ5IGEgREZH
IHZpcnR1YWwgcmVnaXN0ZXIsIGFuZCB3ZSBuZWVkCisgICAgLy8gICAgb25lIGZvciBldmVyeSBk
aXNwbGFjZWQgdmlydHVhbCByZWdpc3RlciBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuCisgICAgLy8g
ICAgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgb2YgdGhlbS4gQWxzbyBzZWUgaWYgdGhlcmUg
YXJlIGFueSBjb25zdGFudHMsCisgICAgLy8gICAgYW55IHVuZGVmaW5lZCBzbG90cywgYW55IEZQ
UiBzbG90cywgYW5kIGFueSB1bmJveGVkIGludHMuCisgICAgICAgICAgICAKKyAgICBWZWN0b3I8
Ym9vbD4gcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKGV4aXQubV92YXJpYWJsZXMuc2l6ZSgpKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzLnNp
emUoKTsgKytpKQorICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbaV0gPSBmYWxzZTsK
KworICAgIHVuc2lnbmVkIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzID0gMDsKKyAg
ICB1bnNpZ25lZCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPSAwOworICAgIAor
ICAgIC8vIEJvb2xlYW5zIGZvciBmYXN0IGNoZWNrcy4gV2UgZXhwZWN0IHRoYXQgbW9zdCBPU1Ig
ZXhpdHMgZG8gbm90IGhhdmUgdG8gcmVib3gKKyAgICAvLyBJbnQzMnMsIGhhdmUgbm8gRlBScywg
YW5kIGhhdmUgbm8gY29uc3RhbnRzLiBJZiB0aGVyZSBhcmUgY29uc3RhbnRzLCB3ZQorICAgIC8v
IGV4cGVjdCBtb3N0IG9mIHRoZW0gdG8gYmUganNVbmRlZmluZWQoKTsgaWYgdGhhdCdzIHRydWUg
dGhlbiB3ZSBoYW5kbGUgdGhhdAorICAgIC8vIHNwZWNpYWxseSB0byBtaW5pbWl6ZSBjb2RlIHNp
emUgYW5kIGV4ZWN1dGlvbiB0aW1lLgorICAgIGJvb2wgaGF2ZVVuYm94ZWRJbnQzMnMgPSBmYWxz
ZTsKKyAgICBib29sIGhhdmVGUFJzID0gZmFsc2U7CisgICAgYm9vbCBoYXZlQ29uc3RhbnRzID0g
ZmFsc2U7CisgICAgYm9vbCBoYXZlVW5kZWZpbmVkID0gZmFsc2U7CisgICAgCisgICAgZm9yIChp
bnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgp
IHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVj
b3ZlcnkoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Cisg
ICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgY2FzZSBE
b3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJl
Z2lzdGVyRmlsZToKKyAgICAgICAgICAgIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVy
cysrOworICAgICAgICAgICAgQVNTRVJUKChpbnQpcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkg
Pj0gMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBtaWdodCBsaWtl
IHRvIHN0b3JlIHRvIHRoaXMgdmlydHVhbCByZWdpc3RlciBiZWZvcmUgZG9pbmcKKyAgICAgICAg
ICAgIC8vIHZpcnR1YWwgcmVnaXN0ZXIgc2h1ZmZsaW5nLiBJZiBzbywgd2Ugc2F5IHRoYXQgdGhl
IHZpcnR1YWwgcmVnaXN0ZXIKKyAgICAgICAgICAgIC8vIGlzIHBvaXNvbmVkOiBpdCBjYW5ub3Qg
YmUgc3RvcmVkIHRvIHVudGlsIGFmdGVyIGRpc3BsYWNlZCB2aXJ0dWFsCisgICAgICAgICAgICAv
LyByZWdpc3RlcnMgYXJlIGhhbmRsZWQuIFdlIHRyYWNrIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0
ZXIgY2FyZWZ1bGx5CisgICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhpcyBoYXBwZW5zIGVmZmlj
aWVudGx5LiBOb3RlIHRoYXQgd2UgZXhwZWN0IHRoaXMgY2FzZQorICAgICAgICAgICAgLy8gdG8g
YmUgcmFyZSwgc28gdGhlIGhhbmRsaW5nIG9mIGl0IGlzIG9wdGltaXplZCBmb3IgdGhlIGNhc2Vz
IGluCisgICAgICAgICAgICAvLyB3aGljaCBpdCBkb2VzIG5vdCBoYXBwZW4uCisgICAgICAgICAg
ICBpZiAocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAoaW50KWV4aXQubV92YXJpYWJsZXMu
c2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChleGl0Lm1fdmFyaWFibGVzW3JlY292
ZXJ5LnZpcnR1YWxSZWdpc3RlcigpXS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgICAgIGNh
c2UgSW5HUFI6CisgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAg
ICAgICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAgICAgICAgICBpZiAoIXBvaXNvbmVk
VmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFs
UmVnaXN0ZXIoKV0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZQb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BS
OgorICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgorICAg
ICAgICAgICAgaGF2ZVVuYm94ZWRJbnQzMnMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgIGhhdmVGUFJzID0g
dHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ29u
c3RhbnQ6CisgICAgICAgICAgICBoYXZlQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIGlm
IChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgaGF2
ZVVuZGVmaW5lZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgIGZwcmludGYoc3RkZXJyLCAiICAi
KTsKKyAgICBpZiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpCisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiUG9pc29uZWQ9JXUgIiwgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnMpOworICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpCisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiRGlzcGxhY2VkPSV1ICIsIG51bWJlck9mRGlzcGxhY2VkVmly
dHVhbFJlZ2lzdGVycyk7CisgICAgaWYgKGhhdmVVbmJveGVkSW50MzJzKQorICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIlVuYm94ZWRJbnQzMiAiKTsKKyAgICBpZiAoaGF2ZUZQUnMpCisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiRlBSICIpOworICAgIGlmIChoYXZlQ29uc3RhbnRzKQorICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNvbnN0YW50cyAiKTsKKyAgICBpZiAoaGF2ZVVuZGVmaW5lZCkK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmRlZmluZWQgIik7CisgICAgZnByaW50ZihzdGRl
cnIsICIgIik7CisjZW5kaWYKKyAgICAKKyAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaEJ1ZmZl
ciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4obV9qaXQuZ2xvYmFsRGF0YSgpLT5zY3Jh
dGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKG51bWJlck9mUG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzICsgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA8
PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA/IDAgOiBudW1iZXJPZkRpc3BsYWNlZFZpcnR1
YWxSZWdpc3RlcnMpKSkpOworCisgICAgLy8gRnJvbSBoZXJlIG9uLCB0aGUgY29kZSBhc3N1bWVz
IHRoYXQgaXQgaXMgcHJvZml0YWJsZSB0byBtYXhpbWl6ZSB0aGUgZGlzdGFuY2UKKyAgICAvLyBi
ZXR3ZWVuIHdoZW4gc29tZXRoaW5nIGlzIGNvbXB1dGVkIGFuZCB3aGVuIGl0IGlzIHN0b3JlZC4K
KyAgICAKKyAgICAvLyA1KSBQZXJmb3JtIGFsbCByZWJveGluZyBvZiBpbnRlZ2Vycy4KKyAgICAK
KyAgICBpZiAoaGF2ZVVuYm94ZWRJbnQzMnMpIHsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAg
ICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGlu
ZGV4KTsKKyAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICAgICAgaWYgKHJlY292
ZXJ5LmdwcigpICE9IGFscmVhZHlCb3hlZCkKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQub3JQ
dHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS5ncHIoKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFs
cmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgorICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oVGFn
VHlwZU51bWJlciA+PiAzMikpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgLy8gNikgRHVtcCBhbGwgbm9uLXBvaXNvbmVkIEdQUnMuIEZvciBwb2lzb25lZCBH
UFJzLCBzYXZlIHRoZW0gaW50byB0aGUgc2NyYXRjaCBzdG9yYWdlLgorICAgIC8vICAgIE5vdGUg
dGhhdCBHUFJzIGRvIG5vdCBoYXZlIGEgZmFzdCBjaGFuZ2UgKGxpa2UgaGF2ZUZQUnMpIGJlY2F1
c2Ugd2UgZXhwZWN0IHRoYXQKKyAgICAvLyAgICBtb3N0IE9TUiBmYWlsdXJlIHBvaW50cyB3aWxs
IGhhdmUgYXQgbGVhc3Qgb25lIEdQUiB0aGF0IG5lZWRzIHRvIGJlIGR1bXBlZC4KKyAgICAKKyAg
ICB1bnNpZ25lZCBzY3JhdGNoSW5kZXggPSAwOworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5k
ZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAg
ICAgICAgaW50IG9wZXJhbmQgPSBleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAg
IHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBJbkdQUjoKKyAg
ICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgIGlmIChleGl0LmlzVmFy
aWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9y
SW5kZXgoaW5kZXgpXSkKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWNvdmVyeS5n
cHIoKSwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWNvdmVyeS5ncHIoKSwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50IGFsbCBHUFJzIGFyZSBhdmFpbGFi
bGUgZm9yIHNjcmF0Y2ggdXNlLgorICAgIAorICAgIGlmIChoYXZlRlBScykgeworICAgICAgICAv
LyA3KSBCb3ggYWxsIGRvdWJsZXMgKHJlbGllcyBvbiB0aGVyZSBiZWluZyBtb3JlIEdQUnMgdGhh
biBGUFJzKQorICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4
aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAg
ICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSByZWNvdmVyeS5mcHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQUkluZm86OnRvSW5k
ZXgoZnByKSk7CisgICAgICAgICAgICBtX2ppdC5ib3hEb3VibGUoZnByLCBncHIpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyA4KSBEdW1wIGFsbCBkb3VibGVzIGludG8gdGhlIHJl
Z2lzdGVyIGZpbGUsIG9yIHRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UgaWYKKyAgICAgICAgLy8gICAg
dGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgcmVnaXN0ZXIgaXMgcG9pc29uZWQuCisgICAgICAgIAor
ICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJp
ZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zl
cnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5
LnRlY2huaXF1ZSgpICE9IEluRlBSKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6dG9JbmRleChy
ZWNvdmVyeS5mcHIoKSkpOworICAgICAgICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkg
JiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCld
KQorICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGdwciwgc2NyYXRjaEJ1ZmZlciArIHNj
cmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZVB0cihncHIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVy
KWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3Rl
cnMpOworICAgIAorICAgIC8vIDkpIFJlc2h1ZmZsZSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3Rl
cnMuIE9wdGltaXplIGZvciB0aGUgY2FzZSB0aGF0CisgICAgLy8gICAgdGhlIG51bWJlciBvZiBk
aXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMgaXMgbm90IG1vcmUgdGhhbiB0aGUgbnVtYmVyCisg
ICAgLy8gICAgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIHJlZ2lzdGVycy4KKyAgICAKKyAgICBpZiAo
bnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7CisgICAgICAgIGlmIChudW1iZXJP
ZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMp
IHsKKyAgICAgICAgICAgIC8vIFNvIGZhciB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlIGNhc2UgdGhh
dCB0cmlnZ2VycyBhbGwgdGhlIHRpbWUsIGJ1dAorICAgICAgICAgICAgLy8gdGhhdCBpcyBmYXIg
ZnJvbSBndWFyYW50ZWVkLgorICAgICAgICAKKyAgICAgICAgICAgIHVuc2lnbmVkIGRpc3BsYWNl
bWVudEluZGV4ID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBl
eGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29u
c3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwor
ICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKykp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOiB7CisgICAgICAg
ICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVu
dEluZGV4KyspOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgZ3ByKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCBncHIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2Vk
SW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQUklu
Zm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyk7CisgICAgICAgICAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1
YWxSZWdpc3RlcigpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViUHRyKEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgZGlzcGxhY2VtZW50
SW5kZXggPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQu
bnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICAgICAgY2FzZSBJ
bnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgIGNhc2UgRG91Ymxl
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
UHRyKEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyksIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGlu
ZGV4KSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgc2h1ZmZsaW5nIGFsZ29yaXRobSB0
aGF0IHdlIHVzZQorICAgICAgICAgICAgLy8gZm9yIHNwZWN1bGF0aXZlLT5ub24tc3BlY3VsYXRp
dmUganVtcHMsIGlmIHdlIGV2ZXIgZGlzY292ZXIgdGhhdAorICAgICAgICAgICAgLy8gc29tZSBo
b3QgY29kZSB3aXRoIGxvdHMgb2YgbGl2ZSB2YWx1ZXMgdGhhdCBnZXQgZGlzcGxhY2VkIGFuZAor
ICAgICAgICAgICAgLy8gc3BpbGxlZCByZWFsbHkgZW5qb3lzIGZyZXF1ZW50bHkgZmFpbGluZyBz
cGVjdWxhdGlvbi4KKyAgICAgICAgCisgICAgICAgICAgICAvLyBGb3Igbm93IHRoaXMgY29kZSBp
cyBlbmdpbmVlcmVkIHRvIGJlIGNvcnJlY3QgYnV0IHByb2JhYmx5IG5vdAorICAgICAgICAgICAg
Ly8gc3VwZXIuIEluIHBhcnRpY3VsYXIsIGl0IGNvcnJlY3RseSBoYW5kbGVzIGNhc2VzIHdoZXJl
IGZvciBleGFtcGxlCisgICAgICAgICAgICAvLyB0aGUgZGlzcGxhY2VtZW50cyBhcmUgYSBwZXJt
dXRhdGlvbiBvZiB0aGUgZGVzdGluYXRpb24gdmFsdWVzLCBsaWtlCisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgLy8gMSAtPiAyCisgICAgICAgICAgICAvLyAyIC0+IDEKKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyBJdCBhY2NvbXBsaXNoZXMgdGhpcyBieSBzaW1wbHkgbGlmdGlu
ZyBhbGwgb2YgdGhlIHZpcnR1YWwgcmVnaXN0ZXJzCisgICAgICAgICAgICAvLyBmcm9tIHRoZWly
IG9sZCAoREZHIEpJVCkgbG9jYXRpb25zIGFuZCBkcm9wcGluZyB0aGVtIGluIGEgc2NyYXRjaAor
ICAgICAgICAgICAgLy8gbG9jYXRpb24gaW4gbWVtb3J5LCBhbmQgdGhlbiB0cmFuc2ZlcnJpbmcg
ZnJvbSB0aGF0IHNjcmF0Y2ggbG9jYXRpb24KKyAgICAgICAgICAgIC8vIHRvIHRoZWlyIG5ldyAo
b2xkIEpJVCkgbG9jYXRpb25zLgorICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGluZGV4
ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAg
ICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVj
b3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAo
cmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVn
VDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEludDMy
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIo
KSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoQnVmZmVyICsg
c2NyYXRjaEluZGV4KyspOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgRG91Ymxl
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVy
KCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YlB0cihH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZmZXIg
KyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgICAgIHNjcmF0Y2hJbmRleCA9IG51bWJlck9mUG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzOworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRl
eCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICAg
ICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgIGNh
c2UgRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRG
b3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgICAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVn
aXN0ZXJzICsgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAvLyAxMCkgRHVtcCBhbGwgcG9pc29uZWQgdmlydHVhbCByZWdpc3Rl
cnMuCisgICAgCisgICAgc2NyYXRjaEluZGV4ID0gMDsKKyAgICBpZiAobnVtYmVyT2ZQb2lzb25l
ZFZpcnR1YWxSZWdpc3RlcnMpIHsKKyAgICAgICAgZm9yIChpbnQgdmlydHVhbFJlZ2lzdGVyID0g
MDsgdmlydHVhbFJlZ2lzdGVyIDwgKGludClleGl0Lm1fdmFyaWFibGVzLnNpemUoKTsgKyt2aXJ0
dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgIGlmICghcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJz
W3ZpcnR1YWxSZWdpc3Rlcl0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC5tX3Zh
cmlhYmxlc1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50
ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgICAgIGNhc2Ug
VW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAs
IEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdp
c3RlcikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAgICAKKyAgICAvLyAxMSkgRHVtcCBhbGwgY29uc3RhbnRz
LiBPcHRpbWl6ZSBmb3IgVW5kZWZpbmVkLCBzaW5jZSB0aGF0J3MgYSBjb25zdGFudCB3ZSBzZWUK
KyAgICAvLyAgICAgb2Z0ZW4uCisKKyAgICBpZiAoaGF2ZUNvbnN0YW50cykgeworICAgICAgICBp
ZiAoaGF2ZVVuZGVmaW5lZCkKKyAgICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBl
eGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAg
ICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ29uc3RhbnQpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQoKS5pc1Vu
ZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1Qw
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJh
bmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKHJlY292ZXJ5LmNvbnN0YW50KCkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgLy8gMTIpIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUgY291
bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93CisgICAgLy8gICAgIHRoYXQg
YWxsIG5ldyBjYWxscyBpbnRvIHRoaXMgY29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBzbyB0
aGUgZXhlY3V0ZQorICAgIC8vICAgICBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0
aGF0IHBlcmZvcm1lZCBPU1IgZXhpdCBhbmQgY2FsbCBmcmFtZXMKKyAgICAvLyAgICAgdGhhdCB3
ZXJlIHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVyIGNh
bGwgZnJhbWUncworICAgIC8vICAgICBPU1IgZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0
aGUgZm9sbG93aW5nIGlzIHRydWU6CisgICAgLy8KKyAgICAvLyAgICAgKGEpIENvZGUgdGhlIHBl
cmZvcm1zIGFuIE9TUiBleGl0IGdldHMgYSBjaGFuY2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQKKyAg
ICAvLyAgICAgICAgIGNvZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0aW1pemVkIGNvZGUgaXMgZmFz
dGVyLiBCdXQgd2UgZG9uJ3QKKyAgICAvLyAgICAgICAgIHdhbnQgdG8gZG8gc3VjaCByZWVudGVy
eSB0b28gYWdncmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KKyAgICAvLworICAgIC8vICAgICAo
YikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUgY2FsbCBzdGFjayB0aGF0IGlzIHN0aWxsIHJ1bm5p
bmcgdGhlIG9sZAorICAgIC8vICAgICAgICAgSklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9TUidk
LCB0aGVuIGl0IHNob3VsZCBnZXQgYSBjaGFuY2UgdG8KKyAgICAvLyAgICAgICAgIHBlcmZvcm0g
T1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCisgICAgLy8KKyAg
ICAvLyAgICAgKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IHNob3VsZCBub3QgaW1t
ZWRpYXRlbHkgcmV0cnkgT1NSCisgICAgLy8gICAgICAgICBlbnRyeSwgc2luY2UgYm90aCBmb3Jt
cyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCisgICAgLy8gICAgICAgICBwYXJ0
aWN1bGFybHkgZXhwZW5zaXZlLgorICAgIC8vCisgICAgLy8gICAgIChkKSBGcmVxdWVudCBPU1Ig
ZmFpbHVyZXMsIGV2ZW4gdGhvc2UgdGhhdCBkbyBub3QgcmVzdWx0IGluIHRoZSBjb2RlCisgICAg
Ly8gICAgICAgICBydW5uaW5nIGluIGEgaG90IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBpbGF0aW9u
IGdldHRpbmcgdHJpZ2dlcmVkLgorICAgIC8vCisgICAgLy8gICAgIFRvIGVuc3VyZSAoYyksIHdl
J2QgbGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUgY291bnRlciB0bworICAgIC8vICAgICBjb3VudGVy
VmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBl
bmRhbmdlcgorICAgIC8vICAgICAoYSkgYW5kIChiKSwgc2luY2UgdGhlbiBldmVyeSBPU1IgZXhp
dCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9yCisgICAgLy8gICAgIGV2ZXJ5IGNhbGwg
ZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVzc2VudGlhbGx5LCBpZiBPU1IgZXhpdCBoYXBw
ZW5zCisgICAgLy8gICAgIGZyZXF1ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxvb3Bz
LCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2ZXIKKyAgICAvLyAgICAgYmVjb21lIG5vbi1uZWdh
dGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkKKyAg
ICAvLyAgICAgd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhlIG9sZCBK
SVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKKyAgICAvLyAgICAgZ29vZCBqb2Igb2YgZW5zdXJpbmcg
KGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJlIG9mIChkKSwKKyAgICAvLyAg
ICAgc2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRl
IGNvdW50ZXIuCisgICAgLy8gICAgIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBvZiBz
cGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5CisgICAgLy8gICAgIGxhcmdlciB0
aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJhdGUpLCBh
bmQgaWYKKyAgICAvLyAgICAgdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBv
ZiBmYWlsdXJlcy4gSWYgc28sIHdlIHNldCB0aGUKKyAgICAvLyAgICAgY291bnRlciB0byAwOyBv
dGhlcndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCisgICAgLy8gICAgIGNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4KKyAgICAKKyAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKSksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAKKyAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKSwgR1BS
SW5mbzo6cmVnVDIpOworICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZVN1Y2Nlc3NDb3Vu
dGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgbV9qaXQuYWRkMzIoQXNzZW1ibHlIZWxwZXJz
OjpJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIG1faml0LmFkZDMyKEFzc2VtYmx5SGVs
cGVyczo6SW1tMzIoLTEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgbV9qaXQuc3RvcmUzMihHUFJJ
bmZvOjpyZWdUMiwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKSk7CisgICAgbV9qaXQuc3Rv
cmUzMihHUFJJbmZvOjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7Cisg
ICAgCisgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Y29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAg
QXNzZW1ibHlIZWxwZXJzOjpKdW1wIGZld0ZhaWxzID0gbV9qaXQuYnJhbmNoMzIoQXNzZW1ibHlI
ZWxwZXJzOjpCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBBc3NlbWJseUhlbHBlcnM6Oklt
bTMyKG1faml0LmNvZGVCbG9jaygpLT5sYXJnZUZhaWxDb3VudFRocmVzaG9sZCgpKSk7CisgICAg
bV9qaXQubXVsMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihIZXVyaXN0aWNzOjpkZXNpcmVkU3Bl
Y3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvKSwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJlZ1Qy
KTsKKyAgICAKKyAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgbG93RmFpbFJhdGUgPSBtX2ppdC5i
cmFuY2gzMihBc3NlbWJseUhlbHBlcnM6OkJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIsIEdQ
UkluZm86OnJlZ1QxKTsKKyAgICAKKyAgICAvLyBSZW9wdGltaXplIGFzIHNvb24gYXMgcG9zc2li
bGUuCisgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKEhldXJpc3RpY3M6
OmV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24pLCBBc3NlbWJs
eUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZFeGVj
dXRlQ291bnRlcigpKSk7CisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGRvbmVBZGp1c3Rpbmcg
PSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgZmV3RmFpbHMubGluaygmbV9qaXQpOworICAgIGxv
d0ZhaWxSYXRlLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5
SGVscGVyczo6SW1tMzIobV9qaXQuY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmNvdW50ZXJW
YWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigpKSk7
CisgICAgCisgICAgZG9uZUFkanVzdGluZy5saW5rKCZtX2ppdCk7CisgICAgCisgICAgLy8gMTMp
IExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBvcGVyYXRpb24gaW50byByZWdU
MC4KKyAgICAKKyAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCkpCisgICAgICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJz
OjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5tX2xhc3RTZXRPcGVyYW5kKSwgR1BS
SW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOworICAgIAorICAgIC8vIDE0KSBGaXggY2FsbCBm
cmFtZShzKS4KKyAgICAKKyAgICBBU1NFUlQobV9qaXQuY29kZUJsb2NrKCktPmFsdGVybmF0aXZl
KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgbV9qaXQuc3Rv
cmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpLT5h
bHRlcm5hdGl2ZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKTsKKyAgICAKKyAgICBmb3IgKENvZGVPcmlnaW4g
Y29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKKyAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZTsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pOworICAgICAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gbV9qaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZXIpOworICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5l
T2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBtX2ppdC5kZWNvZGVkQ29kZU1hcEZvcihiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlcik7CisgICAgICAgIHVuc2lnbmVkIHJldHVybkJ5dGVjb2RlSW5k
ZXggPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdU
SChvcF9jYWxsKTsKKyAgICAgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0g
YmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4o
KSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCByZXR1cm5CeXRlY29kZUluZGV4KTsKKyAgICAgICAg
CisgICAgICAgIEFTU0VSVChtYXBwaW5nKTsKKyAgICAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0
ZWNvZGVJbmRleCA9PSByZXR1cm5CeXRlY29kZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIHZv
aWQqIGp1bXBUYXJnZXQgPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0SklUQ29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQobWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7
CisKKyAgICAgICAgR1BSUmVnIGNhbGxlckZyYW1lR1BSOworICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBtX2ppdC5hZGRQ
dHIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgICAgICAgICBjYWxsZXJG
cmFtZUdQUiA9IEdQUkluZm86OnJlZ1QzOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNh
bGxlckZyYW1lR1BSID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXI7CisgICAgICAgIAorICAg
ICAgICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxp
bmVDb2RlQmxvY2spLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2Nr
KSkpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUtPnNjb3BlKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2Fs
bGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVy
KShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFt
ZSkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGp1bXBUYXJnZXQpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdp
c3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6UmV0dXJu
UEMpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMu
c2l6ZSgpKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlciko
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3Vu
dCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlLmdldCgpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBS
ZWdpc3RlckZpbGU6OkNhbGxlZSkpKTsKKyAgICB9CisgICAgCisgICAgaWYgKGV4aXQubV9jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgbV9qaXQuYWRkUHRyKEFzc2VtYmx5SGVs
cGVyczo6SW1tMzIoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
CisgICAgCisgICAgLy8gMTUpIEp1bXAgaW50byB0aGUgY29ycmVzcG9uZGluZyBiYXNlbGluZSBK
SVQgY29kZS4KKyAgICAKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQu
YmFzZWxpbmVDb2RlQmxvY2tGb3IoZXhpdC5tX2NvZGVPcmlnaW4pOworICAgIFZlY3RvcjxCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCA9IG1faml0LmRlY29kZWRDb2Rl
TWFwRm9yKGJhc2VsaW5lQ29kZUJsb2NrKTsKKyAgICAKKyAgICBCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1
bnNpZ25lZCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4PihkZWNv
ZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIGV4aXQubV9jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIEFTU0VSVChtYXBwaW5nKTsKKyAgICBBU1NF
UlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgpOworICAgIAorICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBiYXNlbGluZUNvZGVCbG9jay0+
Z2V0SklUQ29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQobWFwcGluZy0+bV9tYWNoaW5l
Q29kZU9mZnNldCk7CisgICAgCisgICAgQVNTRVJUKEdQUkluZm86OnJlZ1QxICE9IEdQUkluZm86
OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICAKKyAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgR1BSSW5mbzo6cmVnVDEpOworICAgIG1f
aml0Lmp1bXAoR1BSSW5mbzo6cmVnVDEpOworCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NF
KQorICAgIGZwcmludGYoc3RkZXJyLCAiLT4gJXBcbiIsIGp1bXBUYXJnZXQpOworI2VuZGlmCit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KSAmJiBVU0UoSlNWQUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR09TUkV4aXRDb21waWxlcl9oCisjZGVmaW5lIERGR09TUkV4aXRDb21waWxlcl9oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE9TUkV4aXRDb21waWxlciB7Citw
dWJsaWM6CisgICAgT1NSRXhpdENvbXBpbGVyKEFzc2VtYmx5SGVscGVycyYgaml0KQorICAgICAg
ICA6IG1faml0KGppdCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUV4aXQo
Y29uc3QgT1NSRXhpdCYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqKTsKKworcHJpdmF0ZToKKyAgICBB
c3NlbWJseUhlbHBlcnMmIG1faml0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPU1JFeGl0Q29tcGls
ZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkocmV2aXNp
b24gOTk2MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNs
YXNzIEpJVENvbXBpbGVyOwogICAgICAgICBjbGFzcyBKSVRDb2RlR2VuZXJhdG9yOwogICAgICAg
ICBjbGFzcyBKU1ZhbHVlU291cmNlOworICAgICAgICBjbGFzcyBPU1JFeGl0Q29tcGlsZXI7CiAg
ICAgICAgIGNsYXNzIFNwZWN1bGF0aXZlSklUOwogICAgIH0KICNlbmRpZgpAQCAtMTE0LDYgKzEx
NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBmcmllbmQgY2xhc3MgREZHOjpKSVRDb21w
aWxlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6SklUQ29kZUdlbmVyYXRvcjsKICAgICAg
ICAgZnJpZW5kIGNsYXNzIERGRzo6SlNWYWx1ZVNvdXJjZTsKKyAgICAgICAgZnJpZW5kIGNsYXNz
IERGRzo6T1NSRXhpdENvbXBpbGVyOwogICAgICAgICBmcmllbmQgY2xhc3MgREZHOjpTcGVjdWxh
dGl2ZUpJVDsKICNlbmRpZgogCg==
</data>
<flag name="review"
          id="112724"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>