<?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>136771</bug_id>
          
          <creation_ts>2014-09-11 20:47:11 -0700</creation_ts>
          <short_desc>[Cocoa] Message generation scripts should be installed in WebKit.framework</short_desc>
          <delta_ts>2014-09-12 14:05:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to>mitz</assigned_to>
          <cc>andersca</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1034807</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2014-09-11 20:47:11 -0700</bug_when>
    <thetext>[Cocoa] Message generation scripts should be installed in WebKit.framework</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034808</commentid>
    <comment_count>1</comment_count>
      <attachid>238012</attachid>
    <who name="">mitz</who>
    <bug_when>2014-09-11 20:52:22 -0700</bug_when>
    <thetext>Created attachment 238012
Copy the scripts into WebKit2.framework/PrivateHeaders/Scripts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034873</commentid>
    <comment_count>2</comment_count>
      <attachid>238031</attachid>
    <who name="">mitz</who>
    <bug_when>2014-09-12 09:21:33 -0700</bug_when>
    <thetext>Created attachment 238031
Copy the scripts into WebKit2.framework/PrivateHeaders/Scripts/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034886</commentid>
    <comment_count>3</comment_count>
    <who name="">mitz</who>
    <bug_when>2014-09-12 10:32:28 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r173564&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034909</commentid>
    <comment_count>4</comment_count>
    <who name="">mitz</who>
    <bug_when>2014-09-12 12:09:40 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Committed &lt;http://trac.webkit.org/r173564&gt;.

This was reverted in &lt;http://trac.webkit.org/r173564&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034945</commentid>
    <comment_count>5</comment_count>
    <who name="">mitz</who>
    <bug_when>2014-09-12 14:05:33 -0700</bug_when>
    <thetext>Committed again as &lt;http://trac.webkit.org/r173574&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238012</attachid>
            <date>2014-09-11 20:52:22 -0700</date>
            <delta_ts>2014-09-11 20:59:48 -0700</delta_ts>
            <desc>Copy the scripts into WebKit2.framework/PrivateHeaders/Scripts</desc>
            <filename>bug-136771-20140911205218.patch</filename>
            <type>text/plain</type>
            <size>4155</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzU1MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE0LTA5LTExICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBNZXNzYWdlIGdlbmVy
YXRpb24gc2NyaXB0cyBzaG91bGQgYmUgaW5zdGFsbGVkIGluIFdlYktpdC5mcmFtZXdvcmsKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjc3MQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBNb3ZlZCB0aGUgQ29weSBNZXNzYWdlIEdlbmVyYXRp
b24gU2NyaXB0cyBidWlsZCBwaGFzZQorICAgICAgICBmcm9tIHRoZSBXZWJLaXQyIHRhcmdldCB0
byB0aGUgV2ViS2l0IHRhcmdldCBhbmQgY2hhbmdlZCBpdHMgZGVzdGluYXRpb24gdG8KKyAgICAg
ICAgV2ViS2l0LmZyYW1ld29yay9Qcml2YXRlSGVhZGVycy9TY3JpcHRzLiBSZW1vdmVkIHRoZSBS
ZW1vdmUgQ29tcGlsZWQgUHl0aG9uIEZpbGVzIGJ1aWxkCisgICAgICAgIHBoYXNlLCBzaW5jZSBj
b21waWxlZCBmaWxlcyBubyBsb25nZXIgZ2V0IGNvcGllZC4gQWRkZWQgYSBNaWdyYXRlIFNjcmlw
dHMgdG8gV2ViS2l0MiBidWlsZAorICAgICAgICBwaGFzZSB0aGF0IG1haW50YWlucyBhIGNvcHkg
b2YgdGhlIHNjcmlwdHMgaW4gV2ViS2l0Mi5mcmFtZXdvcmsvUHJpdmF0ZUhlYWRlcnMvd2Via2l0
MiwKKyAgICAgICAgd2hlcmUgc29tZSBwcm9qZWN0cyBzdGlsbCBleHBlY3QgdG8gZmluZCB0aGVt
LgorCiAyMDE0LTA5LTExICBCZWFyIFRyYXZpcyAgPGJldHJhdmlzQGFkb2JlLmNvbT4KIAogICAg
ICAgICBbQ1NTIEZvbnQgTG9hZGluZ10gRW5hYmxlIENTUyBGb250IExvYWRpbmcgb24gTWFjCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNzM0OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4OTgsNyArMTg5OCw3IEBACiAJ
CTFBMDdEMkY3MTkxOUIzNjUwMEVDREExNiAvKiBDb3B5IE1lc3NhZ2UgR2VuZXJhdGlvbiBTY3Jp
cHRzICovID0gewogCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0
aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlkc3RQYXRoID0gUHJpdmF0ZUhlYWRlcnMvd2Via2l0
MjsKKwkJCWRzdFBhdGggPSBQcml2YXRlSGVhZGVycy9TY3JpcHRzOwogCQkJZHN0U3ViZm9sZGVy
U3BlYyA9IDE7CiAJCQlmaWxlcyA9ICgKIAkJCQkxQTA3RDJGODE5MTlCM0E5MDBFQ0RBMTYgLyog
X19pbml0X18ucHkgaW4gQ29weSBNZXNzYWdlIEdlbmVyYXRpb24gU2NyaXB0cyAqLywKQEAgLTc4
NDgsMTEgKzc4NDgsMTEgQEAKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxQTYyODBFMzE5
MTk5N0JFMDA2QUQ5RjkgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVU
YXJnZXQgIldlYktpdDIiICovOwogCQkJYnVpbGRQaGFzZXMgPSAoCiAJCQkJMUFEQUUxMzAxOTE5
QTlDNjAwRjQ4RTIxIC8qIFVwZGF0ZSBJbmZvLnBsaXN0IHdpdGggdmVyc2lvbiBpbmZvcm1hdGlv
biAqLywKLQkJCQkxQTA3RDJGNzE5MTlCMzY1MDBFQ0RBMTYgLyogQ29weSBNZXNzYWdlIEdlbmVy
YXRpb24gU2NyaXB0cyAqLywKIAkJCQkxQTYyODBDQjE5MTk5N0JEMDA2QUQ5RjkgLyogU291cmNl
cyAqLywKIAkJCQkxQTYyODBDQzE5MTk5N0JEMDA2QUQ5RjkgLyogRnJhbWV3b3JrcyAqLywKIAkJ
CQkxQTYyODBDRDE5MTk5N0JEMDA2QUQ5RjkgLyogSGVhZGVycyAqLywKIAkJCQkxQURBRTEyQzE5
MTlBNDNGMDBGNDhFMjEgLyogTWlncmF0ZSBIZWFkZXJzIHRvIFdlYktpdDIgKi8sCisJCQkJMzc4
QjBCMDExOUMyN0QzQzAwMzM0ODc3IC8qIE1pZ3JhdGUgU2NyaXB0cyB0byBXZWJLaXQyICovLAog
CQkJKTsKIAkJCWJ1aWxkUnVsZXMgPSAoCiAJCQkpOwpAQCAtNzk4NSw3ICs3OTg1LDcgQEAKIAkJ
CQkxQTFEMjExNTE5MUQ5NjM4MDAwMTYxOUYgLyogUmV3cml0ZSBBdmFpbGFiaWxpdHkgTWFjcm9z
IGluIEZyYW1ld29yayBIZWFkZXJzICovLAogCQkJCThEQzJFRjUyMDQ4NkE2OTQwMDk4QjIxNiAv
KiBSZXNvdXJjZXMgKi8sCiAJCQkJN0NCMTZGRUUxNzI0QkEwNTAwN0EwQTk1IC8qIENvcHkgUGx1
Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovLAotCQkJCTVEMUEyMzkyMTVFNzYwNTkwMDIzRTk4MSAv
KiBSZW1vdmUgQ29tcGlsZWQgUHl0aG9uIEZpbGVzICovLAorCQkJCTFBMDdEMkY3MTkxOUIzNjUw
MEVDREExNiAvKiBDb3B5IE1lc3NhZ2UgR2VuZXJhdGlvbiBTY3JpcHRzICovLAogCQkJCThEQzJF
RjU0MDQ4NkE2OTQwMDk4QjIxNiAvKiBTb3VyY2VzICovLAogCQkJCThEQzJFRjU2MDQ4NkE2OTQw
MDk4QjIxNiAvKiBGcmFtZXdvcmtzICovLAogCQkJCTVERjQwOEM1MTMxREQ0NjcwMDEzMDA3MSAv
KiBDaGVjayBGb3IgV2VhayBWVGFibGVzIGFuZCBFeHRlcm5hbHMgKi8sCkBAIC04NDg2LDE5ICs4
NDg2LDE5IEBACiAJCQlzaGVsbFBhdGggPSAvYmluL3NoOwogCQkJc2hlbGxTY3JpcHQgPSAiV0tC
QVNFX0g9JHtUQVJHRVRfQlVJTERfRElSfS8ke1BSSVZBVEVfSEVBREVSU19GT0xERVJfUEFUSH0v
V0tCYXNlLmhcblxudW5pZmRlZiAtQiAtRF9fQVBQTEVfXyAtVUJVSUxESU5HX0dUS19fIC1VV1RG
X1VTRV9TT1VQIC1VQlVJTERJTkdfRUZMX18gLVVCVUlMRElOR19RVF9fIC1vICR7V0tCQVNFX0h9
LnVuaWZkZWYgJHtXS0JBU0VfSH1cblxuY2FzZSAkPyBpblxuMClcbiAgICBybSAke1dLQkFTRV9I
fS51bmlmZGVmXG4gICAgOztcbjEpXG4gICAgbXYgJHtXS0JBU0VfSH17LnVuaWZkZWYsfVxuICAg
IDs7XG4qKVxuICAgIGV4aXQgMVxuZXNhY1xuIjsKIAkJfTsKLQkJNUQxQTIzOTIxNUU3NjA1OTAw
MjNFOTgxIC8qIFJlbW92ZSBDb21waWxlZCBQeXRob24gRmlsZXMgKi8gPSB7CisJCTM3OEIwQjAx
MTlDMjdEM0MwMDMzNDg3NyAvKiBNaWdyYXRlIFNjcmlwdHMgdG8gV2ViS2l0MiAqLyA9IHsKIAkJ
CWlzYSA9IFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCSk7CiAJCQlpbnB1dFBhdGhzID0gKAogCQkJKTsK
LQkJCW5hbWUgPSAiUmVtb3ZlIENvbXBpbGVkIFB5dGhvbiBGaWxlcyI7CisJCQluYW1lID0gIk1p
Z3JhdGUgU2NyaXB0cyB0byBXZWJLaXQyIjsKIAkJCW91dHB1dFBhdGhzID0gKAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQkJc2hlbGxQYXRoID0g
L2Jpbi9zaDsKLQkJCXNoZWxsU2NyaXB0ID0gImZpbmQgXCIke0JVSUxUX1BST0RVQ1RTX0RJUn0v
JHtQUklWQVRFX0hFQURFUlNfRk9MREVSX1BBVEh9XCIgLW5hbWUgJyoucHljJyAtZGVsZXRlIjsK
KwkJCXNoZWxsU2NyaXB0ID0gImlmIFsgXCIke0FDVElPTn1cIiA9IFwiYnVpbGRcIiAtbyBcIiR7
QUNUSU9OfVwiID0gXCJpbnN0YWxsXCIgLW8gXCIke0FDVElPTn1cIiA9IFwiaW5zdGFsbGhkcnNc
IiBdOyB0aGVuXG4gICAgcnN5bmMgLWEgXCIke0JVSUxUX1BST0RVQ1RTX0RJUn0vV2ViS2l0LmZy
YW1ld29yay9Qcml2YXRlSGVhZGVycy9TY3JpcHRzL1wiIFwiJHtUQVJHRVRfQlVJTERfRElSfS8k
e1BSSVZBVEVfSEVBREVSU19GT0xERVJfUEFUSH0vd2Via2l0MlwiXG5maVxuIjsKIAkJfTsKIAkJ
NURGNDA4QzUxMzFERDQ2NzAwMTMwMDcxIC8qIENoZWNrIEZvciBXZWFrIFZUYWJsZXMgYW5kIEV4
dGVybmFscyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238031</attachid>
            <date>2014-09-12 09:21:33 -0700</date>
            <delta_ts>2014-09-12 10:19:50 -0700</delta_ts>
            <desc>Copy the scripts into WebKit2.framework/PrivateHeaders/Scripts/webkit</desc>
            <filename>bug-136771-20140912092129.patch</filename>
            <type>text/plain</type>
            <size>248991</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzU2MCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTA5LTEyICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBNZXNzYWdlIGdlbmVy
YXRpb24gc2NyaXB0cyBzaG91bGQgYmUgaW5zdGFsbGVkIGluIFdlYktpdC5mcmFtZXdvcmsKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjc3MQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRGVyaXZlZFNv
dXJjZXMubWFrZTogVXBkYXRlZCBmb3IgcmVuYW1lIG9mIFNjcmlwdHMvd2Via2l0MiB0byBTY3Jp
cHRzL3dlYmtpdC4KKyAgICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlLW1lc3NhZ2UtcmVjZWl2ZXIu
cHk6CisgICAgICAgIChtYWluKTogVXBkYXRlZCBmb3IgcmVuYW1lIGZyb20gd2Via2l0MiB0byB3
ZWJraXQuCisgICAgICAgICogU2NyaXB0cy9nZW5lcmF0ZS1tZXNzYWdlcy1oZWFkZXIucHk6Cisg
ICAgICAgIChtYWluKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXQ6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXQvbWVzc2FnZXMucHk6IFVwZGF0ZWQgZm9yIHJlbmFtZS4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdC9wYXJzZXIucHk6IERpdHRvLgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajogTW92ZWQgdGhlIENvcHkgTWVzc2FnZSBHZW5lcmF0aW9uIFNjcmlwdHMg
YnVpbGQgcGhhc2UKKyAgICAgICAgZnJvbSB0aGUgV2ViS2l0MiB0YXJnZXQgdG8gdGhlIFdlYktp
dCB0YXJnZXQgYW5kIGNoYW5nZWQgaXRzIGRlc3RpbmF0aW9uIHRvCisgICAgICAgIFdlYktpdC5m
cmFtZXdvcmsvUHJpdmF0ZUhlYWRlcnMvU2NyaXB0cy93ZWJraXQuIFJlbW92ZWQgdGhlIFJlbW92
ZSBDb21waWxlZCBQeXRob24gRmlsZXMKKyAgICAgICAgYnVpbGQgcGhhc2UsIHNpbmNlIGNvbXBp
bGVkIGZpbGVzIG5vIGxvbmdlciBnZXQgY29waWVkLgorCiAyMDE0LTA5LTEyICBNaWNoYWVsIENh
dGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBVc2UgYSBu
aWNlciBIVFRQIGF1dGhlbnRpY2F0aW9uIGRpYWxvZwpJbmRleDogU291cmNlL1dlYktpdDIvRGVy
aXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291
cmNlcy5tYWtlCShyZXZpc2lvbiAxNzM0OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291
cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsMTAgKzE0NCwxMCBAQCBNRVNTQUdFX1JF
Q0VJVkVSUyA9IFwKIFNDUklQVFMgPSBcCiAgICAgJChXZWJLaXQyKS9TY3JpcHRzL2dlbmVyYXRl
LW1lc3NhZ2UtcmVjZWl2ZXIucHkgXAogICAgICQoV2ViS2l0MikvU2NyaXB0cy9nZW5lcmF0ZS1t
ZXNzYWdlcy1oZWFkZXIucHkgXAotICAgICQoV2ViS2l0MikvU2NyaXB0cy93ZWJraXQyL19faW5p
dF9fLnB5IFwKLSAgICAkKFdlYktpdDIpL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weSBcCi0g
ICAgJChXZWJLaXQyKS9TY3JpcHRzL3dlYmtpdDIvbW9kZWwucHkgXAotICAgICQoV2ViS2l0Mikv
U2NyaXB0cy93ZWJraXQyL3BhcnNlci5weSBcCisgICAgJChXZWJLaXQyKS9TY3JpcHRzL3dlYmtp
dC9fX2luaXRfXy5weSBcCisgICAgJChXZWJLaXQyKS9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5w
eSBcCisgICAgJChXZWJLaXQyKS9TY3JpcHRzL3dlYmtpdC9tb2RlbC5weSBcCisgICAgJChXZWJL
aXQyKS9TY3JpcHRzL3dlYmtpdC9wYXJzZXIucHkgXAogIwogCiAuUEhPTlkgOiBhbGwKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtbWVzc2FnZS1yZWNlaXZlci5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL2dlbmVyYXRlLW1lc3NhZ2UtcmVjZWl2
ZXIucHkJKHJldmlzaW9uIDE3MzQ5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJh
dGUtbWVzc2FnZS1yZWNlaXZlci5weQkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAog
ZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAogaW1wb3J0IHN5cwogCi1pbXBv
cnQgd2Via2l0Mi5tZXNzYWdlcworaW1wb3J0IHdlYmtpdC5tZXNzYWdlcwogCiAKIGRlZiBtYWlu
KGFyZ3Y9Tm9uZSk6CkBAIC0zMyw4ICszMyw4IEBAIGRlZiBtYWluKGFyZ3Y9Tm9uZSk6CiAgICAg
ICAgIGFyZ3YgPSBzeXMuYXJndgogICAgIGlucHV0X3BhdGggPSBhcmd2WzFdCiAgICAgd2l0aCBv
cGVuKGlucHV0X3BhdGgpIGFzIGlucHV0X2ZpbGU6Ci0gICAgICAgICMgUHl0aG9uIDMsIGNoYW5n
ZSB0bzogIHByaW50KHdlYmtpdDIubWVzc2FnZXMuZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKGlu
cHV0X2ZpbGUpLCBlbmQ9JycpCi0gICAgICAgIHN5cy5zdGRvdXQud3JpdGUod2Via2l0Mi5tZXNz
YWdlcy5nZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIoaW5wdXRfZmlsZSkpCisgICAgICAgICMgUHl0
aG9uIDMsIGNoYW5nZSB0bzogIHByaW50KHdlYmtpdC5tZXNzYWdlcy5nZW5lcmF0ZV9tZXNzYWdl
X2hhbmRsZXIoaW5wdXRfZmlsZSksIGVuZD0nJykKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZSh3
ZWJraXQubWVzc2FnZXMuZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKGlucHV0X2ZpbGUpKQogICAg
IHJldHVybiAwCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9TY3JpcHRzL2dlbmVyYXRlLW1lc3NhZ2VzLWhlYWRlci5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TY3JpcHRzL2dlbmVyYXRlLW1lc3NhZ2VzLWhlYWRlci5weQkocmV2aXNp
b24gMTczNDkxKQorKysgU291cmNlL1dlYktpdDIvU2NyaXB0cy9nZW5lcmF0ZS1tZXNzYWdlcy1o
ZWFkZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIGZyb20gX19mdXR1cmVf
XyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKIGltcG9ydCBzeXMKIAotaW1wb3J0IHdlYmtpdDIubWVz
c2FnZXMKK2ltcG9ydCB3ZWJraXQubWVzc2FnZXMKIAogCiBkZWYgbWFpbihhcmd2PU5vbmUpOgpA
QCAtMzMsOCArMzMsOCBAQCBkZWYgbWFpbihhcmd2PU5vbmUpOgogICAgICAgICBhcmd2ID0gc3lz
LmFyZ3YKICAgICBpbnB1dF9wYXRoID0gYXJndlsxXQogICAgIHdpdGggb3BlbihpbnB1dF9wYXRo
KSBhcyBpbnB1dF9maWxlOgotICAgICAgICAjIFB5dGhvbiAzLCBjaGFuZ2UgdG86ICBwcmludCh3
ZWJraXQyLm1lc3NhZ2VzLmdlbmVyYXRlX21lc3NhZ2VzX2hlYWRlcihpbnB1dF9maWxlKSwgZW5k
PScnKQotICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHdlYmtpdDIubWVzc2FnZXMuZ2VuZXJhdGVf
bWVzc2FnZXNfaGVhZGVyKGlucHV0X2ZpbGUpKQorICAgICAgICAjIFB5dGhvbiAzLCBjaGFuZ2Ug
dG86ICBwcmludCh3ZWJraXQubWVzc2FnZXMuZ2VuZXJhdGVfbWVzc2FnZXNfaGVhZGVyKGlucHV0
X2ZpbGUpLCBlbmQ9JycpCisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUod2Via2l0Lm1lc3NhZ2Vz
LmdlbmVyYXRlX21lc3NhZ2VzX2hlYWRlcihpbnB1dF9maWxlKSkKICAgICByZXR1cm4gMAogCiBp
ZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpJbmRleDogU291cmNlL1dlYktpdDIvU2NyaXB0cy93
ZWJraXQyL0xlZ2FjeU1lc3NhZ2VSZWNlaXZlci1leHBlY3RlZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL0xlZ2FjeU1lc3NhZ2VSZWNlaXZlci1leHBl
Y3RlZC5jcHAJKHJldmlzaW9uIDE3MzQ5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Vi
a2l0Mi9MZWdhY3lNZXNzYWdlUmVjZWl2ZXItZXhwZWN0ZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDIyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
Ci0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lm
IChFTkFCTEUoV0VCS0lUMikgJiYgKE5FU1RFRF9NQVNURVJfQ09ORElUSU9OIHx8IE1BU1RFUl9P
UiAmJiBNQVNURVJfQU5EKSkKLQotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLQotI2luY2x1ZGUgIkFy
Z3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2lmIEVOQUJMRShERVBS
RUNBVEVEX0ZFQVRVUkUpIHx8IEVOQUJMRShFWFBFUklNRU5UQUxfRkVBVFVSRSkKLSNpbmNsdWRl
ICJEdW1teVR5cGUuaCIKLSNlbmRpZgotI2luY2x1ZGUgIkhhbmRsZU1lc3NhZ2UuaCIKLSNpZiBQ
TEFURk9STShNQUMpCi0jaW5jbHVkZSAiTWFjaFBvcnQuaCIKLSNlbmRpZgotI2luY2x1ZGUgIk1l
c3NhZ2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgiCi0jaWYgKEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIChORVNURURfTUVT
U0FHRV9DT05ESVRJT04gJiYgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTikpIHx8IChFTkFC
TEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9OIHx8IFNPTUVfT1RI
RVJfTUVTU0FHRV9DT05ESVRJT04pKQotI2luY2x1ZGUgIldlYkV2ZW50LmgiCi0jZW5kaWYKLSNp
bmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc1N0b3Jl
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaWYgUExBVEZPUk0oTUFD
KQotI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8
V2ViQ29yZS9QbHVnaW5EYXRhLmg+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIE1lc3NhZ2VzIHsKLQotbmFtZXNwYWNlIFdlYlBhZ2Ug
ewotCi1HZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5OjpEZWxheWVkUmVw
bHkoUGFzc1JlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24sIHN0ZDo6dW5pcXVlX3B0
cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiBlbmNvZGVyKQotICAgIDogbV9jb25uZWN0aW9uKGNvbm5l
Y3Rpb24pCi0gICAgLCBtX2VuY29kZXIoV1RGOjptb3ZlKGVuY29kZXIpKQotewotfQotCi1HZXRQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5Ojp+RGVsYXllZFJlcGx5KCkKLXsK
LSAgICBBU1NFUlQoIW1fY29ubmVjdGlvbik7Ci19Ci0KLWJvb2wgR2V0UGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb246OkRlbGF5ZWRSZXBseTo6c2VuZChjb25zdCBJUEM6OkNvbm5lY3Rpb246OkhhbmRs
ZSYgY29ubmVjdGlvbkhhbmRsZSkKLXsKLSAgICBBU1NFUlQobV9lbmNvZGVyKTsKLSAgICAqbV9l
bmNvZGVyIDw8IGNvbm5lY3Rpb25IYW5kbGU7Ci0gICAgYm9vbCBfcmVzdWx0ID0gbV9jb25uZWN0
aW9uLT5zZW5kU3luY1JlcGx5KFdURjo6bW92ZShtX2VuY29kZXIpKTsKLSAgICBtX2Nvbm5lY3Rp
b24gPSBudWxscHRyOwotICAgIHJldHVybiBfcmVzdWx0OwotfQotCi1UZXN0TXVsdGlwbGVBdHRy
aWJ1dGVzOjpEZWxheWVkUmVwbHk6OkRlbGF5ZWRSZXBseShQYXNzUmVmUHRyPElQQzo6Q29ubmVj
dGlvbj4gY29ubmVjdGlvbiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+IGVu
Y29kZXIpCi0gICAgOiBtX2Nvbm5lY3Rpb24oY29ubmVjdGlvbikKLSAgICAsIG1fZW5jb2RlcihX
VEY6Om1vdmUoZW5jb2RlcikpCi17Ci19Ci0KLVRlc3RNdWx0aXBsZUF0dHJpYnV0ZXM6OkRlbGF5
ZWRSZXBseTo6fkRlbGF5ZWRSZXBseSgpCi17Ci0gICAgQVNTRVJUKCFtX2Nvbm5lY3Rpb24pOwot
fQotCi1ib29sIFRlc3RNdWx0aXBsZUF0dHJpYnV0ZXM6OkRlbGF5ZWRSZXBseTo6c2VuZCgpCi17
Ci0gICAgQVNTRVJUKG1fZW5jb2Rlcik7Ci0gICAgYm9vbCBfcmVzdWx0ID0gbV9jb25uZWN0aW9u
LT5zZW5kU3luY1JlcGx5KFdURjo6bW92ZShtX2VuY29kZXIpKTsKLSAgICBtX2Nvbm5lY3Rpb24g
PSBudWxscHRyOwotICAgIHJldHVybiBfcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJQ
YWdlCi0KLX0gLy8gbmFtZXNwYWNlIE1lc3NhZ2VzCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12
b2lkIFdlYlBhZ2U6OmRpZFJlY2VpdmVXZWJQYWdlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qLCBJ
UEM6Ok1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VO
YW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRVUkw6Om5hbWUoKSkgewotICAgICAgICBJ
UEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRVUkw+KGRlY29kZXIsIHRo
aXMsICZXZWJQYWdlOjpsb2FkVVJMKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2Fn
ZXM6OldlYlBhZ2U6OkxvYWRTb21ldGhpbmc6Om5hbWUoKSkgewotICAgICAgICBJUEM6OmhhbmRs
ZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRTb21ldGhpbmc+KGRlY29kZXIsIHRoaXMs
ICZXZWJQYWdlOjpsb2FkU29tZXRoaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRp
ZgotI2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9O
IHx8IFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKQotICAgIGlmIChkZWNvZGVyLm1lc3Nh
Z2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNoRXZlbnQ6Om5hbWUoKSkgewotICAg
ICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNoRXZlbnQ+KGRl
Y29kZXIsIHRoaXMsICZXZWJQYWdlOjp0b3VjaEV2ZW50KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNlbmRpZgotI2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0Vf
Q09ORElUSU9OICYmIFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKQotICAgIGlmIChkZWNv
ZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkFkZEV2ZW50OjpuYW1lKCkp
IHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpBZGRFdmVu
dD4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OmFkZEV2ZW50KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSNlbmRpZgotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgaWYgKGRlY29kZXIu
bWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFNvbWV0aGluZ0Vsc2U6Om5h
bWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6Okxv
YWRTb21ldGhpbmdFbHNlPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6bG9hZFNvbWV0aGluZ0Vs
c2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKGRlY29kZXIubWVz
c2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6RGlkUmVjZWl2ZVBvbGljeURlY2lzaW9u
OjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdl
OjpEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjpkaWRS
ZWNlaXZlUG9saWN5RGVjaXNpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkNsb3NlOjpuYW1lKCkp
IHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpDbG9zZT4o
ZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OmNsb3NlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpQcmVm
ZXJlbmNlc0RpZENoYW5nZTo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxN
ZXNzYWdlczo6V2ViUGFnZTo6UHJlZmVyZW5jZXNEaWRDaGFuZ2U+KGRlY29kZXIsIHRoaXMsICZX
ZWJQYWdlOjpwcmVmZXJlbmNlc0RpZENoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6U2VuZERv
dWJsZUFuZEZsb2F0OjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3Nh
Z2VzOjpXZWJQYWdlOjpTZW5kRG91YmxlQW5kRmxvYXQ+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdl
OjpzZW5kRG91YmxlQW5kRmxvYXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OlNlbmRJbnRzOjpuYW1l
KCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5k
SW50cz4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OnNlbmRJbnRzKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQ
YWdlOjpUZXN0UGFyYW1ldGVyQXR0cmlidXRlczo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFu
ZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6VGVzdFBhcmFtZXRlckF0dHJpYnV0ZXM+KGRl
Y29kZXIsIHRoaXMsICZXZWJQYWdlOjp0ZXN0UGFyYW1ldGVyQXR0cmlidXRlcyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdl
czo6V2ViUGFnZTo6VGVtcGxhdGVUZXN0OjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVN
ZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpUZW1wbGF0ZVRlc3Q+KGRlY29kZXIsIHRoaXMsICZX
ZWJQYWdlOjp0ZW1wbGF0ZVRlc3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OlNldFZpZGVvTGF5ZXJJ
RDo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFn
ZTo6U2V0VmlkZW9MYXllcklEPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6c2V0VmlkZW9MYXll
cklEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYg
KGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ3JlYXRlV2Vi
UHJvY2Vzc0Nvbm5lY3Rpb246Om5hbWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8
TWVzc2FnZXM6OldlYlBhZ2U6OkRpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uPihkZWNvZGVy
LCB0aGlzLCAmV2ViUGFnZTo6ZGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb24pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0jaWYgRU5BQkxFKERFUFJFQ0FURURfRkVBVFVSRSkK
LSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpEZXBy
ZWNhdGVkT3BlcmF0aW9uOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1l
c3NhZ2VzOjpXZWJQYWdlOjpEZXByZWNhdGVkT3BlcmF0aW9uPihkZWNvZGVyLCB0aGlzLCAmV2Vi
UGFnZTo6ZGVwcmVjYXRlZE9wZXJhdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5k
aWYKLSNpZiBFTkFCTEUoRVhQRVJJTUVOVEFMX0ZFQVRVUkUpCi0gICAgaWYgKGRlY29kZXIubWVz
c2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6RXhwZXJpbWVudGFsT3BlcmF0aW9uOjpu
YW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpF
eHBlcmltZW50YWxPcGVyYXRpb24+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjpleHBlcmltZW50
YWxPcGVyYXRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgVU5VU0VE
X1BBUkFNKGRlY29kZXIpOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFdl
YlBhZ2U6OmRpZFJlY2VpdmVTeW5jV2ViUGFnZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiBjb25u
ZWN0aW9uLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBD
OjpNZXNzYWdlRW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKLXsKLSAgICBpZiAoZGVjb2Rlci5tZXNz
YWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpDcmVhdGVQbHVnaW46Om5hbWUoKSkgewot
ICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkNyZWF0ZVBsdWdp
bj4oZGVjb2RlciwgKnJlcGx5RW5jb2RlciwgdGhpcywgJldlYlBhZ2U6OmNyZWF0ZVBsdWdpbik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9
PSBNZXNzYWdlczo6V2ViUGFnZTo6UnVuSmF2YVNjcmlwdEFsZXJ0OjpuYW1lKCkpIHsKLSAgICAg
ICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpSdW5KYXZhU2NyaXB0QWxl
cnQ+KGRlY29kZXIsICpyZXBseUVuY29kZXIsIHRoaXMsICZXZWJQYWdlOjpydW5KYXZhU2NyaXB0
QWxlcnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VO
YW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkdldFBsdWdpbnM6Om5hbWUoKSkgewotICAgICAg
ICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkdldFBsdWdpbnM+KGRlY29k
ZXIsICpyZXBseUVuY29kZXIsIHRoaXMsICZXZWJQYWdlOjpnZXRQbHVnaW5zKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2Vz
OjpXZWJQYWdlOjpHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6bmFtZSgpKSB7Ci0gICAgICAg
IElQQzo6aGFuZGxlTWVzc2FnZURlbGF5ZWQ8TWVzc2FnZXM6OldlYlBhZ2U6OkdldFBsdWdpblBy
b2Nlc3NDb25uZWN0aW9uPihjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIsIHRoaXMs
ICZXZWJQYWdlOjpnZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFn
ZTo6VGVzdE11bHRpcGxlQXR0cmlidXRlczo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxl
TWVzc2FnZURlbGF5ZWQ8TWVzc2FnZXM6OldlYlBhZ2U6OlRlc3RNdWx0aXBsZUF0dHJpYnV0ZXM+
KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2RlciwgdGhpcywgJldlYlBhZ2U6OnRlc3RN
dWx0aXBsZUF0dHJpYnV0ZXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2lmIFBMQVRGT1JN
KE1BQykKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdl
OjpJbnRlcnByZXRLZXlFdmVudDo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2Fn
ZTxNZXNzYWdlczo6V2ViUGFnZTo6SW50ZXJwcmV0S2V5RXZlbnQ+KGRlY29kZXIsICpyZXBseUVu
Y29kZXIsIHRoaXMsICZXZWJQYWdlOjppbnRlcnByZXRLZXlFdmVudCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYKLSAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7Ci0gICAgVU5VU0VE
X1BBUkFNKHJlcGx5RW5jb2Rlcik7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gKEVOQUJMRShXRUJLSVQyKSAmJiAoTkVT
VEVEX01BU1RFUl9DT05ESVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKQpJbmRleDog
U291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL0xlZ2FjeU1lc3NhZ2VzLWV4cGVjdGVkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL0xlZ2FjeU1lc3Nh
Z2VzLWV4cGVjdGVkLmgJKHJldmlzaW9uIDE3MzQ5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1Njcmlw
dHMvd2Via2l0Mi9MZWdhY3lNZXNzYWdlcy1leHBlY3RlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDU5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0g
KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViUGFnZU1lc3NhZ2VzX2gKLSNk
ZWZpbmUgV2ViUGFnZU1lc3NhZ2VzX2gKLQotI2lmIChFTkFCTEUoV0VCS0lUMikgJiYgKE5FU1RF
RF9NQVNURVJfQ09ORElUSU9OIHx8IE1BU1RFUl9PUiAmJiBNQVNURVJfQU5EKSkKLQotI2luY2x1
ZGUgIkFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJNZXNz
YWdlRW5jb2Rlci5oIgotI2luY2x1ZGUgIlBsdWdpbi5oIgotI2luY2x1ZGUgIlN0cmluZ1JlZmVy
ZW5jZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvS2V5Ym9hcmRFdmVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgot
I2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJUEMgewotICAgIGNsYXNz
IENvbm5lY3Rpb247Ci0gICAgY2xhc3MgRHVtbXlUeXBlOwotICAgIGNsYXNzIE1hY2hQb3J0Owot
fQotCi1uYW1lc3BhY2UgV1RGIHsKLSAgICBjbGFzcyBTdHJpbmc7Ci19Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotICAgIHN0cnVjdCBXZWJQcmVmZXJlbmNlc1N0b3JlOwotICAgIGNsYXNzIFdlYlRv
dWNoRXZlbnQ7Ci19Ci0KLW5hbWVzcGFjZSBNZXNzYWdlcyB7Ci1uYW1lc3BhY2UgV2ViUGFnZSB7
Ci0KLXN0YXRpYyBpbmxpbmUgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFt
ZSgpCi17Ci0gICAgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJXZWJQYWdlIik7Ci19Ci0K
LWNsYXNzIExvYWRVUkwgewotcHVibGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxTdHJpbmc+
IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJO
YW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6
U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiTG9h
ZFVSTCIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBl
eHBsaWNpdCBMb2FkVVJMKGNvbnN0IFN0cmluZyYgdXJsKQotICAgICAgICA6IG1fYXJndW1lbnRz
KHVybCkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTxjb25zdCBTdHJpbmcm
PiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTxjb25zdCBTdHJpbmcmPiBtX2FyZ3Vt
ZW50czsKLX07Ci0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotY2xhc3MgTG9hZFNvbWV0aGlu
ZyB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFN0cmluZz4gRGVjb2RlVHlwZTsK
LQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVy
biBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVu
Y2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJMb2FkU29tZXRoaW5nIik7
IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIGV4cGxpY2l0
IExvYWRTb21ldGhpbmcoY29uc3QgU3RyaW5nJiB1cmwpCi0gICAgICAgIDogbV9hcmd1bWVudHMo
dXJsKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+
JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+IG1fYXJndW1l
bnRzOwotfTsKLSNlbmRpZgotCi0jaWYgKEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIChORVNURURf
TUVTU0FHRV9DT05ESVRJT04gfHwgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTikpCi1jbGFz
cyBUb3VjaEV2ZW50IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8V2ViS2l0OjpX
ZWJUb3VjaEV2ZW50PiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJl
bmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAg
IHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdS
ZWZlcmVuY2UoIlRvdWNoRXZlbnQiKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9
IGZhbHNlOwotCi0gICAgZXhwbGljaXQgVG91Y2hFdmVudChjb25zdCBXZWJLaXQ6OldlYlRvdWNo
RXZlbnQmIGV2ZW50KQotICAgICAgICA6IG1fYXJndW1lbnRzKGV2ZW50KQotICAgIHsKLSAgICB9
Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0IFdlYktpdDo6V2ViVG91Y2hFdmVudCY+JiBh
cmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IFdlYktpdDo6V2ViVG91Y2hFdmVu
dCY+IG1fYXJndW1lbnRzOwotfTsKLSNlbmRpZgotCi0jaWYgKEVOQUJMRShUT1VDSF9FVkVOVFMp
ICYmIChORVNURURfTUVTU0FHRV9DT05ESVRJT04gJiYgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJ
VElPTikpCi1jbGFzcyBBZGRFdmVudCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxl
PFdlYktpdDo6V2ViVG91Y2hFdmVudD4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0
cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1l
KCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQ
Qzo6U3RyaW5nUmVmZXJlbmNlKCJBZGRFdmVudCIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBBZGRFdmVudChjb25zdCBXZWJLaXQ6Oldl
YlRvdWNoRXZlbnQmIGV2ZW50KQotICAgICAgICA6IG1fYXJndW1lbnRzKGV2ZW50KQotICAgIHsK
LSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0IFdlYktpdDo6V2ViVG91Y2hFdmVu
dCY+JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRz
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IFdlYktpdDo6V2ViVG91
Y2hFdmVudCY+IG1fYXJndW1lbnRzOwotfTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKLWNsYXNzIExvYWRTb21ldGhpbmdFbHNlIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0
ZDo6dHVwbGU8U3RyaW5nPiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVm
ZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQot
ICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJp
bmdSZWZlcmVuY2UoIkxvYWRTb21ldGhpbmdFbHNlIik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIGV4cGxpY2l0IExvYWRTb21ldGhpbmdFbHNlKGNvbnN0
IFN0cmluZyYgdXJsKQotICAgICAgICA6IG1fYXJndW1lbnRzKHVybCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgY29uc3Qgc3RkOjp0dXBsZTxjb25zdCBTdHJpbmcmPiYgYXJndW1lbnRzKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgc3RkOjp0dXBsZTxjb25zdCBTdHJpbmcmPiBtX2FyZ3VtZW50czsKLX07Ci0jZW5kaWYKLQot
Y2xhc3MgRGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0
ZDo6dHVwbGU8dWludDY0X3QsIHVpbnQ2NF90LCB1aW50MzJfdD4gRGVjb2RlVHlwZTsKLQotICAg
IHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNz
YWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFt
ZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJEaWRSZWNlaXZlUG9saWN5RGVjaXNp
b24iKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgRGlk
UmVjZWl2ZVBvbGljeURlY2lzaW9uKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IGxpc3RlbmVy
SUQsIHVpbnQzMl90IHBvbGljeUFjdGlvbikKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhmcmFtZUlE
LCBsaXN0ZW5lcklELCBwb2xpY3lBY3Rpb24pCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0
ZDo6dHVwbGU8dWludDY0X3QsIHVpbnQ2NF90LCB1aW50MzJfdD4mIGFyZ3VtZW50cygpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIHN0ZDo6dHVwbGU8dWludDY0X3QsIHVpbnQ2NF90LCB1aW50MzJfdD4gbV9hcmd1bWVudHM7
Ci19OwotCi1jbGFzcyBDbG9zZSB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPD4g
RGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5h
bWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpT
dHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJDbG9z
ZSIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBjb25z
dCBzdGQ6OnR1cGxlPD4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8PiBtX2FyZ3Vt
ZW50czsKLX07Ci0KLWNsYXNzIFByZWZlcmVuY2VzRGlkQ2hhbmdlIHsKLXB1YmxpYzoKLSAgICB0
eXBlZGVmIHN0ZDo6dHVwbGU8V2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlPiBEZWNvZGVUeXBl
OwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0
dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIlByZWZlcmVuY2VzRGlk
Q2hhbmdlIik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAg
IGV4cGxpY2l0IFByZWZlcmVuY2VzRGlkQ2hhbmdlKGNvbnN0IFdlYktpdDo6V2ViUHJlZmVyZW5j
ZXNTdG9yZSYgc3RvcmUpCi0gICAgICAgIDogbV9hcmd1bWVudHMoc3RvcmUpCi0gICAgewotICAg
IH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29uc3QgV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0
b3JlJj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8Y29uc3QgV2ViS2l0OjpXZWJQ
cmVmZXJlbmNlc1N0b3JlJj4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBTZW5kRG91YmxlQW5k
RmxvYXQgewotcHVibGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxkb3VibGUsIGZsb2F0PiBE
ZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFt
ZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0
cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIlNlbmRE
b3VibGVBbmRGbG9hdCIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7
Ci0KLSAgICBTZW5kRG91YmxlQW5kRmxvYXQoZG91YmxlIGQsIGZsb2F0IGYpCi0gICAgICAgIDog
bV9hcmd1bWVudHMoZCwgZikKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTxk
b3VibGUsIGZsb2F0PiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTxkb3VibGUsIGZs
b2F0PiBtX2FyZ3VtZW50czsKLX07Ci0KLWNsYXNzIFNlbmRJbnRzIHsKLXB1YmxpYzoKLSAgICB0
eXBlZGVmIHN0ZDo6dHVwbGU8VmVjdG9yPHVpbnQ2NF90PiwgVmVjdG9yPFZlY3Rvcjx1aW50NjRf
dD4+PiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2Vp
dmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJ
UEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2Uo
IlNlbmRJbnRzIik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQot
ICAgIFNlbmRJbnRzKGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGludHMsIGNvbnN0IFZlY3RvcjxW
ZWN0b3I8dWludDY0X3Q+PiYgaW50VmVjdG9ycykKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhpbnRz
LCBpbnRWZWN0b3JzKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0
IFZlY3Rvcjx1aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8VmVjdG9yPHVpbnQ2NF90Pj4mPiYgYXJn
dW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTxjb25zdCBWZWN0b3I8dWludDY0X3Q+JiwgY29u
c3QgVmVjdG9yPFZlY3Rvcjx1aW50NjRfdD4+Jj4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBD
cmVhdGVQbHVnaW4gewotcHVibGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTx1aW50NjRfdCwg
V2ViS2l0OjpQbHVnaW46OlBhcmFtZXRlcnM+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBD
OjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVy
TmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVy
biBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiQ3JlYXRlUGx1Z2luIik7IH0KLSAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc1N5bmMgPSB0cnVlOwotCi0gICAgdHlwZWRlZiBJUEM6OkFyZ3VtZW50czxib29s
Jj4gUmVwbHk7Ci0gICAgQ3JlYXRlUGx1Z2luKHVpbnQ2NF90IHBsdWdpbkluc3RhbmNlSUQsIGNv
bnN0IFdlYktpdDo6UGx1Z2luOjpQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQotICAgICAgICA6IG1f
YXJndW1lbnRzKHBsdWdpbkluc3RhbmNlSUQsIHBhcmFtZXRlcnMpCi0gICAgewotICAgIH0KLQot
ICAgIGNvbnN0IHN0ZDo6dHVwbGU8dWludDY0X3QsIGNvbnN0IFdlYktpdDo6UGx1Z2luOjpQYXJh
bWV0ZXJzJj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1
bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8dWludDY0X3QsIGNvbnN0
IFdlYktpdDo6UGx1Z2luOjpQYXJhbWV0ZXJzJj4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBS
dW5KYXZhU2NyaXB0QWxlcnQgewotcHVibGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTx1aW50
NjRfdCwgU3RyaW5nPiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJl
bmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAg
IHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdS
ZWZlcmVuY2UoIlJ1bkphdmFTY3JpcHRBbGVydCIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNTeW5jID0gdHJ1ZTsKLQotICAgIHR5cGVkZWYgSVBDOjpBcmd1bWVudHM8PiBSZXBseTsKLSAg
ICBSdW5KYXZhU2NyaXB0QWxlcnQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQotICAgICAgICA6IG1fYXJndW1lbnRzKGZyYW1lSUQsIG1lc3NhZ2UpCi0gICAgewotICAg
IH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8dWludDY0X3QsIGNvbnN0IFN0cmluZyY+JiBhcmd1
bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPHVpbnQ2NF90LCBjb25zdCBTdHJpbmcmPiBtX2Fy
Z3VtZW50czsKLX07Ci0KLWNsYXNzIEdldFBsdWdpbnMgewotcHVibGljOgotICAgIHR5cGVkZWYg
c3RkOjp0dXBsZTxib29sPiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVm
ZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQot
ICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJp
bmdSZWZlcmVuY2UoIkdldFBsdWdpbnMiKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3lu
YyA9IHRydWU7Ci0KLSAgICB0eXBlZGVmIElQQzo6QXJndW1lbnRzPFZlY3RvcjxXZWJDb3JlOjpQ
bHVnaW5JbmZvPiY+IFJlcGx5OwotICAgIGV4cGxpY2l0IEdldFBsdWdpbnMoYm9vbCByZWZyZXNo
KQotICAgICAgICA6IG1fYXJndW1lbnRzKHJlZnJlc2gpCi0gICAgewotICAgIH0KLQotICAgIGNv
bnN0IHN0ZDo6dHVwbGU8Ym9vbD4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8Ym9v
bD4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbiB7
Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFN0cmluZz4gRGVjb2RlVHlwZTsKLQot
ICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2Ug
bmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJHZXRQbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbiIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsKLQotICAg
IHN0cnVjdCBEZWxheWVkUmVwbHkgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGVsYXll
ZFJlcGx5PiB7Ci0gICAgICAgIERlbGF5ZWRSZXBseShQYXNzUmVmUHRyPElQQzo6Q29ubmVjdGlv
bj4sIHN0ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPik7Ci0gICAgICAgIH5EZWxh
eWVkUmVwbHkoKTsKLQotICAgICAgICBib29sIHNlbmQoY29uc3QgSVBDOjpDb25uZWN0aW9uOjpI
YW5kbGUmIGNvbm5lY3Rpb25IYW5kbGUpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRy
PElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
SVBDOjpNZXNzYWdlRW5jb2Rlcj4gbV9lbmNvZGVyOwotICAgIH07Ci0KLSAgICB0eXBlZGVmIElQ
Qzo6QXJndW1lbnRzPElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlJj4gUmVwbHk7Ci0gICAgZXhwbGlj
aXQgR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoKQot
ICAgICAgICA6IG1fYXJndW1lbnRzKHBsdWdpblBhdGgpCi0gICAgewotICAgIH0KLQotICAgIGNv
bnN0IHN0ZDo6dHVwbGU8Y29uc3QgU3RyaW5nJj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6
dHVwbGU8Y29uc3QgU3RyaW5nJj4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBUZXN0TXVsdGlw
bGVBdHRyaWJ1dGVzIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8PiBEZWNvZGVU
eXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsg
cmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIlRlc3RNdWx0aXBs
ZUF0dHJpYnV0ZXMiKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IHRydWU7Ci0K
LSAgICBzdHJ1Y3QgRGVsYXllZFJlcGx5IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERl
bGF5ZWRSZXBseT4gewotICAgICAgICBEZWxheWVkUmVwbHkoUGFzc1JlZlB0cjxJUEM6OkNvbm5l
Y3Rpb24+LCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNzYWdlRW5jb2Rlcj4pOwotICAgICAgICB+
RGVsYXllZFJlcGx5KCk7Ci0KLSAgICAgICAgYm9vbCBzZW5kKCk7Ci0KLSAgICBwcml2YXRlOgot
ICAgICAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247Ci0gICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiBtX2VuY29kZXI7Ci0gICAgfTsKLQot
ICAgIHR5cGVkZWYgSVBDOjpBcmd1bWVudHM8PiBSZXBseTsKLSAgICBjb25zdCBzdGQ6OnR1cGxl
PD4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8PiBtX2FyZ3VtZW50czsKLX07Ci0K
LWNsYXNzIFRlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0
ZDo6dHVwbGU8dWludDY0X3QsIGRvdWJsZSwgZG91YmxlPiBEZWNvZGVUeXBlOwotCi0gICAgc3Rh
dGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VS
ZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkg
eyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIlRlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzIik7
IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIFRlc3RQYXJh
bWV0ZXJBdHRyaWJ1dGVzKHVpbnQ2NF90IGZvbywgZG91YmxlIGJhciwgZG91YmxlIGJheikKLSAg
ICAgICAgOiBtX2FyZ3VtZW50cyhmb28sIGJhciwgYmF6KQotICAgIHsKLSAgICB9Ci0KLSAgICBj
b25zdCBzdGQ6OnR1cGxlPHVpbnQ2NF90LCBkb3VibGUsIGRvdWJsZT4mIGFyZ3VtZW50cygpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIHN0ZDo6dHVwbGU8dWludDY0X3QsIGRvdWJsZSwgZG91YmxlPiBtX2FyZ3VtZW50czsK
LX07Ci0KLWNsYXNzIFRlbXBsYXRlVGVzdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1
cGxlPEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnBhaXI8U3RyaW5nLCB1aW50NjRfdD4+PiBEZWNvZGVU
eXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsg
cmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIlRlbXBsYXRlVGVz
dCIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBs
aWNpdCBUZW1wbGF0ZVRlc3QoY29uc3QgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6cGFpcjxTdHJpbmcs
IHVpbnQ2NF90Pj4mIGEpCi0gICAgICAgIDogbV9hcmd1bWVudHMoYSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgY29uc3Qgc3RkOjp0dXBsZTxjb25zdCBIYXNoTWFwPFN0cmluZywgc3RkOjpwYWlyPFN0
cmluZywgdWludDY0X3Q+PiY+JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0
IEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnBhaXI8U3RyaW5nLCB1aW50NjRfdD4+Jj4gbV9hcmd1bWVu
dHM7Ci19OwotCi1jbGFzcyBTZXRWaWRlb0xheWVySUQgewotcHVibGljOgotICAgIHR5cGVkZWYg
c3RkOjp0dXBsZTxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IERlY29k
ZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkg
eyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3RyaW5n
UmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiU2V0VmlkZW9M
YXllcklEIik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAg
IGV4cGxpY2l0IFNldFZpZGVvTGF5ZXJJRChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQ
bGF0Zm9ybUxheWVySUQmIHZpZGVvTGF5ZXJJRCkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyh2aWRl
b0xheWVySUQpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEJj4mIGFyZ3VtZW50cygpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIHN0ZDo6dHVwbGU8Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXll
cklEJj4gbV9hcmd1bWVudHM7Ci19OwotCi0jaWYgUExBVEZPUk0oTUFDKQotY2xhc3MgRGlkQ3Jl
YXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb24gewotcHVibGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBs
ZTxJUEM6Ok1hY2hQb3J0PiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVm
ZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQot
ICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJp
bmdSZWZlcmVuY2UoIkRpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uIik7IH0KLSAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIGV4cGxpY2l0IERpZENyZWF0ZVdl
YlByb2Nlc3NDb25uZWN0aW9uKGNvbnN0IElQQzo6TWFjaFBvcnQmIGNvbm5lY3Rpb25JZGVudGlm
aWVyKQotICAgICAgICA6IG1fYXJndW1lbnRzKGNvbm5lY3Rpb25JZGVudGlmaWVyKQotICAgIHsK
LSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0IElQQzo6TWFjaFBvcnQmPiYgYXJn
dW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTxjb25zdCBJUEM6Ok1hY2hQb3J0Jj4gbV9hcmd1
bWVudHM7Ci19OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi1jbGFzcyBJbnRlcnByZXRL
ZXlFdmVudCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPHVpbnQzMl90PiBEZWNv
ZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgp
IHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIkludGVycHJl
dEtleUV2ZW50Iik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSB0cnVlOwotCi0g
ICAgdHlwZWRlZiBJUEM6OkFyZ3VtZW50czxWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5k
PiY+IFJlcGx5OwotICAgIGV4cGxpY2l0IEludGVycHJldEtleUV2ZW50KHVpbnQzMl90IHR5cGUp
Ci0gICAgICAgIDogbV9hcmd1bWVudHModHlwZSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qg
c3RkOjp0dXBsZTx1aW50MzJfdD4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8dWlu
dDMyX3Q+IG1fYXJndW1lbnRzOwotfTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKERFUFJFQ0FURURf
RkVBVFVSRSkKLWNsYXNzIERlcHJlY2F0ZWRPcGVyYXRpb24gewotcHVibGljOgotICAgIHR5cGVk
ZWYgc3RkOjp0dXBsZTxJUEM6OkR1bW15VHlwZT4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJ
UEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2
ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0
dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJEZXByZWNhdGVkT3BlcmF0aW9uIik7IH0KLSAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIGV4cGxpY2l0IERlcHJlY2F0
ZWRPcGVyYXRpb24oY29uc3QgSVBDOjpEdW1teVR5cGUmIGR1bW15KQotICAgICAgICA6IG1fYXJn
dW1lbnRzKGR1bW15KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0
IElQQzo6RHVtbXlUeXBlJj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8Y29uc3Qg
SVBDOjpEdW1teVR5cGUmPiBtX2FyZ3VtZW50czsKLX07Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShF
WFBFUklNRU5UQUxfRkVBVFVSRSkKLWNsYXNzIEV4cGVyaW1lbnRhbE9wZXJhdGlvbiB7Ci1wdWJs
aWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPElQQzo6RHVtbXlUeXBlPiBEZWNvZGVUeXBlOwot
Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJu
IG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5j
ZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIkV4cGVyaW1lbnRhbE9wZXJh
dGlvbiIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBl
eHBsaWNpdCBFeHBlcmltZW50YWxPcGVyYXRpb24oY29uc3QgSVBDOjpEdW1teVR5cGUmIGR1bW15
KQotICAgICAgICA6IG1fYXJndW1lbnRzKGR1bW15KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25z
dCBzdGQ6OnR1cGxlPGNvbnN0IElQQzo6RHVtbXlUeXBlJj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IHN0ZDo6dHVwbGU8Y29uc3QgSVBDOjpEdW1teVR5cGUmPiBtX2FyZ3VtZW50czsKLX07Ci0jZW5k
aWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViUGFnZQotfSAvLyBuYW1lc3BhY2UgTWVzc2FnZXMKLQot
I2VuZGlmIC8vIChFTkFCTEUoV0VCS0lUMikgJiYgKE5FU1RFRF9NQVNURVJfQ09ORElUSU9OIHx8
IE1BU1RFUl9PUiAmJiBNQVNURVJfQU5EKSkKLQotI2VuZGlmIC8vIFdlYlBhZ2VNZXNzYWdlc19o
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvTWVzc2FnZVJlY2VpdmVyLWV4
cGVjdGVkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIv
TWVzc2FnZVJlY2VpdmVyLWV4cGVjdGVkLmNwcAkocmV2aXNpb24gMTczNDkxKQorKysgU291cmNl
L1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL01lc3NhZ2VSZWNlaXZlci1leHBlY3RlZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMjI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICog
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgKEVOQUJMRShXRUJLSVQyKSAmJiAoTkVTVEVEX01BU1RFUl9DT05ESVRJ
T04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKQotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgot
Ci0jaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0j
aWYgRU5BQkxFKERFUFJFQ0FURURfRkVBVFVSRSkgfHwgRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFU
VVJFKQotI2luY2x1ZGUgIkR1bW15VHlwZS5oIgotI2VuZGlmCi0jaW5jbHVkZSAiSGFuZGxlTWVz
c2FnZS5oIgotI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlICJNYWNoUG9ydC5oIgotI2VuZGlm
Ci0jaW5jbHVkZSAiTWVzc2FnZURlY29kZXIuaCIKLSNpbmNsdWRlICJQbHVnaW4uaCIKLSNpbmNs
dWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykg
JiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiAmJiBTT01FX09USEVSX01FU1NBR0VfQ09ORElU
SU9OKSkgfHwgKEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIChORVNURURfTUVTU0FHRV9DT05ESVRJ
T04gfHwgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTikpCi0jaW5jbHVkZSAiV2ViRXZlbnQu
aCIKLSNlbmRpZgotI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYlBy
ZWZlcmVuY2VzU3RvcmUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KLSNp
ZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+Ci0jZW5k
aWYKLSNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KLSNpbmNsdWRlIDx1dGlsaXR5Pgot
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgTWVzc2FnZXMgewotCi1uYW1l
c3BhY2UgV2ViUGFnZSB7Ci0KLUdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVw
bHk6OkRlbGF5ZWRSZXBseShQYXNzUmVmUHRyPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiwg
c3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+IGVuY29kZXIpCi0gICAgOiBtX2Nv
bm5lY3Rpb24oY29ubmVjdGlvbikKLSAgICAsIG1fZW5jb2RlcihXVEY6Om1vdmUoZW5jb2Rlcikp
Ci17Ci19Ci0KLUdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHk6On5EZWxh
eWVkUmVwbHkoKQotewotICAgIEFTU0VSVCghbV9jb25uZWN0aW9uKTsKLX0KLQotYm9vbCBHZXRQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5OjpzZW5kKGNvbnN0IElQQzo6Q29u
bmVjdGlvbjo6SGFuZGxlJiBjb25uZWN0aW9uSGFuZGxlKQotewotICAgIEFTU0VSVChtX2VuY29k
ZXIpOwotICAgICptX2VuY29kZXIgPDwgY29ubmVjdGlvbkhhbmRsZTsKLSAgICBib29sIF9yZXN1
bHQgPSBtX2Nvbm5lY3Rpb24tPnNlbmRTeW5jUmVwbHkoV1RGOjptb3ZlKG1fZW5jb2RlcikpOwot
ICAgIG1fY29ubmVjdGlvbiA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIF9yZXN1bHQ7Ci19Ci0KLVRl
c3RNdWx0aXBsZUF0dHJpYnV0ZXM6OkRlbGF5ZWRSZXBseTo6RGVsYXllZFJlcGx5KFBhc3NSZWZQ
dHI8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNz
YWdlRW5jb2Rlcj4gZW5jb2RlcikKLSAgICA6IG1fY29ubmVjdGlvbihjb25uZWN0aW9uKQotICAg
ICwgbV9lbmNvZGVyKFdURjo6bW92ZShlbmNvZGVyKSkKLXsKLX0KLQotVGVzdE11bHRpcGxlQXR0
cmlidXRlczo6RGVsYXllZFJlcGx5Ojp+RGVsYXllZFJlcGx5KCkKLXsKLSAgICBBU1NFUlQoIW1f
Y29ubmVjdGlvbik7Ci19Ci0KLWJvb2wgVGVzdE11bHRpcGxlQXR0cmlidXRlczo6RGVsYXllZFJl
cGx5OjpzZW5kKCkKLXsKLSAgICBBU1NFUlQobV9lbmNvZGVyKTsKLSAgICBib29sIF9yZXN1bHQg
PSBtX2Nvbm5lY3Rpb24tPnNlbmRTeW5jUmVwbHkoV1RGOjptb3ZlKG1fZW5jb2RlcikpOwotICAg
IG1fY29ubmVjdGlvbiA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIF9yZXN1bHQ7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYlBhZ2UKLQotfSAvLyBuYW1lc3BhY2UgTWVzc2FnZXMKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLXZvaWQgV2ViUGFnZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uKiBjb25uZWN0aW9uLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRVUkw6Om5h
bWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6Okxv
YWRVUkw+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjpsb2FkVVJMKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGlmIChkZWNvZGVyLm1lc3Nh
Z2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRTb21ldGhpbmc6Om5hbWUoKSkgewot
ICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRTb21ldGhp
bmc+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjpsb2FkU29tZXRoaW5nKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSNlbmRpZgotI2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVE
X01FU1NBR0VfQ09ORElUSU9OIHx8IFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKQotICAg
IGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNoRXZl
bnQ6Om5hbWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBh
Z2U6OlRvdWNoRXZlbnQ+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjp0b3VjaEV2ZW50KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotI2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAm
JiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9OICYmIFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJ
T04pKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6
OkFkZEV2ZW50OjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2Vz
OjpXZWJQYWdlOjpBZGRFdmVudD4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OmFkZEV2ZW50KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6TG9h
ZFNvbWV0aGluZ0Vsc2U6Om5hbWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVz
c2FnZXM6OldlYlBhZ2U6OkxvYWRTb21ldGhpbmdFbHNlPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFn
ZTo6bG9hZFNvbWV0aGluZ0Vsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0g
ICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6RGlkUmVj
ZWl2ZVBvbGljeURlY2lzaW9uOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdl
PE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24+KGRlY29kZXIsIHRo
aXMsICZXZWJQYWdlOjpkaWRSZWNlaXZlUG9saWN5RGVjaXNpb24pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBh
Z2U6OkNsb3NlOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2Vz
OjpXZWJQYWdlOjpDbG9zZT4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OmNsb3NlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3Nh
Z2VzOjpXZWJQYWdlOjpQcmVmZXJlbmNlc0RpZENoYW5nZTo6bmFtZSgpKSB7Ci0gICAgICAgIElQ
Qzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6UHJlZmVyZW5jZXNEaWRDaGFuZ2U+
KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjpwcmVmZXJlbmNlc0RpZENoYW5nZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdl
czo6V2ViUGFnZTo6U2VuZERvdWJsZUFuZEZsb2F0OjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpo
YW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kRG91YmxlQW5kRmxvYXQ+KGRlY29k
ZXIsIHRoaXMsICZXZWJQYWdlOjpzZW5kRG91YmxlQW5kRmxvYXQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBh
Z2U6OlNlbmRJbnRzOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3Nh
Z2VzOjpXZWJQYWdlOjpTZW5kSW50cz4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OnNlbmRJbnRz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgp
ID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpUZXN0UGFyYW1ldGVyQXR0cmlidXRlczo6bmFtZSgpKSB7
Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6VGVzdFBhcmFt
ZXRlckF0dHJpYnV0ZXM+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjp0ZXN0UGFyYW1ldGVyQXR0
cmlidXRlcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVzc2Fn
ZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6VGVtcGxhdGVUZXN0OjpuYW1lKCkpIHsKLSAg
ICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpUZW1wbGF0ZVRlc3Q+
KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjp0ZW1wbGF0ZVRlc3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBh
Z2U6OlNldFZpZGVvTGF5ZXJJRDo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2Fn
ZTxNZXNzYWdlczo6V2ViUGFnZTo6U2V0VmlkZW9MYXllcklEPihkZWNvZGVyLCB0aGlzLCAmV2Vi
UGFnZTo6c2V0VmlkZW9MYXllcklEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNpZiBQTEFU
Rk9STShNQUMpCi0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2Vi
UGFnZTo6RGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb246Om5hbWUoKSkgewotICAgICAgICBJ
UEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkRpZENyZWF0ZVdlYlByb2Nlc3ND
b25uZWN0aW9uPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6ZGlkQ3JlYXRlV2ViUHJvY2Vzc0Nv
bm5lY3Rpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0jaWYgRU5BQkxFKERF
UFJFQ0FURURfRkVBVFVSRSkKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3Nh
Z2VzOjpXZWJQYWdlOjpEZXByZWNhdGVkT3BlcmF0aW9uOjpuYW1lKCkpIHsKLSAgICAgICAgSVBD
OjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpEZXByZWNhdGVkT3BlcmF0aW9uPihk
ZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6ZGVwcmVjYXRlZE9wZXJhdGlvbik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoRVhQRVJJTUVOVEFMX0ZFQVRVUkUpCi0g
ICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6RXhwZXJp
bWVudGFsT3BlcmF0aW9uOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1l
c3NhZ2VzOjpXZWJQYWdlOjpFeHBlcmltZW50YWxPcGVyYXRpb24+KGRlY29kZXIsIHRoaXMsICZX
ZWJQYWdlOjpleHBlcmltZW50YWxPcGVyYXRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
I2VuZGlmCi0gICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShk
ZWNvZGVyKTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpk
aWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBJUEM6Ok1l
c3NhZ2VEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNzYWdlRW5jb2Rl
cj4mIHJlcGx5RW5jb2RlcikKLXsKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1l
c3NhZ2VzOjpXZWJQYWdlOjpDcmVhdGVQbHVnaW46Om5hbWUoKSkgewotICAgICAgICBJUEM6Omhh
bmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkNyZWF0ZVBsdWdpbj4oZGVjb2RlciwgKnJl
cGx5RW5jb2RlciwgdGhpcywgJldlYlBhZ2U6OmNyZWF0ZVBsdWdpbik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2Vi
UGFnZTo6UnVuSmF2YVNjcmlwdEFsZXJ0OjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVN
ZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpSdW5KYXZhU2NyaXB0QWxlcnQ+KGRlY29kZXIsICpy
ZXBseUVuY29kZXIsIHRoaXMsICZXZWJQYWdlOjpydW5KYXZhU2NyaXB0QWxlcnQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2Fn
ZXM6OldlYlBhZ2U6OkdldFBsdWdpbnM6Om5hbWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1l
c3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkdldFBsdWdpbnM+KGRlY29kZXIsICpyZXBseUVuY29k
ZXIsIHRoaXMsICZXZWJQYWdlOjpnZXRQbHVnaW5zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVz
c2FnZURlbGF5ZWQ8TWVzc2FnZXM6OldlYlBhZ2U6OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
Pihjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIsIHRoaXMsICZXZWJQYWdlOjpnZXRQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6VGVzdE11bHRpcGxl
QXR0cmlidXRlczo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZURlbGF5ZWQ8
TWVzc2FnZXM6OldlYlBhZ2U6OlRlc3RNdWx0aXBsZUF0dHJpYnV0ZXM+KGNvbm5lY3Rpb24sIGRl
Y29kZXIsIHJlcGx5RW5jb2RlciwgdGhpcywgJldlYlBhZ2U6OnRlc3RNdWx0aXBsZUF0dHJpYnV0
ZXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAo
ZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpJbnRlcnByZXRLZXlF
dmVudDo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2Vi
UGFnZTo6SW50ZXJwcmV0S2V5RXZlbnQ+KGRlY29kZXIsICpyZXBseUVuY29kZXIsIHRoaXMsICZX
ZWJQYWdlOjppbnRlcnByZXRLZXlFdmVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5k
aWYKLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGRlY29k
ZXIpOwotICAgIFVOVVNFRF9QQVJBTShyZXBseUVuY29kZXIpOwotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIChFTkFCTEUo
V0VCS0lUMikgJiYgKE5FU1RFRF9NQVNURVJfQ09ORElUSU9OIHx8IE1BU1RFUl9PUiAmJiBNQVNU
RVJfQU5EKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9NZXNzYWdlUmVj
ZWl2ZXJTdXBlcmNsYXNzLWV4cGVjdGVkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TY3JpcHRzL3dlYmtpdDIvTWVzc2FnZVJlY2VpdmVyU3VwZXJjbGFzcy1leHBlY3RlZC5jcHAJ
KHJldmlzaW9uIDE3MzQ5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9NZXNz
YWdlUmVjZWl2ZXJTdXBlcmNsYXNzLWV4cGVjdGVkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUg
IldlYlBhZ2UuaCIKLQotI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiSGFu
ZGxlTWVzc2FnZS5oIgotI2luY2x1ZGUgIk1lc3NhZ2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiV2Vi
UGFnZU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi12b2lkIFdlYlBhZ2U6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiogY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2RlcikKLXsKLSAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkVVJM
OjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdl
OjpMb2FkVVJMPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6bG9hZFVSTCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgV2ViUGFnZUJhc2U6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9NZXNzYWdlcy1leHBlY3RlZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9NZXNzYWdlcy1leHBlY3RlZC5oCShyZXZp
c2lvbiAxNzM0OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvTWVzc2FnZXMt
ZXhwZWN0ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1OTAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0g
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFdlYlBhZ2VNZXNzYWdlc19oCi0jZGVmaW5lIFdlYlBhZ2VNZXNzYWdlc19oCi0K
LSNpZiAoRU5BQkxFKFdFQktJVDIpICYmIChORVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNU
RVJfT1IgJiYgTUFTVEVSX0FORCkpCi0KLSNpbmNsdWRlICJBcmd1bWVudHMuaCIKLSNpbmNsdWRl
ICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiTWVzc2FnZUVuY29kZXIuaCIKLSNpbmNsdWRlICJQ
bHVnaW4uaCIKLSNpbmNsdWRlICJTdHJpbmdSZWZlcmVuY2UuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzTGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgSVBDIHsKLSAgICBjbGFzcyBDb25uZWN0aW9uOwotICAgIGNsYXNzIER1
bW15VHlwZTsKLSAgICBjbGFzcyBNYWNoUG9ydDsKLX0KLQotbmFtZXNwYWNlIFdURiB7Ci0gICAg
Y2xhc3MgU3RyaW5nOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLSAgICBzdHJ1Y3QgV2ViUHJl
ZmVyZW5jZXNTdG9yZTsKLSAgICBjbGFzcyBXZWJUb3VjaEV2ZW50OwotfQotCi1uYW1lc3BhY2Ug
TWVzc2FnZXMgewotbmFtZXNwYWNlIFdlYlBhZ2UgewotCi1zdGF0aWMgaW5saW5lIElQQzo6U3Ry
aW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUoKQotewotICAgIHJldHVybiBJUEM6OlN0
cmluZ1JlZmVyZW5jZSgiV2ViUGFnZSIpOwotfQotCi1jbGFzcyBMb2FkVVJMIHsKLXB1YmxpYzoK
LSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8U3RyaW5nPiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGlj
IElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNl
aXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyBy
ZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIkxvYWRVUkwiKTsgfQotICAgIHN0YXRpYyBjb25z
dCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgTG9hZFVSTChjb25zdCBTdHJp
bmcmIHVybCkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyh1cmwpCi0gICAgewotICAgIH0KLQotICAg
IGNvbnN0IHN0ZDo6dHVwbGU8Y29uc3QgU3RyaW5nJj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0
ZDo6dHVwbGU8Y29uc3QgU3RyaW5nJj4gbV9hcmd1bWVudHM7Ci19OwotCi0jaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKLWNsYXNzIExvYWRTb21ldGhpbmcgewotcHVibGljOgotICAgIHR5cGVkZWYg
c3RkOjp0dXBsZTxTdHJpbmc+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdS
ZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9
Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0
cmluZ1JlZmVyZW5jZSgiTG9hZFNvbWV0aGluZyIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBMb2FkU29tZXRoaW5nKGNvbnN0IFN0cmlu
ZyYgdXJsKQotICAgICAgICA6IG1fYXJndW1lbnRzKHVybCkKLSAgICB7Ci0gICAgfQotCi0gICAg
Y29uc3Qgc3RkOjp0dXBsZTxjb25zdCBTdHJpbmcmPiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3Rk
Ojp0dXBsZTxjb25zdCBTdHJpbmcmPiBtX2FyZ3VtZW50czsKLX07Ci0jZW5kaWYKLQotI2lmIChF
TkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9OIHx8IFNPTUVf
T1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKQotY2xhc3MgVG91Y2hFdmVudCB7Ci1wdWJsaWM6Ci0g
ICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFdlYktpdDo6V2ViVG91Y2hFdmVudD4gRGVjb2RlVHlwZTsK
LQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVy
biBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVu
Y2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJUb3VjaEV2ZW50Iik7IH0K
LSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIGV4cGxpY2l0IFRv
dWNoRXZlbnQoY29uc3QgV2ViS2l0OjpXZWJUb3VjaEV2ZW50JiBldmVudCkKLSAgICAgICAgOiBt
X2FyZ3VtZW50cyhldmVudCkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTxj
b25zdCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmPiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0
dXBsZTxjb25zdCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmPiBtX2FyZ3VtZW50czsKLX07Ci0jZW5k
aWYKLQotI2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElU
SU9OICYmIFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKQotY2xhc3MgQWRkRXZlbnQgewot
cHVibGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxXZWJLaXQ6OldlYlRvdWNoRXZlbnQ+IERl
Y29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1l
KCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3Ry
aW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiQWRkRXZl
bnQiKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhw
bGljaXQgQWRkRXZlbnQoY29uc3QgV2ViS2l0OjpXZWJUb3VjaEV2ZW50JiBldmVudCkKLSAgICAg
ICAgOiBtX2FyZ3VtZW50cyhldmVudCkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0
dXBsZTxjb25zdCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmPiYgYXJndW1lbnRzKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
c3RkOjp0dXBsZTxjb25zdCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmPiBtX2FyZ3VtZW50czsKLX07
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi1jbGFzcyBMb2FkU29tZXRoaW5n
RWxzZSB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFN0cmluZz4gRGVjb2RlVHlw
ZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJl
dHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZl
cmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJMb2FkU29tZXRoaW5n
RWxzZSIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBl
eHBsaWNpdCBMb2FkU29tZXRoaW5nRWxzZShjb25zdCBTdHJpbmcmIHVybCkKLSAgICAgICAgOiBt
X2FyZ3VtZW50cyh1cmwpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29u
c3QgU3RyaW5nJj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9h
cmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8Y29uc3QgU3RyaW5n
Jj4gbV9hcmd1bWVudHM7Ci19OwotI2VuZGlmCi0KLWNsYXNzIERpZFJlY2VpdmVQb2xpY3lEZWNp
c2lvbiB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPHVpbnQ2NF90LCB1aW50NjRf
dCwgdWludDMyX3Q+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVu
Y2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAg
c3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSgiRGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uIik7IH0KLSAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIERpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbih1aW50
NjRfdCBmcmFtZUlELCB1aW50NjRfdCBsaXN0ZW5lcklELCB1aW50MzJfdCBwb2xpY3lBY3Rpb24p
Ci0gICAgICAgIDogbV9hcmd1bWVudHMoZnJhbWVJRCwgbGlzdGVuZXJJRCwgcG9saWN5QWN0aW9u
KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPHVpbnQ2NF90LCB1aW50NjRf
dCwgdWludDMyX3Q+JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
YXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPHVpbnQ2NF90LCB1
aW50NjRfdCwgdWludDMyX3Q+IG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgQ2xvc2UgewotcHVi
bGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTw+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMg
SVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2Vp
dmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJl
dHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiQ2xvc2UiKTsgfQotICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTw+JiBhcmd1bWVudHMo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBzdGQ6OnR1cGxlPD4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBQcmVmZXJl
bmNlc0RpZENoYW5nZSB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFdlYktpdDo6
V2ViUHJlZmVyZW5jZXNTdG9yZT4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7
IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6
U3RyaW5nUmVmZXJlbmNlKCJQcmVmZXJlbmNlc0RpZENoYW5nZSIpOyB9Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBQcmVmZXJlbmNlc0RpZENo
YW5nZShjb25zdCBXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQotICAgICAgICA6
IG1fYXJndW1lbnRzKHN0b3JlKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxl
PGNvbnN0IFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZSY+JiBhcmd1bWVudHMoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBzdGQ6OnR1cGxlPGNvbnN0IFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZSY+IG1fYXJndW1l
bnRzOwotfTsKLQotY2xhc3MgU2VuZERvdWJsZUFuZEZsb2F0IHsKLXB1YmxpYzoKLSAgICB0eXBl
ZGVmIHN0ZDo6dHVwbGU8ZG91YmxlLCBmbG9hdD4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJ
UEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2
ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0
dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJTZW5kRG91YmxlQW5kRmxvYXQiKTsgfQotICAgIHN0
YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgU2VuZERvdWJsZUFuZEZsb2F0
KGRvdWJsZSBkLCBmbG9hdCBmKQotICAgICAgICA6IG1fYXJndW1lbnRzKGQsIGYpCi0gICAgewot
ICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8ZG91YmxlLCBmbG9hdD4mIGFyZ3VtZW50cygp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIHN0ZDo6dHVwbGU8ZG91YmxlLCBmbG9hdD4gbV9hcmd1bWVudHM7Ci19OwotCi1j
bGFzcyBTZW5kSW50cyB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFZlY3Rvcjx1
aW50NjRfdD4sIFZlY3RvcjxWZWN0b3I8dWludDY0X3Q+Pj4gRGVjb2RlVHlwZTsKLQotICAgIHN0
YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdl
UmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgp
IHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJTZW5kSW50cyIpOyB9Ci0gICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBTZW5kSW50cyhjb25zdCBWZWN0b3I8
dWludDY0X3Q+JiBpbnRzLCBjb25zdCBWZWN0b3I8VmVjdG9yPHVpbnQ2NF90Pj4mIGludFZlY3Rv
cnMpCi0gICAgICAgIDogbV9hcmd1bWVudHMoaW50cywgaW50VmVjdG9ycykKLSAgICB7Ci0gICAg
fQotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTxjb25zdCBWZWN0b3I8dWludDY0X3Q+JiwgY29uc3Qg
VmVjdG9yPFZlY3Rvcjx1aW50NjRfdD4+Jj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVw
bGU8Y29uc3QgVmVjdG9yPHVpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxWZWN0b3I8dWludDY0X3Q+
PiY+IG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgQ3JlYXRlUGx1Z2luIHsKLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIHN0ZDo6dHVwbGU8dWludDY0X3QsIFdlYktpdDo6UGx1Z2luOjpQYXJhbWV0ZXJz
PiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVy
TmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6
OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIkNy
ZWF0ZVBsdWdpbiIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsKLQot
ICAgIHR5cGVkZWYgSVBDOjpBcmd1bWVudHM8Ym9vbCY+IFJlcGx5OwotICAgIENyZWF0ZVBsdWdp
bih1aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlELCBjb25zdCBXZWJLaXQ6OlBsdWdpbjo6UGFyYW1l
dGVycyYgcGFyYW1ldGVycykKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhwbHVnaW5JbnN0YW5jZUlE
LCBwYXJhbWV0ZXJzKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPHVpbnQ2
NF90LCBjb25zdCBXZWJLaXQ6OlBsdWdpbjo6UGFyYW1ldGVycyY+JiBhcmd1bWVudHMoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBzdGQ6OnR1cGxlPHVpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlBsdWdpbjo6UGFyYW1ldGVy
cyY+IG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgUnVuSmF2YVNjcmlwdEFsZXJ0IHsKLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8dWludDY0X3QsIFN0cmluZz4gRGVjb2RlVHlwZTsK
LQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVy
biBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVu
Y2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJSdW5KYXZhU2NyaXB0QWxl
cnQiKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IHRydWU7Ci0KLSAgICB0eXBl
ZGVmIElQQzo6QXJndW1lbnRzPD4gUmVwbHk7Ci0gICAgUnVuSmF2YVNjcmlwdEFsZXJ0KHVpbnQ2
NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLSAgICAgICAgOiBtX2FyZ3VtZW50
cyhmcmFtZUlELCBtZXNzYWdlKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxl
PHVpbnQ2NF90LCBjb25zdCBTdHJpbmcmPiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBs
ZTx1aW50NjRfdCwgY29uc3QgU3RyaW5nJj4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBHZXRQ
bHVnaW5zIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8Ym9vbD4gRGVjb2RlVHlw
ZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJl
dHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZl
cmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJHZXRQbHVnaW5zIik7
IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSB0cnVlOwotCi0gICAgdHlwZWRlZiBJ
UEM6OkFyZ3VtZW50czxWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4mPiBSZXBseTsKLSAgICBl
eHBsaWNpdCBHZXRQbHVnaW5zKGJvb2wgcmVmcmVzaCkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhy
ZWZyZXNoKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPGJvb2w+JiBhcmd1
bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGJvb2w+IG1fYXJndW1lbnRzOwotfTsKLQotY2xh
c3MgR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24gewotcHVibGljOgotICAgIHR5cGVkZWYgc3Rk
Ojp0dXBsZTxTdHJpbmc+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZl
cmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0g
ICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSgiR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24iKTsgfQotICAgIHN0YXRpYyBj
b25zdCBib29sIGlzU3luYyA9IHRydWU7Ci0KLSAgICBzdHJ1Y3QgRGVsYXllZFJlcGx5IDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERlbGF5ZWRSZXBseT4gewotICAgICAgICBEZWxheWVk
UmVwbHkoUGFzc1JlZlB0cjxJUEM6OkNvbm5lY3Rpb24+LCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpN
ZXNzYWdlRW5jb2Rlcj4pOwotICAgICAgICB+RGVsYXllZFJlcGx5KCk7Ci0KLSAgICAgICAgYm9v
bCBzZW5kKGNvbnN0IElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlJiBjb25uZWN0aW9uSGFuZGxlKTsK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVj
dGlvbjsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+IG1fZW5j
b2RlcjsKLSAgICB9OwotCi0gICAgdHlwZWRlZiBJUEM6OkFyZ3VtZW50czxJUEM6OkNvbm5lY3Rp
b246OkhhbmRsZSY+IFJlcGx5OwotICAgIGV4cGxpY2l0IEdldFBsdWdpblByb2Nlc3NDb25uZWN0
aW9uKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhwbHVn
aW5QYXRoKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0IFN0cmlu
ZyY+JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRz
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+IG1fYXJn
dW1lbnRzOwotfTsKLQotY2xhc3MgVGVzdE11bHRpcGxlQXR0cmlidXRlcyB7Ci1wdWJsaWM6Ci0g
ICAgdHlwZWRlZiBzdGQ6OnR1cGxlPD4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0
cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1l
KCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQ
Qzo6U3RyaW5nUmVmZXJlbmNlKCJUZXN0TXVsdGlwbGVBdHRyaWJ1dGVzIik7IH0KLSAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc1N5bmMgPSB0cnVlOwotCi0gICAgc3RydWN0IERlbGF5ZWRSZXBseSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEZWxheWVkUmVwbHk+IHsKLSAgICAgICAgRGVs
YXllZFJlcGx5KFBhc3NSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiwgc3RkOjp1bmlxdWVfcHRyPElQ
Qzo6TWVzc2FnZUVuY29kZXI+KTsKLSAgICAgICAgfkRlbGF5ZWRSZXBseSgpOwotCi0gICAgICAg
IGJvb2wgc2VuZCgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPElQQzo6Q29ubmVj
dGlvbj4gbV9jb25uZWN0aW9uOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNzYWdl
RW5jb2Rlcj4gbV9lbmNvZGVyOwotICAgIH07Ci0KLSAgICB0eXBlZGVmIElQQzo6QXJndW1lbnRz
PD4gUmVwbHk7Ci0gICAgY29uc3Qgc3RkOjp0dXBsZTw+JiBhcmd1bWVudHMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBz
dGQ6OnR1cGxlPD4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBUZXN0UGFyYW1ldGVyQXR0cmli
dXRlcyB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPHVpbnQ2NF90LCBkb3VibGUs
IGRvdWJsZT4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBy
ZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0
aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJl
bmNlKCJUZXN0UGFyYW1ldGVyQXR0cmlidXRlcyIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNTeW5jID0gZmFsc2U7Ci0KLSAgICBUZXN0UGFyYW1ldGVyQXR0cmlidXRlcyh1aW50NjRfdCBm
b28sIGRvdWJsZSBiYXIsIGRvdWJsZSBiYXopCi0gICAgICAgIDogbV9hcmd1bWVudHMoZm9vLCBi
YXIsIGJheikKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTx1aW50NjRfdCwg
ZG91YmxlLCBkb3VibGU+JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPHVpbnQ2NF90
LCBkb3VibGUsIGRvdWJsZT4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBUZW1wbGF0ZVRlc3Qg
ewotcHVibGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxIYXNoTWFwPFN0cmluZywgc3RkOjpw
YWlyPFN0cmluZywgdWludDY0X3Q+Pj4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0
cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1l
KCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQ
Qzo6U3RyaW5nUmVmZXJlbmNlKCJUZW1wbGF0ZVRlc3QiKTsgfQotICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgVGVtcGxhdGVUZXN0KGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBzdGQ6OnBhaXI8U3RyaW5nLCB1aW50NjRfdD4+JiBhKQotICAgICAgICA6
IG1fYXJndW1lbnRzKGEpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29u
c3QgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6cGFpcjxTdHJpbmcsIHVpbnQ2NF90Pj4mPiYgYXJndW1l
bnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTxjb25zdCBIYXNoTWFwPFN0cmluZywgc3RkOjpwYWly
PFN0cmluZywgdWludDY0X3Q+PiY+IG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgU2V0VmlkZW9M
YXllcklEIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6
U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5h
bWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4g
SVBDOjpTdHJpbmdSZWZlcmVuY2UoIlNldFZpZGVvTGF5ZXJJRCIpOyB9Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBTZXRWaWRlb0xheWVySUQo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEJiB2aWRlb0xheWVy
SUQpCi0gICAgICAgIDogbV9hcmd1bWVudHModmlkZW9MYXllcklEKQotICAgIHsKLSAgICB9Ci0K
LSAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRm
b3JtTGF5ZXJJRCY+JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
YXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCY+IG1fYXJndW1lbnRzOwotfTsKLQot
I2lmIFBMQVRGT1JNKE1BQykKLWNsYXNzIERpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uIHsK
LXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8SVBDOjpNYWNoUG9ydD4gRGVjb2RlVHlw
ZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJl
dHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZl
cmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJEaWRDcmVhdGVXZWJQ
cm9jZXNzQ29ubmVjdGlvbiIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFs
c2U7Ci0KLSAgICBleHBsaWNpdCBEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbihjb25zdCBJ
UEM6Ok1hY2hQb3J0JiBjb25uZWN0aW9uSWRlbnRpZmllcikKLSAgICAgICAgOiBtX2FyZ3VtZW50
cyhjb25uZWN0aW9uSWRlbnRpZmllcikKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0
dXBsZTxjb25zdCBJUEM6Ok1hY2hQb3J0Jj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVw
bGU8Y29uc3QgSVBDOjpNYWNoUG9ydCY+IG1fYXJndW1lbnRzOwotfTsKLSNlbmRpZgotCi0jaWYg
UExBVEZPUk0oTUFDKQotY2xhc3MgSW50ZXJwcmV0S2V5RXZlbnQgewotcHVibGljOgotICAgIHR5
cGVkZWYgc3RkOjp0dXBsZTx1aW50MzJfdD4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6
OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJO
YW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJu
IElQQzo6U3RyaW5nUmVmZXJlbmNlKCJJbnRlcnByZXRLZXlFdmVudCIpOyB9Ci0gICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsKLQotICAgIHR5cGVkZWYgSVBDOjpBcmd1bWVudHM8
VmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mPiBSZXBseTsKLSAgICBleHBsaWNpdCBJ
bnRlcnByZXRLZXlFdmVudCh1aW50MzJfdCB0eXBlKQotICAgICAgICA6IG1fYXJndW1lbnRzKHR5
cGUpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8dWludDMyX3Q+JiBhcmd1
bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPHVpbnQzMl90PiBtX2FyZ3VtZW50czsKLX07Ci0j
ZW5kaWYKLQotI2lmIEVOQUJMRShERVBSRUNBVEVEX0ZFQVRVUkUpCi1jbGFzcyBEZXByZWNhdGVk
T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8SVBDOjpEdW1teVR5
cGU+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2
ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQ
Qzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgi
RGVwcmVjYXRlZE9wZXJhdGlvbiIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0g
ZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBEZXByZWNhdGVkT3BlcmF0aW9uKGNvbnN0IElQQzo6RHVt
bXlUeXBlJiBkdW1teSkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhkdW1teSkKLSAgICB7Ci0gICAg
fQotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTxjb25zdCBJUEM6OkR1bW15VHlwZSY+JiBhcmd1bWVu
dHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IElQQzo6RHVtbXlUeXBlJj4gbV9hcmd1bWVu
dHM7Ci19OwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRVhQRVJJTUVOVEFMX0ZFQVRVUkUpCi1jbGFz
cyBFeHBlcmltZW50YWxPcGVyYXRpb24gewotcHVibGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBs
ZTxJUEM6OkR1bW15VHlwZT4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0K
LSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3Ry
aW5nUmVmZXJlbmNlKCJFeHBlcmltZW50YWxPcGVyYXRpb24iKTsgfQotICAgIHN0YXRpYyBjb25z
dCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgRXhwZXJpbWVudGFsT3BlcmF0
aW9uKGNvbnN0IElQQzo6RHVtbXlUeXBlJiBkdW1teSkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhk
dW1teSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTxjb25zdCBJUEM6OkR1
bW15VHlwZSY+JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJn
dW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IElQQzo6RHVt
bXlUeXBlJj4gbV9hcmd1bWVudHM7Ci19OwotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYlBh
Z2UKLX0gLy8gbmFtZXNwYWNlIE1lc3NhZ2VzCi0KLSNlbmRpZiAvLyAoRU5BQkxFKFdFQktJVDIp
ICYmIChORVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNURVJfT1IgJiYgTUFTVEVSX0FORCkp
Ci0KLSNlbmRpZiAvLyBXZWJQYWdlTWVzc2FnZXNfaApJbmRleDogU291cmNlL1dlYktpdDIvU2Ny
aXB0cy93ZWJraXQyL01lc3NhZ2VzU3VwZXJjbGFzcy1leHBlY3RlZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9NZXNzYWdlc1N1cGVyY2xhc3MtZXhwZWN0
ZWQuaAkocmV2aXNpb24gMTczNDkxKQorKysgU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQy
L01lc3NhZ2VzU3VwZXJjbGFzcy1leHBlY3RlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgot
ICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJQYWdlTWVzc2FnZXNfaAotI2RlZmluZSBX
ZWJQYWdlTWVzc2FnZXNfaAotCi0jaW5jbHVkZSAiQXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiTWVz
c2FnZUVuY29kZXIuaCIKLSNpbmNsdWRlICJTdHJpbmdSZWZlcmVuY2UuaCIKLQotbmFtZXNwYWNl
IFdURiB7Ci0gICAgY2xhc3MgU3RyaW5nOwotfQotCi1uYW1lc3BhY2UgTWVzc2FnZXMgewotbmFt
ZXNwYWNlIFdlYlBhZ2UgewotCi1zdGF0aWMgaW5saW5lIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1l
c3NhZ2VSZWNlaXZlck5hbWUoKQotewotICAgIHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgi
V2ViUGFnZSIpOwotfQotCi1jbGFzcyBMb2FkVVJMIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0
ZDo6dHVwbGU8U3RyaW5nPiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVm
ZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQot
ICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJp
bmdSZWZlcmVuY2UoIkxvYWRVUkwiKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9
IGZhbHNlOwotCi0gICAgZXhwbGljaXQgTG9hZFVSTChjb25zdCBTdHJpbmcmIHVybCkKLSAgICAg
ICAgOiBtX2FyZ3VtZW50cyh1cmwpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVw
bGU8Y29uc3QgU3RyaW5nJj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8Y29uc3Qg
U3RyaW5nJj4gbV9hcmd1bWVudHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJQYWdlCi19IC8v
IG5hbWVzcGFjZSBNZXNzYWdlcwotCi0jZW5kaWYgLy8gV2ViUGFnZU1lc3NhZ2VzX2gKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9fX2luaXRfXy5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvX19pbml0X18ucHkJKHJldmlzaW9uIDE3
MzQ5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9fX2luaXRfXy5weQkod29y
a2luZyBjb3B5KQpAQCAtMSwyMyArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMg
YXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLSMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3Rv
cnkgZm9yIG1vZHVsZSBmaWxlcwpJbmRleDogU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQy
L21lc3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0
Mi9tZXNzYWdlcy5weQkocmV2aXNpb24gMTczNDkxKQorKysgU291cmNlL1dlYktpdDIvU2NyaXB0
cy93ZWJraXQyL21lc3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYzMiArMCwwIEBACi0j
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBjb2xs
ZWN0aW9ucwotaW1wb3J0IHJlCi1pbXBvcnQgc3lzCi1mcm9tIHdlYmtpdDIgaW1wb3J0IHBhcnNl
cgotCi1XQU5UU19DT05ORUNUSU9OX0FUVFJJQlVURSA9ICdXYW50c0Nvbm5lY3Rpb24nCi1MRUdB
Q1lfUkVDRUlWRVJfQVRUUklCVVRFID0gJ0xlZ2FjeVJlY2VpdmVyJwotREVMQVlFRF9BVFRSSUJV
VEUgPSAnRGVsYXllZCcKLVZBUklBRElDX0FUVFJJQlVURSA9ICdWYXJpYWRpYycKLQotX2xpY2Vu
c2VfaGVhZGVyID0gIiIiLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAot
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0iIiIKLQotCi1kZWYgbWVzc2FnZXNfaGVhZGVy
X2ZpbGVuYW1lKHJlY2VpdmVyKToKLSAgICByZXR1cm4gJyVzTWVzc2FnZXMuaCcgJSByZWNlaXZl
ci5uYW1lCi0KLQotZGVmIHN1cnJvdW5kX2luX2NvbmRpdGlvbihzdHJpbmcsIGNvbmRpdGlvbik6
Ci0gICAgaWYgbm90IGNvbmRpdGlvbjoKLSAgICAgICAgcmV0dXJuIHN0cmluZwotICAgIHJldHVy
biAnI2lmICVzXG4lcyNlbmRpZlxuJyAlIChjb25kaXRpb24sIHN0cmluZykKLQotCi1kZWYgZnVu
Y3Rpb25fcGFyYW1ldGVyX3R5cGUodHlwZSk6Ci0gICAgIyBEb24ndCB1c2UgcmVmZXJlbmNlcyBm
b3IgYnVpbHQtaW4gdHlwZXMuCi0gICAgYnVpbHRpbl90eXBlcyA9IGZyb3plbnNldChbCi0gICAg
ICAgICdib29sJywKLSAgICAgICAgJ2Zsb2F0JywKLSAgICAgICAgJ2RvdWJsZScsCi0gICAgICAg
ICd1aW50OF90JywKLSAgICAgICAgJ3VpbnQxNl90JywKLSAgICAgICAgJ3VpbnQzMl90JywKLSAg
ICAgICAgJ3VpbnQ2NF90JywKLSAgICAgICAgJ2ludDhfdCcsCi0gICAgICAgICdpbnQxNl90JywK
LSAgICAgICAgJ2ludDMyX3QnLAotICAgICAgICAnaW50NjRfdCcsCi0gICAgXSkKLQotICAgIGlm
IHR5cGUgaW4gYnVpbHRpbl90eXBlczoKLSAgICAgICAgcmV0dXJuIHR5cGUKLQotICAgIHJldHVy
biAnY29uc3QgJXMmJyAlIHR5cGUKLQotCi1kZWYgcmVwbHlfcGFyYW1ldGVyX3R5cGUodHlwZSk6
Ci0gICAgcmV0dXJuICclcyYnICUgdHlwZQotCi0KLWRlZiBhcmd1bWVudHNfdHlwZShtZXNzYWdl
KToKLSAgICByZXR1cm4gJ3N0ZDo6dHVwbGU8JXM+JyAlICcsICcuam9pbihmdW5jdGlvbl9wYXJh
bWV0ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSkgZm9yIHBhcmFtZXRlciBpbiBtZXNzYWdlLnBhcmFt
ZXRlcnMpCi0KLQotZGVmIHJlcGx5X3R5cGUobWVzc2FnZSk6Ci0gICAgcmV0dXJuICdJUEM6OkFy
Z3VtZW50czwlcz4nICUgKCcsICcuam9pbihyZXBseV9wYXJhbWV0ZXJfdHlwZShwYXJhbWV0ZXIu
dHlwZSkgZm9yIHBhcmFtZXRlciBpbiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMpKQotCi0KLWRl
ZiBkZWNvZGVfdHlwZShtZXNzYWdlKToKLSAgICBwYXJhbWV0ZXJzID0gbWVzc2FnZS5wYXJhbWV0
ZXJzCi0KLSAgICBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoVkFSSUFESUNfQVRUUklCVVRFKToK
LSAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNbOi0xXQotCi0gICAgcmV0dXJuICdzdGQ6
OnR1cGxlPCVzPicgJSAnLCAnLmpvaW4ocGFyYW1ldGVyLnR5cGUgZm9yIHBhcmFtZXRlciBpbiBw
YXJhbWV0ZXJzKQotCi0KLWRlZiBtZXNzYWdlX3RvX3N0cnVjdF9kZWNsYXJhdGlvbihtZXNzYWdl
KToKLSAgICByZXN1bHQgPSBbXQotICAgIGZ1bmN0aW9uX3BhcmFtZXRlcnMgPSBbKGZ1bmN0aW9u
X3BhcmFtZXRlcl90eXBlKHgudHlwZSksIHgubmFtZSkgZm9yIHggaW4gbWVzc2FnZS5wYXJhbWV0
ZXJzXQotICAgIHJlc3VsdC5hcHBlbmQoJ2NsYXNzICVzIHtcbicgJSBtZXNzYWdlLm5hbWUpCi0g
ICAgcmVzdWx0LmFwcGVuZCgncHVibGljOlxuJykKLSAgICByZXN1bHQuYXBwZW5kKCcgICAgdHlw
ZWRlZiAlcyBEZWNvZGVUeXBlO1xuJyAlIGRlY29kZV90eXBlKG1lc3NhZ2UpKQotICAgIHJlc3Vs
dC5hcHBlbmQoJ1xuJykKLSAgICByZXN1bHQuYXBwZW5kKCcgICAgc3RhdGljIElQQzo6U3RyaW5n
UmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsg
fVxuJykKLSAgICByZXN1bHQuYXBwZW5kKCcgICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNl
IG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiJXMiKTsgfVxuJyAlIG1lc3Nh
Z2UubmFtZSkKLSAgICByZXN1bHQuYXBwZW5kKCcgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5j
ID0gJXM7XG4nICUgKCdmYWxzZScsICd0cnVlJylbbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzICE9
IE5vbmVdKQotICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKLSAgICBpZiBtZXNzYWdlLnJlcGx5X3Bh
cmFtZXRlcnMgIT0gTm9uZToKLSAgICAgICAgaWYgbWVzc2FnZS5oYXNfYXR0cmlidXRlKERFTEFZ
RURfQVRUUklCVVRFKToKLSAgICAgICAgICAgIHNlbmRfcGFyYW1ldGVycyA9IFsoZnVuY3Rpb25f
cGFyYW1ldGVyX3R5cGUoeC50eXBlKSwgeC5uYW1lKSBmb3IgeCBpbiBtZXNzYWdlLnJlcGx5X3Bh
cmFtZXRlcnNdCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgc3RydWN0IERlbGF5ZWRS
ZXBseSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEZWxheWVkUmVwbHk+IHtcbicpCi0g
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIERlbGF5ZWRSZXBseShQYXNzUmVmUHRy
PElQQzo6Q29ubmVjdGlvbj4sIHN0ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPik7
XG4nKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICB+RGVsYXllZFJlcGx5KCk7
XG4nKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQotICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnICAgICAgICBib29sIHNlbmQoJXMpO1xuJyAlICcsICcuam9pbihbJyAnLmpvaW4o
eCkgZm9yIHggaW4gc2VuZF9wYXJhbWV0ZXJzXSkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCdcbicpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgcHJpdmF0ZTpcbicpCi0gICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IG1f
Y29ubmVjdGlvbjtcbicpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiBtX2VuY29kZXI7XG4nKQotICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICAgIH07XG5cbicpCi0KLSAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICAgIHR5cGVkZWYgJXMgUmVwbHk7XG4nICUgcmVwbHlfdHlwZShtZXNzYWdlKSkKLQotICAgIGlm
IGxlbihmdW5jdGlvbl9wYXJhbWV0ZXJzKToKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICVz
JXMoJXMpJyAlIChsZW4oZnVuY3Rpb25fcGFyYW1ldGVycykgPT0gMSBhbmQgJ2V4cGxpY2l0ICcg
b3IgJycsIG1lc3NhZ2UubmFtZSwgJywgJy5qb2luKFsnICcuam9pbih4KSBmb3IgeCBpbiBmdW5j
dGlvbl9wYXJhbWV0ZXJzXSkpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCdcbiAgICAgICAgOiBt
X2FyZ3VtZW50cyglcylcbicgJSAnLCAnLmpvaW4oW3hbMV0gZm9yIHggaW4gZnVuY3Rpb25fcGFy
YW1ldGVyc10pKQotICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAge1xuJykKLSAgICAgICAgcmVz
dWx0LmFwcGVuZCgnICAgIH1cblxuJykKLSAgICByZXN1bHQuYXBwZW5kKCcgICAgY29uc3QgJXMm
IGFyZ3VtZW50cygpIGNvbnN0XG4nICUgYXJndW1lbnRzX3R5cGUobWVzc2FnZSkpCi0gICAgcmVz
dWx0LmFwcGVuZCgnICAgIHtcbicpCi0gICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm4g
bV9hcmd1bWVudHM7XG4nKQotICAgIHJlc3VsdC5hcHBlbmQoJyAgICB9XG4nKQotICAgIHJlc3Vs
dC5hcHBlbmQoJ1xuJykKLSAgICByZXN1bHQuYXBwZW5kKCdwcml2YXRlOlxuJykKLSAgICByZXN1
bHQuYXBwZW5kKCcgICAgJXMgbV9hcmd1bWVudHM7XG4nICUgYXJndW1lbnRzX3R5cGUobWVzc2Fn
ZSkpCi0gICAgcmVzdWx0LmFwcGVuZCgnfTtcbicpCi0gICAgcmV0dXJuIHN1cnJvdW5kX2luX2Nv
bmRpdGlvbignJy5qb2luKHJlc3VsdCksIG1lc3NhZ2UuY29uZGl0aW9uKQotCi0KLWRlZiBzdHJ1
Y3Rfb3JfY2xhc3MobmFtZXNwYWNlLCB0eXBlKToKLSAgICBzdHJ1Y3RzID0gZnJvemVuc2V0KFsK
LSAgICAgICAgJ1dlYkNvcmU6OkFuaW1hdGlvbicsCi0gICAgICAgICdXZWJDb3JlOjpFZGl0b3JD
b21tYW5kc0ZvcktleUV2ZW50JywKLSAgICAgICAgJ1dlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJs
aW5lJywKLSAgICAgICAgJ1dlYkNvcmU6OkNvb2tpZScsCi0gICAgICAgICdXZWJDb3JlOjpGbG9h
dFBvaW50M0QnLAotICAgICAgICAnV2ViQ29yZTo6RmlsZUNob29zZXJTZXR0aW5ncycsCi0gICAg
ICAgICdXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJywKLSAgICAgICAgJ1dlYkNvcmU6OkhpZ2hsaWdo
dCcsCi0gICAgICAgICdXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJywKLSAgICAgICAgJ1dl
YkNvcmU6OklEQkdldFJlc3VsdCcsCi0gICAgICAgICdXZWJDb3JlOjpJREJJbmRleE1ldGFkYXRh
JywKLSAgICAgICAgJ1dlYkNvcmU6OklEQktleURhdGEnLAotICAgICAgICAnV2ViQ29yZTo6SURC
S2V5UmFuZ2VEYXRhJywKLSAgICAgICAgJ1dlYkNvcmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGEn
LAotICAgICAgICAnV2ViQ29yZTo6SWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24nLAotICAgICAg
ICAnV2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kJywKLSAgICAgICAgJ1dlYkNvcmU6Okxlbmd0aCcs
Ci0gICAgICAgICdXZWJDb3JlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24nLAotICAgICAgICAn
V2ViQ29yZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24nLAotICAgICAgICAnV2ViQ29yZTo6
Tm90aWZpY2F0aW9uQ29udGVudHMnLAotICAgICAgICAnV2ViQ29yZTo6UGFzdGVib2FyZEltYWdl
JywKLSAgICAgICAgJ1dlYkNvcmU6OlBhc3RlYm9hcmRXZWJDb250ZW50JywKLSAgICAgICAgJ1dl
YkNvcmU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uJywKLSAgICAgICAgJ1dlYkNvcmU6
OlBsdWdpbkluZm8nLAotICAgICAgICAnV2ViQ29yZTo6UHJpbnRJbmZvJywKLSAgICAgICAgJ1dl
YkNvcmU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbicsCi0gICAgICAgICdXZWJDb3JlOjpTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbicsCi0gICAgICAgICdXZWJDb3JlOjpTa2V3VHJhbnNmb3JtT3Bl
cmF0aW9uJywKLSAgICAgICAgJ1dlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uJywKLSAgICAgICAgJ1dl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JywKLSAgICAgICAgJ1dlYkNvcmU6OlRyYW5zZm9y
bU9wZXJhdGlvbicsCi0gICAgICAgICdXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zJywKLSAg
ICAgICAgJ1dlYkNvcmU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbicsCi0gICAgICAgICdX
ZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cycsCi0gICAgICAgICdXZWJDb3JlOjpWaWV3cG9ydEF0
dHJpYnV0ZXMnLAotICAgICAgICAnV2ViQ29yZTo6V2luZG93RmVhdHVyZXMnLAotICAgICAgICAn
V2ViS2l0OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbicsCi0gICAgICAgICdXZWJLaXQ6OkF0dHJp
YnV0ZWRTdHJpbmcnLAotICAgICAgICAnV2ViS2l0OjpCYWNrRm9yd2FyZExpc3RJdGVtU3RhdGUn
LAotICAgICAgICAnV2ViS2l0OjpDb2xvclNwYWNlRGF0YScsCi0gICAgICAgICdXZWJLaXQ6OkNv
bnRleHRNZW51U3RhdGUnLAotICAgICAgICAnV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMnLAotICAgICAgICAnV2ViS2l0OjpEaWN0aW9uYXJ5UG9wdXBJbmZvJywKLSAg
ICAgICAgJ1dlYktpdDo6RHJhd2luZ0FyZWFJbmZvJywKLSAgICAgICAgJ1dlYktpdDo6RWRpdGlu
Z1JhbmdlJywKLSAgICAgICAgJ1dlYktpdDo6RWRpdG9yU3RhdGUnLAotICAgICAgICAnV2ViS2l0
OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbicsCi0gICAgICAgICdXZWJLaXQ6Ok5h
dmlnYXRpb25BY3Rpb25EYXRhJywKLSAgICAgICAgJ1dlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMnLAotICAgICAgICAnV2ViS2l0OjpQYWdlU3RhdGUnLAotICAgICAgICAn
V2ViS2l0OjpQbGF0Zm9ybVBvcHVwTWVudURhdGEnLAotICAgICAgICAnV2ViS2l0OjpQbHVnaW5D
cmVhdGlvblBhcmFtZXRlcnMnLAotICAgICAgICAnV2ViS2l0OjpQbHVnaW5Qcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJywKLSAgICAgICAgJ1dlYktpdDo6UHJpbnRJbmZvJywKLSAgICAgICAgJ1dl
YktpdDo6U2VjdXJpdHlPcmlnaW5EYXRhJywKLSAgICAgICAgJ1dlYktpdDo6U3RhdGlzdGljc0Rh
dGEnLAotICAgICAgICAnV2ViS2l0OjpUZXh0Q2hlY2tlclN0YXRlJywKLSAgICAgICAgJ1dlYktp
dDo6V0tPcHRpb25JdGVtJywKLSAgICAgICAgJ1dlYktpdDo6V2ViTmF2aWdhdGlvbkRhdGFTdG9y
ZScsCi0gICAgICAgICdXZWJLaXQ6OldlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMnLAotICAgICAg
ICAnV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlJywKLSAgICAgICAgJ1dlYktpdDo6V2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycycsCi0gICAgICAgICdXZWJLaXQ6OldlYlNjcmlwdE1lc3Nh
Z2VIYW5kbGVySGFuZGxlJywKLSAgICAgICAgJ1dlYktpdDo6V2luZG93R2VvbWV0cnknLAotICAg
IF0pCi0KLSAgICBxdWFsaWZpZWRfbmFtZSA9ICclczo6JXMnICUgKG5hbWVzcGFjZSwgdHlwZSkK
LSAgICBpZiBxdWFsaWZpZWRfbmFtZSBpbiBzdHJ1Y3RzOgotICAgICAgICByZXR1cm4gJ3N0cnVj
dCAlcycgJSB0eXBlCi0KLSAgICByZXR1cm4gJ2NsYXNzICVzJyAlIHR5cGUKLQotZGVmIGZvcndh
cmRfZGVjbGFyYXRpb25zX2Zvcl9uYW1lc3BhY2UobmFtZXNwYWNlLCB0eXBlcyk6Ci0gICAgcmVz
dWx0ID0gW10KLSAgICByZXN1bHQuYXBwZW5kKCduYW1lc3BhY2UgJXMge1xuJyAlIG5hbWVzcGFj
ZSkKLSAgICByZXN1bHQgKz0gWycgICAgJXM7XG4nICUgc3RydWN0X29yX2NsYXNzKG5hbWVzcGFj
ZSwgeCkgZm9yIHggaW4gdHlwZXNdCi0gICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKLSAgICByZXR1
cm4gJycuam9pbihyZXN1bHQpCi0KLQotZGVmIGZvcndhcmRfZGVjbGFyYXRpb25zX2FuZF9oZWFk
ZXJzKHJlY2VpdmVyKToKLSAgICB0eXBlc19ieV9uYW1lc3BhY2UgPSBjb2xsZWN0aW9ucy5kZWZh
dWx0ZGljdChzZXQpCi0KLSAgICBoZWFkZXJzID0gc2V0KFsKLSAgICAgICAgJyJBcmd1bWVudHMu
aCInLAotICAgICAgICAnIk1lc3NhZ2VFbmNvZGVyLmgiJywKLSAgICAgICAgJyJTdHJpbmdSZWZl
cmVuY2UuaCInLAotICAgIF0pCi0KLSAgICBub25fdGVtcGxhdGVfd3RmX3R5cGVzID0gZnJvemVu
c2V0KFsKLSAgICAgICAgJ1N0cmluZycsCi0gICAgXSkKLQotICAgIGZvciBtZXNzYWdlIGluIHJl
Y2VpdmVyLm1lc3NhZ2VzOgotICAgICAgICBpZiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMgIT0g
Tm9uZSBhbmQgbWVzc2FnZS5oYXNfYXR0cmlidXRlKERFTEFZRURfQVRUUklCVVRFKToKLSAgICAg
ICAgICAgIGhlYWRlcnMuYWRkKCc8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+JykKLSAgICAg
ICAgICAgIHR5cGVzX2J5X25hbWVzcGFjZVsnSVBDJ10udXBkYXRlKFsnQ29ubmVjdGlvbiddKQot
Ci0gICAgZm9yIHBhcmFtZXRlciBpbiByZWNlaXZlci5pdGVycGFyYW1ldGVycygpOgotICAgICAg
ICB0eXBlID0gcGFyYW1ldGVyLnR5cGUKLQotICAgICAgICBpZiB0eXBlLmZpbmQoJzwnKSAhPSAt
MToKLSAgICAgICAgICAgICMgRG9uJ3QgZm9yd2FyZCBkZWNsYXJlIGNsYXNzIHRlbXBsYXRlcy4K
LSAgICAgICAgICAgIGhlYWRlcnMudXBkYXRlKGhlYWRlcnNfZm9yX3R5cGUodHlwZSkpCi0gICAg
ICAgICAgICBjb250aW51ZQotCi0gICAgICAgIHNwbGl0ID0gdHlwZS5zcGxpdCgnOjonKQotCi0g
ICAgICAgICMgSGFuZGxlIFdURiB0eXBlcyBldmVuIGlmIHRoZSBXVEY6OiBwcmVmaXggaXMgbm90
IGdpdmVuCi0gICAgICAgIGlmIHNwbGl0WzBdIGluIG5vbl90ZW1wbGF0ZV93dGZfdHlwZXM6Ci0g
ICAgICAgICAgICBzcGxpdC5pbnNlcnQoMCwgJ1dURicpCi0KLSAgICAgICAgaWYgbGVuKHNwbGl0
KSA9PSAyOgotICAgICAgICAgICAgbmFtZXNwYWNlID0gc3BsaXRbMF0KLSAgICAgICAgICAgIGlu
bmVyX3R5cGUgPSBzcGxpdFsxXQotICAgICAgICAgICAgdHlwZXNfYnlfbmFtZXNwYWNlW25hbWVz
cGFjZV0uYWRkKGlubmVyX3R5cGUpCi0gICAgICAgIGVsaWYgbGVuKHNwbGl0KSA+IDI6Ci0gICAg
ICAgICAgICAjIFdlIHByb2JhYmx5IGhhdmUgYSBuZXN0ZWQgc3RydWN0LCB3aGljaCBtZWFucyB3
ZSBjYW4ndCBmb3J3YXJkIGRlY2xhcmUgaXQuCi0gICAgICAgICAgICAjIEluY2x1ZGUgaXRzIGhl
YWRlciBpbnN0ZWFkLgotICAgICAgICAgICAgaGVhZGVycy51cGRhdGUoaGVhZGVyc19mb3JfdHlw
ZSh0eXBlKSkKLQotICAgIGZvcndhcmRfZGVjbGFyYXRpb25zID0gJ1xuJy5qb2luKFtmb3J3YXJk
X2RlY2xhcmF0aW9uc19mb3JfbmFtZXNwYWNlKG5hbWVzcGFjZSwgdHlwZXMpIGZvciAobmFtZXNw
YWNlLCB0eXBlcykgaW4gc29ydGVkKHR5cGVzX2J5X25hbWVzcGFjZS5pdGVtcygpKV0pCi0gICAg
aGVhZGVycyA9IFsnI2luY2x1ZGUgJXNcbicgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzb3J0ZWQo
aGVhZGVycyldCi0KLSAgICByZXR1cm4gKGZvcndhcmRfZGVjbGFyYXRpb25zLCBoZWFkZXJzKQot
Ci1kZWYgZ2VuZXJhdGVfbWVzc2FnZXNfaGVhZGVyKGZpbGUpOgotICAgIHJlY2VpdmVyID0gcGFy
c2VyLnBhcnNlKGZpbGUpCi0gICAgaGVhZGVyX2d1YXJkID0gbWVzc2FnZXNfaGVhZGVyX2ZpbGVu
YW1lKHJlY2VpdmVyKS5yZXBsYWNlKCcuJywgJ18nKQotCi0gICAgcmVzdWx0ID0gW10KLQotICAg
IHJlc3VsdC5hcHBlbmQoX2xpY2Vuc2VfaGVhZGVyKQotCi0gICAgcmVzdWx0LmFwcGVuZCgnI2lm
bmRlZiAlc1xuJyAlIGhlYWRlcl9ndWFyZCkKLSAgICByZXN1bHQuYXBwZW5kKCcjZGVmaW5lICVz
XG5cbicgJSBoZWFkZXJfZ3VhcmQpCi0KLSAgICBpZiByZWNlaXZlci5jb25kaXRpb246Ci0gICAg
ICAgIHJlc3VsdC5hcHBlbmQoJyNpZiAlc1xuXG4nICUgcmVjZWl2ZXIuY29uZGl0aW9uKQotCi0g
ICAgZm9yd2FyZF9kZWNsYXJhdGlvbnMsIGhlYWRlcnMgPSBmb3J3YXJkX2RlY2xhcmF0aW9uc19h
bmRfaGVhZGVycyhyZWNlaXZlcikKLQotICAgIHJlc3VsdCArPSBoZWFkZXJzCi0gICAgcmVzdWx0
LmFwcGVuZCgnXG4nKQotCi0gICAgcmVzdWx0LmFwcGVuZChmb3J3YXJkX2RlY2xhcmF0aW9ucykK
LSAgICByZXN1bHQuYXBwZW5kKCdcbicpCi0KLSAgICByZXN1bHQuYXBwZW5kKCduYW1lc3BhY2Ug
TWVzc2FnZXMge1xubmFtZXNwYWNlICVzIHtcbicgJSByZWNlaXZlci5uYW1lKQotICAgIHJlc3Vs
dC5hcHBlbmQoJ1xuJykKLSAgICByZXN1bHQuYXBwZW5kKCdzdGF0aWMgaW5saW5lIElQQzo6U3Ry
aW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUoKVxuJykKLSAgICByZXN1bHQuYXBwZW5k
KCd7XG4nKQotICAgIHJlc3VsdC5hcHBlbmQoJyAgICByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVu
Y2UoIiVzIik7XG4nICUgcmVjZWl2ZXIubmFtZSkKLSAgICByZXN1bHQuYXBwZW5kKCd9XG4nKQot
ICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKLSAgICByZXN1bHQuYXBwZW5kKCdcbicuam9pbihbbWVz
c2FnZV90b19zdHJ1Y3RfZGVjbGFyYXRpb24oeCkgZm9yIHggaW4gcmVjZWl2ZXIubWVzc2FnZXNd
KSkKLSAgICByZXN1bHQuYXBwZW5kKCdcbicpCi0gICAgcmVzdWx0LmFwcGVuZCgnfSAvLyBuYW1l
c3BhY2UgJXNcbn0gLy8gbmFtZXNwYWNlIE1lc3NhZ2VzXG4nICUgcmVjZWl2ZXIubmFtZSkKLQot
ICAgIGlmIHJlY2VpdmVyLmNvbmRpdGlvbjoKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgnXG4jZW5k
aWYgLy8gJXNcbicgJSByZWNlaXZlci5jb25kaXRpb24pCi0KLSAgICByZXN1bHQuYXBwZW5kKCdc
biNlbmRpZiAvLyAlc1xuJyAlIGhlYWRlcl9ndWFyZCkKLQotICAgIHJldHVybiAnJy5qb2luKHJl
c3VsdCkKLQotCi1kZWYgaGFuZGxlcl9mdW5jdGlvbihyZWNlaXZlciwgbWVzc2FnZSk6Ci0gICAg
aWYgbWVzc2FnZS5uYW1lLmZpbmQoJ1VSTCcpID09IDA6Ci0gICAgICAgIHJldHVybiAnJXM6OiVz
JyAlIChyZWNlaXZlci5uYW1lLCAndXJsJyArIG1lc3NhZ2UubmFtZVszOl0pCi0gICAgcmV0dXJu
ICclczo6JXMnICUgKHJlY2VpdmVyLm5hbWUsIG1lc3NhZ2UubmFtZVswXS5sb3dlcigpICsgbWVz
c2FnZS5uYW1lWzE6XSkKLQotCi1kZWYgYXN5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIs
IG1lc3NhZ2UpOgotICAgIGRpc3BhdGNoX2Z1bmN0aW9uX2FyZ3MgPSBbJ2RlY29kZXInLCAndGhp
cycsICcmJXMnICUgaGFuZGxlcl9mdW5jdGlvbihyZWNlaXZlciwgbWVzc2FnZSldCi0KLSAgICBk
aXNwYXRjaF9mdW5jdGlvbiA9ICdoYW5kbGVNZXNzYWdlJwotICAgIGlmIG1lc3NhZ2UuaGFzX2F0
dHJpYnV0ZShWQVJJQURJQ19BVFRSSUJVVEUpOgotICAgICAgICBkaXNwYXRjaF9mdW5jdGlvbiAr
PSAnVmFyaWFkaWMnCi0KLSAgICBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoV0FOVFNfQ09OTkVD
VElPTl9BVFRSSUJVVEUpOgotICAgICAgICBkaXNwYXRjaF9mdW5jdGlvbl9hcmdzLmluc2VydCgw
LCAnY29ubmVjdGlvbicpCi0KLSAgICByZXN1bHQgPSBbXQotICAgIHJlc3VsdC5hcHBlbmQoJyAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjolczo6JXM6Om5hbWUoKSkg
e1xuJyAlIChyZWNlaXZlci5uYW1lLCBtZXNzYWdlLm5hbWUpKQotICAgIHJlc3VsdC5hcHBlbmQo
JyAgICAgICAgSVBDOjolczxNZXNzYWdlczo6JXM6OiVzPiglcyk7XG4nICUgKGRpc3BhdGNoX2Z1
bmN0aW9uLCByZWNlaXZlci5uYW1lLCBtZXNzYWdlLm5hbWUsICcsICcuam9pbihkaXNwYXRjaF9m
dW5jdGlvbl9hcmdzKSkpCi0gICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQot
ICAgIHJlc3VsdC5hcHBlbmQoJyAgICB9XG4nKQotICAgIHJldHVybiBzdXJyb3VuZF9pbl9jb25k
aXRpb24oJycuam9pbihyZXN1bHQpLCBtZXNzYWdlLmNvbmRpdGlvbikKLQotCi1kZWYgc3luY19t
ZXNzYWdlX3N0YXRlbWVudChyZWNlaXZlciwgbWVzc2FnZSk6Ci0gICAgZGlzcGF0Y2hfZnVuY3Rp
b24gPSAnaGFuZGxlTWVzc2FnZScKLSAgICBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoREVMQVlF
RF9BVFRSSUJVVEUpOgotICAgICAgICBkaXNwYXRjaF9mdW5jdGlvbiArPSAnRGVsYXllZCcKLSAg
ICBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoVkFSSUFESUNfQVRUUklCVVRFKToKLSAgICAgICAg
ZGlzcGF0Y2hfZnVuY3Rpb24gKz0gJ1ZhcmlhZGljJwotCi0gICAgd2FudHNfY29ubmVjdGlvbiA9
IG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShERUxBWUVEX0FUVFJJQlVURSkgb3IgbWVzc2FnZS5oYXNf
YXR0cmlidXRlKFdBTlRTX0NPTk5FQ1RJT05fQVRUUklCVVRFKQotCi0gICAgcmVzdWx0ID0gW10K
LSAgICByZXN1bHQuYXBwZW5kKCcgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNz
YWdlczo6JXM6OiVzOjpuYW1lKCkpIHtcbicgJSAocmVjZWl2ZXIubmFtZSwgbWVzc2FnZS5uYW1l
KSkKLSAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIElQQzo6JXM8TWVzc2FnZXM6OiVzOjolcz4o
JXNkZWNvZGVyLCAlc3JlcGx5RW5jb2RlciwgdGhpcywgJiVzKTtcbicgJSAoZGlzcGF0Y2hfZnVu
Y3Rpb24sIHJlY2VpdmVyLm5hbWUsIG1lc3NhZ2UubmFtZSwgJ2Nvbm5lY3Rpb24sICcgaWYgd2Fu
dHNfY29ubmVjdGlvbiBlbHNlICcnLCAnJyBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoREVMQVlF
RF9BVFRSSUJVVEUpIGVsc2UgJyonLCBoYW5kbGVyX2Z1bmN0aW9uKHJlY2VpdmVyLCBtZXNzYWdl
KSkpCi0gICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQotICAgIHJlc3VsdC5h
cHBlbmQoJyAgICB9XG4nKQotICAgIHJldHVybiBzdXJyb3VuZF9pbl9jb25kaXRpb24oJycuam9p
bihyZXN1bHQpLCBtZXNzYWdlLmNvbmRpdGlvbikKLQotCi1kZWYgY2xhc3NfdGVtcGxhdGVfaGVh
ZGVycyh0ZW1wbGF0ZV9zdHJpbmcpOgotICAgIHRlbXBsYXRlX3N0cmluZyA9IHRlbXBsYXRlX3N0
cmluZy5zdHJpcCgpCi0KLSAgICBjbGFzc190ZW1wbGF0ZV90eXBlcyA9IHsKLSAgICAgICAgJ1Zl
Y3Rvcic6IHsnaGVhZGVycyc6IFsnPHd0Zi9WZWN0b3IuaD4nXSwgJ2FyZ3VtZW50X2NvZGVyX2hl
YWRlcnMnOiBbJyJBcmd1bWVudENvZGVycy5oIiddfSwKLSAgICAgICAgJ0hhc2hNYXAnOiB7J2hl
YWRlcnMnOiBbJzx3dGYvSGFzaE1hcC5oPiddLCAnYXJndW1lbnRfY29kZXJfaGVhZGVycyc6IFsn
IkFyZ3VtZW50Q29kZXJzLmgiJ119LAotICAgICAgICAnc3RkOjpwYWlyJzogeydoZWFkZXJzJzog
Wyc8dXRpbGl0eT4nXSwgJ2FyZ3VtZW50X2NvZGVyX2hlYWRlcnMnOiBbJyJBcmd1bWVudENvZGVy
cy5oIiddfSwKLSAgICB9Ci0KLSAgICBtYXRjaCA9IHJlLm1hdGNoKCcoP1A8dGVtcGxhdGVfbmFt
ZT4uKz8pPCg/UDxwYXJhbWV0ZXJfc3RyaW5nPi4rKT4nLCB0ZW1wbGF0ZV9zdHJpbmcpCi0gICAg
aWYgbm90IG1hdGNoOgotICAgICAgICByZXR1cm4geydoZWFkZXJfaW5mb3MnOltdLCAndHlwZXMn
Olt0ZW1wbGF0ZV9zdHJpbmddfQotCi0gICAgdGVtcGxhdGVfbmFtZSA9IG1hdGNoLmdyb3VwZGlj
dCgpWyd0ZW1wbGF0ZV9uYW1lJ10KLSAgICBpZiB0ZW1wbGF0ZV9uYW1lIG5vdCBpbiBjbGFzc190
ZW1wbGF0ZV90eXBlczoKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRXJyb3I6IG5vIGNsYXNz
IHRlbXBsYXRlIHR5cGUgaXMgZGVmaW5lZCBmb3IgJyVzJ1xuIiAlICh0ZW1wbGF0ZV9zdHJpbmcp
KQotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgaGVhZGVyX2luZm9zID0gW2NsYXNzX3RlbXBs
YXRlX3R5cGVzW3RlbXBsYXRlX25hbWVdXQotICAgIHR5cGVzID0gW10KLQotICAgIGZvciBwYXJh
bWV0ZXIgaW4gcGFyc2VyLnNwbGl0X3BhcmFtZXRlcnNfc3RyaW5nKG1hdGNoLmdyb3VwZGljdCgp
WydwYXJhbWV0ZXJfc3RyaW5nJ10pOgotICAgICAgICBwYXJhbWV0ZXJfaGVhZGVyX2luZm9zX2Fu
ZF90eXBlcyA9IGNsYXNzX3RlbXBsYXRlX2hlYWRlcnMocGFyYW1ldGVyKQotCi0gICAgICAgIGhl
YWRlcl9pbmZvcyArPSBwYXJhbWV0ZXJfaGVhZGVyX2luZm9zX2FuZF90eXBlc1snaGVhZGVyX2lu
Zm9zJ107Ci0gICAgICAgIHR5cGVzICs9IHBhcmFtZXRlcl9oZWFkZXJfaW5mb3NfYW5kX3R5cGVz
Wyd0eXBlcyddCi0KLSAgICByZXR1cm4geydoZWFkZXJfaW5mb3MnOmhlYWRlcl9pbmZvcywgJ3R5
cGVzJzp0eXBlc30KLQotCi1kZWYgYXJndW1lbnRfY29kZXJfaGVhZGVyc19mb3JfdHlwZSh0eXBl
KToKLSAgICBoZWFkZXJfaW5mb3NfYW5kX3R5cGVzID0gY2xhc3NfdGVtcGxhdGVfaGVhZGVycyh0
eXBlKQotCi0gICAgc3BlY2lhbF9jYXNlcyA9IHsKLSAgICAgICAgJ1N0cmluZyc6ICciQXJndW1l
bnRDb2RlcnMuaCInLAotICAgICAgICAnV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdl
RW5jb2Rlcic6ICciSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUNvZGVycy5oIicsCi0gICAgICAg
ICdXZWJLaXQ6OldlYkNvbnRleHRVc2VyTWVzc2FnZUVuY29kZXInOiAnIldlYkNvbnRleHRVc2Vy
TWVzc2FnZUNvZGVycy5oIicsCi0gICAgICAgICdXZWJLaXQ6OlNjcmlwdE1lc3NhZ2VIYW5kbGVy
SGFuZGxlJzogJyJXZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5oIicsCi0gICAgfQotCi0gICAgaGVh
ZGVycyA9IFtdCi0gICAgZm9yIGhlYWRlcl9pbmZvIGluIGhlYWRlcl9pbmZvc19hbmRfdHlwZXNb
J2hlYWRlcl9pbmZvcyddOgotICAgICAgICBoZWFkZXJzICs9IGhlYWRlcl9pbmZvWydhcmd1bWVu
dF9jb2Rlcl9oZWFkZXJzJ10KLQotICAgIGZvciB0eXBlIGluIGhlYWRlcl9pbmZvc19hbmRfdHlw
ZXNbJ3R5cGVzJ106Ci0gICAgICAgIGlmIHR5cGUgaW4gc3BlY2lhbF9jYXNlczoKLSAgICAgICAg
ICAgIGhlYWRlcnMuYXBwZW5kKHNwZWNpYWxfY2FzZXNbdHlwZV0pCi0gICAgICAgICAgICBjb250
aW51ZQotCi0gICAgICAgIHNwbGl0ID0gdHlwZS5zcGxpdCgnOjonKQotICAgICAgICBpZiBsZW4o
c3BsaXQpIDwgMjoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHNwbGl0WzBdID09
ICdXZWJDb3JlJzoKLSAgICAgICAgICAgIGhlYWRlcnMuYXBwZW5kKCciV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgiJykKLQotICAgIHJldHVybiBoZWFkZXJzCi0KLWRlZiBoZWFkZXJzX2Zvcl90eXBl
KHR5cGUpOgotICAgIGhlYWRlcl9pbmZvc19hbmRfdHlwZXMgPSBjbGFzc190ZW1wbGF0ZV9oZWFk
ZXJzKHR5cGUpCi0KLSAgICBzcGVjaWFsX2Nhc2VzID0gewotICAgICAgICAnU3RyaW5nJzogWyc8
d3RmL3RleHQvV1RGU3RyaW5nLmg+J10sCi0gICAgICAgICdXZWJDb3JlOjpDb21wb3NpdGlvblVu
ZGVybGluZSc6IFsnPFdlYkNvcmUvRWRpdG9yLmg+J10sCi0gICAgICAgICdXZWJDb3JlOjpHcmFt
bWFyRGV0YWlsJzogWyc8V2ViQ29yZS9UZXh0Q2hlY2tlckNsaWVudC5oPiddLAotICAgICAgICAn
V2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMnOiBbJzxXZWJDb3JlL0dyYXBoaWNzTGF5
ZXJBbmltYXRpb24uaD4nXSwKLSAgICAgICAgJ1dlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0Jzog
Wyc8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+J10sCi0gICAgICAgICdXZWJDb3JlOjpLZXlwcmVz
c0NvbW1hbmQnOiBbJzxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4nXSwKLSAgICAgICAgJ1dlYkNv
cmU6OkZpbGVDaG9vc2VyU2V0dGluZ3MnOiBbJzxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+J10sCi0g
ICAgICAgICdXZWJDb3JlOjpIaWdobGlnaHQnOiBbJzxXZWJDb3JlL0luc3BlY3Rvck92ZXJsYXku
aD4nXSwKLSAgICAgICAgJ1dlYkNvcmU6OlBsdWdpbkluZm8nOiBbJzxXZWJDb3JlL1BsdWdpbkRh
dGEuaD4nXSwKLSAgICAgICAgJ1dlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSc6IFsnPFdlYkNvcmUv
UGFzdGVib2FyZC5oPiddLAotICAgICAgICAnV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQn
OiBbJzxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4nXSwKLSAgICAgICAgJ1dlYkNvcmU6OlRleHRDaGVj
a2luZ1JlcXVlc3REYXRhJzogWyc8V2ViQ29yZS9UZXh0Q2hlY2tpbmcuaD4nXSwKLSAgICAgICAg
J1dlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdCc6IFsnPFdlYkNvcmUvVGV4dENoZWNrZXJDbGll
bnQuaD4nXSwKLSAgICAgICAgJ1dlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyc6IFsnPFdlYkNv
cmUvVmlld3BvcnRBcmd1bWVudHMuaD4nXSwKLSAgICAgICAgJ1dlYktpdDo6QmFja0ZvcndhcmRM
aXN0SXRlbVN0YXRlJzogWyciU2Vzc2lvblN0YXRlLmgiJ10sCi0gICAgICAgICdXZWJLaXQ6Oklu
amVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyJzogW10sCi0gICAgICAgICdXZWJLaXQ6OlBh
Z2VTdGF0ZSc6IFsnIlNlc3Npb25TdGF0ZS5oIiddLAotICAgICAgICAnV2ViS2l0OjpXZWJDb250
ZXh0VXNlck1lc3NhZ2VFbmNvZGVyJzogW10sCi0gICAgICAgICdXZWJLaXQ6OldlYkdlc3R1cmVF
dmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCi0gICAgICAgICdXZWJLaXQ6OldlYktleWJvYXJkRXZl
bnQnOiBbJyJXZWJFdmVudC5oIiddLAotICAgICAgICAnV2ViS2l0OjpXZWJNb3VzZUV2ZW50Jzog
WyciV2ViRXZlbnQuaCInXSwKLSAgICAgICAgJ1dlYktpdDo6V2ViVG91Y2hFdmVudCc6IFsnIldl
YkV2ZW50LmgiJ10sCi0gICAgICAgICdXZWJLaXQ6OldlYldoZWVsRXZlbnQnOiBbJyJXZWJFdmVu
dC5oIiddLAotICAgICAgICAnV2ViS2l0OjpXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckhhbmRsZSc6
IFsnIldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmgiJ10sCi0gICAgfQotCi0gICAgaGVhZGVycyA9
IFtdCi0gICAgZm9yIGhlYWRlcl9pbmZvIGluIGhlYWRlcl9pbmZvc19hbmRfdHlwZXNbJ2hlYWRl
cl9pbmZvcyddOgotICAgICAgICBoZWFkZXJzICs9IGhlYWRlcl9pbmZvWydoZWFkZXJzJ10KLQot
ICAgIGZvciB0eXBlIGluIGhlYWRlcl9pbmZvc19hbmRfdHlwZXNbJ3R5cGVzJ106Ci0gICAgICAg
IGlmIHR5cGUgaW4gc3BlY2lhbF9jYXNlczoKLSAgICAgICAgICAgIGhlYWRlcnMgKz0gc3BlY2lh
bF9jYXNlc1t0eXBlXQotICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAjIFdlIGFzc3Vt
ZSB0aGF0IHdlIG11c3QgaW5jbHVkZSBhIGhlYWRlciBmb3IgYSB0eXBlIGlmZiBpdCBoYXMgYSBz
Y29wZQotICAgICAgICAjIHJlc29sdXRpb24gb3BlcmF0b3IgKDo6KS4KLSAgICAgICAgc3BsaXQg
PSB0eXBlLnNwbGl0KCc6OicpCi0gICAgICAgIGlmIGxlbihzcGxpdCkgPCAyOgotICAgICAgICAg
ICAgY29udGludWUKLQotICAgICAgICBpZiBzcGxpdFswXSA9PSAnV2ViS2l0JyBvciBzcGxpdFsw
XSA9PSAnSVBDJzoKLSAgICAgICAgICAgIGhlYWRlcnMuYXBwZW5kKCciJXMuaCInICUgc3BsaXRb
MV0pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBoZWFkZXJzLmFwcGVuZCgnPCVzLyVzLmg+
JyAlIHR1cGxlKHNwbGl0WzA6Ml0pKQotCi0gICAgcmV0dXJuIGhlYWRlcnMKLQotZGVmIGdlbmVy
YXRlX21lc3NhZ2VfaGFuZGxlcihmaWxlKToKLSAgICByZWNlaXZlciA9IHBhcnNlci5wYXJzZShm
aWxlKQotICAgIGhlYWRlcl9jb25kaXRpb25zID0gewotICAgICAgICAnIiVzIicgJSBtZXNzYWdl
c19oZWFkZXJfZmlsZW5hbWUocmVjZWl2ZXIpOiBbTm9uZV0sCi0gICAgICAgICciSGFuZGxlTWVz
c2FnZS5oIic6IFtOb25lXSwKLSAgICAgICAgJyJNZXNzYWdlRGVjb2Rlci5oIic6IFtOb25lXSwK
LSAgICB9Ci0KLSAgICB0eXBlX2NvbmRpdGlvbnMgPSB7fQotICAgIGZvciBwYXJhbWV0ZXIgaW4g
cmVjZWl2ZXIuaXRlcnBhcmFtZXRlcnMoKToKLSAgICAgICAgaWYgbm90IHBhcmFtZXRlci50eXBl
IGluIHR5cGVfY29uZGl0aW9uczoKLSAgICAgICAgICAgIHR5cGVfY29uZGl0aW9uc1twYXJhbWV0
ZXIudHlwZV0gPSBbXQotCi0gICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuY29uZGl0aW9uIGluIHR5
cGVfY29uZGl0aW9uc1twYXJhbWV0ZXIudHlwZV06Ci0gICAgICAgICAgICB0eXBlX2NvbmRpdGlv
bnNbcGFyYW1ldGVyLnR5cGVdLmFwcGVuZChwYXJhbWV0ZXIuY29uZGl0aW9uKQotCi0gICAgZm9y
IHBhcmFtZXRlciBpbiByZWNlaXZlci5pdGVycGFyYW1ldGVycygpOgotICAgICAgICB0eXBlID0g
cGFyYW1ldGVyLnR5cGUKLSAgICAgICAgY29uZGl0aW9ucyA9IHR5cGVfY29uZGl0aW9uc1t0eXBl
XQotCi0gICAgICAgIGFyZ3VtZW50X2VuY29kZXJfaGVhZGVycyA9IGFyZ3VtZW50X2NvZGVyX2hl
YWRlcnNfZm9yX3R5cGUodHlwZSkKLSAgICAgICAgaWYgYXJndW1lbnRfZW5jb2Rlcl9oZWFkZXJz
OgotICAgICAgICAgICAgZm9yIGhlYWRlciBpbiBhcmd1bWVudF9lbmNvZGVyX2hlYWRlcnM6Ci0g
ICAgICAgICAgICAgICAgaWYgaGVhZGVyIG5vdCBpbiBoZWFkZXJfY29uZGl0aW9uczoKLSAgICAg
ICAgICAgICAgICAgICAgaGVhZGVyX2NvbmRpdGlvbnNbaGVhZGVyXSA9IFtdCi0gICAgICAgICAg
ICAgICAgaGVhZGVyX2NvbmRpdGlvbnNbaGVhZGVyXS5leHRlbmQoY29uZGl0aW9ucykKLQotICAg
ICAgICB0eXBlX2hlYWRlcnMgPSBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpCi0gICAgICAgIGZvciBo
ZWFkZXIgaW4gdHlwZV9oZWFkZXJzOgotICAgICAgICAgICAgaWYgaGVhZGVyIG5vdCBpbiBoZWFk
ZXJfY29uZGl0aW9uczoKLSAgICAgICAgICAgICAgICBoZWFkZXJfY29uZGl0aW9uc1toZWFkZXJd
ID0gW10KLSAgICAgICAgICAgIGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl0uZXh0ZW5kKGNvbmRp
dGlvbnMpCi0KLSAgICBmb3IgbWVzc2FnZSBpbiByZWNlaXZlci5tZXNzYWdlczoKLSAgICAgICAg
aWYgbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgZm9y
IHJlcGx5X3BhcmFtZXRlciBpbiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnM6Ci0gICAgICAgICAg
ICAgICAgdHlwZSA9IHJlcGx5X3BhcmFtZXRlci50eXBlCi0gICAgICAgICAgICAgICAgYXJndW1l
bnRfZW5jb2Rlcl9oZWFkZXJzID0gYXJndW1lbnRfY29kZXJfaGVhZGVyc19mb3JfdHlwZSh0eXBl
KQotICAgICAgICAgICAgICAgIGlmIGFyZ3VtZW50X2VuY29kZXJfaGVhZGVyczoKLSAgICAgICAg
ICAgICAgICAgICAgZm9yIGhlYWRlciBpbiBhcmd1bWVudF9lbmNvZGVyX2hlYWRlcnM6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiBoZWFkZXIgbm90IGluIGhlYWRlcl9jb25kaXRpb25zOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl0gPSBb
XQotICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX2NvbmRpdGlvbnNbaGVhZGVyXS5hcHBl
bmQobWVzc2FnZS5jb25kaXRpb24pCi0KLSAgICAgICAgICAgICAgICB0eXBlX2hlYWRlcnMgPSBo
ZWFkZXJzX2Zvcl90eXBlKHR5cGUpCi0gICAgICAgICAgICAgICAgZm9yIGhlYWRlciBpbiB0eXBl
X2hlYWRlcnM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGhlYWRlciBub3QgaW4gaGVhZGVyX2Nv
bmRpdGlvbnM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfY29uZGl0aW9uc1toZWFk
ZXJdID0gW10KLSAgICAgICAgICAgICAgICAgICAgaGVhZGVyX2NvbmRpdGlvbnNbaGVhZGVyXS5h
cHBlbmQobWVzc2FnZS5jb25kaXRpb24pCi0KLQotICAgIHJlc3VsdCA9IFtdCi0KLSAgICByZXN1
bHQuYXBwZW5kKF9saWNlbnNlX2hlYWRlcikKLSAgICByZXN1bHQuYXBwZW5kKCcjaW5jbHVkZSAi
Y29uZmlnLmgiXG4nKQotICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKLQotICAgIGlmIHJlY2VpdmVy
LmNvbmRpdGlvbjoKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2lmICVzXG5cbicgJSByZWNlaXZl
ci5jb25kaXRpb24pCi0KLSAgICByZXN1bHQuYXBwZW5kKCcjaW5jbHVkZSAiJXMuaCJcblxuJyAl
IHJlY2VpdmVyLm5hbWUpCi0gICAgZm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVhZGVyX2NvbmRpdGlv
bnMpOgotICAgICAgICBpZiBoZWFkZXJfY29uZGl0aW9uc1toZWFkZXJdIGFuZCBub3QgTm9uZSBp
biBoZWFkZXJfY29uZGl0aW9uc1toZWFkZXJdOgotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
I2lmICVzXG4nICUgJyB8fCAnLmpvaW4oc2V0KGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl0pKSkK
LSAgICAgICAgICAgIHJlc3VsdCArPSBbJyNpbmNsdWRlICVzXG4nICUgaGVhZGVyXQotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnI2VuZGlmXG4nKQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgcmVzdWx0ICs9IFsnI2luY2x1ZGUgJXNcbicgJSBoZWFkZXJdCi0gICAgcmVzdWx0LmFwcGVu
ZCgnXG4nKQotCi0gICAgc3luY19kZWxheWVkX21lc3NhZ2VzID0gW10KLSAgICBmb3IgbWVzc2Fn
ZSBpbiByZWNlaXZlci5tZXNzYWdlczoKLSAgICAgICAgaWYgbWVzc2FnZS5yZXBseV9wYXJhbWV0
ZXJzICE9IE5vbmUgYW5kIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShERUxBWUVEX0FUVFJJQlVURSk6
Ci0gICAgICAgICAgICBzeW5jX2RlbGF5ZWRfbWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpCi0KLSAg
ICBpZiBzeW5jX2RlbGF5ZWRfbWVzc2FnZXM6Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoJ25hbWVz
cGFjZSBNZXNzYWdlcyB7XG5cbm5hbWVzcGFjZSAlcyB7XG5cbicgJSByZWNlaXZlci5uYW1lKQot
Ci0gICAgICAgIGZvciBtZXNzYWdlIGluIHN5bmNfZGVsYXllZF9tZXNzYWdlczoKLSAgICAgICAg
ICAgIHNlbmRfcGFyYW1ldGVycyA9IFsoZnVuY3Rpb25fcGFyYW1ldGVyX3R5cGUoeC50eXBlKSwg
eC5uYW1lKSBmb3IgeCBpbiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnNdCi0KLSAgICAgICAgICAg
IGlmIG1lc3NhZ2UuY29uZGl0aW9uOgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyNp
ZiAlc1xuXG4nICUgbWVzc2FnZS5jb25kaXRpb24pCi0KLSAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyVzOjpEZWxheWVkUmVwbHk6OkRlbGF5ZWRSZXBseShQYXNzUmVmUHRyPElQQzo6Q29ubmVj
dGlvbj4gY29ubmVjdGlvbiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+IGVu
Y29kZXIpXG4nICUgbWVzc2FnZS5uYW1lKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAg
IDogbV9jb25uZWN0aW9uKGNvbm5lY3Rpb24pXG4nKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICAgICwgbV9lbmNvZGVyKFdURjo6bW92ZShlbmNvZGVyKSlcbicpCi0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCd7XG4nKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKLSAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyVzOjpEZWxheWVkUmVwbHk6On5EZWxheWVkUmVwbHkoKVxuJyAlIG1lc3NhZ2UubmFtZSkKLSAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCcgICAgQVNTRVJUKCFtX2Nvbm5lY3Rpb24pO1xuJykKLSAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJ31cbicpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCdcbicpCi0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCdib29sICVzOjpEZWxheWVkUmVwbHk6OnNlbmQoJXMpXG4nICUgKG1lc3Nh
Z2UubmFtZSwgJywgJy5qb2luKFsnICcuam9pbih4KSBmb3IgeCBpbiBzZW5kX3BhcmFtZXRlcnNd
KSkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQotICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnICAgIEFTU0VSVChtX2VuY29kZXIpO1xuJykKLSAgICAgICAgICAgIHJlc3VsdCAr
PSBbJyAgICAqbV9lbmNvZGVyIDw8ICVzO1xuJyAlIHgubmFtZSBmb3IgeCBpbiBtZXNzYWdlLnJl
cGx5X3BhcmFtZXRlcnNdCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgYm9vbCBfcmVz
dWx0ID0gbV9jb25uZWN0aW9uLT5zZW5kU3luY1JlcGx5KFdURjo6bW92ZShtX2VuY29kZXIpKTtc
bicpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgbV9jb25uZWN0aW9uID0gbnVsbHB0
cjtcbicpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgcmV0dXJuIF9yZXN1bHQ7XG4n
KQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKLSAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJ1xuJykKLQotICAgICAgICAgICAgaWYgbWVzc2FnZS5jb25kaXRpb246Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2VuZGlmXG5cbicpCi0KLSAgICAgICAgcmVzdWx0LmFw
cGVuZCgnfSAvLyBuYW1lc3BhY2UgJXNcblxufSAvLyBuYW1lc3BhY2UgTWVzc2FnZXNcblxuJyAl
IHJlY2VpdmVyLm5hbWUpCi0KLSAgICByZXN1bHQuYXBwZW5kKCduYW1lc3BhY2UgV2ViS2l0IHtc
blxuJykKLQotICAgIGFzeW5jX21lc3NhZ2VzID0gW10KLSAgICBzeW5jX21lc3NhZ2VzID0gW10K
LSAgICBmb3IgbWVzc2FnZSBpbiByZWNlaXZlci5tZXNzYWdlczoKLSAgICAgICAgaWYgbWVzc2Fn
ZS5yZXBseV9wYXJhbWV0ZXJzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc3luY19tZXNzYWdl
cy5hcHBlbmQobWVzc2FnZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGFzeW5jX21lc3Nh
Z2VzLmFwcGVuZChtZXNzYWdlKQotCi0gICAgaWYgYXN5bmNfbWVzc2FnZXM6Ci0gICAgICAgIGlm
IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSk6Ci0gICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCd2b2lkICVzOjpkaWRSZWNlaXZlJXNNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIpXG4nICUgKHJlY2VpdmVy
Lm5hbWUsIHJlY2VpdmVyLm5hbWUpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiBjb25u
ZWN0aW9uLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1l
KSkKLQotICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQotICAgICAgICByZXN1bHQgKz0gW2Fz
eW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBh
c3luY19tZXNzYWdlc10KLSAgICAgICAgaWYgKHJlY2VpdmVyLnN1cGVyY2xhc3MpOgotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICVzOjpkaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9u
LCBkZWNvZGVyKTtcbicgJSAocmVjZWl2ZXIuc3VwZXJjbGFzcykpCi0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJf
QVRUUklCVVRFKToKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BB
UkFNKGNvbm5lY3Rpb24pO1xuJykKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVT
RURfUEFSQU0oZGVjb2Rlcik7XG4nKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpO1xuJykKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKLQot
ICAgIGlmIHN5bmNfbWVzc2FnZXM6Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKLSAgICAg
ICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFKToK
LSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmVTeW5jJXNNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiolcywgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2Rlciwgc3Rk
Ojp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+JiByZXBseUVuY29kZXIpXG4nICUgKHJl
Y2VpdmVyLm5hbWUsIHJlY2VpdmVyLm5hbWUsICcgY29ubmVjdGlvbicgaWYgc3luY19kZWxheWVk
X21lc3NhZ2VzIGVsc2UgJycpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiogY29u
bmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQ
Qzo6TWVzc2FnZUVuY29kZXI+JiByZXBseUVuY29kZXIpXG4nICUgKHJlY2VpdmVyLm5hbWUpKQot
ICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQotICAgICAgICByZXN1bHQgKz0gW3N5bmNfbWVz
c2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIHN5bmNfbWVz
c2FnZXNdCi0gICAgICAgIGlmIG5vdCByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNF
SVZFUl9BVFRSSUJVVEUpOgotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9Q
QVJBTShjb25uZWN0aW9uKTtcbicpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURf
UEFSQU0oZGVjb2Rlcik7XG4nKQotICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BB
UkFNKHJlcGx5RW5jb2Rlcik7XG4nKQotICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7XG4nKQotICAgICAgICByZXN1bHQuYXBwZW5kKCd9XG4nKQotCi0gICAg
cmVzdWx0LmFwcGVuZCgnXG59IC8vIG5hbWVzcGFjZSBXZWJLaXRcbicpCi0KLSAgICBpZiByZWNl
aXZlci5jb25kaXRpb246Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xuI2VuZGlmIC8vICVzXG4n
ICUgcmVjZWl2ZXIuY29uZGl0aW9uKQotCi0gICAgcmV0dXJuICcnLmpvaW4ocmVzdWx0KQpJbmRl
eDogU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzX3VuaXR0ZXN0LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlc191bml0
dGVzdC5weQkocmV2aXNpb24gMTczNDkxKQorKysgU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJr
aXQyL21lc3NhZ2VzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM1NyArMCwwIEBA
Ci0jIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0j
Ci0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
Ci0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBvcwotaW1w
b3J0IHVuaXR0ZXN0Ci1mcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwotCi1pbXBvcnQgbWVz
c2FnZXMKLWltcG9ydCBwYXJzZXIKLQotcHJpbnQgb3MuZ2V0Y3dkKCkKLQotc2NyaXB0X2RpcmVj
dG9yeSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKLQotd2l0
aCBvcGVuKG9zLnBhdGguam9pbihzY3JpcHRfZGlyZWN0b3J5LCAndGVzdC1tZXNzYWdlcy5pbicp
KSBhcyBmaWxlOgotICAgIF9tZXNzYWdlc19maWxlX2NvbnRlbnRzID0gZmlsZS5yZWFkKCkKLQot
d2l0aCBvcGVuKG9zLnBhdGguam9pbihzY3JpcHRfZGlyZWN0b3J5LCAndGVzdC1sZWdhY3ktbWVz
c2FnZXMuaW4nKSkgYXMgZmlsZToKLSAgICBfbGVnYWN5X21lc3NhZ2VzX2ZpbGVfY29udGVudHMg
PSBmaWxlLnJlYWQoKQotCi13aXRoIG9wZW4ob3MucGF0aC5qb2luKHNjcmlwdF9kaXJlY3Rvcnks
ICd0ZXN0LXN1cGVyY2xhc3MtbWVzc2FnZXMuaW4nKSkgYXMgZmlsZToKLSAgICBfc3VwZXJjbGFz
c19tZXNzYWdlc19maWxlX2NvbnRlbnRzID0gZmlsZS5yZWFkKCkKLQotCi13aXRoIG9wZW4ob3Mu
cGF0aC5qb2luKHNjcmlwdF9kaXJlY3RvcnksICdNZXNzYWdlcy1leHBlY3RlZC5oJykpIGFzIGZp
bGU6Ci0gICAgX2V4cGVjdGVkX3JlY2VpdmVyX2hlYWRlciA9IGZpbGUucmVhZCgpCi0KLXdpdGgg
b3Blbihvcy5wYXRoLmpvaW4oc2NyaXB0X2RpcmVjdG9yeSwgJ0xlZ2FjeU1lc3NhZ2VzLWV4cGVj
dGVkLmgnKSkgYXMgZmlsZToKLSAgICBfZXhwZWN0ZWRfbGVnYWN5X3JlY2VpdmVyX2hlYWRlciA9
IGZpbGUucmVhZCgpCi0KLXdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2NyaXB0X2RpcmVjdG9yeSwg
J01lc3NhZ2VzU3VwZXJjbGFzcy1leHBlY3RlZC5oJykpIGFzIGZpbGU6Ci0gICAgX2V4cGVjdGVk
X3N1cGVyY2xhc3NfcmVjZWl2ZXJfaGVhZGVyID0gZmlsZS5yZWFkKCkKLSAgICAKLQotd2l0aCBv
cGVuKG9zLnBhdGguam9pbihzY3JpcHRfZGlyZWN0b3J5LCAnTWVzc2FnZVJlY2VpdmVyLWV4cGVj
dGVkLmNwcCcpKSBhcyBmaWxlOgotICAgIF9leHBlY3RlZF9yZWNlaXZlcl9pbXBsZW1lbnRhdGlv
biA9IGZpbGUucmVhZCgpCi0KLXdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2NyaXB0X2RpcmVjdG9y
eSwgJ0xlZ2FjeU1lc3NhZ2VSZWNlaXZlci1leHBlY3RlZC5jcHAnKSkgYXMgZmlsZToKLSAgICBf
ZXhwZWN0ZWRfbGVnYWN5X3JlY2VpdmVyX2ltcGxlbWVudGF0aW9uID0gZmlsZS5yZWFkKCkKLQot
d2l0aCBvcGVuKG9zLnBhdGguam9pbihzY3JpcHRfZGlyZWN0b3J5LCAnTWVzc2FnZVJlY2VpdmVy
U3VwZXJjbGFzcy1leHBlY3RlZC5jcHAnKSkgYXMgZmlsZToKLSAgICBfZXhwZWN0ZWRfc3VwZXJj
bGFzc19yZWNlaXZlcl9pbXBsZW1lbnRhdGlvbiA9IGZpbGUucmVhZCgpCi0KLV9leHBlY3RlZF9y
ZXN1bHRzID0gewotICAgICduYW1lJzogJ1dlYlBhZ2UnLAotICAgICdjb25kaXRpb25zJzogKCco
RU5BQkxFKFdFQktJVDIpICYmIChORVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNURVJfT1Ig
JiYgTUFTVEVSX0FORCkpJyksCi0gICAgJ21lc3NhZ2VzJzogKAotICAgICAgICB7Ci0gICAgICAg
ICAgICAnbmFtZSc6ICdMb2FkVVJMJywKLSAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogKAotICAg
ICAgICAgICAgICAgICgnU3RyaW5nJywgJ3VybCcpLAotICAgICAgICAgICAgKSwKLSAgICAgICAg
ICAgICdjb25kaXRpb25zJzogKE5vbmUpLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAg
ICAgICAnbmFtZSc6ICdMb2FkU29tZXRoaW5nJywKLSAgICAgICAgICAgICdwYXJhbWV0ZXJzJzog
KAotICAgICAgICAgICAgICAgICgnU3RyaW5nJywgJ3VybCcpLAotICAgICAgICAgICAgKSwKLSAg
ICAgICAgICAgICdjb25kaXRpb25zJzogKCdFTkFCTEUoVE9VQ0hfRVZFTlRTKScpLAotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAnbmFtZSc6ICdUb3VjaEV2ZW50JywKLSAgICAg
ICAgICAgICdwYXJhbWV0ZXJzJzogKAotICAgICAgICAgICAgICAgICgnV2ViS2l0OjpXZWJUb3Vj
aEV2ZW50JywgJ2V2ZW50JyksCi0gICAgICAgICAgICApLAotICAgICAgICAgICAgJ2NvbmRpdGlv
bnMnOiAoJyhFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9O
IHx8IFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKScpLAotICAgICAgICB9LAotICAgICAg
ICB7Ci0gICAgICAgICAgICAnbmFtZSc6ICdBZGRFdmVudCcsCi0gICAgICAgICAgICAncGFyYW1l
dGVycyc6ICgKLSAgICAgICAgICAgICAgICAoJ1dlYktpdDo6V2ViVG91Y2hFdmVudCcsICdldmVu
dCcpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogKCcoRU5BQkxF
KFRPVUNIX0VWRU5UUykgJiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiAmJiBTT01FX09USEVS
X01FU1NBR0VfQ09ORElUSU9OKSknKSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAg
ICAgJ25hbWUnOiAnTG9hZFNvbWV0aGluZ0Vsc2UnLAotICAgICAgICAgICAgJ3BhcmFtZXRlcnMn
OiAoCi0gICAgICAgICAgICAgICAgKCdTdHJpbmcnLCAndXJsJyksCi0gICAgICAgICAgICApLAot
ICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiAoJ0VOQUJMRShUT1VDSF9FVkVOVFMpJyksCi0gICAg
ICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICduYW1lJzogJ0RpZFJlY2VpdmVQb2xpY3lE
ZWNpc2lvbicsCi0gICAgICAgICAgICAncGFyYW1ldGVycyc6ICgKLSAgICAgICAgICAgICAgICAo
J3VpbnQ2NF90JywgJ2ZyYW1lSUQnKSwKLSAgICAgICAgICAgICAgICAoJ3VpbnQ2NF90JywgJ2xp
c3RlbmVySUQnKSwKLSAgICAgICAgICAgICAgICAoJ3VpbnQzMl90JywgJ3BvbGljeUFjdGlvbicp
LAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogKE5vbmUpLAotICAg
ICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAnbmFtZSc6ICdDbG9zZScsCi0gICAgICAg
ICAgICAncGFyYW1ldGVycyc6ICgpLAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiAoTm9uZSks
Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICduYW1lJzogJ1ByZWZlcmVuY2Vz
RGlkQ2hhbmdlJywKLSAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogKAotICAgICAgICAgICAgICAg
ICgnV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlJywgJ3N0b3JlJyksCi0gICAgICAgICAgICAp
LAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiAoTm9uZSksCi0gICAgICAgIH0sCi0gICAgICAg
IHsKLSAgICAgICAgICAgICduYW1lJzogJ1NlbmREb3VibGVBbmRGbG9hdCcsCi0gICAgICAgICAg
ICAncGFyYW1ldGVycyc6ICgKLSAgICAgICAgICAgICAgICAoJ2RvdWJsZScsICdkJyksCi0gICAg
ICAgICAgICAgICAgKCdmbG9hdCcsICdmJyksCi0gICAgICAgICAgICApLAotICAgICAgICAgICAg
J2NvbmRpdGlvbnMnOiAoTm9uZSksCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICduYW1lJzogJ1NlbmRJbnRzJywKLSAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogKAotICAgICAg
ICAgICAgICAgICgnVmVjdG9yPHVpbnQ2NF90PicsICdpbnRzJyksCi0gICAgICAgICAgICAgICAg
KCdWZWN0b3I8VmVjdG9yPHVpbnQ2NF90Pj4nLCAnaW50VmVjdG9ycycpCi0gICAgICAgICAgICAp
LAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiAoTm9uZSksCi0gICAgICAgIH0sCi0gICAgICAg
IHsKLSAgICAgICAgICAgICduYW1lJzogJ0NyZWF0ZVBsdWdpbicsCi0gICAgICAgICAgICAncGFy
YW1ldGVycyc6ICgKLSAgICAgICAgICAgICAgICAoJ3VpbnQ2NF90JywgJ3BsdWdpbkluc3RhbmNl
SUQnKSwKLSAgICAgICAgICAgICAgICAoJ1dlYktpdDo6UGx1Z2luOjpQYXJhbWV0ZXJzJywgJ3Bh
cmFtZXRlcnMnKQotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICdyZXBseV9wYXJhbWV0ZXJz
JzogKAotICAgICAgICAgICAgICAgICgnYm9vbCcsICdyZXN1bHQnKSwKLSAgICAgICAgICAgICks
Ci0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IChOb25lKSwKLSAgICAgICAgfSwKLSAgICAgICAg
ewotICAgICAgICAgICAgJ25hbWUnOiAnUnVuSmF2YVNjcmlwdEFsZXJ0JywKLSAgICAgICAgICAg
ICdwYXJhbWV0ZXJzJzogKAotICAgICAgICAgICAgICAgICgndWludDY0X3QnLCAnZnJhbWVJRCcp
LAotICAgICAgICAgICAgICAgICgnU3RyaW5nJywgJ21lc3NhZ2UnKQotICAgICAgICAgICAgKSwK
LSAgICAgICAgICAgICdyZXBseV9wYXJhbWV0ZXJzJzogKCksCi0gICAgICAgICAgICAnY29uZGl0
aW9ucyc6IChOb25lKSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgJ25hbWUn
OiAnR2V0UGx1Z2lucycsCi0gICAgICAgICAgICAncGFyYW1ldGVycyc6ICgKLSAgICAgICAgICAg
ICAgICAoJ2Jvb2wnLCAncmVmcmVzaCcpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICdy
ZXBseV9wYXJhbWV0ZXJzJzogKAotICAgICAgICAgICAgICAgICgnVmVjdG9yPFdlYkNvcmU6OlBs
dWdpbkluZm8+JywgJ3BsdWdpbnMnKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAnY29u
ZGl0aW9ucyc6IChOb25lKSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgJ25h
bWUnOiAnR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24nLAotICAgICAgICAgICAgJ3BhcmFtZXRl
cnMnOiAoCi0gICAgICAgICAgICAgICAgKCdTdHJpbmcnLCAncGx1Z2luUGF0aCcpLAotICAgICAg
ICAgICAgKSwKLSAgICAgICAgICAgICdyZXBseV9wYXJhbWV0ZXJzJzogKAotICAgICAgICAgICAg
ICAgICgnSVBDOjpDb25uZWN0aW9uOjpIYW5kbGUnLCAnY29ubmVjdGlvbkhhbmRsZScpLAotICAg
ICAgICAgICAgKSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogKE5vbmUpLAotICAgICAgICB9
LAotICAgICAgICB7Ci0gICAgICAgICAgICAnbmFtZSc6ICdUZXN0TXVsdGlwbGVBdHRyaWJ1dGVz
JywKLSAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogKAotICAgICAgICAgICAgKSwKLSAgICAgICAg
ICAgICdyZXBseV9wYXJhbWV0ZXJzJzogKAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICdj
b25kaXRpb25zJzogKE5vbmUpLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAn
bmFtZSc6ICdUZXN0UGFyYW1ldGVyQXR0cmlidXRlcycsCi0gICAgICAgICAgICAncGFyYW1ldGVy
cyc6ICgKLSAgICAgICAgICAgICAgICAoJ3VpbnQ2NF90JywgJ2ZvbycsICgnQXR0cmlidXRlT25l
JywgJ0F0dHJpYnV0ZVR3bycpKSwKLSAgICAgICAgICAgICAgICAoJ2RvdWJsZScsICdiYXInKSwK
LSAgICAgICAgICAgICAgICAoJ2RvdWJsZScsICdiYXonLCAoJ0F0dHJpYnV0ZVRocmVlJywpKSwK
LSAgICAgICAgICAgICksCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IChOb25lKSwKLSAgICAg
ICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgJ25hbWUnOiAnVGVtcGxhdGVUZXN0JywKLSAg
ICAgICAgICAgICdwYXJhbWV0ZXJzJzogKAotICAgICAgICAgICAgICAgICgnSGFzaE1hcDxTdHJp
bmcsIHN0ZDo6cGFpcjxTdHJpbmcsIHVpbnQ2NF90Pj4nLCAnYScpLAotICAgICAgICAgICAgKSwK
LSAgICAgICAgICAgICdjb25kaXRpb25zJzogKE5vbmUpLAotICAgICAgICB9LAotICAgICAgICB7
Ci0gICAgICAgICAgICAnbmFtZSc6ICdTZXRWaWRlb0xheWVySUQnLAotICAgICAgICAgICAgJ3Bh
cmFtZXRlcnMnOiAoCi0gICAgICAgICAgICAgICAgKCdXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQ
bGF0Zm9ybUxheWVySUQnLCAndmlkZW9MYXllcklEJyksCi0gICAgICAgICAgICApLAotICAgICAg
ICAgICAgJ2NvbmRpdGlvbnMnOiAoTm9uZSksCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICduYW1lJzogJ0RpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uJywKLSAgICAgICAg
ICAgICdwYXJhbWV0ZXJzJzogKAotICAgICAgICAgICAgICAgICgnSVBDOjpNYWNoUG9ydCcsICdj
b25uZWN0aW9uSWRlbnRpZmllcicpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICdjb25k
aXRpb25zJzogKCdQTEFURk9STShNQUMpJyksCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICduYW1lJzogJ0ludGVycHJldEtleUV2ZW50JywKLSAgICAgICAgICAgICdwYXJhbWV0
ZXJzJzogKAotICAgICAgICAgICAgICAgICgndWludDMyX3QnLCAndHlwZScpLAotICAgICAgICAg
ICAgKSwKLSAgICAgICAgICAgICdyZXBseV9wYXJhbWV0ZXJzJzogKAotICAgICAgICAgICAgICAg
ICgnVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4nLCAnY29tbWFuZE5hbWUnKSwKLSAg
ICAgICAgICAgICksCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6ICgnUExBVEZPUk0oTUFDKScp
LAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAnbmFtZSc6ICdEZXByZWNhdGVk
T3BlcmF0aW9uJywKLSAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogKAotICAgICAgICAgICAgICAg
ICgnSVBDOjpEdW1teVR5cGUnLCAnZHVtbXknKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAg
ICAnY29uZGl0aW9ucyc6ICgnRU5BQkxFKERFUFJFQ0FURURfRkVBVFVSRSknKSwKLSAgICAgICAg
fSwKLSAgICAgICAgewotICAgICAgICAgICAgJ25hbWUnOiAnRXhwZXJpbWVudGFsT3BlcmF0aW9u
JywKLSAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogKAotICAgICAgICAgICAgICAgICgnSVBDOjpE
dW1teVR5cGUnLCAnZHVtbXknKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAnY29uZGl0
aW9ucyc6ICgnRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFUVVJFKScpLAotICAgICAgICB9Ci0gICAg
KSwKLX0KLQotX2V4cGVjdGVkX3N1cGVyY2xhc3NfcmVzdWx0cyA9IHsKLSAgICAnbmFtZSc6ICdX
ZWJQYWdlJywKLSAgICAnc3VwZXJjbGFzcycgOiAnV2ViUGFnZUJhc2UnLAotICAgICdjb25kaXRp
b25zJzogTm9uZSwKLSAgICAnbWVzc2FnZXMnOiAoCi0gICAgICAgIHsKLSAgICAgICAgICAgICdu
YW1lJzogJ0xvYWRVUkwnLAotICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAoCi0gICAgICAgICAg
ICAgICAgKCdTdHJpbmcnLCAndXJsJyksCi0gICAgICAgICAgICApLAotICAgICAgICAgICAgJ2Nv
bmRpdGlvbnMnOiAoTm9uZSksCi0gICAgICAgIH0sCi0gICAgKSwKLX0KLQotCi1jbGFzcyBNZXNz
YWdlc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAg
ICAgc2VsZi5yZWNlaXZlciA9IHBhcnNlci5wYXJzZShTdHJpbmdJTyhfbWVzc2FnZXNfZmlsZV9j
b250ZW50cykpCi0gICAgICAgIHNlbGYubGVnYWN5X3JlY2VpdmVyID0gcGFyc2VyLnBhcnNlKFN0
cmluZ0lPKF9sZWdhY3lfbWVzc2FnZXNfZmlsZV9jb250ZW50cykpCi0gICAgICAgIHNlbGYuc3Vw
ZXJjbGFzc19yZWNlaXZlciA9IHBhcnNlci5wYXJzZShTdHJpbmdJTyhfc3VwZXJjbGFzc19tZXNz
YWdlc19maWxlX2NvbnRlbnRzKSkKLQotCi1jbGFzcyBQYXJzaW5nVGVzdChNZXNzYWdlc1Rlc3Qp
OgotICAgIGRlZiBjaGVja19tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIGV4cGVjdGVkX21lc3NhZ2Up
OgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXNzYWdlLm5hbWUsIGV4cGVjdGVkX21lc3Nh
Z2VbJ25hbWUnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKG1lc3NhZ2UucGFyYW1l
dGVycyksIGxlbihleHBlY3RlZF9tZXNzYWdlWydwYXJhbWV0ZXJzJ10pKQotICAgICAgICBmb3Ig
aW5kZXgsIHBhcmFtZXRlciBpbiBlbnVtZXJhdGUobWVzc2FnZS5wYXJhbWV0ZXJzKToKLSAgICAg
ICAgICAgIGV4cGVjdGVkX3BhcmFtZXRlciA9IGV4cGVjdGVkX21lc3NhZ2VbJ3BhcmFtZXRlcnMn
XVtpbmRleF0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFtZXRlci50eXBlLCBl
eHBlY3RlZF9wYXJhbWV0ZXJbMF0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJh
bWV0ZXIubmFtZSwgZXhwZWN0ZWRfcGFyYW1ldGVyWzFdKQotICAgICAgICAgICAgaWYgbGVuKGV4
cGVjdGVkX3BhcmFtZXRlcikgPiAyOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KHBhcmFtZXRlci5hdHRyaWJ1dGVzLCBmcm96ZW5zZXQoZXhwZWN0ZWRfcGFyYW1ldGVyWzJdKSkK
LSAgICAgICAgICAgICAgICBmb3IgYXR0cmlidXRlIGluIGV4cGVjdGVkX3BhcmFtZXRlclsyXToK
LSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhcmFtZXRlci5oYXNfYXR0cmli
dXRlKGF0dHJpYnV0ZSkpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKHBhcmFtZXRlci5hdHRyaWJ1dGVzLCBmcm96ZW5zZXQoKSkKLSAgICAgICAg
aWYgbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzICE9IE5vbmU6Ci0gICAgICAgICAgICBmb3IgaW5k
ZXgsIHBhcmFtZXRlciBpbiBlbnVtZXJhdGUobWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzKToKLSAg
ICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJhbWV0ZXIudHlwZSwgZXhwZWN0ZWRf
bWVzc2FnZVsncmVwbHlfcGFyYW1ldGVycyddW2luZGV4XVswXSkKLSAgICAgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhwYXJhbWV0ZXIubmFtZSwgZXhwZWN0ZWRfbWVzc2FnZVsncmVwbHlf
cGFyYW1ldGVycyddW2luZGV4XVsxXSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UoJ3JlcGx5X3BhcmFtZXRlcnMnIGluIGV4cGVjdGVkX21lc3NhZ2UpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1lc3NhZ2UuY29uZGl0aW9uLCBleHBlY3RlZF9tZXNzYWdl
Wydjb25kaXRpb25zJ10pCi0KLSAgICBkZWYgdGVzdF9yZWNlaXZlcihzZWxmKToKLSAgICAgICAg
IiIiUmVjZWl2ZXIgc2hvdWxkIGJlIHBhcnNlZCBhcyBleHBlY3RlZCIiIgotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhzZWxmLnJlY2VpdmVyLm5hbWUsIF9leHBlY3RlZF9yZXN1bHRzWyduYW1l
J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucmVjZWl2ZXIuY29uZGl0aW9uLCBf
ZXhwZWN0ZWRfcmVzdWx0c1snY29uZGl0aW9ucyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhsZW4oc2VsZi5yZWNlaXZlci5tZXNzYWdlcyksIGxlbihfZXhwZWN0ZWRfcmVzdWx0c1snbWVz
c2FnZXMnXSkpCi0gICAgICAgIGZvciBpbmRleCwgbWVzc2FnZSBpbiBlbnVtZXJhdGUoc2VsZi5y
ZWNlaXZlci5tZXNzYWdlcyk6Ci0gICAgICAgICAgICBzZWxmLmNoZWNrX21lc3NhZ2UobWVzc2Fn
ZSwgX2V4cGVjdGVkX3Jlc3VsdHNbJ21lc3NhZ2VzJ11baW5kZXhdKQotCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKHNlbGYubGVnYWN5X3JlY2VpdmVyLm5hbWUsIF9leHBlY3RlZF9yZXN1bHRz
WyduYW1lJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYubGVnYWN5X3JlY2VpdmVy
LmNvbmRpdGlvbiwgX2V4cGVjdGVkX3Jlc3VsdHNbJ2NvbmRpdGlvbnMnXSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMobGVuKHNlbGYubGVnYWN5X3JlY2VpdmVyLm1lc3NhZ2VzKSwgbGVuKF9l
eHBlY3RlZF9yZXN1bHRzWydtZXNzYWdlcyddKSkKLSAgICAgICAgZm9yIGluZGV4LCBtZXNzYWdl
IGluIGVudW1lcmF0ZShzZWxmLmxlZ2FjeV9yZWNlaXZlci5tZXNzYWdlcyk6Ci0gICAgICAgICAg
ICBzZWxmLmNoZWNrX21lc3NhZ2UobWVzc2FnZSwgX2V4cGVjdGVkX3Jlc3VsdHNbJ21lc3NhZ2Vz
J11baW5kZXhdKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuc3VwZXJjbGFzc19y
ZWNlaXZlci5uYW1lLCBfZXhwZWN0ZWRfc3VwZXJjbGFzc19yZXN1bHRzWyduYW1lJ10pCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuc3VwZXJjbGFzc19yZWNlaXZlci5zdXBlcmNsYXNz
LCBfZXhwZWN0ZWRfc3VwZXJjbGFzc19yZXN1bHRzWydzdXBlcmNsYXNzJ10pCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKGxlbihzZWxmLnN1cGVyY2xhc3NfcmVjZWl2ZXIubWVzc2FnZXMpLCBs
ZW4oX2V4cGVjdGVkX3N1cGVyY2xhc3NfcmVzdWx0c1snbWVzc2FnZXMnXSkpCi0gICAgICAgIGZv
ciBpbmRleCwgbWVzc2FnZSBpbiBlbnVtZXJhdGUoc2VsZi5zdXBlcmNsYXNzX3JlY2VpdmVyLm1l
c3NhZ2VzKToKLSAgICAgICAgICAgIHNlbGYuY2hlY2tfbWVzc2FnZShtZXNzYWdlLCBfZXhwZWN0
ZWRfc3VwZXJjbGFzc19yZXN1bHRzWydtZXNzYWdlcyddW2luZGV4XSkKLQotCi0KLWNsYXNzIEdl
bmVyYXRlZEZpbGVDb250ZW50c1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBhc3Nl
cnRHZW5lcmF0ZWRGaWxlQ29udGVudHNFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kKToKLSAgICAg
ICAgZmlyc3RfbGlzdCA9IGZpcnN0LnNwbGl0KCdcbicpCi0gICAgICAgIHNlY29uZF9saXN0ID0g
c2Vjb25kLnNwbGl0KCdcbicpCi0KLSAgICAgICAgZm9yIGluZGV4LCBmaXJzdF9saW5lIGluIGVu
dW1lcmF0ZShmaXJzdF9saXN0KToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZpcnN0
X2xpbmUsIHNlY29uZF9saXN0W2luZGV4XSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhs
ZW4oZmlyc3RfbGlzdCksIGxlbihzZWNvbmRfbGlzdCkpCi0KLQotY2xhc3MgSGVhZGVyVGVzdChH
ZW5lcmF0ZWRGaWxlQ29udGVudHNUZXN0KToKLSAgICBkZWYgdGVzdF9oZWFkZXIoc2VsZik6Ci0g
ICAgICAgIGZpbGVfY29udGVudHMgPSBtZXNzYWdlcy5nZW5lcmF0ZV9tZXNzYWdlc19oZWFkZXIo
U3RyaW5nSU8oX21lc3NhZ2VzX2ZpbGVfY29udGVudHMpKQotICAgICAgICBzZWxmLmFzc2VydEdl
bmVyYXRlZEZpbGVDb250ZW50c0VxdWFsKGZpbGVfY29udGVudHMsIF9leHBlY3RlZF9yZWNlaXZl
cl9oZWFkZXIpCi0KLSAgICAgICAgbGVnYWN5X2ZpbGVfY29udGVudHMgPSBtZXNzYWdlcy5nZW5l
cmF0ZV9tZXNzYWdlc19oZWFkZXIoU3RyaW5nSU8oX2xlZ2FjeV9tZXNzYWdlc19maWxlX2NvbnRl
bnRzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRHZW5lcmF0ZWRGaWxlQ29udGVudHNFcXVhbChsZWdh
Y3lfZmlsZV9jb250ZW50cywgX2V4cGVjdGVkX2xlZ2FjeV9yZWNlaXZlcl9oZWFkZXIpCi0KLSAg
ICAgICAgc3VwZXJjbGFzc19maWxlX2NvbnRlbnRzID0gbWVzc2FnZXMuZ2VuZXJhdGVfbWVzc2Fn
ZXNfaGVhZGVyKFN0cmluZ0lPKF9zdXBlcmNsYXNzX21lc3NhZ2VzX2ZpbGVfY29udGVudHMpKQot
ICAgICAgICBzZWxmLmFzc2VydEdlbmVyYXRlZEZpbGVDb250ZW50c0VxdWFsKHN1cGVyY2xhc3Nf
ZmlsZV9jb250ZW50cywgX2V4cGVjdGVkX3N1cGVyY2xhc3NfcmVjZWl2ZXJfaGVhZGVyKQotCi0K
LWNsYXNzIFJlY2VpdmVySW1wbGVtZW50YXRpb25UZXN0KEdlbmVyYXRlZEZpbGVDb250ZW50c1Rl
c3QpOgotICAgIGRlZiB0ZXN0X3JlY2VpdmVyX2ltcGxlbWVudGF0aW9uKHNlbGYpOgotICAgICAg
ICBmaWxlX2NvbnRlbnRzID0gbWVzc2FnZXMuZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKFN0cmlu
Z0lPKF9tZXNzYWdlc19maWxlX2NvbnRlbnRzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRHZW5lcmF0
ZWRGaWxlQ29udGVudHNFcXVhbChmaWxlX2NvbnRlbnRzLCBfZXhwZWN0ZWRfcmVjZWl2ZXJfaW1w
bGVtZW50YXRpb24pCi0KLSAgICAgICAgbGVnYWN5X2ZpbGVfY29udGVudHMgPSBtZXNzYWdlcy5n
ZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIoU3RyaW5nSU8oX2xlZ2FjeV9tZXNzYWdlc19maWxlX2Nv
bnRlbnRzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRHZW5lcmF0ZWRGaWxlQ29udGVudHNFcXVhbChs
ZWdhY3lfZmlsZV9jb250ZW50cywgX2V4cGVjdGVkX2xlZ2FjeV9yZWNlaXZlcl9pbXBsZW1lbnRh
dGlvbikKLQotICAgICAgICBzdXBlcmNsYXNzX2ZpbGVfY29udGVudHMgPSBtZXNzYWdlcy5nZW5l
cmF0ZV9tZXNzYWdlX2hhbmRsZXIoU3RyaW5nSU8oX3N1cGVyY2xhc3NfbWVzc2FnZXNfZmlsZV9j
b250ZW50cykpCi0gICAgICAgIHNlbGYuYXNzZXJ0R2VuZXJhdGVkRmlsZUNvbnRlbnRzRXF1YWwo
c3VwZXJjbGFzc19maWxlX2NvbnRlbnRzLCBfZXhwZWN0ZWRfc3VwZXJjbGFzc19yZWNlaXZlcl9p
bXBsZW1lbnRhdGlvbikKLQotCi1jbGFzcyBVbnN1cHBvcnRlZFByZWNvbXBpbGVyRGlyZWN0aXZl
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfZXJyb3JfYXRfZWxzZShzZWxm
KToKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChFeGNlcHRpb24sIHIiRVJS
T1I6ICcjZWxzZS4qJyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBcKlwuaW4gZmlsZXMiKToKLSAg
ICAgICAgICAgIG1lc3NhZ2VzLmdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihTdHJpbmdJTygiYXNk
XG4jZWxzZSBibGFcbmZvbyIpKQotCi0gICAgZGVmIHRlc3RfZXJyb3JfYXRfZWxpZihzZWxmKToK
LSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChFeGNlcHRpb24sIHIiRVJST1I6
ICcjZWxpZi4qJyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBcKlwuaW4gZmlsZXMiKToKLSAgICAg
ICAgICAgIG1lc3NhZ2VzLmdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihTdHJpbmdJTygiYXNkXG4j
ZWxpZiBibGFcbmZvbyIpKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdW5p
dHRlc3QubWFpbigpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbW9kZWwu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21vZGVsLnB5
CShyZXZpc2lvbiAxNzM0OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbW9k
ZWwucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNjEgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgot
IyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgaXRlcnRvb2xzCi0KLQotY2xhc3Mg
TWVzc2FnZVJlY2VpdmVyKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHN1
cGVyY2xhc3MsIGF0dHJpYnV0ZXMsIG1lc3NhZ2VzLCBjb25kaXRpb24pOgotICAgICAgICBzZWxm
Lm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYuc3VwZXJjbGFzcyA9IHN1cGVyY2xhc3MKLSAgICAg
ICAgc2VsZi5hdHRyaWJ1dGVzID0gZnJvemVuc2V0KGF0dHJpYnV0ZXMgb3IgW10pCi0gICAgICAg
IHNlbGYubWVzc2FnZXMgPSBtZXNzYWdlcwotICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IGNvbmRp
dGlvbgotCi0gICAgZGVmIGl0ZXJwYXJhbWV0ZXJzKHNlbGYpOgotICAgICAgICByZXR1cm4gaXRl
cnRvb2xzLmNoYWluKChwYXJhbWV0ZXIgZm9yIG1lc3NhZ2UgaW4gc2VsZi5tZXNzYWdlcyBmb3Ig
cGFyYW1ldGVyIGluIG1lc3NhZ2UucGFyYW1ldGVycyksCi0gICAgICAgICAgICAocmVwbHlfcGFy
YW1ldGVyIGZvciBtZXNzYWdlIGluIHNlbGYubWVzc2FnZXMgaWYgbWVzc2FnZS5yZXBseV9wYXJh
bWV0ZXJzIGZvciByZXBseV9wYXJhbWV0ZXIgaW4gbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzKSkK
LQotICAgIGRlZiBoYXNfYXR0cmlidXRlKHNlbGYsIGF0dHJpYnV0ZSk6Ci0gICAgICAgIHJldHVy
biBhdHRyaWJ1dGUgaW4gc2VsZi5hdHRyaWJ1dGVzCi0KLWNsYXNzIE1lc3NhZ2Uob2JqZWN0KToK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcGFyYW1ldGVycywgcmVwbHlfcGFyYW1ldGVy
cywgYXR0cmlidXRlcywgY29uZGl0aW9uKToKLSAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotICAg
ICAgICBzZWxmLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzCi0gICAgICAgIHNlbGYucmVwbHlfcGFy
YW1ldGVycyA9IHJlcGx5X3BhcmFtZXRlcnMKLSAgICAgICAgc2VsZi5hdHRyaWJ1dGVzID0gZnJv
emVuc2V0KGF0dHJpYnV0ZXMgb3IgW10pCi0gICAgICAgIHNlbGYuY29uZGl0aW9uID0gY29uZGl0
aW9uCi0KLSAgICBkZWYgaGFzX2F0dHJpYnV0ZShzZWxmLCBhdHRyaWJ1dGUpOgotICAgICAgICBy
ZXR1cm4gYXR0cmlidXRlIGluIHNlbGYuYXR0cmlidXRlcwotCi0KLWNsYXNzIFBhcmFtZXRlcihv
YmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlLCBuYW1lLCBhdHRyaWJ1dGVzPU5v
bmUsIGNvbmRpdGlvbj1Ob25lKToKLSAgICAgICAgc2VsZi50eXBlID0gdHlwZQotICAgICAgICBz
ZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYuYXR0cmlidXRlcyA9IGZyb3plbnNldChhdHRy
aWJ1dGVzIG9yIFtdKQotICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IGNvbmRpdGlvbgotCi0gICAg
ZGVmIGhhc19hdHRyaWJ1dGUoc2VsZiwgYXR0cmlidXRlKToKLSAgICAgICAgcmV0dXJuIGF0dHJp
YnV0ZSBpbiBzZWxmLmF0dHJpYnV0ZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Vi
a2l0Mi9wYXJzZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJr
aXQyL3BhcnNlci5weQkocmV2aXNpb24gMTczNDkxKQorKysgU291cmNlL1dlYktpdDIvU2NyaXB0
cy93ZWJraXQyL3BhcnNlci5weQkod29ya2luZyBjb3B5KQpAQCAtMSwxMzIgKzAsMCBAQAotIyBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
IwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgcmUKLQot
ZnJvbSB3ZWJraXQyIGltcG9ydCBtb2RlbAotCi0KLWRlZiBjb21iaW5lX2NvbmRpdGlvbihjb25k
aXRpb25zKToKLSAgICBpZiBjb25kaXRpb25zOgotICAgICAgICBpZiBsZW4oY29uZGl0aW9ucykg
PT0gMToKLSAgICAgICAgICAgIHJldHVybiBjb25kaXRpb25zWzBdCi0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICByZXR1cm4gYnJhY2tldF9pZl9uZWVkZWQoJyAmJiAnLmpvaW4obWFwKGJyYWNr
ZXRfaWZfbmVlZGVkLCBjb25kaXRpb25zKSkpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIE5v
bmUKLQotCi1kZWYgYnJhY2tldF9pZl9uZWVkZWQoY29uZGl0aW9uKToKLSAgICBpZiByZS5tYXRj
aChyJy4qKCYmfFx8XHwpLionLCBjb25kaXRpb24pOgotICAgICAgICByZXR1cm4gJyglcyknICUg
Y29uZGl0aW9uCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIGNvbmRpdGlvbgotCi0KLWRlZiBw
YXJzZShmaWxlKToKLSAgICByZWNlaXZlcl9hdHRyaWJ1dGVzID0gTm9uZQotICAgIGRlc3RpbmF0
aW9uID0gTm9uZQotICAgIG1lc3NhZ2VzID0gW10KLSAgICBjb25kaXRpb25zID0gW10KLSAgICBt
YXN0ZXJfY29uZGl0aW9uID0gTm9uZQotICAgIHN1cGVyY2xhc3MgPSBbXQotICAgIGZvciBsaW5l
IGluIGZpbGU6Ci0gICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKHInbWVzc2FnZXMgLT4gKD9QPGRl
c3RpbmF0aW9uPltBLVphLXpfMC05XSspIFxzKig/OjpccyooP1A8c3VwZXJjbGFzcz4uKj8pIFxz
Kik/KD86KD9QPGF0dHJpYnV0ZXM+Lio/KVxzKyk/eycsIGxpbmUpCi0gICAgICAgIGlmIG1hdGNo
OgotICAgICAgICAgICAgcmVjZWl2ZXJfYXR0cmlidXRlcyA9IHBhcnNlX2F0dHJpYnV0ZXNfc3Ry
aW5nKG1hdGNoLmdyb3VwKCdhdHRyaWJ1dGVzJykpCi0gICAgICAgICAgICBpZiBtYXRjaC5ncm91
cCgnc3VwZXJjbGFzcycpOgotICAgICAgICAgICAgICAgIHN1cGVyY2xhc3MgPSBtYXRjaC5ncm91
cCgnc3VwZXJjbGFzcycpCi0gICAgICAgICAgICBpZiBjb25kaXRpb25zOgotICAgICAgICAgICAg
ICAgIG1hc3Rlcl9jb25kaXRpb24gPSBjb25kaXRpb25zCi0gICAgICAgICAgICAgICAgY29uZGl0
aW9ucyA9IFtdCi0gICAgICAgICAgICBkZXN0aW5hdGlvbiA9IG1hdGNoLmdyb3VwKCdkZXN0aW5h
dGlvbicpCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgo
JyMnKToKLSAgICAgICAgICAgIHRyaW1tZWQgPSBsaW5lLnJzdHJpcCgpCi0gICAgICAgICAgICBp
ZiBsaW5lLnN0YXJ0c3dpdGgoJyNpZiAnKToKLSAgICAgICAgICAgICAgICBjb25kaXRpb25zLmFw
cGVuZCh0cmltbWVkWzQ6XSkKLSAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCcjZW5k
aWYnKSBhbmQgY29uZGl0aW9uczoKLSAgICAgICAgICAgICAgICBjb25kaXRpb25zLnBvcCgpCi0g
ICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnI2Vsc2UnKSBvciBsaW5lLnN0YXJ0c3dp
dGgoJyNlbGlmJyk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFUlJPUjogJyVz
JyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSAqLmluIGZpbGVzIiAlIHRyaW1tZWQpCi0gICAgICAg
ICAgICBjb250aW51ZQotICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaChyJyhbQS1aYS16XzAtOV0r
KVwoKC4qPylcKSg/Oig/OlxzKy0+XHMrKVwoKC4qPylcKSk/KD86XHMrKC4qKSk/JywgbGluZSkK
LSAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICBuYW1lLCBwYXJhbWV0ZXJzX3N0cmluZywg
cmVwbHlfcGFyYW1ldGVyc19zdHJpbmcsIGF0dHJpYnV0ZXNfc3RyaW5nID0gbWF0Y2guZ3JvdXBz
KCkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlcnNfc3RyaW5nOgotICAgICAgICAgICAgICAgIHBh
cmFtZXRlcnMgPSBwYXJzZV9wYXJhbWV0ZXJzX3N0cmluZyhwYXJhbWV0ZXJzX3N0cmluZykKLSAg
ICAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIHBhcmFtZXRlcnM6Ci0gICAgICAgICAgICAg
ICAgICAgIHBhcmFtZXRlci5jb25kaXRpb24gPSBjb21iaW5lX2NvbmRpdGlvbihjb25kaXRpb25z
KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gW10KLQot
ICAgICAgICAgICAgYXR0cmlidXRlcyA9IHBhcnNlX2F0dHJpYnV0ZXNfc3RyaW5nKGF0dHJpYnV0
ZXNfc3RyaW5nKQotCi0gICAgICAgICAgICBpZiByZXBseV9wYXJhbWV0ZXJzX3N0cmluZzoKLSAg
ICAgICAgICAgICAgICByZXBseV9wYXJhbWV0ZXJzID0gcGFyc2VfcGFyYW1ldGVyc19zdHJpbmco
cmVwbHlfcGFyYW1ldGVyc19zdHJpbmcpCi0gICAgICAgICAgICAgICAgZm9yIHJlcGx5X3BhcmFt
ZXRlciBpbiByZXBseV9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgICAgICByZXBseV9wYXJh
bWV0ZXIuY29uZGl0aW9uID0gY29tYmluZV9jb25kaXRpb24oY29uZGl0aW9ucykKLSAgICAgICAg
ICAgIGVsaWYgcmVwbHlfcGFyYW1ldGVyc19zdHJpbmcgPT0gJyc6Ci0gICAgICAgICAgICAgICAg
cmVwbHlfcGFyYW1ldGVycyA9IFtdCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
IHJlcGx5X3BhcmFtZXRlcnMgPSBOb25lCi0KLSAgICAgICAgICAgIG1lc3NhZ2VzLmFwcGVuZCht
b2RlbC5NZXNzYWdlKG5hbWUsIHBhcmFtZXRlcnMsIHJlcGx5X3BhcmFtZXRlcnMsIGF0dHJpYnV0
ZXMsIGNvbWJpbmVfY29uZGl0aW9uKGNvbmRpdGlvbnMpKSkKLSAgICByZXR1cm4gbW9kZWwuTWVz
c2FnZVJlY2VpdmVyKGRlc3RpbmF0aW9uLCBzdXBlcmNsYXNzLCByZWNlaXZlcl9hdHRyaWJ1dGVz
LCBtZXNzYWdlcywgY29tYmluZV9jb25kaXRpb24obWFzdGVyX2NvbmRpdGlvbikpCi0KLQotZGVm
IHBhcnNlX2F0dHJpYnV0ZXNfc3RyaW5nKGF0dHJpYnV0ZXNfc3RyaW5nKToKLSAgICBpZiBub3Qg
YXR0cmlidXRlc19zdHJpbmc6Ci0gICAgICAgIHJldHVybiBOb25lCi0gICAgcmV0dXJuIGF0dHJp
YnV0ZXNfc3RyaW5nLnNwbGl0KCkKLQotCi1kZWYgc3BsaXRfcGFyYW1ldGVyc19zdHJpbmcocGFy
YW1ldGVyc19zdHJpbmcpOgotICAgIHBhcmFtZXRlcnMgPSBbXQotICAgIGN1cnJlbnRfcGFyYW1l
dGVyX3N0cmluZyA9ICcnCi0KLSAgICBuZXN0X2xldmVsID0gMAotICAgIGZvciBjaGFyYWN0ZXIg
aW4gcGFyYW1ldGVyc19zdHJpbmc6Ci0gICAgICAgIGlmIGNoYXJhY3RlciA9PSAnLCcgYW5kIG5l
c3RfbGV2ZWwgPT0gMDoKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKGN1cnJlbnRfcGFy
YW1ldGVyX3N0cmluZykKLSAgICAgICAgICAgIGN1cnJlbnRfcGFyYW1ldGVyX3N0cmluZyA9ICcn
Ci0gICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgIGlmIGNoYXJhY3RlciA9PSAnPCc6Ci0g
ICAgICAgICAgICBuZXN0X2xldmVsICs9IDEKLSAgICAgICAgZWxpZiBjaGFyYWN0ZXIgPT0gJz4n
OgotICAgICAgICAgICAgbmVzdF9sZXZlbCAtPSAxCi0KLSAgICAgICAgY3VycmVudF9wYXJhbWV0
ZXJfc3RyaW5nICs9IGNoYXJhY3RlcgotCi0gICAgcGFyYW1ldGVycy5hcHBlbmQoY3VycmVudF9w
YXJhbWV0ZXJfc3RyaW5nKQotICAgIHJldHVybiBwYXJhbWV0ZXJzCi0KLWRlZiBwYXJzZV9wYXJh
bWV0ZXJzX3N0cmluZyhwYXJhbWV0ZXJzX3N0cmluZyk6Ci0gICAgcGFyYW1ldGVycyA9IFtdCi0K
LSAgICBmb3IgcGFyYW1ldGVyX3N0cmluZyBpbiBzcGxpdF9wYXJhbWV0ZXJzX3N0cmluZyhwYXJh
bWV0ZXJzX3N0cmluZyk6Ci0gICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKHInXHMqKD86XFsoP1A8
YXR0cmlidXRlcz4uKj8pXF1ccyspPyg/UDx0eXBlX2FuZF9uYW1lPi4qKScsIHBhcmFtZXRlcl9z
dHJpbmcpCi0gICAgICAgIGF0dHJpYnV0ZXNfc3RyaW5nLCB0eXBlX2FuZF9uYW1lX3N0cmluZyA9
IG1hdGNoLmdyb3VwKCdhdHRyaWJ1dGVzJywgJ3R5cGVfYW5kX25hbWUnKQotICAgICAgICBwYXJh
bWV0ZXJfdHlwZSwgcGFyYW1ldGVyX25hbWUgPSB0eXBlX2FuZF9uYW1lX3N0cmluZy5yc3BsaXQo
JyAnLCAxKQotICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChtb2RlbC5QYXJhbWV0ZXIodHlwZT1w
YXJhbWV0ZXJfdHlwZSwgbmFtZT1wYXJhbWV0ZXJfbmFtZSwgYXR0cmlidXRlcz1wYXJzZV9hdHRy
aWJ1dGVzX3N0cmluZyhhdHRyaWJ1dGVzX3N0cmluZykpKQotICAgIHJldHVybiBwYXJhbWV0ZXJz
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvdGVzdC1sZWdhY3ktbWVzc2Fn
ZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL3Rlc3Qt
bGVnYWN5LW1lc3NhZ2VzLmluCShyZXZpc2lvbiAxNzM0OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
Y3JpcHRzL3dlYmtpdDIvdGVzdC1sZWdhY3ktbWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTEsNzcgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMg
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0j
aWYgRU5BQkxFKFdFQktJVDIpCi0jaWYgTkVTVEVEX01BU1RFUl9DT05ESVRJT04gfHwgTUFTVEVS
X09SICYmIE1BU1RFUl9BTkQKLQotbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7
Ci0gICAgTG9hZFVSTChTdHJpbmcgdXJsKQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAg
TG9hZFNvbWV0aGluZyhTdHJpbmcgdXJsKQotI2lmIE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiB8
fCBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OCi0gICAgVG91Y2hFdmVudChXZWJLaXQ6Oldl
YlRvdWNoRXZlbnQgZXZlbnQpCi0jZW5kaWYKLSNpZiBORVNURURfTUVTU0FHRV9DT05ESVRJT04g
JiYgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTgotICAgIEFkZEV2ZW50KFdlYktpdDo6V2Vi
VG91Y2hFdmVudCBldmVudCkKLSNlbmRpZgotICAgIExvYWRTb21ldGhpbmdFbHNlKFN0cmluZyB1
cmwpCi0jZW5kaWYKLSAgICBEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24odWludDY0X3QgZnJhbWVJ
RCwgdWludDY0X3QgbGlzdGVuZXJJRCwgdWludDMyX3QgcG9saWN5QWN0aW9uKQotICAgIENsb3Nl
KCkKLQotICAgIFByZWZlcmVuY2VzRGlkQ2hhbmdlKFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9y
ZSBzdG9yZSkKLSAgICBTZW5kRG91YmxlQW5kRmxvYXQoZG91YmxlIGQsIGZsb2F0IGYpCi0gICAg
U2VuZEludHMoVmVjdG9yPHVpbnQ2NF90PiBpbnRzLCBWZWN0b3I8VmVjdG9yPHVpbnQ2NF90Pj4g
aW50VmVjdG9ycykKLQotICAgIENyZWF0ZVBsdWdpbih1aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlE
LCBXZWJLaXQ6OlBsdWdpbjo6UGFyYW1ldGVycyBwYXJhbWV0ZXJzKSAtPiAoYm9vbCByZXN1bHQp
Ci0gICAgUnVuSmF2YVNjcmlwdEFsZXJ0KHVpbnQ2NF90IGZyYW1lSUQsIFN0cmluZyBtZXNzYWdl
KSAtPiAoKQotICAgIEdldFBsdWdpbnMoYm9vbCByZWZyZXNoKSAtPiAoVmVjdG9yPFdlYkNvcmU6
OlBsdWdpbkluZm8+IHBsdWdpbnMpCi0gICAgR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24oU3Ry
aW5nIHBsdWdpblBhdGgpIC0+IChJUEM6OkNvbm5lY3Rpb246OkhhbmRsZSBjb25uZWN0aW9uSGFu
ZGxlKSBEZWxheWVkCi0KLSAgICBUZXN0TXVsdGlwbGVBdHRyaWJ1dGVzKCkgLT4gKCkgV2FudHND
b25uZWN0aW9uIERlbGF5ZWQKLQotICAgIFRlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzKFtBdHRyaWJ1
dGVPbmUgQXR0cmlidXRlVHdvXSB1aW50NjRfdCBmb28sIGRvdWJsZSBiYXIsIFtBdHRyaWJ1dGVU
aHJlZV0gZG91YmxlIGJheikKLQotICAgIFRlbXBsYXRlVGVzdChIYXNoTWFwPFN0cmluZywgc3Rk
OjpwYWlyPFN0cmluZywgdWludDY0X3Q+PiBhKQotCi0gICAgU2V0VmlkZW9MYXllcklEKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCB2aWRlb0xheWVySUQpCi0KLSNpZiBQ
TEFURk9STShNQUMpCi0gICAgRGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb24oSVBDOjpNYWNo
UG9ydCBjb25uZWN0aW9uSWRlbnRpZmllcikKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQot
ICAgICMgS2V5Ym9hcmQgc3VwcG9ydAotICAgIEludGVycHJldEtleUV2ZW50KHVpbnQzMl90IHR5
cGUpIC0+IChWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiBjb21tYW5kTmFtZSkKLSNl
bmRpZgotCi0jaWYgRU5BQkxFKERFUFJFQ0FURURfRkVBVFVSRSkKLSAgICBEZXByZWNhdGVkT3Bl
cmF0aW9uKElQQzo6RHVtbXlUeXBlIGR1bW15KQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRVhQRVJJ
TUVOVEFMX0ZFQVRVUkUpCi0gICAgRXhwZXJpbWVudGFsT3BlcmF0aW9uKElQQzo6RHVtbXlUeXBl
IGR1bW15KQotI2VuZGlmCi19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TY3JpcHRzL3dlYmtpdDIvdGVzdC1tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvdGVzdC1tZXNzYWdlcy5pbgkocmV2aXNpb24gMTczNDkx
KQorKysgU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL3Rlc3QtbWVzc2FnZXMuaW4JKHdv
cmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0j
IGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0j
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0jaWYgRU5BQkxFKFdFQktJVDIpCi0jaWYgTkVTVEVEX01BU1RFUl9DT05E
SVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQKLQotbWVzc2FnZXMgLT4gV2ViUGFnZSB7
Ci0gICAgTG9hZFVSTChTdHJpbmcgdXJsKQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAg
TG9hZFNvbWV0aGluZyhTdHJpbmcgdXJsKQotI2lmIE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiB8
fCBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OCi0gICAgVG91Y2hFdmVudChXZWJLaXQ6Oldl
YlRvdWNoRXZlbnQgZXZlbnQpCi0jZW5kaWYKLSNpZiBORVNURURfTUVTU0FHRV9DT05ESVRJT04g
JiYgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTgotICAgIEFkZEV2ZW50KFdlYktpdDo6V2Vi
VG91Y2hFdmVudCBldmVudCkKLSNlbmRpZgotICAgIExvYWRTb21ldGhpbmdFbHNlKFN0cmluZyB1
cmwpCi0jZW5kaWYKLSAgICBEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24odWludDY0X3QgZnJhbWVJ
RCwgdWludDY0X3QgbGlzdGVuZXJJRCwgdWludDMyX3QgcG9saWN5QWN0aW9uKQotICAgIENsb3Nl
KCkKLQotICAgIFByZWZlcmVuY2VzRGlkQ2hhbmdlKFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9y
ZSBzdG9yZSkKLSAgICBTZW5kRG91YmxlQW5kRmxvYXQoZG91YmxlIGQsIGZsb2F0IGYpCi0gICAg
U2VuZEludHMoVmVjdG9yPHVpbnQ2NF90PiBpbnRzLCBWZWN0b3I8VmVjdG9yPHVpbnQ2NF90Pj4g
aW50VmVjdG9ycykKLQotICAgIENyZWF0ZVBsdWdpbih1aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlE
LCBXZWJLaXQ6OlBsdWdpbjo6UGFyYW1ldGVycyBwYXJhbWV0ZXJzKSAtPiAoYm9vbCByZXN1bHQp
Ci0gICAgUnVuSmF2YVNjcmlwdEFsZXJ0KHVpbnQ2NF90IGZyYW1lSUQsIFN0cmluZyBtZXNzYWdl
KSAtPiAoKQotICAgIEdldFBsdWdpbnMoYm9vbCByZWZyZXNoKSAtPiAoVmVjdG9yPFdlYkNvcmU6
OlBsdWdpbkluZm8+IHBsdWdpbnMpCi0gICAgR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24oU3Ry
aW5nIHBsdWdpblBhdGgpIC0+IChJUEM6OkNvbm5lY3Rpb246OkhhbmRsZSBjb25uZWN0aW9uSGFu
ZGxlKSBEZWxheWVkCi0KLSAgICBUZXN0TXVsdGlwbGVBdHRyaWJ1dGVzKCkgLT4gKCkgV2FudHND
b25uZWN0aW9uIERlbGF5ZWQKLQotICAgIFRlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzKFtBdHRyaWJ1
dGVPbmUgQXR0cmlidXRlVHdvXSB1aW50NjRfdCBmb28sIGRvdWJsZSBiYXIsIFtBdHRyaWJ1dGVU
aHJlZV0gZG91YmxlIGJheikKLQotICAgIFRlbXBsYXRlVGVzdChIYXNoTWFwPFN0cmluZywgc3Rk
OjpwYWlyPFN0cmluZywgdWludDY0X3Q+PiBhKQotCi0gICAgU2V0VmlkZW9MYXllcklEKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCB2aWRlb0xheWVySUQpCi0KLSNpZiBQ
TEFURk9STShNQUMpCi0gICAgRGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb24oSVBDOjpNYWNo
UG9ydCBjb25uZWN0aW9uSWRlbnRpZmllcikKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQot
ICAgICMgS2V5Ym9hcmQgc3VwcG9ydAotICAgIEludGVycHJldEtleUV2ZW50KHVpbnQzMl90IHR5
cGUpIC0+IChWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiBjb21tYW5kTmFtZSkKLSNl
bmRpZgotCi0jaWYgRU5BQkxFKERFUFJFQ0FURURfRkVBVFVSRSkKLSAgICBEZXByZWNhdGVkT3Bl
cmF0aW9uKElQQzo6RHVtbXlUeXBlIGR1bW15KQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRVhQRVJJ
TUVOVEFMX0ZFQVRVUkUpCi0gICAgRXhwZXJpbWVudGFsT3BlcmF0aW9uKElQQzo6RHVtbXlUeXBl
IGR1bW15KQotI2VuZGlmCi19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TY3JpcHRzL3dlYmtpdDIvdGVzdC1zdXBlcmNsYXNzLW1lc3NhZ2VzLmluCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi90ZXN0LXN1cGVyY2xhc3MtbWVzc2Fn
ZXMuaW4JKHJldmlzaW9uIDE3MzQ5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0
Mi90ZXN0LXN1cGVyY2xhc3MtbWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEsMjUgKzAs
MCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0j
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1tZXNzYWdlcyAt
PiBXZWJQYWdlIDogV2ViUGFnZUJhc2UgewotICAgIExvYWRVUkwoU3RyaW5nIHVybCkKLX0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9MZWdhY3lNZXNzYWdlUmVjZWl2ZXIt
ZXhwZWN0ZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0
Mi9MZWdhY3lNZXNzYWdlUmVjZWl2ZXItZXhwZWN0ZWQuY3BwCShyZXZpc2lvbiAxNzM0OTEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvTGVnYWN5TWVzc2FnZVJlY2VpdmVyLWV4
cGVjdGVkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMjYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0g
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiAoRU5BQkxFKFdFQktJVDIpICYmIChORVNURURf
TUFTVEVSX0NPTkRJVElPTiB8fCBNQVNURVJfT1IgJiYgTUFTVEVSX0FORCkpCi0KLSNpbmNsdWRl
ICJXZWJQYWdlLmgiCi0KLSNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIkNv
bm5lY3Rpb24uaCIKLSNpZiBFTkFCTEUoREVQUkVDQVRFRF9GRUFUVVJFKSB8fCBFTkFCTEUoRVhQ
RVJJTUVOVEFMX0ZFQVRVUkUpCi0jaW5jbHVkZSAiRHVtbXlUeXBlLmgiCi0jZW5kaWYKLSNpbmNs
dWRlICJIYW5kbGVNZXNzYWdlLmgiCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgIk1hY2hQ
b3J0LmgiCi0jZW5kaWYKLSNpbmNsdWRlICJNZXNzYWdlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlBs
dWdpbi5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2lmIChFTkFCTEUo
VE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9OICYmIFNPTUVfT1RIRVJf
TUVTU0FHRV9DT05ESVRJT04pKSB8fCAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RFRF9N
RVNTQUdFX0NPTkRJVElPTiB8fCBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OKSkKLSNpbmNs
dWRlICJXZWJFdmVudC5oIgotI2VuZGlmCi0jaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCi0j
aW5jbHVkZSAiV2ViUHJlZmVyZW5jZXNTdG9yZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NMYXllci5oPgotI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJk
RXZlbnQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgotI2luY2x1
ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBNZXNz
YWdlcyB7Ci0KLW5hbWVzcGFjZSBXZWJQYWdlIHsKLQotR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rp
b246OkRlbGF5ZWRSZXBseTo6RGVsYXllZFJlcGx5KFBhc3NSZWZQdHI8SVBDOjpDb25uZWN0aW9u
PiBjb25uZWN0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNzYWdlRW5jb2Rlcj4gZW5jb2Rl
cikKLSAgICA6IG1fY29ubmVjdGlvbihjb25uZWN0aW9uKQotICAgICwgbV9lbmNvZGVyKFdURjo6
bW92ZShlbmNvZGVyKSkKLXsKLX0KLQotR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5
ZWRSZXBseTo6fkRlbGF5ZWRSZXBseSgpCi17Ci0gICAgQVNTRVJUKCFtX2Nvbm5lY3Rpb24pOwot
fQotCi1ib29sIEdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHk6OnNlbmQo
Y29uc3QgSVBDOjpDb25uZWN0aW9uOjpIYW5kbGUmIGNvbm5lY3Rpb25IYW5kbGUpCi17Ci0gICAg
QVNTRVJUKG1fZW5jb2Rlcik7Ci0gICAgKm1fZW5jb2RlciA8PCBjb25uZWN0aW9uSGFuZGxlOwot
ICAgIGJvb2wgX3Jlc3VsdCA9IG1fY29ubmVjdGlvbi0+c2VuZFN5bmNSZXBseShXVEY6Om1vdmUo
bV9lbmNvZGVyKSk7Ci0gICAgbV9jb25uZWN0aW9uID0gbnVsbHB0cjsKLSAgICByZXR1cm4gX3Jl
c3VsdDsKLX0KLQotVGVzdE11bHRpcGxlQXR0cmlidXRlczo6RGVsYXllZFJlcGx5OjpEZWxheWVk
UmVwbHkoUGFzc1JlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24sIHN0ZDo6dW5pcXVl
X3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiBlbmNvZGVyKQotICAgIDogbV9jb25uZWN0aW9uKGNv
bm5lY3Rpb24pCi0gICAgLCBtX2VuY29kZXIoV1RGOjptb3ZlKGVuY29kZXIpKQotewotfQotCi1U
ZXN0TXVsdGlwbGVBdHRyaWJ1dGVzOjpEZWxheWVkUmVwbHk6On5EZWxheWVkUmVwbHkoKQotewot
ICAgIEFTU0VSVCghbV9jb25uZWN0aW9uKTsKLX0KLQotYm9vbCBUZXN0TXVsdGlwbGVBdHRyaWJ1
dGVzOjpEZWxheWVkUmVwbHk6OnNlbmQoKQotewotICAgIEFTU0VSVChtX2VuY29kZXIpOwotICAg
IGJvb2wgX3Jlc3VsdCA9IG1fY29ubmVjdGlvbi0+c2VuZFN5bmNSZXBseShXVEY6Om1vdmUobV9l
bmNvZGVyKSk7Ci0gICAgbV9jb25uZWN0aW9uID0gbnVsbHB0cjsKLSAgICByZXR1cm4gX3Jlc3Vs
dDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViUGFnZQotCi19IC8vIG5hbWVzcGFjZSBNZXNzYWdl
cwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBXZWJQYWdlOjpkaWRSZWNlaXZlV2ViUGFn
ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2RlcikK
LXsKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpM
b2FkVVJMOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpX
ZWJQYWdlOjpMb2FkVVJMPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6bG9hZFVSTCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBpZiAoZGVj
b2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkU29tZXRoaW5nOjpu
YW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpM
b2FkU29tZXRoaW5nPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6bG9hZFNvbWV0aGluZyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykg
JiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiB8fCBTT01FX09USEVSX01FU1NBR0VfQ09ORElU
SU9OKSkKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdl
OjpUb3VjaEV2ZW50OjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3Nh
Z2VzOjpXZWJQYWdlOjpUb3VjaEV2ZW50PihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6dG91Y2hF
dmVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSNpZiAoRU5BQkxFKFRPVUNI
X0VWRU5UUykgJiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiAmJiBTT01FX09USEVSX01FU1NB
R0VfQ09ORElUSU9OKSkKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2Vz
OjpXZWJQYWdlOjpBZGRFdmVudDo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2Fn
ZTxNZXNzYWdlczo6V2ViUGFnZTo6QWRkRXZlbnQ+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjph
ZGRFdmVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6Oldl
YlBhZ2U6OkxvYWRTb21ldGhpbmdFbHNlOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVN
ZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkU29tZXRoaW5nRWxzZT4oZGVjb2RlciwgdGhp
cywgJldlYlBhZ2U6OmxvYWRTb21ldGhpbmdFbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSNlbmRpZgotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBh
Z2U6OkRpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbjo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFu
ZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6RGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uPihk
ZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6ZGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3Nh
Z2VzOjpXZWJQYWdlOjpDbG9zZTo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2Fn
ZTxNZXNzYWdlczo6V2ViUGFnZTo6Q2xvc2U+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjpjbG9z
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUo
KSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6UHJlZmVyZW5jZXNEaWRDaGFuZ2U6Om5hbWUoKSkgewot
ICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OlByZWZlcmVuY2Vz
RGlkQ2hhbmdlPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6cHJlZmVyZW5jZXNEaWRDaGFuZ2Up
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkg
PT0gTWVzc2FnZXM6OldlYlBhZ2U6OlNlbmREb3VibGVBbmRGbG9hdDo6bmFtZSgpKSB7Ci0gICAg
ICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6U2VuZERvdWJsZUFuZEZs
b2F0PihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6c2VuZERvdWJsZUFuZEZsb2F0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3Nh
Z2VzOjpXZWJQYWdlOjpTZW5kSW50czo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVz
c2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6U2VuZEludHM+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdl
OjpzZW5kSW50cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVz
c2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6VGVzdFBhcmFtZXRlckF0dHJpYnV0ZXM6
Om5hbWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6
OlRlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6dGVzdFBh
cmFtZXRlckF0dHJpYnV0ZXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChkZWNv
ZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OlRlbXBsYXRlVGVzdDo6bmFt
ZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6VGVt
cGxhdGVUZXN0PihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6dGVtcGxhdGVUZXN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3Nh
Z2VzOjpXZWJQYWdlOjpTZXRWaWRlb0xheWVySUQ6Om5hbWUoKSkgewotICAgICAgICBJUEM6Omhh
bmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OlNldFZpZGVvTGF5ZXJJRD4oZGVjb2Rlciwg
dGhpcywgJldlYlBhZ2U6OnNldFZpZGVvTGF5ZXJJRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVz
c2FnZXM6OldlYlBhZ2U6OkRpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uOjpuYW1lKCkpIHsK
LSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRDcmVhdGVX
ZWJQcm9jZXNzQ29ubmVjdGlvbj4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OmRpZENyZWF0ZVdl
YlByb2Nlc3NDb25uZWN0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotI2lm
IEVOQUJMRShERVBSRUNBVEVEX0ZFQVRVUkUpCi0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUo
KSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6RGVwcmVjYXRlZE9wZXJhdGlvbjo6bmFtZSgpKSB7Ci0g
ICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6RGVwcmVjYXRlZE9w
ZXJhdGlvbj4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OmRlcHJlY2F0ZWRPcGVyYXRpb24pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0jaWYgRU5BQkxFKEVYUEVSSU1FTlRBTF9G
RUFUVVJFKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBh
Z2U6OkV4cGVyaW1lbnRhbE9wZXJhdGlvbjo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxl
TWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6RXhwZXJpbWVudGFsT3BlcmF0aW9uPihkZWNvZGVy
LCB0aGlzLCAmV2ViUGFnZTo6ZXhwZXJpbWVudGFsT3BlcmF0aW9uKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNlbmRpZgotICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTsKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpkaWRSZWNlaXZlU3luY1dlYlBhZ2VN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYg
ZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+JiByZXBseUVuY29k
ZXIpCi17Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFn
ZTo6Q3JlYXRlUGx1Z2luOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1l
c3NhZ2VzOjpXZWJQYWdlOjpDcmVhdGVQbHVnaW4+KGRlY29kZXIsICpyZXBseUVuY29kZXIsIHRo
aXMsICZXZWJQYWdlOjpjcmVhdGVQbHVnaW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OlJ1bkphdmFT
Y3JpcHRBbGVydDo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdl
czo6V2ViUGFnZTo6UnVuSmF2YVNjcmlwdEFsZXJ0PihkZWNvZGVyLCAqcmVwbHlFbmNvZGVyLCB0
aGlzLCAmV2ViUGFnZTo6cnVuSmF2YVNjcmlwdEFsZXJ0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpH
ZXRQbHVnaW5zOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2Vz
OjpXZWJQYWdlOjpHZXRQbHVnaW5zPihkZWNvZGVyLCAqcmVwbHlFbmNvZGVyLCB0aGlzLCAmV2Vi
UGFnZTo6Z2V0UGx1Z2lucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRlY29k
ZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6R2V0UGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb246Om5hbWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2VEZWxheWVkPE1l
c3NhZ2VzOjpXZWJQYWdlOjpHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbj4oY29ubmVjdGlvbiwg
ZGVjb2RlciwgcmVwbHlFbmNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6Z2V0UGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3Nh
Z2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OlRlc3RNdWx0aXBsZUF0dHJpYnV0ZXM6Om5h
bWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2VEZWxheWVkPE1lc3NhZ2VzOjpXZWJQ
YWdlOjpUZXN0TXVsdGlwbGVBdHRyaWJ1dGVzPihjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVu
Y29kZXIsIHRoaXMsICZXZWJQYWdlOjp0ZXN0TXVsdGlwbGVBdHRyaWJ1dGVzKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKGRlY29kZXIubWVzc2Fn
ZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6SW50ZXJwcmV0S2V5RXZlbnQ6Om5hbWUoKSkg
ewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkludGVycHJl
dEtleUV2ZW50PihkZWNvZGVyLCAqcmVwbHlFbmNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6aW50ZXJw
cmV0S2V5RXZlbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgVU5VU0VE
X1BBUkFNKGRlY29kZXIpOwotICAgIFVOVVNFRF9QQVJBTShyZXBseUVuY29kZXIpOwotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIChFTkFCTEUoV0VCS0lUMikgJiYgKE5FU1RFRF9NQVNURVJfQ09ORElUSU9OIHx8IE1BU1RF
Ul9PUiAmJiBNQVNURVJfQU5EKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0
Mi9MZWdhY3lNZXNzYWdlcy1leHBlY3RlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NjcmlwdHMvd2Via2l0Mi9MZWdhY3lNZXNzYWdlcy1leHBlY3RlZC5oCShyZXZpc2lvbiAxNzM0
OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvTGVnYWN5TWVzc2FnZXMtZXhw
ZWN0ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1OTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIFdlYlBhZ2VNZXNzYWdlc19oCi0jZGVmaW5lIFdlYlBhZ2VNZXNzYWdlc19oCi0KLSNp
ZiAoRU5BQkxFKFdFQktJVDIpICYmIChORVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNURVJf
T1IgJiYgTUFTVEVSX0FORCkpCi0KLSNpbmNsdWRlICJBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJD
b25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiTWVzc2FnZUVuY29kZXIuaCIKLSNpbmNsdWRlICJQbHVn
aW4uaCIKLSNpbmNsdWRlICJTdHJpbmdSZWZlcmVuY2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzTGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSVBDIHsKLSAgICBjbGFzcyBDb25uZWN0aW9uOwotICAgIGNsYXNzIER1bW15
VHlwZTsKLSAgICBjbGFzcyBNYWNoUG9ydDsKLX0KLQotbmFtZXNwYWNlIFdURiB7Ci0gICAgY2xh
c3MgU3RyaW5nOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLSAgICBzdHJ1Y3QgV2ViUHJlZmVy
ZW5jZXNTdG9yZTsKLSAgICBjbGFzcyBXZWJUb3VjaEV2ZW50OwotfQotCi1uYW1lc3BhY2UgTWVz
c2FnZXMgewotbmFtZXNwYWNlIFdlYlBhZ2UgewotCi1zdGF0aWMgaW5saW5lIElQQzo6U3RyaW5n
UmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUoKQotewotICAgIHJldHVybiBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSgiV2ViUGFnZSIpOwotfQotCi1jbGFzcyBMb2FkVVJMIHsKLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIHN0ZDo6dHVwbGU8U3RyaW5nPiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQ
Qzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZl
ck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1
cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIkxvYWRVUkwiKTsgfQotICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgTG9hZFVSTChjb25zdCBTdHJpbmcm
IHVybCkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyh1cmwpCi0gICAgewotICAgIH0KLQotICAgIGNv
bnN0IHN0ZDo6dHVwbGU8Y29uc3QgU3RyaW5nJj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6
dHVwbGU8Y29uc3QgU3RyaW5nJj4gbV9hcmd1bWVudHM7Ci19OwotCi0jaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKLWNsYXNzIExvYWRTb21ldGhpbmcgewotcHVibGljOgotICAgIHR5cGVkZWYgc3Rk
Ojp0dXBsZTxTdHJpbmc+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZl
cmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0g
ICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSgiTG9hZFNvbWV0aGluZyIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNT
eW5jID0gZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBMb2FkU29tZXRoaW5nKGNvbnN0IFN0cmluZyYg
dXJsKQotICAgICAgICA6IG1fYXJndW1lbnRzKHVybCkKLSAgICB7Ci0gICAgfQotCi0gICAgY29u
c3Qgc3RkOjp0dXBsZTxjb25zdCBTdHJpbmcmPiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0
dXBsZTxjb25zdCBTdHJpbmcmPiBtX2FyZ3VtZW50czsKLX07Ci0jZW5kaWYKLQotI2lmIChFTkFC
TEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9OIHx8IFNPTUVfT1RI
RVJfTUVTU0FHRV9DT05ESVRJT04pKQotY2xhc3MgVG91Y2hFdmVudCB7Ci1wdWJsaWM6Ci0gICAg
dHlwZWRlZiBzdGQ6OnR1cGxlPFdlYktpdDo6V2ViVG91Y2hFdmVudD4gRGVjb2RlVHlwZTsKLQot
ICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2Ug
bmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJUb3VjaEV2ZW50Iik7IH0KLSAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIGV4cGxpY2l0IFRvdWNo
RXZlbnQoY29uc3QgV2ViS2l0OjpXZWJUb3VjaEV2ZW50JiBldmVudCkKLSAgICAgICAgOiBtX2Fy
Z3VtZW50cyhldmVudCkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTxjb25z
dCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmPiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBs
ZTxjb25zdCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmPiBtX2FyZ3VtZW50czsKLX07Ci0jZW5kaWYK
LQotI2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9O
ICYmIFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKQotY2xhc3MgQWRkRXZlbnQgewotcHVi
bGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxXZWJLaXQ6OldlYlRvdWNoRXZlbnQ+IERlY29k
ZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkg
eyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3RyaW5n
UmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiQWRkRXZlbnQi
KTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhwbGlj
aXQgQWRkRXZlbnQoY29uc3QgV2ViS2l0OjpXZWJUb3VjaEV2ZW50JiBldmVudCkKLSAgICAgICAg
OiBtX2FyZ3VtZW50cyhldmVudCkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0dXBs
ZTxjb25zdCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmPiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3Rk
Ojp0dXBsZTxjb25zdCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmPiBtX2FyZ3VtZW50czsKLX07Ci0j
ZW5kaWYKLQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi1jbGFzcyBMb2FkU29tZXRoaW5nRWxz
ZSB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFN0cmluZz4gRGVjb2RlVHlwZTsK
LQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVy
biBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVu
Y2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJMb2FkU29tZXRoaW5nRWxz
ZSIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBs
aWNpdCBMb2FkU29tZXRoaW5nRWxzZShjb25zdCBTdHJpbmcmIHVybCkKLSAgICAgICAgOiBtX2Fy
Z3VtZW50cyh1cmwpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29uc3Qg
U3RyaW5nJj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1
bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8Y29uc3QgU3RyaW5nJj4g
bV9hcmd1bWVudHM7Ci19OwotI2VuZGlmCi0KLWNsYXNzIERpZFJlY2VpdmVQb2xpY3lEZWNpc2lv
biB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPHVpbnQ2NF90LCB1aW50NjRfdCwg
dWludDMyX3Q+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2Ug
cmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3Rh
dGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSgiRGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uIik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIERpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbih1aW50NjRf
dCBmcmFtZUlELCB1aW50NjRfdCBsaXN0ZW5lcklELCB1aW50MzJfdCBwb2xpY3lBY3Rpb24pCi0g
ICAgICAgIDogbV9hcmd1bWVudHMoZnJhbWVJRCwgbGlzdGVuZXJJRCwgcG9saWN5QWN0aW9uKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPHVpbnQ2NF90LCB1aW50NjRfdCwg
dWludDMyX3Q+JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJn
dW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPHVpbnQ2NF90LCB1aW50
NjRfdCwgdWludDMyX3Q+IG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgQ2xvc2UgewotcHVibGlj
OgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTw+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBD
OjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVy
TmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVy
biBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiQ2xvc2UiKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29s
IGlzU3luYyA9IGZhbHNlOwotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTw+JiBhcmd1bWVudHMoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBzdGQ6OnR1cGxlPD4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBQcmVmZXJlbmNl
c0RpZENoYW5nZSB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFdlYktpdDo6V2Vi
UHJlZmVyZW5jZXNTdG9yZT4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0K
LSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3Ry
aW5nUmVmZXJlbmNlKCJQcmVmZXJlbmNlc0RpZENoYW5nZSIpOyB9Ci0gICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBQcmVmZXJlbmNlc0RpZENoYW5n
ZShjb25zdCBXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQotICAgICAgICA6IG1f
YXJndW1lbnRzKHN0b3JlKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPGNv
bnN0IFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZSY+JiBhcmd1bWVudHMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBz
dGQ6OnR1cGxlPGNvbnN0IFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZSY+IG1fYXJndW1lbnRz
OwotfTsKLQotY2xhc3MgU2VuZERvdWJsZUFuZEZsb2F0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVm
IHN0ZDo6dHVwbGU8ZG91YmxlLCBmbG9hdD4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6
OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJO
YW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJu
IElQQzo6U3RyaW5nUmVmZXJlbmNlKCJTZW5kRG91YmxlQW5kRmxvYXQiKTsgfQotICAgIHN0YXRp
YyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgU2VuZERvdWJsZUFuZEZsb2F0KGRv
dWJsZSBkLCBmbG9hdCBmKQotICAgICAgICA6IG1fYXJndW1lbnRzKGQsIGYpCi0gICAgewotICAg
IH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8ZG91YmxlLCBmbG9hdD4mIGFyZ3VtZW50cygpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIHN0ZDo6dHVwbGU8ZG91YmxlLCBmbG9hdD4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFz
cyBTZW5kSW50cyB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFZlY3Rvcjx1aW50
NjRfdD4sIFZlY3RvcjxWZWN0b3I8dWludDY0X3Q+Pj4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRp
YyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVj
ZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsg
cmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJTZW5kSW50cyIpOyB9Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBTZW5kSW50cyhjb25zdCBWZWN0b3I8dWlu
dDY0X3Q+JiBpbnRzLCBjb25zdCBWZWN0b3I8VmVjdG9yPHVpbnQ2NF90Pj4mIGludFZlY3RvcnMp
Ci0gICAgICAgIDogbV9hcmd1bWVudHMoaW50cywgaW50VmVjdG9ycykKLSAgICB7Ci0gICAgfQot
Ci0gICAgY29uc3Qgc3RkOjp0dXBsZTxjb25zdCBWZWN0b3I8dWludDY0X3Q+JiwgY29uc3QgVmVj
dG9yPFZlY3Rvcjx1aW50NjRfdD4+Jj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8
Y29uc3QgVmVjdG9yPHVpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxWZWN0b3I8dWludDY0X3Q+PiY+
IG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgQ3JlYXRlUGx1Z2luIHsKLXB1YmxpYzoKLSAgICB0
eXBlZGVmIHN0ZDo6dHVwbGU8dWludDY0X3QsIFdlYktpdDo6UGx1Z2luOjpQYXJhbWV0ZXJzPiBE
ZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFt
ZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0
cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIkNyZWF0
ZVBsdWdpbiIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsKLQotICAg
IHR5cGVkZWYgSVBDOjpBcmd1bWVudHM8Ym9vbCY+IFJlcGx5OwotICAgIENyZWF0ZVBsdWdpbih1
aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlELCBjb25zdCBXZWJLaXQ6OlBsdWdpbjo6UGFyYW1ldGVy
cyYgcGFyYW1ldGVycykKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhwbHVnaW5JbnN0YW5jZUlELCBw
YXJhbWV0ZXJzKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPHVpbnQ2NF90
LCBjb25zdCBXZWJLaXQ6OlBsdWdpbjo6UGFyYW1ldGVycyY+JiBhcmd1bWVudHMoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBzdGQ6OnR1cGxlPHVpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlBsdWdpbjo6UGFyYW1ldGVycyY+
IG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgUnVuSmF2YVNjcmlwdEFsZXJ0IHsKLXB1YmxpYzoK
LSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8dWludDY0X3QsIFN0cmluZz4gRGVjb2RlVHlwZTsKLQot
ICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2Ug
bmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJSdW5KYXZhU2NyaXB0QWxlcnQi
KTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IHRydWU7Ci0KLSAgICB0eXBlZGVm
IElQQzo6QXJndW1lbnRzPD4gUmVwbHk7Ci0gICAgUnVuSmF2YVNjcmlwdEFsZXJ0KHVpbnQ2NF90
IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhm
cmFtZUlELCBtZXNzYWdlKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPHVp
bnQ2NF90LCBjb25zdCBTdHJpbmcmPiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTx1
aW50NjRfdCwgY29uc3QgU3RyaW5nJj4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBHZXRQbHVn
aW5zIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8Ym9vbD4gRGVjb2RlVHlwZTsK
LQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVy
biBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVu
Y2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJHZXRQbHVnaW5zIik7IH0K
LSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSB0cnVlOwotCi0gICAgdHlwZWRlZiBJUEM6
OkFyZ3VtZW50czxWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4mPiBSZXBseTsKLSAgICBleHBs
aWNpdCBHZXRQbHVnaW5zKGJvb2wgcmVmcmVzaCkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhyZWZy
ZXNoKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPGJvb2w+JiBhcmd1bWVu
dHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGJvb2w+IG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3Mg
R2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24gewotcHVibGljOgotICAgIHR5cGVkZWYgc3RkOjp0
dXBsZTxTdHJpbmc+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVu
Y2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAg
c3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSgiR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24iKTsgfQotICAgIHN0YXRpYyBjb25z
dCBib29sIGlzU3luYyA9IHRydWU7Ci0KLSAgICBzdHJ1Y3QgRGVsYXllZFJlcGx5IDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPERlbGF5ZWRSZXBseT4gewotICAgICAgICBEZWxheWVkUmVw
bHkoUGFzc1JlZlB0cjxJUEM6OkNvbm5lY3Rpb24+LCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNz
YWdlRW5jb2Rlcj4pOwotICAgICAgICB+RGVsYXllZFJlcGx5KCk7Ci0KLSAgICAgICAgYm9vbCBz
ZW5kKGNvbnN0IElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlJiBjb25uZWN0aW9uSGFuZGxlKTsKLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlv
bjsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+IG1fZW5jb2Rl
cjsKLSAgICB9OwotCi0gICAgdHlwZWRlZiBJUEM6OkFyZ3VtZW50czxJUEM6OkNvbm5lY3Rpb246
OkhhbmRsZSY+IFJlcGx5OwotICAgIGV4cGxpY2l0IEdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
KGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhwbHVnaW5Q
YXRoKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+
JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+IG1fYXJndW1l
bnRzOwotfTsKLQotY2xhc3MgVGVzdE11bHRpcGxlQXR0cmlidXRlcyB7Ci1wdWJsaWM6Ci0gICAg
dHlwZWRlZiBzdGQ6OnR1cGxlPD4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7
IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6
U3RyaW5nUmVmZXJlbmNlKCJUZXN0TXVsdGlwbGVBdHRyaWJ1dGVzIik7IH0KLSAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc1N5bmMgPSB0cnVlOwotCi0gICAgc3RydWN0IERlbGF5ZWRSZXBseSA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEZWxheWVkUmVwbHk+IHsKLSAgICAgICAgRGVsYXll
ZFJlcGx5KFBhc3NSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6
TWVzc2FnZUVuY29kZXI+KTsKLSAgICAgICAgfkRlbGF5ZWRSZXBseSgpOwotCi0gICAgICAgIGJv
b2wgc2VuZCgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPElQQzo6Q29ubmVjdGlv
bj4gbV9jb25uZWN0aW9uOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNzYWdlRW5j
b2Rlcj4gbV9lbmNvZGVyOwotICAgIH07Ci0KLSAgICB0eXBlZGVmIElQQzo6QXJndW1lbnRzPD4g
UmVwbHk7Ci0gICAgY29uc3Qgc3RkOjp0dXBsZTw+JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6
OnR1cGxlPD4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBUZXN0UGFyYW1ldGVyQXR0cmlidXRl
cyB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPHVpbnQ2NF90LCBkb3VibGUsIGRv
dWJsZT4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNl
aXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMg
SVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNl
KCJUZXN0UGFyYW1ldGVyQXR0cmlidXRlcyIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNT
eW5jID0gZmFsc2U7Ci0KLSAgICBUZXN0UGFyYW1ldGVyQXR0cmlidXRlcyh1aW50NjRfdCBmb28s
IGRvdWJsZSBiYXIsIGRvdWJsZSBiYXopCi0gICAgICAgIDogbV9hcmd1bWVudHMoZm9vLCBiYXIs
IGJheikKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTx1aW50NjRfdCwgZG91
YmxlLCBkb3VibGU+JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
YXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPHVpbnQ2NF90LCBk
b3VibGUsIGRvdWJsZT4gbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBUZW1wbGF0ZVRlc3Qgewot
cHVibGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxIYXNoTWFwPFN0cmluZywgc3RkOjpwYWly
PFN0cmluZywgdWludDY0X3Q+Pj4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7
IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6
U3RyaW5nUmVmZXJlbmNlKCJUZW1wbGF0ZVRlc3QiKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29s
IGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgVGVtcGxhdGVUZXN0KGNvbnN0IEhhc2hN
YXA8U3RyaW5nLCBzdGQ6OnBhaXI8U3RyaW5nLCB1aW50NjRfdD4+JiBhKQotICAgICAgICA6IG1f
YXJndW1lbnRzKGEpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29uc3Qg
SGFzaE1hcDxTdHJpbmcsIHN0ZDo6cGFpcjxTdHJpbmcsIHVpbnQ2NF90Pj4mPiYgYXJndW1lbnRz
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgc3RkOjp0dXBsZTxjb25zdCBIYXNoTWFwPFN0cmluZywgc3RkOjpwYWlyPFN0
cmluZywgdWludDY0X3Q+PiY+IG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgU2V0VmlkZW9MYXll
cklEIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8V2ViQ29yZTo6R3JhcGhpY3NM
YXllcjo6UGxhdGZvcm1MYXllcklEPiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3Ry
aW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUo
KTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBD
OjpTdHJpbmdSZWZlcmVuY2UoIlNldFZpZGVvTGF5ZXJJRCIpOyB9Ci0gICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBTZXRWaWRlb0xheWVySUQoY29u
c3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEJiB2aWRlb0xheWVySUQp
Ci0gICAgICAgIDogbV9hcmd1bWVudHModmlkZW9MYXllcklEKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3Jt
TGF5ZXJJRCY+JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJn
dW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCY+IG1fYXJndW1lbnRzOwotfTsKLQotI2lm
IFBMQVRGT1JNKE1BQykKLWNsYXNzIERpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uIHsKLXB1
YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8SVBDOjpNYWNoUG9ydD4gRGVjb2RlVHlwZTsK
LQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVy
biBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVu
Y2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJEaWRDcmVhdGVXZWJQcm9j
ZXNzQ29ubmVjdGlvbiIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7
Ci0KLSAgICBleHBsaWNpdCBEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbihjb25zdCBJUEM6
Ok1hY2hQb3J0JiBjb25uZWN0aW9uSWRlbnRpZmllcikKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhj
b25uZWN0aW9uSWRlbnRpZmllcikKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0dXBs
ZTxjb25zdCBJUEM6Ok1hY2hQb3J0Jj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8
Y29uc3QgSVBDOjpNYWNoUG9ydCY+IG1fYXJndW1lbnRzOwotfTsKLSNlbmRpZgotCi0jaWYgUExB
VEZPUk0oTUFDKQotY2xhc3MgSW50ZXJwcmV0S2V5RXZlbnQgewotcHVibGljOgotICAgIHR5cGVk
ZWYgc3RkOjp0dXBsZTx1aW50MzJfdD4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0
cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1l
KCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQ
Qzo6U3RyaW5nUmVmZXJlbmNlKCJJbnRlcnByZXRLZXlFdmVudCIpOyB9Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsKLQotICAgIHR5cGVkZWYgSVBDOjpBcmd1bWVudHM8VmVj
dG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mPiBSZXBseTsKLSAgICBleHBsaWNpdCBJbnRl
cnByZXRLZXlFdmVudCh1aW50MzJfdCB0eXBlKQotICAgICAgICA6IG1fYXJndW1lbnRzKHR5cGUp
Ci0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8dWludDMyX3Q+JiBhcmd1bWVu
dHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPHVpbnQzMl90PiBtX2FyZ3VtZW50czsKLX07Ci0jZW5k
aWYKLQotI2lmIEVOQUJMRShERVBSRUNBVEVEX0ZFQVRVUkUpCi1jbGFzcyBEZXByZWNhdGVkT3Bl
cmF0aW9uIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8SVBDOjpEdW1teVR5cGU+
IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJO
YW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6
U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiRGVw
cmVjYXRlZE9wZXJhdGlvbiIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFs
c2U7Ci0KLSAgICBleHBsaWNpdCBEZXByZWNhdGVkT3BlcmF0aW9uKGNvbnN0IElQQzo6RHVtbXlU
eXBlJiBkdW1teSkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhkdW1teSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgY29uc3Qgc3RkOjp0dXBsZTxjb25zdCBJUEM6OkR1bW15VHlwZSY+JiBhcmd1bWVudHMo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IElQQzo6RHVtbXlUeXBlJj4gbV9hcmd1bWVudHM7
Ci19OwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRVhQRVJJTUVOVEFMX0ZFQVRVUkUpCi1jbGFzcyBF
eHBlcmltZW50YWxPcGVyYXRpb24gewotcHVibGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxJ
UEM6OkR1bW15VHlwZT4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAg
ICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5n
UmVmZXJlbmNlKCJFeHBlcmltZW50YWxPcGVyYXRpb24iKTsgfQotICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgRXhwZXJpbWVudGFsT3BlcmF0aW9u
KGNvbnN0IElQQzo6RHVtbXlUeXBlJiBkdW1teSkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhkdW1t
eSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTxjb25zdCBJUEM6OkR1bW15
VHlwZSY+JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1l
bnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IElQQzo6RHVtbXlU
eXBlJj4gbV9hcmd1bWVudHM7Ci19OwotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYlBhZ2UK
LX0gLy8gbmFtZXNwYWNlIE1lc3NhZ2VzCi0KLSNlbmRpZiAvLyAoRU5BQkxFKFdFQktJVDIpICYm
IChORVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNURVJfT1IgJiYgTUFTVEVSX0FORCkpCi0K
LSNlbmRpZiAvLyBXZWJQYWdlTWVzc2FnZXNfaApJbmRleDogU291cmNlL1dlYktpdDIvU2NyaXB0
cy93ZWJraXQyL01lc3NhZ2VSZWNlaXZlci1leHBlY3RlZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL01lc3NhZ2VSZWNlaXZlci1leHBlY3RlZC5jcHAJ
KHJldmlzaW9uIDE3MzQ5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9NZXNz
YWdlUmVjZWl2ZXItZXhwZWN0ZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyOCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgot
ICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIChFTkFCTEUoV0VCS0lU
MikgJiYgKE5FU1RFRF9NQVNURVJfQ09ORElUSU9OIHx8IE1BU1RFUl9PUiAmJiBNQVNURVJfQU5E
KSkKLQotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLQotI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgi
Ci0jaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2lmIEVOQUJMRShERVBSRUNBVEVEX0ZFQVRVUkUp
IHx8IEVOQUJMRShFWFBFUklNRU5UQUxfRkVBVFVSRSkKLSNpbmNsdWRlICJEdW1teVR5cGUuaCIK
LSNlbmRpZgotI2luY2x1ZGUgIkhhbmRsZU1lc3NhZ2UuaCIKLSNpZiBQTEFURk9STShNQUMpCi0j
aW5jbHVkZSAiTWFjaFBvcnQuaCIKLSNlbmRpZgotI2luY2x1ZGUgIk1lc3NhZ2VEZWNvZGVyLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgi
Ci0jaWYgKEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIChORVNURURfTUVTU0FHRV9DT05ESVRJT04g
JiYgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTikpIHx8IChFTkFCTEUoVE9VQ0hfRVZFTlRT
KSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9OIHx8IFNPTUVfT1RIRVJfTUVTU0FHRV9DT05E
SVRJT04pKQotI2luY2x1ZGUgIldlYkV2ZW50LmgiCi0jZW5kaWYKLSNpbmNsdWRlICJXZWJQYWdl
TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc1N0b3JlLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgPFdl
YkNvcmUvS2V5Ym9hcmRFdmVudC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5E
YXRhLmg+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIE1lc3NhZ2VzIHsKLQotbmFtZXNwYWNlIFdlYlBhZ2UgewotCi1HZXRQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5OjpEZWxheWVkUmVwbHkoUGFzc1JlZlB0cjxJ
UEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24sIHN0ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VF
bmNvZGVyPiBlbmNvZGVyKQotICAgIDogbV9jb25uZWN0aW9uKGNvbm5lY3Rpb24pCi0gICAgLCBt
X2VuY29kZXIoV1RGOjptb3ZlKGVuY29kZXIpKQotewotfQotCi1HZXRQbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbjo6RGVsYXllZFJlcGx5Ojp+RGVsYXllZFJlcGx5KCkKLXsKLSAgICBBU1NFUlQoIW1f
Y29ubmVjdGlvbik7Ci19Ci0KLWJvb2wgR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5
ZWRSZXBseTo6c2VuZChjb25zdCBJUEM6OkNvbm5lY3Rpb246OkhhbmRsZSYgY29ubmVjdGlvbkhh
bmRsZSkKLXsKLSAgICBBU1NFUlQobV9lbmNvZGVyKTsKLSAgICAqbV9lbmNvZGVyIDw8IGNvbm5l
Y3Rpb25IYW5kbGU7Ci0gICAgYm9vbCBfcmVzdWx0ID0gbV9jb25uZWN0aW9uLT5zZW5kU3luY1Jl
cGx5KFdURjo6bW92ZShtX2VuY29kZXIpKTsKLSAgICBtX2Nvbm5lY3Rpb24gPSBudWxscHRyOwot
ICAgIHJldHVybiBfcmVzdWx0OwotfQotCi1UZXN0TXVsdGlwbGVBdHRyaWJ1dGVzOjpEZWxheWVk
UmVwbHk6OkRlbGF5ZWRSZXBseShQYXNzUmVmUHRyPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlv
biwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+IGVuY29kZXIpCi0gICAgOiBt
X2Nvbm5lY3Rpb24oY29ubmVjdGlvbikKLSAgICAsIG1fZW5jb2RlcihXVEY6Om1vdmUoZW5jb2Rl
cikpCi17Ci19Ci0KLVRlc3RNdWx0aXBsZUF0dHJpYnV0ZXM6OkRlbGF5ZWRSZXBseTo6fkRlbGF5
ZWRSZXBseSgpCi17Ci0gICAgQVNTRVJUKCFtX2Nvbm5lY3Rpb24pOwotfQotCi1ib29sIFRlc3RN
dWx0aXBsZUF0dHJpYnV0ZXM6OkRlbGF5ZWRSZXBseTo6c2VuZCgpCi17Ci0gICAgQVNTRVJUKG1f
ZW5jb2Rlcik7Ci0gICAgYm9vbCBfcmVzdWx0ID0gbV9jb25uZWN0aW9uLT5zZW5kU3luY1JlcGx5
KFdURjo6bW92ZShtX2VuY29kZXIpKTsKLSAgICBtX2Nvbm5lY3Rpb24gPSBudWxscHRyOwotICAg
IHJldHVybiBfcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJQYWdlCi0KLX0gLy8gbmFt
ZXNwYWNlIE1lc3NhZ2VzCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFdlYlBhZ2U6OmRp
ZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdl
RGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1l
c3NhZ2VzOjpXZWJQYWdlOjpMb2FkVVJMOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVN
ZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkVVJMPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFn
ZTo6bG9hZFVSTCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdl
OjpMb2FkU29tZXRoaW5nOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1l
c3NhZ2VzOjpXZWJQYWdlOjpMb2FkU29tZXRoaW5nPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6
bG9hZFNvbWV0aGluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSNpZiAoRU5B
QkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiB8fCBTT01FX09U
SEVSX01FU1NBR0VfQ09ORElUSU9OKSkKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09
IE1lc3NhZ2VzOjpXZWJQYWdlOjpUb3VjaEV2ZW50OjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpo
YW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpUb3VjaEV2ZW50PihkZWNvZGVyLCB0aGlz
LCAmV2ViUGFnZTo6dG91Y2hFdmVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYK
LSNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiAm
JiBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OKSkKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
TmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpBZGRFdmVudDo6bmFtZSgpKSB7Ci0gICAgICAg
IElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6QWRkRXZlbnQ+KGRlY29kZXIs
IHRoaXMsICZXZWJQYWdlOjphZGRFdmVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5k
aWYKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1l
KCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRTb21ldGhpbmdFbHNlOjpuYW1lKCkpIHsKLSAg
ICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkU29tZXRoaW5n
RWxzZT4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OmxvYWRTb21ldGhpbmdFbHNlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkg
PT0gTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbjo6bmFtZSgpKSB7
Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6RGlkUmVjZWl2
ZVBvbGljeURlY2lzaW9uPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6ZGlkUmVjZWl2ZVBvbGlj
eURlY2lzaW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZGVjb2Rlci5tZXNz
YWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpDbG9zZTo6bmFtZSgpKSB7Ci0gICAgICAg
IElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6Q2xvc2U+KGRlY29kZXIsIHRo
aXMsICZXZWJQYWdlOjpjbG9zZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRl
Y29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6UHJlZmVyZW5jZXNEaWRD
aGFuZ2U6Om5hbWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6Oldl
YlBhZ2U6OlByZWZlcmVuY2VzRGlkQ2hhbmdlPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6cHJl
ZmVyZW5jZXNEaWRDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChkZWNv
ZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OlNlbmREb3VibGVBbmRGbG9h
dDo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFn
ZTo6U2VuZERvdWJsZUFuZEZsb2F0PihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6c2VuZERvdWJs
ZUFuZEZsb2F0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZGVjb2Rlci5tZXNz
YWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kSW50czo6bmFtZSgpKSB7Ci0gICAg
ICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6U2VuZEludHM+KGRlY29k
ZXIsIHRoaXMsICZXZWJQYWdlOjpzZW5kSW50cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6VGVzdFBh
cmFtZXRlckF0dHJpYnV0ZXM6Om5hbWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8
TWVzc2FnZXM6OldlYlBhZ2U6OlRlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzPihkZWNvZGVyLCB0aGlz
LCAmV2ViUGFnZTo6dGVzdFBhcmFtZXRlckF0dHJpYnV0ZXMpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6
OlRlbXBsYXRlVGVzdDo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNz
YWdlczo6V2ViUGFnZTo6VGVtcGxhdGVUZXN0PihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6dGVt
cGxhdGVUZXN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZGVjb2Rlci5tZXNz
YWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRWaWRlb0xheWVySUQ6Om5hbWUoKSkg
ewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OlNldFZpZGVv
TGF5ZXJJRD4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OnNldFZpZGVvTGF5ZXJJRCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChkZWNvZGVyLm1l
c3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkRpZENyZWF0ZVdlYlByb2Nlc3NDb25u
ZWN0aW9uOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpX
ZWJQYWdlOjpEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbj4oZGVjb2RlciwgdGhpcywgJldl
YlBhZ2U6OmRpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSNlbmRpZgotI2lmIEVOQUJMRShERVBSRUNBVEVEX0ZFQVRVUkUpCi0gICAgaWYgKGRl
Y29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6RGVwcmVjYXRlZE9wZXJh
dGlvbjo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2Vi
UGFnZTo6RGVwcmVjYXRlZE9wZXJhdGlvbj4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OmRlcHJl
Y2F0ZWRPcGVyYXRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0jaWYgRU5B
QkxFKEVYUEVSSU1FTlRBTF9GRUFUVVJFKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkg
PT0gTWVzc2FnZXM6OldlYlBhZ2U6OkV4cGVyaW1lbnRhbE9wZXJhdGlvbjo6bmFtZSgpKSB7Ci0g
ICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6RXhwZXJpbWVudGFs
T3BlcmF0aW9uPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6ZXhwZXJpbWVudGFsT3BlcmF0aW9u
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAgIFVOVVNFRF9QQVJBTShjb25u
ZWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiogY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1
bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+JiByZXBseUVuY29kZXIpCi17Ci0gICAgaWYg
KGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6Q3JlYXRlUGx1Z2lu
OjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdl
OjpDcmVhdGVQbHVnaW4+KGRlY29kZXIsICpyZXBseUVuY29kZXIsIHRoaXMsICZXZWJQYWdlOjpj
cmVhdGVQbHVnaW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChkZWNvZGVyLm1l
c3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OlJ1bkphdmFTY3JpcHRBbGVydDo6bmFt
ZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6UnVu
SmF2YVNjcmlwdEFsZXJ0PihkZWNvZGVyLCAqcmVwbHlFbmNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6
cnVuSmF2YVNjcmlwdEFsZXJ0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZGVj
b2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRQbHVnaW5zOjpuYW1l
KCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRQ
bHVnaW5zPihkZWNvZGVyLCAqcmVwbHlFbmNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6Z2V0UGx1Z2lu
cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUo
KSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6R2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246Om5hbWUo
KSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2VEZWxheWVkPE1lc3NhZ2VzOjpXZWJQYWdl
OjpHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbj4oY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlF
bmNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVz
c2FnZXM6OldlYlBhZ2U6OlRlc3RNdWx0aXBsZUF0dHJpYnV0ZXM6Om5hbWUoKSkgewotICAgICAg
ICBJUEM6OmhhbmRsZU1lc3NhZ2VEZWxheWVkPE1lc3NhZ2VzOjpXZWJQYWdlOjpUZXN0TXVsdGlw
bGVBdHRyaWJ1dGVzPihjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIsIHRoaXMsICZX
ZWJQYWdlOjp0ZXN0TXVsdGlwbGVBdHRyaWJ1dGVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNz
YWdlczo6V2ViUGFnZTo6SW50ZXJwcmV0S2V5RXZlbnQ6Om5hbWUoKSkgewotICAgICAgICBJUEM6
OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkludGVycHJldEtleUV2ZW50PihkZWNv
ZGVyLCAqcmVwbHlFbmNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6aW50ZXJwcmV0S2V5RXZlbnQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rp
b24pOwotICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTsKLSAgICBVTlVTRURfUEFSQU0ocmVwbHlF
bmNvZGVyKTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyAoRU5BQkxFKFdFQktJVDIpICYmIChORVNURURfTUFTVEVSX0NP
TkRJVElPTiB8fCBNQVNURVJfT1IgJiYgTUFTVEVSX0FORCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TY3JpcHRzL3dlYmtpdDIvTWVzc2FnZVJlY2VpdmVyU3VwZXJjbGFzcy1leHBlY3RlZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL01lc3NhZ2VSZWNl
aXZlclN1cGVyY2xhc3MtZXhwZWN0ZWQuY3BwCShyZXZpc2lvbiAxNzM0OTEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvTWVzc2FnZVJlY2VpdmVyU3VwZXJjbGFzcy1leHBlY3Rl
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0KLSNpbmNsdWRlICJBcmd1
bWVudENvZGVycy5oIgotI2luY2x1ZGUgIkhhbmRsZU1lc3NhZ2UuaCIKLSNpbmNsdWRlICJNZXNz
YWdlRGVjb2Rlci5oIgotI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBXZWJQYWdl
OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIElQQzo6TWVz
c2FnZURlY29kZXImIGRlY29kZXIpCi17Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9
PSBNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFVSTDo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFu
ZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFVSTD4oZGVjb2RlciwgdGhpcywgJldl
YlBhZ2U6OmxvYWRVUkwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFdlYlBhZ2VCYXNl
OjpkaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvTWVzc2Fn
ZXMtZXhwZWN0ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtp
dDIvTWVzc2FnZXMtZXhwZWN0ZWQuaAkocmV2aXNpb24gMTczNDkxKQorKysgU291cmNlL1dlYktp
dDIvU2NyaXB0cy93ZWJraXQyL01lc3NhZ2VzLWV4cGVjdGVkLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
LSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJQYWdlTWVzc2FnZXNfaAot
I2RlZmluZSBXZWJQYWdlTWVzc2FnZXNfaAotCi0jaWYgKEVOQUJMRShXRUJLSVQyKSAmJiAoTkVT
VEVEX01BU1RFUl9DT05ESVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKQotCi0jaW5j
bHVkZSAiQXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIk1l
c3NhZ2VFbmNvZGVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luLmgiCi0jaW5jbHVkZSAiU3RyaW5nUmVm
ZXJlbmNlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+
Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElQQyB7Ci0gICAgY2xh
c3MgQ29ubmVjdGlvbjsKLSAgICBjbGFzcyBEdW1teVR5cGU7Ci0gICAgY2xhc3MgTWFjaFBvcnQ7
Ci19Ci0KLW5hbWVzcGFjZSBXVEYgewotICAgIGNsYXNzIFN0cmluZzsKLX0KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0gICAgc3RydWN0IFdlYlByZWZlcmVuY2VzU3RvcmU7Ci0gICAgY2xhc3MgV2Vi
VG91Y2hFdmVudDsKLX0KLQotbmFtZXNwYWNlIE1lc3NhZ2VzIHsKLW5hbWVzcGFjZSBXZWJQYWdl
IHsKLQotc3RhdGljIGlubGluZSBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJO
YW1lKCkKLXsKLSAgICByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIldlYlBhZ2UiKTsKLX0K
LQotY2xhc3MgTG9hZFVSTCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFN0cmlu
Zz4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZl
ck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBD
OjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJM
b2FkVVJMIik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAg
IGV4cGxpY2l0IExvYWRVUkwoY29uc3QgU3RyaW5nJiB1cmwpCi0gICAgICAgIDogbV9hcmd1bWVu
dHModXJsKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0IFN0cmlu
ZyY+JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRz
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+IG1fYXJn
dW1lbnRzOwotfTsKLQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi1jbGFzcyBMb2FkU29tZXRo
aW5nIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8U3RyaW5nPiBEZWNvZGVUeXBl
OwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0
dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIkxvYWRTb21ldGhpbmci
KTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhwbGlj
aXQgTG9hZFNvbWV0aGluZyhjb25zdCBTdHJpbmcmIHVybCkKLSAgICAgICAgOiBtX2FyZ3VtZW50
cyh1cmwpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29uc3QgU3RyaW5n
Jj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8Y29uc3QgU3RyaW5nJj4gbV9hcmd1
bWVudHM7Ci19OwotI2VuZGlmCi0KLSNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RF
RF9NRVNTQUdFX0NPTkRJVElPTiB8fCBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OKSkKLWNs
YXNzIFRvdWNoRXZlbnQgewotcHVibGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxXZWJLaXQ6
OldlYlRvdWNoRXZlbnQ+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZl
cmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0g
ICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSgiVG91Y2hFdmVudCIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5j
ID0gZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBUb3VjaEV2ZW50KGNvbnN0IFdlYktpdDo6V2ViVG91
Y2hFdmVudCYgZXZlbnQpCi0gICAgICAgIDogbV9hcmd1bWVudHMoZXZlbnQpCi0gICAgewotICAg
IH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29uc3QgV2ViS2l0OjpXZWJUb3VjaEV2ZW50Jj4m
IGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8Y29uc3QgV2ViS2l0OjpXZWJUb3VjaEV2
ZW50Jj4gbV9hcmd1bWVudHM7Ci19OwotI2VuZGlmCi0KLSNpZiAoRU5BQkxFKFRPVUNIX0VWRU5U
UykgJiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiAmJiBTT01FX09USEVSX01FU1NBR0VfQ09O
RElUSU9OKSkKLWNsYXNzIEFkZEV2ZW50IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVw
bGU8V2ViS2l0OjpXZWJUb3VjaEV2ZW50PiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6
U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5h
bWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4g
SVBDOjpTdHJpbmdSZWZlcmVuY2UoIkFkZEV2ZW50Iik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIGV4cGxpY2l0IEFkZEV2ZW50KGNvbnN0IFdlYktpdDo6
V2ViVG91Y2hFdmVudCYgZXZlbnQpCi0gICAgICAgIDogbV9hcmd1bWVudHMoZXZlbnQpCi0gICAg
ewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29uc3QgV2ViS2l0OjpXZWJUb3VjaEV2
ZW50Jj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8Y29uc3QgV2ViS2l0OjpXZWJU
b3VjaEV2ZW50Jj4gbV9hcmd1bWVudHM7Ci19OwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQotY2xhc3MgTG9hZFNvbWV0aGluZ0Vsc2UgewotcHVibGljOgotICAgIHR5cGVkZWYg
c3RkOjp0dXBsZTxTdHJpbmc+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdS
ZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9
Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0
cmluZ1JlZmVyZW5jZSgiTG9hZFNvbWV0aGluZ0Vsc2UiKTsgfQotICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgTG9hZFNvbWV0aGluZ0Vsc2UoY29u
c3QgU3RyaW5nJiB1cmwpCi0gICAgICAgIDogbV9hcmd1bWVudHModXJsKQotICAgIHsKLSAgICB9
Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+JiBhcmd1bWVudHMoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+IG1fYXJndW1lbnRzOwotfTsKLSNlbmRpZgot
Ci1jbGFzcyBEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24gewotcHVibGljOgotICAgIHR5cGVkZWYg
c3RkOjp0dXBsZTx1aW50NjRfdCwgdWludDY0X3QsIHVpbnQzMl90PiBEZWNvZGVUeXBlOwotCi0g
ICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1l
c3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBu
YW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIkRpZFJlY2VpdmVQb2xpY3lEZWNp
c2lvbiIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBE
aWRSZWNlaXZlUG9saWN5RGVjaXNpb24odWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgbGlzdGVu
ZXJJRCwgdWludDMyX3QgcG9saWN5QWN0aW9uKQotICAgICAgICA6IG1fYXJndW1lbnRzKGZyYW1l
SUQsIGxpc3RlbmVySUQsIHBvbGljeUFjdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qg
c3RkOjp0dXBsZTx1aW50NjRfdCwgdWludDY0X3QsIHVpbnQzMl90PiYgYXJndW1lbnRzKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgc3RkOjp0dXBsZTx1aW50NjRfdCwgdWludDY0X3QsIHVpbnQzMl90PiBtX2FyZ3VtZW50
czsKLX07Ci0KLWNsYXNzIENsb3NlIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8
PiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVy
TmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6
OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIkNs
b3NlIik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIGNv
bnN0IHN0ZDo6dHVwbGU8PiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTw+IG1fYXJn
dW1lbnRzOwotfTsKLQotY2xhc3MgUHJlZmVyZW5jZXNEaWRDaGFuZ2UgewotcHVibGljOgotICAg
IHR5cGVkZWYgc3RkOjp0dXBsZTxXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmU+IERlY29kZVR5
cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyBy
ZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVm
ZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiUHJlZmVyZW5jZXNE
aWRDaGFuZ2UiKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0g
ICAgZXhwbGljaXQgUHJlZmVyZW5jZXNEaWRDaGFuZ2UoY29uc3QgV2ViS2l0OjpXZWJQcmVmZXJl
bmNlc1N0b3JlJiBzdG9yZSkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhzdG9yZSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTxjb25zdCBXZWJLaXQ6OldlYlByZWZlcmVuY2Vz
U3RvcmUmPiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3Vt
ZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTxjb25zdCBXZWJLaXQ6Oldl
YlByZWZlcmVuY2VzU3RvcmUmPiBtX2FyZ3VtZW50czsKLX07Ci0KLWNsYXNzIFNlbmREb3VibGVB
bmRGbG9hdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPGRvdWJsZSwgZmxvYXQ+
IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJO
YW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6
U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiU2Vu
ZERvdWJsZUFuZEZsb2F0Iik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxz
ZTsKLQotICAgIFNlbmREb3VibGVBbmRGbG9hdChkb3VibGUgZCwgZmxvYXQgZikKLSAgICAgICAg
OiBtX2FyZ3VtZW50cyhkLCBmKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxl
PGRvdWJsZSwgZmxvYXQ+JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGRvdWJsZSwg
ZmxvYXQ+IG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgU2VuZEludHMgewotcHVibGljOgotICAg
IHR5cGVkZWYgc3RkOjp0dXBsZTxWZWN0b3I8dWludDY0X3Q+LCBWZWN0b3I8VmVjdG9yPHVpbnQ2
NF90Pj4+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVj
ZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGlj
IElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5j
ZSgiU2VuZEludHMiKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwot
Ci0gICAgU2VuZEludHMoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgaW50cywgY29uc3QgVmVjdG9y
PFZlY3Rvcjx1aW50NjRfdD4+JiBpbnRWZWN0b3JzKQotICAgICAgICA6IG1fYXJndW1lbnRzKGlu
dHMsIGludFZlY3RvcnMpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29u
c3QgVmVjdG9yPHVpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxWZWN0b3I8dWludDY0X3Q+PiY+JiBh
cmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mLCBj
b25zdCBWZWN0b3I8VmVjdG9yPHVpbnQ2NF90Pj4mPiBtX2FyZ3VtZW50czsKLX07Ci0KLWNsYXNz
IENyZWF0ZVBsdWdpbiB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPHVpbnQ2NF90
LCBXZWJLaXQ6OlBsdWdpbjo6UGFyYW1ldGVycz4gRGVjb2RlVHlwZTsKLQotICAgIHN0YXRpYyBJ
UEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVybiBtZXNzYWdlUmVjZWl2
ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0
dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJDcmVhdGVQbHVnaW4iKTsgfQotICAgIHN0YXRpYyBj
b25zdCBib29sIGlzU3luYyA9IHRydWU7Ci0KLSAgICB0eXBlZGVmIElQQzo6QXJndW1lbnRzPGJv
b2wmPiBSZXBseTsKLSAgICBDcmVhdGVQbHVnaW4odWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwg
Y29uc3QgV2ViS2l0OjpQbHVnaW46OlBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi0gICAgICAgIDog
bV9hcmd1bWVudHMocGx1Z2luSW5zdGFuY2VJRCwgcGFyYW1ldGVycykKLSAgICB7Ci0gICAgfQot
Ci0gICAgY29uc3Qgc3RkOjp0dXBsZTx1aW50NjRfdCwgY29uc3QgV2ViS2l0OjpQbHVnaW46OlBh
cmFtZXRlcnMmPiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2Fy
Z3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTx1aW50NjRfdCwgY29u
c3QgV2ViS2l0OjpQbHVnaW46OlBhcmFtZXRlcnMmPiBtX2FyZ3VtZW50czsKLX07Ci0KLWNsYXNz
IFJ1bkphdmFTY3JpcHRBbGVydCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPHVp
bnQ2NF90LCBTdHJpbmc+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZl
cmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0g
ICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSgiUnVuSmF2YVNjcmlwdEFsZXJ0Iik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc1N5bmMgPSB0cnVlOwotCi0gICAgdHlwZWRlZiBJUEM6OkFyZ3VtZW50czw+IFJlcGx5Owot
ICAgIFJ1bkphdmFTY3JpcHRBbGVydCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCi0gICAgICAgIDogbV9hcmd1bWVudHMoZnJhbWVJRCwgbWVzc2FnZSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTx1aW50NjRfdCwgY29uc3QgU3RyaW5nJj4mIGFy
Z3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8dWludDY0X3QsIGNvbnN0IFN0cmluZyY+IG1f
YXJndW1lbnRzOwotfTsKLQotY2xhc3MgR2V0UGx1Z2lucyB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRl
ZiBzdGQ6OnR1cGxlPGJvb2w+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdS
ZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9
Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0
cmluZ1JlZmVyZW5jZSgiR2V0UGx1Z2lucyIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNT
eW5jID0gdHJ1ZTsKLQotICAgIHR5cGVkZWYgSVBDOjpBcmd1bWVudHM8VmVjdG9yPFdlYkNvcmU6
OlBsdWdpbkluZm8+Jj4gUmVwbHk7Ci0gICAgZXhwbGljaXQgR2V0UGx1Z2lucyhib29sIHJlZnJl
c2gpCi0gICAgICAgIDogbV9hcmd1bWVudHMocmVmcmVzaCkKLSAgICB7Ci0gICAgfQotCi0gICAg
Y29uc3Qgc3RkOjp0dXBsZTxib29sPiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTxi
b29sPiBtX2FyZ3VtZW50czsKLX07Ci0KLWNsYXNzIEdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8U3RyaW5nPiBEZWNvZGVUeXBlOwot
Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJu
IG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5j
ZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIkdldFBsdWdpblByb2Nlc3ND
b25uZWN0aW9uIik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSB0cnVlOwotCi0g
ICAgc3RydWN0IERlbGF5ZWRSZXBseSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEZWxh
eWVkUmVwbHk+IHsKLSAgICAgICAgRGVsYXllZFJlcGx5KFBhc3NSZWZQdHI8SVBDOjpDb25uZWN0
aW9uPiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+KTsKLSAgICAgICAgfkRl
bGF5ZWRSZXBseSgpOwotCi0gICAgICAgIGJvb2wgc2VuZChjb25zdCBJUEM6OkNvbm5lY3Rpb246
OkhhbmRsZSYgY29ubmVjdGlvbkhhbmRsZSk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQ
dHI8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiBtX2VuY29kZXI7Ci0gICAgfTsKLQotICAgIHR5cGVkZWYg
SVBDOjpBcmd1bWVudHM8SVBDOjpDb25uZWN0aW9uOjpIYW5kbGUmPiBSZXBseTsKLSAgICBleHBs
aWNpdCBHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbihjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgp
Ci0gICAgICAgIDogbV9hcmd1bWVudHMocGx1Z2luUGF0aCkKLSAgICB7Ci0gICAgfQotCi0gICAg
Y29uc3Qgc3RkOjp0dXBsZTxjb25zdCBTdHJpbmcmPiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3Rk
Ojp0dXBsZTxjb25zdCBTdHJpbmcmPiBtX2FyZ3VtZW50czsKLX07Ci0KLWNsYXNzIFRlc3RNdWx0
aXBsZUF0dHJpYnV0ZXMgewotcHVibGljOgotICAgIHR5cGVkZWYgc3RkOjp0dXBsZTw+IERlY29k
ZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkg
eyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3RyaW5n
UmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiVGVzdE11bHRp
cGxlQXR0cmlidXRlcyIpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsK
LQotICAgIHN0cnVjdCBEZWxheWVkUmVwbHkgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
RGVsYXllZFJlcGx5PiB7Ci0gICAgICAgIERlbGF5ZWRSZXBseShQYXNzUmVmUHRyPElQQzo6Q29u
bmVjdGlvbj4sIHN0ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPik7Ci0gICAgICAg
IH5EZWxheWVkUmVwbHkoKTsKLQotICAgICAgICBib29sIHNlbmQoKTsKLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLSAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+IG1fZW5jb2RlcjsKLSAgICB9Owot
Ci0gICAgdHlwZWRlZiBJUEM6OkFyZ3VtZW50czw+IFJlcGx5OwotICAgIGNvbnN0IHN0ZDo6dHVw
bGU8PiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50
czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTw+IG1fYXJndW1lbnRzOwotfTsK
LQotY2xhc3MgVGVzdFBhcmFtZXRlckF0dHJpYnV0ZXMgewotcHVibGljOgotICAgIHR5cGVkZWYg
c3RkOjp0dXBsZTx1aW50NjRfdCwgZG91YmxlLCBkb3VibGU+IERlY29kZVR5cGU7Ci0KLSAgICBz
dGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUo
KSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiVGVzdFBhcmFtZXRlckF0dHJpYnV0ZXMi
KTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgVGVzdFBh
cmFtZXRlckF0dHJpYnV0ZXModWludDY0X3QgZm9vLCBkb3VibGUgYmFyLCBkb3VibGUgYmF6KQot
ICAgICAgICA6IG1fYXJndW1lbnRzKGZvbywgYmFyLCBiYXopCi0gICAgewotICAgIH0KLQotICAg
IGNvbnN0IHN0ZDo6dHVwbGU8dWludDY0X3QsIGRvdWJsZSwgZG91YmxlPiYgYXJndW1lbnRzKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgc3RkOjp0dXBsZTx1aW50NjRfdCwgZG91YmxlLCBkb3VibGU+IG1fYXJndW1lbnRz
OwotfTsKLQotY2xhc3MgVGVtcGxhdGVUZXN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6
dHVwbGU8SGFzaE1hcDxTdHJpbmcsIHN0ZDo6cGFpcjxTdHJpbmcsIHVpbnQ2NF90Pj4+IERlY29k
ZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkg
eyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3RyaW5n
UmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiVGVtcGxhdGVU
ZXN0Iik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIGV4
cGxpY2l0IFRlbXBsYXRlVGVzdChjb25zdCBIYXNoTWFwPFN0cmluZywgc3RkOjpwYWlyPFN0cmlu
ZywgdWludDY0X3Q+PiYgYSkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhhKQotICAgIHsKLSAgICB9
Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnBhaXI8
U3RyaW5nLCB1aW50NjRfdD4+Jj4mIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dHVwbGU8Y29u
c3QgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6cGFpcjxTdHJpbmcsIHVpbnQ2NF90Pj4mPiBtX2FyZ3Vt
ZW50czsKLX07Ci0KLWNsYXNzIFNldFZpZGVvTGF5ZXJJRCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRl
ZiBzdGQ6OnR1cGxlPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4gRGVj
b2RlVHlwZTsKLQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUo
KSB7IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJp
bmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJTZXRWaWRl
b0xheWVySUQiKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0g
ICAgZXhwbGljaXQgU2V0VmlkZW9MYXllcklEKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6
OlBsYXRmb3JtTGF5ZXJJRCYgdmlkZW9MYXllcklEKQotICAgICAgICA6IG1fYXJndW1lbnRzKHZp
ZGVvTGF5ZXJJRCkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc3RkOjp0dXBsZTxjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQmPiYgYXJndW1lbnRzKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgc3RkOjp0dXBsZTxjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQmPiBtX2FyZ3VtZW50czsKLX07Ci0KLSNpZiBQTEFURk9STShNQUMpCi1jbGFzcyBEaWRD
cmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbiB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1
cGxlPElQQzo6TWFjaFBvcnQ+IERlY29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdS
ZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9
Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0
cmluZ1JlZmVyZW5jZSgiRGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb24iKTsgfQotICAgIHN0
YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgRGlkQ3JlYXRl
V2ViUHJvY2Vzc0Nvbm5lY3Rpb24oY29uc3QgSVBDOjpNYWNoUG9ydCYgY29ubmVjdGlvbklkZW50
aWZpZXIpCi0gICAgICAgIDogbV9hcmd1bWVudHMoY29ubmVjdGlvbklkZW50aWZpZXIpCi0gICAg
ewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29uc3QgSVBDOjpNYWNoUG9ydCY+JiBh
cmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IElQQzo6TWFjaFBvcnQmPiBtX2Fy
Z3VtZW50czsKLX07Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLWNsYXNzIEludGVycHJl
dEtleUV2ZW50IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8dWludDMyX3Q+IERl
Y29kZVR5cGU7Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1l
KCkgeyByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3Ry
aW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiSW50ZXJw
cmV0S2V5RXZlbnQiKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IHRydWU7Ci0K
LSAgICB0eXBlZGVmIElQQzo6QXJndW1lbnRzPFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1h
bmQ+Jj4gUmVwbHk7Ci0gICAgZXhwbGljaXQgSW50ZXJwcmV0S2V5RXZlbnQodWludDMyX3QgdHlw
ZSkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyh0eXBlKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25z
dCBzdGQ6OnR1cGxlPHVpbnQzMl90PiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTx1
aW50MzJfdD4gbV9hcmd1bWVudHM7Ci19OwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoREVQUkVDQVRF
RF9GRUFUVVJFKQotY2xhc3MgRGVwcmVjYXRlZE9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgdHlw
ZWRlZiBzdGQ6OnR1cGxlPElQQzo6RHVtbXlUeXBlPiBEZWNvZGVUeXBlOwotCi0gICAgc3RhdGlj
IElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsgcmV0dXJuIG1lc3NhZ2VSZWNl
aXZlck5hbWUoKTsgfQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyBy
ZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIkRlcHJlY2F0ZWRPcGVyYXRpb24iKTsgfQotICAg
IHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgRGVwcmVj
YXRlZE9wZXJhdGlvbihjb25zdCBJUEM6OkR1bW15VHlwZSYgZHVtbXkpCi0gICAgICAgIDogbV9h
cmd1bWVudHMoZHVtbXkpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6dHVwbGU8Y29u
c3QgSVBDOjpEdW1teVR5cGUmPiYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp0dXBsZTxjb25z
dCBJUEM6OkR1bW15VHlwZSY+IG1fYXJndW1lbnRzOwotfTsKLSNlbmRpZgotCi0jaWYgRU5BQkxF
KEVYUEVSSU1FTlRBTF9GRUFUVVJFKQotY2xhc3MgRXhwZXJpbWVudGFsT3BlcmF0aW9uIHsKLXB1
YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8SVBDOjpEdW1teVR5cGU+IERlY29kZVR5cGU7
Ci0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyByZXR1
cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9Ci0gICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJl
bmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmluZ1JlZmVyZW5jZSgiRXhwZXJpbWVudGFsT3Bl
cmF0aW9uIik7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAg
IGV4cGxpY2l0IEV4cGVyaW1lbnRhbE9wZXJhdGlvbihjb25zdCBJUEM6OkR1bW15VHlwZSYgZHVt
bXkpCi0gICAgICAgIDogbV9hcmd1bWVudHMoZHVtbXkpCi0gICAgewotICAgIH0KLQotICAgIGNv
bnN0IHN0ZDo6dHVwbGU8Y29uc3QgSVBDOjpEdW1teVR5cGUmPiYgYXJndW1lbnRzKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgc3RkOjp0dXBsZTxjb25zdCBJUEM6OkR1bW15VHlwZSY+IG1fYXJndW1lbnRzOwotfTsKLSNl
bmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJQYWdlCi19IC8vIG5hbWVzcGFjZSBNZXNzYWdlcwot
Ci0jZW5kaWYgLy8gKEVOQUJMRShXRUJLSVQyKSAmJiAoTkVTVEVEX01BU1RFUl9DT05ESVRJT04g
fHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKQotCi0jZW5kaWYgLy8gV2ViUGFnZU1lc3NhZ2Vz
X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9NZXNzYWdlc1N1cGVyY2xh
c3MtZXhwZWN0ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtp
dDIvTWVzc2FnZXNTdXBlcmNsYXNzLWV4cGVjdGVkLmgJKHJldmlzaW9uIDE3MzQ5MSkKKysrIFNv
dXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9NZXNzYWdlc1N1cGVyY2xhc3MtZXhwZWN0ZWQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
LSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
V2ViUGFnZU1lc3NhZ2VzX2gKLSNkZWZpbmUgV2ViUGFnZU1lc3NhZ2VzX2gKLQotI2luY2x1ZGUg
IkFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIk1lc3NhZ2VFbmNvZGVyLmgiCi0jaW5jbHVkZSAiU3Ry
aW5nUmVmZXJlbmNlLmgiCi0KLW5hbWVzcGFjZSBXVEYgewotICAgIGNsYXNzIFN0cmluZzsKLX0K
LQotbmFtZXNwYWNlIE1lc3NhZ2VzIHsKLW5hbWVzcGFjZSBXZWJQYWdlIHsKLQotc3RhdGljIGlu
bGluZSBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lKCkKLXsKLSAgICBy
ZXR1cm4gSVBDOjpTdHJpbmdSZWZlcmVuY2UoIldlYlBhZ2UiKTsKLX0KLQotY2xhc3MgTG9hZFVS
TCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFN0cmluZz4gRGVjb2RlVHlwZTsK
LQotICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJldHVy
biBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH0KLSAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVu
Y2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCJMb2FkVVJMIik7IH0KLSAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIGV4cGxpY2l0IExvYWRV
UkwoY29uc3QgU3RyaW5nJiB1cmwpCi0gICAgICAgIDogbV9hcmd1bWVudHModXJsKQotICAgIHsK
LSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+JiBhcmd1bWVudHMo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+IG1fYXJndW1lbnRzOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViUGFnZQotfSAvLyBuYW1lc3BhY2UgTWVzc2FnZXMKLQotI2VuZGlm
IC8vIFdlYlBhZ2VNZXNzYWdlc19oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtp
dDIvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJr
aXQyL19faW5pdF9fLnB5CShyZXZpc2lvbiAxNzM0OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TY3Jp
cHRzL3dlYmtpdDIvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMjMgKzAsMCBAQAot
IyBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwot
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAot
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jIFJlcXVpcmVkIGZvciBQ
eXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkJKHJldmlzaW9uIDE3MzQ5
MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2MzIgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
Ci0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCByZQotaW1wb3J0IHN5
cwotZnJvbSB3ZWJraXQyIGltcG9ydCBwYXJzZXIKLQotV0FOVFNfQ09OTkVDVElPTl9BVFRSSUJV
VEUgPSAnV2FudHNDb25uZWN0aW9uJwotTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdMZWdh
Y3lSZWNlaXZlcicKLURFTEFZRURfQVRUUklCVVRFID0gJ0RlbGF5ZWQnCi1WQVJJQURJQ19BVFRS
SUJVVEUgPSAnVmFyaWFkaWMnCi0KLV9saWNlbnNlX2hlYWRlciA9ICIiIi8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICog
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
IiIiCi0KLQotZGVmIG1lc3NhZ2VzX2hlYWRlcl9maWxlbmFtZShyZWNlaXZlcik6Ci0gICAgcmV0
dXJuICclc01lc3NhZ2VzLmgnICUgcmVjZWl2ZXIubmFtZQotCi0KLWRlZiBzdXJyb3VuZF9pbl9j
b25kaXRpb24oc3RyaW5nLCBjb25kaXRpb24pOgotICAgIGlmIG5vdCBjb25kaXRpb246Ci0gICAg
ICAgIHJldHVybiBzdHJpbmcKLSAgICByZXR1cm4gJyNpZiAlc1xuJXMjZW5kaWZcbicgJSAoY29u
ZGl0aW9uLCBzdHJpbmcpCi0KLQotZGVmIGZ1bmN0aW9uX3BhcmFtZXRlcl90eXBlKHR5cGUpOgot
ICAgICMgRG9uJ3QgdXNlIHJlZmVyZW5jZXMgZm9yIGJ1aWx0LWluIHR5cGVzLgotICAgIGJ1aWx0
aW5fdHlwZXMgPSBmcm96ZW5zZXQoWwotICAgICAgICAnYm9vbCcsCi0gICAgICAgICdmbG9hdCcs
Ci0gICAgICAgICdkb3VibGUnLAotICAgICAgICAndWludDhfdCcsCi0gICAgICAgICd1aW50MTZf
dCcsCi0gICAgICAgICd1aW50MzJfdCcsCi0gICAgICAgICd1aW50NjRfdCcsCi0gICAgICAgICdp
bnQ4X3QnLAotICAgICAgICAnaW50MTZfdCcsCi0gICAgICAgICdpbnQzMl90JywKLSAgICAgICAg
J2ludDY0X3QnLAotICAgIF0pCi0KLSAgICBpZiB0eXBlIGluIGJ1aWx0aW5fdHlwZXM6Ci0gICAg
ICAgIHJldHVybiB0eXBlCi0KLSAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSB0eXBlCi0KLQotZGVm
IHJlcGx5X3BhcmFtZXRlcl90eXBlKHR5cGUpOgotICAgIHJldHVybiAnJXMmJyAlIHR5cGUKLQot
Ci1kZWYgYXJndW1lbnRzX3R5cGUobWVzc2FnZSk6Ci0gICAgcmV0dXJuICdzdGQ6OnR1cGxlPCVz
PicgJSAnLCAnLmpvaW4oZnVuY3Rpb25fcGFyYW1ldGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpIGZv
ciBwYXJhbWV0ZXIgaW4gbWVzc2FnZS5wYXJhbWV0ZXJzKQotCi0KLWRlZiByZXBseV90eXBlKG1l
c3NhZ2UpOgotICAgIHJldHVybiAnSVBDOjpBcmd1bWVudHM8JXM+JyAlICgnLCAnLmpvaW4ocmVw
bHlfcGFyYW1ldGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpIGZvciBwYXJhbWV0ZXIgaW4gbWVzc2Fn
ZS5yZXBseV9wYXJhbWV0ZXJzKSkKLQotCi1kZWYgZGVjb2RlX3R5cGUobWVzc2FnZSk6Ci0gICAg
cGFyYW1ldGVycyA9IG1lc3NhZ2UucGFyYW1ldGVycwotCi0gICAgaWYgbWVzc2FnZS5oYXNfYXR0
cmlidXRlKFZBUklBRElDX0FUVFJJQlVURSk6Ci0gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0
ZXJzWzotMV0KLQotICAgIHJldHVybiAnc3RkOjp0dXBsZTwlcz4nICUgJywgJy5qb2luKHBhcmFt
ZXRlci50eXBlIGZvciBwYXJhbWV0ZXIgaW4gcGFyYW1ldGVycykKLQotCi1kZWYgbWVzc2FnZV90
b19zdHJ1Y3RfZGVjbGFyYXRpb24obWVzc2FnZSk6Ci0gICAgcmVzdWx0ID0gW10KLSAgICBmdW5j
dGlvbl9wYXJhbWV0ZXJzID0gWyhmdW5jdGlvbl9wYXJhbWV0ZXJfdHlwZSh4LnR5cGUpLCB4Lm5h
bWUpIGZvciB4IGluIG1lc3NhZ2UucGFyYW1ldGVyc10KLSAgICByZXN1bHQuYXBwZW5kKCdjbGFz
cyAlcyB7XG4nICUgbWVzc2FnZS5uYW1lKQotICAgIHJlc3VsdC5hcHBlbmQoJ3B1YmxpYzpcbicp
Ci0gICAgcmVzdWx0LmFwcGVuZCgnICAgIHR5cGVkZWYgJXMgRGVjb2RlVHlwZTtcbicgJSBkZWNv
ZGVfdHlwZShtZXNzYWdlKSkKLSAgICByZXN1bHQuYXBwZW5kKCdcbicpCi0gICAgcmVzdWx0LmFw
cGVuZCgnICAgIHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSByZWNlaXZlck5hbWUoKSB7IHJl
dHVybiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCk7IH1cbicpCi0gICAgcmVzdWx0LmFwcGVuZCgnICAg
IHN0YXRpYyBJUEM6OlN0cmluZ1JlZmVyZW5jZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpTdHJpbmdS
ZWZlcmVuY2UoIiVzIik7IH1cbicgJSBtZXNzYWdlLm5hbWUpCi0gICAgcmVzdWx0LmFwcGVuZCgn
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9ICVzO1xuJyAlICgnZmFsc2UnLCAndHJ1ZScp
W21lc3NhZ2UucmVwbHlfcGFyYW1ldGVycyAhPSBOb25lXSkKLSAgICByZXN1bHQuYXBwZW5kKCdc
bicpCi0gICAgaWYgbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzICE9IE5vbmU6Ci0gICAgICAgIGlm
IG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShERUxBWUVEX0FUVFJJQlVURSk6Ci0gICAgICAgICAgICBz
ZW5kX3BhcmFtZXRlcnMgPSBbKGZ1bmN0aW9uX3BhcmFtZXRlcl90eXBlKHgudHlwZSksIHgubmFt
ZSkgZm9yIHggaW4gbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzXQotICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnICAgIHN0cnVjdCBEZWxheWVkUmVwbHkgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8RGVsYXllZFJlcGx5PiB7XG4nKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAg
ICAgICBEZWxheWVkUmVwbHkoUGFzc1JlZlB0cjxJUEM6OkNvbm5lY3Rpb24+LCBzdGQ6OnVuaXF1
ZV9wdHI8SVBDOjpNZXNzYWdlRW5jb2Rlcj4pO1xuJykKLSAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyAgICAgICAgfkRlbGF5ZWRSZXBseSgpO1xuJykKLSAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJ1xuJykKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgYm9vbCBzZW5kKCVz
KTtcbicgJSAnLCAnLmpvaW4oWycgJy5qb2luKHgpIGZvciB4IGluIHNlbmRfcGFyYW1ldGVyc10p
KQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQotICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICAgIHByaXZhdGU6XG4nKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAg
ICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247XG4nKQotICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNzYWdlRW5jb2Rl
cj4gbV9lbmNvZGVyO1xuJykKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICB9O1xuXG4n
KQotCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICB0eXBlZGVmICVzIFJlcGx5O1xuJyAlIHJl
cGx5X3R5cGUobWVzc2FnZSkpCi0KLSAgICBpZiBsZW4oZnVuY3Rpb25fcGFyYW1ldGVycyk6Ci0g
ICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAlcyVzKCVzKScgJSAobGVuKGZ1bmN0aW9uX3BhcmFt
ZXRlcnMpID09IDEgYW5kICdleHBsaWNpdCAnIG9yICcnLCBtZXNzYWdlLm5hbWUsICcsICcuam9p
bihbJyAnLmpvaW4oeCkgZm9yIHggaW4gZnVuY3Rpb25fcGFyYW1ldGVyc10pKSkKLSAgICAgICAg
cmVzdWx0LmFwcGVuZCgnXG4gICAgICAgIDogbV9hcmd1bWVudHMoJXMpXG4nICUgJywgJy5qb2lu
KFt4WzFdIGZvciB4IGluIGZ1bmN0aW9uX3BhcmFtZXRlcnNdKSkKLSAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICAgIHtcbicpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICB9XG5cbicpCi0gICAg
cmVzdWx0LmFwcGVuZCgnICAgIGNvbnN0ICVzJiBhcmd1bWVudHMoKSBjb25zdFxuJyAlIGFyZ3Vt
ZW50c190eXBlKG1lc3NhZ2UpKQotICAgIHJlc3VsdC5hcHBlbmQoJyAgICB7XG4nKQotICAgIHJl
c3VsdC5hcHBlbmQoJyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzO1xuJykKLSAgICByZXN1bHQu
YXBwZW5kKCcgICAgfVxuJykKLSAgICByZXN1bHQuYXBwZW5kKCdcbicpCi0gICAgcmVzdWx0LmFw
cGVuZCgncHJpdmF0ZTpcbicpCi0gICAgcmVzdWx0LmFwcGVuZCgnICAgICVzIG1fYXJndW1lbnRz
O1xuJyAlIGFyZ3VtZW50c190eXBlKG1lc3NhZ2UpKQotICAgIHJlc3VsdC5hcHBlbmQoJ307XG4n
KQotICAgIHJldHVybiBzdXJyb3VuZF9pbl9jb25kaXRpb24oJycuam9pbihyZXN1bHQpLCBtZXNz
YWdlLmNvbmRpdGlvbikKLQotCi1kZWYgc3RydWN0X29yX2NsYXNzKG5hbWVzcGFjZSwgdHlwZSk6
Ci0gICAgc3RydWN0cyA9IGZyb3plbnNldChbCi0gICAgICAgICdXZWJDb3JlOjpBbmltYXRpb24n
LAotICAgICAgICAnV2ViQ29yZTo6RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudCcsCi0gICAgICAg
ICdXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZScsCi0gICAgICAgICdXZWJDb3JlOjpDb29r
aWUnLAotICAgICAgICAnV2ViQ29yZTo6RmxvYXRQb2ludDNEJywKLSAgICAgICAgJ1dlYkNvcmU6
OkZpbGVDaG9vc2VyU2V0dGluZ3MnLAotICAgICAgICAnV2ViQ29yZTo6R3JhbW1hckRldGFpbCcs
Ci0gICAgICAgICdXZWJDb3JlOjpIaWdobGlnaHQnLAotICAgICAgICAnV2ViQ29yZTo6SURCRGF0
YWJhc2VNZXRhZGF0YScsCi0gICAgICAgICdXZWJDb3JlOjpJREJHZXRSZXN1bHQnLAotICAgICAg
ICAnV2ViQ29yZTo6SURCSW5kZXhNZXRhZGF0YScsCi0gICAgICAgICdXZWJDb3JlOjpJREJLZXlE
YXRhJywKLSAgICAgICAgJ1dlYkNvcmU6OklEQktleVJhbmdlRGF0YScsCi0gICAgICAgICdXZWJD
b3JlOjpJREJPYmplY3RTdG9yZU1ldGFkYXRhJywKLSAgICAgICAgJ1dlYkNvcmU6OklkZW50aXR5
VHJhbnNmb3JtT3BlcmF0aW9uJywKLSAgICAgICAgJ1dlYkNvcmU6OktleXByZXNzQ29tbWFuZCcs
Ci0gICAgICAgICdXZWJDb3JlOjpMZW5ndGgnLAotICAgICAgICAnV2ViQ29yZTo6TWF0cml4VHJh
bnNmb3JtT3BlcmF0aW9uJywKLSAgICAgICAgJ1dlYkNvcmU6Ok1hdHJpeDNEVHJhbnNmb3JtT3Bl
cmF0aW9uJywKLSAgICAgICAgJ1dlYkNvcmU6Ok5vdGlmaWNhdGlvbkNvbnRlbnRzJywKLSAgICAg
ICAgJ1dlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZScsCi0gICAgICAgICdXZWJDb3JlOjpQYXN0ZWJv
YXJkV2ViQ29udGVudCcsCi0gICAgICAgICdXZWJDb3JlOjpQZXJzcGVjdGl2ZVRyYW5zZm9ybU9w
ZXJhdGlvbicsCi0gICAgICAgICdXZWJDb3JlOjpQbHVnaW5JbmZvJywKLSAgICAgICAgJ1dlYkNv
cmU6OlByaW50SW5mbycsCi0gICAgICAgICdXZWJDb3JlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRp
b24nLAotICAgICAgICAnV2ViQ29yZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24nLAotICAgICAg
ICAnV2ViQ29yZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbicsCi0gICAgICAgICdXZWJDb3JlOjpU
aW1pbmdGdW5jdGlvbicsCi0gICAgICAgICdXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCcs
Ci0gICAgICAgICdXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb24nLAotICAgICAgICAnV2ViQ29y
ZTo6VHJhbnNmb3JtT3BlcmF0aW9ucycsCi0gICAgICAgICdXZWJDb3JlOjpUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24nLAotICAgICAgICAnV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMnLAot
ICAgICAgICAnV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJywKLSAgICAgICAgJ1dlYkNvcmU6
OldpbmRvd0ZlYXR1cmVzJywKLSAgICAgICAgJ1dlYktpdDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRp
b24nLAotICAgICAgICAnV2ViS2l0OjpBdHRyaWJ1dGVkU3RyaW5nJywKLSAgICAgICAgJ1dlYktp
dDo6QmFja0ZvcndhcmRMaXN0SXRlbVN0YXRlJywKLSAgICAgICAgJ1dlYktpdDo6Q29sb3JTcGFj
ZURhdGEnLAotICAgICAgICAnV2ViS2l0OjpDb250ZXh0TWVudVN0YXRlJywKLSAgICAgICAgJ1dl
YktpdDo6RGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJywKLSAgICAgICAgJ1dlYktp
dDo6RGljdGlvbmFyeVBvcHVwSW5mbycsCi0gICAgICAgICdXZWJLaXQ6OkRyYXdpbmdBcmVhSW5m
bycsCi0gICAgICAgICdXZWJLaXQ6OkVkaXRpbmdSYW5nZScsCi0gICAgICAgICdXZWJLaXQ6OkVk
aXRvclN0YXRlJywKLSAgICAgICAgJ1dlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9z
aXRpb24nLAotICAgICAgICAnV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YScsCi0gICAgICAg
ICdXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJywKLSAgICAgICAgJ1dl
YktpdDo6UGFnZVN0YXRlJywKLSAgICAgICAgJ1dlYktpdDo6UGxhdGZvcm1Qb3B1cE1lbnVEYXRh
JywKLSAgICAgICAgJ1dlYktpdDo6UGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzJywKLSAgICAgICAg
J1dlYktpdDo6UGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycycsCi0gICAgICAgICdXZWJL
aXQ6OlByaW50SW5mbycsCi0gICAgICAgICdXZWJLaXQ6OlNlY3VyaXR5T3JpZ2luRGF0YScsCi0g
ICAgICAgICdXZWJLaXQ6OlN0YXRpc3RpY3NEYXRhJywKLSAgICAgICAgJ1dlYktpdDo6VGV4dENo
ZWNrZXJTdGF0ZScsCi0gICAgICAgICdXZWJLaXQ6OldLT3B0aW9uSXRlbScsCi0gICAgICAgICdX
ZWJLaXQ6OldlYk5hdmlnYXRpb25EYXRhU3RvcmUnLAotICAgICAgICAnV2ViS2l0OjpXZWJQYWdl
Q3JlYXRpb25QYXJhbWV0ZXJzJywKLSAgICAgICAgJ1dlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9y
ZScsCi0gICAgICAgICdXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMnLAotICAg
ICAgICAnV2ViS2l0OjpXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckhhbmRsZScsCi0gICAgICAgICdX
ZWJLaXQ6OldpbmRvd0dlb21ldHJ5JywKLSAgICBdKQotCi0gICAgcXVhbGlmaWVkX25hbWUgPSAn
JXM6OiVzJyAlIChuYW1lc3BhY2UsIHR5cGUpCi0gICAgaWYgcXVhbGlmaWVkX25hbWUgaW4gc3Ry
dWN0czoKLSAgICAgICAgcmV0dXJuICdzdHJ1Y3QgJXMnICUgdHlwZQotCi0gICAgcmV0dXJuICdj
bGFzcyAlcycgJSB0eXBlCi0KLWRlZiBmb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfbmFtZXNwYWNl
KG5hbWVzcGFjZSwgdHlwZXMpOgotICAgIHJlc3VsdCA9IFtdCi0gICAgcmVzdWx0LmFwcGVuZCgn
bmFtZXNwYWNlICVzIHtcbicgJSBuYW1lc3BhY2UpCi0gICAgcmVzdWx0ICs9IFsnICAgICVzO1xu
JyAlIHN0cnVjdF9vcl9jbGFzcyhuYW1lc3BhY2UsIHgpIGZvciB4IGluIHR5cGVzXQotICAgIHJl
c3VsdC5hcHBlbmQoJ31cbicpCi0gICAgcmV0dXJuICcnLmpvaW4ocmVzdWx0KQotCi0KLWRlZiBm
b3J3YXJkX2RlY2xhcmF0aW9uc19hbmRfaGVhZGVycyhyZWNlaXZlcik6Ci0gICAgdHlwZXNfYnlf
bmFtZXNwYWNlID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3Qoc2V0KQotCi0gICAgaGVhZGVycyA9
IHNldChbCi0gICAgICAgICciQXJndW1lbnRzLmgiJywKLSAgICAgICAgJyJNZXNzYWdlRW5jb2Rl
ci5oIicsCi0gICAgICAgICciU3RyaW5nUmVmZXJlbmNlLmgiJywKLSAgICBdKQotCi0gICAgbm9u
X3RlbXBsYXRlX3d0Zl90eXBlcyA9IGZyb3plbnNldChbCi0gICAgICAgICdTdHJpbmcnLAotICAg
IF0pCi0KLSAgICBmb3IgbWVzc2FnZSBpbiByZWNlaXZlci5tZXNzYWdlczoKLSAgICAgICAgaWYg
bWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzICE9IE5vbmUgYW5kIG1lc3NhZ2UuaGFzX2F0dHJpYnV0
ZShERUxBWUVEX0FUVFJJQlVURSk6Ci0gICAgICAgICAgICBoZWFkZXJzLmFkZCgnPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPicpCi0gICAgICAgICAgICB0eXBlc19ieV9uYW1lc3BhY2VbJ0lQ
QyddLnVwZGF0ZShbJ0Nvbm5lY3Rpb24nXSkKLQotICAgIGZvciBwYXJhbWV0ZXIgaW4gcmVjZWl2
ZXIuaXRlcnBhcmFtZXRlcnMoKToKLSAgICAgICAgdHlwZSA9IHBhcmFtZXRlci50eXBlCi0KLSAg
ICAgICAgaWYgdHlwZS5maW5kKCc8JykgIT0gLTE6Ci0gICAgICAgICAgICAjIERvbid0IGZvcndh
cmQgZGVjbGFyZSBjbGFzcyB0ZW1wbGF0ZXMuCi0gICAgICAgICAgICBoZWFkZXJzLnVwZGF0ZSho
ZWFkZXJzX2Zvcl90eXBlKHR5cGUpKQotICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICBz
cGxpdCA9IHR5cGUuc3BsaXQoJzo6JykKLQotICAgICAgICAjIEhhbmRsZSBXVEYgdHlwZXMgZXZl
biBpZiB0aGUgV1RGOjogcHJlZml4IGlzIG5vdCBnaXZlbgotICAgICAgICBpZiBzcGxpdFswXSBp
biBub25fdGVtcGxhdGVfd3RmX3R5cGVzOgotICAgICAgICAgICAgc3BsaXQuaW5zZXJ0KDAsICdX
VEYnKQotCi0gICAgICAgIGlmIGxlbihzcGxpdCkgPT0gMjoKLSAgICAgICAgICAgIG5hbWVzcGFj
ZSA9IHNwbGl0WzBdCi0gICAgICAgICAgICBpbm5lcl90eXBlID0gc3BsaXRbMV0KLSAgICAgICAg
ICAgIHR5cGVzX2J5X25hbWVzcGFjZVtuYW1lc3BhY2VdLmFkZChpbm5lcl90eXBlKQotICAgICAg
ICBlbGlmIGxlbihzcGxpdCkgPiAyOgotICAgICAgICAgICAgIyBXZSBwcm9iYWJseSBoYXZlIGEg
bmVzdGVkIHN0cnVjdCwgd2hpY2ggbWVhbnMgd2UgY2FuJ3QgZm9yd2FyZCBkZWNsYXJlIGl0Lgot
ICAgICAgICAgICAgIyBJbmNsdWRlIGl0cyBoZWFkZXIgaW5zdGVhZC4KLSAgICAgICAgICAgIGhl
YWRlcnMudXBkYXRlKGhlYWRlcnNfZm9yX3R5cGUodHlwZSkpCi0KLSAgICBmb3J3YXJkX2RlY2xh
cmF0aW9ucyA9ICdcbicuam9pbihbZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX25hbWVzcGFjZShu
YW1lc3BhY2UsIHR5cGVzKSBmb3IgKG5hbWVzcGFjZSwgdHlwZXMpIGluIHNvcnRlZCh0eXBlc19i
eV9uYW1lc3BhY2UuaXRlbXMoKSldKQotICAgIGhlYWRlcnMgPSBbJyNpbmNsdWRlICVzXG4nICUg
aGVhZGVyIGZvciBoZWFkZXIgaW4gc29ydGVkKGhlYWRlcnMpXQotCi0gICAgcmV0dXJuIChmb3J3
YXJkX2RlY2xhcmF0aW9ucywgaGVhZGVycykKLQotZGVmIGdlbmVyYXRlX21lc3NhZ2VzX2hlYWRl
cihmaWxlKToKLSAgICByZWNlaXZlciA9IHBhcnNlci5wYXJzZShmaWxlKQotICAgIGhlYWRlcl9n
dWFyZCA9IG1lc3NhZ2VzX2hlYWRlcl9maWxlbmFtZShyZWNlaXZlcikucmVwbGFjZSgnLicsICdf
JykKLQotICAgIHJlc3VsdCA9IFtdCi0KLSAgICByZXN1bHQuYXBwZW5kKF9saWNlbnNlX2hlYWRl
cikKLQotICAgIHJlc3VsdC5hcHBlbmQoJyNpZm5kZWYgJXNcbicgJSBoZWFkZXJfZ3VhcmQpCi0g
ICAgcmVzdWx0LmFwcGVuZCgnI2RlZmluZSAlc1xuXG4nICUgaGVhZGVyX2d1YXJkKQotCi0gICAg
aWYgcmVjZWl2ZXIuY29uZGl0aW9uOgotICAgICAgICByZXN1bHQuYXBwZW5kKCcjaWYgJXNcblxu
JyAlIHJlY2VpdmVyLmNvbmRpdGlvbikKLQotICAgIGZvcndhcmRfZGVjbGFyYXRpb25zLCBoZWFk
ZXJzID0gZm9yd2FyZF9kZWNsYXJhdGlvbnNfYW5kX2hlYWRlcnMocmVjZWl2ZXIpCi0KLSAgICBy
ZXN1bHQgKz0gaGVhZGVycwotICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKLQotICAgIHJlc3VsdC5h
cHBlbmQoZm9yd2FyZF9kZWNsYXJhdGlvbnMpCi0gICAgcmVzdWx0LmFwcGVuZCgnXG4nKQotCi0g
ICAgcmVzdWx0LmFwcGVuZCgnbmFtZXNwYWNlIE1lc3NhZ2VzIHtcbm5hbWVzcGFjZSAlcyB7XG4n
ICUgcmVjZWl2ZXIubmFtZSkKLSAgICByZXN1bHQuYXBwZW5kKCdcbicpCi0gICAgcmVzdWx0LmFw
cGVuZCgnc3RhdGljIGlubGluZSBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJO
YW1lKClcbicpCi0gICAgcmVzdWx0LmFwcGVuZCgne1xuJykKLSAgICByZXN1bHQuYXBwZW5kKCcg
ICAgcmV0dXJuIElQQzo6U3RyaW5nUmVmZXJlbmNlKCIlcyIpO1xuJyAlIHJlY2VpdmVyLm5hbWUp
Ci0gICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKLSAgICByZXN1bHQuYXBwZW5kKCdcbicpCi0gICAg
cmVzdWx0LmFwcGVuZCgnXG4nLmpvaW4oW21lc3NhZ2VfdG9fc3RydWN0X2RlY2xhcmF0aW9uKHgp
IGZvciB4IGluIHJlY2VpdmVyLm1lc3NhZ2VzXSkpCi0gICAgcmVzdWx0LmFwcGVuZCgnXG4nKQot
ICAgIHJlc3VsdC5hcHBlbmQoJ30gLy8gbmFtZXNwYWNlICVzXG59IC8vIG5hbWVzcGFjZSBNZXNz
YWdlc1xuJyAlIHJlY2VpdmVyLm5hbWUpCi0KLSAgICBpZiByZWNlaXZlci5jb25kaXRpb246Ci0g
ICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xuI2VuZGlmIC8vICVzXG4nICUgcmVjZWl2ZXIuY29uZGl0
aW9uKQotCi0gICAgcmVzdWx0LmFwcGVuZCgnXG4jZW5kaWYgLy8gJXNcbicgJSBoZWFkZXJfZ3Vh
cmQpCi0KLSAgICByZXR1cm4gJycuam9pbihyZXN1bHQpCi0KLQotZGVmIGhhbmRsZXJfZnVuY3Rp
b24ocmVjZWl2ZXIsIG1lc3NhZ2UpOgotICAgIGlmIG1lc3NhZ2UubmFtZS5maW5kKCdVUkwnKSA9
PSAwOgotICAgICAgICByZXR1cm4gJyVzOjolcycgJSAocmVjZWl2ZXIubmFtZSwgJ3VybCcgKyBt
ZXNzYWdlLm5hbWVbMzpdKQotICAgIHJldHVybiAnJXM6OiVzJyAlIChyZWNlaXZlci5uYW1lLCBt
ZXNzYWdlLm5hbWVbMF0ubG93ZXIoKSArIG1lc3NhZ2UubmFtZVsxOl0pCi0KLQotZGVmIGFzeW5j
X21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKToKLSAgICBkaXNwYXRjaF9mdW5j
dGlvbl9hcmdzID0gWydkZWNvZGVyJywgJ3RoaXMnLCAnJiVzJyAlIGhhbmRsZXJfZnVuY3Rpb24o
cmVjZWl2ZXIsIG1lc3NhZ2UpXQotCi0gICAgZGlzcGF0Y2hfZnVuY3Rpb24gPSAnaGFuZGxlTWVz
c2FnZScKLSAgICBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoVkFSSUFESUNfQVRUUklCVVRFKToK
LSAgICAgICAgZGlzcGF0Y2hfZnVuY3Rpb24gKz0gJ1ZhcmlhZGljJwotCi0gICAgaWYgbWVzc2Fn
ZS5oYXNfYXR0cmlidXRlKFdBTlRTX0NPTk5FQ1RJT05fQVRUUklCVVRFKToKLSAgICAgICAgZGlz
cGF0Y2hfZnVuY3Rpb25fYXJncy5pbnNlcnQoMCwgJ2Nvbm5lY3Rpb24nKQotCi0gICAgcmVzdWx0
ID0gW10KLSAgICByZXN1bHQuYXBwZW5kKCcgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9
PSBNZXNzYWdlczo6JXM6OiVzOjpuYW1lKCkpIHtcbicgJSAocmVjZWl2ZXIubmFtZSwgbWVzc2Fn
ZS5uYW1lKSkKLSAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIElQQzo6JXM8TWVzc2FnZXM6OiVz
Ojolcz4oJXMpO1xuJyAlIChkaXNwYXRjaF9mdW5jdGlvbiwgcmVjZWl2ZXIubmFtZSwgbWVzc2Fn
ZS5uYW1lLCAnLCAnLmpvaW4oZGlzcGF0Y2hfZnVuY3Rpb25fYXJncykpKQotICAgIHJlc3VsdC5h
cHBlbmQoJyAgICAgICAgcmV0dXJuO1xuJykKLSAgICByZXN1bHQuYXBwZW5kKCcgICAgfVxuJykK
LSAgICByZXR1cm4gc3Vycm91bmRfaW5fY29uZGl0aW9uKCcnLmpvaW4ocmVzdWx0KSwgbWVzc2Fn
ZS5jb25kaXRpb24pCi0KLQotZGVmIHN5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1l
c3NhZ2UpOgotICAgIGRpc3BhdGNoX2Z1bmN0aW9uID0gJ2hhbmRsZU1lc3NhZ2UnCi0gICAgaWYg
bWVzc2FnZS5oYXNfYXR0cmlidXRlKERFTEFZRURfQVRUUklCVVRFKToKLSAgICAgICAgZGlzcGF0
Y2hfZnVuY3Rpb24gKz0gJ0RlbGF5ZWQnCi0gICAgaWYgbWVzc2FnZS5oYXNfYXR0cmlidXRlKFZB
UklBRElDX0FUVFJJQlVURSk6Ci0gICAgICAgIGRpc3BhdGNoX2Z1bmN0aW9uICs9ICdWYXJpYWRp
YycKLQotICAgIHdhbnRzX2Nvbm5lY3Rpb24gPSBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoREVMQVlF
RF9BVFRSSUJVVEUpIG9yIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShXQU5UU19DT05ORUNUSU9OX0FU
VFJJQlVURSkKLQotICAgIHJlc3VsdCA9IFtdCi0gICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OiVzOjolczo6bmFtZSgpKSB7XG4nICUg
KHJlY2VpdmVyLm5hbWUsIG1lc3NhZ2UubmFtZSkpCi0gICAgcmVzdWx0LmFwcGVuZCgnICAgICAg
ICBJUEM6OiVzPE1lc3NhZ2VzOjolczo6JXM+KCVzZGVjb2RlciwgJXNyZXBseUVuY29kZXIsIHRo
aXMsICYlcyk7XG4nICUgKGRpc3BhdGNoX2Z1bmN0aW9uLCByZWNlaXZlci5uYW1lLCBtZXNzYWdl
Lm5hbWUsICdjb25uZWN0aW9uLCAnIGlmIHdhbnRzX2Nvbm5lY3Rpb24gZWxzZSAnJywgJycgaWYg
bWVzc2FnZS5oYXNfYXR0cmlidXRlKERFTEFZRURfQVRUUklCVVRFKSBlbHNlICcqJywgaGFuZGxl
cl9mdW5jdGlvbihyZWNlaXZlciwgbWVzc2FnZSkpKQotICAgIHJlc3VsdC5hcHBlbmQoJyAgICAg
ICAgcmV0dXJuO1xuJykKLSAgICByZXN1bHQuYXBwZW5kKCcgICAgfVxuJykKLSAgICByZXR1cm4g
c3Vycm91bmRfaW5fY29uZGl0aW9uKCcnLmpvaW4ocmVzdWx0KSwgbWVzc2FnZS5jb25kaXRpb24p
Ci0KLQotZGVmIGNsYXNzX3RlbXBsYXRlX2hlYWRlcnModGVtcGxhdGVfc3RyaW5nKToKLSAgICB0
ZW1wbGF0ZV9zdHJpbmcgPSB0ZW1wbGF0ZV9zdHJpbmcuc3RyaXAoKQotCi0gICAgY2xhc3NfdGVt
cGxhdGVfdHlwZXMgPSB7Ci0gICAgICAgICdWZWN0b3InOiB7J2hlYWRlcnMnOiBbJzx3dGYvVmVj
dG9yLmg+J10sICdhcmd1bWVudF9jb2Rlcl9oZWFkZXJzJzogWyciQXJndW1lbnRDb2RlcnMuaCIn
XX0sCi0gICAgICAgICdIYXNoTWFwJzogeydoZWFkZXJzJzogWyc8d3RmL0hhc2hNYXAuaD4nXSwg
J2FyZ3VtZW50X2NvZGVyX2hlYWRlcnMnOiBbJyJBcmd1bWVudENvZGVycy5oIiddfSwKLSAgICAg
ICAgJ3N0ZDo6cGFpcic6IHsnaGVhZGVycyc6IFsnPHV0aWxpdHk+J10sICdhcmd1bWVudF9jb2Rl
cl9oZWFkZXJzJzogWyciQXJndW1lbnRDb2RlcnMuaCInXX0sCi0gICAgfQotCi0gICAgbWF0Y2gg
PSByZS5tYXRjaCgnKD9QPHRlbXBsYXRlX25hbWU+Lis/KTwoP1A8cGFyYW1ldGVyX3N0cmluZz4u
Kyk+JywgdGVtcGxhdGVfc3RyaW5nKQotICAgIGlmIG5vdCBtYXRjaDoKLSAgICAgICAgcmV0dXJu
IHsnaGVhZGVyX2luZm9zJzpbXSwgJ3R5cGVzJzpbdGVtcGxhdGVfc3RyaW5nXX0KLQotICAgIHRl
bXBsYXRlX25hbWUgPSBtYXRjaC5ncm91cGRpY3QoKVsndGVtcGxhdGVfbmFtZSddCi0gICAgaWYg
dGVtcGxhdGVfbmFtZSBub3QgaW4gY2xhc3NfdGVtcGxhdGVfdHlwZXM6Ci0gICAgICAgIHN5cy5z
dGRlcnIud3JpdGUoIkVycm9yOiBubyBjbGFzcyB0ZW1wbGF0ZSB0eXBlIGlzIGRlZmluZWQgZm9y
ICclcydcbiIgJSAodGVtcGxhdGVfc3RyaW5nKSkKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAg
IGhlYWRlcl9pbmZvcyA9IFtjbGFzc190ZW1wbGF0ZV90eXBlc1t0ZW1wbGF0ZV9uYW1lXV0KLSAg
ICB0eXBlcyA9IFtdCi0KLSAgICBmb3IgcGFyYW1ldGVyIGluIHBhcnNlci5zcGxpdF9wYXJhbWV0
ZXJzX3N0cmluZyhtYXRjaC5ncm91cGRpY3QoKVsncGFyYW1ldGVyX3N0cmluZyddKToKLSAgICAg
ICAgcGFyYW1ldGVyX2hlYWRlcl9pbmZvc19hbmRfdHlwZXMgPSBjbGFzc190ZW1wbGF0ZV9oZWFk
ZXJzKHBhcmFtZXRlcikKLQotICAgICAgICBoZWFkZXJfaW5mb3MgKz0gcGFyYW1ldGVyX2hlYWRl
cl9pbmZvc19hbmRfdHlwZXNbJ2hlYWRlcl9pbmZvcyddOwotICAgICAgICB0eXBlcyArPSBwYXJh
bWV0ZXJfaGVhZGVyX2luZm9zX2FuZF90eXBlc1sndHlwZXMnXQotCi0gICAgcmV0dXJuIHsnaGVh
ZGVyX2luZm9zJzpoZWFkZXJfaW5mb3MsICd0eXBlcyc6dHlwZXN9Ci0KLQotZGVmIGFyZ3VtZW50
X2NvZGVyX2hlYWRlcnNfZm9yX3R5cGUodHlwZSk6Ci0gICAgaGVhZGVyX2luZm9zX2FuZF90eXBl
cyA9IGNsYXNzX3RlbXBsYXRlX2hlYWRlcnModHlwZSkKLQotICAgIHNwZWNpYWxfY2FzZXMgPSB7
Ci0gICAgICAgICdTdHJpbmcnOiAnIkFyZ3VtZW50Q29kZXJzLmgiJywKLSAgICAgICAgJ1dlYktp
dDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXInOiAnIkluamVjdGVkQnVuZGxlVXNl
ck1lc3NhZ2VDb2RlcnMuaCInLAotICAgICAgICAnV2ViS2l0OjpXZWJDb250ZXh0VXNlck1lc3Nh
Z2VFbmNvZGVyJzogJyJXZWJDb250ZXh0VXNlck1lc3NhZ2VDb2RlcnMuaCInLAotICAgICAgICAn
V2ViS2l0OjpTY3JpcHRNZXNzYWdlSGFuZGxlckhhbmRsZSc6ICciV2ViU2NyaXB0TWVzc2FnZUhh
bmRsZXIuaCInLAotICAgIH0KLQotICAgIGhlYWRlcnMgPSBbXQotICAgIGZvciBoZWFkZXJfaW5m
byBpbiBoZWFkZXJfaW5mb3NfYW5kX3R5cGVzWydoZWFkZXJfaW5mb3MnXToKLSAgICAgICAgaGVh
ZGVycyArPSBoZWFkZXJfaW5mb1snYXJndW1lbnRfY29kZXJfaGVhZGVycyddCi0KLSAgICBmb3Ig
dHlwZSBpbiBoZWFkZXJfaW5mb3NfYW5kX3R5cGVzWyd0eXBlcyddOgotICAgICAgICBpZiB0eXBl
IGluIHNwZWNpYWxfY2FzZXM6Ci0gICAgICAgICAgICBoZWFkZXJzLmFwcGVuZChzcGVjaWFsX2Nh
c2VzW3R5cGVdKQotICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICBzcGxpdCA9IHR5cGUu
c3BsaXQoJzo6JykKLSAgICAgICAgaWYgbGVuKHNwbGl0KSA8IDI6Ci0gICAgICAgICAgICBjb250
aW51ZQotICAgICAgICBpZiBzcGxpdFswXSA9PSAnV2ViQ29yZSc6Ci0gICAgICAgICAgICBoZWFk
ZXJzLmFwcGVuZCgnIldlYkNvcmVBcmd1bWVudENvZGVycy5oIicpCi0KLSAgICByZXR1cm4gaGVh
ZGVycwotCi1kZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKLSAgICBoZWFkZXJfaW5mb3NfYW5k
X3R5cGVzID0gY2xhc3NfdGVtcGxhdGVfaGVhZGVycyh0eXBlKQotCi0gICAgc3BlY2lhbF9jYXNl
cyA9IHsKLSAgICAgICAgJ1N0cmluZyc6IFsnPHd0Zi90ZXh0L1dURlN0cmluZy5oPiddLAotICAg
ICAgICAnV2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUnOiBbJzxXZWJDb3JlL0VkaXRvci5o
PiddLAotICAgICAgICAnV2ViQ29yZTo6R3JhbW1hckRldGFpbCc6IFsnPFdlYkNvcmUvVGV4dENo
ZWNrZXJDbGllbnQuaD4nXSwKLSAgICAgICAgJ1dlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRp
b25zJzogWyc8V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmg+J10sCi0gICAgICAgICdX
ZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCc6IFsnPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPidd
LAotICAgICAgICAnV2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kJzogWyc8V2ViQ29yZS9LZXlib2Fy
ZEV2ZW50Lmg+J10sCi0gICAgICAgICdXZWJDb3JlOjpGaWxlQ2hvb3NlclNldHRpbmdzJzogWyc8
V2ViQ29yZS9GaWxlQ2hvb3Nlci5oPiddLAotICAgICAgICAnV2ViQ29yZTo6SGlnaGxpZ2h0Jzog
Wyc8V2ViQ29yZS9JbnNwZWN0b3JPdmVybGF5Lmg+J10sCi0gICAgICAgICdXZWJDb3JlOjpQbHVn
aW5JbmZvJzogWyc8V2ViQ29yZS9QbHVnaW5EYXRhLmg+J10sCi0gICAgICAgICdXZWJDb3JlOjpQ
YXN0ZWJvYXJkSW1hZ2UnOiBbJzxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4nXSwKLSAgICAgICAgJ1dl
YkNvcmU6OlBhc3RlYm9hcmRXZWJDb250ZW50JzogWyc8V2ViQ29yZS9QYXN0ZWJvYXJkLmg+J10s
Ci0gICAgICAgICdXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSc6IFsnPFdlYkNvcmUv
VGV4dENoZWNraW5nLmg+J10sCi0gICAgICAgICdXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQn
OiBbJzxXZWJDb3JlL1RleHRDaGVja2VyQ2xpZW50Lmg+J10sCi0gICAgICAgICdXZWJDb3JlOjpW
aWV3cG9ydEF0dHJpYnV0ZXMnOiBbJzxXZWJDb3JlL1ZpZXdwb3J0QXJndW1lbnRzLmg+J10sCi0g
ICAgICAgICdXZWJLaXQ6OkJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZSc6IFsnIlNlc3Npb25TdGF0
ZS5oIiddLAotICAgICAgICAnV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rl
cic6IFtdLAotICAgICAgICAnV2ViS2l0OjpQYWdlU3RhdGUnOiBbJyJTZXNzaW9uU3RhdGUuaCIn
XSwKLSAgICAgICAgJ1dlYktpdDo6V2ViQ29udGV4dFVzZXJNZXNzYWdlRW5jb2Rlcic6IFtdLAot
ICAgICAgICAnV2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAotICAg
ICAgICAnV2ViS2l0OjpXZWJLZXlib2FyZEV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKLSAgICAg
ICAgJ1dlYktpdDo6V2ViTW91c2VFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCi0gICAgICAgICdX
ZWJLaXQ6OldlYlRvdWNoRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAotICAgICAgICAnV2ViS2l0
OjpXZWJXaGVlbEV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKLSAgICAgICAgJ1dlYktpdDo6V2Vi
U2NyaXB0TWVzc2FnZUhhbmRsZXJIYW5kbGUnOiBbJyJXZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5o
IiddLAotICAgIH0KLQotICAgIGhlYWRlcnMgPSBbXQotICAgIGZvciBoZWFkZXJfaW5mbyBpbiBo
ZWFkZXJfaW5mb3NfYW5kX3R5cGVzWydoZWFkZXJfaW5mb3MnXToKLSAgICAgICAgaGVhZGVycyAr
PSBoZWFkZXJfaW5mb1snaGVhZGVycyddCi0KLSAgICBmb3IgdHlwZSBpbiBoZWFkZXJfaW5mb3Nf
YW5kX3R5cGVzWyd0eXBlcyddOgotICAgICAgICBpZiB0eXBlIGluIHNwZWNpYWxfY2FzZXM6Ci0g
ICAgICAgICAgICBoZWFkZXJzICs9IHNwZWNpYWxfY2FzZXNbdHlwZV0KLSAgICAgICAgICAgIGNv
bnRpbnVlCi0KLSAgICAgICAgIyBXZSBhc3N1bWUgdGhhdCB3ZSBtdXN0IGluY2x1ZGUgYSBoZWFk
ZXIgZm9yIGEgdHlwZSBpZmYgaXQgaGFzIGEgc2NvcGUKLSAgICAgICAgIyByZXNvbHV0aW9uIG9w
ZXJhdG9yICg6OikuCi0gICAgICAgIHNwbGl0ID0gdHlwZS5zcGxpdCgnOjonKQotICAgICAgICBp
ZiBsZW4oc3BsaXQpIDwgMjoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgaWYgc3Bs
aXRbMF0gPT0gJ1dlYktpdCcgb3Igc3BsaXRbMF0gPT0gJ0lQQyc6Ci0gICAgICAgICAgICBoZWFk
ZXJzLmFwcGVuZCgnIiVzLmgiJyAlIHNwbGl0WzFdKQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgaGVhZGVycy5hcHBlbmQoJzwlcy8lcy5oPicgJSB0dXBsZShzcGxpdFswOjJdKSkKLQotICAg
IHJldHVybiBoZWFkZXJzCi0KLWRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIoZmlsZSk6Ci0g
ICAgcmVjZWl2ZXIgPSBwYXJzZXIucGFyc2UoZmlsZSkKLSAgICBoZWFkZXJfY29uZGl0aW9ucyA9
IHsKLSAgICAgICAgJyIlcyInICUgbWVzc2FnZXNfaGVhZGVyX2ZpbGVuYW1lKHJlY2VpdmVyKTog
W05vbmVdLAotICAgICAgICAnIkhhbmRsZU1lc3NhZ2UuaCInOiBbTm9uZV0sCi0gICAgICAgICci
TWVzc2FnZURlY29kZXIuaCInOiBbTm9uZV0sCi0gICAgfQotCi0gICAgdHlwZV9jb25kaXRpb25z
ID0ge30KLSAgICBmb3IgcGFyYW1ldGVyIGluIHJlY2VpdmVyLml0ZXJwYXJhbWV0ZXJzKCk6Ci0g
ICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIudHlwZSBpbiB0eXBlX2NvbmRpdGlvbnM6Ci0gICAgICAg
ICAgICB0eXBlX2NvbmRpdGlvbnNbcGFyYW1ldGVyLnR5cGVdID0gW10KLQotICAgICAgICBpZiBu
b3QgcGFyYW1ldGVyLmNvbmRpdGlvbiBpbiB0eXBlX2NvbmRpdGlvbnNbcGFyYW1ldGVyLnR5cGVd
OgotICAgICAgICAgICAgdHlwZV9jb25kaXRpb25zW3BhcmFtZXRlci50eXBlXS5hcHBlbmQocGFy
YW1ldGVyLmNvbmRpdGlvbikKLQotICAgIGZvciBwYXJhbWV0ZXIgaW4gcmVjZWl2ZXIuaXRlcnBh
cmFtZXRlcnMoKToKLSAgICAgICAgdHlwZSA9IHBhcmFtZXRlci50eXBlCi0gICAgICAgIGNvbmRp
dGlvbnMgPSB0eXBlX2NvbmRpdGlvbnNbdHlwZV0KLQotICAgICAgICBhcmd1bWVudF9lbmNvZGVy
X2hlYWRlcnMgPSBhcmd1bWVudF9jb2Rlcl9oZWFkZXJzX2Zvcl90eXBlKHR5cGUpCi0gICAgICAg
IGlmIGFyZ3VtZW50X2VuY29kZXJfaGVhZGVyczoKLSAgICAgICAgICAgIGZvciBoZWFkZXIgaW4g
YXJndW1lbnRfZW5jb2Rlcl9oZWFkZXJzOgotICAgICAgICAgICAgICAgIGlmIGhlYWRlciBub3Qg
aW4gaGVhZGVyX2NvbmRpdGlvbnM6Ci0gICAgICAgICAgICAgICAgICAgIGhlYWRlcl9jb25kaXRp
b25zW2hlYWRlcl0gPSBbXQotICAgICAgICAgICAgICAgIGhlYWRlcl9jb25kaXRpb25zW2hlYWRl
cl0uZXh0ZW5kKGNvbmRpdGlvbnMpCi0KLSAgICAgICAgdHlwZV9oZWFkZXJzID0gaGVhZGVyc19m
b3JfdHlwZSh0eXBlKQotICAgICAgICBmb3IgaGVhZGVyIGluIHR5cGVfaGVhZGVyczoKLSAgICAg
ICAgICAgIGlmIGhlYWRlciBub3QgaW4gaGVhZGVyX2NvbmRpdGlvbnM6Ci0gICAgICAgICAgICAg
ICAgaGVhZGVyX2NvbmRpdGlvbnNbaGVhZGVyXSA9IFtdCi0gICAgICAgICAgICBoZWFkZXJfY29u
ZGl0aW9uc1toZWFkZXJdLmV4dGVuZChjb25kaXRpb25zKQotCi0gICAgZm9yIG1lc3NhZ2UgaW4g
cmVjZWl2ZXIubWVzc2FnZXM6Ci0gICAgICAgIGlmIG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVycyBp
cyBub3QgTm9uZToKLSAgICAgICAgICAgIGZvciByZXBseV9wYXJhbWV0ZXIgaW4gbWVzc2FnZS5y
ZXBseV9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIHR5cGUgPSByZXBseV9wYXJhbWV0ZXIu
dHlwZQotICAgICAgICAgICAgICAgIGFyZ3VtZW50X2VuY29kZXJfaGVhZGVycyA9IGFyZ3VtZW50
X2NvZGVyX2hlYWRlcnNfZm9yX3R5cGUodHlwZSkKLSAgICAgICAgICAgICAgICBpZiBhcmd1bWVu
dF9lbmNvZGVyX2hlYWRlcnM6Ci0gICAgICAgICAgICAgICAgICAgIGZvciBoZWFkZXIgaW4gYXJn
dW1lbnRfZW5jb2Rlcl9oZWFkZXJzOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgaGVhZGVy
IG5vdCBpbiBoZWFkZXJfY29uZGl0aW9uczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWFkZXJfY29uZGl0aW9uc1toZWFkZXJdID0gW10KLSAgICAgICAgICAgICAgICAgICAgICAgIGhl
YWRlcl9jb25kaXRpb25zW2hlYWRlcl0uYXBwZW5kKG1lc3NhZ2UuY29uZGl0aW9uKQotCi0gICAg
ICAgICAgICAgICAgdHlwZV9oZWFkZXJzID0gaGVhZGVyc19mb3JfdHlwZSh0eXBlKQotICAgICAg
ICAgICAgICAgIGZvciBoZWFkZXIgaW4gdHlwZV9oZWFkZXJzOgotICAgICAgICAgICAgICAgICAg
ICBpZiBoZWFkZXIgbm90IGluIGhlYWRlcl9jb25kaXRpb25zOgotICAgICAgICAgICAgICAgICAg
ICAgICAgaGVhZGVyX2NvbmRpdGlvbnNbaGVhZGVyXSA9IFtdCi0gICAgICAgICAgICAgICAgICAg
IGhlYWRlcl9jb25kaXRpb25zW2hlYWRlcl0uYXBwZW5kKG1lc3NhZ2UuY29uZGl0aW9uKQotCi0K
LSAgICByZXN1bHQgPSBbXQotCi0gICAgcmVzdWx0LmFwcGVuZChfbGljZW5zZV9oZWFkZXIpCi0g
ICAgcmVzdWx0LmFwcGVuZCgnI2luY2x1ZGUgImNvbmZpZy5oIlxuJykKLSAgICByZXN1bHQuYXBw
ZW5kKCdcbicpCi0KLSAgICBpZiByZWNlaXZlci5jb25kaXRpb246Ci0gICAgICAgIHJlc3VsdC5h
cHBlbmQoJyNpZiAlc1xuXG4nICUgcmVjZWl2ZXIuY29uZGl0aW9uKQotCi0gICAgcmVzdWx0LmFw
cGVuZCgnI2luY2x1ZGUgIiVzLmgiXG5cbicgJSByZWNlaXZlci5uYW1lKQotICAgIGZvciBoZWFk
ZXIgaW4gc29ydGVkKGhlYWRlcl9jb25kaXRpb25zKToKLSAgICAgICAgaWYgaGVhZGVyX2NvbmRp
dGlvbnNbaGVhZGVyXSBhbmQgbm90IE5vbmUgaW4gaGVhZGVyX2NvbmRpdGlvbnNbaGVhZGVyXToK
LSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyNpZiAlc1xuJyAlICcgfHwgJy5qb2luKHNldCho
ZWFkZXJfY29uZGl0aW9uc1toZWFkZXJdKSkpCi0gICAgICAgICAgICByZXN1bHQgKz0gWycjaW5j
bHVkZSAlc1xuJyAlIGhlYWRlcl0KLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyNlbmRpZlxu
JykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlc3VsdCArPSBbJyNpbmNsdWRlICVzXG4n
ICUgaGVhZGVyXQotICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKLQotICAgIHN5bmNfZGVsYXllZF9t
ZXNzYWdlcyA9IFtdCi0gICAgZm9yIG1lc3NhZ2UgaW4gcmVjZWl2ZXIubWVzc2FnZXM6Ci0gICAg
ICAgIGlmIG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVycyAhPSBOb25lIGFuZCBtZXNzYWdlLmhhc19h
dHRyaWJ1dGUoREVMQVlFRF9BVFRSSUJVVEUpOgotICAgICAgICAgICAgc3luY19kZWxheWVkX21l
c3NhZ2VzLmFwcGVuZChtZXNzYWdlKQotCi0gICAgaWYgc3luY19kZWxheWVkX21lc3NhZ2VzOgot
ICAgICAgICByZXN1bHQuYXBwZW5kKCduYW1lc3BhY2UgTWVzc2FnZXMge1xuXG5uYW1lc3BhY2Ug
JXMge1xuXG4nICUgcmVjZWl2ZXIubmFtZSkKLQotICAgICAgICBmb3IgbWVzc2FnZSBpbiBzeW5j
X2RlbGF5ZWRfbWVzc2FnZXM6Ci0gICAgICAgICAgICBzZW5kX3BhcmFtZXRlcnMgPSBbKGZ1bmN0
aW9uX3BhcmFtZXRlcl90eXBlKHgudHlwZSksIHgubmFtZSkgZm9yIHggaW4gbWVzc2FnZS5yZXBs
eV9wYXJhbWV0ZXJzXQotCi0gICAgICAgICAgICBpZiBtZXNzYWdlLmNvbmRpdGlvbjoKLSAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcjaWYgJXNcblxuJyAlIG1lc3NhZ2UuY29uZGl0aW9u
KQotCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCclczo6RGVsYXllZFJlcGx5OjpEZWxheWVk
UmVwbHkoUGFzc1JlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24sIHN0ZDo6dW5pcXVl
X3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiBlbmNvZGVyKVxuJyAlIG1lc3NhZ2UubmFtZSkKLSAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICA6IG1fY29ubmVjdGlvbihjb25uZWN0aW9uKVxu
JykKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAsIG1fZW5jb2RlcihXVEY6Om1vdmUo
ZW5jb2RlcikpXG4nKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgne1xuJykKLSAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJ31cbicpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCdcbicp
Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCclczo6RGVsYXllZFJlcGx5Ojp+RGVsYXllZFJl
cGx5KClcbicgJSBtZXNzYWdlLm5hbWUpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4n
KQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIEFTU0VSVCghbV9jb25uZWN0aW9uKTtc
bicpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCd9XG4nKQotICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnXG4nKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnYm9vbCAlczo6RGVsYXll
ZFJlcGx5OjpzZW5kKCVzKVxuJyAlIChtZXNzYWdlLm5hbWUsICcsICcuam9pbihbJyAnLmpvaW4o
eCkgZm9yIHggaW4gc2VuZF9wYXJhbWV0ZXJzXSkpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgne1xuJykKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBBU1NFUlQobV9lbmNvZGVy
KTtcbicpCi0gICAgICAgICAgICByZXN1bHQgKz0gWycgICAgKm1fZW5jb2RlciA8PCAlcztcbicg
JSB4Lm5hbWUgZm9yIHggaW4gbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzXQotICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICAgIGJvb2wgX3Jlc3VsdCA9IG1fY29ubmVjdGlvbi0+c2VuZFN5bmNS
ZXBseShXVEY6Om1vdmUobV9lbmNvZGVyKSk7XG4nKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICAgIG1fY29ubmVjdGlvbiA9IG51bGxwdHI7XG4nKQotICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICAgIHJldHVybiBfcmVzdWx0O1xuJykKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
J31cbicpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCdcbicpCi0KLSAgICAgICAgICAgIGlm
IG1lc3NhZ2UuY29uZGl0aW9uOgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyNlbmRp
ZlxuXG4nKQotCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoJ30gLy8gbmFtZXNwYWNlICVzXG5cbn0g
Ly8gbmFtZXNwYWNlIE1lc3NhZ2VzXG5cbicgJSByZWNlaXZlci5uYW1lKQotCi0gICAgcmVzdWx0
LmFwcGVuZCgnbmFtZXNwYWNlIFdlYktpdCB7XG5cbicpCi0KLSAgICBhc3luY19tZXNzYWdlcyA9
IFtdCi0gICAgc3luY19tZXNzYWdlcyA9IFtdCi0gICAgZm9yIG1lc3NhZ2UgaW4gcmVjZWl2ZXIu
bWVzc2FnZXM6Ci0gICAgICAgIGlmIG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVycyBpcyBub3QgTm9u
ZToKLSAgICAgICAgICAgIHN5bmNfbWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBhc3luY19tZXNzYWdlcy5hcHBlbmQobWVzc2FnZSkKLQotICAgIGlm
IGFzeW5jX21lc3NhZ2VzOgotICAgICAgICBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FD
WV9SRUNFSVZFUl9BVFRSSUJVVEUpOgotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAl
czo6ZGlkUmVjZWl2ZSVzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qLCBJUEM6Ok1lc3NhZ2VEZWNv
ZGVyJiBkZWNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lKSkKLSAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmVN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYg
ZGVjb2RlcilcbicgJSAocmVjZWl2ZXIubmFtZSkpCi0KLSAgICAgICAgcmVzdWx0LmFwcGVuZCgn
e1xuJykKLSAgICAgICAgcmVzdWx0ICs9IFthc3luY19tZXNzYWdlX3N0YXRlbWVudChyZWNlaXZl
ciwgbWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gYXN5bmNfbWVzc2FnZXNdCi0gICAgICAgIGlmIChy
ZWNlaXZlci5zdXBlcmNsYXNzKToKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAlczo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7XG4nICUgKHJlY2VpdmVyLnN1
cGVyY2xhc3MpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgbm90IHJlY2VpdmVyLmhh
c19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSk6Ci0gICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTtcbicpCi0gICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKGRlY29kZXIpO1xuJykKLSAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTtcbicpCi0gICAg
ICAgIHJlc3VsdC5hcHBlbmQoJ31cbicpCi0KLSAgICBpZiBzeW5jX21lc3NhZ2VzOgotICAgICAg
ICByZXN1bHQuYXBwZW5kKCdcbicpCi0gICAgICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUo
TEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSk6Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCd2
b2lkICVzOjpkaWRSZWNlaXZlU3luYyVzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qJXMsIElQQzo6
TWVzc2FnZURlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNv
ZGVyPiYgcmVwbHlFbmNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lLCAn
IGNvbm5lY3Rpb24nIGlmIHN5bmNfZGVsYXllZF9tZXNzYWdlcyBlbHNlICcnKSkKLSAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmVTeW5j
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIElQQzo6TWVzc2FnZURlY29kZXIm
IGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYgcmVwbHlFbmNv
ZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgne1xuJykK
LSAgICAgICAgcmVzdWx0ICs9IFtzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNz
YWdlKSBmb3IgbWVzc2FnZSBpbiBzeW5jX21lc3NhZ2VzXQotICAgICAgICBpZiBub3QgcmVjZWl2
ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFKToKLSAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7XG4nKQotICAgICAg
ICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKGRlY29kZXIpO1xuJykKLSAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShyZXBseUVuY29kZXIpO1xuJykKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpO1xuJykKLSAgICAgICAg
cmVzdWx0LmFwcGVuZCgnfVxuJykKLQotICAgIHJlc3VsdC5hcHBlbmQoJ1xufSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0XG4nKQotCi0gICAgaWYgcmVjZWl2ZXIuY29uZGl0aW9uOgotICAgICAgICByZXN1
bHQuYXBwZW5kKCdcbiNlbmRpZiAvLyAlc1xuJyAlIHJlY2VpdmVyLmNvbmRpdGlvbikKLQotICAg
IHJldHVybiAnJy5qb2luKHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Vi
a2l0Mi9tZXNzYWdlc191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9T
Y3JpcHRzL3dlYmtpdDIvbWVzc2FnZXNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDE3MzQ5MSkKKysr
IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlc191bml0dGVzdC5weQkod29y
a2luZyBjb3B5KQpAQCAtMSwzNTcgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0j
IGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0j
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotZnJvbSBTdHJpbmdJTyBp
bXBvcnQgU3RyaW5nSU8KLQotaW1wb3J0IG1lc3NhZ2VzCi1pbXBvcnQgcGFyc2VyCi0KLXByaW50
IG9zLmdldGN3ZCgpCi0KLXNjcmlwdF9kaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0
aC5yZWFscGF0aChfX2ZpbGVfXykpCi0KLXdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2NyaXB0X2Rp
cmVjdG9yeSwgJ3Rlc3QtbWVzc2FnZXMuaW4nKSkgYXMgZmlsZToKLSAgICBfbWVzc2FnZXNfZmls
ZV9jb250ZW50cyA9IGZpbGUucmVhZCgpCi0KLXdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2NyaXB0
X2RpcmVjdG9yeSwgJ3Rlc3QtbGVnYWN5LW1lc3NhZ2VzLmluJykpIGFzIGZpbGU6Ci0gICAgX2xl
Z2FjeV9tZXNzYWdlc19maWxlX2NvbnRlbnRzID0gZmlsZS5yZWFkKCkKLQotd2l0aCBvcGVuKG9z
LnBhdGguam9pbihzY3JpcHRfZGlyZWN0b3J5LCAndGVzdC1zdXBlcmNsYXNzLW1lc3NhZ2VzLmlu
JykpIGFzIGZpbGU6Ci0gICAgX3N1cGVyY2xhc3NfbWVzc2FnZXNfZmlsZV9jb250ZW50cyA9IGZp
bGUucmVhZCgpCi0KLQotd2l0aCBvcGVuKG9zLnBhdGguam9pbihzY3JpcHRfZGlyZWN0b3J5LCAn
TWVzc2FnZXMtZXhwZWN0ZWQuaCcpKSBhcyBmaWxlOgotICAgIF9leHBlY3RlZF9yZWNlaXZlcl9o
ZWFkZXIgPSBmaWxlLnJlYWQoKQotCi13aXRoIG9wZW4ob3MucGF0aC5qb2luKHNjcmlwdF9kaXJl
Y3RvcnksICdMZWdhY3lNZXNzYWdlcy1leHBlY3RlZC5oJykpIGFzIGZpbGU6Ci0gICAgX2V4cGVj
dGVkX2xlZ2FjeV9yZWNlaXZlcl9oZWFkZXIgPSBmaWxlLnJlYWQoKQotCi13aXRoIG9wZW4ob3Mu
cGF0aC5qb2luKHNjcmlwdF9kaXJlY3RvcnksICdNZXNzYWdlc1N1cGVyY2xhc3MtZXhwZWN0ZWQu
aCcpKSBhcyBmaWxlOgotICAgIF9leHBlY3RlZF9zdXBlcmNsYXNzX3JlY2VpdmVyX2hlYWRlciA9
IGZpbGUucmVhZCgpCi0gICAgCi0KLXdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2NyaXB0X2RpcmVj
dG9yeSwgJ01lc3NhZ2VSZWNlaXZlci1leHBlY3RlZC5jcHAnKSkgYXMgZmlsZToKLSAgICBfZXhw
ZWN0ZWRfcmVjZWl2ZXJfaW1wbGVtZW50YXRpb24gPSBmaWxlLnJlYWQoKQotCi13aXRoIG9wZW4o
b3MucGF0aC5qb2luKHNjcmlwdF9kaXJlY3RvcnksICdMZWdhY3lNZXNzYWdlUmVjZWl2ZXItZXhw
ZWN0ZWQuY3BwJykpIGFzIGZpbGU6Ci0gICAgX2V4cGVjdGVkX2xlZ2FjeV9yZWNlaXZlcl9pbXBs
ZW1lbnRhdGlvbiA9IGZpbGUucmVhZCgpCi0KLXdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2NyaXB0
X2RpcmVjdG9yeSwgJ01lc3NhZ2VSZWNlaXZlclN1cGVyY2xhc3MtZXhwZWN0ZWQuY3BwJykpIGFz
IGZpbGU6Ci0gICAgX2V4cGVjdGVkX3N1cGVyY2xhc3NfcmVjZWl2ZXJfaW1wbGVtZW50YXRpb24g
PSBmaWxlLnJlYWQoKQotCi1fZXhwZWN0ZWRfcmVzdWx0cyA9IHsKLSAgICAnbmFtZSc6ICdXZWJQ
YWdlJywKLSAgICAnY29uZGl0aW9ucyc6ICgnKEVOQUJMRShXRUJLSVQyKSAmJiAoTkVTVEVEX01B
U1RFUl9DT05ESVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKScpLAotICAgICdtZXNz
YWdlcyc6ICgKLSAgICAgICAgewotICAgICAgICAgICAgJ25hbWUnOiAnTG9hZFVSTCcsCi0gICAg
ICAgICAgICAncGFyYW1ldGVycyc6ICgKLSAgICAgICAgICAgICAgICAoJ1N0cmluZycsICd1cmwn
KSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IChOb25lKSwKLSAg
ICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgJ25hbWUnOiAnTG9hZFNvbWV0aGluZycs
Ci0gICAgICAgICAgICAncGFyYW1ldGVycyc6ICgKLSAgICAgICAgICAgICAgICAoJ1N0cmluZycs
ICd1cmwnKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6ICgnRU5B
QkxFKFRPVUNIX0VWRU5UUyknKSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAg
J25hbWUnOiAnVG91Y2hFdmVudCcsCi0gICAgICAgICAgICAncGFyYW1ldGVycyc6ICgKLSAgICAg
ICAgICAgICAgICAoJ1dlYktpdDo6V2ViVG91Y2hFdmVudCcsICdldmVudCcpLAotICAgICAgICAg
ICAgKSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogKCcoRU5BQkxFKFRPVUNIX0VWRU5UUykg
JiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiB8fCBTT01FX09USEVSX01FU1NBR0VfQ09ORElU
SU9OKSknKSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgJ25hbWUnOiAnQWRk
RXZlbnQnLAotICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAoCi0gICAgICAgICAgICAgICAgKCdX
ZWJLaXQ6OldlYlRvdWNoRXZlbnQnLCAnZXZlbnQnKSwKLSAgICAgICAgICAgICksCi0gICAgICAg
ICAgICAnY29uZGl0aW9ucyc6ICgnKEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIChORVNURURfTUVT
U0FHRV9DT05ESVRJT04gJiYgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTikpJyksCi0gICAg
ICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICduYW1lJzogJ0xvYWRTb21ldGhpbmdFbHNl
JywKLSAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogKAotICAgICAgICAgICAgICAgICgnU3RyaW5n
JywgJ3VybCcpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogKCdF
TkFCTEUoVE9VQ0hfRVZFTlRTKScpLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAg
ICAnbmFtZSc6ICdEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24nLAotICAgICAgICAgICAgJ3BhcmFt
ZXRlcnMnOiAoCi0gICAgICAgICAgICAgICAgKCd1aW50NjRfdCcsICdmcmFtZUlEJyksCi0gICAg
ICAgICAgICAgICAgKCd1aW50NjRfdCcsICdsaXN0ZW5lcklEJyksCi0gICAgICAgICAgICAgICAg
KCd1aW50MzJfdCcsICdwb2xpY3lBY3Rpb24nKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAg
ICAnY29uZGl0aW9ucyc6IChOb25lKSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAg
ICAgJ25hbWUnOiAnQ2xvc2UnLAotICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAoKSwKLSAgICAg
ICAgICAgICdjb25kaXRpb25zJzogKE5vbmUpLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAg
ICAgICAgICAnbmFtZSc6ICdQcmVmZXJlbmNlc0RpZENoYW5nZScsCi0gICAgICAgICAgICAncGFy
YW1ldGVycyc6ICgKLSAgICAgICAgICAgICAgICAoJ1dlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9y
ZScsICdzdG9yZScpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzog
KE5vbmUpLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAnbmFtZSc6ICdTZW5k
RG91YmxlQW5kRmxvYXQnLAotICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAoCi0gICAgICAgICAg
ICAgICAgKCdkb3VibGUnLCAnZCcpLAotICAgICAgICAgICAgICAgICgnZmxvYXQnLCAnZicpLAot
ICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogKE5vbmUpLAotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAnbmFtZSc6ICdTZW5kSW50cycsCi0gICAgICAg
ICAgICAncGFyYW1ldGVycyc6ICgKLSAgICAgICAgICAgICAgICAoJ1ZlY3Rvcjx1aW50NjRfdD4n
LCAnaW50cycpLAotICAgICAgICAgICAgICAgICgnVmVjdG9yPFZlY3Rvcjx1aW50NjRfdD4+Jywg
J2ludFZlY3RvcnMnKQotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzog
KE5vbmUpLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAnbmFtZSc6ICdDcmVh
dGVQbHVnaW4nLAotICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAoCi0gICAgICAgICAgICAgICAg
KCd1aW50NjRfdCcsICdwbHVnaW5JbnN0YW5jZUlEJyksCi0gICAgICAgICAgICAgICAgKCdXZWJL
aXQ6OlBsdWdpbjo6UGFyYW1ldGVycycsICdwYXJhbWV0ZXJzJykKLSAgICAgICAgICAgICksCi0g
ICAgICAgICAgICAncmVwbHlfcGFyYW1ldGVycyc6ICgKLSAgICAgICAgICAgICAgICAoJ2Jvb2wn
LCAncmVzdWx0JyksCi0gICAgICAgICAgICApLAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiAo
Tm9uZSksCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICduYW1lJzogJ1J1bkph
dmFTY3JpcHRBbGVydCcsCi0gICAgICAgICAgICAncGFyYW1ldGVycyc6ICgKLSAgICAgICAgICAg
ICAgICAoJ3VpbnQ2NF90JywgJ2ZyYW1lSUQnKSwKLSAgICAgICAgICAgICAgICAoJ1N0cmluZycs
ICdtZXNzYWdlJykKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAncmVwbHlfcGFyYW1ldGVy
cyc6ICgpLAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiAoTm9uZSksCi0gICAgICAgIH0sCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICduYW1lJzogJ0dldFBsdWdpbnMnLAotICAgICAgICAgICAg
J3BhcmFtZXRlcnMnOiAoCi0gICAgICAgICAgICAgICAgKCdib29sJywgJ3JlZnJlc2gnKSwKLSAg
ICAgICAgICAgICksCi0gICAgICAgICAgICAncmVwbHlfcGFyYW1ldGVycyc6ICgKLSAgICAgICAg
ICAgICAgICAoJ1ZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPicsICdwbHVnaW5zJyksCi0gICAg
ICAgICAgICApLAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiAoTm9uZSksCi0gICAgICAgIH0s
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICduYW1lJzogJ0dldFBsdWdpblByb2Nlc3NDb25uZWN0
aW9uJywKLSAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogKAotICAgICAgICAgICAgICAgICgnU3Ry
aW5nJywgJ3BsdWdpblBhdGgnKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAncmVwbHlf
cGFyYW1ldGVycyc6ICgKLSAgICAgICAgICAgICAgICAoJ0lQQzo6Q29ubmVjdGlvbjo6SGFuZGxl
JywgJ2Nvbm5lY3Rpb25IYW5kbGUnKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAnY29u
ZGl0aW9ucyc6IChOb25lKSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgJ25h
bWUnOiAnVGVzdE11bHRpcGxlQXR0cmlidXRlcycsCi0gICAgICAgICAgICAncGFyYW1ldGVycyc6
ICgKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAncmVwbHlfcGFyYW1ldGVycyc6ICgKLSAg
ICAgICAgICAgICksCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IChOb25lKSwKLSAgICAgICAg
fSwKLSAgICAgICAgewotICAgICAgICAgICAgJ25hbWUnOiAnVGVzdFBhcmFtZXRlckF0dHJpYnV0
ZXMnLAotICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAoCi0gICAgICAgICAgICAgICAgKCd1aW50
NjRfdCcsICdmb28nLCAoJ0F0dHJpYnV0ZU9uZScsICdBdHRyaWJ1dGVUd28nKSksCi0gICAgICAg
ICAgICAgICAgKCdkb3VibGUnLCAnYmFyJyksCi0gICAgICAgICAgICAgICAgKCdkb3VibGUnLCAn
YmF6JywgKCdBdHRyaWJ1dGVUaHJlZScsKSksCi0gICAgICAgICAgICApLAotICAgICAgICAgICAg
J2NvbmRpdGlvbnMnOiAoTm9uZSksCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICduYW1lJzogJ1RlbXBsYXRlVGVzdCcsCi0gICAgICAgICAgICAncGFyYW1ldGVycyc6ICgKLSAg
ICAgICAgICAgICAgICAoJ0hhc2hNYXA8U3RyaW5nLCBzdGQ6OnBhaXI8U3RyaW5nLCB1aW50NjRf
dD4+JywgJ2EnKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IChO
b25lKSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgJ25hbWUnOiAnU2V0Vmlk
ZW9MYXllcklEJywKLSAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogKAotICAgICAgICAgICAgICAg
ICgnV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEJywgJ3ZpZGVvTGF5ZXJJ
RCcpLAotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogKE5vbmUpLAot
ICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAnbmFtZSc6ICdEaWRDcmVhdGVXZWJQ
cm9jZXNzQ29ubmVjdGlvbicsCi0gICAgICAgICAgICAncGFyYW1ldGVycyc6ICgKLSAgICAgICAg
ICAgICAgICAoJ0lQQzo6TWFjaFBvcnQnLCAnY29ubmVjdGlvbklkZW50aWZpZXInKSwKLSAgICAg
ICAgICAgICksCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6ICgnUExBVEZPUk0oTUFDKScpLAot
ICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAnbmFtZSc6ICdJbnRlcnByZXRLZXlF
dmVudCcsCi0gICAgICAgICAgICAncGFyYW1ldGVycyc6ICgKLSAgICAgICAgICAgICAgICAoJ3Vp
bnQzMl90JywgJ3R5cGUnKSwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAncmVwbHlfcGFy
YW1ldGVycyc6ICgKLSAgICAgICAgICAgICAgICAoJ1ZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0Nv
bW1hbmQ+JywgJ2NvbW1hbmROYW1lJyksCi0gICAgICAgICAgICApLAotICAgICAgICAgICAgJ2Nv
bmRpdGlvbnMnOiAoJ1BMQVRGT1JNKE1BQyknKSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAg
ICAgICAgICAgJ25hbWUnOiAnRGVwcmVjYXRlZE9wZXJhdGlvbicsCi0gICAgICAgICAgICAncGFy
YW1ldGVycyc6ICgKLSAgICAgICAgICAgICAgICAoJ0lQQzo6RHVtbXlUeXBlJywgJ2R1bW15Jyks
Ci0gICAgICAgICAgICApLAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiAoJ0VOQUJMRShERVBS
RUNBVEVEX0ZFQVRVUkUpJyksCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICdu
YW1lJzogJ0V4cGVyaW1lbnRhbE9wZXJhdGlvbicsCi0gICAgICAgICAgICAncGFyYW1ldGVycyc6
ICgKLSAgICAgICAgICAgICAgICAoJ0lQQzo6RHVtbXlUeXBlJywgJ2R1bW15JyksCi0gICAgICAg
ICAgICApLAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiAoJ0VOQUJMRShFWFBFUklNRU5UQUxf
RkVBVFVSRSknKSwKLSAgICAgICAgfQotICAgICksCi19Ci0KLV9leHBlY3RlZF9zdXBlcmNsYXNz
X3Jlc3VsdHMgPSB7Ci0gICAgJ25hbWUnOiAnV2ViUGFnZScsCi0gICAgJ3N1cGVyY2xhc3MnIDog
J1dlYlBhZ2VCYXNlJywKLSAgICAnY29uZGl0aW9ucyc6IE5vbmUsCi0gICAgJ21lc3NhZ2VzJzog
KAotICAgICAgICB7Ci0gICAgICAgICAgICAnbmFtZSc6ICdMb2FkVVJMJywKLSAgICAgICAgICAg
ICdwYXJhbWV0ZXJzJzogKAotICAgICAgICAgICAgICAgICgnU3RyaW5nJywgJ3VybCcpLAotICAg
ICAgICAgICAgKSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogKE5vbmUpLAotICAgICAgICB9
LAotICAgICksCi19Ci0KLQotY2xhc3MgTWVzc2FnZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
LSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYucmVjZWl2ZXIgPSBwYXJzZXIucGFy
c2UoU3RyaW5nSU8oX21lc3NhZ2VzX2ZpbGVfY29udGVudHMpKQotICAgICAgICBzZWxmLmxlZ2Fj
eV9yZWNlaXZlciA9IHBhcnNlci5wYXJzZShTdHJpbmdJTyhfbGVnYWN5X21lc3NhZ2VzX2ZpbGVf
Y29udGVudHMpKQotICAgICAgICBzZWxmLnN1cGVyY2xhc3NfcmVjZWl2ZXIgPSBwYXJzZXIucGFy
c2UoU3RyaW5nSU8oX3N1cGVyY2xhc3NfbWVzc2FnZXNfZmlsZV9jb250ZW50cykpCi0KLQotY2xh
c3MgUGFyc2luZ1Rlc3QoTWVzc2FnZXNUZXN0KToKLSAgICBkZWYgY2hlY2tfbWVzc2FnZShzZWxm
LCBtZXNzYWdlLCBleHBlY3RlZF9tZXNzYWdlKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
bWVzc2FnZS5uYW1lLCBleHBlY3RlZF9tZXNzYWdlWyduYW1lJ10pCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKGxlbihtZXNzYWdlLnBhcmFtZXRlcnMpLCBsZW4oZXhwZWN0ZWRfbWVzc2FnZVsn
cGFyYW1ldGVycyddKSkKLSAgICAgICAgZm9yIGluZGV4LCBwYXJhbWV0ZXIgaW4gZW51bWVyYXRl
KG1lc3NhZ2UucGFyYW1ldGVycyk6Ci0gICAgICAgICAgICBleHBlY3RlZF9wYXJhbWV0ZXIgPSBl
eHBlY3RlZF9tZXNzYWdlWydwYXJhbWV0ZXJzJ11baW5kZXhdCi0gICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhwYXJhbWV0ZXIudHlwZSwgZXhwZWN0ZWRfcGFyYW1ldGVyWzBdKQotICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyYW1ldGVyLm5hbWUsIGV4cGVjdGVkX3BhcmFtZXRl
clsxXSkKLSAgICAgICAgICAgIGlmIGxlbihleHBlY3RlZF9wYXJhbWV0ZXIpID4gMjoKLSAgICAg
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJhbWV0ZXIuYXR0cmlidXRlcywgZnJvemVu
c2V0KGV4cGVjdGVkX3BhcmFtZXRlclsyXSkpCi0gICAgICAgICAgICAgICAgZm9yIGF0dHJpYnV0
ZSBpbiBleHBlY3RlZF9wYXJhbWV0ZXJbMl06Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShwYXJhbWV0ZXIuaGFzX2F0dHJpYnV0ZShhdHRyaWJ1dGUpKQotICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJhbWV0ZXIuYXR0cmli
dXRlcywgZnJvemVuc2V0KCkpCi0gICAgICAgIGlmIG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVycyAh
PSBOb25lOgotICAgICAgICAgICAgZm9yIGluZGV4LCBwYXJhbWV0ZXIgaW4gZW51bWVyYXRlKG1l
c3NhZ2UucmVwbHlfcGFyYW1ldGVycyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMocGFyYW1ldGVyLnR5cGUsIGV4cGVjdGVkX21lc3NhZ2VbJ3JlcGx5X3BhcmFtZXRlcnMnXVtp
bmRleF1bMF0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyYW1ldGVyLm5h
bWUsIGV4cGVjdGVkX21lc3NhZ2VbJ3JlcGx5X3BhcmFtZXRlcnMnXVtpbmRleF1bMV0pCi0gICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdyZXBseV9wYXJhbWV0ZXJz
JyBpbiBleHBlY3RlZF9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXNzYWdl
LmNvbmRpdGlvbiwgZXhwZWN0ZWRfbWVzc2FnZVsnY29uZGl0aW9ucyddKQotCi0gICAgZGVmIHRl
c3RfcmVjZWl2ZXIoc2VsZik6Ci0gICAgICAgICIiIlJlY2VpdmVyIHNob3VsZCBiZSBwYXJzZWQg
YXMgZXhwZWN0ZWQiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5yZWNlaXZlci5u
YW1lLCBfZXhwZWN0ZWRfcmVzdWx0c1snbmFtZSddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhzZWxmLnJlY2VpdmVyLmNvbmRpdGlvbiwgX2V4cGVjdGVkX3Jlc3VsdHNbJ2NvbmRpdGlvbnMn
XSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHNlbGYucmVjZWl2ZXIubWVzc2FnZXMp
LCBsZW4oX2V4cGVjdGVkX3Jlc3VsdHNbJ21lc3NhZ2VzJ10pKQotICAgICAgICBmb3IgaW5kZXgs
IG1lc3NhZ2UgaW4gZW51bWVyYXRlKHNlbGYucmVjZWl2ZXIubWVzc2FnZXMpOgotICAgICAgICAg
ICAgc2VsZi5jaGVja19tZXNzYWdlKG1lc3NhZ2UsIF9leHBlY3RlZF9yZXN1bHRzWydtZXNzYWdl
cyddW2luZGV4XSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmxlZ2FjeV9yZWNl
aXZlci5uYW1lLCBfZXhwZWN0ZWRfcmVzdWx0c1snbmFtZSddKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhzZWxmLmxlZ2FjeV9yZWNlaXZlci5jb25kaXRpb24sIF9leHBlY3RlZF9yZXN1bHRz
Wydjb25kaXRpb25zJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzZWxmLmxlZ2Fj
eV9yZWNlaXZlci5tZXNzYWdlcyksIGxlbihfZXhwZWN0ZWRfcmVzdWx0c1snbWVzc2FnZXMnXSkp
Ci0gICAgICAgIGZvciBpbmRleCwgbWVzc2FnZSBpbiBlbnVtZXJhdGUoc2VsZi5sZWdhY3lfcmVj
ZWl2ZXIubWVzc2FnZXMpOgotICAgICAgICAgICAgc2VsZi5jaGVja19tZXNzYWdlKG1lc3NhZ2Us
IF9leHBlY3RlZF9yZXN1bHRzWydtZXNzYWdlcyddW2luZGV4XSkKLQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhzZWxmLnN1cGVyY2xhc3NfcmVjZWl2ZXIubmFtZSwgX2V4cGVjdGVkX3N1cGVy
Y2xhc3NfcmVzdWx0c1snbmFtZSddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnN1
cGVyY2xhc3NfcmVjZWl2ZXIuc3VwZXJjbGFzcywgX2V4cGVjdGVkX3N1cGVyY2xhc3NfcmVzdWx0
c1snc3VwZXJjbGFzcyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oc2VsZi5zdXBl
cmNsYXNzX3JlY2VpdmVyLm1lc3NhZ2VzKSwgbGVuKF9leHBlY3RlZF9zdXBlcmNsYXNzX3Jlc3Vs
dHNbJ21lc3NhZ2VzJ10pKQotICAgICAgICBmb3IgaW5kZXgsIG1lc3NhZ2UgaW4gZW51bWVyYXRl
KHNlbGYuc3VwZXJjbGFzc19yZWNlaXZlci5tZXNzYWdlcyk6Ci0gICAgICAgICAgICBzZWxmLmNo
ZWNrX21lc3NhZ2UobWVzc2FnZSwgX2V4cGVjdGVkX3N1cGVyY2xhc3NfcmVzdWx0c1snbWVzc2Fn
ZXMnXVtpbmRleF0pCi0KLQotCi1jbGFzcyBHZW5lcmF0ZWRGaWxlQ29udGVudHNUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgYXNzZXJ0R2VuZXJhdGVkRmlsZUNvbnRlbnRzRXF1YWwo
c2VsZiwgZmlyc3QsIHNlY29uZCk6Ci0gICAgICAgIGZpcnN0X2xpc3QgPSBmaXJzdC5zcGxpdCgn
XG4nKQotICAgICAgICBzZWNvbmRfbGlzdCA9IHNlY29uZC5zcGxpdCgnXG4nKQotCi0gICAgICAg
IGZvciBpbmRleCwgZmlyc3RfbGluZSBpbiBlbnVtZXJhdGUoZmlyc3RfbGlzdCk6Ci0gICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhmaXJzdF9saW5lLCBzZWNvbmRfbGlzdFtpbmRleF0pCi0K
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGZpcnN0X2xpc3QpLCBsZW4oc2Vjb25kX2xp
c3QpKQotCi0KLWNsYXNzIEhlYWRlclRlc3QoR2VuZXJhdGVkRmlsZUNvbnRlbnRzVGVzdCk6Ci0g
ICAgZGVmIHRlc3RfaGVhZGVyKHNlbGYpOgotICAgICAgICBmaWxlX2NvbnRlbnRzID0gbWVzc2Fn
ZXMuZ2VuZXJhdGVfbWVzc2FnZXNfaGVhZGVyKFN0cmluZ0lPKF9tZXNzYWdlc19maWxlX2NvbnRl
bnRzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRHZW5lcmF0ZWRGaWxlQ29udGVudHNFcXVhbChmaWxl
X2NvbnRlbnRzLCBfZXhwZWN0ZWRfcmVjZWl2ZXJfaGVhZGVyKQotCi0gICAgICAgIGxlZ2FjeV9m
aWxlX2NvbnRlbnRzID0gbWVzc2FnZXMuZ2VuZXJhdGVfbWVzc2FnZXNfaGVhZGVyKFN0cmluZ0lP
KF9sZWdhY3lfbWVzc2FnZXNfZmlsZV9jb250ZW50cykpCi0gICAgICAgIHNlbGYuYXNzZXJ0R2Vu
ZXJhdGVkRmlsZUNvbnRlbnRzRXF1YWwobGVnYWN5X2ZpbGVfY29udGVudHMsIF9leHBlY3RlZF9s
ZWdhY3lfcmVjZWl2ZXJfaGVhZGVyKQotCi0gICAgICAgIHN1cGVyY2xhc3NfZmlsZV9jb250ZW50
cyA9IG1lc3NhZ2VzLmdlbmVyYXRlX21lc3NhZ2VzX2hlYWRlcihTdHJpbmdJTyhfc3VwZXJjbGFz
c19tZXNzYWdlc19maWxlX2NvbnRlbnRzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRHZW5lcmF0ZWRG
aWxlQ29udGVudHNFcXVhbChzdXBlcmNsYXNzX2ZpbGVfY29udGVudHMsIF9leHBlY3RlZF9zdXBl
cmNsYXNzX3JlY2VpdmVyX2hlYWRlcikKLQotCi1jbGFzcyBSZWNlaXZlckltcGxlbWVudGF0aW9u
VGVzdChHZW5lcmF0ZWRGaWxlQ29udGVudHNUZXN0KToKLSAgICBkZWYgdGVzdF9yZWNlaXZlcl9p
bXBsZW1lbnRhdGlvbihzZWxmKToKLSAgICAgICAgZmlsZV9jb250ZW50cyA9IG1lc3NhZ2VzLmdl
bmVyYXRlX21lc3NhZ2VfaGFuZGxlcihTdHJpbmdJTyhfbWVzc2FnZXNfZmlsZV9jb250ZW50cykp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0R2VuZXJhdGVkRmlsZUNvbnRlbnRzRXF1YWwoZmlsZV9jb250
ZW50cywgX2V4cGVjdGVkX3JlY2VpdmVyX2ltcGxlbWVudGF0aW9uKQotCi0gICAgICAgIGxlZ2Fj
eV9maWxlX2NvbnRlbnRzID0gbWVzc2FnZXMuZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKFN0cmlu
Z0lPKF9sZWdhY3lfbWVzc2FnZXNfZmlsZV9jb250ZW50cykpCi0gICAgICAgIHNlbGYuYXNzZXJ0
R2VuZXJhdGVkRmlsZUNvbnRlbnRzRXF1YWwobGVnYWN5X2ZpbGVfY29udGVudHMsIF9leHBlY3Rl
ZF9sZWdhY3lfcmVjZWl2ZXJfaW1wbGVtZW50YXRpb24pCi0KLSAgICAgICAgc3VwZXJjbGFzc19m
aWxlX2NvbnRlbnRzID0gbWVzc2FnZXMuZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKFN0cmluZ0lP
KF9zdXBlcmNsYXNzX21lc3NhZ2VzX2ZpbGVfY29udGVudHMpKQotICAgICAgICBzZWxmLmFzc2Vy
dEdlbmVyYXRlZEZpbGVDb250ZW50c0VxdWFsKHN1cGVyY2xhc3NfZmlsZV9jb250ZW50cywgX2V4
cGVjdGVkX3N1cGVyY2xhc3NfcmVjZWl2ZXJfaW1wbGVtZW50YXRpb24pCi0KLQotY2xhc3MgVW5z
dXBwb3J0ZWRQcmVjb21waWxlckRpcmVjdGl2ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAg
IGRlZiB0ZXN0X2Vycm9yX2F0X2Vsc2Uoc2VsZik6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRS
YWlzZXNSZWdleHAoRXhjZXB0aW9uLCByIkVSUk9SOiAnI2Vsc2UuKicgaXMgbm90IHN1cHBvcnRl
ZCBpbiB0aGUgXCpcLmluIGZpbGVzIik6Ci0gICAgICAgICAgICBtZXNzYWdlcy5nZW5lcmF0ZV9t
ZXNzYWdlX2hhbmRsZXIoU3RyaW5nSU8oImFzZFxuI2Vsc2UgYmxhXG5mb28iKSkKLQotICAgIGRl
ZiB0ZXN0X2Vycm9yX2F0X2VsaWYoc2VsZik6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlz
ZXNSZWdleHAoRXhjZXB0aW9uLCByIkVSUk9SOiAnI2VsaWYuKicgaXMgbm90IHN1cHBvcnRlZCBp
biB0aGUgXCpcLmluIGZpbGVzIik6Ci0gICAgICAgICAgICBtZXNzYWdlcy5nZW5lcmF0ZV9tZXNz
YWdlX2hhbmRsZXIoU3RyaW5nSU8oImFzZFxuI2VsaWYgYmxhXG5mb28iKSkKLQotCi1pZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4oKQpJbmRleDogU291cmNlL1dl
YktpdDIvU2NyaXB0cy93ZWJraXQyL21vZGVsLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1NjcmlwdHMvd2Via2l0Mi9tb2RlbC5weQkocmV2aXNpb24gMTczNDkxKQorKysgU291cmNl
L1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21vZGVsLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYx
ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0j
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
aW1wb3J0IGl0ZXJ0b29scwotCi0KLWNsYXNzIE1lc3NhZ2VSZWNlaXZlcihvYmplY3QpOgotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBzdXBlcmNsYXNzLCBhdHRyaWJ1dGVzLCBtZXNzYWdl
cywgY29uZGl0aW9uKToKLSAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotICAgICAgICBzZWxmLnN1
cGVyY2xhc3MgPSBzdXBlcmNsYXNzCi0gICAgICAgIHNlbGYuYXR0cmlidXRlcyA9IGZyb3plbnNl
dChhdHRyaWJ1dGVzIG9yIFtdKQotICAgICAgICBzZWxmLm1lc3NhZ2VzID0gbWVzc2FnZXMKLSAg
ICAgICAgc2VsZi5jb25kaXRpb24gPSBjb25kaXRpb24KLQotICAgIGRlZiBpdGVycGFyYW1ldGVy
cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGl0ZXJ0b29scy5jaGFpbigocGFyYW1ldGVyIGZvciBt
ZXNzYWdlIGluIHNlbGYubWVzc2FnZXMgZm9yIHBhcmFtZXRlciBpbiBtZXNzYWdlLnBhcmFtZXRl
cnMpLAotICAgICAgICAgICAgKHJlcGx5X3BhcmFtZXRlciBmb3IgbWVzc2FnZSBpbiBzZWxmLm1l
c3NhZ2VzIGlmIG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVycyBmb3IgcmVwbHlfcGFyYW1ldGVyIGlu
IG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVycykpCi0KLSAgICBkZWYgaGFzX2F0dHJpYnV0ZShzZWxm
LCBhdHRyaWJ1dGUpOgotICAgICAgICByZXR1cm4gYXR0cmlidXRlIGluIHNlbGYuYXR0cmlidXRl
cwotCi1jbGFzcyBNZXNzYWdlKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUs
IHBhcmFtZXRlcnMsIHJlcGx5X3BhcmFtZXRlcnMsIGF0dHJpYnV0ZXMsIGNvbmRpdGlvbik6Ci0g
ICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLSAgICAgICAgc2VsZi5wYXJhbWV0ZXJzID0gcGFyYW1l
dGVycwotICAgICAgICBzZWxmLnJlcGx5X3BhcmFtZXRlcnMgPSByZXBseV9wYXJhbWV0ZXJzCi0g
ICAgICAgIHNlbGYuYXR0cmlidXRlcyA9IGZyb3plbnNldChhdHRyaWJ1dGVzIG9yIFtdKQotICAg
ICAgICBzZWxmLmNvbmRpdGlvbiA9IGNvbmRpdGlvbgotCi0gICAgZGVmIGhhc19hdHRyaWJ1dGUo
c2VsZiwgYXR0cmlidXRlKToKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZSBpbiBzZWxmLmF0dHJp
YnV0ZXMKLQotCi1jbGFzcyBQYXJhbWV0ZXIob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwgdHlwZSwgbmFtZSwgYXR0cmlidXRlcz1Ob25lLCBjb25kaXRpb249Tm9uZSk6Ci0gICAgICAg
IHNlbGYudHlwZSA9IHR5cGUKLSAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotICAgICAgICBzZWxm
LmF0dHJpYnV0ZXMgPSBmcm96ZW5zZXQoYXR0cmlidXRlcyBvciBbXSkKLSAgICAgICAgc2VsZi5j
b25kaXRpb24gPSBjb25kaXRpb24KLQotICAgIGRlZiBoYXNfYXR0cmlidXRlKHNlbGYsIGF0dHJp
YnV0ZSk6Ci0gICAgICAgIHJldHVybiBhdHRyaWJ1dGUgaW4gc2VsZi5hdHRyaWJ1dGVzCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvcGFyc2VyLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9wYXJzZXIucHkJKHJldmlzaW9uIDE3MzQ5
MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9wYXJzZXIucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTMyICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
IyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAot
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotaW1wb3J0IHJlCi0KLWZyb20gd2Via2l0MiBpbXBvcnQgbW9kZWwKLQot
Ci1kZWYgY29tYmluZV9jb25kaXRpb24oY29uZGl0aW9ucyk6Ci0gICAgaWYgY29uZGl0aW9uczoK
LSAgICAgICAgaWYgbGVuKGNvbmRpdGlvbnMpID09IDE6Ci0gICAgICAgICAgICByZXR1cm4gY29u
ZGl0aW9uc1swXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIGJyYWNrZXRfaWZf
bmVlZGVkKCcgJiYgJy5qb2luKG1hcChicmFja2V0X2lmX25lZWRlZCwgY29uZGl0aW9ucykpKQot
ICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBOb25lCi0KLQotZGVmIGJyYWNrZXRfaWZfbmVlZGVk
KGNvbmRpdGlvbik6Ci0gICAgaWYgcmUubWF0Y2gocicuKigmJnxcfFx8KS4qJywgY29uZGl0aW9u
KToKLSAgICAgICAgcmV0dXJuICcoJXMpJyAlIGNvbmRpdGlvbgotICAgIGVsc2U6Ci0gICAgICAg
IHJldHVybiBjb25kaXRpb24KLQotCi1kZWYgcGFyc2UoZmlsZSk6Ci0gICAgcmVjZWl2ZXJfYXR0
cmlidXRlcyA9IE5vbmUKLSAgICBkZXN0aW5hdGlvbiA9IE5vbmUKLSAgICBtZXNzYWdlcyA9IFtd
Ci0gICAgY29uZGl0aW9ucyA9IFtdCi0gICAgbWFzdGVyX2NvbmRpdGlvbiA9IE5vbmUKLSAgICBz
dXBlcmNsYXNzID0gW10KLSAgICBmb3IgbGluZSBpbiBmaWxlOgotICAgICAgICBtYXRjaCA9IHJl
LnNlYXJjaChyJ21lc3NhZ2VzIC0+ICg/UDxkZXN0aW5hdGlvbj5bQS1aYS16XzAtOV0rKSBccyoo
Pzo6XHMqKD9QPHN1cGVyY2xhc3M+Lio/KSBccyopPyg/Oig/UDxhdHRyaWJ1dGVzPi4qPylccysp
P3snLCBsaW5lKQotICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgIHJlY2VpdmVyX2F0dHJp
YnV0ZXMgPSBwYXJzZV9hdHRyaWJ1dGVzX3N0cmluZyhtYXRjaC5ncm91cCgnYXR0cmlidXRlcycp
KQotICAgICAgICAgICAgaWYgbWF0Y2guZ3JvdXAoJ3N1cGVyY2xhc3MnKToKLSAgICAgICAgICAg
ICAgICBzdXBlcmNsYXNzID0gbWF0Y2guZ3JvdXAoJ3N1cGVyY2xhc3MnKQotICAgICAgICAgICAg
aWYgY29uZGl0aW9uczoKLSAgICAgICAgICAgICAgICBtYXN0ZXJfY29uZGl0aW9uID0gY29uZGl0
aW9ucwotICAgICAgICAgICAgICAgIGNvbmRpdGlvbnMgPSBbXQotICAgICAgICAgICAgZGVzdGlu
YXRpb24gPSBtYXRjaC5ncm91cCgnZGVzdGluYXRpb24nKQotICAgICAgICAgICAgY29udGludWUK
LSAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjJyk6Ci0gICAgICAgICAgICB0cmltbWVkID0g
bGluZS5yc3RyaXAoKQotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjaWYgJyk6Ci0g
ICAgICAgICAgICAgICAgY29uZGl0aW9ucy5hcHBlbmQodHJpbW1lZFs0Ol0pCi0gICAgICAgICAg
ICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnI2VuZGlmJykgYW5kIGNvbmRpdGlvbnM6Ci0gICAgICAg
ICAgICAgICAgY29uZGl0aW9ucy5wb3AoKQotICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dp
dGgoJyNlbHNlJykgb3IgbGluZS5zdGFydHN3aXRoKCcjZWxpZicpOgotICAgICAgICAgICAgICAg
IHJhaXNlIEV4Y2VwdGlvbigiRVJST1I6ICclcycgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgKi5p
biBmaWxlcyIgJSB0cmltbWVkKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgbWF0Y2gg
PSByZS5zZWFyY2gocicoW0EtWmEtel8wLTldKylcKCguKj8pXCkoPzooPzpccystPlxzKylcKCgu
Kj8pXCkpPyg/OlxzKyguKikpPycsIGxpbmUpCi0gICAgICAgIGlmIG1hdGNoOgotICAgICAgICAg
ICAgbmFtZSwgcGFyYW1ldGVyc19zdHJpbmcsIHJlcGx5X3BhcmFtZXRlcnNfc3RyaW5nLCBhdHRy
aWJ1dGVzX3N0cmluZyA9IG1hdGNoLmdyb3VwcygpCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXJz
X3N0cmluZzoKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gcGFyc2VfcGFyYW1ldGVyc19z
dHJpbmcocGFyYW1ldGVyc19zdHJpbmcpCi0gICAgICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBp
biBwYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuY29uZGl0aW9uID0g
Y29tYmluZV9jb25kaXRpb24oY29uZGl0aW9ucykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgcGFyYW1ldGVycyA9IFtdCi0KLSAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBwYXJz
ZV9hdHRyaWJ1dGVzX3N0cmluZyhhdHRyaWJ1dGVzX3N0cmluZykKLQotICAgICAgICAgICAgaWYg
cmVwbHlfcGFyYW1ldGVyc19zdHJpbmc6Ci0gICAgICAgICAgICAgICAgcmVwbHlfcGFyYW1ldGVy
cyA9IHBhcnNlX3BhcmFtZXRlcnNfc3RyaW5nKHJlcGx5X3BhcmFtZXRlcnNfc3RyaW5nKQotICAg
ICAgICAgICAgICAgIGZvciByZXBseV9wYXJhbWV0ZXIgaW4gcmVwbHlfcGFyYW1ldGVyczoKLSAg
ICAgICAgICAgICAgICAgICAgcmVwbHlfcGFyYW1ldGVyLmNvbmRpdGlvbiA9IGNvbWJpbmVfY29u
ZGl0aW9uKGNvbmRpdGlvbnMpCi0gICAgICAgICAgICBlbGlmIHJlcGx5X3BhcmFtZXRlcnNfc3Ry
aW5nID09ICcnOgotICAgICAgICAgICAgICAgIHJlcGx5X3BhcmFtZXRlcnMgPSBbXQotICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXBseV9wYXJhbWV0ZXJzID0gTm9uZQotCi0g
ICAgICAgICAgICBtZXNzYWdlcy5hcHBlbmQobW9kZWwuTWVzc2FnZShuYW1lLCBwYXJhbWV0ZXJz
LCByZXBseV9wYXJhbWV0ZXJzLCBhdHRyaWJ1dGVzLCBjb21iaW5lX2NvbmRpdGlvbihjb25kaXRp
b25zKSkpCi0gICAgcmV0dXJuIG1vZGVsLk1lc3NhZ2VSZWNlaXZlcihkZXN0aW5hdGlvbiwgc3Vw
ZXJjbGFzcywgcmVjZWl2ZXJfYXR0cmlidXRlcywgbWVzc2FnZXMsIGNvbWJpbmVfY29uZGl0aW9u
KG1hc3Rlcl9jb25kaXRpb24pKQotCi0KLWRlZiBwYXJzZV9hdHRyaWJ1dGVzX3N0cmluZyhhdHRy
aWJ1dGVzX3N0cmluZyk6Ci0gICAgaWYgbm90IGF0dHJpYnV0ZXNfc3RyaW5nOgotICAgICAgICBy
ZXR1cm4gTm9uZQotICAgIHJldHVybiBhdHRyaWJ1dGVzX3N0cmluZy5zcGxpdCgpCi0KLQotZGVm
IHNwbGl0X3BhcmFtZXRlcnNfc3RyaW5nKHBhcmFtZXRlcnNfc3RyaW5nKToKLSAgICBwYXJhbWV0
ZXJzID0gW10KLSAgICBjdXJyZW50X3BhcmFtZXRlcl9zdHJpbmcgPSAnJwotCi0gICAgbmVzdF9s
ZXZlbCA9IDAKLSAgICBmb3IgY2hhcmFjdGVyIGluIHBhcmFtZXRlcnNfc3RyaW5nOgotICAgICAg
ICBpZiBjaGFyYWN0ZXIgPT0gJywnIGFuZCBuZXN0X2xldmVsID09IDA6Ci0gICAgICAgICAgICBw
YXJhbWV0ZXJzLmFwcGVuZChjdXJyZW50X3BhcmFtZXRlcl9zdHJpbmcpCi0gICAgICAgICAgICBj
dXJyZW50X3BhcmFtZXRlcl9zdHJpbmcgPSAnJwotICAgICAgICAgICAgY29udGludWUKLQotICAg
ICAgICBpZiBjaGFyYWN0ZXIgPT0gJzwnOgotICAgICAgICAgICAgbmVzdF9sZXZlbCArPSAxCi0g
ICAgICAgIGVsaWYgY2hhcmFjdGVyID09ICc+JzoKLSAgICAgICAgICAgIG5lc3RfbGV2ZWwgLT0g
MQotCi0gICAgICAgIGN1cnJlbnRfcGFyYW1ldGVyX3N0cmluZyArPSBjaGFyYWN0ZXIKLQotICAg
IHBhcmFtZXRlcnMuYXBwZW5kKGN1cnJlbnRfcGFyYW1ldGVyX3N0cmluZykKLSAgICByZXR1cm4g
cGFyYW1ldGVycwotCi1kZWYgcGFyc2VfcGFyYW1ldGVyc19zdHJpbmcocGFyYW1ldGVyc19zdHJp
bmcpOgotICAgIHBhcmFtZXRlcnMgPSBbXQotCi0gICAgZm9yIHBhcmFtZXRlcl9zdHJpbmcgaW4g
c3BsaXRfcGFyYW1ldGVyc19zdHJpbmcocGFyYW1ldGVyc19zdHJpbmcpOgotICAgICAgICBtYXRj
aCA9IHJlLnNlYXJjaChyJ1xzKig/OlxbKD9QPGF0dHJpYnV0ZXM+Lio/KVxdXHMrKT8oP1A8dHlw
ZV9hbmRfbmFtZT4uKiknLCBwYXJhbWV0ZXJfc3RyaW5nKQotICAgICAgICBhdHRyaWJ1dGVzX3N0
cmluZywgdHlwZV9hbmRfbmFtZV9zdHJpbmcgPSBtYXRjaC5ncm91cCgnYXR0cmlidXRlcycsICd0
eXBlX2FuZF9uYW1lJykKLSAgICAgICAgcGFyYW1ldGVyX3R5cGUsIHBhcmFtZXRlcl9uYW1lID0g
dHlwZV9hbmRfbmFtZV9zdHJpbmcucnNwbGl0KCcgJywgMSkKLSAgICAgICAgcGFyYW1ldGVycy5h
cHBlbmQobW9kZWwuUGFyYW1ldGVyKHR5cGU9cGFyYW1ldGVyX3R5cGUsIG5hbWU9cGFyYW1ldGVy
X25hbWUsIGF0dHJpYnV0ZXM9cGFyc2VfYXR0cmlidXRlc19zdHJpbmcoYXR0cmlidXRlc19zdHJp
bmcpKSkKLSAgICByZXR1cm4gcGFyYW1ldGVycwpJbmRleDogU291cmNlL1dlYktpdDIvU2NyaXB0
cy93ZWJraXQyL3Rlc3QtbGVnYWN5LW1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi90ZXN0LWxlZ2FjeS1tZXNzYWdlcy5pbgkocmV2aXNpb24g
MTczNDkxKQorKysgU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL3Rlc3QtbGVnYWN5LW1l
c3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc3ICswLDAgQEAKLSMgQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0j
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMg
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmIEVOQUJMRShXRUJLSVQyKQotI2lmIE5FU1RF
RF9NQVNURVJfQ09ORElUSU9OIHx8IE1BU1RFUl9PUiAmJiBNQVNURVJfQU5ECi0KLW1lc3NhZ2Vz
IC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewotICAgIExvYWRVUkwoU3RyaW5nIHVybCkKLSNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIExvYWRTb21ldGhpbmcoU3RyaW5nIHVybCkKLSNp
ZiBORVNURURfTUVTU0FHRV9DT05ESVRJT04gfHwgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElP
TgotICAgIFRvdWNoRXZlbnQoV2ViS2l0OjpXZWJUb3VjaEV2ZW50IGV2ZW50KQotI2VuZGlmCi0j
aWYgTkVTVEVEX01FU1NBR0VfQ09ORElUSU9OICYmIFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJ
T04KLSAgICBBZGRFdmVudChXZWJLaXQ6OldlYlRvdWNoRXZlbnQgZXZlbnQpCi0jZW5kaWYKLSAg
ICBMb2FkU29tZXRoaW5nRWxzZShTdHJpbmcgdXJsKQotI2VuZGlmCi0gICAgRGlkUmVjZWl2ZVBv
bGljeURlY2lzaW9uKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IGxpc3RlbmVySUQsIHVpbnQz
Ml90IHBvbGljeUFjdGlvbikKLSAgICBDbG9zZSgpCi0KLSAgICBQcmVmZXJlbmNlc0RpZENoYW5n
ZShXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmUgc3RvcmUpCi0gICAgU2VuZERvdWJsZUFuZEZs
b2F0KGRvdWJsZSBkLCBmbG9hdCBmKQotICAgIFNlbmRJbnRzKFZlY3Rvcjx1aW50NjRfdD4gaW50
cywgVmVjdG9yPFZlY3Rvcjx1aW50NjRfdD4+IGludFZlY3RvcnMpCi0KLSAgICBDcmVhdGVQbHVn
aW4odWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgV2ViS2l0OjpQbHVnaW46OlBhcmFtZXRlcnMg
cGFyYW1ldGVycykgLT4gKGJvb2wgcmVzdWx0KQotICAgIFJ1bkphdmFTY3JpcHRBbGVydCh1aW50
NjRfdCBmcmFtZUlELCBTdHJpbmcgbWVzc2FnZSkgLT4gKCkKLSAgICBHZXRQbHVnaW5zKGJvb2wg
cmVmcmVzaCkgLT4gKFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiBwbHVnaW5zKQotICAgIEdl
dFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKFN0cmluZyBwbHVnaW5QYXRoKSAtPiAoSVBDOjpDb25u
ZWN0aW9uOjpIYW5kbGUgY29ubmVjdGlvbkhhbmRsZSkgRGVsYXllZAotCi0gICAgVGVzdE11bHRp
cGxlQXR0cmlidXRlcygpIC0+ICgpIFdhbnRzQ29ubmVjdGlvbiBEZWxheWVkCi0KLSAgICBUZXN0
UGFyYW1ldGVyQXR0cmlidXRlcyhbQXR0cmlidXRlT25lIEF0dHJpYnV0ZVR3b10gdWludDY0X3Qg
Zm9vLCBkb3VibGUgYmFyLCBbQXR0cmlidXRlVGhyZWVdIGRvdWJsZSBiYXopCi0KLSAgICBUZW1w
bGF0ZVRlc3QoSGFzaE1hcDxTdHJpbmcsIHN0ZDo6cGFpcjxTdHJpbmcsIHVpbnQ2NF90Pj4gYSkK
LQotICAgIFNldFZpZGVvTGF5ZXJJRChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQgdmlkZW9MYXllcklEKQotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIERpZENyZWF0ZVdl
YlByb2Nlc3NDb25uZWN0aW9uKElQQzo6TWFjaFBvcnQgY29ubmVjdGlvbklkZW50aWZpZXIpCi0j
ZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAjIEtleWJvYXJkIHN1cHBvcnQKLSAgICBJ
bnRlcnByZXRLZXlFdmVudCh1aW50MzJfdCB0eXBlKSAtPiAoVmVjdG9yPFdlYkNvcmU6OktleXBy
ZXNzQ29tbWFuZD4gY29tbWFuZE5hbWUpCi0jZW5kaWYKLQotI2lmIEVOQUJMRShERVBSRUNBVEVE
X0ZFQVRVUkUpCi0gICAgRGVwcmVjYXRlZE9wZXJhdGlvbihJUEM6OkR1bW15VHlwZSBkdW1teSkK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFUVVJFKQotICAgIEV4cGVyaW1l
bnRhbE9wZXJhdGlvbihJUEM6OkR1bW15VHlwZSBkdW1teSkKLSNlbmRpZgotfQotCi0jZW5kaWYK
LSNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL3Rlc3QtbWVzc2Fn
ZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL3Rlc3Qt
bWVzc2FnZXMuaW4JKHJldmlzaW9uIDE3MzQ5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMv
d2Via2l0Mi90ZXN0LW1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc3ICswLDAgQEAK
LSMgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMK
LSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
LSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmIEVOQUJMRShXRUJL
SVQyKQotI2lmIE5FU1RFRF9NQVNURVJfQ09ORElUSU9OIHx8IE1BU1RFUl9PUiAmJiBNQVNURVJf
QU5ECi0KLW1lc3NhZ2VzIC0+IFdlYlBhZ2UgewotICAgIExvYWRVUkwoU3RyaW5nIHVybCkKLSNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIExvYWRTb21ldGhpbmcoU3RyaW5nIHVybCkKLSNp
ZiBORVNURURfTUVTU0FHRV9DT05ESVRJT04gfHwgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElP
TgotICAgIFRvdWNoRXZlbnQoV2ViS2l0OjpXZWJUb3VjaEV2ZW50IGV2ZW50KQotI2VuZGlmCi0j
aWYgTkVTVEVEX01FU1NBR0VfQ09ORElUSU9OICYmIFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJ
T04KLSAgICBBZGRFdmVudChXZWJLaXQ6OldlYlRvdWNoRXZlbnQgZXZlbnQpCi0jZW5kaWYKLSAg
ICBMb2FkU29tZXRoaW5nRWxzZShTdHJpbmcgdXJsKQotI2VuZGlmCi0gICAgRGlkUmVjZWl2ZVBv
bGljeURlY2lzaW9uKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IGxpc3RlbmVySUQsIHVpbnQz
Ml90IHBvbGljeUFjdGlvbikKLSAgICBDbG9zZSgpCi0KLSAgICBQcmVmZXJlbmNlc0RpZENoYW5n
ZShXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmUgc3RvcmUpCi0gICAgU2VuZERvdWJsZUFuZEZs
b2F0KGRvdWJsZSBkLCBmbG9hdCBmKQotICAgIFNlbmRJbnRzKFZlY3Rvcjx1aW50NjRfdD4gaW50
cywgVmVjdG9yPFZlY3Rvcjx1aW50NjRfdD4+IGludFZlY3RvcnMpCi0KLSAgICBDcmVhdGVQbHVn
aW4odWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgV2ViS2l0OjpQbHVnaW46OlBhcmFtZXRlcnMg
cGFyYW1ldGVycykgLT4gKGJvb2wgcmVzdWx0KQotICAgIFJ1bkphdmFTY3JpcHRBbGVydCh1aW50
NjRfdCBmcmFtZUlELCBTdHJpbmcgbWVzc2FnZSkgLT4gKCkKLSAgICBHZXRQbHVnaW5zKGJvb2wg
cmVmcmVzaCkgLT4gKFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiBwbHVnaW5zKQotICAgIEdl
dFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKFN0cmluZyBwbHVnaW5QYXRoKSAtPiAoSVBDOjpDb25u
ZWN0aW9uOjpIYW5kbGUgY29ubmVjdGlvbkhhbmRsZSkgRGVsYXllZAotCi0gICAgVGVzdE11bHRp
cGxlQXR0cmlidXRlcygpIC0+ICgpIFdhbnRzQ29ubmVjdGlvbiBEZWxheWVkCi0KLSAgICBUZXN0
UGFyYW1ldGVyQXR0cmlidXRlcyhbQXR0cmlidXRlT25lIEF0dHJpYnV0ZVR3b10gdWludDY0X3Qg
Zm9vLCBkb3VibGUgYmFyLCBbQXR0cmlidXRlVGhyZWVdIGRvdWJsZSBiYXopCi0KLSAgICBUZW1w
bGF0ZVRlc3QoSGFzaE1hcDxTdHJpbmcsIHN0ZDo6cGFpcjxTdHJpbmcsIHVpbnQ2NF90Pj4gYSkK
LQotICAgIFNldFZpZGVvTGF5ZXJJRChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQgdmlkZW9MYXllcklEKQotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIERpZENyZWF0ZVdl
YlByb2Nlc3NDb25uZWN0aW9uKElQQzo6TWFjaFBvcnQgY29ubmVjdGlvbklkZW50aWZpZXIpCi0j
ZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAjIEtleWJvYXJkIHN1cHBvcnQKLSAgICBJ
bnRlcnByZXRLZXlFdmVudCh1aW50MzJfdCB0eXBlKSAtPiAoVmVjdG9yPFdlYkNvcmU6OktleXBy
ZXNzQ29tbWFuZD4gY29tbWFuZE5hbWUpCi0jZW5kaWYKLQotI2lmIEVOQUJMRShERVBSRUNBVEVE
X0ZFQVRVUkUpCi0gICAgRGVwcmVjYXRlZE9wZXJhdGlvbihJUEM6OkR1bW15VHlwZSBkdW1teSkK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFUVVJFKQotICAgIEV4cGVyaW1l
bnRhbE9wZXJhdGlvbihJUEM6OkR1bW15VHlwZSBkdW1teSkKLSNlbmRpZgotfQotCi0jZW5kaWYK
LSNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL3Rlc3Qtc3VwZXJj
bGFzcy1tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dl
YmtpdDIvdGVzdC1zdXBlcmNsYXNzLW1lc3NhZ2VzLmluCShyZXZpc2lvbiAxNzM0OTEpCisrKyBT
b3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvdGVzdC1zdXBlcmNsYXNzLW1lc3NhZ2VzLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDI1ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotbWVzc2FnZXMgLT4gV2ViUGFnZSA6IFdlYlBhZ2VCYXNlIHsKLSAg
ICBMb2FkVVJMKFN0cmluZyB1cmwpCi19CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dl
YmtpdC9tZXNzYWdlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dl
YmtpdC9tZXNzYWdlcy5weQkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYktpdDIvU2NyaXB0
cy93ZWJraXQvbWVzc2FnZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKIGlt
cG9ydCBjb2xsZWN0aW9ucwogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCi1mcm9tIHdlYmtpdDIgaW1w
b3J0IHBhcnNlcgorZnJvbSB3ZWJraXQgaW1wb3J0IHBhcnNlcgogCiBXQU5UU19DT05ORUNUSU9O
X0FUVFJJQlVURSA9ICdXYW50c0Nvbm5lY3Rpb24nCiBMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRF
ID0gJ0xlZ2FjeVJlY2VpdmVyJwpJbmRleDogU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQv
cGFyc2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0L3Bh
cnNlci5weQkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQv
cGFyc2VyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAKIGltcG9ydCByZQog
Ci1mcm9tIHdlYmtpdDIgaW1wb3J0IG1vZGVsCitmcm9tIHdlYmtpdCBpbXBvcnQgbW9kZWwKIAog
CiBkZWYgY29tYmluZV9jb25kaXRpb24oY29uZGl0aW9ucyk6CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzM0
OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTE4OTgsNyArMTg5OCw3IEBACiAJCTFBMDdEMkY3MTkxOUIzNjUw
MEVDREExNiAvKiBDb3B5IE1lc3NhZ2UgR2VuZXJhdGlvbiBTY3JpcHRzICovID0gewogCQkJaXNh
ID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7Ci0JCQlkc3RQYXRoID0gUHJpdmF0ZUhlYWRlcnMvd2Via2l0MjsKKwkJCWRzdFBhdGggPSBQ
cml2YXRlSGVhZGVycy9TY3JpcHRzL3dlYmtpdDsKIAkJCWRzdFN1YmZvbGRlclNwZWMgPSAxOwog
CQkJZmlsZXMgPSAoCiAJCQkJMUEwN0QyRjgxOTE5QjNBOTAwRUNEQTE2IC8qIF9faW5pdF9fLnB5
IGluIENvcHkgTWVzc2FnZSBHZW5lcmF0aW9uIFNjcmlwdHMgKi8sCkBAIC0yMDMwLDEwICsyMDMw
LDEwIEBACiAJCTBGOTMxQzFBMThDNTcxMTkwMERCQTdDMyAvKiBTY3JvbGxpbmdUcmVlT3ZlcmZs
b3dTY3JvbGxpbmdOb2RlSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaDsgcGF0aCA9IFNjcm9sbGluZy9p
b3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjkzMUMxQjE4QzU3MTE5MDBEQkE3QzMgLyogU2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW07IHBh
dGggPSBTY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjY1OTIyMTIwOEI0REIwMDQ0ODE2
QyAvKiBEcmF3aW5nQXJlYUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RHJhd2luZ0FyZWFJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQzA4NTZF
MTg3Q0UwQTkwMDc4MEQ4NiAvKiBfX2luaXRfXy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IF9faW5p
dF9fLnB5OyBwYXRoID0gd2Via2l0Mi9fX2luaXRfXy5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEZDMDg1NkYxODdDRTBBOTAwNzgwRDg2IC8qIG1lc3NhZ2VzLnB5ICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0
aG9uOyBuYW1lID0gbWVzc2FnZXMucHk7IHBhdGggPSB3ZWJraXQyL21lc3NhZ2VzLnB5OyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkMwODU3MDE4N0NFMEE5MDA3ODBEODYgLyogbW9k
ZWwucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBtb2RlbC5weTsgcGF0aCA9IHdlYmtpdDIvbW9kZWwu
cHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQzA4NTcxMTg3Q0UwQTkwMDc4MEQ4
NiAvKiBwYXJzZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBwYXJzZXIucHk7IHBhdGggPSB3ZWJr
aXQyL3BhcnNlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDMDg1NkUxODdD
RTBBOTAwNzgwRDg2IC8qIF9faW5pdF9fLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gX19pbml0X18u
cHk7IHBhdGggPSB3ZWJraXQvX19pbml0X18ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGQzA4NTZGMTg3Q0UwQTkwMDc4MEQ4NiAvKiBtZXNzYWdlcy5weSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsg
bmFtZSA9IG1lc3NhZ2VzLnB5OyBwYXRoID0gd2Via2l0L21lc3NhZ2VzLnB5OyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkMwODU3MDE4N0NFMEE5MDA3ODBEODYgLyogbW9kZWwucHkg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5weXRob247IG5hbWUgPSBtb2RlbC5weTsgcGF0aCA9IHdlYmtpdC9tb2RlbC5weTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDMDg1NzExODdDRTBBOTAwNzgwRDg2IC8qIHBh
cnNlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IHBhcnNlci5weTsgcGF0aCA9IHdlYmtpdC9wYXJz
ZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0I0RTM2MThCQkUwNDQwMDBG
Q0ZDOSAvKiBQYWdlQ2xpZW50SW1wbElPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBQYWdlQ2xpZW50SW1wbElPUy5oOyBwYXRoID0gaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0I0RTM3MThCQkUwNDQwMDBGQ0ZDOSAv
KiBQYWdlQ2xpZW50SW1wbElPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFBhZ2VDbGllbnRJbXBsSU9TLm1tOyBwYXRoID0gaW9zL1BhZ2VDbGllbnRJbXBsSU9T
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNCNEUzODE4QkJFMDQ0MDAwRkNG
QzkgLyogV0tBY3Rpb25TaGVldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
S0FjdGlvblNoZWV0Lmg7IHBhdGggPSBpb3MvV0tBY3Rpb25TaGVldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNzg0OCw3ICs3ODQ4LDYgQEAKIAkJCWJ1aWxkQ29uZmlndXJhdGlv
bkxpc3QgPSAxQTYyODBFMzE5MTk5N0JFMDA2QUQ5RjkgLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIldlYktpdDIiICovOwogCQkJYnVpbGRQaGFzZXMgPSAo
CiAJCQkJMUFEQUUxMzAxOTE5QTlDNjAwRjQ4RTIxIC8qIFVwZGF0ZSBJbmZvLnBsaXN0IHdpdGgg
dmVyc2lvbiBpbmZvcm1hdGlvbiAqLywKLQkJCQkxQTA3RDJGNzE5MTlCMzY1MDBFQ0RBMTYgLyog
Q29weSBNZXNzYWdlIEdlbmVyYXRpb24gU2NyaXB0cyAqLywKIAkJCQkxQTYyODBDQjE5MTk5N0JE
MDA2QUQ5RjkgLyogU291cmNlcyAqLywKIAkJCQkxQTYyODBDQzE5MTk5N0JEMDA2QUQ5RjkgLyog
RnJhbWV3b3JrcyAqLywKIAkJCQkxQTYyODBDRDE5MTk5N0JEMDA2QUQ5RjkgLyogSGVhZGVycyAq
LywKQEAgLTc5ODUsNyArNzk4NCw3IEBACiAJCQkJMUExRDIxMTUxOTFEOTYzODAwMDE2MTlGIC8q
IFJld3JpdGUgQXZhaWxhYmlsaXR5IE1hY3JvcyBpbiBGcmFtZXdvcmsgSGVhZGVycyAqLywKIAkJ
CQk4REMyRUY1MjA0ODZBNjk0MDA5OEIyMTYgLyogUmVzb3VyY2VzICovLAogCQkJCTdDQjE2RkVF
MTcyNEJBMDUwMDdBMEE5NSAvKiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLywKLQkJ
CQk1RDFBMjM5MjE1RTc2MDU5MDAyM0U5ODEgLyogUmVtb3ZlIENvbXBpbGVkIFB5dGhvbiBGaWxl
cyAqLywKKwkJCQkxQTA3RDJGNzE5MTlCMzY1MDBFQ0RBMTYgLyogQ29weSBNZXNzYWdlIEdlbmVy
YXRpb24gU2NyaXB0cyAqLywKIAkJCQk4REMyRUY1NDA0ODZBNjk0MDA5OEIyMTYgLyogU291cmNl
cyAqLywKIAkJCQk4REMyRUY1NjA0ODZBNjk0MDA5OEIyMTYgLyogRnJhbWV3b3JrcyAqLywKIAkJ
CQk1REY0MDhDNTEzMURENDY3MDAxMzAwNzEgLyogQ2hlY2sgRm9yIFdlYWsgVlRhYmxlcyBhbmQg
RXh0ZXJuYWxzICovLApAQCAtODQ4NiwyMCArODQ4NSw2IEBACiAJCQlzaGVsbFBhdGggPSAvYmlu
L3NoOwogCQkJc2hlbGxTY3JpcHQgPSAiV0tCQVNFX0g9JHtUQVJHRVRfQlVJTERfRElSfS8ke1BS
SVZBVEVfSEVBREVSU19GT0xERVJfUEFUSH0vV0tCYXNlLmhcblxudW5pZmRlZiAtQiAtRF9fQVBQ
TEVfXyAtVUJVSUxESU5HX0dUS19fIC1VV1RGX1VTRV9TT1VQIC1VQlVJTERJTkdfRUZMX18gLVVC
VUlMRElOR19RVF9fIC1vICR7V0tCQVNFX0h9LnVuaWZkZWYgJHtXS0JBU0VfSH1cblxuY2FzZSAk
PyBpblxuMClcbiAgICBybSAke1dLQkFTRV9IfS51bmlmZGVmXG4gICAgOztcbjEpXG4gICAgbXYg
JHtXS0JBU0VfSH17LnVuaWZkZWYsfVxuICAgIDs7XG4qKVxuICAgIGV4aXQgMVxuZXNhY1xuIjsK
IAkJfTsKLQkJNUQxQTIzOTIxNUU3NjA1OTAwMjNFOTgxIC8qIFJlbW92ZSBDb21waWxlZCBQeXRo
b24gRmlsZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQli
dWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJaW5w
dXRQYXRocyA9ICgKLQkJCSk7Ci0JCQluYW1lID0gIlJlbW92ZSBDb21waWxlZCBQeXRob24gRmls
ZXMiOwotCQkJb3V0cHV0UGF0aHMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7Ci0JCQlzaGVsbFBhdGggPSAvYmluL3NoOwotCQkJc2hlbGxTY3Jp
cHQgPSAiZmluZCBcIiR7QlVJTFRfUFJPRFVDVFNfRElSfS8ke1BSSVZBVEVfSEVBREVSU19GT0xE
RVJfUEFUSH1cIiAtbmFtZSAnKi5weWMnIC1kZWxldGUiOwotCQl9OwogCQk1REY0MDhDNTEzMURE
NDY3MDAxMzAwNzEgLyogQ2hlY2sgRm9yIFdlYWsgVlRhYmxlcyBhbmQgRXh0ZXJuYWxzICovID0g
ewogCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsK
</data>
<flag name="review"
          id="262794"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>